From 4d8d554a8999a1780118ec1c36b93dc6f77668a3 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Sat, 17 Feb 2018 21:28:41 +0000 Subject: [PATCH] Import grub2_2.02+dfsg1.orig.tar.xz [dgit import orig grub2_2.02+dfsg1.orig.tar.xz] --- ABOUT-NLS | 223 + AUTHORS | 23 + BUGS | 7 + COPYING | 674 + ChangeLog | 3795 ++ ChangeLog-2015 | 55487 ++++++++++++++++ INSTALL | 294 + Makefile.am | 481 + Makefile.in | 12954 ++++ Makefile.util.am | 1586 + Makefile.util.def | 1351 + Makefile.utilgcry.def | 31 + NEWS | 703 + README | 20 + THANKS | 38 + TODO | 9 + acinclude.m4 | 477 + aclocal.m4 | 1268 + asm-tests/arm.S | 20 + asm-tests/i386-pc.S | 18 + asm-tests/i386.S | 4 + asm-tests/mips.S | 11 + asm-tests/powerpc.S | 8 + asm-tests/sparc64.S | 9 + autogen.sh | 87 + build-aux/compile | 347 + build-aux/config.guess | 1420 + build-aux/config.rpath | 690 + build-aux/config.sub | 1799 + build-aux/depcomp | 791 + build-aux/install-sh | 527 + build-aux/mdate-sh | 224 + build-aux/missing | 215 + build-aux/snippet/_Noreturn.h | 10 + build-aux/snippet/arg-nonnull.h | 26 + build-aux/snippet/c++defs.h | 271 + build-aux/snippet/warn-on-use.h | 109 + build-aux/test-driver | 139 + build-aux/texinfo.tex | 10079 +++ conf/Makefile.common | 136 + conf/Makefile.extra-dist | 140 + conf/i386-cygwin-img-ld.sc | 53 + config-util.h.in | 1680 + config.h.in | 67 + configure | 30763 +++++++++ configure.ac | 2074 + coreboot.cfg | 3 + docs/Makefile.am | 9 + docs/Makefile.in | 1562 + docs/autoiso.cfg | 244 + docs/fdl.texi | 452 + docs/font_char_metrics.png | Bin 0 -> 16443 bytes docs/font_char_metrics.txt | 1 + docs/grub-dev.info | 2515 + docs/grub-dev.texi | 1968 + docs/grub.cfg | 76 + docs/grub.info | 7463 +++ docs/grub.texi | 6590 ++ docs/man/grub-bios-setup.h2m | 6 + docs/man/grub-editenv.h2m | 5 + docs/man/grub-emu.h2m | 6 + docs/man/grub-file.h2m | 2 + docs/man/grub-fstest.h2m | 4 + docs/man/grub-glue-efi.h2m | 4 + docs/man/grub-install.h2m | 6 + docs/man/grub-kbdcomp.h2m | 10 + docs/man/grub-macbless.h2m | 4 + docs/man/grub-macho2img.h2m | 4 + docs/man/grub-menulst2cfg.h2m | 4 + docs/man/grub-mkconfig.h2m | 4 + docs/man/grub-mkfont.h2m | 4 + docs/man/grub-mkimage.h2m | 6 + docs/man/grub-mklayout.h2m | 10 + docs/man/grub-mknetdir.h2m | 4 + docs/man/grub-mkpasswd-pbkdf2.h2m | 4 + docs/man/grub-mkrelpath.h2m | 4 + docs/man/grub-mkrescue.h2m | 4 + docs/man/grub-mkstandalone.h2m | 4 + docs/man/grub-mount.h2m | 2 + docs/man/grub-ofpathname.h2m | 4 + docs/man/grub-pe2elf.h2m | 4 + docs/man/grub-probe.h2m | 4 + docs/man/grub-reboot.h2m | 5 + docs/man/grub-render-label.h2m | 3 + docs/man/grub-script-check.h2m | 4 + docs/man/grub-set-default.h2m | 5 + docs/man/grub-sparc64-setup.h2m | 6 + docs/man/grub-syslinux2cfg.h2m | 4 + docs/mdate-sh | 205 + docs/osdetect.cfg | 331 + docs/stamp-1 | 4 + docs/stamp-vti | 4 + docs/texinfo.tex | 8959 +++ docs/version-dev.texi | 4 + docs/version.texi | 4 + geninit.sh | 69 + gentpl.py | 903 + grub-core/Makefile.am | 447 + grub-core/Makefile.core.am | 20872 ++++++ grub-core/Makefile.core.def | 2357 + grub-core/Makefile.gcry.def | 157 + grub-core/Makefile.in | 42674 ++++++++++++ grub-core/boot/decompressor/minilib.c | 93 + grub-core/boot/decompressor/none.c | 42 + grub-core/boot/decompressor/xz.c | 60 + grub-core/boot/i386/pc/boot.S | 542 + grub-core/boot/i386/pc/cdboot.S | 173 + grub-core/boot/i386/pc/diskboot.S | 378 + grub-core/boot/i386/pc/lnxboot.S | 295 + grub-core/boot/i386/pc/lzma_decode.S | 614 + grub-core/boot/i386/pc/pxeboot.S | 42 + grub-core/boot/i386/pc/startup_raw.S | 360 + grub-core/boot/i386/qemu/boot.S | 74 + grub-core/boot/mips/loongson/fuloong2f.S | 2 + grub-core/boot/mips/loongson/fwstart.S | 756 + grub-core/boot/mips/startup_raw.S | 300 + grub-core/boot/powerpc/bootinfo.txt.in | 73 + grub-core/boot/powerpc/grub.chrp.in | 172 + grub-core/boot/sparc64/ieee1275/boot.S | 230 + grub-core/boot/sparc64/ieee1275/diskboot.S | 145 + grub-core/bus/bonito.c | 176 + grub-core/bus/cs5536.c | 381 + grub-core/bus/emu/pci.c | 78 + grub-core/bus/i386/ieee1275/pci.c | 42 + grub-core/bus/pci.c | 173 + grub-core/bus/usb/ehci.c | 2012 + grub-core/bus/usb/ohci.c | 1468 + grub-core/bus/usb/serial/common.c | 139 + grub-core/bus/usb/serial/ftdi.c | 218 + grub-core/bus/usb/serial/pl2303.c | 231 + grub-core/bus/usb/serial/usbdebug_late.c | 93 + grub-core/bus/usb/uhci.c | 871 + grub-core/bus/usb/usb.c | 337 + grub-core/bus/usb/usbhub.c | 756 + grub-core/bus/usb/usbtrans.c | 462 + grub-core/commands/acpi.c | 790 + grub-core/commands/acpihalt.c | 454 + grub-core/commands/arc/lsdev.c | 57 + grub-core/commands/blocklist.c | 160 + grub-core/commands/boot.c | 195 + grub-core/commands/boottime.c | 65 + grub-core/commands/cacheinfo.c | 62 + grub-core/commands/cat.c | 170 + grub-core/commands/cmp.c | 119 + grub-core/commands/configfile.c | 98 + grub-core/commands/date.c | 148 + grub-core/commands/echo.c | 141 + grub-core/commands/efi/efifwsetup.c | 90 + grub-core/commands/efi/fixvideo.c | 114 + grub-core/commands/efi/loadbios.c | 222 + grub-core/commands/efi/lsefi.c | 153 + grub-core/commands/efi/lsefimmap.c | 160 + grub-core/commands/efi/lsefisystab.c | 121 + grub-core/commands/efi/lssal.c | 169 + grub-core/commands/eval.c | 71 + grub-core/commands/extcmd.c | 118 + grub-core/commands/file.c | 679 + grub-core/commands/file32.c | 5 + grub-core/commands/file64.c | 5 + grub-core/commands/fileXX.c | 74 + grub-core/commands/gptsync.c | 266 + grub-core/commands/halt.c | 47 + grub-core/commands/hashsum.c | 327 + grub-core/commands/hdparm.c | 447 + grub-core/commands/help.c | 153 + grub-core/commands/hexdump.c | 133 + grub-core/commands/i386/cmosdump.c | 64 + grub-core/commands/i386/cmostest.c | 124 + .../commands/i386/coreboot/cb_timestamps.c | 126 + grub-core/commands/i386/coreboot/cbls.c | 143 + grub-core/commands/i386/cpuid.c | 125 + grub-core/commands/i386/pc/drivemap.c | 428 + grub-core/commands/i386/pc/drivemap_int13h.S | 124 + grub-core/commands/i386/pc/halt.c | 126 + grub-core/commands/i386/pc/lsapm.c | 115 + grub-core/commands/i386/pc/play.c | 197 + grub-core/commands/i386/pc/sendkey.c | 387 + grub-core/commands/ieee1275/suspend.c | 51 + grub-core/commands/iorw.c | 155 + grub-core/commands/keylayouts.c | 307 + grub-core/commands/keystatus.c | 113 + grub-core/commands/legacycfg.c | 893 + grub-core/commands/loadenv.c | 468 + grub-core/commands/ls.c | 293 + grub-core/commands/lsacpi.c | 314 + grub-core/commands/lsmmap.c | 85 + grub-core/commands/lspci.c | 238 + grub-core/commands/macbless.c | 235 + grub-core/commands/memrw.c | 157 + grub-core/commands/menuentry.c | 337 + grub-core/commands/minicmd.c | 221 + grub-core/commands/mips/loongson/lsspd.c | 103 + grub-core/commands/nativedisk.c | 330 + grub-core/commands/parttool.c | 351 + grub-core/commands/password.c | 93 + grub-core/commands/password_pbkdf2.c | 209 + grub-core/commands/pcidump.c | 175 + grub-core/commands/probe.c | 172 + grub-core/commands/read.c | 92 + grub-core/commands/reboot.c | 46 + grub-core/commands/regexp.c | 168 + grub-core/commands/search.c | 337 + grub-core/commands/search_file.c | 5 + grub-core/commands/search_label.c | 5 + grub-core/commands/search_uuid.c | 5 + grub-core/commands/search_wrap.c | 220 + grub-core/commands/setpci.c | 341 + grub-core/commands/sleep.c | 117 + grub-core/commands/syslinuxcfg.c | 217 + grub-core/commands/terminal.c | 285 + grub-core/commands/test.c | 455 + grub-core/commands/testload.c | 170 + grub-core/commands/testspeed.c | 115 + grub-core/commands/time.c | 68 + grub-core/commands/tr.c | 126 + grub-core/commands/true.c | 61 + grub-core/commands/usbtest.c | 218 + grub-core/commands/verify.c | 1042 + grub-core/commands/videoinfo.c | 262 + grub-core/commands/videotest.c | 241 + grub-core/commands/wildcard.c | 626 + grub-core/commands/xen/lsxen.c | 90 + grub-core/commands/xnu_uuid.c | 119 + grub-core/disk/AFSplitter.c | 92 + grub-core/disk/ahci.c | 1145 + grub-core/disk/arc/arcdisk.c | 325 + grub-core/disk/ata.c | 683 + grub-core/disk/cryptodisk.c | 1154 + grub-core/disk/diskfilter.c | 1350 + grub-core/disk/dmraid_nvidia.c | 196 + grub-core/disk/efi/efidisk.c | 893 + grub-core/disk/geli.c | 595 + grub-core/disk/host.c | 103 + grub-core/disk/i386/pc/biosdisk.c | 688 + grub-core/disk/ieee1275/nand.c | 242 + grub-core/disk/ieee1275/ofdisk.c | 741 + grub-core/disk/ldm.c | 1052 + grub-core/disk/loopback.c | 247 + grub-core/disk/luks.c | 485 + grub-core/disk/lvm.c | 795 + grub-core/disk/mdraid1x_linux.c | 233 + grub-core/disk/mdraid_linux.c | 298 + grub-core/disk/mdraid_linux_be.c | 2 + grub-core/disk/memdisk.c | 116 + grub-core/disk/pata.c | 550 + grub-core/disk/raid5_recover.c | 76 + grub-core/disk/raid6_recover.c | 202 + grub-core/disk/scsi.c | 766 + grub-core/disk/uboot/ubootdisk.c | 297 + grub-core/disk/usbms.c | 660 + grub-core/disk/xen/xendisk.c | 485 + grub-core/efiemu/i386/coredetect.c | 27 + grub-core/efiemu/i386/loadcore32.c | 121 + grub-core/efiemu/i386/loadcore64.c | 132 + grub-core/efiemu/i386/nocfgtables.c | 30 + grub-core/efiemu/i386/pc/cfgtables.c | 76 + grub-core/efiemu/loadcore.c | 387 + grub-core/efiemu/loadcore32.c | 22 + grub-core/efiemu/loadcore64.c | 22 + grub-core/efiemu/loadcore_common.c | 196 + grub-core/efiemu/main.c | 328 + grub-core/efiemu/mm.c | 677 + grub-core/efiemu/pnvram.c | 268 + grub-core/efiemu/prepare.c | 169 + grub-core/efiemu/prepare32.c | 22 + grub-core/efiemu/prepare64.c | 22 + grub-core/efiemu/runtime/config.h | 36 + grub-core/efiemu/runtime/efiemu.S | 159 + grub-core/efiemu/runtime/efiemu.c | 636 + grub-core/efiemu/symbols.c | 272 + grub-core/font/font.c | 1601 + grub-core/font/font_cmd.c | 92 + grub-core/fs/affs.c | 711 + grub-core/fs/afs.c | 3 + grub-core/fs/archelp.c | 301 + grub-core/fs/bfs.c | 1117 + grub-core/fs/btrfs.c | 1775 + grub-core/fs/cbfs.c | 402 + grub-core/fs/cpio.c | 61 + grub-core/fs/cpio_be.c | 61 + grub-core/fs/cpio_common.c | 244 + grub-core/fs/exfat.c | 2 + grub-core/fs/ext2.c | 1077 + grub-core/fs/fat.c | 1268 + grub-core/fs/fshelp.c | 429 + grub-core/fs/hfs.c | 1443 + grub-core/fs/hfsplus.c | 1104 + grub-core/fs/hfspluscomp.c | 317 + grub-core/fs/iso9660.c | 1125 + grub-core/fs/jfs.c | 955 + grub-core/fs/minix.c | 742 + grub-core/fs/minix2.c | 2 + grub-core/fs/minix2_be.c | 3 + grub-core/fs/minix3.c | 2 + grub-core/fs/minix3_be.c | 3 + grub-core/fs/minix_be.c | 2 + grub-core/fs/newc.c | 73 + grub-core/fs/nilfs2.c | 1223 + grub-core/fs/ntfs.c | 1237 + grub-core/fs/ntfscomp.c | 443 + grub-core/fs/odc.c | 61 + grub-core/fs/proc.c | 203 + grub-core/fs/reiserfs.c | 1427 + grub-core/fs/romfs.c | 484 + grub-core/fs/sfs.c | 765 + grub-core/fs/squash4.c | 1019 + grub-core/fs/tar.c | 345 + grub-core/fs/udf.c | 1232 + grub-core/fs/ufs.c | 918 + grub-core/fs/ufs2.c | 3 + grub-core/fs/ufs_be.c | 2 + grub-core/fs/xfs.c | 1150 + grub-core/fs/zfs/zfs.c | 4378 ++ grub-core/fs/zfs/zfs_fletcher.c | 84 + grub-core/fs/zfs/zfs_lz4.c | 286 + grub-core/fs/zfs/zfs_lzjb.c | 93 + grub-core/fs/zfs/zfs_sha256.c | 143 + grub-core/fs/zfs/zfscrypt.c | 486 + grub-core/fs/zfs/zfsinfo.c | 441 + grub-core/gdb/cstub.c | 366 + grub-core/gdb/gdb.c | 100 + grub-core/gdb/i386/idt.c | 78 + grub-core/gdb/i386/machdep.S | 245 + grub-core/gdb/i386/signal.c | 53 + grub-core/gdb_grub.in | 85 + grub-core/genemuinit.sh | 72 + grub-core/genemuinitheader.sh | 52 + grub-core/genmod.sh.in | 99 + grub-core/genmoddep.awk | 98 + grub-core/gensyminfo.sh.in | 37 + grub-core/gensymlist.sh | 73 + grub-core/gentrigtables.c | 57 + grub-core/gettext/gettext.c | 542 + grub-core/gfxmenu/font.c | 116 + grub-core/gfxmenu/gfxmenu.c | 150 + grub-core/gfxmenu/gui_box.c | 428 + grub-core/gfxmenu/gui_canvas.c | 278 + grub-core/gfxmenu/gui_circular_progress.c | 331 + grub-core/gfxmenu/gui_image.c | 267 + grub-core/gfxmenu/gui_label.c | 273 + grub-core/gfxmenu/gui_list.c | 953 + grub-core/gfxmenu/gui_progress_bar.c | 454 + grub-core/gfxmenu/gui_string_util.c | 206 + grub-core/gfxmenu/gui_util.c | 101 + grub-core/gfxmenu/icon_manager.c | 257 + grub-core/gfxmenu/theme_loader.c | 828 + grub-core/gfxmenu/view.c | 647 + grub-core/gfxmenu/widget-box.c | 360 + grub-core/gmodule.pl.in | 30 + grub-core/gnulib-fix-null-deref.diff | 13 + grub-core/gnulib-fix-width.diff | 231 + grub-core/gnulib-no-abort.diff | 30 + grub-core/gnulib-no-gets.diff | 10 + grub-core/gnulib/Makefile.am | 1747 + grub-core/gnulib/Makefile.in | 2674 + grub-core/gnulib/alloca.c | 478 + grub-core/gnulib/alloca.in.h | 63 + grub-core/gnulib/argp-ba.c | 34 + grub-core/gnulib/argp-eexst.c | 30 + grub-core/gnulib/argp-fmtstream.c | 488 + grub-core/gnulib/argp-fmtstream.h | 359 + grub-core/gnulib/argp-fs-xinl.c | 46 + grub-core/gnulib/argp-help.c | 1960 + grub-core/gnulib/argp-namefrob.h | 157 + grub-core/gnulib/argp-parse.c | 953 + grub-core/gnulib/argp-pin.c | 26 + grub-core/gnulib/argp-pv.c | 34 + grub-core/gnulib/argp-pvh.c | 31 + grub-core/gnulib/argp-xinl.c | 46 + grub-core/gnulib/argp.h | 650 + grub-core/gnulib/asnprintf.c | 34 + grub-core/gnulib/basename-lgpl.c | 75 + grub-core/gnulib/btowc.c | 39 + grub-core/gnulib/config.charset | 684 + grub-core/gnulib/dirname-lgpl.c | 86 + grub-core/gnulib/dirname.h | 46 + grub-core/gnulib/dosname.h | 53 + grub-core/gnulib/errno.in.h | 279 + grub-core/gnulib/error.c | 401 + grub-core/gnulib/error.h | 65 + grub-core/gnulib/float+.h | 147 + grub-core/gnulib/float.c | 33 + grub-core/gnulib/float.in.h | 188 + grub-core/gnulib/fnmatch.c | 350 + grub-core/gnulib/fnmatch.in.h | 67 + grub-core/gnulib/fnmatch_loop.c | 1219 + grub-core/gnulib/getdelim.c | 135 + grub-core/gnulib/getline.c | 27 + grub-core/gnulib/getopt.c | 1245 + grub-core/gnulib/getopt.in.h | 255 + grub-core/gnulib/getopt1.c | 170 + grub-core/gnulib/getopt_int.h | 135 + grub-core/gnulib/gettext.h | 288 + grub-core/gnulib/intprops.h | 319 + grub-core/gnulib/itold.c | 28 + grub-core/gnulib/langinfo.in.h | 176 + grub-core/gnulib/localcharset.c | 553 + grub-core/gnulib/localcharset.h | 40 + grub-core/gnulib/locale.in.h | 216 + grub-core/gnulib/localeconv.c | 103 + grub-core/gnulib/malloc.c | 56 + grub-core/gnulib/mbrtowc.c | 402 + grub-core/gnulib/mbsinit.c | 61 + grub-core/gnulib/mbsrtowcs-impl.h | 122 + grub-core/gnulib/mbsrtowcs-state.c | 37 + grub-core/gnulib/mbsrtowcs.c | 32 + grub-core/gnulib/mbswidth.c | 199 + grub-core/gnulib/mbswidth.h | 63 + grub-core/gnulib/mbtowc-impl.h | 44 + grub-core/gnulib/mbtowc.c | 26 + grub-core/gnulib/memchr.c | 172 + grub-core/gnulib/memchr.valgrind | 14 + grub-core/gnulib/mempcpy.c | 28 + grub-core/gnulib/msvc-inval.c | 129 + grub-core/gnulib/msvc-inval.h | 222 + grub-core/gnulib/msvc-nothrow.c | 49 + grub-core/gnulib/msvc-nothrow.h | 43 + grub-core/gnulib/nl_langinfo.c | 271 + grub-core/gnulib/printf-args.c | 187 + grub-core/gnulib/printf-args.h | 158 + grub-core/gnulib/printf-parse.c | 638 + grub-core/gnulib/printf-parse.h | 193 + grub-core/gnulib/progname.c | 92 + grub-core/gnulib/progname.h | 62 + grub-core/gnulib/rawmemchr.c | 136 + grub-core/gnulib/rawmemchr.valgrind | 12 + grub-core/gnulib/realloc.c | 79 + grub-core/gnulib/ref-add.sin | 29 + grub-core/gnulib/ref-del.sin | 24 + grub-core/gnulib/regcomp.c | 3913 ++ grub-core/gnulib/regex.c | 81 + grub-core/gnulib/regex.h | 667 + grub-core/gnulib/regex_internal.c | 1741 + grub-core/gnulib/regex_internal.h | 873 + grub-core/gnulib/regexec.c | 4417 ++ grub-core/gnulib/size_max.h | 30 + grub-core/gnulib/sleep.c | 76 + grub-core/gnulib/stdalign.in.h | 90 + grub-core/gnulib/stdbool.in.h | 132 + grub-core/gnulib/stddef.in.h | 86 + grub-core/gnulib/stdint.in.h | 636 + grub-core/gnulib/stdio.in.h | 1333 + grub-core/gnulib/stdlib.in.h | 954 + grub-core/gnulib/strcasecmp.c | 62 + grub-core/gnulib/strchrnul.c | 142 + grub-core/gnulib/strchrnul.valgrind | 12 + grub-core/gnulib/streq.h | 176 + grub-core/gnulib/strerror-override.c | 302 + grub-core/gnulib/strerror-override.h | 56 + grub-core/gnulib/strerror.c | 70 + grub-core/gnulib/string.in.h | 1029 + grub-core/gnulib/strings.in.h | 122 + grub-core/gnulib/stripslash.c | 45 + grub-core/gnulib/strncasecmp.c | 62 + grub-core/gnulib/strndup.c | 36 + grub-core/gnulib/strnlen.c | 30 + grub-core/gnulib/strnlen1.c | 35 + grub-core/gnulib/strnlen1.h | 40 + grub-core/gnulib/sys_types.in.h | 51 + grub-core/gnulib/sysexits.in.h | 72 + grub-core/gnulib/unistd.c | 3 + grub-core/gnulib/unistd.in.h | 1530 + grub-core/gnulib/unitypes.in.h | 46 + grub-core/gnulib/uniwidth.in.h | 72 + grub-core/gnulib/uniwidth/cjk.h | 37 + grub-core/gnulib/uniwidth/width.c | 368 + grub-core/gnulib/vasnprintf.c | 5606 ++ grub-core/gnulib/vasnprintf.h | 79 + grub-core/gnulib/verify.h | 245 + grub-core/gnulib/vsnprintf.c | 70 + grub-core/gnulib/wchar.in.h | 1028 + grub-core/gnulib/wcrtomb.c | 53 + grub-core/gnulib/wctype-h.c | 4 + grub-core/gnulib/wctype.in.h | 504 + grub-core/gnulib/wcwidth.c | 50 + grub-core/gnulib/xsize.c | 3 + grub-core/gnulib/xsize.h | 114 + grub-core/hello/hello.c | 51 + grub-core/hook/datehook.c | 110 + grub-core/io/bufio.c | 207 + grub-core/io/gzio.c | 1369 + grub-core/io/lzopio.c | 548 + grub-core/io/offset.c | 111 + grub-core/io/xzio.c | 344 + grub-core/kern/acpi.c | 119 + grub-core/kern/arm/cache.S | 123 + grub-core/kern/arm/cache.c | 274 + grub-core/kern/arm/cache_armv6.S | 72 + grub-core/kern/arm/cache_armv7.S | 126 + grub-core/kern/arm/compiler-rt.S | 86 + grub-core/kern/arm/dl.c | 280 + grub-core/kern/arm/dl_helper.c | 245 + grub-core/kern/arm/efi/init.c | 74 + grub-core/kern/arm/efi/misc.c | 202 + grub-core/kern/arm/efi/startup.S | 36 + grub-core/kern/arm/uboot/startup.S | 221 + grub-core/kern/arm64/cache.c | 63 + grub-core/kern/arm64/cache_flush.S | 55 + grub-core/kern/arm64/dl.c | 193 + grub-core/kern/arm64/dl_helper.c | 134 + grub-core/kern/arm64/efi/init.c | 60 + grub-core/kern/arm64/efi/startup.S | 39 + grub-core/kern/command.c | 87 + grub-core/kern/compiler-rt.c | 419 + grub-core/kern/corecmd.c | 189 + grub-core/kern/device.c | 191 + grub-core/kern/disk.c | 544 + grub-core/kern/disk_common.c | 65 + grub-core/kern/dl.c | 816 + grub-core/kern/efi/acpi.c | 59 + grub-core/kern/efi/efi.c | 916 + grub-core/kern/efi/fdt.c | 43 + grub-core/kern/efi/init.c | 83 + grub-core/kern/efi/mm.c | 527 + grub-core/kern/elf.c | 212 + grub-core/kern/elfXX.c | 207 + grub-core/kern/emu/argp_common.c | 41 + grub-core/kern/emu/cache.c | 29 + grub-core/kern/emu/cache_s.S | 14 + grub-core/kern/emu/full.c | 69 + grub-core/kern/emu/hostdisk.c | 686 + grub-core/kern/emu/hostfs.c | 197 + grub-core/kern/emu/lite.c | 45 + grub-core/kern/emu/main.c | 286 + grub-core/kern/emu/misc.c | 202 + grub-core/kern/emu/mm.c | 64 + grub-core/kern/emu/time.c | 46 + grub-core/kern/env.c | 238 + grub-core/kern/err.c | 122 + grub-core/kern/file.c | 220 + grub-core/kern/fs.c | 251 + grub-core/kern/generic/millisleep.c | 39 + grub-core/kern/generic/rtc_get_time_ms.c | 38 + grub-core/kern/i386/coreboot/cbtable.c | 83 + grub-core/kern/i386/coreboot/init.c | 143 + grub-core/kern/i386/coreboot/mmap.c | 98 + grub-core/kern/i386/coreboot/startup.S | 63 + grub-core/kern/i386/dl.c | 81 + grub-core/kern/i386/efi/init.c | 43 + grub-core/kern/i386/efi/startup.S | 36 + grub-core/kern/i386/efi/tsc.c | 40 + grub-core/kern/i386/ieee1275/startup.S | 41 + grub-core/kern/i386/int.S | 134 + grub-core/kern/i386/multiboot_mmap.c | 73 + grub-core/kern/i386/pc/acpi.c | 83 + grub-core/kern/i386/pc/init.c | 271 + grub-core/kern/i386/pc/mmap.c | 193 + grub-core/kern/i386/pc/startup.S | 217 + grub-core/kern/i386/qemu/init.c | 276 + grub-core/kern/i386/qemu/mmap.c | 107 + grub-core/kern/i386/qemu/startup.S | 75 + grub-core/kern/i386/realmode.S | 281 + grub-core/kern/i386/tsc.c | 78 + grub-core/kern/i386/tsc_pit.c | 84 + grub-core/kern/i386/tsc_pmtimer.c | 88 + grub-core/kern/i386/xen/hypercall.S | 43 + grub-core/kern/i386/xen/startup.S | 38 + grub-core/kern/i386/xen/tsc.c | 40 + grub-core/kern/ia64/cache.c | 35 + grub-core/kern/ia64/dl.c | 145 + grub-core/kern/ia64/dl_helper.c | 241 + grub-core/kern/ia64/efi/init.c | 75 + grub-core/kern/ia64/efi/startup.S | 44 + grub-core/kern/ieee1275/cmain.c | 217 + grub-core/kern/ieee1275/ieee1275.c | 609 + grub-core/kern/ieee1275/init.c | 326 + grub-core/kern/ieee1275/mmap.c | 83 + grub-core/kern/ieee1275/openfw.c | 563 + grub-core/kern/list.c | 55 + grub-core/kern/main.c | 312 + grub-core/kern/mips/arc/init.c | 463 + grub-core/kern/mips/cache.S | 68 + grub-core/kern/mips/cache_flush.S | 54 + grub-core/kern/mips/dl.c | 274 + grub-core/kern/mips/init.c | 38 + grub-core/kern/mips/loongson/init.c | 320 + grub-core/kern/mips/qemu_mips/init.c | 105 + grub-core/kern/mips/startup.S | 126 + grub-core/kern/misc.c | 1152 + grub-core/kern/mm.c | 624 + grub-core/kern/parser.c | 275 + grub-core/kern/partition.c | 276 + grub-core/kern/powerpc/cache.S | 26 + grub-core/kern/powerpc/cache_flush.S | 43 + grub-core/kern/powerpc/compiler-rt.S | 130 + grub-core/kern/powerpc/dl.c | 167 + grub-core/kern/powerpc/ieee1275/startup.S | 67 + grub-core/kern/rescue_parser.c | 84 + grub-core/kern/rescue_reader.c | 98 + grub-core/kern/sparc64/cache.S | 41 + grub-core/kern/sparc64/dl.c | 186 + grub-core/kern/sparc64/ieee1275/crt0.S | 104 + grub-core/kern/sparc64/ieee1275/ieee1275.c | 91 + grub-core/kern/term.c | 130 + grub-core/kern/time.c | 37 + grub-core/kern/uboot/hw.c | 112 + grub-core/kern/uboot/init.c | 188 + grub-core/kern/uboot/uboot.c | 326 + grub-core/kern/vga_init.c | 128 + grub-core/kern/x86_64/dl.c | 115 + grub-core/kern/x86_64/efi/callwrap.S | 129 + grub-core/kern/x86_64/efi/startup.S | 35 + grub-core/kern/x86_64/xen/hypercall.S | 53 + grub-core/kern/x86_64/xen/startup.S | 39 + grub-core/kern/xen/init.c | 580 + grub-core/lib/LzFind.c | 777 + grub-core/lib/LzmaDec.c | 1037 + grub-core/lib/LzmaEnc.c | 2244 + grub-core/lib/adler32.c | 102 + grub-core/lib/arc/datetime.c | 48 + grub-core/lib/arg.c | 463 + grub-core/lib/arm/setjmp.S | 53 + grub-core/lib/arm64/setjmp.S | 56 + grub-core/lib/backtrace.c | 70 + grub-core/lib/cmdline.c | 108 + grub-core/lib/cmos_datetime.c | 194 + grub-core/lib/crc.c | 76 + grub-core/lib/crc64.c | 114 + grub-core/lib/crypto.c | 493 + grub-core/lib/disk.c | 161 + grub-core/lib/division.c | 74 + grub-core/lib/efi/datetime.c | 82 + grub-core/lib/efi/halt.c | 39 + grub-core/lib/efi/reboot.c | 33 + grub-core/lib/efi/relocator.c | 119 + grub-core/lib/emu/halt.c | 25 + grub-core/lib/envblk.c | 297 + grub-core/lib/fake_module.c | 4 + grub-core/lib/fdt.c | 465 + grub-core/lib/getline.c | 92 + grub-core/lib/hexdump.c | 85 + grub-core/lib/i386/backtrace.c | 66 + grub-core/lib/i386/halt.c | 82 + grub-core/lib/i386/pc/biosnum.c | 47 + grub-core/lib/i386/pc/vesa_modes_table.c | 127 + grub-core/lib/i386/random.c | 103 + grub-core/lib/i386/reboot.c | 60 + grub-core/lib/i386/reboot_trampoline.S | 34 + grub-core/lib/i386/relocator.c | 216 + grub-core/lib/i386/relocator16.S | 328 + grub-core/lib/i386/relocator32.S | 134 + grub-core/lib/i386/relocator64.S | 186 + grub-core/lib/i386/relocator_asm.S | 80 + grub-core/lib/i386/relocator_common.S | 113 + grub-core/lib/i386/relocator_common_c.c | 109 + grub-core/lib/i386/setjmp.S | 59 + grub-core/lib/i386/xen/relocator.S | 165 + grub-core/lib/ia64/longjmp.S | 162 + grub-core/lib/ia64/setjmp.S | 177 + grub-core/lib/ieee1275/cmos.c | 77 + grub-core/lib/ieee1275/datetime.c | 156 + grub-core/lib/ieee1275/halt.c | 33 + grub-core/lib/ieee1275/reboot.c | 27 + grub-core/lib/ieee1275/relocator.c | 114 + grub-core/lib/legacy_parse.c | 875 + grub-core/lib/libgcrypt-grub/cipher/ChangeLog | 4357 ++ grub-core/lib/libgcrypt-grub/cipher/arcfour.c | 143 + grub-core/lib/libgcrypt-grub/cipher/bithelp.h | 57 + .../lib/libgcrypt-grub/cipher/blowfish.c | 592 + .../lib/libgcrypt-grub/cipher/camellia-glue.c | 211 + .../lib/libgcrypt-grub/cipher/camellia.c | 1463 + .../lib/libgcrypt-grub/cipher/camellia.h | 94 + grub-core/lib/libgcrypt-grub/cipher/cast5.c | 590 + grub-core/lib/libgcrypt-grub/cipher/cipher.h | 2 + .../lib/libgcrypt-grub/cipher/crypto.lst | 45 + grub-core/lib/libgcrypt-grub/cipher/des.c | 929 + grub-core/lib/libgcrypt-grub/cipher/dsa.c | 292 + grub-core/lib/libgcrypt-grub/cipher/g10lib.h | 1 + .../lib/libgcrypt-grub/cipher/hash-common.h | 36 + grub-core/lib/libgcrypt-grub/cipher/idea.c | 322 + grub-core/lib/libgcrypt-grub/cipher/init.c | 91 + grub-core/lib/libgcrypt-grub/cipher/md4.c | 344 + grub-core/lib/libgcrypt-grub/cipher/md5.c | 372 + grub-core/lib/libgcrypt-grub/cipher/memory.h | 1 + grub-core/lib/libgcrypt-grub/cipher/rfc2268.c | 285 + .../libgcrypt-grub/cipher/rijndael-tables.h | 1689 + .../lib/libgcrypt-grub/cipher/rijndael.c | 1478 + grub-core/lib/libgcrypt-grub/cipher/rmd.h | 39 + grub-core/lib/libgcrypt-grub/cipher/rmd160.c | 565 + grub-core/lib/libgcrypt-grub/cipher/rsa.c | 395 + grub-core/lib/libgcrypt-grub/cipher/seed.c | 461 + grub-core/lib/libgcrypt-grub/cipher/serpent.c | 903 + grub-core/lib/libgcrypt-grub/cipher/sha1.c | 419 + grub-core/lib/libgcrypt-grub/cipher/sha256.c | 463 + grub-core/lib/libgcrypt-grub/cipher/sha512.c | 525 + grub-core/lib/libgcrypt-grub/cipher/tiger.c | 944 + grub-core/lib/libgcrypt-grub/cipher/twofish.c | 1001 + grub-core/lib/libgcrypt-grub/cipher/types.h | 2 + .../lib/libgcrypt-grub/cipher/whirlpool.c | 1422 + .../lib/libgcrypt-grub/mpi/generic/Manifest | 29 + .../lib/libgcrypt-grub/mpi/generic/distfiles | 11 + .../libgcrypt-grub/mpi/generic/mpi-asm-defs.h | 10 + .../libgcrypt-grub/mpi/generic/mpih-add1.c | 65 + .../libgcrypt-grub/mpi/generic/mpih-lshift.c | 68 + .../libgcrypt-grub/mpi/generic/mpih-mul1.c | 62 + .../libgcrypt-grub/mpi/generic/mpih-mul2.c | 68 + .../libgcrypt-grub/mpi/generic/mpih-mul3.c | 68 + .../libgcrypt-grub/mpi/generic/mpih-rshift.c | 67 + .../libgcrypt-grub/mpi/generic/mpih-sub1.c | 66 + .../libgcrypt-grub/mpi/generic/udiv-w-sdiv.c | 133 + grub-core/lib/libgcrypt-grub/mpi/longlong.h | 1615 + grub-core/lib/libgcrypt-grub/mpi/mpi-add.c | 237 + .../lib/libgcrypt-grub/mpi/mpi-asm-defs.h | 10 + grub-core/lib/libgcrypt-grub/mpi/mpi-bit.c | 366 + grub-core/lib/libgcrypt-grub/mpi/mpi-cmp.c | 109 + grub-core/lib/libgcrypt-grub/mpi/mpi-div.c | 357 + grub-core/lib/libgcrypt-grub/mpi/mpi-gcd.c | 53 + grub-core/lib/libgcrypt-grub/mpi/mpi-inline.c | 37 + grub-core/lib/libgcrypt-grub/mpi/mpi-inline.h | 163 + .../lib/libgcrypt-grub/mpi/mpi-internal.h | 279 + grub-core/lib/libgcrypt-grub/mpi/mpi-inv.c | 269 + grub-core/lib/libgcrypt-grub/mpi/mpi-mod.c | 186 + grub-core/lib/libgcrypt-grub/mpi/mpi-mpow.c | 225 + grub-core/lib/libgcrypt-grub/mpi/mpi-mul.c | 214 + grub-core/lib/libgcrypt-grub/mpi/mpi-pow.c | 340 + grub-core/lib/libgcrypt-grub/mpi/mpicoder.c | 752 + grub-core/lib/libgcrypt-grub/mpi/mpih-add1.c | 65 + grub-core/lib/libgcrypt-grub/mpi/mpih-div.c | 536 + .../lib/libgcrypt-grub/mpi/mpih-lshift.c | 68 + grub-core/lib/libgcrypt-grub/mpi/mpih-mul.c | 530 + grub-core/lib/libgcrypt-grub/mpi/mpih-mul1.c | 62 + grub-core/lib/libgcrypt-grub/mpi/mpih-mul2.c | 68 + grub-core/lib/libgcrypt-grub/mpi/mpih-mul3.c | 68 + .../lib/libgcrypt-grub/mpi/mpih-rshift.c | 67 + grub-core/lib/libgcrypt-grub/mpi/mpih-sub1.c | 66 + grub-core/lib/libgcrypt-grub/mpi/mpiutil.c | 435 + grub-core/lib/libgcrypt-grub/src/ath.h | 147 + .../lib/libgcrypt-grub/src/cipher-proto.h | 124 + grub-core/lib/libgcrypt-grub/src/cipher.h | 182 + grub-core/lib/libgcrypt-grub/src/g10lib.h | 302 + .../lib/libgcrypt-grub/src/gcrypt-module.h | 0 grub-core/lib/libgcrypt-grub/src/gcrypt.h | 1925 + grub-core/lib/libgcrypt-grub/src/hmac256.h | 36 + grub-core/lib/libgcrypt-grub/src/mpi.h | 266 + grub-core/lib/libgcrypt-grub/src/secmem.h | 39 + grub-core/lib/libgcrypt-grub/src/stdmem.h | 32 + grub-core/lib/libgcrypt-grub/src/types.h | 128 + grub-core/lib/libgcrypt-grub/src/visibility.h | 1 + grub-core/lib/libgcrypt/cipher/ChangeLog | 3990 ++ grub-core/lib/libgcrypt/cipher/ChangeLog-2011 | 4247 ++ grub-core/lib/libgcrypt/cipher/Makefile.am | 83 + grub-core/lib/libgcrypt/cipher/Manifest | 73 + grub-core/lib/libgcrypt/cipher/ac.c | 3301 + grub-core/lib/libgcrypt/cipher/arcfour.c | 155 + grub-core/lib/libgcrypt/cipher/bithelp.h | 54 + grub-core/lib/libgcrypt/cipher/blowfish.c | 605 + .../lib/libgcrypt/cipher/camellia-glue.c | 253 + grub-core/lib/libgcrypt/cipher/camellia.c | 1461 + grub-core/lib/libgcrypt/cipher/camellia.h | 81 + grub-core/lib/libgcrypt/cipher/cast5.c | 620 + grub-core/lib/libgcrypt/cipher/cipher.c | 2217 + grub-core/lib/libgcrypt/cipher/des.c | 1196 + grub-core/lib/libgcrypt/cipher/dsa.c | 1193 + grub-core/lib/libgcrypt/cipher/ecc.c | 1793 + grub-core/lib/libgcrypt/cipher/elgamal.c | 845 + grub-core/lib/libgcrypt/cipher/hash-common.c | 93 + grub-core/lib/libgcrypt/cipher/hash-common.h | 33 + grub-core/lib/libgcrypt/cipher/hmac-tests.c | 732 + grub-core/lib/libgcrypt/cipher/idea.c | 378 + grub-core/lib/libgcrypt/cipher/kdf.c | 278 + grub-core/lib/libgcrypt/cipher/md.c | 1383 + grub-core/lib/libgcrypt/cipher/md4.c | 327 + grub-core/lib/libgcrypt/cipher/md5.c | 355 + grub-core/lib/libgcrypt/cipher/primegen.c | 1861 + grub-core/lib/libgcrypt/cipher/pubkey.c | 4212 ++ grub-core/lib/libgcrypt/cipher/rfc2268.c | 344 + .../lib/libgcrypt/cipher/rijndael-tables.h | 1686 + grub-core/lib/libgcrypt/cipher/rijndael.c | 2092 + grub-core/lib/libgcrypt/cipher/rmd.h | 36 + grub-core/lib/libgcrypt/cipher/rmd160.c | 572 + grub-core/lib/libgcrypt/cipher/rsa.c | 1390 + grub-core/lib/libgcrypt/cipher/seed.c | 478 + grub-core/lib/libgcrypt/cipher/serpent.c | 953 + grub-core/lib/libgcrypt/cipher/sha1.c | 477 + grub-core/lib/libgcrypt/cipher/sha256.c | 554 + grub-core/lib/libgcrypt/cipher/sha512.c | 629 + .../lib/libgcrypt/cipher/test-getrusage.c | 105 + grub-core/lib/libgcrypt/cipher/tiger.c | 911 + grub-core/lib/libgcrypt/cipher/twofish.c | 1040 + grub-core/lib/libgcrypt/cipher/whirlpool.c | 1405 + grub-core/lib/libgcrypt/mpi/ChangeLog-2011 | 822 + grub-core/lib/libgcrypt/mpi/Makefile.am | 177 + grub-core/lib/libgcrypt/mpi/Manifest | 41 + grub-core/lib/libgcrypt/mpi/alpha/README | 53 + grub-core/lib/libgcrypt/mpi/alpha/distfiles | 11 + grub-core/lib/libgcrypt/mpi/alpha/mpih-add1.S | 124 + .../lib/libgcrypt/mpi/alpha/mpih-lshift.S | 122 + grub-core/lib/libgcrypt/mpi/alpha/mpih-mul1.S | 90 + grub-core/lib/libgcrypt/mpi/alpha/mpih-mul2.S | 97 + grub-core/lib/libgcrypt/mpi/alpha/mpih-mul3.S | 95 + .../lib/libgcrypt/mpi/alpha/mpih-rshift.S | 118 + grub-core/lib/libgcrypt/mpi/alpha/mpih-sub1.S | 124 + .../lib/libgcrypt/mpi/alpha/udiv-qrnnd.S | 159 + grub-core/lib/libgcrypt/mpi/amd64/distfiles | 8 + .../lib/libgcrypt/mpi/amd64/mpi-asm-defs.h | 4 + grub-core/lib/libgcrypt/mpi/amd64/mpih-add1.S | 63 + .../lib/libgcrypt/mpi/amd64/mpih-lshift.S | 77 + grub-core/lib/libgcrypt/mpi/amd64/mpih-mul1.S | 65 + grub-core/lib/libgcrypt/mpi/amd64/mpih-mul2.S | 107 + grub-core/lib/libgcrypt/mpi/amd64/mpih-mul3.S | 66 + .../lib/libgcrypt/mpi/amd64/mpih-rshift.S | 80 + grub-core/lib/libgcrypt/mpi/amd64/mpih-sub1.S | 61 + grub-core/lib/libgcrypt/mpi/config.links | 360 + grub-core/lib/libgcrypt/mpi/ec.c | 721 + grub-core/lib/libgcrypt/mpi/generic/Manifest | 29 + grub-core/lib/libgcrypt/mpi/generic/distfiles | 11 + .../lib/libgcrypt/mpi/generic/mpi-asm-defs.h | 10 + .../lib/libgcrypt/mpi/generic/mpih-add1.c | 65 + .../lib/libgcrypt/mpi/generic/mpih-lshift.c | 68 + .../lib/libgcrypt/mpi/generic/mpih-mul1.c | 62 + .../lib/libgcrypt/mpi/generic/mpih-mul2.c | 68 + .../lib/libgcrypt/mpi/generic/mpih-mul3.c | 68 + .../lib/libgcrypt/mpi/generic/mpih-rshift.c | 67 + .../lib/libgcrypt/mpi/generic/mpih-sub1.c | 66 + .../lib/libgcrypt/mpi/generic/udiv-w-sdiv.c | 133 + grub-core/lib/libgcrypt/mpi/hppa/README | 84 + grub-core/lib/libgcrypt/mpi/hppa/distfiles | 7 + grub-core/lib/libgcrypt/mpi/hppa/mpih-add1.S | 70 + .../lib/libgcrypt/mpi/hppa/mpih-lshift.S | 77 + .../lib/libgcrypt/mpi/hppa/mpih-rshift.S | 73 + grub-core/lib/libgcrypt/mpi/hppa/mpih-sub1.S | 78 + grub-core/lib/libgcrypt/mpi/hppa/udiv-qrnnd.S | 297 + grub-core/lib/libgcrypt/mpi/hppa1.1/distfiles | 5 + .../lib/libgcrypt/mpi/hppa1.1/mpih-mul1.S | 115 + .../lib/libgcrypt/mpi/hppa1.1/mpih-mul2.S | 117 + .../lib/libgcrypt/mpi/hppa1.1/mpih-mul3.S | 126 + .../lib/libgcrypt/mpi/hppa1.1/udiv-qrnnd.S | 92 + grub-core/lib/libgcrypt/mpi/i386/Manifest | 28 + grub-core/lib/libgcrypt/mpi/i386/distfiles | 10 + grub-core/lib/libgcrypt/mpi/i386/mpih-add1.S | 116 + .../lib/libgcrypt/mpi/i386/mpih-lshift.S | 94 + grub-core/lib/libgcrypt/mpi/i386/mpih-mul1.S | 84 + grub-core/lib/libgcrypt/mpi/i386/mpih-mul2.S | 86 + grub-core/lib/libgcrypt/mpi/i386/mpih-mul3.S | 86 + .../lib/libgcrypt/mpi/i386/mpih-rshift.S | 97 + grub-core/lib/libgcrypt/mpi/i386/mpih-sub1.S | 117 + grub-core/lib/libgcrypt/mpi/i386/syntax.h | 68 + grub-core/lib/libgcrypt/mpi/i586/Manifest | 27 + grub-core/lib/libgcrypt/mpi/i586/README | 26 + grub-core/lib/libgcrypt/mpi/i586/distfiles | 10 + grub-core/lib/libgcrypt/mpi/i586/mpih-add1.S | 135 + .../lib/libgcrypt/mpi/i586/mpih-lshift.S | 229 + grub-core/lib/libgcrypt/mpi/i586/mpih-mul1.S | 89 + grub-core/lib/libgcrypt/mpi/i586/mpih-mul2.S | 93 + grub-core/lib/libgcrypt/mpi/i586/mpih-mul3.S | 93 + .../lib/libgcrypt/mpi/i586/mpih-rshift.S | 228 + grub-core/lib/libgcrypt/mpi/i586/mpih-sub1.S | 142 + grub-core/lib/libgcrypt/mpi/longlong.h | 1613 + grub-core/lib/libgcrypt/mpi/m68k/Manifest | 25 + grub-core/lib/libgcrypt/mpi/m68k/distfiles | 9 + .../lib/libgcrypt/mpi/m68k/mc68020/Manifest | 23 + .../lib/libgcrypt/mpi/m68k/mc68020/distfiles | 4 + .../libgcrypt/mpi/m68k/mc68020/mpih-mul1.S | 104 + .../libgcrypt/mpi/m68k/mc68020/mpih-mul2.S | 94 + .../libgcrypt/mpi/m68k/mc68020/mpih-mul3.S | 97 + grub-core/lib/libgcrypt/mpi/m68k/mpih-add1.S | 92 + .../lib/libgcrypt/mpi/m68k/mpih-lshift.S | 164 + .../lib/libgcrypt/mpi/m68k/mpih-rshift.S | 162 + grub-core/lib/libgcrypt/mpi/m68k/mpih-sub1.S | 91 + grub-core/lib/libgcrypt/mpi/m68k/syntax.h | 185 + grub-core/lib/libgcrypt/mpi/mips3/Manifest | 28 + grub-core/lib/libgcrypt/mpi/mips3/README | 23 + grub-core/lib/libgcrypt/mpi/mips3/distfiles | 11 + .../lib/libgcrypt/mpi/mips3/mpi-asm-defs.h | 10 + grub-core/lib/libgcrypt/mpi/mips3/mpih-add1.S | 124 + .../lib/libgcrypt/mpi/mips3/mpih-lshift.S | 97 + grub-core/lib/libgcrypt/mpi/mips3/mpih-mul1.S | 89 + grub-core/lib/libgcrypt/mpi/mips3/mpih-mul2.S | 101 + grub-core/lib/libgcrypt/mpi/mips3/mpih-mul3.S | 101 + .../lib/libgcrypt/mpi/mips3/mpih-rshift.S | 95 + grub-core/lib/libgcrypt/mpi/mips3/mpih-sub1.S | 125 + grub-core/lib/libgcrypt/mpi/mpi-add.c | 235 + grub-core/lib/libgcrypt/mpi/mpi-bit.c | 364 + grub-core/lib/libgcrypt/mpi/mpi-cmp.c | 107 + grub-core/lib/libgcrypt/mpi/mpi-div.c | 355 + grub-core/lib/libgcrypt/mpi/mpi-gcd.c | 51 + grub-core/lib/libgcrypt/mpi/mpi-inline.c | 35 + grub-core/lib/libgcrypt/mpi/mpi-inline.h | 161 + grub-core/lib/libgcrypt/mpi/mpi-internal.h | 277 + grub-core/lib/libgcrypt/mpi/mpi-inv.c | 267 + grub-core/lib/libgcrypt/mpi/mpi-mod.c | 184 + grub-core/lib/libgcrypt/mpi/mpi-mpow.c | 223 + grub-core/lib/libgcrypt/mpi/mpi-mul.c | 212 + grub-core/lib/libgcrypt/mpi/mpi-pow.c | 338 + grub-core/lib/libgcrypt/mpi/mpi-scan.c | 130 + grub-core/lib/libgcrypt/mpi/mpicoder.c | 750 + grub-core/lib/libgcrypt/mpi/mpih-div.c | 534 + grub-core/lib/libgcrypt/mpi/mpih-mul.c | 528 + grub-core/lib/libgcrypt/mpi/mpiutil.c | 460 + grub-core/lib/libgcrypt/mpi/pa7100/Manifest | 22 + grub-core/lib/libgcrypt/mpi/pa7100/distfiles | 4 + .../lib/libgcrypt/mpi/pa7100/mpih-lshift.S | 96 + .../lib/libgcrypt/mpi/pa7100/mpih-rshift.S | 92 + grub-core/lib/libgcrypt/mpi/pentium4/README | 115 + .../lib/libgcrypt/mpi/pentium4/distfiles | 3 + .../lib/libgcrypt/mpi/pentium4/mmx/distfiles | 2 + .../libgcrypt/mpi/pentium4/mmx/mpih-lshift.S | 457 + .../libgcrypt/mpi/pentium4/mmx/mpih-rshift.S | 453 + .../lib/libgcrypt/mpi/pentium4/sse2/distfiles | 5 + .../libgcrypt/mpi/pentium4/sse2/mpih-add1.S | 91 + .../libgcrypt/mpi/pentium4/sse2/mpih-mul1.S | 96 + .../libgcrypt/mpi/pentium4/sse2/mpih-mul2.S | 136 + .../libgcrypt/mpi/pentium4/sse2/mpih-mul3.S | 127 + .../libgcrypt/mpi/pentium4/sse2/mpih-sub1.S | 112 + grub-core/lib/libgcrypt/mpi/power/Manifest | 27 + grub-core/lib/libgcrypt/mpi/power/distfiles | 8 + grub-core/lib/libgcrypt/mpi/power/mpih-add1.S | 87 + .../lib/libgcrypt/mpi/power/mpih-lshift.S | 64 + grub-core/lib/libgcrypt/mpi/power/mpih-mul1.S | 115 + grub-core/lib/libgcrypt/mpi/power/mpih-mul2.S | 130 + grub-core/lib/libgcrypt/mpi/power/mpih-mul3.S | 135 + .../lib/libgcrypt/mpi/power/mpih-rshift.S | 64 + grub-core/lib/libgcrypt/mpi/power/mpih-sub1.S | 88 + .../lib/libgcrypt/mpi/powerpc32/Manifest | 28 + .../lib/libgcrypt/mpi/powerpc32/distfiles | 10 + .../lib/libgcrypt/mpi/powerpc32/mpih-add1.S | 136 + .../lib/libgcrypt/mpi/powerpc32/mpih-lshift.S | 198 + .../lib/libgcrypt/mpi/powerpc32/mpih-mul1.S | 120 + .../lib/libgcrypt/mpi/powerpc32/mpih-mul2.S | 127 + .../lib/libgcrypt/mpi/powerpc32/mpih-mul3.S | 130 + .../lib/libgcrypt/mpi/powerpc32/mpih-rshift.S | 131 + .../lib/libgcrypt/mpi/powerpc32/mpih-sub1.S | 133 + .../lib/libgcrypt/mpi/powerpc32/syntax.h | 75 + .../lib/libgcrypt/mpi/powerpc64/distfiles | 0 grub-core/lib/libgcrypt/mpi/sparc32/Manifest | 24 + grub-core/lib/libgcrypt/mpi/sparc32/distfiles | 6 + .../lib/libgcrypt/mpi/sparc32/mpih-add1.S | 239 + .../lib/libgcrypt/mpi/sparc32/mpih-lshift.S | 97 + .../lib/libgcrypt/mpi/sparc32/mpih-rshift.S | 93 + grub-core/lib/libgcrypt/mpi/sparc32/udiv.S | 195 + .../lib/libgcrypt/mpi/sparc32v8/Manifest | 23 + .../lib/libgcrypt/mpi/sparc32v8/distfiles | 5 + .../lib/libgcrypt/mpi/sparc32v8/mpih-mul1.S | 109 + .../lib/libgcrypt/mpi/sparc32v8/mpih-mul2.S | 132 + .../lib/libgcrypt/mpi/sparc32v8/mpih-mul3.S | 67 + .../lib/libgcrypt/mpi/supersparc/Manifest | 21 + .../lib/libgcrypt/mpi/supersparc/distfiles | 3 + grub-core/lib/libgcrypt/mpi/supersparc/udiv.S | 118 + grub-core/lib/libgcrypt/src/ChangeLog-2011 | 2335 + grub-core/lib/libgcrypt/src/Makefile.am | 143 + grub-core/lib/libgcrypt/src/Manifest | 58 + grub-core/lib/libgcrypt/src/ath.c | 344 + grub-core/lib/libgcrypt/src/ath.h | 147 + grub-core/lib/libgcrypt/src/cipher-proto.h | 124 + grub-core/lib/libgcrypt/src/cipher.h | 182 + grub-core/lib/libgcrypt/src/dumpsexp.c | 766 + grub-core/lib/libgcrypt/src/fips.c | 860 + grub-core/lib/libgcrypt/src/g10lib.h | 302 + grub-core/lib/libgcrypt/src/gcrypt-module.h | 240 + grub-core/lib/libgcrypt/src/gcrypt.h.in | 1760 + grub-core/lib/libgcrypt/src/gcryptrnd.c | 680 + grub-core/lib/libgcrypt/src/getrandom.c | 326 + grub-core/lib/libgcrypt/src/global.c | 1123 + grub-core/lib/libgcrypt/src/hmac256.c | 793 + grub-core/lib/libgcrypt/src/hmac256.h | 36 + grub-core/lib/libgcrypt/src/hwfeatures.c | 192 + .../lib/libgcrypt/src/libgcrypt-config.in | 189 + grub-core/lib/libgcrypt/src/libgcrypt.def | 239 + grub-core/lib/libgcrypt/src/libgcrypt.m4 | 123 + grub-core/lib/libgcrypt/src/libgcrypt.vers | 111 + grub-core/lib/libgcrypt/src/misc.c | 298 + grub-core/lib/libgcrypt/src/missing-string.c | 54 + grub-core/lib/libgcrypt/src/module.c | 212 + grub-core/lib/libgcrypt/src/mpi.h | 266 + grub-core/lib/libgcrypt/src/secmem.c | 696 + grub-core/lib/libgcrypt/src/secmem.h | 39 + grub-core/lib/libgcrypt/src/sexp.c | 2045 + grub-core/lib/libgcrypt/src/stdmem.c | 242 + grub-core/lib/libgcrypt/src/stdmem.h | 32 + grub-core/lib/libgcrypt/src/types.h | 128 + grub-core/lib/libgcrypt/src/versioninfo.rc.in | 51 + grub-core/lib/libgcrypt/src/visibility.c | 1486 + grub-core/lib/libgcrypt/src/visibility.h | 807 + grub-core/lib/libgcrypt_wrap/cipher_wrap.h | 77 + grub-core/lib/libgcrypt_wrap/mem.c | 133 + grub-core/lib/minilzo/lzoconf.h | 446 + grub-core/lib/minilzo/lzodefs.h | 1852 + grub-core/lib/minilzo/minilzo.c | 4562 ++ grub-core/lib/minilzo/minilzo.h | 109 + grub-core/lib/mips/arc/reboot.c | 35 + grub-core/lib/mips/loongson/reboot.c | 64 + grub-core/lib/mips/qemu_mips/reboot.c | 27 + grub-core/lib/mips/relocator.c | 149 + grub-core/lib/mips/relocator_asm.S | 61 + grub-core/lib/mips/setjmp.S | 71 + grub-core/lib/pbkdf2.c | 109 + grub-core/lib/posix_wrap/assert.h | 33 + grub-core/lib/posix_wrap/ctype.h | 108 + grub-core/lib/posix_wrap/errno.h | 29 + grub-core/lib/posix_wrap/inttypes.h | 1 + grub-core/lib/posix_wrap/langinfo.h | 38 + grub-core/lib/posix_wrap/limits.h | 35 + grub-core/lib/posix_wrap/localcharset.h | 28 + grub-core/lib/posix_wrap/locale.h | 3 + grub-core/lib/posix_wrap/stdint.h | 1 + grub-core/lib/posix_wrap/stdio.h | 43 + grub-core/lib/posix_wrap/stdlib.h | 55 + grub-core/lib/posix_wrap/string.h | 92 + grub-core/lib/posix_wrap/sys/types.h | 65 + grub-core/lib/posix_wrap/unistd.h | 1 + grub-core/lib/posix_wrap/wchar.h | 119 + grub-core/lib/posix_wrap/wctype.h | 110 + grub-core/lib/powerpc/relocator.c | 142 + grub-core/lib/powerpc/relocator_asm.S | 60 + grub-core/lib/powerpc/setjmp.S | 89 + grub-core/lib/priority_queue.c | 163 + grub-core/lib/progress.c | 145 + grub-core/lib/random.c | 120 + grub-core/lib/reed_solomon.c | 494 + grub-core/lib/relocator.c | 1657 + grub-core/lib/setjmp.S | 20 + grub-core/lib/sparc64/setjmp.S | 54 + grub-core/lib/syslinux_parse.c | 1547 + grub-core/lib/uboot/datetime.c | 41 + grub-core/lib/uboot/halt.c | 32 + grub-core/lib/uboot/reboot.c | 31 + grub-core/lib/x86_64/efi/relocator.c | 80 + grub-core/lib/x86_64/relocator_asm.S | 85 + grub-core/lib/x86_64/setjmp.S | 68 + grub-core/lib/x86_64/xen/relocator.S | 133 + grub-core/lib/xen/datetime.c | 40 + grub-core/lib/xen/halt.c | 32 + grub-core/lib/xen/reboot.c | 32 + grub-core/lib/xen/relocator.c | 137 + grub-core/lib/xzembed/xz.h | 187 + grub-core/lib/xzembed/xz_config.h | 152 + grub-core/lib/xzembed/xz_dec_bcj.c | 578 + grub-core/lib/xzembed/xz_dec_lzma2.c | 1188 + grub-core/lib/xzembed/xz_dec_stream.c | 1042 + grub-core/lib/xzembed/xz_lzma2.h | 236 + grub-core/lib/xzembed/xz_private.h | 96 + grub-core/lib/xzembed/xz_stream.h | 53 + grub-core/loader/aout.c | 62 + grub-core/loader/arm/linux.c | 529 + grub-core/loader/arm64/fdt.c | 163 + grub-core/loader/arm64/linux.c | 354 + grub-core/loader/arm64/xen_boot.c | 499 + grub-core/loader/efi/appleloader.c | 242 + grub-core/loader/efi/chainloader.c | 422 + grub-core/loader/i386/bsd.c | 2178 + grub-core/loader/i386/bsd32.c | 6 + grub-core/loader/i386/bsd64.c | 6 + grub-core/loader/i386/bsdXX.c | 679 + grub-core/loader/i386/bsd_pagetable.c | 92 + grub-core/loader/i386/coreboot/chainloader.c | 517 + grub-core/loader/i386/linux.c | 1153 + grub-core/loader/i386/multiboot_mbi.c | 753 + grub-core/loader/i386/pc/chainloader.c | 294 + grub-core/loader/i386/pc/freedos.c | 190 + grub-core/loader/i386/pc/linux.c | 488 + grub-core/loader/i386/pc/ntldr.c | 162 + grub-core/loader/i386/pc/plan9.c | 596 + grub-core/loader/i386/pc/pxechainloader.c | 168 + grub-core/loader/i386/pc/truecrypt.c | 233 + grub-core/loader/i386/xen.c | 972 + grub-core/loader/i386/xen_file.c | 117 + grub-core/loader/i386/xen_file32.c | 7 + grub-core/loader/i386/xen_file64.c | 7 + grub-core/loader/i386/xen_fileXX.c | 378 + grub-core/loader/i386/xnu.c | 1166 + grub-core/loader/ia64/efi/linux.c | 643 + grub-core/loader/linux.c | 302 + grub-core/loader/lzss.c | 56 + grub-core/loader/macho.c | 205 + grub-core/loader/macho32.c | 22 + grub-core/loader/macho64.c | 22 + grub-core/loader/machoXX.c | 384 + grub-core/loader/mips/linux.c | 503 + grub-core/loader/multiboot.c | 456 + grub-core/loader/multiboot_elfxx.c | 281 + grub-core/loader/multiboot_mbi2.c | 1153 + grub-core/loader/powerpc/ieee1275/linux.c | 392 + grub-core/loader/sparc64/ieee1275/linux.c | 520 + grub-core/loader/xnu.c | 1524 + grub-core/loader/xnu_resume.c | 188 + grub-core/mmap/efi/mmap.c | 318 + grub-core/mmap/i386/mmap.c | 113 + grub-core/mmap/i386/pc/mmap.c | 219 + grub-core/mmap/i386/pc/mmap_helper.S | 163 + grub-core/mmap/i386/uppermem.c | 98 + grub-core/mmap/mips/uppermem.c | 72 + grub-core/mmap/mmap.c | 551 + grub-core/modinfo.sh.in | 40 + grub-core/net/arp.c | 181 + grub-core/net/bootp.c | 603 + grub-core/net/dns.c | 778 + grub-core/net/drivers/efi/efinet.c | 404 + grub-core/net/drivers/emu/emunet.c | 116 + grub-core/net/drivers/i386/pc/pxe.c | 419 + grub-core/net/drivers/ieee1275/ofnet.c | 558 + grub-core/net/drivers/uboot/ubootnet.c | 161 + grub-core/net/ethernet.c | 134 + grub-core/net/http.c | 562 + grub-core/net/icmp.c | 112 + grub-core/net/icmp6.c | 679 + grub-core/net/ip.c | 724 + grub-core/net/net.c | 1815 + grub-core/net/netbuff.c | 133 + grub-core/net/tcp.c | 1020 + grub-core/net/tftp.c | 504 + grub-core/net/udp.c | 211 + grub-core/normal/auth.c | 278 + grub-core/normal/autofs.c | 157 + grub-core/normal/charset.c | 1306 + grub-core/normal/cmdline.c | 681 + grub-core/normal/color.c | 145 + grub-core/normal/completion.c | 527 + grub-core/normal/context.c | 214 + grub-core/normal/crypto.c | 163 + grub-core/normal/datetime.c | 109 + grub-core/normal/dyncmd.c | 210 + grub-core/normal/main.c | 569 + grub-core/normal/menu.c | 912 + grub-core/normal/menu_entry.c | 1451 + grub-core/normal/menu_text.c | 602 + grub-core/normal/misc.c | 194 + grub-core/normal/term.c | 1098 + grub-core/osdep/apple/getroot.c | 109 + grub-core/osdep/apple/hostdisk.c | 95 + grub-core/osdep/aros/config.c | 94 + grub-core/osdep/aros/getroot.c | 228 + grub-core/osdep/aros/hostdisk.c | 609 + grub-core/osdep/aros/relpath.c | 75 + grub-core/osdep/basic/compress.c | 21 + grub-core/osdep/basic/emunet.c | 50 + grub-core/osdep/basic/getroot.c | 82 + grub-core/osdep/basic/hostdisk.c | 58 + grub-core/osdep/basic/init.c | 38 + grub-core/osdep/basic/no_platform.c | 46 + grub-core/osdep/basic/ofpath.c | 29 + grub-core/osdep/basic/platform.c | 26 + grub-core/osdep/basic/random.c | 43 + grub-core/osdep/blocklist.c | 7 + grub-core/osdep/bsd/getroot.c | 204 + grub-core/osdep/bsd/hostdisk.c | 130 + grub-core/osdep/compress.c | 5 + grub-core/osdep/config.c | 7 + grub-core/osdep/cputime.c | 5 + grub-core/osdep/devmapper/getroot.c | 347 + grub-core/osdep/devmapper/hostdisk.c | 230 + grub-core/osdep/dl.c | 5 + grub-core/osdep/emuconsole.c | 5 + grub-core/osdep/emunet.c | 5 + grub-core/osdep/exec.c | 3 + grub-core/osdep/freebsd/getroot.c | 364 + grub-core/osdep/freebsd/hostdisk.c | 128 + grub-core/osdep/generic/blocklist.c | 134 + grub-core/osdep/getroot.c | 22 + grub-core/osdep/haiku/getroot.c | 105 + grub-core/osdep/haiku/hostdisk.c | 69 + grub-core/osdep/hostdisk.c | 22 + grub-core/osdep/hurd/getroot.c | 247 + grub-core/osdep/hurd/hostdisk.c | 146 + grub-core/osdep/init.c | 5 + grub-core/osdep/linux/blocklist.c | 136 + grub-core/osdep/linux/emunet.c | 74 + grub-core/osdep/linux/getroot.c | 1151 + grub-core/osdep/linux/hostdisk.c | 461 + grub-core/osdep/linux/ofpath.c | 571 + grub-core/osdep/linux/platform.c | 132 + grub-core/osdep/ofpath.c | 5 + grub-core/osdep/password.c | 5 + grub-core/osdep/platform.c | 9 + grub-core/osdep/platform_unix.c | 3 + grub-core/osdep/random.c | 10 + grub-core/osdep/relpath.c | 7 + grub-core/osdep/sleep.c | 5 + grub-core/osdep/sun/getroot.c | 126 + grub-core/osdep/sun/hostdisk.c | 73 + grub-core/osdep/unix/compress.c | 41 + grub-core/osdep/unix/config.c | 139 + grub-core/osdep/unix/cputime.c | 22 + grub-core/osdep/unix/dl.c | 61 + grub-core/osdep/unix/emuconsole.c | 184 + grub-core/osdep/unix/exec.c | 245 + grub-core/osdep/unix/getroot.c | 776 + grub-core/osdep/unix/hostdisk.c | 306 + grub-core/osdep/unix/password.c | 75 + grub-core/osdep/unix/platform.c | 235 + grub-core/osdep/unix/random.c | 48 + grub-core/osdep/unix/relpath.c | 151 + grub-core/osdep/unix/sleep.c | 30 + grub-core/osdep/windows/blocklist.c | 118 + grub-core/osdep/windows/config.c | 57 + grub-core/osdep/windows/cputime.c | 19 + grub-core/osdep/windows/dl.c | 59 + grub-core/osdep/windows/emuconsole.c | 308 + grub-core/osdep/windows/getroot.c | 355 + grub-core/osdep/windows/hostdisk.c | 668 + grub-core/osdep/windows/init.c | 190 + grub-core/osdep/windows/password.c | 51 + grub-core/osdep/windows/platform.c | 424 + grub-core/osdep/windows/random.c | 55 + grub-core/osdep/windows/relpath.c | 96 + grub-core/osdep/windows/sleep.c | 31 + grub-core/partmap/acorn.c | 154 + grub-core/partmap/amiga.c | 183 + grub-core/partmap/apple.c | 199 + grub-core/partmap/bsdlabel.c | 271 + grub-core/partmap/dfly.c | 132 + grub-core/partmap/dvh.c | 127 + grub-core/partmap/gpt.c | 231 + grub-core/partmap/msdos.c | 431 + grub-core/partmap/plan.c | 120 + grub-core/partmap/sun.c | 154 + grub-core/partmap/sunpc.c | 151 + grub-core/parttool/msdospart.c | 162 + grub-core/script/argv.c | 153 + grub-core/script/execute.c | 1166 + grub-core/script/function.c | 113 + grub-core/script/lexer.c | 341 + grub-core/script/main.c | 98 + grub-core/script/parser.y | 355 + grub-core/script/script.c | 396 + grub-core/script/yylex.l | 393 + grub-core/term/arc/console.c | 209 + grub-core/term/arc/serial.c | 147 + grub-core/term/at_keyboard.c | 695 + grub-core/term/efi/console.c | 381 + grub-core/term/efi/serial.c | 195 + grub-core/term/gfxterm.c | 1151 + grub-core/term/gfxterm_background.c | 190 + grub-core/term/i386/coreboot/cbmemc.c | 127 + grub-core/term/i386/pc/console.c | 310 + grub-core/term/i386/pc/mda_text.c | 13 + grub-core/term/i386/pc/vga_text.c | 288 + grub-core/term/ieee1275/console.c | 267 + grub-core/term/ieee1275/escc.c | 319 + grub-core/term/ieee1275/serial.c | 287 + grub-core/term/morse.c | 133 + grub-core/term/ns8250.c | 318 + grub-core/term/serial.c | 463 + grub-core/term/spkmodem.c | 141 + grub-core/term/terminfo.c | 793 + grub-core/term/tparm.c | 767 + grub-core/term/uboot/console.c | 132 + grub-core/term/usb_keyboard.c | 471 + grub-core/term/xen/console.c | 122 + grub-core/tests/boot/kbsd.init-i386.S | 107 + grub-core/tests/boot/kbsd.init-x86_64.S | 94 + grub-core/tests/boot/kbsd.spec.txt | 3 + grub-core/tests/boot/kernel-8086.S | 50 + grub-core/tests/boot/kernel-i386.S | 72 + grub-core/tests/boot/kfreebsd-aout.cfg | 4 + grub-core/tests/boot/kfreebsd.cfg | 8 + grub-core/tests/boot/kfreebsd.init-i386.S | 109 + grub-core/tests/boot/kfreebsd.init-x86_64.S | 90 + grub-core/tests/boot/knetbsd.cfg | 5 + grub-core/tests/boot/kopenbsd.cfg | 5 + grub-core/tests/boot/kopenbsdlabel.txt | 3 + grub-core/tests/boot/linux-ppc.cfg | 5 + grub-core/tests/boot/linux.cfg | 5 + grub-core/tests/boot/linux.init-i386.S | 61 + grub-core/tests/boot/linux.init-mips.S | 61 + grub-core/tests/boot/linux.init-ppc.S | 61 + grub-core/tests/boot/linux.init-x86_64.S | 60 + grub-core/tests/boot/linux16.cfg | 5 + grub-core/tests/boot/multiboot.cfg | 4 + grub-core/tests/boot/multiboot2.cfg | 4 + grub-core/tests/boot/ntldr.cfg | 4 + grub-core/tests/boot/pc-chainloader.cfg | 4 + grub-core/tests/boot/qemu-shutdown-x86.S | 17 + grub-core/tests/bswap_test.c | 121 + grub-core/tests/checksums.h | 129 + grub-core/tests/cmdline_cat_test.c | 125 + grub-core/tests/cmp_test.c | 190 + grub-core/tests/ctz_test.c | 111 + grub-core/tests/div_test.c | 189 + grub-core/tests/example_functional_test.c | 38 + grub-core/tests/fake_input.c | 75 + grub-core/tests/gfxterm_menu.c | 180 + grub-core/tests/legacy_password_test.c | 68 + grub-core/tests/lib/functional_test.c | 96 + grub-core/tests/lib/test.c | 239 + grub-core/tests/mul_test.c | 73 + grub-core/tests/pbkdf2_test.c | 97 + grub-core/tests/setjmp_test.c | 80 + grub-core/tests/shift_test.c | 157 + grub-core/tests/signature_test.c | 170 + grub-core/tests/signatures.h | 211 + grub-core/tests/sleep_test.c | 52 + grub-core/tests/test_blockarg.c | 55 + grub-core/tests/video_checksum.c | 813 + grub-core/tests/videotest_checksum.c | 80 + grub-core/tests/xnu_uuid_test.c | 58 + grub-core/unidata.c | 1538 + grub-core/video/bitmap.c | 231 + grub-core/video/bitmap_scale.c | 515 + grub-core/video/bochs.c | 439 + grub-core/video/capture.c | 140 + grub-core/video/cirrus.c | 520 + grub-core/video/colors.c | 333 + grub-core/video/efi_gop.c | 626 + grub-core/video/efi_uga.c | 359 + grub-core/video/emu/sdl.c | 252 + grub-core/video/fb/fbblit.c | 2227 + grub-core/video/fb/fbfill.c | 208 + grub-core/video/fb/fbutil.c | 151 + grub-core/video/fb/video_fb.c | 1683 + grub-core/video/i386/coreboot/cbfb.c | 190 + grub-core/video/i386/pc/vbe.c | 1250 + grub-core/video/i386/pc/vga.c | 404 + grub-core/video/ieee1275.c | 370 + grub-core/video/radeon_fuloong2e.c | 239 + grub-core/video/radeon_yeeloong3a.c | 237 + grub-core/video/readers/jpeg.c | 853 + grub-core/video/readers/png.c | 1157 + grub-core/video/readers/tga.c | 511 + grub-core/video/sis315_init.c | 158 + grub-core/video/sis315pro.c | 459 + grub-core/video/sm712.c | 818 + grub-core/video/sm712_init.c | 14 + grub-core/video/video.c | 761 + include/grub/acorn_filecore.h | 53 + include/grub/acpi.h | 247 + include/grub/aout.h | 128 + include/grub/arc/arc.h | 284 + include/grub/arc/console.h | 31 + include/grub/archelp.h | 63 + include/grub/arm/efi/loader.h | 26 + include/grub/arm/efi/memory.h | 6 + include/grub/arm/linux.h | 53 + include/grub/arm/reloc.h | 51 + include/grub/arm/setjmp.h | 27 + include/grub/arm/system.h | 18 + include/grub/arm/time.h | 29 + include/grub/arm/types.h | 34 + include/grub/arm/uboot/kernel.h | 32 + include/grub/arm64/efi/memory.h | 6 + include/grub/arm64/fdtload.h | 35 + include/grub/arm64/linux.h | 48 + include/grub/arm64/reloc.h | 41 + include/grub/arm64/setjmp.h | 27 + include/grub/arm64/time.h | 29 + include/grub/arm64/types.h | 34 + include/grub/at_keyboard.h | 42 + include/grub/ata.h | 225 + include/grub/auth.h | 37 + include/grub/autoefi.h | 64 + include/grub/backtrace.h | 26 + include/grub/bitmap.h | 87 + include/grub/bitmap_scale.h | 85 + include/grub/boottime.h | 0 include/grub/bsdlabel.h | 106 + include/grub/btrfs.h | 71 + include/grub/bufio.h | 28 + include/grub/cache.h | 54 + include/grub/cbfs_core.h | 178 + include/grub/charset.h | 323 + include/grub/cmos.h | 128 + include/grub/color.h | 30 + include/grub/command.h | 129 + include/grub/compiler-rt-emu.h | 260 + include/grub/compiler-rt.h | 200 + include/grub/compiler.h | 51 + include/grub/crypto.h | 423 + include/grub/cryptodisk.h | 159 + include/grub/cs5536.h | 198 + include/grub/datetime.h | 133 + include/grub/decompressor.h | 34 + include/grub/deflate.h | 30 + include/grub/device.h | 43 + include/grub/disk.h | 261 + include/grub/diskfilter.h | 209 + include/grub/dl.h | 294 + include/grub/efi/api.h | 1760 + include/grub/efi/console.h | 31 + include/grub/efi/console_control.h | 57 + include/grub/efi/disk.h | 33 + include/grub/efi/edid.h | 54 + include/grub/efi/efi.h | 107 + include/grub/efi/graphics_output.h | 114 + include/grub/efi/memory.h | 31 + include/grub/efi/pci.h | 319 + include/grub/efi/pe32.h | 320 + include/grub/efi/uga_draw.h | 76 + include/grub/efiemu/efiemu.h | 286 + include/grub/efiemu/runtime.h | 37 + include/grub/elf.h | 2529 + include/grub/elfload.h | 82 + include/grub/emu/config.h | 48 + include/grub/emu/console.h | 28 + include/grub/emu/exec.h | 42 + include/grub/emu/getroot.h | 104 + include/grub/emu/hostdisk.h | 98 + include/grub/emu/hostfile.h | 68 + include/grub/emu/misc.h | 78 + include/grub/emu/net.h | 37 + include/grub/env.h | 72 + include/grub/env_private.h | 46 + include/grub/err.h | 96 + include/grub/exfat.h | 53 + include/grub/extcmd.h | 79 + include/grub/fat.h | 82 + include/grub/fbblit.h | 36 + include/grub/fbfill.h | 59 + include/grub/fbutil.h | 59 + include/grub/fdt.h | 132 + include/grub/file.h | 167 + include/grub/fileid.h | 29 + include/grub/font.h | 153 + include/grub/fontformat.h | 38 + include/grub/fs.h | 131 + include/grub/fshelp.h | 91 + include/grub/gcry/types.h | 37 + include/grub/gcrypt/g10lib.h | 302 + include/grub/gcrypt/gcrypt.h | 1746 + include/grub/gcrypt/gpg-error.h | 32 + include/grub/gdb.h | 39 + include/grub/gfxmenu_model.h | 1 + include/grub/gfxmenu_view.h | 124 + include/grub/gfxterm.h | 51 + include/grub/gfxwidgets.h | 50 + include/grub/gpt_partition.h | 87 + include/grub/gui.h | 282 + include/grub/gui_string_util.h | 33 + include/grub/hfs.h | 72 + include/grub/hfsplus.h | 257 + include/grub/i18n.h | 68 + include/grub/i386/at_keyboard.h | 25 + include/grub/i386/bsd.h | 128 + include/grub/i386/cmos.h | 30 + include/grub/i386/coreboot/boot.h | 1 + include/grub/i386/coreboot/console.h | 32 + include/grub/i386/coreboot/lbio.h | 105 + include/grub/i386/coreboot/memory.h | 54 + include/grub/i386/coreboot/serial.h | 24 + include/grub/i386/coreboot/time.h | 1 + include/grub/i386/cpuid.h | 85 + include/grub/i386/efi/memory.h | 6 + include/grub/i386/efi/serial.h | 1 + include/grub/i386/efiemu.h | 33 + include/grub/i386/floppy.h | 36 + include/grub/i386/freebsd_linker.h | 74 + include/grub/i386/freebsd_reboot.h | 77 + include/grub/i386/gdb.h | 78 + include/grub/i386/ieee1275/ieee1275.h | 1 + include/grub/i386/ieee1275/memory.h | 1 + include/grub/i386/ieee1275/serial.h | 1 + include/grub/i386/io.h | 72 + include/grub/i386/linux.h | 315 + include/grub/i386/macho.h | 32 + include/grub/i386/memory.h | 73 + include/grub/i386/memory_raw.h | 58 + include/grub/i386/multiboot.h | 47 + include/grub/i386/multiboot/boot.h | 1 + include/grub/i386/multiboot/console.h | 1 + include/grub/i386/multiboot/kernel.h | 1 + include/grub/i386/multiboot/memory.h | 1 + include/grub/i386/multiboot/serial.h | 1 + include/grub/i386/multiboot/time.h | 1 + include/grub/i386/netbsd_bootinfo.h | 156 + include/grub/i386/netbsd_reboot.h | 81 + include/grub/i386/openbsd_bootarg.h | 93 + include/grub/i386/openbsd_reboot.h | 79 + include/grub/i386/pc/apm.h | 48 + include/grub/i386/pc/biosdisk.h | 109 + include/grub/i386/pc/biosnum.h | 6 + include/grub/i386/pc/boot.h | 73 + include/grub/i386/pc/chainloader.h | 27 + include/grub/i386/pc/console.h | 36 + include/grub/i386/pc/int.h | 67 + include/grub/i386/pc/kernel.h | 41 + include/grub/i386/pc/memory.h | 63 + include/grub/i386/pc/pxe.h | 292 + include/grub/i386/pc/time.h | 24 + include/grub/i386/pc/vbe.h | 232 + include/grub/i386/pc/vesa_modes_table.h | 19 + include/grub/i386/pci.h | 105 + include/grub/i386/pit.h | 103 + include/grub/i386/pmtimer.h | 37 + include/grub/i386/qemu/boot.h | 25 + include/grub/i386/qemu/console.h | 1 + include/grub/i386/qemu/kernel.h | 35 + include/grub/i386/qemu/memory.h | 1 + include/grub/i386/qemu/serial.h | 1 + include/grub/i386/qemu/time.h | 1 + include/grub/i386/reboot.h | 28 + include/grub/i386/relocator.h | 100 + include/grub/i386/relocator_private.h | 1 + include/grub/i386/setjmp.h | 29 + include/grub/i386/time.h | 29 + include/grub/i386/tsc.h | 70 + include/grub/i386/types.h | 33 + include/grub/i386/xen/hypercall.h | 85 + include/grub/i386/xen/memory.h | 0 include/grub/i386/xnu.h | 149 + include/grub/ia64/efi/memory.h | 6 + include/grub/ia64/efi/time.h | 23 + include/grub/ia64/kernel.h | 25 + include/grub/ia64/reloc.h | 44 + include/grub/ia64/setjmp.h | 28 + include/grub/ia64/time.h | 28 + include/grub/ia64/types.h | 32 + include/grub/icon_manager.h | 41 + include/grub/ieee1275/console.h | 34 + include/grub/ieee1275/ieee1275.h | 244 + include/grub/ieee1275/ofdisk.h | 25 + include/grub/kernel.h | 128 + include/grub/keyboard_layouts.h | 150 + include/grub/legacy_parse.h | 32 + include/grub/lib/LzFind.h | 130 + include/grub/lib/LzHash.h | 77 + include/grub/lib/LzmaDec.h | 246 + include/grub/lib/LzmaEnc.h | 95 + include/grub/lib/LzmaTypes.h | 151 + include/grub/lib/arg.h | 79 + include/grub/lib/cmdline.h | 31 + include/grub/lib/crc.h | 25 + include/grub/lib/envblk.h | 56 + include/grub/lib/hexdump.h | 25 + include/grub/libpciaccess.h | 26 + include/grub/linux.h | 24 + include/grub/list.h | 87 + include/grub/loader.h | 78 + include/grub/lvm.h | 90 + include/grub/macho.h | 166 + include/grub/machoload.h | 88 + include/grub/memory.h | 87 + include/grub/menu.h | 106 + include/grub/menu_viewer.h | 48 + include/grub/mips/arc/kernel.h | 2 + include/grub/mips/arc/memory.h | 46 + include/grub/mips/arc/time.h | 0 include/grub/mips/asm.h | 18 + include/grub/mips/at_keyboard.h | 1 + include/grub/mips/cmos.h | 1 + include/grub/mips/io.h | 62 + include/grub/mips/kernel.h | 24 + include/grub/mips/loongson.h | 86 + include/grub/mips/loongson/at_keyboard.h | 27 + include/grub/mips/loongson/cmos.h | 30 + include/grub/mips/loongson/ec.h | 45 + include/grub/mips/loongson/kernel.h | 36 + include/grub/mips/loongson/memory.h | 51 + include/grub/mips/loongson/pci.h | 110 + include/grub/mips/loongson/serial.h | 33 + include/grub/mips/loongson/time.h | 27 + include/grub/mips/memory.h | 60 + include/grub/mips/mips.h | 30 + include/grub/mips/multiboot.h | 31 + include/grub/mips/pci.h | 1 + include/grub/mips/qemu_mips/at_keyboard.h | 25 + include/grub/mips/qemu_mips/cmos.h | 30 + include/grub/mips/qemu_mips/console.h | 25 + include/grub/mips/qemu_mips/kernel.h | 30 + include/grub/mips/qemu_mips/loader.h | 0 include/grub/mips/qemu_mips/memory.h | 50 + include/grub/mips/qemu_mips/serial.h | 24 + include/grub/mips/qemu_mips/time.h | 25 + include/grub/mips/relocator.h | 38 + include/grub/mips/setjmp.h | 27 + include/grub/mips/time.h | 37 + include/grub/mips/types.h | 38 + include/grub/misc.h | 464 + include/grub/mm.h | 77 + include/grub/mm_private.h | 64 + include/grub/module_verifier.h | 20 + include/grub/msdos_partition.h | 127 + include/grub/multiboot.h | 121 + include/grub/multiboot_loader.h | 28 + include/grub/net.h | 564 + include/grub/net/arp.h | 31 + include/grub/net/ethernet.h | 41 + include/grub/net/ip.h | 97 + include/grub/net/netbuff.h | 31 + include/grub/net/tcp.h | 85 + include/grub/net/udp.h | 51 + include/grub/normal.h | 177 + include/grub/ns8250.h | 80 + include/grub/ntfs.h | 198 + include/grub/offsets.h | 159 + include/grub/osdep/hostfile.h | 7 + include/grub/osdep/hostfile_aros.h | 113 + include/grub/osdep/hostfile_unix.h | 112 + include/grub/osdep/hostfile_windows.h | 85 + include/grub/parser.h | 96 + include/grub/partition.h | 138 + include/grub/parttool.h | 58 + include/grub/pci.h | 172 + include/grub/pciutils.h | 103 + include/grub/powerpc/ieee1275/ieee1275.h | 28 + include/grub/powerpc/kernel.h | 22 + include/grub/powerpc/memory.h | 47 + include/grub/powerpc/relocator.h | 37 + include/grub/powerpc/setjmp.h | 27 + include/grub/powerpc/time.h | 28 + include/grub/powerpc/types.h | 32 + include/grub/priority_queue.h | 44 + include/grub/procfs.h | 51 + include/grub/pubkey.h | 38 + include/grub/random.h | 33 + include/grub/reader.h | 29 + include/grub/reed_solomon.h | 30 + include/grub/relocator.h | 59 + include/grub/relocator_private.h | 113 + include/grub/script_sh.h | 413 + include/grub/scsi.h | 111 + include/grub/scsicmd.h | 206 + include/grub/sdl.h | 24 + include/grub/search.h | 29 + include/grub/serial.h | 205 + include/grub/setjmp.h | 42 + include/grub/smbus.h | 70 + include/grub/sparc64/ieee1275/boot.h | 63 + include/grub/sparc64/ieee1275/ieee1275.h | 48 + include/grub/sparc64/ieee1275/kernel.h | 31 + include/grub/sparc64/setjmp.h | 29 + include/grub/sparc64/time.h | 28 + include/grub/sparc64/types.h | 32 + include/grub/speaker.h | 47 + include/grub/symbol.h | 72 + include/grub/syslinux_parse.h | 37 + include/grub/term.h | 464 + include/grub/terminfo.h | 87 + include/grub/test.h | 125 + include/grub/time.h | 46 + include/grub/tparm.h | 26 + include/grub/trig.h | 44 + include/grub/types.h | 319 + include/grub/uboot/api_public.h | 181 + include/grub/uboot/console.h | 29 + include/grub/uboot/disk.h | 43 + include/grub/uboot/image.h | 175 + include/grub/uboot/uboot.h | 86 + include/grub/udf.h | 30 + include/grub/unicode.h | 360 + include/grub/usb.h | 325 + include/grub/usbdesc.h | 134 + include/grub/usbserial.h | 39 + include/grub/usbtrans.h | 155 + include/grub/util/install.h | 258 + include/grub/util/libnvpair.h | 38 + include/grub/util/libzfs.h | 47 + include/grub/util/misc.h | 52 + include/grub/util/mkimage.h | 185 + include/grub/util/ofpath.h | 6 + include/grub/util/resolve.h | 36 + include/grub/util/windows.h | 33 + include/grub/vga.h | 129 + include/grub/vgaregs.h | 307 + include/grub/video.h | 704 + include/grub/video_fb.h | 151 + include/grub/x86_64/at_keyboard.h | 1 + include/grub/x86_64/efi/boot.h | 0 include/grub/x86_64/efi/loader.h | 26 + include/grub/x86_64/efi/memory.h | 10 + include/grub/x86_64/efi/serial.h | 1 + include/grub/x86_64/io.h | 19 + include/grub/x86_64/linux.h | 19 + include/grub/x86_64/macho.h | 1 + include/grub/x86_64/memory.h | 1 + include/grub/x86_64/multiboot.h | 1 + include/grub/x86_64/pci.h | 19 + include/grub/x86_64/relocator.h | 1 + include/grub/x86_64/setjmp.h | 27 + include/grub/x86_64/time.h | 29 + include/grub/x86_64/types.h | 41 + include/grub/x86_64/xen/hypercall.h | 36 + include/grub/x86_64/xnu.h | 1 + include/grub/xen.h | 100 + include/grub/xen/relocator.h | 46 + include/grub/xen_file.h | 57 + include/grub/xnu.h | 119 + include/grub/zfs/dmu.h | 164 + include/grub/zfs/dmu_objset.h | 43 + include/grub/zfs/dnode.h | 74 + include/grub/zfs/dsl_dataset.h | 52 + include/grub/zfs/dsl_dir.h | 50 + include/grub/zfs/sa_impl.h | 37 + include/grub/zfs/spa.h | 328 + include/grub/zfs/uberblock_impl.h | 60 + include/grub/zfs/vdev_impl.h | 69 + include/grub/zfs/zap_impl.h | 109 + include/grub/zfs/zap_leaf.h | 104 + include/grub/zfs/zfs.h | 158 + include/grub/zfs/zfs_acl.h | 59 + include/grub/zfs/zfs_znode.h | 70 + include/grub/zfs/zil.h | 56 + include/grub/zfs/zio.h | 95 + include/grub/zfs/zio_checksum.h | 33 + include/multiboot.h | 274 + include/multiboot2.h | 416 + include/xen/arch-x86/xen-x86_32.h | 169 + include/xen/arch-x86/xen-x86_64.h | 202 + include/xen/arch-x86/xen.h | 273 + include/xen/elfnote.h | 281 + include/xen/event_channel.h | 381 + include/xen/grant_table.h | 662 + include/xen/io/blkif.h | 608 + include/xen/io/console.h | 51 + include/xen/io/protocols.h | 40 + include/xen/io/ring.h | 312 + include/xen/io/xenbus.h | 80 + include/xen/io/xs_wire.h | 138 + include/xen/sched.h | 174 + include/xen/xen-compat.h | 44 + include/xen/xen.h | 956 + linguas.sh | 20 + m4/00gnulib.m4 | 30 + m4/alloca.m4 | 121 + m4/argp.m4 | 61 + m4/btowc.m4 | 116 + m4/codeset.m4 | 23 + m4/configmake.m4 | 50 + m4/dirname.m4 | 19 + m4/double-slash-root.m4 | 38 + m4/eealloc.m4 | 31 + m4/errno_h.m4 | 137 + m4/error.m4 | 27 + m4/exponentd.m4 | 116 + m4/extensions.m4 | 138 + m4/extern-inline.m4 | 100 + m4/fcntl-o.m4 | 134 + m4/float_h.m4 | 98 + m4/fnmatch.m4 | 156 + m4/getdelim.m4 | 88 + m4/getline.m4 | 96 + m4/getopt.m4 | 368 + m4/gettext.m4 | 401 + m4/glibc2.m4 | 31 + m4/glibc21.m4 | 34 + m4/gnulib-cache.m4 | 55 + m4/gnulib-common.m4 | 377 + m4/gnulib-comp.m4 | 756 + m4/gnulib-tool.m4 | 57 + m4/iconv.m4 | 268 + m4/include_next.m4 | 270 + m4/intdiv0.m4 | 87 + m4/intl.m4 | 300 + m4/intldir.m4 | 19 + m4/intlmacosx.m4 | 56 + m4/intmax.m4 | 36 + m4/intmax_t.m4 | 67 + m4/inttypes-pri.m4 | 42 + m4/inttypes_h.m4 | 29 + m4/langinfo_h.m4 | 105 + m4/lcmessage.m4 | 35 + m4/lib-ld.m4 | 119 + m4/lib-link.m4 | 777 + m4/lib-prefix.m4 | 224 + m4/libunistring-base.m4 | 141 + m4/localcharset.m4 | 17 + m4/locale-fr.m4 | 250 + m4/locale-ja.m4 | 136 + m4/locale-zh.m4 | 130 + m4/locale_h.m4 | 122 + m4/localeconv.m4 | 22 + m4/lock.m4 | 39 + m4/longlong.m4 | 113 + m4/malloc.m4 | 98 + m4/math_h.m4 | 353 + m4/mbrtowc.m4 | 572 + m4/mbsinit.m4 | 51 + m4/mbsrtowcs.m4 | 155 + m4/mbstate_t.m4 | 41 + m4/mbswidth.m4 | 46 + m4/mbtowc.m4 | 19 + m4/memchr.m4 | 88 + m4/mempcpy.m4 | 26 + m4/mmap-anon.m4 | 55 + m4/msvc-inval.m4 | 19 + m4/msvc-nothrow.m4 | 10 + m4/multiarch.m4 | 62 + m4/nl_langinfo.m4 | 50 + m4/nls.m4 | 32 + m4/nocrash.m4 | 130 + m4/off_t.m4 | 18 + m4/po.m4 | 452 + m4/printf-posix.m4 | 48 + m4/printf.m4 | 1570 + m4/progtest.m4 | 91 + m4/rawmemchr.m4 | 20 + m4/realloc.m4 | 76 + m4/regex.m4 | 261 + m4/size_max.m4 | 79 + m4/sleep.m4 | 62 + m4/ssize_t.m4 | 23 + m4/stdalign.m4 | 52 + m4/stdbool.m4 | 100 + m4/stddef_h.m4 | 47 + m4/stdint.m4 | 484 + m4/stdint_h.m4 | 27 + m4/stdio_h.m4 | 194 + m4/stdlib_h.m4 | 117 + m4/strcase.m4 | 45 + m4/strchrnul.m4 | 50 + m4/strerror.m4 | 96 + m4/string_h.m4 | 120 + m4/strings_h.m4 | 52 + m4/strndup.m4 | 55 + m4/strnlen.m4 | 30 + m4/sys_socket_h.m4 | 176 + m4/sys_types_h.m4 | 24 + m4/sysexits.m4 | 44 + m4/threadlib.m4 | 371 + m4/uintmax_t.m4 | 30 + m4/unistd_h.m4 | 186 + m4/vasnprintf.m4 | 291 + m4/visibility.m4 | 77 + m4/vsnprintf.m4 | 54 + m4/warn-on-use.m4 | 47 + m4/wchar_h.m4 | 225 + m4/wchar_t.m4 | 24 + m4/wcrtomb.m4 | 112 + m4/wctype_h.m4 | 209 + m4/wcwidth.m4 | 101 + m4/wint_t.m4 | 32 + m4/xsize.m4 | 12 + po/LINGUAS | 1 + po/Makefile.in.in | 469 + po/Makevars | 41 + po/POTFILES-shell.in | 18 + po/POTFILES.in | 1308 + po/README | 24 + po/Rules-piglatin | 41 + po/Rules-quot | 47 + po/Rules-swiss | 7 + po/Rules-translit | 16 + po/Rules-windowsdir | 11 + po/arabic.sed | 81 + po/ast.gmo | Bin 0 -> 18391 bytes po/ast.po | 7389 ++ po/boldquot.sed | 10 + po/ca.gmo | Bin 0 -> 133684 bytes po/ca.po | 7236 ++ po/cyrillic.sed | 104 + po/da.gmo | Bin 0 -> 124649 bytes po/da.po | 6961 ++ po/de.gmo | Bin 0 -> 129700 bytes po/de.po | 7814 +++ po/de@hebrew.gmo | Bin 0 -> 194683 bytes po/de@hebrew.po | 7805 +++ po/de_CH.gmo | Bin 0 -> 129707 bytes po/de_CH.po | 7814 +++ po/en@arabic.gmo | Bin 0 -> 163001 bytes po/en@arabic.po | 6794 ++ po/en@boldquot.header | 25 + po/en@cyrillic.gmo | Bin 0 -> 153821 bytes po/en@cyrillic.po | 6793 ++ po/en@greek.gmo | Bin 0 -> 153818 bytes po/en@greek.po | 6793 ++ po/en@hebrew.gmo | Bin 0 -> 176519 bytes po/en@hebrew.po | 6794 ++ po/en@piglatin.gmo | Bin 0 -> 136462 bytes po/en@piglatin.header | 4 + po/en@piglatin.po | 6953 ++ po/en@quot.gmo | Bin 0 -> 120502 bytes po/en@quot.header | 22 + po/en@quot.po | 6814 ++ po/eo.gmo | Bin 0 -> 44202 bytes po/eo.po | 6742 ++ po/es.gmo | Bin 0 -> 131141 bytes po/es.po | 7106 ++ po/exclude.pot | 7496 +++ po/fi.gmo | Bin 0 -> 128422 bytes po/fi.po | 7310 ++ po/fr.gmo | Bin 0 -> 134517 bytes po/fr.po | 7129 ++ po/gl.gmo | Bin 0 -> 108680 bytes po/gl.po | 7016 ++ po/greek.sed | 106 + po/grub.d.sed | 2 + po/grub.pot | 6603 ++ po/hebrew.sed | 89 + po/hr.gmo | Bin 0 -> 127626 bytes po/hr.po | 6834 ++ po/hu.gmo | Bin 0 -> 135043 bytes po/hu.po | 7036 ++ po/id.gmo | Bin 0 -> 28647 bytes po/id.po | 7580 +++ po/insert-header.sin | 23 + po/it.gmo | Bin 0 -> 128135 bytes po/it.po | 6907 ++ po/ja.gmo | Bin 0 -> 23326 bytes po/ja.po | 7012 ++ po/ko.gmo | Bin 0 -> 19698 bytes po/ko.po | 7016 ++ po/lt.gmo | Bin 0 -> 102706 bytes po/lt.po | 6792 ++ po/nb.gmo | Bin 0 -> 125517 bytes po/nb.po | 6842 ++ po/nl.gmo | Bin 0 -> 129410 bytes po/nl.po | 7526 +++ po/pa.gmo | Bin 0 -> 65330 bytes po/pa.po | 6695 ++ po/piglatin.sed | 21 + po/pl.gmo | Bin 0 -> 130829 bytes po/pl.po | 6867 ++ po/pt_BR.gmo | Bin 0 -> 88255 bytes po/pt_BR.po | 6925 ++ po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/ru.gmo | Bin 0 -> 168062 bytes po/ru.po | 7485 +++ po/sl.gmo | Bin 0 -> 98923 bytes po/sl.po | 7114 ++ po/sr.gmo | Bin 0 -> 162298 bytes po/sr.po | 6856 ++ po/stamp-po | 1 + po/sv.gmo | Bin 0 -> 125941 bytes po/sv.po | 6838 ++ po/swiss.sed | 7 + po/tr.gmo | Bin 0 -> 70759 bytes po/tr.po | 6702 ++ po/uk.gmo | Bin 0 -> 174051 bytes po/uk.po | 7056 ++ po/vi.gmo | Bin 0 -> 142717 bytes po/vi.po | 7005 ++ po/zh_CN.gmo | Bin 0 -> 30187 bytes po/zh_CN.po | 7557 +++ po/zh_TW.gmo | Bin 0 -> 30946 bytes po/zh_TW.po | 6973 ++ stamp-h.in | 1 + tests/ahci_test.in | 53 + tests/btrfs_test.in | 24 + tests/cdboot_test.in | 39 + tests/cmp_unit_test.c | 226 + tests/core_compress_test.in | 36 + tests/cpio_test.in | 16 + tests/date_unit_test.c | 76 + tests/dfly-mbr-mbexample.dfly.img.gz | Bin 0 -> 124 bytes tests/dfly-mbr-mbexample.mbr.img.gz | Bin 0 -> 41 bytes tests/ehci_test.in | 51 + tests/example_grub_script_test.in | 3 + tests/example_scripted_test.in | 4 + tests/example_unit_test.c | 38 + tests/exfat_test.in | 18 + tests/ext234_test.in | 32 + tests/fat_test.in | 22 + tests/fddboot_test.in | 51 + tests/file_filter/file | 1 + tests/file_filter/file.gz | Bin 0 -> 33 bytes tests/file_filter/file.gz.sig | Bin 0 -> 96 bytes tests/file_filter/file.lzop | Bin 0 -> 67 bytes tests/file_filter/file.lzop.sig | Bin 0 -> 96 bytes tests/file_filter/file.xz | Bin 0 -> 72 bytes tests/file_filter/file.xz.sig | Bin 0 -> 96 bytes tests/file_filter/keys | Bin 0 -> 994 bytes tests/file_filter/keys.pub | Bin 0 -> 990 bytes tests/file_filter/test.cfg | 6 + tests/file_filter_test.in | 76 + tests/gettext_strings_test.in | 20 + tests/grub_cmd_date.in | 29 + tests/grub_cmd_echo.in | 41 + tests/grub_cmd_regexp.in | 42 + tests/grub_cmd_set_date.in | 35 + tests/grub_cmd_sleep.in | 25 + tests/grub_cmd_test.in | 67 + tests/grub_cmd_tr.in | 62 + tests/grub_func_test.in | 21 + tests/grub_script_blanklines.in | 15 + tests/grub_script_blockarg.in | 41 + tests/grub_script_break.in | 86 + tests/grub_script_comments.in | 28 + tests/grub_script_continue.in | 86 + tests/grub_script_dollar.in | 6 + tests/grub_script_echo1.in | 183 + tests/grub_script_echo_keywords.in | 3 + tests/grub_script_escape_comma.in | 18 + tests/grub_script_eval.in | 6 + tests/grub_script_expansion.in | 43 + tests/grub_script_final_semicolon.in | 11 + tests/grub_script_for1.in | 27 + tests/grub_script_functions.in | 147 + tests/grub_script_gettext.in | 69 + tests/grub_script_if.in | 31 + tests/grub_script_leading_whitespace.in | 4 + tests/grub_script_no_commands.in | 21 + tests/grub_script_not.in | 62 + tests/grub_script_return.in | 134 + tests/grub_script_setparams.in | 59 + tests/grub_script_shift.in | 85 + tests/grub_script_strcmp.in | 22 + tests/grub_script_test.in | 15 + tests/grub_script_vars1.in | 34 + tests/grub_script_while1.in | 32 + tests/gzcompress_test.in | 29 + tests/hddboot_test.in | 37 + tests/help_test.in | 16 + tests/hfs_test.in | 23 + tests/hfsplus_test.in | 20 + tests/iso9660_test.in | 15 + tests/jfs_test.in | 18 + tests/lib/unit_test.c | 42 + tests/lzocompress_test.in | 29 + tests/minixfs_test.in | 35 + tests/netboot_test.in | 45 + tests/nilfs2_test.in | 18 + tests/ntfs_test.in | 24 + tests/ohci_test.in | 51 + tests/partmap_test.in | 489 + tests/pata_test.in | 55 + tests/printf_unit_test.c | 74 + tests/priority_queue_unit_test.cc | 105 + tests/pseries_test.in | 37 + tests/reiserfs_test.in | 20 + tests/romfs_test.in | 10 + tests/squashfs_test.in | 12 + tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg | 0 .../syslinux/ubuntu10.04/isolinux/dtmenu.cfg | 52 + .../ubuntu10.04/isolinux/exithelp.cfg | 3 + .../syslinux/ubuntu10.04/isolinux/gfxboot.cfg | 12 + .../ubuntu10.04/isolinux/isolinux.cfg | 6 + tests/syslinux/ubuntu10.04/isolinux/menu.cfg | 23 + tests/syslinux/ubuntu10.04/isolinux/po4a.cfg | 3 + .../syslinux/ubuntu10.04/isolinux/prompt.cfg | 16 + tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg | 4 + .../syslinux/ubuntu10.04/isolinux/stdmenu.cfg | 15 + tests/syslinux/ubuntu10.04/isolinux/txt.cfg | 19 + tests/syslinux/ubuntu10.04_grub.cfg.in | 236 + tests/syslinux_test.in | 16 + tests/tar_test.in | 10 + tests/test_sha512sum.in | 36 + tests/test_unset.in | 10 + tests/udf_test.in | 19 + tests/uhci_test.in | 51 + tests/util/grub-fs-tester.in | 1525 + tests/util/grub-shell-tester.in | 106 + tests/util/grub-shell.in | 510 + tests/xfs_test.in | 20 + tests/xzcompress_test.in | 29 + tests/zfs_test.in | 27 + themes/starfield/COPYING.CC-BY-SA-3.0 | 65 + themes/starfield/README | 36 + themes/starfield/blob_w.png | Bin 0 -> 836 bytes themes/starfield/boot_menu_c.png | Bin 0 -> 178 bytes themes/starfield/boot_menu_e.png | Bin 0 -> 193 bytes themes/starfield/boot_menu_n.png | Bin 0 -> 103 bytes themes/starfield/boot_menu_ne.png | Bin 0 -> 193 bytes themes/starfield/boot_menu_nw.png | Bin 0 -> 184 bytes themes/starfield/boot_menu_s.png | Bin 0 -> 102 bytes themes/starfield/boot_menu_se.png | Bin 0 -> 198 bytes themes/starfield/boot_menu_sw.png | Bin 0 -> 196 bytes themes/starfield/boot_menu_w.png | Bin 0 -> 96 bytes themes/starfield/slider_c.png | Bin 0 -> 197 bytes themes/starfield/slider_n.png | Bin 0 -> 265 bytes themes/starfield/slider_s.png | Bin 0 -> 269 bytes themes/starfield/src/blob_nw.xcf | Bin 0 -> 2666 bytes themes/starfield/src/bootmenu/center.xcf | Bin 0 -> 649 bytes themes/starfield/src/bootmenu/corner.xcf | Bin 0 -> 783 bytes themes/starfield/src/bootmenu/side.xcf | Bin 0 -> 659 bytes themes/starfield/src/slider_c.xcf | Bin 0 -> 693 bytes themes/starfield/src/slider_n.xcf | Bin 0 -> 845 bytes themes/starfield/src/slider_s.xcf | Bin 0 -> 863 bytes themes/starfield/src/terminalbox/center.xcf | Bin 0 -> 649 bytes themes/starfield/src/terminalbox/corner.xcf | Bin 0 -> 725 bytes themes/starfield/src/terminalbox/side.xcf | Bin 0 -> 824 bytes themes/starfield/starfield.png | Bin 0 -> 1897028 bytes themes/starfield/terminal_box_c.png | Bin 0 -> 178 bytes themes/starfield/terminal_box_e.png | Bin 0 -> 94 bytes themes/starfield/terminal_box_n.png | Bin 0 -> 194 bytes themes/starfield/terminal_box_ne.png | Bin 0 -> 128 bytes themes/starfield/terminal_box_nw.png | Bin 0 -> 210 bytes themes/starfield/terminal_box_s.png | Bin 0 -> 101 bytes themes/starfield/terminal_box_se.png | Bin 0 -> 126 bytes themes/starfield/terminal_box_sw.png | Bin 0 -> 123 bytes themes/starfield/terminal_box_w.png | Bin 0 -> 97 bytes themes/starfield/theme.txt | 79 + unicode/ArabicShaping.txt | 378 + unicode/BidiMirroring.txt | 597 + unicode/COPYING | 9 + unicode/UnicodeData.txt | 23697 +++++++ util/bash-completion.d/Makefile.am | 13 + util/bash-completion.d/Makefile.in | 1255 + .../bash-completion.d/grub-completion.bash.in | 495 + util/bin2h.c | 64 + util/config.c | 121 + util/editenv.c | 65 + util/garbage-gen.c | 67 + util/getroot.c | 482 + util/glue-efi.c | 143 + util/grub-editenv.c | 298 + util/grub-file.c | 106 + util/grub-fstest.c | 776 + util/grub-gen-asciih.c | 256 + util/grub-gen-widthspec.c | 153 + util/grub-glue-efi.c | 125 + util/grub-install-common.c | 974 + util/grub-install.c | 1913 + util/grub-kbdcomp.in | 77 + util/grub-macbless.c | 205 + util/grub-macho2img.c | 120 + util/grub-menulst2cfg.c | 135 + util/grub-mkconfig.in | 284 + util/grub-mkconfig_lib.in | 370 + util/grub-mkfont.c | 1287 + util/grub-mkimage.c | 319 + util/grub-mkimage32.c | 22 + util/grub-mkimage64.c | 22 + util/grub-mkimagexx.c | 2103 + util/grub-mklayout.c | 529 + util/grub-mknetdir.c | 222 + util/grub-mkpasswd-pbkdf2.c | 210 + util/grub-mkrelpath.c | 105 + util/grub-mkrescue.c | 973 + util/grub-mkstandalone.c | 361 + util/grub-module-verifier.c | 175 + util/grub-module-verifier32.c | 2 + util/grub-module-verifier64.c | 2 + util/grub-module-verifierXX.c | 435 + util/grub-mount.c | 620 + util/grub-pe2elf.c | 575 + util/grub-probe.c | 883 + util/grub-reboot.in | 144 + util/grub-render-label.c | 193 + util/grub-script-check.c | 218 + util/grub-set-default.in | 137 + util/grub-setup.c | 333 + util/grub-syslinux2cfg.c | 246 + util/grub.d/00_header.in | 356 + util/grub.d/10_hurd.in | 180 + util/grub.d/10_illumos.in | 53 + util/grub.d/10_kfreebsd.in | 244 + util/grub.d/10_linux.in | 257 + util/grub.d/10_netbsd.in | 186 + util/grub.d/10_windows.in | 100 + util/grub.d/10_xnu.in | 98 + util/grub.d/20_linux_xen.in | 276 + util/grub.d/30_os-prober.in | 335 + util/grub.d/40_custom.in | 5 + util/grub.d/41_custom.in | 9 + util/grub.d/README | 11 + util/i386/efi/grub-dumpdevtree | 22 + util/ieee1275/grub-ofpathname.c | 54 + util/import_gcry.py | 659 + util/import_gcrypth.sed | 18 + util/import_unicode.py | 193 + util/misc.c | 225 + util/mkimage.c | 1655 + util/probe.c | 172 + util/render-label.c | 215 + util/resolve.c | 287 + util/setup.c | 790 + util/setup_bios.c | 2 + util/setup_sparc.c | 2 + util/spkmodem-recv.c | 115 + 2137 files changed, 1012431 insertions(+) create mode 100644 ABOUT-NLS create mode 100644 AUTHORS create mode 100644 BUGS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 ChangeLog-2015 create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 Makefile.util.am create mode 100644 Makefile.util.def create mode 100644 Makefile.utilgcry.def create mode 100644 NEWS create mode 100644 README create mode 100644 THANKS create mode 100644 TODO create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 asm-tests/arm.S create mode 100644 asm-tests/i386-pc.S create mode 100644 asm-tests/i386.S create mode 100644 asm-tests/mips.S create mode 100644 asm-tests/powerpc.S create mode 100644 asm-tests/sparc64.S create mode 100755 autogen.sh create mode 100755 build-aux/compile create mode 100755 build-aux/config.guess create mode 100755 build-aux/config.rpath create mode 100755 build-aux/config.sub create mode 100755 build-aux/depcomp create mode 100755 build-aux/install-sh create mode 100755 build-aux/mdate-sh create mode 100755 build-aux/missing create mode 100644 build-aux/snippet/_Noreturn.h create mode 100644 build-aux/snippet/arg-nonnull.h create mode 100644 build-aux/snippet/c++defs.h create mode 100644 build-aux/snippet/warn-on-use.h create mode 100755 build-aux/test-driver create mode 100644 build-aux/texinfo.tex create mode 100644 conf/Makefile.common create mode 100644 conf/Makefile.extra-dist create mode 100644 conf/i386-cygwin-img-ld.sc create mode 100644 config-util.h.in create mode 100644 config.h.in create mode 100755 configure create mode 100644 configure.ac create mode 100644 coreboot.cfg create mode 100644 docs/Makefile.am create mode 100644 docs/Makefile.in create mode 100644 docs/autoiso.cfg create mode 100644 docs/fdl.texi create mode 100644 docs/font_char_metrics.png create mode 100644 docs/font_char_metrics.txt create mode 100644 docs/grub-dev.info create mode 100644 docs/grub-dev.texi create mode 100644 docs/grub.cfg create mode 100644 docs/grub.info create mode 100644 docs/grub.texi create mode 100644 docs/man/grub-bios-setup.h2m create mode 100644 docs/man/grub-editenv.h2m create mode 100644 docs/man/grub-emu.h2m create mode 100644 docs/man/grub-file.h2m create mode 100644 docs/man/grub-fstest.h2m create mode 100644 docs/man/grub-glue-efi.h2m create mode 100644 docs/man/grub-install.h2m create mode 100644 docs/man/grub-kbdcomp.h2m create mode 100644 docs/man/grub-macbless.h2m create mode 100644 docs/man/grub-macho2img.h2m create mode 100644 docs/man/grub-menulst2cfg.h2m create mode 100644 docs/man/grub-mkconfig.h2m create mode 100644 docs/man/grub-mkfont.h2m create mode 100644 docs/man/grub-mkimage.h2m create mode 100644 docs/man/grub-mklayout.h2m create mode 100644 docs/man/grub-mknetdir.h2m create mode 100644 docs/man/grub-mkpasswd-pbkdf2.h2m create mode 100644 docs/man/grub-mkrelpath.h2m create mode 100644 docs/man/grub-mkrescue.h2m create mode 100644 docs/man/grub-mkstandalone.h2m create mode 100644 docs/man/grub-mount.h2m create mode 100644 docs/man/grub-ofpathname.h2m create mode 100644 docs/man/grub-pe2elf.h2m create mode 100644 docs/man/grub-probe.h2m create mode 100644 docs/man/grub-reboot.h2m create mode 100644 docs/man/grub-render-label.h2m create mode 100644 docs/man/grub-script-check.h2m create mode 100644 docs/man/grub-set-default.h2m create mode 100644 docs/man/grub-sparc64-setup.h2m create mode 100644 docs/man/grub-syslinux2cfg.h2m create mode 100644 docs/mdate-sh create mode 100644 docs/osdetect.cfg create mode 100644 docs/stamp-1 create mode 100644 docs/stamp-vti create mode 100644 docs/texinfo.tex create mode 100644 docs/version-dev.texi create mode 100644 docs/version.texi create mode 100644 geninit.sh create mode 100644 gentpl.py create mode 100644 grub-core/Makefile.am create mode 100644 grub-core/Makefile.core.am create mode 100644 grub-core/Makefile.core.def create mode 100644 grub-core/Makefile.gcry.def create mode 100644 grub-core/Makefile.in create mode 100644 grub-core/boot/decompressor/minilib.c create mode 100644 grub-core/boot/decompressor/none.c create mode 100644 grub-core/boot/decompressor/xz.c create mode 100644 grub-core/boot/i386/pc/boot.S create mode 100644 grub-core/boot/i386/pc/cdboot.S create mode 100644 grub-core/boot/i386/pc/diskboot.S create mode 100644 grub-core/boot/i386/pc/lnxboot.S create mode 100644 grub-core/boot/i386/pc/lzma_decode.S create mode 100644 grub-core/boot/i386/pc/pxeboot.S create mode 100644 grub-core/boot/i386/pc/startup_raw.S create mode 100644 grub-core/boot/i386/qemu/boot.S create mode 100644 grub-core/boot/mips/loongson/fuloong2f.S create mode 100644 grub-core/boot/mips/loongson/fwstart.S create mode 100644 grub-core/boot/mips/startup_raw.S create mode 100644 grub-core/boot/powerpc/bootinfo.txt.in create mode 100644 grub-core/boot/powerpc/grub.chrp.in create mode 100644 grub-core/boot/sparc64/ieee1275/boot.S create mode 100644 grub-core/boot/sparc64/ieee1275/diskboot.S create mode 100644 grub-core/bus/bonito.c create mode 100644 grub-core/bus/cs5536.c create mode 100644 grub-core/bus/emu/pci.c create mode 100644 grub-core/bus/i386/ieee1275/pci.c create mode 100644 grub-core/bus/pci.c create mode 100644 grub-core/bus/usb/ehci.c create mode 100644 grub-core/bus/usb/ohci.c create mode 100644 grub-core/bus/usb/serial/common.c create mode 100644 grub-core/bus/usb/serial/ftdi.c create mode 100644 grub-core/bus/usb/serial/pl2303.c create mode 100644 grub-core/bus/usb/serial/usbdebug_late.c create mode 100644 grub-core/bus/usb/uhci.c create mode 100644 grub-core/bus/usb/usb.c create mode 100644 grub-core/bus/usb/usbhub.c create mode 100644 grub-core/bus/usb/usbtrans.c create mode 100644 grub-core/commands/acpi.c create mode 100644 grub-core/commands/acpihalt.c create mode 100644 grub-core/commands/arc/lsdev.c create mode 100644 grub-core/commands/blocklist.c create mode 100644 grub-core/commands/boot.c create mode 100644 grub-core/commands/boottime.c create mode 100644 grub-core/commands/cacheinfo.c create mode 100644 grub-core/commands/cat.c create mode 100644 grub-core/commands/cmp.c create mode 100644 grub-core/commands/configfile.c create mode 100644 grub-core/commands/date.c create mode 100644 grub-core/commands/echo.c create mode 100644 grub-core/commands/efi/efifwsetup.c create mode 100644 grub-core/commands/efi/fixvideo.c create mode 100644 grub-core/commands/efi/loadbios.c create mode 100644 grub-core/commands/efi/lsefi.c create mode 100644 grub-core/commands/efi/lsefimmap.c create mode 100644 grub-core/commands/efi/lsefisystab.c create mode 100644 grub-core/commands/efi/lssal.c create mode 100644 grub-core/commands/eval.c create mode 100644 grub-core/commands/extcmd.c create mode 100644 grub-core/commands/file.c create mode 100644 grub-core/commands/file32.c create mode 100644 grub-core/commands/file64.c create mode 100644 grub-core/commands/fileXX.c create mode 100644 grub-core/commands/gptsync.c create mode 100644 grub-core/commands/halt.c create mode 100644 grub-core/commands/hashsum.c create mode 100644 grub-core/commands/hdparm.c create mode 100644 grub-core/commands/help.c create mode 100644 grub-core/commands/hexdump.c create mode 100644 grub-core/commands/i386/cmosdump.c create mode 100644 grub-core/commands/i386/cmostest.c create mode 100644 grub-core/commands/i386/coreboot/cb_timestamps.c create mode 100644 grub-core/commands/i386/coreboot/cbls.c create mode 100644 grub-core/commands/i386/cpuid.c create mode 100644 grub-core/commands/i386/pc/drivemap.c create mode 100644 grub-core/commands/i386/pc/drivemap_int13h.S create mode 100644 grub-core/commands/i386/pc/halt.c create mode 100644 grub-core/commands/i386/pc/lsapm.c create mode 100644 grub-core/commands/i386/pc/play.c create mode 100644 grub-core/commands/i386/pc/sendkey.c create mode 100644 grub-core/commands/ieee1275/suspend.c create mode 100644 grub-core/commands/iorw.c create mode 100644 grub-core/commands/keylayouts.c create mode 100644 grub-core/commands/keystatus.c create mode 100644 grub-core/commands/legacycfg.c create mode 100644 grub-core/commands/loadenv.c create mode 100644 grub-core/commands/ls.c create mode 100644 grub-core/commands/lsacpi.c create mode 100644 grub-core/commands/lsmmap.c create mode 100644 grub-core/commands/lspci.c create mode 100644 grub-core/commands/macbless.c create mode 100644 grub-core/commands/memrw.c create mode 100644 grub-core/commands/menuentry.c create mode 100644 grub-core/commands/minicmd.c create mode 100644 grub-core/commands/mips/loongson/lsspd.c create mode 100644 grub-core/commands/nativedisk.c create mode 100644 grub-core/commands/parttool.c create mode 100644 grub-core/commands/password.c create mode 100644 grub-core/commands/password_pbkdf2.c create mode 100644 grub-core/commands/pcidump.c create mode 100644 grub-core/commands/probe.c create mode 100644 grub-core/commands/read.c create mode 100644 grub-core/commands/reboot.c create mode 100644 grub-core/commands/regexp.c create mode 100644 grub-core/commands/search.c create mode 100644 grub-core/commands/search_file.c create mode 100644 grub-core/commands/search_label.c create mode 100644 grub-core/commands/search_uuid.c create mode 100644 grub-core/commands/search_wrap.c create mode 100644 grub-core/commands/setpci.c create mode 100644 grub-core/commands/sleep.c create mode 100644 grub-core/commands/syslinuxcfg.c create mode 100644 grub-core/commands/terminal.c create mode 100644 grub-core/commands/test.c create mode 100644 grub-core/commands/testload.c create mode 100644 grub-core/commands/testspeed.c create mode 100644 grub-core/commands/time.c create mode 100644 grub-core/commands/tr.c create mode 100644 grub-core/commands/true.c create mode 100644 grub-core/commands/usbtest.c create mode 100644 grub-core/commands/verify.c create mode 100644 grub-core/commands/videoinfo.c create mode 100644 grub-core/commands/videotest.c create mode 100644 grub-core/commands/wildcard.c create mode 100644 grub-core/commands/xen/lsxen.c create mode 100644 grub-core/commands/xnu_uuid.c create mode 100644 grub-core/disk/AFSplitter.c create mode 100644 grub-core/disk/ahci.c create mode 100644 grub-core/disk/arc/arcdisk.c create mode 100644 grub-core/disk/ata.c create mode 100644 grub-core/disk/cryptodisk.c create mode 100644 grub-core/disk/diskfilter.c create mode 100644 grub-core/disk/dmraid_nvidia.c create mode 100644 grub-core/disk/efi/efidisk.c create mode 100644 grub-core/disk/geli.c create mode 100644 grub-core/disk/host.c create mode 100644 grub-core/disk/i386/pc/biosdisk.c create mode 100644 grub-core/disk/ieee1275/nand.c create mode 100644 grub-core/disk/ieee1275/ofdisk.c create mode 100644 grub-core/disk/ldm.c create mode 100644 grub-core/disk/loopback.c create mode 100644 grub-core/disk/luks.c create mode 100644 grub-core/disk/lvm.c create mode 100644 grub-core/disk/mdraid1x_linux.c create mode 100644 grub-core/disk/mdraid_linux.c create mode 100644 grub-core/disk/mdraid_linux_be.c create mode 100644 grub-core/disk/memdisk.c create mode 100644 grub-core/disk/pata.c create mode 100644 grub-core/disk/raid5_recover.c create mode 100644 grub-core/disk/raid6_recover.c create mode 100644 grub-core/disk/scsi.c create mode 100644 grub-core/disk/uboot/ubootdisk.c create mode 100644 grub-core/disk/usbms.c create mode 100644 grub-core/disk/xen/xendisk.c create mode 100644 grub-core/efiemu/i386/coredetect.c create mode 100644 grub-core/efiemu/i386/loadcore32.c create mode 100644 grub-core/efiemu/i386/loadcore64.c create mode 100644 grub-core/efiemu/i386/nocfgtables.c create mode 100644 grub-core/efiemu/i386/pc/cfgtables.c create mode 100644 grub-core/efiemu/loadcore.c create mode 100644 grub-core/efiemu/loadcore32.c create mode 100644 grub-core/efiemu/loadcore64.c create mode 100644 grub-core/efiemu/loadcore_common.c create mode 100644 grub-core/efiemu/main.c create mode 100644 grub-core/efiemu/mm.c create mode 100644 grub-core/efiemu/pnvram.c create mode 100644 grub-core/efiemu/prepare.c create mode 100644 grub-core/efiemu/prepare32.c create mode 100644 grub-core/efiemu/prepare64.c create mode 100644 grub-core/efiemu/runtime/config.h create mode 100644 grub-core/efiemu/runtime/efiemu.S create mode 100644 grub-core/efiemu/runtime/efiemu.c create mode 100644 grub-core/efiemu/symbols.c create mode 100644 grub-core/font/font.c create mode 100644 grub-core/font/font_cmd.c create mode 100644 grub-core/fs/affs.c create mode 100644 grub-core/fs/afs.c create mode 100644 grub-core/fs/archelp.c create mode 100644 grub-core/fs/bfs.c create mode 100644 grub-core/fs/btrfs.c create mode 100644 grub-core/fs/cbfs.c create mode 100644 grub-core/fs/cpio.c create mode 100644 grub-core/fs/cpio_be.c create mode 100644 grub-core/fs/cpio_common.c create mode 100644 grub-core/fs/exfat.c create mode 100644 grub-core/fs/ext2.c create mode 100644 grub-core/fs/fat.c create mode 100644 grub-core/fs/fshelp.c create mode 100644 grub-core/fs/hfs.c create mode 100644 grub-core/fs/hfsplus.c create mode 100644 grub-core/fs/hfspluscomp.c create mode 100644 grub-core/fs/iso9660.c create mode 100644 grub-core/fs/jfs.c create mode 100644 grub-core/fs/minix.c create mode 100644 grub-core/fs/minix2.c create mode 100644 grub-core/fs/minix2_be.c create mode 100644 grub-core/fs/minix3.c create mode 100644 grub-core/fs/minix3_be.c create mode 100644 grub-core/fs/minix_be.c create mode 100644 grub-core/fs/newc.c create mode 100644 grub-core/fs/nilfs2.c create mode 100644 grub-core/fs/ntfs.c create mode 100644 grub-core/fs/ntfscomp.c create mode 100644 grub-core/fs/odc.c create mode 100644 grub-core/fs/proc.c create mode 100644 grub-core/fs/reiserfs.c create mode 100644 grub-core/fs/romfs.c create mode 100644 grub-core/fs/sfs.c create mode 100644 grub-core/fs/squash4.c create mode 100644 grub-core/fs/tar.c create mode 100644 grub-core/fs/udf.c create mode 100644 grub-core/fs/ufs.c create mode 100644 grub-core/fs/ufs2.c create mode 100644 grub-core/fs/ufs_be.c create mode 100644 grub-core/fs/xfs.c create mode 100644 grub-core/fs/zfs/zfs.c create mode 100644 grub-core/fs/zfs/zfs_fletcher.c create mode 100644 grub-core/fs/zfs/zfs_lz4.c create mode 100644 grub-core/fs/zfs/zfs_lzjb.c create mode 100644 grub-core/fs/zfs/zfs_sha256.c create mode 100644 grub-core/fs/zfs/zfscrypt.c create mode 100644 grub-core/fs/zfs/zfsinfo.c create mode 100644 grub-core/gdb/cstub.c create mode 100644 grub-core/gdb/gdb.c create mode 100644 grub-core/gdb/i386/idt.c create mode 100644 grub-core/gdb/i386/machdep.S create mode 100644 grub-core/gdb/i386/signal.c create mode 100644 grub-core/gdb_grub.in create mode 100644 grub-core/genemuinit.sh create mode 100644 grub-core/genemuinitheader.sh create mode 100644 grub-core/genmod.sh.in create mode 100644 grub-core/genmoddep.awk create mode 100644 grub-core/gensyminfo.sh.in create mode 100644 grub-core/gensymlist.sh create mode 100644 grub-core/gentrigtables.c create mode 100644 grub-core/gettext/gettext.c create mode 100644 grub-core/gfxmenu/font.c create mode 100644 grub-core/gfxmenu/gfxmenu.c create mode 100644 grub-core/gfxmenu/gui_box.c create mode 100644 grub-core/gfxmenu/gui_canvas.c create mode 100644 grub-core/gfxmenu/gui_circular_progress.c create mode 100644 grub-core/gfxmenu/gui_image.c create mode 100644 grub-core/gfxmenu/gui_label.c create mode 100644 grub-core/gfxmenu/gui_list.c create mode 100644 grub-core/gfxmenu/gui_progress_bar.c create mode 100644 grub-core/gfxmenu/gui_string_util.c create mode 100644 grub-core/gfxmenu/gui_util.c create mode 100644 grub-core/gfxmenu/icon_manager.c create mode 100644 grub-core/gfxmenu/theme_loader.c create mode 100644 grub-core/gfxmenu/view.c create mode 100644 grub-core/gfxmenu/widget-box.c create mode 100644 grub-core/gmodule.pl.in create mode 100644 grub-core/gnulib-fix-null-deref.diff create mode 100644 grub-core/gnulib-fix-width.diff create mode 100644 grub-core/gnulib-no-abort.diff create mode 100644 grub-core/gnulib-no-gets.diff create mode 100644 grub-core/gnulib/Makefile.am create mode 100644 grub-core/gnulib/Makefile.in create mode 100644 grub-core/gnulib/alloca.c create mode 100644 grub-core/gnulib/alloca.in.h create mode 100644 grub-core/gnulib/argp-ba.c create mode 100644 grub-core/gnulib/argp-eexst.c create mode 100644 grub-core/gnulib/argp-fmtstream.c create mode 100644 grub-core/gnulib/argp-fmtstream.h create mode 100644 grub-core/gnulib/argp-fs-xinl.c create mode 100644 grub-core/gnulib/argp-help.c create mode 100644 grub-core/gnulib/argp-namefrob.h create mode 100644 grub-core/gnulib/argp-parse.c create mode 100644 grub-core/gnulib/argp-pin.c create mode 100644 grub-core/gnulib/argp-pv.c create mode 100644 grub-core/gnulib/argp-pvh.c create mode 100644 grub-core/gnulib/argp-xinl.c create mode 100644 grub-core/gnulib/argp.h create mode 100644 grub-core/gnulib/asnprintf.c create mode 100644 grub-core/gnulib/basename-lgpl.c create mode 100644 grub-core/gnulib/btowc.c create mode 100644 grub-core/gnulib/config.charset create mode 100644 grub-core/gnulib/dirname-lgpl.c create mode 100644 grub-core/gnulib/dirname.h create mode 100644 grub-core/gnulib/dosname.h create mode 100644 grub-core/gnulib/errno.in.h create mode 100644 grub-core/gnulib/error.c create mode 100644 grub-core/gnulib/error.h create mode 100644 grub-core/gnulib/float+.h create mode 100644 grub-core/gnulib/float.c create mode 100644 grub-core/gnulib/float.in.h create mode 100644 grub-core/gnulib/fnmatch.c create mode 100644 grub-core/gnulib/fnmatch.in.h create mode 100644 grub-core/gnulib/fnmatch_loop.c create mode 100644 grub-core/gnulib/getdelim.c create mode 100644 grub-core/gnulib/getline.c create mode 100644 grub-core/gnulib/getopt.c create mode 100644 grub-core/gnulib/getopt.in.h create mode 100644 grub-core/gnulib/getopt1.c create mode 100644 grub-core/gnulib/getopt_int.h create mode 100644 grub-core/gnulib/gettext.h create mode 100644 grub-core/gnulib/intprops.h create mode 100644 grub-core/gnulib/itold.c create mode 100644 grub-core/gnulib/langinfo.in.h create mode 100644 grub-core/gnulib/localcharset.c create mode 100644 grub-core/gnulib/localcharset.h create mode 100644 grub-core/gnulib/locale.in.h create mode 100644 grub-core/gnulib/localeconv.c create mode 100644 grub-core/gnulib/malloc.c create mode 100644 grub-core/gnulib/mbrtowc.c create mode 100644 grub-core/gnulib/mbsinit.c create mode 100644 grub-core/gnulib/mbsrtowcs-impl.h create mode 100644 grub-core/gnulib/mbsrtowcs-state.c create mode 100644 grub-core/gnulib/mbsrtowcs.c create mode 100644 grub-core/gnulib/mbswidth.c create mode 100644 grub-core/gnulib/mbswidth.h create mode 100644 grub-core/gnulib/mbtowc-impl.h create mode 100644 grub-core/gnulib/mbtowc.c create mode 100644 grub-core/gnulib/memchr.c create mode 100644 grub-core/gnulib/memchr.valgrind create mode 100644 grub-core/gnulib/mempcpy.c create mode 100644 grub-core/gnulib/msvc-inval.c create mode 100644 grub-core/gnulib/msvc-inval.h create mode 100644 grub-core/gnulib/msvc-nothrow.c create mode 100644 grub-core/gnulib/msvc-nothrow.h create mode 100644 grub-core/gnulib/nl_langinfo.c create mode 100644 grub-core/gnulib/printf-args.c create mode 100644 grub-core/gnulib/printf-args.h create mode 100644 grub-core/gnulib/printf-parse.c create mode 100644 grub-core/gnulib/printf-parse.h create mode 100644 grub-core/gnulib/progname.c create mode 100644 grub-core/gnulib/progname.h create mode 100644 grub-core/gnulib/rawmemchr.c create mode 100644 grub-core/gnulib/rawmemchr.valgrind create mode 100644 grub-core/gnulib/realloc.c create mode 100644 grub-core/gnulib/ref-add.sin create mode 100644 grub-core/gnulib/ref-del.sin create mode 100644 grub-core/gnulib/regcomp.c create mode 100644 grub-core/gnulib/regex.c create mode 100644 grub-core/gnulib/regex.h create mode 100644 grub-core/gnulib/regex_internal.c create mode 100644 grub-core/gnulib/regex_internal.h create mode 100644 grub-core/gnulib/regexec.c create mode 100644 grub-core/gnulib/size_max.h create mode 100644 grub-core/gnulib/sleep.c create mode 100644 grub-core/gnulib/stdalign.in.h create mode 100644 grub-core/gnulib/stdbool.in.h create mode 100644 grub-core/gnulib/stddef.in.h create mode 100644 grub-core/gnulib/stdint.in.h create mode 100644 grub-core/gnulib/stdio.in.h create mode 100644 grub-core/gnulib/stdlib.in.h create mode 100644 grub-core/gnulib/strcasecmp.c create mode 100644 grub-core/gnulib/strchrnul.c create mode 100644 grub-core/gnulib/strchrnul.valgrind create mode 100644 grub-core/gnulib/streq.h create mode 100644 grub-core/gnulib/strerror-override.c create mode 100644 grub-core/gnulib/strerror-override.h create mode 100644 grub-core/gnulib/strerror.c create mode 100644 grub-core/gnulib/string.in.h create mode 100644 grub-core/gnulib/strings.in.h create mode 100644 grub-core/gnulib/stripslash.c create mode 100644 grub-core/gnulib/strncasecmp.c create mode 100644 grub-core/gnulib/strndup.c create mode 100644 grub-core/gnulib/strnlen.c create mode 100644 grub-core/gnulib/strnlen1.c create mode 100644 grub-core/gnulib/strnlen1.h create mode 100644 grub-core/gnulib/sys_types.in.h create mode 100644 grub-core/gnulib/sysexits.in.h create mode 100644 grub-core/gnulib/unistd.c create mode 100644 grub-core/gnulib/unistd.in.h create mode 100644 grub-core/gnulib/unitypes.in.h create mode 100644 grub-core/gnulib/uniwidth.in.h create mode 100644 grub-core/gnulib/uniwidth/cjk.h create mode 100644 grub-core/gnulib/uniwidth/width.c create mode 100644 grub-core/gnulib/vasnprintf.c create mode 100644 grub-core/gnulib/vasnprintf.h create mode 100644 grub-core/gnulib/verify.h create mode 100644 grub-core/gnulib/vsnprintf.c create mode 100644 grub-core/gnulib/wchar.in.h create mode 100644 grub-core/gnulib/wcrtomb.c create mode 100644 grub-core/gnulib/wctype-h.c create mode 100644 grub-core/gnulib/wctype.in.h create mode 100644 grub-core/gnulib/wcwidth.c create mode 100644 grub-core/gnulib/xsize.c create mode 100644 grub-core/gnulib/xsize.h create mode 100644 grub-core/hello/hello.c create mode 100644 grub-core/hook/datehook.c create mode 100644 grub-core/io/bufio.c create mode 100644 grub-core/io/gzio.c create mode 100644 grub-core/io/lzopio.c create mode 100644 grub-core/io/offset.c create mode 100644 grub-core/io/xzio.c create mode 100644 grub-core/kern/acpi.c create mode 100644 grub-core/kern/arm/cache.S create mode 100644 grub-core/kern/arm/cache.c create mode 100644 grub-core/kern/arm/cache_armv6.S create mode 100644 grub-core/kern/arm/cache_armv7.S create mode 100644 grub-core/kern/arm/compiler-rt.S create mode 100644 grub-core/kern/arm/dl.c create mode 100644 grub-core/kern/arm/dl_helper.c create mode 100644 grub-core/kern/arm/efi/init.c create mode 100644 grub-core/kern/arm/efi/misc.c create mode 100644 grub-core/kern/arm/efi/startup.S create mode 100644 grub-core/kern/arm/uboot/startup.S create mode 100644 grub-core/kern/arm64/cache.c create mode 100644 grub-core/kern/arm64/cache_flush.S create mode 100644 grub-core/kern/arm64/dl.c create mode 100644 grub-core/kern/arm64/dl_helper.c create mode 100644 grub-core/kern/arm64/efi/init.c create mode 100644 grub-core/kern/arm64/efi/startup.S create mode 100644 grub-core/kern/command.c create mode 100644 grub-core/kern/compiler-rt.c create mode 100644 grub-core/kern/corecmd.c create mode 100644 grub-core/kern/device.c create mode 100644 grub-core/kern/disk.c create mode 100644 grub-core/kern/disk_common.c create mode 100644 grub-core/kern/dl.c create mode 100644 grub-core/kern/efi/acpi.c create mode 100644 grub-core/kern/efi/efi.c create mode 100644 grub-core/kern/efi/fdt.c create mode 100644 grub-core/kern/efi/init.c create mode 100644 grub-core/kern/efi/mm.c create mode 100644 grub-core/kern/elf.c create mode 100644 grub-core/kern/elfXX.c create mode 100644 grub-core/kern/emu/argp_common.c create mode 100644 grub-core/kern/emu/cache.c create mode 100644 grub-core/kern/emu/cache_s.S create mode 100644 grub-core/kern/emu/full.c create mode 100644 grub-core/kern/emu/hostdisk.c create mode 100644 grub-core/kern/emu/hostfs.c create mode 100644 grub-core/kern/emu/lite.c create mode 100644 grub-core/kern/emu/main.c create mode 100644 grub-core/kern/emu/misc.c create mode 100644 grub-core/kern/emu/mm.c create mode 100644 grub-core/kern/emu/time.c create mode 100644 grub-core/kern/env.c create mode 100644 grub-core/kern/err.c create mode 100644 grub-core/kern/file.c create mode 100644 grub-core/kern/fs.c create mode 100644 grub-core/kern/generic/millisleep.c create mode 100644 grub-core/kern/generic/rtc_get_time_ms.c create mode 100644 grub-core/kern/i386/coreboot/cbtable.c create mode 100644 grub-core/kern/i386/coreboot/init.c create mode 100644 grub-core/kern/i386/coreboot/mmap.c create mode 100644 grub-core/kern/i386/coreboot/startup.S create mode 100644 grub-core/kern/i386/dl.c create mode 100644 grub-core/kern/i386/efi/init.c create mode 100644 grub-core/kern/i386/efi/startup.S create mode 100644 grub-core/kern/i386/efi/tsc.c create mode 100644 grub-core/kern/i386/ieee1275/startup.S create mode 100644 grub-core/kern/i386/int.S create mode 100644 grub-core/kern/i386/multiboot_mmap.c create mode 100644 grub-core/kern/i386/pc/acpi.c create mode 100644 grub-core/kern/i386/pc/init.c create mode 100644 grub-core/kern/i386/pc/mmap.c create mode 100644 grub-core/kern/i386/pc/startup.S create mode 100644 grub-core/kern/i386/qemu/init.c create mode 100644 grub-core/kern/i386/qemu/mmap.c create mode 100644 grub-core/kern/i386/qemu/startup.S create mode 100644 grub-core/kern/i386/realmode.S create mode 100644 grub-core/kern/i386/tsc.c create mode 100644 grub-core/kern/i386/tsc_pit.c create mode 100644 grub-core/kern/i386/tsc_pmtimer.c create mode 100644 grub-core/kern/i386/xen/hypercall.S create mode 100644 grub-core/kern/i386/xen/startup.S create mode 100644 grub-core/kern/i386/xen/tsc.c create mode 100644 grub-core/kern/ia64/cache.c create mode 100644 grub-core/kern/ia64/dl.c create mode 100644 grub-core/kern/ia64/dl_helper.c create mode 100644 grub-core/kern/ia64/efi/init.c create mode 100644 grub-core/kern/ia64/efi/startup.S create mode 100644 grub-core/kern/ieee1275/cmain.c create mode 100644 grub-core/kern/ieee1275/ieee1275.c create mode 100644 grub-core/kern/ieee1275/init.c create mode 100644 grub-core/kern/ieee1275/mmap.c create mode 100644 grub-core/kern/ieee1275/openfw.c create mode 100644 grub-core/kern/list.c create mode 100644 grub-core/kern/main.c create mode 100644 grub-core/kern/mips/arc/init.c create mode 100644 grub-core/kern/mips/cache.S create mode 100644 grub-core/kern/mips/cache_flush.S create mode 100644 grub-core/kern/mips/dl.c create mode 100644 grub-core/kern/mips/init.c create mode 100644 grub-core/kern/mips/loongson/init.c create mode 100644 grub-core/kern/mips/qemu_mips/init.c create mode 100644 grub-core/kern/mips/startup.S create mode 100644 grub-core/kern/misc.c create mode 100644 grub-core/kern/mm.c create mode 100644 grub-core/kern/parser.c create mode 100644 grub-core/kern/partition.c create mode 100644 grub-core/kern/powerpc/cache.S create mode 100644 grub-core/kern/powerpc/cache_flush.S create mode 100644 grub-core/kern/powerpc/compiler-rt.S create mode 100644 grub-core/kern/powerpc/dl.c create mode 100644 grub-core/kern/powerpc/ieee1275/startup.S create mode 100644 grub-core/kern/rescue_parser.c create mode 100644 grub-core/kern/rescue_reader.c create mode 100644 grub-core/kern/sparc64/cache.S create mode 100644 grub-core/kern/sparc64/dl.c create mode 100644 grub-core/kern/sparc64/ieee1275/crt0.S create mode 100644 grub-core/kern/sparc64/ieee1275/ieee1275.c create mode 100644 grub-core/kern/term.c create mode 100644 grub-core/kern/time.c create mode 100644 grub-core/kern/uboot/hw.c create mode 100644 grub-core/kern/uboot/init.c create mode 100644 grub-core/kern/uboot/uboot.c create mode 100644 grub-core/kern/vga_init.c create mode 100644 grub-core/kern/x86_64/dl.c create mode 100644 grub-core/kern/x86_64/efi/callwrap.S create mode 100644 grub-core/kern/x86_64/efi/startup.S create mode 100644 grub-core/kern/x86_64/xen/hypercall.S create mode 100644 grub-core/kern/x86_64/xen/startup.S create mode 100644 grub-core/kern/xen/init.c create mode 100644 grub-core/lib/LzFind.c create mode 100644 grub-core/lib/LzmaDec.c create mode 100644 grub-core/lib/LzmaEnc.c create mode 100644 grub-core/lib/adler32.c create mode 100644 grub-core/lib/arc/datetime.c create mode 100644 grub-core/lib/arg.c create mode 100644 grub-core/lib/arm/setjmp.S create mode 100644 grub-core/lib/arm64/setjmp.S create mode 100644 grub-core/lib/backtrace.c create mode 100644 grub-core/lib/cmdline.c create mode 100644 grub-core/lib/cmos_datetime.c create mode 100644 grub-core/lib/crc.c create mode 100644 grub-core/lib/crc64.c create mode 100644 grub-core/lib/crypto.c create mode 100644 grub-core/lib/disk.c create mode 100644 grub-core/lib/division.c create mode 100644 grub-core/lib/efi/datetime.c create mode 100644 grub-core/lib/efi/halt.c create mode 100644 grub-core/lib/efi/reboot.c create mode 100644 grub-core/lib/efi/relocator.c create mode 100644 grub-core/lib/emu/halt.c create mode 100644 grub-core/lib/envblk.c create mode 100644 grub-core/lib/fake_module.c create mode 100644 grub-core/lib/fdt.c create mode 100644 grub-core/lib/getline.c create mode 100644 grub-core/lib/hexdump.c create mode 100644 grub-core/lib/i386/backtrace.c create mode 100644 grub-core/lib/i386/halt.c create mode 100644 grub-core/lib/i386/pc/biosnum.c create mode 100644 grub-core/lib/i386/pc/vesa_modes_table.c create mode 100644 grub-core/lib/i386/random.c create mode 100644 grub-core/lib/i386/reboot.c create mode 100644 grub-core/lib/i386/reboot_trampoline.S create mode 100644 grub-core/lib/i386/relocator.c create mode 100644 grub-core/lib/i386/relocator16.S create mode 100644 grub-core/lib/i386/relocator32.S create mode 100644 grub-core/lib/i386/relocator64.S create mode 100644 grub-core/lib/i386/relocator_asm.S create mode 100644 grub-core/lib/i386/relocator_common.S create mode 100644 grub-core/lib/i386/relocator_common_c.c create mode 100644 grub-core/lib/i386/setjmp.S create mode 100644 grub-core/lib/i386/xen/relocator.S create mode 100644 grub-core/lib/ia64/longjmp.S create mode 100644 grub-core/lib/ia64/setjmp.S create mode 100644 grub-core/lib/ieee1275/cmos.c create mode 100644 grub-core/lib/ieee1275/datetime.c create mode 100644 grub-core/lib/ieee1275/halt.c create mode 100644 grub-core/lib/ieee1275/reboot.c create mode 100644 grub-core/lib/ieee1275/relocator.c create mode 100644 grub-core/lib/legacy_parse.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/ChangeLog create mode 100644 grub-core/lib/libgcrypt-grub/cipher/arcfour.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/bithelp.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/blowfish.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/camellia.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/camellia.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/cast5.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/cipher.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/crypto.lst create mode 100644 grub-core/lib/libgcrypt-grub/cipher/des.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/dsa.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/g10lib.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/hash-common.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/idea.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/init.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/md4.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/md5.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/memory.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/rfc2268.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/rijndael-tables.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/rijndael.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/rmd.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/rmd160.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/rsa.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/seed.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/serpent.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/sha1.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/sha256.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/sha512.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/tiger.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/twofish.c create mode 100644 grub-core/lib/libgcrypt-grub/cipher/types.h create mode 100644 grub-core/lib/libgcrypt-grub/cipher/whirlpool.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/Manifest create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/distfiles create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpi-asm-defs.h create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpih-add1.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpih-lshift.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul1.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul2.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul3.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpih-rshift.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/mpih-sub1.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/generic/udiv-w-sdiv.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/longlong.h create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-add.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-asm-defs.h create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-bit.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-cmp.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-div.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-gcd.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-inline.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-inline.h create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-internal.h create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-inv.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-mod.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-mpow.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-mul.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpi-pow.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpicoder.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-add1.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-div.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-lshift.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-mul.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-mul1.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-mul2.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-mul3.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-rshift.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpih-sub1.c create mode 100644 grub-core/lib/libgcrypt-grub/mpi/mpiutil.c create mode 100644 grub-core/lib/libgcrypt-grub/src/ath.h create mode 100644 grub-core/lib/libgcrypt-grub/src/cipher-proto.h create mode 100644 grub-core/lib/libgcrypt-grub/src/cipher.h create mode 100644 grub-core/lib/libgcrypt-grub/src/g10lib.h create mode 100644 grub-core/lib/libgcrypt-grub/src/gcrypt-module.h create mode 100644 grub-core/lib/libgcrypt-grub/src/gcrypt.h create mode 100644 grub-core/lib/libgcrypt-grub/src/hmac256.h create mode 100644 grub-core/lib/libgcrypt-grub/src/mpi.h create mode 100644 grub-core/lib/libgcrypt-grub/src/secmem.h create mode 100644 grub-core/lib/libgcrypt-grub/src/stdmem.h create mode 100644 grub-core/lib/libgcrypt-grub/src/types.h create mode 100644 grub-core/lib/libgcrypt-grub/src/visibility.h create mode 100644 grub-core/lib/libgcrypt/cipher/ChangeLog create mode 100644 grub-core/lib/libgcrypt/cipher/ChangeLog-2011 create mode 100644 grub-core/lib/libgcrypt/cipher/Makefile.am create mode 100644 grub-core/lib/libgcrypt/cipher/Manifest create mode 100644 grub-core/lib/libgcrypt/cipher/ac.c create mode 100644 grub-core/lib/libgcrypt/cipher/arcfour.c create mode 100644 grub-core/lib/libgcrypt/cipher/bithelp.h create mode 100644 grub-core/lib/libgcrypt/cipher/blowfish.c create mode 100644 grub-core/lib/libgcrypt/cipher/camellia-glue.c create mode 100644 grub-core/lib/libgcrypt/cipher/camellia.c create mode 100644 grub-core/lib/libgcrypt/cipher/camellia.h create mode 100644 grub-core/lib/libgcrypt/cipher/cast5.c create mode 100644 grub-core/lib/libgcrypt/cipher/cipher.c create mode 100644 grub-core/lib/libgcrypt/cipher/des.c create mode 100644 grub-core/lib/libgcrypt/cipher/dsa.c create mode 100644 grub-core/lib/libgcrypt/cipher/ecc.c create mode 100644 grub-core/lib/libgcrypt/cipher/elgamal.c create mode 100644 grub-core/lib/libgcrypt/cipher/hash-common.c create mode 100644 grub-core/lib/libgcrypt/cipher/hash-common.h create mode 100644 grub-core/lib/libgcrypt/cipher/hmac-tests.c create mode 100644 grub-core/lib/libgcrypt/cipher/idea.c create mode 100644 grub-core/lib/libgcrypt/cipher/kdf.c create mode 100644 grub-core/lib/libgcrypt/cipher/md.c create mode 100644 grub-core/lib/libgcrypt/cipher/md4.c create mode 100644 grub-core/lib/libgcrypt/cipher/md5.c create mode 100644 grub-core/lib/libgcrypt/cipher/primegen.c create mode 100644 grub-core/lib/libgcrypt/cipher/pubkey.c create mode 100644 grub-core/lib/libgcrypt/cipher/rfc2268.c create mode 100644 grub-core/lib/libgcrypt/cipher/rijndael-tables.h create mode 100644 grub-core/lib/libgcrypt/cipher/rijndael.c create mode 100644 grub-core/lib/libgcrypt/cipher/rmd.h create mode 100644 grub-core/lib/libgcrypt/cipher/rmd160.c create mode 100644 grub-core/lib/libgcrypt/cipher/rsa.c create mode 100644 grub-core/lib/libgcrypt/cipher/seed.c create mode 100644 grub-core/lib/libgcrypt/cipher/serpent.c create mode 100644 grub-core/lib/libgcrypt/cipher/sha1.c create mode 100644 grub-core/lib/libgcrypt/cipher/sha256.c create mode 100644 grub-core/lib/libgcrypt/cipher/sha512.c create mode 100644 grub-core/lib/libgcrypt/cipher/test-getrusage.c create mode 100644 grub-core/lib/libgcrypt/cipher/tiger.c create mode 100644 grub-core/lib/libgcrypt/cipher/twofish.c create mode 100644 grub-core/lib/libgcrypt/cipher/whirlpool.c create mode 100644 grub-core/lib/libgcrypt/mpi/ChangeLog-2011 create mode 100644 grub-core/lib/libgcrypt/mpi/Makefile.am create mode 100644 grub-core/lib/libgcrypt/mpi/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/README create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/alpha/udiv-qrnnd.S create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpi-asm-defs.h create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/amd64/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/config.links create mode 100644 grub-core/lib/libgcrypt/mpi/ec.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/generic/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpi-asm-defs.h create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpih-add1.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpih-lshift.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpih-mul1.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpih-mul2.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpih-mul3.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpih-rshift.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/mpih-sub1.c create mode 100644 grub-core/lib/libgcrypt/mpi/generic/udiv-w-sdiv.c create mode 100644 grub-core/lib/libgcrypt/mpi/hppa/README create mode 100644 grub-core/lib/libgcrypt/mpi/hppa/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/hppa/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa/udiv-qrnnd.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa1.1/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/hppa1.1/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa1.1/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa1.1/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/hppa1.1/udiv-qrnnd.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/i386/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/i386/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/i386/syntax.h create mode 100644 grub-core/lib/libgcrypt/mpi/i586/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/i586/README create mode 100644 grub-core/lib/libgcrypt/mpi/i586/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/i586/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/i586/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/i586/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/i586/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/i586/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/i586/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/i586/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/longlong.h create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mc68020/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mc68020/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mc68020/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mc68020/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mc68020/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/m68k/syntax.h create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/README create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpi-asm-defs.h create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/mips3/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-add.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-bit.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-cmp.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-div.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-gcd.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-inline.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-inline.h create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-internal.h create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-inv.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-mod.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-mpow.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-mul.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-pow.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpi-scan.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpicoder.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpih-div.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpih-mul.c create mode 100644 grub-core/lib/libgcrypt/mpi/mpiutil.c create mode 100644 grub-core/lib/libgcrypt/mpi/pa7100/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/pa7100/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/pa7100/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/pa7100/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/README create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/mmx/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/mmx/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/mmx/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/sse2/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/sse2/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/sse2/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/sse2/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/sse2/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/pentium4/sse2/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/power/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/power/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/power/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/power/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/power/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/power/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/power/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/power/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/power/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/mpih-sub1.S create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc32/syntax.h create mode 100644 grub-core/lib/libgcrypt/mpi/powerpc64/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32/mpih-add1.S create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32/mpih-lshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32/mpih-rshift.S create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32/udiv.S create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32v8/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32v8/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32v8/mpih-mul1.S create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32v8/mpih-mul2.S create mode 100644 grub-core/lib/libgcrypt/mpi/sparc32v8/mpih-mul3.S create mode 100644 grub-core/lib/libgcrypt/mpi/supersparc/Manifest create mode 100644 grub-core/lib/libgcrypt/mpi/supersparc/distfiles create mode 100644 grub-core/lib/libgcrypt/mpi/supersparc/udiv.S create mode 100644 grub-core/lib/libgcrypt/src/ChangeLog-2011 create mode 100644 grub-core/lib/libgcrypt/src/Makefile.am create mode 100644 grub-core/lib/libgcrypt/src/Manifest create mode 100644 grub-core/lib/libgcrypt/src/ath.c create mode 100644 grub-core/lib/libgcrypt/src/ath.h create mode 100644 grub-core/lib/libgcrypt/src/cipher-proto.h create mode 100644 grub-core/lib/libgcrypt/src/cipher.h create mode 100644 grub-core/lib/libgcrypt/src/dumpsexp.c create mode 100644 grub-core/lib/libgcrypt/src/fips.c create mode 100644 grub-core/lib/libgcrypt/src/g10lib.h create mode 100644 grub-core/lib/libgcrypt/src/gcrypt-module.h create mode 100644 grub-core/lib/libgcrypt/src/gcrypt.h.in create mode 100644 grub-core/lib/libgcrypt/src/gcryptrnd.c create mode 100644 grub-core/lib/libgcrypt/src/getrandom.c create mode 100644 grub-core/lib/libgcrypt/src/global.c create mode 100644 grub-core/lib/libgcrypt/src/hmac256.c create mode 100644 grub-core/lib/libgcrypt/src/hmac256.h create mode 100644 grub-core/lib/libgcrypt/src/hwfeatures.c create mode 100644 grub-core/lib/libgcrypt/src/libgcrypt-config.in create mode 100644 grub-core/lib/libgcrypt/src/libgcrypt.def create mode 100644 grub-core/lib/libgcrypt/src/libgcrypt.m4 create mode 100644 grub-core/lib/libgcrypt/src/libgcrypt.vers create mode 100644 grub-core/lib/libgcrypt/src/misc.c create mode 100644 grub-core/lib/libgcrypt/src/missing-string.c create mode 100644 grub-core/lib/libgcrypt/src/module.c create mode 100644 grub-core/lib/libgcrypt/src/mpi.h create mode 100644 grub-core/lib/libgcrypt/src/secmem.c create mode 100644 grub-core/lib/libgcrypt/src/secmem.h create mode 100644 grub-core/lib/libgcrypt/src/sexp.c create mode 100644 grub-core/lib/libgcrypt/src/stdmem.c create mode 100644 grub-core/lib/libgcrypt/src/stdmem.h create mode 100644 grub-core/lib/libgcrypt/src/types.h create mode 100644 grub-core/lib/libgcrypt/src/versioninfo.rc.in create mode 100644 grub-core/lib/libgcrypt/src/visibility.c create mode 100644 grub-core/lib/libgcrypt/src/visibility.h create mode 100644 grub-core/lib/libgcrypt_wrap/cipher_wrap.h create mode 100644 grub-core/lib/libgcrypt_wrap/mem.c create mode 100644 grub-core/lib/minilzo/lzoconf.h create mode 100644 grub-core/lib/minilzo/lzodefs.h create mode 100644 grub-core/lib/minilzo/minilzo.c create mode 100644 grub-core/lib/minilzo/minilzo.h create mode 100644 grub-core/lib/mips/arc/reboot.c create mode 100644 grub-core/lib/mips/loongson/reboot.c create mode 100644 grub-core/lib/mips/qemu_mips/reboot.c create mode 100644 grub-core/lib/mips/relocator.c create mode 100644 grub-core/lib/mips/relocator_asm.S create mode 100644 grub-core/lib/mips/setjmp.S create mode 100644 grub-core/lib/pbkdf2.c create mode 100644 grub-core/lib/posix_wrap/assert.h create mode 100644 grub-core/lib/posix_wrap/ctype.h create mode 100644 grub-core/lib/posix_wrap/errno.h create mode 100644 grub-core/lib/posix_wrap/inttypes.h create mode 100644 grub-core/lib/posix_wrap/langinfo.h create mode 100644 grub-core/lib/posix_wrap/limits.h create mode 100644 grub-core/lib/posix_wrap/localcharset.h create mode 100644 grub-core/lib/posix_wrap/locale.h create mode 100644 grub-core/lib/posix_wrap/stdint.h create mode 100644 grub-core/lib/posix_wrap/stdio.h create mode 100644 grub-core/lib/posix_wrap/stdlib.h create mode 100644 grub-core/lib/posix_wrap/string.h create mode 100644 grub-core/lib/posix_wrap/sys/types.h create mode 100644 grub-core/lib/posix_wrap/unistd.h create mode 100644 grub-core/lib/posix_wrap/wchar.h create mode 100644 grub-core/lib/posix_wrap/wctype.h create mode 100644 grub-core/lib/powerpc/relocator.c create mode 100644 grub-core/lib/powerpc/relocator_asm.S create mode 100644 grub-core/lib/powerpc/setjmp.S create mode 100644 grub-core/lib/priority_queue.c create mode 100644 grub-core/lib/progress.c create mode 100644 grub-core/lib/random.c create mode 100644 grub-core/lib/reed_solomon.c create mode 100644 grub-core/lib/relocator.c create mode 100644 grub-core/lib/setjmp.S create mode 100644 grub-core/lib/sparc64/setjmp.S create mode 100644 grub-core/lib/syslinux_parse.c create mode 100644 grub-core/lib/uboot/datetime.c create mode 100644 grub-core/lib/uboot/halt.c create mode 100644 grub-core/lib/uboot/reboot.c create mode 100644 grub-core/lib/x86_64/efi/relocator.c create mode 100644 grub-core/lib/x86_64/relocator_asm.S create mode 100644 grub-core/lib/x86_64/setjmp.S create mode 100644 grub-core/lib/x86_64/xen/relocator.S create mode 100644 grub-core/lib/xen/datetime.c create mode 100644 grub-core/lib/xen/halt.c create mode 100644 grub-core/lib/xen/reboot.c create mode 100644 grub-core/lib/xen/relocator.c create mode 100644 grub-core/lib/xzembed/xz.h create mode 100644 grub-core/lib/xzembed/xz_config.h create mode 100644 grub-core/lib/xzembed/xz_dec_bcj.c create mode 100644 grub-core/lib/xzembed/xz_dec_lzma2.c create mode 100644 grub-core/lib/xzembed/xz_dec_stream.c create mode 100644 grub-core/lib/xzembed/xz_lzma2.h create mode 100644 grub-core/lib/xzembed/xz_private.h create mode 100644 grub-core/lib/xzembed/xz_stream.h create mode 100644 grub-core/loader/aout.c create mode 100644 grub-core/loader/arm/linux.c create mode 100644 grub-core/loader/arm64/fdt.c create mode 100644 grub-core/loader/arm64/linux.c create mode 100644 grub-core/loader/arm64/xen_boot.c create mode 100644 grub-core/loader/efi/appleloader.c create mode 100644 grub-core/loader/efi/chainloader.c create mode 100644 grub-core/loader/i386/bsd.c create mode 100644 grub-core/loader/i386/bsd32.c create mode 100644 grub-core/loader/i386/bsd64.c create mode 100644 grub-core/loader/i386/bsdXX.c create mode 100644 grub-core/loader/i386/bsd_pagetable.c create mode 100644 grub-core/loader/i386/coreboot/chainloader.c create mode 100644 grub-core/loader/i386/linux.c create mode 100644 grub-core/loader/i386/multiboot_mbi.c create mode 100644 grub-core/loader/i386/pc/chainloader.c create mode 100644 grub-core/loader/i386/pc/freedos.c create mode 100644 grub-core/loader/i386/pc/linux.c create mode 100644 grub-core/loader/i386/pc/ntldr.c create mode 100644 grub-core/loader/i386/pc/plan9.c create mode 100644 grub-core/loader/i386/pc/pxechainloader.c create mode 100644 grub-core/loader/i386/pc/truecrypt.c create mode 100644 grub-core/loader/i386/xen.c create mode 100644 grub-core/loader/i386/xen_file.c create mode 100644 grub-core/loader/i386/xen_file32.c create mode 100644 grub-core/loader/i386/xen_file64.c create mode 100644 grub-core/loader/i386/xen_fileXX.c create mode 100644 grub-core/loader/i386/xnu.c create mode 100644 grub-core/loader/ia64/efi/linux.c create mode 100644 grub-core/loader/linux.c create mode 100644 grub-core/loader/lzss.c create mode 100644 grub-core/loader/macho.c create mode 100644 grub-core/loader/macho32.c create mode 100644 grub-core/loader/macho64.c create mode 100644 grub-core/loader/machoXX.c create mode 100644 grub-core/loader/mips/linux.c create mode 100644 grub-core/loader/multiboot.c create mode 100644 grub-core/loader/multiboot_elfxx.c create mode 100644 grub-core/loader/multiboot_mbi2.c create mode 100644 grub-core/loader/powerpc/ieee1275/linux.c create mode 100644 grub-core/loader/sparc64/ieee1275/linux.c create mode 100644 grub-core/loader/xnu.c create mode 100644 grub-core/loader/xnu_resume.c create mode 100644 grub-core/mmap/efi/mmap.c create mode 100644 grub-core/mmap/i386/mmap.c create mode 100644 grub-core/mmap/i386/pc/mmap.c create mode 100644 grub-core/mmap/i386/pc/mmap_helper.S create mode 100644 grub-core/mmap/i386/uppermem.c create mode 100644 grub-core/mmap/mips/uppermem.c create mode 100644 grub-core/mmap/mmap.c create mode 100644 grub-core/modinfo.sh.in create mode 100644 grub-core/net/arp.c create mode 100644 grub-core/net/bootp.c create mode 100644 grub-core/net/dns.c create mode 100644 grub-core/net/drivers/efi/efinet.c create mode 100644 grub-core/net/drivers/emu/emunet.c create mode 100644 grub-core/net/drivers/i386/pc/pxe.c create mode 100644 grub-core/net/drivers/ieee1275/ofnet.c create mode 100644 grub-core/net/drivers/uboot/ubootnet.c create mode 100644 grub-core/net/ethernet.c create mode 100644 grub-core/net/http.c create mode 100644 grub-core/net/icmp.c create mode 100644 grub-core/net/icmp6.c create mode 100644 grub-core/net/ip.c create mode 100644 grub-core/net/net.c create mode 100644 grub-core/net/netbuff.c create mode 100644 grub-core/net/tcp.c create mode 100644 grub-core/net/tftp.c create mode 100644 grub-core/net/udp.c create mode 100644 grub-core/normal/auth.c create mode 100644 grub-core/normal/autofs.c create mode 100644 grub-core/normal/charset.c create mode 100644 grub-core/normal/cmdline.c create mode 100644 grub-core/normal/color.c create mode 100644 grub-core/normal/completion.c create mode 100644 grub-core/normal/context.c create mode 100644 grub-core/normal/crypto.c create mode 100644 grub-core/normal/datetime.c create mode 100644 grub-core/normal/dyncmd.c create mode 100644 grub-core/normal/main.c create mode 100644 grub-core/normal/menu.c create mode 100644 grub-core/normal/menu_entry.c create mode 100644 grub-core/normal/menu_text.c create mode 100644 grub-core/normal/misc.c create mode 100644 grub-core/normal/term.c create mode 100644 grub-core/osdep/apple/getroot.c create mode 100644 grub-core/osdep/apple/hostdisk.c create mode 100644 grub-core/osdep/aros/config.c create mode 100644 grub-core/osdep/aros/getroot.c create mode 100644 grub-core/osdep/aros/hostdisk.c create mode 100644 grub-core/osdep/aros/relpath.c create mode 100644 grub-core/osdep/basic/compress.c create mode 100644 grub-core/osdep/basic/emunet.c create mode 100644 grub-core/osdep/basic/getroot.c create mode 100644 grub-core/osdep/basic/hostdisk.c create mode 100644 grub-core/osdep/basic/init.c create mode 100644 grub-core/osdep/basic/no_platform.c create mode 100644 grub-core/osdep/basic/ofpath.c create mode 100644 grub-core/osdep/basic/platform.c create mode 100644 grub-core/osdep/basic/random.c create mode 100644 grub-core/osdep/blocklist.c create mode 100644 grub-core/osdep/bsd/getroot.c create mode 100644 grub-core/osdep/bsd/hostdisk.c create mode 100644 grub-core/osdep/compress.c create mode 100644 grub-core/osdep/config.c create mode 100644 grub-core/osdep/cputime.c create mode 100644 grub-core/osdep/devmapper/getroot.c create mode 100644 grub-core/osdep/devmapper/hostdisk.c create mode 100644 grub-core/osdep/dl.c create mode 100644 grub-core/osdep/emuconsole.c create mode 100644 grub-core/osdep/emunet.c create mode 100644 grub-core/osdep/exec.c create mode 100644 grub-core/osdep/freebsd/getroot.c create mode 100644 grub-core/osdep/freebsd/hostdisk.c create mode 100644 grub-core/osdep/generic/blocklist.c create mode 100644 grub-core/osdep/getroot.c create mode 100644 grub-core/osdep/haiku/getroot.c create mode 100644 grub-core/osdep/haiku/hostdisk.c create mode 100644 grub-core/osdep/hostdisk.c create mode 100644 grub-core/osdep/hurd/getroot.c create mode 100644 grub-core/osdep/hurd/hostdisk.c create mode 100644 grub-core/osdep/init.c create mode 100644 grub-core/osdep/linux/blocklist.c create mode 100644 grub-core/osdep/linux/emunet.c create mode 100644 grub-core/osdep/linux/getroot.c create mode 100644 grub-core/osdep/linux/hostdisk.c create mode 100644 grub-core/osdep/linux/ofpath.c create mode 100644 grub-core/osdep/linux/platform.c create mode 100644 grub-core/osdep/ofpath.c create mode 100644 grub-core/osdep/password.c create mode 100644 grub-core/osdep/platform.c create mode 100644 grub-core/osdep/platform_unix.c create mode 100644 grub-core/osdep/random.c create mode 100644 grub-core/osdep/relpath.c create mode 100644 grub-core/osdep/sleep.c create mode 100644 grub-core/osdep/sun/getroot.c create mode 100644 grub-core/osdep/sun/hostdisk.c create mode 100644 grub-core/osdep/unix/compress.c create mode 100644 grub-core/osdep/unix/config.c create mode 100644 grub-core/osdep/unix/cputime.c create mode 100644 grub-core/osdep/unix/dl.c create mode 100644 grub-core/osdep/unix/emuconsole.c create mode 100644 grub-core/osdep/unix/exec.c create mode 100644 grub-core/osdep/unix/getroot.c create mode 100644 grub-core/osdep/unix/hostdisk.c create mode 100644 grub-core/osdep/unix/password.c create mode 100644 grub-core/osdep/unix/platform.c create mode 100644 grub-core/osdep/unix/random.c create mode 100644 grub-core/osdep/unix/relpath.c create mode 100644 grub-core/osdep/unix/sleep.c create mode 100644 grub-core/osdep/windows/blocklist.c create mode 100644 grub-core/osdep/windows/config.c create mode 100644 grub-core/osdep/windows/cputime.c create mode 100644 grub-core/osdep/windows/dl.c create mode 100644 grub-core/osdep/windows/emuconsole.c create mode 100644 grub-core/osdep/windows/getroot.c create mode 100644 grub-core/osdep/windows/hostdisk.c create mode 100644 grub-core/osdep/windows/init.c create mode 100644 grub-core/osdep/windows/password.c create mode 100644 grub-core/osdep/windows/platform.c create mode 100644 grub-core/osdep/windows/random.c create mode 100644 grub-core/osdep/windows/relpath.c create mode 100644 grub-core/osdep/windows/sleep.c create mode 100644 grub-core/partmap/acorn.c create mode 100644 grub-core/partmap/amiga.c create mode 100644 grub-core/partmap/apple.c create mode 100644 grub-core/partmap/bsdlabel.c create mode 100644 grub-core/partmap/dfly.c create mode 100644 grub-core/partmap/dvh.c create mode 100644 grub-core/partmap/gpt.c create mode 100644 grub-core/partmap/msdos.c create mode 100644 grub-core/partmap/plan.c create mode 100644 grub-core/partmap/sun.c create mode 100644 grub-core/partmap/sunpc.c create mode 100644 grub-core/parttool/msdospart.c create mode 100644 grub-core/script/argv.c create mode 100644 grub-core/script/execute.c create mode 100644 grub-core/script/function.c create mode 100644 grub-core/script/lexer.c create mode 100644 grub-core/script/main.c create mode 100644 grub-core/script/parser.y create mode 100644 grub-core/script/script.c create mode 100644 grub-core/script/yylex.l create mode 100644 grub-core/term/arc/console.c create mode 100644 grub-core/term/arc/serial.c create mode 100644 grub-core/term/at_keyboard.c create mode 100644 grub-core/term/efi/console.c create mode 100644 grub-core/term/efi/serial.c create mode 100644 grub-core/term/gfxterm.c create mode 100644 grub-core/term/gfxterm_background.c create mode 100644 grub-core/term/i386/coreboot/cbmemc.c create mode 100644 grub-core/term/i386/pc/console.c create mode 100644 grub-core/term/i386/pc/mda_text.c create mode 100644 grub-core/term/i386/pc/vga_text.c create mode 100644 grub-core/term/ieee1275/console.c create mode 100644 grub-core/term/ieee1275/escc.c create mode 100644 grub-core/term/ieee1275/serial.c create mode 100644 grub-core/term/morse.c create mode 100644 grub-core/term/ns8250.c create mode 100644 grub-core/term/serial.c create mode 100644 grub-core/term/spkmodem.c create mode 100644 grub-core/term/terminfo.c create mode 100644 grub-core/term/tparm.c create mode 100644 grub-core/term/uboot/console.c create mode 100644 grub-core/term/usb_keyboard.c create mode 100644 grub-core/term/xen/console.c create mode 100644 grub-core/tests/boot/kbsd.init-i386.S create mode 100644 grub-core/tests/boot/kbsd.init-x86_64.S create mode 100644 grub-core/tests/boot/kbsd.spec.txt create mode 100644 grub-core/tests/boot/kernel-8086.S create mode 100644 grub-core/tests/boot/kernel-i386.S create mode 100644 grub-core/tests/boot/kfreebsd-aout.cfg create mode 100644 grub-core/tests/boot/kfreebsd.cfg create mode 100644 grub-core/tests/boot/kfreebsd.init-i386.S create mode 100644 grub-core/tests/boot/kfreebsd.init-x86_64.S create mode 100644 grub-core/tests/boot/knetbsd.cfg create mode 100644 grub-core/tests/boot/kopenbsd.cfg create mode 100644 grub-core/tests/boot/kopenbsdlabel.txt create mode 100644 grub-core/tests/boot/linux-ppc.cfg create mode 100644 grub-core/tests/boot/linux.cfg create mode 100644 grub-core/tests/boot/linux.init-i386.S create mode 100644 grub-core/tests/boot/linux.init-mips.S create mode 100644 grub-core/tests/boot/linux.init-ppc.S create mode 100644 grub-core/tests/boot/linux.init-x86_64.S create mode 100644 grub-core/tests/boot/linux16.cfg create mode 100644 grub-core/tests/boot/multiboot.cfg create mode 100644 grub-core/tests/boot/multiboot2.cfg create mode 100644 grub-core/tests/boot/ntldr.cfg create mode 100644 grub-core/tests/boot/pc-chainloader.cfg create mode 100644 grub-core/tests/boot/qemu-shutdown-x86.S create mode 100644 grub-core/tests/bswap_test.c create mode 100644 grub-core/tests/checksums.h create mode 100644 grub-core/tests/cmdline_cat_test.c create mode 100644 grub-core/tests/cmp_test.c create mode 100644 grub-core/tests/ctz_test.c create mode 100644 grub-core/tests/div_test.c create mode 100644 grub-core/tests/example_functional_test.c create mode 100644 grub-core/tests/fake_input.c create mode 100644 grub-core/tests/gfxterm_menu.c create mode 100644 grub-core/tests/legacy_password_test.c create mode 100644 grub-core/tests/lib/functional_test.c create mode 100644 grub-core/tests/lib/test.c create mode 100644 grub-core/tests/mul_test.c create mode 100644 grub-core/tests/pbkdf2_test.c create mode 100644 grub-core/tests/setjmp_test.c create mode 100644 grub-core/tests/shift_test.c create mode 100644 grub-core/tests/signature_test.c create mode 100644 grub-core/tests/signatures.h create mode 100644 grub-core/tests/sleep_test.c create mode 100644 grub-core/tests/test_blockarg.c create mode 100644 grub-core/tests/video_checksum.c create mode 100644 grub-core/tests/videotest_checksum.c create mode 100644 grub-core/tests/xnu_uuid_test.c create mode 100644 grub-core/unidata.c create mode 100644 grub-core/video/bitmap.c create mode 100644 grub-core/video/bitmap_scale.c create mode 100644 grub-core/video/bochs.c create mode 100644 grub-core/video/capture.c create mode 100644 grub-core/video/cirrus.c create mode 100644 grub-core/video/colors.c create mode 100644 grub-core/video/efi_gop.c create mode 100644 grub-core/video/efi_uga.c create mode 100644 grub-core/video/emu/sdl.c create mode 100644 grub-core/video/fb/fbblit.c create mode 100644 grub-core/video/fb/fbfill.c create mode 100644 grub-core/video/fb/fbutil.c create mode 100644 grub-core/video/fb/video_fb.c create mode 100644 grub-core/video/i386/coreboot/cbfb.c create mode 100644 grub-core/video/i386/pc/vbe.c create mode 100644 grub-core/video/i386/pc/vga.c create mode 100644 grub-core/video/ieee1275.c create mode 100644 grub-core/video/radeon_fuloong2e.c create mode 100644 grub-core/video/radeon_yeeloong3a.c create mode 100644 grub-core/video/readers/jpeg.c create mode 100644 grub-core/video/readers/png.c create mode 100644 grub-core/video/readers/tga.c create mode 100644 grub-core/video/sis315_init.c create mode 100644 grub-core/video/sis315pro.c create mode 100644 grub-core/video/sm712.c create mode 100644 grub-core/video/sm712_init.c create mode 100644 grub-core/video/video.c create mode 100644 include/grub/acorn_filecore.h create mode 100644 include/grub/acpi.h create mode 100644 include/grub/aout.h create mode 100644 include/grub/arc/arc.h create mode 100644 include/grub/arc/console.h create mode 100644 include/grub/archelp.h create mode 100644 include/grub/arm/efi/loader.h create mode 100644 include/grub/arm/efi/memory.h create mode 100644 include/grub/arm/linux.h create mode 100644 include/grub/arm/reloc.h create mode 100644 include/grub/arm/setjmp.h create mode 100644 include/grub/arm/system.h create mode 100644 include/grub/arm/time.h create mode 100644 include/grub/arm/types.h create mode 100644 include/grub/arm/uboot/kernel.h create mode 100644 include/grub/arm64/efi/memory.h create mode 100644 include/grub/arm64/fdtload.h create mode 100644 include/grub/arm64/linux.h create mode 100644 include/grub/arm64/reloc.h create mode 100644 include/grub/arm64/setjmp.h create mode 100644 include/grub/arm64/time.h create mode 100644 include/grub/arm64/types.h create mode 100644 include/grub/at_keyboard.h create mode 100644 include/grub/ata.h create mode 100644 include/grub/auth.h create mode 100644 include/grub/autoefi.h create mode 100644 include/grub/backtrace.h create mode 100644 include/grub/bitmap.h create mode 100644 include/grub/bitmap_scale.h create mode 100644 include/grub/boottime.h create mode 100644 include/grub/bsdlabel.h create mode 100644 include/grub/btrfs.h create mode 100644 include/grub/bufio.h create mode 100644 include/grub/cache.h create mode 100644 include/grub/cbfs_core.h create mode 100644 include/grub/charset.h create mode 100644 include/grub/cmos.h create mode 100644 include/grub/color.h create mode 100644 include/grub/command.h create mode 100644 include/grub/compiler-rt-emu.h create mode 100644 include/grub/compiler-rt.h create mode 100644 include/grub/compiler.h create mode 100644 include/grub/crypto.h create mode 100644 include/grub/cryptodisk.h create mode 100644 include/grub/cs5536.h create mode 100644 include/grub/datetime.h create mode 100644 include/grub/decompressor.h create mode 100644 include/grub/deflate.h create mode 100644 include/grub/device.h create mode 100644 include/grub/disk.h create mode 100644 include/grub/diskfilter.h create mode 100644 include/grub/dl.h create mode 100644 include/grub/efi/api.h create mode 100644 include/grub/efi/console.h create mode 100644 include/grub/efi/console_control.h create mode 100644 include/grub/efi/disk.h create mode 100644 include/grub/efi/edid.h create mode 100644 include/grub/efi/efi.h create mode 100644 include/grub/efi/graphics_output.h create mode 100644 include/grub/efi/memory.h create mode 100644 include/grub/efi/pci.h create mode 100644 include/grub/efi/pe32.h create mode 100644 include/grub/efi/uga_draw.h create mode 100644 include/grub/efiemu/efiemu.h create mode 100644 include/grub/efiemu/runtime.h create mode 100644 include/grub/elf.h create mode 100644 include/grub/elfload.h create mode 100644 include/grub/emu/config.h create mode 100644 include/grub/emu/console.h create mode 100644 include/grub/emu/exec.h create mode 100644 include/grub/emu/getroot.h create mode 100644 include/grub/emu/hostdisk.h create mode 100644 include/grub/emu/hostfile.h create mode 100644 include/grub/emu/misc.h create mode 100644 include/grub/emu/net.h create mode 100644 include/grub/env.h create mode 100644 include/grub/env_private.h create mode 100644 include/grub/err.h create mode 100644 include/grub/exfat.h create mode 100644 include/grub/extcmd.h create mode 100644 include/grub/fat.h create mode 100644 include/grub/fbblit.h create mode 100644 include/grub/fbfill.h create mode 100644 include/grub/fbutil.h create mode 100644 include/grub/fdt.h create mode 100644 include/grub/file.h create mode 100644 include/grub/fileid.h create mode 100644 include/grub/font.h create mode 100644 include/grub/fontformat.h create mode 100644 include/grub/fs.h create mode 100644 include/grub/fshelp.h create mode 100644 include/grub/gcry/types.h create mode 100644 include/grub/gcrypt/g10lib.h create mode 100644 include/grub/gcrypt/gcrypt.h create mode 100644 include/grub/gcrypt/gpg-error.h create mode 100644 include/grub/gdb.h create mode 100644 include/grub/gfxmenu_model.h create mode 100644 include/grub/gfxmenu_view.h create mode 100644 include/grub/gfxterm.h create mode 100644 include/grub/gfxwidgets.h create mode 100644 include/grub/gpt_partition.h create mode 100644 include/grub/gui.h create mode 100644 include/grub/gui_string_util.h create mode 100644 include/grub/hfs.h create mode 100644 include/grub/hfsplus.h create mode 100644 include/grub/i18n.h create mode 100644 include/grub/i386/at_keyboard.h create mode 100644 include/grub/i386/bsd.h create mode 100644 include/grub/i386/cmos.h create mode 100644 include/grub/i386/coreboot/boot.h create mode 100644 include/grub/i386/coreboot/console.h create mode 100644 include/grub/i386/coreboot/lbio.h create mode 100644 include/grub/i386/coreboot/memory.h create mode 100644 include/grub/i386/coreboot/serial.h create mode 100644 include/grub/i386/coreboot/time.h create mode 100644 include/grub/i386/cpuid.h create mode 100644 include/grub/i386/efi/memory.h create mode 100644 include/grub/i386/efi/serial.h create mode 100644 include/grub/i386/efiemu.h create mode 100644 include/grub/i386/floppy.h create mode 100644 include/grub/i386/freebsd_linker.h create mode 100644 include/grub/i386/freebsd_reboot.h create mode 100644 include/grub/i386/gdb.h create mode 100644 include/grub/i386/ieee1275/ieee1275.h create mode 100644 include/grub/i386/ieee1275/memory.h create mode 100644 include/grub/i386/ieee1275/serial.h create mode 100644 include/grub/i386/io.h create mode 100644 include/grub/i386/linux.h create mode 100644 include/grub/i386/macho.h create mode 100644 include/grub/i386/memory.h create mode 100644 include/grub/i386/memory_raw.h create mode 100644 include/grub/i386/multiboot.h create mode 100644 include/grub/i386/multiboot/boot.h create mode 100644 include/grub/i386/multiboot/console.h create mode 100644 include/grub/i386/multiboot/kernel.h create mode 100644 include/grub/i386/multiboot/memory.h create mode 100644 include/grub/i386/multiboot/serial.h create mode 100644 include/grub/i386/multiboot/time.h create mode 100644 include/grub/i386/netbsd_bootinfo.h create mode 100644 include/grub/i386/netbsd_reboot.h create mode 100644 include/grub/i386/openbsd_bootarg.h create mode 100644 include/grub/i386/openbsd_reboot.h create mode 100644 include/grub/i386/pc/apm.h create mode 100644 include/grub/i386/pc/biosdisk.h create mode 100644 include/grub/i386/pc/biosnum.h create mode 100644 include/grub/i386/pc/boot.h create mode 100644 include/grub/i386/pc/chainloader.h create mode 100644 include/grub/i386/pc/console.h create mode 100644 include/grub/i386/pc/int.h create mode 100644 include/grub/i386/pc/kernel.h create mode 100644 include/grub/i386/pc/memory.h create mode 100644 include/grub/i386/pc/pxe.h create mode 100644 include/grub/i386/pc/time.h create mode 100644 include/grub/i386/pc/vbe.h create mode 100644 include/grub/i386/pc/vesa_modes_table.h create mode 100644 include/grub/i386/pci.h create mode 100644 include/grub/i386/pit.h create mode 100644 include/grub/i386/pmtimer.h create mode 100644 include/grub/i386/qemu/boot.h create mode 100644 include/grub/i386/qemu/console.h create mode 100644 include/grub/i386/qemu/kernel.h create mode 100644 include/grub/i386/qemu/memory.h create mode 100644 include/grub/i386/qemu/serial.h create mode 100644 include/grub/i386/qemu/time.h create mode 100644 include/grub/i386/reboot.h create mode 100644 include/grub/i386/relocator.h create mode 100644 include/grub/i386/relocator_private.h create mode 100644 include/grub/i386/setjmp.h create mode 100644 include/grub/i386/time.h create mode 100644 include/grub/i386/tsc.h create mode 100644 include/grub/i386/types.h create mode 100644 include/grub/i386/xen/hypercall.h create mode 100644 include/grub/i386/xen/memory.h create mode 100644 include/grub/i386/xnu.h create mode 100644 include/grub/ia64/efi/memory.h create mode 100644 include/grub/ia64/efi/time.h create mode 100644 include/grub/ia64/kernel.h create mode 100644 include/grub/ia64/reloc.h create mode 100644 include/grub/ia64/setjmp.h create mode 100644 include/grub/ia64/time.h create mode 100644 include/grub/ia64/types.h create mode 100644 include/grub/icon_manager.h create mode 100644 include/grub/ieee1275/console.h create mode 100644 include/grub/ieee1275/ieee1275.h create mode 100644 include/grub/ieee1275/ofdisk.h create mode 100644 include/grub/kernel.h create mode 100644 include/grub/keyboard_layouts.h create mode 100644 include/grub/legacy_parse.h create mode 100644 include/grub/lib/LzFind.h create mode 100644 include/grub/lib/LzHash.h create mode 100644 include/grub/lib/LzmaDec.h create mode 100644 include/grub/lib/LzmaEnc.h create mode 100644 include/grub/lib/LzmaTypes.h create mode 100644 include/grub/lib/arg.h create mode 100644 include/grub/lib/cmdline.h create mode 100644 include/grub/lib/crc.h create mode 100644 include/grub/lib/envblk.h create mode 100644 include/grub/lib/hexdump.h create mode 100644 include/grub/libpciaccess.h create mode 100644 include/grub/linux.h create mode 100644 include/grub/list.h create mode 100644 include/grub/loader.h create mode 100644 include/grub/lvm.h create mode 100644 include/grub/macho.h create mode 100644 include/grub/machoload.h create mode 100644 include/grub/memory.h create mode 100644 include/grub/menu.h create mode 100644 include/grub/menu_viewer.h create mode 100644 include/grub/mips/arc/kernel.h create mode 100644 include/grub/mips/arc/memory.h create mode 100644 include/grub/mips/arc/time.h create mode 100644 include/grub/mips/asm.h create mode 100644 include/grub/mips/at_keyboard.h create mode 100644 include/grub/mips/cmos.h create mode 100644 include/grub/mips/io.h create mode 100644 include/grub/mips/kernel.h create mode 100644 include/grub/mips/loongson.h create mode 100644 include/grub/mips/loongson/at_keyboard.h create mode 100644 include/grub/mips/loongson/cmos.h create mode 100644 include/grub/mips/loongson/ec.h create mode 100644 include/grub/mips/loongson/kernel.h create mode 100644 include/grub/mips/loongson/memory.h create mode 100644 include/grub/mips/loongson/pci.h create mode 100644 include/grub/mips/loongson/serial.h create mode 100644 include/grub/mips/loongson/time.h create mode 100644 include/grub/mips/memory.h create mode 100644 include/grub/mips/mips.h create mode 100644 include/grub/mips/multiboot.h create mode 100644 include/grub/mips/pci.h create mode 100644 include/grub/mips/qemu_mips/at_keyboard.h create mode 100644 include/grub/mips/qemu_mips/cmos.h create mode 100644 include/grub/mips/qemu_mips/console.h create mode 100644 include/grub/mips/qemu_mips/kernel.h create mode 100644 include/grub/mips/qemu_mips/loader.h create mode 100644 include/grub/mips/qemu_mips/memory.h create mode 100644 include/grub/mips/qemu_mips/serial.h create mode 100644 include/grub/mips/qemu_mips/time.h create mode 100644 include/grub/mips/relocator.h create mode 100644 include/grub/mips/setjmp.h create mode 100644 include/grub/mips/time.h create mode 100644 include/grub/mips/types.h create mode 100644 include/grub/misc.h create mode 100644 include/grub/mm.h create mode 100644 include/grub/mm_private.h create mode 100644 include/grub/module_verifier.h create mode 100644 include/grub/msdos_partition.h create mode 100644 include/grub/multiboot.h create mode 100644 include/grub/multiboot_loader.h create mode 100644 include/grub/net.h create mode 100644 include/grub/net/arp.h create mode 100644 include/grub/net/ethernet.h create mode 100644 include/grub/net/ip.h create mode 100644 include/grub/net/netbuff.h create mode 100644 include/grub/net/tcp.h create mode 100644 include/grub/net/udp.h create mode 100644 include/grub/normal.h create mode 100644 include/grub/ns8250.h create mode 100644 include/grub/ntfs.h create mode 100644 include/grub/offsets.h create mode 100644 include/grub/osdep/hostfile.h create mode 100644 include/grub/osdep/hostfile_aros.h create mode 100644 include/grub/osdep/hostfile_unix.h create mode 100644 include/grub/osdep/hostfile_windows.h create mode 100644 include/grub/parser.h create mode 100644 include/grub/partition.h create mode 100644 include/grub/parttool.h create mode 100644 include/grub/pci.h create mode 100644 include/grub/pciutils.h create mode 100644 include/grub/powerpc/ieee1275/ieee1275.h create mode 100644 include/grub/powerpc/kernel.h create mode 100644 include/grub/powerpc/memory.h create mode 100644 include/grub/powerpc/relocator.h create mode 100644 include/grub/powerpc/setjmp.h create mode 100644 include/grub/powerpc/time.h create mode 100644 include/grub/powerpc/types.h create mode 100644 include/grub/priority_queue.h create mode 100644 include/grub/procfs.h create mode 100644 include/grub/pubkey.h create mode 100644 include/grub/random.h create mode 100644 include/grub/reader.h create mode 100644 include/grub/reed_solomon.h create mode 100644 include/grub/relocator.h create mode 100644 include/grub/relocator_private.h create mode 100644 include/grub/script_sh.h create mode 100644 include/grub/scsi.h create mode 100644 include/grub/scsicmd.h create mode 100644 include/grub/sdl.h create mode 100644 include/grub/search.h create mode 100644 include/grub/serial.h create mode 100644 include/grub/setjmp.h create mode 100644 include/grub/smbus.h create mode 100644 include/grub/sparc64/ieee1275/boot.h create mode 100644 include/grub/sparc64/ieee1275/ieee1275.h create mode 100644 include/grub/sparc64/ieee1275/kernel.h create mode 100644 include/grub/sparc64/setjmp.h create mode 100644 include/grub/sparc64/time.h create mode 100644 include/grub/sparc64/types.h create mode 100644 include/grub/speaker.h create mode 100644 include/grub/symbol.h create mode 100644 include/grub/syslinux_parse.h create mode 100644 include/grub/term.h create mode 100644 include/grub/terminfo.h create mode 100644 include/grub/test.h create mode 100644 include/grub/time.h create mode 100644 include/grub/tparm.h create mode 100644 include/grub/trig.h create mode 100644 include/grub/types.h create mode 100644 include/grub/uboot/api_public.h create mode 100644 include/grub/uboot/console.h create mode 100644 include/grub/uboot/disk.h create mode 100644 include/grub/uboot/image.h create mode 100644 include/grub/uboot/uboot.h create mode 100644 include/grub/udf.h create mode 100644 include/grub/unicode.h create mode 100644 include/grub/usb.h create mode 100644 include/grub/usbdesc.h create mode 100644 include/grub/usbserial.h create mode 100644 include/grub/usbtrans.h create mode 100644 include/grub/util/install.h create mode 100644 include/grub/util/libnvpair.h create mode 100644 include/grub/util/libzfs.h create mode 100644 include/grub/util/misc.h create mode 100644 include/grub/util/mkimage.h create mode 100644 include/grub/util/ofpath.h create mode 100644 include/grub/util/resolve.h create mode 100644 include/grub/util/windows.h create mode 100644 include/grub/vga.h create mode 100644 include/grub/vgaregs.h create mode 100644 include/grub/video.h create mode 100644 include/grub/video_fb.h create mode 100644 include/grub/x86_64/at_keyboard.h create mode 100644 include/grub/x86_64/efi/boot.h create mode 100644 include/grub/x86_64/efi/loader.h create mode 100644 include/grub/x86_64/efi/memory.h create mode 100644 include/grub/x86_64/efi/serial.h create mode 100644 include/grub/x86_64/io.h create mode 100644 include/grub/x86_64/linux.h create mode 100644 include/grub/x86_64/macho.h create mode 100644 include/grub/x86_64/memory.h create mode 100644 include/grub/x86_64/multiboot.h create mode 100644 include/grub/x86_64/pci.h create mode 100644 include/grub/x86_64/relocator.h create mode 100644 include/grub/x86_64/setjmp.h create mode 100644 include/grub/x86_64/time.h create mode 100644 include/grub/x86_64/types.h create mode 100644 include/grub/x86_64/xen/hypercall.h create mode 100644 include/grub/x86_64/xnu.h create mode 100644 include/grub/xen.h create mode 100644 include/grub/xen/relocator.h create mode 100644 include/grub/xen_file.h create mode 100644 include/grub/xnu.h create mode 100644 include/grub/zfs/dmu.h create mode 100644 include/grub/zfs/dmu_objset.h create mode 100644 include/grub/zfs/dnode.h create mode 100644 include/grub/zfs/dsl_dataset.h create mode 100644 include/grub/zfs/dsl_dir.h create mode 100644 include/grub/zfs/sa_impl.h create mode 100644 include/grub/zfs/spa.h create mode 100644 include/grub/zfs/uberblock_impl.h create mode 100644 include/grub/zfs/vdev_impl.h create mode 100644 include/grub/zfs/zap_impl.h create mode 100644 include/grub/zfs/zap_leaf.h create mode 100644 include/grub/zfs/zfs.h create mode 100644 include/grub/zfs/zfs_acl.h create mode 100644 include/grub/zfs/zfs_znode.h create mode 100644 include/grub/zfs/zil.h create mode 100644 include/grub/zfs/zio.h create mode 100644 include/grub/zfs/zio_checksum.h create mode 100644 include/multiboot.h create mode 100644 include/multiboot2.h create mode 100644 include/xen/arch-x86/xen-x86_32.h create mode 100644 include/xen/arch-x86/xen-x86_64.h create mode 100644 include/xen/arch-x86/xen.h create mode 100644 include/xen/elfnote.h create mode 100644 include/xen/event_channel.h create mode 100644 include/xen/grant_table.h create mode 100644 include/xen/io/blkif.h create mode 100644 include/xen/io/console.h create mode 100644 include/xen/io/protocols.h create mode 100644 include/xen/io/ring.h create mode 100644 include/xen/io/xenbus.h create mode 100644 include/xen/io/xs_wire.h create mode 100644 include/xen/sched.h create mode 100644 include/xen/xen-compat.h create mode 100644 include/xen/xen.h create mode 100755 linguas.sh create mode 100644 m4/00gnulib.m4 create mode 100644 m4/alloca.m4 create mode 100644 m4/argp.m4 create mode 100644 m4/btowc.m4 create mode 100644 m4/codeset.m4 create mode 100644 m4/configmake.m4 create mode 100644 m4/dirname.m4 create mode 100644 m4/double-slash-root.m4 create mode 100644 m4/eealloc.m4 create mode 100644 m4/errno_h.m4 create mode 100644 m4/error.m4 create mode 100644 m4/exponentd.m4 create mode 100644 m4/extensions.m4 create mode 100644 m4/extern-inline.m4 create mode 100644 m4/fcntl-o.m4 create mode 100644 m4/float_h.m4 create mode 100644 m4/fnmatch.m4 create mode 100644 m4/getdelim.m4 create mode 100644 m4/getline.m4 create mode 100644 m4/getopt.m4 create mode 100644 m4/gettext.m4 create mode 100644 m4/glibc2.m4 create mode 100644 m4/glibc21.m4 create mode 100644 m4/gnulib-cache.m4 create mode 100644 m4/gnulib-common.m4 create mode 100644 m4/gnulib-comp.m4 create mode 100644 m4/gnulib-tool.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/include_next.m4 create mode 100644 m4/intdiv0.m4 create mode 100644 m4/intl.m4 create mode 100644 m4/intldir.m4 create mode 100644 m4/intlmacosx.m4 create mode 100644 m4/intmax.m4 create mode 100644 m4/intmax_t.m4 create mode 100644 m4/inttypes-pri.m4 create mode 100644 m4/inttypes_h.m4 create mode 100644 m4/langinfo_h.m4 create mode 100644 m4/lcmessage.m4 create mode 100644 m4/lib-ld.m4 create mode 100644 m4/lib-link.m4 create mode 100644 m4/lib-prefix.m4 create mode 100644 m4/libunistring-base.m4 create mode 100644 m4/localcharset.m4 create mode 100644 m4/locale-fr.m4 create mode 100644 m4/locale-ja.m4 create mode 100644 m4/locale-zh.m4 create mode 100644 m4/locale_h.m4 create mode 100644 m4/localeconv.m4 create mode 100644 m4/lock.m4 create mode 100644 m4/longlong.m4 create mode 100644 m4/malloc.m4 create mode 100644 m4/math_h.m4 create mode 100644 m4/mbrtowc.m4 create mode 100644 m4/mbsinit.m4 create mode 100644 m4/mbsrtowcs.m4 create mode 100644 m4/mbstate_t.m4 create mode 100644 m4/mbswidth.m4 create mode 100644 m4/mbtowc.m4 create mode 100644 m4/memchr.m4 create mode 100644 m4/mempcpy.m4 create mode 100644 m4/mmap-anon.m4 create mode 100644 m4/msvc-inval.m4 create mode 100644 m4/msvc-nothrow.m4 create mode 100644 m4/multiarch.m4 create mode 100644 m4/nl_langinfo.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/nocrash.m4 create mode 100644 m4/off_t.m4 create mode 100644 m4/po.m4 create mode 100644 m4/printf-posix.m4 create mode 100644 m4/printf.m4 create mode 100644 m4/progtest.m4 create mode 100644 m4/rawmemchr.m4 create mode 100644 m4/realloc.m4 create mode 100644 m4/regex.m4 create mode 100644 m4/size_max.m4 create mode 100644 m4/sleep.m4 create mode 100644 m4/ssize_t.m4 create mode 100644 m4/stdalign.m4 create mode 100644 m4/stdbool.m4 create mode 100644 m4/stddef_h.m4 create mode 100644 m4/stdint.m4 create mode 100644 m4/stdint_h.m4 create mode 100644 m4/stdio_h.m4 create mode 100644 m4/stdlib_h.m4 create mode 100644 m4/strcase.m4 create mode 100644 m4/strchrnul.m4 create mode 100644 m4/strerror.m4 create mode 100644 m4/string_h.m4 create mode 100644 m4/strings_h.m4 create mode 100644 m4/strndup.m4 create mode 100644 m4/strnlen.m4 create mode 100644 m4/sys_socket_h.m4 create mode 100644 m4/sys_types_h.m4 create mode 100644 m4/sysexits.m4 create mode 100644 m4/threadlib.m4 create mode 100644 m4/uintmax_t.m4 create mode 100644 m4/unistd_h.m4 create mode 100644 m4/vasnprintf.m4 create mode 100644 m4/visibility.m4 create mode 100644 m4/vsnprintf.m4 create mode 100644 m4/warn-on-use.m4 create mode 100644 m4/wchar_h.m4 create mode 100644 m4/wchar_t.m4 create mode 100644 m4/wcrtomb.m4 create mode 100644 m4/wctype_h.m4 create mode 100644 m4/wcwidth.m4 create mode 100644 m4/wint_t.m4 create mode 100644 m4/xsize.m4 create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES-shell.in create mode 100644 po/POTFILES.in create mode 100644 po/README create mode 100644 po/Rules-piglatin create mode 100644 po/Rules-quot create mode 100644 po/Rules-swiss create mode 100644 po/Rules-translit create mode 100644 po/Rules-windowsdir create mode 100644 po/arabic.sed create mode 100644 po/ast.gmo create mode 100644 po/ast.po create mode 100644 po/boldquot.sed create mode 100644 po/ca.gmo create mode 100644 po/ca.po create mode 100644 po/cyrillic.sed create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/de@hebrew.gmo create mode 100644 po/de@hebrew.po create mode 100644 po/de_CH.gmo create mode 100644 po/de_CH.po create mode 100644 po/en@arabic.gmo create mode 100644 po/en@arabic.po create mode 100644 po/en@boldquot.header create mode 100644 po/en@cyrillic.gmo create mode 100644 po/en@cyrillic.po create mode 100644 po/en@greek.gmo create mode 100644 po/en@greek.po create mode 100644 po/en@hebrew.gmo create mode 100644 po/en@hebrew.po create mode 100644 po/en@piglatin.gmo create mode 100644 po/en@piglatin.header create mode 100644 po/en@piglatin.po create mode 100644 po/en@quot.gmo create mode 100644 po/en@quot.header create mode 100644 po/en@quot.po create mode 100644 po/eo.gmo create mode 100644 po/eo.po create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/exclude.pot create mode 100644 po/fi.gmo create mode 100644 po/fi.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/gl.gmo create mode 100644 po/gl.po create mode 100644 po/greek.sed create mode 100644 po/grub.d.sed create mode 100644 po/grub.pot create mode 100644 po/hebrew.sed create mode 100644 po/hr.gmo create mode 100644 po/hr.po create mode 100644 po/hu.gmo create mode 100644 po/hu.po create mode 100644 po/id.gmo create mode 100644 po/id.po create mode 100644 po/insert-header.sin create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ja.gmo create mode 100644 po/ja.po create mode 100644 po/ko.gmo create mode 100644 po/ko.po create mode 100644 po/lt.gmo create mode 100644 po/lt.po create mode 100644 po/nb.gmo create mode 100644 po/nb.po create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pa.gmo create mode 100644 po/pa.po create mode 100644 po/piglatin.sed create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/pt_BR.gmo create mode 100644 po/pt_BR.po create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/ru.gmo create mode 100644 po/ru.po create mode 100644 po/sl.gmo create mode 100644 po/sl.po create mode 100644 po/sr.gmo create mode 100644 po/sr.po create mode 100644 po/stamp-po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/swiss.sed create mode 100644 po/tr.gmo create mode 100644 po/tr.po create mode 100644 po/uk.gmo create mode 100644 po/uk.po create mode 100644 po/vi.gmo create mode 100644 po/vi.po create mode 100644 po/zh_CN.gmo create mode 100644 po/zh_CN.po create mode 100644 po/zh_TW.gmo create mode 100644 po/zh_TW.po create mode 100644 stamp-h.in create mode 100644 tests/ahci_test.in create mode 100644 tests/btrfs_test.in create mode 100644 tests/cdboot_test.in create mode 100644 tests/cmp_unit_test.c create mode 100644 tests/core_compress_test.in create mode 100644 tests/cpio_test.in create mode 100644 tests/date_unit_test.c create mode 100644 tests/dfly-mbr-mbexample.dfly.img.gz create mode 100644 tests/dfly-mbr-mbexample.mbr.img.gz create mode 100644 tests/ehci_test.in create mode 100644 tests/example_grub_script_test.in create mode 100644 tests/example_scripted_test.in create mode 100644 tests/example_unit_test.c create mode 100644 tests/exfat_test.in create mode 100644 tests/ext234_test.in create mode 100644 tests/fat_test.in create mode 100644 tests/fddboot_test.in create mode 100644 tests/file_filter/file create mode 100644 tests/file_filter/file.gz create mode 100644 tests/file_filter/file.gz.sig create mode 100644 tests/file_filter/file.lzop create mode 100644 tests/file_filter/file.lzop.sig create mode 100644 tests/file_filter/file.xz create mode 100644 tests/file_filter/file.xz.sig create mode 100644 tests/file_filter/keys create mode 100644 tests/file_filter/keys.pub create mode 100644 tests/file_filter/test.cfg create mode 100644 tests/file_filter_test.in create mode 100644 tests/gettext_strings_test.in create mode 100644 tests/grub_cmd_date.in create mode 100644 tests/grub_cmd_echo.in create mode 100644 tests/grub_cmd_regexp.in create mode 100644 tests/grub_cmd_set_date.in create mode 100644 tests/grub_cmd_sleep.in create mode 100644 tests/grub_cmd_test.in create mode 100644 tests/grub_cmd_tr.in create mode 100644 tests/grub_func_test.in create mode 100644 tests/grub_script_blanklines.in create mode 100644 tests/grub_script_blockarg.in create mode 100644 tests/grub_script_break.in create mode 100644 tests/grub_script_comments.in create mode 100644 tests/grub_script_continue.in create mode 100644 tests/grub_script_dollar.in create mode 100644 tests/grub_script_echo1.in create mode 100644 tests/grub_script_echo_keywords.in create mode 100644 tests/grub_script_escape_comma.in create mode 100644 tests/grub_script_eval.in create mode 100644 tests/grub_script_expansion.in create mode 100644 tests/grub_script_final_semicolon.in create mode 100644 tests/grub_script_for1.in create mode 100644 tests/grub_script_functions.in create mode 100644 tests/grub_script_gettext.in create mode 100644 tests/grub_script_if.in create mode 100644 tests/grub_script_leading_whitespace.in create mode 100644 tests/grub_script_no_commands.in create mode 100644 tests/grub_script_not.in create mode 100644 tests/grub_script_return.in create mode 100644 tests/grub_script_setparams.in create mode 100644 tests/grub_script_shift.in create mode 100644 tests/grub_script_strcmp.in create mode 100644 tests/grub_script_test.in create mode 100644 tests/grub_script_vars1.in create mode 100644 tests/grub_script_while1.in create mode 100644 tests/gzcompress_test.in create mode 100644 tests/hddboot_test.in create mode 100644 tests/help_test.in create mode 100644 tests/hfs_test.in create mode 100644 tests/hfsplus_test.in create mode 100644 tests/iso9660_test.in create mode 100644 tests/jfs_test.in create mode 100644 tests/lib/unit_test.c create mode 100644 tests/lzocompress_test.in create mode 100644 tests/minixfs_test.in create mode 100644 tests/netboot_test.in create mode 100644 tests/nilfs2_test.in create mode 100644 tests/ntfs_test.in create mode 100644 tests/ohci_test.in create mode 100644 tests/partmap_test.in create mode 100644 tests/pata_test.in create mode 100644 tests/printf_unit_test.c create mode 100644 tests/priority_queue_unit_test.cc create mode 100644 tests/pseries_test.in create mode 100644 tests/reiserfs_test.in create mode 100644 tests/romfs_test.in create mode 100644 tests/squashfs_test.in create mode 100644 tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/menu.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/po4a.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/prompt.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg create mode 100644 tests/syslinux/ubuntu10.04/isolinux/txt.cfg create mode 100644 tests/syslinux/ubuntu10.04_grub.cfg.in create mode 100644 tests/syslinux_test.in create mode 100644 tests/tar_test.in create mode 100644 tests/test_sha512sum.in create mode 100644 tests/test_unset.in create mode 100644 tests/udf_test.in create mode 100644 tests/uhci_test.in create mode 100644 tests/util/grub-fs-tester.in create mode 100644 tests/util/grub-shell-tester.in create mode 100644 tests/util/grub-shell.in create mode 100644 tests/xfs_test.in create mode 100644 tests/xzcompress_test.in create mode 100644 tests/zfs_test.in create mode 100644 themes/starfield/COPYING.CC-BY-SA-3.0 create mode 100644 themes/starfield/README create mode 100644 themes/starfield/blob_w.png create mode 100644 themes/starfield/boot_menu_c.png create mode 100644 themes/starfield/boot_menu_e.png create mode 100644 themes/starfield/boot_menu_n.png create mode 100644 themes/starfield/boot_menu_ne.png create mode 100644 themes/starfield/boot_menu_nw.png create mode 100644 themes/starfield/boot_menu_s.png create mode 100644 themes/starfield/boot_menu_se.png create mode 100644 themes/starfield/boot_menu_sw.png create mode 100644 themes/starfield/boot_menu_w.png create mode 100644 themes/starfield/slider_c.png create mode 100644 themes/starfield/slider_n.png create mode 100644 themes/starfield/slider_s.png create mode 100644 themes/starfield/src/blob_nw.xcf create mode 100644 themes/starfield/src/bootmenu/center.xcf create mode 100644 themes/starfield/src/bootmenu/corner.xcf create mode 100644 themes/starfield/src/bootmenu/side.xcf create mode 100644 themes/starfield/src/slider_c.xcf create mode 100644 themes/starfield/src/slider_n.xcf create mode 100644 themes/starfield/src/slider_s.xcf create mode 100644 themes/starfield/src/terminalbox/center.xcf create mode 100644 themes/starfield/src/terminalbox/corner.xcf create mode 100644 themes/starfield/src/terminalbox/side.xcf create mode 100644 themes/starfield/starfield.png create mode 100644 themes/starfield/terminal_box_c.png create mode 100644 themes/starfield/terminal_box_e.png create mode 100644 themes/starfield/terminal_box_n.png create mode 100644 themes/starfield/terminal_box_ne.png create mode 100644 themes/starfield/terminal_box_nw.png create mode 100644 themes/starfield/terminal_box_s.png create mode 100644 themes/starfield/terminal_box_se.png create mode 100644 themes/starfield/terminal_box_sw.png create mode 100644 themes/starfield/terminal_box_w.png create mode 100644 themes/starfield/theme.txt create mode 100644 unicode/ArabicShaping.txt create mode 100644 unicode/BidiMirroring.txt create mode 100644 unicode/COPYING create mode 100644 unicode/UnicodeData.txt create mode 100644 util/bash-completion.d/Makefile.am create mode 100644 util/bash-completion.d/Makefile.in create mode 100644 util/bash-completion.d/grub-completion.bash.in create mode 100644 util/bin2h.c create mode 100644 util/config.c create mode 100644 util/editenv.c create mode 100644 util/garbage-gen.c create mode 100644 util/getroot.c create mode 100644 util/glue-efi.c create mode 100644 util/grub-editenv.c create mode 100644 util/grub-file.c create mode 100644 util/grub-fstest.c create mode 100644 util/grub-gen-asciih.c create mode 100644 util/grub-gen-widthspec.c create mode 100644 util/grub-glue-efi.c create mode 100644 util/grub-install-common.c create mode 100644 util/grub-install.c create mode 100644 util/grub-kbdcomp.in create mode 100644 util/grub-macbless.c create mode 100644 util/grub-macho2img.c create mode 100644 util/grub-menulst2cfg.c create mode 100644 util/grub-mkconfig.in create mode 100644 util/grub-mkconfig_lib.in create mode 100644 util/grub-mkfont.c create mode 100644 util/grub-mkimage.c create mode 100644 util/grub-mkimage32.c create mode 100644 util/grub-mkimage64.c create mode 100644 util/grub-mkimagexx.c create mode 100644 util/grub-mklayout.c create mode 100644 util/grub-mknetdir.c create mode 100644 util/grub-mkpasswd-pbkdf2.c create mode 100644 util/grub-mkrelpath.c create mode 100644 util/grub-mkrescue.c create mode 100644 util/grub-mkstandalone.c create mode 100644 util/grub-module-verifier.c create mode 100644 util/grub-module-verifier32.c create mode 100644 util/grub-module-verifier64.c create mode 100644 util/grub-module-verifierXX.c create mode 100644 util/grub-mount.c create mode 100644 util/grub-pe2elf.c create mode 100644 util/grub-probe.c create mode 100644 util/grub-reboot.in create mode 100644 util/grub-render-label.c create mode 100644 util/grub-script-check.c create mode 100644 util/grub-set-default.in create mode 100644 util/grub-setup.c create mode 100644 util/grub-syslinux2cfg.c create mode 100644 util/grub.d/00_header.in create mode 100644 util/grub.d/10_hurd.in create mode 100644 util/grub.d/10_illumos.in create mode 100644 util/grub.d/10_kfreebsd.in create mode 100644 util/grub.d/10_linux.in create mode 100644 util/grub.d/10_netbsd.in create mode 100644 util/grub.d/10_windows.in create mode 100644 util/grub.d/10_xnu.in create mode 100644 util/grub.d/20_linux_xen.in create mode 100644 util/grub.d/30_os-prober.in create mode 100644 util/grub.d/40_custom.in create mode 100644 util/grub.d/41_custom.in create mode 100644 util/grub.d/README create mode 100644 util/i386/efi/grub-dumpdevtree create mode 100644 util/ieee1275/grub-ofpathname.c create mode 100644 util/import_gcry.py create mode 100644 util/import_gcrypth.sed create mode 100644 util/import_unicode.py create mode 100644 util/misc.c create mode 100644 util/mkimage.c create mode 100644 util/probe.c create mode 100644 util/render-label.c create mode 100644 util/resolve.c create mode 100644 util/setup.c create mode 100644 util/setup_bios.c create mode 100644 util/setup_sparc.c create mode 100644 util/spkmodem-recv.c diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 000000000..866b904ec --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,223 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.3 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your language by running the +command `locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.4 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of October +2006. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + +# Matrix here is removed! + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If October 2006 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +1.6 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..8de5c4d30 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,23 @@ +The following authors assigned copyright on their work to the Free +Software Foundation: + +Yoshinori K. Okuji designed and implemented the initial version. + +Jeroen Dekkers added initrd support, Multiboot support, and fixed bugs +in ext2fs. + +Marco Gerards added ext2fs support, grub-emu, a new command-line +engine, and fixed many bugs. + +Omniflux added terminfo and serial support. + +Vincent Pelletier added Sparc64 support. + +Hollis Blanchard implemented many parts of PowerPC support. + +Tomas Ebenlendr added the command chainloader into the normal mode, +fixed some bugs. + +Guillem Jover merged architecture-independent ELF support code. + +Vesa Jaaskelainen added VBE support. diff --git a/BUGS b/BUGS new file mode 100644 index 000000000..46faa6452 --- /dev/null +++ b/BUGS @@ -0,0 +1,7 @@ +GRUB team is aware of following problems: + - Currently search and assembling multidevice abstractions scans + all the devices which can be slow. + - Cache isn't used correctly for video which results in slowness. + +While these are bugs their solution has a potential of breaking more and more +seriously. So it was decided for 1.99 that they aren't fixed. diff --git a/COPYING b/COPYING new file mode 100644 index 000000000..94a9ed024 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..9c21a33e6 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3795 @@ +2017-04-25 Vladimir Serbinenko + + Increase version to 2.02. + +2017-04-12 Vladimir Serbinenko + + Fix remaining cases of gcc 7 fallthrough warning. + They are all intended, so just add the relevant comment. + +2017-04-04 Andrei Borzenkov + + Add gnulib-fix-gcc7-fallthrough.diff + As long as the code is not upstream, add it as explicit patch for the + case of gnulib refresh. + +2017-04-04 Andrei Borzenkov + + i386, x86_64, ppc: fix switch fallthrough cases with GCC7 + In util/getroot and efidisk slightly modify exitsing comment to mostly + retain it but still make GCC7 compliant with respect to fall through + annotation. + + In grub-core/lib/xzembed/xz_dec_lzma2.c it adds same comments as + upstream. + + In grub-core/tests/setjmp_tets.c declare functions as "noreturn" to + suppress GCC7 warning. + + In grub-core/gnulib/regexec.c use new __attribute__, because existing + annotation is not recognized by GCC7 parser (which requires that comment + immediately precedes case statement). + + Otherwise add FALLTHROUGH comment. + + Closes: 50598 + +2017-04-04 Andrei Borzenkov + + btrfs: avoid "used uninitialized" error with GCC7 + sblock was local and so considered new variable on every loop + iteration. + + Closes: 50597 + +2017-04-02 Andrei Borzenkov + + acpi: add missing efi_call wrapper to acpi command + Fixed loading of ACPI tables on EFI (side effect was apparent memory + corruption ranging from unpredictable behavior to system reset). + + Reported by Nando Eva + +2017-03-15 Vladimir Serbinenko + + Increment version to GRUB 2.02~rc2. + + Use core2duo for bootcheck test on 64-bit EFI. + Obviously pentium2 can't run efi64. + +2017-03-14 Andrei Borzenkov + + efi: skip iPXE block device. + iPXE adds Simple File System Protocol to loaded image handle, as side + effect it also adds Block IO protocol (according to comments, to work + around some bugs in EDK2). GRUB assumes that every device with Block IO + is disk and skips network initialization entirely. But iPXE Block IO + implementation is just a stub which always fails for every operation + so cannot be used. Attempt to detect and skip such devices. + + We are using media ID which iPXE sets to "iPXE" and block IO size in + hope that no real device would announce 1B block ... + + Closes: 50518 + +2017-03-05 phcoder + + xen: Fix wrong register in relocator. + This fixes chainloading of some GRUB variants. + +2017-02-27 Vladimir Serbinenko + + video_fb: Fix blue collor if using unoptimized blitter. + when unmapping the color what matters is the mode of source, not target. + + legacy_initrd: Strip any additional arguments to initrd. + +2017-02-26 Andrei Borzenkov + + grub-fs-tester: improve squash4 tests + 1. Make sure files are not multiple of block size. This will ensure tail packing + for squash4 and may also trigger more codes paths in other filesystems. + + 2. Call mksquashfs with -always-use-fragments to force tail packing. + +2017-02-25 Andrei Borzenkov + + efi: strip off final NULL from File Path in grub_efi_get_filename + UEFI 2.6 9.3.6.4 File Path Media Device Path says that Path Name is + "A NULL-terminated Path string including directory and file names". + + Strip final NULL from Path Name in each File Path node when constructing + full path. To be on safe side, strip all of them. + + Fixes failure chainloading grub from grub, when loaded grub truncates + image path and does not find its grub.cfg. + + https://bugzilla.opensuse.org/show_bug.cgi?id=1026344 + + This was triggered by commit ce95549cc54b5d6f494608a7c390dba3aab4fba7; + before it we built Path Name without trailing NULL, and apparently all + other bootloaders use single File Path node, thus not exposing this bug. + +2017-02-24 Andrei Borzenkov + + squash4: fix handling of fragments and sparse files + 1. Do not assume block list and fragment are mutually exclusive. Squash + can pack file tail as fragment (unless -no-fragments is specified); so + check read offset and read either from block list or from fragments as + appropriate. + + 2. Support sparse files with zero blocks. + + 3. Fix fragment read - frag.offset is absolute fragment position, + not offset relative to ino.chunk. + + Reported and tested by Carlo Caione + +2017-02-22 Vladimir Serbinenko + + Whitelist sparc64-ieee1275 as having no video modules. + ieee1275_fb is not built on sparc64 due to virtual address issues. + +2017-02-12 Andrei Borzenkov + + script: fix double free in lexer + yylex_destroy() already frees scanner. + + Found by: Coverity scan. + CID: 176636 + +2017-02-07 Vladimir Serbinenko + + xen: Fix parsing of XZ kernel. + In case of xz, the uncompressed size is appended to xz data which confuses + our xz decompressor. Trim it. + +2017-02-07 Vladimir Serbinenko + + xen: Fix handling of GRUB chainloading. + In case of GRUB we put remapper after domain pages and not at 0x0. + In this case we use max_addr to put remapper. Unfortunately we increment + max_addr as well in this case resulting in virt mapping mapping page + at old max_addr and trying to boot using new max_addr. + + Closes 46014. + +2017-02-04 Vladimir Serbinenko + + linguas: Don't skip ko.po. + Translation project doesn't require copyright disclaimers. They're independant + from us. They're responsible for their copyright story. + +2017-02-03 Vladimir Serbinenko + + Fix truncated checksum.h. + + Regenerate checksums.h + Screenshots contain version, so we need new checksums. + + Release 2.02-rc1. + + Fix mingw compilation. + +2017-02-03 Daniel Kahn Gillmor + + documentation: Clarify documentation for special environment variable "default". + The current documentation for the special environment variable + "default" is confusing and unclear. This patch attempts to clean it + up. + + In particular, the current documentation refers to the "number or + title", but then in the example it gives, the menu entries and + submenus all have numbers *in* their title; furthermore, there is no + example given about how to choose the number, or any indication about + whether counting is zero-indexed or 1-indexed. + + Having a cleaner example and presenting all variants (numeric, title, + and id) should make it clearer to the user. + +2017-02-03 Vladimir Serbinenko + + Avoid causing kernel oops in nilfs2 test. + 1024-byte and 2048-byte blocks don't really work with some kernels, skip + them as we don't want any oops'es. + + btrfs: Shorten label by one character. + mkfs.btrfs imposes a slightly lower limit than would be possible in btrfs. + +2017-02-02 Vladimir Serbinenko + + grub-fs-tester: Fix mkudffs invocation. + With current invocation order of arguments is wrong and path is hardcoded. + + grub-fs-tester: Fix fat test. + mkfs.vfat ignores -S when invoked on a disk, including loopback device, + so do an mkfs on underlying image. + +2017-02-02 Daniel Kiper + + i386/relocator: Align stack in grub_relocator64_efi relocator + Unified Extensible Firmware Interface Specification, Version 2.6, + section 2.3.4, x64 Platforms, boot services, says among others: + The stack must be 16-byte aligned. So, do it. Otherwise OS may + boot only by chance as it happens right now. + +2017-02-02 Vladimir Serbinenko + + i386-ieee1275: Add missing bootcheck target. + + bootcheck-linux-i386: Use -cpu pentium2. + Most modern kernels are compiled for i686, so use -cpu pentium2 + to avoid spurious failures. + + Use -fPIC with arm64 with clang. + Currently it doesn't work either way but with -fPIC it should work once + clang bug is fixed. + + INSTALL: Fix mention of thumb-clang. + + Fix thumb compilation with clang. + According to EABI only STT_FUNC has convention of lowest bit indicating + execution mode. R_THM_{JUMP,CALL}* relocations are assumed to be pointing + to thumb mode unless they use STT_FUNC. + +2017-02-01 Vladimir Serbinenko + + Add missing strtoull_test.c + It was forgotten in my local directory. + + arm64: Add support for GOT and PCREL32 relocations. + + mkimage: Fix memory leak. + + arm/arm64: Fix improper use of start address. + It was used instead of loading address of current section or of entire buffer. + + ia64: Fix iterator for relocation entries. + Don't assume relocation entry size and use sh_entsize properly. + + arm: Fix trampoline generation. + We used the wrong pointer in this case. It worked only by accident. + + Fix bootcheck-related files compilation. + We need -static as otherwise linker will set interpreter field and ld.so + is not available on our initrd's. + Strip all sections we don't need on binary tests. + +2017-01-31 Vladimir Serbinenko + + Regenerate checksum.h. + Screenshots checked. + Using unifont from http://ftp.us.debian.org/debian/pool/main/u/unifont/xfonts-unifont_7.0.06-1_all.deb. + + grub-mkfont: Remove leftover debug statement. + + charset: Trim away RLM and LRM. + They are not visible but would otherwise end up as [LRM] or [RLM] squares + with some fonts. + + gfxterm: Fix clearing of cursor. + If ascent is bigger than height - 2, then we draw over character box but then + to clear cursor we only draw over character box. So trim ascent if necessarry. + + ia64: Add support for R_IA64_GPREL64I. + Recent GCC generates those relocations, so we need to support them. + +2017-01-30 Vladimir Serbinenko + + grub-module-verifier: Add mips to all_video whitelist. + On MIPS video is compiled-in. So all_video is empty. Whitelist it. + + Fix -nopie/-nopie check. + We don't use lgcc_s but missing lgcc_s or another library cause test to fail. + So use -nostdlib. + We need to use -Werror to avoid warning-generated case to be accepted. + Clang uses -nopie rather than -no-pie. Check both and use whichever one works. + Additionally android clang passes -pie to the linker even though it doesn't + define __PIE__. So if compilation without no-pie logic fails add -nopie/-no-pie + even if __PIE__ is not defined. + + grub-module-verifier: Ignore all_video emptiness on xen. + It's intentional that it's empty when no video modules + are available. + +2017-01-28 Vladimir Serbinenko + + Support arm clang 3.8 amd later. + clang 3.8 and later doesn't support -mllvm -use-arm-movt=0 + whereas older clang doesn't know -mno-movt. So use + -mno-movt whenever possible and fallback to mllvm variant. + +2017-01-27 Carlo Caione + + exfat: Support files over 4GiB + file size in grub_fat_data was 32-bit on exfat. + +2017-01-27 Vladimir Serbinenko + + Ensure that grub_reboot doesn't return on emu. + Use grub_fatal if longjmp fails. + + grub_reboot is marked as noreturn so return would cause + a crash. + +2017-01-27 Vladimir Serbinenko + + grub-shell: skip font copying when no font is available. + + Don't use -mlong-calls on arm. + We don't really need it and it's flaky and creates + bogus symbols with clang. + + configure: Disable movw/movt with clang. + Those relocations are not compatible with PE and also + not compatible with custom uboot relocator. + Disable them. + + grub-fs-tester: Delete directory once we're done. + + grub-fs-tester: Accomodate for slower systems. + fstime can be more different with xz squashfs. + Allow difference up to 3 seconds. + This code is ugly now but rewriting it now is not on the + table. + + grub-fs-tester: Accomodate for testing in proot containers. + proot creates hidden files with .proot prefix and name + derived from real file name. So decrease file name length + and path depth. For some reason depth 85 also results in + undeleteable directory, so use 84 instead of 85. + +2017-01-24 Andrei Borzenkov + + osdep/linux: handle autofs entries in /proc/self/mountinfo + These entries have placeholder for device name and so are useless for our + purpose. grub failed with something like + + grub-install: error: failed to get canonical path of `systemd-1'. + + When we see autofs entry, record it (to keep parent-child relationship) but + continue to look for real mount. If it is found, we process it as usual. If + only autofs entry exists, attempt to trigger mount by opening mount point + and retry. Mount point itself is then kept open to avoid timeout. + + Recent systemd is by default using automount for /boot/efi so this should + become more popular problem on EFI systems. + + Closes: 49942 + +2017-01-08 Andrei Borzenkov + + linux: fix "vga=XX deprecated" warning for text mode + Arguments were in reverse order which resulted in + + text is deprecated. Use set gfxpayload=vga=0 before linux command instead. + +2016-12-22 Andrei Borzenkov + + configure: fix check for sys/sysmacros.h under glibc 2.25+ + glibc 2.25 still includes sys/sysmacros.h in sys/types.h but also emits + deprecation warning. So test for sys/types.h succeeds in configure but later + compilation fails because we use -Werror by default. + + While this is fixed in current autoconf GIT, we really cannot force everyone + to use bleeding edge (that is not even released right now). So run test under + -Werror as well to force proper detection. + + This should have no impact on autoconf 2.70+ as AC_HEADER_MAJOR in this version + simply checks for header existence. + + Reported and tested by Khem Raj + +2016-12-22 Michael Chang + + Fix fwpath in efi netboot + The path returned by grub_efi_net_config has already been stripped for the + directory part extracted from cached bootp packet. We should just return the + result to avoild it be stripped again. + + It fixed the problem that grub.efi as NBP image always looking for grub.cfg and + platform directory in upper folder rather than current one it gets loaded while + $prefix is empty. The behavior is inconsistent with other architecture and how + we would expect empty $prefix going to be in general. + + The only exception to the general rule of empty $prefix is that when loaded + from platform directory itself, the platform part is stripped thus upper folder + is used for looking up files. It meets the case for how grub-mknetdir lay out + the files under tftp root directory, but also hide away this issue to be + identified as it appears to be just works. + + Also fix possible memory leak by moving grub_efi_get_filename() call after + grub_efi_net_config(). + +2016-12-15 Andrei Borzenkov + + efi: properly terminate filepath with NULL in chainloader + EFI File Path Media Device Path is defined as NULL terminated string; + but chainloader built file paths without final NULL. This caused error + with Secure Boot and Linux Foundation PreLoader on Acer with InsydeH20 BIOS. + Apparently firmware failed verification with EFI_INVALID_PARAMETER which is + considered fatal error by PreLoader. + + Reported and tested by Giovanni Santini + +2016-12-14 Magnus Granberg + + configure: add check for -no-pie if the compiler default to -fPIE + When Grub is compile with gcc 6.1 that have --enable-defult-pie set. + It fail with. + -ffreestanding -m32 -Wl,-melf_i386 -Wl,--build-id=none -nostdlib -Wl,-N -Wl,-r,-d - + o trig.module trig_module-trigtables.o + grep 'MARKER' gcry_whirlpool.marker.new > gcry_whirlpool.marker; rm -f + gcry_whirlpool.marker.new + /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.0/../../../../x86_64-pc-linux-gnu/bin/ld: -r and - + shared may not be used together + collect2: error: ld returned 1 exit status + Makefile:26993: recipe for target 'trig.module' failed + + Check that compiler supports -no-pie and add it to linker flags. + +2016-12-14 Stanislav Kholmanskikh + + ofnet: implement the receive buffer + get_card_packet() from ofnet.c allocates a netbuff based on the device's MTU: + + nb = grub_netbuff_alloc (dev->mtu + 64 + 2); + + In the case when the MTU is large, and the received packet is + relatively small, this leads to allocation of significantly more memory, + than it's required. An example could be transmission of TFTP packets + with 0x400 blksize via a network card with 0x10000 MTU. + + This patch implements a per-card receive buffer in a way similar to efinet.c, + and makes get_card_packet() allocate a netbuff of the received data size. + + Reviewed-by: Daniel Kiper + +2016-12-14 Stanislav Kholmanskikh + + ofnet: move the allocation of the transmit buffer into a function + In the current code search_net_devices() uses the "alloc-mem" command + from the IEEE1275 User Interface for allocation of the transmit buffer + for the case when GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN is set. + + I don't have hardware where this flag is set to verify if this + workaround is still needed. However, further changes to ofnet will + require to execute this workaround one more time. Therefore, to + avoid possible duplication of code I'm moving this piece of + code into a function. + + Reviewed-by: Daniel Kiper + +2016-11-24 Alexander Graf + + efi: Move fdt helper into own file + We only support FDT files with EFI on arm and arm64 systems, not + on x86. So move the helper that finds a prepopulated FDT UUID + into its own file and only build it for architectures where it + also gets called. + + Reviewed-by: Daniel Kiper + +2016-11-22 Andrei Borzenkov + + NEWS updates + +2016-11-22 Andrei Borzenkov + + bootp: export next server IP as environment variable + Network boot autoconfiguration sets default server to next server IP + (siaddr) from BOOTP/DHCP reply, but manual configuration using net_bootp + exports only server name. Unfortunately semantic of server name is not + clearly defined. BOOTP RFC 951 defines it only for client request, and + DHCP RFC 1541 only mentions it, without any implied usage. It looks like + this field is mostly empty in server replies. + + Export next server IP as net__next_server variable. This allows + grub configuration script to set $root/$prefix based on information obtained + by net_bootp. + + Reported and tested by: Nikunj A Dadhania + Cc: nikunj@linux.vnet.ibm.com + + v2: change variable name to net__next_server as discussed on the list + +2016-11-22 Aaro Koskinen + + configure.ac: don't require build time grub-mkfont on powerpc-ieee1275 + Don't require build time grub-mkfont on powerpc-ieee1275. + +2016-11-14 Dirk Mueller + + grub-mknetdir: Add support for ARM64 EFI + +2016-11-12 Joonas Lahtinen + + .gitignore: Add grub-core/build-grub-module-verifier + +2016-11-10 Alexander Graf + + arm efi: Use fdt from firmware when available + If EFI is nice enough to pass us an FDT using configuration tables on 32bit + ARM, we should really try and make use of it. + + Reviewed-by: Daniel Kiper + +2016-11-10 Alexander Graf + + arm64: Move firmware fdt search into global function + Searching for a device tree that EFI passes to us via configuration tables + is nothing architecture specific. Move it into generic code. + + Reviewed-by: Daniel Kiper + +2016-11-05 Corey Hickey + + fix detection of non-LUKS CRYPT + grub_util_get_dm_abstraction() does a string comparison of insufficient + length. When using a UUID such as "CRYPT-PLAIN-sda6_crypt", the function + returns GRUB_DEV_ABSTRACTION_LUKS. + + This results in the error: + ./grub-probe: error: disk `cryptouuid/sda6_crypt' not found. + + This appears to be a copy/paste error introduced in: + a10e7a5a8918bea6e2632055129fa9b516fe965a + + The bug was (apparently) latent until revealed by: + 3bca85b4184f74995a7cc2791e432173fde26d34 + +2016-10-27 Juergen Gross + + xen: add capability to load p2m list outside of kernel mapping + Modern pvops linux kernels support a p2m list not covered by the + kernel mapping. This capability is flagged by an elf-note specifying + the virtual address the kernel is expecting the p2m list to be mapped + to. + + In case the elf-note is set by the kernel don't place the p2m list + into the kernel mapping, but map it to the given address. This will + allow to support domains with larger memory, as the kernel mapping is + limited to 2GB and a domain with huge memory in the TB range will have + a p2m list larger than this. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: modify page table construction + Modify the page table construction to allow multiple virtual regions + to be mapped. This is done as preparation for removing the p2m list + from the initial kernel mapping in order to support huge pv domains. + + This allows a cleaner approach for mapping the relocator page by + using this capability. + + The interface to the assembler level of the relocator has to be changed + in order to be able to process multiple page table areas. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: add capability to load initrd outside of initial mapping + Modern pvops linux kernels support an initrd not covered by the initial + mapping. This capability is flagged by an elf-note. + + In case the elf-note is set by the kernel don't place the initrd into + the initial mapping. This will allow to load larger initrds and/or + support domains with larger memory, as the initial mapping is limited + to 2GB and it is containing the p2m list. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: factor out allocation of page tables into separate function + Do the allocation of page tables in a separate function. This will + allow to do the allocation at different times of the boot preparations + depending on the features the kernel is supporting. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: factor out allocation of special pages into separate function + Do the allocation of special pages (start info, console and xenbus + ring buffers) in a separate function. This will allow to do the + allocation at different times of the boot preparations depending on + the features the kernel is supporting. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: factor out p2m list allocation into separate function + Do the p2m list allocation of the to be loaded kernel in a separate + function. This will allow doing the p2m list allocation at different + times of the boot preparations depending on the features the kernel + is supporting. + + While at this remove superfluous setting of first_p2m_pfn and + nr_p2m_frames as those are needed only in case of the p2m list not + being mapped by the initial kernel mapping. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: synchronize xen header + Get actual version of include/xen/xen.h from the Xen repository in + order to be able to use constants defined there. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: add elfnote.h to avoid using numbers instead of constants + Various features and parameters of a pv-kernel are specified via + elf notes in the kernel image. Those notes are part of the interface + between the Xen hypervisor and the kernel. + + Instead of using num,bers in the code when interpreting the elf notes + make use of the header supplied by Xen for that purpose. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: reduce number of global variables in xen loader + The loader for xen paravirtualized environment is using lots of global + variables. Reduce the number by making them either local or by putting + them into a single state structure. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: avoid memleaks on error + When loading a Xen pv-kernel avoid memory leaks in case of errors. + + Reviewed-by: Daniel Kiper + +2016-10-27 Juergen Gross + + xen: make xen loader callable multiple times + The loader for xen paravirtualized environment isn't callable multiple + times as it won't free any memory in case of failure. + + Call grub_relocator_unload() as other modules do it before allocating + a new relocator or when unloading the module. + + Reviewed-by: Daniel Kiper + +2016-10-27 Daniel Kiper + + multiboot2: Add support for relocatable images + Currently multiboot2 protocol loads image exactly at address specified in + ELF or multiboot2 header. This solution works quite well on legacy BIOS + platforms. It is possible because memory regions are placed at predictable + addresses (though I was not able to find any spec which says that it is + strong requirement, so, it looks that it is just a goodwill of hardware + designers). However, EFI platforms are more volatile. Even if required + memory regions live at specific addresses then they are sometimes simply + not free (e.g. used by boot/runtime services on Dell PowerEdge R820 and + OVMF). This means that you are not able to just set up final image + destination on build time. You have to provide method to relocate image + contents to real load address which is usually different than load address + specified in ELF and multiboot2 headers. + + This patch provides all needed machinery to do self relocation in image code. + First of all GRUB2 reads min_addr (min. load addr), max_addr (max. load addr), + align (required image alignment), preference (it says which memory regions are + preferred by image, e.g. none, low, high) from multiboot_header_tag_relocatable + header tag contained in binary (at this stage load addresses from multiboot2 + and/or ELF headers are ignored). Later loader tries to fulfill request (not only + that one) and if it succeeds then it informs image about real load address via + multiboot_tag_load_base_addr tag. At this stage GRUB2 role is finished. Starting + from now executable must cope with relocations itself using whole static and + dynamic knowledge provided by boot loader. + + This patch does not provide functionality which could do relocations using + ELF relocation data. However, I was asked by Konrad Rzeszutek Wilk and Vladimir + 'phcoder' Serbinenko to investigate that thing. It looks that relevant machinery + could be added to existing code (including this patch) without huge effort. + Additionally, ELF relocation could live in parallel with self relocation provided + by this patch. However, during research I realized that first of all we should + establish the details how ELF relocatable image should look like and how it should + be build. At least to build proper test/example files. + + So, this patch just provides support for self relocatable images. If ELF file + with relocs is loaded then GRUB2 complains loudly and ignores it. Support for + such files will be added later. + + This patch was tested with Xen image which uses that functionality. However, this Xen + feature is still under development and new patchset will be released in about 2-3 weeks. + + Reviewed-by: Vladimir Serbinenko + +2016-10-27 Daniel Kiper + + multiboot2: Do not pass memory maps to image if EFI boot services are enabled + If image requested EFI boot services then skip multiboot2 memory maps. + Main reason for not providing maps is because they will likely be + invalid. We do a few allocations after filling them, e.g. for relocator + needs. Usually we do not care as we would have finished boot services. + If we keep boot services then it is easier/safer to not provide maps. + However, if image needs memory maps and they are not provided by bootloader + then it should get itself just before ExitBootServices() call. + + Reviewed-by: Konrad Rzeszutek Wilk + Reviewed-by: Vladimir Serbinenko + +2016-10-27 Daniel Kiper + + multiboot2: Add tags used to pass ImageHandle to loaded image + Add tags used to pass ImageHandle to loaded image if requested. + It is used by at least ExitBootServices() function. + + Reviewed-by: Konrad Rzeszutek Wilk + Reviewed-by: Vladimir Serbinenko + +2016-10-27 Daniel Kiper + + i386/relocator: Add grub_relocator64_efi relocator + Add grub_relocator64_efi relocator. It will be used on EFI 64-bit platforms + when multiboot2 compatible image requests MULTIBOOT_TAG_TYPE_EFI_BS. Relocator + will set lower parts of %rax and %rbx accordingly to multiboot2 specification. + On the other hand processor mode, just before jumping into loaded image, will + be set accordingly to Unified Extensible Firmware Interface Specification, + Version 2.4 Errata B, section 2.3.4, x64 Platforms, boot services. This way + loaded image will be able to use EFI boot services without any issues. + + Reviewed-by: Konrad Rzeszutek Wilk + Reviewed-by: Vladimir Serbinenko + +2016-10-18 Sakar Arora + + net/ip: Fix limit_time calculation in freeing old fragments + limit_time underflows when current time is less than 90000ms. + This causes packet fragments received during this time, i.e., + till 90000ms pass since timer init, to be rejected. + + Hence, set it to 0 if its less than 90000. + +2016-09-28 Andrei Borzenkov + + asm-tests/i386-pc: Check that movl is 5 bytes. + LLVM 3.9 now emits short form of jump instructions, but it is still using + 32 bit addresses for some movl instructions. Fortunately it was caught early: + + clang ... boot/i386/pc/boot.S + clang -cc1as: fatal error: error in backend: invalid .org offset '440' (at offset '441') + + Add additional check to catch it during configure run and force -no-integrated-as. + + Closes: 49200 + + More details in + https://lists.gnu.org/archive/html/grub-devel/2015-02/msg00099.html + https://llvm.org/bugs/show_bug.cgi?id=22662 + +2016-08-13 Pete Batard + + Add missing va_end() to xasprintf() in grub-emu. + +2016-07-27 Andrei Borzenkov + + at_keyboard: fix numpad "0" and "." mapping + Reported for set 1 by fgndevelop . Apparently + set 2 was reversed too. + +2016-07-26 Andrei Borzenkov + + dns: fix buffer overflow for data->addresses in recv_hook + We may get more than one response before exiting out of loop in + grub_net_dns_lookup, but buffer was allocated for the first response only, + so storing answers from subsequent replies wrote past allocated size. + We never really use more than the very first address during lookup so there + is little point in collecting all of them. Just quit early if we already have + some reply. + + Code needs serious redesign to actually collect multiple answers + and select the best fit according to requested type (IPv4 or IPv6). + + Reported and tested by Michael Chang + +2016-07-26 Andrei Borzenkov + + xfs: accept filesystem with meta_uuid + XFS V5 stores UUID in metadata and compares them with superblock UUID. + To allow changing of user-visible UUID it stores original value in new + superblock field (meta_uuid) and sets incompatible flag to indicate that + new field must be used to verify metadata. Our driver currently does not + check metadata UUID so simply accept such filesystem. + + Reported-By: Marcos Mello + Reviewd by Jan Kara + +2016-05-03 Andrei Borzenkov + + net: translate pxe prefix to tftp when checking for self-load + Commit ba218c1 missed legacy pxe and pxe: prefixes which are + translated to tftp, so comparison failed. + +2016-04-30 Andrei Borzenkov + + net: reset net->stall in grub_net_seek_real + If we open new connection, we need to reset stall indication, otherwise + nothing will ever be polled (low level code rely on this field being + zero when establishing connection). + +2016-04-30 Stefan Fritsch + + http: reset EOF indication in http_seek + Otherwise next read will stop polling too early due to stale EOF + indicator, returning incomplete data to caller. + +2016-04-24 Mike Gilbert + + build: Use AC_HEADER_MAJOR to find device macros + Depending on the OS/libc, device macros are defined in different + headers. This change ensures we include the right one. + + sys/types.h - BSD + sys/mkdev.h - Sun + sys/sysmacros.h - glibc (Linux) + + glibc currently pulls sys/sysmacros.h into sys/types.h, but this may + change in a future release. + + https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html + +2016-04-09 Michael Chang + + http: fix superfluous null line in range request header + At least the apache sever is very unhappy with that extra null line and will + take more than ten seconds in responding to each range request, which slows + down a lot the entire http file transfer process or even time out. + +2016-03-22 Andrei Borzenkov + + configure: set -fno-pie together with -fno-PIE + OpenBSD 5.9 apparently defaults to -fpie. We use -fno-PIE when appropriate + already, but that is not enough - it does not turn off -fpie. + + Actually check for -fPIE is not precise enough. __PIE__ is set for both + -fpie and -fPIE but with different values. As far as I can tell, both + options were introduced at the same time, so both should always be supported. + + This fixes compilation on OpenBSD 5.9 which otherwise created insanely big + lzma_decompress.img. + + Reported, suggested and tested by: Jiri B + +2016-03-20 Andrei Borzenkov + + bootp: check that interface is not NULL in configure_by_dhcp_ack + grub_net_add_addr may fail with OOM and we use returned interface + later without any checks. + +2016-03-19 Andrei Borzenkov + + bootp: fix memory leak in grub_cmd_dhcpopt + +2016-03-15 Aaron Luft + + Remove the variable oldname which is attempting to free stack space. + Historically this variable hold previous value of filename that + had to be freed if allocated previously. Currently this branch + is entered only if filename was not allocated previously so it + became redundant. It did not cause real problems because grub_free + was not called, but code is confusing and causes compilation error + in some cases. + +2016-03-13 Andrei Borzenkov + + Makefile.util.def: add $LIBINTL to grub-macbless flags + Fixes compilation on OpenBSD 5.9. + + Reported by Jiri B + +2016-03-11 Robert Marshall + + Failed config now returns exit code (#1252311) + Grub would notify the user if the new config was invalid, however, it + did not exit properly with exit code 1. Added the proper exit code. + + Resolves: rhbz#1252311 + +2016-03-11 Michael Chang + + xen_file: Fix invalid payload size + +2016-03-10 Vladimir Serbinenko + + multiboot2: Remove useless GRUB_PACKED + Reported by: Daniel Kiper + +2016-03-06 Andrei Borzenkov + + 20_linux_xen: fix test for GRUB_DEVICE + Same fix as in 082bc9f. + +2016-03-06 Mike Gilbert + + 10_linux: Fix grouping of tests for GRUB_DEVICE + Commit 7290bb562 causes GRUB_DISABLE_LINUX_UUID to be ignored due to + mixing of || and && operators. Add some parens to help with that. + +2016-02-28 Andrei Borzenkov + + NEWS update + +2016-02-28 Vladimir Serbinenko + + Release 2.02~beta3 + + grub_arch_sync_dma_caches: Accept volatile address + +2016-02-27 Leif Lindholm + + efidisk: Respect block_io_protocol buffer alignment + Returned from the OpenProtocol operation, the grub_efi_block_io_media + structure contains the io_align field, specifying the minimum alignment + required for buffers used in any data transfers with the device. + + Make grub_efidisk_readwrite() allocate a temporary buffer, aligned to + this boundary, if the buffer passed to it does not already meet the + requirements. + + Also sanity check the io_align field in grub_efidisk_open() for + power-of-two-ness and bail if invalid. + +2016-02-27 Vladimir Serbinenko + + usbtrans: Fix memory coherence and use-after-free. + + ehci: Fix memory coherence + This is a no-op on x86 but necessarry on ARM and may be necessarry on MIPS. + + arm-uboot: Make self-relocatable to allow loading at any address + + Allow _start == 0 with relocatable images + +2016-02-27 Vladimir Serbinenko + + Provide __bss_start and _end symbols in grub-mkimage. + For this ensure that all bss sections are merged. + + We need this to correctly prelink non-PE relocatable images. + +2016-02-27 Vladimir Serbinenko + + Encapsulate image layout into a separate structure. + Currently we pass around a lot of pointer. Instead put all relevant data + into one structure. + + mkimagexx: Split PE and generic part for relocations. + As a preparation for U-Boot relocations, split emitting PE-relocations + from parsing source ELF-relocations. + + mkimage.c: Split into separate files. + util/grub-mkimagexx.c is included in a special way into mkimage.c. + Interoperation between defines makes this very tricky. Instead + just have a clean interface and compile util/grub-mkimage*.c separately + from mkimage.c + + bsd: Ensure that kernel is loaded before loading module. + kernel_type may be set to the type of failed kernel. This patching-up is + easier than to reflow kernel loading routines. + + cat: Don't switch terminal mode when there is nothing to highlight. + This just pollutes serial console. + + Use console rather than serial_efi0 on arm64-efi in tests + +2016-02-27 Andrei Borzenkov + + efidisk: fix misplaced parenthesis in b00e4c2 + +2016-02-26 Andrei Borzenkov + + efidisk: prevent errors from diskfilter scan of removable drives + Map EFI_NO_MEDIA to GRUB_ERR_OUT_OF_RANGE that is ignored by diskfilter. This + actually matches pretty close (we obviously attempt to read outside of media) + and avoids adding more error codes. + + This affects only internally initiated scans. If read/write from removable is + explicitly requested, we still return an error and text explanation is more + clear for user than generic error. + + Reported and tested by Andreas Loew + +2016-02-26 Vladimir Serbinenko + + Regenerate checksums + + Makefile: Don't delete default_payload.elf if it doesn't exist. + +2016-02-25 Josef Bacik + + net: fix ipv6 routing + ipv6 routing in grub2 is broken, we cannot talk to anything outside our local + network or anything that doesn't route in our global namespace. This patch + fixes this by doing a couple of things + + 1) Read the router information off of the router advertisement. If we have a + router lifetime we need to take the source address and create a route from it. + + 2) Changes the routing stuff slightly to allow you to specify a gateway _and_ an + interface. Since the router advertisements come in on the link local address we + need to associate it with the global address on the card. So when we are + processing the router advertisement, either use the SLAAC interface we create + and add the route to that interface, or loop through the global addresses we + currently have on our interface and associate it with one of those addresses. + We need to have a special case here for the default route so that it gets used, + we do this by setting the masksize to 0 to mean it encompasses all networks. + The routing code will automatically select the best route so if there is a + closer match we will use that. + + With this patch I can now talk to ipv6 addresses outside of my local network. + Thanks, + +2016-02-24 Vladimir Serbinenko + + ieee1275: fix signed comparison + +2016-02-23 Andrei Borzenkov + + search: actually skip floppy with --no-floppy + grub_device_iterate() ignores device when iterator returns 1, not 0. + + Reported by Carlos E. R. + +2016-02-23 Andrei Borzenkov + + multiboot2: zero reserved field in memory map + Documentation says, bootloader should set reserved field to zero. + + Reported by Wink Saville + +2016-02-22 Vladimir Serbinenko + + Improve EHCI logging + Add dprintf's on common error paths and remove some entries which are too + noisy. + + usb_keyboard: Remove useless include + This prevents non-PCI machines from having USB. + + Refresh before abort + This ensures that abort message is actually visible to the user. + +2016-02-22 Eric Snowberg + + ieee1275: prevent buffer over-read + Prevent buffer over-read in grub_machine_mmap_iterate. This was + causing phys_base from being calculated properly. This then + caused the wrong value to be placed in ramdisk_image within + struct linux_hdrs. Which prevented the ramdisk from loading on + boot. + + Newer SPARC systems contain more than 8 available memory entries. + + For example on a T5-8 with 2TB of memory, the memory layout could + look like this: + + T5-8 Memory + reg 00000000 30000000 0000003f b0000000 + 00000800 00000000 00000040 00000000 + 00001000 00000000 00000040 00000000 + 00001800 00000000 00000040 00000000 + 00002000 00000000 00000040 00000000 + 00002800 00000000 00000040 00000000 + 00003000 00000000 00000040 00000000 + 00003800 00000000 00000040 00000000 + available 00003800 00000000 0000003f ffcae000 + 00003000 00000000 00000040 00000000 + 00002800 00000000 00000040 00000000 + 00002000 00000000 00000040 00000000 + 00001800 00000000 00000040 00000000 + 00001000 00000000 00000040 00000000 + 00000800 00000000 00000040 00000000 + 00000000 70000000 0000003f 70000000 + 00000000 6eef8000 00000000 00002000 + 00000000 30400000 00000000 3eaf6000 + name memory + +2016-02-22 Thomas Huth + + menu_entry: Disable cursor during update_screen() + When running grub in a VGA console of a KVM pseries guest on PowerPC, + you can see the cursor sweeping over the whole line when entering a + character in editor mode. This is visible because grub always refreshes + the whole line when entering a character in editor mode, and drawing + characters is quite a slow operation with the firmware used for the + powerpc pseries guests (SLOF). + To avoid this ugliness, the cursor should be disabled when refreshing + the screen contents during update_screen(). + +2016-02-17 Vladimir Serbinenko + + default_payload.elf: Always rebuild and remove before build. + It's difficult to know all dependencies. Since it's manual and cheap + target anyway, simply always rebuild it. + + default_payload.elf: Include password_pbkdf2. + Withoout this module we may end up in a system where no password is + accepted. + + default_payload.elf: Add modules from $(EXTRA_PAYLOAD_MODULES). + This allows coreboot building system to add extra modules depending + on user config. + + mm: Avoid integer overflow. + + Remove -Wno-maybe-uninitialized as it may not be present. + + Fix warnings when compiling with -O3 + +2016-02-14 Vladimir Serbinenko + + Add wbinvd around bios call. + Via C3 has problems with cache coherency when transitioning between the modes, + so flush it around bios calls. + +2016-02-12 Eric Snowberg + + OBP available region contains grub. Start at grub_phys_end. + This prevents a problem where grub was being overwritten since + grub_phys_start does not start at a zero offset within the memory + map. + +2016-02-12 Andreas Freimuth + + Add Thinkpad T410s button cmos address. + +2016-02-12 Vladimir Serbinenko + + TODO: Remove obsolete link + +2016-02-12 Toomas Soome + + lz4: Fix pointer overflow + +2016-02-12 Vladimir Serbinenko + + grub-shell: Update 32-bit OVMF binary name. + +2016-02-12 Daniel Kiper + + relocator: Fix integer underflow. + +2016-02-12 Vladimir Serbinenko + + Change -v to -V for version of shell utils. + + xnu: Add new kernel path to autoconfig. + + arm64: Use cpu timer for timekeeping. + + powerpc: Trim header in tests. + + default_payload: Include syslinuxcfg, all filesystems and xnu. + + xnu: Supply random seed. + Now we're able to load kernels up to El Capitan. + + Add RNG module. + + yylex: use grub_fatal for exit. + lexer calls yylex_fatal on fatal internal errors. yylex_fatal itself is + declared as noreturn and calls exit. Returning from noreturn function has + unpredictable consequences. + + printf: Fix and test %% behaviour in presence of subsequenbt args. + + Split pmtimer wait and tsc measurement from pmtimer tsc calibration. + + Make grub_cpu_is_tsc_supported generally available. + + Make grub_acpi_find_fadt accessible generically + + Make unaligned types public. + This simplifies code which has to handle those types. + + Fix emu compilation error on arm. + +2016-02-11 Vladimir Serbinenko + + xnu: Include relocated EFI in heap size. + + xnu: supply ramsize to the kernel. + Without this info recent kernels crash as they allocate no heap. + +2016-02-03 Andrei Borzenkov + + support modules without symbol table + all_video module does not have any code or data and exists solely for + .moddeps section to pull in dependencies. This makes all symbols unneeded. + + While in current binutils (last released version as of this commit is 2.26) + ``strip --strip-unneeded'' unintentionally adds section symbols for each + existing section, this behavior was considered a bug and changed in commit + 14f2c699ddca1e2f706342dffc59a6c7e23e844c to completely strip symbol table + in this case. + + Older binutils (verified with 2.17) and some other toolchains (at least + elftoolchain r3223M), both used in FreeBSD, remove symbol table in all_video + as well. + + Relax run-time check and do not return error for modules without symbol table. + Add additional checks to module verifier to make sure such modules + + a) have non-empty .moddeps section. Without either externally visible symbols + or .moddeps modules are completely useless and should not be built. + + b) do not have any relocations. + + Closes: 46986 + + v2: add run-time check for empty symbol table if relocations are present as + suggested by Vladimir. + +2016-02-01 Andrei Borzenkov + + 10_linux: avoid multi-device root= kernel argument + If root filesystem is multidev btrfs, do not attempt to pass all devices as + kernel root= argument. This results in splitting command line in GRUB due to + embedded newline and even if we managed to quote it, kernel does not know how + to interpret it anyway. Multidev btrfs requires user space device scanning, + so passing single device would not work too. + + This still respects user settings GRUB_DISABLE_LINUX_UUID. Not sure what we + should do in this case. + + Closes: 45709 + +2016-01-22 Vladimir Serbinenko + + Error out if mtools invocation fails. + + arm64: Add support for relocations needed for linaro gcc + + efiemu: Fix compilation failure + + Document cpuid -p + +2016-01-22 Robert Elliott + + efiemu: Handle persistent RAM and unknown possible future additions. + +2016-01-22 Vladimir Serbinenko + + Document expr1 expr2 syntax for test command + +2016-01-22 Michael Chang + + Restore terminal settings on grub-emu exit. + +2016-01-22 Vladimir Serbinenko + + xen_boot: Remove obsolete module type distinctions. + + arm: Ignore qemu clock bug + + i386-ieee1275: Increase maximum heap size to accomodate highres graphi tests + +2016-01-20 Colin Watson + + Remove pragmas related to -Wunreachable-code + -Wunreachable-code has been a no-op since GCC 4.5; GRUB hasn't been + compiled with it since 2012; and GCC 6 produces "error: + '-Wunreachable-code' is not an option that controls warnings" for these. + + Fixes Debian bug #812047. + +2016-01-16 Colin Watson + + loader/bsd: Fix signed/unsigned comparison + + ahci, ehci: Fix typos + +2016-01-16 Andrei Borzenkov + + grub-probe: fix memory leak + Found by: Coverity scan. + CID: 73783 + +2016-01-16 Andrei Borzenkov + + tftp: fix memory leaks in open + If protocol open fails, file is immediately freed, so data was leaked. + + Found by: Coverity scan. + CID: 96659 + +2016-01-16 Andrei Borzenkov + + tcp: fix memory leaks + Found by: Coverity scan. + CID: 96639, 96647 + + net: fix memory leaks + Found by: Coverity scan. + CID: 96638, 96648 + + legacycfg: fix memory leaks and add NULL check + Memory leaks found by Coverity scan. + CID: 96642, 96645 + +2016-01-15 Andrei Borzenkov + + loader: Unintended sign extension + CID: 96707, 96699, 96693, 96691, 96711, 96709, 96708, 96703, 96702, + 96700, 96698, 96696, 96695, 96692, 96710, 96705 + +2016-01-12 Andrei Borzenkov + + script: fix memory leak + Found by: Coverity scan. + CID: 96637 + + normal: fix memory leak + Found by: Coverity scan. + CID: 96641, 96670, 96667 + + xnu: fix memory leak + Found by: Coverity scan. + CID: 96663 + + truecrypt: fix memory leak + Found by: Coverity scan. + CID: 156611 + + gfxmenu: fix memory leak + Found by: Coverity scan. + CID: 96657 + + efiemu: fix memory leak + Found by: Coverity scan. + CID: 156610 + + efidisk: fix memory leak + Found by: Coverity scan. + CID: 96644 + + verify: fix memory leak + Found by: Coverity scan. + CID: 96643 + + password_pbkdf2: fix memory leak + Found by: Coverity scan. + CID: 96656 + + parttool: fix memory leak + Found by: Coverity scan. + CID: 96652 + +2016-01-12 Andrei Borzenkov + + nativedisk: fix memory leak + Based on Coverity scan. + CID: 96660 + + Extended to also cover other error return places. + +2016-01-12 Andrei Borzenkov + + acpi: fix memory leak + Found by: Coverity scan. + CID: 96673 + +2016-01-10 Andrei Borzenkov + + grub-install: include ehci in list of native modules + This matches behavior of "nativedisk" command. + + Reported and tested by Smith Henry + +2016-01-10 Andrei Borzenkov + + grub-mkimage: remove redundant NULL check + Found by: Coverity scan. + CID: 73737 + +2016-01-10 Andrei Borzenkov + + net: remove dead and redundant code + server cannot be NULL at this point (we return error earlier if it is). + Also structure is zalloc'ed, so no need to explicitly initialize + members to 0. + + Found by: Coverity scan. + CID: 73837 + +2016-01-10 Andrei Borzenkov + + hostdisk: fix device detection + Condition was apparently reversed so GRUB assumed all devices were + files. This later made it skip BLKFLSBUF ioctl on Linux which caused + various page cache coherency issues. Observed were + + - failure to validate blocklist install (read content did not match + just written) + + - failure to detect Linux MD on disk after online hot addition + (GRUB got stale superblock) + + Closes: 46691 + +2016-01-09 Andrei Borzenkov + + setup: fix NULL pointer dereference + Check return value of grub_guess_root_devices + + Found by: Coverity scan. + CID: 73638, 73751 + +2016-01-09 Andrei Borzenkov + + mkimage: fix unintended sign extension + Found by: Coverity scan. + CID: 73691, 73717 + +2016-01-09 Andrei Borzenkov + + util/getroot: delete dead code + is_part cannot be non-zero at this point. + + Found by: Coveruty scan. + CID: 73838 + +2016-01-09 Andrei Borzenkov + + loader/multiboot: fix unintended sign extension + Found by: Coveruty scan. + CID: 73700, 73763 + + kern/elf: fix unintended sign extension + Found by: Coverity scan. + CID: 73729, 73735, 73758, 73760 + +2016-01-09 Andrei Borzenkov + + xfs: fix possible inode corruption in directory scan + grub_xfs_iterate_dir did not restore first character after inline + name when match was found. Dependning on XFS format this character + could be inode number and we could return to the same node later in + find_file if processing cycled symlinks. + + CID: 86724 + +2016-01-09 Andrei Borzenkov + + rescue_parser: restructure code to avoid Coverity false positive + If line contains single word, line and argv[0] are aliases, so + no NULL dereference is possible, but Coverity does not know it. + Change code to avoid ambiguity and also remove redundant call to + grub_strchr. + + CID: 86725 + +2016-01-09 Andrei Borzenkov + + grub-mklayout: check subscript bounds + Found by: Coverity scan. + CID: 73686 + + grub-probe: fix memory leak + Found by: Coverity scan. + CID: 73783 + + gfxmenu: fix memory leak + Found by: Coverity scan. + CID: 73766 + +2016-01-09 Andrei Borzenkov + + util/setup: fix grub_util_path_list leak + Add helper grub_util_free_path_list and use it where appropriate. + + Found by: Coverity scan. + CID: 73727 + +2016-01-09 Andrei Borzenkov + + setup: fix memory leak + Found by: Coverity scan. + CID: 73680, 73715 + + efiemu: check return value of grub_efiemu_write_value + Found by: Coverity scan. + CID: 73590 + + efiemu: change code to avoid Coverity false positive + CID: 73623 + + efiemu: fix unintended sign extension + Found by: Coverity scan. + CID: 73883, 73637 + + hfs: fix memory leak + Found by: Coverity scan. + CID: 156531 + + grub-module-verifier: fix unintended sign extension + Found by: Coverity scan. + CID: 156533, 156532 + +2016-01-08 Vladimir Serbinenko + + Tests: Support arm-efi + +2016-01-07 Vladimir Serbinenko + + arm64/setjmp: Add missing move for arg1 == 0 case. + + grub-shell: Support arm64-efi + +2016-01-07 Mark Salter + + arm-efi: Reduce timer event frequency by 10 + Timer event to keep grub msec counter was running at 1000HZ. This was too + fast for UEFI timer driver and resulted in a 10x slowdown in grub time + versus wallclock. Reduce the timer event frequency and increase tick + increment accordingly to keep better time. + +2016-01-07 Vladimir Serbinenko + + x86_64-efi: Automatically add -bios OVMF.fd to qemu in tests. + + Allow GRUB_QEMU_OPTS to override machine. + + arm64: Disable tests that need native drivers. + + Disable NetBSD bootcheck on EFI until it supports ACPI on EFI. + + grub-shell: Use new cbfstool syntax. + + grub-shell: On i386-ieee1275 don't try to switch to console. + console goes to serial as well, so this doesn't stop garbage from going + to serial. But it creates garbage itself. + + hddboot_test: reenable on OVMF + OVMF now supports booting from disks. + + iee1275/datetime: Fix off-by-1 error. + +2016-01-07 Vladimir Serbinenko + + Adjust bootcheck tests for multiboot/coreboot/qemu to match real support. + coreboot has ACPI while 2 others don't. *BSD need ACPI and have trouble + without it. Don't even attempt to boot *BSD on multiboot or qemu targets. + + On coreboot boot all *BSD except 32-bit NetBSD which apparently does some + early BIOS calls. + +2016-01-05 Vladimir Serbinenko + + minixfs_test: Check if mkfs.minixfs supports -B option. + + Add memdisk support to grub-emu. + Use it to add custom files, so that tests which need them work. + + Move file loading functions to grub-emu. + So that we can use it in grub-emu as well as utils. + + Disable progress indicator in grub-shell. + This disables progress indicator for tests. This in turn fixes test + flakiness as they ended up timing-dependent. + + Update checksums + +2016-01-02 Andrei Borzenkov + + acpihalt: add GRUB_ACPI_OPCODE_CREATE_DWORD_FIELD (0x8a) + Fixes ACPI halt on ASUSTeK P8B75-V, + Bios: American Megatrends v: 0414 date: 04/24/2012 + + Reported-By: Goh Lip + +2016-01-02 Andrei Borzenkov + + acpihalt: fix GRUB_DSDT_TEST compilation + +2016-01-01 Andrei Borzenkov + + Add missing BUILD_EXEEXT + +2015-12-31 Vladimir Serbinenko + + configure.ac: Reorder efiemu check to after link format check. + efiemu is supposed to be disabled when compiling through exe format. + Unfortunately format was determined only after efiemu check. Reorder to fix the + problem + +2015-12-31 Andrey Borzenkov + + remove temporary .bin files (kernel and modules) + + add dejavu built fonts to cleanfiles + +2015-12-31 Andrei Borzenkov + + Add grub-module-verifier files to EXTRA_DIST + +2015-12-31 Vladimir Serbinenko + + configure: Add -fno-unwind-tables if supported. + Unwind tables are useless for us bt consume space if present. Ensure that they + are not. + + module-verifier: allow limited-range relocations on sparc64. + clang as incomplete mcmodel=large support. As we don't currently need full + mcmodel=large support for sparc64, relax those checks. + + Disable build-time module check on emu. + On emu some checks can be laxer like check for relocation range. Additionally + module loading in emu is rarely used. So skip this check rather than making + it laxer for all platforms. In ideal we may want to have slightly different + check for emu but for now this is good enough. + + configure: Fix grub_cv_cc_fno_unwind_tables check. + Check tries -fno-dwarf2-cfi-asm but adds -fno-asynchronous-unwind-tables + to TARGET_CFLAGS. Fix this. + + Add -mno-stack-arg-probe on mingw. + This argument disables generation of calls to __chkstk_ms. Those calls are + useless on GRUB as function is dummy. Yet they increase module size and + use limited-range relocations which may not work under some memory layouts. + We currently don't use such layouts on concerned platforms but lt's correct + this. + + Strip .ARM.exidx + This section is generated by clang and is useful only for debugging. + It contains exotic relocations, so strip them to avoid them interferring + with module loading. + + module-verifier: Check range-limited relative relocations. + Check that they point to the same module, so will end up in the same + chunk of memory. + + xen/relocator: Use local symbol to ensure that code is relocation-free. + + backtrace: Fix register call syntax + + Verify modules on build-time rather than failing in runtime. + + sparc64: Fix assembly to let compiler to fill in memory references. + This fixes the use of not fully relocatable (they assume that variables are + under 4G limit in virtual memory) references. + +2015-12-30 Andrey Borzenkov + + 30_os-prober: derive --class from os-prober generated label + Currently only Windows gets distinguished icons, everything else is displayed + using the same generic one. Add additional --class based on os-prober returned + label, which usually is expected to match primary distribution name. + + Also use it for Windows as well - chainloader prober may actually return + different strings (Windows, MS-DOS, Windows9xME). + +2015-12-30 Vladimir Serbinenko + + backtrace: Remove assembly assumption that grub_backtrace_pointer is under 4G + +2015-12-30 Andrei Borzenkov + + menu: fix line count calculation for long lines + It gave one extra screen line if length was exactly equal to screen + width. + + Reported by Michael Chang. + Also-By: Michael Chang + +2015-12-29 Vladimir Serbinenko + + grub-mkrescue: Delete temporary file + Reported by: Thomas Schmitt + + grub-mount: Fix oath parsing. + Brackets detection was copied from somewhere else and makes no sense in case + of grub-mount and prevents user from accessing and files with ) in them. + + exfat: Fix stream extension flag parsing. + +2015-12-26 Andrei Borzenkov + + devmapper: check for valid device abstraction in get_grub_dev + This was lost when code was refactored. Patch restores previous behavior. + + It is still not clear whether this is the right one. Due to the way we + detect DM abstraction, partitions on DM are skipped, we fall through to + generic detection which ends up in assuming parent device is BIOS disk. + + It is useful to install GRUB on VM disk from the host. But it also means + that GRUB will mistakenly allow install on real system as well. + + For now let's fix regression; future behavior needs to be discussed. + + Closes: 45163 + +2015-12-19 Andrei Borzenkov + + windows: correct LBA in generated EFI HDD media paths + GRUB keeps partition offset and size in units of 512B sectors. Media paths + are defined in terms of LBA which are presumed to match HDD sector size. + + This is probably cosmetic (EFI requires that partition is searched by GUID) + and still incorrect if GPT was created using different logical block size. + But current code is obviously wrong and new has better chances to be correct. + +2015-12-17 Robert Elliott + + lsefimmap: support persistent memory and other UEFI 2.5 features + This should accompany + 76ce1de740 Translate UEFI persistent memory type + + 1. Add a string for the EfiPersistentMemory type 14 that was + added in UEFI 2.5. + + 2. Decode the memory attributes that were added in UEFI 2.5: + * NV (non-volatile) + * MORE_RELIABLE (higher reliable, e.g., mirrored memory in a system + with partial memory mirroring) + * RO (read-only) + + 3. Use proper IEC binary units (KiB, MiB, etc.) for power-of-two + values rather than misusing SI power-of-ten units (KB, MB, etc.) + + 4. The lsmmap command only decodes memory ranges sizes up to GiB scale + units. Persistent memory ranges will reach into the TiB scale. + Since 64-bit size field supports TiB, PiB, and EiB, decode all of + them for completeness. + + 5. In the lsefimmap command, rewrite the print statements to + * avoid rounding + * avoid a big nested if/else tree. + + For example: In the sixth entry below, the value of 309MB implies + 316416KB but is really reporting 316436KB. + + Widen the size column to 6 digits to accommodate typical cases. + The worst case value would require 14 digits; if that happens, + let the columns get out of sync. + + Old format: + Type Physical start - end #Pages Size Attributes + conv-mem 0000000000000000-0000000000092fff 00000093 588KB UC WC WT WB + reserved 0000000000093000-0000000000093fff 00000001 4KB UC WC WT WB + conv-mem 0000000000094000-000000000009ffff 0000000c 48KB UC WC WT WB + conv-mem 0000000000100000-000000000fffffff 0000ff00 255MB UC WC WT WB + BS-code 0000000010000000-0000000010048fff 00000049 292KB UC WC WT WB + conv-mem 0000000010049000-000000002354dfff 00013505 309MB UC WC WT WB + ldr-data 000000002354e000-000000003ecfffff 0001b7b2 439MB UC WC WT WB + BS-data 000000003ed00000-000000003ed7ffff 00000080 512KB UC WC WT WB + conv-mem 000000003ed80000-000000006af5ffff 0002c1e0 705MB UC WC WT WB + reserved 000000006af60000-000000006b55ffff 00000600 6MB UC WC WT WB + BS-data 000000006b560000-000000006b560fff 00000001 4KB UC WC WT WB + RT-data 000000006b561000-000000006b5e1fff 00000081 516KB RT UC WC WT WB + BS-data 000000006b5e2000-000000006ecfafff 00003719 55MB UC WC WT WB + BS-code 000000006ecfb000-000000006ecfbfff 00000001 4KB UC WC WT WB + conv-mem 000000006ecfc000-00000000711fafff 000024ff 36MB UC WC WT WB + BS-data 00000000711fb000-000000007128dfff 00000093 588KB UC WC WT WB + Unk 0d 0000000880000000-0000000e7fffffff 00600000 24GB UC WC WT WB NV + reserved 0000001680000000-0000001c7fffffff 00600000 24GB UC WC WT WB NV + + New format: + Type Physical start - end #Pages Size Attributes + conv-mem 0000000000000000-0000000000092fff 00000093 588KiB UC WC WT WB + reserved 0000000000093000-0000000000093fff 00000001 4KiB UC WC WT WB + conv-mem 0000000000094000-000000000009ffff 0000000c 48KiB UC WC WT WB + conv-mem 0000000000100000-000000000fffffff 0000ff00 255MiB UC WC WT WB + BS-code 0000000010000000-0000000010048fff 00000049 292KiB UC WC WT WB + conv-mem 0000000010049000-000000002354dfff 00013505 316436KiB UC WC WT WB + ldr-data 000000002354e000-000000003ecfffff 0001b7b2 450248KiB UC WC WT WB + BS-data 000000003ed00000-000000003ed7ffff 00000080 512KiB UC WC WT WB + conv-mem 000000003ed80000-000000006af5ffff 0002c1e0 722816KiB UC WC WT WB + reserved 000000006af60000-000000006b55ffff 00000600 6MiB UC WC WT WB + BS-data 000000006b560000-000000006b560fff 00000001 4KiB UC WC WT WB + RT-data 000000006b561000-000000006b5e1fff 00000081 516KiB RT UC WC WT WB + BS-data 000000006b5e2000-000000006ecfafff 00003719 56420KiB UC WC WT WB + BS-code 000000006ecfb000-000000006ecfbfff 00000001 4KiB UC WC WT WB + conv-mem 000000006ecfc000-0000000071222fff 00002527 38044KiB UC WC WT WB + BS-data 0000000071223000-00000000712ddfff 000000bb 748KiB UC WC WT WB + persist 0000000880000000-0000000e7fffffff 00600000 24GiB UC WC WT WB NV + reserved 0000001680000000-0000001c7fffffff 00600000 24GiB UC WC WT WB NV + +2015-12-16 Andrei Borzenkov + + kernel: print and reset grub_errno after each embedded config line + Otherwise it causes subsequent file open to fail, because grub_file_open + misinterprets set grub_errno for grub_file_get_device_name failure. + + Closes: 46540 + +2015-12-16 Andrei Borzenkov + + Erase backspaced character in grub_username_get + It probably does not work across linefeed, but hopefully user names are not + that long (and nobody is using terminal that small). + +2015-12-16 Hector Marco-Gisbert + + Fix security issue when reading username and password + This patch fixes two integer underflows at: + * grub-core/lib/crypto.c + * grub-core/normal/auth.c + + CVE-2015-8370 + + Also-By: Andrey Borzenkov + +2015-12-15 Andrei Borzenkov + + NEWS: more additions + Also-By: Robert Elliott + +2015-12-15 Robert Elliott + + Translate UEFI persistent memory type + Define + * GRUB_EFI_PERSISTENT_MEMORY (UEFI memory map type 14) per UEFI 2.5 + * GRUB_MEMORY_PERSISTENT (E820 type 7) per ACPI 3.0 + * GRUB_MEMORY_PERSISTENT_LEGACY (E820 unofficial type 12) per ACPI 3.0 + + and translate GRUB_EFI_PERSISTENT_MEMORY to GRUB_MEMORY_PERSISTENT in + grub_efi_mmap_iterate(). + + Includes + * adding the E820 names to lsmmap + * handling the E820 types in make_efi_memtype() + + Suggested-by: Vladimir 'φ-coder/phcoder' Serbinenko + Suggested-by: Andrei Borzenkov + +2015-12-14 Vladimir Serbinenko + + Document bootlocation discovery limitations and xen platform limitations + +2015-12-07 Josef Bacik + + tcp: ack when we get an OOO/lost packet + While adding tcp window scaling support I was finding that I'd get some packet + loss or reordering when transferring from large distances and grub would just + timeout. This is because we weren't ack'ing when we got our OOO packet, so the + sender didn't know it needed to retransmit anything, so eventually it would fill + the window and stop transmitting, and we'd time out. Fix this by ACK'ing when + we don't find our next sequence numbered packet. With this fix I no longer time + out. Thanks, + +2015-12-01 Michael Chang + + i386: fix TSC calibration using PIT + Condition was accidentally reversed, so PIT calibration always failed + when PIT was present and always succeeded when PIT was missing, but in + the latter case resulted in absurdly fast clock. + + Reported and tested by Vitaly Kuznetsov + +2015-11-28 Andrei Borzenkov + + Do not include generated gnulib headers in tarball + gnulib files are already handled by recursive make distdir invocation. + Including all generated headers (after make completed) causes build + failure if target system is different (different compile version etc). + +2015-11-27 Andrei Borzenkov + + Replace numbers with grub_memory_type_t enums + +2015-11-27 Andrei Borzenkov + + configure: fix macports flex version detection + Macports add extra information after version itself: + + $flex --version + flex 2.5.35 Apple(flex-31) + + We require at least felx 2.5.35 so do not need to care about prehistoric + "flex version n.n.n"; just use second field always. + + Reported by Peter Cheung + +2015-11-27 Vladimir Serbinenko + + tsc: Use alternative delay sources whenever appropriate. + PIT isn't available on some of new hardware including Hyper-V. So + use pmtimer for calibration. Moreover pmtimer calibration is faster, so + use it on coreboor where booting time is important. + + Based on patch by Michael Chang. + +2015-11-26 Andrei Borzenkov + + efi: really mark memory of unknown type as reserved + 9be4c45dbe3c877d1f4856e99ee15133c6cd2261 added switch case between + fall through cases, causing all memory regions of unknown type to be + marked as available. + + Move default case into its own block and add explicit FALLTHROUGH + annotation. + + Reported by Elliott, Robert (Persistent Memory) + +2015-11-24 Josef Bacik + + net: reset nb->data per dns record lookup loop + We were resetting nb->data every time we tried a new server, but we need to do + it every time we try for a different record, otherwise we don't end up falling + back to the A record properly. Thanks, + +2015-11-18 Andrei Borzenkov + + unix: do not close stdin in grub_passwd_get + This makes it impossible to read from stdin without controlling tty: + + 10:/mnt # echo -e passwd\\npasswd | setsid ./grub-mkpasswd-pbkdf2 + Enter password: + Reenter password: ./grub-mkpasswd-pbkdf2: error: failure to read password. + 10:/mnt + +2015-11-17 Andrei Borzenkov + + lsefisystab: add missing comma after 7994077 + +2015-11-14 Pavel Bludov + + Add some UUIDs found in the hardware + +2015-11-13 Konstantin Vlasov + + gfxterm: fix calculation of terminal-top and terminal-height + They used screen width, not height. + +2015-11-12 Paulo Flabiano Smorigo + + ofdisk: add sas disks to the device list + +2015-11-12 Vladimir Serbinenko + + multiboot: Don't rely on particular ordering of options. + + multiboot_mbi: Fix handling of --quirk-bad-kludge. + +2015-11-12 Fu Wei + + xen_boot: Remove useless file_name_index variable. + + Document ARM64 xen commands + +2015-11-11 Vladimir Serbinenko + + asm-tests/i386-pc: Check that near jumps are 2 bytes. + We already check that jump over 300 bytes gap is 3 bytes in code16-mode. + Some clang versions generate 3-byte opcode for short jumps which makes + boot.img blow over 512-byte limit. Enforce -no-integrated-as in such cases + +2015-11-11 Paulo Flabiano Smorigo + + ofdisk: add a comment about vscsi method + +2015-11-09 Vladimir Serbinenko + + fdt.mod: Move license tag to the right file. + +2015-11-09 Fu Wei + + fdt.mod: Add missing license tag. + +2015-11-09 Vladimir Serbinenko + + kern/elf: Ignore cast-align warnings + +2015-11-09 Vladimir Serbinenko + + cbfs: Fix corner case and compilation with recdent gcc + Accept the header to touch the jump address at 0xfffffff0. + + Fix compilation for 64-bit EFI with recent GCC. + +2015-11-08 Vladimir Serbinenko + + fstester: Enforce LC_ALL=C + + Adapt build-system to use imported xen headers. + + Import xen headers directly into GRUB + + cbfs: Check for ptr range sanity. + Triaged by Andrei and enhanced with suggestions by Aaron Durbin + Also-By: Andrei Borzenkov + + Remove reliance C.UTF-8 + + genmoddep.awk: Add a test that we have no circular dependencies + + Makefile.core.def: Break circular dependency on arm64. + + autogen: Use cp instead of ln -s. + libgcrypt-grub shouldn't be modified directly anyway. With this patch + tarball without contrib can be unpacked on FAT and stay usable for + out-of-tree compile on full POSIX FS (compile on FAT not tested). + +2015-11-07 Andrei Borzenkov + + partmap_test: check that parted is available + Skip test if parted is unavailable instead of returning false failure. + +2015-11-07 grub-devel@iam.tj + + cryptodisk: teach grub_cryptodisk_insert() about partitions (bug #45889) + It is not possible to configure encrypted containers on multiple partitions of + the same disk; after the first one all subsequent fail with + + disk/cryptodisk.c:978: already mounted as crypto0 + + Store partition offset in cryptomount descriptor to distinguish between them. + +2015-11-07 Andrey Borzenkov + + doc: document config_directory and config_file variables + +2015-11-07 Andrei Borzenkov + + unix/getroot: remove unused MAJOR definition + We use major() everywhere, these definitions just add to confusion. + + Add comments to code for commit d313218 + +2015-11-07 Andrei Borzenkov + + devmapper/getroot: use makedev instead of direct shift + Fixes device detection with large number of devices. + + Reported by Tim Wallberg + +2015-11-06 Andrei Borzenkov + + mkimage: zero fill alignment space + This did not cause real problem but is good for reproducible builds. I hit + it with recent bootinfoscript that displays embedded config; I was puzzled + by random garbage at the end. + + Prezero memory buffer used to assemble core.img. This makes individual + memset redundant. Also ensure buffer is filled with zeroes in several other + places. + + Also remove redundant zeroing code where we fill in the whole memory block + anyway. + +2015-11-06 Vladimir Serbinenko + + configure.ac: Explicitly add -mno-sse3 on x86. + + README: Remove dead link to the wiki + +2015-10-29 Andrei Borzenkov + + NEWS: mention powerpc64le support + +2015-10-29 Ignat Korchagin + + tcp: Fix uninited mac address when accepting connection. + +2015-10-29 Fu Wei + + arm64: Add support for xen boot protocol. + +2015-10-29 Vladimir Serbinenko + + arm64: Move FDT functions to separate module + +2015-10-27 Andrei Borzenkov + + efi: fix warnings with recent GCC + ../../grub-core/term/efi/console.c:128:32: error: suggest parentheses around '&&' within '||' [-Werror=parentheses] + if (key.unicode_char >= 0x20 && key.unicode_char <= 0x7f + +2015-10-26 Eric Snowberg + + ofdisk: Fix devpath freeing logic. + +2015-10-26 Paulo Flabiano Smorigo + + Implement cross-endian ELF load for powerpc + +2015-10-25 Peter Jones + + Use EFI_SIMPLE_TEXT_INPUT_EX to support key combinations. + +2015-10-14 Andrei Borzenkov + + configure: find options to force endian on MIPS + +2015-10-14 Andrei Borzenkov + + configure: force o32 ABI on MIPS + GRUB code expects O32 or N32. N32 is less tested than O32, so we prefer to + compile with O32. Some systems (e.g. GNU Guix) default to using newer + n64 or n32 ABI. Try to find suitable options to force o32. + + For GCC this is simply -mabi=32. While clang supports this option as well, + o32 ABI is valid for MIPS target and n32/64 ABI are valid for MIPS64 target + only, so use "-target mips/mipsel -mabi=32". + + Reported-By: Mark H Weaver + Also-By: Mark H Weaver + +2015-10-12 Andrei Borzenkov + + net: avoid closing NULL socket in DNS lookup + Refactor code so that we do not store NULL pointers in array + of in-flight DNS servers. + + Reported-By: Josef Bacik + +2015-10-11 Andrei Borzenkov + + install: --compress argument is not optional + Fixes crash if argument is not specified. Also use `|' to separate choices + in list of compression methods to align it with --core-compress. + +2015-10-11 Vladimir Serbinenko + + mips: Make setjmp code N32-compliant. + + mips: Make the assembly-code N32-compatible. + There are no $t4 or $t5 in N32 but there are $a4 and $a5. + +2015-10-10 Andrei Borzenkov + + progress: avoid NULL dereference for net files + From original patch by dann frazier : + + grub_net_fs_open() saves off a copy of the file structure it gets passed and + uses it to create a bufio structure. It then overwrites the passed in file + structure with this new bufio structure. Since file->name doesn't get set + until we return back to grub_file_open(), it means that only the bufio + structure gets a valid file->name. The "real" file's name is left + uninitialized. This leads to a crash when the progress module hook is called + on it. + + grub_net_fs_open() already saved copy of file name as ->net->name, so change + progress module to use it. + + Also, grub_file_open may leave file->name as NULL if grub_strdup fails. Check + for it. + + Also-By: dann frazier + +2015-10-10 Andrei Borzenkov + + file: ignore host disk in blocklist check + It cannot work anyway because host disk cannot be read. This fixes hostfs access + on native Windows build where filenames start with '\' or do not have initial + separator at all (d:\foo). + + Issue was observed when running grub-fstest on Windows. On UNIX image name is + canonicalized to always start with `/' so this was not noticed. + + This has side effect of allowing relative path names on host, but this already + was the case with `ls' command, so it just extends it to all commands. + + Reported-By: Arch Stack + Also-By: Arch Stack + +2015-10-09 Vladimir Serbinenko + + mips/dl: Handle addend in RELA entries. + + gfxmenu/model: Delete empty file. + +2015-10-09 Alexander Bluhm + + ufs: Fix parameters to grub_memset. + len = 0 made simply no sense. Fix parameters to be in line with read. + +2015-10-07 Stanislav Kholmanskikh + + ofnet: Do not set SUFFIX for sun4v network devices + sun4v vnet devices do not implement the support of duplex and speed + instance attributes. An attempt to open such a device with + the attributes will fail: + + ok select net:speed=auto,duplex=auto + Unknown key 'speed' + Unknown key 'duplex' + Manual Configuration: Host IP, boot server and filename must be specified + WARNING: /virtual-devices@100/channel-devices@200/network@0: Can't open OBP standard TFTP package + + Can't open device + ok + + Therefore, let's not set SUFFIX for such devices. + +2015-10-07 Eric Snowberg + + sparc64 - use correct drive name within grub_util_sparc_setup + Incorrect drive name was being passed into grub_util_sparc_setup, + causing the grub-install to fail. + +2015-09-13 Andrei Borzenkov + + cryptodisk: strip parenthesis from backing device name + Otherwise subsequent disk open fails. + + Reported-By: Klemens Nanni + +2015-08-22 Felix Zielcke + + disk/ldm, partmap/msdos.c: fix spelling error + +2015-08-13 Andrei Borzenkov + + net: do not try to load protocol module via itself + Otherwise we get infinite recursion. + + Closes: 45729 + +2015-08-09 Josef Bacik + + efinet: handle get_status() on buggy firmware properly + The EFI spec indicates that get_status() should return the address of the buffer + we passed into transmit to indicate the the buffer was transmitted. However we + have boxes where the firmware returns some arbitrary address instead, which + makes grub think that we've not sent anything. So since we have the SNP stuff + opened in exclusive mode just assume any non-NULL txbuf means that our transmit + occurred properly. This makes grub able to do its networking stuff properly on + our broken firmware. Thanks, + + cc: Peter Jones + +2015-08-09 Andrei Borzenkov + + linguas.sh: fix error when removing non-existing autogenerated files + +2015-07-28 Vladimir Serbinenko + + ahci: Ensure that bus mastering is set. + Fixes ahci_test failing on several platforms. + +2015-07-27 Vladimir Serbinenko + + archelp: Never pass NULL as mtime. + Moves complexity from fs code (NULL check) to common code (passing non-NULL). + + HFS: Convert to fshelp. + HFS doesn't handle "." and ".." properly. Convert it to fshelp to reuse the + logic. + + FAT: Convert to fshelp. + exFAT doesn't handle "." and ".." correctly, convert it to fshelp to + reuse the same logic. + + BFS: Convert to fshelp. + BFS doesn't handle ".." correctly, so convert it to fshelp to reuse the logic. + + fshelp: Add handling of "." and ".." and grub_fshelp_find_file_lookup. + Recent tests have discovered that many of our filesystems have flawed + handling of "." and "..". Rather than attempting to fix it in filesystems + themselves, make the common code fshelp aware of "." and ".." and handle + them in this layer. Add grub_fshelp_find_file_lookup for easy conversion + of BFS, HFS and exFAT which have the same problem and don't use fshelp. + + Switch procfs to use archelp. + This fixes handling of "." and "..". + + grub-install: Use a+ in fopen rather than r+. + r+ does not create a file if none exists. + + Add transform_data as a variant of data with substitutions. + This fixrs name mismatch for grub.chrp with + transform_program_name='s,grub,grub2,g' + +2015-07-24 Ignat Korchagin + + efi: fix GetVariable return status check in 81ca24a + GetVariable should return EFI_BUFFER_TOO_SMALL if given buffer of size + zero; commit incorrectly checked for EFI_SUCCESS. + +2015-07-24 Vladimir Serbinenko + + zfs_test: Skip dotdot in volume root test. + Given special semantics of ZFS it's far from clear what the expected + result is. Just skip it for now + + xfs_test: Test both crc and non-crc filesystems. + + xfs: Fix handling of symlink with crc-enabled filesystem. + + reiserfs: Fix handling of first entry in the directory. + Fixes garbage being added to "." filename. + +2015-07-23 Ignat Korchagin + + efi: fix memory leak in variable handling + +2015-07-23 Vladimir Serbinenko + + exclude.pot: Add missing blacklisted strings. + + archelp: Fix handling of dot and dotdot at the end of the name. + Fixes cpio_test and tar_test. + + arm-emu: Add __aeabi_memcpy* and __aeabi_memclr* symbols. + Fixes compilation with clang. + +2015-07-22 Vladimir Serbinenko + + fwstart: Fix loading of address of read_spd_fail. + + fwstart: Add missing argument to p2align. + Resulting binary is unchanged as it happens we were already aligned + by chance. + +2015-07-22 Vladimir Serbinenko + + fwstart: Replace blt with bltz. + blt A, $zero, B and bltz A, B are equivalent but clang recognizes only + later, so use it. + + Resulting binary is unchanged. + +2015-07-22 Vladimir Serbinenko + + Remove mips_attributes. + mips_attributes was introduced to work around clang problems with + -msoft-float. Those problems are now fixed and moreover .gnu_attributes + itself is unportable and creates problem with clang. + + Revert "mips: Fix soft-float handling." + + This partially reverts commit 6a4ecd276ed39f66be0ad6ff0f8ff67598098605. + +2015-07-22 Vladimir Serbinenko + + ARM: provide __aeabi_memclr* and __aeabi_memcpy* symbols + Fixes compilation with recent clang. + + diskfilter: Make name a const char to fix compilation error. + + dmraid_nvidia: Set a name to usable value to avoid null dereference. + Reported by: Andrei Borzenkov + + configure.ac: Handle powerpc64le compiler + Also-by: Paulo Flabiano Smorigo + +2015-07-20 Bernhard Übelacker + + loader/linux: Make trailer initrd entry aligned again. + Regression from commit: + loader/linux: do not pad initrd with zeroes at the end + a8c473288d3f0a5e17a903a5121dea1a695dda3b + + Wimboot fails since the change above because it expects the "trailer" + initrd element on an aligned address. + This issue shows only when newc_name is used and the last initrd + entry has a not aligned size. + +2015-07-16 Vladimir Serbinenko + + XFS: Fix wrong alignment treatment. + + grub_ext2_read_block: Fix return type on error. + +2015-07-05 Andrei Borzenkov + + use TARGET_LDFLAGS in grub_PROG_OBJCOPY_ABSOLUTE + That's what Makefile will use and it is required if unusual flags + must be passed to linker (e.g. to build ppc32 code on ppc64le with clang). + +2015-06-26 Michael Chang + + Fix missing byte order conversion in get_btrfs_fs_prefix function + Since btrfs on-disk format uses little-endian, the searched item types + (ROOT_REF, INODE_REF) need converting the byte order in order to + function properly on big-endian systems. + +2015-06-26 Andrei Borzenkov + + chainloader: fix resoource leak + Found by: Coverity scan. + CID: 96651 + + loader/bsd: fix memory leak + Found by: Coverity scan. + CID: 96662, 96665 + +2015-06-20 Andrei Borzenkov + + loader/bsd: free memory leaks + Found by: Coverity scan. + CID: 96671, 96658, 96653 + + search_wrap: fix memory leak + Found by: Coverity scan. + CID: 96675 + + password_pbkdf2: fix memory leak + Found by: Coverity scan. + CID: 96676 + + normal: fix memory leak + Found by: Coverity scan. + CID: 96677 + + efi/serial: fix memory leak + Found by: Coverity scan. + CID: 96678 + + ohci: fix memory leak + Found by: Coverity scan. + CID: 96679 + + loader/bsd: free memory leaks + Found by: Coverity scan. + CID: 96682 + + multiboot: fix memory leak + Found by: Coverity scan. + CID: 96684 + + normal: fix memory leak + Found by: Coverity scan. + CID: 96685 + + loader/bsd: fix memory leak + Found by: Coverity scan. + CID: 96686 + + reed_solomon: fix memory leak + Found by: Coverity scan. + CID: 96688 + + usb: fix use after free + Found by: Coverity scan. + CID: 96704 + + xnu: fix use after free + Found by: Coverity scan. + CID: 96706 + + disk/scsi: fix use after free + Found by: Coverity scan. + CID: 96713 + + efi/chainloader: fix use after free + Found by: Coverity scan. + CID: 96714 + + search: fix use after free + Found by: Coverity scan. + CID: 96715 + + NEWS: emu libusb support removed + +2015-06-19 Andrei Borzenkov + + grub-probe: fix memory leak in probe (ofpath) + Found by: Coverity scan. + CID: 73772 + +2015-06-19 Andrei Borzenkov + + grub-probe: restructure code to make static analysis easier + Current code in probe() could not be verified to not contain memory leaks. + Restructure code and ensure grub_device_close is always called at the end of + loop. + + Calms down Coverity scan. + CID: 73739 + +2015-06-19 Andrei Borzenkov + + zfs: fix memory leak + Found by: Coverity scan. + CID: 73647 + + xfs: silence Coverity overflow warning + inode size cannot really overflow integer, but Coverity does not know it. + CID: 96602 + + zfs: memory leak + Found by Coverity scan. + CID: 96603 + + unix/getroot: memory leak + Found by Coverity scan. + CID: 96605 + + unix/relpath: memory leak + Found by Coverity scan. + CID: 96606 + +2015-06-19 Andrei Borzenkov + + syslinux_parse: assorted issues found by Coverity + 1. Remove unneeded NULL check + CID: 96607 + + 2. Do not allocate storage for initrd, copy it directly from input + buffer. Avoids memory leak in failure path. + CID: 96604 + + 3. Unchecked error return from print() + CID: 96601, 73595 + +2015-06-19 Andrei Borzenkov + + syslinux_parse: make print_escaped actually stop before `to' + The only current user is mboot.c32 which unfortunately is not covered + by regression tests. + +2015-06-18 Andrei Borzenkov + + fat: fix handling of "." and ".." directory entries + Emulate dot and dotdot in root directory. For other directories do not + add separator between name and extension for these two special entries. + + Closes: 45335 + +2015-06-18 Andrei Borzenkov + + tests: regression tests for "." and ".." directory entries + +2015-06-16 Andrei Borzenkov + + efinet: enable hardware filters when opening interface + Exclusive open on SNP will close all existing protocol instances which + may disable all receive filters on interface. Reinstall them after we + opened protocol exclusively. + + Also follow UEFI specification recommendation and stop interfaces when + closing them: + + Unexpected system errors, reboots and hangs can occur if an OS is loaded + and the network devices are not Shutdown() and Stopped(). + + Also by: Mark Salter + Closes: 45204 + +2015-06-16 Andrei Borzenkov + + NEWS: mention libgcc removal + +2015-06-15 Paulo Flabiano Smorigo + + Add flag for powerpc ieee1275 to avoid unneeded optimizations + +2015-06-12 Mark Salter + + Fix exit to EFI firmware + The current code for EFI grub_exit() calls grub_efi_fini() before + returning to firmware. In the case of ARM, this leaves a timer + event running which could lead to a firmware crash. This patch + changes this so that grub_machine_fini() is called with a NORETURN + flag. This allows machine-specific shutdown to happen as well + as the shutdown done by grub_efi_fini(). + +2015-06-12 Paul Menzel + + disk/ahci.c: Use defines `GRUB_AHCI_HBA_PORT_CMD_SPIN_UP` and `GRUB_AHCI_HBA_PORT_CMD_POWER_ON` + Instead of hard coding `2` and `4` use the macros defined already at the + top of the file. As a consequence, wrap the now too long line. + +2015-06-12 Andrei Borzenkov + + NEWS: XFS v5 support + +2015-06-12 Jan Kara + + xfs: V5 filesystem format support + Add support for new XFS on disk format. We have to handle optional + filetype fields in directory entries, additional CRC, LSN, UUID entries + in some structures, etc. + + xfs: Add helpers for inode size + Add helpers to return size of XFS inode on disk and when loaded in + memory. + +2015-06-04 Toomas Soome + + multiboot_header_tag_module_align fix to confirm multiboot specification + +2015-06-02 Leif Lindholm + + configure.ac: clean up arm64 soft-float handling + Fix compilation with gcc 5.1 (avoid internal compiler error), by + replacing explicit -march +nofp+nosimd options with -mgeneral-regs-only. + + This also enables the removal of some further conditional build flag + setting. + +2015-06-01 dann frazier + + arm64/setjmp: Add missing license macro + Including the setjmp module in an arm64-efi image will cause it to + immediately exit with an "incompatible license" error. + + The source file includes a GPLv3+ boilerplate, so fix this by declaring a + GPLv3+ license using the GRUB_MOD_LICENSE macro. + +2015-05-31 Paul Menzel + + disk/ahci.c: Add port number to port debug messages + Currently, some messages cannot be mapped to the port they belong to as + the port number is missing from the output. So add `port: n` to the + debug messages. + +2015-05-30 Andrei Borzenkov + + Clarify use of superusers variable and menu entry access + superusers controls both CLI and editing. Also explicitly mention that + empty superusers disables them. + + "Access to menuentry" is a bit vague - change to "execute menuentry" + to make it obvious, what access is granted. + +2015-05-30 Paul Menzel + + Correct spelling of *scheduled* + Run the command below + + $ git grep -l schedulded | xargs sed -i 's/schedulded/scheduled/g' + + and revert the change in `ChangeLog-2015`. + + Including "miscellaneous" spelling fix noted by richardvoigt@gmail.com + +2015-05-30 Toomas Soome + + zfs extensible_dataset and large_blocks feature support + large blocks basically use extensible dataset feature, or to be exact, + setting recordsize above 128k will trigger large_block feature to be + enabled and storing such blocks is using feature extensible dataset. so + the extensible dataset is prerequisite. + + Changes implement read support extensible dataset… instead of fixed DMU + types they dont specify type, making it possible to use fat zap objects + from bonus area. + +2015-05-27 Vladimir Serbinenko + + multiboot1: never place modules in low memory. + While in theory permitted by the spec, modules rarely fit in low memory + anyway and not every kernel is able to handle modules in low memory anyway. + At least VMWare is known not to be able to handle modules at arbitrary + locations. + +2015-05-24 Paul Menzel + + disk/ahci: Use defines `GRUB_ATA_STATUS_BUSY` and `GRUB_ATA_STATUS_DRQ` + Instead of hard coding `0x88` use the macros defined in `disk/ata.h`. + +2015-05-19 Paul Menzel + + cb_timestamps.c: Add new time stamp descriptions + Add the descriptions of the “core”, that means no vendorcode or payload, + coreboot time stamps added up to coreboot commit a7d92441 (timestamps: + You can never have enough of them!) [1]. + + Running `coreboot_boottime` in the GRUB command line interface now shows + descriptions for all time stamps again on the ASRock E350M1. + + [1] http://review.coreboot.org/9608 + +2015-05-17 Andrei Borzenkov + + bootp: ignore gateway_ip (relay) field. + From RFC1542: + + The 'giaddr' field is rather poorly named. It exists to facilitate + the transfer of BOOTREQUEST messages from a client, through BOOTP + relay agents, to servers on different networks than the client. + Similarly, it facilitates the delivery of BOOTREPLY messages from the + servers, through BOOTP relay agents, back to the client. In no case + does it represent a general IP router to be used by the client. A + BOOTP client MUST set the 'giaddr' field to zero (0.0.0.0) in all + BOOTREQUEST messages it generates. + + A BOOTP client MUST NOT interpret the 'giaddr' field of a BOOTREPLY + message to be the IP address of an IP router. A BOOTP client SHOULD + completely ignore the contents of the 'giaddr' field in BOOTREPLY + messages. + + Leave code ifdef'd out for the time being in case we see regression. + + Suggested by: Rink Springer + Closes: 43396 + +2015-05-17 Andrei Borzenkov + + hostdisk: fix crash with NULL device.map + grub-macbless calls grub_util_biosdisk_init with NULL device.map. + +2015-05-14 Andrei Borzenkov + + zfs: fix integer truncation in zap_lookup + Size after shift could exceed 16 bits; use grub_unit32_t for result. + + Reported and tested by: Kostya Berger + Closes: 44448 + +2015-05-13 Andrei Borzenkov + + remove extra newlines in grub_util_* strings + grub_util_{info,warn,error} already add trailing newlines, so remove + them from format strings. Also trailing full stops are already added. + +2015-05-12 Jan Kara + + xfs: Convert inode numbers to cpu endianity immediately after reading + Currently XFS driver converted inode numbers to native endianity only + when using them to compute inode position. Although this works, it is + somewhat confusing. So convert inode numbers when reading them from disk + structures as every other field. + +2015-05-11 Jan Kara + + xfs: Fix termination loop for directory iteration + Directory iteration used wrong position (sizeof wrong structure) for + termination of iteration inside a directory block. Luckily the position + ended up being wrong by just 1 byte and directory entries are larger so + things worked out fine in practice. But fix the problem anyway. + +2015-05-08 Andrei Borzenkov + + acpi: do not skip BIOS scan if EBDA length is zero + EBDA layout is not standardized so we cannot assume first two bytes + are length. Neither is it required by ACPI standard. HP 8710W is known + to contain zeroes here. + + Closes: 45002 + +2015-05-07 Andrei Borzenkov + + Add asm-tests to tarball + +2015-05-07 Vladimir Serbinenko + + util/grub-mkrescue: Fix compilation + +2015-05-07 Andrei Borzenkov + + efinet: open Simple Network Protocol exclusively + EDK2 network stack is based on Managed Network Protocol which is layered + on top of Simple Management Protocol and does background polling. This + polling races with grub for received (and probably trasmitted) packets + which causes either serious slowdown or complete failure to load files. + + Open SNP device exclusively. This destroys all child MNP instances and + stops background polling. + + Exclusive open cannot be done when enumerating cards, as it would destroy + PXE information we need to autoconfigure interface; and it cannot be done + during autoconfiguration as we need to do it for non-PXE boot as well. So + move SNP open to card ->open method and add matching ->close to clean up. + + Based on patch from Mark Salter + + Also-By: Mark Salter + Closes: 41731 + +2015-05-07 Andrei Borzenkov + + efinet: skip virtual IPv4 and IPv6 devices when enumerating cards + EDK2 PXE driver creates two child devices - IPv4 and IPv6 - with + bound SNP instance. This means we get three cards for every physical + adapter when enumerating. Not only is this confusing, this may result + in grub ignoring packets that come in via the "wrong" card. + + Example of device hierarchy is + + Ctrl[91] PciRoot(0x0)/Pci(0x3,0x0) + Ctrl[95] PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1) + Ctrl[B4] PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/IPv4(0.0.0.0) + Ctrl[BC] PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/IPv6(0000:0000:0000:0000:0000:0000:0000:0000) + + Skip PXE created virtual devices when enumerating cards. Make sure to + find real card when applying initial autoconfiguration during PXE boot, + this information is associated with one of child devices. + +2015-05-07 Andrei Borzenkov + + efidisk: move device path helpers in core for efinet + + convert to, not from, CPU byte order in DNS receive function + +2015-05-07 Andrei Borzenkov + + loader/linux: do not pad initrd with zeroes at the end + Syslinux memdisk is using initrd image and needs to know uncompressed + size in advance. For gzip uncompressed size is at the end of compressed + stream. Grub padded each input file to 4 bytes at the end, which means + syslinux got wrong size. + + Linux initramfs loader apparently does not care about trailing alignment. + So change code to align beginning of each file instead which atomatically + gives us the correct size for single file. + + Reported-By: David Shaw + +2015-05-07 Daniel Kiper + + i386/relocator: Remove unused extern grub_relocator64_rip_addr + +2015-05-07 Vladimir Serbinenko + + grub-install-common: Increase buf size to 8192 as modinfo.sh is bigger. + +2015-05-07 Vladimir Serbinenko + + grub-mkrescue: Recognize -output as an alias of --output. + This helps us to be in line with xorriso -as mkisofs. + + Suggested by: Thomas Schmitt + +2015-05-07 Vladimir Serbinenko + + linux.c: Ensure that initrd is page-aligned. + + Revert parts accidentally committed 2 commits ago. + +2015-05-07 Fu Wei + + fdt.h: Add grub_fdt_set_reg64 macro + + arm64: Export useful functions from linux.c + +2015-05-04 Andrei Borzenkov + + Revert "efinet: memory leak on module removal" + This reverts commits 47b2bee3ef0ea60fc3f5bfc37f3784e559385297 + and 8d3c4544ffdd0289a4b0bdeb0cdc6355f801a4b3. It is not safe + to free allocated cards, dangling pointers main remain. Such + cleanup requires more changes in net core. + + efinet: cannot free const char * pointer + + efinet: memory leak on module removal + +2015-05-03 Andrei Borzenkov + + zfs: add missing NULL check and fix incorrect buffer overwrite + grub_memset should zero out padding after data end. It is not clear + why it is needed at all - ZFS block is at least 512 bytes and power + of two, so it is always multiple of 16 bytes. This grub_memset + apparently never did anything. + +2015-05-03 Toomas Soome + + zfs: com.delphix:embedded_data feature support + + zfs: com.delphix:hole_birth feature support + In the past birth was always zero for holes. This feature started + to make use of birth for holes as well, so change code to test for + valid DVA address instead. + +2015-04-29 Andrei Borzenkov + + grub-mkconfig: use $pkgdatadir in scripts + Otherwise scripts will source wrong grub-mkconfig_lib. + +2015-04-24 Vladimir Serbinenko + + Remove -V in grub-mkrescue.c + It clashhes with -V which is alias to -volid. + +2015-04-13 Toomas Soome + + getroot: include sys/mkdev.h for makedev + Solaris (like) systems need to include sys/mkdev.h for makedev() function. + +2015-04-13 Toomas Soome + + core/partmap: rename 'sun' to avoid clash with predefined symbol + the symbol “sun” is defined macro in solaris derived systems, from + gcc -dM -E: + + and therefore can not be used as name. + +2015-04-12 Paul Menzel + + docs/grub.texi: Fix spelling of cbfstool + +2015-04-06 Andrei Borzenkov + + core: avoid NULL derefrence in grub_divmod64s + It can be called with NULL for third argument. grub_divmod32* for + now are called only from within wrappers, so skip check. + + Reported-By: Michael Zimmermann + +2015-03-28 Andrei Borzenkov + + do not emit cryptomount without crypto UUID + +2015-03-28 Sarah Newman + + grub-core/loader/i386/xen.c: Initialized initrd_ctx so we don't free a random pointer from the stack. + +2015-03-27 Andrei Borzenkov + + net: trivial grub_cpu_to_XX_compile_time cleanup + +2015-03-27 Lunar + + syslinux: Support {vesa,}menu.c32. + +2015-03-27 Steve McIntyre + + Recognize EFI platform even in case of mismatch between Linux and EFI. + Some x86 systems might be capable of running a 64-bit Linux kernel but + only use a 32-bit EFI (e.g. Intel Bay Trail systems). It's useful for + grub-install to be able to recognise such systems, to set the default + x86 platform correctly. + + To allow grub-install to know the size of the firmware rather than + just the size of the kernel, there is now an extra EFI sysfs file to + describe the underlying firmware. Read that if possible, otherwise + fall back to the kernel type as before. + +2015-03-27 Michael Zimmermann + + Add missing initializers to silence suprious warnings. + +2015-03-27 Leif Lindholm + + dl_helper: Cleanup + Use the new thumb_get_instruction_word/thumb_set_instruction_word + helpers throughout. + + Style cleanup (missing spaces). + + Move Thumb MOVW/MOVT handlers into Thumb relocation section of file. + +2015-03-27 Martin Wilck + + efinet: Check for immediate completition. + This both speeds GRUB up and workarounds unexpected EFI behaviour. + +2015-03-27 Vladimir Serbinenko + + Make Makefile.util.def independent of platform. + +2015-03-27 Daniel Kahn Gillmor + + util/mkimage: Use stable timestamp when generating binaries. + +2015-03-27 Vladimir Serbinenko + + modinfo.sh.in: Add missing config variables. + + Makefile.core.def: Remove obsolete LDADD_KERNEL + + arp, icmp: Fix handling in case of oversized or invalid packets. + This restrict ARP handling to MAC and IP addresses but in practice we need + only this case anyway and other cases are very rar if exist at all. It makes + code much simpler and less error-prone. + +2015-03-23 Colin Watson + + hostfs: Drop unnecessary feature test macros + _BSD_SOURCE was added to allow the use of DT_DIR, but that was removed + in e768b77068a0b030a07576852bd0f121c9a077eb. While adding + _DEFAULT_SOURCE as well works around problems with current glibc, + neither is in fact needed nowadays. + +2015-03-20 Vladimir Serbinenko + + compiler-rt-emu: Add missing file. + + emunet: Fix init error checking. + Otherwise emunet doesn't expose any cards. + + fddboot_test: Add -no-pad to xorriso. + + grub-mkrescue: pass all unrecognized options unchanged to xorriso. + + cacheinfo: Add missing license information. + +2015-03-19 Andrei Borzenkov + + grub-fs-tester: add LVM RAID1 support + LVM miscalculates bitmap size with small extent, so start with 16K as + for other RAID types. + + Until version 2.02.103 LVM counts metadata segments twice when checking + available space, reduce segment count by one to account for this bug. + +2015-03-19 Andrei Borzenkov + + core: add LVM RAID1 support + Closes 44534. + +2015-03-16 Andrei Borzenkov + + grub-fs-tester: explicitly set segment type for LVM mirror + LVM mirror defaults to RAID1 today and can be different on different + systems as set in lvm.conf. + +2015-03-15 Andrei Borzenkov + + grub-fs-tester: better estimation of filesystem time for LVM/RAID + Write activity with LVM/RAID can happen after filesystem is unmounted. + In my testing modification time of loop files was 15 - 20 seconds + after unmount. So use time as close to unmount as possible as + reference instead. + +2015-03-06 Vladimir Serbinenko + + hfsplus: Fix potential access to uninited memory on invalid FS + +2015-03-06 Jon McCune + + autogen.sh: Allow overriding the python to be used by setting $PYTHON. + Some installations have several python versions installed. Allow user + to choose which one to use by setting $PYTHON. + +2015-03-05 Andrei Borzenkov + + update gnulib/argp-help.c to fix garbage in grub-mknetdir --help output + argp_help attempts to translate empty string, which results in printing + meta information about translation, like in + + bor@opensuse:~/build/grub> grub2-mknetdir --help + Использование: grub2-mknetdir [ПАРАМЕТР…] + Project-Id-Version: grub 2.02-pre2 + Report-Msgid-Bugs-To: bug-grub@gnu.org + ... + + Update gnulib/argp-help.c to the current version which fixes this + (commit b9bfe78424b871f5b92e5ee9e7d21ef951a6801d). + +2015-03-05 Andrey Borzenkov + + update m4/extern-inline.m4 to upstream version to fix compilation on FreeBSD + In file included from util/grub-mkimage.c:54:0: + ./grub-core/gnulib/argp.h:627:49: error: '__sbistype' is static but + used in inline function '_option_is_short' which is not static + [-Werror] cc1: all warnings being treated as errors gmake[2]: *** + [util/grub_mkimage-grub-mkimage.o] Error 1 + + Update m4/extern-inline.m4 to current upstream gnulib version that + contains fix for this (commit b9bfe78424b871f5b92e5ee9e7d21ef951a6801d). + + Reported-By: Beeblebrox + +2015-03-04 Vladimir Serbinenko + + syslinux_parse: Fix the case of unknown localboot. + Reported by: Jordan Uggla + + configure.ac: Fix the name of pciaccess header. + + Fix canonicalize_file_name clash. + canonicalize_file_name clashed with gnulib function. Additionally + it was declared in 2 places: emu/misc.h and util/misc.h. Added + grub_ prefix and removed second declaration. + +2015-03-03 Vladimir Serbinenko + + Remove emu libusb support. + It's disabled by default and has been broken for a long time. + As nobody is interested in fixing and maintaining it, remove it. + + configure.ac: Remove unused COND_clang + + Remove libgcc dependency. + libgcc for boot environment isn't always present and compatible. + libgcc is often absent if endianness or bit-size at boot is different + from running OS. + libgcc may use optimised opcodes that aren't available on boot time. + So instead of relying on libgcc shipped with the compiler, supply + the functions in GRUB directly. + Tests are present to ensure that those replacement functions behave the + way compiler expects them to. + + types.h: Use __builtin_bswap* with clang. + clang pretends to be GCC 4.2 but we use __builtin_bswap* only with GCC 4.3+. + clang support __builtin_bswap*, so use it. + + configure.ac: Set $CPPFLAGS when checking for no_app_regs. + Fixes compilation for sparc64 with clang. + + Don't continue to query block-size if disk doesn't have it. + Stops poluting screen with a lot of "block-size: exception -21". + +2015-02-28 Andrei Borzenkov + + grub-probe: free temporary variable + +2015-02-28 Vladimir Serbinenko + + exclude.pot: Add new technical strings + + grub-probe: Mark a "[default=]" for translation. + + grub-shell: Add missing --locale-directory. + Fixes the language tests is no make install was done. + + ntfs_test: Skip is setfattr is unavailable. + +2015-02-26 Vladimir Serbinenko + + emu/cache: Change declaration of __clear_cache to match builtin declaration. + Fixes compile of arm64-emu. + + arm/dl: Fix handling of nonstandard relocation sizes + + gzio: Optimize by removing division. + + raid6: Optimize by removing division. + + dmraid_nvidia: Fix division by 0 and missing byte-swap. + + crypto: restrict cipher block size to power of 2. + All current ciphers have blocks which are power of 2 and it's + unlikely to change. Other block length would be tricky to handle anyway. + This restriction allows avoiding extra divisions. + + jpeg: Optimise by replacing division with shifts. + + png: Optimize by avoiding divisions. + + Add missing lib/division.c + + fbblit: Optimize by replacing division with additions and shifts. + + bitmap_scale: Optimize by moving division out of the loop. + + minilzo: Skip parts tha we don't need. + +2015-02-23 Vladimir Serbinenko + + mips: Fix soft-float handling. + Add -msoft-float alongside clang arguments to specify ABI. + Specify ABI in asm files explicitly. + This trigers asm warning due to gcc failing to propagate -msoft-float + but it's tolerable. + + Add missing grub_ prefix in memcpy invocation + + Allow clang compilation for thumb with -mthumb-interwork. + clang already uses -mthumb-interwork behaviour even thout it doesn't + support the option. + + arm64: Fix compilation failure. + Don't supply +nosimd to asm files. + Otherwise +nosimd coming from flags forbids some of instructions + used in cache_flush. + + Supply signed division to fix ARM compilation. + Previously we supplied only unsigned divisions on platforms that need software + division. + Yet compiler may itself use a signed division. A typical example would be a + difference between 2 pointers which involves division by object size. + +2015-02-22 Vladimir Serbinenko + + acpi: Fix unused function warning. + + configure.ac: Add ia64-specific way to disable floats. + + i386/tsc: Fix unused function warning on xen. + +2015-02-22 Vladimir Serbinenko + + Experimental support for clang for sparc64. + Automatically discover command line options to make clang and + gcc behave in same way. + + Tested with qemu. + +2015-02-22 Vladimir Serbinenko + + Discover which option provides soft-float on configure stage. + Deals with clang needing other arguments to stop issuing floating + instructions than gcc. + +2015-02-21 Vladimir Serbinenko + + mips: Switch to more portable .org + Binary is unchanged. + + sparc64: Switch to more portable .org. + Binaries are unchanged. + + kernel-8086: Switch to more portable .org. + + Relax requirements on asm for non-BIOS i386 platforms. + These platforms don't have a hard limit on size of resulting code16 + code, so we don't care if assembly is bigger than necessarry. + + qemu: Switch to more portable .org + Binary is checked identical. + + qemu: Fix GateA20 enabling. + GateA20 code was inactive due to address error. + + qemu: Fix compilation + + Remove realmode.S from coreboot and qemu. + It's not used there. + + Remove obsolete ADDR32 and DATA32 checks. + + i386: Remove needless ADDR32 prefixes when address is known and fixed. + Shaves off 6 bytes in lzma_decompress.img. + + i386-pc/boot: Explicitly mark kernel_address[_high] as local. + Otherwise apple asm might try to make accesses relocatable. + + Change dot assignmnet to more portable .org. + Binary is unchanged (verified) + + i386: Move from explicit ADDR32/DATA32 prefixes to instruction suffixes. + Is more portable. + Binary is unchanged (verified). + + Test which flags make our asm compile. + Previously we relied on assumption that clang always needs -no-integrated-as + but it's not always true. + + INSTALL: clarify that clang support is experimental + + zfs/mzap_lookup: Fix argument types + + wildcard: Mark unused argument as such. + + ofdisk: Exclude floppies from scanning. + It causes similar hang as CD on at least the qemu. + + configure: Add -msoft-float to CCASFLAGS + Otherwise mismatch between API flags triggers linker failure + + mips/startup_raw: Use more portable .asciz + + Provide __aeabi_mem{cpy,set} + Fixes ARM compilation + + div_test: Don't try to divide by zero + + INSTALL: Fix names of host flags to match actual behaviour + + Strip .MIPS.abiflags which causes compile failure + +2015-02-20 Vladimir Serbinenko + + configure: Move adding of include options to the very end to avoid subshell. + + configure: Add missing comma. + +2015-02-16 Vladimir Serbinenko + + ext2: Ignore INCOMPAT_MMP. + It's not really incompatible as long as driver never writes to FS. + + ext2: Support META_BG. + This fixes bug that system would become unbootable after ext* + online resize if no resize_inode was created at ext* format time. + +2015-02-16 Andrei Borzenkov + + tests: remove hardcoded paths from syslinux_test + abs_top_srcdir appeared in Autoconf 2.52f. Minimal grub requirement + is 2.60 so we should be good here. + + build-sys: add syslinux test files to tarball + +2015-02-16 Vladimir Serbinenko + + Add test for syslinux converter + +2015-02-16 Vladimir Serbinenko + + Don't remove initrd= parameter. + Based on simplified patch by Lunar. + + Reported by: Lunar + +2015-02-16 Vladimir Serbinenko + + syslinux_parse: Always output comments even if no entries are found. + +2015-02-15 Andrei Borzenkov + + diskfilter_make_raid: more memory leaks in failure path + +2015-02-14 Vladimir Serbinenko + + disk/lvm: Use zalloc to ensure that segments are initialised to sane value. + Reported by: EmanueL Czirai. + +2015-02-14 Daniel Kiper + + multiboot2: Fix information request tag size calculation + +2015-02-14 Andrei Borzenkov + + diskfilter: fix double free of lv names for mdraid + Avoid micro-optimization in grub_diskfilter_make_raid and make sure + name and fullname are independent strings. This avoids need to special + case it everywhere else. + + Also fix memory leak in failure case in grub_diskfilter_make_raid. + + Closes: 41582 + +2015-02-14 Andrei Borzenkov + + diskfilter: fix crash in validate_lv for mdraid arrays + Commit 750f4bacd3262376ced3f837d8dc78f834ca233a put LV validation before + actual vg assignment. Make grub_diskfilter_make_raid to assign ->vg as + happens in other cases for consistency. Also clean up redundant code and add + explicit NULL lv->vg check in validate_lv. + + Also fix segment validation in validate_lv; it became obvious when crash + was fixed. + + Closes: 44199 + +2015-02-12 Jiri Slaby + + util: mkimage, fix gcc5 build failure + gcc5 reports: + ../util/mkimage.c: In function 'grub_install_get_image_target': + ../util/mkimage.c:954:5: error: loop exit may only be reached after undefined behavior [-Werror=aggressive-loop-optimizations] + && j < ARRAY_SIZE (image_targets[i].names); j++) + ^ + ../util/mkimage.c:953:39: note: possible undefined statement is here + for (j = 0; image_targets[i].names[j] + ^ + + Well, let's move the index 'j' test before accesing the array to: + 1) make the loop obvious + 2) make gcc happy + +2015-02-03 Leif Lindholm + + arm: implement additional relocations generated by gcc 4.9 at -O3 + GCC 4.9 also generates R_ARM_THM_MOVW_ABS_NC and R_ARM_THM_MOVT_ABS, + as an alternative to ABS32. + +2015-01-30 Andrei Borzenkov + + setup: fix blocklist size calculation + Found by: Coverity scan. + + grub-fstest: fix descriptor leak + Found by: Coverity scan. + +2015-01-30 Andrei Borzenkov + + net/pxe: fix error condition + Test return value of grub_netbuff_reserve(), buf itself cannot be + NULL here. + + Found by: Coverity scan. + +2015-01-30 Andrei Borzenkov + + grub-mkimage: fix potential NULL pointer dereference + Move fatal check whether symtab_section is NULL before first reference. + + Found by: Coverity scan. + +2015-01-30 Andrei Borzenkov + + net/ip: check result of grub_netbuff_push + Found by: Coverity scan. + + tests: add test command file tests + This requires access to files in both host and grub image, so + implementing as separate test unit instead of script test was + more easy. + + test: consistently use TMPDIR and same name pattern for temp files + + test: fix previous commit - we need to return from subexpression + ( ... ) was processed recursively, we need to return from it. Revert + this change. + + test: do not stop after first file test or closing bracket + Closes: 44115 + +2015-01-28 Leif Lindholm + + configure.ac: don't use -msoft-float for arm64 + aarch64 toolchains do not support the -msoft-float option added by + commit 3661261f. Insted, for arm64 use -march=armv8-a+nofp+nosimd. + + Reported-by: Ryan Harkin + +2015-01-28 Andrei Borzenkov + + script/execute.c: fix memory leak. + Make sure to continue loop over array after failure to free + allocated strings. + + Found by: Coverity scan. + +2015-01-28 Andrei Borzenkov + + syslinux_parse: fix memory leak. + Found by: Coverity scan. + +2015-01-27 Andrei Borzenkov + + Change quotes to match overall style in NEWS + + loader/xnu: fix memory leak. + Foound by: Coverity scan. + + util/grub-probe: fix memory leaks. + Found by: Coverity scan. + + fs/hfsplus: fix memory leak. + Found by: Coverity scan. + + fs/zfs/zfscrypt.c: fix indentation. + + fs/zfs/zfscrypt.c: fix memory leaks. + Found by: Coverity scan. + + commands/parttool: fix memory leak. + Found by: Coverity scan. + + fs/zfs/zfs.c: fix memory leak. + Found by: Coverity scan. + + linux/ofpath: fix descriptor leak + Found by: Coverity scan + + linux/hostdisk: use strncpy instead of strlcpy + strlcpy is not available on Linux as part of standard libraries. + It probably is not worth extra configure checks espicially as we + need to handle missing function anyway. + +2015-01-27 Vladimir Serbinenko + + Document intentional fallthroughs. + Found by: Coverity scan. + + linux/ofpath: Fix error handling. + Found by: Coverity Scan. + + linux/hostdisk: Limit strcpy size to buffer size. + Found by: Coverity scan. + + fs/zfscrypt: Add missing explicit cast. + Found by: Coverity scan. + + fs/zfs: Fix error handling. + Found by: Coverity Scan. + +2015-01-27 Vladimir Serbinenko + + fs/{cbfs,cpio}: Remove useless check if mode is NULL. + Callers already ensure that it's not null. + + Found by: Coverity Scan. + +2015-01-27 Vladimir Serbinenko + + commands/acpi: Use ALIGN_UP rather than manual expression. + Improves readability and hopefully automatic scanning. + + Found by: Coverity Scan. + +2015-01-26 Andrei Borzenkov + + util/setup: fix memory leak. + Found by: Coverity scan. + + util/mkimage: fix memory leaks. + Found by: Coverity scan. + + util/grub-mount: fix descriptor leak. + Found by: Coverity scan. + + util/grub-mkstandalone: fix memory leak. + Found by: Coverity scan. + + util/grub-install: rearrange code to avoid memory leak. + Found by: Coverity scan. + + linux/getroot: fix memory leak. + Found by: Coverity scan. + + util/install: fix memory leak. + Found by: Coverity scan. + + util/setup: fix memory leak. + Found by: Coverity scan. + + linux/ofpath: fix various memory leaks. + Found by: Coverity scan. + + linux/getroot: fix descriptor leak. + Found by: Coverity scan. + +2015-01-26 Vladimir Serbinenko + + util/misc.c: Check ftello return value. + Found by: Coverity scan. + + grub-macbless: Fix resource leak. + Found by: Coverity scan. + + grub-install: Fix memory leak. + Found by: Coverity scan. + + grub-install-common: Fix sizeof usage. + Found by: Coverity scan. + + util/getroot: Add missing grub_disk_close. + Found by: Coverity scan. + + vbe: Fix incorrect register usage. + Found by: Coverity scan. + + unix/password: Fix file descriptor leak. + Found by: Coverity scan. + + linux/getroot: Fix error handling. + Found by: Coverity scan. + + linux/blocklist: Fix memory leak. + Found by: Coverity scan. + + devmapper/getroot: Fix memory leak. + Found by: Coverity scan. + + normal/misc: Close device on all pathes. + Found by: Coverity scan. + + normal/main: Fix error handling. + Found by: Coverity scan. + + xnu: Add missing error check. + Found by: Coveriy scan. + + plan9: Add missing grub_device_close. + Found by: Coverity scan. + + multiboot: Simplify to avoid confusing assignment. + Found by: Coverity scan. + + bsd: Add missing null-pointer check. + Found by: Coverity scan. + + lib/syslinux_parse: Add missing error check. + Found by: Coverity scan. + + lib/syslinux_parse: Fix memory leak. + Found by: Coveriy scan. + + lib/syslinux_parse: Add missing alloc check. + Found by: Coverity scan. + + i386/pc/mmap: Fix memset size. + Found by: Coverity scan. + + gfxmenu/theme_loader: Add missing allos error check. + Found by: Coverity scan. + + gfxmenu/icon_manager: Fix null pointer dereference. + Found by: Coverity scan. + + fs/ufs: Add missing error check. + Found by: Coverity scan. + + configure.ac: Always add -D_FILE_OFFSET_BITS=64. + +2015-01-25 Vladimir Serbinenko + + fs/sfs: Fix error check and add sanity check. + Found by: Coverity scan. + + fs/reiserfs: Fix sector count overflow. + Found by: Coverity scan. + + fs/ntfs: Add sizes sanity checks. + Found by: Coverity scan. + + fs/ntfs: Add missing free. + Found by: Coverity scan. + +2015-01-25 Vladimir Serbinenko + + fs/minix: Fix sector promotion to 64-bit. + While on it make GRUB_MINIX_ZONE2SECT into function. + + Found by: Coverity scan + +2015-01-25 Vladimir Serbinenko + + grub_iso9660_read: Explicitly check read_node return value. + Not really needed as grub_errno is already checked but is nicer. + + Found by: Coverity scan. + +2015-01-25 Andrei Borzenkov + + commands/fileXX: Fix remaining memory leak. + Found by: Coverity Scan. + +2015-01-25 Vladimir Serbinenko + + fs/hfs: Add pointer sanity checks. + Found by: Coverity scan. + + fs/hfs/hfs_open: Check that mount succeeded. + Found by: Coverity scan. + + fs/fat: Fix codepath to properly free on error. + Found by: Coverity scan. + + fs/cpio_common: Add a sanity check on namesize. + Found by: Coverity scan. + + fs/cbfs: Add missing free. + Found by: Coverity scan. + +2015-01-24 Vladimir Serbinenko + + font: Add missing free. + Found by: Coverity Scan. + + biosdisk: Add missing cast. + Found by: Coverity scan. + + disk/geli: Add missing free. + Found by: Coverity scan. + + disk/geli: Add missing seek success check. + Found by: Coverity scan. + + disk/diskfilter: Add missing lv presence check. + Found by: Coverity scan. + + disk/cryptodisk: Add missing error check. + Found by: Coverity scan. + +2015-01-24 Vladimir Serbinenko + + disk/ahci: Fix device_map_range argument. + Argument is not used on x86, hence it's gone unnoticed. + + Found by: Coverity scan. + +2015-01-24 Vladimir Serbinenko + + disk/AFsplitter: check argument validity before doing any allocs. + This avoids possible memory leaks. + + Found by: Coverity scan. + +2015-01-24 Vladimir Serbinenko + + commands/wildcard: Add missing free. + Found by: Coverity scan. + + commands/verify: Fix sha1 context zeroing-out. + Current code doesn't zero-out context completely. It's a minor issue + really as sha1 init already takes care of initing the context. + + commands/tr: Simplify and fix missing parameter test. + Found by: Coverity scan + + commands/syslinux: Add missing free. + Found by: Coverity scan. + + commands/parttool: Add missing device close. + Found by: Coverity scan. + + commands/nativedisk: Add missing device_close. + Found by: Coverity scan. + +2015-01-24 Vladimir Serbinenko + + commands/macbless: Handle device opening errors correctly. + Wrong variable was checked for errors. + + Found by: Coverity scan. + +2015-01-24 Vladimir Serbinenko + + commands/macbless: Fix potential overflow. + Is a minor concern as no such FS would be created under normal circumstances + and failure was benign. + + Found by: Coverity scan. + +2015-01-24 Vladimir Serbinenko + + commands/macbless: Remove incorrect grub_free. + Found by: Coverity Scan + + commands/legacycfg: Fix resource leaks. + + zfs: Fix disk-matching logic. + Reported by: Tim Chase + + commands/hdparm: Add missing grub_disk_close. + Found by: Coverity scan. + + gptsync: Add missing device_close. + Found by: Coverity scan + + commands/fileXX: Fix memory leak. + Found by: Coverity Scan. + +2015-01-24 Vladimir Serbinenko + + commands/file: Change the confusing loop stop condition. + Old condition was used to zero-out header variable on exit of the loop. + This is correct but confusing. Replace with in-loop logic. + + Found by: Coverity Scan. + +2015-01-24 Vladimir Serbinenko + + commands/acpi: Use ALIGN_UP rather than manual expression. + Improves readability and hopefully automatic scanning. + + Found by: Coverity Scan. + +2015-01-24 Vladimir Serbinenko + + uhci: Fix null pointer dereference. + Found by: Coverity scan. + + Always add -msoft-float to avoid compiler generating float arithmetics. + +2015-01-24 Vladimir Serbinenko + + Generate empty ChangeLog if no .git is available. + When making dist from a git snapshot without repo available make dist would + fail to find ChangeLog. Generate empty ChangeLog if no ChangeLog is already + present and repo is not available. + + Reported by: Andrei Borzenkov + +2015-01-24 Vladimir Serbinenko + + Makefile.am: Fix Changelog cutoff address. + gitlog-to-changelog Doesn't generate entries for cutoff day, only + for days after the cutoff date, adjust by one to compensate. + + efidisk: Return the determined root disk even if partition is unknown. + + util/grub-mkrescue.c: Always include part_msdos and part_gpt on EFI. + When booted from stick, EFI would use GPT partition and our root + device detection algortihm depends on GRUB's ability to see the same + partitions. Hence include msdos and gpt partmap modules on EFI even when + they're not needed to access root filesystem. + + conf/Makefile.common: Remove unused {LD,C}FLAGS_CPU. + + Autogenerate ChangeLog from git changelog. + Old ChangeLog is moved to ChangeLog-2015. For all changes starting from + this one ChangeLog will be generated from gitlog only on explicit make + invocation and make dist. + +2015-01-23 Vladimir Serbinenko + + * tests/file_filter/file: Really add missing file. + +2015-01-23 Andrei Borzenkov + + Mention platform "none" in NEWS + +2015-01-23 Andrey Borzenkov + + accept also hdX as alias to native Xen disk name + To be compatible with legacy pv-grub, sort disks by increasing order of handle + value. This allows reusing legacy pv-grub menu.lst which is using hdX names. + + Suggested-By: Michael Chang + Closes: 44026 diff --git a/ChangeLog-2015 b/ChangeLog-2015 new file mode 100644 index 000000000..869f6bfb8 --- /dev/null +++ b/ChangeLog-2015 @@ -0,0 +1,55487 @@ +2015-01-23 Vladimir Serbinenko + + * tests/file_filter/file: Really add missing file. + +2015-01-23 Andrei Borzenkov + + * grub-core/disk/xen/xendisk.c: Accept hdX as disk names on Xen to + allow legacy menu.lst processing. + +2015-01-22 Felix Janda + + Remove direct _llseek code and require long filesystem libc. + +2015-01-20 Vladimir Serbinenko + + Remove potential division by 0 in gfxmenu. + +2015-01-20 Vladimir Serbinenko + + * grub-core/normal/menu_text.c (grub_menu_init_page): Avoid + returning 0 geometry to avoid divisions by 0. + +2015-01-20 Vladimir Serbinenko + + * grub-core/osdep/unix/cputime.c (grub_util_get_cpu_time_ms): Cache + sc_clk_tck and check it for sanity. + +2015-01-20 Vladimir Serbinenko + + * grub-core/kern/efi/mm.c (grub_efi_get_memory_map): Never return a + descriptor_size==0 to avoid potential divisions by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/osdep/haiku/getroot.c (grub_util_find_partition_start_os): + Avoid division by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/kern/generic/rtc_get_time_ms.c (grub_rtc_get_time_ms): Avoid + division by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/loader/i386/xnu.c (guessfsb): Avoid division by 0. + +2015-01-20 Vladimir Serbinenko + + * grub-core/kern/i386/tsc.c (calibrate_tsc): Ensure that + no division by 0 occurs. + +2015-01-20 Vladimir Serbinenko + + * include/grub/misc.h (grub_div_roundup): Remove as it's unused. + +2015-01-20 Vladimir Serbinenko + + * grub-core/term/gfxterm.c: Avoid division by zero. + +2015-01-20 Vladimir Serbinenko + + Avoid division by zero in serial. + + * grub-core/term/serial.c (grub_cmd_serial): Ensure speed is not 0. + * grub-core/term/ns8250.c (serial_get_divisor): Exit if speed is 0. + +2015-01-20 Vladimir Serbinenko + + * grub-core/video/readers/jpeg.c: Avoid sivision by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c: Validate volumes to avoid division + by zero. + +2015-01-20 Vladimir Serbinenko + + * include/grub/term.h: Avoid returining 0-sized terminal + as it may lead to division by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/zfs.c: Avoid divisions by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/btrfs.c: Avoid divisions by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/lib/pbkdf2.c (grub_crypto_pbkdf2): Check that hash len is not 0. + +2015-01-20 Vladimir Serbinenko + + * grub-core/osdep/linux/blocklist.c (grub_install_get_blocklist): Check + blocksize validity. + +2015-01-20 Vladimir Serbinenko + + * grub-core/disk/i386/pc/biosdisk.c: Check disk size sanity. + +2015-01-20 Vladimir Serbinenko + + * grub-core/disk/ieee1275/nand.c (grub_nand_open): Check block size + validity. + +2015-01-20 Vladimir Serbinenko + + * grub-core/disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Do not + divide by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/hfs.c (grub_hfs_mount): Additional filesystem + sanity checks. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/minix.c: Additional filesystem + sanity checks. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/ext2.c (grub_ext2_mount): Additional + checks for superblock validity. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_mount): Check + that sblock.ino_per_group is not 0. + +2015-01-20 Vladimir Serbinenko + + Reject NILFS2 superblocks with over 1GiB blocks. + + * grub-core/fs/nilfs2.c (grub_nilfs2_valid_sb): Check that + block size is <= 1GiB. + +2015-01-20 Vladimir Serbinenko + + * grub-core/disk/ata.c (grub_ata_setaddress): Check that geometry + is sane when using CHS addressing. + +2015-01-20 Vladimir Serbinenko + + * grub-core/disk/AFSplitter.c (AF_merge): Check that mdlen is not 0. + +2015-01-20 Vladimir Serbinenko + + * grub-core/commands/i386/pc/play.c (grub_cmd_play): Avoid + division by zero. + +2015-01-20 Vladimir Serbinenko + + * grub-core/bus/usb/usbtrans.c (grub_usb_bulk_maxpacket): Avoid + potentially returning 0. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/minix.c (grub_minix_read_file): Avoid reading past + the end of file. + +2015-01-20 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (grub_fshelp_read_file): Don't attempt to read + past the end of file. + +2015-01-20 Vladimir Serbinenko + + * grub-core/script/lexer.c (grub_script_lexer_yywrap): Update len + synchronously with line. + +2015-01-20 Vladimir Serbinenko + + Replace explicit sizeof divisions by ARRAY_SIZE. + +2015-01-19 Kris Moore + + * grub-core/disk/geli.c: Support GELI v6 and v7. + +2014-12-09 Andrei Borzenkov + + * grub-core/term/serial.c (grub_cmd_serial): Fix --rtscts + option processing. + +2014-12-07 David Kozub + + * grub-core/kern/arm/misc.S: fix unaligned 64bit local variable + in __aeabi_uidivmod + Fixes Savannah bug #43632. + +2014-12-07 Peter Nelson + + * grub-core/fs/ext2.c (grub_ext2_read_block): Support large sparse + chunks. + +2014-12-07 Andrei Borzenkov + + * util/grub-mkconfig_lib.in (version_test_gt): Remove redundant + non-portable '-n' echo option. + * util/grub.d/10_kfreebsd.in: Change how list is built to avoid + non-portable 'echo -n. + * util/grub.d/10_linux.in: Likewise (closes 43668). + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Print spaces directly to avoid + non-portable 'echo -n'. + +2014-12-07 Curtis Larsen + + * grub-core/net/tcp.c (grub_net_recv_tcp_packet): Fix double + free when multiple empty segments were received (closes 42765). + +2014-12-05 Andrei Borzenkov + + * tests/util/grub-shell.in: Support --files also for netboot. + * tests/file_filter_test.in: New file with file filters tests. + * Makefile.util.def: Add file_filter_test. + * conf/Makefile.extra-dist: ... and here. + * tests/file_filter/file.gz: Test file for file_filter_test. + * tests/file_filter/file.gz.sig: Likewise. + * tests/file_filter/file.lzop: Likewise. + * tests/file_filter/file.lzop.sig: Likewise. + * tests/file_filter/file.xz: Likewise. + * tests/file_filter/file.xz.sig: Likewise. + * tests/file_filter/keys: Likewise. + * tests/file_filter/keys.pub: Likewise. + * tests/file_filter/test.cfg: Likewise. + * grub-core/commands/verify.c: Fix memory corruption doing + signature check for network files (closes 43601). + +2014-12-01 Andrei Borzenkov + + * grub-core/loader/i386/xen_fileXX.c (grub_xen_get_infoXX): Fix + memory leak (CID 73645, 73782). + * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix memory leak + (CID 73635). + +2014-11-30 Andrei Borzenkov + + * grub-core/lib/syslinux_parse.c (free_menu): Do not free + inline array (CID 73610). + +2014-11-28 Andrei Borzenkov + + * grub-core/io/lzopio.c (test_header): Fix double free (CID 73665) + * grub-core/disk/geli.c (configure_ciphers): Fix memory leaks + (Coverity CID 73813, 73710) + * grub-core/disk/luks.c (configure_ciphers): Fix memory leaks + and use after free (Coverity CID 73813, 73710, 73730) + * grub-core/disk/luks.c (luks_recover_key): Fix memory leak (Coverity + CID 73854) + * util/grub-install-common.c (grub_install_get_target): Check return + value of grub_util_fd_read (Coverity CID 73819). + * util/grub-mkstandalone.c (add_tar_file): Fix out of bound access + to hd.magic (Coverity CID 73587, 73888, bug 43690). + +2014-11-20 Andrei Borzenkov + + * tests/util/grub-fs-tester.in: Consistently print output + of grub ls if test fails. + +2014-11-07 Leif Lindholm + + * grub-core/kern/efi/init.c: check value of *path before + dereferencing. + +2014-11-03 Michael Chang + + * grub-core/net/icmp6.c (grub_net_recv_icmp6_packet): Fix size + of neighbor solicitation packet in grub_netbuff_pull. + +2014-10-14 Andrei Borzenkov + + * grub-core/loader/arm/linux.c: Use full initializer for initrd_ctx to + avoid fatal warnings with older gcc (probably before 4.7). + * grub-core/loader/arm64/linux.c: Likewise. + * grub-core/loader/i386/linux.c: Likewise. + * grub-core/loader/i386/pc/linux.c: Likewise. + * grub-core/loader/ia64/efi/linux.c: Likewise. + * grub-core/loader/mips/linux.c: Likewise. + * grub-core/loader/powerpc/ieee1275/linux.c: Likewise. + * grub-core/loader/sparc64/ieee1275/linux.c: Likewise. + +2014-09-25 Colin Watson + + Fix in-tree --platform=none + + * configure.ac: Only remove include/grub/cpu and + include/grub/machine in the --platform=none case, not all of + include/grub. + +2014-09-23 Colin Watson + + Add a new "none" platform that only builds utilities + + * configure.ac: Add "none" platform. Default to it for unsupported + CPUs rather than stopping with a fatal error. Don't downgrade + x86_64-none to i386. Define COND_real_platform Automake conditional + if the platform is anything other than "none". Don't do any include + directory linking for "none". + * Makefile.am: Skip building grub-core and all bootcheck targets if + !COND_real_platform. + * include/grub/time.h: Don't include if GRUB_UTIL + is defined. + +2014-09-22 Andrei Borzenkov + + Use grub_cpu_to_XXX_compile_time for constants. + +2014-09-21 Valentin Dornauer + + The AML parser implements only a small subset of possible AML + opcodes. On the Fujitsu Lifebook E744 this and another bug in + the parser (incorrect handling of TermArg data types) would lead + to the laptop not turning off (_S5 not found). + + * grub-core/commands/acpihalt.c: Support OpAlias in the AML parser; + in skip_ext_op(), handle some Type2Opcodes more correctly (TermArgs + aren't always simply strings!); Add function to skip TermArgs + * include/grub/acpi.h: Add new opcodes + +2014-09-21 Vladimir Serbinenko + + * grub-core/normal/main.c: Don't drop to rescue console in + case of password-protected prompt and no menu entries. + +2014-09-21 Vladimir Serbinenko + + * grub-core/commands/keylayouts.c: Ignore unknown keys. + +2014-09-21 Vladimir Serbinenko + + * grub-core/gmodule.pl.in: Accept newer binutils which output + empty column rather than 0x0. + +2014-09-21 Michael Chang + + * grub-core/osdep/unix/config.c: Remove extraneous comma. + +2014-09-21 Peter Jones + + * grub-core/loader/arm/linux.c: Initialized initrd_ctx so + we don't free a random pointer from the stack. + * grub-core/loader/arm64/linux.c: Likewise. + * grub-core/loader/i386/linux.c: Likewise. + * grub-core/loader/i386/pc/linux.c: Likewise. + * grub-core/loader/ia64/efi/linux.c: Likewise. + * grub-core/loader/mips/linux.c: Likewise. + * grub-core/loader/powerpc/ieee1275/linux.c: Likewise. + * grub-core/loader/sparc64/ieee1275/linux.c: Likewise. + +2014-09-15 Khem Raj + + * grub-core/kern/emu/hostfs.c: use _DEFAULT_SOURCE in addition to + _BSD_SOURCE to avoid warnings under glibc 2.20+. + +2014-09-08 Michael Chang + + * grub-core/fs/btrfs.c (grub_btrfs_extent_read): Fix extent size + check; comparing &data->extent against addresses in the region it + points to is unpredictable. + +2014-09-07 Colin Watson + + Support grub-emu on x32 (ILP32 but with x86-64 instruction set) + + * configure.ac: Remove -m64 from checks for -mcmodel=large and + -mno-red-zone. These are always either unnecessary (x86_64-emu) or + already in TARGET_CFLAGS at this point, and they produce incorrect + results when building for x32. + * grub-core/kern/x86_64/dl.c (grub_arch_dl_relocate_symbols): Cast + pointers to Elf64_Xword via grub_addr_t, in order to work on x32. + * include/grub/x86_64/types.h (GRUB_TARGET_SIZEOF_VOID_P, + GRUB_TARGET_SIZEOF_LONG): Define to 4 on x32. + +2014-09-07 Colin Watson + + * configure.ac: Remove several unnecessary semicolons. + +2014-08-25 Colin Watson + + * grub-core/kern/mips/arc/init.c (grub_machine_get_bootlocation): + Initialise pend to pacify GCC. + +2014-08-14 Andrey Borzenkov + + * util/grub-mkconfig.in: Fix typo (gettext_print instead of + gettext_printf). + +2014-08-13 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c: Retry probing keyboard if + scancode setup failed. + +2014-08-10 Vladimir Serbinenko + + * grub-core/kern/disk_common.c: Clump disk size to 1EiB. + +2014-08-10 Vladimir Serbinenko + + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_rw): Add + safety to avoid triggerring VirtualBox bug. + +2014-08-10 Vladimir Serbinenko + + * grub-core/fs/cbfs.c: Don't probe disks of unknow size. + + Fixes hang on virtualbox. + +2014-07-08 Colin Watson + + * util/grub.d/10_hurd.in: Make kernel list progression not fail on + kernels whose paths contain regex metacharacters. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + + Reported by: Heimo Stranner. + +2014-06-26 Colin Watson + + * docs/grub-dev.texi (Finding your way around): The build system no + longer uses AutoGen directly. + +2014-06-21 Роман Пехов + + * grub-core/commands/loadenv.c (check_blocklists): Fix overlap check. + +2014-06-21 Glenn Washburn + + * util/grub-install.c: Fix handling of --disk-module. + +2014-06-21 Stephane Rochoy + + * grub-core/loader/i386/bsd.c (grub_netbsd_boot): Pass pointer to + EFI system table. + +2014-06-21 Stephane Rochoy + + * grub-core/commands/efi/lsefisystab.c (grub_cmd_lsefisystab): Show + EFI system table physical address. + +2014-06-21 Trevor Woerner + + * util/grub-gen-asciih.c (add_glyph): Fix uninitialised variable. + +2014-06-21 Vladimir Serbinenko + + * grub-core/commands/verify.c (grub_pubkey_open): Trust procfs. + +2014-06-21 Vladimir Serbinenko + + * grub-core/commands/verify.c (grub_pubkey_open): Fix memdisk + check. + +2014-04-20 Vladimir Serbinenko + + * grub-core/kern/misc.c (__bzero): Don't compile in GRUB_UTIL. + + Reported by: Yves Blusseau . + +2014-04-20 Piotr Krysiuk + + * grub-core/lib/i386/relocator.c: Allow loading old kernels by placing + GDT in conventional memory. + +2014-04-10 Colin Watson + + * util/grub.d/30_os-prober.in: Tolerate devices with no filesystem + UUID. Other parts of grub-mkconfig tolerate these, they were + previously allowed here up to commit + 55e706c918922def17f5012c23cfe88c4c645208, and they can arise in + practice when the system has active LVM snapshots. + Fixes Ubuntu bug #1287436. + +2014-04-10 Colin Watson + + * grub-core/disk/lvm.c (grub_lvm_detect): Search for + "logical_volumes" block a little more accurately. + +2014-04-06 Vladimir Serbinenko + + * grub-core/lib/syslinux_parse.c: Fix timeout quoting. + +2014-04-04 Vladimir Serbinenko + + * include/grub/libgcc.h: Remove ctzsi2 and ctzdi2. They're no longer + pulled from libgcc. + +2014-04-04 Vladimir Serbinenko + + Replace few instances of memcmp/memcpy in the code that should be + grub_memcmp/grub_memcpy. + +2014-04-03 Vladimir Serbinenko + + * grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Support NVMe + device names. + +2014-03-31 Thomas Falcon + + btrfs: fix get_root key comparison failures due to endianness + + * grub-core/fs/btrfs.c (get_root): Convert + GRUB_BTRFS_ROOT_VOL_OBJECTID to little-endian. + +2014-03-31 Colin Watson + + Fix partmap, cryptodisk, and abstraction handling in grub-mkconfig. + + Commit 588744d0dc655177d5883bdcb8f72ff5160109ed caused grub-mkconfig + no longer to be forgiving of trailing spaces on grub-probe output + lines, which among other things means that util/grub.d/10_linux.in + no longer detects LVM. To fix this, make grub-probe's output + delimiting more consistent. As a bonus, this improves the coverage + of the -0 option. + + Fixes Debian bug #735935. + + * grub-core/disk/cryptodisk.c + (grub_util_cryptodisk_get_abstraction): Add a user-data argument. + * grub-core/disk/diskfilter.c (grub_diskfilter_get_partmap): + Likewise. + * include/grub/cryptodisk.h (grub_util_cryptodisk_get_abstraction): + Update prototype. + * include/grub/diskfilter.h (grub_diskfilter_get_partmap): Likewise. + * util/grub-install.c (push_partmap_module, push_cryptodisk_module, + probe_mods): Adjust for extra user-data arguments. + * util/grub-probe.c (do_print, probe_partmap, probe_cryptodisk_uuid, + probe_abstraction): Use configured delimiter. Update callers. + +2014-03-31 Colin Watson + + * util/grub-probe,c (options): Make -0 work again (broken by + conversion to argp). + (main): Simplify logic. + +2014-03-26 Vladimir Serbinenko + + * grub-core/lib/relocator.c: Fix the case when end of leftover is used. + +2014-03-26 Fu Wei + + * grub-core/loader/arm64/linux.c: Remove redundant "0x". + +2014-02-28 Vladimir Serbinenko + + * include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields. + * grub-core/loader/i386/bsd.c (grub_cmd_openbsd): Fill addr field. + + Suggested by: Markus Müller. + +2014-02-28 Vladimir Serbinenko + + * grub-core/kern/i386/pc/mmap.c: Fallback to EISA memory map + if E820 failed to return any regions. + +2014-02-28 Vladimir Serbinenko + + * grub-core/mmap/i386/uppermem.c (lower_hook) [COREBOOT]: Ignore low + tables for low memory calculations. + +2014-02-28 Vladimir Serbinenko + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): Limit + location to 640K. + +2014-02-28 Vladimir Serbinenko + + * grub-core/kern/i386/coreboot/mmap.c: Filter out 0xa0000-0x100000 + region. + +2014-02-20 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Ignore NPORTS field and rely on PI + exclusively. + +2014-02-04 Paulo Flabiano Smorigo + + Add bootpath parser for open firmware. + + It enables net boot even when there is no bootp/dhcp server. + + * grub-core/net/drivers/ieee1275/ofnet.c: Add grub_ieee1275_parse_bootpath + and call it at grub_ieee1275_net_config_real. + * grub-core/kern/ieee1275/init.c: Add bootpath to + grub_ieee1275_net_config. + * include/grub/ieee1275/ieee1275.h: Likewise. + + +2014-02-04 Paulo Flabiano Smorigo + + Add grub_env_set_net_property function. + + * grub-core/net/bootp.c: Remove set_env_limn_ro. + * grub-core/net/net.c: Add grub_env_set_net_property. + * include/grub/net.h: Likewise. + +2014-02-03 Vladimir Serbinenko + + * util/grub-mkrescue.c: Build fix for argp.h with older gcc. + +2014-02-03 Vladimir Serbinenko + + * util/grub-mkfont.c: Build fix for argp.h with older gcc. + +2014-01-29 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Increase timeout. Some SSDs take up to + 7 seconds to recover if last poweroff was bad. + +2014-01-29 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Properly handle transactions with no + transferred data. + +2014-01-29 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Add safety cleanups. + +2014-01-29 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Allocate and clean space for all possible 32 + slots to avoid pointing to uninited area. + +2014-01-29 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Do not enable I/O decoding and keep + enabling busmaster for the end. + +2014-01-29 Vladimir Serbinenko + + * util/grub-mkfont.c: Downgrade warnings about unhandled features + to debug. + +2014-01-29 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c: Tolerate missing keyboard. + +2014-01-29 Paulo Flabiano Smorigo + + * .gitignore: add missing files and .exe variants. + +2014-01-26 Mike Gilbert + + grub-install: support for partitioned partx loop devices. + + * grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Detect + /dev/loopX as being the parent of /dev/loopXpY. + +2014-01-26 Vladimir Serbinenko + + * grub-core/term/serial.c (grub_serial_register): Fix invalid free. + Ensure that pointers are inited to NULL and that pointers are not + accessed after free. + +2014-01-25 Andrey Borzenkov + + * include/grub/crypto.h: Replace __attribute__ ((format (printf)) with + __attribute__ ((format (__printf__)) to fix compilation under MinGW-w64. + * include/grub/emu/misc.h: ... and here. + * include/grub/err.h: ... and here. + * util/import_gcry.py: ... and here (in files g10lib.h). + +2014-01-25 Andrey Borzenkov + + * util/grub-mkimage.c: Make prefix argument mandatory. + +2014-01-24 Vladimir Serbinenko + + Fix several translatable strings. + + Suggested by: D. Prévot. + +2014-01-24 Vladimir Serbinenko + + * util/grub-install.c: List available targets. + +2014-01-23 Colin Watson + + * util/grub-install.c (write_to_disk): Add an info message. + +2014-01-21 Andrey Borzenkov + + * Makefile.am: Allow adding extra files to generated Windows ZIP + archive by setting GRUB_WINDOWS_EXTRA_DIST. + +2014-01-21 Andrey Borzenkov + + * configure.ac: Look for DejaVuSans also in /usr/share/fonts/truetype. + Show detected font path in summary. + +2014-01-21 Paulo Flabiano Smorigo + + * grub-core/net/arp.c (grub_net_arp_send_request): Increase network try + interval gradually. + * grub-core/net/icmp6.c (grub_net_icmp6_send_request): Likewise. + * grub-core/net/net.c (grub_net_fs_read_real): Likewise. + * grub-core/net/tftp.c (tftp_open): Likewise. + * include/grub/net.h (GRUB_NET_INTERVAL_ADDITION): New define. + +2014-01-21 Paulo Flabiano Smorigo + + * grub-core/net/net.c (receive_packets): Change stop condition to avoid + infinite loops. + + In net/net.c there is a while (1) that only exits if there is a stop + condition and more then 10 packages or if there is no package received. + + If GRUB is idle and enter in this loop, the only condition to leave is + if it doesn't have incoming packages. In a network with heavy traffic + this never happens. + +2014-01-19 Colin Watson + + * grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Ignore + EPERM when modifying kern.geom.debugflags. It is only a problem for + such things as installing GRUB to the MBR, in which case there'll be + an error later anyway, not for opening files during tests. + +2014-01-18 Andrey Borzenkov + + * grub-core/Makefile.am: Build grub_emu_init.[ch] from MODULE_FILES + instead of MOD_FILES. + * grub-core/genemuinit.sh: Simplify stripping of suffix so it works + both with and without .exe. + * grub-core/genemuinitheader.sh: Same. + +2014-01-18 Vladimir Serbinenko + + * util/grub-install.c: Fix a typo. + +2014-01-18 Vladimir Serbinenko + + * grub-core/normal/main.c (read_config_file): Buffer config file. + Reduces boot time. + +2014-01-18 Andrey Borzenkov + + * acinclude.m4 (grub_CHECK_LINK_DIR): Check that we can also remove + symbolic link to directory. It fails in Msys shell on Windows 2003. + +2014-01-18 Vladimir Serbinenko + + * Makefile.am (default_payload.elf): Add modules + multiboot cbmemc linux16 gzio echo help. + +2014-01-18 Mike Gilbert + + * Makefile.util.def: Link grub-ofpathname with zfs libs. + +2014-01-18 Vladimir Serbinenko + + * grub-core/commands/macbless.c: Rename FILE and DIR to avoid + conflicts. + + Reported by: Andrey Borzenkov. + +2014-01-18 Andrey Borzenkov + + * include/grub/misc.h: Move macros for compiler features to ... + * include/grub/compiler.h: ... new file. + * include/grub/list.h: Include instead of . + * grub-core/commands/fileXX.c: Include . + * grub-core/efiemu/prepare.c: Include . + * grub-core/loader/i386/xen_file.c: Include . + * grub-core/loader/i386/xen_fileXX.c: Include . + * grub-core/video/capture.c: Include . + * include/grub/command.h: Include . + * include/grub/dl.h: Include . + * include/grub/procfs.h: Include . + +2014-01-18 Andrey Borzenkov + + * configure.ac: Add support for BUILD_EXEEXT and use it ... + * Makefile.am: ... here. + * Makefile.util.def: ... and here. + * grub-core/Makefile.am: ... and here. + +2014-01-18 Andrey Borzenkov + + * include/grub/osdep/hostfile_windows.h: Use _W64 instead of + FILE_OFFSET_BITS to differentiate between native MinGW and Mingw W64. + +2014-01-18 Vladimir Serbinenko + + * grub-core/term/terminfo.c: Recognize keys F1-F12. + +2014-01-18 Andrey Borzenkov + + * configure.ac: Add support for BUILD_LDFLAGS. + * Makefile.am: Use BUILD_LDFLAGS for build time programs here ... + * grub-core/Makefile.am: ... and here. + * INSTALL: Mention BUILD_LDFLAGS. + +2014-01-18 Vladimir Serbinenko + + * util/grub-mount.c: Extend GCC warning workaround to grub-mount. + +2014-01-18 Vladimir Serbinenko + + * grub-core/kern/efi/efi.c: Ensure that the result starts with / + and has no //. + +2014-01-18 Vladimir Serbinenko + + * NEWS: Add few missing entries. + +2014-01-17 Colin Watson + + * util/grub.d/00_header.in (make_timeout): Use && rather than test + -a. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/10_netbsd.in (netbsd_load_fs_module): Use || rather + than test -o. + * util/grub.d/30_os-prober.in: Use && rather than test -a, and || + rather than test -o. + +2014-01-17 Colin Watson + + * grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Remove + redundant preprocessor conditional. + +2014-01-08 Colin Watson + + * Makefile.util.def (grub-macbless): Change mansection to 8. + +2014-01-07 Leif Lindholm + + * grub-core/loader/arm64/linux.c: correctly set device path end length. + +2014-01-07 Andrey Borzenkov + + * util/grub-install.c: Use bootaa64.efi instead of bootaarch64.efi on + arm64 to comply with EFI specification. Also use grubaa64.efi for + consistency. + * util/grub-mkrescue.c: Change to use bootaa64.efi too. + +2014-01-07 Andrey Borzenkov + + * include/grub/osdep/hostfile_windows.h: Do not redefine fseeko/ftello + on MinGW-64 when compiling for 32 bits. + +2013-12-30 Andrey Borzenkov + + * grub-core/Makefile.core.def: strip .eh_frame section for arm64-efi. + +2013-12-30 Vladimir Serbinenko + + * NEWS: Add few missing entries. Correct existing ones. + +2013-12-28 Vladimir Serbinenko + + Don't abort() on unavailable coreboot tables if not running on coreboot. + +2013-12-28 Andrey Borzenkov + + * grub-core/kern/emu/misc.c: Remove unused error.h; fixes compilation + on mingw. + +2013-12-28 Colin Watson + + * NEWS: The cmosclean command in fact dates back to 1.99. Remove + mention of it from 2.02. + +2013-12-27 Vladimir Serbinenko + + * grub-core/kern/arm/cache_armv6.S: Remove .arch directive. + + As these functions are used on pre-ARMv6 CPUs as well we don't want + to make assembler assume that architecture is higher than default one. + +2013-12-27 Colin Watson + + * NEWS: First draft of 2.02 entry. + +2013-12-27 Colin Watson + + * INSTALL (Cross-compiling the GRUB): Fix some spelling mistakes. + * docs/grub.texi (Getting the source code): Likewise. + +2013-12-25 Andrey Borzenkov + + * grub-core/osdep/windows/platform.c (get_platform): Fix EFI + detection. + +2013-12-24 Vladimir Serbinenko + + * configure.ac: Set version to 2.02~beta2. + +2013-12-24 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c (name_devices): Skip Apple ghosts. + +2013-12-24 Andrey Borzenkov + + * util/grub-probe.c: Improve help message and simplify list handling. + +2013-12-24 Vladimir Serbinenko + + Fix buffer overflow in grub_efi_print_device_path. + +2013-12-24 Vladimir Serbinenko + + Show SATA device path. + +2013-12-24 Vladimir Serbinenko + + Revert grub-file usage in grub-mkconfig. + +2013-12-24 Vladimir Serbinenko + + Make newly-created files other than grub.cfg world-readable. + +2013-12-24 Andrey Borzenkov + + * util/grub.d/00_header.in: Improve compatibility with old config. + +2013-12-24 Vladimir Serbinenko + + Make rijndael.c respect aliasing rules. + + Trivial backport of dfb4673da8ee52d95e0a62c9f49ca8599943f22e. + +2013-12-24 Vladimir Serbinenko + + Make grub_util_device_is_mapped_stat available in grub-emu core. + +2013-12-24 Vladimir Serbinenko + + Add -Qn to TARGET_CFLAGS if it's supported. + Fixes compilation on cygwin. + + Reported by: Andrey Borzenkov. + Suggested by: Andrey Borzenkov. + +2013-12-24 Vladimir Serbinenko + + Save TARGET_CC version in modinfo.sh. + + Suggested by: Andrey Borzenkov. + +2013-12-24 Vladimir Serbinenko + + Make grub_util_devmapper_part_to_disk and grub_util_find_partition_start + follow the same algorithm to avoid method mismatch. Don't assume + DMRAID- UUID to mean full disk but instead check that mapping is linear. + +2013-12-24 Vladimir Serbinenko + + Declare GRUB_EFI_VENDOR_APPLE_GUID. + +2013-12-24 Vladimir Serbinenko + + Dump type and vendor specific data when printing device path. + +2013-12-23 Colin Watson + + Update some documentation to refer to Git rather than Bazaar. + + * docs/grub.texi (Obtaining and Building GRUB): Refer to Git rather + than Bazaar. + * po/README: Likewise. Fix spelling mistake. + +2013-12-23 Colin Watson + + Don't distribute config.h. + + * Makefile.am (platform_HEADERS): Move to ... + (nodist_platform_HEADERS): ... here. Fixes gettext_strings_test + failure when building from a distributed tarball. + +2013-12-23 Colin Watson + + * configure.ac: Fix spelling. + * grub-core/commands/parttool.c: Fix grammar. + * grub-core/disk/ldm.c: Use consistent capitalisation for "LDM + Embedding Partition". + +2013-12-23 Vladimir Serbinenko + + ARM64 support for grub-mkrescue. + +2013-12-23 Vladimir Serbinenko + + Install modinfo.sh to keep build information around. + +2013-12-23 Vladimir Serbinenko + + * grub-core/modinfo.sh.in: Add build config information. + +2013-12-23 Vladimir Serbinenko + + ARM64 grub-file and grub-mkconfig support. + +2013-12-23 Vladimir Serbinenko + + Remove leftover options defines. + +2013-12-23 Vladimir Serbinenko + + * include/grub/arm64/linux.h: Remove leftovers. Add missing prefixes. + +2013-12-23 Vladimir Serbinenko + + * grub-core/loader/arm64/linux.c: Add missing bracket. + +2013-12-23 Vladimir Serbinenko + + Add arm64-efi recognition to grub-file. + +2013-12-23 Vladimir Serbinenko + + Fix ia64-efi recognition in grub-file. + +2013-12-23 Vladimir Serbinenko + + Recognize raspberry pi kernel in grub-file. + +2013-12-23 Vladimir Serbinenko + + Enable cache on ARM U-Boot port. + + Without it the port is reidiculously slow. + +2013-12-23 Vladimir Serbinenko + + Fix ARM cache maintainance. + + More code was converted from ASM to C for easier handling. + +2013-12-22 Vladimir Serbinenko + + * grub-core/kern/arm/cache.c (grub_arm_disable_caches_mmu): Use v6 + algorithm on v5. + + Suggested by: Leif Lindholm. + +2013-12-22 Andrey Borzenkov + + * util/grub-mkconfig.in: Fix Xen platform conditions. + +2013-12-22 Andrey Borzenkov + + * util/grub-mkrescue.c: Split single help message string in several + strings used in previous shell version. + +2013-12-22 Leif Lindholm + + Add arm64 Linux loader. + +2013-12-22 Leif Lindholm + + Add grub_fdt_create_empty_tree() and grub_fdt_set_prop64(). + +2013-12-22 Vladimir Serbinenko + + Add module loading and parsing boot time checkpoints. + +2013-12-22 Vladimir Serbinenko + + * grub-core/loader/arm/linux.c: Pass arguments through on ATAG + platforms. + +2013-12-22 Lars Wendler + + * util/grub-mkconfig.in: Skip non-executable files. + +2013-12-22 Vladimir Serbinenko + + Workaround buggy timer in raspberry pie by using our own timer + implementation. + +2013-12-22 Vladimir Serbinenko + + * include/grub/arm/uboot/kernel.h (GRUB_KERNEL_MACHINE_HEAP_SIZE): + Increase to 16 MiB to allow loading the whole memdisk. + +2013-12-22 Vladimir Serbinenko + + Fix ARM Linux Loader on non-FDT platforms. + +2013-12-21 Vladimir Serbinenko + + * configure.ac: Choose link format based on host_os on emu. + +2013-12-21 Vladimir Serbinenko + + * grub-core/osdep/unix/getroot.c: Non-unix build fix. + +2013-12-21 Vladimir Serbinenko + + * grub-core/kern/emu/main.c: Build fix for emu. + +2013-12-21 Vladimir Serbinenko + + Build fixes for argp.h with older gcc. + +2013-12-21 Vladimir Serbinenko + + * util/grub-glue-efi.c: Use "universal binary" rather "fat binary" + in strings. + + Suggested by: David Prévot. + +2013-12-21 Vladimir Serbinenko + + * include/grub/crypto.h (grub_crypto_xor): Fix cast-align warning. + +2013-12-21 Vladimir Serbinenko + + Enable -Wformat=2 if it's supported. + +2013-12-21 Vladimir Serbinenko + + * configure.ac: Add -Wmissing-include-dirs -Wmissing-prototypes + -Wmissing-declarations if supported. + +2013-12-21 Vladimir Serbinenko + + * grub-core/commands/macbless.c (grub_mac_bless_inode): Pass inode as + u32 as both HFS and HFS+ have 32-bit inodes. + +2013-12-21 Vladimir Serbinenko + + * include/grub/misc.h (grub_strtol): Fix overflow. + +2013-12-21 Vladimir Serbinenko + + * include/grub/term.h (grub_unicode_estimate_width): Use grub_size_t + as return type in both conditionals. + +2013-12-21 Vladimir Serbinenko + + * include/grub/video.h (grub_video_rgba_color_rgb): Fix prototype + to use uint8_t for color. + +2013-12-21 Vladimir Serbinenko + + * util/misc.c (grub_util_get_image_size): Check for overflow. + +2013-12-21 Vladimir Serbinenko + + * grub-core/disk/raid6_recover.c (grub_raid_block_mulx): Use grub_size_t + for size. + +2013-12-21 Vladimir Serbinenko + + * grub-core/disk/lvm.c: Use grub_size_t for sizes and grub_ssize_t + for pointer difference. + +2013-12-21 Vladimir Serbinenko + + * util/import_gcry.py: Skip sample keys. + +2013-12-21 Vladimir Serbinenko + + * util/misc.c (grub_qsort_strcmp): Don't discard const attribute. + +2013-12-21 Vladimir Serbinenko + + * configure.ac: Remove duplicate warning arguments. + +2013-12-21 Vladimir Serbinenko + + Add missing static qualifiers. + +2013-12-21 Vladimir Serbinenko + + Add missing includes. + +2013-12-21 Vladimir Serbinenko + + Inline printf templates when possible to enable format checking. + +2013-12-21 Vladimir Serbinenko + + * include/grub/crypto.h: Don't discard const attribute. + +2013-12-21 Vladimir Serbinenko + + * grub-core/net/bootp.c (grub_cmd_dhcpopt): Use snprintf where it + was intended. + +2013-12-21 Vladimir Serbinenko + + * grub-core/lib/crypto.c: Don't discard const attribute. + +2013-12-21 Vladimir Serbinenko + + * grub-core/lib/disk.c: Fix potential overflow. + +2013-12-21 Vladimir Serbinenko + + * grub-core/lib/arg.c: Don't discard const attribute. + +2013-12-21 Vladimir Serbinenko + + * grub-core/kern/dl.c: Don't discard const attribute. + +2013-12-21 Vladimir Serbinenko + + * grub-core/kern/disk.c: Fix potential overflow. + +2013-12-21 Vladimir Serbinenko + + * conf/Makefile.common: Don't include non-existing directory + grub-core/lib/libgcrypt-grub/include. + +2013-12-21 Vladimir Serbinenko + + Clarify several translatable messages. + +2013-12-21 David Prévot + + Correct some translatable strings. + +2013-12-21 Colin Watson + + * util/grub-mkrescue.c: Rephrase mkrescue description. + +2013-12-21 Vladimir Serbinenko +2013-12-21 Colin Watson + + Clarify several translatable messages. + +2013-12-20 Colin Watson + + Be more verbose about some configure failures. + +2013-12-20 Colin Watson + + Fix various build problems on GNU/Hurd. + + * grub-core/osdep/unix/getroot.c (strip_extra_slashes): Move inside + !defined (__GNU__). + (xgetcwd): Likewise. + * include/grub/emu/hostdisk.h (grub_util_hurd_get_disk_info) + [__GNU__]: Add prototype. + * util/getroot.c (grub_util_biosdisk_get_grub_dev) [__GNU__]: Format + long int using %ld rather than %d. + +2013-12-18 Vladimir Serbinenko + + * util/grub-install.c: Inform user about install platform. + +2013-12-18 Vladimir Serbinenko + + * configure.ac: Set version to 2.02~beta1. + +2013-12-18 Allen Pais +2013-12-18 Bob Picco + + * grub-core/boot/sparc64/ieee1275/boot.S: Fix order of fields. + +2013-12-18 Vladimir Serbinenko + + Make grub_zlib_decompress handle incomplete chunks. + + Fixes squash4. + +2013-12-18 Vladimir Serbinenko + + * grub-core/Makefile.am: Don't attempt to export grub_bios_interrupt + on i386-multiboot. + +2013-12-18 Aleš Nesrsta + + * grub-core/disk/usbms.c: Retry on unknown errors. + Reuse the same tag on retries. + +2013-12-18 Aleš Nesrsta + + * grub-core/bus/usb/ehci.c: Fix handling of newborn transfers. + + Avoid confusing them with already completed transfers. + +2013-12-18 Vladimir Serbinenko + + Remove xen VFB. + + Due to XEN bug it prevents Linux boot. Remove it at least, until + workaround is found. + +2013-12-18 Vladimir Serbinenko + + * po/exclude.pot: Add 2 missing excludes. + +2013-12-18 Vladimir Serbinenko + + Add missing license section in macbless.mod and macho.mod. + +2013-12-18 Vladimir Serbinenko + + Allow compilation without thumb-interwork as long as no thumb is + involved or only thumb2 is used. + +2013-12-18 Vladimir Serbinenko + + * INSTALL: Update comment as to why sparc64 clang isn't usable. + +2013-12-18 Vladimir Serbinenko + + Add __attribute__ ((sysv_abi)) only if it's really needed. + + Some compilers don't support it. + +2013-12-18 Vladimir Serbinenko + + * grub-core/lib/syslinux_parse.c: Declare timeout unsigned. + +2013-12-18 Vladimir Serbinenko + + Remove -Wold-style-definition. + + Not very useful and interaction of it with regexp depends on GCC + version. + +2013-12-18 Vladimir Serbinenko + + Make grub_util_get_windows_path_real static. + +2013-12-18 Vladimir Serbinenko + + * grub-core/commands/fileXX.c: Silence cast-align. + * grub-core/loader/i386/xen_fileXX.c: Likewise. + +2013-12-18 Vladimir Serbinenko + + * include/grub/efi/api.h (GRUB_EFI_ERROR_CODE): Use explicit cast + rather than LL suffix. + +2013-12-18 Vladimir Serbinenko + + * include/grub/efi/api.h (PRIxGRUB_EFI_UINTN_T): Remove leftover. + +2013-12-18 Vladimir Serbinenko + + * grub-core/loader/arm/linux.c: Use common initrd functions. + +2013-12-18 Vladimir Serbinenko + + Decrease number of strings to translate. + +2013-12-18 Vladimir Serbinenko + + * grub-core/kern/arm/dl.c: Remove unnecessarry execution mode check. + +2013-12-18 Vladimir Serbinenko + + Mark strings for translation and add remaining ones to exclude list. + +2013-12-18 Vladimir Serbinenko + + * util/grub-file.c (main): Fix sizeof usage. + +2013-12-18 Vladimir Serbinenko + + Silence spurious warning. + +2013-12-18 Vladimir Serbinenko + + Remove check_nt_hiberfil as it's been superseeded by file command. + +2013-12-17 Vladimir Serbinenko + + * docs/osdetect.cfg: Add isolinux config to detected OSes. + +2013-12-17 Vladimir Serbinenko + + Implement syslinux parser. + +2013-12-17 Vladimir Serbinenko + + * grub-core/commands/legacycfg.c: Use 32-bit Linux protocol on non-BIOS. + +2013-12-17 Vladimir Serbinenko + + Support cpuid --pae. + +2013-12-17 Vladimir Serbinenko + + Use AT keyboard on Yeeloong 3A. + +2013-12-17 Vladimir Serbinenko + + Add Yeeloong 3A reboot and halt. + +2013-12-17 Vladimir Serbinenko + + Add Radeon Yeeloong 3A support. + +2013-12-17 Vladimir Serbinenko + + Add bonito 3A support. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/machoXX.c: Fix compilation on non-i386. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/i386/xen_fileXX.c: Silence cast-align. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/macho.c: Fix compilation on non-i386. + +2013-12-17 Vladimir Serbinenko + + Add missing format_arg attribute to check that printf with translated + messages has proper arguments. + +2013-12-17 Vladimir Serbinenko + + Use grub_xasprintf to format translated error messages containing + 64-bit quantity. + +2013-12-17 Jon McCune + + Fix double-free introduced by commit 33d02a42d64cf06cada1c389 + +2013-12-17 Vladimir Serbinenko + + Unify message for unsupported relocation. + +2013-12-17 Vladimir Serbinenko + + Mark miscompile error for translation. + +2013-12-17 Vladimir Serbinenko + + Use %I64 and not %ll when using OS printf if compiling for windows. + +2013-12-17 Vladimir Serbinenko + + Update Mac code to match new register_efi prototype. + +2013-12-17 Vladimir Serbinenko + + Implement better integration with Mac firmware. + +2013-12-17 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c: Implement special value for + load_addr. + +2013-12-17 Vladimir Serbinenko + + Include serial module in default_payload.elf. + +2013-12-17 Vladimir Serbinenko + + Add explicit thumb interwork bx in asm files. + + Shouldn't matter for armv >= 5 but let's be safe. + +2013-12-17 Vladimir Serbinenko + + Implement Truecrypt ISO loader. + +2013-12-17 Vladimir Serbinenko + + * grub-core/lib/arg.c: Ensure at least a single space between commands. + +2013-12-17 Vladimir Serbinenko + + Implement grub_file tool and use it to implement generating of config + in separate root. + +2013-12-17 Vladimir Serbinenko + + Change to v1 xen grants. + +2013-12-17 Vladimir Serbinenko + + * grub-core/lib/i386/xen/relocator.S: Fix hypercall ABI violation. + + GRUB relied on %ebx being preserved across hypercall which isn't true. + +2013-12-17 Vladimir Serbinenko + + * grub-core/lib/x86_64/xen/relocator.S: Fix hypercall ABI violation. + + GRUB relied on %rdi being preserved across hypercall which isn't true. + +2013-12-17 Vladimir Serbinenko + + Implement XEN VFB support. + +2013-12-17 Vladimir Serbinenko + + Remove grub_bios_interrupt on coreboot. + + It's not used currently and cannot be used safely currently. + +2013-12-16 Vladimir Serbinenko + + Update exclude.pot and mark few strings for translation. + +2013-12-16 Vladimir Serbinenko + + * util/grub-mkrescue.c: Fix incorrect file usage in fallback code. + + Reported by: Jon McCune + +2013-12-16 Andrey Borzenkov + + * grub-core/osdep/linux/platform.c (grub_install_get_default_x86_platform): + Add verbose information which firmware directories were tried. + +2013-12-16 Andrey Borzenkov + + * grub-core/osdep/unix/exec.c (grub_util_exec_redirect_all): New + function to optionally redirect all three standard descriptors. + Redefine grub_util_exec, grub_util_exec_redirect and + grub_util_exec_redirect_null to use it. + * include/grub/emu/exec.h: Define it. + * include/grub/osdep/exec_unix.h: Delete, it is unused. + * grub-core/osdep/linux/platform.c (grub_install_get_default_x86_platform): + Use grub_util_exec_redirect_all to redirect error to NULL. + +2013-12-16 Vladimir Serbinenko + + * grub-core/tests/sleep_test.c: Silence spurious warning. + +2013-12-16 Vladimir Serbinenko + + Make grub_xen_hypercall on i386 cdecl rather than stdcall to avoid + linker trying to "fixup" the code. + +2013-12-16 Vladimir Serbinenko + + * grub-core/kern/x86_64/xen/startup.S: Align stack. + +2013-12-16 Vladimir Serbinenko + + Add support for converting PE+ to Elf64. + +2013-12-16 Vladimir Serbinenko + + * grub-core/commands/minicmd.c (grub_mini_cmd_dump): Handle LLP case. + +2013-12-16 Vladimir Serbinenko + + Remove practice of assigning random const pointers to device id. + + This is not required as cache code already checks driver id as well. + +2013-12-16 Vladimir Serbinenko + + * include/grub/x86_64/types.h: Define sizeof (long) as 4 when compiling + with mingw. + +2013-12-16 Vladimir Serbinenko + + * include/grub/efi/api.h: Don't use call wrappers when compiled with + mingw or cygwin as API already matches. + +2013-12-16 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/errno.h: Undefine errno before redefining. + +2013-12-16 Vladimir Serbinenko + + * include/grub/efi/api.h: Define (u)intn_t based on pointer size and + not on long. + +2013-12-16 Vladimir Serbinenko + + Handle X86_64_PC64 relocation. + + Those are generated by some cygwin compilers. + +2013-12-16 Vladimir Serbinenko + + Determine the need for mingw-related stubs at compile time rather than + using not very significant $target_os. + +2013-12-16 Vladimir Serbinenko + + * grub-core/genmod.sh.in: Strip before converting to ELF as strip + may not work with ELF. + +2013-12-16 Vladimir Serbinenko + + Use unix functions for temporary files and special files on cygwin. + +2013-12-16 Vladimir Serbinenko + + Define functions explicitly rather than using --defsym in tests + whenever possible. Respect locality in remaining cases. + +2013-12-16 Vladimir Serbinenko + + * grub-core/genmoddep.awk: Remove explicit getline < /dev/stdin. + +2013-12-15 Andrey Borzenkov + + * grub-core/osdep/windows/platform.c (grub_install_register_efi): Handle + unlikely errors when getting EFI variables and make exhaustive search + for all BootNNNN variables to find matching one. + +2013-12-15 Ian Campbell + + * grub-core/kern/uboot/init.c: Fix units of uboot timer. + +2013-12-15 Vladimir Serbinenko + + New functional test for sleep function. + + This test allows to check sleep without qemu. Keep qemu version as + well as functional test won't notice if all clocks are going too fast + or too slow. + +2013-12-15 Vladimir Serbinenko + + Add explicit sysv_abi on amd64 asm routines. + +2013-12-15 Vladimir Serbinenko + + * grub-core/commands/efi/lsefisystab.c: Use %lld to show + num_table_entries. + +2013-12-15 Vladimir Serbinenko + + * include/grub/test.h: Use gnu_printf rather than printf on GRUB + functions. + +2013-12-15 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c: Use grub_addr_t rather than long when + appropriate. + +2013-12-15 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c: Use %p rather than %lx for pointers. + +2013-12-15 Vladimir Serbinenko + + * grub-core/kern/elfXX.c: Use grub_addr_t rather than long when + appropriate. + +2013-12-15 Vladimir Serbinenko + + * grub-core/disk/loopback.c: Use sequential IDs rather than pointer. + + In case of quick removal of loopback and adding another one it may + get same ID, confusing the cache system. + +2013-12-15 Vladimir Serbinenko + + * grub-core/commands/acpi.c: Use grub_addr_t rather than long when + appropriate. + +2013-12-15 Vladimir Serbinenko + + * grub-core/kern/i386/coreboot/cbtable.c: Use char * arithmetic rather + than converting to long. + +2013-12-15 Vladimir Serbinenko + + * grub-core/disk/cryptodisk.c: Rename "n" to "last_cryptodisk_id". + +2013-12-15 Vladimir Serbinenko + + * util/grub-mkimagexx.c (relocate_addresses): Display offset rather + than almost useless pointer. + +2013-12-15 Vladimir Serbinenko + + Add gcc_struct to all packed structures when compiling with mingw. + + Just "packed" doesn't always pack the way we expect. + +2013-12-14 Vladimir Serbinenko + + * include/grub/i386/coreboot/lbio.h: Add missing attribute (packed). + +2013-12-14 Vladimir Serbinenko + + * util/grub-pe2elf.c: Fix handling of .bss. + +2013-12-14 Vladimir Serbinenko + + Implement windows flavour of EFI install routines. + +2013-12-14 Vladimir Serbinenko + + * conf/Makefile.extra-dist: Adjust path to conf/i386-cygwin-img-ld.sc. + +2013-12-14 Vladimir Serbinenko + + Change grub_install_register_efi interface to pass GRUB device. + + This allows grub_install_register_efi to request partition info + directly. + +2013-12-14 Vladimir Serbinenko + + Workaround cygwin bug when using \\?\Volume{GUID} syntax. + +2013-12-14 Vladimir Serbinenko + + Do not use TCHAR string functions as they are not available on cygwin. + +2013-12-14 Vladimir Serbinenko + + Workaround windows bug when querying EFI system partition parameters. + +2013-12-14 Vladimir Serbinenko + + * grub-core/kern/i386/qemu/init.c (resource): Decrease struct size + by using bitfields. + +2013-12-14 Vladimir Serbinenko + + * grub-core/boot/i386/qemu/boot.S: Add missing EXT_C. + +2013-12-14 Vladimir Serbinenko + + Make i386-* other than i386-pc compileable under cygwin. + +2013-12-14 Vladimir Serbinenko + + Fix definition of grub_efi_hard_drive_device_path. Take care that + existing code would work even if by some reason bogus definition is + used by EFI implementations. + +2013-12-14 Vladimir Serbinenko + + * grub-core/osdep/windows/hostdisk.c: Fix cygwin compilation. + +2013-12-14 Vladimir Serbinenko + + * grub-core/osdep/windows/blocklist.c: Add missing cast in printf + invocation. + +2013-12-14 Vladimir Serbinenko + + * util/config.c: Remove trailing newline from distributor in simple + parsing. + +2013-12-14 Vladimir Serbinenko + + * include/grub/efi/api.h: Rename protocol and interface to avoid + conflict. + +2013-12-14 Vladimir Serbinenko + + * .gitignore: add .exe variants. add missing files. remove few outdated + entries. + +2013-12-14 Vladimir Serbinenko + + * grub-core/osdep/exec.c: Use unix version on cygwin. + +2013-12-13 Vladimir Serbinenko + + Implement multiboot2 EFI BS specification. + +2013-12-11 Vladimir Serbinenko + + * grub-core/normal/charset.c: Fix premature line wrap and crash. + Crash happened only in some cases like a string starting at the + half of the screen of same length. + +2013-12-11 Vladimir Serbinenko + + * include/grub/efiemu/efiemu.h: Sync configuration table declaration + with EFI counterpart. + +2013-12-11 Vladimir Serbinenko + + Propagate the EFI commits to x86-efi specific parts. + +2013-12-11 Vladimir Serbinenko + + * grub-core/commands/efi/lssal.c: Fix terminating condition. + +2013-12-11 Vladimir Serbinenko + + Introduce grub_efi_packed_guid and use it where alignment is not + guaranteed. + +2013-12-11 Vladimir Serbinenko + + * include/grub/efi/api.h (grub_efi_device_path): Define length as + unaligned u16 rather than u8[2]. + +2013-12-11 Vladimir Serbinenko + + * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Add checks + for relocation range. + +2013-12-11 Vladimir Serbinenko + + * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Handle + non-function pcrel21b relocation. It happens with .text.unlikely + section. + +2013-12-10 Leif Lindholm + + * make MAX_USABLE_ADDRESS platform-specific + * grub-core/kern/efi/mm.c: add Vladimir's new BYTES_TO_PAGES_DOWN macro. + +2013-12-10 Leif Lindholm + + * grub-core/lib/fdt.c: change memcpy => grub_memcpy + +2013-12-09 Jon McCune + + * Add --no-rs-codes flag to optionally disable reed-solomon codes + in grub-install and grub-bios-setup for x86 BIOS targets. + +2013-12-09 Vladimir Serbinenko + + Add missing compile and link options for sparc64-emu. + +2013-12-09 Vladimir Serbinenko + + Implement sparc64 trampolines (needed for sparc64-emu). + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Check + range of R_SPARC_HI22. + Implement R_SPARC_LM22. + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/powerpc/dl_helper.c (grub_arch_dl_get_tramp_got_size): + Do not explicitly check for symbol table as it's already checked in + platform-independent layer. + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/emu/cache.c [__ia64__]: Use our cache cleaning routine + on ia64 as __clear_cache is a dummy on ia64. + +2013-12-09 Vladimir Serbinenko + + * grub-core/kern/ia64/dl_helper.c (grub_ia64_dl_get_tramp_got_size): + Do not explicitly check for symbol table as it's already checked in + platform-independent layer. + +2013-12-09 Colin Watson + + * util/grub-mkconfig.in: Add missing newline to output. + +2013-12-08 Vladimir Serbinenko + + * grub-core/kern/ia64/efi/init.c (grub_arch_sync_caches): Move to ... + * grub-core/kern/ia64/cache.c (grub_arch_sync_caches): ... here. + +2013-12-08 Vladimir Serbinenko + + * grub-core/kern/emu/main.c: Silence missing prototypes to allow emu + compilation with GCC <= 4.2. + * grub-core/kern/emu/argp_common.c: Likewise. + +2013-12-08 Vladimir Serbinenko + + * include/grub/kernel.h [__sparc__]: Restrict sparc64-ieee1275 to + right platform rather than leaking to sparc64-emu. + +2013-12-08 Vladimir Serbinenko + + * grub-core/osdep/windows/emuconsole.c: Remove unsigned comparison >= 0. + But ensure that the variables in question are indeed unsigned. + +2013-12-08 Vladimir Serbinenko + + * grub-core/kern/emu/lite.c: Add missing include of ../ia64/dl_helper.c. + +2013-12-08 Vladimir Serbinenko + + Remove grub_memalign on emu. + +2013-12-08 Vladimir Serbinenko + + * grub-core/kern/ia64/efi/init.c: Fix alignment code so it doesn't + truncate incomplete lines but instead flushes them. + +2013-12-08 Vladimir Serbinenko + + Move OS-dependent mprotect for module loading to grub-core/osdep/*/dl.c + and implement windows variant. + +2013-12-08 Vladimir Serbinenko + + Fix mips-emu compilation. + +2013-12-08 Vladimir Serbinenko + + * configure.ac: Check for freetype library usability. + +2013-12-08 Vladimir Serbinenko + + Make arm-emu work. + +2013-12-07 Vladimir Serbinenko + + * util/grub-mkfont.c: Replace stpcpy with grub_stpcpy. + +2013-12-07 Andrey Borzenkov + + * docs/grub.texi (Environment): Update color_normal and color_highlight + defaults (light-gray instead of white). + +2013-12-07 Andrey Borzenkov + + * grub-core/normal/main.c (INIT): Set default color to light-gray + to match GRUB_TERM_DEFAULT_NORMAL_COLOR (i.e. rescue mode), Linux + and apparently BIOS defaults. + +2013-12-07 Vladimir Serbinenko + + Transform -C option to grub-mkstandalone to --core-compress available + in all grub-install flavours. + +2013-12-07 Vladimir Serbinenko + + Merge GRUBFS and GRUB_FS variables. + +2013-12-07 Andrey Borzenkov + + Revert commit 69ca97c820, it caused failures when using OS device name + in grub-install. Instead just strip off parenthesis in grub-install + if (hdX) was passed. + +2013-12-07 Andrey Borzenkov + + * util/grub-install.c (push_partmap_module): Add helper to convert + partmap names to module names and use it in probe_mods(). Fixes + failure to find partmap modules in diskfilter case. + +2013-12-07 Vladimir Serbinenko + + * configure.ac: Make unifont mandatory on coreboot. + +2013-12-07 Vladimir Serbinenko + + * configure.ac: Skip unifont 6.3 pcf and bdf. + +2013-12-07 Vladimir Serbinenko + + * Makefile.am: Remove partial font files if generation failed. + +2013-12-07 Andrey Borzenkov + + * util/misc.c (grub_qsort_strcmp): Add qsort helper function to sort + strings. + * include/grub/util/misc.h: Define it ... + * util/grub-install.c (device_map_check_duplicates): ... and use it. + +2013-12-07 Andrey Borzenkov + + * util/grub.d/30_os-prober.in: Fix use of grub-probe instead of + ${grub_probe}. + +2013-12-06 Vladimir Serbinenko + + Don't add -mlong-calls when compiling with clang. + +2013-12-06 Vladimir Serbinenko + + * configure.ac: Fix a typo. + +2013-12-06 Vladimir Serbinenko + + Revamp relocation handling. + + Move more code to common dl.c. Add missing veneers for arm and arm64. + Decreases kernel size by 70 bytes on i386-pc (40-50 compressed) + +2013-12-05 Vladimir Serbinenko + + * util/grub-mkimagexx.c: Fix reloc section generation for ia64. + +2013-12-05 Mike Gilbert + + * INSTALL: Raise minimum python version to 2.6. + * gentpl.py: Use python3-style print function. + +2013-12-05 Vladimir Serbinenko + + * util/grub-install.c: Mention Boot* variable. + +2013-12-05 Colin Watson + + * grub-core/osdep/linux/hostdisk.c + (grub_util_find_partition_start_os): Initialise start to avoid + spurious compiler warning. + +2013-12-05 Colin Watson + + On Linux, read partition start offsets from sysfs if possible, to + cope with block device drivers that don't implement HDIO_GETGEO. + Fixes Ubuntu bug #1237519. + + * grub-core/osdep/linux/hostdisk.c (sysfs_partition_path): New + function. + (sysfs_partition_start): Likewise. + (grub_util_find_partition_start_os): Try sysfs_partition_start + before HDIO_GETGEO. + +2013-12-05 Leif Lindholm + + * grub-core/kern/fdt.c: Update struct size when adding node. + +2013-12-05 Vladimir Serbinenko + + Handle unaligned .bss on sparc64. + + Current code improperly assumes that both __bss_start and _end are + aligned to 8-bytes. Eliminating this assumption and explicitly align + modules. + +2013-12-04 Vladimir Serbinenko + + * grub-core/boot/sparc64/ieee1275/boot.S [CDBOOT]: Move scratchpad + so it doesn't land in the middle of loaded image. + +2013-12-04 Vladimir Serbinenko + + * configure.ac: Move all warning options that may be absent in + gcc >= 3.1 to optional. + + Note: while this allows to compile with older GCC, official requirements + remain the same and no support for older GCC. + +2013-12-04 Colin Watson + + Copying the themes directory in grub-shell isn't + parallel-test-friendly and breaks on the second test when the source + directory is read-only (as in "make distcheck"). Instead, add a + hidden --themes-directory option to grub-mkrescue et al, and use it + in grub-shell. + +2013-12-04 Vladimir Serbinenko + + * conf/Makefile.common (CFLAGS_GNULIB): Remove -Wno-old-style-definition + as it's no longer necessarry. + +2013-12-04 Vladimir Serbinenko + + * configure.ac: Allow compilation with older GCC for ARM. + +2013-12-04 Vladimir Serbinenko + + * configure.ac: Add -no-integrated-as if {addme|ame} isn't supported. + * INSTALL: Note that GRUBwas successfully compiled with clang 3.2 for + ppc. + +2013-12-04 Vladimir Serbinenko + + * grub-core/kern/emu/main.c: Ignore missing prototype for main. + +2013-12-04 Vladimir Serbinenko + + Pass font config to config.h and not by TARGET_CFLAGS as adding + arguments doesn't work if TARGET_CFLAGS is specified on command + line. + +2013-12-04 Vladimir Serbinenko + + * configure.ac: Add -Wvla if compiler supports it. + +2013-12-04 Vladimir Serbinenko + + * grub-core/osdep/windows/emuconsole.c (grub_console_putchar): + Remove variable length arrays. + * grub-core/term/efi/console.c (grub_console_putchar): Likewise. + +2013-12-04 Vladimir Serbinenko + + * grub-core/kern/i386/qemu/init.c: Remove variable length arrays. + +2013-12-04 Vladimir Serbinenko + + * include/grub/types.h: Declare all byteswaps as inline functions + except compile-time ones. + + Solves variable shadowing in constructions like + cpu_to_le (le_to_cpu(x) + 1). + +2013-12-04 Vladimir Serbinenko + + * grub-core/kern/efi/efi.c: Remove variable length arrays. + +2013-12-04 Vladimir Serbinenko + + * grub-core/kern/uboot/init.c (uboot_timer_ms): Fix overflow after 71 + minutes. + +2013-12-04 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c: Remove variable length arrays. + * grub-core/net/drivers/ieee1275/ofnet.c: Likewise. + +2013-12-03 Colin Watson + + * grub-core/Makefile.core.def (setjmp): Distribute + lib/arm64/setjmp.S. + +2013-12-03 Colin Watson + + Add a new timeout_style environment variable and a corresponding + GRUB_TIMEOUT_STYLE configuration key for grub-mkconfig. This + controls hidden-timeout handling more simply than the previous + arrangements, and pressing any hotkeys associated with menu entries + during the hidden timeout will now boot the corresponding menu entry + immediately. + + GRUB_HIDDEN_TIMEOUT= + GRUB_TIMEOUT= now + generates a warning, and if it shows the menu it will do so as if + the second timeout were not present. Other combinations are + translated into reasonable equivalents. + + Based loosely on work by Franz Hsieh. Fixes Ubuntu bug #1178618. + +2013-12-02 Vladimir Serbinenko + + * util/config.c: Add missing pointer adjustment. + Reported by: qwertial + +2013-11-30 Andrey Borzenkov + + * grub-core/kern/arm64/dl_helper.c: Include grub/arm64/reloc.h + directly, not via `cpu' link, to fix libgrub.pp generation. + +2013-11-30 Leif Lindholm + + New port arm64-efi. + +2013-11-30 Andrey Borzenkov + + * docs/grub.texi (sleep): Document exit codes. + +2013-11-30 Vladimir Serbinenko + + Ensure that -mno-unaligned-access or some equivalent option is used. + +2013-11-30 Vladimir Serbinenko + + * grub-core/lib/libgcrypt/mpi/longlong.h: Fix compilation error with + -march=armv3. + +2013-11-30 Vladimir Serbinenko + + Remove leftover GRUB_IA64_DL_TRAMP_SIZE. + +2013-11-29 Colin Watson + + * docs/grub-dev.texi (Font Metrics): Exclude @image command from DVI + builds, since we don't have an EPS version of font_char_metrics.png. + Add leading dot to image extension per the Texinfo documentation. + +2013-11-29 Colin Watson + + * util/grub-gen-asciih.c: Include FT_SYNTHESIS_H rather than + , fixing build with FreeType 2.5.1. + * util/grub-gen-widthspec.c: Likewise. + * util/grub-mkfont.c: Likewise. + +2013-11-29 Andrey Borzenkov + + * util/grub-setup.c (main): Move parsing of (hdX) syntax to ... + * util/setup.c (SETUP): ... here. Fixes regression: grub-install + failed to install on (hdX). + * util/grub-setup.c (get_device_name): Remove, not needed after + above change. + +2013-11-29 Vladimir Serbinenko + + * grub-core/kern/emu/hostfs.c (is_dir): Remove variable length arrays. + +2013-11-29 Vladimir Serbinenko + + * util/grub-fstest.c: Remove variable length arrays. + +2013-11-29 Vladimir Serbinenko + + * grub-core/osdep/linux/ofpath.c: Check return value of read. + +2013-11-29 Vladimir Serbinenko + + * util/mkimage.c (grub_install_generate_image): Use grub_crypto_hash for + computing crc32 rather than handling with md fundtions directly. + +2013-11-29 Vladimir Serbinenko + + * util/mkimage.c (grub_install_generate_image): Use grub_crypto_hash for + checking fwstart.img rather than md fundtions directly. + +2013-11-29 Vladimir Serbinenko + + * util/grub-mkrescue.c (main): Check that fread succeeded. + +2013-11-29 Vladimir Serbinenko + + * conf/Makefile.common: Remove -mexplicit-relocs and + -DUSE_ASCII_FALLBACK on yeeloong. + + -DUSE_ASCII_FALLBACK is already added by font snippets. + -mexplicit-relocs isn't needed is compiler/assemblera are + configured properly. + If they're not we shouldn't attempt to fix it by ourselves. + Binary compare between before and after shows no difference. + +2013-11-29 Vladimir Serbinenko + + * grub-core/Makefile.core.def: Remove libgnulib.a and use its + sources in dependencies directly. + + This was the only instance of "library" in core config. A bug was + reported that -fno-stack-protector wasn't passed to it. Instead of + figuring out why it failed just remove this construction used + needlessly. + +2013-11-29 Vladimir Serbinenko + + * grub-core/osdep/unix/password.c (grub_password_get): Check that + fgets succeeded. + +2013-11-27 Francesco Lavra + + * docs/grub.texi (ls): Fix command description in case of a device name + passed as argument. + +2013-11-27 Vladimir Serbinenko + + Eliminate variable length arrays in grub_vsnprintf_real. + + A bit tricky because this function has to continue to work without + heap for short strings. Fixing prealloc to 32 arguments is reasonable + but make all stack references use 32-bit offset rather than 8-bit one. + So split va_args preparsing to separate function and put the prealloc + into the caller. + +2013-11-27 Vladimir Serbinenko + + Introduce grub_util_file_sync and use it instead of fsync(fileno(f)). + Fixes build for windows. + +2013-11-27 Vladimir Serbinenko + + * gentpl.py: Don't generate platform-dependent conditionals for + platform-independent targets. + +2013-11-27 Colin Watson + + * grub-core/osdep/unix/exec.c (grub_util_exec_redirect): Remove + references to mdadm from otherwise generic code. + (grub_util_exec_pipe): Likewise. + (grub_util_exec_pipe_stderr): Likewise. + * grub-core/osdep/unix/getroot.c (grub_util_pull_lvm_by_command): + This function calls vgs, not mdadm; adjust variable names + accordingly. + +2013-11-27 Colin Watson + + Generate Makefile.*.am directly from gentpl.py, eliminating the use + of Autogen. The Autogen definitions files remain intact as they + offer a useful abstraction. + +2013-11-27 Colin Watson + + Add grub_util_disable_fd_syncs call to turn grub_util_fd_sync calls + into no-ops, and use it in programs that copy files but do not need + to take special care to sync writes (grub-mknetdir, grub-rescue, + grub-mkstandalone). + +2013-11-26 Colin Watson + + * tests/util/grub-fs-tester.in: Execute xorriso from $PATH rather + than hardcoding /usr/local/bin/xorriso. + +2013-11-26 Vladimir Serbinenko + + Add PCI command activation to all PCI drivers as required for coreboot + and maybe some other firmwares. + +2013-11-26 Vladimir Serbinenko + + * grub-core/Makefile.am: Reduce gratuituous differences between Apple + and non-Apple variants of efiemu compile. + +2013-11-25 Andrey Borzenkov + + * configure.ac: Add explicit check for linking format of + efiemu64; save it as EFIEMU64_LINK_FORMAT. + * grub-core/Makefile.am: Use EFIEMU64_LINK_FORMAT instead of + hardcoding linking format. + +2013-11-25 Vladimir Serbinenko + + * util/grub-mknetdir.c: Look for platform directories under pkglibdir + and not pkgdatadir. + +2013-11-25 Colin Watson +2013-11-25 Vladimir Serbinenko + + Add a --locale-directory option to grub-install and related tools. + + * include/grub/util/install.h (GRUB_INSTALL_OPTIONS): Add + --locale-directory option. + (enum grub_install_options): Add + GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY. + * util/grub-install-common.c (grub_install_help_filter): Handle + GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY. + (grub_install_parse): Likewise. + (get_localedir): New function to check for a user-provided option + before trying grub_util_get_localedir. + (copy_locales): Use get_localedir rather than + grub_util_get_localedir. Handle differing locale directory layouts. + (grub_install_copy_files): Likewise. + +2013-11-25 Vladimir Serbinenko + + * grub-core/osdep/unix/platform.c (get_ofpathname): Trim ending newline. + Don't rely on PATH_MAX. + +2013-11-25 Vladimir Serbinenko + + * grub-core/genmoddep.awk: Use more portable && rather than and. + +2013-11-24 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S [__APPLE__]: Create _edata by placing + an object after data. While it doesn't seem right solution, it + works well enough and OSX isn't main compilation platform. + +2013-11-24 Vladimir Serbinenko + + * gentpl.py: Add -ed2016 in order to make objconv accept our binary. + While it doesn't seem right solution, it works well enough and + OSX isn't main compilation platform. + +2013-11-24 Vladimir Serbinenko + + * configure.ac: Add -static to LDFLAGS when using apple linker to + prevent it from pulling in dynamic linker. + +2013-11-24 Vladimir Serbinenko + + Apple assembly doesn't handle symbol arithmetic well. So define an + offset symbol in boot.S and use it. + +2013-11-24 Vladimir Serbinenko + + Apple assembly doesn't handle symbol arithmetic well. So instead + of getting addres of kernel_sector + 4 define kernel_sector_high. + It also makes code more readable. + +2013-11-24 Vladimir Serbinenko + + With Apple assembly in .macro environvemnt you have to use $$ instead + of $. So introduce new preprocessor macro MACRO_DOLLAR(x) which expands + to $$x on Apple and to $x on everything else. + +2013-11-24 Vladimir Serbinenko + + * grub-core/Makefile.am: Use correct TARGET_OBJCONV rather than + OBJCONV. + +2013-11-24 Vladimir Serbinenko + + * grub-core/gdb/i386/machdep.S: Use xorl %eax, %eax on both Apple + and non-Apple. This instruction is shorter and faster, + so no reason not to use it on both. + +2013-11-24 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c: Use section _text, _text rather than + .text when compiling for Apple. + +2013-11-24 Vladimir Serbinenko + + * grub-core/term/arc/console.c: Add missing cast to silence warning. + +2013-11-24 Vladimir Serbinenko + + * grub-core/boot/i386/pc/boot.S: Fix floppy probe. Due to missing + %dx restore the probe worked on non-existant drive. Reorganize the + code a little bit to free 2 bytes necessary for push/pop. + +2013-11-23 Vladimir Serbinenko + + * grub-core/kern/mips/arc/init.c (grub_machine_get_bootlocation): + Add missing cast to silence warning. + +2013-11-23 Keshav Padram Amburay + + * util/grub-install.c (update_nvram): Support --no-nvram flag + for EFI targets. + +2013-11-23 Vladimir Serbinenko + + * INSTALL: Add note about sparc64/ia64 with clang (unsupported). + +2013-11-23 Vladimir Serbinenko + + * util/garbage-gen.c: Add missing include of sys/time.h. + +2013-11-23 Vladimir Serbinenko + + Don't add -mflush-func if it's not supported by compiler. + +2013-11-23 Vladimir Serbinenko + + Move common BIOS/coreboot memory map declarations to + include/grub/i386/memory_raw.h and eliminate duplicate declarations. + +2013-11-22 Andrey Borzenkov + + * Makefile.am: Add util/garbage-gen.c to EXTRA_DIST. + +2013-11-22 Vladimir Serbinenko + + * INSTALL: Document why older clang versions aren't appropriate. + +2013-11-22 Vladimir Serbinenko + + * INSTALL: Document about clang for mips. + +2013-11-22 Vladimir Serbinenko + + * grub-core/lib/libgcrypt/mpi/longlong.h: Use C version with mips + clang. + +2013-11-22 Vladimir Serbinenko + + Add *-xen to the list of grub-install-common platforms. + +2013-11-22 Vladimir Serbinenko + + * configure.ac: Do not enforce -mcmodel=large. It's not necessarry with + 3 last commits. + +2013-11-22 Vladimir Serbinenko + + * grub-core/kern/xen/init.c: Do not map more pages than we can address. + +2013-11-22 Vladimir Serbinenko + + * grub-core/kern/efi/mm.c: Limit allocations to 2GiB when not compiling + with -mcmodel=large. + +2013-11-22 Vladimir Serbinenko + + * grub-core/kern/x86_64/dl.c (grub_arch_dl_relocate_symbols): Add + range-checking for 32-bit quantities. + +2013-11-22 Vladimir Serbinenko + + * configure.ac: Compile with -fPIC when compiling with clang on + mips. + +2013-11-22 Vladimir Serbinenko + + * configure.ac: Add -no-integrated-as on mips(el) to TARGET_CCASFLAGS + when compiling with clang. + +2013-11-22 Vladimir Serbinenko + + clang emits calls to abort () under some unknown conditions. + Export abort () when compiling with clang. + +2013-11-22 Vladimir Serbinenko + + * docs/grub-dev.texi: Document stack and heap sizes. + +2013-11-22 Vladimir Serbinenko + + * include/grub/i386/pc/memory.h: Decrease + GRUB_MEMORY_MACHINE_SCRATCH_SIZE and increase + GRUB_MEMORY_MACHINE_PROT_STACK_SIZE. + The binary doesn't change (checked). It's more to better reflect actual + usage. + +2013-11-22 Vladimir Serbinenko + + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_open): Ensure + at compile time that enough of scratch size is available. + +2013-11-22 Vladimir Serbinenko + + * grub-core/kern/x86_64/efi/callwrap.S: Fix stack alignment. + Previously we misaligned stack by 8 in startup.S and compensated + for it in callwrap.S. According to ABI docs (EFI and sysv amd64) + right behaviour is to align stack in startup.S and keep it aligned + in callwrap.S. startup.S part was committed few commits before. This + takes care of callwrap.S. + Reported by: Gary Lin. + +2013-11-22 Vladimir Serbinenko + + * grub-core/boot/mips/startup_raw.S: Handle the case of gap between + .data and .bss. May happen if compiler and assembly use different + alignment. + +2013-11-22 Vladimir Serbinenko + + On MIPS handle got16 relocations to local symbols in an ABI-compliant + way. + +2013-11-22 Vladimir Serbinenko + + Add support for a new magic symbol _gp_disp on mips to handle PIC + binaries. + +2013-11-22 Vladimir Serbinenko + + Use $t9 for indirect calls from asm to C as PIC ABI requires. + +2013-11-22 Vladimir Serbinenko + + Remove -march=mips3 from TARGET_CCASFLAGS as it creates linking problem + when rest of GRUB is compiled for hisher stepping. Instead use + .set mips3/.set mips1 around cache and sync opcodes. + +2013-11-21 Vladimir Serbinenko + + Unify GOT/trampoline handling between PPC, MIPS and IA64 as they + do essentially the same thing, do it in similar way. + +2013-11-21 Colin Watson + + * util/grub-mkrescue.c (main): If a source directory is not + specified, read platform-specific files from subdirectories of + pkglibdir, not pkgdatadir. + +2013-11-21 Colin Watson + + * grub-core/normal/progress.c: Remove unused file. + +2013-11-20 Vladimir Serbinenko + + * grub-core/lib/crypto.c (grub_crypto_hash): Remove variable length + array. + +2013-11-20 Vladimir Serbinenko + + * util/grub-mkconfig.in: Say explicit "grub configuration" rather + than grub.cfg. + +2013-11-20 Vladimir Serbinenko + + * coreboot.cfg: Add missing file. + +2013-11-19 Vladimir Serbinenko + + * Makefile.am: Allow STRIP to be empty when creating windowszip. + +2013-11-19 Axel Kellermann + + * util/grub.d/30_os-prober.in: Add GRUB_OS_PROBER_SKIP_LIST to + selectively skipping systems. + +2013-11-19 Colin Watson + + * Makefile.util.def (grub-mkimage): Add + grub-core/osdep/aros/config.c to extra_dist. + * conf/Makefile.extra-dist (EXTRA_DIST): Add docs/autoiso.cfg, + docs/osdetect.cfg, grub-core/gnulib-fix-null-deref.diff, + grub-core/gnulib-fix-width.diff, grub-core/gnulib-no-abort.diff, and + grub-core/gnulib-no-gets.diff. + +2013-11-19 Vladimir Serbinenko + + Add automated filesystem checking based on scripts I've used now for + quite some time locally. Most of the test require root so they are + skipped when run without necessarry privelegies. + +2013-11-19 Colin Watson + + * util/grub-install.c (main): Adjust info messages to match + installed paths of grub-bios-setup and grub-sparc64-setup. + +2013-11-19 Colin Watson + + * util/grub-install-common.c (copy_locales): Consistently use + grub_util_get_localedir () rather than LOCALEDIR. + (grub_install_copy_files): Likewise. + +2013-11-19 Josh Triplett + + * grub-core/kern/x86_64/efi/startup.S (_start): Align the stack to a + 16-byte boundary, as required by the x86-64 ABI, before calling + grub_main. In some cases, GCC emits code that assumes this + alignment, which crashes if not aligned. The EFI firmware is also + entitled to assume that stack alignment without checking. + +2013-11-18 Josh Triplett + + * grub-core/mmap/efi/mmap.c (grub_mmap_register): Round up/down to + 4k page boundaries as expected by firmware rather than 1k + boundaries. + (grub_mmap_malign_and_register): Likewise. + +2013-11-18 Vladimir Serbinenko + + * tests/grub_func_test.in: Decrease RAM size to 512M. With less + fragmentation 512M is enough. + +2013-11-18 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_real_malloc): Decrease cut-off of moving the + pointer to 32K. This is the size of cache element which is the most + common allocation >1K. This way the pointer is always around blocks + of 32K and so we keep performance while decreasing fragmentation. + +2013-11-18 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_real_malloc): Don't update the pointer to + current memory when allocating large chunks. This significantly + decreases memory fragmentation. + +2013-11-18 Colin Watson + + * tests/gzcompress_test.in: Skip if gzip is not installed (unlikely, + but for symmetry). + * tests/lzocompress_test.in: Skip if lzop is not installed. + * tests/xzcompress_test.in: Skip if xz is not installed. + +2013-11-18 Colin Watson + + * util/grub-mkrescue.c (main): Fix typo. + +2013-11-18 Vladimir Serbinenko + + * grub-core/kern/mips/qemu_mips/init.c (grub_machine_init): Update + clock frequency to 200 MHz, + +2013-11-18 Vladimir Serbinenko + + * tests/util/grub-shell.in: Increase console size to 1024x1024. + +2013-11-18 Vladimir Serbinenko + + * Makefile.am (default_payload.elf): Add pata to loaded modules. + Load config file from (cbfsdisk)/etc/grub.cfg. + +2013-11-18 Vladimir Serbinenko + + * util/grub-install-common.c (grub_install_copy_files): Fix module + destination directory. + +2013-11-18 Colin Watson + + * tests/util/grub-shell.in: Don't fail on emu platform if po/*.gmo + files have not been built. + +2013-11-18 Colin Watson + + * grub-core/osdep/unix/hostdisk.c (grub_util_make_temporary_file): + Handle errors from mkstemp. + (grub_util_make_temporary_dir): Handle errors from mkdtemp. + +2013-11-18 Vladimir Serbinenko + + * tests/util/grub-shell.in: Use -cdrom and don't force cdrom + on primary master on pseries. + +2013-11-18 Vladimir Serbinenko + + * grub-core/tests/videotest_checksum.c: Don't reload unifont if it's + already loaded. This saves memory needed for tests, + +2013-11-18 Vladimir Serbinenko + + * util/grub-mkrescue.c (main): Fix a typo to make yeeloong part + work again. + +2013-11-18 Vladimir Serbinenko + + * grub-core/term/terminfo.c (grub_cmd_terminfo): Fix a typo to make -g + work again. + +2013-11-18 Vladimir Serbinenko + + * tests/util/grub-shell.in: For powerpc tests put the CD-ROM as primary + master since with some combinations of qemu and firmware only primary + IDE channel is available. + +2013-11-18 Vladimir Serbinenko + + * grub-core/tests/gfxterm_menu.c: Skip high-resolution tests on + low-memory platforms where we don't have enough memory for them. + * grub-core/tests/videotest_checksum.c: Likewise. + +2013-11-18 Vladimir Serbinenko + + * grub-core/tests/cmdline_cat_test.c: Don't reload unifont if it's + already loaded. This saves memory needed for tests, + +2013-11-18 Vladimir Serbinenko + + Fix handling of install lists. + +2013-11-18 Vladimir Serbinenko + + * grub-core/lib/sparc64/setjmp.S: Force spilling of current window. + +2013-11-18 Vladimir Serbinenko + + On i386-ieee1275 we run in paged mode. So we need to explicitly map + the devices before accessing them. + +2013-11-18 Vladimir Serbinenko + + * grub-core/lib/relocator.c (grub_mm_check_real): Accept const char * + as file argument. + +2013-11-18 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_cmdline_get): Plug memory leak. + +2013-11-18 Vladimir Serbinenko + + * grub-core/kern/file.c (grub_file_open): Free file->name on failure. + (grub_file_close): Free file->name. + +2013-11-18 Vladimir Serbinenko + + * grub-core/commands/verify.c (free_pk): Plug memory leak. + (grub_load_public_key): Likewise. + (grub_verify_signature_real): Likewise. + (grub_cmd_verify_signature): Likewise. + +2013-11-18 Vladimir Serbinenko + + * grub-core/commands/legacycfg.c (grub_legacy_check_md5_password): Plug + memory leak. + +2013-11-18 Vladimir Serbinenko + + * grub-core/lib/powerpc/setjmp.S (grub_setjmp): Save r31. + (grub_longjmp): Restore r31. + * include/grub/powerpc/setjmp.h (grub_jmp_buf): Reserve space for r31. + +2013-11-18 Vladimir Serbinenko + + * util/grub-mkrescue.c (make_image_fwdisk_abs): Insert all partmap + modules to be in line with make_image_abs. + +2013-11-18 Vladimir Serbinenko + + * include/grub/mips/setjmp.h (grub_jmp_buf): Fix buffer size. + + setjmp.S uses 12 entries but buffer is declared with only 11 entries. + +2013-11-17 Ian Campbell + + * grub-core/disk/uboot/ubootdisk.c: Include SCSI disks. + +2013-11-17 Vladimir Serbinenko + + * tests/grub_func_test.in: Increase memory reservation as on EFI we need + to leave some memory to firmware. + +2013-11-17 Vladimir Serbinenko + + * grub-core/tests/cmdline_cat_test.c (cmdline_cat_test): Ignore errors + of loading gfxterm as gfxterm is embed in kernel on some platforms. + * grub-core/tests/gfxterm_menu.c (gfxterm_menu): Likewise. + Load gfxmenu. + +2013-11-17 Vladimir Serbinenko + + * tests/core_compress_test.in: Use full arguments as grub-mkimage-extra + now needs full arguments. + +2013-11-17 Vladimir Serbinenko + + * util/grub-mkrescue.c (main): Add trailing \n in + .disk_label.contentDetails to be in line with previous shell script. + +2013-11-17 Vladimir Serbinenko + + * util/grub-mkrescue.c (main): Use right source file for bootinfo.txt. + +2013-11-17 Vladimir Serbinenko + + * util/grub-install-common.c (grub_install_parse): Recognize + --compress=none like shell script did. + +2013-11-17 Vladimir Serbinenko + + * include/grub/misc.h: Replace check for __sparc64__ with one for + __sparc__ as __sparc64__ isn't actually defined. + +2013-11-17 Vladimir Serbinenko + + * tests/util/grub-shell.in: Use escc-ch-b on powerpc. This is missing + counterpart of fixing the naming of escc ports. + +2013-11-17 Vladimir Serbinenko + + * util/grub-install-common.c (platforms): Fix the order of entries and + remove useless field val. + +2013-11-16 Vladimir Serbinenko + + * util/grub-install.c: Add new option --no-bootsector to skip + installing of bootsector. Accept --grub-setup=/bin/true as + backwards-compatible synonym. + +2013-11-16 Andrey Borzenkov + + * util/grub-install.c (device_map_check_duplicates): Fix incorrect + order of qsort arguments (number of elements vs. element size). + +2013-11-16 Vladimir Serbinenko + + Rewrite grub-install, grub-mkrescue, grub-mkstandalone and grub-mknetdir + the function of these files exceeds what can be sanely handled in shell + in posix-comaptible way. Also writing it in C extends the functionality + to non-UNIX-like OS and minimal environments. + +2013-11-16 Vladimir Serbinenko + + * grub-core/kern/arm/cache.S: Don't switch back to ARM mode when + compiling to thumb2. + * grub-core/kern/arm/cache_armv7.S: Likewise. + * grub-core/lib/arm/setjmp.S: Likewise. + +2013-11-16 Leif Lindholm + + * grub-core/kern/arm/uboot/startup.S: delete superflouous save of r8 + in grub_uboot_syscall + +2013-11-16 Vladimir Serbinenko + + Decrease stack usage in lexer. + + We have only 92K of stack and using over 4K per frame is wasteful + + * grub-core/script/yylex.l (yyalloc), (yyfree), (yyrealloc): Declare + as macros so that compiler would remove useless structure on stack. + Better solution would be to fix flex not to put this structure on + the stack but flex is external program. + +2013-11-16 Vladimir Serbinenko + + Decrease stack usage in signature verification. + + We have only 92K of stack and using over 4K per frame is wasteful + + * grub-core/commands/verify.c (grub_load_public_key): Allocate on heap + rather than stack. + (grub_verify_signature_real): Likewise. + +2013-11-16 Vladimir Serbinenko + + Decrease stack usage in mdraid 0.9x. + + We have only 92K of stack and using over 4K per frame is wasteful + + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Allocate on heap + rather than stack. + +2013-11-16 Vladimir Serbinenko + + Decrease stack usage in BtrFS. + + We have only 92K of stack and using over 4K per frame is wasteful + + * grub-core/fs/btrfs.c (grub_btrfs_lzo_decompress): Allocate on heap + rather than stack. + +2013-11-16 Vladimir Serbinenko + + Decrease stack usage in JFS. + + We have only 92K of stack and using over 4K per frame is wasteful + + * grub-core/fs/jfs.c (getblk): Allocate on heap rather than on + stack. Note: this function is recursive. + (grub_jfs_read_inode): Read only part we care about. + +2013-11-16 Leif Lindholm + + * grub-core/kern/arm/uboot/startup.S: fix grub_uboot_syscall va_arg + handling + +2013-11-16 Andrey Borzenkov + + * configure.ac: Restore -nostdlib for libgcc symbols tests. + +2013-11-16 Andrey Borzenkov + + * docs/grub.texi (Environment): Document cmdpath. + +2013-11-16 Andrey Borzenkov + + * grub-core/kern/mips/arc/init.c (grub_machine_get_bootlocation): + Remove "unused" attribute from arguments, they are used. + +2013-11-15 Colin Watson + + * .gitignore: Only ignore grub-mk* at the top level. + +2013-11-15 Colin Watson + + * util/grub-reboot.in (usage): Fix a typo. + +2013-11-15 Vladimir Serbinenko + + Replace libgcc version of ctz with our own. + + On upcoming arm64 port libgcc ctz* are not usable in standalone + environment. Since we need ctz* for this case and implementation is + in C we may as well use it on all concerned platforms. + +2013-11-14 Vladimir Serbinenko + + * configure.ac: Probe for linking format rather than guessing it based + on target_os. + +2013-11-14 Vladimir Serbinenko + + * grub-core/disk/xen/xendisk.c (grub_xendisk_fini): Set state to + "1" prior to handoff. + + Reported by: M A Young. + +2013-11-14 Vladimir Serbinenko + + * grub-core/kern/xen/init.c (grub_xenstore_write_file): Don't add + \0 to all files. + + Reported by: M A Young. + +2013-11-14 Vladimir Serbinenko + + * grub-core/osdep/bsd/hostdisk.c (grub_util_get_fd_size_os): Fix + compilation on NetBSD. + +2013-11-14 Vladimir Serbinenko + + * acinclude.m4: Don't add -P on initial nm test. + + Note: even though this patch postdates Andrey's it bears 14 Nov as + date due to timezone difference. + +2013-11-15 Andrey Borzenkov + + * grub-core/Makefile.core.def (signature_test): Add missing + tests/signatures.h. + +2013-11-14 Colin Watson + + * util/grub-install_header: Set localedir here, since this file is + where it's used. + * util/grub-install.in: Remove setting of localedir. + * util/grub-mkrescue.in: Likewise. + +2013-11-14 Vladimir Serbinenko + + * Makefile.am (default_payload.elf): Add uhci, ohci and usb_keyboard. + +2013-11-14 Vladimir Serbinenko + + * configure.ac: Move nm checks to the end. + Call grub_PROG_NM_WORKS. + * acinclude.m4: New check grub_PROG_NM_WORKS. + Use $TARGET_CFLAGS -c when compiling test binary. + +2013-11-14 Colin Watson + + * util/getroot.c (grub_util_biosdisk_get_grub_dev) [__GNU__]: Remove + unused variables. + +2013-11-14 Matthew Garrett + + * grub-core/kern/main.c (grub_set_prefix_and_root): Set variable + cmdpath to firmware directory. + +2013-11-14 Vladimir Serbinenko + + * grub-core/kern/efi/efi.c (grub_efi_get_filename): Reset the pointer + at the start of second iteration. + +2013-11-14 Vladimir Serbinenko + + * grub-core/Makefile.am (efiemu64.o): Explicitly set link format. + +2013-11-14 Vladimir Serbinenko + + * Makefile.am (default_payload.elf): New target for easier coreboot + build. + +2013-11-14 Vladimir Serbinenko + + * grub-core/kern/arm/cache_armv6.S: Remove special handling for + clang (not necessarry with -no-integrated-as). + * include/grub/symbol.h [__arm__]: Likewise. + +2013-11-14 Vladimir Serbinenko + + * configure.ac: Use -no-integrated-as on arm with clang. + * INSTALL: Mention ARM compilation with clang. + +2013-11-14 Vladimir Serbinenko + + * conf/Makefile.common (CCASFLAGS_PLATFORM) [COND_arm]: Add + -mthumb-interwork. + +2013-11-14 Colin Watson + + * grub-core/fs/ext2.c (grub_ext2_read_block): Factor out common + code for indirect block handling. + + Saves 185 bytes on compressed image. + +2013-11-13 Paulo Flabiano Smorigo + + Fix make clean. + + * Makefile.am: Remove build-grub-* in make clean. + +2013-11-13 Paulo Flabiano Smorigo + + New files to gitignore. + + * .gitignore: Add build-grub-gen-asciih, build-grub-gen-widthspec, + build-grub-mkfont, and grub-emu-lite. Remove .bzrignore. + +2013-11-13 Leif Lindholm + + * grub-core/kern/arm/misc.S: Make thumb2-compatible. + +2013-11-13 Leif Lindholm + + * .gitignore: fix rules for .dep* and add *.a post git migration + +2013-11-13 Colin Watson + + * configure.ac (AM_INIT_AUTOMAKE): Require at least version 1.10.1, + to match INSTALL. + +2013-11-13 Colin Watson + + * grub-core/kern/misc.c: Don't redirect divisions in the + GRUB_UTIL case. + * include/grub/misc.h: Likewise. + +2013-11-13 Colin Watson + + * grub-core/osdep/unix/emuconsole.c (put): Pacify the compiler on + systems that require checking the return value of write. + +2013-11-13 Colin Watson + + * util/grub-install.in (efi_quiet): Fix inverted logic: make + efibootmgr quiet when --debug is not used, rather than when it is. + +2013-11-13 Colin Watson + + * gentpl.py (define_macro_for_platform_dependencies): Remove + first (and thus unused) of two definitions for this function. + (platform_dependencies): Likewise. + +2013-11-13 Colin Watson + + * acinclude.m4 (grub_apple_cc): Remove; since the removal of nested + functions, we only need to check this for the target, not the host. + * configure.ac (grub_apple_cc): Likewise. + +2013-11-13 Vladimir Serbinenko + + * grub-core/kern/arm/cache.c (probe_caches): Move asm part to ... + * grub-core/kern/arm/cache_armv6.S: ... here. This allows this + asm to stay in arm even if surrounding is thumb. + +2013-11-13 Vladimir Serbinenko + + * grub-core/kern/arm/misc.S: Add __muldi3 and __aeabi_lmul. Those + helper functions are needed for thumb. + +2013-11-13 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_make_raid): Make + level / 3 division explicitly unsigned. Saves few bytes. + +2013-11-13 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (ZAP_LEAF_NUMCHUNKS): Use unsigned arithmetics. + +2013-11-13 Vladimir Serbinenko + + * grub-core/normal/datetime.c (grub_get_weekday): Use if rather than + division. + +2013-11-13 Vladimir Serbinenko + + * grub-core/kern/uboot/init.c: Move grub_uboot_machine_type and + grub_uboot_boot_data to asm part. + +2013-11-13 Vladimir Serbinenko + + * grub-core/kern/arm/uboot/startup.S: Remove = by replacing with + literal load. + (grub_uboot_syscall): Save/restore r9 and align stack. + +2013-11-13 Vladimir Serbinenko + + * grub-core/kern/arm/cache.S: Replace = with explicit litteral load. + +2013-11-13 Vladimir Serbinenko + + * include/grub/symbol.h (END) [__arm__]: New macros. Replace all .end + occurencies with END. + +2013-11-13 Colin Watson + + * util/grub-editenv.c (help_filter, argp): Document how to delete + the whole environment block. + Reported by Dan Jacobson. Fixes Debian bug #726265. + +2013-11-13 Colin Watson + + * docs/grub.texi (Internationalisation, Supported kernels): Fix + sectioning. + +2013-11-13 Josh Triplett + + * grub-core/normal/term.c (grub_set_more): Use bool logic rather than + increment/decrement. + +2013-11-13 Vladimir Serbinenko + + * grub-core/kern/arm/cache_armv6.S [__clang__]: Don't add .armv6 when + compiling with clang. + +2013-11-13 Vladimir Serbinenko + + * grub-core/kern/arm/uboot/startup.S: Use .org rather than assigning + ".". + +2013-11-13 Vladimir Serbinenko + + Redirect all divisions to grub_divmod64. + +2013-11-12 Vladimir Serbinenko + + * grub-core/term/tparm.c (tparam_internal): Use unsigned divisions. + +2013-11-12 Vladimir Serbinenko + + Add missing includes of loader.h. + +2013-11-12 Vladimir Serbinenko + + * configure.ac: Allow disabling themes. + +2013-11-12 Lukas Schwaighofer + + * util/grub.d/20_linux_xen.in: Don't decompress initrd. + +2013-11-12 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c: Don't poll non-functional AT controller + until it becomes operational. + +2013-11-12 Vladimir Serbinenko + + * grub-core/Makefile.core.def (legacy_password_test): Disable + on platforms where no legacycfg is compiled. + * grub-core/tests/lib/functional_test.c: Tolerate failure to + load legacy_password_test. + +2013-11-12 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/efiemu/prepare.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/osdep/windows/hostdisk.c (grub_util_fd_strerror): Silence + strict-aliasing warning. + (fsync): Silence cast warning. + +2013-11-12 Vladimir Serbinenko + + * grub-core/commands/verify.c: Remove variable length arrays. + Load gcry_dsa/gcry_rsa automatically. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/signature_test.c: New test. + +2013-11-12 Vladimir Serbinenko + + * grub-core/disk/cryptodisk.c (luks_script_get): Adapt to new procfs + API. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/legacy_password_test.c (vectors): Make static. + * grub-core/tests/pbkdf2_test.c (vectors): Likewise. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/setjmp_test.c: Reset counter to 0 before starting. + +2013-11-12 Vladimir Serbinenko + + * grub-core/fs/proc.c: Allow \0 in proc files. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/xnu_uuid_test.c: Fix assert message. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/xnu_uuid_test.c: Fix copyright year. + +2013-11-12 Vladimir Serbinenko + + * grub-core/fs/ext2.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/lib/crypto.c (grub_crypto_cbc_decrypt): Remove variable + length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/disk/AFSplitter.c: Remove variable length arrays. + * grub-core/disk/cryptodisk.c: Likewise. + * grub-core/disk/geli.c: Likewise. + * grub-core/disk/luks.c: Likewise. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/legacy_password_test.c: New test. + * grub-core/commands/legacycfg.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/lib/pbkdf2.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/pbkdf2_test.c: New test. + +2013-11-12 Vladimir Serbinenko + + * grub-core/lib/xzembed/xz_dec_stream.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/io/lzopio.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * include/grub/crypto.h: Add maximums on hash size and cipher block + size. + +2013-11-12 Vladimir Serbinenko + + * grub-core/commands/xnu_uuid.c: Remove variable length arrays. + +2013-11-12 Vladimir Serbinenko + + * grub-core/tests/xnu_uuid_test.c: New test. + +2013-11-12 Vladimir Serbinenko + + * grub-core/commands/hashsum.c: Remove unneeded memset (zalloc already + covers it). + +2013-11-12 Vladimir Serbinenko + + * grub-core/commands/hashsum.c: Remove variable length arrays. + +2013-11-11 Vladimir Serbinenko + + * grub-core/tests/gfxterm_menu.c (gfxterm_menu): Handle out-of-memory + condition. + * tests/grub_func_test.in: Increase memory allocation. + +2013-11-11 Vladimir Serbinenko + + * grub-core/osdep/unix/getroot.c [HAVE_STRUCT_STATFS_F_FSTYPENAME + && HAVE_STRUCT_STATFS_F_MNTFROMNAME]: Include sys/param.h and + sys/mount.h. + +2013-11-11 Vladimir Serbinenko + + * grub-core/osdep/apple/hostdisk.c (grub_util_get_fd_size): Rename to .. + (grub_util_get_fd_size_os): ...this. + (grub_hostdisk_flush_initial_buffer): New empty function. + +2013-11-11 Vladimir Serbinenko + + * grub-core/gensyminfo.sh.in: Handle the case of portable output + without --defined-only. + +2013-11-11 Vladimir Serbinenko + + * grub-core/lib/i386/relocator_common.S [__APPLE__ && __x86_64__]: Use + rip-relative addressing in prologue. + +2013-11-11 Vladimir Serbinenko + + * include/grub/misc.h [__APPLE__]: Do not add regparm(0) on x86_64. + * grub-core/kern/misc.c (__bzero) [__APPLE__]: New function. + +2013-11-11 Vladimir Serbinenko + + * util/getroot.c (grub_util_biosdisk_get_grub_dev) [__APPLE__]: + Add missing semicolon. + +2013-11-11 Vladimir Serbinenko + + * util/grub-macho2img.c: Use plain fopen rather than grub_util_fopen. + +2013-11-11 Vladimir Serbinenko + + * configure.ac: Check for lzma.h for enabling liblzma and allow + manual disabling. + +2013-11-11 Vladimir Serbinenko + + Add missing includes of loader.h. + +2013-11-11 Fam Zheng + + * util/grub.d/30_os-prober.in: Add minix entry. + +2013-11-10 Vladimir Serbinenko + + * grub-core/loader/i386/coreboot/chainloader.c (load_segment): Use + right buffer for temporary load. + +2013-11-10 Vladimir Serbinenko + + * grub-core/loader/i386/coreboot/chainloader.c: Support tianocore. + +2013-11-10 Vladimir Serbinenko + + * grub-core/loader/i386/coreboot/chainloader.c: Support lzma-compressed + payload. + +2013-11-10 Vladimir Serbinenko + + * include/grub/lib/LzmaDec.h: Fix to include LzmaTypes.h and + not Types.h. + * grub-core/lib/LzmaDec.c: Fix prologue to make it compileable in GRUB + environment. + (LzmaDec_InitDicAndState): Make static. + +2013-11-10 Vladimir Serbinenko + + * util/grub-mkimagexx.c (generate_elf): Fix module address on coreboot. + +2013-11-10 Vladimir Serbinenko + + * grub-core/term/ieee1275/escc.c (GRUB_MOD_INIT): Fix order of channels. + + Reported by: Aaro Koskinen + +2013-11-10 Vladimir Serbinenko + + * docs/grub-dev.texi: Replace bzr references with git ones. + +2013-11-10 Andrey Borzenkov + + * docs/grub.texi (Simple configuration): Remove reference to + grub-reboot from saved default entry description - grub-default + does not use it anymore. + +2013-11-10 Vladimir Serbinenko + + * configure.ac: Make efiemu test cflags match the cflags efiemu is + compiled with. + +2013-11-10 Andrey Borzenkov + + * docs/grub.texi (Simple configuration): Document GRUB_DISABLE_SUBMENU. + +2013-11-10 Vladimir Serbinenko + + Fix grub_machine_fini bitrot. + + Reported by: Glenn Washburn. + +2013-11-10 Vladimir Serbinenko + + * configure.ac: Remove leftover -fnested-funcions -Wl,-allow_execute. + +2013-11-10 Vladimir Serbinenko + + * grub-core/Makefile.am (efiemu): Remove leftover -DAPPLE_CC and + -DELF. + * grub-core/efiemu/runtime/config.h: Use __i386__ and __x86_64__ + instead of ELF*. + +2013-11-10 Vladimir Serbinenko + + * configure.ac: Restore CFLAGS to TARGET_CFLAGS before external tests. + Add -march=core2 when testing compile of efiemu64. + + Thanks Andrey Borzenkov for spotting this. + +2013-11-09 Vladimir Serbinenko + + Add new ports: i386-xen and x86_64-xen. This allows running GRUB in + XEN PV environment and load kernels. + +2013-11-09 Vladimir Serbinenko + + * grub-core/loader/i386/multiboot_mbi.c: Handle space in command line. + * grub-core/loader/multiboot_mbi2.c: Likewise. + +2013-11-09 Vladimir Serbinenko + + * grub-core/lib/cmdline.c (grub_loader_cmdline_size): Fix empty cmdline + handling. + +2013-11-09 Vladimir Serbinenko + + * grub-core/commands/i386/cmostest.c: Add new command "cmosset". + + Tested by: Denis 'GNUtoo' Carikli. + +2013-11-08 Vladimir Serbinenko + + * grub-core/normal/datetime.c (grub_get_weekday): Use unsigned types. + +2013-11-08 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_circular_progress.c (parse_angle): + Use to get rounded angle rather than truncated. + +2013-11-08 Vladimir Serbinenko + + * grub-core/term/serial.c: Add option for enabling/disabling + RTS/CTS flow control. + +2013-11-08 Vladimir Serbinenko + + * grub-core/lib/libgcrypt/cipher/idea.c (mul_inv): Remove signed + divisions. + +2013-11-08 Vladimir Serbinenko + + * grub-core/lib/libgcrypt/mpi/mpih-div.c (_gcry_mpih_divrem): + Use grub_fatal rather than divide by zero. + * grub-core/lib/libgcrypt/mpi/mpi-pow.c (gcry_mpi_powm): Likewise. + +2013-11-08 Vladimir Serbinenko + + * include/grub/gui.h (grub_fixed_sfs_divide): Round rather than + truncate. + (grub_fixed_fsf_divide): Likewise. + +2013-11-08 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_list.c (draw_scrollbar): Avoid + division by-zero and senseless negative divisions. + +2013-11-08 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_circular_progress.c (circprog_paint): Avoid + division by-zero and senseless negative divisions. + (circprog_set_property): Don't accept negative num_ticks. + +2013-11-08 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_progress_bar.c (draw_pixmap_bar): Avoid + division by-zero and senseless negative divisions. + +2013-11-08 Vladimir Serbinenko + + * configure.ac: Use elf_*_fbsd on kfreebsd. + +2013-11-08 Vladimir Serbinenko + + * grub-core/tests/div_test.c: New test. + +2013-11-08 Vladimir Testov + + * grub-core/gfxmenu/gui_box.c: Updated to work with area status. + * grub-core/gfxmenu/gui_canvas.c: Likewise. + * grub-core/gfxmenu/view.c: Likewise. + * grub-core/video/fb/video_fb.c: Introduce new functions: + grub_video_set_area_status, grub_video_get_area_status, + grub_video_set_region, grub_video_get_region. + * grub-core/video/bochs.c: Likewise. + * grub-core/video/capture.c: Likewise. + * grub-core/video/video.c: Likewise. + * grub-core/video/cirrus.c: Likewise. + * grub-core/video/efi_gop.c: Likewise. + * grub-core/video/efi_uga.c: Likewise. + * grub-core/video/emu/sdl.c: Likewise. + * grub-core/video/radeon_fuloong2e.c: Likewise. + * grub-core/video/sis315pro.c: Likewise. + * grub-core/video/sm712.c: Likewise. + * grub-core/video/i386/pc/vbe.c: Likewise. + * grub-core/video/i386/pc/vga.c: Likewise. + * grub-core/video/ieee1275.c: Likewise. + * grub-core/video/i386/coreboot/cbfb.c: Likewise. + * include/grub/video.h: Likewise. + * include/grub/video_fb.h: Likewise. + * include/grub/fbfill.h: Updated render_target structure. + grub_video_rect_t viewport, region, area + int area_offset_x, area_offset_y, area_enabled + * include/grub/gui.h: New helper function + grub_video_bounds_inside_region. + * docs/grub-dev.texi: Added information about new functions. + +2013-11-08 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_real_malloc): Use AND rather than MOD + for alignment. + +2013-11-08 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (grub_reed_solomon_recover): Add + missing attribute. + * grub-core/gdb/cstub.c (grub_gdb_trap): Likewise. + +2013-11-08 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_divmod64): Don't fallback to + simple division on arm and ia64. + +2013-11-08 Vladimir Serbinenko + + * grub-core/kern/arm/misc.S (__aeabi_unwind_cpp_pr0): Add dummy to + link with libgcc. + +2013-11-08 Vladimir Serbinenko + + * include/grub/symbol.h (FUNCTION), (VARIABLE): Fix precedence logic. + +2013-11-08 Vladimir Serbinenko + + * include/grub/symbol.h (FUNCTION), (VARIABLE) [__arm__]: Use % as + prefix symbol, not @. + +2013-11-08 Vladimir Serbinenko + + * INSTALL: Add note about older gcc and clang. + +2013-11-08 Vladimir Serbinenko + + * tests/util/grub-shell.in: Boot as hdd on ppc by default. + +2013-11-08 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_add_module): Fix + NULL pointer dereference. + +2013-11-07 Vladimir Serbinenko + + * grub-core/Makefile.am: Do not include libgcc.h when compiling with + clang. + +2013-11-07 Vladimir Serbinenko + + * grub-core/kern/powerpc/dl.c: Add missing pragma to silence cast-align + warnings. + +2013-11-07 Vladimir Serbinenko + + * grub-core/net/net.c (grub_net_route_unregister): Remove unused + function. + * grub-core/loader/i386/xnu.c (hextoval): Likewise. + * grub-core/disk/geli.c (ascii2hex): Likewise. + +2013-11-07 Vladimir Serbinenko + + * configure.ac: Run linker tests without -Werror. + Define TARGET_LDFLAGS_STATIC_LIBGCC and TARGET_LIBGCC. + Change all occurences of -static-libgcc resp -lgcc to + TARGET_LDFLAGS_STATIC_LIBGCC resp TARGET_LIBGCC. + +2013-11-07 Vladimir Serbinenko + + * configure.ac: Don't add -no-itegrated-as on clang on non-x86. + +2013-11-07 Vladimir Serbinenko + + Allow compiling with clang (not really supported though). + + * conf/Makefile.common (CFLAGS_PLATFORM): Don't add -mrtd -mregparm=3 + unconditionally. + * configure.ac: Add -no-integrated-as when using clangfor asm files. + Add -mrtd -mregparm=3 on i386 when not using clang. + * grub-core/kern/misc.c (grub_memset): Add volatile when on clang. + +2013-11-07 Vladimir Serbinenko + + * grub-core/kern/ieee1275/cmain.c: Add explicit attribute on asm + bindings. + * grub-core/lib/reed_solomon.c: Likewise. + * include/grub/i386/gdb.h: Likewise. + * include/grub/i386/pc/int.h: Likewise. + * include/grub/i386/pc/pxe.h: Likewise. + * include/grub/ieee1275/ieee1275.h: Likewise. + +2013-11-07 Vladimir Serbinenko + + Import libgcrypt 1.5.3. + +2013-11-07 Vladimir Serbinenko + + * configure.ac: Don't add -Wcast-align on x86. + +2013-11-07 Vladimir Serbinenko + + * configure.ac: Add -freg-struct-return on all platforms that + support it. + +2013-11-07 Vladimir Serbinenko + + * acinclude.m4: Use -Werror on parameter tests. + * configure.ac: Likewise. + +2013-11-07 Vladimir Serbinenko + + * acinclude.m4: Add missing TARGET_CCASFLAGS on asm tests. + +2013-11-07 Vladimir Serbinenko + + * configure.ac: Check that -malign-loops works rather than assuming that + either -falign-loops or -malign-loops work. + +2013-11-07 Vladimir Serbinenko + + * configure.ac: Remove -fnested-functions. We don't need it anymore. + +2013-11-07 Vladimir Serbinenko + + * configure.ac: Prevent cflags leaking to subsequent tests by always + resetting cflags to target_cflags in target tests. + +2013-11-07 Vladimir Serbinenko + + * grub-core/kern/parser.c (grub_parser_split_cmdline): Remove nested + function. + +2013-11-07 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Remove nested functions. + +2013-11-07 Vladimir Serbinenko + + * grub-core/lib/arg.c (grub_arg_parse): Remove nested function. + +2013-11-07 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_cmdline_get): + Remove nested functions. + +2013-11-07 Vladimir Serbinenko + + * tests/test_sha512sum.in: Make it work on emu. + +2013-11-07 Vladimir Serbinenko + + * grub-core/normal/charset.c (bidi_line_wrap): Eliminate nested + functions. + (grub_bidi_line_logical_to_visual): Likewise. + +2013-11-07 Vladimir Serbinenko + + Remove vestiges of -Wunsafe-loop-optimisations. + + * conf/Makefile.common (CFLAGS_GNULIB): Remove + -Wno-unsafe-loop-optimisations. + * grub-core/commands/legacycfg.c: Remove -Wunsafe-loop-optimisations + pragma. + * grub-core/io/gzio.c: Likewise. + * grub-core/script/parser.y: Likewise. + * grub-core/script/yylex.l: Likewise. + * util/grub-mkfont.c: Likewise. + +2013-11-07 Vladimir Serbinenko + + * util/grub-mkfont.c (process_cursive): Remove nested function. + +2013-11-07 Vladimir Serbinenko + + * include/grub/misc.h (grub_dprintf): Use unnamed vararg. + (grub_boot_time): Likewise. + +2013-11-07 Vladimir Serbinenko + + * include/grub/symbol.h (FUNCTION): Use @function rather than + "function". + (VARIABLE): Likewise. + +2013-11-07 Vladimir Serbinenko + + * grub-core/net/bootp.c (OFFSET_OF): Explicitly cast to grub_size_t. + +2013-11-07 Vladimir Serbinenko + + * grub-core/net/bootp.c (set_env_limn_ro): Make pointer const. + (parse_dhcp_vendor): Likewise. + +2013-11-07 Vladimir Serbinenko + + * util/grub-mkimagexx.c (relocate_symbols): Remove unneeded brackets. + +2013-11-07 Vladimir Serbinenko + + * grub-core/gettext/gettext.c (main_context), (secondary_context): + Define after defining type and not before. + +2013-11-07 Vladimir Serbinenko + + * grub-core/fs/zfs/zfscrypt.c (grub_ccm_decrypt): Return right error + type. + (grub_gcm_decrypt): Likewise. + (algo_decrypt): Likewise. + (grub_zfs_decrypt_real): Transform error type. + +2013-11-07 Vladimir Serbinenko + + * grub-core/disk/geli.c (geli_rekey): Fix error return type. + +2013-11-07 Vladimir Serbinenko + + * grub-core/disk/usbms.c (grub_usbms_cbi_cmd): Fix error type. + (grub_usbms_cbi_reset): Likewise. + (grub_usbms_bo_reset): Likewise. + (grub_usbms_reset): Likewise. + (grub_usbms_attach): Likewise. + (grub_usbms_transfer_cbi): Likewise. + +2013-11-07 Vladimir Serbinenko + + * grub-core/io/lzopio.c (test_header): Simplify code and remove useless + "checksum = checksum;". + +2013-11-07 Vladimir Serbinenko + + * grub-core/fs/reiserfs.c (grub_reiserfs_iterate_dir): Fix type of + entry_type. + +2013-11-07 Vladimir Serbinenko + + * grub-core/commands/legacycfg.c (grub_cmd_legacy_kernel): Fix + BIOS disk check. + +2013-11-07 Vladimir Serbinenko + + * grub-core/bus/usb/ehci.c (grub_ehci_restore_hw): Return right enum + type. + (grub_ehci_fini_hw): Likewise. + * grub-core/bus/usb/usbhub.c (grub_usb_add_hub): Likewise. + +2013-11-07 Vladimir Serbinenko + + * include/grub/usb.h (grub_usb_controller_dev): Make portstatus + return grub_usb_err_t for cosistency. All users updated. + +2013-11-07 Vladimir Serbinenko + + * util/mkimage.c (SzAlloc): Use attribute unused rather than dubious + assigning to itself. + +2013-11-05 Gustavo Luiz Duarte +2013-11-05 Paulo Flabiano Smorigo + + Issue separate DNS queries for ipv4 and ipv6 + + Adding multiple questions on a single DNS query is not supportted by + most DNS servers. This patch issues two separate DNS queries + sequentially for ipv4 and then for ipv6. + + Fixes: https://savannah.gnu.org/bugs/?39710 + + * grub-core/net/bootp.c (parse_dhcp_vendor): Add DNS option. + * grub-core/net/dns.c (grub_dns_qtype_id): New enum. + * (grub_net_dns_lookup): Now using separated dns packages. + * (grub_cmd_nslookup): Add error condition. + * (grub_cmd_list_dns): Print DNS option. + * (grub_cmd_add_dns): Add four parameters: --only-ipv4, --only-ipv6, + --prefer-ipv4, and --prefer-ipv6. + * include/grub/net.h (grub_dns_option_t): New enum. + * (grub_net_network_level_address): option added. + +2013-11-05 Vladimir Testov + + * grub-core/video/fb/video_fb.c: Merge two blit functions + into one. + +2013-11-05 Vladimir Serbinenko + + * grub-core/term/terminfo.c: Add sequences for home and end. + +2013-11-05 Vladimir Serbinenko + + * grub-core/lib/legacy_parse.c: Fix handling of hercules and add + graphics console. + +2013-11-05 Vladimir Serbinenko + + * grub-core/video/i386/pc/vga.c: Fix double bufferring and + add mode 0x12. + +2013-11-04 Vladimir Serbinenko + + * docs/grub.texi (Vendor power-on keys): Add XPS M1330M based on old + e-mail by Per Öberg. + +2013-11-04 Vladimir Serbinenko + + * grub-core/commands/i386/nthibr.c (GRUB_MOD_INIT): Fix typo in command + name. + +2013-11-04 Andrey Borzenkov + + * configure.ac: Explicitly disable emusdl, emuusb and emupci on non- + emu platforms. + * grub-core/Makefile.core.def: Enable emupci and emuucb only for emu. + +2013-11-04 Vladimir Serbinenko + + * docs/grub.texi: Document usage of menuentry id. + +2013-11-04 Vladimir Serbinenko + + * docs/grub.texi: Add few mentions about EFI, debug and videoinfo. + +2013-11-04 Peter Lustig + + * grub-core/commands/i386/nthibr.c: New command. + +2013-11-04 Vladimir Serbinenko + + * grub-core/tests/video_checksum.c: Add 2560x1440 mode to testing. + +2013-11-04 Vladimir Serbinenko + + * include/grub/term.h (grub_term_coordinate): Extend to 16-bit per + coordinate. + +2013-11-04 Vladimir Serbinenko + + Support GRUB_DISABLE_SUBMENU config. + + Inspired by patch from Prarit Bhargava. + +2013-11-03 Vladimir Serbinenko + + * docs/grub.texi: Mention RSA support. + +2013-11-03 Vladimir Serbinenko + + * grub-core/commands/verify.c: Add RSA support. + +2013-11-03 Vladimir Serbinenko + + * grub-core/disk/ahci.c (grub_ahci_pciinit): Detect ATAPI devices. + * grub-core/disk/ata.c (grub_ata_identify): Use atapi_identify if + device is known to be ATAPI. + +2013-11-03 Mike Frysinger + + * configure.ac: Don't add target-prefix. + +2013-11-03 Vladimir Serbinenko + + * grub-core/commands/loadenv.c (grub_cmd_save_env): Remove unset + variables. + +2013-11-03 Vladimir Serbinenko + + * grub-core/gettext/gettext.c (grub_gettext_init_ext): Ignore errors + if language is English. + +2013-11-03 Vladimir Serbinenko + + * grub-core/osdep/linux/getroot.c: Fix cast-align problems. + +2013-11-02 Vladimir Serbinenko + + * configure.ac: Don't add -m32/-m64 on emu. + +2013-11-02 neil + + * grub-core/osdep/linux/blocklist.c: Include linux/types.h for some + broken linux headers. + +2013-11-02 Vladimir Serbinenko + + * util/grub.d/30_os-prober.in: Add unhiding of partition if on msdos. + +2013-11-02 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (grub_reed_solomon_recover): Don't do + Reed-Solomon recovery if more than half of redundancy info is 0. + +2013-11-02 Vladimir Serbinenko + + * util/grub-mount.c: Handle symlinks to directories. + +2013-11-02 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (find_file): Save ctx->next when calling + find_file recursively for symlink. + +2013-11-02 Vladimir Serbinenko + + * tests/util/grub-shell.in: Copy themes. + +2013-11-02 Vladimir Serbinenko + + * util/grub-mkimagexx.c (locate_sections): Reject mislinked images. + +2013-11-02 Vladimir Serbinenko + + * configure.ac: Use 0x8000 for address instead of 8000. + +2013-11-02 Vladimir Serbinenko + + * grub-core/loader/sparc64/ieee1275/linux.c (get_physbase): Fix + signature. + +2013-11-02 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c (grub_efidisk_readwrite): Remove unused + variable. + +2013-11-02 Vladimir Serbinenko + + * configure.ac (TARGET_CFLAGS): Add -march=i386 on i386. + +2013-11-02 Vladimir Serbinenko + + * grub-core/fs/hfspluscomp.c (hfsplus_read_compressed_real): Call + file_progress_read_hook. + * grub-core/fs/ntfscomp.c (hfsplus_read_compressed_real): Likewise. + +2013-11-02 Vladimir Serbinenko + + * conf/Makefile.common (CFLAGS_PLATFORM): Remove poisoning of float + and double. + +2013-11-01 Vladimir Serbinenko + + * grub-core/fs/tar.c (grub_cpio_read): Add read_hook. + +2013-11-01 Vladimir Serbinenko + + Rewrite blocklist functions in order to get progress when + reading large extents and decrease amount of blocklist hook calls. + +2013-11-01 Vladimir Serbinenko + + * grub-core/term/serial.c (options), (grub_cmd_serial): Fix handling + of SI suffixes. + +2013-11-01 Vladimir Serbinenko + + Support --base-clock for serial command to handle weird cards with + non-standard base clock. + +2013-11-01 Vladimir Serbinenko + + * grub-core/fs/ext2.c (grub_ext2_read_symlink): Use memcpy rather + strncpy. + * grub-core/fs/jfs.c (grub_jfs_lookup_symlink): Likewise. + * grub-core/kern/misc.c (grub_strncpy): Move from here ... + * include/grub/misc.h (grub_strncpy): ... to here. Make inline. + * grub-core/net/net.c (grub_net_addr_to_str): Use COMPILE_TIME_ASSERT + + strcpy rather than strncpy. + +2013-11-01 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (nvpair_name): Use correct type for size. + (check_pool_label): Likewise. Fixes overflow. + (nvlist_find_value): Fix comparison. + +2013-11-01 Vladimir Serbinenko + + * include/grub/misc.h (grub_strcat): Removed. All users changed to + more appropriate functions. + +2013-11-01 Vladimir Serbinenko + + * grub-core/kern/efi/efi.c (grub_efi_get_filename): Avoid inefficient + realloc. + +2013-11-01 Vladimir Serbinenko + + * util/grub-mkrescue.in: Do not use UUID search on EFI. + +2013-11-01 Vladimir Serbinenko + + * grub-core/kern/dl.c: Unify section-finding algorithm. Saves 30 bytes + on core size. + +2013-10-30 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_realloc): Don't copy more data than we have. + +2013-10-30 Vladimir Serbinenko + + * grub-core/io/gzio.c (huft_build): Use zalloc for safety. + (initialize_tables): reset tl and td to NULL after freeing. + +2013-10-28 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c: Implement network tag. + +2013-10-28 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c: Add EFI memory map to the list + of supported tags. + +2013-10-28 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c: Implement EFI memory map. + +2013-10-28 Vladimir Serbinenko + + * grub-core/loader/multiboot.c: Add support for multiboot kernels + quirks. + +2013-10-28 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (allocate_pages): Allocate at least + a page in protected space. + +2013-10-28 Vladimir Serbinenko + + * grub-core/loader/multiboot.c (grub_cmd_module): Don't attempt to + allocate space for zero-sized modules. + +2013-10-28 Vladimir Serbinenko + + * grub-core/loader/xnu_resume.c (grub_xnu_resume): Reject empty images. + +2013-10-28 Francesco Lavra + + * grub-core/lib/fdt.c: Fix miscellaneous bugs. + +2013-10-28 Vladimir Serbinenko + + * grub-core/lib/progress.c (grub_file_progress_hook_real): Add missing + safeguards. Fixes a crash with i386/pc/console.c. + +2013-10-28 Vladimir Serbinenko + + * include/grub/emu/hostdisk.h: Add proper declaration for grub_host_init + and grub_hostfs_init. + +2013-10-28 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_check_file_presence): Use + windows method on other platforms without good stat as well. + +2013-10-28 Vladimir Serbinenko + + * grub-core/osdep/linux/getroot.c: Add new btrfs defines. + +2013-10-28 Vladimir Serbinenko + + Make / in btrfs refer to real root, not the default volume. + Modify mkrelpath to work even if device is mounted with subvolid option. + +2013-10-28 Andrey Borzenkov + + * Makefile.util.def: Add grub-core/kern/disk_common.c to library + extra_dist. + * grub-core/Makefile.core.def: Add kern/disk_common.c to disk module + extra_dist. + +2013-10-27 Vladimir Serbinenko + + * util/grub-mkfont.c (main): Show error message when FT_Set_Pixel_Sizes + fails. + +2013-10-27 BVK Chaitanya + + * docs/autoiso.cfg: New file. + +2013-10-27 Vladimir Serbinenko + + * configure.ac: Remove leftover COND_BUILD_GRUB_MKFONT and + COND_GRUB_PE2ELF conditions. + +2013-10-27 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c (grub_cmd_openbsd): Accept "sd", "cd", + "vnd", "rd" and "fd" disks. + +2013-10-27 Vladimir Serbinenko + + Move grub_disk_write out of kernel into disk.mod. + +2013-10-27 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Unify int and wchar + handling. + +2013-10-27 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_abort): Make static + +2013-10-27 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Don't attempt to + transform invalid unicode codepoints. + +2013-10-27 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Remove needless explicit + \0 checking. + +2013-10-27 Vladimir Serbinenko + + * grub-core/lib/legacy_parse.c: Add support for "nd" disk. + +2013-10-26 Vladimir Serbinenko + + Consolidate cpuid code. + +2013-10-26 Vladimir Serbinenko + + Move cpuid code to cpuid.h and TSC code to tsc.c. + +2013-10-26 Grégoire Sutre + + * util/grub.d/00_header.in: Don't use LANG if it's not set. + +2013-10-26 Grégoire Sutre + + * util/grub-mkconfig.in: Replace $0 with $self. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + +2013-10-26 BVK Chaitanya + + * docs/osdetect.cfg: New file. + +2013-10-26 BVK Chaitanya + + * tests/util/grub-shell.in: Add new --debug option. + +2013-10-26 BVK Chaitanya + + * tests/test_unset.in: New test. + +2013-10-26 BVK Chaitanya + + * tests/test_sha512sum.in: New test. + +2013-10-26 Vladimir Serbinenko + + * grub-core/fs/iso9660.c: Replace strncat with memcpy. + * include/grub/misc.h: Remove strncat. + * grub-core/lib/posix_wrap/string.h: Likewise. + +2013-10-26 Vladimir Serbinenko + + * grub-core/net/tftp.c: Retransmit ack when rereceiving old packet. + Try to handle more than 0xFFFF packets. + Reported by: Bernhard Übelacker . + He also spotted few overflows in first version of this patch. + +2013-10-26 Vladimir Serbinenko + + * tests/date_unit_test.c: New test. + +2013-10-26 Vladimir Serbinenko + + * grub-core/normal/datetime.c (grub_unixtime2datetime): Fix mishandling + of first three years after start of validity of unixtime. + +2013-10-26 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (get_logical_num_lines): Use unsigned + division as the one making more sense. + (update_screen): Likewise. + (complete): Likewise. + +2013-10-25 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (complete): Make sure that width is >0. + +2013-10-25 Vladimir Serbinenko + + Make char and string width grub_size_t rather than grub_ssize_t. + +2013-10-25 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_history_get): Make argument into + unsigned. + (grub_history_replace): Likewise. + +2013-10-25 Vladimir Serbinenko + + * grub-core/disk/raid6_recover.c: Use unsigned arithmetics when + appropriate. + +2013-10-25 Vladimir Serbinenko + + * grub-core/video/bitmap_scale.c: Use unsigned arithmetics when + appropriate. + +2013-10-25 Vladimir Serbinenko + + * grub-core/video/fb/fbblit.c: Use (255 ^ x) rather than (255 - x). + Use unsigned divisions rather than signed variants. + +2013-10-25 Vladimir Serbinenko + + * grub-core/video/readers/png.c (grub_png_convert_image): Use + unsigned arithmetics. + Add missing break. + +2013-10-25 Vladimir Serbinenko + + * grub-core/video/readers/jpeg.c: Use unsigned where appropriate. + +2013-10-25 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (xor_out): Use unsigned modular arithmetics + rather than signed one. + (recovery): Likewise. + +2013-10-25 Vladimir Serbinenko + + * grub-core/net/dns.c (hash): Use unsigned arithmetic. + +2013-10-25 Vladimir Serbinenko + + * grub-core/io/gzio.c (test_zlib_header): Use undigned modulo rather + than signed. + +2013-10-25 Jon McCune + + * docs/grub.texi: Cleanup security documentation around signatures. + +2013-10-25 Vladimir Serbinenko + + * grub-core/fs/ext2.c (EXT2_BLOCK_SIZE): Make unsigned. + +2013-10-25 Vladimir Serbinenko + + * grub-core/commands/gptsync.c (lba_to_chs): Use proper types rather + than int. + +2013-10-25 Vladimir Serbinenko + + * conf/Makefile.common (CPPFLAGS_KERNEL): Add -DGRUB_KERNEL=1. + * include/grub/dl.h (GRUB_MOD_INIT), (GRUB_MOD_FINI): Define + functions when compiling for kernel. + +2013-10-25 Vladimir Serbinenko + + * grub-core/lib/progress.c (grub_file_progress_hook_real): Cast to + unsigned long long when using %llu. + +2013-10-25 Vladimir Serbinenko + + * grub-core/lib/progress.c (grub_file_progress_hook_real): Refresh + terminal after updating progress. + +2013-10-25 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S (grub_gate_a20): Remove + argument. We don't disable Gate A20 in this code. + +2013-10-25 Vladimir Serbinenko + + * grub-core/boot/i386/qemu/boot.S: Ensure that A20 is enabled. + Conceptually based on change in branch "vbe-on-coreboot". + +2013-10-24 Robert Millan + + * grub-core/video/i386/pc/vbe.c (grub_video_vbe_setup): Replace + numeric constants with their symbolic equivalent. + Taken from branch "vbe-on-coreboot". + +2013-10-22 Vladimir Serbinenko + + * docs/grub.texi: Fix ordering and use pxref rather than xref. + +2013-10-22 Vladimir Serbinenko + + * grub-core/lib/progress.c (grub_file_progress_hook_real): Use + divmod64 for offset division. + +2013-10-22 Paulo Flabiano Smorigo + + Rename .bzrignore to .gitignore. Add "*.o" rule. + + * .bzrignore: Renamed to... + * .gitignore: ...this. + +2013-10-22 Paulo Flabiano Smorigo + + Add new progress module that displays the load progress of files. + + * grub-core/lib/progress.c: New file. + * grub-core/Makefile.core.def (progress): New module. + * grub-core/kern/file.c (grub_file_open): File name added. + * (grub_file_read): Progress hook added. + * grub-core/fs/cbfs.c (grub_cbfs_read): Likewise. + * grub-core/fs/cpio_common.c (grub_cpio_read): Likewise. + * grub-core/net/net.c (grub_net_fs_read_real): Likewise. + * include/grub/file.h (struct grub_file): Add progress module members. + * include/grub/term.h (struct grub_term_output): Likewise. + * grub-core/osdep/unix/emuconsole.c (grub_console_term_output): + Terminal velocity added. + * grub-core/osdep/windows/emuconsole.c (grub_console_term_output): Likewise. + * grub-core/term/arc/console.c (grub_console_term_output): Likewise. + * grub-core/term/efi/console.c (grub_console_term_output): Likewise. + * grub-core/term/gfxterm.c (grub_video_term): Likewise. + * grub-core/term/i386/coreboot/cbmemc.c (grub_cbmemc_term_output): Likewise. + * grub-core/term/i386/pc/console.c (grub_console_term_output): Likewise. + * grub-core/term/i386/pc/vga_text.c (grub_vga_text_term): Likewise. + * grub-core/term/ieee1275/console.c (grub_console_term_output): Likewise. + * grub-core/term/morse.c (grub_audio_term_output): Likewise. + * grub-core/term/serial.c (grub_serial_term_output): Likewise. + * grub-core/term/spkmodem.c (grub_spkmodem_term_output): Likewise. + * grub-core/term/uboot/console.c (uboot_console_term_output): Likewise. + +2013-10-22 Vladimir Serbinenko + + Verify signatures of signatures unless --skip-sig is specified. + +2013-10-21 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Remove needless explicit + \0 checking. + + Saves 70 bytes on compressed image. + +2013-10-21 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_strtoull): Remove needless *ptr != 0 + check. + + Saves 10 bytes on compressed image. + +2013-10-21 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_isprint): Move to ... + * include/grub/misc.h (grub_isprint): ... here. Make inline. + + Saves 20 bytes on compressed image due to remving exporting. + +2013-10-21 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (grub_ntfs_mount): Remove redundant check. + + Saves 5 bytes on compressed image. + +2013-10-21 Vladimir Serbinenko + + * grub-core/fs/ntfs.c: Move common UTF-16 handling to a separate + function get_utf8. + + Saves 379 bytes on compressed image. + +2013-10-21 Vladimir Serbinenko + + * grub-core/fs/ntfs.c: Handle 48-bit MFT no. + +2013-10-21 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (read_run_data): Rewrite using bitfields. + + Saves 40 bytes on compressed image. + +2013-10-21 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (grub_ntfs_iterate_dir): Use grub_uint8_t for + mask rather than 64-bit type. + + Saves 20 bytes on compressed image. + +2013-10-21 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (read_data): Move code for compressed data to ... + * grub-core/fs/ntfscomp.c (ntfscomp): ... here. + + Saves 273 bytes on compressed image. + +2013-10-20 Vladimir Serbinenko + + * grub-core/kern/disk.c (grub_disk_write): Use malloc/free instead of + variable length arrays. + + Saves 50 bytes on compressed image. + +2013-10-20 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c: Remove variable length arrays. + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/ufs.c: Remove variable length arrays. + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/ntfs.c: Add comment about fixed allocation size. + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/zfs.c: Remove variable length arrays. + Reduces zfs.mod by 160 bytes (208 compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (check_pool_label): Fix memory leak. + +2013-10-20 Vladimir Serbinenko + + * grub-core/net/arp.c: Remove variable length arrays. + * grub-core/net/bootp.c: Likewise. + * grub-core/net/dns.c: Likewise. + * grub-core/net/icmp6.c: Likewise. + * grub-core/net/net.c: Likewise. + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/ntfs.c: Remove variable length arrays. + Increases ntfs.mod by 64 bytes (but decreases by 3 when + compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/hfs.c: Remove variable length arrays. + Reduces hfs.mod by 8 bytes (52 compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/udf.c: Remove variable length arrays. + Increases udf.mod by 128 bytes (but decreases by 13 when + compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/iso9660.c: Remove variable length arrays. + Increases iso9660.mod by 200 bytes (but decreases by 79 when + compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c: Remove variable length arrays. + Increases nilfs2.mod by 24 bytes (but decreases by 115 when + compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/xfs.c: Remove variable length arrays. + Reduces xfs.mod by 40 bytes (43 compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/fshelp.c: Remove variable length arrays. + Reduces fshelp.mod by 116 bytes (23 compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/normal/completion.c: Remove variable length arrays. + * grub-core/normal/menu_entry.c: Likewise. + + Reduces normal.mod by 496 bytes. + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/minix.c: Remove variable length arrays. Reduces jfs.mod + by 356 bytes (158 compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/jfs.c: Remove variable length arrays. Reduces jfs.mod + by 364 bytes (169 compressed). + +2013-10-20 Vladimir Serbinenko + + * grub-core/fs/bfs.c: Remove variable length arrays. Reduces afs.mod and + bfs.mod size by 556 resp 740 bytes (288 resp 334 compressed). + * include/grub/types.h (grub_unaligned_uint64_t): New type. + +2013-10-19 Vladimir Serbinenko + + Lift 255x255 erminal sie restriction to 65535x65535. Also change from + bitmasks to small structures of size chosen to fit in registers. + +2013-10-19 Vladimir Serbinenko + + * conf/Makefile.common: Use -freg-struct-return on i386. This + decreases code size and improves performance. + +2013-10-19 Vladimir Serbinenko + + * grub-core/osdep/unix/exec.c: Fix compilation error on emu. + +2013-10-19 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Fix formatting of + "(null)" string. + Simplify expressions to save around 256 bytes in kernel.img. + * tests/printf_unit_test.c (printf_test): Add "(null)" tests. + +2013-10-19 Vladimir Serbinenko + + * grub-core/tests/video_checksum.c (grub_video_capture_write_bmp): + Use GRUB_UTIL_FD_O_* rather than O_*. + +2013-10-19 Vladimir Serbinenko + + Add haiku-specific functions. + +2013-10-19 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c: Remove few leftover includes. + +2013-10-19 Vladimir Serbinenko + + Move stat () and device mode checking into OS-dependent files as + long as performance doesn't suffer. + +2013-10-19 Vladimir Serbinenko + + Split make_system_path_relative_to_its_root into separate file + relpath.c from getroot.c as it's common between unix and haiku + but otherwise haiku doesn't use any functions from unix getroot.c. + +2013-10-19 Vladimir Serbinenko + + * grub-core/osdep/aros/hostdisk.c (grub_util_is_directory): + New function. + (grub_util_is_special_file): Likewise. + +2013-10-19 Vladimir Serbinenko + + * grub-core/osdep/unix/getroot.c: Move exec functions to ... + * osdep/unix/exec.c: ... here. Add few additional exec_* variants. + +2013-10-19 Vladimir Serbinenko + + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h: Define size_t to + grub_size_t. This fixes the case when size_t mismatches grub_size_t. + +2013-10-19 Vladimir Serbinenko + + * util/grub-mkimagexx.c (make_reloc_section): Fix memory leak. + (load_image): Likewise. + +2013-10-19 Vladimir Serbinenko + + * util/grub-render-label.c: Move backend part to ... + * util/render-label.c: ... here. + +2013-10-18 Vladimir Serbinenko + + * grub-core/osdep/random.c: Use unix/random.c on haiku. Haiku uses + yarrow (by B. Schneier et al) for its /dev/urandom (similar to FreeBSD). + +2013-10-18 Vladimir Serbinenko + + * grub-core/osdep/generic/blocklist.c: Add missing include to string.h. + +2013-10-18 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name): Handle + CD-ROM in case when it's declared as having subpartitions. + +2013-10-18 Vladimir Serbinenko + + Don't add -lm on haiku. + + * configure.ac: Define BUILD_LIBM to -lm on most platforms + and empty on haiku. + * grub-core/Makefile.am (gentrigtables): Use $(BUILD_LIBM) rather than + -lm. + +2013-10-18 Vladimir Serbinenko + + * configure.ac: Use -melf_*_haiku as target on haiku. + +2013-10-18 Vladimir Serbinenko + + * Makefile.util.def: Add util/setup.c to extra_dist. + +2013-10-18 Vladimir Serbinenko + + * grub-core/kern/i386/pc/mmap.c (grub_machine_mmap_iterate): Pass + unknown types through. + +2013-10-18 Vladimir Serbinenko + + * grub-core/osdep/unix/getroot.c (grub_util_check_block_device): Remove. + (grub_util_check_char_device): Likewise. + * include/grub/emu/getroot.h: Likewise. + +2013-10-18 Vladimir Serbinenko + + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h: Use define for defining + memset rather than inline static function. + +2013-10-18 Vladimir Serbinenko + + * grub-core/lib/xzembed/xz_config.h: Enable all bcj filters when + not doing embedded decompressor. + +2013-10-18 Vladimir Serbinenko + + * grub-core/disk/ldm.c: Rename variables and arguments to prevent + shadowing. + * grub-core/kern/disk.c: Likewise. + * grub-core/kern/misc.c: Likewise. + * include/grub/parser.h: Likewise. + * include/grub/script_sh.h: Likewise. + * include/grub/zfs/zfs.h: Likewise. + +2013-10-18 Vladimir Serbinenko + + * grub-core/disk/luks.c (configure_ciphers): Fix spurious warning. + +2013-10-18 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs_lz4.c: Check that __INTEL_COMPILER is + defined before trying to use it. + +2013-10-18 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_create_node): Fix uninited value + warning. + +2013-10-18 Vladimir Serbinenko + + * include/grub/dl.h: Remove double declaration of GRUB_MOD_DEP. + Use __unused__ rather than __used__ on gcc < 3.2. + +2013-10-18 Vladimir Serbinenko + + * include/grub/setjmp.h: Define RETURNS_TWICE. Keep it empty for + gcc < 4.0. + * include/grub/*/setjmp.h: USe RETURNS_TWICE. + +2013-10-18 Vladimir Serbinenko + + * grub-core/disk/dmraid_nvidia.c: Fix potentially uninited "layout". + +2013-10-18 Vladimir Serbinenko + + * include/grub/misc.h: Don't use warn_unused_result on gcc < 3.4. + * include/grub/emu/misc.h: Likewise. + +2013-10-18 Vladimir Serbinenko + + * grub-core/term/i386/pc/vga_text.c: Remove extra declaration of + cur_color. + +2013-10-18 Vladimir Testov + + * grub-core/tests/checksums.h: Regenerated due to progress bar + get_minimal_size changes. + +2013-10-17 BVK Chaitanya + + Added `tr' command support. + + * grub-core/commands/tr.c: New file. + * grub-core/Makefile.core.def: Build rules for new module. + + * tests/grub_cmd_tr.in: New test. + * Makefile.util.def: Build rules for new test. + +2013-10-17 Vladimir Testov + + * grub-core/gfxmenu/gui_progress_bar.c: Sanity checks added. + +2013-10-17 Vladimir Testov + + * grub-core/gfxmenu/gui_progress_bar.c: New option ``highlight_overlay`` + * docs/gurb.texi: Likewise. + +2013-10-17 Vladimir Testov + + * grub-core/gfxmenu/gui_progress_bar.c (draw_pixmap_bar): Fixed bug. + Pixmap highlighted section with east and west slices was displayed + incorrectly due to negative width of the central slice. + +2013-10-17 Vladimir Testov + + * docs/grub.texi: Graphical options information update. + Removed outdated. Updated current. Inserted missed. + +2013-10-17 Vladimir Serbinenko + + * docs/grub.texi: Mention few new platform-specific commands. + +2013-10-17 Vladimir Serbinenko + + * grub-core/script/yylex.l: Fix LSQBR2 and RSQBR2. It's not + currently used so this doesn't really have any effect. + Reported by: Douglas Ray + +2013-10-17 Vladimir Serbinenko + + * autogen.sh: Don't set LC_CTYPE as it doesn't create problem for + compilation but prevents gcc from displaying messages in non-Latin + alphabets. + * conf/Makefile.common: Likewise. + +2013-10-16 Hiroyuki YAMAMORI + + Handle Japanese special keys. + Reported by: Hiroyuki YAMAMORI. + Codes supplied by: Hiroyuki YAMAMORI. + +2013-10-16 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Scrollbar sanity checks added. + +2013-10-16 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: New option `item_pixmap_style`. + * docs/grub.texi: Likewise. + +2013-10-16 Vladimir Serbinenko + + * grub-core/osdep/unix/hostdisk.c (grub_util_fd_read): Return correct + value in case of incomplete read. + (grub_util_fd_write): Likewise. + +2013-10-15 Vladimir Serbinenko + + * util/editenv.c (grub_util_create_envblk_file): Use grub_util_rename. + +2013-10-15 Vladimir Serbinenko + + * util/grub-editenv.c (create_envblk_file): More from here ... + * util/editenv.c (grub_util_create_envblk_file): ... to here. + +2013-10-15 Vladimir Serbinenko + + * grub-core/osdep/unix/getroot.c (grub_guess_root_devices): + canonicalize file name before doing the rest. + +2013-10-15 Vladimir Serbinenko + + * include/grub/osdep/hostfile_windows.h: Add missing ftello for + mingw32. + +2013-10-15 Vladimir Serbinenko + + Define grub_util_is_directory/regular/special_file and + use OS-dependent versions rather than to rely on stat(). + +2013-10-15 Vladimir Serbinenko + + * util/grub-mkimage.c: Move backend part to ... + * util/mkimage.c: ... here. + +2013-10-15 Vladimir Serbinenko + + Allow compilation with mingw64 albeit with warnings due to lack of + %llx/%llu. + + * grub-core/gnulib/msvc-inval.c: Use __cdecl rather than cdecl. + * grub-core/lib/posix_wrap/wchar.h: Define wint_t. + * grub-core/lib/posix_wrap/wctype.h: Define wctype_t. + * include/grub/osdep/hostfile_windows.h: Don't define fseeko/ftello + on mingw64. + * include/grub/types.h: Allow sizeof (long) != sizeof (void *). + +2013-10-15 Vladimir Serbinenko + + Remove leftover references to some of the system headers. + +2013-10-15 Vladimir Serbinenko + + * grub-core/disk/geli.c (grub_util_get_geli_uuid): Close handle after + read. + +2013-10-15 Vladimir Serbinenko + + * grub-core/disk/cryptodisk.c: Use grub_util_fd_strerror instead + of strerror. + +2013-10-15 Vladimir Serbinenko + + Split out blocklist retrieving from setup.c to + grub-core/osdep/blocklist.c and add windows implementation since + generic version doesn't work on NTFS on Windows due to aggressive + unflushable cache. + +2013-10-15 Vladimir Serbinenko + + Split grub-setup.c into frontend (grub-setup.c) and backend (setup.c) + files. + +2013-10-15 Vladimir Serbinenko + + * grub-core/osdep/windows/hostdisk.c (grub_util_fd_strerror): + Cut tailing newline. Remove arbitrary limitation. Always use + grub_util_tchar_to_utf8. + +2013-10-15 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Handle %% properly. + * tests/printf_unit_test.c (printf_test): Add %% tests. + Reported by: Paulo Flabiano Smorigo. + +2013-10-15 Vladimir Serbinenko + + * grub-core/osdep/windows/hostdisk.c (fsync) [__MINGW32__]: Really + implement fsync. + +2013-10-15 Vladimir Serbinenko + + * configure.ac: Check for nvlist_lookup_string in nvpair since we + use nvlist_lookup_string and don't use nvlist_print. + +2013-10-15 Vladimir Serbinenko + + Add wrappers around rename, unlink, mkdir, opendir, readdir and + closedir to handle filename charset translation. + +2013-10-15 Vladimir Serbinenko + + * include/grub/emu/hostdisk.h: Move file operations to + * include/grub/emu/hostfile.h: ... here. + +2013-10-15 Vladimir Serbinenko + + * grub-core/osdep/windows/hostdisk.c (canonicalize_file_name): Handle + unicode path. + +2013-10-15 Vladimir Serbinenko + + * grub-core/tests/checksums.h: Regenerate due to swiss.sed change. + +2013-10-15 Vladimir Serbinenko + + Move cpu time retrieval to separate grub_util_get_cpu_time_ms + and remove export.h. + +2013-10-15 Vladimir Serbinenko + + * grub-core/kern/emu/error.c: Removed. + * grub-core/Makefile.core.def (kernel): Don't add error.c and progname.c + explicitly as it's already in libgnu.a. + +2013-10-15 Vladimir Serbinenko + + * grub-core/osdep/windows/emuconsole.c: Add missing config.h and + config-util.h include. + +2013-10-15 Vladimir Serbinenko + + Split emunet into platform-dependent and GRUB-binding parts. Keep + platform-dependent part in kernel for easy access to OS functions. + +2013-10-15 Vladimir Serbinenko + + * grub-core/tests/video_checksum.c: Use grub_util_fd_* rather than + open/read/write. + +2013-10-14 Vladimir Serbinenko + + * grub-core/osdep/windows/emuconsole.c: New file. + +2013-10-14 Andrey Borzenkov + + * conf/Makefile.extra-dist: Add osdep/*/init.c + +2013-10-14 Vladimir Serbinenko + + * Makefile.am: Use TARGET_OBJCOPY when doing objcopy for target. + +2013-10-14 Vladimir Serbinenko + + * util/grub-probe.c (probe): Separate different drives in hint-str + by spaces and not newlines. + * util/grub-mkconfig_lib.in: Handle multidevice filesystem. + +2013-10-14 Andrey Borzenkov + + * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name): + Handle CD-ROMs. + +2013-10-14 Vladimir Serbinenko + + Pass-through unknown E820 types. It required reorganisation of mmap + module. + +2013-10-14 Andrey Borzenkov + + * Makefile.util.def: Add osdep/init.c to grub-mount files. + +2013-10-14 Vladimir Serbinenko + + Make grub_util_fd_seek match behaviour of other grub_util_fd_* and + fseeko. + +2013-10-14 qwertial + + * grub-core/gdb_grub.in: Fix overflow and wrong field. + +2013-10-14 Jon McCune + + * docs/grub.texi: Document new signatures possibility. + +2013-10-14 Vladimir Serbinenko + + Define GRUB_UTIL_FD_O_* and always use them with grub_util_fd_open. + +2013-10-14 Vladimir Serbinenko + + * include/grub/osdep/hostfile_windows.h (grub_util_utf8_to_tchar): Add + missing prototype. + (grub_util_tchar_to_utf8): Likewise. + +2013-10-14 Vladimir Serbinenko + + * grub-core/Makefile.core.def: Add osdep/init.c on emu. + * grub-core/kern/emu/main.c: Add missing include. + * grub-core/osdep/basic/init.c (grub_util_host_init) [!GRUB_UTIL]: + Don't call grub_util_init_nls. + * grub-core/osdep/windows/init.c (grub_util_host_init) [!GRUB_UTIL]: + Likewise. + +2013-10-13 Vladimir Serbinenko + + * util/misc.c (grub_util_get_image_size): Use FILE functions rather than + stat. + +2013-10-13 Vladimir Serbinenko + + * util/grub-editenv.c: Remove leftover set_program_name and init_nls. + +2013-10-13 Vladimir Serbinenko + + * include/grub/misc.h: Use gnu_printf only on gcc 4.4 or later. + +2013-10-13 Vladimir Serbinenko + + Add a wrapper for fopen. On unix-like systems just pass-through. On + windows use unicode version. + +2013-10-13 Vladimir Serbinenko + + Move set_program_name and init_nls to host_init. On windows + fix in this fuction console and argument charset as well. + +2013-10-12 Andrey Borzenkov + + Fix inconsistent use of GRUB_CRYPTODISK_ENABLE and + GRUB_ENABLE_CRYPTODISK. + + * util/grub-install.in: Rename all GRUB_CRYPTODISK_ENABLE to + GRUB_ENABLE_CRYPTODISK. + * util/grub-mkconfig_lib.in: Likewise. + +2013-10-12 Christian Cier-Zniewski + + * docs/grub.texi (Vendor power-on keys): Add Dell Latitude E4300. + +2013-10-12 Melki Christian + + * grub-core/term/at_keyboard.c [DEBUG_AT_KEYBOARD]: Fix compilation + error when enabling debug. + +2013-10-12 Ilya Bakulin + + * configure.ac: Use -melf_*_obsd on openbsd. + +2013-10-12 Vladimir Serbinenko + + * grub-core/kern/arm/dl_helper.c: Use more proper %p for pointer. + +2013-10-12 Vladimir Serbinenko + + * include/grub/misc.h: Use gnu_printf rather than printf as format + template since our functions are independent of libc. + +2013-10-11 Vladimir Serbinenko + + * util/grub-setup.c (setup): Move copying of partition table as + futher up as possible to avoid possible overwrite by floppy routines. + +2013-10-11 Vladimir Serbinenko + + * grub-core/fs/fat.c: Fix handling of exfat contiguous files. + +2013-10-10 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: New option `scrollbar_thumb_overlay`. + * docs/grub.texi: Likewise. + +2013-10-10 Vladimir Serbinenko + + * util/getroot.c (make_device_name): Remove dos_part and bsd_part as + it's mostly unused. Move vestiges to the callers. + +2013-10-10 Vladimir Serbinenko + + * util/grub-mkpasswd-pbkdf2.c: Remove temporary buffers for hex + version of salt and hash. Use grub_snprintf rather than snprintf. + +2013-10-10 Vladimir Serbinenko + + * docs/grub.texi: Fix problem with braces. + +2013-10-10 Vladimir Serbinenko + + * conf/Makefile.extra-dist: Fix extra-dist list. + * grub-core/Makefile.core.def: Likewise. + +2013-10-10 Vladimir Serbinenko + + * docs/grub.texi: Document disk names used on Windows and AROS. + +2013-10-10 Vladimir Serbinenko + + * grub-core/osdep/aros/getroot.c: Change to //: prefix as discussed + with AROS devs. + * grub-core/osdep/aros/hostdisk.c: Likewise. + +2013-10-10 Vladimir Serbinenko + + Avoid including hostfile.h when not necessarry as it pulls + in OS-specific headers which may redefine generic names + like "far". + +2013-10-09 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: New options for scrollbar padding: + scrollbar_left_pad, scrollbar_right_pad, scrollbar_top_pad, + scrollbar_bottom_pad + * docs/grub.texi: Likewise. + +2013-10-09 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c (list_destroy): Fixed memory leak. + +2013-10-09 Vladimir Serbinenko + + Move OS-dependent file definitions to include/grub/osdep/hostfile*.h. + +2013-10-09 Vladimir Serbinenko + + * include/grub/emu/hostdisk.h (grub_hostdisk_linux_find_partition): + Removed. + * grub-core/osdep/linux/hostdisk.c (grub_hostdisk_linux_find_partition): + Made static. + +2013-10-09 Vladimir Serbinenko + + * include/grub/emu/getroot.h (grub_util_find_hurd_root_device): Remove + leftover. + +2013-10-09 Vladimir Serbinenko + + Move OS-specific driver configuration to grub_util_fd_open. This + moves OS-dependent parts from kern/emu/hostdisk.c to + grub-core/osdep/*/hostdisk.c. + +2013-10-09 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Use size_t instead of + grub_size_t. + * util/grub-mkimagexx.c (locate_sections): Likewise. + (load_image): Likewise. + +2013-10-09 Vladimir Serbinenko + + * util/misc.c (grub_util_write_image_at): Don't use PRIxGRUB_SIZE for + size_t. + (grub_util_write_image): Likewise. + +2013-10-08 Vladimir Serbinenko + + * grub-core/osdep/basic/random.c: New file. Abort on an attempt to + get random when no RNG is available. + * grub-core/osdep/random.c: Use basic/random.c on OS out of whitelist. + +2013-10-08 Vladimir Serbinenko + + * include/grub/util/lvm.h: Removed. + +2013-10-08 Vladimir Serbinenko + + * grub-core/kern/emu/misc.c (fsync) [__MINGW32__]: Move to ... + * grub-core/osdep/windows/hostdisk.c (fsync) [__MINGW32__]: ... here. + +2013-10-08 Vladimir Serbinenko + + * grub-core/osdep/windows/sleep.c: Add missing config.h. + +2013-10-08 Vladimir Serbinenko + + * grub-core/kern/emu/misc.c (grub_get_rtc): Remove (it's a leftover). + +2013-10-08 Vladimir Serbinenko + + * grub-core/net/drivers/emu/emunet.c: Move to .. + * grub-core/osdep/linux/emunet.c: ..here. + +2013-10-08 Vladimir Serbinenko + + * util/ieee1275/ofpath.c: Move to ... + * grub-core/osdep/linux/ofpath.c: ..here, split stub into ... + * grub-core/osdep/basic/ofpath.c: ..here. + +2013-10-08 Vladimir Serbinenko + + Move password-querying (util-version) routines to grub-core/osdep. + +2013-10-08 Vladimir Serbinenko + + Move sleep routines to grub-core/osdep. + +2013-10-08 Vladimir Serbinenko + + Move OS-dependent files to grub-core/osdep and document it. + +2013-10-08 Vladimir Serbinenko + + * grub-core/kern/emu/misc.c (canonicalize_file_name): Move to ... + * grub-core/kern/emu/hostdisk_*.c (canonicalize_file_name): ... here. + +2013-10-08 Vladimir Serbinenko + + * grub-core/kern/arm/misc.S: Remove leftover ARM and THUMB. + +2013-10-08 Vladimir Serbinenko + + * util/misc.c: Remove leftover inclusion of malloc.h. + +2013-10-08 Vladimir Serbinenko + + * include/grub/setjmp.h: Remove leftover GRUBOF. + +2013-10-08 Vladimir Serbinenko + + * util/raid.c: Fold into ... + * util/getroot_linux.c: ... here. Make all functions static. + +2013-10-08 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs_lz4.c: Switch from ad-hoc endiannes and width + macros to GRUB ones. + +2013-10-08 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c (draw_scrollbar): Fixed rare + occasional bug. If there are too many boot entries or too low + scrollbar height then we need to use another formula to calculate + the position and size of the scrollbar thumb. + +2013-10-08 Vladimir Serbinenko + + * util/random_unix.c: Add NetBSD, Solaris and Mac OS X to verified list. + +2013-10-08 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: New option `scrollbar-slice`. + * docs/grub.texi: Likewise. + +2013-10-08 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Draw the scrollbar in a separate + viewport. + +2013-10-08 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c (list_get_minimal_size): Corrected + minimal width calculations. + +2013-10-07 Vladimir Serbinenko + + * docs/grub.texi: Update note on colors on emu console. + +2013-10-07 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_get_file_block): Give GRUB_ERR_BAD_FS + for quadruple indirect rather than GRUB_ERR_NOT_IMPLEMENTED_YET as + it's FS and not GRUB limitation. + +2013-10-07 Vladimir Serbinenko + + * grub-core/kern/arm/efi/startup.S: Remove thumb leftover. + +2013-10-07 Vladimir Serbinenko + + * grub-core/kern/arm/efi/init.c: Rewrite timer fucntion. + +2013-10-04 Samuel Thibault + + * util/grub.d/10_hurd.in: Use `version_find_latest` to sort gnumach + kernels by version order. + +2013-10-04 Vladimir Serbinenko + + * util/random_unix.c: Add kFreeBSD to the list of secure RNG. + +2013-10-04 Vladimir Serbinenko + + Add AROS hostdisk and getroot routines. + +2013-10-04 Vladimir Serbinenko + + Make cryptodisk and diskfilter probe data retrievable programmatically + and not just printable. + +2013-10-04 Vladimir Serbinenko + + Split random retrieving code into separate files. + +2013-10-03 Vladimir Serbinenko + + * grub-core/kern/arm/dl.c (do_relocations): Accept and ignore + R_ARM_V4BX. + +2013-10-03 Vladimir Serbinenko + + * grub-core/tests/video_checksum.c: Increase robustness to out of memory + condition. + * grub-core/tests/fake_input.c: Likewise. + * grub-core/tests/cmdline_cat_test.c: Likewise. + +2013-10-03 Vladimir Serbinenko + + * grub-core/video/capture.c: Do not do finalization when .fini + is called as there is explicit capture_end. + +2013-10-03 Vladimir Serbinenko + + * grub-core/term/gfxterm.c: Add flag "functional" to skip input when + changing windows to avoid crash. + +2013-10-03 Vladimir Serbinenko + + * grub-core/kern/arm/cache.c: Add v5 write-through cache support. + +2013-10-03 Vladimir Serbinenko + + * po/exclude.pot: Add several strings to exclude. + +2013-10-03 Vladimir Serbinenko + + * tests/gettext_strings_test.in: Add getroot_*.c to exclude list. + +2013-10-03 Vladimir Serbinenko + + * autogen.sh: Add ./util/grub-gen-widthspec.c and + ./util/grub-gen-asciih.c to exclude list. + +2013-10-03 Vladimir Serbinenko + + * grub-core/gfxmenu/theme_loader.c (theme_set_string): Fix memory leak + and don't mark error strings for translation. + +2013-10-03 Vladimir Serbinenko + + * grub-core/disk/uboot/ubootdisk.c (uboot_disk_open): Use grub_error + properly in case of missing block size. + +2013-10-03 Vladimir Serbinenko + + * grub-core/lib/arm/setjmp.S: Add missing license section. + +2013-10-03 Vladimir Serbinenko + + * po/swiss.sed: Add replacement for key names and for term computer. + +2013-10-02 Vladimir Testov + + * grub-core/gfxmenu/theme_loader.c: New global options for the + theme background image handling. desktop-image-scale-method, + desktop-image-h-align, desktop-image-v-align. + * grub-core/gfxmenu/view.c: Likewise. + * include/gfxmenu_view.h: Likewise. + * include/bitmap_scale.h: Proportional scale functions introduced. + * grub-core/video/bitmap_scale.c: Likewise. Verification checks are + put in a separate functions. GRUB_ERR_BUG is set for grub_error in + cases of unexpected input variables for scale functions. + * docs/grub.texi: Updated documentation for new options. + +2013-10-02 Vladimir Serbinenko + + * grub-core/video/readers/png.c: Support narrow (4-/2-/1-bpp) PNG. + +2013-10-01 Vladimir Testov + + * grub-core/tests/checksums.h: Corrected due to changes in + bilinear interpolation function. + +2013-10-01 Vladimir Testov + + * grub-core/video/bitmap_scale.c (scale_bilinear): Increased precision + to eliminate artefacts in bilinear interpolation. + +2013-09-28 Vladimir Serbinenko + + * grub-core/video/readers/tga.c: Support paletted tga. + +2013-09-28 Vladimir Serbinenko + + * grub-core/video/readers/jpeg.c (grub_jpeg_decode_data): Remove + incorrect cbcr setting when in color mode. + +2013-09-28 Vladimir Serbinenko + + * grub-core/video/readers/png.c: Support paletted images and clean up + greyscale support. + +2013-09-28 Vladimir Serbinenko + + * grub-core/term/terminfo.c (grub_terminfo_readkey): Fix + usage of wrong table which resulted in mishandling of 4-byte + sequences. + +2013-09-28 Vladimir Serbinenko + + * grub-core/term/terminfo.c: Add Home and End key sequences. + +2013-09-27 Vladimir Serbinenko + + * grub-core/video/readers/png.c (grub_png_decode_image_header): + Fix formula for computing total number of bytes. + +2013-09-27 Vladimir Serbinenko + + * grub-core/video/readers/tga.c: Reorganize to separate RLE and + image processing, fix big-endian and support grayscale. + +2013-09-27 Vladimir Serbinenko + + * grub-core/video/fb/video_fb.c (grub_video_fb_create_render_target): + Correctly will with maximum transparency when using index color. + +2013-09-27 Vladimir Serbinenko + + * grub-core/video/readers/png.c: Support grayscale + +2013-09-27 Vladimir Serbinenko + + * grub-core/video/readers/jpeg.c: Support grayscale. + +2013-09-26 Jon McCune + + * grub-core/commands/loadenv.c: Support skipping signature check + and variable names filtering. + +2013-09-24 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk_unix.c: Declare AROS as non-unix. + * grub-core/kern/emu/hostfs.c: Likewise. + * util/getroot_unix.c: Likewise. + +2013-09-24 Vladimir Serbinenko + + * include/grub/emu/hostdisk.h (GRUB_FD_STAT_IS_FUNTIONAL): New define. + Migrate all explicit defines to this new one. + +2013-09-24 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_open): Use + grub_util_fd_strerror when using grub_util_fd_*. + (grub_util_fd_open_device): Likewise. + (grub_util_biosdisk_read): Likewise. + (grub_util_biosdisk_write): Likewise. + * grub-core/kern/emu/hostdisk_unix.c (grub_util_fd_open): New function. + (grub_util_fd_strerror): Likewise. + (grub_util_fd_sync): Likewise. + (grub_util_fd_close): Likewise. + * grub-core/kern/emu/hostdisk_windows.c (grub_util_fd_sync): Likewise. + (grub_util_fd_close): Likewise. + (grub_util_fd_strerror): Likewise. + * include/grub/emu/hostdisk.h (grub_util_fd_close): Make into real + function proto rather than macro. + (grub_util_fd_sync): Likewise. + (grub_util_fd_open): Likewise. + (grub_util_fd_strerror): New proto. + +2013-09-24 Vladimir Serbinenko + + * util/getroot.c (grub_util_biosdisk_is_present): Don't do stat on + platforms on which it doesn't work. + +2013-09-24 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_open): Move struct + stat immediately to where it's used. + +2013-09-24 Vladimir Serbinenko + + * util/getroot.c (grub_util_check_block_device): Move to ... + * util/getroot_unix.c (grub_util_check_block_device): ... here. + * util/getroot.c (grub_util_check_char_device): Move to ... + * util/getroot_unix.c (grub_util_check_char_device): ... here. + +2013-09-24 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_close): Fix + disk closing logic. + +2013-09-24 Andrey Borzenkov + + * docs/grub.texi (Simple configuration): Document GRUB_ENABLE_CRYPTODISK. + +2013-09-24 Andrey Borzenkov + + * docs/grub.texi (File name syntax): Document ZFS filenames + (/volume@snapshot/...). + +2013-09-23 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk_windows.c (grub_util_get_windows_path): + Always return full path. Fixes a problem with mkrelpath. + +2013-09-23 Paulo Flabiano Smorigo + + * util/grub-install.in: Add GPT PReP support. + * util/grub-probe.c (probe): Support GPT partition type. + (main): Support -t gpt_parttype. + +2013-09-23 Aleš Nesrsta + + * grub-core/bus/usb/ehci.c: SMI disabled in all cases + +2013-09-23 Massimo Maggi + + * grub-core/fs/zfs/zfs.c (check_pool_label): Check nvlist. + +2013-09-23 Tim Hardeck + + * util/grub.d/10_hurd.in: Filter out character for the class. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + +2013-09-23 Melki Christian + + * grub-core/bus/usb/usbhub.c (poll_nonroot_hub): Fix the type of + "changed". + +2013-09-23 Josh Triplett + + * grub-core/boot/i386/pc/lnxboot.S: Re-add support for recording the + boot partition. + +2013-09-23 Vladimir Serbinenko + + * Makefile.util.def (libgrubmods.a): Remove CFLAGS_POSIX as this lib + doesn't use posix_wrap. Keep literal -fno-builtin however. + +2013-09-23 Vladimir Serbinenko + + * conf/Makefile.common (CPPFLAGS_LIBFDT): Remove leftover. + +2013-09-23 Vladimir Serbinenko +2013-09-23 neil + + * configure.ac: Do not enable -Wmissing-noreturn as its + usefulness is limited and creates problems on some OS notably with + code generated by bison. + +2013-09-23 Vladimir Serbinenko +2013-09-23 neil + + * configure.ac: Do not explicitly enable -Waddress as it's not + supported by all gcc and when it is, it's already enabled by -Wall. + +2013-09-23 Vladimir Serbinenko + + * grub-core/video/efi_gop.c (grub_video_gop_setup): Fix a typo which + desactivated use of EDID at all. + +2013-09-23 Vladimir Serbinenko +2013-09-23 neil + + * grub-core/loader/multiboot.c (grub_multiboot_set_console): Always use + video if no text is available. + +2013-09-23 Vladimir Serbinenko +2013-09-23 neil + + * configure.ac: Substitute TARGET_RANLIB. + +2013-09-23 Vladimir Serbinenko +2013-09-23 neil + + * grub-core/genmod.sh.in: Remove ./ from TARGET_OBJ2ELF. Add quotes. + + Based on patches from AROS. + +2013-09-23 Vladimir Serbinenko +2013-09-23 neil + + * grub-core/Makefile.am: Override STRIP and RANLIB. + * configure.ac: compute TARGET_RANLIB. + * INSTALL: Document TARGET_RANLIB + + Based on patches from AROS. + +2013-09-23 Vladimir Serbinenko + + * util/getroot.c (grub_util_biosdisk_get_grub_dev): Do not assume + that floppies are unpartitioned. + +2013-09-23 Vladimir Serbinenko + + * util/getroot_unix.c [__MINGW32__ || __CYGWIN__]: + Define dummy grub_util_pull_lvm_by_command to decrease number of #if's. + +2013-09-23 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/sys/types.h: Use OpenBSD approach: it's + less nice but more portable. + * grub-core/lib/posix_wrap/wchar.h: Likewise. + +2013-09-23 Vladimir Serbinenko + + * include/grub/cryptodisk.h (grub_cryptodisk): Use grub_util_fd_t + for cheat_fd. + * grub-core/disk/cryptodisk.c (grub_cryptodisk_open): Use grub_util_* + functions. + (grub_cryptodisk_cheat_insert): Likewise. + (grub_cryptodisk_close): Likewise. + +2013-09-23 Vladimir Serbinenko + + * include/grub/emu/misc.h: Remove leftover cygwin definitions. + Use windows path for DEFAULT_DIRECTORY. + +2013-09-23 Vladimir Serbinenko + + * include/grub/i386/setjmp.h: Remove useless #if MINGW where original + difference was likely just gcc version, not anything mingw-related. + +2013-09-23 Vladimir Serbinenko + + Use Winapi on both cygwin and mingw32 to share more code between both. + +2013-09-22 Andrey Borzenkov + + * util/grub-install.in: Add --grub-editenv option. + * util/grub-install_header (grub_compress_file): Explicitly check for + plain file to avoid cp error. + +2013-09-22 Andrey Borzenkov + + * docs/grub.texi (Device syntax): Document new LVM UUID based device + names; fix LVM driver name (lvm, not lv). + * util/grub-probe.c (probe_abstraction): Support lvmid/xxx device + names. + +2013-09-22 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c: Disentagle into a series of OS-specific + files rather than one file with loads of #if's. + * util/getroot.c: Likewise. + +2013-09-22 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/sys/types.h: Use stddef on *BSD. + +2013-09-22 Vladimir Serbinenko + + * util/grub-mkpasswd-pbkdf2.c (grub_get_random): Add windows and + GNU/Hurd to the list of checked PRNG. + +2013-09-22 Vladimir Serbinenko + + * configure.ac: On FreeBSD use -melf_*_fbsd format. + +2013-09-21 Ales Nesrsta + + * grub-core/bus/usb/ehci.c: Corrected EHCI QH handling (async./sync.) + +2013-09-20 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c: Handle non-md UUIDs. + * grub-core/disk/lvm.c: Add LVM UUIDs. + * util/getroot.c: Use LVM UUIDs whenever possible. + +2013-09-19 Andrey Borzenkov + + * docs/grub.texi (Networking commands): Add documentation for + network related commands. + +2013-09-19 Vladimir Serbinenko + + * util/getroot.c (grub_util_open_dm): Check major rather than the name + to determine if device is handled by devmapper. + (convert_system_partition_to_system_disk): Likewise. + (get_dm_uuid): Don't check explicitly if device is mapped, it's + already done in grub_util_open_dm. + +2013-09-19 Leif Lindholm + + * kern/arm/cache.S: Correct access to ilinesz/dlinesz variables. + Clean up stack manipulation (sync_caches_armv*) + +2013-09-19 Vladimir Serbinenko + + * util/lvm.c: Remove since unused. Remove remaining references. + +2013-09-19 Vladimir Serbinenko + + Handle the case of partitioned LVM properly. + + * grub-core/kern/emu/hostdisk.c (grub_util_get_dm_node_linear_info): + Stop on meeting LVM, mpath or DMRAID. + (grub_hostdisk_os_dev_to_grub_drive): Canonicalize os device. + (read_device_map): Likewise. + * util/getroot.c (convert_system_partition_to_system_disk): Assume that + device is full disk rather than erroring out on LVM and similar cases. + +2013-09-18 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in: Keep supplied pkgdatadir if any. + +2013-09-18 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_mm_init_region): Skip regions less than + 4K before the end. + Reported by: Leif Lindholm + +2013-09-18 Pawel Wojtalczyk +2013-09-18 Vladimir Serbinenko + + * grub-core/term/efi/console.c (grub_console_getkey): Accept VT100-style + codes. + +2013-09-18 Colin Watson + + * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name_iter): + Remove no-longer-true __attribute__ ((unused)) on disk parameter. + +2013-09-18 Douglas Ray + + * util/grub-mkpasswd-pbkdf2.c (grub_get_random): Declare OpenBSD PRNG + as secure. + +2013-09-18 Aleš Nesrsta + + * docs/grub.texi: Fix broken link. + +2013-09-18 Melki Christian + + * grub-core/bus/usb/usb.c (grub_usb_device_initialize): Add condition + to break endless loop. + +2013-08-23 Vladimir Serbinenko + + * util/grub-fstest.c: Fix several printf formats. + * util/grub-mkimage.c: Likewise. + * util/grub-mkimagexx.c: Likewise. + * util/grub-script-check.c: Likewise. + +2013-08-23 Vladimir Serbinenko + + * grub-core/lib/xzembed/xz_dec_lzma2.c: Make -Wattributes not cause + error. + +2013-08-23 Vladimir Serbinenko + + * config.h.in [GRUB_BUILD]: Explicitly undefine ENABLE_NLS. + +2013-08-23 Vladimir Serbinenko + + * util/getroot.c (grub_find_device): Use cygwin_conv_path ratherthan + removed in current versions cygwin_conv_*. + +2013-08-23 Vladimir Serbinenko + + * configure.ac: Disable efiemu runtime on cygwin. + +2013-08-23 Vladimir Serbinenko + + * conf/Makefile.extra-dist: Add missing util/grub-gen-asciih.c, + util/grub-gen-widthspec.c and util/grub-pe2elf.c. + +2013-08-22 Vladimir Serbinenko + + * util/grub-mkpasswd-pbkdf2.c (grub_password_get): Remove extraneous + error message. + +2013-08-22 Vladimir Serbinenko + + * grub-core/lib/crypto.c (grub_password_get) [GRUB_UTIL]: Add + windows variant. + * util/grub-mkpasswd-pbkdf2.c: Add windows flavour for retrieving random + data. + +2013-08-22 Vladimir Serbinenko + + * configure.ac: Add -Wl,-melf_i386 and -Wl,-melf_x86_64 systematically + when on x86 and not cygwin. + * conf/Makefile.common: Remove unsystematic -Wl,-melf_i386 and + -Wl,-melf_x86_64. + +2013-08-22 Vladimir Serbinenko + + * configure.ac: Set CPP to build one when checkoing for freetype for + build. + +2013-08-22 Vladimir Serbinenko + + * util/grub-mkfont.c [!GRUB_BUILD]: Define my_argp_state. + [!GRUB_BUILD]: Remove has_argument. + +2013-08-22 Vladimir Serbinenko + + * util/ieee1275/ofpath.c (grub_util_devname_to_ofpath) [_WIN32]: + Replace with a dummy. + +2013-08-22 Vladimir Serbinenko + + * configure.ac: Don't change host_os from mingw to cygwin. + +2013-08-22 Vladimir Serbinenko + + * configure.ac: Change target_os from windows to cygwin. + +2013-08-22 Vladimir Serbinenko + + Handle grub-pe2elf and grub-mkfont for cases when build != host. + + * Makefile.am (build-grub-mkfont): Don't include gnulib. + (build-grub-gen-asciih): Likewise. + (build-grub-gen-widthspec): Likewise. + * Makefile.util.def (grub-pe2elf): Remove. + * config.h.in [GRUB_BUILD]: Use build rather than host constants. + * configure.ac: Separate tests for build. + Move ./build-grub-pe2elf to grub-core. + Fix typo. + * grub-core/Makefile.am (build-grub-pe2elf): New target. + * grub-core/kern/emu/misc.c (xasprintf): Don't compile if GRUB_BUILD is + defined. + * include/grub/types.h [GRUB_BUILD]: Use build rather than host + constants. + * util/grub-mkfont.c [GRUB_BUILD]: Simplify not to rely on argp. + * util/grub-pe2elf.c: Simplify not to rely on getopt. + * util/misc.c (program_name) [GRUB_BUILD]: Define to static string. + +2013-08-22 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_size): Adapt for + mingw32 as well based on grub_util_get_disk_size. + * util/misc.c (grub_util_get_disk_size): Removed. all users switched to + grub_util_get_fd_size. + (sync): Removed. + (fsync): Moved to ... + * grub-core/kern/emu/misc.c (fsync): ... here. + +2013-08-22 Vladimir Serbinenko + + * include/grub/mm.h (grub_extend_alloc): Remove. + * grub-core/loader/i386/pc/plan9.c: Use own version of + grub_extend_alloc with appropriate types. + +2013-08-22 Vladimir Serbinenko + + * conf/Makefile.common (CFLAGS_GCRY): Add -Wno-redundant-decls. + +2013-08-22 Vladimir Serbinenko + + * util/getroot.c: Include sys/wait.h only when we need waitpid. + +2013-08-22 Vladimir Serbinenko + + Fix dependencies on cygwin. + + * gentpl.py: Support variable dependencies. Add $TARGET_OBJ2ELF to + dependencies when used and defined. + * grub-core/Makefile.core.def (regexp): Add dependency on libgnulib.a. + +2013-08-22 Vladimir Serbinenko + + * include/grub/zfs/spa.h (zio_cksum): Add explicit members for mac. + * grub-core/fs/zfs/zfs.c (zio_read): Don't use casts to retrieve mac. + +2013-08-22 Vladimir Serbinenko + + * grub-core/kern/emu/mm.c (grub_memalign): Don't define if there is no + implementation available to cause compile-time rather than runtime + error. + +2013-08-22 Vladimir Serbinenko + + * util/grub-fstest.c: Don't check for symlinks on windows. + +2013-08-22 Vladimir Serbinenko + + * INSTALL: Mention unavailability of man pages when cross-compiling. + +2013-08-22 Vladimir Serbinenko + + * include/grub/crypto.h: Don't declare gcry_log_bug, gcry_log_printf + and gcry_log_bug. + * grub-core/lib/libgcrypt_wrap/mem.c: Include g10lib.h + +2013-08-21 Vladimir Serbinenko + + * INSTALL: Document cross-compilation. + * acinclude.m4: Determine whether nm support -P and --defined-only. + * configure.ac: Add TARGET_ to all variables pertaining to target + that don't have it yet. + * gentpl.py: Likewise. + * grub-core/Makefile.am: Likewise. + * grub-core/genmod.sh.in: Likewise. + * grub-core/gensyminfo.sh.in: Handle OpenBSD and other non-GNU nm + as well. + +2013-08-21 Ilya Bakulin + + * configure.ac: Remove -Wempty-body. It's not essential and needs + recent gcc. + +2013-08-21 Ilya Bakulin + + * grub-core/kern/emu/hostdisk.c: Add conditionals for OpenBSD. + * util/getroot.c: Likewise. + +2013-08-21 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Add needed explicit cast. + * grub-core/lib/backtrace.c: Likewise. + * grub-core/net/ip.c: Likewise. + * grub-core/net/tcp.c: Likewise. + * grub-core/net/udp.c: Likewise. + +2013-08-21 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/wchar.h: Fix typo. + +2013-08-21 Vladimir Serbinenko + + * util/import_gcry.py: Add final newline in visibility.h. + +2013-08-21 Vladimir Serbinenko + + * conf/Makefile.common: Fix typo. + +2013-08-21 Vladimir Serbinenko + + * Makefile.util.def (grub-mkfont): Add missing libgnu.a. + +2013-08-21 Vladimir Serbinenko + + * Makefile.am (widthspec.h): Fix typo. + * util/grub-gen-widthspec.c: Likewise. + +2013-08-21 Vladimir Serbinenko + + Move ascii.h and widthspec.h generation to a separate build-time-only + tool. + +2013-08-16 Grégoire Sutre + + * grub-core/loader/i386/bsd.c (grub_netbsd_add_boot_disk_and_wedge): + Always fill bootdisk info and improve check for NetBSD disklabel. + +2013-08-16 Vladimir Serbinenko + + * conf/Makefile.extra-dist: Add util/bin2h.c. + Reported by: floppym. + +2013-08-16 Vladimir Serbinenko + + * configure.ac: Make unifont mandatory for powerpc-ieee1275. + +2013-08-16 Vladimir Serbinenko + + * configure.ac: Disable unifont and starfield if no freetype was found. + +2013-08-16 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/wchar.h: Fix wchar_t and mbstate_t conflict + on NetBSD and OpenBSD. + +2013-08-15 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Baseline misplacement fixed. + +2013-08-15 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: The number of color mappings is + reduced. Inheritant options are processed during the theme loading. + +2013-08-15 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Minimal width fixed. + +2013-08-14 Avik Sil + + * grub-core/net/tftp.c: Send tftp ack packet before closing the socket. + +2013-08-14 Avik Sil + + * grub-core/net/drivers/ieee1275/ofnet.c: Get proper mac address when + using qemu. + +2013-08-14 Paulo Flabiano Smorigo + + * .bzrignore: Add bootinfo.txt, grub.chrp, gnulib/float.h, and + remove-potcdate.sed. + +2013-08-14 Andrey Borzenkov + + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_iterate): Remove + unused attribute from pull argument. + +2013-08-14 Andrey Borzenkov + + * util/getroot.c (grub_util_is_imsm): Fix descriptor and + memory leak. + +2013-08-14 Andrey Borzenkov + + * util/getroot.c (pull_lvm_by_command): add --separator option + to vgs call to disable padding of output to 10 characters. + +2013-08-14 Vladimir Serbinenko + + * grub-core/kern/emu/misc.c (grub_device_mapper_supported): Move from + here ... + * grub-core/kern/emu/hostdisk.c (grub_device_mapper_supported): ... to + here. + +2013-08-14 Vladimir Serbinenko + + * include/grub/i386/pc/biosdisk.h (grub_biosdisk_drp): Fix device_path + length. + +2013-08-14 Vladimir Serbinenko + + Fix handling of build-time grub-bin2h and grub-mkfont when doing + full Canadian cross. Tested with build=x86_64, host=arm, + target=ppc-ieee1275. + +2013-08-14 Vladimir Serbinenko + + * configure.ac: Error if no $BUILD_CC could be found. + Reported by: DevHC. + +2013-08-14 Vladimir Serbinenko + + * grub-core/kern/i386/coreboot/init.c: Fix compilation on + i386-multiboot. + +2013-08-14 Vladimir Serbinenko + + * grub-core/kern/vga_init.c: Fix compilation on qemu-mips. + * grub-core/kern/mips/qemu_mips/init.c: Likewise. + +2013-08-13 Colin Watson + + * util/getroot.c (grub_util_biosdisk_get_grub_dev): Zero out + grub_errno in the case where we handle GRUB_ERR_UNKNOWN_DEVICE by + falling back to the partition device, otherwise a later call to this + function may fail spuriously. + Reported by Axel Beckert. Fixes Debian bug #708614. + +2013-08-12 Grégoire Sutre + + * autogen.sh: Replace find -not by the POSIX-compliant find !. + +2013-08-12 Grégoire Sutre + + Prevent shadowing of stdlib's devname(3) on BSD. + + * grub-core/disk/cryptodisk.c (grub_cmd_cryptomount): Rename devname + and devlast to diskname and disklast, respectively. + +2013-08-11 Colin Watson + + * util/grub-mkconfig.in: Fix detection of Emacs autosave files. + +2013-08-08 Vladimir Testov + + * docs/grub.texi: Introduce terminal window position options: + terminal-left: terminal window's left position + terminal-top: terminal window's top position + terminal-width: terminal window's width + terminal-height: terminal window's height + terminal-border: terminal window's border width + * grub-core/gfxmenu/theme-loader.c: Likewise. + * include/grub/gfxmenu_view.h: Likewise. + * po/exlude.pot: Likewise. + * grub-core/gfxmenu/view.c: Likewise. + Also updated minimal window size. + Also terminal_sanity_check function has been introduced. + * grub-core/tests/checksums.h: Update (terminal window height + is adjusted now for low resolution screen) + +2013-08-02 Vladimir Serbinenko + + * grub-core/tests/checksums.h: Update (1-pixel difference in marker + position). + +2013-08-02 Vladimir Serbinenko + + * po/exclude.pot: Add few recent exceptions. + +2013-08-02 Vladimir Serbinenko + + * tests/grub_func_test.in: Add unicode.pf2. + +2013-08-02 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (grub_virtual_screen_setup): Start with + standard rather than noral color, in line with other terminals. + +2013-08-02 Vladimir Serbinenko + + * grub-core/partmap/dfly.c: Simplify dprintfs for easier gettext + analysis. + +2013-08-02 Vladimir Serbinenko + + * grub-core/loader/arm/linux.c: Change printf to dprintf. + +2013-08-02 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (check_feature): Cleanup and remove + inappropriate printf. + +2013-07-25 Andrey Borzenkov + + * .bzrignore: Remove grub-core/lib/dtc-grub, + grub-core/Makefile.libfdt.def + * conf/Makefile.extra-dist: Remove grub-core/Makefile.libfdt.def. + +2013-07-25 Vladimir Serbinenko + + * include/grub/video.h (grub_video_register): Keep double-linked as + well as single-linked invariants. + Reported by: qwertial. + +2013-07-25 Vladimir Serbinenko + + * grub-core/commands/nativedisk.c (get_uuid): Handle + GRUB_DISK_DEVICE_UBOOTDISK_ID. + +2013-07-25 Vladimir Testov + + * grub-core/gfxmenu/widget-box.c: Fixed draw function. Now it takes + maximum of NW, N, NE heights instead of N's height and maximum of + NW, W, SW widths instead of W's width. (So the box will be always + correctly drawn) + +2013-07-20 Grégoire Sutre + + * grub-core/partmap/bsdlabel.c (netopenbsdlabel_partition_map_iterate): + Fix misuse of variable count. + +2013-07-18 Leif Lindholm +2013-07-18 Francesco Lavra +2013-07-18 Vladimir Serbinenko + + New ports to arm-uboot and arm-efi. + Mostly by Leif Lindholm with some additions from + Francesco Lavra and cleanup by Vladimir Serbinenko. + +2013-07-16 Vladimir Serbinenko + + * grub-core/loader/multiboot_elfxx.c: Check eip after v2p translation + and not before. + Reported by: Leon Drugi. + +2013-07-16 Vladimir Serbinenko + + * grub-core/kern/powerpc/ieee1275/startup.S: Handle unaligned bss. + Reported by: Paulo Flabiano Smorigo. + +2013-07-14 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: USe viewport when drawing strings. + +2013-07-14 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Fix height calculation. + +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Stylistic fixes. + +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Run emacs indent on file. + +2013-07-14 Andrey Borzenkov + + * grub-core/net/bootp.c: Export net_* variables. + * grub-core/net/net.c: Likewise. + +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Remove brackets around return value. + +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs_lz4.c: Add missing packed attribute. + +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Fix improper cast. + +2013-07-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs_lz4.c: Remove restrict keyword. + +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c (nvlist_next_nvpair): Error is encode_size + <= 0. + +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c: Split nvpair iterators into separate + functions. + +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs_lz4.c: New file. + * grub-core/fs/zfs/zfs.c: Tie up lz4 decompression. + +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c: Check for feature compatibility. + +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfs.c (uberblock_verify): Accept version 5000. + (check_pool_label): Likewise. + * include/grub/zfs/zfs.h: Rewrite SPA_VERSION_* macros. + +2013-07-14 Massimo Maggi + + * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix RAIDZ reporting. + +2013-07-13 Andrey Borzenkov + + * docs/grub.texi (Commands): Document postition parameters + for menuentry command. + +2013-07-13 Andrey Borzenkov + + * util/grub-mknetdir.in: Remove stray line from help output. + +2013-07-11 Vladimir Serbinenko + + Remove early sm712 init as there is no reason for it (the "watchdog" + effect was due to wrong GPIO map). + +2013-07-11 Vladimir Serbinenko + + * grub-core/commands/pcidump.c: Remove static variables. + +2013-07-11 Vladimir Serbinenko + + * grub-core/commands/sleep.c: Refresh screen before sleeping. + +2013-07-11 Vladimir Serbinenko + + * configure.ac: Move delimiter after the infos. + +2013-07-11 Vladimir Serbinenko + + * grub-core/bus/usb/usbhub.c: Fix recheck logic. + +2013-07-11 Vladimir Serbinenko + + * util/grub-mkfont.c (write_font_ascii_bitmap): Fix handling of glyphs + not filling whole 8x16 space. + +2013-07-11 Vladimir Serbinenko + + * grub-core/normal/charset.c (bidi_line_wrap): Fix spurios warning. + +2013-07-11 Vladimir Serbinenko + + * configure.ac: Indicate which liblzma is used if any. + +2013-06-21 Paul Wise +2013-06-21 Craig Sanders + + * util/grub-reboot.in: Document submenu usage. + +2013-06-25 Colin Watson + + * .bzrignore: Update with a number of new test-related files. + +2013-06-25 Colin Watson + + * util/grub-script-check.c: Fail on scripts containing no + commands, to guard against corrupted grub-mkconfig setups that + produce no useful output. + * tests/grub_script_no_commands.in: New test. + * Makefile.util.def (grub_script_no_commands): Add. + Reported by Hans Putter. Fixes Debian bug #713886. + +2013-06-16 Andrey Borzenkov + + * grub-core/disk/diskfilter.c: Forgot to remove comment + from previous commit. + +2013-06-16 Andrey Borzenkov + + * grub-core/term/gfxterm.c (grub_virtual_screen_setup): Use + grub_term_normal_color, do not hardcode GRUB_TERM_DEFAULT_NORMAL_COLOR. + +2013-06-16 Andrey Borzenkov + + * conf/Makefile.extra-dist: Add grub-core/fs/cpio_common.c. + +2013-06-16 Andrey Borzenkov + + * grub-core/disk/diskfilter.c (scan_devices): Iteratively + rescan diskfilter devices until nothing new is found. + +2013-06-16 Vladimir Serbinenko + + Fix casts when compiling coreboot-specific code for 64-bit EFI. + +2013-06-16 Vladimir Serbinenko + + Don't try to detect cbfs on *-emu. + +2013-06-16 Vladimir Serbinenko + + * grub-core/term/gfxterm.c: USe right background color when scrolling. + +2013-06-16 Vladimir Serbinenko + + Add support for processed coreboot payload chainloading. + +2013-06-16 Vladimir Serbinenko + + Enable coreboot information commands even when not loaded as + coreboot payload (e.g. when loaded from SeaBIOS-as-payload). + +2013-06-15 Vladimir Serbinenko + + Support for cbfs. Also factor out the part which is common + for all archives to a separate module. This splits tar from cpio + as they are very different but keeps cpio, cpio_be, odc and newc + together since they're very similar. + +2013-06-15 David Michael + + * configure.ac (FREETYPE): Change AC_CHECK_PROGS to AC_CHECK_TOOLS. + (freetype_cflags,freetype_libs): Change freetype-config to $FREETYPE. + +2013-06-15 Vladimir Serbinenko + + * tests/grub_script_eval.in: Really add the eval test. + +2013-06-14 Vladimir Serbinenko + + Move flavour-specific parts out of common cpio.c file and + rename remaining to cpio_common.c + +2013-06-07 Andrey Borzenkov + + * grub-core/script/execute.c (grub_script_execute_sourcecode): Split + off new function grub_script_execute_new_scope. Change callers to use + either of them as appropriate. + * grub-core/commands/eval.c: New command eval. + * docs/grub.texi (Commands): Document it. + +2013-06-07 Andrey Borzenkov + + * grub-core/kern/corecmd.c (grub_core_cmd_set): Use grub_env_get + to fetch values when listing. + +2013-06-07 Andrey Borzenkov + + Fix make dist on non-pc. + +2013-06-07 Francesco Lavra + + * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix handling of paths + without a device name. + +2013-06-07 Vladimir Serbinenko + + Remove enable_executable_check as it's not needed anymore. + Reported by: dougray. + +2013-06-07 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (insert_array): Fix order to discover + ambigouos RAID before discovering RAIDs on top of it. + Reported by: bodom. + +2013-06-07 Vladimir Serbinenko + + Fix typo (failback vs fallback). + +2013-05-31 Andrey Borzenkov + + * util/grub.d/30_os-prober.in: Add support for probing EFI + System Partition (as of os-prober 1.58). + +2013-05-31 Vladimir Serbinenko + + * configure.ac: Add yet another path to unifont. For parabola. + +2013-05-30 Josh Triplett + + * grub-core/normal/cmdline.c (grub_cmdline_get): Fix Ctrl-u + handling to copy the killed characters to the kill buffer as + UCS4 stored as grub_uint32_t rather than as 8-bit characters + stored as char. Eliminates UCS4 truncation and corruption + observed when killing characters with Ctrl-u and yanking them + back with Ctrl-y. + +2013-05-30 Vladimir Serbinenko + + Detach optional parts of gfxterm and integrate in with coreboot init. + +2013-05-30 Vladimir Serbinenko + + Move blit and fill dispatcher to appropriate files to decrease export + and relocation overhead. + +2013-05-30 Vladimir Serbinenko + + * grub-core/font/font.c, include/grub/font.h: Inline simple font + functions. + +2013-05-30 Vladimir Serbinenko + + * grub-core/Makefile.am: Fix compilation problem with some + automake versions. + +2013-05-30 Vladimir Serbinenko + + * configure.ac: Add Ubuntu path to unifont and report unifont path used. + +2013-05-30 Vladimir Serbinenko + + * Makefile.am, conf/Makefile.common: Fix compilation problem with some + automake versions. + +2013-05-30 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c: Fix handling of DSDT in presence of + SSDT. + +2013-05-15 Radosław Szymczyszyn + + * grub-core/partmap/dfly.c: New partition map. + +2013-05-15 Vladimir Serbinenko + + * grub-core/kern/corecmd.c (grub_core_cmd_ls): Fix empty path + checking. + Reported by: Francesco Lavra. + +2013-05-14 Andrey Borzenkov + + * gentpl.py: Replace EXTRA_DIST with dist_noinst_DATA or + dist__DATA. EXTRA_DIST is ignored by automake inside + false conditions. + * conf/Makefile.common: define dist_grubconf_DATA + +2013-05-14 Vladimir Serbinenko + + Progressively skip menu elements on small terminals rather + than crashing. + +2013-05-14 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_cmdline_get): Fix off-by-one error + to avoid losing last column. + +2013-05-14 Vladimir Serbinenko + + * po/exclude.pot: Add missing string "%C". + +2013-05-14 Vladimir Serbinenko + + * tests/util/grub-shell.in: Remove the temporary directory on grub-emu + after the test. + +2013-05-11 Vladimir Serbinenko + + * util/grub-install.in: Gettextize "Not found" message. + +2013-05-11 Vladimir Serbinenko + + Fix distfiles list. + Reported by: Andrey Borzenkov + +2013-05-11 Paulo Flabiano Smorigo + + * grub-core/net/bootp.c (grub_cmd_bootp): Check if there is any card + present. + * include/grub/err.h (grub_err_t): New enum value GRUB_ERR_NET_NO_CARD. + +2013-05-11 Vladimir Serbinenko + + * grub-core/tests/setjmp_test.c: Ignore missing noreturn. + +2013-05-11 Vladimir Serbinenko + + * grub-core/fs/hfspluscomp.c (grub_hfsplus_compress_attr): Add packed + attribute since structure is not necessarily aligned. + +2013-05-11 Andrey Borzenkov + + * docs/grub.texi (Device syntax): Clarify description of network + drives. + +2013-05-10 Vladimir Serbinenko + + Redirect xasprintf to grub_xvasprintf rather than having #ifdef's + for vasprintf presence. + +2013-05-10 Vladimir Serbinenko + + * util/grub-install.in: Handle efibootmgr presence check. + Reported by: Leif Lindholm. + +2013-05-10 Vladimir Serbinenko + + * grub-core/commands/testspeed.c: Reuse formatting string to decrease + new strings to translate. + +2013-05-10 Vladimir Serbinenko + + * util/grub-mkrescue.in: Replace `STR' with `STRING' to avoid adding + yet another string (pun intended) to translate. + +2013-05-10 Vladimir Serbinenko + + * po/POTFILES-shell.in: Autogenerate it. + +2013-05-10 Vladimir Serbinenko + + * grub-core/net/net.c (grub_net_open_real): Autoload network modules. + +2013-05-10 Vladimir Serbinenko + + * grub-core/term/terminfo.c: Rename ANSI_C0 to ANSI_CSI to avoid + misnomer. + +2013-05-08 Andrey Borzenkov + + * docs/grub.texi (Network): Add description of net_default_interface, + net_default_ip and net_default_mac. Rewrite variables description + to emphasize that they are per-interface. + +2013-05-08 Vladimir Serbinenko + + New test: cmdline and cat. + +2013-05-08 Vladimir Serbinenko + + * grub-core/commands/cat.c: Show UTF-8 characters. + +2013-05-08 Vladimir Serbinenko + + * conf/Makefile.common: Poison float and double on non-emu. + +2013-05-08 Vladimir Serbinenko + + * configure.ac: Don't disable extended registers on emu. + +2013-05-07 Vladimir Serbinenko + + * configure.ac: Don't use extended registers on x86_64. + Reported by: Peter Jones. + +2013-05-07 Vladimir Serbinenko + + * grub-core/term/efi/console.c: Fix compile error. + +2013-05-07 Vladimir Serbinenko + + Compressed HFS+ support. + +2013-05-07 Vladimir Serbinenko + + * grub-core/commands/videoinfo.c: Use "paletted" rather than "packed + pixel". + +2013-05-07 Vladimir Serbinenko + + Menu color test. + +2013-05-07 Vladimir Serbinenko + + * grub-core/tests/setjmp_test.c: New test. + +2013-05-07 Vladimir Serbinenko + + New variables 'net_default_*' to determine MAC/IP of default interface. + +2013-05-07 Vladimir Serbinenko + + * tests/gettext_strings_test.in: A test to check for strings not + marked for translation. + +2013-05-07 Vladimir Serbinenko + + * autogen.sh: Exclude unused libgcrypt files from translation. + +2013-05-07 Vladimir Serbinenko + + Simplify few strings. + +2013-05-07 Vladimir Serbinenko + + Mark few forgotten strings for translation. + +2013-05-07 Vladimir Serbinenko + + * grub-core/loader/linux.c: Use grub_dprintf for debug statements + rather than printf. + +2013-05-07 Vladimir Serbinenko + + * grub-core/video/readers/jpeg.c: Use grub_dprintf for debug statements + rather than printf. + * grub-core/video/readers/tga.c: Likewise. + +2013-05-07 Vladimir Serbinenko + + * tests/priority_queue_unit_test.cc: New test. + +2013-05-07 Vladimir Serbinenko + + * grub-core/font/font.c: Use grub_dprintf for debug statements rather + than printf. + +2013-05-06 Andrey Borzenkov + + Reimplement grub-reboot to not depend on saved_entry. Use next_entry + variable for one time boot menu entry. + +2013-05-05 Bean + + * grub-core/commands/testspeed.c: New command testspeed. + +2013-05-05 Vladimir Serbinenko + + Factor-out human-size printing. + +2013-05-04 Vladimir Serbinenko + + Agglomerate more mallocs to speed-up gfxterm. + +2013-05-04 Vladimir Serbinenko + + Speed-up gfxterm by slightly agglomerating mallocs. + +2013-05-04 Vladimir Serbinenko + + More video checks. + +2013-05-04 Vladimir Serbinenko + + Speed-up gfxterm by saving intermediate results in index+alpha + format. + +2013-05-04 Vladimir Serbinenko + + * grub-core/tests/lib/functional_test.c: Don't stop on first failed + test. + +2013-05-04 Vladimir Serbinenko + + * grub-core/normal/menu_text.c (menu_clear_timeout): Clear second + line of timeout as it may contain the rest of long line. + +2013-05-04 Vladimir Serbinenko + + * grub-core/normal/main.c: Fix freed memory dereference. + +2013-05-04 Vladimir Serbinenko + + Fix several memory leaks. + +2013-05-04 Vladimir Serbinenko + + * grub-core/normal/menu.c (run_menu): Fix timeout reference point. + +2013-05-04 Vladimir Serbinenko + + * grub-core/gettext/gettext.c: Try $lang.gmo as well. + +2013-05-04 Vladimir Serbinenko + + Fix test -a and -o precedence. + Reported by: adrian15. + +2013-05-04 Vladimir Serbinenko + + * grub-core/font/font.c (grub_font_construct_glyph): Fix memory leak. + +2013-05-03 Andrey Borzenkov + + Rename grub-core/tests/checksums.c into grub-core/tests/checksums.h + and add it as source to functional_test module. + +2013-05-03 Vladimir Serbinenko + + * grub-core/tests/video_checksum.c: Don't set GENERATE_MODE. + +2013-05-03 Vladimir Serbinenko + + New series of tests for gfxterm and gfxmenu. + +2013-05-03 Vladimir Serbinenko + + * grub-core/gfxmenu/gfxmenu.c (grub_gfxmenu_try): Allow specifying + the theme path relative to $prefix/themes. + +2013-05-03 Vladimir Serbinenko + + * grub-core/video/fb/fbblit.c (grub_video_fbblit_blend_BGR888_RGBA8888): + Fix order bug. + (grub_video_fbblit_blend_RGB888_RGBA8888): Likewise. + +2013-05-03 Vladimir Serbinenko + + * include/grub/gui.h (grub_gfxmenu_timeout_unregister): Free cb + descriptor. + +2013-05-03 Vladimir Serbinenko + + * grub-core/gfxmenu/view.c (grub_gfxmenu_view_new): Clear + grub_gfxmenu_timeout_notifications. + (grub_gfxmenu_view_destroy): Likewise. + +2013-05-03 Vladimir Serbinenko + + * grub-core/normal/term.c (print_ucs4_real): Fix startwidth in dry run. + +2013-05-02 Vladimir Serbinenko + + Several fixes to ieee1275 and big-endian video. + +2013-05-02 Vladimir Serbinenko + + Add missing exports on mips. + +2013-05-02 Vladimir Serbinenko + + * grub-core/tests/videotest_checksum.c (videotest_checksum): Error out + if no unifont is found. + Restore original keyboard. + +2013-05-02 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_linux_setup_video): Add + GRUB_VIDEO_ADAPTER_CAPTURE: to handled drived ids. + +2013-05-02 Vladimir Serbinenko + + First automated video test (running videotest and comparing results) + +2013-05-02 Vladimir Serbinenko + + * grub-core/commands/videotest.c: Reduce flickering and draw 6 squares + instead of 2 to have full RGB/CMY test pattern. + +2013-04-30 Vladimir Serbinenko + + Add few more tests. + +2013-04-30 Vladimir Serbinenko + + * include/grub/arc/arc.h: Account for missing "other" peripheral on + ARCS. All users updated. + +2013-04-30 Vladimir Serbinenko + + * grub-core/kern/mips/loongson/init.c: Support halt for loongson 2E. + +2013-04-30 Vladimir Serbinenko + + * grub-core/partmap/amiga.c: Fix size of checksummed block. + +2013-04-29 Vladimir Serbinenko + + * configure.ac: Use -mcmodel=large on x86_64-emu as well. + Reported by: qwertial. + +2013-04-29 Vladimir Testov + + * grub-core/gfxmenu/circular_progress.c: Set start_angle in degrees + with syntax "XXX deg"/"XXX °". + +2013-04-29 Vladimir Serbinenko + + Make PCI init in i386-qemu port more robust. + +2013-04-29 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Refresh first_shown_entry value when + cached view is reused. + * grub-core/gfxmenu/view.c: Call the refresh procedure for all + open boot menus. + +2013-04-29 Vladimir Serbinenko + + Unify more code in grub-install_header. + +2013-04-29 Vladimir Serbinenko + + Add few new tests. + +2013-04-29 Vladimir Serbinenko + + Enforce disabling of firmware disk drivers when native drivers kick in. + +2013-04-29 Vladimir Serbinenko + + * grub-core/commands/nativedisk.c: Customize the list of modules on + platform. Don't try to search for disks already using native drivers. + +2013-04-29 Vladimir Serbinenko + + * grub-core/bus/usb/uhci.c: Fix DMA handling and enable on all PCI + platforms. + +2013-04-29 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_arglist_to_argv): Fix + handling of variables containing backslash. + +2013-04-29 Vladimir Serbinenko + + * include/grub/list.h (FOR_LIST_ELEMENTS_SAFE):Fix a NULL pointer + dereference. + Reported by: qwertial. + +2013-04-29 Vladimir Serbinenko + + * grub-core/kern/mips/arc/init.c: Fix prefix detection. + +2013-04-29 Vladimir Serbinenko + + * grub-core/lib/arg.c (grub_arg_show_help): Fix a NULL pointer + dereference. + Reported by: qwertial. + +2013-04-28 Vladimir Serbinenko + + * docs/grub.texi: Add a comment about usefullness of nativedisk. + +2013-04-28 Vladimir Serbinenko + + * grub-core/commands/nativedisk.c: Ignore unknown filesystem error. + +2013-04-28 Vladimir Serbinenko + + New command `nativedisk'. + +2013-04-28 Vladimir Serbinenko + + * grub-core/io/lzopio.c: Use GRUB_PROPERLY_ALIGNED_ARRAY. + * grub-core/loader/i386/bsd.c: Likewise. + +2013-04-28 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Fix compilation for amd64 (format warnings). + +2013-04-28 Vladimir Serbinenko + + * include/grub/efi/api.h (GRUB_EFI_DEVICE_PATH_LENGTH): Use + grub_get_unaligned16 rather than shifts. + +2013-04-28 Vladimir Serbinenko + + * grub-core/kern/file.c: Use const char * rather than casting to + non-const. + +2013-04-28 Vladimir Serbinenko + + * grub-core/commands/probe.c: Add missing grub_device_close. + +2013-04-28 Vladimir Serbinenko + + * INSTALL: Document linguas.sh. + +2013-04-28 Vladimir Serbinenko + + Remove POTFILES.in and regenerate it in autogen.sh. + +2013-04-28 Vladimir Serbinenko + + Move --directory/--override-directorry to grub-install_header and unify. + +2013-04-28 Vladimir Serbinenko + + * grub-core/term/morse.c: Macroify dih and dah. + +2013-04-27 Paulo Flabiano Smorigo + + * include/grub/macho.h: Set GRUB_MACHO_FAT_EFI_MAGIC as unsigned. + +2013-04-27 Vladimir Serbinenko + + * grub-core/term/ns8250.c: Systematically probe ports by writing + to SR before using them. + +2013-04-27 Paulo Flabiano Smorigo + + * util/ieee1275/ofpath.c (of_path_of_scsi): Fix path output for sas + disks. + (check_sas): Get sas_adress info. + +2013-04-27 Vladimir Serbinenko + + * grub-core/disk/ahci.c (grub_ahci_pciinit): Fix handling of empty + ports. + +2013-04-27 Leon Drugi + + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_load): Fix cast in + BSS clearing. + +2013-04-27 Vladimir Serbinenko + + Core compression test. + +2013-04-27 Vladimir Serbinenko + + Implement grub_machine_get_bootlocation for ARC. + +2013-04-27 Vladimir Serbinenko + + Improve AHCI detection and command issuing. + +2013-04-26 Vladimir Serbinenko + + Fix pseries test. + +2013-04-26 Vladimir Serbinenko + + Make 'make check' work on emu. + +2013-04-26 Vladimir Serbinenko + + Replace libcurses with our own vt100 handling for the ease of testing + and decreasing prerequisites. + +2013-04-26 Vladimir Serbinenko + + * grub-core/Makefile.core.def: Fix grub-emu and grub-emu-lite sources. + +2013-04-26 Vladimir Serbinenko + + * util/getroot.c (exec_pipe): Put proper #if's so that its users don't + compile when not needed. + +2013-04-26 Vladimir Serbinenko + + * tests/pseries_test.in: New test. + +2013-04-26 Vladimir Serbinenko + + Add test to check that different boot mediums work. + +2013-04-26 Vladimir Serbinenko + + * util/grub-mkrescue.in: Rename i386-ieee1275 core image due to + ofw limited ISO support. + +2013-04-26 Vladimir Serbinenko + + * configure.ac: Fix loongson conditional. + +2013-04-25 Vladimir Serbinenko + + Enable mipsel-arc. + +2013-04-25 Vladimir Serbinenko + + Add serial on ARC platform. + +2013-04-25 Vladimir Serbinenko + + * grub-core/boot/powerpc/bootinfo.txt.in: Missing update from previous + commit. + +2013-04-25 Vladimir Serbinenko + + * tests/partmap_test.in: Add missing double semicolon. + +2013-04-25 Vladimir Serbinenko + + * util/grub-mkrescue.in: Fix loongson filename. + +2013-04-25 Vladimir Serbinenko + + * util/grub-mkrescue.in: Move all files that don't have a location + set in stone under /boot/grub. Use ISO hard links rather than copies + to save some space. + +2013-04-24 Vladimir Serbinenko + + * grub-core/term/ieee1275/console.c (grub_console_dimensions): Ignore + bogus SLOF values. + +2013-04-24 Vladimir Serbinenko + + Make check work on mips-arc. + +2013-04-24 Vladimir Serbinenko + + * util/grub-mkrescue.in: Alias sashARCS as sash. + +2013-04-24 Vladimir Serbinenko + + * grub-core/term/arc/console.c: Assume that console is 80x24 vt100 if + it's serial. + +2013-04-24 Vladimir Serbinenko + + * util/grub-install.in: Fix target fo qemu_mips. + Fix extension on EFI. + +2013-04-24 Vladimir Serbinenko + + * grub-core/normal/menu_text.c (print_entry): Put an asterisk + in front of chosen entry to mark it even if highlighting is lost. + +2013-04-24 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_linux_boot): Default to + gfxpayload=keep if cbfb is active. + +2013-04-24 Vladimir Serbinenko + + * grub-core/disk/ata.c (grub_ata_real_open): Use grub_error properly. + +2013-04-24 Vladimir Serbinenko + + Add missing video ids to coreboot and ieee1275 video. + +2013-04-24 Vladimir Serbinenko + + * util/grub-mkrescue.in: Add mips-arc support. + +2013-04-24 Vladimir Serbinenko + + * grub-core/kern/dl.c (grub_dl_resolve_symbols): Handle malloc failure. + +2013-04-24 Vladimir Serbinenko + + Move mips-arc link address. Previous link address was chosen + in belief that RAM on SGI platforms grows down while in fact it + grows up from an unusual base. + +2013-04-21 Vladimir Serbinenko + + * grub-core/disk/arc/arcdisk.c (grub_arcdisk_iterate_iter): + Fix a type which prevented CD-ROM and floppy boot. + +2013-04-21 Vladimir Serbinenko + + Support coreboot framebuffer. + + * grub-core/video/i386/coreboot/cbfb.c: New file. + +2013-04-20 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_mm_init_region): Fix condition for + detecting too small regions. + +2013-04-20 Vladimir Serbinenko + + * grub-core/Makefile.core.def (legacycfg): Enable on EFI. + +2013-04-20 Vladimir Serbinenko + + * grub-core/lib/efi/relocator.c (grub_relocator_firmware_alloc_region): + Remove dprintf. + * grub-core/lib/relocator.c (malloc_in_range): Likewise. + +2013-04-19 Vladimir Serbinenko + + * grub-core/kern/ieee1275/init.c (grub_claim_heap): Improve handling + of GRUB_IEEE1275_FLAG_FORCE_CLAIM. + * grub-core/loader/powerpc/ieee1275/linux.c + (grub_linux_claimmap_iterate): Handle GRUB_IEEE1275_FLAG_FORCE_CLAIM. + +2013-04-19 Vladimir Serbinenko + + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): + Look for /boot-rom as well as /rom/boot-rom. + +2013-04-19 Vladimir Serbinenko + + * grub-core/commands/videotest.c (grub_cmd_videotest): Fix error + handling when creating text_layer failed. + * grub-core/video/video.c (grub_video_create_render_target): + Set result to 0 on error. + (grub_video_delete_render_target): Do not dereference NULL. + +2013-04-19 Vladimir Serbinenko + + * grub-core/kern/elfXX.c (grub_elfXX_load): Handle + GRUB_ELF_LOAD_FLAGS_30BITS and GRUB_ELF_LOAD_FLAGS_62BITS. + * grub-core/loader/powerpc/ieee1275/linux.c (grub_linux_load32), + (grub_linux_load64): Mask out 2 high bits. + +2013-04-19 Andrey Borzenkov + + * util/grub.d/30_os-prober.in: Add onstr to linux entries in one + more place. + +2013-04-19 Vladimir Serbinenko + + Add support for pseries and other bootinfo machines to grub-mkrescue. + + Tested by: Paulo Flabiano Smorigo. + +2013-04-17 Vladimir Serbinenko + + * util/grub-mkrescue.in: Add GPT for EFI boot. + +2013-04-17 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c: Detect floppies by ACPI ID. + It improves performance in qemu. + +2013-04-17 Vladimir Serbinenko + + * build-aux/snippet: Add missing gnulib files. + +2013-04-16 Andrey Borzenkov + + * grub-core/disk/efi/efidisk.c: Really limit transfer chunk size. + +2013-04-16 Andrey Borzenkov + + * autogen.sh: Use "-f" in addition for "-h" when checking file presence. + +2013-04-15 Vladimir Serbinenko +2013-04-15 Peter Jones + + * grub-core/disk/efi/efidisk.c: Limit disk read or write chunk to 0x500 + sectors. + Based on patch by Peter Jones. + +2013-04-15 Vladimir Serbinenko + + Fix DMRAID partition handling. + +2013-04-15 Vladimir Serbinenko + + * tests/grub_cmd_date.in: Skip on sparc64. + +2013-04-15 Vladimir Serbinenko + + * tests/grub_script_expansion.in: Use fixed-string grep to skip over + firmware error messages. + +2013-04-15 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_devalias_next): Make + source and destination differ. + +2013-04-15 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c: Fix CD-ROM and boot device + detection. + +2013-04-14 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/sys/types.h: Make WORDS_BIGENDIAN definition + match config-util.h to avoid warnings and increase compatibility. + +2013-04-14 Szymon Janc +2013-04-14 Vladimir Serbinenko + + Add option to compress files on install/image creation. + +2013-04-14 Vladimir Serbinenko + + * docs/grub-dev.texi: Rearrange menu to match the section order. + Reported by: Bryan Hundven. + +2013-04-14 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c: Remove useless leftover pointer. + +2013-04-14 Vladimir Serbinenko + + Move GRUB out of system area when using xorriso 1.2.9 or later. + +2013-04-14 Vladimir Serbinenko + + * tests/grub_cmd_date.in: Add missing exit 1. + +2013-04-14 Vladimir Serbinenko + + * tests/partmap_test.in: Skip on sparc64. + +2013-04-14 Vladimir Serbinenko + + Support grub-shell on sparc64. + +2013-04-14 Vladimir Serbinenko + + Support mkrescue on sparc64. + +2013-04-14 Vladimir Serbinenko + + Allow IEEE1275 ports on path even if it wasn't detected automatically. + Needed on OpenBIOS due to incomplete device tree. + +2013-04-14 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c: Iterate over bootpath even if it + would be otherwise excluded. + +2013-04-14 Vladimir Serbinenko + + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): + Inline name defines used only once. + +2013-04-13 Vladimir Serbinenko + + Fix memory leaks in ofnet. + Reported by: Francesco Lavra. + +2013-04-12 Vladimir Serbinenko + + * docs/man/grub-glue-efi.h2m: Add missing file. + +2013-04-12 Vladimir Serbinenko + + * util/grub-mkrescue.in: Fix wrong architecture for ppc dir. + +2013-04-12 Vladimir Serbinenko + + Better support Apple Intel Macs on CD. + +2013-04-12 Vladimir Serbinenko + + Replace stpcpy with grub_stpcpy in tools. + +2013-04-12 Vladimir Serbinenko + + Handle Japanese special keys. + Reported by: Hiroyuki YAMAMORI. + Codes supplied by: Hiroyuki YAMAMORI. + +2013-04-12 Vladimir Serbinenko + + * util/grub-mkimage.c: Document memdisk implying --prefix. + +2013-04-12 Vladimir Serbinenko + + * grub-core/bus/usb/ehci.c (grub_ehci_fini_hw): Ignore errors, not + much we can do about it anyway. + +2013-04-12 Aleš Nesrsta + + Fix handling of split transfers. + +2013-04-12 Vladimir Serbinenko + + * grub-core/net/http.c: Fix bad free. + +2013-04-12 Vladimir Serbinenko + + * grub-core/net/drivers/ieee1275/ofnet.c: Don't attempt to send more + than buffer size. + +2013-04-12 Vladimir Serbinenko + + Disable partmap check on i386-ieee1275 due to openfirmware issues. + +2013-04-12 Vladimir Serbinenko + + * tests/util/grub-shell.in: Fix it on powerpc. + +2013-04-12 Vladimir Serbinenko + + Turn off QEMU ACPI-way since new releases don't have shutdown port + anymore. + +2013-04-12 Vladimir Serbinenko + + * docs/grub.texi: Update coreboot status info. + +2013-04-12 Vladimir Serbinenko + + * tests/grub_cmd_date.in: New test for datetime. + +2013-04-12 Vladimir Serbinenko + + * tests/partmap_test.in: Fix missing qemudisk setting. + +2013-04-11 Vladimir Serbinenko + + Support i386-ieee1275 grub-mkrescue and make check on it. + +2013-04-11 Vladimir Serbinenko + + Merge powerpc grub-mkrescue flavour with common. Use xorriso HFS+ + feature for it. + +2013-04-11 Vladimir Serbinenko + + * docs/grub.texi: Fix description of GRUB_CMDLINE_XEN and + GRUB_CMDLINE_XEN_DEFAULT. + Reported by: Marc Warne (GigaTux) + +2013-04-11 Vladimir Serbinenko + + Import new gnulib. + +2013-04-11 Vladimir Serbinenko + + Use ACPI shutdown intests as traditional port was removed. + +2013-04-11 Andrey Borzenkov + + * util/grub.d/30_os-prober.in: Add onstr to entries for visual + distinction. + +2013-04-11 Vladimir Serbinenko + + Fix missing PVs if they don't contain "interesting" LV. Closes #38677. + Fix few warining messages and leaks while on it. + +2013-04-09 Andrey Borzenkov + + * autogen.sh: Use "-h", not "-f", to test for existence of symbolic + links under grub-core/lib/libgcrypt-grub/mpi. + +2013-04-08 Vladimir Serbinenko + + Fix ia64-efi image generation on big-endian machines. Deduplicate + some code while on it. + Reported by: Leif Lindholm. + +2013-04-08 Andrey Borzenkov + + * grub-core/Makefile.core.def: Add kern/elfXX.c to elf module + as extra_dist. + +2013-04-08 Andrey Borzenkov + + * grub-core/term/i386/pc/console.c: Fix cursor moving algorithm. + +2013-04-08 Bryan Hundven + + * docs/grub-dev.texi: Move @itemize after @subsection to satisfy + texinfo-5.1. + +2013-04-08 Vladimir Serbinenko + + * grub-core/normal/term.c: Few more fixes for menu entry editor + rendering. + Reported by: Andrey Borzenkov + +2013-04-07 Vladimir Serbinenko + + * grub-core/normal/term.c: Few more fixes for menu entry editor + rendering. + Reported by: Andrey Borzenkov + +2013-04-06 Andrey Borzenkov + + * conf/Makefile.extra-dist (EXTRA_DIST): Add + grub-core/lib/libgcrypt/src/gcrypt.h.in and util/import_gcrypth.sed. + +2013-04-06 Andrey Borzenkov + + * util/grub-install_header: Use @PACKAGE@.mo in message catalog name + instead of hardcoding grub.mo. + +2013-04-05 Fedora Ninjas + + * util/grub.d/30_os-prober.in: Support btrrfs linux-prober extensions. + +2013-04-05 Vladimir Serbinenko + + Use GRUB_PROPERLY_ALIGNED_ARRAY in grub-core/disk/cryptodisk.c and + grub-core/disk/geli.c. + +2013-04-05 Vladimir Serbinenko + + * util/grub-mkfont.c: Prefer enum to #define. + +2013-04-05 Vladimir Serbinenko + + * grub-core/commands/acpi.c: Use sizeof rather than hardcoding the size. + +2013-04-05 Vladimir Serbinenko + + Replace 8 with GRUB_CHAR_BIT in several places when appropriate. + +2013-04-05 Vladimir Serbinenko + + Add new defines GRUB_RSDP_SIGNATURE_SIZE and GRUB_RSDP_SIGNATURE. + +2013-04-05 Vladimir Serbinenko + + * grub-core/commands/verify.c: Use GRUB_CHAR_BIT. + +2013-04-05 Vladimir Serbinenko + + * include/grub/bsdlabel.h: Use enums. + +2013-04-05 Vladimir Serbinenko + + Move GRUB_CHAR_BIT to types.h. + +2013-04-04 Andrey Borzenkov + + * docs/grub.texi: Document more user commands. + +2013-04-04 Andrey Borzenkov + + * docs/grub.texi: Document menuentry --id option. + +2013-04-04 Francesco Lavra + + * util/grub-mkimage.c: Introduce new define EFI32_HEADER_SIZE. + +2013-04-04 Vladimir Serbinenko + + Unify file copying setup across different install scripts. Add + options for performing partial install. + +2013-04-04 Vladimir Serbinenko +2013-04-04 Peter Jones + + * grub-core/disk/efi/efidisk.c: Handle partitions on non-512B disks. + +2013-04-04 Vladimir Serbinenko + + Use TSC as a possible time source on i386-ieee1275. + +2013-04-04 Vladimir Serbinenko + + * grub-core/bus/usb/usbtrans.c (grub_usb_bulk_readwrite_packetize): + Init err. + +2013-04-04 Vladimir Serbinenko + + * util/grub-setup.c (setup): Handle some corner cases. + +2013-04-04 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/locale.h [GRUB_UTIL]: Include host locale.h. + +2013-04-03 Vladimir Serbinenko + + * grub-core/commands/verify.c: Save verified file to avoid it being + tampered with after verification was done. + +2013-04-03 Vladimir Serbinenko + + * grub-core/term/i386/pc/console.c (grub_console_getwh): Decrease + reported width by one to compensate for curesor algorithm problem. + +2013-04-03 Vladimir Serbinenko + + Fix screen corruption in menu entry editor and simplify the code + flow while on it. + +2013-04-03 Andrey Borzenkov + + * util/grub-mount.c (fuse_init): Return error if fuse_main + failed. + +2013-04-03 Francesco Lavra + + * include/grub/elf.h: Add missing ARM relocation codes and fix + existing ones. + +2013-04-03 Vladimir Testov + + * grub-core/gfxmenu/gui_progress_bar.c: Handle padding sizes. + +2013-04-03 Vladimir Testov +2013-04-03 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_circular_progress.c: Take both width and height + into account when calculating radius. + +2013-04-03 Vladimir Testov + + * grub-core/gfxmenu/view.c: Fix off-by-one error. + +2013-04-03 Vladimir Testov + + * grub-core/gfxmenu/gui_circular_progress.c: Fix off-by-one error. + +2013-04-01 Radosław Szymczyszyn + + * grub-core/partmap/apple.c (apple_partition_map_iterate): Add + missing closing bracket. + +2013-04-01 Radosław Szymczyszyn + + * INSTALL: Mention xorriso requirement. + +2013-03-31 Andrey Borzenkov + + * grub-core/commands/verify.c: Fix hash algorithms values for + the first three hashes - they start with 1, not with 0. + +2013-03-26 Vladimir Serbinenko + + * grub-core/kern/efi/mm.c (grub_efi_finish_boot_services): + Try terminating EFI services several times due to quirks in some + implementations. + +2013-03-26 Colin Watson + + * grub-core/commands/acpihalt.c (skip_ext_op): Add support for + skipping Event, Device, Processor, PowerRes, ThermalZone, and + BankField extended opcodes. + (get_sleep_type): Add minimal scope handling (just enough to + handle setting the scope to the root path). + (grub_acpi_halt): Parse any SSDTs as well as the DSDT. + * include/grub/acpi.h: Add enumeration values for Event, Device, + Processor, PowerRes, ThermalZone, and BankField extended opcodes. + +2013-03-26 Vladimir Testov + + * grub-core/gfxmenu/font.c (grub_font_get_string_width): Fix + memory leak. + +2013-03-25 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Give more time for AHCI request. + +2013-03-25 Vladimir Serbinenko + + * grub-core/normal/menu.c: Wait if there were errors shown at "boot" + command. + +2013-03-25 Vladimir Serbinenko + + Replace the region at 0 from coreboot tables to available in BSD + memory map. + +2013-03-24 Vladimir Serbinenko + + * util/grub.d/20_linux_xen.in: Automatically add no-real-mode edd=off on + non-BIOS platforms. + +2013-03-24 Vladimir Serbinenko + + * grub-core/Makefile.core.def (vga): Disable on coreboot and multiboot + platforms. + +2013-03-24 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Fix + handling of multi-device filesystems. + +2013-03-24 Vladimir Serbinenko + + * grub-core/Makefile.core.def (vbe): Disable on coreboot and multiboot + platforms. + +2013-03-24 Vladimir Serbinenko + + Add new 'proc' filesystem framework and put luks_script into it. + +2013-03-23 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c: Increase robustness on coreboot + and qemu. + +2013-03-22 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Fix incorrect handling of special volumes. + +2013-03-22 Vladimir Serbinenko + + Add ability to generate newc additions on runtime. + +2013-03-22 Vladimir Serbinenko + + * grub-core/commands/i386/coreboot/cbls.c: Fix typos and wrong + description. + +2013-03-21 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. + +2013-03-20 Vladimir Serbinenko + + * grub-core/commands/verify.c (hashes): Add several hashes + from the spec. + +2013-03-20 Vladimir Serbinenko + + Slight improve in USB-related boot-time checkpoints. + +2013-03-20 Vladimir Serbinenko + + * grub-core/commands/boottime.c: Fix copyright header. + +2013-03-20 Vladimir Serbinenko + + New commands cbmemc, lscoreboot, coreboot_boottime to inspect + coreboot tables content. Support for cbmemc. + +2013-03-20 Vladimir Serbinenko + + Fix a conflict between ports structures with 2 controllers of + same kind. + +2013-03-20 Vladimir Serbinenko + + * include/grub/boottime.h: Add missing file. + +2013-03-19 Vladimir Serbinenko + + Initialize USB ports in parallel to speed-up boot. + +2013-03-19 Vladimir Serbinenko + + Fix USB devices not being detected when requested + due to delayed attach. + +2013-03-19 Vladimir Serbinenko + + Implement boot time analysis framework. + +2013-03-19 Vladimir Serbinenko + + Remove get_endpoint_descriptor and change all functions needing + descriptor to just receive it as argument rather than endpoint + address. + +2013-03-19 Aleš Nesrsta + + Better estimate the maximum USB transfer size. + +2013-03-17 Vladimir Serbinenko + + Resend a packet if we got the wrong buffer in status. + +2013-03-10 Vladimir Serbinenko + + * grub-core/loader/i386/bsdXX.c (grub_openbsd_find_ramdisk): Use + multiplication rather than division. + +2013-03-10 Vladimir Serbinenko + + * grub-core/lib/arg.c (grub_arg_list_alloc): Use shifts rather + than divisions. + +2013-03-10 Vladimir Serbinenko + + * grub-core/commands/verify.c (grub_verify_signature): Use unsigned + operations to have intended shifts and not divisions. + +2013-03-10 Vladimir Serbinenko + + * grub-core/loader/i386/pc/plan9.c (fill_disk): Fix types to use + intended shifts rather than division. + +2013-03-10 Vladimir Serbinenko + + * include/grub/datetime.h (grub_datetime2unixtime): Fix unixtime + computation for some years before epoch. Avode confusing division + while on it. + +2013-03-10 Vladimir Serbinenko + + * grub-core/video/i386/pc/vbe.c + (grub_video_vbe_print_adapter_specific_info): Replace division by + shifts. + +2013-03-10 Vladimir Serbinenko + + Adjust types in gdb module to have intended unsigned shifts rather than + signed divisions. + +2013-03-10 Vladimir Serbinenko + + * grub-core/fs/hfs.c (grub_hfs_read_file): Avoid divmod64 since the + maximum size is 4G - 1 on hfs + +2013-03-10 Vladimir Serbinenko + + Avoid costly 64-bit division in grub_get_time_ms on most platforms. + +2013-03-10 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (grub_fshelp_log2blksize): Remove now unused + function. + +2013-03-07 Andrey Borzenkov + + * grub-core/fs/iso9660.c (add_part): Remove always_inline attribute + causing gcc error with gcc 4.7.1. + +2013-03-07 Nickolai Zeldovich + + * grub-core/commands/acpi.c (grub_acpi_create_ebda): Don't + dereference null pointer. While the code is technically correct, gcc + may eliminate a null check if pointer is already dereferenced. + +2013-03-07 Nickolai Zeldovich + + * grub-core/normal/crypto.c (read_crypto_list): Fix incorrect + OOM check. + * grub-core/normal/term.c (read_terminal_list): Likewise. + +2013-03-07 Vladimir Serbinenko + + Lift up core size limits on some platforms. Fix potential memory + corruption with big core on small memory systems. Document remaining + limits. + +2013-03-05 Vladimir Serbinenko + + * grub-core/term/terminfo.c (grub_terminfo_cls): Issue an explicit + gotoxy to 0,0. + +2013-03-03 Vladimir Serbinenko + + Remove all trampoline support. Add -Wtrampolines when + present. Remove symbols used for trampolines to make + link fail if trampolines are present. + +2013-03-03 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_arglist_to_argv): Move + append out of its parent. + +2013-03-03 Vladimir Serbinenko + + * grub-core/commands/regexp.c (set_matches): Move setvar out of its + parent. + +2013-03-03 Vladimir Serbinenko + + * grub-core/kern/env.c, include/grub/env.h: Change iterator through + all vars to a macro. All users updated. + +2013-03-03 Vladimir Serbinenko + + * grub-core/disk/ieee1275/nand.c: Fix compilation on + i386-ieee1275. + +2013-03-02 Vladimir Serbinenko + + * include/grub/cmos.h: Handle high CMOS addresses on sparc64. + +2013-03-02 Vladimir Serbinenko + + * include/grub/mips/loongson/cmos.h: Fix high CMOS addresses. + +2013-03-02 Vladimir Serbinenko + + Move to more hookless approach in IEEE1275 devices handling. + +2013-03-02 Vladimir Serbinenko + + * grub-core/kern/term.c (grub_term_normal_color), + (grub_term_highlight_color): Add back lost defaults. + +2013-03-02 Vladimir Serbinenko + + Make elfload not use hooks. Opt for flags and iterators instead. + +2013-03-02 Vladimir Serbinenko + + * grub-core/lib/ia64/longjmp.S: Fix the name of longjmp function. + * grub-core/lib/ia64/setjmp.S: Fix the name of setjmp function. + +2013-03-02 Vladimir Serbinenko + + * grub-core/script/execute.c (gettext_append): Remove nested functions. + +2013-03-02 Vladimir Serbinenko + + * grub-core/normal/charset.c (grub_bidi_logical_to_visual): Add + hook pass-through parameter. All users updated and unnested. + +2013-03-02 Vladimir Serbinenko + + * grub-core/commands/loadenv.c (grub_cmd_list_env): Move print_var + out of its parent. + +2013-03-02 Vladimir Serbinenko + + * grub-core/fs/hfs.c: Remove nested functions. + +2013-03-01 Vladimir Serbinenko + + * grub-core/fs/hfsplus.c (grub_hfsplus_btree_iterate_node): Pass + the context through. + (grub_hfsplus_iterate_dir): Move nested function out of its parent. + +2013-03-01 Vladimir Serbinenko + + * util/grub-editenv.c (list_variables): Move print_var out of its + parent. + +2013-03-01 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (read_device_map): Remove nested + function. + +2013-03-01 Vladimir Serbinenko + + * grub-core/gentrigtables.c: Make tables const. + +2013-03-01 Vladimir Serbinenko + + Remove nested functions from videoinfo iterators. + +2013-03-01 Vladimir Serbinenko + + * grub-core/loader/i386/pc/linux.c (grub_cmd_linux): Fix compilation + for 64-bit platforms. + +2013-03-01 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c: Transform iterate_child_devices into + a FOR_CHILDREN macro. + +2013-03-01 Vladimir Serbinenko + + * grub-core/kern/main.c (grub_set_prefix_and_root): Strip trailing + platform from firmware path. + +2013-02-28 Vladimir Serbinenko + + Enable linux16 on non-BIOS systems for i.a. memtest. + + * grub-core/loader/i386/pc/linux.c (grub_cmd_linux): Handle hole at 0 + correctly. + * grub-core/Makefile.core.def (linux16): Enable on all x86 flavours. + +2013-02-28 Vladimir Serbinenko + + * grub-core/kern/i386/coreboot/mmap.c (grub_linuxbios_table_iterate): + Fix end of table condition. + +2013-02-28 Vladimir Serbinenko + + * grub-core/lib/arg.c (grub_arg_show_help): Move showargs + out of its parent. + +2013-02-28 Vladimir Serbinenko + + * grub-core/fs/jfs.c: Remove nested functions. + +2013-02-28 Vladimir Serbinenko + + * grub-core/fs/minix.c: Remove nested functions. + +2013-02-28 Vladimir Serbinenko + + * grub-core/fs/iso9660.c: Remove nested functions. + +2013-02-28 Vladimir Serbinenko + + * grub-core/commands/parttool.c (grub_cmd_parttool): Move show_help out + of parent function. + +2013-02-28 Vladimir Serbinenko + + * util/grub-fstest.c: Remove nested functions. + +2013-02-27 Vladimir Serbinenko + + * grub-core/loader/machoXX.c: Remove nested functions. + +2013-02-27 Colin Watson + + Remove nested functions from disk and file read hooks. + + * include/grub/disk.h (grub_disk_read_hook_t): New type. + (struct grub_disk): Add read_hook_data member. + * include/grub/file.h (struct grub_file): Likewise. + * include/grub/fshelp.h (grub_fshelp_read_file): Add read_hook_data + argument. + + Update all callers. + +2012-02-27 Andrey Borzenkov + + * grub-core/partmap/msdos.c (grub_partition_msdos_iterate): + Fix off by one error in enumerating extended partitions. + +2013-02-26 Andrey Borzenkov + + * grub-core/disk/efi/efidisk.c(grub_efidisk_get_device_name): Fix + memory leak if device name is not found. + +2013-02-25 Andrey Borzenkov + + * grub-core/normal/menu_entry.c (update_screen): remove + unused variable `off' which caused scroll down arrow to be always shown. + +2013-02-25 Andrey Borzenkov + + * grub-core/normal/menu_entry.c (insert_string): fix off by one + access to unallocated memory. + +2013-02-25 Andrey Borzenkov + + * Makefile.util.def: Add partmap/msdos.c to common library. + * include/grub/msdos_partition.h: Add GRUB_PC_PARTITION_TYPE_LDM + * grub-core/disk/ldm.c: Check for existence of + GRUB_PC_PARTITION_TYPE_LDM. + +2013-02-25 Vladimir Serbinenko + + * grub-core/normal/misc.c (grub_normal_print_device_info): Use KiB to display + sizes and display sector size. + +2013-02-24 Vladimir Serbinenko + + Implement new command cmosdump. + +2013-02-19 Paulo Flabiano Smorigo + + Support Openfirmware disks with non-512B sectors. + + * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_open): Get the block + size of the disk. + * (grub_ofdisk_get_block_size): New function. + * (grub_ofdisk_prepare): Use the correct block size. + * (grub_ofdisk_read): Likewise. + * (grub_ofdisk_write): Likewise. + * include/grub/ieee1275/ofdisk.h (grub_ofdisk_get_block_size): + New proto. + +2013-02-06 Vladimir Serbinenko + + * grub-core/commands/lsacpi.c: Fix types on 64-bit platform. + +2013-02-04 Vladimir Serbinenko + + * grub-core/disk/cryptodisk.c (grub_cryptodisk_scan_device): Don't stop + on first error. + +2013-02-01 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (find_file): Set oldnode to zero after + freeing it. + +2013-02-01 Vladimir Serbinenko + + Implement USBDebug (full USB stack variant). + +2013-02-01 Vladimir Serbinenko + + * grub-core/commands/lsacpi.c: Show more info. Hide some boring parts + unless they have unexpected values. + +2013-02-01 Vladimir Serbinenko + + * grub-core/bus/usb/usb.c (grub_usb_device_attach): Add missing + grub_print_error. + +2013-02-01 Vladimir Serbinenko + + * grub-core/bus/usb/serial/common.c (grub_usbserial_attach): Fix missing + zero-out of port structure. + +2013-01-30 Vladimir Serbinenko + + * grub-core/fs/xfs.c (grub_xfs_read_block): Fix computation in presence + of extended attributes. + +2013-01-27 Andrey Borzenkov + + * util/grub-install.in: change misleading comment about + device.map creation + +2013-01-27 Vladimir Serbinenko + + * grub-core/normal/menu_text.c (grub_menu_init_page): Fix behaviour + when menu highlight color isn't set. + +2013-01-27 C. Masloch + + Improve FreeDOS direct loading support compatibility. + + * include/grub/i386/relocator.h (grub_relocator16_state): + New member ebp. + * grub-core/lib/i386/relocator.c (grub_relocator16_ebp): New extern + variable. + (grub_relocator16_boot): Handle %ebp. + * grub-core/lib/i386/relocator16.S: Likewise. + * grub-core/loader/i386/pc/freedos.c: + Load BPB to pass kernel which partition to load from. + Check that kernel file is not too large. + Set register dl to BIOS unit number as well. + +2013-01-22 Colin Watson + + * util/grub-reboot.in (usage): Document the need for + GRUB_DEFAULT=saved. + * util/grub-set-default.in (usage): Likewise. + Reported by: Brian Candler. Fixes Ubuntu bug #1102925. + +2013-01-21 Vladimir Serbinenko + + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h: Include sys/types.h rather + than defining WORDS_BIGENDIAN manually. + +2013-01-21 Vladimir Serbinenko + + * include/grub/kernel.h (FOR_MODULES): Adjust to preserve alignment + invariants. + +2013-01-21 Colin Watson + + * grub-core/font/font.c (blit_comb: do_blit): Make static instead of + nested. + (blit_comb: add_device_width): Likewise. + +2013-01-21 Colin Watson + + Remove nested functions from USB iterators. + + * include/grub/usb.h (grub_usb_iterate_hook_t): New type. + (grub_usb_controller_iterate_hook_t): Likewise. + (grub_usb_iterate): Add hook_data argument. + (grub_usb_controller_iterate): Likewise. + (struct grub_usb_controller_dev.iterate): Likewise. + + Update all implementations and callers. + +2013-01-21 Vladimir Serbinenko + + * grub-core/normal/term.c (print_ucs4_terminal): Don't output right + margin when not needed. + +2013-01-21 Vladimir Serbinenko + + Make color variables global instead of it being per-terminal. + +2013-01-21 Vladimir Serbinenko + + * grub-core/commands/ls.c (grub_ls_print_devices): Add missing + asterisk. + +2013-01-21 Colin Watson + + Fix powerpc and sparc64 build failures caused by un-nesting memory + map iterators. + +2013-01-21 Colin Watson + + * grub-core/disk/arc/arcdisk.c (grub_arcdisk_iterate): Fix + parameter declarations. + +2013-01-21 Vladimir Serbinenko + + * grub-core/commands/lsmmap.c: Fix unused variable on emu. + +2013-01-21 Vladimir Serbinenko + + Improve spkmomdem reliability by adding a separator between bytes. + +2013-01-21 Colin Watson + + * grub-core/partmap/msdos.c (embed_signatures): Add the signature of + an Acer registration utility with several sightings in the wild. + Reported by: Rickard Westman. Fixes Ubuntu bug #987022. + +2013-01-21 Colin Watson + + Remove nested functions from filesystem directory iterators. + + * include/grub/fs.h (grub_fs_dir_hook_t): New type. + (struct grub_fs.dir): Add hook_data argument. + + Update all implementations and callers. + +2013-01-21 Colin Watson + + * docs/grub.texi (Multi-boot manual config): Fix typo for + "recommended". + +2013-01-20 Leif Lindholm + + * util/grub-mkimage.c (main): Postpone freeing arguments.output + until after its use in generate_image. + +2013-01-20 Colin Watson + + * grub-core/loader/i386/linux.c (grub_cmd_initrd): Don't add the + initrd size to addr_min, since the initrd will be allocated after + this address. + +2013-01-20 Andrey Borzenkov + + * conf/Makefile.common: Fix autogen rules to pass definition + files on stdin; Makefile.util.am needs Makefile.utilgcry.def + +2013-01-20 Leif Lindholm + + * include/grub/elf.h: Update ARM definitions based on binutils. + +2013-01-20 Aleš Nesrsta + + Split long USB transfers into short ones. + +2013-01-20 Andrey Borzenkov + + * docs/grub.texi (Simple configuration): Clarify GRUB_HIDDEN_TIMEOUT + is interrupted by ESC. + +2013-01-20 Vladimir Serbinenko + + * util/grub-script-check.c (main): Uniform the error message. + +2013-01-20 Colin Watson + + Remove nested functions from ELF iterators. + +2013-01-20 Colin Watson + + Remove nested functions from device iterators. + + * include/grub/arc/arc.h (grub_arc_iterate_devs_hook_t): New type. + (grub_arc_iterate_devs): Add hook_data argument. + * include/grub/ata.h (grub_ata_dev_iterate_hook_t): New type. + (struct grub_ata_dev.iterate): Add hook_data argument. + * include/grub/device.h (grub_device_iterate_hook_t): New type. + (grub_device_iterate): Add hook_data argument. + * include/grub/disk.h (grub_disk_dev_iterate_hook_t): New type. + (struct grub_disk_dev.iterate): Add hook_data argument. + (grub_disk_dev_iterate): Likewise. + * include/grub/gpt_partition.h (grub_gpt_partition_map_iterate): + Likewise. + * include/grub/msdos_partition.h (grub_partition_msdos_iterate): + Likewise. + * include/grub/partition.h (grub_partition_iterate_hook_t): New + type. + (struct grub_partition_map.iterate): Add hook_data argument. + (grub_partition_iterate): Likewise. + * include/grub/scsi.h (grub_scsi_dev_iterate_hook_t): New type. + (struct grub_scsi_dev.iterate): Add hook_data argument. + + Update all callers. + +2013-01-20 Colin Watson + + Fix typos for "developer" and "development". + +2013-01-18 Vladimir Serbinenko + + Add license header to spkmodem-recv.c. + +2013-01-17 Vladimir Serbinenko + + Rewrite spkmodem to use PIT for timing. Double the speed. + +2013-01-16 Vladimir Serbinenko + + Add new command pcidump. + +2013-01-16 Vladimir Serbinenko + + New terminal outputs using serial: morse and spkmodem. + +2013-01-16 Vladimir Serbinenko + + Improve bidi handling in entry editor. + +2013-01-16 Vladimir Serbinenko + + * grub-core/script/lexer.c (grub_script_lexer_init): Rename getline + argument to prevent name collision. + +2013-01-15 Colin Watson + + Remove nested functions from script reading and parsing. + + * grub-core/kern/parser.c (grub_parser_split_cmdline): Add + getline_data argument, passed to getline. + * grub-core/kern/rescue_parser.c (grub_rescue_parse_line): Add + getline_data argument, passed to grub_parser_split_cmdline. + * grub-core/script/lexer.c (grub_script_lexer_yywrap): Pass + lexerstate->getline_data to lexerstate->getline. + (grub_script_lexer_init): Add getline_data argument, saved in + lexerstate->getline_data. + * grub-core/script/main.c (grub_normal_parse_line): Add getline_data + argument, passed to grub_script_parse. + * grub-core/script/script.c (grub_script_parse): Add getline_data + argument, passed to grub_script_lexer_init. + * include/grub/parser.h (grub_parser_split_cmdline): Update + prototype. Update all callers to pass appropriate getline data. + (struct grub_parser.parse_line): Likewise. + (grub_rescue_parse_line): Likewise. + * include/grub/reader.h (grub_reader_getline_t): Add void * + argument. + * include/grub/script_sh.h (struct grub_lexer_param): Add + getline_data member. + (grub_script_parse): Update prototype. Update all callers to pass + appropriate getline data. + (grub_script_lexer_init): Likewise. + (grub_normal_parse_line): Likewise. + + * grub-core/commands/legacycfg.c (legacy_file_getline): Add unused + data argument. + * grub-core/kern/parser.c (grub_parser_execute: getline): Make + static instead of nested. Rename to ... + (grub_parser_execute_getline): ... this. + * grub-core/kern/rescue_reader.c (grub_rescue_read_line): Add unused + data argument. + * grub-core/normal/main.c (read_config_file: getline): Make static + instead of nested. Rename to ... + (read_config_file_getline): ... this. + (grub_normal_read_line): Add unused data argument. + * grub-core/script/execute.c (grub_script_execute_sourcecode: + getline): Make static instead of nested. Rename to ... + (grub_script_execute_sourcecode_getline): ... this. + * util/grub-script-check.c (main: get_config_line): Make static + instead of nested. + +2013-01-15 Colin Watson + + Remove nested functions from memory map iterators. + + * grub-core/efiemu/mm.c (grub_efiemu_mmap_iterate): Add hook_data + argument, passed to hook. + * grub-core/kern/i386/coreboot/mmap.c + (grub_linuxbios_table_iterate): Likewise. + (grub_machine_mmap_iterate: iterate_linuxbios_table): Make static + instead of nested. + (grub_machine_mmap_iterate): Add hook_data argument. + * grub-core/kern/i386/multiboot_mmap.c (grub_machine_mmap_iterate): + Add hook_data argument, passed to hook. + * grub-core/kern/i386/pc/mmap.c (grub_machine_mmap_iterate): + Likewise. + * grub-core/kern/i386/qemu/mmap.c (grub_machine_mmap_iterate): + Likewise. + * grub-core/kern/ieee1275/mmap.c (grub_machine_mmap_iterate): + Likewise. + * grub-core/kern/mips/arc/init.c (grub_machine_mmap_iterate): + Likewise. + * grub-core/kern/mips/loongson/init.c (grub_machine_mmap_iterate): + Likewise. + * grub-core/kern/mips/qemu_mips/init.c (grub_machine_mmap_iterate): + Likewise. + * grub-core/mmap/efi/mmap.c (grub_efi_mmap_iterate): Likewise. + (grub_machine_mmap_iterate): Likewise. + * grub-core/mmap/mmap.c (grub_mmap_iterate): Likewise. + * include/grub/efiemu/efiemu.h (grub_efiemu_mmap_iterate): Update + prototype. + * include/grub/memory.h (grub_memory_hook_t): Add data argument. + Remove NESTED_FUNC_ATTR from here and from all users. + (grub_mmap_iterate): Update prototype. + (grub_efi_mmap_iterate): Update prototype. Update all callers to + pass appropriate hook data. + (grub_machine_mmap_iterate): Likewise. + + * grub-core/commands/acpi.c (grub_acpi_create_ebda: find_hook): Make + static instead of nested. + * grub-core/commands/lsmmap.c (grub_cmd_lsmmap: hook): Likewise. + Rename to ... + (lsmmap_hook): ... this. + * grub-core/efiemu/mm.c (grub_efiemu_mmap_init: bounds_hook): + Likewise. + (grub_efiemu_mmap_fill: fill_hook): Likewise. + * grub-core/kern/i386/coreboot/init.c (grub_machine_init: + heap_init): Likewise. + * grub-core/kern/i386/pc/init.c (grub_machine_init: hook): Likewise. + Rename to ... + (mmap_iterate_hook): ... this. + * grub-core/kern/ieee1275/init.c (grub_claim_heap: heap_init): + Likewise. + * grub-core/lib/ieee1275/relocator.c + (grub_relocator_firmware_get_max_events: count): Likewise. + (grub_relocator_firmware_fill_events: fill): Likewise. Rename + to ... + (grub_relocator_firmware_fill_events_iter): ... this. + * grub-core/lib/relocator.c (grub_relocator_alloc_chunk_align: + hook): Likewise. Rename to ... + (grub_relocator_alloc_chunk_align_iter): ... this. + * grub-core/loader/i386/bsd.c (generate_e820_mmap: hook): Likewise. + Rename to ... + (generate_e820_mmap_iter): ... this. + * grub-core/loader/i386/linux.c (find_mmap_size: hook): Likewise. + Rename to ... + (count_hook): ... this. + (grub_linux_boot: hook): Likewise. Rename to ... + (grub_linux_boot_mmap_find): ... this. + (grub_linux_boot: hook_fill): Likewise. Rename to ... + (grub_linux_boot_mmap_fill): ... this. + * grub-core/loader/i386/multiboot_mbi.c (grub_fill_multiboot_mmap: + hook): Likewise. Rename to ... + (grub_fill_multiboot_mmap_iter): ... this. + * grub-core/loader/multiboot.c (grub_get_multiboot_mmap_count: + hook): Likewise. Rename to ... + (count_hook): ... this. + * grub-core/loader/multiboot_mbi2.c (grub_fill_multiboot_mmap: + hook): Likewise. Rename to ... + (grub_fill_multiboot_mmap_iter): ... this. + * grub-core/loader/powerpc/ieee1275/linux.c + (grub_linux_claimmap_iterate: alloc_mem): Likewise. + * grub-core/loader/sparc64/ieee1275/linux.c (alloc_phys: choose): + Likewise. Rename to ... + (alloc_phys_choose): ... this. + (determine_phys_base: get_physbase): Likewise. + * grub-core/mmap/i386/mmap.c (grub_mmap_malign_and_register: + find_hook): Likewise. + * grub-core/mmap/i386/pc/mmap.c (preboot: fill_hook): Likewise. + (malloc_hook: count_hook): Likewise. + * grub-core/mmap/i386/uppermem.c (grub_mmap_get_lower: hook): + Likewise. Rename to ... + (lower_hook): ... this. + (grub_mmap_get_upper: hook): Likewise. Rename to ... + (upper_hook): ... this. + (grub_mmap_get_post64: hook): Likewise. Rename to ... + (post64_hook): ... this. + * grub-core/mmap/mips/uppermem.c (grub_mmap_get_lower: hook): + Likewise. Rename to ... + (lower_hook): ... this. + (grub_mmap_get_upper: hook): Likewise. Rename to ... + (upper_hook): ... this. + * grub-core/mmap/mmap.c (grub_mmap_iterate: count_hook): Likewise. + (grub_mmap_iterate: fill_hook): Likewise. + (fill_mask): Pass addr and mask within a single struct. + (grub_cmd_badram: hook): Make static instead of nested. Rename + to ... + (badram_iter): ... this. + (grub_cmd_cutmem: hook): Likewise. Rename to ... + (cutmem_iter): ... this. + +2013-01-13 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (read_device_map): Explicitly + delimit path in strings using quotes. + * util/getroot.c (grub_guess_root_devices): Likewise. + (grub_make_system_path_relative_to_its_root): Likewise. + * util/grub-probe.c (probe): Likewise. + * util/ieee1275/ofpath.c (find_obppath): Likewise. + (xrealpath): Likewise. + +2013-01-13 Vladimir Serbinenko + + Fix compilation with older compilers. + + * grub-core/Makefile.core.def (mpi): Add mpi-inline.c. + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h: Remove redundant + declarations. + * grub-core/lib/posix_wrap/string.h: Include sys/types.h. + * grub-core/lib/posix_wrap/sys/types.h: Add common types. + * grub-core/lib/xzembed/xz_dec_lzma2.c (dict_put): Replace byte + identifier with b. + * grub-core/lib/xzembed/xz_dec_stream.c (dec_vli): Likewise. + * include/grub/crypto.h: Add type defines. + * util/import_gcrypth.sed: Remove duplicate type defines. + +2013-01-13 Vladimir Serbinenko + + New command list_trusted. + + * grub-core/commands/verify.c (grub_cmd_list): New function. + +2013-01-13 Colin Watson + + * util/grub-mkimage.c (generate_image): Fix "size of public key" + info message. + +2013-01-13 Colin Watson + + Remove nested functions from PCI iterators. + + * grub-core/bus/pci.c (grub_pci_iterate): Add hook_data argument, + passed to hook. Update all callers to pass appropriate hook data. + * grub-core/bus/emu/pci.c (grub_pci_iterate): Likewise. + * include/grub/pci.h (grub_pci_iteratefunc_t): Add data argument. + Remove NESTED_FUNC_ATTR from here and from all users. + (grub_pci_iterate): Update prototype. + * grub-core/bus/cs5536.c (grub_cs5536_find: hook): Make static + instead of nested. Rename to ... + (grub_cs5536_find_iter): ... this. + * grub-core/kern/efi/mm.c (stop_broadcom: find_card): Likewise. + * grub-core/kern/mips/loongson/init.c (init_pci: set_card): + Likewise. + * grub-core/kern/vga_init.c (grub_qemu_init_cirrus: find_card): + Likewise. + * grub-core/video/bochs.c (grub_video_bochs_setup: find_card): + Likewise. + * grub-core/video/cirrus.c (grub_video_cirrus_setup: find_card): + Likewise. + * grub-core/video/efi_uga.c (find_framebuf: find_card): Likewise. + * grub-core/video/radeon_fuloong2e.c + (grub_video_radeon_fuloong2e_setup: find_card): Likewise. + * grub-core/video/sis315pro.c (grub_video_sis315pro_setup: + find_card): Likewise. + * grub-core/video/sm712.c (grub_video_sm712_setup: find_card): + Likewise. + +2013-01-12 Vladimir Serbinenko + + * grub-core/commands/verify.c: Mark messages for translating. + +2013-01-12 Vladimir Serbinenko + + * grub-core/lib/libgcrypt_wrap/mem.c (gcry_x*alloc): Make out of memory + fatal. + +2013-01-12 Vladimir Serbinenko + + * grub-core/lib/libgcrypt_wrap/mem.c (_gcry_log_bug): Make gcrypt bugs + fatal. + +2013-01-12 Vladimir Serbinenko + + * autogen.sh: Do not try to delete nonexistant files. + * util/import_gcrypth.sed: Add some missing header removals. + +2013-01-12 Colin Watson + + Clean up dangling references to grub-setup. + Fixes Ubuntu bug #1082045. + + * docs/grub.texi (Images): Refer generally to grub-install rather + than directly to grub-setup. + (Installing GRUB using grub-install): Remove direct reference to + grub-setup. + (Device map) Likewise. + (Invoking grub-install): Likewise. + * docs/man/grub-install.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkimage.h2m (SEE ALSO): Likewise. + * util/grub-install.in (usage): Likewise. + + * util/bash-completion.d/grub-completion.bash.in (_grub_setup): + Apply to grub-bios-setup and grub-sparc64-setup rather than to + grub-setup. + * configure.ac: Remove grub_setup output variable. + + * docs/man/grub-bios-setup.h2m (NAME): Change name from grub-setup + to grub-bios-setup. + * docs/man/grub-sparc64-setup.h2m (NAME): Change name from + grub-setup to grub-sparc64-setup. + +2013-01-11 Vladimir Serbinenko + + Import gcrypt public-key cryptography and implement signature checking. + +2013-01-10 Vladimir Serbinenko + + * grub-core/fs/ntfs.c: Ue more appropriate types. + * grub-core/fs/ntfscomp.c: Likewise. + * include/grub/ntfs.h: Likewise. + +2013-01-10 Vladimir Serbinenko + + Support Apple FAT binaries on non-Apple platforms. + + * include/grub/macho.h (GRUB_MACHO_FAT_EFI_MAGIC): New define. + * include/grub/i386/macho.h (GRUB_MACHO_CPUTYPE_IS_HOST_CURRENT): + Likewise. + * grub-core/loader/efi/chainloader.c (grub_cmd_chainloader): Parse + Apple FAT binaries. + +2013-01-10 Vladimir Serbinenko + + * grub-core/kern/disk.c (grub_disk_write): Fix sector number on 4K + sector devices. + +2013-01-07 Colin Watson + + * grub-core/io/bufio.c (grub_bufio_open): Use grub_zalloc instead of + explicitly zeroing elements. + * grub-core/io/gzio.c (grub_gzio_open): Likewise. + * grub-core/io/lzopio.c (grub_lzopio_open): Remove explicit zeroing + of elements in a structure already allocated using grub_zalloc. + * grub-core/io/xzio.c (grub_xzio_open): Likewise. + +2013-01-07 Colin Watson + + * docs/grub.texi (grub_cpu): New subsection. + (grub_platform): Likewise. + +2013-01-07 Vladimir Serbinenko + + * grub-core/fs/minix.c (grub_minix_read_file): Simplify arithmetics. + +2013-01-05 Vladimir Serbinenko + + * grub-core/fs/ext2.c (grub_ext2_read_block): Use shifts rather than + divisions. + +2013-01-05 Vladimir Serbinenko + + * grub-core/fs/ntfs.c: Eliminate useless divisions in favor of shifts. + * grub-core/fs/ntfscomp.c: Likewise. + * include/grub/ntfs.h (grub_ntfs_data): Replace spc with log_spc. + (grub_ntfs_comp): Likewise. + +2013-01-05 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (-grub_nilfs2_palloc_groups_per_desc_block): + Rename to ... + (grub_nilfs2_palloc_log_groups_per_desc_block): ... this. Return log + of groups_per_block. All users updated. + +2013-01-05 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_write): Call + grub_error properly. + * grub-core/disk/ieee1275/nand.c (grub_nand_write): Likewise. + * grub-core/disk/loopback.c (grub_loopback_write): Likewise. + +2013-01-03 Vladimir Serbinenko + + * util/grub.d/10_kfreebsd.in: Correct the patch to zpool.cache as it's + always in /boot/zfs. + Reported by: Yuta Satoh. + +2013-01-03 Yuta Satoh + + * util/grub.d/10_kfreebsd.in: Fix improper references to grub-probe by + ${grub_probe} + +2013-01-03 Vladimir Serbinenko + + * configure.ac: Extend -Wno-trampolines to host. + +2013-01-03 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_susp_iterate): Avoid hang if + entry->len = 0. + +2013-01-03 Colin Watson + + * docs/grub.texi (Invoking grub-mkrelpath): New section. + (Invoking grub-script-check): Likewise. + +2013-01-03 Colin Watson + + * docs/grub.texi (Invoking grub-mount): New section. + Reported by: Filipus Klutiero. Fixes Debian bug #666427. + +2013-01-02 Colin Watson + + * grub-core/tests/lib/test.c (grub_test_run): Return non-zero on + test failures, so that a failing unit test correctly causes 'make + check' to fail. + +2013-01-02 Colin Watson + + Fix failing printf test. + + * grub-core/kern/misc.c (grub_vsnprintf_real): Parse '-', '.', and + '$' in the correct order when collecting type information. + +2013-01-02 Colin Watson + + * docs/grub.texi (configfile): Explain environment variable + handling. + (source): New section. + Reported by: Arbiel Perlacremaz. Fixes Savannah bug #35564. + +2012-12-31 Colin Watson + + Remove several trivially-unnecessary uses of nested functions. + + * grub-core/commands/i386/pc/sendkey.c + (grub_cmd_sendkey: find_key_code, find_ascii_code): Make static + instead of nested. + * grub-core/commands/legacycfg.c (legacy_file: getline): Likewise. + Rename to ... + (legacy_file_getline): ... this. + * grub-core/commands/loadenv.c (grub_cmd_load_env: set_var): + Likewise. + * grub-core/kern/corecmd.c (grub_core_cmd_set: print_env): Likewise. + * grub-core/kern/fs.c (grub_fs_probe: dummy_func): Likewise. Rename + to ... + (probe_dummy_iter): ... this. + * grub-core/kern/i386/coreboot/mmap.c + (grub_linuxbios_table_iterate: check_signature): Likewise. + * grub-core/kern/parser.c (grub_parser_split_cmdline: + check_varstate): Likewise. Mark inline. + * grub-core/lib/arg.c (find_short: fnd_short): Likewise. Pass + an additional parameter. + (find_long: fnd_long): Likewise. Pass two additional parameters. + * grub-core/lib/crc.c (init_crc32c_table: reflect): Likewise. + * grub-core/lib/crc64.c (init_crc64_table: reflect): Likewise. + * grub-core/lib/ieee1275/cmos.c (grub_cmos_find_port: hook): + Likewise. Rename to ... + (grub_cmos_find_port_iter): ... this. + * grub-core/lib/ieee1275/datetime.c (find_rtc: hook): Likewise. + Rename to ... + (find_rtc_iter): ... this. + + * grub-core/normal/menu_entry.c (run): Fold nested editor_getsource + function directly into the function body, since it is only called + once. + +2012-12-30 Colin Watson + + * grub-core/bus/usb/ehci.c (grub_ehci_pci_iter): Remove incorrect + __attribute__ ((unused)). + * grub-core/video/bochs.c (find_card): Likewise. + * grub-core/video/cirrus.c (find_card): Likewise. + * grub-core/video/radeon_fuloong2e.c (find_card): Likewise. + * grub-core/video/sis315pro.c (find_card): Likewise. + * grub-core/video/sm712.c (find_card): Likewise. + +2012-12-28 Colin Watson + + * util/grub-mkconfig.in: Accept GRUB_TERMINAL_OUTPUT=vga_text. + Fixes Savannah bug #37821. + +2012-12-28 Colin Watson + + Apply program name transformations at build-time rather than at + run-time. Fixes Debian bug #696465. + + * acinclude.m4 (grub_TRANSFORM): New macro. + * configure.ac: Create output variables with transformed names for + most programs. + * util/bash-completion.d/grub-completion.bash.in: Use + pre-transformed variables for program names. + * util/grub-install.in: Likewise. + * util/grub-kbdcomp.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkconfig_lib.in: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + * tests/util/grub-shell-tester.in: Remove unused assignment. + * tests/util/grub-shell.in: Likewise. + * util/grub.d/00_header.in: Likewise. + +2012-12-28 Colin Watson + + Backport gnulib fixes for C11. Fixes Savannah bug #37738. + + * grub-core/gnulib/stdio.in.h (gets): Warn on use only if + HAVE_RAW_DECL_GETS. + * m4/stdio_h.m4 (gl_STDIO_H): Check for gets. + +2012-12-11 Vladimir Serbinenko + + * util/grub.d/20_linux_xen.in: Addmissing assignment to machine. + Reported by: Eriks Latosheks . + +2012-12-10 Vladimir Serbinenko + + * docs/grub.texi (Network): Update instructions on generating netboot + image. + +2012-12-10 Vladimir Serbinenko + + * grub-core/disk/cryptodisk.c (grub_cmd_cryptomount): Strip brackets + around device name if necessarry. + +2012-12-10 Paulo Flabiano Smorigo + + * util/grub-install.in: Follow the symbolic link parameter added + to the file command. + +2012-12-10 Andrey Borzenkov + + * util/grub-install.in: Remove stale TODO. + +2012-12-10 Paulo Flabiano Smorigo + + * grub-core/kern/ieee1275/init.c (grub_machine_get_bootlocation): Use + dynamic allocation for the bootpath buffer. + +2012-12-10 Dr. Tilmann Bubeck + + * grub-core/gfxmenu/view.c (init_terminal): Avoid making terminal + window too small. + +2012-12-10 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (grub_virtual_screen_setup): Get font as + argument rather than font name. All users updated. + (grub_gfxterm_set_window): Likewise. + +2012-12-10 Vladimir Testov + + * util/grub-mkfont.c (argp_parser): Fix a typo which prevented --asce + from working. + +2012-12-10 Vladimir Serbinenko + + * util/getroot.c (convert_system_partition_to_system_disk): Support + nbd disks. + +2012-12-10 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_dir): Stop if direntlen is 0 to avoid + infinite loop on corrupted FS. + +2012-12-08 Vladimir Serbinenko + + Fix big-endian mtime. + + * grub-core/fs/ufs.c (grub_ufs_inode): Split improperly attached + together sec and usec. + (grub_ufs_dir): Use correct byteswapping for UFS time. + +2012-12-08 Vladimir Serbinenko + + Support big-endian UFS1. + + * Makefile.util.def (libgrubmods): Add ufs_be.c + * grub-core/Makefile.core.def (ufs1_be): New module. + * grub-core/fs/ufs_be.c: New file. + * grub-core/fs/ufs.c: Declare grub_ufs_to_le* and use them throughout + the file. + +2012-11-28 Leif Lindholm + + * include/grub/types.h: Fix functionality unaffecting typo in + GRUB_TARGET_WORDSIZE conditional macro. + +2012-11-28 Paulo Flabiano Smorigo + + * grub-core/net/bootp.c (parse_dhcp_vendor): Fix double increment. + +2012-10-28 Grégoire Sutre + + * util/grub.d/10_netbsd.in: Fix tab indentation and make sure + that /netbsd appears first (when it exists). + +2012-10-12 Christoph Junghans + + * grub-core/Makefile.am (moddep.lst): Use $(AWK) rather than awk. + Fixes Savannah bug #37558. + +2012-10-12 Colin Watson + + * grub-core/commands/configfile.c (GRUB_MOD_INIT): Correct + description of extract_entries_configfile. + +2012-10-05 Colin Watson + + * grub-core/loader/i386/linux.c (allocate_pages): Fix spelling of + preferred_address. + (grub_cmd_linux): Likewise. + * grub-core/net/icmp6.c (struct prefix_option): Fix spelling of + preferred_lifetime. Update all users. + +2012-09-26 Colin Watson + + * Makefile.util.def (grub-mknetdir): Move to $prefix/bin. + Reported by: Daniel Kahn Gillmor. Fixes Debian bug #688799. + +2012-09-26 Colin Watson + + * util/grub-mkconfig_lib.in (is_path_readable_by_grub): Redirect + errors from grub-probe to /dev/null, not stdout. + +2012-09-26 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_mount): Support AFFS bootblock in + sector 1. + +2012-09-24 Colin Watson + + * util/grub-install.in: Make the error message if $source_dir + doesn't exist more useful. + +2012-09-22 Colin Watson + + Fix grub-emu build on FreeBSD. + + * Makefile.util.def (grub-mount): Add LIBGEOM to ldadd. + * grub-core/net/drivers/emu/emunet.c: Only include Linux-specific + headers on Linux. + (GRUB_MOD_INIT): Return immediately on non-Linux platforms; this + implementation is currently Linux-specific. + * util/getroot.c (exec_pipe): Define only on Linux or when either + libzfs or libnvpair is unavailable. + (find_root_devices_from_poolname): Remove unused path variable. + +2012-09-19 Colin Watson + + * grub-core/partmap/msdos.c (pc_partition_map_embed): Revert + incorrect off-by-one fix from 2011-02-12. A 62-sector core image + should fit before end == 63. + +2012-09-19 Colin Watson + + * util/grub-setup.c (write_rootdev): Remove unused core_img + parameter. Update all callers. + (setup): Define core_sectors only if GRUB_SETUP_BIOS, to appease + 'gcc -Wunused-but-set-variable'. Remove unnecessary nested #ifdef + GRUB_SETUP_BIOS. + +2012-09-18 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (grub_tab): New variable. + (grub_add_tab): New function. + * util/grub.d/10_hurd.in: Replace \t with $grub_tab orgrub_add_tab. + * util/grub.d/10_illumos.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/10_xnu.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + +2012-09-18 Vladimir Serbinenko + + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set + GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN on mac. + * grub-core/term/ieee1275/console.c (grub_console_init_lately): Use + ieee1275-nocursor if GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN is set. + * grub-core/term/terminfo.c (grub_terminfo_set_current): Add new type + ieee1275-nocursor. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New value + GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN. + +2012-09-18 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_cmd_linux): Fix incorrect + le-conversion. + Reported by: BURETTE, Bernard. + +2012-09-17 Colin Watson + + * util/grub-mkconfig_lib.in (grub_quote): Remove outdated sentence + from comment. + +2012-09-14 Colin Watson + + * grub-core/term/terminfo.c: Only fix up powerpc key repeat on + IEEE1275 machines. Fixes powerpc-emu compilation. + * include/grub/terminfo.h: Likewise. + +2012-09-12 Vladimir Serbinenko + + * include/grub/efi/api.h (grub_efi_runtime_services): Make vendor_guid + a const pointer. + * grub-core/efiemu/runtime/efiemu.c (efiemu_memcpy): Make from a + const pointer. + (efiemu_set_variable): Make vendor_guid a const pointer. + +2012-09-12 Vladimir Serbinenko + + Don't require grub-mkconfig_lib to generate manpages for programs. + + * gentpl.py (manpage): Additional argument adddeps. Add adddeps to + dependencies, don't add grub-mkconfig_lib. + (program): Pass empty adddeps. + (script): Pass grub-mkconfig_lib as adddeps. + +2012-09-11 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (free_array) [GRUB_UTIL]: Fix memory leak. + * util/getroot.c (grub_find_device): Likewise. + (get_mdadm_uuid): Likewise. + (grub_util_is_imsm): Likewise. + (grub_util_pull_device): Likewise. + * util/grub-probe.c (probe): Likewise. + +2012-09-10 Benoit Gschwind + + * grub-core/loader/efi/appleloader.c (devpath_8): New var. + (devs): Add devpath_8. + +2012-09-08 Peter Jones + + * grub-core/Makefile.core.def (efifwsetup): New module. + * grub-core/commands/efi/efifwsetup.c: New file. + * grub-core/kern/efi/efi.c (grub_efi_set_variable): New function + * include/grub/efi/api.h (GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI): + New define. + * include/grub/efi/efi.h (grub_efi_set_variable): New proto. + +2012-09-05 Jiri Slaby + + * configure.ac: Add SuSe path. + +2012-09-05 Colin Watson + + * NEWS: Fix typo. + +2012-09-05 Colin Watson + + * util/import_gcry.py: Sort cipher_files, to make build system + generation more deterministic. + +2012-09-05 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (scan): Check function return value. + * grub-core/lib/ieee1275/datetime.c (grub_get_datetime): Likewise. + (grub_set_datetime): Likewise. + +2012-09-05 Vladimir Serbinenko + + * grub-core/script/yylex.l: Ignore unused-function and sign-compare + warnings. + +2012-09-05 Vladimir Serbinenko + + * grub-core/partmap/dvh.c (grub_dvh_is_valid): Add missing byteswap. + +2012-09-05 Vladimir Serbinenko + + * grub-core/fs/xfs.c (grub_xfs_read_block): Make keys a const pointer. + +2012-09-04 Colin Watson + + * Makefile.am (EXTRA_DIST): Add linguas.sh. It's only strictly + required for checkouts from bzr, but it may be useful for users or + distributors wishing to update translations against a tarball + distribution, and it can be helpful for the tarball to be a superset + of what's in bzr. + +2012-09-04 Colin Watson + + * Makefile.am (EXTRA_DIST): Add + grub-core/tests/boot/linux.init-mips.S, + grub-core/tests/boot/linux.init-ppc.S, and + grub-core/tests/boot/linux-ppc.cfg. + +2012-09-04 Colin Watson + + * grub-core/mmap/mips/loongson: Remove empty directory. + +2012-09-04 Colin Watson + + * docs/man/grub-mkdevicemap.h2m: Remove, since grub-mkdevicemap is + gone. + +2012-09-04 Colin Watson + + * .bzrignore: Add grub-bios-setup, grub-ofpathname, and + grub-sparc64-setup. + +2012-08-05 Grégoire Sutre + + * configure.ac: Strengthen the test for working -nostdinc -isystem. + +2012-07-31 Grégoire Sutre + + * po/POTFILES.in: Regenerated. + +2012-07-31 Grégoire Sutre + + * docs/grub.texi: Note that NetBSD/i386 is Multiboot-compliant. + (NetBSD): New subsection. + +2012-07-22 Ales Nesrsta + + * grub-core/bus/usb/ehci.c: PCI iter. - added PCI bus master setting. + * grub-core/bus/usb/ohci.c: PCI iter. - added PCI bus master setting. + +2012-07-22 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (grub_quote): Remove extra layer of escape. + * util/grub.d/10_hurd.in: Add missing quoting. + * util/grub.d/10_illumos.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + +2012-07-22 Vladimir Serbinenko + + New command `lsefi'. + + * grub-core/Makefile.core.def (lsefi): New module. + * grub-core/commands/efi/lsefi.c: New file. + * include/grub/efi/api.h: Add more GUIDs. + +2012-07-22 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c (grub_bsd_elf32_size_hook): Fix mask. + (grub_bsd_elf32_hook): Likewise. + (grub_bsd_elf64_size_hook): Likewise. + (grub_bsd_elf64_hook): Likewise. + (grub_bsd_load_elf): Likewise. + +2012-07-22 Vladimir Serbinenko + + * grub-core/lib/xzembed/xz_dec_stream.c (hash_validate): Fix behaviour + if hash function is unavailable. + (dec_stream_header): Likewise. + +2012-07-22 Vladimir Serbinenko + + * grub-core/normal/autofs.c (autoload_fs_module): Save and restore + filter state. + +2012-07-22 Vladimir Serbinenko + + Fix coreboot compilation. + + * grub-core/term/i386/pc/vga_text.c (grub_vga_text_init): Rename to ... + (grub_vga_text_init_real): ... this. + (grub_vga_text_fini): Rename to ... + (grub_vga_text_fini_real): ... this. + +2012-07-07 Vladimir Serbinenko + + * grub-core/Makefile.am: Fix path to boot/i386/pc/startup_raw.S. + +2012-07-02 Vladimir Serbinenko + + * grub-core/lib/legacy_parse.c: Support clear and testload. + +2012-07-02 Vladimir Serbinenko + + * grub-core/term/efi/serial.c: Support 1.5 stop bits. + +2012-07-02 Vladimir Serbinenko + + * grub-core/fs/ext2.c: Experimental support for 64-bit. + +2012-07-02 Vladimir Serbinenko + + * grub-core/net/tftp.c (ack): Fix endianness problem. + (tftp_receive): Likewise. + Reported by: Michael Davidsaver. + +2012-07-02 Vladimir Serbinenko + + * gentpl.py: Make mans depend on grub-mkconfig_lib. + +2012-07-02 Vladimir Serbinenko + + * include/grub/list.h (FOR_LIST_ELEMENTS_SAFE): New macro. + * include/grub/command.h (FOR_COMMANDS_SAFE): Likewise. + * grub-core/commands/help.c (grub_cmd_help): Use FOR_COMMANDS_SAFE. + +2012-07-02 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (find_efi_mmap_size): Don't decrease + efi_mmap_size. + Reported by: Stuart Hayes. + +2012-06-28 Vladimir Serbinenko + + Add monochrome text support (mda_text, aka `hercules' in grub-legacy). + + * grub-core/Makefile.core.def (mda_text): New module. + * grub-core/lib/legacy_parse.c (grub_legacy_parse): Support `hercules'. + * grub-core/term/i386/vga_common.c (grub_console_cur_color): Moved to .. + * grub-core/term/i386/pc/vga_text.c (cur_color): ... here + * grub-core/term/i386/pc/console.c (grub_console_cur_color): ... and + here. + * grub-core/term/i386/vga_common.c (grub_console_getwh): Moved to .. + * grub-core/term/i386/pc/vga_text.c (grub_console_getwh): ... here + * grub-core/term/i386/pc/console.c (grub_console_getwh): ... and + here. + * grub-core/term/i386/vga_common.c (grub_console_setcolorstate): Moved + to .. + * grub-core/term/i386/pc/vga_text.c (grub_console_setcolorstate): + ... here + * grub-core/term/i386/pc/console.c (grub_console_setcolorstate): ... and + here. + * grub-core/term/i386/vga_common.c: Removed. + * include/grub/i386/vga_common.h: Likewise. + * include/grub/vga.h (grub_vga_cr_bw_write): New function. + (grub_vga_cr_bw_read): Likewise. + * include/grub/vgaregs.h (GRUB_VGA_IO_CR_BW_INDEX): New enum value. + (GRUB_VGA_IO_CR_BW_DATA): Likewise. + * grub-core/term/i386/pc/vga_text.c [MODE_MDA]: Call + grub_vga_cr_bw_read/grub_vga_cr_bw_write instead of + grub_vga_cr_read/grub_vga_cr_write. + (grub_vga_text_setcolorstate) [MODE_MDA]: Ignore color. + +2012-06-27 Vladimir Serbinenko + + * configure.ac: Bump version to 2.00. + * grub-core/normal/main.c (features): Add feature_200_final. + +2012-06-27 Vladimir Serbinenko +2012-06-27 Jordan Uggla + + * NEWS: Fix unclarity and language mistakes. + +2012-06-27 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (find_efi_mmap_size): Increase + additional size to 3 pages. + Reported by: Stuart Hayes. + +2012-06-27 Vladimir Serbinenko + + * NEWS: Add 2.00 entry. + +2012-06-27 Vladimir Serbinenko + + * grub-core/commands/wildcard.c (check_file): Fix bad logic. + put explicit "/" for empty path. + (wildcard_expand): Improve dprintf. + +2012-06-27 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (grub_fshelp_find_file): Don't free oldnode if + it's equal to currnode. This can happen with "" symlink. + +2012-06-27 Yves Blusseau + + * util/grub-mkconfig_lib.in: Fix print messages replacing builtin + echo shell command by printf command. + +2012-06-26 Vladimir Serbinenko + + * grub-core/term/arc/console.c (grub_console_init_output): Add one since + the value returned by firmware is the maximal position, not diumension. + (grub_terminfo_output_state): Use a more sane fallback. + +2012-06-26 Vladimir Serbinenko + + * grub-core/term/terminfo.c (print_terminfo): Print terminal dimensions. + +2012-06-26 Vladimir Serbinenko + + * grub-core/kern/mips/arc/init.c (grub_machine_init): Set clock + frequency to 150 MHz. + +2012-06-26 Vladimir Serbinenko + + Apple fixes. + + * grub-core/lib/i386/relocator16.S: Use correct __APPLE__ and not + __APPLE_ + * grub-core/lib/i386/relocator_common.S [__APPLE__]: Fix gdtdesc + definition. + * grub-core/lib/i386/relocator64.S [__APPLE__]: Assemble jmp manually. + +2012-06-26 Vladimir Serbinenko + + Handle slash in HFS label. + + * grub-core/fs/hfs.c (macroman_to_utf8): New argument slash_translate. + (grub_hfs_dir): Tanslate slash. + (grub_hfs_label): Don't translate slash. + +2012-06-26 Vladimir Serbinenko + + * grub-core/commands/ls.c (grub_ls_list_devices): Disable + network protocol listing since it introduces problematic dependency on + net module. + +2012-06-26 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Add Yeeloong verified hash. + +2012-06-26 Vladimir Serbinenko + + Init video early on yeeloong to avoid being rebooted by watchdog. + + * grub-core/Makefile.am (gensm712): New target. + (sm712_start.S): Likewise. + (boot/mips/loongson/fwstart.S): Depend on sm712_start.S + * grub-core/boot/mips/loongson/fwstart.S [!FULOONG2F]: Init SM712. + * grub-core/video/sm712.c [GENINIT]: Generate compact init procedure + description. + * include/grub/vga.h: Move registry definitions to... + * include/grub/vgaregs.h: ... here. + +2012-06-26 Vladimir Serbinenko + + * grub-core/boot/decompressor/minilib.c (grub_memcmp): Fix the compare + signedness. + +2012-06-25 Vladimir Serbinenko + + * util/grub-install.in: Fix dvhtool invocation. Add arc to the list of + platforms with firmware disk drivers in the core. + +2012-06-25 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (scan_disk) [GRUB_UTIL]: Put more + informative verbose message. + (read_lv): Handle 64-bit segment size. + +2012-06-25 Vladimir Serbinenko + + * grub-core/disk/lvm.c (grub_lvm_getvalue): Handle 64-bit values. + +2012-06-25 Vladimir Serbinenko + + * grub-core/fs/fat.c (grub_fat_iterate_dir_next): Don't stop on a space + character but still remove trainling spaces. + (grub_fat_label): Ignore archive flag. + +2012-06-25 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_cmd_initrd): Avoid unnecessarry + cast between linux_kernel_header and linux_kernel_params. + +2012-06-25 Vladimir Serbinenko + + * include/grub/diskfilter.h (grub_raid5_recover_func_t): Use proper + type for size. + (grub_raid6_recover_func_t): Likewise. + * grub-core/disk/raid5_recover.c (grub_raid5_recover): Likewise. + * grub-core/disk/raid6_recover.c (grub_raid6_recover): Likewise. + +2012-06-25 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Add Fuloong2F verified hash. + +2012-06-25 Grégoire Sutre + + Fix overflow. + + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_size) + [__NetBSD__]: Add explicit cast before bitshift. + +2012-06-23 Vladimir Serbinenko + + * configure.ac: Bump to 2.00~rc1. + +2012-06-23 Vladimir Serbinenko + + * grub-core/boot/mips/loongson/fwstart.S: Add missing setting of high + half of $a0. + +2012-06-23 Vladimir Serbinenko +2012-06-23 Jordan Uggla + + * docs/grub.texi: Fix search syntax. + (Multi-boot manual config): Put msdos rather than GPT example. + Grammar corrections. + +2012-06-23 Vladimir Serbinenko + + * docs/grub.texi (Multi-boot manual config): Use --set. Improve remark. + +2012-06-22 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_free): Fix agglomerating of free regions. + +2012-06-22 Vladimir Serbinenko + + * grub-core/kern/mm.c (get_header_from_pointer): Put a more informative + message on double free. Put the value of magic in case of mismatch. + +2012-06-22 Vladimir Serbinenko + + Speed-up video on yeeloong. + + * grub-core/video/sm712.c (framebuffer): Remove render_target and + add cached_ptr. + (grub_video_sm712_video_fini): Unmap cached_ptr. + (grub_video_sm712_setup): Use cache address and grub_video_fb_setup. + (grub_video_sm712_set_active_render_target): Removed. + (grub_video_adapter): Use grub_video_fb_set_active_render_target. + (grub_video_sm712_swap_buffers): Call grub_video_fb_swap_buffers and + sync caches. + +2012-06-22 Vladimir Serbinenko + + Avoid flushing the same line multiple times on loongson. + + * grub-core/kern/mips/cache.S [GRUB_MACHINE_MIPS_LOONGSON]: + Step in 32 bytes and not 1 byte. + * grub-core/kern/mips/cache_flush.S [GRUB_MACHINE_MIPS_LOONGSON]: + Likewise. + +2012-06-22 Vladimir Serbinenko + + * util/getroot.c (grub_find_root_devices_from_mountinfo): Handle btrfs + subvolumes. + +2012-06-22 Vladimir Serbinenko + + Implement flow control for http. + + * grub-core/net/http.c (parse_line): Handle response 206. + (http_receive): Stall if too many packets are in the queue. + (http_establish): Fix range header. + (http_seek): Fix double free. + (http_close): Likewise. + (http_packets_pulled): New function. + (grub_http_protocol): Set http_seek + * grub-core/net/tcp.c (grub_net_tcp_socket): New field `i_stall'. + (ack_real): Set window depending on i_stall. + (grub_net_send_tcp_packet): Likewise. + (grub_net_tcp_stall): New function. + (grub_net_tcp_unstall): Likewise. + * include/grub/net/tcp.h (grub_net_tcp_stall): New proto. + (grub_net_tcp_unstall): Likewise. + +2012-06-22 Vladimir Serbinenko + + * grub-core/net/tftp.c: Decrease stall to 50 packets. + +2012-06-22 Vladimir Serbinenko + + * grub-core/net/net.c (grub_net_fs_open): Free resources on failed open. + +2012-06-22 Vladimir Serbinenko + + * tests/util/grub-shell.in: Fix a typo. + +2012-06-22 Vladimir Serbinenko + + Implement flow control for tftp. + + * grub-core/net/net.c (receive_packets): Decrease the stop to 10 + packets but stop only if stop condition is satisfied. + (grub_net_fs_read_real): Call packets_pulled after real read. Use + `stall' instead of `eof' as stop condition. + * grub-core/net/http.c (parse_line): Set `stall' on EOF. + (http_err): Likewise. + * grub-core/net/tftp.c (ack): Replace the first argument with data + instead of socket. + (tftp_receive): Stall if too many packets are in wait queue. + (tftp_packets_pulled): New function. + (grub_tftp_protocol): Set packets_pulled. + * include/grub/net.h (grub_net_packets): New field count. + (grub_net_put_packet): Increment count. + (grub_net_remove_packet): Likewise. + (grub_net_app_protocol): New field `packets_pulled'. + (grub_net): New field `stall'. + +2012-06-22 Vladimir Serbinenko + + * grub-core/net/net.c (receive_packets): Stop after 100 packets to let + sync part to handle them. + +2012-06-21 Vladimir Serbinenko + + * grub-core/kern/main.c (grub_set_prefix_and_root): Fix memory leak. + * grub-core/net/drivers/ieee1275/ofnet.c + (grub_ieee1275_net_config_real): Likewise. + +2012-06-21 Vladimir Serbinenko + + * grub-core/net/bootp.c (grub_net_configure_by_dhcp_ack): Don't create + the direct route for server/gateway. + +2012-06-21 Vladimir Serbinenko + + * grub-core/net/bootp.c (grub_net_configure_by_dhcp_ack): Prefer + IP address to server name since we may not hame the DNS. + +2012-06-21 Vladimir Serbinenko + + * grub-core/net/dns.c (grub_cmd_nslookup): Init addresses to 0 to avoid + freeing random buffer on failure. + * grub-core/net/net.c (grub_net_resolve_address): Likewise. + +2012-06-21 Vladimir Serbinenko + + * grub-core/net/bootp.c (grub_cmd_bootp): Fix packet allocation size. + +2012-06-21 Vladimir Serbinenko + + * grub-core/net/drivers/emu/emunet.c (get_card_packet): Allocate the + reserved bytes. + * grub-core/net/drivers/i386/pc/pxe.c (grub_pxe_recv): Likewise. + * grub-core/net/drivers/ieee1275/ofnet.c (get_card_packet): Likewise. + Handle malloc error correctly. + +2012-06-21 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_arglist_to_argv): Escape + blocks. + +2012-06-21 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Fix double + increment. + +2012-06-20 Vladimir Serbinenko + + * grub-core/net/dns.c (grub_cmd_nslookup): Use configured DNS servers if + none is explicitly specified. + +2012-06-20 Vladimir Serbinenko + + * grub-core/net/dns.c (grub_net_add_dns_server): Don't erase old servers + while reallocating. + +2012-06-20 Vladimir Serbinenko + + Respect netmask from bootp/dhcp. + + * grub-core/net/bootp.c (parse_dhcp_vendor): Parse mask. + (grub_net_configure_by_dhcp_ack): Use mask and grub_net_add_ipv4_local. + * grub-core/net/net.c (grub_net_add_addr): Split creating local route + into ... + (grub_net_add_ipv4_local): ... this. + (grub_cmd_addaddr): Use grub_net_add_ipv4_local. + * include/grub/net.h (GRUB_NET_BOOTP_NETMASK): New enum value. + (grub_net_add_ipv4_local): New proto. + +2012-06-20 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_linux_boot): Setup video before + determining EFI memory map size. + +2012-06-20 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Escape commas. + +2012-06-20 Vladimir Serbinenko + + * grub-core/kern/main.c (grub_set_prefix_and_root): Skip escaped commas + when looking for partition separator. + +2012-06-20 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_encode_devname): + Escape commas. + +2012-06-20 Vladimir Serbinenko + + Restructure FAT driver to avoid hook in label reading as it hits a + GCC bug. + + * include/grub/err.h (grub_err_t): New enum value GRUB_ERR_EOF. + * grub-core/fs/fat.c (grub_fat_iterate_context): New struct. + (grub_fat_iterate_dir): Split into ... + (grub_fat_iterate_init): ... this, ... + (grub_fat_iterate_fini): ... this, ... + (grub_fat_iterate_dir_next): ... and this. All users updated. + +2012-06-20 Vladimir Serbinenko + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New enum value + GRUB_IEEE1275_FLAG_BROKEN_REPEAT. + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set + GRUB_IEEE1275_FLAG_BROKEN_REPEAT on PowerBook3,3. + * include/grub/terminfo.h (grub_terminfo_input_state) [__powerpc__]: + New fields last_key and last_key_time. + * grub-core/term/terminfo.c (grub_terminfo_getkey): Transform + extended key-esc into extended key-extended key. + +2012-06-19 Vladimir Serbinenko + + Avoid unnecessary memcpy of whole video buffer. + + * grub-core/video/fb/video_fb.c (dirty): New struct. + (framebuffer): Add members current_dirty and previous_dirty. + (dirty): New function. + (grub_video_fb_fill_rect): Update dirty. + (common_blitter): Likewise. + (grub_video_fb_scroll): Likewise. + (doublebuf_blit_update_screen): Copy only dirty part. + (doublebuf_pageflipping_update_screen): Likewise. + (grub_video_fb_doublebuf_blit_init): Init dirty. + (doublebuf_pageflipping_init): Likewise. + (grub_video_fb_setup): Likewise. + +2012-06-19 Vladimir Serbinenko + + * grub-core/net/drivers/ieee1275/ofnet.c (search_net_devices): Decrease + poll rate. + +2012-06-19 Vladimir Serbinenko + + Fix wildcard regexp dot and other special characters handling. + Reported by: Robert Mabee. + + * grub-core/commands/wildcard.c (isregexop): Add "|+{}[]?". + (make_regex): Escape "|+{}[]". Transform '?' to '.?'. + (split_path): Trigger expansion on '?'. + (unescape): New function. + (wildcard_expand): Unescape parts copied without globbing. + * grub-core/script/execute.c (wildcard_escape): Escape '?'. + (grub_script_arglist_to_argv): Don't unescape expansions. + +2012-06-19 Vladimir Serbinenko + + * include/grub/net.h (grub_net_card): New member txbufsize. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New enum values + GRUB_IEEE1275_FLAG_NO_OFNET_SUFFIX and + GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN. + * grub-core/net/drivers/efi/efinet.c (grub_efinet_findcards): Use + txbufsize. + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Use + compatible property to check for macs. Set + GRUB_IEEE1275_FLAG_NO_OFNET_SUFFIX and + GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN on macs. + * grub-core/net/drivers/ieee1275/ofnet.c (card_open): Don't add suffix + if GRUB_IEEE1275_FLAG_NO_OFNET_SUFFIX is set. + (send_card_buffer): Use txbuf. + (grub_ofnet_findcards): Allocate txbuf. Simplify code flow and move + nested function out of the parent while on it. + +2012-06-19 Vladimir Serbinenko + + * grub-core/net/drivers/ieee1275/ofnet.c (get_card_packet): Fix packet + presence check. + (grub_ieee1275_net_config_real): Fix config pointer. + +2012-06-19 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_parse_args): Extend + filename parsing to non-block devices. + +2012-06-19 Vladimir Serbinenko + + * grub-core/kern/device.c (grub_device_open): Remove dead code. + +2012-06-18 Vladimir Serbinenko + + * include/grub/elf.h: Rename R_PPC to GRUB_R_PPC to avoid collisions. + All users updated. + +2012-06-18 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Generate + UUID search command even if hints probing failed. + +2012-06-18 Vladimir Serbinenko + + * po/POTFILES.in: Regenerated. + +2012-06-17 Vladimir Serbinenko + + Speed-up video on fuloong. + + * grub-core/bus/bonito.c (grub_pci_device_map_range_cached): + New function. + (grub_pci_device_unmap_range): Handle non-cached address. + * grub-core/video/sis315pro.c (framebuffer): Remove render_target and + add direct_ptr. + (grub_video_sis315pro_video_fini): Unmap direct_ptr. + (grub_video_sis315pro_setup): Use cache address and grub_video_fb_setup. + (grub_video_sis315pro_set_active_render_target): Removed. + (grub_video_sis315pro_get_info_and_fini): Use uncached address. + (grub_video_adapter): Use grub_video_fb_set_active_render_target. + (grub_video_sis315pro_swap_buffers): Call grub_video_fb_swap_buffers and + sync caches. + * include/grub/mips/loongson/pci.h (grub_pci_device_map_range_cached): + New proto. + +2012-06-16 Vladimir Serbinenko + + * docs/grub.texi (Multi-boot manual config): New section. + +2012-06-15 Vladimir Serbinenko + + Avoid slow read-back from VRAM. + + * include/grub/video_fb.h (grub_video_fb_doublebuf_update_screen_t): + Move from here ... + * grub-core/video/fb/video_fb.c + (grub_video_fb_doublebuf_update_screen_t): ... here. Remove arguments. + * grub-core/video/fb/video_fb.c (framebuf_t): New type. + (front_target): Remove front_target. Add pages. + (grub_video_fb_init): Skip setting front_pages. + (grub_video_fb_fini): Likewise. + (doublebuf_blit_update_screen): Use pages. + (grub_video_fb_doublebuf_blit_init): Likewise. + (doublebuf_pageflipping_init): Allocate offscreen buffer. + (doublebuf_pageflipping_update_screen): Use offscreen buffer. + (grub_video_fb_setup): Prefer doublebuffing. + +2012-06-15 Vladimir Serbinenko + + * grub-core/normal/main.c (GRUB_MOD_INIT): Ignore errors when loading + gzio. + +2012-06-15 Vladimir Serbinenko + + Add loongson tests. + + * tests/util/grub-shell.in: Handle loongson. + * tests/partmap_test.in: Add loongson to the list of platform using ATA + drivers. + * grub-core/tests/boot/linux.init-mips.S (SHUTDOWN_MAGIC3) [REBOOT]: + Reboot instead of shutdown if REBOOT is defined. + +2012-06-15 Vladimir Serbinenko + + * grub-core/lib/mips/loongson/reboot.c (grub_reboot): Use 32-bit + sized ports since unlike on real hardware qemu supports only 32-bit + regs. + +2012-06-15 Vladimir Serbinenko + + * Makefile.util.def (grub-mkrescue): Enable on loongson. + * util/grub-mkrescue.in: Handle loongson. + +2012-06-14 Vladimir Serbinenko + + * util/getroot.c (convert_system_partition_to_system_disk) [__APPLE__]: + Set is_part appropriately. + (grub_util_biosdisk_get_grub_dev): Use is_part rather than comparing + names. Canonicalize partition without full disk. + +2012-06-13 Vladimir Serbinenko + + Revert usb-quiesce since it's wrong. + + * grub-core/disk/ieee1275/ofdisk.c (quiesce): Removed. + (grub_ofdisk_init): Don't do quiesce. + +2012-06-13 Vladimir Serbinenko + + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Apply + PowerMac workaround to Xserves as well. + Information supplied by: Benjamin Herrenschmidt. + +2012-06-13 Vladimir Serbinenko + + Don't assume that beginning address is also the entry point on ppc. + + * grub-core/loader/powerpc/ieee1275/linux.c (linux_entry): New variable. + (grub_linux_boot): Use linux_entry. + (grub_linux_load32): Fill linux_entry. Fix setting linux_addr. + (grub_linux_load64): Likewise. + +2012-06-13 Vladimir Serbinenko + + * util/grub-install.in: Fix cross-disk check on non-PreP machines. + +2012-06-13 Vladimir Serbinenko + + * grub-core/term/ieee1275/console.c (grub_console_fini): Don't + needlessly lose the console. + +2012-06-13 Vladimir Serbinenko + + * grub-core/normal/dyncmd.c (read_command_list): Don't access freed + space. + +2012-06-11 Vladimir Serbinenko + + Remove non-functional EFI grub_get_rtc. Put a better fatal message + than current grub_get_rtc() not implemented when booted with + coreboot without TSC. + + * grub-core/Makefile.am: Exclude efi/time.h from kernel headers. + Add machine/time.h to kernel headers on loongson. + * grub-core/Makefile.core.def (kernel): Remove + kern/generic/rtc_get_time_ms.c on qemu-multiboot-coreboot. + * grub-core/kern/efi/efi.c (grub_rtc_get_time_ms): Removed. + (grub_get_rtc): Likewise. + * grub-core/kern/generic/rtc_get_time_ms.c: Include grub/machine/time.h. + * grub-core/kern/i386/coreboot/init.c (grub_get_rtc): Removed. + * grub-core/kern/i386/pc/init.c: Include grub/machine/init.h. + * grub-core/kern/i386/tsc.c (grub_tsc_init) + [!GRUB_MACHINE_PCBIOS && !GRUB_MACHINE_IEEE1275]: Call grub_fatal + rather than installing known non-working time source. + * grub-core/kern/ieee1275/init.c (grub_get_rtc): Removed. + * grub-core/kern/mips/loongson/init.c: Include grub/machine/time.h. + * include/grub/time.h: Don't include machine/time.h. + * include/grub/efi/time.h: Removed. + * include/grub/i386/efi/time.h: Likewise. + * include/grub/i386/ieee1275/time.h: Likewise. + * include/grub/powerpc/ieee1275/time.h: Likewise. + * include/grub/sparc64/ieee1275/time.h: Likewise. + * include/grub/x86_64/efi/time.h: Likewise. + +2012-06-11 Vladimir Serbinenko + + Remove dot on i and j when combining with above diacritics. + + * include/grub/unicode.h (GRUB_UNICODE_DOTLESS_LOWERCASE_I): New enum + value. + (GRUB_UNICODE_DOTLESS_LOWERCASE_J): Likewise. + * grub-core/font/font.c (grub_font_construct_dry_run): Replace i and j + with dotless variants when any combining above is present. + +2012-06-09 Vladimir Serbinenko + + * tests/grub_script_expansion.in: Explicitly tell grep that we handle + text and not binary. + +2012-06-09 Vladimir Serbinenko + + Stop polling as soon as we have the packet we were waiting for. + + * include/grub/net.h (grub_net_poll_cards): New argument stop_condition. + All users updated. + * grub-core/net/arp.c (have_pending): New var. + (pending_req): Likewise. + (grub_net_arp_send_request): Fill pending_req and use have_pending as + stop indicator. + (grub_net_arp_receive): Set have_pending. + * grub-core/net/dns.c (recv_data): New field stop. + (recv_hook): Set stop. + (grub_net_dns_lookup): Init stop and use as stop condition. + * grub-core/net/http.c (http_establish): Use headers_recv as stop + condition. + * grub-core/net/net.c (grub_net_poll_cards): New argument + stop_condition. Stop when it goes true. + * grub-core/net/tcp.c (grub_net_tcp_open): Use `established' as stop + indicator. + * grub-core/net/tftp.c (tftp_open): Use `have_oack' as stop indicator. + +2012-06-09 Vladimir Serbinenko + + Keep TX and RX buffers on EFI rather than always allocate new ones. + + * include/grub/net.h (grub_net_card_driver): Allow driver to modify + card. All users updated. + (grub_net_card): New members txbuf, rcvbuf, rcvbufsize and txbusy. + * grub-core/net/drivers/efi/efinet.c (send_card_buffer): Reuse buffer. + (get_card_packet): Likewise. + (grub_efinet_findcards): Init new fields. + +2012-06-09 Vladimir Serbinenko + + * grub-core/term/ieee1275/serial.c (do_real_config): Fix cast to fix + compilation error on sparc64. + +2012-06-09 Vladimir Serbinenko + + Use ITC on IA64 rather than broken routine based on daytime. + + * grub-core/kern/efi/efi.c (grub_rtc_get_time_ms) [__ia64__]: Remove on + ia64. + (grub_get_rtc) [__ia64__]: Likewise. + * grub-core/kern/ia64/efi/init.c (divisor): New variable. + (get_itc): New function. + (grub_rtc_get_time_ms): Likewise. + (grub_machine_init): Calibrate ITC. + * include/grub/efi/time.h (grub_get_rtc), (GRUB_TICKS_PER_SECOND): + Keep only on non-ia64. Don't export since it's broken and used only + if TSC is unavailable. + +2012-06-09 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c (find_parent_device): Return the parent + even if it's used. + (name_devices): Replace #if 0 with #ifdef DEBUG_NAMES. + Skip if parent is unused. + +2012-06-08 Vladimir Serbinenko + + * tests/partmap_test.in: Skip on ppc due to serious firmware bug. + +2012-06-08 Vladimir Serbinenko + + Fix wildcard escaping. + + * grub-core/commands/wildcard.c (wildcard_escape): Moved from here ... + * grub-core/script/execute.c (wildcard_escape): .. to here. + Don't escape dot. + * grub-core/commands/wildcard.c (wildcard_unescape): Moved from here ... + * grub-core/script/execute.c (wildcard_unescape): .. to here. + Don't escape dot. + * grub-core/script/execute.c (gettext_append): Always escape. + (grub_script_arglist_to_argv): Always handle escaping/unescaping. + * grub-core/script/yylex.l: Don't cut away the escaping. + * tests/grub_script_echo1.in: Add tests with wildcard. + +2012-06-08 Vladimir Serbinenko + + * grub-core/bus/usb/serial/ftdi.c (real_config): Handle 1.5 stop bits. + (ftdi_hw_configure): Likewise. + * grub-core/bus/usb/serial/pl2303.c (GRUB_PL2303_STOP_BITS_1_5): New + define. + (real_config): Handle 1.5 stop bits. + (pl2303_hw_configure): Likewise. + +2012-06-08 Vladimir Serbinenko + + * Makefile.am: Add ppc linux bootcheck. + * grub-core/tests/boot/linux-ppc.cfg: New file. + * grub-core/tests/boot/linux.init-ppc.S: Likewise. + +2012-06-08 Vladimir Serbinenko + + * tests/grub_script_expansion.in: Skip network protocols. + +2012-06-08 Vladimir Serbinenko + + * tests/util/grub-shell.in: Use escc-ch-a port on ppc. + +2012-06-08 Vladimir Serbinenko + + * util/powerpc/ieee1275/grub-mkrescue.in: Handle (and ignore) + --rom-directory. + Add -graft-points. + +2012-06-08 Vladimir Serbinenko + + ESCC serial driver for conducting sautomated tests in qemu. + Not tested on real hardware. + + * include/grub/serial.h (grub_serial_port): New field escc_desc. + * grub-core/term/ieee1275/escc.c: New file. + * grub-core/Makefile.core.def (escc): New module. + +2012-06-08 Vladimir Serbinenko + + * grub-core/term/ieee1275/serial.c (do_real_config): Set handle to + invalid on error. + (serial_hw_fetch): Don't read invalid handle. + (serial_hw_put): Don't write into invalid handle. + +2012-06-08 Vladimir Serbinenko + + Add a 1.5 stop bits value. + + * grub-core/term/serial.c (grub_cmd_serial): Handle 1.5. + * include/grub/serial.h (grub_serial_stop_bits_t): Add + GRUB_SERIAL_STOP_BITS_1_5. + +2012-06-08 Vladimir Serbinenko + + * grub-core/commands/wildcard.c (wildcard_expand): Set default return + value rather than let it uninited. + +2012-06-07 Vladimir Serbinenko + + * grub-core/commands/wildcard.c (+check_file): New function. + (wildcard_expand): Don't expand to non-existing files, expand with + suffix and not attempt to expand if not needed. + +2012-06-07 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c (name_devices): Don't make disks + out of partitions containing other partitions. + +2012-06-07 Vladimir Serbinenko + + Pass PCIINFO on BIOS to OpenBSD since otherwise it fails to boot + on some qemu versions with GRUB. + + * include/grub/i386/openbsd_bootarg.h (OPENBSD_BOOTARG_PCIBIOS): New + define. + (grub_openbsd_bootarg_pcibios): New struct. + * grub-core/loader/i386/bsd.c (grub_openbsd_boot) [GRUB_MACHINE_PCBIOS]: + Add PCIINFO. + +2012-06-07 Vladimir Serbinenko + + * tests/util/grub-shell.in: Trim firmware output on EFI. + +2012-06-07 Vladimir Serbinenko + + * grub-core/Makefile.core.def (vga_text): Disable on muliboot + and coreboot since it's already in kernel. + +2012-06-07 Vladimir Serbinenko + + * util/getroot.c (grub_util_get_dm_node_linear_info): Moved from here... + * grub-core/kern/emu/hostdisk.c (grub_util_get_dm_node_linear_info): + to here. New return value start. All users updated. + Recursively scan linear mappings. + * include/grub/emu/hostdisk.h (grub_util_get_dm_node_linear_info): New + proto. + * grub-core/kern/emu/hostdisk.c (grub_hostdisk_find_partition_start): + Use grub_util_get_dm_node_linear_info. + * util/getroot.c (convert_system_partition_to_system_disk): Use + grub_util_info rather than grub_dprintf. + (grub_util_biosdisk_get_grub_dev): Add a new grub_util_info. + +2012-06-07 Vladimir Serbinenko + + Move handling of GRUB_QEMU_OPTS to grub-shell so that make check works. + + * Makefile.am: Remove GRUB_QEMU_OPTS handling. + * tests/util/grub-shell.in: Add GRUB_QEMU_OPTS handling. + +2012-06-07 Vladimir Serbinenko + + * include/grub/types.h (grub_set_unaligned64): New function. + * util/grub-setup.c (write_rootdev): Use unaligned access functions. + (setup): Likewise. + +2012-06-06 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (quiesce): New function. + (grub_ofdisk_fini): Quiesce USB devices. + +2012-06-06 Vladimir Serbinenko + + * grub-core/loader/powerpc/ieee1275/linux.c (grub_linux_boot): Sync + caches. + +2012-06-06 Vladimir Serbinenko + + * util/grub-fstest.c (cmd_crc): Use grub_get_unaligned32 for safety. + +2012-06-06 Vladimir Serbinenko + + * grub-core/disk/pata.c (grub_pata_pio_read) + [GRUB_MACHINE_MIPS_QEMU_MIPS]: Don't byteswap even on mipseb. + (grub_pata_pio_write) [GRUB_MACHINE_MIPS_QEMU_MIPS]: Likewise. + +2012-06-06 Vladimir Serbinenko + + Extend automated tests to qemu-mips. + + * Makefile.am: reorganise tests and enable qemu-mips. + * configure.ac (COND_mipseb), (COND_mipsel): New conditions. + * grub-core/tests/boot/linux.init-mips.S: New file. + * tests/partmap_test.in: Handle ata0 disks. + * tests/util/grub-shell.in: Handle qemu-mips. Make defaults work on + non-pc i386. + +2012-06-06 Vladimir Serbinenko + + * Makefile.util.def (grub-mkrescue) Anable on mips_qemu_mips and + ia64. + * util/grub-mkrescue.in: Handle qemu-mips and ia64. Add missing + quotes while on it. + +2012-06-06 Vladimir Serbinenko + + * grub-core/kern/mips/qemu_mips/init.c (grub_exit): Implement. + (grub_halt): Likewise. + * grub-core/lib/mips/qemu_mips/reboot.c (grub_reboot): Likewise. + +2012-06-06 Vladimir Serbinenko + + * grub-core/term/serial.c (grub_serial_register) + [GRUB_MACHINE_MIPS_QEMU_MIPS]: Don't autostart console in order to bring + the behaviour in line with x86 platforms. + +2012-06-06 Vladimir Serbinenko + + * grub-core/commands/hdparm.c (le16_to_char): Always byte-swap strings. + (grub_ata_strncpy): Likewise. + (grub_ata_identify): Add missing byteswaps. + +2012-06-06 Vladimir Serbinenko + + * grub-core/term/i386/pc/vga_text.c (screen_write_char): Add missing + byte-swap. + (screen_read_char): Likewise. + (grub_vga_text_cls): Likewise. + +2012-06-06 Vladimir Serbinenko + + * grub-core/loader/efi/chainloader.c (copy_file_path): Handle non-ASCII + filenames. + (make_file_path): Likewise. + +2012-06-06 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (scan): Support vscsi on IBM + machines. + Tested by: Paulo Flabiano Smorigo. + Crucial information about API supplied by: Coleen . + Reviewed by: Coleen . + +2012-06-05 Vladimir Serbinenko + + * util/grub-mkimage.c: Disable -Wcast-align. + +2012-06-05 Vladimir Serbinenko + + * grub-core/genmod.sh.in: Enable objconv errors 2030, 2050 and 2031 + as they are fatal. + +2012-06-05 Vladimir Serbinenko + + * grub-core/Makefile.am (rs_decoder.S): Add missing -ffreestanding. + +2012-06-05 Vladimir Serbinenko + + * util/grub-probe.c (escape_of_path): Fix double free. + +2012-06-05 Vladimir Serbinenko + + * grub-core/commands/videoinfo.c (hook): Show pitch. + +2012-06-05 Vladimir Serbinenko + + * util/grub.d/20_linux_xen.in: Skip xen-syms. + +2012-06-05 Vladimir Serbinenko + + * util/grub-probe.c (escape_of_path): Don't add ieee1275/. + (probe): Add ieee1275 to OFW devices. + +2012-06-04 Vladimir Serbinenko + + * util/ieee1275/ofpath.c (of_path_of_scsi): Fix wrong format specifier. + +2012-06-04 Vladimir Serbinenko + + Handle IBM OFW path. + + * util/ieee1275/ofpath.c (find_obppath): Use devspec if obppath isn't + available. + (of_path_of_scsi): Handle vdevice. + +2012-06-03 Vladimir Serbinenko + + * grub-core/mmap/i386/pc/mmap.c (malloc_hook): + Allocate in multiples of 16 to avoid adding a few bytes free region the + windows bugs upon. + +2012-06-03 Vladimir Serbinenko + + * grub-core/commands/i386/pc/drivemap.c (install_int13_handler): + Allocate in multiples of 16 to avoid adding a few bytes free region the + windows bugs upon. + * grub-core/mmap/i386/pc/mmap.c (malloc_hook): Likewise. + +2012-06-02 Vladimir Serbinenko + + * grub-core/video/efi_gop.c (grub_video_gop_setup): Reject invalid + resolutions. + * grub-core/video/i386/pc/vbe.c (grub_vbe_get_preferred_mode): Likewise. + * grub-core/video/video.c (grub_video_edid_preferred_mode): Likewise. + +2012-06-02 Isao Shimizu + + * util/ieee1275/ofpath.c (check_sas): Fix sas path. + +2012-06-02 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (print_line): Fix off-by-one error which + resulted in \\ at the end of the line. + +2012-06-02 Vladimir Serbinenko + + * grub-core/kern/parser.c (grub_parser_state_transitions): Handle \t. + (grub_parser_cmdline_state): Likewise. + (grub_parser_split_cmdline): Likewise. + +2012-06-02 Vladimir Serbinenko + + * util/getroot.c (grub_guess_root_devices): Don't canonicalise + /dev/root and /dev/dm-*. + +2012-06-02 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (update_screen): Fix loop condition to + fix partially stale display. + +2012-06-02 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (backward_char): Use right line for + substraction. + +2012-06-02 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_write) [__linux__]: + Fix MBR remapping workaround. + (grub_util_biosdisk_read) [__linux__]: Likewise. + +2012-06-01 Vladimir Serbinenko + + * util/grub-install.in: Check for ieee1275 and not ieee1276. + +2012-05-31 Vladimir Serbinenko + + * configure.ac: Bump to beta6. + +2012-05-31 Christer Weinigel + + * grub-core/normal/main.c (grub_file_getline): Fix off-by-one error. + +2012-05-31 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_linux_boot): Use right version. + (grub_cmd_linux): Likewise. + +2012-05-31 Christer Weinigel + + Fix EHCI low-speed. + + * grub-core/bus/usb/ehci.c (GRUB_EHCI_MULT_ONE): Fix the value. + (GRUB_EHCI_MULT_TWO): Likewise. + (GRUB_EHCI_MULT_THREE): Likewise. + (GRUB_EHCI_CMASK_MASK): New enum value. + (GRUB_EHCI_SMASK_MASK): Likewise. + (GRUB_EHCI_CMASK_OFF): Likewise. + (GRUB_EHCI_SMASK_OFF): Likewise. + (grub_ehci_pci_iter): Enable periodic schedule. + (grub_ehci_parse_notrun): Likewise. + (grub_ehci_restore_hw): Likewise. + (grub_ehci_setup_qh): Set flags for low speed transfers. + (grub_ehci_find_qh): Use periodic list for low speed. + (grub_ehci_setup_transfer): Check periodic queue as well. + (grub_ehci_check_transfer): Likewise. + (grub_ehci_cancel_transfer): Cancel periodic transfer. + +2012-05-31 Paulo Flabiano Smorigo + + * util/grub-install.in: Write core.elf in PReP even if the --no-nvram + parameter is used. + +2012-05-31 Peter Jones + + * include/grub/i386/linux.h (linux_kernel_params): Add v206. + * grub-core/loader/i386/linux.c (grub_linux_boot): Use v206. + (grub_cmd_linux) [__x86_64__]: Validate grub_efi_system_table. + +2012-05-31 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_linux_boot): Fix overflow and + uninited variable. Allocate at least setup_sects. + +2012-05-30 Vladimir Serbinenko + + Fix handling of EFI with big memory maps. + + * grub-core/loader/i386/linux.c (GRUB_LINUX_CL_OFFSET): Removed. + (real_mode_mem): Likewise. + (real_mode_target): Likewise. + (real_mode_pages): Likewise. + (prot_mode_pages): Likewise. + (linux_params): New var. + (linux_cmdline): Likewise. + (free_pages): Don't set real mode variables. + (allocate_pages): Don't allocate real mode memory. + (grub_e820_add_region): Remove the limit. + (grub_linux_boot): Allocate and copy real mode memory. + (grub_linux_unload): Free linux_cmdline. + (grub_cmd_linux): Use temporary storage for parameters. + (grub_cmd_initrd): Likewise. + * include/grub/i386/linux.h (GRUB_E820_MAX_ENTRY): Removed. + (linux_kernel_params): Make it 1K big. + +2012-05-30 Vladimir Serbinenko + + * Makefile.util.def: Remove -Wno-format. + * grub-core/Makefile.core.def: Likewise. + +2012-05-30 Vladimir Serbinenko + + * tests/cmp_unit_test.c: Add missing failure message. + * tests/example_unit_test.c: Likewise. + * tests/printf_unit_test.c: Likewise. + +2012-05-30 Vladimir Serbinenko + + * grub-core/commands/gptsync.c (grub_cmd_gptsync): Propagate the + relaxation of protective MBR requirements. + +2012-05-29 Vladimir Serbinenko + + * configure.ac: Add condition for COND_HOST_XNU. + * Makefile.util.def (10_xnu): New script. + * util/grub.d/10_xnu.in: New file, extracted from 30_os_prober.in. + +2012-05-29 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S [__APPLE__]: Add a workaround for + objconv bug. + +2012-05-29 Vladimir Serbinenko + + * grub-core/gdb/i386/machdep.S: Make usable with Apple assembler. + Binary on other platforms stays identical. + +2012-05-28 Vladimir Serbinenko + + * configure.ac: Remove APPLE_CC and add -Wl,-allow_stack_execute on + Apple. + +2012-05-28 Vladimir Serbinenko + + * gentpl.py: Ignore error 2022 in objconv since it's irrelevant for us. + +2012-05-28 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/sys/types.h [__APPLE__]: Include stddef + rather than defining size_t ourselves to avoid conflict. + +2012-05-28 Vladimir Serbinenko + + * grub-core/fs/hfs.c (grub_hfs_dir): Use memset instead of + initialisation to avoid __bzero reference. + +2012-05-28 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S [__APPLE__]: Add Apple assembly + version. + * grub-core/commands/i386/pc/drivemap_int13h.S [__APPLE__]: Likewise. + * grub-core/kern/i386/pc/startup.S [__APPLE__]: Likewise. + * grub-core/lib/i386/relocator16.S [__APPLE__]: Likewise. + * grub-core/lib/i386/relocator_common.S [__APPLE__]: Likewise. + * grub-core/mmap/i386/pc/mmap_helper.S [__APPLE__]: Likewise. + +2012-05-28 Vladimir Serbinenko + + * grub-core/efiemu/runtime/efiemu.c: Replace APPLE_CC with __APPLE__. + * grub-core/kern/misc.c: Likewise. + * grub-core/loader/i386/xnu.c: Likewise. + * include/grub/i386/tsc.h: Likewise. + * include/grub/symbol.h: Likewise. + +2012-05-28 Vladimir Serbinenko + + * include/grub/list.h (grub_bad_type_cast_real): Remove return. + * include/grub/misc.h (ATTRIBUTE_ERROR): Make into noreturn attribute + on older compiler. + +2012-05-28 Vladimir Serbinenko + + * util/getroot.c (grub_util_biosdisk_get_grub_dev) [__APPLE__]: + Implement Apple flavour. + (convert_system_partition_to_system_disk) [__APPLE__]: Likewise. + +2012-05-28 Vladimir Serbinenko + + * include/grub/misc.h (memcmp) [__APPLE__]: Mark as regparm 0. + (memmove) [__APPLE__]: Likewise. + (memcpy) [__APPLE__]: Likewise. + (memset) [__APPLE__]: Likewise. + * grub-core/kern/misc.c (memcmp) [__APPLE__]: Likewise. + (memmove) [__APPLE__]: Likewise. + (memcpy) [__APPLE__]: Likewise. + (memset) [__APPLE__]: Likewise. + +2012-05-28 Vladimir Serbinenko + + * grub-core/genmod.sh.in: Fix a bug in Apple part which caused + dependency discard. + +2012-05-27 Vladimir Serbinenko + + * grub-core/normal/main.c (read_config_file): Provide config_file and + config_directory. + * util/grub.d/41_custom.in: Use config_directoy when available. + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/bfs.c (iterate_in_b_tree): Add missing NESTED_FUNC_ATTR. + (grub_bfs_dir): Likewise. + +2012-05-27 Peter Jones + + The old code gives arguments to a printf function which can't work + correctly, and the compiler complains. + + * grub-core/tests/example_functional_test.c (example_test): Add + missing text. + * grub-core/tests/lib/test.c (add_failure): Rewrite. + * include/grub/test.h (grub_test_assert_helper): New declaration. + (grub_test_assert): Use grub_test_assert_helper. + +2012-05-27 Vladimir Serbinenko + + * grub-core/Makefile.core.def (example_functional_test): Rename to ... + (exfctest): ... this to avoid overlong filenames. + All users updated. + +2012-05-27 Vladimir Serbinenko + + Handle "." and ".." on squashfs. + + * grub-core/fs/squash4.c (grub_fshelp_node): New field stsize. + Make inode numbers into stack. + (grub_squash_read_symlink): Use stack. + (grub_squash_iterate_dir): Use stack. Create "." and ".." nodes. + (make_root_node): Fill stack. + (grub_squash_open): Use stack. + +2012-05-27 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (open_device): Set dest->dev to 0 after + freeing. + +2012-05-27 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (print_option_help): Properly redirect + stderr on test calls. + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_find_file): Handle "." and "..". + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (list_file): Set mtime to correct value. + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Don't skip "." and + "..". + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/hfsplus.c (grub_hfsplus_catfile): New field parentid. + (grub_hfsplus_iterate_dir): Add "." and "..". + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/cpio.c (canonicalize): Handle "..". + (grub_cpio_find_file) [MODE_USTAR]: Handle hardlinks. + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (GRUB_BTRFS_ITEM_TYPE_INODE_REF): New enum value. + (find_path): Handle "." and "..". + +2012-05-27 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_file): New field hardlink. + (GRUB_AFFS_FILETYPE_HARDLINK): New enum value. + (grub_affs_iterate_dir): Handle hardlinks. + +2012-05-26 Matthew Garrett + + * grub-core/term/efi/console.c (grub_efi_console_init): Set text mode. + (grub_efi_console_fini): Likewise. + * grub-core/video/efi_gop.c (framebuffer): New field offscreen. + (grub_video_gop_fill_mode_info): Rename to ... + (grub_video_gop_fill_real_mode_info): ... this. + (grub_video_gop_fill_mode_info): New function. + (grub_video_gop_setup): Setup double framebuffer. + (grub_video_gop_get_info_and_fini): Use original framebuffer. + Free offscreen. + (grub_video_gop_swap_buffers): Copy framebuffer. + (grub_video_gop_fini): Free offscreen buffer. + * include/grub/efi/graphics_output.h (grub_efi_gop_blt_operation_t): + New enum. + (grub_efi_gop_blt_pixel): New struct. + +2012-05-26 Vladimir Serbinenko + + * gentpl.py: Remove error disabling for objconv. + +2012-05-26 Vladimir Serbinenko + + * configure.ac: Remove -Wunitialized as it's not available on older + compilers. + +2012-05-26 Vladimir Serbinenko + + Fix extent overflow comparator. + + * grub-core/fs/hfsplus.c (grub_hfsplus_extkey_internal): Add type. + (grub_hfsplus_read_block): Set type. + (grub_hfsplus_cmp_extkey): Compare type. + +2012-05-25 Vladimir Serbinenko + + * util/grub-fstest.c (cmd_cmp): Fix stat'ing of wrong file. + +2012-05-24 Vladimir Serbinenko + + * grub-core/fs/hfsplus.c (grub_hfsplus_label): Use found ptr rather + than 0. + +2012-05-24 Vladimir Serbinenko + + * Makefile.am (starfield_DATA): Add dejavu_bold_14.pf2. + (dejavu_bold_14.pf2): New target. + +2012-05-24 Vladimir Serbinenko + + * configure.ac: Fix djvu font detection. + +2012-05-23 Vladimir Serbinenko + + * grub-core/normal/misc.c (grub_normal_print_device_info): Dsiplay + ext* instead of ext2. + +2012-05-23 Vladimir Serbinenko + + * grub-core/normal/term.c (read_terminal_list): Terminate the terminal + name with \0. + +2012-05-22 Jordan Uggla + + * docs/grub-dev.texi: Remove dot from .png. + +2012-05-22 Vladimir Serbinenko + + * grub-core/partmap/gpt.c (grub_gpt_partition_map_iterate): Accept + protective entry in any slot. + * grub-core/partmap/msdos.c (grub_partition_msdos_iterate): Reject + if protective entry is found in any slot. + + Protective entry in non-first slot make no sense but is a widespread + brain damage. + +2012-05-22 Vladimir Serbinenko + + * grub-core/fs/squash4.c (grub_squash_read_data): Add missing byte-swap. + +2012-05-22 Vladimir Serbinenko + + * grub-core/fs/reiserfs.c (grub_reiserfs_iterate_dir): Fix size byteswap + with old reiserfs. + (grub_reiserfs_open): Don't free root. + +2012-05-22 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (grub_fshelp_find_file): Set currnode to 0 + after freeing for safety. + +2012-05-21 Vladimir Serbinenko + + * grub-core/commands/sleep.c (do_print): Add missing grub_refresh. + Reported by: Jordan Uggla. + +2012-05-21 Jordan Uggla + + * docs/grub.texi Fix documentation of GRUB_HIDDEN_TIMOUNT to match the + actual implementation. Specifically, clarify that the grub menu will + be displayed for GRUB_TIMOUT seconds after the hidden timeout has + passed. + +2012-05-21 Benjamin Herrenschmidt + + * grub-core/kern/powerpc/dl.c (trampoline_template): Use r12 instead + of r0. + +2012-05-21 Vladimir Serbinenko + + Remove unjustified hard dependency of normal.mod on gfxterm. + + * include/grub/term.h (grub_term_output): New member fullscreen. + * include/grub/gfxterm.h (grub_gfxterm_fullscreen): Removed. + * grub-core/term/gfxterm.c (grub_gfxterm_fullscreen): Make static. + (grub_gfxterm): Set .fullscreen. + * grub-core/normal/menu.c (menu_init): Use fullscreen. + * grub-core/gfxmenu/gfxmenu.c (GRUB_MOD_INIT): Likewise. + +2012-05-21 Vladimir Serbinenko + + * docs/grub.texi (Internationalisation/Filesystems): Add precisions + mentioning possible problems with non-ASCII (non-compliant) ISOs. + Mention case-insensitive AFFS, SFS and JFS. + +2012-05-21 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_mtime): Add missing grub_dl_ref. + +2012-05-21 Vladimir Serbinenko + + * grub-core/kern/fs.c (grub_fs_probe): Handle GRUB_ERR_OUT_OF_RANGE as + a bad FS. + +2012-05-18 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Mark plain + ISO9660 names as case-insensitive, lowercase it and remove trailing dot. + +2012-05-17 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_data): New field caseins. + (grub_jfs_mount): Fill caseins. + (grub_jfs_find_file): Respect caseins. + +2012-05-17 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Don't strrchr + through UTF-16. + +2012-05-17 Vladimir Serbinenko + + * grub-core/fs/fat.c (grub_fat_find_dir): Fix error message. + New argument origpath. All users updated. + +2012-05-15 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (read_data): Prevent overflow. + (read_attr): Ensure that we read start of possibly compressed block. + +2012-05-15 Vladimir Serbinenko + + * include/grub/ntfs.h (grub_ntfs_comp_table_element): New struct. + (grub_ntfs_comp): Use grub_ntfs_comp_table_element for comp_table. + All users updated. + +2012-05-14 Vladimir Serbinenko + + * Makefile.am (starfield_DATA): Replace dejavu.pf2 with dejavu_10.pf2, + dejavu_12.pf2, dejavu_14.pf2 and dejavu_16.pf2. + (dejavu.pf2): Replace with ... + (dejavu_10.pf2), (dejavu_12.pf2), (dejavu_14.pf2), (dejavu_16.pf2): + this. + +2012-05-14 Vladimir Serbinenko + + * util/grub.d/20_linux_xen.in: Add missing line. + +2012-05-14 Vladimir Serbinenko + + * include/grub/charset.h (GRUB_UTF16_UPPER_SURROGATE): Fix mask sizes. + (GRUB_UTF16_LOWER_SURROGATE): Likewise. + (grub_utf16_to_utf8): Likewise. + +2012-05-13 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (scan): Don't scan device tree if + GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS is set. + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set + GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS on IBM hardware. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New enum value + GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS. + +2012-05-13 Vladimir Serbinenko + + * grub-core/kern/fs.c (grub_fs_probe): Handle GRUB_ERR_OUT_OF_RANGE as + a bad FS. + +2012-05-13 Vladimir Serbinenko + + * grub-core/fs/udf.c (read_string): Bail out on size=0. + (grub_udf_read_symlink): Handle read_string failure. + +2012-05-12 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (read_device_map): Improve TRANSLATORS + comment. + +2012-05-12 Vladimir Serbinenko + + Fix handling of UDF symlinks. + + * grub-core/fs/udf.c (read_string): New argument outbuf. + All users updated. + (grub_ufs_read_symlink): Rename to ... + (grub_udf_read_symlink): ... this. All users updated. + Handle symlinks with more than one component. + +2012-05-12 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_read_symlink): Fix handling of long + symlinks. Replace leading colon with a slash. + +2012-05-12 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_find_file): Handle multiple slashes in + filename. + +2012-05-12 Vladimir Serbinenko + + * grub-core/fs/bfs.c (find_in_b_tree) [MODE_AFS]: Fix handling of exact + match in inner node. + +2012-05-12 Vladimir Serbinenko + + * grub-core/fs/bfs.c (mount): Improve filesystem detection reliability. + * grub-core/fs/ext2.c (grub_ext2_mount): Likewise. + * grub-core/fs/hfs.c (grub_hfs_mount): Likewise. + * grub-core/fs/hfsplus.c (grub_hfsplus_mount): Likewise. + * grub-core/fs/jfs.c (grub_jfs_mount): Likewise. + * grub-core/fs/minix.c (grub_minix_mount): Likewise. + * grub-core/fs/ntfs.c (grub_ntfs_mount): Likewise. + * grub-core/fs/romfs.c (grub_romfs_mount): Likewise. + * grub-core/fs/xfs.c (grub_xfs_mount): Likewise. + +2012-05-11 Vladimir Serbinenko + + Use grub-probe and not cmp to check that disk is empty. + + * util/grub-install.in: Use grub-probe for zero-check. + * util/grub-probe.c (PRINT_ZERO_CHECK): New enum value. + (probe): Handle PRINT_ZERO_CHECK. + (argp_parser): Handle -t zero_check. + +2012-05-11 Vladimir Serbinenko + + Flush block cache on adding disk to device map. + + * grub-core/kern/emu/hostdisk.c (flush_initial_buffer): New function. + (grub_hostdisk_os_dev_to_grub_drive): Call flush_initial_buffer on + adding. + (read_device_map): Likewise. + (open_device): Flush on opening. + +2012-05-10 Vladimir Serbinenko + + * grub-core/fs/cpio.c (grub_cpio_find_file): Handle prefix. + (handle_symlink): Fix off-by-one error. + Canonicalize the target. + (grub_cpio_dir): Canonicalize the name. + Fix memory leak. + Set directory. + (grub_cpio_open): Canonicalize the name. + +2012-05-10 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Fix symlink + handling. + +2012-05-10 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_find_file): Fix handling of double slash. + * grub-core/fs/minix.c (grub_minix_find_file): Likewise. + +2012-05-10 Vladimir Serbinenko + + * util/grub-menulst2cfg.c (main): Check return value of fwrite. + * util/grub-mklayout.c (write_file): Likewise. New argument fname. + All users updated. + +2012-05-10 Vladimir Serbinenko + + * util/grub.d/20_linux_xen.in: Update initrd list based on 10_linux.in + counterpart. + +2012-05-10 Vladimir Serbinenko + + Fix UFS1 big file support. + + * grub-core/fs/ufs.c (INODE): Removed. + (INODE_SIZE): Always use 64-bit byte-swap since size field is always + 64-bit. + (INODE_MODE): Simplify. + (grub_ufs_inode): Use uint64_t for size and not int64_t. + (grub_ufs_lookup_symlink): Don't use INODE. + +2012-05-09 Vladimir Serbinenko + + Fix minixfs with non-power-of-two blocks since it's supported by minix. + + * grub-core/fs/minix.c (GRUB_MINIX_ZONESZ): Use block_size. + (grub_minix_data): Replace log_block_size with block_size. + (grub_minix_read_file): Use block_size but avoid 64-bit division. + (grub_minix_mount): Fill block_size. + +2012-05-09 Vladimir Serbinenko + + * configure.ac: Bump to beta5. + +2012-05-09 Vladimir Serbinenko + + Fix wrapped HFS+ handling. + + * grub-core/fs/fshelp.c (grub_fshelp_read_file): New argument + blocks_start. All users updated. + * grub-core/fs/hfsplus.c (grub_hfsplus_read_block): Don't add + wrapping offset. + (grub_hfsplus_read_file): Pass embedding offset to fshelp_read_file. + +2012-05-09 Vladimir Serbinenko + + Fix long symlinks on reiserfs. + + * grub-core/fs/reiserfs.c (grub_fshelp_node): New field size. + (grub_reiserfs_read_symlink): Use grub_reiserfs_read_real. + (grub_reiserfs_iterate_dir): Save size for non-directories. + (grub_reiserfs_open): Don't reread stat block as we already know the + size. + (grub_reiserfs_read): Split into... + (grub_reiserfs_read_real): ... and ... + (grub_reiserfs_read): ...this. + +2012-05-09 Vladimir Serbinenko + + Fix non-indexed JFS. + + * grub-core/fs/jfs.c (grub_jfs_sblock): New field flags. + (grub_jfs_data): New field namecomponentlen. + (grub_jfs_mount): Fill namecomponentlen. + (grub_jfs_getent): Use namecomponentlen rather than hardcoded 11. + +2012-05-08 Vladimir Serbinenko + + * grub-core/script/yylex.l: Ugly fix for "\\\n ". + * tests/grub_script_echo1.in: Add tests. + +2012-05-08 Vladimir Serbinenko + + * util/grub-install.in: Ignore empty devicetree directory. + +2012-05-08 Bean + + * grub-core/net/ip.c (reassemble): Make asm_buffer into asm_netbuff. + All users updated. + (free_rsm): Free header as well. + (free_old_fragments): Fix memory leak. + * grub-core/net/netbuff.c (grub_netbuff_free): Make return void. + * grub-core/net/tftp.c (tftp_receive): Fix memory leak. + (destroy_pq): Likewise. + * include/grub/net/netbuff.h (grub_netbuff_free): Make return void. + +2012-05-08 Vladimir Serbinenko + + * grub-core/commands/hashsum.c (grub_cmd_hashsum): Align space for + resulting hash as a precaution. + +2012-05-08 Vladimir Serbinenko + + * grub-core/net/bootp.c (set_env_limn_ro): Replace reserved ':' with + '_' in variable names. + * grub-core/net/net.c (grub_net_network_level_interface_register): + Likewise. + +2012-05-08 Vladimir Serbinenko + + Fix AFFS with non-512B blocks. + + * grub-core/fs/affs.c (grub_affs_rblock): Make type uint32_t. + (AFFS_MAX_LOG_BLOCK_SIZE): New definition. + (grub_affs_data): Replace blocksize with log_blocksize. + (grub_affs_read_block): Fix non-512B blocks. + (grub_affs_read_symlink): Likewise. + (grub_affs_iterate_dir): Likewise. Fix freeing corruption. + (grub_affs_read): Fix non-512B blocks. + (grub_affs_label): Likewise. + (grub_affs_mtime): Likewise. + (grub_affs_mount): Fix block detection routine. + +2012-05-08 Vladimir Serbinenko + + Add filesystem mtime to AFFS. + + * grub-core/fs/affs.c (grub_affs_file): Make type unsigned. + (aftime2ctime): New function. + (grub_affs_dir): Use aftime2ctime. + (grub_affs_label): Fix return value. + (grub_affs_mtime): New function. + (grub_affs_fs): Add mtime. + +2012-05-07 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_read_symlink): Convert latin1 into + UTF-8. + +2012-05-07 Vladimir Serbinenko + + * grub-core/fs/sfs.c (grub_sfs_read_symlink): Convert latin1 into + UTF-8. + +2012-05-07 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_iterate_dir): Mark as case insensitive. + +2012-05-07 Vladimir Serbinenko + + * grub-core/fs/sfs.c (grub_sfs_rblock): New fields createtime and + flags. + (FLAGS_CASE_SENSITIVE): New enum value. + (cache_entry): New struct. + (grub_fshelp_node): Add fields cache_off, next_extent, cache_allocated, + cache_size and cache. + (grub_sfs_data): Remove blocksize. All users switched to log_blocksize. + Add log_blocksize and fshelp_flags. + (grub_sfs_read_extent): Handle non-512 blocks. + (grub_sfs_read_block): Add cаche and handle non-512 blocks. + (grub_sfs_read_file): Handle non-512 blocks. + (grub_sfs_mount): Handle non-512 blocks. Fill log_blocksize and + fshelp_flags. + (grub_sfs_read_symlink): Handle non-512 blocks. + (grub_sfs_iterate_dir): Init new fields. Mark as case-insensitive. + (grub_sfs_dir): Free cache. + (grub_sfs_close): Likewise. + +2012-05-06 Vladimir Serbinenko + + * grub-core/fs/bfs.c (read_bfs_file): Fix overflow with over 2TiB + filesystems. + +2012-05-06 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_read_block): Fix theoretical overflow. + +2012-05-06 Vladimir Serbinenko + + * grub-core/commands/ls.c (grub_ls_list_files): Fix overflow. + +2012-05-06 Vladimir Serbinenko + + * grub-core/fs/sfs.c (grub_fshelp_node): Fix types. + (grub_sfs_read_extent): Likewise. + (grub_sfs_read_block): Likewise. + (grub_sfs_mount): Likewise. + (grub_sfs_iterate_dir): Likewise. + (grub_sfs_read_symlink): Use strncpy instead of strcpy. + (grub_sfs_read): Remove unnecessarry and wrong temporary variable. + +2012-05-04 Vladimir Serbinenko + + Fix errors on compressed NTFS with 512B clusters. + + * include/grub/ntfs.h (grub_ntfscomp_func_t): Use appropriately sized + types. + * grub-core/fs/ntfs.c (grub_ntfs_read): Return correct -1 on error and + not 0. + * grub-core/fs/ntfscomp.c (read_block): Use appropriately-sized types. + Relax check for inline extents. + (ntfscomp): Return correct -1 on error and not 0. + +2012-05-04 Vladimir Serbinenko + + * util/grub-install.in: Fix handling of prefix containing spaces. + +2012-05-04 Vladimir Serbinenko + + * grub-core/fs/squash4.c (grub_squash_inode): Fix offset field. + (grub_squash_read_data): Fix offset byte-swapping. + +2012-05-04 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_strcmp): Use unsigned comparison as + per common usage and preffered in several parts of code. + (grub_memcmp): Likewise. + (grub_strncmp): Likewise. + * include/grub/misc.h (grub_strcasecmp): Likewise. + (grub_strncasecmp): Likewise. + * Makefile.util.def (cmp_test): New test. + (grub_script_strcmp): Likewise. + * tests/cmp_unit_test.c: New file. + * tests/grub_script_strcmp.in: Likewise. + * grub-core/fs/hfsplus.c (grub_hfsplus_cmp_catkey): Add a comment. + +2012-05-04 Vladimir Serbinenko + + * include/grub/pci.h: Move enums into no-asm part. + +2012-05-04 Vladimir Serbinenko + + * grub-core/fs/bfs.c (bfs_strcmp) [MODE_AFS]: Use signed comparison. + +2012-05-04 Samuel Thibault + + * util/getroot.c (find_hurd_root_device): Try to make error message + and comments to translators clearer. + +2012-05-04 Vladimir Serbinenko + + * grub-core/commands/menuentry.c: Fix typo in TRANSLATORS comments. + +2012-05-04 Vladimir Serbinenko + + * grub-core/kern/fs.c (grub_fs_probe) [GRUB_UTIL]: Add workaround for + btrfs. + +2012-05-04 Vladimir Serbinenko + + * docs/grub.cfg: Update. + +2012-05-04 Vladimir Serbinenko + + * docs/grub.texi (PXE): Remove not present variables. + +2012-05-04 Vladimir Serbinenko + + * grub-core/net/net.c (defserver_set_env): New function. + (defserver_get_env): Likewise. + (GRUB_MOD_INIT): Register net_default_server and pxe_default_server. + +2012-05-03 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (read_device_map): Skip invalid Fedora + entries. + +2012-05-03 Vladimir Serbinenko + + * grub-core/commands/menuentry.c: Add TRANSLATORS comments. + * grub-core/kern/emu/hostdisk.c: Likewise. + +2012-05-03 Samuel Thibault + + Handle hurd userspace partitions. + + * util/getroot.c (find_hurd_root_device): New function. + (grub_guess_root_devices): Use find_hurd_root_device on Hurd. + +2012-05-03 Vladimir Serbinenko + + * util/getroot.c (convert_system_partition_to_system_disk); Add etherd + names. + Reported by: Bastian Blank. + +2012-05-03 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_lzo_decompress): Fix offset when + crossing page boundary. + +2012-05-03 Vladimir Serbinenko + + Fix B-tree search in BFS, especially in presence of non-ASCII + characters. + + * grub-core/fs/bfs.c (bfs_strcmp): New function. + (find_in_b_tree): Use standard bsearch + btree algorithm. + +2012-05-03 Vladimir Serbinenko + + * util/grub-fstest.c (cmd_cmp): Avoid comparing devices, pipes + and so on. + +2012-05-03 Matthew Garrett +2012-05-03 Vladimir Serbinenko + + Suspend broadcom cards in order to stop their DMA. + + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Add pci.h on x86 EFI. + * grub-core/Makefile.core.def (kernel): Add pci.c on x86 EFI. + (pci): Don't build on x86 EFI. + * grub-core/bus/pci.c (grub_pci_find_capability): New function. + * grub-core/kern/efi/mm.c (stop_broadcom) [__i386__ || __x86_64__]: + New function. + (grub_efi_finish_boot_services) [__i386__ || __x86_64__]: Call + stop_broadcom if running on EFI. + * include/grub/pci.h (GRUB_PCI_CLASS_NETWORK): New enum value. + (GRUB_PCI_CAP_POWER_MANAGEMENT): Likewise. + (GRUB_PCI_VENDOR_BROADCOM): Likewise. + (grub_pci_find_capability): New proto. + +2012-05-03 Vladimir Serbinenko + + * docs/grub.texi: Remove dot from the extension as it apparently + doesn't work with some makeinfo versions. + +2012-05-03 Vladimir Serbinenko + + * po/Makefile.in.in: Make msgfmt output in little-endian in accordance + with GRUB expectance. + +2012-05-03 Vladimir Serbinenko + + * util/grub-fstest.c (cmd_cmp): Compare directories recursively. + +2012-05-03 Vladimir Serbinenko + + * grub-core/fs/reiserfs.c (grub_reiserfs_iterate_dir): Put a trailing + zero after directory block since last entry may be not 0-terminated if + it ends on block boundary. Use continue instead of if spanning whole + loop. + +2012-05-03 Vladimir Serbinenko + + Support 4K sectors UDF inline files. + + * grub-core/fs/udf.c (grub_udf_file_entry): Don't specify padding size. + (grub_udf_extended_file_entry): Likewise. + (grub_fshelp_node): Name the anonymous union. Put block at the end. + All users updated. + (get_fshelp_size): New function. + (grub_udf_read_icb): Read whole block. + (grub_udf_iterate_dir): Likewise. + (grub_udf_dir): Likewise. + (grub_udf_open): Likewise. + +2012-05-03 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_get_file_block): Support triple indirect. + +2012-05-03 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_lookup_symlink): Use proper check for + inline symlinks in addition to workaround. + +2012-05-03 Vladimir Serbinenko + + * grub-core/fs/xfs.c (grub_xfs_iterate_dir): Handle read_inode errors. + +2012-05-03 Vladimir Serbinenko + + * grub-core/fs/xfs.c (GRUB_XFS_EXTENT_BLOCK): Fix bitmask. + +2012-05-03 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (nvlist_find_value): Fix return value. + +2012-05-02 Vladimir Serbinenko + + Fix reiserfs big seek times. + + * grub-core/fs/reiserfs.c (grub_reiserfs_get_item): New argument + exact. All users updated. + (grub_reiserfs_read): Use nearest btree search for seeking. + Fix return value on error. + +2012-05-02 Vladimir Serbinenko + + * grub-core/commands/legacycfg.c (legacy_file): Default to restricted + entries. + * grub-core/commands/menuentry.c (grub_cmd_menuentry): Likewise. + * docs/grub.texi: Update menuentry description. + +2012-05-02 Vladimir Serbinenko + + * util/grub-setup.c (setup): Remove duplicate call to embed. Fixes + crash when embedding onto filesystem. + +2012-05-02 Vladimir Serbinenko + + * util/getroot.c (find_root_devices_from_poolname): Handle spaces in the + name. + +2012-05-01 Vladimir Serbinenko + + * grub-core/net/ip.c (handle_dgram): Fix undeclared variable. + +2012-05-01 Vladimir Serbinenko + + * grub-core/normal/autofs.c (read_fs_list): Revert accidental wrong + commit. + +2012-05-01 Vladimir Serbinenko +2012-05-01 Bean + + * grub-core/net/ip.c (handle_dgram): Fix DHCP mac comparison. + +2012-05-01 Vladimir Serbinenko + + * grub-core/kern/file.c (grub_file_read): Read nothing if len = 0. + Special behaviour for len = 0 to read whole file isn't used anywhere and + can cause buffer ovewrflows in several places. + +2012-05-01 Vladimir Serbinenko + + * grub-core/normal/autofs.c (read_fs_list): Fix memory leak. + +2012-05-01 Vladimir Serbinenko + + Handle RAIDZ on non-512B sectors. + + * grub-core/fs/zfs/zfs.c (grub_zfs_device_desc): New member + max_children_ashift. + (fill_vdev_info_real): Fill max_children_ashift. + (read_device): Use max_children_ashift. + +2012-05-01 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (grub_fshelp_find_file): Fix memory leak. + +2012-05-01 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (read_device_map): Reject non-standard + disk names. + * docs/grub.texi: Update device.map parts. + +2012-05-01 Vladimir Serbinenko + + Don't scan into non-diskfilter devices having diskfilter names. + + * grub-core/disk/diskfilter.c (is_valid_diskfilter_name): New function. + (scan_disk): New argument accept_diskfilter. Fix recursion depth + handling. + (scan_disk_hook): New function. + +2012-04-29 Bean + + * grub-core/net/drivers/efi/efinet.c (get_card_packet): Fix buffer + allocation. + +2012-04-29 Mads Kiilerich (tiny) + + * configure.ac: Detect starfield theme font path + /usr/share/fonts/dejavu/DejaVuSans.ttf for Fedora. + +2012-04-26 Vladimir Serbinenko + + * grub-core/term/ieee1275/console.c (grub_console_dimensions): Use 80x24 + geometry on serial consoles. + +2012-04-26 Vladimir Serbinenko + + * grub-core/term/terminfo.c (grub_terminfo_readkey): Increase timeout + because of network consoles. + +2012-04-26 Vladimir Serbinenko + + * grub-core/term/terminfo.c (grub_terminfo_getkey): Fix incorrect queue + handling. + +2012-04-26 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (read_segment): Fix the case when disknr + falls on Q syndrom. + +2012-04-26 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_palloc_entry_offset_log): + Fix argument to grub_nilfs2_palloc_bitmap_block_offset. + +2012-04-25 Vladimir Serbinenko + + * grub-core/fs/squash4.c (lzo_decompress): Set grub_errno on error. + Allocate at lest 8192 for temporary buffer as required for lzo. + +2012-04-25 Vladimir Serbinenko + + * grub-core/fs/fat.c (grub_fat_mount): Don't add logical_sector_bits + to cluster_bits, since it's already added in. + (grub_fat_read_data): Likewise. + +2012-04-25 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (grub_ntfs_mount): Support 256-byte sectors, + as long as cluster size is multiple of 512 bytes. + +2012-04-23 Vladimir Serbinenko + + * util/grub-mkrescue.in: Fix locale directory. + +2012-04-23 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (map): Make static. + +2012-04-23 Bean + + * util/grub-fstest.c (fstest): Add missing break. + +2012-04-22 Samuel Thibault + + Fix hurd build. + + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_size) [__GNU__]: Do + not define nr variable. + * util/getroot.c [__GNU__] (strip_extra_slashes, xgetcwd, exec_pipe, + find_root_devices_from_poolname, find_root_devices_from_libzfs, + grub_find_device): Do not define. + +2012-04-21 Vladimir Serbinenko + + Fix kfreebsd compile and behaviour. + + * grub-core/kern/emu/hostdisk.c (grub_util_follow_gpart_up): Fix + format-security. + * util/getroot.c: Fix wait.h include. + (grub_guess_root_devices): Error if grub_find_device fails. + (grub_util_get_geom_abstraction): Fix shadowing and format-security. + (grub_util_get_dev_abstraction): Likewise. + (grub_util_pull_device): Likewise. + (grub_util_get_grub_dev): Likewise. + * util/lvm.c (grub_util_lvm_isvolume): Likewise. + +2012-04-21 Vladimir Serbinenko + + Fix and unify wholedisk detection. + + * util/getroot.c (convert_system_partition_to_system_disk): New argument + is_part. All users updated. + (device_is_wholedisk): Removed. + (grub_util_biosdisk_get_grub_dev): Use is_part. + +2012-04-18 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_write): Fix opening + mode. + +2012-04-18 Vladimir Serbinenko + + * configure.ac: Bump to beta4. + +2012-04-18 Vladimir Serbinenko + + * grub-core/commands/search_wrap.c (grub_cmd_search): Handle old + --fs-uuid --set UUID syntax. + +2012-04-18 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_write): Fix message + disunification. + +2012-04-18 Vladimir Serbinenko + + * conf/Makefile.common (LDFLAGS_PLATFORM): Use explicit -Wl. + +2012-04-18 Mads Kiilerich + + * grub-mkconfig_lib.in: Ignore *.rpmnew and *.rpmsave. + +2012-04-18 Mike Gilbert + + * util/grub.d/10_linux.in: Fix detection of genkernel initramfs. + +2012-04-18 Bean + + * grub-core/disk/ata.c (grub_ata_strncpy): Put terminating zero at right + place. + +2012-04-18 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (open_device): New argument max. All + users updated. + (grub_util_biosdisk_read): Handle Linux partitions not exactly + corresponding to GRUB partitions. + (grub_util_biosdisk_write): Likewise. + +2012-04-18 Vladimir Serbinenko + + Scan mdraid before LVM. + + * include/grub/diskfilter.h (grub_diskfilter_register): Renamed to .. + (grub_diskfilter_register_front): ... this. + (grub_diskfilter_register_back): New function. + All users of grub_diskfilter_register updated. + +2012-04-18 Vladimir Serbinenko + + * util/grub-install.in: Fix an automatic target detection bug. + +2012-04-18 Vladimir Serbinenko + + * util/grub-install.in: New option --efi-directory. + +2012-04-17 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (allocate_pages): Overwrite low memory + boot services if we have no other choice. + +2012-04-14 Vladimir Serbinenko + + * util/grub-mknetdir.in: Rename --override-directory to --directory and + document it. + * tests/util/grub-shell.in: Update to --directory. + +2012-04-13 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c: Disable -Wstrict-aliasing. + +2012-04-13 Vladimir Serbinenko + + * grub-core/fs/minix.c (grub_minix_data): Fix ino type. + (grub_minix_read_file): Likewise. + (grub_minix_read_inode): Likewise. + (grub_minix_find_file): Likewise. + (grub_minix_dir): Likewise. + +2012-04-13 Vladimir Serbinenko + + * util/grub-setup.c (setup): Fix partition handling and blocklist + check. + +2012-04-13 Vladimir Serbinenko + + * grub-core/lib/relocator.c (grub_relocator_alloc_chunk_align): Remove + redundant buggy overlap check. + +2012-04-11 Vladimir Serbinenko + + * tests/util/grub-shell.in: Set pkgdatadir when calling grub-mkrescue + and grub-mknetdir. + +2012-04-11 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_cmd_linux): Avoid accessing + kh.loadflags on pre-2.00 kernels. + +2012-04-11 Vladimir Serbinenko + + Terminate UNDI and PXE before launching the payload to avoid problems + with DMA. + + * grub-core/commands/boot.c (grub_loader_noreturn): Rename to ... + (grub_loader_flags): ... this. All users updated. + (grub_loader_boot): Check for GRUB_LOADER_FLAG_NORETURN. + * grub-core/loader/i386/pc/pxechainloader.c (grub_cmd_pxechain): Mark + loader as GRUB_LOADER_FLAG_PXE_NOT_UNLOAD. + * grub-core/net/drivers/i386/pc/pxe.c (grub_pxe_shutdown): New + function. + (grub_pxe_restore): Likewise. + (fini_hnd): New var. + (GRUB_MOD_INIT): Register shutdown hook. + (GRUB_MOD_FINI): Shutdown and unregister shutdown hook. + * include/grub/loader.h (GRUB_LOADER_FLAG_NORETURN): New const. + (GRUB_LOADER_FLAG_PXE_NOT_UNLOAD): Likewise. + (grub_loader_set): Rename second argument to flags. + +2012-04-07 Vladimir Serbinenko + + * grub-core/normal/charset.c (grub_ucs4_to_utf8): Return number of + written bytes. + (grub_get_num_of_utf8_bytes): New function. + (grub_ucs4_to_utf8_alloc): Use grub_get_num_of_utf8_bytes. + * grub-core/normal/menu_entry.c (run): Convert entry to UTF-8 before + executing it. + * include/grub/charset.h (grub_get_num_of_utf8_bytes): New proto. + (grub_ucs4_to_utf8): Change return type. + +2012-04-07 Vladimir Serbinenko + + * grub-core/commands/usbtest.c (usb_print_str): Silence spurious + warning. + * grub-core/fs/bfs.c (hop_level): Likewise. + * grub-core/net/bootp.c (grub_cmd_bootp): Likewise. + +2012-04-07 Vladimir Serbinenko + + * grub-core/lib/adler32.c: Recode due to license unclearness. + +2012-04-07 Vladimir Serbinenko + + * grub-core/io/lzopio.c (read_block_header): Fix incorrect byte swapping + (test_header): Likewise. + +2012-04-07 Vladimir Serbinenko + + Fix --help formatting. + + * util/grub-mkconfig_lib.in (print_option_help): New function. + (grub_fmt): Likewise. + * util/grub-install.in: Use print_option_help and grub_fmt. + * util/grub-kbdcomp.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2012-04-07 Vladimir Serbinenko + + * linguas.sh: Remove autogenerated *.po. + +2012-04-04 Vladimir Serbinenko + + * po/README: Move language fetcing to ... + * linguas.sh: ... here. + * po/README: Point to linguas.sh. + +2012-04-04 Vladimir Serbinenko + + * po/README: Exclude ko.po due to disclaimer problems. + +2012-04-04 Vladimir Serbinenko + + * grub-core/gettext/gettext.c (grub_gettext_pread): Fix the case when + len = 0. + (grub_gettext_translate_real): Handle 0th string. + (grub_gettext_translate): Ensure that "" isn't translated. + +2012-04-04 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_memberlist): Add + TRANSLATORS comment. + (grub_diskfilter_print_partmap): Propagate changing of error into + warning. + +2012-04-04 Vladimir Serbinenko + + * include/grub/diskfilter.h (grub_diskfilter_vg): Increase extent_size + to uint64_t to prevent overflow. + (grub_diskfilter_lv): Increase start_extent and extent_count + to uint64_t to prevent overflow. + +2012-04-01 Vladimir Serbinenko + + * configure.ac: Increase version. + +2012-04-01 Vladimir Serbinenko + + Introduce en@cyrillic en@hebrew en@arabic and en@greek. + + * po/Rules-translit: New file. + * po/arabic.sed: Likewise. + * po/cyrillic.sed: Likewise. + * po/greek.sed: Likewise. + * po/hebrew.sed: Likewise. + * po/README: Add en@cyrillic en@hebrew en@arabic and en@greek. + * po/Makefile.in.in: Add extra_dist4. + +2012-04-01 Vladimir Serbinenko + + Handle big-endian minixfs (fixes minixfs tests on bigendian). + + * grub-core/fs/minix.c: Replace le with minix. Add necessary defines, + modify names. Introduce MODE_BIGENDIAN. + * grub-core/fs/minix_be.c: New file. + * grub-core/fs/minix2_be.c: Likewise + * grub-core/fs/minix3_be.c: Likewise. + * Makefile.util.def (libgrubmods): Add minix_be, minix2_be and + minix3_be. + * grub-core/Makefile.core.def (minix_be): New module. + (minix2_be): Likewise. + (minix3_be): Likewise. + +2012-04-01 Felix + + * grub-core/loader/efi/appleloader.c (devpath_7): New var. + (devs): Add MBP 2011. + +2012-04-01 Vladimir Serbinenko + + * grub-core/font/font.c (blit_comb): Handle dagesh somewhat. + +2012-04-01 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (print_completion): New field + prompt_len. + (grub_cmdline_get): Handle width properly. + +2012-04-01 Vladimir Serbinenko + + * grub-core/commands/lsacpi.c (options): Add missing terminator. + +2012-03-31 Vladimir Serbinenko + + * include/grub/datetime.h (grub_datetime2unixtime): Fix handling of days + after 29th of February. + +2012-03-31 Vladimir Serbinenko + + Fix exfat endianness handling. + + * grub-core/fs/fat.c (grub_fat_data): Make fat_sector 32-bit. + (grub_fat_mount) [MODE_EXFAT]: Fix bpb.num_reserved_sectors byte-swap. + (grub_fat_iterate_dir) [MODE_EXFAT]: Fix attr byte-swap. + Byte-swap utf16 when necessary. + (grub_fat_label) [MODE_EXFAT]: Byte-swap utf16 when necessary. + +2012-03-31 Anton Blanchard +2012-03-31 Vladimir Serbinenko + + Fix btrfs endianness handling. + + * grub-core/fs/btrfs.c (key_cmp): Use grub_le_to_cpu for clarity. + (lower_bound): Make root uint64_t. Use root in le. + (grub_btrfs_read_logical): Fix template key init. Fix address byteswap. + (find_path): Fix template key init. + (grub_btrfs_dir): Fix mtime byteswap. + * include/grub/types.h (grub_cpu_to_le64_compile_time): New macro. + +2012-03-31 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_read_logical): New argument + recursion_depth. Break infinite resursions. All users updated. + +2012-03-31 Vladimir Serbinenko + + * util/getroot.c (convert_system_partition_to_system_disk): Fix use + after free. + Reported by: Peter Jones. + +2012-03-31 Anton Blanchard + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Do not byteswap + 8 bit values. + +2012-03-28 Vladimir Serbinenko + + * util/grub-install.in: Fix nvram call for PreP. + +2012-03-28 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_memberlist): Degrade + the error when some elements are missing into a warning. + +2012-03-28 Vladimir Serbinenko + + * grub-core/normal/charset.c (bidi_line_wrap): Fix out-of-range swap. + +2012-03-28 Colin Watson + + * docs/grub.texi (Invoking grub-probe): New section. + Reported by: Filipus Klutiero. Fixes Debian bug #666031. + +2012-03-27 Vladimir Serbinenko + + Fix tab and wide character handling in editor and menu. + + * grub-core/normal/charset.c (grub_unicode_aglomerate_comb): Don't + agglomerate control characters with combining marks. + (bidi_line_wrap): Allow break on tab. + (grub_unicode_get_comb_start): New function. + * grub-core/normal/menu_entry.c: Restructure to handle wide characters + and tab correctly. + * grub-core/normal/menu_text.c (print_entry): Replace \n, \r, \b and \e + with a space. + * grub-core/normal/term.c (print_ucs4_terminal): New argument + fixed_tab_size. All users updated. + * include/grub/term.h (GRUB_TERM_TAB_WIDTH): New const. + (grub_term_getcharwidth): Handle \t. + * include/grub/unicode.h (grub_unicode_glyph_dup): Fix allocation + and copy. + +2012-03-26 Vladimir Serbinenko + + Handle big-endian mdraid. + + * Makefile.util.def (libgrubkern): Add mdraid_linux_be.c. + * grub-core/Makefile.core.def (mdraid09_be): New module. + * grub-core/disk/mdraid_linux.c: Use grub_md_to_cpu* and grub_cpu_to_md* + rather than grub_le_to_cpu* and grub_cpu_to_le*. + * grub-core/disk/mdraid_linux_be.c: New file. + +2012-03-26 Vladimir Serbinenko + + * grub-core/gettext/gettext.c (GRUB_MOD_INIT): Handle errors. + +2012-03-19 Vladimir Serbinenko + + * util/getroot.c (grub_make_system_path_relative_to_its_root): Fix + missing quotes which caused confusion among translators. + +2012-03-19 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in: Fix typo. + +2012-03-19 Vladimir Serbinenko + + * grub-core/script/argv.c (grub_script_argv_split_append): Skip leading + spaces. + * tests/grub_script_leading_whitespace.in: New file. + * Makefile.util.def (grub_script_leading_whitespace): New test. + +2012-03-19 Vladimir Serbinenko + + * grub-core/kern/dl.c (grub_dl_add): Make global in order for gdb_grub + to work. + +2012-03-19 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_label): Use first label if second one + starts with control character. + +2012-03-19 Vladimir Serbinenko + + * grub-core/gdb/cstub.c (grub_gdb_inbuf): Increase the size to avoid + overflow. + (grub_gdb_outbuf): Likewise. + +2012-03-19 Vladimir Serbinenko + + * grub-core/commands/menuentry.c (grub_normal_add_menu_entry): Add + zero terminator. Fixes a crash. + +2012-03-11 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (allocate_pages): Don't allocate + beyond 4 GiB. + (grub_cmd_linux): Use GRUB_LINUX_BZIMAGE_ADDR for non-relocatable + images independently of preffered adderss field. + +2012-03-11 Vladimir Serbinenko + + * grub-core/commands/i386/pc/play.c: Improve TRANSLATORS comments. + * grub-core/commands/regexp.c: Likewise. + * grub-core/loader/i386/linux.c: Likewise. + * grub-core/partmap/msdos.c: Likewise. + * grub-core/script/execute.c: Likewise. + * grub-core/term/gfxterm.c: Likewise. + +2012-03-11 Vladimir Serbinenko + + Add variable parsing in $"..." and fix several mismatches with bash. + + * Makefile.util.def (grub_script_gettext): New test. + * grub-core/script/execute.c (parse_string): New function. + (gettext_append): Likewise. + (grub_script_arglist_to_argv): Use gettext_append. + * grub-core/script/yylex.l: Fix slash and newline handling in $"...". + * tests/grub_script_gettext.in: New file. + +2012-03-11 Vladimir Serbinenko + + Fix handling of leading spaces in scripts. + + * grub-core/normal/cmdline.c (grub_cmdline_get): Don't strip leading + spaces. + * grub-core/normal/main.c (grub_file_getline): Remove all preprocessing + other than skipping \r. All users updated. + * tests/grub_script_echo1.in: Add space-related tests. + * util/grub-menulst2cfg.c (main): Remove useless space skipping. + +2012-03-11 Vladimir Serbinenko + + * grub-core/commands/cat.c (grub_cmd_cat): Fix termination key check. + +2012-03-10 Vladimir Serbinenko + + * configure.ac: Bump up the version to beta2. + +2012-03-10 Vladimir Serbinenko + + Fix gettext reload bugs (e.g. inability to disable gettext + once enabled). + + * grub-core/gettext/gettext.c: Encapsulate all static variables in + main_context and secondary_context. All functions updated. + (grub_gettext_translate): Rename to ... + (grub_gettext_translate_real): ... this. Return NULL on failed + translate. + (grub_gettext_translate): Handle secondary context. + (grub_gettext_delete_list): Close file and zero-out the context. + (grub_mofile_open): Don't call grub_gettext_delete_list. + Don't close file. + (grub_gettext_init_ext): Call grub_gettext_init_ext. Skip loading + if locale="" to avoid pointless error message. + (grub_gettext_env_write_lang): Update lang even if load fails. + Handle secondary context. + (grub_gettext_reread_prefix): New function. + (read_main): Likewise. + (read_secondary): Likewise. + (GRUB_MOD_INIT): Handle secondary context. Hook and export variables. + (GRUB_MOD_FINI): Handle secondary context. Don't close file. + * grub-core/normal/main.c (read_lists): Call grub_gettext_reread_prefix. + * include/grub/normal.h (grub_gettext_reread_prefix): New proto. + +2012-03-10 Vladimir Serbinenko + + * configure.ac: Decrease warning level to avoid spurious warnings and + to be able to compile with GCC 4.2. + * Makefile.util.def: Remove -Wno-error=logical-op. + +2012-03-10 William Bittner + + * util/import_unicode.py: Add missing brackets around string for + python 3 support. + +2012-03-10 Vladimir Serbinenko + + Fix efi chainloader on network root. + + * grub-core/loader/efi/chainloader.c (grub_cmd_chainloader): Handle + network devices. + * grub-core/net/drivers/efi/efinet.c (grub_efinet_get_device_handle): + New function. + +2012-03-10 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_progress_bar.c (grub_gui_progress_bar): Remove + unused show_text member. + * docs/grub.texi: Document "text" property. + +2012-03-10 Vladimir Serbinenko + + * grub-core/loader/efi/chainloader.c (grub_cmd_chainloader): Fix format + in dprintf. + +2012-03-10 Vladimir Serbinenko + + Fix IMSM handling on Fedora. + + * util/getroot.c (grub_util_is_imsm): New function. + (grub_util_get_dev_abstraction): Treat IMSM as simple device, not RAID. + +2012-03-10 Vladimir Serbinenko + + * Makefile.am: Strip gold section. + * conf/Makefile.common: Likewise. + * gentpl.py: Likewise. + * grub-core/Makefile.core.def: Likewise. + * grub-core/genmod.sh.in: Likewise. + +2012-03-10 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Use stat if grub-probe on root fails. + * util/grub.d/20_linux_xen.in: Likewise. + Based on Debian patch. + +2012-03-10 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Fix syntax error resulting in + Richard Laager's patch. + * util/grub.d/20_linux_xen.in: Propagate Richard Laager's patch. + +2012-03-10 Vladimir Serbinenko + + * tests/partmap_test.in: Replace qemu-img usage with dd to decrease + dependencies. + +2012-03-10 Richard Laager + + * util/grub.d/10_linux.in: Fix ZFS root passing. + +2012-03-10 Vladimir Serbinenko + + * grub-core/commands/videoinfo.c: Add TRANSLATORS comments. + * grub-core/commands/xnu_uuid.c: Likewise. + * grub-core/loader/efi/appleloader.c: Likewise. + * grub-core/script/execute.c: Likewise. + * grub-core/script/main.c: Likewise. + * util/grub-mkfont.c: Likewise. + +2012-03-10 Vladimir Serbinenko + + * util/grub-mkfont.c (options): Use more appropriate "select" that + "set" for face index. + +2012-03-10 Vladimir Serbinenko + + * util/grub-editenv.c (options): Gettextize command summaries. + +2012-03-10 Vladimir Serbinenko + + * grub-core/loader/efi/chainloader.c (grub_cmd_chainloader): Use + "out of memory" error messagge. + +2012-03-10 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_memberlist): Add scanning + of diskfilter for diskfilter on diskfilter support. + +2012-03-10 Vladimir Serbinenko + + * util/getroot.c (exec_pipe): Ensure that the child is not localised. + +2012-03-10 Vladimir Serbinenko + + * util/grub-install.in: Check for themes/starfield/theme.txt and not + themes/starfield. + +2012-03-10 Vladimir Serbinenko + + * grub-core/gnulib/regcomp.c (regerror): Fix out-of-range array lookup. + +2012-03-10 Vladimir Serbinenko + + * grub-core/gdb/i386/idt.c (grub_gdb_breakpoint): Remove old debug code. + +2012-03-10 Vladimir Serbinenko + + * grub-core/commands/hashsum.c (grub_cmd_hashsum): Remove dot at the end + of error message. + +2012-03-09 Vladimir Serbinenko + + * util/grub-install.in: Fix install non-PreP IEEE1275 install. + +2012-03-09 Vladimir Serbinenko + + * grub-core/commands/i386/pc/sendkey.c (GRUB_MOD_INIT): Fix confusing + message. + * util/grub-install.in: Fix and gettextize error message. + +2012-03-08 Vladimir Serbinenko + + * util/grub-fstest.c (options): Replace N with NUM and S with STRING. + Gettextize. + * util/grub-mount.c (options): Likewise. + +2012-03-08 Vladimir Serbinenko + + * grub-core/commands/probe.c (options): Replace VAR with VARNAME and + gettextize. + * grub-core/commands/search_wrap.c (options): Likewise. + +2012-03-08 Vladimir Serbinenko + + * grub-core/normal/charset.c (bidi_line_wrap): Fix a spurious warning. + +2012-03-08 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S (multiboot_trampoline): Fix + size calculation. + * grub-core/kern/i386/realmode.S (realidt): Assume default BIOS IDT if + none is known. + +2012-03-08 Vladimir Serbinenko + + * grub-core/net/net.c (grub_net_addr_to_str): Don't translate + "temporary" since it's used in identifier and is limited in space. + +2012-03-08 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. Include *.h since they contain + translatable strings as well. + +2012-03-08 Vladimir Serbinenko + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Add missing + byte-swap on big-endian. + Reported by: Lennart Sorensen + +2012-03-07 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (prot_init_space): New variable. + (allocate_pages): Improve dprintf. + (grub_cmd_linux): Fill prot_init_space. Fix improper usage of + code32_start. Fill code32_start and kernel_alignment in params. + (grub_cmd_initrd): Use prot_init_space. + +2012-03-06 Vladimir Serbinenko + + * util/grub-mkstandalone.in: Propagate grub-mkimage.c change. + +2012-03-06 Vladimir Serbinenko + + * util/grub-install.in: Add missing dot at the end of sentence. + +2012-03-06 Vladimir Serbinenko + + * grub-core/commands/videoinfo.c: Add TRANSLATORS comments. + * grub-core/commands/videotest.c: Likewise. + * grub-core/loader/i386/linux.c: Likewise. + +2012-03-06 Vladimir Serbinenko + + * grub-core/commands/acpi.c (options): Fix a dot in the middle of the + sentence. + Reported by: Milo Casagrande. + +2012-03-06 Vladimir Serbinenko + + * grub-core/commands/acpi.c: Add TRANSLATORS comments. + * grub-core/commands/gptsync.c: Likewise. + * grub-core/commands/hashsum.c: Likewise. + * grub-core/commands/i386/pc/sendkey.c: Likewise. + * grub-core/commands/legacycfg.c: Likewise. + * grub-core/io/gzio.c: Likewise. + * grub-core/net/net.c: Likewise. + * grub-core/term/gfxterm.c: Likewise. + * grub-core/term/terminfo.c: Likewise. + * grub-core/tests/test_blockarg.c: Likewise. + * grub-core/video/video.c: Likewise. + * util/grub-install.in: Likewise. + * util/grub-mkfont.c: Likewise. + +2012-03-06 Vladimir Serbinenko + + * util/grub-mkimage.c (help_filter): Add missing capitalisation. + +2012-03-06 Vladimir Serbinenko + + * grub-core/commands/search_wrap.c (options): Fix a typo. + Reported by: David Prévot. + +2012-03-06 Vladimir Serbinenko + + * util/grub-kbdcomp.in: Change "layout" to "keyboard layout" in + description. + +2012-03-06 Vladimir Serbinenko + + * util/grub-script-check.c (main): Fix a syntax error message which was + unclear. + +2012-03-06 Vladimir Serbinenko + + * util/grub-mkrescue.in (usage): Fix ROM capitalisation. + +2012-03-06 Vladimir Serbinenko + + * grub-core/commands/search_wrap.c (options): Fix wrong copy-paste in + messages. + +2012-03-06 Vladimir Serbinenko + + * util/grub-fstest.c (options): Remove OPTION_ARG_OPTIONAL from options + without argument. + * util/grub-mount.c (options): Likewise. + +2012-03-05 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Unify diskboot.img size message. + +2012-03-05 Vladimir Serbinenko + + * grub-core/net/http.c: Add TRANSLATORS comments. + * grub-core/normal/cmdline.c: Likewise. + * grub-core/normal/misc.c: Likewise. + * grub-core/partmap/msdos.c: Likewise. + * grub-core/parttool/msdospart.c: Likewise. + * grub-core/script/execute.c: Likewise. + * grub-core/script/main.c: Likewise. + * grub-core/term/terminfo.c: Likewise. + * grub-core/video/bitmap.c: Likewise. + * util/grub-install.in: Likewise. + * util/grub-mkimage.c: Likewise. + * util/grub-mklayout.c: Likewise. + * util/grub-setup.c: Likewise. + +2012-03-05 Vladimir Serbinenko + + * util/grub-mount.c (fuse_init): Unify cryptomount and loopback messages + with similar messages in grub-fstest. + +2012-03-05 Vladimir Serbinenko + + * util/grub-install.in: Unify "option requires an argument" message + with similar messages in other files. + * util/grub-mkconfig.in: Likewise. + +2012-03-05 Vladimir Serbinenko + + * util/grub-set-default.in: Replace printf with gettext_printf (the + string in in question is already translated from grub-reboot) + +2012-03-05 Vladimir Serbinenko + + * configure.ac: Bump up the version to beta1. + +2012-03-04 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (allocate_pages): Fix handling of the + case when min_align = 0. + +2012-03-04 Vladimir Serbinenko + + * grub-core/normal/charset.c (bidi_line_wrap): Fix a spurious warning + and fix a case when line_start overflows. + +2012-03-04 Vladimir Serbinenko + + * util/grub-reboot.in (usage): Mention id posibility. + * util/grub-set-default.in (usage): Likewise. + +2012-03-04 Vladimir Serbinenko + + * include/grub/misc.h (ALIGN_UP_OVERHEAD): New define. + * grub-core/loader/i386/linux.c (grub_cmd_initrd): Align initrds at 4. + * grub-core/loader/i386/pc/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/ia64/efi/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/mips/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_initrd): Likewise. + +2012-03-04 Vladimir Serbinenko + + * grub-core/commands/menuentry.c (options): Remove + GRUB_ARG_OPTION_REPEATABLE. + Reported by: Andreas Vogel + +2012-03-04 Andreas Vogel + + * grub-core/normal/main.c (grub_normal_free_menu): Fix memory leak. + +2012-03-04 Hideki EIRAKU + + * grub-core/normal/menu_entry.c (kill_line): Fix a crash and off-by-one + error. + +2012-03-04 Vladimir Serbinenko + + Use sort -V by the idea of Georgi Georgiev. + + * util/grub-mkconfig_lib.in (version_sort): New function. + (version_test_numeric): Use version_sort. + +2012-03-04 Vladimir Serbinenko + + Use submenus in grub-mkconfig. + + * util/grub-mkconfig.in: Define GRUB_ACTUAL_DEFAULT. + * util/grub-mkconfig_lib.in (grub_quote): New function. + (gettext_printf): Use gettext and not gettext_quoted to fix several + messages. + * util/grub.d/10_hurd.in: Use submenus. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + * util/grub.d/10_illumos.in: Add missing quoting. + * util/grub.d/10_windows.in: Likewise. + +2012-03-04 Vladimir Serbinenko + + Fix menu title instability bug. + + * grub-core/commands/menuentry.c (options): New option --id. + (grub_normal_add_menu_entry): New argument id. All users updated. + (grub_cmd_menuentry): Handle --id. + (grub_menu_init): Accept unknown arguments. + * grub-core/normal/main.c (features): Add feature_menuentry_id and + feature_menuentry_options. + * grub-core/normal/menu.c (grub_menu_execute_entry): Use id for + saved_entry. + (get_entry_number): Match with id as well. + * include/grub/menu.h (grub_menu_entry): New member id. + * util/grub-mkconfig_lib.in (grub_get_device_id): New function. + * util/grub.d/00_header.in: Define menuentry_id_option. + * util/grub.d/10_hurd.in: Define id. + * util/grub.d/10_illumos.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + +2012-03-04 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_return): Replace ambiguous + "scope" with "body". + +2012-03-03 Vladimir Serbinenko + + * include/grub/i386/linux.h (linux_kernel_header): Fix init_size type. + * grub-core/loader/i386/linux.c (grub_cmd_linux): Differentiate between + prot_size and prot_file_size. + +2012-03-03 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (is_lv_readable): New argument "easily". + All users updated. If easily=1 require raid-5/-6 to be full. + (is_node_readable): Likewise. + (scan_devices): Scan incomplete but readable LVs at the end. + (grub_diskfilter_memberlist): Pull missing devices. + (insert_array): Skip scanning until device is complete or scan is + done otherwise. + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Fix wrong + check. + * include/grub/diskfilter.h (grub_diskfilter_lv): New member scanned. + * util/raid.c (grub_util_raid_getmembers): Handle "removed" disks. + +2012-03-03 Matthew Garrett +2012-03-03 Vladimir Serbinenko + + Avoid EFI boot services when loading Linux. + + * grub-core/lib/i386/relocator.c (grub_relocator32_boot): New argument + avoid_efi_bootservices. All users updated. + * grub-core/lib/relocator.c (grub_relocator_alloc_chunk_align): New + argument avoid_efi_bootservices. All users updated. + Use grub_efi_mmap_iterate on EFI, grub_mmap_iterate if available. + * grub-core/loader/i386/linux.c (allocate_pages): New arguments + align, min_align, relocatable, prefered_address. All users updated. + Allocate avoiding boot services if kernel is relocatable. + (grub_cmd_linux): Check if kernel is relocatable. + * grub-core/mmap/efi/mmap.c (grub_machine_mmap_iterate): Move most to .. + (grub_efi_mmap_iterate): ... here. New argument avoid_efi_boot_services. + Skip GRUB_EFI_BOOT_SERVICES_DATA and GRUB_EFI_BOOT_SERVICES_CODE if + avoid_efi_boot_services. + (grub_machine_mmap_iterate): Wrap grub_efi_mmap_iterate. + * include/grub/i386/linux.h (linux_kernel_header): Update to 2.10. + (linux_kernel_params): Likewise. + +2012-03-03 Matthew Garrett +2012-03-03 Vladimir Serbinenko + + Use EDID on EFI. + + * grub-core/kern/efi/efi.c (grub_efi_get_variable): New argument + datasize_out. + * grub-core/video/efi_gop.c (check_protocol): Check that GOP has usable + modes. Set gop_handle. + (grub_video_gop_get_edid): New function. + (grub_gop_get_preferred_mode): Likewise. + (grub_video_gop_setup): Use grub_gop_get_preferred_mode. + (grub_video_efi_gop_adapter): Set .get_edid. + * include/grub/efi/edid.h: New file. + * include/grub/efi/efi.h (grub_efi_get_variable): Update proto. + +2012-03-03 Vladimir Serbinenko + + * util/grub-install.in: Load efivars unconditionally. + +2012-03-03 Vladimir Serbinenko + + * po/Rules-piglatin: Change suffix from .po-update-en to + .po-update-en-piglatin. + +2012-03-03 Vladimir Serbinenko + + Add a pig farm. + + * po/piglatin.sed: New file. + * po/en@piglatin.header: Likewise. + * po/Rules-piglatin: Likewise. + * po/README: Add en@piglatin to autogenerated languages. + +2012-03-03 Vladimir Serbinenko + + * grub-core/commands/date.c (GRUB_MOD_INIT): Remove non-uniform + "Command for ...". + * grub-core/commands/hdparm.c (options): Use "Display" rather than + "Check" since we don't check anything. + * grub-core/commands/i386/cpuid.c (options): Clarify that long mode + is 64-bit one. + * grub-core/commands/search_wrap.c (options): Clarify the conditions. + * grub-core/disk/geli.c (grub_md_sha256_real): Fix typo. + (grub_md_sha512_real): Likewise. + +2012-03-03 Vladimir Serbinenko + + * grub-core/commands/gptsync.c: Fix typographic quoting. + * grub-core/commands/ieee1275/suspend.c: Likewise. + * grub-core/commands/parttool.c: Likewise. + * grub-core/commands/search_wrap.c: Likewise. + * grub-core/commands/videoinfo.c: Likewise. + * grub-core/gfxmenu/gui_label.c: Likewise. + * grub-core/hello/hello.c: Likewise. + * grub-core/kern/emu/main.c: Likewise. + * grub-core/net/net.c: Likewise. + * grub-core/normal/menu.c: Likewise. + * grub-core/normal/menu_text.c: Likewise. + * grub-core/normal/misc.c: Likewise. + * util/grub-editenv.c: Likewise. + * util/grub-install.in: Likewise. + * util/grub-kbdcomp.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/grub-setup.c: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2012-03-02 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c: Add TRANSLATORS comments. + * grub-core/commands/keystatus.c: Likewise. + * grub-core/commands/loadenv.c: Likewise. + * grub-core/commands/probe.c: Likewise. + * grub-core/commands/regexp.c: Likewise. + * grub-core/commands/true.c: Likewise. + * grub-core/commands/videoinfo.c: Likewise. + * grub-core/disk/cryptodisk.c: Likewise. + * grub-core/disk/ldm.c: Likewise. + * grub-core/disk/loopback.c: Likewise. + * grub-core/disk/luks.c: Likewise. + * grub-core/fs/zfs/zfsinfo.c: Likewise. + * grub-core/kern/disk.c: Likewise. + * grub-core/kern/emu/hostdisk.c: Likewise. + +2012-03-02 Vladimir Serbinenko + + * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Add TRANSLATORS comment. + * util/grub-install.in: Add missing quote in the comment. + +2012-03-02 Vladimir Serbinenko + + * grub-core/commands/i386/pc/drivemap.c: Add TRANSLATORS comments. + * grub-core/commands/lsmmap.c: Likewise. + * grub-core/commands/minicmd.c: Likewise. + * grub-core/commands/mips/loongson/lsspd.c: Likewise. + * grub-core/commands/regexp.c: Likewise. + * grub-core/gdb/gdb.c: Likewise. + * grub-core/term/gfxterm.c: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkfont.c: Likewise. + * util/grub-mklayout.c: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + +2012-03-02 Vladimir Serbinenko + + * grub-core/commands/videoinfo.c (hook): Replace "Direct" + with "Direct color" and "Packed" with "Packed pixel". + (grub_cmd_videoinfo): Simplify legend. + +2012-03-02 Vladimir Serbinenko + + * util/getroot.c (grub_make_system_path_relative_to_its_root): Fix + absolutely unclear error message. + +2012-03-02 Vladimir Serbinenko + + * util/grub-mkstandalone.in: Remove confusing leftover print. + +2012-03-02 Vladimir Serbinenko + + * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Add TRANSLATORS + comments. + * grub-core/gdb/gdb.c (grub_cmd_gdbstub): Likewise. + (GRUB_MOD_INIT): Likewise. + * grub-core/loader/i386/linux.c (grub_cmd_linux): Clarify that it's + VGA mode. + * grub-core/net/net.c (grub_net_route_address): Add TRANSLATORS + comments. + * util/grub-install.in (usage): Likewise. + Spell ID in whole letters. + Add missing ending dot. + Quote variables. + * util/grub-reboot.in: Fix capitalisation. + * util/grub-set-default.in: Likewise. + +2012-03-02 Vladimir Serbinenko + + * util/getroot.c (strip_extra_slashes) [CYGWIN]: #ifdef-out. + (exec_pipe) [CYGWIN || MINGW32]: Likewise. + (find_root_devices_from_poolname) [CYGWIN || MINGW32]: Likewise. + (find_root_devices_from_libzfs) [CYGWIN || MINGW32]: Likewise. + Disable -Werror for -Wdeprecated-declarations. + (grub_guess_root_devices) [CYGWIN || MINGW32]: #ifdef-out. + (get_dm_uuid) [!HAVE_DEVICE_MAPPER]: Likewise. + (grub_util_get_dm_abstraction) [! __linux__]: #ifdef-out. + (grub_util_get_grub_dev): Make luks handling dependent on + HAVE_DEVICE_MAPPER and not __linux__. + (get_win32_path): Fix format security. + (grub_find_zpool_from_dir) [CYGWIN || MINGW32]: #ifdef-out. + (grub_make_system_path_relative_to_its_root) [CYGWIN || MINGW32]: + Don't try grub_find_zpool_from_dir. + (grub_make_system_path_relative_to_its_root) [!__linux__]: + #ifdef-out paresdir. + +2012-03-02 Vladimir Serbinenko + + * util/grub-pe2elf.c (usage): Add missing noreturn. + (write_section_data): Rename name to shname to avoid shadowing. + (write_symbol_table): Rename name to symname to avoid shadowing. + Fix write_reloc_section call. + +2012-03-02 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S: Move decompressor_end to .bss + to ensure that it's after the last byte of .text. + +2012-03-02 Vladimir Serbinenko + + * util/ieee1275/ofpath.c (my_isdigit): New function. + (trailing_digits): Use my_isdigit. + (strip_trailing_digits): Likewise. + +2012-03-02 Vladimir Serbinenko + + * util/resolve.c (read_dep_list): Use grub_isspace instead of isspace. + * grub-core/kern/emu/hostdisk.c (read_device_map): Likewise. + +2012-03-02 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S: Define __start. + +2012-03-02 Vladimir Serbinenko + + * gentpl.py (kernel): Remove the use of TARGET_OBJ2ELF after strip since + strip already transforms he format. + +2012-03-02 Vladimir Serbinenko + + * conf/i386-pc-cygwin-img-ld.sc: Define also _edata and __edata. + +2012-02-29 Vladimir Serbinenko + + * util/grub-install.in: Add missing gettext init. + * util/grub-kbdcomp.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2012-02-29 Vladimir Serbinenko + + * po/Rules-swiss: Fix header comment. + +2012-02-29 Andreas Vogel + + * grub-core/kern/misc.c (grub_xvasprintf): Fix an exit path which + resulted in leak of arguments. + +2012-02-29 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S: Use separate + reed_solomon_size const definition instead of computing it since + Apple assembler doesn't support the later. + +2012-02-29 Vladimir Serbinenko + + * gentpl.py (kernel): Rewrite Apple part. + +2012-02-29 Vladimir Serbinenko + + * include/grub/kernel.h (FOR_MODULES): Check module magic. + +2012-02-29 Vladimir Serbinenko + + * util/grub-mkimagexx.c (locate_sections): Support non-standard + ELF section gap. + (load_image): Likewise. + +2012-02-29 Vladimir Serbinenko + + * configure.ac: Fix a typo in previous commit. + +2012-02-29 Vladimir Serbinenko + + Don't add -Wl,-N on Apple platform. + + * configure.ac (TARGET_LDFLAGS_OLDMAGIC): New subst. + * conf/Makefile.common: Use TARGET_LDFLAGS_OLDMAGIC instead of -Wl,-N + +2012-02-29 Vladimir Serbinenko + + * grub-core/Makefile.core.def (lzma_decompress): Use + TARGET_IMG_BASE_LDOPT rather than hardcoding -Wl,-Ttext. + +2012-02-29 Vladimir Serbinenko + + * grub-core/genmod.sh.in: Rewrite the Apple part. + +2012-02-29 Vladimir Serbinenko + + * grub-core/loader/machoXX.c (grub_macho_load): Fix signed vs unsigned + comparison. + +2012-02-29 Vladimir Serbinenko + + * acinclude.m4 (grub_CHECK_PIC): New test. + * configure.ac: Add -fno-PIC to TARGET_CFLAGS if -fPIC is default. + +2012-02-29 Vladimir Serbinenko + + * include/grub/libgcc.h (__STDC_VERSION__): Define if it's not yet so + to avoid the warning. + +2012-02-29 Vladimir Serbinenko + + * grub-core/boot/i386/pc/diskboot.S (firstlist): Rename to ... + (LOCAL(firstlist)): ... this. Move it before the firstlist and not + after. All users updated. + +2012-02-29 Vladimir Serbinenko + + Use the common size routine in hostfs so we can read disks as well. + + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors): Rename to .. + (grub_util_get_fd_size): ... this. Return size in bytes. + All users updated. + * grub-core/kern/emu/hostfs.c (grub_hostfs_open): Use + grub_util_get_fd_size. + +2012-02-29 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors) [__APPLE__]: + Add blocksize retrieval. + +2012-02-29 Vladimir Serbinenko + + * configure.ac: Restore CFLAGS after efiemu check. + +2012-02-29 Vladimir Serbinenko + + * configure.ac: Move -fnested-functions to CPPFLAGS to workaround + Apple bug. + +2012-02-29 Vladimir Serbinenko + + * grub-core/Makefile.am (MACHO2IMG): Add missing variable. + +2012-02-29 Vladimir Serbinenko + + * grub-core/commands/i386/pc/halt.c (grub_halt): Add noreturn attribute. + (grub_cmd_halt): Likewise. + +2012-02-29 Vladimir Serbinenko + + * grub-core/lib/i386/relocator16.S: Declare LOCAL(relocator16_end) + for local arithmetics. + Break %sp init into 2 instructions. + Add 0 byte at the end. + +2012-02-29 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (read_segment): Initialise err + before loops. + +2012-02-29 Vladimir Serbinenko + + * grub-core/lib/xzembed/xz_dec_stream.c (hash_validate): Use void * + for context. + +2012-02-29 Vladimir Serbinenko + + * grub-core/disk/ldm.c (make_vg): Init part.name. + (grub_ldm_detect): Silence spurious warning. + (grub_util_is_ldm): Likewise. + +2012-02-29 Vladimir Serbinenko + + * grub-core/loader/i386/xnu.c (grub_xnu_boot): Init fsbfreq to + sane value to avoid a spurious warning. + +2012-02-29 Vladimir Serbinenko + + * include/grub/dl.h: Switch from APPLE_CC to __APPLE__. + (GRUB_MOD_LICENSE) [ASM_FILE]: Make into macro. All users updated. + +2012-02-29 Vladimir Serbinenko + + * include/grub/symbol.h (EXT_C) [!ASM_FILE]: Redefine with strings. + * grub-core/lib/i386/backtrace.c (grub_backtrace): Use EXT_C. + +2012-02-29 Vladimir Serbinenko + + * grub-core/gdb/i386/machdep.S: Use VARIABLE and EXT_C instead of + hardcoding the relevant info. + +2012-02-29 Vladimir Serbinenko + + * grub-core/gnulib/argp-fmtstream.c (__argp_get_display_len): Add + missing const qualifiers. + * grub-core/gnulib/argp-fmtstream.h (__argp_get_display_len): Likewise. + +2012-02-29 Vladimir Serbinenko + + * util/getroot.c [__APPLE__]: Add missing includes. + (grub_util_biosdisk_is_floppy): Fix usage of undefined variable. + +2012-02-29 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Silence spurious warning. + +2012-02-29 Vladimir Serbinenko + + * util/ieee1275/ofpath.c: Rename devname to sys_devname everywhere to + avoid conflicts. + +2012-02-29 Vladimir Serbinenko + + * util/ieee1275/grub-ofpathname.c: Add missing config.h include. + +2012-02-29 Vladimir Serbinenko + + * util/grub-setup.c (setup) [!__linux__]: Add missing file declaration + and grub_file_close call. + +2012-02-29 Vladimir Serbinenko + + Add LZSS Mach-O support (needed for new xnu kernelcache). + + * grub-core/Makefile.core.def (xnu): Add file lzss.c + * grub-core/loader/lzss.c: New file. + * grub-core/loader/xnu.c (grub_xnu_load_driver): Close binaryfile + on Mach-O open failure. + * grub-core/loader/macho.c (grub_macho_close): Free uncompressedXX. + Don't free cmdsXX in uncompressedXX is set. + (grub_macho_file): Init new fields. + New argument is_64bit. All users updated. + Handle compressed. Error out if no suitable architecture is found. + Don't close file. + (grub_macho_open): New argument is_64bit. All users updated. + * grub-core/loader/macho32.c: Add defines for new fields. + * grub-core/loader/macho64.c: Likewise. + * grub-core/loader/machoXX.c (grub_macho_contains_macho): Make static. + (grub_macho_parse): Handle compressed. + Defer actual processing if compressed. + (grub_macho_cmds_iterate): Decompress if compressed. New argument + "filename". All users updated. + (grub_macho_size): New argument "filename". All users updated. + (grub_macho_get_entry_point): Likewise. + (grub_macho_load): Handle compressed. + * include/grub/macho.h (grub_macho_lzss_header): New struct. + (GRUB_MACHO_LZSS_OFFSET): New define. + (grub_decompress_lzss): New proto. + * include/grub/machoload.h (grub_macho_file): New fields to handle + compressed. + (grub_macho_contains_macho64): Remove proto. + (grub_macho_contains_macho32): Likewise. + * util/grub.d/30_os-prober.in: Use kernel cache if available. + +2012-02-29 Vladimir Serbinenko + + * grub-core/disk/pata.c (grub_pata_readwrite): Fix ATAPI protocol error. + +2012-02-28 Vladimir Serbinenko + + Fix make dist. + + * Makefile.am (starfield_theme_files): New var. + (starfield_DATA): Use starfield_theme_files. + (EXTRA_DIST): Add starfield_theme_files. Add starfield source files. + Add bootcheck-related files. + * conf/Makefile.extra-dist (EXTRA_DIST): Add several missing files. + * docs/Makefile.am (EXTRA_DIST): Add font_char_metrics.png + and font_char_metrics.txt. + * grub-core/Makefile.core.def (kernel): Update extra_dist. + (setjmp): Add lib/ia64/longjmp.S. + * po/Makefile.in.in (DISTFILES): Add POTFILES-shell.in and grub.d.sed. + * po/POTFILES.in: Regenerate. + * po/Rules-swiss: use DISTFILES.common.extra2 and not + DISTFILES.common.extra1. + * util/devicemap.c: Removed. + * grub-core/lib/i386/relocator_backward.S: Likewise. + * util/import_gcry.py: Remove unused files. Add extra_dist for + ChangeLog. + +2012-02-28 Vladimir Serbinenko + + * grub-core/gettext/gettext.c (grub_mofile_open): Call + grub_gettext_delete_list before changing grub_gettext_max to avoid + running out of array bounds. + +2012-02-28 Vladimir Serbinenko + + * grub-core/term/i386/pc/vga_text.c: Add GRUB_MACHINE_MULTIBOOT to + grub_vga_text_init/grub_vga_text_fini. + +2012-02-28 Vladimir Serbinenko + + * grub-core/loader/i386/xnu.c (grub_xnu_boot): Fix format specification. + +2012-02-27 Vladimir Serbinenko + + * configure.ac: Bump to 2.00~beta0. + +2012-02-27 Vladimir Serbinenko + + * util/getroot.c (grub_find_root_devices_from_btrfs): Add + missing initialisation. + +2012-02-27 Vladimir Serbinenko + + * grub-core/partmap/msdos.c (message_warn): Clarify messages. + +2012-02-27 Vladimir Serbinenko + + Support v2 xnu boot arguments. + + * grub-core/loader/i386/xnu.c (grub_cpu_xnu_fill_devicetree): + New argument fsbfreq_out. + (grub_xnu_set_video): Receive an argument grub_xnu_boot_params_common. + (grub_xnu_boot): Support v2 arguments. Disable PIC so that APIC can + be used. + * grub-core/loader/machoXX.c (grub_macho_load): New argument + darwin_version. + * grub-core/loader/xnu.c (grub_xnu_darwin_version): New variable. + * include/grub/i386/xnu.h (grub_xnu_boot_params_common): New struct. + (grub_xnu_boot_params): Rename to ... + (grub_xnu_boot_params_v1): ...this. Use grub_xnu_boot_params_common. + (grub_xnu_boot_params_v2): New struct. + +2012-02-27 Vladimir Serbinenko + + * grub-core/efiemu/prepare.c (grub_efiemu_crc): Add missing + zeroing of CRC field before computing CRC. + +2012-02-27 Vladimir Serbinenko + + * grub-core/lib/relocator.c (malloc_in_range): Fix memory leak. + Change order of allocations to decrease fragmentation. + +2012-02-27 Vladimir Serbinenko + + * Makefile.util.def (grub-ofpathname): Enable on all platforms. + +2012-02-27 Colin Watson + + Use write-combining MTRR to speed up video with buggy BIOSes. + + * grub-core/video/i386/pc/vbe.c (framebuffer): New member mtrr. + (cpuid): New define. + (rdmsr): Likewise. + (wrmsr): Likewise. + (mtrr_base): Likewise. + (mtrr_mask): Likewise. + (grub_vbe_enable_mtrr_entry): New function. + (grub_vbe_enable_mtrr): Likewise. + (grub_vbe_disable_mtrr): Likewise. + (grub_vbe_bios_set_display_start): Disable mtrr when handing the + control off to BIOS. + (grub_video_vbe_init): Fill mtrr. + (grub_video_vbe_fini): Disable mtrr. + (grub_video_vbe_get_info_and_fini): Likewise. + (grub_video_vbe_setup): Enable mtrr. + +2012-02-27 Colin Watson + + * include/grub/partition.h (grub_partition_map): Change prototype of + embed to take a maximum value for nsectors. + * include/grub/emu/hostdisk.h (grub_util_ldm_embed): Likewise. + * include/grub/fs.h (grub_fs): Likewise. + * grub-core/partmap/msdos.c (embed_signatures): New array. + (pc_partition_map_embed): Check for and avoid sectors matching any + of the signatures in embed_signatures, up to max_nsectors. + * grub-core/partmap/gpt.c (gpt_partition_map_embed): Restrict + returned sector map to max_nsectors. + * grub-core/disk/ldm.c (grub_util_ldm_embed): Likewise. + * grub-core/fs/btrfs.c (grub_btrfs_embed): Likewise. + * grub-core/fs/zfs/zfs.c (grub_zfs_embed): Likewise. + * util/grub-setup.c (setup): Allow for the embedding area being + split into multiple blocklists. Tell dest_partmap->embed the + maximum number of sectors we care about. + +2012-02-27 Vladimir Serbinenko + + * include/grub/fs.h (grub_fs) [GRUB_UTIL]: Add blocklist_install field. + Specify blocklist_install and reserver_first_sector for all fs. + * util/grub-setup.c (setup): Use FIBMAP/FIEMAP on Linux. Check resulting + blocklists. + +2012-02-27 Vladimir Serbinenko + + * util/grub-install.in: Clarify strings. + Fix source dir check. + +2012-02-27 Richard Laager + + * util/getroot.c (grub_find_root_devices_from_mountinfo): Handle + "zfs" and "fuse.zfs" as synonyms. + +2012-02-27 Vladimir Serbinenko + + * configure.ac: Put platform and target_cpu substitutions back since + they are used for directories. + +2012-02-27 Richard Laager +2012-02-27 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Add ZFS-related arguments. + * util/grub.d/20_linux_xen.in: Likewise. + +2012-02-27 Richard Laager + + * util/getroot.c (find_root_devices_from_poolname): Handle vdevs + with full paths. + +2012-02-27 Richard Laager + + * util/getroot.c (grub_find_root_devices_from_mountinfo): Add missing + unescape. + +2012-02-27 Vladimir Serbinenko + + Don't use insecure popen in getroot. + + * util/getroot.c (get_mdadm_uuid): Move pipe logic to ... + (exec_pipe): ... here. + (find_root_devices_from_poolname): Use exec_pipe. + +2012-02-27 Vladimir Serbinenko + + Remove platform and target_cpu replacement. + + * configure.ac: Remove platform and target_cpu substitutions. + * tests/util/grub-shell.in: Use modinfo. + * util/powerpc/ieee1275/grub-mkrescue.in: Specify powerpc-ieee1275 + explicitly. + +2012-02-27 Vladimir Serbinenko + + Autodetect platform in grub-install but allow override. + + * util/grub-install.in: Autodetect platform. Support --target and + --directory. Read platform from modinfo.sh. + +2012-02-27 Vladimir Serbinenko + + Support btrfs multi-volume probe. + + * util/getroot.c (btrfs_ioctl_dev_info_args) [__linux__]: New struct. + (btrfs_ioctl_fs_info_args) [__linux__]: Likewise. + (BTRFS_IOC_DEV_INFO) [__linux__]: New define. + (BTRFS_IOC_FS_INFO) [__linux__]: Likewise. + (grub_find_root_devices_from_btrfs) [__linux__]: New function. + (grub_find_root_devices_from_mountinfo) [__linux__]: Use + grub_find_root_devices_from_btrfs if on btrfs. + +2012-02-27 Vladimir Serbinenko + + Remove any awareness of *.c util files about target. + + * Makefile.util.def (grub-setup): Split to ... + (grub-bios-setup): ... and this. + (grub-sparc64-setup): ... and this. + * configure.ac: Don't add machine_CPPFLAGS into HOST_CPPFLAGS. + * docs/man/grub-setup.h2m: Split into ... + * docs/man/grub-sparc64-setup.h2m: ... this. + * docs/man/grub-bios-setup.h2m: ... and this. + * include/grub/dl.h (grub_dl) [GRUB_UTIL]: Remove struct. + * include/grub/elf.h (Elf_*) [GRUB_UTIL]: Remove types. + (GRUB_TARGET_WORDSIZE) [GRUB_UTIL]: Remove. + (grub_target_addr_t): Remove. + (grub_target_size_t): Remove. + (grub_target_ssize_t): Remove. + * util/grub-install.in: Use new grub-*-setup. + * util/grub-mkimagexx.c (Elf_Word): New define. + (Elf_Half): Likewise. + (Elf_Section): Likewise. + (ELF_ST_TYPE): Likewise. + * util/grub-setup.c: Switch from GRUB_MACHINE_SPARC64 to + GRUB_SETUP_SPARC64 and from GRUB_MACHINE_PCBIOS to GRUB_SETUP_BIOS. + +2012-02-27 Vladimir Serbinenko + + Replace grub_target_addr with more appropriate types. + + * grub-core/commands/efi/fixvideo.c (scan_card): Replace + grub_target_addr with grub_addr. + * grub-core/commands/iorw.c (grub_cmd_read): Replace + grub_target_addr with grub_port. + (grub_cmd_write): Likewise. + * grub-core/commands/memrw.c (grub_cmd_read): Replace + grub_target_addr with grub_addr. + (grub_cmd_write): Likewise. + * grub-core/video/efi_uga.c (find_line_len): Likewise. + +2012-02-27 Vladimir Serbinenko + + * include/grub/efi/api.h (grub_efi_runtime_services): Add missing + const qualifier for vendor_guid. + +2012-02-27 Vladimir Serbinenko + + * grub-core/efiemu/runtime/efiemu.c (efiemu_get_variable): Add missing + const qualifier. + (efiemu_memequal): Likewise. + (find_variable): Likewise. + +2012-02-27 Vladimir Serbinenko + + Fix missing console prototype on qemu-mips. + + * include/grub/mips/qemu_mips/console.h: New file. + +2012-02-27 Matthew Garrett +2012-02-27 Vladimir Serbinenko + + * grub-core/kern/efi/efi.c (grub_efi_get_variable): Add new function. + * include/grub/efi/efi.h: Likewise. + * include/grub/efi/api.h: Add guid for EFI-specified variables. + * include/grub/charset.h (GRUB_MAX_UTF16_PER_UTF8): New definition. + * grub-core/normal/charset.c (grub_utf8_process): Move from here ... + * include/grub/charset.h (grub_utf8_process): ... to here. Inline. + * grub-core/normal/charset.c (grub_utf8_to_utf16): Move from here ... + * include/grub/charset.h (grub_utf8_to_utf16): ... to here. Inline. + +2012-02-27 Matthew Garrett + + * include/grub/efi/pci.h: New file to define EFI PCI protocols. + +2012-02-27 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_iterate): Fix off-by-one + error. + +2012-02-27 Vladimir Serbinenko + + * configure.ac: Remove inappropriate use of program_transform_name + on grubdir and bootdir but allow explicit specification of those + variables. + +2012-02-27 Vladimir Serbinenko + + * util/grub-mknetdir.in (grub_prefix): Removed. + (subdir): Use @bootdirname@ and @grubdirname@. + +2012-02-27 Vladimir Serbinenko + + Replace PACKAGE_TARNAME with PACKAGE in pkglibdir and pkgdatadir. + +2012-02-27 Vladimir Serbinenko + + * po/POTFILES.in: Regenerated. + +2012-02-27 Vladimir Serbinenko + + Remove improper use of program_transform_name on pkglibrootdir. + + * configure.ac (pkglibrootdir): Removed. + (grub-mkimage): Replace PKGLIBROOTDIR with PKGLIBDIR. + * util/grub-mkimage.c: Likewise. + +2012-02-27 Vladimir Serbinenko + + * grub-core/normal/menu_text.c (grub_print_message_indented_real): Fix a + warning. + +2012-02-27 Vladimir Serbinenko + + * util/grub-install.in: Use file identifier if no UUID is available + or user explicitly prompted for it. + +2012-02-27 Navdeep Parhar + + * grub-core/loader/i386/bsd.c (freebsd_zfsguid): New variable. + (freebsd_get_zfs): New function. + (grub_freebsd_boot): Pass zfs UUID. + (grub_cmd_freebsd): Set zfs UUID. + +2012-02-27 Vladimir Serbinenko + + * conf/Makefile.common (platformdir): Base on pkglibdir and not + pkglibrootdir. + +2012-02-27 Mike Gilbert + + Add configure flag to control libzfs integration. + + * configure.ac: Add AC_ARG_ENABLE(libzfs ...) and associated logic. + +2012-02-26 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (insert_array): Choose the smallest + device. + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Reject too + small devices. + +2012-02-26 Vladimir Serbinenko + + Remove grub_{modname}_init and grub_{modname}_fini. They should never + be used directly if it's really a module and GRUB_MOD_INIT shouldn't + be used on non-modules. + + * grub-core/commands/boot.c (GRUB_MOD_INIT) [LOONGSON || QEMU_MIPS]: + Rename to grub_boot_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to grub_boot_fini. + * grub-core/commands/keylayouts.c (GRUB_MOD_INIT) + [LOONGSON || QEMU_MIPS]: Rename to grub_keylayouts_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to grub_keylayouts_fini. + * grub-core/font/font_cmd.c (GRUB_MOD_INIT) + [LOONGSON || QEMU_MIPS]: Rename to grub_font_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to grub_font_fini. + * grub-core/kern/mips/loongson/init.c: Replace explicit protos with + includes. + (grub_machine_init): Remove empty inits. + * grub-core/kern/mips/qemu_mips/init.c: Replace explicit protos with + includes. + (grub_machine_init): Remove empty inits. + * grub-core/term/arc/console.c: Remove explicit proto. + * grub-core/term/at_keyboard.c (GRUB_MOD_INIT) + [LOONGSON || QEMU_MIPS]: Rename to grub_at_keyboard_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to + grub_at_keyboard_fini. + * grub-core/term/gfxterm.c (GRUB_MOD_INIT) + [LOONGSON || QEMU_MIPS]: Rename to grub_gfxterm_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to + grub_gfxterm_fini. + * grub-core/term/i386/pc/vga_text.c (GRUB_MOD_INIT) + [LOONGSON || QEMU_MIPS]: Rename to grub_vgatext_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to + grub_vgatext_fini. + * grub-core/term/ieee1275/console.c: Remove explicit proto. + * grub-core/term/serial.c (GRUB_MOD_INIT) + [LOONGSON || QEMU_MIPS]: Rename to grub_serial_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to + grub_serial_fini. + * grub-core/term/terminfo.c (GRUB_MOD_INIT) + [LOONGSON || QEMU_MIPS]: Rename to grub_terminfo_init. + (GRUB_MOD_FINI) [LOONGSON || QEMU_MIPS]: Rename to + grub_terminfo_fini. + * grub-core/video/bitmap.c (GRUB_MOD_INIT): Removed. + (GRUB_MOD_FINI): Likewise. + * grub-core/video/radeon_fuloong2e.c (GRUB_MOD_INIT) + [LOONGSON]: Rename to grub_video_radeon_fuloong2e_init. + (GRUB_MOD_FINI) [LOONGSON]: Rename to + grub_video_radeon_fuloong2e_fini. + * grub-core/video/sis315pro.c (GRUB_MOD_INIT) + [LOONGSON]: Rename to grub_video_sis315pro_init. + (GRUB_MOD_FINI) [LOONGSON]: Rename to + grub_video_sis315pro_fini. + * grub-core/video/sm712.c (GRUB_MOD_INIT) + [LOONGSON]: Rename to grub_video_sm712_init. + (GRUB_MOD_FINI) [LOONGSON]: Rename to + grub_video_sm712_fini. + * include/grub/at_keyboard.h (grub_at_keyboard_init): New proto. + (grub_at_keyboard_fini): Likewise. + * include/grub/dl.h (GRUB_MOD_INIT) [!GRUB_UTIL && !EMU]: + Don't declare grub_{modname}_init. + (GRUB_MOD_INIT) [!GRUB_UTIL && !EMU]: Don't declare grub_{modname}_fini. + * include/grub/keyboard_layouts.h (grub_keylayouts_init) [!EMU]: + New proto. + (grub_keylayouts_fini) [!EMU]: Likewise. + * include/grub/serial.h (grub_serial_init) [!EMU]: + New proto. + (grub_serial_fini) [!EMU]: Likewise. + * include/grub/terminfo.h (grub_terminfo_init) [!EMU]: + New proto. + (grub_terminfo_fini) [!EMU]: Likewise. + * include/grub/video.h (grub_font_init) [!EMU]: + New proto. + (grub_font_fini) [!EMU]: Likewise. + (grub_gfxterm_init) [!EMU]: Likewise. + (grub_gfxterm_fini) [!EMU]: Likewise. + (grub_video_sm712_init) [!EMU]: Likewise. + (grub_video_sm712_fini) [!EMU]: Likewise. + (grub_video_sis315pro_init) [!EMU]: Likewise. + (grub_video_sis315pro_fini) [!EMU]: Likewise. + (grub_video_radeon_fuloong2e_init) [!EMU]: Likewise. + (grub_video_radeon_fuloong2e_fini) [!EMU]: Likewise. + +2012-02-26 Vladimir Serbinenko + + Make nand a prefix for nand devices. + + * grub-core/disk/ieee1275/nand.c (grub_nand_open): Use prefix nand. + +2012-02-26 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_stpcpy): Move from here ... + * include/grub/misc.h (grub_stpcpy): ... to here. Inlined. + +2012-02-26 Vladimir Serbinenko + + * include/grub/env.h (grub_env_find): Remove prototype. + * grub-core/kern/env.c (grub_env_find): Make static. + (grub_env_set): Remove useless set. + +2012-02-26 Vladimir Serbinenko + + * grub-core/kern/i386/realmode.S: Remove useless align. + +2012-02-26 Vladimir Serbinenko + + * include/grub/dl.h (grub_dl_load_file): Don't export. + +2012-02-26 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_open): Remove useless + grub_dprintf. + +2012-02-26 Vladimir Serbinenko + + * grub-core/disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Remove useless + grub_errors. + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Simplify by + not reloading whole superblock but only the part which is really needed. + Remove useless grub_errors. + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Remove useless + grub_errors. + +2012-02-26 Vladimir Serbinenko + + Don't export grub_get_rtc. + + * include/grub/i386/pc/time.h (grub_get_rtc): Don't export. + * grub-core/commands/i386/pc/play.c (play): Use grub_get_time_ms. + +2012-02-26 Vladimir Serbinenko + + * grub-core/genmod.sh.in: Add -R .note.GNU-stack to strip. + +2012-02-26 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (insert_array): Remove scanner_name + argument since it can be deduced from diskfilter. All users updated. + +2012-02-26 Vladimir Serbinenko + + Remove prio_list. + + * include/grub/list.h (grub_prio_list): Removed. + (GRUB_PRIO_LIST_PRIO_MASK): Removed. All users switched to + GRUB_COMMAND_PRIO_MASK. + (GRUB_PRIO_LIST_FLAG_ACTIVE): Removed. All users switched to + GRUB_COMMAND_FLAG_ACTIVE. + (grub_prio_list_insert): Removed. + (grub_prio_list_remove): Likewise. + (GRUB_AS_PRIO_LIST): Likewise. + (GRUB_AS_PRIO_LIST_P): Likewise. + * include/grub/command.h (GRUB_COMMAND_PRIO_MASK): New define. + (GRUB_COMMAND_FLAG_ACTIVE): Likewise. + * grub-core/kern/list.c (grub_prio_list_insert): Remove. + * grub-core/kern/command.c (grub_register_command_prio): Inline + the prio_list code. + (grub_unregister_command): Likewise. + +2012-02-26 Vladimir Serbinenko + + Fix interrupt mixup from previous commit. + + * include/grub/i386/pc/int.h (grub_i386_idt): New struct. + (grub_realidt): New var. + * grub-core/lib/i386/relocator16.S (grub_relocator16_idt): New variable + Load idt. + * grub-core/lib/i386/relocator.c (grub_relocator16_idt): + New declaration. + (grub_relocator16_boot): Set grub_relocator16_idt. + * grub-core/kern/i386/realmode.S (realidt): Renamed to ... + (LOCAL(realidt)): ... this. + * grub-core/boot/i386/pc/startup_raw.S: Pass pointer to realidt in eax. + * grub-core/kern/i386/pc/startup.S: Save pointer to realidt. + (grub_realidt): New variable. + +2012-02-26 Vladimir Serbinenko + + * grub-core/lib/i386/backtrace.c (grub_cmd_backtrace): Move from ... + * grub-core/lib/backtrace.c (grub_cmd_backtrace): ... to here. + * grub-core/lib/i386/backtrace.c (GRUB_MOD_INIT): Move from ... + * grub-core/lib/backtrace.c (GRUB_MOD_INIT): ... to here. + Gettextize. + * grub-core/lib/i386/backtrace.c (GRUB_MOD_FINI): Move from ... + * grub-core/lib/backtrace.c (GRUB_MOD_FINI): ... to here. + * po/POTFILES.in: Regenerate. + +2012-02-26 Vladimir Serbinenko + + * grub-core/commands/probe.c (grub_cmd_probe): Gettextise UUID and label + errors. + +2012-02-26 Vladimir Serbinenko + + * grub-core/gnulib/argp-fmtstream.c (__argp_get_display_len): Stop on + \0. + (add_length): Likewise. + +2012-02-26 Vladimir Serbinenko +2012-02-26 Lubomir Kundrak + + GDB serial and backtrace support. + + * grub-core/kern/i386/realmode.S (real_to_prot): Reload IDT. + (prot_to_real): Likewise. + * grub-core/kern/i386/int.S (grub_bios_interrupt): Remove IDT reload. + * grub-core/Makefile.core.def (backtrace): New module. + (gdb): Likewise. + * grub-core/gdb/cstub.c: New file. + * grub-core/gdb/gdb.c: Likewise. + * grub-core/gdb/i386/idt.c: Likewise. + * grub-core/gdb/i386/machdep.S: Likewise. + * grub-core/gdb/i386/signal.c: Likewise. + * grub-core/lib/i386/backtrace.c: Likewise. + * grub-core/lib/backtrace.c: Likewise. + * include/grub/backtrace.h: Likewise. + * include/grub/gdb.h: Likewise. + * include/grub/i386/gdb.h: Likewise. + +2012-02-26 Vladimir Serbinenko + + * grub-core/gnulib/argp-fmtstream.c (__argp_get_display_len): + New function. + (add_length): Likewise. + (__argp_fmtstream_update): Handle strings with non-ASCII chars. + * grub-core/gnulib/argp-fmtstream.h (__argp_get_display_len): New + proto. + * grub-core/gnulib/argp-help.c (argp_args_usage): Use + __argp_get_display_len. + +2012-02-26 Vladimir Serbinenko + + $"..." support in scripts. + + * grub-core/script/execute.c (grub_script_arglist_to_argv): Handle + GRUB_SCRIPT_ARG_TYPE_GETTEXT. + * grub-core/script/yylex.l: Likewise. + * include/grub/script_sh.h (GRUB_SCRIPT_ARG_TYPE_GETTEXT): New enum + value. + +2012-02-26 Vladimir Serbinenko + + * gentpl.py: Remove obsolete pkglib_DATA handling. + +2012-02-26 Vladimir Serbinenko + + Don't transform PACKAGE_TARNAME following a discussion on autoconf + mailing list. + + * util/grub-install.in: Don't transform PACKAGE_TARNAME. + * util/grub-kbdcomp.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkconfig_lib.in: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2012-02-26 Vladimir Serbinenko + + Remove GRUB_PREFIX. + + * util/grub-mkconfig.in: Remove GRUB_PREFIX. + * util/grub.d/00_header.in: Compute prefix in the only place it's still + used for backward compatibility. + +2012-02-26 Vladimir Serbinenko + + Add new all_video module. + + * grub-core/Makefile.am (moddep.lst): Make dependent on video.lst. + * grub-core/Makefile.core.def (all_video): New module. + * grub-core/genmoddep.awk: Generate dependency of all_video from + video.lst. + * grub-core/lib/fake_module.c: New file. + * grub-core/normal/main.c (features): Add feature_all_video_module. + * util/grub.d/00_header.in: Define locale_dir based on $prefix and + don't do explicit search again. + insmod all_video in load_video if available. + +2012-02-26 Vladimir Serbinenko + + Another round of string clarification and adding TRANSLATORS comments. + +2012-02-26 Vladimir Serbinenko + + * util/grub-mknetdir.in: Remove erroneous reference to install_device. + +2012-02-26 Vladimir Serbinenko + + * grub-core/normal/charset.c (grub_utf8_to_ucs4_alloc): Fix return type + to grub_ssize_t. + * grub-core/normal/main.c (grub_normal_init_page): Fix msg_len type. + * include/grub/charset.h (grub_utf8_to_ucs4_alloc): Fix prototype. + +2012-02-26 Vladimir Serbinenko + + * grub-core/normal/menu_text.c (grub_print_message_indented_real): Add + trailing newline implicitly. All users updated. + +2012-02-26 Vladimir Serbinenko + + Implement serial on IEEE1275 and EFI. + + * docs/grub.texi (Platform-specific limitations): Fix the columen video + on emu. Mention arc and emu as the only platforms without serial + support. + * grub-core/Makefile.core.def (serial): Enable on all terminfomodule and + ieee1275 platforms. + * grub-core/term/efi/serial.c: New file. + * grub-core/term/ieee1275/serial.c: Likewise. + * grub-core/term/serial.c (grub_serial_find): Disable direct port + specification if no ns8250 driver is available. + (grub_cmd_serial): Likewise. + (GRUB_MOD_INIT) [GRUB_MACHINE_IEEE1275]: Init ofserial. + (GRUB_MOD_INIT) [GRUB_MACHINE_EFI]: Init efiserial. + * include/grub/efi/api.h (GRUB_EFI_SERIAL_IO_GUID): New define. + (grub_efi_parity_type_t): New type. + (grub_efi_stop_bits_t): Likewise. + (grub_efi_serial_io_interface): New struct. + * include/grub/serial.h (grub_serial_port): Make 'broken' field + available for all interfaces. + Add EFI and IEEE1275 fields. + (grub_ofserial_init): New proto. + (grub_efiserial_init): Likeiwse. + * util/grub.d/00_header.in: Don't check for the presence of serial + module. + +2012-02-26 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (scan): Fix improper use of device + name as if it was an alias. + +2012-02-25 Vladimir Serbinenko + + * grub-core/commands/lsacpi.c (options): Fix typo. + +2012-02-25 Vladimir Serbinenko + + Convert grub-emu to argp. + + * grub-core/Makefile.core.def (kernel): Add kern/emu/argp_common.c on + emu. + * util/argp_common.c: Rename to ... + * grub-core/kern/emu/argp_common.c: ... this. All users updated. + Add missing includes. + * grub-core/kern/emu/main.c: Convert to argp. + * po/POTFILES.in: Regenerate. + * util/grub-install.in (usage): Make first letter lowcase in messages + for uniformity. + * util/grub-setup.c (options): Likewise. + +2012-02-24 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_progress_bar.c (progress_bar_set_property): + Put back accidently commented-out code. + +2012-02-24 Vladimir Serbinenko + + * grub-core/fs/hfsplus.c (grub_hfsplus_btree_iterate_node): Add btree + loop check using Brent algorithm. + (grub_hfsplus_btree_search): Likewise. + +2012-02-24 Vladimir Serbinenko + + * util/grub-install.in: Fix usage of wrong device for PreP install. + +2012-02-24 Vladimir Serbinenko + + * conf/Makefile.common (CFLAGS_GNULIB): Add + -Wno-unsafe-loop-optimizations. + * configure.ac: Remove -Wmissing-declarations and -Wmissing-prototypes + on tools. + * grub-core/commands/legacycfg.c: Add pragma to skip + -Wunsafe-loop-optimizations. + (check_password_md5_real): Fix loop counter type. + * grub-core/commands/testload.c (grub_cmd_testload): Fix over the EOF + reading. + * grub-core/disk/ldm.c (grub_util_get_ldm): Fix logic error. + * grub-core/fs/zfs/zfs_sha256.c (zio_checksum_SHA256): Add safety + loop condition. + * grub-core/io/gzio.c: Add pragma to skip -Wunsafe-loop-optimizations. + * grub-core/lib/LzmaEnc.c (GetOptimum): Avoid possible infinite loop. + * grub-core/net/net.c (grub_net_route_address): Add safety loop + condition. + * grub-core/normal/charset.c (bidi_line_wrap): Likewise. + * grub-core/normal/cmdline.c (grub_set_history): Fix loop types and + avoid possible infinite loops. + * grub-core/script/parser.y: Add pragma to skip -Wmissing-declarations + and -Wunsafe-loop-optimizations. + * grub-core/script/yylex.l: Likewise. + * util/grub-mkfont.c: Add pragma to skip -Wunsafe-loop-optimizations. + (print_glyphs): Avoid infinite loops. + * util/grub-mkimage.c (compress_kernel_xz): Fix format security. + +2012-02-24 Grégoire Sutre + + * grub-core/commands/lsacpi.c (disp_acpi_xsdt_table): Fix loop condition + to avoid infinite loop. + (disp_acpi_rsdt_table): Likewise. + +2012-02-24 Vladimir Serbinenko + + * grub-core/font/font.c (grub_font_load): Add support for default + path for fonts ($prefix/fonts). + * grub-core/kern/corecmd.c (grub_core_cmd_insmod): Unify condition + for checking if string is a path. + * grub-core/normal/main.c (features): Add feature_default_font_path. + * util/grub-mkconfig.in: Skip mangling of GRUB_FONT into GRUB_FONT_PATH. + * util/grub.d/00_header.in: Use default directory if possible. + * util/grub-install.in: Install unicode.pf2. + +2012-02-24 Vladimir Serbinenko + + * po/README: Add de_CH and en@quot to po/LINGUAS generation command. + * po/Rules-swiss: New file. + * po/swiss.sed: Likewise. + +2012-02-23 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (find_device): Fix typos. + * grub-core/fs/zfs/zfs.c (read_device): Likewise. + * util/grub-mkrelpath.c (argp_parser): Likewise. + Reported by: Yuri Chornoivan. + +2012-02-23 Dalet Omega + + * grub-core/gfxmenu/gui_label.c (label_set_property): Add template + for usual informative messages. + +2012-02-23 Dalet Omega + + Starfield theme. + + * Makefile.am: Define starfield_DATA and dejavu.pf2 generation. + * conf/Makefile.common: Define starfielddir. + * configure.ac: Configure starfield. + * themes/starfield/COPYING.CC-BY-SA-3.0: New file. + * themes/starfield/README: Likewise. + * themes/starfield/blob_w.png: Likewise. + * themes/starfield/boot_menu_c.png: Likewise. + * themes/starfield/boot_menu_e.png: Likewise. + * themes/starfield/boot_menu_n.png: Likewise. + * themes/starfield/boot_menu_ne.png: Likewise. + * themes/starfield/boot_menu_nw.png: Likewise. + * themes/starfield/boot_menu_s.png: Likewise. + * themes/starfield/boot_menu_se.png: Likewise. + * themes/starfield/boot_menu_sw.png: Likewise. + * themes/starfield/boot_menu_w.png: Likewise. + * themes/starfield/slider_c.png: Likewise. + * themes/starfield/slider_n.png: Likewise. + * themes/starfield/slider_s.png: Likewise. + * themes/starfield/src/blob_nw.xcf: Likewise. + * themes/starfield/src/bootmenu/: Likewise. + * themes/starfield/src/bootmenu/center.xcf: Likewise. + * themes/starfield/src/bootmenu/corner.xcf: Likewise. + * themes/starfield/src/bootmenu/side.xcf: Likewise. + * themes/starfield/src/slider_c.xcf: Likewise. + * themes/starfield/src/slider_n.xcf: Likewise. + * themes/starfield/src/slider_s.xcf: Likewise. + * themes/starfield/src/terminalbox/: Likewise. + * themes/starfield/src/terminalbox/center.xcf: Likewise. + * themes/starfield/src/terminalbox/corner.xcf: Likewise. + * themes/starfield/src/terminalbox/side.xcf: Likewise. + * themes/starfield/starfield.png: Likewise. + * themes/starfield/terminal_box_c.png: Likewise. + * themes/starfield/terminal_box_e.png: Likewise. + * themes/starfield/terminal_box_n.png: Likewise. + * themes/starfield/terminal_box_ne.png: Likewise. + * themes/starfield/terminal_box_nw.png: Likewise. + * themes/starfield/terminal_box_s.png: Likewise. + * themes/starfield/terminal_box_se.png: Likewise. + * themes/starfield/terminal_box_sw.png: Likewise. + * themes/starfield/terminal_box_w.png: Likewise. + * themes/starfield/theme.txt: Likewise. + +2012-02-23 Vladimir Serbinenko + + * util/grub.d/00_header.in: Add missing export theme. + +2012-02-22 Vladimir Serbinenko + + * util/ieee1275/ofpath.c: Remove include of malloc.h since stdlib is + already included. + Reported by: Eren D. + +2012-02-22 Vladimir Serbinenko + + * conf/Makefile.common (grubdatadir): Removed. + (Makefile.am): Move eveything grubdata to pkgdata. + +2012-02-22 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c (get_sleep_type): + Remove unused variable. + +2012-02-22 Vladimir Serbinenko + + * include/grub/acpi.h (GRUB_ASCII_OPCODE): Add + GRUB_ACPI_OPCODE_STRING_CONST, GRUB_ACPI_OPCODE_BUFFER, + GRUB_ACPI_OPCODE_CREATE_WORD_FIELD + and GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD. + * grub-core/commands/acpihalt.c [GRUB_DSDT_TEST]: Replace include of + i18n with gettext no-op. + (skip_data_ref_object): Support GRUB_ACPI_OPCODE_BUFFER and + GRUB_ACPI_OPCODE_STRING_CONST. + (get_sleep_type): Support GRUB_ACPI_OPCODE_CREATE_WORD_FIELD and + GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD. Add handling of unknown opcodes. + +2012-02-22 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. + +2012-02-22 Vladimir Serbinenko + + * Makefile.util.def (libgrubmods.a): Add -Wno-error=logical-op + -Wno-error=missing-noreturn. + +2012-02-22 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_read_block): Avoid <= in loop + condition to avoid possibly infinite loops. + * grub-core/lib/pbkdf2.c (grub_crypto_pbkdf2): Likewise. + * grub-core/lib/xzembed/xz_dec_bcj.c (bcj_powerpc): Likewise. + +2012-02-22 Vladimir Serbinenko + + * grub-core/normal/charset.c (bidi_line_wrap): Avoid <= in loop + condition to avoid possibly infinite loops. + +2012-02-22 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (read_device_map): Add missing noreturn + on show_error. + +2012-02-22 Vladimir Serbinenko + + * grub-core/kern/disk.c (grub_disk_write): Add missing const qualifier. + +2012-02-22 Vladimir Serbinenko + + * grub-core/kern/corecmd.c (grub_core_cmd_ls): Add missing var init. + +2012-02-22 Vladimir Serbinenko + + * util/bin2h.c (usage): Add missing attribute noreturn. + +2012-02-22 Vladimir Serbinenko + + * grub-core/commands/testload.c (grub_cmd_testload): Fix overflow + if the size isn't divisible by 512. + +2012-02-22 Vladimir Serbinenko + + Make list_push and list_remove functions rather than inline functions + to decrease size and avoid aliasing violations. + + * include/grub/list.h (grub_list_push): Move to ... + * grub-core/kern/list.c (grub_list_push): ... here. Don't inline. + * include/grub/list.h (grub_list_remove): Move to ... + * grub-core/kern/list.c (grub_list_remove): ... here. Don't inline. + +2012-02-22 Vladimir Serbinenko + + * configure.ac: Disable for now -Wstack-protector, -Wunreachable-code + and -Wunused-result. + +2012-02-21 Vladimir Serbinenko + + * grub-core/net/net.c (grub_cmd_deladdr): Fix index. + Reported by: Seth Goldberg + +2012-02-21 Vladimir Serbinenko + + * configure.ac: Add -fno-builtin-gettext on host if NLS is disabled. + +2012-02-19 Samuel Thibault + + * util/grub-mkconfig.in (GRUB_CMDLINE_GNUMACH): Export variable. + * util/grub.d/10_hurd.in: Include GRUB_CMDLINE_GNUMACH in gnumach + command line. + * docs/grub.texi (Simple configuration): Document + GRUB_CMDLINE_GNUMACH. + +2012-02-18 Vladimir Serbinenko + + * conf/Makefile.common (platform_SCRIPTS): New variable. + (platform_PROGRAMS): Likewise. + * gentpl.py: Mark *,module and *.image for install. + * grub-core/gdb_grub.in: Add a notice of expected environment. + * grub-core/Makefile.core.def (gdb_grub): Mark for install. + (gmodule.pl): Likewise. + +2012-02-18 Vladimir Serbinenko + + Replace grub_checkkey with grub_getkey_noblock. + + * grub-core/kern/term.c (grub_checkkey): Replaced with ... + (grub_getkey_noblock): ... this. All users updated. + +2012-02-18 Vladimir Serbinenko + + * grub-core/kern/emu/console.c: Move to ... + * grub-core/term/emu/console.c: ...here. + (grub_ncurses_getkey): Fix return value if no key is detected. + +2012-02-12 Vladimir Serbinenko + + * include/grub/test.h (grub_unit_test_init): Add missing prototype. + (grub_unit_test_fini): Likewise. + * tests/lib/unit_test.c (main): Remove extra nested external prototype. + +2012-02-12 Vladimir Serbinenko + + * include/grub/test.h (GRUB_UNIT_TEST) + +2012-02-12 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_break): Clarify logic. + Better error handling. + (grub_script_return): Likewise. + * grub-core/script/lexer.c (grub_script_lexer_yywrap): Likewise. + +2012-02-12 Vladimir Serbinenko + + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h (__GNU_LIBRARY__): Avoid + rimplicit redifinition. + +2012-02-12 Vladimir Serbinenko + + * docs/grub.texi (Internationalisation): Detail (lack of) collation in + GRUB. + +2012-02-12 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_cmdline_get): Don't gettext prompt. + * grub-core/normal/main.c (grub_normal_read_line_real): Gettext + prompt here. + +2012-02-12 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (zfs_fetch_nvlist): Mark unknown member here + as GRUB_ERR_BUG. Don't malloc if no device is available. + +2012-02-12 Vladimir Serbinenko + + * grub-core/term/terminfo.c (grub_terminfo_output_unregister): + Mark calling with invalid term as GRUB_ERR_BUG. + +2012-02-12 Vladimir Serbinenko + + * grub-core/net/tftp.c (tftp_receive): Silently discard too short + packets rather than raising an error. + +2012-02-12 Vladimir Serbinenko + + * grub-core/loader/xnu.c (grub_xnu_writetree_toheap_real): Avoid set + in if. + +2012-02-12 Vladimir Serbinenko + + * grub-core/loader/efi/appleloader.c (grub_cmd_appleloader): Move + diagnostic to dprintf. + * grub-core/loader/i386/pc/linux.c (grub_cmd_linux): Likewise. + +2012-02-12 Vladimir Serbinenko + + * grub-core/kern/corecmd.c (grub_core_cmd_ls): Handle error in parsing + device name. + +2012-02-12 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (locate_attr): Avoid set in if. + (grub_ntfs_iterate_dir): Likewise. + +2012-02-12 Vladimir Serbinenko + + Efiemu stylistic fixes and gettext. + + * grub-core/efiemu/i386/loadcore32.c + (grub_arch_efiemu_relocate_symbols32): Avoid set in if. + * grub-core/efiemu/i386/loadcore64.c + (grub_arch_efiemu_relocate_symbols64): Likewise. + * grub-core/efiemu/i386/pc/cfgtables.c + (grub_machine_efiemu_init_tables): Likewise. + * grub-core/efiemu/loadcore.c (grub_efiemu_resolve_symbols): Likewise. + (grub_efiemu_loadcore_initXX): Add a filename argument. + All users updated. + Improved error message. + * grub-core/efiemu/loadcore_common.c (grub_efiemu_loadcore_init): + Add a filename argument. + All users updated. + * grub-core/efiemu/symbols.c (grub_efiemu_set_virtual_address_map): + Reclassify double relocation as GRUB_ERR_BUG. + +2012-02-12 Vladimir Serbinenko + + * grub-core/commands/i386/pc/play.c (grub_cmd_play): Improve error + handling. + +2012-02-12 Vladimir Serbinenko + + * grub-core/commands/hdparm.c (grub_cmd_hdparm): Allow running + on partition. + +2012-02-12 Vladimir Serbinenko + + * include/grub/misc.h (grub_error_save): Fix cleaning grub_errno. + +2012-02-12 Vladimir Serbinenko + + Improve string. Gettextize. + +2012-02-11 Vladimir Serbinenko + + * configure.ac: Remove -Winline altogether and -Wmissing-prototypes on + utils. + * util/import_gcry.py: Add -Wno-strict-aliasing on checked modules. + +2012-02-11 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (grub_diskfilter_print_partmap) + [GRUB_UTIL]: New function. + (insert_array) [GRUB_UTIL]: Store partmaps. + * include/grub/diskfilter.h (grub_diskfilter_pv) [GRUB_UTIL]: New member + partmaps. + (grub_diskfilter_print_partmap) [GRUB_UTIL]: New proto. + * util/grub-probe.c (probe_partmap): Call grub_diskfilter_print_partmap. + (probe_abstraction): Print diskfilter and not raid. + Reported by: Lennart Sorensen + +2012-02-11 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Explicitly init decompress_size. + * util/grub-mkimagexx.c (MASK3): New define. + (add_value_to_slot_20b): Use MASK3. + (add_value_to_slot_21): Likewise. + (relocate_addresses): Fix format specification. + (load_image): Explicitly init symtab_section. + +2012-02-11 Vladimir Serbinenko + + * util/getroot.c (grub_find_root_devices_from_mountinfo): Fix types. + (grub_util_biosdisk_get_grub_dev): Fix format specification. + +2012-02-11 Vladimir Serbinenko + + * grub-core/kern/emu/full.c (grub_arch_dl_get_tramp_got_size): Enable + on powerpc. + Reported by: Lennart Sorensen + +2012-02-11 Vladimir Serbinenko + + * gentpl.py: Add missing license header. + * docs/grub.texi: Update copyright year. + +2012-02-10 Grégoire Sutre + + Source grub-mkconfig_lib from the build directory at build time. + Suggested by: Vladimir Serbinenko. + + * gentpl.py (manpage): Set pkgdatadir to $(builddir) on help2man call. + * util/grub-install.in: Define pkgdatadir if not already set, and source + grub-mkconfig_lib from there. + * util/grub-kbdcomp.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2012-02-10 Vladimir Serbinenko + + Increase warning level. + + * conf/Makefile.common (CFLAGS_GNULIB): Add -Wno-redundant-decls + -Wno-unreachable-code -Wno-conversion -Wno-old-style-definition. + * configure.ac (HOST_CFLAGS): Add bunch of -W arguments. + (TARGET_CFLAGS): Likewise. + (HOST_CFLAGS): Add -Werror unless --disable-werror is activated. + * grub-core/Makefile.core.def (decompressor_xz): Add + -Wno-unreachable-code. + (normal): Add -Wno-redundant-decls. + (xzio): Add -Wno-unreachable-code. + (lzopio): Add -Wno-redundant-decls -Wno-error. + * grub-core/commands/acpi.c: Add exception to -Wcast-align. + * grub-core/commands/lsacpi.c: Add exception to -Wcast-align. + * grub-core/gensymlist.sh: Add exception to -Wmissing-format-attribute. + * grub-core/kern/dl.c: Add exception to -Wcast-align. + * grub-core/kern/efi/efi.c (grub_efi_modules_addr): Likewise. + * grub-core/kern/i386/coreboot/init.c: Add exception to + -Wsuggest-attribute=noreturn. + * grub-core/kern/ia64/dl.c: Add exception to -Wcast-align. + * grub-core/kern/ia64/dl_helper.c: Likewise. + * grub-core/kern/mips/dl.c: Likewise. + * grub-core/kern/sparc64/dl.c: Likewise. + * grub-core/lib/LzmaEnc.c: Add exception to -Wshadow. + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h (memcpy): Likewise. + (memcmp): Likewise. + * grub-core/lib/pbkdf2.c: Add exception to -Wunreachable-code. + * grub-core/loader/ia64/efi/linux.c: Add exception to -Wcast-align. + * grub-core/loader/mips/linux.c: Likewise. + * grub-core/loader/multiboot_elfxx.c: Likewise. + * grub-core/script/parser.y: Add exception to -Wunreachable-code. + * grub-core/video/sm712.c: Add exception to -Wcast-align. + * util/import_gcry.py: Add -Wno-cast-align to modules checked by hand. + * grub-core/font/font.c (grub_font_loader_init): Add explicit cast and + fixme. + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Likewise. + * grub-core/kern/i386/multiboot_mmap.c (grub_machine_mmap_init): + Fix prototype. + +2012-02-10 Vladimir Serbinenko + + * grub-core/lib/i386/relocator16.S: Fix incorrect use of absolute + address. + +2012-02-10 Vladimir Serbinenko + + * grub-core/commands/legacycfg.c (grub_cmd_legacy_kernel): + Avoid improper use of strings. + (grub_cmd_legacy_initrdnounzip): Likewise. + +2012-02-10 Vladimir Serbinenko + + * include/grub/emu/misc.h (grub_util_warn): Add missing format + attribute. + (grub_util_info): Likewise. + (grub_util_error): Likewise. + +2012-02-10 Vladimir Serbinenko + + * util/grub-mount.c (fuse_init): Avoid improper use of strings. + * util/grub-fstest.c (fstest): Likewise. + +2012-02-10 Vladimir Serbinenko + + * grub-core/disk/geli.c (grub_md_sha256_real): Respect format security. + (grub_md_sha512_real): Likewise. + (grub_util_get_geli_uuid): Likewise. + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors): Likewise. + (grub_util_biosdisk_open): Fix format specification. + Respect format security. + * grub-core/kern/emu/misc.c (xmalloc): Respect format security. + (xrealloc): Likewise. + (xasprintf): Likewise. + +2012-02-10 Vladimir Serbinenko + + * util/import_gcry.py: Include grub/crypto.h in init.c. + +2012-02-10 Vladimir Serbinenko + + * util/grub-mkimage.c (compress_kernel_lzma): Respect format security. + (generate_image): Make prefix a const char *. + Fix format specifications. Respect format security. + Avoid void * arithmetics. + Avoid shadowing. + (argp_parser): Remove unused variable. Respect format security. + * util/grub-mkimagexx.c (relocate_symbols): Avoid shadowing. + (count_funcs) [!MKIMAGE_ELF64]: #if-out. + (count_funcs): Remove unused variable. + (relocate_addresses): Fix format specification. + Disable x86-64 with elf32. Remove unused variables. + (add_fixup_entry): Avoid shadowing. + (make_reloc_section): Fix format specification. + Use assert. + (locate_sections): Fix format specifications. + (load_image): Avoid shadowing. + +2012-02-10 Vladimir Serbinenko + + * util/grub-setup.c (setup): Remove unused variable. Avoid shadowing. + Fix format specifications. Respect format security. + Don't translate already translated grub_errmsg. + (argp_parser): Remove unused variable + +2012-02-10 Vladimir Serbinenko + + * util/grub-mkrelpath.c (argp_parser): Remove unused variable. + +2012-02-10 Vladimir Serbinenko + + * util/grub-mkpasswd-pbkdf2.c (argp_parser): Remove unused variable. + (main): Likewise. Use xmalloc. Respect format security. + +2012-02-10 Vladimir Serbinenko + + * util/grub-mklayout.c (console_grub_equivalence): Make "layout" + a const char *. + (argp_parser): Remove unused variable. + +2012-02-10 Vladimir Serbinenko + + * util/grub-mkfont.c (grub_font_info): Make name a const char *. + (add_pixel): Make static. + (add_font): Likewise. + (write_string_section): Make name and str a const char *. + (write_be16_section): Make name a const char *. + (print_glyphs): Make static. + (write_font_ascii_bitmap): Likewise. + (write_font_width_spec): Likewise. + (write_font_pf2): Likewise. + (argp_parser): Remove unused variable. + Respect format security. + (main): Avoid shadowing. Respect format security. + +2012-02-10 Vladimir Serbinenko + + * util/grub-editenv.c (argp_parser): Make static. + (create_envblk_file): Use xmalloc. + (open_envblk_file): Likewise. + Resepect format security. + (set_variables): Respect format security. + +2012-02-10 Vladimir Serbinenko + + * util/getroot.c (grub_find_device): Respect format security. + (get_mdadm_uuid): Remove unused variable. + (grub_util_pull_device): Dont call gettext on already translated + grub_errmsg. + (find_system_device): Remove unused variable. + (grub_util_get_grub_dev): Likewise. + (grub_make_system_path_relative_to_its_root): Respect format security. + +2012-02-10 Vladimir Serbinenko + + * util/grub-fstest.c (execute_command): Make first argument + a const char *. + (read_file): Avoid shadowing. + Reuse underlying error message if device open fails. + (cmd_cmp): Respect format security. + (root): Make const char *. + (fstest): Remove args argument and use global copy. + Respect format security. + (argp_parser): Make static. + (main): Make default_root const char *. + +2012-02-10 Vladimir Serbinenko + + * util/grub-mount.c (root): Make const char *. + (execute_command): Make first argument a const char *. + (fuse_init): Respect format security. + (argp_parser): Make static. Remove unused variable. + (main): Make default_root a const char *. + Respect format security. + +2012-02-10 Vladimir Serbinenko + + * util/grub-probe.c (probe): Don't call gettext on already translated + grub_errmsg. + Remove unused variables. + (argp_parser): Remove unused variable. + +2012-02-10 Vladimir Serbinenko + + * util/grub-script-check.c (argp_parser): Remove unused variable. + (main): Rename read to curread to avoid shadowing. + +2012-02-10 Vladimir Serbinenko + + * util/misc.c (grub_util_write_image_at): Fix format specification. + (grub_util_write_image): Likewise. + (grub_script_execute_argument_to_string): Removed (unused). + (grub_script_execute_menuentry): Likewise. + (grub_putchar): Likewise. + +2012-02-10 Vladimir Serbinenko + + * include/grub/symbol.h (EXT_C) [GRUB_UTIL]: Removed. + (FUNCTION) [GRUB_UTIL]: Likewise. + (VARIABLE) [GRUB_UTIL]: Likewise. + +2012-02-10 Vladimir Serbinenko + + * include/grub/misc.h: Avoid evaluationg NEED_ENABLE_EXECUTE_STACK and + NEED_REGISTER_FRAME_INFO in GRUB_UTIL. + +2012-02-10 Vladimir Serbinenko + + * grub-core/partmap/bsdlabel.c (iterate_real): Fix freeing of static + buffer. + +2012-02-10 Vladimir Serbinenko + + * grub-core/lib/LzmaEnc.c (LzmaEnc_FastPosInit): Made static. + (LzmaEnc_SaveState): Removed (unused). + (LzmaEnc_RestoreState): Likewise. + (LzmaEnc_InitPriceTables): Made static. + (LzmaEnc_Construct): Likewise. + (LzmaEnc_FreeLits): Likewise. + (LzmaEnc_Destruct): Likewise. + (LzmaEnc_Init): Likewise. + (LzmaEnc_InitPrices): Likewise. + (LzmaEnc_Finish): Likewise. + (LzmaEnc_PrepareForLzma2): Removed (unused). + (LzmaEnc_MemPrepare): Likewise. + (LzmaEnc_GetNumAvailableBytes): Likewise. + (LzmaEnc_GetCurBuf): Likewise. + (LzmaEnc_CodeOneMemBlock): Likewise. + +2012-02-10 Vladimir Serbinenko + + * grub-core/disk/ldm.c (grub_util_get_ldm): Remove unused variables. + (grub_util_ldm_embed): Likewise. + +2012-02-10 Vladimir Serbinenko + + * util/grub-editenv.c (print_var): Rename name to varname to + avoid shadowing. + (main): Rename index to curindex to avoid shadowing. + Make filename a const char *. + +2012-02-10 Vladimir Serbinenko + + * grub-core/script/lexer.c (grub_script_lexer_init): Rename getline + to arg_getline to avoid shadowing. + +2012-02-10 Vladimir Serbinenko + + * grub-core/partmap/gpt.c (gpt_partition_map_embed): Rename disk to + disk_ to avoid shadowing. + +2012-02-10 Vladimir Serbinenko + + * grub-core/lib/LzFind.c (MatchFinder_GetIndexByte): Rename index to + curindex to avoid shadowing. + Make static. + (MatchFinder_GetNumAvailableBytes): Make static. + +2012-02-10 Vladimir Serbinenko + + * grub-core/fs/squash4.c (direct_read): Rename read to curread to + avoid shadowing. + +2012-02-10 Vladimir Serbinenko + + * grub-core/disk/cryptodisk.c (grub_cryptodisk_endecrypt): Rename + argument from encrypt to do_encrypt to avoid shadowing. + +2012-02-09 Vladimir Serbinenko + + * grub-core/loader/multiboot_elfxx.c (grub_multiboot_load_elf): Fix + incorrect nesting of #if's. + +2012-02-09 Vladimir Serbinenko + + * grub-core/commands/lsacpi.c (disp_acpi_xsdt_table): #if'-out the + checks which are always false on some platforms. + (grub_cmd_lsacpi): Likewise. + * grub-core/kern/misc.c (grub_strtoul): Likewise. + * grub-core/loader/multiboot.c (grub_multiboot_set_video_mode): + Likewise. + +2012-02-09 Vladimir Serbinenko + + * grub-core/disk/diskfilter.c (read_segment): Renome unreachable code. + * grub-core/net/ip.c (grub_net_recv_ip4_packets): Likewise. + +2012-02-09 Vladimir Serbinenko + + * grub-core/gnulib/regex.h (re_pattern_buffer): Declare buffer as + re_dfa_t to avoid breaking alignment invariants. + * grub-core/gnulib/regex_internal.h (re_dfa_t): Moved to ... + * grub-core/gnulib/regex.h (re_dfa_t): ... here. + +2012-02-09 Vladimir Serbinenko + + * grub-core/loader/i386/xnu.c (grub_xnu_boot): Fix printf. + * grub-core/loader/ia64/efi/linux.c (grub_cmd_fpswa): Likewise. + +2012-02-09 Vladimir Serbinenko + + * grub-core/kern/i386/qemu/mmap.c (grub_machine_mmap_init): + Fix declaration. + +2012-02-09 Vladimir Serbinenko + + * grub-core/bus/usb/ehci.c (grub_ehci_ehcc_read32): Restructure to + conserve alignment invariants. + (grub_ehci_ehcc_read16): Likewise. + (grub_ehci_oper_read32): Likewise. + (grub_ehci_oper_write32): Likewise. + (grub_ehci_pci_iter) [!GRUB_HAVE_UNALIGNED_ACCESS]: Check alignment. + Conserve alignment invariants. + +2012-02-09 Vladimir Serbinenko + + * grub-core/kern/emu/full.c (grub_emu_post_init): Remove raid reinit. + * include/grub/disk.h [GRUB_MACHINE_EMU]: Remove now useless LVM/RAID + declarations. + +2012-02-09 Vladimir Serbinenko + + * grub-core/kern/emu/hostfs.c (grub_hostfs_close): + Remove unused variable. + +2012-02-09 Vladimir Serbinenko + + * grub-core/efiemu/loadcore_common.c (grub_efiemu_loadcore_load): + Remove set in if. + +2012-02-09 Vladimir Serbinenko + + * include/grub/net.h: Remove double declarations. + +2012-02-09 Vladimir Serbinenko + + Remove "payload" command in ia64 Linux loader since I couldn't + find any evidence of it being used for anything. + Replace "relocate" command with an environment variable + + * grub-core/loader/ia64/efi/linux.c (ia64_boot_param): Remove extra + fields. + (ia64_boot_payload): Removed. + (last_payload): Likewise. + (RELOCATE_OFF): Likewise. + (RELOCATE_ON): Likewise. + (RELOCATE_FORCE): Likewise. + (relocate): Likewise. + (free_pages): Don't free payloads. + (grub_load_elf64): Use common error messages. + Use "linux_relocate" variable. + Increase the space after boot_params. + (grub_cmd_payload): Removed. + (grub_cmd_relocate): Likewise. + (grub_cmd_fpswa): Improve messages. + (cmd_payload): Removed. + (cmd_relocate): Likewise. + (GRUB_MOD_INIT): Don't register "payload" and "relocate". + (GRUB_MOD_FINI): Don't unregister "payload" and "relocate". + +2012-02-09 Vladimir Serbinenko + + Convert UHCI to DMA framework. + + * grub-core/bus/usb/uhci.c (grub_uhci): Add chunk and phys members. + (grub_uhci_pci_iter): Fill new members + (grub_alloc_td): Use P2V and V2P functions. + (grub_free_queue): Likewise. + (grub_alloc_qh): Likewise. + (grub_uhci_setup_transfer): Likewise. + (grub_uhci_check_transfer): Likewise. + +2012-02-09 Vladimir Serbinenko + + * grub-core/video/colors.c (grub_video_parse_color): Fix error message. + Remove assignment in if while on it. + +2012-02-09 Vladimir Serbinenko + + * util/grub-mkstandalone.in: Fix modules directory. + +2012-02-09 Vladimir Serbinenko + + * util/grub-mkimage.c (image_targets): Set default_compression to lzma + on i386-pc target. + (argp_parser): Accept "auto" as compression specification. + +2012-02-09 Vladimir Serbinenko + + Fix `help' with unloaded modules. + + * include/grub/normal.h (grub_dyncmd_get_cmd): New proto. + * grub-core/normal/dyncmd.c (grub_dyncmd_get_cmd): New function. + (grub_dyncmd_dispatcher): Small stylistic fix. + * grub-core/commands/help.c (grub_cmd_help): Load missing modules when + explicit help is requested. + +2012-02-09 Vladimir Serbinenko + + * grub-core/fs/cpio.c (grub_cpio_dir): Fix a bug with multiple listing. + Explicitly init restart while on it. + +2012-02-09 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/wchar.h (mbrtowc): Set pwc to zero to avoid + uninited variable. + +2012-02-08 Vladimir Serbinenko + + * util/grub-mknetdir.in: Use . rather than source for POSIX + compatibility. + +2012-02-08 Vladimir Serbinenko + + * util/grub-probe.c (main): Fix trailing space in compatibility hint. + +2012-02-08 Vladimir Serbinenko + + * grub-core/kern/partition.c (grub_partition_get_name): Fix uninited + variable. + +2012-02-08 Vladimir Serbinenko + + * grub-core/commands/hdparm.c (grub_cmd_hdparm): Accept device name + without quotes. + +2012-02-08 Vladimir Serbinenko + + * grub-core/net/net.c (GRUB_MOD_INIT): Don't register netfs. + +2012-02-08 Vladimir Serbinenko + + * grub-core/kern/partition.c (grub_partition_get_name): Fix reverse + iteration of partitions. + +2012-02-08 Vladimir Serbinenko + + Improve gettext support. Stylistic fixes and error handling fixes while + on it. + +2012-02-07 Vladimir Serbinenko + + * grub-core/lib/i386/relocator16.S: Revert moving A20 code into PM + part. Instead setup the correct stack in RM. + * grub-core/lib/i386/relocator.c (grub_relocator16_boot): Reserve place + for stack. + * include/grub/i386/relocator_private.h: New file. + +2012-02-05 Vladimir Serbinenko + + * grub-core/commands/minicmd.c (GRUB_MOD_INIT): Add missing SIZE + argument. + * util/grub-fstest.c (options): Add missing DEVICE part. + +2012-02-05 Vladimir Serbinenko + + Clarify and unify messages. + + * grub-core/commands/hashsum.c (options): Unify messages. + * grub-core/commands/keystatus.c (GRUB_MOD_INIT): Don't mark a + literal-only message as translatable. + * grub-core/commands/lsacpi.c (GRUB_MOD_INIT): Likewise. + * grub-core/loader/ia64/efi/linux.c (GRUB_MOD_INIT): Likewise. + * grub-core/commands/legacycfg.c (GRUB_MOD_INIT): Add quoting around + commands. + * grub-core/commands/menuentry.c (options): Clarify that it's a keyboard + key, not the key used to unlock. Clarify what it's used for. + * grub-core/kern/emu/hostdisk.c (read_device_map): Unify error message. + * grub-core/loader/xnu.c (grub_xnu_load_driver): Remove erroneous colon. + * grub-core/script/main.c (GRUB_MOD_INIT): Clarify [n] to be [NUM]. + * util/grub-editenv.c (options): Unify "verbose" message. + * util/grub-fstest.c (read_file): Unify error message. + (fstest): Add quotes around commands. + (options): Unify "verbose" message. + * util/grub-install.in: Add quotes around variable name. + * util/grub-kbdcomp.in: Unify error message. + * util/grub-mkfont.c (main): Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mklayout.c (options): Unify "verbose" message. + * util/grub-mkstandalone.in: Unify help and verbose messages. + * util/grub-mount.c (options): Unify "verbose" message. + * util/grub-probe.c (options): Likewise. + * util/grub-script-check.c (options): Likewise. + * util/grub-setup.c (setup): Unify no-terminator message. + (options): Use DEVICE and not DEV. + Unify "verbose" message. + * util/ieee1275/ofpath.c (xrealpath): Unify error message. + +2012-02-05 Vladimir Serbinenko + + Improve and unify messages. + + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors): Add argument + name. All users updated. + Print filename in error. + (read_device_map): Print filename in error. + * util/getroot.c (grub_guess_root_devices): Print filename in error. + (grub_util_get_os_disk): Likewise. + (grub_util_biosdisk_get_grub_dev): Likewise. + (grub_util_check_block_device): Likewise. + (grub_util_check_char_device): Likewise. + (grub_make_system_path_relative_to_its_root): Likewise. + * util/grub-editenv.c (create_envblk_file): Likewise. + (open_envblk_file): Likewise. + (write_envblk): Likewise. + * util/grub-fstest.c (cmd_cp): Likewise. + (cmd_cat): Likewise. + (cmd_cmp): Likewise. + * util/grub-menulst2cfg.c (main): Likewise. + * util/grub-mkfont.c (write_font_ascii_bitmap): Likewise. + (write_font_width_spec): Likewise. + (write_font_pf2): Likewise. + * util/grub-mkimage.c (generate_image): New argument outname. + All users updated. + Remove unreacheable message. + (options): Unify messages. + (help_filter): Likewise. + * util/grub-mklayout.c (usage): Removed (unused). + (main): Print filename in error. + * util/grub-mkrescue.in: Fix wrong quoting. + * util/grub-setup.c (setup): Print filename in error. + * util/ieee1275/ofpath.c (vendor_is_ATA): Likewise. + (check_sas): Likewise. + * util/misc.c (grub_util_get_fp_size): Removed. + (grub_util_get_image_size): Print filename in error. + (grub_util_read_at): Removed. + (grub_util_read_image): Print filename in error. + (grub_util_load_image): Likewise. + (grub_util_write_image_at): New argument filename. All users updated. + Print filename in error. + (grub_util_write_image): New argument filename. All users updated. + Print filename in error. + * util/raid.c (grub_util_raid_getmembers): Print filename in error. + * util/resolve.c (grub_util_resolve_dependencies): Likewise. + +2012-02-05 Vladimir Serbinenko + + * grub-core/Makefile.core.def (pxechain): New module. + * grub-core/loader/i386/pc/pxechainloader.c: New file. + * grub-core/net/drivers/i386/pc/pxe.c (grub_pxe_get_cached): New + function. + (grub_pc_net_config_real): Use grub_pxe_get_cached. + * include/grub/i386/pc/pxe.h (grub_pxe_get_cached): New proto. + +2012-02-05 Vladimir Serbinenko + + * grub-core/kern/err.c (GRUB_MAX_ERRMSG): Move to ... + * include/grub/err.h (GRUB_MAX_ERRMSG): ... here. + * include/grub/err.h (grub_error_saved): New struct. + (grub_errmsg): Make array size explicit. + * include/grub/misc.h (grub_error_save): New function. + (grub_error_load): Likewise. + * grub-core/kern/err.c (grub_error_stack_items): Use grub_error_saved. + (grub_error_push): Update `errno' member name. + (grub_error_pop): Likewise + * grub-core/net/tftp.c (tftp_data): New member save_err. + (tftp_receive): Save error. + (tftp_open): Restore error. + +2012-02-05 Vladimir Serbinenko + + * grub-core/lib/i386/relocator16.S (grub_relocator16_start): Move switch + to real mode down to execute A20-related code in protected mode as + intended. + +2012-02-05 Grégoire Sutre + + * grub-core/disk/diskfilter.c (grub_diskfilter_make_raid): Return + NULL when the argument `level' has an unexpected value. + +2012-02-04 Vladimir Serbinenko + + Move platform-dependent files from $prefix to $prefix/$platform. + + * config.h.in (GRUB_TARGET_CPU): New definition. + (GRUB_PLATFORM): Likewise. + * configure.ac: Define GRUB_TARGET_CPU and GRUB_PLATFORM. + * grub-core/commands/parttool.c (grub_cmd_parttool): Update dir. + * grub-core/efiemu/main.c (grub_efiemu_autocore): Likewise. + * grub-core/kern/dl.c (grub_dl_load): Likewise. + * grub-core/normal/autofs.c (read_fs_list): Likewise. + * grub-core/normal/crypto.c (read_crypto_list): Likewise. + * grub-core/normal/dyncmd.c (read_command_list): Likewise. + * grub-core/normal/term.c (read_terminal_list): Likewise. + * grub-core/gettext/gettext.c (grub_mofile_open_lang): Use + $prefix/locale. + (grub_gettext_init_ext): Likewise. + * grub-core/normal/main.c (GRUB_MOD_INIT): Define grub_cpu and + grub_platform. + * util/grub-install.in: Update directories. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + +2012-02-04 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_claimmap): Change to + grub_error framework. All users updated. + +2012-02-04 Vladimir Serbinenko + + * grub-core/gettext/gettext.c: Mostly rewritten to avoid using + lists (by always binsearching), improve caching (cache strings + used for binsearch, not only results), improve + maintainability (by using more structured binary search) and correct + error handling. + +2012-02-04 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_return): Fix warning. + +2012-02-04 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_return): Fix potential + NULL-dereference. + Reported by: Jim Meyering. + +2012-02-03 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. + * util/grub-install.in: Gettextize the strings missed in first pass. + +2012-02-03 Vladimir Serbinenko + + * Makefile.util.def (grub-mkdevicemap): Removed. + * include/grub/emu/hostdisk.h (grub_util_get_os_disk): New proto. + * include/grub/util/deviceiter.h: Removed. + * util/deviceiter.c: Likewise. + * util/getroot.c (grub_util_get_os_disk): New function. + * util/grub-install.in: Remove grub-mkdevicemap. Use -t disk as + replacement for EFI. + * util/grub-mkdevicemap.c: Removed. + * util/grub-probe.c (probe): Handle PRINT_DISK. + (argp_parser): Handle -t disk. + +2012-02-03 Vladimir Serbinenko + + * util/grub-mkfont.c: Migrate to argp. + * util/grub-mklayout.c: Likewise. + * util/grub-mkpasswd-pbkdf2.c: Likewise. + * util/grub-mkrelpath.c: Likewise. + * util/grub-probe.c: Likewise. + * util/grub-script-check.c: Likewise. + +2012-02-03 Vladimir Serbinenko + + * util/grub-reboot.in: Add missing datarootdir. + Add missing newline. + * util/grub-set-default.in: Add missing datarootdir. + * util/powerpc/ieee1275/grub-mkrescue.in: Add missing newline. + * util/grub-mkrescue.in: Likewise. + +2012-02-03 Vladimir Serbinenko + + * util/grub.d/30_os-prober.in: Fix TRANSLATORS comment. + +2012-02-03 Vladimir Serbinenko + + * util/grub-kbdcomp.in: Add decent help and gettextize. + * docs/man/grub-kbdcomp.h2m: New file. + +2012-02-03 Vladimir Serbinenko + + Migrate grub-mkimage.c to argp. + + * Makefile.util.def (grub-mkimage): Add util/argp_common.c. + (grub-setup): Likewise. + * util/grub-setup.c (print_version): Move to ... + * util/argp_common.c (print_version): ... here. + * util/grub-setup.c (argp_program_version_hook): Move to ... + * util/argp_common.c (argp_program_version_hook): ... here. + * util/grub-setup.c (argp_parser): Add exit (1) on fatal error for + safety. + * util/grub-mkimage.c (main): Migrate to argp. + +2012-02-03 Vladimir Serbinenko + + * util/grub-mkrescue.in: Use same message as + util/powerpc/ieee1275/grub-mkrescue.in with %s in place of command + for better translations. + +2012-02-03 Vladimir Serbinenko + + * util/powerpc/ieee1275/grub-mkrescue.in: Gettextize. Unify the command + options with generic grub-mkrescue.in with the goal of future + merge. + +2012-02-03 Vladimir Serbinenko + + * grub-core/kern/mm.c: Add missing include of i18n.h + * grub-core/lib/relocator.c: Likewise. + +2012-02-03 Vladimir Serbinenko + + * grub-core/loader/ia64/efi/linux.c (find_mmap_size): Replace fatal with + error. + (allocate_pages): Check return value. + Replace fatal with error. + (grub_linux_boot): Replace printf with dprintf. + Check find_mmap_size return value. + Replace fatal with error. + Don't call grub_machine_fini. + (grub_load_elf64): Replace printf with dprintf. + (grub_cmd_linux): Likewise. + (grub_cmd_initrd): Likewise. + (grub_cmd_payload): Likewise. + +2012-02-03 Vladimir Serbinenko + + * grub-core/loader/i386/xnu.c (grub_cmd_devprop_load): Fix error + message. + * grub-core/video/radeon_fuloong2e.c + (grub_video_radeon_fuloong2e_setup): Likewise. + * grub-core/video/sis315pro.c (grub_video_sis315pro_setup): Likewise. + * grub-core/video/video.c (grub_video_set_mode): Don't override + standard out of memory message. + +2012-02-03 Grégoire Sutre + + NetBSD disk wedge support. + + * grub-core/kern/emu/hostdisk.c (grub_hostdisk_find_partition_start) + [__NetBSD__]: Handle NetBSD disk wedges. + * util/getroot.c (convert_system_partition_to_system_disk) + [__NetBSD__]: Likewise. + +2012-02-03 Mark Wooding + + * util/grub-mkconfig.in: Use umask rather than chmod to create + grub.cfg.new to avoid insecure grub.cfg. + +2012-02-03 Vladimir Serbinenko + + * grub-core/commands/ls.c: Gettextize. + * grub-core/commands/setpci.c: Likewise. + * grub-core/commands/videotest.c: Likewise. + * grub-core/disk/geli.c: Likewise. + * grub-core/kern/mm.c: Likewise. + * grub-core/lib/relocator.c: Likewise. + * grub-core/loader/efi/appleloader.c: Likewise. + * grub-core/loader/i386/xnu.c: Likewise. + * grub-core/loader/ia64/efi/linux.c: Likewise. + * grub-core/loader/xnu.c: Likewise. + * grub-core/net/dns.c: Likewise. + * grub-core/net/net.c: Likewise. + * grub-core/script/lexer.c: Likewise. + * grub-core/script/parser.y: Likewise. + * grub-core/script/yylex.l: Likewise. + * util/getroot.c: Likewise. + * util/grub-setup.c: Likewise. + +2012-02-03 Vladimir Serbinenko + + * grub-core/fs/reiserfs.c (grub_reiserfs_get_item): Use proper error + number. + +2012-02-03 Vladimir Serbinenko + + * grub-core/disk/ldm.c (grub_util_ldm_embed): Correct error message. + +2012-02-03 Vladimir Serbinenko + + * grub-core/commands/search_file.c (SEARCH_TARGET): Remove obsolete + macro. + * grub-core/commands/search_label.c (SEARCH_TARGET): Likewise. + * grub-core/commands/search_uuid.c (SEARCH_TARGET): Likewise. + +2012-02-03 Vladimir Serbinenko + + * util/grub-mkstandalone.in: Fix help messages. Gettextize. + * util/grub-install.in: Gettextize. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkconfig_lib.in: Replace gettext with echo -n and not echo + if not available. + (grub_warn): Gettextize. + * util/grub-mknetdir.in: Gettextize. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + * po/POTFILES-shell.in: Regenerate. + +2012-02-03 Richard Laager + + * util/grub-mkimage.c (main): Fix format-security warning. + * util/grub-mkrelpath.c (main): Likewise. + * util/grub-probe.c (main): Likewise. + +2012-02-03 Richard Laager + + * util/grub-probe.c (probe): Don't crash on canonicalize_file_name + failure. + Put back lost PRINT_DRIVE. + +2012-02-03 Richard Laager + + * util/getroot.c (find_root_devices_from_libzfs): Fix compilation error. + (grub_guess_root_devices): Replace strlen with sizeof. + Avoid crash. + (find_root_devices_from_poolname): Remove unused variable. + Handle raidzN. + +2012-02-03 Vladimir Serbinenko + + Support install on multi-device filesystems. + + * include/grub/emu/getroot.h (grub_guess_root_device): Renamed to ... + (grub_guess_root_devices): ...this. Return char **. All users updated. + * include/grub/emu/misc.h (grub_find_root_device_from_mountinfo): + Removed. + * util/getroot.c (find_root_device_from_libzfs): Moved pool logic to ... + (find_root_devices_from_poolname): ... here. + (grub_find_root_devices_from_mountinfo): Return char **. Make static. + Support zfs-fuse. + (grub_guess_root_device): Rename to ... + (grub_guess_root_devices): ... this. Return char **. All users updated. + * util/grub-install.in: Handle multi-device filesystems. + * util/grub-probe.c (probe). Make device_names a char **. Add delim + argument. All users updated. + Handle multi-device filesystems. + Use 'delim' as separator. + Remove device check to allow filesystems on file. + (main): Support -0 argument. Handle multi-device. + * util/grub-setup.c (setup): Remove root argument. Handle multi-device. + Fix a cross-device check while on it. + (arguments): Remove root_dev. + (argp_parser): Remove -r. + (main): Remove root_dev. + +2012-02-01 Vladimir Serbinenko + + * grub-core/fs/zfs/zfscrypt.c: Add link to documentation. + +2012-02-01 Vladimir Serbinenko + + * grub-core/commands/videotest.c (grub_cmd_videotest): Fix subset + symbol. + Reported by: NODA, Kai . + +2012-02-01 Vladimir Serbinenko + + Fix ehci on amd64. + + * grub-core/bus/usb/usbhub.c (grub_usb_hub_add_dev): Use %p to print + pointers. + * grub-core/bus/usb/ehci.c (grub_ehci_pci_iter): Likewise. + (grub_ehci_setup_qh): Likewise. + (grub_ehci_find_qh): Likewise. + (grub_ehci_transaction): Likewise. + (grub_ehci_setup_transfer): Likewise. + (grub_ehci_check_transfer): Likewise. + (grub_ehci_portstatus): Likewise. + (grub_ehci_detect_dev): Likewise. + (grub_ehci_transfer_controller_data): New field td_last_phys. + (grub_ehci_setup_transfer): Fill td_last_phys. + (grub_ehci_check_transfer): Use td_last_phys. + +2012-02-01 Seth Goldberg + + * grub-core/normal/context.c (grub_env_extractor_close): Don't crash + if no submenu is present. + +2012-02-01 Aleš Nesrsta + + CBI support. + + * include/grub/usb.h (grub_usbms_protocol_t): New values + GRUB_USBMS_PROTOCOL_CB and GRUB_USBMS_PROTOCOL_CBI. + * grub-core/disk/usbms.c (GRUB_USBMS_CBI_CMD_SIZE): New define. + (GRUB_USBMS_CBI_ADSC_REQ): Likewise. + (grub_usbms_dev): Add subclass, protocol and intrpt. + Remove in_maxsz and out_maxsz. + (grub_usbms_reset): Rename to ... + (grub_usbms_bo_reset): .. this. + (grub_usbms_cbi_cmd): New function. + (grub_usbms_cbi_reset): Likewise. + (grub_usbms_reset): Likewise. + (grub_usbms_attach): Recognize cbi. Same subclass and protocol. + (grub_usbms_transfer): Rename to ... + (grub_usbms_transfer_bo): ... this. + (grub_usbms_transfer_cbi): Likewise. + (grub_usbms_transfer): Likewise. + +2012-02-01 Aleš Nesrsta +2012-02-01 Vladimir Serbinenko + + EHCI support. All of the credit goes to Aleš Nesrsta. I've just added + the support for the CS5536 modification thereos and few bugfixes. + + * grub-core/Makefile.core.def (ehci): New module. + * grub-core/bus/usb/ehci.c: New file. + * grub-core/bus/usb/usbhub.c (grub_usb_hub_add_dev): New arguments + port and hubaddr. All users updated. + Save port and hubaddr into dev structure. + * include/grub/cs5536.h (GRUB_CS5536_MSR_USB_BASE_SMI_ENABLE): New + define. + * include/grub/pci.h (grub_dma_phys2virt): New function. + (grub_dma_virt2phys): Likewise. + * include/grub/usb.h (grub_usb_device): New members port and hubaddr. + +2012-01-31 Vladimir Serbinenko + + * grub-core/fs/fat.c (grub_fat_mount) [!MODE_EXFAT]: Remove fstype + check as some mkfs implementations omit it. + +2012-01-31 Vladimir Serbinenko + + * docs/grub.texi (Unicode): Mention identifier and space limitations. + +2012-01-31 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_sblock): Make volname a char array. + Add new member volname2. + (grub_jfs_label): Use volname2 if available. + +2012-01-31 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_super_block): Expand volume_name + over last_mounted as seen in image generated by mkfs.nilfs2. + (grub_nilfs2_label): Use sizeof for the size of s_volume_name. + +2012-01-31 Vladimir Serbinenko + + * grub-core/fs/fat.c (grub_fat_dir_entry) [MODE_EXFAT]: Expand label + to 15 UTF-16 characters as seen in FS generated by mkexfatfs. + (grub_fat_label) [MODE_EXFAT]: Use macros for size. + +2012-01-31 Vladimir Serbinenko + + * grub-core/fs/romfs.c (grub_romfs_mount): Fix a bug with labels going + over the sector. + +2012-01-31 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (get_filesystem_dnode): Support space in + subvolume name (by removing a bogus and useless check). + +2012-01-31 Vladimir Serbinenko + + * grub-core/fs/ext2.c (grub_ext2_label): Fix field size. Change to + sizeof while on it. + +2012-01-30 Vladimir Serbinenko + + * grub-core/disk/scsi.c (grub_scsi_read_capacity): Renamed to ... + (grub_scsi_read_capacity10): ... this. + (grub_scsi_read_capacity16): New function. + (grub_scsi_open): Use read_capacity16 if read_capacity10 returned + 0xffffffff. + Fix off-by-one error. + * include/grub/scsi.h (grub_scsi): Rename size to last_block and make it + 64-bit unsigned. + * include/grub/scsicmd.h (grub_scsi_read_capacity): Rename to ... + (grub_scsi_read_capacity10): ... this. + (grub_scsi_read_capacity_data): Rename to ... + (grub_scsi_read_capacity10_data): ... this. Rename size to last_block. + (grub_scsi_read_capacity16): New struct. + (grub_scsi_read_capacity16_data): Likewise. + (grub_scsi_cmd_t): Rename grub_scsi_cmd_read_capacity to + grub_scsi_cmd_read_capacity10. + New command grub_scsi_cmd_read_capacity16. + +2012-01-30 Vladimir Serbinenko + + SCSI >2TiB support. + + * grub-core/disk/scsi.c (grub_scsi_read16): New function. + (grub_scsi_write16): Likewise. + (grub_scsi_read): Use read16 when necessary. + (grub_scsi_write): Likewise. + * include/grub/scsicmd.h (grub_scsi_read16): New struct. + (grub_scsi_write16): Likewise. + (grub_scsi_cmd_t): Add READ16 and WRITE16. + +2012-01-30 Vladimir Serbinenko + + SCSI write support (for usbms mainly). + + * grub-core/disk/scsi.c (grub_scsi_write10): Uncomment. Make buffer + a const pointer. + (grub_scsi_write): Implement. + * include/grub/scsi.h (grub_scsi_dev): Make write buffer a const pointer + +2012-01-30 Vladimir Serbinenko + + * grub-core/io/lzopio.c (uncompress_block): Fix use of incorrect + variable. + +2012-01-29 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/string.h (memchr): New function. + +2012-01-29 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. + +2012-01-29 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/assert.h (assert_real): Replace grub_fatal + with grub_printf to avoid unnecessary fatal failure. + +2012-01-29 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/limits.h (SHRT_MAX): New define. + (INT_MAX): Likewise. + * grub-core/lib/posix_wrap/stdio.h (snprintf): New function. + * grub-core/lib/posix_wrap/stdlib.h (abs): Likewise. + * grub-core/lib/posix_wrap/string.h (memcmp): Likewise. + (strcpy): Likewise. + (strstr): Likewise. + (strchr): Likewise. + (strncpy): Likewise. + (strcat): Likewise. + (strncat): Likewise. + (strcoll): Likewise. + * include/grub/types.h (GRUB_SHRT_MAX): New define. + (GRUB_INT_MAX): Likewise. + +2012-01-29 Vladimir Serbinenko + + * grub-core/gnulib/regcomp.c (regerror): Don't use abort on + unexpected error. + (optimize_utf8): Likewise. + * grub-core/lib/posix_wrap/stdlib.h (abort): Removed. + +2012-01-29 Vladimir Serbinenko + + * grub-core/boot/i386/pc/lnxboot.S: Use + GRUB_DECOMPRESSOR_MAX_DECOMPRESSOR_SIZE. + * grub-core/boot/i386/pc/startup_raw.S: Ensure about boot_dev + location. + * include/grub/offsets.h (GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE): New + definition. + (GRUB_DECOMPRESSOR_I386_PC_MAX_DECOMPRESSOR_SIZE): Likewise. + +2012-01-29 Vladimir Serbinenko + + * util/getroot.c (grub_util_get_dm_node_linear_info): Fix memory leak. + * grub-core/disk/cryptodisk.c (cryptodisk_cleanup): Disable for + now to avoid double free. + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_dev): Rename to + hostdisk. + * include/grub/disk.h (grub_disk_dev_id): New id HOSTDISK. + * util/grub-probe.c (escape_of_path): Always return a new copy. + (print_full_name): Escape path. + (probe): Don't call grub_util_devname_to_ofpath on NULL. + Fix hints on abstractions. + +2012-01-29 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): + Don't add "root" line if no compatibility hont is available. + Suggested by: Seth Goldberg. + +2012-01-29 Vladimir Serbinenko + + * include/grub/ata.h (grub_ata): Add a new element maxbuffer. + * grub-core/disk/ata.c (grub_ata_readwrite): Limit to ata->maxbuffer. + * grub-core/disk/pata.c (grub_pata_open): Set ata->maxbuffer. + * grub-core/disk/ahci.c (grub_ahci_open): Likewise. + +2012-01-29 Vladimir Serbinenko + + * include/grub/zfs/dnode.h (DN_MIN_INDBLKSHIFT): Removed. + +2012-01-29 Vladimir Serbinenko + + * util/grub-pe2elf.c (ehdr): Make static. + (shdr): Likewise. + (num_sections): Likewise. + (offset): Likewise. + +2012-01-29 Vladimir Serbinenko + + Eliminate ofpath limits and possible overflows. + + * util/ieee1275/ofpath.c (grub_util_info) [STANDALONE]: New function. + (OF_PATH_MAX): Removed. + (MAX_DISK_CAT): New const. + (find_obppath): Use allocated rather than preallocated buffer. + Return result. Argument of_path removed. All users updated. + Add missing fdstat. + (xrealpath): New function. + (block_device_get_sysfs_path_and_link): Remove sysfs argument. + Allocate rather than use preallocated buffer. All users updated. + (__of_path_common): Use allocated rather than preallocatecd buffer. + Return result. Argument of_path removed. All users updated. + (vendor_is_ATA): Read only needed part form the file. + (check_sas): Allocate depending on contents rather than fixed. + (main) [STANDALONE]: Handle NULL result. + +2012-01-29 Vladimir Serbinenko + + * grub-core/normal/completion.c (iterate_dev): Close the disk. + +2012-01-29 Vladimir Serbinenko + + Cryptodisk write support. + + * grub-core/disk/cryptodisk.c (grub_crypto_pcbc_encrypt): New function. + (grub_cryptodisk_decrypt): Moved logic to ... + (grub_cryptodisk_endecrypt): ...this. New argument "encrypt". + (grub_cryptodisk_write): Implement. + * grub-core/kern/emu/hostdisk.c (nwrite): Rename to ... + (grub_util_fd_write): ... this. Make global. + * include/grub/emu/hostdisk.h (grub_util_fd_write): New proto. + +2012-01-29 Vladimir Serbinenko + + * include/grub/list.h (grub_list_remove): Don't crash if element is + removed twice. + +2012-01-29 Vladimir Serbinenko + + Rename ofconsole to console. + + * grub-core/commands/terminal.c (handle_command): Handle ofconsole + as sysnonym to console. + * grub-core/term/ieee1275/ofconsole.c: Renamed to .. + * grub-core/term/ieee1275/console.c: ... this. All users updated. + Rename grub_ofconsole_ to grub_console_. All users updated + (grub_console_term_output): Rename "ofconsole" to "console". + * grub-core/term/terminfo.c (grub_cmd_terminfo): Handle "ofconsole" + as "console". + +2012-01-29 Vladimir Serbinenko + + * grub-core/loader/i386/pc/plan9.c (grub_cmd_plan9): Remove PXE + handling. + * include/grub/disk.h (grub_disk_dev_id): Remove obsolete + GRUB_DISK_DEVICE_UUID_ID, GRUB_DISK_DEVICE_PXE_ID and + GRUB_DISK_DEVICE_FILE_ID. + +2012-01-29 Vladimir Serbinenko + + * grub-core/kern/partition.c (grub_partition_get_name): Simplify logic + and improve performance. + +2012-01-29 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_encode_devname): Fix + missing ieee1275/ prefix on whole disk. + +2012-01-29 Vladimir Serbinenko + + * include/grub/powerpc/ieee1275/util/biosdisk.h: Remove. + * include/grub/powerpc/ieee1275/biosdisk.h: Likewise. + +2012-01-29 Vladimir Serbinenko + + * grub-core/fs/cpio.c (handle_symlink): Fix a bug. + +2012-01-29 Vladimir Serbinenko + + Merge common RAID and LVM logic to an abstract diskfilter. + Add LDM support using the same framework. + + * Makefile.util.def (libgrubkern): Add grub-core/disk/ldm.c, + grub-core/disk/diskfilter.c and grub-core/partmap/gpt.c. + (libgrubmods): Remove grub-core/disk/raid.c and + grub-core/partmap/gpt.c. + * grub-core/Makefile.core.def (ldm): New module. + (raid): Renamed to diskfilter. All users updated. + * grub-core/disk/raid.c: Moved to ... + * grub-core/disk/diskfilter.c: ... here. + * grub-core/disk/diskfilter.c: Rename grub_raid_ to grub_diskfilter_. + (lv_num): New var. + (find_array): Renamed to ... + (find_lv): ... this. Support multi-LV. Skip nameless LVs + (grub_is_array_readable): Renamed to ... + (grub_is_lv_readable): ... this. Support multinode hierarchy. + (insert_array): New argument id. + (is_node_readable): New function. + (scan_device): Rename to ... + (scan_disk): .. this. Restrict to one disk. + (scan_devices): New function. + (grub_diskfilter_iterate): Support multi-LV. + Skip invisible and nameless LVs. + (grub_diskfilter_memberlist): Support multi-LV. + (grub_diskfilter_read_node): New function. + (grub_raid_read): Most of logic moved to ... + (read_segment): ... here + (read_lv): New function. + (grub_diskfilter_get_vg_by_uuid): New function. + (grub_diskfilter_make_raid): Likewise. + * grub-core/disk/ldm.c: New file. + * grub-core/disk/lvm.c (vg_list): Removed. + (lv_count): Likewise. + (scan_depth): Likewise. + (is_lv_readable): Likewise. + (grub_lvm_getvalue): Advance pointer past the number. + (find_lv): Removed. + (do_lvm_scan): Refactored into ... + (grub_lvm_detect): ... this. Support raid. + (grub_lvm_iterate): Removed. + (grub_lvm_memberlist): Likewise. + (grub_lvm_open): Likewise. + (grub_lvm_close): Likewise. + (read_lv): Likewise. + (read_node): Likewise. + (is_node_readable): Likewise. + (is_lv_readable): Likewise. + (grub_lvm_read): Likewise. + (grub_lvm_write): Likewise. + (grub_lvm_dev): Use diskfilter + (GRUB_MOD_INIT): Likewise. + (GRUB_MOD_FINI): Likewise. + * grub-core/disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Use + new interface. + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Likewise. + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Likewise. + * grub-core/disk/raid5_recover.c (grub_raid5_recover): Use + grub_diskfilter_read_node. + Fix a bug with xor. + * grub-core/disk/raid6_recover.c (grub_raid6_recover): Use + grub_diskfilter_read_node. + Support GRUB_RAID_LAYOUT_MUL_FROM_POS. + * grub-core/kern/disk.c (grub_disk_dev_list): Make global. + (grub_disk_dev_iterate): Move from here... + * include/grub/disk.h (grub_disk_dev_iterate): ... to here. Inlined. + * grub-core/kern/emu/hostdisk.c (grub_hostdisk_find_partition_start): + Make global. + (grub_hostdisk_find_partition_start): Likewise. + (grub_hostdisk_os_dev_to_grub_drive): New function. + (grub_util_biosdisk_get_osdev): Check that disk is biosdisk. + * grub-core/kern/emu/hostdisk.c (make_device_name): Move to ... + * util/getroot.c (make_device_name): ... here. + * grub-core/kern/emu/hostdisk.c (grub_util_get_dm_node_linear_info): + Move to ... + * util/getroot.c (grub_util_get_dm_node_linear_info): ...here. + * grub-core/kern/emu/hostdisk.c + (convert_system_partition_to_system_disk): Move to ... + * util/getroot.c (convert_system_partition_to_system_disk): ...here. + * grub-core/kern/emu/hostdisk.c (device_is_wholedisk): Move to ... + * util/getroot.c (device_is_wholedisk): ... here. + * grub-core/kern/emu/hostdisk.c (find_system_device): Move to ... + * util/getroot.c (find_system_device): ... here. + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_present): + Move to ... + * util/getroot.c (grub_util_biosdisk_is_present): ...here. + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev): + Move to ... + * util/getroot.c (grub_util_biosdisk_get_grub_dev): ... here. + Handle LDM. + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy): + Move to ... + * util/getroot.c (grub_util_biosdisk_is_floppy): ... here. + * grub-core/partmap/gpt.c (grub_gpt_partition_map_iterate): Made global. + * include/grub/disk.h (grub_disk_dev_id): Replaced RAID and LVM with + DISKFILTER. + * include/grub/raid.h: Renamed to ... + * include/grub/diskfilter.h: ... this. + * include/grub/diskfilter.h: Rename grub_raid_* to grub_diskfilter_* + (GRUB_RAID_LAYOUT_*): Make into array. + (GRUB_RAID_LAYOUT_MUL_FROM_POS): New value. + (grub_diskfilter_vg): New struct. + (grub_diskfilter_pv_id): Likewise. + (grub_raid_member): Removed. + (grub_raid_array): Likewise. + (grub_diskfilter_pv): New struct. + (grub_diskfilter_lv): Likewise. + (grub_diskfilter_segment): Likewise. + (grub_diskfilter_node): Likewise. + (grub_diskfilter_get_vg_by_uuid): New proto. + (grub_raid_register): Inline. + (grub_diskfilter_unregister): Likewise. + (grub_diskfilter_make_raid): New proto. + (grub_diskfilter_vg_register): Likewise. + (grub_diskfilter_read_node): Likewise. + (grub_diskfilter_get_pv_from_disk) [GRUB_UTIL]: Likewise. + * include/grub/emu/hostdisk.h (grub_util_get_ldm): New proto. + (grub_util_is_ldm): Likewise. + (grub_util_ldm_embed) [GRUB_UTIL]: Likewise. + (grub_hostdisk_find_partition_start): Likewise. + (grub_hostdisk_os_dev_to_grub_drive): Likewise. + * include/grub/gpt_partition.h (GRUB_GPT_PARTITION_TYPE_LDM): + New definition. + (grub_gpt_partition_map_iterate): New proto. + * include/grub/lvm.h (grub_lvm_vg): Removed. + (grub_lvm_pv): Likewise. + (grub_lvm_lv): Likewise. + (grub_lvm_segment): Likewise. + (grub_lvm_node): Likewise. + * util/getroot.c [...] + * util/grub-probe.c (probe_raid_level): Handle diskfilter. + (probe_abstraction): Likewise. + * util/grub-setup.c (setup): Remove must_embed. Support LDM. + (main): Remove dead logic. + +2012-01-28 Vladimir Serbinenko + + Simplify root device discover and don't fail when trying to open + incorrect devices. + + * grub-core/disk/efi/efidisk.c (get_diskname_from_path_real): New + function. + (get_diskname_from_path): Likewise. + (grub_efidisk_get_device_name): Use get_diskname_from_path instead + of iterating. + +2012-01-27 Vladimir Serbinenko + + * grub-core/Makefile.core.def (setpci): Enable on all PCI platforms. + +2012-01-27 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (nvlist_find_value): Check that we don't go + pastthe end. + +2012-01-27 Vladimir Serbinenko + + * util/grub-install.in: Add missing \. + Reported by: gentoofan + +2012-01-26 Vladimir Serbinenko + + * grub-core/fs/squash4.c (xz_decompress): Fix return value. + (direct_read): Use correct compressed size. + (grub_squash_read_data): Likewise. + +2012-01-26 Vladimir Serbinenko + + * docs/grub.texi (Platform limitations): New section. + (Platform-specific operations): Likewise. + * docs/grub-dev.texi (Porting): Likewise. + +2012-01-25 Vladimir Serbinenko + + IEEE1275 disk write support. + + * grub-core/kern/ieee1275/ieee1275.c (grub_ieee1275_write): Make buffer + const void *. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_write): Likewise. + * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_read): Move open + and seek loginc to ... + (grub_ofdisk_prepare): ... here. + (grub_ofdisk_write): Implement. + +2012-01-25 Vladimir Serbinenko + + ARC disk write support. + + * grub-core/disk/arc/arcdisk.c (handle_writable): New var. + (reopen): New argument writable. All users updated. + Handle required access mode. + (grub_arcdisk_write): Implement. + * include/grub/arc/arc.h (grub_arc_file_access): New enum. + (grub_arc_firmware_vector): Make buffer to write a const buffer. + +2012-01-25 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_device): New field size. + (read_sblock): Don't attempt to read superblocks outside the disk size. + +2012-01-25 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Use device size from + first superblock to find the second one when possible. + +2012-01-25 Vladimir Serbinenko + + * util/grub-install.in: Fix an ARC bug. + Print a warning if no platform-specific setup is available. + +2012-01-24 Vladimir Serbinenko + + Use static allocation rather than scratch pointer in reed_solomon. + It decreases its size significantly and avoids a variable in .text. + + * grub-core/lib/reed_solomon.c (scratch): Removed. + (chosenstat): New const or static array. + (sigma): Likewise. + (errpot): Likewise. + (errpos): Likewise. + (sy): Likewise. + (mstat): Likewise. + (errvals): Likewise. + (eqstat): Likewise. + (pol_evaluate): Replace x with log_x argument. All users updated. + (syndroms): Removed. + (gauss_solve): Use statically allocated arrays. + (rs_recover): Likewise. + Calculate syndroms directly. + (decode_block): Use statically allocated arrays. + (grub_reed_solomon_add_redundancy) [TEST]: Fix -DTEST compilation. + (main) [TEST]: Allow -DTEST -DSTANDALONE. + +2012-01-24 Vladimir Serbinenko + + Eliminate fixed limit on reed solomon decoder length. + + * grub-core/boot/i386/pc/lnxboot.S: Scan for multiboot signature + rather than hardcoding the address. + * grub-core/boot/i386/pc/startup_raw.S: Add new data field + no_reed_solomon_length. + Move gate_a20 to no-reed-solomon part. + Don't force a particular size of no reed-solomon part. + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_PART): + Removed. + (GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH): New define. + * util/grub-setup.c (setup): Read no_rs_length from the image itself. + +2012-01-24 Vladimir Serbinenko + + * grub-core/commands/wildcard.c (match_files): Handle filenames + without explicit device. + (wildcard_expand): Don't add explicit device if not already present. + * tests/grub_script_echo1.in: Add a new expansion test. + +2012-01-24 Vladimir Serbinenko + + Replace single-linked with double-linked lists. It results in more + compact and more efficient code. + + * grub-core/kern/list.c (grub_list_push): Moved from here ... + * include/grub/list.h (grub_list_push): ... to here. Set prev. + (grub_list_remove): Moved from here ... + * include/grub/list.h (grub_list_remove): ... here. Use and set prev. + (grub_prio_list_insert): Set prev. + * include/grub/list.h (grub_list): Add prev. All users updated. + +2012-01-24 Vladimir Serbinenko + + Handle newer autotools. Add some missing quotes while on it. + + * Makefile.am (pkglib_DATA): Remove update-grub_lib. + (pkglib_DATA): Move grub-mkconfig_lib from here ... + (pkgdata_DATA): ... here. + * Makefile.util.def (update-grub_lib): Removed. + * conf/Makefile.common (pkglib_DATA): Removed. + (pkglib_SCRIPTS): Likewise. + (pkgdata_DATA): New variable. + * tests/util/grub-shell-tester.in: Replace pkglib with pkgdata where + needed. + Add missing quotes. + Remove unused variable while on it. + * tests/util/grub-shell.in: Likewise. + * util/grub-install.in: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/grub-mknetdir.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-mkstandalone.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_illumos.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + * util/update-grub_lib.in: Removed. + +2012-01-24 Seth Goldberg + + * grub-core/net/drivers/i386/pc/pxe.c (grub_pxe_recv): Relax checks as + a workaround for intel problem. + +2012-01-23 Paulo de Rezende Pinatti +2012-01-23 Vladimir Serbinenko +2012-01-23 pfsmorigo + + * util/grub-install.in: Support dd'in into PreP partition. + * util/grub-probe.c (probe): Support discovering partition type. + (main): Support -t msdos_parttype. + +2012-01-23 Vladimir Serbinenko + + * grub-core/normal/crypto.c (grub_crypto_autoload): Prevent + infinite recursion using counter. + * grub-core/lib/xzembed/xz_dec_stream.c (xz_dec_init): Defer s->crc32 + init to skip it if the magic check fails. + (dec_stream_header): Init s->crc32. + +2012-01-22 Vladimir Serbinenko +2012-01-22 Zachary Bedell +2012-01-22 Richard Laager + + * grub-core/fs/zfs/zfs.c (uberblock_verify): New parameter size. + All users updated. + (find_bestub): Determine correct size. + (fill_vdev_info_real): Fill ashift. New argument. All users updated. + (scan_disk): Align the size down. + Call check pool before find_bestub to have ashift. + +2012-01-22 Vladimir Serbinenko + + * grub-core/lib/relocator.c (malloc_in_range): Remove couple of + dprintf in no-malloc zone. + +2012-01-22 Mario Limonciello + + * configure.ac: Add back in test for limits.h. + +2012-01-20 Vladimir Serbinenko + + Support 4K-sector NTFS. + + * include/grub/ntfs.h (GRUB_NTFS_MAX_MFT): Increase to 8. + (grub_ntfs_data): Remove blocksize. + * grub-core/fs/ntfs.c (fixup): Fix size comparison. + Remove data argument. All users updated. + +2012-01-20 Vladimir Serbinenko + + * grub-core/kern/mips/arc/init.c (grub_total_modules_size): Mark as + being in .text to avoid dprel references. + * include/grub/mips/loongson/kernel.h (grub_arch_machine): Likewise. + * include/grub/mips/loongson/memory.h (grub_arch_memsize): Likewise. + (grub_arch_highmemsize): Likewise. + * include/grub/mips/loongson/time.h (grub_arch_busclock): Likewise. + * include/grub/mips/qemu_mips/memory.h (grub_arch_memsize): Likewise. + * include/grub/mips/time.h (grub_arch_cpuclock): Likewise. + +2012-01-18 Vladimir Serbinenko + + Support powerpc with GCC that defines __PPC__ but not __powerpc__. + + * config.h.in (__powerpc__) [__PPC__ && !__powerpc__]: New definition. + * grub-core/lib/setjmp.S: Treat __PPC__ as equivalent to __powerpc__. + +2012-01-18 Vladimir Serbinenko + + * include/grub/datetime.h (grub_get_datetime_cmos): Don't define in + GRUB_UTIL. + (grub_set_datetime_cmos): Likewise. + +2012-01-18 Vladimir Serbinenko + + Make XZ compression parameters dependent on target and not host CPU. + + * configure.ac: Define GRUB_TARGET_CPU_XYZ series. + * grub-core/lib/xzembed/xz_config.h: Use GRUB_TARGET_CPU_XYZ. + +2012-01-18 Vladimir Serbinenko + + * grub-core/kern/powerpc/dl.c (grub_arch_dl_get_tramp_got_size): Remove + set but not used variable. + +2012-01-14 Vladimir Serbinenko + + * grub-core/fs/reiserfs.c (grub_reiserfs_uuid): Reject 0-uuid as + created when no uuid support is compiled into mkfs.reiser. + +2012-01-14 Vladimir Serbinenko + + * grub-core/fs/hfs.c (macroman_to_utf8): Convert / to :. + (utf8_to_macroman): Do the opposite. + * grub-core/fs/hfsplus.c (grub_hfsplus_iterate_dir): Convert / to :. + +2012-01-14 Vladimir Serbinenko + + * configure.ac: Refise build qemu_mips w/o unifont. + +2012-01-14 Vladimir Serbinenko + + Eliminate grub_min/grub_max prone to overflow usage. + + * grub-core/bus/usb/usbhub.c (grub_usb_add_hub): Eliminate grub_min. + (poll_nonroot_hub): Likewise. + * grub-core/fs/affs.c (grub_affs_iterate_dir): Likewise. + (grub_affs_label): Likewise. + * grub-core/fs/btrfs.c (grub_btrfs_lzo_decompress): Likewise. + * grub-core/fs/hfs.c (grub_hfs_dir): Likewise. + (grub_hfs_label): Likewise. + * grub-core/fs/hfsplus.c (grub_hfsplus_cmp_catkey): Likewise. + * grub-core/fs/zfs/zfs.c (MIN): Remove. + (zap_leaf_array_equal): Use grub_size. Remove MIN. + (zap_leaf_array_get): Likewise. + (dnode_get_path): Likewise. + * grub-core/io/lzopio.c (grub_lzopio_read): Eliminate grub_min. + * grub-core/io/xzio.c (grub_xzio_read): Likewise. + * grub-core/script/execute.c (grub_script_break): Likewise. + * grub-core/script/lexer.c (grub_script_lexer_record): Eliminate + grub_max. + * grub-core/script/yylex.l (grub_lexer_yyrealloc): Likewise. + * include/grub/misc.h (grub_min): Removed. + (grub_max): Likewise. + +2012-01-14 Samuel Thibault + + * grub-core/fs/ext2.c (grub_ext2_iterate_dir): Ignore entries with + direct.inode = 0. + +2012-01-14 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/wctype.h (CHARCLASS_NAME_MAX): New define. + +2012-01-14 Vladimir Serbinenko + + * include/grub/datetime.h (grub_datetime2unixtime): Fix offset. + +2012-01-14 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/stdlib.h (MB_CUR_MAX): Moved from here ... + * grub-core/lib/posix_wrap/wchar.h (MB_CUR_MAX): ... here. Value fixed. + +2012-01-14 Vladimir Serbinenko + + * grub-core/fs/fshelp.c (grub_fshelp_find_file): Use grub_strcasecmp + rather than a hack for grub_strncasemap. + +2012-01-14 Vladimir Serbinenko + + Support multiple initrds + Note: part of this was accidently committed in r3739. + + * grub-core/loader/i386/linux.c (grub_cmd_initrd): Support multiple + initrd. + * grub-core/loader/i386/pc/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/ia64/efi/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/mips/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_initrd): Likewise. + +2012-01-14 Vladimir Serbinenko + + * grub-core/disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Skip + disks with unknown size. + * grub-core/disk/raid.c (scan_devices): Allow disks with unknown sizes. + +2012-01-14 Vladimir Serbinenko + + Remove defines pertaining to arbitrary limits not affecting GRUB + anymore. + + * grub-core/fs/ext2.c (EXT2_PATH_MAX): Removed. + (EXT2_MAX_SYMLINKCNT): Likewise. + * grub-core/fs/nilfs2.c (NILFS_BTREE_LEVEL_MAX): Likewise. + * grub-core/net/tftp.c (TFTP_MAX_PACKET): Likewise. + * include/grub/i386/pc/pxe.h (GRUB_PXE_MIN_BLKSIZE): Likewise. + (GRUB_PXE_MAX_BLKSIZE): Likewise. + * include/grub/normal.h (GRUB_MAX_CMDLINE): Likewise. + * include/grub/zfs/dnode.h (DN_MAX_INDBLKSHIFT): Likewise. + (DN_MAX_OBJECT_SHIFT): Likewise. + (DN_MAX_OFFSET_SHIFT): Likewise. + (DN_MAX_OBJECT): Likewise. + (DNODES_PER_LEVEL_SHIFT): Likewise. + * include/grub/zfs/spa.h (SPA_MAXBLOCKSHIFT): Likewise. + (SPA_MAXBLOCKSIZE): Likewise. + (SPA_BLOCKSIZES): Likewise. + * include/grub/zfs/zap_impl.h (MZAP_MAX_BLKSHIFT): Likewise. + (MZAP_MAX_BLKSZ): Likewise. + +2012-01-14 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (grub_zfs_read): Remove useless alloc and + handle NULL appropriately. + Remove MIN. + +2012-01-13 Vladimir Serbinenko + + Fix efiemu. + + * grub-core/efiemu/runtime/efiemu.c: explicitly include right + cpu/types.h. + (efiemu_set_virtual_address_map): Remove UINT_TO_PTR. + * configure.ac: Fix efiemu check. + +2012-01-13 Vladimir Serbinenko + + * util/grub.d/30_os-prober.in: Fix occurence of grub-probe instead of + grub_probe. + Reported by: adamwill + +2012-01-12 Seth Goldberg + + * grub-core/lib/arg.c (grub_arg_parse): Fix NULL pointer dereference. + +2012-01-12 Vladimir Serbinenko + + Fix handling of wide characters in gfxterm. + + * grub-core/term/gfxterm.c (grub_colored_char): Remove width and index. + (clear_char): Likewise. + (paint_char): Skip code == NULL chars. + (grub_gfxterm_putchar): Set code = NULL on "shadowed" positions. + +2012-01-12 Vladimir Serbinenko + + * grub-core/normal/charset.c: Move comment to right place. + +2012-01-11 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_bblock): Revert flags. + (GRUB_AFFS_FLAG_FFS): Put back where it was. + (grub_affs_mount): Revert the correct version checking. + +2012-01-11 Vladimir Serbinenko + + * docs/grub.texi (Unicode): Mention several other unsupported features. + +2011-12-26 Vladimir Serbinenko + + * grub-core/fs/squash4.c (squash_mount): Mark endian conversion in + case statements as compile-time one. + (direct_read): Prevent spurious warnings. + (grub_squash_read_data): Likewise. + +2011-12-26 Vladimir Serbinenko + + Various squash4 fixes and LZO and XZ support. + + * Makefile.util.def (libgrubmods.a): Add xzembed directory to cppflags. + Add xzembed source files. + * grub-core/Makefile.core.def (squash4): Add xzembed and minilzo flags. + * grub-core/fs/squash4.c (grub_squash_super): New field compression. + (grub_squash_inode): New subtype long_dir. + (SQUASH_TYPE_LONG_DIR): New inode type. + (COMPRESSION): New enum. + (XZBUFSIZ): New const. + (grub_squash_data): New fields blksz, decompress, xzdec, xzbuf. + (read_chunk): Use data->decompress. + (zlib_decompress): New function. + (lzo_decompress): Likewise. + (xz_decompress): Likewise. + (squash_mount): Set new data fields. + (grub_squash_iterate_dir): Handle long dir. + (squash_unmount): Free xzdec and xzbuf. + (grub_squash_open): Check ino type. + (direct_read): Stylistic fixes. Use data->decompress. + (grub_squash_read_data): Likewise. + * grub-core/io/gzio.c (grub_gzio): Remove disk_input. + (get_byte): Likewise. + (grub_zlib_disk_read): Removed. + * grub-core/lib/posix_wrap/sys/types.h (ssize_t): New type. + (GRUB_POSIX_BOOL_DEFINED): New define. + * grub-core/lib/posix_wrap/unistd.h: Include sys/types.h. + * grub-core/lib/xzembed/xz.h: Addmissing includes. + [!GRUB_POSIX_BOOL_DEFINED]: Define bool. + * include/grub/deflate.h (grub_zlib_disk_read): Removed. + +2011-12-26 Vladimir Serbinenko + + Don't override more informative errors. + + * grub-core/commands/acpi.c (grub_cmd_acpi): Don't override errors. + * grub-core/font/font.c (open_section): Likewise. + * grub-core/loader/i386/bsd.c (grub_bsd_load_aout): New argument + filename. Don't override errors. + (grub_cmd_openbsd_ramdisk): Don't override errors. + * grub-core/loader/i386/linux.c (grub_cmd_linux): Likewise. + (grub_cmd_initrd): Likewise. + * grub-core/loader/i386/pc/linux.c (grub_cmd_linux): Likewise. + (grub_cmd_initrd): Likewise. + * grub-core/loader/ia64/efi/linux.c (grub_load_elf64): Likewise. + (grub_cmd_linux): Likewise. + (grub_cmd_initrd): Likewise. + (grub_cmd_payload): Likewise. + * grub-core/loader/mips/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/multiboot.c (grub_cmd_multiboot): Likewise. + (grub_cmd_module): Likewise. + * grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_initrd): Likewise. + * grub-core/loader/xnu.c (grub_xnu_load_driver): Likewise. + (grub_cmd_xnu_mkext): Likewise. + (grub_cmd_xnu_ramdisk): Likewise. + (grub_xnu_check_os_bundle_required): Likewise. + (grub_xnu_load_kext_from_dir): Likewise. + (grub_cmd_xnu_kextdir): Likewise. + * grub-core/loader/xnu_resume.c (grub_xnu_resume): Likewise. + +2011-12-25 Vladimir Serbinenko + + * grub-core/fs/minix.c (grub_minix_mount) [MODE_MINIX3]: Treat 0xffff + as 1024 in block size field. Found on one of my test images. + Small optimisation while on it. + +2011-12-25 Vladimir Serbinenko + + * docs/grub.texi (Filesystems): Mention SFS as Latin1 filesystem. + * grub-core/fs/sfs.c (grub_sfs_mount): Fix a memory leak while on it. + (grub_sfs_iterate_dir): Convert Latin1 to UTF8. Stylistic and + performance fixes while on it. + (grub_sfs_close): Fix memory leak while on it. + (grub_sfs_label): Convert Latin1 to UTF-8. + +2011-12-25 Vladimir Serbinenko + + * grub-core/fs/hfs.c (grub_hfs_dir): Cap keylen to actually available + space to avoid overflows. + (grub_hfs_label): Convert from macroman to UTF-8. + +2011-12-25 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_label): Interpret label as latin1. + +2011-12-25 Vladimir Serbinenko + + * grub-core/normal/menu.c (menu_init): Don't stop menu init at gfxterm. + +2011-12-25 Vladimir Serbinenko + + * unicode: Import Unicode 6.0 data. + +2011-12-25 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (grub_gfxterm_putchar): Don't set values + outside of range. + +2011-12-25 Vladimir Serbinenko + + Avoid cutting in the middle of UTF-8 character. + + * include/grub/charset.h (grub_getend): New function. + * grub-core/script/function.c (grub_script_function_find): Use + grub_getend. + * grub-core/normal/completion.c (add_completion): Likewise. + +2011-12-25 Vladimir Serbinenko + + * grub-core/normal/charset.c (grub_ucs4_to_utf8): Small stylistic fix. + (grub_bidi_line_logical_to_visual): Skip tags. They are deprecated. + * include/grub/unicode.h (GRUB_UNICODE_TAG_START): New enum value. + (GRUB_UNICODE_TAG_END): Likewise. + (GRUB_UNICODE_LAST_VALID): Likewise. + +2011-12-25 Vladimir Serbinenko + + * include/grub/unicode.h (grub_unicode_compact_range): Replace end with + len and make it smaller. All users updated. + * util/import_unicode.py: Put length and not end character. + Check length. + +2011-12-25 Vladimir Serbinenko + + Make better Unicode-compliant and unify some UTF-8 code pathes. + + * grub-core/normal/charset.c (grub_utf8_to_utf16): Don't eat possibly + valid character. + (grub_is_valid_utf8): Use grub_utf8_process. + Check resulting code range. + (grub_utf8_to_ucs4): Use grub_utf8_process. + * include/grub/charset.h (grub_utf16_to_utf8): Don't eat up a possibly + valid character. + +2011-12-25 Vladimir Serbinenko + + * grub-core/io/bufio.c (grub_bufio_read): Fix handling of corner cases. + +2011-12-25 Vladimir Serbinenko + + * docs/grub.texi (Filesystems): Mention AFS. + +2011-12-25 Vladimir Serbinenko + + * docs/grub.texi (Filesystems): Clarify restrictions. + (Regexp): Mention non-Unicode regexp behaviour. + (Other): Mention non-Unicode matching behaviour. + +2011-12-24 Vladimir Serbinenko + + Make HFS implementation use MacRoman. + + * grub-core/fs/hfs.c (MAX_UTF8_PER_MAC_ROMAN): New define. + (macroman): New const array. + (macroman_to_utf8): New function. + (utf8_to_macroman): Likewise. + (grub_hfs_find_dir): Use utf8_to_macroman. + (grub_hfs_dir): Use macroman_to_utf8. + Set case_insensitive. + +2011-12-24 Vladimir Serbinenko + + * docs/grub.texi (Filesystems): Add IEEE1275 full-path example. + +2011-12-24 Vladimir Serbinenko + + Integrate hints into autogeneration scripts. + + * docs/grub.texi (Filesystems): Add a hostdisk example. + * Makefile.util.def (grub-mkdevicemap): Remove ofpath. + (grub-probe): Add ofpath. + * gentpl.py: Remove group nosparc64. + * grub-core/commands/search.c (cache_entry): New struct. + (cache): New var. + (FUNC_NAME): Use and save cache. Fix handling of trailing comma. + * grub-core/commands/search_wrap.c (options): Add platform-specific + hint options. + (grub_cmd_search): Handle platform-specific hints. + (GRUB_MOD_INIT): Declare grub_cmd_search as accept_dash. + * grub-core/kern/emu/hostdisk.c (map): New field device_map. + (grub_util_biosdisk_data): Likewise. + (grub_util_biosdisk_open): Set device_map. + (read_device_map): Handle "" as indication of no map. + Set device_map. + (find_system_device): Add hostdisk/ prefix for autogenerated entries. + (grub_util_biosdisk_get_compatibility_hint): New function. + * grub-core/normal/main.c (features): Add feature_platform_search_hint. + * include/grub/emu/hostdisk.h + (grub_util_biosdisk_get_compatibility_hint): New proto. + * util/grub-install.in: Don't call grub-mkdevicemap. + Add platform-specific hint to load.cfg. + * util/grub-mkconfig.in: Don't call grub-mkdevicemap. + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Add + hints. Set root preliminary to compatibility hint, not to OS name. + * util/grub-probe.c (PRINT_*): Add hints. + (print): Make static. + (escape_of_path): New function. + (guess_bios_drive): Likewise. + (guess_efi_drive): Likewise. + (guess_baremetal_drive): Likewise. + (print_full_name): Likewise. + (probe): Handle hints. + (main): Likewise. + * util/ieee1275/devicemap.c: Removed. + * util/ieee1275/ofpath.c (find_obppath): Allow to fail. All users + updated. + (grub_util_devname_to_ofpath): Return NULL on failure. + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev): Fix + resource leak. + * util/getroot.c (grub_util_pull_device): Fix memory leak. + + * po/POTFILES.in: Regenerated. + + Allow purely long options + + * grub-core/lib/arg.c (SHORT_ARG_HELP): Removed. + (SHORT_ARG_USAGE): Likewise. + (grub_arg_show_help): Compare opt with help_options. + (parse_option): Receive opt as argument. If makes big simplificatons. + All users updated + +2011-12-24 Vladimir Serbinenko + + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h (WORDS_BIGENDIAN): + Restructure to avoid warning. + +2011-12-24 Vladimir Serbinenko + + * util/grub-install.in: Account for possible escaped comma in device + name. + +2011-12-24 Vladimir Serbinenko + + * util/ieee1275/ofpath.c (of_path_of_ide): Fix address for secondary + channel. + +2011-12-24 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_devalias_iterate): Fix + allocation and zero-setting. + (grub_ieee1275_get_devname): Check that alias is complete. + +2011-12-24 Vladimir Serbinenko + + * grub-core/kern/disk.c (grub_disk_read): Fix hook calling for + unaligned segments. + +2011-12-24 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Add ieee1275/ + prefix. + (grub_ofdisk_open): Check and discard ieee1275 prefix. + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_encode_devname): + Add ieee1275 prefix. + +2011-12-23 Vladimir Serbinenko + + * docs/grub.texi (Filesystems): Update. + +2011-12-23 Vladimir Serbinenko + + Support odc, newc and bigendian cpio formats. + + * Makefile.util.def (libgrubmods): Add odc.c, newc.c and cpio_be.c. + * grub-core/Makefile.core.def (newc): New module. + (odc): Likewise. + (cpio_be): Likewise. + * grub-core/fs/cpio.c (ALIGN_CPIO): New macro. + (MAGIC): Likewise. + (MAGIC2): Likewise. + (head) [MODE_ODC]: Adapt for the format. + (head) [MODE_NEWC]: Likewise. + (head) [!MODE_*]: Write fields of interest as arrays. + (MAGIC_USTAR): Removed. + (read_number) [MODE_NEWC]: Change to hex. + (read_number) [!MODE_*]: Parse binary arrays. + (grub_cpio_find_file): Factor out the code for better structure and + always use read_number. + (grub_cpio_mount): Use MAGIC and MAGIC2. + (grub_cpio_dir): Exit on first hook non-0 return. + (grub_cpio_fs) [MODE_ODC]: Set name to odc. + (grub_cpio_fs) [MODE_NEWC]: Set name to newc. + (GRUB_MOD_INIT) [MODE_ODC]: Set name to odc. + (GRUB_MOD_INIT) [MODE_NEWC]: Set name to newc. + (GRUB_MOD_FINI) [MODE_ODC]: Set name to odc. + (GRUB_MOD_FINI) [MODE_NEWC]: Set name to newc. + * grub-core/fs/newc.c: New file. + * grub-core/fs/odc.c: Likewise. + * grub-core/fs/cpio_be.c: Likewise. + +2011-12-23 Vladimir Serbinenko + + Fix handling of tar numbers occupying the whole field. + + * grub-core/fs/cpio.c (read_number): New function. + (grub_cpio_find_file): Use read_number instead of strtoull. + +2011-12-23 Vladimir Serbinenko + + * grub-core/fs/cpio.c (grub_cpio_find_file): Fix handling of names + occupying the whole field size. + +2011-12-23 Lukas Anzinger + + * util/grub-mkconfig_lib.in (version_test_gt): Fix variable names. + +2011-12-23 Vladimir Serbinenko + + * grub-core/net/net.c (grub_cmd_delroute): Add missing out condition. + +2011-12-23 Seth Goldberg + + * grub-core/Makefile.core.def (lzma_decompress): Add missing + TARGET_IMG_LDFLAGS. + +2011-12-23 Vladimir Serbinenko + + * util/getroot.c (ESCAPED_PATH_MAX): New define. + (mountinfo_entry): Increase the field size to take escaping into + account. + (find_root_device_from_libzfs): Add one byte to size of strings for + security. + +2011-12-23 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (grub_reed_solomon_add_redundancy): Add + an assert. + * util/grub-setup.c (setup): Likewise. + +2011-12-23 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S: Add missing argument for + _LzmaDecodeA. + +2011-12-22 Vladimir Serbinenko + + * docs/grub.texi (Internationalisation): New section. + +2011-12-22 Vladimir Serbinenko + + * docs/grub.texi (Loopback booting): New section. + +2011-12-22 Keshav P R + + * util/grub-mkstandalone.in: Fix minor typo errors. + +2011-12-20 Vladimir Serbinenko + + IPv6, TCP, HTTP, ICMP and DNS support. Several cleanups and bugfixes. + + * grub-core/Makefile.core.def (net): Add net/dns.c, net/tcp.c, + net/icmp.c and net/icmp6.c. + (http): New module. + (priority_queue): Likewise. + * grub-core/io/bufio.c: Rewritten. + * grub-core/lib/legacy_parse.c (legacy_command): New argument type + TYPE_WITH_CONFIGFILE_OPTION. + (legacy_commands): Add bootp and dhcp. + (is_option): Handle TYPE_WITH_CONFIGFILE_OPTION. + (grub_legacy_parse): Likewise. + * grub-core/lib/priority_queue.c: New file. + * grub-core/net/arp.c: Add missing license header. + (arp_find_entry): Removed. + (arp_find_entry): Likewise. + (grub_net_arp_resolve): Rename to ... + (grub_net_arp_send_request): ...this. + (grub_net_arp_receive): New card argument. + * grub-core/net/bootp.c (parse_dhcp_vendor): Clean up. + Set router and DNS server. + (grub_net_configure_by_dhcp_ack): Handle routing information. + (grub_cmd_bootp): Set checksum. + (grub_bootp_init): Remove net_dhcp. + * grub-core/net/dns.c: New file. + * grub-core/net/drivers/efi/efinet.c (send_card_buffer): Wait for + completion. + (get_card_packet): Handle allocation. + (grub_efinet_findcards): Set mtu. + * grub-core/net/drivers/emu/emunet.c: Add missing license header. + (get_card_packet): Handle allocation. + (emucard): Set mtu. + * grub-core/net/drivers/i386/pc/pxe.c (grub_pxe_recv): Handle allocation + (GRUB_MOD_INIT): Set mtu. + * grub-core/net/drivers/ieee1275/ofnet.c (grub_ofnetcard_data): Remove + mtu. + (get_card_packet): Handle allocation. + (grub_ofnet_findcards): Set mtu. + * grub-core/net/ethernet.c (send_ethernet_packet): Add compile time + assert. + (grub_net_recv_ethernet_packet): Handle IPv6. + * grub-core/net/http.c: New file. + * grub-core/net/icmp.c: Likewise. + * grub-core/net/icmp6.c: Likewise. + * grub-core/net/ip.c (ip6addr): New type. + (ip6hdr): Likewise. + (reassemble): Likewise. + (cmp): New function. + (reassembles): New variable. + (grub_net_ip_chksum): Handle 0xffff sum and unaligned buffers. + (id): New variable. + (send_fragmented): New function. + (grub_net_send_ip_packet): Rename to ... + (grub_net_send_ip4_packet): ... this. Send fragmented if needed. + Handle non-UDP. + (grub_net_recv_ip_packets): Rename to ... + (handle_dgram): ... this. Check checksum. Handle non-UDP. + (free_rsm): New function. + (free_old_fragments): Likewise. + (grub_net_recv_ip4_packets): New function. + (grub_net_send_ip6_packet): Likewise. + (grub_net_send_ip_packet): Likewise. + (grub_net_recv_ip6_packets): Likewise. + (grub_net_recv_ip_packets): Likewise. + * grub-core/net/net.c (grub_net_link_layer_entry): New struct. + (LINK_LAYER_CACHE_SIZE): New const. + (link_layer_find_entry): New function. + (grub_net_link_layer_add_address): Likewise. + (grub_net_link_layer_resolve_check): Likewise. + (grub_net_link_layer_resolve): Likewise. + (grub_net_ipv6_get_slaac): Likewise. + (grub_net_ipv6_get_link_local): Likewise. + (grub_cmd_ipv6_autoconf): Likewise. + (parse_ip): Handle one number representation. + (parse_ip6): New functoion. + (match_net): Handle IPv6. + (grub_net_resolve_address): Handle IPv6 and DNS. + (grub_net_resolve_net_address): Handle IPv6. + (route_cmp): New function. + (grub_net_route_address): Find best route. + (grub_net_addr_to_str): Handle IPv6. + (grub_net_addr_cmp): New function. + (grub_net_add_addr): Register local route. + (print_net_address): Handle net address. + (grub_net_poll_cards): Retransmit TCP. + (grub_net_poll_cards_idle_real): Likewise. + (have_ahead): New function. + (grub_net_seek_real): Use underlying seek. + (GRUB_MOD_INIT): Register net_ipv6_autoconf and init dns. + * grub-core/net/tcp.c: New file. + * grub-core/net/tftp.c (tftp_data): Add priority_queue. + (cmp): New function. + (ack): Likewise. + (tftp_receive): Handle unordered input. + (destroy_pq): New function. + (tftp_close): Close pq. + * grub-core/net/udp.c: Put missing license header. + (grub_net_udp_socket): New function. + (udp_socket_register): Likewise. + (grub_net_udp_close): Likewise. + (grub_net_recv_udp_packet): Check checksum. + * include/grub/efi/api.h (grub_efi_simple_network): Add status. + * include/grub/misc.h (grub_memchr): New function. + * include/grub/net.h (GRUB_NET_*_SIZE): New enum. + (grub_net_card_driver): Return buf in recv. + (grub_net_slaac_mac_list): New struct. + (grub_network_level_protocol_id): Add ipv6. + (grub_net_network_level_addr): Likewise. + (grub_net_network_level_net_addr): Likewise. + (grub_net_app_protocol): Add seek. + (grub_net_socket): Removed. + (grub_net_sockets): Likewise. + (grub_net_socket_register): Likewise. + (grub_net_socket_unregister): Likewise. + (FOR_NET_SOCKETS): Likewise. + (grub_net_add_addr): Add const. + (GRUB_NET_BOOTP_*): New enum. + (grub_net_addr_cmp): New proto. + (GRUB_NET_MAX_STR_ADDR_LEN): Take IPV6 into account. + (GRUB_NET_MAX_STR_HWADDR_LEN): New define. + (grub_net_hwaddr_to_str): NEw proto. + (FOR_NET_NETWORK_LEVEL_INTERFACES): New macro. + (FOR_NET_NETWORK_LEVEL_INTERFACES_SAFE): Handle NULL. + (grub_dns_init): New proto. + (grub_dns_fini): Likewise. + (grub_net_tcp_retransmit): Likewise. + (grub_net_link_layer_add_address): Likewise. + (grub_net_link_layer_resolve_check): Likewise. + (grub_net_link_layer_resolve): Likewise. + (grub_net_dns_lookup): Likewise. + (grub_net_add_dns_server): Likewise. + (grub_net_remove_dns_server): Likewise. + (GRUB_NET_TRIES): New const. + (GRUB_NET_INTERVAL): Likewise. + * include/grub/net/arp.h: Mostly rewritten. + * include/grub/net/ethernet.h (grub_net_ethertype_t): New enum. + * include/grub/net/ip.h: Mostly rewritten. + * include/grub/net/netbuff.h: Indent. + * include/grub/net/tcp.h: New file. + * include/grub/net/udp.h: Mostly rewritten. + * include/grub/priority_queue.h: New file. + * include/grub/types.h (PRIdGRUB_SSIZE): New define. + (grub_swap_bytes64_compile_time): Likewise. + (grub_cpu_to_be16_compile_time): Likewise. + (grub_cpu_to_be32_compile_time): Likewise. + (grub_cpu_to_be64_compile_time): Likewise. + (grub_be_to_cpu64_compile_time): Likewise. + +2011-12-16 Vladimir Serbinenko + + * grub-core/commands/i386/pc/drivemap.c (int13slot): Replace + UINT_TO_PTR with cast. + +2011-12-15 Vladimir Serbinenko + + * util/import_gcry.py: Skip _gcry_rmd160_mixblock and serpent_test. We + don't use them. + +2011-12-15 Vladimir Serbinenko + + * util/import_gcry.py: Don't add include camellia.h to camellia.c. It's + already there. + +2011-12-15 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Clean multiboot header to avoid + confusing ipxe. + +2011-12-15 Vladimir Serbinenko + + * grub-core/lib/libgcrypt/cipher/md4.c (transform) [WORDS_BIGENDIAN]: + Add missing const attribute. + * grub-core/lib/libgcrypt/cipher/md5.c (transform) [WORDS_BIGENDIAN]: + Likewise. + * grub-core/lib/libgcrypt/cipher/rmd160.c (transform) [WORDS_BIGENDIAN]: + Likewise. + +2011-12-15 Vladimir Serbinenko + + * grub-core/lib/libgcrypt/cipher/serpent.c (serpent_key_prepare): Fix + misaligned access. + (serpent_setkey): Likewise. + (serpent_encrypt_internal): Likewise. + (serpent_decrypt_internal): Likewise. + (serpent_encrypt): Don't put an alignment-increasing cast. + (serpent_decrypt): Likewise. + (serpent_test): Likewise. + +2011-12-15 Vladimir Serbinenko + + * grub-core/loader/multiboot.c (grub_cmd_module): Fix target address. + +2011-12-15 Vladimir Serbinenko + + Replace UINT_TO_PTR and PTR_TO_UINT with explicit grub_addr_t casts. + + * include/grub/types.h (UINT_TO_PTR): Removed. All users switched to + grub_addr_t casts. + (PTR_TO_UINT64): Likewise. + (PTR_TO_UINT32): Likewise. + +2011-12-15 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Decrease the higher limit + because of stack. + * util/grub-setup.c (setup): Don't add redundancy past the higher load + limit. + +2011-12-15 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_label.c (label_paint): Handle the case + text_width > available width a bit more gracefully. + +2011-12-15 Vladimir Serbinenko + + * grub-core/loader/i386/bsdXX.c (grub_freebsd_load_elfmodule): Fix + current address calculation. + +2011-12-15 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (decode_block): Allocate on heap and not + stack. + (encode_block): Likewise. + +2011-12-15 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S: Clear direction flag for + certainety. + +2011-12-15 Vladimir Serbinenko + + * grub-core/boot/i386/pc/startup_raw.S: Move realmode routines to + non-RS part to avoid RS messing with GDT. + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_PART): + Increase to suit in realmode routines. + +2011-12-15 Vladimir Serbinenko + + * grub-core/kern/i386/realmode.S: Increase alignment. + * grub-core/boot/i386/pc/startup_raw.S: Likewise. + +2011-12-14 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (init_powx): Set gf_powx_inv[0] just to + be deterministic. + (syndroms): Compute 0 syndrom. + (rs_recover): Use 0 syndrom. + +2011-12-14 Vladimir Serbinenko + + * include/grub/kernel.h (FOR_MODULES): Make it a bit faster. + +2011-12-14 Vladimir Serbinenko + + * include/grub/types.h (GRUB_PROPERLY_ALIGNED_ARRAY): Add missing + brackets. + +2011-12-14 Vladimir Serbinenko + + * grub-core/gfxmenu/widget-box.c (get_left_pad): Take corners into + account. + (get_top_pad): Likewise. + (get_right_pad): Likewise. + (get_bottom_pad): Likewise. + +2011-12-14 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_list.c (draw_menu): Don't use assignment in if. + +2011-12-14 Vladimir Serbinenko + + * include/grub/efi/api.h (grub_efi_memory_descriptor): Add packed + attribute as the structure isn't guaranteed to be properly aligned. + (grub_efi_pci_device_path): Likewise. + (grub_efi_pccard_device_path): Likewise. + (grub_efi_memory_mapped_device_path): Likewise. Additionaly explicitly + specify the size of `memory_type'. + (grub_efi_vendor_device_path): Likewise. + (grub_efi_controller_device_path): Likewise. + (grub_efi_acpi_device_path): Likewise. + (grub_efi_expanded_acpi_device_path): Likewise. + (grub_efi_atapi_device_path): Likewise. + (grub_efi_scsi_device_path): Likewise. + (grub_efi_fibre_channel_device_path): Likewise. + (grub_efi_1394_device_path): Likewise. + (grub_efi_usb_device_path): Likewise. + (grub_efi_usb_class_device_path): Likewise. + (grub_efi_i2o_device_path): Likewise. + (grub_efi_mac_address_device_path): Likewise. + (grub_efi_ipv4_device_path): Likewise. + (grub_efi_ipv6_device_path): Likewise. + (grub_efi_infiniband_device_path): Likewise. + (grub_efi_uart_device_path): Likewise. + (grub_efi_vendor_messaging_device_path): Likewise. + (grub_efi_hard_drive_device_path): Likewise. + (grub_efi_cdrom_device_path): Likewise. + (grub_efi_vendor_media_device_path): Likewise. + (grub_efi_file_path_device_path): Likewise. + (grub_efi_protocol_device_path): Likewise. + (grub_efi_piwg_device_path): Likewise. + (grub_efi_bios_device_path): Likewise. + +2011-12-14 Vladimir Serbinenko + + * include/grub/charset.h (grub_utf16_to_utf8): Make src a const pointer. + (grub_ucs4_to_utf8_alloc): Likewise. + (grub_ucs4_to_utf8): Likewise. + * grub-core/normal/charset.c (grub_ucs4_to_utf8): Likewise. + (grub_ucs4_to_utf8_alloc): Likewise. + +2011-12-14 Vladimir Serbinenko + + AFFS never uses unicode. + + * include/grub/charset.h (GRUB_MAX_UTF8_PER_LATIN1): New const. + (grub_latin1_to_utf8): New inline function. + * grub-core/fs/affs.c (grub_affs_iterate_dir): Convert latin1 to UTF8. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/romfs.c (grub_romfs_mount): Fix pointer comparison + overflow. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/squash4.c (grub_squash_inode): Fix field sizes. + (grub_squash_dirent_header): Likewise. + (read_chunk): Don't double swap. + (grub_squash_iterate_dir): Fix swap sizes. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_getent): Handle UTF16 endianness. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/hfs.c (grub_hfs_find_node): Handle unaligned keys. + (grub_hfs_iterate_dir): Likewise. + +2011-12-13 Vladimir Serbinenko + + Fix video on platforms where unaligned access is forbidden. + Make several optimisations while on it. + + * grub-core/video/fb/fbblit.c (grub_video_fbblit_replace_directN): + Optimise and use GRUB_VIDEO_FB_ADVANCE_POINTER. + (grub_video_fbblit_replace_32bit_1bit): Likewise. + (grub_video_fbblit_replace_24bit_1bit) [!GRUB_HAVE_UNALIGNED_ACCESS]: + Disable. + (grub_video_fbblit_replace_16bit_1bit): + Optimise and use GRUB_VIDEO_FB_ADVANCE_POINTER. + (grub_video_fbblit_replace_8bit_1bit): Likewise. + (grub_video_fbblit_replace_BGRX8888_RGBX8888): Likewise. + (grub_video_fbblit_replace_BGRX8888_RGB888): Likewise. + (grub_video_fbblit_replace_BGR888_RGBX8888): Likewise. + (grub_video_fbblit_replace_BGR888_RGBX8888): Likewise. + (grub_video_fbblit_replace_BGR888_RGB888): Likewise. + (grub_video_fbblit_replace_RGBX8888_RGB88): Likewise. + (grub_video_fbblit_replace_RGB888_RGBX888): Likewise. + (grub_video_fbblit_replace_RGB888_RGBX8888): Likewise. + (grub_video_fbblit_replace_index_RGBX8888): Likewise. + (grub_video_fbblit_replace_index_RGB888): Likewise. + (grub_video_fbblit_blend_BGRA8888_RGBA8888): Likewise. + (grub_video_fbblit_blend_BGR888_RGBA8888): Likewise. + (grub_video_fbblit_blend_RGBA8888_RGBA8888): Likewise. + (grub_video_fbblit_blend_RGB888_RGBA8888): Likewise. + (grub_video_fbblit_blend_index_RGBA8888): Likewise. + (grub_video_fbblit_blend_XXXA8888_1bit): Likewise. + (grub_video_fbblit_blend_XXX888_1bit) [!GRUB_HAVE_UNALIGNED_ACCESS]: + Disable. + (grub_video_fbblit_blend_XXX565_1bit): + Optimise and use GRUB_VIDEO_FB_ADVANCE_POINTER. + * grub-core/video/fb/fbfill.c (grub_video_fbfill_direct32): Likewise. + * grub-core/video/fb/fbutil.c (grub_video_fb_get_video_ptr): Return + void *. + * grub-core/video/fb/video_fb.c (common_blitter) + [!GRUB_HAVE_UNALIGNED_ACCESS]: Skip disabled blitters. + (grub_video_fb_create_render_target_from_pointer) + [!GRUB_HAVE_UNALIGNED_ACCESS]: Check alignment. + * include/grub/fbutil.h (grub_video_fb_get_video_ptr): Return void *. + * include/grub/i386/types.h (GRUB_HAVE_UNALIGNED_ACCESS): New + definition. + * include/grub/x86_64/types.h (GRUB_HAVE_UNALIGNED_ACCESS): Likewise. + +2011-12-13 Vladimir Serbinenko + + * grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Support + HH22 and HM10 relocations. + +2011-12-13 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vsnprintf_real): Fix fmt2 parsing. + +2011-12-13 Vladimir Serbinenko + + * grub-core/commands/videotest.c (grub_cmd_videotest): Check that + allocation succeeded. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_convert_string): Make first + argument a u8 pointer. All users updated. + Handle unaligned buffers. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Force inlining of + add_part to workaround compiler bug. + +2011-12-13 Vladimir Serbinenko + + * include/grub/kernel.h (FOR_MODULES): Preserve alignment invariants. + +2011-12-13 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_add_elfsyms): + Reserve alignment invariants. + (grub_multiboot_load): Likewise. + (retrieve_video_parameters): Likewise. + (grub_multiboot_make_mbi): Likewise. + +2011-12-13 Vladimir Serbinenko + + * grub-core/loader/i386/xnu.c (grub_xnu_devprop_remove_property): Fix + incorrect pointer. + +2011-12-13 Vladimir Serbinenko + + * grub-core/disk/pata.c (grub_pata_pio_read): Handle unaligned buffer. + (grub_pata_pio_write): Likewise. + +2011-12-13 Vladimir Serbinenko + + Add noreturn attributes and remove unreachable code. + + * grub-core/bus/cs5536.c (grub_cs5536_smbus_wait): Remove unreachable + code. + * grub-core/commands/halt.c (grub_cmd_halt): Remove unreachable + code. Mark as noreturn. + * grub-core/commands/minicmd.c (grub_mini_cmd_exit): Likewise. + * grub-core/commands/reboot.c (grub_cmd_reboot): Likewise. + * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name): Remove + unreachable code. + * grub-core/kern/main.c (grub_main): Mark as noreturn. + * grub-core/kern/rescue_reader.c (grub_rescue_run): Likewise. + * grub-core/lib/posix_wrap/stdlib.h (abort): Likewise. + * grub-core/normal/menu.c (run_menu): Remove unreachable code. + * include/grub/kernel.h (grub_main): Mark as noreturn. + * include/grub/reader.h (grub_rescue_run): Likewise. + +2011-12-13 Vladimir Serbinenko + + * include/grub/i386/qemu/memory.h (grub_machine_mmap_init): Remove + redundant declaration. + +2011-12-13 Vladimir Serbinenko + + * include/grub/net.h (grub_net_network_level_interfaces): Remove + redundant declaration. + (FOR_NET_NETWORK_LEVEL_INTERFACES): Move to appropriate place. + +2011-12-13 Vladimir Serbinenko + + * grub-core/commands/hdparm.c (le16_to_char): Make src and dest uint16 * + to ensure alignment. + (grub_hdparm_print_identify): Make argument uint16 * to ensure + alignment. Ensure tmp alignment. + (grub_cmd_hdparm): Ensure buf alignment. + * grub-core/disk/ata.c (grub_ata_strncpy): Make src and dest uint16 * + to ensure alignment. + (grub_ata_dumpinfo): Ensure text alignment. + (grub_atapi_identify): Preserve alignment invariant. + (grub_ata_identify): Likewise. Use grub_get_unaligned32 when necessary. + +2011-12-13 Vladimir Serbinenko + + * include/grub/emu/misc.h (xasprintf): Add missing format attribute. + * include/grub/mips/kernel.h (grub_halt): Remove redundant declaration. + * include/grub/mips/qemu_mips/kernel.h (grub_halt): Likewise. + * include/grub/misc.h (grub_reboot) + [GRUB_MACHINE_EMU || GRUB_MACHINE_QEMU_MIPS]: Export. + (grub_halt) [__mips__]: Likewise. + +2011-12-13 Vladimir Serbinenko + + * include/grub/efi/memory.h (grub_machine_mmap_iterate): + Remove redundant declaration. + (grub_mmap_get_post64): Likewise. + (grub_mmap_get_upper): Likewise. + (grub_mmap_get_lower): Likewise. + +2011-12-13 Vladimir Serbinenko + + * grub-core/partmap/dvh.c (grub_dvh_is_valid): Make argument + uint32_t * to ensure alignment. + (dvh_partition_map_iterate): Make `block' a union to ensure alignment. + +2011-12-13 Vladimir Serbinenko + + * grub-core/partmap/sunpc.c (grub_sun_is_valid): Make argument + uint16_t * to ensure alignment. + (sun_pc_partition_map_iterate): Make `block' a union to ensure + alignment. + +2011-12-13 Vladimir Serbinenko + + * grub-core/partmap/sun.c (grub_sun_is_valid): Make argument uint16_t * + to ensure alignment. + (sun_partition_map_iterate): Make `block' a union to ensure alignment. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (u16at): Make into inline function. + Handle unaligned pointers. + (u32at): Likewise. + (u64at): Likewise. + (fixup): Use byte access instead of v16at. + (find_attr): Fix imporper usage of v32at. + (read_data): Likewise. + (list_file): Handle byte-swapping and unaligned strings. + (grub_ntfs_label): Likewise. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/udf.c (grub_udf_partmap): Add packed attribute + as it's not necessarily aligned. + +2011-12-13 Vladimir Serbinenko + + * grub-core/kern/mips/qemu_mips/init.c (grub_at_keyboard_init): Remove + redundant declaration. + (grub_serial_init): Likewise. + (grub_terminfo_init): Likewise. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (DVA_OFFSET_TO_PHYS_SECTOR): Make into inline + function. + (ZAP_HASH_IDX): Likewise. + (ZAP_LEAF_HASH_SHIFT): Likewise. + (ZAP_LEAF_HASH_NUMENTRIES): Likewise. + (LEAF_HASH): Likewise. + (ZAP_LEAF_NUMCHUNKS): Likewise. + (ZAP_LEAF_CHUNK): Likewise. Changed pointer arithmetic to preserve + alignment invariants. Return pointer. All users updated. + (ZAP_LEAF_ENTRY): Make into inline function. + (NBBY): Removed. + (xor): LIkewise. + (xor_out): Use grub_crypto_xor. + (dnode_get_path): Use grub_get_unaligned. + (nvlist_find_value): Likewise. + (grub_zfs_nvlist_lookup_uint64): Likewise. + (grub_zfs_nvlist_lookup_string): Likewise. + (get_nvlist_size): Likewise. + (grub_zfs_open): Likewise. + (fill_fs_info): Likewise. + (grub_zfs_dir): Likewise. + * include/grub/zfs/zap_leaf.h (zap_leaf_phys): Adapt to preserve + alignment invariants. + * include/grub/zfs/zio.h (zio_eck_t): Mark as packed as it's not + necessarily aligned. + +2011-12-13 Vladimir Serbinenko + + * grub-core/net/netbuff.c (grub_netbuff_alloc): Ensure proper alignment. + +2011-12-13 Vladimir Serbinenko + + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Change pointer + arithmetic to conserve alignment invariants. + +2011-12-13 Vladimir Serbinenko + + * include/grub/efiemu/efiemu.h (grub_efiemu_get_memory_map): Remove + redundant declaration. + (grub_efiemu_mm_obtain_request): Likewise. + (grub_efiemu_prepare): Likewise. + +2011-12-13 Vladimir Serbinenko + + * include/grub/list.h: Explicitly cast return of grub_bad_type_cast + to match types. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/hfsplus.c (grub_hfsplus_btree_recoffset): Handle the + case of aunaligned recptr. + (grub_hfsplus_read_block): Declare extoverflow as key to ensure + alignment. + (grub_hfsplus_btree_search): Handle unaligned index. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/xfs.c (grub_xfs_iterate_dir): Use grub_get_unaligned16 + to get freetag and skip. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_btree_node): Add zero-size keys + array. + (grub_nilfs2_btree_node_dkeys): Ensure return pointer alignment. + (grub_nilfs2_btree_lookup): Ensure buffer alignment. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/romfs.c (grub_romfs_iterate_dir): Properly align + name for checksum and fix allocation algorithm. + +2011-12-13 Vladimir Serbinenko + + * include/grub/types.h (grub_properly_aligned_t): New type. + (GRUB_PROPERLY_ALIGNED_ARRAY): New macro. + (grub_get_unaligned16): Add explicit casts. + (grub_get_unaligned32): Likewise. + (grub_get_unaligned64): Likewise. + (grub_set_unaligned16): New function. + (grub_set_unaligned32): Likewise. + +2011-12-13 Vladimir Serbinenko + + * grub-core/normal/datetime.c (grub_weekday_names): Make const. + +2011-12-13 Vladimir Serbinenko + + * grub-core/fs/udf.c (read_string): Macroify GRUB_MAX_UTF8_PER_UTF16. + * grub-core/fs/jfs.c (grub_jfs_diropen): Likewise. + * grub-core/fs/fat.c (grub_fat_iterate_dir): Likewise. + +2011-12-13 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c (set_scancodes): Fix preprocessor + conditionals. + +2011-12-13 Vladimir Serbinenko + + * grub-core/kern/emu/main.c (main): Add missing const qualifier. + * grub-core/loader/efi/appleloader.c (devdata): Likewise. + +2011-12-13 Vladimir Serbinenko + + Unify and improve RAID and crypto xor. + + * grub-core/disk/raid.c (grub_raid_block_xor): Removed. All users + changed to grub_crypto_xor + * grub-core/lib/crypto.c (grub_crypto_xor): Moved from here ... + * include/grub/crypto.h (grub_crypto_xor): ... here. Inlined. + Use bigger types when possible. + +2011-12-13 Vladimir Serbinenko + + * grub-core/disk/raid.c (scan_devices): Fix condition. + +2011-12-13 Vladimir Serbinenko + + * grub-core/net/drivers/ieee1275/ofnet.c (bootp_response_properties): + Make name a const ptr. + +2011-12-13 Vladimir Serbinenko + + * grub-core/kern/ieee1275/ieee1275.c (grub_ieee1275_finddevice): Make + first argument a const pointer. + * grub-core/kern/ieee1275/openfw.c (grub_children_iterate): Likewise. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_finddevice): Update + proto. + (grub_children_iterate): Likewise. + (grub_machine_mmap_iterate): Remove redundant declaration. + +2011-12-13 Vladimir Serbinenko + + * grub-core/commands/acpi.c (grub_acpi_create_ebda) [!x86]: Disable. + (grub_cmd_acpi) [!x86]: Disable EBDA. + +2011-12-13 Vladimir Serbinenko + + Enable UTF8 in gnulib regexp. + + * config.h.in (RE_ENABLE_I18N) [!GRUB_UTIL]: New define. + * grub-core/lib/posix_wrap/ctype.h (islower): Use grub_islower. + (isupper): Use grub_isupper. + (isascii): New inline function. + * grub-core/lib/posix_wrap/wchar.h: Replace dummy with real contents. + * grub-core/lib/posix_wrap/wctype.h: Likewise. + * grub-core/normal/charset.c (grub_utf8_process): New function. + (grub_utf8_to_utf16): Use grub_utf8_process. + (grub_encode_utf8_character): New function. + (grub_ucs4_to_utf8): Use grub_encode_utf8_character. + * include/grub/charset.h (grub_utf8_process): New declaration. + (grub_encode_utf8_character): Likewise. + * include/grub/misc.h (grub_islower): New inline function. + (grub_isupper): Likewise. + (grub_strchrsub): Moved down to fix the definitions. + +2011-12-13 Vladimir Serbinenko + + * grub-core/bus/usb/ohci.c (grub_ohci_check_transfer): Add an unsigned + specification. + +2011-12-13 Vladimir Serbinenko + + * include/grub/loader.h (grub_loader_register_preboot_hook): + Use struct preboot * and not void * for handle. All users updated. + (grub_loader_unregister_preboot_hook): Likewise. + +2011-12-12 Vladimir Serbinenko + + * include/grub/charset.h (GRUB_MAX_UTF8_PER_UTF16): New const. + * grub-core/fs/hfsplus.c (grub_hfsplus_catkey_internal): Change to + UTF-16-BE. All users updated. + (grub_hfsplus_cmp_catkey): Fix unicode handling. + (grub_hfsplus_iterate_dir): Likewise. + (grub_hfsplus_label): Likewise. + +2011-12-12 Vladimir Serbinenko + + * grub-core/disk/ahci.c (grub_ahci_pciinit): Fix compat condition. + +2011-11-30 Vladimir Serbinenko + + Add missing const qualifiers. + + * grub-core/commands/i386/pc/sendkey.c (keysym): Add missing const. + * grub-core/commands/lspci.c (grub_pci_classname): Likewise. + * grub-core/commands/menuentry.c (hotkey_aliases): Likewise. + * grub-core/disk/lvm.c (grub_lvm_getvalue): Likewise. + (grub_lvm_check_flag): Likewise. + * grub-core/efiemu/i386/coredetect.c + (grub_efiemu_get_default_core_name): Likewise + * grub-core/efiemu/main.c (grub_efiemu_autocore): Likewise. + * grub-core/fs/hfsplus.c (grub_hfsplus_catkey_internal): Likewise. + * grub-core/fs/ntfs.c (fixup): Likewise. + * grub-core/fs/xfs.c (grub_xfs_iterate_dir): Likewise. + * grub-core/fs/zfs/zfs.c (decomp_entry): Likewise. + (fzap_lookup): Likewise. + (zap_lookup): Likewise. + * grub-core/gnulib/regcomp.c (init_dfa): Likewise. + * grub-core/lib/legacy_parse.c (check_option): Likewise. + * grub-core/lib/posix_wrap/langinfo.h (nl_langinfo): Likewise. + * grub-core/loader/i386/bsd.c (grub_bsd_add_meta): Likewise. + (grub_freebsd_add_meta_module): Likewise. + (grub_cmd_freebsd_module): Likewise. + * grub-core/loader/i386/xnu.c (tbl_alias): Likewise. + * grub-core/loader/xnu.c (grub_xnu_register_memory): Likewise. + (grub_xnu_writetree_get_size): Likewise. + (grub_xnu_writetree_toheap_real): Likewise. + (grub_xnu_find_key): Likewise. + (grub_xnu_create_key): Likewise. + (grub_xnu_create_value): Likewise. + (grub_xnu_register_memory): Likewise. + (grub_xnu_check_os_bundle_required): Likewise. + (grub_xnu_scan_dir_for_kexts): Likewise. + (grub_xnu_load_kext_from_dir): Likewise. + * grub-core/normal/color.c (color_list): Likewise. + * grub-core/normal/completion.c (current_word): Likewise. + * grub-core/normal/menu_entry.c (insert_string): Likewise. + * grub-core/term/serial.c (grub_serial_find): Likewise. + * grub-core/term/tparm.c (grub_terminfo_tparm): Likewise. + * include/grub/efiemu/efiemu.h (grub_efiemu_get_default_core_name): + Likewise. + * include/grub/i386/bsd.h (grub_bsd_add_meta): Likewise. + (grub_freebsd_add_meta_module): Likewise. + * include/grub/lib/arg.h (grub_arg_option): Likewise. + * include/grub/net.h (grub_net_card_driver): Likewise. + (grub_net_card): Likewise. + (grub_net_app_protocol): Likewise. + * include/grub/parttool.h (grub_parttool_argdesc): Likewise. + * include/grub/serial.h (grub_serial_find): Likewise. + * include/grub/tparm.h (grub_terminfo_tparm): Likewise. + * include/grub/xnu.h (grub_xnu_create_key): Likewise. + (grub_xnu_create_value): Likewise. + (grub_xnu_find_key): Likewise. + (grub_xnu_scan_dir_for_kexts): Likewise. + (grub_xnu_load_kext_from_dir): Likewise. + + * include/grub/zfs/zio_checksum.h (zio_checksum_t): Moved from here ... + * grub-core/fs/zfs/zfs.c (zio_checksum_t): ...here. + * include/grub/zfs/zio_checksum.h (zio_checksum_info): + Moved from here ... + * grub-core/fs/zfs/zfs.c (zio_checksum_info): ... here. Added missing const. + +2011-11-28 Colin Watson + + * util/getroot.c (find_root_device_from_libzfs): Use xasprintf. + +2011-11-27 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (recovery): Fix spelling. + (read_device): Fix size calculation. + +2011-11-25 Robert Millan + + * util/getroot.c [HAVE_LIMITS_H]: Include `'. + (find_root_device_from_libzfs): Add zpool output parser to be used + as fallback when libzfs isn't available. + +2011-11-25 Seth Goldberg + + * po/Makefile.in.in: Add missing escape-continuation. + +2011-11-25 Vladimir Serbinenko + + * grub-core/fs/cpio.c (grub_cpio_dir): Handle subdirs correctly. + +2011-11-16 Vladimir Serbinenko + + * grub-core/kern/dl.c (grub_dl_load_segments): Fix alignment handling. + +2011-11-16 Vladimir Serbinenko + + * grub-core/kern/dl.c (grub_dl_unload): Fix freeing segments. + +2011-11-16 Vladimir Serbinenko + + * grub-core/kern/x86_64/efi/callwrap.S: Fix the comment. + +2011-11-14 Vladimir Serbinenko + + * grub-core/lib/adler32.c: Add missing license specification. + * grub-core/lib/crc64.c: Likewise. + * grub-core/loader/i386/pc/plan9.c: Likewise. + * grub-core/partmap/plan.c: Likewise. + +2011-11-13 Lubomir Kundrak + + Add facility to debug GRUB with gdb under qemu. + + * grub-core/gdb_grub.in: New file. + * grub-core/gmodule.pl.in: Likewise. + * grub-core/Makefile.core.def (gmodule.pl): New script. + (gdb_grub): Likewise. + +2011-11-13 Vladimir Serbinenko + + * util/grub-mount.c (argp_parser): Accept relative pathes. + * util/grub-fstest.c (argp_parser): Likewise. + +2011-11-13 Vladimir Serbinenko + + Plan9 support. + + * Makefile.util.def (libgrubmods): Add + grub-core/partmap/plan.c. + * docs/grub.texi: Notice Plan9 support. + * grub-core/Makefile.core.def (plan9): New module. + (part_plan): Likewise. + * grub-core/loader/i386/pc/plan9.c: New file. + * grub-core/partmap/plan.c: Likewise. + * include/grub/msdos_partition.h (GRUB_PC_PARTITION_TYPE_PLAN9): New + define. + (GRUB_PC_PARTITION_TYPE_LINUX_SWAP): Likewise. + * include/grub/mm.h (grub_extend_alloc): New inline function. + +2011-11-13 Vladimir Serbinenko + + Make Reed-Solomon faster by using power of generator representation of + GF(256)*. + + * grub-core/lib/reed_solomon.c (grub_uint16_t) [TEST]: Removed. + (gf_double_t): Likewise. + (gf_invert): Removed. + (gf_powx): New array. + (gf_powx_inv): Likewise. + (scratch): Move higher. + (gf_reduce): Removed. + (gf_mul): Use powx. + (gf_invert): Likewise. + (init_inverts): Replaced with ... + (init_powx): ...this. All users updated. + (pol_evaluate): Replace multiplications with additions. + (rs_encode): Likewise. + (gauss_eliminate): Call gf_invert. + (grub_reed_solomon_add_redundancy): Call init_powx. + (grub_reed_solomon_recover): Call init_powx unconditionally. + +2011-11-12 Vladimir Serbinenko + + * grub-core/partmap/gpt.c (gpt_partition_map_embed): Fix spelling. + +2011-11-12 Vladimir Serbinenko + + * grub-core/partmap/gpt.c (gpt_partition_map_embed): Restore + disk->partiton for safety. + +2011-11-12 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev): + Fix a memory leak. + (grub_util_biosdisk_get_grub_dev): Add a useful debug info. + +2011-11-12 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (find_system_device): Fix a memory leak. + +2011-11-12 Vladimir Serbinenko + + * include/grub/lvm.h (grub_lvm_pv): Correct start type. + +2011-11-12 Vladimir Serbinenko + + Fix spaces handling in proc/self/mountinfo. + + * util/getroot.c (unescape): New function. + (grub_find_root_device_from_mountinfo): Use unescape. + +2011-11-12 Vladimir Serbinenko + + Support ZFS embedding. + + * grub-core/fs/zfs/zfs.c (grub_zfs_embed): New function. + (grub_zfs_fs): Register grub_zfs_embed. + +2011-11-12 Vladimir Serbinenko + + Fix MIPS compilation. + + * grub-core/boot/mips/startup_raw.S: Use GRUB_DECOMPRESSOR_* + * include/grub/offsets.h: Rename decompressor fields from + GRUB_KERNEL_* to GRUB_DECOMPRESSOR_*. + * util/grub-mkimage.c (image_targets): Use new names. + +2011-11-12 Vladimir Serbinenko + + Defer multiboot device parsing until we're in compressed part. + + * grub-core/boot/i386/pc/lnxboot.S: Remove setting dos_part and + bsd_part. setdevice has fallen into disuse. + * grub-core/boot/i386/pc/startup_raw.S (dos_part): Removed. + (bsd_part): Likewise. + (boot_dev): New variable. + (multiboot_trampoline): Don't parse multiboot device. + Pass multiboot device in %edx. + * grub-core/disk/i386/pc/biosdisk.c (GRUB_MOD_INIT): Parse + grub_boot_device. + * grub-core/kern/i386/pc/init.c (grub_machine_get_bootlocation): + Likewise. + * grub-core/kern/i386/pc/startup.S: Save edx. + (grub_boot_drive): Removed. + (grub_install_dos_part): Likewise. + (grub_install_bsd_part): Likewise. + (grub_boot_device): New variable. + * include/grub/i386/pc/kernel.h (grub_install_dos_part): Removed. + (grub_install_bsd_part): Likewise. + (grub_boot_drive): Likewise. + (grub_boot_device): New variable. + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_INSTALL_DOS_PART): + Removed. + (GRUB_KERNEL_I386_PC_INSTALL_BSD_PART): Likewise. + (GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY): Moved lower. + (GRUB_KERNEL_MACHINE_INSTALL_BSD_PART): Removed. + (GRUB_KERNEL_MACHINE_INSTALL_DOS_PART): Likewise. + * util/grub-install.in: Remove redundant condition. + +2011-11-12 Vladimir Serbinenko + + Fix bug introduced by previous commit. + + * grub-core/boot/i386/pc/startup_raw.S: Compute RS start correctly. + +2011-11-12 Vladimir Serbinenko + + Use decompressors framework on i386-pc. It increases core size + by 46 bytes but improves compatibility and maintainability. + + * grub-core/Makefile.core.def (lzma_decompress): New image. + (kernel): Add i386_pc_ldflags. + * grub-core/kern/i386/pc/startup.S: Move intial part to .. + * grub-core/boot/i386/pc/startup_raw.S: ... here. Pass pointers + to real_to_prot, prot_to_real and device info. + * include/grub/offsets.h: Renamed decompressor offsets. + * util/grub-mkimage.c (grub_compression_t): New cmpression lzma. + (image_target_desc): Remove raw_size and rename decompressor fields. + (compress_kernel): Handle lzma. + (generate_image): Handle decompressors on i386-pc. + +2011-11-12 Vladimir Serbinenko + + * configure.ac: Add -fno-asynchronous-unwind-tables. + +2011-11-12 Vladimir Serbinenko + + Move assembly code to C by using intwrap. It increases core size + by 88 bytes but improves compatibility and maintainability. + + * grub-core/kern/i386/pc/startup.S (grub_console_putchar): Moved to ... + * grub-core/term/i386/pc/console.c (grub_console_putchar_real): + ... here. Translated to C. + * grub-core/kern/i386/pc/startup.S (grub_console_getkey): Moved to ... + * grub-core/term/i386/pc/console.c (grub_console_getkey): + ... here. Translated to C. + * grub-core/kern/i386/pc/startup.S (grub_console_getxy): Moved to ... + * grub-core/term/i386/pc/console.c (grub_console_getxy): + ... here. Translated to C. + * grub-core/kern/i386/pc/startup.S (grub_console_gotoxy): Moved to ... + * grub-core/term/i386/pc/console.c (grub_console_gotoxy): + ... here. Translated to C. + * grub-core/kern/i386/pc/startup.S (grub_console_cls): Moved to ... + * grub-core/term/i386/pc/console.c (grub_console_cls): + ... here. Translated to C. + * grub-core/kern/i386/pc/startup.S (grub_console_setcursor): Moved to .. + * grub-core/term/i386/pc/console.c (grub_console_setcursor): + ... here. Translated to C. + * grub-core/kern/i386/pc/startup.S (grub_get_rtc): Moved to .. + * grub-core/kern/i386/pc/init.c (grub_get_rtc): ... here. + Translated to C. + * grub-core/term/i386/pc/console.c (int10_9): New function. + (grub_console_putchar): Likewise. + * include/grub/i386/pc/console.h: Removed the not anymore shared + functions. + +2011-11-12 Vladimir Serbinenko + + Move grub_chainloader_real_boot out of the kernel. + + * grub-core/Makefile.am: Remove machine/loader.h. + * grub-core/kern/i386/pc/startup.S (grub_chainloader_real_boot): + Removed. + * grub-core/lib/i386/relocator.c (grub_relocator16_esi): New extern + variable. + (grub_relocator16_keep_a20_enabled): Likewise. + (grub_relocator16_boot): Fill new variables. + * grub-core/lib/i386/relocator16.S: Add gate a20 handling. + * grub-core/loader/i386/pc/chainloader.c (grub_chainloader_boot): Use + relocator. + (grub_chainloader_unload): Likewise. + (grub_chainloader_cmd): Likewise. + * include/grub/i386/pc/loader.h: Removed. + * include/grub/i386/relocator.h (grub_relocator16_state): Add a20 + and esi. All initialisers updated. + +2011-11-12 Vladimir Serbinenko +2011-11-12 Colin Watson + + * Makefile.util.def (grub-mount): New util. + * .bzrignore: Add grub-mount. + * configure.ac: Check for fuse and enable grub-mount if available. + * docs/man/grub-mount.h2m: New file. + * util/grub-mount.c: Likewise. + +2011-11-11 Vladimir Serbinenko + + * grub-core/commands/efi/fixvideo.c: Gettextize. + * grub-core/commands/hashsum.c: Likewise. + * grub-core/commands/i386/cmostest.c: Likewise. + * grub-core/commands/i386/pc/drivemap.c: Likewise. + * grub-core/commands/i386/pc/lsapm.c: Likewise. + * grub-core/commands/i386/pc/sendkey.c: Likewise. + * grub-core/commands/lsmmap.c: Likewise. + * grub-core/commands/menuentry.c: Likewise. + * grub-core/commands/mips/loongson/lsspd.c: Likewise. + * grub-core/commands/setpci.c: Likewise. + * grub-core/loader/i386/bsd.c: Likewise. + * grub-core/loader/i386/linux.c: Likewise. + * util/getroot.c: Likewise. + * util/grub-editenv.c: Likewise. + * util/grub-fstest.c: Likewise. + * util/grub-mkfont.c: Likewise. + * util/grub-mkimage.c: Likewise. + * util/grub-mkpasswd-pbkdf2.c: Likewise. + * util/grub-pe2elf.c: Likewise. + * util/grub-probe.c: Likewise. + * util/grub-setup.c: Likewise. + * util/ieee1275/ofpath.c: Likewise. + * util/misc.c: Likewise. + * util/raid.c: Likewise. + +2011-11-11 Robert Millan + + * util/getroot.c (grub_util_get_geom_abstraction): Remove + __attribute__((unused)) from `os_dev', which *is* being used. + +2011-11-11 Vladimir Serbinenko + + * include/grub/dl.h (GRUB_ARCH_DL_TRAMP_SIZE) [__ia64__]: Add back + forgotten define. + (GRUB_ARCH_DL_GOT_ALIGN) [__ia64__]: Redefine in terms of + GRUB_IA64_DL_GOT_ALIGN. + (GRUB_ARCH_DL_TRAMP_ALIGN) [__ia64__]: Redefine in terms of + GRUB_IA64_DL_TRAMP_ALIGN. + +2011-11-11 Vladimir Serbinenko + + Replace grub_fatal with normal errors in i386 linux loader. + + * grub-core/loader/i386/linux.c (find_efi_mmap_size): Return 0 on error. + (allocate_pages): Check find_efi_mmap_size return value. + (grub_e820_add_region): Return error. + (grub_linux_boot): Check mmap return value. + +2011-11-11 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c: Gettextized. + * grub-core/commands/cacheinfo.c: Likewise. + * grub-core/commands/cmp.c: Likewise. + * grub-core/commands/efi/loadbios.c: Likewise. + * grub-core/commands/gptsync.c: Likewise. + * grub-core/commands/ieee1275/suspend.c: Likewise. + * grub-core/commands/legacycfg.c: Likewise. + * grub-core/commands/memrw.c: Likewise. + * grub-core/commands/minicmd.c: Likewise. + * grub-core/commands/parttool.c: Likewise. + * grub-core/commands/time.c: Likewise. + * grub-core/commands/videoinfo.c: Likewise. + * grub-core/disk/geli.c: Likewise. + * grub-core/disk/i386/pc/biosdisk.c: Likewise. + * grub-core/disk/luks.c: Likewise. + * grub-core/disk/lvm.c: Likewise. + * grub-core/font/font_cmd.c: Likewise. + * grub-core/fs/zfs/zfscrypt.c: Likewise. + * grub-core/fs/zfs/zfsinfo.c: Likewise. + * grub-core/gfxmenu/view.c: Likewise. + * grub-core/kern/emu/hostdisk.c: Likewise. + * grub-core/kern/emu/main.c: Likewise. + * grub-core/kern/emu/misc.c: Likewise. + * grub-core/kern/emu/mm.c: Likewise. + * grub-core/kern/mips/arc/init.c: Likewise. + * grub-core/kern/mips/loongson/init.c: Likewise. + * grub-core/kern/partition.c: Likewise. + * grub-core/lib/i386/halt.c: Likewise. + * grub-core/lib/mips/arc/reboot.c: Likewise. + * grub-core/lib/mips/loongson/reboot.c: Likewise. + * grub-core/loader/i386/pc/chainloader.c: Likewise. + * grub-core/loader/i386/xnu.c: Likewise. + * grub-core/loader/multiboot.c: Likewise. + * grub-core/net/bootp.c: Likewise. + * grub-core/net/net.c: Likewise. + * grub-core/normal/term.c: Likewise. + * grub-core/partmap/bsdlabel.c: Likewise. + * grub-core/parttool/msdospart.c: Likewise. + * grub-core/term/gfxterm.c: Likewise. + * grub-core/term/terminfo.c: Likewise. + * grub-core/video/i386/pc/vbe.c: Likewise. + * util/grub-menulst2cfg.c: Likewise. + * util/grub-mkdevicemap.c: Likewise. + * util/grub-mklayout.c: Likewise. + * util/grub-mkrelpath.c: Likewise. + * util/grub-script-check.c: Likewise. + * util/ieee1275/grub-ofpathname.c: Likewise. + * util/resolve.c: Likewise. + +2011-11-11 Vladimir Serbinenko + + Support %1$d syntax. + + * tests/printf_unit_test.c: New file. + * Makefile.util.def (printf_test): New test. + * grub-core/kern/misc.c (grub_vsnprintf_real): Support %1$d syntax. + +2011-11-11 Vladimir Serbinenko + + * grub-core/hook/datehook.c (grub_read_hook_datetime): Small stylistic + fix. + +2011-11-11 Vladimir Serbinenko + + * grub-core/efiemu/mm.c (grub_efiemu_mmap_fill): Change printf into + dprintf. + * grub-core/font/font.c (grub_font_load): Likewise. + +2011-11-11 Vladimir Serbinenko + + * util/grub-macho2img.c: Add comment concerning gettext. + * grub-core/lib/legacy_parse.c: Likewise. + +2011-11-11 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vprintf): Add missing va_end. + (grub_xvasprintf): Likewise. + +2011-11-11 Vladimir Serbinenko + + Add const keyword to grub_env_get and gettextize week days. + + * grub-core/hook/datehook.c (grub_datetime_names): Make const. + (grub_read_hook_datetime): Return const char *. + * grub-core/kern/env.c (grub_env_get): Return const char *. All users + updated. + * grub-core/normal/datetime.c (grub_weekday_names): Make const. + Mark for gettext. + (grub_get_weekday_name): Return const char *. Call gettext. + * grub-core/script/argv.c (grub_script_argv_append): Receive const + char * and len as the argument. All users updated. + (grub_script_argv_split_append): Receive const char *. + * include/grub/datetime.h (grub_get_weekday_name): Update proto. + * include/grub/env.h (grub_env_get): Likewise. + (grub_env_read_hook_t): Return const char *. + * include/grub/script_sh.h (grub_script_argv_append): Update proto. + (grub_script_argv_split_append): Likewise. + +2011-11-11 Vladimir Serbinenko + + * grub-core/normal/main.c (grub_normal_execute): Remove leftover call. + +2011-11-11 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_strstr): Moved from here ... + * include/grub/misc.h (grub_strstr): ... here. Make static and inline. + +2011-11-11 Vladimir Serbinenko + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_set_property): + Fix prototype. + +2011-11-11 Vladimir Serbinenko + + Fix mips compilation. + + * grub-core/lib/xzembed/xz_dec_stream.c (xz_dec): Restrict hash_id to + normal decoder. + (hashes): Use in embed decoder as well (for sizes). + (dec_stream_header): Fix embed decompressor logic. + (dec_stream_footer): Likewise. + +2011-11-11 Vladimir Serbinenko + + * grub-core/kern/x86_64/dl.c (grub_arch_dl_relocate_symbols): Issue + an error and not a fatal on unrecognised relocation types. + +2011-11-11 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_parse_args): + Issue error rather than printf on unknown arguments. + +2011-11-11 Vladimir Serbinenko + + * grub-core/kern/ieee1275/ieee1275.c (grub_ieee1275_set_property): + Make buf a const. + +2011-11-11 Vladimir Serbinenko + + * grub-core/fs/zfs/zfscrypt.c (GRUB_MOD_INIT), (GRUB_MOD_FINI): + Fix module name. + +2011-11-11 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (grub_ntfs_read_symlink): Stylistic fix. Remove + leftover debug printf. + +2011-11-11 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_embed): Spelling fix. + +2011-11-11 Vladimir Serbinenko + + * grub-core/efiemu/main.c (grub_efiemu_register_configuration_table): + A stylistic fix. + +2011-11-11 Vladimir Serbinenko + + * grub-core/commands/probe.c (grub_cmd_probe): Fix error message. + +2011-11-10 Shea Levy + + Allow all modules to perform serial IO + + * grub-core/term-serial.c (grub_serial_find): Remove static qualifier + * include/grub/serial.h (grub_serial_port_configure): New inline + function. + (grub_serial_port_fetch): Likewise. + (grub_serial_port_put): Likewise. + (grub_serial_port_fini): Likewise. + (grub_serial_find): New proto. + +2011-11-10 Vladimir Serbinenko + + Put symlink at the end of the node and fix a potential + memory corruption. + + * grub-core/fs/iso9660.c (grub_fshelp_node): New field have_symlink. + Make symlink into an array. + (set_rockridge): Set have_symlink and alloc_dirents. + (grub_iso9660_read_symlink): Use new layout. + (grub_iso9660_iterate_dir): Fix memory corruption. + Use new layout. + (grub_iso9660_dir): Set have_symlink. + (grub_iso9660_open): Likewise. + +2011-11-10 Vladimir Serbinenko + + Remove local keyword. + + * util/grub-mkconfig_lib.in (version_test_numeric): Remove local. + (version_test_gt): Likewise. + (version_find_latest): Likewise. + (gettext_printf): Likewise. + * util/grub.d/10_windows.in (get_os_name_from_boot_ini): Likewise. + +2011-11-10 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (zfs_mount): Fix spurious warning. + +2011-11-10 Vladimir Serbinenko + + Fix ZFS memory and resource leaks. + + * grub-core/fs/zfs/zfs.c (fill_vdev_info_real): New paramter inserted. + All users updated. + Free type on exit. + (fill_vdev_info): New parameter inserted. All users updated. + (check_pool_label): Likewise. + (scan_disk): Likewise. + (scan_devices): Close non-inserted disks. + (fzap_iterate): Free l. + (unmount_device): Free children descripto memory. + +2011-11-10 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Fix grub_strncat + argument (access out of bounds). + +2011-11-10 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_read_logical): Fix RAID10 logic for + >= 6 drives. + +2011-11-10 Vladimir Serbinenko + + * include/grub/i386/netbsd_bootinfo.h (grub_netbsd_btinfo_bootwedge): + Fix declaration. + +2011-11-09 Vladimir Serbinenko + + Fix several memory leaks. + + * grub-core/fs/btrfs.c (grub_btrfs_dir): Fix memory leak. + * grub-core/fs/cpio.c (grub_cpio_find_file): Likewise. + (grub_cpio_dir): Likewise. + * grub-core/fs/fat.c (grub_fat_label): Likewise. + * grub-core/fs/jfs.c (grub_jfs_label): Likewise. + * grub-core/fs/romfs.c (grub_romfs_close): Likewise. + (grub_romfs_label): Likewise. + * grub-core/fs/squash4.c (squash_mount): Use zalloc for safety. + (squash_unmount): New function. + (grub_squash_dir): Fix memory leak. + (grub_squash_open): Likewise. + (grub_squash_read): Likewise. + (grub_squash_mtime): Likewise. + * grub-core/fs/xfs.c (grub_xfs_open): Likewise. + * grub-core/fs/zfs/zfs.c (check_pool_label): Likewise. + * util/grub-fstest.c (fstest): Likewise. + +2011-11-09 Vladimir Serbinenko + + * include/grub/misc.h (grub_strncat): Fix the order of conditionals to + avoid accessing beyond the array. + +2011-11-09 Vladimir Serbinenko + + * configure.ac: Add missing -mXX to TARGET_CPPFLAGS. + +2011-11-09 Vladimir Serbinenko + + Several AFFS fixes. + + * grub-core/fs/affs.c (grub_affs_bblock): Replace flags with version. + (GRUB_AFFS_FLAG_FFS): Removed. + (GRUB_AFFS_SYMLINK_SIZE): Likewise. + (GRUB_AFFS_FILETYPE_DIR): Make positive and unsigned. + (GRUB_AFFS_FILETYPE_DIR), (GRUB_AFFS_FILETYPE_REG): Fix a mix-up. + (grub_fshelp_node): Make block 32-bit. + Add block_cache and last_block_cache. + (grub_affs_read_block): Fill and use block cache. + (grub_affs_read_file): Removed. + (grub_affs_mount): Zero-fill node. Fix version check. Don't reread + boot block. + (grub_affs_read_symlink): Fix symlink size. Add a \0 at the end for + safety. + (grub_affs_iterate_dir): Use more appropriate types. Zero-fill allocated + space. + (grub_affs_close): Free block cache. + (grub_affs_read): Use grub_fshelp_read_file directly. + +2011-11-08 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (read_dva): Issue an error if read failed + with no error set. + +2011-11-08 Vladimir Serbinenko + + * grub-core/lib/LzmaEnc.c (LzmaEnc_CodeOneBlock): Remove set but not + used variable. + * grub-core/kern/ia64/dl_helper.c (grub_ia64_dl_get_tramp_got_size): + Likewise. + +2011-11-08 Vladimir Serbinenko + + Fix potential problem with calling zfs_to_cpu and cpu_to_be in a row. + + * grub-core/fs/zfs/zfscrypt.c (grub_zfs_decrypt_real): Use explicit + byteswap when needed. + +2011-11-08 Vladimir Serbinenko + + Fix FreeBSD compilation. + + * grub-core/disk/geli.c (GRUB_MD_SHA256) [GRUB_UTIL]: Redefine in a way + to avoid circular dependency. + (GRUB_MD_SHA512) [GRUB_UTIL]: Likewise. + * util/getroot.c (grub_util_follow_gpart_up): Move from here... + * grub-core/kern/emu/hostdisk.c (+grub_util_follow_gpart_up): ... here. + +2011-11-08 Vladimir Serbinenko + + Fix ZFS crypto error types. + + * grub-core/fs/zfs/zfscrypt.c (grub_ccm_decrypt): Fix return type. + (grub_gcm_decrypt): Likewise. + (grub_zfs_load_key_real): Fix error code type. Handle possible error + from PBKDF2. + +2011-11-08 Vladimir Serbinenko + + Illumos support. + + * Makefile.util.def (10_illumos): New script. + * configure.ac: Set COND_HOST_ILLUMOS. + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors) [__sun__]: + Support Illumos calls. + (find_partition_start) [__sun__]: Likewise. + (convert_system_partition_to_system_disk) [__sun__]: Likewise. + (device_is_wholedisk) [__sun__]: Handle Illumos naming scheme. + (grub_util_biosdisk_get_grub_dev) [__sun__]: Handle Illumos. + * util/getroot.c (find_root_device_from_libzfs) [__sun__]: Return raw + device. + * util/grub-probe.c (probe) [__sun__]: Do character check. + * util/grub.d/10_illumos.in: New file. + +2011-11-08 Vladimir Serbinenko + + Support escaped commas in hostdisk. + + * grub-core/kern/emu/hostdisk.c (unescape_cmp): New function. + (find_grub_drive): Use unescape_cmp. + (make_device_name): Escape commas. + +2011-11-08 Vladimir Serbinenko + + * util/grub.d/10_kfreebsd.in: Use ${grub_mkrelpath} not grub-mkrelpath. + +2011-11-08 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (zap_iterate): Remove set but not used + variable. + +2011-11-08 Vladimir Serbinenko + + Support trampoline jumps on powerpc. + + * grub-core/kern/dl.c (grub_dl_load_segments) [__powerpc__]: Follow + __ia64__ path. + (grub_dl_load_segments): Set mod->sz. + (grub_dl_flush_cache): Flush whole space occupied by module, not just + segments. + * grub-core/kern/ia64/dl.c (nopm): Make const while on it. + (jump): Likewise. + * grub-core/kern/powerpc/dl.c (grub_arch_dl_get_tramp_got_size): New + function. + (trampoline): New struct. + (trampoline_template): New const. + (grub_arch_dl_relocate_symbols): Create trampolines on overflow. + * include/grub/dl.h (grub_dl): Add sz element. + [__powerpc__]: Follow __ia64__. + (GRUB_ARCH_DL_TRAMP_ALIGN): Define on ppc. + (GRUB_ARCH_DL_GOT_ALIGN): Likewise. + (GRUB_ARCH_DL_TRAMP_SIZE): Likewise. + (grub_arch_dl_get_tramp_got_size) [__powerpc__]: New proto. + +2011-11-06 Vladimir Serbinenko + + ZFS crypto support. + + * Makefile.util.def (libgrubmods): Add grub-core/fs/zfs/zfscrypt.c. + * grub-core/Makefile.core.def (zfscrypt): New module. + * grub-core/fs/zfs/zfs.c (subvolume): New structure. + (grub_zfs_data): Replace mdn with subvol. Put case_insensitivity inside + it. All users updated. + (grub_zfs_decrypt): New var. + (grub_zfs_load_key): Likewise. + (zio_checksum_functions): Add SHA256+MAC. + (zio_checksum_verify): Handle incomplete comparison due to MAC. + (zio_read): Handle encrypted blocks. + (zap_verify): Remove incorrect check. + (fzap_iterate): Handle non-standard fzap. + (zap_iterate): Likewise. + (zap_iterate_u64): New function. + (dnode_get_fullpath): Load keys. + * grub-core/fs/zfs/zfscrypt.c: New file. + * grub-core/lib/crypto.c (grub_crypto_cipher_close): Removed. + (grub_crypto_ecb_encrypt): Make input const. + * include/grub/crypto.h (grub_crypto_cipher_close): Inline. + (grub_crypto_ecb_encrypt): Make input const. + (GRUB_CIPHER_AES): New macro. + * include/grub/zfs/dmu.h (dmu_object_type): Add DMU_OT_DSL_KEYCHAIN. + * include/grub/zfs/dsl_dir.h (dsl_dir_phys): Add keychain. + * include/grub/zfs/spa.h (grub_zfs_endian): Moved from here ... + * include/grub/zfs/zfs.h (grub_zfs_endian): ... here. Added GURB_ZFS_ + prefix. All users updated. + (grub_zfs_add_key): New proto. + (grub_zfs_decrypt): Likewise. + (grub_zfs_load_key): Likewise. + * include/grub/zfs/zio.h (zio_checksum): Add SHA256+MAC. + * util/grub-fstest.c (options): Add -K option. + (argp_parser): Likewise. + +2011-11-05 Vladimir Serbinenko + + Support zle compression on ZFS. + + * grub-core/fs/zfs/zfs.c (zle_decompress): New function. + (decomp_table): Add zle. + * include/grub/zfs/zio.h (zio_compress): Add zle. + +2011-11-05 Vladimir Serbinenko + + Support BtrFS embedding. + + * grub-core/fs/btrfs.c (grub_btrfs_embed) [GRUB_UTIL]: New function. + (grub_btrfs_fs) [GRUB_UTIL]: Set embed. + * include/grub/fs.h (grub_fs) [GRUB_UTIL]: New field embed. + * util/grub-setup.c (setup): Use fs embedding if available. + Add additional sanity check. + +2011-11-05 Vladimir Serbinenko + + * util/grub-install.in: Fix condition for config_opt. + +2011-11-04 Vladimir Serbinenko + + Support third redundancy strip on raidz3. + + * grub-core/fs/zfs/zfs.c (recovery): Add Gauss for general case. + Return error on singularity. All users updated. + (read_device): Don't stop on 3rd failure on raidz3. + +2011-11-04 Vladimir Serbinenko + + Support case-insensitive ZFS subvolumes. + + * grub-core/fs/zfs/zfs.c (mzap_lookup): New parameter case_insensitive. + All users updated. + (zap_hash): Likewise. + (name_cmp): New function. + (zap_leaf_array_equal): New parameter case_insensitive. + All users updated. + (zap_leaf_lookup): Likewise. + (fzap_lookup): Likewise. + (zap_lookup): Likewise. + (dnode_get_path): New parameter case_insensitive. Retrieve case + sensitiviness of a volume. All users updated. + (dnode_get_fullpath): New parameter case_insensitive. + All users updated. + (grub_zfs_dir): Set info.case_insensitiveness. + +2011-11-04 Vladimir Serbinenko + + Support second redundancy strip on raidz(2,3). + + * grub-core/fs/zfs/zfs.c (powx): New array. + (powx_inv): Likewise. + (poly): New const. + (xor_out): New function. + (gf_mul): Likewise. + (recovery): Likewise. + (read_device): Use second redundancy strip. + +2011-11-04 Vladimir Serbinenko + + Use a power of generator representation of GF(256) multiplication group + to save space time and complexity. + + * grub-core/disk/raid6_recover.c (raid6_table1): Removed. + (raid6_table2): Likewise. + (powx): New array. + (powx_inv): Likewise. + (poly): New const. + (grub_raid_block_mul): Replace with ... + (grub_raid_block_mulx): ...this. + (grub_raid6_init_table): Rewritten. + (grub_raid6_recover): Use power of generator representation. + +2011-11-04 Vladimir Serbinenko + + * grub-core/disk/raid6_recover.c (grub_raid6_recover): Get start_sector + for the right device. + +2011-11-04 Vladimir Serbinenko + + * include/grub/kernel.h (grub_module_header): Make type into uint32 as + expected by grub-mkimage and it's more clear since there is no implicit + padding. + +2011-11-04 Vladimir Serbinenko + + * grub-core/disk/raid.c (scan_devices): Don't derference NULL on whole + disk. + * grub-core/disk/lvm.c (do_lvm_scan): Likewise. + +2011-11-03 Philipp Matthias Hahn + + * util/grub-mkrescue.in: Fix handling xorriso option. + +2011-11-03 Vladimir Serbinenko + + * grub-core/gettext/gettext.c (grub_gettext_init_ext): Exit if local is + NULL. + +2011-11-03 crocket + + * util/grub.d/10_linux.in: Add Slackware initrd naming. + +2011-11-03 Vladimir Serbinenko + + XZ CRC64 and SHA256 support. + + * Makefile.util.def (libgrubmods): Add crc64.c. + * grub-core/Makefile.core.def (crc64): New module. + * grub-core/lib/crc64.c: New file. + * grub-core/lib/xzembed/xz_dec_stream.c (xz_dec_hash) + [!GRUB_EMBED_DECOMPRESSOR]: Rename crc32_context to hash_context. + Fix the type. + (MAX_HASH_SIZE): New define. + (xz_dec) [!GRUB_EMBED_DECOMPRESSOR]: Add generic hash fields. + (dec_block) [!GRUB_EMBED_DECOMPRESSOR]: Handle non-crc32 hashes. + (index_update) [!GRUB_EMBED_DECOMPRESSOR]: Likewise. + (dec_index) [!GRUB_EMBED_DECOMPRESSOR]: Likewise. + (crc32_validate) [!GRUB_EMBED_DECOMPRESSOR]: Rename to ... + (hash_validate) [!GRUB_EMBED_DECOMPRESSOR]: ... this. + Handle non-crc32 hashes. + (hashes) [!GRUB_EMBED_DECOMPRESSOR]: New variable. + (dec_stream_header): Handle non-crc32 hashes. + (dec_stream_footer): Likewise. + (dec_block_header): Likewise. + (dec_main): Likewise. + (xz_dec_init): Likewise. + (xz_dec_reset): Likewise. + (xz_dec_end): Likewise. + * util/import_gcry.py: Add CRC64 line. + +2011-11-03 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_mtime) [MODE_UFS2]: Check mtime field + as well. + +2011-11-03 Vladimir Serbinenko + + Make reiserfs label retrieval similar to other *_label functions. + + * grub-core/fs/reiserfs.c (grub_reiserfs_superblock): New field label. + (REISERFS_MAX_LABEL_LENGTH): Removed. + (REISERFS_LABEL_OFFSET): Likewise. + (grub_reiserfs_label): Rewritten. + +2011-11-03 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_mtime): Use correct superblock + field. + +2011-11-03 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (read_device): Support raidz3. + +2011-11-02 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (read_device): Add ability to sustain a single + drive failure on both raidz and raidz2. + +2011-11-02 Vladimir Serbinenko + + Fix RAIDZ(2) for >= 5 devices. + + * grub-core/fs/zfs/zfs.c (read_device): Fix length formula. Remove + asize argument. All users updated. + +2011-11-01 Vladimir Serbinenko + + Fix RAIDZ(2). + + * grub-core/fs/zfs/zfs.c (grub_zfs_device_desc): New member ashift. + (fill_vdev_info_real): Set ashift. + (read_device): Rewrite RAIDZ part based on reverse engineering. + +2011-10-31 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_extent_read): Add sanity check and + don't report potentially unavialiable fields in debug output. + (find_path): Fix double-free and memory leak. + +2011-10-31 Vladimir Serbinenko + + Read label on UFS1. + + * grub-core/fs/ufs.c (grub_ufs_label): Remove MODE_UFS2 condition. + (grub_ufs_fs): Always set .label. + +2011-10-31 Vladimir Serbinenko + + Use shifts in UFS. + + * grub-core/fs/ufs.c (UFS_LOG_BLKSZ): New macro. + (grub_ufs_data): New field log2_blksz. + (grub_ufs_read_file): Use shifts. + (grub_ufs_mount): Check block size and logarithm it. + +2011-10-31 Vladimir Serbinenko + + * grub-core/fs/ufs.c (grub_ufs_lookup_symlink): Fix handling of + long symlinks. + +2011-10-30 Vladimir Serbinenko + + Handle symlinks and long names on tar and cpio. + + * grub-core/fs/cpio.c (ATTR_TYPE): New definition. + (ATTR_FILE): Likewise. + (ATTR_DIR): Likewise. + (ATTR_LNK): Likewise. + (grub_cpio_data) [MODE_USTAR]: New fields linkname and linkname_alloc. + (grub_cpio_find_file): Fill mode, handle linkname field as well as + L and K entries. + (grub_cpio_mount): Zero-fill data. + (handle_symlink): New function. + (grub_cpio_dir): Handle symlinks. + (grub_cpio_open): Likewise. + (grub_cpio_close) [MODE_USTAR]: Free linkname. + +2011-10-30 Vladimir Serbinenko + + Fix iso9660 filename limitations and fix memory leaks. + + * grub-core/fs/iso9660.c (set_rockridge): Free sua at the end. + (grub_iso9660_iterate_dir): Fix slash handling in symlinks. + +2011-10-30 Vladimir Serbinenko + + Fix JFS file name length limitations. + + * grub-core/fs/jfs.c (grub_jfs_inode): Fix in-place symlink length. + (grub_jfs_diropen): Fix maximum filename length. + (grub_jfs_getent): Fix filename length. + (grub_jfs_lookup_symlink): Fix size checks. + +2011-10-30 Vladimir Serbinenko + + * grub-core/loader/mips/linux.c (loongson_machtypes): Fix fuloong type + string. + +2011-10-30 Vladimir Serbinenko + + Leverage BFS implementation to read AFS. + + * Makefile.util.def (libgrubmods): Add afs.c. + * grub-core/Makefile.core.def (afs): New module + * grub-core/fs/afs.c: New file. + * grub-core/fs/bfs.c [MODE_AFS]: Adapt for AFS. + +2011-10-30 Vladimir Serbinenko + + * grub-core/fs/bfs.c: Macroify and add some necessary sanity checks. + +2011-10-30 Vladimir Serbinenko + + * grub-core/fs/bfs.c: Run indent. + +2011-10-30 Vladimir Serbinenko + + BFS implementation based on the specification. + + * grub-core/fs/bfs.c: New file. + * Makefile.util.def (libgrubmods): Add bfs.c. + * grub-core/Makefile.core.def (bfs): New module. + +2011-10-30 Vladimir Serbinenko + + * util/grub-fstest.c (cmd_cp): Clarify error message. + (cmd_cmp): Likewise. + +2011-10-30 Yves Blusseau + + * po/POTFILES.in: Regenerate because of the removal of afs, afs_be, befs + and befs_be. + +2011-10-29 Vladimir Serbinenko + + Remove afs and befs because of copyright problem. + + * grub-core/fs/afs.c: Removed. + * grub-core/fs/afs_be.c: Removed. + * grub-core/fs/befs.c: Removed. + * grub-core/fs/befs_be.c: Removed. + * Makefile.util.def (libgrubkern): Remove afs, afs_be, befs and befs_be. + * grub-core/Makefile.core.def (afs): Removed. + (afs_be): Likewise. + (befs): Likewise. + (befs_be): Likewise. + +2011-10-28 Vladimir Serbinenko + + Prefer rockridge over Joliet. + + * grub-core/fs/iso9660.c (grub_iso9660_mount): Move rockridge detection + to ... + (set_rockridge): ... here. + (grub_iso9660_mount): Check rockridge on the primary label when + discovering. Ignore Joliet if Rockridge is present. + +2011-10-28 Vladimir Serbinenko + + Use shifts in nilfs2. + + * grub-core/fs/nilfs2.c (LOG_INODE_SIZE): New definition. + (LOG_NILFS_DAT_ENTRY_SIZE): Likewise. + (grub_nilfs2_palloc_entries_per_group): Replace with ... + (grub_nilfs2_log_palloc_entries_per_group): ... this. + (grub_nilfs2_palloc_group): Use shifts and bitmasks. + (grub_nilfs2_entries_per_block): Replaced with ... + (grub_nilfs2_log_entries_per_block_log): ... this. + (grub_nilfs2_blocks_per_group): Replaced with ... + (grub_nilfs2_blocks_per_group_log): ... this. + (grub_nilfs2_blocks_per_desc_block): Replaced with ... + (grub_nilfs2_blocks_per_desc_block_log): ... this. + (grub_nilfs2_palloc_desc_block_offset): Replaced with ... + (grub_nilfs2_palloc_desc_block_offset_log): ... this. + (grub_nilfs2_palloc_entry_offset): Replaced ... + (grub_nilfs2_palloc_entry_offset_log): ... this. Use shifts. + (grub_nilfs2_dat_translate): Use shifts. + (grub_nilfs2_read_inode): Likewise. + (GRUB_MOD_INIT): Ensure that logs are correct. + +2011-10-28 Vladimir Serbinenko + + Use shifts in minix filesystem. + + * grub-core/fs/minix.c (GRUB_MINIX_ZONESZ): Use log_block_size. + (GRUB_MINIX_ZONE2SECT): Likewise. + (grub_minix_data): Replace block_size with log_block_size. + (grub_minix_read_file): Use shifts. + (grub_minix_mount): Check block size and take a logarithm. + +2011-10-28 Vladimir Serbinenko + + Use shifts in squash4. + + * grub-core/fs/squash4.c (grub_squash_data): New field log2_blksz. + (squash_mount): Check block size and take logarithm. + (direct_read): Use shifts. + +2011-10-28 Vladimir Serbinenko + + Correct befs block counting logic. + + * grub-core/fs/afs.c (GRUB_AFS_BLOCKS_PER_DI_RUN): Replaced with... + (GRUB_AFS_LOG_BLOCKS_PER_DI_RUN): ... this. + (GRUB_AFS_BLOCKRUN_LOG_SIZE): New definition. + (grub_afs_read_inode): Use block_shift. + (RANGE_SHIFT): New definition. + (grub_afs_read_block): Account for RANGE_SHIFT, emit errors on + unexpected conditions, use shifts and appropriate types. + (GRUB_MOD_INIT): Check the value of GRUB_AFS_BLOCKRUN_LOG_SIZE. + +2011-10-28 Vladimir Serbinenko + + * grub-core/disk/raid.c (scan_devices): Check partition. + * grub-core/disk/lvm.c (do_lvm_scan): Likewise. + +2011-10-27 Vladimir Serbinenko + + Support BFS (befs) UUID. + + * grub-core/fs/afs.c (grub_afs_inode): Make small_data zero-size. + (grub_afs_small_data_element_header): New struct. + (grub_afs_read_inode): Read complete inode. Fix ino type while on it. + (grub_afs_read_attribute) [MODE_BFS]: New function. + (grub_afs_iterate_dir): Allocate for complete inode. + (grub_afs_mount): Likewise. + (grub_afs_uuid) [MODE_BFS]: New function. + (grub_afs_fs) [MODE_BFS]: Add .uuid. + +2011-10-27 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (read_device): Silence spurious warning. + (zfs_unmount): Fix memory leak. + +2011-10-26 Vladimir Serbinenko + + Support NTFS reparse points. + + * grub-core/fs/ntfs.c (list_file): Set symlink type when appropriate. + (symlink_descriptor): New struct. + (grub_ntfs_read_symlink): New function. + (grub_ntfs_iterate_dir): Use grub_ntfs_read_symlink. + (grub_ntfs_open): Likewise. + +2011-10-26 Vladimir Serbinenko + + * include/grub/ntfs.h: Add GRUB_NTFS_ prefix. All users updated. + +2011-10-26 Vladimir Serbinenko + + fstest xnu_uuid subcommand. + + * grub-core/commands/xnu_uuid.c (libgrubkrn): Add + grub-core/commands/xnu_uuid.c. + * util/grub-fstest.c (CMD_XNU_UUID): New enum value. + (fstest): Handle xnu_uuid. + (options): Document xnu_uuid. + (argp_parser): Parse xnu_uuid. + +2011-10-26 Vladimir Serbinenko + + * grub-core/commands/xnu_uuid.c (grub_cmd_xnu_uuid): Support + -l argument. Add newline at the end if printing. + (GRUB_MOD_INIT): Document -l. + +2011-10-26 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_uuid): Add missing field length. + +2011-10-26 Vladimir Serbinenko + + ZFS multi-device and version 33 support. + + * Makefile.util.def (libgrubkern): Add grub-core/fs/zfs/zfsinfo.c. + * grub-core/fs/zfs/zfs.c (grub_zfs_device_desc): New struct. + (grub_zfs_data): Add multidev-ice-related fields. + (zio_checksum_verify): Zero-pad printed values. Print checksum name. + (dva_get_offset): Make dva const. + (zfs_fetch_nvlist): New function. + (fill_vdev_info_real): Likewise. + (fill_vdev_info): Likewise. + (check_pool_label): Likewise. + (scan_disk): Likewise. + (scan_devices): Likewise. + (read_device): Likewise. + (read_dva): Likewise. + (zio_read_gang): Use read_dva. + (zio_read_data): Likewise. + (zap_leaf_lookup): Add missing endian conversion. + (zap_verify): Add missing endian conversion. All users updated. + (fzap_lookup): Likewise. + (fzap_iterate): Likewise. + (dnode_get_path): Handle SA bonus. + (nvlist_find_value): Make input const. All users updated. + (unmount_device): New function. + (zfs_unmount): Use unmount_device. + (zfs_mount): Use scan_disk. + (zfs_mtime): New function. + (grub_zfs_open): Handle system attributes. + (fill_fs_info): Likewise. + (grub_zfs_dir): Likewise. + (grub_zfs_fs): Add mtime. + * grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Add missing return. + * include/grub/zfs/sa_impl.h (SA_TYPE_OFFSET): New definition. + (SA_MTIME_OFFSET): Likewise. + (SA_SYMLINK_OFFSET): Likewise. + * include/grub/zfs/zfs.h (SPA_VERSION): Increase to 33. + * util/grub-fstest.c (CMD_ZFSINFO): New enum value. + (fstest): Support zfsinfo. + (argp_parser): Likewise. + +2011-10-26 Vladimir Serbinenko + + * include/grub/datetime.h (grub_datetime2unixtime): Fix off-by-one + error. + +2011-10-26 Vladimir Serbinenko + + ZFS fixes. + + * grub-core/fs/zfs/zfs.c (fzap_iterate): Fix handling of indexes + sharing the same block. Iterate over correct number of indices. + (dnode_get_path): Handle symlinks correctly. + +2011-10-25 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_sblock): Fix offset to volname. + +2011-10-25 Vladimir Serbinenko + + Read label on HFS+. + + * grub-core/fs/hfsplus.c (grub_hfsplus_cmp_catkey_id): New function. + (grub_hfsplus_btree_search): Fix types. + (grub_hfsplus_label): Implement. + +2011-10-25 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (grub_ntfs_uuid): Fix a memory leak. + +2011-10-25 Vladimir Serbinenko + + * grub-core/fs/fat.c (grub_fat_uuid): Make uppercase to match Linux. + +2011-10-25 Vladimir Serbinenko + + Fix symlink handling on iso9660. + + * grub-core/fs/iso9660.c (grub_fshelp_node): Remove dir_off. Add symlink + All users updated. + (grub_iso9660_susp_iterate): Accept zero-size iterate. + (grub_iso9660_read_symlink): Moved most of code ... + (grub_iso9660_iterate_dir): ... here. Fill node->symlink. + +2011-10-25 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c (grub_netbsd_add_boot_disk_and_wedge): + Use union to avoid breaking strict-aliasing rules. + +2011-10-25 Vladimir Serbinenko + + Support multi-extent iso files. + + * grub-core/fs/iso9660.c (grub_iso9660_data): Remove first_sector. + Add node. + (grub_fshelp_node): Revamp. All users updated. + (FLAG_*): New enum. + (read_node): New function. + (grub_iso9660_susp_iterate): Use read_node. Receive a node as argument. + All users updated. + (grub_iso9660_mount): Don't attempt to read sua when there is none. + (get_node_size): New function. + (grub_iso9660_iterate_dir): Use read_node. Agglomerate multi-extent + entries. + Fix memory leak on . and .. + (grub_iso9660_read): Use read_node. + (grub_iso9660_close): Free node. + +2011-10-25 Vladimir Serbinenko + + Fix tar 4G limit and handle paths containing dot. + + * grub-core/fs/cpio.c (grub_cpio_data): Use grub_off_t for offsets. + (canonicalize): New function. + (grub_cpio_find_file): Use canonicalize. Store offs in + grub_disk_addr_t. + (grub_cpio_dir): Use grub_disk_addr_t. + (grub_cpio_open): Likewise. + +2011-10-25 Vladimir Serbinenko + + Fix handling of uncompressed blocks on squashfs and break 4G limit. + + * grub-core/fs/squash4.c (grub_squash_super): Add block_size. Remove + unused flags. + (grub_squash_inode): Add long_file and block_size. + (grub_squash_cache_inode): New struct. + (grub_squash_dirent): Make types into enum. + (SQUASH_TYPE_LONG_REGULAR): New type. + (grub_squash_frag_desc): Add field size. + (SQUASH_BLOCK_FLAGS): New enum. + (grub_squash_data): Use grub_squash_cache_inode. + (grub_fshelp_node): Make ino_chunk 64-bit. + (read_chunk): Minor argument change. All users updated. + (squash_mount): Use correct le_to_cpu. + (grub_squash_open): Handle LONG_REGULAR. + (direct_read): New function. + (grub_squash_read_data): Handle blocks correctly. + +2011-10-25 Vladimir Serbinenko + + * grub-core/kern/disk.c (grub_disk_read_small): Fix memory leak. + +2011-10-25 Vladimir Serbinenko + + * grub-core/fs/romfs.c (grub_romfs_open): Add missing return. + +2011-10-24 Vladimir Serbinenko + + Fix 2G limit on ZFS. + + * grub-core/fs/zfs/zfs.c (zio_checksum_verify): Use more appropriate + types. + (uberblock_verify): Likewise. + (dmu_read): Likewise. + (grub_zfs_read): Likewise. Remove invalid cast. + +2011-10-24 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_blkno): Use more appropriate types. + (grub_jfs_blkno): Fix incorrect shift. + (grub_jfs_read_file): Use more appropriate types. + +2011-10-24 Vladimir Serbinenko + + Support triple indirect on minix2 and minix3. + + * grub-core/fs/minix.c (grub_minix_inode) [MODE_MINIX2 || MODE_MINIX3]: + Declare triple_indir_zone. + (grub_minix_get_file_block) [MODE_MINIX2 || MODE_MINIX3]: Handle triple + indirect. + +2011-10-24 Vladimir Serbinenko + + Minix FS fixes. + + * grub-core/fs/minix.c (GRUB_MINIX_INODE_SIZE): Size is always 32-bit. + (grub_minix_inode) [!MODE_MINIX2 && !MODE_MINIX3]: Make size 32-bit. + Rename ctime to mtime. All users updated. + (grub_minix_get_file_block): Fix types and double indirect computations. + +2011-10-23 Vladimir Serbinenko + + * grub-core/fs/fat.c (grub_fat_label) [MODE_EXFAT]: Set *label to 0 + if no label is found. + (grub_fat_iterate_dir): Fix file size type. + (grub_fat_iterate_dir): Likewise. + +2011-10-23 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (gf_invert): Declare as const and + save some space. + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_RAW_SIZE): Decrease. + (GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_PART): Likewise. + +2011-10-23 Vladimir Serbinenko + + * util/import_gcry.py: Automatically fix camellia.c and camellia.h. + +2011-10-23 Vladimir Serbinenko + + * util/import_gcry.py: Accept space between # and include. + +2011-10-23 Vladimir Serbinenko + + * grub-core/lib/setjmp.S [__ia64__]: Include ./ia64/longjmp.S. + +2011-10-23 Vladimir Serbinenko + + Fine grainely disable warnings on lexer. Remove Wno-error on it. + + * grub-core/Makefile.core.def (normal): Remove -Wno-error. + * grub-core/script/lexer.c: Declare yytext_ptr to avoid having + yylex_strncpy. + * grub-core/script/yylex.l: Add fine-grained #pragma. + +2011-10-23 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/string.h (memcpy) [GRUB_UTIL]: + New inline function. + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h (memcpy) [GRUB_UTIL]: + Likewise. + (memset) [GRUB_UTIL]: Likewise. + (memcmp) [GRUB_UTIL]: Likewise. + +2011-10-23 Vladimir Serbinenko + + * include/grub/misc.h (grub_memcpy): Declare grub_memcpy with static + inline function rather than a define. + +2011-10-23 Vladimir Serbinenko + + * util/grub-setup.c: Add missing include. + +2011-10-23 Vladimir Serbinenko + + * util/ieee1275/grub-ofpathname.c: Add missing include. + +2011-10-23 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S (grub_exit): Add missing zeroing-out. + * grub-core/lib/i386/reboot_trampoline.S (grub_reboot_start): + Likewise. + +2011-10-23 Vladimir Serbinenko + + * grub-core/io/lzopio.c (test_header): Fix incorrect memcmp instead of + grub_memcmp usage. + +2011-10-23 Vladimir Serbinenko + + * util/grub-install.in: Add datarootdir as per automake manual + suggestion. + * util/grub-mknetdir.in: Likewise. + +2011-10-23 Vladimir Serbinenko + + * util/grub.d/10_hurd.in: Add datarootdir as per automake manual + suggestion. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + +2011-10-20 Vladimir Serbinenko + + Remove redundant grub_kernel_image_size. + + * grub-core/kern/i386/coreboot/init.c (grub_machine_init): Use + _edata and _start. + * grub-core/kern/i386/coreboot/startup.S: Move multiboot header after + the small code. It moves it only by few bytes but simplifies the code. + * grub-core/kern/i386/pc/init.c (grub_machine_init): Use _edata and + _start. + * grub-core/kern/i386/pc/startup.S: Use _edata and _start. + (grub_kernel_image_size): Removed. + * grub-core/kern/i386/qemu/startup.S: Use _edata and _start. + (grub_kernel_image_size): Removed. + [APPLE_CC]: Remove apple compiler support. i386-qemu port can't be + compiled with Apple toolchain. + * grub-core/kern/sparc64/ieee1275/crt0.S: Remove leftover fields. + * include/grub/i386/pc/kernel.h (grub_kernel_image_size): Removed. + * include/grub/i386/qemu/kernel.h (grub_kernel_image_size): Removed. + (grub_total_module_size): Likewise. + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_KERNEL_IMAGE_SIZE): + Removed. + (GRUB_KERNEL_I386_PC_COMPRESSED_SIZE): Put it lower. + (GRUB_KERNEL_I386_PC_INSTALL_DOS_PART): Likewise. + (GRUB_KERNEL_I386_PC_INSTALL_BSD_PART): Likewise. + (GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY): Likewise. + (GRUB_KERNEL_I386_QEMU_KERNEL_IMAGE_SIZE): Removed. + (GRUB_KERNEL_SPARC64_IEEE1275_KERNEL_IMAGE_SIZE): Likewise. + (GRUB_KERNEL_SPARC64_IEEE1275_COMPRESSED_SIZE): Likewise. + * include/grub/sparc64/ieee1275/kernel.h (grub_kernel_image_size): + Removed. + (grub_total_module_size): Removed. + * util/grub-mkimage.c (image_target_desc): Remove image_size. + (image_targets): Likewise. + Set .compressed_size to no field on sparc. + (generate_image): Remove kernel_image_size handling. + +2011-10-19 Szymon Janc + + * grub-core/bus/usb/uhci.c (grub_uhci_setup_transfer): Fix possible + NULL pointer dereference. + +2011-10-19 Vladimir Serbinenko + + Removed unused GRUB_BOOT_VERSION. Check for kernel version is better + done with a dedicated section. + + * grub-core/boot/sparc64/ieee1275/boot.S: Remove GRUB_BOOT_VERSION. + Ensure the correct position of boot_path. + * grub-core/kern/i386/efi/startup.S: Remove GRUB_BOOT_VERSION. + * grub-core/kern/i386/pc/startup.S: Likewise. Ensure correct position of + other fields. + * grub-core/kern/x86_64/efi/startup.S: Remove GRUB_BOOT_VERSION. + * include/grub/boot.h: Removed. All references removed. + * include/grub/sparc64/ieee1275/boot.h (GRUB_BOOT_MACHINE_VER_MAJ): + Removed. + (GRUB_BOOT_MACHINE_BOOT_DEVPATH): Make it lower. + +2011-10-19 Vladimir Serbinenko + + * util/grub-install.in: Declare IEEE1275 as able to find out the disk + name. + +2011-10-19 Vladimir Serbinenko + + * grub-core/kern/main.c (grub_set_prefix_and_root): Init prefix. + +2011-10-19 Vladimir Serbinenko + + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_encode_devname): + Don't add the bogus brackets. + +2011-10-19 Vladimir Serbinenko + + ExFAT support. + + * Makefile.util.def (libgrubmods.a): Add grub-core/fs/exfat.c. + * grub-core/Makefile.core.def (exfat): New module. + * grub-core/fs/exfat.c: New file. + * grub-core/fs/fat.c (GRUB_FAT_DIR_ENTRY_SIZE): Removed. + (GRUB_FAT_ATTR_*): Make into an enum. + (GRUB_FAT_ATTR_LONG_NAME) [MODE_EXFAT]: Removed. + (GRUB_FAT_ATTR_VALID) [MODE_EXFAT]: Remove GRUB_FAT_ATTR_VOLUME_ID. + (GRUB_FAT_ATTR_VOLUME_ID) [MODE_EXFAT]: Removed. + (GRUB_FAT_MAXFILE): Removed. + (grub_exfat_bpb) [MODE_EXFAT]: New struct. + (grub_current_fat_bpb_t): New type. + (grub_fat_dir_entry) [MODE_EXFAT]: New struct. + (grub_fat_dir_node) [MODE_EXFAT]: New struct. + (grub_fat_dir_node_t): New type. + (grub_fat_data) [MODE_EXFAT]: Remove root_sector and num_root_sectors. + (fat_log2) [MODE_EXFAT]: Removed. + (grub_fat_mount): Use grub_current_fat_bpb_t. Add some sanity checks. + (grub_fat_mount) [MODE_EXFAT]: Handle ExFAT. + (grub_fat_iterate_dir) [MODE_EXFAT]: New function. + (grub_fat_find_dir) [MODE_EXFAT]: Handle ExFAT. + (grub_fat_label) [MODE_EXFAT]: New function. + (grub_fat_fs) [MODE_EXFAT]: Set name to "exfat" and + reserved_first_sector to 0. + +2011-10-19 Vladimir Serbinenko + + Move grub_reboot out of the kernel. + + * grub-core/Makefile.core.def (reboot): Add platform-specific files. + * grub-core/kern/efi/efi.c (grub_reboot): Moved to ... + * grub-core/lib/efi/reboot.c: ... here. + * grub-core/kern/i386/efi/startup.S: Remove including of realmode.S. + * grub-core/kern/i386/ieee1275/startup.S: Likewise. + * grub-core/kern/i386/pc/startup.S (grub_exit): Inline cold_reboot. + * grub-core/kern/i386/realmode.S (grub_reboot): Moved to... + * grub-core/lib/i386/reboot_trampoline.S: ... here. + * grub-core/kern/ieee1275/openfw.c (grub_reboot): Moved to... + * grub-core/lib/ieee1275/reboot.c: ... here. + * grub-core/kern/mips/arc/init.c (grub_reboot): Moved to... + * grub-core/lib/mips/arc/reboot.c: ... here. + * grub-core/kern/mips/loongson/init.c (grub_reboot): Moved to... + * grub-core/lib/mips/loongson/reboot.c: ...here. + * grub-core/kern/mips/qemu_mips/init.c (grub_reboot): Moved to... + * grub-core/lib/mips/qemu_mips/reboot.c: ... here. + * include/grub/emu/misc.h (grub_reboot): New function declaration. + * include/grub/i386/reboot.h: New file. + * include/grub/mips/loongson/ec.h: Fix includes. + * include/grub/mips/qemu_mips/kernel.h (grub_reboot): Removed. + * include/grub/misc.h (grub_reboot): Don't mark as kernel function. + * grub-core/lib/i386/reboot.c: New file. + +2011-10-18 Vladimir Serbinenko + + Make grub_prefix into module to fix the arbitrary limit and save + some space. + + * grub-core/kern/emu/main.c (grub_prefix): Removed. + * grub-core/kern/i386/coreboot/startup.S (grub_prefix): Likewise. + * grub-core/kern/i386/efi/startup.S (grub_prefix): Likewise. + * grub-core/kern/i386/ieee1275/startup.S (grub_prefix): Likewise. + * grub-core/kern/i386/pc/startup.S (grub_prefix): Likewise. + * grub-core/kern/i386/qemu/startup.S (grub_prefix): Likewise. + * grub-core/kern/ia64/efi/startup.S (grub_prefix): Likewise. + * grub-core/kern/mips/startup.S (grub_prefix): Likewise. + * grub-core/kern/powerpc/ieee1275/startup.S (grub_prefix): Likewise. + * grub-core/kern/sparc64/ieee1275/crt0.S (grub_prefix): Likewise. + * grub-core/kern/x86_64/efi/startup.S (grub_prefix): Likewise. + * include/grub/ia64/efi/kernel.h: Removed. + * include/grub/kernel.h: New module type OBJ_TYPE_PREFIX. + (grub_prefix): Removed. + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_PREFIX): Removed. + (GRUB_KERNEL_I386_PC_PREFIX_END): Likewise. + (GRUB_KERNEL_I386_QEMU_PREFIX): Likewise. + (GRUB_KERNEL_I386_QEMU_PREFIX_END): Likewise. + (GRUB_KERNEL_SPARC64_IEEE1275_PREFIX): Likewise. + (GRUB_KERNEL_SPARC64_IEEE1275_PREFIX_END): Likewise. + (GRUB_KERNEL_POWERPC_IEEE1275_PREFIX): Likewise. + (GRUB_KERNEL_POWERPC_IEEE1275_PREFIX_END): Likewise. + (GRUB_KERNEL_MIPS_LOONGSON_PREFIX): Likewise. + (GRUB_KERNEL_MIPS_LOONGSON_PREFIX_END): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_PREFIX): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_PREFIX_END): Likewise. + (GRUB_KERNEL_MIPS_ARC_PREFIX): Likewise. + (GRUB_KERNEL_MIPS_ARC_PREFIX_END): Likewise. + (GRUB_KERNEL_I386_EFI_PREFIX): Likewise. + (GRUB_KERNEL_I386_EFI_PREFIX_END): Likewise. + (GRUB_KERNEL_IA64_EFI_PREFIX): Likewise. + (GRUB_KERNEL_IA64_EFI_PREFIX_END): Likewise. + (GRUB_KERNEL_X86_64_EFI_PREFIX): Likewise. + (GRUB_KERNEL_X86_64_EFI_PREFIX_END): Likewise. + (GRUB_KERNEL_I386_COREBOOT_PREFIX): Likewise. + (GRUB_KERNEL_I386_COREBOOT_PREFIX_END): Likewise. + (GRUB_KERNEL_I386_MULTIBOOT_PREFIX): Likewise. + (GRUB_KERNEL_I386_MULTIBOOT_PREFIX_END): Likewise. + (GRUB_KERNEL_I386_IEEE1275_PREFIX): Likewise. + (GRUB_KERNEL_I386_IEEE1275_PREFIX_END): Likewise. + (GRUB_KERNEL_MACHINE_PREFIX): Likewise. + (GRUB_KERNEL_MACHINE_PREFIX_END): Likewise. + * grub-core/kern/main.c (grub_set_prefix_and_root): Retrieve grub_prefix + from module. + * util/grub-mkimage.c (image_target_desc): Removed prefix and + prefix_end. + (image_targets): Likewise. + (generate_image): Put prefix as a module. + +2011-10-16 Vladimir Serbinenko + + Replace grub_module_iterate with FOR_MODULES. + + * grub-core/disk/memdisk.c (GRUB_MOD_INIT): Switched to new interface. + * grub-core/kern/efi/efi.c (grub_arch_modules_addr): Renamed to... + (grub_efi_modules_addr): ...this. + * grub-core/kern/efi/init.c (grub_modbase): New variable. + (grub_efi_init): Set grub_modbase. + * grub-core/kern/emu/main.c (grub_arch_modules_addr): Removed. + (grub_modbase): New variable. + * grub-core/kern/i386/coreboot/init.c (grub_arch_modules_addr): Removed. + (grub_modbase): New variable. + (grub_machine_init): Set grub_modbase. + * grub-core/kern/i386/pc/init.c (grub_arch_modules_addr): Removed. + (grub_modbase): New variable. + (grub_machine_init): Set grub_modbase. + * grub-core/kern/ieee1275/init.c (grub_arch_modules_addr): Removed. + (grub_modbase): New variable. + (grub_machine_init): Set grub_modbase. + * grub-core/kern/main.c (grub_module_iterate): Remove. + (grub_modules_get_end): Use grub_modbase. + (grub_load_modules): Use FOR_MODULES. + (grub_load_config): Likewise. + * grub-core/kern/mips/arc/init.c (grub_arch_modules_addr): Removed. + (grub_modbase): New variable. + (grub_machine_init): Set grub_modbase. + * grub-core/kern/mips/loongson/init.c (grub_arch_modules_addr): Removed. + (grub_modbase): New variable. + (grub_machine_init): Set grub_modbase. + * grub-core/kern/mips/qemu_mips/init.c (grub_arch_modules_addr): + Removed. + (grub_modbase): New variable. + (grub_machine_init): Set grub_modbase. + * include/grub/efi/efi.h (grub_efi_modules_addr): New declaration. + * include/grub/kernel.h (grub_arch_modules_addr): Removed. + (grub_module_iterate): Likewise. + (grub_modbase): New variable declaration. + (FOR_MODULES): New macro. + +2011-10-16 Vladimir Serbinenko + + * configure.ac: Check for __ctzdi2 and __ctzsi2. + * include/grub/libgcc.h: Include __ctzdi2 and __ctzsi2 if present. + +2011-10-16 Vladimir Serbinenko + + Fix few obvious type discrepancies. + + * grub-core/fs/affs.c (grub_affs_read_file): Use grub_off_t for offset. + * grub-core/fs/afs.c (grub_afs_read_file): Likewise. + * grub-core/fs/fshelp.c (grub_fshelp_find_file): Remove leftover + variable. + * grub-core/fs/hfs.c (grub_hfs_read_file): Use grub_off_t for offset + and connected types. + * grub-core/fs/nilfs2.c (grub_nilfs2_read_file): Use grub_off_t for + offset. + (grub_nilfs2_iterate_dir): Use grub_off_t for fpos. + * grub-core/fs/sfs.c (grub_sfs_read_file): Use grub_off_t for offset. + * grub-core/fs/ufs.c (grub_ufs_read_file): Use grub_off_t for offset + and connected types. + +2011-10-16 Vladimir Serbinenko + + Fix python 3.x incompatibilities. + + * gentpl.py: Put brackets around print strings. + * util/import_gcry.py: Open explicitly as utf-8. + Use in instead of has_key. + +2011-10-16 Vladimir Serbinenko + + * grub-core/fs/xfs.c (grub_xfs_inode): New field fork_offset. + (GRUB_XFS_INO_AGBITS): Make into inline function. + (GRUB_XFS_INO_INOINAG): Likewise. + (GRUB_XFS_INO_AG): Likewise. + (GRUB_XFS_FSB_TO_BLOCK): Likewise. + (GRUB_XFS_EXTENT_OFFSET): Likewise. + (GRUB_XFS_EXTENT_BLOCK): Likewise. + (GRUB_XFS_EXTENT_SIZE): Likewise. + (GRUB_XFS_ROUND_TO_DIRENT): Likewise. + (GRUB_XFS_NEXT_DIRENT): Likewise. + (grub_xfs_read_block): Rewrite the btree parsing. Fixes invalid BMAP. + (grub_xfs_read_file): Fix offset type. + +2011-10-15 Robert Millan + + * util/getroot.c (grub_util_get_grub_dev): Fix OS selection #ifdefs. + +2011-10-15 Robert Millan + + Fix build problem on FreeBSD and GNU/kFreeBSD. + + * util/getroot.c [__FreeBSD_kernel__]: Include `'. + +2011-10-14 Vladimir Serbinenko + + Fix overflow with >2GiB file on HFS+. >4GiB wasn't tested. + + * grub-core/fs/hfsplus.c (grub_hfsplus_btree): Use more appropriate + types. + (grub_hfsplus_btree_recoffset): Likewise. + (grub_hfsplus_btree_recptr): Likewise. + (grub_hfsplus_find_block): Likewise. + (grub_hfsplus_btree_search): Likewise. + (grub_hfsplus_read_block): Likewise. + (grub_hfsplus_read_file): Likewise. + (grub_hfsplus_mount): Likewise. + (grub_hfsplus_btree_iterate_node): Likewise. + (grub_hfsplus_btree_search): Likewise. + (grub_hfsplus_iterate_dir): Likewise. + (grub_hfsplus_read): A small code simplification. + +2011-10-14 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c + (convert_system_partition_to_system_disk): Don't assume that children + of mapper nodes are mapper nodes. + +2011-10-14 Vladimir Serbinenko + + * grub-core/lib/posix_wrap/ctype.h (isxdigit): Use grub_isxdigit. + * include/grub/misc.h (grub_isxdigit): New function. + * grub-core/video/colors.c (my_isxdigit): Removed. All users + switched to grub_isxdigit. + * grub-core/term/serial.c (grub_serial_find): Fix in case of port + number starting with a letter. + +2011-10-09 Robert Millan + + LVM support for FreeBSD and GNU/kFreeBSD. + + * util/lvm.c (grub_util_lvm_isvolume): Enable on FreeBSD and + GNU/kFreeBSD. + (LVM_DEV_MAPPER_STRING): Move from here ... + * include/grub/util/lvm.h (LVM_DEV_MAPPER_STRING): ... to here. + * util/getroot.c: Include `'. + (grub_util_get_dev_abstraction): Enable + grub_util_biosdisk_is_present() on FreeBSD and GNU/kFreeBSD. + Check for LVM abstraction on FreeBSD and GNU/kFreeBSD. + (grub_util_get_grub_dev): Replace "/dev/mapper/" with + `LVM_DEV_MAPPER_STRING'. Enable LVM and mdRAID only on platforms that + support it. + * util/grub-setup.c (main): Check for LVM also on FreeBSD and + GNU/kFreeBSD. + * util/grub.d/10_kfreebsd.in: Load `geom_linux_lvm' kernel module + when LVM abstraction is required for ${GRUB_DEVICE}. + +2011-10-06 Szymon Janc + + Add support for LZO compression in GRUB: + - import of minilzo library, + - LZO decompression for btrfs, + - lzop files decompression. + + * grub-core/io/lzopio.c: New file. + * grub-core/lib/adler32.c: Likewise. + * grub-core/lib/minilzo/lzoconf.h: Likewise. + * grub-core/lib/minilzo/lzodefs.h: Likewise. + * grub-core/lib/minilzo/minilzo.c: Likewise. + * grub-core/lib/minilzo/minilzo.h: Likewise. + * Makefile.util.def (libgrubmods.a): Add grub-core/io/lzopio.c, + grub-core/lib/adler32.c, grub-core/io/lzopio.c, + grub-core/lib/minilzo/minilzo.c to common. + * Makefile.util.def (libgrubmods.a): Add flags required by minilzo to + cflags in cppflags. + * grub-core/Makefile.core.def (btrfs): Likewise. + * grub-core/Makefile.core.def (lzopio): New module. + (adler32): Likewise. + * grub-core/fs/btrfs.c: Include minilzo.h. + (GRUB_BTRFS_COMPRESSION_LZO): New define. + (GRUB_BTRFS_LZO_BLOCK_SIZE): Likewise. + (GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE): Likewise. + (grub_btrfs_lzo_decompress): New function. + (grub_btrfs_extent_read): Add support for LZO compression type. + * include/grub/types.h (GRUB_UCHAR_MAX): New define. + (GRUB_USHRT_MAX): Likewise. + (GRUB_UINT_MAX): Likewise. + * grub-core/lib/posix_wrap/limits.h (USHRT_MAX): Likewise. + (UINT_MAX): Likewise. + (CHAR_BIT): Likewise. + * grub-core/lib/posix_wrap/sys/types.h (ULONG_MAX): Moved to + grub-core/lib/posix_wrap/limits.h + (UCHAR_MAX): Likewise. + * include/grub/file.h (grub_file_filter_id): New compression filter + GRUB_FILE_FILTER_LZOPIO. + * include/grub/file.h (grub_file_filter_id): Set + GRUB_FILE_FILTER_LZOPIO as GRUB_FILE_FILTER_COMPRESSION_LAST. + * include/grub/types.h (grub_get_unaligned16): New function. + (grub_get_unaligned32): Likewise. + (grub_get_unaligned64): Likewise. + * util/import_gcry.py (cryptolist): Add adler32. + +2011-10-05 Vladimir Serbinenko + + * grub-core/Makefile.core.def: Eliminate rarely used emu_condition. This + in perspective decreases the complexity of build system and fixes + compilation right now. + +2011-10-01 Ales Nesrsta + + * grub-core/bus/usb/uhci.c: Changes made by Rock Cui - thanks! + (fixed problem related to using UHCI with coreboot). + +2011-08-25 BVK Chaitanya + + * gentpl.py: Use Autogen macros so that the output template file + (Makefile.tpl) size is reduced. + +2011-09-29 Mads Kiilerich + + * grub-core/Makefile.core.def (kernel): Add kern/i386/int.S to + extra_dist. + +2011-09-29 Mario Limonciello + + * util/misc.c (grub_util_get_disk_size) [__MINGW32__]: Strip trailing + slashes on PHYSICALDRIVE%d paths when making Windows CreateFile calls. + +2011-09-29 Mario Limonciello + + * grub-core/kern/emu/misc.c (canonicalize_file_name) [__MINGW32__]: Use + _fullpath. + +2011-09-29 Mario Limonciello + + Remove extra declaration of sleep for mingw32. + + * util/misc.c (sleep) [__MINGW32__]: Removed. + * include/grub/util/misc.h (sleep) [__MINGW32__]: Likewise. + +2011-09-28 Grégoire Sutre + + * include/grub/bsdlabel.h (grub_partition_bsd_disk_label): Add fields + type and packname. + * include/grub/i386/netbsd_bootinfo.h (NETBSD_BTINFO_BOOTDISK): + Resurrected. + (NETBSD_BTINFO_BOOTWEDGE): New definition. + (grub_netbsd_btinfo_bootwedge): New struct. + * grub-core/loader/i386/bsd.c (grub_netbsd_add_boot_disk_and_wedge): + New function. + (grub_cmd_netbsd): Call grub_netbsd_add_boot_disk_and_wedge. + +2011-09-28 Thomas Haller + + * grub-core/loader/multiboot_elfxx.c (Elf_Shdr): Set according to + loader. + +2011-09-28 Andreas Born + + Fix incorrect identifiers in bash-completion. + + * util/bash-completion.d/grub-completion.bash.in + (_grub_mkpasswd-pbkdf2): Rename to ... + (_grub_mkpasswd_pbkdf2): ... this. All users updated. + (_grub_script-check): Rename to ... + (_grub_script_check): ... this. All users updated. + +2011-09-28 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy): + Return 0 if disk isn't biosdisk. + +2011-09-17 Grégoire Sutre + + * Makefile.util.def (grub-mkrelpath): Add LIBUTIL for getrawpartition(3) + on NetBSD. + * Makefile.util.def (grub-fstest): Likewise. + +2011-09-17 Grégoire Sutre + + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors) [__NetBSD__]: + Get sector size from disk label. + +2011-09-05 Colin Watson + + * util/grub-mkconfig_lib.in (grub_file_is_not_garbage): Return 1 for + */README* as well as README*. + Reported by: Axel Beckert. + +2011-08-23 Vladimir Serbinenko + + * grub-core/kern/mips/loongson/init.c (grub_machine_init): Handle the + case of less than 256 MiB of RAM. + +2011-08-23 Vladimir Serbinenko + + * grub-core/commands/wildcard.c (make_regex): Handle @. + +2011-08-23 Vladimir Serbinenko + + * util/grub-install.in: Move cryptodisk logic to appropriate place. + +2011-08-21 Szymon Janc + + * acinclude.m4: Use AC_LANG_PROGRAM macro to generate source code for + AC_LANG_CONFTEST macros. + +2011-08-20 Szymon Janc + + Add grub-fstest option to uncompress data for commands. + + * util/grub-fstest.c (uncompress): New var. + (options): New option -u. + +2011-08-20 Szymon Janc + + * grub-core/loader/i386/linux.c (grub_linux_setup_video): Add + GRUB_VIDEO_DRIVER_RADEON_FULOONG2E to switch case statement. + +2011-08-20 Szymon Janc + + * grub-core/io/gzio.c (grub_gzio_open): Always return original io if + file type was not recognized correctly (not gzip or corrupted). + +2011-08-19 Vladimir Serbinenko + + * grub-core/kern/mips/loongson/init.c (grub_reboot): Reboot Fuloong. + * include/grub/cs5536.h (GRUB_CS5536_MSR_DIVIL_RESET): New definition. + +2011-08-19 Vladimir Serbinenko + + * grub-core/Makefile.core.def (kernel): Add video/radeon_fuloong2e.c on + loongson. + * grub-core/kern/mips/loongson/init.c (grub_machine_init): Init + video_radeon_fuloong2e. + * grub-core/video/radeon_fuloong2e.c: New file. + * include/grub/video.h (grub_video_id_t): Add new ID + GRUB_VIDEO_DRIVER_RADEON_FULOONG2E. + +2011-08-19 Vladimir Serbinenko + + * include/grub/mips/loongson.h (GRUB_CPU_LOONGSON_COP0_PRID): New + define. + * grub-core/kern/mips/loongson/init.c (grub_machine_init): Check + that PRID matches the detected subplatform and reset the subplatform + if it doesn't. + +2011-08-19 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vprintf): Fix a bug on malloc failure. + +2011-08-19 Vladimir Serbinenko + + Fix PCI iterating on functions >= 4. + + * grub-core/bus/pci.c (grub_pci_iterate): Remove useless ghost skipping. + * include/grub/mips/loongson/pci.h (GRUB_LOONGSON_OHCI_GHOST_FUNCTION): + Removed. + (GRUB_LOONGSON_EHCI_GHOST_FUNCTION): Likewise. + (grub_pci_read): Fix bitmask. + (grub_pci_read_word): Likewise. + (grub_pci_read_byte): Likewise. + (grub_pci_write): Likewise. + (grub_pci_write_word): Likewise. + (grub_pci_write_byte): Likewise. + +2011-08-19 Vladimir Serbinenko + + * configure.ac: Don't impose march=loongson2f on loongson platform. (It + can still be specified in TARGET_CFLAGS) + +2011-08-19 Vladimir Serbinenko + + Rename Fuloong into Fuloong 2F. Add new ID for Fuloong2E. + + * grub-core/Makefile.core.def (fwstart_fuloong): Rename fwstart_fuloong + into fwstart_fuloong2f. Use boot/mips/loongson/fuloong2f.S. + * grub-core/boot/mips/loongson/fuloong.S: Rename to ... + * grub-core/boot/mips/loongson/fuloong2f.S: ... this. + (FULOONG): Rename to ... + (FULOONG2F): ... this. All users updated. + * grub-core/boot/mips/startup_raw.S (machtype_fuloong_str): Rename to + (machtype_fuloong2f_str): ... this. + (machtype_fuloong2e_str): New string. + Check for machtype_fuloong2e_str. + * grub-core/loader/mips/linux.c (loongson_machtypes) + [GRUB_MACHINE_MIPS_LOONGSON]: Add GRUB_ARCH_MACHINE_FULOONG2E. + * grub-core/term/serial.c (loongson_defserial) + [GRUB_MACHINE_MIPS_LOONGSON]: New array. + (grub_serial_register) [GRUB_MACHINE_MIPS_LOONGSON]: Use + loongson_defserial. + * include/grub/mips/loongson/kernel.h (GRUB_ARCH_MACHINE_FULOONG): + Rename to ... + (GRUB_ARCH_MACHINE_FULOONG2F): ... this. + (GRUB_ARCH_MACHINE_FULOONG2E): New const. + * util/grub-mkimage.c (image_target_desc): Rename IMAGE_FULOONG_FLASH + to IMAGE_FULOONG2F_FLASH. All users updated. + (image_targets): Rename images. + * util/grub-mkstandalone.in: Accept fuloong2f and fuloong2e. + +2011-08-19 Szymon Janc + + Make enable of disk cache statistics code configurable. + + * configure.ac: --enable-cache-stats added. + * config.h.in (DISK_CACHE_STATS): New define. + * grub-core/Makefile.core.def (cacheinfo): New command. + * include/grub/disk.h(grub_disk_cache_get_performance): New function. + * grub-core/commands/cacheinfo.c: New file. + * grub-core/commands/minicmd.c (grub_rescue_cmd_info): Updated and + moved to cacheinfo.c. + * grub-core/kern/disk.c: Use DISK_CACHE_STATS to disable disk cache + debug code. + * include/grub/disk.h: Likewise. + +2011-08-19 Szymon Janc + + * Makefile.am (AUTOMAKE_OPTIONS): = Added -Wno-portability flag. + * grub-core/Makefile.am: Likewise. + +2011-08-16 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_iterate): Skip with + non-zero pull. + +2011-08-16 Vladimir Serbinenko + + * grub-core/fs/jfs.c (grub_jfs_read_file): New parameter ino. + All users updated. + (grub_jfs_lookup_symlink): Use correct starting inode. + +2011-08-16 Vladimir Serbinenko + + * util/grub-setup.c (main): Add missing gcry initialisation. + +2011-08-16 Vladimir Serbinenko + + Don't accept text modes on EFI when booting Linux. + + * grub-core/loader/i386/linux.c (ACCEPTS_PURE_TEXT): New define. + (grub_linux_boot) [!ACCEPTS_PURE_TEXT]: Restrict to graphics modes. + +2011-08-15 Mario Limonciello +2011-08-15 Colin Watson + + * util/grub-probe.c (probe): Canonicalise the path argument, fixing + use of "/path/.." as in grub-install for EFI as well as handling + symlinks correctly. + Fixes Debian bug #637768. + +2011-08-15 Colin Watson + + * util/grub-probe.c: Remove duplicate #include. + +2011-08-10 Robert Millan + + Detect LSI MegaRAID SAS (`mfi') devices on GNU/kFreeBSD. + + * util/deviceiter.c [__FreeBSD_kernel__] (get_mfi_disk_name): New + function. + [__FreeBSD_kernel__] (grub_util_iterate_devices): Scan for mfi + (/dev/mfid[0-9]+) devices using get_mfi_disk_name(). + +2011-08-03 Robert Millan + + * include/grub/zfs/zap_leaf.h (typedef union zap_leaf_chunk): Mark + la_array as packed. + Reported by: Zachary Bedell + +2011-07-26 Colin Watson + + * configure.ac: The Loongson port requires grub-mkfont due to its + use of -DUSE_ASCII_FAILBACK. Raise an error if it is not going to + be built. + +2011-07-26 Colin Watson + + * util/grub-install.in: Don't source grub-mkconfig_lib until after + processing arguments (otherwise help2man fails when GRUB has not yet + been installed). + +2011-07-25 Vladimir Serbinenko + + New script grub-mkstandalone. + + * Makefile.util.def (grub-mkstandalone): New script. + * docs/man/grub-mkstandalone.h2m: New file. + * util/grub-mkstandalone.in: Likewise. + +2011-07-25 Vladimir Serbinenko + + Support ATA disks with 4K sectors. + + * include/grub/ata.h (grub_ata): New member log_sector_size. + * grub-core/disk/ata.c (grub_ata_dumpinfo): Show sector size. + (grub_ata_identify): Read sector size. + (grub_ata_readwrite): Use log_sector_size rather than hardcoded value. + +2011-07-25 Vladimir Serbinenko + + * util/grub-install.in: Don't use uhci outside of x86. + +2011-07-25 Vladimir Serbinenko + + * util/grub-mkrescue.in: Add missing quotes. + +2011-07-25 Vladimir Serbinenko + + * grub-core/normal/menu.c (grub_menu_execute_entry): Fix NULL + dereference. + +2011-07-23 Vladimir Serbinenko + + * grub-core/disk/pata.c (grub_pata_readwrite): Add missing wait. + +2011-07-23 Vladimir Serbinenko + + * include/grub/video.h: add missing EXPORT_FUND on + grub_video_edid_checksum and grub_video_edid_preferred_mode. + +2011-07-23 Vladimir Serbinenko + + * include/grub/mips/kernel.h: Fix define conflict. + +2011-07-23 Vladimir Serbinenko + + * grub-core/kern/mips/cache_flush.S [GRUB_MACHINE_MIPS_LOONGSON]: Flush + all four ways. + +2011-07-21 Colin Watson + + Preferred resolution detection for VBE. + + * grub-core/video/video.c (grub_video_edid_checksum): New function. + (grub_video_edid_preferred_mode): Likewise. Try EDID followed by + the Flat Panel extension, in line with the X.org VESA driver. + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_flat_panel_info): + New function. + (grub_vbe_bios_get_ddc_capabilities): Likewise. + (grub_vbe_bios_read_edid): Likewise. + (grub_vbe_get_preferred_mode): Likewise. + (grub_video_vbe_setup): When the mode is "auto", try to get the + preferred mode from VBE, and use the largest mode that is no larger + than the preferred mode (some BIOSes expose a preferred mode that is + not in their mode list!). If this fails, fall back to 640x480 as a + safe conservative choice. + (grub_video_vbe_get_edid): New function. + (grub_video_vbe_adapter): Add get_edid. + * include/grub/video.h (struct grub_vbe_edid_info): New structure. + (struct grub_video_adapter): Add get_edid. + (grub_video_edid_checksum): Add prototype. + (grub_video_edid_preferred_mode): Likewise. + * include/grub/i386/pc/vbe.h (struct grub_vbe_flat_panel_info): New + structure. + + * grub-core/commands/videoinfo.c (print_edid): New function. + (grub_cmd_videoinfo): Print EDID if available. + + * util/grub.d/00_header.in (GRUB_GFXMODE): Default to "auto". This + is more appropriate on a wider range of platforms than 640x480. + * docs/grub.texi (Simple configuration): Update GRUB_GFXMODE + documentation. + +2011-07-10 Vladimir Serbinenko + + * util/grub-install.in: Recognize ESP mounted at /boot/EFI. + +2011-07-10 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. + +2011-07-10 Vladimir Serbinenko + + * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name): Fix + incorrect memory usage. + +2011-07-10 Vladimir Serbinenko + + * util/grub-install.in: Source grub-mkconfig_lib. + +2011-07-08 Vladimir Serbinenko + + Remove getroot.c from core on emu platform. + + * grub-core/Makefile.core.def (kernel): Remove kern/emu/getroot.c and + kern/emu/raid.c. + * grub-core/kern/emu/main.c (main): Don't try to guess root device. It's + useless. + * grub-core/kern/emu/misc.c (get_win32_path): Moved from here... + * util/getroot.c (get_win32_path): ... here. + * grub-core/kern/emu/misc.c (fini_libzfs): Moved from here... + * util/getroot.c (fini_libzfs): ... here. + * grub-core/kern/emu/misc.c (grub_get_libzfs_handle): Moved from here... + * util/getroot.c (grub_get_libzfs_handle): ... here. + * grub-core/kern/emu/misc.c (grub_find_zpool_from_dir): + Moved from here... + * util/getroot.c (grub_find_zpool_from_dir): ... here. + * grub-core/kern/emu/misc.c + (grub_make_system_path_relative_to_its_root): Moved from here... + * util/getroot.c (grub_make_system_path_relative_to_its_root): ... here. + * grub-core/kern/emu/getroot.c: Moved from here ... + * util/getroot.c: ... here. All users updated. + * grub-core/kern/emu/raid.c: Moved from here ... + * util/raid.c: ... here. All users updated. + +2011-07-08 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. + +2011-07-07 Vladimir Serbinenko + + Fix compilation on GNU/Linux. + + * grub-core/kern/emu/getroot.c (grub_util_pull_device) [!FreeBSD]: + Disable geli. + (grub_util_get_grub_dev) [!FreeBSD]: Likewise. + (grub_util_pull_device) [HAVE_DEVICE_MAPPER]: Fix const and func name. + * grub-core/disk/cryptodisk.c (grub_cryptodisk_open): Fix proto. + +2011-07-07 Vladimir Serbinenko +2011-07-07 Michael Gorven +2011-07-07 Clemens Fruhwirth + + LUKS and GELI support. + + * Makefile.util.def (libgrubkern.a): Add grub-core/lib/crypto.c, + grub-core/disk/luks.c, grub-core/disk/geli.c, + grub-core/disk/cryptodisk.c, grub-core/disk/AFSplitter.c, + grub-core/lib/pbkdf2.c, grub-core/commands/extcmd.c, + grub-core/lib/arg.c. + (libgrubmods.a): Remove gcrypts cflags and cppflags. + Remove grub-core/commands/extcmd.c, grub-core/lib/arg.c, + grub-core/lib/crypto.c, grub-core/lib/libgcrypt-grub/cipher/sha512.c, + grub-core/lib/libgcrypt-grub/cipher/crc.c and grub-core/lib/pbkdf2.c. + (grub-bin2h): Add libgcry.a. + (grub-mkimage): Likewise. + (grub-mkrelpath): Likewise. + (grub-script-check): Likewise. + (grub-editenv): Likewise. + (grub-mkpasswd-pbkdf2): Likewise. + (grub-pe2elf): Likewise. + (grub-fstest): Likewise. + (grub-mkfont): Likewise. + (grub-mkdevicemap): Likewise. + (grub-probe): Likewise. + (grub-ofpath): Likewise. + (grub-mklayout): Likewise. + (example_unit_test): Likewise. + (grub-menulst2cfg): Likewise. + * autogen.sh (UTIL_DEFS): Add Makefile.utilgcry.def. + * grub-core/Makefile.core.def (cryptodisk): New module. + (luks): Likewise. + (geli): Likewise. + * grub-core/disk/AFSplitter.c: New file. + * grub-core/disk/cryptodisk.c: Likewise. + * grub-core/disk/geli.c: Likewise. + * grub-core/disk/luks.c: Likewise. + * grub-core/kern/emu/getroot.c (get_dm_uuid): New function based on + grub_util_is_lvm. + (grub_util_get_dm_abstraction): New function. + (grub_util_follow_gpart_up): Likewise. + (grub_util_get_geom_abstraction): Likewise. + (grub_util_get_dev_abstraction): Use new functions. + (grub_util_pull_device): Pull GELI and LUKS. + (grub_util_get_grub_dev): Handle LUKS and GELI. + * grub-core/kern/emu/hostdisk.c (grub_util_get_fd_sectors): New function. + (grub_util_biosdisk_open): Use grub_util_get_fd_sectors. + (follow_geom_up): Removed. + (grub_util_fd_seek): New function. + (open_device): Use grub_util_fd_seek. + (nread): Rename to .. + (grub_util_fd_read): ... this. All users updated. + * grub-core/lib/crypto.c (grub_crypto_ecb_decrypt): A better prototype. + (grub_crypto_cbc_decrypt): Likewise. + (grub_crypto_hmac_write): Likewise. + (grub_crypto_hmac_buffer): Likewise. + (grub_password_get): Extend to util. + * include/grub/crypto.h (gcry_cipher_spec) [GRUB_UTIL]: + New member modname. + (gcry_md_spec) [GRUB_UTIL]: Likewise. + * include/grub/cryptodisk.h: New file. + * include/grub/disk.h (grub_disk_dev_id): Rename LUKS to CRYPTODISK. + * include/grub/emu/getroot.h (grub_dev_abstraction_types): Add + LUKS and GELI. + (grub_util_follow_gpart_up): New proto. + * include/grub/emu/hostdisk.h (grub_util_fd_seek): Likewise. + (grub_util_fd_read): Likewise. + (grub_cryptodisk_cheat_mount): Likewise. + (grub_util_cryptodisk_print_uuid): Likewise. + (grub_util_get_fd_sectors): Likewise. + * util/grub-fstest.c (mount_crypt): New var. + (fstest): Mount crypto if requested. + (options): New option -C. + (argp_parser): Parse -C. + (main): Init and fini gcry. + * util/grub-install.in: Support cryptodisk install. + * util/grub-mkconfig.in: Export GRUB_ENABLE_CRYPTODISK. + * util/grub-mkconfig_lib.in (is_path_readable_by_grub): Support + cryptodisk. + (prepare_grub_to_access_device): Likewise. + * util/grub-mkpasswd-pbkdf2.c (main): Use grub_password_get. + * util/grub-probe.c (probe_partmap): Support cryptodisk UUID probe. + (probe_cryptodisk_uuid): New function. + (probe_abstraction): Likewise. + (probe): Use new functions. + * util/import_gcry.py: Create Makefile.utilgcry.def. + Add modname member. + +2011-07-07 Vladimir Serbinenko + + Lazy device scanning. + + * Makefile.util.def (libgrubkern.a): Add grub-core/kern/emu/raid.c. + (grub-setup): Remove util/raid.c. + * grub-core/Makefile.core.def (kernel): Add kern/emu/raid.c on emu. + * grub-core/disk/lvm.c (scan_depth): New variable. + (grub_lvm_iterate): Rescan if necessary. + (find_lv): New function based on grub_lvm_open. + (grub_lvm_open): Use find_lv. Rescan on error. + (is_node_readable): New function. + (is_lv_readable): Likewise. + (grub_lvm_scan_device): Skip already found disks. + (do_lvm_scan): New function. Move grub_lvm_scan_device inside of it. + Stop if searched device is found and readable. + * grub-core/disk/raid.c (inscnt): New variable. + (scan_depth): Likewise. + (scan_devices): New function based on grub_raid_register. Abort if + looked for device is found. + (grub_raid_iterate): Rescan if needed. + (find_array): NEw function based on -grub_raid_open. + (grub_raid_open): Use find_array and rescan. + (insert_array): Set became_readable_at. + * grub-core/kern/disk.c (grub_disk_dev_iterate): Iterate though "pull. + * grub-core/kern/emu/getroot.c (grub_util_open_dm) [HAVE_DEVICE_MAPPER]: + New function. + (grub_util_is_lvm) [HAVE_DEVICE_MAPPER]: Use grub_util_open_dm. + (grub_util_pull_device): New function. + (grub_util_get_grub_dev): Call grub_util_pull_device. + * util/raid.c: Moved to .. + * grub-core/kern/emu/raid.c: ... here. + (grub_util_raid_getmembers): New parameter "bootable". + All users updated. Support 1.x. + * include/grub/ata.h (grub_ata_dev): Change iterate prototype. + All users updated. + * include/grub/disk.h (grub_disk_pull_t): New enum. + (grub_disk_dev): Change iterate prototype. + All users updated. + * include/grub/emu/getroot.h (grub_util_raid_getmembers) [__linux__]: + New proto. + * include/grub/emu/hostdisk.h (grub_util_pull_device): Likewise. + * include/grub/lvm.h (grub_lvm_lv): New members fullname and compatname. + * include/grub/raid.h (grub_raid_array): New member became_readable_at. + * include/grub/scsi.h (grub_scsi_dev): Change iterate prototype. + All users updated. + * include/grub/util/raid.h: Removed. + +2011-07-06 Vladimir Serbinenko + + * po/POTFILES.in: Regenerate. + +2011-07-06 Vladimir Serbinenko + + Unify sparc init with other ieee1275. + + * grub-core/Makefile.core.def (kernel): Use kern/ieee1275/init.c + instead of kern/sparc64/ieee1275/init.c. + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options) + [__sparc__]: Set GRUB_IEEE1275_FLAG_NO_PARTITION_0. + * grub-core/kern/ieee1275/init.c [__sparc__]: Include + grub/machine/kernel.h. + (grub_ieee1275_original_stack) [__sparc__]: New variable. + (grub_claim_heap) [__sparc__]: Use sparc version. + (grub_machine_init): Moved args parsing to + (grub_parse_cmdline): ...this. + * grub-core/kern/sparc64/ieee1275/init.c: Removed. + * include/grub/offsets.h (GRUB_KERNEL_SPARC64_IEEE1275_MOD_GAP): + New definition. + (GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN): Likewise. + + Move BOOTP to separate file. + + * grub-core/Makefile.core.def (net): Add net/bootp.c. + * grub-core/net/net.c: Move all BOOTP functions to + * grub-core/net/bootp.c: ... here. + + Use frame interface on PXE. + + * grub-core/Makefile.core.def (pxecmd): Removed. + (pxe): Use net/drivers/i386/pc/pxe.c rather than net/i386/pc/pxe.c. + * grub-core/commands/i386/pc/pxecmd.c: Removed. + * grub-core/i386/pc/pxe.c: Moved from here ... + * grub-core/net/i386/pc/pxe.c: ... here. Rewritten. + * grub-core/net/net.c (grub_net_open_real): Handle old pxe syntax. + * include/grub/i386/pc/pxe.h (grub_pxe_unload): Removed. + + EFI network support. + + * grub-core/Makefile.core.def (efinet): New module. + * grub-core/disk/efi/efidisk.c (compare_device_paths): Moved from + here... + * grub-core/kern/efi/efi.c (grub_efi_compare_device_paths): ... here. + All users updated. + * grub-core/kern/efi/init.c (grub_efi_net_config): New variable. + (grub_machine_get_bootlocation): Call grub_efi_net_config if needed. + * grub-core/kern/x86_64/efi/callwrap.S (efi_wrap_7): New function. + * grub-core/net/drivers/efi/efinet.c: New file. + * include/grub/efi/efi.h (grub_efi_compare_device_paths): New proto. + (grub_efi_net_config): New extern var. + + Various cleanups and bugfixes. + + * grub-core/disk/efi/efidisk.c (grub_efidisk_open): Fix off-by-one + error. + (grub_efidisk_get_device_name): Unify similar codepaths. Accept whole + disk declared as partition. + * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_open): Fix memory + leak on failure. + * grub-core/kern/dl.c (grub_dl_load_file): Fix memory leak. + * grub-core/kern/mm.c (grub_debug_malloc): Don't use unsupported %zx. + (grub_debug_zalloc): Likewise. + (grub_debug_realloc): Likewise. + (grub_debug_memalign): Likewise. + * grub-core/net/arp.c (grub_net_arp_receive): IPv4 is 4-byte wide. + Check that target is IPv4. + * grub-core/net/drivers/ieee1275/ofnet.c (grub_ofnet_findcards): Use + local-mac-address as fallback. + * grub-core/net/ethernet.c (grub_net_recv_ethernet_packet): Prevent + memory leak. + * grub-core/net/ip.c (ipchksum): Rename to ... + (grub_net_ip_chksum): ... this. All users updated. + (grub_net_recv_ip_packets): Special handling for DHCP. + * util/grub-mkimage.c (generate_image): Zero-out aout header. + + Unify prefix handling + + * grub-core/kern/efi/init.c (grub_efi_set_prefix): Revamped into ... + (grub_machine_get_bootlocation): ... this. + * grub-core/kern/emu/main.c (grub_machine_set_prefix): Revamped into ... + (grub_machine_get_bootlocation): ... this. + (grub_prefix): New variable. + (prefix): Removed. + (root_dev): New variable. + (dir): Likewise. + (main): Use new variables. + * grub-core/kern/i386/coreboot/init.c (grub_machine_set_prefix): + Revamped into ... + (grub_machine_get_bootlocation): ... this. + * grub-core/kern/i386/efi/init.c (grub_machine_set_prefix): Removed. + * grub-core/kern/i386/pc/init.c (make_install_device): Revamped into ... + (grub_machine_get_bootlocation): ... this. + (grub_machine_set_prefix): Removed. + * grub-core/kern/ia64/efi/init.c (grub_machine_set_prefix): Removed. + * grub-core/kern/ieee1275/init.c (grub_machine_set_prefix): + Revamped into ... + (grub_machine_get_bootlocation): ... this. + * grub-core/kern/main.c (grub_set_root_dev): Revamped into ... + (grub_set_prefix_and_root): ... this. All users updated. + * grub-core/kern/mips/init.c (grub_machine_set_prefix): + Revamped into ... + (grub_machine_get_bootlocation): ... this. + * include/grub/kernel.h (grub_machine_set_prefix): Removed. + (grub_machine_get_bootlocation): New proto. + * include/grub/i386/pc/kernel.h (grub_pc_net_config): New var. + + Less intrusive and more reliable seek on network implementation. + + * grub-core/kern/file.c (grub_file_net_seek): Removed. + (grub_file_seek): Don't call grub_file_net_seek. + * grub-core/net/net.c (grub_net_fs_read): Renamed to ... + (grub_net_fs_read_real): .. this. + (grub_net_seek_real): Use net->offset. + (grub_net_fs_read): Seek if necessary. + + Unify IEEE1275 netwotk config with the other platforms. + + * grub-core/kern/ieee1275/init.c (grub_ieee1275_net_config): + New variable. + (grub_machine_get_bootlocation): Support network. + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_parse_args): + Support type and device parsing. + (grub_ieee1275_get_device_type): New function. + * grub-core/net/drivers/ieee1275/ofnet.c (grub_getbootp_real): Revamped + into ... + (grub_ieee1275_net_config_real): ... this. + (grub_ofnet_probecards): Removed. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Remove ofnet.h. + * include/grub/ieee1275/ofnet.h: Removed. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_net_config): NEw + extern var. + (grub_ieee1275_get_device_type): New function. + + Unify network device closing across platforms and make more robust. + + * grub-core/kern/ieee1275/init.c (grub_machine_fini): Don't call + grub_grubnet_fini. + * grub-core/net/ethernet.c (send_ethernet_packet): Open card if it isn't + already. + * grub-core/net/net.c (grub_net_network_level_interface_register): + Update num_ifaces. + (grub_net_card_unregister): Close all interfaces. + (receive_packets): Don't poll if no iterfaces are registered. + Open if necessary. + (grub_net_fini_hw): New function. + (grub_net_restore_hw): Likewise. + (fini_hnd): New variable. + (GRUB_MOD_INIT): Register preboot hook. + (GRUB_MOD_FINI): Run and unregister preboot hook. + + Poll network cards when idle. + + * grub-core/kern/term.c (grub_net_poll_cards_idle): New variable. + (grub_checkkey): Call grub_net_poll_cards_idle if it's not NULL. + * grub-core/net/net.c (receive_packets): Save last poll time. + (grub_net_poll_cards_idle_real): New function. + (GRUB_MOD_INIT): Register grub_net_poll_cards_idle. + (GRUB_MOD_FINI): Unregister grub_net_poll_cards_idle. + * include/grub/kernel.h (grub_poll_cards_idle): New extern variable. + + Rename ofnet interfaces. + + * grub-core/net/drivers/ieee1275/ofnet.c (find_alias): New function. + (grub_ofnet_findcards): Use ofnet_%s names. + + * util/grub-mknetdir.in: Support for EFI and IEEE1275. + + Cleanup socket opening. + + * grub-core/net/net.c (grub_net_fs_open): Rewritten. + (grub_net_fs_close): Likewise. + (grub_net_fs_read_real): Use eof member. + * include/grub/net/udp.h (+grub_net_udp_open): New proto. + (+grub_net_udp_close): New inline function. + + * include/grub/net/tftp.h: Moved to the top of ... + * grub-core/net/tftp.c: ... here. + * include/grub/net/ip.h: Moved mostly to the top of ... + * grub-core/net/ip.c: ... here. + * include/grub/net/ethernet.h: Moved mostly to the top of ... + * grub-core/net/ethernet.c: ... here. + + * grub-core/kern/device.c (grub_device_close): Free device->net->server. + + * grub-core/commands/probe.c (grub_cmd_probe): Use protocol name for + FS name. + + * include/grub/net/ip.h (ipv4_ini): Removed. + (ipv4_fini): Likewise. + + * include/grub/net/ip.h (grub_net_recv_ip_packets): New proto. + (grub_net_send_ip_packets): Likewise. + +2011-07-05 Vladimir Serbinenko + + * grub-core/kern/i386/qemu/mmap.c (grub_machine_mmap_init): Use new + grub_read_cmos prototype. + +2011-07-05 Vladimir Serbinenko + + VGA text support in qemu-mips + + * grub-core/Makefile.core.def (kernel): Add term/i386/pc/vga_text.c, + term/i386/vga_common.c and kern/vga_init.c on qemu-mips. + * grub-core/kern/mips/qemu_mips/init.c (grub_machine_init): Init vga + text. + * grub-core/kern/i386/qemu/init.c: Renamed to ... + * grub-core/kern/vga_init.c: ... this. + * grub-core/kern/vga_init.c (VGA_ADDR) [__mips__]: Adjust. + (grub_qemu_init_cirrus) [__mips__]: Skip PCI and adjust the I/O base. + * grub-core/term/i386/pc/vga_text.c (VGA_TEXT_SCREEN) [__mips__]: + Adjust. + * include/grub/vga.h [GRUB_MACHINE_MIPS_QEMU_MIPS]: Declare + GRUB_MACHINE_PCI_IO_BASE. + +2011-07-05 Vladimir Serbinenko + + MIPS qemu flash support. + + * grub-core/boot/mips/startup_raw.S [GRUB_MACHINE_MIPS_QEMU_MIPS]: Check + magic. + * grub-core/kern/mips/qemu_mips/init.c (probe_mem): New function. + (grub_machine_init): Probe memory if its size isn't known. + * util/grub-mkimage.c (image_targets): Add flash targets. + (generate_image): Handle flash targets. + +2011-07-05 Vladimir Serbinenko + + MIPS qemu at_keyboard support. + + * gentpl.py (videoinkernel): Add qemu-mips. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Add necessary headers. + * grub-core/Makefile.core.def (kernel): Add at_keyboard and layout. + * grub-core/kern/mips/qemu_mips/init.c (grub_machine_init): Init new + modules. + * grub-core/term/at_keyboard.c (grub_keyboard_controller_init) + [GRUB_MACHINE_MIPS_QEMU_MIPS]: Don't consider original set. + * grub-core/term/serial.c (grub_serial_register) + [GRUB_MACHINE_MIPS_QEMU_MIPS]: Make com0 explicitly active. + +2011-07-05 Vladimir Serbinenko + + CMOS support on sparc. + + * gentpl.py (cmos): Add powerpc and sparc. + * grub-core/Makefile.core.def (datetime): Add lib/ieee1275/cmos.c on + powerpc and sparc. + * grub-core/lib/cmos_datetime.c (grub_get_datetime) + [__powerpc__ || __sparc__]: Rename to grub_get_datetime_cmos. + (grub_set_datetime) [__powerpc__ || __sparc__]: Likewise to + grub_set_datetime_cmos. + * grub-core/lib/ieee1275/cmos.c: New file. + * grub-core/lib/ieee1275/datetime.c (no_ieee1275_rtc): New vaiable. + (find_rtc): Set no_ieee1275_rtc on error. + (grub_get_datetime): Call grub_get_datetime_cmos on error. + (grub_set_datetime): Call grub_set_datetime_cmos on error. + * include/grub/cmos.h (grub_cmos_read): Return grub_err_t since it may + fail. Move value to argument. All users updated + (grub_cmos_write): Likewise. + (grub_cmos_read) [__powerpc__ || __sparc__]: Rewritten. + (grub_cmos_write) [__powerpc__ || __sparc__]: Likewise. + * include/grub/datetime.h [__powerpc__ || __sparc__]: Declare + grub_get_datetime_cmos and grub_set_datetime_cmos. + +2011-07-02 Grégoire Sutre + + * util/grub-mkconfig.in: Use @PACKAGE@ instead of hardcoded name when + sourcing grub-mkconfig_lib. + * util/update-grub_lib.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + +2011-06-28 Colin Watson + + * grub-core/term/gfxterm.c (grub_virtual_screen_setup): Use + default_bg_color rather than black. + (grub_gfxterm_fullscreen): Likewise. + (grub_gfxterm_background_color_cmd): Save new background color in + default_bg_color. + +2011-06-27 Vladimir Serbinenko + + * grub-core/Makefile.core.def (chain): Fix coreboot filename. + +2011-06-27 Vladimir Serbinenko + + * grub-core/disk/pata.c (grub_pata_initialize) [QEMU_MIPS]: Fix a + mismerge. + +2011-06-27 Vladimir Serbinenko + + Chainloading on coreboot support. + + * grub-core/Makefile.core.def (chain): Add coreboot. + * grub-core/loader/i386/coreboot/chainloader.c: New file. + +2011-06-27 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c (grub_bsd_load): Handle relocator failure + if it happens. + +2011-06-27 Vladimir Serbinenko + + Implement time command. + + * grub-core/Makefile.core.def (time): New module. + * grub-core/commands/time.c: New file. + * grub-core/script/parser.y: Remove "time" keyword. + * grub-core/script/yylex.l: Likewise. + +2011-06-27 Vladimir Serbinenko + + * include/grub/loader.h (grub_loader_unregister_preboot_hook): Export. + +2011-06-27 Vladimir Serbinenko + + * grub-core/lib/relocator.c (malloc_in_range): Fix a memory corruption + when handling leftovers. + +2011-06-27 Vladimir Serbinenko + + * util/ieee1275/grub-ofpathname.c (main): Handle --help and --version + so that help2man doesn't fail. + +2011-06-27 Vladimir Serbinenko + + * grub-core/net/drivers/ieee1275/ofnet.c (send_card_buffer) Use right + type in pointers on sparc64. + (get_card_packet): Likewise. + +2011-06-27 Colin Watson + + * grub-core/commands/videoinfo.c (hook): Indicate current video mode + with `*'. + (grub_cmd_videoinfo): Fetch current video mode. + +2011-06-27 Vladimir Serbinenko + + * grub-core/disk/scsi.c (grub_scsi_read): Limit SCSI reads to 32K + because of underlying system restrictions. + +2011-06-27 Vladimir Serbinenko + + * util/grub-mkrescue.in: Rename "ata" to "pata" and add ahci when + necessary. + +2011-06-27 Vladimir Serbinenko + + Coreboot video support. + + * grub-core/Makefile.core.def (vga): Extend to coreboot and multiboot. + (vbe): Likewise. + * grub-core/kern/i386/coreboot/startup.S: Include int.S. + * grub-core/kern/i386/pc/startup.S (grub_bios_interrupt): Moved from + here ... + * grub-core/kern/i386/int.S: ... here. + * grub-core/video/i386/pc/vbe.c: Updated includes. + * grub-core/video/i386/pc/vga.c: Likewise. + * include/grub/i386/coreboot/memory.h + (GRUB_MEMORY_MACHINE_SCRATCH_ADDR): New definition. + (GRUB_MEMORY_MACHINE_SCRATCH_SEG): Likewise. + (GRUB_MEMORY_MACHINE_SCRATCH_SIZE): Likewise. + * include/grub/i386/pc/int.h (GRUB_CPU_INT_FLAGS_DEFAULT) [!PCBIOS]: + Disable interrupts. + * include/grub/i386/pc/vga.h: Removed. All users updated. + +2011-06-27 Vladimir Serbinenko + + * grub-core/disk/ahci.c (grub_ahci_readwrite_real): Use proper + definitions for dprintf. + * grub-core/disk/pata.c (grub_pata_readwrite): Likewise. + +2011-06-27 Vladimir Serbinenko + + * grub-core/net/drivers/ieee1275/ofnet.c (send_card_buffer): Fix + prototype. + (get_card_packet): Likewise. + +2011-06-26 Yves Blusseau + + Display the path of the file when file is not found + + * grub-core/fs/fat.c: Display the filename when file is not found. + * grub-core/fs/fshelp.c: Likewise. + * grub-core/fs/hfs.c: Likewise. + * grub-core/fs/jfs.c: Likewise. + * grub-core/fs/minix.c: Likewise. + * grub-core/fs/ufs.c: Likewise. + * grub-core/fs/btrfs.c: Likewise. + * grub-core/commands/i386/pc/play.c: Likewise. + +2011-06-26 Szymon Janc + + * grub-core/commands/cmp.c (grub_cmd_cmp): Remove unnecessary NULL + pointer checks before calling grub_free(). + * grub-core/commands/wildcard.c (match_devices): Likewise. + * grub-core/commands/wildcard.c (match_files): Likewise. + * grub-core/fs/cpio.c (grub_cpio_dir): Likewise. + * grub-core/fs/cpio.c (grub_cpio_open): Likewise. + * grub-core/fs/udf.c (grub_udf_read_block): Likewise. + * grub-core/fs/xfs.c (grub_xfs_read_block): Likewise. + * grub-core/loader/efi/chainloader.c (grub_cmd_chainloader): Likewise. + * grub-core/normal/cmdline.c (grub_cmdline_get): Likewise. + * grub-core/script/yylex.l (grub_lexer_unput): Likewise. + * grub-core/video/readers/jpeg.c (grub_video_reader_jpeg): Likewise. + * grub-core/video/readers/png.c (grub_png_output_byte): Likewise. + +2011-06-25 Patrick + + * grub-core/kern/main.c (grub_load_normal_mode): Correct the comment. + +2011-06-25 Vladimir Serbinenko + + * grub-core/net/i386/pc/pxe.c (grub_pxe_recv): Fix declaration. + (grub_pxe_send): Likewise. + (GRUB_MOD_INIT): Fix types. + +2011-06-24 Szymon Janc + + * grub-core/io/xzio.c: Fix code style issues + +2011-06-24 Vladimir Serbinenko +2011-06-24 Manoel Rebelo Abranches + + Network infrastructure. + The ARP protocol was made by Paulo Pinatti + + * include/grub/net/arp.h: New file. + * include/grub/net/device.h: Likewise. + * include/grub/net/ethernet.h: Likewise. + * include/grub/net/ip.h: Likewise. + * include/grub/net/netbuff.h: Likewise. + * include/grub/net/tftp.h: Likewise. + * include/grub/net/udp.h: Likewise. + * include/grub/ieee1275/ofnet.h: Likewise. + * include/grub/emu/export.h: Likewise. + * include/grub/net.h: Likewise. + * grub-core/net/arp.c: Likewise. + * grub-core/net/ethernet.c: Likewise. + * grub-core/net/ip.c: Likewise. + * grub-core/net/udp.c: Likewise. + * grub-core/net/tftp.c: Likewise. + * grub-core/net/netbuff.c: Likewise. + * grub-core/net/net.c: Likewise. + * grub-core/net/drivers/emu/emunet.c: Likewise. + * grub-core/net/drivers/ieee1275/ofnet.c: Likewise. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Add net.h, ofnet.h and + export.h. + * grub-core/Makefile.core.def (net): New module. + (tftp): Likewise. + (ofnet): Likewise. + (emunet): Likewise. + * grub-core/commands/ls.c (grub_ls_list_devices) [!GRUB_UTIL]: List + network protocols. + * grub-core/kern/device.c (grub_net_open) : New variable. + (grub_device_open): Handle network device. + (grub_device_close): Likewise. + * grub-core/kern/file.c (grub_file_net_seek) : New variable. + (grub_grubnet_fini): Likewise. + (grub_file_seek): Seek in network device. + * grub-core/kern/fs.c (grub_fs_probe): Handle network devices. + * grub-core/kern/ieee1275/init.c (grub_machine_set_prefix): Handle + network root. + (grub_machine_fini): Call grub_grubnet_fini. + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_parse_args): Handle + network. + (grub_ieee1275_get_aliasdevname): New function. + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_get_mbi_size): + Add unofficial Solaris network info. + (grub_multiboot_make_mbi): Likewise. + * grub-core/fs/i386/pc/pxe.c: Moved from here ... + * grub-core/net/i386/pc/pxe.c: ...here. Adapted for new design. + * include/grub/device.h (grub_fs): Removed. + * include/grub/err.h (grub_err_t): Add network-related values. + * include/grub/i386/pc/pxe.h: Removed bootp parts. + * include/grub/ieee1275/ieee1275.h (grub_ofnetcard_data): New struct. + (grub_ieee1275_get_aliasdevname): New proto. + * include/grub/net.h: Rewritten. + +2011-06-24 Vladimir Serbinenko + + * grub-core/disk/raid.c (insert_array): Ensure uniqueness of readable + names. + +2011-06-24 Vladimir Serbinenko + + * grub-core/commands/wildcard.c (match_files): Add a useful dprintf. + (wildcard_expand): Don't stop on nonregexp parts after regexp ones since + it truncates the output. + Reported by: Ximin Luo. + +2011-06-24 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_iterate_dir): Skip . and .. + +2011-06-24 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Load + partmap before abstraction. + +2011-06-24 Alexander Kurtz + + * util/grub-mkconfig_lib.in: Add missing quotes. + +2011-06-24 Vladimir Serbinenko + + * grub-core/kern/emu/getroot.c (grub_guess_root_device): Revert to + old method if mountinfo would return /dev/root and /dev/root doesn't + exist. + +2011-06-24 Vladimir Serbinenko + + ZFS zlib support + + * grub-core/fs/zfs/zfs.c (zlib_decompress): New function. + (decomp_table): Add zlib entries. + (zio_read): USe 8 bits for compression function rather than 3. + * include/grub/zfs/zio.h (zio_compress): Add zlib values. + +2011-06-24 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Add missing license statements. + * grub-core/fs/romfs.c: Likewise. + * grub-core/lib/ia64/setjmp.S: Likewise. + * grub-core/loader/i386/pc/freedos.c: Likewise. + * grub-core/loader/ia64/efi/linux.c: Likewise. + * grub-core/video/colors.c: Likewise. + * include/grub/dl.h (GRUB_MOD_DEP): New macro. + +2011-06-23 Vladimir Serbinenko + + AHCI support. + + * grub-core/Makefile.core.def (ata_pthru): Removed. + (ahci): New module. + (pata): Likewise. + * grub-core/bus/usb/ohci.c (GRUB_MOD_FINI): Unregister preboot hook + on unload. + * grub-core/commands/hdparm.c (grub_hdparm_do_ata_cmd): Use ATA + readwrite. + (grub_hdparm_do_check_powermode_cmd): Likewise. + (grub_hdparm_do_smart_cmd): Likewise. + (grub_hdparm_set_val_cmd): Likewise. + (grub_cmd_hdparm): Likewise. Check thta we have an ATA device. + * grub-core/disk/ahci.c: New file. + * grub-core/disk/ata.c: Factor out the low-level part into ... + * grub-core/disk/pata.c: ... here. + * grub-core/disk/ata_pthru.c: Contents moved to ... + * grub-core/disk/pata.c: ... here. + * grub-core/disk/scsi.c (grub_scsi_names): New array. + (grub_scsi_iterate): Use grub_scsi_names. + (grub_scsi_open): Likewise. + * grub-core/kern/disk.c (grub_disk_ata_pass_through): Removed. + * include/grub/ata.h (grub_ata_commands): Add DMA commands. + (grub_ata_regs_t): New struct. + (grub_disk_ata_pass_through_parms): Likewise. + (grub_ata_device): Renamed to ... + (grub_ata): ... this. + (grub_ata_dev): New struct. + Removed all low-level inline functions. + * include/grub/scsi.h: Add PATA and AHCI subsystems. + (grub_scsi_dev): Removed 'name' and 'id'. Added 'id' parameter to + iterate hooks and open. All users updated. + * util/grub-install.in: Handle AHCI disk module. + +2011-06-23 Szymon Janc + + Add support for DRI and RSTn markers in JPEG files. + + * grub-core/video/readers/jpeg.c (JPEG_MARKER_DRI): New define. + (JPEG_MARKER_RST0): Likewise. + (JPEG_MARKER_RST1): Likewise. + (JPEG_MARKER_RST2): Likewise. + (JPEG_MARKER_RST3): Likewise. + (JPEG_MARKER_RST4): Likewise. + (JPEG_MARKER_RST5): Likewise. + (JPEG_MARKER_RST6): Likewise. + (JPEG_MARKER_RST7): Likewise. + (grub_jpeg_data): New fields dri, r1, bitmap_ptr. + (grub_jpeg_decode_dri): New function. + (grub_jpeg_decode_sos): Move image data related part into + grub_jpeg_decode_data function. + (grub_jpeg_decode_data): New function. + (grub_jpeg_reset): New function. + (grub_jpeg_decode_jpeg): Handle new markers. + +2011-06-23 Vladimir Serbinenko + + * util/ieee1275/ofpath.c (check_sas): Close fd. + (main): Free of_path. + Reported by: David Volgyes . + +2011-06-23 Vladimir Serbinenko + + * util/grub-mkpasswd-pbkdf2.c (main): Don't double-close. + Reported by: David Volgyes . + +2011-06-23 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy): Close + file after stat. + Reported by: David Volgyes . + +2011-06-23 Vladimir Serbinenko + + * util/raid.c (grub_util_raid_getmembers): Close fd before returning. + + Reported by: David Volgyes . + +2011-06-23 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (rs_recover) [STANDALONE]: + Prevent memory leak. + +2011-06-23 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (rs_recover): Prevent memory leak. + (main): Close file. + Reported by: David Volgyes . + +2011-06-23 Vladimir Serbinenko + + * grub-core/loader/i386/xnu.c (grub_cpu_xnu_fill_devprop): Don't attempt + to continue if allocation is failed. + + Reported by: David Volgyes . + +2011-06-23 David Volgyes + + * grub-core/bus/usb/ohci.c (grub_ohci_pci_iter): Avoid NULL-pointer + dereference. + +2011-06-23 Vladimir Serbinenko + + Fix spurious warning. + + * grub-core/partmap/acorn.c (grub_acorn_boot_block): Make a union. + (acorn_partition_map_find): Use .bin member. + +2011-06-23 Vladimir Serbinenko + + * grub-core/kern/emu/getroot.c (grub_guess_root_device): Don't accept + /dev/root as a valid device. + +2011-06-23 Jim Meyering + + Avoid NULL deref in grub_device_open. + + * grub-core/kern/device.c (grub_device_open): Don't dereference + a NULL pointer upon failed grub_env_get. + +2011-06-23 Vladimir Serbinenko + + Support non-512B sectors and agglomerate reads. + + * Makefile.util.def (libgrubmods.a): Add grub-core/commands/testload.c. + * grub-core/disk/efi/efidisk.c (grub_efidisk_data): Remove disk_io. + (disk_io_guid): Removed. + (make_devices): Locate solely by BlockIO. + (grub_efidisk_open): Fill log_sector_size and total_sectors. + (grub_efidisk_read): Use read_blocks. + (grub_efidisk_write): Use write_blocks. + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_open): Fill + log_sector_size. + (get_safe_sectors): Handle non-512B sectors. + (grub_biosdisk_read): Remove special CDROM handling. Handle non-512B + sectors. + (grub_biosdisk_write): Handle non-512B sectors. + * grub-core/disk/scsi.c (grub_scsi_open): Fill log_sector_size. + (grub_scsi_read): Remove special non-512B block handling (now handled + one level up). + * grub-core/kern/disk.c (grub_disk_open): Fill default log_sector_size + and do sanity checks. + (grub_disk_adjust_range): Handle non-512B sectors. + (transform_sector): New function. + (grub_disk_read_small): Likewise. + (grub_disk_read): Rewritten. + (grub_disk_write): Handle non-512B sectors. + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_open): Fill + log_sector_size. + (open_device): Use log_sector_size. + (grub_util_biosdisk_read): Likewise. + (grub_util_biosdisk_write): Likewise. + * grub-core/partmap/msdos.c (grub_partition_msdos_iterate): Handle + non-512B sectors. + (pc_partition_map_embed): Likewise. + * include/grub/disk.h (grub_disk): New field log_sector_size. + (GRUB_DISK_CACHE_SIZE): Redefined from GRUB_DISK_CACHE_BITS. + (GRUB_DISK_CACHE_BITS): Increased to 6. + * util/grub-fstest.c (fstest): New command testload. + (argp_parser): Likewise. + +2011-06-16 Robert Millan + + Detect `ataraid' devices on GNU/kFreeBSD. Fix for ATA devices using + `ata' driver on kernel of FreeBSD 9. + + * util/deviceiter.c [__FreeBSD_kernel__] (get_ada_disk_name) + (get_ataraid_disk_name): New functions. + [__FreeBSD_kernel__] (grub_util_iterate_devices): Scan for ataraid + (/dev/ar[0-9]+) and ada (/dev/ada[0-9]+) devices using + get_ataraid_disk_name() and get_ada_disk_name(). + +2011-06-13 Colin Watson + + * docs/man/grub-mklayout.h2m (DESCRIPTION): Add a reference to the + input format. + +2011-05-29 Colin Watson + + * docs/grub.texi (Obtaining and Building GRUB): Substitute + `ftp.gnu.org' for `alpha.gnu.org'. + +2011-05-27 Colin Watson + + * grub-core/kern/emu/hostdisk.c (linux_find_partition): Handle + partitions under /dev/disk/by-id/. + +2011-05-27 Colin Watson + + * grub-core/kern/emu/hostdisk.c (linux_find_partition): Give up + after ten consecutive open failures. Scanning all the way up to + 10000 is excessive and can cause serious performance problems in + some configurations. + Fixes Ubuntu bug #787461. + +2011-05-21 Vladimir Serbinenko + + * grub-core/disk/arc/arcdisk.c (reopen): Close old handle before + opening new one. + +2011-05-21 Colin Watson +2011-05-21 Vladimir Serbinenko + + Don't stat devices unless we have to. + + * grub-core/kern/emu/getroot.c (grub_find_device): Recognize + dir == /dev/mapper. + (grub_guess_root_device): Use already known os_dev if possible. + * grub-core/kern/emu/hostdisk.c + (convert_system_partition_to_system_disk): Scan only in /dev/mapper + if device is known to be a dm one. + +2011-05-20 Colin Watson + + * util/grub-mkconfig.in: Export GRUB_CMDLINE_LINUX_XEN_REPLACE and + GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT. + Reported by: Pawel Tecza. + +2011-05-19 Vladimir Serbinenko + + * grub-core/Makefile.core.def (lsacpi): Fix ia64 mismerge. + (lsefisystab): Likewise. + (lssal): Likewise. + (lsefimmap): Likewise. + (hdparm): Enable on qemu-mips. + (setjmp): Add ia64 nodist. + (serial): Simplify tags. + +2011-05-18 Colin Watson + + * Makefile.util.def (grub-ofpathname): Install manual page. + +2011-05-18 Colin Watson + + * grub-core/fs/squash4.c: Add missing GRUB_MOD_LICENSE. + +2011-05-18 Colin Watson + + * .bzrignore: Add grub-core/modinfo.sh and a number of test files. + +2011-05-18 Vladimir Serbinenko + + * grub-core/bus/usb/usbhub.c (poll_nonroot_hub): Downgrade a printf + into dprintf. + +2011-05-18 Vladimir Serbinenko + + Use full 64-bit division. + + * grub-core/kern/misc.c (grub_divmod64_full): Renamed to ... + (grub_divmod64): ... this. + * include/grub/misc.h (grub_divmod64): Removed. All users switch to full + version. + +2011-05-18 Colin Watson + + * util/grub-mkrescue.in: Use portable `.' rather than non-portable + `source'. + +2011-05-18 Colin Watson + + * grub-core/genmod.sh.in: Use 'set -e' rather than '#! /bin/sh -e', + to avoid accidents when debugging with 'sh -x'. + * grub-core/gensyminfo.sh.in: Likewise. + * tests/example_scripted_test.in: Likewise. + * tests/grub_cmd_regexp.in: Likewise. + * tests/grub_script_blanklines.in: Likewise. + * tests/grub_script_dollar.in: Likewise. + * tests/grub_script_expansion.in: Likewise. + * tests/grub_script_final_semicolon.in: Likewise. + * tests/partmap_test.in: Likewise. + * tests/util/grub-shell-tester.in: Likewise. + * tests/util/grub-shell.in: Likewise. + +2011-05-18 Colin Watson + + Move gfxmenu color handling to video, so that gfxterm can use it + too. + + * grub-core/gfxmenu/named_colors.c: Move to ... + * grub-core/video/colors.c: ... here. Rename + grub_gui_get_named_color to grub_video_get_named_color. + * grub-core/gfxmenu/gui_string_util.c (my_isxdigit): Move to ... + * grub-core/video/colors.c (my_isxdigit): ... here. + * grub-core/gfxmenu/gui_string_util.c (parse_hex_color_component): + Move to ... + * grub-core/video/colors.c (parse_hex_color_component): ... here. + * grub-core/gfxmenu/gui_string_util.c (grub_gui_parse_color): Move + to ... + * grub-core/video/colors.c (grub_video_parse_color): ... here. + + * include/grub/gui.h (grub_gui_color_t): Move to ... + * include/grub/video.h (grub_video_rgba_color_t): ... here. + * include/grub/gui.h (grub_gui_color_rgb): Move to ... + * include/grub/video.h (grub_video_rgba_color_rgb): ... here. + * include/grub/gui.h (grub_gui_map_color): Move to ... + * include/grub/video.h (grub_video_map_rgba_color): ... here. + * include/grub/gui_string_util.h (grub_gui_get_named_color): Move + to ... + * include/grub/video.h (grub_video_get_named_color): ... here. + * include/grub/gui_string_util.h (grub_gui_parse_color): Move to ... + * include/grub/video.h (grub_video_parse_color): ... here. + + * grub-core/Makefile.core.def (kernel) [videoinkernel]: Add + video/colors.c. + (gfxmenu): Remove gfxmenu/named_colors.c. + (video) [videomodules]: Add video/colors.c. + + Add a background_color command. + + * grub-core/term/gfxterm.c (grub_gfxterm_background_color_cmd): New + function. + (GRUB_MOD_INIT): Register background_color command. + (GRUB_MOD_FINI): Unregister background_color command. + (redraw_screen_rect): Allow blend/replace of text layer to be + controlled independently from whether there is a background bitmap. + (grub_gfxterm_background_image_cmd): Change blend_text_bg when + changing bitmap. + +2011-05-18 Vladimir Serbinenko + + Patch BPB in ntldr and chainloader --bpb. + + * grub-core/fs/fat.c: Include grub/fat.h. + (grub_fat_bpb): Moved to ... + * include/grub/fat.h (grub_fat_bpb): ... here. New file. + * grub-core/loader/i386/pc/chainloader.c: Include grub/fat.h and + grub/ntfs.h. + * include/grub/i386/pc/chainloader.h (grub_chainloader_flags_t): + Moved from here... + * grub-core/loader/i386/pc/chainloader.c (grub_chainloader_flags_t): ... + here. + * grub-core/loader/i386/pc/chainloader.c (grub_chainloader_patch_bpb): + New function. + (grub_chainloader_cmd): Patch BPB if --bpb is given. + (GRUB_MOD_INIT): Show --bpb. + * grub-core/loader/i386/pc/ntldr.c (grub_cmd_ntldr): Patch BPB. + * grub-core/normal/main.c (features): New variable. + (GRUB_MOD_INIT): Set feature_* variables. + * include/grub/i386/pc/chainloader.h (grub_chainloader_patch_bpb): New + proto. + * include/grub/ntfs.h (grub_ntfs_bpb): New field bios_drive. + +2011-05-18 Vladimir Serbinenko + + * grub-core/Makefile.core.def (ieee1275_fb): Use enable=powerpc_ieee1275 + for cleanness. + +2011-05-18 Vladimir Serbinenko + + FreeDOS direct loading support. + + * docs/grub.texi (Supported OS): Add FreeDOS. + * grub-core/Makefile.core.def (freedos): New module. + * grub-core/lib/i386/relocator.c (grub_relocator16_ebx): New extern + variable. + (grub_relocator16_boot): Handle %ebx. + * grub-core/lib/i386/relocator16.S: Likewise. + * grub-core/loader/i386/pc/freedos.c: New file. + +2011-05-18 Vladimir Serbinenko + + Long Linux command line support. + + * grub-core/loader/i386/linux.c (GRUB_LINUX_CL_END_OFFSET): Removed. + (maximal_cmdline_size): New variable. + (allocate_pages): Use maximal_cmdline_size. + (grub_cmd_linux): Set and use maximal_cmdline_size. + * grub-core/loader/i386/pc/linux.c (GRUB_LINUX_CL_END_OFFSET): Removed. + (allocate_pages): Use maximal_cmdline_size. + (grub_cmd_linux): Set and use maximal_cmdline_size. + * include/grub/i386/linux.h (GRUB_LINUX_SETUP_MOVE_SIZE): Removed. + (linux_kernel_header): Add fields kernel_alignment, relocatable, pad + and cmdline_size. + +2011-05-18 Vladimir Serbinenko +2011-05-18 Colin Watson + + Improve devmapper support + + * grub-core/kern/emu/getroot.c (grub_util_is_dmraid): Removed. + (grub_util_is_lvm): New function. + (grub_util_get_dev_abstraction): Assume dmraid if not lvm rather + than lvm if not dmraid. + Handle mapped md nodes. + * grub-core/kern/emu/hostdisk.c (device_is_mapped): Rename to ... + (grub_util_device_is_mapped): ... this. Make always available. All users + updated. + (grub_util_get_dm_node_linear_info) [HAVE_DEVICE_MAPPER]: New function. + (convert_system_partition_to_system_disk): Handle lvm, mpath and + dmraid nodes. + * include/grub/emu/misc.h (grub_util_device_is_mapped): New proto. + +2011-05-18 Vladimir Serbinenko + + Unify grub-mkrescue (except powerpc) and grrub-mknetdir across platforms + + * grub-core/Makefile.am (platform_DATA): Add modinfo.sh. + * grub-core/modinfo.sh.in: New file. + * grub-core/Makefile.core.def (modinfo.sh): New script. + * util/grub-mknetdir.in: Use modinfo.sh. + * util/grub-mkrescue.in: Likewise. + +2011-05-17 Vladimir Serbinenko + + * grub-core/kern/ia64/dl_helper.c (grub_ia64_dl_get_tramp_got_size): + Fix potential usage of Elf32 instead of Elf64 when compiling on + 32-bit architecture. Add endianness macros while on it. + +2011-05-17 Vladimir Serbinenko + + Use mipsel- rather than mips- in directories involving mipsel ports to + allow both endiannesses coexist. + + * configure.ac: proparate target_cpu=mipsel rather than resetting to + mips. All conditions adjusted. + * tests/util/grub-shell-tester.in: Remove gratuitious target_cpu + variable. + * util/grub-install.in: Adjust conditions to take renaming into account. + * util/grub-mkimage.c (image_targets): Likewise. New target + mips-qemu_mips-elf for bigendian mips. + +2011-05-17 Vladimir Serbinenko + + Avoid unnecessary copying on MIPS. + + * grub-core/boot/decompressor/none.c (grub_decompress_core): Exit + early if src == dest. + * util/grub-mkimage.c (generate_image): Arange for src == dest if + compression is none. + +2011-05-17 Vladimir Serbinenko + + Reduce memory footprint on SGI by putting modules before the kernel + as opposed to after. + + * grub-core/Makefile.core.def (kernel): Increase linking address. + (none_decompress): Likewise. + (xz_decompress): Likewise. + * grub-core/boot/mips/startup_raw.S: Use prewritten uncompression + address. + * grub-core/kern/mips/arc/init.c (grub_machine_init): Handle memory + layout change. + (grub_arch_modules_addr): New function. + * grub-core/kern/mips/init.c (grub_arch_modules_addr): Moved from here... + * grub-core/kern/mips/loongson/init.c (grub_arch_modules_addr): .. here + * grub-core/kern/mips/qemu_mips/init.c (grub_arch_modules_addr): ... and + here. + * grub-core/kern/mips/startup.S (total_size): Rename to ... + (grub_total_modules_size): ... this. Make global. + [GRUB_MACHINE_ARC]: Don't attempt to move modules out of the bss. + * include/grub/offsets.h (GRUB_KERNEL_MIPS_LOONGSON_UNCOMPRESSED_ADDR): + New definition. + (GRUB_KERNEL_MIPS_QEMU_MIPS_UNCOMPRESSED_ADDR): Likewise. + (GRUB_KERNEL_MIPS_ARC_UNCOMPRESSED_ADDR): Likewise. + (GRUB_KERNEL_MACHINE_UNCOMPRESSED_ADDR): Likewise. + (GRUB_KERNEL_MIPS_ARC_LINK_ADDR): Increased. + * util/grub-mkimage.c (image_target_desc): New flag + PLATFORM_FLAGS_MODULES_BEFORE_KERNEL. + (image_targets): Set PLATFORM_FLAGS_MODULES_BEFORE_KERNEL on mips-arc. + (generate_image): Handle images with modules before kernel. + +2011-05-17 Vladimir Serbinenko + + Prevent potential loss of memory map by overwrite on qemu-mips. + + * grub-core/boot/mips/startup_raw.S [GRUB_MACHINE_MIPS_QEMU_MIPS]: + Save ram size in $s4. + * grub-core/kern/mips/qemu_mips/init.c (RAMSIZE): Removed. + All users changed to grub_arch_memsize. + * grub-core/kern/mips/startup.S (grub_arch_machine): Restrict to + Loongson. + [GRUB_MACHINE_MIPS_QEMU_MIPS]: Save grub_arch_memsize. + * grub-core/loader/mips/linux.c (grub_linux_boot): Pass memory size. + * include/grub/mips/qemu_mips/memory.h (grub_arch_memsize): New + external variable. + +2011-05-17 Colin Watson + + * .bzrignore: Remove grub-dumpbios. + +2011-05-17 Colin Watson + + * util/grub.d/20_linux_xen.in: Honour GRUB_CMDLINE_LINUX_XEN_REPLACE + and GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT, which replace + GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT (complementing the + existing options which append). + * docs/grub.texi (Simple configuration): Document new options. + Reported by: Ian Jackson. Fixes Debian bug #617538. + +2011-05-17 Colin Watson + + * util/grub-fstest.c (cmd_cat): New function. + (fstest): Handle CMD_CAT. + (options): Add cat. + (argp_parser): Handle cat. + +2011-05-17 Colin Watson + + * Makefile.util.def (grub-bin2h): Don't install. + * docs/man/grub-bin2h.h2m: Remove. + +2011-05-17 Vladimir Serbinenko + + * grub-core/kern/mips/startup.S (grub_arch_cpuclock): Move to the right + place. + +2011-05-17 Vladimir Serbinenko + + Reenable qemu-mips port. + + * configure.ac: Handle --target=qemu-mips and --target=qemu_mips. + Fix small arc bug while on it. + * gentpl.py: Handle qemu_mips. + * grub-core/Makefile.am: Likewise. + * grub-core/Makefile.core.def: Likewise. + * grub-core/disk/ata.c [GRUB_MACHINE_MIPS_QEMU_MIPS]: Remove + inappropriate includes. + (grub_ata_pciinit) [GRUB_MACHINE_MIPS_QEMU_MIPS]: Removed. + (grub_ata_initialize): [GRUB_MACHINE_MIPS_QEMU_MIPS]: Rewritten. + * grub-core/kern/main.c (grub_modules_get_end) + [GRUB_MACHINE_MIPS_QEMU_MIPS]: Enable. + * grub-core/kern/mips/qemu-mips: Moved to .. + * grub-core/kern/mips/qemu_mips: ... this. + * grub-core/kern/mips/qemu_mips/init.c (grub_get_rtc): Removed. + (grub_machine_init): Call terminfo_init and serial_init. + * grub-core/kern/mips/startup.S: Change MIPS_LOONGSON to MACHINE. + * grub-core/loader/mips/linux.c (params) [GRUB_MACHINE_MIPS_QEMU_MIPS]: + New variable. + (grub_linux_boot) [GRUB_MACHINE_MIPS_QEMU_MIPS]: Handle the qemu-mips + parameter passing. + (grub_linux_unload) [GRUB_MACHINE_MIPS_QEMU_MIPS]: Free params. + (grub_cmd_linux) [GRUB_MACHINE_MIPS_QEMU_MIPS]: Handle params. + (grub_cmd_initrd) [GRUB_MACHINE_MIPS_QEMU_MIPS]: Likewise. + * include/grub/mips/qemu_mips/cmos.h: New file. + * include/grub/mips/qemu-mips/kernel.h: Don't include cpu/kernel.h. + * include/grub/mips/qemu-mips/memory.h (grub_machine_mmap_iterate): + Removed. + * include/grub/mips/qemu-mips/serial.h (GRUB_MACHINE_SERIAL_PORTS): + Use correct mips-style address. + * include/grub/mips/qemu-mips/time.h: Include cpu/time.h. + (GRUB_TICKS_PER_SECOND): Removed. + (grub_get_rtc): Likewise. + (grub_cpu_idle): Likewise. + * include/grub/offsets.h (GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ADDR): + New definition. + (GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ALIGN): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_COMPRESSED_SIZE): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_UNCOMPRESSED_SIZE): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_TOTAL_MODULE_SIZE): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_PREFIX): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_PREFIX_END): Likewise. + (GRUB_KERNEL_MIPS_QEMU_MIPS_MOD_ALIGN): Likewise. + * util/grub-mkimage.c (image_targets): Add mipsel-qemu_mips-elf. + +2011-05-17 Vladimir Serbinenko + + SGI ARCS port. + + * Makefile.util.def (libgrubmods.a): Add dvh.c. + * conf/Makefile.common (CCASFLAGS_PLATFORM): Add -mips3 on all mips + platforms. + * configure.ac: New target mips-arc. + * gentpl.py: Likewise. + * grub-core/Makefile.am: Likewise. + * grub-core/Makefile.core.def: Likewise. + (xz_decompress): Remove -D GRUB_MACHINE_LINK_ADDR. + (none_decompress): Likewise. + (lsdev): New module. + (datetime): Use lib/arc/datetime.c on ARC. + (part_dvh): New module. + * grub-core/commands/arc/lsdev.c: New file. + * grub-core/disk/arc/arcdisk.c: Likewise. + * grub-core/kern/mips/arc/init.c: Likewise. + * grub-core/kern/mips/cache_flush.S: Don't flush non 4-byte + aligned addresses. + * grub-core/kern/mips/dl.c (grub_arch_dl_check_header): Fix bigendian + support. + (grub_arch_dl_relocate_symbols): Likewise. + * grub-core/kern/mips/loongson/init.c (grub_get_rtc): Moved from here... + * grub-core/kern/mips/init.c (grub_get_rtc): ... here. + * grub-core/kern/mips/startup.S (grub_arch_cpuclock): Have on all + platforms. + * grub-core/lib/arc/datetime.c: New file. + * grub-core/loader/mips/linux.c: Always include time.h. Don't include + pci.h on non-loongson. + (envp_off) [!GRUB_MACHINE_MIPS_LOONGSON]: Remove. + (grub_linux_boot): Set unused registers to 0. + (grub_cmd_linux) [!GRUB_MACHINE_MIPS_LOONGSON]: Remove envp. + * grub-core/mmap/mips/loongson/uppermem.c: Moved from here ... + * grub-core/mmap/mips/uppermem.c: ...here. + * grub-core/partmap/dvh.c: New file. + * grub-core/term/arc/console.c: Likewise. + * grub-core/term/terminfo.c (ANSI_C0_STR): New const. + (grub_terminfo_set_current): Add terminal "arc". + (grub_terminfo_readkey): Support ARC sequences. + * include/grub/arc/arc.h: New file. + * include/grub/arc/console.h: Likewise. + * include/grub/disk.h (grub_disk_dev_id): Add + GRUB_DISK_DEVICE_ARCDISK_ID. + * include/grub/mips/arc/kernel.h: New file. + * include/grub/mips/arc/memory.h: Likewise. + * include/grub/mips/arc/time.h: Likewise. + * include/grub/mips/loongson/kernel.h (grub_halt): Moved from here ... + * include/grub/mips/kernel.h (grub_halt): ... here. + * include/grub/mips/loongson.h (GRUB_CPU_REGISTER_WRAP): Moved from + here... + * include/grub/mips/mips.h (GRUB_CPU_REGISTER_WRAP): ... here. + (GRUB_CPU_LOONGSON_COP0_TIMER_COUNT): Moved from here ... + * include/grub/mips/mips.h (GRUB_CPU_LOONGSON_COP0_TIMER_COUNT): .. here + * include/grub/mips/loongson/kernel.h (grub_reboot): Removed redundant + proto. + * include/grub/mips/loongson/memory.h (GRUB_ARCH_LOWMEMVSTART): Moved + from here ... + * include/grub/mips/memory.h (GRUB_ARCH_LOWMEMVSTART): ... here. + (GRUB_ARCH_LOWMEMPSTART): Moved from here ... + * include/grub/mips/memory.h (GRUB_ARCH_LOWMEMPSTART): ... here. + (GRUB_ARCH_LOWMEMMAXSIZE): Moved from here ... + * include/grub/mips/memory.h (GRUB_ARCH_LOWMEMMAXSIZE): ... here. + (GRUB_ARCH_HIGHMEMPSTART): Moved from here ... + * include/grub/mips/memory.h (GRUB_ARCH_HIGHMEMPSTART): ... here. + (grub_phys_addr_t): Moved from here ... + * include/grub/mips/memory.h (grub_phys_addr_t): ... here. + (grub_vtop): Moved from here ... + * include/grub/mips/memory.h (grub_vtop): ... here. + (grub_map_memory): Moved from here ... + * include/grub/mips/memory.h (grub_map_memory): ... here. + (grub_unmap_memory): Moved from here ... + * include/grub/mips/memory.h (grub_unmap_memory): ... here. + (grub_machine_mmap_iterate): Moved from here ... + * include/grub/mips/memory.h (grub_machine_mmap_iterate): ... here. + (grub_mmap_get_lower): Moved from here ... + * include/grub/mips/memory.h (grub_mmap_get_lower): ... here. + (grub_mmap_get_upper): Moved from here ... + * include/grub/mips/memory.h (grub_mmap_get_upper): ... here. + * include/grub/mips/loongson/time.h (grub_arch_cpuclock): Moved from + here ... + * include/grub/mips/time.h (grub_arch_cpuclock): ... here. + * include/grub/mips/loongson/time.h (grub_get_rtc): Moved from + here ... + * include/grub/mips/time.h (grub_get_rtc): ... here. + * include/grub/mips/loongson/time.h (grub_arch_cpuclock): Moved from + here ... + * include/grub/mips/time.h (grub_arch_cpuclock): ... here. + * include/grub/mips/loongson/time.h (grub_cpu_idle): Moved from + here ... + * include/grub/mips/time.h (grub_cpu_idle): ... here. + * include/grub/offsets.h (GRUB_KERNEL_MIPS_ARC_LINK_ADDR): New + definition. + (GRUB_KERNEL_MIPS_ARC_LINK_ALIGN): Likewise. + (GRUB_KERNEL_MIPS_ARC_COMPRESSED_SIZE): Likewise. + (GRUB_KERNEL_MIPS_ARC_UNCOMPRESSED_SIZE): Likewise. + (GRUB_KERNEL_MIPS_ARC_TOTAL_MODULE_SIZE): Likewise. + (GRUB_KERNEL_MIPS_ARC_PREFIX): Likewise. + (GRUB_KERNEL_MIPS_ARC_PREFIX_END): Likewise. + (GRUB_KERNEL_MIPS_ARC_MOD_ALIGN): Likewise. + (GRUB_MACHINE_LINK_ADDR): Likewise. + * include/grub/terminfo.h (GRUB_TERMINFO_READKEY_MAX_LEN): Increased + to 6. + * util/grub-install.in: Run dvhtool on ARC. + * util/grub-mkimage.c (image_targets): Add mips-arc. + (generate_image): Handle ECOFF output for mips-arc. + +2011-05-16 Vladimir Serbinenko + + * grub-core/bus/pci.c (grub_memalign_dma32): Always allocate in 64-byte + blocks. + +2011-05-16 Vladimir Serbinenko + + * grub-core/bus/usb/usbhub.c (attach_root_port): Wait 10ms + after enabling port. + +2011-05-16 Vladimir Serbinenko + + Skip incorrect USB devices. + + * grub-core/bus/usb/usb.c (grub_usb_device_initialize): Fail if + configcnt == 0. + * include/grub/usb.h (grub_usb_err_t): New enum value + GRUB_USB_ERR_BADDEVICE. + +2011-05-16 Vladimir Serbinenko + + Fuloong video init support. + + * include/grub/vga.h (grub_vga_write_arx): inb monochrome address as + well. + (grub_vga_read_arx): New function. + * grub-core/video/sis315pro.c (GRUB_SIS315PRO_MMIO_SPACE): New + definition. + (framebuffer): New members io, mmioptr and mmiobase. + (read_sis_cmd): New function. + (write_sis_cmd): Likewise. + (grub_video_sis315pro_setup): Do the initialisation. Use 640x480 + rather than 640x400. + * grub-core/video/sis315_init.c: New file. + +2011-05-15 Vladimir Serbinenko + + * grub-core/bus/cs5536.c: Don't include grub/machine/kernel.h on + non-loongson. + * grub-core/kern/mips/dl.c (grub_arch_dl_init_linker): Fix argument + to grub_dl_register_symbol. + +2011-05-15 Vladimir Serbinenko + + Fix compilation errors. + + * grub-core/term/ns8250.c (serial_get_divisor): Declare 'port' as + potentially unused. + * grub-core/loader/i386/linux.c (grub_linux_setup_video): + Handle GRUB_VIDEO_DRIVER_SIS315PRO. + * grub-core/bus/cs5536.c (grub_cs5536_init_geode): Restrict DIVIL init + to loongson machines. + +2011-05-15 Vladimir Serbinenko + + Several FS mtime support. + + * grub-core/fs/affs.c (grub_affs_time): New struct. + (grub_affs_file): New field mtime. + (grub_fshelp_node): Changed 'block' and 'parent' to more appropriate + type. Removed 'size'. New field 'di'. All users updated. + (grub_affs_mount): Simplify checsum checking. + (grub_affs_iterate_dir): New helper grub_affs_create_node. + (grub_affs_dir): Handle mtime. + * grub-core/fs/cpio.c (grub_cpio_find_file): Handle mtime. + (grub_cpio_dir): Likewise. + * grub-core/fs/hfs.c (grub_hfs_dirrec): New fields 'ctime' and 'mtime'. + (grub_hfs_filerec): New field mtime. + (grub_hfs_dir): Handle mtime. + (grub_hfs_mtime): New function. + (grub_hfs_fs): Register grub_hfs_mtime. + * grub-core/fs/iso9660.c (grub_iso9660_date2): New struct. + (grub_iso9660_dir): New field mtime. + (grub_fshelp_node): New field dirent. + (iso9660_to_unixtime): New function. + (iso9660_to_unixtime2): Likewise. + (grub_iso9660_read_symlink): Use node->dirent. + (grub_iso9660_iterate_dir): Likewise. + (grub_iso9660_dir): Set mtime. + (grub_iso9660_mtime): New function. + (grub_iso9660_fs): Register grub_iso9660_mtime. + * grub-core/fs/jfs.c (grub_jfs_time): New struct. + (grub_jfs_inode): New fields atime, ctime and mtime. + (grub_jfs_dir): Set mtime. + * grub-core/fs/minix.c (grub_minix_dir): Likewise. + * grub-core/fs/ntfs.c (list_file): Set mtime. + (grub_ntfs_dir): Likewise. + * grub-core/fs/reiserfs.c (grub_fshelp_node): New field 'mtime'. + (grub_reiserfs_iterate_dir): Set mtime. + (grub_reiserfs_dir): Likewise. + * grub-core/fs/sfs.c (grub_sfs_obj): New field mtime. + (grub_fshelp_node): Likewise. + (grub_sfs_iterate_dir): Set mtime. + (grub_sfs_dir): Likewise. + * grub-core/fs/udf.c (grub_udf_dir): Set mtime. + * grub-core/fs/xfs.c (grub_xfs_time): New struct. + (grub_xfs_inode): New fields atime, mtime, ctime. + (grub_xfs_dir): Set mtime. + * include/grub/datetime.h (grub_datetime2unixtime): New function. + * include/grub/hfs.h (grub_hfs_sblock): New fields ctime and mtime. + * include/grub/ntfs.h (grub_fshelp_node): New field mtime. + + Support UDF symlinks. + + * grub-core/fs/udf.c (grub_udf_iterate_dir): Handle symlinks. + (grub_ufs_read_symlink): New function. All users updated. + + Check amiga partmap checksum. + + * grub-core/partmap/amiga.c (grub_amiga_rdsk): Pad to 128 bytes. + (grub_amiga_partition): Likewise. + (amiga_partition_map_checksum): New function. + (amiga_partition_map_iterate): Check checksum. + +2011-05-15 Vladimir Serbinenko + + ROMFS support. + + * Makefile.util.def (libgrubmods.a): Add romfs. + * grub-core/Makefile.core.def (romfs): New module. + * grub-core/fs/romfs.c: New file. + +2011-05-15 Vladimir Serbinenko + + Squashfs v4 support. + + * Makefile.util.def (libgrubmods.a): Add squash4. + * grub-core/Makefile.core.def (squash4): New module. + * grub-core/fs/squash4.c: New file. + * grub-core/io/gzio.c (grub_gzio): New members disk_input_off, + disk_input_start, disk_input. + (get_byte): Handle disk_input. + (grub_zlib_disk_read): New function. + * include/grub/deflate.h (grub_zlib_disk_read): New proto. + +2011-05-15 Vladimir Serbinenko +2011-05-15 Feiran Zheng + + * Makefile.util.def (libgrubmods.a): Add minix3. + * grub-core/Makefile.core.def (minix3): New module. + * grub-core/fs/minix.c (GRUB_MINIX_MAGIC) [MODE_MINIX3]: New value. + (GRUB_MINIX_BSIZE): Removed. + (GRUB_MINIX_INODE_DIR_BLOCKS): New definition. All users updated. + (grub_minix_ino_t): New type. + (grub_minix_le_to_cpu_ino): New macro. + (GRUB_MINIX_ZONE2SECT): New definition. All users updated. + (grub_minix_sblock) [MODE_MINIX3]: Change for minix3. + (grub_minix_data): New field block_size. + (grub_minix_read_file): Handle 64-bit correctly. + * grub-core/fs/minix3.c: New file. + +2011-05-15 Tristan Gingold +2011-05-15 Robert Millan +2011-05-15 Vladimir Serbinenko + + IA64 support. + + * Makefile.util.def (libgrubmods.a): Add grub-core/kern/ia64/dl_helper.c + * configure.ac: Add ia64-efi target. + Probe for __ia64_trampoline, __udivsi3, __umoddi3, __udivdi3, + __divsi3, __modsi3, __umodsi3, __moddi3 and __divdi3 symbols. + * gentpl.py: Add ia64_efi platform. + Rename x86_efi to efi and Add ia64-efi. All users updated. + * grub-core/Makefile.am: Set KERNEL_HEADER_FILES for ia64-efi. + * grub-core/Makefile.core.def (kernel.img): Add compile flags for ia64. + Remove kern/generic/rtc_get_time_ms.c on EFI. + Add kern/ia64/efi/startup.S, kern/ia64/efi/init.c, kern/ia64/dl.c, + kern/ia64/dl_helper.c on ia64-efi. + Add kern/emu/cache.c on emu. + (linux): Use on loader/ia64/efi/linux.c on ia64. + * grub-core/gensymlist.sh (grub_register_exported_symbols): Check + whether symbol is a function. + * grub-core/kern/dl.c [GRUB_MACHINE_EMU]: Include sys/mman.h. + (grub_symbol): New field 'isfunc'. + (grub_dl_resolve_symbol): Return whole symbol rather than just address. + (grub_dl_register_symbol): New argument 'isfunc'. All users updated. + (grub_dl_load_segments): Place all sections into the same region. + [__ia64__]: Create trampolines and got. + [GRUB_MACHINE_EMU]: Call mprotect. + (grub_dl_resolve_symbols): Resolve symbol type as well. + [__ia64__]: Create function descriptors. + * grub-core/kern/efi/efi.c (grub_get_rtc): Renamed to ... + (grub_rtc_get_time_ms): ... this. Expressions simplified. + (grub_get_rtc): New function. + * grub-core/kern/emu/cache.c [__ia64__]: New file. + * grub-core/kern/emu/cache.S: Renamed to ... + * grub-core/kern/emu/cache_s.S: ... this. + [__ia64__]: Add a nop. + * grub-core/kern/emu/full.c (grub_arch_dl_get_tramp_got_size) + [__ia64__]: New function. + * grub-core/kern/emu/lite.c [__ia64__]: Include ../ia64/dl.c. + * grub-core/kern/ia64/dl.c: New file. + * grub-core/kern/ia64/dl_helper.c: Likewise. + * grub-core/kern/ia64/efi/init.c: New file. + * grub-core/kern/ia64/efi/startup.S: Likewise. + * grub-core/lib/efi/halt.c [__ia64__]: Don't try acpi. + * grub-core/lib/ia64/longjmp.S: New file (from glibc). + * grub-core/lib/ia64/setjmp.S: Likewise (from glibc). + * grub-core/lib/setjmp.S [__ia64__]: Include ./ia64/setjmp.S. + * grub-core/loader/ia64/efi/linux.c: New file. + * include/grub/dl.h (GRUB_MOD_NAME): Redefined using C rather than asm. + (GRUB_MOD_DEP): Likewise. + (grub_dl) [__ia64__]: New fields got and tramp. + (grub_dl): New field 'base'. + (grub_dl_register_symbol): New argument isfunc. All users updated. + (GRUB_IA64_DL_TRAMP_ALIGN): New definition. + (GRUB_IA64_DL_TRAMP_SIZE): Likewise. + (GRUB_IA64_DL_GOT_ALIGN): Likewise. + (grub_ia64_dl_get_tramp_got_size): New proto. + (GRUB_ARCH_DL_TRAMP_ALIGN) [__ia64__]: Likewise + (GRUB_ARCH_DL_GOT_ALIGN) [__ia64__]: Likewise + (grub_arch_dl_get_tramp_got_size) [__ia64__]: Likewise + * include/grub/efi/api.h: Skip call wrappers on ia64. + * include/grub/efi/pe32.h (GRUB_PE32_MACHINE_IA64): New definition. + * include/grub/efi/time.h (GRUB_TICKS_PER_SECOND): Change to 1000. + * include/grub/elf.h (ELF_ST_INFO): New definition. + * include/grub/ia64/efi/kernel.h: New file. + * include/grub/ia64/efi/memory.h: Likewise. + * include/grub/ia64/efi/time.h: Likewise. + * include/grub/ia64/kernel.h: Likewise. + * include/grub/ia64/setjmp.h: Likewise (from glibc). + * include/grub/ia64/time.h: New file. + * include/grub/ia64/types.h: Likewise. + * include/grub/libgcc.h (__udivsi3, __umodsi3, __umoddi3, __udivdi3, + __moddi3, __divdi3, __divsi3, __modsi3, __ia64_trampoline): + New protos. + * include/grub/offsets.h (GRUB_KERNEL_IA64_EFI_PREFIX): New definition. + (GRUB_KERNEL_IA64_EFI_PREFIX_END): Likewise. + * include/grub/types.h (PRIxGRUB_ADDR): Likewise. + * util/grub-mkimage.c (image_target_desc): New field pe_target. + All users updated. + (EFI64_HEADER_SIZE): New definition. All users updated. + (image_targets): Add ia64-efi. + * util/grub-mkimagexx.c (relocate_symbols): New arguments jumpers and + jumpers_addr. All users updated. + Create function descriptors. + (count_funcs): New function. + (unaligned_uint32): New struct. + (MASK20): New definition. + (MASK19): Likewise. + (MASKF21): Likewise. + (add_value_to_slot_20b): New function. + (add_value_to_slot_21_real): Likewise. + (add_value_to_slot_21): Likewise. + (ia64_kernel_trampoline): New struct. + (nopm): New variable. + (jump): Likewise. + (make_trampoline): New function. + (relocate_addresses): Handle ia64. + (make_reloc_section): Likewise. + (load_image): Likewise. + +2011-05-15 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_read_logical): Silence spurious + warning. Move variables before code while on it. + +2011-05-15 Vladimir Serbinenko + + Fuloong support. + + * configure.ac: Rename yeeloong platform to loongson. All users updated. + * grub-core/Makefile.core.def (fwstart_fuloong): New image. + * grub-core/boot/mips/loongson/fuloong.S: New file. + * grub-core/boot/mips/loongson/fwstart.S: Wait for CS5536 to come up. + Explicitly init CS5536. + [FULOONG]: Don't use serial until CS5536 is available. + Set GPIO based on dumps. + (serial_hw_init) [FULOONG]: Handle CS5536 parts. + [FULOONG]: Handle GPIO and memory controller differences. + Parse machine type in $a2. + * grub-core/boot/mips/startup_raw.S: Determine and save the + architecture. + * grub-core/bus/cs5536.c (gpiodump): Move to fwstart.S. + (grub_cs5536_init_geode): Remove gpio part. Conditionalise DIVIL + init on architecture type. + * grub-core/kern/mips/loongson/init.c (grub_machine_init): Init + SIS315E. Don't init at_keyboard on fuloong. + (grub_halt): Support Fuloong. + * grub-core/kern/mips/startup.S [LOONGSON]: Save $s7. + * grub-core/loader/mips/linux.c (LOONGSON_MACHTYPE): Removed. + (loongson_machtypes): New array. + (grub_cmd_linux) [GRUB_MACHINE_MIPS_LOONGSON]: Pass the right machine + type. + * grub-core/term/ns8250.c (serial_get_divisor): New parameter port and + config. All users updated. Handle CS5536 serial. + * grub-core/term/serial.c (grub_serial_register): Conditionalise + default port on machine type. Register serial as inactive. + * grub-core/video/sis315pro.c: New file. + * include/grub/cs5536.h (GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED): New + definition. + (GRUB_CS5536_MSR_MAILBOX_CONFIG): Likewise. + (GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1): Likewise. + (GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3): Likewise. + (GRUB_CS5536_MSR_DIVIL_UART1_CONF): Likewise. + (GRUB_CS5536_MSR_DIVIL_UART2_CONF): Likewise. + * include/grub/mips/loongson.h (GRUB_CPU_LOONGSON_SHUTDOWN_GPIO): Rename + to ... + (GRUB_CPU_YEELOONG_SHUTDOWN_GPIO): ... this. + * include/grub/mips/loongson/kernel.h (GRUB_ARCH_MACHINE_YEELOONG): New + definition. + (GRUB_ARCH_MACHINE_FULOONG): Likewise. + (grub_arch_machine): New extern var. + * include/grub/mips/loongson/serial.h + (GRUB_MACHINE_SERIAL_DIVISOR_115200): Renamed to ... + (GRUB_MACHINE_SERIAL_PORT0_DIVISOR_115200): ... this. + (GRUB_MACHINE_SERIAL_PORT): Renamed to ... + (GRUB_MACHINE_SERIAL_PORT0): ... this. + (GRUB_MACHINE_SERIAL_PORT2_DIVISOR_115200): New definition. + (GRUB_MACHINE_SERIAL_PORT1): Likewise. + (GRUB_MACHINE_SERIAL_PORT2): Likewise. + (GRUB_MACHINE_SERIAL_PORTS): Include ports 1 and 2. + * include/grub/term.h (grub_term_register_input_inactive): New inline + function. + (grub_term_register_output_inactive): Likewise. + * include/grub/video.h (grub_video_driver_id): New value + GRUB_VIDEO_DRIVER_SIS315PRO. + * util/grub-mkimage.c (image_target_desc): Rename name to dirname. + New field "names". All users updated. + New field value IMAGE_FULOONG_FLASH. + (generate_image): USe separate fwstart hashes for yeeloong and fuloong. + +2011-05-14 Jordan Uggla + + * docs/grub.texi (Invoking grub-install): Fix additional outdated claims + and add some clarification. + +2011-05-14 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Autoload gzio since it's needed on some + platforms if kernel is compressed. + +2011-05-14 Vladimir Serbinenko + + * grub-core/kern/mm.c (grub_memalign): Disable auto-unloadding of + unused modules since currently referrence counter isn't reliable and + there isn't much memory to recover there anyway. + +2011-05-14 Vladimir Serbinenko + + * grub-core/kern/dl.c (grub_dl_load_file): Decrease ref counter + rather than resetting it to allow modules to reference themselves + in init. + +2011-05-14 Vladimir Serbinenko + + * grub-core/kern/dl.c (grub_dl_unload): Don't decrease reference + counter on dependencies since grub_dl_unref already handles this. + +2011-05-14 Vladimir Serbinenko + + * grub-core/font/font_cmd.c (loadfont_command): Set grub_errno + on error if not already done. + +2011-05-14 Vladimir Serbinenko + + Fix few potential memory misusage. + + * grub-core/font/font.c (load_font_index): Don't free char_index to + avoid double free. + (grub_font_load): Zero-fill font at alloc for safety. + Close file on error. + (free_font): Free bmp_idx. + +2011-05-14 Vladimir Serbinenko + + * docs/grub.texi (Installation): Fix several outdated claims. + +2011-05-14 Vladimir Serbinenko + + Handle module_license on windows. + + * util/grub-pe2elf.c (MODLICENSE_SECTION): New definition. All following + sections shifted. + (insert_string): Make argument const char * instead of char *. + (write_section_data): Handle long section names. + Handle module_license. + +2011-05-14 Vladimir Serbinenko + + * grub-core/commands/menuentry.c (grub_cmd_menuentry): Correctly + handle class-free menuentries. + (grub_normal_add_menu_entry): Add a check to be sure. + +2011-05-14 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c (set1_e0_mapping): Fix swap between + PgUp and PgDown. + +2011-05-13 Vladimir Serbinenko + + * configure.ac: Bump version to 1.99. + +2011-05-13 Vladimir Serbinenko + + Give ATA device a bit more time on first try in order to allow disks + to spin up. + + * grub-core/disk/ata.c (grub_atapi_identify): Use GRUB_ATA_TOUT_DEV_INIT + if dev->present is 1. Reset dev->present on failure. + (grub_ata_device_initialize): Set dev->present to 1. + * include/grub/ata.h (GRUB_ATA_TOUT_DEV_INIT): New value. + (grub_ata_device): New member 'present'. + +2011-05-13 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Update hash. + +2011-05-13 Vladimir Serbinenko + + Flush caches on DMA memory. + + * grub-core/kern/mips/cache.S (grub_arch_sync_dma_caches): New function. + * grub-core/bus/pci.c (grub_memalign_dma32): Flush caches. + (grub_dma_free): Likewise. + * include/grub/cache.h (grub_arch_sync_dma_caches): New declaration. + +2011-05-13 Vladimir Serbinenko + + * grub-core/boot/mips/yeeloong/fwstart.S: Add explicit set mips3 + to avoid asm treating ld and sd as macros. + +2011-05-13 Vladimir Serbinenko + + * grub-core/boot/mips/startup_raw.S: Flush cache after loading + decompressor. + +2011-05-13 Vladimir Serbinenko + + * grub-core/boot/mips/startup_raw.S: Use jalr rather than bal to call + grub_decompress_core since later would fail if grub_decompress_core + is too far. + +2011-05-13 Vladimir Serbinenko + + * grub-core/kern/mips/dl.c (grub_arch_dl_relocate_symbols): Handle + R_MIPS_JALR since it's used by newer compiler. + +2011-05-10 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Correctly handle the Linux in root. + +2011-05-09 Vladimir Serbinenko + + * grub-core/loader/efi/chainloader.c (grub_chainloader_unload): Set + file_path to 0 for surety. + (grub_chainloader_boot): Set exit_data to NULL. + Unset the loader once done. + (grub_cmd_chainloader): Fix confusing error message if file is empty. + +2011-05-09 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c (fetch_key): Make a printf on + unknown key into a dprintf. + +2011-05-09 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (linux_find_partition): Don't abort + on first non-existant partition. + +2011-05-09 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (open_device): Set data->fd to -1 if + openning fails. + Reported by: Mark Korenberg. + +2011-05-09 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (linux_find_partition): Prevent possible + overflow. + +2011-05-09 Vladimir Serbinenko + + * util/grub-mkimage.c (main): Explicitely flush and sync the output + before closing to ensure that it will be readable by grub-setup. + +2011-05-05 Vladimir Serbinenko + + * grub-core/loader/efi/appleloader.c (MAKE_PIWG_PATH): New macro. + (devpath_1): Use MAKE_PIWG_PATH. + (devpath_2): Likewise. + (devpath_3): Likewise. + (devpath_4): Likewise. + (devpath_5): Likewise. + (devpath_6): Likewise. + + The appleldr.mod was checked that to be binary identical to previous + version. + +2011-05-05 Zach + + Support 2010 Macbooks. + + * grub-core/loader/efi/appleloader.c (devpath_6): New variable. + (devs): Add devpath_6. + +2011-05-05 Vladimir Serbinenko + + * util/grub-mkpasswd-pbkdf2.c (main): Use /dev/urandom and not + /dev/random. /dev/urandom is good enough for our purposes (salting). + +2011-05-05 Vladimir Serbinenko + + * util/grub-mkrescue.in (process_input_dir): Include efiemu??.o. + +2011-05-05 Vladimir Serbinenko + + * grub-core/lib/legacy_parse.c (grub_legacy_parse): Correctly handle + hexadecimal. + +2011-05-05 Vladimir Serbinenko + + * grub-core/efiemu/main.c (grub_efiemu_load_file): Return grub_errno + and not 0 on failure. + +2011-05-03 Colin Watson + + * grub-core/fs/i386/pc/pxe.c (grub_pxefs_dir): Return + GRUB_ERR_BAD_FS rather than GRUB_ERR_IO if the disk is not a pxe + disk; otherwise grub_fs_probe will not fall back to the next + filesystem. + (grub_pxefs_open): Likewise, for consistency. + Reported and tested by: Ezekiel Grave. + +2011-05-03 Colin Watson + + * tests/partmap_test.in: Don't hardcode path to parted. + Reported by: Peter Hjalmarsson. Fixes Savannah bug #33150. + +2011-05-01 Colin Watson + + * docs/grub.texi (GRUB only offers a rescue shell): Suggest the use + of `ls' to find out which devices are available. + +2011-04-25 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_linux_boot): Supply target rather + than source address for efi mmap buffer. + +2011-04-25 Vladimir Serbinenko + + * grub-core/partmap/amiga.c (amiga_partition_map_iterate): Fix a + wrong action on non-detecting the magic. + +2011-04-25 Vladimir Serbinenko + + * grub-core/gnulib/regex.c: Remove GRUB_MOD_LICENSE since it's + already supplied by another part of the module (fixes compilation on + FreeBSD). + +2011-04-25 Vladimir Serbinenko + + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Make mdraid UUID + match the one used by mdadm. + +2011-04-21 Colin Watson + + * po/README: Add instructions for creating po/LINGUAS. + +2011-04-21 Colin Watson + + Add "SEE ALSO" sections to most man pages. Fixes Debian bug + #551428. + + * docs/man/grub-editenv.h2m (SEE ALSO): New section. + * docs/man/grub-emu.h2m (SEE ALSO): Likewise. + * docs/man/grub-fstest.h2m (SEE ALSO): Likewise. + * docs/man/grub-install.h2m (SEE ALSO): Likewise. + * docs/man/grub-macho2img.h2m (SEE ALSO): Likewise. + * docs/man/grub-menulst2cfg.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkconfig.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkdevicemap.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkfont.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkimage.h2m (SEE ALSO): Likewise. + * docs/man/grub-mklayout.h2m (SEE ALSO): Likewise. + * docs/man/grub-mknetdir.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkpasswd-pbkdf2.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkrelpath.h2m (SEE ALSO): Likewise. + * docs/man/grub-mkrescue.h2m (SEE ALSO): Likewise. + * docs/man/grub-ofpathname.h2m (SEE ALSO): Likewise. + * docs/man/grub-pe2elf.h2m (SEE ALSO): Likewise. + * docs/man/grub-probe.h2m (SEE ALSO): Likewise. + * docs/man/grub-reboot.h2m (SEE ALSO): Likewise. + * docs/man/grub-script-check.h2m (SEE ALSO): Likewise. + * docs/man/grub-set-default.h2m (SEE ALSO): Likewise. + * docs/man/grub-setup.h2m (SEE ALSO): Likewise. + +2011-04-21 Colin Watson + + * grub-core/kern/emu/getroot.c + (grub_find_root_device_from_mountinfo): Remove non-virtual-device + test that was incorrectly reintroduced in r3214. + Reported by: Ian Dall. Fixes Savannah bug #33133. + +2011-04-21 Colin Watson + + Fix stack pointer handling in 16-bit relocator. + + * grub-core/lib/i386/relocator16.S (grub_relocator16_start): Move + grub_relocator16_sp to %esp rather than %ss, and zero-extend it. + Fixes Ubuntu bug #683904. + +2011-04-20 Vladimir Serbinenko + + * configure.ac: Bump version to 1.99~rc2. + +2011-04-20 Vladimir Serbinenko + + * include/grub/dl.h [ASM_FILE]: Adapt for assembly. + * grub-core/lib/i386/setjmp.S: Add missing GRUB_MOD_LICENSE. + * grub-core/lib/x86_64/setjmp.S: Likewise. + * grub-core/lib/mips/setjmp.S: Likewise. + * grub-core/lib/powerpc/setjmp.S: Likewise. + * grub-core/lib/sparc64/setjmp.S: Likewise. + +2011-04-20 Vladimir Serbinenko + + * grub-core/lib/efi/datetime.c: Add missing GRUB_MOD_LICENSE. + * grub-core/lib/efi/datetime.c: Likewise. + +2011-04-19 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_flush): + New function. + (grub_util_biosdisk_close): Use grub_util_biosdisk_flush. + * include/grub/emu/hostdisk.h (grub_util_biosdisk_flush): New proto. + * util/grub-setup.c (setup): Use grub_util_biosdisk_flush. + +2011-04-19 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (grub_gfxterm_fullscreen): Preserve previous + bitmap. + (grub_gfxterm_term_init): Likewise. + +2011-04-19 Vladimir Serbinenko + + Take into account the decorations the computing menu entry width. + + * grub-core/gfxmenu/widget-box.c (get_border_width): New function. + (grub_gfxmenu_create_box): Register get_border_width. + * grub-core/gfxmenu/gui_list.c (draw_menu): Use get_border_width + if available. + * include/grub/gfxwidgets.h (grub_gfxmenu_box): New member + get_border_width. + +2011-04-18 Endres Puschner + + * grub-core/gfxmenu/icon_manager.c (grub_gfxmenu_icon_manager_get_icon): + Don't skip first class. + +2011-04-18 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_read_logical): Support huge + chunks. + * include/grub/err.h (grub_err_t): New enum value GRUB_ERR_BUG. + +2011-04-18 Vladimir Serbinenko + + Complete 64-bit division support. + + * grub-core/kern/misc.c (grub_divmod64): Rename to ... + (grub_divmod64_full): ... this. Support 64-bit divisor and reminder. + * include/grub/misc.h (grub_divmod64): Rename to ... + (grub_divmod64_full): ... this. + (grub_divmod64): New inline function. + +2011-04-18 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Add forgotten comma. + +2011-04-18 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Update fwstart.img hash after + performing the necessary test. + +2011-04-17 Vladimir Serbinenko + + * Makefile.am (multiboot.elf): Add -Wl,--build-id=none. + (kfreebsd.elf): Likewise. + (pc-chainloader.elf): Likewise. + (ntldr.elf): Likewise. + +2011-04-17 Vladimir Serbinenko + + Identify RAID by its UUID rather than (guessed) name. + + * grub-core/disk/raid.c (ascii2hex): New function. + (grub_raid_open): Accept mduuid/%s specification. + * grub-core/kern/emu/getroot.c (get_mdadm_name): Revamped into ... + (get_mdadm_uuid): ... this. + (grub_util_get_grub_dev): Use mduuid/%s if UUID is available. + +2011-04-16 Vladimir Serbinenko + + * grub-core/gfxmenu/gui_image.c (rescale_image): Don't attempt to scale + to negative size. + +2011-04-13 Colin Watson + + * util/grub.d/10_linux.in: Add rootflags=subvol= if / is on a + btrfs subvolume. + * util/grub.d/20_linux_xen.in: Likewise. + +2011-04-13 Colin Watson + + Rewrite /proc/self/mountinfo handling to cope with bind-mounts and + move-mounts appearing out of order. Fixes Ubuntu bug #738345. + + * grub-core/kern/emu/getroot.c (find_root_device_from_mountinfo): + Build a list of relevant visible mounts using the mnt_id and + parent_mnt_id fields, and then scan that list at the end. + +2011-04-12 Colin Watson + + * docs/grub.texi (normal): New section. + (normal_exit): New section. + (Embedded configuration): Add reference to normal. + (GRUB only offers a rescue shell): Likewise. + * docs/grub-dev.texi (Error Handling): Fix typo. + +2011-04-12 Colin Watson + + * NEWS: Drop obsolete entry about probe-only btrfs support. + +2011-04-12 Colin Watson + + * util/import_gcry.py: Fix typo. + +2011-04-11 Vladimir Serbinenko + + * NEWS: Add btrfs support. + +2011-04-11 Vladimir Serbinenko +2011-04-11 Colin Watson + + BtrFS support. Written by me (Vladimir) with important bugfixes and + even more important testing by Colin. + + * Makefile.util.def (libgrubmods.a): Add crc.c and gzio.c + * grub-core/Makefile.core.def (btrfs): Add crc.c. + * grub-core/fs/btrfs.c: Stub replaced with real implementation. + * grub-core/io/gzio.c (grub_gzio): New fields mem_input_size, + mem_input_off and mem_input. All users updated to accept in-RAM input. + (gzio_seek): New function. + (test_zlib_header): Likewise. + (grub_gzio_read): Likewise. + (grub_zlib_decompress): Likewise. + * grub-core/kern/emu/getroot.c (grub_find_root_device_from_mountinfo): + Accept partial and non-virtual mounts. + (grub_guess_root_device): Do rescanning after device_from_mountinfo to + avoid receiving /dev/dm-X as device. + * grub-core/kern/emu/misc.c (grub_make_system_path_relative_to_its_root): + Handle bind and partial mounts. + * grub-core/lib/crc.c: New file. + * include/grub/deflate.h: Likewise. + * include/grub/emu/misc.h (grub_find_root_device_from_mountinfo): New + proto. + * include/grub/lib/crc.h: New file. + +2011-04-11 Vladimir Serbinenko + + Implement automatic module license checking according to new GNU + guidelines. + + * grub-core/kern/dl.c (grub_dl_check_license): New function. + (grub_dl_load_core): Use grub_dl_check_license. + * include/grub/dl.h (GRUB_MOD_SECTION): New macro. + (GRUB_MOD_LICENSE): Likewise. + (GRUB_MOD_DUAL_LICENSE): Likewise. + All modules updated. + +2011-04-11 Colin Watson + + * grub-core/fs/btrfs.c (grub_btrfs_fs) [GRUB_UTIL]: Set + reserved_first_sector to 1. btrfs reserves plenty of space for boot + loaders. + Reported by: Gene Cumm. Fixes Ubuntu bug #757446. + +2011-04-11 Vladimir Serbinenko + + * util/grub-fstest.c (cmd_cmp): Check that sizes match. + +2011-04-11 Vladimir Serbinenko + + * util/grub-fstest.c (read_file): Report GRUB error if file opening + failed. + +2011-04-11 Vladimir Serbinenko + + * grub-core/kern/file.c (grub_file_open): Don't take into account the + parenthesis in the middle of the filename. + +2011-04-10 Vladimir Serbinenko + + * grub-core/loader/mips/linux.c (grub_cmd_initrd): Use correct limits + rather than trying to put initrd way too high. + Reported by: Ryan Lortie + +2011-04-10 Vladimir Serbinenko + + * grub-core/boot/mips/yeeloong/fwstart.S (no_cs5536): Put back + improperly removed string. + +2011-04-10 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_data): New member + is_disk. + (grub_util_biosdisk_open): Don't apply ioctl on non-disk devices. + (open_device) Likewise. + (grub_util_biosdisk_close): Likewise. + Reported by: Mark Korenberg. + +2011-04-10 Alexander Kurtz + + * util/grub-mkconfig_lib.in: Add missing quotes. + +2011-04-10 Colin Watson + + * grub-core/gnulib/argp-parse.c (__argp_input): Don't crash if pstate + is NULL. + +2011-04-10 Vladimir Serbinenko + + Dynamically count the number of lines for the lower banner. + + * grub-core/normal/menu_entry.c (per_term_screen): New member + num_entries. + (print_down): Use num_entries. + (update_screen): Likewise. + (grub_menu_entry_run): Set num_entries. + * grub-core/normal/menu_text.c (menu_viewer_data): New member + num_entries. + (grub_print_message_indented): Move real part to ... + (grub_print_message_indented_real): ... here. Additional argument + dry_run. + (draw_border): Additional argument num_entries. + (print_message): Additional argument dry_run. + (print_entries): Receive menu viewer data. + (grub_menu_init_page): New argment num_entries. + (menu_text_set_chosen_entry): Use num_entries. + (grub_menu_try_text): Likewise. + * grub-core/normal/term.c (print_ucs4_terminal): New argument dry_run. + All users updated. + (grub_ucs4_count_lines): New function. + * include/grub/term.h (grub_term_cursor_x): Moved from here .. + * grub-core/normal/menu_text.c (grub_term_cursor_x): ... to here. + * include/grub/term.h (GRUB_TERM_MESSAGE_HEIGHT): Removed. + (grub_term_border_height): Likewise. + (grub_term_num_entries): Likewise. + +2011-04-10 Vladimir Serbinenko + + * grub-core/boot/mips/yeeloong/fwstart.S: Fix address to error message. + Remove now unused string. + +2011-04-09 Colin Watson + + * docs/grub-dev.texi (Finding your way around): Update for 1.99 + build system. + (Getting started): GRUB is developed in Bazaar now, not Subversion. + + (Comment): Fix typo. + (Getting started): General copy-editing. + (Typical Development Experience): Likewise. + (Error Handling): Likewise. + (Video API): Likewise. + +2011-04-09 Colin Watson + + * docs/grub-dev.texi: Replace MoinMoin syntax with Texinfo syntax + throughout. + +2011-04-08 Vladimir Serbinenko + + * util/grub-mkimage.c (main): Handle special naming of yeeloong + directory. + +2011-04-08 Colin Watson + + * docs/grub-dev.texi: Fix spelling of "developer" throughout. + * grub-core/fs/i386/pc/pxe.c (parse_dhcp_vendor): Fix spelling of + "development". + +2011-04-08 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (run): Use grub_memcpy rather than + grub_strcpy since the lines aren't necessarily 0-terminated. + +2011-04-08 Vladimir Serbinenko + + * grub-core/lib/legacy_parse.c (legacy_commands): Find doesn't set + root on legacy. + +2011-04-08 Vladimir Serbinenko + + * grub-core/commands/probe.c (options): Argument to set isn't optional. + (GRUB_MOD_INIT): DEVICE isn't optional. + +2011-04-08 Vladimir Serbinenko + + * grub-core/normal/term.c (print_ucs4_terminal): Don't try to put the + word on new line if it's too long anyway. Fixes a hang. + +2011-04-08 Vladimir Serbinenko + + * include/grub/util/raid.h (grub_util_raid_getmembers): Make argument + const. + * util/grub-setup.c (main): Reuse md device name if available. + * util/raid.c (grub_util_raid_getmembers): Receive device name and + not GRUB name as argument. + Based on patch by: Florian Wagner . + +2011-04-08 Vladimir Serbinenko + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): + Place mbi on low memory for better compatibility. + +2011-04-08 Vladimir Serbinenko + + * include/grub/efiemu/efiemu.h: Use grub_memory_hook_t type. + +2011-04-08 Vladimir Serbinenko +2011-04-08 Colin Watson + + * autogen.sh: Ensure that collate and ctype locale is C. + * conf/Makefile.common: Likewise. + +2011-04-08 Vladimir Serbinenko + + * grub-core/normal/menu.c: Add missing include. + +2011-04-08 Vladimir Serbinenko + + * grub-core/disk/raid.c [GRUB_UTIL]: Add missing include. + +2011-04-08 Martin Zuther + + * util/grub-mkconfig.in: Ignore emacsen backup. + +2011-04-08 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (open_device): Sync on close and not + on open. + (grub_util_biosdisk_close): Likewise. + +2011-04-08 Vladimir Serbinenko + + * grub-core/kern/emu/getroot.c (grub_util_get_grub_dev): Add missing + const attribute and use grub_isdigit. + +2011-04-06 Andrey + + * grub-core/video/fb/video_fb.c (grub_video_fb_setup): Silence older + gcc warning. + +2011-04-06 Vladimir Serbinenko + + * grub-core/lib/relocator.c (grub_relocator_alloc_chunk_align): Add few + useful grub_dprintf's. + +2011-04-06 Vladimir Serbinenko + + * include/grub/fs.h (grub_dirhook_info): Use unsigned for 1-bit fields. + +2011-04-06 Vladimir Serbinenko + + * util/grub.d/00_header.in: Don't use LANG unless unifont is available. + +2011-04-06 Vladimir Serbinenko + + Output errors if theme loading failed. + + * grub-core/gfxmenu/gfxmenu.c (grub_gfxmenu_try): Move the call to + grub_gfxterm_fullscreen on error paths to ... + * grub-core/normal/menu.c (menu_init): ...here. Wait after showing + theme loading error. + +2011-04-06 Vladimir Serbinenko + + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_RAW_SIZE): Let a bit more + space for older compilers. + (GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_PART): Likewise. + +2011-04-06 Vladimir Serbinenko + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Detect spares + and report them as not RAID members since they are useless for GRUB. + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Likewise. + +2011-04-02 Vladimir Serbinenko + + Increase LVM implementation robustness in order not to crash on + configurations like pvmove. Previously code assumed that in some places + only lvs or only pvs are used whereas it seems that they are used + interchangeably. + + * grub-core/disk/lvm.c (read_node): New function. + (read_lv): Use read_node. + (grub_lvm_scan_device): Use only first mirror on pvmove'd lvs. + Match volumes only at the end when all lvs are found. Take both + pvs (first) and lvs (second) into account. + * include/grub/lvm.h (grub_lvm_segment): Merge fields stripe_* and + mirror_* into node_*. All users updated. + (grub_lvm_stripe): Merge this ... + (grub_lvm_mirror): ... and this ... + (grub_lvm_node): ... into this. All users updated. + +2011-04-02 Vladimir Serbinenko + + * grub-core/disk/lvm.c (grub_lvm_scan_device): Print errors on the end + of function to allow further scanning for LVMs. + +2011-04-02 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_read): Don't close + on failed seek as it breaks open fd reusage. + +2011-04-02 Vladimir Serbinenko + + * util/grub-install.in: Add a recommendation to use --recheck before + reporting bugs. + +2011-04-02 Vladimir Serbinenko + + * docs/grub.texi (Vendor power-on buttons): Explain how the numbers + are obtained. + +2011-04-02 Vladimir Serbinenko + + GRUB developper manual based on existing Internals section and + contributions by the various authors with active copyright assignment. + + * docs/Makefile.am (info_TEXINFOS): Add grub-dev.texi. + * docs/font_char_metrics.png: New file. + * docs/font_char_metrics.txt: Likewise. + * docs/grub-dev.texi: Likewise. + * docs/grub.texi (Internals): Move from here ... + * docs/grub-dev.texi: ... here. + +2011-04-01 Colin Watson + + Store the loopback device as data on loopback grub_disk structures, + rather than the file it points to. This fixes use of freed memory + if an existing loopback device is replaced. + + * grub-core/disk/loopback.c (grub_loopback_open): Store dev in + disk->data, not dev->file. + (grub_loopback_read): Adjust file assignment to match. + Fixes Ubuntu bug #742967. + +2011-04-01 Colin Watson + + * grub-core/disk/loopback.c (grub_cmd_loopback): Fix a memory leak + when replacing an existing device. + +2011-04-01 Vladimir Serbinenko + + Fix incorrect types in jfs.c. This enables >2TiB disks and fixes some + memory corruptions. + + * grub-core/fs/jfs.c (struct grub_jfs_diropen): Interpret bytes as + unsigned. + (grub_jfs_lookup_symlink): Make ino a grub_uint32_t rather than int. + (grub_jfs_blkno): Use 64-bit quantities for block sectors. + (grub_jfs_read_inode): Likewise. + (grub_jfs_opendir): Likewise. Remove now useless casts. + (grub_jfs_getent): Likewise. + Make ino a grub_uint32_t rather than int. + (grub_jfs_mount): Ensure that blksize and log2_blksize are consistent. + (grub_jfs_read_file): Use 64-bit quantities when necessary. Replace + division and module with bit operations. + (grub_jfs_find_file): Make ino a grub_uint32_t. + (grub_jfs_lookup_symlink): Likewise. Use 64-bit quantities + +2011-04-01 Colin Watson + + * grub-core/normal/menu_entry.c (run): Quieten uninitialised + warning. (This was in fact always initialised before use, but GCC + wasn't smart enough to prove that.) + * grub-core/script/lexer.c (grub_script_lexer_yywrap): Likewise. + +2011-03-31 Vladimir Serbinenko + + * grub-core/kern/x86_64/efi/callwrap.S (efi_wrap_0): Preserve 16-byte + stack alignment. + (efi_wrap_1): Likewise. + (efi_wrap_2): Likewise. + (efi_wrap_3): Likewise. + (efi_wrap_4): Likewise. + (efi_wrap_5): Likewise. + (efi_wrap_6): Likewise. + (efi_wrap_10): Likewise. + Based on information by: Red Hat/Peter Jones. + +2011-03-31 Colin Watson + + * grub-core/mmap/efi/mmap.c (grub_mmap_unregister): Remove + set-but-not-used variable. + +2011-03-31 Colin Watson + + * docs/grub.texi (Simple configuration): Be more explicit about + GRUB_DEFAULT, and add an example. + Reported by: Leslie Rhorer. + +2011-03-30 Colin Watson + + * docs/grub.texi (Commands): Link to "GRUB only offers a rescue + shell". + +2011-03-30 Alexey Shvetsov + + * util/grub.d/10_linux.in: Add gentoo-specific config filename. + * util/grub.d/20_linux_xen.in: Likewise. + +2011-03-30 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Try alternative config filenames where + we parse config file. + * util/grub.d/20_linux_xen.in: Likewise. + +2011-03-30 Alexey Shvetsov + + * util/grub.d/10_linux.in: Add gentoo-specific Linux and initrd names. + * util/grub.d/20_linux_xen.in: Likewise. + +2011-03-30 Vladimir Serbinenko + + * grub-core/disk/raid.c (insert_array): Add few potentially + useful grub_util_info. + (grub_raid_register): Likewise. + +2011-03-30 Vladimir Serbinenko + + * grub-core/kern/emu/getroot.c (grub_util_get_grub_dev) [__linux__]: + Preserve partition number in mdadm code path. + +2011-03-30 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev): Add + few potentially useful grub_util_info. + +2011-03-30 Vladimir Serbinenko + + * grub-core/disk/lvm.c (grub_lvm_scan_device): Remove spurious \n. + +2011-03-30 Colin Watson + + * docs/grub.texi (default): Use @example rather than nested + itemized lists to avoid breaking gendocs. + +2011-03-30 Colin Watson + + * docs/grub.texi (Future): Update. + +2011-03-30 Colin Watson + + * docs/grub.texi (Environment): New chapter. + (Changes from GRUB Legacy): Link to "Environment block" section for + details of limitations. + (Simple configuration): Likewise. Link to documentation of gfxmode + and gfxpayload variables from GRUB_GFXMODE and GRUB_GFXPAYLOAD + respectively. + (Shell-like scripting): Note that normal variables are stored in the + environment. + (gettext): Link to documentation of lang and locale_dir. + (list_env): New section. + (load_env): New section. + (save_env): New section. + + (Reporting bugs): Fix typo. + +2011-03-30 Vladimir Serbinenko + + * docs/grub.texi: Correctly use "terminal_input" and not "terminal" in + the example. + +2011-03-30 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c (set_scancodes) + [!GRUB_MACHINE_MIPS_YEELOONG && !GRUB_MACHINE_QEMU]: Use scancode set 1. + +2011-03-30 Colin Watson + + * docs/grub.texi (Menu-specific commands): Remove some semantics + that were true in GRUB Legacy but not in GRUB 2. + (submenu): New section. + (false): New section. + (read): New section. + (true): New section. + +2011-03-30 Colin Watson + + * docs/grub.texi (Changes from GRUB Legacy): Minor proofreading. + +2011-03-30 Colin Watson + + * docs/grub.texi (Simple configuration): Explain some of the + current limitations of grub-mkconfig. + Reported by: Leslie Rhorer. + +2011-03-29 Vladimir Serbinenko + + Old macs search for boot.efi rather than for bootia32.efi. + + * util/grub-install.in: Copy bootia32.efi to boot.efi. + * util/grub-mkrescue.in: Likewise. + Suggested by: Peter Jones. + +2011-03-29 Vladimir Serbinenko + + * util/grub.d/20_linux_xen.in: Accept old-style xen kernels. + +2011-03-29 Vladimir Serbinenko + + * include/grub/lvm.h (grub_lvm_lv): New field 'visible'. + (grub_lvm_segment): New fields 'type', 'mirror_count' and 'mirrors'. + (grub_lvm_mirror): New struct. + * grub-core/disk/lvm.c (grub_lvm_checkvalue): Commented out. + (grub_lvm_iterate): Iterate only visible volumes. + (grub_lvm_read): Factor out to .. + (read_lv): ... this. Support mirrors. + (grub_lvm_read): New wrapper function. + (grub_lvm_scan_device): Parse mirrors. Skip everything that isn't + stripped or mirrored. + +2011-03-29 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Skip vmlinux-* on x86 platforms. + +2011-03-29 Colin Watson + + * docs/grub.texi (loopback): New section. + +2011-03-29 Colin Watson + + * grub-core/disk/loopback.c (GRUB_MOD_INIT): Stop documenting + removed -p option. + +2011-03-29 Colin Watson + + * docs/grub.texi (BIOS installation): New section, partly based on + previous text in other sections. + (Installing GRUB using grub-install): Replace BIOS discussion with a + cross-reference. + (Images): Likewise. + +2011-03-29 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (find_partition_start) + [HAVE_DIOCGDINFO]: Add safety checks. + +2011-03-29 Vladimir Serbinenko + + * util/grub.d/10_kfreebsd.in: Allow ufs.ko to be missing as it's + per default compiled in kernel and prior to 8.0 isn't shipped at all. + +2011-03-29 Colin Watson + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): If + real_sb->size is zero (e.g. RAID-0), get the disk size from + real_sb->data_size instead. + Fixes Ubuntu bug #743136. + +2011-03-29 Vladimir Serbinenko + + * grub-core/normal/misc.c (grub_normal_print_device_info): Use correct + printf clauses for printing size and start. + +2011-03-29 Vladimir Serbinenko + + * grub-core/fs/ext2.c (grub_ext2_read_inode): Fix an overflow. + Reported and tested by: Timothy Nikkel. + +2011-03-29 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (dirty_region_add): Move core part to ... + (dirty_region_add_real): ... this. + (dirty_region_add): Don't discard margin refresh when performing + scheduled repaint. + +2011-03-29 Vladimir Serbinenko + + * grub-core/lib/relocator.c (allocate_regstart) + [!DEBUG_RELOCATOR_NOMEM_DPRINTF]: Avoid grub_dprintf since not all + terminals are capabple of malloc-free operation. + (allocate_inreg) [!DEBUG_RELOCATOR_NOMEM_DPRINTF]: Likewise. + (malloc_in_range) [!DEBUG_RELOCATOR_NOMEM_DPRINTF]: Likewise. + +2011-03-29 Mario Limonciello + + * util/grub-setup.c: Copy the partition table zone if floppy support + is disabled, even if no partition table is found. + + Otherwise, the BIOS on Dell Latitude E series laptops will freeze + during POST if an invalid partition table is contained in the PBR + of the active partition when GRUB is installed to a partition. + +2011-03-28 Colin Watson + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Remove stale + comment. + +2011-03-28 Colin Watson + + * grub-core/disk/raid.c (grub_raid_register): Adjust debug message + to be specific about what kind of RAID device we're scanning for. + +2011-03-26 Seth Goldberg + + * grub-core/kern/emu/getroot.c (find_root_device_from_libzfs): Don't + return freed string. + +2011-03-26 Vladimir Serbinenko + + * grub-core/fs/iso9660.c (grub_iso9660_label): Rtrim the label. + +2011-03-26 Vladimir Serbinenko + + Use libgeom on FreeBSD to detect partitions. + + * Makefile.util.def (grub-mkimage): Add LIBGEOM to ldadd. + (grub-mkrelpath): Likewise. + (grub-script-check): Likewise. + (grub-editenv): Likewise. + (grub-mkpasswd-pbkdf2): Likewise. + (grub-fstest): Likewise. + (grub-mkfont): Likewise. + (grub-mkdevicemap): Likewise. + (grub-probe): Likewise. + (grub-setup): Likewise. + (grub-ofpathname): Likewise. + (grub-mklayout): Likewise. + (example_unit_test): Likewise. + (grub-menulst2cfg): Likewise. + * grub-core/Makefile.core.def (grub-emu): Likewise. + (grub-emu-lite): Likewise. + * configure.ac: Check for -lgeom on FreeBSD and set LIBGEOM. + * grub-core/kern/emu/hostdisk.c [FreeBSD]: Include libgeom.h. Don't + define HAVE_DIOCGDINFO. + (follow_geom_up) [FreeBSD]: New function. + (find_partition_start) [FreeBSD]: Rewritten using follow_geom_up. + (convert_system_partition_to_system_disk) [FreeBSD]: Likewise. + (grub_util_biosdisk_get_grub_dev) [FreeBSD]: Use FreeBSD path + unconditionally of HAVE_DIOCGDINFO. + +2011-03-26 Vladimir Serbinenko + + Fix FreeBSD compilation problem. + + * grub-core/kern/emu/hostdisk.c (MAJOR) [FreeBSD]: New definition. + (FLOPPY_MAJOR) [FreeBSD]: Likewise. + +2011-03-24 Colin Watson + + * grub-core/video/fb/video_fb.c (grub_video_fb_get_info_and_fini): + Switch back to page zero before loading a kernel, since some kernel + drivers expect that. + Thanks to: Felix Kuehling. + +2011-03-24 Vladimir Serbinenko + + * grub-core/lib/relocator.c (grub_relocator_alloc_chunk_addr) + [DEBUG_RELOCATOR]: Reuse grub_mm_check. + (grub_relocator_alloc_chunk_align) [DEBUG_RELOCATOR]: Likewise. + +2011-03-24 Vladimir Serbinenko + + * include/grub/mm.h (GRUB_MM_CHECK): Rename to ... + (grub_mm_check): ... this. MAke a function-like macro and use GRUB_FILE. + +2011-03-24 Vladimir Serbinenko + + * grub-core/lib/relocator.c (allocate_inreg): Avoid dprintf unless + DEBUG_RELOCATOR is defined since gfxterm can't cope with output when + malloc is disabled. + +2011-03-24 Vladimir Serbinenko + + * grub-core/loader/i386/bsdXX.c (grub_freebsd_load_elfmodule): Account + for modules headers when counting the needed allocation size. + +2011-03-23 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (calculate_normal_character_width): Return 8 + if no ASCII character is found to prevent crash. + +2011-03-23 Alexander Kurtz + + * grub-core/video/bitmap.c (match_extension): Ignore case. + +2011-03-23 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (init_line): Fix off-by-one error. + +2011-03-23 Vladimir Serbinenko + + * grub-core/script/parser.y: Declare "time" as valid argument. + +2011-03-23 Peter Jones + + Fix incorrect assert failure reporting. + + * grub-core/tests/example_functional_test.c (example_test): Add + a failure comment. + * grub-core/tests/lib/test.c (add_failure): Renamed to ... + (failure_start): ...this. Check that malloc succeeded. + Don't call xvasprintf. Return failure struct. + (failure_append_vtext): New function. + (failure_append_text): Likewise. + (add_failure): Likewise. + (grub_test_assert_helper): Likewise. + * include/grub/test.h (grub_test_assert_helper): New declaration. + (grub_test_assert): Macro rewritten. + +2011-03-23 Vladimir Serbinenko + + * grub-core/normal/main.c (GRUB_MOD_INIT): Export pager variable. + +2011-03-23 Vladimir Serbinenko + + * grub-core/lib/i386/pc/biosnum.c: Add missing include. + +2011-03-23 Vladimir Serbinenko + + * grub-core/disk/usbms.c (grub_usbms_reset): Transform USB-style error + into GRUB-style one. + +2011-03-23 Vladimir Serbinenko + + * grub-core/bus/usb/usbtrans.c (grub_usb_control_msg): Return usb-style + error and not grub_errno. + * grub-core/bus/usb/usbhub.c (grub_usb_add_hub): Likewise. + +2011-03-23 Vladimir Serbinenko + + * grub-core/bus/usb/uhci.c (grub_uhci_detect_dev): Return + GRUB_USB_SPEED_NONE in case of failure and not the error code. + +2011-03-23 Vladimir Serbinenko + + * grub-core/efiemu/i386/pc/cfgtables.c + (grub_machine_efiemu_init_tables): Make declaration a prototype. + * grub-core/loader/xnu.c (grub_xnu_lock): Likewise. + (grub_xnu_unlock): Likewise. + * grub-core/normal/cmdline.c (grub_cmdline_get/cl_set_pos_all): Likewise. + +2011-03-23 Vladimir Serbinenko + + * grub-core/bus/usb/usb.c (attach_hooks): Make static. + * grub-core/bus/usb/usbhub.c (hubs): Likewise. + * grub-core/commands/hashsum.c (aliases): Likewise. + * grub-core/commands/setpci.c (pci_registers): Likewise. + * grub-core/disk/usbms.c (attach_hook): Likewise. + * grub-core/fs/zfs/zfs.c (decomp_table): Likewise. + (zio_checksum_table): Likewise. + * grub-core/gettext/gettext.c (grub_gettext_msg_list): Likewise. + * grub-core/gfxmenu/gfxmenu.c (cached_view): Likewise. + * grub-core/lib/legacy_parse.c (legacy_commands): Likewise. + * grub-core/lib/relocator.c (leftovers): Likewise. + (extra_blocks): Likewise. + * grub-core/loader/i386/bsd.c (relocator): Likewise. + * grub-core/loader/i386/multiboot_mbi.c (modules): Likewise. + (modules_last): Likewise. + * grub-core/loader/i386/xnu.c (table_aliases): Likewise. + (devices): Likewise. + * grub-core/loader/multiboot_mbi2.c (modules): Likewise. + (modules_last): Likewise. + * grub-core/normal/auth.c (users): Likewise. + * grub-core/normal/context.c (initial_menu): Likewise. + (current_menu): Likewise. + * grub-core/normal/crypto.c (crypto_specs): Likewise. + * grub-core/term/serial.c (grub_serial_ports): Likewise. + (grub_serial_terminfo_input_template): Likewise. + (grub_serial_terminfo_output_template): Likewise. + (grub_serial_terminfo_input): Likewise. + (grub_serial_terminfo_output): Likewise. + (registered): Likewise. + * grub-core/term/usb_keyboard.c (attach_hook): Likewise. + +2011-03-23 Vladimir Serbinenko + + * grub-core/video/bochs.c (grub_video_bochs_setup): Use + grub_video_mode_type_t. + * grub-core/video/cirrus.c (grub_video_cirrus_setup): Likewise. + * grub-core/video/i386/pc/vbe.c (grub_video_vbe_setup): Likewise. + * grub-core/video/i386/pc/vga.c (grub_video_vga_setup): Likewise. + +2011-03-23 Vladimir Serbinenko + + * util/grub-install.in: Correct the x86-64 name as x86_64. + +2011-03-11 Colin Watson + + * grub-core/boot/i386/pc/lnxboot.S (real_code_2): Ensure that the + initial chunk read from the kernel always includes GRUB's multiboot + header, which is now outside the first sector. + +2011-03-09 Colin Watson + + * grub-core/loader/i386/linux.c (find_efi_mmap_size): Page-align + cached mmap_size, so that this works correctly when called multiple + times. + Reported by: Daniel Kahn Gillmor. Should fix Debian bug #616638. + +2011-03-09 Colin Watson + + * docs/grub.texi (Simple configuration): Tidy up formatting. + +2011-03-07 Szymon Janc + + * grub-core/fs/zfs/zfs.c (zap_leaf_lookup): + Set-but-not-used variable removed. + +2011-02-12 Vladimir Serbinenko + + Workaround yet another IEEE1275 bug. + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New enum value + GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS. + * grub-core/kern/ieee1275/mmap.c (grub_machine_mmap_iterate): Ignore + adress_cells and size:cells if GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS + is set. + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set + GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS on powermacs. + +2011-02-12 Vladimir Serbinenko + + * grub-core/partmap/msdos.c (pc_partition_map_embed): Fix off by one + error. + +2011-02-11 Colin Watson + + * util/grub.d/20_linux_xen.in: Bail out early if linux_list is + empty, since in that case we can only generate either nothing or a + syntactically invalid configuration file. + Reported by: Michal Suchanek. Fixes Debian bug #612898. + +2011-02-09 Colin Watson + + * docs/grub.texi (Kernel): Add reference to grub-mkrescue. + (Making a GRUB bootable CD-ROM): Likewise. + (Invoking grub-mkrescue): New section. + Reported by: Yann Dirson. Fixes Debian bug #612585. + +2011-02-09 Colin Watson + + * util/grub-install.in: Remove unnecessary brackets from tr + arguments. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + Reported by: Jamie Heilman. Fixes Debian bug #612564. + +2011-02-08 Colin Watson + + * include/grub/file.h (not_easly_seekable): Rename to ... + (not_easily_seekable): ... this. Update all users. + +2011-01-28 Colin Watson + + * docs/grub.texi (Making a GRUB bootable CD-ROM): Update to describe + grub-mkrescue. + +2011-01-24 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Refuse to create the images + bigger than the actual flash (512K) in Loongson machines. 512K is also + the biggest chip supported by them. + +2011-01-22 Vladimir Serbinenko + + * grub-core/kern/emu/getroot.c: Include config-util.h explicitly. + +2011-01-22 Anthony DeRobertis + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Check + super_offset field. + +2011-01-22 Vladimir Serbinenko + + * util/grub-install.in: Ignore install device on platforms + where it doesn't make sense. Always use UUIDs except on pc, efi and + sparc64. + Reported by: Daniel Kahn Gillmor. + +2011-01-22 Vladimir Serbinenko + + * grub-core/bus/bonito.c (write_bases): Fix direction of the shift. + +2011-01-22 Vladimir Serbinenko + + * grub-core/partmap/bsdlabel.c: Include grub/emu/misc.h and not grub/util/misc.h. + (iterate_real): Don't rely on partition being non-NULL. + +2011-01-22 Vladimir Serbinenko + + * grub-core/script/argv.c (round_up_exp): unsigned is 32-bit on all + supported platforms. Put a compile time assert for this rather than + generate a warning with 32-bit shift. + +2011-01-22 Vladimir Serbinenko + + * grub-core/disk/scsi.c (grub_scsi_read): Fix binary and check and make + logical expression more readable. + +2011-01-22 Vladimir Serbinenko + + * grub-core/disk/raid.c (insert_array): Ensure uniqueness of p->number + even if some elements have a name. + Reported by: Alexander GQ Gerasiov. + +2011-01-22 Colin Watson + + * util/grub-mkconfig_lib.in (is_path_readable_by_grub): Consider a + path unreadable if `grub-probe -t abstraction' fails, for example if + memberlist fails on an LVM volume group. + Reported by: Darius Jahandarie. + +2011-01-22 Colin Watson + + * docs/grub.texi (Simple configuration): Document + GRUB_PRELOAD_MODULES. + +2011-01-17 Colin Watson + + * .bzrignore: Remove nonexistent grub-pbkdf2. + +2011-01-16 Vladimir Serbinenko + + * configure.ac: Bump version to 1.99~rc1. + +2011-01-15 Vladimir Serbinenko + + * util/grub-mkimage.c (generate_image): Check fwstart.img checksum + for safety. + +2011-01-14 Vladimir Serbinenko + + * grub-core/kern/mips/yeeloong/init.c (grub_machine_init): Init boot + module. + +2011-01-14 Vladimir Serbinenko + + * grub-core/Makefile.core.def (fwstart): Add lost LDFLAGS. + +2011-01-13 Vladimir Serbinenko + + * grub-core/fs/zfs/zfsinfo.c (grub_cmd_zfs_bootfs): Quote bootpath and + diskdevid. + +2011-01-13 Vladimir Serbinenko + + Fix compilation on cygwin. + + * conf/Makefile.common (STRIPFLAGS_KERNEL): Add -F elf32-i386 and + -R .drectve on cygwin. + * conf/i386-pc-cygwin-img-ld.sc: Merge rdata and pdata into data. + * configure.ac: Use $(top_builddir) in TARGET_OBJ2ELF. + (COND_CYGWIN): New condition. + * grub-core/Makefile.am (%.mod): Set TARGET_OBJ2ELF. + * grub-core/genmod.sh.in: Use ${TARGET_OBJ2ELF} and + not @TARGET_OBJ2ELF@. + * util/grub-pe2elf.c (write_symbol_table): Use pe_symtab->type and not + type to determine whether aux is to be used. + +2011-01-12 Vladimir Serbinenko + + * util/ieee1275/ofpath.c (grub_util_devname_to_ofpath): Use the + realpath'ed device string. + Handle floppy (somewhat). + Issue error in unknown case rather than garbage. + Reported by: Axel Beckert. + +2011-01-12 Vladimir Serbinenko + + * util/grub.d/00_header.in (load_video): Handle the case when no video + drivers available. + Thanks to: Axel Beckert. + +2011-01-12 Vladimir Serbinenko + + * util/grub-mkfont.c (write_font_pf2): Use appropriate type for data + variable. Fixes problem on big endian platforms. + +2011-01-12 Vladimir Serbinenko + + * grub-core/Makefile.core.def (ieee1275_fb): Disable on sparc. + It doesn't work well there. + +2011-01-12 Vladimir Serbinenko + + * grub-core/normal/context.c (grub_env_context_close): Silence spurious + warning. + * grub-core/normal/menu.c (grub_menu_execute_entry): Likewise. + * grub-core/partmap/msdos.c (pc_partition_map_embed): Use unsigned + counter. + +2011-01-12 Vladimir Serbinenko + + Use alias->path rather than buggy "canon". + + * grub-core/disk/ieee1275/ofdisk.c (ofdisk_hash_add_real): New function. + (ofdisk_hash_add): New argument curcan. All users updated. + +2011-01-11 Colin Watson + + * configure.ac: Fall back to `true' if `makeinfo' does not exist. + +2011-01-11 Vladimir Serbinenko + + * grub-core/loader/powerpc/ieee1275/linux.c (grub_linux_load32): Apply + loadmask before doing any calculations. Use correct type for offset. + (grub_linux_load64): Likewise. + +2011-01-11 Colin Watson + + * util/grub-mklayout.c (console_grub_equivalences_shift): Terminate + with NULL. + (console_grub_equivalences_unshift): Likewise. + Reported by: Daniel Dehennin. + +2011-01-11 Vladimir Serbinenko + + * grub-core/fs/i386/pc/pxe.c (set_mac_env): Export variable. + (set_env_limn_ro): Likewise. + (GRUB_MOD_INIT): Likewise. + * grub-core/hook/datehook.c (GRUB_MOD_INIT): Likewise. Change to + ARRAY_SIZE while on it. + (GRUB_MOD_FINI): Change to ARRAY_SIZE. + * grub-core/normal/context.c (grub_env_export): Move from here ... + * grub-core/kern/env.c (grub_env_export): ... here. + * grub-core/normal/context.c (grub_cmd_export): Skip exporting root and + prefix. + * grub-core/kern/main.c (grub_main): Export root and prefix. + * include/grub/env.h (grub_env_export): Export. + Reported by: Seth Goldberg. + +2011-01-11 Vladimir Serbinenko + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): + Take into account space used by ELF sections and multiboot palette. + Reported by: Grégoire Sutre. + +2011-01-11 Vladimir Serbinenko + + * BUGS: New file. + +2011-01-10 Vladimir Serbinenko + + Pass more appropriate video id to Linux. + + * grub-core/loader/i386/linux.c (grub_linux_setup_video): Use + grub_video_get_driver_id and variable gfxpayloadforcelfb to + fill have_vga. + (grub_linux_boot): Rely on grub_linux_setup_video to fill have_vga and + shift params->lfb_size. + * include/grub/i386/linux.h: Make an enume out of have_vga values. + +2011-01-10 Vladimir Serbinenko + + * util/grub-menulst2cfg.c: Add missing include of misc.h. + +2011-01-10 Vladimir Serbinenko + + * grub-core/fs/zfs/zfsinfo.c (grub_cmd_zfs_bootfs): Use comma as + separator and pass bootpath/devid even if only one of them is available. + Reported by: Seth Goldberg. + +2011-01-10 Vladimir Serbinenko + + Don't use post-4G memory on EFI even if 64-bit since some non-compliant + implementations bug on them. + + * grub-core/kern/efi/mm.c (grub_efi_allocate_pages): Skip post-4G + memory. + (filter_memory_map): Likewise. + +2011-01-10 Vladimir Serbinenko + + * util/grub-kbdcomp.in: Add missing prefix and exec_prefix variables. + Reported by: nebuchadnezzar. + +2011-01-10 Vladimir Serbinenko + + * util/grub-kbdcomp.in: Add missing transform and bindir variables. + Reported by: nebuchadnezzar. + +2011-01-10 Vladimir Serbinenko + + Submenu default support. + + * grub-core/normal/menu.c (grub_menu_execute_entry): New parameter + auto_boot. All users updated. + Declared static. + Handle chosen and default with submenus. + (grub_menu_execute_with_fallback): Declared static. + Don't notify failure if autobooted. Upper level does it. + (menuentry_eq): New function. + (get_entry_number): Use menuentry_eq. + (show_menu): New parameter "autobooted". All users updated. + (grub_show_menu): Likewise. + * include/grub/normal.h (grub_show_menu): Likewise. + * include/grub/menu.h (grub_menu_execute_entry): Removed. + (grub_menu_execute_with_fallback): Likewise. + +2011-01-10 Vladimir Serbinenko + + * util/grub-mklayout.c (usage): Update help text. + +2011-01-10 Vladimir Serbinenko + + * grub-core/commands/legacycfg.c (legacy_file): Trim the line. + +2011-01-10 Vladimir Serbinenko + + * util/grub-menulst2cfg.c (main): Trim the line. + +2011-01-10 Vladimir Serbinenko + + * grub-core/kern/i386/pc/init.c (grub_get_conv_memsize): Removed. + (grub_machine_init): Don't check amount of low memory as reportedly + INT 12h can be broken and if low memory is too low we wouldn't have + gotten into grub_machine_init anyway. + +2011-01-10 Vladimir Serbinenko + + * grub-core/kern/i386/pc/mmap.c (grub_get_conv_memsize): New function. + (grub_machine_mmap_iterate): Take low memory into account + +2011-01-10 Vladimir Serbinenko + + * grub-core/fs/btrfs.c (grub_btrfs_mount): Transform out of range into + badfs. + Reported by: TiCPU. + +2011-01-10 Vladimir Serbinenko + + * grub-core/disk/raid.c (insert_array): Display RAID name in duplicate + members errors. + +2011-01-09 Grégoire Sutre + + * util/grub.d/10_netbsd.in (netbsd_load_fs_module): New function. + (netbsd_entry): Use netbsd_load_fs_module() to load filesystem module. + +2011-01-09 Grégoire Sutre + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Handle + openbsd and netbsd types being in part_bsd module. + +2011-01-08 Vladimir Serbinenko + + * config.h.in (_LARGEFILE_SOURCE): Add missing define. + (_FILE_OFFSET_BITS): Likewise. + Reported by: Seth Goldberg. + +2011-01-08 Grégoire Sutre + + * configure.ac: Check for libdevmapper header. + +2011-01-08 Vladimir Serbinenko + + * grub-core/fs/zfs/zfs.c (dmu_read): Use void * for some pointers to + avoid aliasing. + (fzap_lookup): Likewise. + (dnode_get): Likewise. + (make_mdn): Likewise. + (zfs_mount): Likewise. + (fzap_iterate): Use temporary pointer to avoid aliasing. + (grub_zfs_read): Likewise. + * grub-core/loader/i386/xnu.c (grub_xnu_boot): Likewise. + * grub-core/loader/xnu.c (grub_cmd_xnu_kernel): Use void * for some + pointers to avoid aliasing. + (grub_cmd_xnu_kernel64): Likewise. + (grub_xnu_load_driver): Likewise. + +2011-01-08 Vladimir Serbinenko + + * grub-core/commands/terminal.c (grub_cmd_terminal_input): Silence + aliasing warning. + (grub_cmd_terminal_output): Likewise. + Reported and tested by: Grégoire Sutre. + +2011-01-08 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c (grub_keyboard_getkey): Silence spurious + warning. + Reported and tested by: Grégoire Sutre. + +2011-01-08 Vladimir Serbinenko + + * configure.ac: Do CPU substitution even if it's specified explicitly. + Reported and tested by: Alain Greppin. + +2011-01-08 Vladimir Serbinenko + + * grub-core/Makefile.am (rs_decoder.S): Force compilation with -Os. + Reported and tested by: Alain Greppin. + +2011-01-08 Vladimir Serbinenko + + Satisfy some bison versions need for inttypes.h. + + * grub-core/lib/posix_wrap/inttypes.h: New file. + * grub-core/lib/posix_wrap/sys/types.h (int8_t): New type. + (int16_t): Likewise. + (int32_t): Likewise. + (int64_t): Likewise. + Reported and tested by: Alain Greppin. + +2011-01-08 Vladimir Serbinenko + + * grub-core/loader/i386/bsdXX.c (grub_netbsd_load_elf_meta): + Silence spurious warning. + Reported and tested by: Alain Greppin. + +2011-01-07 Szymon Janc + + * docs/grub.texi (Support automatic decompression): Update with xz + decompression support. + +2011-01-07 Szymon Janc + + Improve loaders' kernel command line handling. + + * grub-core/lib/cmdline.c: New file. + * include/grub/lib/cmdline.h: Likewise. + * grub-core/loader/i386/linux.c (grub_cmd_linux): Use + grub_create_loader_cmdline to create kernel command line. + * grub-core/loader/i386/pc/linux.c (grub_cmd_linux): Likewise. + * grub-core/loader/powerpc/ieee1275/linux.c (grub_cmd_linux): Likewise. + * grub-core/loader/sparc64/ieee1275/linux.c (grub_cmd_linux): Likewise. + * grub-core/Makefile.core.def (linux16): Add lib/cmdline.c on i386_pc. + (linux): Add lib/cmdline.c on common. + +2011-01-07 Vladimir Serbinenko + + * grub-core/fs/xfs.c (grub_xfs_iterate_dir): Take into account that + inopos might be unaligned. + +2011-01-07 Vladimir Serbinenko + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Add missing + endian transformations. + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Likewise. + Based on report by: Doug Nazar. + +2011-01-07 Doug Nazar + + * grub-core/disk/raid5_recover.c (grub_raid5_recover): Add missing + array->members[i].start_sector. + * grub-core/disk/raid6_recover.c (grub_raid6_recover): Likewise. + +2011-01-07 Vladimir Serbinenko + + * util/grub-setup.c (setup): Handle NetBSD and OpenBSD disklabels. + Reported and tested by: Grégoire Sutre. + +2011-01-06 Colin Watson + + * tests/util/grub-shell.in: Set serial terminfo type to `dumb', to + avoid causing test failures by clearing the screen. + +2011-01-06 Colin Watson + + * grub-core/kern/emu/getroot.c (find_root_device_from_mountinfo): + Fix prefix check to handle the case where dir ends with a slash + (most significantly, "/" itself). + Reported by: Michael Vogt. + +2011-01-05 Vladimir Serbinenko + + Run terminfo_cls on initing terminfo output to clear the screen and + move the cursor to (0,0). + + * grub-core/term/ieee1275/ofconsole.c (grub_ofconsole_init_output): + Call grub_terminfo_output_init. + * grub-core/term/serial.c (grub_serial_term_output): Set .init. + * grub-core/term/terminfo.c (grub_terminfo_output_init): New function. + * include/grub/terminfo.h (grub_terminfo_output_init): New declaration. + +2011-01-05 Vladimir Serbinenko + + * util/grub-install.in: Determine ofpathname, nvsetenv and efibootmgr + only when needed. + +2011-01-05 Vladimir Serbinenko + + * grub-core/term/terminfo.c (grub_terminfo_readkey): Handle keys with + CTRL. + +2011-01-05 Vladimir Serbinenko + + The E820 type 5 is BADRAM, not EXEC_CODE. + + * grub-core/loader/i386/bsd.c (GRUB_E820_EXEC_CODE): Removed. + (GRUB_E820_BADRAM): New define. + * grub-core/loader/i386/linux.c (grub_linux_boot): Translate code + into reserved. Propagate BADRAM. + * grub-core/loader/i386/bsd.c (GRUB_E820_EXEC_CODE): Removed. + (GRUB_E820_BADRAM): New define. + +2011-01-04 Vladimir Serbinenko + + * grub-core/lib/efi/relocator.c (grub_relocator_firmware_fill_events): + Ignore the memory post-4G. + (grub_relocator_firmware_alloc_region): Additional debug statement. + +2011-01-04 Vladimir Serbinenko + + * grub-core/kern/emu/getroot.c (grub_util_get_grub_dev): Check md/%s + names. + Reported by: David Pravec. + +2011-01-04 Vladimir Serbinenko + + * grub-core/disk/i386/pc/biosdisk.c (GRUB_MOD_INIT): Workaround buggy + BIOSes. + +2011-01-04 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (grub_reed_solomon_add_redundancy): + Prevent overflow. + (grub_reed_solomon_recover): Likewise. + +2011-01-04 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (main) [TEST]: Reactivate normal test. + +2011-01-04 Vladimir Serbinenko + + * grub-core/lib/reed_solomon.c (scratch) [! STANDALONE]: Remove leftover + variable. + +2011-01-04 Colin Watson + + * grub-core/commands/legacycfg.c (GRUB_MOD_INIT): Fix typo in + descriptions of extract_legacy_entries_source and + extract_legacy_entries_configfile. + Reported by: Seung Soo, Ha. + +2011-01-03 Colin Watson + + * grub-core/bus/pci.c (grub_pci_iterate): Skip remaining functions + on devices that do not implement function 0. + +2011-01-03 Dave Vasilevsky + + * grub-core/fs/hfsplus.c: Make parent unsigned. + (grub_hfsplus_cmp_catkey): Don't compare using subtraction, it + overflows. + (grub_hfsplus_cmp_extkey): Likewise + +2011-01-03 Vladimir Serbinenko + + * util/grub-install.in: Correctly use bootloader_id and not + GRUB_DISTRIBUTOR on efibootmgr line. + +2011-01-03 Vladimir Serbinenko + + * util/grub-mkfont.c (main): Report errors in FT_New_Face. + +2010-12-31 Ian Campbell + + * util/grub.d/20_linux_xen.in (linux_entry): Correctly capitalize + Xen and reorder menu item wording to make it clearer that this entry + will launch Xen. Print separate messages when loading Xen and + Linux. + +2010-12-31 Vladimir Serbinenko + + * grub-core/partmap/amiga.c (GRUB_AMIGA_PART_MAGIC): New define. + (amiga_partition_map_iterate): Check "PART" magic to avoid a very long + loop in case of incorrect amiga partmap. + +2010-12-31 Vladimir Serbinenko + + * grub-core/partmap/amiga.c (GRUB_AMIGA_RDSK_MAGIC): New define. + (amiga_partition_map_iterate): Use grub_memcmp instead of grub_strcmp. + Reported by:EHeM. + +2010-12-31 Vladimir Serbinenko + + * grub-core/loader/i386/bsdXX.c (grub_openbsd_find_ramdisk): Silence + spurious warning. + Reported by: crocket + +2010-12-27 Vladimir Serbinenko + + * grub-core/loader/xnu.c (grub_cmd_xnu_kernel) [! GRUB_MACHINE_EFI]: + Preload EFIemu. + (grub_cmd_xnu_kernel64) [! GRUB_MACHINE_EFI]: Likewise. + +2010-12-27 Vladimir Serbinenko + + * grub-core/loader/xnu.c (grub_cmd_xnu_kext): Abort if no kernel + is loaded + (grub_cmd_xnu_kextdir): Likewise. + (grub_cmd_xnu_splash): Likewise. + +2010-12-27 Vladimir Serbinenko + + Avoid using Reed-Solomon with 0 redundancy. + + * grub-core/kern/i386/pc/startup.S: Remove 0-data check. + * grub-core/lib/reed_solomon.c (decode_block): Do not proceed on 0 data + or 0 redundancy. + (grub_reed_solomon_add_redundancy): Do not proceed with 0 redundancy. + (grub_reed_solomon_recover): Likewise. + +2010-12-27 Vladimir Serbinenko + + Don't use disk subsystem in freebsd_boot. + + * grub-core/loader/i386/bsd.c (freebsd_bootdev): New variable. + (freebsd_biosdev): Likewise. + (grub_freebsd_boot): Use freebsd_bootdev and freebsd_biosdev. + (grub_cmd_freebsd): Set freebsd_bootdev and freebsd_biosdev. + +2010-12-26 Vladimir Serbinenko + + Handling of files of unknown size is currently limited. They can't be + used e.g. for initrd or modules. Moreover gzip handling of not + easily seekable files is buggy. Disable unknown file size for now. May + be inefficient but works. + + * grub-core/io/gzio.c (test_header): Always retrieve the file size. + * grub-core/io/xzio.c (grub_xzio_open): Likewise. + +2010-12-25 Mirko Parthey + + * grub-core/boot/i386/pc/boot.S: Fix %es:%bx pointing to nowhere on + floppy probe. + +2010-12-25 Jeroen Dekkers + + * grub-core/disk/raid.c (insert_array): Don't add spurious members. + +2010-12-25 Shea Levy + + * grub-core/genmod.sh.in: Use @OBJCOPY@ rather than objcopy. + +2010-12-25 Vladimir Serbinenko + + * util/grub.d/30_os-prober.in: Don't emit drivemap directive for + Windows Server 2008. + Reported by: Devin Giddings. + +2010-12-25 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c (grub_acpi_halt): Sleep for 1.5 before + writing an error message because of async power management. + * grub-core/kern/mips/yeeloong/init.c (grub_halt): Likewise. + (grub_reboot): Likewise. + +2010-12-23 Jordan Uggla + + * tests/util/grub-shell.in: Suppress "ACPI shutdown failed" error to + keep unit tests from failing when they shouldn't. + +2010-12-21 Colin Watson + + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_RAW_SIZE): The + previous patch increased the size of the RS code by 20 bytes (at + least with gcc-4.4), so increase this by 20 bytes to match. + (GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_PART): Likewise. + +2010-12-21 Colin Watson + + * grub-core/lib/reed_solomon.c (gauss_solve): Fix size of standalone + scratch area. Make sure to initialise chosen in standalone mode as + well as non-standalone. + Reported by: Robert Hooker and Andy Whitcroft. + Tested by: Andy Whitcroft. + +2010-12-21 Colin Watson + + * grub-core/commands/echo.c (grub_cmd_echo): Make UTF-8-clean by + constructing a new unescaped string and passing it to grub_xputs in + one go, rather than passing characters to grub_printf one at a time. + +2010-12-21 Colin Watson + + * grub-core/fs/udf.c (read_string): Pacify GCC warning by + initialising utf16. + +2010-12-21 Colin Watson + + * util/grub-mkconfig_lib.in (gettext_quoted): Add clarifying + comment. Add an extra layer of quotation, requiring the output of + this function to be used in a printf format string. + (gettext_printf): New function. + * util/grub.d/10_hurd.in: Use gettext_printf where appropriate. + Extract translatable strings from here-documents and use a temporary + variable instead, so that xgettext can find them. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + + * po/grub.d.sed: New file. + * po/Makefile.in.in ($(DOMAIN).pot-update): Extract gettext_printf + arguments. Set c-format flags on all strings extracted from + util/grub.d/ (xgettext refuses to include these itself for strings + it extracted from a shell file, but these really are c-format). + +2010-12-20 Vladimir Serbinenko + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_add_module): + Avoid next pointing to nowhere. + +2010-12-19 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_mount): Read data->bblock.rootblock + rather than assuming than rootblock is exactly in the middle. + (grub_affs_label): Likewise. + +2010-12-19 Vladimir Serbinenko + + * grub-core/fs/affs.c (grub_affs_fs) [GRUB_UTIL]: Explicitly set + reserved_first_sector to 0. + * grub-core/fs/cpio.c (grub_cpio_fs) [GRUB_UTIL]: Likewise. + * grub-core/fs/sfs.c (grub_sfs_fs) [GRUB_UTIL]: Likewise. + * grub-core/fs/xfs.c (grub_xfs_fs) [GRUB_UTIL]: Likewise. + +2010-12-19 Vladimir Serbinenko + + Fix handling of UTF-16 UDF labels. + + * grub-core/fs/udf.c (grub_udf_iterate_dir): Move string-parsing part + (read_string): .. here. + (grub_udf_label): Use read_string. + +2010-12-19 BVK Chaitanya + + * grub-core/normal/menu_entry.c (run): Execute commands from menu + editor under argument scope. + Reported by: Jordan Uggla + +2010-12-18 Vladimir Serbinenko + + * util/grub-mkfont.c (main): Handle errors from FT_Set_Pixel_Sizes. + +2010-12-18 Colin Watson + + * grub-core/normal/term.c (print_more): Make \r or \n scroll one + line, and other keys scroll an entire page (previous handling was + for \r and \n to scroll a page and other keys to scroll two lines). + +2010-12-18 Vladimir Serbinenko + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): + Set ptrdest to correct get_physical_target_address rather than + incorrect get_virtual_current_address. + +2010-12-18 kashyap garimella + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_load): Use + correct cat to grub_uint8_t * rather than grub_uint32_t *. + +2010-12-10 Colin Watson + + * .bzrignore: Ignore grub-core/rs_decoder.S. + +2010-12-10 Colin Watson + + * grub-core/gettext/gettext.c (grub_gettext_init_ext): Factor out + .mo/.mo.gz opening sequence to ... + (grub_mofile_open_lang): ... here. + (grub_gettext_init_ext): If opening ll_CC fails, try ll. + * util/grub.d/00_header.in (grub_lang): Include country part of + locale. + Reported by: Mario Limonciello. + +2010-12-09 Robert Millan + + * NEWS: Document addition of ZFS support. + +2010-12-04 Colin Watson + + * grub-core/kern/i386/pc/startup.S (grub_console_getkey): Use `>> 1' + rather than `/ 2', as the latter requires -Wa,--divide which would + require bumping our minimum binutils version. + +2010-12-03 BVK Chaitanya + + * util/grub-script-check.c (main): Print script line number on + error. + +2010-12-01 Robert Millan + + * grub-core/fs/zfs/zfs.c: New file. + * grub-core/fs/zfs/zfs_fletcher.c: Likewise. + * grub-core/fs/zfs/zfs_lzjb.c: Likewise. + * grub-core/fs/zfs/zfs_sha256.c: Likewise. + * grub-core/fs/zfs/zfsinfo.c: Likewise. + + * include/grub/zfs/dmu.h: Likewise. + * include/grub/zfs/dmu_objset.h: Likewise. + * include/grub/zfs/dnode.h: Likewise. + * include/grub/zfs/dsl_dataset.h: Likewise. + * include/grub/zfs/dsl_dir.h: Likewise. + * include/grub/zfs/sa_impl.h: Likewise. + * include/grub/zfs/spa.h: Likewise. + * include/grub/zfs/uberblock_impl.h: Likewise. + * include/grub/zfs/vdev_impl.h: Likewise. + * include/grub/zfs/zap_impl.h: Likewise. + * include/grub/zfs/zap_leaf.h: Likewise. + * include/grub/zfs/zfs.h: Likewise. + * include/grub/zfs/zfs_acl.h: Likewise. + * include/grub/zfs/zfs_znode.h: Likewise. + * include/grub/zfs/zil.h: Likewise. + * include/grub/zfs/zio.h: Likewise. + * include/grub/zfs/zio_checksum.h: Likewise. + + * Makefile.util.def: Build ZFS into libgrubmods. + * grub-core/Makefile.core.def: Build zfs.mod. + +2010-11-30 Szymon Janc + + * grub-core/commands/regexp.c (grub_cmd_regexp): Remove unused + variable. + * grub-core/commands/wildcard.c (match_files): Likewise. + +2010-11-30 Robert Millan + + * grub-core/loader/i386/bsd.c + (grub_cmd_freebsd_loadenv, grub_cmd_freebsd_module_elf): Check + whether kernel is loaded using grub_loader_is_loaded(), rather + than `kernel_type', which may still be `KERNEL_TYPE_NONE' under + certain error conditions. + +2010-11-30 Robert Millan + + * grub-core/commands/echo.c: Include `'. + (grub_cmd_echo): Call grub_refresh() after printing a message. + +2010-11-26 Vladimir Serbinenko + + Avoid using tricks for initialising endian variables. + + * grub-core/partmap/gpt.c (grub_gpt_partition_type_bios_boot): + Make const. + (GRUB_MOD_INIT): Don't byte-swap. + * include/grub/gpt_partition.h (GRUB_GPT_PARTITION_TYPE_BIOS_BOOT): + Use grub_cpu_to_le16_compile_time and grub_cpu_to_le32_compile_time. + * include/grub/types.h (grub_swap_bytes16_compile_time): New macro. + (grub_swap_bytes32_compile_time): Likewise. + (grub_cpu_to_le32_compile_time): Likewise. + (grub_cpu_to_le16_compile_time): Likewise. + +2010-11-26 Vladimir Serbinenko + + * util/grub-setup.c (setup): Stop recommending --force. People who + understand the dangers of blocklists are able to find this option + anyway and the ones who don't shouldn't use it anyway. + +2010-11-26 Robert Millan + + * grub-core/term/i386/pc/vga_text.c (VGA_TEXT_SCREEN): Beautify. + Update all users. + +2010-11-26 Colin Watson + + Fix LVM-on-RAID probing. + + * util/grub-probe.c (probe): Remember which disk was detected as + RAID (perhaps an LVM physical volume). Use that disk's raidname + rather than that of the top-level disk. + +2010-11-25 BVK Chaitanya + + Fix cmdline argument quotes for setparams command of menuentry + definitions. + + * grub-core/commands/menuentry.c (setparams_prefix): Use single + quotes for arguments. + * grub-core/lib/legacy_parse.c (grub_legacy_escape): Use + grub_strchrsub function instead. + + * include/grub/misc.h (grub_strchrsub): New function. + +2010-11-24 Colin Watson + + * util/deviceiter.c (grub_util_iterate_devices): Save a bit of + effort by skipping "." and ".." entries up-front. + Suggested by: Michael Lazarev. + +2010-11-24 Colin Watson + + * grub-core/Makefile.core.def (xz_decompress): Move -lgcc from + ldflags to ldadd, to fix link line ordering. + (none_decompress): Likewise. + +2010-11-24 Colin Watson + + * grub-core/Makefile.core.def (kernel): Add kern/emu/cache.S for emu + platforms. + (grub-emu-lite): Remove kern/emu/cache.S. + +2010-11-23 Colin Watson + + * util/deviceiter.c (compare_devices): If the by-id link for a + device couldn't be resolved, fall back to sorting by the by-id link + rather than segfaulting. + Reported and tested by: Daniel Mierswa. + +2010-11-23 Colin Watson + + * Makefile.util.def (grub-menulst2cfg): List libraries in ldadd, not + ldflags, to fix link line ordering. + +2010-11-23 Colin Watson + + * grub-core/Makefile.am (gentrigtables): Put -lm after $<; some + linkers are picky about this. + +2010-11-23 Colin Watson + + * grub-core/Makefile.am (command.lst): Adjust sed expression + ordering so that extended and priority commands aren't treated as + ordinary commands. + +2010-11-23 Colin Watson + + * include/grub/gpt_partition.h (GRUB_GPT_PARTITION_TYPE_BIOS_BOOT): + Remove byte-swapping function calls, which are not valid in + structure initialisers. + * grub-core/partmap/gpt.c (grub_gpt_partition_type_bios_boot): Make + non-const. + (GRUB_MOD_INIT): Byte-swap data1, data2, and data3 fields of + grub_gpt_partition_type_bios_boot. + +2010-11-22 Colin Watson + + Fix test program build on GNU/kFreeBSD. + + * Makefile.util.def (example_unit_test): Add `$(LIBZFS) + $(LIBNVPAIR)' library dependencies. + +2010-11-22 Colin Watson + + * util/grub-install.in: Fix parsing of --grub-mkrelpath= option. + +2010-11-22 Colin Watson + + * util/grub-install.in: Remove excessive quoting that broke + installations to RAID devices. + +2010-11-19 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_cmd_linux): Pass correctly the + bootloader version instead of 0. + +2010-11-19 Vladimir Serbinenko + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Fix spurious + warning. + +2010-11-19 Vladimir Serbinenko + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Don't try to + retrieve the metadat sector if size isn't known. + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Likewise. + +2010-11-18 Robert Millan + + * grub-core/fs/btrfs.c (grub_btrfs_mount): Replace grub_strncmp() + with grub_memcmp(). + +2010-11-18 Vladimir Serbinenko + + * grub-core/normal/menu_entry.c (print_up): Fix displacement of up + arrow. + Reported by: Jordan Uggla. + +2010-11-16 Vladimir Serbinenko + + Make better UTF compliant. + + * grub-core/normal/charset.c (grub_utf8_to_utf16): Handle 6- and 7-byte + sequences as incorrect. + (grub_is_valid_utf8): Likewise. + (grub_utf8_to_ucs4): Likewise. + (grub_ucs4_to_utf8): Handle codepoints outside of BMP. + (grub_ucs4_to_utf8_alloc): Likewise. + * include/grub/charset.h (grub_utf16_to_utf8): Likewise. + +2010-11-16 Vladimir Serbinenko + + Make legacy_source behave like source. + + * grub-core/commands/legacycfg.c (legacy_file): Don't call + grub_show_menu. + (grub_cmd_legacy_source): Call grub_show_menu if needed. + +2010-11-16 Colin Watson + + * conf/Makefile.common (CFLAGS_GNULIB): Add -Wno-unused-parameter. + (-Wunused implies -Wunused-parameter, but not vice versa). + +2010-11-16 Colin Watson + + * configure.ac: Make error messages less confusing by testing for + -Wtrampolines rather than -Wno-trampolines (since -Wno-* is always + accepted, but produces a diagnostic if something else is wrong). + +2010-11-15 Vladimir Serbinenko + + * grub-core/term/at_keyboard.c (grub_keyboard_controller_read) + [GRUB_MACHINE_MIPS_YEELOONG || GRUB_MACHINE_QEMU]: ifdef-ed out + (now unused). + (grub_keyboard_controller_init) + [GRUB_MACHINE_MIPS_YEELOONG || GRUB_MACHINE_QEMU]: Don't attempt to + read the initial state since controller isn't inited yet. + +2010-11-15 Vladimir Serbinenko + + * grub-core/lib/relocator.c (malloc_in_range): Take into account that + allocate_regbeg may need to create new chunk header. + +2010-11-14 Vladimir Serbinenko + + Fix quoting in legacy parser. + + * grub-core/lib/legacy_parse.c (grub_legacy_escape): Correctly handle + single quotes. + (grub_legacy_parse): Likewise. + Reported by: Jordan Uggla. + Tested by: Jordan Uggla. + +2010-11-14 Vladimir Serbinenko + + Don't add -lgcc on i386 and x86_64. + + * configure.ac (LIBS): Don't add -lgcc on i386 and x86_64. + * conf/Makefile.common (LDADD_KERNEL): Likewise. + * grub-core/Makefile.core.def (kernel): Use LDADD_KERNEL. + +2010-11-14 Vladimir Serbinenko + + * configure.ac: Add -Wno-trampolines when supported. + +2010-11-14 Modestas Vainius + + * grub-core/kern/emu/getroot.c (grub_util_is_dmraid): Recognise ddf1_ + fakeraid. + +2010-11-14 Giuseppe Caizzone + + Add generic logical block size support for UDF. + + * grub-core/fs/udf.c (GRUB_UDF_LOG2_BLKSIZE): Removed. + (GRUB_UDF_BLKSZ): Removed. + (struct grub_udf_data): New field "lbshift" to hold the logical block + size of the file system in log2 format. All users updated. + (sblocklist): Change type to unsigned. + (grub_udf_mount): Change type of "sblklist" to unsigned. + Move AVDP search before VRS recognition, because the latter requires + knowledge of the logical block size, which is detected during the + former. + Detect and validate logical block size during AVDP search, adding + support for block sizes 512, 1024 and 4096. + Make VRS recognition independent of block size. + +2010-11-14 Giuseppe Caizzone + + Properly handle deleted files on UDF. + + * grub-core/fs/udf.c (grub_udf_iterate_dir): Skip directory entries + whose "characteristics" field has the bit GRUB_UDF_FID_CHAR_DELETED + set. + +2010-11-14 Giuseppe Caizzone + + Support reading files larger than 2 GiB. + + * grub-core/fs/udf.c (grub_udf_iterate_dir): Change type of variable + "offset" to grub_off_t. + (grub_udf_read_file): Likewise for parameter "pos". + +2010-11-14 Vladimir Serbinenko + + * docs/grub.texi (Changes from GRUB Legacy): Note when save_env is + unavailable. + (Simple configuration): Refer to Changes from GRUB Legacy about + save_env availability. + +2010-11-14 Vladimir Serbinenko + + * util/grub-install.in: Ignore empty partition table detection + instead of trying to include part_ module. + +2010-11-14 Vladimir Serbinenko + + * grub-core/disk/lvm.c (GRUB_MOD_FINI): Reset the vg_list. Fixes + LVM on RAID support. + +2010-11-14 Vladimir Serbinenko + + Properly define WORDS_BIGENDIAN in wrapped environments. + + * grub-core/lib/libgcrypt_wrap/cipher_wrap.h (WORDS_BIGENDIAN): New + definition. + * grub-core/lib/posix_wrap/sys/types.h (WORDS_BIGENDIAN): Likewise. + + Reported by: Manoel Rebelo Abranches. + Tested by: Manoel Rebelo Abranches. + +2010-11-13 Vladimir Serbinenko + + * util/grub-mkconfig.in: Fix quoting. + +2010-11-13 Vladimir Serbinenko + + Support big ext2 files. + + * grub-core/fs/ext2.c (grub_ext2_inode): Rename dir_acl to size_high. + (grub_ext2_read_block): Support triple indirect blocks. + (grub_ext2_read_file): Use 64-bit types and read size_high. + (grub_ext2_open): Read size_high. + Reported by: Ximin Luo. + Tested by: Manoel Rebelo Abranches. + +2010-11-13 Vladimir Serbinenko + + * util/grub-install.in: Handle filenames containing spaces. + Reported by: Jordan Uggla. + Tested by: Jordan Uggla. + +2010-11-13 Vladimir Serbinenko + + * util/grub-mkconfig.in (grub_script_check): New variable. + Use grub_script_check instead of grub-script-check. + Reported by: Barry Jackson. + +2010-11-13 Vladimir Serbinenko + + * docs/grub.texi (menu): Correct the order. + Reported by: D. Hugh Redelmeier. + +2010-11-12 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S (multiboot_trampoline): Add missing + jump. + +2010-11-08 Manoel Rebelo Abranches + + * include/grub/elfload.h (grub_elf32_size): New parameter. + All users updated. + Return maximum segments alignment. + (grub_elf64_size): Likewise. + * kern/elf.c (grub_elf32_size): New parameter. All users updated. + Return maximum segments alignment. + (grub_elf64_size): Likewise. + * grub-core/loader/powerpc/ieee1275/linux.c: + (grub_linux_claimmap_iterate): New function. Uses the + "available" property in the "memory" node for memory allocation + for kernel in the PowerPC loader. + (grub_linux_load32): Correctly find linux entry point offset. + (grub_linux_load64): Likewise. + +2010-11-07 Robert Millan + + On mips-yeeloong, build with -march=loongson2f when this flag is + available (GCC >= 4.4). + * conf/Makefile.common [COND_mips_yeeloong] (CFLAGS_PLATFORM): Remove + `-march=mips3'. + * configure.ac: For mips-yeeloong, add -march=loongson2f if available, + or otherwise add -march=mips3. + +2010-11-07 BVK Chaitanya + + Suppress shell expansion on echo '*' and echo "*" like cases. + Reported by: Jordan Uggla. + + * grub-core/script/execute.c (grub_script_arglist_to_argv): Escape + string arguments before shell expansion. + * tests/grub_cmd_echo.in: New testcases. + +2010-11-07 Robert Millan + + * conf/mips-qemu-mips.rmk: Remove stale file from previous + transition. + +2010-11-07 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c + (convert_system_partition_to_system_disk): Handle devices like "sdaa1". + +2010-11-06 Vladimir Serbinenko + + * include/grub/emu/misc.h: Don't include grub/util/libzfs.h. + * include/grub/emu/misc.h (grub_get_libzfs_handle): Move from here ... + * include/grub/util/libzfs.h (grub_get_libzfs_handle): ... here. + +2010-11-06 Vladimir Serbinenko + + * grub-core/fs/ntfs.c (grub_ntfs_uuid): Make uppercase. + +2010-11-06 Vladimir Serbinenko + + * util/grub-install.in: Replace useless recomendation to pass + --modules with a recomendation to report a bug. + +2010-11-06 Vladimir Serbinenko + + Properly register serial terminfo. + Reported by: Jordan Uggla + + * grub-core/term/serial.c (grub_serial_terminfo_input_template): New + const. + (grub_serial_terminfo_output_template): Likewise. + (grub_cmd_serial): Register "serial" with terminfo. + (GRUB_MOD_INIT(serial)): Fill grub_serial_terminfo_input and + grub_serial_terminfo_output. + +2010-11-05 Robert Millan + + * util/grub-mkconfig.in: Remove gfxterm.mod probe (no longer + needed). + +2010-11-05 Robert Millan + + On Yeeloong, pass machine type information to Linux. + + * grub-core/loader/mips/linux.c [GRUB_MACHINE_MIPS_YEELOONG] + (LOONGSON_MACHTYPE): New macro, set to + "machtype=lemote-yeeloong-2f-8.9inches". + [LOONGSON_MACHTYPE] (grub_cmd_linux): Pass LOONGSON_MACHTYPE as + additional argument to Linux. + +2010-11-04 Robert Millan + + * util/deviceiter.c (grub_util_iterate_devices): Increase SCSI + limit to 48 (to cope with Sun Fire X4500), and IDE limit to 96 + (its SATA disks are detected as slaveless IDE master drives on + kFreeBSD). + Reported by Carsten Aulbert. + +2010-11-02 Colin Watson + + * util/bin2h.c (main): Fix spelling error in generated output. + +2010-11-01 Grégoire Sutre + + * grub-core/partmap/bsdlabel.c (iterate_real): Fix an integer overflow. + +2010-11-01 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (grub_cmd_linux): Autoload vbe.mod if + vga= option is supplied. + +2010-11-01 Vladimir Serbinenko + + * util/grub.d/10_hurd.in: Don't call savedefault on recovery entries. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + +2010-11-01 Vladimir Serbinenko + + * grub-core/lib/arg.c (grub_arg_parse): Avoid interpreting direct + argument as an argument to no-argument option. + +2010-11-01 Vladimir Serbinenko + + * util/grub.d/10_linux.in: Add missing load_video with explicit + GRUB_GFXPAYLOAD_LINUX. + +2010-11-01 Vladimir Serbinenko + + * Makefile.am (libgrub.pp): Propagate the libgrub.a split. + +2010-11-01 Vladimir Serbinenko + + * grub-core/disk/mdraid1x_linux.c (grub_mdraid_detect): Do not put + elements with invlid index. + * grub-core/disk/mdraid_linux.c (grub_mdraid_detect): Likewise. + * grub-core/disk/raid.c (insert_array): Automatically reallocate + members. + * include/grub/raid.h (grub_raid_member): New struct. + (grub_raid_array): Transform devices and start_sector into usage of + grub_raid_member. All users updated + (allocated_devs): New member. + +2010-11-01 Vladimir Serbinenko + + * docs/man/grub-set-default.h2m: Clarify that only saved default entry + is modified + +2010-10-29 BVK Chaitanya + + NetBSD build fix for getline function conflict from gnulib. + + * Makefile.util.def (libgrubkern.a): New library for grub kernel + components that depend on gnulib headers. + (libgrubmods.a): Renamed from earlier libgrub.a. + * conf/Makefile.common: Remove gnulib from *_LIBRARY flags. + +2010-10-26 Vladimir Serbinenko + + * util/grub-setup.c (setup): Refuse to do a cross-disk embeddingless + install rather than creating a broken install. + +2010-10-26 Vladimir Serbinenko + + * util/grub-setup.c (argp): Remove misleading example of installing to + a partition. + +2010-10-26 Vladimir Serbinenko + + * util/grub-setup.c (setup): Clarify the error message. + +2010-10-26 Vladimir Serbinenko + + * include/grub/types.h (grub_target_off_t): Removed no longer used type. + +2010-10-23 Vladimir Serbinenko + + * grub-core/kern/emu/misc.c + (grub_make_system_path_relative_to_its_root) + [HAVE_LIBZFS && HAVE_LIBNVPAIR]: Fix mountpoint return on ZFS. + +2010-10-23 Vladimir Serbinenko + + * grub-core/kern/emu/misc.c + (grub_make_system_path_relative_to_its_root): Revert r2882. + +2010-10-22 Vladimir Serbinenko + + * grub-core/lib/relocator.c (grub_relocator_subchunk): Remove now + useless field head. All users updated. + (free_subchunk): Correct handling of IN_REGION subchunk. + +2010-10-22 Colin Watson + + * docs/grub.texi (Installing GRUB using grub-install): Proofread. + (Supported kernels): Likewise. + +2010-10-18 Grégoire Sutre + + Make mktemp invocations portable. + + * grub-core/genmod.sh.in: Use mktemp with an explicit template, and + exit if mktemp fails. + * tests/grub_script_blockarg.in: Likewise. + * tests/partmap_test.in: Likewise. + * tests/util/grub-shell-tester.in: Likewise. + * tests/util/grub-shell.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + * Makefile.am: Likewise, and chain shell commands with `&&' + instead of ';'. + * util/grub-mkrescue.in: Use the same explicit template as above, and + exit if mktemp fails. + +2010-10-18 BVK Chaitanya + + * util/grub.d/10_linux.in: Fix built-in initramfs image mode for + Linux kernel, reported by Dennis Schridde. + +2010-10-17 Szymon Janc + + * grub-core/normal/auth.c (grub_auth_check_authentication): + Set-but-not-used variable removed. + +2010-10-17 Vladimir Serbinenko + + * docs/grub.texi (GNU/Linux): Document APM unavailability with + 32-bit linux protocol. + +2010-10-17 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S (grub_console_setcursor): Check + cursor shape for sanity. + +2010-10-17 Vladimir Serbinenko + + * docs/grub.texi (Installation): Document buggy BIOS install. + +2010-10-17 Vladimir Serbinenko + + * docs/grub.texi (Installation): Indent. + +2010-10-17 Vladimir Serbinenko + + * util/grub-setup.c (setup): New parameter allow_floppy. + (arguments): New member allow_floppy. + (argp_parser): Handle --allow-floppy. + (main): Pass allow_floppy. + * util/grub-install.in: New option --allow-floppy passed though to + grub-setup. + +2010-10-17 Vladimir Serbinenko + + * util/grub-install.in: Handle partitionless disks. + +2010-10-17 Vladimir Serbinenko + + * util/grub-setup.c (setup): Don't clean blocklists before readability + verfification. + +2010-10-16 Vladimir Serbinenko + + * docs/grub.texi (Installation): Document embedding zone. Remove + obsolete grub-install example. + +2010-10-16 Szymon Janc + + * grub-core/commands/legacycfg.c (grub_cmd_legacy_kernel): + Set-but-not-used variable ifdef'ed. + * grub-core/lib/legacy_parse.c (grub_legacy_parse): Likewise. + * grub-core/bus/usb/ohci.c (grub_ohci_pci_iter): Set-but-not-used + variable removed. + * grub-core/disk/lvm.c (grub_lvm_scan_device): Likewise. + * grub-core/fs/jfs.c (grub_jfs_find_file): Likewise. + * grub-core/fs/minix.c (grub_minix_dir): Likewise. + * grub-core/fs/sfs.c (grub_sfs_read_extent): Likewise. + * grub-core/fs/ufs.c (grub_ufs_dir): Likewise. + * grub-core/gfxmenu/gui_list.c (grub_gui_list_new): Likewise. + * grub-core/gfxmenu/view.c (redraw_menu_visit): Likewise. + * grub-core/gfxmenu/widget-box.c (draw): Likewise. + * grub-core/lib/relocator.c (malloc_in_range): Likewise. + * grub-core/loader/i386/bsdXX.c (grub_netbsd_load_elf_meta): Likewise. + * grub-core/loader/i386/bsd_pagetable.c (fill_bsd64_pagetable): + Likewise. + +2010-10-16 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c (skip_ext_op): Skip index field op. + * include/grub/acpi.h (GRUB_ACPI_EXTOPCODE_INDEX_FIELD_OP): New + enum value. + +2010-10-16 Vladimir Serbinenko + + * grub-core/commands/acpihalt.c (get_sleep_type): Accept \_S5_ as + synonym to _S5_. Needed for some DSDTs. + +2010-10-16 Vladimir Serbinenko + + Userspace ACPI parser debugging. + + * grub-core/commands/acpihalt.c [GRUB_DSDT_TEST]: Include userspace + headers and add relevant defines. Don't include standard headers. + (main) [GRUB_DSDT_TEST]: New function. + * include/grub/acpi.h [GRUB_DSDT_TEST]: Don't include standard headers. + Don't declare functions. + +2010-10-16 Vladimir Serbinenko + + Remove dead grub_efi_mm_fini. + + * grub-core/kern/efi/mm.c (allocated_page): Removed. + (ALLOCATED_PAGES_SIZE): Likewise. + (MAX_ALLOCATED_PAGES): Likewise. + (allocated_pages): Likewise. + (grub_efi_allocate_pages): Don't record allocated pages. + (grub_efi_free_pages): Likewise. + (grub_efi_mm_init): Likewise. + (grub_efi_mm_fini): Removed. + +2010-10-16 Vladimir Serbinenko + + * grub-core/kern/efi/mm.c (BYTES_TO_PAGES): Round up instead of down. + (grub_efi_mm_init): Take into account the memory map size increase. + +2010-10-16 Vladimir Serbinenko + + * grub-core/term/ns8250.c (do_real_config): Set port->broken to 0. + (serial_hw_put): Wait based on real time rather than port reads. Don't + roken ports. + * include/grub/serial.h (grub_serial_port): New field broken. + +2010-10-16 Robert Millan + + * grub-core/kern/emu/misc.c + (grub_make_system_path_relative_to_its_root): Fix premature return + when processing non-root ZFS filesystems. + Reported by Sergio Talens-Oliag. + +2010-10-15 Robert Millan + + * util/grub.d/10_linux.in (list): Expand "vmlinu[zx]" instances to + guarantee compressed ones are processed first. + +2010-10-14 Vladimir Serbinenko + + * grub-core/efiemu/main.c (grub_efiemu_prepare): Handle errors from + grub_efiemu_autocore. + +2010-10-14 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S (bypass_table): Use 0x1b explicitly + rather than 0x1b. + (grub_console_getkey): Use correct jae opcode rather than ja. + +2010-10-12 Robert Millan + + * util/grub-mkconfig.in: Merge `GRUB_DISABLE_LINUX_RECOVERY' and + `GRUB_DISABLE_NETBSD_RECOVERY' into a single `GRUB_DISABLE_RECOVERY' + variable. All references updated. + + * util/grub.d/10_kfreebsd.in: Support recovery boot entries. + +2010-10-08 Vladimir Serbinenko + + Correctly distinguish mdraid flavours. + + * grub-core/disk/raid.c (grub_raid_getname) [GRUB_UTIL]: New function. + (insert_array): New argument raid. + * include/grub/disk.h (grub_disk_dev) [GRUB_UTIL]: New member raidname. + * include/grub/raid.h (grub_raid_array) [GRUB_UTIL]: New member driver. + * util/grub-probe.c (probe): PRint raidname instead of plainly "mdraid". + +2010-10-09 Vladimir Serbinenko + + * grub-core/kern/i386/pc/startup.S (grub_console_getkey): Fix incorrect + handling of special keys. + +2010-10-02 Aleš Nesrsta + + * include/grub/scsi.h (grub_make_scsi_id): Fix incorrect usgae of + GRUB_SCSI_ID_BUS_SHIFT instead of GRUB_SCSI_ID_LUN_SHIFT. + +2010-10-02 Aleš Nesrsta + + * grub-core/bus/usb/ohci.c (GRUB_OHCI_TDS): Increase. + * grub-core/bus/usb/uhci.c (N_TD): New definition. All previous implicit + users updated. + * grub-core/bus/usb/usbtrans.c (grub_usb_bulk_setup_readwrite): + Use right endpoint when querying descriptor. + +2010-10-01 Vladimir Serbinenko + + Clear out 0x80 color bit on EFI. + Tested by: decoder + Reported by: decoder and meta tech. + + * grub-core/term/efi/console.c (grub_console_standard_color): Removed. + (grub_console_setcolorstate): Clear out 0x80 bit. + Use GRUB_TERM_DEFAULT_STANDARD_COLOR. + (grub_console_output): Use GRUB_TERM_DEFAULT_NORMAL_COLOR. + Use GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR. + +2010-10-01 Vladimir Serbinenko + + * grub-core/loader/i386/linux.c (DEFAULT_VIDEO_MODE) [GRUB_MACHINE_EFI]: + Set to "auto". + +2010-09-30 Vladimir Serbinenko + + * grub-core/gettext/gettext.c (grub_gettext_init_ext): Avoid using + mo_file after freeing. + +2010-09-30 Vladimir Serbinenko + + * grub-core/normal/term.c (read_terminal_list): Free in a right order. + +2010-09-30 Vladimir Serbinenko + + * grub-core/script/execute.c (grub_script_execute_sourcecode): Set + flags. + +2010-09-30 Vladimir Serbinenko + + * util/grub-setup.c (main) [GRUB_MACHINE_IEEE1275]: Propagate argp + usage. + +2010-09-30 Vladimir Serbinenko + + Put terminfo into core on ieee1275 and yeeloong (needed for console). + + * gentpl.py: New groups terminfoinkernel and terminfomodule. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Include extcmd.h, arg.h + and terminfo.h when needed. + * grub-core/Makefile.core.def (kernel): Include term/terminfo.c, + term/tparm.c, commands/extcmd.c, lib/arg.c on terminfokernel. + (terminfo): Enable only on terminfokernel. + (extcmd): Likewise. + * include/grub/extcmd.h: Add missing EXPORT_FUNC. + * include/grub/lib/arg.h: Likewise. + * grub-core/term/ieee1275/ofconsole.c (grub_ofconsole_dimensions): Fix + incorrect usage of ->. + +2010-09-29 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_make_mbi] + [GRUB_MACHINE_EFI && __i386__]: Fix typo. + +2010-09-29 Vladimir Serbinenko + + Fix coreboot compilation. + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_get_mbi_size): + Take VBE info into account even if only text is supported. + (fill_vbe_info): Take into account the case when only VGA text + is supported. + * include/grub/multiboot.h (GRUB_MACHINE_HAS_VBE): Set to zero + on coreboot, multiboot and qemu. + +2010-09-29 Vladimir Serbinenko + + * grub-core/lib/relocator.c (malloc_in_range): Trim too verbose + debug messages. + (grub_relocator_prepare_relocs): Set movers_chunk.srcv. + +2010-09-29 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c (grub_cmd_netbsd): Provide default serial + parameters. + +2010-09-29 Vladimir Serbinenko + + * grub-core/lib/arg.c (grub_arg_parse): Fix treating of all commands as + if they were BSD-style. + +2010-09-29 Vladimir Serbinenko + + * grub-core/boot/i386/pc/lnxboot.S: Replace + GRUB_KERNEL_I386_PC_MULTIBOOT_SIGNATURE with + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_PART. + +2010-09-29 Vladimir Serbinenko + + Write embedding zone using Reed-Solomon. + + * Makefile.util.def (grub-setup): Add grub-core/lib/reed_solomon.c. + * grub-core/Makefile.am (rs_decoder.S): New target. + (kern/i386/pc/startup.S): Depend on rs_decoder.S. + * grub-core/kern/i386/pc/startup.S (reed_solomon_redundancy): New field. + (multiboot): Move to RS part. + (post_reed_solomon): New label. + (grub_boot_drive): Move to non-RS part since it's modified in memory + on boot. + Include rs_decoder.S. + * grub-core/lib/reed_solomon.c: New file. + * include/grub/offsets.h (GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY): + New definition. + (GRUB_KERNEL_I386_PC_MULTIBOOT_SIGNATURE): Removed. + (GRUB_KERNEL_I386_PC_RAW_SIZE): Updated. + (GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_PART): New definition. + * include/grub/partition.h (grub_partition_map): Change prototype of + embed to allow returning additional sectors. + * include/grub/reed_solomon.h: New file. + * util/grub-setup.c (setup): Handle Reed-Solomon. + +2010-09-28 Colin Watson + + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_make_mbi): Fix + i386 and x86-64 definedness tests. + +2010-09-27 Yves Blusseau + + Fix generation of kernel_syms.lst + + * grub-core/Makefile.am (kernel_syms.lst): Fix value and position of + ASM_PREFIX + +2010-09-26 Robert Millan + + Support degraded ZFS arrays in "grub-probe -t device" resolution. + + * grub-core/kern/emu/getroot.c (find_root_device_from_libzfs): When + the pool is an array of devices, iterate through it and return the + first device that passes a stat() test (instead of blindly returning + the first one). + +2010-09-26 Robert Millan + + Build fixes for GNU/kFreeBSD. + + * Makefile.util.def: Add `$(LIBZFS) $(LIBNVPAIR)' library dependencies + to programs that require ZFS conversion. + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy): Support + kernels that don't have FLOPPY_MAJOR. + +2010-09-25 BVK Chaitanya + + * grub-core/kern/emu/full.c (grub_emu_post_init): Fix typo. + +2010-09-25 BVK Chaitanya + + Fix grub-emu build. + + * grub-core/kern/emu/main.c: Remove #include . + * grub-core/kern/emu/full.c: Split grub_mdraid_{init,fini} into + mdraid09 and mdraid1x. + +2010-09-24 Colin Watson + + Re-enable grub-extras. + + * autogen.sh: Create symlinks to ${GRUB_CONTRIB} if necessary to + avoid confusing Automake. Run autogen only twice, once for the top + level and once for grub-core. Add Makefile.util.def and + Makefile.core.def from extra modules to the appropriate autogen + invocations. If Makefile.common exists in an extra module, include + it in both Makefile.util.am and grub-core/Makefile.core.am; + similarly, include any Makefile.util.common file in Makefile.util.am + and any Makefile.core.common file in grub-core/Makefile.core.am. + * conf/Makefile.common ($(top_srcdir)/grub-core/Makefile.core.am): + Depend on $(top_srcdir)/grub-core/Makefile.gcry.def. + ($(top_srcdir)/grub-core/Makefile.gcry.def): Remove. + * grub-core/Makefile.am: Remove inclusion of Makefile.gcry.am. + + * gentpl.py (gvar_add): Turn GVARS into a set. + (global_variable_initializers): Sort global variables on output. + (vars_init): New function. + (first_time): Likewise. + (library): Ensure that non-global variable initialisations are + emitted before the first time we emit code for a library block. + Append to variables rather than setting them. Only emit + noinst_LIBRARIES, BUILT_SOURCES, and CLEANFILES the first time for + each conditional path. + (program): installdir() emits an Autogen macro, so must be passed to + var_add rather than gvar_add. + (data): Likewise. + (script): Likewise. + (rules): New function, centralising handling for different target + types. Set up Guile association lists for first_time and vars_init, + and send most output to a diversion so that variable initialisations + can be emitted first. + (module_rules): Use new rules function. + (kernel_rules): Likewise. + (image_rules): Likewise. + (library_rules): Likewise. + (program_rules): Likewise. + (script_rules): Likewise. + (data_rules): Likewise. + + * configure.ac: Add AC_PROG_LN_S, for the benefit of ntldr-img. + + * .bzrignore: Add contrib and grub-core/contrib. Remove + grub-core/Makefile.gcry.am. + +2010-09-24 Yves Blusseau + + * grub-core/lib/LzFind.c: Add missing include. + * grub-core/lib/LzmaEnc.c: Likewise. + * grub-core/script/lexer.c: Likewise. + * grub-core/script/yylex.l: Likewise. + * util/grub-macho2img.c: Likewise. + * util/grub-menulst2cfg.c: Likewise. + * util/grub-mklayout.c: Likewise. + * util/grub-mkpasswd-pbkdf2.c + * util/grub-mkrelpath.c: Likewise. + * util/resolve.c: Likewise. + +2010-09-24 BVK Chaitanya + + * Makefile.util.def (example_unit_test): Add + grub-core/gnulib/libgnu.a. + +2010-09-23 Grégoire Sutre + + * grub-core/commands/acpihalt.c (get_sleep_type): Initialize prev. + +2010-09-23 Vladimir Serbinenko + + Support xz compression on yeeloong. + + * Makefile.util.def (grub-mkimage): Add $(LIBLZMA). + * configure.ac: Check for LZMA. + * grub-core/Makefile.core.def (xz_decompress): New target. + (none_decompress): Likewise. + * grub-core/boot/decompressor/minilib.c: New file. + * grub-core/boot/decompressor/none.c: Likewise. + * grub-core/boot/decompressor/xz.c: Likewise. + * grub-core/kern/mips/cache.S: Change to noreorder nomacro. + * grub-core/kern/mips/cache_flush.S: Likewise. + * grub-core/kern/i386/pc/lzma_decode.S: Remove dead code. + * grub-core/kern/mips/startup.S: Move first stage to ... + * grub-core/boot/mips/startup_raw.S: ...here. Change to noreorder + nomacro. + * grub-core/kern/mips/startup.S: Change to noreorder nomacro. + * grub-core/lib/mips/relocator_asm.S: Change to noreorder nomacro. + * grub-core/lib/xzembed/xz_dec_bcj.c [GRUB_EMBED_DECOMPRESSOR]: + Allocate statically. + * grub-core/lib/xzembed/xz_dec_lzma2.c [GRUB_EMBED_DECOMPRESSOR]: + Allocate statically or use scratch. Don't check CRC32. + * grub-core/lib/xzembed/xz_dec_stream.c [GRUB_EMBED_DECOMPRESSOR]: + Allocate statically. Don't check CRC32. + * include/grub/decompressor.h: New file. + * include/grub/offsets.h (GRUB_KERNEL_MIPS_YEELOONG_RAW_SIZE): + Removed. + (GRUB_KERNEL_MIPS_YEELOONG_UNCOMPRESSED_SIZE): New field. + (GRUB_KERNEL_MIPS_YEELOONG_TOTAL_MODULE_SIZE): Adjusted. + (GRUB_KERNEL_MIPS_YEELOONG_PREFIX): Likewise. + (GRUB_KERNEL_MIPS_YEELOONG_PREFIX_END): Likewise. + (GRUB_KERNEL_MACHINE_UNCOMPRESSED_SIZE): New define. + * util/grub-mkimage.c (grub_compression_t): New type. + (PLATFORM_FLAGS_DECOMPRESSORS): New flag. + (image_target_desc): New field default_compression. + (image_targets): Adjust yeeloong targets. + (compress_kernel_xz) [HAVE_LIBLZMA]: New function. + (compress_kernel): New parameter comp. + (generate_image): Likewise. Handle new compression case. + (options): New option --compression + (help): Likewise. + (main): Handle new option. + +2010-09-22 Grégoire Sutre + + * grub-core/kern/emu/hostdisk.c [__NetBSD__]: Define FLOPPY_MAJOR. + +2010-09-22 Colin Watson + + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_make_mbi): Fix + typo in __i386__ conditional. + +2010-09-22 Vladimir Serbinenko + + * grub-core/loader/multiboot_mbi2.c (GRUB_MACHINE_EFI): Add missing + include. + +2010-09-22 Vladimir Serbinenko + + Implement EFI and ACPI multiboot2 extensions. + + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_load): Declare + new tags as supported. + (acpiv2_size): New function. + (grub_multiboot_get_mbi_size): Take new tags into account. + (grub_multiboot_make_mbi): Add new tags. + * include/grub/multiboot.h (GRUB_MACHINE_HAS_ACPI): New definition. + +2010-09-21 Aleš Nesrsta + + * grub-core/bus/usb/serial/common.c (grub_usbserial_attach): + Added missing configuration of USB device. + +2010-09-21 Colin Watson + + * grub-core/normal/menu_entry.c (run): Make sure we always return + a value. + +2010-09-21 Colin Watson + + * grub-core/commands/efi/lsefimmap.c (grub_cmd_lsefimmap): + NumberOfPages is UINT64 according to the UEFI specification, not + UINTN. Fix printf format. + +2010-09-21 Colin Watson + + * grub-core/bus/usb/usbhub.c (poll_nonroot_hub): Change type of + `err' to grub_usb_err_t. + Reported and tested by: KESHAV P.R. + +2010-09-21 Colin Watson + + * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name): Make + tpart non-const, so that we can assign to it. (Since this is a + typedef, the constness refers to the pointer rather than what it + points to.) + +2010-09-21 Colin Watson + + * conf/Makefile.common (CPPFLAGS_GNULIB): Add + $(top_srcdir)/grub-core/gnulib as well as + $(top_builddir)/grub-core/gnulib. + Reported by: KESHAV P.R. + +2010-09-21 Colin Watson + + * util/grub-install.in: Fix the bootloader ID option to be + consistently --bootloader-id, not --bootloader_id. + Reported by: KESHAV P.R. + +2010-09-21 Colin Watson + + * grub-core/commands/hashsum.c (GRUB_MOD_INIT): Make "Compute or + check hash checksum." consistently translatable. + +2010-09-21 Yves Blusseau + + * conf/Makefile.common (CPPFLAGS_GNULIB): Replace $(top_srcdir) with + $(top_builddir). + +2010-09-21 Colin Watson + + * grub-core/commands/hashsum.c (aliases): Add sha1sum alias. + (GRUB_MOD_INIT): Register sha1sum command. + (GRUB_MOD_FINI): Unregister sha1sum command. + +2010-09-21 Yves Blusseau + + Keep boot and grub directory names in sync with utils scripts + + * configure.ac: Define GRUB_BOOT_DIR_NAME and GRUB_DIR_NAME macros. + * config.h.in: Add previous macros. + * include/grub/emu/misc.h (DEFAULT_DIRECTORY): Use previous macros. + * util/grub-install.in: Use $bootdir and $grubdir variables. + +2010-09-21 Colin Watson + + * grub-core/kern/emu/hostdisk.c (find_system_device): Only try to + convert partition names to disk names if the new `convert' parameter + is set. + (grub_util_biosdisk_get_grub_dev): If opening the disk device + returns GRUB_ERR_UNKNOWN_DEVICE, treat the partition device as a + disk in its own right. This can happen with Xen disk images. + +2010-09-21 Yves Blusseau + + * util/grub-editenv.c: Update strings to avoid warnings when generating + grub.pot file. + * util/grub-setup.c: Likewise. + +2010-09-21 Vladimir Serbinenko + + * configure.ac: Change version to 1.99~beta0. + +2010-09-21 Vladimir Serbinenko + + * grub-core/loader/i386/multiboot_mbi.c (grub_fill_multiboot_mmap): + Add BADRAM. + * grub-core/loader/multiboot_mbi2.c (grub_fill_multiboot_mmap): + Likewise. + * include/multiboot.h: Resynced with specification. + * include/multiboot2.h: Likewise. + +2010-09-21 Colin Watson + + Fix po directory handling. + + * configure.ac: Create po/Makefile.in rather than po/Makefile. + * grub-core/gnulib/Makefile.am: Import gettext module. + * m4/gnulib-cache.m4: Likewise. + * m4/gnulib-comp.m4: Likewise. + * m4/gettext.m4: New file, from gnulib. + * m4/glibc2.m4: Likewise. + * m4/iconv.m4: Likewise. + * m4/intdiv0.m4: Likewise. + * m4/intl.m4: Likewise. + * m4/intldir.m4: Likewise. + * m4/intlmacosx.m4: Likewise. + * m4/intmax.m4: Likewise. + * m4/inttypes-pri.m4: Likewise. + * m4/lcmessage.m4: Likewise. + * m4/lib-ld.m4: Likewise. + * m4/lib-link.m4: Likewise. + * m4/lib-prefix.m4: Likewise. + * m4/lock.m4: Likewise. + * m4/nls.m4: Likewise. + * m4/po.m4: Likewise. + * m4/printf-posix.m4: Likewise. + * m4/progtest.m4: Likewise. + * m4/threadlib.m4: Likewise. + * m4/uintmax_t.m4: Likewise. + * m4/visibility.m4: Likewise. + * po/Makefile.am: Remove. + * po/Makefile.in.in: New file, from gettext. + ($(DOMAIN).pot-update): Support POTFILES-shell. + * po/Makevars: New file. + * po/POTFILES-shell: Rename to ... + * po/POTFILES-shell.in: ... this. Update. + * po/POTFILES: Rename to ... + * po/POTFILES.in: ... this. Update. + * po/Rules-quot: New file, from gettext. + * po/boldquot.sed: Likewise. + * po/en@boldquot.header: Likewise. + * po/en@quot.header: Likewise. + * po/insert-header.sin: Likewise. + * po/quot.sed: Likewise. + * po/remove-potcdate.sin: Likewise. + +2010-09-20 Vladimir Serbinenko + + * util/grub.d/10_kfreebsd.in (kfreebsd_entry): Use UUID when possible. + +2010-09-20 Vladimir Serbinenko + + * util/grub.d/20_linux_xen.in: Use submenus. + +2010-09-20 Vladimir Serbinenko + + Support submenus. + + * grub-core/commands/menuentry.c (grub_normal_add_menu_entry): New + parameter submenu. All users updated. + * grub-core/normal/main.c (free_menu): Rename to ... + (grub_normal_free_menu): ... this. Made global. + * grub-core/normal/menu.c (grub_menu_execute_entry): Open new context + if requested. + * grub-core/normal/menu_entry.c (screen): New field submenu. + (make_screen): Set submenu. + (run): Open new context if requested. + * include/grub/menu.h (grub_menu_entry): New field submenu. + * include/grub/normal.h (grub_normal_free_menu): New proto. + +2010-09-20 Vladimir Serbinenko + + Menu entries extractor. + + * grub-core/commands/configfile.c (grub_cmd_source): Implement extractor + variants. + (GRUB_MOD_INIT): Register new variants. + (GRUB_MOD_FINI): Unregister new variants. + * grub-core/commands/legacycfg.c (grub_cmd_legacy_configfile): Merge + into grub_cmd_legacy_source. + (grub_cmd_legacy_source): Implement extractor variants. + (GRUB_MOD_INIT): Register new variants. + (GRUB_MOD_FINI): Unregister new variants. + * grub-core/commands/menuentry.c (grub_menu_init): Declare menuentry + as an extractor. + * grub-core/commands/search_wrap.c (GRUB_MOD_INIT): Declare + search as an extractor. + * grub-core/commands/test.c (GRUB_MOD_INIT): Declare + test as an extractor. + * grub-core/kern/corecmd.c (grub_register_core_commands): Declare set + as an extractor. + * grub-core/normal/context.c (grub_env_context_open): Reorganised. + (grub_env_new_context): New function. + (grub_env_context_open): Likewise. + (grub_env_extractor_open): Likewise. + (grub_env_extractor_close): Likewise. + * grub-core/script/execute.c (grub_script_execute_cmdline): Handle + grub_extractor_level. + * include/grub/command.h (GRUB_COMMAND_FLAG_EXTRACTOR): New flag. + * include/grub/env.h (grub_env_extractor_open): New proto. + (grub_env_extractor_close): Likewise. + * include/grub/normal.h (grub_extractor_level): New external variable. + +2010-09-20 Vladimir Serbinenko + + Make cutmem accept a region specification. + Suggested by: Samuel Thibault + + * grub-core/mmap/mmap.c (parsemem): New function. + (grub_cmd_cutmem): Handle new arguments. + +2010-09-20 Vladimir Serbinenko + + New command cutmem. + + * grub-core/mmap/mmap.c (grub_cmd_cutmem): New function. + (GRUB_MOD_INIT): Register new command. + (GRUB_MOD_FINI): Unregister new command. + +2010-09-20 Vladimir Serbinenko + + Support some annoying BSD and Minix subpartitions. + + * Makefile.util.def (libgrub.a): Add grub-core/partmap/bsdlabel.c. + * grub-core/disk/efi/efidisk.c (grub_efidisk_get_device_name): + Properly handle concatenation. + * grub-core/kern/device.c (grub_device_iterate): Likewise. + * grub-core/normal/completion.c (iterate_partition): Likewise. + * grub-core/kern/disk.c (grub_disk_open): Make disk->name not + contain partition. All users updated. + * grub-core/partmap/bsdlabel.c (grub_netbsdlabel_partition_map): New + struct. + (grub_openbsdlabel_partition_map): Likewise. + (bsdlabel_partition_map_iterate): Rename to .. + (iterate_real): ... this. New arguments sector, freebsd and pmap. + (bsdlabel_partition_map_iterate): New function. + (netopenbsdlabel_partition_map_iterate): Likewise. + (netbsdlabel_partition_map_iterate): Likewise. + (openbsdlabel_partition_map_iterate): Likewise. + (GRUB_MOD_INIT): Register new partmaps. + (GRUB_MOD_FINI): Unregister new partmaps. + * grub-core/partmap/msdos.c (pc_partition_map_iterate): Rename to ... + (grub_partition_msdos_iterate): ... this. All users updated. + Don't support embedding other than in a minix partition. + * include/grub/msdos_partition.h (grub_partition_msdos_iterate): New + proto. + * include/grub/partition.h (grub_partition): New field msdostype. + * util/grub-install.in: Handle openbsd and netbsd types being in + part_bsd module. + +2010-09-20 Vladimir Serbinenko + + Split mdraid.mod into mdraid09.mod and mdraid1x.mod. + + * Makefile.util.def (libgrub.a): Add grub-core/disk/mdraid1x_linux.c. + * grub-core/Makefile.core.def (mdraid): Renamed to ... + (mdraid09): ... this. + (mdraid1x): New module. + * grub-core/disk/mdraid_linux.c: Move 1.x parts ... + * grub-core/disk/mdraid1x_linux.c: ...here. All users updated. + +2010-09-20 Vladimir Serbinenko + + * grub-core/kern/emu/misc.c (asprintf): Use vsnprintf instead of + vsprintf. + +2010-09-20 Colin Watson + + * grub-core/commands/efi/lsefimmap.c: Correct header. + * NEWS: Update. + +2010-09-20 Colin Watson + + * util/grub-editenv.c (argp_parser): Don't pass translated strings + as printf format strings; the translations might contain '%' which + could cause a crash. + (main): Likewise. + * util/grub-fstest.c (argp_parser): Likewise. + * util/grub-setup.c (argp_parser): Likewise. + (main): Likewise. + +2010-09-20 Vladimir Serbinenko + + Use argp in grub-fstest. + + * util/grub-fstest.c: Don't include getopt.h. + Include argp.h. + (root): New variable. + (args_count): Likewise. + (nparm): Likewise. + (num_disks): Likewise. + (images): Likewise. + (cmd): Likewise. + (debug_str): Likewise. + (args): Likewise. + (options): Transformed to argp. + (usage): Removed. + (main): Split argument parsing into ... + (argp_parser): ... this. Changed to argp format. + (argp): New variable. + (main): Use argp_parse. + +2010-09-20 Tristan Gingold +2010-09-20 Robert Millan +2010-09-20 Vladimir Serbinenko + + * grub-core/commands/efi/lsefimmap.c: New file. + * grub-core/Makefile.core.def (lsefimmap): New module. + * include/grub/efi/api.h (PRIxGRUB_EFI_UINTN_T): New definition. + +2010-09-20 Vladimir Serbinenko + + Pause the execution (10s max) if any errors are displayed so the user + has a chance to see them. + + * grub-core/kern/err.c (grub_err_printed_errors): New variable. + (grub_print_error): Increment grub_err_printed_errors. + * grub-core/normal/menu.c (grub_menu_execute_entry): Pause the + execution if any errors were displayed. + (show_menu): Remove old code for pause. + * grub-core/normal/menu_entry.c (run): Likewise. + * grub-core/normal/term.c (grub_normal_char_counter): Removed. All + users updated. + (grub_normal_get_char_counter): Likewise. + * include/grub/err.h (grub_err_printed_errors): New external variable. + * include/grub/normal.h (grub_normal_get_char_counter): Removed. + +2010-09-20 Vladimir Serbinenko + + Support multiboot VBE info. + + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_get_mbi_size): + Take VBE info into account. + (fill_vbe_info) [GRUB_MACHINE_HAS_VBE]: New function. + (retrieve_video_parameters) [GRUB_MACHINE_HAS_VBE]: + Call fill_vbe_info when appropriate. + (grub_multiboot_make_mbi): Account for the size occupied by VBE info. + * grub-core/loader/multiboot_mbi2.c (grub_multiboot_load): Declare tags + as supported. + (grub_multiboot_get_mbi_size): Take new tags into account. + (fill_vbe_tag) [GRUB_MACHINE_HAS_VBE]: New function. + (retrieve_video_parameters) [GRUB_MACHINE_HAS_VBE]: + Call fill_vbe_tag when appropriate. + (grub_multiboot_make_mbi): Properly align tags. + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_pm_interface): New + function. + * include/grub/i386/pc/vbe.h (grub_vbe_bios_get_pm_interface): New + proto. + * include/grub/multiboot.h (GRUB_MACHINE_HAS_VBE): New definition. + +2010-09-20 Vladimir Serbinenko + + Suport manual terminal geometry specification. + + * grub-core/term/ieee1275/ofconsole.c (grub_ofconsole_dimensions): + Save state in grub_ofconsole_terminfo_output. + (grub_ofconsole_term): Use grub_terminfo_getwh. + (grub_ofconsole_getwh): Removed. + * grub-core/term/serial.c (grub_serial_getwh): Removed. + (grub_serial_term): Use grub_terminfo_getwh. + * grub-core/term/terminfo.c (grub_terminfo_getwh): New function. + (options): New struct. + (OPTION_*): New enum. + (grub_cmd_terminfo): Transform into extcmd and handle new parameters. + * include/grub/terminfo.h (grub_terminfo_output_state): New fields + width and height. + (grub_terminfo_getwh): New proto. + * grub-core/lib/legacy_parse.c (grub_legacy_parse): Handle --lines. + +2010-09-20 Vladimir Serbinenko + + Handle legacy "terminal" command. + + * grub-core/lib/legacy_parse.c (legacy_command): New flags FLAG_TITLE + and FLAG_TERMINAL. + (legacy_commands): Add terminal and title. + (grub_legacy_parse): Handle terminal. Simplify title handling. + +2010-09-20 Vladimir Serbinenko + + * grub-core/lib/arg.c (grub_arg_show_help): Correctly handle + parameters overflow. + +2010-09-20 Colin Watson + + * .bzrignore: Add grub-core/gnulib/sys, widthspec.bin, and + widthspec.h. + + * docs/grub.texi (Shell-like scripting): Document `!'. + (Network): Simplify using new i386-pc-pxe format. Mention + grub-mknetdir. + + * NEWS: Update. + +2010-09-20 Colin Watson + + * Makefile.am (SUBDIRS): Restore "."; it's important to force + ordering, so that e.g. ascii.h is built before grub-core/font/font.c + when needed. + +2010-09-20 Colin Watson + + * grub-core/commands/efi/lsefisystab.c: Correct header. + * grub-core/commands/efi/lssal.c: Likewise. + * grub-core/commands/testload.c: Likewise. + +2010-09-20 Colin Watson + + * util/grub-mkrescue.in: Add explicit root argument to --set to + prevent the UUID being interpreted as an argument to --set (matches + previous change to prepare_grub_to_access_device). + +2010-09-20 Colin Watson + + * kern/emu/hostdisk.c: Include and + on FreeBSD. Define HAVE_DIOCGDINFO on NetBSD and FreeBSD to reduce + the verbosity of later #ifs. + (find_partition_start): Define this function on FreeBSD too. + (device_is_wholedisk) [__FreeBSD__ || __FreeBSD_kernel__]: New + function. + (grub_util_biosdisk_get_grub_dev): Use partition-start-sector logic + on FreeBSD. + +2010-09-20 Yves Blusseau + + * util/grub-editenv.c: Use argp instead of getopt. + +2010-09-20 Yves Blusseau + + * util/grub-setup.c: Use argp instead of getopt. + +2010-09-20 Yves Blusseau + + Use gnulib-tool to create gnulib source files. + + * Add gnulib files generated by gnulib-tool in build-aux, m4 and + grub-core/gnulib directories + * .bzignore: Add **/.deps and autogenerated gnulib files + * configure.ac: Assign auxiliary directory to build-aux, add invocation + of gnulib macros, add grub-core/gnulib/Makefile + * Makefile.am: Add gnulib directory in SUBDIRS (removing unnecessary .), + include m4 directory to aclocal. + * Makefile.util.def: Remove direct compilation of gnulib source files + and use the new grub-core/gnulib/libgnu.a. + * build-aux/config.rpath: move config.rpath from top directory to + build-aux + * conf/Makefile.common: Remove the macro _GL_UNUSED already defined + in gnulib headers + * conf/Makefile.extra-dist: Add m4/gnulib-cache.m4 + * grub-core/Makefile.core.def: Remove unnecessary extra_dist + * grub-core/lib/posix_wrap/localcharset.h (locale_charset): Update + header. + * grub-core/lib/posix_wrap/langinfo.h (nl_langinfo): Return static + string. + +2010-09-20 Yves Blusseau + + * .bzrignore: Add grub-kbdcomp, grub-menulst2cfg, *.marker, + grub-core/genmod.sh and grub-core/gensyminfo.sh + +2010-09-20 BVK Chaitanya + + Add a test for echo command options. + + * tests/grub_cmd_echo.in: New test. + * Makefile.util.def: Rules for new test. + +2010-09-20 Szymon Janc + + Remove crc.mod and move crc command to hashsum.mod. + Remove lib/crc.c - users updated to use gcrypt implementation. + + * grub-core/commands/crc.c: Removed. + * grub-core/Makefile.core.def (crc): Module removed. + * grub-core/commands/hashsum.c (aliases[]): Add crc alias. + * grub-core/commands/hashsum.c (GRUB_MOD_INIT): Register crc command. + * grub-core/commands/hashsum.c (GRUB_MOD_FINI): Unregister crc command. + * grub-core/lib/crc.c: Removed. + * include/grub/lib/crc.h: Removed. + * Makefile.util.def (crc): Remove lib/crc.c + * grub-core/Makefile.core.def (libgrub.a): Remove grub-core/lib/crc.c. + * util/grub-fstest.c (cmd_crd): Use libgcrypt crc implementation. + * Makefile.util.def (libgrub.a): Add grub-core/lib/libgcrypt-grub/cipher/crc.c. + * Makefile.util.def (grub-fstest): Add CFLAGS_GCRY to cflags. + * Makefile.util.def (grub-fstest): Add CPPFLAGS_GCRY to cppflags. + * grub-core/efiemu/prepare.c (grub_efiemu_crc): Use libgcrypt crc implementation. + +2010-09-20 Vladimir Serbinenko + + * grub-core/boot/i386/pc/boot.S: Ignore %dl if it's not in a sane range. + +2010-09-19 Vladimir Serbinenko + + Split config.h for util and core. + + * acinclude.m4 (HAVE_ASM_USCORE): Transformed into a variable. + (ADDR32): Likewise. + (DATA32): Likewise. + (BSS_START_SYMBOL): Likewise. + (END_SYMBOL): Likewise. + (NEED_ENABLE_EXECUTE_STACK): Likewise. All users updated. + (grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK): Removed. + * config.h.in: New file. + * configure.ac: Use config-util.h as config define file. + Rename MACHINE into GRUB_MACHINE. All users updated. + (NEED_REGISTER_FRAME_INFO): Transformed into a variable. All users + updated. + (NESTED_FUNC_ATTR): Likewise. + Substitue new variables. + (COND_HAVE_ASM_USCORE): New conditional. + * grub-core/Makefile.am (ASM_PREFIX): New variable. + (kernel_syms.lst): Use ASM_PREFIX. + * grub-core/kern/emu/console.c: Include config-util.h. + * grub-core/kern/emu/misc.c: Likewise. + * grub-core/kern/emu/mm.c: Likewise. + * include/grub/emu/misc.h: Likewise. + * include/grub/libgcc.h: Likewise. + +2010-09-19 Vladimir Serbinenko + + * grub-core/term/efi/console.c (efi_codes): Fix GRUB_TERM_KEY_* + constants usage. + * grub-core/kern/emu/console.c (grub_ncurses_getkey): + Fix GRUB_TERM_KEY_* constants usage. + * grub-core/kern/emu/misc.c (asprintf): Fix vasprintf usage. + +2010-09-19 Vladimir Serbinenko + + * grub-core/bus/usb/ohci.c (grub_ohci_cancel_transfer): Use %p to + print pointer. + * grub-core/bus/usb/uhci.c: Remove empty define. + (grub_uhci_check_transfer): Add missing cast. + * grub-core/bus/usb/usbhub.c (poll_nonroot_hub): Use %p to + print pointer. + * grub-core/term/usb_keyboard.c (grub_usb_keyboard_getkey): Use + PRIuGRUB_SIZE. + * include/grub/types.h (PRIuGRUB_SIZE): New definition. + +2010-09-19 Vladimir Serbinenko + + * grub-core/Makefile.core.def (legacycfg): Add + lib/i386/pc/vesa_modes_table.c on emu. + +2010-09-19 BVK Chaitanya + + Reduce number of temporary files generated by build system. + + * grub-core/gencmdlist.sh: Removed. + * grub-core/genfslist.sh: Removed. + * grub-core/genhandlerlist.sh: Removed. + * grub-core/genmodsrc.sh: Removed. + * grub-core/genpartmaplist.sh: Removed. + * grub-core/genparttoollist.sh: Removed. + * grub-core/gentermiinallist.sh: Removed. + * grub-core/genvideolist.sh: Removed. + + * grub-core/genmod.sh.in: New file. + * grub-core/gensyminfo.sh.in: New file. + + * conf/Makefile.common (CPPFLAGS_*_LIST): New marker flags. + * conf/Makefile.extra-dist: Update with new files. + * gentpl.py: Remove rules related to unnecessary temporary files. + * grub-core/Makefile.am (syminfo.lst): New replacement for def-* + and und-* files. + * grub-core/Makefile.core.def: New rules for gensyminfo.sh and + genmod.sh scripts. + * grub-core/bus/usb/uhci.c: Remove empty #define. + * grub-core/genmoddep.awk: Updated with new syminfo format. + * util/bash-completion.d/Makefile.am: Add config.log to + CLEANFILES. + +2010-09-19 Yves Blusseau + + * Makefile.util.def: Add forgotten $(LIBINTL) library. + +2010-09-19 BVK Chaitanya + + * util/grub-mkconfig.in: Check the config script for syntax errors + before saving. + +2010-09-19 Colin Watson +2010-09-19 Vladimir Serbinenko + + * Makefile.util.def (grub-install): Use util/grub-install.in on all + platforms. + * util/grub-install.in: Add EFI and IEEE1275 support. + * util/i386/efi/grub-install.in: Removed. + * util/ieee1275/grub-install.in: Likewise. + +2010-09-19 Vladimir Serbinenko + + * grub-core/commands/i386/cmostest.c (+parse_args): New function. + (grub_cmd_cmosclean): Likewise. + (GRUB_MOD_INIT): Register command cmosclean. + * util/grub-mkconfig.in: Export GRUB_BUTTON_CMOS_CLEAN. + * util/grub.d/00_header.in: Handle GRUB_BUTTON_CMOS_CLEAN. + +2010-09-18 Carles Pina i Estany +2010-09-18 Aleš Nesrsta +2010-09-18 Vladimir Serbinenko + + Add keyboard layouts support. + + * Makefile.util.def (grub-mklayout): New file. + (grub-kbdcomp): New script. + * grub-core/Makefile.am (KERNEL_HEADER_FILES) [COND_mips_yeeloong]: + Add keyboard_layouts.h. + * grub-core/Makefile.core.def (kernel): Add commands/keylayouts.c and + commands/boot.c on yeeloong. + (keylayouts): New module. + * grub-core/bus/usb/ohci.c + * grub-core/bus/usb/uhci.c + * grub-core/bus/usb/usbhub.c (rescan): New variable. + (grub_usb_add_hub): Poll interrupt pipe for device handling. + (attach_root_port): Likewise. + (poll_nonroot_hub): Likewise. + (grub_usb_poll_devices): Likewise. + (detach_device): Close transfer. + * grub-core/bus/usb/usbtrans.c (grub_usb_execute_and_wait_transfer): New + function. + (grub_usb_bulk_setup_readwrite): Likewise. + (grub_usb_bulk_finish_readwrite): Likewise. + * grub-core/commands/keylayouts.c: New file. + * grub-core/commands/keystatus.c (grub_getkeystatus): New function. + * grub-core/commands/menuentry.c (hotkey_aliases): All several new + aliases. + * grub-core/term/at_keyboard.c: Restructured to use keylayouts and + support scancode 2. + * grub-core/term/usb_keyboard.c: Restructured to use keylayouts. + * include/grub/keyboard_layouts.h: New file. + * util/grub-mklayout.c: New file. + * util/grub-kbdcomp.in: Likewise. + +2010-09-18 Vladimir Serbinenko + + Unify memory types. + + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Include memory.h. + * grub-core/commands/lsmmap.c (grub_cmd_lsmmap): Output user-readable + types. + * grub-core/kern/i386/multiboot_mmap.c (grub_lower_mem): Removed. + (grub_upper_mem): Likewise. + * grub-core/kern/ieee1275/init.c (grub_upper_mem): Likewise. + * include/grub/memory.h (grub_memory_type_t): New enum. + All users updated. + +2010-09-18 Vladimir Serbinenko + + * grub-core/Makefile.core.def (lsapm): New module. + * grub-core/commands/i386/pc/lsapm.c: New file. + * grub-core/loader/i386/multiboot_mbi.c (make_mbi) [GRUB_MACHINE_PCBIOS]: Pass APM info. + * grub-core/loader/multiboot_mbi2.c (make_mbi) [GRUB_MACHINE_PCBIOS]: + Likewise. + * include/grub/i386/pc/apm.h: New file. + * include/multiboot.h (multiboot_apm_info): New struct. + +2010-09-18 Vladimir Serbinenko + + GRUB-legacy configuration file support. + + * Makefile.util.def (grub-menulst2cfg): New util. + * docs/man/grub-menulst2cfg.h2m: New file. + * grub-core/Makefile.core.def (legacycfg): New module. + * grub-core/commands/legacycfg.c: New file. + * grub-core/commands/menuentry.c (append_menu_entry): Rename to ... + (grub_normal_add_menu_entry): ... this. + * grub-core/commands/password.c (grub_cmd_password): Split main part to ... + (grub_normal_set_password): ...this. + * grub-core/commands/videoinfo.c (grub_cmd_videoinfo): Support MODE. + * grub-core/loader/i386/linux.c (linux_vesafb_res): Move to .., + * grub-core/lib/i386/pc/vesa_modes_table.c: ... here. + * grub-core/lib/legacy_parse.c: New file. + * grub-core/normal/auth.c (grub_cmd_authenticate): New command. + * include/grub/i386/pc/vesa_modes_table.h: New file. + * include/grub/legacy_parse.h: Likewise. + * include/grub/normal.h (grub_normal_add_menu_entry): New proto. + * util/grub-menulst2cfg.c: New file. + +2010-09-17 Colin Watson + + * grub-core/kern/emu/hostdisk.c + (convert_system_partition_to_system_disk): Initialise node. + +2010-09-17 Colin Watson + + * grub-core/kern/emu/hostdisk.c + (convert_system_partition_to_system_disk): Fix devmapper memory pool + leak. + Reported and based on patch by: Modestas Vainius. + +2010-09-17 Colin Watson + + Fix DM-RAID probing with recent versions of device-mapper udev + rules. + + * grub-core/kern/emu/hostdisk.c (read_device_map): Don't + canonicalise device paths under /dev/mapper/. + (convert_system_partition_to_system_disk): Compare the + uncanonicalised path to /dev/mapper/ rather than the canonicalised + path, since device nodes under /dev/mapper/ are often symlinks. + +2010-09-17 Yves Blusseau + + * .bzrignore: *.d removed (old rule), add *.image and symlist.h. + +2010-09-16 Yves Blusseau + + * configure.ac: Avoid some annoying error messages if freetype-config + program is not found. + +2010-09-16 Colin Watson + + Support RAID on virtio devices, and others. + + * grub-core/kern/emu/getroot.c [__MINGW32__] (find_root_device): + Rename to ... + [__MINGW32__] (grub_find_device): ... this. + [! __MINGW32__ && ! __CYGWIN__] (find_root_device): Rename to ... + [! __MINGW32__ && ! __CYGWIN__] (grub_find_device): ... this. Use a + reasonable default if dir is NULL. + [! __MINGW32__ && __CYGWIN__] (find_cygwin_root_device): Rename to + ... + [! __MINGW32__ && __CYGWIN__] (grub_find_device): ... this. + (grub_guess_root_device): Update callers. + * include/grub/emu/getroot.h (grub_find_device): Add prototype. + + * util/raid.c (grub_util_getdiskname): Remove. + (grub_util_raid_getmembers): Use grub_find_device rather than + grub_util_getdiskname. + +2010-09-16 Colin Watson + + * docs/grub.texi (serial): Remove obsolete comment about GRUB + needing to be compiled with serial support. + (ls): Indicate that multiple files are accepted. + * grub-core/commands/ls.c (GRUB_MOD_INIT): Update help text to + indicate that multiple files are accepted. + +2010-09-16 Colin Watson + + * .bzrignore: Add *.1, *.8, grub-shell, grub-shell-tester, + libgrub_a_init.c, and util/bash-completion.d/grub. + +2010-09-15 Vladimir Serbinenko + + * util/grub-setup.c (setup): Fix incorrect container semantics. + +2010-09-15 Vladimir Serbinenko + + * grub-core/commands/parttool.c (grub_cmd_parttool): Fix a variable + misusage. + Reported by: J. Nick Terry + +2010-09-15 Vladimir Serbinenko + + Move embedding routines to partmap sources files. + + * grub-core/partmap/gpt.c (grub_gpt_partition_type_bios_boot) + [GRUB_UTIL]: New variable. + (gpt_partition_map_iterate): Set part.parent. + (gpt_partition_map_embed) [GRUB_UTIL]: New function. + (grub_gpt_partition_map) [GRUB_UTIL]: Set .embed. + * grub-core/partmap/msdos.c (pc_partition_map_embed) [GRUB_UTIL]: + New function. + (grub_msdos_partition_map) [GRUB_UTIL]: Set .embed. + * include/grub/partition.h (grub_embed_type_t) [GRUB_UTIL]: New type. + (grub_partition_map) [GRUB_UTIL]: New field embed. + * util/grub-setup.c (grub_gpt_partition_type_bios_boot): Removed. + (setup): Use ->embed. + +2010-09-15 Vladimir Serbinenko + + * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_is_floppy): New + function. + * include/grub/emu/hostdisk.h (grub_util_biosdisk_is_floppy): New proto. + * util/grub-setup.c (setup): Use grub_util_biosdisk_is_floppy. + +2010-09-15 Yves Blusseau + + Add function to get completions from usage. + + * util/bash-completion.d/grub-completion.bash.in: Add function to get + completions from usage. Use LC_ALL=C to get options properly. + +2010-09-15 Vladimir Serbinenko + + * grub-core/gnulib/basename-lgpl.c: Imported. + * grub-core/gnulib/basename.c: Likewise. + * grub-core/gnulib/dirname-lgpl.c: Likewise. + * grub-core/gnulib/dirname.c: Likewise. + * grub-core/gnulib/dirname.h: Likewise. + * grub-core/gnulib/stripslash.c: Likewise. + +2010-09-15 Vladimir Serbinenko + + * grub-core/gnulib/error.c: Resynced. + * grub-core/gnulib/getopt.c: Likewise. + * grub-core/gnulib/getopt_int.h: Likewise. + * grub-core/gnulib/regex.h: Likewise. + * grub-core/gnulib/regex_internal.c: Likewise. + * grub-core/gnulib/regex_internal.h: Likewise. + +2010-09-15 Szymon Janc + + * grub-core/lib/xzembed/xz_dec_stream.c (dec_main): Fix index and block + CRC calculations and validity checks. + * grub-core/lib/xzembed/xz_dec_stream.c (dec_index): Fix index CRC + calculations. + +2010-09-15 Szymon Janc + + * grub-core/lib/xzembed/xz_dec_stream.c (xz_dec_end): Fix memory leak. + +2010-09-14 Vladimir Serbinenko + + Fix incorrect echo options handling. + Reported by: Yves Blusseau. + + * include/grub/command.h (grub_command_flags_t): New flags + GRUB_COMMAND_ACCEPT_DASH and GRUB_COMMAND_OPTIONS_AT_START. + * grub-core/lib/arg.c (grub_arg_parse): Handle new flags. + * grub-core/commands/echo.c (GRUB_MOD_INIT): Use new flags. + +2010-09-14 Vladimir Serbinenko + + * include/grub/command.h (GRUB_COMMAND_FLAG_CMDLINE): Removed. All + users updated. + (GRUB_COMMAND_FLAG_MENU): Likewise. + (GRUB_COMMAND_FLAG_BOTH): Likewise. + (GRUB_COMMAND_FLAG_TITLE): Removed. + (GRUB_COMMAND_FLAG_NO_ECHO): Likewise. + (GRUB_COMMAND_FLAG_EXTCMD): Moved into enum. + (GRUB_COMMAND_FLAG_DYNCMD): Likewise. + (GRUB_COMMAND_FLAG_BLOCKS): Likewise. + (grub_command_flags_t): New enum. All users updated. + +2010-09-14 Seth Goldberg + + Fix solaris compilation. + + * grub-core/Makefile.core.def (kernel): Include gnulib/error.c on emu. + (grub-emu): Add LIBZFS and LIBNVPAIR to ldadd. + (grub-emu-list): Likewise. + +2010-09-14 Vladimir Serbinenko + + Remove deprecated root command. + + * grub-core/commands/minicmd.c (grub_mini_cmd_root): Removed. All users + updated. + +2010-09-14 Vladimir Serbinenko + + * util/i386/pc/grub-setup.c: Merge this ... + * util/sparc64/ieee1275/grub-setup.c: ... and this ... + * util/grub-setup.c: ... into this. + * include/grub/sparc64/ieee1275/boot.h (grub_boot_blocklist) [ASM_FILE]: + New struct. + +2010-09-14 Vladimir Serbinenko + + * grub-core/fs/ext2.c (grub_ext2_open): Use return error value when + possible. + +2010-09-14 Vladimir Serbinenko + + * grub-core/partmap/sun.c (sun_partition_map_iterate): Don't needlesly + allocate p. + +2010-09-14 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Add + explicit root argument to set to prevent UUID to be interpreted as + argument to set. + +2010-09-14 Vladimir Serbinenko + + * grub-core/kern/sparc64/ieee1275/crt0.S: Align stack. + +2010-09-14 Vladimir Serbinenko + + Don't export grub_gate_a20. + + * grub-core/kern/i386/pc/init.c: Remove leftovers. + * grub-core/kern/i386/pc/startup.S (FUNCTION(grub_gate_a20)): Rename + to ... + (grub_gate_a20): ... this. All users updated. + * include/grub/i386/pc/init.h: Removed. All users updated. + +2010-09-14 Vladimir Serbinenko + + Create euro.pf2 which supports most European languages. + + * Makefile.am (grubdata_DATA): Add euro.pf2. + (euro.pf2): New target. + (CLEANFILES): Add euro.pf2. + +2010-09-14 Vladimir Serbinenko + + * configure.ac: Disable emu-usb by default to prevent inadvertent + device takeover. + +2010-09-13 Vladimir Serbinenko + + Disable usbserial on grub-emu since our libusb code isn't good enough + yet. + + * grub-core/Makefile.core.def (usbserial_common): Disable on emu. + (usbserial_pl2303): Likewise. + (usbserial_ftdi): Likewise. + +2010-09-13 Vladimir Serbinenko + + * include/grub/disk.h (grub_disk): Remove has_partitions. + All users updated. + * disk/loopback.c (grub_loopback): Remove has_partitions. + All users updated. + (options): Remove partitions. All users updated. + * util/grub-fstest.c (fstest): Don't pass "-p" to loopback. + * util/i386/pc/grub-setup.c (setup): copy partition table only when + actual partition table is found. + +2010-09-13 Vladimir Serbinenko + + Remove readability checks (too many false negatives). + + * util/grub-install.in: Remove readability checks. + * util/grub-mkconfig.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub-mkconfig_lib.in (is_path_readable_by_grub): Revert to old + way. + +2010-09-13 Vladimir Serbinenko + + Enable acpi shutdown on all ACPI platforms. + + * grub-core/Makefile.core.def (halt): Inlude commands/acpihalt.c + on coreboo, multiboot and EFI. + * grub-core/commands/acpihalt.c (get_sleep_type): Add missing casts. + (grub_acpi_halt): Likewise. + * grub-core/commands/i386/pc/halt.c (grub_halt): Call grub_acpi_halt. + (grub_cmd_halt): Don't call grub_acpi_halt directly. + * grub-core/lib/efi/halt.c (grub_halt): Call grub_acpi_halt. + * grub-core/lib/i386/halt.c (grub_halt) + [GRUB_MACHINE_COREBOOT || GRUB_MACHINE_MULTIBOOT]: Likewise. + +2010-09-13 Vladimir Serbinenko + + * grub-core/commands/iorw.c (grub_cmd_read): Declare buf in smallest + context. + +2010-09-13 Vladimir Serbinenko + + * grub-core/video/efi_gop.c: Fix over-80-chars line. + * grub-core/video/efi_uga.c: Likewise. + +2010-09-13 Vladimir Serbinenko + + Filter devaliases and never open same device twice. + + * grub-core/disk/ieee1275/ofdisk.c (last_devpath): New variable. + (last_ihandle): Likewise. + (ofdisk_hash_ent): New member shortest. + (ofdisk_hash_add): Add canonical path too. + (scan): New function. + (grub_ofdisk_iterate): Iterate over hashed entries. + (compute_dev_path): Don't add :0. + (grub_ofdisk_open): Don't really open the disk. + (grub_ofdisk_close): Avoid closing unrelated disk. + (grub_ofdisk_read): Implement reopen logic. + * grub-core/kern/ieee1275/openfw.c (grub_ieee1275_canonicalise_devname): + New function. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_canonicalise_devname): + New proto. + +2010-09-13 Vladimir Serbinenko + + Fix sparc64. + + * configure.ac (GRUB_KERNEL_MACHINE_LINK_ADDR): Removed. + * grub-core/Makefile.core.def (kernel): Make ldflags just use the + right address. Add sparc64_ieee1275_ldflags. + * grub-core/loader/sparc64/ieee1275/linux.c: Remove leftover include. + * util/grub-mkimagexx.c (locate_sections): Correct grub_host_to_target32 + to grub_host_to_target_addr + (load_image): Likewise. + +2010-09-13 Vladimir Serbinenko + + * grub-core/normal/completion.c (complete_file): Handle device + containing slash. + Fix based on patch by Doug Nazar. + +2010-09-13 Vladimir Serbinenko + + grub-mknetdir script. + + * Makefile.util.def (grub-mknetdir): New module. + * tests/util/grub-shell.in: Support boot=net + * util/grub-mknetdir.in: New file. + +2010-09-13 Vladimir Serbinenko + + videoinfo on non-vbe. + + * grub-core/Makefile.core.def (vbeinfo): Removed. + (vbetest): Removed. + (videoinfo): New module. + * grub-core/commands/i386/pc/vbeinfo.c: Removed. + * grub-core/commands/i386/pc/vbetest.c: Removed. + * grub-core/commands/videoinfo.c: New file. + * grub-core/commands/videotest.c (grub_cmd_videotest): Support mode + specification. + (grub_cmd_videotest) [GRUB_MACHINE_PCBIOS]: Load vbe.mod when invoked + as vbetest. + (GRUB_MOD_INIT) [GRUB_MACHINE_PCBIOS]: New command vbetest. + (GRUB_MOD_FINI) [GRUB_MACHINE_PCBIOS]: Unregister vbetest. + * grub-core/video/efi_gop.c (grub_video_gop_fill_mode_info): Fill + mode_number. New parameter mode. All users updated. + (grub_video_gop_iterate): New function. + (grub_video_efi_gop): New member iterate. + * grub-core/video/i386/pc/vbe.c (framebuffer): Removed leftover fields. + (grub_vbe_set_video_mode): Remove setting useless fields. + (vbe2videoinfo): New function. + (grub_video_vbe_iterate): Likewise. + (grub_video_vbe_setup): Use vbe2videoinfo. + (grub_video_vbe_print_adapter_specific_info): New function. + (grub_video_vbe_adapter): New fields iterate and + print_adapter_specific_info. + * include/grub/video.h (GRUB_VIDEO_MODE_*): Transform into enum. + All users updated. + (grub_video_mode_info): New field mode_number. + (grub_video_adapter): New fields iterate and + print_adapter_specific_info. + +2010-09-13 Tristan Gingold +2010-09-13 Robert Millan +2010-09-13 Vladimir Serbinenko + + * grub-core/commands/efi/lsefisystab.c: New file. + * grub-core/commands/efi/lssal.c: Likewise. + * grub-core/Makefile.core.def (lsacpi): New module. + (lsefisystab): Likewise. + * include/grub/efi/api.h (GRUB_EFI_SAL_TABLE_GUID): New definition. + (GRUB_EFI_HCDP_TABLE_GUID): Likewise. + (grub_efi_sal_system_table): New struct. + (grub_efi_sal_system_table_entrypoint_descriptor): Likewise. + (grub_efi_sal_system_table_memory_descriptor): Likewise. + (grub_efi_sal_system_table_platform_features): Likewise. + (grub_efi_sal_system_table_translation_register_descriptor): Likewise. + (grub_efi_sal_system_table_purge_translation_coherence): Likewise. + (grub_efi_sal_system_table_ap_wakeup): Likewise. + * include/grub/types.h (PRIuGRUB_UINT64_T): New definition. + +2010-09-13 Vladimir Serbinenko + + Support explicit user claim that a device is BIOS-visible. + + * grub-core/kern/emu/getroot.c (grub_util_get_dev_abstraction): + Return GRUB_DEV_ABSTRACTION_NONE if device is in device.map. + * grub-core/kern/emu/hostdisk.c + (convert_system_partition_to_system_disk): Support mdX. + (find_system_device): New parameter add. All users updated. + (grub_util_biosdisk_is_present): New function. + * include/grub/emu/hostdisk.h (grub_util_biosdisk_is_present): New + proto. + +2010-09-13 Vladimir Serbinenko + + Search hints support. + + * commands/search.c (FUNC_NAME): New arguments hints and nhints. + All users updated. + +2010-09-13 Yves Blusseau + + Bash completion script for util commands + + * Makefile.am: Add util/bash-completion.d directory + * configure.ac: Likewise. + * util/bash-completion.d/Makefile.am: New file. + * util/bash-completion.d/grub-completion.bash.in: Likewise. + +2010-09-12 Vladimir Serbinenko + + * grub-core/normal/term.c (put_glyphs_terminal): Correct sign. + (print_backlog): set backlog_ucs4 and backlog_glyphs. + Reported by: Yves Blusseau. + +2010-09-12 Vladimir Serbinenko + + * grub-core/normal/misc.c (grub_normal_print_device_info): Show + partition size and offset. + +2010-09-12 Vladimir Serbinenko + + * grub-core/commands/wildcard.c (make_regex): Escape brackets. + +2010-09-12 Vladimir Serbinenko + + * grub-core/commands/ls.c (grub_cmd_ls): Accept multiple files. + +2010-09-12 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_vprintf): Use va_copy when necessary. + (grub_xvasprintf): Likewise. + +2010-09-12 Vladimir Serbinenko + + * grub-core/kern/emu/main.c (main): Call hostfs_init only after init_all. + +2010-09-12 Vladimir Serbinenko + + * grub-core/commands/menuentry.c (append_menu_entry): Don't rely on + args ending with NULL. + +2010-09-12 Vladimir Serbinenko + + * grub-core/lib/xzembed/xz_dec_stream.c (xz_dec_reset): Preserve context + pointer. + +2010-09-11 Szymon Janc + + * grub-core/commands/lsacpi.c (grub_cmd_lsacpi): Fix prototype. + +2010-09-11 Vladimir Serbinenko + + Shutdown using ACPI. + + * grub-core/Makefile.core.def (halt): Add commands/acpihalt.c on i386-pc. + * grub-core/commands/acpihalt.c: New file. + * grub-core/commands/i386/pc/halt.c (grub_cmd_halt): Call grub_acpi_halt. + * include/grub/acpi.h (grub_acpi_fadt): New member pm1a. + (grub_acpi_halt): New proto. + (GRUB_ACPI_SLP_EN): New const. + (GRUB_ACPI_SLP_TYP_OFFSET): Likewise. + (GRUB_ACPI_OPCODE_*): New enum. + (GRUB_ACPI_EXTOPCODE_*): Likewise. + +2010-09-11 Tristan Gingold +2010-09-11 Robert Millan +2010-09-11 Vladimir Serbinenko + + * commands/lsacpi.c: New file. + * grub-core/Makefile.core.def (lsacpi): New module. + * include/grub/acpi.h (GRUB_ACPI_FADT_SIGNATURE): New definition. + (GRUB_ACPI_MADT_SIGNATURE): Likewise. + (grub_acpi_madt_entry_header): New struct. + (grub_acpi_madt): Likewise. + (grub_acpi_madt_entry_interrupt_override): Likewise. + (grub_acpi_madt_entry_sapic): Likewise. + (grub_acpi_madt_entry_lsapic): Likewise. + (grub_acpi_madt_entry_platform_int_source): Likewise. + * include/grub/types.h (PRIxGRUB_UINT32_T): New definition. + (PRIuGRUB_UINT32_T): Likewise. + (PRIxGRUB_UINT64_T): Likewise. + +2010-09-11 Vladimir Serbinenko + + Implement loading palette on ieee1275_fb. + + * grub-core/video/ieee1275.c (stdout_ihandle): New variable. + (have_setcolors): Likewise. + (grub_video_ieee1275_init): Fill stdout_ihandle and have_setcolors. + (grub_video_ieee1275_setup): Use grub_video_ieee1275_set_palette. + (grub_video_ieee1275_set_palette): Implement. + +2010-09-11 Vladimir Serbinenko +2010-09-11 Colin Watson + + * util/grub-install.in (grub_partition): New variable. + Set prefix_drive on EFI and PC to (,$grub_partition) as last resort. + * util/i386/pc/grub-setup.c (setup): Don't touch prefix. + Fixes a bug reported by Yves Blusseau. + +2010-09-11 Vladimir Serbinenko + + Fix emu on mipsel. + + * conf/Makefile.common (CFLAGS_PLATFORM): Add -mflush-func + =grub_cpu_flush_cache on all mips and not only yeeloong. + * configure.ac (COND_mips): New conditional. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Add libgcc on all + platforms. + * grub-core/kern/emu/cache.S (__mips__): Use _flush_cache. + * grub-core/kern/emu/full.c (grub_arch_dl_init_linker) + [GRUB_LINKER_HAVE_INIT]: New function. + (grub_emu_post_init): Likewise. + * grub-core/kern/emu/lite.c (grub_emu_post_init): Likewise. + * grub-core/kern/emu/main.c: Use grub_emu_post_init. + * include/grub/cache.h (_mips): Include mips/cache.h. + * include/grub/disk.h [GRUB_UTIL || GRUB_MACHINE_EMU]: Add missing + LVM and RAID prototypes. + * include/grub/emu/misc.h (grub_emu_post_init): New proto. + * include/grub/mips/time.h (grub_cpu_idle) [GRUB_MACHINE_EMU]: New + function. + +2010-09-10 Colin Watson + + * util/grub-install.in: Don't try to verify core.img until after + running grub-mkimage to create it. + +2010-09-10 Robert Millan + + * util/grub.d/10_hurd.in: Add misc readability checks. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + +2010-09-10 Colin Watson + + * util/grub-install.in: ${imgext} won't be defined here until the + install branch is merged. For the meantime, only verify core.img on + i386-pc and sparc64-ieee1275 platforms. + +2010-09-10 Robert Millan + + Solaris support in grub_find_zpool_from_dir(). Thanks + Seth Goldberg for referring to getextmntent() facility. + + * configure.ac: Check for getextmntent(), `sys/mnttab.h' and + `sys/mkdev.h'. + * grub-core/kern/emu/misc.c [HAVE_SYS_MNTTAB_H]: Include + `'. + [HAVE_SYS_MKDEV_H]: Include `'. + [HAVE_GETEXTMNTENT] (grub_find_zpool_from_dir): Add getextmntent() + method for finding zpool name. + +2010-09-10 Colin Watson + + grub-fstest needs the host and hostfs modules while other utilities + actively require those modules to be absent, so grub-fstest needs + its own initialisation and finalisation code. + + * Makefile.am (grub_fstest.pp): New target. + (grub_fstest_init.lst): Likewise. + (grub_fstest_init.c): Likewise. + * Makefile.util.def (grub-fstest): Add grub_fstest_init.c. + +2010-09-10 Robert Millan + + * configure.ac: Check for `struct statfs.f_fstypename' and + `struct statfs.f_mntfromname'. + + * grub-core/kern/emu/misc.c (grub_find_zpool_from_dir): Conditionalize + kFreeBSD-specific code. + +2010-09-10 Robert Millan + + * util/grub.d/10_kfreebsd.in: Fix ${kfreebsd_device} initialization + on ZFS. Now non-main filesystems are supported as / too. + +2010-09-09 Colin Watson + + * Makefile.util.def (libgrub.a): Move grub-core/kern/emu/hostfs.c + and grub-core/disk/host.c to ... + (grub-fstest): ... here. Having the host disk implementation + present confuses grub-probe and other utility programs. + + * util/grub-mkconfig.in: Only verify readability of grub.cfg.new + when writing to a file, not when writing to stdout. + +2010-09-09 BVK Chaitanya + + * tests/partmap_test.in: New test for partitions. + * Makefile.util.def: Rules for new test. + +2010-09-09 Robert Millan + + * util/grub-probe.c (probe): Fix a pair of unhandled error + conditions. + +2010-09-09 Robert Millan + + Basic Btrfs support (detection and UUID). + + * grub-core/fs/btrfs.c: New file. + * Makefile.util.def (library): Register btrfs.c. + * grub-core/Makefile.core.def: Likewise. + +2010-09-08 Robert Millan + + * util/grub-mkconfig_lib.in (is_path_readable_by_grub): Improve + with (optional) parameters to specify device and relative path. + * util/grub-install.in: Use is_path_readable_by_grub() to + verify readability of a few critical files. + * util/grub-mkconfig.in: Use is_path_readable_by_grub() to + verify readability of grub.cfg.new. + +2010-09-08 Vladimir Serbinenko + + Split minix.mod into minix.mod and minix2.mod. + + * Makefile.util.def (libgrub.a): Add grub-core/fs/minix2.c. + * grub-core/Makefile.core.def (minix2): New module. + * grub-core/fs/minix.c: Use definitions instead of runtime version + checking. + * grub-core/fs/minix2.c: New file. + +2010-09-08 Yves Blusseau + + Add new --boot-directory option to replace --root-directory + + * util/grub-install.in: Add new --boot-directory option + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + +2010-09-08 Yves Blusseau + + * util/grub-mkconfig.in: Use new variable. + +2010-09-08 Yves Blusseau + + * configure.ac: Define some useful variables. + +2010-09-08 Vladimir Serbinenko + + * grub-core/kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set + GRUB_IEEE1275_FLAG_HAS_CURSORONOFF when appropriate. + * grub-core/term/ieee1275/ofconsole.c (grub_ofconsole_setcursor): + Use terminfo and don't use cursor-on/cursor-off unless it's known + to work. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New element + GRUB_IEEE1275_FLAG_HAS_CURSORONOFF. + +2010-09-08 Colin Watson + + * grub-core/kern/efi/init.c (grub_efi_set_prefix): If the prefix + starts with "(,", fill the drive containing the loaded image in + between those two characters, but expect that a full partition + specification including partition map names will follow. + +2010-09-08 Robert Millan + + * configure.ac: Remove `--enable-grub-fstest' option. + * Makefile.util.def (grub-fstest): Remove COND_GRUB_FSTEST condition. + + * util/grub-mkconfig_lib.in (is_path_readable_by_grub): Use + `grub-fstest' instead of `grub-probe' for readability verification. + * util/grub-probe.c (probe): Remove readability verification kludge. + +2010-09-08 Robert Millan + + * util/grub-mkconfig.in: Pass `--device ${GRUB_DEVICE}' when + initializing `GRUB_FS'. + +2010-09-08 BVK Chaitanya + + Not command (!) support to GRUB script. + + * tests/grub_script_not.in: New test. + * Makefile.util.def: Rules for new test. + + * grub-core/script/execute.c (grub_script_execute_cmdline): Handle + ! command as a special case. + * grub-core/script/yylex.l (GRUB_PARSER_TOKEN_NOT): Removed. + +2010-09-07 BVK Chaitanya + + * grub-core/commands/wildcard.c (wildcard_expand): Fix wrong + grub_free. + +2010-09-07 BVK Chaitanya + + * docs/grub.texi (Shell-like scripting): Fix @dots to @dots{}. + +2010-09-07 BVK Chaitanya + + * docs/grub.texi (Shell-like scripting): Documentation for break, + continue, shift and return commands. + +2010-09-06 Vladimir Serbinenko + + Rename CD-ROM to cd on BIOS. + + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_get_drive): Recognise + "cd". + (grub_biosdisk_call_hook): Call with "cd" instead of arbitrary hdX. + +2010-09-05 Vladimir Serbinenko + + * grub-core/kern/emu/main.c (main): Reinit LVM and RAID. + * util/grub-probe.c (main): Likewise. + * util/i386/pc/grub-setup.c (main): Likewise. + * util/sparc64/ieee1275/grub-setup.c (main): Likewise. + Reported and debugged by: alexxy + +2010-09-05 Vladimir Serbinenko + + * grub-core/disk/lvm.c (grub_lvm_scan_device) [GRUB_UTIL]: Output more + diagnostic info. + +2010-09-05 Jo Shields + + * util/grub.d/30_os-prober.in: Add missing classes. + +2010-09-05 Vladimir Serbinenko + + * docs/grub.texi (Theme file format): Document new position format. + +2010-09-05 Vladimir Serbinenko + + * docs/grub.texi (Theme file format): Replace Box_slice_names.png with + a table. Use @code instead of @verbatim. + +2010-09-05 Colin D Bennett + + Gfxmenu documentation. + + * docs/grub.texi (Theme file format): New chapter. + +2010-09-05 Szymon Janc + + * grub-core/Makefile.core.def (xzio): New module. + * grub-core/io/xzio.c: New file. + * grub-core/lib/xzembed/xz.h: New file (from xembed). + * grub-core/lib/xzembed/xz_config.h: Likewise. + * grub-core/lib/xzembed/xz_dec_bcj.c: Likewise. + * grub-core/lib/xzembed/xz_dec_lzma2.c: Likewise. + * grub-core/lib/xzembed/xz_dec_stream.c: Likewise. + * grub-core/lib/xzembed/xz_lzma2.h: Likewise. + * grub-core/lib/xzembed/xz_private.h: Likewise. + * grub-core/lib/xzembed/xz_stream.h: Likewise. + * include/grub/file.h (grub_file_filter_id): New compression filter + GRUB_FILE_FILTER_XZIO. + +2010-09-05 Vladimir Serbinenko + + * include/grub/file.h (GRUB_FILE_SIZE_UNKNOWN): New definition. + * grub-core/disk/loopback.c (grub_loopback_open): Handle unknown file + size. + +2010-09-05 Vladimir Serbinenko + + * include/grub/err.h (grub_err_t): Replace GRUB_ERR_BAD_GZIP_DATA with + GRUB_ERR_BAD_COMPRESSED_DATA. All users updated. + +2010-09-05 Vladimir Serbinenko + + Uncompressed checksum support. + + * grub-core/commands/hashsum.c (options): Add option --uncompress. + (check_list): New parameter uncompress. + (grub_cmd_hashsum): Handle --uncompress. + +2010-09-05 Vladimir Serbinenko + + Reintroduce testload. + + * grub-core/commands/minicmd.c (grub_rescue_cmd_testload) [0]: Moved + from here ... + * grub-core/commands/testload.c (grub_cmd_testload): ... here. + (GRUB_MOD_INIT): New function. + (GRUB_MOD_FINI): Likewise. + * grub-core/Makefile.core.def (testload): New module. + +2010-09-05 Szymon Janc + + * grub-core/lib/posix_wrap/sys/types.h (bool): Transform into an enum. + (uint8_t): New type. + (uint16_t): Likewise. + (uint32_t): Likewise. + (uint64_t): Likewise. + +2010-09-05 Szymon Janc + + * include/grub/crypto.h (GRUB_MD_CRC32): New definition. + +2010-09-05 Vladimir Serbinenko + + * grub-core/io/gzio.c (grub_gzio_open): Removed "transparent" parameter. + Made static. + (grub_gzfile_open): Removed. All users updated. + (GRUB_MOD_INIT): New function. + (GRUB_MOD_FINI): Likewise. + * grub-core/kern/file.c (grub_file_filters_all): New variable. + (grub_file_filters_enabled): Likewise. + (grub_file_open): Handle filters. + * grub-core/loader/i386/bsd.c (GRUB_MOD_INIT): Load gzio. + * grub-core/normal/main.c (GRUB_MOD_INIT): Likewise. + * include/grub/file.h (grub_file_filter_id_t): New type. + (grub_file_filter_t): Likewise. + (grub_file_filters_all): New extern variable. + (grub_file_filters_enabled): Likewise. + (grub_file_filter_register): New inline function. + (grub_file_filter_unregister): Likewise. + (grub_file_filter_disable): Likewise. + (grub_file_filter_disable_compression): Likewise. + * include/grub/gzio.h: Removed. + +2010-09-04 BVK Chaitanya + + Filename expansion support for wildcards in GRUB script. + + * tests/grub_script_expansion.in: New test. + * Makefile.util.def: Rule for new test. + + * grub-core/commands/wildcard.c: New file, implements filename + expansion support for GRUB script. + * grub-core/Makefile.core.def: Rule update for regexp.mod. + * grub-core/script/argv.c: Cosmetic changes. + * grub-core/script/execute.c (grub_script_arglist_to_argv): + Refactored to perform wildcard expansion on arguments. + * include/grub/script_sh.h (grub_script_wildcard_translator): New + struct. + + * tests/util/grub-shell.in: Fix quoting for read input. + +2010-09-04 BVK Chaitanya + + Support for updating environment variables with matched substrings + of regexp. + + * tests/grub_cmd_regexp.in: New test. + * Makefile.util.def: Rule for new test. + + * grub-core/commands/regexp.c: New option -s to update environment + variables with regexp matches. + +2010-09-04 Szymon Janc + + * include/grub/file.h (grub_file): New member not_easly_seekable. + (grub_file_seekable): New inline function. + * grub-core/io/gzio.c (test_header): Don't test end magic if file isn't + easily seekable. + (grub_gzio_open): Set not_easly_seekable. + * grub-core/fs/i386/pc/pxe.c (grub_pxefs_open): Set not_easily_seekable. + * grub-core/io/bufio.c (grub_bufio_open): Propagate not_easily_seekable. + +2010-09-04 BVK Chaitanya + + Support for options to appear multiple times on cmdline. + + * include/grub/lib/arg.h (grub_arg_list_alloc): New prototype. + * grub-core/commands/extcmd.c: Support for repeatable option. + * grub-core/lib/arg.c (grub_arg_list_alloc): New function for + repeatable option support. + + Refactor menuentry into a regular command. + + * grub-core/commands/menuentry.c: New file, menuentry command + implementation. + * grub-core/Makefile.core.def: Rule update for normal.mod. + * grub-core/normal/main.c: Moved menuentry creation to + grub-core/commands/menuentry.c. + * grub-core/normal/menu.c (grub_menu_execute_entry): Removed. + (grub_menu_execute_entry_real): Removed. + * grub-core/script/execute.c (grub_script_execute_sourcecode): New + function. + (grub_script_execute_menuentry): Removed. + * grub-core/script/parser.y (menuentry): Removed. + * grub-core/script/script.c (grub_script_create_cmdmenu): Removed. + * grub-core/script/yylex.l (menuentry): Removed. + * include/grub/menu.h (grub_menu_init): New prototype. + (grub_menu_fini): New prototype. + * include/grub/normal.h (grub_normal_add_menu_entry): Removed. + * include/grub/script_sh.h (grub_script_cmd_menuentry): Removed. + (grub_script_execute_sourcecode): New prototype. + +2010-09-04 BVK Chaitanya + + "return" command for GRUB script functions. + + * tests/grub_script_return.in: New test. + * Makefile.util.def: Rules for new test. + + * grub-core/script/execute.c (grub_script_return): New function. + * grub-core/script/main.c: Register/unregister return commaond. + * include/grub/script_sh.h (grub_script_return): New prototype. + +2010-09-04 BVK Chaitanya + + "setparams" command to update positional parameters. + + * tests/grub_script_setparams.in: New test. + * Makefile.util.def: Rules for new test. + + * grub-core/script/argv.c (grub_script_argv_make): New function. + * grub-core/script/execute.c (replace_scope): New function. + (grub_script_setparams): New function. + * grub-core/script/lexer.c: Remove unused variables. + * grub-core/script/main.c: Register/unregister setparams command. + * include/grub/script_sh.h (grub_script_argv_make): New prototype. + (grub_script_setparams): New prototype. + +2010-09-04 BVK Chaitanya + + * grub-core/normal/completion.c (grub_normal_do_completion): Fix + grub_free order. + +2010-09-04 BVK Chaitanya + + Support for passing block of commands as an argument to extcmds. + + * Makefile.util.def: Rules for new test. + * tests/grub_script_blockarg.in: New test. + * grub-core/tests/test_blockarg.c: New file, block argument + command used in the test. + + * include/grub/extcmd.h (grub_extcmd_context): New struct. + (grub_register_extcmd_prio): New function prototype. + (grub_extcmd_dispatcher): New function prototype. + * include/grub/command.h (GRUB_COMMAND_FLAG_BLOCKS): New command + type. + * include/grub/script_sh.h (struct grub_script): New members + `children', `next_siblings' and `refcnt' for block arguments and + reference counting. + (GRUB_SCRIPT_ARG_TYPE_BLOCK): New argument type. + (grub_script_arg): New member `script' for block argument. + (grub_script_argv): New member `script' for block argument. + (grub_parser_param): New member `scripts' for block argument. + (grub_script_mem_free): New extern function prototype. + (grub_script_ref): New function prototype. + (grub_script_unref): New function prototype. + + * grub-core/normal/dyncmd.c (grub_dyncmd_dispatcher): Moved to + extcmd form to support block arguments. + * grub-core/script/argv.c: Block arguments support. + * grub-core/script/execute.c: Likewise. + * grub-core/script/lexer.c: Likewise. + * grub-core/script/main.c: Likewise. + * grub-core/script/script.c: Likewise. + * grub-core/script/parser.y: Likewise. New `block' and `block0' + non-terminals. + + * grub-core/commands/acpi.c: Update extcmd implementations with + grub_extcmd_context_t. + * grub-core/commands/cat.c: Likewise. + * grub-core/commands/echo.c: Likewise. + * grub-core/commands/extcmd.c: Likewise. + * grub-core/commands/hashsum.c: Likewise. + * grub-core/commands/hdparm.c: Likewise. + * grub-core/commands/help.c: Likewise. + * grub-core/commands/hexdump.c: Likewise. + * grub-core/commands/i386/cpuid.c: Likewise. + * grub-core/commands/i386/pc/drivemap.c: Likewise. + * grub-core/commands/i386/pc/halt.c: Likewise. + * grub-core/commands/i386/pc/sendkey.c: Likewise. + * grub-core/commands/iorw.c: Likewise. + * grub-core/commands/keystatus.c: Likewise. + * grub-core/commands/loadenv.c: Likewise. + * grub-core/commands/ls.c: Likewise. + * grub-core/commands/lspci.c: Likewise. + * grub-core/commands/memrw.c: Likewise. + * grub-core/commands/probe.c: Likewise. + * grub-core/commands/search_wrap.c: Likewise. + * grub-core/commands/setpci.c: Likewise. + * grub-core/commands/sleep.c: Likewise. + * grub-core/disk/loopback.c: Likewise. + * grub-core/hello/hello.c: Likewise. + * grub-core/loader/i386/bsd.c: Likewise. + * grub-core/loader/xnu.c: Likewise. + * grub-core/term/gfxterm.c: Likewise. + * grub-core/term/serial.c: Likewise. + * grub-core/tests/lib/functional_test.c: Likewise. + +2010-09-04 BVK Chaitanya + + Multi-line quoted strings support. + + * grub-core/script/lexer.c (append_newline): Removed. + (grub_script_lexer_yywrap): Refactored. + (grub_script_lexer_init): Refactored. + * grub-core/script/yylex.l (yywrap): New function. + (grub_lexer_resplit): New function. + (grub_lexer_unput): New function. + * include/grub/script_sh.h (grub_lexer_param): New members, unput + and resplit. + * tests/grub_script_echo1.in: Added few more testcases. + +2010-09-04 Vladimir Serbinenko + + * grub-core/kern/misc.c: Don't add abort alias in utils. + Reported by: echoline. + +2010-09-03 BVK Chaitanya + + Add missing files into "make dist" tarball for other platforms. + + * gentpl.py (script): Use dist_noinst_DATA instead of EXTRA_DIST. + * conf/Makefile.common (dist_noinst_DATA): New variable. + * conf/Makefile.extra-dist: Added missing make dist files. + * grub-core/Makefile.core.def: Likewise. + +2010-09-03 Vladimir Serbinenko + + Compress grub_prefix. + + * grub-core/boot/i386/pc/lnxboot.S: Use + GRUB_KERNEL_I386_PC_MULTIBOOT_SIGNATURE. + * grub-core/kern/i386/pc/startup.S: Move grub_prefix to compressed part. + * include/grub/offsets.h: Rename GRUB_MACHINE_DATA_END to + GRUB_MACHINE_PREFIX_END. All users updated. + (GRUB_KERNEL_I386_PC_PREFIX): Set to GRUB_KERNEL_I386_PC_RAW_SIZE. + (GRUB_KERNEL_I386_PC_PREFIX_END): Set to GRUB_KERNEL_I386_PC_PREFIX + + 0x40. + (GRUB_KERNEL_I386_PC_RAW_SIZE): Decrease. + * util/grub-mkimage.c (image_target_desc): Change data_end to + prefix_end. All users updated. + +2010-09-03 Vladimir Serbinenko + + * grub-core/loader/i386/bsd.c (grub_freebsd_boot): Set %ebp to sane + value. + (grub_openbsd_boot): Likewise. + (grub_netbsd_boot): Likewise. + * grub-core/loader/i386/xnu.c (grub_xnu_boot_resume): Likewise. + (grub_xnu_boot): Likewise. + +2010-09-02 Vladimir Serbinenko + + * configure.ac: Clean LIBS variable after tests. + +2010-09-02 Colin Watson + + * INSTALL: Document that libdevmapper needs to be 1.02.34 or later. + +2010-09-02 Vladimir Serbinenko + + * configure.ac: Check for dm_log_with_errno_init in libdevmapper and + echo if libdevmapper will be used. + +2010-09-02 Ian Turner + + * grub-core/fs/i386/pc/pxe.c (grub_pxefs_read): Keep the blocksize + constant for the same file. + +2010-09-02 Vladimir Serbinenko + + * grub-core/kern/i386/multiboot_mmap.c: Remove leftover include. + +2010-09-02 Colin Watson + + * .bzrignore: Add *.pp, **/.dirstamp, grub-core/*.module, and + grub-core/*.pp. + +2010-09-02 Colin Watson + + Zero %ebp and %edi when entering Linux's 32-bit entry point, as + required by the boot protocol. + + * include/grub/i386/relocator.h (struct grub_relocator32_state): Add + ebp and edi members. + * grub-core/lib/i386/relocator.c (grub_relocator_boot): Handle + state.ebp and state.edi. + * grub-core/lib/i386/relocator32.S (grub_relocator32_start): Set + %ebp and %edi according to grub_relocator32_ebp and + grub_relocator32_edi respectively. + * grub-core/loader/i386/linux.c (grub_linux_boot): Zero state.ebp + and state.edi. + +2010-09-02 Vladimir Serbinenko + + Add i386-pc-pxe image target. + + * util/grub-mkimage.c (image_target_desc): New enum value + IMAGE_I386_PC_PXE. + (image_targets): New target i386-pc-pxe. + (generate_image): Handle i386-pc-pxe image. + +2010-09-02 Vladimir Serbinenko + + Fix grub_pxe_scan. + + * grub-core/fs/i386/pc/pxe.c (grub_pxe_pxenv): Put correct type bangpxe. + (grub_pxe_scan): Fix types and pxe_rm_entry computation. + All users updated. + * include/grub/i386/pc/pxe.h (grub_pxe_bangpxe): New struct. + (grub_pxe_pxenv): Correct type. + +2010-09-01 Colin Watson + + * NEWS: Document most of the important changes since 1.98. + +2010-09-01 Colin Watson + + * util/grub-mkrescue.in (usage): Tidy up usage output (and hence + generated manual page) a little. + +2010-09-01 Colin Watson + + * docs/grub.texi: Add myself as an author. + +2010-09-01 Vladimir Serbinenko + + * Makefile.util.def (libgrub.a): Add missing sunpc. + Reported by: Seth Goldberg. + +2010-08-30 Vladimir Serbinenko + + Interrupt wrapping and code simplifications. + + * Makefile.util.def (grub-mkrescue): Use x86 tg instead of + x86_noieee1275 which are functionaly equivalent in this case. + (grub-install): Make source on each platform explicit. Enable on + all noemu. + * gentpl.py (x86_efi_pc): Removed group. + (x86_noefi): Likewise. + (i386_noefi): Likewise. + (x86_noieee1275): Likewise. + (i386_noieee1275): Likewise. + (i386_noefi_noieee1275): Likewise. + (i386_pc_qemu_coreboot): Likewise. + (i386_coreboot_multiboot): Likewise. + (i386_pc_coreboot_multiboot_qemu): Likewise. + (x86_noefi_mips): Likewise. + (noieee1275): Likewise. + (ieee1275_mips): Likewise. + (noemu_noieee1275): Likewise. + (cmos): New group. + (usb): Likewise. + (videoinkernel): Likewise. + (videomodules): Likewise. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Remove + include/grub/elf.h, include/grub/elfload.h, include/grub/net.h, + include/grub/reader.h, include/grub/symbol.h, include/grub/types.h, + include/grub/loader.h, include/grub/msdos_partition.h, + include/grub/machine/biosdisk.h, include/grub/machine/boot.h, + include/grub/machine/console.h, include/grub/machine/vga.h, + include/grub/machine/vbe.h, include/grub/machine/init.h, + include/grub/machine/kernel.h, include/grub/cpu/time.h, + include/grub/cpu/types.h, include/grub/gzio.h and include/grub/menu.h + (KERNEL_HEADER_FILES) [i386-pc]: Add include/grub/machine/int.h. + (KERNEL_HEADER_FILES) [i386-ieee1275]: Add include/grub/i386/pit.h + * grub-core/Makefile.core.def (kernel): Explicit the source for + startup. Explicit the platforms using kern/generic/rtc_get_time_ms.c. + Split ieee1275_mips. Remove kern/i386/halt.c. Remove kern/i386/misc.S. + Enable kern/i386/pit.c on all x86. Remove kern/i386/ieee1275/init.c. + Use videoinkernel tag. + (usb): Enable on all usb. + (usbserial_common): Likewise. + (usbserial_pl2303): Likewise. + (usbserial_ftdi): Likewise. + (uhci): Enable on all x86. + (ohci): Enable on all pci. + (cmostest): Enable on all CMOS. + (acpi): Include commands/acpi.c on all platforms. + (halt): Add relevant lib/*/halt.c. + (hdparm): Enable on all pci. + (lspci): Likewise. + (usbtest): Enable on all usb. + (ata): Enable on all pci. + (ata_pthru): Likewise. + (usbms): Enable on all usb. + (usb_keyboard): Likewise. + (font): Use tag videomodules. + (bufio): Likewise. + (datetime): Use tag cmos. Enable on all noemu. + (mmap): Use tags common and x86. + (gfxterm): Use tag videomodules. + (bitmap): Likewise. + (bitmap_scale): Likewise. + (video_fb): Likewise. + (video): Likewise. + * grub-core/bus/usb/ohci.c (grub_ohci_td): Make link_td a pointer and + adjust padding accordingly. All users updated. + (grub_ohci_transaction): Fix bad format specification. + (GRUB_MOD_INIT): Add asserts for struct size. + * grub-core/bus/usb/uhci.c (grub_uhci_pci_iter): Add explicit casts. + (grub_alloc_td): Likewise. + (grub_free_queue): Likewise. + (grub_uhci_transfer): Likewise. + (grub_uhci_transaction): Fix bad format specification. + * grub-core/bus/usb/usbtrans.c (grub_usb_control_msg): Likewise. + (grub_usb_bulk_readwrite): Likewise. + * grub-core/kern/i386/misc.S (grub_stop): Moved from here ... + * grub-core/commands/i386/pc/halt.c (stop): ...here. Transformed into C. + Made static. + * grub-core/lib/i386/halt.c (stop): ... and here. Transformed into C. + Made static. + * grub-core/kern/i386/pc/startup.S (grub_halt): Moved from here ... + * grub-core/commands/i386/pc/halt.c (grub_halt): ...here. + Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_biosdisk_rw_int13_extensions): + Moved from here ... + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_rw_int13_extensions): + ... here. Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S (grub_biosdisk_rw_standard): + Moved from here ... + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_rw_standard): + ... here. Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S + (grub_biosdisk_check_int13_extensions): Moved from here ... + * grub-core/disk/i386/pc/biosdisk.c + (grub_biosdisk_check_int13_extensions): ... here. Transformed into C. + Made static. + * grub-core/kern/i386/pc/startup.S + (grub_biosdisk_get_cdinfo_int13_extensions): Moved from here ... + * grub-core/disk/i386/pc/biosdisk.c + (grub_biosdisk_get_cdinfo_int13_extensions): ... here. + Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S + (grub_biosdisk_get_diskinfo_int13_extensions): Moved from here ... + * grub-core/disk/i386/pc/biosdisk.c + (grub_biosdisk_get_diskinfo_int13_extensions): ... here. + Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S + (grub_biosdisk_get_diskinfo_standard): Moved from here ... + * grub-core/disk/i386/pc/biosdisk.c + (grub_biosdisk_get_diskinfo_standard): ... here. + Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S + (grub_biosdisk_get_num_floppies): Moved from here ... + * grub-core/disk/i386/pc/biosdisk.c + (grub_biosdisk_get_num_floppies): ... here. + Transformed into C. Made static. + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_get_diskinfo_real): + New function. + * grub-core/kern/i386/pc/startup.S (grub_pxe_scan): Moved from here ... + * grub-core/fs/i386/pc/pxe.c (grub_pxe_scan): ... here. + Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S (grub_rm_entry): Moved from here ... + * grub-core/fs/i386/pc/pxe.c (grub_rm_entry): ... here. + Transformed into C. Made static. + * grub-core/kern/i386/ieee1275/init.c: Removed. + * grub-core/kern/i386/misc.S: Likewise. + * grub-core/kern/i386/pc/startup.S (grub_get_memsize): + Splitted from here ... + * grub-core/kern/i386/pc/init.c (grub_get_conv_memsize): ... here. + Transformed into C. Made static. All users updated. + * grub-core/kern/i386/pc/mmap.c (grub_get_ext_memsize): ... and here. + Transformed into C. Made static. All users updated. + * grub-core/kern/i386/pc/startup.S (grub_get_eisa_mmap): + Moved from here... + * grub-core/kern/i386/pc/mmap.c (grub_get_eisa_mmap): ... here. + Transformed into C. Made static. All users updated. + * grub-core/kern/i386/pc/startup.S (grub_get_mmap_entry): + Moved from here... + * grub-core/kern/i386/pc/mmap.c (grub_get_mmap_entry): ... here. + Transformed into C. Made static. All users updated. + * grub-core/kern/i386/pc/startup.S (grub_stop_floppy): + Removed (replaced by C version). + * grub-core/kern/i386/pc/startup.S (grub_vga_set_mode): + Moved from here... + * grub-core/video/i386/pc/vga.c (grub_vga_set_mode): ...here. + Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_controller_info): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_controller_info): + ... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_mode_info): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_mode_info): + ... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_mode): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_mode): + ... here. Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_mode): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_mode): + ... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S + (grub_vbe_bios_getset_dac_palette_width):Moved from here... + * grub-core/video/i386/pc/vbe.c + (grub_vbe_bios_getset_dac_palette_width):... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_memory_window): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_memory_window): + ... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_memory_window): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_memory_window): + ... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_scanline_length): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_scanline_length): + ... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_scanline_length): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_scanline_length): + ... here. Transformed into C. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_display_start): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_display_start): + ... here. Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_get_display_start): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_display_start): + ... here. Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S (grub_vbe_bios_set_palette_data): + Moved from here... + * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_set_palette_data): + ... here. Transformed into C. Made static. + * grub-core/kern/i386/pc/startup.S (grub_pxe_call): Receive + pxe_rm_entry as third argument. + (grub_bios_interrupt): New function. + * grub-core/kern/i386/qemu/mmap.c: Remove useless include. + * grub-core/kern/i386/qemu/startup.S (codestart): Do cli;hlt instead + of calling grub_stop. + * grub-core/kern/efi/efi.c (grub_halt): Moved from here ... + * grub-core/lib/efi/halt.c (grub_halt): ...here. + * grub-core/kern/emu/main.c (grub_halt): Moved from here ... + * grub-core/lib/emu/halt.c (grub_halt): ... here. + * grub-core/lib/i386/halt.c: Moved from here ... + * grub-core/lib/i386/halt.c: ... here. + * grub-core/kern/ieee1275/openfw.c (grub_halt): Moved from here ... + * grub-core/lib/ieee1275/halt.c (grub_halt): ... here. + * grub-core/loader/i386/pc/linux.c (grub_linux16_boot): Call + grub_stop_floppy. + * grub-core/loader/i386/xnu.c (guessfsb) [IEEE1275]: Enable. + * include/grub/i386/coreboot/init.h: Removed. + * include/grub/i386/multiboot/init.h: Likewise. + * include/grub/i386/pc/biosdisk.h: Removed all function prototypes. + * include/grub/i386/pc/init.h: Likewise except grub_gate_a20. + * include/grub/i386/pc/int.h: New file. + * include/grub/i386/pc/pxe.h (GRUB_PXE_SIGNATURE): New definition. + (grub_pxe_scan): Removed. + (grub_pxe_call): Update prototype. + * include/grub/i386/pc/vbe.h: Removed EXPORT_FUNC and useless + prototypes. + * include/grub/i386/pc/vga.h (grub_vga_set_mode): Removed. + * include/grub/i386/qemu/init.h: Removed. + * include/grub/mips/yeeloong/kernel.h (grub_reboot): Add missing + noreturn. + (grub_halt): Likewise. + * include/grub/misc.h (grub_halt): Removed EXPORT_FUNC. + (grub_reboot): Likewise. + * grub-core/kern/i386/coreboot/init.c (grub_stop_floppy): Moved from here... + * include/grub/i386/floppy.h (grub_stop_floppy): ...here. Inlined. + * grub-core/kern/i386/pc/startup.S (grub_hard_stop): Removed. + +2010-08-30 Robert Millan + + * NEWS: Document addition of ZFS support in `grub-install' and + `grub-mkconfig'. + +2010-08-30 BVK Chaitanya + + * conf/Makefile.common (CPPFLAGS_DEFAULT): Remove leading / from + dprintf output. + +2010-08-30 Vladimir Serbinenko + + Remove leftover embedding of font objects. + + * include/grub/kernel.h (OBJ_TYPE_FONT): Removed. + * util/grub-install.in (font): Removed. + * util/grub-mkimage.c (generate_image): Remove font support. All users + updated. + +2010-08-30 Vladimir Serbinenko + + Remove leftover embedding of font objects. + + * include/grub/kernel.h (OBJ_TYPE_FONT): Removed. + * util/grub-install.in (font): Removed. + * util/grub-mkimage.c (generate_image): Remove font support. All users + updated. + +2010-08-30 Vladimir Serbinenko + + * docs/grub.texi (Network): Fix reference to pxe_blksize. + Reported by: Ian Turner + +2010-08-30 Vladimir Serbinenko + + * grub-core/normal/menu.c (grub_wait_after_message): Add a 10 second + timeout to avoid indefinite boot stalling. + +2010-08-30 Vladimir Serbinenko + + * grub-core/normal/color.c (grub_env_write_color_normal): Fix a warning. + (grub_env_write_color_highlight): Likewise. + +2010-08-30 Vladimir Serbinenko + + * grub-core/normal/term.c (print_more): Return to normal and not + to standard state after printing "---MORE---". + +2010-08-30 Vladimir Serbinenko + + * grub-core/term/i386/vga_common.c (grub_console_setcolorstate): + Mask out the bit 0x80 since it has other meaning that specifiing color. + +2010-08-29 Vladimir Serbinenko + + New relocator. Allows for more kernel support and more straightforward + loader writing. + + * Makefile.am (BOOTTARGET): New variable. + (QEMU32): Likewise. + (linux.init.x86_64): New target. + (linux.init.i386): Likewise. + (multiboot.elf): Likewise. + (kfreebsd.elf): Likewise. + (kfreebsd.aout): Likewise. + (pc-chainloader.elf): Likewise. + (pc-chainloader.bin): Likewise. + (ntldr.elf): Likewise. + (ntldr.bin): Likewise. + (multiboot2.elf): Likewise. + (kfreebsd.init.x86_64): Likewise. + (kfreebsd.init.i386): Likewise. + (knetbsd.init.i386): Likewise. + (kopenbsd.init.i386): Likewise. + (knetbsd.init.x86_64): Likewise. + (kopenbsd.init.x86_64): Likewise. + (linux-initramfs.i386): Likewise. + (linux-initramfs.x86_64): Likewise. + (kfreebsd-mfsroot.i386.img): Likewise. + (knetbsd.image.i386): Likewise. + (kopenbsd.image.i386): Likewise. + (kopenbsd.image.x86_64): Likewise. + (knetbsd.miniroot-image.i386.img): Likewise. + (kfreebsd-mfsroot.x86_64.img): Likewise. + (knetbsd.image.x86_64): Likewise. + (knetbsd.miniroot-image.x86_64.img): Likewise. + (kfreebsd-mfsroot.i386.gz): Likewise. + (bootcheck-kfreebsd-i386): Likewise. + (kfreebsd-mfsroot.x86_64.gz): Likewise. + (bootcheck-kfreebsd-x86_64): Likewise. + (knetbsd.miniroot-image.i386.gz): Likewise. + (bootcheck-knetbsd-i386): Likewise. + (bootcheck-kopenbsd-i386): Likewise. + (bootcheck-kopenbsd-x86_64): Likewise. + (knetbsd.miniroot-image.x86_64.gz): Likewise. + (bootcheck-knetbsd-x86_64): Likewise. + (bootcheck-linux-i386): Likewise. + (bootcheck-linux-x86_64): Likewise. + (bootcheck-linux16-i386): Likewise. + (bootcheck-linux16-x86_64): Likewise. + (bootcheck-multiboot): Likewise. + (bootcheck-multiboot2): Likewise. + (bootcheck-kfreebsd-aout): Likewise. + (bootcheck-pc-chainloader): Likewise. + (bootcheck-ntldr): Likewise. + (CLEANFILES): Add new targets. + (BOOTCHECKS): New variable. + (.PHONY): Add bootchecks. + (SUCCESSFUL_BOOT_STRING): New variable. + (BOOTCHECK_TIMEOUT): Likewise. + (bootcheck): New target + * Makefile.util.def (grub-mkrescue): Enable on i386-multiboot. + * configure.ac: Correct efiemu excuse. + * docs/grub.texi (Supported kernels): New chapter. + * grub-core/Makefile.am (KERNEL_HEADER_FILES): Add + include/grub/mm_private.h. Simplify inclusion of + include/grub/boot.h, include/grub/loader.h + and include/grub/msdos_partition.h + (KERNEL_HEADER_FILES) [i386_coreboot]: + Remove include/grub/machine/loader.h. Add include/grub/i386/pit.h. + (KERNEL_HEADER_FILES) [i386_multiboot]: Likewise. + (KERNEL_HEADER_FILES) [i386_qemu]: Likewise. + (KERNEL_HEADER_FILES) [i386_ieee1275]: Remove + include/grub/machine/loader.h. + (KERNEL_HEADER_FILES) [x86_64-efi]: Likewise. + * grub-core/Makefile.core.def (kernel): Remove kern/i386/loader.S from + extra_dist. + (pci.mod): Enable on i386-multiboot. + (acpi.mod): Enable on i386-multiboot and i386-coreboot. + (efiemu.mod): Enable on i386-coreboot, i386-ieee1275, i386-multiboot and + i386-qemu. + (relocator.mod): Rewritten. + (aout.mod): Enable on all x86. + (bsd.mod): Likewise. + (ntldr.mod): New module. + (linux.mod): Use loader/i386/linux.c on all x86. + (xnu.mod): Enable on all x86. + (vga_text.mod): disable on EFI and QEMU. + * grub-core/efiemu/i386/coredetect.c: Remove useless include. + * grub-core/efiemu/i386/pc/cfgtables.c: Likewise. + * grub-core/efiemu/loadcore.c: Likewise. + * grub-core/efiemu/main.c: Likewise. + (grub_efiemu_exit_boot_services): Removed. + (grub_efiemu_finish_boot_services): Likewise. + * grub-core/efiemu/mm.c (grub_efiemu_finish_boot_services): New + function. + * grub-core/efiemu/i386/nocfgtables.c: New file. + * grub-core/kern/dl.c (grub_dl_unload_all): Removed. + * grub-core/kern/efi/efi.c (grub_efi_exit_boot_services): Removed. + (grub_efi_finish_boot_services): Moved from here ... + * grub-core/kern/efi/mm.c (grub_efi_finish_boot_services): ...here. + Fille finish memory map and related data. + (finish_mmap_buf): New variable. + (grub_efi_uintn_t finish_mmap_size): Likewise. + (grub_efi_uintn_t finish_key): Likewise. + (grub_efi_uintn_t finish_desc_size): Likewise. + (grub_efi_uint32_t finish_desc_version): Likewise. + (grub_efi_is_finished): Likewise. + (grub_efi_get_memory_map): Use saved memory map if EFI is already + finished. + * grub-core/kern/elf.c (grub_elf32_phdr_iterate): Make global. + (grub_elf64_phdr_iterate): Likewise. + * grub-core/kern/i386/coreboot/init.c (grub_os_area_addr): Removed. + (grub_os_area_size): Likewise. + (grub_machine_init): Don't reserve os area. + * grub-core/kern/i386/coreboot/startup.S: Don't include loader.S. + * grub-core/kern/i386/ieee1275/startup.S: Likewise. + * grub-core/kern/i386/loader.S: Removed. + * grub-core/kern/i386/pc/init.c (grub_os_area_addr): Removed. + (grub_os_area_size): Likewise. + (grub_machine_init): Don't reserve os area. + * grub-core/kern/i386/pc/startup.S (grub_chainloader_real_boot): + Don't call grub_dl_unload_all. + Don't include loader.S. + * grub-core/kern/i386/qemu/mmap.c (grub_machine_mmap_iterate): + Declare the memory after _end as available. + * grub-core/kern/mm.c (GRUB_MM_FREE_MAGIC): Moved from here... + * include/grub/mm_private.h (GRUB_MM_FREE_MAGIC): ... here. + (GRUB_MM_ALLOC_MAGIC): Moved from here... + * include/grub/mm_private.h (GRUB_MM_ALLOC_MAGIC): ... here. + * grub-core/kern/mm.c (grub_mm_header): Moved from here... + * include/grub/mm_private.h (grub_mm_header): ... here. + * grub-core/kern/mm.c (GRUB_MM_ALIGN): Moved from here... + * include/grub/mm_private.h (GRUB_MM_ALIGN): ... here. + * grub-core/kern/mm.c (grub_mm_region): Moved from here ... + (grub_mm_region): ..here. Removed addr. Added pre_size. + All users updated. + * grub-core/kern/mm.c (base): Renamed to ... + (grub_mm_base): ... this. Made global. + (grub_real_malloc): Alloc from end of region. + (grub_memalign): Don't attempt to malloc if grub_mm_base is NULL. + * grub-core/kern/powerpc/cache.S (grub_arch_sync_caches): Move to ... + * grub-core/kern/powerpc/cache_flush.S: ... here. + * grub-core/lib/efi/relocator.c: New file. + * grub-core/lib/i386/relocator.c: Rewritten. + * grub-core/lib/i386/relocator16.S: New file. + * grub-core/lib/i386/relocator32.S: Likewise. + * grub-core/lib/i386/relocator64.S: Likewise. + * grub-core/lib/i386/relocator_asm.S: Rewritten. + * grub-core/lib/i386/relocator_common.S: New file. + * grub-core/lib/ieee1275/relocator.c: Likewise. + * grub-core/lib/mips/relocator.c: Rewritten. + * grub-core/lib/mips/relocator_asm.S: Renamed variables and minor + stylistic adjustments. + * grub-core/lib/powerpc/relocator.c: New file. + * grub-core/lib/powerpc/relocator_asm.S: Likewise. + * grub-core/lib/relocator.c: Rewritten. + * grub-core/lib/x86_64/relocator_asm.S: New file. + * grub-core/loader/aout.c (grub_aout_load): Make load_addr a void *. + * grub-core/loader/i386/bsd.c (NETBSD_DEFAULT_VIDEO_MODE): New const. + (bsd_tag): New struct. + (tags): New variable. + (tags_last): Likewise. + (netbsd_module): New struct. + (netbsd_mods): New variable. + (netbsd_mods_last): Likewise. + (openbsd_opts): New parameter "serial". + (OPENBSD_SERIAL_ARG): New definition. + (netbsd_opts): New parameter "serial". + (NETBSD_SERIAL_ARG): New definition. + (grub_freebsd_add_meta): Reorganised into ... + (grub_bsd_add_meta): ...this. All users updated. + (grub_freebsd_add_mmap): Reorganised into ... + (generate_e820_mmap): ...this... + (grub_bsd_add_mmap): ...and this. All users updated. + (grub_freebsd_list_modules): Use tags. + (grub_netbsd_add_meta_module): New function. + (grub_netbsd_list_modules): Likewise. + (grub_freebsd_boot): Use relocator and finish EFI. + (grub_openbsd_boot): Likewise. + (grub_netbsd_setup_video): New function. + (grub_netbsd_add_modules): Likewise. + (grub_netbsd_boot): Use grub_netbsd_add_modules, relocator, netbsd_tags + and finish EFI. + (grub_bsd_unload): Unload tags. + (grub_bsd_load_aout): Use relocator. + (grub_bsd_elf32_size_hook): New function. + (grub_bsd_elf32_hook): Use relocator. + (grub_bsd_elf64_size_hook): New function. + (grub_bsd_elf64_hook): Use relocator. + (grub_bsd_load_elf): Use relocator and call grub_openbsd_find_ramdisk. + (grub_bsd_load): Zero-out openbsd_ramdisk. + (grub_bsd_load): Use relocator. + (grub_cmd_openbsd): Support serial. + (grub_cmd_netbsd): Support modules. + (grub_cmd_freebsd_module): Use relocator. + (grub_netbsd_module_load): New function. + (grub_cmd_netbsd_module): Likewise. + (grub_cmd_openbsd_ramdisk): Likewise. + (GRUB_MOD_INIT): Register knetbsd_module, knetbsd_module_elf and + kopenbsd_ramdisk. + (GRUB_MOD_FINI): Unregister new commands. + * grub-core/loader/i386/bsdXX.c (load): Remove useless checks. + (grub_freebsd_load_elfmodule_obj): Use relocator. + (grub_freebsd_load_elfmodule): Likewise. + (grub_freebsd_load_elf_meta): Likewise. + (grub_netbsd_load_elf_meta): New function. + (grub_openbsd_find_ramdisk): Likewise. + * grub-core/loader/i386/bsd_helper.S: Removed. + * grub-core/loader/i386/bsd_pagetable.c: Support relocator. + * grub-core/loader/i386/bsd_trampoline.S: Removed. + * grub-core/loader/i386/efi/linux.c: Likewise. + * grub-core/loader/i386/ieee1275/linux.c: Likewise. + * grub-core/loader/i386/linux.c (HAS_VGA_TEXT): New const. + (DEFAULT_VIDEO_MODE): Likewise. + (real_mode_target): New variable. + (prot_mode_target): Likewise. + (initrd_mem_target): Likewise. + (relocator): Likewise. + (efi_mmap_buf): Likewise. + (efi_mmap_size): Likewise. + (find_efi_mmap_size): Moved from grub-core/loader/i386/efi/linux.c. + (free_pages): Use relocator. + (allocate_pages): Account for efi_mmap and use relocator. Return error. + (grub_linux_setup_video): Return error. + (grub_linux_trampoline_start): Removed. + (grub_linux_trampoline_end): Likewise. + (grub_linux_boot): Use relocator and DEFAULT_VIDEO_MODE. Pass console + andd video parameters depending on firmware. + [GRUB_MACHINE_IEEE1275]: Pass OFW parameters. + [GRUB_MACHINE_EFI]: Pass EFI parameters. + (grub_cmd_linux) [GRUB_MACHINE_EFI]: Likewise. + (grub_cmd_initrd): Use relocator. + * grub-core/loader/i386/linux_trampoline.S: Removed. + * grub-core/loader/i386/multiboot_mbi.c (elf_sec_num): New variable. + (elf_sec_entsize): Likewise. + (elf_sec_shstrndx): Likewise. + (elf_sections): Likewise. + (grub_multiboot_load): Use relocator. + (grub_multiboot_get_mbi_size): Account for sections. + (grub_multiboot_make_mbi): Use relocator and support sections. + (grub_multiboot_add_elfsyms): New function. + (grub_multiboot_free_mbi): Free sections. + * grub-core/loader/i386/pc/linux.c (relocator): New variable. + (grub_linux_real_target): Likewise. + (grub_linux_real_chunk): Likewise. + (grub_linux16_prot_size): Likewise. + (grub_linux16_boot): Use relocator. + (grub_linux_unload): Unload relocator. + (grub_cmd_linux): Use relocator. + (grub_cmd_initrd): Likewise. + * grub-core/loader/i386/pc/ntldr.c: New file. + * grub-core/loader/i386/xnu.c (guessfsb) [GRUB_MACHINE_IEEE1275]: + Don't try to guess CPU frequency. + (grub_xnu_set_video): Stretch bitmap. + (grub_xnu_boot): Use relocator. + * grub-core/loader/mips/linux.c (grub_linux_boot): Use relocator. + (grub_linux_unload): Free relocator. + (grub_linux_load32): Use relocator. + (grub_linux_load64): Likewise. + (grub_cmd_initrd): Likewise. + * grub-core/loader/multiboot.c (grub_multiboot_boot): Use relocator. + (grub_multiboot_unload): Unload relocator. + (grub_cmd_multiboot): Use relocator. + (grub_cmd_module): Likewise. + * grub-core/loader/multiboot_elfxx.c (grub_multiboot_load_elfXX): + Use relocator and support sections. + * grub-core/loader/multiboot_mbi2.c(elf_sec_num): New variable. + (elf_sec_entsize): Likewise. + (elf_sec_shstrndx): Likewise. + (elf_sections): Likewise. + (grub_multiboot_load): Use relocator. + (grub_multiboot_get_mbi_size): Account for sections. + (grub_multiboot_make_mbi): Use relocator and support sections. + (grub_multiboot_add_elfsyms): New function. + * grub-core/loader/powerpc/ieee1275/linux.c: Remove useless include. + * grub-core/loader/sparc64/ieee1275/linux.c: Likewise. + * grub-core/loader/xnu.c (grub_xnu_heap_malloc): Use relocator. + Prototype changed. All users updated. + (grub_xnu_align_heap): Simplified. + (grub_xnu_writetree_toheap): Likewise. + (grub_xnu_unload): Unload relocator. + (grub_cmd_xnu_kernel): Use relocator. + (grub_cmd_xnu_kernel64): Likewise. + (grub_xnu_register_memory): Simplified. + * grub-core/loader/xnu_resume.c (grub_xnu_resume): Use relocator. + * grub-core/term/efi/console.c (grub_console_putchar): Abort if + EFI is finished. + (grub_console_checkkey): Likewise. + (grub_console_getkey): Likewise. + (grub_console_getwh): Likewise. + (grub_console_getxy): Likewise. + (grub_console_gotoxy): Likewise. + (grub_console_cls): Likewise. + (grub_console_setcolorstate): Likewise. + (grub_console_setcursor): Likewise. + * grub-core/term/ns8250.c (grub_ns8250_hw_get_port): New function. + * grub-core/tests/boot/kbsd.init-i386.S: New file. + * grub-core/tests/boot/kbsd.init-x86_64.S: Likewise. + * grub-core/tests/boot/kbsd.spec.txt: Likewise. + * grub-core/tests/boot/kernel-8086.S: Likewise. + * grub-core/tests/boot/kernel-i386.S: Likewise. + * grub-core/tests/boot/kfreebsd-aout.cfg: Likewise. + * grub-core/tests/boot/kfreebsd.cfg: Likewise. + * grub-core/tests/boot/kfreebsd.init-i386.S: Likewise. + * grub-core/tests/boot/kfreebsd.init-x86_64.S: Likewise. + * grub-core/tests/boot/knetbsd.cfg: Likewise. + * grub-core/tests/boot/kopenbsd.cfg: Likewise. + * grub-core/tests/boot/kopenbsdlabel.txt: Likewise. + * grub-core/tests/boot/linux.cfg: Likewise. + * grub-core/tests/boot/linux.init-i386.S: Likewise. + * grub-core/tests/boot/linux.init-x86_64.S: Likewise. + * grub-core/tests/boot/linux16.cfg: Likewise. + * grub-core/tests/boot/multiboot.cfg: Likewise. + * grub-core/tests/boot/multiboot2.cfg: Likewise. + * grub-core/tests/boot/ntldr.cfg: Likewise. + * grub-core/tests/boot/pc-chainloader.cfg: Likewise. + * include/grub/aout.h (grub_aout_load): Make load_addr a void *. + * include/grub/autoefi.h (grub_autoefi_finish_boot_services): + New definition. + * include/grub/dl.h (grub_dl_unload_all): Removed. + * include/grub/efi/efi.h (grub_efi_exit_boot_services): Likewise. + (grub_efi_finish_boot_services): Change prototype. + (grub_efi_is_finished): New variable. + * include/grub/efiemu/efiemu.h (grub_efiemu_finish_boot_services): + Changed prototype. + (grub_efiemu_finish_boot_services): Removed. + (grub_machine_efiemu_init_tables): New prototype. + * include/grub/elfload.h (grub_elf32_phdr_iterate): Likewise. + (grub_elf64_phdr_iterate): Likewise. + * include/grub/i386/bsd.h: Include relocator.h. + (freebsd_tag_header): New struct. + (grub_openbsd_bios_mmap): Removed. + (grub_unix_real_boot): Removed. + (grub_freebsd_load_elfmodule32): Changed prototype. + (grub_freebsd_load_elfmodule_obj64): Likewise. + (grub_freebsd_load_elf_meta32): Likewise. + (grub_freebsd_load_elf_meta64): Likewise. + (grub_freebsd_add_meta): Removed. + (grub_netbsd_load_elf_meta32): New prototype. + (grub_netbsd_load_elf_meta64): Likewise. + (grub_bsd_add_meta): Likewise. + (grub_openbsd_ramdisk_descriptor): New struct. + (grub_openbsd_find_ramdisk32): New prototype. + (grub_openbsd_find_ramdisk64): Likewise. + * include/grub/i386/coreboot/loader.h: Removed. + * include/grub/i386/efi/loader.h: Likewise. + * include/grub/i386/ieee1275/loader.h: Likewise. + * include/grub/i386/linux.h (linux_kernel_header): Change void * + to grub_uint32_t. + * include/grub/i386/loader.h: Removed. + * include/grub/i386/memory.h (GRUB_MEMORY_CPU_CR4_PAE_ON): Correct the + value. + (GRUB_MEMORY_CPU_CR4_PSE_ON): New definition. + (grub_phys_addr_t): New type. + (grub_vtop): New inline function. + (grub_map_memory): Likewise. + (grub_unmap_memory): Likewise. + * include/grub/i386/multiboot/loader.h: Removed. + * include/grub/i386/netbsd_bootinfo.h (NETBSD_BTINFO_BOOTDISK): Removed. + (NETBSD_BTINFO_CONSOLE): New definition. + (NETBSD_BTINFO_SYMTAB): Likewise. + (NETBSD_BTINFO_MODULES): Likewise. + (NETBSD_BTINFO_FRAMEBUF): Likewise. + (grub_netbsd_bootinfo): New struct. + (grub_netbsd_btinfo_common): Use explicit bitsize. + (grub_netbsd_btinfo_mmap_entry): Removed. + (GRUB_NETBSD_MAX_BOOTPATH_LEN): New definition. + (grub_netbsd_btinfo_bootdisk): New struct. + (grub_netbsd_btinfo_symtab): Likewise. + (grub_netbsd_btinfo_serial): Likewise. + (grub_netbsd_btinfo_modules): Likewise. + (grub_netbsd_btinfo_framebuf): Likewise. + (GRUB_NETBSD_MAX_ROOTDEVICE_LEN): New definition. + * include/grub/i386/openbsd_bootarg.h (OPENBSD_BOOTARG_CONSOLE): + Likewise. + (grub_openbsd_bootargs): Use explicit bitsize. + (grub_openbsd_bootarg_console): New struct. + (GRUB_OPENBSD_COM_MAJOR): New definition. + (GRUB_OPENBSD_VGA_MAJOR): Likewise. + * include/grub/i386/pc/efiemu.h: Removed. + * include/grub/i386/pc/loader.h: Don't include cpu/loader.h. + * include/grub/i386/qemu/loader.h: Removed. + * include/grub/i386/relocator.h: Rewritten. + * include/grub/i386/xnu.h (grub_xnu_heap_will_be_at): Removed. + * include/grub/mips/memory.h: New file. + * include/grub/mips/multiboot.h: Rewritten. + * include/grub/mips/relocator.h: Rewritten. + * include/grub/mips/yeeloong/memory.h (grub_phys_addr_t): New type. + (grub_vtop): New function. + (grub_map_memory): Likewise. + (grub_unmap_memory): Likewise. + * include/grub/misc.h (ALIGN_DOWN): New definition. + * include/grub/mm.h (grub_mm_check_real): New proto. + (GRUB_MM_CHECK): New definition. + * include/grub/mm_private.h: New file. + * include/grub/multiboot.h (grub_multiboot_relocator): New variable. + (grub_multiboot_get_mbi_size): Removed. + (grub_multiboot_make_mbi): Change prottype. + (grub_multiboot_set_accepts_video): New proto. + (grub_multiboot_add_elfsyms): Likewise. + (grub_multiboot_payload_eip): New variable. + * include/grub/ns8250.h (grub_ns8250_hw_get_port) [!ASM_FILE]: + New prototype. + * include/grub/offsets.h (GRUB_KERNEL_I386_MULTIBOOT_PREFIX): + New definition. + (GRUB_KERNEL_I386_MULTIBOOT_DATA_END): Likewise. + (GRUB_KERNEL_I386_MULTIBOOT_MOD_ALIGN): Likewise. + * include/grub/powerpc/ieee1275/loader.h: Removed. + * include/grub/powerpc/memory.h: New file. + * include/grub/powerpc/relocator.h: Likewise. + * include/grub/relocator.h: Likewise. + * include/grub/relocator_private.h: Likewise. + * include/grub/sparc64/ieee1275/loader.h: Removed. + * include/grub/x86_64/memory.h: New file. + * include/grub/xnu.h (grub_xnu_writetree_toheap): Changed prototype. + (grub_xnu_heap_malloc): Likewise. + (grub_xnu_heap_real_start): Removed. + (grub_xnu_heap_start): Likewise. + (grub_xnu_relocator): New variable. + (grub_xnu_heap_target_start): Likewise. + * tests/util/grub-shell.in: Support non-pc. + * util/grub-mkimage.c (image_targets): Fix multiboot target. + +2010-08-29 Vladimir Serbinenko + + * grub-core/normal/charset.c (grub_utf8_to_ucs4_alloc): Avoid deadloop + on malloc error. + (grub_bidi_logical_to_visual): Check that malloc succeded. + * grub-core/normal/term.c (grub_puts_terminal): Fix fallback to dumb + puts. + (grub_xputs_normal): Likewise. + +2010-08-29 Vladimir Serbinenko + + * grub-core/Makefile.core.def (kernel): Add kern/mips/cache_flush.S to + extra_dist. + +2010-08-29 Vladimir Serbinenko + + * grub-core/efiemu/runtime/efiemu.sh: Removed. + +2010-08-29 Vladimir Serbinenko + + * Makefile.util.def (grub-ofpathname): Add missing ldadd. + +2010-08-29 Vladimir Serbinenko + + * grub-core/kern/misc.c (grub_real_dprintf): Always refresh after + dprintf. + +2010-08-29 BVK Chaitanya + + * Makefile.util.def: Use ldadd instead of ldflags for libraries. + +2010-08-28 Vladimir Serbinenko + + * grub-core/normal/term.c (print_more): Fix a memory leak. + (grub_puts_terminal): Revert to dumb puts if memory allocation fails. + (grub_xputs_normal): Likewise. + +2010-08-28 Vladimir Serbinenko + + * grub-core/script/lexer.c (grub_script_lexer_init): Don't look before + the begining of the string + +2010-08-28 Vladimir Serbinenko + + * grub-core/script/script.c (grub_script_parse): Free parsed on + failure. + +2010-08-28 Vladimir Serbinenko + + * grub-core/normal/completion.c (grub_normal_do_completion): Free argv + on failure. + +2010-08-28 Vladimir Serbinenko + + * grub-core/normal/cmdline.c (grub_cmdline_get): Free cl_terms on + return. + +2010-08-28 Vladimir Serbinenko + + * grub-core/term/gfxterm.c (grub_gfxterm_term_fini): Free the text buffer. + (scroll_up): Fix a memory leak. + +2010-08-28 Vladimir Serbinenko + + * grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Handle grub_disk_read + errors. + +2010-08-27 Vladimir Serbinenko + + Handle USB pendrives exposed as floppies. + + * grub-core/boot/i386/pc/boot.S: Check LBA even on what appears to be + floppy. + * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_open): Likewise. + Check for partitions on all devices. + +2010-08-25 Vladimir Serbinenko + + * grub-core/term/ieee1275/ofconsole.c (put): Correct prototype. + (readkey): Likewise. + +2010-08-25 BVK Chaitanya + + Multiple variable names support to "export" command. + + * normal/context.c (grub_cmd_export): "export" command supports + multiple variable names. + +2010-08-23 Samuel Thibault + + * util/grub.d/30_os-prober.in: Fix conversion from grub-probe + --target=drive output to Mach device name. + +2010-08-23 BVK Chaitanya + + New Automake based build system for GRUB. + + * ABOUT-NLS: New file. + * Makefile.am: New file. GRUB host utils' rules that doesn't fit + in Makefile.util.def file. + * Makefile.util.def: New file. Autogen build definitions file for + GRUB host utils. + * conf/Makefile.common: New file. Common variables for GRUB host + utils and target modules. + * conf/Makefile.extra-dist: New file. Extra files for make dist. + * docs/Makefile.am: New file. Automake file for docs. + * gentpl.py: New file. Python script to generate Autogen + template. + * grub-core/Makefile.am: New file. GRUB target modules' rules + that doesn't fit in Makefile.core.def file. + * grub-core/Makefile.core.def: New file. Autogen build + definitions file for GRUB target modules. + * grub-core/lib/setjmp.S: New file. Wrapper for target_cpu + specific setjmp.S file. + * po/Makefile.am: New file. + + * .bzrignore: New ignores. + * INSTALL: New requirements, without Ruby. + * acinclude.m4: Use TARGET_IMG_BASE_LDOPT variable instead. + * autogen.sh: Updated to invoke autogen as necessary. + * configure.ac: Separate *FLAGS with HOST_ and TARGET_ prefixes, + and defines for Automake conditionals. + * geninit.sh: Refactoring. + + * include/grub/dl.h: Allow build rules to define GRUB_MOD_* if + necessary. + * include/grub/emu/getroot.h (grub_make_system_path_relative_to_its_root): + New prototype. + + * include/grub/test.h: Fix functional test modules' naming. + * grub-core/tests/example_functional_test.c: Fix test module name. + + * util/misc.c: Hosted versions' of grub functions for libgrub.a + * tests/lib/unit_test.c: Remove hosted versions of grub functions. + * util/grub-editenv.c: Likewise. + * util/grub-fstest.c: Likewise. + * util/grub-mkdevicemap.c: Likewise. + * util/grub-mkfont.c: Likewise. + * util/grub-mkimage.c: Likewise. + * util/grub-mkpasswd-pbkdf2.c: Likewise. + * util/grub-probe.c: Likewise. + * util/grub-script-check.c: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/sparc64/ieee1275/grub-setup.c: Likewise. + + * tests/util/grub-shell.in: Fix override directory path. + * util/grub-mkrescue.in: Replace @pkglib_DATA@ with files. + * util/import_gcry.py: Create Makefile.gcry.def file instead. + + * util/lvm.c: Update #includes. + * util/raid.c: Likewise. + * util/resolve.c: Likewise. + * grub-core/bus/emu/pci.c: Likewise. + * grub-core/lib/posix_wrap/stdlib.h: Likewise. + * grub-core/lib/posix_wrap/string.h: Likewise. + * grub-core/kern/emu/main.c: Likewise. + + * grub-core/gensymlist.sh: New file. Script for generating kernel + symbols file. + * grub-core/genmoddep.awk: Support new kernel_syms.lst format. + + * grub-core/gentrigtables.c: Fix unused variable warnings. + + * Makefile.in: Removed. + * conf/any-emu.rmk: Removed. + * conf/common.rmk: Removed. + * conf/i386-coreboot.rmk: Removed. + * conf/i386-efi.rmk: Removed. + * conf/i386-ieee1275.rmk: Removed. + * conf/i386-multiboot.rmk: Removed. + * conf/i386-pc.rmk: Removed. + * conf/i386-qemu.rmk: Removed. + * conf/i386.rmk: Removed. + * conf/mips-yeeloong.rmk: Removed. + * conf/mips.rmk: Removed. + * conf/powerpc-ieee1275.rmk: Removed. + * conf/sparc64-ieee1275.rmk: Removed. + * conf/tests.rmk: Removed. + * conf/x86-efi.rmk: Removed. + * conf/x86_64-efi.rmk: Removed. + * gendistlist.sh: Removed. + * geninitheader.sh: Removed. + * genkernsyms.sh.in: Removed. + * genmk.rb: Removed. + * gensymlist.sh.in: Removed. + * mkinstalldirs: Removed. + * boot: Moved ... + * grub-core/boot: ... to here. + * bus: Moved ... + * grub-core/bus: ... to here. + * commands: Moved ... + * grub-core/commands: ... to here. + * disk: Moved ... + * grub-core/disk: ... to here. + * efiemu: Moved ... + * grub-core/efiemu: ... to here. + * font: Moved ... + * grub-core/font: ... to here. + * fs: Moved ... + * grub-core/fs: ... to here. + * gencmdlist.sh: Moved ... + * grub-core/gencmdlist.sh: ... to here. + * genemuinit.sh: Moved ... + * grub-core/genemuinit.sh: ... to here. + * genemuinitheader.sh: Moved ... + * grub-core/genemuinitheader.sh: ... to here. + * genfslist.sh: Moved ... + * grub-core/genfslist.sh: ... to here. + * genhandlerlist.sh: Moved ... + * grub-core/genhandlerlist.sh: ... to here. + * genmoddep.awk: Moved ... + * grub-core/genmoddep.awk: ... to here. + * genmodsrc.sh: Moved ... + * grub-core/genmodsrc.sh: ... to here. + * genpartmaplist.sh: Moved ... + * grub-core/genpartmaplist.sh: ... to here. + * genparttoollist.sh: Moved ... + * grub-core/genparttoollist.sh: ... to here. + * genterminallist.sh: Moved ... + * grub-core/genterminallist.sh: ... to here. + * gentrigtables.c: Moved ... + * grub-core/gentrigtables.c: ... to here. + * genvideolist.sh: Moved ... + * grub-core/genvideolist.sh: ... to here. + * gettext: Moved ... + * grub-core/gettext: ... to here. + * gfxmenu: Moved ... + * grub-core/gfxmenu: ... to here. + * gnulib: Moved ... + * grub-core/gnulib: ... to here. + * hello: Moved ... + * grub-core/hello: ... to here. + * hook: Moved ... + * grub-core/hook: ... to here. + * io: Moved ... + * grub-core/io: ... to here. + * kern: Moved ... + * grub-core/kern: ... to here. + * lib: Moved ... + * grub-core/lib: ... to here. + * loader: Moved ... + * grub-core/loader: ... to here. + * mmap: Moved ... + * grub-core/mmap: ... to here. + * normal: Moved ... + * grub-core/normal: ... to here. + * partmap: Moved ... + * grub-core/partmap: ... to here. + * parttool: Moved ... + * grub-core/parttool: ... to here. + * script: Moved ... + * grub-core/script: ... to here. + * term: Moved ... + * grub-core/term: ... to here + * tests/example_functional_test.c: Moved ... + * grub-core/tests/example_functional_test.c: ... to here. + * tests/lib/functional_test.c: Moved ... + * grub-core/tests/lib/functional_test.c: ... to here. + * tests/lib/test.c: Moved ... + * grub-core/tests/lib/test.c: ... to here. + * video: Moved ... + * grub-core/video: ... to here. + +2010-08-23 BVK Chaitanya + + Replace --enable-grub-emu-modules with grub-emu-lite. + + * kern/emu/cache.S: New file. Wrapper for $target_cpu specific + cache.S. + + * include/grub/emu/misc.h (grub_emu_init): New prototype. + * kern/emu/full.c: New file. For grub-emu specific initialization. + * kern/emu/lite.c: New file. For grub-emu-lite initialization. + * kern/emu/main.c: Call initialization function grub_emu_init. + + * Makefile.in: Include grub-emu-lite in install. + * commands/parttool.c: Use grub_no_autoload to differentiate + between grub-emu and grub-emu-lite. + * include/grub/misc.h: New variable grub_no_autoload. + + * conf/any-emu.rmk: New rules for grub-emu-lite. + * configure.ac: Remove --enable-grub-emu-modules. + * genmk.rb: Cleanup unnecessary rules. + * include/grub/dl.h: Remove GRUB_NO_MODULES macro. + + * normal/main.c: Don't load list files on grub-emu-lite. + * util/misc.c (grub_arch_sync_caches): Removed. + +2010-08-23 Colin Watson + + * kern/mips/startup.S (grub_prefix): Update comment to refer to + grub-mkimage rather than grub-mkelfimage. + * kern/powerpc/ieee1275/startup.S (grub_prefix): Likewise. + +2010-08-22 Vladimir Serbinenko + + * term/at_keyboard.c (grub_at_keyboard_getkey_noblock): Don't discard + a key after CapsLock or NumLock. It's just a qemu bug. + +2010-08-21 Vladimir Serbinenko + + * include/grub/usb.h (grub_usb_device): Add 'data' field back. It's + needed by libusb wrapper. + +2010-08-21 Samuel Thibault + + * docs/grub.texi (GNU/Hurd): Document booting GNU/Hurd. + +2010-08-21 Vladimir Serbinenko + + * loader/multiboot.c (grub_cmd_module): Don't unzip module if + --nounzip is passed. + +2010-08-20 Vladimir Serbinenko + + USB hotunplugging and USB serial support. + + * bus/usb/ohci.c (grub_ohci_transfer): Fill *actual and respect timeout. + * bus/usb/uhci.c (grub_free_queue): Compute *actual. + (grub_uhci_transfer): Respect timeout and set *actual. + * bus/usb/usb.c (grub_usb_device_initialize): Correctly skip fields of + non-standard length. + (grub_usb_device_attach): Autoload modules. + (GRUB_MOD_INIT): Set grub_term_poll_usb. + (GRUB_MOD_FINI): Unset grub_term_poll_usb. + * bus/usb/usbhub.c (grub_usb_hub): Replace speed with devices. All + users updated. + (grub_usb_add_hub): Fill nports and children. + (attach_root_port): Receive hub instead of controller. + All users updated. Fill hub->devices. + (grub_usb_root_hub): Allocate hub->devices. + (detach_device): New function. + (poll_nonroot_hub): Fill children and detach devices. + * bus/usb/usbtrans.c (grub_usb_bulk_readwrite): Accept timeout and + actual arguments. All users updated. + (grub_usb_bulk_read_extended): New function. + * bus/usb/serial/common.c: New file. + * bus/usb/serial/ftdi.c: Likewise. + * bus/usb/serial/pl2303.c: Likewise. + * commands/terminal.c (handle_command): Support wildcard. + * commands/usbtest.c: Output "Unknown" instead of empty string. + * conf/any-emu.rmk (pkglib_MODULES): Add usbserial_common.mod. + (usbserial_common_mod_SOURCES): New variable. + (usbserial_common_mod_CFLAGS): Likewise. + (usbserial_common_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add usbserial_pl2303.mod. + (usbserial_pl2303_mod_SOURCES): New variable. + (usbserial_pl2303_mod_CFLAGS): Likewise. + (usbserial_pl2303_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add usbserial_ftdi.mod. + (usbserial_ftdi_mod_SOURCES): New variable. + (usbserial_ftdi_mod_CFLAGS): Likewise. + (usbserial_ftdi_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add serial.mod. + (serial_mod_SOURCES): New variable. + (serial_mod_CFLAGS): Likewise. + (serial_mod_LDFLAGS): Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/mips-yeeloong.rmk: Likewise. + * conf/i386.rmk (serial_mod_SOURCES): Add term/ns8250.c. + * conf/mips-yeeloong.rmk (kernel_img_SOURCES): Likewise. + * disk/usbms.c (first_available_slot): New variable. + (grub_usbms_attach): Don't reuse free slots due to potential cache + problems. + * include/grub/serial.h: Moved to .. + * include/grub/ns8250.h: ...this. + * include/grub/serial.h: New file. + * include/grub/term.h (grub_term_poll_usb): New variable. + * include/grub/terminfo.h (grub_terminfo_input_state): Pass term to + readkey. All users updated. + (grub_terminfo_output_state): Pass term to put. + * include/grub/usb.h (GRUB_USB_REQTYPE): New enum. + (grub_usb_controller_dev): Add timeout and actual arguments to + transfer. All users updated. + (grub_usb_interface): New field detach_data. + (grub_usb_device): New fields children and nports. + (grub_usb_ep_type_t): New type. + (grub_usb_get_ep_type): New function. + (grub_usb_bulk_read_extended): Likewise. + * include/grub/usbdesc.h (grub_usb_desc): New type. + * include/grub/usbserial.h: New file. + * include/grub/usbtrans.h (grub_usb_transaction): New field preceding. + * kern/term.c (grub_term_poll_usb): New variable. + (grub_getkey): Call grub_term_poll_usb if set. + (grub_checkkey): Likewise. + (grub_getkeystatus): Likewise. + * term/serial.c: Moved controller-specific parts to ... + * term/ns8250.c: ... here. + * term/serial.c: Mostly rewritten. + * term/usb_keyboard.c: Reorganised to use GET_REPORT only on attaching + according to spec. + +2010-08-20 Robert Millan + + Make kFreeBSD code more generic to support ext2fs as root, ufs as + a separate module and maybe other interesting combinations. + + * util/grub.d/10_kfreebsd.in (load_kfreebsd_module): New function. + (kfreebsd_entry): Use load_kfreebsd_module() to load modules. + (kfreebsd_entry): Add generic filesystem module load routine. + Map GRUB `ext2' to kFreeBSD `ext2fs'. + +2010-08-20 Colin Watson + + * commands/i386/pc/sendkey.c (keysym_table): Rename "numlock" to + "numcenter" (I misunderstood the purpose of this entry). + * docs/grub.texi (sendkey): Likewise. + +2010-08-20 Colin Watson + + * commands/i386/pc/sendkey.c (options): Remove "keep" from all + status flag options; simply omitting the option is equivalent and + simpler. Rename "wait" to "pause". Rename "sysreq" to "sysrq". + (keysym_table): Rename "num5numlock" to "numlock". + (grub_cmd_sendkey): Reinitialise `andmask' and `ormask', so that we + can uniformly say that only the last of multiple `sendkey' + invocations has any effect. + * docs/grub.texi (sendkey): New section. + +2010-08-19 Colin Watson + + * commands/i386/pc/sendkey.c (options): Fix three typos. + +2010-08-19 Vladimir Serbinenko + + Implement sendkey support. + + * commands/i386/pc/sendkey.c: New file. + * conf/i386-pc.rmk (pkglib_MODULES): Add sendkey.mod. + (sendkey_mod_SOURCES): New variable. + (sendkey_mod_CFLAGS): Likewise. + (sendkey_mod_LDFLAGS): Likewise. + +2010-08-18 Colin Watson + + * configure.ac: Move AM_INIT_AUTOMAKE after AC_CANONICAL_TARGET to + fix warnings from Autoconf. + +2010-08-18 Colin Watson + + * acinclude.m4 (grub_ASM_USCORE): Use a more accurate grep pattern, + to avoid false positives with some assemblers that output things + like "someprefix_func" as part of their output. + +2010-08-15 Robert Millan + + * kern/emu/misc.c (grub_get_libzfs_handle): Handle libzfs_init() + errors. + * kern/emu/getroot.c (find_root_device_from_libzfs): Handle + grub_get_libzfs_handle() errors. + +2010-08-14 Robert Millan + + * kern/emu/misc.c (grub_find_zpool_from_dir): Abort function if + filesystem is not ZFS. + +2010-08-12 BVK Chaitanya + + Fix for misspelled color names defaulting to black/black (bug + reported by Doug Nazar) + + * include/grub/normal.h (grub_parse_color_name_pair): Add return + status to prototype. + * normal/color.c (grub_parse_color_name_pair): Return failure + status. + (grub_env_write_color_normal): Ignore bad color names. + (grub_env_write_color_highlight): Likewise. + * normal/main.c (GRUB_MOD_INIT): Set default color names. + +2010-08-12 BVK Chaitanya + + "shift" command support to GRUB script. + + * include/grub/script_sh.h (grub_script_shift): New prototype. + * script/execute.c (grub_script_shift): New function. + * script/main.c (grub_script_init): Register shift command. + (grub_script_fini): Unregister shift command. + * util/grub-script-check.c (grub_script_cmd_shift): New function. + + * tests/grub_script_shift.in: New testcase. + * conf/tests.rmk: Rules for new testcase. + +2010-08-12 BVK Chaitanya + + "continue" command support to GRUB script. + + * script/execute.c (grub_script_execute_cmdwhile): Continue support. + (grub_script_break): Continue support. + * script/main.c (grub_script_init): Register continue command. + (grub_script_fini): Unregister continue command. + + * tests/grub_script_continue.in: New testcase. + * conf/tests.rmk: Rules for new testcase. + +2010-08-12 BVK Chaitanya + + "break" command support to GRUB script. + + * conf/common.rmk: Rule updates to grub-script-check. + * include/grub/misc.h (grub_min): New function. + * include/grub/script_sh.h (grub_script_init): New prototype. + (grub_script_fini): New prototype. + (grub_script_break): New prototype. + * script/main.c (grub_script_init): New function. + (grub_script_fini): New function. + * script/execute.c (grub_script_break): New function. + * normal/main.c: Calls to grub_script_{init,fini}. + * util/grub-script-check.c (grub_script_break): New function. + + * tests/grub_script_break.in: New testcase. + * conf/tests.rmk: Rules for new test case. + +2010-08-12 BVK Chaitanya + + Function parameters support to GRUB script. + + * script/yylex.l (VARIABLE): Regular expression update. + * script/function.c (grub_script_function_call): Moved ... + * script/execute.c (grub_script_function_call): ... to here. + (grub_script_execute_arglist_to_argv): Removed. + (grub_script_arglist_to_argv): New function. + * script/argv.c: New file. + (grub_script_argv_free): New function. + (grub_script_argv_next): Likewise. + (grub_script_argv_append): Likewise. + (grub_script_argv_split_append): Likewise. + * include/grub/script_sh.h (grub_script_argv): New struct. + (grub_script_argv_free): New function. + (grub_script_argv_next): Likewise. + (grub_script_argv_append): Likewise. + (grub_script_argv_split_append): Likewise. + + * conf/common.rmk (normal.mod): New source script/argv.c. + + * tests/grub_script_echo1.in: More tests. + * tests/grub_script_vars1.in: Likewise. + * tests/grub_script_functions.in: New test case. + * conf/tests.rmk: Rules for new testcase. + +2010-08-12 BVK Chaitanya + + Remove grub_script_cmdblock struct. + + * include/grub/script_sh.h: Remove grub_script_cmdblock. + * script/parser.y: Likewise. + * script/execute.c: Rename cmdblock suffix to cmdlist. + * script/script.c: Likewise. + * util/grub-script-check.c: Likewise. + +2010-08-11 Yves Blusseau + + * .bzrignore: add grub-macho2img + +2010-08-11 Vladimir Serbinenko + + * kern/i386/qemu/init.c (grub_qemu_init_cirrus): Fix compilation error. + +2010-08-11 Vladimir Serbinenko + + Remove the dump of sm712 initialisation sequence. + + * include/grub/pci.h (GRUB_PCI_CLASS_SUBCLASS_VGA): New const. + * include/grub/vga.h (GRUB_VGA_IO_ARX_READ): New register. + (GRUB_VGA_IO_MISC_WRITE): Likewise. + (GRUB_VGA_CR_*): Added many registers. + (GRUB_VGA_SR_*): Likewise. + (GRUB_VGA_GR_*): Likewise. + (grub_vga_write_arx): New function. + (grub_video_hw_config): New struct. + (grub_vga_set_geometry): New function. + * kern/i386/qemu/init.c (load_palette): Use grub_vga_write_arx and + GRUB_PCI_CLASS_SUBCLASS_VGA. + * video/cirrus.c (grub_video_cirrus_setup): Use grub_vga_set_geometry. + * video/sm712.c (grub_sm712_write_reg): New function + (grub_sm712_read_reg): Likewise. + (grub_sm712_sr_write): Likewise. + (grub_sm712_gr_write): Likewise. + (grub_sm712_cr_write): Likewise. + (grub_sm712_write_arx): Likewise. + (grub_sm712_cr_shadow_write): Likewise. + (grub_sm712_write_dda_lookup): Likewise. + (grub_video_sm712_setup): Initialise the video rather then + blindly replay the dump. + (main) [TEST]: Add a routine to be able to compile as standalone for + tests. + * video/sm712_init.c (sm712_init): Removed. + (sm712_sr_seq1): New array. + (sm712_sr_seq2): Likewise. + +2010-08-10 Vladimir Serbinenko + + * include/grub/vga.h: Add missing grub/pci.h include. + +2010-08-10 Yves Blusseau + + * util/grub-macho2img.c (main): fix typo + +2010-08-10 Vladimir Serbinenko + + * include/grub/vga.h (grub_vga_gr_write): Add GRUB_MACHINE_PCI_IO_BASE. + (grub_vga_gr_read): Likewise. + (grub_vga_cr_write): Likewise. + (grub_vga_cr_read): Likewise. + (grub_vga_sr_write): Likewise. + (grub_vga_sr_read): Likewise. + (grub_vga_palette_read): Likewise. + (grub_vga_palette_write): Likewise. + * video/sm712.c (GRUB_SM712_REG_BASE): New definition. + (grub_sm712_sr_read): New function. + (grub_video_sm712_setup): Use grub_vga_sr_write and grub_sm712_sr_read. + * video/sm712_init.c (sm712_init): Substract GRUB_MACHINE_PCI_IO_BASE. + +2010-08-09 Robert Millan + + * kern/emu/misc.c (grub_make_system_path_relative_to_its_root): Filter + out unused variables on non-ZFS build. + +2010-08-08 Robert Millan + + Fix path generation for sub-filesystems in ZFS. + + * kern/emu/misc.c (grub_make_system_path_relative_to_its_root): Add + missing slash. + +2010-08-08 Robert Millan + + * util/grub-fstest.c (read_file, cmd_cmp): Improve error message. + +2010-08-08 Robert Millan + + * util/grub.d/10_kfreebsd.in: When files required for ZFS do not + exist, issue a proper error message (rely on `ls' for translated + strings). + +2010-08-08 Robert Millan + + Fix grub-probe invocation. + + * util/grub.d/10_kfreebsd.in: s/label/fs_label/g. + +2010-08-04 Robert Millan + + * configure.ac: Remove checks for getfsstat() and getmntany(). + Add checks for `' and `'. + * kern/emu/misc.c [HAVE_GETMNTANY]: Remove `'. + [HAVE_SYS_PARAM_H]: Include `'. + [HAVE_SYS_MOUNT_H]: Include `'. + [HAVE_LIBZFS && HAVE_LIBNVPAIR] (find_mount_point_from_dir): Remove + function. + (grub_find_zpool_from_dir): Use statfs() instead of indirect matching + via find_mount_point_from_dir() and getfsstat() / getmntany(). + +2010-08-04 Robert Millan + + * include/grub/emu/misc.h (grub_find_mount_point_from_dir) + (grub_find_zpool_from_mount_point): Merge into ... + (grub_find_zpool_from_dir): ... this. + * kern/emu/misc.c: Likewise. + + * kern/emu/misc.c + (grub_make_system_path_relative_to_its_root): Replace + grub_find_mount_point_from_dir() / grub_find_zpool_from_mount_point() + with grub_find_zpool_from_dir(). + * kern/emu/getroot.c (find_root_device_from_libzfs): Likewise. + +2010-08-04 Robert Millan + + Support OpenSolaris in ZFS device resolution. + + * configure.ac: Check for getmntany(). + * kern/emu/misc.c [HAVE_GETMNTANY]: Include `'. + [HAVE_GETMNTANY] (grub_find_zpool_from_mount_point): Add OpenSolaris + support. + +2010-08-03 Robert Millan + + Fix grub-emu build. + + * include/grub/util/misc.h: Move `' to ... + * include/grub/emu/misc.h: ... here. + + * include/grub/util/misc.h (grub_get_libzfs_handle): Move function ... + * include/grub/emu/misc.h (grub_get_libzfs_handle): ... here. + + * util/misc.c: Remove `'. + [HAVE_LIBZFS] (libzfs_handle, fini_libzfs) + (grub_get_libzfs_handle): Move to ... + * kern/emu/misc.c [HAVE_LIBZFS] (__libzfs_handle, fini_libzfs) + (grub_get_libzfs_handle): ... here. + +2010-08-03 BVK Chaitanya + + * script/execute.c (grub_script_execute_cmdline): Check for NULL + as command name case. + +2010-08-02 Colin Watson + + * disk/raid.c (insert_array): Select unique numbers for named arrays + as well, for use as keys in the disk cache. + +2010-08-01 Robert Millan + + * util/grub.d/10_kfreebsd.in: Initialize ${kfreebsd_device} as the + kFreeBSD device name, except on ZFS where the filesystem label is + used. + (kfreebsd_entry): On ZFS root, load `opensolaris.ko', `zfs.ko' and + `/boot/zfs/zpool.cache'. + Set mountfrom kernel variable using ${kfreebsd_device}. + +2010-08-01 Robert Millan + + Make it even harder to use uninitialized `libzfs_handle' (and + make the interface a bit simpler). + + * include/grub/util/misc.h (grub_util_init_libzfs) + (libzfs_handle): Remove. + (grub_get_libzfs_handle): New prototype. + + * util/misc.c [HAVE_LIBZFS] (libzfs_handle): Add `static' + attribute. + (grub_util_init_libzfs): Remove. + (grub_get_libzfs_handle): New function. + + * kern/emu/getroot.c (find_root_device_from_libzfs): Use + grub_get_libzfs_handle() to obtain a libzfs handle instead of + accessing `libzfs_handle' directly. + +2010-08-01 Robert Millan + + * include/grub/emu/misc.h (grub_find_mount_point_from_dir) + (grub_find_zpool_from_mount_point): New function prototypes. + + * kern/emu/getroot.c [HAVE_GETFSSTAT]: Move `' to ... + * kern/emu/misc.c [HAVE_GETFSSTAT]: ... here. + + * kern/emu/getroot.c (find_mount_point_from_dir): Move to ... + * kern/emu/misc.c (grub_find_mount_point_from_dir): ... this. Remove + `static' attribute. + + * kern/emu/getroot.c (find_root_device_from_libzfs): Split code for + finding zpool from mount point into ... + * kern/emu/misc.c (grub_find_zpool_from_mount_point): ... this. + + * kern/emu/misc.c (grub_make_system_path_relative_to_its_root): When + requested path is part of a ZFS pool, use + grub_find_zpool_from_mount_point() to detect its filesystem name, + and generate a path with `/fsname@path' syntax. + +2010-08-01 Colin Watson + + * include/grub/util/libzfs.h (libzfs_init): Set argument list to + (void) rather than () so that this is a proper prototype. + +2010-08-01 Vladimir Serbinenko + + * lib/arg.c (grub_arg_show_help): Add the necessary spacing. + +2010-08-01 Vladimir Serbinenko + + * kern/emu/getroot.c (find_mount_point_from_dir): Compile only if + [HAVE_LIBZFS && HAVE_LIBNVPAIR] + +2010-08-01 Colin Watson + + * util/grub-mkrescue.in: Remove ${efi_dir} after building efi.img. + +2010-08-01 Colin Watson + + * script/yylex.l (NAME): Remove [:digit:], redundant with [:alnum:]. + +2010-08-01 Colin Watson + + * docs/grub.texi (Simple configuration): Document GRUB_CMDLINE_XEN + and GRUB_CMDLINE_XEN_DEFAULT. Recommend setting + GRUB_GFXPAYLOAD_LINUX=text rather than unsetting it in order to + disable gfxpayload. + (Shell-like scripting): Add real content. + (Serial terminal): Suggest `terminal_input serial; terminal_output + serial' rather than putting the two commands on separate lines, + since console input will be inoperative after the first command. + (menuentry): Document --class, --users, and --hotkey options. + (terminfo): Describe what `visually-ordered UTF-8' means (thanks, + Vladimir Serbinenko). + +2010-08-01 Vladimir Serbinenko +2010-08-01 Colin Watson + + * kern/misc.c (grub_memset): Optimise to reduce cache stalls. + +2010-08-01 Robert Millan + + * include/grub/emu/misc.h (grub_find_mount_point_from_dir) + (grub_find_zpool_from_mount_point): New function prototypes. + + * kern/emu/getroot.c [HAVE_GETFSSTAT]: Move `' to ... + * kern/emu/misc.c [HAVE_GETFSSTAT]: ... here. + + * kern/emu/getroot.c (find_mount_point_from_dir): Move to ... + * kern/emu/misc.c (grub_find_mount_point_from_dir): ... this. Remove + `static' attribute. + + * kern/emu/getroot.c (find_root_device_from_libzfs): Split code for + finding zpool from mount point into ... + * kern/emu/misc.c (grub_find_zpool_from_mount_point): ... this. + + * kern/emu/misc.c (grub_make_system_path_relative_to_its_root): When + requested path is part of a ZFS pool, use + grub_find_zpool_from_mount_point() to detect its filesystem name, + and generate a path with `/fsname@path' syntax. + +2010-08-01 Robert Millan + + Prevent accidental use of uninitialized libzfs_handle. + + * util/grub-probe.c (main): Move grub_util_init_libzfs() call to ... + * kern/emu/getroot.c (find_root_device_from_libzfs): ... here. + * util/misc.c (grub_util_init_libzfs): Make this function idempotent. + +2010-08-01 Colin Watson + + * util/grub.d/20_linux_xen.in: Don't use UUID for LVM root (matching + util/grub.d/10_linux.in). Fixes Debian bug #591093. + +2010-08-01 Robert Millan + + * kern/emu/getroot.c: Include `'. + +2010-07-31 Robert Millan + + * util/grub.d/10_kfreebsd.in: Make module handling more generic. + +2010-07-31 Robert Millan + + * kern/emu/misc.c: Add missing license header. + +2010-07-31 Robert Millan + + * configure.ac: Check for `libzfs.h' and `libnvpair.h'. + + * include/grub/util/libnvpair.h: Include `'. + [HAVE_LIBNVPAIR_H]: Include `' instead of + declaring libnvpair prototypes ourselves. + * include/grub/util/libzfs.h: Include `'. + [HAVE_LIBZFS_H]: Include `' instead of + declaring libzfs prototypes ourselves. + + (libzfs_handle): Moved to ... + * include/grub/util/misc.h (libzfs_handle): ... here. + Include `'. + +2010-07-30 Robert Millan + + * include/grub/emu/misc.h: Add missing license header. + +2010-07-30 Robert Millan + + Enable `grub-probe -t device' resolution on ZFS. + + * configure.ac: Check for getfsstat(), libzfs and libnvpair. + * include/grub/util/libnvpair.h: New file. + * include/grub/util/libzfs.h: New file. + + * kern/emu/getroot.c: Include `' and `'. + [HAVE_LIBZFS && HAVE_LIBNVPAIR]: Include `' and + `'. + [HAVE_GETFSSTAT]: Include `'. + + (find_mount_point_from_dir): New static function. + [HAVE_LIBZFS && HAVE_LIBNVPAIR] (find_root_device_from_libzfs): New + function. + [HAVE_LIBZFS && HAVE_LIBNVPAIR] (grub_guess_root_device): Use + find_root_device_from_libzfs() before ressorting to find_root_device(). + + * include/grub/util/misc.h (grub_util_init_libzfs): New function + prototype. + * util/misc.c: Include `'. + (grub_util_init_libzfs): New function. + [HAVE_LIBZFS] (libzfs_handle): New global variable. + [HAVE_LIBZFS] (fini_libzfs): New static function. + (grub_util_init_libzfs): New function. + * util/grub-probe.c (main): Call grub_util_init_libzfs(). + +2010-07-30 Robert Millan + + * include/grub/emu/misc.h (grub_make_system_path_relative_to_its_root) + (xmalloc, xrealloc, xstrdup, xasprintf): Add + `warn_unused_result' attribute. + * include/grub/misc.h (grub_strdup, grub_strndup, grub_strlen) + (grub_xasprintf, grub_xvasprintf): Likewise. + * include/grub/emu/misc.h (xasprintf): Remove duplicate prototype. + +2010-07-29 Robert Millan + + * util/grub-probe.c (PRINT_FS_LABEL): New enum value. + (probe): Handle `PRINT_FS_LABEL'. + (main): Handle `-t fs_label'. + +2010-07-29 Robert Millan + + * configure.ac: Remove grub-mkisofs checks. + +2010-07-28 Vladimir Serbinenko + + * util/ieee1275/grub-install.in: Don't use empty grub_device. + Reported by: Lennart Sorensen. + +2010-07-20 Vladimir Serbinenko + + * util/grub.d/00_header.in: Remove compatibility with terminal.mod + prior to terminal_input/terminal_output separation. It's been over 1.5 + years and those versions weren't widely deployed. + +2010-07-22 Colin Watson + + * disk/raid.c (insert_array): Don't count named arrays when looking + for unused array numbers. + Reported and tested by: Michael Guntsche. + +2010-07-20 Colin Watson + + * bus/usb/emu/usb.c (grub_usb_poll_devices): Add a dummy + implementation of this so that grub-emu links again, with a note + that this should support hotplugging in the future. + +2010-07-20 Colin Watson + + * kern/emu/getroot.c (grub_util_get_grub_dev): Use xasprintf. + +2010-07-20 Colin Watson + + * disk/loopback.c (grub_cmd_loopback): Don't leak a grub_file_t + handle on failure. + (grub_loopback_close): Remove empty function. + (grub_loopback_dev): Remove close method. + +2010-07-20 Colin Watson + + Disable EFI cursor when the EFI console becomes inactive. + + * term/efi/console.c (grub_efi_console_init): New function. + (grub_efi_console_fini): New function. + (grub_console_term_output): Register init and fini methods. + +2010-07-20 Vladimir Serbinenko + + * tests/util/grub-shell-tester.in: Remove bashism and declare as + sh script. + +2010-07-20 Vladimir Serbinenko + + * disk/loopback.c (grub_loopback): Replace filename with file. + (delete_loopback): Handle new semantics. + (grub_cmd_loopback): Likewise. + (grub_loopback_iterate): Likewise. + (grub_loopback_close): Likewise. + +2010-07-20 Vladimir Serbinenko + + * util/i386/efi/grub-install.in: Revert to platform-specific behaviour + with -p "". + Reported by: Tito Keitel. + +2010-07-20 Vladimir Serbinenko + + * docs/grub.texi (Naming convention): Document new naming convention. + +2010-07-20 Vadim Solomin +2010-07-20 Colin Watson + + Generate device.map in something closer to the old ordering. + + * util/deviceiter.c (struct device): New declaration. + (compare_file_names): Rename to ... + (compare_devices): ... this. Sort by kernel name in preference to + the stable by-id name, but keep the latter as a fallback comparison. + Update header comment. + (grub_util_iterate_devices) [__linux__]: Construct and sort an array + of `struct device' rather than of plain file names. + +2010-07-20 Thomas Frauendorfer + + * lib/i386/relocator_asm.S [! __x86_64__]: Don't try to disable amd64 + on i386. + +2010-07-20 Vladimir Serbinenko + + * commands/acpi.c (setup_common_tables): Use sizeof instead of + hardcoding size. + (setv1table): Likewise. + +2010-07-20 Colin Watson + + * disk/raid.c (insert_array): Use md/%s to name mdadm 1.x devices, + removing the homehost if present. + * kern/emu/getroot.c (get_mdadm_name) [__linux__]: New function. + (grub_util_get_grub_dev): Use md/%s to name mdadm 1.x devices, + removing the homehost if present. + (grub_util_get_grub_dev) [__linux__]: Get the array name from mdadm + if possible. + * util/i386/pc/grub-setup.c (main): Handle md/* devices. + + * disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Add start_sector + parameter. Set its pointer target to 0. + * disk/mdraid_linux.c (grub_mdraid_detect): Add start_sector + parameter. Set its pointer target to 0 for 0.9 metadata, or to the + `data_offset' value from the superblock for 1.x metadata. + * disk/raid.c (grub_raid_read): Offset reads by the start sector of + data on the device. + (insert_array): Record the start sector of data on the device. + (grub_raid_register): Pass start_sector parameters to + grub_raid_list->detect and insert_array. + * include/grub/raid.h (struct grub_raid_array): Add start_sector + member. + (struct grub_raid): Add start_sector parameter to `detect'. + + * disk/mdraid_linux.c (struct grub_raid_super_1x): Remove + __attribute__ ((packed)), leaving a comment. + (grub_mdraid_detect): Split out 0.9 and 1.x detection to ... + (grub_mdraid_detect_09): ... here and ... + (grub_mdraid_detect_1x): ... here. + +2010-07-20 Peter Henn + + * disk/mdraid_linux.c (grub_mdraid_detect): Fix calculation of 1.x + chunk size and disk size, which are already given as sector counts + as distinct from the 0.90 units. Fetch the correct device number + from the role table instead of using the table index. + +2010-07-20 Felix Zielcke + + * disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Set array->name to NULL. + * disk/mdraid_linux.c (grub_raid_super_1x): New structure. + (WriteMostly1): New macro. + Set array->name to NULL for metadata format 0.90. Add support for + metadata 1.x. Fix some comments. + * disk/raid.c (): Add support for name based RAID arrays. Fix a + few comments. + * util/getroot.c (grub_util_get_grub_dev): Add support for + /dev/md/name style devices. + +2010-07-20 Colin Watson + + * .bzrignore: Ignore 20_linux_xen. + +2010-07-17 Colin Watson + + * util/import_unicode.py: Remove unnecessary imports. + +2010-07-17 Aleš Nesrsta + + Hotplugging and USB hub support. + + * bus/usb/ohci.c (grub_ohci_td): Add convenience fields. + (grub_ohci): Likewise. + (GRUB_OHCI_REG_CONTROL_BULK_ENABLE): New definition. + (GRUB_OHCI_REG_CONTROL_CONTROL_ENABLE): Likewise. + (GRUB_OHCI_RESET_CONNECT_CHANGE): Likewise. + (GRUB_OHCI_CTRL_EDS): Likewise. + (GRUB_OHCI_BULK_EDS): Likewise. + (GRUB_OHCI_TDS): Likewise. + (GRUB_OHCI_ED_ADDR_MASK): Likewise. + (grub_ohci_ed_phys2virt): New function. + (grub_ohci_virt_to_phys): Likewise. + (grub_ohci_td_phys2virt): Likewise. + (grub_ohci_td_virt2phys): Likewise. + (grub_ohci_pci_iter): Allocate memory and don't wait for stable + attachment. + (grub_ohci_find_ed): New function. + (grub_ohci_alloc_td): Likewise. + (grub_ohci_free_td): Likewise. + (grub_ohci_free_tds): Likewise. + (grub_ohci_transfer): Use previously allocated memory. + (grub_ohci_portstatus): Reset status changed bit. + (grub_ohci_detect_dev): Supply status changed. + (grub_ohci_fini_hw): Free memory. + (grub_ohci_restore_hw): Reallocate memory. + * bus/usb/uhci.c (grub_uhci_portstatus): Don't reset on disable. + Reset status change. + (grub_uhci_detect_dev): Supply status_change. + * bus/usb/usb.c (attach_hooks): New var. + (grub_usb_device_attach): New function. + (grub_usb_register_attach_hook_class): Likewise. + (grub_usb_unregister_attach_hook_class): Likewise. + * bus/usb/usbhub.c (grub_usb_hub_add_dev): Handle errors correctly. + (grub_usb_add_hub): Reset connection changed bit. + (attach_root_port): New function. + (grub_usb_root_hub): Likewise. + (poll_nonroot_hub): Likewise. + (grub_usb_poll_devices): Likewise. + * commands/usbtest.c (grub_cmd_usbtest): Poll devices before listing. + * disk/usbms.c (grub_usbms_open): Use device hooks. + (grub_usbms_iterate) :Poll devices. + (grub_usbms_finddevs): Split into ... + (grub_usbms_attach): ... this ... + (grub_usbms_attach): ... and this. + * include/grub/usb.h (grub_usb_controller_dev): Supply status_changed + in detect_dev. + (grub_usb_interface): New fields attached and detach_hook. + (grub_usb_attach_hook_class): New type. + (grub_usb_attach_desc): New struct. + (grub_usb_register_attach_hook_class): New function. + (grub_usb_unregister_attach_hook_class): Likewise. + (grub_usb_poll_devices): Likewise. + (grub_usb_device_attach): Likewise. + * include/grub/usbtrans.h (GRUB_USB_HUB_FEATURE_C_CONNECTED): New const. + (GRUB_USB_HUB_STATUS_C_CONNECTED): Likewise. + +2010-07-17 Vladimir Serbinenko + + * include/grub/bsdlabel.h (GRUB_PC_PARTITION_BSD_LABEL_WHOLE_DISK_PARTITION): New definition. + * partmap/bsdlabel.c (bsdlabel_partition_map_iterate): Use FreeBSD + delta determination style. Works with most NetBSD partitions too. + +2010-07-17 Vladimir Serbinenko + + * kern/partition.c [GRUB_UTIL]: Add missing util/misc.h inclusion. + * partmap/bsdlabel.c [GRUB_UTIL]: Likewise. + +2010-07-17 Vladimir Serbinenko + + * disk/scsi.c (grub_scsi_open): Fix incorrect pointer dereference. + +2010-07-14 Anton Blanchard + + * loader/powerpc/ieee1275/linux.c (grub_cmd_linux): Do not reject + ET_DYN files. + +2010-07-14 Grégoire Sutre + + * Makefile.in: Use the substituted @USE_NLS@ instead of ENABLE_NLS. + +2010-07-14 Grégoire Sutre + + * kern/partition.c (grub_partition_check_containment): New function to + check that a partition is physically contained in a parent. Since + offsets are relative (and non-negative), this reduces to checking that + the partition ends before its parent. + (grub_partition_map_probe): Discard out-of-range sub-partitions. + (grub_partition_iterate): Likewise. + * include/grub/partition.h (grub_partition_map): Slightly more detailed + comments. + * partmap/bsdlabel.c (bsdlabel_partition_map_iterate): Discard + partitions that start before their parent, and add debug printfs. + +2010-07-13 Colin Watson + + * Makefile.in (.SUFFIX): Spell correctly, as ... + (.SUFFIXES): ... this. Fixes bug where `make foo' (where foo is a + bare module name without `.mod', e.g. `test') tried to invoke a + Modula-2 compiler. + +2010-07-13 Colin Watson + + * README: Point to the Info manual. + +2010-07-13 Jiro SEKIBA + + * fs/nilfs2.c: fix macro NILFS_2ND_SUPER_BLOCK to calculate + 2nd superblock position from partition size. + +2010-07-10 Colin Watson + + * Makefile.in (MAINTAINER_CLEANFILES): Remove + unicode/UnicodeData.txt, unicode/BidiMirroring.txt, and + unicode/ArabicShaping.txt again; these are inputs to autogen.sh, not + outputs. + +2010-07-10 Vladimir Serbinenko + + Restructure SCSI .id handling. + Reported and tested by: Aleš Nesrsta. + + * disk/ata.c (grub_atapi_close): Removed. All users updated. + (grub_atapi_dev): Changed .name to "ata". New field .id. + * disk/usbms.c (grub_usbms_close): Removed. All users updated. + (grub_usbms_dev): New field .id. + * disk/scsi.c (grub_scsi_iterate): Generate name. + (grub_scsi_open): Parse name. + * include/grub/scsi.h (grub_make_scsi_id): New function. + (grub_scsi_dev): Change iterate and open to number instead of naming + busses. All users updated. + (grub_scsi): Remove name. Add .bus. + +2010-07-10 Vladimir Serbinenko + + * commands/help.c (grub_cmd_help): Fix a typo. + +2010-07-10 Vladimir Serbinenko + + * normal/term.c (put_glyphs_terminal): Fix state->num_lines counting. + Reported and tested by: Colin Watson. + +2010-07-10 Vladimir Serbinenko + + * util/grub-mkrescue.in: Don't use tar GNU-ism since it's not necessary + in this context. + +2010-07-07 Vladimir Serbinenko + + * tests/util/grub-shell.in: Remove bashisms and declare as sh script. + +2010-07-07 Colin Watson + + * term/gfxterm.c (grub_gfxterm_background_image_cmd): Fix + indentation. + +2010-07-06 Colin Watson + + * conf/common.rmk (grub_probe_SOURCES): Add disk/raid5_recover.c + and disk/raid6_recover.c. + * conf/i386-pc.rmk (grub_setup_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_setup_SOURCES): Likewise. + +2010-07-06 Colin Watson + + * term/gfxterm.c (repaint_schedulded): Rename to ... + (repaint_scheduled): ... this. Update all callers. + (repaint_was_schedulded): Rename to ... + (repaint_was_scheduled): ... this. Update all callers. + +2010-07-06 Colin Watson + + * util/deviceiter.c (grub_util_iterate_devices): Skip MD devices, + which we expect to be handled by upper layers. + +2010-07-06 BVK Chaitanya + + * bus/usb/usbhub.c: #include time.h header. + +2010-07-06 Colin Watson + + * fs/reiserfs.c (grub_reiserfs_iterate_dir): Zero out first byte of + entry_name also for entries without stat blocks (e.g. ".."); fixes + corruption of the first entry in a directory. + +2010-07-06 Colin Watson + + * util/grub.d/00_header.in: Process GRUB_THEME and GRUB_BACKGROUND + after setting gfxterm as the active terminal. GRUB_BACKGROUND + doesn't work otherwise. + +2010-07-05 Colin Watson + + * docs/grub.texi (Features): Update list of supported file systems. + (GNU/Linux): Update for GRUB 2. + (Serial terminal): Remove mention of --disable-serial, which was a + GRUB Legacy configure option. Update instructions to use + `terminal_input' and `terminal_output' rather than `terminal'. + (Vendor power-on keys): Copy-edit. Add cross-references to `Simple + configuration' and `Installing GRUB using grub-install'. + (Menu entry editor): Update for GRUB 2. + (terminfo): Add vt100-color, ieee1275, and dumb terminal types. + Document new -a, -u, and -v options. + (initrd): New section. + (initrd16): New section. + (linux): New section. + (linux16): New section. + (search): The `var' argument to `--set' is optional. + (GRUB only offers a rescue shell): Go into a little more detail on + drive ordering. + +2010-07-05 Colin Watson + + * Makefile.in: Set LINGUAS to empty if ENABLE_NLS is undefined. + +2010-07-05 Colin Watson + + * Makefile.in (MAINTAINER_CLEANFILES): Add unicode/UnicodeData.txt, + unicode/BidiMirroring.txt, unicode/ArabicShaping.txt, and unidata.c. + +2010-07-05 Colin Watson + + * util/i386/pc/grub-setup.c (setup): Rename prefix to + install_prefix, in line with install_dos_part and install_bsd_part. + Add new prefix variable, which is copied to install_prefix after + comparing core.img in memory with the one read from disk in the + no-embedding case, and use that rather than overwriting + install_prefix immediately when installing to a partition. + Fixes Debian bug #586621; based on patches by Matt Kraai and M. Vefa + Bicakci. + +2010-07-04 Grégoire Sutre + + * configure.ac: Avoid == in test command, it's not portable. + * util/grub.d/30_os-prober.in: Likewise. + +2010-07-04 Colin Watson + + * kern/emu/getroot.c [__GNU__]: Include for munmap. + +2010-07-04 Grégoire Sutre + + * util/i386/pc/grub-setup.c (setup): Do not embed when there are + multiple (top-level) partmaps. + +2010-07-02 Vladimir Serbinenko + + * util/i386/efi/grub-install.in: Don't use empty grub_device. + Reported by: Tino Keitel. + +2010-07-02 Vladimir Serbinenko + + Bidi and diacritics support. + + * Makefile.in (widthspec.bin): New target. + (widthspec.h): Likewise. + (TARGET_CFLAGS): Add -DHAVE_UNIFONT_WIDTHSPEC=1 if font was available. + * autogen.sh: Generate unidata.c. + * commands/cat.c (grub_cmd_cat): Don't use grub_putchar. + * commands/ls.c (grub_ls_list_devices): Likewise. + (grub_ls_list_files): Likewise. + * commands/minicmd.c (grub_mini_cmd_cat): Likewise. + (grub_mini_cmd_lsmod): Likewise. + * commands/read.c: Likewise. + * kern/corecmd.c (grub_core_cmd_ls): Likewise. + * kern/rescue_reader.c (grub_rescue_read_line): Likewise. + * lib/arg.c (grub_arg_show_help): Likewise. + * lib/crypto.c (grub_password_get): Likewise. + * normal/auth.c (grub_username_get): Likewise. + * normal/misc.c (grub_normal_print_device_info): Likewise. + * commands/help.c (grub_cmd_help): Use grub_unicode_aglomerate_comb. + * conf/common.rmk (grub_mkfont_SOURCES): Add unidata.c. + (gfxmenu_mod_SOURCES): Add gfxmenu/font.c. + (normal/charset.c_DEPENDENCIES): New variable. + (normal_mod_SOURCES): Add normal/charset.c and unidata.c. + (pkglib_MODULES): Remove charset.mod. + (charset_mod_SOURCES): Removed. + (charset_mod_CFLAGS): Likewise. + (charset_mod_LDFLAGS): Likewise. + (pkglib_MODULES) [ieee1275]: Remove terminfo.mod. + * conf/powerpc-ieee1275.rmk (kernel_img_SOURCES): Add term/terminfo.c + and term/tparm.c. + * conf/sparc64-ieee1275.rmk (kernel_img_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (kernel_img_SOURCES): Likewise. + (kernel_img_HEADERS): Add terminfo.h. + * font/font.c (ascii_glyph_lookup): Return NULL on failure. + Fill ->font. Reverse ascii bitmaps. + (grub_font_get_xheight): New function. + * font/font.c (grub_font_get_string_width): Moved from here ... + * gfxmenu/font.c (grub_font_get_string_width): ... here. + * font/font.c (grub_font_draw_string): Moved from here ... + * gfxmenu/font.c (grub_font_draw_string): ... here. + * font/font.c (grub_font_dup_glyph): New function. + (grub_font_blit_glyph): Likewise. + (grub_font_blit_glyph_mirror): Likewise. + (blit_comb): Likewise. + (grub_font_construct_dry_run): Likewise. + (grub_font_get_constructed_device_width): Likewise. + (grub_font_construct_glyph): Likewise. + * include/grub/charset.h (grub_ucs4_to_utf8): New proto. + * include/grub/misc.h (grub_utf8_to_ucs4): Moved from here ... + * include/grub/charset.h (grub_utf8_to_ucs4): ... here. + * include/grub/font.h (GRUB_FONT_CODE_CHAR_MASK): New constant. + (GRUB_FONT_CODE_RIGHT_JOINED): Likewise. + (GRUB_FONT_CODE_LEFT_JOINED): Likewise. + (grub_font_get_xheight): New proto. + (grub_font_get_constructed_device_width): Likewise. + (grub_font_construct_glyph): Likewise. + * include/grub/font.h (grub_font_get_string_width): Moved from here ... + * include/grub/gfxmenu_view.h (grub_font_get_string_width): ... here. + * include/grub/font.h (grub_font_draw_string): Moved from here ... + * include/grub/gfxmenu_view.h (grub_font_draw_string): ... here. + * include/grub/i386/vga_common.h (grub_console_putchar): Moved from here.. + * include/grub/i386/pc/console.h (grub_console_putchar): ... here. + * include/grub/i386/vga_common.h (grub_console_real_putchar): Removed. + (grub_console_getcharwidth): Likewise. + * include/grub/misc.h (grub_xputs): New proto. + (grub_puts): Inlined. + * include/grub/normal.h (grub_print_ucs4): Add margin specification. + (grub_normal_get_line_counter): Removed. + (grub_install_newline_hook): Likewise. + (grub_normal_get_char_counter): New proto. + (grub_normal_reset_more): Likewise. + (grub_xputs_normal): Likewise. + * include/grub/powerpc/ieee1275/console.h: Removed. + * include/grub/sparc64/ieee1275/console.h: Likewise. + * include/grub/term.h (GRUB_TERM_CODE_TYPE_MASK): New definition. + (GRUB_TERM_CODE_TYPE_ASCII): Likewise. + (GRUB_TERM_CODE_TYPE_CP437): Likewise. + (GRUB_TERM_CODE_TYPE_UTF8_LOGICAL): Likewise. + (GRUB_TERM_CODE_TYPE_UTF8_VISUAL): Likewise. + (GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS): Likewise. + (grub_term_input): Pass reference to self. All users updated. + (grub_term_output): Pass grub_unicode_glyph to putchar and getcharwidth. + Pass reference to self. New fields normal_color, highlight_color and + data. All users updated. + (grub_putchar): Removed. + (grub_putcode): Remove EXPORT_FUNC since it's not in kernel anymore. + (grub_unicode_estimate_width): New function. + (grub_term_getcharwidth): Add defaults. + (GRUB_TERM_DEFAULT_NORMAL_COLOR): New definition. + (GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR): Likewise. + (GRUB_TERM_DEFAULT_STANDARD_COLOR): Likewise. + (grub_cls): Remove EXPORT_FUNC. + (grub_setcolorstate): Inline. + (grub_newline_hook): Removed. + * include/grub/terminfo.h: Rewritten. All users updated. + * include/grub/unicode.h: New file. + * include/grub/video.h (grub_video_signed_rect): New type. + * kern/emu/console.c (grub_console_highlight_color): Removed. + (grub_console_normal_color): Likewise. + (grub_console_standard_color): Made static. + (grub_ncurses_putchar): Remove mapping. + (grub_ncurses_getcharwidth): Removed. + (grub_ncurses_term_output): Declare as GRUB_TERM_CODE_TYPE_ASCII. + (grub_ncurses_setcolor): Removed. + (grub_ncurses_getcolor): Likewise. + * kern/i386/pc/startup.S (grub_console_real_putchar): Renamed to ... + (grub_console_putchar): ... this. + (grub_console_putchar): Handle argument difference. + * kern/ieee1275/init.c (grub_machine_init): Split console_init into + console_init_early and console_init_lately. + * kern/sparc64/ieee1275/init.c (grub_machine_init): Likewise. + * kern/misc.c (grub_puts): Removed. + (grub_vprintf): Store UTF-8 string instead of outputting it directly. + (grub_vsnprintf_real): Remove str = NULL support. + * kern/misc.c (grub_utf8_to_ucs4): Move from here ... + * normal/charset.c (grub_utf8_to_ucs4): ... here. + * kern/term.c (grub_putcode): Renamed to ... + (grub_putcode_dumb): ... this. Pass grub_unicode_glyph instead of code. + (grub_putchar): Removed. + (grub_xputs_dumb): New function. + (grub_xputs): New variable. + * lib/charset.c: Move from here ... + * normal/charset.c: ... to here. + (grub_ucs4_to_utf8): New function. + (grub_ucs4_to_utf8_alloc): Use grub_ucs4_to_utf8. + (join_types): New variable. + (unpack_join): New function. + (bidi_types): New variable. + (unpack_bidi): New function. + (get_bidi_type): Likewise. + (get_join_type): Likewise. + (is_mirrored): Likewise. + (grub_unicode_get_comb_type): Likewise. + (grub_unicode_estimate_width) [HAVE_UNIFONT_WIDTHSPEC]: Likewise. + (is_type_after): Likewise. + (grub_unicode_aglomerate_comb): Likewise. + (bidi_line_wrap): Likewise. + (grub_bidi_line_logical_to_visual): Likewise. + (grub_bidi_logical_to_visual): Likewise. + (grub_unicode_mirror_code): Likewise. + (grub_unicode_shape_code): Likewise. + * normal/cmdline.c (grub_cmdline_get): Reset more counter. + Don't use grub_putchar. + * normal/main.c (grub_normal_init_page): Use grub_putcode. + (grub_normal_reader_init): Likewise. + (grub_xputs_saved): New variable. + (GRUB_MOD_INIT): Set grub_xputs. + (GRUB_MOD_FINI): Restore grub_xputs. + * normal/menu.c (grub_wait_after_message): Don't use grub_putchar. + (menu_init): Avoid printing gfxmenu error. + (show_menu): Use grub_normal_get_char_counter. + * normal/menu_entry.c (update_screen): Fix out-of-array. + (complete): Avoid NULL dereferencing. + * grub_menu_entry_run (grub_menu_entry_run): Don't use putchar. + * normal/menu_text.c (print_spaces): Removed. + (grub_print_ucs4): Likewise. + (grub_print_message_indented): Use grub_print_ucs4. + (print_message): Use grub_putcode. + (print_entry): Hanlde diacritics. + * normal/term.c (term_state): New type. + (grub_more_lines): Removed. + (term_states): New variable. + (grub_normal_line_counter): Renamed to .. + (grub_normal_char_counter): ...this. All users updated. + (grub_normal_get_line_counter): Renamed to ... + (grub_normal_get_char_counter): ... this. + (grub_normal_reset_more): New function. + (process_newline): Removed. + (print_more): New function. + (grub_install_newline_hook): Removed. + (map_code): New function. + (grub_puts_terminal): Use grub_print_ucs4. + (putglyph): New function. + (putcode_real): Likewise. + (grub_putcode): Use putcode_real. + (get_maxwidth): New function. + (get_startwidth): Likewise. + (print_ucs4_terminal): Likewise. + (find_term_state): Likewise. + (put_glyphs_terminal): Likewise. + (print_backlog): Likewise. + (print_ucs4_real): Likewise. + (grub_print_ucs4): Likewise. + (grub_xputs_normal): Likewise. + * term/efi/console.c (grub_console_putchar): Output diacritics. + (grub_console_getcharwidth): Removed. + (grub_console_term_output): Declare as GRUB_TERM_CODE_TYPE_UCS4_VISUAL. + * term/gfxterm.c (clear_char): Free chars. + (scroll_up): Avoid leaking memory. + (grub_gfxterm_putchar): Support diacritics. + (grub_video_term): Declare as GRUB_TERM_CODE_TYPE_UCS4_VISUAL. + * term/i386/pc/console.c (grub_console_term_output): Declare as + GRUB_TERM_CODE_TYPE_VGA. + * term/i386/pc/vga.c (grub_vga_term): Declare as + GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS. + * term/i386/pc/vga_text.c (grub_vga_text_term): Declare as + GRUB_TERM_CODE_TYPE_VGA. + * term/i386/vga_common.c (map_char): Removed. + (grub_console_putchar): Likewise. + (grub_console_getcharwidth): Likewise. + * term/ieee1275/ofconsole.c: Simplify using terminfo. + (colors): Reordered to match terminfo. + (grub_ofconsole_normal_color): Removed. + (grub_ofconsole_writeesc): Likewise. + (grub_ofconsole_highlight_color): Likewise. + (grub_ofconsole_getcharwidth): Likewise. + (grub_ofconsole_setcolorstate): Likewise. + (grub_ofconsole_setcolor): Likewise. + (grub_ofconsole_getcolor): Likewise. + (grub_ofconsole_readkey): Renamed to ... + (readkey): ... this. Remove escape sequence handling. Return -1 on no + key. + (grub_ofconsole_checkkey): Removed. + (grub_ofconsole_getkey): Likewise. + (grub_ofconsole_getxy): Likewise. + (grub_ofconsole_gotoxy): Likewise. + (grub_ofconsole_cls): Likewise. + (grub_ofconsole_refresh): Likewise. + (grub_ofconsole_terminfo_input): New struct. + (grub_ofconsole_terminfo_output): Likewise. + (grub_ofconsole_term_input): Use terminfo. + (grub_ofconsole_term_output): Likewise. + (grub_console_init): Split into ... + (grub_console_init_early): ...this and ... + (grub_console_init_lately): ...this. Use terminfo. + (grub_ofconsole_putchar): Renamed to ... + (put): ... this. Remove mapping. + (grub_ofconsole_term_output): Declare as GRUB_TERM_CODE_TYPE_ASCII. + * term/serial.c: Simplify using terminfo. + (xpos): Removed. + (ypos): Likewise. + (keep_track): Likewise. + (registered): Likewise. + (input_buf): Likewise. + (npending): Likewise. + (serial_translate_key_sequence): Likewise. + (fill_input_buf): Likewise. + (grub_serial_checkkey): Likewise. + (grub_serial_getkey): Likewise. + (grub_serial_getxy): Likewise. + (grub_serial_gotoxy): Likewise. + (grub_serial_putchar): Likewise. + (grub_serial_cls): Likewise. + (grub_serial_setcolorstate): Likewise. + (grub_serial_setcursor): Likewise. + (serial_hw_init): Use serial_hw_fetch. + (grub_serial_terminfo_input): New variable. + (grub_serial_terminfo_output): Likewise. + (grub_serial_term_input): Use terminfo. + (grub_serial_term_output): Likewise. + * term/terminfo.c (putstr): Use put. + (grub_terminfo_all_free): New function + (grub_terminfo_set_current): New types vt100-color, ieee1275 and dumb. + (grub_terminfo_output_register): New function. + (grub_terminfo_output_unregister): Likewise. + (grub_terminfo_getxy): Likewise. + (grub_terminfo_readkey): Likewise. + (grub_terminfo_checkkey): Likewise. + (grub_terminfo_getkey): Likewise. + (grub_terminfo_input_init): Likewise. + (print_terminfo): Likewise. + (grub_cmd_terminfo): Handle encoding. + (grub_terminfo_gotoxy): Track position. + (grub_terminfo_cls): Likewise. + (grub_terminfo_putchar): Likewise. + (grub_terminfo_setcolorstate): Handle colors + (grub_terminfo_cursor_on): This ... + (grub_terminfo_cursor_off): ... and this merged into ... + (grub_terminfo_setcursor): ... this. + * term/tparm.c (grub_terminfo_tparm): Avoid NULL dereferencing. + * unicode/ArabicShaping.txt: New file (imported from Unicode). + * unicode/BidiMirroring.txt: Likewise. + * unicode/UnicodeData.txt: Likewise. + * unicode/COPYING: Likewise. + * util/grub-editenv.c (grub_putchar): Removed. + (grub_xputs_real): New function. + (grub_xputs): New variable. + * util/grub-fstest.c (grub_putchar): Removed. + (grub_xputs_real): New function. + (grub_xputs): New variable. + * util/grub-mkdevicemap.c (grub_putchar): Removed. + (grub_xputs_real): New function. + (grub_xputs): New variable. + * util/grub-probe.c (grub_putchar): Removed. + (grub_xputs_real): New function. + (grub_xputs): New variable. + * util/grub-script-check.c (grub_putchar): Removed. + (grub_xputs_real): New function. + (grub_xputs): New variable. + * util/i386/pc/grub-setup.c (grub_putchar): Removed. + (grub_xputs_real): New function. + (grub_xputs): New variable. + * util/import_unicode.py: New file. + * util/grub-mkfont.c (ft_errmsgs): New array. + (grub_glyph_info): Make bitmap a pointer. + (file_formats): New type WIDTH_SPEC. + (grub_font_info): New members glyphs_unsorted, glyphs_sorted, num_glyphs. + (options): Add width-spec. + (help): Likewise. + (add_char): Renamed to ... + (add_glyph): ... this. + (add_glyph): Use index. Show freetype errors. Cut blank space at borders. + (glyph_replace): New type. + (subst_rightjoin), (subst_leftjoin), (subst_medijoin): New variables. + (add_char): New function. + (add_subst): Likewise. + (process_cursive): Likewise. + (add_font): Handle GSUB. + (write_font_width_spec): New function. + (main): Sort glyphs. + * commands/minicmd.c (grub_mini_cmd_clear): Moved from here ... + * normal/main.c (grub_mini_cmd_clear): ..here. All users updated. + * kern/term.c (grub_cls): Moved from here... + * normal/term.c (grub_cls): ... here. + +2010-07-02 Colin Watson + + * include/grub/types.h: Define the C99-style PRIxGRUB_SIZE macro, + suitable for using within the format argument of printf when + converting grub_size_t. + * disk/usbms.c (grub_usbms_transfer): Use PRIxGRUB_SIZE rather than + "x" to convert grub_size_t arguments. + +2010-07-02 Vladimir Serbinenko + + * gfxmenu/gui_list.c (draw_menu): Use viewport to simplify code and fix + too long captions. + (list_get_minimal_size): Take selection box into account. + +2010-07-02 Vladimir Serbinenko + + * font/font.c (grub_font_get_glyph_with_fallback): Avoid dereferencing + NULL font. + +2010-07-02 Colin Watson + + * util/deviceiter.c (grub_util_iterate_devices): Skip device-mapper + devices when iterating over /dev/disk/by-id; they will be handled + later if appropriate, which they aren't always (e.g. LVM). + +2010-07-02 Colin Watson + + * include/grub/misc.h (grub_reboot): Declare as noreturn. + * kern/efi/efi.c (grub_reboot): Don't return, even if reset_system + fails. + (grub_halt): Likewise. + * kern/ieee1275/openfw.c (grub_reboot): Don't return, even if + reset-all fails. + (grub_halt): Don't return, even if all of shut-down, power-off, and + poweroff fail. + +2010-07-02 Colin Watson + + * kern/efi/init.c (grub_efi_init): set_watchdog_timer takes four + arguments, not three. + +2010-07-02 Colin Watson + + * util/grub-mkconfig_lib.in (uses_abstraction): New function. + * util/grub.d/10_linux.in: Use it to check for LVM, so that + LVM-on-RAID is handled correctly. + +2010-07-02 Colin Watson + + * docs/grub.texi (Changes from GRUB Legacy): New section. + (Future): Fix typo. + +2010-07-02 Colin Watson + + * util/grub-mkconfig_lib.in (grub_file_is_not_garbage): Sometimes + grub.d/README accidentally ends up executable for one reason or + another. Ignore it. + +2010-07-02 Vladimir Serbinenko + + * partmap/gpt.c (MAX_SECTOR_LOG): New definition. + (gpt_partition_map_iterate): Support non-512B sectors. + +2010-07-02 Vladimir Serbinenko + + * kern/efi/init.c (grub_efi_init): Disable watchdog. + Tested by: Seth Goldberg. + +2010-07-02 Vladimir Serbinenko + + * loader/multiboot.c (grub_multiboot_boot) [GRUB_USE_MULTIBOOT2]: + Properly align mbi. + Reported by: Seth Goldberg. + +2010-07-01 Vladimir Serbinenko + + * util/grub-mkrescue.in: Avoid module duplication. + +2010-07-01 Sean Finney + + * util/grub.d/10_linux.in: Don't use UUID for LVM root. + +2010-07-01 Sean Finney + + * disk/lvm.c (grub_lvm_scan_device): Skip snapshots. + +2010-07-01 Vladimir Serbinenko + + * disk/lvm.c (grub_lvm_checkvalue): New function. + (grub_lvm_check_flag): Likewise. + +2010-07-01 Robert Millan + + * kern/emu/hostdisk.c (convert_system_partition_to_system_disk): + Support 'p' as partition separator on kernel of FreeBSD (used + with GPT labels). + (grub_util_biosdisk_get_grub_dev): Likewise. + +2010-07-01 Vladimir Serbinenko + + Yeeloong firmware port. + + * boot/mips/yeeloong/fwstart.S: New file. + * bus/cs5536.c (gpiodump): New const. + (set_io_space): New function. + (set_iod): Likewise. + (set_p2d): Likewise. + (grub_cs5536_init_geode): Likewise. + * commands/mips/yeeloong/lsspd.c: New file. + * conf/mips-qemu-mips.rmk (pkglib_MODULES): Add serial.mod. + (serial_mod_SOURCES): New variable. + (serial_mod_CFLAGS): Likewise. + (serial_mod_LDFLAGS): Likewise. + * conf/mips-yeeloong.rmk (kernel_img_SOURCES): Add term/serial.c, + term/terminfo.c and term/tparm.c. + (pkglib_IMAGES): Add fwstart.img. + (fwstart_img_SOURCES): New variable. + (fwstart_img_CFLAGS): Likewise. + (fwstart_img_ASFLAGS): Likewise. + (fwstart_img_LDFLAGS): Likewise. + (fwstart_img_FORMAT): Likewise. + (pkglib_MODULES): Add lsspd.mod. + (lsspd_mod_SOURCES): New variable. + (lsspd_mod_CFLAGS): Likewise. + (lsspd_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add halt.mod. + (halt_mod_SOURCES): New variable. + (halt_mod_CFLAGS): Likewise. + (halt_mod_LDFLAGS): Likewise. + * conf/mips.rmk (pkglib_MODULES): Remove serial.mod. + (serial_mod_SOURCES): Removed. + (serial_mod_CFLAGS): Likewise. + (serial_mod_LDFLAGS): Likewise. + * disk/ata.c (check_device): New function. + (grub_ata_device_initialize): Use check_device. + (grub_ata_iterate): Recheck devices. + (grub_ata_open): Likewise. + (grub_atapi_iterate): Likewise. + (grub_atapi_open): Likewise. + * include/grub/ata.h (GRUB_ATA_CH0_PORT1): New macro. + (GRUB_ATA_CH1_PORT1): Likewise. + (GRUB_ATA_CH0_PORT2): Likewise. + (GRUB_ATA_CH1_PORT2): Likewise. + * include/grub/mips/loongson.h: New file. + * include/grub/mips/yeeloong/ec.h: Likewise. + * include/grub/mips/yeeloong/serial.h (GRUB_MACHINE_SERIAL_PORT): New definition. + (GRUB_MACHINE_SERIAL_DIVISOR_115200): Likewise. + (GRUB_MACHINE_SERIAL_PORTS) [ASM_FILE]: Remove. + * include/grub/misc.h (grub_halt): Declare as noreturn. + * include/grub/serial.h (UART_ENABLE_FIFO): Renamed to ... + (UART_ENABLE_FIFO_TRIGGER14): ... this. All users updated. + (UART_ENABLE_FIFO_TRIGGER1): New definition. + (UART_ENABLE_DTRRTS): Likewise. + (UART_ENABLE_MODEM): Removed. + (UART_ENABLE_OUT2): New const. + * include/grub/term.h (grub_term_register_input_active): New function. + (grub_term_register_output_active): Likewise. + * kern/mips/startup.S [GRUB_MACHINE_MIPS_YEELOONG]: Handle 0xffffffff + argument. + * kern/mips/yeeloong/init.c (grub_get_rtc): Macroify. + (init_pci): New function. + (grub_machine_init): Execute platform init when firmware. Init serial. + (grub_halt): Implement. + (grub_exit): Likewise. + (grub_reboot): Likewise. + * term/serial.c (serial_hw_init): Update macros. + [GRUB_MACHINE_MIPS_YEELOONG]: Init on startup. + * util/grub-mkimage.c (image_target_desc): New id IMAGE_YEELOONG_FLASH. + (image_targets): New target mipsel-yeeloong-flash. + (generate_image): Support IMAGE_YEELOONG_FLASH. + * video/sm712.c (GRUB_SM712_TOTAL_MEMORY_SPACE): New definition. + (grub_video_sm712_setup): Init card. + (grub_video_sm712_set_palette): Removed. + * video/sm712_init.c: New file. + +2010-06-30 Colin Watson + + * Makefile.in (install-local): Temporarily prepend $(builddir) to + PATH when running help2man and then run it on the unadorned + executable names, rather than passing $(builddir)/* paths to + help2man. This avoids the build directory ending up in generated + manual pages. + +2010-06-29 Colin Watson + + * util/grub-mkconfig.in: Use 'set -e' rather than '#! /bin/sh -e', + to avoid accidents when debugging with 'sh -x'. + * util/grub-mkrescue.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_netbsd.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/20_linux_xen.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2010-06-29 Colin Watson + + * commands/cat.c (grub_cmd_cat): Fix buffer overrun if '\r' is the + last character in the buffer. + Reported by: Vladimir Serbinenko. + +2010-06-29 Robert Millan + + * docs/grub.texi (Simple configuration): Document ${GRUB_BADRAM}. + (Command-line and menu entry commands): Document `badram' command. + +2010-06-28 Robert Millan + + * util/grub-mkconfig.in: Export `GRUB_BADRAM' variable. + * util/grub.d/00_header.in: When `GRUB_BADRAM' is set, issue badram + command using ${GRUB_BADRAM} as parameter. + +2010-06-28 Colin Watson + + * docs/grub.texi (Device map): New section. + (Themes): New section (stub). + * Makefile.in (docs/grub.info): The info documentation now builds + without errors. Make sure it stays that way. + +2010-06-28 Vladimir Serbinenko + + Use normal parser for menu entries. + Reported by: Thomas Frauendorfer + + * include/grub/parser.h (grub_parser_execute): Don't export. + * normal/menu.c (grub_menu_execute_entry_real): New function. + (grub_menu_execute_entry): Use grub_menu_execute_entry_real. + +2010-06-28 Colin Watson + + * docs/grub.texi (Embedded configuration): New section (replacing + old "Preset Menu" stub). + (Images): New section. + (configfile): Note that any menu entries defined in `file' are shown + immediately. + +2010-06-28 Josh Triplett + + * mmap/i386/pc/mmap_helper.S: Set CF on return. + +2010-06-28 Colin Watson + + * util/grub-install.in: Add --debug-image= option. + +2010-06-28 Colin Watson + + Change grub-mkdevicemap to emit /dev/disk/by-id/ names where + possible on Linux. + + * util/deviceiter.c (check_device): Rename to ... + (check_device_readable_unique): ... this. Update all callers. + Maintain and check a list of which devices (by canonicalized name) + have already been seen. + (clear_seen_devices): New function. + (compare_file_names) [__linux__]: New function. + (grub_util_iterate_devices): Clear the list of seen devices on exit + and (just in case) on entry. + (grub_util_iterate_devices) [__linux__]: Iterate over non-partition + devices in /dev/disk/by-id/, in sorted order. Remove DM-RAID + seen-devices list, superseded by general code in check_device. + +2010-06-28 Colin Watson + + * commands/cat.c (options): New variable. + (grub_cmd_cat): Parse options. If the --dos option is given, print + DOS-style "\r\n" line endings as simple newlines (Debian bug + #586358). + (GRUB_MOD_INIT): Use extcmd. + (GRUB_MOD_FINI): Likewise. + * docs/grub.texi (cat): Document --dos. + +2010-06-28 Vladimir Serbinenko + + XEN with Linux grub-mkconfig support. + + * conf/common.rmk (grub-mkconfig_SCRIPTS) [linux]: Add 20_linux_xen. + * util/grub-mkconfig.in: Export GRUB_CMDLINE_XEN and + GRUB_CMDLINE_XEN_DEFAULT. + * util/grub.d/20_linux_xen.in: New file. + +2010-06-28 Vladimir Serbinenko + + Initialise VGA video on qemu ourselves. + + * boot/i386/qemu/boot.S: Don't call 0xc000. + * conf/i386-qemu.rmk (kern/i386/qemu/init.c_DEPENDENCIES): New variable. + (kernel_img_SOURCES): Add kern/i386/qemu/init.c and bus/pci.c. + (kernel_img_HEADERS): Add pci.h. + * conf/i386.rmk (pkglib_MODULES) [qemu]: Remove pci.mod. + * configure.ac: Force unifont on qemu and yeeloong. + * include/grub/i386/qemu/kernel.h (grub_qemu_init_cirrus): New proto. + (grub_vga_palette_write): Use correct register. + * kern/i386/coreboot/init.c (grub_machine_init) [GRUB_MACHINE_QEMU]: + Call grub_qemu_init_cirrus. + * kern/i386/qemu/init.c: New file. + * term/i386/pc/vga_text.c (inc_y): Never read outside the screen. + + * commands/videotest.c (grub_cmd_videotest): Handle double buffering. + +2010-06-26 Pavel Roskin + + * util/grub.d/10_linux.in: Add support for initrd images on Fedora + 13. + +2010-06-26 Colin Watson + + * docs/grub.texi (Simple configuration): Explain that + GRUB_DISABLE_LINUX_RECOVERY and GRUB_DISABLE_NETBSD_RECOVERY must be + set to `true' to disable their respective recovery entries, not + merely set. + +2010-06-26 Colin Watson + + Make the `source' command slightly faster. + + * normal/main.c (grub_normal_execute): Don't re-read list files when + nested. + +2010-06-23 Colin Watson + + * loader/i386/multiboot_mbi.c (retrieve_video_parameters): Set red + field position and mask size to red fields from mode_info, not + green. + * loader/multiboot_mbi2.c (retrieve_video_parameters): Likewise. + Remove redundant tag->common.framebuffer_type assignment. + Reported by: Seth Goldberg. + +2010-06-23 Colin Watson + + Sync up other versions of the Linux loader with Robert Millan's + change of 2010-01-09, "Make loader output a bit more user-friendly". + + * loader/i386/efi/linux.c (grub_linux_boot): Move debug info to + grub_dprintf(). + (grub_cmd_linux): Likewise. + (grub_cmd_initrd): Likewise. + * loader/i386/ieee1275/linux.c (grub_cmd_linux): Likewise. + * loader/i386/pc/linux.c (grub_cmd_linux): Likewise. + +2010-06-21 Colin Watson + + * kern/efi/mm.c (grub_efi_mm_init): Handle systems with memory maps + larger than MEMORY_MAP_SIZE. + +2010-06-21 BVK Chaitanya + + Fix parallel build. + + * conf/common.rmk: Add grub_script.tab.h as a grub-script-check + dependency. + * script/parser.y: #include grub_script.tab.h header. + +2010-06-20 Vladimir Serbinenko + + Support >3GiB and <16MiB RAM in i386-qemu. + + * kern/i386/qemu/mmap.c (QEMU_CMOS_MEMSIZE2_HIGH): New const. + (QEMU_CMOS_MEMSIZE2_LOW): Likewise. + (grub_lower_mem): Removed. + (grub_upper_mem): Likewise. + (mem_size): Made static. + (above_4g): New variable. + (grub_machine_mmap_init): Detect small mem_size and above_4g. + (grub_machine_mmap_iterate): Order in ascending order and add above_4g + support. + +2010-06-20 Vladimir Serbinenko + + Cirrus 5446 and Bochs video cards support. + + * conf/i386.rmk (pkglib_MODULES): Add video_cirrus.mod and + video_bochs.mod + (video_cirrus_mod_SOURCES): New variable. + (video_cirrus_mod_CFLAGS): Likewise. + (video_cirrus_mod_LDFLAGS): Likewise. + (video_bochs_mod_SOURCES): Likewise. + (video_bochs_mod_CFLAGS): Likewise. + (video_bochs_mod_LDFLAGS): Likewise. + * include/grub/vga.h: New file. + * include/grub/video_fb.h (grub_video_fb_doublebuf_blit_init): Removed. + (grub_video_fb_set_page_t): New type. + (grub_video_fb_setup): New prototype. + (grub_video_fb_swap_buffers): Likewise. + (grub_video_fb_get_info_and_fini): Likewise. + * term/i386/pc/vga_text.c (CRTC_ADDR_PORT): Moved to include/grub/vga.h. + (CRTC_DATA_PORT): Likewise. + (CRTC_CURSOR): Likewise. + (CRTC_CURSOR_ADDR_HIGH): Likewise. + (CRTC_CURSOR_ADDR_LOW): Likewise. + (CRTC_CURSOR_DISABLE): Likewise. + (update_cursor): Use grub_vga_cr_write. + (grub_vga_text_setcursor): Likewise. + * video/bochs.c: New file. + * video/fb/video_fb.c (render_target): Moved into framebuffer variable. + (palette): Likewise. + (palette_size): Likewise. + (framebuffer): New variable. + (grub_video_fb_init): Use 'framebuffer'. + (grub_video_fb_fini): Likewise. + (grub_video_fb_get_info): Likewise. + (grub_video_fb_get_palette): Likewise. + (grub_video_fb_set_palette): Likewise. + (grub_video_fb_set_viewport): Likewise. + (grub_video_fb_get_viewport): Likewise. + (grub_video_fb_map_color): Likewise. + (grub_video_fb_map_rgb): Likewise. + (grub_video_fb_map_rgba): Likewise. + (grub_video_fb_unmap_color): Likewise. + (grub_video_fb_unmap_color_int): Likewise. + (grub_video_fb_fill_rect): Likewise. + (grub_video_fb_blit_bitmap): Likewise. + (grub_video_fb_blit_render_target): Likewise. + (grub_video_fb_scroll): Likewise. + (grub_video_fb_create_render_target): Likewise. + (grub_video_fb_doublebuf_blit_init): Likewise. + (grub_video_fb_set_active_render_target): Handle doublebuffering. + (doublebuf_pageflipping_update_screen): New function. + (doublebuf_pageflipping_init): Likewise. + (grub_video_fb_setup): Likewise. + (grub_video_fb_swap_buffers): Likewise. + (grub_video_fb_get_info_and_fini): Likewise. + * video/i386/pc/vbe.c (framebuffer): Remove all doublebuffering fields. + All users updated. + (doublebuf_pageflipping_commit): Restructured into ... + (doublebuf_pageflipping_set_page): ... this. + (doublebuf_pageflipping_update_screen): Removed. + (doublebuf_pageflipping_init): Likewise. + (double_buffering_init): Likewise. + (grub_video_vbe_setup): Use grub_video_fb_setup. + (grub_video_vbe_swap_buffers): Removed. + (grub_video_vbe_set_active_render_target): Likewise. + (grub_video_vbe_get_active_render_target): Likewise. + (grub_video_vbe_get_info_and_fini): Use grub_video_fb_get_info_and_fini. + (grub_video_vbe_adapter): Use grub_video_fb_swap_buffers, + grub_video_fb_set_active_render_target and + grub_video_fb_get_active_render_target. + * video/i386/pc/vga.c (SEQUENCER_ADDR_PORT): Move to include/grub/vga.h. + (SEQUENCER_DATA_PORT): Likewise. + (MAP_MASK_REGISTER): Likewise. + (CRTC_ADDR_PORT): Likewise. + (CRTC_DATA_PORT): Likewise. + (START_ADDR_HIGH_REGISTER): Likewise. + (START_ADDR_LOW_REGISTER): Likewise. + (GRAPHICS_ADDR_PORT): Likewise. + (GRAPHICS_DATA_PORT): Likewise. + (READ_MAP_REGISTER): Likewise. + (INPUT_STATUS1_REGISTER): Likewise. + (INPUT_STATUS1_VERTR_BIT): Likewise. + (get_map_mask): Use grub_vga_sr_read. + (set_map_mask): Use grub_vga_sr_write. + (set_read_map): Use grub_vga_gr_write. + (set_start_address): Use grub_vga_cr_write. + * video/sm712.c (framebuffer): Remove leftover fields. + +2010-06-20 Colin Watson + + * util/grub-mkconfig.in: Capitalise and export GRUB_PREFIX. Stop + setting GRUB_VIDEO_BACKEND. Make it available as a user override + instead. Replace the gfxterm backend check with a check that + ${GRUB_PREFIX}/video.lst is non-empty. + * util/grub.d/00_header.in: Use GRUB_PREFIX rather than computing it + again. + (load_video): New generated function. Call it before loading + gfxterm rather than loading ${GRUB_VIDEO_BACKEND}. + * util/grub.d/10_linux.in (linux_entry): Call load_video. + * util/grub.d/30_os-prober.in (osx_entry): Likewise. + * docs/grub.texi (Simple configuration): Document + GRUB_VIDEO_BACKEND. + +2010-06-20 Vladimir Serbinenko + + Use video functions in linux and xnu loaders. + + * conf/i386-pc.rmk (xnu_mod_SOURCES): Remove loader/i386/pc/xnu.c. + * conf/x86-efi.rmk (xnu_mod_SOURCES): Remove loader/i386/efi/xnu.c. + * include/grub/i386/xnu.h (grub_xnu_set_video): Removed. + * loader/i386/efi/linux.c (grub_linux_setup_video): Copied from + loader/i386/pc/linux.c. + (grub_linux_boot): Resynced with loader/i386/pc/linux.c. + (find_line_len): Removed. + (find_framebuf): Likewise. + (grub_cmd_linux): Declare grub_linux_boot as possibly returning. + * loader/i386/efi/xnu.c: Removed. + * loader/i386/pc/xnu.c: Moved from here... + * loader/i386/xnu.c: ...here. + + Enable priorities in video drivers. + + * include/grub/video.h (grub_video_adapter_prio_t): New type. + (grub_video_adapter): New field prio. + (grub_video_register): Respect prio when inserting. + * video/efi_gop.c (grub_video_gop_adapter): Add prio. + * video/efi_uga.c (grub_video_uga_adapter): Likewise. + * video/emu/sdl.c (grub_video_sdl_adapter): Likewise. + * video/i386/pc/vbe.c (grub_video_vbe_adapter): Likewise. + * video/i386/pc/vga.c (grub_video_vga_adapter): Likewise. + * video/ieee1275.c (grub_video_ieee1275_adapter): Likewise. + * video/sm712.c (grub_video_sm712_adapter): Likewise. + + Fix SDL driver ID. + + * include/grub/video.h (grub_video_driver_id_t): New value + GRUB_VIDEO_DRIVER_SDL. + * video/emu/sdl.c (grub_video_sdl_adapter): Add id. + +2010-06-17 Colin Watson + + * util/i386/pc/grub-setup.c (usage): Pass an extra `program_name' + argument to printf. + * util/sparc64/ieee1275/grub-setup.c (usage): Likewise. + +2010-06-17 Colin Watson + + * util/i386/pc/grub-setup.c (usage): Fix syntax error. + * util/sparc64/ieee1275/grub-setup.c (usage): Likewise. + +2010-06-17 Colin Watson + + * util/i386/pc/grub-setup.c (usage): Warn against running grub-setup + directly, and recommend grub-install instead. + * util/sparc64/ieee1275/grub-setup.c (usage): Likewise. + +2010-06-17 Colin Watson + + Fix i386-pc prefix handling with nested partitions (Debian bug + #585068). Note that the case where the core image is booted using + multiboot and relocated from its original location still requires + more work. + + * kern/i386/pc/init.c (make_install_device): If the prefix starts + with "(,", fill the boot drive in between those two characters, but + expect that a full partition specification including partition map + names will follow. + * util/i386/pc/grub-setup.c (setup): Unless an explicit prefix was + specified, write a prefix without the drive name but including a + full partition specification. + +2010-06-16 Colin Watson + + * util/grub-mkconfig.in: Ignore non-option arguments, for + compatibility with older versions (before 2010-06-12) which did the + same. In particular, this makes it easier to ship an update-grub + wrapper which is compatible with that used with GRUB Legacy (Debian + bug #586056). + +2010-06-14 Grégoire Sutre + + * Makefile.in (install-local): Use $$file.h2m instead of $$dest.h2m + for manual page generation. + +2010-06-14 Grégoire Sutre + + * po/POTFILES: Remove leftover commands/handler.c. + +2010-06-14 Colin Watson + + * util/grub-mkconfig.in: Remove vestige of old argument parsing that + left this script non-functional. + +2010-06-14 Colin Watson + + * docs/man/grub-emu.h2m: New file. + +2010-06-13 Colin Watson + + * docs/grub.texi (Commands): Document reduced command set in rescue + mode. + (cpuid): New section. + +2010-06-13 Grégoire Sutre + + * kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev): Use the + new partition naming style. + * util/grub-install.in: Adapt sed subtitutions in grub-probe calls. + +2010-06-12 BVK Chaitanya + + Add "-o grub.iso" like cmdline options support. + + * util/grub-install.in: Improve cmdline option parsing. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/i386/efi/grub-install.in: Likewise. + * util/ieee1275/grub-install.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2010-06-12 Colin Watson + + * .bzrignore: Ignore 41_custom. + +2010-06-12 Thomas Schmitt + + * util/grub-mkrescue.in: Pass unrecognized options to xorriso. + +2010-06-12 Colin Watson + + Avoid false positives in fs.lst, partmap.lst, and video.lst due to + prototype declarations. + + * genmk.rb (PModule::rule): Define GRUB_LST_GENERATOR when + generating fs, partmap, and video lists. + * include/grub/fs.h (grub_fs_register): Omit prototype if + GRUB_LST_GENERATOR is defined. + * include/grub/partition.h (grub_partition_map_register): Likewise. + * include/grub/video.h (grub_video_register): Likewise. + +2010-06-12 Javier Martín + + * include/grub/types.h: Check for GRUB_CPU_SIZEOF_LONG when appropriate. + +2010-06-12 Thomas Schmitt + + * util/grub-mkrescue.in: Support --xorriso argument. + +2010-06-12 Vladimir Serbinenko + + * util/grub-mkrescue.in: Use -graft-points instead of -pathspecs. + Suggested by: Thomas Schmitt. + +2010-06-12 Vladimir Serbinenko + + * util/grub-mkrescue.in: Add --sort-weight arguments to xorriso. + Suggested by: Thomas Schmitt. + +2010-06-12 Vladimir Serbinenko + + custom.cfg support. + + * conf/common.rmk (grub-mkconfig_SCRIPTS): Add 41_custom. + * util/grub.d/41_custom.in: New file. + +2010-06-12 Colin Watson + + * util/grub-mkrescue.in (make_image): Remove sh module, which has + been merged back into normal. + +2010-06-11 Colin Watson + + * include/grub/efi/uga_draw.h (GRUB_EFI_UGA_GLT_MAX): Rename to ... + (GRUB_EFI_UGA_BLT_MAX): ... this (typo fix). + +2010-06-11 Colin Watson + + * Makefile.in (install-local): Include $(srcdir)/docs/man/$$dest.h2m + when generating manual pages. + * docs/man/grub-bin2h.h2m: New file. + * docs/man/grub-editenv.h2m: New file. + * docs/man/grub-fstest.h2m: New file. + * docs/man/grub-install.h2m: New file. + * docs/man/grub-macho2img.h2m: New file. + * docs/man/grub-mkconfig.h2m: New file. + * docs/man/grub-mkdevicemap.h2m: New file. + * docs/man/grub-mkfont.h2m: New file. + * docs/man/grub-mkimage.h2m: New file. + * docs/man/grub-mkpasswd-pbkdf2.h2m: New file. + * docs/man/grub-mkrelpath.h2m: New file. + * docs/man/grub-mkrescue.h2m: New file. + * docs/man/grub-ofpathname.h2m: New file. + * docs/man/grub-pe2elf.h2m: New file. + * docs/man/grub-probe.h2m: New file. + * docs/man/grub-reboot.h2m: New file. + * docs/man/grub-script-check.h2m: New file. + * docs/man/grub-set-default.h2m: New file. + * docs/man/grub-setup.h2m: New file. + +2010-06-10 Vladimir Serbinenko + + Use FOR_* macros instead of *_iterate whenever possible. + + * commands/handler.c: Removed. + * commands/help.c (grub_cmd_help): Use FOR_COMMANDS. + * commands/minicmd.c (grub_mini_cmd_lsmod): Use FOR_DL_MODULES. + * conf/any-emu.rmk (kernel_img_SOURCES): Remove kern/handler.c. + * conf/common.rmk (script/lexer.c_DEPENDENCIES): Add grub_script.yy.h. + (grub_probe_SOURCES): Remove kern/parser.c. + (util/grub-script-check.c_DEPENDENCIES): Removed. + (grub_script_check_SOURCES): Remove kern/handler.c, kern/parser.c + and grub_script_check_init.c. + (grub_script_check_init.lst): Removed. + (grub_script_check_init.h): Likewise. + (grub_script_check_init.c): Likewise. + (pkglib_MODULES): Remove handler.mod and sh.mod. + (handler_mod_SOURCES): Removed. + (handler_mod_CFLAGS): Likewise. + (handler_mod_LDFLAGS): Likewise. + (normal_mod_SOURCES): Remove normal/handler.c. + Add script/main.c, script/script.c, script/execute.c, + script/function.c, script/lexer.c, grub_script.tab.c + and grub_script.yy.c. + * conf/i386-coreboot.rmk (kernel_img_SOURCES): Remove kern/handler.c. + * conf/i386-ieee1275.rmk (kernel_img_SOURCES): Likewise. + * conf/i386-pc.rmk (kernel_img_SOURCES): Likewise. + (grub_setup_SOURCES): Remove kern/parser.c. + * conf/i386-qemu.rmk (kernel_img_SOURCES): Remove kern/handler.c. + * conf/mips-qemu-mips.rmk (kernel_img_SOURCES): Likewise. + * conf/mips-yeeloong.rmk (kernel_img_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (kernel_img_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (kernel_img_SOURCES): Likewise. + (grub_setup_SOURCES): Remove kern/parser.c. + * conf/x86-efi.rmk (kernel_img_SOURCES): Remove kern/handler.c. + * gettext/gettext.c (grub_gettext_delete_list): Don't use grub_list_pop. + * include/grub/command.h (grub_command_iterate): Removed. + (FOR_COMMANDS): New macro. + * include/grub/dl.h (grub_dl): New member next. + (grub_dl_iterate): Removed. + (grub_dl_head): New variable declaration. + (FOR_DL_MODULES): New macro. + * include/grub/fs.h: Include list.h. + (grub_fs): Make next first element. + (grub_fs_list): New variable declaration. + (grub_fs_register): Make inline. + (grub_fs_unregister): Likewise. + (grub_fs_iterate): Removed. + (FOR_FILESYSTEMS): New macro. + * include/grub/handler.h: Removed. + * include/grub/list.h (grub_list_hook_t): Removed. + (grub_list_test_t): Likewise. + (grub_list_pop): Likewise. + (grub_list_iterate): Likewise. + (grub_list_insert): Likewise. + (FOR_LIST_ELEMENTS): New macro. + * include/grub/parser.h (grub_parser_class): Removed. + (grub_parser_register): Likewise. + (grub_parser_unregister): Likewise. + (grub_parser_get_current): Likewise. + (grub_parser_set_current): Likewise. + (grub_register_rescue_parser): Likewise. + (grub_rescue_parse_line): New function. + * include/grub/partition.h (FOR_PARTITION_MAPS): Use FOR_LIST_ELEMENTS. + * include/grub/script_sh.h (grub_script_function_list): New variable + declaration. + (FOR_SCRIPT_FUNCTIONS): New macro. + (grub_script_function_iterate): Removed. + (grub_normal_parse_line): New prototype. + * include/grub/term.h (FOR_ACTIVE_TERM_INPUTS): Use FOR_LIST_ELEMENTS. + (FOR_DISABLED_TERM_INPUTS): Likewise. + (FOR_ACTIVE_TERM_OUTPUTS): Likewise. + (FOR_DISABLED_TERM_OUTPUTS): Likewise. + * include/grub/video.h (grub_video_adapter): Move 'next' to first + element. + (grub_video_register): Inline. + (grub_video_unregister): Likewise. + (grub_video_adapter_list): New variable declaration. + (grub_video_iterate): Removed. + (FOR_VIDEO_ADAPTERS): New macro. + * kern/dl.c (grub_dl_list): Removed. All users updated. + (grub_dl_iterate): Removed. + * kern/fs.c (grub_fs_list): Make global. + (grub_fs_register): Removed. + (grub_fs_unregister): Likewise. + (grub_fs_iterate): Likewise. + * kern/handler.c: Removed. + * kern/list.c (grub_list_pop): Removed. + (grub_list_iterate): Likewise. + (grub_list_insert): Likewise. + (grub_named_list_find): Use FOR_LIST_ELEMENTS. + (grub_prio_list_insert): Don't use grub_list_insert. + * kern/main.c (grub_register_rescue_parser): Don't call + grub_register_rescue_parser. + * kern/parser.c (grub_parser_class): Removed. + (grub_parser_execute): Use grub_rescue_parse_line. + * kern/rescue_parser.c (grub_rescue_parse_line): Make global. + (grub_rescue_parser): Removed. + (grub_register_rescue_parser): Likewise. + * kern/rescue_reader.c (grub_rescue_run): Use grub_rescue_parse_line. + * normal/auth.c (is_authenticated): Use FOR_LIST_ELEMENTS. + (grub_auth_check_authentication): Likewise. + * normal/completion.c (iterate_command): Removed. + (grub_normal_do_completion): Use FOR_COMMANDS. + * normal/handler.c: Removed. + * normal/main.c (read_config_file): Remove parser changing. + (grub_normal_execute): Don't call read_handler_list. + (grub_normal_read_line_real): Statically allocate prompt. + (grub_cmdline_run): Use grub_normal_parse_line. + (GRUB_MOD_FINI): Don't call free_handler_list. + * normal/menu_entry.c (run): Likewise. + * script/function.c (grub_script_function_list): Make global. + (grub_script_function_iterate): Removed. + * script/main.c (grub_normal_parse_line): Make global. + (grub_sh_parser): Removed. + (GRUB_MOD_INIT): Likewise. + (GRUB_MOD_FINI): Likewise. + * tests/lib/functional_test.c (grub_functional_test): Use + FOR_LIST_ELEMENTS. + * tests/lib/test.c (free_failures): Don't use grub_list_pop. + (grub_test_run): Use FOR_LIST_ELEMENTS. + * tests/lib/unit_test.c (main): Likewise. + * util/deviceiter.c (grub_util_iterate_devices): Don't use + grub_list_pop. + * util/grub-fstest.c (grub_term_input_class): Removed. + (grub_term_output_class): Likewise. + * util/grub-probe.c: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/sparc64/ieee1275/grub-setup.c: Likewise. + * util/grub-script-check.c (main): Don't call grub_init_all and + grub_fini_all. + * video/video.c (grub_video_adapter_list): Make global. + (grub_video_register): Removed. + (grub_video_unregister): Likewise. + (grub_video_iterate): Likewise. + +2010-06-09 Vladimir Serbinenko + + * docs/grub.texi (Vendor power-on button): Add Asus EeePC 1005PE as + reported by Henrique Ferreiro. + +2010-06-09 Robert Millan + + * util/grub.d/10_linux.in: Prefer compressed images over non-compressed + ones, when both are available. + +2010-06-08 Grégoire Sutre + + Make --version uniform and avoid hard-coded program name. + + * util/grub-mkimage.c (main): Use `program_name' instead of + hard-coded string. + * util/i386/pc/grub-setup.c (main): Likewise. + * util/sparc64/ieee1275/grub-setup.c (parse_options): Likewise. + * util/grub-install.in: Save the basename of $0 in $self, and use the + latter in informational messages. Use the same format for --version + as the binary programs. + * util/grub-mkconfig.in: Likewise. + * util/grub-mkrescue.in: Likewise. + * util/grub-reboot.in: Likewise. + * util/grub-set-default.in: Likewise. + * util/i386/efi/grub-install.in: Likewise. + * util/ieee1275/grub-install.in: Likewise. + * util/powerpc/ieee1275/grub-mkrescue.in: Likewise. + +2010-06-08 Grégoire Sutre + + * util/i386/pc/grub-setup.c (setup): Use absolute offsets for start of + embedding area. Use <= instead of == when checking for non-emptiness. + +2010-06-08 Grégoire Sutre + + * configure.ac: Add `.' to the directories searched for unifont. + +2010-06-08 Colin Watson + + * .bzrignore: Add ascii.bitmaps, ascii.h, grub_script.yy.c, and + grub_script.yy.h. + +2010-06-08 Colin Watson + + * docs/grub.texi (History): Expand to cover GRUB 2. + (Serial terminal): Refer to `terminal_input' and `terminal_output' + commands, not `terminal'. + (serial): Likewise. + (terminal_input): New section. + (terminal_output): New section. + (uppermem): New section (stub). + (Obtaining and Building GRUB): Refer to Bazaar, not Subversion. + +2010-06-08 Colin Watson + + * docs/grub.texi (Security): Menu entries are unrestricted by + default, not restricted to superusers as I had previously thought. + Reword to account for this. + +2010-06-07 Colin Watson + + * kern/emu/misc.c (device_mapper_null_log): New function. + (grub_device_mapper_supported): New function. + * include/grub/emu/misc.h (grub_device_mapper_supported): Add + prototype. + * kern/emu/hostdisk.c (find_partition_start): Check whether + device-mapper is supported before trying to use it. + * util/deviceiter.c (grub_util_iterate_devices): Likewise. + +2010-06-07 Colin Watson + + * docs/grub.texi (Naming convention): Use GRUB 2 syntax. + (File name syntax): Likewise. + (help): --all is no longer supported in GRUB 2. Be more precise + about pattern matching. + +2010-06-07 Colin Watson + + * normal/completion.c (grub_normal_do_completion): When completing + arguments to "set" and the current word contains an equals sign, + skip to after the equals sign before starting completion. + +2010-06-07 Colin Watson + + * fs/i386/pc/pxe.c (grub_pxe_open): Fix parsing of gateway_ip. + +2010-06-07 Colin Watson + + * docs/grub.texi (Network): New section. + (Device syntax): The network device is called `(pxe)' in GRUB 2, not + `(nd)' as in GRUB Legacy. + (pxe_unload): New section. + +2010-06-07 Colin Watson + + * docs/grub.texi (Troubleshooting): `echo' is not usually available + in the rescue shell, so recommend using `set' instead. Thanks, + Jordan Uggla. + +2010-06-07 Colin Watson + + * docs/grub.texi (Filesystem): Refer to `search' instead of `find'. + (password): New section. + (password_pbkdf2): New section. + (search): New section. + (Security): New section. + (Troubleshooting): New section, currently very incomplete. + (Invoking grub-mkpasswd-pbkdf2): New section. + (Internals): New section, currently very incomplete. + +2010-06-07 Colin Watson + + * util/grub.d/00_header.in: Add some more quoting (of + "${prev_saved_entry}" and "${boot_once}") needed to make savedefault + work again. + Reported by: Mario 'BitKoenig' Holbe (Debian bug #584812). + +2010-06-07 Colin Watson + + * util/grub-mkpasswd-pbkdf2.c (main): Rename top-level `c' variable + to `count', fixing variable shadowing that broke the -c option. + +2010-06-05 Colin Watson + + * util/grub.d/00_header.in: Quote values assigned to `saved_entry', + in case they contain spaces. + +2010-06-04 Colin Watson + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Prepend + "part_" to partmap module names, in line with grub-install. + Reported by: Jindřich Makovička (Debian bug #584426). + +2010-06-04 Colin Watson + + * util/grub-mkimage.c: Make target-related error messages slightly + more helpful; -O talks about "format". Explicitly point to the use + of -O if no target is specified. + Reported by: Didier Raboud (Debian bug #584415). + +2010-06-03 Colin Watson + + * INSTALL: Document several build requirements for optional features + (libdevmapper, ncurses, libusb, SDL, FreeType, GNU Unifont). + +2010-06-02 Grégoire Sutre + + * kern/emu/hostdisk.c (convert_system_partition_to_system_disk) + [__NetBSD__]: Handle all device names matching /dev/r[a-z]+[0-9][a-z]. + (find_partition_start) [__NetBSD__]: Correct error messages for NetBSD. + +2010-06-02 Colin Watson + + * docs/grub.texi (Simple configuration): Fix copy-and-paste typo. + Thanks to Jordan Uggla for spotting this. + +2010-06-02 Aleš Nesrsta + + Finally make USB usable. + + * bus/usb/ohci.c (grub_ohci_reg_t): Add missing values. + (GRUB_OHCI_RHUB_PORT_POWER_MASK): New macro. + (GRUB_OHCI_RHUB_PORT_ALL_POWERED): Likewise. + (GRUB_OHCI_REG_FRAME_INTERVAL_FSMPS_MASK): Likewise. + (GRUB_OHCI_REG_FRAME_INTERVAL_FSMPS_SHIFT): Likewise. + (GRUB_OHCI_REG_FRAME_INTERVAL_FI_SHIFT): Likewise. + (GRUB_OHCI_FSMPS): Likewise. + (GRUB_OHCI_PERIODIC_START): Likewise. + (GRUB_OHCI_FRAME_INTERVAL): Likewise. + (GRUB_OHCI_SET_PORT_ENABLE): Likewise. + (GRUB_OHCI_CLEAR_PORT_ENABLE): Likewise. + (GRUB_OHCI_SET_PORT_RESET): Likewise. + (GRUB_OHCI_SET_PORT_RESET_STATUS_CHANGE): Likewise. + * bus/usb/ohci.c (grub_ohci_pci_iter): Various important fixups. + (grub_ohci_transaction): Likewise. + (grub_ohci_transfer): Improve condition detection algorithms. + Handle toggle property. Program the transactions correctly. + Improve error handling. Various important fixups. + (grub_ohci_portstatus): Put register writes in right order. + * bus/usb/uhci.c (grub_free_queue): Compute last_trans. + (grub_uhci_transfer): Don't show "failed" message on success. + * bus/usb/usb.c (grub_usb_set_configuration): Zero-fill whole "toggle" + array. + (grub_usb_device_initialize): Read first 8 bytes of descriptor to + determine its size. + * bus/usb/usbtrans.c (grub_usb_control_msg): Use descdev.maxsize0 even + before initialization is completed. Use IN direction for empty + transfers. Use last_trans and compute toggle. + * include/grub/usbtrans.h (grub_usb_transfer): New field last_trans. + (GRUB_USB_FEATURE_ENDP_HALT): Correct the value. + (GRUB_USB_FEATURE_DEV_REMOTE_WU): Likewise. + (GRUB_USB_FEATURE_TEST_MODE): Likewise. + * include/grub/usb.h (grub_usb_err_t): New value GRUB_USB_ERR_UNRECOVERABLE. + (grub_usb_device): Increase toggle to 256. + (grub_usbms_subclass_t): New values GRUB_USBMS_SUBCLASS_RBC, + GRUB_USBMS_SUBCLASS_MMC2, GRUB_USBMS_SUBCLASS_UFI and + GRUB_USBMS_SUBCLASS_SFF8070. + * include/grub/scsicmd.h (grub_scsi_test_unit_ready): New structure. + (grub_scsi_inquiry): New member page and alloc_length. + (grub_scsi_request_sense): New structure. + (grub_scsi_request_sense_data): Likewise. + (grub_scsi_read_capacity): New fields logical_block_addr, PMI and + control. + * disk/scsi.c (grub_scsi_request_sense): New function. + (grub_scsi_test_unit_ready): Likewise. + (grub_scsi_inquiry): Fill new fields. + (grub_scsi_read_capacity): Likewise. + (grub_scsi_read10): Add request sense at the end. + (grub_scsi_read12): Likewise. + (grub_scsi_write10): Likewise. + (grub_scsi_write12): Likewise. + (grub_scsi_open): Add Test Unit Ready. + * disk/usbms.c (grub_usbms_finddevs): Check configcnt. + Support additional subclasses. Con't clear halt yet. Activate the + proper config. Calculate LUNs correctly. + (grub_usbms_transfer): Various important fixups. + +2010-06-02 Vladimir Serbinenko + + * bus/pci.c (grub_pci_iterate) [GRUB_MACHINE_MIPS_YEELOONG]: Skip ghosts. + * bus/usb/ohci.c (grub_ohci_portstatus): Handle R/WC correctly. + (grub_ohci_fini_hw): New function. + (grub_ohci_restore_hw): Likewise. + (GRUB_MOD_INIT(ohci)): Register preboot hook. + (GRUB_MOD_FINI(ohci)): Shutdown OHCI. + * term/usb_keyboard.c: Remove include of grub/machine/console.h. + +2010-06-02 Vladimir Serbinenko + + Dedicated DMA allocations. + + * bus/pci.c (grub_memalign_dma32): New function + (grub_dma_free): Likewise. + (grub_dma_get_virt): Likewise. + (grub_dma_get_phys): Likewise. + * bus/usb/ohci.c (grub_ohci): New members hcca_addr and hcca_chunk. + (grub_ohci_pci_iter): Use dma32_alloc. + (grub_ohci_transfer): Likewise. + * bus/usb/usbtrans.c (grub_usb_control_msg): Likewise. + (grub_usb_bulk_readwrite): Likewise. + * include/grub/pci.h: Add declarations. + +2010-06-02 Vladimir Serbinenko + + CS5536 support. + + * bus/cs5536.c: New file. + * bus/usb/ohci.c (grub_ohci_pci_iter): Check for CS5536. + * conf/i386.rmk (pkglib_MODULES): Add cs5536.mod. + (cs5536_mod_SOURCES): New variable. + (cs5536_mod_CFLAGS): Likewise. + (cs5536_mod_LDFLAGS): Likewise. + * conf/mips-yeeloong.rmk (kernel_img_HEADERS): Add cs5536.h and + machine/pci.h. + (kernel_img_SOURCES): Add bus/cs5536.c. + (pkglib_MODULES): Add usb.mod, usbtest.mod, ohci.mod, usbms.mod and + usb_keyboard.mod. + (usb_mod_SOURCES): New variable. + (usb_mod_CFLAGS): New variable. + (usb_mod_LDFLAGS): New variable. + (usbtest_mod_SOURCES): New variable. + (usbtest_mod_CFLAGS): New variable. + (usbtest_mod_LDFLAGS): New variable. + (ohci_mod_SOURCES): New variable. + (ohci_mod_CFLAGS): New variable. + (ohci_mod_LDFLAGS): New variable. + (usbms_mod_SOURCES): New variable. + (usbms_mod_CFLAGS): New variable. + (usbms_mod_LDFLAGS): New variable. + (usb_keyboard_mod_SOURCES): New variable. + (usb_keyboard_mod_CFLAGS): New variable. + (usb_keyboard_mod_LDFLAGS): New variable. + * include/grub/smbus.h: New file. + * include/grub/cs5536.h: New file. + +2010-06-02 Colin Watson + + * util/grub.d/00_header.in: Add safety check to make sure that + ${locale_dir} exists before trying to probe it. + +2010-06-02 Colin Watson + + * docs/grub.texi (SCO UnixWare): Remove, at Vladimir's request and + per the GNU Coding Standards; this is now too obscure to be worth + documenting. + (QNX): Likewise. + (chainloader): Remove cross-reference to `SCO UnixWare'. + +2010-06-02 Colin Watson + + * docs/grub.texi (Chain-loading): New section. + (DOS/Windows): New section, borrowed from GRUB Legacy with details + adjusted for GRUB 2. + (SCO UnixWare): Likewise. + (QNX): Likewise. + (chainloader): Add reference to `Block list syntax'. + (drivemap): New section. + (parttool): New section. + +2010-06-02 Colin Watson + + * docs/grub.texi (GNU GRUB manual): Remove reference to `Invoking + the grub shell'. + (Installation): Add reference to `Making a GRUB bootable CD-ROM'. + (Installing GRUB using grub-install): Remove reference to the grub + shell; mention `grub-mkimage' and `grub-setup' instead. + (Invoking grub-install): Likewise. + (Interface): Add reference to `Menu entry editor'. + (serial): Remove `--device' option. + +2010-06-02 Colin Watson + + * docs/grub.texi (Configuration): New section, documenting + configuration file generation using grub-mkconfig. I've left a slot + for documenting the full shell scripting format but have not yet + started on writing that up. + (Invoking grub-mkconfig): New section. + +2010-06-02 Colin Watson + + * docs/grub.texi (direntry): Remove grub-terminfo reference. + (GNU GRUB manual): Likewise. + (General commands): Update description of `terminfo' for GRUB 2. + +2010-06-02 Colin Watson + + * commands/gptsync.c (grub_cmd_gptsync): Fix typos. + (GRUB_MOD_INIT): Fix capitalisation. + * docs/grub.texi (Command-line and menu entry commands): Document + gettext and gptsync commands. + +2010-06-02 Colin Watson + + * conf/any-emu.rmk (kernel_img_SOURCES) [!x86]: Include + kern/$(target_cpu)/cache.S even if TARGET_NO_MODULES = yes. + +2010-06-01 Colin Watson + + Add btrfs probing support, currently only in the single-device case. + + * kern/emu/getroot.c (find_root_device_from_mountinfo): New + function. + (grub_guess_root_device): Call find_root_device_from_mountinfo + before looking in /dev. + +2010-05-31 Vladimir Serbinenko + + * disk/i386/pc/biosdisk.c (grub_biosdisk_open): Use + GRUB_DISK_SIZE_UNKNOWN. + * disk/ieee1275/ofdisk.c (grub_ofdisk_open): Likewise. + +2010-05-31 Jiro SEKIBA + + * include/grub/disk.h (GRUB_DISK_SIZE_UNKNOWN): New macro. + * fs/nilfs.c: Support 2nd super block in case 1st one is accidently + corrupted or not synced properly. + +2010-05-31 Vladimir Serbinenko + + * normal/main.c (grub_normal_add_menu_entry): Avoid going out of args. + Reported by: Seth Goldberg. + +2010-05-31 Vladimir Serbinenko + + * loader/multiboot_mbi2.c (grub_multiboot_make_mbi): Fix incorrect + addition of dest. + Reported by: Seth Goldberg. + +2010-05-31 Vladimir Serbinenko + + * commands/setpci.c (grub_setpci_iter): Fix an incorrect function check. + Reported by: Seth Goldberg. + +2010-05-31 Vladimir Serbinenko + + * loader/multiboot_elfxx.c (grub_multiboot_load_elfXX) [__mips]: Check + 64-bit address as signed on MIPS. + +2010-05-28 Colin Watson + + * configure.ac: AC_PROG_LEX sets LEX to ":" if lex is missing, not + to the empty string. + +2010-05-28 BVK Chaitanya + + Fix grub-emu issues on NetBSD, with gcc 4.1.3. + + * conf/any-emu.rmk: Remove unnecessary COMMON_CFLAGS. + * include/grub/emu/misc.h (canonicalize_file_name): New Prototype. + * kern/misc.c (__enable_execute_stack): Disable on + GRUB_MACHINE_EMU. + +2010-05-28 Colin Watson + + Make grub-probe work with symbolic links under /dev/mapper as well + as with real block devices. The Linux world seems to be (at best) + in transition here, and GRUB shouldn't get caught in the middle. + + * kern/emu/getroot.c (find_root_device): Follow symbolic links under + /dev/mapper. + +2010-05-27 Colin Watson + + * util/grub-script-check.c (main): Ensure defined behaviour on empty + input files (in which case exit zero). + +2010-05-27 Colin Watson + + * kern/emu/misc.c (canonicalize_file_name): realpath can still + return NULL for various reasons even if it has a maximum-length + buffer: for example, there might be a symlink loop, or the path + might exceed PATH_MAX. If this happens, return NULL. + +2010-05-27 Robert Millan + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Insert + partmap module to handle cross-partmap setups. + Reported by Orestes Mas. Gràcies! + +2010-05-27 Colin Watson + + * util/grub-mkrescue.in: Initialise override_dir rather than + assuming that it's unset or empty in the environment. + +2010-05-26 Grégoire Sutre + + * kern/emu/hostdisk.c (find_partition_start) [__NetBSD__]: Renamed + variable index into p_index to suppress a warning with -Wshadow. + +2010-05-25 BVK Chaitanya + + * INSTALL: Added flex >= 2.5.35 requirement. + +2010-05-23 Vladimir Serbinenko + + * commands/usbtest.c (grub_usb_get_string): Properly support UTF-16. + +2010-05-23 Vladimir Serbinenko + + cmostest support. + + * commands/i386/cmostest.c: New file. + * conf/i386-coreboot.rmk (pkglib_MODULES): Add cmostest.mod. + (cmostest_mod_SOURCES): New variable. + (cmostest_mod_CFLAGS): Likewise. + (cmostest_mod_LDFLAGS): Likewise. + * conf/i386-pc.rmk: Likewise. + * docs/grub.texi (Vendor power-on keys): New section. + * util/grub-mkconfig.in: export GRUB_DEFAULT_BUTTON, + GRUB_HIDDEN_TIMEOUT_BUTTON, GRUB_TIMEOUT_BUTTON + and GRUB_BUTTON_CMOS_ADDRESS. + * util/grub.d/00_header.in: Handle powering-on by separate button. + +2010-05-23 Vladimir Serbinenko + + * gfxmenu/gui_list.c (draw_menu): Don't add scrollbar width to padding. + Removed drawing_scrollbar argument. All users updated + Fixes #29792. + Reported by Jo Shields + +2010-05-23 Vladimir Serbinenko + + * gfxmenu/view.c (grub_gfxmenu_draw_terminal_box): Apply only to current + buffer since gfxterm handles double repaint. + +2010-05-23 Vladimir Serbinenko + + * gfxmenu/gfxmenu.c (grub_gfxmenu_try): Change viewport on both buffers. + * term/gfxterm.c (real_scroll): Likewise. + +2010-05-21 Vladimir Serbinenko + + * kern/i386/pc/mmap.c (grub_machine_mmap_iterate): Zero-fill entry + before calling BIOS. + +2010-05-21 Vladimir Serbinenko + + * include/grub/i18n.h: Always enable grub_gettext. + +2010-05-21 Vladimir Serbinenko + + * kern/i386/pc/init.c (make_install_device): Fix a leftover usage of old + partition naming style. + +2010-05-21 Colin Watson + + * util/grub-mkconfig.in: Fix handling of -o so that it works when + not the first option. + +2010-05-20 Colin Watson + + * util/grub-mkrelpath.c (usage): Remove excess apostrophe. + +2010-05-20 Colin Watson + + * util/misc.c: Move inclusion of to ... + * kern/emu/misc.c: ... here. Needed for canonicalize_file_name. + +2010-05-20 Grégoire Sutre + + * kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev) [__NetBSD__]: + Fix merge error in NetBSD code. + (find_partition_start) [__NetBSD__]: Likewise. + +2010-05-19 BVK Chaitanya + + Fix grub-mkrescue usage unit testing. + + * tests/util/grub-shell.in: Use --grub-mkimage with grub-mkrescue. + +2010-05-18 Christian Franke + + * util/grub.d/10_windows.in: Use path names instead of + drive letters to prevent warning from Cygwin 1.7. + Add drivemap command to menuentry if needed. + +2010-05-18 Justus Winter <4winter@informatik.uni-hamburg.de> + + * util/grub.d/10_hurd.in: Include all gnumach* kernels, not only + gnumach and gnumach.gz. + +2010-05-18 Vladimir Serbinenko + + * include/grub/i18n.h (gettext): Inline instead of using #define. + (grub_gettext): Likewise. + (_): Likewise. + +2010-05-18 Vladimir Serbinenko + + * Makefile.in (CPPFLAGS): Replace -DGRUB_LIBDIR with + -DGRUB_PKGLIBROOTDIR= and prepend @PACKAGE_TARNAME@. All users updated. + * util/grub-mkimage.c (image_targets): Add i386-multiboot. + (main): Add a slash after pkglibdirroot. + +2010-05-18 Vladimir Serbinenko + + * util/grub-install.in: Add missing "in" keyword. + +2010-05-18 Vladimir Serbinenko + + * util/grub-mkrescue.in: Remove -O i386-pc duplication. + Reported by: Seth Goldberg. + +2010-05-18 Vladimir Serbinenko + + * po/POTFILES: Rename util/grub-mkrawimage.c to util/grub-mkimage.c. + +2010-05-18 Colin Watson + + * configure.ac: Check for Linux device-mapper support. + + * util/hostdisk.c (device_is_mapped): New function. + (find_partition_start): New function, partly broken out from + linux_find_partition and grub_util_biosdisk_get_grub_dev but with + device-mapper support added. + (linux_find_partition): Use find_partition_start. + (convert_system_partition_to_system_disk): Add `st' argument. + Support Linux /dev/mapper/* devices if device-mapper support is + available; only DM-RAID devices are understood at present. + (find_system_device): Add `st' argument. Pass it to + convert_system_partition_to_system_disk. + (grub_util_biosdisk_get_grub_dev): Pass stat result to + find_system_device and convert_system_partition_to_system_disk. Use + find_partition_start. + + * conf/common.rmk (grub_mkdevicemap_SOURCES): Add kern/env.c, + kern/err.c, kern/list.c, kern/misc.c, and kern/emu/mm.c. + * util/deviceiter.c [__linux__]: Define MINOR. + (grub_util_iterate_devices): Add support for DM-RAID disk devices. + * util/mkdevicemap.c (grub_putchar): New function. + (grub_getkey): New function. + (grub_refresh): New function. + (main): Set debug=all if -v -v is used. + +2010-05-18 Colin Watson + + Fix build with non-GNU libcs. + + * util/misc.c (canonicalize_file_name): Move to ... + * kern/emu/misc.c (canonicalize_file_name): ... here. Needed by + grub_make_system_path_relative_to_its_root. + +2010-05-18 Colin Watson + + * util/grub-mkrescue.in: Sync up with grub-install in terms of how + we handle finding grub-mkimage. Default to finding grub-mkimage in + ${bindir} with program_transform_name applied, and provide a + --grub-mkimage option to override this. + +2010-05-17 Vladimir Serbinenko + + Remove grub-mkisofs. + + * conf/common.rmk (bin_UTILITIES): Remove grub-mkisofs. + (grub_mkisofs_SOURCES): Removed. + (grub_mkisofs_CFLAGS): Removed. + * util/mkisofs/defaults.h: Removed. + * util/mkisofs/eltorito.c: Likewise. + * util/mkisofs/exclude.h: Likewise. + * util/mkisofs/hash.c: Likewise. + * util/mkisofs/include/: Likewise. + * util/mkisofs/include/fctldefs.h: Likewise. + * util/mkisofs/include/mconfig.h: Likewise. + * util/mkisofs/include/prototyp.h: Likewise. + * util/mkisofs/include/statdefs.h: Likewise. + * util/mkisofs/iso9660.h: Likewise. + * util/mkisofs/joliet.c: Likewise. + * util/mkisofs/match.c: Likewise. + * util/mkisofs/match.h: Likewise. + * util/mkisofs/mkisofs.c: Likewise. + * util/mkisofs/mkisofs.h: Likewise. + * util/mkisofs/msdos_partition.h: Likewise. + * util/mkisofs/multi.c: Likewise. + * util/mkisofs/name.c: Likewise. + * util/mkisofs/rock.c: Likewise. + * util/mkisofs/tree.c: Likewise. + * util/mkisofs/write.c: Likewise. + +2010-05-17 Vladimir Serbinenko + + Unify grub-mkimage accross platforms. + + * Makefile.in (CPPFLAGS): Set GRUB_LIBDIR to $(libdir). + * conf/common.rmk (bin_UTILITIES): Removed grub-mkelfimage. + (grub_mkelfimage_SOURCES): Removed. + (util/elf/grub-mkimage.c_DEPENDENCIES): Renamed to .. + (util/grub-mkimage.c_DEPENDENCIES): .. this. + (bin_UTILITIES): Add grub-mkimage. + (grub_mkimage_SOURCES): New variable. + (kernel_img_HEADERS): Remove machine/kernel.h. + * conf/i386-pc.rmk (pkglib_IMAGES): Remove kernel.img. + (pkglib_PROGRAMS): Add kernel.img. + (kernel_img_HEADERS): Add machine/kernel.h. + (kernel_img_FORMAT): Removed. + (bin_UTILITIES): Remove grub-mkimage. + (grub_mkimage_SOURCES): Removed. + (grub_mkimage_CFLAGS): Likewise. + (util/grub-mkrawimage.c_DEPENDENCIES): Likewise. + * conf/i386-qemu.rmk (pkglib_IMAGES): Remove kernel.img. + (pkglib_PROGRAMS): Add kernel.img. + (bin_UTILITIES): Remove grub-mkimage. + (grub_mkimage_SOURCES): Removed. + (grub_mkimage_CFLAGS): Likewise. + (util/grub-mkrawimage.c_DEPENDENCIES): Likewise. + * conf/mips-qemu-mips.rmk (pkglib_IMAGES): Remove kernel.img. + (pkglib_PROGRAMS): Add kernel.img. + * conf/mips-yeeloong.rmk (pkglib_IMAGES): Remove kernel.img. + (pkglib_PROGRAMS): Add kernel.img. + * conf/mips.rmk (bin_UTILITIES): Remove grub-mkimage. + (grub_mkimage_SOURCES): Removed. + (grub_mkimage_CFLAGS): Likewise. + (util/grub-mkrawimage.c_DEPENDENCIES): Likewise. + * conf/sparc64-ieee1275.rmk (pkglib_IMAGES): Remove kernel.img. + (pkglib_PROGRAMS): Add kernel.img. + (bin_UTILITIES): Remove grub-mkimage. + (grub_mkimage_SOURCES): Removed. + (grub_mkimage_CFLAGS): Likewise. + (util/grub-mkrawimage.c_DEPENDENCIES): Likewise. + * conf/x86-efi.rmk (bin_UTILITIES): Remove grub-mkimage. + (grub_mkimage_SOURCES): Removed. + (grub_mkimage_CFLAGS): Likewise. + (util/grub-mkrawimage.c_DEPENDENCIES): Likewise. + * configure.ac (machine_CFLAGS): Add "-DMACHINE". + * include/grub/efi/pe32.h (grub_pe32_optional_header): Split into ... + (grub_pe32_optional_header): ... this. + (grub_pe64_optional_header): ... and this. All users updated. + (GRUB_PE32_PE32_MAGIC): Split into .. + (GRUB_PE32_PE32_MAGIC): .. this. + (GRUB_PE32_PE64_MAGIC): .. and this. + (GRUB_PE32_SIGNATURE_SIZE): New definition. + * include/grub/elf.h (PT_GNU_STACK): New definition. + * include/grub/i386/coreboot/kernel.h: Merged into include/grub/offsets.h. All users updated. + * include/grub/i386/efi/kernel.h: Likewise. + * include/grub/i386/kernel.h: Likewise. + * include/grub/i386/pc/kernel.h: Likewise. + * include/grub/i386/qemu/boot.h: Likewise. + * include/grub/mips/kernel.h: Likewise. + * include/grub/mips/qemu-mips/kernel.h: Likewise. + * include/grub/powerpc/ieee1275/kernel.h: Likewise. + * include/grub/powerpc/kernel.h: Likewise. + * include/grub/sparc64/ieee1275/boot.h: Likewise. + * include/grub/sparc64/ieee1275/kernel.h: Likewise. + * include/grub/sparc64/kernel.h: Likewise. + * include/grub/x86_64/efi/kernel.h: Likewise. + * include/grub/x86_64/kernel.h: Likewise. + * include/grub/offsets.h: New file. + * include/grub/kernel.h (grub_module_info): Split into ... + (grub_module_info32): ... this. + (grub_module_info64): ... and this. + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_KERNEL_SEG): Moved from here ... + * include/grub/offsets.h (GRUB_BOOT_I386_PC_KERNEL_SEG): ... here. + (grub_boot_blocklist): Moved from here ... + * include/grub/offsets.h (grub_pc_bios_boot_blocklist): ... here. + * include/grub/i386/pc/memory.h (GRUB_MEMORY_MACHINE_UPPER): Moved from here. + * include/grub/offsets.h (GRUB_MEMORY_I386_PC_UPPER): .. here. + * include/grub/types.h (grub_target_to_host16): Removed. + (grub_target_to_host32): Likewise. + (grub_target_to_host64): Likewise. + (grub_host_to_target16): Likewise. + (grub_host_to_target32): Likewise. + (grub_host_to_target64): Likewise. + (grub_host_to_target_addr): Likewise. + + Support grub-mkrescue for efi, coreboot and qemu. + + * conf/x86-efi.rmk (bin_SCRIPTS): Add grub-mkrescue. + * kern/efi/init.c (grub_efi_set_prefix): Handle baked in prefix. + * util/elf/grub-mkimage.c: Merged into util/grub-mkimage.c. + * util/grub-mkrawimage.c: Moved from here ... + * util/grub-mkimage.c: ... here. All users updated. + (ALIGN_ADDR): Use image_target. + (TARGET_NO_FIELD): New const. + (image_target_desc): New type. + (image_targets): New array. + (grub_target_to_host64): Use image_target. + (grub_target_to_host32): Likewise. + (grub_target_to_host16): Likewise. + (grub_host_to_target64): Likewise. + (grub_host_to_target32): Likewise. + (grub_host_to_target16): Likewise. + (grub_host_to_target_addr): Likewise. + (generate_image): Handle multiimage. + (main): Require -O parameter. All users updated. + * util/grub-mkimagexx.c: New file. Based on util/grub-mkrawimage.c and + util/efi/grub-mkimage.c + * util/grub-mkrescue.in: Handle coreboot, efi and qemu. + New option --rom-directory. + Use xorriso. + * util/i386/efi/grub-mkimage.c: Removed. + * util/i386/pc/grub-setup.c (grub_target_to_host16): New definition. + (grub_target_to_host32): Likewise. + (grub_target_to_host64): Likewise. + (grub_host_to_target16): Likewise. + (grub_host_to_target32): Likewise. + (grub_host_to_target64): Likewise. + * util/sparc64/ieee1275/grub-setup.c (grub_target_to_host16): New definition. + (grub_target_to_host32): Likewise. + (grub_target_to_host64): Likewise. + (grub_host_to_target16): Likewise. + (grub_host_to_target32): Likewise. + (grub_host_to_target64): Likewise. + +2010-05-17 BVK Chaitanya + + Source tree is reorganized for emu build. + + * include/grub/util/console.h: Move from here... + * include/grub/emu/console.h: ...to here. + * include/grub/util/getroot.h: Move from here... + * include/grub/emu/getroot.h: ...to here. + * include/grub/util/hostdisk.h: Move from here... + * include/grub/emu/hostdisk.h: ...to here. + * util/console.c: Move from here... + * kern/emu/console.c: ...to here. + * util/getroot.c: Move from here... + * kern/emu/getroot.c: ...to here. + * util/grub-emu.c: Move from here... + * kern/emu/main.c: ...to here. + * util/hostdisk.c: Move from here... + * kern/emu/hostdisk.c: ...to here. + * util/hostfs.c: Move from here... + * kern/emu/hostfs.c: ...to here. + * util/mm.c: Move from here... + * kern/emu/mm.c: ...to here. + * util/pci.c: Move from here... + * bus/emu/pci.c: ...to here. + * util/sdl.c: Move from here... + * video/emu/sdl.c: ...to here. + * util/time.c: Move from here... + * kern/emu/time.c: ...to here. + * util/usb.c: Move from here... + * bus/usb/emu/usb.c: ...to here. + + * include/grub/emu/misc.h: New header for grub-emu functions. + * kern/emu/misc.c: grub-emu functions separated from util/misc.c + + * conf/any-emu.rmk: Rule updates for above renames. + * conf/common.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/i386-qemu.rmk: Likewise. + * conf/mips.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86-efi.rmk: Likewise. + + * disk/lvm.h: #include updates for above renames. + * util/grub-mkrelpath.c: Likewise. + * util/grub-probe.c: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/sparc64/ieee1275/grub-setup.c: Likewise. + * kern/emu/console.c: Likewise. + * kern/emu/getroot.c: Likewise. + * kern/emu/hostdisk.c: Likewise. + * kern/emu/main.c: Likewise. (was grub-emu.c earlier) + + * include/grub/dl.h: Remove grub_dl_{ref,unref}. + * include/grub/util/misc.h: Move grub-emu functions to emu/misc.h. + * kern/dl.c: Handle null mod in grub_dl_{ref,unref}. + * util/misc.c: Remove grub-emu functions. + +2010-05-13 Vladimir Serbinenko + + Fix gfxmenu crash. + Reported by: Thorsten Grützmacher. + + * gfxmenu/gui_circular_progress.c (circprog_destroy): Unregister + timeout hook. + (circprog_set_property): Register and unregister timeout hook. + * gfxmenu/gui_label.c (grub_gui_label): New fields template and value. + (label_destroy): Free template. and unregister hook. + (label_set_state): New function. + (label_set_property): Handle templates and hooks. + * gfxmenu/gui_progress_bar.c (progress_bar_destroy): Unregister + timeout hook. + (progress_bar_set_property): Register and unregister timeout hook. + * gfxmenu/view.c (TIMEOUT_COMPONENT_ID): Move from here ... + * include/grub/gui.h (GRUB_GFXMENU_TIMEOUT_COMPONENT_ID): ...to here + * gfxmenu/view.c (grub_gfxmenu_timeout_notifications): New variable. + (update_timeout_visit): Removed. + (update_timeouts): New function. + (redraw_timeouts): Likewise. + (grub_gfxmenu_print_timeout): Use update_timeouts and redraw_timeouts. + (grub_gfxmenu_clear_timeout): Likewise. + * include/grub/gui.h (grub_gfxmenu_set_state_t): New type. + (grub_gfxmenu_timeout_notify): Likewise. + (grub_gfxmenu_timeout_notifications): New external variable. + (grub_gfxmenu_timeout_register): New function. + (grub_gfxmenu_timeout_unregister): Likewise. + +2010-05-09 Vladimir Serbinenko + + Transform (broken) vga terminal into (working) vga video driver. + + * conf/i386-pc.rmk (vga_mod_SOURCES): Change term/i386/pc/vga.c to + video/i386/pc/vga.c. + * include/grub/video.h (grub_video_driver_id): + Add GRUB_VIDEO_DRIVER_VGA. + * term/i386/pc/vga.c: Renamed to ... + * video/i386/pc/vga.c: ...this + (DEBUG_VGA): Removed. + (CHAR_WIDTH): Likewise. + (CHAR_HEIGHT): Likewise. + (TEXT_WIDTH): Likewise. + (TEXT_HEIGHT): Likewise. + (DEFAULT_FG_COLOR): Likewise. + (DEFAULT_BG_COLOR): Likewise. + (colored_char): Likewise. + (xpos): Likewise. + (ypos): Likewise. + (cursor_state): Likewise. + (fg_color): Likewise. + (bg_color): Likewise. + (text_buf): Likewise. + (page): Likewise. + (font): Likewise. + (framebuffer): New variable. + (set_read_map): Disabled. + (setup): New variable. + (is_target): Likewise. + (grub_vga_mod_init): Likewise. + (grub_vga_mod_fini): Likewise. + (check_vga_mem): Likewise. + (write_char): Likewise. + (write_cursor): Likewise. + (scroll_up): Likewise. + (grub_vga_putchar): Likewise. + (grub_vga_getcharwidth): Likewise. + (grub_vga_getwh): Likewise. + (grub_vga_getxy): Likewise. + (grub_vga_gotoxy): Likewise. + (grub_vga_cls): Likewise. + (grub_vga_setcolorstate): Likewise. + (grub_vga_setcursor): Likewise. + (grub_video_vga_init): New function. + (grub_video_vga_setup): Likewise. + (grub_video_vga_fini): Likewise. + (update_target): Likewise. + (grub_video_vga_blit_bitmap): Likewise. + (grub_video_vga_blit_render_target): Likewise. + (grub_video_vga_set_active_render_target): Likewise. + (grub_video_vga_get_active_render_target): Likewise. + (grub_video_vga_swap_buffers): Likewise. + (grub_video_vga_set_palette): Likewise. + (grub_video_vga_get_info_and_fini): Likewise. + (grub_vga_term): Removed. + (grub_video_vga_adapter): New variable. + (GRUB_MOD_INIT): Register a video driver instead of terminal. + (GRUB_MOD_FINI): Unrefister a video driver instead of terminal. + +2010-05-05 Vladimir Serbinenko + + * video/readers/jpeg.c: Indented. + +2010-05-05 Vladimir Serbinenko + + Various jpeg cleanups. + + * video/readers/jpeg.c (grub_jpeg_get_huff_code): Use ARRAY_SIZE. + (grub_jpeg_decode_quan_table): Use sizeof. + (grub_jpeg_decode_du): Use ARRAY_SIZE. + +2010-05-05 Peter Hurley (tiny change) + + * video/readers/jpeg.c (grub_jpeg_decode_huff_table): Loop over all + tables. Ignore non-last ac bit. + (grub_jpeg_decode_quan_table): Likewise. + +2010-05-05 Vladimir Serbinenko + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): New value + GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM. + * kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set + GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM on qemu. + * kern/ieee1275/init.c (grub_claim_heap): Don0t allocate below + 1.5MiB if GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM is set. + +2010-05-05 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_getkey): Fix off-by-one + error. + +2010-05-05 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Support C0 code. + +2010-05-03 Vladimir Serbinenko + + * commands/parttool.c (grub_cmd_parttool): Fix #if !GRUB_NO_MODULES + condition. + +2010-05-03 Vladimir Serbinenko + + * kern/mm.c (grub_real_malloc): Put magic and size assignment in common + part. + +2010-05-03 Vladimir Serbinenko + + * kern/mm.c (grub_mm_init_region): Check for region size after aligning + pointers. + +2010-05-03 Vladimir Serbinenko + + * kern/mm.c (grub_real_malloc): Fix size calculation when extra == 0. + +2010-05-01 Christian Franke + + * util/grub-mkconfig_lib.in (make_system_path_relative_to_its_root): + Remove broken Cygwin path conversion. + * util/misc.c: [__CYGWIN__] Add include and define. + [__CYGWIN__] (get_win32_path): Copy function from getroot.c, modify + for Cygwin 1.7. + (make_system_path_relative_to_its_root): Simplify loop, replace early + return by break. + [__CYGWIN__] Add conversion to win32 path. + Include "/" case in trailing slash removal. + +2010-05-01 Vladimir Serbinenko + + * kern/main.c (grub_load_config): Fix copy-pasted comment. + Reported by: Seth Goldberg + +2010-05-01 Vladimir Serbinenko + + * commands/help.c (grub_cmd_help): Fix a typo. + Reported by: Seth Goldberg + +2010-05-01 Vladimir Serbinenko + + * commands/hashsum.c (GRUB_MOD_INIT): Remove duplication of command + name and add N_. + * commands/i386/pc/drivemap.c (GRUB_MOD_INIT): Likewise. + * commands/iorw.c (GRUB_MOD_INIT): Likewise. + * commands/password_pbkdf2.c (GRUB_MOD_INIT): Likewise. + * commands/regexp.c (GRUB_MOD_INIT): Likewise. + * commands/setpci.c (GRUB_MOD_INIT): Likewise. + * commands/terminal.c (GRUB_MOD_INIT): Likewise. + * efiemu/main.c (GRUB_MOD_INIT): Likewise. + * font/font_cmd.c (GRUB_MOD_INIT): Likewise. + * kern/corecmd.c (GRUB_MOD_INIT): Likewise. + * mmap/mmap.c (GRUB_MOD_INIT): Likewise. + * normal/context.c (GRUB_MOD_INIT): Likewise. + * normal/main.c (GRUB_MOD_INIT): Likewise. + * term/gfxterm.c (GRUB_MOD_INIT): Likewise. + * term/serial.c (GRUB_MOD_INIT): Likewise. + * term/terminfo.c (GRUB_MOD_INIT): Likewise. + +2010-05-01 Vladimir Serbinenko + + * kern/mm.c (grub_real_malloc): Satisfy alignment requirement when + extra == 0. + +2010-05-01 Vladimir Serbinenko + + * commands/iorw.c: New file. + * conf/i386.rmk (pkglib_MODULES): Add iorw.mod. + (iorw_mod_SOURCES): New variable. + (iorw_mod_CFLAGS): Likewise. + (iorw_mod_LDFLAGS): Likewise. + +2010-05-01 Vladimir Serbinenko + + Hotkey support + + * include/grub/menu.h (grub_menu_entry): New field 'hotkey'. + * normal/main.c (hotkey_aliases): New variable. + (grub_normal_add_menu_entry): Parse "--hotkey". + * normal/menu_text.c (run_menu): Handle hotkeys. + +2010-05-01 Vladimir Serbinenko + + * kern/i386/coreboot/init.c (grub_machine_init): Call + grub_machine_mmap_init on qemu. + +2010-05-01 Vladimir Serbinenko + + * boot/i386/qemu/boot.S: Add a missing .code16. + +2010-05-01 Vladimir Serbinenko + + Use LBIO on coreboot. + + * conf/i386-coreboot.rmk (kernel_img_SOURCES): Change + kern/i386/multiboot_mmap.c to kern/i386/coreboot/mmap.c. + * include/grub/i386/coreboot/memory.h (GRUB_LINUXBIOS_MEMBER_LINK): + New declaration. + * kern/i386/coreboot/init.c (grub_machine_init): Don't call + grub_machine_mmap_init on coreboot. + * kern/i386/coreboot/mmap.c (grub_linuxbios_table_iterate): Handle + GRUB_LINUXBIOS_MEMBER_LINK. + (grub_machine_mmap_iterate): Fix declaration. + * kern/i386/coreboot/startup.S: Don't save mbi location on coreboot. + +2010-05-01 Vladimir Serbinenko + + Split coreboot and multiboot ports. + + * conf/i386-multiboot.rmk: New file. + * configure.ac: Add multiboot port. + * include/grub/i386/multiboot/boot.h: New file. + * include/grub/i386/multiboot/console.h: Likewise. + * include/grub/i386/multiboot/init.h: Likewise. + * include/grub/i386/multiboot/kernel.h: Likewise. + * include/grub/i386/multiboot/loader.h: Likewise. + * include/grub/i386/multiboot/memory.h: Likewise. + * include/grub/i386/multiboot/serial.h: Likewise. + * include/grub/i386/multiboot/time.h: Likewise. + * include/grub/multiboot.h: Add GRUB_MACHINE_MULTIBOOT to ifdef. + * loader/multiboot.c: Likewise. + * loader/multiboot_mbi2.c: Likewise. + * util/grub-mkrescue.in: Generate multiboot rescue. + +2010-05-01 Vladimir Serbinenko + + * kern/parser.c (grub_parser_execute): Cope with read-only config. + +2010-05-01 Vladimir Serbinenko + + Merge handling of input and output terminals. Fix a hang. + + * commands/terminal.c (abstract_terminal): New struct. + (handle_command): New function. Based on grub_cmd_terminal_input. + (grub_cmd_terminal_input): Use handle_command. + (grub_cmd_terminal_output): Use handle_command. + +2010-05-01 BVK Chaitanya + + Fix comment handling. + + * tests/grub_script_comments.in: New testcase. + * conf/tests.rmk: Rules for new testcase. + * script/yylex.l: Updated flex rules. + +2010-04-28 Samuel Thibault + + * docs/grub.texi (play): Document that zero pitches produce rests. + * commands/i386/pc/play.c (grub_cmd_play): Call 'grub_file_open' only + if argc is 1. + +2010-04-27 Vladimir Serbinenko + + * conf/x86-efi.rmk (linux_mod_SOURCES): Write explicitly to avoid + autogen issues. + +2010-04-26 Christian Franke + + * include/grub/util/getroot.h (grub_get_prefix): Remove prototype. + * util/getroot.c [__CYGWIN__] (get_win32_path): Remove function. + (grub_get_prefix): Remove function. + * util/grub-emu.c (main): Replace grub_get_prefix () call by + make_system_path_relative_to_its_root (). + * util/sparc64/ieee1275/grub-setup.c (main): Likewise. + +2010-04-24 Christian Franke + + * Makefile.in (TARGET_LDFLAGS): Add -static-libgcc. + (kernel_img_LDFLAGS): Remove -static-libgcc. + +2010-04-24 Christian Franke + + * configure.ac: Do not CHECK_BSS_START_SYMBOL + and CHECK_END_SYMBOL if grub-emu is built. + Unset TARGET_OBJ2ELF if grub-emu is built + without module support. + +2010-04-24 Jiro SEKIBA + + Nilfs2 support. + + * conf/common.rmk (grub_probe_SOURCES): Add fs/nilfs2.c. + (grub_fstest_SOURCES): Likewise. + (pkglib_MODULES): Add nilfs2.mod. + (nilfs2_mod_SOURCES): New variable. + (nilfs2_mod_CFLAGS): Likewise. + (nilfs2_mod_LDFLAGS): Likewise. + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/nilfs2.c. + * conf/sparc64-ieee1275.rmk (grub_setup_SOURCES): Add fs/nilfs2.c. + * fs/nilfs2.c: New file. + +2010-04-21 Vladimir Serbinenko + + * configure.ac: Refuse to compile for x86_64-efi is mcmodel=large + is not supported. + +2010-04-19 Grégoire Sutre + + Add grub-mkconfig support for NetBSD. + + * util/grub.d/10_netbsd.in: grub-mkconfig helper script for NetBSD. + * util/grub-mkconfig.in: export new NetBSD specific variables. + * po/POTFILES-shell: added 10_netbsd.in. + * util/grub-mkconfig_lib.in: check for gettext binary, default to echo. + +2010-04-19 BVK Chaitanya + + Fix emu build with grub-emu-pci and grub-emu-modules. + + * include/grub/util/misc.h: Export grub_util_{info,error,warn} + functions. + * include/grub/libpciaccess.h: New file. + * conf/any-emu.rmk: Update kernel headers for emu build. + +2010-04-19 Vladimir Serbinenko + + * fs/udf.c (grub_udf_iterate_dir): Silence a spurious warning. + +2010-04-19 Vladimir Serbinenko + + * fs/udf.c (grub_udf_iterate_dir): Decode the Unicode filenames. + +2010-04-18 Vladimir Serbinenko + + * boot/sparc64/ieee1275/boot.S: Various size-reducing changes. + Retrieve chosen/bootpath if bootpath isn't hardcoded. + * conf/sparc64-ieee1275.rmk (grub_setup_SOURCES): Add + util/ieee1275/ofpath.c. + * util/sparc64/ieee1275/grub-ofpathname.c: Renamed to ... + * util/ieee1275/grub-ofpathname.c: ... this. All users updated + * include/grub/sparc64/ieee1275/boot.h + (GRUB_BOOT_MACHINE_KERNEL_SECTOR): Renamed to ... + (GRUB_BOOT_MACHINE_KERNEL_BYTE): ...this. Moved 8 bytes lower. + * util/hostdisk.c (grub_util_biosdisk_get_osdev): New function. + * util/ieee1275/ofpath.c (grub_util_devname_to_ofpath): Make argument + const char *. + * util/sparc64/ieee1275/grub-setup.c (compute_dest_ofpath): Removed. + (setup): Use KERNEL_BYTE instead of KERNEL_SECTOR. + Use grub_util_devname_to_ofpath. Zero-fill boot_devpath on same disk + install. + +2010-04-18 Grégoire Sutre + + * util/grub-mkconfig.in: Corrected two == equality tests. + Set grub_prefix as in grub-install for NetBSD and OpenBSD. + * configure.ac: All definitions and uses of TARGET_IMG_LDFLAGS_AC now + expect a number appended to it. + * acinclude.m4 (grub_PROG_OBJCOPY_ABSOLUTE): ${TARGET_IMG_LDFLAGS_AC} + expects a number appended to it. + +2010-04-18 Vladimir Serbinenko + + * po/POTFILES: Renamed multiboot_loader.c to multiboot.c + +2010-04-18 Vladimir Serbinenko + + * util/hostdisk.c (make_device_name): Change to new partition naming. + +2010-04-17 Vladimir Serbinenko + + * disk/lvm.c (grub_lvm_memberlist): Issue an error if pv->disk = 0. + +2010-04-17 Christian Franke + + * Makefile.in: Add missing localedir setting. + +2010-04-14 Colin Watson + + Restore TEXTDOMAINDIR correction from r1889, lost apparently by + mistake in r2156. Noticed by Anthony Fok. + + * util/grub.d/10_kfreebsd.in (TEXTDOMAINDIR): Set to lowercased + @localedir@. + * util/grub.d/10_linux.in (TEXTDOMAINDIR): Likewise. + +2010-04-14 BVK Chaitanya + + Fix a spurious, uninitialized variable warning. + + * loader/i386/bsdXX.c (grub_freebsd_load_elfmodule_obj): + Initialize variable, shdr. + (grub_freebsd_load_elfmodule): Likewise. + (grub_freebsd_load_elf_meta): Likewise. + +2010-04-13 BVK Chaitanya + + Fix for escaped dollar in double quoted strings. + + * script/yylex.l: Updated flex rules. + * conf/tests.rmk: Rule for new testcase. + * tests/grub_script_dollar.in: New testcase. + +2010-04-13 Carles Pina i Estany +2010-04-13 Colin Watson + + Enclose all translated strings in grub.cfg in single quotes, and + escape them appropriately (Ubuntu bug #552921). + + * util/grub-mkconfig_lib.in (gettext_quoted): New function. + * util/grub.d/10_hurd.in: Use it. + * util/grub.d/10_kfreebsd.in (kfreebsd_entry): Likewise. + * util/grub.d/10_linux.in (linux_entry): Likewise. + +2010-04-11 Vladimir Serbinenko + + Fix cygwin compilation. + + * configure.ac: Define NEED_REGISTER_FRAME_INFO. + * include/grub/misc.h (__register_frame_info) + [NEED_REGISTER_FRAME_INFO && !UTIL]: New export. + (__deregister_frame_info) [NEED_REGISTER_FRAME_INFO && !UTIL]: Likewise. + * kern/misc.c (__register_frame_info) + [NEED_REGISTER_FRAME_INFO && !UTIL]: New empty function. + (__deregister_frame_info) [NEED_REGISTER_FRAME_INFO && !UTIL]: Likewise. + +2010-04-11 Vladimir Serbinenko + + * configure.ac: Respect grub_cv_asm_uscore when defining dummy symbols. + +2010-04-11 Vladimir Serbinenko + + Unify libgcc processing. + + * Makefile.in (kernel_img_LDFLAGS): New variable. + * conf/common.rmk (kernel_img_HEADERS): Add libgcc.h. + * conf/i386-coreboot.rmk (kernel_img_LDFLAGS): Append instead of + overwriting. + * conf/i386-ieee1275.rmk (kernel_img_LDFLAGS): Likewise. + * conf/i386-pc.rmk (kernel_img_LDFLAGS): Likewise. + * conf/i386-qemu.rmk (kernel_img_LDFLAGS): Likewise. + * conf/x86-efi.rmk (kernel_img_LDFLAGS): Likewise. + * conf/mips-qemu-mips.rmk (kernel_img_LDFLAGS): Append instead of + overwriting. Remove -lgcc and -static-libgcc + * conf/mips-yeeloong.rmk (kernel_img_LDFLAGS): Likewise. + * conf/mips.rmk (kernel_img_HEADERS): Remove cpu/libgcc.h + * conf/powerpc-ieee1275.rmk (kernel_img_HEADERS): Remove cpu/libgcc.h + (kernel_img_LDFLAGS): Append instead of overwriting. + Remove -lgcc and -static-libgcc + * conf/sparc64-ieee1275.rmk: Likewise. + * include/grub/powerpc/libgcc.h: Move to ... + * include/grub/libgcc.h: .. this. + * include/grub/libgcc.h: Don't export most of the function on x86. + (__bswapsi2): New export. + (__bswapdi2): Likewise. + * include/grub/mips/libgcc.h: Removed. + * include/grub/sparc64/libgcc.h: Likewise. + +2010-04-10 Vladimir Serbinenko + + * util/hostdisk.c (grub_util_biosdisk_get_grub_dev): Remove + disk_info_msg (conflicts with gettexting into languages with cases). + +2010-04-10 Grégoire Sutre + + Add grub-probe support for NetBSD. + + * util/getroot.c (find_root_device): Convert block device to + character device on NetBSD. + * util/probe.c (probe): Require character device on NetBSD. + * util/hostdisk.c: NetBSD specific headers. + (configure_device_driver): new function to tune device driver + parameters (currently only for NetBSD floppy driver). + (grub_util_biosdisk_open): NetBSD specific code (get disk size + via disklabel ioctl). + (open_device): call configure_device_driver on NetBSD. + (convert_system_partition_to_system_disk): NetBSD specific code. + (device_is_wholedisk): Likewise. + (grub_util_biosdisk_get_grub_dev): Likewise. + (make_device_name): Fixed a typo in bsd_part_str. + * configure.ac: check for opendisk() and getrawpartition() on + NetBSD and set LIBUTIL. + * Makefile.in: add LIBUTIL to LIBS. + +2010-04-10 BVK Chaitanya + + Documentation fix. + + * util/grub-script-check.c: Better help message. + +2010-04-10 BVK Chaitanya + + Fix FreeBSD build. + + * configure.ac: Flex version check. + * conf/common.rmk: Add -Wno-error to sh.mod. + * script/yylex.l: Remove all #pragma. + +2010-04-10 Vladimir Serbinenko + + * include/grub/util/misc.h (canonicalise_file_name): Add missing + prototype. + Reported by: Seth Goldberg. + +2010-04-10 Vladimir Serbinenko + + * loader/multiboot.c (GRUB_MOD_INIT) [GRUB_USE_MULTIBOOT2]: + Rename "module" to "module2". + Reported by: Seth Goldberg. + +2010-04-10 Vladimir Serbinenko + + * include/grub/efi/memory.h (grub_machine_mmap_iterate): Remove + EXPORT_FUNC. + Reported by: Seth Goldberg. + +2010-04-10 Vladimir Serbinenko + + * lib/posix_wrap/locale.h: Add missing file. + Reported by: Seth Goldberg. + +2010-04-10 Vladimir Serbinenko + + grub-emu module load support. + + * Makefile.in (TARGET_NO_MODULES): New variable. All users of + NO_DYNAMIC_MODULES switched to this. + (TARGET_CFLAGS): Add -DGRUB_TARGET_NO_MODULES=1 if applicable. + (CFLAGS): Likewise. + * conf/any-emu.rmk: Generate symlist. + (kernel_img_HEADERS): Add util/datetime.h. + (kernel_img_HEADERS) [sdl]: Add sdl.h. + (kernel_img_HEADERS) [libusb]: Add libusb.h. + (kernel_img_SOURCES) [TARGET_NO_MODULES = no && !x86]: Add + kern/$(target_cpu)/cache.S. + * configure.ac (grub-emu-modules): New option. + * genmk.rb: Handle multiple source lists. + * include/grub/sdl.h: New file. + * include/grub/libusb.h: Likewise. + * util/grub-emu.c (main): Hanle (host) root. + * util/hostdisk.c (grub_util_biosdisk_get_grub_dev): Error with + GRUB_ERR_UNKNOWN_DEVICE. + * util/misc.c: Move mm functions to ... + * util/mm.c: ... here. All users updated. + +2010-04-09 Vladimir Serbinenko + + * Makefile.in (RMKFILES): Search in srcdir and not current directory. + (MAINTAINER_CLEANFILES): Don't add $(srcdir) to MKFILES. Add few + missing files. + (maintainer-clean): Remove libgcrypt-grub. + +2010-04-09 Vladimir Serbinenko + + * term/efi/console.c (grub_console_checkkey): Macroify key contants. + +2010-04-09 EFI Coder + + * normal/menu_text.c (print_message): Clean up the message and show + the Fn information when on EFI + * term/efi/console.c (grub_console_checkkey): Add F4 support. + +2010-04-09 Vladimir Serbinenko + + * normal/autofs.c (read_fs_list): New parameter 'prefix'. + All users updated. + * normal/crypto.c (read_crypto_list): Likewise. + * normal/dyncmd.c (read_command_list): Likewise. + * normal/term.c (read_terminal_list): Likewise. + * normal/main.c (read_lists): Use explicit prefix. + (read_lists_hook): Use read_lists. + (grub_normal_execute): Likewise. + +2010-04-09 Vladimir Serbinenko + + * util/grub-mkrescue.in: Fix incorrect path in coreboot part. + Reported by: Thomas Schmitt. + Add -no-emul-boot to grub-mkisofs parameters. + +2010-04-09 Vladimir Serbinenko + + * font/font.c: Indented. + +2010-04-09 BVK Chaitanya + + Elif support to GRUB script (by Deepak Vankadaru). + + * tests/grub_script_if.in: New testcase. + * conf/tests.rmk: Rule for new testcase. + * script/parser.y: Grammar rules for elif. + +2010-04-09 BVK Chaitanya + + While and until loops support to GRUB script. + + * include/grub/script_sh.h (grub_script_cmdwhile): New struct. + (grub_script_create_cmdwhile): New function prototype. + (grub_script_execute_cmdwhile): New function prototype. + * script/execute.c (grub_script_execute_cmdwhile): New function. + * script/parser.y (command): New commands. + (whilecmd): New grammar rule. + (untilcmd): New grammar rule. + * script/script.c (grub_script_create_cmdwhile): New function. + * util/grub-script-check.c (grub_script_execute_cmdwhile): New + function. + + * tests/grub_script_while1.in: New testcase. + * conf/tests.rmk: Rule for new testcase. + +2010-04-09 Vladimir Serbinenko + + * util/grub.d/00_header.in: Add few missing quotes. Recognise *.jpeg + as *.jpg. + +2010-04-09 Mario Vazquez + + GRUB_BACKGROUND support. + + * util/grub-mkconfig.in: Export GRUB_BACKGROUND. + * util/grub.d/00_header.in: Parse GRUB_BACKGROUND. + +2010-04-09 Vladimir Serbinenko + + Load fonts and modules for gfxmenu in grub-mkconfig. + Idea by: Mario Vazquez + + * util/grub.d/00_header.in: Load pf2 and image modules. + +2010-04-09 Vladimir Serbinenko + + grub-mkconfig multiple terminal support. + + * util/grub-mkconfig.in: Handle multiple terminals correctly. + * util/grub.d/00_header.in: Likewise. + +2010-04-09 Vladimir Serbinenko + + * Makefile.in: Specify files explicitly instead of using $< and $@ since + we use cd $(srcdir). + +2010-04-08 Colin Watson + + * util/grub.d/10_linux.in: Only use the first word of + GRUB_DISTRIBUTOR for --class, to avoid problems if somebody puts + spaces in GRUB_DISTRIBUTOR. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + +2010-04-06 BVK Chaitanya + + Fix unit testing framework for Qemu 0.12. + + * tests/util/grub-shell.in: Remove -serial stdio option. + +2010-04-06 Vladimir Serbinenko + + POSIX header file wrappers. + + * lib/posix_wrap/assert.h: New file. Wrapper for its POSIX + equivalents. + * lib/posix_wrap/ctype.h: Likewise. + * lib/posix_wrap/errno.h: Likewise. + * lib/posix_wrap/langinfo.h: Likewise. + * lib/posix_wrap/limits.h: Likewise. + * lib/posix_wrap/localcharset.h: Likewise. + * lib/posix_wrap/stdint.h: Likewise. + * lib/posix_wrap/stdio.h: Likewise. + * lib/posix_wrap/stdlib.h: Likewise. + * lib/posix_wrap/string.h: Likewise. + * lib/posix_wrap/sys/types.h: Likewise. + * lib/posix_wrap/unistd.h: Likewise. + * lib/posix_wrap/wchar.h: Likewise. + * lib/posix_wrap/wctype.h: Likewise. + * conf/common.rmk (grub_script.yy.c): Remove #include elimination. + (grub_script.yy.h): Likewise. + * script/yylex.l: Remove POSIX emulation #defines. + * Makefile.in (POSIX_CFLAGS): New variable. + (GNULIB_UTIL_CFLAGS): Likewise. + + Regexp support. + + * conf/common.rmk (pkglib_MODULES): Add regexp.mod. + (regexp_mod_SOURCES): New variable. + (regexp_mod_CFLAGS): Likewise. + (regexp_mod_LDFLAGS): Likewise. + * commands/regexp.c: New file. + * gnulib/regcomp.c: New file. Imported from gnulib. + * gnulib/regex.c: Likewise. + * gnulib/regex_internal.c: Likewise. + * gnulib/regex_internal.h: Likewise. + * gnulib/regexec.c: Likewise. + * gnulib/regex.h: Likewise. + +2010-04-05 Vladimir Serbinenko + + * loader/i386/multiboot_mbi.c (grub_multiboot_load): Correctly report + unsupported video mode types. + +2010-04-05 Vladimir Serbinenko + + * kern/i386/pc/startup.S (grub_getrtsecs): Removed (dead code). + +2010-04-05 Vladimir Serbinenko + + * include/grub/i386/pc/init.h (grub_get_mmap_entry): Don't export. + * conf/i386-pc.rmk (kernel_img_HEADERS): Remove machine/init.h. + +2010-04-04 Vladimir Serbinenko + + Remove unused grub_vga_get_font. + + * kern/i386/pc/startup.S (grub_vga_get_font): Removed. + * include/grub/i386/pc/vga.h (grub_vga_get_font): Likewise. + +2010-04-03 Grégoire Sutre + + * kern/misc.c: Disable the __enable_execute_stack hack for utilities. + * include/grub/misc.h: Likewise. + +2010-04-03 Grégoire Sutre + + * util/grub-install.in: Add `|| exit 1' to all grub-probe calls + for which failure is fatal. + +2010-04-03 Grégoire Sutre + + * util/grub-install.in: Use mkdir -p to create grub directory. + * util/i386/efi/grub-install.in: Likewise. + * util/ieee1275/grub-install.in: Likewise. + +2010-04-03 Grégoire Sutre + + * Makefile.in (LEX): new variable. + +2010-04-03 Grégoire Sutre + + * util/i386/efi/grub-dumpdevtree: replaced the non-portable `==' by + `=' and added double quotes on operands of this equality test. + +2010-04-03 Vladimir Serbinenko + + * Makefile.in (uninstall): Remove a leftover debug echo. + Reported by: Grégoire Sutre + +2010-04-03 Vladimir Serbinenko + + MIPS multiboot2 support. + + * conf/mips.rmk (pkglib_MODULES): Add multiboot2.mod. + (multiboot2_mod_SOURCES): New variable. + (multiboot2_mod_CFLAGS): Likewise. + (multiboot2_mod_LDFLAGS): Likewise. + (multiboot2_mod_ASFLAGS): Likewise. + * include/grub/i386/multiboot.h (MULTIBOOT_INITIAL_STATE): New + definition. + (MULTIBOOT_ENTRY_REGISTER): Likewise. + (MULTIBOOT_MBI_REGISTER): Likewise. + (MULTIBOOT_ARCHITECTURE_CURRENT): Likewise. + (MULTIBOOT_ELF32_MACHINE): Likewise. + (MULTIBOOT_ELF64_MACHINE): Likewise. + * include/grub/mips/multiboot.h: New file. + * include/grub/video.h (grub_video_driver_id): New type + GRUB_VIDEO_DRIVER_SM712. + (grub_video_get_info_and_fini): Export. + (grub_video_get_palette): Likewise. + (grub_video_get_driver_id): Likewise. + * include/multiboot2.h: Resynced with spec. + * loader/i386/multiboot.c: Moved from here ... + * loader/multiboot.c: ... here. All users updated. + (grub_multiboot_boot): Use platform-specific macros. + * loader/i386/multiboot_elfxx.c: Moved from here ... + * loader/multiboot_elfxx.c: ... here. All users updated. + (E_MACHINE): Use MULTIBOOT_ELF32_MACHINE and MULTIBOOT_ELF64_MACHINE. + * loader/i386/multiboot_mbi2.c (grub_multiboot_load): Check arcitecture. + * video/sm712.c (grub_video_sm712_adapter): Add missing id field. + +2010-04-02 Vladimir Serbinenko + + Import gnulib argp module. + + * gnulib/argp-ba.c: New file. + * gnulib/argp-eexst.c: Likewise. + * gnulib/argp-fmtstream.c: Likewise. + * gnulib/argp-fmtstream.h: Likewise. + * gnulib/argp-fs-xinl.c: Likewise. + * gnulib/argp-help.c: Likewise. + * gnulib/argp-namefrob.h: Likewise. + * gnulib/argp-parse.c: Likewise. + * gnulib/argp-pin.c: Likewise. + * gnulib/argp-pv.c: Likewise. + * gnulib/argp-pvh.c: Likewise. + * gnulib/argp-version-etc.c: Likewise. + * gnulib/argp-version-etc.h: Likewise. + * gnulib/argp-xinl.c: Likewise. + * gnulib/argp.h: Likewise. + +2010-03-31 Vladimir Serbinenko + + * kern/device.c (grub_device_iterate): Clear errors after failed + opening device. + +2010-03-31 Vladimir Serbinenko + + * kern/ieee1275/openfw.c (grub_children_iterate): Skip device itself if + returned by firmware. + +2010-03-30 Vladimir Serbinenko + + * loader/i386/multiboot_mbi2.c (retrieve_video_parameters): Fix + compilation on coreboot and qemu + +2010-03-28 Vladimir Serbinenko + + * include/multiboot2.h: Resync with spec. + +2010-03-28 Vladimir Serbinenko + + Multiboot2 tag support + + * conf/i386.rmk (multiboot2_mod_SOURCES): Replace + loader/i386/multiboot_mbi.c with loader/i386/multiboot_mbi2.c. + Remove loader/multiboot_loader.c. + * include/grub/i386/multiboot.h (grub_multiboot_real_boot): Removed. + (grub_multiboot2_real_boot): Likewise. + * include/grub/multiboot.h (grub_multiboot_set_accepts_video): Removed. + (grub_get_multiboot_mmap_count): New proto. + (grub_fill_multiboot_mmap): Likewise. + (grub_multiboot_set_video_mode): Likewise. + (grub_multiboot_set_console): Likewise. + (grub_multiboot_load): Likewise. + (grub_multiboot_load_elf): Likewise. + (GRUB_MULTIBOOT_CONSOLE_EGA_TEXT): New definition. + (GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER): Likewise. + * include/multiboot.h: Resynced with specification. + * include/multiboot2.h: Resynced with specification. + * loader/i386/multiboot_mbi.c (DEFAULT_VIDEO_MODE): Moved from here... + * loader/i386/multiboot.c (DEFAULT_VIDEO_MODE): ... here. + * loader/i386/multiboot_mbi.c (HAS_VGA_TEXT): Moved from here .. + * include/grub/multiboot.h (GRUB_MACHINE_HAS_VGA_TEXT): ... here. All + users updated. + * loader/i386/multiboot_mbi.c (accepts_video): Moved from here... + * loader/i386/multiboot.c (accepts_video): ... here. All users updated. + * loader/i386/multiboot_mbi.c (grub_multiboot_set_accepts_video): + Removed. + * loader/i386/multiboot_mbi.c (grub_get_multiboot_mmap_len): + Moved from here... + * loader/i386/multiboot.c (grub_get_multiboot_mmap_len): ... here. + * loader/i386/multiboot_mbi.c (grub_fill_multiboot_mmap): + Moved from here... + * loader/i386/multiboot.c (grub_fill_multiboot_mmap): ... here. + * loader/i386/multiboot_mbi.c (set_video_mode): Moved from here... + * loader/i386/multiboot.c (grub_multiboot_set_video_mode): ... here. + All users updated. + * loader/i386/multiboot_mbi2.c: New file. + +2010-03-27 Vladimir Serbinenko + + Resync with gnulib. + + * Makefile.in (GNULIB_CFLAGS): New variable. + * conf/common.rmk (grub_mkisofs_CFLAGS): Add GNULIB_CFLAGS. + (grub_script_check_CFLAGS): New variable. + * gnulib/alloca.h: Resync with gnulib. + * gnulib/error.c: Likewise. + * gnulib/error.h: Likewise. + * gnulib/fnmatch.c: Likewise. + * gnulib/fnmatch_loop.c: Likewise. + * gnulib/getdelim.c: Likewise. + * gnulib/getline.c: Likewise. + * gnulib/getopt.c: Likewise. + * gnulib/getopt1.c: Likewise. + * gnulib/getopt_int.h: Likewise. + * gnulib/gettext.h: Likewise. + * gnulib/progname.c: Likewise. + * gnulib/progname.h: Likewise. + +2010-03-27 Grégoire Sutre + + Fix a build failure (-Wundef -Werror) when ENABLE_NLS is not defined, + which is the case with --disabled-nls. + + * include/grub/i18n.h: Use (defined(ENABLE_NLS) + && ENABLE_NLS) instead of ENABLE_NLS in all #if preprocessor macros. + * util/misc.c: Likewise. + * util/mkisofs/mkisofs.c: Likewise. + * util/mkisofs/mkisofs.h: Likewise. + +2010-03-27 Vladimir Serbinenko + + Simplify Apple CC support. + + * commands/i386/pc/drivemap_int13h.S: Use LOCAL when possible. + Add 0 byte at the end not to have a symbol with empty target. + * mmap/i386/pc/mmap_helper.S: Likewise. + * genmk.rb: Ignore errors 2030 and 2050. + * kern/i386/pc/startup.S: Use LOCAL when possible. + +2010-03-26 BVK Chaitanya + + Testcase and the fix for final semicolon on cmdline. + + * tests/grub_script_final_semicolon.in: New testcase. + * conf/tests.rmk: Rules for the new testcase. + * script/parser.y: Grammar fix. + +2010-03-26 BVK Chaitanya + + Blank lines testcase for GRUB script. + + * tests/grub_script_blanklines.in: New testcase. + * conf/tests.rmk: Rules for the new testcase. + +2010-03-26 Vladimir Serbinenko + + Don't use __FILE__. + + * genmk.rb: Add -DGRUB_FILE to all C targets. + * fs/reiserfs.c: Replace __FILE__ with GRUB_FILE. + * include/grub/list.h: Likewise. + * include/grub/misc.h: Likewise. + * include/grub/mm.h: Likewise. + * include/grub/test.h: Likewise. + * kern/mm.c: Likewise. + * lib/libgcrypt_wrap/cipher_wrap.h: Likewise. + +2010-03-26 Vladimir Serbinenko + + Sunpc partitions support. + + * conf/common.rmk (grub_probe_SOURCES): Add partmap/sunpc.c. + (grub_fstest_SOURCES): Likewise. + (pkglib_MODULES): Add part_sunpc.mod. + (part_sunpc_mod_SOURCES): New variable. + (part_sunpc_mod_CFLAGS): Likewise. + (part_sunpc_mod_LDFLAGS): Likewise. + * conf/i386-pc.rmk (grub_setup_SOURCES): Add partmap/sunpc.c. + * partmap/sunpc.c: New file. + +2010-03-26 BVK Chaitanya + + For loop support to GRUB script. + + * include/grub/script_sh.h (grub_script_cmdfor): New struct. + (grub_script_create_cmdfor): New function prototype. + (grub_script_execute_cmdfor): New function prototype. + * script/execute.c (grub_script_execute_cmdfor): New function. + * script/parser.y (command): New for command. + (forcmd): New grammar rule. + * script/script.c (grub_script_create_cmdfor): New function. + * util/grub-script-check.c (grub_script_execute_cmdfor): New + function. + * tests/grub_script_for1.in: New testcase. + * conf/tests.rmk: Rules for new testcase. + +2010-03-26 Vladimir Serbinenko + + Nested partitions + + * commands/blocklist.c (grub_cmd_blocklist): Don't check whether + 'partition' is NULL, grub_partition_get_start already does that. + * commands/loadenv.c (check_blocklists): Likewise. + (write_blocklists): Likewise. + * conf/common.rmk (grub_probe_SOURCES): Add partmap/bsdlabel.c. + (grub_fstest_SOURCES): Likewise. + (pkglib_MODULES): Add part_bsd.mod. + (part_bsd_mod_SOURCES): New variable. + (part_bsd_mod_CFLAGS): Likewise. + (part_bsd_mod_LDFLAGS): Likewise. + * conf/i386-pc.rmk (grub_setup_SOURCES): Add partmap/bsdlabel.c. + (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * include/grub/bsdlabel.h: New file. + * include/grub/partition.h (grub_partition_map): Remove 'probe' and + 'get_name'. + (grub_partition): Add 'parent' and 'number'. Remove 'data'. + (grub_partition_map_list): New variable. + (grub_partition_map_register): Inline. + (grub_partition_map_unregister): Likewise. + (FOR_PARTITION_MAPS): New macro. + (grub_partition_map_iterate): Removed. + (grub_partition_get_start): Handle nested partitions. + * include/grub/msdos_partition.h: Remove bsd-related entries. + (grub_pc_partition): Remove. + * kern/disk.c (grub_disk_close): Free partition data. + (grub_disk_adjust_range): Handle nested partitions. + * kern/partition.c (grub_partition_map_probe): New function. + (grub_partition_probe): Parse name to number, handle subpartitions. + (get_partmap): New function. + (grub_partition_iterate): Handle subpartitions. + (grub_partition_get_name): Likewise. + * loader/i386/pc/bsd.c (grub_bsd_get_device): Likewise. + * loader/i386/multiboot.c (grub_multiboot_get_bootdev): Likewise. + * loader/i386/pc/chainloader.c (grub_chainloader_cmd): Likewise. + * partmap/acorn.c (acorn_partition_map_iterate): Don't force raw access. + Set 'number'. + (acorn_partition_map_probe): Remove. + (acorn_partition_map_get_name): Likewise. + * partmap/amiga.c (amiga_partition_map_iterate): Don't force raw access. + Set 'number'. + Set 'index' to 0 since there can be only one partition entry per sector. + (amiga_partition_map_probe): Remove. + (amiga_partition_map_get_name): Likewise. + * partmap/apple.c (apple_partition_map_iterate): Don't force raw access. + Set 'number'. + Set 'offset' and 'index' to real positions of partitions. + (apple_partition_map_probe): Remove. + (apple_partition_map_get_name): Likewise. + * partmap/bsdlabel.c: New file. + * partmap/gpt.c (gpt_partition_map_iterate): Don't force raw access. + Set 'number'. + Allocate 'data' so it can be correctly freed. + Set 'index' to offset inside sector. + (gpt_partition_map_probe): Remove. + (gpt_partition_map_get_name): Likewise. + * partmap/msdos.c (grub_partition_parse): Remove. + (pc_partition_map_iterate): Don't force raw access. + Set 'number'. + Make 'ext_offset' a local variable. + (pc_partition_map_probe): Remove. + (pc_partition_map_get_name): Remove. + * partmap/sun.c (sun_partition_map_iterate): Don't force raw access. + Set 'number'. + (sun_partition_map_probe): Remove. + (sun_partition_map_get_name): Likewise. + * parttool/msdospart.c (grub_pcpart_boot): Handle nested partitions. + (grub_pcpart_type): Likewise. + * util/hostdisk.c (open_device): Handle new numbering scheme. + (grub_util_biosdisk_get_grub_dev): Handle nested partitions. + * util/i386/pc/grub-setup.c (setup): Handle new numbering scheme. + * util/grub-probe.c (probe_partmap): Handle nested paritions. + * util/grub-install.in: Insert all subpartition modules. + * util/ieee1275/grub-install.in: Likewise. + +2010-03-24 Adrian Glaubitz + + * kern/dl.c (grub_dl_resolve_symbols): Improve error message + grammar. + +2010-03-24 Colin Watson + + * .bzrignore: Add grub-bin2h, grub-reboot, and grub-set-default. + +2010-03-21 Colin Watson + + * util/grub-install.in: Copy .mo files from @datadir@/locale, to + match where 'make install' puts them. + * util/i386/efi/grub-install.in: Likewise. + +2010-03-19 Colin Watson + + * .bzrignore: Add gentrigtables, grub-script-check, + grub_script_check_init.c, grub_script_check_init.h, and + trigtables.c. + +2010-03-18 Vladimir Serbinenko + + * kern/parser.c: Indented. + +2010-03-17 Vladimir Serbinenko + + * term/i386/pc/vesafb.c: Removed (orphaned, deprecated and broken). + +2010-03-17 Vladimir Serbinenko + + * video/fb/fbblit.c (grub_video_fbblit_blend_XXXA8888_1bit): Handle + alpha_mask_size == 0 case. + +2010-03-14 BVK Chaitanya + + 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. + +2010-03-14 Vladimir Serbinenko + + Remove some redundancy in build system. + + * Makefile.in (TARGET_CFLAGS): Add -ffreestanding. + (TARGET_ASFLAGS): Add -nostdinc -fno-builtin. + (TARGET_LDFLAGS): Add -nostdlib. + (TARGET_IMG_LDFLAGS): Likewise. + * commands/lsmmap.c (grub_cmd_lsmmap) [GRUB_MACHINE_EMU]: Don't do + anything since mmap isn't available. + * conf/any-emu.rmk (kernel_img_SOURCES): Remove commands/boot.c. + Add util/time.c. + (pkglib_MODULES): Remove reboot.mod. + (reboot_mod_SOURCES): Removed. + (reboot_mod_CFLAGS): Likewise. + (reboot_mod_LDFLAGS): Likewise. + * conf/common.rmk (script/lexer.c_DEPENDENCIES): New variable. + (MOSTLYCLEANFILES): Add symlist.c kernel_syms.lst. + (DEFSYMFILES): Add kernel_syms.lst. + (kernel_img_HEADERS): Add common headers. + (symlist.c): New target. + (kernel_syms.lst): Likewise. + (pkglib_MODULES): Add memdisk.mod. + (memdisk_mod_SOURCES): New variable. + (memdisk_mod_CFLAGS): Likewise. + (memdisk_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add reboot.mod. + (reboot_mod_SOURCES): New variable. + (reboot_mod_CFLAGS): Likewise. + (reboot_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add date.mod. + (date_mod_SOURCES): New variable. + (date_mod_CFLAGS): Likewise. + (date_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add datehook.mod. + (datehook_mod_SOURCES): New variable. + (datehook_mod_CFLAGS): Likewise. + (datehook_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add lsmmap.mod. + (lsmmap_mod_SOURCES): New variable. + (lsmmap_mod_CFLAGS): Likewise. + (lsmmap_mod_LDFLAGS): Likewise. + (pkglib_MODULES): Add boot.mod. + (boot_mod_SOURCES): New variable. + (boot_mod_CFLAGS): Likewise. + (boot_mod_LDFLAGS): Likewise. + * conf/i386-coreboot.rmk: Removed redundant parts. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/mips-yeeloong.rmk: Likewise. + * conf/mips.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * conf/i386-coreboot.rmk: Moved qemu parts .. + * conf/i386-qemu.rmk: ... here + * conf/i386-efi.rmk: Moved common parts to... + * conf/x86-efi.rmk: ... here. + * conf/i386.rmk: Added modules common to all x86 variants. + * configure.ac: Add -m32/-m64 to TARGET_ASFLAGS. + * disk/memdisk.c: Remove grub/machine/kernel.h. + * gensymlist.sh.in: Include symbol.h. + * hook/datehook.c: Correct module name. + * include/grub/datetime.h (grub_get_datetime) [GRUB_MACHINE_EMU]: Export. + (grub_set_datetime) [GRUB_MACHINE_EMU]: Likewise. + * include/grub/i386/efi/serial.h: New file. + * include/grub/x86_64/efi/serial.h: Likewise. + * util/time.c: Likewise. + * video/ieee1275.c (grub_video_ieee1275_setup): Handle 64-bit void *. + +2010-03-14 Colin King +2010-03-14 Colin Watson + + Shrink the pre-partition-table part of boot.img by eight bytes. + + * boot/i386/pc/boot.S (ERR): New macro. + (chs_mode): Use ERR. + (geometry_error): Likewise. + (hd_probe_error): Remove. This is only used once, so we wrwite + it inline instead. + (read_error): Instead of printing read_error_string, just set up + %si and fall through to ... + (error_message): ... this new function, also used by ERR. + +2010-03-14 Colin Watson + + Speed up consecutive hostdisk operations on the same device. + + * util/hostdisk.c (struct grub_util_biosdisk_data): New structure. + (grub_util_biosdisk_open): Initialise disk->data. + (struct linux_partition_cache): New structure. + (linux_find_partition): Cache partition start positions; these are + expensive to compute on every read and write. + (open_device): Cache open file descriptor in disk->data, so that we + don't have to reopen it and flush the buffer cache for consecutive + operations on the same device. + (grub_util_biosdisk_close): New function. + (grub_util_biosdisk_dev): Set `close' member. + + * conf/common.rmk (grub_probe_SOURCES): Add kern/list.c. + * conf/i386-efi.rmk (grub_setup_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_setup_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_setup_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_setup_SOURCES): Likewise. + +2010-03-14 Vladimir Serbinenko + + Compile parts of grub-emu as modules. + + * Makefile.in (TARGET_CPPFLAGS) [emu]: Remove -nostdinc -isystem. + (pkglib_DATA) [emu]: Remove moddep.lst command.lst fs.lst + partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst. + (all-local): Add $(GRUB_EMU). + (install-local): Install $(GRUB_EMU). + (uninstall): Uninstall $(GRUB_EMU). + * commands/parttool.c: Replace GRUB_UTIL with GRUB_NO_MODULES. + * kern/dl.c: Likewise. + * commands/sleep.c: Not include machine/time.h. + * conf/any-emu.rmk (COMMON_LDFLAGS): New variable. + (COMMON_CFLAGS): Likewise. + (sbin_UTILITIES): Remove grub-emu. + (grub_emu_SOURCES): Removed. + (kernel_img_RELOCATABLE): New variable. + (pkglib_PROGRAMS): Add kernel.img. + (kernel_img_SOURCES): New variable + (kernel_img_CFLAGS): Likewise. + (kernel_img_LDFLAGS): Likewise. + (TARGET_NO_STRIP): Likewise. + (TARGET_NO_DYNAMIC_MODULES): Likewise. + (pkglib_MODULES): Add progname.mod, hostfs.mod, host.mod, reboot.mod, + halt.mod, cpuid.mod, usb.mod, sdl.mod and pci.mod. + (grub-emu): New target. + (GRUB_EMU): New variable. + * configure.ac: Whitelist -emu as possible x86_64 architecture. + * efiemu/main.c: Replace GRUB_UTIL with GRUB_MACHINE_EMU. + * loader/xnu.c: Likewise. + * include/grub/pci.h: Likewise. + * genemuinit.sh: New file. + * genemuinitheader.sh: Likewise. + * genmk.rb: Don't strip if TARGET_NO_STRIP is yes. + Support TARGET_NO_DYNAMIC_MODULES. + * include/grub/dl.h (GRUB_NO_MODULES): New variable. + * commands/search.c: Fix GRUB_MOD_INIT and GRUB_MOD_FINI arguments. + * disk/loopback.c: Likewise. + * font/font_cmd.c: Likewise. + * partmap/acorn.c: Likewise. + * partmap/amiga.c: Likewise. + * partmap/apple.c: Likewise. + * partmap/gpt.c: Likewise. + * partmap/msdos.c: Likewise. + * partmap/sun.c: Likewise. + * parttool/msdospart.c: Likewise. + * term/gfxterm.c: Likewise. + * video/bitmap.c: Likewise. + * video/readers/jpeg.c: Likewise. + * video/readers/png.c: Likewise. + * video/readers/tga.c: Likewise. + * video/video.c: Likewise. + * util/grub-emu.c (read_command_list): Removed. + (main): Don't call util_init_nls. + * util/misc.c (grub_err_printf) [!GRUB_UTIL]: Removed. + (grub_util_init_nls) [!GRUB_UTIL]: Likewise. + +2010-03-14 Vladimir Serbinenko + + * conf/powerpc-ieee1275.rmk (pkglib_MODULES): Add datetime.mod, + date.mod, datehook.mod. + (datetime_mod_SOURCES): New variable. + (datetime_mod_CFLAGS): Likewise. + (datetime_mod_LDFLAGS): Likewise. + (date_mod_SOURCES): Likewise. + (date_mod_CFLAGS): Likewise. + (date_mod_LDFLAGS): Likewise. + (datehook_mod_SOURCES): Likewise. + (datehook_mod_CFLAGS): Likewise. + (datehook_mod_LDFLAGS): Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * lib/ieee1275/datetime.c: New file. + +2010-03-14 Vladimir Serbinenko + + * conf/powerpc-ieee1275.rmk (pkglib_MODULES): Add ieee1275_fb.mod. + (ieee1275_fb_mod_SOURCES): New variable. + (ieee1275_fb_mod_CFLAGS): Likewise. + (ieee1275_fb_mod_LDFLAGS): Likewise. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_devices_iterate): + New proto. + * kern/ieee1275/init.c (HEAP_MAX_SIZE): Increased. + (HEAP_MAX_ADDR): Likewise. + * kern/ieee1275/openfw.c (grub_children_iterate): Don't skip empty + type. + Correct stop condition. + (grub_ieee1275_devices_iterate): New function. + * video/ieee1275.c: New file. + +2010-03-14 Vladimir Serbinenko + + Merge sparc grub-mkimage into generic grub-mkimage and a.out support. + + * boot/sparc64/ieee1275/boot.S (boot_continue): Use SCRATCH_PAD_BOOT + as scratch. + * boot/sparc64/ieee1275/diskboot.S (after_info_block): Use + SCRATCH_PAD_DISKBOOT as scratch. + (bootit): Pass Openfirmware pointer in %o4. + * conf/sparc64-ieee1275.rmk (kernel_img_LDFLAGS): Link at 0x4400 instead + of 0x200000. + (grub_mkimage_SOURCES): Replace util/sparc64/ieee1275/grub-mkimage.c + with util/grub-mkrawimage.c. + * configure.ac: Handle GRUB_MACHINE_SPARC64 and GRUB_MACHINE_MIPS. + * include/grub/aout.h (AOUT_MID_SUN): New definition. + (grub_aout_get_type) [GRUB_UTIL]: Removed. + (grub_aout_load) [GRUB_UTIL]: Likewise. + * include/grub/kernel.h (grub_modules_get_end): New proto. + * include/grub/sparc64/ieee1275/boot.h (SCRATCH_PAD): Removed. + (SCRATCH_PAD_BOOT): New definition. + (SCRATCH_PAD_DISKBOOT): Likewise. + (GRUB_BOOT_MACHINE_IMAGE_ADDRESS): Set to 0x4400. + * include/grub/sparc64/ieee1275/ieee1275.h + (grub_ieee1275_original_stack): New variable + * include/grub/sparc64/ieee1275/kernel.h (GRUB_KERNEL_MACHINE_RAW_SIZE): + New definition + (GRUB_KERNEL_MACHINE_STACK_SIZE): Likewise. + (GRUB_PLATFORM_IMAGE_FORMATS): Likewise. + (GRUB_PLATFORM_IMAGE_DEFAULT_FORMAT): Likewise. + (GRUB_PLATFORM_IMAGE_DEFAULT): Likewise. + (GRUB_PLATFORM_IMAGE_RAW): Likewise. + (GRUB_PLATFORM_IMAGE_AOUT): Likewise. + (grub_platform_image_format_t): New type. + * kern/mips/yeeloong/init.c (grub_modules_get_end): Move from here ... + * kern/main.c (grub_modules_get_end) + [GRUB_MACHINE_MIPS_YEELOONG || GRUB_MACHINE_SPARC64]: ... here. + * kern/sparc64/ieee1275/crt0.S: Store firmware entry point in %o0. + (codestart): Switch stacks. + * kern/sparc64/ieee1275/init.c (grub_ieee1275_original_stack): New + variable. + (grub_heap_init): Use grub_modules_get_end. + * loader/sparc64/ieee1275/linux.c (grub_linux_boot): Restore original + stack. + * util/grub-mkrawimage.c (generate_image): Support sparc64. + (main): Likewise. + * util/sparc64/ieee1275/grub-mkimage.c: Removed. + +2010-03-14 Thorsten Glaser + + * util/grub-mkrescue.in: Base ISO UUID on UTC. + +2010-03-08 Matt Kraai + + * util/i386/pc/grub-setup.c (setup): Fix a grammatical error (Debian + bug #559005). + +2010-03-07 Vladimir Serbinenko + + * genmoddep.awk: Output all missing symbols and not only first. + +2010-03-06 Vladimir Serbinenko + + * NEWS: Put the date of 1.98 release. + +2010-03-06 Vladimir Serbinenko + + * configure.ac: Update CPPFLAGS and not CFLAGS when checking for + ft2build.h. + +2010-03-06 Vladimir Serbinenko + + * normal/cmdline.c (grub_cmdline_get): Fix gabled line after + completition in the middle of string. + +2010-03-06 Vladimir Serbinenko + + * util/grub-mkrescue.in: Use mktemp with explicit template. + +2010-03-06 Vladimir Serbinenko + + * loader/i386/bsd.c (grub_bsd_get_device): Fix a memory leak. + +2010-03-06 Vladimir Serbinenko + + * loader/i386/multiboot_mbi.c (grub_multiboot_set_bootdev): Free the + right pointer. + +2010-03-05 Vladimir Serbinenko + + Fix FreeBSD compilation. + + * Makefile.in (TARGET_CPPFLAGS): Remove -nostdinc -isystem. + * configure.ac: Add -nostdinc -isystem to TARGET_CPPFLAGS if it works. + +2010-03-05 Vladimir Serbinenko + + * util/import_gcry.py: Add autogenerated files to MAINTAINER_CLEANFILES. + +2010-03-04 Vladimir Serbinenko + + * gettext/gettext.c (grub_gettext_init_ext): Fix a memory leak. + +2010-03-04 Vladimir Serbinenko + + * disk/scsi.c (grub_scsi_iterate): Fix a memory leak. + +2010-03-04 Robert Millan + + Support relative image path in theme file. + + * gfxmenu/gui_image.c (grub_gui_image): New member theme_dir. + (image_set_property): Handle theme_dir and relative path. + +2010-03-04 Vladimir Serbinenko + + * configure.ac: Alias amd64 to x86_64. + +2010-03-04 Vladimir Serbinenko + + * NEWS: mention multiboot on EFI. + +2010-03-04 Vladimir Serbinenko + + * kern/main.c (grub_load_modules): Handle errors from init functions of + embeded modules. + +2010-03-04 Vladimir Serbinenko + + * normal/autofs.c (autoload_fs_module): Handle errors. + +2010-03-04 Vladimir Serbinenko + + Disable linux.mod on qemu-mips since it's not functional and leads + to compilation failure. + + * conf/mips.rmk (pkglib_MODULES): Remove linux.mod. + * conf/mips-yeeloong.rmk (pkglib_MODULES): Add linux.mod. + * conf/mips.rmk (linux_mod_SOURCES): Move from here ... + * conf/mips-yeeloong.rmk (linux_mod_SOURCES): ... here + * conf/mips.rmk (linux_mod_CFLAGS): Move from here ... + * conf/mips-yeeloong.rmk (linux_mod_CFLAGS): ... here + * conf/mips.rmk (linux_mod_ASFLAGS): Move from here ... + * conf/mips-yeeloong.rmk (linux_mod_ASFLAGS): ... here + * conf/mips.rmk (linux_mod_LDFLAGS): Move from here ... + * conf/mips-yeeloong.rmk (linux_mod_LDFLAGS): ... here + Reported by: BVK Chaitanya + +2010-03-04 Jordan Uggla + + * INSTALL: Add gettext as a dependency and add qemu to a new section + "Prerequisites for make-check". + +2010-03-04 Christian Franke + + * util/grub-pe2elf.c: Add missing include "progname.h". + +2010-03-04 Vladimir Serbinenko + + * normal/crypto.c (read_crypto_list): Fix a typo. + Reported by: Seth Goldberg. + +2010-03-04 Vladimir Serbinenko + + * Makefile.in (DISTCLEANFILES): Add stamp-h1. + Reported by: Seth Goldberg. + +2010-03-04 Vladimir Serbinenko + + * Makefile.in (CLEANFILES) [FONT_SOURCE && grub_mkfont]: Add + ascii.bitmaps. + +2010-03-04 Vladimir Serbinenko + + * genmk.rb: Remove terminal*.lst in make clean. + Reported by: Seth Goldberg. + +2010-03-04 Vladimir Serbinenko + + * util/i386/efi/grub-install.in: Copy gettext files. + +2010-03-01 Vladimir Serbinenko + + * fs/ext2.c (grub_ext2_read_block): Fix an integer overflow. + +2010-03-01 Vladimir Serbinenko + + Wait for user entry basing on presence of output rather than on errors. + + * include/grub/normal.h (grub_normal_get_line_counter): New proto. + (grub_install_newline_hook): Likewise. + * normal/main.c (GRUB_MOD_INIT): Call grub_install_newline_hook. + * normal/menu.c (show_menu): Check line_counter to determine presence + of output. + * normal/term.c (grub_normal_line_counter): New variable. + (grub_normal_get_line_counter): New function. + (grub_install_newline_hook): Likewise. + +2010-03-01 Vladimir Serbinenko + + * commands/cat.c (grub_cmd_cat): Propagate grub_gzfile_open error. + +2010-03-01 Vladimir Serbinenko + + * configure.ac: Update version to 1.98. + +2010-02-26 Vladimir Serbinenko + + * util/grub.d/10_linux.in (linux_entry): Don't default to + gfxpayload=keep if Linux doesn't support video handover. + +2010-02-25 Vladimir Serbinenko + + Don't compile video modules on yeeloong since video subsystem is part + of kernel. + + * conf/common.rmk (pkglib_MODULES) [yeeloong]: Remove video.mod, + video_fb.mod, bitmap.mod, font.mod, gfxterm.mod and bufio.mod + * conf/mips-yeeloong.rmk (kernel_img_HEADERS): Add bitmap.h, + video.h, gfxterm.h, font.h, bitmap_scale.h and bufio.h. + * conf/mips.rmk (kernel_img_HEADERS): Add values instead of overwriting. + * include/grub/bitmap.h: Add EXPORT_FUNC and EXPORT_VAR. + * include/grub/bitmap_scale.h: Likewise. + * include/grub/bufio.h: Likewise. + * include/grub/font.h: Likewise. + * include/grub/gfxterm.h: Likewise. + * include/grub/video.h: Likewise. + * include/grub/vbe.h: Don't include video_fb.h. + * video/i386/pc/vbe.c: Include video_fb.h. + * commands/i386/pc/vbetest.c: Include video.h. + +2010-02-25 Jordan Uggla + + * util/grub-mkconfig.in (GRUB_SAVEDEFAULT): Export new variable. + * util/grub-mkconfig_lib.in (save_default_entry): Only save a new + default entry if GRUB_SAVEDEFAULT=true. This allows using + GRUB_DEFAULT=saved on its own to let grub-reboot work, without + saving a new default on every boot. + +2010-02-24 Vladimir Serbinenko + + * normal/crypto.c (read_crypto_list): Fix a memory leak. + * normal/term.c (read_terminal_list): Likewise. + * normal/main.c (grub_normal_init_page): Likewise. + (grub_normal_read_line_real): Likewise. + +2010-02-24 Vladimir Serbinenko + + * loader/i386/multiboot_mbi.c (grub_multiboot_set_bootdev): Fix a + memory leak. + Reported by: Seth Goldberg. + +2010-02-24 Joey Korkames + + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Remove + duplicate declaration of `start'. + +2010-02-20 Vladimir Serbinenko + + * fs/iso9660.c (grub_iso9660_iterate_dir): Strip version from joliet + filename. + Reported by: Georgy Buranov + +2010-02-20 Carles Pina i Estany + + * util/grub-mkrawimage.c (usage): Change string formatting to + improve gettext. + +2010-02-20 Manoel Rebelo Abranches + + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Add delete and + backspace keys. + +2010-02-20 Vladimir Serbinenko + + * video/fb/video_fb.c (grub_video_fb_scroll): Fix a pixel size bug. + Reported by: Michael Suchanek. + +2010-02-18 Samuel Thibault + + * util/grub-mkconfig.in: Export GRUB_INIT_TUNE. + * util/grub.d/00_header.in: Handle GRUB_INIT_TUNE. + +2010-02-16 Vladimir Serbinenko + + Remove any reference to non-free fonts. + + * commands/videotest.c (grub_cmd_videotest): Use unifont by default. + * docs/gfxmenu-theme-example.txt: Removed. It's both outdated and + uses non-free components. + * font/font.c (grub_font_get_name): Remove example name. + * gfxmenu/gui_label.c (grub_gui_label_new): Use unifont by default. + * gfxmenu/gui_list.c (grub_gui_list_new): Likewise. + * gfxmenu/gui_progress_bar.c (grub_gui_progress_bar_new): Likewise. + * gfxmenu/view.c (grub_gfxmenu_view_new): Likewise. + +2010-02-16 Georgy Buranov + + * disk/efi/efidisk.c (grub_efidisk_get_device_name): Fix a typo. + +2010-02-15 Vladimir Serbinenko + + * term/serial.c (serial_get_divisor) [GRUB_MACHINE_MIPS_YEELOONG]: + Double divisor. + (serial_hw_init) [GRUB_MACHINE_MIPS_YEELOONG]: Don't enable advanced + features. + (GRUB_MOD_INIT) [GRUB_MACHINE_MIPS_YEELOONG]: Default to 115200. + +2010-02-15 Vladimir Serbinenko + + * gensymlist.sh.in: Use TARGET_CC instead of CC. + +2010-02-14 Samuel Thibault + + * commands/i386/pc/play.c (GRUB_MOD_INIT(play)): Fix help. + * docs/grub.texi (Command-line and menu entry commands): Document play + command. + +2010-02-14 Samuel Thibault + + * commands/i386/pc/play.c (grub_cmd_play): If grub_file_open fails, + parse arguments as inline tempo and notes. Move code for playing notes + to... + (play): ... new function. + +2010-02-14 Samuel Thibault + + * commands/i386/pc/play.c (T_REST, T_FINE, struct note, beep_on): Use + grub_uint16_t instead of short. + (grub_cmd_play): Use grub_uint32_t instead of int, convert data from + disk from little endian to cpu endianness. + +2010-02-07 Samuel Thibault + + * commands/i386/pc/play.c (BASE_TEMPO): Set to 60 * + GRUB_TICKS_PER_SECOND instead of 120. + +2010-02-14 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Wait for possible + escape sequence after \e. + +2010-02-14 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_putchar): Don't output + non-ASCII characters. + +2010-02-14 Vladimir Serbinenko + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Enclose + set root in single quotes to prevent \, from being unescaped. + +2010-02-14 Vladimir Serbinenko + + Prevent unknown commands from stopping menuentry execution. + + * script/execute.c (grub_script_execute_cmdline): Print error after + unknown command. + +2010-02-14 Vladimir Serbinenko + + * fs/i386/pc/pxe.c (GRUB_MOD_INIT): Fix typo. + Reported by: Pavel Pisa. + +2010-02-13 Vladimir Serbinenko + + * io/gzio.c (grub_gzio_open): Use grub_zalloc. + +2010-02-13 Vladimir Serbinenko + + Merge grub_ieee1275_map_physical into grub_map and rename to + grub_ieee1275_map + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_map): New proto. + * include/grub/sparc64/ieee1275/ieee1275.h (grub_ieee1275_map_physical): + Remove. + * kern/ieee1275/openfw.c (grub_map): Rename to ... + (grub_ieee1275_map): ... this. All users updated. Add phys_lo when + necessary. + * kern/sparc64/ieee1275/ieee1275.c (grub_ieee1275_map_physical): Remove. + +2010-02-13 Vladimir Serbinenko + + * disk/ieee1275/ofdisk.c (grub_ofdisk_open): Check device type before + opening and not after. + +2010-02-13 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Macroify + constants. + +2010-02-13 Vladimir Serbinenko + + * loader/sparc64/ieee1275/linux.c (align_addr): Remove. + (alloc_phys): Use ALIGN_UP instead of align_addr. + +2010-02-13 Vladimir Serbinenko + + * loader/sparc64/ieee1275/linux.c (alloc_phys): Correct bounds checking. + +2010-02-13 Vladimir Serbinenko + + * kern/sparc64/ieee1275/crt0.S (codestart): Move modules backwards. + +2010-02-13 Vladimir Serbinenko + + * disk/ieee1275/ofdisk.c (grub_ofdisk_read): Remove excessively + verbose dprintf. + +2010-02-13 Vladimir Serbinenko + + Fix over-4GiB seek on sparc64. + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_seek): + Replace pos_i and pos_lo with pos. All users updated. + * include/grub/powerpc/ieee1275/ieee1275.h (GRUB_IEEE1275_CELL_SIZEOF): + New constant. + * include/grub/sparc64/ieee1275/ieee1275.h (GRUB_IEEE1275_CELL_SIZEOF): + Likewise. + * kern/ieee1275/ieee1275.c (grub_ieee1275_seek): Split pos into pos_hi + and pos_lo. + +2010-02-13 Vladimir Serbinenko + + * util/grub-mkrawimage.c (main): Call set_program_name. + +2010-02-13 Vladimir Serbinenko + + Properly align 64-bit targets. + + * util/grub-mkrawimage.c (ALIGN_ADDR): New macro. + (generate_image): Use ALIGN_ADDR. + +2010-02-13 Vladimir Serbinenko + + Properly create cross-endian images. + + * include/grub/types.h (grub_host_to_target_addr): New macro + * util/grub-mkrawimage.c (generate_image): Add missing host_to_target. + +2010-02-13 Vladimir Serbinenko + + * util/grub-mkrawimage.c (generate_image): Add forgotten ALIGN_UP. + +2010-02-10 Vladimir Serbinenko + + Pass SIMPLE framebuffer size in bytes and not 64K blocks. + + * loader/i386/efi/linux.c (grub_linux_setup_video): Don't divide by 64K. + * loader/i386/linux.c (grub_linux_setup_video): Likewise. + (grub_linux_boot): Divide by 64K when on VESA. + +2010-02-10 Vladimir Serbinenko + + Support GRUB_GFXPAYLOAD_LINUX. + + * util/grub-mkconfig.in: Export GRUB_GFXPAYLOAD_LINUX. + * util/grub.d/10_linux.in (linux_entry): Handle GRUB_GFXPAYLOAD_LINUX. + +2010-02-10 Vladimir Serbinenko + + * script/execute.c (grub_script_execute_cmdline): Use grub_print_error + to show messages instead of discarding them. + Process errors after executing command and not before. Keep old method + too as precaution. + +2010-02-09 Vladimir Serbinenko + + * configure.ac: Check for ft2build.h. + +2010-02-07 Vladimir Serbinenko + + * kern/ieee1275/openfw.c (grub_halt): Try executing "poweroff". + +2010-02-07 Vladimir Serbinenko + + * genkernsyms.sh.in: Use TARGET_CC. + +2010-02-07 Colin Watson + + * NEWS: Update. + +2010-02-07 Vladimir Serbinenko + + * include/grub/multiboot2.h: Remove leftover file. + * include/grub/normal.h [GRUB_UTIL]: Remove leftover declarations. + * include/grub/partition.h [GRUB_UTIL]: Likewise. + +2010-02-07 Yves Blusseau + + * gnulib/getdelim.c: add missing header (type ssize_t must be defined). + +2010-02-07 Vladimir Serbinenko + + Fix warnings in grub-emu when compiling with maximum warning options. + + * util/grub-emu.c (ENABLE_RELOCATABLE): New definition. + (grub_arch_modules_addr): Return 0 and not NULL. + * util/misc.c (ENABLE_RELOCATABLE): New definition. + (xstrdup): Use newstr instead of dup. + * util/hostdisk.c (grub_util_biosdisk_get_grub_dev): Rename one instance + of disk to dsk to avoid shadowing. + (find_free_slot): Fix prototype. + * util/getroot.c (grub_util_is_dmraid): Make static. + * include/grub/time.h (grub_get_rtc) [GRUB_MACHINE_EMU || GRUB_UTIL]: + Add missing prototype. + * util/sdl.c (grub_video_sdl_set_viewport): Remove. + +2010-02-07 Vladimir Serbinenko + + * loader/i386/linux.c (grub_linux_setup_video): Handle error + appropriately. + +2010-02-07 Vladimir Serbinenko + + * fs/reiserfs.c (grub_reiserfs_read): Use #if 0 instead of commenting + code out. + +2010-02-07 Vladimir Serbinenko + + * include/grub/cache.h (grub_arch_sync_caches) [i386 || x86_64]: Inline. + * kern/i386/coreboot/init.c (grub_arch_sync_caches): Remove. + * kern/i386/efi/init.c (grub_arch_sync_caches): Likewise. + * kern/i386/ieee1275/init.c (grub_arch_sync_caches): Likewise. + * kern/i386/pc/init.c (grub_arch_sync_caches): Likewise. + * util/misc.c (grub_arch_sync_caches) [i386 || x86_64]: Likewise. + +2010-02-07 Vladimir Serbinenko + + * include/grub/err.h (grub_err_printf): Don't export. + +2010-02-07 Vladimir Serbinenko + + * include/grub/dl.h (grub_dl_register_symbol): Don't export. + +2010-02-07 Vladimir Serbinenko + + * include/grub/i18n.h (grub_gettext_dummy): Removed. + * kern/misc.c (grub_gettext_dummy): Make static. + +2010-02-06 Vladimir Serbinenko + + * kern/misc.c (grub_utf8_to_ucs4): Don't eat valid characters preceeded + by non-valid ones. + * kern/term.c (grub_putchar): Likewise. + +2010-02-06 Vladimir Serbinenko + + * partmap/sun.c (sun_partition_map_iterate): Restructure flow to fix + buggy hook call and memory leak. + +2010-02-06 Vladimir Serbinenko + + * commands/ls.c (grub_ls_list_files): Free pathname on exit. + +2010-02-06 Vladimir Serbinenko + + * fs/fat.c (grub_fat_iterate_dir): Free unibuf at exit. + +2010-02-06 Vladimir Serbinenko + + * loader/i386/pc/xnu.c (grub_xnu_set_video): Add const qualifier to + modevar. + Return grub_errno on allocation error. + +2010-02-06 Vladimir Serbinenko + + * disk/ieee1275/ofdisk.c (grub_ofdisk_read): Correct error handling. + +2010-02-06 Yves Blusseau + + * conf/common.rmk (grub_script_check_SOURCES): add missing dependencies. + (grub_mkpasswd_pbkdf2_SOURCES): Likewise. + +2010-02-06 Vladimir Serbinenko + + * fs/i386/pc/pxe.c (grub_pxefs_dir): Return with failure on + non-pxe disk. + (grub_pxefs_open): Likewise. + +2010-02-06 Robert Millan + + * util/grub.d/10_hurd.in: Add --class information to menuentries. + * util/grub.d/10_kfreebsd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + +2010-02-06 Colin D Bennett + + * conf/common.rmk (pkglib_MODULES): Add gfxmenu.mod. + (gfxmenu_mod_SOURCES): New variable. + (gfxmenu_mod_CFLAGS): Likewise. + (gfxmenu_mod_LDFLAGS): Likewise. + * include/grub/term.h (grub_term_set_current_output): Declare + argument as const. + * docs/gfxmenu-theme-example.txt: New file. + * gfxmenu/gfxmenu.c: Likewise. + * gfxmenu/gui_box.c: Likewise. + * gfxmenu/gui_canvas.c: Likewise. + * gfxmenu/gui_circular_progress.c: Likewise. + * gfxmenu/gui_image.c: Likewise. + * gfxmenu/gui_label.c: Likewise. + * gfxmenu/gui_list.c: Likewise. + * gfxmenu/gui_progress_bar.c: Likewise. + * gfxmenu/gui_string_util.c: Likewise. + * gfxmenu/gui_util.c: Likewise. + * gfxmenu/icon_manager.c: Likewise. + * gfxmenu/model.c: Likewise. + * gfxmenu/named_colors.c: Likewise. + * gfxmenu/theme_loader.c: Likewise. + * gfxmenu/view.c: Likewise. + * gfxmenu/widget-box.c: Likewise. + * include/grub/gfxmenu_model.h: Likewise. + * include/grub/gfxmenu_view.h: Likewise. + * include/grub/gfxwidgets.h: Likewise. + * include/grub/gui.h: Likewise. + * include/grub/gui_string_util.h: Likewise. + * include/grub/icon_manager.h: Likewise. + +2010-02-06 Vladimir Serbinenko + + Agglomerate scrolling in gfxterm. + + * term/gfxterm.c (grub_virtual_screen): New member 'total_screen'. + (grub_virtual_screen_setup): Initialise 'total_screen'. + (write_char): Split to ... + (paint_char): ... this ... + (write_char): ... and this. + (paint_char): Handle delayed scrolling. + (draw_cursor): Likewise. + (scroll_up): Split to ... + (real_scroll): ... this ... + (scroll_up): ... and this. + (real_scroll): Handle multi-line scroll and draw below-the-bottom + characters. + (grub_gfxterm_refresh): Call real_scroll. + +2010-02-06 Colin D Bennett + + * include/grub/misc.h (grub_iscntrl): New inline function. + (grub_isalnum): Likewise. + (grub_strtol): Likewise. + +2010-02-06 Colin D Bennett + + * normal/menu_text.c (get_entry_number): Move from here ... + * normal/menu.c (get_entry_number): ... moved here. + * include/grub/menu.h (grub_menu_get_default_entry_index): + New prototype. + * normal/menu.c (grub_menu_get_default_entry_index): New function. + * normal/menu_text.c (run_menu): Use grub_menu_get_default_entry_index. + * include/grub/menu_viewer.h (grub_menu_viewer_init): New prototype. + (grub_menu_viewer_should_return): Likewise. + * normal/main.c (GRUB_MOD_INIT (normal)): Call grub_menu_viewer_init. + * normal/menu_text.c (run_menu): Enable menu switching. + * normal/menu_viewer.c (should_return): New variable. + (menu_viewer_changed): Likewise. + (grub_menu_viewer_show_menu): Handle menu viewer changes. + (grub_menu_viewer_should_return): New function. + (menuviewer_write_hook): Likewise. + (grub_menu_viewer_init): Likewise. + +2010-02-06 Colin D Bennet +2010-02-06 Vladimir Serbinenko + + Support for gfxterm in a window. + + * include/grub/gfxterm.h: New file. + * include/grub/video.h (struct grub_video_rect): New declaration. + (grub_video_rect_t): Likewise. + * term/gfxterm.c (struct grub_gfxterm_window): New type. + (refcount): New variable. + (render_target): Likewise. + (window): Likewise. + (repaint_callback): Likewise. + (grub_virtual_screen_setup): Use 'render_target'. + (init_window): New function. + (grub_gfxterm_init_window): Likewise. + (grub_gfxterm_init): Check reference counter. + Use init_window. + (destroy_window): New function. + (grub_gfxterm_destroy_window): Likewise. + (grub_gfxterm_fini): Check reference counter. + Use destroy_window. + (redraw_screen_rect): Restore viewport. + Use 'render_target' and 'window'. + Call 'repaint_callback'. + (write_char): Use 'render_target'. + (draw_cursor): Likewise. + (scroll_up): Restore viewport. + Use 'render_target' and 'window'. + Call 'repaint_callback'. + (grub_gfxterm_cls): Likewise. + (grub_gfxterm_refresh): Use 'window'. + (grub_gfxterm_set_repaint_callback): New function. + (grub_gfxterm_background_image_cmd): Use 'window'. + (grub_gfxterm_get_term): New function. + (GRUB_MOD_INIT(term_gfxterm)): Set 'refcount' to 0. + +2010-02-06 Colin D Bennett + + Bitmap scaling support. + + * conf/common.rmk (pkglib_MODULES): Add bitmap_scale.mod. + (bitmap_scale_mod_SOURCES): New variable. + (bitmap_scale_mod_CFLAGS): Likewise. + (bitmap_scale_mod_LDFLAGS): Likewise. + * include/grub/bitmap_scale.h: New file. + * term/gfxterm.c (BACKGROUND_CMD_ARGINDEX_MODE): New definiton. + (background_image_cmd_options): New variable. + (grub_gfxterm_background_image_cmd): Support bitmap stretching. + (cmd): Rename and change type to ... + (background_image_cmd_handle): ... this. All users updated. + (GRUB_MOD_INIT(term_gfxterm)): Make background_image extended command. + * video/bitmap_scale.c: New file. + +2010-02-06 Vladimir Serbinenko + + SDL support. + + * Makefile.in (LIBSDL): New variable. + (enable_grub_emu_sdl): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Add video files. + (grub_emu_SOURCES) [enable_grub_emu_sdl]: Add util/sdl.c. + (grub_emu_LDFLAGS) [enable_grub_emu_sdl]: Add $(LIBSDL). + * configure.ac: Detect SDL availability and add --enable-grub-emu-sdl + * util/sdl.c: New file. + +2010-02-06 Colin D Bennett +2010-02-06 Vladimir Serbinenko + + Double buffering support. + + * commands/i386/pc/videotest.c (grub_cmd_videotest): Swap doublebuffers. + * include/grub/video.h: Update comment. + * include/grub/video_fb.h (grub_video_fb_doublebuf_update_screen_t): + New type. + (grub_video_fb_doublebuf_blit_init): New prototype. + * term/gfxterm.c (scroll_up): Support double buffering. + (grub_gfxterm_refresh): Likewise. + * video/fb/video_fb.c (doublebuf_blit_update_screen): New function. + (grub_video_fb_doublebuf_blit_init): Likewise. + * video/i386/pc/vbe.c (framebuffer): Remove 'render_target'. Add + 'front_target', 'back_target', 'offscreen_buffer', 'page_size', + 'displayed_page', 'render_page' and 'update_screen'. + (grub_video_vbe_fini): Free offscreen buffer. + (doublebuf_pageflipping_commit): New function. + (doublebuf_pageflipping_update_screen): Likewise. + (doublebuf_pageflipping_init): Likewise. + (double_buffering_init): Likewise. + (grub_video_vbe_setup): Enable doublebuffering. + (grub_video_vbe_swap_buffers): Implement. + (grub_video_vbe_set_active_render_target): Handle double buffering. + (grub_video_vbe_get_active_render_target): Likewise. + (grub_video_vbe_get_info_and_fini): Likewise. Free offscreen_buffer. + (grub_video_vbe_adapter): Use grub_video_vbe_get_active_render_target. + (grub_video_vbe_enable_double_buffering): Likewise. + (grub_video_vbe_swap_buffers): Use update_screen. + (grub_video_set_mode): Use double buffering. + +2010-02-06 Robert Millan + + * maintainance/gentrigtables.py: Remove. + * lib/trig.c: Likewise. + + * gentrigtables.c: New file. C rewrite of gentrigtables.py. + + * conf/common.rmk (trig_mod_SOURCES): Replace `lib/trig.c' with + `trigtables.c'. + (trigtables.c): New rule. + (gentrigtables): Likewise. + (DISTCLEANFILES): Add `trigtables.c' and `gentrigtables'. + +2010-02-06 Robert Millan + + * maintainance/gentrigtables.py: Avoid duplicate hardcoding of + integer constants. + +2010-02-06 Colin D Bennet + + Trigonometry support. + + * include/grub/trig.h: New file. + * lib/trig.c: Likewise. + * maintainance/gentrigtables.py: Likewise. + * conf/common.rmk (pkglib_MODULES): Add trig.mod. + (trig_mod_SOURCES): New variable. + (trig_mod_CFLAGS): Likewise. + (trig_mod_LDFLAGS): Likewise. + +2010-02-06 Vladimir Serbinenko + + * kern/ieee1275/openfw.c (grub_ieee1275_encode_devname): Support whole + disk devices. + +2010-02-06 Vladimir Serbinenko + + * kern/ieee1275/openfw.c (grub_devalias_iterate): Stop iterating on + error. + +2010-02-03 Vladimir Serbinenko + + * util/hostdisk.c (open_device): Don't use partition device when reading + before the partition. + (grub_util_biosdisk_read): Don't read from partition and before the + partition in single operation. + (grub_util_biosdisk_write): Don't write to partition and before the + partition in single operation. + +2010-02-03 Torsten Landschoff + + * kern/disk.c (grub_disk_read): Fix offset computation when reading + last sectors. + +2010-02-03 Vladimir Serbinenko + + * disk/i386/pc/biosdisk.c (grub_biosdisk_read): Handle non-2048 aligned + CDROM reads. + (grub_biosdisk_write): Refuse to write to CDROM. + +2010-01-31 Vladimir Serbinenko + + * disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Fix off-by-one error. + +2010-01-31 Vladimir Serbinenko + + * font/font.c (find_glyph): Check that bmp_idx is available before + using it. + (grub_font_get_string_width): Never call grub_font_get_glyph_internal + with (font == NULL). + +2010-01-28 Christian Schmitt + + * util/ieee1275/grub-install.in: Fix nvsetenv arguments. + +2010-01-28 BVK Chaitanya + + * include/grub/script_sh.h (sourcecode): Add const qualifier. + * util/grub-script-check.c (getline): Fix empty lines case. + +2010-01-28 Robert Millan + + * Makefile.in (check): Exit with fail status when one of the tests + fails. + * tests/example_functional_test.c (example_test): Fix reversed assert. + * tests/example_unit_test.c (example_test): Likewise. + +2010-01-28 Colin Watson + + * util/grub.d/10_linux.in: This script does not use any of the + contents of gettext.sh, only the external command `gettext', so stop + sourcing it. (Moreover, gettext.sh isn't necessarily installed in + the same prefix as GRUB.) + * util/grub.d/10_kfreebsd.in: Likewise. + +2010-01-27 Vladimir Serbinenko + + * normal/cmdline.c (grub_cmdline_get): Fix completion in the middle + of the line. + +2010-01-27 Vladimir Serbinenko + + * kern/disk.c (grub_disk_read): Fix offset computation when reading + last sectors. + +2010-01-27 Vladimir Serbinenko + + * commands/hashsum.c (hash_file): Avoid possible stack overflow by + having a 4KiB and not 32KiB buffer size. + +2010-01-27 Robert Millan + + * util/hostfs.c: Include `'. + (grub_hostfs_read): Handle errors from fseeko() and fread(). + +2010-01-27 Robert Millan + + * kern/disk.c (grub_disk_read): Fix bug that would cause infinite + loop when using read hooks on files whose size isn't sector-aligned. + +2010-01-27 Robert Millan + + Remove unused parameter. + + * fs/iso9660.c (struct grub_iso9660_data): Remove `length' parameter. + (grub_iso9660_open): Remove initialization of `data->length'. + +2010-01-27 Robert Millan + + * util/grub-fstest.c (fstest): Rewrite allocation, fixing a few + memleak conditions. + +2010-01-27 Carles Pina i Estany + + * util/lvm.c: New macro LVM_DEV_MAPPER_STRING. + (grub_util_lvm_isvolume): Use LVM_DEV_MAPPER_STRING. + +2010-01-26 Carles Pina i Estany + + * util/bin2h.c (usage): Fix warning (space after backslash). + +2010-01-26 Carles Pina i Estany + + * font/font.c: Include `grub/fontformat.h. + Remove font file format constants. + (grub_font_load): Use the new macros. + * include/grub/fontformat.h: New file. + * util/grub-mkfont.c: Include `grub/fontformat.c'. + (write_font_pf2): Use the new macros. + +2010-01-26 Robert Millan + + * util/bin2h.c (usage): Make --help actually explain what `grub-bin2h' + does. + +2010-01-26 Robert Millan + + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_PXE_DL): New macro. + + * boot/i386/pc/pxeboot.S: Include `'. + (_start): Macroify `0x7F'. + + * kern/i386/pc/init.c: Include `'. + (make_install_device): Use "(pxe)" as fallback prefix when booting + via PXE. + +2010-01-26 Vladimir Serbinenko + + * configure.ac: Reset LIBS after check for libgcc symbols. + +2010-01-25 Colin Watson + + * util/hostdisk.c (open_device): Add trailing newline to debug + message. + +2010-01-25 Grégoire Sutre + + * configure.ac: Check for `limits.h'. + * util/misc.c: Include `' (for PATH_MAX). + +2010-01-24 Robert Millan + + * loader/mips/linux.c (grub_cmd_linux, grub_cmd_initrd): Don't + capitalize error strings. + +2010-01-24 Samuel Thibault + + * util/grub.d/10_hurd.in: Add a recovery mode. + +2010-01-23 Vladimir Serbinenko + + * configure.ac: Check for libgcc symbols with -nostdlib. + +2010-01-23 BVK Chaitanya + + * acinclude.m4: Quote underquoted AC_DEFUN parameters. + +2010-01-22 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_setcolorstate): Allocate on + stack since heap may be unavailable at that point. + (grub_ofconsole_gotoxy): Likewise. + +2010-01-22 Vladimir Serbinenko + + * configure.ac: Check for _restgpr_14_x. + * include/grub/powerpc/libgcc.h [HAVE__RESTGPR_14_X]: Add _restgpr_*_x + and _savegpr_* prototypes. + +2010-01-22 Robert Millan + + Use generic grub_reboot() for i386-efi. + + * kern/efi/efi.c [__i386__] (grub_reboot): Remove. + * kern/i386/efi/startup.S: Include `"../realmode.S"'. + * kern/i386/realmode.S: Include `'. + +2010-01-22 Vladimir Serbinenko + + * kern/ieee1275/init.c (grub_machine_set_prefix): Don't check for + presence of "prefix" variable as it breaks when normal.mod is + embedded. + +2010-01-21 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_dimensions): Allocate on + stack since heap is unavailable at that point. + +2010-01-21 Vladimir Serbinenko + + * include/grub/i386/bsd.h (FREEBSD_N_BIOS_GEOM): Removed. + (grub_freebsd_bootinfo): Rewritten. + * loader/i386/bsd.c (grub_freebsd_boot): Use new grub_freebsd_bootinfo. + +2010-01-21 Vladimir Serbinenko + + * util/misc.c (make_system_path_relative_to_its_root): Fix typo. + +2010-01-21 Robert Millan + + * po/POTFILES: Remove mkisofs-related files. They have their own TLP + domain now. + +2010-01-20 Felix Zielcke + + * util/misc.c (make_system_path_relative_to_its_root): Change the work + around for handling "/" to the correct fix. Fix a memory leak. Use + xstrdup instead of strdup. + +2010-01-20 Vladimir Serbinenko + + * conf/mips.rmk (kernel_img_HEADERS): Add env_private.h + +2010-01-20 Vladimir Serbinenko + + Optimise glyph lookup by Basic Multilingual Plane lookup array. + + * font/font.c (struct grub_font): New member 'bmp_idx'. + (font_init): Initialise 'bmp_idx'. + (load_font_index): Fill 'bmp_idx'. + (find_glyph): Make inline. Use bmp_idx for BMP characters. + +2010-01-20 Vladimir Serbinenko + + * video/fb/video_fb.c (grub_video_fb_scroll): Optimise by avoiding + unnecessary calls. + +2010-01-20 Vladimir Serbinenko + + Move context handling out of the kernel. + + * conf/any-emu.rmk (grub_emu_SOURCES): Add normal/context.c. + * conf/common.rmk (normal_mod_SOURCES): Add normal/context.c. + * conf/i386-coreboot.rmk (kernel_img_HEADERS): Add env_private.h. + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * include/grub/env.h: Include grub/menu.h. + (grub_env_var_type): Removed. + (grub_env_var): Replaced field 'type' with 'global'. + (grub_env_find): New prototype. + (grub_env_context_open): Remove EXPORT_FUNC. + (grub_env_context_close): Likewise. + (grub_env_export): Likewise. + (grub_env_set_data_slot): Removed. + (grub_env_get_data_slot): Likewise. + (grub_env_unset_data_slot): Likewise. + (grub_env_unset_menu): New prototype. + (grub_env_set_menu): Likewise. + (grub_env_get_menu): Likewise. + * include/grub/env_private.h: New file. + * include/grub/normal.h (grub_context_init): New prototype. + (grub_context_fini): Likewise. + * kern/corecmd.c (grub_core_cmd_export): Moved from here ... + * normal/context.c (grub_cmd_export): ... to here. + * kern/env.c: Include env_private.h. + (HASHSZ): Moved to include/grub/env_private.h. + (grub_env_context): Likewise. + (grub_env_sorted_var): Likewise. + (current_context): Renamed from this ... + (grub_current_context): ...to this. 'static' removed. All users updated. + (grub_env_find): Removed 'static'. + (grub_env_context_open): Moved to normal/context.c. + (grub_env_context_close): Likewise. + (grub_env_export): Likewise. + (mangle_data_slot_name): Removed. + (grub_env_set_data_slot): Likewise. + (grub_env_get_data_slot): Likewise. + (grub_env_unset_data_slot): Likewise. + * kern/main.c (grub_set_root_dev): Don't export root. + It will be done later. + (grub_main): Don't export prefix. + It will be done later. + * normal/context.c: New file. + * normal/main.c (free_menu): Use grub_env_unset_menu. + (grub_normal_add_menu_entry): Use grub_env_get_menu. + (read_config_file): Use grub_env_get_menu and grub_env_set_menu. + (GRUB_MOD_INIT(normal)): Call grub_context_init. + (GRUB_MOD_FINI(normal)): Call grub_context_fini. + +2010-01-20 Vladimir Serbinenko + + setpci support. + + * commands/setpci.c: New file. + * conf/i386.rmk (pkglib_MODULES): Add setpci.mod. + (setpci_mod_SOURCES): New variable. + (setpci_mod_CFLAGS): Likewise. + (setpci_mod_LDFLAGS): Likewise. + +2010-01-20 Vladimir Serbinenko + + Byte-addressable PCI configuration space. + + * bus/pci.c (grub_pci_make_address): Use byte address instead of + dword address. + (grub_pci_iterate): Use macroses GRUB_PCI_REG_PCI_ID and + GRUB_PCI_REG_CACHELINE. + * bus/usb/ohci.c (grub_ohci_pci_iter): Use macroses + GRUB_PCI_REG_CLASS and GRUB_PCI_REG_ADDRESS_REG0. + * bus/usb/uhci.c (grub_ohci_pci_iter): Use macroses + GRUB_PCI_REG_CLASS and GRUB_PCI_REG_ADDRESS_REG4. + * commands/efi/fixvideo.c (scan_card): Use macros GRUB_PCI_REG_CLASS. + * commands/efi/loadbios.c (enable_rom_area): Pass byte-address to + grub_pci_make_address. + (lock_rom_area): Likewise. + * commands/lspci.c (grub_lspci_iter): Use macroses + GRUB_PCI_REG_CLASS and GRUB_PCI_REG_ADDRESSES. Handle byte-addressing + of grub_pci_make_address. + * disk/ata.c (grub_ata_pciinit): Likewise. + * include/grub/pci.h (GRUB_PCI_REG_PCI_ID): New macro. + (GRUB_PCI_REG_VENDOR): Likewise. + (GRUB_PCI_REG_DEVICE): Likewise. + (GRUB_PCI_REG_COMMAND): Likewise. + (GRUB_PCI_REG_STATUS): Likewise. + (GRUB_PCI_REG_REVISION): Likewise. + (GRUB_PCI_REG_CLASS): Likewise. + (GRUB_PCI_REG_CACHELINE): Likewise. + (GRUB_PCI_REG_LAT_TIMER): Likewise. + (GRUB_PCI_REG_HEADER_TYPE): Likewise. + (GRUB_PCI_REG_BIST): Likewise. + (GRUB_PCI_REG_ADDRESSES): Likewise. + (GRUB_PCI_REG_ADDRESS_REG): Likewise. + (GRUB_PCI_REG_ADDRESS_REG): Likewise. + (GRUB_PCI_REG_ADDRESS_REG): Likewise. + (GRUB_PCI_REG_ADDRESS_REG): Likewise. + (GRUB_PCI_REG_ADDRESS_REG): Likewise. + (GRUB_PCI_REG_ADDRESS_REG): Likewise. + (GRUB_PCI_REG_CIS_POINTER): Likewise. + (GRUB_PCI_REG_SUBVENDOR): Likewise. + (GRUB_PCI_REG_SUBSYSTEM): Likewise. + (GRUB_PCI_REG_ROM_ADDRESS): Likewise. + (GRUB_PCI_REG_CAP_POINTER): Likewise. + (GRUB_PCI_REG_IRQ_LINE): Likewise. + (GRUB_PCI_REG_IRQ_PIN): Likewise. + (GRUB_PCI_REG_MIN_GNT): Likewise. + (GRUB_PCI_REG_MAX_LAT): Likewise. + * loader/i386/efi/linux.c (find_framebuf): Use GRUB_PCI_REG_CLASS. + * loader/i386/efi/xnu.c (find_framebuf): Likewise. + * video/efi_uga.c (find_framebuf): Likewise. + * video/sm712.c (grub_video_sm712_setup): Likewise. + * util/pci.c (grub_pci_make_address): Use byte-addressed configuration + space. + +2010-01-20 Robert Millan + + * util/grub.d/10_linux.in (linux_entry): Set gfxpayload=keep when it + can be reliably determined to be supported. + +2010-01-20 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): If `vga=' was used, write down + that VESA is supported. + (grub_linux_boot): Use generic framebuffer unless VESA is known to be + supported. + +2010-01-20 Vladimir Serbinenko + + * conf/common.rmk (font/font.c_DEPENDENCIES): Condition on FONT_SOURCE. + +2010-01-20 Robert Millan + + * util/misc.c (make_system_path_relative_to_its_root): Work around + special-casing of "/", as previous incarnation of this routine did. + +2010-01-20 Vladimir Serbinenko + + Fix any-emu compilation. + + * conf/any-emu.rmk (bin_UTILITIES): Add grub-bin2h. + * grub_bin2h_SOURCES: New variable. + +2010-01-20 Robert Millan + + * util/grub.d/00_header.in: Fix stupid mistake from last commit. + +2010-01-20 Robert Millan + + * util/grub.d/00_header.in: Fix handling of locale_dir. + +2010-01-20 Vladimir Serbinenko + + * configure.ac: Add /usr/share/fonts/unifont/unifont.pcf.gz + as possible unifont location (Gentoo). + Reported by: Alexander Brüning + +2010-01-20 Vladimir Serbinenko + + Don't try to generate lists for kernel.img. + + * conf/i386-efi.rmk (pkglib_PROGRAMS): New variable. + (pkglib_MODULES): Remove kernel.img. + (kernel_img_EXPORTS): Removed. + (kernel_img_RELOCATABLE): New variable. + * conf/x86_64-efi.rmk: Likewise. + * genmk.rb: Remove *_EXPORTS support and add *_RELOCATABLE support. + +2010-01-20 Vladimir Serbinenko + + * include/grub/misc.h (grub_sprintf): Removed. All users switched to + grub_xasprintf or grub_snprintf. + (grub_vsprintf): Likewise. + (grub_snprintf): New proto. + (grub_vsnprintf): Likewise. + (grub_xasprintf): Likewise. + (grub_xvasprintf): Likewise. + * kern/misc.c (grub_vprintf): Use grub_vsnprintf_real. + (grub_sprintf): Removed. + (grub_vsnprintf): New function. + (grub_snprintf): Likewise. + (grub_xvasprintf): Likewise. + (grub_xasprintf): Likewise. + (grub_vsprintf): Renamed to ... + (grub_vsnprintf_real): ...this. New argument max_len. + +2010-01-20 BVK Chaitanya + + * include/grub/script_sh.h (sourcecode): Remove const qualifier to + fix grub-script-check warning. + +2010-01-20 Vladimir Serbinenko + + * include/grub/font.h (grub_font_load): Fix prototype. + +2010-01-20 Vladimir Serbinenko + + * conf/mips.rmk (kernel_img_HEADERS) [yeeloong]: Add pci.h. + +2010-01-20 Vladimir Serbinenko + + * include/grub/x86_64/at_keyboard.h: New file. + +2010-01-20 Vladimir Serbinenko + + * loader/mips/linux.c: Include missing grub/i18n.h. + +2009-12-20 Robert Millan + + * normal/menu.c (notify_execution_failure): Clarify error message. + +2009-12-20 Robert Millan + + * commands/loadenv.c (check_blocklists): Use `grub_err_t' as + return value (and revert all return statements). Update users. + +2010-01-20 Dan Merillat + + * kern/device.c (grub_device_iterate): Allocate new part_ent + structure based on sizeof (*p) rather than sizeof (p->next), to + account for structure padding. + + * util/grub-probe.c (probe_raid_level): Return -1 immediately if + disk is NULL, which might happen for LVM physical volumes with no + LVM signature. + +2009-12-20 Robert Millan + + * loader/mips/linux.c (grub_cmd_initrd) + (GRUB_MOD_INIT(linux)): Adjust and gettextize a few strings. + +2009-12-20 Robert Millan + + * kern/mips/yeeloong/init.c (grub_video_sm712_init) + (grub_video_video_init, grub_video_bitmap_init) + (grub_font_manager_init, grub_term_gfxterm_init) + (grub_at_keyboard_init): New extern declarations. + (grub_machine_init): Initialize gfxterm and at_keyboard. + + * kern/main.c (grub_main): Revert grub_printf delay kludge. + + * util/grub-install.in: Revert embed of `at_keyboard.mod' and + `gfxterm.mod' into core image. + + * conf/mips.rmk (pkglib_IMAGES, kernel_img_SOURCES) + (kernel_img_CFLAGS, kernel_img_ASFLAGS, kernel_img_LDFLAGS) + (kernel_img_FORMAT): Copy to ... + + * conf/mips-qemu-mips.rmk (pkglib_IMAGES, kernel_img_SOURCES) + (kernel_img_CFLAGS, kernel_img_ASFLAGS, kernel_img_LDFLAGS) + (kernel_img_FORMAT): ... here, and ... + + * conf/mips-yeeloong.rmk (pkglib_IMAGES, kernel_img_SOURCES) + (kernel_img_CFLAGS, kernel_img_ASFLAGS, kernel_img_LDFLAGS) + (kernel_img_FORMAT): ... here. + + (kernel_img_SOURCES): Add files necessary for output (gfxterm) + and input (at_keyboard) terminals in kernel. + (kernel_img_CFLAGS): Add `-DUSE_ASCII_FAILBACK'. + + (pkglib_MODULES): Remove `pci.mod'. + (pci_mod_SOURCES, pci_mod_CFLAGS, pci_mod_LDFLAGS) + (sm712_mod_SOURCES, sm712_mod_CFLAGS, sm712_mod_LDFLAGS) + (at_keyboard_mod_SOURCES, at_keyboard_mod_CFLAGS) + (at_keyboard_mod_LDFLAGS): Remove variables. + +2010-01-11 Felix Zielcke + + * po/POTFILES: Replace `term/i386/pc/serial.c' with `term/serial.c'. + +2009-12-10 Robert Millan + + * include/grub/mips/libgcc.h: Only export symbols for functions + that libgcc provides. + +2009-12-02 Vladimir Serbinenko + + MIPS support. + + * bus/bonito.c: New file. + * bus/pci.c (grub_pci_iterate): Use GRUB_PCI_NUM_BUS and + GRUB_PCI_NUM_DEVICES. + * term/i386/pc/serial.c: Move to ... + * term/serial.c: ... here. All users updated. + * util/i386/pc/grub-mkimage.c: Move to ... + * util/grub-mkrawimage.c: ... here. All users updated. + * term/i386/pc/at_keyboard.c: Move to ... + * term/at_keyboard.c: ... here. All users updated. + * conf/mips-qemu-mips.rmk: New file. + * conf/mips-yeeloong.rmk: Likewise. + * conf/mips.rmk: Likewise. + * configure.ac: New platforms mipsel-yeeloong, mips-qemu-mips and + mipsel-qemu-mips. + * disk/ata.c (grub_ata_device_initialize): Add GRUB_MACHINE_PCI_IO_BASE + to port addresses. + (grub_ata_pciinit): Support CS5536. + * font/font.c (grub_font_load): Use grub_file_t instead of filename. + * font/font_cmd.c (loadfont_command): Open file before passing it to + grub_font_load. + (pseudo_file_read): New function. + (pseudo_file_close): Likewise. + (pseudo_fs): New structure. + (load_font_module): New function. + (GRUB_MOD_INIT(font_manager)): Load embedded font. + * fs/cpio.c (grub_cpio_open): Handle partial matches correctly. + * genmk.rb: Strip .rel.dyn, .reginfo, .note and .comment. + * genmoddep.awk: Ignore __gnu_local_gp. It's defined by linker. + * include/grub/i386/at_keyboard.h: Split into ... + * include/grub/at_keyboard.h: ... this ... + * include/grub/i386/at_keyboard.h: ... and this. + * include/grub/dl.h (grub_arch_dl_init_linker) [_mips && !GRUB_UTIL]: + New prototype. + * include/grub/elfload.h (grub_elf32_size): New parameter. All users + updated. + (grub_elf64_size): Likewise. + * include/grub/font.h (grub_font_load): Use grub_file_t instead of + filename. + * include/grub/i386/io.h (grub_port_t): New type. All users updated. + * include/grub/i386/coreboot/serial.h: Rewritten. + * include/grub/i386/ieee1275/serial.h: Include + grub/i386/coreboot/serial.h instead of grub/i386/pc/serial.h. + * include/grub/i386/pc/serial.h: Moved from here ... + * include/grub/serial.h: ... to here. All users updated. + * include/grub/i386/pci.h (GRUB_MACHINE_PCI_IO_BASE): New definition. + (GRUB_PCI_NUM_BUS): Likewise. + (GRUB_PCI_NUM_DEVICES): Likewise. + (grub_pci_device_map_range): Add missing volatile keyword. + * include/grub/kernel.h (OBJ_TYPE_FONT): New enum value. + * include/grub/mips/at_keyboard.h: New file. + * include/grub/mips/cache.h: Likewise. + * include/grub/mips/io.h: Likewise. + * include/grub/mips/kernel.h: Likewise. + * include/grub/mips/libgcc.h: Likewise. + * include/grub/mips/pci.h: Likewise. + * include/grub/mips/qemu-mips/boot.h: Likewise. + * include/grub/mips/qemu-mips/kernel.h: Likewise. + * include/grub/mips/qemu-mips/loader.h: Likewise. + * include/grub/mips/qemu-mips/memory.h: Likewise. + * include/grub/mips/qemu-mips/serial.h: Likewise. + * include/grub/mips/qemu-mips/time.h: Likewise. + * include/grub/mips/relocator.h: Likewise. + * include/grub/mips/time.h: Likewise. + * include/grub/mips/types.h: Likewise. + * include/grub/mips/yeeloong/at_keyboard.h: Likewise. + * include/grub/mips/yeeloong/boot.h: Likewise. + * include/grub/mips/yeeloong/kernel.h: Likewise. + * include/grub/mips/yeeloong/loader.h: Likewise. + * include/grub/mips/yeeloong/memory.h: Likewise. + * include/grub/mips/yeeloong/pci.h: Likewise. + * include/grub/mips/yeeloong/serial.h: Likewise. + * include/grub/mips/yeeloong/time.h: Likewise. + * kern/dl.c (grub_dl_resolve_symbols): Handle STT_OBJECT correctly. + * kern/elf.c (grub_elf32_size): New parameter. All users + updated. + (grub_elf64_size): Likewise. + * kern/main.c (grub_main): Call grub_arch_dl_init_linker if necessary. + Load modules before saying "Welcome to GRUB!". + Call grub_refresh after saying "Welcome to GRUB!". + * kern/mips/cache.S: New file. + * kern/mips/cache_flush.S: Likewise. + * kern/mips/dl.c: Likewise. + * kern/mips/init.c: Likewise. + * kern/mips/qemu-mips/init.c: Likewise. + * kern/mips/startup.S: Likewise. + * kern/mips/yeeloong/init.c: Likewise. + * kern/term.c (grub_putcode): Handle NULL terminal. + (grub_getcharwidth): Likewise. + (grub_getkey): Likewise. + (grub_checkkey): Likewise. + (grub_getkeystatus): Likewise. + (grub_getxy): Likewise. + (grub_getwh): Likewise. + (grub_gotoxy): Likewise. + (grub_cls): Likewise. + (grub_setcolorstate): Likewise. + (grub_setcolor): Likewise. + (grub_getcolor): Likewise. + (grub_refresh): Likewise. + * lib/mips/relocator.c (JUMP_SIZEOF): Fix incorrect value. + (write_jump): Add hatch nop. + * lib/mips/relocator_asm.S: Use kern/mips/cache_flush.S. + * lib/mips/setjmp.S: New file. + * loader/mips/linux.c: Likewise. + * term/i386/pc/at_keyboard.c: Move from here ... + * term/at_keyboard.c: ... to here. + * term/i386/pc/serial.c: Moved from here ... + * term/serial.c: ... to here. All users updated. + (TEXT_HEIGHT): Set to 24 to fit linux terminal. + (serial_hw_io_addr): Use GRUB_MACHINE_SERIAL_PORTS. + (serial_translate_key_sequence): Avoid deadlock. + (grub_serial_getkey): Handle backspace. + (grub_serial_putchar): Fix newline handling. + * util/i386/pc/grub-mkimage.c: Move from here ... + * util/grub-mkrawimage.c: ... to here. All users updated. + (generate_image): New parameters 'font_path' and 'format'. + Support embedding font. + Use grub_host_to_target* instead of grub_cpu_to_le*. + (generate_image) [GRUB_MACHINE_MIPS]: Support ELF encapsulation. + (options) [GRUB_PLATFORM_IMAGE_DEFAULT]: New option "--format". + (options): New option "--font". + (usage): Likewise. + (main) [GRUB_PLATFORM_IMAGE_DEFAULT]: Handle "--format". + (main): Handle "--font". + * term/gfxterm.c (grub_virtual_screen): New member bg_color_display. + (grub_virtual_screen_setup): Set bg_color_display. + (redraw_screen_rect): Use bg_color_display instead of incorrect + bg_color. + (grub_gfxterm_cls): Likewise. + * util/elf/grub-mkimage.c (load_modules): New parameter 'config_path'. + Support embedding config file. + (add_segments): Likewise. + (options): New option "--config". + (main): Handle "--config". + * video/sm712.c: New file. + +2010-01-18 Robert Millan + + Fix parallel builds. + + * conf/common.rmk (font/font.c_DEPENDENCIES): New variable (makes + font.c depend on ascii.h). + +2010-01-12 Carles Pina i Estany + + * Makefile.in (DUSE_ASCII_FAILBACK): New macro. + +2010-01-11 Carles Pina i Estany + + * font/font.c (GENERATE_ASCII): Change the name to USE_ASCII_FAILBACK. + By default: disabled. + * Makefile.in (ascii.h): Remove the non-needed grub/bin2h size + parameter. + +2010-01-10 Carles Pina i Estany + + * font/font.c: Update copyright years. + * util/grub-mkfont.c (write_font_ascii_bitmap): Change comment format. + +2010-01-10 Carles Pina i Estany + + * font/font.c: Include `ascii.h'. + (ASCII_BITMAP_SIZE): New macro. + (ascii_font_glyph): Define. + (ascii_glyph_lookup): New function. + (grub_font_get_string_width): Change comment. If glyph not found, use + ascii_glyph_lookup. + (grub_font_get_glyph_with_fallback): If glyph not available returns + ascii_glyph_lookup. + * util/grub-mkfont.c (file_formats): New enum. + (options): Add `ascii-bitmaps' new option. + (usage): Add `asii-bitmaps' new option. + (write_font_ascii_bitmap): New function. + (write_font): Rename to ... + (write_font_p2): ... this. Remove print_glyphs call. + (main): Use file_format. Implement code for ranges if ascii-bitmaps is + used. Call print_glyphs. + * Makefile.in (pkgdata_DATA): Add `ascii.h'. + +2010-01-14 Robert Millan + + * conf/common.rmk (bin_UTILITIES): Add `grub-bin2h'. + (grub_bin2h_SOURCES): New variable. + * util/bin2h.c: New file. + +2010-01-20 Vladimir Serbinenko + + * include/multiboot.h: Resynced with spec. + * include/multiboot2.h: Likewise. + * loader/i386/multiboot_mbi.c (grub_fill_multiboot_mmap): Handle + GRUB_MACHINE_MEMORY_ACPI_RECLAIMABLE and GRUB_MACHINE_MEMORY_NVS. + +2010-01-18 Robert Millan + + * include/grub/term.h (grub_term_register_input, + grub_term_register_output): Check return of terminal init() + routines, and abort if errors are raised. + + * commands/terminal.c: Update copyright year. + +2010-01-18 Robert Millan + + * commands/terminal.c (grub_cmd_terminal_input) + (grub_cmd_terminal_output): Check return of terminal init() + routines, and abort if errors are raised. + +2010-01-18 Vladimir Serbinenko + + * include/grub/i386/bsd.h: Fix include pathes. + +2010-01-18 Vladimir Serbinenko + + Add missing *BSD copyright headers. + + * include/grub/aout.h: Add BSD licence. + * include/grub/i386/bsd.h: Parts under different licences moved to ... + * include/grub/i386/freebsd_linker.h: ... here, + * include/grub/i386/freebsd_reboot.h: ... here, + * include/grub/i386/netbsd_bootinfo.h: ... here, + * include/grub/i386/netbsd_reboot.h: ... here, + * include/grub/i386/openbsd_bootarg.h: ... here, + * include/grub/i386/openbsd_reboot.h: ... and here. Added appropriate + licence to each file. + +2010-01-18 Robert Millan + + * acinclude.m4: Remove `nop' assembly instruction; it's not + implemented by all architectures. + +2010-01-18 Robert Millan + + * loader/i386/efi/linux.c (grub_cmd_linux): Stop pretending we're + ELILO. This is no longer necessary. + +2010-01-18 BVK Chaitanya + + Added new tool, grub-scrit-check to verify grub.cfg syntax. + + * util/grub-script-check.c: grub-script-check tool. + * conf/common.rmk: Make rules for grub-script-check. + +2010-01-18 Robert Millan + + Fix annoying UI bug in rescue mode. Thanks to Tristan Gingold for + spotting it back in 2008. Shame on me for forgetting he did. + + * kern/rescue_reader.c (grub_rescue_run): Skip zero-length lines. + +2010-01-18 Robert Millan + + * include/grub/i386/linux.h (GRUB_VIDEO_TYPE_TEXT): Rename to ... + (GRUB_VIDEO_LINUX_TYPE_TEXT): ... this. Update all users. + (GRUB_VIDEO_TYPE_VLFB): Rename to ... + (GRUB_VIDEO_LINUX_TYPE_VESA): ... this. Update all users. + (GRUB_VIDEO_TYPE_EFI): Rename to ... + (GRUB_VIDEO_LINUX_TYPE_SIMPLE): ... this. Update all users. + +2010-01-17 Robert Millan + + * include/grub/test.h: Add license header. + * tests/example_functional_test.c: Likewise. + * tests/example_unit_test.c: Likewise. + * tests/lib/functional_test.c: Likewise. + * tests/lib/test.c: Likewise. + * tests/lib/unit_test.c: Likewise. + +2010-01-17 Vladimir Serbinenko + + Use flag-based instead of hook-based video mode selection and "auto" + keyword. + + * include/grub/video.h (grub_video_adapter): Changed 'setup' member. + (grub_video_set_mode): Changed prototype. All users updated. + (grub_video_check_mode_flag): New inline function. + * video/video.c (parse_modespec): New function. + (grub_video_set_mode): Parse flags and keywords. + +2010-01-17 Carles Pina i Estany + + * util/misc.c (grub_util_info): Fix the order of the parameters in a + fprintf call. + +2010-01-16 Grégoire Sutre + + * genmk.rb (class SCRIPT): Replace option -i of sed by a pipe. + +2010-01-16 Carles Pina i Estany + + * util/grub-editenv.c (usage): Use `program_name' instead of hardcoded + string. + * util/grub-emu.c (usage): Likewise. + * util/grub-mkpasswd-pbkdf2.c (usage): Likewise. + * util/i386/efi/grub-mkimage.c (usage): Likewise. + * util/i386/pc/grub-mkimage.c (usage): Likewise. + * util/i386/pc/grub-setup.c (usage): Likewise. + +2010-01-16 Carles Pina i Estany + + * util/misc.c (grub_util_warn): Gettextizze, print full stop after + the message. + (grub_util_info): Likewise. + (grub_util_error): Likewise. + * util/elf/grub-mkimage.c: Fix capitalisation, quotes, full stops + and/or new lines in `grub_util_warna', `grub_util_info', + `grub_util_error' calls. + * util/getroot.c: Likewise. + * util/grub-editenv.c: Likewise. + * util/grub-emu.c: Likewise. + * util/grub-fstest.c: Likewise. + * util/grub-mkdevicemap.c: Likewise. + * util/grub-mkfont.c: Likewise. + * util/grub-mkpasswd-pbkdf2.c: Likewise. + * util/grub-mkrelpath.c: Likewise. + * util/grub-pe2elf.c: Likewise. + * util/grub-probe.c: Likewise. + * util/hostdisk.c: Likewise. + * util/i386/efi/grub-mkimage.c: Likewise. + * util/i386/pc/grub-mkimage.c: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/ieee1275/ofpath.c: Likewise. + * util/mkisofs/eltorito.c: Likewise. + * util/mkisofs/rock.c: Likewise. + * util/mkisofs/write.c: Likewise. + * util/raid.c: Likewise. + * util/sparc64/ieee1275/grub-mkimage.c: Likewise. + * util/sparc64/ieee1275/grub-setup.c: Likewise. + +2010-01-15 Vladimir Serbinenko + + Enable multiboot on non-pc. + + * conf/i386-coreboot.rmk, conf/i386-pc.rmk (pkglib_MODULES): Move + multiboot.mod and multiboot2.mod to ... + * conf/i386.rmk (pkglib_MODULES): ... here. + * conf/i386-coreboot.rmk, conf/i386-pc.rmk (multiboot_mod_SOURCES): + Moved to ... + * conf/i386.rmk (multiboot_mod_SOURCES): .. here. + * conf/i386-coreboot.rmk, conf/i386-pc.rmk (multiboot_mod_CFLAGS): + Moved to ... + * conf/i386.rmk (multiboot_mod_CFLAGS): .. here. + * conf/i386-coreboot.rmk, conf/i386-pc.rmk (multiboot_mod_ASFLAGS): + Moved to ... + * conf/i386.rmk (multiboot_mod_ASFLAGS): .. here. + * conf/i386-coreboot.rmk, conf/i386-pc.rmk (multiboot_mod_LDFLAGS): + Moved to ... + * conf/i386.rmk (multiboot_mod_LDFLAGS): .. here. + * conf/x86_64-efi.rmk (pkglib_MODULES): Remove ata.mod and + relocator.mod. + (ata_mod_SOURCES): Removed. + (ata_mod_CFLAGS): Likewise. + (ata_mod_LDFLAGS): Likewise. + (relocator_mod_SOURCES): Removed. + (relocator_mod_CFLAGS): Likewise. + (relocator_mod_ASFLAGS): Likewise. + (relocator_mod_LDFLAGS): Likewise. + Include i386.mk. + * include/grub/x86_64/multiboot.h: New file. + * loader/i386/multiboot.c (grub_multiboot_boot) [GRUB_MACHINE_EFI]: + Terminate EFI. + +2010-01-15 Vladimir Serbinenko + + Video multiboot support. + + * include/grub/multiboot.h (grub_multiboot_set_accepts_video): + New prototype. + * include/multiboot.h: Resynced with multiboot specification. + * include/multiboot2.h: Likewise. + * loader/i386/multiboot.c (UNSUPPORTED_FLAGS): Support video flags. + (grub_multiboot): Parse MULTIBOOT_VIDEO_MODE fields. + * loader/i386/multiboot_mbi.c (DEFAULT_VIDEO_MODE): New constant. + (HAS_VGA_TEXT): Likewise. + (accepts_video): New variable. + (grub_multiboot_set_accepts_video): New function. + (grub_multiboot_get_mbi_size): Account for video structures. + (set_video_mode): New function. + (retrieve_video_parameters): Likewise. + (grub_multiboot_make_mbi): Fill video fields. + +2010-01-15 Vladimir Serbinenko + + Video driver ids. + + * include/grub/video.h (grub_video_driver_id): New type. + (grub_video_adapter): New member 'id'. All users updated. + (grub_video_get_driver_id): New proto. + * video/video.c (grub_video_get_driver_id): New function. + +2010-01-14 Carles Pina i Estany + + * util/grub.d/30_os-prober.in: Use `set var=val' rather than plain + `var=val'. + +2010-01-14 Carles Pina i Estany + + * normal/cmdline.c (print_completion): Gettextizze. + +2001-01-14 Carles Pina i Estany + + * loader/i386/pc/chainloader.c: Include `'. + +2010-01-14 Carles Pina i Estany + + * gettext/gettext.c (grub_gettext_translate): Push and pop + grub_errno. + (grub_gettext_delete_list): Change comment style. + * kern/err.c (grub_error): Gettextizze. + (grub_fatal): Gettextizze. + +2010-01-14 Robert Millan + + * include/grub/i386/loader.h (grub_linux16_boot): Renamed to ... + (grub_linux16_real_boot): ... this. + * kern/i386/loader.S: Likewise. + * loader/i386/pc/linux.c: Include `' and `'. + (grub_linux16_boot): New function. Switches to text mode and calls + grub_linux16_real_boot(). + + * loader/i386/bsd.c: Include `'. + (grub_freebsd_boot, grub_openbsd_boot, grub_netbsd_boot): Switch to + text mode before calling grub_unix_real_boot(). + + * loader/i386/multiboot.c: Include `'. + (grub_multiboot_boot): Switch to text mode before calling + grub_relocator32_boot(). + + * loader/i386/pc/chainloader.c: Include `'. + (grub_chainloader_boot): Switch to text mode before calling + grub_chainloader_real_boot(). + +2010-01-05 Jordan Uggla +2010-01-05 Colin Watson + + * util/grub-reboot.in: Make sure prev_saved_entry always gets a + non-empty value. + +2010-01-05 Jordan Uggla +2010-01-05 Colin Watson + + * util/grub.d/00_header.in: Define a "savedefault" function for use + in menu entries. + * util/grub-mkconfig_lib.in (save_default_entry): Use it. + +2010-01-05 Jordan Uggla +2010-01-05 Colin Watson + + * util/grub-mkconfig_lib.in (save_default_entry): Only set + saved_entry if boot_once is unset. + * util/grub.d/00_header.in: Set boot_once to "true" if there was a + previous saved entry (i.e. grub-reboot). + +2009-12-08 Colin Watson + + * util/grub.d/30_os-prober.in: Call save_default_entry for hurd. + +2009-12-08 Colin Watson + + * util/grub.d/00_header.in: Use `set var=val' rather than plain + `var=val'. + * util/grub-mkconfig_lib.in (save_default_entry): Likewise. + +2009-12-08 Colin Watson + + * util/grub-reboot.in: Fix --version output. + * util/grub-set-default.in: Likewise. + +2009-12-08 Colin Watson + + * util/grub.d/00_header.in: Silently ignore zero-sized environment + blocks. + +2009-12-08 Colin Watson + + * util/grub.d/00_header.in: Quote the value assigned to `default', + in case it contains spaces. + +2009-12-08 Colin Watson + + * util/grub.d/30_os-prober.in: Fix merge error that moved a + `save_default_entry' call from the macosx case to the linux case. + +2009-10-25 Vladimir Serbinenko +2009-10-25 Colin Watson + + * normal/menu.c (grub_menu_execute_entry): Save selected entry title + in `chosen' environment variable. + * normal/menu_text.c (get_entry_number): Check if the variable + matches the title of a menu entry. + (run_menu): Pass menu to get_entry_number. + + * util/grub-reboot.in: New file. + * util/grub-set-default.in: New file. + * conf/common.rmk (grub-reboot): New utility. + (grub-set-default): New utility. + + * util/grub-mkconfig_lib.in (save_default_entry): New function. + * util/grub.d/00_header.in: If GRUB_DEFAULT is `saved', set + default to `${saved_entry}'. If `${prev_saved_entry}' is non-empty, + move it to `saved_entry' for the next boot. Load environment on + initialisation. + * util/grub.d/10_kfreebsd.in: Call save_default_entry. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_linux.in (linux_entry): Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + + * util/grub-install.in: Create environment block. + * util/i386/efi/grub-install.in: Likewise. + * util/ieee1275/grub-install.in: Likewise. + * util/sparc64/ieee1275/grub-install.in: Likewise. + +2010-01-14 BVK Chaitanya + + Unit testing framework for GRUB. + + * Makefile.in: Test framework build rules for 'make check'. + * conf/tests.rmk: Build rules for individual tests and framework. + + * include/grub/test.h: Header file for whitebox tests. + * tests/lib/functional_test.c: Framework support for whitebox + functional tests. + * tests/lib/test.c: Common whitebox testing code for unit and + functional tests. + * tests/lib/unit_test.c: Framework support for whitebox unit + tests. + + * tests/util/grub-shell-tester.in: Support utility for grub-script + tests. + * tests/util/grub-shell.in: Utility to execute grub-script + commands in a Qemu instance. + + * tests/example_functional_test.c: Example whitebox functional + test. + * tests/example_grub_script_test.in: Example grub-script test. + * tests/example_scripted_test.in: Example scripted test. + * tests/example_unit_test.c: Example whitebox unit test. + +2010-01-14 Vladimir Serbinenko + + * conf/i386-coreboot.rmk (multiboot_mod_SOURCES): + Add loader/i386/multiboot_mbi.c. + (multiboot2_mod_SOURCES): Likewise. + * conf/i386-pc.rmk (multiboot_mod_SOURCES): Likewise. + (multiboot2_mod_SOURCES): Likewise. + * include/grub/multiboot.h (grub_multiboot_get_mbi_size): New proto. + (grub_multiboot_make_mbi): Likewise. + (grub_multiboot_free_mbi): Likewise. + (grub_multiboot_init_mbi): Likewise. + (grub_multiboot_add_module): Likewise. + (grub_multiboot_set_bootdev): Likewise. + * loader/i386/multiboot.c (mbi): Removed. + (mbi_dest): Likewise. + (alloc_mbi): New variable. + (grub_multiboot_payload_size): Removed. All users updated. + (grub_multiboot_pure_size): New variable. + (grub_multiboot_boot): Use grub_multiboot_make_mbi. + (grub_multiboot_unload): Use grub_multiboot_free_mbi. + (grub_get_multiboot_mmap_len): Moved to loader/i386/multiboot_mbi.c. + (grub_fill_multiboot_mmap): Likewise. + (grub_multiboot_get_bootdev): Likewise. + (grub_multiboot): Use multiboot_mbi functions. + * loader/i386/multiboot_mbi.c: New file. + +2010-01-13 Vladimir Serbinenko + + * kern/efi/init.c (grub_efi_fini): Don't call grub_efi_mm_fini as + it would result in module crash. + +2010-01-13 Vladimir Serbinenko + + * term/ieee1275/ofconsole.c (grub_ofconsole_putchar): Handle '\r'. + (grub_ofconsole_getwh): Split to ... + (grub_ofconsole_getwh): ... this. + (grub_ofconsole_dimensions): ...and this. + (grub_ofconsole_init_output): Call grub_ofconsole_dimensions. + +2010-01-13 Robert Millan + + * util/mkisofs/rock.c (generate_rock_ridge_attributes): Fix a typo. + +2010-01-12 Vladimir Serbinenko + + * loader/i386/pc/multiboot2.c: Removed stalled file. + +2010-01-12 Vladimir Serbinenko + + * util/grub-mkpasswd-pbkdf2.c (main): Use grub_util_init_nls. + Reported by: Grégoire Sutre + +2010-01-11 Robert Millan + + * util/misc.c (canonicalize_file_name): New function. + (make_system_path_relative_to_its_root): Use canonicalize_file_name() + instead of realpath(). + +2010-01-11 Colin Watson + + * util/grub-install.in (usage): Clarify meaning of --root-directory, + and make it clearer that it's optional. Based on confusion + witnessed on IRC. + +2010-01-10 Vladimir Serbinenko + + * term/i386/pc/vga_text.c (inc_y): Fix off-by-one error which resulted + in premature implicit newline. + +2010-01-10 Vladimir Serbinenko + + * normal/cmdline.c (grub_cmdline_get): Fix off-by-one error + which resulted in garbled command line at the end of screen. + +2010-01-10 Robert Millan + + * loader/i386/ieee1275/linux.c (grub_linux_boot): Rework video position + initialization with similar approach as with other Linux loaders. + +2010-01-10 Robert Millan + + Fix i386-ieee1275 build. + + * loader/i386/ieee1275/linux.c (grub_linux_boot): Use grub_term_width() + and grub_term_height() for video_{width,height} initialization. + +2010-01-10 Robert Millan + + Fix grub-emu build. + + * conf/any-emu.rmk (grub_emu_SOURCES): Remove `kern/reader.c'. + +2010-01-07 Vladimir Serbinenko +2010-01-09 Robert Millan + + Support for multiple terminals. + + * Makefile.in (pkglib_DATA): terminal.lst. + (terminal.lst): New target. + * commands/handler.c (grub_cmd_handler): Don't handle terminals. + (GRUB_MOD_INIT(handler)): Likewise. + (GRUB_MOD_FINI(handler)): Likewise. + * commands/help.c (grub_cmd_help): Handle multiple terminals. + * commands/keystatus.c (grub_cmd_keystatus): Likewise. + * commands/sleep.c (do_print): Use grub_term_restore_pos. + (grub_cmd_sleep): Use grub_term_save_pos. + * commands/terminal.c: New file. + * conf/any-emu.rmk (grub_emu_SOURCES): Add normal/term.c + commands/terminal.c and lib/charset.c. + * conf/common.rmk (normal_mod_SOURCES): Add normal/term.c. + (pkglib_MODULES): Add terminal.mod. + (terminal_mod_SOURCES): New variable. + (terminal_mod_CFLAGS): Likewise. + (terminal_mod_LDFLAGS): Likewise. + * genhandlerlist.sh: Don't handle terminals. + * genmk.rb: Generate terminal-*.lst. + * genterminallist.sh: New file. + * include/grub/charset.h (grub_ucs4_to_utf8_alloc): New proto. + (grub_is_valid_utf8): Likewise. + (grub_utf8_to_ucs4_alloc): Likewise. + * include/grub/menu_viewer.h (grub_menu_viewer): Rewritten. + (grub_menu_register_viewer): Changed argument. + (grub_menu_try_text): New proto. + (grub_gfxmenu_try_hook): New declaration. + * include/grub/normal.h (grub_normal_exit_level): New declaration. + (grub_menu_init_page): Additional argument term. + (grub_normal_init_page): Likewise. + (grub_cmdline_get): Arguments simplified. + (grub_utf8_to_ucs4_alloc): Removed. + (grub_print_ucs4): Additional argument term. + (grub_getstringwidth): Likewise. + (grub_print_message_indented): Likewise. + (grub_menu_text_register_instances): New proto. + (grub_show_menu): Likewise. + (read_terminal_list): Likewise. + (grub_set_more): Likewise. + * include/grub/parser.h: Include handler.h. + * include/grub/reader.h: Rewritten. + * include/grub/term.h (GRUB_TERM_NEED_INIT): Removed. + (GRUB_TERM_WIDTH): Changed to function. + (GRUB_TERM_HEIGHT): Likewise. + (GRUB_TERM_BORDER_WIDTH): Likewise. + (GRUB_TERM_BORDER_HEIGHT): Likewise. + (GRUB_TERM_NUM_ENTRIES): Likewise. + (GRUB_TERM_ENTRY_WIDTH): Likewise. + (GRUB_TERM_CURSOR_X): Likewise. + (grub_term_input_class): Likewise. + (grub_term_output_class): Likewise. + (grub_term_outputs_disabled): New declaration. + (grub_term_inputs_disabled): Likewise. + (grub_term_outputs): Likewise. + (grub_term_inputs): Likewise. + (grub_term_register_input): Rewritten. + (grub_term_register_output): Likewise. + (grub_term_unregister_input): Likewise. + (grub_term_unregister_output): Likewise. + (FOR_ACTIVE_TERM_INPUTS): New macro. + (FOR_DISABLED_TERM_INPUTS): Likewise. + (FOR_ACTIVE_TERM_OUTPUTS): Likewise. + (FOR_DISABLED_TERM_OUTPUTS): Likewise. + * include/grub/terminfo.h: Add oterm argument to all protypes. + * kern/main.c (grub_main): Don't call grub_register_rescue_reader. + Use grub_rescue_run. + * kern/misc.c (grub_utf8_to_ucs4): Put '?' for invalid characters. + All users updated. + * kern/reader.c: Removed. All users updated. + * kern/rescue_reader.c (grub_rescue_init): Removed. + (grub_rescue_reader): Likewise. + (grub_register_rescue_reader): Likewise. + (grub_rescue_run): New function based on kern/reader.c. + * kern/term.c: Adapted for multiterm. + * lib/charset.c (grub_ucs4_to_utf8_alloc): New function. + (grub_is_valid_utf8): Likewise. + (grub_utf8_to_ucs4_alloc): Moved from normal/menu_text.c. + * loader/i386/efi/linux.c (grub_cmd_linux): Retrieve parameters of + right terminal. + * loader/i386/linux.c (grub_linux_boot): Likewise. + * normal/auth.c (grub_username_get): New function. + (grub_auth_check_authentication): Use grub_username_get. + * normal/cmdline.c: Changed to UCS4. Adapted for multiterm. + * normal/color.c: Adapt for multiterm. + * normal/main.c (read_config_file): Don't use grub_reader_loop. + (grub_normal_init_page): Additional argument term. + (read_lists): Call read_terminal_lists. + (grub_enter_normal_mode): Call grub_cmdline_run. + Handle grub_normal_exit_level. + (grub_cmd_normal): Make reentrant. + (grub_cmd_normal_exit): New function. + (grub_normal_reader_init): Additional argument nested. Handle multiterm. + * normal/menu.c: Adapt for multiterm. + * normal/menu_entry.c: Likewise. + * normal/menu_text.c: Likewise. + * normal/menu_viewer.c: Removed. All users updated. + * normal/term.c: New file. + * util/console.c: Change order of includes to workaround a bug in + ncurses headers. + * term/terminfo.c: New argument oterm on all exported functions. + All users updated. + * util/grub-editenv.c (grub_term_input_class): Removed. + (grub_term_output_class): Likewise. + +2010-01-09 Robert Millan + + Make loader output a bit more user-friendly. + + * util/grub.d/10_hurd.in: Print message indicating that GNU Mach + is being loaded. Likewise for the Hurd. + + * util/grub.d/10_kfreebsd.in (kfreebsd_entry): Print message indicating + that kernel of FreeBSD ${version} is being loaded. + + * loader/i386/linux.c (grub_cmd_linux): Move debug info to + grub_dprintf(). + (grub_cmd_initrd): Likewise. + * util/grub.d/10_linux.in (linux_entry): Print message indicating + that Linux ${version} is being loaded. Likewise for initrd. + +2010-01-09 Carles Pina i Estany + + * gettext/gettext.c (GRUB_MOD_INIT): Gettextizze. + +2010-01-08 Carles Pina i Estany + + * loader/efi/appleloader.c: Include `'. + (GRUB_MOD_INIT): Gettextizze. + * loader/efi/chainloader.c: Include `'. + (GRUB_MOD_INIT): Gettextizze. + * loader/i386/efi/linux.c: Include `'. + (grub_cmd_linux): Capitalise Linux. + (GRUB_MOD_INIT): Gettextizze. + * loader/i386/ieee1275/linux.c: Include `'. + (grub_cmd_linux): Capitalise Linux. + (GRUB_MOD_INIT): Gettextizze. + * loader/i386/linux.c: Include `'. + (grub_cmd_linux): Capitalise Linux. + (GRUB_MOD_INIT): Gettextizze. + * loader/i386/pc/chainloader.c: Include `'. + (GRUB_MOD_INIT): Gettextizze. + * loader/i386/pc/linux.c: Include `'. + (grub_cmd_linux): Capitalise Linux. + (GRUB_MOD_INIT): Gettextizze. + * loader/i386/xnu.c: Include `'. + (grub_cpu_xnu_init): Gettextizze. + * loader/multiboot_loader.c: Include `'. + (GRUB_MOD_INIT): Gettextizze. + * loader/powerpc/ieee1275/linux.c: Include `'. + (GRUB_MOD_INIT): Gettextizze. + * loader/sparc64/ieee1275/linux.c: Include `'. + (grub_linux_load64): Capitalise Linux. + (GRUB_MOD_INIT): Gettextizze. + * loader/xnu.c: Include `'. + (GRUB_MOD_INIT): Gettextizze. + * po/POTFILES: Add `loader/efi/appleloader.c', + `loader/efi/chainloader.c', `loader/i386/efi/linux.c', + `loader/i386/ieee1275/linux.c', `loader/i386/linux.c', + `loader/i386/pc/chainloader.c', `loader/i386/pc/linux.c', + `loader/i386/xnu.c', `loader/multiboot_loader.c', + `loader/powerpc/ieee1275/linux.c', `loader/sparc64/ieee1275/linux.c' + and `loader/xnu.c'. + +2010-01-08 Robert Millan + + * src/mkisofs.c: Remove `ifdef linux' portability kludge. + +2010-01-08 Robert Millan + + * util/mkisofs/defaults.h (APPID_DEFAULT): Redefine using PACKAGE_NAME. + (SYSTEM_ID_DEFAULT): Set to "GNU" unconditionally. + * util/mkisofs/mkisofs.c (main): Readjust --version output. + +2010-01-07 Robert Millan + + Reset Multiboot 2 support. New loader implements the draft in + /branches/multiboot2 and shares as much code as possible with the + production Multiboot 1 implementation. + + * loader/ieee1275/multiboot2.c: Remove file. Update all users. + * loader/multiboot2.c: Likewise. + * loader/i386/multiboot_helper.S: Likewise. + * include/multiboot2.h: Replace with latest version from the draft + in /branches/multiboot2. + + * conf/i386-coreboot.rmk (multiboot_mod_SOURCES): Remove + `loader/i386/multiboot_helper.S', `loader/i386/pc/multiboot2.c' + and `loader/multiboot2.c'. + (pkglib_MODULES): Add `multiboot2.mod'. + (multiboot2_mod_SOURCES): New variable. + (multiboot2_mod_LDFLAGS): Likewise. + (multiboot2_mod_CFLAGS): Likewise. Define `GRUB_USE_MULTIBOOT2'. + + * conf/i386-pc.rmk: Likewise. + + * conf/powerpc-ieee1275.rmk (pkglib_MODULES): Remove `multiboot.mod'. + (multiboot_mod_SOURCES): Remove variable. + (multiboot_mod_LDFLAGS): Likewise. + (multiboot_mod_CFLAGS): Likewise. + + * include/grub/multiboot.h [GRUB_USE_MULTIBOOT2]: Include + `' instead of `'. + [GRUB_USE_MULTIBOOT2] (MULTIBOOT_BOOTLOADER_MAGIC) + (MULTIBOOT_HEADER_MAGIC): New macros. + + * loader/multiboot_loader.c (module_version_status): Remove variable. + (find_multi_boot2_header): Remove function. + (grub_cmd_multiboot_loader): Remove Multiboot 2 / Multiboot 1 selection + logic. Always check for the Multiboot version we're compiling for. + (grub_cmd_module_loader): Likewise. + [GRUB_USE_MULTIBOOT2] (GRUB_MOD_INIT(multiboot)): Register `multiboot2' + command instead of `multiboot'. + +2010-01-07 Robert Millan + + * include/multiboot.h (MULTIBOOT_UNSUPPORTED): Moved from here ... + * loader/i386/multiboot.c (UNSUPPORTED_FLAGS): ... to here. Update + all users. + +2010-01-07 Robert Millan +2010-01-07 Vladimir Serbinenko + + Fix breakage introduced with previous commit. + + * normal/dyncmd.c (read_command_list): Avoid unregistering kernel + commands. + * normal/handler.c (read_handler_list): Revert part of previous commit + affecting this file. + * normal/main.c (read_lists): Move read_handler_list() call back to ... + (grub_normal_execute): ... here. + +2010-01-07 Robert Millan + + Merge prefix-redefinition-fix branch. + + * normal/autofs.c (read_fs_list): Make function capable of being + run multiple times, gracefuly replacing the previous data + structures. + * normal/dyncmd.c (read_command_list): Likewise. + * normal/handler.c (read_handler_list): Likewise. + * normal/main.c (read_lists): New function. Calls all the + list reading functions. + (grub_normal_execute): Use read_lists() instead of calling all + list reading functions explicitly. Register read_lists() as a + variable hook attached to ${prefix}. + +2010-01-07 Vladimir Serbinenko + + Merge crypto branch. + + * Makefile.in (pkglib_DATA): Add crypto.lst. + (crypto.lst): New target. + * commands/hashsum.c: New file. + * commands/password.c (check_password): Use grub_crypto_memcmp. + * commands/password_pbkdf2.c: New file. + * commands/xnu_uuid.c: Remove MD5. Use GRUB_MD_MD5. + * conf/any-emu.rmk (grub_emu_SOURCES): Add lib/crypto.c, + normal/crypto.c and lib/libgcrypt-grub/cipher/md5.c. + (grub_emu_CFLAGS): Add -Wno-missing-field-initializers -Wno-error + -I$(srcdir)/lib/libgcrypt_wrap. + * conf/common.rmk (normal_mod_SOURCES): Add normal/crypto.c. + (pkglib_MODULES): Add crypto.mod, hashsum.mod, pbkdf2.mod and + password_pbkdf2.mod. + (crypto_mod_SOURCES): New variable. + (crypto_mod_CFLAGS): Likewise. + (crypto_mod_LDFLAGS): Likewise. + (hashsum_mod_SOURCES): New variable. + (hashsum_mod_CFLAGS): Likewise. + (hashsum_mod_LDFLAGS): Likewise. + (pbkdf2_mod_SOURCES): New variable. + (pbkdf2_mod_CFLAGS): Likewise. + (pbkdf2_mod_LDFLAGS): Likewise. + (password_pbkdf2_mod_SOURCES): New variable. + (password_pbkdf2_mod_CFLAGS): Likewise. + (password_pbkdf2_mod_LDFLAGS): Likewise. + (bin_UTILITIES): Add grub-mkpasswd-pbkdf2. + (grub_mkpasswd_pbkdf2_SOURCES): New variable. + (grub_mkpasswd_pbkdf2_CFLAGS): Likewise. + Include conf/gcry.rmk. + * include/grub/auth.h: Rewritten. + * include/grub/crypto.h: New file. + * include/grub/disk.h (grub_disk_dev_id): Add GRUB_DISK_DEVICE_LUKS_ID. + * include/grub/normal.h (read_crypto_list): New prototype. + * lib/crypto.c: New file. + * lib/libgcrypt_wrap/cipher_wrap.h: Likewise. + * lib/pbkdf2.c: Likewise. + * normal/auth.c (grub_auth_strcmp): Removed. + (grub_iswordseparator): Likewise. + (grub_auth_strword): Likewise. + (is_authenticated): Use grub_strword. + (grub_auth_check_authentication): Use grub_strcmp, grub_password_get + and grub_strword. Pass entered password to authentication callback. + * normal/crypto.c: New file. + * normal/main.c: Call read_crypto_list. + * util/grub-mkpasswd-pbkdf2.c: New file. + * util/import_gcry.py: Generate crypto.lst. Add hash blocklen. + +2010-01-06 Vladimir Serbinenko + + Fix descent and ascent calculation. + + * util/grub-mkfont.c (grub_font_info): New fields 'asce' and 'max_y'. + (options): New option "asce". + (usage): Likewise. + (add_char): Ignore invalid glyphs for descent calculation. + Calculate ascent from actual content. + (print_glyphs): Use 'asce'. + (write_font): Likewise. Allow ascent override. + (main): Handle "asce" option. + +2010-01-06 Carles Pina i Estany + + * kern/err.c: Include `'. + (grub_print_error): Add full stop. Gettextizze. + * loader/i386/bsd.c (grub_netbsd_boot): Change grub_error description. + (grub_bsd_load_elf): Capitalise ELF. + (grub_cmd_freebsd_loadenv): Add `s' in error string. + (grub_cmd_freebsd_module): Likewise. + (grub_cmd_freebsd_module_elf): Likewise. + * loader/i386/bsdXX.c (SUFFIX): Capitalise ELF. + +2010-01-06 Carles Pina i Estany + + * commands/search.c (GRUB_MOD_INIT): Use HELP_MESSAGE. + * commands/search_file.c (HELP_MESSAGE): New macro. + * commands/search_label.c (HELP_MESSAGE): Likewise. + * commands/search_uuid.c (HELP_MESSAGE): Likewise. + * po/POTFILES: Add `commands/search_file.c', + `commands/search_label.c', `commands_uuid.c'. Remove duplicate + `commands/search.c'. + +2010-01-05 Robert Millan + + * config.rpath: Update from Gnulib. + +2010-01-05 Yves Blusseau + + * commands/acpi.c (grub_acpi_create_ebda): fix incorrect message. + +2010-01-05 Yves Blusseau + + * util/sparc64/ieee1275/grub-mkimage.c (main): Typo fix. + +2010-01-05 Colin Watson + + * util/mkisofs/write.c (padblock_write): Switch size and nmemb + arguments to fread so that we get a return value in bytes, rather + than something that will normally be rounded down to 0. + Adjust error handling to avoid producing garbage when size_t is not + the same size as long long. + +2010-01-05 Colin Watson + + * util/mkisofs/write.c (padblock_write): Check return value of + fread. + +2010-01-05 Robert Millan + + Remove grub-mkfloppy. Images produced by grub-mkrescue are valid + floppy images now. + + * util/i386/pc/grub-mkfloppy.in: Remove. Update all users. + +2010-01-04 Robert Millan + + * disk/i386/pc/biosdisk.c (grub_biosdisk_rw): Use ALIGN_UP macro + instead of manual alignment. + * kern/disk.c (grub_disk_read): Remove grub_dprintf call (excessively + verbose). Avoid attempts to read past end of the device + (grub_disk_adjust_range() guarantees that we can read `size' bytes, + but GRUB_DISK_CACHE_SIZE may exceed that). + +2010-01-04 Robert Millan + + * commands/crc.c (grub_cmd_crc): Abort on read errors. + * fs/iso9660.c (grub_iso9660_read): Check for read error and pass + it to upper layer. + +2010-01-04 Vladimir Serbinenko + + * include/grub/efi/api.h (GRUB_EFI_PIWG_DEVICE_PATH_SUBTYPE): + New constant. + (grub_efi_piwg_device_path): New structure + (grub_efi_piwg_device_path_t): New type. + * loader/efi/appleloader.c (piwg_full_device_path): New structure. + (devpath_1): Transform to a structure. All users updated. + (devpath_2): Likewise. + (devpath_3): Likewise. + (devpath_4): Likewise. + (devpath_5): Likewise. + +2010-01-04 Vladimir Serbinenko + + * loader/efi/appleloader.c: Restored. Update all users. + +2010-01-03 Robert Millan + + * boot/i386/pc/diskboot.S: Fix inaccurate comment. + + * util/i386/pc/grub-setup.c: Include `'. + (struct boot_blocklist): Move from here ... + * include/grub/i386/pc/boot.h [ASM_FILE] + (struct grub_boot_blocklist): ... to here. Update all users. + (setup): Only initialize `start' member of `first_block' + structure. Add assert() calls to verify the other members. + + * util/i386/pc/grub-mkimage.c: Include `'. + (generate_image): Fix broken blocklist length initialization. + Add assert() call to verify blocklist `segment' field. + +2010-01-03 Robert Millan + + * loader/efi/appleloader.c: Remove. Update all users. + +2010-01-03 Robert Millan + + * boot/i386/pc/boot.S: Update copyright year. + * boot/i386/pc/cdboot.S: Likewise. + * boot/i386/pc/diskboot.S: Likewise. + * boot/i386/pc/lnxboot.S: Likewise. + * boot/i386/pc/pxeboot.S: Likewise. + * bus/pci.c: Likewise. + * commands/cmp.c: Likewise. + * commands/help.c: Likewise. + * commands/hexdump.c: Likewise. + * commands/i386/pc/halt.c: Likewise. + * commands/i386/pc/play.c: Likewise. + * commands/i386/pc/vbeinfo.c: Likewise. + * commands/ls.c: Likewise. + * commands/test.c: Likewise. + * disk/dmraid_nvidia.c: Likewise. + * disk/i386/pc/biosdisk.c: Likewise. + * disk/ieee1275/nand.c: Likewise. + * disk/ieee1275/ofdisk.c: Likewise. + * disk/lvm.c: Likewise. + * disk/raid.c: Likewise. + * disk/raid6_recover.c: Likewise. + * disk/scsi.c: Likewise. + * fs/affs.c: Likewise. + * fs/cpio.c: Likewise. + * fs/ext2.c: Likewise. + * fs/hfs.c: Likewise. + * fs/iso9660.c: Likewise. + * fs/ntfs.c: Likewise. + * fs/sfs.c: Likewise. + * fs/udf.c: Likewise. + * fs/ufs.c: Likewise. + * fs/xfs.c: Likewise. + * gencmdlist.sh: Likewise. + * genmk.rb: Likewise. + * include/grub/disk.h: Likewise. + * include/grub/efi/api.h: Likewise. + * include/grub/efi/efi.h: Likewise. + * include/grub/efi/pe32.h: Likewise. + * include/grub/elf.h: Likewise. + * include/grub/fs.h: Likewise. + * include/grub/i386/at_keyboard.h: Likewise. + * include/grub/i386/pc/memory.h: Likewise. + * include/grub/i386/pc/vbe.h: Likewise. + * include/grub/i386/pci.h: Likewise. + * include/grub/i386/tsc.h: Likewise. + * include/grub/ieee1275/ieee1275.h: Likewise. + * include/grub/ntfs.h: Likewise. + * include/grub/sparc64/ieee1275/ieee1275.h: Likewise. + * include/grub/sparc64/libgcc.h: Likewise. + * include/grub/symbol.h: Likewise. + * include/grub/types.h: Likewise. + * include/multiboot2.h: Likewise. + * io/gzio.c: Likewise. + * kern/device.c: Likewise. + * kern/disk.c: Likewise. + * kern/efi/efi.c: Likewise. + * kern/efi/mm.c: Likewise. + * kern/elf.c: Likewise. + * kern/file.c: Likewise. + * kern/i386/dl.c: Likewise. + * kern/i386/pc/init.c: Likewise. + * kern/i386/pc/startup.S: Likewise. + * kern/ieee1275/ieee1275.c: Likewise. + * kern/ieee1275/init.c: Likewise. + * kern/main.c: Likewise. + * kern/mm.c: Likewise. + * kern/powerpc/dl.c: Likewise. + * kern/sparc64/dl.c: Likewise. + * kern/x86_64/dl.c: Likewise. + * lib/hexdump.c: Likewise. + * loader/efi/appleloader.c: Likewise. + * loader/i386/ieee1275/linux.c: Likewise. + * loader/i386/pc/chainloader.c: Likewise. + * loader/i386/pc/linux.c: Likewise. + * loader/i386/pc/multiboot2.c: Likewise. + * loader/ieee1275/multiboot2.c: Likewise. + * loader/multiboot2.c: Likewise. + * loader/multiboot_loader.c: Likewise. + * loader/powerpc/ieee1275/linux.c: Likewise. + * normal/completion.c: Likewise. + * normal/menu_entry.c: Likewise. + * partmap/apple.c: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/hostfs.c: Likewise. + * video/readers/png.c: Likewise. + +2010-01-03 Colin Watson + + * include/grub/misc.h (GNUC_PREREQ): New macro. + (ATTRIBUTE_ERROR): New macro. + * include/grub/list.h (grub_bad_type_cast_real): Use + ATTRIBUTE_ERROR. + +2010-01-03 Carles Pina i Estany + + * normal/menu_text.c (print_message): Change messages. + +2010-01-03 Carles Pina i Estany + + * normal/menu_entry.c (store_completion): Gettextizze. + +2010-01-03 Carles Pina i Estany + + * kern/env.c (grub_env_unset): Set the variable to "" if has hooks. + +2010-01-03 Carles Pina i Estany + + * po/POTFILES: Sort correctly. + +2010-01-03 Carles Pina i Estany + + * commands/acpi.c (GRUB_MOD_INIT): Capitalise some words from help. + * commands/efi/loadbios.c (GRUB_MOD_INIT): Capitalise BIOS. + * commands/i386/pc/drivemap.c (GRUB_MOD_INIT): Remove space. Add + full stop. + * commands/loadenv.c (GRUB_MOD_INIT): Remove command name from + summary. Gettextizze the strings. + * commands/probe.c (grub_cmd_probe): Capitalise UUID and FS. + * commands/xnu_uuid.c (GRUB_MOD_INIT): Capitalise XNU. + * disk/loopback.c (grub_arg_options): Capitalise first letter. Add + full stop. + (GRUB_MOD_INIT): Remove command name from summary. + * hello/hello.c (GRUD_MOT_INIT): Add missing full stop. Improve the + summary. + * loader/i386/bsd.c (grub_arg_option): Capitalise CDROM. + * term/i386/pc/serial.c (options): Add full stops. + (GRUB_MOD_INIT): Remove command name from the summary. + +2010-01-03 Carles Pina i Estany + + * commands/acpi.c: Gettextizze help strings and/or options. Include + `grub/i18n.h' if needed. + * commands/blocklist.c: Likewise. + * commands/boot.c: Likewise. + * commands/cat.c: Likewise. + * commands/cmp.c: Likewise. + * commands/configfile.c: Likewise. + * commands/crc.c: Likewise. + * commands/date.c: Likewise. + * commands/echo.c: Likewise. + * commands/efi/fixvideo.c: Likewise. + * commands/efi/loadbios.c: Likewise. + * commands/gptsync.c: Likewise. + * commands/halt.c: Likewise. + * commands/handler.c: Likewise. + * commands/hdparm.c: Likewise. + * commands/hexdump.c: Likewise. + * commands/i386/cpuid.c: Likewise. + * commands/i386/pc/drivemap.c: Likewise. + * commands/i386/pc/halt.c: Likewise. + * commands/i386/pc/pxecmd.c: Likewise. + * commands/i386/pc/vbeinfo.c: Likewise. + * commands/i386/pc/vbetest.c: Likewise. + * commands/ieee1275/suspend.c: Likewise. + * commands/keystatus.c: Likewise. + * commands/loadenv.c: Likewise. + * commands/ls.c: Likewise. + * commands/lsmmap.c: Likewise. + * commands/lspci.c: Likewise. + * commands/memrw.c: Likewise. + * commands/minicmd.c: Likewise. + * commands/parttool.c: Likewise. + * commands/password.c: Likewise. + * commands/probe.c: Likewise. + * commands/read.c: Likewise. + * commands/reboot.c: Likewise. + * commands/search.c: Likewise. + * commands/sleep.c: Likewise. + * commands/test.c: Likewise. + * commands/true.c: Likewise. + * commands/usbtest.c: Likewise. + * commands/videotest.c: Likewise. + * commands/xnu_uuid.c: Likewise. + * disk/loopback.c: Likewise. + * hello/hello.c: Likewise. + * loader/i386/bsd.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * po/POTFILES: Add new files. + +2010-01-02 Colin Watson + + * term/i386/pc/at_keyboard.c + (keyboard_controller_wait_untill_ready): Rename to ... + (keyboard_controller_wait_until_ready): ... this. Update all users. + +2010-01-01 Carles Pina i Estany + + * commands/help.c: Include `grub/mm.h' and `grub/normal.h'. + (grub_cmd_help): Print the cmd->name before the cmd->summary. Cut the + string using string width. + * normal/menu_text.c (grub_print_message_indented): Use + grub_print_spaces and not print_spaces. + (print_timeout): Likewise. + (print_spaces): Move to... + * include/grub/term.h: ... here. Change the name to grub_print_spaces. + +2010-01-01 Robert Millan + + Import from Gnulib. + + * gnulib/getdelim.c: New file. + * gnulib/getline.c: Likewise. + +2009-12-31 BVK Chaitanya + + * include/grub/list.h (grub_assert_fail): Removed. + (grub_bad_type_cast_real): New function. + (grub_bad_type_cast): New macro. + (GRUB_AS_LIST): Use grub_bad_type_cast. + (GRUB_AS_LIST_P): Likewise. + (GRUB_AS_NAMED_LIST): Likewise. + (GRUB_AS_NAMED_LIST_P): Likewise. + (GRUB_AS_PRIO_LIST): Likewise. + (GRUB_AS_PRIO_LIST_P): Likewise. + * include/grub/handler.h (GRUB_AS_HANDLER): Likewise. + +2009-12-29 Vladimir Serbinenko + + * loader/sparc64/ieee1275/linux.c (GRUB_MOD_INIT (linux)): + Fix syntax error. + +2009-12-29 Robert Millan + + * configure.ac: Check for TARGET_CFLAGS initialization before we + initialize it ourselves (sigh). + Move a few modifications to TARGET_CFLAGS to be unconditional + (extra warning flags, loop alignment, i386 CPU extensions, GCC 4.4 + eh_frame) + + * gettext/gettext.c (grub_gettext_delete_list): Add `void' argument. + * term/i386/pc/at_keyboard.c + (keyboard_controller_wait_untill_ready): Likewise. + (keyboard_controller_led): Rename `led_status' paramter to avoid + name conflict. + +2009-12-28 Carles Pina i Estany + + * normal/misc.c (grub_normal_print_device_info): Add spaces and double + quotes. + +2009-12-27 Vladimir Serbinenko + + * kern/parser.c (grub_parser_split_cmdline): Don't dereference NULL. + +2009-12-27 Vladimir Serbinenko + + * normal/menu_text.c (grub_print_message_indented): Prevent + past-the-end-of-array dereference. + +2009-12-27 Vladimir Serbinenko + + * video/readers/jpeg.c (GRUB_MOD_FINI (grub_cmd_jpegtest)): Rename to .. + (GRUB_MOD_FINI (video_reader_jpeg)): ...this + +2009-12-27 Carles Pina i Estany + + * normal/cmdline.c (grub_cmdline_get): Print a space after prompt. + * normal/main.c (grub_normal_read_line): Remove a space from the + default prompt. + +2009-12-27 Carles Pina i Estany + + * loader/i386/efi/linux.c (GRUB_MOD_INIT): Improve command summary. + * loader/i386/ieee1275/linux.c (GRUB_MOD_INIT): Likewise. + * loader/i386/linux.c (GRUB_MOD_INIT): Likewise. + * loader/i386/pc/linux.c (GRUB_MOD_INIT): Likewise. + * loader/powerpc/ieee1275/linux.c (GRUB_MOD_INIT): Likewise. + * loader/sparc64/ieee1275/linux.c (GRUB_MOD_INIT): Likewise. + * loader/xnu.c (GRUB_MOD_INIT): Likewise. + +2009-12-26 Carles Pina i Estany + + * video/readers/jpeg.c (cmd): Declare. + (grub_cmd_jpegtest): Use `grub_command_t' type. + (GRUB_MOD_INIT): Fix arguments passed to `grub_register_command'. + Assign to `cmd'. + (GRUB_MOD_FINI): Use `cmd' to unregister. + * video/readers/png.c (cmd): Declare. + (grub_cmd_pngtest): Use `grub_command_t' type. + (GRUB_MOD_INIT): Fix arguments passed to `grub_register_command'. + Assign to `cmd'. + (GRUB_MOD_FINI): Use `cmd' to unregister. + * video/readers/tga.c (cmd): Declare. + (grub_cmd_tgatest): Use `grub_command_t' type. + (GRUB_MOD_INIT): Fix arguments passed to `grub_register_command'. + Assign to `cmd'. + (GRUB_MOD_FINI): Use `cmd' to unregister. + +2009-12-26 Carles Pina i Estany + + * efiemu/main.c (GRUB_MOD_INIT): Fix capitalizations and/or full + stops. + * kern/corecmd.c (grub_register_core_commands): Likewise. + * loader/efi/chainloader.c (GRUB_MOD_INIT): Likewise. + * loader/i386/bsd.c (GRUB_MOD_INIT): Likewise. + * loader/i386/efi/linux.c (GRUB_MOD_INIT): Likewise. + * loader/i386/ieee1275/linux.c (GRUB_MOD_INIT): Likewise. + * loader/i386/linux.c (GRUB_MOD_INIT): Likewise. + * loader/i386/pc/chainloader.c (GRUB_MOD_INIT): Likewise. + * loader/i386/pc/linux.c (GRUB_MOD_INIT): Likewise. + * loader/multiboot_loader.c (GRUB_MOD_INIT): Likewise. + * loader/powerpc/ieee1275/linux.c (GRUB_MOD_INIT): Likewise. + * loader/sparc64/ieee1275/linux.c (GRUB_MOD_INIT): Likewise. + * loader/xnu.c (GRUB_MOD_INIT): Likewise. + * mmap/mmap.c (GRUB_MOD_INIT): Likewise. + * normal/handler.c (insert_handler): Likewise. + * normal/main.c (GRUB_MOD_INIT): Likewise. + * term/gfxterm.c (GRUB_MOD_INIT): Likewise. + +2009-12-26 Carles Pina i Estany + + * commands/help.c (grub_cmd_help): Print the command name before the + summary. + (GRUB_MOD_INIT): Remove command name from the summary. + * kern/command.c (GRUB_MOD_INIT): If summary is null assign an empty + string as summary. + * lib/arg.c (find_long): Print the command name before the summary. + * commands/acpi.c (GRUB_MOD_INIT): Remove command name from the + summary. + * commands/blocklist.c (GRUB_MOD_INIT): Likewise. + * commands/cat.c (GRUB_MOD_INIT): Likewise. + * commands/cmp.c (GRUB_MOD_INIT): Likewise. + * commands/configfile.c (GRUB_MOD_INIT): Likewise. + * commands/crc.c (GRUB_MOD_INIT): Likewise. + * commands/date.c (GRUB_MOD_INIT): Likewise. + * commands/echo.c (GRUB_MOD_INIT): Likewise. + * commands/efi/loadbios.c (GRUB_MOD_INIT): Likewise. + * commands/gptsync.c (GRUB_MOD_INIT): Likewise. + * commands/handler.c (GRUB_MOD_INIT): Likewise. + * commands/hdparm.c (GRUB_MOD_INIT): Likewise. + * commands/hexdump.c (GRUB_MOD_INIT): Likewise. + * commands/i386/cpuid.c (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/halt.c (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/play.c (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/pxecmd.c (GRUB_MOD_INIT): Likewise. + * commands/keystatus.c (GRUB_MOD_INIT): Likewise. + * commands/loadenv.c (GRUB_MOD_INIT): Likewise. + * commands/ls.c (GRUB_MOD_INIT): Likewise. + * commands/lspci.c (GRUB_MOD_INIT): Likewise. + * commands/memrw.c (GRUB_MOD_INIT): Likewise. + * commands/minicmd.c (GRUB_MOD_INIT): Likewise. + * commands/parttool.c (GRUB_MOD_INIT): Likewise. + * commands/password.c (GRUB_MOD_INIT): Likewise. + * commands/probe.c (GRUB_MOD_INIT): Likewise. + * commands/read.c (GRUB_MOD_INIT): Likewise. + * commands/search.c (GRUB_MOD_INIT): Likewise. + * commands/sleep.c (GRUB_MOD_INIT): Likewise. + * commands/test.c (GRUB_MOD_INIT): Likewise. + * commands/xnu_uuid.c (GRUB_MOD_INIT): Likewise. + * efiemu/main.c (GRUB_MOD_INIT): Likewise. + * font/font_cmd.c (GRUB_MOD_INIT): Likewise. + * gettext/gettext.c (GRUB_MOD_INIT): Likewise. + * kern/corecmd.c (GRUB_MOD_INIT): Likewise. + * lib/arg.c (GRUB_MOD_INIT): Likewise. + * loader/efi/appleloader.c (GRUB_MOD_INIT): Likewise. + * loader/i386/bsd.c (GRUB_MOD_INIT): Likewise. + * loader/xnu.c (GRUB_MOD_INIT): Likewise. + * mmap/mmap.c (GRUB_MOD_INIT): Likewise. + * term/terminfo.c (GRUB_MOD_INIT): Likewise. + * video/readers/jpeg.c (GRUB_MOD_INIT): Likewise. + * video/readers/png.c (GRUB_MOD_INIT): Likewise. + * video/readers/tga.c (GRUB_MOD_INIT): Likewise. + +2009-12-25 Vladimir Serbinenko + + Use search command for preliminar UUID search. + + * commands/search.c: Split into ... + * commands/search_wrap.c: ...this + * commands/search.c: ...and this. + * commands/search_file.c: New file. + * commands/search_label.c: New file. + * commands/search_uuid.c: New file. + * conf/any-emu.rmk (grub_emu_SOURCES): Remove commands/search.c. + Add commands/search_wrap.c, commands/search_file.c, + commands/search_label.c and commands/search_uuid.c. + * conf/common.rmk (pkglib_MODULES): Remove fs_uuid.mod and fs_file.mod. + (search_mod_SOURCES): Set to commands/search_wrap.c. + (pkglib_MODULES): Add search_fs_file.mod, search_fs_uuid.mod and + search_label.mod. + (search_fs_file_mod_SOURCES): New variable. + (search_fs_file_mod_CFLAGS): Likewise. + (search_fs_file_mod_LDFLAGS): Likewise. + (search_label_mod_SOURCES): Likewise. + (search_label_mod_CFLAGS): Likewise. + (search_label_mod_LDFLAGS): Likewise. + (search_fs_uuid_mod_SOURCES): New variable. + (search_fs_uuid_mod_CFLAGS): Likewise. + (search_fs_uuid_mod_LDFLAGS): Likewise. + (fs_file_mod_SOURCES): Removed. + (fs_file_mod_CFLAGS): Likewise. + (fs_file_mod_LDFLAGS): Likewise. + (fs_uuid_mod_SOURCES): Removed. + (fs_uuid_mod_CFLAGS): Likewise. + (fs_uuid_mod_LDFLAGS): Likewise. + * conf/sparc64-ieee1275.rmk (grub_install_SOURCES): + Set to util/grub-install.in. + * disk/fs_file.c: Removed. + * disk/fs_uuid.c: Likewise. + * include/grub/search.h: New file. + * util/grub-install.in: Handle sparc64. + Create and use load.cfg. + * util/sparc64/ieee1275/grub-install.in: Removed. + +2009-12-25 Vladimir Serbinenko + + * kern/i386/pc/startup.S (grub_biosdisk_get_diskinfo_int13_extensions): + Ignore return status if CF is cleared. + (grub_biosdisk_get_diskinfo_standard): Likewise. + +2009-12-25 Robert Millan + + * term/i386/pc/at_keyboard.c + (keyboard_controller_wait_untill_ready): New function. + (grub_keyboard_controller_write, grub_keyboard_controller_read) + (keyboard_controller_led): Use keyboard_controller_wait_untill_ready() + for keyboard polling, rather than duplicate the same loop. This + saves a few bytes in code size. + +2009-12-25 Vladimir Serbinenko + + Support for (pxe[:server[:gateway]]) syntax and + use environment variable for PXE. + + * commands/i386/pc/pxecmd.c (options): Removed. + (print_ip): Removed. + (grub_cmd_pxe): Removed + (grub_cmd_pxe_unload): New function. + * fs/i386/pc/pxe.c (grub_pxe_disk_data): New structure. + (grub_pxe_your_ip): Made static. + (grub_pxe_default_server_ip): Likewise. + (grub_pxe_default_gateway_ip): Likewise. + (grub_pxe_blksize): Likewise. + (parse_ip): New function. + (grub_pxe_open): Support server and gateway specification. + (grub_pxe_close): Free disk->data. + (grub_pxefs_open): Use disk->data. + (grub_pxefs_read): Likewise. + (grub_env_write_readonly): New function. + (set_mac_env): Likewise. + (set_env_limn_ro): Likewise. + (parse_dhcp_vendor): Likewise. + (grub_pxe_detect): Set the environment variables. + (set_ip_env): New function. + (write_ip_env): Likewise. + (grub_env_write_pxe_default_server): Likewise. + (grub_env_write_pxe_default_gateway): Likewise. + (grub_env_write_pxe_blocksize): Likewise. + (GRUB_MOD_INIT(pxe)): Set environment variables. + * include/grub/i386/pc/pxe.h (grub_pxe_mac_addr): Rename to ... + (grub_pxe_mac_addr_t): ... this. All users updated. + (grub_pxe_your_ip): Removed. + (grub_pxe_server_ip): Likewise. + (grub_pxe_gateway_ip): Likewise. + (grub_pxe_blksize): Likewise. + +2009-12-25 Carles Pina i Estany + + * commands/help.c: Include `'. + (grub_cmd_help): Gettextizze. + (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/play.c: Include `'. + (GRUB_MOD_INIT): Gettextizze. + * commands/search.c: Include `'. + (options): Gettextizze. + (GRUB_MOD_INIT): Gettextizze. + * lib/arg.c: Include `'. + (help_options): Gettextizze. + (find_long): Likewise. + (grub_arg_show_help): Likewise. + * normal/dyncmd.c: Include `'. + (read_command_list): Gettextizze. + * po/POTFILES: Add `commands/i386/pc/play.c', `commands/search.c', + `commands/help.c', `lib/arg.c' and `normal/dyncmd.c'. + +2009-12-25 Robert Millan + + * include/grub/i386/at_keyboard.h (NUM_LOCK, SCROLL_LOCK): New macros. + * term/i386/pc/at_keyboard.c (KEYBOARD_STATUS_NUM_LOCK) + (KEYBOARD_LED_SCROLL, KEYBOARD_LED_NUM, KEYBOARD_LED_CAPS): New macros. + (led_status): New variable. + (keyboard_controller_led): New function. + (grub_at_keyboard_getkey_noblock): Handle num lock and scroll lock, + update led status for caps lock, num lock and scroll lock. + +2009-12-25 Felix Zielcke + + * util/hostdisk.c (open_device): Fix a comment. + +2009-12-24 Robert Millan + + * util/grub-install.in (host_os): New variable. + * util/i386/efi/grub-install.in (host_os): Likewise. + +2009-12-24 Robert Millan + + * util/mkisofs/write.c (padblock_write): Abort when given an + excedingly large embed image, instead of silently truncating it. + +2009-12-24 Robert Millan + + * include/multiboot.h: Indentation fixes. + +2009-12-24 Robert Millan + + * include/multiboot.h (struct multiboot_aout_symbol_table) + (struct multiboot_elf_section_header_table): New structure + declarations (stolen from GRUB Legacy). + (struct multiboot_info): Replace opaque `syms' with a.out and ELF + table information. + + (multiboot_aout_symbol_table_t, multiboot_elf_section_header_table_t) + (multiboot_info_t, multiboot_memory_map_t, multiboot_module_t): New + type aliases. + +2009-12-24 Robert Millan + + * include/multiboot.h: Make comments src2texi-friendly. + +2009-12-24 Robert Millan + + For consistency with [multiboot]/docs/boot.S. + + * include/multiboot.h (MULTIBOOT_MAGIC): Rename from this ... + (MULTIBOOT_HEADER_MAGIC): ... to this. Update all users. + (MULTIBOOT_MAGIC2): Rename from this ... + (MULTIBOOT_BOOTLOADER_MAGIC): ... to this. Update all users. + +2009-12-24 Robert Millan + + * include/multiboot.h: Remove `'. + (multiboot_uint16_t, multiboot_uint32_t, multiboot_uint64_t): New + types. Update all users. + +2009-12-25 Carles Pina i Estany + + * commands/efi/loadbios.c: Capitalize acronyms, replace `could not' by + `couldn't' and `can not' by `cannot'. + * commands/i386/pc/drivemap.c: Likewise. + * disk/ata.c: Likewise. + * disk/ieee1275/nand.c: Likewise. + * fs/affs.c: Likewise. + * fs/fat.c: Likewise. + * fs/hfs.c: Likewise. + * fs/hfsplus.c: Likewise. + * fs/iso9660.c: Likewise. + * fs/jfs.c: Likewise. + * fs/minix.c: Likewise. + * fs/reiserfs.c: Likewise. + * fs/sfs.c: Likewise. + * fs/udf.c: Likewise. + * fs/ufs.c: Likewise. + * fs/xfs.c: Likewise. + * loader/powerpc/ieee1275/linux.c: Likewise. + * loader/sparc64/ieee1275/linux.c: Likewise. + * util/grub-probe.c: Likewise. + * util/misc.c: Likewise. + +2009-12-24 Carles Pina i Estany + + * bus/usb/usbhub.c: Fix capitalization, fullstop and newlines in + grub_errno calls. + * commands/acpi.c: Likewise. + * commands/blocklist.c: Likewise. + * commands/efi/loadbios.c: Likewise. + * commands/i386/pc/drivemap.c: Likewise. + * commands/loadenv.c: Likewise. + * commands/memrw.c: Likewise. + * commands/password.c: Likewise. + * commands/videotest.c: Likewise. + * disk/ata.c: Likewise. + * disk/ata_pthru.c: Likewise. + * disk/dmraid_nvidia.c: Likewise. + * disk/ieee1275/nand.c: Likewise. + * disk/ieee1275/ofdisk.c: Likewise. + * disk/loopback.c: Likewise. + * disk/lvm.c: Likewise. + * disk/mdraid_linux.c: Likewise. + * disk/raid.c: Likewise. + * disk/raid6_recover.c: Likewise. + * disk/scsi.c: Likewise. + * efiemu/main.c: Likewise. + * efiemu/mm.c: Likewise. + * efiemu/pnvram.c: Likewise. + * efiemu/symbols.c: Likewise. + * font/font.c: Likewise. + * fs/cpio.c: Likewise. + * fs/hfsplus.c: Likewise. + * fs/iso9660.c: Likewise. + * fs/jfs.c: Likewise. + * fs/minix.c: Likewise. + * fs/ntfs.c: Likewise. + * fs/ntfscomp.c: Likewise. + * fs/reiserfs.c: Likewise. + * fs/ufs.c: Likewise. + * fs/xfs.c: Likewise. + * gettext/gettext.c: Likewise. + * include/grub/auth.h: Likewise. + * kern/elf.c: Likewise. + * kern/file.c: Likewise. + * kern/ieee1275/init.c: Likewise. + * kern/ieee1275/mmap.c: Likewise. + * kern/ieee1275/openfw.c: Likewise. + * kern/powerpc/dl.c: Likewise. + * kern/sparc64/dl.c: Likewise. + * lib/arg.c: Likewise. + * loader/i386/bsd.c: Likewise. + * loader/i386/bsdXX.c: Likewise. + * loader/i386/efi/linux.c: Likewise. + * loader/i386/efi/xnu.c: Likewise. + * loader/i386/ieee1275/linux.c: Likewise. + * loader/i386/linux.c: Likewise. + * loader/i386/multiboot.c: Likewise. + * loader/i386/pc/linux.c: Likewise. + * loader/i386/pc/multiboot2.c: Likewise. + * loader/i386/xnu.c: Likewise. + * loader/ieee1275/multiboot2.c: Likewise. + * loader/macho.c: Likewise. + * loader/machoXX.c: Likewise. + * loader/multiboot2.c: Likewise. + * loader/multiboot_loader.c: Likewise. + * loader/powerpc/ieee1275/linux.c: Likewise. + * loader/sparc64/ieee1275/linux.c: Likewise. + * loader/xnu.c: Likewise. + * loader/xnu_resume.c: Likewise. + * mmap/i386/pc/mmap.c: Likewise. + * normal/menu_viewer.c: Likewise. + * partmap/acorn.c: Likewise. + * partmap/amiga.c: Likewise. + * partmap/apple.c: Likewise. + * script/lexer.c: Likewise. + * term/gfxterm.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * term/i386/pc/vga.c: Likewise. + * term/ieee1275/ofconsole.c: Likewise. + * term/terminfo.c: Likewise. + * video/bitmap.c: Likewise. + * video/efi_gop.c: Likewise. + * video/efi_uga.c: Likewise. + * video/fb/video_fb.c: Likewise. + * video/i386/pc/vbe.c: Likewise. + * video/readers/tga.c: Likewise. + * video/video.c: Likewise. + +2009-12-23 Felix Zielcke + + * commands/i386/pc/drivemap.c: Remove all trailing whitespace. + * commands/lspci.c: Likewise. + * commands/probe.c: Likewise. + * commands/xnu_uuid.c: 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/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * fs/i386/pc/pxe.c: Likewise. + * gettext/gettext.c: Likewise. + * include/grub/efi/graphics_output.h: Likewise. + * include/grub/i386/pc/memory.h: Likewise. + * kern/env.c: Likewise. + * kern/i386/qemu/startup.S: Likewise. + * lib/i386/pc/biosnum.c: Likewise. + * lib/i386/relocator.c: Likewise. + * lib/i386/relocator_asm.S: Likewise. + * lib/relocator.c: Likewise. + * loader/i386/bsd.c: Likewise. + * loader/i386/multiboot.c: Likewise. + * loader/i386/pc/chainloader.c: Likewise. + * loader/i386/xnu.c: Likewise. + * loader/xnu.c: Likewise. + * normal/main.c: Likewise. + * normal/menu_text.c: Likewise. + * util/getroot.c: Likewise. + * util/grub-mkconfig_lib.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/i386/pc/grub-mkimage.c: Likewise. + * util/mkisofs/eltorito.c: Likewise. + * util/mkisofs/exclude.h: Likewise. + * util/mkisofs/hash.c: Likewise. + * util/mkisofs/iso9660.h: Likewise. + * util/mkisofs/joliet.c: Likewise. + * util/mkisofs/mkisofs.c: Likewise. + * util/mkisofs/mkisofs.h: Likewise. + * util/mkisofs/multi.c: Likewise. + * util/mkisofs/name.c: Likewise. + * util/mkisofs/rock.c: Likewise. + * util/mkisofs/tree.c: Likewise. + * util/mkisofs/write.c: Likewise. + * video/efi_gop.c: Likewise. + +2009-12-23 Vladimir Serbinenko + + * video/efi_gop.c (grub_video_gop_get_bitmask): Fix off-by-one in mask + size counting. + +2009-12-22 Felix Zielcke + + * util/grub-mkrescue.in (pkglib_DATA): Set to @pkglib_DATA@. + * genmk.rb (class SCRIPT): Modify the target file instead of source. + +2009-12-22 Vladimir Serbinenko + + * commands/memrw.c (grub_cmd_write): Support for mask parameter. + (GRUB_MOD_INIT(memrw)): Update help line. + +2009-12-22 Vladimir Serbinenko + + * commands/memrw.c (cmd_read_byte, cmd_read_word, cmd_read_dword): + Use grub_extcmd_t. All users updated. + (options): New variable. + (grub_cmd_read): Restructure for readability. Support "-v" option. + (grub_cmd_write): Restructure for readability. + +2009-12-22 Felix Zielcke + + * genmk.rb (class SCRIPT): Prepend #{src} path with $(srcdir). + +2009-12-22 Felix Zielcke + + * genmk.rb (class SCRIPT): Use sed to substitute @pkglib_DATA@ + with the actual contents of the correspondending make variable. + * util/grub-mkrescue.in (pkglib_DATA): New variable. + (process_input_dir): Copy all $pkglib_DATA files instead of explicitly + specifying `*.lst' and `efiemu??.o' + +2009-12-22 Felix Zielcke + + * util/grub.d/30_os-prober.in (osx_entry): Add round brackets + after function name. + Noticed by Rene Engelhard . + +2009-12-22 Vladimir Serbinenko + + * commands/lspci.c (grub_pci_classes): Add "USB Controller". + (options): New variable. + (iospace): Likewise. + (grub_lspci_iter): List IO spaces if "-i" was given. + (grub_cmd_lspci): Parse options. + (GRUB_MOD_INIT(lspci)): Use extcmd. + (GRUB_MOD_FINI(lspci)): Likewise. + +2009-12-22 Felix Zielcke + + * util/grub.d/30_os-prober.in (osx_entry): Remove non POSIX compliant + `function' keyword. + Patch by Tony Mancill . + +2009-12-22 Vladimir Serbinenko + + * bus/usb/uhci.c (grub_uhci_transfer): Set a limit transaction time. + (grub_uhci_portstatus): Likewise. + (grub_uhci_portstatus): Add necessary delay. + * bus/usb/usbhub.c (grub_usb_hub_add_dev): Fix loop-break condition. + +2009-12-21 Carles Pina i Estany + + * commands/acpi.c (options): Fix capitalizations and/or full stops. + (GRUB_MOD_INIT): Likewise. + * commands/boot.c (GRUB_MOD_INIT): Likewise. + * commands/cmp.c (grub_cmd_cmp): Improve the help message. + * commands/echo.c (options): Fix capitalizations and/or full stops. + * commands/efi/loadbios.c (enable_rom_area): Likewise. + (enable_rom_area): Likewise. + (GRUB_MOD_INIT): Likewise. + * commands/gptsync.c (GRUB_MOD_INIT): Likewise. + * commands/halt.c (GRUB_MOD_INIT): Improve the help message. + * commands/handler.c (GRUB_MOD_INIT): Likewise. + * commands/hdparm.c (options): Fix capitalizations and/or full stops. + * commands/hexdump.c (options): Likewise. + * commands/i386/cpuid.c (options): Likewise. + (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/drivemap.c (options): Likewise. + (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/halt (options): Likewise. + (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/play.c (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/pxecmd.c (options): Likewise. + * commands/i386/pc/vbetest.c (GRUB_MOD_INIT): Likewise. + * commands/ieee1275/suspend.c (GRUB_MOD_INIT): Likewise. + * commands/keystatus.c (options): Likewise. + (GRUB_MOD_INIT): Likewise. + * commands/loadenv.c (options): Likewise. + * commands/ls.c (options): Likewise. + * commands/lspci.c (GRUB_MOD_INIT): Likewise. + * commands/memrw.c (GRUB_MOD_INIT): Likewise. + * commands/minicmd.c (GRUB_MOD_INIT): Likewise. + * commands/parttool.c (helpmsg): Likewise. + * commands/probe.c (options): Likewise. + * commands/read.c (GRUB_MOD_INIT): Likewise. + * commands/reboot.c (GRUB_MOD_INIT): Likewise. + * commands/search.c (options): Likewise. + * commands/sleep.c (options): Likewise. + * commands/test.c (GRUB_MOD_INIT): Likewise. + * commands/true.c (GRUB_MOD_INIT): Likewise. + * commands/usbtest.c (GRUB_MOD_INIT): Likewise. + * commands/videotest.c (GRUB_MOD_INIT): Likewise. + * lib/arg.c (help_options): Likewise. + * Makefile.in ($(srcdir)/po/$(PACKAGE).pot): Pass -ctranslate to + `$(XGETTEXT)'. + * po/POTFILES: Add `commands/loadenv.c'. + +2009-12-21 Felix Zielcke + + * util/grub-mkrescue.in (process_input_dir): Copy `*.lst' files + instead of specifying them explicit. + +2009-12-21 Robert Millan + + * NEWS: Add grub-probe support for GNU/Hurd. + +2009-12-21 Robert Millan + + * NEWS: gettext was added after 1.97. + +2009-12-21 Robert Millan + + * util/mkisofs/msdos_partition.h: New file (based on + include/grub/msdos_partition.h). + * util/mkisofs/mkisofs.c (use_protective_msdos_label): New variable. + (OPTION_PROTECTIVE_MSDOS_LABEL): New macro. + (ld_options, main): Recognize --protective-msdos-label. + * util/mkisofs/mkisofs.h (use_protective_msdos_label): New declaration. + * util/mkisofs/write.c: Include `"msdos_partition.h"'. + (padblock_write): If `use_protective_msdos_label' is set, patch a + protective DOS-style label in the output image. + + * util/grub-mkrescue.in: Use --protective-msdos-label. + +2009-12-21 Robert Millan + + * util/grub-mkrescue.in: Do not zero-pad image for BIOS-based disk + boot. + +2009-12-21 Robert Millan + + * util/mkisofs/mkisofs.c (use_embedded_boot, boot_image_embed): New + variables. + (ld_options, main): Recognize `--embedded-boot'. + * util/mkisofs/mkisofs.h (use_embedded_boot, boot_image_embed): New + declarations. + * util/mkisofs/write.c (PADBLOCK_SIZE): New variable. + (padblock_size): Use `PADBLOCK_SIZE' instead of hardcoding 16. + (padblock_write): Likewise. Rewrite to support embedded boot image. + + * util/grub-mkrescue.in: When building i386-pc images, embed core.img + for BIOS-based disk boot instead of only ElTorito. + +2009-12-21 Robert Millan + + * util/grub-mkrescue.in: Remove `configfile' and `sh' from i386-pc + build (not needed for bootstrap). + +2009-12-21 Robert Millan + + * util/grub-mkrescue.in: Remove `memdisk', `tar' and `search' modules + from i386-pc build (not needed for bootstrap). + Rewrite a pair of strings. + +2009-12-21 Robert Millan + + * normal/main.c (grub_normal_reader_init): Set left margin back to 3. + +2009-12-21 Vladimir Serbinenko + + * video/i386/pc/vbe.c (grub_video_vbe_fini): Set 'last_set_mode'. + +2009-12-21 Andreas Born + + * kern/env.c (grub_env_context_open): Mark exported variable for + reexport. + +2009-12-21 Andreas Born + + * kern/env.c (grub_env_export): Create nonexistent variables before + exporting. + +2009-12-20 Carles Pina i Estany + + * include/grub/auth.h: Include `'. + (GRUB_GET_PASSWORD): Gettextizze string. + * include/grub/normal.h (STANDARD_MARGIN): New macro, moved from + menu_text.c. + (grub_utf8_to_ucs4_alloc): Fix indentation. + (grub_print_ucs4): Likewise. + (grub_getstringwidth): Likewise. + (print_message_indented): New declaration. + * normal/auth.c: Include `'. + (grub_auth_check_authentication): Gettexttize string. + * normal/cmdline.c: Include `'. + (grub_cmdline_get): Gettextizze. + * normal/color.c: Include `'. + (grub_parse_color_name_pair): Gettexttize strings. + * normal/main.c (grub_normal_reader_init): Cleanup gettexttized + string (use `print_message_indented'). + * normal/menu_text.c (STANDARD_MARGIN): Moved from here to + `include/grub/normal.h'. + (print_message_indented): Renamed to ... + (grub_print_message_indented): ... this. Remove `static' qualifer (now + used in normal/main.c). + (print_message): Use `grub_print_message_indented' instead of + `print_message_indented'. + (print_timeout): Likewise. + * normal/misc.c: Include `' and `'. + (grub_normal_print_device_info): Gettexttize strings. + * po/POTFILES: Add `auth.c', `color.c' and `misc.c'. + +2009-12-20 Vladimir Serbinenko + + * kern/parser.c (grub_parser_split_cmdline): Fix incorrect counting + of arguments. Return number of tokens and not arguments. All users + updated. + +2009-12-20 Vladimir Serbinenko + + * util/i386/pc/grub-setup.c (setup): Don't install on non-GPT, + non-MSDOS paritions. + +2009-12-19 Vladimir Serbinenko + + * include/grub/types.h (UNUSED): Removed since it conflicts with + NetBSD headers. All users changed to direct __attribute__ ((unused)). + Reported by Grégoire Sutre. + +2009-12-19 Carles Pina i Estany + + * include/grub/normal.h (grub_utf8_to_ucs4): New declaration. + (grub_print_ucs4_alloc): Likewise. + (grub_getstringwidth): Likewise. + * normal/main.c (grub_normal_init_page): Gettextize version string. + * normal/menu_text.c (grub_utf8_to_ucs4_alloc): New definition. + (getstringwidth): Renamed to ... + (grub_getstringwidth): ... this. Remove `static' qualifier (now used + in normal/main.c). Use `grub_utf8_to_ucs4_alloc'. + (grub_print_ucs4): Remove `static' qualifer (now used in + normal/main.c). + * po/POTFILES: Add normal/main.c. + +2009-12-19 Carles Pina i Estany + + * normal/menu_text.c (STANDARD_MARGIN): New macro. + (print_message_indented): Add `margin_left' and `margin_right' + parameters. + (print_message): Update `print_message_indented' calls. Adds '\n' to the + strings. + (print_timeout): Use `print_message_indented' to print the message. + Deletes `second_stage' parameter. + (run_menu): Update `print_timeout' calls. + +2009-12-18 Vladimir Serbinenko + + Fix console palette on OpenFirmware. + + * term/ieee1275/ofconsole.c (MAX): Removed. + (colors): Redone based on VGA palette. + (grub_ofconsole_setcolor): Discard brightness bit since only 8 + colors are supported. + (grub_ofconsole_init_output): Use ARRAY_SIZE instead of hardcoded size. + +2009-12-18 Vladimir Serbinenko + + Fix potential EfiEmu double prepare. + + * efiemu/main.c (prepared): New variable + (grub_efiemu_unload): Set prepare to '0'. + (grub_efiemu_prepare): Return if already prepared. Set prepared. + + set_virtual_address_map support. + + * include/grub/efi/efi.h (grub_efi_set_virtual_address_map): New + prototype. + * include/grub/efiemu/efiemu.h (grub_efiemu_write_sym_markers): New + prototype. + (grub_efiemu_crc32): Likewise. + (grub_efiemu_crc64): Likewise. + (grub_efiemu_set_virtual_address_map): Likewise. + * include/grub/autoefi.h (grub_autoefi_exit_boot_services): + New definition. + (grub_autoefi_set_virtual_address_map): Likewise. + * kern/efi/efi.c (grub_efi_set_virtual_address_map): New function. + * loader/i386/xnu.c (grub_xnu_boot): Call set_virtual_address_map. + Restructure flow to accomodate it. + * efiemu/prepare.c (grub_efiemu_prepare): Support set_virtual_address_map. + (grub_efiemu_crc): Recompute CRC32. + * efiemu/runtime/efiemu.c (ptv_relocated): Renamed to ... + (efiemu_ptv_relocated): ... this. Made global. All users updated. + * efiemu/symbols.c (relocated_handle): New variable. + (grub_efiemu_free_syms): Free relocated_handle. + (grub_efiemu_alloc_syms): Allocate relocated_handle. + (grub_efiemu_write_sym_markers): New function. + (grub_efiemu_set_virtual_address_map): Likewise. + + Newer XNU parameters. + + * include/grub/i386/xnu.h (GRUB_XNU_BOOTARGS_VERMINOR): Change to 5. + * include/grub/xnu.h (grub_xnu_extheader): Add nameaddr and namesize. + (grub_xnu_fill_devicetree): New prototype. + (grub_xnu_heap_real_start): New variable. + * loader/xnu.c (get_name_ptr): New function. + (grub_xnu_load_driver): Fill namelen and name. + + 64-bit xnu support. + + * conf/i386-efi.rmk (xnu_mod_SOURCES): Add 'loader/macho32.c' + and 'loader/macho64.c'. + * conf/i386-pc.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * include/grub/i386/macho.h (grub_macho_thread64): New structure. + * include/grub/xnu.h (grub_xnu_is_64bit): New variable. + * include/grub/macho.h (grub_macho_segment64): New structure. + * include/grub/machoload.h (grub_macho32_size): Renamed from ... + (grub_macho_size32): ... to this. + (grub_macho32_get_entry_point): Renamed from ... + (grub_macho_get_entry_point32): ... to this. + (grub_macho_contains_macho64): New prototype. + (grub_macho_size64): Likewise. + (grub_macho_get_entry_point64): Likewise. + (grub_macho32_load): Renamed from ... + (grub_macho_load32): ... to this. + (grub_macho32_filesize): Renamed from ... + (grub_macho_filesize32): ... to this. + (grub_macho32_readfile): Renamed from ... + (grub_macho_readfile32): ... to this. + (grub_macho_filesize64): New prototype. + (grub_macho_readfile64): Likewise. + (grub_macho_parse32): Likewise. + (grub_macho_parse64): Likewise. + * loader/macho.c: Split into ... + * loader/machoXX.c: ... and this. Replace 32 with XX. + * loader/macho32.c: New file. + * loader/macho64.c: Likewise. + * loader/xnu.c (grub_xnu_is_64bit): New variable. + (grub_cmd_xnu_kernel): Make 32-bit only. + (grub_cmd_xnu_kernel64): New function. + (grub_xnu_load_driver): Support Mach-O 64. + (grub_cmd_xnu_mkext): Likewise. + * util/grub.d/30_os-prober.in (osx_entry): New function. + Generate entries for 64-bit boot too. + + Eliminate ad-hoc tree format in XNU and EfiEmu. + + * efiemu/main.c (grub_efiemu_prepare): Update comment. + * efiemu/pnvram.c: Rewritten to use environment variables. + All users updated. + + Inline utf16_to_utf8. + + * kern/misc.c (grub_utf16_to_utf8): Move from here ... + * include/grub/charset.h (grub_utf16_to_utf8): ... to here. Inlined. + All users updated. + * include/grub/misc.h (grub_utf16_to_utf8): Removed. + + * bus/usb/usb.c (grub_usb_get_string): Move from here ... + * commands/usbtest.c (grub_usb_get_string): ... move here. + (usb_print_str): Fix error handling. + * include/grub/usb.h (grub_usb_get_string): Remove. + + UTF-8 to UTF-16 transformation. + + * conf/common.rmk (pkglib_MODULES): Add charset.mod + (charset_mod_SOURCES): New variable. + (charset_mod_CFLAGS): Likewise. + (charset_mod_LDFLAGS): Likewise. + * include/grub/utf.h: New file. + * lib/utf.c: New file. (Based on grub_utf8_to_ucs4 from kern/misc.c) + + Support for device properties. + + * include/grub/i386/xnu.h (grub_xnu_devprop_header): New structure. + (grub_xnu_devprop_device_header): Likewise. + (grub_xnu_devprop_device_descriptor): Likewise. + (grub_xnu_devprop_add_device): New prototype. + (grub_xnu_devprop_remove_device): Likewise. + (grub_xnu_devprop_remove_property): Likewise. + (grub_xnu_devprop_add_property_utf8): Likewise. + (grub_xnu_devprop_add_property_utf16): Likewise. + (grub_cpu_xnu_init): Likewise. + (grub_cpu_xnu_fini): Likewise. + (grub_cpu_xnu_unload): Likewise. + * loader/i386/xnu.c (grub_xnu_devprop_device_descriptor): New structure. + (property_descriptor): Likewise. + (devices): New variable. + (grub_xnu_devprop_remove_property): New function. + (grub_xnu_devprop_add_device): Likewise. + (grub_xnu_devprop_remove_device): Likewise. + (grub_xnu_devprop_add_property): Likewise. + (grub_xnu_devprop_add_property_utf8): Likewise. + (grub_xnu_devprop_add_property_utf16): Likewise. + (hextoval): Likewise. + (grub_cpu_xnu_fill_devprop): Likewise. + (grub_cmd_devprop_load): Likewise. + (grub_xnu_boot): Call grub_cpu_xnu_fill_devprop, + grub_xnu_fill_devicetree, grub_xnu_fill_devicetree + (cmd_devprop_load): New variable. + (grub_cpu_xnu_init): New function. + (grub_cpu_xnu_fini): Likewise. + * loader/i386/xnu.c (grub_xnu_unload): Call grub_cpu_xnu_unload. + * loader/xnu.c (grub_xnu_parse_devtree): Remove. + (grub_cmd_xnu_devtree): Likewise. + (hextoval): New function. + (unescape): Likewise. + (grub_xnu_fill_devicetree): Likewise. + + * util/grub.d/30_os-prober.in: Load devprop.bin. Don't load devtree.txt. + * util/i386/efi/grub-dumpdevtree: Generate devprop.bin. + +2009-12-18 Vladimir Serbinenko + + Workaround for broken ATI VBE. + + * video/i386/pc/vbe.c (last_set_mode): New variable. + (grub_vbe_set_video_mode): Set 'last_set_mode'. + (grub_vbe_get_video_mode): Use 'last_set_mode' if get_mode fails. + (grub_video_vbe_setup): Don't check for reserved flag. + +2009-12-17 Felix Zielcke + + * gendistlist.sh: Use POSIX compliant `!' instead of `-not' in + the `find' command. + +2009-12-16 Vladimir Serbinenko + + UUID support for HFS. + + * fs/hfs.c (grub_hfs_uuid): New function. + (grub_hfs_fs): New value .uuid. + * include/grub/hfs.h (grub_hfs_sblock): New field 'num_serial'. + +2009-12-14 Felix Zielcke + + Fix a segfault with parsing unknown long options. + + * util/grub-mkrelpath.c (options): Zero terminate it. + +2009-12-13 Carles Pina i Estany + + * include/grub/misc.h (grub_puts): New declaration. + (grub_puts_): Likewise. + * kern/misc.c (grub_puts): New definition. + (grub_puts_): Likewise. + +2009-12-13 Robert Millan + + * util/grub-probe.c (probe): Improve error message. + +2009-12-13 Robert Millan + + * loader/i386/multiboot_elfxx.c + (CONCAT(grub_multiboot_load_elf, XX)): Fix `grub_multiboot_payload_eip' + initialization. + +2009-12-13 Vladimir Serbinenko + + Relocator framework + + * loader/i386/xnu_helper.S: Removed. All users updated. + * conf/i386.rmk (pkglib_MODULES): Add relocator.mod. + (relocator_mod_SOURCES): New variable. + (relocator_mod_CFLAGS): Likewise. + (relocator_mod_LDFLAGS): Likewise. + (relocator_mod_ASFLAGS): Likewise. + * conf/x86_64.rmk: Likewise. + * include/grub/i386/multiboot.h (grub_multiboot_payload_orig): Removed. + (grub_multiboot_payload_entry_offset): Likewise. + (grub_multiboot_forward_relocator): Likewise. + (grub_multiboot_forward_relocator_end): Likewise. + (grub_multiboot_backward_relocator): Likewise. + (grub_multiboot_backward_relocator_end): Likewise. + (grub_multiboot_payload_eip): New variable. + (grub_multiboot_payload_orig): Likewise. + * include/grub/i386/pc/memory.h: Include grub/i386/memory.h. + (GRUB_MEMORY_MACHINE_CR0_PE_ON): Move from here ... + * include/grub/i386/memory.h + (GRUB_MEMORY_CPU_CR0_PE_ON): ... to here + (GRUB_MEMORY_CPU_CR4_PAE_ON): New definition. + (GRUB_MEMORY_CPU_CR0_PAGING_ON): Likewise. + (GRUB_MEMORY_CPU_AMD64_MSR): Likewise. + (GRUB_MEMORY_CPU_AMD64_MSR_ON): Likewise. + * include/grub/i386/relocator.h: New file. + * include/grub/x86_64/relocator.h: Likewise. + * include/grub/i386/xnu.h: Include grub/cpu/relocator.h. + (XNU_RELOCATOR): New macro. + (grub_xnu_launcher_start): Remove. + (grub_xnu_launcher_end): Likewise. + * include/grub/xnu.h (grub_xnu_boot_resume): New prototype. + (grub_xnu_heap_real_start): Remove. + (grub_xnu_heap_start): Change to void *. All users updated. + * kern/i386/realmode.S (real_to_prot): Use GRUB_MEMORY_CPU_CR0_PE_ON. + * lib/i386/relocator.c: New file. + * lib/i386/relocator_asm.S: Likewise. + * lib/i386/relocator_backward.S: Likewise. + * lib/mips/relocator.c: Likewise. + * lib/mips/relocator_asm.S: Likewise. + * lib/relocator.c: Likewise. + * loader/i386/multiboot.c: Include grub/i386/relocator.h. + (entry): Removed. + (playground): Likewise. + (grub_multiboot_payload_orig): New variable. + (grub_multiboot_payload_dest): Likewise. + (grub_multiboot_payload_size): Likewise. + (grub_multiboot_payload_eip): Likewise. + (grub_multiboot_payload_esp): Likewise. + (grub_multiboot_boot): Use grub_relocator32_boot. + (grub_multiboot_unload): Free relocators. + (grub_multiboot): Setup stack. Use relocators. + * loader/i386/multiboot_elfxx.c: Include grub/i386/relocator.h. + (grub_multiboot_load_elfXX): Use relocators. + * loader/i386/multiboot_helper.S (grub_multiboot_payload_orig): Removed. + (grub_multiboot_payload_size): Likewise. + (grub_multiboot_payload_dest): Likewise. + (grub_multiboot_payload_entry_offset): Likewise. + (grub_multiboot_forward_relocator): Likewise. + (grub_multiboot_backward_relocator): Likewise. + (grub_multiboot_real_boot): Likewise. + * loader/i386/xnu.c (grub_xnu_heap_will_be_at): New variable. + (grub_xnu_entry_point): Likewise. + (grub_xnu_arg1): Likewise. + (grub_xnu_stack): Likewise. + (grub_xnu_launch): Removed. + (grub_xnu_boot_resume): New function. + (grub_xnu_boot): Use relocators. + * loader/i386/xnu_helper.S: Removed. + * loader/xnu.c (grub_xnu_heap_start): New variable. + (grub_xnu_heap_size): Likewise. + (grub_xnu_heap_malloc): Use relocators. + * loader/xnu_resume.c (grub_xnu_resume): Use relocators. + +2009-12-13 Vladimir Serbinenko + + * kern/i386/pc/startup.S (multiboot_entry): Setup stack before calling + anything. + +2009-12-13 Carles Pina i Estany + + * script/execute.c (grub_script_execute_cmdline): Set grub_errno to + GRUB_ERR_NONE before calling grub_env_set. + +2009-12-12 Robert Millan + + * gendistlist.sh (EXTRA_DISTFILES): Add `genvideolist.sh'. + * genmk.rb (video): New variable. + (CLEANFILES, VIDEOFILES): Add #{video}. + (#{video}): New target rule. + * genvideolist.sh: New file. + * Makefile.in (pkglib_DATA): Add video.lst. + (video.lst): New target rule. + * util/grub-mkconfig.in: Initialize ${GRUB_VIDEO_BACKEND} using + `video.lst'. + * util/grub.d/30_os-prober.in: Replace `vbe' with + ${GRUB_VIDEO_BACKEND}. + +2009-12-11 Robert Millan + + * THANKS: Add David Miller. + +2009-12-11 Vladimir Serbinenko + + libpciaccess support. + + * Makefile.in (LIBPCIACCESS): New variable. + (enable_grub_emu_pci): Likewise. + * conf/any-emu.rmk (grub_emu_SOURCES) [enable_grub_emu_pci]: Add + util/pci.c and commands/lspci.c. + (grub_emu_LDFLAGS) [enable_grub_emu_pci]: Add $(LIBPCIACCESS). + * configure.ac (grub-emu-pci): New option. + * include/grub/i386/pci.h (grub_pci_device_map_range): New function. + (grub_pci_device_unmap_range): Likewise. + * include/grub/pci.h [GRUB_UTIL]: Include grub/pciutils.h. + (grub_pci_device) [!GRUB_UTIL]: New structure. All users updated. + (grub_pci_address_t) [!GRUB_UTIL]: New type. + (grub_pci_device_t) [!GRUB_UTIL]: Likewise. + (grub_pci_get_bus) [!GRUB_UTIL]: New function. + (grub_pci_get_device) [!GRUB_UTIL]: Likewise. + (grub_pci_get_function) [!GRUB_UTIL]: Likewise. + * include/grub/pciutils.h: New file. + * util/pci.c: Likewise. + +2009-12-11 Felix Zielcke + + * util/misc.c: Don't include twice. + +2009-12-10 Felix Zielcke + + * disk/i386/pc/biosdisk.c (grub_biosdisk_open): Show the disk + name in an error message. + (grub_biosdisk_rw): Likewise. + +2009-12-10 Vladimir Serbinenko + + Eliminate NTFS 4Gib barrier. + + * fs/ntfs.c (read_attr): Use grub_disk_addr_t and grub_size_t. + (read_run_data): Likewise. + (grub_ntfs_read_run_list): Likewise. + (grub_ntfs_read_block): Likewise. + (grub_ntfs_iterate_dir): Likewise. + (read_mft): Likewise. + (read_data): Likewise. + Use COM_LOG_LEN. + * fs/ntfscomp.c (read_block): Cast ctx->target_vcn & 0xF to unsigned + to avoid 64-bit division + * include/grub/ntfs.h (COM_LOG_LEN): New definition. + (grub_ntfs_rlst): Use grub_disk_addr_t. + +2009-12-10 Vladimir Serbinenko + + Eliminate grub-fstest 4Gib barrier. + + * util/grub-fstest.c (skip, leng): Use grub_disk_addr_t. + (read_file): Fix error reporting. + +2009-12-10 Vladimir Serbinenko + + Eliminate hexdump 4Gib barrier. + + * commands/hexdump.c (grub_cmd_hexdump): Use grub_disk_addr_t. + * lib/arg.c (grub_arg_parse): Use grub_strtoull. + +2009-12-10 Vladimir Serbinenko + + * kern/device.c (grub_device_iterate): Ignore errors during first scan. + Fixes amarsh bug. + +2009-12-09 Bruce Dubbs + + Remove miscellaneous files in distclean target. + + * Makefile.in: Remove docs/{grub.info,version.texi,stamp-vti} + +2009-12-09 Colin Watson + + * util/grub-mkconfig_lib.in: Don't set grub_probe or grub_mkrelpath + if they're already set. This resolves the conflict between my + grub-install change on 2009-10-06 and Felix' change on 2009-11-11, + fixing the --grub-probe option again. + * util/sparc64/ieee1275/grub-install.in: Revert the last piece of my + change on 2009-10-06, so that we now once again source + `${libdir}/grub/grub-mkconfig_lib' after options have been parsed. + +2009-12-08 Robert Millan + + * conf/common.rmk [sparc64-ieee1275] (grub_mkdevicemap_SOURCES): Use + `util/ieee1275/ofpath.c' and `util/ieee1275/devicemap.c' instead of + `util/devicemap.c'. + +2009-12-08 Carles Pina i Estany + + * include/grub/misc.h (grub_printf_): New declaration. + * kern/misc.c (grub_printf_): New definition. + * normal/main.c (grub_normal_reader_init): Use `grub_printf_' and `N_' + instead of `grub_printf' and `_'. + * normal/menu_entry.c (store_completion): Likewise. + (run): Likewise. + (grub_menu_entry_run): Likewise. + * normal/menu_text.c (grub_wait_after_message): Likewise. + (notify_booting): Likewise. + (notify_fallback): Likewise. + (notify_execution_failure): Likewise. + +2009-12-07 Colin Watson + + * configure.ac: Check for vasprintf. + * util/misc.c (asprintf): Move allocation from here ... + (vasprintf): ... to here. New function. + (xasprintf): New function. + * include/grub/util/misc.h (vasprintf, xasprintf): Add + prototypes. + * util/getroot.c (grub_util_get_grub_dev): Use xasprintf. + * util/grub-mkfont.c (write_font): Likewise. + * util/grub-probe.c (probe): Likewise. + * util/hostdisk.c (make_device_name): Likewise. + +2009-12-06 David S. Miller + + * disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Recognize + anything even prefixed with 'cdrom' as a cdrom. + +2009-12-06 Felix Zielcke + + * util/misc.c (make_system_path_relative_to_its_root): Correctly cope with + mount points. + +2009-12-05 Carles Pina i Estany + + * gettext/gettext.c: Include `'. Define grub_gettext_msg, + grub_gettext_msg_list. + (grub_gettext_gettranslation_from_position): Return const char * + and not char *. + (grub_gettext_translate): Add the translated strings into a list, + returns from the list if existing there. + (grub_gettext_init_ext): Add \n at the end of grub_dprintf string. + (grub_gettext_delete_list): Delete the list. + (grub_gettext_env_write_lang): Call grub_gettext_delete_list when + lang environment variable is changed. + (GRUB_MOD_FINI): Call grub_gettext_delete_list. + +2009-12-05 Vladimir Serbinenko + + Rename kernel.mod to kernel.img. + + * conf/i386-efi.rmk (pkglib_MODULES): Change kernel.mod to kernel.img. + (kernel_mod_EXPORTS): Rename to ... + (kernel_img_EXPORTS): ... this. + (kernel_mod_SOURCES): Rename to ... + (kernel_img_SOURCES): ... this. + (kernel_mod_HEADERS): Rename to ... + (kernel_img_HEADERS): ... this. All users updated. + (kernel_mod_CFLAGS): Rename to ... + (kernel_img_CFLAGS): ... this. + (kernel_mod_ASFLAGS): Rename to ... + (kernel_img_ASFLAGS): ... this. + (kernel_mod_LDFLAGS): Rename to ... + (kernel_img_LDFLAGS): ... this. + * conf/x86_64-efi.rmk: Likewise. + * util/i386/efi/grub-mkimage.c (read_kernel_module): Rename to ... + (read_kernel_image): ... this. All users updated. + (read_kernel_image): Read "kernel.img" instead of "kernel.mod". + +2009-12-05 Carles Pina i Estany + + * normal/menu_text.c (grub_color_menu_high): Gettexttize string. + (print_spaces): New function. + (grub_print_ucs4): New function. + (getstringwidth): New function. + (print_message_indented): New function. + (print_message): Gettexttize strings using print_message_indented. + (run_menu): Replaces grub_printf by print_spaces and dynamic terminal + width. + (get_entry_number): Gettextize and uses dynamic terminal width. + (notify_booting, notify_fallback, notify_execution_failure): + Gettextize. + * normal/menu_entry.c (store_completion): Cleanup the gettextized + string. + (run): Likewise. + (grub_menu_entry_run): Likewise. + * PO/POTFILES: Add normal/menu_entry.c. + +2009-12-05 Vladimir Serbinenko + + * configure.ac (TARGET_ASFLAGS): Add "-D". + +2009-12-05 Carles Pina i Estany + + * util/grub-install.in: Install gettext .mo files. + * util/grub-mkrescue.in (process_input_dir): Copy gettext .mo files. + +2009-12-05 Carles Pina i Estany + + * gettext/gettext.c (grub_gettext_init_ext): Replace grub_printf with + grub_dprintf. + +2009-12-05 Robert Millan + + * kern/ieee1275/openfw.c (grub_reboot): Disable for i386. The + non-firmware-dependant one in realmode.S takes precedence. + +2009-12-04 Robert Millan + + * commands/halt.c: Replace misc arch-specific headers with + `'. + * commands/reboot.c: Likewise. + * commands/i386/pc/halt.c: Replace `' with + `'. + * conf/i386-coreboot.rmk (kernel_img_HEADERS): Remove `cpu/reboot.h'. + (halt_mod_SOURCES): Move `kern/i386/halt.c' from here ... + (kernel_img_SOURCES): ... to here. + + * include/grub/efi/efi.h (grub_reboot, grub_halt): Remove prototypes. + * include/grub/i386/pc/init.h: Likewise. + * include/grub/powerpc/ieee1275/kernel.h: Likewise. + * include/grub/sparc64/ieee1275/kernel.h: Likewise. + + * include/grub/misc.h (grub_reboot, grub_halt): New prototypes. + + * include/grub/i386/halt.h: Remove. + * include/grub/i386/reboot.h: Likewise. + + * kern/i386/halt.c: Remove `'. + +2009-12-03 David S. Miller + + * conf/sparc64-ieee1275.rmk (grub_mkimage_SOURCES, + grub_setup_SOURCES, grub_ofpathname_SOURCES): Add gnulib/progname.c + * util/sparc64/ieee1275/grub-mkimage.c: Include and + "progname.h" + * util/sparc64/ieee1275/grub-ofpathname.c: Likewise. + * util/sparc64/ieee1275/grub-setup.c: Likewise. + (usage): Add missing comma in printf. + +2009-12-02 Robert Millan + + Use the same reboot approach on i386 coreboot and qemu as we do on + BIOS. + + * conf/i386-coreboot.rmk (kernel_img_HEADERS): Add `cpu/reboot.h'. + (reboot_mod_SOURCES): Remove `kern/i386/reboot.c'. + * kern/i386/reboot.c: Remove. + * include/grub/i386/reboot.h (grub_reboot): Export function. + * kern/i386/pc/startup.S (grub_reboot): Move from here ... + * kern/i386/realmode.S (grub_reboot): ... to here. Jump to + 0xf000:0xfff0 instead of 0xffff:0x0000. + [!GRUB_MACHINE_PCBIOS] (prot_to_real): Do not restore interrupts. + * kern/i386/qemu/startup.S: Include `"../realmode.S"'. + +2009-11-30 Robert Millan + + Fix $srcdir != $objdir build. + + * Makefile.in (po/%.po): Rewrite as ... + ($(foreach lang, $(LINGUAS), $(srcdir)/po/$(lang).po)): ... this. + +2009-11-29 Samuel Thibault + + Fix GNU/Hurd grub-install crash. + * util/grub-probe.c (probe): Try to access `path' only when it is not + NULL. + +2009-11-28 Vladimir Serbinenko + + Correct module naming. + + * video/efi_uga.c (GRUB_MOD_INIT(efi_fb)): Renamed from this ... + (GRUB_MOD_INIT(efi_uga)): ... to this + (GRUB_MOD_FINI(efi_fb)): Renamed from this ... + (GRUB_MOD_FINI(efi_uga)): ... to this + * video/efi_gop.c (GRUB_MOD_INIT(efi_fb)): Renamed from this ... + (GRUB_MOD_INIT(efi_gop)): ... to this + (GRUB_MOD_FINI(efi_fb)): Renamed from this ... + (GRUB_MOD_FINI(efi_gop)): ... to this + +2009-11-28 Robert Millan + + * util/mkisofs/mkisofs.c (ld_options): Mark all `arg' strings as + translatable. + (usage): Translate `arg' strings using gettext(). + Thanks to Jordi Mallach for the suggestion. + +2009-11-28 Vladimir Serbinenko + + GOP support. Based on patch from Bean + (http://lists.gnu.org/archive/html/grub-devel/2009-08/msg00384.html) + + * video/efi_gop.c: New file. + * include/grub/efi/graphics_output.h: Likewise. + * conf/i386-efi.rmk (pkglib_MODULES): Add `efi_gop.mod'. + (efi_fb_mod_SOURCES, efi_fb_mod_CFLAGS, efi_fb_mod_LDFLAGS): New + variables. + * conf/x86_64-efi.rmk: Likewise. + +2009-11-28 Vladimir Serbinenko + + Rename efi_fb to efi_uga. + + * conf/i386-efi.rmk (pkglib_MODULES): Rename 'efi_fb.mod' to + 'efi_uga.mod'. + (efi_fb_mod_SOURCES): Rename this ... + (efi_uga_mod_SOURCES): ... to this. + (efi_fb_mod_CFLAGS): Rename this ... + (efi_uga_mod_CFLAGS): ... to this. + (efi_fb_mod_LDFLAGS): Rename this ... + (efi_uga_mod_LDFLAGS): ... to this. + * conf/x86_64-efi.rmk (pkglib_MODULES): Rename 'efi_fb.mod' to + 'efi_uga.mod'. + (efi_fb_mod_SOURCES): Rename this ... + (efi_uga_mod_SOURCES): ... to this. + (efi_fb_mod_CFLAGS): Rename this ... + (efi_uga_mod_CFLAGS): ... to this. + (efi_fb_mod_LDFLAGS): Rename this ... + (efi_uga_mod_LDFLAGS): ... to this. + * video/efi_fb.c: Move this ... + * video/efi_uga.c: ... to this. Change prefix to 'grub_video_uga_'. + +2009-11-27 Robert Millan + + * po/README: New file. Explain our PO file workflow. + +2009-11-27 Robert Millan + + * po/ChangeLog: Remove. Move relevant entries back to ... + * ChangeLog: ... here. + * po/ca.po: Remove (now handled by TLP). + * po/id.po: Likewise. + * po/zh_CN.po: Likewise. + * Makefile.in (LINGUAS): Initialize in a way that supports + empty set. + +2009-11-27 Robert Millan + + * Makefile.in (LINGUAS): Rewrite by scanning po/ directory instead of + reliing on po/LINGUAS. + ($(foreach lang, $(LINGUAS), $(srcdir)/po/$(lang).po)): Rewrite as ... + (po/%.po): ... this. + +2009-11-26 Felix Zielcke + + * util/i386/efi/grub-mkimage.c: Include "progname.h". + (main): Use `program_name' instead of nonexistent `progname'. + +2009-11-26 Felix Zielcke + + * conf/i386-efi.rmk (grub_mkimage_SOURCES): Add `gnulib/progname.c'. + * conf/x86_64-efi.rmk (grub_mkimage_SOURCES): Likewise. + +2009-11-26 Robert Millan + + * conf/i386-coreboot.rmk: Cleanup stale filenames from my previous + commit. + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + +2009-11-26 Felix Zielcke + + * conf/any-emu.rmk (grub_emu_SOURCES): Add `gnulib/progname.c'. + +2009-11-26 Felix Zielcke + + * conf/any-emu.rmk (grub_mkfont_SOURCES): Add `gnulib/progname.c'. + +2009-11-26 Robert Millan + + * conf/common.rmk (sbin_UTILITIES): Add `grub-mkdevicemap'. + (grub_mkdevicemap_SOURCES): New variable. + (grub_probe_SOURCES, grub_fstest_SOURCES, grub_mkfont_SOURCES) + (grub_mkrelpath_SOURCES, grub_editenv_SOURCES) + (grub_pe2elf_SOURCES): Add `gnulib/progname.c'. + * conf/i386-coreboot.rmk (sbin_UTILITIES): Remove `grub-mkdevicemap'. + (grub_mkdevicemap_SOURCES): Remove. + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * util/elf/grub-mkimage.c: Include `' and `"progname.h"'. + (usage): Fix strings to use `program_name'. + (main): Initialize gettext. + * util/grub-editenv.c: Likewise. + * util/grub-emu.c: Likewise. + * util/grub-fstest.c: Likewise. + * util/grub-mkdevicemap.c: Likewise. + * util/grub-mkfont.c: Likewise. + * util/grub-mkrelpath.c: Likewise. + * util/grub-pe2elf.c: Likewise. + * util/grub-probe.c: Likewise. + * util/sparc64/ieee1275/grub-mkimage.c: Likewise. + * util/sparc64/ieee1275/grub-ofpathname.c: Likewise. + * util/sparc64/ieee1275/grub-setup.c: Likewise. + + * util/misc.c: Include `"progname.h"'. + (progname): Remove variable. + (grub_util_warn, grub_util_info, grub_util_error): Use `program_name'. + +2009-11-25 Felix Zielcke + + * util/grub.d/10_linux.in (linux_entry): Quote the arguments to + printf and print a newline after the menuentry header line. + * util/grub.d/10_kfreebsd.in (kfreebsd_entry): Likewise. + +2009-11-25 Felix Zielcke + + autoconf >= 2.60 support $(localedir). + + * INSTALL: Note that autoconf 2.60 is required. + * configure.ac (AC_PREREQ): Bump to 2.60. + * util/grub.d/10_kfreebsd.in (TEXTDOMAINDIR): Set to lowercased @localedir@. + * util/grub.d/10_linux.in (TEXTDOMAINDIR): Likewise. + +2009-11-25 Yves Blusseau + + * configure.ac: move the call to AM_GNU_GETTEXT to avoid warnings when + aclocal is run. + +2009-11-25 Robert Millan + + * normal/main.c (grub_normal_read_line): Fix off-by-one + buffer overflow. + +2009-11-25 Robert Millan + + * normal/main.c (grub_normal_execute): Replace "parser.sh" with + "parser.grub" in grub_command_execute() call. + +2009-11-24 Carles Pina i Estany + + * conf/i386-coreboot.rmk (kernel_img_HEADERS): Add i18n.h. + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * gettext/gettex.c: Include . + * include/grub/misc.h (grub_gettext_dummy, grub_gettext): Move from + here ... + * include/grub/i18n.h: ... to here + * include/grub/i18n.h: ... to here. + * kern/misc.c: Include + (grub_gettext_dummy): Move above user. + +2009-11-24 Felix Zielcke + + * util/Makefile.in (install-local): Convert a `for' into a normal + shell expansion. + +2009-11-24 Robert Millan + + * autogen.sh: Add automake call. + * config.guess: Remove. + * config.sub: Likewise. + * install-sh: Likewise. + +2009-11-24 Felix Zielcke + + * util/Makefile.in (install-local): Fix the use of $lang shell variable. + +2009-11-24 Felix Zielcke + + * util/Makefile.in (install-local): Convert a make `$(foreach)' + function to a normal shell `for'. + +2009-11-24 Felix Zielcke + + * conf/i386-coreboot.rmk (grub_mkimage_SOURCES): Add `gnulib/progname.c'. + +2009-11-24 Felix Zielcke + + * util/grub-mkrelpath.c: New file. + * conf/common.rmk (bin_UTILITIES): Add grub-mkrelpath. + (grub_mkrelpath_SOURCES): New variable. + * include/grub/util/misc.h: New function prototype. + * util/misc.c (make_system_path_relative_to_its_root): New function. + + * util/grub-mkconfig_lib.in (bindir): New variable. + (grub_mkrelpath): Likewise. + (make_system_path_relative_to_its_root): Use grub-mkrelpath. + + * util/probe.c (probe): Make the file path relative to its root. + Change a info message to use the GRUB path. Enable again the + check if we can read the file with GRUB facilities. + + * util/i386/pc/grub-setup.c (setup): Make core.img path relative + to its root. + +2009-11-24 Felix Zielcke + + * Makefile.in: Don't include GRUB_CONTRIB makefiles with emu + platform. + +2009-11-24 Felix Zielcke + + * util/getroot.c (grub_util_get_dev_abstraction): Properly use + strncmp(). + +2009-11-24 Felix Zielcke + + * util/getroot.c (grub_util_is_dmraid): New function. + (grub_util_get_dev_abstraction): Treat dmraid and multipath + devices as normal ones, not as LVM. + +2009-11-23 Carles Pina i Estany + + * conf/common.rmk: Add grub-gettext_lib target and updates + lib_DATA and CLEANFILES. Adds gettext.mod SOURCES, CFLAGS, + LDFLAGS. + * gettext/gettext.c: New file. (Reads mo files). + * include/grub/file.h (grub_file_pread): New prototype. + * include/grub/i18n.h (_): New prototype. + * include/grub/misc.h (grub_gettext_dummy, grub_gettext): New + prototypes. + * kern/misc.c (grub_gettext_dummy): New function. + * normal/menu_text.c: Include . + * normal/menu_text.c (print_timeout): Gettexttize string. + * normal/menu_text.c (print_message): Gettexttize string. + * po/POTFILES: Add `normal/menu_text.c'. + * po/ca.po: Add new translations. + * util/grub.d/00_header.in: Define locale_dir and lang. insmod + gettext module and defines locale_dir and lang in grub.cfg. + * NEWS: Add gettext support. + +2009-11-23 Robert Millan + + * util/hostdisk.c: Include `'. + (find_grub_drive): Use ARRAY_SIZE for map size calculation. + (make_device_name): Rewrite using asprintf. + (convert_system_partition_to_system_disk): Replace 0 with NULL. + (find_system_device): If a device is not found, generate one just + by reusing the OS path name. + (read_device_map): Make it permissible for device.map not to exist. + +2009-11-23 Robert Millan + + * script/sh/execute.c: Move from here ... + * script/execute.c: ... to here. Update all users. + * script/sh/function.c: Move from here ... + * script/function.c: ... to here. Update all users. + * script/sh/lexer.c: Move from here ... + * script/lexer.c: ... to here. Update all users. + * script/sh/main.c: Move from here ... + * script/main.c: ... to here. Update all users. + * script/sh/parser.y: Move from here ... + * script/parser.y: ... to here. Update all users. + * script/sh/script.c: Move from here ... + * script/script.c: ... to here. Update all users. + +2009-11-23 Robert Millan + + * configure.ac: Detect all `emu' platforms. Define + GRUB_MACHINE_* macros in TARGET_CFLAGS. Remove + --enable-grub-emu logic. Disable include/grub/machine + symlink on `emu' platforms. + + * genkernsyms.sh.in: Use @TARGET_CFLAGS@ during symbol generation. + * gensymlist.sh.in: Likewise. + + * include/grub/i386/coreboot/machine.h: Remove file. + * include/grub/i386/efi/machine.h: Likewise. + * include/grub/i386/ieee1275/machine.h: Likewise. + * include/grub/i386/pc/machine.h: Likewise. + * include/grub/i386/qemu/machine.h: Likewise. + * include/grub/powerpc/ieee1275/machine.h: Likewise. + * include/grub/sparc64/ieee1275/machine.h: Likewise. + * include/grub/x86_64/efi/machine.h: Likewise. + + * commands/acpi.c: Remove `'. + * commands/halt.c: Likewise. + * commands/reboot.c: Likewise. + * include/grub/autoefi.h: Likewise. + * include/grub/i386/at_keyboard.h: Likewise. + * include/grub/i386/kernel.h: Likewise. + * include/grub/i386/loader.h: Likewise. + * include/grub/i386/pc/memory.h: Likewise. + * kern/dl.c: Likewise. + * kern/i386/coreboot/init.c: Likewise. + * loader/i386/bsd.c: Likewise. + * loader/i386/linux.c: Likewise. + * loader/multiboot_loader.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * term/usb_keyboard.c: Likewise. + + * include/grub/time.h [!GRUB_MACHINE_EMU]: Remove + `' + [!GRUB_MACHINE_EMU] (GRUB_TICKS_PER_SECOND): New macro. + * util/misc.c: Remove `' and + `'. + + * Makefile.in (enable_grub_emu): Remove variable. + Include $(srcdir)/conf/any-emu.mk for the `emu' platform. + + * conf/any-emu.rmk: New file. + * conf/common.rmk (grub_emu_init.lst, grub_emu_init.h) + (grub_emu_init.c): Move from here ... + * conf/any-emu.rmk: ... to here. + + * conf/i386-coreboot.rmk (sbin_UTILITIES): Remove `grub-emu'. + (grub_emu_SOURCES, grub_emu_LDFLAGS): Move from here ... + * conf/any-emu.rmk: ... to here. + +2009-11-23 Robert Millan + + * include/grub/parser.h (grub_parser_register): Document need + of `name' parameter. + * normal/main.c (grub_normal_read_line): Simplify prompt string. + * script/sh/main.c (grub_sh_parser, GRUB_MOD_INIT(sh)): Rename + "sh" to "grub". + +2009-11-23 Robert Millan + + * Makefile.in ($(srcdir)/po/$(PACKAGE).pot): Pass --keyword=N_ to + `$(XGETTEXT)'. + * include/grub/i18n.h (N_): New macro. + * util/mkisofs/mkisofs.h: Likewise. + * util/mkisofs/mkisofs.c (ld_options): Wrap all translatable strings + around N_(). + (usage): Use gettext() to translate help strings when printing them. + +2009-11-23 Robert Millan + + Based on patch from Bean + (http://lists.gnu.org/archive/html/grub-devel/2009-08/msg00384.html) + + * video/efi_fb.c: New file. + * conf/i386-efi.rmk (pkglib_MODULES): Add `efi_fb.mod'. + (efi_fb_mod_SOURCES, efi_fb_mod_CFLAGS, efi_fb_mod_LDFLAGS): New + variables. + * conf/x86_64-efi.rmk: Likewise. + +2009-11-22 Robert Millan + + * util/i386/pc/grub-mkimage.c: Ungettextize grub_util_info() strings. + * util/i386/pc/grub-setup.c: Likewise. + +2009-11-21 Samuel Thibault + + * util/getroot.c [__GNU__]: Include , , and + + [__GNU__] (grub_guess_root_device): Call file_name_lookup and + file_get_storage_info to implement grub_guess_root_device. + +2009-11-21 Felix Zielcke + + * Makefile.in (target): Use make's builtin $(shell) function + instead of calling directly $(SHELL) to create the locale directories, + inside the $(foreach) function. + +2009-11-21 Felix Zielcke + + * util/grub-mkrescue.in: Print an error and usage if output option + has not been given. + +2009-11-21 Felix Zielcke + + Patch from Loïc Minier . + * util/grub.d/30_os-prober.in: Cope with Linux entries where + root and /boot are on different devices. + +2009-11-21 Robert Millan + + Fix build for srcdir != objdir. + + * Makefile.in (po/$(PACKAGE).pot): Rename to ... + ($(srcdir)/po/$(PACKAGE).pot): ... this. Run $(XGETTEXT) from + $(srcdir). + ($(foreach lang, $(LINGUAS), po/$(lang).po)): Rename to ... + ($(foreach lang, $(LINGUAS), $(srcdir)/po/$(lang).po): ... this. Use $^ + reference for input. + +2009-11-21 Robert Millan + + * util/grub-mkrescue.in: Use source directory direcly (without copiing + or hardlinking it). Remove -J option, Joliet is not compatible with + multiple source directories. + +2009-11-21 Carles Pina i Estany +2009-11-21 Robert Millan + + * util/grub-mkrescue.in: Recognize `--override-directory' option. + (process_input_dir): New function. Process an arbitrary input + directory. + Misc adjustments to support both "override mode" and system-wide mode. + +2009-11-20 Felix Zielcke + + * configure.ac (UNIFONT_BDF): Rename to ... + (FONT_SOURCE): ... this. Update all users. + +2009-11-20 Felix Zielcke + + * configure.ac: Add `/usr/share/fonts/X11/misc/unifont.pcf.gz' + to the list of unifont files to look for. + +2009-11-19 Robert Millan + + Patch from Joe Auricchio + * commands/minicmd.c (grub_mini_cmd_clear): New function. + (GRUB_MOD_INIT(minicmd)): Register grub_mini_cmd_clear(). + (GRUB_MOD_FINI(minicmd)): Unregister grub_mini_cmd_clear(). + +2009-11-19 Felix Zielcke + + * Makefile.in (install-local): Add a missing backslash. + +2009-11-19 Felix Zielcke + + * include/grub/x86_64/io.h: New file. + +2009-11-19 Robert Millan + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add `gnulib/progname.c'. + * util/i386/pc/grub-setup.c: Include `'. + Include `"progname.h"'. + (main): Initialize gettext. + * util/i386/pc/grub-setup.c: Gettexttize. + * util/i386/pc/grub-mkimage.c: Likewise. + + * Makefile.in (po/*.po): Redefine as ... + ($(foreach lang, $(LINGUAS), po/$(lang).po)): ... this. + + * po/POTFILES: Add `util/i386/pc/grub-setup.c'. + +2009-11-19 Robert Millan + + * conf/common.rmk (grub_mkisofs_SOURCES): Add `gnulib/progname.c'. + * util/mkisofs/mkisofs.c: Include `"progname.h"'. + (program_name): Remove. + (main): Initialize gettext support. + * util/mkisofs/mkisofs.h: Include `'. + Include `'. + (_): New macro. + + * util/mkisofs/eltorito.c: Gettexttize. + * util/mkisofs/joliet.c: Likewise. + * util/mkisofs/mkisofs.c: Likewise. + * util/mkisofs/multi.c: Likewise. + * util/mkisofs/rock.c: Likewise. + * util/mkisofs/tree.c: Likewise. + * util/mkisofs/write.c: Likewise. + + * po/POTFILES: Update with new files. + +2009-11-18 Robert Millan + + * util/mkisofs/eltorito.c: Fix minor mistake in license text. + * util/mkisofs/iso9660.h: Likewise. + * util/mkisofs/joliet.c: Likewise. + * util/mkisofs/mkisofs.c: Likewise. + * util/mkisofs/mkisofs.h: Likewise. + * util/mkisofs/rock.c: Likewise. + * util/mkisofs/tree.c: Likewise. + * util/mkisofs/write.c: Likewise. + + * util/mkisofs/eltorito.c (rcsid): Remove. + * util/mkisofs/hash.c: Likewise. + * util/mkisofs/joliet.c: Likewise. + * util/mkisofs/name.c: Likewise. + * util/mkisofs/rock.c: Likewise. + * util/mkisofs/tree.c: Likewise. + * util/mkisofs/write.c: Likewise. + +2009-11-18 Robert Millan + + * util/mkisofs/match.c: Rewrite from scratch, using a linked list + instead of static allocation. + * util/mkisofs/match.h: Likewise. + +2009-11-18 Robert Millan + + * po/POTFILES-shell: New file. List `util/grub.d/10_kfreebsd.in' + and `util/grub.d/10_linux.in'. + * Makefile.in (po/$(PACKAGE).pot): Process `po/POTFILES-shell' for + translatable Shell files. + +2009-11-18 Robert Millan + + * Makefile.in ($(srcdir)/aclocal.m4): New target. + +2009-11-17 Robert Millan + + * INSTALL: Document Automake is needed for bootstrap. + * po/ca.po: Fix PO-Revision-Date and Language-Team fields. + * util/grub.d/10_kfreebsd.in (bindir): New variable. + Add gettext initialization. + (kfreebsd_entry): Make menuentry output translatable. + +2009-11-17 Robert Millan + + * Makefile.in (XGETTEXT, MSGMERGE, MSGFMT): New variables. + (po/$(PACKAGE).pot): Replace `xgettext' with `$(XGETTEXT)'. + (po/*.po): Replace `msgmerge' with `$(MSGMERGE)'. + (po/%.mo): Replace `msgfmt' with `$(MSGFMT)'. + (LINGUAS): Auto-generate using `po/LINGUAS'. + * po/LINGUAS: New file. + +2009-11-17 Robert Millan + + * configure.ac: Call AM_GNU_GETTEXT() (defines localedir, among + other things). + * Makefile.in (CPPFLAGS): Add `-DLOCALEDIR=\"$(localedir)\"'. + * util/i386/pc/grub-mkimage.c (main): Issue setlocale() and + bindtextdomain() calls for gettext initialization. + +2009-11-17 Robert Millan + + * gnulib/progname.c: New file (imported from Gnulib). + * gnulib/progname.h: Likewise. + * conf/i386-pc.rmk (grub_mkimage_SOURCES): Add `gnulib/progname.c'. + * util/i386/pc/grub-mkimage.c: Include `"progname.h"'. + (usage): Replace `progname' with `program_name'. + (main): Use set_program_name() for program name initialization. + +2009-11-17 Robert Millan + + * conf/common.rmk (grub_mkisofs_CFLAGS): Move `-I$(srcdir)/gnulib' + from here ... + * Makefile.in (CPPFLAGS): ... to here. + +2009-11-16 Robert Millan + + * aclocal.m4: Move from here ... + * acinclude.m4: ... to here. + * autogen.sh: Add call to `aclocal'. + * configure.ac: Add AM_INIT_AUTOMAKE() after AC_INIT() call. + +2009-11-16 Robert Millan + + * Makefile.in (CLEANFILES): Add `po/*.mo'. + (LINGUAS): New variable. + (all-local): Add `$(foreach lang, $(LINGUAS), po/$(lang).mo)'. + (install-local): Install MO files. + (po/$(PACKAGE).pot, po/*.po, po/%.mo): New rules. + * include/grub/i18n.h: New file. + * po/POTFILES: New file. + * po/ca.po: New file. + * util/grub.d/10_linux.in (bindir): New variable. + Add gettext initialization. + (linux_entry): Make menuentry output translatable. + * util/i386/pc/grub-mkimage.c: Include `'. + (usage): Make --help output translatable. + (main): Initialize gettext. + +2009-11-17 Robert Millan + + * import_gcry.py: New file (written by Vladimir with minor + adjustments). + * autogen.sh: Use import_gcry.py to auto-generate GRUB-ified + ciphers. + * INSTALL: Document that Python is required for bootstrap. + +2009-11-17 Robert Millan + + Import ciphers from libgcrypt 1.4.4. + + * lib/libgcrypt/cipher/ChangeLog + * lib/libgcrypt/cipher/ac.c + * lib/libgcrypt/cipher/arcfour.c + * lib/libgcrypt/cipher/bithelp.h + * lib/libgcrypt/cipher/blowfish.c + * lib/libgcrypt/cipher/camellia-glue.c + * lib/libgcrypt/cipher/camellia.c + * lib/libgcrypt/cipher/camellia.h + * lib/libgcrypt/cipher/cast5.c + * lib/libgcrypt/cipher/cipher.c + * lib/libgcrypt/cipher/crc.c + * lib/libgcrypt/cipher/des.c + * lib/libgcrypt/cipher/dsa.c + * lib/libgcrypt/cipher/ecc.c + * lib/libgcrypt/cipher/elgamal.c + * lib/libgcrypt/cipher/hash-common.c + * lib/libgcrypt/cipher/hash-common.h + * lib/libgcrypt/cipher/hmac-tests.c + * lib/libgcrypt/cipher/md.c + * lib/libgcrypt/cipher/md4.c + * lib/libgcrypt/cipher/md5.c + * lib/libgcrypt/cipher/primegen.c + * lib/libgcrypt/cipher/pubkey.c + * lib/libgcrypt/cipher/rfc2268.c + * lib/libgcrypt/cipher/rijndael-tables.h + * lib/libgcrypt/cipher/rijndael.c + * lib/libgcrypt/cipher/rmd.h + * lib/libgcrypt/cipher/rmd160.c + * lib/libgcrypt/cipher/rsa.c + * lib/libgcrypt/cipher/seed.c + * lib/libgcrypt/cipher/serpent.c + * lib/libgcrypt/cipher/sha1.c + * lib/libgcrypt/cipher/sha256.c + * lib/libgcrypt/cipher/sha512.c + * lib/libgcrypt/cipher/tiger.c + * lib/libgcrypt/cipher/twofish.c + * lib/libgcrypt/cipher/whirlpool.c + +2009-11-16 Robert Millan + + Fix build for systems without error(). + + * gnulib/error.c: New file (imported from Gnulib). + * gnulib/error.h: Likewise. + * conf/common.rmk (grub_mkisofs_SOURCES): Add `gnulib/error.c'. + * util/mkisofs/mkisofs.c (program_name): Remove `static' qualifier + (this variable is now used by error()). + +2009-11-16 Felix Zielcke + + * util/mkisofs/name.c (iso9660_file_length): Use isascii macro + instead of relying that char is signed. + +2009-11-16 Vladimir Serbinenko + + * fs/i386/pc/pxe.c (grub_pxefs_open): Correctly handle PXE choosing + blocksize different from specified. + (grub_pxefs_read): Likewise. + +2009-11-16 Felix Zielcke + + Enable ata.mod on x86_64-efi, i386-efi and i386-ieee1275. + + * disk/ata.c (grub_ata_dumpinfo): Add a cast. + (grub_ata_readwrite): Likewise. Update 2 format strings. + (grub_atapi_read): Likewise. + + * conf/i386-coreboot.rmk (pkglib_MODULES): Move `ata.mod' from here ... + * conf/i386.rmk (pkglib_MODULES): ... to here ... + * conf/x86_64-efi.rmk (pkglib_MODULES): ... and here. + * conf/i386-coreboot.rmk (ata_mod_SOURCES, ata_mod_CFLAGS) + (ata_mod_LDFLAGS): Move from here ... + * conf/i386.rmk: ... to here ... + * conf/x86_64-efi.rmk: ... and here. + * conf/i386-pc.rmk (pkglib_MODULES): Remove `ata.mod' + (ata_mod_SOURCES, ata_mod_CFLAGS, ata_mod_LDFLAGS): Remove. + +2009-11-16 Robert Millan + + Relicense multiboot.h, with RMS' blessing. + + * include/multiboot.h: Change to X11 license. + +2009-11-15 Robert Millan + + Support --version in grub-mkisofs. + + * util/mkisofs/mkisofs.c (rcsid): Remove variable. + (OPTION_VERSION): New macro. + (ld_options): Recognize --version. + (usage): Move `program_name' from here ... + (program_name): ... to here. Add `static' qualifier. + (main): Recognize `OPTION_VERSION'. + +2009-11-15 Felix Zielcke + + * Makefile.in (TARGET_CPPFLAGS): Replace `-isystem=$(srcdir)/include' + with `-nostdinc -isystem $(shell $(TARGET_CC) -print-file-name=include)'. + +2009-11-14 Robert Millan + + Fix help2man generation for mkisofs. + + * util/mkisofs/mkisofs.c (ld_options): Recognize --help. + (usage): Send output to stdout (rather than stderr). + +2009-11-14 Robert Millan + + * conf/i386-coreboot.rmk (grub_mkrescue_SOURCES): Replace + `util/i386/coreboot/grub-mkrescue.in' with `util/grub-mkrescue.in'. + * conf/i386-pc.rmk (grub_mkrescue_SOURCES): Replace + `util/i386/pc/grub-mkrescue.in' with `util/grub-mkrescue.in'. + (bin_SCRIPTS): Add `grub-mkfloppy'. + (grub_mkfloppy_SOURCES): New variable. + + * util/grub-mkrescue.in: New file. + * util/i386/pc/grub-mkfloppy.in: New file. + + * util/i386/coreboot/grub-mkrescue.in: Remove. + * util/i386/pc/grub-mkrescue.in: Remove. + +2009-11-13 Robert Millan + + * include/grub/multiboot.h (struct grub_multiboot_header): Move + from here ... + * include/multiboot.h (struct multiboot_header): ... to here. Update + all users. + * include/grub/multiboot.h (struct grub_multiboot_info): Move + from here ... + * include/multiboot.h (struct multiboot_info): ... to here. Update + all users. + * include/grub/multiboot.h (struct grub_multiboot_mmap_entry): Move + from here ... + * include/multiboot.h (struct multiboot_mmap_entry): ... to here. + Update all users. + * include/grub/multiboot.h (struct grub_mod_list): Move + from here ... + * include/multiboot.h (struct multiboot_mod_list): ... to here. + Update all users. + +2009-11-13 Robert Millan + + * include/multiboot2.h (multiboot_word): Rename from this ... + (multiboot2_word): ... to this. Update all users. + (multiboot_header): Rename from this ... + (multiboot2_header): ... to this. Update all users. + (multiboot_tag_header): Rename from this ... + (multiboot2_tag_header): ... to this. Update all users. + (multiboot_tag_start): Rename from this ... + (multiboot2_tag_start): ... to this. Update all users. + (multiboot_tag_name): Rename from this ... + (multiboot2_tag_name): ... to this. Update all users. + (multiboot_tag_module): Rename from this ... + (multiboot2_tag_module): ... to this. Update all users. + (multiboot_tag_memory): Rename from this ... + (multiboot2_tag_memory): ... to this. Update all users. + (multiboot_tag_unused): Rename from this ... + (multiboot2_tag_unused): ... to this. Update all users. + (multiboot_tag_end): Rename from this ... + (multiboot2_tag_end): ... to this. Update all users. + +2009-11-13 Robert Millan + + Disable Multiboot2 in i386-ieee1275. It didn't actually work, and on + this platform we should support Multiboot1 first. + + * conf/i386-ieee1275.rmk (pkglib_MODULES): Remove `multiboot.mod'. + (multiboot_mod_SOURCES, multiboot_mod_CFLAGS) + (multiboot_mod_LDFLAGS, multiboot_mod_ASFLAGS): Remove. + +2009-11-12 Robert Millan + + * util/mkisofs/eltorito.c (init_boot_catalog): Handle return code + of write calls (converting them to fwrite() if they aren't already). + (get_torito_desc): Likewise. + * util/mkisofs/rock.c (generate_rock_ridge_attributes): Likewise. + +2009-11-12 Robert Millan + + * util/i386/pc/grub-install.in: Move from here ... + * util/grub-install.in: ... to here. Update all users. + +2009-11-11 Colin Watson + + * util/powerpc/ieee1275/grub-mkrescue.in: Fix --version output. + +2009-11-11 Robert Millan + + Support for El Torito without floppy emulation. + + * util/mkisofs/eltorito.c: Include `'. + (init_boot_catalog): Improve error handling. + (get_torito_desc): Don't use floppy emulation unless requested by + user. Patch boot information table when requested via + `-boot-info-table'. + * util/mkisofs/iso9660.h (struct eltorito_boot_info): New struct. + * util/mkisofs/mkisofs.c (use_eltorito_emul_floppy) + (use_boot_info_table): New variables. + (OPTION_BOOT_INFO_TABLE, OPTION_NO_EMUL_BOOT) + (OPTION_ELTORITO_EMUL_FLOPPY): New macros. + (ld_options): Handle `-boot-info-table', `-no-emul-boot' and + `--eltorito-emul-floppy'. + (main): Handle `OPTION_BOOT_INFO_TABLE', `OPTION_NO_EMUL_BOOT' + and `OPTION_ELTORITO_EMUL_FLOPPY'. + * util/mkisofs/mkisofs.h (use_eltorito_emul_floppy) + (use_boot_info_table, get_731): New prototypes. + * util/mkisofs/write.c (get_731): New function. + +2009-11-11 Felix Zielcke + + Fix the generation of the man page. + + * util/pc/i386/grub-install.in: Source + `${libdir}/grub/grub-mkconfig_lib' after options have been parsed. + +2009-11-11 Robert Millan + + Large file support for grub-mkisofs. + + * conf/common.rmk (grub_mkisofs_CFLAGS): Add `-D_FILE_OFFSET_BITS=64'. + * util/mkisofs/mkisofs.c (next_extent, last_extent) + (session_start): Upgrade type to `uint64_t'. Update all users. + * util/mkisofs/mkisofs.h: Include `'. + (struct directory_entry): Upgrade type of `starting_block' and + `size' to `uint64_t'. Update all users. + (struct deferred): Remove unused structure. + (xfwrite): Upgrade type of `count' and `size' to `uint64_t'. + Update all users. + * util/mkisofs/tree.c (stat_filter, lstat_filter): Return -1 when + file is larger than `UINT32_MAX'. + * util/mkisofs/write.c (xfwrite): Upgrade type of `count' and + `size' to `uint64_t'. Update all users. Fix handling of fwrite() + return value. + (struct deferred_write): Upgrade type of `extent' and `size' to + `uint64_t'. Update all users. + (last_extent_written): Upgrade type to `uint64_t'. Update all + users. + (write_one_file): Upgrade type of `count' and `size' to `uint64_t'. + Update all users. Upgrade type of `remain' to `int64_t' and + `use' to `size_t'. Use error() to handle fread() errors. + (write_files): Rely on write_one_file() rather than calling + xfwrite() directly. + +2009-11-09 Felix Zielcke + + * util/mkisofs/mkisofs.c (ld_options): Fix a spelling mistake. + +2009-11-09 Robert Millan + + * util/mkisofs/fnmatch.c: Remove. + * util/mkisofs/getopt1.c: Likewise. + * util/mkisofs/getopt.c: Likewise. + * conf/common.rmk (grub_mkisofs_SOURCES): Replace + `util/mkisofs/fnmatch.c', `util/mkisofs/getopt1.c' and + `util/mkisofs/getopt.c' with `gnulib/fnmatch.c', + `gnulib/getopt1.c' and `gnulib/getopt.c'. + (grub_mkisofs_CFLAGS): Add `-I$(srcdir)/gnulib'. + + * configure.ac: Detect `mingw32msvc' host_os. + Check for lstat(), getuid() and getgid(). + + * util/mkisofs/joliet.c: Include `'. Replace all + instances of `u_char' with `uint8_t'. + + * util/mkisofs/mkisofs.h: Include `'. + [!HAVE_GETUID] (getuid): New function (stub). + [!HAVE_GETGID] (getgid): Likewise. + [!HAVE_LSTAT] (lstat): Likewise. + [!S_IROTH] (S_IROTH): New macro (dummy). + [!S_IRGRP] (S_IRGRP): Likewise. + +2009-11-09 Robert Millan + + * gnulib/fnmatch_loop.c (EXT): Fix warning (signed and unsigned type in + conditional expression). + +2009-11-09 Robert Millan + + Import from Gnulib. + + * gnulib/fnmatch.c: New file. + * gnulib/fnmatch.h: Likewise. + * gnulib/fnmatch_loop.c: Likewise. + * gnulib/getopt.c: Likewise. + * gnulib/getopt.h: Likewise. + * gnulib/getopt1.c: Likewise. + * gnulib/getopt_int.h: Likewise. + * gnulib/gettext.h: Likewise. + +2009-11-09 Robert Millan + + * normal/dyncmd.c (read_command_list): Replace `0' with `NULL'. + * normal/handler.c (read_handler_list): Likewise. + +2009-11-09 Robert Millan + + Misc cleanup. + + * kern/command.c (grub_register_command_prio): Use + grub_zalloc() instead of explicitly zeroing data. + * kern/list.c: Include `'. + (grub_named_list_find): Replace `0' with `NULL'. + * normal/autofs.c (struct grub_fs_module_list): Remove ad-hoc type. + (fs_module_list): Change type to `grub_named_list_t'. Update all + users. + * normal/dyncmd.c (read_command_list): Add space between function + call and parenthesis. + * normal/handler.c (read_handler_list): Likewise. + +2009-11-09 Robert Millan + + * normal/auth.c (punishment_delay): Moved from here ... + (grub_auth_strcmp): ... to here (inside function). + +2009-11-09 Robert Millan + + * include/grub/list.h (struct grub_named_list): Remove `const' + qualifier from `name'. + (struct grub_prio_list): Likewise. + +2009-11-09 Robert Millan + + * normal/auth.c: Include `'. + (grub_auth_strcmp): Replace `strcmp' with `grub_strcmp'. + +2009-11-09 Robert Millan + + * normal/auth.c (punishment_delay): New variable. + (grub_auth_strcmp): Rewrite using grub_get_time_ms (). + (grub_auth_check_authentication): Punish failed login attempts with + an incremental (2^N) delay. + +2009-11-09 Robert Millan + + * conf/common.rmk (grub_mkisofs_CFLAGS): Prefix include + path with $(srcdir). + +2009-11-09 Vladimir Serbinenko + + * normal/auth.c (grub_auth_strcmp): Fixed incorrect variable usage. + +2009-11-09 Robert Millan + + * util/i386/coreboot/grub-mkrescue.in: New file. + * conf/i386-coreboot.rmk (bin_SCRIPTS, grub_mkrescue_SOURCES): New + variables. + + * conf/common.rmk (bin_UTILITIES): Add `grub-mkisofs'. + (grub_mkisofs_SOURCES, grub_mkisofs_CFLAGS): New variables. + * configure.ac: Add header and function checks to satisfy grub-mkisofs + requirements. + * util/mkisofs/defaults.h: New file. + * util/mkisofs/eltorito.c: Likewise. + * util/mkisofs/exclude.h: Likewise. + * util/mkisofs/fnmatch.c: Likewise. + * util/mkisofs/getopt.c: Likewise. + * util/mkisofs/getopt1.c: Likewise. + * util/mkisofs/hash.c: Likewise. + * util/mkisofs/include/fctldefs.h: Likewise. + * util/mkisofs/include/mconfig.h: Likewise. + * util/mkisofs/include/prototyp.h: Likewise. + * util/mkisofs/include/statdefs.h: Likewise. + * util/mkisofs/iso9660.h: Likewise. + * util/mkisofs/joliet.c: Likewise. + * util/mkisofs/match.c: Likewise. + * util/mkisofs/match.h: Likewise. + * util/mkisofs/mkisofs.c: Likewise. + * util/mkisofs/mkisofs.h: Likewise. + * util/mkisofs/multi.c: Likewise. + * util/mkisofs/name.c: Likewise. + * util/mkisofs/rock.c: Likewise. + * util/mkisofs/tree.c: Likewise. + * util/mkisofs/write.c: Likewise. + +2009-11-09 Vladimir Serbinenko + + * normal/auth.c (grub_auth_strcmp): Fix bug which resulted in function + being insecure. + +2009-11-08 Robert Millan + + * util/i386/pc/grub-mkrescue.in: Fix miss-identification as + `grub-mkimage' (and use $0 when possible). + +2009-11-08 Robert Millan + + * kern/i386/multiboot_mmap.c (grub_machine_mmap_init): Improve + error message for excessively large memory map. + +2009-11-08 Robert Millan + + * autogen.sh: Use `sh gendistlist.sh' to avoid reliing on + executable bit. + +2009-11-08 Robert Millan + + * kern/i386/multiboot_mmap.c (grub_machine_mmap_init): Improve error + message for coreboot users. + +2009-11-07 Robert Millan + + Fix build with GNU gold. + + * conf/i386-pc.rmk (boot_img_LDFLAGS, pxeboot_img_LDFLAGS) + (diskboot_img_LDFLAGS, lnxboot_img_LDFLAGS) + (cdboot_img_LDFLAGS): Prepend `0x' qualifier to hexadecimal + link addresses. + * aclocal.m4: Likewise. + +2009-11-04 Felix Zielcke + + * configure.ac (AC_PREREQ): Bump to 2.59d. + * INSTALL: Make it more clear when Autoconf and Ruby are + needed and when to run `./autogen.sh'. + +2009-11-03 Samuel Thibault + + * util/grub.d/30_os-prober.in: Restore default behavior for unsupported + OSes. + +2009-11-02 Samuel Thibault + + * util/grub.d/30_os-prober.in: Add GNU/Hurd support + +2009-11-02 Samuel Thibault + + * util/grub.d/10_hurd.in: Drop /dev/ prefix from root device path before + giving it to GNU Mach. + +2009-11-02 Samuel Thibault + + * util/hostdisk.c (grub_util_biosdisk_get_grub_dev): Subtract 1 from + GNU partition number to get internal GRUB partition number. + +2009-11-02 Samuel Thibault + + * util/grub.d/10_hurd.in: Call prepare_grub_to_access_device + ${GRUB_DEVICE_BOOT} before loading /boot kernel. + +2009-11-01 Robert Millan + + Based on patch from BVK Chaitanya + * kern/misc.c (grub_strchr, grub_strrchr): Fix to handle c == '\0' + case. + +2009-11-01 Felix Zielcke + + * Makefile.in (TARGET_CPPFLAGS): Add `-I$(srcdir)/include'. + +2009-10-30 Robert Millan + + Fix build problem. + + * Makefile.in (TARGET_CPPFLAGS): Replace `-nostdinc' with + `-isystem=$(srcdir)/include'. + +2009-10-30 Robert Millan + + * util/i386/pc/grub-install.in: Remove hint that device.map should be + checked (grub-install doesn't currently rely on it). + +2009-10-29 Robert Millan + + Revert SVN r2660. + + * conf/common.rmk (script/sh/lexer.c_DEPENDENCIES): Moved from here ... + * conf/i386-coreboot.rmk (script/sh/lexer.c_DEPENDENCIES): ... to here. + * conf/i386-efi.rmk (script/sh/lexer.c_DEPENDENCIES): ... and here. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + +2009-10-28 Robert Millan + + * Makefile.in (TARGET_CPPFLAGS): Add `-nostdinc'. + +2009-10-28 Robert Millan + + * include/grub/misc.h: Stop checking for APPLE_CC. + +2009-10-28 Robert Millan + + * kern/i386/coreboot/init.c (grub_exit): Reimplement in a way that + doesn't cause an infinite call loop. + +2009-10-28 Felix Zielcke + + * commands/acpi.c (grub_cmd_acpi): Fix the out of memory error + strings. + +2009-10-26 Robert Millan + + * autogen.sh: Support addition of external modules via `GRUB_CONTRIB' + variable. + * Makefile.in: Likewise. + +2009-10-26 Robert Millan + + * gendistlist.sh: Simplify .svn check. Skip .bzr as well. + +2009-10-26 Robert Millan + + * Makefile.in (RMKFILES): Rewrite using $(wildcard). + +2009-10-26 Robert Millan + + * disk/scsi.c: Remove `' (not needed). + +2009-10-26 Robert Millan + + * gensymlist.sh.in (COMPILE_TIME_ASSERT): Copy macro declaration + from here ... + * include/grub/misc.h (COMPILE_TIME_ASSERT): ... to here. + +2009-10-26 Robert Millan + + * Makefile.in (docs/grub.info): Use make syntax to ignore errors + in $(MAKEINFO) invocation. This makes it clear in output that + errors are being ignored. + +2009-10-26 Robert Millan + + * conf/i386-coreboot.rmk (script/sh/lexer.c_DEPENDENCIES): Moved + from here ... + * conf/common.rmk (script/sh/lexer.c_DEPENDENCIES): ... to here. + * conf/i386-efi.rmk (script/sh/lexer.c_DEPENDENCIES): Remove. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + +2009-10-26 Colin Watson + + * util/grub-editenv.c (main): If only a command is given, use + DEFAULT_DIRECTORY "/" GRUB_ENVBLK_DEFCFG as a default file name. + (usage): FILENAME is now optional and has a default. + +2009-10-26 Colin Watson + + Improve grub-mkconfig performance when there are several menu + entries on a single filesystem. + + * util/grub.d/10_linux.in (linux_entry): Cache the output of + prepare_grub_to_access_device. + * util/grub.d/10_kfreebsd.in (kfreebsd_entry): Likewise. + * util/grub.d/30_os-prober.in: Likewise. + +2009-10-26 Robert Millan + + * util/grub.d/10_freebsd.in: Remove. + * util/grub.d/10_kfreebsd.in: New file (based on 10_linux.in). + * configure.ac: Set host_kernel=kfreebsd for FreeBSD and GNU/kFreeBSD. + +2009-10-26 Robert Millan + + * docs/grub.cfg: Fix example usage of *BSD loaders. + +2009-10-25 Robert Millan + + * util/i386/pc/grub-setup.c (setup): Add missing parameter to + grub_util_error() call. + +2009-10-25 Robert Millan + + * include/grub/fs.h [GRUB_UTIL] (struct grub_fs): Add + `reserved_first_sector' member. + * fs/ext2.c [GRUB_UTIL] (grub_ext2_fs): Initialize + `reserved_first_sector' to 1. + * fs/fat.c [GRUB_UTIL] (grub_fat_fs): Likewise. + * fs/ntfs.c [GRUB_UTIL] (grub_ntfs_fs): Likewise. + * fs/hfsplus.c [GRUB_UTIL] (grub_hfsplus_fs): Likewise. + * util/i386/pc/grub-setup.c (setup): Add safety check that probes for + filesystems which begin at first sector. + (options): New option --skip-fs-probe. + (main): Handle --skip-fs-probe and pass it to setup(). + +2009-10-25 Robert Millan + + * include/grub/misc.h: Fix wrong evaluation of APPLE_CC. + (memset): Fix function prototype. + +2009-10-25 Robert Millan +2009-10-25 Vasily Averin + + * fs/ext2.c (grub_ext2_iterate_dir): Avoid infinite loop when + `dirent.direntlen == 0'. + +2009-10-25 Robert Millan + + * fs/cpio.c [MODE_USTAR]: Initialize `tar' module instead of + `cpio'. + [! MODE_USTAR]: Initialize `cpio' module instead of `tar'. + +2009-10-25 Robert Millan + + * configure.ac: Check for `__ashldi3', `__ashrdi3', `__lshrdi3', + `__trampoline_setup' and `__ucmpdi2'. + * include/grub/powerpc/libgcc.h: Only export symbols for functions + that libgcc provides. + +2009-10-25 Robert Millan + + * include/grub/powerpc/libgcc.h (memset): Remove function prototype. + * include/grub/sparc64/libgcc.h (memset): Likewise. + * include/grub/misc.h (memset, memcmp): New function prototypes. + +2009-10-25 Robert Millan + + * fs/cpio.c [MODE_USTAR]: Finish `tar' module instead of + `cpio'. + [! MODE_USTAR]: Finish `cpio' module instead of `tar'. + +2009-10-25 Robert Millan + + Patch from Samuel Thibault + * docs/grub.cfg: Compensate for recent change in multiboot + loader (since 2009-08-14 it won't pass filename to payload). + * util/grub.d/10_hurd.in: Likewise. + +2009-10-21 Felix Zielcke + + * config.guess: Update to latest version from config git + repository. + * config.sub: Likewise. + +2009-10-20 Robert Millan + + Fix build on sparc64. + + * configure.ac: Perform checks for libgcc symbols before + adding `-nostdlib' to LDFLAGS. + +2009-10-16 Vladimir Serbinenko + + Let user specify OpenBSD root device. + + * loader/i386/bsd.c (openbsd_root): New variable. + (openbsd_opts): New option 'root'. + (OPENBSD_ROOT_ARG): New macro. + (grub_openbsd_boot): Use 'openbsd_root'. + (grub_cmd_openbsd): Fill 'openbsd_root'. + +2009-10-16 Robert Millan + + * NEWS: Misc adjustments. + +2009-10-16 Vladimir Serbinenko + + * NEWS: Mentioned XNU, ACPI, gptsync, password and parttool. + +2009-10-16 Robert Millan + + * configure.ac: Bump version to 1.97. + +2009-10-16 Colin Watson + + * configure.ac (TARGET_CFLAGS): Add -mno-mmx -mno-sse -mno-sse2 + -mno-3dnow on x86 architectures. Some toolchains enable these + features by default, but they rely on registers that aren't enabled + in GRUB. Thanks to Vladimir Serbinenko for the suggestion. + +2009-10-15 Robert Millan + + Make entry text a bit more readable. + + * util/grub.d/10_linux.in: Add `with' before `Linux'. + +2009-10-15 Vladimir Serbinenko + + * loader/i386/pc/xnu.c (grub_xnu_set_video): Fix loading splash image. + +2009-10-15 Vladimir Serbinenko + + * commands/xnu_uuid.c (grub_cmd_xnu_uuid): Remove duplicated bitwise + operations. + +2009-10-15 Vladimir Serbinenko + + * configure.ac: Add missing dollar. + +2009-10-15 Vladimir Serbinenko + + Revert 2009-06-10 Pavel Roskin + + * configure.ac: Put checks for __bswapsi2 and __bswapdi2. + * include/grub/powerpc/libgcc.h: Don't use weak attribute for all + exports. + * include/grub/sparc64/libgcc.h: Likewise. Use + preprocessor conditionals. + +2009-10-14 Robert Millan + + * conf/common.rmk (grub-dumpbios): Remove rule. + (sbin_SCRIPTS, CLEANFILES): Remove `grub-dumpbios'. + * util/grub-dumpbios.in: Remove file. + +2009-10-14 Robert Millan + + Refer to kernel of FreeBSD "kFreeBSD" to avoid confusion between + the Operating System (FreeBSD) and its kernel (kernel of FreeBSD). + + * loader/i386/bsd.c (grub_freebsd_boot): Read kernel environment + from "kFreeBSD" namespace (rather than "FreeBSD"). Update all + users. + + (GRUB_MOD_INIT (bsd)): Rename "freebsd" command to "kfreebsd", + "openbsd" to "kopenbsd", "netbsd" to "knetbsd", "freebsd_loadenv" + to "kfreebsd_loadenv", "freebsd_module" to "kfreebsd_module", + and "freebsd_module_elf" to "kfreebsd_module_elf". Update all + users. + +2009-10-12 Robert Millan + + * term/tparm.c: Switch to GPLv3. + +2009-10-09 Robert Millan + + * include/grub/i386/cpuid.h: Add header protection. + +2009-10-09 Robert Millan + + Fail gracefuly when attempting to load 64-bit kFreeBSD on IA32 CPU. + + * include/grub/i386/cpuid.h: New file. + * commands/i386/cpuid.c: Include `'. + (has_longmode): Rename to ... + (grub_cpuid_has_longmode): ... this. Update all users. Remove + `static' attribute. + * loader/i386/bsd.c: Include `'. + (grub_bsd_load_elf): Fail if load of 64-bit kernel was requested + on a CPU that doesn't implement AMD64 instruction set. + +2009-10-06 Colin Watson + + * Makefile.in (docs/stamp-vti): Depend on configure.ac as well, so + that version.texi is rebuilt on version number changes. + +2009-10-06 Colin Watson + + * Makefile.in: Don't set info_INFOS unless makeinfo was found. + Fixes bug #27602. + +2009-10-06 Colin Watson + + * util/i386/pc/grub-install.in: Source + ${libdir}/grub/grub-mkconfig_lib before option processing, in order + that the --grub-probe option will work. + * util/sparc64/ieee1275/grub-install.in: Likewise. + +2009-10-05 Robert Millan + + * configure.ac: Bump version to 1.97~beta4. + +2009-10-03 Robert Millan + + Resync grub-mkdevicemap in x86_64-efi. + + * conf/x86_64-efi.rmk (sbin_UTILITIES): Enable `grub-mkdevicemap'. + (grub_mkdevicemap_SOURCES): Add missing `util/deviceiter.c' and + `util/devicemap.c'. + +2009-10-01 Colin Watson + + * util/grub-editenv.c (create_envblk_file): Write new block with a + .new suffix and then rename it into place, to ensure atomic + creation. + +2009-09-28 Robert Millan + + Do not automatically install headers. + + * Makefile.in (include_DATA): Remove. Update all users. + +2009-09-26 Robert Millan + + * conf/common.rmk (pkglib_MODULES): Remove `lua.mod'. + (lua_mod_SOURCES, lua_mod_CFLAGS, lua_mod_LDFLAGS): Remove. + + * util/osdetect.lua: Remove. + * script/lua/lauxlib.c: Likewise. + * script/lua/ldebug.c: Likewise. + * script/lua/grub_main.c: Likewise. + * script/lua/lauxlib.h: Likewise. + * script/lua/ldebug.h: Likewise. + * script/lua/ltablib.c: Likewise. + * script/lua/liolib.c: Likewise. + * script/lua/lstrlib.c: Likewise. + * script/lua/lualib.h: Likewise. + * script/lua/ldo.c: Likewise. + * script/lua/ldump.c: Likewise. + * script/lua/ldo.h: Likewise. + * script/lua/loslib.c: Likewise. + * script/lua/lundump.c: Likewise. + * script/lua/grub_lib.c: Likewise. + * script/lua/ldblib.c: Likewise. + * script/lua/lundump.h: Likewise. + * script/lua/lmem.c: Likewise. + * script/lua/grub_lib.h: Likewise. + * script/lua/lmathlib.c: Likewise. + * script/lua/lstate.c: Likewise. + * script/lua/ltm.c: Likewise. + * script/lua/lvm.c: Likewise. + * script/lua/lmem.h: Likewise. + * script/lua/lstate.h: Likewise. + * script/lua/ltm.h: Likewise. + * script/lua/ltable.c: Likewise. + * script/lua/lvm.h: Likewise. + * script/lua/llex.c: Likewise. + * script/lua/lgc.c: Likewise. + * script/lua/grub_lua.h: Likewise. + * script/lua/loadlib.c: Likewise. + * script/lua/lfunc.c: Likewise. + * script/lua/lopcodes.c: Likewise. + * script/lua/lparser.c: Likewise. + * script/lua/ltable.h: Likewise. + * script/lua/llex.h: Likewise. + * script/lua/lgc.h: Likewise. + * script/lua/lfunc.h: Likewise. + * script/lua/lbaselib.c: Likewise. + * script/lua/lopcodes.h: Likewise. + * script/lua/lparser.h: Likewise. + * script/lua/lzio.c: Likewise. + * script/lua/linit.c: Likewise. + * script/lua/lobject.c: Likewise. + * script/lua/llimits.h: Likewise. + * script/lua/lstring.c: Likewise. + * script/lua/lzio.h: Likewise. + * script/lua/lapi.c: Likewise. + * script/lua/lcode.c: Likewise. + * script/lua/lua.h: Likewise. + * script/lua/lobject.h: Likewise. + * script/lua/lstring.h: Likewise. + * script/lua/lapi.h: Likewise. + * script/lua/lcode.h: Likewise. + * script/lua/luaconf.h: Likewise. + +2009-09-26 Colin Watson + + * docs/grub.texi (Command-line and menu entry commands): Document + date and echo commands. + +2009-09-24 Pavel Roskin + + * include/grub/kernel.h (struct grub_module_header): Remove + `grub_module_header_types'. Make `type' unsigned. Make `size' + 32-bit on all platforms. + * util/elf/grub-mkimage.c (load_modules): Treat `type' as an + 8-bit field. Use grub_host_to_target32() for `size'. + * util/i386/efi/grub-mkimage.c (make_mods_section): Likewise. + * util/i386/pc/grub-mkimage.c (generate_image): Likewise. + * util/sparc64/ieee1275/grub-mkimage.c (generate_image): Likewise. + +2009-09-24 Robert Millan + + Fix "lost keypress" bug in at_keyboard. + + * term/i386/pc/at_keyboard.c (grub_at_keyboard_checkkey): New function. + Checks for readyness of input buffer (without flushing it). + (grub_at_keyboard_term): Use grub_at_keyboard_checkkey() rather + than grub_at_keyboard_getkey_noblock() for `checkkey' struct member. + +2009-09-24 Robert Millan + + * util/i386/pc/grub-mkimage.c (generate_image): Enclose BIOS-specific + size check within GRUB_MACHINE_PCBIOS section. + +2009-09-24 Robert Millan + + * include/grub/i386/at_keyboard.h (KEYBOARD_ISREADY): Negate + return value. + * term/i386/pc/at_keyboard.c (grub_keyboard_getkey): Negate + KEYBOARD_ISREADY check. + (grub_at_keyboard_checkkey): Rename to ... + (grub_at_keyboard_getkey_noblock): ... this. Update all users. + Remove gratuitous cast. + +2009-09-23 Colin Watson + + * configure.ac: Call AC_PROG_MKDIR_P. + * Makefile.in (docs/stamp-vti): Create docs directory. Create + version.texi in $(builddir) rather than $(srcdir). + (docs/grub.info): Create docs directory. Prepend $(builddir)/docs + to makeinfo's @include search path. + +2009-09-23 Felix Zielcke + + * util/grub-mkconfig_lib.in (grub_file_is_not_garbage): Cope with `*.dpkg-*' + +2009-09-23 Felix Zielcke + + * util/grub-mkconfig_lib.in (grub_file_is_not_garbage): Add support + for `*.dpkg-new'. + +2009-09-21 Colin Watson + + Build info documentation. Some code borrowed from Automake. + + * configure.ac: Check for makeinfo. + * Makefile.in (MAKEINFO, INFOS, info_INFOS): New variables. + (MAINTAINER_CLEANFILES): Add $(INFOS), docs/stamp-vti, and + docs/version.texi. + (MOSTLYCLEANFILES): Add vti.tmp. + (docs/version.texi, docs/stamp-vti): Update automatically. + (docs/grub.info): Build info documentation. Use --force and ignore + errors for now. + (all-local): Add $(INFOS). + (install-local): Install info files. + (uninstall): Uninstall info files. + * docs/version.texi: Remove from revision control. This file is + automatically generated on build now. + * gendistlist.sh: Add `*.info'. + +2009-09-21 Felix Zielcke + + * kern/term.c: Fix indentation. + +2009-09-21 Felix Zielcke + + * util/hostdisk.c: Fix a comment. + +2009-09-20 Robert Millan + + Fix regression introduced in r2539. + + * term/usb_keyboard.c (USB_HID_DEVICE_TO_HOST): Change from 0x61 + to 0xA1. + +2009-09-19 Colin Watson + + * util/grub.d/30_os-prober.in: Don't throw away stderr from + os-prober. Under normal operation, it does not print anything to + stderr; if it does, we need to debug it, and throwing away stderr + makes that excessively difficult. + +2009-09-16 Vladimir Serbinenko + + * mmap/mmap.c (grub_cmd_badram): Fix off-by-one error. + +2009-09-16 Robert Millan + + * aclocal.m4 (AC_LANG_PROGRAM): New macro. Overrides stock + AC_LANG_PROGRAM from autoconf. + (grub_ASM_USCORE, grub_PROG_OBJCOPY_ABSOLUTE): Add missing + prototypes (fixes warning). + + * configure.ac: Add `-Werror' to TARGET_CFLAGS unless + `--disable-werror' was used. + +2009-09-16 Robert Millan + + * partmap/msdos.c (pc_partition_map_iterate): Fix possible use of + uninitialized `lastaddr'. + +2009-09-15 Vladimir Serbinenko + + * partmap/msdos.c (pc_partition_map_iterate): Detect and break loops. + +2009-09-14 Colin Watson + + * commands/test.c (get_fileinfo): Return immediately if + grub_fs_probe fails. + +2009-09-14 José Martínez + + * commands/acpi.c (grub_cmd_acpi): Fix loading ACPI tables from file. + +2009-09-14 Colin Watson + + * util/grub.d/30_os-prober.in: Cope with Windows 7 in os-prober + output. + +2009-09-13 Robert Millan + + * configure.ac: Remove --enable-grub-pe2elf. Only build + grub-pe2elf when needed by the build system itself. + * conf/common.rmk: Remove $(enable_grub_pe2elf) check. + +2009-09-12 Robert Millan + + * configure.ac: Bump version to 1.97~beta3. + * docs/version.texi: Likewise. + +2009-09-12 Robert Millan + + * video/i386/pc/vbe.c (grub_vbe_get_video_mode_info): Move packed + mode special handling (grub_vbe_bios_set_dac_palette_width() call) + from here ... + * loader/i386/linux.c [GRUB_MACHINE_PCBIOS] + (grub_linux_setup_video): ... to here (with some adjustments). + +2009-09-12 Robert Millan + + Fix memory corruption issue (spotted by Colin Watson). + + * kern/i386/pc/startup.S (grub_vbe_bios_getset_dac_palette): Fix bug + causing returned size to be stored in an incorrect memory location. + Fix use of uninitialized value when storing the returned size. + +2009-09-12 Yves Blusseau + + Change clean rules to properly remove files + + * genmk.rb: add new clean rules + * Makefile.in (clean): add the new targets + (mostlyclean): likewise + +2009-09-11 Colin Watson + + * include/grub/ntfs.h (struct grub_fshelp_node): Change `size' + to grub_uint64_t. + * fs/ntfs.c (init_file): Understand 64-bit sizes for + non-resident files. + +2009-09-11 Colin Watson + + * configure.ac: Don't look for help2man when cross-compiling. Fixes + part of bug #27349. + +2009-09-10 Felix Zielcke + + * util/grub-mkconfig.in: Make the created config mode 400 and + print a warning if it fails. + +2009-09-10 Robert Millan + + * util/grub.d/40_custom.in: Ask user to type custom entries below + comment, rather than below 'exec tail' line. + +2009-09-10 Colin Watson + + * util/grub.d/40_custom.in: Make sure that the explanatory text is + visible in grub.cfg. + +2009-09-10 Colin Watson + + * util/grub.d/40_custom.in: Make it a little clearer how to use this + file. + +2009-09-10 Felix Zielcke + + * docs/grub.cfg: Add an example menu entry for memtest86+. + +2009-09-09 Felix Zielcke + + * config.guess: Update to latest version from config git. + * config.sub: Likewise. + +2009-09-08 Colin Watson + + * script/sh/execute.c (grub_script_execute_cmdline): Set "?" in + unknown-command case. Fixes bug #27320. + +2009-09-08 Felix Zielcke + + * kern/rescue_parser.c (grub_rescue_parse_line): Only suggest to try + `help' if the command exists. + +2009-09-06 Robert Millan + + * INSTALL: Require GCC 4.1.3 or later. + +2009-09-06 Yves Blusseau + + * Makefile.in (RMKFILES): add i386-qemu.rmk + (MAINTAINER_CLEANFILES): add $(srcdir)/DISTLIST $(srcdir)/config.h.in + $(srcdir)/stamp-h.in + +2009-09-05 Robert Millan + + * util/grub-probe.c (probe): Comment out buggy codepath, which + was unexpectedly enabled by Colin Watson's 2009-09-02 fix. This + should be re-enabled after 1.97. + +2009-09-05 Felix Zielcke + + * gendistlist.sh: Add `grub-dumpdevtree' and `*.lua' to the list + find searches for. + +2009-09-04 Vladimir Serbinenko + + * loader/i386/xnu.c (grub_cpu_xnu_fill_devicetree): Remove + unnecessary calls to grub_error. + +2009-09-04 Colin Watson + + * NEWS: Mention `keystatus' and Unicode fonts. + +2009-09-04 Robert Millan + + * configure.ac: Bump version to 1.97~beta2. + * docs/version.texi: Likewise. + +2009-09-03 Colin Watson + + * configure.ac: By default, GCC 4.4 generates .eh_frame sections + containing unwind information in some cases where it previously did + not. Use -fno-dwarf2-cfi-asm if available to restore the old + behaviour. See http://patchwork.kernel.org/patch/8555/ for related + discussion. + +2009-09-02 Yves BLUSSEAU + + Embedding loadenv module into grub-emu + + * conf/i386-pc.rmk (grub_emu_SOURCES): add lib/envblk.c and + commands/loadenv.c + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Likewise + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise + +2009-09-03 Magnus Granberg + + * aclocal.m4: Add grub_CHECK_PIE. It check if the compiler + include -fPIE in the default specs. + * configure.ac: Check if pie_possible is yes and add -fno-PIE + to TARGET_CFLAGS. + +2009-09-03 Felix Zielcke + + * INSTALL: Note that GNU Bison 2.3 or later is required. + +2009-09-03 Colin Watson + + * kern/i386/pc/startup.S: Fix typo. + +2009-09-02 Vladimir Serbinenko + + * efiemu/loadcore.c (SUFFIX (grub_efiemu_loadcore_load)): Fix style + according to GCS. + +2009-09-02 Colin Watson + + * docs/grub.texi (Naming convention): Describe one-based partition + numbering. + (Device syntax): Likewise. + (File name syntax): Likewise. + (Block list syntax): Likewise. + (Making a GRUB bootable CD-ROM): Talk about grub.cfg rather than + menu.lst. + (File name syntax): Likewise. + (Command-line and menu entry commands): Document acpi, blocklist, + crc, export, insmod, keystatus, ls, set, and unset commands. + +2009-09-02 Colin Watson + + * commands/keystatus.c (GRUB_MOD_INIT (keystatus)): Adjust summary + to avoid implying that only one of --shift, --ctrl, or --alt may be + used. + +2009-09-02 Colin Watson + + * util/grub-probe.c (probe): Test st.st_mode using S_ISREG macro + rather than comparing against S_IFREG, which will almost never work. + +2009-09-01 Vladimir Serbinenko + + * commands/loadenv.c (check_blocklists): Fix off-by-one error. + (write_blocklists): Likewise. + +2009-09-01 Colin Watson + + * script/lua/grub_lua.h (fputs): Supply a format string as the first + argument to grub_printf. + +2009-09-01 Felix Zielcke + + * genmk.rb: Add quotes around $(TARGET_OBJ2ELF) to cope with + non GNU test. + +2009-08-30 Vladimir Serbinenko + + * kern/file.c (grub_file_read): Spelling fix + +2009-08-30 Vladimir Serbinenko + + * loader/i386/bsdXX.c (SUFFIX (grub_freebsd_load_elfmodule)): Fix + loading of headers in some cases. + +2009-08-30 Robert Millan + + * configure.ac: Bump version to 1.97~beta1. + * docs/version.texi: Likewise. + +2009-08-29 Vladimir Serbinenko + + * include/grub/i386/xnu.h: Add license header. + include grub/err.h explicitly. + +2009-08-29 Robert Millan + + * util/grub.d/10_freebsd.in: Detect `ufs1' and `ufs2' and map them + to `ufs' in the vfs.root.mountfrom kernel parameter. + +2009-08-29 Robert Millan + + * term/i386/pc/serial.c: Include `'. + + [GRUB_MACHINE_PCBIOS] (serial_hw_io_addr): Macroify initialization + value (0x0400 -> GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR). + + [! GRUB_MACHINE_PCBIOS] (GRUB_SERIAL_PORT_NUM): Calculate using + `ARRAY_SIZE' macro. + +2009-08-28 Vladimir Serbinenko + + * kern/file.c (grub_file_read): Check offset. + * fs/hfs.c (grub_hfs_read_file): Remove unnecessary offset check. + * fs/jfs.c (grub_jfs_read_file): Likewise. + * fs/ntfs.c (grub_ntfs_read): Likewise. + * fs/reiserfs.c (grub_reiserfs_read): Likewise. + * fs/minix.c (grub_minix_read_file): Correct offset check. + * fs/ufs.c (grub_ufs_read_file): Likewise. + +2009-08-28 Colin Watson + + * term/i386/pc/console.c (bios_data_area): Cast + GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR explicitly. + +2009-08-28 Vladimir Serbinenko + + 1-bit optimised blitters. + + * include/grub/fbblit.h (grub_video_fbblit_replace_32bit_1bit): New + prototype. + (grub_video_fbblit_replace_24bit_1bit): Likewise. + (grub_video_fbblit_replace_16bit_1bit): Likewise. + (grub_video_fbblit_replace_8bit_1bit): Likewise. + (grub_video_fbblit_blend_XXXA8888_1bit): Likewise. + (grub_video_fbblit_blend_XXX888_1bit): Likewise. + (grub_video_fbblit_blend_XXX565_1bit): Likewise. + * video/fb/fbblit.c (grub_video_fbblit_replace_32bit_1bit): New + function. + (grub_video_fbblit_replace_24bit_1bit): Likewise. + (grub_video_fbblit_replace_16bit_1bit): Likewise. + (grub_video_fbblit_replace_8bit_1bit): Likewise. + (grub_video_fbblit_blend_XXXA8888_1bit): Likewise. + (grub_video_fbblit_blend_XXX888_1bit): Likewise. + (grub_video_fbblit_blend_XXX565_1bit): Likewise. + * video/fb/video_fb.c (common_blitter): Use 1-bit optimised blitters + when possible. + * video/video.c (grub_video_get_blit_format): Return + GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED if bpp = 1. + +2009-08-28 Colin Watson + + * normal/cmdline.c (grub_cmdline_get): Supply a format string as + the first argument to grub_printf. + +2009-08-28 Colin Watson +2009-08-28 Robert Millan + + Add `getkeystatus' terminal method. Add a new `keystatus' command + to query it. + + * include/grub/term.h (GRUB_TERM_STATUS_SHIFT, + GRUB_TERM_STATUS_CTRL, GRUB_TERM_STATUS_ALT): Definitions for + modifier key bitmasks. + (struct grub_term_input): Add `getkeystatus' member. + (grub_getkeystatus): Add prototype. + * kern/term.c (grub_getkeystatus): New function. + + * include/grub/i386/pc/memory.h + (GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR): New macro. + (struct grub_machine_bios_data_area): Define necessary parts of BIOS + Data Area layout. + * term/i386/pc/console.c (grub_console_getkeystatus): New function. + (grub_console_term_input): Set `getkeystatus' member. + * term/usb_keyboard.c (grub_usb_hid): Macroify HID protocol + constants. + (grub_usb_keyboard_getreport): Likewise. + (grub_usb_keyboard_checkkey): Likewise. + (grub_usb_keyboard_getkeystatus): New function. + (grub_usb_keyboard_term): Set `getkeystatus' member. + + * commands/keystatus.c: New file. + * conf/common.rmk (pkglib_MODULES): Add keystatus.mod. + (keystatus_mod_SOURCES): New variable. + (keystatus_mod_CFLAGS): Likewise. + (keystatus_mod_LDFLAGS): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Add + commands/keystatus.c. + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + +2009-08-28 Vladimir Serbinenko + + Split befs.mod and afs.mod into *_be.mod and *.mod + + * conf/common.rmk (grub_probe_SOURCES): Add afs_be.c and befs_be.c. + (grub_fstest_SOURCES): Likewise. + (pkglib_MODULES): Add afs_be.mod and befs_be.mod. + (afs_be_mod_SOURCES): New variable. + (afs_be_mod_CFLAGS): Likewise. + (afs_be_mod_LDFLAGS): Likewise. + (befs_be_mod_SOURCES): Likewise. + (befs_be_mod_CFLAGS): Likewise. + (befs_be_mod_LDFLAGS): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Add afs_be.c and befs_be.c. + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_setup_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + * fs/afs_be.c: New file. + * fs/befs_be.c: New file. + * fs/afs.c (GRUB_AFS_FSNAME_SUFFIX): New definition. + (GRUB_AFS_FSNAME): Use GRUB_AFS_FSNAME_SUFFIX. + (U16): Replaced with ... + (grub_afs_to_cpu16): ...this. All users updated. + (U32): Replaced with ... + (grub_afs_to_cpu32): ...this. All users updated. + (U64): Replaced with ... + (grub_afs_to_cpu64): ...this. All users updated. + (GRUB_AFS_BO_LITTLE_ENDIAN): Remove. + (GRUB_AFS_BO_BIG_ENDIAN): Likewise. + (grub_afs_validate_sblock): Check only one endianness. + (GRUB_MOD_INIT (befs)) [MODE_BIGENDIAN && MODE_BFS]: Rename to .. + (GRUB_MOD_INIT (befs_be)) [MODE_BIGENDIAN && MODE_BFS]: ... this. + (GRUB_MOD_INIT (afs)) [MODE_BIGENDIAN && !MODE_BFS]: Rename to .. + (GRUB_MOD_INIT (afs_be)) [MODE_BIGENDIAN && !MODE_BFS]: ... this. + (GRUB_MOD_FINI (befs)) [MODE_BIGENDIAN && MODE_BFS]: Rename to .. + (GRUB_MOD_FINI (befs_be)) [MODE_BIGENDIAN && MODE_BFS]: ... this. + (GRUB_MOD_FINI (afs)) [MODE_BIGENDIAN && !MODE_BFS]: Rename to .. + (GRUB_MOD_FINI (afs_be)) [MODE_BIGENDIAN && !MODE_BFS]: ... this. + +2009-08-26 Bean + + * fs/xfs.c (GRUB_XFS_INO_INOINAG): Replace 1L with 1LL to support + 64-bit number. + (GRUB_XFS_FSB_TO_BLOCK): Likewise. + (grub_xfs_inode_block): Change return type to grub_uint64_t. + (grub_xfs_read_inode): Change type of block to grub_uint64_t. + +2009-08-25 Vladimir Serbinenko + + NetBSD memory map support. + + * include/grub/i386/bsd.h (NETBSD_BTINFO_MEMMAP): New definition. + (grub_netbsd_btinfo_mmap_header): New structure. + (grub_netbsd_btinfo_mmap_entry): Likewise. + * loader/i386/bsd.c (grub_netbsd_boot): Pass memory map. + +2009-08-25 Vladimir Serbinenko + + Enable bsd.mod on coreboot. + + * conf/i386-coreboot.rmk (pkglib_MODULES): Add bsd.mod. + (bsd_mod_SOURCES): New variable. + (bsd_mod_CFLAGS): Likewise. + (bsd_mod_LDFLAGS): Likewise. + (bsd_mod_ASFLAGS): Likewise. + * loader/i386/bsd.c [!GRUB_MACHINE_PCBIOS]: Fix includes. + (grub_bsd_get_device) [!GRUB_MACHINE_PCBIOS]: Set *biosdev to 0xff. + +2009-08-25 Vladimir Serbinenko + + Cleanup NetBSD root support. + + * loader/i386/bsd.c (grub_netbsd_boot): Remove call to + grub_bsd_get_device. + Fix typo. + +2009-08-25 Felix Zielcke + + * util/grub.d/00_header.in: Move check for the video backend of + gfxterm from here ... + * util/grub-mkconfig.in: ... to here. Enable gfxterm if there's + a suitable video backend. + +2009-08-25 Vladimir Serbinenko + + Fix breakage in grub-setup. + + * util/i386/pc/grub-setup.c (setup): Use "part_msdos" instead of + "msdos_partition_map". + +2009-08-25 Vladimir Serbinenko + + Fix breakage in normal/auth.c. + + * normal/auth.c (grub_iswordseparator): New function. + +2009-08-25 Vladimir Serbinenko + + Authentication support. + + * commands/password.c: New file. + * conf/common.rmk (pkglib_MODULES): Add password.mod. + (password_mod_SOURCES): New variable. + (password_mod_CFLAGS): Likewise. + (password_mod_LDFLAGS): Likewise. + (normal_mod_SOURCES): Add normal/auth.c. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Add commands/password.c and + normal/auth.c. + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + * include/grub/auth.h: New file. + * include/grub/err.h (grub_err_t): New enum value + GRUB_ERR_ACCESS_DENIED. + * include/grub/menu.h (grub_menu_entry): New fields 'restricted' and + 'users'. + * include/grub/normal.h (grub_cmdline_get): New argument 'history'. + * normal/cmdline.c (grub_cmdline_get): New argument 'history'. All + users updated. + * normal/auth.c: New file. + * normal/main.c (grub_normal_add_menu_entry): Handle --users option. + (grub_cmdline_run): Don't allow to go to command line without + authentication. + * normal/menu.c (grub_menu_execute_entry): Handle restricted entries. + * normal/menu_entry.c (grub_menu_entry_run): Don't allow editing + menuentry without superuser rights. + * normal/menu_viewer.c (grub_menu_viewer_show_menu): Don't exit if + user isn't a superuser. + +2009-08-24 Vladimir Serbinenko + + Save space by inlining misc.c functions. + + * kern/misc.c (grub_iswordseparator): Made static. + * kern/misc.c (grub_strcat): Moved from here ... + * include/grub/misc.h (grub_strcat): ... here. Inlined. + * kern/misc.c (grub_strncat): Moved from here ... + * include/grub/misc.h (grub_strncat): ... here. Inlined. + * kern/misc.c (grub_strcasecmp): Moved from here ... + * include/grub/misc.h (grub_strcasecmp): ... here. Inlined. + * kern/misc.c (grub_strncasecmp): Moved from here ... + * include/grub/misc.h (grub_strncasecmp): ... here. Inlined. + * kern/misc.c (grub_isalpha): Moved from here ... + * include/grub/misc.h (grub_isalpha): ... here. Inlined. + * kern/misc.c (grub_isdigit): Moved from here ... + * include/grub/misc.h (grub_isdigit): ... here. Inlined. + * kern/misc.c (grub_isgraph): Moved from here ... + * include/grub/misc.h (grub_isgraph): ... here. Inlined. + * kern/misc.c (grub_tolower): Moved from here ... + * include/grub/misc.h (grub_tolower): ... here. Inlined. + +2009-08-24 Vladimir Serbinenko + + * script/sh/function.c (grub_script_function_find): Cut error message + not to flood terminal. + * script/sh/lexer.c (grub_script_yylex): Remove command line length + limit. + * script/sh/script.c (grub_script_arg_add): Duplicate string. + +2009-08-24 Colin Watson + + * term/usb_keyboard.c (grub_usb_keyboard_getreport): Make + `report' grub_uint8_t *. + (grub_usb_keyboard_checkkey): Make `data' elements grub_uint8_t. + Use a 50-millisecond timeout rather than just repeating + grub_usb_keyboard_getreport 50 times. + (grub_usb_keyboard_getkey): Make `data' elements grub_uint8_t. + +2009-08-24 Vladimir Serbinenko + + Rename *_partition_map to part_* + + * partmap/acorn.c (grub_acorn_partition_map): Set name to 'part_acorn'. + * partmap/amiga.c (grub_amiga_partition_map): Set name to 'part_amiga'. + * partmap/apple.c (grub_apple_partition_map): Set name to 'part_apple'. + * partmap/gpt.c (grub_gpt_partition_map): Set name to 'part_gpt'. + All users updated. + * partmap/msdos.c (grub_msdos_partition_map): Set name to 'part_msdos'. + All users updated. + * partmap/sun.c (grub_sun_partition_map): Set name to 'part_sun'. + * util/grub-probe.c (probe_partmap): Don't transform partition name + to get module name. + +2009-08-24 Vladimir Serbinenko + + Fix OpenBSD and NetBSD support. + + * include/grub/i386/bsd.h (GRUB_BSD_TEMP_BUFFER): Change to resolve + memory address conflict. + (OPENBSD_MMAP_ACPI): New definition. + (OPENBSD_MMAP_NVS): Likewise. + * loader/i386/bsd.c (grub_openbsd_boot): Support OPENBSD_MMAP_ACPI + and OPENBSD_MMAP_NVS. + Add memory map terminator + Explicit cast when calling grub_unix_real_boot. + (grub_netbsd_boot): Explicit cast when calling grub_unix_real_boot. + +2009-08-24 Vladimir Serbinenko + + Let user specify NetBSD root device. + + * loader/i386/bsd.c (netbsd_root): New variable. + (netbsd_opts): New option 'root'. + (NETBSD_ROOT_ARG): New macro. + (grub_netbsd_boot): Use 'netbsd_root'. + (grub_bsd_unload): Free 'netbsd_root'. + (grub_cmd_netbsd): Fill 'netbsd_root'. + +2009-08-24 Vladimir Serbinenko + + Support for 64-bit NetBSD. + + * loader/i386/bsd.c (grub_bsd_load_elf): Apply correct mask to entry + point when booting non-FreeBSD. + +2009-08-24 Vladimir Serbinenko + + Support --no-smp and --no-acpi for NetBSD. + + * include/grub/i386/bsd.h (NETBSD_AB_NOSMP): New definition. + (NETBSD_AB_NOACPI): Likewise. + * loader/i386/bsd.c (netbsd_opts): New entries no-smp and no-acpi. + (netbsd_flags): Add NETBSD_AB_NOSMP, NETBSD_AB_NOACPI. + +2009-08-23 Vladimir Serbinenko + + * fs/hfsplus.c (grub_hfsplus_mount): Don't ignore grub_hfsplus_read_file + errors. + (grub_hfsplus_btree_iterate_node): Don't ignore grub_hfsplus_read_file + errors. Call grub_error when needed. + +2009-08-23 Vladimir Serbinenko + + * commands/search.c (search_fs): Try searching without autoload first. + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Load + filesystem module explicitly for faster booting. + +2009-08-23 Colin Watson + + * util/grub-mkconfig.in: Export GRUB_DISABLE_OS_PROBER. + +2009-08-23 Colin Watson + + * util/grub.d/30_os-prober.in: Disable os-prober if + `GRUB_DISABLE_OS_PROBER' was set to true. + +2009-08-23 Robert Millan + + * partmap/pc.c: Rename to ... + * partmap/msdos.c: ... this. Update all users. + (grub_pc_partition_map): Rename to ... + (grub_msdos_partition_map): ... this. Update all users. + + * parttool/pcpart.c: Rename to ... + * parttool/msdospart.c: ... this. Update all users. + + * include/grub/pc_partition.h: Rename to ... + * include/grub/msdos_partition.h: ... this. Update all users. + (grub_pc_partition_bsd_entry): Rename to ... + (grub_msdos_partition_bsd_entry): ... this. Update all users. + (grub_pc_partition_disk_label): Rename to ... + (grub_msdos_partition_disk_label): ... this. Update all users. + (grub_pc_partition_entry): Rename to ... + (grub_msdos_partition_entry): ... this. Update all users. + (grub_pc_partition_mbr): Rename to ... + (grub_msdos_partition_mbr): ... this. Update all users. + (grub_pc_partition): Rename to ... + (grub_msdos_partition): ... this. Update all users. + (grub_pc_partition_is_empty): Rename to ... + (grub_msdos_partition_is_empty): ... this. Update all users. + (grub_pc_partition_is_extended): Rename to ... + (grub_msdos_partition_is_extended): ... this. Update all users. + (grub_pc_partition_is_bsd): Rename to ... + (grub_msdos_partition_is_bsd): ... this. Update all users. + + * conf/common.rmk (amiga_mod_SOURCES, amiga_mod_CFLAGS) + (amiga_mod_LDFLAGS, apple_mod_SOURCES, apple_mod_CFLAGS) + (apple_mod_LDFLAGS, msdos_mod_SOURCES, msdos_mod_CFLAGS) + (msdos_mod_LDFLAGS, sun_mod_SOURCES, sun_mod_CFLAGS) + (sun_mod_LDFLAGS, acorn_mod_SOURCES, acorn_mod_CFLAGS) + (acorn_mod_LDFLAGS, gpt_mod_SOURCES, gpt_mod_CFLAGS) + (gpt_mod_LDFLAGS): Rename to ... + (part_amiga_mod_SOURCES, part_amiga_mod_CFLAGS, part_amiga_mod_LDFLAGS) + (part_apple_mod_SOURCES, part_apple_mod_CFLAGS, part_apple_mod_LDFLAGS) + (part_msdos_mod_SOURCES, part_msdos_mod_CFLAGS, part_msdos_mod_LDFLAGS) + (part_sun_mod_SOURCES, part_sun_mod_CFLAGS, part_sun_mod_LDFLAGS) + (part_acorn_mod_SOURCES, part_acorn_mod_CFLAGS, part_acorn_mod_LDFLAGS) + (part_gpt_mod_SOURCES, part_gpt_mod_CFLAGS) + (part_gpt_mod_LDFLAGS): ... this. + (pkglib_MODULES): Prefix partition modules with `part_'. Rename + `pcpart.mod' to `msdospart.mod'. + (pcpart_mod_SOURCES, pcpart_mod_CFLAGS, pcpart_mod_LDFLAGS): Rename + to ... + (msdospart_mod_SOURCES, msdospart_mod_CFLAGS) + (msdospart_mod_LDFLAGS): ... this. + +2009-08-23 Vladimir Serbinenko + + * loader/i386/bsd.c (freebsd_opts): Rewritten to use extcmd. + (openbsd_opts): Likewise. + (netbsd_opts): Likewise. + (freebsd_flags): Added 0 terminator. + (openbsd_flags): Likewise. + (netbsd_flags): Likewise. + (grub_bsd_parse_flags): Rewritten to use extcmd. All users updated. + (grub_cmd_freebsd): Transformed into extended command. + (grub_cmd_openbsd): Likewise. + (grub_cmd_netbsd): Likewise. + (cmd_freebsd): Changed type to grub_extcmd_t. + (cmd_openbsd): Likewise. + (cmd_netbsd): Likewise. + (GRUB_MOD_INIT (bsd)): Register grub_cmd_freebsd, grub_cmd_netbsd and + grub_cmd_openbsd as extended commands. + (GRUB_MOD_FINI (bsd)): Use grub_unregister_extcmd for cmd_freebsd, + cmd_netbsd and cmd_openbsd + +2009-08-22 Vladimir Serbinenko + + * commands/xnu_uuid.c (transform): Use grub_memcpy instead of memcpy. + +2009-08-21 Pavel Roskin + + * Makefile.in (install-local): When checking if a file is in the + build directory, use "test -e" to detect symlinks. + + * Makefile.in (install-local): Remove all files in + $(DESTDIR)$(pkglibdir) before installing new files there. + +2009-08-18 Felix Zielcke + + * util/powerpc/ieee1275/grub-mkrescue.in (grub_mkimage): Use + grub-mkelfimage. + +2009-08-18 Felix Zielcke + + * util/grub-mkconfig.in: Don't use gfxterm by default if not + explicitly specified by the user. + +2009-08-18 Pavel Roskin + + * include/grub/fbfill.h (struct grub_video_fbrender_target): Use + grub_uint8_t pointer for data. + * include/grub/fbutil.h (struct grub_video_fbblit_info): + Likewise. + * video/fb/fbutil.c: Remove unnecessary casts. + +2009-08-17 Michal Suchanek + + VBE cleanup. + + * video/i386/pc/vbe.c (vbe_mode_in_use): Removed (duplicate). + (grub_vbe_set_video_mode): Save active mode info + only after setting the mode. + (grub_video_vbe_setup): Call 'grub_vbe_set_video_mode' with NULL as + second argument. + +2009-08-17 Michal Suchanek + + Rename variables for clarity. + + * video/i386/pc/vbe.c (active_mode_info): Renamed to ... + (active_vbe_mode_info): ... this. All users updated. + (framebuffer): Rename 'active_mode' to 'active_vbe_mode'. + All users updated. + (initial_mode): Rename to ... + (initial_vbe_mode): ... this. All users updated. + (mode_in_use): Rename to .. + (vbe_mode_in_use): ... this. All users updated. + (mode_list): Rename to .. + (vbe_mode_list): ... this. All users updated. + (grub_vbe_set_video_mode): Rename 'mode' to 'vbe_mode', 'mode_info' to + 'vbe_mode_info' and 'old_mode' to 'old_vbe_mode'. + (grub_video_vbe_init): Rename 'rm_mode_list' to 'rm_vbe_mode_list' and + 'mode_list_size' to 'vbe_mode_list_size'. + (grub_video_vbe_setup): Rename 'mode_info' to 'vbe_mode_info', + 'best_mode_info' to 'best_vbe_mode_info' and + 'best_mode' to 'best_vbe_mode' + +2009-08-17 Michal Suchanek + + Remove duplicate grub_video_fb_get_video_ptr. + + * include/grub/fbutil.h (get_data_ptr): Rename to ... + (grub_video_fb_get_video_ptr): ... this. + * include/grub/video_fb.h (grub_video_fb_get_video_ptr): Removed. + * video/fb/fbutil.c: Add comment about addressing. + (get_data_ptr): Rename to ... + (grub_video_fb_get_video_ptr): ... this. All users updated. + * video/fb/video_fb.c (grub_video_fb_get_video_ptr): Remove. + +2009-08-17 Robert Millan + + * fs/fat.c (grub_fat_read_data): Remove `#if 0' braces around the + grub_dprintf() that was just added. + +2009-08-17 Robert Millan + + * loader/i386/linux.c (GRUB_ASSUME_LINUX_HAS_FB_SUPPORT) + (DEFAULT_VIDEO_MODE): Remove macros. + (grub_linux_boot): Remove assumption that Linux has FB support, + and use "text" as default video mode. + +2009-08-15 Vladimir Serbinenko + + * fs/affs.c (grub_affs_read_symlink): Change leftover grub_printf into + grub_dprintf. + * fs/fat.c (grub_fat_read_data): Likewise. + +2009-08-14 Vladimir Serbinenko + + * loader/i386/multiboot.c (grub_multiboot): Don't pass filename to + payload. + (grub_module): Likewise. + +2009-08-14 Vladimir Serbinenko + + * loader/i386/multiboot.c (grub_multiboot_unload): Don't free mbi and + mbi->cmdline but free playground. + +2009-08-14 Vladimir Serbinenko + + Handle group offset on UFS1. + + * fs/ufs.c (grub_ufs_sblock): New field 'cylg_mask'. + (grub_ufs_read_inode) [!MODE_UFS2]: handle cylg_offset and cylg_mask. + +2009-08-14 Vladimir Serbinenko + + Split ufs.mod into ufs1.mod and ufs2.mod. + + * conf/common.rmk (grub_probe_SOURCES): Add fs/ufs2.c. + (grub_fstest_SOURCES): Likewise. + (pkglib_MODULES): Remove ufs.mod. Add ufs1.mod and ufs2.mod. + (ufs_mod_SOURCES): Remove. + (ufs_mod_CFLAGS): Likewise. + (ufs_mod_LDFLAGS): Likewise. + (ufs1_mod_SOURCES): New variable. + (ufs1_mod_CFLAGS): Likewise. + (ufs1_mod_LDFLAGS): Likewise. + (ufs2_mod_SOURCES): New variable. + (ufs2_mod_CFLAGS): Likewise. + (ufs2_mod_LDFLAGS): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Add fs/ufs2.c. + * conf/i386-efi.rmk (util/i386/efi/grub-mkimage.c_DEPENDENCIES): + Likewise. + (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + (grub_setup_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64.rmk (grub_emu_SOURCES): Likewise. + (grub_setup_SOURCES): Likewise. + * conf/x86_64-efi.rmk (util/i386/efi/grub-mkimage.c_DEPENDENCIES): + Likewise. + * fs/ufs2.c: New file. + * fs/ufs.c: Separate UFS1 from UFS2 by using preprocessor. + +2009-08-14 Vladimir Serbinenko + + Framebuffer split. + + * commands/i386/pc/vbetest.c (grub_cmd_vbetest): Restore video + subsystem at the end. + * conf/common.rmk (pkglib_MODULES): Add video_fb.mod. + (video_fb_mod_SOURCES): New variable. + (video_fb_mod_CFLAGS): Likewise. + (video_fb_mod_LDFLAGS): Likewise. + * conf/i386-pc.rmk (vbe_mod_SOURCES): Remove video/i386/pc/vbeblit.c, + video/i386/pc/vbefill.c and video/i386/pc/vbeutil.c. + * video/i386/pc/vbeblit.c: Moved from here ... + * video/fb/fbblit.c: ..here. Replaced 'vbe' with 'fb'. + * video/i386/pc/vbefill.c: Moved from here ... + * video/fb/fbfill.c: ..here. Replaced 'vbe' with 'fb'. + * video/i386/pc/vbeutil.c: Moved from here ... + * video/fb/fbutil.c: ..here. Replaced 'vbe' with 'fb'. + * include/grub/i386/pc/vbeblit.h: Moved from here ... + * include/grub/fbblit.h: ... here. Replaced 'vbe' with 'fb'. + * include/grub/i386/pc/vbefill.h: Moved from here ... + * include/grub/fbfill.h: ... here. Replaced 'vbe' with 'fb'. + * include/grub/i386/pc/vbeutil.h: Moved from here ... + * include/grub/fbutil.h: ... here. Replaced 'vbe' with 'fb'. + * include/grub/i386/pc/vbe.h: Moved framebuffer part ... + * include/grub/video_fb.h: ... here. Replaced 'vbe' with 'fb'. + * include/grub/video.h (GRUB_VIDEO_RENDER_TARGET_FRONT_BUFFER): Removed. + (GRUB_VIDEO_RENDER_TARGET_BACK_BUFFER): Likewise. + (grub_video_adapter): Added 'get_info_and_fini'. + (grub_video_get_info_and_fini): New prototype. + (grub_video_set_mode): make modestring const char *. + * loader/i386/linux.c (grub_linux_setup_video): Use + grub_video_get_info_and_fini. + (grub_linux_boot): Move modesetting just before booting. + * loader/i386/pc/xnu.c (grub_xnu_set_video): Use + grub_video_get_info_and_fini. + * video/i386/pc/vbe.c: Moved framebuffer part ... + * video/fb/video_fb.c: ... here. Replaced 'vbe' with 'fb'. + * video/i386/pc/vbe.c (grub_vbe_set_video_mode): Use + grub_video_fbstd_colors and grub_video_fb_set_palette. + (grub_video_vbe_init): Clear 'framebuffer' variable and use + grub_video_fb_init. + (grub_video_vbe_fini): Use grub_video_fb_fini. + (grub_video_vbe_setup): Use framebuffer.render_target instead of + render_target and use grub_video_fb_set_active_render_target and + grub_video_fb_set_palette. + (grub_video_vbe_set_palette): Use grub_video_fb_set_palette. + (grub_video_vbe_set_viewport): Use grub_video_fb_set_viewport. + (grub_video_vbe_adapter): Use framebuffer. + * video/video.c (grub_video_get_info_and_fini): New function. + (grub_video_set_mode): Make modestring const char *. + (GRUB_MOD_INIT(video_video)): Don't set variables to 0 since these + values are already initialised. + +2009-08-14 Pavel Roskin + + * boot/i386/pc/cdboot.S: Use LOCAL for local labels. Eliminate + ABS and APPLE_CC. + * boot/i386/pc/diskboot.S: Likewise. + * boot/i386/pc/lnxboot.S: Likewise. Hardcode the number of code + sectors allow compilation on MacOSX. + * conf/i386-pc.rmk: Enable unconditional compilation of + lnxboot.img. + +2009-08-13 Colin Watson + + * util/grub-mkconfig.in: Export GRUB_HIDDEN_TIMEOUT. + * util/grub.d/00_header.in: Enter interruptible sleep if + GRUB_HIDDEN_TIMEOUT is set. + +2009-08-13 Yves Blusseau + + * include/grub/symbol.h: Add the LOCAL macro. + * boot/i386/pc/boot.S: Use the LOCAL macro for all labels + starting with "L_". + +2009-08-13 Pavel Roskin + + * boot/i386/pc/boot.S: Remove ABS macro, it's not required by + any modern compilers we support. + + * boot/i386/pc/boot.S: Remove all code dependent on APPLE_CC. + Use local labels starting with "L_" so that Apple assembler + knows they are local. + +2009-08-10 Robert Millan + + * include/grub/i386/bsd.h (KERNEL_TYPE_NONE, KERNEL_TYPE_FREEBSD) + (KERNEL_TYPE_OPENBSD, KERNEL_TYPE_NETBSD): Convert to ... + (bsd_kernel_types): ... this enum. + + * loader/i386/bsd.c (grub_cmd_freebsd_loadenv, grub_cmd_freebsd_module) + (grub_cmd_freebsd_module_elf): Abort with "You need to load the + kernel first." when `kernel_type' is set to KERNEL_TYPE_NONE. + + (grub_bsd_load_aout, grub_bsd_load, grub_cmd_freebsd_loadenv) + (grub_cmd_freebsd_module, grub_cmd_freebsd_module_elf) + (GRUB_MOD_INIT (bsd)): Fix capitalization in a few error + messages. + +2009-08-08 Robert Millan + + * util/grub-dumpdevtree: Moved from here ... + * util/i386/efi/grub-dumpdevtree: ... to here. + (hexify): New function. Converts a string to its hex version. + Generate hex versions of "efi" and "device-properties" by calling + hexify() on the ASCII strings rather than by hardcoding numbers. + +2009-08-08 Robert Millan + + * fs/jfs.c: Update copyright year. + +2009-08-08 Felix Zielcke + + * util/grub.d/00_header.in: Fix a comment. + * util/grub.d/10_linux.in: Likewise. + * util/grub.d/10_windows.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + +2009-08-08 Felix Zielcke + + * util/grub-mkconfig.in: Allow the user to specify the used font + with GRUB_FONT. + +2009-08-08 Pavel Roskin + + * include/grub/powerpc/libgcc.h: Export __ashrdi3() if + available, xfs.mod needs it now. + + * util/grub-mkconfig_lib.in (version_test_numeric): Don't use + the "g" modifier in sed when the intention is to strip something + once. This fixes comparison of kernels with multiple dashes. + + * util/grub-mkconfig.in: Define datarootdir, datadir may depend + on it. Add missing space before closing bracket. Fix + misleading formatting. + +2009-08-07 Robert Millan + + * docs/grub.texi: Major overhaul. Remove all sections that are + specific to GRUB Legacy, or mostly composed of Legacy-specific + information. + +2009-08-07 Robert Millan + + * docs/version.texi: New file. Provides version information for + grub.texi. + +2009-08-07 Robert Millan + + * docs/grub.texi: Update CVS information to SVN. + Replace outdated "GRUB 2 will include" phrase with "GRUB 2 includes". + +2009-08-07 Felix Zielcke + + * util/grub-mkconfig.in: Remove a wrong `fi'. + +2009-08-07 Felix Zielcke + + * fs/uuid.c (grub_jfs_superblock): New fields unused2 and uuid. + (grub_jfs_uuid): New function. + (grub_jfs_fs): Set uuid field to grub_jfs_uuid. + +2009-08-07 Felix Zielcke + + * util/grub-mkconfig_lib.in (font_path): Move the functionality + of it to ... + * util/grub-mkconfig.in: ... here. Prefer unicode.pf2 and + unifont.pf2 over ascii.pf2. Export LANG=C in case ascii.pf2 gets used. + +2009-08-07 Robert Millan + + * util/grub.d/10_linux.in (test_numeric): Moved from here ... + * util/grub-mkconfig_lib.in (version_test_numeric): ... to here. + Update all users. + + * util/grub.d/10_linux.in (test_gt): Strip any basename prefix, + not just "vmlinu[zx]". + Moved from here ... + * util/grub-mkconfig_lib.in (version_test_gt): ... to here. Update + all users. + + * util/grub.d/10_linux.in (find_latest): Moved from here ... + * util/grub-mkconfig_lib.in (version_find_latest): ... to here. Update + all users. + +2009-08-07 Robert Millan + + * util/grub.d/10_freebsd.in: Use an absolute device path for + `vfs.root.mountfrom'. Set `vfs.root.mountfrom.options=rw'. + +2009-08-06 Felix Zielcke + + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Fix + handling of multiple abstraction modules. + +2009-08-04 Robert Millan + + Fix a bug resulting in black screen when loading Linux using a + packed video mode. + + * kern/i386/pc/startup.S (grub_vbe_bios_getset_dac_palette_width): New + function. + + * include/grub/i386/pc/vbe.h (GRUB_VBE_CAPABILITY_DACWIDTH): New macro. + (grub_vbe_bios_getset_dac_palette_width): New function. + (grub_vbe_bios_get_dac_palette_width) + (grub_vbe_bios_set_dac_palette_width): New macros (act as wrappers for + grub_vbe_bios_getset_dac_palette_width()). + + * video/i386/pc/vbe.c (grub_vbe_probe): Use `GRUB_VBE_STATUS_OK' to + check for return status. + (grub_vbe_get_video_mode_info): When getting information for a packed + mode (<= 8 bpp), obtain DAC palette width using + grub_vbe_bios_getset_dac_palette_width(), and use that for initializing + {red,green,blue}_mark_size. + +2009-08-04 Felix Zielcke + + * commands/search.c (options): Fix help output to match actual code. + +2009-08-02 Vladimir Serbinenko + + * commands/hexdump.c (grub_cmd_hexdump): Use grub_disk_read instead + of homegrown code. + +2009-08-01 Vladimir Serbinenko + + * util/hostfs.c (grub_hostfs_dir): Don't use DT_DIR: It doesn't work + on XFS or ReiserFS. + +2009-08-01 Vladimir Serbinenko + + Support Apple partition map with sector size different from 512 bytes. + + * partmap/apple.c (grub_apple_header): New field 'blocksize'. + (apple_partition_map_iterate): Respect 'aheader.blocksize' + and 'apart.partmap_size'. + +2009-08-01 Vladimir Serbinenko +2009-08-01 Robert Millan + + Fix cpuid command. + + * commands/i386/cpuid.c (options): New variable. + (grub_cmd_cpuid): Return real error. + (GRUB_MOD_INIT(cpuid)): Declare options. + +2009-07-31 Vladimir Serbinenko + + * partmap/pc.c (pc_partition_map_iterate): Check that boot flags are + valid. + +2009-07-31 Bean + + * fs/xfs.c (grub_xfs_sblock): Change unused5 field to log2_sect and + log2_inode. + (grub_fshelp_node): Move inode field to the end. + (grub_xfs_data): Remove inode field. + (grub_xfs_inode_block): Calculate inode size using sblock. + (grub_xfs_inode_offset): Likewise. + (grub_xfs_read_inode): Calculate inode size using sblock. + (grub_xfs_read_block): Replace XFS_INODE_EXTENTS with nrec. + (grub_xfs_iterate_dir): Calculate inode size using sblock. + (grub_xfs_mount): Use grub_zalloc instead of grub_malloc. Realloc data + to match inode size. + (grub_xfs_dir): goto mount_fail when mount fails, as data->diropen is + not accessible when data is null. + (grub_xfs_open): Likewise. + +2009-07-31 Bean + + * disk/lvm.c (grub_lvm_scan_device): Ignore extra copy of metadata. + Don't change pv->disk if it's already set. + + * disk/raid.c (grub_raid_scan_device): Merge this function into ... + (grub_raid_register): ... here. + (grub_raid_rescan): Removed. + + * include/grub/raid.h (grub_raid_rescan): Removed. + + * util/grub-fstest.c: Remove include file . + (fstest): Replace grub_raid_rescan with module fini function followed + by init function. + + * util/grub-probe.c: Add include file . + (probe_raid_level): New function. + (probe): Detect abstraction by walking the disk device, support two + level of abstraction (LVM on RAID) when detecting partition map. + +2009-07-31 Pavel Roskin + + * disk/raid5_recover.c (grub_raid5_recover): Revert conversion + to grub_zalloc(), it was erroneous. + Reported by Bean + +2009-07-30 Vladimir Serbinenko + + * util/i386/pc/grub-setup.c (setup): Check that no partition is in + embedding zone, not only the first one. + +2009-07-29 Joe Auricchio + + * term/gfxterm.c (clear_char): New function. + (grub_virtual_screen_setup): Use clear_char. + (scroll_up): Likewise. + (grub_virtual_screen_cls): Likewise. + +2009-07-29 Felix Zielcke + + * util/deviceiter.c (get_acceleraid_disk_name): New static + function. + (grub_util_iterate_devices): Handle Accelraid devices. + * util/hostdisk.c (convert_system_partition_to_system_disk): Likewise. + +2009-07-28 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): Use ',' rather than ';' as + separator for the suggested gfxpayload string (';' collides with the + parser and needs escaping). + +2009-07-28 Vladimir Serbinenko + + * loader/i386/multiboot_helper.S (grub_multiboot_backward_relocator): + Clear direction flag before jumping to OS. + (grub_multiboot2_real_boot): Likewise. + +2009-07-28 Felix Zielcke + + * util/i386/pc/grub-install: Fix parsing of --disk-module + option. + +2009-07-28 Felix Zielcke + + * util/i386/pc/grub-setup.c (setup): Fix 2 incorrect checks + when embedding. + +2009-07-26 Felix Zielcke + + * util/grub-mkconfig.in (package_version): New variable. + Use it do display the version. + +2009-07-25 Felix Zielcke + + * kern/file.c (grub_file_open): Revert to previous check with + grub_errno. + +2009-07-25 Vladimir Serbinenko + + * commands/probe.c (GRUB_MOD_INIT (probe)): Remove "[--target=target]" + from help line. It's out of sync with code. + +2009-07-25 Vladimir Serbinenko + + * kern/parser.c (grub_parser_execute): Fix a bug causing truncated + entries on failed boot. + +2009-07-25 Felix Zielcke + + * kern/file.c (grub_file_open): Fix an error check. + +2009-07-24 Vladimir Serbinenko + + * util/i386/pc/grub-setup.c (setup): Fix segmentation fault when + partition map couldn't be identified. + +2009-07-23 Pavel Roskin + + * commands/xnu_uuid.c (transform): Use GRUB_CPU_WORDS_BIGENDIAN + instead of WORDS_BIGENDIAN. Use grub_le_to_cpu32(), so that the + case of little endian words becomes just an optimization. + Respect const modifier. + (md5_final): Use code that doesn't depend on endianness. + + * include/grub/misc.h (ALIGN_UP): Cast align to the type of addr + to avoid loss of upper bits if align is unsigned and shorter + than addr. + +2009-07-21 Vladimir Serbinenko + + UUID support for UFS + + * fs/ufs.c (grub_ufs_sblock): Add uuidhi and uuidlow. + (grub_ufs_uuid): New function. + (grub_ufs_fs): add .uuid + +2009-07-21 Pavel Roskin + + * kern/dl.c (grub_dl_check_header): Make static. + +2009-07-21 Felix Zielcke + + * util/grub.d/30_os-prober.in: Remove unused CHAINROOT. Don't + add drivemap for Vista. It breaks Windows 7. + +2009-07-21 Vladimir Serbinenko + + * fs/ufs.c (grub_ufs_sblock): Fix offset of mtime2 which was off by + 128 bytes + +2009-07-20 Vladimir Serbinenko + + Add BFS support + + * conf/common.rmk (grub_probe_SOURCES): Add fs/befs.c. + (grub_fstest_SOURCES): Likewise. + (pkglib_MODULES): Add befs.mod. + (befs_mod_SOURCES): New variable. + (befs_mod_CFLAGS): Likewise. + (befs_mod_LDFLAGS): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + (grub_setup_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + (grub_setup_SOURCES): Likewise. + * fs/befs.c: New file. + * fs/afs.c (GRUB_AFS_FSNAME): New declaration. + (GRUB_AFS_SBLOCK_SECTOR): Likewise. + (GRUB_AFS_SBLOCK_MAGIC1) [MODE_BFS]: New conditional declaration. + (GRUB_AFS_BTREE_MAGIC) [MODE_BFS]: Likewise + (B_KEY_INDEX_ALIGN): New declaration. + (B_KEY_INDEX_OFFSET): Use B_KEY_INDEX_ALIGN. + (grub_afs_bnode) [MODE_BFS]: Make key_count and key_size 16-bit + (grub_afs_btree) [MODE_BFS]: New conditional declaration. + (grub_afs_sblock) [MODE_BFS]: Remove link_count. + (grub_afs_validate_sblock) [MODE_BFS]: Support BFS + (grub_afs_mount) [MODE_BFS]: Likewise. + (grub_afs_dir) [MODE_BFS]: Divide mtime by 65536 and not 1000000. + (grub_afs_fs): Use GRUB_AFS_FSNAME + (GRUB_MOD_INIT (afs)) [MODE_BFS]: Rename to ... + (GRUB_MOD_INIT (befs)) [MODE_BFS]: ... this + (GRUB_MOD_FINI (afs)) [MODE_BFS]: Rename to ... + (GRUB_MOD_FINI (befs)) [MODE_BFS]: ... this + +2009-07-19 Yves BLUSSEAU + + * util/getroot.c (find_root_device): Add support for MacOSX. + * util/hostdisk.c: Likewise. + +2009-07-20 Vladimir Serbinenko + + * font/font.c (find_glyph): Check whether a font is present to avoid + segmentation fault. + +2009-07-20 Joe Auricchio + + * term/gfxterm.c (grub_virtual_screen_setup): Clear virtual_screen. + +2009-07-20 Pavel Roskin + + * configure.ac: Trim excessively wordy excuses. + +2009-07-20 Vladimir Serbinenko + + Add symlink, mtime and label support to AtheFS. + + * fs/afs.c (grub_afs_sblock): Declare `name' as char. + (grub_afs_iterate_dir): Handle symlinks. + (grub_afs_open): Use grub_afs_read_symlink. + (grub_afs_dir): Likewise. + Pass mtime. + (grub_afs_label): New function. + (grub_afs_fs): Add grub_afs_label. + (grub_afs_read_symlink): New function. + +2009-07-20 Vladimir Serbinenko + + Fix AtheFS support. + + * fs/afs.c: Fix comments style. + (grub_afs_blockrun): Declare as packed. + (grub_afs_datastream): Likewise. + (grub_afs_bnode): Likewise. + (grub_afs_btree): Likewise. + (grub_afs_sblock): Likewise. + Declare `name' as char. + (grub_afs_inode): Declare as packed. + Change void *vnode to grub_uint32_t unused. + (grub_afs_iterate_dir): Check that key_size is positive. + (grub_afs_mount): Don't read superblock twice. + (grub_afs_dir): Don't free node in case of error, + grub_fshelp_find_file already handles this. + (grub_afs_open): Likewise. + +2009-07-19 Pavel Roskin + + * Makefile.in: Remove LIBLZO and enable_lzo. + * conf/i386-pc.rmk: Remove lzo support. + * configure.ac: Remove checks for lzo, don't define ENABLE_LZMA. + * include/grub/i386/pc/kernel.h: Define ENABLE_LZMA. Remove lzo + support. + * kern/i386/pc/lzo1x.S: Remove. + * kern/i386/pc/startup.S: Remove lzo support. + * util/i386/pc/grub-mkimage.c: Likewise. + +2009-07-19 Vladimir Serbinenko + + * disk/usbms.c (grub_usbms_transfer): Fix double semicolon. + * fs/xfs.c (grub_xfs_dir): Likewise. + * fs/afs.c (grub_afs_dir): Likewise. + * fs/iso9660.c (grub_iso9660_iterate_dir): Likewise. + (grub_iso9660_open): Likewise. + * fs/jfs.c (grub_jfs_open): Likewise. + * fs/ext2.c (grub_ext2_dir): Likewise. + * include/grub/macho.h (grub_macho_fat_arch): Likewise. + * script/sh/lexer.c (grub_script_yylex): Likewise. + +2009-07-16 Pavel Roskin + + * configure.ac: Never add "-c" to CFLAGS. + + * configure.ac: Fix incorrect comparison for grub_cv_cc_efiemu. + + * configure.ac: Fix wrong use of grub_cv_cc_no_red_zone where + grub_cv_cc_efiemu should be used. + + * configure.ac: Typo fixes. + + * kern/mm.c (grub_zalloc): New function. + (grub_debug_zalloc): Likewise. + * include/grub/mm.h: Declare grub_zalloc() and + grub_debug_zalloc(). + * util/misc.c (grub_zalloc): New function. + * bus/usb/uhci.c (grub_uhci_pci_iter): Use grub_zalloc() + instead of grub_malloc(), remove unneeded initializations. + * bus/usb/usbhub.c (grub_usb_hub_add_dev): Likewise. + * commands/extcmd.c (grub_extcmd_dispatcher): Likewise. + * commands/parttool.c (grub_cmd_parttool): Likewise. + * disk/i386/pc/biosdisk.c (grub_biosdisk_open): Likewise. + * disk/raid5_recover.c (grub_raid5_recover): Likewise. + * disk/raid6_recover.c (grub_raid6_recover): Likewise. + * disk/usbms.c (grub_usbms_finddevs): Likewise. + * efiemu/mm.c (grub_efiemu_request_memalign): Likewise. + * efiemu/pnvram.c (grub_efiemu_pnvram): Likewise. + (grub_cmd_efiemu_pnvram): Likewise. + * fs/i386/pc/pxe.c (grub_pxefs_open): Likewise. + * fs/iso9660.c (grub_iso9660_mount): Likewise. + (grub_iso9660_iterate_dir): Likewise. + * fs/jfs.c (grub_jfs_opendir): Likewise. + * fs/ntfs.c (list_file): Likewise. + (grub_ntfs_mount): Likewise. + * kern/disk.c (grub_disk_open): Likewise. + * kern/dl.c (grub_dl_load_core): Likewise. + * kern/elf.c (grub_elf_file): Likewise. + * kern/env.c (grub_env_context_open): Likewise. + (grub_env_set): Likewise. + (grub_env_set_data_slot): Likewise. + * kern/file.c (grub_file_open): Likewise. + * kern/fs.c (grub_fs_blocklist_open): Likewise. + * loader/i386/multiboot.c (grub_module): Likewise. + * loader/xnu.c (grub_xnu_create_key): Likewise. + (grub_xnu_create_value): Likewise. + * normal/main.c (grub_normal_add_menu_entry): Likewise. + (read_config_file): Likewise. + * normal/menu_entry.c (make_screen): Likewise. + * partmap/sun.c (sun_partition_map_iterate): Likewise. + * script/sh/lexer.c (grub_script_lexer_init): Likewise. + * script/sh/script.c (grub_script_parse): Likewise. + * video/bitmap.c (grub_video_bitmap_create): Likewise. + * video/readers/jpeg.c (grub_video_reader_jpeg): Likewise. + * video/readers/png.c (grub_png_output_byte): Likewise. + (grub_video_reader_png): Likewise. + +2009-07-16 Vladimir Serbinenko + + Enable all targets that can be built by default + + * configure.ac: enable efiemu runtime, grub-emu, grub-emu-usb, + grub-mkfont and grub-fstest if they can be built + +2009-07-16 Vladimir Serbinenko + + Fix hang and segmentation fault in grub-emu-usb + + * disk/scsi.c (grub_scsi_open): return err and not grub_errno + * util/usb.c (grub_libusb_devices): likewise + (grub_libusb_init): rename to ... + (GRUB_MOD_INIT (libusb)):...this + (grub_libusb_fini): rename to .. + (GRUB_MOD_FINI (libusb)):...this + * disk/usbms.c (grub_usbms_transfer): fix retry logic + * include/grub/disk.h (grub_raid_init): removed, it's useless + (grub_raid_fini): likewise + (grub_lvm_init): likewise + (grub_lvm_fini): likewise + * util/grub-emu.c (main): don't call grub_libusb_init, it's done + by grub_init_all + +2009-07-16 Vladimir Serbinenko + + Fix libusb + + * Makefile.in (LIBUSB): new macro + * genmk.rb (Utility/print_tail): new method + (Utility/rule): use intermediary variable #{prefix}_OBJECTS + (top level): call util.print_tail at the end. + +2009-07-16 Vladimir Serbinenko + + Make FreeBSD accept zpool.cache + + * loader/i386/bsd.c (grub_freebsd_add_meta_module): spoof filename if + type is /boot/zfs/zpool.cache + +2009-07-16 Vladimir Serbinenko + + Fix 64-bit efiemu + + * include/grub/efiemu/efiemu.h (grub_efiemu_configuration_table64_t): + correct wrong typedef + * efiemu/prepare.c (SUFFIX (grub_efiemu_prepare)): minor style fixes + +2009-07-15 Pavel Roskin + + * include/grub/disk.h (struct grub_disk_dev): Use enum for id. + * kern/disk.c (struct grub_disk_cache): Likewise. + + * commands/probe.c (options): Typo fix. + + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_BPB_END): + Increase to 0x5a to accommodate FAT32. Adjust other offsets + accordingly. + Original patch by Yves Blusseau + + * boot/i386/pc/boot.S (general_error_string): Add DOS newline at + the end of "Error" to make the message more readable. + + * boot/i386/pc/boot.S (kernel_segment): Remove. + (copy_buffer): Use GRUB_BOOT_MACHINE_KERNEL_ADDR in segment 0 + for destination. + + * boot/i386/pc/boot.S (boot_version): Remove. + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_VER_MAJ): + Remove. + + * include/grub/i386/pc/boot.h: Sort all offsets. + (GRUB_BOOT_MACHINE_KERNEL_ADDRESS): Remove, it's unused. + (GRUB_BOOT_MACHINE_KERNEL_SEGMENT): Likewise. + * boot/i386/pc/boot.S: Assert location of every offset listed in + include/grub/i386/pc/boot.h. + +2009-07-13 Pavel Roskin + + * include/grub/i386/coreboot/machine.h: Rename + GRUB_MACHINE_LINUXBIOS to GRUB_MACHINE_COREBOOT. + * loader/multiboot_loader.c (grub_cmd_multiboot_loader): Allow + multiboot 1 for GRUB_MACHINE_COREBOOT and GRUB_MACHINE_QEMU. + + * kern/dl.c: Force native word size to suppress warnings when + compiling grub-emu. + + * kern/device.c (grub_device_iterate): Change struct part_ent to + hold the name, not a pointer to it. Use one grub_malloc() per + partition, not two. Free partition_name if grub_malloc() fails. + Set ents to NULL only before grub_partition_iterate() is called. + +2009-07-11 Bean + + * kern/ieee1275/openfw.c (grub_children_iterate): Fix size of + childname. + +2009-07-10 Bean +2009-07-10 Robert Millan + + * kern/ieee1275/openfw.c (grub_children_iterate) + (grub_devalias_iterate): Fix size evaluation for property or path + strings, which was broken since r2132. + +2009-07-07 Pavel Roskin + + * commands/search.c (search_file): Merge into ... + (search_fs): ... this. Accept search type as argument. + (grub_cmd_search): Pass search type to search_fs(). + + * include/grub/util/console.h: New file. + * util/console.c: Use it instead of grub/machine/console.h. + * util/grub-emu.c: Likewise. + + * lib/arg.c (find_long_option): Remove. + (find_long): Add `len' argument, make `s' const char *. + (grub_arg_parse): Parse long options in place, not in a + temporary buffer. + +2009-07-06 Pavel Roskin + + * commands/search.c (search_fs): Fix potential NULL pointer + dereference. + + * commands/search.c (search_fs): Replace QUID macro with quid_fn + function pointer. + +2009-07-06 Daniel Mierswa + + * commands/search.c (search_fs): Use grub_strcasecmp() for UUID + comparison. + +2009-07-05 Pavel Roskin + + * include/grub/i386/linux.h (struct linux_kernel_params): + Restore padding3, it's still needed. + + * util/grub.d/10_freebsd.in: Fix spelling of `device.hints' on + FreeBSD. + * util/osdetect.lua: Likewise. + +2009-07-05 Bean + + * conf/common.rmk (lua_mode_SOURCES): Add script/lua/lstrlib.c. + + * script/lua/grub_lib.c (grub_lua_run): Check input parameter. + (grub_lua_getenv): Likewise. + (grub_lua_setenv): Likewise. + (save_errno): New function. + (push_result): Likewise. + (grub_lua_enum_device): Likewise. + (grub_lua_enum_file): Likewise. + (grub_lua_file_open): Likewise. + (grub_lua_file_close): Likewise. + (grub_lua_file_seek): Likewise. + (grub_lua_file_read): Likewise. + (grub_lua_file_getline): Likewise. + (grub_lua_file_getsize): Likewise. + (grub_lua_file_getpos): Likewise. + (grub_lua_file_eof): Likewise. + (grub_lua_file_exist): Likewise. + (grub_lua_add_menu): Likewise. + + * script/lua/grub_lua.h (isupper): New inline function. + (islower): Likewise. + (ispunct): Likewise. + (isxdigit): Likewise. + (strcspn): Change to normal function. + (strpbkr): New function declaration. + (memchr): Likewise. + + * script/lua/grub_main.c (scan_str): New function. + (strcspn): Likewise. + (strpbrk): Likewise. + (memchr): Likewise. + + * script/lua/linit.c (lualibs): Enable the string library. + + * util/osdetect.lua: New file. + +2009-07-04 Robert Millan + + * include/grub/i386/linux.h (struct linux_kernel_params): Add + `capabilities' member. + +2009-07-02 Pavel Roskin + + * genparttoollist.sh: Add missing newline at the end. + +2009-07-01 Pavel Roskin + + * kern/x86_64/efi/callwrap.S: Add missing newline at the end. + + * util/hostdisk.c (open_device): Remove `const' from + `sysctl_size', as sysctlbyname() can change it (in this case it + doesn't actually happen). + + * include/grub/types.h: Define GRUB_LONG_MAX and GRUB_LONG_MIN + using signed long int constants. + + * util/hostdisk.c (grub_util_biosdisk_get_grub_dev): Make `p' + constant to avoid a warning on FreeBSD. + + * util/hostdisk.c (device_is_wholedisk): Compile only on systems + where it's needed. + + * Makefile.in: Install include/grub/machine symlink. + + * Makefile.in: When installing symlinks, use "cp -fR", which + works on FreeBSD and MacOSX. + From Yves Blusseau + + * kern/dl.c (grub_dl_resolve_symbol): Make static. + * include/grub/dl.h: Remove grub_dl_resolve_symbol(). + + * util/misc.c: Move grub_reboot() and grub_halt() ... + * util/grub-emu.c: ... here. Make main_env static. + * include/grub/util/misc.h: Remove main_env. + + * kern/mm.c: Use correct format to print size_t. + + * include/grub/elf.h: Define Elf_Sword and Elf_Xword. + * kern/i386/dl.c: Use ELF symbols without "32" or "64". + * kern/powerpc/dl.c: Likewise. + * kern/sparc64/dl.c: Likewise. + * kern/x86_64/dl.c: Likewise. + +2009-07-01 Robert Millan + + Fix grub-emu build on sparc64-ieee1275. + + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Synchronize with ... + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): ... this. + +2009-07-01 Robert Millan + + * util/misc.c: Include `' and `'. + (grub_reboot, grub_halt): New functions. + + * util/i386/pc/misc.c: Delete. Update all users. + * util/sparc64/ieee1275/misc.c: Likewise. + * util/powerpc/ieee1275/misc.c: Likewise. + +2009-07-01 Robert Millan + + * conf/i386.rmk (setjmp_mod_SOURCES) + (setjmp_mod_ASFLAGS, setjmp_mod_LDFLAGS): Move to ... + * conf/common.rmk (setjmp_mod_SOURCES) + (setjmp_mod_ASFLAGS, setjmp_mod_LDFLAGS): ... here, and modify + to use $(target_cpu). + * conf/x86_64-efi.rmk (setjmp_mod_SOURCES) + (setjmp_mod_ASFLAGS, setjmp_mod_LDFLAGS): Remove. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + + * conf/i386-pc.rmk (kernel_img_SOURCES): Use + $(target_cpu) for kern/$(target_cpu)/dl.c. + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * conf/i386-coreboot.rmk: Likewise. + * conf/powerpc-ieee1275.rmk (kernel_img_SOURCES): Use + $(target_cpu) for kern/$(target_cpu)/dl.c and for + kern/$(target_cpu)/cache.S. + * conf/sparc64-ieee1275.rmk: Likewise. + +2009-07-01 Robert Millan + + * include/grub/i386/linux.h (linux_kernel_params): Change `mmap_size' + type to `grub_uint8_t', and adjust `padding9' accordingly. + +2009-06-29 Robert Millan + + * include/grub/i386/linux.h (GRUB_VIDEO_TYPE_TEXT): New macro. + + * loader/i386/linux.c [__i386__] (grub_linux_boot): Simplify inline + assembly in final jump, using register constraints. + + (grub_linux_boot): For text mode, initialize `have_vga' using + GRUB_VIDEO_TYPE_TEXT rather than 0 (this changes its value to 1). + + Initialize `video_cursor_x' and `video_cursor_y' as late as possible, + right before the final jump. + + Set `video_mode' to 0x3. + + Document initialization of `video_page', `video_mode' and + `video_ega_bx'. + +2009-06-29 Robert Millan + + * include/grub/i386/linux.h (GRUB_LINUX_FLAG_QUIET): New macro. + * loader/i386/linux.c (grub_cmd_linux): Recognize "quiet" option, + and set GRUB_LINUX_FLAG_QUIET appropriately. + +2009-06-29 Robert Millan + + Fix build on Debian / sparc. + + * configure.ac: Recognize `sparc' target_cpu (as sparc64). + +2009-06-28 Pavel Roskin + + * kern/i386/qemu/mmap.c (grub_machine_mmap_iterate): Use cast to + fix a warning. + + * util/grub.d/10_linux.in: Match SUSE style initrd names. + +2009-06-27 Robert Millan + + * loader/i386/linux.c (grub_linux_boot): Fix uninitialized use of + `err'. + +2009-06-27 Robert Millan + + Revert r2338. + + * loader/i386/linux.c (grub_cmd_linux): Don't call grub_error when + file can't be opened. grub_file_open() is already supposed to set + grub_errno / grub_errmsg appropriately. + * loader/i386/pc/linux.c (grub_cmd_linux): Likewise. + +2009-06-27 Pavel Roskin +2009-06-27 Robert Millan + + * include/grub/dl.h: Include grub/elf.h. + (struct grub_dl): Add symtab field. + * kern/dl.c [GRUB_MACHINE_QEMU]: Define + GRUB_MODULES_MACHINE_READONLY. + (grub_dl_resolve_symbols): Populate mod->symtab, making a copy + of the header for read-only modules. + (grub_dl_unload): Free mod->symtab for read-only modules. + * kern/i386/dl.c: Use mod->symtab. + * kern/powerpc/dl.c: Likewise. + * kern/sparc64/dl.c: Likewise. + * kern/x86_64/dl.c: Likewise. + + * conf/i386-qemu.rmk: New file. + * kern/i386/qemu/startup.S: Likewise. + * kern/i386/qemu/mmap.c: Likewise. + * boot/i386/qemu/boot.S: Likewise. + * include/grub/i386/qemu/time.h: Likewise. + * include/grub/i386/qemu/serial.h: Likewise. + * include/grub/i386/qemu/kernel.h: Likewise. + * include/grub/i386/qemu/console.h: Likewise. + * include/grub/i386/qemu/boot.h: Likewise. + * include/grub/i386/qemu/init.h: Likewise. + * include/grub/i386/qemu/machine.h: Likewise. + * include/grub/i386/qemu/loader.h: Likewise. + * include/grub/i386/qemu/memory.h: Likewise. + + * conf/i386-coreboot.rmk (GRUB_BOOT_MACHINE_LINK_ADDR) + (GRUB_KERNEL_MACHINE_LINK_ADDR): New variables. + [qemu] (pkglib_IMAGES): Add `boot.img'. + [qemu] (boot_img_SOURCES, boot_img_ASFLAGS, boot_img_LDFLAGS) + [qemu] (boot_img_FORMAT): New variables. + [qemu] (bin_UTILITIES): Add `grub-mkimage'. + [qemu] (grub_mkimage_SOURCES, grub_mkimage_CFLAGS): New variables. + [qemu] (kernel_img_SOURCES, kernel_img_HEADERS, kernel_img_CFLAGS) + [qemu] (kernel_img_ASFLAGS, kernel_img_LDFLAGS) + [qemu] (kernel_img_FORMAT): New variables. + + * configure.ac: Recognise `i386-qemu'. + + * util/i386/pc/grub-mkimage.c (compress_kernel): Add dummy variant + (for no compression). + [GRUB_MACHINE_QEMU] (generate_image): Misc adjustments to produce + a valid i386 ROM image. Make `GRUB_KERNEL_MACHINE_COMPRESSED_SIZE', + `GRUB_KERNEL_MACHINE_INSTALL_DOS_PART' and + `GRUB_KERNEL_MACHINE_INSTALL_BSD_PART' optional features (with + ifdefs). + +2009-06-27 Pavel Roskin + + * efiemu/prepare.c: Eliminate TYPE macro, it makes code hard to + read. + * efiemu/prepare32.c: Likewise. + * efiemu/prepare64.c: Likewise. + +2009-06-26 Pavel Roskin + + * include/grub/types.h: Define GRUB_TARGET_WORDSIZE. + * include/grub/elf.h: Define symbols without "32" or "64" based + on GRUB_TARGET_WORDSIZE. + * include/grub/multiboot2.h: Use GRUB_TARGET_WORDSIZE. + * efiemu/loadcore32.c: Redefine GRUB_TARGET_WORDSIZE, remove own + ELF definitions. + * efiemu/loadcore64.c: Likewise. + * loader/i386/bsd32.c: Likewise. + * loader/i386/bsd64.c: Likewise. + * kern/dl.c: Remove own ELF definitions. + * util/i386/efi/grub-mkimage.c: Likewise. + +2009-06-23 Robert Millan + + * kern/i386/pc/startup.S (real_to_prot): Access `gdtdesc' using + segment 0x0 unconditionally, because the reference generated by + GAS is an absolute address. + +2009-06-22 Robert Millan + + * include/grub/i386/kernel.h: Include `'. + [! GRUB_MACHINE_IEEE1275]: Set `GRUB_MOD_ALIGN' to 0x1. + +2009-06-22 Robert Millan + + * commands/search.c (grub_cmd_search): Macroify hardcoded args[] + indexes. Check for -f explicitly. + (search_file): Improve error message. + (GRUB_MOD_INIT(search)): Add missing `-n' to help output. + +2009-06-22 Robert Millan + + * conf/i386-pc.rmk (GRUB_MEMORY_MACHINE_LINK_ADDR): Rename to ... + (GRUB_KERNEL_MACHINE_LINK_ADDR): ... this. Update all users. + +2009-06-22 Robert Millan + + * conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/i386/misc.S'. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-coreboot.rmk: Likewise. + + * kern/i386/pc/startup.S (grub_stop): Remove function. + * kern/i386/ieee1275/startup.S: Likewise. + * kern/i386/coreboot/startup.S: Likewise. + * kern/i386/misc.S (grub_stop): New function. + +2009-06-22 Robert Millan + + * kern/i386/pc/startup.S (real_to_prot): Move from here ... + * kern/i386/realmode.S (real_to_prot): ... to here. + +2009-06-22 Robert Millan + + * conf/i386-ieee1275.rmk (pkglib_PROGRAMS): Replace `kernel.elf' + with `kernel.img'. + (kernel_elf_SOURCES): Rename to ... + (kernel_img_SOURCES): ... this. + (kernel_elf_HEADERS): Rename to ... + (kernel_img_HEADERS): ... this. Update all users. + (kernel_elf_ASFLAGS): Rename to ... + (kernel_img_ASFLAGS): ... this. + (kernel_elf_CFLAGS): Rename to ... + (kernel_img_CFLAGS): ... this. + (kernel_elf_LDFLAGS): Rename to ... + (kernel_img_LDFLAGS): ... this. + * conf/i386-coreboot.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + + * util/elf/grub-mkimage.c (add_segments): Replace "kernel.elf" + with "kernel.img". + +2009-06-21 Pavel Roskin + + * loader/powerpc/ieee1275/linux.c (offset_phdr): Fix prototypes + to match nested functions. + * loader/sparc64/ieee1275/linux.c: Likewise. + + * conf/i386-ieee1275.rmk: Define kernel_elf_ASFLAGS. + +2009-06-21 Robert Millan + + * configure.ac: Enable `END_SYMBOL' / `BSS_START_SYMBOL' test on + all i386 platforms. + +2009-06-21 Robert Millan + + Fix asm file handling on ELF, and remove workarounds. + + * genmk.rb (class Programs): Detect assembly files, and set ASFLAGS + and -DASM_FILE=1 appropriately (copied from `class Images' stanza). + * kern/i386/ieee1275/startup.S (ASM_FILE): Remove macro. + * kern/i386/coreboot/startup.S (ASM_FILE): Likewise. + +2009-06-21 Vladimir Serbinenko + + Load BSD ELF modules + + * conf/i386-pc.rmk (bsd_mod_SOURCES): Add loader/i386/bsd32.c + and loader/i386/bsd64.c + * include/grub/i386/bsd.h (FREEBSD_MODTYPE_MODULE): Remove + (FREEBSD_MODTYPE_ELF_MODULE): New definition + (FREEBSD_MODTYPE_ELF_MODULE_OBJ): Likewise + (grub_freebsd_load_elfmodule32): New declaration + (grub_freebsd_load_elfmoduleobj64): Likewise + (grub_freebsd_load_elf_meta32): Likewise + (grub_freebsd_load_elf_meta64): Likewise + (grub_freebsd_add_meta): Likewise + (grub_freebsd_add_meta_module): Likewise + * loader/i386/bsd.c (grub_freebsd_add_meta): Make global + (grub_freebsd_add_meta_module): Likewise and move module-specific + parts to grub_cmd_freebsd and grub_cmd_freebsd_module + (grub_cmd_freebsd): Add elf-kernel specific parts + based on grub_freebsd_add_meta_module + (grub_cmd_freebsd_module): Add type parsing moved from + grub_freebsd_add_meta_module + (grub_cmd_freebsd_module_elf): New function + (cmd_freebsd_module_elf): New variable + (GRUB_MOD_INIT): Register freebsd_module_elf + * loader/i386/bsd32.c: New file + * loader/i386/bsd64.c: Likewise + * loader/i386/bsdXX.c: Likewise + * kern/elf.c (grub_elf32_load): Let hook decide which pheaders to load + (grub_elf64_load): Likewise + * include/grub/elfload.h (grub_elf32_load_hook_t): New parameter do_load + All users updated + (grub_elf64_load_hook_t): Likewise + +2009-06-21 Colin Watson + + * util/grub-mkconfig.in (GRUB_DISABLE_LINUX_RECOVERY): Export + variable. + * util/grub.d/10_linux.in: If GRUB_DISABLE_LINUX_RECOVERY is true, + don't write a menu entry for recovery mode. + +2009-06-20 Robert Millan + + * util/i386/pc/grub-mkimage.c (main): Oops, free `output' only + after it's no longer needed. + +2009-06-20 Robert Millan + + * include/grub/i386/loader.h (grub_linux_prot_size) + (grub_linux_tmp_addr, grub_linux_real_addr) + (grub_linux_is_bzimage, grub_linux16_boot): Declare only on + GRUB_MACHINE_PCBIOS. + * util/i386/pc/grub-mkimage.c (compress_kernel): Move + common grub_util_info() call to ... + (generate_image): ... here. + Fix use of uninitialized memory, comparison of signed with + unsigned integers and memory leak. + Remove bogus module address message. + +2009-06-20 Vladimir Serbinenko + + * disk/mdraid_linux.c (GRUB_MOD_FINI): use grub_raid_unregister and not + grub_raid_register + * disk/dmraid_nvidia.c (GRUB_MOD_FINI): likewise + +2009-06-19 Pavel Roskin + + * configure.ac: Remove stray AC_MSG_CHECKING. + +2009-06-19 Vladimir Serbinenko + + * disk/scsi.c (grub_scsi_open): use continue instead of big if + +2009-06-18 Pavel Roskin + + * conf/common.rmk: Add fs_file.mod. + * disk/fs_file.c: New file. + * include/grub/disk.h (enum grub_disk_dev_id): Add + GRUB_DISK_DEVICE_FILE_ID. + +2009-06-18 Vladimir Serbinenko + + Fix build with Apple's toolchain. Part 2 + + * aclocal.m4 (grub_PROG_TARGET_CC): add missing prototype for main and + a fake start + +2009-06-18 Vladimir Serbinenko + + Fix build with Apple's toolchain. Part 1 + + * commands/i386/pc/drivemap_int13h.S: use assembly-time constants + for long calls + * configure.ac: remove a leftover AC_MSG_RESULT + (CFLAGS): don't add -Wl,--defsym,___main=0x8100 when building with + Apple's toolchain + +2009-06-18 Vladimir Serbinenko + + Fix warnings + + * fs/ntfscomp.c (decomp_get16): initialize c1 and c2 + (decomp_block): initialize ch + use grub_memcpy instead of memcpy + +2009-06-17 Pavel Roskin + + * include/grub/i386/coreboot/console.h: Don't use the i386-pc + version, use declarations needed to use vga_text as the startup + console. + + * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Remove + term/i386/pc/at_keyboard.c, it doesn't need to be compiled into + the kernel. + * kern/i386/coreboot/init.c: Don't call grub_at_keyboard_init() + and grub_at_keyboard_fini(), it's done on module load and + unload. + +2009-06-17 Felix Zielcke + + * loader/i386/linux.c (grub_cmd_linux): Set grub_error if the + file can't be found. + * loader/i386/pc/linux.c (grub_cmd_linux): Likewise. + +2009-06-17 Vladimir Serbinenko + + Fix newline handling + + * include/grub/script_sh.h (grub_lexer_param): new field was_newline + * script/sh/lexer.c (grub_script_lexer_init): initialize was_newline + (grub_script_yylex): don't segfault on unterminated script + newline terminates command and variable + +2009-06-17 Vladimir Serbinenko + + avoid double grub_adjust_range call. Bug reported by David Simner + + * kern/disk.c (grub_disk_write): change to raw disk access before + calling disk_read + +2009-06-17 Colin Watson + + * util/elf/grub-mkimage.c (usage): Prefix each option line with two + spaces, for the benefit of help2man. + * util/i386/efi/grub-mkimage.c (usage): Likewise. + +2009-06-16 Pavel Roskin + + * kern/i386/halt.c: Include grub/machine/init.h. + * kern/i386/reboot.c: Include grub/cpu/reboot.h. + +2009-06-16 Felix Zielcke + + * util/grub.d/30_os-prober.in: Use ${root} in the generated + drivemap menuentry. + +2009-06-16 James Jarvis + + * commands/help.c GRUB_MOD_INIT(echo): Fix the help output of + `echo' command. + +2009-06-16 Pavel Roskin + + * boot/i386/pc/boot.S: Remove root_drive. Assert offset of + boot_drive_check by using GRUB_BOOT_MACHINE_DRIVE_CHECK. Don't + save %dx, we only need %dl and we never change it. + * boot/i386/pc/cdboot.S: Don't set the root drive. + * boot/i386/pc/pxeboot.S: Likewise. + * include/grub/i386/pc/boot.h: Remove + GRUB_BOOT_MACHINE_ROOT_DRIVE, adjust + GRUB_BOOT_MACHINE_DRIVE_CHECK. + * include/grub/i386/pc/kernel.h: Remove grub_root_drive. + * kern/i386/pc/init.c (make_install_device): Remove references + to grub_root_drive. + * kern/i386/pc/startup.S: Likewise. + * util/i386/pc/grub-setup.c (setup): Don't set root_drive. + +2009-06-16 Vladimir Serbinenko + + xnu_uuid command + + * commands/xnu_uuid.c: new file + * conf/common.rmk (pkglib_MODULES): add xnu_uuid.mod + (xnu_uuid_mod_SOURCES): new variable + (xnu_uuid_mod_CFLAGS): likewise + (xnu_uuid_mod_LDFLAGS): likewise + * conf/i386-coreboot.rmk (grub_emu_SOURCES): add commands/probe.c + * conf/i386-ieee1275.rmk: likewise + * conf/i386-pc.rmk: likewise + * conf/powerpc-ieee1275.rmk: likewise + * conf/sparc64-ieee1275.rmk: likewise + * util/grub.d/30_os-prober.in: use UUID for Mac OS X/Darwin + +2009-06-16 Pavel Roskin + + * configure.ac: Avoid '==' in test command, it's not portable. + +2009-06-16 Vladimir Serbinenko + + Probe command + + * commands/probe.c: new file + * conf/common.rmk (pkglib_MODULES): add probe.mod + (probe_mod_SOURCES): new variable + (probe_mod_CFLAGS): likewise + (probe_mod_LDFLAGS): likewise + * conf/i386-coreboot.rmk (grub_emu_SOURCES): add commands/probe.c + * conf/i386-ieee1275.rmk: likewise + * conf/i386-pc.rmk: likewise + * conf/powerpc-ieee1275.rmk: likewise + * conf/sparc64-ieee1275.rmk: likewise + +2009-06-15 Vladimir Serbinenko + + Fix handling of string like \"hello\" and "a + b" + + * script/sh/lexer.c (check_textstate): accept GRUB_PARSER_STATE_ESC + (grub_script_yylex): fix parsing of quoting, escaping and newline + +2009-06-13 Vladimir Serbinenko + + * loader/i386/multiboot.c (grub_multiboot_get_bootdev): fix partition + handling + +2009-06-13 Jun Inoue + + * util/grub-mkconfig.in: Fix parsing of --output option. + +2009-06-12 Pavel Roskin + + * Makefile.in (pkgdata_SRCDIR): Remove. genmodsrc.sh and + genmk.rb don't need to be generated or installed. + +2009-06-12 Vladimir Serbinenko + + * commands/i386/pc/drivemap_int13h.S: add more comments + +2009-06-11 Pavel Roskin + + * Makefile.in (uninstall): Uninstall manuals. + + * Makefile.in: Rename lib_DATA to lib_SCRIPTS, move it from + PKGLIB to SCRIPTS. This fixes installation of grub-mkconfig_lib + and update-grub_lib in two places. + * conf/common.rmk: Rename lib_DATA to lib_SCRIPTS. + + * disk/usbms.c (grub_usbms_transfer): Initialize `err' to fix + a compiler warning. + + * loader/i386/bsd.c (grub_freebsd_boot): Rename `entry' to + `entry_lo' to fix variable shadowing. + +2009-06-11 Christian Franke + + * kern/misc.c (__enable_execute_stack): Add missing return type + to prevent gcc warning. + +2009-06-11 Felix Zielcke + + * conf/i386-ieee1275.rmk (COMMON_LDFLAGS): Remove `-static -lgcc'. + +2009-06-11 Pavel Roskin + + * Makefile.in: Don't rely on any scripts being executable. + Always use $(SHELL) to run shell scripts. + + * configure.ac: Always define ___main if using -nostdlib. This + fixes tests on Cygwin. + +2009-06-11 Giuseppe Caizzone + + UDF fix + + * fs/udf.c (grub_udf_read_block): handle the fact that ad->length + is in bytes and not in blocks + +2009-06-11 Pavel Roskin + + * kern/i386/halt.c (grub_halt): Make `i' unsigned to fix a + warning. + +2009-06-11 Felix Zielcke + + * util/grub.d/30_os-prober.in: Fix a comment. Source + ${libdir}/grub/grub-mkconfig_lib. Use prepare_grub_to_access_device + to set the root device. Place drivemap command in the generated + chain entry. + +2009-06-11 Pavel Roskin + + * configure.ac: Remove host_m32. Issues with 64-bit utilities + have long been resolved. + +2009-06-11 Colin Watson + + * util/grub.d/10_linux.in: Capitalise "Linux". + + * util/grub-pe2elf.c (usage): Fix references to grub-editenv. + +2009-06-11 Pavel Roskin + + * kern/efi/efi.c (grub_exit): Add infinite loop at the end to + fix a gcc warning and ensure that the function won't ever exit. + + * kern/i386/ieee1275/init.c: Add missing prototype for + grub_stop_floppy(). + + * loader/ieee1275/multiboot2.c [__i386__]: Include + grub/cpu/multiboot.h. + + * term/i386/pc/serial.c (serial_translate_key_sequence): Avoid + casts to short - they are not portable and cause warnings. Fix + use of uninitialized values in input_buf. Use ARRAY_SIZE. + +2009-06-11 Vladimir Serbinenko + + Drivemap fixes + + * commands/i386/pc/drivemap.c (grub_get_root_biosnumber_drivemap): + new function + (grub_get_root_biosnumber_saved): new variable + (GRUB_MOD_INIT): register grub_get_root_biosnumber_drivemap + (GRUB_MOD_FINI): unregister grub_get_root_biosnumber_drivemap + * commands/i386/pc/drivemap_int13h.S (grub_drivemap_handler): restore + %dx after the call if necessary + * conf/common.rmk (pkglib_MODULES): remove boot.mod + (boot_mod_SOURCES): remove + (boot_mod_CFLAGS): remove + (boot_mod_LDFLAGS): remove + * conf/i386-coreboot.rmk (pkglib_MODULES): add boot.mod + (boot_mod_SOURCES): new variable + (boot_mod_CFLAGS): likewise + (boot_mod_LDFLAGS): likewise + * conf/i386-efi.rmk: likewise + * conf/i386-ieee1275.rmk: likewise + * conf/i386-pc.rmk: likewise + * conf/powerpc-ieee1275.rmk: likewise + * conf/sparc64-ieee1275.rmk: likewise + * conf/x86_64-efi.rmk: likewise + * include/grub/i386/pc/biosnum.h: new file + * lib/i386/pc/biosnum.c: likewise + * loader/i386/bsd.c (grub_bsd_get_device): use grub_get_root_biosnumber + * loader/i386/multiboot.c (grub_multiboot_get_bootdev): likewise + * loader/i386/pc/chainloader.c (grub_chainloader_cmd): likewise + +2009-06-10 Pavel Roskin + + * io/gzio.c (test_header): Don't reuse one buffer for all data. + Use separate variables. Read only the file size at the end, but + not the checksum that we don't use. + + * kern/file.c (grub_file_read): Use void pointer for the buffer. + Adjust all callers. + + * kern/ieee1275/openfw.c: Remove libc includes. + * kern/ieee1275/cmain.c: Likewise. + * include/grub/ieee1275/ieee1275.h: Likewise. + + * kern/i386/coreboot/init.c: Include grub/cpu/tsc.h to fix + compiler warnings. + +2009-06-10 Felix Zielcke + + * Makefile.in: Remove all trailing whitespace. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * docs/grub.texi: Likewise. + * docs/texinfo.tex: Likewise. + * disk/fs_uuid.c: Likewise. + * disk/lvm.c: Likewise. + * disk/scsi.c: Likewise. + * disk/ata.c: Likewise. + * disk/ieee1275/ofdisk.c: Likewise. + * disk/i386/pc/biosdisk.c: Likewise. + * disk/host.c: Likewise. + * disk/raid.c: Likewise. + * disk/efi/efidisk.c: Likewise. + * disk/usbms.c: Likewise. + * disk/memdisk.c: Likewise. + * disk/loopback.c: Likewise. + * kern/powerpc/dl.c: Likewise. + * kern/device.c: Likewise. + * kern/dl.c: Likewise. + * kern/sparc64/dl.c: Likewise. + * kern/ieee1275/ieee1275.c: Likewise. + * kern/term.c: Likewise. + * kern/fs.c: Likewise. + * kern/i386/dl.c: Likewise. + * kern/i386/pc/startup.S: Likewise. + * kern/i386/pc/init.c: Likewise. + * kern/i386/pc/mmap.c: Likewise. + * kern/i386/pc/lzo1x.S: Likewise. + * kern/i386/ieee1275/init.c: Likewise. + * kern/i386/realmode.S: Likewise. + * kern/i386/tsc.c: Likewise. + * kern/partition.c: Likewise. + * kern/corecmd.c: Likewise. + * kern/file.c: Likewise. + * kern/efi/efi.c: Likewise. + * kern/efi/init.c: Likewise. + * kern/efi/mm.c: Likewise. + * kern/main.c: Likewise. + * kern/err.c: Likewise. + * kern/env.c: Likewise. + * kern/disk.c: Likewise. + * kern/generic/millisleep.c: Likewise. + * kern/generic/rtc_get_time_ms.c: Likewise. + * kern/misc.c: Likewise. + * kern/parser.c: Likewise. + * genmk.rb: Likewise. + * configure.ac: Likewise. + * boot/i386/pc/diskboot.S: Likewise. + * boot/i386/pc/pxeboot.S: Likewise. + * boot/i386/pc/boot.S: Likewise. + * boot/i386/pc/lnxboot.S: Likewise. + * boot/i386/pc/cdboot.S: Likewise. + * parttool/pcpart.c: Likewise. + * video/readers/tga.c: Likewise. + * video/video.c: Likewise. + * video/bitmap.c: Likewise. + * lib/envblk.c: Likewise. + * lib/i386/setjmp.S: Likewise. + * fs/xfs.c: Likewise. + * fs/afs.c: Likewise. + * fs/fat.c: Likewise. + * fs/ntfs.c: Likewise. + * fs/udf.c: Likewise. + * fs/affs.c: Likewise. + * fs/iso9660.c: Likewise. + * fs/hfs.c: Likewise. + * fs/fshelp.c: Likewise. + * fs/ext2.c: Likewise. + * fs/jfs.c: Likewise. + * fs/reiserfs.c: Likewise. + * fs/hfsplus.c: Likewise. + * fs/minix.c: Likewise. + * fs/cpio.c: Likewise. + * fs/sfs.c: Likewise. + * fs/ufs.c: Likewise. + * efiemu/prepare.c: Likewise. + * efiemu/loadcore_common.c: Likewise. + * efiemu/runtime/efiemu.sh: Likewise. + * efiemu/runtime/efiemu.S: Likewise. + * efiemu/runtime/efiemu.c: Likewise. + * efiemu/pnvram.c: Likewise. + * efiemu/main.c: Likewise. + * efiemu/i386/pc/cfgtables.c: Likewise. + * efiemu/i386/loadcore64.c: Likewise. + * efiemu/i386/loadcore32.c: Likewise. + * efiemu/loadcore.c: Likewise. + * efiemu/symbols.c: Likewise. + * efiemu/mm.c: Likewise. + * include/grub/autoefi.h: Likewise. + * include/grub/datetime.h: Likewise. + * include/grub/term.h: Likewise. + * include/grub/hfs.h: Likewise. + * include/grub/lvm.h: Likewise. + * include/grub/i386/tsc.h: Likewise. + * include/grub/i386/linux.h: Likewise. + * include/grub/i386/xnu.h: Likewise. + * include/grub/i386/efiemu.h: Likewise. + * include/grub/i386/pc/biosdisk.h: Likewise. + * include/grub/i386/pc/memory.h: Likewise. + * include/grub/i386/pc/vbe.h: Likewise. + * include/grub/parttool.h: Likewise. + * include/grub/video.h: Likewise. + * include/grub/memory.h: Likewise. + * include/grub/fs.h: Likewise. + * include/grub/partition.h: Likewise. + * include/grub/xnu.h: Likewise. + * include/grub/efi/api.h: Likewise. + * include/grub/efi/pe32.h: Likewise. + * include/grub/efi/memory.h: Likewise. + * include/grub/multiboot.h: Likewise. + * include/grub/usbdesc.h: Likewise. + * include/grub/multiboot2.h: Likewise. + * include/grub/acpi.h: Likewise. + * include/grub/efiemu/efiemu.h: Likewise. + * include/grub/disk.h: Likewise. + * include/grub/ieee1275/ieee1275.h: Likewise. + * include/grub/net.h: Likewise. + * include/grub/machoload.h: Likewise. + * include/grub/macho.h: Likewise. + * include/multiboot.h: Likewise. + * genmoddep.awk: Likewise. + * normal/main.c: Likewise. + * normal/menu_entry.c: Likewise. + * normal/menu_viewer.c: Likewise. + * normal/completion.c: Likewise. + * normal/cmdline.c: Likewise. + * normal/misc.c: Likewise. + * normal/datetime.c: Likewise. + * bus/usb/usbtrans.c: Likewise. + * bus/usb/ohci.c: Likewise. + * bus/usb/uhci.c: Likewise. + * bus/usb/usb.c: Likewise. + * mmap/efi/mmap.c: Likewise. + * mmap/i386/pc/mmap_helper.S: Likewise. + * mmap/i386/pc/mmap.c: Likewise. + * mmap/i386/mmap.c: Likewise. + * mmap/i386/uppermem.c: Likewise. + * mmap/mmap.c: Likewise. + * commands/acpi.c: Likewise. + * commands/echo.c: Likewise. + * commands/blocklist.c: Likewise. + * commands/loadenv.c: Likewise. + * commands/usbtest.c: Likewise. + * commands/boot.c: Likewise. + * commands/parttool.c: Likewise. + * commands/search.c: Likewise. + * commands/cat.c: Likewise. + * commands/i386/pc/play.c: Likewise. + * commands/i386/pc/drivemap.c: Likewise. + * commands/i386/pc/vbeinfo.c: Likewise. + * commands/i386/pc/acpi.c: Likewise. + * commands/i386/pc/vbetest.c: Likewise. + * commands/ls.c: Likewise. + * commands/cmp.c: Likewise. + * commands/test.c: Likewise. + * commands/efi/acpi.c: Likewise. + * commands/gptsync.c: Likewise. + * commands/help.c: Likewise. + * partmap/amiga.c: Likewise. + * partmap/apple.c: Likewise. + * partmap/acorn.c: Likewise. + * partmap/pc.c: Likewise. + * partmap/sun.c: Likewise. + * partmap/gpt.c: Likewise. + * script/sh/lexer.c: Likewise. + * script/sh/function.c: Likewise. + * font/font.c: Likewise. + * font/font_cmd.c: Likewise. + * loader/powerpc/ieee1275/linux.c: Likewise. + * loader/efi/chainloader.c: Likewise. + * loader/multiboot_loader.c: Likewise. + * loader/macho.c: Likewise. + * loader/i386/multiboot.c: Likewise. + * loader/i386/linux.c: Likewise. + * loader/i386/pc/linux.c: Likewise. + * loader/i386/pc/multiboot2.c: Likewise. + * loader/i386/pc/chainloader.c: Likewise. + * loader/i386/pc/xnu.c: Likewise. + * loader/i386/bsd_trampoline.S: Likewise. + * loader/i386/efi/linux.c: Likewise. + * loader/i386/multiboot_elfxx.c: Likewise. + * loader/i386/bsd_helper.S: Likewise. + * loader/i386/bsd.c: Likewise. + * loader/i386/linux_trampoline.S: Likewise. + * loader/i386/xnu_helper.S: Likewise. + * loader/i386/xnu.c: Likewise. + * loader/i386/bsd_pagetable.c: Likewise. + * loader/i386/multiboot_helper.S: Likewise. + * loader/xnu.c: Likewise. + * loader/xnu_resume.c: Likewise. + * io/gzio.c: Likewise. + * term/efi/console.c: Likewise. + * term/terminfo.c: Likewise. + * term/ieee1275/ofconsole.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * term/i386/pc/vesafb.c: Likewise. + * term/i386/pc/vga.c: Likewise. + * term/usb_keyboard.c: Likewise. + * term/gfxterm.c: Likewise. + * aclocal.m4: Likewise. + * util/lvm.c: Likewise. + * util/grub.d/30_os-prober.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/console.c: Likewise. + * util/grub-macho2img.c: Likewise. + * util/grub-probe.c: Likewise. + * util/hostfs.c: Likewise. + * util/i386/pc/grub-mkimage.c: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/i386/efi/grub-mkimage.c: Likewise. + * util/grub-mkconfig.in: Likewise. + * util/raid.c: Likewise. + * util/resolve.c: Likewise. + * util/grub-mkdevicemap.c: Likewise. + * util/grub-emu.c: Likewise. + * util/getroot.c: Likewise. + * util/hostdisk.c: Likewise. + * util/usb.c: Likewise. + * util/grub-editenv.c: Likewise. + * util/misc.c: Likewise. + +2009-06-10 Felix Zielcke + + * gendistlist.sh (EXTRA_DISTFILES): Add `genhandlerlist.sh' and + `genparttoollist.sh'. + (DISTDIRS): Add `efiemu', `mmap', `parttool' and `script'. + Add `*.sh' to the list find searches for and change `mdate.sh' + to `mdate-sh'. + +2009-06-10 Pavel Roskin + + * include/grub/multiboot2.h: Provide compatibility defines for + multiboot2.h. + * include/multiboot2.h: Include stdint.h only if needed, using + angle brackets. + * loader/i386/pc/multiboot2.c: Include multiboot2.h after + grub/multiboot2.h. + * loader/ieee1275/multiboot2.c: Likewise. + * loader/multiboot2.c: Likewise. + * loader/multiboot_loader.c: Likewise. + + * configure.ac: Use -nostdlib when probing for the target. It + should not be required to have libc for the target. + + * configure.ac: Remove checks for __bswapsi2 and __bswapdi2, + they fail without libc headers for the target. + * include/grub/powerpc/libgcc.h: Use weak attribute for all + exports. + * include/grub/sparc64/libgcc.h: Likewise. Don't use + preprocessor conditionals. + + * conf/common.rmk: Compile tar.mod from tar.c, not cpio.c. The + build system doesn't need to be aware of the tar.c internals. + +2009-06-09 Michel Hermier + + * fs/i386/pc/pxe.c (grub_pxefs_read): Fix returned values. + +2009-06-09 Robert Millan + + * util/deviceiter.c (grub_util_iterate_devices): Increase number of + disk limit to 26 for IDE, Virtio, Xen and SCSI. + +2009-06-09 Felix Zielcke + + * util/i386/pc/grub-install.in: Change the error message if UUIDs + aren't available if ata.mod gets used. + +2009-06-09 Oliver Henshaw + + * bus/usb/ohci.c (grub_ohci_pci_iter): Link struct only after + initialising controller. + * bus/usb/uhci.c (grub_uhci_pci_iter): Likewise. + +2009-06-08 Felix Zielcke + + * util/i386/pc/grub-install.in: Add a parameter --disk-module + to choose between ata and biosdisk module on i386-pc. + +2009-06-08 Oliver Henshaw + + * bus/usb/ohci.c (grub_ohci_pci_iter): Define the Class, + Subclass and Programming Interface fields in terms of the 3 byte + Class Code register. + * bus/usb/uhci.c (grub_uhci_pci_iter): Likewise. + + * bus/usb/ohci.c (grub_ohci_pci_iter): Check that programming + interface is OHCI. Add grub_dprintf for symmetry with + bus/usb/uhci.c. + * bus/usb/uhci.c (grub_uhci_pci_iter): Check that programming + interface is UHCI. Add interf variable for programming + interface. Print interface with class/subclass. + + * bus/usb/ohci.c: Set interf with correct field. + + * bus/usb/uhci.c: Remove unneeded doubled lines. + * bus/usb/ohci.c: Likewise. Change interf to grub_uint32_t. + Remove whitespace inside comment. + +2009-06-08 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): When processing `vga=', use + as fallback an equivalent option without depth. + +2009-06-08 Vladimir Serbinenko + + Not fail if unable to retrieve C/H/S on LBA disks + + * disk/i386/pc/biosdisk.c (grub_biosdisk_open): behave gracefully + if unable to retrieve C/H/S on LBA disks + +2009-06-08 Pavel Roskin + + * fs/hfs.c (grub_hfs_find_dir): Use union to avoid a warning + about aliasing. + +2009-06-08 Felix Zielcke + + * Makefile.in (uninstall): Remove all $lib_DATA files. + +2009-06-08 Vladimir Serbinenko + + Bugfix: install on partitionless device + + * util/hostdisk.c (grub_util_biosdisk_get_grub_dev): check if os_dev + is a whole disk + +2009-06-08 Felix Zielcke + + * Makefile.in (uninstall): Remove all $include_DATA files. + +2009-06-08 Felix Zielcke + + * commands/true.c: New file. Implement the true and false commands. + * conf/common.rmk.c (pkglib_MODULES): Add `true.mod'. + (true_mod_SOURCES): New variable. + (true_mod_CFLAGS): Likewise. + (true_mod_LDFLAGS): Likewise. + +2009-06-05 Colin D Bennett + + Optimized font character lookup using binary search instead of linear + search. Fonts now are required to have the character index ordered by + code point. + + * font/font.c (load_font_index): Verify that fonts have ordered + character indices. + (find_glyph): Use binary search instead of linear search to find a + character in a font. + +2009-06-05 Michael Scherer + + * fs/hfsplus.c (grub_hfsplus_mount): Determine if the filesystem + uses case sensitive btree. + (grub_hfsplus_iterate_dir): Use GRUB_FSHELP_CASE_INSENSITIVE + only for case insensitive filesystems. + +2009-06-05 Vladimir Serbinenko + + * conf/i386-pc.rmk (efiemu_mod_CFLAGS): remove -Werror -Wall + * conf/common.rmk (search_mod_CFLAGS): likewise + +2009-06-04 Vladimir Serbinenko + + * kern/i386/pc/startup.S [APPLE_CC]: block of nops to + compensate a compiler bug + +2009-06-04 Vladimir Serbinenko + + * include/grub/term.h (GRUB_TERM_BACKSPACE): explicitly define as 8 + instead of '\b' + +2009-06-04 Vladimir Serbinenko + + Definitions for creating asm symbols with Apple's CC + + * include/grub/symbol.h [APPLE_CC] (FUNCTION): new macro + [APPLE_CC] (VARIABLE): likewise + +2009-06-04 Vladimir Serbinenko + + Disable lnxboot.img when compiled + with Apple's CC + + * conf/i386-pc.rmk (pkglib_IMAGES): remove lnxboot.img + pkglib_IMAGES [! TARGET_APPLE_CC] (pkglib_IMAGES): add lnxboot.img + * boot/i386/pc/lnxboot.S [APPLE_CC]: define an #error + [! APPLE_CC] (CODE_LENG): skip + [! APPLE_CC] (setup_sects): likewise + [! APPLE_CC]: skip filling + +2009-06-04 Vladimir Serbinenko + + Address in trampolines based on 32-bit registers when compiled + with Apple's CC + + * loader/i386/xnu_helper.S [APPLE_CC]: use 32-bit registers + for addresses + * loader/i386/linux_trampoline.S [APPLE_CC]: likewise + +2009-06-04 Vladimir Serbinenko + + Avoid aliases when compiling with Apple's CC for PCBIOS machine + + * kern/misc.c [APPLE_CC] (memcpy): new function + [APPLE_CC] (memmove): likewise + [APPLE_CC && !GRUB_UTIL] (grub_err_printf): likewise + (memcpy): define alias conditionally on !APPLE_CC + (memset): likewise + (abort): likewise + * include/grub/misc.h (memove): don't define when both GRUB_UTIL and + APPLE_CC are defined + * include/grub/list.h [APPLE_CC] (grub_assert_fail): new function + (grub_assert_fail): make prototype conditional + +2009-06-04 Vladimir Serbinenko + + Use grub-macho2img when compiling with Apple's CC for PCBIOS machine + + * conf/common.rmk (bin_UTILITIES): add (on false on condition) + grub-macho2img + (CLEANFILES): add grub-macho2img + (grub_macho2img_SOURCES): new variable + * kern/i386/pc/startup.S (bss_start): new variable + (bss_end): likewise + * genmk.rb: use grub-macho2img for *.img when compiled with Apple's CC + * util/grub-macho2img.c: new file + +2009-06-04 Vladimir Serbinenko + + Use objconv when compiling with Apple's CC + + * conf/i386-pc.rmk (efiemu32.o): use OBJCONV if defined + (efiemu64.o): likewise + (efiemu64_c.o): omit -mcmodel=large and add -DAPPLE_CC=1 + when compiling with Apple's CC + (efiemu64_s.o): likewise + * configure.ac: check for objconv when compiling with Apple's CC + * genmk.rb: use objconv for modules when compiled with Apple's CC + +2009-06-04 Vladimir Serbinenko + + Define segment as well as section when compiling with + Apple's CC + + * efiemu/runtime/efiemu.c (PHYSICAL_ATTRIBUTE): new definition + (efiemu_set_virtual_address_map): declare with PHYSICAL_ATTRIBUTE + (efiemu_convert_pointer): likewise + (efiemu_set_virtual_address_map): likewise + (efiemu_convert_pointer): likewise + (efiemu_getcrc32): likewise + (init_crc32_table): likewise + (reflect): likewise + * include/grub/dl.h (GRUB_MOD_NAME): define segment with Apple's CC + (GRUB_MOD_DEP): likewise + +2009-06-04 Vladimir Serbinenko + + Allow a compilation without -mcmodel=large + + * kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB + when compiled without -mcmodel=large + (filter_memory_map): remove memory post 4 GiB when compiled + without -mcmodel=large + * configure.ac: fail gracefully and add -DMCMODEL_SMALL=1 to + TARGET_CFLAGS when -mcmodel=large isn't supported + +2009-06-04 Vladimir Serbinenko + + Remove nested functions in efiemu core + + * efiemu/runtime/efiemu.c (reflect): make static instead of nested + +2009-06-04 Vladimir Serbinenko + + Avoid clobbering %ebx/%rbx in inline assembly with Apple's CC + + * efiemu/runtime/efiemu.c (write_cmos): use %cl instead of %bl as + temporary storage + * include/grub/i386/tsc.h (grub_get_tsc): restore %rbx/%ebx when + using Apple's CC + (grub_cpu_is_tsc_supported): likewise + * loader/i386/xnu.c (guessfsb): restore %rbx/%ebx in inline assembly + +2009-06-04 Vladimir Serbinenko + + Absolute addressing through constant with Apple's cc + + * kern/i386/pc/startup.S: Define necessary constants + and address through it when using ABS with Apple's CC + * boot/i386/pc/diskboot.S: likewise + * boot/i386/pc/boot.S: likewise + * boot/i386/pc/lnxboot.S: likewise + * boot/i386/pc/cdboot.S: likewise + * mmap/i386/pc/mmap_helper.S: likewise + * commands/i386/pc/drivemap_int13h.S: likewise + +2009-06-04 Vladimir Serbinenko + + Check if compiler is apple cc + + * Makefile.in (ASFLAGS): new variable + (TARGET_ASFLAGS): likewise + (TARGET_MODULE_FORMAT): likewise + (TARGET_APPLE_CC): likewise + (OBJCONV): likewise + (TARGET_IMG_CFLAGS): likewise + (TARGET_CPPFLAGS): add includedir + * configure.ac: call grub_apple_cc and grub_apple_target_cc + (TARGET_IMG_LDFLAGS): Add -Wl,-Ttext,. All users updated + Check for linker script only if compiler isn't Apple's CC + (TARGET_MODULE_FORMAT): set + (TARGET_APPLE_CC): likewise + (TARGET_ASFLAGS): likewise + (ASFLAGS): likewise + Check for objcopy only if compiler isn't Apple's CC + Check for BSS symbol only if compiler isn't Apple's CC + * genmk.rb: adapt nm options if we use Apple's utils + * aclocal.m4 (grub_apple_cc): new test + (grub_apple_target_cc): likewise + +2009-06-04 Vladimir Serbinenko + + Simplify sed expressions and improve awk + + * Makefile.in (install-local): simplify sed expression + * gencmdlist.sh: likewise + * genmoddep.awk: avoid adding module as a dependency of itself + +2009-06-04 Vladimir Serbinenko + + Add missing start symbols + + * boot/i386/pc/boot.S: add start + * boot/i386/pc/pxeboot.S: likewise + +2009-06-04 Vladimir Serbinenko + + Fix wrong assumptions with grub-mkimage on EFI + + * i386/efi/grub-mkimage.c (read_kernel_module): don't write prefix here + (relocate_addresses): consider both r_addend and value at offset + (make_mods_section): zerofill modinfo and header + (convert_elf): write prefix here + +2009-06-04 Vladimir Serbinenko + + Use .asciz instead of .string + + * i386/pc/diskboot.S: use .asciz instead of .string + * i386/pc/boot.S: likewise + * include/grub/dl.h (GRUB_MOD_DEP): likewise + (GRUB_MOD_NAME): likewise + +2009-06-04 Vladimir Serbinenko + + gfxpayload support + + * commands/videotest.c (grub_cmd_videotest): use grub_video_set_mode + * include/grub/video.h (GRUB_VIDEO_MODE_TYPE_PURE_TEXT): new definition + (grub_video_setup): remove + (grub_video_set_mode): new prototype + * loader/i386/linux.c (DEFAULT_VIDEO_MODE): new definition + (vid_mode): remove + (linux_vesafb_res): compile only on PCBIOS + (grub_linux_boot): support gfxpayload + * loader/i386/pc/xnu.c (video_hook): new function + (grub_xnu_set_video): support gfxpayload + * term/gfxterm.c (DEFAULT_VIDEO_WIDTH): removed + (DEFAULT_VIDEO_HEIGHT): likewise + (DEFAULT_VIDEO_FLAGS): likewise + (DEFAULT_VIDEO_MODE): new definition + (video_hook): new function + (grub_gfxterm_init): use grub_video_set_mode + * util/grub.d/30_os-prober.in: remove explicit modesetting before + loading xnu + * video/video.c (grub_video_setup): removed + (grub_video_set_mode): new function based on grub_gfxterm_init and + grub_video_setup + +2009-06-04 Vladimir Serbinenko + + Avoid calling biosdisk in drivemap + + * commands/i386/pc/drivemap.c (parse_biosdisk): remove + (revparse_biosdisk): likewise + (list_mappings): derive name from id directly + (grub_cmd_drivemap): use tryparse_diskstring + +2009-06-04 Vladimir Serbinenko + + Script fixes + + * include/grub/script_sh.h (grub_script_cmdline): remove cmdline + (grub_lexer_param): add tokenonhold + (grub_script_create_cmdline): remove cmdline. All callers updated + (grub_script_function_create): make functionname + grub_script_arg. All callers updated + (grub_script_execute_argument_to_string): new prototype + * kern/parser.c (state_transitions): reorder + (grub_parser_cmdline_state): fix a bug and make more compact + * script/sh/execute.c (grub_script_execute_argument_to_string): + make global + (grub_script_execute_cmdline): use new format + * script/sh/function.c (grub_script_function_create): make functionname + grub_script_arg. All callers updated + * script/sh/lexer.c (grub_script_lexer_init): initialize tokenonhold + (grub_script_yylex): remove + (grub_script_yylex2): renamed to ... + (grub_script_yylex): ...renamed + parse the expressions like a${b}c + * script/sh/parser.y (GRUB_PARSER_TOKEN_ARG): new typed terminal + (GRUB_PARSER_TOKEN_VAR): remove + (GRUB_PARSER_TOKEN_NAME): likewise + ("if"): declare as typeless + ("while"): likewise + ("function"): likewise + ("else"): likewise + ("then"): likewise + ("fi"): likewise + (text): remove + (argument): likewise + (script): accept empty scripts and make exit on error + (arguments): use GRUB_PARSER_TOKEN_ARG + (function): likewise + (command): move error handling to script + (menuentry): move grub_script_lexer_ref before + * script/sh/script.c (grub_script_create_cmdline): remove cmdline + argument. All callers updated + +2009-06-04 Robert Millan + + Prevent GRUB from probing floppies during boot. + + * conf/common.rmk (search_mod_CFLAGS): Use `-Werror -Wall'. + * commands/search.c (options): Add --no-floppy. + (search_fs, search_file, grub_cmd_search): Support --no-floppy. + * util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Use + --no-floppy when searching for UUIDs. + +2009-06-04 Robert Millan + + Simplify the code duplication in commands/search.c. + + * commands/search.c (search_label, search_fs_uuid): Merge into ... + (search_fs): ... this. Update all users. + +2009-06-03 Felix Zielcke + + * util/grub-mkconfig.in (update_grub_dir): Rename to grub_mkconfig_dir. + +2009-05-28 Pavel Roskin + + * Makefile.in: Don't use "cp -d", it doesn't work on FreeBSD. + Remove the original symlink explicitly. + + * fs/hfs.c (grub_hfs_find_dir): Skip sequences of slashes, not + just one slash. That's how grub_fshelp_find_file() does it. + +2009-05-26 Pavel Roskin + + * genmk.rb: Avoid shadowing variable `s', rename the outer `s' + to `str'. + + * util/getroot.c (grub_util_get_dev_abstraction): Mark os_dev as + possibly unused. + +2009-05-25 Christian Franke + + * disk/ata.c (grub_ata_wait_not_busy): Add debug output of status + register. + (grub_atapi_identify): Add wait after drive select. + (grub_ata_identify): Do more strict status register check before + calling grub_atapi_identify (). Suppress error message if status + register is 0x00 after command failure. Add status register + check after PIO read to avoid bogus identify due to stuck DRQ. + Thanks to Pavel Roskin for testing. + (grub_device_initialize): Remove unsafe status register check. + Thanks to 'phcoder' for problem report and patch. + Prevent sign extension in debug message. + +2009-05-23 Colin D Bennett + + Cleaned up `include/grub/normal.h'. Grouped prototypes by + definition file, and functions defined in `normal/menu.c' have had + their prototypes moved to `include/grub/menu.h' for consistency. + + * include/grub/menu.h (grub_menu_execute_callback): Added; moved + from normal.h. + (grub_menu_get_entry): Likewise. + (grub_menu_get_timeout): Likewise. + (grub_menu_set_timeout): Likewise. + (grub_menu_execute_entry): Likewise. + (grub_menu_execute_with_fallback): Likewise. + (grub_menu_entry_run): Likewise. + + * include/grub/normal.h: Re-ordered and grouped function + prototypes by file that the function is defined in. + (grub_menu_execute_callback): Removed; moved to menu.h. + (grub_menu_get_entry): Likewise. + (grub_menu_get_timeout): Likewise. + (grub_menu_set_timeout): Likewise. + (grub_menu_execute_entry): Likewise. + (grub_menu_execute_with_fallback): Likewise. + (grub_menu_entry_run): Likewise. + (grub_menu_addentry): Renamed from this ... + (grub_normal_add_menu_entry): ... to this. + + * normal/main.c (grub_menu_addentry): Renamed from this ... + (grub_normal_add_menu_entry): ... to this. + + * script/sh/execute.c (grub_script_execute_menuentry): Update + reference to renamed grub_menu_addentry function. + +2009-05-23 Felix Zielcke + + * commands/i386/pc/drivemap.c (MODNAME): Remove. Update all users. + +2009-05-22 Pavel Roskin + + * aclocal.m4 (grub_I386_CHECK_REGPARM_BUG): Remove. + * configure.ac: Don't call grub_I386_CHECK_REGPARM_BUG. Define + NESTED_FUNC_ATTR using AH_BOTTOM. Use regparm(1) only when + compiling for the i386 targets, but not for the utilities. + + * include/grub/i386/pc/kernel.h (grub_boot_drive): Change type + to grub_uint8_t. + (grub_root_drive): Likewise. + * kern/i386/pc/startup.S (grub_boot_drive): Change size to byte, + remove alignment. + (grub_root_drive): Change size to byte. + (grub_start_addr): Remove. + (grub_end_addr): Likewise. + (grub_apm_bios_info): Likewise. + +2009-05-21 Felix Zielcke + + * normal/i386: Remove. + * normal/powerpc: Likewise. + * normal/sparc64: Likewise. + * normal/x86_64: Likewise. + +2009-05-19 Vladimir Serbinenko + + * conf/x86_64-efi.rmk (linux_mod_ASFLAGS): Add missing variable + * loader/i386/linux_trampoline.S: Fix indentation + * loader/i386/xnu_helper.S: Likewise + +2009-05-18 Colin D Bennett + + Display error messages when parsing a Lua statement fails. + Previously, executing a syntactically invalid statement like + ")foo" or "bar;" would silently fail. + + * script/lua/grub_main.c (handle_lua_error): New function. + (grub_lua_parse_line): Improved reporting of Lua parser and + execution errors. + +2009-05-17 Vladimir Serbinenko + + Remove -Werror which causes build to fail on some systems + + * conf/i386-pc.rmk (xnu_mod_CFLAGS): Remove -Werror -Wall + * conf/i386-efi.rmk (xnu_mod_CFLAGS): Likewise + * conf/x86_64-efi.rmk (xnu_mod_CFLAGS): Likewise + +2009-05-17 Vladimir Serbinenko + + trampoline for linux on 64-bit platform + + * conf/x86_64-efi.rmk (linux_mod_SOURCES): added + loader/i386/efi/linux_trampoline.S + * include/grub/x86_64/efi/loader.h (grub_linux_real_boot): removed + declaration + * kern/x86_64/efi/startup.S (grub_linux_real_boot): moved from + here + * loader/i386/linux_trampoline.S: moved here + * loader/i386/efi/linux.c (allocate_pages): reserve space for + trampoline + (jumpvector): removed + (grub_linux_trampoline_start): new declaration + (grub_linux_trampoline_end): likewise + (grub_linux_boot): use trampoline when on 64-bit platform + * loader/i386/linux.c: likewise + +2009-05-16 Pavel Roskin + + * script/lua/grub_lib.c (grub_lua_getenv): Make name and value + const to avoid a warning. + (grub_lua_setenv): Likewise. + * script/lua/grub_main.c (grub_lua_parse_line): Use size_t for + lmsg to fix a warning. + +2009-05-16 Felix Zielcke + + * conf/i386.rmk (setjmp_mod_CFLAGS): Rename to ... + (setjmp_mod_ASFLAGS): ... this. Set to $(COMMON_ASFLAGS). + * conf/x86_64-efi.rmk (setjmp_mod_CFLAGS): Rename to ... + (setjmp_mod_ASFLAGS): ... this. Set to $(COMMON_ASFLAGS). + * conf/powerpc-ieee1275.rmk (setjmp_mod_CFLAGS): Rename to ... + (setjmp_mod_ASFLAGS): ... this. Set to $(COMMON_ASFLAGS). + * conf/sparc64-ieee1275.rmk (setjmp_mod_CFLAGS): Rename to ... + (setjmp_mod_ASFLAGS): ... this. Set to $(COMMON_ASFLAGS). + +2009-05-16 Felix Zielcke + + * util/grub-mkconfig.in: Export GRUB_TERMINAL_INPUT. + +2009-05-16 Bean + + * conf/common.rmk (pkglib_MODULES): Add lua.mod. + (lua_mod_SOURCES): New variable. + (lua_mod_CFLAGS): Likewise. + (lua_mod_LDFLAGS): Likewise. + + * conf/i386.rmk (pkglib_MODULES): Add setjmp.mod. + (setjmp_mod_SOURCES): New variable. + (setjmp_mod_CFLAGS): Likewise. + (setjmp_LDFLAGS): Likewise. + + * conf/x86_64-efi.rmk (pkglib_MODULES): Add setjmp.mod. + (setjmp_mod_SOURCES): New variable. + (setjmp_mod_CFLAGS): Likewise. + (setjmp_LDFLAGS): Likewise. + + * conf/powerpc-ieee1275.rmk (pkglib_MODULES): Add setjmp.mod. + (setjmp_mod_SOURCES): New variable. + (setjmp_mod_CFLAGS): Likewise. + (setjmp_LDFLAGS): Likewise. + + * conf/sparc64-ieee1275.rmk (pkglib_MODULES): Add setjmp.mod. + (setjmp_mod_SOURCES): New variable. + (setjmp_mod_CFLAGS): Likewise. + (setjmp_LDFLAGS): Likewise. + + * normal/i386/setjmp.S: Moved from here ... + * lib/i386/setjmp.S: ... Moved here + * normal/x86_64/setjmp.S: Moved from here ... + * lib/x86_64/setjmp.S: ... Moved here + * normal/powerpc/setjmp.S: Moved from here ... + * lib/powerpc/setjmp.S: ... Moved here + * normal/sparc64/setjmp.S: Moved from here ... + * lib/sparc64/setjmp.S: ... Moved here + + * include/grub/i386/setjmp.h (grub_setjmp): Don't use attribute + returns_twice in mingw. + + * script/lua/grub_lib.c: New file. + * script/lua/grub_lib.h: Likewise. + * script/lua/grub_lua.h: Likewise. + * script/lua/grub_main.c: Likewise. + * script/lua/lapi.c: Likewise. + * script/lua/lapi.h: Likewise. + * script/lua/lauxlib.c: Likewise. + * script/lua/lauxlib.h: Likewise. + * script/lua/lbaselib.c: Likewise. + * script/lua/lcode.c: Likewise. + * script/lua/lcode.h: Likewise. + * script/lua/ldblib.c: Likewise. + * script/lua/ldebug.c: Likewise. + * script/lua/ldebug.h: Likewise. + * script/lua/ldo.c: Likewise. + * script/lua/ldo.h: Likewise. + * script/lua/ldump.c: Likewise. + * script/lua/lfunc.c: Likewise. + * script/lua/lfunc.h: Likewise. + * script/lua/lgc.c: Likewise. + * script/lua/lgc.h: Likewise. + * script/lua/linit.c: Likewise. + * script/lua/liolib.c: Likewise. + * script/lua/llex.c: Likewise. + * script/lua/llex.h: Likewise. + * script/lua/llimits.h: Likewise. + * script/lua/lmathlib.c: Likewise. + * script/lua/lmem.c: Likewise. + * script/lua/lmem.h: Likewise. + * script/lua/loadlib.c: Likewise. + * script/lua/lobject.c: Likewise. + * script/lua/lobject.h: Likewise. + * script/lua/lopcodes.c: Likewise. + * script/lua/lopcodes.h: Likewise. + * script/lua/loslib.c: Likewise. + * script/lua/lparser.c: Likewise. + * script/lua/lparser.h: Likewise. + * script/lua/lstate.c: Likewise. + * script/lua/lstate.h: Likewise. + * script/lua/lstring.c: Likewise. + * script/lua/lstring.h: Likewise. + * script/lua/lstrlib.c: Likewise. + * script/lua/ltable.c: Likewise. + * script/lua/ltable.h: Likewise. + * script/lua/ltablib.c: Likewise. + * script/lua/ltm.c: Likewise. + * script/lua/ltm.h: Likewise. + * script/lua/lua.h: Likewise. + * script/lua/luaconf.h: Likewise. + * script/lua/lualib.h: Likewise. + * script/lua/lundump.c: Likewise. + * script/lua/lundump.h: Likewise. + * script/lua/lvm.c: Likewise. + * script/lua/lvm.h: Likewise. + * script/lua/lzio.c: Likewise. + * script/lua/lzio.h: Likewise. + +2009-05-16 Bean + + * include/grub/kernel.h (grub_module_header_types): Add type + OBJ_TYPE_CONFIG. + + * kern/main.c (grub_load_config): New function. + (grub_main): Call grub_load_config to read boot config. + + * grub-mkimage (generate_image): New parameter config_path. + (options): New option --config. + (main): Parse --config option, and pass it to generate_image. + +2009-05-14 Christian Franke + + * commands/i386/pc/drivemap_int13h.S: Add missing EXT_C for symbols. + This fixes build on Cygwin. + +2009-05-14 Pavel Roskin + + * commands/i386/pc/drivemap_int13h.S: Eliminate unconditional + jump. This saves two bytes, so the typical case of 2 swapped + drives would fit 32 bytes. + +2009-05-13 Pavel Roskin + + * loader/i386/multiboot.c (grub_multiboot): Cast mmap_addr to + grub_uint32_t to avoid a warning. + + * loader/i386/linux.c (allocate_pages): When assigning + real_mode_mem, cast through grub_size_t to fix a warning. The + code already makes sure that the value would fit a pointer. + (grub_linux_setup_video): Cast render_target->data to + grub_size_t to fix a warning. + +2009-05-13 Javier Martín + + * commands/i386/pc/drivemap.c: New file - implement drivemap + command. + * commands/i386/pc/drivemap_int13h.S: New file - int13 handler. + * conf/i386-pc.rmk: Add drivemap.c and drivemap_int13h.S. + +2009-05-13 Pavel Roskin + + * util/i386/pc/grub-setup.c (setup): Remove unused variable + embedding_area_exists. + +2009-05-13 Robert Millan + + * util/i386/pc/grub-setup.c (setup): Restructure code flow to make + it easier to understand / work with. + Improve warning messages for cases where there's no embedding area, + or when it is too small (or core.img too large). + +2009-05-13 Pavel Roskin + + * loader/i386/pc/multiboot2.c: Add necessary includes for + grub_multiboot2_real_boot(). + + * fs/iso9660.c (grub_iso9660_iterate_dir): The file mode in the + PX record is always little-endian. We only need the lower 2 + bytes of the mode. + + * fs/cpio.c: Use the same name "struct head" for tar and cpio to + facilitate code reuse. + (grub_cpio_mount): Use "struct head", not a char buffer. This + fixes a warning reported by gcc 4.4. + + * kernel/disk.c (grub_disk_read): Use void pointer for the + buffer. + (grub_disk_write): Use const void pointer for the buffer. + Adjust all callers. Remove unnecessary casts. + +2009-05-10 Robert Millan + + * util/i386/pc/grub-install.in: Update copyright year. + +2009-05-09 Vladimir Serbinenko + + gptsync + + * commands/gptsync.c: new file + * conf/common.rmk (pkglib_MODULES): add gptsync.mod + (gptsync_mod_SOURCES): new variable + (gptsync_mod_CFLAGS): likewise + (gptsync_mod_LDFLAGS): likewise + * include/grub/pc_partition.h (GRUB_PC_PARTITION_TYPE_NTFS): + new definition + (GRUB_PC_PARTITION_TYPE_HFS): likewise + * conf/i386-coreboot.rmk (grub_emu_SOURCES): add commands/gptsync.c + * conf/i386-ieee1275.rmk: likewise + * conf/i386-pc.rmk: likewise + * conf/powerpc-ieee1275.rmk: likewise + +2009-05-09 Vladimir Serbinenko + + Fixed grub-emu + + * kern/dl.c (grub_dl_ref): omit when compiling grub-emu + (grub_dl_ref): likewise + +2009-05-08 Robert Millan + + * util/i386/pc/grub-setup.c (setup): Factorize find_usable_region(), + split in two functions (one for msdos and one for gpt). + +2009-05-08 Pavel Roskin + + * disk/raid.c (grub_raid_block_xor): Make buf2 constant, it's + not modified. + + * disk/raid6_recover.c (grub_raid6_recover): Fix warnings about + uninitialized err[0] and err[1]. Rename them to bad1 and bad2. + Initialize them with -1. Add sanity check for bad1. Eliminate + nerr variable. + +2009-05-08 David S. Miller + + * util/sparc64/ieee1275/grub-ofpathname.c (main): Set progname. + +2009-05-06 Robert Millan + + * util/i386/pc/grub-setup.c (setup): Fix check for embed region + existence. + +2009-05-05 Felix Zielcke + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add + `kern/rescue_reader.c', `kern/rescue_parser.c' and `normal/autofs.c'. + +2009-05-05 David S. Miller + + * util/sparc64/ieee1275/grub-install.in: Fix sed arg quoting. + +2009-05-05 Pavel Roskin + + * include/grub/dl.h [GRUB_UTIL]: Provide inline implementations + of grub_dl_ref() and grub_dl_unref(). + * commands/parttool.c: Remove preprocessor conditionals around + grub_dl_ref() and grub_dl_unref(). + * fs/affs.c: Likewise. + * fs/afs.c: Likewise. + * fs/cpio.c: Likewise. + * fs/ext2.c: Likewise. + * fs/fat.c: Likewise. + * fs/hfs.c: Likewise. + * fs/hfsplus.c: Likewise. + * fs/iso9660.c: Likewise. + * fs/jfs.c: Likewise. + * fs/minix.c: Likewise. + * fs/ntfs.c: Likewise. + * fs/reiserfs.c: Likewise. + * fs/sfs.c: Likewise. + * fs/udf.c: Likewise. + * fs/ufs.c: Likewise. + * fs/xfs.c: Likewise. + * include/grub/dl.h: Likewise. + * loader/xnu.c: Likewise. + +2009-05-04 Pavel Roskin + + * commands/acpi.c: Remove unused variable my_mod. + * partmap/amiga.c: Likewise. + * partmap/apple.c: Likewise. + * partmap/gpt.c: Likewise. + * partmap/pc.c: Likewise. + * partmap/sun.c: Likewise. + * term/gfxterm.c: Likewise. + * term/i386/pc/vesafb.c: Likewise. + * term/i386/pc/vga.c: Likewise. + +2009-05-04 David S. Miller + + * kern/ieee1275/openfw.c (grub_children_iterate): Fix string + pointer args to grub_ieee1275_get_property(). + + * conf/sparc64-ieee1275.rmk: Fix build due to missing '\'. + + * disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Bypass cdrom + devices, and do not traverse down under controller nodes. + + * disk/ieee1275/ofdisk.c (compute_dev_path): New. + (grub_ofdisk_open): Use it to un-escape "," characters. + * kern/disk.c (find_part_sep): New. + (grub_disk_open): Use it to find the first non-escaped ',' + character in the disk name. + * util/ieee1275/devicemap.c (escape_of_path): New. + (grub_util_emit_devicemap_entry): Use it. + * util/sparc64/ieee1275/grub-install.in: Update script to + strip partition specifiers properly by not triggering on + '\' escaped ',' characters. + +2009-05-04 Robert Millan + + * include/grub/i386/linux.h (GRUB_LINUX_VID_MODE_VESA_START): Set + to 0x300. + * loader/i386/linux.c (vga_modes, linux_vesafb_res): Add a few + resolutions. + (linux_vesafb_modes): Add a lot of additional modes to the list (based + on documentation from Wikipedia). + +2009-05-04 Pavel Roskin + + * disk/ata.c: Spelling fixes. + * disk/raid.c: Likewise. + * disk/usbms.c: Likewise. + * disk/dmraid_nvidia.c: Likewise. + * kern/ieee1275/openfw.c: Likewise. + * kern/ieee1275/init.c: Likewise. + * kern/ieee1275/cmain.c: Likewise. + * boot/i386/pc/cdboot.S: Likewise. + * video/readers/png.c: Likewise. + * video/i386/pc/vbe.c: Likewise. + * fs/udf.c: Likewise. + * fs/hfs.c: Likewise. + * fs/reiserfs.c: Likewise. + * efiemu/runtime/efiemu.c: Likewise. + * efiemu/main.c: Likewise. + * efiemu/mm.c: Likewise. + * include/grub/elf.h: Likewise. + * include/grub/xnu.h: Likewise. + * include/grub/usbdesc.h: Likewise. + * include/grub/usb.h: Likewise. + * include/grub/script_sh.h: Likewise. + * include/grub/lib/LzmaEnc.h: Likewise. + * include/grub/efiemu/efiemu.h: Likewise. + * include/grub/command.h: Likewise. + * normal/menu.c: Likewise. + * normal/main.c: Likewise. + * normal/datetime.c: Likewise. + * bus/usb/uhci.c: Likewise. + * mmap/i386/uppermem.c: Likewise. + * mmap/mmap.c: Likewise. + * commands/acpi.c: Likewise. + * commands/test.c: Likewise. + * partmap/apple.c: Likewise. + * font/font.c: Likewise. + * loader/sparc64/ieee1275/linux.c: Likewise. + * loader/macho.c: Likewise. + * loader/i386/bsd_trampoline.S: Likewise. + * loader/i386/bsd.c: Likewise. + * loader/xnu.c: Likewise. + * term/i386/pc/vesafb.c: Likewise. + * term/usb_keyboard.c: Likewise. + * util/resolve.c: Likewise. + * util/getroot.c: Likewise. + +2009-05-04 Felix Zielcke + + * conf/i386-pc.rmk (libpkg_DATA): Rename to pkglib_DATA. + +2009-05-04 Robert Millan + + * loader/i386/linux.c [GRUB_MACHINE_PCBIOS] (grub_cmd_linux): Fix + build error. + +2009-05-04 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): Make "vga=" compatibility + parameter only available on BIOS. + +2009-05-04 Vladimir Serbinenko + + Removed wrong semicolon in declaration + + * grub/misc.h (grub_dprintf): remove semicolon + +2009-05-04 Robert Millan + + * loader/i386/linux.c (GRUB_ASSUME_LINUX_HAS_FB_SUPPORT): New macro. + (grub_linux_boot): Don't check for `linux_vesafb_modes' bounds (this + is done by grub_cmd_linux() now). + [! GRUB_ASSUME_LINUX_HAS_FB_SUPPORT]: If "vga=" parameter wasn't set, + restore video to text mode. + (grub_cmd_linux): Default `vid_mode' initialization to 0, which + indicates lack of "vga=" parameter. "vga=0" is mapped to + `GRUB_LINUX_VID_MODE_NORMAL'. + +2009-05-04 Felix Zielcke + + * conf/i386-efi.rmk (grub_emu_SOURCES): Remove `normal/execute.c', + `normal/lexer.c', `kern/rescue.c', `normal/function.c', `normal/misc.c' + and `normal/script.c'. Add `kern/rescue_reader.c', + `kern/rescue_parser.c', `script/sh/main.c', `script/sh/execute.c', + `script/sh/function.c', `script/sh/lexer.c', `script/sh/script.c' and + `grub_script.tab.c'. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * Makefile.in: Remove duplicated 2008 in Copyright line. + +2009-05-04 Robert Millan + + * util/misc.c (grub_util_warn): New function. Emits a warning + unconditionally. + * include/grub/util/misc.h (grub_util_warn): New declaration. + + * util/i386/pc/grub-install.in: Understand --force and pass it down + to grub-setup. + + * util/i386/pc/grub-setup.c (main): Understand --force and pass it + down to setup(). + (setup): Improve error messages and add warnings when requested to + install in odd layouts. Refuse to install using blocklists unless + --force was set. + +2009-05-04 martin f. krafft + + * disk/raid.c (grub_raid_scan_device): Improve debug message. + +2009-05-04 Vladimir Serbinenko + + Updated copyright year + + * fs/hfsplus.c: updated copyright year + +2009-05-04 Vladimir Serbinenko + + HFS+ UUID + + * fs/hfsplus.c (grub_hfsplus_volheader): added num_serial field + in the space previously used by unused3 + (grub_hfsplus_uuid): new function + (grub_hfsplus_fs): added uuid field + +2009-05-03 Pavel Roskin + + * disk/ata.c: Don't cast mod to void in GRUB_MOD_INIT to + suppress warnings. It's no longer needed. + * disk/host.c: Likewise. + * disk/ata_pthru.c: Likewise. + * disk/loopback.c: Likewise. + * hook/datehook.c: Likewise. + * parttool/pcpart.c: Likewise. + * fs/i386/pc/pxe.c: Likewise. + * fs/ntfscomp.c: Likewise. + * efiemu/main.c: Likewise. + * mmap/mmap.c: Likewise. + * commands/crc.c: Likewise. + * commands/hexdump.c: Likewise. + * commands/hdparm.c: Likewise. + * commands/acpi.c: Likewise. + * commands/echo.c: Likewise. + * commands/minicmd.c: Likewise. + * commands/blocklist.c: Likewise. + * commands/memrw.c: Likewise. + * commands/loadenv.c: Likewise. + * commands/usbtest.c: Likewise. + * commands/lsmmap.c: Likewise. + * commands/boot.c: Likewise. + * commands/parttool.c: Likewise. + * commands/configfile.c: Likewise. + * commands/search.c: Likewise. + * commands/ieee1275/suspend.c: Likewise. + * commands/cat.c: Likewise. + * commands/i386/pc/pxecmd.c: Likewise. + * commands/i386/pc/play.c: Likewise. + * commands/i386/pc/halt.c: Likewise. + * commands/i386/pc/vbeinfo.c: Likewise. + * commands/i386/pc/vbetest.c: Likewise. + * commands/lspci.c: Likewise. + * commands/date.c: Likewise. + * commands/handler.c: Likewise. + * commands/ls.c: Likewise. + * commands/test.c: Likewise. + * commands/cmp.c: Likewise. + * commands/efi/loadbios.c: Likewise. + * commands/efi/fixvideo.c: Likewise. + * commands/halt.c: Likewise. + * commands/help.c: Likewise. + * commands/reboot.c: Likewise. + * hello/hello.c: Likewise. + * script/sh/main.c: Likewise. + * loader/xnu.c: Likewise. + * term/terminfo.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * term/usb_keyboard.c: Likewise. + +2009-05-03 David S. Miller + + * normal/menu.c: Include grub/parser.h + +2009-05-03 Pavel Roskin + + * mmap/efi/mmap.c (grub_mmap_malign_and_register): Return void*, + not char*. + * mmap/i386/mmap.c (grub_mmap_malign_and_register): Likewise. + Suggested by Javier Martín + + * util/i386/pc/grub-mkrescue.in: Allow for the case when + efiemu??.o doesn't exist. + * util/i386/pc/grub-install.in: Likewise. Use "cp -f" for + copying. + +2009-05-03 Bean Vladimir Serbinenko + + FreeBSD 64-bit support + + * conf/i386-pc.rmk (bsd_mod_SOURCES): add loader/i386/bsd_helper.S + and loader/i386/bsd_trampoline.S + (bsd_mod_ASFLAGS): new variable + * include/grub/i386/bsd.h (FREEBSD_MODINFOMD_SMAP): new definition + (FREEBSD_MODTYPE_KERNEL64): likewise + (grub_bsd64_trampoline_start): likewise + (grub_bsd64_trampoline_end): likewise + (grub_bsd64_trampoline_selfjump): likewise + (grub_bsd64_trampoline_gdt): likewise + * include/grub/i386/loader.h (grub_unix_real_boot): moved from here ... + * include/grub/i386/bsd.h (grub_unix_real_boot): ... moved here + * kern/i386/loader.S (grub_unix_real_boot): moved from here ... + * loader/i386/bsd_helper.S (grub_unix_real_boot): moved here + * include/grub/gpt_partition.h (grub_gpt_partentry): Corrected the type + of "attrib" member + * loader/i386/bsd_pagetable.c: new file + * loader/i386/bsd_trampoline.S: likewise + * loader/i386/bsd.c (ALIGN_QWORD): new macro + (ALIGN_VAR): likewise + (entry_hi): new variable + (kern_end_mdofs): likewise + (is_64bit): likewise + (grub_freebsd_add_meta): use ALIGN_VAR + (grub_e820_mmap): new declaration + (grub_freebsd_add_mmap): new function + (grub_freebsd_add_meta_module): support 64 bit kernels + (grub_freebsd_list_modules): use ALIGN_VAR + (gdt_descriptor): new declaration + (grub_freebsd_boot): support 64 bit kernels + (grub_bsd_elf64_hook): new function + (grub_bsd_load_elf): support elf64 + +2009-05-03 Bean + + * script/sh/execute.c (grub_script_execute_cmdif): Reset grub_errno + after we get the result of if statement. + +2009-05-03 Bean + + * Makefile.in (enable_efiemu): New variable. + + * conf/i386-pc.rmk: Only compile efiemu runtimes when enable_efiemu is + set. + (efiemu32.o): Use macro $< for source file, add $(srcdir) to include + path. + (efi64_c.o): Use macro $< for source file, add $(srcdir) to include + path, add -mno-red-zone option. + (efiemu64_s.o): Likewise. + (efiemu64.o): Use macro $^ for source file. + + * configure.ac (--enable-efiemu): New option. + +2009-05-03 Vladimir Serbinenko + + xnu support + + * conf/i386-efi.rmk (kernel_mod_HEADERS): added i386/pit.h + (pkglib_MODULES): add xnu.mod + (xnu_mod_SOURCES): new variable + (xnu_mod_CFLAGS): likewise + (xnu_mod_LDFLAGS): likewise + (xnu_mod_ASFLAGS): likewise + * conf/i386-pc.rmk: likewise + * conf/x86_64-efi.rmk: likewise + * include/grub/efi/efi.h (grub_efi_finish_boot_services): + new declaration + * include/grub/i386/macho.h: new file + * include/grub/i386/xnu.h: likewise + * include/grub/macho.h: likewise + * include/grub/machoload.h: likewise + * include/grub/x86_64/macho.h: likewise + * include/grub/x86_64/xnu.h: likewise + * include/grub/xnu.h: likewise + * kern/efi/efi.c (grub_efi_finish_boot_services): new function + * kern/efi/mm.c (MAX_HEAP_SIZE): increase + * loader/i386/efi/xnu.c: new file + * loader/i386/pc/xnu.c: likewise + * loader/i386/xnu.c: likewise + * loader/i386/xnu_helper.S: likewise + * loader/macho.c: likewise + * loader/xnu.c: likewise + * loader/xnu_resume.c: likewise + * util/grub-dumpdevtree: likewise + * include/grub/i386/pit.h: include grub/err.h + (grub_pit_wait): export + * util/grub.d/30_os-prober.in: support Darwin/Mac OS X + +2009-05-02 Vladimir Serbinenko + + Efiemu + + * conf/i386-pc.rmk: new modules efiemu, efiemu_acpi, efiemu_pnvram, + _linux_efi, linux_efi. + new files in grub-emu + new targets efiemu32.o and efiemu64.o + * loader/linux_normal_efiemu.c: likewise + * loader/i386/efi/linux.c: added preliminary efiemu support + * util/i386/pc/grub-install.in: add efiemu??.o to the list of + files to copy + * include/grub/autoefi.h: new file + * include/grub/i386/efiemu.h: likewise + * include/grub/i386/pc/efiemu.h: likewise + * include/grub/efi/api.h: add LL suffix when necessary + new definitions relating to tables + * include/grub/efiemu/efiemu.h: new file + * include/grub/efiemu/runtime.h: likewise + * efiemu/prepare.c: likewise + * efiemu/loadcore_common.c: likewise + * efiemu/loadcore64.c: likewise + * efiemu/runtime/efiemu.sh: likewise + * efiemu/runtime/efiemu.S: likewise + * efiemu/runtime/efiemu.c: likewise + * efiemu/runtime/config.h: likewise + * efiemu/prepare32.c: likewise + * efiemu/main.c: likewise + * efiemu/modules/pnvram.c: likewise + * efiemu/modules/i386: likewise + * efiemu/modules/i386/pc: likewise + * efiemu/modules/acpi.c: likewise + * efiemu/i386/pc/cfgtables.c: likewise + * efiemu/i386/loadcore64.c: likewise + * efiemu/i386/loadcore32.c: likewise + * efiemu/prepare64.c: likewise + * efiemu/loadcore.c: likewise + * efiemu/symbols.c: likewise + * efiemu/mm.c: likewise + * efiemu/loadcore32.c: likewise + +2009-05-02 Vladimir Serbinenko + + ACPI spoofing + + * commands/acpi.c: new file + * commands/i386/pc/acpi.c: likewise + * commands/efi/acpi.c: likewise + * include/grub/acpi.h: likewise + * conf/i386-pc.rmk (pkglib_MODULES): added acpi.mod + (acpi_mod_SOURCES): new variable + (acpi_mod_CFLAGS): likewise + (acpi_mod_LDFLAGS): likewise + * conf/i386-efi.rmk: likewise + * conf/x86_64-efi.rmk: likewise + +2009-05-02 Vladimir Serbinenko + + Missing part from mmap patch + + * mmap/efi/mmap.c (grub_machine_mmap_unregister): renamed to + (grub_mmap_unregister) + (grub_mmap_free_and_unregister): use grub_mmap_register + +2009-05-02 Vladimir Serbinenko + + Mmap services + + * loader/i386/efi/linux.c (grub_linux_boot): use grub_mmap_iterate + * loader/i386/linux.c (find_mmap_size): likewise + (allocate_pages): likewise + * loader/i386/multiboot.c (grub_get_multiboot_mmap_len): likewise + (grub_fill_multiboot_mmap): likewise + (grub_multiboot): use grub_mmap_get_lower and grub_mmap_get_upper + * loader/i386/pc/linux.c (grub_cmd_linux): use grub_mmap_get_lower + * include/grub/i386/bsd.h (OPENBSD_MMAP_AVAILABLE): new definition + (OPENBSD_MMAP_RESERVED): likewise + * include/grub/i386/pc/memory.h: include grub/memory.h + (grub_lower_mem): removed + (grub_upper_mem): likewise + (GRUB_MACHINE_MEMORY_ACPI): new definition + (GRUB_MACHINE_MEMORY_NVS): likewise + (GRUB_MACHINE_MEMORY_MAX_TYPE): likewise + (GRUB_MACHINE_MEMORY_HOLE): likewise + (grub_machine_mmap_register): likewise + (grub_machine_mmap_unregister): likewise + (grub_machine_get_upper): likewise + (grub_machine_get_lower): likewise + (grub_machine_get_post64): likewise + * include/grub/i386/efi/memory.h: new file + * include/grub/x86_64/efi/memory.h: likewise + * include/grub/efi/memory.h: likewise + * conf/i386-pc.rmk (pkglib_MODULES): added mmap.mod + (mmap_mod_SOURCES): new variable + (mmap_mod_LDFLAGS): likewise + (mmap_mod_ASFLAGS): likewise + * conf/i386-coreboot.rmk: likewise + * conf/i386-ieee1275.rmk: likewise + * conf/i386-efi.rmk: likewise + * conf/x86_64-efi.rmk: likewise + * include/grub/types.h (UINT_TO_PTR): new macro + (PTR_TO_UINT32): likewise + (PTR_TO_UINT64): likewise + * include/grub/memory.h: new file + * mmap/i386/pc/mmap.c: likewise + * mmap/i386/pc/mmap_helper.S: likewise + * mmap/i386/uppermem.c: likewise + * mmap/mmap.c: likewise + * mmap/efi/mmap.c: likewise + * kern/i386/coreboot/init.c (grub_machine_init): don't use + grub_upper_mem + * kern/i386/pc/init.c (grub_lower_mem): removed variable + (grub_upper_mem): likewise + (grub_machine_init): don't use grub_upper_mem, + make grub_lower_mem local + * loader/i386/bsd.c (grub_openbsd_boot): use grub_mmap_get_lower, + grub_mmap_iterate and grub_mmap_get_upper + (grub_netbsd_boot): use grub_mmap_get_lower and grub_mmap_get_upper + +2009-05-02 Bean + + * conf/common.rmk (grub_script.tab.c): Change normal/parser.y to + script/sh/parser.y. + (pkglib_MODULES): Add normal.mod and sh.mod. + (normal_SOURCES): New variable. + (normal_mod_CFLAGS): Likewise. + (normal_mod_LDFLAGS): Likewise. + (sh_mod_SOURCES): Likewise. + (sh_mod_CFLAGS): Likewise. + (sh_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (normal/lexer.c_DEPENDENCIES): Changed to + script/sh/lexer.c_DEPENDENCIES. + (kernel_img_SOURCES): Remove kern/rescue.c, and kern/reader.c, + kern/rescue_reader.c and kern/rescue_parser.c. + (kernel_img_HEADERS): Remove rescue.h, add reader.h. + (grub_emu_SOURCES): Change source files. + (pkglib_MODULES): Remove normal.mod. + (normal_SOURCES): Removed. + (normal_mod_CFLAGS): Likewise. + (normal_mod_LDFLAGS): Likewise. + * conf/i386-coreboot.rmk: Likewise. + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1276.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + + * include/grub/command.h (grub_command_execute): New inline function. + + * include/grub/menu.h (grub_menu_entry): Removed commands field. + + * include/grub/normal.h: Remove . + (grub_fs_module_list): Moved to normal/autofs.c. + (grub_exit_env): Removed. + (grub_command_execute): Likewise. + (grub_normal_menu_addentry): Renamed to grub_menu_addentry, removed + parameter script. + (read_command_list): New function declaration. + (read_fs_list): Likewise. + + * include/parser.h: Include . + (grub_parser_split_cmdline): Change type of getline parameter. + (grub_parser): New structure. + (grub_parser_class): New variable. + (grub_parser_execute): New function declaration. + (grub_register_rescue_parser): Likewise. + (grub_parser_register): New inline function. + (grub_parser_unregister): Likewise. + (grub_parser_get_current): Likewise. + (grub_parser_set_current): Likewise. + + * include/grub/reader.h: New file. + * kern/reader.c: Likewise. + * kern/rescue_parser.c: Likewise. + * kern/rescue_reader.c: Likewise. + * normal/autofs.c: Likewise. + * normal/dyncmd.c: Likewise. + + * include/grub/rescue.h: Removed. + * normal/command.h: Likewise. + + * include/grub/script.h: Moved to ... + * include/grub/script_sh.h: ... Moved here. + * normal/execute.c: Moved to ... + * script/sh/execute.c: ... Moved here. + * normal/function.c: Moved to ... + * script/sh/function.c: ... Moved here. + * normal/lexer.c: Moved to ... + * script/sh/lexer.c: ... Moved here. + * normal/parser.y: Moved to ... + * script/sh/parser.y: ... Moved here. + * normal/script.c: Moved to ... + * script/sh/script.c: ... Moved here. + + * normal/main.c: Remove and , include + . + (grub_exit_env): Removed. + (fs_module_list): Moved to normal/autofs.c. + (grub_file_getline): Don't handle comment here. + (free_menu): Skip removed field entry->commands. + (grub_normal_menu_addentry): Removed as grub_menu_entry, removed + script parameter. + (read_config_file): Removed nested parameter, change getline function. + (grub_enter_normal_mode): Removed. + (grub_dyncmd_dispatcher): Moved to normal/dyncmd.c. + (read_command_list): Likewise. + (autoload_fs_module): Moved to normal/autofs.c. + (read_fs_list): Likewise. + (reader_nested): New variable. + (grub_normal_execute): Run parser.sh to switch to sh parser. + (grub_cmd_rescue): Removed. + (cmd_normal): Removed. + (grub_cmd_normal): Unregister itself at the beginning. Don't register + rescue command. + (grub_cmdline_run): New function. + (grub_normal_reader_init): Likewise. + (grub_normal_read_line): Likewise. + (grub_env_write_pager): Likewise. + (cmdline): New variable. + (grub_normal_reader): Likewise. + (GRUB_MOD_INIT): Register normal reader and set as current, register + pager hook, register normal command with grub_register_command_prio, + so that it won't show up in command.lst. + (GRUB_MOD_FINI): Unregister normal reader, unhook pager, clear + grub_fs_autoload_hook. + + * normal/menu.c: Remove , add . + (grub_menu_execute_entry): Replace grub_script_execute with + grub_parser_execute, change parameter to grub_command_execute. + + * normal/menu_text.c: Remove . + + * normal/menu_entry.c: Remove , add + and . + (run): Change editor_getline to use new parser interface. Change + parameter to grub_command_execute. + + * kern/main.c: Remove , include , + and . + (grub_load_normal_mode): Execute normal command. + (grub_main): Call grub_register_core_commands, + grub_register_rescue_parser and grub_register_rescue_reader, use + grub_reader_loop to enter input loop. + + * kern/parser.c (grub_parser_split_cmdline): Change type of + getline parameter. + (grub_parser_class): New variable. + (grub_parser_execute): New function. + + * loader/i386/multiboot.c: Remove . + * loader/multiboot2.c: Likewise. + * loader/sparc64/ieee1275/linux.c: Likewise. + + * util/grub-emu.c (read_command_list): New dummy function. + +2009-05-02 Robert Millan + + * util/deviceiter.c (grub_util_iterate_devices): Increase max drive + count to 16 for CCISS and IDA. + +2009-05-02 Robert Millan + + * normal/menu_text.c (grub_wait_after_message): Print a newline + after waiting for user input. + + * loader/i386/linux.c: Include `'. + (grub_cmd_linux): Improve the error message about `ask' mode, by + waiting for user input so it's not missed (we can do this, since + user requested interaction). + +2009-05-02 Vladimir Serbinenko + + Added missing lst to grub-mkrescue + + * util/i386/pc/grub-mkrescue.in: added ${input_dir}/handler.lst + and ${input_dir}/parttool.lst + +2009-04-30 David S. Miller + + * util/hostdisk.c (device_is_wholedisk): New function. + (grub_util_biosdisk_get_grub_dev): Shortcut when hdg.start is + zero only if device_is_wholedisk() returns true. + + * util/hostdisk.c (convert_system_partition_to_system_disk): + Handle virtual disk devices named /dev/vdiskX as found on sparc + and powerpc. + + * kern/sparc64/ieee1275/init.c (grub_machine_set_prefix): If + lettered partition specifier is found, convert to numbered. + +2009-04-29 David S. Miller + + * include/grub/powerpc/ieee1275/memory.h: Include ieee1275.h. + * include/grub/sparc64/ieee1275/memory.h: Likewise. + + * normal/command.c: Add missing newline at end of file. + + * commands/lsmmap.c (grub_cmd_lsmmap): Add casts to avoid printf + warnings. + * kern/ieee1275/openfw.c (grub_claimmap): Likewise. + * disk/ieee1275/ofdisk.c (grub_ofdisk_open, grub_ofdisk_close, + grub_ofdisk_read): Likewise, and deal similarly with the fact that + ihandles have a 32-bit type but need to be stored in a "void *". + +2009-04-28 Pavel Roskin + + * disk/fs_uuid.c (grub_fs_uuid_open): Use parent->data for dev, + not disk. Adjust all dependencies. + (grub_fs_uuid_close): Use grub_device_close(), not + grub_disk_close(). + + * disk/fs_uuid.c (grub_fs_uuid_open): Allocate memory to copy + parent's partition, don't copy it by reference, as it gets freed + on close. + +2009-04-27 Vladimir Serbinenko + + Preboot hooks support + + * commands/boot.c (struct grub_preboot_t): new declaration + (preboots_head): new variable + (preboots_tail): likewise + (grub_loader_register_preboot_hook): new function + (grub_loader_unregister_preboot_hook): likewise + (grub_loader_set): launch preboot hooks + * include/grub/loader.h (grub_loader_preboot_hook_prio_t): new type + (grub_loader_register_preboot_hook): new declaration + (grub_loader_unregister_preboot_hook): likewise + +2009-04-27 Vladimir Serbinenko + + Warning fix + + * disk/scsi.c (grub_scsi_open): added missing cast when + calling grub_dprintf + +2009-04-26 Vladimir Serbinenko + + Bug and warning fixes + + * include/grub/i386/pc/init.h (grub_stop_floppy): added missing + declaration + * commands/test.c (test_parse): fixed bug with file tests and corrected + declaration of find_file + +2009-04-26 Pavel Roskin + + * Makefile.in: Don't install empty manual pages if help2man is + missing. Use help2man option for output, not shell redirection. + +2009-04-26 David S. Miller + + * util/grub-mkdevicemap.c (make_device_map): Add missing + NESTED_FUNC_ATTR to process_device(). + +2009-04-25 Vladimir Serbinenko + + Test command + + * commands/test.c: rewritten to use bash-like test + +2009-04-25 Vladimir Serbinenko + + Parttool autoloading and improvements + + * Makefile.in (pkglib_DATA): add parttool.lst + (parttool.lst): new target + * genmk.rb: generate parttool-* + (CLEANFILES): add #{parttool} + (PARTTOOLFILES): new variable + * genparttoollist.sh: new file + * parttool/pcpart.c (grub_pcpart_boot): more feedback + (grub_pcpart_type): likewise + * commands/parttool.c (helpmsg): new variable + (grub_cmd_parttool): output help if not enough arguments are supplied + autoload modules + (GRUB_MOD_INIT(parttool)): use helpmsg + +2009-04-24 David S. Miller + + Avoiding opening same device multiple times in device iterator. + + * kern/device.c: (grub_device_iterate): Define struct part_ent, + and use it to build a list of partitions in iterate_disk() and + iterate_partition(). + + * disk/fs_uuid.c (grub_fs_uuid_close): Call grub_disk_close() + on disk->data. + + * disk/ieee1275/nand.c (grub_nand_iterate): Return + grub_devalias_iterate() result instead of unconditional 0. + * disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Likewise. + Also, capture hook return value, either directly or via + grub_children_iterate(), and propagate to caller. + * include/grub/ieee1275/ieee1275.h (grub_devalias_iterate, + grub_children_iterate): Return value is now 'int' instead of + 'grub_err_t'. + * kern/ieee1275/openfw.c (grub_children_iterate): Fix to behave + like a proper iterator, stopping when hooks return non-zero. + (grub_devalias_iterate): Likewise. + +2009-04-23 David S. Miller + + * kern/sparc64/ieee1275/openfw.c: Unused, delete. + +2009-04-22 David S. Miller + + * kern/ieee1275/mmap.c (grub_machine_mmap_iterate): If size_cells + is larger than address_cells, use that value for address_cells too. + + * include/grub/ieee1275/ieee1275.h (IEEE1275_MAX_PROP_LEN, + IEEE1275_MAX_PATH_LEN): Define. + * kern/ieee1275/openfw.c (grub_children_iterate): Dynamically + allocate 'childtype', 'childpath', 'childname', and 'fullname'. + (grub_devalias_iterate): Dynamically allocate 'aliasname' and + 'devtype'. Explicitly NULL terminate devalias expansion. + + * util/sparc64/ieee1275/misc.c: New file. + * util/sparc64/ieee1275/grub-setup.c: New file. + * util/sparc64/ieee1275/grub-ofpathname.c: New file. + * util/sparc64/ieee1275/grub-mkimage.c: New file. + * util/sparc64/ieee1275/grub-install.in: New file. + * util/ieee1275/ofpath.c: New file. + * util/ieee1275/devicemap.c: New file. + * util/devicemap.c: New file. + * util/deviceiter.c: New file. + * kern/sparc64/ieee1275/init.c: New file. + * include/grub/util/ofpath.h: New file. + * include/grub/util/deviceiter.h: New file. + * util/grub-mkdevicemap.c: Include deviceiter.h. + Implement using grub_util_emit_devicemap_entry and + grub_util_iterate_devices. + * conf/i386-corebook.rmk: Build util/deviceiter.c and + util/devicemap.c into grub-mkdevicemap + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Add rules to build boot block + images and installation utilities. Build kernel as image + instead of as elf binary. Use common rules as much as possible. + +2009-04-19 Vladimir Serbinenko + + Correct GPT definition + + * include/grub/gpt_partition.h (grub_gpt_partentry): Corrected the type + of "attrib" member + +2009-04-19 Felix Zielcke + + * INSTALL: Replace `autogen.sh' with `./autogen.sh'. + +2009-04-19 David S. Miller + + * loader/sparc64/ieee1275/linux.c: Include grub/command.h + (grub_rescue_cmd_linux): Rename to... + (grub_cmd_linux): and fix prototype. + (grub_rescue_cmd_initrd): Rename to... + (grub_cmd_initrd): and fix prototype. + (cmd_linux, cmd_initrd): New. + (GRUB_MOD_INIT(linux)): Use grub_register_command(). + (GRUB_MOD_FINI(linux): Use grub_unregister_command(). + +2009-04-17 Pavel Roskin + + * bus/usb/ohci.c (grub_ohci_transaction): Fix incorrect printf + format. + (grub_ohci_transfer): Likewise. + + * bus/usb/usbtrans.c (grub_usb_control_msg): Warning fix. + + * loader/multiboot_loader.c (grub_cmd_multiboot_loader): Fix + return without a value. Fix inconsistent indentation. + + * fs/i386/pc/pxe.c (grub_pxefs_dir): Fix function prototype to + match struct grub_fs. + + * disk/ata.c (grub_ata_pciinit): Use NESTED_FUNC_ATTR. + * bus/usb/ohci.c (grub_ohci_pci_iter): Likewise. + * bus/usb/uhci.c (grub_uhci_pci_iter): Likewise. + * commands/lspci.c (grub_lspci_iter): Likewise. + +2009-04-16 Bean + + * commands/efi/loadbios.c (grub_cmd_fakebios): Add missing return + value. + +2009-04-15 Pavel Roskin + + * include/grub/types.h: Rename ULONG_MAX to GRUB_ULONG_MAX and + LONG_MAX to GRUB_LONG_MAX. Introduce GRUB_LONG_MIN. Update all + users of ULONG_MAX, LONG_MAX and LONG_MIN to use the new + definitions. + +2009-04-15 Felix Zielcke + + * disk/lvm.c (grub_lvm_scan_device): Add `LVM' to the error messages, + that no multiple data or metadata areas are supported and `Unknown + metadata header'. + +2009-04-15 Vladimir Serbinenko + + Move loader out of the kernel + + * kern/loader.c: moved to ... + * commands/boot.c: ... moved here + * commands/minicmd.c (grub_mini_cmd_boot): moved to ... + * commands/boot.c (grub_cmd_boot): moved here. All users updated + * include/grub/kernel.h (grub_machine_fini): export + * include/grub/loader.h (grub_loader_is_loaded): update declaration + (grub_loader_set): likewise + (grub_loader_unset): likewise + (grub_loader_boot): likewise + * conf/common.rmk: new module boot.mod + (pkglib_MODULES): add boot.mod + * conf/i386-coreboot.rmk (kernel_elf_SOURCES): remove kern/loader.c + (grub_emu_SOURCES): likewise + * conf/i386-efi.rmk (kernel_elf_SOURCES): likewise + (grub_emu_SOURCES): likewise + * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): likewise + (grub_emu_SOURCES): likewise + * conf/i386-pc.rmk (kernel_elf_SOURCES): likewise + (grub_emu_SOURCES): likewise + * conf/powerpc-ieee1275.rmk (kernel_elf_SOURCES): likewise + (grub_emu_SOURCES): likewise + * conf/sparc64-ieee1275.rmk (kernel_elf_SOURCES): likewise + (grub_emu_SOURCES): likewise + * conf/x86_64-efi.rmk (kernel_elf_SOURCES): likewise + (grub_emu_SOURCES): likewise + +2009-04-15 Vladimir Serbinenko + + use grub_lltoa instead of grub_itoa and grub_ltoa for all purposes + + * kern/misc.c (grub_itoa): Removed function + (grub_ltoa): likewise + (grub_vsprintf): use grub_lltoa + +2009-04-15 Vladimir Serbinenko + + Restore grub-emu + + * conf/i386-pc.rmk (grub_emu_SOURCES): add normal/handler.c + * conf/i386-coreboot.rmk: likewise + * conf/i386-ieee1275.rmk: likewise + * conf/powerpc-ieee1275.rmk: likewise + +2009-04-15 Felix Zielcke + + * INSTALL: Add that `./autogen.sh' needs to be run before + `./configure.'. + +2009-04-14 Bean + + * Makefile.in (pkglib_DATA): Add handler.lst. + (handler.lst): New rule. + + * conf/i386-pc.rmk (normal_mod_SOURCES): Add normal/handler.c. + * conf/i386-coreboot.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-efi.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + + * genhandlerlist.sh: New file. + + * genmk.rb: Add rules to generate handler.lst. + + * include/grub/normal.h (grub_file_getline): New function definition. + (read_handler_list): Likewise. + (free_handler_list): Likewise. + + * include/grub/term.h (grub_term_register_input): Add name parameter + for auto generation of handler.lst. + (grub_term_register_output): Likewise. + + * normal/handler.c: New file. + + * normal/main.c (get_line): Renamed to grub_file_getline. + (read_config_file): Use the newly renamed grub_file_getline. + (read_command_list): Likewise. + (read_fs_list): Likewise. + (grub_normal_execute): Call read_handler_list to parse handler.lst. + (GRUB_MOD_FINI): Call free_handler_list to free handler list. + + * term/efi/console.c (grub_console_init): Add name parameter for auto + generation of handler.lst. + * term/gfxterm.c: Likewise. + * term/i386/pc/at_keyboard.c: Likewise. + * term/i386/pc/console.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * term/i386/pc/vesafb.c: Likewise. + * term/i386/pc/vga.c: Likewise. + * term/i386/pc/vga_text.c: Likewise. + * term/ieee1275/ofconsole.c: Likewise. + * term/usb_keyboard.c: Likewise. + +2009-04-14 Bean + + * util/grub-pe2elf.c (write_symbol_table): Terminate short name symbol + properly with null character. + +2009-04-14 Felix Zielcke + + * configure: Remove. + * config.h.in: Likewise. + * stamp-h.in: Likewise. + * DISTLIST: Likewise. + * conf/common.mk: Likewise. + * conf/i386-coreboot.mk: Likewise. + * conf/i386-efi.mk: Likewise. + * conf/i386-ieee1275.mk: Likewise. + * conf/i386.mk: Likewise. + * conf/i386-pc.mk: Likewise. + * conf/powerpc-ieee1275.mk: Likewise. + * conf/sparc64-ieee1275.mk: Likewise. + * conf/x86_64-efi.mk: Likewise. + + * INSTALL: Remove the sentence that Ruby and autoconf are only required if you + develop on GRUB. + +2009-04-14 John Stanley + David S. Miller + + * util/hostdisk.c (make_device_name): Fix buffer length + calculations. + +2009-04-14 Felix Zielcke + + * util/hostdisk.c [__FreeBSD__ || __FreeBSD_kernel__]: Include + and . + (open_device) [__FreeBSD__ || __FreeBSD_kernel_]: Use sysctlgetbyname() + to add 0x10 to `kern.geom.debugflags' if it's not already set, before + opening the device and reset them afterwards. + +2009-04-13 Pavel Roskin + + * conf/common.rmk (grub_fstest_SOURCES): Add normal/datetime.c. + Reported by John Stanley + +2009-04-13 Robert Millan + + * util/grub.d/10_freebsd.in: Detect Debian GNU/kFreeBSD and use + that name for menuentries when appropriate. + +2009-04-13 Felix Zielcke + + * util/grub.d/10_freebsd.in: Add a missing `fi'. + +2009-04-13 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): Don't pass `vga=ask' parameter + to Linux, simply abort telling the user it's no longer supported. + +2009-04-13 Felix Zielcke + + * util/grub.d/10_freebsd.in: Don't exit if /boot/devices.hints + doesn't exist. Check also for /boot/kernel/kernel.gz. Print + `freebsd_loadenv' only when devices.hints exist. + +2009-04-13 Pavel Roskin + + * term/usb_keyboard.c (grub_usb_keyboard_getkey): Warning fixes. + +2009-04-13 Felix Zielcke + + * util/i386/pc/grub-install.in (install_drive): Remove the BSD + partition number. + (grub_drive): Likewise. + +2009-04-13 David S. Miller + + * kern/sparc64/ieee1275/ieee1275.c: New file. + * include/grub/sparc64/ieee1275/ieee1275.h (IEEE1275_MAP_WRITE, + IEEE1275_MAP_READ, IEEE1275_MAP_EXEC, IEEE1275_MAP_LOCKED, + IEEE1275_MAP_CACHED, IEEE1275_MAP_SE, IEEE1275_MAP_GLOBAL, + IEEE1275_MAP_IE, IEEE1275_MAP_DEFAULT): Define. + (grub_ieee1275_map_physical, grub_ieee1275_claim_vaddr, + grub_ieee1275_alloc_physmem): Declare new exported functions. + + * include/grub/sparc64/ieee1275/loader.h: New file. + * include/grub/sparc64/ieee1275/memory.h: Likewise. + * include/grub/sparc64/kernel.h: Likewise. + * loader/sparc64/ieee1275/linux.c: Likewise. + + * conf/common.rmk (grub_probe_SOURCES): Add Sun partition module. + (grub_fstest_SOURCES): Likewise. + + * util/hostdisk.c (make_device_name): Do not make any assumptions + about the length of drive names. + + * kern/dl.c (grub_dl_load_file): Close file immediately when + we are done using it. + +2009-04-12 David S. Miller + + * kern/misc.c (grub_ltoa): Fix cast when handling negative + values. Noticed by Pavel Roskin. + + * configure.ac: Check for __bswapsi2 and__bswapdi2 using + target compiler. + + * genmk.rb: Add more flexible image type specification, also + pass --strip-unneeded to objcopy. + * conf/i386-pc.rmk: Use *_FORMAT. + * conf/i386-pc.mk: Rebuilt. + + * disk/ieee1275/ofdisk.c (struct ofdisk_hash_ent): New struct. + (OFDISK_HASH_SZ): Define. + (ofdisk_hash): New hash table. + (ofdisk_hash_fn, ofdisk_hash_find, ofdisk_hash_add): New functions. + (grub_ofdisk_open): Use ofdisk_hash_ent address as disk->id + instead of device phandle which is not unique. + + * kern/sparc64/ieee1275/init.c: Delete, replace with... + * kern/sparc64/ieee1275/crt0.S: assembler implementation. + * include/grub/sparc64/ieee1275/kernel.h: Declare grub_prefix[]. + (GRUB_MOD_ALIGN, GRUB_MOD_GAP, GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE, + GRUB_KERNEL_MACHINE_KERNEL_IMAGE_SIZE, + GRUB_KERNEL_MACHINE_COMPRESSED_SIZE, GRUB_KERNEL_MACHINE_PREFIX, + GRUB_KERNEL_MACHINE_DATA_END): Define. + (grub_kernel_image_size, grub_total_module_size): Declare. + +2009-04-12 Pavel Roskin + + * configure.ac: Change the logic when we check for target tools. + Do it when the target is specified and it's different from the + specified value of the host. + +2009-04-11 Felix Zielcke + + * util/hostdisk.c [__FreeBSD_kernel__]: Include sys/disk.h. + (grub_util_biosdisk_open) [__FreeBSD_kernel__]: Add support for + GNU/kFreeBSD. Check if a device is a character device. Use + DIOCGMEDIASIZE to get the size. + (convert_system_partition_to_system_disk) [__FreeBSD_kernel__]: Add + support for GNU/kFreeBSD. + (grub_util_biosdisk_get_grub_dev) [__FreeBSD_kernel__]: Check if OS_DEV + is a character device instead of a block device. Add support for + FreeBSD device names. + + * util/getroot.c (find_root_device) [__FreeBSD_kernel__]: Check if ENT + is a character device instead of a block device. + + * util/grub-probe.c (probe) [__FreeBSD_kernel__]: Check if DEVICE_NAME + is a character device instead of a block device. + +2009-04-11 Andrey Shuvikov + + * util/hostdisk.c [__FreeBSD__]: Include sys/disk.h. + (grub_util_biosdisk_open) [__FreeBSD__]: Add support for + FreeBSD. Check if a device is a character device. Use + DIOCGMEDIASIZE to get the size. + (convert_system_partition_to_system_disk) [__FreeBSD__]: Add + support for FreeBSD. + (grub_util_biosdisk_get_grub_dev) [__FreeBSD__]: Check if OS_DEV + is a character device instead of a block device. Add support for + FreeBSD device names. + + * util/getroot.c (find_root_device) [__FreeBSD__]: Check if ENT is + a character device instead of a block device. + (grub_util_check_char_device): New function. + + * util/grub-probe.c (probe) [__FreeBSD__]: Check if DEVICE_NAME is + a character device instead of a block device. + + * include/grub/util/getroot.h (grub_util_check_char_device): New + prototype. + +2009-04-11 David S. Miller + + * conf/sparc64-ieee1275.rmk (kernel_img_LDFLAGS): Link with + static libgcc. + * configure.ac: Check for __bswapsi2 and __bswapdi2 presence. + * include/grub/sparc64/libgcc.h (__bswapsi2): Export libgcc + function, if present. + (__bswapdi2): Likewise. + + * include/grub/sparc64/ieee1275/boot.h: New file. + * boot/sparc64/ieee1275/boot.S: Likewise. + * boot/sparc64/ieee1275/diskboot.S: Likewise. + + * kern/misc.c (grub_ltoa): New function. + (grub_vsprintf): Use it to format 'long' integers. + +2009-04-10 David S. Miller + + * disk/ieee1275/nand.c (grub_nand_open): All ieee1275 call arg + slots are of type grub_ieee1275_cell_t. + (grub_nand_read): Likewise. + * kern/ieee1275/ieee1275.c (IEEE1275_PHANDLE_INVALID, + IEEE1275_IHANDLE_INVALID): Use grub_ieee1275_cell_t since these + macros are used to compare values in arg/ret block of the call. + (grub_ieee1275_finddevice, grub_ieee1275_get_property, + grub_ieee1275_next_property, grub_ieee1275_get_property_length, + grub_ieee1275_instance_to_package, grub_ieee1275_package_to_path, + grub_ieee1275_instance_to_path, grub_ieee1275_write, + grub_ieee1275_read, grub_ieee1275_seek, grub_ieee1275_peer, + grub_ieee1275_child, grub_ieee1275_parent, grub_ieee1275_open, + grub_ieee1275_close, grub_ieee1275_set_property, + grub_ieee1275_set_color): All ieee1275 call arg slots are of type + grub_ieee1275_cell_t. + * kern/ieee1275/openfw.c (grub_map): Likewise. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_ihandle_t, + grub_ieee1275_phandle_t): Define as grub_unit32_t type. + + * kern/ieee1275/init.c (grub_machine_init): Make 'actual' grub_ssize_t. + * kern/ieee1275/openfw.c (grub_children_iterate): Likewise. + (grub_devalias_iterate): Likewise. + +2009-04-10 Vladimir Serbinenko + + UFS improvements + + * fs/ufs.c (INODE_NBLOCKS): new definition + (struct grub_ufs_dirent): added fields for non-BSD dirents + (grub_ufs_get_file_block): fixed double indirect handling + (grub_ufs_lookup_symlink): use more robust way to determine whether + symlink is inline + (grub_ufs_find_file): support for non-BSD dirents + (grub_ufs_dir): support for non-BSD dirents + +2009-04-10 Bean + + * include/grub/efi/api.h (grub_efi_configuration_table): Add packed + attribute, otherwise the size would be wrong for i386 platform. + + * include/grub/pci.h (grub_pci_read_word): New inline function. + (grub_pci_read_byte): Likewise. + (grub_pci_write): Likewise. + (grub_pci_write_word): Likewise. + (grub_pci_write_byte): Likewise. + + * include/grub/pci.h (grub_pci_iteratefunc_t): Add NESTED_FUNC_ATTR. + + * loader/i386/efi/linux.c (fake_bios_data): Moved to loadbios module. + (find_framebuf): Scan pci to locate the frame buffer address. + + * commands/efi/fixvideo.c: New file. + + * commands/efi/loadbios.c: Likewise. + + * commands/memrw.c: Likewise. + + * util/grub-dumpbios.in: Likewise. + + * conf/common.rmk (grub-dumpbios): New utility. + (pkglib_MODULES): New module memrw.mod. + (memrw_mod_SOURCE): New macro. + (memrw_mod_CFLAGS): Likewise. + (memrw_mod_LDFLAGS): Likewise. + + * conf/i386-efi.rmk (pkglib_MODULES): New module loadbios.mod and + fixvideo.mod. + (loadbios_mod_SOURCE): New macro. + (loadbios_mod_CFLAGS): Likewise. + (loadbios_mod_LDFLAGS): Likewise. + (fixvideo_mod_SOURCE): Likewise. + (fixvideo_mod_CFLAGS): Likewise. + (fixvideo_mod_LDFLAGS): Likewise. + + * conf/x86_64.rmk (pkglib_MODULES): New module loadbios.mod and + fixvideo.mod. + (loadbios_mod_SOURCE): New macro. + (loadbios_mod_CFLAGS): Likewise. + (loadbios_mod_LDFLAGS): Likewise. + (fixvideo_mod_SOURCE): Likewise. + (fixvideo_mod_CFLAGS): Likewise. + (fixvideo_mod_LDFLAGS): Likewise. + +2009-04-08 Felix Zielcke + + * disk/lvm.c (grub_lvm_scan_device): Add a missing NULL check. + +2009-04-07 David S. Miller + + * kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Add + support for R_SPARC_OLO10 relocations. Fix compile warning for + R_SPARC_WDISP30 case. + * kern/sparc64/cache.S: Fix grub_arch_sync_caches implementation. + +2009-04-06 Pavel Roskin + + * include/grub/misc.h (ARRAY_SIZE): New macro. + * include/grub/i386/linux.h (GRUB_LINUX_VID_MODE_VESA_START): + New macro. + * loader/i386/linux.c (allocate_pages): Use free_pages(). + (grub_linux_unload): Don't use free_pages(). + (grub_linux_boot): Prevent accessing linux_vesafb_modes with a + wrong index. Treat all other modes as text modes. + (grub_cmd_linux): Initialize vid_mode unconditionally to + GRUB_LINUX_VID_MODE_NORMAL. Recognize and support "vga=ask". + + * commands/help.c (print_command_help): Use cmd->prio, not + cmd->flags to check for GRUB_PRIO_LIST_FLAG_ACTIVE. + +2009-04-06 Vladimir Serbinenko + + Parttool + + * parttool/pcpart.c: new file + * commands/parttool.c: likewise + * conf/common.rmk (pkglib_MODULES): Added parttool.mod and pcpart.mod + (parttool_mod_SOURCES): new variable + (parttool_mod_CFLAGS): likewise + (parttool_mod_LDFLAGS): likewise + (pcpart_mod_SOURCES): likewise + (pcpart_mod_CFLAGS): likewise + (pcpart_mod_LDFLAGS): likewise + * conf/i386-coreboot.rmk (grub_emu_SOURCES): added commands/parttool.c + and parttool/pcpart.c + * conf/i386-efi.rmk: likewise + * conf/i386-ieee1275.rmk: likewise + * conf/i386-pc.rmk: likewise + * conf/powerpc-ieee1275.rmk: likewise + * conf/sparc64-ieee1275.rmk: likewise + * conf/x86_64-ieee1275.rmk: likewise + +2009-04-05 Vladimir Serbinenko + + Support for mtime and further expandability of dir command + + * include/grub/lib/datetime.h: moved to ... + * include/grub/datetime.h: ... moved here and added + declaration of grub_unixtime2datetime. All users updated + * include/grub/fs.h: new syntax for dir and mtime functions in + struct grub_fs + * include/grub/fshelp.h: new declarations of GRUB_FSHELP_TYPE_MASK + and GRUB_FSHELP_FLAGS_MASK + * commands/ls.c (grub_ls_list_files): Write mtime in long format + * fs/ext2.c (grub_ext2_dir): use new dir syntax and supply mtime + (grub_ext2_mtime): new function + * fs/hfsplus.c (grub_hfsplus_dir): use new dir syntax and supply mtime + (grub_hfsplus_mtime): new function + * fs/ufs.c (GRUB_UFS_ATTR_TYPE): new definition + (GRUB_UFS_ATTR_FILE): likewise + (GRUB_UFS_ATTR_LNK): likewise + (struct grub_ufs_sblock): new fields mtime + (grub_ufs_read_inode): new parameter to read inode to a separate buffer + all users updated + (grub_ufs_dir): mtime support + (grub_ufs_mtime): new function + * fs/affs.c (grub_affs_dir): use new dir syntax + * fs/afs.c (grub_afs_dir): likewise + * fs/cpio.c (grub_cpio_dir): likewise + * fs/fat.c (grub_fat_find_dir): likewise + * fs/hfs.c (grub_hfs_dir): likewise + * fs/iso9660.c (grub_iso9660_dir): likewise + * fs/jfs.c (grub_jfs_dir): likewise + * fs/minix.c (grub_minix_dir): likewise + * fs/ntfs.c (grub_ntfs_dir): likewise + * fs/reiserfs.c (grub_reiserfs_dir): likewise + * fs/sfs.c (grub_sfs_dir): likewise + * fs/xfs.c (grub_xfs_dir): likewise + * util/hostfs.c (grub_hostfs_dir): likewise + * lib/datetime.c: moved to ... + * normal/datetime.c: ... moved here + (grub_unixtime2datetime): new function + * kern/rescue.c (grub_rescue_print_files): use new dir syntax + * normal/completion.c (iterate_dir): use new dir syntax + * normal/misc.c (grub_normal_print_device_info): tell the + last modification time of a volume + * kern/fs.c (grub_fs_probe): updated dummy function to use new syntax + * conf/common.rmk: added lib/datetime.c to ls.mod + * conf/i386-coreboot.rmk (grub_emu_SOURCES): add normal/datetime.c + (normal_mod_SOURCES): likewise + (datetime_mod_SOURCES): Removed lib/datetime.c + * conf/i386-efi.rmk: likewise + * conf/i386-ieee1275.rmk: likewise + * conf/i386-pc.rmk: likewise + * conf/powerpc-ieee1275.rmk: likewise + * conf/sparc64-ieee1275.rmk: likewise + * conf/x86_64-efi.rmk: likewise + +2009-04-05 Vladimir Serbinenko + + Trim trailing spaces in FAT label and support mtools-like labels + + * fs/fat.c (grub_fat_iterate_dir): New function based + on grub_fat_find_dir + (grub_fat_find_dir): use grub_fat_iterate_dir + (grub_fat_label): likewise + +2009-04-04 Vladimir Serbinenko + + * conf/powerpc-ieee1275.rmk (kernel_elf_HEADERS): add list.h + and command.h + remove extraneous kernel_elf_HEADERS + +2009-04-04 Bean + + * include/grub/util/misc.h: Add dummy function fsync for mingw. + + * util/misc.c: Likewise. + +2009-04-04 Yoshinori K. Okuji + + * loader/i386/efi/linux.c (fake_bios_data): Use grub_dprintf + instead of grub_printf. + +2009-04-03 Robert Millan + + * loader/i386/linux.c (grub_linux_setup_video): Fill + `params->{red,green,blue,reserved}_{mask_size,field_pos}' with + values from `mode info' structure instead of hardcoded + values. + +2009-04-01 Pavel Roskin + + * Makefile.in: Remove all references to MODULE_LDFLAGS, it's + unused now. + * genmk.rb: Likewise. + * configure.ac: Likewise. + +2009-04-01 Manoel Abranches + + * aclocal.m4: Move --build-id=none from MODULE_LDFLAGS to + TARGET_LDFLAGS. This corrects a problem with grub-mkelfimage. + +2009-04-01 David S. Miller + + * normal/sparc64/setjmp.S: Fix setjmp implementation. + * include/grub/sparc64/setjmp.h (grub_jmp_buf): Update. + (grub_setjmp): Mark with 'returns_twice' attribute. + * include/grub/i386/setjmp.h (grub_setjmp): Likewise + * include/grub/powerpc/setjmp.h (grub_setjmp): Likewise. + * include/grub/x86_64/setjmp.h (grub_setjmp): Likewise. + +2009-04-01 Robert Millan + + Reapply fix from 2008-07-28 which was accidentally reverted; also + perform the same fix to a similar check in same function. + + * disk/raid.c (grub_raid_scan_device): Do not abort when two disks + with the same number are found, just use issue a warning with + grub_dprintf(), as this error has been reported to be non-fatal. + +2009-03-31 Pavel Roskin + + * aclocal.m4 (grub_I386_CHECK_REGPARM_BUG): Provide safe default + for cross-compilation. + +2009-03-30 Robert Millan + + Fix i386-ieee1275 build. + + * include/grub/i386/ieee1275/loader.h (grub_multiboot2_real_boot): + Remove declaration. + +2009-03-30 Pavel Roskin + + * fs/hfs.c (grub_hfs_strncasecmp): Integrate into ... + (grub_hfs_cmp_catkeys): ... this. Don't assume strings to be + zero-terminated, rely only on the strlen value. Fix comparison + of strings differing in length. + +2009-03-30 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): Check for zImage before + checking for abi version. Improve error messages on BIOS to notify + user about `linux16' command. + +2009-03-29 Vladimir Serbinenko + + Leak fixes + + * kern/disk.c (grub_disk_cache_store): Invalidate previous cache + in case of collision + * disk/scsi.c (grub_scsi_open): free scsi in case of error + +2009-03-29 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): Parse "vga=" parameter and + set `vid_mode' accordingly. + (grub_linux_boot): Process `vid_mode' and set video mode. + +2009-03-29 Robert Millan + + * util/grub.d/10_linux.in (linux_entry): New function. + Factorize generation of Linux boot entries. + +2009-03-29 Yoshinori K. Okuji + + Make the format of Environment Block plain text. The boot loader + part is not tested well yet. + + * util/grub-editenv.c (DEFAULT_ENVBLK_SIZE): New macro. + (buffer): Removed. + (envblk): Likewise. + (usage): Remove "info" and "clear". Add "unset". Update the + description of "set", as this does not delete variables any + longer. + (create_envblk_file): Complete rewrite. + (open_envblk_file): Likewise. + (cmd_info): Removed. + (cmd_list): Likewise. + (cmd_set): Likewise. + (cmd_clear): Likewise. + (list_variables): New function. + (write_envblk): Likewise. + (set_variables): Likewise. + (unset_variables): Likewise. + (main): Complete rewrite. + + * commands/loadenv.c (buffer): Removed. + (envblk): Likewise. + (open_envblk_file): New function. + (read_envblk_file): Complete rewrite. + (grub_cmd_load_env): Likewise. + (grub_cmd_list_env): Likewise. + (struct blocklist): New struct. + (free_blocklists): New function. + (check_blocklists): Likewise. + (write_blocklists): Likewise. + (grub_cmd_save_env): Complete rewrite. + + * include/grub/lib/envblk.h (GRUB_ENVBLK_SIGNATURE): Replaced with + a plain text signature. + (GRUB_ENVBLK_MAXLEN): Removed. + (struct grub_envblk): Complete rewrite. + (grub_envblk_find): Removed. + (grub_envblk_insert): Likewise. + (grub_envblk_open): New prototype. + (grub_envblk_set): Likewise. + (grub_envblk_delete): Put const to VALUE. + (grub_envblk_iterate): Put const to NAME and VALUE. + (grub_envblk_close): New prototype. + (grub_envblk_buffer): New inline function. + (grub_envblk_size): Likewise. + + * lib/envblk.c: Include grub/mm.h. + (grub_env_find): Removed. + (grub_envblk_open): New function. + (grub_envblk_close): Likewise. + (escaped_value_len): Likewise. + (find_next_line): Likewise. + (grub_envblk_insert): Removed. + (grub_envblk_set): New function. + (grub_envblk_delete): Complete rewrite. + (grub_envblk_iterate): Likewise. + +2009-03-28 Robert Millan + + * conf/i386-pc.rmk (pkglib_MODULES): Add `linux16.mod'. + (linux16_mod_SOURCES, linux16_mod_CFLAGS, linux16_mod_LDFLAGS): New + variables. Use 16-bit loader. + (linux_mod_SOURCES, linux_mod_CFLAGS, linux_mod_LDFLAGS): Use 32-bit + loader. + * kern/i386/loader.S (grub_linux_boot): Rename to ... + (grub_linux16_boot): ... this. Update all users. + * loader/i386/linux.c (grub_linux32_boot): Rename to ... + (grub_linux_boot): ... this. Update all users. + + * loader/i386/pc/linux.c (GRUB_MOD_INIT(linux)): Rename to ... + (GRUB_MOD_INIT(linux16)): ... this. Rename `linux' and `initrd' + commands to `linux16' and `initrd16'. + (GRUB_MOD_FINI(linux)): Rename to ... + (GRUB_MOD_FINI(linux16)): ... this. + +2009-03-24 Pavel Roskin + + * genmk.rb: Define ASM_FILE for *.S files for *.lst generation, + not just for compilation. + +2009-03-22 Vladimir Serbinenko + + Move multiboot helper out of kernel + + * conf/i386-pc.rmk (multiboot_mod_SOURCES): Add + `loader/i386/multiboot_helper.S'. + * conf/i386-coreboot.rmk: Likewise + * conf/i386-ieee1275.rmk: Likewise + + * kern/i386/loader.S: Move multiboot helpers from here... + * loader/i386/multiboot_helper.S: ...moved here + * include/grub/i386/loader.h: Move declarations of multiboot + helpers from here... + * include/grub/i386/multiboot.h: ...moved here + * loader/i386/multiboot.c: Added include of grub/cpu/multiboot.h + +2009-03-22 Yoshinori K. Okuji + + * kern/env.c (grub_env_context_open): Added an argument to specify + whether a new context inherits exported variables from current + one. This is useful when making a sandbox to interpret a config + file. + All callers updated. + + * include/grub/env.h (grub_env_context_open): Updated the prototype. + +2009-03-22 Yoshinori K. Okuji + + * kern/env.c (grub_env_context_close): Fix memory leaks. + +2009-03-22 Yoshinori K. Okuji + + * normal/main.c (grub_normal_execute): Added an argument + BATCH to specify if an interactive interface should be provided + after reading a config file. + All callers updated. + (read_command_list): Prevent being executed twice. + (read_fs_list): Likewise. + + * include/grub/normal.h (grub_normal_execute): Updated the + prototype. + +2009-03-22 Pavel Roskin + + * kern/powerpc/ieee1275/startup.S: Replace EXT_C(start) with + _start. + * kern/i386/pc/startup.S: Likewise. + * kern/i386/efi/startup.S: Likewise. + * kern/i386/ieee1275/startup.S: Likewise. + * kern/i386/coreboot/startup.S: Likewise. + * kern/x86_64/efi/startup.S: Likewise. + + * aclocal.m4 (grub_CHECK_START_SYMBOL): Remove. + * configure.ac: Don't call grub_CHECK_START_SYMBOL. + * kern/i386/pc/startup.S: Use _start instead of START_SYMBOL. + +2009-03-21 Vladimir Serbinenko + + Bugfixes in multiboot for bugs uncovered by solaris kernel. + + * loader/i386/multiboot_elfxx.c (grub_multiboot_load_elf): Corrected + limit detection. + Use vaddr of correct segment for entry_point. + +2009-03-21 Bean + + * commands/blocklist.c: Add include file , remove + and . + (grub_cmd_blocklist): Use the new command interface. + (GRUB_MOD_INIT): Likewise. + (GRUB_MOD_FINI): Likewise. + * commands/boot.c: Likewise. + * commands/cat.c: Likewise. + * commands/cmp.c: Likewise. + * commands/configfile.c: Likewise. + * commands/crc.c: Likewise. + * commands/echo.c: Likewise. + * commands/halt.c: Likewise. + * commands/handler.c: Likewise. + * commands/hdparm.c: Likewise. + * commands/help.c: Likewise. + * commands/hexdump.c: Likewise. + * commands/loadenv.c: Likewise. + * commands/ls.c: Likewise. + * commands/lsmmap.c: Likewise. + * commands/lspci.c: Likewise. + * commands/loadenv.c: Likewise. + * commands/read.c: Likewise. + * commands/reboot.c: Likewise. + * commands/search.c: Likewise. + * commands/sleep.c: Likewise. + * commands/test.c: Likewise. + * commands/usbtest.c: Likewise. + * commands/videotest.c: Likewise. + * commands/i386/cpuid.c: Likewise. + * commands/i386/pc/halt.c: Likewise. + * commands/i386/pc/play.c: Likewise. + * commands/i386/pc/pxecmd.c: Likewise. + * commands/i386/pc/vbeinfo.c: Likewise. + * commands/i386/pc/vbetest.c: Likewise. + * commands/ieee1275/suspend.c: Likewise. + * disk/loopback.c: Likewise. + * font/font_cmd.c: Likewise. + * hello/hello.c: Likewise. + * loader/efi/appleloader.c: Likewise. + * loader/efi/chainloader.c: Likewise. + * loader/i386/bsd.c: Likewise. + * loader/i386/efi/linux.c: Likewise. + * loader/i386/ieee1275/linux.c: Likewise. + * loader/i386/linux.c: Likewise. + * loader/i386/pc/chainloader.c: Likewise. + * loader/i386/pc/linux.c: Likewise. + * loader/powerpc/ieee1275/linux.c: Likewise. + * loader/multiboot_loader.c: Likewise. + * term/gfxterm.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * term/terminfo.c: Likewise. + + * term/i386/pc/vesafb.c: Removed . + * term/i386/pc/vga.c: Likewise. + * video/readers/jpeg.c: Likewise. + * video/readers/png.c: Likewise. + * video/readers/tga.c: Likewise. + + * util/grub-fstest (cmd_loopback): Removed. + (cmd_blocklist): Likewise. + (cmd_ls): Likewise. + (grub_register_command): Likewise. + (grub_unregister_command): Likewise. + (execute_command): Use grub_command_find to locate command and execute + it. + + * include/grub/efi/chainloader.h: Removed. + * loader/efi/chainloader_normal.c: Likewise. + * loader/i386/bsd_normal.c: Likewise. + * loader/i386/pc/chainloader_normal.c: Likewise. + * loader/i386/pc/multiboot_normal.c: Likewise. + * loader/linux_normal.c: Likewise. + * loader/multiboot_loader_normal.c: Likewise. + * loader/powerpc/ieee1275/linux_normal.c: Likewise. + + * gencmdlist.sh: Scan new registration command grub_register_extcmd + and grub_register_command_p1. + + * conf/common.rmk (grub_fstest_SOURCES): Add kern/list.c, + kern/command.c, lib/arg.c and commands/extcmd.c. + (pkglib_MODULES): Remove boot.mod, and minicmd.mod and extcmd.mod. + (minicmd_mod_SOURCES): New variable. + (minicmd_mod_CFLAGS): Likewise. + (minicmd_mod_LDFLAGS): Likewise. + (extcmd_mod_SOURCES): Likewise. + (extcmd_mod_CFLAGS): Likewise. + (extcmd_mod_LDFLAGS): Likewise. + (boot_mod_SOURCES): Removed. + (boot_mod_CFLAGS): Likewise. + (boot_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (kernel_img_SOURCES): Add kern/command.c and + kern/corecmd.c. + (kernel_img_HEADERS): Add command.h. + (grub_emu_SOURCES): Remove commands/boot.c and normal/arg.c, add + commands/minicmd.c, kern/command.c, kern/corecmd.c, commands/extcmd.c + and lib/arg.c. + (pkglib_MODULES): Change _linux.mod, _chain.mod, _bsd.mod and + _multiboot.mod as linux.mod, chain.mod, bsd.mod and multiboot.mod, + remove the corresponding normal mode command. + (normal_mod_SOURCES): Remove normal/arg.c. + * conf/i386-coreboot.rmk: Likewise. + * conf/i386-efi.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + + * include/grub/arg.h: Move from here ... + * include/grub/lib/arg.h: ... to here. + + * normal/arg.c: Move from here ... + * lib/arg.c: ... to here. + + * commands/extcmd.c: New file. + * commands/minicmd.c: Likewise. + * include/grub/command.h: Likewise. + * include/grub/extcmd.h: Likewise. + * kern/command.c: Likewise. + * kern/corecmd.c: Likewise. + + * kern/list.c (grub_list_iterate): Return int instead of void. + (grub_list_insert): New function. + (grub_prio_list_insert): Likewise. + + * kern/rescue.c (grub_rescue_command): Removed. + (grub_rescue_command_list): Likewise. + (grub_rescue_register_command): Likewise. + (grub_rescue_unregister_command): Likewise. + (grub_rescue_cmd_boot): Move to minicmd.c + (grub_rescue_cmd_help): Likewise. + (grub_rescue_cmd_info): Likewise. + (grub_rescue_cmd_boot): Likewise. + (grub_rescue_cmd_testload): Likewise. + (grub_rescue_cmd_dump): Likewise. + (grub_rescue_cmd_rmmod): Likewise. + (grub_rescue_cmd_lsmod): Likewise. + (grub_rescue_cmd_exit): Likewise. + (grub_rescue_print_devices): Moved to corecmd.c. + (grub_rescue_print_files): Likewise. + (grub_rescue_cmd_ls): Likewise. + (grub_rescue_cmd_insmod): Likewise. + (grub_rescue_cmd_set): Likewise. + (grub_rescue_cmd_unset): Likewise. + (attempt_normal_mode): Use grub_command_find to get normal module. + (grub_enter_rescue_mode): Use grub_register_core_commands to register + commands, remove grub_rescue_register_command calls. + + * normal/command.c (grub_register_command): Removed. + (grub_unregister_command): Likewise. + (grub_command_find): Likewise. + (grub_iterate_commands): Likewise. + (rescue_command): Likewise. + (export_command): Moved to corecmd.c. + (set_command): Removed. + (unset_command): Likewise. + (insmod_command): Likewise. + (rmmod_command): Likewise. + (lsmod_command): Likewise. + (grub_command_init): Likewise. + + * normal/completion.c (iterate_command): Use cmd->prio to check for + active command. + (complete_arguments): Use grub_extcmd_t structure to find options. + (grub_normal_do_completion): Change function grub_iterate_commands to + grub_command_iterate. + + * normal/execute.c (grub_script_execute_cmd): No need to parse + argument here. + + * normal/main.c (grub_dyncmd_dispatcher): New function. + (read_command_list): Register unload commands as dyncmd. + (grub_cmd_normal): Use new command interface, register rescue, + unregister normal at entry, register normal, unregister rescue at exit. + + * include/grub/list.h (grub_list_test_t): New type. + (grub_list_iterate): Return int instead of void. + (grub_list_insert): New function. + (GRUB_AS_NAMED_LIST_P): New macro. + (GRUB_AS_PRIO_LIST): Likewise. + (GRUB_AS_PRIO_LIST_P): Likewise. + (GRUB_PRIO_LIST_PRIO_MASK): New constant. + (GRUB_PRIO_LIST_FLAG_ACTIVE): Likewise. + (grub_prio_list): New structure. + (grub_prio_list_insert): New function. + (grub_prio_list_remove): New inline function. + + * include/grub/normal.h: Remove , add . + (GRUB_COMMAND_FLAG_CMDLINE): Moved to command.h. + (GRUB_COMMAND_FLAG_MENU): Likewise. + (GRUB_COMMAND_FLAG_BOTH): Likewise. + (GRUB_COMMAND_FLAG_TITLE): Likewise. + (GRUB_COMMAND_FLAG_NO_ECHO): Likewise. + (GRUB_COMMAND_FLAG_NO_ARG_PARSE): Removed. + (GRUB_COMMAND_FLAG_NOT_LOADED): Likewise. + (grub_command): Likewise. + (grub_register_command): Likewise. + (grub_command_find): Likewise. + (grub_iterate_commands): Likewise. + (grub_command_init): Likewise. + (grub_arg_parse): Likewise. + (grub_arg_show_help): Likewise. + + * include/grub/rescue.h (grub_rescue_register_command): Removed. + (grub_rescue_unregister_command): Likewise. + + * include/grub/i386/bsd.h: Remove grub_rescue_cmd_freebsd, + grub_rescue_cmd_openbsd, grub_rescue_cmd_netbsd, + grub_rescue_cmd_freebsd_loadenv and grub_rescue_cmd_freebsd_module. + + * include/grub/i386/efi/loader.h: Remove grub_rescue_cmd_linux and + grub_rescue_cmd_initrd. + * include/grub/i386/loader.h: Likewise. + * include/grub/x86_64/loader.h: Likewise. + + * include/grub/i386/pc/chainloader.h: Remove grub_chainloader_cmd. + +2009-03-21 Bean + + * util/hostdisk.c (read_device_map): Use grub_util_get_disk_size + instead of stat in mingw environment. + + * util/misc.c (grub_millisleep): Use Sleep in mingw environment. + + * aclocal.m4 (grub_CHECK_LINK_DIR): New function. + + * configure.ac: Use grub_CHECK_LINK_DIR to determine whether to use + AC_CONFIG_LINKS. + +2009-03-21 Bean + + * fs/ext2.c (grub_ext2_mount): Change errno to GRUB_ERR_BAD_FS for + out of range error. + +2009-03-18 Michel Dänzer + + * fs/ext2.c (grub_ext2_read_block): Take endianness into account when + checking inode flags for EXT4_EXTENTS_FLAG. + +2009-03-18 Robert Millan + + * loader/i386/linux.c: Include `' and + `'.. + (grub_linux_setup_video): New function. Loosely based on the EFI one. + (grub_linux32_boot): Attempt to configure video settings with + grub_linux_setup_video(). + (grub_rescue_cmd_linux): Set noreturn=0 in grub_loader_set, in order + to avoid grub_console_fini() which would step out of graphical mode + unconditionally. + +2009-03-14 Robert Millan + + Fix build on powerpc. + * conf/powerpc-ieee1275.rmk (kernel_elf_HEADERS): Add `handler.h'. + +2009-03-12 Vladimir Serbinenko + + * term/gfxterm.c (GRUB_MOD_FINI(term_gfxterm)): Correct name of + background image command. + +2009-03-12 Colin D Bennett + + * term/gfxterm.c (draw_cursor): Ensure character is redrawn. + (grub_gfxterm_putchar): Extract pairs of identical calls to + draw_cursor out of conditional blocks. + +2009-03-11 Pavel Roskin + + * fs/hfs.c (grub_hfs_strncasecmp): New function. + (grub_hfs_cmp_catkeys): Use HFS specific string comparison. + +2009-03-11 Robert Millan + + * loader/i386/multiboot_elfxx.c + (CONCAT(grub_multiboot_load_elf, XX)): Do not reject ET_DYN files. + +2009-03-11 Felix Zielcke + + * conf/powerpc-ieee1275.rmk (kernel_elf_SOURCES): Add `kern/list.c' and + `kern/handler.c'. + +2009-03-11 Robert Millan + + * loader/i386/multiboot.c (code_size): New variable. + (grub_multiboot): Define offsets by adding to `code_size' rather + than subtracting from `grub_multiboot_payload_size'. Provide + 4-byte alignment to MBI and others by increasing + `boot_loader_name_length' appropriately. + + * loader/i386/multiboot_elfxx.c + (CONCAT(grub_multiboot_load_elf, XX)): Initialize `code_size'. + +2009-03-09 Felix Zielcke + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Remove duplicated + `fs/ext2.c'. + +2009-03-08 Robert Millan + + Make loader/i386/linux.c usable on i386-pc again. + + * kern/i386/pc/init.c (grub_machine_init): Disable addition of low + memory to heap. + * loader/i386/linux.c [GRUB_MACHINE_PCBIOS] (allocate_pages): Remove + `#error' stanza. + +2009-03-07 Bean + + * loader/i386/efi/linux.c (grub_rescue_cmd_initrd): Fix a bug in initrd + allocation. + +2009-03-06 Robert Millan + + Fix display issue on terminals with screen size other than 80x25 + (e.g. gfxterm with resolution higher than 640x480). + + * normal/main.c (grub_normal_init_page): Display title text in a + position relative to the center of the terminal instead of relying + on a hardcoded offset. + +2009-03-04 Robert Millan + + Filter /etc/grub.d/10_* so that only add-ons for native kernels are + installed. + + * Makefile.in (host_kernel): New variable. + * conf/common.rmk (grub-mkconfig_SCRIPTS): Conditionalize all 10_*.in + scripts instead of just the windows one. + * configure.ac: Initialize and AC_SUBST `host_kernel'. + +2009-03-04 Felix Zielcke + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `kern/list.c' and + `kern/handler.c'. + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + +2009-03-04 Felix Zielcke + + * partmap/pc.c (pc_partition_map_iterate): Skip over invalid BSD partitions + or if there's no space for the disk label and print the partition number on a + invalid magic. + +2009-03-04 Felix Zielcke + + * util/misc.c: Include . + (grub_millisleep): New function. + +2009-03-04 Bean + + * configure.ac: Only test -mcmodel=large option in x86_64-efi, also add + another option -mno-red-zone. + + * commands/handler.c: Change module description. + + * kern/handler.c: Add missing space at the end of description line. + + * kern/list.c: Likewise. + +2009-03-03 Robert Millan + + Move more components to the relocation area, and fix mbi pointer + handling to use the destination rather than the origin (thanks to + Vladimir Serbinenko for spotting). + + * loader/i386/multiboot.c (mbi_dest): New variable. + (grub_multiboot_boot): Use `mbi_dest' instead of `mbi'. + (grub_multiboot): Put cmdline, boot_loader_name and mbi in the + relocation area. + +2009-03-01 Bean + + * include/grub/efi/api.h (GRUB_EFI_MPS_TABLE_GUID): New constant. + (GRUB_EFI_ACPI_TABLE_GUID): Likewise. + (GRUB_EFI_ACPI_20_TABLE_GUID): Likewise. + (GRUB_EFI_SMBIOS_TABLE_GUID): Likewise. + + * loader/i386/efi/linux.c (acpi_guid): New variable. + (acpi_guid): Likewise. + (EBDA_SEG_ADDR): New constant. + (LOW_MEM_ADDR): Likewise. + (FAKE_EBDA_SEG): Likewise. + (fake_bios_data): New function. + (grub_linux_boot): Call fake_bios_data. + +2009-03-01 Bean + + * commands/terminal.c: Removed. + + * commands/handler.c: New file. + + * include/grub/list.h: Likewise. + + * include/grub/handler.h: Likewise. + + * kern/list.c: Likewise. + + * kern/handler.c: Likewise. + + * kern/term.h: Include header file . + (grub_term_input): Move next field to the beginning. + (grub_term_output): Likewise. + (grub_term_input_class): New variable. + (grub_term_output_class): Likewise. + (grub_term_register_input): Changed to inline function. + (grub_term_register_output): Likewise. + (grub_term_unregister_input): Likewise. + (grub_term_unregister_output): Likewise. + (grub_term_set_current_input): Likewise. + (grub_term_set_current_output): Likewise. + (grub_term_get_current_input): Likewise. + (grub_term_get_current_output): Likewise. + (grub_term_iterate_input): Removed. + (grub_term_iterate_output): Likewise. + + * kern/term.c (grub_term_list_input): Removed. + (grub_term_list_output): Likewise. + (grub_term_input_class): New variable. + (grub_term_output_class): Likewise. + (grub_cur_term_input): Change variable as macro. + (grub_cur_term_output): Likewise. + (grub_term_register_input): Removed. + (grub_term_register_output): Likewise. + (grub_term_unregister_input): Likewise. + (grub_term_unregister_output): Likewise. + (grub_term_set_current_input): Likewise. + (grub_term_set_current_output): Likewise. + (grub_term_iterate_input): Likewise. + (grub_term_iterate_output): Likewise. + (grub_term_get_current_input): Likewise. + (grub_term_get_current_output): Likewise. + + * util/grub-editenv.c: Include header file . + (grub_term_get_current_input): Removed. + (grub_term_get_current_output): Likewise. + (grub_term_input_class): New variable. + (grub_term_output_class): Likewise. + + * util/grub-fstest.c (grub_term_get_current_input): Removed. + (grub_term_get_current_output): Likewise. + (grub_term_input_class): New variable. + (grub_term_output_class): Likewise. + + * util/grub-probe.c (grub_term_get_current_input): Removed. + (grub_term_get_current_output): Likewise. + (grub_term_input_class): New variable. + (grub_term_output_class): Likewise. + + * util/i386/pc/grub-setup.c (grub_term_get_current_input): Removed. + (grub_term_get_current_output): Likewise. + (grub_term_input_class): New variable. + (grub_term_output_class): Likewise. + + * conf/common.rmk (pkglib_MODULES): Replace terminal with handler. + (terminal_mod_SOURCES): Likewise. + (terminal_mod_CFLAGS): Likewise. + (terminal_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Replace terminal.c with + handler.c. + (kernel_img_SOURCES): Add list.c and handler.c. + (kernel_img_HEADERS): Add list.h and handler.h. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Replace terminal.c with + handler.c. + (kernel_mod_SOURCES): Add list.c and handler.c. + (kernel_mod_HEADERS): Add list.h and handler.h. + + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Replace terminal.c with + handler.c. + (kernel_elf_SOURCES): Add list.c and handler.c. + (kernel_elf_HEADERS): Add list.h and handler.h. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Replace terminal.c with + handler.c. + (kernel_elf_SOURCES): Add list.c and handler.c. + (kernel_elf_HEADERS): Add list.h and handler.h. + + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Replace terminal.c with + handler.c. + (kernel_mod_SOURCES): Add list.c and handler.c. + (kernel_mod_HEADERS): Add list.h and handler.h. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Replace terminal.c with + handler.c. + (kernel_elf_SOURCES): Add list.c and handler.c. + (kernel_elf_HEADERS): Add list.h and handler.h. + +2009-02-27 Robert Millan + + Factorize elf32 / elf64 code in Multiboot loader. This will + prevent it from getting out of sync again. + + * loader/i386/multiboot.c (grub_multiboot_is_elf32, + grub_multiboot_load_elf32, grub_multiboot_is_elf64, + grub_multiboot_load_elf64): Move from here ... + * loader/i386/multiboot_elfxx.c (grub_multiboot_is_elf, + grub_multiboot_load_elf): ... to here (new file). + +2009-02-27 Robert Millan + + * util/grub.d/10_linux.in: Rename "single-user mode" to + "recovery mode". + +2009-02-27 Vladimir Serbinenko + + Don't leak in SCSI code. + * disk/scsi.c (grub_scsi_close): free `scsi'. + +2009-02-27 Robert Millan + + * loader/i386/pc/multiboot.c: Move from here ... + * loader/i386/multiboot.c: ... to here. Update all users. + +2009-02-27 Robert Millan + + Patch from Alexandre Bique + * util/i386/pc/grub-setup.c (setup): Fix directory path. + +2009-02-27 Krzysztof Smiechowicz + + * fs/sfs.c (grub_sfs_read_extent): Correction to traversing extent + b-tree. + +2009-02-27 Robert Millan + + * kern/misc.c (grub_strtoull): Fix bug (it mistakenly parsed the + `0x' qualifier as 0 when base is specified as parameter). + +2009-02-24 Bean + + * configure.ac: Check for -mcmodel=large in x86_64 target. + + * include/grub/efi/api.h (efi_call_10): New macro. + (efi_wrap_10): New function. + + * include/grub/efi/pe32.h (GRUB_PE32_REL_BASE_HIGH): New macro. + (GRUB_PE32_REL_BASED_HIGH): Likewise. + (GRUB_PE32_REL_BASED_LOW): Likewise. + (GRUB_PE32_REL_BASED_HIGHLOW): Likewise. + (GRUB_PE32_REL_BASED_HIGHADJ): Likewise. + (GRUB_PE32_REL_BASED_MIPS_JMPADDR): Likewise. + (GRUB_PE32_REL_BASED_SECTION): Likewise. + (GRUB_PE32_REL_BASED_REL): Likewise. + (GRUB_PE32_REL_BASED_IA64_IMM64): Likewise. + (GRUB_PE32_REL_BASED_DIR64): Likewise. + (GRUB_PE32_REL_BASED_HIGH3ADJ): Likewise. + + * kern/x86_64/dl.c (grub_arch_dl_relocate_symbols): Fixed relocation + issue. + + * kern/x86_64/efi/callwrap.S (efi_wrap_6): Bug fix. + (efi_wrap_10): New function. + + * kern/x86_64/efi/startup.S (codestart): Use relative addressing. + + * loader/efi/appleloader.c (devpath_5): Add support for late 2008 + MB/MBP model (NV chipset). + (devdata_devs): Add devpath_5 to the list. + + * load/i386/efi/linux.c (video_base): Remove variable. + (RGB_MASK): New macro. + (RGB_MAGIC): Likewise. + (LINE_MIN): Likewise. + (LINE_MAX): Likewise. + (FBTEST_STEP): Likewise. + (FBTEST_COUNT): Likewise. + (fb_list): New variable. + (grub_find_video_card): Remove function. + (find_framebuf): New function. + (grub_linux_setup_video): Use find_framebuf to get frame buffer and + line length. + + * util/i386/efi/grub-mkimage.c (grub_reloc_section): Fix relocation + problem for x86_64. + +2009-02-22 Vesa Jääskeläinen + + Patch #25624 by Kevin Lacquement . + + * util/grub-mkconfig.in: Use ${grub_mkdevicemap} instead of hard + coding tool name. + +2009-02-22 Robert Millan + + * include/multiboot.h (MULTIBOOT_INFO_ALIGN): New macro. + * loader/i386/pc/multiboot.c (grub_multiboot): Include the MBI + in our relocation, instead of using it directly from heap. Also + use `MULTIBOOT_INFO_ALIGN' to ensure it is aligned. + +2009-02-21 Robert Millan + + Implement USB keyboard support (based on patch by Marco Gerards) + + * conf/i386-pc.rmk (pkglib_MODULES): Add `usb_keyboard.mod'. + (usb_keyboard_mod_SOURCES, usb_keyboard_mod_CFLAGS) + (usb_keyboard_mod_LDFLAGS): New variables. + + * term/usb_keyboard.c: New file. + +2009-02-14 Vladimir Serbinenko + + Corrected wrong declaration + + * kern/disk.c: corrected declaration of grub_disk_ata_pass_through. + +2009-02-14 Christian Franke + + * commands/lspci.c (grub_pci_classes): Add `SATA Controller'. + (grub_lspci_iter): Print class code and programming interface byte. + +2009-02-14 Christian Franke + + * gendistlist.sh: Ignore `.svn' directories. + +2009-02-14 Felix Zielcke + + * fs/fat.c: Add 2009 to Copyright line. + +2009-02-14 Christian Franke + + * commands/hdparm.c: New file. Provides `hdparm' command + which sends ATA commands via grub_disk_ata_pass_through (). + + * conf/i386-pc.rmk: Add ata_pthru.mod and hdparm.mod. + + * disk/ata.c: Include . Move + and to include/grub/ata.h. + (enum grub_ata_addressing_t): Move to include/grub/ata.h. + (GRUB_CDROM_SECTOR_SIZE): Remove. + (GRUB_ATA_*): Move to include/grub/ata.h. + (GRUB_ATAPI_*): Likewise. + (enum grub_ata_commands): Likewise. + (enum grub_ata_timeout_milliseconds): Likewise. + (struct grub_ata_device): Likewise. + (grub_ata_regset): Likewise. + (grub_ata_regget): Likewise. + (grub_ata_regset2): Likewise. + (grub_ata_regget2): Likewise. + (grub_ata_check_ready): Likewise. + (grub_ata_wait_not_busy): Remove static, exported in + include/grub/ata.h. + (grub_ata_wait_drq): Likewise. + (grub_ata_pio_read): Likewise. + + * disk/ata_pthru.c: New file. Provides grub_ata_pass_through () + function for hdparm.mod. + + * include/grub/ata.h: New file, contains declarations from + disk/ata.c. + (enum grub_ata_commands): Add new commands for commands/hdparm.c. + + * include/grub/disk.h (grub_disk_ata_pass_through_parms): New struct. + (grub_disk_ata_pass_through): New exported variable. + + * kern/disk.c (grub_disk_ata_pass_through): New variable. + +2009-02-13 Colin D Bennett + + Support multiple fallback entries, and provide an API to support + executing default+fallback menu entries. Renamed the `terminal' menu + viewer to `text'. + + * include/grub/normal.h (grub_normal_text_menu_viewer): New global + variable declaration. + (grub_menu_execute_callback): New structure declaration. + (grub_menu_execute_callback_t): New typedef. + (grub_menu_execute_with_fallback): New function declaration. + (grub_menu_get_entry): Likewise. + (grub_menu_get_timeout): Likewise. + (grub_menu_set_timeout): Likewise. + + * normal/main.c (GRUB_MOD_INIT(normal)): Refer to new variable name. + + * normal/menu.c (grub_wait_after_message): Moved to + `normal/menu_text.c'. + (draw_border): Likewise. + (print_message): Likewise. + (print_entry): Likewise. + (print_entries): Likewise. + (grub_menu_init_page): Likewise. + (get_entry_number): Likewise. + (print_timeout): Likewise. + (run_menu): Likewise. + (grub_menu_execute_entry): Likewise. + (show_text_menu): Likewise. + (get_and_remove_first_entry_number): New function. + (grub_menu_execute_with_fallback): Likewise. + (get_entry): Renamed to ... + (grub_menu_get_entry): .. this and made it global. + (get_timeout): Renamed to ... + (grub_menu_get_timeout): ... this and made it global. + (set_timeout): Renamed to ... + (grub_menu_set_timeout): ... this and made it global. + (grub_normal_terminal_menu_viewer): Renamed to ... + (grub_normal_text_menu_viewer): ... this. + + * normal/menu_text.c: New file. Extracted text-menu-specific code + from normal/menu.c. + + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Add `normal/menu_text.c'. + (normal_mod_SOURCES): Likewise. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * conf/i386-pc.rmk, (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + +2009-02-11 Robert Millan + + * util/grub.d/00_header.in: Update old reference to `font' command. + +2009-02-10 Felix Zielcke + + * fs/fat.c (grub_fat_mount): Fix wrong comparison. + + Based on patch from Javier Martín. + +2009-02-09 Felix Zielcke + + * conf/common.rmk (grub_probe_SOURCES): Move fs/ext2.c before fs/fat.c + to avoid false positives with FAT. + (grub_fstest_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + +2009-02-09 Felix Zielcke + + * fs/fat.c (grub_fat_mount): Try to avoid false positives by checking + bpb.version_specific.fat12_or_fat16.fstype and + bpb.version_specific.fat32.fstype. + +2009-02-08 Robert Millan + + * fs/tar.c: Replace "fs/cpio.c" with "cpio.c". + +2009-02-08 Robert Millan + + * Makefile.in (host_os, host_cpu): New variables. + (target_os): Remove. Update all users. + +2009-02-08 Marco Gerards + + * Makefile.in (enable_grub_emu_usb): New variable. + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `disk/scsi.c'. + (grub_emu_SOURCES) [grub_emu_SOURCES]: Add `disk/usbms.c', + `util/usb.c', `bus/usb/usb.c' and `commands/usbtest.c'. + (grub_emu_LDFLAGS): Add `$(LIBUSB)'. + (pkglib_MODULES): Add `usb.mod', `uhci.mod', `ohci.mod', + `usbtest.mod' and `usbms.mod'. + (usb_mod_SOURCES, usb_mod_CFLAGS, usb_mod_LDFLAGS) + (usbtest_mod_SOURCES, usbtest_mod_CFLAGS, usbtest_mod_LDFLAGS) + (uhci_mod_SOURCES, uhci_mod_CFLAGS, uhci_mod_LDFLAGS, + (ohci_mod_SOURCES, ohci_mod_CFLAGS, ohci_mod_LDFLAGS) + (usbms_mod_SOURCES, usbms_mod_CFLAGS, usbms_mod_LDFLAGS): New + variables. + + * disk/usbms.c: New file. + + * include/grub/usb.h: Likewise. + + * include/grub/usbtrans.h: Likewise. + + * include/grub/usbdesc.h: Likewise. + + * bus/usb/usbtrans.c: Likewise. + + * bus/usb/ohci.c: Likewise. + + * bus/usb/uhci.c: Likewise. + + * bus/usb/usbhub.c: Likewise. + + * bus/usb/usb.c: Likewise. + + * commands/usbtest.c: Likewise. + + * util/usb.c: Likewise. + + * include/grub/err.h (grub_err_t): Add `GRUB_ERR_IO'. + + * configure.ac: Test for libusb presence. + + * util/grub-emu.c (main) [HAVE_LIBUSB_H]: Call `grub_libusb_init'. + +2009-02-08 Vesa Jääskeläinen + + * kern/mm.c: Add more comments. + +2009-02-08 Robert Millan + + Patch from Javier Martín. + * fs/ext2.c (EXT2_DRIVER_SUPPORTED_INCOMPAT): Add + `EXT4_FEATURE_INCOMPAT_FLEX_BG'. + +2009-02-08 Robert Millan + + * fs/cpio.c: Split tar functionality to ... + * fs/tar.c: ... here (new file). Update all users. + +2009-02-07 Robert Millan + + * fs/ext2.c (grub_ext2_mount): Avoid mounting filesystems with + backward-incompatible features. + + Based on patch from Javier Martín, with some adjustments. + +2009-02-07 Michael Scherer + + * fs/hfs.c (grub_hfsplus_iterate_dir): Treat hfs+ as case insensitive. + +2009-02-07 Robert Millan + + * conf/common.rmk (grub_probe_SOURCES, grub_fstest_SOURCES): Move + position of `disk/lvm.c' to ensure grub_init_all() always picks it + after the RAID stuff. + +2009-02-05 Vesa Jääskeläinen + + Fixes problem when running vbetest command as reported by + Vladimir Serbinenko . + + * (grub_vbe_set_video_mode): Fixed problem with text modes. + +2009-02-04 Felix Zielcke + + util/getroot.c (grub_util_get_grub_dev): Add support for /dev/mdNpN and + /dev/md/NpN style mdraid devices. + +2009-02-03 Felix Zielcke + + * util/unifont2pff.rb: Remove. + +2009-02-03 Felix Zielcke + + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Add a missing trailing + `#'. + +2009-02-03 Felix Zielcke + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `normal/menu_viewer.c'. + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + +2009-02-02 Christian Franke + + * lib/hexdump.c (hexdump): Print at most 3 lines if data is identical. + +2009-02-01 Felix Zielcke + + * INSTALL: Note that we now require at least autoconf 2.59 and + that LZO is optional. + +2009-02-01 Vesa Jääskeläinen + + Base on patch on bug #24154 created by Tomas Tintera + . + + * video/i386/pc/vbe.c (grub_video_vbe_scroll): Fix downward scrolling. + +2009-02-01 Vesa Jääskeläinen + + Based on patch on bug #25318 created by Bernhard Rosenkraenzer + . + + * normal/parser.y (script_init): Add missing semicolon. + +2009-01-31 Colin D Bennett + + * normal/main.c: Add include to grub/menu_viewer.h. + (free_menu_entry_classes): Added. + (grub_normal_menu_addentry): Added class property handling. + (grub_normal_execute): Changed to use new menu viewer for menu viewing. + (GRUB_MOD_INIT(normal)): Added register for text based menu viewer. + + * normal/menu_viewer.c: New file. + + * normal/menu.c (run_menu_entry): Renamed to ... + (grub_menu_execute_entry): ... this and made it as global. + (grub_menu_run): Renamed to ... + (show_text_menu): ... this and made it local. + (show_text_menu): Adapt to new function names. + (grub_normal_terminal_menu_viewer): New global variable. + + * include/grub/menu.h: New file. + + * include/grub/menu_viewer.h: New file. + + * include/grub/normal.h: Added include to grub/menu.h. + (grub_menu_entry): Moved to include/grub/menu.h. + (grub_menu_entry_t): Likewise. + (grub_menu): Likewise. + (grub_menu_t): Likewise. + (grub_normal_terminal_menu_viewer): Added. + (grub_menu_execute_entry): Likewise. + (grub_menu_run): Removed. + + * DISTLIST: Added include/grub/menu.h. + Added include/grub/menu_viewer.h. + Added normal/menu_viewer.c. + +2009-01-31 Vesa Jääskeläinen + + * normal/execute.c (grub_script_execute_menuentry): Changed to use + arglist for menutitle arguments. + + * normal/main.c (grub_normal_menu_addentry): Likewise. + + * normal/parser.y (menuentry): Likewise. + + * normal/script.c (grub_script_create_cmdmenu): Likewise. + + * include/grub/script.h (grub_script_cmd_menuentry): Likewise. + (grub_script_create_cmdmenu): Likewise. + + * include/grub/normal.h (grub_normal_menu_addentry): Likewise. + + * conf/i386-pc.rmk (normal_mod_SOURCES): Adapt Colin D Bennett's + changes. + + * conf/x86_64-efi.rmk (normal_mod_SOURCES): Likewise. + + * conf/i386-coreboot.rmk (normal_mod_SOURCES): Likewise. + + * conf/i386-efi.rmk (normal_mod_SOURCES): Likewise. + + * conf/i386-ieee1275.rmk (normal_mod_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (normal_mod_SOURCES): Likewise. + + * conf/sparc64-ieee1275.rmk (normal_mod_SOURCES): Likewise. + +2009-01-30 Christian Franke + + * normal/arg.c (grub_arg_show_help): Add indentation if '\n' appears + in option help text. + +2009-01-27 Pavel Roskin + + * disk/fs_uuid.c (search_fs_uuid): Ignore case of the UUID. + +2009-01-27 Vesa Jääskeläinen + + * commands/lsmmap.c: Add include to grub/machine/memory.h. + + * fs/i386/pc/pxe.c (grub_pxefs_open): Fix sign problem. + + * term/i386/pc/at_keyboard.c (GRUB_MOD_FINI(at_keyboard)): Use proper + unregister function. + +2009-01-27 Vesa Jääskeläinen + + * disk/scsi.c (grub_scsi_read): Fix sign problem. + + * term/i386/pc/vga_text.c (grub_vga_text_init_fini). Fix declaration. + + * util/grub-mkfont.c (usage): Fix typo. + + * util/elf/grub-mkimage.c (load_modules): Fix warning. + +2009-01-26 Daniel Mierswa + + * fs/fat.c (grub_fat_uuid): Fix shift of the first two bytes. + + * commands/search.c (search_fs_uuid): Ignore case of the UUID. + + * kern/misc.c (grub_strcasecmp): New function. + (grub_strcasecmp): Use grub_size_t instead of int for length. + Fix return value. + * include/grub/misc.h: Update function prototypes. + +2009-01-26 Robert Millan + + * configure.ac: Fix cross-compilation check. + +2009-01-22 Christian Franke + + * kern/misc.c (grub_vsprintf): Fix size and termination of `format2' + (precision) digit string. Allow `.format2' without `format1' (width). + Limit input chars for `%s' output to `format2' if specified. This is + compatible with standard printf (). + +2009-01-22 Christian Franke + + * disk/ata.c (grub_ata_wait_status): Replace by ... + (grub_ata_wait_not_busy): ... this function. Checks only BSY bit, + other status bits may be invalid while BSY is asserted. + (grub_ata_check_ready): New function. + (grub_ata_cmd): Removed. + (grub_ata_wait_drq): New function. + (grub_ata_strncpy): Remove inline. + (grub_ata_pio_read): Reduce to actual block transfer. BSY wait + and error check now done by grub_ata_wait_drq (). + (grub_ata_pio_write): Likewise. + (grub_atapi_identify): Set DEV before check for !BSY. Use + grub_ata_wait_drq () to wait for data. + (grub_ata_device_initialize): Add status register check to + detect missing SATA slave devices. Add debug messages. + (grub_atapi_wait_drq): Use grub_ata_wait_not_busy (). + (grub_atapi_packet): Set DEV before check for !BSY. Replace + transfer loop by grub_ata_pio_write (). + (grub_ata_identify): Set DEV before check for !BSY. Use + grub_ata_wait_drq () to wait for data. + (grub_ata_setaddress): Set DEV before check for !BSY. + (grub_ata_readwrite): Remove duplicate code, handle batch/rest and + read/write in one loop. Fix invalid command on write. Fix incomplete + command on (size % batch) == 0. Add missing error check after write of + last block. Add debug messages. + (grub_atapi_read): Replace transfer loop by grub_ata_pio_read (). + +2009-01-19 Christian Franke + + * disk/ata.c (GRUB_ATAPI_REG_*): New defines. + (GRUB_ATAPI_IREASON_*): Likewise. + (grub_ata_pio_write): Fix timeout error return. + (grub_atapi_identify): Add grub_ata_wait () after cmd. + (grub_atapi_wait_drq): New function. + (grub_atapi_packet): New parameter `size'. + Use grub_atapi_wait_drq () and direct write instead of + grub_ata_pio_write (). + (grub_atapi_read): Replace grub_ata_pio_read () by a loop which + reads the number of bytes requested by the device for each DRQ + assertion. + (grub_atapi_write): Remove old implementation, return not + implemented instead. + +2009-01-19 Christian Franke + + * disk/scsi.c (grub_scsi_read10): Use scsi->blocksize instead + of 512 to calculate data size. + (grub_scsi_read12): Likewise. + (grub_scsi_write10): Likewise. + (grub_scsi_write12): Likewise. + (grub_scsi_read): Adjust size according to blocksize. + Add checks for invalid blocksize and unaligned transfer. + +2009-01-19 Vesa Jääskeläinen + + * font/font.c (grub_font_loader_init): Re-position unknown glyph. + + * term/gfxterm.c (write_char): Fix background rendering for wide + width glyphs. + +2009-01-19 Robert Millan + + * config.guess: Update to latest version from config git. + * config.sub: Likewise. + +2009-01-17 Felix Zielcke + + * Makefile.in: Change font compilation to use new grub-mkfont instead + of java version. + + * util/fonttool/src/org/gnu/grub/fonttool/BDFLoader.java: Remove. + * util/fonttool/src/org/gnu/grub/fonttool/CharDefs.java: Likewise. + * util/fonttool/src/org/gnu/grub/fonttool/CharacterRange.java: Likewise. + * util/fonttool/src/org/gnu/grub/fonttool/CharacterRange.java: Likewise. + * util/fonttool/src/org/gnu/grub/fonttool/Converter.java: Likewise. + * util/fonttool/src/org/gnu/grub/fonttool/Font.java: Likewise. + * util/fonttool/src/org/gnu/grub/fonttool/Glyph.java: Likewise. + * util/fonttool/src/org/gnu/grub/fonttool/PFF2Sections.java: Likewise. + * util/fonttool/src/org/gnu/grub/fonttool/PFF2Writer.java: Likewise. + +2009-01-16 Christian Franke + + * disk/ata.c (enum grub_ata_commands): Remove EXEC_DEV_DIAGNOSTICS. + (enum grub_ata_timeout_milliseconds): New enum. + (grub_ata_wait_status): Add parameter milliseconds. + (grub_ata_cmd): Remove variable `err'. Remove wait for !DRQ to allow + recovery from timed-out commands. + (grub_ata_pio_read): Add parameter milliseconds. Fix error return, + return grub_errno instead of REG_ERROR. + (grub_ata_pio_write): Add parameter milliseconds. + (grub_atapi_identify): Fix size of ATAPI IDENTIFY sector. + Pass milliseconds to grub_ata_wait_status () and + grub_ata_pio_read (). + (grub_atapi_packet): Pass milliseconds to grub_ata_pio_write (). + (grub_ata_identify): Remove variable `ataerr'. Pass milliseconds to + grub_ata_wait_status (). Fix IDENTIFY timeout check. + (grub_ata_device_initialize): Remove EXECUTE DEVICE DIAGNOSTICS. + It is not suitable for device detection, because DEV bit is ignored, + the command may run too long, and not all devices set the signature + properly. + (grub_ata_pciinit): Clear grub_errno before grub_ata_device_initialize (). + (grub_ata_setaddress): Pass milliseconds to grub_ata_wait_status (). + Fix device selection, DEV bit must be set first to address the registers + of the correct device. + (grub_ata_readwrite): Pass milliseconds to grub_ata_wait_status () and + grub_ata_pio_read/write (). + (grub_atapi_read): Pass milliseconds to grub_ata_pio_read (). + (grub_atapi_write): Pass milliseconds to grub_ata_pio_write (). + +2009-01-13 Carles Pina i Estany + + * util/grub-editenv.c (main): Use fseeko(), not fseek(). + +2009-01-13 Bean + + * util/grub-mkfont.c (write_font): forget to remove some debug code. + +2009-01-13 Bean + + * Makefile.in: (enable_grub_mkfont): New variable. + (freetype_cflags): Likewise. + (freetype_libs): Likewise. + + * common.rmk (bin_UTILITIES): Add `grub-mkfont' if requested. + (grub_mkfont_SOURCES): New variable. + (grub_mkfont_CFLAGS): Likewise. + (grub_mkfont_LDFLAGS): Likewise. + + * configure.ac (--enable-grub-mkfont): New option. Check for freetype2 + library if `--enable-grub-mkfont' is requested. + (enable_grub_mkfont): New variable. + (freetype_cflags): Likewise. + (freetype_libs): Likewise. + + * util/grub-mkfont.c: New file. + +2009-01-12 Christian Franke + + * disk/ata.c (grub_ata_pciinit): Fix bit numbers of compatibility + mode check. Fix setting of compat_use[]. + +2009-01-10 Robert Millan + + Update a few copyright years which we forgot to do in 2008 (only for + files whose changes made in 2008 were copyright-significant) + + * Makefile.in: Add 2008 to Copyright line. + * disk/ieee1275/ofdisk.c: Likewise. + * disk/efi/efidisk.c: Likewise. + * kern/dl.c: Likewise. + * kern/sparc64/ieee1275/init.c: Likewise. + * kern/mm.c: Likewise. + * kern/efi/mm.c: Likewise. + * boot/i386/pc/boot.S: Likewise. + * genfslist.sh: Likewise. + * fs/iso9660.c: Likewise. + * fs/hfs.c: Likewise. + * fs/jfs.c: Likewise. + * fs/minix.c: Likewise. + * fs/ufs.c: Likewise. + * gensymlist.sh.in: Likewise. + * genkernsyms.sh.in: Likewise. + * include/grub/misc.h: Likewise. + * include/grub/types.h: Likewise. + * include/grub/symbol.h: Likewise. + * include/grub/elf.h: Likewise. + * include/grub/kernel.h: Likewise. + * include/grub/disk.h: Likewise. + * include/grub/dl.h: Likewise. + * include/grub/i386/linux.h: Likewise. + * include/grub/i386/pc/biosdisk.h: Likewise. + * include/grub/efi/api.h: Likewise. + * include/grub/efi/pe32.h: Likewise. + * include/grub/util/misc.h: Likewise. + * normal/execute.c: Likewise. + * normal/arg.c: Likewise. + * normal/completion.c: Likewise. + * normal/lexer.c: Likewise. + * normal/parser.y: Likewise. + * normal/misc.c: Likewise. + * commands/i386/pc/vbeinfo.c: Likewise. + * commands/hexdump.c: Likewise. + * commands/terminal.c: Likewise. + * commands/ls.c: Likewise. + * commands/help.c: Likewise. + * partmap/pc.c: Likewise. + * loader/efi/chainloader.c: Likewise. + * loader/multiboot_loader.c: Likewise. + * loader/i386/pc/multiboot2.c: Likewise. + * term/efi/console.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * util/lvm.c: Likewise. + * util/console.c: Likewise. + * util/i386/efi/grub-mkimage.c: Likewise. + * util/raid.c: Likewise. + +2009-01-06 Vesa Jääskeläinen + + * commands/videotest.c: Removed include to grub/machine/memory.h. + + * conf/i386-pc.rmk (pkglib_MODULES): Removed video.mod, gfxterm.mod, + videotest.mod, bitmap.mod, tga.mod, jpeg.mod, png.mod. + (video_mod_SOURCES): Removed. + (video_mod_CFLAGS): Likewise. + (video_mod_LDFLAGS): Likewise. + (gfxterm_mod_SOURCES): Likewise. + (gfxterm_mod_CFLAGS): Likewise. + (gfxterm_mod_LDFLAGS): Likewise. + (videotest_mod_SOURCES): Likewise. + (videotest_mod_CFLAGS): Likewise. + (videotest_mod_LDFLAGS): Likewise. + (bitmap_mod_SOURCES): Likewise. + (bitmap_mod_CFLAGS): Likewise. + (bitmap_mod_LDFLAGS): Likewise. + (tga_mod_SOURCES): Likewise. + (tga_mod_CFLAGS): Likewise. + (tga_mod_LDFLAGS): Likewise. + (jpeg_mod_SOURCES): Likewise. + (jpeg_mod_CFLAGS): Likewise. + (jpeg_mod_LDFLAGS): Likewise. + (png_mod_SOURCES): Likewise. + (png_mod_CFLAGS): Likewise. + (png_mod_LDFLAGS): Likewise. + + * conf/common.rmk (pkglib_MODULES): Added video.mod, videotest.mod, + bitmap.mod, tga.mod, jpeg.mod, png.mod, font.mod, gfxterm.mod + (video_mod_SOURCES): Added. + (video_mod_CFLAGS): Likewise. + (video_mod_LDFLAGS): Likewise. + (videotest_mod_SOURCES): Likewise. + (videotest_mod_CFLAGS): Likewise. + (videotest_mod_LDFLAGS): Likewise. + (bitmap_mod_SOURCES): Likewise. + (bitmap_mod_CFLAGS): Likewise. + (bitmap_mod_LDFLAGS): Likewise. + (tga_mod_SOURCES): Likewise. + (tga_mod_CFLAGS): Likewise. + (tga_mod_LDFLAGS): Likewise. + (jpeg_mod_SOURCES): Likewise. + (jpeg_mod_CFLAGS): Likewise. + (jpeg_mod_LDFLAGS): Likewise. + (png_mod_SOURCES): Likewise. + (png_mod_CFLAGS): Likewise. + (png_mod_LDFLAGS): Likewise. + (gfxterm_mod_SOURCES): Likewise. + (gfxterm_mod_CFLAGS): Likewise. + (gfxterm_mod_LDFLAGS): Likewise. + + * term/gfxterm.c: Removed include to grub/machine/memory.h, + grub/machine/console.h. + +2009-01-04 Jerone Young + + Make on screen instructions clearer + + Based on patch created by Jidanni + + * normal/menu.c: print clearer instructions on the screen + +2009-01-02 Colin D Bennett + + New font engine. + + Additional changes by Vesa Jääskeläinen to adapt to + build system and fixed gfxterm.c to work with different sized fonts. + + * configure.ac: Changed UNIFONT_HEX to UNIFONT_BDF. + + * configure: Re-generated. + + * DISTLIST: Removed font/manager.c. + Added font/font.c. + Added font/font_cmd.c. + + * Makefile.in: Changed UNIFONT_HEX to UNIFONT_BDF. Added Font tool + compilation. + + * include/grub/misc.h (grub_utf8_to_ucs4): Changed prototype. Changed users. + + * kern/misc.c (grub_utf8_to_ucs4): Changed prototype. + + * kern/term.c: Changed users of grub_utf8_to_ucs4. + + * normal/menu.c: Likewise. + + * conf/common.rmk (font_mod_SOURCES): Removed font/manager.c. + (font_mod_SOURCES): Added font/font_cmd.c, font/font.c. + + * include/grub/font.h: Replaced with new file. + + * include/grub/video.h (GRUB_VIDEO_MODE_TYPE_ALPHA): Changed value. + (GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED): Likewise. + (GRUB_VIDEO_MODE_TYPE_COLOR_MASK): Likewise. + (GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP): Added. + (grub_video_blit_format): Added GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED. + (grub_video_mode_info): Added bg_red, bg_green, bg_blue, bg_alpha, + fg_red, fg_green, fg_blue, fg_alpha. + (grub_video_adapter): Removed blit_glyph. + (grub_video_blit_glyph): Removed. + + * font/manager.c: Removed file. + + * font/font.c: New file. + + * font/font_cmd.c: Likewise. + + * video/video.c (grub_video_blit_glyph): Removed. + + * video/i386/pc/vbe.c (grub_video_vbe_map_rgb): Added 1-bit support. + (grub_video_vbe_map_rgba): Likewise. + (grub_video_vbe_unmap_color_int): Likewise. + (grub_video_vbe_blit_glyph): Removed. + (grub_video_vbe_adapter): Removed blit_glyph. + + * video/i386/pc/vbeutil.c (get_data_ptr): Added 1-bit support. + (get_pixel): Likewise. + (set_pixel): Likewise. + + * commands/videotest.c (grub_cmd_videotest): Added more tests for fonts. + + * term/gfxterm.c: Adapted to new font engine. + + * term/i386/pc/vesafb.c: Marked as deprecated. Made it compile. + + * term/i386/pc/vga.c: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/BDFLoader.java: New file. + + * util/fonttool/src/org/gnu/grub/fonttool/CharDefs.java: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/CharacterRange.java: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/CharacterRange.java: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/Converter.java: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/Font.java: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/Glyph.java: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/PFF2Sections.java: Likewise. + + * util/fonttool/src/org/gnu/grub/fonttool/PFF2Writer.java: Likewise. + + * util/grub.d/00_header.in: Changed to use new loadfont command. + + * util/grub-mkconfig_lib.in: Changed font extension. + +2008-12-28 Felix Zielcke + + * util/getroot.c (grub_util_get_grub_dev): Add support for + /dev/md/dNNpNN style partitionable mdraid devices. + +2008-12-12 Alex Smith + + * fs/i386/pc/pxe.c (grub_pxefs_open): Handle the one open connection + at a time limit of the PXE TFTP API correctly. + (grub_pxefs_close): Likewise. + +2008-11-29 Robert Millan + + * disk/ata.c (grub_ata_pciinit): Handle errors raised by + grub_ata_device_initialize() calls. + +2008-11-28 Krzysztof Smiechowicz + + * fs/affs.c (grub_affs_iterate_dir): Return failure when directory + iteration failed. + * fs/sfs.c (grub_sfs_iterate_dir): Likewise. + +2008-11-28 Robert Millan + + Fix build on powerpc-ieee1275. Based on patch created by + Manoel Abranches . + * conf/powerpc-ieee1275.rmk (kernel_elf_SOURCES): Add + `kern/ieee1275/mmap.c'. + * include/grub/powerpc/ieee1275/memory.h: New file. + + Provide grub-install on coreboot. + * conf/i386-coreboot.rmk (sbin_SCRIPTS): Add `grub-install'. + (grub_install_SOURCES): New variable. + * util/i386/pc/grub-install.in: Add a few condition checks to make it + usable on coreboot. + +2008-11-25 Felix Zielcke + + * util/grub-fstest.c (grub_term_get_current_input): Change return type + to `grub_term_input_t'. + (grub_term_get_current_output): Change return type to + `grub_term_output_t'. + +2008-11-22 Robert Millan + + Fix breakage on coreboot due to declaration mismatch. + * term/i386/pc/vga_text.c (grub_vga_text_init_fini): New function. + (grub_vga_text_term): Use grub_vga_text_init_fini() instead of + grub_vga_text_cls(). + + * kern/i386/loader.S (grub_multiboot_backward_relocator): Improve + comments. Avoid copying one more byte than necessary (just in case). + + * conf/powerpc-ieee1275.rmk (kernel_elf_LDFLAGS): Change link address + to 0x200000 (avoids trouble with some OFW implementations, and matches + with the one in Yaboot). + Reported by Manoel Abranches + +2008-11-20 Robert Millan + + * kern/i386/coreboot/init.c (grub_time_tics): Remove variable. + (grub_get_rtc, grub_exit): Abort with grub_fatal() if called. + + * util/grub-mkconfig_lib.in (grub_warn): New function. + (convert_system_path_to_grub_path): Use grub_warn() when issuing + warnings, to obtain consistent formatting. + * util/grub.d/00_header.in: Likewise. + * util/update-grub_lib.in: Likewise. + + * loader/i386/linux.c (allocate_pages): Fix a warning. + Move comment text to `#error' stanza. + + Harmonize ieee1275's grub_available_iterate() with the generic + grub_machine_mmap_iterate() interface (fixes a recently-introduced + build problem on i386-ieee1275): + * kern/ieee1275/openfw.c (grub_available_iterate): Moved from here ... + * kern/ieee1275/mmap.c (grub_machine_mmap_iterate): ... here. Add third + parameter `type'. Update all users of this function. + * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Add + `kern/ieee1275/mmap.c'. + * kern/ieee1275/init.c + * include/grub/ieee1275/ieee1275.h (grub_available_iterate): Replace + with ... + (grub_machine_mmap_iterate): ... this. + * include/grub/i386/pc/memory.h (grub_machine_mmap_iterate): Change + return type to `grub_err_t'. Update all implementations of this + function prototype. + * include/grub/i386/coreboot/memory.h (grub_machine_mmap_iterate): + Likewise. + + Add `lsmmap' command (lists firmware-provided memory map): + * commands/lsmmap.c: New file. + * conf/i386-pc.rmk (pkglib_MODULES): Add `lsmmap.mod'. + (lsmmap_mod_SOURCES, lsmmap_mod_CFLAGS, lsmmap_mod_LDFLAGS): New + variables. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/i386-coreboot.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + +2008-11-19 Robert Millan + + * loader/i386/pc/linux.c (grub_rescue_cmd_initrd): Fix a typo. + * loader/i386/linux.c (grub_rescue_cmd_initrd): Implement a few needed + constraints to initrd allocation (based on code from + loader/i386/pc/linux.c). Without them, initrd was allocated too high + for Linux to find it. + +2008-11-14 Robert Millan + + * fs/cpio.c (grub_cpio_open): Compare `name' and `fn' by hand in + order to cope with duplicate slashes. + +2008-11-14 Robert Millan + + * include/grub/i386/coreboot/memory.h (GRUB_MEMORY_MACHINE_LOWER_SIZE): + Redefine to match with GRUB_MEMORY_MACHINE_UPPER_START (0x100000). We + don't want to mess with lower memory, because it is used in the Linux + loader. + + * loader/i386/linux.c (allocate_pages): Allocate `real_mode_mem' in + an appropriate place in lower memory, between 0x10000 and 0x90000, + like loader/i386/efi/linux.c does. Linux often panics if real_mode_mem + is in our heap (probably as a result of it being corrupted during + decompression). Add #error instance with comment to explain why this + loader isn't currently usable on PC/BIOS. + +2008-11-14 Robert Millan + + * term/i386/pc/serial.c [! GRUB_MACHINE_PCBIOS] + (GRUB_SERIAL_PORT_NUM): Fix miscalculation. + +2008-11-12 Robert Millan + + Make loader/i386/linux.c buildable on i386-pc (although disabled). + + * include/grub/i386/pc/init.h: Include `'. + (struct grub_machine_mmap_entry, grub_machine_mmap_iterate): Move + from here ... + * include/grub/i386/pc/memory.h: ... to here. + +2008-11-12 Robert Millan + + Fix build problems on i386-ieee1275 and *-efi (introduced by vga_text + split). + + * include/grub/i386/pc/console.h: Include `'. + (grub_console_cur_color, grub_console_real_putchar) + (grub_console_putchar, grub_console_getcharwidth, grub_console_getwh) + (grub_console_setcolorstate, grub_console_setcolor) + (grub_console_getcolor): Move from here ... + * include/grub/i386/vga_common.h: ... to here (new file). + + * term/i386/pc/vga_text.c: Replace `' with + `' and `' with + `'. + * term/i386/vga_common.c: Replace `' with + `'. + +2008-11-12 Robert Millan + + * conf/i386-pc.rmk (kernel_img_SOURCES): Add `term/i386/vga_common.c'. + * conf/i386.rmk (pkglib_MODULES): Add `vga_text.mod'. + (vga_text_mod_SOURCES, vga_text_mod_CFLAGS, vga_text_mod_LDFLAGS): New + variables. + * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Replace + `term/i386/pc/console.c' with `term/i386/vga_common.c'. + + * kern/i386/coreboot/init.c (grub_machine_init): Replace call to + grub_console_init() with call to grub_vga_text_init(). + (grub_machine_fini): Replace call to + grub_console_fini() with call to grub_vga_text_fini() and + grub_at_keyboard_fini(). + + * include/grub/i386/pc/console.h: Include `'. + (grub_console_putchar, grub_console_getcharwidth, grub_console_getwh) + (grub_console_setcolorstate, grub_console_setcolor) + (grub_console_getcolor): New function prototypes. + + * term/i386/pc/vga_text.c: Include `'. + (grub_vga_text_getxy, grub_vga_text_gotoxy, grub_vga_text_cls) + (grub_vga_text_setcursor): Static-ize. + (grub_vga_text_term): New structure. + (GRUB_MOD_INIT(vga_text), GRUB_MOD_FINI(vga_text)): New functions. + + * term/i386/pc/console.c: Remove `'. + (grub_console_cur_color, grub_console_standard_color) + (grub_console_normal_color, grub_console_highlight_color) + (map_char, grub_console_putchar, grub_console_getcharwidth) + (grub_console_getwh, grub_console_setcolorstate, grub_console_setcolor) + (grub_console_getcolor): Move from here ... + * term/i386/vga_common.c: ... to here (same function names). + +2008-11-12 Robert Millan + + Use newly-added Multiboot support in coreboot. + + * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Replace + `kern/i386/coreboot/mmap.c' with `kern/i386/multiboot_mmap.c'. + + * kern/i386/coreboot/startup.S: Enable Multiboot header, fix its + alignment, set `MULTIBOOT_MEMORY_INFO' flag. + (codestart): Store the MBI in `startup_multiboot_info' when we're + being loaded using Multiboot. + + * kern/i386/coreboot/init.c (grub_machine_init): Move + grub_at_keyboard_init() call to beginning of function (useful for + debugging). Call grub_machine_mmap_init() before attempting to use + grub_machine_mmap_iterate(). + (grub_lower_mem, grub_upper_mem): Move from here ... + * kern/i386/multiboot_mmap.c (grub_lower_mem, grub_upper_mem): ... to + here (new file). + + * include/grub/i386/coreboot/memory.h (grub_machine_mmap_init): New + function prototype. + +2008-11-12 Robert Millan + + Fix a regression introduced by the at_keyboard.mod split. Because + some terminals are default on some platforms and non-default on + others, the first terminal being registered determines which is + going to be default. + + * kern/term.c (grub_term_register_input): If this is the first + terminal being registered, set it as the current one. + (grub_term_register_output): Likewise. + + * term/efi/console.c (grub_console_init): Do not call + grub_term_set_current_output() or grub_term_set_current_input(). + * term/ieee1275/ofconsole.c (grub_console_init): Likewise. + * term/i386/pc/console.c (grub_console_init): Likewise. + (grub_console_fini): Do not call grub_term_set_current_input() + (but leave grub_term_set_current_output() to restore text mode). + +2008-11-10 Robert Millan + + * util/grub.d/00_header.in: Add backward compatibility check for + versions of terminal.mod that don't understand `terminal_input' or + `terminal_output'. + +2008-11-09 Robert Millan + + * commands/terminal.c (GRUB_MOD_FINI(terminal)): Unregister + `terminal_input' / `terminal_output', not `terminal'. + +2008-11-08 Robert Millan + + * Makefile.in (include_DATA): Fix srcdir=. assumption. + (DISTCLEANFILES): Add `build_env.mk'. + +2008-11-08 Robert Millan + + * term/i386/pc/vesafb.c (grub_vesafb_term): Change type to + `struct grub_term_output'. Remove `.checkkey' and `.getkey' + members. Update all users. + * util/console.c (grub_ncurses_term): Split in ... + (grub_ncurses_term_input): ... this, and ... + (grub_ncurses_term_output): ... this. Update all users. + * term/ieee1275/ofconsole.c: Remove stale `#endif'. + +2008-11-08 Robert Millan + + * Makefile.in (PKGLIB): Add $(pkglib_BUILDDIR). + (PKGDATA): Add $(pkgdata_SRCDIR). + (pkglib_BUILDDIR): New variable. + (pkgdata_SRCDIR): New variable. + (build_env.mk): New target. + (include_DATA): New variable. + (install-local): Install $(include_DATA) files in $(includedir). + +2008-11-07 Pavel Roskin + + * gendistlist.sh: Use C locale for sorting to ensure consistent + output on all systems. + + * util/grub.d/00_header.in: Remove incorrect space before + "serial". + +2008-11-07 Robert Millan + + * include/multiboot2.h (struct multiboot_header): Add `flags' member as + per specification. + * loader/multiboot2.c (grub_multiboot2): Fix Multiboot2 header check. + * loader/multiboot_loader.c (find_multi_boot2_header): New function + (based on find_multi_boot1_header). + (grub_rescue_cmd_multiboot_loader): Check for Multiboot2 header, + using find_multi_boot2_header(), and abort if neither Multiboot or + Multiboot headers were found. + +2008-11-07 Robert Millan + + Modularize at_keyboard.mod: + + * conf/i386.rmk (pkglib_MODULES): Add `at_keyboard.mod'. + (at_keyboard_mod_SOURCES, at_keyboard_mod_CFLAGS) + (at_keyboard_mod_LDFLAGS): New variables. + + Actual terminal split: + + * include/grub/term.h (struct grub_term): Split in ... + (struct grub_term_input): ... this, and ... + (struct grub_term_output): ... this. Update all users. + (grub_term_set_current): Split in ... + (grub_term_set_current_input): ... this, and ... + (grub_term_set_current_output): ... this. + (grub_term_get_current): Split in ... + (grub_term_get_current_input): ... this, and ... + (grub_term_get_current_output): ... this. + (grub_term_register): Split in ... + (grub_term_register_input): ... this, and ... + (grub_term_register_output): ... this. + (grub_term_unregister): Split in ... + (grub_term_unregister_input): ... this, and ... + (grub_term_unregister_output): ... this. + (grub_term_iterate): Split in ... + (grub_term_iterate_input): ... this, and ... + (grub_term_iterate_output): ... this. + + * kern/term.c (grub_term_list): Split in ... + (grub_term_list_input): ... this, and ... + (grub_term_list_output): ... this. Update all users. + (grub_cur_term): Split in ... + (grub_cur_term_input): ... this, and ... + (grub_cur_term_output): ... this. Update all users. + (grub_term_set_current): Split in ... + (grub_term_set_current_input): ... this, and ... + (grub_term_set_current_output): ... this. + (grub_term_get_current): Split in ... + (grub_term_get_current_input): ... this, and ... + (grub_term_get_current_output): ... this. + (grub_term_register): Split in ... + (grub_term_register_input): ... this, and ... + (grub_term_register_output): ... this. + (grub_term_unregister): Split in ... + (grub_term_unregister_input): ... this, and ... + (grub_term_unregister_output): ... this. + (grub_term_iterate): Split in ... + (grub_term_iterate_input): ... this, and ... + (grub_term_iterate_output): ... this. + + * kern/misc.c (grub_abort): Split use of grub_term_get_current() into + a check for input and one for output (and only attempt to get keys + from user when input works). + + * util/grub-probe.c (grub_term_get_current): Split in ... + (grub_term_get_current_input): ... this, and ... + (grub_term_get_current_output): ... this. + * util/grub-fstest.c: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/grub-editenv.c: Likewise. + + Portability adjustments: + + * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Remove + `term/i386/pc/at_keyboard.c'. + * kern/ieee1275/init.c [__i386__] (grub_machine_init): Remove call to + grub_keyboard_controller_init() (now handled by terminal .init). + * kern/i386/coreboot/init.c (grub_machine_init): Add call to + grub_at_keyboard_init(). + * include/grub/i386/ieee1275/console.h (grub_keyboard_controller_init) + (grub_console_checkkey, grub_console_getkey): Remove (now provided by + at_keyboard.mod via input terminal interface). + * include/grub/i386/coreboot/console.h: Convert into a stub for + `'. + + Migrate full terminals to new API: + + * term/efi/console.c (grub_console_term): Split into ... + (grub_console_term_input): ... this, and ... + (grub_console_term_output): ... this. Update all users. + * term/ieee1275/ofconsole.c: Remove __i386__ hack. + (grub_ofconsole_init): Split into ... + (grub_ofconsole_init_input): ... this, and ... + (grub_ofconsole_init_output): ... this. + (grub_ofconsole_term): Split into ... + (grub_ofconsole_term_input): ... this, and ... + (grub_ofconsole_term_output): ... this. Update all users. + * term/i386/pc/serial.c (grub_serial_term): Split into ... + (grub_serial_term_input): ... this, and ... + (grub_serial_term_output): ... this. Update all users. + * term/i386/pc/console.c (grub_console_term): Split into ... + (grub_console_term_input): ... this, and ... + (grub_console_term_output): ... this. Update all users. + (grub_console_term_input): Only enable it on PC/BIOS platform. + (grub_console_init): Remove grub_keyboard_controller_init() call. + + Migrate input terminals to new API: + + * term/i386/pc/at_keyboard.c: Replace `cpu' and `machine' with + `i386' and `i386/pc' to enable build on x86_64 (this driver is + i386-specific anyway). + (grub_console_checkkey): Rename to ... + (grub_at_keyboard_checkkey): ... this. Static-ize. Update all + users. + (grub_keyboard_controller_orig): New variable. + (grub_console_getkey): Rename to ... + (grub_at_keyboard_getkey): ... this. Static-ize. Update all + users. + (grub_keyboard_controller_init): Static-ize. Save original + controller value so that it can be restored ... + (grub_keyboard_controller_fini): ... here (new function). + (grub_at_keyboard_term): New structure. + (GRUB_MOD_INIT(at_keyboard), GRUB_MOD_FINI(at_keyboard)): New + functions. + + Migrate output terminals to new API: + + * term/i386/pc/vga.c (grub_vga_term): Change type to + `struct grub_term_output'. Remove `.checkkey' and `.getkey' + members. Update all users. + * term/gfxterm.c (grub_video_term): Change type to + `struct grub_term_output'. Remove `.checkkey' and `.getkey' + members. Update all users. + * include/grub/i386/pc/console.h (grub_console_checkkey) + (grub_console_getkey): Do not export (no longer needed by gfxterm, + etc). + + Migrate `terminal' command and userland tools to new API: + + * commands/terminal.c (grub_cmd_terminal): Split into ... + (grub_cmd_terminal_input): ... this, and ... + (grub_cmd_terminal_output): ... this. + (GRUB_MOD_INIT(terminal)): Split `terminal' command in two commands: + `terminal_input' and `terminal_output'. + * util/grub.d/00_header.in: Adjust `terminal' calls to new + `terminal_input' / `terminal_output' API. + * util/grub-mkconfig.in: Export ${GRUB_TERMINAL_INPUT} and + ${GRUB_TERMINAL_OUTPUT} instead of ${GRUB_TERMINAL} (and if user + provided ${GRUB_TERMINAL}, convert it). + +2008-11-04 Robert Millan + + * util/grub.d/10_freebsd.in: New file. Generate grub configuration + for FreeBSD. + * conf/common.rmk (grub-mkconfig_SCRIPTS): Add 10_freebsd. + +2008-11-03 Bean + + * kern/elf.c (grub_elf32_load): Revert to previous code. + (grub_elf64_load): Likewise. + + * loader/i386/bsd.c (grub_bsd_elf32_hook): Change return address. + +2008-11-01 Robert Millan + + * Makefile.in (CPPFLAGS): Fix builddir=. assumption. + (TARGET_CPPFLAGS): Likewise. + * genmk.rb (mod_src): Fix builddir=. and srcdir=. assumptions. + +2008-11-01 Carles Pina i Estany + + * normal/menu.c (run_menu): Add Previous and Next Page keys in menu. + +2008-10-29 Guillem Jover + + * disk/lvm.c (grub_lvm_scan_device): Fix error recovery by delaying the + addition of objects until the code is not going to be able to fail. + +2008-10-29 Guillem Jover + + * disk/lvm.c (grub_lvm_scan_device): Fix possible NULL value handling + (add a missing NULL check, and correct them by moving the pointer + operations after the actual check). + +2008-10-29 Robert Millan + + * util/i386/pc/grub-install.in: Handle empty string as output from + make_system_path_relative_to_its_root(). + +2008-10-05 Hans Lambermont + + * disk/lvm.c (grub_lvm_scan_device): Allocate buffer space for the + circular metadata worst case scenario. If the metadata is circular + then copy the wrap in place. + * include/grub/lvm.h: Add GRUB_LVM_MDA_HEADER_SIZE, from the LVM2 + project lib/format_text/layout.h + Circular metadata bug found and patch debugged by Jan Derk Gerlings. + +2008-10-03 Felix Zielcke + + * util/i386/pc/grub-install.in: Source grub-mkconfig_lib instead of update-grub_lib. + +2008-10-03 Felix Zielcke + + * util/update-grub_lib.in: Mention filename in warning message. + +2008-09-29 Felix Zielcke + + * NEWS: Update for rename of update-grub to grub-mkconfig. + +2008-09-29 Felix Zielcke + + * util/update-grub_lib.in: Copy to ... + * util/grub-mkconfig_lib.in: ... this. Update all users. + * util/update-grub_lib.in: Make it a stub to `grub-mkconfig_lib.in'. + * util/update-grub.in: Rename to ... + * util/grub-mkconfig.in: ... this. Update all users. Remove `-y' + option. Add `--output' option to allow users to specify the generated + configuration file. Default to stdout. + (update_grub_dir): Rename to ... + (grub_mkconfig_dir): ... this. + (grub_cfg): Default to an empty string. + * conf/common.rmk (update-grub): Rename to ... + (grub-mkconfig): ... this. + (update-grub_lib): Copy to ... + (grub-mkconfig_lib): ... this. + (update-grub_SCRIPTS): Copy to ... + (grub-mkconfig_SCRIPTS): ... this. Update all users. + (update-grub_DATA): Rename to ... + (grub-mkconfig_DATA): ... this. + +2008-09-28 Robert Millan + + * fs/iso9660.c (struct grub_iso9660_primary_voldesc): Rename `created' + to `modified'. Add the real `created' field. + (grub_iso9660_uuid): Use `modified' rather than `created' for + constructing the UUID. + +2008-09-28 Felix Zielcke + + fs/jfs.c (grub_jfs_find_file): Treat multiple slashes like one. + Based on code from Tomas Ebenlendr . + +2008-09-28 Bean + + * fs/ntfs.c (grub_ntfs_iterate_dir): Fix a bug in the previous patch. + Thanks to Christian Franke for finding this bug. + +2008-09-25 Robert Millan + + * util/grub-mkdevicemap.c (make_device_map): Actually replace all + instances of grub_util_get_disk_name() (see previous commit). + +2008-09-25 Robert Millan + + * conf/i386-pc.rmk (grub_mkdevicemap_SOURCES): Remove + `util/i386/get_disk_name.c'. + * conf/i386-efi.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * conf/i386-coreboot.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/powerpc-ieee1275.rmk (grub_mkdevicemap_SOURCES): Remove + `util/ieee1275/get_disk_name.c'. + * include/grub/util/misc.h (grub_util_get_disk_name): Remove. + * util/ieee1275/get_disk_name.c: Remove file. + * util/i386/get_disk_name.c: Remove file. + * util/grub-mkdevicemap.c (make_device_map): Back to hardcoding + "hd%d" for device.map entries, rather than using + grub_util_get_disk_name(). + +2008-09-24 Carles Pina i Estany + + * disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Fix `unused parameter' + warning. + * commands/i386/pc/pxecmd.c (dmraid_nvidia): Likewise. + +2008-09-24 Carles Pina i Estany + + * include/grub/i386/pc/console.h (GRUB_TERM_NPAGE): + Changed to 0x5100. + (GRUB_TERM_PPAGE): Changed to 0x4900. + +2008-09-24 Robert Millan + + * include/grub/powerpc/ieee1275/console.h (GRUB_CONSOLE_KEY_*): Remove + macros (they were i386-pc specific). + * include/grub/sparc64/ieee1275/console.h: Likewise. + * include/grub/efi/console.h: Likewise. + +2008-09-22 Bean + + * fs/ntfs.c (grub_ntfs_iterate_dir): Fix a rare case where $BITMAP is + resident and in attribute list. + + * include/grub/ntfs.h (BMP_LEN): Removed. + +2008-09-22 Bean + + * disk/ata.c (grub_atapi_open): Initialize devfnd, no need to set + scsi->name and scsi->luns, as they will be set in grub_scsi_open. + + * disk/scsi.c (grub_scsi_open): Don't call p->close (scsi) here when + error occurs, as grub_disk_open will call grub_disk_close, which will + call p->close (scsi). + +2008-09-21 Felix Zielcke + + * configure.ac (AC_INIT): Quote `GRUB' string and version number. + (AC_PREREQ): Bumped to 2.59. + (AC_TRY_COMPILE): Replace obsolete macro with ... + (AC_COMPILE_IFELSE): ... this. + * aclocal.m4 (AC_TRY_LINK): Replace obsolete macro with ... + (AC_LINK_IFELSE): ... this. + +2008-09-21 Felix Zielcke + + * autogen.sh: Add a call to `gendistlist.sh'. + +2008-09-19 Christian Franke + + * aclocal.m4 (grub_CHECK_ENABLE_EXECUTE_STACK): New function. + * configure.ac: Call grub_CHECK_ENABLE_EXECUTE_STACK. + * include/grub/misc.h [NEED_ENABLE_EXECUTE_STACK]: + Export __enable_execute_stack() to modules. + * kern/misc.c [NEED_ENABLE_EXECUTE_STACK] (__enable_execute_stack): + New function. + +2008-09-09 Felix Zielcke + + * Makefile.in (RMKFILES): Add `i386.rmk' and `x86_64-efi.rmk'. + Sort the list. + +2008-09-09 Felix Zielcke + + * util/hostdisk.c: Replace #include with + #include . + +2008-09-08 Robert Millan + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Skip + segments when their filesz is zero (grub_file_read() interprets + zero-size as "read until EOF", which results in memory corruption). + Use `lowest_segment' rather than 0 for calculating the current + segment load address. + +2008-09-08 Robert Millan + + * util/hostdisk.c (open_device): Replace a grub_util_info() call + with grub_dprintf("hostdisk", ...), as it was so verbose that it + clobbered useful information. + +2008-09-08 Robert Millan + + * include/grub/util/biosdisk.h: Move to ... + * include/grub/util/hostdisk.h: ... here. Update all users. + * util/biosdisk.c: Move to ... + * util/hostdisk.c: ... here. Update all users. + +2008-09-07 Robert Millan + + * loader/i386/pc/multiboot.c (mmap_addr, mmap_length): Remove + variables. + (grub_multiboot): Move `mbi' allocation upwards, so that mmap address + and length can be stored directly in the `mbi->mmap_addr' and + `mbi->mmap_length' struct fields. + +2008-09-07 Robert Millan + + * conf/i386.rmk: New file. Provides declaration for building + `cpuid.mod'. + * conf/i386-pc.rmk (pkglib_MODULES): Remove `cpuid.mod'. + (cpuid_mod_SOURCES, cpuid_mod_CFLAGS, cpuid_mod_LDFLAGS): Remove + variables. + Include `conf/i386.mk'. + * conf/i386-efi.rmk: Likewise. + * conf/x86_64-efi.rmk: Likewise. + * conf/i386-coreboot.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + +2008-09-07 Vesa Jääskeläinen + + Based on patch created by Colin D Bennett . + Adds optimization support for BGR based modes. + + * include/grub/i386/pc/vbeblit.h (grub_video_i386_vbeblit_R8G8B8A8_R8G8B8A8) Removed. + (grub_video_i386_vbeblit_R8G8B8X8_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8A8): Likewise. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8A8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_R8G8B8A8_R8G8B8): Likewise. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8): Likewise. + (grub_video_i386_vbeblit_index_index): Likewise. + (grub_video_i386_vbeblit_replace_directN): Added. + (grub_video_i386_vbeblit_replace_BGRX8888_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_BGRX8888_RGB888): Likewise. + (grub_video_i386_vbeblit_replace_BGR888_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_BGR888_RGB888): Likewise. + (grub_video_i386_vbeblit_replace_RGBX8888_RGB888): Likewise. + (grub_video_i386_vbeblit_replace_RGB888_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_index_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_index_RGB888): Likewise. + (grub_video_i386_vbeblit_blend_BGRA8888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_BGR888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_RGBA8888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_RGB888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_index_RGBA8888): Likewise. + + * include/grub/i386/pc/vbefill.h (grub_video_i386_vbefill_R8G8B8A8) Removed. + (grub_video_i386_vbefill_R8G8B8): Likewise. + (grub_video_i386_vbefill_index): Likewise. + (grub_video_i386_vbefill_direct32): Added. + (grub_video_i386_vbefill_direct24): Likewise. + (grub_video_i386_vbefill_direct16): Likewise. + (grub_video_i386_vbefill_direct8): Likewise. + + * include/grub/video.h (grub_video_blit_format): Removed + GRUB_VIDEO_BLIT_FORMAT_R8G8B8A8, GRUB_VIDEO_BLIT_FORMAT_R8G8B8. + (grub_video_blit_format): Added GRUB_VIDEO_BLIT_FORMAT_RGBA_8888, + GRUB_VIDEO_BLIT_FORMAT_BGRA_8888, GRUB_VIDEO_BLIT_FORMAT_RGB_888, + GRUB_VIDEO_BLIT_FORMAT_BGR_888, GRUB_VIDEO_BLIT_FORMAT_RGB_565, + GRUB_VIDEO_BLIT_FORMAT_BGR_565. + + * video/video.c (grub_video_get_blit_format): Updated to use new + blit formats. Added handling for 16 bit color modes. + + * video/i386/pc/vbe.c (grub_video_vbe_fill_rect): Updated to use new + fillers. + (common_blitter): Updated to use new blitters. + + * video/i386/pc/vbeblit.c (grub_video_i386_vbeblit_R8G8B8A8_R8G8B8A8): + Removed. + (grub_video_i386_vbeblit_R8G8B8X8_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8A8): Likewise. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8A8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_R8G8B8A8_R8G8B8): Likewise. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8): Likewise. + (grub_video_i386_vbeblit_index_index): Likewise. + (grub_video_i386_vbeblit_replace_directN): Added. + (grub_video_i386_vbeblit_replace_BGRX8888_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_BGRX8888_RGB888): Likewise. + (grub_video_i386_vbeblit_replace_BGR888_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_BGR888_RGB888): Likewise. + (grub_video_i386_vbeblit_replace_RGBX8888_RGB888): Likewise. + (grub_video_i386_vbeblit_replace_RGB888_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_index_RGBX8888): Likewise. + (grub_video_i386_vbeblit_replace_index_RGB888): Likewise. + (grub_video_i386_vbeblit_blend_BGRA8888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_BGR888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_RGBA8888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_RGB888_RGBA8888): Likewise. + (grub_video_i386_vbeblit_blend_index_RGBA8888): Likewise. + + * video/i386/pc/vbefill.c (grub_video_i386_vbefill_R8G8B8A8): Removed. + (grub_video_i386_vbefill_R8G8B8): Likewise. + (grub_video_i386_vbefill_index): Likewise. + (grub_video_i386_vbefill_direct32): Added. + (grub_video_i386_vbefill_direct24): Likewise. + (grub_video_i386_vbefill_direct16): Likewise. + (grub_video_i386_vbefill_direct8): Likewise. + + * video/readers/jpeg.c (grub_jpeg_decode_sos): Adapt to new blitter + types. + + * video/readers/tga.c (grub_video_reader_tga): Adapt to new blitter + types. + + * video/readers/png.c (grub_png_decode_image_header): Adapt to new + blitter types. + + * video/bitmap.c (grub_video_bitmap_create): Adapt to new blitter + types. + +2008-09-06 Felix Zielcke + + * disk/raid.c (insert_array): Set `array->chunk_size' to 64 for + RAID level 1. + +2008-09-06 Felix Zielcke + + * fs/iso9660.c (grub_iso9660_date): New structure. + (grub_iso9660_primary_voldesc): Add `grub_iso9660_date' member. + (grub_iso9660_uuid): New function. + +2008-09-05 Bean + + * fs/fshelp.c (grub_fshelp_find_file): Handle case insensitive names. + + * fs/ntfs.c (list_file): Ignore names in DOS namespace, set the case + insensitive bit for names in Win32 and Win32 & DOS namespace. + + * include/grub/fshelp.h (GRUB_FSHELP_CASE_INSENSITIVE): New macro. + + * include/grub/types.h (LONG_MAX): Likewise. + +2008-09-04 Felix Zielcke + + * util/getroot.c: Include . + (grub_util_get_grub_dev): Rewrite to use asprintf for mdraid devices, + add support for /dev/md/N devices and handle LVM double dash escaping. + +2008-09-04 Felix Zielcke + + * config.guess: Update to latest version from config git. + * config.sub: Likewise. + +2008-09-03 Robert Millan + + * disk/scsi.c (grub_scsi_open): Remove size limit when printing + `disk->total_sectors'. + +2008-09-01 Colin D Bennett + + * include/grub/normal.h: Fixed incorrect comment for + GRUB_COMMAND_FLAG_NO_ARG_PARSE. + +2008-09-01 Colin D Bennett + + * commands/i386/pc/vbeinfo.c (grub_cmd_vbeinfo): Replaced constant + values with defines. + + * include/grub/i386/pc/vbe.h (GRUB_VBE_MODEATTR_SUPPORTED): Added. + (GRUB_VBE_MODEATTR_RESERVED_1): Likewise. + (GRUB_VBE_MODEATTR_BIOS_TTY_OUTPUT_SUPPORT): Likewise. + (GRUB_VBE_MODEATTR_COLOR): Likewise. + (GRUB_VBE_MODEATTR_GRAPHICS): Likewise. + (GRUB_VBE_MODEATTR_VGA_COMPATIBLE): Likewise. + (GRUB_VBE_MODEATTR_VGA_WINDOWED_AVAIL): Likewise. + (GRUB_VBE_MODEATTR_LFB_AVAIL): Likewise. + (GRUB_VBE_MODEATTR_DOUBLE_SCAN_AVAIL): Likewise. + (GRUB_VBE_MODEATTR_INTERLACED_AVAIL): Likewise. + (GRUB_VBE_MODEATTR_TRIPLE_BUF_AVAIL): Likewise. + (GRUB_VBE_MODEATTR_STEREO_AVAIL): Likewise. + (GRUB_VBE_MODEATTR_DUAL_DISPLAY_START): Likewise. + (GRUB_VBE_MEMORY_MODEL_TEXT): Likewise. + (GRUB_VBE_MEMORY_MODEL_CGA): Likewise. + (GRUB_VBE_MEMORY_MODEL_HERCULES): Likewise. + (GRUB_VBE_MEMORY_MODEL_PLANAR): Likewise. + (GRUB_VBE_MEMORY_MODEL_NONCHAIN4_256): Likewise. + (GRUB_VBE_MEMORY_MODEL_YUV): Likewise. + +2008-08-31 Robert Millan + + * loader/i386/pc/multiboot.c (grub_get_multiboot_mmap_len): Fix + declaration. + (grub_multiboot): Fix a few warnings. + +2008-08-31 Robert Millan + + * loader/i386/pc/multiboot.c: Update comment not to say that + boot_device support is unimplemented. + +2008-08-31 Robert Millan + + * loader/i386/pc/multiboot.c: Update comment not to say that a.out + or memory map support are unimplemented. + +2008-08-31 Colin D Bennett + + * util/i386/pc/grub-mkrescue.in: Support multiple overlay directories. + +2008-08-31 Colin D Bennett + + * commands/i386/pc/vbeinfo.c (grub_cmd_vbeinfo): Show VBE version and + total video memory in 'vbeinfo' output; show color format details for + each video mode. + +2008-08-30 Pavel Roskin + + * util/genmoddep.c: Remove for real this time. + * DISTLIST: Remove util/genmoddep.c. + +2008-08-30 Robert Millan + + * kern/i386/pc/startup.S (multiboot_header): Force 4-byte alignment + as required by Multiboot spec (it was already 4-byte aligned, but + only by chance). + +2008-08-29 Pavel Roskin + + * kern/powerpc/ieee1275/crt0.S: Rename to ... + * kern/powerpc/ieee1275/startup.S: ... this. + * conf/powerpc-ieee1275.rmk: Adjust for the above. + * DISTLIST: Likewise. + + * kern/powerpc/ieee1275/crt0.S: Include grub/symbol.h and + grub/cpu/kernel.h. Add start label for consistency with other + platforms. Add grub_prefix immediately after start. Add jump + to the code after grub_prefix. + * include/grub/powerpc/kernel.h: Provide valid values for + GRUB_KERNEL_CPU_PREFIX and GRUB_KERNEL_CPU_DATA_END. + +2008-08-29 Bean + + * configure.ac: Change host_os to cygwin for mingw. + (asprintf): New check for function. + + * include/grub/symbol.h: Replace #ifndef __CYGWIN__ with + #if ! defined (__CYGWIN__) && ! defined (__MINGW32__). + + * include/grub/util/misc.h: #include and , + declare asprintf if HAVE_ASPRINTF is not set, declare fseeko, ftello, + sync, sleep and grub_util_get_disk_size for mingw. + + * util/biosdisk.c (grub_util_biosdisk_open): Use grub_util_get_disk_size + to get size in mingw. + (open_device): Use flag O_BINARY if it's defined. + (find_root_device): Add dummy code for mingw. + + * util/grub-mkdevicemap.c (get_floppy_disk_name): Return 0 for mingw. + (get_ide_disk_name): Return //./PHYSICALDRIVE%d for mingw. + (get_scsi_disk_name): Return 0 for mingw. + + * util/hostfs.c: #include . + (grub_hostfs_open): Use "rb" flag to open file, use + grub_util_get_disk_size to get disk size for mingw. + + * util/misc.c: #include and in mingw. + (asprintf): New function if HAVE_ASPRINTF is not set. + (sync): New function for mingw. + (sleep): Likewise. + (grub_util_get_disk_size): Likewise. + +2008-08-28 Pavel Roskin + + * conf/powerpc-ieee1275.rmk (kernel_elf_SOURCES): Add + kern/time.c. + +2008-08-28 Robert Millan + + * util/biosdisk.c (find_grub_drive): Declare missing `i' variable. + +2008-08-28 Robert Millan + + Change find_grub_drive() syntax so it doesn't prevent it from + detecting NULL names as errors. + + * util/biosdisk.c (find_grub_drive): Move free slot search code + from here ... + (find_free_slot): ... to here. + (read_device_map): Use find_free_slot() to search for free slots. + +2008-08-27 Marco Gerards + + * conf/common.rmk (pkglib_MODULES): Add scsi.mod. + (scsi_mod_SOURCES): New variable. + (scsi_mod_CFLAGS): Likewise + (scsi_mod_LDFLAGS): Likewise. + + * disk/scsi.c: New file. + + * include/grub/scsi.h: Likewise. + + * include/grub/scsicmd.h: Likewise. + + * disk/ata.c: Include . + (grub_atapi_packet): Do not use grub_ata_cmd, use registers + instead. + (grub_ata_iterate): Skip ATAPI devices. + (grub_ata_open): Only handle ATAPI devices. + (struct grub_atapi_read): Removed. + (grub_atapi_readsector): Likewise. + (grub_ata_read): No longer handle ATAPI devices. + (grub_ata_write): Likewise. + (grub_atapi_iterate): New function. + (grub_atapi_read): Likewise. + (grub_atapi_write): Likewise. + (grub_atapi_open): Likewise. + (grub_atapi_close): Likewise. + (grub_atapi_dev): New variable. + (GRUB_MOD_INIT(ata)): Register ATAPI as SCSI device. + (GRUB_MOD_FINI(ata)): Unregister ATAPI. + + * include/grub/disk.h (enum grub_disk_dev_id): Add + `GRUB_DISK_DEVICE_SCSI_ID'. + +2008-08-26 Robert Millan + + * util/biosdisk.c (grub_util_biosdisk_open, open_device) + (grub_util_biosdisk_get_grub_dev): Make error messages a bit more + descriptive. + +2008-08-23 Bean + + * conf/common.rmk (grub_probe_SOURCES): Add disk/mdraid_linux.c. + (grub_fstest_SOURCES): Add disk/raid5_recover.c, disk/raid6_recover.c, + disk/mdraid_linux.c and disk/dmraid_nvidia.c and lib/crc.c. + (pkglib_MODULES): Add raid5rec.mod, raid6rec.mod, mdraid.mod and + dm_nv.mod. + (raid5rec_mod_SOURCES): New macro. + (raid5rec_mod_CFLAGS): Likewise. + (raid5rec_mod_LDFLAGS): Likewise. + (raid6rec_mod_SOURCES): Likewise. + (raid6rec_mod_CFLAGS): Likewise. + (raid6rec_mod_LDFLAGS): Likewise. + (mdraid_mod_SOURCES): Likewise. + (mdraid_mod_CFLAGS): Likewise. + (mdraid_mod_LDFLAGS): Likewise. + (dm_nv_mod_SOURCES): Likewise. + (dm_nv_mod_CFLAGS): Likewise. + (dm_nv_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add disk/mdraid_linux.c. + (grub_emu_SOURCES): Add disk/raid5_recover.c, disk/raid6_recover.c, + disk/mdraid_linux.c and disk/dmraid_nvidia.c. + + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Add disk/raid5_recover.c, + disk/raid6_recover.c, disk/mdraid_linux.c and disk/dmraid_nvidia.c. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * disk/raid5_recover.c: New file. + + * disk/raid6_recover.c: Likewise. + + * disk/mdraid_linux.c: Likewise. + + * disk/dmraid_nvidia.c: Likewise. + + * disk/i386/pc/biosdisk.c: Set total_sectors of cdrom device to + ULONG_MAX. + + * disk/raid.c (grub_raid_open): Use the size of the smallest disk to + calculate the size of raid device. + (grub_raid_read): Simplify raid0 code. Support raid4, raid6 and four + different layout of raid5. + (grub_raid_scan_device): Remove code specific to mdraid. + (grub_raid_list): New variable. + (free_array): New function. + (grub_raid_register): Likewise. + (grub_raid_unregister): Likewise. + (grub_raid_rescan): Likewise. + (GRUB_MOD_INIT): Don't iterate device here. + (GRUB_MOD_FINI): Use free_array to release resource. + + * include/grub/raid.h: Remove macro and structure specific to mdraid. + (grub_raid5_recover_func_t): New function variable type. + (grub_raid6_recover_func_t): Likewise. + (grub_raid5_recover_func): New variable. + (grub_raid6_recover_func): Likewise. + (grub_raid_register): New function. + (grub_raid_unregister): Likewise. + (grub_raid_rescan): Likewise. + (grub_raid_block_xor): Likewise. + + * util/grub-fstest.c: Add #include and . + (CMD_CRC): New macro. + (part): Removed. + (read_file): Handle device as well as file. + (cmd_crc): New function. + (fstest): Handle multiple disks. + (options): Remove part, raw and long, add root and diskcount. + (usage): Add crc, remove -p, -r, -l, add -r and -c. + (main): Find the first non option entry and ignore subsequent options, + add handling for the new options, support multiple disks. + + * util/grub-probe.c (probe): Add mdraid to abstraction_name. + +2008-08-23 Bean + + * normal/x86_64/setjmp.S (grub_longjmp): Return 1 when val = 0. + + * genfslist.sh: Ignore kernel.mod. + + * genpartmaplist.sh: Likewise. + +2008-08-23 Robert Millan + + * util/getroot.c (find_root_device): Skip anything that starts with + a dot, not just directories. This avoids things like /dev/.tmp.md0. + +2008-08-22 Felix Zielcke + + * util/update-grub.in (GRUB_GFXMODE): Export variable. + * util/grub.d/00_header.in: Allow the administrator to change default + gfxmode via ${GRUB_GFXMODE}. + +2008-08-21 Felix Zielcke + + * fs/ntfs.c (grub_ntfs_mount): Fix a memory leak. + +2008-08-21 Robert Millan + + * loader/i386/linux.c: New file. Implements generic 32-bit Linux + loader. + * conf/i386-coreboot.rmk (_linux_mod_SOURCES): Replace + `loader/i386/pc/linux.c' with `loader/i386/linux.c'. + +2008-08-20 Carles Pina i Estany + + * menu/normal.c (run_menu): Replace hardcoded numbers with macros + (16 for GRUB_TERM_UP and 14 for GRUB_TERM_DOWN) + +2008-08-19 Robert Millan + + * term/gfxterm.c (DEFAULT_CURSOR_COLOR): Remove. + (struct grub_virtual_screen): Remove `cursor_color'. + (grub_virtual_screen_setup): Remove `virtual_screen.cursor_color' + initialization. + (write_cursor): Use `virtual_screen.fg_color' to draw cursor. + +2008-08-18 Robert Millan + + Unify (identical) linux_normal.c files. + * loader/i386/efi/linux_normal.c: Move from here ... + * loader/linux_normal.c: ... to here. Update all users. + * loader/i386/pc/linux_normal.c: Delete. Update all users. + * loader/i386/ieee1275/linux_normal.c: Likewise. + +2008-08-18 Robert Millan + + * include/grub/i386/linux.h (LINUX_LOADER_ID_LILO) + (LINUX_LOADER_ID_LOADLIN, LINUX_LOADER_ID_BOOTSECT) + (LINUX_LOADER_ID_SYSLINUX, LINUX_LOADER_ID_ETHERBOOT) + (LINUX_LOADER_ID_ELILO, LINUX_LOADER_ID_GRUB, LINUX_LOADER_ID_UBOOT) + (LINUX_LOADER_ID_XEN, LINUX_LOADER_ID_GUJIN, LINUX_LOADER_ID_QEMU): + New macros. + (GRUB_LINUX_CL_OFFSET, GRUB_LINUX_CL_END_OFFSET): Move from here ... + * loader/i386/pc/linux.c (GRUB_LINUX_CL_OFFSET) + (GRUB_LINUX_CL_END_OFFSET): ... to here. + * loader/i386/efi/linux.c (GRUB_EFI_CL_OFFSET): Rename to ... + (GRUB_LINUX_CL_OFFSET): ... this. Update all users. + (GRUB_EFI_CL_END_OFFSET): Rename to ... + (GRUB_LINUX_CL_END_OFFSET): ... this. Update all users. + (grub_rescue_cmd_linux): Macroify `type_of_loader' initialization. + Initialize `params->video_cursor_x' and `params->video_cursor_y' + portably using grub_getxy(). + Replace `-EFI' with `-bzImage' in boot message. + +2008-08-17 Robert Millan + + * include/grub/x86_64/kernel.h: New file ( stub). + +2008-08-17 Robert Millan + + * conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/i386/pc/mmap.c'. + + * include/grub/i386/pc/init.h (GRUB_MACHINE_MEMORY_AVAILABLE) + (GRUB_MACHINE_MEMORY_RESERVED): New macros. + (grub_machine_mmap_iterate): New function declaration. + * include/grub/multiboot.h (struct grub_multiboot_mmap_entry): New + structure. + (GRUB_MMAP_MEMORY_AVAILABLE, GRUB_MMAP_MEMORY_RESERVED): New + macros. + + * kern/i386/pc/init.c (grub_machine_init): Replace hardcoded region + type check value with `GRUB_MACHINE_MEMORY_AVAILABLE'. + Move e820 parsing from here ... + * kern/i386/pc/mmap.c: New file. + (grub_machine_mmap_iterate): ... to here. + + * include/grub/i386/coreboot/memory.h: Remove `'. + (GRUB_LINUXBIOS_MEMORY_AVAILABLE): Rename (for consistency) to ... + (GRUB_MACHINE_MEMORY_AVAILABLE): ... this. Update all users. + (grub_available_iterate): Redeclare to return `void', and redeclare + its hook to use grub_uint64_t as addr and size parameters, and rename + to ... + (grub_machine_mmap_iterate): ... this. Update all users. + + * kern/i386/coreboot/mmap.c (grub_mmap_iterate): Simplify parser loop + to make it more readable. Rename to ... + (grub_machine_mmap_iterate): ... this. + + * loader/i386/pc/multiboot.c (mmap_addr, mmap_length): New variables. + (grub_get_multiboot_mmap_len, grub_fill_multiboot_mmap): New functions. + (grub_multiboot): Allocate an extra region after the payload, and fill + it with a Multiboot memory map. Adjust a.out loader to calculate size + with the extra space. + (grub_multiboot_load_elf32): Adjust elf32 loader to calculate size + with the extra space. + +2008-08-17 Carles Pina i Estany + + * menu/normal.c (run_menu): Add Home and End keys in grub-menu. + +2008-08-17 Felix Zielcke + + * gendistlist.sh: Add *.y, *.tex, *.texi, grub.cfg, README, *.sc, + mdate-sh to the list `find' searches for. + * DISTLIST: Regenerated. + +2008-08-16 Felix Zielcke + + * gendistlist.sh (EXTRA_DISTFILES): Remove gensymlist.sh, + genkernsyms.sh. Add geninit.sh, geninitheader.sh, genkernsyms.sh.in, + genmoddep.awk, gensymlist.sh.in. + (DISTDIRS): Add bus, docs, hook, lib. + * DISTLIST: Regenerated. + * NEWS: Add cygwin support and change the `os-prober' entry a bit. + +2008-08-16 Robert Millan + + * disk/raid.c (grub_raid_init): Handle/report errors set by + grub_device_iterate(). + * disk/lvm.c (grub_lvm_init): Likewise. + +2008-08-15 Bean + + * conf/i386-pc.rmk (pkglib_MODULES): Add datetime.mod, date.mod + and datehook.mod. + (datetime_mod_SOURCES): New macro. + (datetime_mod_CFLAGS): Likewise. + (datetime_mod_LDFLAGS): Likewise. + (date_mod_SOURCES): Likewise. + (date_mod_CFLAGS): Likewise. + (date_mod_LDFLAGS): Likewise. + (datehook_mod_SOURCES): Likewise. + (datehook_mod_CFLAGS): Likewise. + (datehook_mod_LDFLAGS): Likewise. + + * conf/i386-coreboot.rmk (pkglib_MODULES): Add datetime.mod, date.mod + and datehook.mod. + (datetime_mod_SOURCES): New macro. + (datetime_mod_CFLAGS): Likewise. + (datetime_mod_LDFLAGS): Likewise. + (date_mod_SOURCES): Likewise. + (date_mod_CFLAGS): Likewise. + (date_mod_LDFLAGS): Likewise. + (datehook_mod_SOURCES): Likewise. + (datehook_mod_CFLAGS): Likewise. + (datehook_mod_LDFLAGS): Likewise. + + * conf/i386-ieee1275.rmk (pkglib_MODULES): Add datetime.mod, date.mod + and datehook.mod. + (datetime_mod_SOURCES): New macro. + (datetime_mod_CFLAGS): Likewise. + (datetime_mod_LDFLAGS): Likewise. + (date_mod_SOURCES): Likewise. + (date_mod_CFLAGS): Likewise. + (date_mod_LDFLAGS): Likewise. + (datehook_mod_SOURCES): Likewise. + (datehook_mod_CFLAGS): Likewise. + (datehook_mod_LDFLAGS): Likewise. + + * conf/i386-efi.rmk (pkglib_MODULES): Add datetime.mod, date.mod + and datehook.mod. + (datetime_mod_SOURCES): New macro. + (datetime_mod_CFLAGS): Likewise. + (datetime_mod_LDFLAGS): Likewise. + (date_mod_SOURCES): Likewise. + (date_mod_CFLAGS): Likewise. + (date_mod_LDFLAGS): Likewise. + (datehook_mod_SOURCES): Likewise. + (datehook_mod_CFLAGS): Likewise. + (datehook_mod_LDFLAGS): Likewise. + + * conf/x86_64-efi.rmk (pkglib_MODULES): Add datetime.mod, date.mod + and datehook.mod. + (datetime_mod_SOURCES): New macro. + (datetime_mod_CFLAGS): Likewise. + (datetime_mod_LDFLAGS): Likewise. + (date_mod_SOURCES): Likewise. + (date_mod_CFLAGS): Likewise. + (date_mod_LDFLAGS): Likewise. + (datehook_mod_SOURCES): Likewise. + (datehook_mod_CFLAGS): Likewise. + (datehook_mod_LDFLAGS): Likewise. + + * kern/env.c (grub_env_insert): Fix a bug in prevp pointer. + + * commands/date.c: New file. + + * hook/datehook.c: Likewise. + + * include/grub/lib/datetime.h: Likewise. + + * include/grub/i386/cmos.h: Likewise. + + * lib/datetime.c: Likewise. + + * lib/i386/datetime.c: Likewise. + + * lib/efi/datetime.c: Likewise. + +2008-08-14 Robert Millan + + * conf/common.rmk (bin_UTILITIES): Add `grub-mkelfimage'. + (grub_mkelfimage_SOURCES): New variable. + (util/elf/grub-mkimage.c_DEPENDENCIES): Likewise. + + * conf/i386-coreboot.rmk (bin_UTILITIES, grub_mkimage_SOURCES) + (grub_mkimage_LDFLAGS, util/elf/grub-mkimage.c_DEPENDENCIES): Remove. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + + * kern/ieee1275/init.c: Include `'. + * kern/i386/coreboot/init.c: Likewise. + + * kern/i386/ieee1275/startup.S: Replace `' + with `'. + (GRUB_KERNEL_MACHINE_PREFIX, GRUB_KERNEL_MACHINE_DATA_END): Renamed + to ... + (GRUB_KERNEL_CPU_PREFIX, GRUB_KERNEL_CPU_DATA_END): ... this. + * kern/i386/coreboot/startup.S: Likewise. + + * include/grub/powerpc/ieee1275/kernel.h (GRUB_MOD_ALIGN) + (GRUB_MOD_GAP): Remove. + * include/grub/powerpc/kernel.h: New file. + * include/grub/i386/ieee1275/kernel.h (GRUB_KERNEL_MACHINE_PREFIX) + (GRUB_KERNEL_MACHINE_DATA_END): Remove. + * include/grub/i386/kernel.h: New file. + * include/grub/i386/coreboot/kernel.h (GRUB_MOD_ALIGN) + (GRUB_MOD_GAP, GRUB_KERNEL_MACHINE_PREFIX) + (GRUB_KERNEL_MACHINE_DATA_END): Remove. + + * util/ieee1275/grub-install.in (grub_mkimage): Initialize to use + `grub-mkelfimage'. + Use --directory when invoking grub_mkimage. + + * util/elf/grub-mkimage.c: Include `'. + (add_segments): Replace GRUB_KERNEL_MACHINE_DATA_END and + GRUB_KERNEL_MACHINE_PREFIX with GRUB_KERNEL_CPU_DATA_END + and GRUB_KERNEL_CPU_PREFIX. + +2008-08-14 Felix Zielcke + + * include/grub/err.h (grub_err_printf): New function prototype. + * util/misc.c (grub_err_printf): New function. + * kern/misc.c [! GRUB_UTIL] (grub_err_printf): New alias for + grub_printf. + * kern/err.c (grub_print_error): Use grub_err_printf. + +2008-08-13 Robert Millan + + * docs/grub.cfg: Remove `/dev/' prefix in GNU/Hurd boot entry. + +2008-08-13 Robert Millan + + * docs/grub.cfg: Use the native device name for the example GNU/Hurd + boot entry. + +2008-08-12 Robert Millan + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Move part + of the relocation code from here ... + (grub_multiboot): ... to here. + (forward_relocator, backward_relocator): Move from here ... + * kern/i386/loader.S (grub_multiboot_forward_relocator) + (grub_multiboot_backward_relocator): ... to here. + (grub_multiboot_real_boot): Use %edx for entry offset. Put Multiboot + magic in %eax. Use %ebp for jumping (so %edx is not trashed). + * include/grub/i386/loader.h (grub_multiboot_forward_relocator) + (grub_multiboot_forward_relocator_end) + (grub_multiboot_backward_relocator) + (grub_multiboot_backward_relocator_end): New variables. + +2008-08-12 Bean + + * disk/raid.c (grub_raid_read): Fix a bug in raid0 code. + +2008-08-11 Robert Millan + + * kern/i386/linuxbios/startup.S: Move from here ... + * kern/i386/coreboot/startup.S: ... to here. + + * kern/i386/linuxbios/init.c: Move from here ... + * kern/i386/coreboot/init.c: ... to here. + + * kern/i386/linuxbios/table.c: Move from here ... + * kern/i386/coreboot/mmap.c: ... to here. + + * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Update moved files. + +2008-08-11 Robert Millan + + * kern/device.c (grub_device_open): Do not handle grub_disk_open() + errors. Leave it to the upper layer to handle them. + +2008-08-09 Christian Franke + + * Makefile.in: Add `target_os' and `enable_grub_pe2elf'. + * conf/common.rmk: Install `grub-pe2elf' only if requested. + Install `grub.d/10_windows' only on Cygwin. + * configure.ac: Add subst of `target_os'. + Check `target_os' also before setting TARGET_OBJ2ELF. + Add `--enable-grub-pe2elf'. + +2008-08-08 Robert Millan + + * kern/disk.c: Replace `' with `'. + (grub_last_time): Change type to grub_uint64_t. + (grub_disk_open): Migrate code from to using grub_get_time_ms(). + (grub_disk_close): Likewise. + + * normal/menu.c: Replace `' with `'. + (run_menu): Migrate code from to using grub_get_time_ms(). + + * util/misc.c (grub_get_time_ms): New function. + +2008-08-08 Marco Gerards + + * disk/ata.c (grub_ata_regget): Change return type to + `grub_uint8_t'. + (grub_ata_regget2): Likewise. + (grub_ata_wait_status): New function. + (grub_ata_wait_busy): Removed function, updated all users to use + `grub_ata_wait_status'. + (grub_ata_wait_drq): Likewise. + (grub_ata_cmd): New function. + (grub_ata_pio_read): Change return type to `grub_uint8_t'. Add + error handling. + (grub_ata_pio_write): Add error handling. + (grub_atapi_identify): Likewise. + (grub_atapi_packet): Use `grub_ata_cmd' and improve error + handling. + (grub_ata_identify): Use `grub_ata_cmd' and improve error + handling. Actually use the detected registers. Reorder the + detection logic such that it is easier to read. + (grub_ata_pciinit): Do not assign the same ID to each controller. + (grub_ata_setaddress): Use `grub_ata_cmd' and improve error + handling. + (grub_atapi_readsector): Check the result of `grub_ata_pio_read'. + + * include/grub/err.h (grub_err_t): Add `GRUB_ERR_TIMEOUT'. + +2008-08-08 Marco Gerards + + * NEWS: Update. + +2008-08-07 Bean + + * include/grub/x86_64/pci.h: New file. + +2008-08-07 Christian Franke + + * kern/i386/pit.c (TIMER2_SPEAKER): New define. + (TIMER2_GATE): Likewise. + (grub_pit_wait): Add enable/disable of the timer2 gate + bit of port 0x61. This fixes a possible infinite loop. + +2008-08-07 Bean + + * conf/x86_64-efi.rmk (kernel_mod_SOURCES): Add kern/time.c, + kern/i386/tsc.c and kern/i386/pit.c. + + * include/grub/i386/tsc.h (grub_cpu_is_cpuid_supported): Handle + x86_64 platform. + + * kern/i386/efi/init.c: Replace with + . + + * kern/i386/pit.c: Replace with . + +2008-08-07 Bean + + * conf/i386-efi.rmk (kernel_mod_SOURCES): Add kern/time.c. + + * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Add kern/time.c, + + * include/grub/i386/pit.h: Use macro KERNEL_CPU_PIT_HEADER to avoid + multiple inclusion. Add #include . + +2008-08-06 Christian Franke + + * conf/common.rmk: Build and install `10_windows'. + * util/grub.d/10_windows.in: New script. + +2008-08-06 Pavel Roskin + + * kern/i386/pit.c: Include `'. + +2008-08-06 Robert Millan + + * conf/i386-coreboot.rmk (kernel_elf_ASFLAGS): New variable. + * kern/i386/tsc.c: Include `'. + +2008-08-06 Bean + + * fs/i386/pc/pxe.c (grub_pxe_data): New member block_size. + (grub_pxefs_fs_int): Remove dummy definition. + (grub_pxefs_open): Use data->block_size to store the current block + size setting. + (grub_pxefs_read): Use block size stored in data->block_size. As the + value of grub_pxe_blksize can be changed after the file is opened. + +2008-08-06 Bean + + * fs/i386/pc/pxe.c (curr_file): new variable. + (grub_pxefs_open): Simply the handling of pxe file system. Don't + require the dummy internal file system anymore. + (grub_pxefs_read): Removed. + (grub_pxefs_close): Likewise. + (grub_pxefs_fs_int): Likewise. + (grub_pxefs_read_int): Renamed to grub_pxefs_read. Reinitialize tftp + connection when we switch file. + (grub_pxefs_close_int): Renamed to grub_pxefs_close. + +2008-08-06 Robert Millan + + * conf/i386-coreboot.rmk (pkglib_MODULES): Add `reboot.mod' and + `halt.mod'. + (reboot_mod_SOURCES, reboot_mod_CFLAGS, reboot_mod_LDFLAGS) + (halt_mod_SOURCES, halt_mod_CFLAGS, halt_mod_LDFLAGS): New variables. + + * kern/i386/halt.c: New file. + * kern/i386/reboot.c: Likewise. + * include/grub/i386/reboot.h: Likewise. + * include/grub/i386/halt.h: Likewise. + + * commands/halt.c [! GRUB_MACHINE_IEEE1275 ! GRUB_MACHINE_EFI]: + Include `'. + * commands/reboot.c [! GRUB_MACHINE_IEEE1275 ! GRUB_MACHINE_EFI] + [! GRUB_MACHINE_PCBIOS]: Include `'. + + * term/i386/pc/at_keyboard.c: Include `'. + (SHIFT_L, SHIFT_R, CTRL, ALT, CAPS_LOCK, KEYBOARD_REG_DATA) + (KEYBOARD_REG_STATUS, KEYBOARD_COMMAND_ISREADY, KEYBOARD_COMMAND_READ) + (KEYBOARD_COMMAND_WRITE, KEYBOARD_COMMAND_REBOOT) + (KEYBOARD_SCANCODE_SET1, KEYBOARD_ISMAKE, KEYBOARD_ISREADY) + (KEYBOARD_SCANCODE, OLPC_UP, OLPC_DOWN, OLPC_LEFT, OLPC_RIGHT): Move + from here ... + * include/grub/i386/at_keyboard.h: ... to here. + +2008-08-05 Robert Millan + + * conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/i386/pit.c'. + * conf/i386-efi.rmk (kernel_mod_SOURCES): Likewise. + * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Likewise. Also add + `kern/i386/tsc.c', `kern/generic/rtc_get_time_ms.c' and + `kern/generic/millisleep.c'. + + * kern/i386/tsc.c (calibrate_tsc): Rewrite using grub_pit_wait() + instead of grub_get_rtc(). + (grub_tsc_init): Initialize `tsc_boot_time'. + + * kern/i386/linuxbios/init.c (grub_millisleep): Remove stub. + (grub_machine_init): Use grub_tsc_init() rather than + installing an RTC-based handler via grub_install_get_time_ms(). + + * kern/i386/pit.c: New file. + * include/grub/i386/pit.h: Likewise. + +2008-08-05 Bean + + * boot/i386/pc/pxeboot.S (_start): Use drive number 0x7F for pxe. + + * conf/i386-pc.rmk (kernel_img_HEADERS): Add machine/pxe.h. + (pkglib_MODULES): Add pxe.mod and pxecmd.mod. + (pxe_mod_SOURCES): New macro. + (pxe_mod_CFLAGS): Likewise. + (pxe_mod_LDFLAGS): Likewise. + (pxecmd_mod_SOURCES): Likewise. + (pxecmd_mod_CFLAGS): Likewise. + (pxecmd_mod_LDFLAGS): Likewise. + + * kern/i386/pc/startup.S (grub_pxe_scan): New function. + (grub_pxe_call): Likewise. + + * include/grub/disk.h (grub_disk_dev_id): Add GRUB_DISK_DEVICE_PXE_ID. + + * commands/i386/pc/pxecmd.c: New file. + + * fs/i386/pc/pxe.c: Likewise. + + * include/grub/i386/pc/pxe.h: Likewise. + +2008-08-05 Bean + + * util/console.c (grub_console_cur_color): New variable. + (grub_console_standard_color): Likewise. + (grub_console_normal_color): Likewise. + (grub_console_highlight_color): Likewise. + (color_map): Likewise. + (use_color): Likewise. + (NUM_COLORS): New macro. + (grub_ncurses_setcolorstate): Handle color properly. + (grub_ncurses_setcolor): Don't change color here, just remember the + settings, color will be set in grub_ncurses_setcolorstate. + (grub_ncurses_getcolor): New function. + (grub_ncurses_init): Initialize color pairs. + (grub_ncurses_term): New member grub_ncurses_getcolor. + +2008-08-05 Colin D Bennett + + High resolution timer support. Implemented for x86 CPUs using TSC. + Extracted generic grub_millisleep() so it's linked in only as needed. + This requires a Pentium compatible CPU; if the RDTSC instruction is + not supported, then it falls back on the generic grub_get_time_ms() + implementation that uses the machine's RTC. + + * conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/time.c', + `kern/i386/tsc.c', `kern/generic/rtc_get_time_ms.c' and + `kern/generic/millisleep.c'. + + * conf/i386-efi.rmk (kernel_mod_SOURCES): Add `kern/i386/tsc.c', + `kern/generic/rtc_get_time_ms.c' and `kern/generic/millisleep.c'. + + * conf/x86_64-efi.rml (kernel_mod_SOURCES): Add + `kern/generic/millisleep.c' and `kern/generic/rtc_get_time_ms.c'. + + * conf/sparc64-ieee1275.rmk (kernel_elf_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (kernel_elf_SOURCES): Add + `kern/generic/millisleep.c'. + + * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Likewise. + + * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Add `kern/time.c'. + + * kern/generic/rtc_get_time_ms.c: New file. + + * kern/generic/millisleep.c: New file. + + * kern/misc.c: Don't include + anymore. + (grub_millisleep_generic): Removed. + + * commands/sleep.c (grub_interruptible_millisleep): Uses + grub_get_time_ms() instead of grub_get_rtc(). + + * include/grub/i386/tsc.h (grub_get_tsc): New file. New inline + function. + (grub_cpu_is_cpuid_supported): New inline function. + (grub_cpu_is_tsc_supported): New inline function. + (grub_tsc_init): New function prototype. + (grub_tsc_get_time_ms): New function prototype. + + * kern/i386/tsc.c (grub_get_time_ms): New file. + + * include/grub/time.h: Include . Don't include + anymore. + (grub_millisleep): Removed. + (grub_machine_init): Call grub_tsc_init. + + * kern/i386/linuxbios/init.c (grub_machine_init): Install the RTC + get_time_ms() implementation. + + * kern/sparc64/ieee1275/init.c (grub_millisleep): Removed. + (ieee1275_get_time_ms): New function. + (grub_machine_init): Install get_time_ms() implementation. + + * kern/i386/pc/init.c: Include . + (grub_machine_init): Call grub_tsc_init(). + (grub_millisleep): Removed. + + * kern/ieee1275/init.c (grub_millisleep): Removed. + (grub_machine_init): Install ieee1275_get_time_ms() + implementation. + (ieee1275_get_time_ms): New function. + (grub_get_rtc): Now calls ieee1275_get_time_ms(), which does the + real work. + +2008-08-05 Marco Gerards + + * disk/ata.c: Include . + (enum grub_ata_commands): Add `GRUB_ATA_CMD_EXEC_DEV_DIAGNOSTICS'. + (grub_ata_initialize): Rewritten. + (grub_ata_device_initialize): New function. + +2008-08-04 Pavel Roskin + + * kern/main.c: Include grub/mm.h. + +2008-08-04 Robert Millan + + * conf/i386-coreboot.rmk (COMMON_ASFLAGS, COMMON_CFLAGS) + (COMMON_LDFLAGS): Harmonize with i386-pc version (fixes a code + corruption problem). + +2008-08-04 Robert Millan + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Fix misc + warnings introduced in my last commit. + +2008-08-03 Robert Millan + + Make PCI available on all i386 architectures. + + * include/grub/i386/pc/pci.h: Move from here ... + * include/grub/i386/pci.h: ... to here. + + * include/grub/i386/pc/pci.h: Remove. + * include/grub/i386/efi/pci.h: Remove. + * include/grub/x86_64/efi/pci.h: Remove. + + * include/grub/pci.h: Replace `' with + `'. + + * conf/i386-coreboot.rmk (pkglib_MODULES): Add `pci' and `lspci'. + (pci_mod_SOURCES, pci_mod_CFLAGS, pci_mod_LDFLAGS, lspci_mod_SOURCES) + (lspci_mod_CFLAGS, lspci_mod_LDFLAGS): New variables. + + * conf/i386-ieee1275.rmk: Likewise. + +2008-08-03 Robert Millan + + * term/i386/pc/vga_text.c (CRTC_CURSOR_DISABLE): New macro. + (grub_console_setcursor): Make it possible to set cursor off. + +2008-08-03 Robert Millan + + * util/grub.d/00_header.in: Be platform-agnostic. Probe for existence + of modules instead of assuming which platform provides what. + * util/update-grub.in: Likewise. + +2008-08-03 Robert Millan + + * kern/i386/pc/init.c (make_install_device): Check for `grub_prefix' + instead of `grub_install_dos_part' to determine whether a drive needs + to be prepended to prefix (`grub_install_dos_part' is not reliable, + because it can be overridden when loading GRUB via Multiboot). + +2008-08-02 Robert Millan + + * util/i386/pc/grub-install.in: Remove trailing slash from prefix. + +2008-08-02 Robert Millan + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Add a pair + of informational grub_dprintf() calls. + +2008-08-02 Robert Millan + + * disk/memdisk.c (memdisk_size): Don't initialize. + (GRUB_MOD_INIT(memdisk)): Find memdisk using grub_module_iterate(). + + * include/grub/i386/pc/kernel.h + (GRUB_KERNEL_MACHINE_MEMDISK_IMAGE_SIZE): Remove macro. + (GRUB_KERNEL_MACHINE_PREFIX, GRUB_KERNEL_MACHINE_DATA_END): Shift. + (grub_memdisk_image_size, grub_arch_memdisk_addr) + (grub_arch_memdisk_size): Remove. + + * include/grub/kernel.h (struct grub_module_header): Remove `offset' + field (was only used to transfer a constant). Add `type' field to + support multiple module types. + (grub_module_iterate): New function. + + * kern/device.c (grub_device_open): Do not hide error messages + when grub_disk_open() fails. Use grub_print_error() instead. + + * kern/i386/pc/init.c (grub_arch_modules_addr) + (grub_arch_memdisk_size): Remove functions. + (grub_arch_modules_addr): Return the module address in high memory + (now that it isn't copied anymore). + + * kern/i386/pc/startup.S (grub_memdisk_image_size): Remove variable. + (codestart): Don't add grub_memdisk_image_size to %ecx in LZMA + decompression routine (grub_total_module_size already includes that + now). Don't copy modules back to low memory. + + * kern/main.c: Include `'. + (grub_load_modules): Split out (and use) ... + (grub_module_iterate): ... this function, which iterates through + module objects and runs a hook. + Comment out grub_mm_init_region() call, as it would cause non-ELF + modules to be overwritten. + + * util/i386/pc/grub-mkimage.c (generate_image): Instead of appending + the memdisk image in its own region, make it part of the module list. + * util/elf/grub-mkimage.c (options): Add "memdisk"|'m' option. + (main): Parse --memdisk|-m option, and pass user-provided path as + parameter to generate_image(). + (add_segments): Pass `memdisk_path' down to load_modules(). + (load_modules): Embed memdisk image in module section when requested. + * util/i386/efi/grub-mkimage.c (make_mods_section): Initialize + `header.type' instead of `header.offset'. + + * conf/powerpc-ieee1275.rmk (pkglib_MODULES): Add `memdisk.mod'. + (memdisk_mod_SOURCES, memdisk_mod_CFLAGS) + (memdisk_mod_LDFLAGS): New variables. + * conf/i386-coreboot.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + +2008-08-02 Robert Millan + + * loader/i386/pc/multiboot.c (playground, forward_relocator) + (backward_relocator): New variables. Used to allocate and relocate + the payload, respectively. + (grub_multiboot_load_elf32): Load into heap instead of requested + address, install the appropriate relocator code in each bound of + the payload, and set the entry point such that + grub_multiboot_real_boot() will jump to one of them. + + * kern/i386/loader.S (grub_multiboot_payload_size) + (grub_multiboot_payload_orig, grub_multiboot_payload_dest) + (grub_multiboot_payload_entry_offset): New variables. + (grub_multiboot_real_boot): Set cpu context to what the relocator + expects, and jump to the relocator instead of the payload. + + * include/grub/i386/loader.h (grub_multiboot_payload_size) + (grub_multiboot_payload_orig, grub_multiboot_payload_dest) + (grub_multiboot_payload_entry_offset): Export. + +2008-08-01 Bean + + * normal/menu_entry.c (editor_getline): Don't return the original + string as result, as it will be released by lexer once it has done + using it. + +2008-08-01 Robert Millan + + * util/grub.d/10_linux.in: Use prepare_grub_to_access_device() from + within menuentries, not before them. + util/grub.d/10_hurd.in: Likewise. + +2008-08-01 Bean + + * conf/common.rmk (pkglib_MODULES): Add bufio.mod. + (bufio_mod_SOURCES): New macro. + (bufio_mod_CFLAGS): Likewise. + (bufio_mod_LDFLAGS): Likewise. + + * include/grub/bufio.h: New file. + + * io/bufio.c: Likewise. + + * video/png.c: Replace with . + (grub_video_reader_png): Use grub_buffile_open to open file. + + * video/jpeg.c: Replace with . + (grub_video_reader_jpeg): Use grub_buffile_open to open file. + + * video/tga.c: Replace with . + (grub_video_reader_tga): Use grub_buffile_open to open file. + + * font/manager.c: Include . + (add_font): Use grub_buffile_open to open file. + +2008-07-31 Robert Millan + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): When loading + ELF segments, use a macro for arbitrarily accessing any of them instead + of preparing a pointer that allows access to one at a time. + (grub_multiboot_load_elf64): Likewise. + +2008-07-31 Bean + + * boot/i386/pc/lnxboot.S (real_code_2): Replace 0x50 with + GRUB_KERNEL_MACHINE_DATA_END. + +2008-07-30 Robert Millan + + * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_DATA_END): + Increase from 0x50 to 0x60. + * util/i386/pc/grub-install.in: Detect cross-disk installs, and + use UUIDs to identify the root drive for them. If that's not + possible, abort. + * util/i386/pc/grub-setup.c (setup): Do not special-case, or even + check, for cross-disk installs. + +2008-07-30 Robert Millan + + * kern/ieee1275/init.c (grub_machine_set_prefix): If `grub_prefix' + is non-empty, use it to set the `prefix' environment variable instead + of the usual approach. + * kern/i386/linuxbios/init.c (make_install_device): Remove function. + (grub_machine_set_prefix): Use `grub_prefix' to set the `prefix' + environment variable instead of dummy make_install_device(). + + * kern/i386/ieee1275/startup.S: Include `'. + (start): Insert a data section, with `grub_prefix' variable. + * kern/i386/linuxbios/startup.S: Likewise. + + * include/grub/powerpc/ieee1275/kernel.h [!ASM_FILE] (grub_prefix): + New variable reference. + * include/grub/i386/ieee1275/kernel.h (GRUB_KERNEL_MACHINE_PREFIX): + New macro. Defines offset of `grub_prefix' within startup.S (relative + to `start'). + (GRUB_KERNEL_MACHINE_DATA_END): New macro. Defines the end of data + section within startup.S (relative to `start'). + * include/grub/i386/coreboot/kernel.h: Likewise. + + * util/elf/grub-mkimage.c (add_segments): Receive `prefix' parameter. + Overwrite grub_prefix with its contents, at the beginning of the + first segment. + (main): Understand -p|--prefix. + +2008-07-30 Robert Millan + + * util/grub.d/10_hurd.in: Source ${libdir}/grub/update-grub_lib. + +2008-07-30 Robert Millan + + * term/i386/pc/vga_text.c (grub_console_cls): Use + grub_console_gotoxy() to go back to beginning of the screen. + Found by Patrick Georgi + +2008-07-29 Christian Franke + + * util/update-grub_lib.in (make_system_path_relative_to_its_root): + Add conversion of emulated mount points on Cygwin. + +2008-07-29 Christian Franke + + * util/update-grub.in: Add a check for admin + group on Cygwin. + Remove old `grub.cfg.new' before creation. + Add `-f' to `mv' to handle the different filesystem + semantics of Windows. + +2008-07-29 Bean + + * normal/main.c (get_line): Fix buffer overflow bug. + +2008-07-28 Robert Millan + + * partmap/apple.c (GRUB_APPLE_HEADER_MAGIC): New macro. + (struct grub_apple_header): New struct. Describes the layout of + the partmap header. + (apple_partition_map_iterate): Check the header magic as well as the + partition magic (which was already being checked). + +2008-07-28 Pavel Roskin + + * genmk.rb: Add a warning to the beginning of the output that + it's a generated file and should not be edited. + +2008-07-28 Robert Millan + + * disk/raid.c (grub_raid_scan_device): Do not abort when two disks + with the same number are found, just use issue a warning with + grub_dprintf(), as this error has been reported to be non-fatal. + +2008-07-27 Robert Millan + + * disk/ata.c (grub_ata_dumpinfo): Use grub_dprintf() for debugging + information. + +2008-07-27 Bean + + * fs/fat.c (GRUB_FAT_MAXFILE): New constant. + (grub_fat_find_dir): Ignore case when comparing filename. + +2008-07-27 Bean + + * fs/xfs.c (grub_xfs_dir_header): Change field i8count back to + smallino, as it's more descriptive, and i8count can be confused with + the other field count. + (grub_xfs_iterate_dir): Adjust grub_xfs_dir_entry pointer for small + inode type. + +2008-07-27 Bean + + * commands/crc.c: New file. + + * lib/crc.c: Likewise. + + * include/grub/lib/crc.h: Likewise. + + * util/grub-fstest.c: grub/hexdump.h => grub/lib/hexdump.h. + + * commands/hexdump.c: grub/hexdump.h => grub/lib/hexdump.h. + (hexdump): Move this function to ... + + * lib/hexdump.c: ... here. + + * include/grub/hexdump.h: Renamed to ... + + * include/grub/lib/hexdump.h: ... this. + + * commands/loadenv.c: grub/envblk.h => grub/lib/envblk.h + + * util/grub-editenv.c: Likewise. + + * include/envblk.h: Renamed to ... + + * include/lib/envblk.h: ... this. + + * util/envblk.c: Renamed to ... + + * lib/envblk.c: ... this. + + * conf/common.rmk (grub_fstest_SOURCES): commands/hexdump.c => + lib/hexdump.c. + (grub_editenv_SOURCES): util/envblk.c => lib/envblk.c + (pkglib_MODULES): Add crc.mod. + (hexdump_mod_SOURCES): Add lib/hexdump.c. + (loadenv_mod_SOURCES): util/envblk.c => lib/envblk.c. + (crc_mod_SOURCES): New macro. + (crc_mod_CFLAGS): Likewise. + (crc_mod_LDFLAGS): Likewise. + + * conf/i386-coreboot.rmk (grub_emu_SOURCES): Add lib/hexdump.c. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise. + +2008-07-27 Felix Zielcke + + * commands/help.c: Include . + (TERM_WIDTH): Removed. Updated all users. + +2008-07-27 Pavel Roskin + + * util/getroot.c (find_root_device): Rephrase a comment to avoid + spurious warnings about a comment within a comment. + +2008-07-25 Robert Millan + + * util/getroot.c (find_root_device): Skip devices that match + /dev/dm-[0-9]. This lets the real device be found for any type of + abstraction (LVM, EVMS, RAID..). + (grub_guess_root_device): Do not traverse /dev/mapper (for LVM) + and /dev/evms (for EVMS) before traversing /dev. If a /dev/dm-[0-9] + device is found first, find_root_device() will now skip it. + +2008-07-24 Pavel Roskin + + * include/grub/types.h: Use __builtin_bswap32() and + __builtin_bswap64() with gcc 4.3 and newer. + +2008-07-24 Christian Franke + + * util/i386/pc/grub-install.in: If `--debug' is specified, + pass `--verbose' to grub-setup. + Abort script if make_system_path_relative_to_its_root() fails. + +2008-07-24 Bean + + * configure.ac: Fixed a bug caused by the previous cygwin patch, + variable `target_platform' should be `platform'. + +2008-07-24 Bean + + * video/reader/png.c (DEFLATE_HLIT_MAX): Change value. + (grub_png_init_fixed_block): New function. + (grub_png_decode_image_data): Handle fixed huffman code compression. + +2008-07-24 Bean + + * common.rmk (bin_UTILITIES): Add grub-pe2elf. + (grub_pe2elf_SOURCES): New macro. + (CLEANFILES): Add grub-pe2elf. + + * include/grub/efi/pe32.h (GRUB_PE32_SCN_ALIGN_1BYTES): New constant. + (GRUB_PE32_SCN_ALIGN_2BYTES): Likewise. + (GRUB_PE32_SCN_ALIGN_4BYTES): Likewise. + (GRUB_PE32_SCN_ALIGN_8BYTES): Likewise. + (GRUB_PE32_SCN_ALIGN_16BYTES): Likewise. + (GRUB_PE32_SCN_ALIGN_32BYTES): Likewise. + (GRUB_PE32_SCN_ALIGN_64BYTES): Likewise. + (GRUB_PE32_SCN_ALIGN_SHIFT): Likewise. + (GRUB_PE32_SCN_ALIGN_MASK): Likewise. + (GRUB_PE32_SYM_CLASS_EXTERNAL): Likewise. + (GRUB_PE32_SYM_CLASS_STATIC): Likewise. + (GRUB_PE32_SYM_CLASS_FILE): Likewise. + (GRUB_PE32_DT_FUNCTION): Likewise. + (GRUB_PE32_REL_I386_DIR32): Likewise. + (GRUB_PE32_REL_I386_REL32): Likewise. + (grub_pe32_symbol): New structure. + (grub_pe32_reloc): Likewise. + + * util/grub-pe2elf.c: New file. + + * configure.ac: Set TARGET_OBJ2ELF if host os is cygwin. Don't test for + start symbol in non pc platform. + + * genmk.rb: Use TARGET_OBJ2ELF to convert native object format to elf. + + The following patches are from Christian Franke. + + * include/grub/dl.h: Remove .previous, gas supports this only + for ELF format. + + * include/grub/symbol.h [__CYGWIN__] (#define FUNCTION/VARIABLE): + Remove .type, gas supports this only for ELF format. + + * kern/dl.c (grub_dl_resolve_dependencies): Add check for trailing + nullbytes in symbol table. This fixes an infinite loop if table is + zero filled. + + * Makefile.in: Add autoconf replacements TARGET_IMG_LDSCRIPT, + TARGET_IMG_LDFLAGS and EXEEXT. + + * aclocal.m4 (grub_PROG_OBJCOPY_ABSOLUTE): Replace -Wl,-N by + TARGET_IMG_LDFLAGS_AC. + (grub_CHECK_STACK_ARG_PROBE): New function. + + * conf/i386-pc.rmk: Replace -Wl,-N by TARGET_IMG_LDFLAGS. + + * conf/i386-pc-cygwin-ld-img.sc: New linker script. + + * configure.ac: Add check for linker script "conf/${target}-img-ld.c" + to set TARGET_IMG_LD* accordingly. + Add check for Cygwin to set TARGET_MOD_OBJCOPY accordingly. + Add call to grub_CHECK_STACK_ARG_PROBE. + Use TARGET_IMG_LDFLAGS to check start, bss_start, end symbols. + + * genkernsyms.sh.in: Handle HAVE_ASM_USCORE case. + + * genmk.rb: Add EXEEXT to CLEANFILES. + +2008-07-23 Robert Millan + + * Makefile.in (UNICODE_ARROWS, UNICODE_LINES): New variables (they + define the codes for arrows and lines used for the menu). + (ascii.pff): Generate fonts for $(UNICODE_ARROWS) and $(UNICODE_LINES) + as well. + + * util/update-grub_lib.in (font_path): Prefer ascii.pff over complete + fonts, because the latter are too slow. + +2008-07-21 Bean + + * kern/i386/pc/startup.S (gate_a20_try_bios): Change test order for + a20. Run keyboard test last, as it will cause macbook to halt. + +2008-07-18 Pavel Roskin + + * kern/dl.c: Go back to using GRUB_CPU_SIZEOF_VOID_P. We cannot + load foreign architecture modules correctly anyway. Keep + support for loading host architecture modules, whether we + compile them or not. + +2008-07-17 Pavel Roskin + + * configure.ac: Use -m32 or -m64 regardless of whether we had to + change target_cpu. The compiler default can mismatch target_cpu + in any case. + + * disk/efi/efidisk.c: Fix format warnings on x86_64. + * kern/efi/efi.c: Likewise. + + * aclocal.m4 (grub_PROG_TARGET_CC): New macro. Check if the + target compiler is functional. + * configure.ac: Call grub_PROG_TARGET_CC once all target flags + are set up. + + * configure.ac: Default to efi platform for x86_64-apple. Allow + powerpc64 CPU, default to ieee1275 platform for it. Split CPU + adjustments from the rest, only do them if target is not + explicitly given. Merge other adjustments with the final sanity + check. Remove an extraneous check for supported CPU. Be + specific which CPU and which platform is not supported. + + * configure.ac: Default to pc platform for x86_64. + +2008-07-17 Robert Millan + + Partial LinuxBIOS -> Coreboot rename. + + * conf/i386-linuxbios.rmk: Renamed to ... + * conf/i386-coreboot.rmk: ... this. + * Makefile.in (RMKFILES): s/i386-linuxbios.rmk/i386-coreboot.rmk/g. + * configure.ac: Accept "coreboot" as input platform (but maintain + compatibility with "linuxbios"). + * include/grub/i386/linuxbios: Renamed to ... + * include/grub/i386/coreboot: ... this. + +2008-07-17 Bean + + * conf/i386/efi.rmk (pkglib_MODULES): add pci.mod and lspci.mod. + (appleldr_mod_SOURCE): New variable. + (appleldr_mod_CFLAGS): Likewise. + (appleldr_mod_LDFLAGS): Likewise. + (pci_mod_SOURCES): Likewise. + (pci_mod_CFLAGS): Likewise. + (pci_mod_LDFLAGS): Likewise. + (lspci_mod_SOURCES): Likewise. + (lspci_mod_CFLAGS): Likewise. + (lspci_mod_LDFLAGS): Likewise. + + * conf/x86_64-efi.rmk: New file. + + * disk/efi/efidisk.c (grub_efidisk_read): Wrap efi calls with efi_call_N + macro. + (grub_efidisk_write): Likewise. + + * include/efi/api.h (efi_call_0): New macro. + (efi_call_1): Likewise. + (efi_call_2): Likewise. + (efi_call_3): Likewise. + (efi_call_4): Likewise. + (efi_call_5): Likewise. + (efi_call_6): Likewise. + + * include/grub/efi/chainloader.h (grub_chainloader_cmd): Rename to + grub_rescue_cmd_chainloader. + + * include/grub/efi/pe32.h (GRUB_PE32_MACHINE_X86_64): New macro. + (grub_pe32_optional_header): Change some fields based on i386 or + x86_64 platform. + (GRUB_PE32_PE32_MAGIC): Likewise. + + * include/grub/efi/uga_draw.h: New file. + + * include/grub/elf.h (STN_ABS): New constant. + (R_X86_64_NONE): Relocation constant for x86_64. + (R_X86_64_64): Likewise. + (R_X86_64_PC32): Likewise. + (R_X86_64_GOT32): Likewise. + (R_X86_64_PLT32): Likewise. + (R_X86_64_COPY): Likewise. + (R_X86_64_GLOB_DAT): Likewise. + (R_X86_64_JUMP_SLOT): Likewise. + (R_X86_64_RELATIVE): Likewise. + (R_X86_64_GOTPCREL): Likewise. + (R_X86_64_32): Likewise. + (R_X86_64_32S): Likewise. + (R_X86_64_16): Likewise. + (R_X86_64_PC16): Likewise. + (R_X86_64_8): Likewise. + (R_X86_64_PC8): Likewise. + + * include/grub/i386/efi/pci.h: New file. + + * include/grub/i386/linux.h (GRUB_LINUX_EFI_SIGNATURE): + Change it value based on platform. + (GRUB_LINUX_EFI_SIGNATURE_0204): New constant. + (GRUB_E820_RAM): Likewise. + (GRUB_E820_RESERVED): Likewise. + (GRUB_E820_ACPI): Likewise. + (GRUB_E820_NVS): Likewise. + (GRUB_E820_EXEC_CODE): Likewise. + (GRUB_E820_MAX_ENTRY): Likewise. + (grub_e820_mmap): New structure. + (linux_kernel_header): Change the efi field according to different + kernel version, also field from linux_kernel_header. + + * include/grub/kernel.h (grub_module_info): Add padding for x86_64. + + * include/grub/pci.h (GRUB_PCI_ADDR_SPACE_MASK): New constant. + (GRUB_PCI_ADDR_SPACE_MEMORY): Likewise. + (GRUB_PCI_ADDR_SPACE_IO): Likewise. + (GRUB_PCI_ADDR_MEM_TYPE_MASK): Likewise. + (GRUB_PCI_ADDR_MEM_TYPE_32): Likewise. + (GRUB_PCI_ADDR_MEM_TYPE_1M): Likewise. + (GRUB_PCI_ADDR_MEM_TYPE_64): Likewise. + (GRUB_PCI_ADDR_MEM_PREFETCH): Likewise. + (GRUB_PCI_ADDR_MEM_MASK): Likewise. + (GRUB_PCI_ADDR_IO_MASK): Likewise. + + * include/grub/x86_64/efi/kernel.h: New file. + + * include/grub/x86_64/efi/loader.h: Likewise. + + * include/grub/x86_64/efi/machine.h: Likewise. + + * include/grub/x86_64/efi/pci.h: Likewise. + + * include/grub/x86_64/efi/time.h: Likewise. + + * include/grub/x86_64/linux.h: Likewise. + + * include/grub/x86_64/setjmp.h: Likewise. + + * include/grub/x86_64/time.h: Likewise. + + * include/grub/x86_64/types.h: Likewise. + + * kern/dl.c (GRUB_CPU_SIZEOF_VOID_P): Changed to + GRUB_TARGET_SIZEOF_VOID_P. + + * kern/efi/efi.c (grub_efi_locate_protocol): Wrap efi calls. + (grub_efi_locate_handle): Likewise. + (grub_efi_open_protocol): Likewise. + (grub_efi_set_text_mode): Likewise. + (grub_efi_stall): Likewise. + (grub_exit): Likewise. + (grub_reboot): Likewise. + (grub_halt): Likewise. + (grub_efi_exit_boot_services): Likewise. + (grub_get_rtc): Likewise. + + * kern/efi/mm.c (MEMORY_MAP_SIZE): Change to 0x3000 for new models. + (GRUB_CPU_SIZEOF_VOID_P): Changed to GRUB_TARGET_SIZEOF_VOID_P. + (grub_efi_allocate_pages): Wrap efi calls. + (grub_efi_free_pages): Wrap efi calls. + (grub_efi_get_memory_map): Wrap efi calls. + + * kern/x86_64/dl.c: New file. + + * kern/x86_64/efi/callwrap.S: Likewise. + + * kern/x86_64/efi/startup.S: Likewise. + + * loader/efi/appleloader.c: Likewise. + + * loader/efi/chainloader.c (cmdline): New variable. + (grub_chainloader_unload): Wrap efi calls. + (grub_chainloader_boot): Likewise. + (grub_rescue_cmd_chainloader): Wrap efi calls, handle + command line. + + * loader/efi/chainloader_normal.c (chainloader_command): + Change grub_chainloader_cmd to grub_rescue_cmd_chainloader, pass + command line. + + * loader/i386/efi/linux.c (allocate_pages): Change allocation + method. + (grub_e820_add_region): New function. + (grub_linux_boot): Construct e820 map from efi map, handle x86_64 + booting. + (grub_find_video_card): New function. + (grub_linux_setup_video): New function. + (grub_rescue_cmd_linux): Probe for video information. + + * normal/x86_64/setjmp.S: New file. + + * term/efi/console.c (map_char): New function. + (grub_console_putchar): Map unicode char. + (grub_console_checkkey): Wrap efi calls. + (grub_console_getkey): Likewise. + (grub_console_getwh): Likewise. + (grub_console_gotoxy): Likewise. + (grub_console_cls): Likewise. + (grub_console_setcolorstate): Likewise. + (grub_console_setcursor): Likewise. + + * util/i386/efi/grub-mkimage.c: Add support for x86_64. + +2008-07-16 Pavel Roskin + + * loader/i386/efi/linux.c (allocate_pages): Fix warnings in + format strings. + + * util/i386/efi/grub-mkimage.c (get_target_address): Return a + pointer, not an integer. This fixes a warning and prevents + precision loss on 64-bit systems. + (relocate_addresses): Remove unneeded cast. + +2008-07-15 Pavel Roskin + + * kern/i386/ieee1275/init.c: Include grub/cache.h. + + * term/ieee1275/ofconsole.c: Disable code unused on i386. + + * kern/ieee1275/ieee1275.c (grub_ieee1275_get_integer_property): + Fix comparison between signed and unsigned. + + * include/grub/i386/ieee1275/console.h: Declare + grub_console_init() and grub_console_fini(). + + * loader/i386/ieee1275/linux.c (grub_set_bootpath): Remove. + It's empty and unused. + + * fs/ext2.c (grub_ext2_read_block): Initialize blknr in the + beginning to avoid warnings with some compilers. + + * loader/ieee1275/multiboot2.c: Include grub/machine/loader.h. + [__i386__] (grub_mb2_arch_boot): Avoid unnecessary cast. + +2008-07-14 Pavel Roskin + + * kern/env.c (grub_register_variable_hook): Don't copy empty + string, it leaks memory. Pass "" to grub_env_set(), it should + handle constant strings. + + * commands/blocklist.c (grub_cmd_blocklist): Fix format warning. + * commands/cmp.c (grub_cmd_cmp): Likewise. + * kern/dl.c (grub_dl_flush_cache): Likewise. + (grub_dl_load_core): Likewise. + * kern/elf.c (grub_elf32_load_phdrs): Likewise. + (grub_elf64_load_phdrs): Likewise. + +2008-07-13 Pavel Roskin + + * lib/LzmaEnc.c (LzmaEnc_SetProps): Fix warning about comparison + between signed and unsigned. + (LzmaEnc_Finish): Fix warning about an unused parameter. + +2008-07-13 Bean + + * Makefile.in (enable_lzo): New rule. + + * conf/i386-pc.rmk (grub_mkimage_SOURCES): New test with enable_lzo. + + * configure.ac (ENABLE_LZO): New option --enable-lzo. + + * boot/i386/pc/lnxboot.S: #include . + + * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_RAW_SIZE): Change + its value according to the compression algorithm used, lzo or lzma. + + * util/i386/pc/grub-mkimage.c (compress_kernel): Use different + compression algorithm according to configure macro. + + * kern/i386/pc/startup.S (codestart): Likewise. + + * kern/i386/pc/lzma_decode.S: New file. + + * include/grub/lib/LzFind.h: Likewise. + + * include/grub/lib/LzHash.h: Likewise. + + * include/grub/lib/LzmaDec.h: Likewise. + + * include/grub/lib/LzmaEnc.h: Likewise. + + * include/grub/lib/LzmaTypes.h: Likewise. + + * lib/LzFind.c: Likewise. + + * lib/LzmaDec.c: Likewise. + + * lib/LzmaEnc.c: Likewise. + +2008-07-13 Bean + + * fs/ext2.c (EXT4_EXTENTS_FLAG): New macro. + (grub_ext4_extent_header): New structure. + (grub_ext4_extent): Likewise. + (grub_ext4_extent_idx): Likewise. + (grub_ext4_find_leaf): New function. + (grub_ext2_read_block): Handle extents. + +2008-07-12 Robert Millan + + * util/i386/pc/grub-mkrescue.in: s/grub-install/grub-mkrescue/g. + +2008-07-11 Robert Millan + + * util/grub.d/40_custom.in: New file. Example on how to add custom + entries to /etc/grub.d. + * conf/common.rmk (%, update-grub_SCRIPTS, CLEANFILES): Install + 40_custom (implicitly, by merging all the grub.d rules). + +2008-07-11 Pavel Roskin + + * commands/read.c (grub_getline): Fix invalid memory access. + Don't add newline to the variable value. + + * term/i386/pc/serial.c (GRUB_SERIAL_PORT_NUM): New constant. + [!GRUB_MACHINE_PCBIOS] (serial_hw_io_addr): Add COM2 and COM3. + (serial_hw_get_port): Check validity of the port number. + (grub_cmd_serial): Check return value of serial_hw_get_port(). + +2008-07-07 Pavel Roskin + + * boot/i386/pc/diskboot.S (notification_string): Replace + "Loading kernel" with just "loading". This is shorter, less + confusing and saves a few bytes for possible future changes. + +2008-07-05 Pavel Roskin + + * disk/ata.c (grub_ata_dumpinfo): Don't output addressing and + size for ATAPI devices, they are undefined. Output sector + number in decimal form. + + * disk/ata.c: Use named constants for status bits. + +2008-07-04 Pavel Roskin + + * kern/i386/linuxbios/init.c (grub_machine_init): Cast addr to + grub_addr_t before casting it to the void pointer to fix a + warning. Non-addressable regions are discarded earlier. + (grub_arch_modules_addr): Cast _end to grub_addr_t. + * kern/i386/linuxbios/table.c: Include grub/misc.h. + (check_signature): Don't shadow table_header. + (grub_linuxbios_table_iterate): Cast numeric constants to + grub_linuxbios_table_header_t. + * include/grub/i386/linuxbios/init.h: Add noreturn attribute to + grub_stop(). + + * kern/ieee1275/init.c: Cast _start and _end to grub_addr_t to + prevent warnings. + + * include/grub/misc.h (ALIGN_UP): Avoid unnecessary cast to a + pointer, which can cause warnings. Support 64-bit addresses. + + * util/elf/grub-mkimage.c: Use GRUB_TARGET_SIZEOF_LONG instead + of sizeof(long). This fixes PowerPC image generation on x86_64. + +2008-07-04 Robert Millan + + This fixes a performance issue when pc & gpt partmap iterators + didn't abort iteration even after our hook found what it was + looking for (often causing expensive probes of non-existent drives). + + Some callers relied on previous buggy behaviour, since they would + raise an error when their own hooks caused early abortion of its + iteration. + + * kern/device.c (grub_device_open): Improve error message. + * disk/lvm.c (grub_lvm_open): Likewise. + * disk/raid.c (grub_raid_open): Likewise. + + * partmap/pc.c (pc_partition_map_iterate): Abort parent iteration + when hook requests it, independently of grub_errno. + (pc_partition_map_probe): Do not fail when find_func() caused + early abortion of pc_partition_map_iterate(). + + * partmap/gpt.c (gpt_partition_map_iterate): Abort parent iteration + when hook requests it, independently of grub_errno. + (gpt_partition_map_probe): Do not fail when find_func() caused + early abortion of gpt_partition_map_iterate(). + + * kern/partition.c (grub_partition_iterate): Abort parent iteration + when hook requests it, independently of grub_errno. Do not fail when + part_map_iterate_hook() caused early abortion of p->iterate(). + + * util/biosdisk.c (grub_util_biosdisk_get_grub_dev): Do not fail + when grub_partition_iterate() returned with non-zero. + +2008-07-03 Pavel Roskin + + * disk/ata.c (grub_ata_pio_write): Check status before writing, + like we do in grub_ata_pio_read(). + (grub_ata_readwrite): Always write individual sectors. Fix the + sector count for the remainder. + (grub_ata_write): Enable writing to ATA devices. Correctly + report error for ATAPI devices. + +2008-07-02 Pavel Roskin + + * boot/i386/pc/cdboot.S: Add _start entry to fix a linker + warning. + + * disk/ata.c (grub_ata_readwrite): Don't increment sector number + for every read sector, we already increment it for the whole + batch. This fixes reading more than 256 sectors at once. + + * util/grub-editenv.c (cmd_info): Cast argument to long + explicitly. ptrdiff_t reduces to int on i386. + + * util/grub-editenv.c (main): Be specific which parameter is + missing. + + * disk/memdisk.c (memdisk_addr): Make a pointer to fix warnings. + (memdisk): Make memdisk_orig_addr a pointer. + + * fs/reiserfs.c (grub_reiserfs_read): Fix misuse of grub_size_t + for file offsets, use grub_off_t instead. Fix printf format + warnings. + + * fs/reiserfs.c: Remove #warning, TODO list items don't belong + there. Real unexpected warnings should not drown in the noise + about known problems. + + * commands/hexdump.c (grub_cmd_hexdump): Fix misuse of + grub_disk_addr_t for memory addresses. + + * loader/aout.c (grub_aout_load): Cast load_addr to pointer + explicitly to fix a warning. + + * util/grub-editenv.c (cmd_info): Fix warning in printf format. + + * Makefile.in (MODULE_LDFLAGS): New variable. + * aclocal.m4 (grub_PROG_LD_BUILD_ID_NONE): New macro. Check if + the linker accepts --build-id=none. + * configure.ac: Call grub_PROG_LD_BUILD_ID_NONE. Substitute + MODULE_LDFLAGS. + * genmk.rb: Use MODULE_LDFLAGS when linking modules. + + * fs/xfs.c (struct grub_xfs_dir_header): Use names similar to + those in Linux XFS code. Provide a way to access 64-bit parent + inode. + (grub_xfs_iterate_dir): Use the new names. Avoid reading past + the end of struct grub_xfs_dir_header. + +2008-07-02 Bean + + * include/grub/ieee1275.h (grub_ieee1275_flag): New constant + GRUB_IEEE1275_FLAG_CANNOT_INTERPRET, GRUB_IEEE1275_FLAG_FORCE_CLAIM + and GRUB_IEEE1275_FLAG_NO_ANSI. + + * kern/ieee1275/cmain.c (grub_ieee1275_find_options): Set flag + GRUB_IEEE1275_FLAG_CANNOT_INTERPRET, GRUB_IEEE1275_FLAG_FORCE_CLAIM + and GRUB_IEEE1275_FLAG_NO_ANSI for Open Hackware. + + * kern/ieee1275/ieee1275.c (grub_ieee1275_interpret): Return + immediately if GRUB_IEEE1275_FLAG_CANNOT_INTERPRET is set. + + * kern/ieee1275/init.c (grub_claim_heap): Claim memory directly if + GRUB_IEEE1275_FLAG_FORCE_CLAIM is set. + + * term/ieee1275/ofconsole.c (grub_ofconsole_writeesc): Don't output + esc sequence on non ANSI terminal. + (grub_ofconsole_gotoxy): Emulate backspace key on non ANSI terminal. + + * util/elf/grub-mkimage.c (add_segments): Move ELF header to the + beginning of file. + +2008-07-02 Bean + + * conf/common.rmk (bin_UTILITIES): Add grub-editenv. + (grub_editenv_SOURCES): New variable. + (pkglib_MODULES): Add loadenv.mod. + (loadenv_mod_SOURCES): New variable. + (loadenv_mod_CFLAGS): Likewise. + (loadenv_mod_LDFLAGS): Likewise. + + * include/grub/envblk.h: New file. + + * util/envblk.c: New file. + + * util/grub-editenv.c: New file. + + * commands/loadenv.c: New file. + +2008-07-01 Pavel Roskin + + * include/multiboot2.h (struct multiboot_tag_module): Use char, + not unsigned char. This fixes warnings and is consistent with + other tags. + + * disk/fs_uuid.c (search_fs_uuid): Correctly increment count. + + * normal/parser.y: Define YYENABLE_NLS as 0 to fix warnings. + + * term/tparm.c (analyze): Always set *popcount. + + * loader/i386/pc/linux.c (grub_rescue_cmd_linux): Remove useless + cast to fix a warning. + + * loader/i386/pc/multiboot2.c (grub_mb2_arch_module_alloc): Use + cast to suppress a warning. + + * fs/afs.c (grub_afs_read_block): Return grub_disk_addr_t, as + grub_fshelp_read_file() expects. + + * fs/fat.c: Fix UUID calculation on big-endian systems. We + write uuid as a 32-bit value in CPU byte order, so declare and + use it as such. + + * disk/raid.c: Cast grub_dprintf() arguments to unsigned long + long if the format specifier expects it. + * partmap/gpt.c (gpt_partition_map_iterate): Likewise. + * partmap/pc.c (pc_partition_map_iterate): Likewise. + * fs/ntfs.c (grub_ntfs_uuid): Cast data->uuid to unsigned long + long to fix a warning. + * fs/reiserfs.c (grub_reiserfs_read): Change casts in + grub_dprintf() arguments to fix warnings. + +2008-06-30 Pavel Roskin + + * util/i386/pc/grub-setup.c (setup): Write install_dos_part and + install_bsd_part immediately before core.img is embedded or + modified on disk. This fixes core.img verification if core.img + cannot be embedded. + + * util/i386/pc/grub-setup.c (setup): Use core_path_dev, not + core_path to calculate the blocklist. + Patch from Javier Martín + +2008-06-29 Robert Millan + + * fs/xfs.c (GRUB_XFS_FSB_TO_BLOCK): New macro. Maps filesystem + block to disk block. + (grub_xfs_read_block): Use GRUB_XFS_FSB_TO_BLOCK() on result. + Patch from Niels Böhm + +2008-06-29 Robert Millan + + * util/update-grub_lib.in (font_path): Search for fonts in + /boot/grub first, which is more likely to be readable (we aren't + deciding where fonts live, just looking for them). + +2008-06-26 Pavel Roskin + + * util/biosdisk.c (read_device_map): Don't leave dead map + entries for devices failing stat() check. + + * util/i386/pc/grub-setup.c (setup): Don't reuse core_path, use + core_path_dev for the core.img path on the target device. + +2008-06-26 Robert Millan + + * disk/fs_uuid.c: New file. + * conf/common.rmk (pkglib_MODULES): Add `fs_uuid.mod'. + (fs_uuid_mod_SOURCES, fs_uuid_mod_CFLAGS) + (fs_uuid_mod_LDFLAGS): New variables. + * include/grub/disk.h (grub_disk_dev_id): Add + `GRUB_DISK_DEVICE_UUID_ID'. + * kern/disk.c (grub_disk_dev_iterate): Allow disk devices not to + implement iterate(). + +2008-06-26 Robert Millan + + * util/grub.d/10_linux.in: Avoid passing UUIDs to Linux when either + "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" does not exist, or when a + Linux image includes no initrd. + +2008-06-21 Javier Martín + + * util/i386/pc/grub-setup.c (setup): Remove literal "core.img" in a + call to resolve the core image location that effectively appended the + name twice. + +2008-06-21 Robert Millan + + * util/grub.d/00_header.in: Move last prepare_grub_to_access_device() + call from here ... + + * util/grub.d/10_hurd.in: ... to here ... + * util/grub.d/10_linux.in: ... and here. + +2008-06-19 Robert Millan + + * kern/main.c (grub_main): Export `prefix' variable immediately + after it has been set by grub_machine_set_prefix(). + +2008-06-19 Robert Millan + + * commands/search.c (search_label, search_fs_uuid, search_file): Print + search result when not saving to variable, not the other way around. + When saving to variable, abort iteration as soon as a match is found. + +2008-06-19 Robert Millan + + * util/update-grub_lib.in (prepare_grub_to_access_device): Remove + check for partition that provides /boot/grub. Its logic is flawed, + as it prevents prepare_grub_to_access_device() from being called + multiple times. + +2008-06-19 Robert Millan + + * util/update-grub_lib.in (prepare_grub_to_access_device): Issue + "insmod" command directly when abstraction modules are needed, + instead of relying on GRUB_PRELOAD_MODULES (which had no effect + since it had already been processed). + +2008-06-19 Pavel Roskin + + * conf/i386-efi.rmk: Recompile grub-mkimage.c if Makefile has + changed. This is needed in case GRUB_LIBDIR changes. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-linuxbios.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + +2008-06-18 Pavel Roskin + + * conf/powerpc-ieee1275.rmk (kernel_elf_SOURCES): Rename + kernel_elf_symlist.c to symlist.c for consistency with other + architectures. Update all users. + * conf/sparc64-ieee1275.rmk (kernel_elf_SOURCES): Likewise. + +2008-06-18 Robert Millan + + * util/i386/pc/grub-install.in: If the drive is LVM or RAID, prepend + it in prefix. + + * util/i386/pc/grub-setup.c (main): Don't handle prefix at all. Set + `must_embed' to 1 when root_dev is a RAID device. When dest_dev is + a RAID device, run setup() for all members independently on whether + LVM abstraction is being used. + (setup): Don't handle prefix at all; let grub-mkimage take care of it. + If grub-mkimage has set `*install_dos_part == -2', don't override this + value. + Perform *install_dos_part adjustments independently on whether + we're embedding or not. + Clarify error message when image is too big for embedding. + Remove duplicate *install_dos_part stanza. + +2008-06-17 Robert Millan + + * term/ieee1275/ofconsole.c (fgcolor, bgcolor): Remove variables. + (grub_ofconsole_normal_color, grub_ofconsole_highlight_color): New + variables. + (grub_ofconsole_setcolor, grub_ofconsole_getcolor): Load/store + values in grub_ofconsole_normal_color and + grub_ofconsole_highlight_color (they're not directly related to + background and foreground). + (grub_ofconsole_setcolorstate): Extract background and foreground + from grub_ofconsole_normal_color and grub_ofconsole_highlight_color. + +2008-06-17 Robert Millan + + * util/update-grub_lib.in (prepare_grub_to_access_device): Use + /boot/grub for the check in last commit, not /boot (they could be + different partitions). + +2008-06-16 Robert Millan + + * util/update-grub_lib.in (prepare_grub_to_access_device): If we were + asked to setup access for the same partition that provides /boot, + don't bother using UUIDs since our root already has the value we + want. + +2008-06-16 Robert Millan + + * util/biosdisk.c (convert_system_partition_to_system_disk): Detect + I2O devices. + Patch from Sven Mueller . + +2008-06-16 Robert Millan + + * util/update-grub.in: Check for $EUID instead of $UID. + Reported by Vincent Zweije. + +2008-06-16 Bean + + * fs/ext2.c (grub_ext2_blockgroup): Revert to pre-journal state. + (grub_ext2_read_block): Likewise. + (grub_ext2_read_inode): Likewise. + (grub_ext2_mount): Likewise. + (grub_ext2_close): Likewise. + (grub_ext3_get_journal): Removed. + + * fs/reiserfs.c (grub_reiserfs_get_item): Revert to pre-journal state. + (grub_reiserfs_read_symlink): Likewise. + (grub_reiserfs_mount): Likewise. + (grub_reiserfs_open): Likewise. + (grub_reiserfs_read): Likewise. + (grub_reiserfs_close): Likewise. + (grub_reiserfs_get_journal): Removed. + + * fs/fshelp.c (grub_fshelp_read): Removed. + (grub_fshelp_map_block): Likewise. + + * include/grub/fshelp.h (grub_fshelp_journal_type): Removed. + (grub_fshelp_journal): Likewise. + (grub_fshelp_read): Likewise. + (grub_fshelp_map_block): Likewise. + +2008-06-16 Pavel Roskin + + * conf/powerpc-ieee1275.rmk: Remove -msoft-float, we don't use + floating point anymore. + * include/grub/powerpc/libgcc.h: Leave only necessary exports. + +2008-06-15 Pavel Roskin + + * commands/ls.c (grub_ls_list_files): Use integer calculations + for human readable format, avoid floating point use. + * kern/misc.c (grub_ftoa): Remove. + (grub_vsprintf): Remove floating point support. + +2008-06-15 Robert Millan + + * util/grub.d/10_linux.in: Use the underlying device for loop-AES + devices. + Reported by Max Vozeler. + +2008-06-15 Robert Millan + + * util/i386/pc/grub-mkimage.c (generate_image): If we included a drive + in our prefix, set install_{dos,bsd}_part = -2 to indicate this can be + skipped later. + (main): If a memdisk was requested, add "(memdisk)" drive explicitly to + the beginning of the prefix. + + * kern/i386/pc/init.c (make_install_device): Remove memdisk check. + It is assumed that if we have a memdisk, grub-mkimage has set + grub_prefix to include the "(memdisk)" drive in it. + +2008-06-15 Robert Millan + + * term/i386/pc/console.c [GRUB_MACHINE_LINUXBIOS] (grub_console_init): + Initialize keyboard controller after registering the terminal, so that + grub_printf() can be called from grub_keyboard_controller_init(). + +2008-06-15 Robert Millan + + * fs/sfs.c (grub_sfs_read_extent): Fix the count of nodes in + extent-btree which is written as big endian on disk. + Reported by Alain Greppin . + +2008-06-14 Robert Millan + + * util/i386/efi/grub-install.in (modules): Remove `_chain'. + * util/i386/pc/grub-install.in (modules): Likewise. + +2008-06-13 Pavel Roskin + + * commands/ls.c (grub_ls_list_files): Fix format warnings. + +2008-06-13 Bean + + * commands/hexdump.c (grub_cmd_hexdump): Adjust offset for partition. + + * fs/ext2.c (grub_ext3_get_journal): Fix revoke block handling. + + * fs/fshelp.c (grub_fshelp_map_block): Don't map block 0 as it's used + to indicate sparse block. + +2008-06-12 Pavel Roskin + + * fs/ext2.c (grub_ext2_read_inode): Don't normalize block + number, grub_fshelp_read() does it for us. + + * fs/fshelp.c (grub_fshelp_read): New function. Implement + linear disk read with journal translation. + * fs/ext2.c: Use grub_fshelp_read() instead of grub_disk_read(). + * include/grub/fshelp.h: Declare grub_fshelp_read(). + +2008-06-09 Pavel Roskin + + * fs/minix.c (grub_minix_mount): Handle error reading + superblock. + +2008-06-08 Robert Millan + + * util/i386/pc/grub-setup.c (main): If install drive is an LVM, + don't append the RAID prefix afterwards. + Reported by Clint Adams. + +2008-06-08 Robert Millan + + Based on description from Pavel: + * kern/disk.c (grub_disk_check_range): Rename to ... + (grub_disk_adjust_range): ... this. Add a comment explaining the + tasks performed by this function. + +2008-06-08 Robert Millan + + * include/grub/ntfs.h (struct grub_ntfs_bpb): Rename `serial_number' to + `num_serial' (for consistency with other variables). + (struct grub_ntfs_data): Add `uuid' member. + * fs/ntfs.c (grub_ntfs_mount): Initialize `data->uuid'. + (grub_ntfs_uuid): New function. + (grub_ntfs_fs): Reference grub_ntfs_uuid() in `uuid' struct member. + +2008-06-07 Pavel Roskin + + * util/biosdisk.c (open_device): Revert last change to the + function, it broke installation. The sector needs to be + different dependent on which device is opened. + +2008-06-06 Robert Millan + + Ensure GRUB_KERNEL_MACHINE_DATA_END is always consistent with the + rest of GRUB, and breakage doesn't happen if its value were modified. + + * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_RAW_SIZE): + Redefine as an offset from `GRUB_KERNEL_MACHINE_DATA_END' instead of + a constant (same value). + * kern/i386/pc/startup.S: Replace hardcoded `0x50' with + `GRUB_KERNEL_MACHINE_DATA_END' (same value). + +2008-06-06 Robert Millan + + * util/biosdisk.c (open_device): Do not modify sector offset when + accessing a partition. kern/disk.c already handles this for us. + +2008-06-06 Robert Millan + + * util/grub-emu.c (grub_machine_init): Move code in this function from + here ... + (main): ... to here (before grub_util_biosdisk_init() call, to prevent + segfault in case grub_printf() is called). + + * util/i386/pc/grub-install.in: Append `--device-map=${device_map}' to + grub_probe. Update all users not to explicitly add it again. + (grub_device): New variable; contains corresponding device for grubdir. + (fs_module, partmap_module, devabstraction_module): Pass + `--device ${grub_device}' to grub_probe to avoid traversing /dev + every time. + +2008-06-05 Robert Millan + + * normal/misc.c (grub_normal_print_device_info): When a filesystem UUID + is found, print it (same layout as with labels). + +2008-06-04 Robert Millan + + * util/biosdisk.c (get_drive): Rename to ... + (find_grub_drive): ... this. Update all users. + + (get_os_disk): Rename to ... + (convert_system_partition_to_system_disk): ... this. Update all users. + + (find_drive): Rename to ... + (find_system_device): ... this. Update all users. + +2008-06-04 Robert Millan + + * util/biosdisk.c (get_os_disk): Handle IDA devices. + * util/grub-mkdevicemap.c (get_mmc_disk_name) + (make_device_map): Likewise. + +2008-06-01 Robert Millan + + * util/biosdisk.c (get_drive): Verify that `map[i].drive' is non-NULL + before dereferencing it. + + * fs/fat.c (struct grub_fat_bpb): Move fat32-specific fields into a + union with fat12/fat16-specific ones. Add some new fields, including + `num_serial' for both versions. + (struct grub_fat_data): Add `uuid' member. + (grub_fat_mount): Refer to fat32-specific fields in `bpb' by their new + names. Initialize `data->uuid' using `num_serial'. + (grub_fat_uuid): New function. + (grub_fat_fs): Reference grub_fat_uuid() in `uuid' struct member. + + * fs/reiserfs.c (grub_reiserfs_superblock): Add `uuid' field. + (grub_reiserfs_uuid): New function. + (grub_reiserfs_fs): Reference grub_reiserfs_uuid() in `uuid' struct + member. + + * fs/xfs.c (grub_xfs_sblock): Add `uuid' field. + (grub_xfs_uuid): New function. + (grub_xfs_fs): Reference grub_reiserfs_uuid() in `uuid' struct member. + +2008-06-01 Robert Millan + + * util/update-grub_lib.in (prepare_grub_to_access_device): Generate + code that is backward compatible with pre-uuid search command. + +2008-05-31 Robert Millan + + * disk/i386/pc/biosdisk.c (grub_biosdisk_iterate): Iterate through + floppies after everything else, to ensure floppy drive isn't accessed + unnecessarily (patch from Bean). + +2008-05-31 Robert Millan + + * commands/search.c (search_label, search_fs_uuid, search_file): Do + not print device names when we were asked to set a variable. + +2008-05-31 Robert Millan + + * term/ieee1275/ofconsole.c (grub_ofconsole_setcursor): Implement + using "cursor-on" and "cursor-off" commands (understood at least by + the Open Firmware flavour on OLPC). + +2008-05-31 Michael Gorven + + * term/terminfo.c (grub_terminfo_set_current): Correct vt100 cursor + on and off sequences. + +2008-05-31 Robert Millan + + * util/update-grub_lib.in: Replace `grub-probe' with `${grub_probe}'. + * util/update-grub.in: Likewise. + +2008-05-30 Pavel Roskin + + * util/biosdisk.c (linux_find_partition): Simplify logic and + make the code more universal. Keep special processing for + devfs, but use a simple rule for all other devices. If the + device ends with a number, append 'p' and the partition number. + Otherwise, append only the partition number. + +2008-05-30 Robert Millan + + * util/update-grub.in (GRUB_DISABLE_LINUX_UUID): Export variable. + * util/grub.d/10_linux.in: If GRUB_DEVICE_UUID is set, and + GRUB_DISABLE_LINUX_UUID isn't true, use the filesystem UUIDs as + the `root' parameter to Linux. + +2008-05-30 Robert Millan + + * commands/search.c (options): Rename --fs_uuid to --fs-uuid. + * util/update-grub_lib.in (prepare_grub_to_access_device): Replace + --fs_uuid with --fs-uuid. + * util/update-grub.in: Allow filesystem UUID probes to fail (since not + all filesystems support them). + +2008-05-30 Robert Millan + + * fs/ext2.c (grub_ext2_uuid): Use `04x' instead of '02x' as + grub_printf() flags, since we're printing in units of 2 bytes. + +2008-05-30 Robert Millan + + * util/grub.d/00_header.in: Remove obsolete comment referencing + convert_system_path_to_grub_path(). + * util/update-grub.in: Likewise. + * util/update-grub_lib.in (is_path_readable_by_grub): New function. + (convert_system_path_to_grub_path): Add a warning message explaining + that this function is deprecated. Rely on is_path_readable_by_grub() + for the readability checks. + (font_path): Use is_path_readable_by_grub() for the readability + check rather than convert_system_path_to_grub_path(). + +2008-05-30 Robert Millan + + * util/update-grub_lib.in (prepare_grub_to_access_device): New function. + * util/update-grub.in: Set `GRUB_FONT_PATH' to the system path, without + converting it first. + * util/grub.d/00_header.in: Use prepare_grub_to_access_device() to setup + grub.cfg for access to font file, and afterwards call it again to set + the root device. + +2008-05-30 Robert Millan + + * commands/search.c (options): Add --fs_uuid option. + (search_fs_uuid): New function. + (grub_cmd_search): Fix --set argument passing. + Use search_fs_uuid() when requested via --fs_uuid. + (grub_search_init): Update help message. + * fs/ext2.c (struct grub_ext2_sblock): Rename `unique_id' to `uuid' + and redeclare it as an array of 16-bit words. + (grub_ext2_uuid): New function. + (grub_ext2_fs): Reference grub_ext2_uuid() in `uuid' struct member. + * include/grub/fs.h (struct grub_fs): Add `uuid' struct member. + * util/update-grub.in (GRUB_DEVICE_UUID, GRUB_DEVICE_BOOT) + (GRUB_DEVICE_BOOT_UUID): New variables. + (GRUB_DRIVE. GRUB_DRIVE_BOOT. GRUB_DRIVE_BOOT_GRUB): Remove. + * util/grub.d/00_header.in: Set root using `search --fs_uuid' command + whenever possible. + * util/grub.d/10_hurd.in: Avoid explicit use of root drive. Instead, + just assume `root' variable has the right value. + * util/grub.d/10_linux.in: Likewise. + * util/grub-probe.c (probe): Probe for filesystem UUID when requested + via PRINT_FS_UUID. + (main): Recognise `-t fs_uuid' argument. + +2008-05-30 Robert Millan + + * util/biosdisk.c (map): Redefine structure to hold information + about GRUB drive name. + (get_drive): Reimplement without assuming (and verifying) BIOS-like + drive names. + (call_hook): Remove. + (grub_util_biosdisk_iterate): Access drive names via `.drive' struct + member. Assume drive has partitions. + (grub_util_biosdisk_open): Access device names via `.device' struct + member. + (open_device): Likewise. + (find_drive): Likewise. + (read_device_map): Adjust map[] usage to match the new struct + definition. Don't check for duplicates (still possible, but not cheap + anymore). + (grub_util_biosdisk_fini): Free malloced buffers referenced by map[]. + (make_device_name): Remove assumption of BIOS-like drive names. + +2008-05-30 Pavel Roskin + + * conf/i386-efi.rmk (normal/execute.c_DEPENDENCIES): Remove, as + compiling execute.c doesn't need grub_script.tab.h anymore. + (normal/command.c_DEPENDENCIES): Likewise. + (normal/function.c_DEPENDENCIES): Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-linuxbios.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + +2008-05-29 Pavel Roskin + + * disk/lvm.c (grub_lvm_scan_device): Check for the buffer end + when scanning metadata for volume group name. + + * include/grub/script.h: Don't include grub_script.tab.h. It's + a generated file, which may only be included from the files with + DEPENDENCIES rules in the makefile. Don't use typedef YYSTYPE, + use union YYSTYPE, as the later allows forward declaration. + * normal/lexer.c: Don't use typedef YYSTYPE, use union YYSTYPE. + +2008-05-29 Robert Millan + + * term/i386/pc/at_keyboard.c: Include `grub/machine/machine.h'. + (OLPC_UP, OLPC_DOWN, OLPC_LEFT, OLPC_RIGHT): New macros. + [GRUB_MACHINE_IEEE1275] (keyboard_map): Add OLPC scan codes + (grub_console_checkkey): Add grub_dprintf() call to report unknown + scan codes. + +2008-05-29 Robert Millan + + * term/i386/pc/at_keyboard.c (grub_console_checkkey): Add support for + control key combinations. + +2008-05-29 Robert Millan + + * util/powerpc/ieee1275/grub-install.in: Move from here ... + * util/ieee1275/grub-install.in: ... to here. + * powerpc-ieee1275.rmk (grub_install_SOURCES): Update location. + * i386-ieee1275.rmk (sbin_SCRIPTS): New variable. + (grub_install_SOURCES): Likewise. + +2008-05-29 Robert Millan + + * fs/affs.c: Update copyright year. + * fs/ext2.c: Likewise. + * fs/fshelp.c: Likewise. + * fs/hfsplus.c: Likewise. + * fs/ntfs.c: Likewise. + * fs/xfs.c: Likewise. + * include/grub/fshelp.h: Likewise. + * util/grub-mkdevicemap.c: Likewise. + +2008-05-28 Robert Millan + + * util/update-grub.in: Allow chmod call to fail, since /boot/grub/ + might need to be fatfs to support some firmware implementations + (e.g. OFW or EFI). + +2008-05-28 Robert Millan + + * util/biosdisk.c (linux_find_partition, get_os_disk): Handle MMC + devices. + * util/grub-mkdevicemap.c (get_mmc_disk_name) + (make_device_map): Likewise. + +2008-05-20 Bean + + * fs/fshelp.c (grub_fshelp_map_block): New function. + (grub_fshelp_find_file): Use 64-bit type for pos and block address. + Use `>>' and `&' operator to avoid 64-bit divide and modulo. + + * include/grub/fshelp.h (grub_fshelp_journal_type): New enum. + (GRUB_FSHELP_JOURNAL_UNUSED_MAPPING): New macro. + (grub_fshelp_journal): New structure. + (grub_fshelp_map_block): New function prototype. + (grub_fshelp_read_file): Use grub_disk_addr_t as block type. + (grub_fshelp_map_block): Likewise. + + * fs/ext2.c (EXT3_FEATURE_COMPAT_HAS_JOURNAL): New macro. + (EXT3_JOURNAL_MAGIC_NUMBER): Likewise. + (EXT3_JOURNAL_DESCRIPTOR_BLOCK): Likewise. + (EXT3_JOURNAL_COMMIT_BLOCK): Likewise. + (EXT3_JOURNAL_SUPERBLOCK_V1): Likewise. + (EXT3_JOURNAL_SUPERBLOCK_V2): Likewise. + (EXT3_JOURNAL_REVOKE_BLOCK): Likewise. + (EXT3_JOURNAL_FLAG_ESCAPE): Likewise. + (EXT3_JOURNAL_FLAG_SAME_UUID): Likewise. + (EXT3_JOURNAL_FLAG_DELETED): Likewise. + (EXT3_JOURNAL_FLAG_LAST_TAG): Likewise. + (grub_ext2_sblock): New members for journal support. + (grub_ext3_journal_header): New structure. + (grub_ext3_journal_revoke_header): Likewise. + (grub_ext3_journal_block_tag): Likewise. + (grub_ext3_journal_sblock): Likewise. + (grub_fshelp_node): New members logfile and journal. + (grub_ext2_read_block): Change block type to grub_disk_addr_t. Use + grub_fshelp_map_block to get real block number. + (grub_ext2_blockgroup): Use grub_fshelp_map_block to get real block + number. + (grub_ext2_read_inode): Likewise. + (grub_ext3_get_journal): New function. + (grub_read_inode): Initialize journal using grub_ext3_get_journal. + (grub_ext2_close): Release memory used by journal. + + * fs/reiserfs.c (REISERFS_MAGIC_STRING): Changed to "ReIsEr". + (REISERFS_MAGIC_DESC_BLOCK): New macro. + (grub_reiserfs_transaction_header): Renamed to + grub_reiserfs_description_block, replace field data with real_blocks. + (grub_reiserfs_commit_block): New structure. + (grub_reiserfs_data): New member journal. + (grub_reiserfs_get_item): Use grub_fshelp_map_block to get real block + number. + (grub_reiserfs_read_symlink): Likewise. + (grub_reiserfs_iterate_dir): Likewise. + (grub_reiserfs_open): Likewise. + (grub_reiserfs_read): Likewise. + (grub_reiserfs_get_journal): New function. + (grub_reiserfs_mount): Use "ReIsEr" as super block magic, as there are + three varieties ReIsErFs, ReIsEr2Fs and ReIsEr3Fs. Initialize journal + using grub_reiserfs_get_journal. + (grub_reiserfs_close): Release memory used by journal. + + * fs/affs.c (grub_affs_read_block): Change block type to + grub_disk_addr_t. Use grub_divmod64 to do 64-bit division. + + * fs/afs.c (grub_afs_read_block): Change block type to grub_disk_addr_t. + + * fs/hfsplus.c (grub_hfsplus_read_block): Likewise. + + * fs/ntfs.c (grub_ntfs_read_block): Likewise. + + * fs/udf.c (grub_udf_read_block): Change block type to + grub_disk_addr_t. Use type cast to avoid warning. + + * fs/xfs.c (grub_xfs_read_block): Likewise. + +2008-05-16 Christian Franke + + * commands/cat.c (grub_cmd_cat): Remove non-ESC keys from keyboard queue + to ensure that break with ESC will always work. + * commands/sleep.c (grub_interruptible_millisleep): Likewise. + Remove ESC from keyboard queue. + +2008-05-16 Christian Franke + + * util/biosdisk.c: [__CYGWIN__] Add includes. + (grub_util_biosdisk_open): Use Linux code also for Cygwin. + (get_os_disk): Move variable declarations to OS specific + parts to avoid warning. + [__GNU__] (get_os_disk): Fix /dev/sdXsN case. + [__CYGWIN__] (get_os_disk): Add Cygwin /dev/sdXN device names. + (grub_util_biosdisk_get_grub_dev): Use Linux code also for + Cygwin. + * util/getroot.c: [__CYGWIN__] Add includes. + (strip_extra_slashes): Fix "/" case. + [__CYGWIN__] (get_win32_path): New function. + [__CYGWIN__] (grub_get_prefix): Add conversion to win32 path. + [__CYGWIN__] (find_root_device): Disable. + [__CYGWIN__] (get_bootsec_serial): New function. + [__CYGWIN__] (find_cygwin_root_device): Likewise. + [__linux__] (grub_guess_root_device): Add early returns to simplify + structure. + [__CYGWIN__] (grub_guess_root_device): Call find_cygwin_root_device. + [__linux__] (grub_util_get_dev_abstraction): Enable LVM and RAID + check for Linux only. + +2008-05-15 Bean + + * kern/i386/pc/startup.S (grub_console_getkey): Workaround for the + keyboard hang problem in apple's intel mac. + +2008-05-09 Robert Millan + + * util/biosdisk.c (linux_find_partition, get_os_disk): Handle Virtio + devices. + * util/grub-mkdevicemap.c (get_virtio_disk_name) + (make_device_map): Likewise. + Reported by Aurelien Jarno + +2008-05-07 Ian Campbell + + * util/biosdisk.c (get_os_disk): Recognise xvd type disks. + * util/grub-mkdevicemap.c (get_xvd_disk_name): New function. + (make_device_map): Output entries for xvd type disks. + +2008-05-07 Robert Millan + + * util/biosdisk.c (linux_find_partition, get_os_disk): Handle CCISS + devices. + * util/grub-mkdevicemap.c (get_cciss_disk_name) + (make_device_map): Likewise. + Reported by Roland Dreier + +2008-05-07 Robert Millan + + * disk/lvm.c (grub_lvm_scan_device): Detect errors in an additional + grub_strstr() call. Correct a few mistakes in failure path handling. + +2008-05-06 Robert Millan + + * util/update-grub_lib.in (make_system_path_relative_to_its_root): + Do not print a trailing slash (therefore, the root directory is an + empty string). + (convert_system_path_to_grub_path): Do not remove trailing slash + from make_system_path_relative_to_its_root() output. + + * util/i386/pc/grub-install.in: Add trailing slash to output from + make_system_path_relative_to_its_root(). + +2008-05-06 Robert Millan + + * util/grub-fstest.c (grub_refresh): Call `fflush (stdout)'. This + ensures that output lines aren't intermangled with those sent to + stderr (via grub_util_info()). + * util/grub-probe.c (grub_refresh): Likewise. + * util/i386/pc/grub-setup.c (grub_refresh): Likewise. + +2008-05-05 Christian Franke + + * util/grub-mkdevicemap.c (get_floppy_disk_name) [__CYGWIN__]: + Add Cygwin device names. + (get_ide_disk_name) [__CYGWIN__]: Likewise. + (get_scsi_disk_name) [__CYGWIN__]: Likewise. + (check_device): Return error instead of success on empty name. + (make_device_map): Move label inside linux specific code to + prevent compiler warning. + +2008-04-30 Robert Millan + + Based on patch from Fabian Greffrath + * util/grub.d/10_linux.in: Add ${GRUB_CMDLINE_LINUX_DEFAULT} to the + first boot option. + * util/update-grub.in: Export GRUB_CMDLINE_LINUX_DEFAULT. + +2008-04-29 Robert Millan + + * docs/grub.cfg: New file (example GRUB configuration). + +2008-04-26 Robert Millan + + * DISTLIST: Sort (sort -u < DISTLIST | sponge DISTLIST). Add + `loader/i386/ieee1275/linux.c', `loader/i386/ieee1275/linux_normal.c' + and `disk/ieee1275/nand.c'. + +2008-04-25 Bean + + * Makefile.in (RMKFILES): Add missing arch i386-ieee1275 and + i386-linuxbios. + + * commands/hexdump.c (grub_cmd_hexdump): Support dumping of device, + change the buffer size to 4096 for cdrom device. + + * conf/i386-ieee1275.rmk (pkglib_MODULES): Add _linux.mod, linux.mod + and nand.mod. + (_linux_mod_SOURCES): New variable. + (_linux_mod_CFLAGS): Likewise. + (_linux_mod_LDFLAGS): Likewise. + (linux_mod_SOURCES): Likewise. + (linux_mod_CFLAGS): Likewise. + (linux_mod_LDFLAGS): Likewise. + (nand_mod_SOURCES): Likewise. + (nand_mod_CFLAGS): Likewise. + (nand_mod_LDFLAGS): Likewise. + + * disk/ieee1275/ofdisk.c (grub_ofdisk_open): Return + GRUB_ERR_UNKNOWN_DEVICE instead of GRUB_ERR_BAD_DEVICE if no device + type property. (nand device in olpc don't have this property) + + * include/grub/disk.h (grub_disk_dev_id): New macro + GRUB_DISK_DEVICE_NAND_ID. + + * include/grub/i386/ieee1275/loader.h (grub_rescue_cmd_linux): New + function prototype. + (grub_rescue_cmd_initrd): Likewise. + + * include/grub/i386/linux.h (GRUB_LINUX_OFW_SIGNATURE): New macro. + (linux_kernel_params): Add new member ofw_signature, ofw_num_items, + ofw_cif_handler and ofw_idt, adjust padding number. + + * include/grub/i386/pc/memory.h (grub_upper_mem): Export it if + GRUB_MACHINE_IEEE1275 is defined. + + * include/grub/ieee1275/ieee1275.h (grub_available_iterate): + Use NESTED_FUNC_ATTR attribute on the hook parameter. + + * kern/powerpc/ieee1275/init.c (grub_claim_heap): Use NESTED_FUNC_ATTR + on nested function heap_init. + (grub_upper_mem): New variable for i386-ieee1275. + (grub_get_extended_memory): New function for i386-ieee1275. + (grub_machine_init): Call grub_get_extended_memory for i386-ieee1275. + + * kern/powerpc/ieee1275/openfw.c (grub_available_iterate): Use + NESTED_FUNC_ATTR on the hook parameter. Don't quit if no device type + property. + + * loader/i386/ieee1275/linux.c: New file. + + * loader/i386/ieee1275/linux_normal.c: New file. + + * disk/ieee1275/nand.c: New file. + +2008-04-18 Thomas Schwinge + + * util/i386/pc/grub-mkrescue.in (grub_mkimage): Don't overwrite correct + value. + * util/powerpc/ieee1275/grub-mkrescue.in (grub_mkimage): Likewise. + +2008-04-18 Robert Millan + + Restructures early code path on ieee1275 to unify grub_main() as + the first C function that is executed in every platform. + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_init): New prototype. + * kern/i386/ieee1275/startup.S (_start): Jump to grub_main() instead of + cmain(). + * kern/powerpc/ieee1275/crt0.S (_start): Likewise. + * kern/ieee1275/cmain.c (cmain): Rename to ... + * kern/ieee1275/cmain.c (grub_ieee1275_init): ... this. + * kern/ieee1275/init.c (grub_machine_init): Call grub_ieee1275_init() + at the beginning. + +2008-04-18 Robert Millan + + * util/update-grub.in: Fix syntax error when setting + `GRUB_PRELOAD_MODULES'. + Reported by Stephane Chazelas + +2008-04-17 Lubomir Kundrak + + * aclocal.m4 (grub_PROG_OBJCOPY_ABSOLUTE): take only .text + section into account, newer toolchains generate unique build ids + * configure.ac: remove the test for --build-id=none acceptance, + we want build ids to be preserved + * genmk.rb: add -R .note.gnu.build-id to objcopy, so build id + far from other sections don't cause the raw binary images grow + size + +2008-04-15 Robert Millan + + * disk/lvm.c: Update copyright year. + * kern/misc.c: Likewise. + +2008-04-14 Vesa Jaaskelainen + + * disk/lvm.c (grub_lvm_scan_device): Add forgotten failure path when + there is no memory left for physical volume name. + +2008-04-14 Vesa Jaaskelainen + + * disk/lvm.c (grub_lvm_scan_device): Fix logical volume's physical + volume name mapping to support bigger than 9 character names properly. + +2008-04-13 Robert Millan + + * disk/i386/pc/biosdisk.c (grub_biosdisk_rw): Fix CHS limit check, + as per http://www.allensmith.net/Storage/HDDlimit/Int13h.htm + +2008-04-13 Christian Franke + + * util/i386/pc/grub-mkrescue.in: Add --emulation=floppy + to create a floppy emulation boot CD when non emulation mode + does not work. + Enable Joliet CD filesystem extension. + +2008-04-13 Robert Millan + + * kern/misc.c (grub_strncat): Fix off-by-one error. + Reported by Zhang Huan + + * kern/env.c (grub_env_context_close): Clear current context, not + previous one. + Patch from Zhang Huan + + * kern/misc.c (grub_strcat): Minor speed optimization (same code size). + +2008-04-13 Robert Millan + + Improve robustness when handling LVM. + + * disk/lvm.c (grub_lvm_getvalue): Return 0 when `*p' is NULL + (and leave `*p' unmodified). + (grub_lvm_iterate): Don't assume `vg->lvs != NULL' when iterating + through it. + (grub_lvm_memberlist): Don't assume `lv->vg->pvs != NULL' when + iterating through it. + (grub_lvm_open): Don't assume `vg->lvs != NULL' when iterating + through it. + (grub_lvm_scan_device): Check the return value (and fail gracefully + when due) on each grub_lvm_getvalue() or grub_strstr() call. + Don't assume `vg->pvs != NULL' when iterating through it. + +2008-04-13 Robert Millan + + * gendistlist.sh (EXTRA_DISTFILES): Add `genpartmaplist.sh'. + * genmk.rb (partmap): New variable. + (CLEANFILES, PARTMAPFILES): Add #{partmap}. + (#{partmap}): New target rule. + * genpartmaplist.sh: New file. + * Makefile.in (pkglib_DATA): Add partmap.lst. + (partmap.lst): New target rule. + * util/i386/pc/grub-mkrescue.in: Generate grub.cfg that loads needed + modules (including all partition maps), instead of preloading them. + +2007-04-13 Fabian Greffrath + + * util/grub.d/30_os-prober.in: New script. Use `os-prober' and + `linux-boot-prober' (if installed) to detect other operating + systems which are installed on the computer and add them to + the boot menu. + * conf/common.rmk: Build and install 30_os-prober. + +2008-04-12 Robert Millan + + * kern/powerpc/ieee1275/init.c: Move from here ... + * kern/ieee1275/init.c: ... to here. Update all users. + + * kern/powerpc/ieee1275/cmain.c: Move from here ... + * kern/ieee1275/cmain.c: ... to here. Update all users. + + * kern/powerpc/ieee1275/openfw.c: Move from here ... + * kern/ieee1275/openfw.c: ... to here. Update all users. + + * loader/powerpc/ieee1275/multiboot2.c: Move from here ... + * loader/ieee1275/multiboot2.c: ... to here. Update all users. + +2008-04-10 Pavel Roskin + + * configure.ac: Always use "_cv_" in cache variables for + compatibility with Autoconf 2.62. + +2008-04-07 Robert Millan + + Revert grub/machine/init.h addition by Pavel (since it breaks on + i386-ieee1275 and others): + * util/i386/pc/misc.c: Remove grub/machine/init.h. + * util/powerpc/ieee1275/misc.c: Likewise. + +2008-04-07 Robert Millan + + * util/grub-probe.c (probe): Improve error message. + +2008-04-07 Robert Millan + + * util/biosdisk.c (read_device_map): Skip devices that don't exist + (this prevents the presence of a bogus entry from ruining the whole + thing). + +2008-04-06 Pavel Roskin + + * util/biosdisk.c: Include grub/util/biosdisk.h. + * util/grub-fstest.c (execute_command): Make static. + * util/grub-mkdevicemap.c (check_device): Likewise. + * util/i386/pc/misc.c: Include grub/machine/init.h. + * util/powerpc/ieee1275/misc.c: Likewise. + * util/lvm.c: Include grub/util/lvm.h. + * util/misc.c: Include grub/kernel.h, grub/misc.h and + grub/cache.h. + * util/raid.c: Include grub/util/raid.h. + (grub_util_getdiskname): Make static. + + * util/grub-emu.c (main): Remove calls to grub_hostfs_init() and + grub_hostfs_fini(), as they are called from grub_init_all() and + grub_fini_all() respectively. This fixes an infinite loop in + grub-fstest due to double registration of hostfs. + Reported by Christian Franke + +2008-04-05 Pavel Roskin + + * bus/pci.c (grub_pci_iterate): For multifunction devices, probe + all 8 functions. Otherwise, probe function 0 only. + +2008-04-04 Pavel Roskin + + * commands/lspci.c (grub_lspci_iter): Print the bus number + correctly. + + * commands/lspci.c (grub_pci_classes): Fix typos. + (grub_lspci_iter): Don't print func twice. Print vendor ID + before device ID, as it's normally done. + + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): + Fix signedness warnings. + * kern/powerpc/ieee1275/openfw.c (grub_available_iterate): + Likewise. + * util/ieee1275/get_disk_name.c: Include config.h so that + _GNU_SOURCE is defined and getline() is declared. Mark an + unused argument as such. Fix a signedness warning. + +2008-04-02 Pavel Roskin + + * genkernsyms.sh.in: Use more robust assignments for CC and + srcdir. Quote srcdir. + * gensymlist.sh.in: Likewise. Assert at the compile time that + the symbol table is not empty. + + * disk/raid.c (grub_raid_memberlist): Fix a signedness warning. + * fs/cpio.c (grub_cpio_read): Likewise. + +2008-04-01 Pavel Roskin + + * disk/ata.c (grub_ata_open): Don't lose precision in disk->id. + * disk/host.c (grub_host_open): Likewise. + * disk/loopback.c (grub_loopback_open): Likewise. + * disk/memdisk.c (grub_memdisk_open): Use a string pointer for + disk->id as in disk/host.c, not a multi-character constant. + + * util/grub-fstest.c (cmd_cmp): Use fseeko(), not fseek(). The + later is obsolete, potentially dangerous and sets a bad example. + * util/i386/efi/grub-mkimage.c (make_header): Likewise. + * util/misc.c (grub_util_get_image_size): Likewise. + + * disk/loopback.c (options): Improve help for "--partitions". + + * normal/arg.c (grub_arg_show_help): Fix spacing of the long + options to align them with the short options, e.g. "echo -e". + +2008-03-31 Bean + + * video/reader/png.c (grub_png_data): New member is_16bit and + image_data. + (grub_png_decode_image_header): Detect 16 bit png image. + (grub_png_convert_image): New function to convert 16 bit image to 8 bit. + (grub_png_decode_png): Call grub_png_convert_image for 16 bit image. + (grub_video_reader_png): Release memory occupied by image_data. + + * fs/ntfs.c (find_attr): Handle non-resident attribute list larger than + 4096 bytes. + (grub_nfs_mount): Skip the test for sector per cluster. + + * include/grub/ntfs.h (MAX_SPC): Removed. + +2008-03-31 Bean + + * conf/common.rmk (pkgdata_MODULES): Add afs.mod. + (grub_probe_SOURCES): Add fs/afs.c. + (grub_fstest_SOURCES): Likewise. + (afs_mod_SOURCES): New variable. + (afs_mod_CFLAGS): Likewise. + (afs_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/afs.c. + (grub_emu_SOURCES): Likewise. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * fs/afs.c: New file. + +2008-03-30 Pavel Roskin + + * disk/host.c: Include grub/misc.h to fix a warning. + * util/hostfs.c: Use GRUB_MOD_INIT and GRUB_MOD_FINI to fix + warnings about implicit declarations. + + * fs/udf.c (grub_udf_mount): Fix warning about a shadowing a + variable. + * include/grub/i386/loader.h: Change declaration of + grub_linux_boot() to match what grub_loader_set() expects. + * util/getroot.c (grub_guess_root_device): Return const char* to + fix a warning. + * util/grub-probe.c (probe): Fix a warning about uninitialized + abstraction_name variable. + * util/i386/get_disk_name.c (grub_util_get_disk_name): Mark + second argument as unused to fix a warning. + + * loader/i386/pc/multiboot2.c (grub_mb2_arch_elf64_hook): Add + missing grub_error() call. + + * util/update-grub_lib.in: Define datarootdir, since Autoconf + 2.60 and newer uses it to define datadir. + + * commands/sleep.c: Fix warning about implicit declaration. + * disk/memdisk.c: Likewise. + * loader/aout.c: Likewise. + * loader/i386/bsd_normal.c: Likewise. + * util/grub-probe.c: Likewise. + + * commands/i386/cpuid.c (has_longmode): Make static. + * disk/i386/pc/biosdisk.c (cd_drive): Likewise. + * include/grub/i386/bsd.h (bios_memmap_t): Remove, it's unused. + + * kern/i386/pc/startup.S (real_to_prot): Use %cs prefix to load + GDT. This is more robust, as %ds can change. + (grub_biosdisk_rw_int13_extensions): Don't clear %ds before + calling real_to_prot(). + (grub_biosdisk_get_diskinfo_int13_extensions): Likewise. + +2008-03-28 Pavel Roskin + + * kern/i386/pc/startup.S: Assert that uncompressed functions + don't spill beyond GRUB_KERNEL_MACHINE_RAW_SIZE. + * kern/i386/pc/lzo1x.S: Remove all .align directives in the + code, as they push parts of the code (error handlers) beyond + GRUB_KERNEL_MACHINE_RAW_SIZE. Speed is not as important in this + code as correctness and size. + +2008-03-28 Pavel Roskin + + * kern/i386/pc/startup.S + (grub_biosdisk_get_diskinfo_int13_extensions): When converting + data block address to the real mode, keep offset minimal. This + works around a bug in AWARD BIOS on old Athlon systems, which + makes CD detection hang. + +2008-03-26 Pavel Roskin + + * normal/color.c (grub_parse_color_name_pair): Make `name' a + const. + * include/grub/normal.h: Add grub_parse_color_name_pair() + declaration. + +2008-03-24 Bean + + * disk/i386/pc/biosdisk.c (cd_start): Removed. + (cd_count): Removed. + (cd_drive): New variable. + (grub_biosdisk_get_drive): Don't check for (cdN) device. + (grub_biosdisk_call_hook): Likewise. + (grub_biosdisk_iterate): Change cdrom detection method. + (grub_biosdisk_open): Replace cd_start with cd_drive. + (GRUB_MOD_INIT): Use grub_biosdisk_get_cdinfo_int13_extension to + detect cdrom device. + + * include/grub/i386/pc/biosdisk.h (GRUB_BIOSDISK_MACHINE_CDROM_START): + Removed. + (GRUB_BIOSDISK_MACHINE_CDROM_END): Removed. + (GRUB_BIOSDISK_CDTYPE_NO_EMUL): New macro. + (GRUB_BIOSDISK_CDTYPE_1_2_M): Likewise. + (GRUB_BIOSDISK_CDTYPE_1_44_M): Likewise. + (GRUB_BIOSDISK_CDTYPE_2_88_M): Likewise. + (GRUB_BIOSDISK_CDTYPE_HARDDISK): Likewise. + (GRUB_BIOSDISK_CDTYPE_MASK): Likewise. + (grub_biosdisk_cdrp): New structure. + (grub_biosdisk_get_cdinfo_int13_extensions): New function. + + * include/grub/i386/pc/kernel.h (grub_boot_drive): Export this variable. + + * kern/i386/pc/init.c (make_install_device): Don't use (cdN) as root + device. + + * kern/i386/pc/startup.S (grub_biosdisk_get_cdinfo_int13_extensions): + New function. + +2008-03-20 Robert Millan + + Remove 2 TiB limit in ata.mod. + * disk/ata.c (grub_ata_device): Promote `size' to grub_uint64_t. + (grub_ata_dumpinfo): Print sector count with 0x%llx. + (grub_ata_identify): Interpret `&info16[100]' as a pointer to + grub_uint64_t instead of grub_uint32_t. + +2008-03-05 Bean + + * loader/i386/pc/multiboot.c (grub_multiboot_get_bootdev): New function. + (grub_multiboot): Set boot device. + + * boot/i386/pc/lnxboot.S (real_code_2): Set %dh to 0xFF. + +2008-03-02 Bean + + * fs/reiserfs.c (grub_reiserfs_read_symlink): Add 0 at the end of + symlink_buffer. + +2008-03-01 Yoshinori K. Okuji + + * DISTLIST: Added docs/fdl.texi, docs/grub.texi, docs/mdate-sh and + texinfo.tex. + + * docs/grub.texi: New file. Copied from GRUB Legacy, and slightly + modified. + + * docs/fdl.texi: New file. + + * docs/mdate-sh: New file. Copied from gnulib. + * docs/texinfo.tex: Likewise. + + * config.guess: Updated from gnulib. + * install-sh: Likewise. + +2008-02-28 Robert Millan + + * conf/i386-linuxbios.rmk (pkglib_MODULES): Add aout.mod. + (aout_mod_SOURCES): New variable. + (aout_mod_CFLAGS): Likewise. + (aout_mod_LDFLAGS): Likewise. + + * conf/i386-ieee1275.rmk: Likewise. + +2008-02-28 Robert Millan + + * util/update-grub.in: Reorganise terminal validity check. Accept + `ieee1275:console' (OLPC) and `*:gfxterm' as valid too. + Based on suggestion by Franklin PIAT. + +2008-02-28 Fabian Greffrath + + * include/grub/util/getroot.h (grub_util_check_block_device): Export new + function. + * util/getroot.c (grub_util_check_block_device): New function that + returns the given argument if it is a block device and returns NULL else. + * util/grub-probe.c (argument_is_device): New variable. + (probe): Promote device_name from a variable to an argument. Receive + device_name from grub_util_check_block_device() if path is NULL and from + grub_guess_root_device() else. Do not free() device_name anymore. + (options): Introduce new parameter '-d, --device'. + (main): Add description of the new parameter to the help screen. + Rename path variable to argument. Set argument_is_device if the '-d' + option is given. Pass argument to probe() depending on + argument_is_device. + +2008-02-24 Bean + + * fs/iso9660.c (GRUB_ISO9660_VOLDESC_BOOT): New macro. + (GRUB_ISO9660_VOLDESC_PRIMARY): Likewise. + (GRUB_ISO9660_VOLDESC_SUPP): Likewise. + (GRUB_ISO9660_VOLDESC_PART): Likewise. + (GRUB_ISO9660_VOLDESC_END): Likewise. + (grub_iso9660_primary_voldesc): New member escape. + (grub_iso9660_data): New member joliet. + (grub_iso9660_convert_string): New function. + (grub_iso9660_mount): Detect joliet extension. + (grub_iso9660_iterate_dir): Convert filename when joliet is detected. + (grub_iso9660_iso9660_label): Likewise. + + * conf/common.rmk (pkgdata_MODULES): Add udf.mod. + (grub_setup_SOURCES): Add fs/udf.c. + (grub_fstest_SOURCES): Likewise. + (udf_mod_SOURCES): New variable. + (udf_mod_CFLAGS): Likewise. + (udf_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/udf.c. + (grub_emu_SOURCES): Likewise. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * fs/udf.c: New file. + +2008-02-24 Robert Millan + + * conf/i386-efi.rmk (normal/function.c_DEPENDENCIES) + (normal/lexer.c_DEPENDENCIES): New variables. + * conf/i386-ieee1275.rmk (normal/function.c_DEPENDENCIES) + (normal/lexer.c_DEPENDENCIES): Likewise. + * conf/i386-linuxbios.rmk (normal/function.c_DEPENDENCIES) + (normal/lexer.c_DEPENDENCIES): Likewise. + * conf/i386-pc.rmk (normal/function.c_DEPENDENCIES) + (normal/lexer.c_DEPENDENCIES): Likewise. + * conf/powerpc-ieee1275.rmk (normal/function.c_DEPENDENCIES) + (normal/lexer.c_DEPENDENCIES): Likewise. + * conf/sparc64-ieee1275.rmk (normal/function.c_DEPENDENCIES) + (normal/lexer.c_DEPENDENCIES): Likewise. + +2008-02-23 Robert Millan + + * partmap/gpt.c (grub_gpt_magic): Add `0x' qualifier to each member, + since they were intended to be in hex. This didn't break previously + because of a bug in gpt_partition_map_iterate() (see below). + + (gpt_partition_map_iterate): Replace `grub_memcmp' with `! grub_memcmp' + when checking the validity of GPT header. + Remove `partno', since it always provides the same information as `i'. + +2008-02-21 Yoshinori K. Okuji + + * include/grub/efi/time.h: Fix a wrong comment. + +2008-02-19 Pavel Roskin + + * kern/rescue.c (grub_enter_rescue_mode): Improve initial + message. + +2008-02-19 Bean + + * conf/i386-pc.rmk (pkglib_MODULES): Add aout.mod _bsd.mod and bsd.mod. + (aout_mod_SOURCES): New variable. + (aout_mod_CFLAGS): Likewise. + (aout_mod_LDFLAGS): Likewise. + (_bsd_mod_SOURCES): New variable. + (_bsd_mod_CFLAGS): Likewise. + (_bsd_mod_LDFLAGS): Likewise. + (bsd_mod_SOURCES): New variable. + (bsd_mod_CFLAGS): Likewise. + (bsd_mod_LDFLAGS): Likewise. + + * include/grub/aout.h: New file. + + * include/grub/i386/loader.h (grub_unix_real_boot): New function. + + * include/grub/i386/bsd.h: New file. + + * include/grub/i386/pc/init.h (grub_get_mmap_entry): Use EXPORT_FUNC + to make it public. + + * kern/elf.c (grub_elf32_load): Get the physical address after the hook + function is called, so that it's possible to change it inside the hook. + (grub_elf64_load): Likewise. + (grub_elf_file): Don't close the file if elf header is not found. + (grub_elf_close): Close the file if grub_elf_file fails (The new + grub_elf_file won't close it). + (grub_elf32_size): Use NESTED_FUNC_ATTR for nested function calcsize. + (grub_elf64_size): Likewise. + + * kern/i386/loader.S (grub_unix_real_boot): New function. + + * loader/aout.c: New file. + + * loader/i386/bsd.c: New file. + + * loader/i386/bsd_normal.c: New file. + + * loader/i386/pc/multiboot.c (grub_multiboot): Handle a.out format. + + * loader/multiboot2.c (grub_multiboot2): Reset grub_errno so that it + can test other formats. + +2008-02-19 Robert Millan + + * partmap/gpt.c: Include `'. + (grub_gpt_partition_type_empty): Redefine with macro from + `'. + (gpt_partition_map_iterate): Adjust partition type comparison. + + Export `entry' as partmap-specific `part.data' struct. + (grub_gpt_header, grub_gpt_partentry): Move from here ... + + * include/grub/gpt_partition.h (grub_gpt_header) + (grub_gpt_partentry): ... to here (new file). + + * util/i386/pc/grub-setup.c: Include `'. + + (grub_gpt_partition_type_bios_boot): New const variable, defined + with macro from `'. + + (setup): Replace `first_start' with `embed_region', which keeps + track of the embed region (and is partmap-agnostic). + + Replace find_first_partition_start() with find_usable_region(), + which finds a usable region for embedding using partmap-specific + knowledge (supports PC/MSDOS and GPT). + + Fix all assumptions that the embed region start at sector 1, using + `embed_region.start' from now on. Similarly, use `embed_region.end' + rather than `first_start' to calculate available size. + + In grub_util_info() message, replace "into after the MBR" with an + indication of the specific sector our embed region starts at. + +2008-02-19 Robert Millan + + * DISTLIST: Replace `commands/ieee1275/halt.c' and + `commands/ieee1275/reboot.c' with `commands/halt.c' and + `commands/reboot.c'. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES, reboot_mod_SOURCES) + (halt_mod_SOURCES): Likewise. + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES, reboot_mod_SOURCES) + (halt_mod_SOURCES): Likewise. + +2008-02-17 Christian Franke + + * commands/cat.c (grub_cmd_cat): Add break on GRUB_TERM_ESC key. + +2008-02-17 Robert Millan + + * util/i386/pc/grub-setup.c (setup): In find_first_partition_start(), + set `first_start' to 0 for non-PC/MSDOS partition maps. + +2008-02-16 Robert Millan + + * util/i386/pc/grub-setup.c (setup): In find_first_partition_start(), + do not assume partition map is PC/MSDOS before performing checks that + are specific to that layout. + +2008-02-13 Robert Millan + + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Remove + `commands/i386/pc/halt.c' and `commands/i386/pc/reboot.c'. + * kern/i386/linuxbios/init.c (grub_halt, grub_reboot): Remove stubs. + +2008-02-13 Yoshinori K. Okuji + + * configure.ac: Only a cosmetic change on the handling of + -fno-stack-protector. + +2008-02-12 Alexandre Boeglin + + * conf/i386-efi.rmk (grub_emu_SOURCES): Replace + commands/i386/pc/halt.c and reboot.c by commands/halt.c and + reboot.c. + (grub_install_SOURCES): Add halt.mod and reboot.mod. + (halt_mod_SOURCES): New variable. + (halt_mod_CFLAGS): Likewise. + (halt_mod_LDFLAGS): Likewise. + (reboot_mod_SOURCES): Likewise. + (reboot_mod_CFLAGS): Likewise. + (reboot_mod_LDFLAGS): Likewise. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Replace + commands/ieee1275/halt.c and reboot.c by commands/halt.c and + reboot.c. + (halt_mod_SOURCES): Likewise. + (reboot_mod_SOURCES): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Replace + commands/i386/pc/reboot.c by commands/reboot.c. + (reboot_mod_SOURCES): Likewise. + + * commands/i386/pc/reboot.c: merge this file ... + + * commands/ieee1275/reboot.c: ... and this file ... + + * commands/reboot.c: ... to this file. + Add some precompiler directive to include the correct header for + each machine. + + * commands/ieee1275/halt.c: move this file ... + + * commands/halt.c: ... to here. + Add some precompiler directive to include the correct header for + each machine. + + * include/grub/efi/efi.h (grub_reboot): New function declaration. + (grub_halt): Likewise. + + * kern/efi/efi.c (grub_reboot): New function. + (grub_halt): Likewise. + +2008-02-12 Robert Millan + + * util/getroot.c (grub_guess_root_device): Inspect /dev/evms before + /dev (like it is done for /dev/mapper). This doesn't provide support + for EVMS, but at least it is now easy to identify the problem when it + arises. + +2008-02-11 Robert Millan + + * util/biosdisk.c (grub_util_biosdisk_open, linux_find_partition) + (grub_util_biosdisk_get_grub_dev): Check open() exit status by + comparing it with -1, not 0. + +2008-02-10 Robert Millan + + * conf/i386-efi.rmk (grub_emu_SOURCES): Add `disk/raid.c' and + `disk/lvm.c'. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_setup_SOURCES): Likewise. + + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Move `disk/raid.c' and + `disk/lvm.c' to the end of the list. + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + +2008-02-10 Robert Millan + + * kern/main.c (grub_load_normal_mode): Do not reset `grub_errno'. Call + grub_print_error() instead. This will let user know why we're entering + rescue mode. + Based on suggestions from Sam Morris. + +2008-02-10 Alexandre Boeglin + + * normal/arg.c (grub_arg_parse): If one of the args is "--", call add_arg() + on remaining N args, instead of "--" arg N times. + +2008-02-09 Vesa Jaaskelainen + + * font/manager.c (unknown_glyph): Added variable for unknown glyph. + (fill_with_default_glyph): Changed to use unknown_glyph for fill + pattern for unknown glyphs. + +2008-02-09 Robert Millan + + * configure.ac: Probe for `help2man'. + * Makefile.in (builddir): New variable. + (HELP2MAN): Likewise. Set to `true' when @HELP2MAN@ doesn't provide it, + or otherwise add a few flags/options to it. + (install-local): For every executable utility or script that is + installed, invoke $(HELP2MAN) to install a manpage based on --help + output. + + * util/i386/pc/grub-install.in: Move down `update-grub_lib' sourcing, so + that it doesn't prevent --help from working in build tree. + + * util/i386/pc/grub-mkrescue.in (usage): Replace `grub-devel@gnu.org' + with `bug-grub@gnu.org'. + * util/powerpc/ieee1275/grub-mkrescue.in (usage): Likewise. + * util/update-grub.in (usage): New function. + Implement proper argument check, with support for --help and --version + (as well as existing -y). + +2008-02-09 Christian Franke + + * commands/cat.c (grub_cmd_cat): Print '\r' as hex to + avoid overwriting previous output. + * kern/rescue.c (grub_rescue_cmd_cat): Likewise. + +2008-02-09 Robert Millan + + * normal/menu.c (run_menu): If timeout is set to zero, don't bother + drawing the menu. + +2008-02-09 Robert Millan + + * commands/sleep.c: New file. + * conf/common.rmk (pkglib_MODULES): Add `commands/sleep.c'. + (sleep_mod_SOURCES): New variable. + (sleep_mod_CFLAGS): Likewise. + (sleep_mod_LDFLAGS): Likewise. + +2008-02-09 Robert Millan + + * disk/raid.c (grub_raid_scan_device): Add a pair of sanity checks for + situations in which we can deduce the RAID size and the superblock + doesn't match it. + +2008-02-09 Robert Millan + + * disk/lvm.c [GRUB_UTIL] (grub_lvm_memberlist): New function. Construct + and return a grub_diskmemberlist_t composed of LVM physical volumes. + [GRUB_UTIL] (grub_lvm_dev): Add `memberlist' member. + + * disk/raid.c [GRUB_UTIL] (grub_raid_memberlist): New function. Construct + and return a grub_diskmemberlist_t composed of physical array members. + [GRUB_UTIL] (grub_raid_dev): Add `memberlist' member. + + * include/grub/disk.h [GRUB_UTIL] (grub_disk_memberlist): New struct + prototype. + [GRUB_UTIL] (struct grub_disk_dev): Add `memberlist' function pointer. + [GRUB_UTIL] (struct grub_disk_memberlist): New struct declaration. + [GRUB_UTIL] (grub_disk_memberlist_t): New typedef. + + * util/grub-probe.c (probe): Move partmap probing code from here ... + (probe_partmap): ... to here. + (probe): Use probe_partmap() once for the disk we're probing, and + additionally, when such disk contains a memberlist() struct member, + once for each disk that is contained in the structure returned by + memberlist(). + +2008-02-09 Robert Millan + + * util/grub-probe.c (main): When `verbosity > 1', set `debug' + environment variable to 'all' in order to obtain debug output from + non-util/ code. + * util/i386/pc/grub-setup.c (main): Likewise. + +2008-02-08 Robert Millan + + * disk/raid.c (grub_raid_scan_device): Check for + `array->device[sb.this_disk.number]' rather than for + `array->device[sb.this_disk.number]->name', since the latter is not + guaranteed to be accessible. + +2008-02-08 Robert Millan + + * disk/raid.c: Update copyright. + * fs/cpio.c: Likewise. + * include/grub/raid.h: Likewise. + * loader/i386/pc/multiboot.c: Likewise. + * util/hostfs.c: Likewise. + +2008-02-08 Robert Millan + + * include/grub/raid.h (struct grub_raid_array): Change type of `device' + to a grub_disk_t array. + * disk/raid.c (grub_raid_read): Replace `device[x].disk' accesses with + `device[x]'. + (grub_raid_scan_device): Replace `device[x].name' accesses with + `device[x]->name'. Simplify initialization of `array->device[x]'. + +2008-02-08 Robert Millan + + * disk/raid.c (grub_raid_open, grub_raid_scan_device): Add a few + grub_dprintf() calls. + * kern/disk.c (grub_disk_read): Include grub_errmsg in out of range + error message. + +2008-02-07 Christian Franke + + * util/hostfs.c (grub_hostfs_open): Use fseeko and ftello + instead of fseek and ftell to support large files. + (grub_hostfs_read): Likewise. + +2008-02-07 Robert Millan + + Patch from Jeroen Dekkers. + * disk/raid.c (grub_raid_scan_device): Reset `grub_errno' on disk + failure, since successfully reading all array members might not be + required. + +2008-02-06 Robert Millan + + * util/grub-probe.c (probe): Simplify partmap probing (with the + assumption that the first word up to the underscore equals to + the module name). + +2008-02-06 Christian Franke + + * fs/cpio.c (grub_cpio_find_file): Return GRUB_ERR_NONE + (and set *ofs = 0) instead of GRUB_ERR_FILE_NOT_FOUND on + last block of a cpio or tar stream. + Check for "TRAILER!!!" instead of any empty data + block to detect last block of a cpio stream. + (grub_cpio_dir): Fix constness of variable np. + (grub_cpio_open): Return GRUB_ERR_FILE_NOT_FOUND if + cpio or tar trailer is detected. This fixes a crash + on open of a non existing file. + +2008-02-05 Bean + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Get physical + address of entry. + (grub_multiboot_load_elf64): Likewise. + (grub_multiboot): Initialize mbi structure. + + * util/grub-fstest.c: Don't include unused header file script.h. + + * conf/common.rmk (grub-fstest.c_DEPENDENCIES): Move to the beginning + of file. + (grub_fstest_SOURCES): Likewise. + +2008-02-05 Robert Millan + + * include/grub/term.h (GRUB_TERM_LEFT, GRUB_TERM_RIGHT) + (GRUB_TERM_UP, GRUB_TERM_DOWN, GRUB_TERM_HOME, GRUB_TERM_END) + (GRUB_TERM_DC, GRUB_TERM_PPAGE, GRUB_TERM_NPAGE, GRUB_TERM_ESC) + (GRUB_TERM_TAB, GRUB_TERM_BACKSPACE): New macros. + + * kern/i386/pc/startup.S: Include `'. + (translation_table): Replace hardcoded values with macros + provided by `'. + + * term/i386/pc/at_keyboard.c: Include `'. + (keyboard_map): Correct/add a few values, with macros provided + by `'. + (keyboard_map_shift): Zero values that don't differ from their + `keyboard_map' equivalents. + (grub_console_checkkey): Optimize KEYBOARD_STATUS_CAPS_LOCK toggling. + Discard the second scan code that is always sent by Caps lock. + Only use `keyboard_map_shift' when it provides a non-zero value, + otherwise fallback to `keyboard_map'. + +2008-02-04 Bean + + * Makefile.in (enable_grub_fstest): New variable. + + * conf/common.rmk (grub_fstest_init.lst): New rule. + (grub_fstest_init.h): Likewise. + (grub_fstest_init.c): Likewise. + (util/grub-fstest.c_DEPENDENCIES): New variable. + (grub_fstest_SOURCES): Likewise. + + * configure.ac (enable_grub_fstest): Check for --enable-grub-fstest. + + * util/grub-fstest.c: New file. + +2008-02-03 Yoshinori K. Okuji + + Make grub-setup handle a separate root device. + + * util/i386/pc/grub-setup.c (setup): Always open the root device, + so that the root device can be compared with the destination + device. + When embedding the core image, if the root and destination devices + are different, set ROOT_DRIVE to ROOT_DEV->DISK->ID. Otherwise, to + 0xFF. + When not embedding, set ROOT_DRIVE to 0xFF. + +2008-02-03 Yoshinori K. Okuji + + Add support for having a grub directory in a different drive. This + is still only the data handling part. + + * kern/i386/pc/startup.S (multiboot_trampoline): Set %dh to 0xFF. + (codestart): Save %dh in GRUB_ROOT_DRIVE. + (grub_root_drive): New variable. + + * kern/i386/pc/init.c (make_install_device): Use GRUB_ROOT_DRIVE + instead of GRUB_BOOT_DRIVE to construct a device name. Set + GRUB_ROOT_DRIVE to GRUB_BOOT_DRIVE if it is 0xFF, otherwise use it + as it was. + + * include/grub/i386/pc/kernel.h (grub_root_drive): New prototype. + + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_ROOT_DRIVE): New + macro. + (GRUB_BOOT_MACHINE_DRIVE_CHECK): Set to 0x4f. + + * boot/i386/pc/pxeboot.S (_start): Set %dh to 0xFF. For now, this + is bogus, because PXE booting does not specify any drive + correctly. + + * boot/i386/pc/lnxboot.S (reg_edx): Set the second byte to 0xFF. I + am not sure if this is really correct. + + * boot/i386/pc/cdboot.S: Set %dh to 0xFF, because the root drive + is always identical to the boot drive when booting from a CD. + + * boot/i386/pc/boot.S (MOV_MEM_TO_AL): Removed. Not needed any + longer. + (root_drive): New variable. + (real_start): Unconditionally set %dh to ROOT_DRIVE. + (setup_sectors): Push %dx right after popping it, because %dh will + be modified later. + (copy_buffer): Restore %dx. + +2008-02-03 Robert Millan + + * util/i386/pc/grub-mkrescue.in: Rewrite most of image generation to + use `cdboot.img' for cdrom images. + +2008-02-03 Robert Millan + + * util/grub.d/00_header.in: Issue scripting commands for GRUB to + only setup gfxterm when `font' command has succeeded. + +2008-02-03 Robert Millan + + * loader/multiboot_loader.c [GRUB_MACHINE_LINUXBIOS] + (grub_rescue_cmd_multiboot_loader) + (grub_rescue_cmd_module_loader): Enable multiboot1 calls. + +2008-02-03 Pavel Roskin + + * kern/i386/pc/startup.S (grub_chainloader_real_boot): Pop + %edx and %esi from stack only after grub_gate_a20() is called. + grub_gate_a20() clobbers %edx. + +2008-02-03 Yoshinori K. Okuji + + * configure.ac (AC_INIT): Bumped to 1.96. + + * DISTLIST: Added boot/i386/pc/cdboot.S, bus/pci.c, + commands/lspci.c,disk/memdisk.c, include/grub/pci.h, + include/grub/i386/pc/pci.h, video/readers/jpeg.c, and + video/readers/png.c. + +2008-02-03 Bean + + * conf/i386-pc.rmk (pkglib_IMAGES): Add cdboot.img. + (cdboot_img_SOURCES): New variable. + (cdboot_img_ASFLAGS): New variable. + (cdboot_img_LDFLAGS): New variable. + + * boot/i386/pc/cdboot.S: New file. + + * disk/i386/pc/biosdisk.c (cd_start): New variable. + (cd_count): Likewise. + (grub_biosdisk_get_drive): Add support for cd device. + (grub_biosdisk_call_hook): Likewise. + (grub_biosdisk_iterate): Likewise. + (grub_biosdisk_open): Likewise. + (GRUB_BIOSDISK_CDROM_RETRY_COUNT): New macro. + (grub_biosdisk_rw): Support reading from cd device. + (GRUB_MOD_INIT): Iterate cd devices. + + * include/grub/i386/pc/biosdisk.h (GRUB_BIOSDISK_FLAG_CDROM): New macro. + (GRUB_BIOSDISK_MACHINE_CDROM_START): Likewise. + (GRUB_BIOSDISK_MACHINE_CDROM_END): Likewise. + + * kern/i386/pc/init.c (make_install_device): Check for cd device. + +2008-02-02 Robert Millan + + * commands/read.c: New file. + * conf/common.rmk (pkglib_MODULES): Add `commands/read.c'. + (read_mod_SOURCES): New variable. + (read_mod_CFLAGS): Likewise. + (read_mod_LDFLAGS): Likewise. + +2008-02-02 Robert Millan + + * normal/main.c (grub_normal_execute): Check for `menu->size' when + determining whether menu has to be displayed. + +2008-02-02 Marco Gerards + + * bus/pci.c: New file. + + * include/grub/pci.h: Likewise. + + * include/grub/i386/pc/pci.h: Likewise. + + * commands/lspci.c: Likewise. + + * conf/i386-pc.rmk (pkglib_MODULES): Add `pci.mod' and + `lspci.mod'. + (pci_mod_SOURCES): New variable. + (pci_mod_CFLAGS): Likewise. + (pci_mod_LDFLAGS): Likewise. + (lspci_mod_SOURCES): Likewise. + (lspci_mod_CFLAGS): Likewise. + (lspci_mod_LDFLAGS): Likewise. + +2008-02-02 Bean + + * fs/ufs.c (INODE_BLKSZ): Fix incorrect value. + (grub_ufs_get_file_block): Fix indirect block calculation problem. + + * fs/xfs.c (grub_xfs_sblock): New member log2_dirblk. + (grub_xfs_btree_node): New structure. + (grub_xfs_btree_root): New structure. + (grub_xfs_inode): New members nblocks, extsize, nextents and btree. + (GRUB_XFS_EXTENT_OFFSET): Use exts instead of inode->data.extents. + (GRUB_XFS_EXTENT_BLOCK): Likewise. + (GRUB_XFS_EXTENT_SIZE): Likewise. + (grub_xfs_read_block): Support btree format type. + (grub_xfs_iterate_dir): Use NESTED_FUNC_ATTR in call_hook. + Use directory block as basic unit. + + * fs/fshelp.c (grub_fshelp_read_file): Bug fix for sparse block. + + * aclocal.m4 (grub_i386_CHECK_REGPARM_BUG): Define NESTED_FUNC_ATTR as + __attribute__ ((__regparm__ (1))). + +2008-02-01 Robert Millan + + Correct a mistake in previous commit. + + * conf/i386-pc.rmk (normal/execute.c_DEPENDENCIES): Move to the + top. + (normal/command.c_DEPENDENCIES): New variable. + +2008-02-01 Robert Millan + + * conf/i386-efi.rmk (normal/execute.c_DEPENDENCIES): Move to the + top. + (normal/command.c_DEPENDENCIES): New variable. + (grub-emu_DEPENDENCIES, normal_mod_DEPENDENCIES): Remove variables. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-linuxbios.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + (grub_emu_SOURCES): Add `fs/fshelp.c'. + + * genmk.rb: Add `$(#{src}_DEPENDENCIES)' in targets that require it. + +2008-02-01 Robert Millan + + * kern/disk.c (grub_disk_read, grub_disk_write): Add grub_dprintf() + call at beginning of function. + +2008-01-31 Pavel Roskin + + * util/powerpc/ieee1275/grub-mkrescue.in: New file. + * conf/powerpc-ieee1275.rmk (bin_SCRIPTS): New variable. + (grub_mkrescue_SOURCES): Likewise. + * DISTLIST: Add util/powerpc/ieee1275/grub-mkrescue.in. + +2008-01-30 Robert Millan + + * conf/i386-pc.rmk (sbin_UTILITIES): Remove `grub-probe'. + (util/grub-probe.c_DEPENDENCIES, grub_probe_SOURCES): Moved from here ... + * conf/common.rmk (util/grub-probe.c_DEPENDENCIES) + (grub_probe_SOURCES): ... to here. + + * conf/i386-efi.rmk (sbin_UTILITIES): Remove `grub-probe'. + (util/grub-probe.c_DEPENDENCIES, grub_probe_SOURCES): Remove. + * conf/i386-ieee1275.rmk: Likewise. + * conf/i386-linuxbios.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + +2008-01-30 Tristan Gingold + + * kern/rescue.c: Silently accept empty lines. + +2008-01-29 Bean + + * boot/i386/pc/lnxboot.S (data_start): Code cleanup. + (real_code_2): Code cleanup and change comment style. + (move_memory): Avoid using 32-bit address mode. + +2008-01-29 Bean + + * conf/i386-pc.rmk (pkglib_MODULES): Add `png.mod'. + (png_mod_SOURCES): New variable. + (png_mod_CFLAGS): Likewise. + (png_mod_LDFLAGS): Likewise. + + * video/readers/png.c: New file. + +2008-01-28 Robert Millan + + * include/grub/i386/linuxbios/kernel.h (GRUB_MOD_GAP): New macro. + * kern/powerpc/ieee1275/init.c (grub_arch_modules_addr): Remove + `ifndef GRUB_MOD_GAP' hack. + * util/elf/grub-mkimage.c (add_segments): Likewise. + +2008-01-27 Robert Millan + + * kern/powerpc/ieee1275/init.c (grub_arch_modules_addr): Skip + `GRUB_MOD_GAP' for platforms in which it's not defined. + * util/elf/grub-mkimage.c (add_segments): Likewise. + +2008-01-27 Robert Millan + + Get grub-emu to build again (including parallel builds). + + * conf/i386-pc.rmk (util/grub-emu.c_DEPENDENCIES): Remove variable. + Split into ... + (util/grub-emu.c_DEPENDENCIES): ... this, ... + (normal/execute.c_DEPENDENCIES): ... this, ... + (grub-emu_DEPENDENCIES): ... and this. + + * conf/i386-efi.rmk: Likewise. + * conf/i386-linuxbios.rmk: Likewise. + * conf/i386-ieee1275.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + (grub_emu_SOURCES): Remove duplicated `kern/file.c'. + +2008-01-27 Robert Millan + + * NEWS: Add a few items. + +2008-01-27 Robert Millan + + Fix parallel builds with grub-emu. Based on earlier commit for + grub-probe and grub-setup. + + * conf/i386-pc.rmk (grub-emu_DEPENDENCIES): Renamed to ... + (util/grub-emu.c_DEPENDENCIES): ... this. + * conf/i386-efi.rmk (grub-emu_DEPENDENCIES): Renamed to ... + (util/grub-emu.c_DEPENDENCIES): ... this. + * conf/i386-linuxbios.rmk (grub-emu_DEPENDENCIES): Renamed to ... + (util/grub-emu.c_DEPENDENCIES): ... this. + * conf/i386-ieee1275.rmk (grub-emu_DEPENDENCIES): Renamed to ... + (util/grub-emu.c_DEPENDENCIES): ... this. + * conf/powerpc-ieee1275.rmk (grub-emu_DEPENDENCIES): Renamed to ... + (util/grub-emu.c_DEPENDENCIES): ... this. + +2008-01-27 Pavel Roskin + + * include/grub/powerpc/ieee1275/kernel.h: Introduce GRUB_MOD_GAP + to create a gap between _end and the modules added to the image + with grub-mkrescue. That fixes "CLAIM failed" on PowerMAC. + * kern/powerpc/ieee1275/init.c: Use GRUB_MOD_GAP. + * util/elf/grub-mkimage.c (add_segments): Likewise. + +2008-01-26 Pavel Roskin + + * kern/dl.c (grub_dl_load): Don't abort if prefix is not set, + just return an error. + +2008-01-26 Bean + + * fs/reiserfs.c (grub_fshelp_node): New member next_offset. + (grub_reiserfs_get_item): Save offset of the next item. + (grub_reiserfs_iterate_dir): Use next_offset to find next item. + +2008-01-25 Robert Millan + + * conf/i386-pc.rmk (grub_setup_SOURCES, grub_emu_SOURCES): Regroup to + make all filesystem sources appear together (possibly fixing omissions + while at it). + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise. + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-pc.rmk (grub_probe_SOURCES): Likewise. Additionally, + add `kern/file.c'. + * conf/i386-efi.rmk (grub_probe_SOURCES): Likewise. + * conf/i386-ieee1275.rmk (grub_probe_SOURCES): Likewise. + * conf/i386-linuxbios.rmk (grub_probe_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_probe_SOURCES): Likewise. + + * util/grub-probe.c: Include `' and `'. + (probe): Add a sanity check to make sure of our ability to read + requested files when probing for filesystem type. + + * genmk.rb: Update copyright year (2007). + + * include/grub/fs.h (grub_fat_init, grub_fat_fini, grub_ext2_init) + (grub_ext2_fini, grub_ufs_init, grub_ufs_fini, grub_minix_init) + (grub_minix_fini, grub_hfs_init, grub_hfs_fini, grub_jfs_init) + (grub_jfs_fini, grub_xfs_init, grub_xfs_fini, grub_affs_init) + (grub_affs_fini, grub_sfs_init, grub_sfs_fini, grub_iso9660_init) + : Remove function prototypes. + +2008-01-25 Robert Millan + + Revert my previous commits (based on wrong assumption of how grub_errno + works). + + * kern/disk.c (grub_disk_open): Stop resetting grub_errno. + * kern/file.c (grub_file_open): Likewise. + +2008-01-24 Pavel Roskin + + * include/grub/ieee1275/ieee1275.h: Introduce flag for firmwares + that hang if GRUB tries to setup colors. + * term/ieee1275/ofconsole.c (grub_ofconsole_init): Don't set + colors for firmwares that don't support it. + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_set_flag): + Recognize Open Hack'Ware, set flags to work around its + limitations. + +2008-01-24 Robert Millan + + * kern/file.c (grub_file_open): Do not account previous failures of + unrelated functions when grub_errno is checked for. + Reported by Oleg Strikov. + +2008-01-24 Bean + + * fs/ufs.c (GRUB_UFS_VOLNAME_LEN): New macro. + (grub_ufs_sblock): New member volume name. + (grub_ufs_find_file): Fix string copy bug. + (grub_ufs_label): Implement this function properly. + + * fs/hfs.c (grub_hfs_cnid_type): New enum. + (grub_hfs_iterate_records): Use the correct file number for extents + and catalog file. Fix problem in next index calculation. + (grub_hfs_find_node): Replace recursive function call with loop. + (grub_hfs_iterate_dir): Replace recursive function call with loop. + +2008-01-23 Robert Millan + + * include/grub/i386/ieee1275/loader.h: Include `', + `' and `'. + (grub_multiboot2_real_boot): New function prototype. + + * include/grub/i386/pc/memory.h: Include `'. + [!GRUB_MACHINE_IEEE1275] (grub_lower_mem, grub_upper_mem): Disable. + + * kern/i386/ieee1275/init.c (grub_os_area_addr) + (grub_os_area_size, grub_lower_mem, grub_upper_mem): Remove variables. + +2008-01-23 Robert Millan + + * kern/mm.c (grub_mm_init_region): Replace grub_dprintf() call with + #ifdef'ed out grub_printf(). + +2008-01-23 Robert Millan + + * term/i386/pc/at_keyboard.c (grub_keyboard_isr): #ifdef out + grub_dprintf calls, since they make "debug=all" mode unusable. + (grub_console_checkkey): Likewise. + +2008-01-23 Robert Millan + + * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Add + `term/i386/pc/at_keyboard.c'. + (pkglib_MODULES): Add `serial.mod'. + (serial_mod_SOURCES): New variable. + (serial_mod_CFLAGS): Likewise. + (serial_mod_LDFLAGS): Likewise. + + * include/grub/i386/ieee1275/console.h: Add `'. Remove + `'. + (grub_keyboard_controller_init): New function prototype. + (grub_console_checkkey): Likewise. + (grub_console_getkey): Likewise. + + * kern/powerpc/ieee1275/init.c (grub_machine_init): Initialize AT + keyboard on i386. + + * term/ieee1275/ofconsole.c (grub_ofconsole_term): On i386, use + grub_ofconsole_checkkey() and grub_ofconsole_getkey() for input. + +2008-01-23 Robert Millan + + * kern/i386/pc/init.c (make_install_device): When memdisk image is + present, "(memdisk)/boot/grub" becomes the default prefix. + + * util/i386/pc/grub-mkrescue.in: Switch to a minimal core.img plus + a memdisk tarball with all the modules. Add --overlay=DIR option that + allows users to overlay additional files into the image. + +2008-01-23 Robert Millan + + * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Add `machine/loader.h' + and `machine/memory.h'. + (pkglib_MODULES): Add `multiboot.mod' and `_multiboot.mod'. + (_multiboot_mod_SOURCES): New variable. + (_multiboot_mod_CFLAGS): Likewise. + (_multiboot_mod_LDFLAGS): Likewise. + (multiboot_mod_SOURCES): Likewise. + (multiboot_mod_CFLAGS): Likewise. + (multiboot_mod_LDFLAGS): Likewise. + + * include/grub/i386/ieee1275/loader.h: New file. + + * include/grub/i386/ieee1275/machine.h: Likewise. + + * include/grub/i386/ieee1275/memory.h: Likewise. + + * include/grub/i386/pc/init.h (grub_os_area_addr): Remove (redundant) + variable declaration. + (grub_os_area_size): Likewise. + + * kern/i386/ieee1275/init.c (grub_os_area_addr, grub_os_area_size) + (grub_lower_mem, grub_upper_mem): New variables. + (grub_stop_floppy): New function (just to make + grub_multiboot2_real_boot() happy). + + * kern/i386/ieee1275/startup.S: Include `', + `', `' and `'. + (grub_stop): New function. + Include `"../realmode.S"' and `"../loader.S"'. + + * loader/multiboot_loader.c: Include `'. + Replace `__i386__' #ifdefs with `GRUB_MACHINE_PCBIOS'. + + * loader/powerpc/ieee1275/multiboot2.c (grub_mb2_arch_boot): On i386, + rely on grub_multiboot2_real_boot() for final boot. + +2008-01-22 Robert Millan + + * disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): When + `GRUB_IEEE1275_FLAG_OFDISK_SDCARD_ONLY' flag is set, skip any + device that doesn't look like an SD card. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): Add + `GRUB_IEEE1275_FLAG_OFDISK_SDCARD_ONLY' flag. + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_set_flag): Detect + OLPC laptop, and set `GRUB_IEEE1275_FLAG_OFDISK_SDCARD_ONLY' when + found. + +2008-01-22 Robert Millan + + * kern/powerpc/ieee1275/init.c (grub_claim_heap): Add sanity check to + avoid claiming over our own code. + +2008-01-22 Bean + + * conf/i386-pc.rmk (pkglib_MODULES): Add `jpeg.mod'. + (jpeg_mod_SOURCES): New variable. + (jpeg_mod_CFLAGS): Likewise. + (jpeg_mod_LDFLAGS): Likewise. + + * video/readers/jpeg.c : New file. + +2008-01-22 Bean + + * fs/cpio.c (grub_cpio_find_file): Return GRUB_ERR_FILE_NOT_FOUND when + there are no more items. + +2008-01-21 Robert Millan + + * kern/mm.c (grub_mm_init_region): Improve debug message. + +2008-01-21 Robert Millan + + * conf/i386-pc.rmk (GRUB_MEMORY_MACHINE_LINK_ADDR): New variable. + (kernel_img_LDFLAGS): Use `GRUB_MEMORY_MACHINE_LINK_ADDR' as link + address. + (grub_mkimage_CFLAGS): Propagate `GRUB_MEMORY_MACHINE_LINK_ADDR' as + a C macro. + * include/grub/i386/pc/memory.h (GRUB_MEMORY_MACHINE_UPPER): New macro. + Indicates start of upper memory. + * util/i386/pc/grub-mkimage.c: Include `'. + (generate_image): Abort when image size is big enough to corrupt + upper memory. + + * include/grub/i386/pc/vga.h: Include `'. + (GRUB_MEMORY_MACHINE_VGA_ADDR): Alias for `GRUB_MEMORY_MACHINE_UPPER'. + * term/i386/pc/vga.c (VGA_MEM): Use `GRUB_MEMORY_MACHINE_VGA_ADDR' + instead of hardcoding 0xA0000. + * video/i386/pc/vbe.c: Include `'. + (grub_vbe_set_video_mode): Use `GRUB_MEMORY_MACHINE_VGA_ADDR' + instead of hardcoding 0xA0000. + +2008-01-21 Robert Millan + + * disk/memdisk.c (memdisk_size): New variable. + (grub_memdisk_open): Replace grub_arch_memdisk_size() call with + `memdisk_size'. + (grub_memdisk_init): Initialize `memdisk_size'. Reallocate memdisk + image to dynamic memory. + (grub_memdisk_fini): Replace grub_arch_memdisk_size() call with + `memdisk_size'. Free memdisk block. + +2008-01-21 Robert Millan + + Fix detection of very small filesystems (like tar). + + * fs/reiserfs.c (grub_reiserfs_mount): When disk is too small to + contain a ReiserFS, abort with GRUB_ERR_BAD_FS rather than + GRUB_ERR_OUT_OF_RANGE (which made the upper layer think there's + a problem with this disk). + +2008-01-21 Robert Millan + + * disk/i386/pc/biosdisk.c (grub_biosdisk_iterate): Add debug message + on grub_biosdisk_rw_standard() error. + +2008-01-21 Robert Millan + + * include/grub/ieee1275/ieee1275.h: Add 2008 to Copyright line for + recent changes. + * kern/elf.c: Likewise. + * kern/ieee1275/ieee1275.c: Likewise. + * kern/powerpc/ieee1275/openfw.c: Likewise. + * term/ieee1275/ofconsole.c: Likewise. + +2008-01-21 Robert Millan + + * include/grub/i386/pc/kernel.h: Include `'. + + * include/grub/kernel.h (grub_arch_memdisk_addr) + (grub_arch_memdisk_size): Moved from here ... + + * include/grub/i386/pc/kernel.h (grub_arch_memdisk_addr) + (grub_arch_memdisk_size): ... to here. + +2008-01-21 Robert Millan + + Mostly based on bugfix from Bean. + + * kern/elf.c (grub_elf32_phdr_iterate): Use `NESTED_FUNC_ATTR' + attribute with hook() parameter. + (grub_elf32_load): Use `NESTED_FUNC_ATTR' with grub_elf32_load_segment() + declaration. + (grub_elf64_phdr_iterate): Use `NESTED_FUNC_ATTR' + attribute with hook() parameter. + (grub_elf64_load): Use `NESTED_FUNC_ATTR' with grub_elf64_load_segment() + declaration. + +2008-01-21 Robert Millan + + * conf/i386-pc.rmk (kernel_img_HEADERS): Add `machine/kernel.h'. + (pkglib_MODULES): Add `memdisk.mod'. + (memdisk_mod_SOURCES): New variable. + (memdisk_mod_CFLAGS): Likewise. + (memdisk_mod_LDFLAGS): Likewise. + + * disk/memdisk.c: New file. + + * include/grub/disk.h (grub_disk_dev_id): Add + `GRUB_DISK_DEVICE_MEMDISK_ID'. + + * include/grub/i386/pc/kernel.h + (GRUB_KERNEL_MACHINE_MEMDISK_IMAGE_SIZE): New macro. + (GRUB_KERNEL_MACHINE_PREFIX): Increment by 4. + (grub_kernel_image_size): New variable declaration. + (grub_total_module_size): Likewise. + (grub_memdisk_image_size): Likewise. + + * include/grub/i386/pc/memory.h + (GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR): New macro. + + * include/grub/kernel.h: Include `'. + (grub_arch_memdisk_addr): New variable declaration. + (grub_arch_memdisk_size): Likewise. + + * kern/i386/pc/init.c (grub_arch_memdisk_addr): New function. + (grub_arch_memdisk_size): Likewise. + + * kern/i386/pc/startup.S (grub_memdisk_image_size): New variable. + (codestart): Replace hardcoded `0x100000' with + `GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR' macro. + + * util/i386/pc/grub-mkimage.c: Include `'. + (generate_image): Add `memdisk_path' parameter. When `memdisk_path' is + not NULL, append the contents of the file it refers to, at the end of + the compressed kernel image. Initialize `grub_memdisk_image_size' + variable (at `GRUB_KERNEL_MACHINE_MEMDISK_IMAGE_SIZE' offset). + (options): Add "memdisk"|'m' option. + (main): Parse --memdisk|-m option, and pass user-provided path as + parameter to generate_image(). + +2008-01-20 Robert Millan + + * kern/sparc64/ieee1275/openfw.c (grub_devalias_iterate): Copy debug + grub_dprintf() calls from here ... + * kern/powerpc/ieee1275/openfw.c (grub_devalias_iterate): ... to here. + +2008-01-20 Robert Millan + + Fix detection of "real mode" when /options/real-mode? doesn't exist. + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_mmu): New variable + declaration. + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_mmu): New variable. + (grub_ieee1275_find_options): If `grub_ieee1275_mmu' is 0, set + `GRUB_IEEE1275_FLAG_REAL_MODE'. + (cmain): Initialize `grub_ieee1275_mmu' (using /chosen/mmu integer + property). + * kern/powerpc/ieee1275/openfw.c (grub_map): Rely on pre-initialized + `grub_ieee1275_mmu' rather than obtaining a handler on every call. + +2008-01-19 Robert Millan + + Get rid of confusing function (superseded by + `grub_ieee1275_get_integer_property') + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_decode_int_4): Remove + prototype. + * kern/ieee1275/ieee1275.c (grub_ieee1275_decode_int_4): Remove + function. + * term/ieee1275/ofconsole.c (grub_ofconsole_init): Avoid use of + grub_ieee1275_decode_int_4(), by obtaining integer properties directly + in native endianness from grub_ieee1275_get_integer_property(). + +2008-01-19 Robert Millan + + * kern/powerpc/ieee1275/openfw.c (grub_halt): Issue "power-off" + command after "shut-down", since implementations differ on which + the command for halt is. + +2008-01-19 Robert Millan + + * include/grub/i386/linuxbios/console.h: Add header protection. + (grub_keyboard_controller_init): New function prototype. + * term/i386/pc/at_keyboard.c (KEYBOARD_COMMAND_ISREADY): New macro. + (KEYBOARD_COMMAND_READ): Likewise. + (KEYBOARD_COMMAND_WRITE): Likewise. + (KEYBOARD_SCANCODE_SET1): Likewise. + (grub_keyboard_controller_write): New function. + (grub_keyboard_controller_read): Likewise. + (grub_keyboard_controller_init): Likewise. + + * term/i386/pc/console.c: Include `'. + (grub_console_init): On coreboot/LinuxBIOS, call + grub_keyboard_controller_init(). + +2008-01-19 Robert Millan + + PowerPC changes provided by Pavel Roskin. + + * kern/powerpc/ieee1275/cmain.c (cmain): Don't take any arguments. + * kern/powerpc/ieee1275/crt0.S: Store r5 in grub_ieee1275_entry_fn, + don't rely on cmain() doing it. + * kern/i386/ieee1275/startup.S (_start): Store %eax in + grub_ieee1275_entry_fn, don't rely on cmain() doing it. + +2008-01-16 Robert Millan + + * include/grub/i386/linuxbios/memory.h + (GRUB_MEMORY_MACHINE_LINUXBIOS_TABLE_ADDR): Remove macro. + * kern/i386/linuxbios/table.c (grub_linuxbios_table_iterate): Do not + receive `table_header' as argument. Instead, probe for it in the + known memory ranges where it can be present. + (grub_available_iterate): Do not pass a fixed `table_header' address + to grub_linuxbios_table_iterate(). + +2008-01-15 Robert Millan + + * configure.ac: Add `i386-ieee1275' to the list of supported targets. + * conf/i386-ieee1275.rmk: New file. + * include/grub/i386/ieee1275/console.h: Likewise. + * include/grub/i386/ieee1275/ieee1275.h: Likewise. + * include/grub/i386/ieee1275/kernel.h: Likewise. + * include/grub/i386/ieee1275/time.h: Likewise. + * kern/i386/ieee1275/init.c: Likewise. + * kern/i386/ieee1275/startup.S: Likewise. + +2008-01-15 Robert Millan + + * kern/misc.c (grub_vsprintf): Do not reset `longlongfmt' to zero + when pointers are 32-bit (but still do set it to one when they are + 64-bit). + +2008-01-15 Robert Millan + + * include/grub/ieee1275/ieee1275.h + (grub_ieee1275_get_integer_property): New function prototype. + + * kern/ieee1275/ieee1275.c: Include `'. + (grub_ieee1275_get_integer_property): New function. Wraps around + grub_ieee1275_get_property() to handle endianness. + + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): Replace + grub_ieee1275_get_property() with grub_ieee1275_get_integer_property() + where appropriate. + * kern/powerpc/ieee1275/openfw.c (grub_available_iterate): Likewise. + (grub_map): Likewise. + * kern/sparc64/ieee1275/openfw.c (grub_map): Likewise. + +2008-01-15 Bean + + * normal/execute.c (grub_script_exec_argument_to_string): Check for undefined variable. + (grub_script_execute_cmdline): Reset grub_errno. + + * normal/main.c (read_config_file): Reset grub_errno. + + * normal/parse.y (script_init): New. + (script): Move function and menuentry here. + (delimiter): New. + (command): Add delimiter at the end of command. + (commands): Adjust to match the new command. + (commandblock): Remove grub_script_lexer_record_start. + (menuentry): Add grub_script_lexer_record_start, use the new commands. + (if): Use the new commands. + + * conf/common.rmk (pkgdata_MODULES): Add echo.mod. + +2008-01-15 Robert Millan + + * normal/menu.c (run_menu): Move timeout message from here ... + (print_timeout): ... to here. + (run_menu): Use print_timeout() once during initial draw to print + the whole message, and again in every clock tick to update only + the number of seconds. + +2008-01-15 Robert Millan + + * kern/powerpc/ieee1275/openfw.c (grub_available_iterate): Obtain + actual size of `available' from grub_ieee1275_get_property(), and + restrict parsing to that bound. + +2008-01-15 Christian Franke + + * util/grub-emu.c: Replace by . + (argp_program_version): Remove variable. + (argp_program_bug_address): Likewise. + (options): Convert from struct argp_option to struct option. + (struct arguments): Remove. + (parse_opt): Remove. + (usage): New function. + (main): Replace struct args members by simple variables. + Replace argp_parse() by getopt_long(). + Add switch to evaluate options. + Add missing "(...)" around root_dev in prefix string. + +2008-01-14 Robert Millan + + * kern/powerpc/ieee1275/init.c (grub_exit): Reimplement as a wrapper + for grub_ieee1275_exit(), in order to improve portability. + +2008-01-14 Robert Millan + + * util/grub.d/10_linux.in (prefix): Define. + (exec_prefix): Likewise. Both definitions are later used by `libdir'. + +2008-01-13 Pavel Roskin + + * disk/ieee1275/ofdisk.c (grub_ofdisk_open): Don't use + grub_errno if no errors have been detected. + +2008-01-12 Robert Millan + + * include/grub/util/getroot.h (grub_dev_abstraction_types): New enum. + (grub_util_get_dev_abstraction): New function prototype. + + * util/getroot.c: Include `' + (grub_util_get_grub_dev): Move detection of abstraction type to ... + (grub_util_get_dev_abstraction): ... here (new function). + + * util/grub-probe.c: Convert PRINT_* to an enum. Add + `PRINT_ABSTRACTION'. + (probe): Probe for abstraction type when requested. + (main): Understand `--target=abstraction'. + + * util/i386/efi/grub-install.in: Add abstraction module to core + image when it is found to be necessary. + * util/i386/pc/grub-install.in: Likewise. + * util/powerpc/ieee1275/grub-install.in: Likewise. + + * util/update-grub_lib.in (font_path): Return system path without + converting to GRUB path. + * util/update-grub.in: Convert system path returned by font_path() + to a GRUB path. Use `grub-probe -t abstraction' to determine what + abstraction module is needed for loading fonts (if any). Export + that as `GRUB_PRELOAD_MODULES'. + * util/grub.d/00_header.in: Process `GRUB_PRELOAD_MODULES' (print + insmod commands). + +2008-01-12 Yoshinori K. Okuji + + Remove some unused code from reiserfs. + + * fs/reiserfs.c (struct grub_reiserfs_key) + [GRUB_REISERFS_KEYV2_BITFIELD]: Removed offset and type. + (struct grub_reiserfs_node_body): Removed. + (grub_reiserfs_get_key_v2_type) [GRUB_REISERFS_KEYV2_BITFIELD]: + Likewise. + (grub_reiserfs_get_key_offset) [GRUB_REISERFS_KEYV2_BITFIELD]: + Likewise. + (grub_reiserfs_set_key_offset) [GRUB_REISERFS_KEYV2_BITFIELD]: + Likewise. + (grub_reiserfs_set_key_offset) [GRUB_REISERFS_KEYV2_BITFIELD]: + Likewise. + (grub_reiserfs_set_key_type) [GRUB_REISERFS_KEYV2_BITFIELD]: + Likewise. + (grub_reiserfs_iterate_dir) [GRUB_REISERFS_KEYV2_BITFIELD]: + Likewise. + (grub_reiserfs_open) [GRUB_REISERFS_KEYV2_BITFIELD]: Likewise. + (grub_reiserfs_read) [GRUB_REISERFS_KEYV2_BITFIELD]: Likewise. + (grub_reiserfs_dir) [GRUB_REISERFS_KEYV2_BITFIELD]: Likewise. + +2008-01-10 Robert Millan + + * util/update-grub_lib.in (grub_file_is_not_garbage): New function. + Determines if a file is garbage left by packaging systems, etc. + * util/update-grub.in: Use grub_file_is_not_garbage() as a condition + for processing /etc/grub.d scripts. + * util/grub.d/10_hurd.in: Fix `GRUB_DISTRIBUTOR' comparison. + * util/grub.d/10_linux.in: Likewise. Use grub_file_is_not_garbage() + as a condition for processing Linux images. + +2008-01-10 Pavel Roskin + + * include/grub/powerpc/libgcc.h (__ucmpdi2): New export. Needed + to compile reiserfs.c on PowerPC. + +2008-01-10 Robert Millan + + * kern/device.c (grub_device_iterate): Do not abort device iteration + when one of the devices cannot be opened. + * kern/disk.c (grub_disk_open): Do not account previous failures of + unrelated functions when grub_errno is checked for. + +2008-01-08 Robert Millan + + * loader/i386/pc/linux.c (grub_rescue_cmd_linux): For + `! grub_linux_is_bzimage', change order of address comparison to make + it more intuitive, and improve "too big zImage" error message. + +2008-01-08 Robert Millan + + * Makefile.in (uninstall): Handle `$(update-grub_SCRIPTS)' and + `$(update-grub_DATA)'. + (distcheck): Fix race condition when invoking `$(MAKE)' on multiple + targets. + +2008-01-07 Robert Millan + + * boot/i386/pc/boot.S (boot_drive_check): Add a comment indicating + which instruction is modified by grub-setup during installation + (since it wasn't obvious by only looking at this file). + +2008-01-07 Robert Millan + + * TODO: Rewrite. Just refer to the wiki and the BTS instead of + listing actual TODO items. + +2008-01-06 Yoshinori K. Okuji + + * fs/reiserfs.c (grub_reiserfs_get_key_v2_type): Handle endianness + correctly. + (grub_reiserfs_get_key_offset): Likewise. + (grub_reiserfs_set_key_offset): Likewise. + (grub_reiserfs_set_key_type): Likewise. + (grub_reiserfs_iterate_dir): Return 1 if found, otherwise 0. + + (GRUB_REISERFS_KEYV2_BITFIELD): Undefined. Probably it would be + better to remove the bitfield version completely. + +2008-01-06 Yoshinori K. Okuji + + * fs/reiserfs.c (grub_reiserfs_iterate_dir): ENTRY_ITEM must be + allocated from the heap, due to the fshelp implementation. + (grub_reiserfs_dir): Free NODE, due to the same reason. + +2008-01-06 Yoshinori K. Okuji + + Mostly from Vincent Pelletier: + + * fs/reiserfs.c: New file. + + * conf/common.rmk (pkglib_MODULES): Added reiserfs.mod. + (reiserfs_mod_SOURCES): New variable. + (reiserfs_mod_CFLAGS): Likewise. + (reiserfs_mod_LDFLAGS): Likewise. + + * DISTLIST: Added boot/i386/pc/lnxboot.S, commands/hexdump.c, + disk/ata.c, fs/cpio.c, fs/ntfscomp.c, fs/reiserfs.c, + include/grub/ntfs.h, include/grub/i386/pc/machine.h, and + normal/color.c. + +2008-01-06 Robert Millan + + * normal/color.c: Remove `'. + +2008-01-05 Jeroen Dekkers + + * include/grub/normal.h: Include . + +2008-01-05 Robert Millan + + * util/i386/pc/grub-setup.c (usage): Replace obsolete `(hd0,0)' in + usage example with `(hd0,1)'. + Reported by Samuel Thibault. + +2008-01-05 Robert Millan + + * kern/i386/loader.S (grub_linux_is_bzimage): New variable. + (grub_linux_boot_zimage): Rename to ... + (grub_linux_boot): ... this. + (grub_linux_boot_bzimage): Merge with `grub_linux_boot_zimage'. + (grub_linux_boot_zimage): Conditionalize zImage copy. + + * include/grub/i386/loader.h (grub_linux_is_bzimage): Add prototype. + (grub_linux_boot_bzimage): Remove prototype. + (grub_linux_boot_zimage): Rename to ... + (grub_linux_boot): ... this. + + * loader/i386/pc/linux.c (big_linux): Replace with `grub_linux_is_bzimage'. + (grub_linux_boot): Remove function. + +2008-01-05 Robert Millan + + * include/grub/normal.h (grub_env_write_color_normal): New prototype. + (grub_env_write_color_highlight): Likewise. + (grub_wait_after_message): Likewise. + + * normal/color.c: New file. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `normal/color.c'. + (normal_mod_DEPENDENCIES): Likewise. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Add `normal/color.c'. + (normal_mod_DEPENDENCIES): Likewise. + + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Add `normal/color.c'. + (normal_mod_DEPENDENCIES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add `normal/color.c'. + (normal_mod_DEPENDENCIES): Likewise. + + * normal/menu_entry.c (run): Rely on grub_wait_after_message() + for waiting after a message is printed. + * normal/main.c (read_config_file): Likewise. + (grub_normal_init): Register grub_env_write_color_normal() and + grub_env_write_color_highlight() hooks. Mark `color_normal' and + `color_highlight' variables as global. + + * normal/menu.c (grub_wait_after_message): New function. + (grub_color_menu_normal): New variable. Replaces ... + (GRUB_COLOR_MENU_NORMAL): ... this macro. + (grub_color_menu_highlight): New variable. Replaces ... + (GRUB_COLOR_MENU_HIGHLIGHT): ... this macro. + (draw_border): Set color state to `GRUB_TERM_COLOR_NORMAL' instead of + `GRUB_TERM_COLOR_STANDARD'. + (print_message): Use `grub_setcolorstate' to reload colors. Rename + `normal_code' and `highlight_code' to `old_color_normal' and + `old_color_highlight', respectively. + (grub_menu_init_page): Update colors when drawing the menu, based on + `menu_color_normal' and `menu_color_highlight' variables. + (grub_menu_run): Rely on grub_wait_after_message() for waiting after + a message is printed. + +2008-01-05 Robert Millan + + * kern/env.c (grub_env_context_open): Propagate hooks for global + variables to new context. + + * kern/main.c (grub_set_root_dev): Export `root' variable. + +2008-01-05 Robert Millan + + * util/biosdisk.c (get_os_disk): Check for devfs-style IDE and SCSI + discs unconditionally, since udev and others have options to provide + them. + +2008-01-05 Robert Millan + + * normal/completion.c (iterate_dir): Skip `.' and `..' directories. + +2008-01-04 Christian Franke + + * kern/i386/pc/init.c (grub_machine_init): Fix evaluation + of eisa_mmap. + +2008-01-03 Pavel Roskin + + * kern/i386/linuxbios/init.c: Put "void" to all function + declarations with no arguments. + * kern/powerpc/ieee1275/init.c: Likewise. + * term/i386/pc/at_keyboard.c: Likewise. + * term/i386/pc/vga_text.c: Likewise. + * util/grub-mkdevicemap.c: Likewise. + +2008-01-02 Robert Millan + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Improve error + message when loaded image is out of bounds. + (grub_multiboot_load_elf64): Likewise. + +2008-01-02 Pavel Roskin + + * util/grub.d/10_linux.in: Try version without ".old" when + looking for initrd. It's better to use initrd from the newer + kernel of the same version than no initrd at all. + +2008-01-01 Robert Millan + + * util/biosdisk.c (get_os_disk): Fix check for IDE or SCSI discs. + +2008-01-01 Vesa Jaaskelainen + + * include/grub/video.h: Added grub_video_unmap_color and + grub_video_get_active_render_target. + (grub_video_adapter): Added unmap_color and get_active_render_target. + + * video/video.c: Added grub_video_unmap_color and + grub_video_get_active_render_target. + (grub_video_get_info): Changed method to accept NULL pointer as an + argument to allow detection of active video adapter. + + * video/i386/pc/vbe.c: Renamed grub_video_vbe_unmap_color as + grub_video_vbe_unmap_color_int. + Added grub_video_vbe_unmap_color and + grub_video_vbe_get_active_render_target. + (grub_video_vbe_adapter): Added unmap_color and + get_active_render_target. + + * video/i386/pc/vbeblit.c: Replaced grub_video_vbe_unmap_color usage + with grub_video_vbe_unmap_color_int. + + * term/gfxterm.c (DEFAULT_STANDARD_COLOR): Added. + (DEFAULT_NORMAL_COLOR): Likewise. + (DEFAULT_HIGHLIGHT_COLOR) Likewise. + (DEFAULT_FG_COLOR): Removed. + (DEFAULT_BG_COLOR): Likewise. + (DEFAULT_CURSOR_COLOR): Changed value. + (grub_virtual_screen): Added standard_color_setting, + normal_color_setting, highlight_color_setting and term_color. + (grub_virtual_screen): Removed fg_color_setting and bg_color_setting. + (bitmap_width): Added. + (bitmap_height): Likewise. + (bitmap): Likewise. + (set_term_color): Likewise. + (grub_virtual_screen_setup): Changed to use new terminal coloring + settings. + (grub_gfxterm_init): Added init for bitmap. + (grub_gfxterm_fini): Added destroy for bitmap. + (redraw_screen_rect): Updated to use background bitmap and new + terminal coloring. + (scroll_up): Added optimization for case when there is no bitmap. + (grub_gfxterm_cls): Fixed to use correct background color. + (grub_virtual_screen_setcolorstate): Changed to use new terminal + coloring. + (grub_virtual_screen_setcolor): Likewise. + (grub_virtual_screen_getcolor): Added. + (grub_gfxterm_background_image_cmd): Likewise. + (grub_video_term): Added setcolor and getcolor. + (MOD_INIT): Added registration of background_image command. + (MOD_TERM): Added unregistration for background_image command. + +2007-12-30 Pavel Roskin + + * loader/multiboot_loader.c: Fix multiboot command + unregistration. Fix all typos in the word "multiboot". + +2007-12-29 Pavel Roskin + + * util/grub.d/10_linux.in: Refactor search for initrd. Add + support for initrd names used in Fedora. + +2007-12-26 Bean + + * conf/common.rmk (pkgdata_MODULES): Add cpio.mod. + (cpio_mod_SOURCES): New variable. + (cpio_mod_CFLAGS): Likewise. + (cpio_mod_LDFLAGS): Likewise. + + * fs/cpio.c: New file. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add cpio.c. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Likewise. + + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + +2007-12-25 Robert Millan + + * include/grub/term.h (struct grub_term): Add `getcolor' function. + (grub_getcolor): New function. + + * kern/term.c (grub_getcolor): New function. + * normal/menu.c (GRUB_COLOR_MENU_NORMAL): New macro. + (GRUB_COLOR_MENU_HIGHLIGHT): New macro. + (print_entry): Set normal and highlight colors to + `GRUB_COLOR_MENU_NORMAL' and `GRUB_COLOR_MENU_HIGHLIGHT', + respectively, before printing and restore them to old + values afterwards. + (grub_menu_init_page): Likewise. Fill an additional colored space + that would otherwise be left blank. + + * term/efi/console.c (grub_console_getcolor): New function. + (struct grub_console_term.getcolor): New variable. + * term/i386/pc/console.c (grub_console_getcolor): New function. + (struct grub_console_term.getcolor): New variable. + * term/ieee1275/ofconsole.c (grub_ofconsole_getcolor): New function. + (struct grub_console_term.getcolor): New variable. + + * term/i386/pc/serial.c (grub_serial_setcolor): Remove function. + (struct grub_console_term.setcolor): Remove variable. + * term/i386/pc/vesafb.c (grub_virtual_screen_setcolor): Remove function. + (struct grub_console_term.setcolor): Remove variable. + * term/i386/pc/vga.c (grub_vga_setcolor): Remove function. + (struct grub_console_term.setcolor): Remove variable. + * term/gfxterm.c (grub_virtual_screen_setcolor): Remove function. + (struct grub_console_term.setcolor): Remove variable. + +2007-12-25 Robert Millan + + * configure.ac: Search for possible unifont.hex locations, and + define UNIFONT_HEX if found. + + * Makefile.in (UNIFONT_HEX): Define variable. + (DATA): Rename to ... + (PKGLIB): ... this. Update all users. + (PKGDATA): New variable. + (pkgdata_IMAGES): Rename to ... + (pkglib_IMAGES): ... this. Update all users. + (pkgdata_MODULES): Rename to ... + (pkglib_MODULES): ... this. Update all users. + (pkgdata_PROGRAMS): Rename to ... + (pkglib_PROGRAMS): ... this. Update all users. + (pkgdata_DATA): Rename to ... + (pkglib_DATA): ... this. Update all users. + (CLEANFILES): Redefine to `$(pkglib_DATA) $(pkgdata_DATA)'. + (unicode.pff, ascii.pff): New rules. + (all-local): Add `$(PKGDATA)' dependency. + (install-local): Process `$(PKGDATA)'. + + * util/update-grub_lib.in (font_path): Search for *.pff files in + a few more locations, including `${pkgdata}'. + +2007-12-23 Robert Millan + + Patch from Bean : + * disk/loopback.c (grub_loopback_read): Add missing bit shift to + `size'. + +2007-12-21 Bean + + * conf/common.rmk (pkgdata_MODULES): Add ntfscomp.mod. + (ntfscomp_mod_SOURCES): New variable. + (ntfscomp_mod_CFLAGS): Likewise. + (ntfscomp_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/ntfscomp.c. + (grub_probe_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + + * conf/i386-efi.rmk (grub_probe_SOURCES): Add fs/ntfscomp.c. + (grub_emu_SOURCES): Likewise. + + * conf/i386-linuxbios.rmk (grub_probe_SOURCES): Add fs/ntfscomp.c. + (grub_emu_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_probe_SOURCES): Add fs/ntfscomp.c. + (grub_emu_SOURCES): Likewise. + + * fs/ntfs.c (grub_ntfscomp_func): New variable. + (read_run_list): Renamed to grub_ntfs_read_run_list. + (decomp_nextvcn): Moved to ntfscomp.c. + (decomp_getch): Likewise. + (decomp_get16): Likewise. + (decomp_block): Likewise. + (read_block): Likewise. + (read_data): Partially moved to ntfscomp.c. + (fixup): Change unsigned to grub_uint16_t. + (read_mft): Change unsigned long to grub_uint32_t. + (read_attr): Likewise. + (read_data): Likewise. + (read_run_data): Likewise. + (read_run_list): Likewise. + (read_mft): Likewise. + + * fs/ntfscomp.c: New file. + + * include/grub/ntfs.h: New file. + +2007-12-16 Robert Millan + + * util/grub-mkdevicemap.c (make_device_map): Iterate up to 20 for + IDE disk check, since Linux is known to support 20 IDE disks. + Reported by Colin Watson. + +2007-12-15 Bean + + * conf/i386-pc.rmk (pkgdata_IMAGES): Add lnxboot.img. + (lnxboot_img_SOURCES): New variable. + (lnxboot_img_ASFLAGS): Likewise. + (lnxboot_img_LDFLAGS): Likewise. + + * boot/i386/pc/lnxboot.S: New file. + +2007-11-24 Pavel Roskin + + * configure.ac: Test if '--build-id=none' is supported by the + linker. If yes, add it to TARGET_LDFLAGS. Build ID causes + objcopy to generate incorrect binary files (binutils + 2.17.50.0.18-1 as shipped by Fedora 8). + * aclocal.m4 (grub_PROG_OBJCOPY_ABSOLUTE): Use LDFLAGS when + linking, so that build ID doesn't break the test. + +2007-11-24 Pavel Roskin + + * include/grub/i386/time.h: use "void" in the argument list + of grub_cpu_idle(). + * include/grub/powerpc/time.h: Likewise. + * include/grub/sparc64/time.h: Likewise. + +2007-11-18 Christian Franke + + * util/console.c (grub_ncurses_getkey): Change curses KEY_* mapping, + now return control chars instead of GRUB_CONSOLE_KEY_* constants. + This fixes the problem that function keys did not work in grub-emu. + +2007-11-18 Christian Franke + + * disk/host.c (grub_host_open): Remove attribute unused from + name parameter. Add check for "host". This fixes the problem + that grub-emu does not find partitions. + +2007-11-18 Christian Franke + + * util/hostfs.c (is_dir): New function. + (grub_hostfs_dir): Handle missing dirent.d_type case. + (grub_hostfs_read): Add missing fseek(). + (grub_hostfs_label): Clear label pointer. This fixes a crash + of grub-emu on "ls (host)". + +2007-11-18 Christian Franke + + * include/grub/i386/pc/init.h (struct grub_machine_mmap_entry): + Add attribute packed, gcc 3.4.4 on Cygwin aligns this + to 64 bit boundary by default. + +2007-11-18 Bean + + * conf/common.rmk (pkgdata_MODULES): Add hexdump.mod. + (hexdump_mod_SOURCES): New variable. + (hexdump_mod_CFLAGS): Likewise. + (hexdump_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add command/hexdump.c. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Add command/hexdump.c. + + * conf/i386-linuxbios.rmk (grub_emu_SOURCES): Add command/hexdump.c. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add command/hexdump.c. + + * include/grub/hexdump.h: New file. + + * commands/hexdump.c: New file. + +2007-11-10 Robert Millan + + * commands/i386/pc/play.c (beep_off): Switch order of arguments + in grub_outb() calls. + (beep_on): Likewise. + +2007-11-10 Christian Franke + + * normal/menu.c (run_menu): Check for empty menu to avoid crash. + (grub_menu_run): Likewise. + +2007-11-10 Robert Millan + + * include/grub/i386/efi/machine.h: New file. + * include/grub/i386/linuxbios/machine.h: Likewise. + * include/grub/i386/pc/machine.h: Likewise. + * include/grub/powerpc/ieee1275/machine.h: Likewise. + * include/grub/sparc64/ieee1275/machine.h: Likewise. + + * term/i386/pc/serial.c: Include . + (serial_hw_io_addr): New variable. + (serial_hw_get_port): Obtain port address from `serial_hw_io_addr' + instead of `(unsigned short *) 0x400'. + +2007-11-10 Bean + + * fs/ntfs.c (read_block): Fix a bug caused by adjacent blocks. + +2007-11-10 Vesa Jaaskelainen + + * conf/i386-pc.rmk (pkgdata_MODULES): Added vga.mod. + (vga_mod_SOURCES): Added. + (vga_mod_CFLAGS): Likewise. + (vga_mod_LDFLAGS): Likewise. + + * term/i386/pc/vga.c (get_map_mask): Switch order of arguments in + grub_outb() calls. + (set_map_mask): Likewise. + (set_read_map): Likewise. + (set_read_address): Likewise. + (vga_font): Removed variable. + (get_vga_glyph): Removed function. + (invalidate_char): Likewise. + (write_char): Changed to use grub_font_get_glyph() for font + information. + (grub_vga_putchar): Likewise. + (grub_vga_getcharwidth): Likewise. + +2007-11-10 Vesa Jaaskelainen + + * conf/i386-pc.rmk (boot_img_LDFLAGS): Use COMMON_LDFLAGS for target + flags. + (pxeboot_img_LDFLAGS): Likewise. + (diskboot_img_LDFLAGS): Likewise. + (kernel_img_LDFLAGS): Likewise. + +2007-11-06 Robert Millan + + * term/i386/pc/serial.c (serial_hw_put): Switch order of arguments + in grub_outb() calls. + (serial_hw_init): Likewise. + +2007-11-05 Robert Millan + + * util/update-grub.in: Allow files in ${update_grub_dir} to contain + spaces. Skip non-regular files. + +2007-11-05 Robert Millan + + * kern/disk.c (grub_disk_firmware_fini) + (grub_disk_firmware_is_tainted): New variables. + + * include/grub/disk.h (grub_disk_firmware_fini) + (grub_disk_firmware_is_tainted): Likewise. + + * disk/i386/pc/biosdisk.c (GRUB_MOD_FINI(biosdisk)): Moved from here ... + (grub_disk_biosdisk_fini): ... to here. + (GRUB_MOD_FINI(biosdisk)): Implement using grub_disk_biosdisk_fini(). + (GRUB_MOD_INIT(biosdisk)): Abort when `grub_disk_firmware_is_tainted' + is set. Register grub_disk_biosdisk_fini() in + `grub_disk_firmware_fini'. + + * disk/ata.c: Remove `'. + (GRUB_MOD_INIT(ata)): Remove grub_biosdisk_fini() call. + Use `grub_disk_firmware_is_tainted' and `grub_disk_firmware_fini' + to finish existing firmware disk interface. + + * conf/i386-linuxbios.rmk (pkgdata_MODULES): Add `ata.mod'. + (ata_mod_SOURCES): New variable. + (ata_mod_CFLAGS): Likewise. + (ata_mod_LDFLAGS): Likewise. + +2007-11-05 Robert Millan + + * disk/ata.c: Remove `'. Include `'. + (grub_ata_wait): Reimplement using grub_millisleep(). + + * include/grub/misc.h (grub_div_roundup): Fix parenthesization. + * include/grub/i386/time.h (grub_cpu_idle): Disable `hlt' instruction. + +2007-11-03 Marco Gerards + + * term/i386/pc/vga_text.c: Include . + (CRTC_ADDR_PORT): New macro. + (CRTC_DATA_PORT): Likewise. + (CRTC_CURSOR): Likewise. + (CRTC_CURSOR_ADDR_HIGH): Likewise. + (CRTC_CURSOR_ADDR_LOW): Likewise. + (update_cursor): New function. + (grub_console_real_putchar): Call `update_cursor'. + (grub_console_gotoxy): Likewise. + (grub_console_cls): Set the default color when clearing the + screen. + (grub_console_setcursor): Implemented. + +2007-11-03 Marco Gerards + + * disk/ata.c (grub_ata_pio_read): Don't wait for the command to + become activate. + (grub_ata_pio_write): Likewise. + + (grub_atapi_identify): Wait after issuing an ATA command. + (grub_atapi_packet): Likewise. + (grub_ata_identify): Likewise. + (grub_ata_readwrite): Likewise. + +2007-11-03 Marco Gerards + + * disk/ata.c (grub_ata_pio_read): Detect and return the error code. + (grub_ata_pio_write): Likewise. + (grub_ata_readwrite): Use `grub_error', instead of + returning `grub_errno'. + +2007-11-03 Marco Gerards + + * disk/ata.c (grub_ata_readwrite): Call grub_ata_pio_read and + grub_ata_pio_write once for every single sector, instead of for + multiple sectors. + +2007-10-31 Robert Millan + + * configure.ac: Add `i386-linuxbios' to the list of supported targets. + + * conf/i386-linuxbios.rmk: New file. + + * kern/i386/pc/hardware.c: Likewise. + * term/i386/pc/at_keyboard.c: Likewise. + * term/i386/pc/vga_text.c: Likewise. + + * include/grub/i386/linuxbios/boot.h: Likewise. + * include/grub/i386/linuxbios/console.h: Likewise. + * include/grub/i386/linuxbios/init.h: Likewise. + * include/grub/i386/linuxbios/kernel.h: Likewise. + * include/grub/i386/linuxbios/loader.h: Likewise. + * include/grub/i386/linuxbios/memory.h: Likewise. + * include/grub/i386/linuxbios/serial.h: Likewise. + * include/grub/i386/linuxbios/time.h: Likewise. + + * kern/i386/linuxbios/init.c: Likewise. + * kern/i386/linuxbios/startup.S: Likewise. + * kern/i386/linuxbios/table.c: Likewise. + +2007-10-31 Marco Gerards + + * conf/i386-pc.rmk (pkgdata_MODULES): Add `ata.mod'. + (ata_mod_SOURCES): New variable. + (ata_mod_CFLAGS): Likewise. + (ata_mod_LDFLAGS): Likewise. + + * disk/ata.c: New file. + + * include/grub/disk.h (grub_disk_dev_id): Add + `GRUB_DISK_DEV_ATA_ID'. + +2007-10-31 Robert Millan + + * include/grub/i386/pc/init.h (grub_lower_mem): Moved from here ... + * include/grub/i386/pc/memory.h (grub_lower_mem): ... to here. + + * include/grub/i386/pc/init.h (grub_upper_mem): Moved from here ... + * include/grub/i386/pc/memory.h (grub_upper_mem): ... to here. + + * include/grub/i386/pc/memory.h: Include `' and + `'. + + * loader/i386/pc/multiboot.c: Include `'. + +2007-10-27 Robert Millan + + * include/grub/types.h (ULONG_MAX): Define macro. + +2007-10-22 Robert Millan + + * kern/i386/pc/startup.S: Remove `"kern/i386/realmode.S"'. Include + `"../realmode.S"'. + Remove `"kern/i386/loader.S"'. Include `"../loader.S"'. + +2007-10-22 Robert Millan + + * conf/i386-pc.rmk (kernel_img_SOURCES): Remove `disk/i386/pc/biosdisk.c'. + (pkgdata_MODULES): Add `biosdisk.mod'. + (biosdisk_mod_SOURCES, biosdisk_mod_CFLAGS, biosdisk_mod_LDFLAGS): New + variables. + + * disk/i386/pc/biosdisk.c: Include `'. + (grub_biosdisk_init): Replace with ... + (GRUB_MOD_INIT(biosdisk)): ... this. + (grub_biosdisk_fini): Replace with ... + (GRUB_MOD_FINI(biosdisk)): ... this. + + * kern/i386/pc/init.c: Remove `'. + (grub_machine_init): Remove call to grub_biosdisk_init(). + (grub_machine_fini): Remove call to grub_machine_fini(). + + * util/i386/pc/grub-install.in (modules): Add `biosdisk'. + +2007-10-22 Robert Millan + + * include/grub/time.h: New file. + * include/grub/i386/time.h: Likewise. + * include/grub/powerpc/time.h: Likewise. + * include/grub/sparc64/time.h: Likewise. + + * include/grub/i386/pc/time.h (KERNEL_TIME_HEADER): Rename all + instances to ... + (KERNEL_MACHINE_TIME_HEADER): ... this. + * include/grub/powerpc/ieee1275/time.h (KERNEL_TIME_HEADER): Rename all + instances to ... + (KERNEL_MACHINE_TIME_HEADER): ... this. + * include/grub/sparc64/ieee1275/time.h (KERNEL_TIME_HEADER): Rename all + instances to ... + (KERNEL_MACHINE_TIME_HEADER): ... this. + + * kern/i386/efi/init.c: Include `'. + (grub_millisleep): New function. + * kern/i386/pc/init.c: Include `'. + (grub_millisleep): New function. + * kern/powerpc/ieee1275/init.c: Include `'. + Remove `grub/machine/time.h' include. + (grub_millisleep): New function. + * kern/sparc64/ieee1275/init.c: Include `'. + Remove `grub/machine/time.h' include. + (grub_millisleep): New function. + + * include/grub/misc.h (grub_div_roundup): New function. + + * kern/misc.c: Include `'. + (grub_millisleep_generic): New function. + + * conf/i386-efi.rmk (kernel_mod_HEADERS): Remove `i386/efi/time.h'. + Add `time.h'. + * conf/i386-pc.rmk (kernel_img_HEADERS): Remove `machine/time.h'. + Add `time.h'. + * conf/powerpc-ieee1275.rmk (kernel_elf_HEADERS): Remove + `machine/time.h'. Add `time.h'. + * conf/sparc64-ieee1275.rmk (kernel_elf_HEADERS): Likewise. + +2007-10-21 Robert Millan + + * include/grub/misc.h (grub_max): New function. + +2007-10-21 Robert Millan + + * util/misc.c (grub_util_info): Call fflush() before returning. + +2007-10-20 Robert Millan + + * genmk.rb (Image): Copy `extra_flags' from here ... + (PModule): ... to here. Use it in `#{obj}: #{src}' rule. + + * commands/i386/cpuid.c (grub_cmd_cpuid): Add __attribute__ ((unused)) + to `argc' and `args' arguments. + +2007-10-17 Robert Millan + + * kern/i386/loader.S: New file. + + * kern/i386/pc/startup.S (grub_linux_prot_size): Moved from here ... + * kern/i386/loader.S (grub_linux_prot_size)... to here. + * kern/i386/pc/startup.S (grub_linux_tmp_addr): Moved from here ... + * kern/i386/loader.S (grub_linux_tmp_addr)... to here. + * kern/i386/pc/startup.S (grub_linux_real_addr): Moved from here ... + * kern/i386/loader.S (grub_linux_real_addr)... to here. + * kern/i386/pc/startup.S (grub_linux_boot_zimage): Moved from here ... + * kern/i386/loader.S (grub_linux_boot_zimage)... to here. + * kern/i386/pc/startup.S (grub_linux_boot_bzimage): Moved from here ... + * kern/i386/loader.S (grub_linux_boot_bzimage)... to here. + * kern/i386/pc/startup.S (grub_multiboot_real_boot): Moved from here ... + * kern/i386/loader.S (grub_multiboot_real_boot)... to here. + * kern/i386/pc/startup.S (grub_multiboot2_real_boot): Moved from here ... + * kern/i386/loader.S (grub_multiboot2_real_boot)... to here. + + * kern/i386/realmode.S: New file. + + * kern/i386/pc/startup.S (protstack): Moved from here ... + * kern/i386/realmode.S (protstack)... to here. + * kern/i386/pc/startup.S (gdt): Moved from here ... + * kern/i386/realmode.S (gdt)... to here. + * kern/i386/pc/startup.S (prot_to_real): Moved from here ... + * kern/i386/realmode.S (prot_to_real)... to here. + + * kern/i386/pc/startup.S: Include `kern/i386/loader.S' and + `kern/i386/realmode.S'. + +2007-10-17 Robert Millan + + * include/grub/i386/loader.h: New file. + + * include/grub/i386/pc/loader.h (grub_linux_prot_size) + (grub_linux_tmp_addr, grub_linux_real_addr, grub_os_area_addr) + (grub_os_area_size, grub_linux_boot_zimage, grub_linux_boot_bzimage) + (grub_multiboot_real_boot, grub_multiboot2_real_boot) + (grub_rescue_cmd_linux, grub_rescue_cmd_initrd): Moved from here ... + * include/grub/i386/loader.h (grub_linux_prot_size) + (grub_linux_tmp_addr, grub_linux_real_addr, grub_os_area_addr) + (grub_os_area_size, grub_linux_boot_zimage, grub_linux_boot_bzimage) + (grub_multiboot_real_boot, grub_multiboot2_real_boot) + (grub_rescue_cmd_linux, grub_rescue_cmd_initrd): ... to here. + + * include/grub/i386/pc/loader.h: Include `grub/cpu/loader.h'. + +2007-10-15 Robert Millan + + * normal/misc.c (grub_normal_print_device_info): Do not probe for + filesystem when dev->disk is unset. + Do probe for filesystem even when dev->disk->has_partitions is set. + In case a filesystem is found, always report it. + In case it isn't, if dev->disk->has_partitions is set, report that + a partition table was found instead of reporting that no filesystem + could be identified. + +2007-10-12 Robert Millan + + * conf/powerpc-ieee1275.rmk (grub_mkimage_SOURCES): Replace reference + to util/powerpc/ieee1275/grub-mkimage.c with util/elf/grub-mkimage.c. + + * include/grub/types.h (grub_host_to_target16): New macro. + (grub_host_to_target32): Likewise. + (grub_host_to_target64): Likewise. + (grub_target_to_host16): Likewise. + (grub_target_to_host32): Likewise. + (grub_target_to_host64): Likewise. + + * include/grub/powerpc/ieee1275/kernel.h (GRUB_IEEE1275_MOD_ALIGN): + Renamed from to ... + (GRUB_MOD_ALIGN): ...this. Update all users. + + * util/elf/grub-mkimage.c (load_note): Replace grub_cpu_to_be32 with + grub_host_to_target32. + Replace grub_be_to_cpu32 with grub_target_to_host32. + (load_modules): Likewise. + (add_segments): Replace grub_be_to_cpu16 with grub_target_to_host16. + Replace grub_be_to_cpu32 with grub_target_to_host32. + Replace grub_cpu_to_be16 with grub_host_to_target16. + Replace grub_cpu_to_be32 grub_host_to_target32. + +2007-10-12 Robert Millan + + * util/powerpc/ieee1275/grub-mkimage.c: Moved to ... + * util/elf/grub-mkimage.c: ... here. + + * DISTLIST: Add `util/elf/grub-mkimage.c'. Remove + `util/powerpc/ieee1275/grub-mkimage.c'. + +2007-10-07 Robert Millan + + * kern/powerpc/ieee1275/init.c: Rename HEAP_LIMIT to HEAP_MAX_ADDR, + and make it easier to figure out. + Add HEAP_MIN_SIZE and HEAP_MAX_ADDR definitions. + (grub_claim_heap): Use HEAP_MAX_ADDR rather than taking a parameter. + Do not avoid claiming a region above HEAP_MAX_ADDR if that would + leave us with less than HEAP_MIN_SIZE total heap. + Avoid our total amount of heap to surpass HEAP_MAX_SIZE. + +2007-10-03 Robert Millan + + * include/grub/i386/io.h: New file. + * commands/i386/pc/play.c (inb): Removed. + (outb): Removed. + Include grub/cpu/io.h. Replace inb() with grub_inb() and outb() + with grub_outb(). + * term/i386/pc/serial.c (inb): Removed. + (outb): Removed. + Include grub/cpu/io.h. Replace inb() with grub_inb() and outb() + with grub_outb(). + * term/i386/pc/vga.c (inb): Removed. + (outb): Removed. + Include grub/cpu/io.h. Replace inb() with grub_inb() and outb() + with grub_outb(). + +2007-10-02 Robert Millan + + * conf/i386-efi.rmk (grub_emu_SOURCES): Add util/hostfs.c. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + Reported by Marcin Kurek. + +2007-09-07 Robert Millan + + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_test_flag): Detect + SmartFirmware version updates (as released by Sven Luther), and avoid + setting GRUB_IEEE1275_FLAG_NO_PARTITION_0 or + GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS unless the running version is + known broken. + +2007-09-03 Yoshinori K. Okuji + + From Hitoshi Ozeki: + * kern/i386/pc/init.c (compact_mem_regions): Decrease NUM_REGIONS + when merging two regions. + +2007-09-03 Yoshinori K. Okuji + + * kern/rescue.c (grub_enter_rescue_mode): Free ARGS. + * normal/completion.c (grub_normal_do_completion): Likewise. + Reported by Hitoshi Ozeki. + +2007-09-03 Yoshinori K. Okuji + + Do not use devices at boot in chainloading. + + * loader/i386/pc/chainloader.c (boot_drive): New variable. + (boot_part_addr): Likewise. + (grub_chainloader_boot): Simply call grub_chainloader_real_boot + with BOOT_DRIVE and BOOT_PART_ADDR. + (grub_chainloader_cmd): Set BOOT_DRIVE and BOOT_PART_ADDR. + Reported by Hitoshi Ozeki . + +2007-08-29 Robert Millan + + Patch from Simon Peter : + * genmk.rb (Utility): Append $(#{src}_DEPENDENCIES) to #{obj} targets. + * conf/i386-pc.rmk: Replace grub-probe_DEPENDENCIES with + util/grub-probe.c_DEPENDENCIES. Replace grub-setup_DEPENDENCIES with + util/i386/pc/grub-setup.c_DEPENDENCIES. + * conf/i386-efi.rmk: Replace grub-probe_DEPENDENCIES with + util/grub-probe.c_DEPENDENCIES. + * conf/powerpc-ieee1275.rmk: Likewise. + +2007-08-28 Robert Millan + + * util/i386/get_disk_name.c: New. Implement grub_util_get_disk_name() + to tell grub-mkdevicemap how to name devices. + * util/ieee1275/get_disk_name.c: Likewise (using "ofpathname -a" + feature). + + * conf/i386-efi.rmk (grub_mkdevicemap_SOURCES): Add + util/i386/get_disk_name.c. + * conf/i386-pc.rmk (grub_mkdevicemap_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_mkdevicemap_SOURCES): Add + util/ieee1275/get_disk_name.c. + + * include/grub/util/misc.h: grub_util_get_disk_name() declaration. + + * DISTLIST: Add util/i386/get_disk_name.c and + util/ieee1275/get_disk_name.c. + + * util/grub-mkdevicemap.c: Replace device naming logic with + grub_util_get_disk_name() calls. + +2007-08-20 Robert Millan + + * normal/menu.c (run_menu): Refer to seconds as "s" not "seconds" + (so that it works for both plural and singular quantities). + +2007-08-05 Robert Millan + + * util/grub.d/10_linux.in (test_gt): Strip out vmlinu[xz]- prefix + so that [xz] isn't taken into account when determining order. + +2007-08-02 Marco Gerards + + * DISTLIST: Add `disk/host.c', `fs/ntfs.c', `include/multiboot.h', + `include/multiboot2.h', `include/grub/elfload.h', + `include/multiboot.h', `include/grub/multiboot.h', + `include/grub/multiboot_loader.h', `include/grub/multiboot2.h', + `include/grub/i386/pc/biosdisk.h', `include/grub/util/biosdisk.h', + `kern/elf.c', `loader/multiboot_loader.c', + `loader/multiboot_loader_normal.c', `loader/multiboot2.c', + `loader/i386/pc/multiboot2.c', + `loader/powerpc/ieee1275/multiboot2.c', `util/hostfs.c' and + `util/i386/pc/grub-mkrescue.in'. Remove + `include/grub/biosdisk.h', `include/grub/i386/pc/multiboot.h', + `include/grub/i386/pc/util/biosdisk.h' and + `include/grub/powerpc/ieee1275/multiboot.h'. + +2007-08-02 Bean + + * conf/common.rmk (pkgdata_MODULES): Add ntfs.mod. + (ntfs_mod_SOURCES): New variable. + (ntfs_mod_CFLAGS): Likewise. + (ntfs_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/ntfs.c. + (grub_probe_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + + * conf/i386-efi.rmk (grub_probe_SOURCES): Add fs/ntfs.c. + (grub_emu_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_probe_SOURCES): Add fs/ntfs.c. + (grub_emu_SOURCES): Likewise. + + * conf/misc.c (grub_utf16_to_utf8): Fix unicode conversion bug. + + * fs/ntfs.c: New file. + +2007-08-02 Bean + + * disk.h (grub_disk): Use NESTED_FUNC_ATTR. + + * file.h (grub_file): Likewise. + + * fshelp.h (grub_fshelp_read_file): Likewise. + + * util/i386/pc/grub-setup.c (setup): Likewise. + (save_first_sector): Likewise. + (save_blocklists): Likewise. + + * fs/affs.c (grub_affs_read_file): Likewise. + + * fs/ext2.c (grub_ext2_read_file): Likewise. + + * fs/fat.c (grub_fat_read_data): Likewise. + + * fs/fshelp.c (grub_fshelp_read_file): Likewise. + + * fs/hfs.c (grub_hfs_read_file): Likewise. + + * fs/hfsplus.c (grub_hfsplus_read_file): Likewise. + + * fs/jfs.c (grub_jfs_read_file): Likewise. + + * fs/minix.c (grub_minix_read_file): Likewise. + + * fs/sfs.c (grub_sfs_read_file): Likewise. + + * fs/ufs.c (grub_ufs_read_file): Likewise. + + * fs/xfs.c (grub_xfs_read_file): Likewise. + + * command/blocklist.c (read_blocklist): Likewise. + (print_blocklist): Likewise. + +2007-08-02 Marco Gerards + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `disk/host.c' and + `util/hostfs.c'. + + * disk/host.c: New file. + + * util/hostfs.c: Likewise. + + * fs/hfsplus.c (grub_hfsplus_mount): When reading out of disk, + return `GRUB_ERR_BAD_FS'. + * fs/sfs.c (grub_sfs_mount): Likewise. + * fs/xfs.c (grub_xfs_mount): Likewise. + + * include/grub/disk.h (enum grub_disk_dev_id): Add + `GRUB_DISK_DEVICE_HOST_ID'. + + * util/grub-emu.c (main): Initialize and de-initialize hostfs. + +2007-07-24 Jerone Young + + * conf/i386-pc.rmk: Add Multiboot loader and multiboot 2 to multiboot + modules for compilation. + * conf/powerpc-ieee1275.rmk: Likewise. + + * include/multiboot.h: Move multiboot definitions to one file. Rename + many definitions to not get grub specific. + * include/multiboot2.h: Create header with multiboot 2 definitions. + * include/grub/multiboot.h: Header for grub specific function + prototypes and definitions. + * include/grub/multiboot2.h: Likewise. + * include/grub/multiboot_loader.h: Likewise. + * include/grub/i386/pc/multiboot.h: Removed. + * include/grub/powerpc/ieee1275/multiboot.h: Removed. + + * loader/multiboot_loader.c: Created to act as a proxy for multiboot 1 + and 2 to allow for one multiboot and module commands. + * loader/multiboot2.c: Add multiboot2 functionality. + * loader/i386/pc/multiboot.c: Modify for new multiboot header location + and definition names. + * loader/i386/pc/multiboot2.c: Created to add i386 specific multiboot + 2 functions. + * loader/powerpc/ieee1275/multiboot2.c: Created to add powerpc + ieee1275 specific multiboot2 code. + + * kern/i386/pc/startup.S: Change headers and definition names for + multiboot. Add function grub_multiboot2_real_boot for multiboot 2. + +2007-07-22 Robert Millan + + * geninitheader.sh: Process file specified in first parameter rather + than hardcoding grub_modules_init.lst. + * geninit.sh: Likewise. Also, construct header name dynamically rather + than hardcoding grub_modules_init.h. + + * conf/common.rmk: Rename grub_modules_init.[ch] files associated with + grub-emu to grub_emu_init.[ch]. Add rules to build analogous + grub_probe_init.[ch] and grub_setup_init.[ch]. + + * conf/powerpc-ieee1275.rmk (grub_emu_DEPENDENCIES): Replace + grub_modules_init.h with grub_emu_init.h. + (grub_probe_DEPENDENCIES, grub_probe_SOURCES): Add new + grub_probe_init.[ch] files. + * conf/i386-efi.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + (grub_setup_DEPENDENCIES, grub_setup_SOURCES): Add new + grub_setup_init.[ch] files. + + * util/grub-emu.c: Replace grub_modules_init.h with grub_emu_init.h. + * util/grub-probe.c: Include grub_probe_init.h. Use grub_init_all() + to initialize modules rather than a list of hardcoded functions. + * util/i386/pc/grub-setup.c: Include grub_setup_init.h. Use + grub_init_all() to initialize modules rather than a list of hardcoded + functions. + +2007-07-22 Robert Millan + + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): Set + GRUB_IEEE1275_FLAG_NO_PARTITION_0 flag when running on SmartFirmware. + +2007-07-22 Robert Millan + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_flag): Add + GRUB_IEEE1275_FLAG_BROKEN_OUTPUT flag. + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): Set this + flag when running on SmartFirmware. + * term/ieee1275/ofconsole.c (grub_ofconsole_init): Avoid running + "output-device output" command when GRUB_IEEE1275_FLAG_BROKEN_OUTPUT + was set. + + * kern/powerpc/ieee1275/openfw.c (grub_ieee1275_encode_devname): + Increase partno when GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS flag is set, + rather than decreasing it. + + * util/i386/pc/grub-setup.c (setup): When embedding is required, but + there's not enough space to do it, fail in the same way as when it + can't be done because there are no partitions. + + * util/powerpc/ieee1275/grub-install.in: Improve error message shown + when nvsetenv failed. + +2007-07-22 Yoshinori K. Okuji + + * conf/i386-pc.rmk (CLEANFILES): Removed for grub-mkrescue, + because this rule is automatically generated. + (grub-mkrescue): Removed for the same reason as above. + +2007-07-22 Yoshinori K. Okuji + + Migrate to GNU General Public License Version 3. + + * COPYING: Replaced with the plain text version of GPLv3. + + * config.guess: Updated from gnulib. + * config.sub: Likewise. + + * geninit.sh: Output a GPLv3 copyright notice. + * geninitheader.sh: Likewise. + * genmodsrc.sh: Likewise. + * gensymlist.sh.in: Likewise. + + * boot/i386/pc/boot.S: Upgraded to GPLv3. + * boot/i386/pc/diskboot.S: Likewise. + * boot/i386/pc/pxeboot.S: Likewise. + * commands/blocklist.c: Likewise. + * commands/boot.c: Likewise. + * commands/cat.c: Likewise. + * commands/cmp.c: Likewise. + * commands/configfile.c: Likewise. + * commands/echo.c: Likewise. + * commands/help.c: Likewise. + * commands/ls.c: Likewise. + * commands/search.c: Likewise. + * commands/terminal.c: Likewise. + * commands/test.c: Likewise. + * commands/videotest.c: Likewise. + * commands/i386/cpuid.c: Likewise. + * commands/i386/pc/halt.c: Likewise. + * commands/i386/pc/play.c: Likewise. + * commands/i386/pc/reboot.c: Likewise. + * commands/i386/pc/vbeinfo.c: Likewise. + * commands/i386/pc/vbetest.c: Likewise. + * commands/ieee1275/halt.c: Likewise. + * commands/ieee1275/reboot.c: Likewise. + * commands/ieee1275/suspend.c: Likewise. + * disk/loopback.c: Likewise. + * disk/lvm.c: Likewise. + * disk/raid.c: Likewise. + * disk/efi/efidisk.c: Likewise. + * disk/i386/pc/biosdisk.c: Likewise. + * disk/ieee1275/ofdisk.c: Likewise. + * font/manager.c: Likewise. + * fs/affs.c: Likewise. + * fs/ext2.c: Likewise. + * fs/fat.c: Likewise. + * fs/fshelp.c: Likewise. + * fs/hfs.c: Likewise. + * fs/hfsplus.c: Likewise. + * fs/iso9660.c: Likewise. + * fs/jfs.c: Likewise. + * fs/minix.c: Likewise. + * fs/sfs.c: Likewise. + * fs/ufs.c: Likewise. + * fs/xfs.c: Likewise. + * hello/hello.c: Likewise. + * include/grub/acorn_filecore.h: Likewise. + * include/grub/arg.h: Likewise. + * include/grub/bitmap.h: Likewise. + * include/grub/boot.h: Likewise. + * include/grub/cache.h: Likewise. + * include/grub/device.h: Likewise. + * include/grub/disk.h: Likewise. + * include/grub/dl.h: Likewise. + * include/grub/elfload.h: Likewise. + * include/grub/env.h: Likewise. + * include/grub/err.h: Likewise. + * include/grub/file.h: Likewise. + * include/grub/font.h: Likewise. + * include/grub/fs.h: Likewise. + * include/grub/fshelp.h: Likewise. + * include/grub/gzio.h: Likewise. + * include/grub/hfs.h: Likewise. + * include/grub/kernel.h: Likewise. + * include/grub/loader.h: Likewise. + * include/grub/lvm.h: Likewise. + * include/grub/misc.h: Likewise. + * include/grub/mm.h: Likewise. + * include/grub/net.h: Likewise. + * include/grub/normal.h: Likewise. + * include/grub/parser.h: Likewise. + * include/grub/partition.h: Likewise. + * include/grub/pc_partition.h: Likewise. + * include/grub/raid.h: Likewise. + * include/grub/rescue.h: Likewise. + * include/grub/script.h: Likewise. + * include/grub/setjmp.h: Likewise. + * include/grub/symbol.h: Likewise. + * include/grub/term.h: Likewise. + * include/grub/terminfo.h: Likewise. + * include/grub/tparm.h: Likewise. + * include/grub/types.h: Likewise. + * include/grub/video.h: Likewise. + * include/grub/efi/api.h: Likewise. + * include/grub/efi/chainloader.h: Likewise. + * include/grub/efi/console.h: Likewise. + * include/grub/efi/console_control.h: Likewise. + * include/grub/efi/disk.h: Likewise. + * include/grub/efi/efi.h: Likewise. + * include/grub/efi/pe32.h: Likewise. + * include/grub/efi/time.h: Likewise. + * include/grub/i386/linux.h: Likewise. + * include/grub/i386/setjmp.h: Likewise. + * include/grub/i386/types.h: Likewise. + * include/grub/i386/efi/kernel.h: Likewise. + * include/grub/i386/efi/loader.h: Likewise. + * include/grub/i386/efi/time.h: Likewise. + * include/grub/i386/pc/biosdisk.h: Likewise. + * include/grub/i386/pc/boot.h: Likewise. + * include/grub/i386/pc/chainloader.h: Likewise. + * include/grub/i386/pc/console.h: Likewise. + * include/grub/i386/pc/init.h: Likewise. + * include/grub/i386/pc/kernel.h: Likewise. + * include/grub/i386/pc/loader.h: Likewise. + * include/grub/i386/pc/memory.h: Likewise. + * include/grub/i386/pc/multiboot.h: Likewise. + * include/grub/i386/pc/serial.h: Likewise. + * include/grub/i386/pc/time.h: Likewise. + * include/grub/i386/pc/vbe.h: Likewise. + * include/grub/i386/pc/vbeblit.h: Likewise. + * include/grub/i386/pc/vbefill.h: Likewise. + * include/grub/i386/pc/vbeutil.h: Likewise. + * include/grub/i386/pc/vga.h: Likewise. + * include/grub/ieee1275/ieee1275.h: Likewise. + * include/grub/ieee1275/ofdisk.h: Likewise. + * include/grub/powerpc/libgcc.h: Likewise. + * include/grub/powerpc/setjmp.h: Likewise. + * include/grub/powerpc/types.h: Likewise. + * include/grub/powerpc/ieee1275/biosdisk.h: Likewise. + * include/grub/powerpc/ieee1275/console.h: Likewise. + * include/grub/powerpc/ieee1275/ieee1275.h: Likewise. + * include/grub/powerpc/ieee1275/kernel.h: Likewise. + * include/grub/powerpc/ieee1275/loader.h: Likewise. + * include/grub/powerpc/ieee1275/multiboot.h: Likewise. + * include/grub/powerpc/ieee1275/time.h: Likewise. + * include/grub/powerpc/ieee1275/util/biosdisk.h: Likewise. + * include/grub/sparc64/libgcc.h: Likewise. + * include/grub/sparc64/setjmp.h: Likewise. + * include/grub/sparc64/types.h: Likewise. + * include/grub/sparc64/ieee1275/console.h: Likewise. + * include/grub/sparc64/ieee1275/ieee1275.h: Likewise. + * include/grub/sparc64/ieee1275/kernel.h: Likewise. + * include/grub/sparc64/ieee1275/time.h: Likewise. + * include/grub/util/biosdisk.h: Likewise. + * include/grub/util/getroot.h: Likewise. + * include/grub/util/lvm.h: Likewise. + * include/grub/util/misc.h: Likewise. + * include/grub/util/raid.h: Likewise. + * include/grub/util/resolve.h: Likewise. + * io/gzio.c: Likewise. + * kern/device.c: Likewise. + * kern/disk.c: Likewise. + * kern/dl.c: Likewise. + * kern/elf.c: Likewise. + * kern/env.c: Likewise. + * kern/err.c: Likewise. + * kern/file.c: Likewise. + * kern/fs.c: Likewise. + * kern/loader.c: Likewise. + * kern/main.c: Likewise. + * kern/misc.c: Likewise. + * kern/mm.c: Likewise. + * kern/parser.c: Likewise. + * kern/partition.c: Likewise. + * kern/rescue.c: Likewise. + * kern/term.c: Likewise. + * kern/efi/efi.c: Likewise. + * kern/efi/init.c: Likewise. + * kern/efi/mm.c: Likewise. + * kern/i386/dl.c: Likewise. + * kern/i386/efi/init.c: Likewise. + * kern/i386/efi/startup.S: Likewise. + * kern/i386/pc/init.c: Likewise. + * kern/i386/pc/lzo1x.S: Likewise. + * kern/i386/pc/startup.S: Likewise. + * kern/ieee1275/ieee1275.c: Likewise. + * kern/powerpc/cache.S: Likewise. + * kern/powerpc/dl.c: Likewise. + * kern/powerpc/ieee1275/cmain.c: Likewise. + * kern/powerpc/ieee1275/crt0.S: Likewise. + * kern/powerpc/ieee1275/init.c: Likewise. + * kern/powerpc/ieee1275/openfw.c: Likewise. + * kern/sparc64/cache.S: Likewise. + * kern/sparc64/dl.c: Likewise. + * kern/sparc64/ieee1275/init.c: Likewise. + * kern/sparc64/ieee1275/openfw.c: Likewise. + * loader/efi/chainloader.c: Likewise. + * loader/efi/chainloader_normal.c: Likewise. + * loader/i386/efi/linux.c: Likewise. + * loader/i386/efi/linux_normal.c: Likewise. + * loader/i386/pc/chainloader.c: Likewise. + * loader/i386/pc/chainloader_normal.c: Likewise. + * loader/i386/pc/linux.c: Likewise. + * loader/i386/pc/linux_normal.c: Likewise. + * loader/i386/pc/multiboot.c: Likewise. + * loader/i386/pc/multiboot_normal.c: Likewise. + * loader/powerpc/ieee1275/linux.c: Likewise. + * loader/powerpc/ieee1275/linux_normal.c: Likewise. + * normal/arg.c: Likewise. + * normal/cmdline.c: Likewise. + * normal/command.c: Likewise. + * normal/completion.c: Likewise. + * normal/execute.c: Likewise. + * normal/function.c: Likewise. + * normal/lexer.c: Likewise. + * normal/main.c: Likewise. + * normal/menu.c: Likewise. + * normal/menu_entry.c: Likewise. + * normal/misc.c: Likewise. + * normal/parser.y: Likewise. + * normal/script.c: Likewise. + * normal/i386/setjmp.S: Likewise. + * normal/powerpc/setjmp.S: Likewise. + * normal/sparc64/setjmp.S: Likewise. + * partmap/acorn.c: Likewise. + * partmap/amiga.c: Likewise. + * partmap/apple.c: Likewise. + * partmap/gpt.c: Likewise. + * partmap/pc.c: Likewise. + * partmap/sun.c: Likewise. + * term/gfxterm.c: Likewise. + * term/terminfo.c: Likewise. + * term/efi/console.c: Likewise. + * term/i386/pc/console.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * term/i386/pc/vesafb.c: Likewise. + * term/i386/pc/vga.c: Likewise. + * term/ieee1275/ofconsole.c: Likewise. + * util/biosdisk.c: Likewise. + * util/console.c: Likewise. + * util/genmoddep.c: Likewise. + * util/getroot.c: Likewise. + * util/grub-emu.c: Likewise. + * util/grub-mkdevicemap.c: Likewise. + * util/grub-probe.c: Likewise. + * util/lvm.c: Likewise. + * util/misc.c: Likewise. + * util/raid.c: Likewise. + * util/resolve.c: Likewise. + * util/update-grub.in: Likewise. + * util/update-grub_lib.in: Likewise. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + * util/i386/efi/grub-install.in: Likewise. + * util/i386/efi/grub-mkimage.c: Likewise. + * util/i386/pc/grub-install.in: Likewise. + * util/i386/pc/grub-mkimage.c: Likewise. + * util/i386/pc/grub-mkrescue.in: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/i386/pc/misc.c: Likewise. + * util/powerpc/ieee1275/grub-install.in: Likewise. + * util/powerpc/ieee1275/grub-mkimage.c: Likewise. + * util/powerpc/ieee1275/misc.c: Likewise. + * video/bitmap.c: Likewise. + * video/video.c: Likewise. + * video/i386/pc/vbe.c: Likewise. + * video/i386/pc/vbeblit.c: Likewise. + * video/i386/pc/vbefill.c: Likewise. + * video/i386/pc/vbeutil.c: Likewise. + * video/readers/tga.c: Likewise. + +2007-07-02 Robert Millan + + * conf/i386-efi.rmk: Replace obsolete reference to + util/i386/pc/biosdisk.c with util/biosdisk.c, and util/i386/pc/getroot.c + with util/getroot.c. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk: Likewise. + + * util/grub-emu.c (main): Fix unchecked pointer handling. + +2007-07-02 Robert Millan + + * util/i386/efi/grub-install.in: Allow `grub_probe --target=partmap' + invocation to fail, in order to support partition-less media. + + * util/i386/pc/grub-install.in: Likewise. + + * util/powerpc/ieee1275/grub-install.in: Use grub-probe to determine + which fs or partmap modules are needed (akin to its sister scripts). + + Also use grub-probe to get rid of unportable /proc/mounts check. + + Print the same informational message that the other scripts do, before + exiting. + +2007-06-23 Robert Millan + + * util/update-grub_lib.in (font_path): New function. Determine whether + a font file can be found and, if so, echo the GRUB path to it. + + * util/update-grub.in: Handle multiple terminals depending on user + input, platform availability and font file presence. Propagate + variables of our findings to /etc/grub.d/ children. + + * util/grub.d/00_header.in: Handle multiple terminals, based on + environment setup by update-grub. + +2007-06-23 Robert Millan + + * conf/i386-pc.rmk (pkgdata_MODULES): Add serial.mod. + +2007-06-21 Robert Millan + + * include/grub/i386/pc/kernel.h: Define GRUB_KERNEL_MACHINE_DATA_END to + indicate end of data section in kernel image. + * include/grub/i386/efi/kernel.h: Define GRUB_KERNEL_MACHINE_PREFIX and + GRUB_KERNEL_MACHINE_DATA_END. + + * kern/i386/pc/startup.S: Do not initialize grub_prefix, only reserve + space for it. + * kern/i386/efi/startup.S: Likewise. + + * util/i386/pc/grub-mkimage.c: Initialize grub_prefix to /boot/grub + during image generation. Implement --prefix option to override this + patch. + * util/i386/efi/grub-mkimage.c: Likewise. + + * util/update-grub_lib.in (convert_system_path_to_grub_path): Split + code to make path relative to its root into a separate function. + + * util/i386/pc/grub-install.in: Use newly provided + make_system_path_relative_to_its_root() to convert ${grubdir}, then + pass the result to grub-install --prefix. + +2007-06-13 Robert Millan + + * include/grub/util/misc.h: Define DEFAULT_DIRECTORY and + DEFAULT_DEVICE_MAP. + * util/grub-emu.c: Use above definitions from misc.h instead of + defining them. + * util/grub-mkdevicemap.c: Likewise. + * util/i386/pc/grub-setup.c: Likewise. + * util/grub-probe.c: Likewise. + (probe): Abort with grub_util_error() when either + grub_guess_root_device or grub_util_get_grub_dev fails. + +2007-06-12 Robert Millan + + * normal/command.c (grub_command_execute): Use NULL rather than 0 for + "pager" assignment. + * util/biosdisk.c (grub_util_biosdisk_get_grub_dev): Likewise for + "pcdata". + * util/grub-probe.c (probe): Likewise for "drive_name". + +2007-06-11 Robert Millan + + * util/i386/pc/grub-mkrescue.in: Pad both floppy images with zeroes, + not just the cdrom one. + +2007-06-11 Robert Millan + + * util/i386/pc/grub-mkrescue.in: Add "set -e". + Add --pkglibdir=DIR option to override pkglibdir. + Mention --image-type=TYPE in help output. + Fix --grub-mkimage (it was a no-op). + Abort gracefully when no parameter is given. + +2007-06-11 Robert Millan + + * util/i386/pc/grub-mkrescue.in: New file. + * conf/i386-pc.rmk: Add its build declarations. Put it in bin_SCRIPTS. + * Makefile.in: Handle bin_SCRIPTS. + +2007-06-10 Vesa Jaaskelainen + + * term/gfxterm.c (grub_gfxterm_init): Added support for specifying + list of video modes. + +2007-06-06 Robert Millan + + * util/update-grub_lib.in (convert_system_path_to_grub_path): Abort if + file doesn't exist, or if it is in a filesystem grub can't read. + + * util/update-grub.in: Set fallback for GRUB_FS check to "unknown". Do + not abort if GRUB_DRIVE could not be defined. Rearrange generated + header comment to fit in 80 columns when the variables are resolved. + + * util/grub.d/00_header.in: Only set root variable when GRUB_DRIVE + could be identified by update-grub. Remove redundant check for + unifont.pff existence (since convert_system_path_to_grub_path now + handles that). + +2007-06-04 Robert Millan + + * conf/i386-efi.rmk (grub_probe_SOURCES): Add partmap/apple.c. + + * conf/i386-pc.rmk (grub_probe_SOURCES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_probe_SOURCES): Add partmap/pc.c. + +2007-06-04 Robert Millan + + * conf/powerpc-ieee1275.rmk: Enable grub-mkdevicemap and grub-probe. + + * include/grub/partition.h: Declare grub_apple_partition_map_init and + grub_apple_partition_map_fini. + + * util/biosdisk.c + (grub_util_biosdisk_open): Replace BLKGETSIZE with BLKGETSIZE64 (needed + to access >2 TiB disks). + + Print disk->total_sectors with %llu instead of %lu, since this + variable is always 64-bit (prevents wrong disk size from being displayed + on either >2 TiB disk or big-endian CPU). + + (grub_util_biosdisk_get_grub_dev): Convert gpt_partition_map handling + into a generic case that supports all (sane) partition maps. + + Stop using grub_cpu_to_le32() on dos_part / bsd_part since it actually + breaks big-endian. + + * util/grub-probe.c: Call grub_apple_partition_map_init() before probe() + and grub_apple_partition_map_fini() after that. + +2007-06-01 Robert Millan + + * util/update-grub.in: Export GRUB_CMDLINE_LINUX. + + * util/grub.d/00_header.in: Only enable gfxterm when + convert_system_path_to_grub_path() succeeds. + +2007-05-20 Robert Millan + + * util/update-grub_lib.in: New file. + * DISTLIST: Add update-grub_lib.in. + * conf/common.rmk: Generate update-grub_lib and install it in + $(lib_DATA). + * Makefile.in: Add install routine for $(lib_DATA). + + * util/grub.d/00_header.in: Use convert_system_path_to_grub_path() + function provided by update-grub_lib to support arbitrary paths of + unifont.pff. + * util/update-grub.in: Use convert_system_path_to_grub_path() to + initialize GRUB_DRIVE_BOOT and GRUB_DRIVE_BOOT_GRUB variables. + +2007-05-19 Robert Millan + + * commands/i386/cpuid.c: New module. + * DISTLIST: Add it. + * conf/i386-efi.rmk: Enable cpuid.mod. + * conf/i386-pc.rmk: Likewise. + +2007-05-18 Jeroen Dekkers + + * kern/disk.c (grub_disk_read): Check return value of + grub_realloc(). + +2007-05-18 Jeroen Dekkers + + * util/getroot.c (grub_util_get_grub_dev): Support partitionable + arrays. + * disk/raid.c (grub_raid_open): Likewise. + +2007-05-17 Jeroen Dekkers + + * util/biosdisk.c (linux_find_partition): Allocate real_dev on the + stack instead of on the heap. + + * kern/disk.c (grub_disk_read): Make sure tmp_buf is big enough + before doing a read on it. + + * configure.ac: Only use -fno-stack-protector for the target + environment. + +2007-05-17 Jeroen Dekkers + + * video/i386/pc/vbe.c (grub_video_vbe_create_render_target): Add + __attribute_ ((unused)) to mode_type argument. + + * util/getroot.c (grub_guess_root_device): Fix #endif. + + * kern/misc.c (memcmp): Fix prototype. + + * include/grub/partition.h [GRUB_UTIL] + (grub_gpt_partition_map_init): Add prototype. + (grub_gpt_partition_map_fini): Likewise. + + * fs/jfs.c (struct grub_jfs_inode): Put __attribute__ ((packed) + at the right place. + + * fs/fat.c (grub_fat_mount): Replace ~0UL with ~0U. + (grub_fat_read_data): Likewise. + (grub_fat_find_dir): Likewise. + + * font/manager.c (find_glyph): Make table a const. + (grub_font_get_glyph): Remove bitmap from if statement. + +2007-05-16 Jeroen Dekkers + + * util/getroot.c (grub_guess_root_device): Remove RAID and LVM + code, first search for device in /dev/mapper, then in /dev. + (grub_util_get_grub_dev): New function. + * include/grub/util/getroot.h (grub_util_get_grub_dev): Add + prototype. + * util/grub-probe.c (probe): Remove check for RAID, call + grub_util_get_grub_dev() instead of + grub_util_biosdisk_get_grub_dev(). + * util/grub-emu.c (main): Call grub_util_get_grub_dev() instead of + grub_util_biosdisk_get_grub_dev(). + * util/i386/pc/grub-setup.c (main): Likewise. + +2007-05-16 Robert Millan + + * DISTLIST: Update for the latest changes. + * conf/i386-pc.rmk: Use the new paths for util/getroot.c, + util/grub-mkdevicemap.c, util/grub-probe.c and util/biosdisk.c. + * util/grub-emu.c: Replace grub/i386/pc/util/biosdisk.h with + grub/util/biosdisk.h. + * util/i386/pc/grub-setup.c: Replace grub/machine/util/biosdisk.h with + grub/util/biosdisk.h. + +2007-05-16 Robert Millan + + * util/grub.d/00_header.in: Set default gfxmode to `640x480'. + +2007-05-16 Robert Millan + + * util/i386/efi/grub-install.in: New. + * conf/i386-efi.rmk: Enable grub-mkdevicemap, grub-probe and the + newly added grub-install. + * util/biosdisk.c: Remove unnecessary grub/machine/biosdisk.h + include. + * util/getroot.c: Replace grub/i386/pc/util/biosdisk.h with + grub/util/biosdisk.h. + * util/grub-probe.c: Replace grub/machine/util/biosdisk.h with + grub/util/biosdisk.h. + +2007-05-16 Robert Millan + + * include/grub/i386/pc/util/biosdisk.h: Moved to ... + * include/grub/util/biosdisk.h: ... here. + * util/i386/pc/biosdisk.c: Moved to ... + * util/biosdisk.c: ... here. + * util/i386/pc/getroot.c: Moved to ... + * util/getroot.c: ... here. + * util/i386/pc/grub-mkdevicemap.c: Moved to ... + * util/grub-mkdevicemap.c: ... here. + * util/i386/pc/grub-probe.c: Moved to ... + * util/grub-probe.c: ... here. + +2007-05-15 Robert Millan + + * util/update-grub.in: Remove duplicated line in grub.cfg header + message. + +2007-05-13 Robert Millan + + * util/update-grub.in: Fix a few assumptions about the devices holding + /, /boot and /boot/grub being the same. + * util/grub.d/00_header.in: Likewise. + * util/grub.d/10_hurd.in: Likewise. + * util/grub.d/10_linux.in: Likewise. + + * util/grub.d/10_linux.in: Implement Linux image sorting with arbitrary + patterns. Use that to define the `.old' suffix as older than `'. + + * util/grub.d/00_header.in: Set default gfxmode to `800x600x16'. + + * util/update-grub.in: Add a reference to ${sysconfdir}/default/grub in + the grub.cfg header message. + +2007-05-11 Robert Millan + + * util/update-grub.in: Create device.map if it doesn't already exist, + before attempting to run grub-probe. + Check for grub-probe and grub-mkdevicemap with the same code + grub-install is using. + Remove test mode. + +2007-05-09 Jeroen Dekkers + + * Makefile.in: Add the datarootdir autoconf variable. + +2007-05-09 Robert Millan + + * util/i386/pc/grub-probe.c (probe): When detecting partition map, + fail gracefully if dev->disk->partition == NULL. + +2007-05-07 Robert Millan + + * util/i386/pc/grub-probe.c: Add `grub-probe -t partmap' parameter to + determine partition map module. + * util/i386/pc/grub-install.in: Use this feature to decide which + partition module to load, instead of hardcoding pc and gpt. + +2007-05-07 Robert Millan + + * Makefile.in: Fix assumption that $(srcdir) has a trailing slash when + source directory differs from build directory. + +2007-05-05 Robert Millan + + * util/powerpc/ieee1275/grub-install.in: Fix syntax error in pkglibdir + initialisation. + +2007-05-05 Robert Millan + + * util/update-grub.in: Create ${grub_prefix} if it doesn't exist. + +2007-05-05 Robert Millan + + * util/grub.d/10_linux.in: Allow the administrator to insert Linux + command-line arguments via ${GRUB_CMDLINE_LINUX}. + +2007-05-05 Robert Millan + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add partmap/gpt.c. + (grub_probe_SOURCES): Likewise. + * util/i386/pc/biosdisk.c (grub_util_biosdisk_get_grub_dev): Detect + GPT and initialize dos_part and bsd_part accordingly. + * util/i386/pc/grub-setup.c (setup): Ditto for install_dos_part and + install_bsd_part. + (main): Activate gpt module for use during partition identification, + and deactivate it afterwards. + * util/i386/pc/grub-install.in: Add gpt module to core.img. + * util/i386/pc/grub-probe.c (main): Activate gpt module for use during + partition identification, and deactivate it afterwards. + +2007-05-05 Robert Millan + + * term/i386/pc/console.c (grub_console_fini): Call + grub_term_set_current() before grub_term_unregister(). + +2007-05-04 Robert Millan + + * DISTLIST: Add util/update-grub.in, util/grub.d/00_header.in, + util/grub.d/10_hurd.in, util/grub.d/10_linux.in and util/grub.d/README. + * Makefile.in: Build update-grub_SCRIPTS. Install update-grub_SCRIPTS + and update-grub_DATA. + * conf/common.rmk: Build and install update-grub components. + * conf/common.mk: Regenerate. + * util/update-grub.in: New. Core of update-grub. + * util/grub.d/00_header.in: New. Generates grub.cfg header. + * util/grub.d/10_hurd.in: New. Generates boot entries for the Hurd. + * util/grub.d/10_linux.in: New. Generates boot entries for Linux. + * util/grub.d/README: New. Document grub.d directory layout. + +2007-05-01 Robert Millan + + * util/grub-emu.c: Move initialization functions + grub_util_biosdisk_init() and grub_init_all() before + grub_util_biosdisk_get_grub_dev(), which relies on them. + +2007-04-19 Robert Millan + + * util/powerpc/ieee1275/grub-install.in: Initialize ${bindir}, since + it is used later. + +2007-04-18 Jerone Young + + * kernel/elf.c: Add missing parenthesis for conditional statement + stanza. + +2007-04-10 Jerone Young + + * util/i386/pc/getroot.c: Update so that if root device is /dev/root , + continue on and look for device node with real device name. + +2007-04-10 Jerone Young + + * configure.ac: Add argument for autoconf to use transformation + ability. + * Makefile.in: Add autoconf package transformation code. + * util/i386/pc/grub-install.in: Likewise. + * util/powerpc/ieee1275/grub-install.in: Likewise. + +2007-03-19 Yoshinori K. Okuji + + * fs/ext2.c (EXT2_GOOD_OLD_REVISION): New macro. + (EXT2_GOOD_OLD_INODE_SIZE): Likewise. + (EXT2_REVISION): Likewise. + (EXT2_INODE_SIZE): Likewise. + (struct grub_ext2_block_group): Added a missing member + "used_dirs". + (grub_ext2_read_inode): Divide by the inode size in a superblock + instead of 128 to obtain INODES_PER_BLOCK. + Use the macro EXT2_INODE_SIZE instead of directly using + SBLOCK->INODE_SIZE. + +2007-03-18 Yoshinori K. Okuji + + * fs/ext2.c (grub_ext2_read_inode): Use the inode size in a + superblock instead of the structure size to compute an + offset. This fixes the problem that GRUB could not read a + filesystem when inode size is different from 128-byte. + +2007-03-05 Marco Gerards + + * normal/main.c (read_config_file): When "menu" is not set, create + an initial context. + +2007-02-21 Hollis Blanchard + + * kern/powerpc/ieee1275/init.c (HEAP_SIZE): Removed. + (HEAP_LIMIT): New macro. + (grub_claim_heap): Claim memory up to `heaplimit'. + +2007-02-21 Hollis Blanchard + + * conf/powerpc-ieee1275.rmk (kernel_elf_LDFLAGS): Link at 64KB. + * kern/powerpc/ieee1275/init.c (_end): Add declaration. + (_start): Likewise. + (grub_arch_modules_addr): Return address after `_end'. + * util/powerpc/ieee1275/grub-mkimage.c: Include grub/misc.h. + (load_modules): Use new parameter as `p_paddr' and `p_vaddr'. + (add_segments): Calculate `_end' from phdr size and location. + (ALIGN_UP): Moved to ... + * include/grub/misc.h: here. + * include/grub/powerpc/ieee1275/kernel.h (GRUB_IEEE1275_MOD_ALIGN): + New macro. + (GRUB_IEEE1275_MODULE_BASE): Removed. + +2007-02-20 Hollis Blanchard + + * kern/powerpc/ieee1275/openfw.c (grub_available_iterate): Correct + loop boundary. + +2007-02-20 Hollis Blanchard + + * include/grub/elfload.h (grub_elf32_load_hook_t): Return grub_err_t. + All users updated. + (grub_elf64_load_hook_t): Likewise. + * kern/elf.c: Call `grub_error_push' before `grub_error'. Improve + debug output. + +2007-02-20 Hollis Blanchard + + * kern/mm.c: Update copyright. + (grub_mm_debug): Correct syntax error. + (grub_mm_dump_free): New function. + (grub_debug_free): Call `grub_free'. + * include/grub/mm.h: Update copyright. + (grub_mm_dump_free): Add declaration. + +2007-02-12 Hollis Blanchard + + * include/grub/ieee1275/ieee1275.h: Update copyright. + * kern/powerpc/ieee1275/init.c: Likewise. + * kern/powerpc/ieee1275/openfw.c: Likewise. + + * loader/powerpc/ieee1275/linux.c: Likewise. + * include/grub/elfload.h: Likewise. + * kern/elf.c: Likewise. + (grub_elf32_load): Pass `base' and `size' parameters. Update all + callers. + (grub_elf64_load): Likewise. + (grub_elf32_load_segment): Move to a nested function. + (grub_elf64_load_segment): Likewise. + +2007-02-12 Hollis Blanchard + + * include/grub/ieee1275/ieee1275.h (grub_available_iterate): New + prototype. + * kern/powerpc/ieee1275/init.c (grub_heap_start): Removed. + (grub_heap_len): Likewise. + (HEAP_SIZE): New macro. + (grub_claim_heap): New function. + (grub_machine_init): Don't claim heap directly. Call + `grub_claim_heap'. + * kern/powerpc/ieee1275/openfw.c: Include alloca.h. + (grub_available_iterate): New function. + +2007-02-03 Thomas Schwinge + + * aclocal.m4 (grub_CHECK_STACK_PROTECTOR): New definition. + * configure.ac: Use it for testing the HOST and TARGET compilers. + +2006-12-13 Thomas Schwinge + + * Makefile.in (enable_grub_emu): New variable. + * configure.ac (--enable-grub-emu): New option. + Do the checks for (n)curses only if `--enable-grub-emu' is requested. + * conf/i386-efi.rmk (sbin_UTILITIES): Add `grub-emu' only if requested. + * conf/i386-pc.rmk: Likewise. + * conf/powerpc-ieee1275.rmk: Likewise. + * conf/sparc64-ieee1275.rmk (bin_UTILITIES): Likewise. + +2006-12-12 Marco Gerards + + * include/grub/err.h (grub_err_t): Add `GRUB_ERR_MENU'. + + * kern/env.c (grub_env_unset): Don't free the member `value' when + the type is GRUB_ENV_VAR_DATA, in this case it's a user defined + pointer. + + * normal/main.c (current_menu): Removed. + (free_menu): Unset the `menu' environment variable. + (grub_normal_menu_addentry): Make use of the environment variable + `menu', instead of using the global `current_menu'. Allocate + memory for the sourcecode of this entry. + (read_config_file): New argument `nested', changed all callers. + Only in the case of a new context, initialize a new menu. Set the + `menu' environment variable. + (grub_normal_execute): Don't set and unset the environment + variable `menu' here anymore. Only free the menu when leaving the + context. + + * util/i386/pc/biosdisk.c (linux_find_partition): Fixed a memory + leak. + +2006-12-11 Marco Gerards + + * normal/menu_entry.c (run): Fix off by one bug so the last line + is executed. Move the loader check to outside the loop. + +2006-12-08 Hollis Blanchard + + * kern/powerpc/ieee1275/cmain.c (cmain): Mark r3 and r4 as `UNUSED'. + +2006-11-25 Yoshinori K. Okuji + + * util/i386/pc/grub-mkimage.c (generate_image): Fix the offset of + the number of sectors. Reported by Andrey Shuvikov + . + +2006-11-11 Jeroen Dekkers + + * kern/disk.c (grub_disk_read): When there is a read error, always + try to read only the necessary data. + + * conf/i386-pc.rmk (grub_probe_SOURCES): Add disk/lvm.c and + disk/raid.c. + * include/grub/disk.h [GRUB_UTIL] (grub_raid_init): New + prototype. + [GRUB_UTIL] (grub_raid_fini): Likewise. + [GRUB_UTIL] (grub_lvm_init): Likewise. + [GRUB_UTIL] (grub_lvm_fini): Likewise. + * util/i386/pc/grub-probe.c (probe): Check whether DEVICE_NAME is + RAID device and copy DEVICE_NAME to DRIVE_NAME in that case. + (main): Call grub_raid_init(), grub_lvm_init(), grub_lvm_fini() + and grub_raid_fini(). + +2006-11-09 Jeroen Dekkers + + * include/grub/types.h (__unused): Rename to UNUSED. + * kern/elf.c (grub_elf32_size): Use UNUSED instead of __unused. + (grub_elf64_size): Likewise. + +2006-11-03 Hollis Blanchard + + * kern/elf.c (grub_elf_file): Call grub_file_seek. Call + grub_error_push and grub_error_pop in the error-handling path. + (grub_elf32_load_segment): Only call grub_file_read with non-zero + length. + +2006-11-03 Hollis Blanchard + + * conf/i386-efi.rmk (grub_emu_SOURCES): Add kern/elf.c. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + (kernel_elf_SOURCES): Likewise. + * conf/i386-efi.rmk (kernel_mod_HEADERS): Add elfload.h and cache.h. + * conf/i386-pc.rmk (kernel_mod_HEADERS): Likewise. + * conf/powerpc-ieee1275.rmk (kernel_elf_HEADERS): Likewise. + * conf/sparc64-ieee1275.rmk (kernel_elf_HEADERS): Likewise. + * conf/common.rmk (pkgdata_MODULES): Add elf.mod. + (elf_mod_SOURCES): New variable. + (elf_mod_CFLAGS): Likewise. + (elf_mod_LDFLAGS): Likewise. + * include/grub/types.h (__unused): New macro. + * include/grub/elfload.h: New file. + * kern/elf.c: Likewise. + * loader/powerpc/ieee1275/linux.c: Include elfload.h. + (ELF32_LOADMASK): New macro. + (ELF64_LOADMASK): Likewise. + (vmlinux): Removed. + (grub_linux_load32): New function. + (grub_linux_load64): Likewise. + (grub_rescue_cmd_linux): Call grub_linux_load32 or grub_linux_load64. + Use grub_elf_t instead of grub_file_t. + +2006-11-02 Hollis Blanchard + + * kern/ieee1275/ieee1275.c (grub_ieee1275_set_color): Add + `catch_result' to struct set_color_args. + +2006-10-28 Yoshinori K. Okuji + + * normal/menu.c: Include grub/script.h. + * normal/menu_entry.c: Likewise. + * include/grub/normal.h: Do not include grub/script.h. + +2006-10-27 Hollis Blanchard + + * kern/disk.c (grub_disk_read): Correct debug printf formatting. + +2006-10-27 Hollis Blanchard + + * kern/disk.c (grub_disk_open): Print debug messages when opening a + disk. + (grub_disk_close): Print debug messages when closing a disk. + (grub_disk_read): Print debug messages when disk read fails. + * kern/fs.c (grub_fs_probe): Print debug messages when detecting + filesystem type. + * kern/partition.c: Include misc.h. + (grub_partition_iterate): Print debug messages when detecting + partition type. + +2006-10-27 Hollis Blanchard + + * disk/ieee1275/ofdisk.c (grub_ofdisk_read): Return error if `status' + is negative. + * kern/ieee1275/ieee1275.c (IEEE1275_IHANDLE_INVALID): Change to 0. + +2006-10-26 Hollis Blanchard + + * kern/powerpc/ieee1275/openfw.c (grub_ieee1275_encode_devname): + Reverse GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS test. + +2006-10-25 Jeroen Dekkers + + * disk/lvm.c (grub_lvm_scan_device): Malloc sizeof(*lv) bytes + instead of sizeof(lv). Patch by Michael Guntsche. + +2006-10-18 Jeroen Dekkers + + * disk/lvm.c: Rename VGS to VG_LIST. + (grub_lvm_iterate): Change VGS->LV to VG-LV. + (grub_lvm_open): Likewise. + Thanks to Michael Guntsche for finding this bug. + +2006-10-15 Yoshinori K. Okuji + + * configure.ac (AC_INIT): Bumped to 1.95. + +2006-10-14 Robert Millan + + * util/i386/pc/getroot.c (grub_guess_root_device): Don't compare os_dev + with "/dev/.static/dev/md". + +2006-10-14 Yoshinori K. Okuji + + * util/i386/pc/grub-probe.c (probe): Print DEVICE_NAME instead of + DRIVE_NAME when grub_util_biosdisk_get_grub_dev fails. Open + DRIVE_NAME instead of DEVICE_NAME. Make sure that DEVICE_NAME and + DRIVE_NAME are always freed. + + * util/i386/pc/biosdisk.c (make_device_name): Add one into + DOS_PART, as a DOS partition is counted from one instead of zero + now. Reported by Robert Millan. + +2006-10-14 Robert Millan + + * util/i386/pc/getroot.c (grub_guess_root_device): Stop using + grub_util_biosdisk_get_grub_dev to convert system device to GRUB device. + * util/grub-emu.c (main): Use grub_util_biosdisk_get_grub_dev with the + string returned by grub_guess_root_device. + * util/i386/pc/grub-setup.c: Likewise. + * util/i386/pc/grub-probefs.c: Likewise. + + * util/i386/pc/grub-probefs.c: Rename to ... + * util/i386/pc/grub-probe.c: ... this. + * DISTLIST: Remove grub-probefs, add grub-probe. + * conf/i386-efi.rmk: Likewise. + * conf/i386-pc.rmk: Likewise. + * util/i386/pc/grub-install.in: Likewise. + + * util/i386/pc/grub-probe.c: Add --target=(fs|device|drive) option to + choose which information we want to print. + +2006-10-14 Yoshinori K. Okuji + + * DISTLIST: Added commands/echo.c, disk/lvm.c, disk/raid.c, + include/grub/bitmap.h, include/grub/lvm.h, include/grub/raid.h, + include/grub/i386/pc/vbeutil.h, include/grub/util/lvm.h, + include/grub/util/raid.h, util/lvm.c, util/raid.c, video/bitmap.c, + video/readers/tga.c and video/i386/pc/vbeutil.c. + +2006-10-14 Jeroen Dekkers + + Added support for RAID and LVM. + + * disk/lvm.c: New file. + * disk/raid.c: Likewise. + * include/grub/lvm.h: Likewise. + * include/grub/raid.h: Likewise. + * include/grub/util/lvm.h: Likewise. + * include/grub/util/raid.h: Likewise. + * util/lvm.c: Likewise. + * util/raid.c: Likewise. + + * include/grub/disk.h (grub_disk_dev_id): Add + GRUB_DISK_DEVICE_RAID_ID and GRUB_DISK_DEVICE_LVM_ID. + (grub_disk_get_size): New prototype. + * kern/disk.c (grub_disk_open): Check whether grub_partition_probe() + returns a partition. + (grub_disk_get_size): New function. + + * kern/i386/pc/init.c (make_install_device): Copy the prefix + verbatim if grub_install_dos_part is -2. + + * util/i386/pc/getroot.c (grub_guess_root_device): Support RAID + and LVM devices. + + * util/i386/pc/grub-setup.c (setup): New argument + MUST_EMBED. Force embedding of GRUB when the argument is + true. Close FILE before returning. + (main): Add support for RAID and LVM. + + * conf/common.rmk: Add RAID and LVM modules. + * conf/i386-pc.rmk (grub_setup_SOURCES): Add util/raid.c and + util/lvm.c. + (grub_emu_SOURCES): Add disk/raid.c and disk/lvm.c. + + * kern/misc.c (grub_strstr): New function. + * include/grub/misc.h (grub_strstr): New prototype. + +2006-10-10 Tristan Gingold + + * include/grub/efi/api.h (GRUB_EFI_ERROR_CODE): Long constant. + +2006-10-05 Tristan Gingold + + * kern/misc.c (grub_strtoull): Guess the base only if not + specified. + +2006-10-01 Hollis Blanchard + + * kern/powerpc/ieee1275/cmain.c (cmain): Remove incomplete Old World + PowerMac support. + +2006-10-01 Hollis Blanchard + + * disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Cast `size' to long. + + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_next_property): + Remove `flags' argument. All callers changed. + * kern/ieee1275/ieee1275.c (IEEE1275_PHANDLE_ROOT): Removed. + (IEEE1275_IHANDLE_INVALID): New variable. + (IEEE1275_CELL_INVALID): New variable. + (grub_ieee1275_finddevice, grub_ieee1275_get_property, + grub_ieee1275_get_property_length, grub_ieee1275_instance_to_package, + grub_ieee1275_package_to_path, grub_ieee1275_instance_to_path, + grub_ieee1275_peer, grub_ieee1275_child, grub_ieee1275_open, + grub_ieee1275_claim, grub_ieee1275_set_property): Error-check return + codes from Open Firmware. All callers updated. + (grub_ieee1275_next_property): Directly return Open Firmware return + code. + * kern/powerpc/ieee1275/cmain.c (grub_ieee1275_find_options): + Standardize error checking from `grub_ieee1275_get_property'. + * kern/powerpc/ieee1275/openfw.c (grub_devalias_iterate): Rename + `devalias' to `aliases'. Correct comments. Consolidate error paths. + +2006-10-01 Hollis Blanchard + + * kern/ieee1275/ieee1275.c (grub_ieee1275_instance_to_path): Rename + `instance_to_package_args' to `instance_to_path_args'. + + * kern/powerpc/ieee1275/init.c (grub_machine_init): Use + `grub_ieee1275_chosen'. + + * term/ieee1275/ofconsole.c (grub_ofconsole_init): Call + `grub_ieee1275_interpret'. + +2006-09-25 Hollis Blanchard + + * util/powerpc/ieee1275/grub-mkimage.c: Include config.h. + +2006-09-25 Hollis Blanchard + + * include/grub/powerpc/libgcc.h (__floatdisf): New prototype. + (__cmpdi): Likewise. + + * kern/powerpc/ieee1275/openfw.c (grub_devalias_iterate): Pass 0 as + `flags' to `grub_ieee1275_next_property'. Change `pathlen' to type + `grub_ssize_t'. + + * kern/powerpc/ieee1275/cmain.c: Include grub/misc.h. + + * loader/powerpc/ieee1275/linux.c (grub_linux_boot): Change `actual' + to type `grub_ssize_t'. + (grub_rescue_cmd_linux): Cast -1 to `grub_off_t'. + +2006-09-22 Marco Gerards + + * normal/script.c (grub_script_create_cmdmenu): Skip leading + newlines. + +2006-09-22 Marco Gerards + + * commands/echo.c: New file. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `commands/echo.c'. + + * conf/common.rmk (echo_mod_SOURCES): New variable. + (echo_mod_CFLAGS): Likewise. + (echo_mod_LDFLAGS): Likewise. + +2006-09-22 Marco Gerards + + * normal/main.c (get_line): Malloc memory instead of using + preallocated memory. Removed the arguments `cmdline' and + `max_len'. Updated all callers. + +2006-09-22 Marco Gerards + + * conf/i386-efi.rmk (grub_emu_DEPENDENCIES): New variable. + (normal_mod_DEPENDENCIES): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_DEPENDENCIES): Likewise. + (normal_mod_DEPENDENCIES): Likewise. + + * conf/sparc64-ieee1275.rmk (normal_mod_DEPENDENCIES): Likewise. + +2006-09-22 Johan Rydberg + + * genmk.rb: Add DEPENDENCIES variables to modules, utilities, and + programs. + * conf/i386-pc.rmk (grub_emu_DEPENDENCIES): Declare. + (normal_mod_DEPENDENCIES): Likewise. + * conf/i386-pc.mk: Regenerate. + * conf/i386-efi.mk: Likewise + * conf/common.mk: Likewise. + * conf/powerpc-ieee1275.mk: Likewise. + * conf/sparc64-ieee1275.mk: Likewise. + +2006-09-22 Robert Millan + + Sync with i386 version. + * conf/powerpc-ieee1275.rmk (bin_UTILITIES): Remove grub-emu, add grub-mkimage. + * conf/powerpc-ieee1275.rmk (sbin_UTILITIES): Remove grub-mkimage, add grub-emu. + +2006-09-21 Robert Millan + + Import from GRUB Legacy (lib/device.c): + * util/i386/pc/grub-mkdevicemap.c (get_i2o_disk_name): New function. + (init_device_map) [__linux__]: Add support for I2O devices. + +2006-09-14 Marco Gerards + + * conf/i386-pc.rmk (COMMON_LDFLAGS): Use `-m32' instead of + `-melf_i386'. + +2006-09-14 Robert Millan + + * util/i386/pc/grub-install.in: Skip menu.lst when removing + /boot/grub/*.lst. + + * util/i386/pc/getroot.c: Don't recurse into dotdirs (e.g. ".static"). + + * util/i386/pc/grub-mkdevicemap.c: Make sure the floppy device exists + before adding it to device.map. + +2006-08-15 Johan Rydberg + + * genmk.rb: Let GCC generate dependencies the first time it + compiles a file; using the -MD option. + * conf/common.mk: Regenerate. + * conf/i386-pc.mk: Likewise. + * conf/i386-efi.mk: Likewise. + * conf/powerpc-ieee1275.mk: Likewise. + * conf/sparc64-ieee1275.mk: Likewise. + +2006-08-04 Yoshinori K. Okuji + + Move the prototypes of grub_setjmp and grub_longjmp to + cpu/setjmp.h, so that each architecture may specify different + attributes. + + * include/grub/i386/setjmp.h (grub_setjmp): New prototype. + (grub_longjmp): Likewise. + * include/grub/powerpc/setjmp.h (grub_setjmp): Likewise.. + (grub_longjmp): Likewise. + * include/grub/sparc64/setjmp.h (grub_setjmp): Likewise.. + (grub_longjmp): Likewise. + + * include/grub/setjmp.h [!GRUB_UTIL] (grub_setjmp): Removed. + [!GRUB_UTIL] (grub_longjmp): Removed. + +2006-08-01 Pelletier Vincent + + * kern/ieee1275/ieee1275.c (grub_ieee1275_set_color): IEEE1275 + "color!" method does not return any value. + +2006-07-29 Vesa Jaaskelainen + + * include/grub/bitmap.h: New file. + + * include/grub/i386/pc/vbeutil.h: Likewise. + + * video/bitmap.c: Likewise. + + * video/readers/tga.c: Likewise. + + * video/i386/pc/vbeutil.c: Likewise. + + * commands/videotest.c: Code cleanup and updated to reflect to new + video API. + + * term/gfxterm.c: Likewise. + + * video/video.c: Likewise. + + * conf/i386-pc.rmk (pkgdata_MODULES): Added tga.mod and bitmap.mod. + (vbe_mod_SOURCES): Added video/i386/pc/vbeutil.c. + (bitmap_mod_SOURCES): New entry. + (bitmap_mod_CFLAGS): Likewise. + (bitmap_mod_LDFLAGS): Likewise. + (tga_mod_SOURCES): Likewise. + (tga_mod_CFLAGS): Likewise. + (tga_mod_LDFLAGS): Likewise. + + * include/grub/video.h (grub_video_blit_operators): New enum type. + (grub_video_render_target): Changed as forward declaration and moved + actual definition to be video driver specific. + (grub_video_adapter.blit_bitmap): Added blitting operator. + (grub_video_adapter.blit_render_target): Likewise. + (grub_video_blit_bitmap): Likewise. + (grub_video_blit_render_target): Likewise. + + * include/grub/i386/pc/vbe.h (grub_video_render_target): Added + driver specific render target definition. + (grub_video_vbe_map_rgba): Added driver internal helper. + (grub_video_vbe_unmap_color): Updated to use + grub_video_i386_vbeblit_info. + (grub_video_vbe_get_video_ptr): Likewise. + + * include/grub/i386/pc/vbeblit.h + (grub_video_i386_vbeblit_R8G8B8A8_R8G8B8A8): Updated to use + grub_video_i386_vbeblit_info. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8A8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8A8): Likewise. + (grub_video_i386_vbeblit_R8G8B8A8_R8G8B8): Likewise. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8): Likewise. + (grub_video_i386_vbeblit_index_index): Likewise. + (grub_video_i386_vbeblit_R8G8B8X8_R8G8B8X8): New blitter function. + (grub_video_i386_vbeblit_R8G8B8_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_index_R8G8B8X8): Likewise. + (grub_video_i386_vbeblit_blend): Added generic blitter for blend + operator. + (grub_video_i386_vbeblit_replace): Added generic blitter for replace + operator. + + * video/i386/pc/vbeblit.c: Updated to reflect changes on + include/grub/i386/pc/vbeblit.h. + + * include/grub/i386/pc/vbefill.h (grub_video_i386_vbefill_R8G8B8A8): + Updated to use grub_video_i386_vbeblit_info. + (grub_video_i386_vbefill_R8G8B8): Likewise. + (grub_video_i386_vbefill_index): Likewise. + (grub_video_i386_vbefill): Added generic filler. + + * video/i386/pc/vbefill.c: Updated to reflect changes on + include/grub/i386/pc/vbefill.h. + + * video/i386/pc/vbe.c (grub_video_vbe_get_video_ptr): Updated to use + grub_video_i386_vbeblit_info. + (grub_video_vbe_unmap_color): Likewise. + (grub_video_vbe_blit_glyph): Likewise. + (grub_video_vbe_scroll): Likewise. + (grub_video_vbe_draw_pixel): Removed function. + (grub_video_vbe_get_pixel): Likewise. + (grub_video_vbe_fill_rect): Moved all blitters to vbefill.c and + updated code to use it. + (common_blitter): Added common blitter for render target and bitmap. + (grub_video_vbe_blit_bitmap): Updated to use common_blitter. + (grub_video_vbe_blit_render_target): Likewise. + +2006-07-30 Johan Rydberg + + * kern/efi/efi.c (grub_efi_set_text_mode): Assume console already + is in text mode if there is no console control protocol instance + available. + +2006-07-29 Vesa Jaaskelainen + + * include/grub/video.h: Code cleanup. + + * include/grub/i386/pc/vbe.h: Likewise. + + * video/i386/pc/vbe.c: Likewise. + + * video/i386/pc/vbeblit.c: Likewise. + + * video/i386/pc/vbefill.c: Likewise. + + * video/video.c: Likewise. Also added more comments. + +2006-07-29 Vesa Jaaskelainen + + * disk/i386/pc/biosdisk.c (struct grub_biosdisk_drp): Moved to ... + (struct grub_biosdisk_dap): Likewise. + + * include/grub/i386/pc/biosdisk.h: ... to here. Also corrected + linkage settings for all functions. + +2006-07-12 Marco Gerards + + * configure.ac (--enable-mm-debug): Fix typo. + + * genkernsyms.sh.in: Use proper quoting for `CC'. + +2006-07-02 Jeroen Dekkers + + * conf/i386-pc.rmk (COMMON_ASFLAGS): Add "-m32". + (normal_mod_ASFLAGS): Remove "-m32". + +2006-06-14 Yoshinori K. Okuji + + * util/misc.c: Include config.h. + [!HAVE_MEMALIGN]: Do not include malloc.h. + (grub_memalign): Use posix_memalign, if present. Then, use + memalign, if present. Otherwise, emit an error. + + * util/grub-emu.c: Do not include malloc.h. + + * include/grub/util/misc.h: Include unistd.h. This is required for + FreeBSD, because off_t is defined in unistd.h. Reported by Harley + D. Eades III . + + * configure.ac (AC_GNU_SOURCE): Added. + (AC_CHECK_FUNCS): Check posix_memalign and memalign for the host + type. + +2006-06-09 Yoshinori K. Okuji + + * loader/i386/pc/linux.c (grub_rescue_cmd_initrd): Make sure that + ADDR_MAX does not exceed GRUB_LINUX_INITRD_MAX_ADDRESS. + +2006-06-07 Jeroen Dekkers + + * include/grub/types.h (grub_host_addr_t): Rename to + grub_target_addr_t. + (grub_host_off_t): Rename to grub_target_off_t. + (grub_host_size_t): Rename to grub_target_size_t. + (grub_host_ssize_t): Rename to grub_target_ssize_t. + Refer to GRUB_TARGET_SIZEOF_VOID_P to define those variables. + + * include/grub/kernel.h (struct grub_module_header): Change type + of OFFSET to grub_target_off_t and type of SIZE to grub_target_size_t. + (grub_module_info): Likewise. + +2006-06-05 Yoshinori K. Okuji + + * loader/i386/pc/linux.c (grub_rescue_cmd_initrd): The conditional + of checking LINUX_MEM_SIZE was reverse. Reported by Jesus + Velazquez . + +2006-06-05 Yoshinori K. Okuji + + Count partitions from 1 instead of 0 in the string representation + of partitions. Still use 0-based internally. + + * partmap/sun.c (grub_sun_is_valid): A cosmetic change. + (sun_partition_map_iterate): Use grub_partition_t instead of + struct grub_partition *. Cast DESC->START_CYLINDER to + grub_uint64_t after converting the endian. + (sun_partition_map_probe): Subtract 1 for PARTNUM. + (sun_partition_map_get_name): Add 1 to P->INDEX. + + * partmap/pc.c (grub_partition_parse): Subtract 1 for + PCDATA->DOS_PART. + (pc_partition_map_get_name): Add 1 into PCDATA->DOS_PART. + + * partmap/gpt.c (gpt_partition_map_iterate): Initialize PARTNO to + zero instead of one. + (gpt_partition_map_probe): Subtract 1 for PARTNUM. + (gpt_partition_map_get_name): Add 1 into P->INDEX. + + * partmap/apple.c (apple_partition_map_iterate): Change the type + of POS to unsigned. + (apple_partition_map_probe): Subtract 1 for PARTNUM. + (apple_partition_map_get_name): Add 1 into P->INDEX. + + * partmap/amiga.c (amiga_partition_map_iterate): Change the type + of POS to unsigned. + (amiga_partition_map_iterate): Cast NEXT to grub_off_t to + calculate the offset of a partition. + (amiga_partition_map_probe): Subtract 1 for PARTNUM. + (amiga_partition_map_get_name): Add 1 into P->INDEX. + + * partmap/acorn.c (acorn_partition_map_find): Change the type of + SECTOR to grub_disk_addr_t. + (acorn_partition_map_iterate): Likewise. + (acorn_partition_map_probe): Subtract 1 for PARTNUM. + Change the type of SECTOR to grub_disk_addr_t. Declare P on the + top. + (acorn_partition_map_get_name): Add 1 into P->INDEX. + + * kern/i386/pc/init.c (make_install_device): Add 1 into + GRUB_INSTALL_DOS_PART. + + * fs/iso9660.c (grub_iso9660_mount): Fixed a reversed + conditional. + +2006-06-04 Yoshinori K. Okuji + + Clean up the code to support 64-bit addressing in disks and + files. This change is not enough for filesystems yet. + + * util/i386/pc/grub-setup.c (struct boot_blocklist): Change the + type of "start" to grub_uint64_t. + (setup): Change the types of KERNEL_SECTOR and FIRST_SECTOR to + grub_disk_addr_t * and grub_disk_addr_t. Fix the format string in + save_first_sector and save_blocklists. Use grub_le_to_cpu64 to + convert addresses. + + * util/i386/pc/biosdisk.c (open_device): Change the type of SECTOR + to grub_disk_addr_t. + + * partmap/gpt.c (gpt_partition_map_iterate): Fix the format + string. + + * partmap/pc.c (pc_partition_map_iterate): Likewise. + + * partmap/amiga.c (amiga_partition_map_iterate): Cast RDSK.MAGIC + to char *. + + * normal/script.c (grub_script_parse): Remove unused MEMFREE. + + * normal/parser.y (YYLTYPE_IS_TRIVIAL): New macro. + + * normal/lexer.c (grub_script_yyerror): Specify unused to LEX. + + * loader/i386/pc/multiboot.c (grub_multiboot_load_elf64): Cast -1 + to grub_off_t, to detect an error from grub_file_seek. + (grub_multiboot_load_elf32): Likewise. + + * kern/misc.c (grub_strtoul): Use grub_strtoull. Return the + maximum unsigned long value when an overflow is detected. + (grub_strtoull): New function. + (grub_divmod64): Likewise. + (grub_lltoa): use grub_divmod64. + + * kern/fs.c (struct grub_fs_block): Change the type of "offset" to + grub_disk_addr_t. + (grub_fs_blocklist_open): Increase P if P is not NULL to advance + the pointer to next character. Use grub_strtoull instead of + grub_strtoul. + (grub_fs_blocklist_read): Change the types of SECTOR, OFFSET and + SIZE to grub_disk_addr_t, grub_off_t and grub_size_t, + respectively. + + * kern/file.c (grub_file_read): Prevent an overflow of LEN, as the + return value is signed. + (grub_file_seek): Change the type of OLD to grub_off_t. Do not + test if OFFSET is less than zero, as OFFSET is unsigned now. + + * kern/disk.c (struct grub_disk_cache): Change the type of + "sector" to grub_disk_addr_t. + (grub_disk_cache_get_index): Change the type of SECTOR to + grub_disk_addr_t. Calculate the hash with SECTOR casted to + unsigned after shifting. + (grub_disk_cache_invalidate): Change the type of SECTOR to + grub_disk_addr_t. + (grub_disk_cache_unlock): Likewise. + (grub_disk_cache_store): Likewise. + (grub_disk_check_range): Change the types of SECTOR, OFFSET, SIZE, + START and LEN to grub_disk_addr_t *, grub_off_t *, grub_size_t, + grub_disk_addr_t and grub_uint64_t, respectively. + (grub_disk_read): Use an unsigned variable REAL_OFFSET for the + body, as the value of OFFSET is tweaked by + grub_disk_check_range. Change the types of START_SECTOR, LEN and + POS to grub_disk_addr_t, grub_size_t and grub_size_t, + respectively. + (grub_disk_write): Use an unsigned variable REAL_OFFSET for the + body, as the value of OFFSET is tweaked by + grub_disk_check_range. Change the types of LEN and N to + grub_size_t. + + * io/gzio.c (struct grub_gzio): Change the types of "data_offset" + and "saved_offset" to grub_off_t. + (test_header): Cast BUF to char *. + (get_byte): Cast GZIO->DATA_OFFSET to grub_off_t. Cast GZIO->INBUF + to char *. + (grub_gzio_read): Change the types of OFFSET and SIZE to + grub_off_t and grub_size_t, respectively. + + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_FORCE_LBA): + Removed. + (GRUB_BOOT_MACHINE_BOOT_DRIVE): Changed to 0x4c. + (GRUB_BOOT_MACHINE_KERNEL_ADDRESS): Changed to 0x40. + (GRUB_BOOT_MACHINE_KERNEL_SEGMENT): Changed to 0x42. + (GRUB_BOOT_MACHINE_DRIVE_CHECK): Changed to 0x4e. + (GRUB_BOOT_MACHINE_LIST_SIZE): Increased to 12. + + * include/grub/types.h (grub_off_t): Unconditionally set to + grub_uint64_t. + (grub_disk_addr_t): Changed to grub_uint64_t. + + * include/grub/partition.h (struct grub_partition): Change the + types of "start", "len" and "offset" to grub_disk_addr_t, + grub_uint64_t and grub_disk_addr_t, respectively. + (grub_partition_get_start): Return grub_disk_addr_t. + (grub_partition_get_len): Return grub_uint64_t. + + * include/grub/misc.h (grub_strtoull): New prototype. + (grub_divmod64): Likewise. + + * include/grub/fshelp.h (grub_fshelp_read_file): Change the types + of SECTOR, LEN and FILESIZE to grub_disk_addr_t, grub_size_t and + grub_off_t, respectively. + All callers and references changed. + + * include/grub/fs.h (struct grub_fs): Change the type of LEN to + grub_size_t in "read". + All callers and references changed. + + * include/grub/file.h (struct grub_file): Change the types of + "offset" and "size" to grub_off_t and grub_off_t, + respectively. Change the type of SECTOR to grub_disk_addr_t in + "read_hook". + (grub_file_read): Change the type of LEN to grub_size_t. + (grub_file_seek): Return grub_off_t. Change the type of OFFSET to + grub_off_t. + (grub_file_size): Return grub_off_t. + (grub_file_tell): Likewise. + All callers and references changed. + + * include/grub/disk.h (struct grub_disk_dev): Change the types of + SECTOR and SIZE to grub_disk_addr_t and grub_size_t in "read" and + "write". + (struct grub_disk): Change the type of "total_sectors" to + grub_uint64_t. Change the type of SECTOR to grub_disk_addr_t in + "read_hook". + (grub_disk_read): Change the types of SECTOR, OFFSET and SIZE to + grub_disk_addr_t, grub_off_t and grub_size_t, respectively. + (grub_disk_write): Likewise. + All callers and references changed. + + * fs/iso9660.c (grub_iso9660_susp_iterate): Cast parameters to + char * for grub_strncmp to silence gcc. + (grub_iso9660_mount): Likewise. + (grub_iso9660_mount): Likewise. + (grub_iso9660_read_symlink): Likewise. Also, remove the nonsense + return statement. + (grub_iso9660_iterate_dir): Likewise. + (grub_iso9660_label): Cast DATA->VOLDESC.VOLNAME to char *. + + * fs/hfs.c (grub_hfs_read_file): Change the types of SECTOR and + LEN to grub_disk_addr_t and grub_size_t, respectively. + + * fs/hfsplus.c (grub_hfsplus_read_file): Likewise. + + * fs/jfs.c (grub_jfs_read_file): Likewise. + + * fs/minix.c (grub_jfs_read_file): Likewise. + + * fs/sfs.c (grub_jfs_read_file): Likewise. + + * fs/ufs.c (grub_jfs_read_file): Likewise. + + * fs/xfs.c (grub_jfs_read_file): Likewise. + + * fs/fat.c (grub_fat_read_data): Change the types of SECTOR, LEN + and SIZE to grub_disk_addr_t, grub_size_t and grub_size_t, + respectively. + + * fs/ext2.c (grub_ext2_read_block): When an error happens, set + BLKNR to -1 instead of returning GRUB_ERRNO. + (grub_ext2_read_file): Change the types of SECTOR and + LEN to grub_disk_addr_t and grub_size_t, respectively. + + * fs/affs.c (grub_affs_read_file): Change the types of SECTOR and + LEN to grub_disk_addr_t and grub_size_t, respectively. + + * font/manager.c (grub_font_get_glyph): Cast BITMAP to char * for + grub_file_read. + + * disk/ieee1275/ofdisk.c (grub_ofdisk_read): Fix the format + string. Do not cast SECTOR explicitly. + + * disk/i386/pc/biosdisk.c (grub_biosdisk_open): Change the type of + TOTAL_SECTORS to grub_uint64_t. Do not mask DRP->TOTAL_SECTORS. + (grub_biosdisk_rw): Change the types of SECTOR and SIZE to + grub_disk_addr_t and grub_size_t, respectively. If the sector is + over 2TB and LBA mode is not supported, raise an error. + (get_safe_sectors): New function. + (grub_biosdisk_read): Use get_safe_sectors. + (grub_biosdisk_write): Likewise. + + * disk/efi/efidisk.c (grub_efidisk_read): Fix the format string. + (grub_efidisk_write): Likewise. + + * disk/loopback.c (delete_loopback): Cosmetic changes. + (grub_cmd_loopback): Likewise. Also, test NEWDEV->FILENAME + correctly. + (grub_loopback_open): Likewise. + (grub_loopback_read): Likewise. Also, change the type of POS to + grub_off_t, and fix the usage of grub_memset. + + * commands/i386/pc/play.c: Include grub/machine/time.h. + + * commands/ls.c (grub_ls_list_files): Use "llu" instead of "d" to + print FILE->SIZE. + + * commands/configfile.c: Include grub/env.h. + + * commands/cmp.c (grub_cmd_cmp): Do not use ERR, but use + GRUB_ERRNO directly instead. Change the type of POS to + grub_off_t. Follow the coding standard. + + * commands/blocklist.c: Include grub/partition.h. + (grub_cmd_blocklist): Return an error if the underlying device is + not a disk. Take the starting sector of a partition into account, + if a partition is used. + + * boot/i386/pc/diskboot.S (bootloop): Adapted to the new offset of + a length field. + (lba_mode): Support 64-bit addresses. + (chs_mode): Likewise. + (copy_buffer): Adapted to the new offsets of a length field and a + segment field. + (blocklist_default_start): Allocate 64-bit space. + + * boot/i386/pc/boot.S (force_lba): Removed. + (boot_drive): Moved to under KERNEL_SECTOR. + (kernel_sector): Moved to under KERNEL_SEGMENT. Allocate 64-bit + space. + (real_start): Set %si earlier. Remove code for FORCE_LBA, since it + is useless. + (lba_mode): Refactored to support a 64-bit address. More size + optimization. + (setup_sectors): Likewise. + +2006-06-04 Yoshinori K. Okuji + + * DISTLIST: Added include/grub/i386/linux.h. Removed + include/grub/i386/pc/linux.h + + * configure.ac (AC_INIT): Bumped to 1.94. + + * config.guess: Updated from gnulib. + * config.sub: Likewise. + * install-sh: Likewise. + * mkinstalldirs: Likewise. + +2006-06-02 Yoshinori K. Okuji + + * conf/common.rmk (grub_modules_init.lst): Depended on + grub_emu_SOURCES, excluding grub_emu_init.c, instead of + MODSRCFILES. + + * genmk.rb (PModule::rule): Reverted the previous change. + +2006-06-02 Yoshinori K. Okuji + + * conf/common.rmk (grub_modules_init.lst): Depends on + $(MODSRCFILES). Grep only the files in $(MODSRCFILES). Make sure + that the target does not exist before producing. + (grub_modules_init.h): Remove the target before generating. + (grub_emu_init.c): Likewise. + + * genmk.rb (PModule::rule): Add source files into MODSRCFILES. + +2006-05-31 Jeroen Dekkers + + * configure.ac: Don't set host_m32 for x86_64. Also reset LIBS + for the target-specific tests. Make sure that we also have the + up-to-date target variables for those tests. + +2006-05-31 Yoshinori K. Okuji + + * genmk.rb (Image::rule): Prefix CFLAGS or ASFLAGS with TARGET_. + (PModule::rule): Likewise. + +2006-05-31 Yoshinori K. Okuji + + * genmk.rb (Image::rule): Set FLAG to CFLAGS or ASFLAGS instead of + TARGET_CFLAGS or TARGET_ASFLAGS. There is no reason why + target-specific flags should be prefixed. + (PModule::rule): Likewise. + +2006-05-30 Yoshinori K. Okuji + + * configure.ac (CMP): Check if cmp is available explicitly. + +2006-05-29 Yoshinori K. Okuji + + * util/powerpc/ieee1275/grub-install.in (host_cpu): Removed. + (target_cpu): New variable. + (pkglibdir): Use target_cpu instead of host_cpu. + + * util/i386/pc/grub-install.in (host_cpu): Removed. + (target_cpu): New variable. + (pkglibdir): Use target_cpu instead of host_cpu. + + * util/genmoddep.c: Removed. + + * kern/efi/mm.c (filter_memory_map): Use GRUB_CPU_SIZEOF_VOID_P + instead of GRUB_HOST_SIZEOF_VOID_P. + * kern/dl.c: Likewise. + + * include/grub/i386/types.h (GRUB_HOST_SIZEOF_VOID_P): Renamed to + ... + (GRUB_TARGET_SIZEOF_VOID_P): ... this. + (GRUB_HOST_SIZEOF_LONG): Renamed to ... + (GRUB_TARGET_SIZEOF_LONG): ... this. + (GRUB_HOST_WORDS_BIGENDIAN): Renamed to ... + (GRUB_TARGET_WORDS_BIGENDIAN): ... this. + * include/grub/powerpc/types.h (GRUB_HOST_SIZEOF_VOID_P): Renamed + to ... + (GRUB_TARGET_SIZEOF_VOID_P): ... this. + (GRUB_HOST_SIZEOF_LONG): Renamed to ... + (GRUB_TARGET_SIZEOF_LONG): ... this. + (GRUB_HOST_WORDS_BIGENDIAN): Renamed to ... + (GRUB_TARGET_WORDS_BIGENDIAN): ... this. + * include/grub/sparc64/types.h (GRUB_HOST_SIZEOF_VOID_P): Renamed + to ... + (GRUB_TARGET_SIZEOF_VOID_P): ... this. + (GRUB_HOST_SIZEOF_LONG): Renamed to ... + (GRUB_TARGET_SIZEOF_LONG): ... this. + (GRUB_HOST_WORDS_BIGENDIAN): Renamed to ... + (GRUB_TARGET_WORDS_BIGENDIAN): ... this. + + * include/grub/types.h [!GRUB_UTIL] (GRUB_CPU_SIZEOF_VOID_P): Use + GRUB_TARGET_SIZEOF_VOID_P instead of GRUB_HOST_SIZEOF_VOID_P. + [!GRUB_UTIL] (GRUB_CPU_SIZEOF_LONG): Use GRUB_TARGET_SIZEOF_LONG + instead of GRUB_HOST_SIZEOF_LONG. + [!GRUB_UTIL]: Refer to GRUB_TARGET_WORDS_BIGENDIAN instead of + GRUB_HOST_WORDS_BIGENDIAN to define or undefine + GRUB_CPU_WORDS_BIGENDIAN. + Refer to SIZEOF_VOID_P instead of GRUB_HOST_SIZEOF_VOID_P to + define grub_host_addr_t, grub_host_off_t, grub_host_size_t and + grub_host_ssize_t. + + * conf/i386-efi.rmk (noinst_UTILITIES): Removed. + (genmoddep_SOURCES): Likewise. + * conf/i386-pc.rmk (noinst_UTILITIES): Likewise. + (genmoddep_SOURCES): Likewise. + * conf/conf/powerpc-ieee1275.rmk (noinst_UTILITIES): Likewise. + (genmoddep_SOURCES): Likewise. + * conf/conf/conf/sparc64-ieee1275.rmk (noinst_UTILITIES): + Likewise. + (genmoddep_SOURCES): Likewise. + + * genmoddep.awk: New file. + + * genmk.rb (Image::rule): Use TARGET_CC, TARGET_CPPFLAGS, + TARGET_CFLAGS, TARGET_ASFLAGS and TARGET_LDFLAGS instead of CC, + CPPFLAGS, CFLAGS, ASFLAGS and LDFLAGS, respectively. + (PModule::rule): Likewise. + (Program::rule): Likewise. + (Utility::rule): Use CC, CPPFLAGS, CFLAGS and LDFLAGS instead of + BUILD_CC, BUILD_CPPFLAGS, BUILD_CFLAGS and BUILD_LDFLAGS, + respectively. + + * configure.ac: Rewritten intensively to use host and target + instead of build and host, respectively. + + * Makefile.in (pkglibdir): Use target_cpu instead of host_cpu. + (host_cpu): Removed. + (target_cpu): New variable. + (CPPFLAGS): Added @CPPFLAGS@ and -DGRUB_LIBDIR=\"$(pkglibdir)\". + (BUILD_CC): Removed. + (BUILD_CFLAGS): Likewise. + (BUILD_CPPFLAGS): Likewise. + (TARGET_CC): New variable. + (TARGET_CFLAGS): Likewise. + (TARGET_CPPFLAGS): Likewise. + (TARGET_LDFLAGS): Likewise. + (AWK): Likewise. + (include): Use target_cpu instead of host_cpu. + (moddep.lst:): Use genmoddep.awk instead of genmoddep. + + * DISTLIST: Added genmoddep.awk. Removed util/genmoddep.c. + +2006-05-29 Vesa Jaaskelainen + + * include/grub/script.h (grub_script_cmdif): Renamed field 'bool' to + 'exec_to_evaluate'. Renamed field 'true' to 'exec_on_true'. Renamed + field 'false' to 'exec_on_false'. + (grub_script_create_cmdif): Renamed argument names to reflect above + changes. + + * normal/execute.c (grub_script_execute_cmdif): Likewise. + + * normal/script.c (grub_script_create_cmdif): Likewise. + +2006-05-28 Yoshinori K. Okuji + + * fs/hfsplus.c (grub_hfsplus_btree_recoffset): Moved to near the + top. + (grub_hfsplus_btree_recptr): Likewise. + (grub_hfsplus_find_block): Do not take RETRY any longer. Use + FILEBLOCK both to pass a block number and store next block + number. + (grub_hfsplus_read_block): Rewritten heavily to support an extent + overflow file correctly. Specify errors appropriately, because + fshelp expects that GRUB_ERRNO is set when fails. Reuse + grub_hfsplus_btree_recptr to get the pointer to a found key. + (grub_hfsplus_btree_search): Return 1 instead of 0 when no match + is found. + + * conf/i386-efi.rmk (pkgdata_MODULES): Added _linux.mod and + linux.mod. + (_linux_mod_SOURCES): New variable. + (_linux_mod_CFLAGS): Likewise. + (_linux_mod_LDFLAGS): Likewise. + (linux_mod_SOURCES): Likewise. + (linux_mod_CFLAGS): Likewise. + (linux_mod_LDFLAGS): Likewise. + + * DISTLIST: Added loader/i386/efi/linux.c, + loader/i386/efi/linux_normal.c and + include/grub/i386/efi/loader.h. + + * loader/i386/efi/linux.c: New file. + * loader/i386/efi/linux_normal.c: Likewise. + * include/grub/i386/efi/loader.h: Likewise. + +2006-05-27 Yoshinori K. Okuji + + * commands/blocklist.c: New file. + + * DISTLIST: Added commands/blocklist.c. + + * term/efi/console.c (grub_console_highlight_color): Use a lighter + color for the background, and a darker color for the foreground. + (grub_console_checkkey): Return READ_KEY. + (grub_console_cls): Set the background to + GRUB_EFI_BACKGROUND_BLACK temporarily to clean out the screen. + + * kern/efi/efi.c (grub_efi_exit_boot_services): New function. + + * include/grub/i386/linux.h (struct linux_kernel_params): Fixed + the size of "padding5", "hd0_drive_info" and "hd1_drive_info". + + * include/grub/efi/efi.h (grub_efi_exit_boot_services): New + prototype. + + * include/grub/efi/api.h (GRUB_EFI_TEXT_ATTR): Do not shift + BG. The spec is wrong again. + + * include/grub/normal.h [GRUB_UTIL] (grub_blocklist_init): New + prototype. + [GRUB_UTIL] (grub_blocklist_fini): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Added + commands/blocklist.c. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * conf/common.rmk (pkgdata_MODULES): Added blocklist.mod. + (blocklist_mod_SOURCES): New variable. + (blocklist_mod_CFLAGS): Likewise. + (blocklist_mod_LDFLAGS): Likewise. + +2006-05-20 Yoshinori K. Okuji + + * boot/i386/pc/boot.S (real_start): Set %si earlier to eliminate + duplication. + (lba_mode): Use %eax more intensively to reduce the code size. + +2006-05-20 Marco Gerards + + * normal/lexer.c (grub_script_yylex): Don't filter out newlines. + + * normal/parser.y (commandblock): Defined as . A subroutine + for `menuentry'. + (script): Accept leading newlines. + (newlines): New rule to describe 0 or more newlines. + (commands): Accept `command' with trailing newline. Fixed the + order in which arguments were passed to `grub_script_add_cmd'. + Accept commands separated by newlines. + (function): Changed to accept newlines. + (menuentry) Rewritten. + + * normal/script.c (grub_script_create_cmdmenu): Add new entries in + front of the list, instead of to the end. + +2006-05-19 Yoshinori K. Okuji + + * util/i386/pc/grub-install.in (bindir): New variable. + (grub_mkimage): Use BINDIR instead of SBINDIR. Reported by Lee + Shaver . + +2006-05-14 Yoshinori K. Okuji + + * kern/i386/pc/startup.S: Include grub/cpu/linux.h instead of + grub/machine/linux.h + * loader/i386/pc/linux.c: Likewise. + + * include/grub/i386/pc/linux.h: Moved to ... + * include/grub/i386/linux.h: ... here. + + * include/grub/i386/linux.h (struct linux_kernel_params): New + struct. + +2006-05-09 Vesa Jaaskelainen + + * video/i386/pc/vbe.c (grub_video_vbe_fill_rect): Corrected bounds + checking. + (grub_video_vbe_blit_glyph): Likewise. + (grub_video_vbe_blit_bitmap): Likewise. + (grub_video_vbe_blit_render_target): Likewise. + +2006-05-09 Yoshinori K. Okuji + + * configure.ac (--with-platform): Properly quote the square + brackets. + +2006-05-08 Marco Gerards + + * conf/powerpc-ieee1275.rmk (grubof_HEADERS): Renamed from + this... + (kernel_elf_HEADERS): ...to this. Updated all users. + (grubof_symlist.c): Renamed from this... + (kernel_elf_symlist.c): ...to this. Updated all users. + (pkgdata_PROGRAMS): Changed `grubof' to `kernel.elf'. + (grubof_SOURCES): Renamed from this... + (kernel_elf_SOURCES): ...to this. + (grubof_HEADERS): Renamed from this... + (kernel_elf_HEADERS): ...to this. + (grubof_CFLAGS): Renamed from this... + (kernel_elf_CFLAGS): ...to this. + (grubof_ASFLAGS): Renamed from this... + (kernel_elf_ASFLAGS): ...to this. + (grubof_LDFLAGS): Renamed from this... + (kernel_elf_LDFLAGS): ...to this. + + * conf/sparc64-ieee1275.rmk (grubof_HEADERS): Renamed from + this... + (kernel_elf_HEADERS): ...to this. Updated all users. + (grubof_symlist.c): Renamed from this... + (kernel_elf_symlist.c): ...to this. Updated all users. + (pkgdata_PROGRAMS): Changed `grubof' to `kernel.elf'. + (grubof_SOURCES): Renamed from this... + (kernel_elf_SOURCES): ...to this. + (grubof_HEADERS): Renamed from this... + (kernel_elf_HEADERS): ...to this. + (grubof_CFLAGS): Renamed from this... + (kernel_elf_CFLAGS): ...to this. + (grubof_ASFLAGS): Renamed from this... + (kernel_elf_ASFLAGS): ...to this. + (grubof_LDFLAGS): Renamed from this... + (kernel_elf_LDFLAGS): ...to this. + + * util/powerpc/ieee1275/grub-mkimage.c (add_segments): Use + `kernel.elf' instead of `grubof'. + +2006-05-08 Yoshinori K. Okuji + + Add --with-platform to configure. Use pkglibdir instead of + pkgdatadir. This is reported by Roger Leigh. + + * util/powerpc/ieee1275/grub-install.in (datadir): Removed. + (host_vendor): Likewise. + (host_os): Likewise. + (pkgdatadir): Likewise. + (platform): New variable. + (pkglibdir): Likewise. + Use PKGLIBDIR instead of PKGDATADIR. + + * util/i386/pc/grub-install.in (datadir): Removed. + (host_vendor): Likewise. + (host_os): Likewise. + (pkgdatadir): Likewise. + (platform): New variable. + (pkglibdir): Likewise. + Use PKGLIBDIR instead of PKGDATADIR. + + * util/powerpc/ieee1275/grub-mkimage.c (usage): Use GRUB_LIBDIR + instead of GRUB_DATADIR. + (main): Likewise. + * util/i386/pc/grub-mkimage.c (usage): Likewise. + (main): Likewise. + * util/i386/efi/grub-mkimage.c (usage): Likewise. + (main): Likewise. + + * configure.ac (--with-platform): New option. + Use PLATFORM instead of HOST_VENDOR to specify a platform. + + * Makefile.in: Include a makefile based on PLATFORM instead of + HOST_VENDOR. + (pkgdatadir): Not appended by the machine type. + (pkglibdir): Appended by the machine type. + (host_vendor): Removed. + (platform): New variable. + (BUILD_CPPFLAGS): Specify GRUB_LIBDIR instead of GRUB_DATADIR. + (install-local): Use PKGLIBDIR instead of PKGDATADIR. + (uninstall): Likewise. + +2006-05-07 Yoshinori K. Okuji + + Use the environment context in the menu. Remove the commands + "default" and "timeout", and use variables instead. + + * normal/menu.c: Include grub/env.h. + (print_entry): Cast TITLE to silence gcc. + (get_timeout): New function. + (set_timeout): Likewise. + (get_entry_number): Likewise. + (run_menu): Use a default entry, a fallback entry and a timeout + in the environment variables "default", "fallback" and + "timeout". Also, tweak the default entry if it is not within the + current menu entries. + (grub_menu_run): Use a fallback entry in the environment variable + "fallback". + + * normal/main.c (read_config_file): Do not initialize + NEWMENU->DEFAULT_ENTRY, NEWMENU->FALLBACK_ENTRY or + NEWMENU->TIMEOUT. + (grub_normal_execute): Use a data slot to store the menu. + + * include/grub/normal.h (struct grub_menu): Removed default_entry, + fallback_entry and timeout. + (struct grub_menu_list): Removed. + (grub_menu_list_t): Likewise. + (struct grub_context): Likewise. + (grub_context_t): Likewise. + (grub_context_get): Likewise. + (grub_context_get_current_menu): Likewise. + (grub_context_push_menu): Likewise. + (grub_context_pop_menu): Likewise. + (grub_default_init): Likewise. + (grub_default_fini): Likewise. + (grub_timeout_init): Likewise. + (grub_timeout_fini): Likewise. + + * conf/sparc64-ieee1275.rmk (pkgdata_MODULES): Removed default.mod + and timeout.mod. + (normal_mod_SOURCES): Removed normal/context.c. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Removed + commands/default.c, commands/timeout.c and normal/context.c. + (normal_mod_SOURCES): Removed normal/context.c. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Removed commands/default.c, + commands/timeout.c and normal/context.c. + (normal_mod_SOURCES): Removed normal/context.c. + + * conf/i386-efi.rmk (grub_emu_SOURCES): Removed + commands/default.c, commands/timeout.c and normal/context.c. + (normal_mod_SOURCES): Removed normal/context.c. + + * conf/common.rmk (pkgdata_MODULES): Removed default.mod and + timeout.mod. + (default_mod_SOURCES): Removed. + (default_mod_CFLAGS): Likewise. + (default_mod_LDFLAGS): Likewise. + (timeout_mod_SOURCES): Removed. + (timeout_mod_CFLAGS): Likewise. + (timeout_mod_LDFLAGS): Likewise. + + * DISTLIST: Removed commands/default.c, commands/timeout.c and + normal/context.c. + + * commands/default.c: Removed. + * commands/timeout.c: Likewise. + * normal/context.c: Likewise. + +2006-05-07 Vesa Jaaskelainen + + * kern/i386/pc/startup.S (grub_exit): Added missing .code32 tag. + +2006-05-02 Yoshinori K. Okuji + + * kern/env.c (struct grub_env_context): Removed "sorted". Renamed + "next" to "prev" for readability. + (struct grub_env_sorted_var): New struct. + (grub_env_context): Renamed to ... + (initial_context): ... this. + (grub_env_var_context): Renamed to ... + (current_context): ... this. + (grub_env_find): Look only at CURRENT_CONTEXT. + (grub_env_context_open): Rewritten to copy exported variables from + previous context. + (grub_env_context_close): Rewritten according to the new + scheme. Also, add an assertion to prevent the initial context from + removed. + (grub_env_insert): Removed the code for the sorted list. + (grub_env_remove): Likewise. + (grub_env_export): Simply mark the variable with + GRUB_ENV_VAR_GLOBAL. + (grub_env_set): A cosmetic change for naming consistency. + (grub_env_get): Likewise. + (grub_env_unset): Likewise. + (grub_env_iterate): Rewritten to sort variables within this + function. + (grub_register_variable_hook): Fixed for naming consistency. Call + grub_env_find again, only if NAME is not found at the first time. + (mangle_data_slot_name): New function. + (grub_env_set_data_slot): Likewise. + (grub_env_get_data_slot): Likewise. + (grub_env_unset_data_slot): Likewise. + + * include/grub/env.h (grub_env_var_type): New enum. + (GRUB_ENV_VAR_LOCAL): New constant. + (GRUB_ENV_VAR_GLOBAL): Likewise. + (GRUB_ENV_VAR_DATA): Likewise. + (struct grub_env_var): Removed "sort_next" and "sort_prevp". Added + "type". + (grub_env_set): Replace VAR with NAME for consistency. + (grub_register_variable_hook): Likewise. + (grub_env_export): Specify the name of the argument. + (grub_env_set_data_slot): New prototype. + (grub_env_get_data_slot): Likewise. + (grub_env_unset_data_slot): Likewise. + +2006-04-30 Yoshinori K. Okuji + + Extend the loader so that GRUB can accept a loader which comes + back to GRUB when a loaded image exits. Also, this change adds + support for a chainloader on EFI. + + * term/efi/console.c: Include grub/misc.h. + (grub_console_checkkey): Display a scan code on the top for + debugging. This will be removed once the EFI port gets stable. + Correct the scan code mapping. + + * kern/efi/mm.c (sort_memory_map): Sort in a descending order to + allocate memory from larger regions, in order to reduce the number + of allocated regions. Otherwise, the MacOSX loader panics. + (filter_memory_map): Avoid less than 1MB for compatibility with + other loaders. + (add_memory_regions): Allocate from the tail of a region, if + possible, to avoid allocating a region near to 1MB, for the MacOSX + loader. + + * kern/efi/init.c (grub_efi_set_prefix): Specify + GRUB_EFI_IMAGE_HANDLE to grub_efi_get_loaded_image. + + * kern/efi/efi.c (grub_efi_get_loaded_image): Accept a new + argument IMAGE_HANDLE and specify it to get a loaded image. + (grub_arch_modules_addr): Specify GRUB_EFI_IMAGE_HANDLE to + grub_efi_get_loaded_image. + (grub_efi_get_filename): Divide the length by the size of + grub_efi_char16_t. + (grub_efi_get_device_path): New function. + (grub_efi_print_device_path): Print End Device Path nodes. Divide + the length by the size of grub_efi_char16_t for a file path device + path node. + + * kern/loader.c (grub_loader_noreturn): New variable. + (grub_loader_set): Accept a new argument NORETURN. Set + GRUB_LOADER_NORETURN to NORETURN. + All callers changed. + (grub_loader_boot): If GRUB_LOADER_NORETURN is false, do not call + grub_machine_fini. + + * include/grub/efi/efi.h (grub_efi_get_device_path): New + prototype. + (grub_efi_get_loaded_image): Take an argument to specify an image + handle. + + * include/grub/loader.h (grub_loader_set): Added one more argument + NORETURN. + + * disk/efi/efidisk.c (make_devices): Use grub_efi_get_device_path + instead of grub_efi_open_protocol. + (grub_efidisk_get_device_name): Likewise. + (grub_efidisk_close): Print a newline. + (grub_efidisk_get_device_handle): Fixed to use + GRUB_EFI_DEVICE_PATH_SUBTYPE instead of + GRUB_EFI_DEVICE_PATH_TYPE. + + * disk/efi/efidisk.c (device_path_guid): Moved to ... + * kern/efi/efi.c (device_path_guid): ... here. + + * conf/i386-efi.rmk (pkgdata_MODULES): Added _chain.mod and + chain.mod. + (kernel_mod_HEADERS): Added efi/disk.h. + (_chain_mod_SOURCES): New variable. + (_chain_mod_CFLAGS): Likewise. + (_chain_mod_LDFLAGS): Likewise. + (chain_mod_SOURCES): Likewise. + (chain_mod_CFLAGS): Likewise. + (chain_mod_LDFLAGS): Likewise. + + * DISTLIST: Added include/grub/efi/chainloader.h, + loader/efi/chainloader.c and loader/efi/chainloader_normal.c. + + * include/grub/efi/chainloader.h: New file. + * loader/efi/chainloader.c: Likewise. + * loader/efi/chainloader_normal.c: Likewise. + +2006-04-30 Marco Gerards + + * commands/configfile.c (grub_cmd_source): New function. + (GRUB_MOD_INIT): Register the commands `source' and `.'. + (GRUB_MOD_FINI): De-register the commands `source' and `.'. + +2006-04-30 Marco Gerards + + * normal/execute.c (grub_script_execute_cmd): Change the return + type to `grub_err_t'. Correctly return the error. + (grub_script_execute_cmdline): In case a command line is not a + command or a function, try to interpret it as an assignment. + +2006-04-30 Yoshinori K. Okuji + + * fs/hfsplus.c (grub_hfsplus_read_block): Fixed a memory leak. + (grub_hfsplus_iterate_dir): Reordered to skip unknown nodes. Also, + skip a node whose name is obviously invalid as UTF-16, + i.e. contains a NUL character. Stop the iteration when the last + directory entry is found. Instead of using the return value of + grub_hfsplus_btree_iterate_node, store the value in RET and use + it, because the iterator can be stopped by the last directory + entry. + +2006-04-30 Marco Gerards + + * include/grub/env.h (grub_env_export): New prototype. Reported + by Jan C. Kleinsorge . + +2006-04-30 Marco Gerards + + * fs/hfsplus.c (grub_hfsplus_iterate_dir): Correctly calculate the + size of the extents in a catalog file record. + +2006-04-29 Marco Gerards + + * commands/configfile.c (grub_cmd_configfile): Execute the + configfile within its own context. + + * include/grub/env.h (grub_env_context_open): New prototype. + (grub_env_context_close): Likewise. + + * kern/env.c (grub_env): Removed. + (grub_env_sorted): Likewise. + (grub_env_context): New variable. + (grub_env_var_context): Likewise. + (grub_env_find): Search both the active context and the global + context. + (grub_env_context_open): New function. + (grub_env_context_close): Likewise. + (grub_env_insert): Likewise. + (grub_env_remove): Likewise. + (grub_env_export): Likewise. + (grub_env_set): Changed to use helper functions to avoid code + duplication. + (grub_env_iterate): Rewritten so both the current context and the + global context are being used. + + * normal/command.c (export_command): New function. + (grub_command_init): Register the `export' function. + +2006-04-26 Yoshinori K. Okuji + + * util/i386/pc/grub-mkimage.c (compress_kernel): Cast arguments + explicitly to suppress gcc's warnings. + * fs/fat.c (grub_fat_find_dir): Likewise. + (grub_fat_label): Likewise. + * fs/xfs.c (grub_xfs_read_inode): Likewise. + (grub_xfs_mount): Likewise. + (grub_xfs_label): Likewise. + * fs/affs.c (grub_affs_mount): Likewise. + (grub_affs_label): Likewise. + (grub_affs_iterate_dir): Likewise. + * fs/sfs.c (grub_sfs_mount): Likewise. + (grub_sfs_iterate_dir): Likewise. + * fs/ufs.c (grub_ufs_lookup_symlink): Likewise. + * fs/hfs.c (grub_hfs_mount): Likewise. + (grub_hfs_cmp_catkeys): Likewise. + (grub_hfs_find_dir): Likewise. + (grub_hfs_dir): Likewise. + (grub_hfs_label): Likewise. + * fs/jfs.c (grub_jfs_mount): Likewise. + (grub_jfs_opendir): Likewise. + (grub_jfs_getent): Likewise. + (grub_jfs_lookup_symlink): Likewise. + (grub_jfs_label): Likewise. + * fs/hfsplus.c (grub_hfsplus_cmp_catkey): Likewise. + (grub_hfsplus_iterate_dir): Likewise. + (grub_hfsplus_btree_iterate_node): Made static. + + * util/grub-emu.c (prefix): New variable. + (grub_machine_set_prefix): New function. + (main): Do not set the environment variable "prefix" here. Only + set PREFIX, which is used later by grub_machine_set_prefix. + + * include/grub/video.h: Do not include grub/symbol.h. + (grub_video_register): Not exported. This symbol is not defined in + the kernel. + (grub_video_unregister): Likewise. + (grub_video_iterate): Likewise. + (grub_video_setup): Likewise. + (grub_video_restore): Likewise. + (grub_video_get_info): Likewise. + (grub_video_get_blit_format): Likewise. + (grub_video_set_palette): Likewise. + (grub_video_get_palette): Likewise. + (grub_video_set_viewport): Likewise. + (grub_video_get_viewport): Likewise. + (grub_video_map_color): Likewise. + (grub_video_map_rgb): Likewise. + (grub_video_map_rgba): Likewise. + (grub_video_fill_rect): Likewise. + (grub_video_blit_glyph): Likewise. + (grub_video_blit_bitmap): Likewise. + (grub_video_blit_render_target): Likewise. + (grub_video_scroll): Likewise. + (grub_video_swap_buffers): Likewise. + (grub_video_create_render_target): Likewise. + (grub_video_delete_render_target): Likewise. + (grub_video_set_active_render_target): Likewise. + + * include/grub/symbol.h [GRUB_SYMBOL_GENERATOR] (EXPORT_FUNC): + Undefined. + [GRUB_SYMBOL_GENERATOR] (EXPORT_VAR): Likewise. + + * conf/sparc64-ieee1275.rmk (grubof_symlist.c): Depended on + config.h. Use gensymlist.sh instead of $(srcdir)/gensymlist.sh. + (kernel_syms.lst): Depended on config.h. Use genkernsyms.sh + instead of $(srcdir)/genkernsyms.sh. + + * conf/powerpc-ieee1275.rmk (grubof_symlist.c): Depended on + config.h. Use gensymlist.sh instead of $(srcdir)/gensymlist.sh. + (kernel_syms.lst): Depended on config.h. Use genkernsyms.sh + instead of $(srcdir)/genkernsyms.sh. + + * conf/i386-pc.rmk (symlist.c): Depended on config.h. Use + gensymlist.sh instead of $(srcdir)/gensymlist.sh. + (kernel_syms.lst): Depended on config.h. Use genkernsyms.sh + instead of $(srcdir)/genkernsyms.sh. + + * conf/i386-efi.rmk (symlist.c): Depended on config.h. Use + gensymlist.sh instead of $(srcdir)/gensymlist.sh. + (kernel_syms.lst): Depended on config.h. Use genkernsyms.sh + instead of $(srcdir)/genkernsyms.sh. + + * configure.ac (AC_CONFIG_FILES): Added gensymlist.sh and + genkernsyms.sh. + + * Makefile.in (DISTCLEANFILES): Added gensymlist.sh and + genkernsyms.sh. + (gensymlist.sh): New target. + (genkernsyms.sh): Likewise. + + * DISTLIST: Removed genkernsyms.sh and gensymlist.sh. Added + genkernsyms.sh.in and gensymlist.sh.in. + + * genkernsyms.sh: Removed. + * gensymlist.sh: Likewise. + + * genkernsyms.sh.in: New file. + * gensymlist.sh.in: Likewise. + +2006-04-25 Hollis Blanchard + + * kern/powerpc/ieee1275/init.c (grub_machine_set_prefix): Do not + clobber "prefix", since we may have already set it manually. + +2006-04-25 Hollis Blanchard + + * kern/misc.c (abort): New alias for grub_abort. + +2006-04-25 Yoshinori K. Okuji + + A new machine-specific function "grub_machine_set_prefix" is + defined. This is called after loading modules, so that a prefix + initialization can use modules. Also, this change adds an + intensive debugging feature for the memory manager via the + configure option "--enable-mm-debug". + + * partmap/gpt.c (gpt_partition_map_iterate): Add one more into + PART.LEN. + + * kern/sparc64/ieee1275/init.c (abort): Removed. + (grub_stop): Likewise. + (grub_exit): New function. + (grub_set_prefix): Renamed to ... + (grub_machine_set_prefix): ... this. + (grub_machine_init): Do not call grub_set_prefix. + + * kern/powerpc/ieee1275/init.c (grub_set_prefix): Renamed to ... + (grub_machine_set_prefix): ... this. + (grub_machine_init): Do not call grub_set_prefix. + + * kern/i386/pc/init.c (grub_machine_set_prefix): New function. + (grub_machine_init): Do not set the prefix here. + + * kern/i386/efi/init.c (grub_machine_set_prefix): New function. + + * kern/efi/init.c: Include grub/mm.h. + (grub_efi_set_prefix): New function. + + * kern/efi/efi.c (grub_exit): Call grub_efi_fini. + (grub_efi_get_filename): New function. + (grub_print_device_path): Renamed to ... + (grub_efi_print_device_path): ... this. + + * kern/mm.c [MM_DEBUG] (grub_malloc): Undefined. + [MM_DEBUG] (grub_realloc): Likewise. + [MM_DEBUG] (grub_free): Likewise. + [MM_DEBUG] (grub_memalign): Likewise. + [MM_DEBUG] (grub_mm_debug): New variable. + [MM_DEBUG] (grub_debug_malloc): New function. + [MM_DEBUG] (grub_debug_free): New function. + [MM_DEBUG] (grub_debug_realloc): New function. + [MM_DEBUG] (grub_debug_memalign): New function. + + * kern/misc.c (grub_abort): Print a newline to distinguish + the message. + + * kern/main.c (grub_main): Call grub_machine_set_prefix and + grub_set_root_dev after loading modules. This is necessary when + setting a prefix depends on modules. + + * include/grub/efi/efi.h (grub_print_device_path): Renamed to ... + (grub_efi_print_device_path): ... this. + (grub_efi_get_filename): New prototype. + (grub_efi_set_prefix): Likewise. + + * include/grub/efi/disk.h: Include grub/efi/api.h, grub/symbol.h + and grub/disk.h. + (grub_efidisk_get_device_handle): New prototype. + (grub_efidisk_get_device_name): Likewise. + + * include/grub/mm.h: Include config.h. + (MM_DEBUG): Removed. + [MM_DEBUG && !GRUB_UTIL] (grub_mm_debug): New prototype. + [MM_DEBUG && !GRUB_UTIL] (grub_malloc): New macro. + [MM_DEBUG && !GRUB_UTIL] (grub_realloc): Likewise. + [MM_DEBUG && !GRUB_UTIL] (grub_memalign): Likewise. + [MM_DEBUG && !GRUB_UTIL] (grub_free): Likewise. + [MM_DEBUG && !GRUB_UTIL] (grub_debug_malloc): New prototype. + [MM_DEBUG && !GRUB_UTIL] (grub_debug_realloc): New prototype. + [MM_DEBUG && !GRUB_UTIL] (grub_debug_memalign): New prototype. + [MM_DEBUG && !GRUB_UTIL] (grub_debug_free): New prototype. + + * include/grub/kernel.h (grub_machine_set_prefix): New prototype. + + * disk/efi/efidisk.c: Include grub/partition.h. + (iterate_child_devices): New function. + (add_device): First, compare only last device path nodes, so that + devices are sorted by the types. + (grub_efidisk_get_device_handle): New function. + (grub_efidisk_get_device_name): Likewise. + + * configure.ac (--enable-mm-debug): New option to enable the + memory manager debugging feature. This makes the binary much + bigger, so is disabled by default. + +2006-04-23 Yoshinori K. Okuji + + Use grub_abort instead of grub_stop, and grub_exit must be + define in each architecture now. Also, this change adds support + for EFI disks. + + * util/i386/pc/grub-probefs.c: Include grub/term.h. + (grub_getkey): New function. + (grub_term_get_current): Likewise. + + * util/i386/pc/grub-setup.c: Include grub/term.h. + (grub_getkey): New function. + (grub_term_get_current): Likewise. + + * util/misc.c (grub_stop): Renamed to ... + (grub_exit): ... this. + + * kern/powerpc/ieee1275/init.c (abort): Renamed to ... + (grub_exit): ... this. + (grub_machine_init): Use grub_abort instead of abort. + (grub_stop): Removed. + + * kern/powerpc/ieee1275/cmain.c (cmain): Use grub_abort instead of + abort. + + * kern/i386/pc/startup.S (grub_exit): New function. + (cold_reboot): New label. + + * kern/efi/init.c: Include grub/efi/disk.h and grub/env.h. + (grub_efi_init): Call grub_efidisk_init. + (grub_efi_fini): Call grub_efidisk_fini. + + * kern/efi/efi.c: Include grub/mm.h. + (grub_efi_console_control_guid): Renamed to ... + (console_control_guid): ... this. + (grub_efi_loaded_image_guid): Renamed to ... + (loaded_image_guid): ... this. + (grub_efi_locate_handle): New function. + (grub_efi_open_protocol): Likewise. + (grub_efi_set_text_mode): Use CONSOLE_CONTROL_GUID instead of + GRUB_EFI_CONSOLE_CONTROL_GUID. + (grub_efi_exit): Removed. + (grub_stop): Likewise. + (grub_efi_get_loaded_image): Use grub_efi_open_protocol. + (grub_exit): New function. + (grub_print_device_path): Likewise. + + * kern/rescue.c (grub_rescue_cmd_exit): New function. + (grub_enter_rescue_mode): Register "exit". + + * kern/misc.c (grub_real_dprintf): A cosmetic change. + (grub_abort): New function. + + * kern/err.c (grub_fatal): Use grub_abort instead of grub_stop. + + * include/grub/sparc64/ieee1275/kernel.h (abort): Removed. + + * include/grub/powerpc/ieee1275/kernel.h (abort): Removed. + + * include/grub/efi/efi.h (grub_efi_exit): Removed. + (grub_print_device_path): New prototype. + (grub_efi_locate_handle): Likewise. + (grub_efi_open_protocol): Likewise. + + * include/grub/efi/disk.h (grub_efidisk_fini): New file. + * disk/efi/efidisk.c: Likewise. + + * DISTLIST: Added disk/efi/efidisk.c and include/grub/efi/disk.h. + + * include/grub/efi/console_control.h + (GRUB_EFI_CONSOLE_CONTROL_GUID): Use an array for the last 8 bytes. + + * include/grub/efi/api.h (GRUB_EFI_LOADED_IMAGE_GUID): Specify the + last 8 bytes as an array. + (GRUB_EFI_DISK_IO_GUID): New macro. + (GRUB_EFI_BLOCK_IO_GUID): Likewise. + (GRUB_EFI_DEVICE_PATH_GUID): Likewise. + (grub_efi_ipv6_address_t): Change the type to grub_uint16_t from + grub_uint8_t. + (struct grub_efi_guid): Use an array to specify the last 8 bytes. + (struct grub_efi_device_path): Rename the member "sub_type" to + "subtype". + (GRUB_EFI_DEVICE_PATH_TYPE): New macro. + (GRUB_EFI_DEVICE_PATH_SUBTYPE): Likewise. + (GRUB_EFI_DEVICE_PATH_LENGTH): Likewise. + (GRUB_EFI_END_DEVICE_PATH_TYPE): Likewise. + (GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE): Likewise. + (GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE): Likewise. + (GRUB_EFI_END_ENTIRE_DEVICE_PATH): Likewise. + (GRUB_EFI_NEXT_DEVICE_PATH): Likewise. + (GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE): Likewise. + (GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE): Likewise. + (struct grub_efi_pci_device_path): New structure. + (grub_efi_pci_device_path_t): New type. + (GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_pccard_device_path): New structure. + (grub_efi_pccard_device_path_t): New type. + (GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_memory_mapped_device_path): New structure. + (grub_efi_memory_mapped_device_path_t): New type. + (GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_vendor_device_path): New structure. + (grub_efi_vendor_device_path_t): New type. + (GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_controller_device_path): New structure. + (grub_efi_controller_device_path_t): New type. + (GRUB_EFI_ACPI_DEVICE_PATH_TYPE): New macro. + (GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE): Likewise. + (struct grub_efi_acpi_device_path): New structure. + (grub_efi_acpi_device_path_t): New type. + (GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_expanded_acpi_device_path): New structure. + (grub_efi_expanded_acpi_device_path_t): New type. + (GRUB_EFI_EXPANDED_ACPI_HIDSTR): New macro. + (GRUB_EFI_EXPANDED_ACPI_UIDSTR): Likewise. + (GRUB_EFI_EXPANDED_ACPI_CIDSTR): Likewise. + (GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE): Likewise. + (GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE): Likewise. + (struct grub_efi_atapi_device_path): New structure. + (grub_efi_atapi_device_path_t): New type. + (GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_fibre_channel_device_path): New structure. + (grub_efi_fibre_channel_device_path_t): New type. + (GRUB_EFI_1394_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_1394_device_path): New structure. + (grub_efi_1394_device_path_t): New type. + (GRUB_EFI_USB_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_usb_device_path): New structure. + (grub_efi_usb_device_path_t): New type. + (GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_usb_class_device_path): New structure. + (grub_efi_usb_class_device_path_t): New type. + (GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_i2o_device_path): New structure. + (grub_efi_i2o_device_path_t): New type. + (GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_mac_address_device_path): New structure. + (grub_efi_mac_address_device_path_t): New type. + (GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_ipv4_device_path): New structure. + (grub_efi_ipv4_device_path_t): New type. + (GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_ipv6_device_path): New structure. + (grub_efi_ipv6_device_path_t): New type. + (GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_infiniband_device_path): New structure. + (grub_efi_infiniband_device_path_t): New type. + (GRUB_EFI_UART_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_uart_device_path): New structure. + (grub_efi_uart_device_path_t): New type. + (GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_vendor_messaging_device_path): New structure. + (grub_efi_vendor_messaging_device_path_t): New type. + (GRUB_EFI_MEDIA_DEVICE_PATH_TYPE): New macro. + (GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE): Likewise. + (struct grub_efi_hard_drive_device_path): New structure. + (grub_efi_hard_drive_device_path_t): New type. + (GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_cdrom_device_path): New structure. + (grub_efi_cdrom_device_path_t): New type. + (GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_vendor_media_device_path): New structure. + (grub_efi_vendor_media_device_path_t): New type. + (GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_file_path_device_path): New structure. + (grub_efi_file_path_device_path_t): New type. + (GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE): New macro. + (struct grub_efi_protocol_device_path): New structure. + (grub_efi_protocol_device_path_t): New type. + (GRUB_EFI_BIOS_DEVICE_PATH_TYPE): New macro. + (GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE): Likewise. + (struct grub_efi_bios_device_path): New structure. + (grub_efi_bios_device_path_t): New type. + (struct grub_efi_disk_io): New structure. + (grub_efi_disk_io_t): New type. + (struct grub_efi_block_io_media): New structure. + (grub_efi_block_io_media_t): New type. + (struct grub_efi_block_io): New structure. + (grub_efi_block_io_t): New type. + + * include/grub/misc.h (grub_stop): Removed. + (grub_exit): New prototype. + (grub_abort): Likewise. + + * include/grub/disk.h (enum grub_disk_dev_id): Added + GRUB_DISK_DEVICE_EFIDISK_ID. + + * conf/i386-efi.rmk (kernel_mod_SOURCES): Added + disk/efi/efidisk.c. + (kernel_syms.lst): Remove the target if an error occurs. + +2006-04-22 Yoshinori K. Okuji + + * kern/misc.c (grub_lltoa): Rewritten the decimal conversion part, + as it was simply too buggy. + +2006-04-21 Yoshinori K. Okuji + + * kern/misc.c (grub_lltoa): New function. + (grub_vsprintf): Added support for the long long suffix, + i.e. "ll". + +2006-04-20 Hollis Blanchard + + * Makefile.in (LDFLAGS): Add variable. + (LD): Remove variable. + * configure.ac: Add -m32 to LDFLAGS. + * genmk.rb (PModule#rule): Use $(CC) instead of $(LD). + * conf/powerpc-ieee1275.rmk (COMMON_LDFLAGS): Add variable. + (grubof_LDFLAGS): Use $(COMMON_LDFLAGS). + (_linux_mod_LDFLAGS, linux_mod_LDFLAGS, normal_mod_LDFLAGS, + suspend_mod_LDFLAGS, reboot_mod_LDFLAGS, halt_mod_LDFLAGS): New + variables. + * conf/sparc64-ieee1275.rmk (COMMON_LDFLAGS): Add -nostdlib. + * conf/i386-pc.rmk (COMMON_LDFLAGS): Add -nostdlib. + * conf/i386-efi.rmk (COMMON_LDFLAGS): Add -nostdlib. + +2006-04-20 Vesa Jaaskelainen + + * term/gfxterm.c (grub_gfxterm_getcharwidth): Fixed character + length for unknown glyph. + +2006-04-20 Yoshinori K. Okuji + + Add support for pre-loaded modules into the EFI port. + + * util/i386/efi/grub-mkimage.c (make_mods_section): Rewritten + completely. Accept one more argument DIR. The caller has changed. + + * kern/i386/efi/init.c (grub_arch_modules_addr): Removed. + + * kern/efi/efi.c: Include grub/efi/pe32.h and grub/kernel.h. + (grub_efi_loaded_image_guid): New variable. + (grub_efi_get_loaded_image): New function. + (grub_arch_modules_addr): Likewise. + + * include/grub/efi/efi.h (grub_efi_get_loaded_image): New + prototype. + + * include/grub/efi/api.h (GRUB_EFI_LOADED_IMAGE_GUID): New macro. + (struct grub_efi_loaded_image): New structure. + (grub_efi_loaded_image_t): New type. + +2006-04-20 Yoshinori K. Okuji + + * loader/i386/pc/linux.c (grub_rescue_cmd_linux): Compare the file + size with GRUB_OS_AREA_SIZE as grub_size_t instead of + grub_ssize_t. Reported by Jeff Chua . + +2006-04-19 Roger Leigh + + * DISTLIST: Added `util/powerpc/ieee1275/grub-install.in'. + +2006-04-19 Yoshinori K. Okuji + + * DISTLIST: Added include/grub/efi/console.h, + include/grub/efi/time.h, include/grub/i386/efi/kernel.h, + kern/efi/init.c, kern/efi/mm.c, and term/efi/console.c. + + * include/grub/efi/console.h: New file. + * include/grub/efi/time.h: Likewise. + * include/grub/i386/efi/kernel.h: Likewise. + * kern/efi/init.c: Likewise. + * kern/efi/mm.c: Likewise. + * term/efi/console.c: Likewise. + + * kern/i386/efi/init.c: Do not include grub/machine/time.h. + (grub_stop): Removed. + (grub_get_rtc): Likewise. + (grub_machine_init): Simply call grub_efi_init. + (grub_machine_fini): Call grub_efi_fini. + + * kern/efi/efi.c: Include grub/machine/time.h and grub/term.h. + (grub_efi_output_string): Removed. + (grub_efi_stall): New function. + (grub_stop): Likewise. + (grub_get_rtc): Likewise. + + * include/grub/efi/efi.h (grub_efi_output_string): Removed. + (grub_efi_stall): New prototype. + (grub_efi_allocate_pages): Likewise. + (grub_efi_free_pages): Likewise. + (grub_efi_get_memory_map): Likewise. + (grub_efi_mm_init): Likewise. + (grub_efi_mm_fini): Likewise. + (grub_efi_init): Likewise. + (grub_efi_fini): Likewise. + + * include/grub/i386/efi/time.h: Do not include + grub/symbol.h. Include grub/efi/time.h. + (GRUB_TICKS_PER_SECOND): Removed. + (grub_get_rtc): Likewise. + + * include/grub/efi/api.h (struct grub_efi_memory_descriptor): + Added padding. The EFI spec is buggy. + (GRUB_EFI_BLACK): New macro. + (GRUB_EFI_BLUE): Likewise. + (GRUB_EFI_GREEN): Likewise. + (GRUB_EFI_CYAN): Likewise. + (GRUB_EFI_RED): Likewise. + (GRUB_EFI_MAGENTA): Likewise. + (GRUB_EFI_BROWN): Likewise. + (GRUB_EFI_LIGHTGRAY): Likewise. + (GRUB_EFI_BRIGHT): Likewise. + (GRUB_EFI_DARKGRAY): Likewise. + (GRUB_EFI_LIGHTBLUE): Likewise. + (GRUB_EFI_LIGHTGREEN): Likewise. + (GRUB_EFI_LIGHTCYAN): Likewise. + (GRUB_EFI_LIGHTRED): Likewise. + (GRUB_EFI_LIGHTMAGENTA): Likewise. + (GRUB_EFI_YELLOW): Likewise. + (GRUB_EFI_WHITE): Likewise. + (GRUB_EFI_BACKGROUND_BLACK): Likewise. + (GRUB_EFI_BACKGROUND_BLUE): Likewise. + (GRUB_EFI_BACKGROUND_GREEN): Likewise. + (GRUB_EFI_BACKGROUND_CYAN): Likewise. + (GRUB_EFI_BACKGROUND_RED): Likewise. + (GRUB_EFI_BACKGROUND_MAGENTA): Likewise. + (GRUB_EFI_BACKGROUND_BROWN): Likewise. + (GRUB_EFI_BACKGROUND_LIGHTGRAY): Likewise. + (GRUB_EFI_TEXT_ATTR): Likewise. + + * conf/i386-efi.rmk (kernel_mod_SOURCES): Added kern/efi/efi.c, + kern/efi/init.c, kern/efi/mm.c, and term/efi/console.c. + (kernel_mod_HEADERS): Added efi/time.h. + +2006-04-18 Yoshinori K. Okuji + + * DISTLIST: Added conf/i386-efi.mk, conf/i386-efi.rmk, + include/grub/efi/api.h, include/grub/efi/console_control.h, + include/grub/efi/efi.h, include/grub/efi/pe32.h, + include/grub/i386/efi/time.h, kern/efi/efi.c, + kern/i386/efi/init.c, kern/i386/efi/startup.S, + and util/i386/efi/grub-mkimage.c. + + * Makefile.in (RMKFILES): Added i386-efi.rmk. + + * genmk.rb (PModule#rule): Do not export symbols if + #{prefix}_EXPORTS is set to "no". + + * conf/i386-efi.mk: New file. + * conf/i386-efi.rmk: Likewise. + * include/grub/efi/api.h: Likewise. + * include/grub/efi/console_control.h: Likewise. + * include/grub/efi/efi.h: Likewise. + * include/grub/efi/pe32.h: Likewise. + * include/grub/i386/efi/time.h: Likewise. + * kern/efi/efi.c: Likewise. + * kern/i386/efi/init.c: Likewise. + * kern/i386/efi/startup.S: Likewise. + * util/i386/efi/grub-mkimage.c: Likewise. + +2006-04-17 Marco Gerards + + * include/grub/script.h: Include and + "grub_script.tab.h". + (struct grub_lexer_param): New struct. + (struct grub_parser_param): Likewise. + (grub_script_create_arglist): Pass the state in an argument. + (grub_script_add_arglist): Likewise. + (grub_script_create_cmdline): Likewise. + (grub_script_create_cmdblock): Likewise. + (grub_script_create_cmdif): Likewise. + (grub_script_create_cmdmenu): Likewise. + (grub_script_add_cmd): Likewise. + (grub_script_arg_add): Likewise. + (grub_script_lexer_ref): Likewise. + (grub_script_lexer_deref): Likewise. + (grub_script_lexer_record_start): Likewise. + (grub_script_lexer_record_stop): Likewise. + (grub_script_mem_record): Likewise. + (grub_script_mem_record_stop): Likewise. + (grub_script_malloc): Likewise. + (grub_script_yylex): Likewise. + (grub_script_yyparse): Likewise. + (grub_script_yyerror): Likewise. + (grub_script_yylex): Likewise. + (grub_script_lexer_init): Return the state. + + * normal/lexer.c (grub_script_lexer_state): Removed variable. + (grub_script_lexer_done): Likewise. + (grub_script_lexer_getline): Likewise. + (grub_script_lexer_refs): Likewise. + (script): Likewise. + (newscript): Likewise. + (record): Likewise. + (recording): Likewise. + (recordpos): Likewise. + (recordlen): Likewise. + (grub_script_lexer_init): Return the state instead of setting + global variables. + (grub_script_lexer_ref): Use the newly added argument for state + instead of globals. + (grub_script_lexer_deref): Likewise. + (grub_script_lexer_record_start): Likewise. + (grub_script_lexer_record_stop): Likewise. + (recordchar): Likewise. + (nextchar): Likewise. + (grub_script_yylex2): Likewise. + (grub_script_yylex): Likewise. + (grub_script_yyerror): Likewise. + + * normal/parser.y (func_mem): Removed variable. + (menu_entry): Likewise. + (err): Likewise. + (%lex-param): New parser option. + (%parse-param): Likewise. + (script): Always return the AST. + (argument): Pass the state around. + (arguments): Likewise. + (grubcmd): Likewise. + (commands): Likewise. + (function): Likewise. + (menuentry): Likewise. + (if_statement): Likewise. + (if): Likewise. + + * normal/script.c (grub_script_memused): Removed variable. + (grub_script_parsed): Likewise. + (grub_script_malloc): Added a state argument. Use that instead of + global variables. + (grub_script_mem_record): Likewise. + (grub_script_mem_record_stop): Likewise. + (grub_script_arg_add): Likewise. + (grub_script_add_arglist): Likewise. + (grub_script_create_cmdline): Likewise. + (grub_script_create_cmdif): Likewise. + (grub_script_create_cmdmenu): Likewise. + (grub_script_add_cmd): Likewise. + (grub_script_parse): Setup the state before calling the parser. + +2006-04-16 Marco Gerards + + * normal/command.c (grub_command_init): Remove the title command. + + * normal/lexer.c (grub_script_yylex): Renamed from this... + (grub_script_yylex2): ... to this. + (grub_script_yylex): New function. Temporary + introduced to filter some tokens. + (grub_script_yyerror): Print a newline. + + * normal/main.c (read_config_file): Output information about the + lines that contain errors. Wait for a key after all lines have + been processed. Don't return an empty menu. + + * normal/parser.y (func_mem): Don't initialize. + (menu_entry): Likewise. + (err): New variable. + (script): Don't return anything when an error was encountered. + (ws, returns): Removed rules. + (argument): Disabled concatenated variable support. + (arguments): Remove explicit separators. + (grubcmd): Likewise. + (function): Likewise. + (menuentry): Likewise. + (if): Likewise. + (commands): Likewise. Add error handling. + + * normal/script.c (grub_script_create_cmdline): If + `grub_script_parsed' is 0, assume the parser encountered an error. + +2006-04-02 Yoshinori K. Okuji + + * configure.ac: Add support for EFI. Fix the typo + BUILD_LDDFLAGS. Restore the LDFLAGS after testing. + +2006-04-01 Vesa Jaaskelainen + + * util/unifont2pff.rb: Removed unnecessary byte ordering. Now + foreign multibyte characters should be shown correctly. + +2006-04-01 Vesa Jaaskelainen + + * normal/main.c (grub_normal_menu_addentry): Fixed menu size + calculation. + (read_config_file): Made it to close file before returning. + +2006-03-31 Vesa Jaaskelainen + + * DISTLIST: Added include/grub/i386/pc/vbeblit.h, + include/grub/i386/pc/vbefill.h, video/i386/pc/vbeblit.c, + video/i386/pc/vbefill.c. + + * conf/i386-pc.rmk (vbe_mod_SOURCES): Added video/i386/pc/vbeblit.c, + video/i386/pc/vbefill.c. + + * include/grub/video.h (grub_video_blit_format): New enum. + (grub_video_mode_info): Added new member blit_format. + (grub_video_get_blit_format): New function prototype. + + * include/grub/i386/pc/vbe.h (grub_video_vbe_get_video_ptr): New + function prototype. + (grub_video_vbe_map_rgb): Likewise. + (grub_video_vbe_unmap_color): Likewise. + + * include/grub/i386/pc/vbeblit.h: New file. + + * include/grub/i386/pc/vbefill.h: New file. + + * video/video.c (grub_video_get_blit_format): New function. + (grub_video_vbe_get_video_ptr): Re-declared as non-static. + (grub_video_vbe_map_rgb): Likewise. + (grub_video_vbe_unmap_color): Likewise. + + * video/i386/pc/vbe.c (grub_video_vbe_fill_rect): Changed to use more + optimized fills. + (grub_video_vbe_blit_render_target): Changed to use more optimized + blits. + (grub_video_vbe_setup): Added detection for optimized settings. + (grub_video_vbe_create_render_target): Likewise. + + * video/i386/pc/vbeblit.c: New file. + + * video/i386/pc/vbefill.c: New file. + +2006-03-30 Vesa Jaaskelainen + + * font/manager.c (grub_font_get_glyph): Removed font fixup from + here... + + * util/unifont2pff.rb: ... and moved it to here. Improved argument + parsing to support both hex and dec ranges. If filename was missing + show usage information. + +2006-03-14 Vesa Jaaskelainen + + * DISTLIST: Added include/grub/video.h, term/gfxterm.c, + video/video.c, commands/videotest.c. Removed term/i386/pc/vesafb.c. + + * conf/i386-pc.rmk (pkgdata_MODULES): Added video.mod, + gfxterm.mod, videotest.mod. Removed vga.mod, vesafb.mod. + (video_mod_SOURCES): Added. + (video_mod_CFLAGS): Likewise. + (video_mod_LDFLAGS): Likewise. + (gfxterm_mod_SOURCES): Likewise. + (gfxterm_mod_CFLAGS): Likewise. + (gfxterm_mod_LDFLAGS): Likewise. + (videotest_mod_SOURCES): Likewise. + (videotest_mod_CFLAGS): Likewise. + (videotest_mod_LDFLAGS): Likewise. + (vesafb_mod_SOURCES): Removed. + (vesafb_mod_CFLAGS): Likewise. + (vesafb_mod_LDFLAGS): Likewise. + (vga_mod_SOURCES): Likewise. + (vga_mod_CFLAGS): Likewise. + (vga_mod_LDFLAGS): Likewise. + + * commands/videotest.c: New file. + + * font/manager.c (fill_with_default_glyph): Modified to use + grub_font_glyph. + (grub_font_get_glyph): Likewise. + (fontmanager): Renamed from this... + (font_manager): ... to this. + + * include/grub/font.h (grub_font_glyph): Added new structure. + (grub_font_get_glyph): Modified to use grub_font_glyph. + + * include/grub/misc.h (grub_abs): Added as inline function. + + * include/grub/video.h: New file. + + * include/grub/i386/pc/vbe.h (GRUB_VBE_STATUS_OK): New macro. + (GRUB_VBE_MEMORY_MODEL_PACKED_PIXEL): Likewise. + (GRUB_VBE_MEMORY_MODEL_DIRECT_COLOR): Likewise. + (grub_vbe_get_controller_info): Renamed from this... + (grub_vbe_bios_get_controller_info): ... to this. + (grub_vbe_get_mode_info): Renamed from this... + (grub_vbe_bios_get_mode_info): ... to this. + (grub_vbe_set_mode): Renamed from this... + (grub_vbe_bios_set_mode): ... to this. + (grub_vbe_get_mode): Renamed from this... + (grub_vbe_bios_get_mode): ... to this. + (grub_vbe_set_memory_window): Renamed from this... + (grub_vbe_bios_set_memory_window): ... to this. + (grub_vbe_get_memory_window): Renamed from this... + (grub_vbe_bios_get_memory_window): ... to this. + (grub_vbe_set_scanline_length): Renamed from this... + (grub_vbe_set_scanline_length): ... to this. + (grub_vbe_get_scanline_length): Renamed from this... + (grub_vbe_bios_get_scanline_length): ... to this. + (grub_vbe_set_display_start): Renamed from this... + (grub_vbe_bios_set_display_start): ... to this. + (grub_vbe_get_display_start): Renamed from this... + (grub_vbe_bios_get_display_start): ... to this. + (grub_vbe_set_palette_data): Renamed from this... + (grub_vbe_bios_set_palette_data): ... to this. + (grub_vbe_set_pixel_rgb): Removed. + (grub_vbe_set_pixel_index): Likewise. + + * kern/i386/pc/startup.S (grub_vbe_get_controller_info): Renamed + from this... + (grub_vbe_bios_get_controller_info): ... to this. + (grub_vbe_get_mode_info): Renamed from this... + (grub_vbe_bios_get_mode_info): ... to this. + (grub_vbe_set_mode): Renamed from this... + (grub_vbe_bios_set_mode): ... to this. + (grub_vbe_get_mode): Renamed from this... + (grub_vbe_bios_get_mode): ... to this. + (grub_vbe_set_memory_window): Renamed from this... + (grub_vbe_bios_set_memory_window): ... to this. + (grub_vbe_get_memory_window): Renamed from this... + (grub_vbe_bios_get_memory_window): ... to this. + (grub_vbe_set_scanline_length): Renamed from this... + (grub_vbe_set_scanline_length): ... to this. + (grub_vbe_get_scanline_length): Renamed from this... + (grub_vbe_bios_get_scanline_length): ... to this. + (grub_vbe_set_display_start): Renamed from this... + (grub_vbe_bios_set_display_start): ... to this. + (grub_vbe_get_display_start): Renamed from this... + (grub_vbe_bios_get_display_start): ... to this. + (grub_vbe_set_palette_data): Renamed from this... + (grub_vbe_bios_set_palette_data): ... to this. + (grub_vbe_bios_get_controller_info): Fixed problem with registers + getting corrupted after calling it. Added more pushes and pops. + (grub_vbe_bios_set_mode): Likewise. + (grub_vbe_bios_get_mode): Likewise. + (grub_vbe_bios_get_memory_window): Likewise. + (grub_vbe_bios_set_scanline_length): Likewise. + (grub_vbe_bios_get_scanline_length): Likewise. + (grub_vbe_bios_get_display_start): Likewise. + (grub_vbe_bios_set_palette_data): Likewise. + + * normal/cmdline.c (cl_set_pos): Refresh the screen. + (cl_insert): Likewise. + (cl_delete): Likewise. + + * term/gfxterm.c: New file. + + * term/i386/pc/vesafb.c: Removed file. + + * video/video.c: New file. + + * video/i386/pc/vbe.c (real2pm): Added new function. + (grub_video_vbe_draw_pixel): Likewise. + (grub_video_vbe_get_video_ptr): Likewise. + (grub_video_vbe_get_pixel): Likewise + (grub_video_vbe_init): Likewise. + (grub_video_vbe_fini): Likewise. + (grub_video_vbe_setup): Likewise. + (grub_video_vbe_get_info): Likewise. + (grub_video_vbe_set_palette): Likewise. + (grub_video_vbe_get_palette): Likewise. + (grub_video_vbe_set_viewport): Likewise. + (grub_video_vbe_get_viewport): Likewise. + (grub_video_vbe_map_color): Likewise. + (grub_video_vbe_map_rgb): Likewise. + (grub_video_vbe_map_rgba): Likewise. + (grub_video_vbe_unmap_color): Likewise. + (grub_video_vbe_fill_rect): Likewise. + (grub_video_vbe_blit_glyph): Likewise. + (grub_video_vbe_blit_bitmap): Likewise. + (grub_video_vbe_blit_render_target): Likewise. + (grub_video_vbe_scroll): Likewise. + (grub_video_vbe_swap_buffers): Likewise. + (grub_video_vbe_create_render_target): Likewise. + (grub_video_vbe_delete_render_target): Likewise. + (grub_video_vbe_set_active_render_target): Likewise. + (grub_vbe_set_pixel_rgb): Remove function. + (grub_vbe_set_pixel_index): Likewise. + (index_color_mode): Remove static variable. + (active_mode): Likewise. + (framebuffer): Likewise. + (bytes_per_scan_line): Likewise. + (grub_video_vbe_adapter): Added new static variable. + (framebuffer): Likewise. + (render_target): Likewise. + (initial_mode): Likewise. + (mode_in_use): Likewise. + (mode_list): Likewise. + +2006-03-10 Marco Gerards + + * configure.ac (AC_INIT): Bumped to 1.93. + + * DISTLIST: Added `include/grub/hfs.h'. + +2006-02-01 Yoshinori K. Okuji + + * boot/i386/pc/boot.S (general_error): Before looping, try INT + 18H, which might help the BIOS falling back to next boot media. + +2006-01-25 Yoshinori K. Okuji + + * util/i386/pc/grub-install.in: Escape a backslash. Reported by + Poe Chen . + +2006-01-17 Marco Gerards + + * include/grub/normal.h: Include . + (grub_command_list): Removed struct. + (grub_command_list_t): Removed type. + (grub_menu_entry): Remove members `num' and `command_list'. Add + members `commands' and `sourcecode'. + * include/grub/script.h: Add inclusion guards. + (grub_script_cmd_menuentry): New struct. + (grub_script_execute_menuentry): New prototype. + (grub_script_lexer_record_start): Likewise. + (grub_script_lexer_record_stop): Likewise. + * normal/execute.c (grub_script_execute_menuentry): New function. + * normal/lexer.c (record, recording, recordpos, recordlen): New + variables. + (grub_script_lexer_record_start): New function. + (grub_script_lexer_record_stop): Likewise. + (recordchar): Likewise. + (nextchar): Likewise. + (grub_script_yylex): Use `nextchar' to fetch new characters. Use + 2048 as the buffer size. Add the tokens `menuentry' and `@'. + * normal/main.c: Include and + (current_menu): New variable. + (free_menu): Mainly rewritten. + (grub_normal_menu_addentry): New function. + (read_config_file): Rewritten. + * normal/menu.c (run_menu_entry): Mainly rewritten. + * normal/menu_entry.c (make_screen): Rewritten the code to insert + the menu entry. + (run): Mainly rewritten. + * normal/parser.y (menu_entry): New variable. + (GRUB_PARSER_TOKEN_MENUENTRY): New token. + (menuentry): New rule. + (command): Add `menuentry'. + (if_statement): Allow additional returns before `fi'. + * normal/script.c (grub_script_create_cmdmenu): New function. + +2006-01-03 Marco Gerards + + * INSTALL: GNU Bison is required. + * configure.ac: Rewritten the test to detect Bison. + * Makefile.in (YACC): New variable. Reported by Xun Sun + . + +2006-01-03 Marco Gerards + + * fs/hfsplus.c (grub_hfsplus_read_block): Convert the offset of + the HFS+ filesystem to filesystem blocks. + (grub_hfsplus_iterate_dir): Cast the `fileinfo' assignment so a + GCC warning is silenced. + +2006-01-03 Marco Gerards + + * partmap/apple.c (apple_partition_map_iterate): Convert the data + read from disk from big endian to host byte order. + +2006-01-03 Hollis Blanchard + + * fs/hfs.c: Include . Added reference to the official + documentation. + (GRUB_HFS_EMBED_HFSPLUS_SIG): New macro. + (grub_hfs_mount): Grammar fix in error. Make sure this is not an + embedded HFS+ filesystem. + (GRUB_HFS_MAGIC, grub_hfs_extent, grub_hfs_datarecord_t) + (grub_hfs_sblock): Move from here... + * include/grub/hfs.h: To here... New file. + * fs/hfsplus.c: Include . Added reference to the official + documentation. + (GRUB_HFSPLUS_MAGIC, GRUB_HFSPLUSX_MAGIC, GRUB_HFSPLUS_SBLOCK): + New macros. + (grub_hfsplus_volheader): Change type of member `magic' to + `grub_uint16_t'. + (grub_hfsplus_data): Add new member `embedded_offset'. + (grub_hfsplus_read_block): Add the HFS+ wrapper offset to the + returned block. + (grub_hfsplus_mount): Read the HFS+ wrapper if it exists. + Calculate the offset. + +2005-12-25 Yoshinori K. Okuji + + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_DRP_ADDR): + Removed. + (GRUB_BOOT_MACHINE_DRP_SIZE): Likewise. + +2005-12-25 Yoshinori K. Okuji + + * kern/env.c (grub_env_set): Check if ENV->VALUE instead of + ENV->NAME is NULL after allocating ENV->VALUE. + +2005-12-25 Marco Gerards + + * kern/env.c (grub_env_set): Rewritten the error handling code. + +2005-12-25 Yoshinori K. Okuji + + * geninit.sh: Made more robust, and more portable. + +2005-12-25 Marco Gerards + + Add support for Apple HFS+ filesystems. + + * fs/hfsplus.c: New file. + + * DISTLIST: Added `fs/hfsplus.c'. + + * conf/common.rmk (pkgdata_MODULES): Add `hfsplus.mod'. + (hfsplus_mod_SOURCES): New variable. + (hfsplus_mod_CFLAGS): Likewise. + (hfsplus_mod_LDFLAGS): Likewise. + * conf/i386-pc.rmk (grub_setup_SOURCES): Add `fs/hfsplus.c'. + (grub_setup_SOURCES): Likewise. + (grub_mkdevicemap_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + + * fs/fshelp.c (grub_fshelp_log2blksize): New function. + + * include/grub/fshelp.h (grub_fshelp_log2blksize): new prototype. + +2005-12-25 Yoshinori K. Okuji + + * DISTLIST: Added geninitheader.sh, geninit.sh, commands/test.c, + commands/i386/pc/play.c, conf/common.mk, conf/common.rmk, + include/grub/parser.h, include/grub/script.h, kern/parser.c, + kern/sparc64/cache.S, normal/execute.c, normal/function.c, + normal/lexer.c, normal/parser.y, normal/script.c, and + partmap/gpt.c. + Removed kern/sparc64/cache.c. + + * conf/common.rmk (DISTCLEANFILES): Added grub_script.tab.c, + grub_script.tab.h, grub_modules_init.lst, grub_modules_init.h, + grub_emu_init.c. + + * configure.ac (AC_INIT): Bumped to 1.92. + +2005-12-24 Vesa Jaaskelainen + + * kern/err.c (grub_error_push): Added new function to support error + stacks. + (grub_error_pop): Likewise. + (grub_error_stack_items): New local variable to support error stacks. + (grub_error_stack_pos): Likewise. + (grub_error_stack_assert): Likewise. + (GRUB_ERROR_STACK_SIZE): Added new define to configure maximum error + stack depth. + (grub_print_error): Added support to print errors from error stack. + + * include/grub/err.h (grub_error_push): Added function prototype. + (grub_error_pop): Likewise. + +2005-12-09 Hollis Blanchard + + * configure.ac: Accept `powerpc64' as host_cpu. + (amd64): Rename to `biarch32'. + + * kern/powerpc/cache.S (grub_arch_sync_caches): Handle + non-cacheline-aligned addresses. + + * kern/dl.c (grub_dl_load_core): Add grub_dprintf messages. + (grub_dl_flush_cache): Likewise. Only call `grub_arch_sync_caches' + if `size' is non-zero. + +2005-12-03 Marco Gerards + + * conf/common.rmk (grub_modules_init.lst): Use `-printf "%P\n"' + and `cd' to make sure the filename is not prefixed with a + directory name. + (pkgdata_MODULES): Add `gpt.mod'. + (gpt_mod_SOURCES): New variable. + (gpt_mod_CFLAGS): Likewise. + (gpt_mod_LDFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `partmap/gpt.c'. + + * include/grub/pc_partition.h (GRUB_PC_PARTITION_TYPE_GPT_DISK): + New macro. + + * partmap/gpt.c: New file. + + * partmap/pc.c (pc_partition_map_iterate): Don't continue when a + GPT partition map is detected. + +2005-12-03 Vincent Pelletier + + * commands/i386/pc/play.c: New file. + * conf/i386-pc.rmk (pkgdata_MODULES): Added play.mod. + (play_mod_SOURCES, play_mod_CFLAGS, play_mod_LDFLAGS): New + macros. + +2005-11-27 Marco Gerards + + * include/grub/dl.h (GRUB_MOD_INIT): Use `__attribute__ + ((unused))' to silence gcc warning. + +2005-11-26 Hollis Blanchard + + * configure.ac: Correct `AC_PROG_YACC' test. + +2005-11-22 Hollis Blanchard + + * util/powerpc/ieee1275/grub-install.in: Run the mount point + check before installing files. + +2005-11-22 Mike Small + + * util/powerpc/ieee1275/grub-install.in (grubdir): Fixed partition + number regex so multidigit numbers are recognized correctly. + +2005-11-22 Mike Small + + * loader/powerpc/ieee1275/linux.c (grub_rescue_cmd_linux): Add a + debugging message before attempting to claim memory. + (grub_rescue_cmd_initrd): Add a claim debugging message and try + multiple addresses in case of failure. + +2005-11-22 Hollis Blanchard + + * term/tparm.c (get_space): Remove empty `if' statement. + + * fs/ufs.c (grub_ufs_find_file): Remove `grub_le_to_cpu32'. + + * kern/parser.c (check_varstate): Rename `state' to 's'. + +2005-11-22 Hollis Blanchard + + * partmap/acorn.c: Change `unsigned' to `unsigned int'. Move all + variable definitions to the beginning of each function. Sort stack + variables by size. + (find): Rename to `acorn_partition_map_find'. Cast `grub_disk_read' + `buf' argument to `char *'. + +2005-11-22 Hollis Blanchard + + * conf/powerpc-ieee1275.rmk: Include conf/common.mk. + (pkgdata_MODULES): Removed fshelp.mod, fat.mod, ext2.mod, ufs.mod, + minix.mod, hfs.mod, jfs.mod, xfs.mod, affs.mod, sfs.mod, + hello.mod, boot.mod, terminal.mod, ls.mod, cmp.mod, cat.mod, + help.mod, font.mod, terminfo.mod, amiga.mod, apple.mod, pc.mod, + sun.mod, acorn.mod, loopback.mod, default.mod, timeout.mod, + configfile.mod, search.mod, gzio.mod and test.mod. + (symlist.c, grub_script.tab.c, grub_script.tab.h, kernel_syms.lst) + (grub_modules_init.lst, grub_modules_init.h, grub_emu_init.c) + (fshelp_mod_SOURCES, fshelp_mod_CFLAGS, fshelp_mod_LDFLAGS) + (fat_mod_SOURCES, fat_mod_CFLAGS, fat_mod_LDFLAGS) + (ext2_mod_SOURCES, ext2_mod_CFLAGS, ext2_mod_LDFLAGS) + (ufs_mod_SOURCES, ufs_mod_CFLAGS, ufs_mod_LDFLAGS) + (minix_mod_SOURCES, minix_mod_CFLAGS, minix_mod_LDFLAGS) + (hfs_mod_SOURCES, hfs_mod_CFLAGS, hfs_mod_LDFLAGS, jfs_mod_SOURCES) + (jfs_mod_CFLAGS, jfs_mod_LDFLAGS, iso9660_mod_SOURCES) + (iso9660_mod_CFLAGS, iso9660_mod_LDFLAGS, xfs_mod_SOURCES) + (xfs_mod_CFLAGS, xfs_mod_LDFLAGS, affs_mod_SOURCES) + (affs_mod_CFLAGS, affs_mod_LDFLAGS, sfs_mod_SOURCES) + (sfs_mod_CFLAGS, sfs_mod_LDFLAGS, hello_mod_SOURCES) + (hello_mod_CFLAGS, hello_mod_LDFLAGS, boot_mod_SOURCES) + (boot_mod_CFLAGS, boot_mod_LDFLAGS, terminal_mod_SOURCES) + (terminal_mod_CFLAGS, terminal_mod_LDFLAGS, ls_mod_SOURCES) + (ls_mod_CFLAGS, ls_mod_LDFLAGS, cmp_mod_SOURCES, cmp_mod_CFLAGS) + (cmp_mod_LDFLAGS, cat_mod_SOURCES, cat_mod_CFLAGS, cat_mod_LDFLAGS) + (help_mod_SOURCES, help_mod_CFLAGS, help_mod_LDFLAGS) + (font_mod_SOURCES, font_mod_CFLAGS, font_mod_LDFLAGS) + (terminfo_mod_SOURCES, terminfo_mod_CFLAGS, terminfo_mod_LDFLAGS) + (amiga_mod_SOURCES, amiga_mod_CFLAGS, amiga_mod_LDFLAGS) + (apple_mod_SOURCES, apple_mod_CFLAGS, apple_mod_LDFLAG): Removed. + + * conf/common.mk (grub_modules_init.lst): Use `find' instead of + `grep --include'. + (pkgdata_MODULES): Add test.mod. + +2005-11-18 Timothy Baldwin + + * genmk.rb: Fixed list rules moved to Makefile.in. Recognise + appending to variables with "+=". + (PModule): Use full pathname to generate *.lst filenames. + + * Makefile.in: Fixed list rules moved from genmk.rb. + (.DELETE_ON_ERROR): New special target. + (RMKFILES): Add common.rmk and sparc64-ieee1275.rmk. + + * conf/i386-pc.rmk: Include conf/common.mk. + (pkgdata_MODULES): Removed fshelp.mod, fat.mod, ext2.mod, ufs.mod, + minix.mod, hfs.mod, jfs.mod, xfs.mod, affs.mod, sfs.mod, + hello.mod, boot.mod, terminal.mod, ls.mod, cmp.mod, cat.mod, + help.mod, font.mod, terminfo.mod, amiga.mod, apple.mod, pc.mod, + sun.mod, acorn.mod, loopback.mod, default.mod, timeout.mod, + configfile.mod, search.mod, gzio.mod and test.mod. + (symlist.c, grub_script.tab.c, grub_script.tab.h, kernel_syms.lst) + (grub_modules_init.lst, grub_modules_init.h, grub_emu_init.c) + (fshelp_mod_SOURCES, fshelp_mod_CFLAGS, fshelp_mod_LDFLAGS) + (fat_mod_SOURCES, fat_mod_CFLAGS, fat_mod_LDFLAGS) + (ext2_mod_SOURCES, ext2_mod_CFLAGS, ext2_mod_LDFLAGS) + (ufs_mod_SOURCES, ufs_mod_CFLAGS, ufs_mod_LDFLAGS) + (minix_mod_SOURCES, minix_mod_CFLAGS, minix_mod_LDFLAGS) + (hfs_mod_SOURCES, hfs_mod_CFLAGS, hfs_mod_LDFLAGS, jfs_mod_SOURCES) + (jfs_mod_CFLAGS, jfs_mod_LDFLAGS, iso9660_mod_SOURCES) + (iso9660_mod_CFLAGS, iso9660_mod_LDFLAGS, xfs_mod_SOURCES) + (xfs_mod_CFLAGS, xfs_mod_LDFLAGS, affs_mod_SOURCES) + (affs_mod_CFLAGS, affs_mod_LDFLAGS, sfs_mod_SOURCES) + (sfs_mod_CFLAGS, sfs_mod_LDFLAGS, hello_mod_SOURCES) + (hello_mod_CFLAGS, hello_mod_LDFLAGS, boot_mod_SOURCES) + (boot_mod_CFLAGS, boot_mod_LDFLAGS, terminal_mod_SOURCES) + (terminal_mod_CFLAGS, terminal_mod_LDFLAGS, ls_mod_SOURCES) + (ls_mod_CFLAGS, ls_mod_LDFLAGS, cmp_mod_SOURCES, cmp_mod_CFLAGS) + (cmp_mod_LDFLAGS, cat_mod_SOURCES, cat_mod_CFLAGS, cat_mod_LDFLAGS) + (help_mod_SOURCES, help_mod_CFLAGS, help_mod_LDFLAGS) + (font_mod_SOURCES, font_mod_CFLAGS, font_mod_LDFLAGS) + (terminfo_mod_SOURCES, terminfo_mod_CFLAGS, terminfo_mod_LDFLAGS) + (amiga_mod_SOURCES, amiga_mod_CFLAGS, amiga_mod_LDFLAGS) + (apple_mod_SOURCES, apple_mod_CFLAGS, apple_mod_LDFLAG): Move from + here... + * conf/common.rmk: ... to here. New file. + + * conf/common.mk: New file. + +2005-11-18 Yoshinori K. Okuji + + * conf/powerpc-ieee1275.rmk (grub_script.tab.h): Unified to ... + (grub_script.tab.c): ... here. + + * conf/sparc64-ieee1275.rmk (grub_script.tab.h): Unified to ... + (grub_script.tab.c): ... here. + + * conf/i386-pc.rmk (grub_script.tab.h): Unified to ... + (grub_script.tab.c): ... here. + + * normal/command.c (grub_command_find): Fixed a memory leak of + MODULE_NAME. Reported by Mike Small . + +2005-11-13 Timothy Baldwin + + * include/grub/symbol.h: (FUNCTION): Use double quotes instead of + "@" which marks the start of a comment on ARM. + (VARIABLE): Likewise. + +2005-11-13 Timothy Baldwin + + Add support for Linux/ADFS partition tables. + + * partmap/acorn.c: New file. + + * include/grub/acorn_filecore.h: Likewise. + + * DISTLIST: Added `partmap/acorn.c' and + `include/grub/acorn_filecore.h'. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add + `partmap/acorn.c'. + (pkgdata_MODULES): Add `acorn.mod'. + (acorn_mod_SOURCES): New variable. + (acorn_mod_CFLAGS): Likewise. + + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Add + `partmap/acorn.c'. + (pkgdata_MODULES): Add `acorn.mod'. + (acorn_mod_SOURCES): New variable. + (acorn_mod_CFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `partmap/acorn.c'. + (pkgdata_MODULES): Add `acorn.mod'. + (acorn_mod_SOURCES): New variable. + (acorn_mod_CFLAGS): Likewise. + (acorn_mod_LDFLAGS): Likewise. + + * include/types.h (grub_disk_addr_t): New typedef. + +2005-11-13 Marco Gerards + + * geninit.sh: New file. + + * geninitheader.sh: Likewise. + + * commands/boot.c (grub_boot_init, grub_boot_fini): Removed. + * commands/cat.c (grub_cat_init, grub_cat_fini): Likewise. + * commands/cmp.c (grub_cmp_init, grub_cmp_fini): Likewise. + * commands/configfile.c (grub_configfile_init) + (grub_configfile_fini): Likewise. + * commands/default.c (grub_default_init, grub_default_fini): + Likewise. + * commands/help.c (grub_help_init, grub_help_fini): Likewise. + * commands/ls.c (grub_ls_init, grub_ls_fini): Likewise. + * commands/search.c (grub_search_init, grub_search_fini): Likewise. + * commands/terminal.c (grub_terminal_init, grub_terminal_fini): + Likewise. + * commands/test.c (grub_test_init, grub_test_fini): Likewise. + * commands/timeout.c (grub_timeout_init, grub_timeout_fini): + Likewise. + * commands/i386/pc/halt.c (grub_halt_init, grub_halt_fini): Likewise. + * commands/ieee1275/halt.c (grub_halt_init, grub_halt_fini): + Likewise. + * commands/i386/pc/reboot.c (grub_reboot_init, grub_reboot_fini): + Likewise. + * commands/ieee1275/reboot.c (grub_reboot_init, grub_reboot_fini): + Likewise. + * disk/loopback.c (grub_loop_init, grub_loop_fini): Likewise. + * fs/affs.c (grub_affs_init, grub_affs_fini): Likewise. + * fs/ext2.c (grub_ext2_init, grub_ext2_fini): Likewise. + * fs/fat.c (grub_fat_init, grub_fat_fini): Likewise. + * fs/hfs.c (grub_hfs_init, grub_hfs_fini): Likewise. + * fs/iso9660.c (grub_iso9660_init, grub_iso9660_fini): Likewise. + * fs/jfs.c (grub_jfs_init, grub_jfs_fini): Likewise. + * fs/minix.c (grub_minix_init, grub_minix_fini): Likewise. + * fs/sfs.c (grub_sfs_init, grub_sfs_fini): Likewise. + * fs/ufs.c (grub_ufs_init, grub_ufs_fini): Likewise. + * fs/xfs.c (grub_xfs_init, grub_xfs_fini): Likewise. + * normal/main.c (grub_normal_init, grub_normal_fini): Likewise. + * partmap/amiga.c (grub_amiga_partition_map_init) + (grub_amiga_partition_map_fini): Likewise. + * partmap/apple.c (grub_apple_partition_map_init) + (grub_apple_partition_map_fini): Likewise. + * partmap/pc.c (grub_pc_partition_map_init) + (grub_pc_partition_map_fini): Likewise. + * partmap/sun.c (grub_sun_partition_map_init, + grub_sun_partition_map_fini): Likewise. + * term/terminfo.c (grub_terminal_init, grub_terminal_fini): + Likewise. + + * util/grub-emu.c: Include . + (main): Don't initialize and de-initialize any modules directly, + use `grub_init_all' and `grub_fini_all' instead. + + * term/i386/pc/vesafb.c (grub_vesafb_init): Renamed to + `grub_vesafb_mod_init'. + (grub_vesafb_fini): Renamed to `grub_vesafb_mod_fini'. Updated + all users. + * term/i386/pc/vga.c (grub_vga_init): Renamed to + `grub_vga_mod_init'. Updated all users. + (grub_vga_fini): Renamed to `grub_vga_mod_fini'. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `grub_emu_init.c'. + (grub_modules_init.lst, grub_modules_init.h, grub_emu_init.c): New + rules. + + * include/grub/dl.h (GRUB_MOD_INIT): Add argument `name'. + Generate a function to initialize the module in utilities. + Updated all callers. + (GRUB_MOD_FINI): Add argument `name'. Generate a function to + initialize the module in utilities. Updated all callers. + +2005-11-09 Hollis Blanchard + + * term/ieee1275/ofconsole.c (grub_ofconsole_cls): Use both the ANSI + escape sequence and a literal ^L to clear the screen. + + * commands/ieee1275/suspend.c (grub_cmd_suspend): Clear the screen + when returning from Open Firmware. + +2005-11-09 Hollis Blanchard + + * term/ieee1275/ofconsole.c (grub_ofconsole_width): New variable. + (grub_ofconsole_height): Likewise. + (grub_ofconsole_putchar): If `grub_curr_x' exceeds console width, + manually insert a '\n'. + (grub_ofconsole_getwh): Set and return `grub_ofconsole_width' and + `grub_ofconsole_height'. Return early if these are already set. + +2005-11-07 Vincent Pelletier + + * conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Add + `commands/test.c', `fs/affs.c', `fs/sfs.c', `fs/xfs.c', + `normal/execute.c', `normal/lexer.c', `io/gzio.c', + `kern/parser.c', `grub_script.tab.c', `normal/function.c' + and `normal/script.c'. + (normal_mod_SOURCES): `normal/execute.c', `normal/lexer.c', + `grub_script.tab.c', `normal/function.c' and `normal/script.c'. + (test_mod_SOURCES): New variable. + (test_mod_CFLAGS): Likewise. + (test_mod_LDFLAGS): Likewise. + (pkgdata_MODULES): Add `test.mod'. + (grub_script.tab.c): New rule. + (grub_script.tab.h): Likewise. + +2005-11-07 Marco Gerards + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add + `commands/test.c', `normal/execute.c', `normal/lexer.c', + `grub_script.tab.c', `normal/function.c' and `normal/script.c'. + (normal_mod_SOURCES): `normal/execute.c', `normal/lexer.c', + `grub_script.tab.c', `normal/function.c' and `normal/script.c'. + (test_mod_SOURCES): New variable. + (test_mod_CFLAGS): Likewise. + (pkgdata_MODULES): Add `test.mod'. + (grub_script.tab.c): New rule. + (grub_script.tab.h): Likewise. + +2005-11-06 Marco Gerards + + Add initial scripting support. + + * commands/test.c: New file. + * include/grub/script.h: Likewise. + * normal/execute.c: Likewise. + * normal/function.c: Likewise. + * normal/lexer.c: Likewise. + * normal/parser.y: Likewise. + * normal/script.c: Likewise. + + * configure.ac: Add `AC_PROG_YACC' test. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `commands/test.c', + `normal/execute.c', `normal/lexer.c', `grub_script.tab.c', + `normal/function.c' and `normal/script.c'. + (normal_mod_SOURCES): `normal/execute.c', `normal/lexer.c', + `grub_script.tab.c', `normal/function.c' and `normal/script.c'. + (test_mod_SOURCES, test_mod_CFLAGS, test_mod_LDFLAGS): New + variables. + (pkgdata_MODULES): Add `test.mod'. + (grub_script.tab.c): New rule. + (grub_script.tab.h): Likewise. + + * include/grub/err.h (grub_err_t): Add `GRUB_ERR_TEST_FAILURE'. + + * include/grub/normal.h (grub_test_init): New prototype. + (grub_test_fini): Likewise. + + * normal/command.c: Include . + (grub_command_execute): Rewritten. + + * util/grub-emu.c (main): Call `grub_test_init' and + `grub_test_fini'. + +2005-11-03 Hollis Blanchard + + * kern/powerpc/ieee1275/init.c (grub_get_rtc): Initialize `msecs' + to 0. + * term/ieee1275/ofconsole.c (grub_ofconsole_checkkey): Return -1 if + there are no pending characters. + +2005-11-03 Hollis Blanchard + + * kern/powerpc/ieee1275/openfw.c (grub_ieee1275_get_devname): Use + `grub_strndup' to drop device arguments. Replace unnecessary + `grub_strndup' with `grub_strdup'. + +2005-11-03 Hollis Blanchard + + * kern/term.c (grub_cls): Do not call grub_cur_term->cls() if the + `debug' environment variable has been set. + +2005-11-02 Hollis Blanchard + + * Makefile.in (install-local): Use $(DATA). + (uninstall): Likewise. + * conf/powerpc-ieee1275.rmk (bin_UTILITIES): Move grub-mkimage... + (sbin_UTILITIES): ... to here. + (sbin_SCRIPTS): New variable. + (grub_install_SOURCES): New variable. + * util/powerpc/ieee1275/grub-install.in: New file. + * util/powerpc/ieee1275/grub-mkimage.c (kernel_path): Remove + variable. + (add_segments): Call `grub_util_get_path'. + +2005-10-28 Yoshinori K. Okuji + + From Timothy Baldwin: + * commands/ls.c (grub_ls_list_files): Close FILE with + grub_file_close. + * kern/misc.c (grub_vsprintf): Terminate the string S with NUL. + +2005-10-24 Marco Gerards + + * include/grub/parser.h: New file. + + * kern/parser.c: Likewise. + + * conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/parser.c'. + (grub_setup_SOURCES): Likewise. + (grub_probefs_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + (kernel_img_HEADERS): Add `parser.h'. + + * conf/powerpc-ieee1275.rmk (grubof_HEADERS): Add `parser.h'. + (grub_emu_SOURCES): Add `kern/parser.c'. + (grubof_SOURCES): Likewise. + + * conf/sparc64-ieee1275.rmk (grubof_HEADERS): Add `parser.h'. + (grubof_SOURCES): Add `kern/parser.c'. + + * include/grub/misc.h (grub_split_cmdline): Removed prototype. + + * kern/misc.c (grub_split_cmdline): Removed function. + + * kern/rescue.c: Include . + (grub_enter_rescue_mode): Use `grub_parser_split_cmdline' instead + of `grub_split_cmdline'. + + * normal/command.c: Include . + (grub_command_execute): Use `grub_parser_split_cmdline' instead + of `grub_split_cmdline'. + + * normal/completion.c: Include . + (cmdline_state): New variable. + (iterate_dir): End the filename with a quote depending on the + command line state. + (get_state): new function. + (grub_normal_do_completion): Use `grub_parser_split_cmdline' to + split the arguments and determine the current argument. When the + argument string is not quoted, escape all spaces. + +2005-10-23 Vincent Pelletier + + * normal/sparc64/setjmp.S: New file. + +2005-10-23 Vincent Pelletier + + * include/grub/sparc64/libgcc.h: New file. + * conf/sparc64-ieee1275.rmk (COMMON_ASFLAGS): Remove -Av9. + (normal_mod_SOURCES): Use normal/sparc64/setjmp.S instead of + normal/sparc64/setjmp.c. + +2005-10-23 Vincent Pelletier + + * kern/sparc64/dl.c: Rewritten for SPARCV9 ELF. + * kern/sparc64/cache.S: New file. + * kern/sparc64/cache.c: Removed. + * conf/sparc64-ieee1275.rmk (COMMON_ASFLAGS): Add -Av9. + (COMMON_CFLAGS): Add -mno-app-regs. Remove -mcpu=v9 and + -mtune=ultrasparc. + (COMMON_LDFLAGS): Add -melf64_sparc. + (grubof_HEADERS): Add sparc64/libgcc.h and machine/kernel.h. + (grubof_SOURCES): Use cache.S instead of cache.c. + (grubof_LDFLAGS): Add -mno-app-regs. Replace "-Xlinker + --oformat -Xlinker elf64-sparc" by "-Bstatic,-melf64_sparc". + (pkgdata_MODULES): Uncomment. Leave linux.mod and _linux.mod + commented though. + (normal_mod_SOURCES): Add normal/completion.c and normal/misc.c. + (_linux_mod_SOURCES, _linux_mod_CFLAGS, linux_mod_SOURCES) + (linux_mod_CFLAGS): Commented out. + (_linux_mod_LDFLAGS, linux_mod_LDFLAGS): New macro, commented + out because module isn't built. + (fshelp_mod_LDFLAGS, fat_mod_LDFLAGS, ext2_mod_LDFLAGS) + (ufs_mod_LDFLAGS, minix_mod_LDFLAGS, hfs_mod_LDFLAGS) + (jfs_mod_LDFLAGS, iso9660_mod_LDFLAGS, normal_mod_LDFLAGS) + (hello_mod_LDFLAGS, boot_mod_LDFLAGS, terminal_mod_LDFLAGS) + (ls_mod_LDFLAGS, cmp_mod_LDFLAGS, cat_mod_LDFLAGS) + (font_mod_LDFLAGS, amiga_mod_LDFLAGS, apple_mod_LDFLAGS) + (pc_mod_LDFLAGS, sun_mod_LDFLAGS, loopback_mod_LDFLAGS) + (suspend_mod_LDFLAGS, reboot_mod_LDFLAGS, halt_mod_LDFLAGS) + (help_mod_LDFLAGS, default_mod_LDFLAGS, timeout_mod_LDFLAGS) + (configfile_mod_LDFLAGS, search_mod_LDFLAGS, xfs_mod_SOURCES) + (xfs_mod_CFLAGS, xfs_mod_LDFLAGS, affs_mod_SOURCES) + (affs_mod_CFLAGS, affs_mod_LDFLAGS, sfs_mod_SOURCES) + (sfs_mod_CFLAGS, sfs_mod_LDFLAGS, gzio_mod_SOURCES) + (gzio_mod_CFLAGS, gzio_mod_LDFLAGS): New macro. + +2005-10-20 Yoshinori K. Okuji + + * util/i386/pc/grub-probefs.c (main): Call grub_xfs_init and + grub_xfs_fini. Do not call grub_hfs_init or grub_hfs_fini any + longer, because HFS should not be used on PC. + +2005-10-20 Timothy Baldwin + + * io/gzio.c (grub_gzio_read): Use OFFSET instead of FILE->OFFSET + consistently within the loop. + +2005-10-15 Marco Gerards + + * fs/xfs.c (grub_xfs_iterate_dir): Detect an error if part of a + directory can not be read. + +2005-10-15 Yoshinori K. Okuji + + * configure.ac (AC_INIT): Increase the version number to 1.91. + + * DISTLIST: Added include/grub/terminfo.h, include/grub/tparm.h, + include/grub/i386/pc/serial.h, term/terminfo.c, term/tparm.c and + term/i386/pc/serial.c. + +2005-10-15 Yoshinori K. Okuji + + * kern/file.c (grub_file_seek): Seeking to an offset equal to a + file size must be permitted. + + * kern/i386/pc/startup.S (multiboot_trampoline): Fix a mistake + between %ah and %al. + +2005-10-15 Yoshinori K. Okuji + + * fs/xfs.c (grub_xfs_iterate_dir): Change the type of BLK to + grub_uint64_t. + Call the hook with a NUL-terminated filename. + (grub_xfs_mount): Use grub_be_to_cpu32 instead of + grub_cpu_to_be32. + + * kern/term.c (cursor_state): New variable. + (grub_term_set_current): Reset the cursor state on a new + terminal. + (grub_setcursor): Rewritten to use CURSOR_STATE. + (grub_getcursor): New function. + + * include/grub/term.h (grub_getcursor): New prototype. + + * io/gzio.c (test_header): Align BUF for accessing it as 32-bit + integers on ARM. Reported by Timothy Baldwin + . + +2005-10-11 Marco Gerards + + * fs/sfs.c (grub_sfs_open): Don't free `data->label' if it is not + allocated. + (grub_sfs_dir): Likewise. + +2005-10-09 Marco Gerards + + Add support for the SFS filesystem. + + * fs/sfs.c: New file. + + * DISTLIST: Added `fs/sfs.c'. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add `fs/sfs.c'. + (grub_probefs_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add `sfs.mod'. + (sfs_mod_SOURCES): New variable. + (sfs_mod_CFLAGS): Likewise. + (sfs_mod_LDFLAGS): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add `fs/sfs.c'. + (pkgdata_MODULES): Add `sfs.mod'. + (sfs_mod_SOURCES): New variable. + (sfs_mod_CFLAGS): Likewise. + + * util/grub-emu.c (main): Call `grub_sfs_init' and + `grub_sfs_fini'. + + * include/grub/fs.h (grub_sfs_init): New prototype. + (grub_sfs_fini): Likewise. + +2005-10-07 Marco Gerards + + Add support for the AFFS filesystem. + + * fs/affs.c: New file. + + * DISTLIST: Added `fs/affs.c'. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add `fs/affs.c'. + (grub_probefs_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add `affs.mod'. + (affs_mod_SOURCES): New variable. + (affs_mod_CFLAGS): Likewise. + (affs_mod_LDFLAGS): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add `fs/affs.c'. + (pkgdata_MODULES): Add `affs.mod'. + (affs_mod_SOURCES): New variable. + (affs_mod_CFLAGS): Likewise. + + * util/grub-emu.c (main): Call `grub_affs_init' and + `grub_affs_fini'. + + * include/grub/fs.h (grub_affs_init): New prototype. + (grub_affs_fini): Likewise. + +2005-10-01 Marco Gerards + + * fs/xfs.c (grub_xfs_iterate_dir): Add parentheses. + +2005-10-01 Marco Gerards + + * configure.ac: Accept `x86_64' as host_cpu. In that case add + `-m32' to CFLAGS. + + * genmk.rb (class PModule): Always use `$(#{prefix}_LDFLAGS)' when + linking. + + * conf/i386-pc.rmk (COMMON_CFLAGS): Add `-m32'. + (COMMON_LDFLAGS): New variable. + (kernel_img_LDFLAGS): Include `COMMON_FLAGS'. + (_chain_mod_LDFLAGS, fshelp_mod_LDFLAGS, fat_mod_LDFLAGS) + (ext2_mod_LDFLAGS, ufs_mod_LDFLAGS, minix_mod_LDFLAGS) + (hfs_mod_LDFLAGS, jfs_mod_LDFLAGS, iso9660_mod_LDFLAGS) + (xfs_mod_LDFLAGS, _linux_mod_LDFLAGS, linux_mod_LDFLAGS) + (normal_mod_LDFLAGS, hello_mod_LDFLAGS, boot_mod_LDFLAGS) + (terminal_mod_LDFLAGS, ls_mod_LDFLAGS, cmp_mod_LDFLAGS) + (cat_mod_LDFLAGS, help_mod_LDFLAGS, reboot_mod_LDFLAGS) + (halt_mod_LDFLAGS, vga_mod_LDFLAGS, font_mod_LDFLAGS) + (terminfo_mod_LDFLAGS, serial_mod_LDFLAGS, _multiboot_mod_LDFLAGS) + (multiboot_mod_LDFLAGS, amiga_mod_LDFLAGS, apple_mod_LDFLAGS) + (pc_mod_LDFLAGS, sun_mod_LDFLAGS, loopback_mod_LDFLAGS) + (default_mod_LDFLAGS, timeout_mod_LDFLAGS, configfile_mod_LDFLAGS) + (vbe_mod_LDFLAGS, vesafb_mod_LDFLAGS, vbeinfo_mod_LDFLAGS) + (vbetest_mod_LDFLAGS, search_mod_LDFLAGS, gzio_mod_LDFLAGS): New + variables. + (normal_mod_ASFLAGS): Add `-m32'. + + * include/grub/types.h (grub_host_addr_t, grub_host_off_t) + (grub_host_size_t, grub_host_ssize_t): New types. + (grub_addr_t, grub_off_t, grub_size_t, grub_ssize_t): Make type + dependent of `GRUB_CPU_SIZEOF_VOID_P' instead on + `GRUB_HOST_SIZEOF_VOID_P'. + + * include/grub/kernel.h (struct grub_module_header): Type of + member offset changed to `grub_host_off_t'. Type of member size + changed to `grub_host_size_t'. + (struct grub_module_info): Type of member offset changed to + `grub_host_off_t'. Type of member size changed to + `grub_host_size_t'. + +2005-09-29 Yoshinori K. Okuji + + Make GRUB's kernel compliant to Multiboot Specification. + + * kern/i386/pc/startup.S (multiboot_header): New label. + (multiboot_entry): Likewise. + (multiboot_trampoline): Likewise. + + * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_RAW_SIZE): + Increased to 0x4A0. + + * fs/xfs.c (grub_xfs_iterate_dir): Fix a syntax error. You may not + put parentheses after a question mark. + [!GRUB_UTIL] (my_mod): New variable. + + * util/grub-emu.c (main): Call grub_xfs_init and grub_xfs_fini. + +2005-09-28 Marco Gerards + + Adds support for the XFS filesystem. Btrees are not supported + yet. + + * fs/xfs.c: New file. + + * DISTLIST: Added `fs/xfs.c'. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add `fs/xfs.c'. + (grub_probefs_SOURCES): Likewise. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add `xfs.mod'. + (xfs_mod_SOURCES): New variable. + (xfs_mod_CFLAGS): Likewise. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add `fs/xfs.c'. + (pkgdata_MODULES): Add `xfs.mod'. + (xfs_mod_SOURCES): New variable. + (xfs_mod_CFLAGS): Likewise. + + * util/grub-emu.c (main): Call `grub_xfs_init' and + `grub_xfs_fini'. + + * include/grub/fs.h (grub_xfs_init): New prototype. + (grub_xfs_fini): Likewise. + + +2005-09-18 Vesa Jaaskelainen + + * video/i386/pc/vbe.c (grub_vbe_set_video_mode): In indexed + color modes, allow greater than 16 colors to be configured as + a default palette. + +2005-09-03 Yoshinori K. Okuji + + * normal/completion.c (complete_arguments): Add the qualifier + const into OPTIONS. + + From Omniflux : + * include/grub/terminfo.h: New file. + * include/grub/tparm.h: Likewise. + * include/grub/i386/pc/serial.h: Likewise. + * term/terminfo.c: Likewise. + * term/tparm.c: Likewise. + * term/i386/pc/serial.c: Likewise. + * conf/i386-pc.rmk (pkgdata_MODULES): Added terminfo.mod and + serial.mod. + (terminfo_mod_SOURCES): New variable. + (terminfo_mod_CFLAGS): Likewise. + (serial_mod_SOURCES): Likewise. + (serial_mod_CFLAGS): Likewise. + +2005-08-31 Yoshinori K. Okuji + + * DISTLIST: Replaced boot/powerpc/ieee1275/crt0.S and + boot/powerpc/ieee1275/cmain.c with kern/powerpc/ieee1275/crt0.S + and kern/powerpc/ieee1275/cmain.c, respectively. + + * boot/powerpc/ieee1275/crt0.S: Moved to ... + * kern/powerpc/ieee1275/crt0.S: ... here. + + * boot/powerpc/ieee1275/cmain.c: Moved to ... + * kern/powerpc/ieee1275/cmain.c: ... here. + + * conf/powerpc-ieee1275.rmk (grubof_SOURCES): Use + kern/powerpc/ieee1275/crt0.S and kern/powerpc/ieee1275/cmain.c + instead of boot/powerpc/ieee1275/crt0.S and + boot/powerpc/ieee1275/cmain.c, respectively. + + * boot/i386/pc/boot.S (lba_mode): Do not store the total number of + sectors. It was not used anyway. + +2005-08-30 Hollis Blanchard + + * term/ieee1275/ofconsole.c (grub_ofconsole_getcharwidth): Fix + `unused parameter' warning. + +2005-08-30 Hollis Blanchard + + * term/ieee1275/ofconsole.c (grub_ofconsole_getcharwidth): New + function. + (grub_ofconsole_term): Specify grub_ofconsole_getcharwidth as + getcharwidth. + +2005-08-28 Marco Gerards + + * include/grub/normal.h (enum grub_completion_type): Added + `GRUB_COMPLETION_TYPE_ARGUMENT'. + + * normal/cmdline.c (print_completion): Handle + the `GRUB_COMPLETION_TYPE_ARGUMENT' type. + * normal/menu_entry.c (store_completion): Likewise. + + * normal/completion.c (complete_arguments): New function. + (grub_normal_do_completion): Call `complete_arguments' when the + current words start with a dash. + +2005-08-27 Marco Gerards + + * conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Fix typo (use + `gzio.mod' instead of `io.mod'). + +2005-08-22 Yoshinori K. Okuji + + * gendistlist.sh (EXTRA_DISTFILES): Added genfslist.sh. + (DISTDIRS): Added io and video. + Rewrite the search routine to make an output consistently. + + * DISTLIST: Added conf/sparc64-ieee1275.mk, + conf/sparc64-ieee1275.rmk, include/grub/gzio.h, + include/grub/ieee1275/ieee1275.h, include/grub/ieee1275/ofdisk.h, + io/gzio.c, kern/sparc64/cache.c, kern/sparc64/dl.c, + kern/sparc64/ieee1275/init.c, kern/sparc64/ieee1275/openfw.c and + util/powerpc/ieee1275/misc.c. + + * include/grub/gzio.h: New file. + * io/gzio.c: Likewise. + + * kern/file.c (grub_file_close): Call grub_device_close only if + FILE->DEVICE is not NULL. + + * include/grub/mm.h [!NULL] (NULL): New macro. + + * include/grub/err.h (GRUB_ERR_BAD_GZIP_DATA): New constant. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added io/gzip.c. + (pkgdata_MODULES): Added gzio.mod. + (gzio_mod_SOURCES): New variable. + (gzio_mod_CFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Added io/gzip.c. + (pkgdata_MODULES): Added gzio.mod. + (gzio_mod_SOURCES): New variable. + (gzio_mod_CFLAGS): Likewise. + + * commands/cat.c: Include grub/gzio.h. + (grub_cmd_cat): Use grub_gzfile_open instead of + grub_file_open. + + * commands/cmp.c: Include grub/gzio.h. + (grub_cmd_cmp): Use grub_gzfile_open instead of + grub_file_open. + + * loader/i386/pc/multiboot.c: Include grub/gzio.h. + (grub_rescue_cmd_multiboot): Use grub_gzfile_open instead of + grub_file_open. + (grub_rescue_cmd_module): Likewise. + +2005-08-21 Vincent Pelletier + + * conf/sparc64-ieee1275.rmk (grubof_SOURCES): The first file must be + kern/sparc64/ieee1275/init.c because it contains _start. + * conf/sparc64-ieee1275.mk: Generated from conf/sparc64-ieee1275.rmk. + +2005-08-21 Vincent Pelletier + + * configure.ac: Add support for sparc64 host with ieee1275 + firmware. + * configure: Generated from configure.ac. + * disk/ieee1275/ofdisk.c (grub_ofdisk_open): Use grub_ssize_t + instead of int. + (grub_ofdisk_read): Likewise. + (grub_ofdisk_open): Use %p to print pointer values, and cast the + pointers as (void *) to remove a warning. + (grub_ofdisk_close): Likewise. + (grub_ofdisk_read): Likewise. + * kern/ieee1275/ieee1275.c (grub_ieee1275_exit): This never + returns, so make it return void to remove a warning. + * include/grub/ieee1275/ieee1275.h (grub_ieee1275_exit): + Corresponding prototype change. + * kern/mm.c (grub_mm_init_region): Use %p to print pointer + values, and cast the pointers as (void *) to remove a warning. + (grub_mm_dump): Likewise. + * conf/sparc64-ieee1275.mk: New file. + * conf/sparc64-ieee1275.rmk: Likewise. + * include/grub/sparc64/setjmp.h: Likewise. + * include/grub/sparc64/types.h: Likewise. + * include/grub/sparc64/ieee1275/console.h: Likewise. + * include/grub/sparc64/ieee1275/ieee1275.h: Likewise. + * include/grub/sparc64/ieee1275/kernel.h: Likewise. + * include/grub/sparc64/ieee1275/time.h: Likewise. + * kern/sparc64/cache.c: Likewise. + * kern/sparc64/dl.c: Likewise. + * kern/sparc64/ieee1275/init.c: Likewise. + * kern/sparc64/ieee1275/openfw.c: Likewise. + +2005-08-21 Yoshinori K. Okuji + + * util/console.c (grub_ncurses_putchar): If C is greater than + 0x7f, set C to a question mark. + (grub_ncurses_getcharwidth): New function. + (grub_ncurses_term): Specify grub_ncurses_getcharwidth as + getcharwidth. + + * normal/menu.c (print_entry): Made aware of Unicode. First, + convert TITLE to UCS-4, and predict the cursor position by + grub_getcharwidth. + + * include/grub/misc.h (grub_utf8_to_ucs4): Specify the qualifier + const to SRC. + * kern/misc.c (grub_utf16_to_utf8): Likewise. + +2005-08-20 Yoshinori K. Okuji + + * loader/powerpc/ieee1275/linux.c (grub_rescue_cmd_linux): Specify + the boot file by the option BOOT_IMAGE. Use grub_stpcpy instead of + grub_strcat. + + * loader/i386/pc/linux.c (grub_rescue_cmd_linux): Specify the boot + file by the option BOOT_IMAGE. Use grub_stpcpy instead of + grub_strcpy and grub_strlen. Take it into account that a space + character is inserted as a delimiter. + +2005-08-20 Yoshinori K. Okuji + + * partmap/pc.c (pc_partition_map_iterate): Include the value of an + invalid magic in the error. + + * commands/search.c: New file. + + * util/grub-emu.c (main): Call grub_search_init and + grub_search_fini. + + * kern/rescue.c (grub_rescue_print_disks): Removed. + (grub_rescue_print_devices): New function. + (grub_rescue_cmd_ls): Use grub_device_iterate with + grub_rescue_print_devices instead of grub_disk_dev_iterate with + grub_rescue_print_disks. + + * kern/partition.c (grub_partition_iterate): Return the result of + PARTMAP->ITERATE instead of GRUB_ERRNO. + + * kern/device.c: Include grub/partition.h. + (grub_device_iterate): New function. + + * include/grub/partition.h (grub_partition_iterate): Return int + instead of grub_err_t. + + * include/grub/normal.h [GRUB_UTIL] (grub_search_init): New + prototype. + [GRUB_UTIL] (grub_search_fini): Likewise. + + * include/grub/device.h (grub_device_iterate): New prototype. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added + commands/search.c. + (pkgdata_MODULES): Added search.mod. + (search_mod_SOURCES): New variable. + (search_mod_CFLAGS): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Added commands/search.c. + (pkgdata_MODULES): Added search.mod. + (search_mod_SOURCES): New variable. + (search_mod_CFLAGS): Likewise. + + * commands/ls.c (grub_ls_list_disks): Renamed to ... + (grub_ls_list_devices): ... this, and use grub_device_iterate. + All callers changed. + + * DISTLIST: Added commands/search.c. + +2005-08-20 Yoshinori K. Okuji + + * kern/term.c (grub_putchar): Use grub_utf8_to_ucs4 for the + conversion. + (grub_getcharwidth): New function. + + * kern/misc.c (grub_utf8_to_ucs4): New function. + + * include/grub/term.h (struct grub_term): Added a new member + "getcharwidth". + (grub_getcharwidth): New prototype. + + * include/grub/misc.h (grub_utf8_to_ucs4): New prototype. + + * term/i386/pc/console.c (map_char): New function. Segregated from + grub_console_putchar. + (grub_console_putchar): Use map_char. + (grub_console_getcharwidth): New function. + (grub_console_term): Specified grub_console_getcharwidth as + getcharwidth. + + * term/i386/pc/vga.c (grub_vga_getcharwidth): New function. + (grub_vga_term): Specified grub_vga_getcharwidth as getcharwidth. + + * term/i386/pc/vesafb.c (grub_virtual_screen_setup): Return + GRUB_ERRNO. + (grub_vesafb_init): Do not use RC. Instead, use GRUB_ERRNO. Rely + on grub_strtoul completely. + (write_char): Declare local variables in the beginning of the + function. + (grub_vesafb_getcharwidth): New function. + (grub_vesafb_term): Specified grub_vesafb_getcharwidth as + getcharwidth. + +2005-08-19 Yoshinori K. Okuji + + * DISTLIST: Replace commands/i386/pc/vbe_list_modes.c and + commands/i386/pc/vbe_test.c with commands/i386/pc/vbeinfo.c and + commands/i386/pc/vbetest.c. + + * video/i386/pc/vbe.c (grub_vbe_probe): If INFOBLOCK is not NULL, + call grub_vbe_get_controller_info again, because the returned + information is volatile. + (grub_vbe_set_video_mode): Mostly rewritten. + (grub_vbe_get_video_mode): Use grub_vbe_probe and use + grub_vbe_status_t correctly. + (grub_vbe_get_video_mode_info): Likewise. + (grub_vbe_set_pixel_rgb): Use a switch statement rather than + several if statements. + + * commands/i386/pc/vbe_list_modes.c: Renamed to ... + * commands/i386/pc/vbeinfo.c: ... this. + + * commands/i386/pc/vbe_test.c: Renamed to ... + * commands/i386/pc/vbetest.c: ... this. + + * commands/i386/pc/vbeinfo.c (grub_cmd_vbe_list_modes): Renamed to + ... + (grub_cmd_vbeinfo): ... this. Save video modes before + iterating. Skip a video mode, if it is not available, not enough + information is given or it is monochrome. Show the memory + model. Leave the interpretation of MODEVAR to grub_strtoul + completely. + (GRUB_MOD_INIT): Rename vbe_list_modes to vbeinfo. + (GRUB_MOD_FINI): Likewise. + + * commands/i386/pc/vbetest.c (grub_cmd_vbe_test): Renamed to ... + (grub_cmd_vbetest): ... this. Don't print unnecessarily. Use + grub_err_t instead of grub_uint32_t. Don't use SPTR. Remove a + duplicated grub_env_get. Leave the interpretation of MODEVAR to + grub_strtoul completely. + (real2pm): Removed. + (GRUB_MOD_INIT): Rename vbe_test to vbetest. + (GRUB_MOD_FINI): Likewise. + + * normal/misc.c: Include grub/mm.h. + + * conf/i386-pc.rmk (pkgdata_MODULES): Replaced vbe_test.mod and + vbe_list_modes with vbetest.mod and vbeinfo.mod. + (vbe_list_modes_mod_SOURCES): Removed. + (vbe_list_modes_mod_CFLAGS): Likewise. + (vbe_test_mod_SOURCES): Likewise. + (vbe_test_mod_CFLAGS): Likewise. + (vbeinfo_mod_SOURCES): New variable. + (vbeinfo_mod_CFLAGS): Likewise. + (vbetest_mod_SOURCES): Likewise. + (vbetest_mod_CFLAGS): Likewise. + +2005-08-18 Yoshinori K. Okuji + + * normal/misc.c: New file. + + * DISTLIST: Added normal/misc.c. + + * partmap/amiga.c (amiga_partition_map_iterate): Add an argument + DISK to HOOK. Call HOOK with DISK. + * partmap/apple.c (apple_partition_map_iterate): Likewise. + * partmap/pc.c (pc_partition_map_iterate): Likewise. + * partmap/sun.c (sun_partition_map_iterate): Likewise. + + * normal/menu_entry.c (struct screen): Added a new member + "completion_shown". + (completion_buffer): New global variable. + (make_screen): Set SCREEN->COMPLETION_SHOWN to zero. + (store_completion): New function. + (complete): Likewise. + (clear_completions): Likewise. + (grub_menu_entry_run): If SCREEN->COMPLETION_SHOWN is non-zero, + call clear_completions and reset SCREEN->COMPLETION_SHOWN. If C is + a tab, call complete. + + * normal/completion.c (disk_dev): Removed. + (print_simple_completion): Likewise. + (print_partition_completion): Likewise. + (print_func): New global variable. + (add_completion): Do not take the arguments WHAT or PRINT any + longer. Added a new argument TYPE. Instead of printing directly, + call PRINT_FUNC if not NULL. + All callers changed. + (complete_device): Use a local variable DEV instead of + DISK_DEV. Do not move CURRENT_WORD to the end of a device name. + (grub_normal_do_completion): Take a new argument HOOK. Do not + initialize DISK_DEV. Initialize PRINT_FUNC to HOOK. If RET is an + empty string, return NULL instead. + All callers changed. + + * normal/cmdline.c (print_completion): New function. + + * kern/partition.c (grub_partition_iterate): Add an argument DISK + to HOOK. + All callers changed. + + * kern/disk.c (grub_print_partinfo): Removed. + + * include/grub/partition.h (struct grub_partition_map): Add a new + argument DISK into HOOK of ITERATE. + (grub_partition_iterate): Add a new argument DISK to HOOK. + + * include/grub/normal.h (enum grub_completion_type): New enum. + (grub_completion_type_t): New type. + (GRUB_COMPLETION_TYPE_COMMAND): New constant. + (GRUB_COMPLETION_TYPE_DEVICE): Likewise. + (GRUB_COMPLETION_TYPE_PARTITION): Likewise. + (GRUB_COMPLETION_TYPE_FILE): Likewise. + (grub_normal_do_completion): Added a new argument HOOK. + (grub_normal_print_device_info): New prototype. + + * include/grub/disk.h (grub_print_partinfo): Removed. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Added normal/misc.c. + (normal_mod_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * commands/ls.c (grub_ls_list_disks): Use + grub_normal_print_device_info instead of grub_print_partinfo. Free + PNAME. + (grub_ls_list_files): Use grub_normal_print_device_info instead of + duplicating the code. + +2005-08-16 Vesa Jaaskelainen + + * commands/i386/pc/vbe_list_modes.c: Update source formatting to + follow GCS more precisely. + * commands/i386/pc/vbe_test.c: Likewise. + * include/grub/i386/pc/vbe.h: Likewise. + * term/i386/pc/vesafb.c: Likewise. + * video/i386/pc/vbe.c: Likewise. + +2005-08-16 Vesa Jaaskelainen + + * DISTLIST: Added term/i386/pc/vesafb.c + DISTLIST: Added video/i386/pc/vbe.c + DISTLIST: Added commands/i386/pc/vbe_list_modes.c. + DISTLIST: Added commands/i386/pc/vbe_test.c. + * commands/i386/pc/vbe_list_modes.c: New file. + * commands/i386/pc/vbe_test.c: Likewise. + * term/i386/pc/vesafb.c: Likewise. + * video/i386/pc/vbe.c: Likewise. + * include/grub/i386/pc/vbe.h (GRUB_VBE_DEFAULT_VIDEO_MODE): Added define. + (grub_vbe_probe) Added prototype. + (grub_vbe_set_video_mode) Likewise. + (grub_vbe_get_video_mode) Likewise. + (grub_vbe_get_video_mode_info) Likewise. + (grub_vbe_set_pixel_rgb) Likewise. + (grub_vbe_set_pixel_index) Likewise. + * conf/i386-pc.rmk (pkgdata_MODULES): Added vbe.mod. + (pkgdata_MODULES): Added vesafb.mod. + (pkgdata_MODULES): Added vbe_list_modes.mod. + (pkgdata_MODULES): Added vbe_test.mod. + (vbe_mod_SOURCES): Added. + (vbe_mod_CFLAGS): Likewise. + (vesafb_mod_SOURCES): Likewise. + (vesafb_mod_CFLAGS): Likewise. + (vbe_list_modes_mod_SOURCES): Likewise. + (vbe_list_modes_mod_CFLAGS): Likewise. + (vbe_test_mod_SOURCES): Likewise. + (vbe_test_mod_CFLAGS): Likewise. + +2005-08-14 Yoshinori K. Okuji + + * normal/command.c (grub_command_execute): If INTERACTIVE is + false and GRUB_COMMAND_FLAG_NO_ECHO is not specified, print + CMDLINE. Disable the pager if INTERACTIVE is true. + All callers are changed. + + * normal/main.c (grub_normal_execute): Read command.lst and fs.lst + before reading a config file. + * normal/main.c (read_config_file): Even if a command is not + found, register it if it is within an entry. + + * util/grub-emu.c: Include sys/types.h and unistd.h. + (options): Added --hold. + (struct arguments): Added a new member "hold". + (parse_opt): If KEY is 'H', set ARGS->HOLD to ARG or -1 if ARG is + missing. + (main): Initialize ARGS.HOLD to zero. Wait until ARGS.HOLD is + cleared by a debugger, if it is not zero. + + * include/grub/normal.h (grub_command_execute): Add an argument + INTERACTIVE. + +2005-08-14 Vesa Jaaskelainen + + * DISTLIST: Added include/grub/i386/pc/vbe.h. + +2005-08-13 Yoshinori K. Okuji + + * aclocal.m4 (grub_I386_CHECK_REGPARM_BUG): Replace the test + program with another one, because the old one didn't detect a bug + in gcc-3.4. Always use regparm 2, because the new test is still + not enough for gcc-4.0. Someone must investigate a simple test + case which detects a bug in gcc-4.0. + +2005-08-12 Yoshinori K. Okuji + + * DISTLIST: Added normal/completion.c. + + * normal/completion.c: New file. + + * term/i386/pc/console.c (grub_console_getwh): New function. + (grub_console_term): Assign grub_console_getwh to getwh. + + * normal/cmdline.c (grub_tab_complete): Removed. Now the same + function is defined in normal/completion.c as + grub_normal_do_completion. + (grub_cmdline_get): Use grub_normal_do_completion instead of + grub_tab_complete. + + * kern/partition.c (grub_partition_map_iterate): Return 1 if HOOK + returns non-zero, otherwise return 0. + (grub_partition_iterate): First, probe the partition map. Then, + call ITERATE only for this partition map. + + * kern/misc.c (grub_strncmp): Rewritten. + + * kern/disk.c (grub_disk_dev_iterate): Return 1 if P->ITERATE + returns non-zero. Otherwise return 0. + + * include/grub/partition.h (grub_partition_map_iterate): Return + int instead of void. + + * include/grub/normal.h (grub_normal_do_completion): New prototype. + + * include/grub/misc.h (grub_strncmp): Change the type of N to + grub_size_t. + + * include/grub/disk.h (grub_disk_dev_iterate): Return int instead + of void. + + * normal/menu.c (draw_border): Cast GRUB_TERM_BORDER_WIDTH to + unsigned explicitly before comparing it with I. + + * kern/main.c (grub_env_write_root): Add the attribute unused into + VAR. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added + normal/completion.c. + (normal_mod_SOURCES): Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + + * normal/command.c (grub_iterate_commands): If ITERATE returns + non-zero, return one immediately. + +2005-08-09 Vesa Jaaskelainen + + * conf/i386-pc.rmk (kernel_img_HEADERS): Added machine/vbe.h. + * kern/i386/pc/startup.S: Updated Global Descriptor table's + descriptions. + (grub_vbe_get_controller_info): New function. + (grub_vbe_get_mode_info): Likewise. + (grub_vbe_set_mode): Likewise. + (grub_vbe_get_mode): Likewise. + (grub_vbe_set_memory_window): Likewise. + (grub_vbe_get_memory_window): Likewise. + (grub_vbe_set_scanline_length): Likewise. + (grub_vbe_get_scanline_length): Likewise. + (grub_vbe_set_display_start): Likewise. + (grub_vbe_get_display_start): Likewise. + (grub_vbe_set_palette_data): Likewise. + * include/grub/i386/pc/vbe.h: New file. + +2005-08-08 Hollis Blanchard + + * conf/powerpc-ieee1275.rmk (grubof_SOURCES): Replaced + kern/ieee1275/of.c with kern/ieee1275/ieee1275.c. + * DISTLIST: Likewise. + * kern/ieee1275/of.c: Moved to ... + * kern/ieee1275/ieee1275.c: ... here. + +2005-08-08 Hollis Blanchard + + * term/ieee1275/ofconsole.c: Include . + (grub_ofconsole_getwh): Cast -1 to type grub_ieee1275_ihandle_t. + Pass 0 as `end' parameter to grub_strtoul(). + +2005-08-08 Hollis Blanchard + + * include/grub/powerpc/ieee1275/console.h: Do not include + . Do not include . Remove ASM_FILE + ifdef. + (grub_console_cur_color): Remove i386-specific prototype. + (grub_console_real_putchar): Likewise. + (grub_console_checkkey): Likewise. + (grub_console_getkey): Likewise. + (grub_console_getxy): Likewise. + (grub_console_gotoxy): Likewise. + (grub_console_cls): Likewise. + (grub_console_setcursor): Likewise. + * kern/powerpc/ieee1275/init.c: Don't include . + Include . + * term/ieee1275/ofconsole.c: Likewise. + +2005-08-08 Yoshinori K. Okuji + + * Makefile.in (LIBLZO): New variable. + + * configure.ac: Check for LZO version 2. + + * util/i386/pc/grub-mkimage.c [HAVE_LZO_LZO1X_H]: Include + lzo/lzo1x.h instead of lzo1x.h. + + * conf/i386-pc.rmk (grub_mkimage_LDFLAGS): Use $(LIBLZO) instead + of -llzo. + + * util/i386/pc/grub-setup.c (main): Do not free PREFIX + twice. Reported by Vladimir Serbinenko . + + * partmap/pc.c (pc_partition_map_probe): Restore P->DATA after + copying the data from PARTITION to P. + +2005-08-07 Yoshinori K. Okuji + + * kern/rescue.c (grub_rescue_cmd_rmmod): If the reference count is + negative, unload the module. + + * util/i386/pc/grub-setup.c (setup): The name of the PC partition + map is "pc_partition_map" but not "pc". + (usage): Fix the description. The options are --boot-image and + --core-image but not --boot-file or --core-file. + (main): If not specified explicitly, make BOOT_FILE and CORE_FILE + based on DEFAULT_BOOT_FILE and DEFAULT_CORE_FILE with DIR or + DEFAULT_DIRECTORY. + + * util/i386/pc/grub-install.in: Do not specify --boot-file or + --core-file. Specify INSTALL_DEVICE as an argument. + + * util/console.c: Include config.h. + [HAVE_NCURSeS_CURSES_H]: Include ncurses/curses.h. + [HAVE_NCURSES_H]: Include ncurses.h. + [HAVE_CURSES_H]: Include curses.h. + [!A_NORMAL] (A_NORMAL): Defined as zero. + [!A_STANDOUT] (A_STANDOUT): Likewise. + + * conf/i386-pc.rmk (grub_emu_LDFLAGS): Use $(LIBCURSES) instead of + -lncurses. + * conf/powerpc-ieee1275.rmk (grub_emu_LDFLAGS): Likewise. + + * configure.ac: Check for curses libraries and headers. + + * Makefile.in (LIBCURSES): New variable. + + * genmk.rb (Script::rule): Set the executable bits. + + * util/i386/pc/biosdisk.c (grub_util_biosdisk_get_grub_dev): The + name of the PC partition map is "pc_partition_map" but not "pc". + +2005-08-07 Yoshinori K. Okuji + + * util/i386/pc/grub-install.in (grub_probefs): New variable. + (modules): Likewise. + (usage): Added descriptions for --modules and --grub-probefs. + Handle --modules and --grub-probefs. Save the arguments in MODULES + and GRUB_PROBEFS, respectively. + Auto-detect a filesystem module against GRUBDIR. If the result is + empty and modules are not specified explicitly, abort the + installation. Add the result to MODULES. + + * DISTLIST: Removed boot/powerpc/ieee1275/ieee1275.c, + disk/powerpc/ieee1275/ofdisk.c, + include/grub/powerpc/ieee1275/init.h and + term/powerpc/ieee1275/ofconsole.c. + Added disk/ieee1275/ofdisk.c, kern/ieee1275/of.c and + term/ieee1275/ofconsole.c. + + * include/grub/powerpc/ieee1275/console.h: Resurrected. + + * COPYING: Upgraded to the latest version. Only the address of the + FSF office has changed. + +2005-08-07 Yoshinori K. Okuji + + * conf/powerpc-ieee1275.rmk (grubof_SOURCES): Replaced + kern/ieee1275.c with kern/ieee1275/of.c. + + * kern/ieee1275.c: Moved to ... + * kern/ieee1275/of.c: ... here. + +2005-08-06 Yoshinori K. Okuji + + * conf/i386-pc.rmk (kernel_img_HEADERS): Reordered for + readability. + + * config.guess: Updated to the latest version from gnulib. + * config.sub: Likewise. + * install.sh: Likewise. + * mkinstalldirs: Likewise. + + * include/grub/console.h: Removed. This file is arch-specific. Do + not put this in include/grub. + + * include/grub/i386/pc/console.h: Resurrected. + + * util/console.c: Include grub/machine/console.h instead of + grub/console.h. + * util/grub-emu.c: Likewise. + +2005-08-04 Marco Gerards + + * kern/term.c (grub_putcode): Use `grub_getwh' instead of + hardcoded value. + + From Vincent Pelletier + * include/grub/term.h (GRUB_TERM_WIDTH, GRUB_TERM_HEIGHT): + Redefined to use grub_getwh. + (grub_term): New member named getwh. + (grub_getwh): New prototype. + * kern/term.c (grub_getwh): New function. + * term/i386/pc/console.c (grub_console_getwh): New function. + (grub_console_term): New member `getwh'. + * term/i386/pc/vga.c (grub_vga_getwh): New function. + (grub_vga_term): New member `getwh'. + * term/ieee1275/ofconsole.c (grub_ofconsole_readkey): Use + grub_ssize_t. + (grub_ofconsole_getw): New function. + (grub_ofconsole_init): Use grub_ssize_t and unsigned char. + (grub_ofconsole_term): New field named getwh and new initial + value. + +2005-08-03 Hollis Blanchard + + * include/grub/powerpc/ieee1275/ieee1275.h: Move ... + * include/grub/ieee1275/ieee1275.h: ... to here. All users updated. + Move `abort', `grub_reboot', and `grub_halt' prototypes ... + * include/grub/powerpc/ieee1275/kernel.h: ... to here. + * commands/ieee1275/halt.c: Include instead + of . + * commands/ieee1275/reboot.c: Likewise. + * boot/powerpc/ieee1275/ieee1275.c: Move ... + * kern/ieee1275.c: ... to here. All users updated. Change all + parameter structs to use new type `grub_ieee1275_cell_t'. + * term/powerpc/ieee1275/ofconsole.c: Move ... + * term/ieee1275/ofconsole.c: ... to here. All users updated. + * disk/powerpc/ieee1275/ofdisk.c: Move ... + * disk/ieee1275/ofdisk.c: ... to here. All users updated. + * boot/powerpc/ieee1275/cmain.c: Change `grub_ieee1275_entry_fn' type + to return int. + * include/grub/i386/pc/console.h: Move to include/grub/console.h. + Remove unused prototypes. All users updated. + * include/grub/powerpc/ieee1275/console.h: Removed. + * include/grub/powerpc/ieee1275/ieee1275.h: Define + `grub_ieee1275_cell_t'. + * kern/powerpc/ieee1275/openfw.c: Include . + Cast comparisons with -1 to the correct type. + * loader/powerpc/ieee1275/linux.c (kernel_entry_t): Change parameter + type to match `grub_ieee1275_entry_fn'. + +2005-08-01 Yoshinori K. Okuji + + * DISTLIST: Added util/i386/pc/grub-probefs.c. + + * conf/i386-pc.rmk (sbin_UTILITIES): Added grub-probefs. + (grub_setup_SOURCES): Removed partmap/amiga.c, partmap/apple.c and + partmap/sun.c. + (grub_probefs_SOURCES): New variable. + + * util/i386/pc/grub-probefs.c: New file. + + * util/i386/pc/grub-setup.c (main): Call + grub_pc_partition_map_init, grub_ufs_init, grub_minix_init, + grub_hfs_init and grub_jfs_init to initialize the system. Call + grub_ufs_fini, grub_minix_fini, grub_hfs_fini, grub_jfs_init and + grub_pc_partition_map_fini to finish the system. + +2005-07-31 Yoshinori K. Okuji + + * loader/i386/pc/multiboot.c (grub_multiboot_is_elf32): New + function. + (grub_multiboot_load_elf32): Likewise. + (grub_multiboot_is_elf64): Likewise. + (grub_multiboot_load_elf64): Likewise. + (grub_multiboot_load_elf): Likewise. + (grub_rescue_cmd_multiboot): Call grub_multiboot_load_elf to load + an ELF32 or ELF64 file. + This is based on a patch from Ruslan Nikolaev . + + From Serbinenko Vladimir : + * kern/disk.c (grub_print_partinfo): Check if FS->LABEL is not + NULL before calling FS->LABEL. + * fs/fat.c (grub_fat_dir): Initialize DIRNAME to NULL. + * commands/ls.c (grub_ls_list_files): Show labels, if possible. + (grub_ls_list_disks): Check if FS and FS->LABEL are not NULL + before calling FS->LABEL. + +2005-07-26 Yoshinori K. Okuji + + * util/i386/pc/grub-install.in (datadir): New variable. + (libdir): Removed. + (pkgdatadir): New variable. + (pkglibdir): Removed. + +2005-07-24 Yoshinori K. Okuji + + * DISTLIST: Added util/i386/pc/grub-install.in. + + * util/i386/pc/grub-install.in: New file. + + * conf/i386-pc.rmk (sbin_SCRIPTS): New variable. + (grub_install_SOURCES): Likewise. + + * genmk.rb: Added support for scripts. + (Script): New class. + (scripts): New variable. + + * Makefile.in (install-local): Install sbin_SCRIPTS by + INSTALL_SCRIPT. + (uninstall): Remove sbin_SCRIPTS. + + * util/i386/pc/grub-setup.c (main): If the argument is not a GRUB + device, try to get a GRUB device by + grub_util_biosdisk_get_grub_dev. + Free DEST_DEV. + + * util/i386/pc/grub-mkdevicemap.c (usage): Remove a duplicated + description for --device-map. + +2005-07-20 Yoshinori K. Okuji + + Change the semantics of variable hooks. They now return strings + instead of error values. + + * util/i386/pc/grub-setup.c: Include grub/env.h. + (setup): Use grub_device_set_root instead of grub_env_set. + + * kern/rescue.c (grub_rescue_cmd_root): Use grub_env_set and + grub_env_get instead of grub_device_set_root and + grub_device_get_root, respectively. + + * kern/main.c (grub_env_write_root): New function. + (grub_set_root_dev): Register grub_env_write_hook for "root". Use + grub_env_set instead of grub_device_set_root. + + * kern/env.c (HASHSZ): Reduced to 13, because GRUB does not need + many variables. + (grub_env_set): Set ENV->VALUE to the result of ENV->WRITE_HOOK + rather than calling ENV->WRITE_HOOK afterwards. + (grub_env_get): Return the result of ENV->READ_HOOK rather than + passing a pointer of a pointer. + (grub_register_variable_hook): Change the types of "read_hook" and + "write_hook" to grub_env_read_hook_t and grub_env_write_hook_t, + respectively. + Allocate the default empty string on the heap, because this string + may be freed later. + + * kern/device.c: Include grub/env.h. + (grub_device_set_root): Removed. + (grub_device_get_root): Likewise. + (grub_device_open): Use grub_env_get instead of + grub_device_get_root. + + * include/grub/env.h (grub_env_read_hook_t): New type. + (grub_env_write_hook_t): Likewise. + (grub_env_var): Change the types of "read_hook" and "write_hook" + to grub_env_read_hook_t and grub_env_write_hook_t, respectively. + (grub_register_variable_hook): Likewise. + + * include/grub/device.h (grub_device_set_root): Removed. + (grub_device_set_root): Likewise. + + * fs/fat.c (grub_fat_dir): Make a copy of PATH in DIRNAME, and + make sure that DIRNAME terminates with '/', so that + grub_fat_find_dir will fail if PATH is not a directory. + + * commands/ls.c (grub_ls_list_files): Remove the qualifier const + from DIRNAME. + Use the qualifier auto for print_files and print_files_long. + If FS->DIR sets GRUB_ERRNO to GRUB_ERR_BAD_FILE_TYPE, try DIRNAME + as a regular file. + Put a newline only if there is no error. + (grub_cmd_ls): Remove grub_ls_print_files, because this is not + used. + +2005-07-20 Yoshinori K. Okuji + + * kern/partition.c (grub_partition_probe): Initialize PART to + NULL. Otherwise, when no partition map is registered, this returns + a garbage. + +2005-07-19 Yoshinori K. Okuji + + * partmap/apple.c (apple_partition_map_iterate): Check if POS + equals GRUB_DISK_SECTOR_SIZE to see if the partition table is + valid. + +2005-07-18 Yoshinori K. Okuji + + * commands/ls.c (grub_ls_list_disks): Print the filesystem + information on each device, if it does not have partitions. Print + "Device" instead of "Disk", because this function is not specific + to disk devices. + + * normal/main.c (grub_rescue_cmd_normal): Make the variable CONFIG + static to ensure that it is put on the memory rather than a + register. + +2005-07-17 Yoshinori Okuji + + * commands/cat.c (GRUB_MOD_INIT): Use better documentation. + (grub_cat_init): Likewise. + * loader/i386/pc/chainloader_normal.c (GRUB_MOD_INIT): Likewise. + (options): Likewise. + * commands/configfile.c (GRUB_MOD_INIT): Likewise. + (grub_configfile_init): Likewise. + * font/manager.c (GRUB_MOD_INIT): Likewise. + * commands/help.c (GRUB_MOD_INIT): Likewise. + (grub_help_init): Likewise. + * normal/command.c (grub_command_init): Likewise. + * loader/i386/pc/linux_normal.c (GRUB_MOD_INIT): Likewise. + * disk/loopback.c (grub_loop_init): Likewise. + (GRUB_MOD_INIT): Likewise. + * commands/ls.c (grub_ls_init): Likewise. + (GRUB_MOD_INIT): Likewise. + (options): Likewise. + * commands/boot.c (grub_boot_init): Likewise. + (GRUB_MOD_INIT): Likewise. + * loader/i386/pc/multiboot_normal.c (GRUB_MOD_INIT): Likewise. + * commands/i386/pc/reboot.c (grub_reboot_init): Likewise. + (GRUB_MOD_INIT): Likewise. + * commands/cmp.c (grub_cmp_init): Likewise. + (GRUB_MOD_INIT): Likewise. + + * normal/arg.c: Use <> instead of "" to include header files. + (SHORT_ARG_HELP): New macro. + (SHORT_ARG_USAGE): Likewise. + (help_options): Specify SHORT_ARG_HELP and SHORT_ARG_USAGE instead + of 'h' and 'u' for help and usage, respectively. Use more GNU-like + descriptions. + (find_short): Check if C is 'h' or 'u' explicitly. + (grub_arg_show_help): Use space characters instead of tabs. Treat + SHORT_ARG_HELP and SHORT_ARG_USAGE exceptionally so that -h and -u + are shown with --help and --usage only if they are not used for + the command itself. + (parse_option): Use SHORT_ARG_HELP and SHORT_ARG_USAGE instead of + 'h' and 'u'. + + * include/grub/arg.h (struct grub_arg_option): Add the qualifier + const into "longarg". Change the type of "shortarg" to int. + +2005-07-17 Yoshinori Okuji + + * boot/i386/pc/boot.S (boot_drive_check): New label. + + * include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_DRIVE_CHECK): New + macro. + + * util/i386/pc/grub-setup.c (setup): Added a workaround for BIOSes + which do not pass a boot drive correctly. Copied from GRUB Legacy. + +2005-07-17 Yoshinori Okuji + + * kern/i386/pc/startup.S (gate_a20_try_system_control_port_a): + When turning off Gate A20, skip the check and return immediately, + because this is not fatal usually. + +2005-07-17 Yoshinori Okuji + + * conf/i386-pc.rmk (pxeboot_img_LDFLAGS): The text address should + be 0x7C00 instead of 0x8000. + + * boot/i386/pc/pxeboot.S: Rewritten. + + * kern/i386/pc/startup.S (gate_a20_try_bios): No need to specify + EXT_C. + (gate_a20_check_state): Read a byte from 0x108000. Invert the + result. + +2005-07-16 Yoshinori K. Okuji + + * kern/i386/pc/startup.S (grub_gate_a20): Rewritten for + robustness. This routine now supports a BIOS call and System + Control Port A to modify the gate A20. + + * include/grub/i386/pc/kernel.h (GRUB_KERNEL_MACHINE_RAW_SIZE): + Increased to 0x440. + +2005-07-12 Hollis Blanchard + + * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_open): dprintf the + device path and resulting ihandle. + (grub_ofdisk_close): dprintf the ihandle being closed. + (grub_ofdisk_read): dprintf function parameters. + * kern/mm.c (grub_mm_init_region): Likewise. + * loader/powerpc/ieee1275/linux.c: Remove extra whitespace. + (grub_linux_boot): dprintf the Linux entry point, initrd address and + size, and boot arguments. + (grub_rescue_cmd_linux): dprintf each ELF segment's address and size + before loading into memory. + (grub_rescue_cmd_initrd): dprintf the initrd's address and size + before loading into memory. + +2005-07-12 Yoshinori K. Okuji + + * kern/mm.c: Added much documentation. + (GRUB_MM_ALIGN_LOG2): When GRUB_CPU_SIZEOF_VOID_P is + 8, set to 5 instead of 8. + +2005-07-10 Yoshinori Okuji + + * DISTLIST: Added util/i386/pc/grub-mkimage.c. + + * conf/i386-pc.rmk (sbin_UTILITIES): Added grub-mkdevicemap. + (grub_mkdevicemap_SOURCES): New variable. + + * util/i386/pc/grub-mkdevicemap.c: New file. Mostly copied from + lib/device.c of GRUB Legacy. + +2005-07-10 Yoshinori Okuji + + * commands/ls.c (grub_ls_list_files): Check if *PATH is NUL + instead of PATH is NULL. + +2005-07-09 Vincent Pelletier + + * commands/cmp.c (BUFFER_SIZE): New macro. + (grub_cmd_cmp): Close the right file at the right time. Compare + only data just read. Don't report files of different size as + identical. Dynamically allocate buffers. Move variable + declarations at the beginning of function. + +2005-07-09 Yoshinori Okuji + + * aclocal.m4 (grub_I386_CHECK_REGPARM_BUG): The return value was + reverse. + +2004-07-04 Vincent Pelletier + + * normal/cmdline.c (grub_cmdline_get): Don't fallback on ctrl-d + when backspace is pressed at beginning of line. + +2005-07-03 Yoshinori Okuji + + * DISTLIST: Added genfslist.sh. + + * normal/main.c (fs_module_list): New variable. + (autoload_fs_module): New function. + (read_fs_list): Likewise. + (grub_normal_execute): Call read_fs_list. + + * kern/fs.c (grub_fs_autoload_hook): New variable. + (grub_fs_probe): Added support for auto-loading. + + * include/grub/normal.h (struct grub_fs_module_list): New struct. + (grub_fs_module_list_t): New type. + + * include/grub/fs.h (grub_fs_autoload_hook_t): New type. + (grub_fs_autoload_hook): New prototype. + + * genfslist.sh: New file. + + * genmk.rb: Added a rule to generate a filesystem list. + +2005-06-30 Marco Gerards + + * configure.ac: Fix the test for cross-compiling. + + * genmk.rb (Program): Use `$(CC)' instead of `$(BUILD_CC)'. Don't + define GRUB_UTIL anymore. + + * util/powerpc/ieee1275/grub-mkimage.c (load_note): Endian fixes + so this function works on other systems than just big endian. + (load_modules): Likewise. + (add_segments): Likewise. + +2005-06-23 Hollis Blanchard + + * kern/misc.c (grub_vsprintf): Add `longfmt'. If format string + contains `l' modifier, get a long from va_arg(). + +2005-06-23 Yoshinori K. Okuji + + * kern/mm.c (grub_free): If the next free block which is being + merged is the first free block, set the first block to the block + being freed. + Reported by Vincent Guffens . + +2005-05-08 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c (cmain): Initialize + `grub_ieee1275_chosen'. + +2005-05-08 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c (module_info): Remove definition. + (grub_ieee1275_chosen): New variable. + (cmain): Initialize and use `grub_ieee1275_chosen' instead of + `chosen'. + * boot/powerpc/ieee1275/crt0.S (init_stack): Remove stack space. + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_get_property): + Rename first argument to `phandle' for consistency. + (grub_ieee1275_get_property_length): Likewise. + (grub_ieee1275_next_property): Likewise. Change type of first argument + to grub_ieee1275_phandle_t. + * include/grub/powerpc/ieee1275/ieee1275.h (grub_ieee1275_entry_fn): + Move export next to declaration. + (grub_ieee1275_chosen): New variable. + * include/grub/powerpc/ieee1275/kernel.h (GRUB_IEEE1275_MODULE_BASE): + Correct cosmetic typo. + * kern/powerpc/ieee1275/init.c (grub_set_prefix): Use + `grub_ieee1275_chosen'. + * kern/powerpc/ieee1275/openfw.c (grub_map): Likewise. + * loader/powerpc/ieee1275/linux.c (grub_linux_boot): Likewise. + (grub_rescue_cmd_linux): Set `initrd_addr' to 0. + * term/powerpc/ieee1275/ofconsole.c (grub_ofconsole_refresh): Use + `grub_ieee1275_chosen'. + +2005-05-10 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c (cmain): Remove code to parse + /chosen/bootargs. + * kern/powerpc/ieee1275/init.c (grub_machine_init): Parse + /chosen/bootargs as "variable=value" pairs. + +2005-05-08 Vincent Pelletier + + * include/grub/misc.h (grub_dprintf): New macro. + (grub_real_dprintf): New prototype. + (grub_strword): Likewise. + (grub_iswordseparator): Likewise. + * kern/misc.c (grub_real_dprintf): New function. + (grub_strword): Likewise. + (grub_iswordseparator): Likewise. + +2005-04-30 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c: Don't include grub/machine/init.h. + (roundup): Remove macro. + (grub_ieee1275_flags): Make static. + (grub_ieee1275_realmode): Remove. + (grub_ieee1275_test_flag): New function. + (grub_ieee1275_set_flag): Likewise. + (find_options): Rename to `grub_ieee1275_find_options'; update + callers. Set GRUB_IEEE1275_FLAG_REAL_MODE and + GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS. + (cmain): New prototype. + (cmain): Use `grub_ieee1275_set_flag' instead of accessing + `grub_ieee1275_flags' directly. + * conf/powerpc-ieee1275.rmk (grubof_HEADERS): Remove + machine/biosdisk.h. + * disk/powerpc/ieee1275/ofdisk.c: Include grub/machine/ofdisk.h. + Don't include grub/machine/init.h. + (grub_ofdisk_open): Call `grub_ieee1275_test_flag'. + * include/grub/powerpc/ieee1275/ieee1275.h (grub_ieee1275_flags): + Remove prototype. + (grub_ieee1275_realmode): Likewise. + (grub_ieee1275_flag): New enum. + (grub_ieee1275_test_flag): New prototype. + (grub_ieee1275_set_flag): New prototype. + * include/grub/powerpc/ieee1275/init.h: Remove file. + * include/grub/powerpc/ieee1275/ofdisk.h: New file. + * kern/powerpc/ieee1275/init.c: Don't include grub/machine/init.h. + Include grub/machine/console.h. Include grub/machine/ofdisk.h. + (grub_machine_fini): Don't call `grub_ieee1275_release'. Remove + comment. + * kern/powerpc/ieee1275/openfw.c (grub_claimmap): Call + `grub_ieee1275_test_flag'. + (grub_ieee1275_encode_devname): Likewise. + +2005-04-21 Hollis Blanchard + + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_encode_devname): New prototype. + (grub_ieee1275_get_filename): Likewise. + * kern/powerpc/ieee1275/init.c (grub_translate_ieee175_path): New + function. + (grub_set_prefix): Likewise. + (grub_machine_init): Call grub_set_prefix. + * kern/powerpc/ieee1275/openfw.c: Fix typos. + (grub_parse_type): New enum. + (grub_ieee1275_get_devargs): New function. + (grub_ieee1275_get_devname): Likewise. + (grub_ieee1275_parse_args): Likewise. + (grub_ieee1275_get_filename): Likewise. + (grub_ieee1275_encode_devname): Likewise. + +2005-03-30 Marco Gerards + + * kern/powerpc/ieee1275/init.c (grub_machine_fini): Don't call + `grub_loader_unset'. + +2005-03-26 Hollis Blanchard + + * commands/ieee1275/halt.c (grub_cmd_halt): Call grub_halt + instead of grub_ieee1275_interpret. + (grub_halt_init): New function. + (grub_halt_fini): Likewise. + (GRUB_MOD_INIT): Correct message grammar. + * commands/ieee1275/reboot.c (grub_cmd_reboot): Call grub_reboot + instead of grub_ieee1275_interpret. + (grub_reboot_init): New function. + (grub_reboot_fini): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Replace + commands/i386/pc/halt.c, commands/i386/pc/reboot.c, and + util/i386/pc/misc.c with commands/ieee1275/halt.c, + commands/ieee1275/reboot.c, and util/powerpc/ieee1275/misc.c. + * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_fini): New + function. + * include/grub/powerpc/ieee1275/console.h (grub_console_fini): + Add prototype. + * include/grub/powerpc/ieee1275/ieee1275.h (grub_reboot): Add + prototype. + (grub_halt): Likewise. + * include/grub/powerpc/ieee1275/init.h: Remove inaccurate comment. + (cmain): Remove __attribute__((unused)). + * kern/powerpc/ieee1275/init.c (grub_heap_start): New variable. + (grub_heap_len): Likewise. + (grub_machine_fini): New function. + * kern/powerpc/ieee1275/openfw.c (grub_reboot): New function. + (grub_halt): Likewise. + * term/powerpc/ieee1275/ofconsole.c (grub_console_fini): New + function. + * util/powerpc/ieee1275/misc.c: New file. + +2005-03-19 Yoshinori K. Okuji + + * DISTLIST: New file. + * gendistlist.sh: Likewise. + + * Makefile.in (COMMON_DISTFILES): Removed. + (BOOT_DISTFILES): Likewise. + (CONF_DISTFILES): Likewise. + (DISK_DISTFILES): Likewise. + (FS_DISTFILES): Likewise. + (INCLUDE_DISTFILES): Likewise. + (KERN_DISTFILES): Likewise. + (LOADER_DISTFILES): Likewise. + (TERM_DISTFILES): Likewise. + (UTIL_DISTFILES): Likewise. + (DISTFILES): Likewise. + (uninstall): Uninstall files in $(pkgdata_DATA). + (DISTLIST): New target. + (distdir): Use the contents of the file DISTLIST to get a list of + distributed files. + +2005-03-18 Yoshinori K. Okuji + + * fs/fat.c (grub_fat_mount): Ignore the 3rd bit of a media + descriptor. This is ported from GRUB Legacy. + + * gencmdlist.sh: Added an extra semicolon to make it work with + old sed versions. Reported by Robert Bihlmeyer + . + +2005-03-08 Yoshinori Okuji + + Automatic loading of commands is supported. + + * normal/main.c (read_command_list): New function. + (grub_normal_execute): Call read_command_list. + + * normal/command.c (grub_register_command): Return zero or CMD. + Allocate CMD->NAME from the heap. + Initialize CMD->MODULE_NAME to zero. + Find the same name as well. If the same command is found and it is + a dummy command, overwrite members. If it is not a dummy command, + return zero. + (grub_unregister_command): Free Q->NAME and Q->MODULE_NAME. + (grub_command_find): If a dummy command is found, load a module + and retry to find a command only once. + + * normal/cmdline.c (grub_tab_complete): Call grub_command_find to + make sure that each command is loaded. + + * include/grub/normal.h (GRUB_COMMAND_FLAG_NOT_LOADED): New + macro. + (struct grub_command): Remove const from the member `name'. + Add a new member `module_name'. + (grub_register_command): Return grub_command_t. + + * commands/help.c (grub_cmd_help): Call grub_command_find to make + sure that each command is loaded. + + * genmk.rb (PModule::rule): Specify a module name without the + suffix ".mod" to gencmdlist.sh. + +2005-03-02 Yoshinori K. Okuji + + * gencmdlist.sh: New file. + + * genmk.rb (PModule::rule): Generate a rule for a command list. + Clean command.lst. + Generate command.lst from $(COMMANDFILES). + + * Makefile.in (COMMON_DISTFILES): Added gencmdlist.sh. + (DATA): Added $(pkgdata_DATA). + (install-local): Install files in $(pkgdata_DATA). + +2005-03-02 Yoshinori K. Okuji + + * term/i386/pc/vga.c (debug_command): Removed. + (GRUB_MOD_INIT): Do not register the command "debug". + + From Hollis Blanchard: + * commands/configfile.c: New file. + * conf/i386-pc.rmk (grub_emu_SOURCES): Added + commands/configfile.c. + (pkgdata_MODULES): Added configfile.mod. + (configfile_mod_SOURCES): New variable. + (configfile_mod_CFLAGS): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added + commands/configfile.c. + (pkgdata_MODULES): Added configfile.mod. + (configfile_mod_SOURCES): New variable. + (configfile_mod_CFLAGS): Likewise. + * util/grub-emu.c (main): Call grub_configfile_init and + grub_configfile_fini. + * include/grub/normal.h [GRUB_UTIL] (grub_configfile_init): New + prototype. + [GRUB_UTIL] (grub_configfile_fini): Likewise. + +2005-02-27 Yoshinori K. Okuji + + * normal/arg.c (grub_arg_show_help): Do not show the bug report + address. + + * commands/help.c (grub_cmd_help): Do not print newlines after + the last command in print_command_help. + +2005-02-27 Yoshinori K. Okuji + + * commands/default.h: New file. + * commands/timeout.h: Likewise. + * normal/context.c: Likewise. + + * util/misc.c: Do not include sys/times.h. + Include sys/time.h and grub/machine/time.h. + (grub_get_rtc): Rewritten with gettimeofday. + + * util/grub-emu.c (main): Call grub_default_init and + grub_timeout_init before grub_normal_init, and call + grub_timeout_fini and grub_default_fini after grub_main. + + * util/console.c (grub_ncurses_checkkey): Return the read + character or -1. + + * normal/menu.c (run_menu): Set MENU->TIMEOUT to -1 once it + timeouts. + + * normal/main.c (read_config_file): Push MENU. If this fails, + print an error and wait for a user input. + Print an error only if GRUB_ERRNO is not GRUB_ERR_NONE. + If a menu is empty or an error occurs, pop MENU. + (grub_normal_execute): Pop and free MENU after grub_menu_run + returns. + + * kern/loader.c (grub_loader_boot): Call grub_machine_fini. + + * include/grub/powerpc/ieee1275/time.h [GRUB_UTIL]: Do not + include time.h. + [GRUB_UTIL] (GRUB_TICKS_PER_SECOND): Use the same definition as + without GRUB_UTIL. + * include/grub/i386/pc/time.h [GRUB_UTIL]: Do not include + time.h. + [GRUB_UTIL] (GRUB_TICKS_PER_SECOND): Use the same definition as + without GRUB_UTIL. + + * include/grub/normal.h (struct grub_menu_list): New struct. + (grub_menu_list_t): New type. + (struct grub_context): New struct. + (grub_context_t): New type. + (grub_register_command): Got rid of EXPORT_FUNC. + (grub_unregister_command): Likewise. + (grub_context_get): New prototype. + (grub_context_get_current_menu): Likewise. + (grub_context_push_menu): Likewise. + (grub_context_pop_menu): Likewise. + [GRUB_UTIL] (grub_default_init): Likewise. + [GRUB_UTIL] (grub_default_fini): Likewise. + [GRUB_UTIL] (grub_timeout_init): Likewise. + [GRUB_UTIL] (grub_timeout_fini): Likewise. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Added commands/default.c, + commands/timeout.c and normal/context.c. + (pkgdata_MODULES): Added default.mod and timeout.mod. + (normal_mod_SOURCES): Added normal/context.c. + (default_mod_SOURCES): New variable. + (default_mod_CFLAGS): Likewise. + (timeout_mod_SOURCES): Likewise. + (timeout_mod_CFLAGS): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Copied from + conf/i386-pc.rmk. + (pkgdata_MODULES): Added default.mod and timeout.mod. + (normal_mod_SOURCES): Added normal/context.c. + (default_mod_SOURCES): New variable. + (default_mod_CFLAGS): Likewise. + (timeout_mod_SOURCES): Likewise. + (timeout_mod_CFLAGS): Likewise. + + * Makefile.in (all-local): Added $(MKFILES). + +2005-02-21 Vincent Pelletier + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add `partmap/sun.c'. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add `sun.mod'. + (sun_mod_SOURCES, sun_mod_CFLAGS): New variables. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add + `partmap/sun.c'. + (pkgdata_MODULES): Add `sun.mod'. + (sun_mod_SOURCES, sun_mod_CFLAGS): New variables. + * include/grub/partition.h (grub_sun_partition_map_init): New + prototype. + (grub_sun_partition_map_fini): Likewise. + * partmap/sun.c: New file. + * util/grub-emu.c (main): Initialize and de-initialize the sun + partitionmap support. + +2005-02-19 Yoshinori K. Okuji + + This implements an Emacs-like menu entry editor. + + * normal/menu_entry.c: New file. + + * util/console.c (grub_ncurses_putchar): Translate some Unicode + characters to ASCII. + (saved_char): New variable. + (grub_ncurses_checkkey): Rewritten completely. + (grub_ncurses_getkey): Likewise. + (grub_ncurses_init): Call raw instead of cbreak. + + * normal/menu.c (print_entry): Do not put a space. + (init_page): Renamed to ... + (grub_menu_init_page): ... this. All callers changed. + (edit_menu_entry): Removed. + (run_menu): Call grub_menu_entry_run instead of edit_menu_entry. + + * normal/cmdline.c (grub_cmdline_run): Call grub_setcursor. + + * kern/misc.c (grub_vprintf): Call grub_refresh. + + * normal/menu.c (DISP_LEFT): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_LEFT): ... this. + * normal/menu.c (DISP_UP): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_UP): ... this. + * normal/menu.c (DISP_RIGHT): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_RIGHT): ... this. + * normal/menu.c (DISP_DOWN): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_DOWN): ... this. + * normal/menu.c (DISP_HLINE): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_HLINE): ... this. + * normal/menu.c (DISP_VLINE): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_VLINE): ... this. + * normal/menu.c (DISP_UL): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_UL): ... this. + * normal/menu.c (DISP_UR): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_UR): ... this. + * normal/menu.c (DISP_LL): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_LL): ... this. + * normal/menu.c (DISP_LR): Renamed to ... + * include/grub/term.h (GRUB_TERM_DISP_LR): ... this. + * normal/menu.c (TERM_WIDTH): Renamed to ... + * include/grub/term.h (GRUB_TERM_WIDTH): ... this. + * normal/menu.c (TERM_HEIGHT): Renamed to ... + * include/grub/term.h (GRUB_TERM_HEIGHT): ... this. + * normal/menu.c (TERM_INFO_HEIGHT): Renamed to ... + * include/grub/term.h (GRUB_TERM_INFO_HEIGHT): ... this. + * normal/menu.c (TERM_MARGIN): Renamed to ... + * include/grub/term.h (GRUB_TERM_MARGIN): ... this. + * normal/menu.c (TERM_SCROLL_WIDTH): Renamed to ... + * include/grub/term.h (GRUB_TERM_SCROLL_WIDTH): ... this. + * normal/menu.c (TERM_TOP_BORDER_Y): Renamed to ... + * include/grub/term.h (GRUB_TERM_TOP_BORDER_Y): ... this. + * normal/menu.c (TERM_LEFT_BORDER_X): Renamed to ... + * include/grub/term.h (GRUB_TERM_LEFT_BORDER_X): ... this. + * normal/menu.c (TERM_BORDER_WIDTH): Renamed to ... + * include/grub/term.h (GRUB_TERM_BORDER_WIDTH): ... this. + * normal/menu.c (TERM_MESSAGE_HEIGHT): Renamed to ... + * include/grub/term.h (GRUB_TERM_MESSAGE_HEIGHT): ... this. + * normal/menu.c (TERM_BORDER_HEIGHT): Renamed to ... + * include/grub/term.h (GRUB_TERM_BORDER_HEIGHT): ... this. + * normal/menu.c (TERM_NUM_ENTRIES): Renamed to ... + * include/grub/term.h (GRUB_TERM_NUM_ENTRIES): ... this. + * normal/menu.c (TERM_FIRST_ENTRY_Y): Renamed to ... + * include/grub/term.h (GRUB_TERM_FIRST_ENTRY_Y): ... this. + * normal/menu.c (TERM_ENTRY_WIDTH): Renamed to ... + * include/grub/term.h (GRUB_TERM_ENTRY_WIDTH): ... this. + * normal/menu.c (TERM_CURSOR_X): Renamed to ... + * include/grub/term.h (GRUB_TERM_CURSOR_X): ... this. + All callers changed. + + * include/grub/normal.h: New prototype. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Added + normal/menu_entry.c. + (normal_mod_SOURCES): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise. + (normal_mod_SOURCES): Likewise. + +2005-02-15 Yoshinori K. Okuji + + * include/grub/normal.h (grub_halt_init): New prototype. + (grub_halt_fini): Likewise. + (grub_reboot_init): Likewise. + (grub_reboot_fini): Likewise. + + * util/grub-emu.c: Include signal.h. + (main_env): New global variable. + (grub_machine_init): Ignore SIGINT. Otherwise grub-emu cannot + catch C-c. + (grub_machine_fini): New function. + (main): Call grub_halt_init and grub_reboot_init before + grub_main, and grub_reboot_fini and grub_halt_fini after it. + Call setjmp with MAIN_ENV to go back afterwards. + Call grub_machine_fini right before return. + + * include/grub/util/misc.h: Include setjmp.h. + (main_env): New prototype. + + * include/grub/kernel.h (grub_machine_fini): New prototype. + * include/grub/i386/pc/biosdisk.h (grub_biosdisk_fini): Likewise. + * include/grub/i386/pc/console.h (grub_console_fini): Likewise. + + * disk/i386/pc/biosdisk.c (grub_biosdisk_fini): New function. + * kern/i386/pc/init.c (grub_machine_fini): Likewise. + * term/i386/pc/console.c (grub_console_fini): Likewise. + + * util/i386/pc/misc.c: New file. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Added + util/i386/pc/misc.c, commands/i386/pc/halt.c and + commands/i386/pc/reboot.c. + +2005-02-14 Guillem Jover + + * include/grub/dl.h (grub_dl_check_header): New prototype. + (grub_arch_dl_check_header): Change return type to grub_err_t, + remove size parameter and export function. Update all callers. + * kern/dl.c (grub_dl_check_header): New function. + (grub_dl_load_core): Use `grub_dl_check_header' instead of + `grub_arch_dl_check_header'. Check ELF type. Check if sections + are inside the core. + * kern/i386/dl.c (grub_arch_dl_check_header): Remove arch + independent ELF header checks. + * kern/powerpc/dl.c (grub_arch_dl_check_header): Likewise. + * loader/i386/pc/multiboot.c (grub_rescue_cmd_multiboot): Use + `grub_dl_check_header' instead of explicit checks. Check for the + ELF type. + * loader/powerpc/ieee1275/linux.c (grub_rescue_cmd_linux): Use + `grub_dl_check_header' instead of explicit checks. Remove arch + specific ELF header checks. + + * util/grub-emu.c (grub_arch_dl_check_header): Remove the + argument SIZE. + +2005-02-13 Hollis Blanchard + + * conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Add ls.mod. + * include/grub/powerpc/libgcc.h (__mulsf3): New prototype. + +2005-02-12 Hollis Blanchard + + * kern/partition.c (grub_partition_probe): Clear `grub_errno' and + return 0 if `grub_errno' is GRUB_ERR_BAD_PART_TABLE. + (part_map_iterate): Clear `grub_errno' and return 0 if + `partmap->iterate' returns GRUB_ERR_BAD_PART_TABLE. + * partmap/amiga.c (amiga_partition_map_iterate): Return + GRUB_ERR_BAD_PART_TABLE if no partition map magic is found. + * partmap/apple.c (apple_partition_map_iterate): Likewise. + +2005-02-01 Guillem Jover + + * loader/i386/pc/multiboot_normal.c (GRUB_MOD_INIT): Fix module + help info. + +2005-01-31 Marco Gerards + + * include/grub/powerpc/ieee1275/loader.h (grub_load_linux): + Removed prototype. + (grub_rescue_cmd_linux): New prototype. + (grub_rescue_cmd_initrd): Likewise. + * powerpc/ieee1275/linux.c (grub_linux_boot): Remove struct + `bi_rec'. + (grub_linux_release_mem): Release the memory for the initrd. + (grub_load_linux): Renamed from this... + (grub_rescue_cmd_linux): ...To this. Changed all callers. + Changed `entry' not to be static. Loop over memory regions to + find another one when the default fails. + (grub_rescue_cmd_initrd): New function. + (grub_linux_init): Remove function. + (grub_linux_fini): Likewise. + (GRUB_MOD_INIT): Register `initrd'. + (GRUB_MOD_FINI): Unregister `initrd'. + * powerpc/ieee1275/linux_normal.c (grub_linux_normal_init): + Function removed. + (grub_linux_normal_fini): Likewise. + (GRUB_MOD_INIT): Register `initrd'. + (GRUB_MOD_FINI): Unregister `initrd'. + +2005-01-31 Marco Gerards + + * commands/help.c: New file. + * normal/arg.c (show_help): Renamed to... + (grub_arg_show_help): ... this. + * commands/i386/pc/halt.c: New file. + * commands/i386/pc/reboot.c: Likewise. + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `commands/help.c'. + (pkgdata_MODULES): Add `reboot.mod', `halt.mod' and `help.mod'. + (help_mod_SOURCES, help_mod_CFLAGS, reboot_mod_SOURCES) + (reboot_mod_CFLAGS, halt_mod_SOURCES, halt_mod_CFLAGS): New + variables. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add + `commands/help.c'. + (pkgdata_MODULES): Add `help.mod'. + (help_mod_SOURCES, help_mod_CFLAGS): New variables. + * grub/i386/pc/init.h (grub_reboot): New prototype. + (grub_halt): Likewise. + * include/grub/normal.h (grub_arg_show_help): New prototype. + (grub_help_init): Likewise. + (grub_help_fini): Likewise. + * util/grub-emu.c (main): Initialize and deinitialize the help + command. + + * normal/cmdline.c (grub_cmdline_get): Doc fix. + + * normal/command.c (grub_command_init): Fixed the description of + the `set' and `unset' commands. + +2005-01-31 Marco Gerards + + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_interpret): New + function. + * commands/ieee1275/halt.c: New file. + * commands/ieee1275/reboot.c: Likewise. + * commands/ieee1275/suspend.c (grub_cmd_suspend): Use + `__attribute__ ((unused))'. Some GCS related fixed. + (grub_suspend_init) [GRUB_UTIL]: Function removed. + (grub_suspend_fini): Likewise. + * conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Add `reboot.mod' + and `halt.mod'. + (reboot_mod_SOURCES, reboot_mod_CFLAGS, halt_mod_SOURCES) + (halt_mod_CFLAGS): New variables. + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_interpret): New prototype. + +2005-01-29 Yoshinori K. Okuji + + * include/grub/misc.h (memmove): New prototype. + (memcpy): Likewise. + +2005-01-22 Hollis Blanchard + + * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_open): Don't initialize + `devpath' to 0. Use `name' instead of `devpath' with `grub_strndup'. + +2005-01-22 Marco Gerards + + * kern/misc.c (grub_strndup): Function rewritten. + +2005-01-22 Vincent Pelletier + + * normal/menu.c (TERM_WIDTH): Macro redefined. + (TERM_TOP_BORDER_Y): Likewise. + (draw_border): Replaced while-loop by a for-loop. Make the number + of lines consistent with the number of lines displayed in + print_entries. Added a margin below the rectangle. + (print_entry): Make the entry fit in the rectangle. + (print_entries): Display the scroll arrows next to the right + border. + +2005-01-21 Marco Gerards + + * fs/minix.c (grub_minix_find_file): Reserve more space for + `fpath' so the \0 can be stored. Use `grub_strcpy' instead of + `grub_strncpy' to copy `path' into it. + +2005-01-21 Marco Gerards + + Add the loopback device, a device via which files can be accessed + as devices. + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add `disk/loopback.c'. + (pkgdata_MODULES): Add loopback.mod. + (loopback_mod_SOURCES): New variable. + (loopback_mod_CFLAGS): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add + `disk/loopback.c'. + (pkgdata_MODULES): Add loopback.mod. + (loopback_mod_SOURCES): New variable. + (loopback_mod_CFLAGS): Likewise. + * disk/loopback.c: new file. + * include/grub/normal.h (grub_loop_init): New prototype. + (grub_loop_fini): New prototype. + * util/grub-emu.c (main): Initialize and de-initialize loopback + support. + * include/grub/disk.h (grub_disk_dev_id): Add + `GRUB_DISK_DEVICE_LOOPBACK_ID'. + +2005-01-20 Hollis Blanchard + + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_enter): New + function. + * conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Add suspend.mod. + (suspend_mod_SOURCES): New variable. + (suspend_mod_CFLAGS): Likewise. + * include/grub/powerpc/ieee1275/ieee1275.h (grub_ieee1275_enter): + New prototype. + * commands/ieee1275/suspend.c: New file. + +2005-01-20 Timothy Baldwin + + * include/grub/dl.h (GRUB_MOD_INIT): Changed `__attribute__ + ((unused))' to `__attribute__ ((used))'. + (GRUB_MOD_FINI): Likewise. + * kern/dl.c (grub_dl_load_file): Fix null pointer dereference. + * genmk.rb (PModule): Assign space to common symbols when linking + modules. + +2005-01-20 Marco Gerards + + * include/grub/mm.h (grub_mm_init_region): Change the type of the + `unsigned' arguments to `grub_size_t'. + (grub_malloc): Likewise. + (grub_realloc): Likewise. + (grub_memalign): Likewise. + * kern/i386/dl.c (grub_arch_dl_check_header): Likewise. + * kern/powerpc/dl.c (grub_arch_dl_check_header): Likewise. + * util/misc.c (grub_malloc): Likewise. + (grub_realloc): Likewise. + * kern/mm.c (get_header_from_pointer): Change the casts to + `unsigned' into a cast to `grub_size_t'. + + * fs/fshelp.c (grub_fshelp_find_file): The `oldnode' should always + point to `currnode' when `currnode' is changed. + + * util/grub-emu.c (main): Initialize `progname'. Reported by Nico + Schottelius . + +2005-01-09 Hollis Blanchard + + * util/powerpc/ieee1275/grub-mkimage.c: Include . + (note_path): Remove variable. + (GRUB_IEEE1275_NOTE_NAME): New macro. + (GRUB_IEEE1275_NOTE_TYPE): Likewise. + (grub_ieee1275_note_hdr): New structure. + (grub_ieee1275_note_desc): Likewise. + (grub_ieee1275_note): Likewise. + (load_note): Remove `dir' argument. All callers updated. Remove + `note_img' and `path'. Do not load a file from `note_path'. + Initialize a struct grub_ieee1275_note and write that to `out'. + Use GRUB_IEEE1275_MODULE_BASE instead of MODULE_BASE. + +2005-01-05 Marco Gerards + + * util/misc.c (grub_util_read_image): Revert last change. It + called `grub_util_read_at', which seeks from the beginning of the + file. + +2005-01-04 Hollis Blanchard + + * TODO: Add note about endianness in grub-mkimage. + * boot/powerpc/ieee1275/crt0.S (note): Remove unused .note + section. + * conf/powerpc-ieee1275.rmk (bin_UTILITIES): Add grub-mkimage. + (grub_mkimage_SOURCES): New target. + * include/grub/kernel.h (grub_start_addr): Remove variable. + (grub_end_addr): Likewise. + (grub_total_module_size): Likewise. + (grub_kernel_image_size): Likewise. + (GRUB_MODULE_MAGIC): New constant. + (grub_module_info): New structure. + (grub_arch_modules_addr): New prototype. + (grub_get_end_addr): Remove prototype. + * include/grub/i386/pc/kernel.h (grub_end_addr): New prototype. + * include/grub/powerpc/ieee1275/kernel.h: New file. + * include/grub/util/misc.h (grub_util_get_fp_size): New + prototype. + (grub_util_read_at): Likewise. + (grub_util_write_image_at): Likewise. + * kern/main.c (grub_get_end_addr): Remove function. + (grub_load_modules): Call grub_arch_modules_addr instead of using + grub_end_addr. Look for a grub_module_info struct in memory. Use + the grub_module_info fields instead of calling grub_get_end_addr + as loop conditions. Move grub_add_unused_region code here. + (grub_add_unused_region): Remove function. + * kern/i386/pc/init.c: Include grub/cache.h. + (grub_machine_init): Remove call to grub_get_end_addr. Remove + one call to add_mem_region. + (grub_arch_modules_addr): New function. + * kern/powerpc/ieee1275/init.c (grub_end_addr): Remove variable. + (grub_total_module_size): Likewise. + Include grub/machine/kernel.h. + (grub_arch_modules_addr): New function. + * util/grub-emu.c (grub_end_addr): Remove variable. + (grub_total_module_size): Likewise. + (grub_arch_modules_addr): New function. + * util/misc.c: Include unistd.h. + (grub_util_get_fp_size): New function. + (grub_util_read_at): Likewise. + (grub_util_write_image_at): Likewise. + (grub_util_read_image): Call grub_util_read_at. + (grub_util_write_image): Call grub_util_write_image_at. + * util/i386/pc/grub-mkimage.c (generate_image): Allocate + additional memory in kernel_img for a struct grub_module_info. + Fill in that grub_module_info. + * util/powerpc/ieee1275/grub-mkimage.c: New file. + +2005-01-03 Hollis Blanchard + + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_milliseconds): + New function. + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_milliseconds): New prototype. + * include/grub/powerpc/ieee1275/time.h (GRUB_TICKS_PER_SECOND): + Change to 1000. + * kern/powerpc/ieee1275/init.c (grub_get_rtc): Call + grub_ieee1275_milliseconds. + +2005-01-03 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c (grub_ieee1275_realmode): New + variable. + (find_options): New function. + (cmain): Call find_options. + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_realmode): New extern variable. + * kern/powerpc/ieee1275/openfw.c (grub_claimmap): Only call + grub_map if grub_ieee1275_realmode is false. + +2004-12-29 Marco Gerards + + * normal/cmdline.c (grub_cmdline_get): Redone logic so no empty + lines are inserted and make it work like readline. Reported by + Vincent Pelletier . + +2004-12-28 Marco Gerards + + * boot/powerpc/ieee1275/crt0.S (_start): Don't set up the stack. + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCE): Remove + `kern/powerpc/cache.S'. + +2004-12-27 Marco Gerards + + * genmk.rb: Handle the `Program' class in the main loop. Written + by Johan Rydberg . + (Program): New class. + (programs): New variable. + * boot/powerpc/ieee1275/cmain.c: Include + instead of "grub/machine/ieee1275.h". Include + instead of "grub/kernel.h". Include . + (help_arch): Function removed. + * conf/powerpc-ieee1275.rmk (grubof_HEADERS): Add + `powerpc/libgcc.h' and `loader.h'. + (pkgdata_PROGRAMS): New variable. + (sbin_UTILITIES): Variable removed. + (grub_emu_SOURCES): Added kern/powerpc/cache.S. + (grubof_SOURCES): Variable re-defined so it only includes the + core functionality. + (grubof_CFLAGS): Remove `-DGRUBOF'. + (pkgdata_MODULES, fshelp_mod_SOURCES, fshelp_mod_CFLAGS, + (fat_mod_SOURCES, fat_mod_CFLAGS, ext2_mod_SOURCES) + (ext2_mod_CFLAGS, ufs_mod_SOURCES, ufs_mod_CFLAGS) + (minix_mod_SOURCES, minix_mod_CFLAGS, hfs_mod_SOURCES) + (hfs_mod_CFLAGS, jfs_mod_SOURCES, jfs_mod_CFLAGS) + (iso9660_mod_SOURCES, iso9660_mod_CFLAGS, _linux_mod_SOURCES) + (_linux_mod_CFLAGS, linux_mod_SOURCES, linux_mod_CFLAGS) + (normal_mod_SOURCES, normal_mod_CFLAGS, normal_mod_ASFLAGS) + (hello_mod_SOURCES, hello_mod_CFLAGS, boot_mod_SOURCES) + (boot_mod_CFLAGS, terminal_mod_SOURCES, terminal_mod_CFLAGS) + (ls_mod_SOURCES, ls_mod_CFLAGS, cmp_mod_SOURCES, cmp_mod_CFLAGS) + (cat_mod_SOURCES, cat_mod_CFLAGS, font_mod_SOURCES) + (font_mod_CFLAGS, amiga_mod_SOURCES, amiga_mod_CFLAGS) + (apple_mod_SOURCES, apple_mod_CFLAGS, pc_mod_SOURCES) + (pc_mod_CFLAGS): New variables. + * disk/powerpc/ieee1275/ofdisk.c: Include . + (grub_ofdisk_iterate): Add a prototype for `dev_iterate'. + * include/grub/dl.h (grub_arch_dl_sync_caches): New prototype. + * include/grub/loader.h (grub_os_area_addr, grub_os_area_size): + Moved from here... + * include/grub/i386/pc/init.h (grub_os_area_addr) + (rub_os_area_size): ... to here. + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_entry_fn): Export symbol. + * include/grub/powerpc/ieee1275/init.h: New file. + * include/grub/powerpc/libgcc.h: Likewise. + * include/grub/cache.h: Likewise. + * kern/powerpc/cache.S: Likewise. Written by Hollis Blanchard + . + * kern/dl.c: Include . + (grub_dl_flush_cache): New function. + (grub_dl_load_core): Call `grub_dl_flush_cache' to flush the cache + for this module. + * kern/powerpc/ieee1275/init.c (grub_ofdisk_init) + (grub_console_init): Removed prototypes. + (grub_machine_init): Don't initialize the modules anymore. + * kern/powerpc/ieee1275/openfw.c (grub_map): Make the function + static. + * include/grub/powerpc/types.h (GRUB_HOST_WORDS_LITTLEENDIAN): + Macro undef removed. + (GRUB_HOST_WORDS_BIGENDIAN): New macro. + * kern/powerpc/dl.c (grub_arch_dl_relocate_symbols): Add + relocation `R_PPC_REL32'. Return an error when the relocation is + unknown. + * Makefile.in (DATA): Add `$(pkgdata_PROGRAMS)'. + * kern/i386/pc/init.c (grub_arch_sync_caches): New function. + * util/misc.c (grub_arch_sync_caches): Likewise. + +2004-12-19 Marco Gerards + + * conf/powerpc-ieee1275.rmk (MOSTLYCLEANFILES): Remove + `symlist.c', add `grubof_symlist.c'. + (symlist.c): Variable removed. + (grubof_HEADERS): Variable added. + (grubof_symlist.c): New target. + (kernel_syms.lst): Use `grubof_HEADERS' instead of + `kernel_img_HEADERS'. + (grubof_SOURCES): Add `kern/powerpc/dl.c' and `grubof_symlist.c'. + * kern/powerpc/dl.c: New file. + * kern/powerpc/ieee1275/init.c (grub_arch_dl_check_header): + Function removed. + (grub_arch_dl_relocate_symbols): Likewise. + (grub_register_exported_symbols): Likewise. + +2004-12-13 Marco Gerards + + * fs/ext2.c (grub_ext2_open): Don't use data after freeing it. + (grub_ext2_dir): Likewise. Don't return in case of an error, jump + to fail instead. Reported by Vincent Pelletier + . + + * fs/fshelp.c (grub_fshelp_find_file): Don't free `oldnode' when + it is not allocated. Reported by Vincent Pelletier + . + + * normal/cmdline.c (grub_tab_complete): Add a blank line to the + output so the output looks better. + +2004-12-04 Marco Gerards + + Modulize the partition map support and add support for the amiga + partition map. + + * commands/ls.c: Include instead of + . + * kern/disk.c: Likewise. + * kern/rescue.c: Likewise. + * loader/i386/pc/chainloader.c: Likewise. + * normal/cmdline.c: Likewise. + * kern/powerpc/ieee1275/init.c: Likewise. + (grub_machine_init): Call `grub_pc_partition_map_init', + `grub_amiga_partition_map_init' and + `grub_apple_partition_map_init'. + * conf/i386-pc.rmk (kernel_img_SOURCES): Remove + `disk/i386/pc/partition.c'. Add `kern/partition.c'. + (kernel_img_HEADERS): Remove `machine/partition.h'. Add + `partition.h' and `pc_partition.h'. + (grub_setup_SOURCES): Remove + `disk/i386/pc/partition.c'. Add `kern/partition.c', + `partmap/amiga.c', `partmap/apple.c' and `partmap/pc.c'. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add `amiga.mod', `apple.mod' and `pc.mod'. + (amiga_mod_SOURCES, amiga_mod_CFLAGS, apple_mod_SOURCES) + (apple_mod_CFLAGS, pc_mod_SOURCES, pc_mod_CFLAGS): New variables. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Remove + `disk/powerpc/ieee1275/partition.c'. Add `kern/partition.c', + `partmap/amiga.c', `partmap/apple.c' and `partmap/pc.c'. + (grubof_SOURCES): Likewise. + * disk/i386/pc/partition.c: File removed. + * disk/powerpc/ieee1275/partition.c: Likewise. + * include/grub/powerpc/ieee1275/partition.h: Likewise. + * include/grub/i386/pc/partition.h: Likewise. + * kern/partition.c: New file. + * partmap/amiga.c: Likewise. + * partmap/apple.c: Likewise. + * partmap/pc.c: Likewise. + * include/grub/partition.h: Likewise.. + * include/grub/pc_partition.h: Likewise. + * util/grub-emu.c: Include instead of + . + (main): Call `grub_pc_partition_map_init', + `grub_amiga_partition_map_init' and + `grub_apple_partition_map_init' and deinitialize afterwards. + * util/i386/pc/biosdisk.c: Include `#include + ' and `include ' instead of + `'. + * util/i386/pc/grub-setup.c: Likewise. + * util/i386/pc/biosdisk.c: Likewise. + (grub_util_biosdisk_get_grub_dev): Only access the PC specific + partition information in case of a PC partition. + * util/i386/pc/grub-setup.c: Include `#include + ' and `include ' instead of + `'. + (setup): Only access the PC specific partition information in case + of a PC partition. + +2004-11-17 Hollis Blanchard + + * kern/powerpc/ieee1275/init.c (grub_setjmp): Remove function. + (grub_longjmp): Likewise. + * include/grub/powerpc/setjmp.h (grub_jmp_buf): Set array size to + 20. + * normal/powerpc/setjmp.S: New file. + * conf/powerpc-ieee1275.rmk (grubof_SOURCES): Add + `normal/powerpc/setjmp.S'. + (grubof_CFLAGS): Add `-DGRUBOF'. + * include/grub/setjmp.h [GRUB_UTIL]: Changed condition to + [GRUB_UTIL && !GRUBOF]. + +2004-11-16 Marco Gerards + + * kern/powerpc/ieee1275/openfw.c (grub_devalias_iterate): Skip any + property named `name'. Correctly handle the error returned by + `grub_ieee1275_finddevice' if a device can not be opened. + +2004-11-02 Hollis Blanchard + + * term/powerpc/ieee1275/ofconsole.c (grub_ofconsole_readkey): Test + `actual' for negativity. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Remove + kern/fshelp.c. + +2004-11-01 Marco Gerards + + * term/i386/pc/vga.c (VGA_HEIGHT): Changed to 350. + (PAGE_OFFSET): New macro. + (CRTC_ADDR_PORT): Likewise. + (CRTC_DATA_PORT): Likewise. + (START_ADDR_HIGH_REGISTER): Likewise. + (START_ADDR_LOW_REGISTER): Likewise. + (GRAPHICS_ADDR_PORT): Likewise. + (GRAPHICS_DATA_PORT): Likewise. + (READ_MAP_REGISTER): Likewise. + (INPUT_STATUS1_REGISTER): Likewise. + (INPUT_STATUS1_VERTR_BIT): Likewise. + (page): New variable. + (wait_vretrace): New function. + (set_read_map): Likewise. + (set_start_address): Likewise. + (grub_vga_init): Use mode 0x10 instead of mode 0x12. Switch to + the right page. + (check_vga_mem): Take the page into account. + (write_char): Likewise. + (write_cursor): Likewise. + (scroll_up): Likewise. Copy the page to the page that is not + shown and switch between both pages. + (grub_vga_putchar): Fix off by one error. + (grub_vga_cls): Wait for the vertical retrace. Take the page into + account. + +2004-11-01 Marco Gerards + + Add support for iso9660 (including rockridge). + + * conf/i386-pc.rmk (grub_emu_SOURCES): Add fs/iso9660.c. + (iso9660_mod_SOURCES): New variable. + (iso9660_mod_CFLAGS): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add fs/iso9660.c. + * include/grub/fs.h (grub_iso9660_init): New prototype. + * util/grub-emu.c (main): Call `grub_iso9660_init'. + * fs/iso9660.c: New file. + + * include/grub/misc.h (grub_strncat): New prototype. + * kern/misc.c (grub_strncat): New function. + + * fs/hfs.c (grub_hfs_mount): Translate the error + `GRUB_ERR_OUT_OF_RANGE' to `GRUB_ERR_BAD_FS'. + * fs/jfs.c (grub_jfs_mount): Likewise. + * fs/ufs.c (grub_ufs_mount): Likewise. + +2004-10-28 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c (cmain): Remove asm statements + which initialized BAT registers. + * boot/powerpc/ieee1275/ieee1275.c (IEEE1275_CALL_ENTRY_FN, + grub_ieee1275_common_hdr, INIT_IEEE1275_COMMON): + Move from here... + * include/grub/powerpc/ieee1275/ieee1275.h (IEEE1275_CALL_ENTRY_FN, + grub_ieee1275_common_hdr, INIT_IEEE1275_COMMON): + ... to here. + * kern/powerpc/ieee1275/openfw.c (grub_map): New function. + (grub_mapclaim): Likewise. + * loader/powerpc/ieee1275/linux.c (grub_load_linux): Use + grub_mapclaim instead of grub_ieee1275_claim. Assign linux_addr by + hand. + +2004-10-19 Hollis Blanchard + + * conf/powerpc-ieee1275.rmk (COMMON_ASFLAGS): Remove -fno-builtin. + (COMMON_CFLAGS): Remove -fno-builtin and -D__ASSEMBLY__. Add + -ffreestanding and -msoft-float. + +2004-10-15 Hollis Blanchard + + * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_open): Do not + append ":0" to devpath if the GRUB_IEEE1275_NO_PARTITION_0 flag is + set in grub_ieee1275_flags. + +2004-10-14 Hollis Blanchard + + * include/grub/powerpc/ieee1275/ieee1275.h (abort): Add function + prototype. + * kern/powerpc/ieee1275/init.c (grub_machine_init): Call + grub_console_init first. + Change the memory range used for grub_ieee1275_claim and + grub_mm_init_region. + Print an error message if the claim fails. + Include . + +2004-10-13 Hollis Blanchard + + * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_iterate): + Call grub_children_iterate for device nodes of type `scsi', + `ide', or `ata'. + (grub_ofdisk_open): Remove manual device alias resolution. + Fix memory leak when device cannot be opened. + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_children_iterate): New prototype. + * kern/powerpc/ieee1275/openfw.c (grub_children_iterate): + New function. + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_get_property): + Return -1 if args.size was -1. + +2004-10-11 Hollis Blanchard + + * boot/powerpc/ieee1275/cmain.c (grub_ieee1275_flags): New global. + (cmain): Accept 3 parameters. Test for 0xdeadbeef, indicating Old + World Macintosh. If Old Wold, set flag in grub_ieee1275_flags; claim + Open Firmware's memory for it; claim memory from _start to _end. + * boot/powerpc/ieee1275/crt0.S (__bss_start): New extern. + (_end): New extern. + (_start): Zero BSS from __bss_start to _end. + * include/grub/powerpc/ieee1275/ieee1275.h (grub_ieee1275_flags): + New extern. + (GRUB_IEEE1275_NO_PARTITION_0): New #define. + +2004-10-11 Hollis Blanchard + + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_claim): Return + -1 if args.base was -1. + +2004-10-08 Hollis Blanchard + + * term/powerpc/ieee1275/ieee1275.c (grub_ofconsole_cls): Use an ANSI + escape sequence instead of a literal ^L. Also call + grub_ofconsole_gotoxy. + +2004-10-03 Hollis Blanchard + + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_claim): change + void * arguments to grub_addr_t. All callers updated. Also make + the `result' argument optional. + (grub_ieee1275_release): change void * arguments to grub_addr_t. + All callers updated. + +2004-09-22 Hollis Blanchard + + * commands/ls.c (grub_ls_list_files): Use the string following the + initial ')', if present, as the filesystem path. + * kern/rescue.c (grub_rescue_cmd_ls): Likewise. + + * conf/powerpc-ieee1275.rmk (grubof_SOURCES): List crt0.S first. + +2004-09-18 Yoshinori K. Okuji + + Make the source code of the menu interface more readable. + + * normal/menu.c: Include grub/mm.h. + (TERM_WIDTH): New macro. + (TERM_HEIGHT): Likewise. + (TERM_INFO_HEIGHT): Likewise. + (TERM_MARGIN): Likewise. + (TERM_SCROLL_WIDTH): Likewise. + (TERM_TOP_BORDER_Y): Likewise. + (TERM_LEFT_BORDER_X): Likewise. + (TERM_BORDER_WIDTH): Likewise. + (TERM_MESSAGE_HEIGHT): Likewise. + (TERM_BORDER_HEIGHT): Likewise. + (TERM_NUM_ENTRIES): Likewise. + (TERM_FIRST_ENTRY_Y): Likewise. + (TERM_ENTRY_WIDTH): Likewise. + (TERM_CURSOR_X): Likewise. + (draw_border): Use macros instead of magic numbers. + (print_entry): Likewise. + (print_entries): Likewise. + (run_menu): Likewise. Also, handle the key 'e'. + (run_menu_entry): Ignore empty command lines. + (print_message): Added a new argument EDIT. If EDIT is true, + print a different message. + (init_page): Likewise. + (edit_menu_entry): New function. Not implemented yet. + +2004-09-17 Marco Gerards + + Add `linux.mod' and `multiboot.mod' so linux and multiboot kernels + can be loaded from normal mode. + + * conf/i386-pc.rmk (pkgdata_MODULES): Add `linux.mod' and + `multiboot.mod'. + (linux_mod_SOURCES, linux_mod_CFLAGS, multiboot_mod_SOURCES) + (multiboot_mod_CFLAGS): New variables. + * loader/i386/pc/linux_normal.c: New file. + * loader/i386/pc/multiboot_normal.c: Likewise. + + * loader/i386/pc/linux.c (grub_rescue_cmd_initrd): Don't use the + attribute `unused'. + + * fs/ext2.c (grub_ext2_iterate_dir): Fix typos in inode type. Use + `fdiro' to read the mode information from instead of `diro'. + + * fs/fshelp.c (grub_fshelp_find_file): Set type to foundtype after + looking up a symlink. + + * include/grub/normal.h (GRUB_COMMAND_FLAG_NO_ARG_PARSE): New + macro. + * normal/command.c (grub_command_execute): Don't parse the + arguments when `GRUB_COMMAND_FLAG_NO_ARG_PARSE' is set in the + flags of the command. + + * normal/menu.c (grub_menu_run): Fix typo. + +2004-09-14 Hollis Blanchard + + * kern/powerpc/ieee1275/init.c (abort): Trap into Open Firmware. + + * term/powerpc/ieee1275/ofconsole.c (grub_ofconsole_gotoxy): Use + `y + 1' instead of `y - 1'. + + * conf/powerpc-ieee1275.rmk (grubof_LDFLAGS): Add `-N' and `-S'. + +2004-09-14 Yoshinori K. Okuji + + From Hollis Blanchard : + * kern/misc.c (memmove): New alias for grub_memmove. + (memcmp): New alias for grub_memcmp. + (memset): New alias for grub_memset. + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_get_property): + Change "int handle" to "grub_ieee1275_phandle_t handle". + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_get_property): Likewise. + +2004-09-12 Tomas Ebenlendr + + Added normal mode command `chainloader' as module chain.mod, which + depends on normal.mod and _chain.mod. + + * conf/i386-pc.rmk (pkgdata_MODULES): Add `chain.mod'. + (chain_mod_SOURCES, chain_mod_CFLAGS): Variables added. + * include/grub/i386/pc/loader.h (grub_rescue_cmd_chainloader): + Deleted prototype. + * loader/i386/pc/chainloader.c (grub_rescue_cmd_chainloader): All + but arguments parsing moved to ... + (grub_chainloader_cmd): ... here. New function. + * include/grub/i386/pc/chainloader.h: New file. + * loader/i386/pc/chainloader_normal.c: Likewise. + +2004-09-11 Marco Gerards + + * conf/i386-pc.rmk (kernel_img_SOURCES): Added kern/fshelp.c. + (grub_mkimage_LDFLAGS): Likewise. + (grub_emu_SOURCES): Likewise. + (kernel_img_HEADERS): Added fshelp.h. + * fs/ext2.c: Include . + (FILETYPE_REG): New macro. + (FILETYPE_INO_REG): Likewise. + (grub_ext_sblock): Renamed to `grub_ext2_sblock'. + Changed all users. + (ext2_block_group): Renamed to `grub_ext2_block_group'. Changed + all users. + (grub_fshelp_node): New struct. + (grub_ext2_data): Added member `diropen'. Changed member `inode' + to a pointer. + (grub_ext2_get_file_block): Removed function. + (grub_ext2_read_block): New function. + (grub_ext2_read_file): Replaced parameter `data' by `node'. + This function was written. + (grub_ext2_mount): Read the root inode. Create a diropen struct. + (grub_ext2_find_file): Removed function. + (grub_ext2_read_symlink): New function. + (grub_ext2_iterate_dir): Likewise. + (grub_ext2_open): Rewritten. + (grub_ext2_dir): Rewritten. + * include/grub/fshelp.h: New file. + * fs/fshelp.c: Likewise. + +2004-09-10 Yoshinori K. Okuji + + * normal/menu.c: Include grub/loader.h and grub/machine/time.h. + (print_message): Add a missing newline. + (run_menu): Added timeout support. + (run_menu_entry): New local function. + (grub_menu_run): Added support for booting. + + * kern/loader.c (grub_loader_is_loaded): New function. + + * include/grub/powerpc/ieee1275/time.h: Include grub/symbol.h. + (grub_get_rtc): Exported. + + * include/grub/i386/pc/time.h: Include grub/symbol.h. + (grub_get_rtc): Exported. + + * include/grub/normal.h (struct grub_command_list): Remove + constant from the member `command'. + + * include/grub/loader.h (grub_loader_is_loaded): Declared. + + * include/grub/err.h (GRUB_ERR_INVALID_COMMAND): New constant. + + * conf/i386-pc.rmk (kernel_img_HEADERS): Added machine/time.h. + +2004-08-28 Marco Gerards + + Add support for the JFS filesystem. + + * fs/jfs.c: New file. + * include/grub/fs.h (grub_jfs_init): New prototype. + (grub_jfs_fini): New prototype. + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/jfs.c. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add jfs.mod. + (jfs_mod_SOURCES): New variable. + (jfs_mod_CFLAGS): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add fs.jfs.c. + (grubof_SOURCES): Likewise. + * util/grub-emu.c (main): Initialize and deinitialize JFS support. + + * fs/fat.c (grub_fat_find_dir): Convert the filename little + endian to the host endian. + (grub_fat_utf16_to_utf8): Move function from there... + * kern/misc.c (grub_utf16_to_utf8): ...to here. Do not convert + the endianness of the source string anymore. + * include/grub/misc.h (grub_utf16_to_utf8): New prototype. + +2004-08-24 Marco Gerards + + * commands/boot.c (grub_boot_init) [GRUB_UTIL]: Make conditional. + (grub_boot_fini) [GRUB_UTIL]: Likewise. + (GRUB_MOD_INIT) [!GRUB_UTIL]: Likewise. + (GRUB_MOD_FINI) [!GRUB_UTIL]: Likewise. + + * fs/hfs.c (grub_hfs_find_node): Add a prototype for `node_found'. + (grub_hfs_iterate_dir): Make the function static. Add prototypes + for `node_found' and `it_dir'. + (grub_hfs_dir): Add prototype for `dir_hook'. + + * fs/minix.c (grub_minix_get_file_block): Add prototype for + `grub_get_indir'. Rename `indir' in two blocks to `indir16' + and `indir32' to silence a gcc warning. + + * include/grub/fs.h (grub_hfs_init): New prototype. + (grub_hfs_fini): Likewise. + + +2004-08-21 Yoshinori K. Okuji + + Each disk device has its own id now. This is useful to make use + of multiple disk devices. + + * include/grub/disk.h (grub_disk_dev_id): New enum. + (GRUB_DISK_DEVICE_BIOSDISK_ID): New constant. + (GRUB_DISK_DEVICE_OFDISK_ID): Likewise. + + * disk/i386/pc/biosdisk.c (grub_biosdisk_dev): Specify + GRUB_DISK_DEVICE_BIOSDISK_ID as an id. + + * disk/powerpc/ieee1275/ofdisk.c (grub_ofdisk_dev): Specify + GRUB_DISK_DEVICE_OFDISK_ID as an id. + + * util/i386/pc/biosdisk.c (grub_util_biosdisk_dev): Specify + GRUB_DISK_DEVICE_BIOSDISK_ID as an id. + + * include/grub/disk.h (struct grub_disk_dev): Added a new member + "id" which is used by the cache manager. + + * normal/main.c (grub_normal_init_page): Use "GNU GRUB" instead + of just "GRUB". + +2004-08-18 Marco Gerards + + * fs/hfs.c: New file. + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/hfs.c. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add hfs.mod. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add fs/hfs.c. + (grubof_SOURCES): Likewise. + * util/grub-emu.c (main): Initialize and deinitialize HFS support. + + * include/grub/misc.h (grub_strncasecmp): Add prototype. + * kern/misc.c (grub_strncasecmp): Add function. + +2004-08-14 Marco Gerards + + * include/grub/arg.h (GRUB_ARG_OPTION_OPTIONAL): Surround macro + with parentheses. + + * fs/ext2.c (FILETYPE_UNKNOWN): New macro. + (grub_ext2_dir): In case the directory entry type is unknown, read + it from the inode. + +2004-08-02 Peter Bruin + + * loader/powerpc/ieee1275/linux.c (grub_linux_init): Pass + grub_load_linux instead of grub_rescue_cmd_linux as second + argument of grub_rescue_register_command. + + * Makefile.in (RMKFILES): Add conf/powerpc-ieee1275.rmk. + +2004-07-27 Marco Gerards + + * boot/powerpc/ieee1275/ieee1275.c (grub_ieee1275_release): New + function. + * commands/boot.c: Remove the check for `GRUB_UTIL'. + * conf/powerpc-ieee1275.rmk (grubof_SOURCES): Add + `loader/powerpc/ieee1275/linux.c', + `loader/powerpc/ieee1275/linux_normal.c' and `commands/boot.c'. + * include/grub/powerpc/ieee1275/ieee1275.h + (grub_ieee1275_release): New prototype. + * include/grub/powerpc/ieee1275/loader.h: Rewritten. + * kern/powerpc/ieee1275/init.c (grub_machine_init): Initialize + normal, boot, linux and linux_normal. + * loader/powerpc/ieee1275/linux.c: New file. + * loader/powerpc/ieee1275/linux_normal.c: Likewise. + +2004-07-12 Marco Gerards + + * normal/arg.c (grub_arg_parse): Correct error handling after + reallocating the argumentlist (check if `argl' is not null instead + of checking if `args' is not null). + * kern/mm.c (grub_realloc): Return the same pointer when using the + same region, instead of returning the header address. + +2004-07-11 Marco Gerards + + * disk/powerpc/ieee1275/partition.c (grub_partition_iterate): Skip + one block instead of two when looking for the initial partition. + (grub_partition_probe): Initialize the local variable `p' with 0. + Use base 10 for the grub_strtoul call. + * kern/misc.c (grub_strncpy): Fix off by one bug. Eliminated the + need for one local variable. + (grub_strtoul): Don't add the new value to `num', instead of that + just assign it. + +2004-07-11 Marco Gerards + + * conf/i386-pc.rmk (pkgdata_IMAGE): Add pxeboot.img. + (pxeboot_img_SOURCES): New variable. + (pxeboot_img_ASFLAGS): Likewise. + (pxeboot_img_LDFLAGS): Likewise. + * boot/i386/pc/pxeboot.S: New file. Based on pxeloader.S from + GRUB Legacy and boot.S. Adopted for GRUB 2 by lode leroy + . + +2004-06-27 Tomas Ebenlendr + + * kern/rescue.c (grub_enter_rescue_mode): Don't continue when + there was no input. + +2004-06-27 Tomas Ebenlendr + + * normal/cmdline.c (grub_set_history): Fix off by one bug. Fixed + the history buffer logic. + +2004-06-27 Tomas Ebenlendr + + * fs/ext2.c (FILETYPE_INO_MASK, FILETYPE_INO_DIRECTORY) + (FILETYPE_INO_SYMLINK): New macros. + (grub_ext2_find_file): Check if the node is a directory using the + inode stat information instead of using the filetype in the + dirent. Exclude the first character of an absolute symlink. + (grub_ext2_dir): Mask out the filetype part of the mode member of + the inode. + +2004-05-24 Marco Gerards + + Add support for UFS version 1 and 2. Add support for the minix + filesystem version 1 and 2, both the variants with 14 and 30 long + filenames. + + * conf/i386-pc.rmk (grub_setup_SOURCES): Add fs/ufs.c and + fs/minix.c. + (grub_emu_SOURCES): Likewise. + (pkgdata_MODULES): Add ufs.mod and minix.mod. + (ufs_mod_SOURCES): New variable. + (ufs_mod_CFLAGS): Likewise. + (minix_mod_SOURCES): Likewise. + (minix_mod_CFLAGS): Likewise. + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add fs/ufs.c and + fs/minix.c. + (grubof_SOURCES): Likewise. + * fs/ufs.c: New file. + * fs/minix.c: New file. + * include/grub/fs.h (grub_ufs_init): New prototype. + (grub_ufs_fini): Likewise. + (grub_minix_init): Likewise. + (grub_minix_fini): Likewise. + * util/grub-emu.c (main): Initialize and deinitialize UFS and + minix fs. + +2004-04-30 Jeroen Dekkers + + * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add normal/arg.c, + commands/ls.c, commands/terminal.c, commands/boot.c, + commands/cmp.c and commands/cat.c. + (grubof_LDFLAGS): Add -nostdlib -static-libgcc -lgcc. + + * kern/powerpc/ieee1275/init.c: Include "grub/env.h" instead of + "env.h" + +2004-04-04 Yoshinori K. Okuji + + All symbols prefixed with PUPA_ and pupa_ are renamed to GRUB_ + and grub_, respectively. Because the conversion is trivial and + mechanical, I omit the details here. Please refer to the CVS + if you need more information. + +2004-04-04 Yoshinori K. Okuji + + * include/pupa: Renamed to ... + * include/grub: ... this. + * util/i386/pc/pupa-mkimage.c: Renamed to ... + * util/i386/pc/grub-mkimage.c: ... this. + * util/i386/pc/pupa-setup.c: Renamed to ... + * util/i386/pc/grub-setup.c: ... this. + * util/pupa-emu.c: Renamed to ... + * util/grub-emu.c: ... this. + +2004-03-29 Marco Gerards + + Add support for the newworld apple macintosh (PPC). This has been + tested on the powerbook 2000 only. It only adds support for + generic ieee1275 functions, console and disk support. This should + be easy to port to other architectures with support for Open + Firmware. + + * configure.ac: Accept the powerpc as host_cpu. In the case of + the powerpc cpu set the host_vendor to ieee1275. Make sure the i386 + specific tests are only executed while building for the i386. + Inverse test for crosscompile. + * genmk.rb (Utility): Allow assembler files. + * normal/cmdline.c (pupa_tab_complete): Reset pupa_errno. + * conf/powerpc-ieee1275.rmk: New file. + * disk/powerpc/ieee1275/ofdisk.c: Likewise. + * disk/powerpc/ieee1275/partition.c: Likewise. + * include/pupa/powerpc/ieee1275/biosdisk.h: Likewise. + * include/pupa/powerpc/ieee1275/console.h: Likewise. + * include/pupa/powerpc/ieee1275/partition.h: Likewise. + * include/pupa/powerpc/ieee1275/time.h: Likewise. + * include/pupa/powerpc/ieee1275/util/biosdisk.h: Likewise. + * include/pupa/powerpc/ieee1275/multiboot.h: Likewise. + * include/pupa/powerpc/ieee1275/loader.h + * include/pupa/powerpc/setjmp.h: Likewise. + * include/pupa/powerpc/types.h: Likewise. + * kern/powerpc/ieee1275/init.c: Likewise. + * kern/powerpc/ieee1275/openfw.c: Likewise. + * term/powerpc/ieee1275/ofconsole.c: Likewise. + + These files were written by Johan Rydberg + (jrydberg@night.trouble.net) and I only modified them slightly. + + * boot/powerpc/ieee1275/cmain.c: New file. + * boot/powerpc/ieee1275/crt0.S: Likewise. + * boot/powerpc/ieee1275/ieee1275.c: Likewise. + * include/pupa/powerpc/ieee1275/ieee1275.h: Likewise. + +2004-03-14 Jeroen Dekkers + + * Makefile.in: Update copyright. + * genmodsrc.sh: Likewise. + * gensymlist.sh: Likewise. + * term/i386/pc/vga.c: Indent correctly. + + * util/i386/pc/pupa-mkimage.c (usage): Use PACKAGE_BUGREPORT as + bugreporting address. + * util/i386/pc/pupa-setup.c (usage): Likewise, + (main): Call pupa_ext2_init and pupa_ext2_fini. + + * fs/fat.c (log2): Renamed to ... + (fat_log2): ... this. + All callers changed. + * kern/misc.c (memcpy): Alias to pupa_memmove. + * loader/i386/pc/multiboot.c (pupa_rescue_cmd_multiboot): Fix + lvalue cast. + * util/console.c (pupa_ncurses_fini): Return 0. + + * util/i386/pc/biosdisk.c (pupa_util_biosdisk_open)[__linux__]: + Move fail label here. + [__GNU__]: Don't warn when using stat. + (open_device)[!__linux__]: Check if FD < 0 instead of !FD. + (pupa_util_biosdisk_get_pupa_dev)[__GNU__]: Change type of N to + long int. Use strtol instead of strtoul. + +2004-03-14 Marco Gerards + + * commands/boot.c: New file. + * commands/cat.c: Likewise. + * commands/cmp.c: Likewise. + * commands/ls.c: Likewise. + * commands/terminal.c: Likewise. + * normal/command.c: Include and . + (pupa_register_command): Changed interface to match the new + argument parser. + (pupa_command_execute): Changed (almost rewritten) so it uses + pupa_split_command. Added support for setting variables using the + syntax `foo=bar'. + (rescue_command): Changed to work with the new argument parser. + (terminal_command): Moved from here to commands/terminal.c. + (set_command): New function. + (unset_command): New function. + (insmod_command): New function. + (rmmod_command): New function. + (lsmod_command): New function. + (pupa_command_init): Don't initialize the command terminal + anymore. Initialize the commands set, unset, insmod, rmmod and + lsmod. + * conf/i386-pc.rmk (kernel_img_SOURCES): Add kern/env.c. + (kernel_img_HEADERS): Add arg.h and env.h. + (pupa_mkimage_LDFLAGS): Add kern/env.c. + (pupa_emu_SOURCES): Add kern/env.c, commands/ls.c, + commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c, + normal/arg.c. + (pkgdata_MODULES): Add ls.mod, boot.mod, cmp.mod, cat.mod and + terminal.mod. + (normal_mod_SOURCES): Add normal/arg.c and normal/arg.c. + (boot_mod_SOURCES): New variable. + (terminal_mod_SOURCES): Likewise. + (ls_mod_SOURCES): Likewise. + (cmp_mod_SOURCES): Likewise. + (cat_mod_SOURCES): Likewise. + + * normal/arg.c: New file. + * kern/env.c: Likewise. + * include/pupa/arg.h: Likewise. + * include/pupa/env.h: Likewise. + * font/manager.c (font_command): Changed to match argument parsing + interface changes. + (PUPA_MOD_INIT): Likewise. + * hello/hello.c (pupa_cmd_hello): Likewise. + (PUPA_MOD_INIT): Likewise. + * include/pupa/disk.h: Include . + (pupa_print_partinfo): New prototype. + * include/pupa/dl.h (pupa_dl_set_prefix): Prototype removed. + (pupa_dl_get_prefix): Likewise. + * include/pupa/misc.h: Include . + (pupa_isgraph): New prototype. + (pupa_isdigit): Likewise. + (pupa_split_cmdline): Likewise. + * include/pupa/normal.h: Include . + (pupa_command): Changed the prototype of the member `func' to + match the argument parsing interface. Added member `options'. + (pupa_register_command): Updated to match function. + (pupa_arg_parse): New prototype. + (pupa_hello_init) [PUPA_UTIL]: New prototype. + (pupa_hello_fini) [PUPA_UTIL]: Likewise. + (pupa_ls_init) [PUPA_UTIL]: Likewise. + (pupa_ls_fini) [PUPA_UTIL]: Likewise. + (pupa_cat_init) [PUPA_UTIL]: Likewise. + (pupa_cat_fini) [PUPA_UTIL]: Likewise. + (pupa_boot_init) [PUPA_UTIL]: Likewise. + (pupa_boot_fini) [PUPA_UTIL]: Likewise. + (pupa_cmp_init) [PUPA_UTIL]: Likewise. + (pupa_cmp_fini) [PUPA_UTIL]: Likewise. + (pupa_terminal_init) [PUPA_UTIL]: Likewise. + (pupa_terminal_fini) [PUPA_UTIL]: Likewise. + * kern/disk.c: Include . + (pupa_print_partinfo): New function. + * kern/dl.c: Include . + (pupa_dl_dir): Variable removed. + (pupa_dl_load): Use the environment variable `prefix' instead of + the variable pupa_dl_dir. + (pupa_dl_set_prefix): Function removed. + (pupa_dl_get_prefix): Likewise. + * kern/i386/pc/init.c: Include . + (pupa_machine_init): Use the environment variable `prefix' instead of + using pupa_dl_set_prefix to set the prefix. + * kern/main.c: Include . + (pupa_set_root_dev): Use the environment variable `prefix' instead of + using pupa_dl_get_prefix to get the prefix. + * kern/misc.c: Include . + (pupa_isdigit): New function. + (pupa_isgraph): Likewise. + (pupa_ftoa): Likewise. + (pupa_vsprintf): Added support for printing values of the type + `double'. Make it possible to format variable output when using + formatting like `%1.2%f'. + (pupa_split_cmdline): New function. + * kern/rescue.c: Include . + (next_word): Removed function. + (pupa_rescue_cmd_prefix): Likewise. + (pupa_rescue_cmd_set): New function. + (pupa_rescue_cmd_unset): New function. + (pupa_enter_rescue_mode): Use the `pupa_split_cmdline' function to + split the command line instead of splitting it here. Added + support for setting variables using the syntax `foo=bar'. Don't + initialize the prefix command anymore. Initialized the set and + unset commands. + * normal/cmdline.c: Include . + (pupa_tab_complete): Added prototypes for print_simple_completion, + print_partition_completion, add_completion, iterate_commands, + iterate_dev, iterate_part and iterate_dir. Moved code to print + partition information from here to kern/disk.c. + (pupa_cmdline_run): Don't check if the function exists anymore. + * normal/main.c: Include . + (pupa_rescue_cmd_normal): Use the environment variable `prefix' + instead of using pupa_dl_get_prefix to get the prefix. + * term/i386/pc/vga.c: Include . + (check_vga_mem): Cast pointers to `void *' to silence a gcc + warning. + (pupa_vga_putchar) [! DEBUG_VGA]: Removed for this case. + (pupa_vga_setcolor): Declare unused variables with `__attribute__ + ((unused))' to silence a gcc warning. + (pupa_vga_setcolor): Likewise. + (debug_command): Changed to match argument parsing + interface changes. + * util/pupa-emu.c: Include . + (options): Added 0's for unused fields to silence a gcc warning. + (argp): Likewise. + (main): Use the environment variable `prefix' instead of using + pupa_dl_set_prefix to set the prefix. Initialize the commands ls, + boot, cmp, cat and terminal. Finish the commands boot, cmp, cat + and terminal. + + * util/i386/pc/getroot.c: Include . + * util/misc.c: Include . + (pupa_malloc): Rewritten so errors are correctly reported. + (pupa_realloc): Likewise. + (pupa_memalign): Likewise. + (pupa_mm_init_region): Declare unused variables with + `__attribute__ ((unused))' to silence a gcc warning. + * normal/i386/setjmp.S: Remove tab at the end of the file to + silence a gcc warning. + * loader/i386/pc/linux.c (pupa_rescue_cmd_initrd): Declare unused + variables with `__attribute__ ((unused))' to silence a gcc + warning. + * loader/i386/pc/multiboot.c (pupa_multiboot_unload): Make the + local variable i unsigned to silence a gcc warning. + + * kern/term.c: Include . + (pupa_more_lines): New variable. + (pupa_more): Likewise. + (pupa_putcode): When the pager is active pause at the end of every + screen. + (pupa_set_more): New function. + * include/pupa/term.h (pupa_set_more): New prototype. + + +2004-03-07 Yoshinori K. Okuji + + Now this project is GRUB 2 rather than PUPA. The location of + the CVS repository was moved to GRUB's. + + * configure.ac: Use bug-grub as the reporting address. + Use GRUB instead of PUPA. + Change the version number to 1.90. + +2004-02-24 Yoshinori K. Okuji + + * genkernsyms.sh: Updated copyright information. + * genmk.rb: Likewise. + * genmodsrc.sh: Likewise. + * gensymlist.sh: Likewise. + * boot/i386/pc/boot.S: Likewise. + * boot/i386/pc/diskboot.S: Likewise. + * disk/i386/pc/biosdisk.c: Likewise. + * disk/i386/pc/partition.c: Likewise. + * font/manager.c: Likewise. + * fs/ext2.c: Likewise. + * fs/fat.c: Likewise. + * include/pupa/boot.h: Likewise. + * include/pupa/device.h: Likewise. + * include/pupa/disk.h: Likewise. + * include/pupa/dl.h: Likewise. + * include/pupa/elf.h: Likewise. + * include/pupa/err.h: Likewise. + * include/pupa/file.h: Likewise. + * include/pupa/font.h: Likewise. + * include/pupa/fs.h: Likewise. + * include/pupa/kernel.h: Likewise. + * include/pupa/loader.h: Likewise. + * include/pupa/misc.h: Likewise. + * include/pupa/mm.h: Likewise. + * include/pupa/net.h: Likewise. + * include/pupa/normal.h: Likewise. + * include/pupa/rescue.h: Likewise. + * include/pupa/setjmp.h: Likewise. + * include/pupa/symbol.h: Likewise. + * include/pupa/term.h: Likewise. + * include/pupa/types.h: Likewise. + * include/pupa/i386/setjmp.h: Likewise. + * include/pupa/i386/types.h: Likewise. + * include/pupa/i386/pc/biosdisk.h: Likewise. + * include/pupa/i386/pc/boot.h: Likewise. + * include/pupa/i386/pc/console.h: Likewise. + * include/pupa/i386/pc/init.h: Likewise. + * include/pupa/i386/pc/kernel.h: Likewise. + * include/pupa/i386/pc/linux.h: Likewise. + * include/pupa/i386/pc/loader.h: Likewise. + * include/pupa/i386/pc/memory.h: Likewise. + * include/pupa/i386/pc/multiboot.h: Likewise. + * include/pupa/i386/pc/partition.h: Likewise. + * include/pupa/i386/pc/time.h: Likewise. + * include/pupa/i386/pc/vga.h: Likewise. + * include/pupa/i386/pc/util/biosdisk.h: Likewise. + * include/pupa/util/getroot.h: Likewise. + * include/pupa/util/misc.h: Likewise. + * include/pupa/util/resolve.h: Likewise. + * kern/device.c: Likewise. + * kern/disk.c: Likewise. + * kern/dl.c: Likewise. + * kern/err.c: Likewise. + * kern/file.c: Likewise. + * kern/fs.c: Likewise. + * kern/loader.c: Likewise. + * kern/main.c: Likewise. + * kern/misc.c: Likewise. + * kern/mm.c: Likewise. + * kern/rescue.c: Likewise. + * kern/term.c: Likewise. + * kern/i386/dl.c: Likewise. + * kern/i386/pc/init.c: Likewise. + * kern/i386/pc/lzo1x.S: Likewise. + * kern/i386/pc/startup.S: Likewise. + * loader/i386/pc/chainloader.c: Likewise. + * loader/i386/pc/linux.c: Likewise. + * loader/i386/pc/multiboot.c: Likewise. + * normal/cmdline.c: Likewise. + * normal/command.c: Likewise. + * normal/main.c: Likewise. + * normal/menu.c: Likewise. + * normal/i386/setjmp.S: Likewise. + * term/i386/pc/console.c: Likewise. + * term/i386/pc/vga.c: Likewise. + * util/console.c: Likewise. + * util/genmoddep.c: Likewise. + * util/misc.c: Likewise. + * util/pupa-emu.c: Likewise. + * util/resolve.c: Likewise. + * util/unifont2pff.rb: Likewise. + * util/i386/pc/biosdisk.c: Likewise. + * util/i386/pc/getroot.c: Likewise. + * util/i386/pc/pupa-mkimage.c: Likewise. + * util/i386/pc/pupa-setup.c: Likewise. + +2004-02-15 Jeroen Dekkers + + * fs/ext2.c (pupa_ext2_read_file): Correct the value of BLOCKEND + when it is EXT2_BLOCK_SIZE (data). New argument READ_HOOK, all + callers changed. Set DATA->DISK->READ_HOOK to READ_HOOK before + reading and reset it after reading. + (pupa_ext2_close): Return PUPA_ERR_NONE. + + * include/pupa/i386/pc/linux.h (PUPA_LINUX_INITRD_MAX_ADDRESS): + Correct value. + (struct linux_kernel_header): Add kernel_version and + initrd_addr_max. + * loader/i386/pc/linux.c (pupa_rescue_cmd_linux): Check whether + pupa_file_read succeeds. + (pupa_rescue_cmd_initrd): Implement. + +2003-12-03 Marco Gerards + + * fs/ext2.c (pupa_ext2_label): New function. + (pupa_ext2_fs): Added label. + * fs/fat.c (pupa_fat_label): New function. + (pupa_fat_fs): Added label. + * include/pupa/fs.h (struct pupa_fs): Added prototype label. + + * kern/misc.c (pupa_strndup): New function. + * include/pupa/misc.h (pupa_strndup): New prototype. + + * include/pupa/normal.h: Include . + (pupa_set_history): New prototype. + (pupa_iterate_commands): New prototype. + * normal/cmdline.c: Include , + , . + (hist_size): New variable. + (hist_lines): Likewise. + (hist_end): Likewise. + (hist_used): Likewise. + (pupa_set_history): New function. + (pupa_history_get): Likewise. + (pupa_history_add): Likewise. + (pupa_history_replace): Likewise. + (pupa_tab_complete): Likewise. + (pupa_cmdline_run): Added tab completion and history buffer. Tab + completion shows partitionnames while completing partitions, this + feature was suggested by Jeff Bailey. + * normal/command.c (pupa_iterate_commands): New function. + * normal/main.c (PUPA_DEFAULT_HISTORY_SIZE): New macro. + (pupa_normal_init): Initialize history buffer. + (PUPA_MOD_INIT): Likewise. + (pupa_normal_fini): Free the history buffer. + (PUPA_MOD_FINI): Likewise. + + * util/console.c (pupa_ncurses_getkey): Accept 127 as backspace + key. + + * aclocal.m4 (pupa_I386_CHECK_REGPARM_BUG): New DEFUN. + * configure.ac [i386]: Check for regparam bug. + (NESTED_FUNC_ATTR) [! i386]: Defined. + +2003-11-17 Marco Gerards + + * conf/i386-pc.rmk (sbin_UTILITIES): Added pupa-emu. + (pupa_setup_SOURCES): Added util/i386/pc/getroot.c. + (pupa_emu_SOURCES): New variable. + (pupa_emu_LDFLAGS): Likewise. + * include/pupa/fs.h (pupa_ext2_init) [PUPA_UTIL]: New prototype. + (pupa_ext2_fini) [PUPA_UTIL]: Likewise. + * include/pupa/normal.h (pupa_normal_init) [PUPA_UTIL]: Likewise. + (pupa_normal_fini) [PUPA_UTIL]: Likewise. + * include/pupa/setjmp.h [PUPA_UTIL]: Include . + (pupa_jmp_buf): New typedef. + (pupa_setjmp) [PUPA_UTIL]: New macro. + (pupa_longjmp) [PUPA_UTIL]: Likewise. + * include/pupa/term.h (struct pupa_term): New member `refresh'. + (pupa_refresh): New prototype. + * include/pupa/util/getroot.h: New file. + * kern/misc.c (pupa_vsprintf): Refresh the screen after updating + it. + * kern/rescue.c (pupa_rescue_get_command_line): Likewise. + (pupa_rescue_cmd_cat): Likewise. + (pupa_rescue_cmd_ls): Likewise. + (pupa_rescue_cmd_testload): Likewise. + (pupa_rescue_cmd_lsmod): Likewise. + * normal/cmdline.c (pupa_cmdline_get): Likewise. + * normal/menu.c (run_menu): Likewise. + * kern/term.c (pupa_cls): Likewise. + (pupa_refresh): New function. + * normal/normal.c (pupa_normal_init) [PUPA_UTIL]: New function. + (pupa_normal_fini) [PUPA_UTIL]: Likewise. + * util/console.c: New file. + + * util/i386/pc/getroot.c: New file. + * util/i386/pc/pupa-setup.c: Include . + (pupa_putchar): New function. + (pupa_refresh): Likewise. + (xgetcwd): Function moved to ... + (strip_extra_slashes): Likewise. + (get_prefix): Likewise. + * util/i386/pc/getroot.c: ... here. + (find_root_device): Function moved and renamed to... + * util/i386/pc/getroot.c (pupa_find_root_device): ... here. + Changed all callers. + * util/i386/pc/pupa-setup.c (guess_root_device): Function moved + and renamed to... + * util/i386/pc/getroot.c (pupa_guess_root_device): ... here. + Changed all callers. + * util/misc.c (pupa_memalign): New function. + (pupa_mm_init_region): Likewise. + (pupa_register_exported_symbols): Likewise. + (pupa_putchar): Function removed. + * util/pupa-emu.c: New file. + +2003-11-16 Jeroen Dekkers + + * conf/i386-pc.rmk (pkgdata_MODULES): Add _multiboot.mod. + (_multiboot_mod_SOURCES): New variable. + (_multiboot_mod_CFLAGS): Likewise. + * loader/i386/pc/multiboot.c: New file. + * include/pupa/i386/pc/multiboot.h: Likewise. + * kern/i386/pc/startup.S: Include pupa/machine/multiboot.h. + (pupa_multiboot_real_boot): New function. + * include/pupa/i386/pc/loader.h: Include pupa/machine/multiboot.h. + (pupa_multiboot_real_boot): New prototype. + (pupa_rescue_cmd_multiboot): Likewise + (pupa_rescue_cmd_module): Likewise. + + * kern/loader.c (pupa_loader_set): Continue when + pupa_loader_unload_func() fails. + (pupa_loader_unset): New function. + * include/pupa/loader.h (pupa_loader_unset): New prototype. + + * kern/misc.c (pupa_stpcpy): New function. + * include/pupa/misc.h (pupa_stpcpy): New prototype. + +2003-11-12 Marco Gerards + + * disk/i386/pc/biosdisk.c (pupa_biosdisk_open): Correctly check + for available extensions. + + * include/pupa/i386/pc/time.h: New file. + * kern/disk.c: Include . + (PUPA_CACHE_TIMEOUT): New macro. + (pupa_last_time): New variable. + (pupa_disk_open): Flush the cache when there was a timeout. + (pupa_disk_close): Reset the timer. + * kern/i386/pc/startup.S (pupa_get_rtc): Renamed from + pupa_currticks. + * util/misc.c: Include + (pupa_get_rtc): New function. + +2003-11-09 Jeroen Dekkers + + * fs/ext2.c (struct pupa_ext2_inode): Declare struct datablocks + as blocks. + (pupa_ext2_get_file_block): Use blocks member. + + * fs/ext2.c (pupa_ext2_read_file): Only set skipfirst for the + first block. Return -1 instead of pupa_errno on error. + +2003-10-27 Marco Gerards + + * README: In the pupa-mkimage example use _chain instead of chain + and ext2 instead of fat. + * TODO: Replace ext2fs with jfs as an example. Add an item for + adding journal playback for ext2fs. + * conf/i386-pc.rmk (pupa_setup_SOURCES): Added fs/ext2.c. + (pkgdata_MODULES): Added ext2.mod. + (ext2_mod_SOURCES): New variable. + (ext2_mod_CFLAGS): Likewise. + * include/pupa/err.h (pupa_err_t): Added PUPA_ERR_SYMLINK_LOOP. + * include/pupa/misc.h (pupa_strncpy): New prototype. + (pupa_strcat): Likewise. + (pupa_strncmp): Likewise. + * kern/misc.c (pupa_strcat): Enable function. + (pupa_strncpy): New function. + (pupa_strncmp): Likewise. + * fs/ext2.c: New file. + + * kern/disk.c (pupa_disk_read): Set pupa_errno to PUPA_ERR_NONE + when the read failed before retrying. + * util/i386/pc/biosdisk.c (_LARGEFILE_SOURCE): Removed. + (_FILE_OFFSET_BITS): Likewise. + * configure.ac: Added AC_SYS_LARGEFILE. + +2003-09-25 Yoshinori K. Okuji + + * genmk.rb (PModule#rule): Make sure to get only symbol names + from the output of nm. + Reported by Robert Millan . + +2003-09-25 Yoshinori K. Okuji + + I forgot to check in these changes for a long time. This adds + incomplete support for VGA console, and this is still very + buggy. Also, a lot of consideration is required for I18N, + UNICODE, and VGA font issues. Therefore, assume that this is + such that "better than nothing". + + * font/manager.c: New file. + * include/pupa/font.h: Likewise. + * include/pupa/i386/pc/vga.h: Likewise. + * term/i386/pc/vga.c: Likewise. + * util/unifont2pff.rb: Likewise. + + * conf/i386-pc.rmk (kernel_img_HEADERS): Added machine/vga.h. + (pkgdata_MODULES): Added vga.mod and font.mod. + (vga_mod_SOURCES): New variables. + (vga_mod_CFLAGS): Likewise. + (font_mod_SOURCES): Likewise. + (font_mod_CFLAGS): Likewise. + + * include/pupa/err.h (PUPA_ERR_BAD_FONT): New constant. + + * include/pupa/term.h: Include pupa/err.h. + (struct pupa_term): Added init and fini. + Changed the argument of putchar to pupa_uint32_t. + + * include/pupa/i386/pc/console.h: Include pupa/symbol.h. + (pupa_console_real_putchar): New prototype. + (pupa_console_putchar): Removed. + (pupa_console_checkkey): Exported. + (pupa_console_getkey): Likewise. + + * kern/misc.c (pupa_vsprintf): Add support for UNICODE + characters. + + * kern/term.c (pupa_term_set_current): Rewritten. + (pupa_putchar): Likewise. + (pupa_putcode): New function. + + * kern/i386/pc/startup.S (pupa_console_putchar): Renamed to ... + (pupa_console_real_putchar): ... this. + (pupa_vga_set_mode): New function. + (pupa_vga_get_font): Likewise. + + * normal/command.c: Include pupa/term.h. + (terminal_command): New function. + (pupa_command_init): Register the command "terminal". + + * normal/menu.c (DISP_LEFT): Changed to a UNICODE value. + (DISP_UP): Likewise. + (DISP_RIGHT): Likewise. + (DISP_DOWN): Likewise. + (DISP_HLINE): Likewise. + (DISP_VLINE): Likewise. + (DISP_UL): Likewise. + (DISP_UR): Likewise. + (DISP_LL): Likewise. + (DISP_LR): Likewise. + + * term/i386/pc/console.c (pupa_console_putchar): New function. + +2003-02-08 NIIBE Yutaka + + * util/resolve.c (pupa_util_resolve_dependencies): BUG + FIX. Reverse the path_list. + + * include/pupa/normal.h: Export pupa_register_command and + pupa_unregister_command. + + * hello/hello.c (pupa_cmd_hello): New module. + * conf/i386-pc.rmk: Added hello.mod. + +2003-01-31 Yoshinori K. Okuji + + * kern/i386/pc/lzo1x.S: New file. + + * util/i386/pc/pupa-mkimage.c: Include lzo1x.h. + (compress_kernel): New variable. + (generate_image): Heavily modified to support compressing a + large part of the core image. + + * util/misc.c (pupa_util_read_image): Fix a file descriptor + leak. + (pupa_util_load_image): New function. + + * kern/i386/pc/startup.S: Include pupa/machine/kernel.h. + (pupa_compressed_size): New variable. + (codestart): Enable Gate A20 here. + Decompress the compressed part of the core image. + Rearrange the code to put functions and variables which are + required for initialization in the non-compressed part. + Include lzo1x.S. + + * kern/i386/pc/init.c (pupa_machine_init): Don't enable Gate A20 + here. + + * include/pupa/util/misc.h (pupa_util_write_image): Declared. + + * include/pupa/i386/pc/kernel.h + (PUPA_KERNEL_MACHINE_COMPRESSED_SIZE): New macro. + (PUPA_KERNEL_MACHINE_INSTALL_DOS_PART): Increased by 4. + (PUPA_KERNEL_MACHINE_INSTALL_BSD_PART): Likewise. + (PUPA_KERNEL_MACHINE_PREFIX): Likewise. + (PUPA_KERNEL_MACHINE_RAW_SIZE): New macro. + + * conf/i386-pc.rmk (pupa_mkimage_LDFLAGS): New variable. + + * genmk.rb (Image#rule): Put LDFLAGS at the end of a line. + (Utility#rule): Likewise. + + * configure.ac: Check if LZO is available. + +2003-01-20 Yoshinori K. Okuji + + * include/pupa/normal.h: New file. + * include/pupa/setjmp.h: Likewise. + * include/pupa/i386/setjmp.h: Likewise. + * normal/cmdline.c: Likewise. + * normal/command.c: Likewise. + * normal/main.c: Likewise. + * normal/menu.c: Likewise. + * normal/i386/setjmp.S: Likewise. + + * loader/i386/pc/linux.c (pupa_rescue_cmd_linux): Made global. + (pupa_rescue_cmd_initrd): Likewise. + + * loader/i386/pc/chainloader.c (pupa_rescue_cmd_chainloader): + Likewise. + + * kern/i386/pc/startup.S (translation_table): New variable. + (translate_keycode): New function. + (pupa_console_getkey): Call translate_keycode. + + * kern/rescue.c (attempt_normal_mode): New function. + (pupa_enter_rescue_mode): Attempt to execute the normal mode. If + it failed, print a message. + + * kern/mm.c (pupa_real_malloc): Print more information when a + free magic is broken. + (pupa_free): If the first free header is not free actually, set + it to P. + + * kern/main.c (pupa_load_normal_mode): Just load the module + "normal". + (pupa_main): Don't print the message + "Entering into rescue mode..." here. + + * include/pupa/i386/pc/loader.h (pupa_rescue_cmd_initrd): + Declared. + (pupa_rescue_cmd_initrd): Likewise. + (pupa_rescue_cmd_initrd): Likewise. + + * include/pupa/symbol.h (FUNCTION): Specify the type. + (VARIABLE): Likewise. + + * include/pupa/err.h (pupa_err_t): Added + PUPA_ERR_UNKNOWN_COMMAND. + + * include/pupa/dl.h (pupa_dl_set_prefix): Exported. + (pupa_dl_get_prefix): Likewise. + + * conf/i386-pc.rmk (pkgdata_MODULES): Added normal.mod. + Added _chain.mod and _linux.mod instead of chain.mod and + linux.mod. + (chain_mod_SOURCES): Renamed to ... + (_chain_mod_SOURCES): ... this. + (chain_mod_CFLAGS): Renamed to ... + (_chain_mod_CFLAGS): ... this. + (linux_mod_SOURCES): Renamed to ... + (_linux_mod_SOURCES): ... this. + (linux_mod_CFLAGS): Renamed to ... + (_linux_mod_CFLAGS): ... this. + (normal_mod_SOURCES): New variable. + (normal_mod_CFLAGS): Likewise. + (normal_mod_ASFLAGS): Likewise. + +2003-01-18 Yoshinori K. Okuji + + * kern/rescue.c (pupa_rescue_cmd_rmmod): Call pupa_dl_unload, if + possible. + + * kern/dl.c (pupa_dl_ref): Refer depending modules + recursively. + (pupa_dl_unref): Unrefer depending modules recursively. + Don't call pupa_dl_unload implicitly, because PUPA can crash if + a module is unloaded before one depending on that module is + unloaded. + (pupa_dl_unload): Unload depending modules explicitly, + if possible. + +2003-01-17 Yoshinori K. Okuji + + * include/pupa/i386/pc/linux.h: New file. + * loader/i386/pc/linux.c: Likewise. + + * loader/i386/pc/chainloader.c (pupa_chainloader_boot_sector): + Removed. + (pupa_chainloader_unload): Return PUPA_ERR_NONE. + (pupa_rescue_cmd_chainloader): Read the image to 0x7C00 instead + of PUPA_CHAINLOADER_BOOT_SECTOR. + + * kern/i386/pc/startup.S: Include pupa/machine/linux.h. + (pupa_linux_prot_size): New variable. + (pupa_linux_tmp_addr): Likewise. + (pupa_linux_real_addr): Likewise. + (pupa_linux_boot_zimage): New function. + (pupa_linux_boot_bzimage): Likewise. + + * kern/i386/pc/init.c (struct mem_region): New structure. + (MAX_REGIONS): New macro. + (mem_regions): New variable. + (num_regions): Likewise. + (pupa_os_area_addr): Likewise. + (pupa_os_area_size): Likewise. + (pupa_lower_mem): Likewise. + (pupa_upper_mem): Likewise. + (add_mem_region): New function. + (compact_mem_regions): Likewise. + (pupa_machine_init): Set PUPA_LOWER_MEM and PUPA_UPPER_MEM to + the size of the conventional memory and that of so-called upper + memory (before the first memory hole). + Instead of adding each found region to free memory, use + add_mem_region and add them after removing overlaps. + Also, add only 1/4 of the upper memory to free memory. The rest + is used for loading OS images. Maybe this is ad hoc, but this + makes it much easier to relocate OS images when booting. + + * kern/rescue.c (pupa_rescue_cmd_module): Removed. + (pupa_enter_rescue_mode): Don't register initrd and module. + + * kern/mm.c: Include pupa/dl.h. + + * kern/main.c: Include pupa/file.h and pupa/device.h. + + * kern/loader.c (pupa_loader_load_module_func): Removed. + (pupa_loader_load_module): Likewise. + + * kern/dl.c (pupa_dl_load): Use the suffix ``.mod'' instead of + ``.o''. + + * include/pupa/i386/pc/loader.h (pupa_linux_prot_size): Declared. + (pupa_linux_tmp_addr): Likewise. + (pupa_linux_real_addr): Likewise. + (pupa_linux_boot_zimage): Likewise. + (pupa_linux_boot_bzimage): Likewise. + + * include/pupa/i386/pc/init.h (pupa_lower_mem): Declared. + (pupa_upper_mem): Likewise. + (pupa_gate_a20): Don't export, because turning off Gate A20 in a + module is too dangerous. + + * include/pupa/loader.h (pupa_os_area_addr): Declared. + (pupa_os_area_size): Likewise. + (pupa_loader_set): Remove the first argument. Loader doesn't + manage modules or initrd any longer. + (pupa_loader_load_module): Removed. + + * conf/i386-pc.rmk (pkgdata_MODULES): Added linux.mod. + (linux_mod_SOURCES): New variable. + (linux_mod_CFLAGS): Likewise. + +2003-01-07 Yoshinori K. Okuji + + * util/i386/pc/pupa-setup.c (setup): Convert the endianness of + the length of a blocklist correctly. + + * util/i386/pc/biosdisk.c (pupa_util_biosdisk_open) [__linux__]: + Use ioctl only if the OS file is a block device. + (pupa_util_biosdisk_open): Don't use ST.ST_BLOCKS, because it is + not very useful for normal files. + + * kern/main.c (pupa_set_root_dev): New function. + (pupa_load_normal_mode): Likewise. + (pupa_main): Call those above. + + * include/pupa/types.h (pupa_swap_bytes16): Cast the result to + pupa_uint16_t. + + * include/pupa/kernel.h (pupa_enter_normal_mode): Removed. + +2003-01-06 Yoshinori K. Okuji + + * util/i386/pc/pupa-setup.c: Include pupa/machine/kernel.h. + (setup): Configure the installed partition information and the + dl prefix. + + * loader/i386/pc/chainloader.c (my_mod): New variable. + (pupa_chainloader_unload): New function. + (pupa_rescue_cmd_chainloader): Refer itself. + (PUPA_MOD_INIT): Save its own module in MY_MOD. + + * kern/i386/pc/startup.S (install_partition): Removed. + (version_string): Likewise. + (config_file): Likewise. + (pupa_install_dos_part): New variable. + (pupa_install_bsd_part): Likewise. + (pupa_prefix): Likewise. + (pupa_chainloader_real_boot): Call pupa_dl_unload_all. + + * kern/i386/pc/init.c: Include pupa/machine/kernel.h, pupa/dl.h + and pupa/misc.h. + (make_install_device): New function. + (pupa_machine_init): Set the dl prefix. + + * kern/rescue.c: Include pupa/rescue.h and pupa/dl.h. + (buf): Renamed to ... + (linebuf): ... this. + (pupa_rescue_cmd_prefix): New function. + (pupa_rescue_cmd_insmod): Likewise. + (pupa_rescue_cmd_rmmod): Likewise. + (pupa_rescue_cmd_lsmod): Likewise. + (pupa_enter_rescue_mode): Register new commands: prefix, insmod, + rmmod and lsmod. + + * kern/mm.c (pupa_memalign): If failed even after invalidating + disk caches, unload unneeded modules and retry. + + * kern/misc.c (pupa_memmove): New function. + (pupa_memcpy): Removed. + (pupa_strcpy): New function. + (pupa_itoa): Made static. + + * kern/dl.c (pupa_dl_iterate): New function. + (pupa_dl_ref): Likewise. + (pupa_dl_unref): Likewise. + (pupa_dl_unload): Return if succeeded or not. + (pupa_dl_unload_unneeded): New function. + (pupa_dl_unload_all): Likewise. + (pupa_dl_init): Renamed to ... + (pupa_dl_set_prefix): ... this. + (pupa_dl_get_prefix): New function. + + * include/pupa/i386/pc/kernel.h: Include pupa/types.h. + (PUPA_KERNEL_MACHINE_INSTALL_DOS_PART): New macro. + (PUPA_KERNEL_MACHINE_INSTALL_BSD_PART): Likewise. + (PUPA_KERNEL_MACHINE_PREFIX): Likewise. + (pupa_install_dos_part): Declared. + (pupa_install_bsd_part): Likewise. + (pupa_prefix): Likewise. + (pupa_boot_drive): Likewise. + + * include/pupa/types.h: Fix a typo. + + * include/pupa/misc.h (pupa_memcpy): New macro. Just an alias to + pupa_memmove. + (pupa_memmove): Declared. + (pupa_strcpy): Likewise. + + * include/pupa/dl.h (PUPA_MOD_INIT): Change the prototype. Now + pupa_mod_init takes one argument, its own module. + (pupa_dl_unload_unneeded): Declared. + (pupa_dl_unload_all): Likewise. + (pupa_dl_ref): Likewise. + (pupa_dl_unref): Likewise. + (pupa_dl_iterate): Likewise. + (pupa_dl_init): Renamed to ... + (pupa_dl_set_prefix): ... this. + (pupa_dl_get_prefix): Declared. + + * fs/fat.c [!PUPA_UTIL] (my_mod): New variable. + (pupa_fat_dir) [!PUPA_UTIL]: Prevent the fat module from being + unloaded. + (pupa_fat_open) [!PUPA_UTIL]: Refer itself if succeeded. + (pupa_fat_close) [!PUPA_UTIL]: Unrefer itself. + + * configure.ac (tmp_CFLAGS): Added -Wshadow, -Wpointer-arith, + -Wmissing-prototypes, -Wundef and -Wstrict-prototypes. + +2003-01-03 Yoshinori K. Okuji + + * util/i386/pc/pupa-setup.c (setup): Define the internal + function find_first_partition_start at the top level, because GCC + 3.0.x cannot compile internal functions in deeper scopes + correctly. + (find_root_device): Use lstat instead of stat. + Don't follow symbolic links. + Fix the path-constructing code. + + * util/i386/pc/biosdisk.c [__linux__] (BLKFLSBUF): New macro. + (pupa_util_biosdisk_open) [__linux__]: Get the size of a device + by a BLKGETSIZE ioctl first, because block devices don't fill + the member st_mode of the structure stat on Linux. + [__linux__] (linux_find_partition): Use a temporary buffer + REAL_DEV for the working space. Copy it to DEV before returning. + (open_device) [__linux__]: Call ioctl with BLKFLSBUF to make the + buffer cache consistent. + (get_os_disk) [__linux__]: Use the length 5 instead of 4 for + strncmp. The previous value was merely wrong. + (pupa_util_biosdisk_get_pupa_dev): Use stat instead of lstat. + + * fs/fat.c (pupa_fat_read_data): Shift 4 instead of 12 when the + FAT size is 12. The previous value was merely wrong. + + * kern/main.c (pupa_main): Don't split the starting message from + newlines. + + * kern/term.c (pupa_putchar): Put CR after LF instead of before + LF, because BIOS goes crazy about character attributes in this + case. + +2003-01-03 Yoshinori K. Okuji + + * include/i386/pc/util/biosdisk.h: New file. + * util/i386/pc/biosdisk.c: Likewise. + * util/i386/pc/pupa-setup.c: Likewise. + + * Makefile.in (INCLUDE_DISTFILES): Added + include/pupa/i386/pc/util/biosdisk.h. + (UTIL_DISTFILES): Added biosdisk.c and pupa-setup.c under the + directory util/i386/pc. + (install-local): Added a rule for sbin_UTILITIES. + (uninstall): Likewise. + + * util/i386/pc/pupa-mkimage.c (usage): Fix a typo in the doc. + + * util/misc.c (xrealloc): New function. + (pupa_malloc): Likewise. + (pupa_free): Likewise. + (pupa_realloc): Likewise. + (pupa_stop): Likewise. + (pupa_putchar): Likewise. + + * kern/disk.c (pupa_disk_read): Prevent L from underflowing. + + * include/pupa/util/misc.h (xrealloc): Declared. + + * include/pupa/i386/pc/boot.h (PUPA_BOOT_MACHINE_BPB_START): New + macro. + (PUPA_BOOT_MACHINE_BPBEND): Renamed to ... + (PUPA_BOOT_MACHINE_BPB_END): ... this. + + * include/pupa/fs.h [PUPA_UTIL] (pupa_fat_init): Declared. + [PUPA_UTIL] (pupa_fat_fini): Likewise. + + * fs/fat.c [PUPA_UTIL] (pupa_fat_init): Defined. Maybe a better + way should be implemented. + [PUPA_UTIL] (pupa_fat_fini): Likewise. + + * disk/i386/pc/biosdisk.c (pupa_biosdisk_call_hook): Increase + the size of NAME for safety. + (pupa_biosdisk_iterate): Search hard disks to 0x90 instead of + 0x88. + + * conf/i386-pc.rmk (sbin_UTILITIES): New variable. + (pupa_setup_SOURCES): Likewise. + + * genmk.rb (Utility#rule): Add $(BUILD_CFLAGS) into the rules. + +2002-12-28 Yoshinori K. Okuji + + * kern/i386/pc/startup.S (push_get_mmap_entry): Revert to a + bunch of pushl's from pusha, because this destroys the return + value. + +2002-12-28 Yoshinori K. Okuji + + Use -mrtd and -mregparm=3 to reduce the generated code sizes. + This means that any missing prototypes could be fatal. Also, you + must take care when writing assembly code. See the comments at + the beginning of startup.S, for more details. + + * kern/i386/pc/startup.S (pupa_halt): Modified for the new + compilation mechanism. + (pupa_chainloader_real_boot): Likewise. + (pupa_biosdisk_rw_int13_extensions): Likewise. + (pupa_biosdisk_rw_standard): Likewise. + (pupa_biosdisk_check_int13_extensions): Likewise. + (pupa_biosdisk_get_diskinfo_int13_extensions): Likewise. + (pupa_biosdisk_get_diskinfo_standard): Likewise. + (pupa_get_memsize): Likewise. + (pupa_get_mmap_entry): Likewise. + (pupa_console_putchar): Likewise. + (pupa_console_setcursor): Likewise. + (pupa_getrtsecs): Use pushl instead of push. + + * kern/i386/pc/init.c (pupa_machine_init): Use the scratch + memory instead of the stack for a mmap entry, because some + BIOSes may ignore the maximum size and overflow. + + * conf/i386-pc.rmk (COMMON_CFLAGS): Added -mrtd and -mregparm=3. + + * genmk.rb (PModule#rule): Compile automatically generated + sources with module-specific CFLAGS as well as other sources. + +2002-12-27 Yoshinori K. Okuji + + * configure.ac: Check ld. + Replace CFLAGS and CPPFLAGS with BUILD_CFLAGS and BUILD_CPPFLAGS + respectively, before checking endianness and sizes. + + * Makefile.in (LD): New variable. + +2002-12-27 Yoshinori K. Okuji + + * Makefile.in (BUILD_CC): CC -> BUILD_CC. + +2002-12-27 Yoshinori K. Okuji + + * Changelog: New file. + diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..f3c20edc8 --- /dev/null +++ b/INSTALL @@ -0,0 +1,294 @@ +-*- Text -*- + +This is the GRUB. Welcome. + +This file contains instructions for compiling and installing the GRUB. + +The Requirements +================ + +GRUB depends on some software packages installed into your system. If +you don't have any of them, please obtain and install them before +configuring the GRUB. + +* GCC 4.1.3 or later + Note: older versions may work but support is limited + + Experimental support for clang 3.3 or later (results in much bigger binaries) + for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64 + Note: clang 3.2 or later works for i386 and x86_64 targets but results in + much bigger binaries. + earlier versions not tested + Note: clang 3.2 or later works for arm + earlier versions not tested + Note: clang on arm64 is not supported due to + https://llvm.org/bugs/show_bug.cgi?id=26030 + Note: clang 3.3 or later works for mips(el) + earlier versions fail to generate .reginfo and hence gprel relocations + fail. + Note: clang 3.2 or later works for powerpc + earlier versions not tested + Note: clang 3.5 or later works for sparc64 + earlier versions return "error: unable to interface with target machine" + Note: clang has no support for ia64 and hence you can't compile GRUB + for ia64 with clang +* GNU Make +* GNU Bison 2.3 or later +* GNU gettext 0.17 or later +* GNU binutils 2.9.1.0.23 or later +* Flex 2.5.35 or later +* Other standard GNU/Unix tools +* a libc with large file support (e.g. glibc 2.1 or later) + +On GNU/Linux, you also need: + +* libdevmapper 1.02.34 or later (recommended) + +For optional grub-emu features, you need: + +* SDL (recommended) +* libpciaccess (optional) +* libusb (optional) + +To build GRUB's graphical terminal (gfxterm), you need: + +* FreeType 2 or later +* GNU Unifont + +If you use a development snapshot or want to hack on GRUB you may +need the following. + +* Python 2.6 or later +* Autoconf 2.60 or later +* Automake 1.10.1 or later + +Prerequisites for make-check: + +* qemu, specifically the binary 'qemu-system-i386' +* xorriso 1.2.9 or later, for grub-mkrescue and grub-shell + +Configuring the GRUB +==================== + +The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a +file `config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + +If you need to do unusual things to compile the package, please try to +figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + +The file `configure.ac' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + + +Building the GRUB +================= + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code. + + 2. Skip this and following step if you use release tarball and proceed to + step 4. If you want translations type `./linguas.sh'. + + 3. Type `./autogen.sh'. + + * autogen.sh uses python. By default invocation is "python" but can be + overriden by setting variable $PYTHON. + + 4. Type `./configure' to configure the package for your system. + If you're using `csh' on an old version of System V, you might + need to type `sh ./configure' instead to prevent `csh' from trying + to execute `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 6. Type `make' to compile the package. + + 7. Optionally, type `make check' to run any self-tests that come with + the package. + + 8. Type `make install' to install the programs and any data files and + documentation. + + 9. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Cross-compiling the GRUB +======================== + +GRUB defines 3 platforms: + + - "Build" is the one which build systems runs on. + - "Host" is where you execute GRUB utils. + - "Target" is where GRUB itself runs. + +For grub-emu host and target must be the same but may differ from build. + +If build and host are different make check isn't available. + +If build and host are different man pages are not generated. + +As an example imagine you have a build system running on FreeBSD on sparc +which prepares packages for developers running amd64 GNU/Linux laptop and +they need to make images for ARM board running U-boot. In this case: + +build=sparc64-freebsd +host=amd64-linux-gnu +target=arm-uboot + +For this example the configure line might look like (more details below) +(some options are optional and included here for completeness but some rarely +used options are omitted): + +./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu +CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config +--target=arm --with-platform=uboot TARGET_CC=arm-elf-gcc +TARGET_CFLAGS="-Os -march=armv6" TARGET_CCASFLAGS="-march=armv6" +TARGET_OBJCOPY="arm-elf-objcopy" TARGET_STRIP="arm-elf-strip" +TARGET_NM=arm-elf-nm TARGET_RANLIB=arm-elf-ranlib LEX=gflex + +You need to use following options to specify tools and platforms. For minimum +version look at prerequisites. All tools not mentioned in this section under +corresponding platform are not needed for the platform in question. + + - For build + 1. BUILD_CC= to gcc able to compile for build. This is used, for + example, to compile build-gentrigtables which is then run to + generate sin and cos tables. + 2. BUILD_CFLAGS= for C options for build. + 3. BUILD_CPPFLAGS= for C preprocessor options for build. + 4. BUILD_LDFLAGS= for linker options for build. + 5. BUILD_FREETYPE= for freetype-config for build (optional). + + - For host + 1. --host= to autoconf name of host. + 2. CC= for gcc able to compile for host + 3. HOST_CFLAGS= for C options for host. + 4. HOST_CPPFLAGS= for C preprocessor options for host. + 5. HOST_LDFLAGS= for linker options for host. + 6. FREETYPE= for freetype-config for host (optional). + 7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional). + 8. Libfuse if any must be in standard linker folders (-lfuse) (optional). + 9. Libzfs if any must be in standard linker folders (-lzfs) (optional). + 10. Liblzma if any must be in standard linker folders (-llzma) (optional). + + - For target + 1. --target= to autoconf cpu name of target. + 2. --with-platform to choose firmware. + 3. TARGET_CC= for gcc able to compile for target + 4. TARGET_CFLAGS= for C options for target. + 5. TARGET_CPPFLAGS= for C preprocessor options for target. + 6. TARGET_CCASFLAGS= for assembler options for target. + 7. TARGET_LDFLAGS= for linker options for target. + 8. TARGET_OBJCOPY= for objcopy for target. + 9. TARGET_STRIP= for strip for target. + 10. TARGET_NM= for nm for target. + 11. TARGET_RANLIB= for ranlib for target. + + - Additionally for emu, for host and target. + 1. SDL is looked for in standard linker directories (-lSDL) (optional) + 2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional) + 3. libusb is looked for in standard linker directories (-lusb) (optional) + + - Platform-agnostic tools and data. + 1. make is the tool you execute after ./configure. + 2. Bison is specified in YACC= variable + 3. Flex is specified in LEX= variable + 4. GNU unifont and Djvu sans are looked for in standard directories. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. `cd' to the directory where you want the object files +and executables to go and run the `configure' script. `configure' +automatically checks for the source code in the directory that +`configure' is in and in `..'. + + +Installation Names +================== + +By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix by giving `configure' the option `--prefix=PATH'. + +You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If +you give `configure' the option `--exec-prefix=PATH', the package will +use PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + +In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for +particular kinds of files. Run `configure --help' for a list of the +directories you can set and what kinds of files go in them. + +If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' +the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Please note, however, that the GRUB knows where it is located in the +filesystem. If you have installed it in an unusual location, the +system might not work properly, or at all. The chief utility of these +options for the GRUB is to allow you to "install" in some alternate +location, and then copy these to the actual root filesystem later. + + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..7795baeb6 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,481 @@ +AUTOMAKE_OPTIONS = subdir-objects -Wno-portability + +DEPDIR = .deps-util +SUBDIRS = grub-core/gnulib . +if COND_real_platform +SUBDIRS += grub-core +endif +SUBDIRS += po docs util/bash-completion.d + +include $(top_srcdir)/conf/Makefile.common +include $(top_srcdir)/conf/Makefile.extra-dist + +AM_CFLAGS = $(HOST_CFLAGS) +AM_LDFLAGS = $(HOST_LDFLAGS) +AM_CPPFLAGS = $(HOST_CPPFLAGS) $(CPPFLAGS_DEFAULT) +AM_CCASFLAGS = $(HOST_CCASFLAGS) $(CCASFLAGS_DEFAULT) + +ACLOCAL_AMFLAGS = -I m4 + +CFLAGS_PROGRAM += $(CFLAGS_GNULIB) +LDFLAGS_PROGRAM += $(LDFLAGS_GNULIB) +CPPFLAGS_PROGRAM += $(CPPFLAGS_GNULIB) +CCASFLAGS_PROGRAM += $(CCASFLAGS_GNULIB) + +include $(srcdir)/Makefile.util.am + +# XXX Use Automake's LEX & YACC support +grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y + $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/grub-core/script/parser.y +grub_script.tab.c: grub_script.tab.h +CLEANFILES += grub_script.tab.c grub_script.tab.h + +# For the lexer. +grub_script.yy.h: $(top_srcdir)/grub-core/script/yylex.l + $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/grub-core/script/yylex.l +grub_script.yy.c: grub_script.yy.h +CLEANFILES += grub_script.yy.c grub_script.yy.h + +# For libgrub.a +libgrub.pp: grub_script.tab.h grub_script.yy.h $(libgrubmods_a_SOURCES) $(libgrubkern_a_SOURCES) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) \ + -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1) +CLEANFILES += libgrub.pp + +libgrub_a_init.lst: libgrub.pp + cat $< | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) +CLEANFILES += libgrub_a_init.lst + +libgrub_a_init.c: libgrub_a_init.lst $(top_srcdir)/geninit.sh + sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) +CLEANFILES += libgrub_a_init.c + +# For grub-fstest +grub_fstest.pp: $(grub_fstest_SOURCES) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) \ + -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1) +CLEANFILES += grub_fstest.pp + +grub_fstest_init.lst: libgrub.pp grub_fstest.pp + cat $^ | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) +CLEANFILES += grub_fstest_init.lst + +grub_fstest_init.c: grub_fstest_init.lst $(top_srcdir)/geninit.sh + sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) +CLEANFILES += grub_fstest_init.c + +if COND_HAVE_FONT_SOURCE +pkgdata_DATA += unicode.pf2 ascii.pf2 euro.pf2 ascii.h widthspec.h +endif + +starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0 + +build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs) +CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT) + +garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c + $(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^ +CLEANFILES += garbage-gen$(BUILD_EXEEXT) +EXTRA_DIST += util/garbage-gen.c + +build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror +CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT) + +build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror +CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT) + +if COND_STARFIELD +starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files) +dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -s 10 -o $@ $(DJVU_FONT_SOURCE) +CLEANFILES += dejavu_10.pf2 +dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -s 12 -o $@ $(DJVU_FONT_SOURCE) +CLEANFILES += dejavu_12.pf2 +dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -s 14 -o $@ $(DJVU_FONT_SOURCE) +CLEANFILES += dejavu_14.pf2 +dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -b -s 14 -o $@ $(DJVU_FONT_SOURCE) +CLEANFILES += dejavu_bold_14.pf2 +dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -s 16 -o $@ $(DJVU_FONT_SOURCE) +CLEANFILES += dejavu_16.pf2 +else +starfield_DATA = +endif + +EXTRA_DIST += $(starfield_theme_files) +EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf + +unicode.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1) +CLEANFILES += unicode.pf2 + +# Arrows and lines are needed to draw the menu, so always include them +UNICODE_ARROWS=0x2190-0x2193 +UNICODE_LINES=0x2501-0x251B + +ascii.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1) +CLEANFILES += ascii.pf2 + +euro.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1) +CLEANFILES += euro.pf2 + +ascii.h: $(FONT_SOURCE) build-grub-gen-asciih$(BUILD_EXEEXT) + ./build-grub-gen-asciih$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1) +CLEANFILES += ascii.h + +widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec$(BUILD_EXEEXT) + ./build-grub-gen-widthspec$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1) +CLEANFILES += widthspec.h + +# Install config.h into platformdir +nodist_platform_HEADERS = config.h + +pkgdata_DATA += grub-mkconfig_lib + + +if COND_real_platform + +if COND_i386_coreboot +QEMU32=qemu-system-i386 +MINIMUM_CPU_LINUX=pentium2 +endif + +if COND_i386_multiboot +QEMU32=qemu-system-i386 +MINIMUM_CPU_LINUX=pentium2 +endif + +if COND_i386_ieee1275 +QEMU32=qemu-system-i386 +MINIMUM_CPU_LINUX=pentium2 +endif + +if COND_i386_qemu +QEMU32=qemu-system-i386 +MINIMUM_CPU_LINUX=pentium2 +endif + +if COND_i386_pc +QEMU32=qemu-system-i386 +MINIMUM_CPU_LINUX=pentium2 +endif + +if COND_i386_efi +QEMU32=qemu-system-i386 +MINIMUM_CPU_LINUX=pentium2 +endif + +if COND_x86_64_efi +QEMU32=qemu-system-x86_64 +MINIMUM_CPU_LINUX=core2duo +endif + +linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -static -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -static -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S + $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S + $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S + $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S + $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1 + +multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include + +kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include + +kfreebsd.aout: kfreebsd.elf + $(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -j .text + +pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -static -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32 + +pc-chainloader.bin: pc-chainloader.elf + $(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@; + +ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32 + +ntldr.bin: ntldr.elf + $(TARGET_OBJCOPY) -O binary --strip-unneeded -j .text $< $@; + +multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -static -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1 + +kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -m64 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + +kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + +knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S + $(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +linux-initramfs.mips: linux.init.mips Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +linux-initramfs.ppc: linux.init.ppc Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +linux-initramfs.mipsel: linux.init.mipsel Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +linux-initramfs.loongson: linux.init.loongson Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +linux-initramfs.i386: linux.init.i386 Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +linux-initramfs.x86_64: linux.init.x86_64 Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +knetbsd.image.i386: knetbsd.init.i386 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +kopenbsd.image.i386: kopenbsd.init.i386 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@ + +kopenbsd.image.x86_64: kopenbsd.init.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@ + +knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 + $(TARGET_OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ + +kfreebsd-mfsroot.x86_64.img: kfreebsd.init.x86_64 Makefile + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +knetbsd.image.x86_64: knetbsd.init.x86_64 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt + TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +knetbsd.miniroot-image.x86_64.img: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 + $(TARGET_OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $@ + +CLEANFILES += linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 + +kfreebsd-mfsroot.i386.gz: kfreebsd-mfsroot.i386.img + gzip < $< > $@ + +bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/mfsroot.gz=kfreebsd-mfsroot.i386.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +kfreebsd-mfsroot.x86_64.gz: kfreebsd-mfsroot.x86_64.img + gzip < $< > $@ + +bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/mfsroot.gz=kfreebsd-mfsroot.x86_64.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +knetbsd.miniroot-image.i386.gz: knetbsd.miniroot-image.i386.img + gzip < $< > $@ + +bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-kopenbsd-i386: kopenbsd.image.i386 $(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ramdisk=kopenbsd.image.i386 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-kopenbsd-x86_64: kopenbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/kopenbsd.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/ramdisk=kopenbsd.image.x86_64 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +knetbsd.miniroot-image.x86_64.gz: knetbsd.miniroot-image.x86_64.img + gzip < $< > $@ + +bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg --qemu-opts="-cpu $(MINIMUM_CPU_LINUX)" | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-mips: linux-initramfs.mips $(GRUB_PAYLOADS_DIR)/linux.mips $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.mips --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.mips $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-ppc: linux-initramfs.ppc $(GRUB_PAYLOADS_DIR)/linux.ppc $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.ppc --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.ppc $(srcdir)/grub-core/tests/boot/linux-ppc.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-mipsel: linux-initramfs.mipsel $(GRUB_PAYLOADS_DIR)/linux.mipsel $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.mipsel --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.mipsel $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux-loongson: linux-initramfs.loongson $(GRUB_PAYLOADS_DIR)/linux.loongson $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.loongson --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.loongson $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-multiboot: multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/multiboot.elf=multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-multiboot2: multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/multiboot2.elf=multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-kfreebsd-aout: kfreebsd.aout $(srcdir)/grub-core/tests/boot/kfreebsd-aout.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/kfreebsd.aout=kfreebsd.aout $(srcdir)/grub-core/tests/boot/kfreebsd-aout.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-pc-chainloader: pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/pc-chainloader.bin=pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +bootcheck-ntldr: ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg grub-shell + ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +if COND_i386_efi +# NetBSD has no support for finding ACPI on EFI +BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 +endif + +if COND_x86_64_efi +# NetBSD has no support for finding ACPI on EFI +BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 +endif + +if COND_i386_multiboot +# *BSD requires ACPI +BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 +endif + + +if COND_i386_qemu +# *BSD requires ACPI +BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 +endif + +if COND_i386_coreboot +BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 +endif + +if COND_i386_ieee1275 +# *BSD requires ACPI +#legacy protocol (linux16) makes early BIOS calls. +BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 +endif + +if COND_i386_pc +#pc chainloader by definition is only for i386-pc +#ntldr and bootmgr require BIOS. +#legacy protocol (linux16) makes early BIOS calls. +# 32-bit NetBSD crashes early on non-BIOS +BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-i386 +endif + +if COND_mips_loongson +BOOTCHECKS = bootcheck-linux-loongson +endif + +if COND_mipsel +if COND_mips_qemu_mips +BOOTCHECKS = bootcheck-linux-mipsel +endif +endif +if COND_mipseb +if COND_mips_qemu_mips +BOOTCHECKS = bootcheck-linux-mips +endif +endif + +if COND_powerpc_ieee1275 +BOOTCHECKS = bootcheck-linux-ppc +endif + +.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ + bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ + bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \ + bootcheck-linux-mips FORCE + +# Randomly generated +SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d +# tianocore cd access is very slow +BOOTCHECK_TIMEOUT=180 + +bootcheck: $(BOOTCHECKS) + +if COND_i386_coreboot +default_payload.elf: grub-mkstandalone grub-mkimage FORCE + test -f $@ && rm $@ || true + pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(shell cat grub-core/fs.lst) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg +endif + +endif + +EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S + +windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows +windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA) + test -d $(windowsdir) && rm -rf $(windowsdir) || true + test -d $(windowsdir) || mkdir $(windowsdir) + $(MAKE) -C po $(AM_MAKEFLAGS) windowsdir + $(MAKE) -C grub-core $(AM_MAKEFLAGS) windowsdir + test -d $(windowsdir)/themes || mkdir $(windowsdir)/themes + test -d $(windowsdir)/themes/starfield || mkdir $(windowsdir)/themes/starfield + for x in $(PROGRAMS); do \ + if [ x$(STRIP) != x ]; then $(STRIP) $$x -o $(windowsdir)/$$x; \ + else cp -fp $$x $(windowsdir)/$$x; fi; \ + done + for x in $(pkgdata_DATA); do \ + cp -fp $$x $(windowsdir)/$$x; \ + done + for x in $(starfield_DATA); do \ + cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \ + done + for x in $(GRUB_WINDOWS_EXTRA_DIST); do \ + cp -fp $$x $(windowsdir); \ + done + +windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip +windowszip: windowsdir + test -f $(windowszip) && rm $(windowszip) || true + zip -r $(windowszip) $(windowsdir) + rm -rf $(windowsdir) + +EXTRA_DIST += linguas.sh + +changelog_start_date = 2015-01-23 +gitlog_to_changelog = $(top_srcdir)/build-aux/gitlog-to-changelog + +ChangeLog: FORCE + if test -d $(top_srcdir)/.git; then \ + $(gitlog_to_changelog) --srcdir=$(top_srcdir) --since=$(changelog_start_date) > '$@.tmp'; \ + rm -f '$@'; mv '$@.tmp' '$@'; \ + else \ + touch $@; \ + fi + +EXTRA_DIST += ChangeLog ChangeLog-2015 + +syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg + +tests/syslinux/ubuntu10.04_grub.cfg: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg.in + (for x in tests/syslinux/ubuntu10.04_grub.cfg.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +CLEANFILES += tests/syslinux/ubuntu10.04_grub.cfg diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 000000000..0b97d04cd --- /dev/null +++ b/Makefile.in @@ -0,0 +1,12954 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# -*- makefile -*- + + + + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@COND_real_platform_TRUE@am__append_1 = grub-core +@COND_arm64_TRUE@am__append_2 = -mcmodel=large +@COND_powerpc_ieee1275_TRUE@am__append_3 = -mcpu=powerpc +bin_PROGRAMS = grub-mkimage$(EXEEXT) grub-mkrelpath$(EXEEXT) \ + grub-script-check$(EXEEXT) grub-editenv$(EXEEXT) \ + grub-mkpasswd-pbkdf2$(EXEEXT) $(am__EXEEXT_1) \ + grub-fstest$(EXEEXT) $(am__EXEEXT_2) $(am__EXEEXT_3) \ + grub-mklayout$(EXEEXT) $(am__EXEEXT_4) \ + grub-mkstandalone$(EXEEXT) grub-mknetdir$(EXEEXT) \ + grub-menulst2cfg$(EXEEXT) grub-syslinux2cfg$(EXEEXT) \ + grub-glue-efi$(EXEEXT) grub-render-label$(EXEEXT) \ + grub-file$(EXEEXT) +sbin_PROGRAMS = grub-probe$(EXEEXT) grub-bios-setup$(EXEEXT) \ + grub-sparc64-setup$(EXEEXT) grub-ofpathname$(EXEEXT) \ + grub-macbless$(EXEEXT) grub-install$(EXEEXT) +check_PROGRAMS = example_unit_test$(EXEEXT) printf_test$(EXEEXT) \ + date_test$(EXEEXT) $(am__EXEEXT_5) cmp_test$(EXEEXT) +noinst_PROGRAMS = +platform_PROGRAMS = +TESTS = example_unit_test$(EXEEXT) printf_test$(EXEEXT) \ + date_test$(EXEEXT) $(am__EXEEXT_5) cmp_test$(EXEEXT) \ + ext234_test squashfs_test iso9660_test hfsplus_test ntfs_test \ + reiserfs_test fat_test minixfs_test xfs_test nilfs2_test \ + romfs_test exfat_test tar_test udf_test hfs_test jfs_test \ + btrfs_test zfs_test cpio_test example_scripted_test \ + gettext_strings_test pata_test ahci_test uhci_test ohci_test \ + ehci_test example_grub_script_test grub_script_eval \ + grub_script_test grub_script_echo1 \ + grub_script_leading_whitespace grub_script_echo_keywords \ + grub_script_vars1 grub_script_for1 grub_script_while1 \ + grub_script_if grub_script_blanklines \ + grub_script_final_semicolon grub_script_dollar \ + grub_script_comments grub_script_functions grub_script_break \ + grub_script_continue grub_script_shift grub_script_blockarg \ + grub_script_setparams grub_script_return grub_cmd_regexp \ + grub_cmd_date grub_cmd_set_date grub_cmd_sleep \ + grub_script_expansion grub_script_not grub_script_no_commands \ + partmap_test hddboot_test fddboot_test cdboot_test \ + netboot_test pseries_test core_compress_test xzcompress_test \ + gzcompress_test lzocompress_test grub_cmd_echo help_test \ + grub_script_gettext grub_script_escape_comma \ + grub_script_strcmp test_sha512sum test_unset grub_func_test \ + grub_cmd_tr file_filter_test grub_cmd_test syslinux_test +@COND_MAN_PAGES_TRUE@am__append_4 = grub-mkimage.1 grub-mkrelpath.1 \ +@COND_MAN_PAGES_TRUE@ grub-script-check.1 grub-editenv.1 \ +@COND_MAN_PAGES_TRUE@ grub-mkpasswd-pbkdf2.1 +@COND_MAN_PAGES_TRUE@am__append_5 = grub-mkimage.1 +@COND_MAN_PAGES_TRUE@am__append_6 = grub-mkrelpath.1 +@COND_MAN_PAGES_TRUE@am__append_7 = grub-script-check.1 +@COND_MAN_PAGES_TRUE@am__append_8 = grub-editenv.1 +@COND_MAN_PAGES_TRUE@am__append_9 = grub-mkpasswd-pbkdf2.1 +@COND_APPLE_LINKER_TRUE@am__append_10 = grub-macho2img +@COND_APPLE_LINKER_TRUE@@COND_MAN_PAGES_TRUE@am__append_11 = grub-macho2img.1 +@COND_APPLE_LINKER_TRUE@@COND_MAN_PAGES_TRUE@am__append_12 = grub-macho2img.1 +@COND_APPLE_LINKER_TRUE@am__append_13 = +@COND_APPLE_LINKER_TRUE@am__append_14 = $(nodist_grub_macho2img_SOURCES) +@COND_APPLE_LINKER_TRUE@am__append_15 = $(nodist_grub_macho2img_SOURCES) +@COND_MAN_PAGES_TRUE@am__append_16 = grub-fstest.1 +@COND_MAN_PAGES_TRUE@am__append_17 = grub-fstest.1 +@COND_GRUB_MOUNT_TRUE@am__append_18 = grub-mount +@COND_GRUB_MOUNT_TRUE@@COND_MAN_PAGES_TRUE@am__append_19 = grub-mount.1 +@COND_GRUB_MOUNT_TRUE@@COND_MAN_PAGES_TRUE@am__append_20 = grub-mount.1 +@COND_GRUB_MOUNT_TRUE@am__append_21 = +@COND_GRUB_MOUNT_TRUE@am__append_22 = $(nodist_grub_mount_SOURCES) +@COND_GRUB_MOUNT_TRUE@am__append_23 = $(nodist_grub_mount_SOURCES) +@COND_GRUB_MKFONT_TRUE@am__append_24 = grub-mkfont +@COND_GRUB_MKFONT_TRUE@@COND_MAN_PAGES_TRUE@am__append_25 = grub-mkfont.1 +@COND_GRUB_MKFONT_TRUE@@COND_MAN_PAGES_TRUE@am__append_26 = grub-mkfont.1 +@COND_GRUB_MKFONT_TRUE@am__append_27 = +@COND_GRUB_MKFONT_TRUE@am__append_28 = $(nodist_grub_mkfont_SOURCES) +@COND_GRUB_MKFONT_TRUE@am__append_29 = $(nodist_grub_mkfont_SOURCES) +@COND_MAN_PAGES_TRUE@am__append_30 = grub-probe.8 grub-bios-setup.8 \ +@COND_MAN_PAGES_TRUE@ grub-sparc64-setup.8 grub-ofpathname.8 \ +@COND_MAN_PAGES_TRUE@ grub-mklayout.1 grub-macbless.8 +@COND_MAN_PAGES_TRUE@am__append_31 = grub-probe.8 +@COND_MAN_PAGES_TRUE@am__append_32 = grub-bios-setup.8 +@COND_MAN_PAGES_TRUE@am__append_33 = grub-sparc64-setup.8 +@COND_MAN_PAGES_TRUE@am__append_34 = grub-ofpathname.8 +@COND_MAN_PAGES_TRUE@am__append_35 = grub-mklayout.1 +@COND_MAN_PAGES_TRUE@am__append_36 = grub-macbless.8 +@COND_HAVE_EXEC_TRUE@am__append_37 = grub-mkrescue +@COND_HAVE_EXEC_TRUE@@COND_MAN_PAGES_TRUE@am__append_38 = grub-mkrescue.1 +@COND_HAVE_EXEC_TRUE@@COND_MAN_PAGES_TRUE@am__append_39 = grub-mkrescue.1 +@COND_HAVE_EXEC_TRUE@am__append_40 = grub-core/osdep/unix/compress.c grub-core/osdep/basic/compress.c +@COND_HAVE_EXEC_TRUE@am__append_41 = $(nodist_grub_mkrescue_SOURCES) +@COND_HAVE_EXEC_TRUE@am__append_42 = $(nodist_grub_mkrescue_SOURCES) +@COND_MAN_PAGES_TRUE@am__append_43 = grub-mkstandalone.1 \ +@COND_MAN_PAGES_TRUE@ grub-install.8 grub-mknetdir.1 \ +@COND_MAN_PAGES_TRUE@ grub-menulst2cfg.1 grub-syslinux2cfg.1 \ +@COND_MAN_PAGES_TRUE@ grub-glue-efi.1 grub-render-label.1 \ +@COND_MAN_PAGES_TRUE@ grub-file.1 grub-mkconfig.8 \ +@COND_MAN_PAGES_TRUE@ grub-set-default.8 grub-reboot.8 \ +@COND_MAN_PAGES_TRUE@ grub-kbdcomp.1 +@COND_MAN_PAGES_TRUE@am__append_44 = grub-mkstandalone.1 +@COND_MAN_PAGES_TRUE@am__append_45 = grub-install.8 +@COND_MAN_PAGES_TRUE@am__append_46 = grub-mknetdir.1 +@COND_HAVE_CXX_TRUE@am__append_47 = priority_queue_unit_test +@COND_HAVE_CXX_TRUE@am__append_48 = priority_queue_unit_test +@COND_HAVE_CXX_TRUE@am__append_49 = +@COND_HAVE_CXX_TRUE@am__append_50 = $(nodist_priority_queue_unit_test_SOURCES) +@COND_HAVE_CXX_TRUE@am__append_51 = $(nodist_priority_queue_unit_test_SOURCES) +@COND_MAN_PAGES_TRUE@am__append_52 = grub-menulst2cfg.1 +@COND_MAN_PAGES_TRUE@am__append_53 = grub-syslinux2cfg.1 +@COND_MAN_PAGES_TRUE@am__append_54 = grub-glue-efi.1 +@COND_MAN_PAGES_TRUE@am__append_55 = grub-render-label.1 +@COND_MAN_PAGES_TRUE@am__append_56 = grub-file.1 +@COND_HOST_WINDOWS_TRUE@am__append_57 = 10_windows +@COND_HOST_WINDOWS_TRUE@am__append_58 = 10_windows +@COND_HOST_WINDOWS_TRUE@am__append_59 = +@COND_HOST_WINDOWS_TRUE@am__append_60 = util/grub.d/10_windows.in +@COND_HOST_HURD_TRUE@am__append_61 = 10_hurd +@COND_HOST_HURD_TRUE@am__append_62 = 10_hurd +@COND_HOST_HURD_TRUE@am__append_63 = +@COND_HOST_HURD_TRUE@am__append_64 = util/grub.d/10_hurd.in +@COND_HOST_KFREEBSD_TRUE@am__append_65 = 10_kfreebsd +@COND_HOST_KFREEBSD_TRUE@am__append_66 = 10_kfreebsd +@COND_HOST_KFREEBSD_TRUE@am__append_67 = +@COND_HOST_KFREEBSD_TRUE@am__append_68 = util/grub.d/10_kfreebsd.in +@COND_HOST_ILLUMOS_TRUE@am__append_69 = 10_illumos +@COND_HOST_ILLUMOS_TRUE@am__append_70 = 10_illumos +@COND_HOST_ILLUMOS_TRUE@am__append_71 = +@COND_HOST_ILLUMOS_TRUE@am__append_72 = util/grub.d/10_illumos.in +@COND_HOST_NETBSD_TRUE@am__append_73 = 10_netbsd +@COND_HOST_NETBSD_TRUE@am__append_74 = 10_netbsd +@COND_HOST_NETBSD_TRUE@am__append_75 = +@COND_HOST_NETBSD_TRUE@am__append_76 = util/grub.d/10_netbsd.in +@COND_HOST_LINUX_TRUE@am__append_77 = 10_linux +@COND_HOST_LINUX_TRUE@am__append_78 = 10_linux +@COND_HOST_LINUX_TRUE@am__append_79 = +@COND_HOST_LINUX_TRUE@am__append_80 = util/grub.d/10_linux.in +@COND_HOST_XNU_TRUE@am__append_81 = 10_xnu +@COND_HOST_XNU_TRUE@am__append_82 = 10_xnu +@COND_HOST_XNU_TRUE@am__append_83 = +@COND_HOST_XNU_TRUE@am__append_84 = util/grub.d/10_xnu.in +@COND_HOST_LINUX_TRUE@am__append_85 = 20_linux_xen +@COND_HOST_LINUX_TRUE@am__append_86 = 20_linux_xen +@COND_HOST_LINUX_TRUE@am__append_87 = +@COND_HOST_LINUX_TRUE@am__append_88 = util/grub.d/20_linux_xen.in +@COND_MAN_PAGES_TRUE@am__append_89 = grub-mkconfig.8 +@COND_MAN_PAGES_TRUE@am__append_90 = grub-set-default.8 +@COND_MAN_PAGES_TRUE@am__append_91 = grub-reboot.8 +@COND_MAN_PAGES_TRUE@am__append_92 = grub-kbdcomp.1 +@COND_HAVE_FONT_SOURCE_TRUE@am__append_93 = unicode.pf2 ascii.pf2 euro.pf2 ascii.h widthspec.h +@COND_STARFIELD_TRUE@am__append_94 = dejavu_10.pf2 dejavu_12.pf2 \ +@COND_STARFIELD_TRUE@ dejavu_14.pf2 dejavu_bold_14.pf2 \ +@COND_STARFIELD_TRUE@ dejavu_16.pf2 +@COND_real_platform_TRUE@am__append_95 = linux.init.i386 kfreebsd.init.i386 linux.init.x86_64 linux-initramfs.i386 linux-initramfs.x86_64 +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argp.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/errno_h.m4 \ + $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \ + $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/langinfo_h.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libunistring-base.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/mbtowc.m4 \ + $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ + $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/sleep.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdalign.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strchrnul.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sysexits.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/warn-on-use.m4 \ + $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ + $(top_srcdir)/m4/wcwidth.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(dist_grubconf_DATA) \ + $(am__dist_noinst_DATA_DIST) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config-util.h +CONFIG_CLEAN_FILES = stamp-h config.h include/grub/cpu \ + include/grub/machine +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libgrubgcry_a_AR = $(AR) $(ARFLAGS) +libgrubgcry_a_LIBADD = +am__dirstamp = $(am__leading_dot)dirstamp +am_libgrubgcry_a_OBJECTS = grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.$(OBJEXT) \ + grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.$(OBJEXT) +nodist_libgrubgcry_a_OBJECTS = +libgrubgcry_a_OBJECTS = $(am_libgrubgcry_a_OBJECTS) \ + $(nodist_libgrubgcry_a_OBJECTS) +libgrubkern_a_AR = $(AR) $(ARFLAGS) +libgrubkern_a_LIBADD = +am_libgrubkern_a_OBJECTS = util/libgrubkern_a-misc.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-command.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-device.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-disk.$(OBJEXT) \ + grub-core/lib/libgrubkern_a-disk.$(OBJEXT) \ + util/libgrubkern_a-getroot.$(OBJEXT) \ + grub-core/osdep/unix/libgrubkern_a-getroot.$(OBJEXT) \ + grub-core/osdep/libgrubkern_a-getroot.$(OBJEXT) \ + grub-core/osdep/devmapper/libgrubkern_a-getroot.$(OBJEXT) \ + grub-core/osdep/libgrubkern_a-relpath.$(OBJEXT) \ + grub-core/kern/emu/libgrubkern_a-hostdisk.$(OBJEXT) \ + grub-core/osdep/devmapper/libgrubkern_a-hostdisk.$(OBJEXT) \ + grub-core/osdep/libgrubkern_a-hostdisk.$(OBJEXT) \ + grub-core/osdep/unix/libgrubkern_a-hostdisk.$(OBJEXT) \ + grub-core/osdep/libgrubkern_a-exec.$(OBJEXT) \ + grub-core/osdep/libgrubkern_a-sleep.$(OBJEXT) \ + grub-core/osdep/libgrubkern_a-password.$(OBJEXT) \ + grub-core/kern/emu/libgrubkern_a-misc.$(OBJEXT) \ + grub-core/kern/emu/libgrubkern_a-mm.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-env.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-err.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-file.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-fs.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-list.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-misc.$(OBJEXT) \ + grub-core/kern/libgrubkern_a-partition.$(OBJEXT) \ + grub-core/lib/libgrubkern_a-crypto.$(OBJEXT) \ + grub-core/disk/libgrubkern_a-luks.$(OBJEXT) \ + grub-core/disk/libgrubkern_a-geli.$(OBJEXT) \ + grub-core/disk/libgrubkern_a-cryptodisk.$(OBJEXT) \ + grub-core/disk/libgrubkern_a-AFSplitter.$(OBJEXT) \ + grub-core/lib/libgrubkern_a-pbkdf2.$(OBJEXT) \ + grub-core/commands/libgrubkern_a-extcmd.$(OBJEXT) \ + grub-core/lib/libgrubkern_a-arg.$(OBJEXT) \ + grub-core/disk/libgrubkern_a-ldm.$(OBJEXT) \ + grub-core/disk/libgrubkern_a-diskfilter.$(OBJEXT) \ + grub-core/partmap/libgrubkern_a-gpt.$(OBJEXT) \ + grub-core/partmap/libgrubkern_a-msdos.$(OBJEXT) \ + grub-core/fs/libgrubkern_a-proc.$(OBJEXT) \ + grub-core/fs/libgrubkern_a-archelp.$(OBJEXT) +nodist_libgrubkern_a_OBJECTS = +libgrubkern_a_OBJECTS = $(am_libgrubkern_a_OBJECTS) \ + $(nodist_libgrubkern_a_OBJECTS) +libgrubmods_a_AR = $(AR) $(ARFLAGS) +libgrubmods_a_LIBADD = +am_libgrubmods_a_OBJECTS = \ + grub-core/commands/libgrubmods_a-blocklist.$(OBJEXT) \ + grub-core/commands/libgrubmods_a-macbless.$(OBJEXT) \ + grub-core/commands/libgrubmods_a-xnu_uuid.$(OBJEXT) \ + grub-core/commands/libgrubmods_a-testload.$(OBJEXT) \ + grub-core/commands/libgrubmods_a-ls.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-dmraid_nvidia.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-loopback.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-lvm.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-mdraid_linux.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-mdraid_linux_be.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-mdraid1x_linux.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-raid5_recover.$(OBJEXT) \ + grub-core/disk/libgrubmods_a-raid6_recover.$(OBJEXT) \ + grub-core/font/libgrubmods_a-font.$(OBJEXT) \ + grub-core/gfxmenu/libgrubmods_a-font.$(OBJEXT) \ + grub-core/normal/libgrubmods_a-charset.$(OBJEXT) \ + grub-core/video/fb/libgrubmods_a-fbblit.$(OBJEXT) \ + grub-core/video/fb/libgrubmods_a-fbutil.$(OBJEXT) \ + grub-core/video/fb/libgrubmods_a-fbfill.$(OBJEXT) \ + grub-core/video/fb/libgrubmods_a-video_fb.$(OBJEXT) \ + grub-core/video/libgrubmods_a-video.$(OBJEXT) \ + grub-core/video/libgrubmods_a-capture.$(OBJEXT) \ + grub-core/video/libgrubmods_a-colors.$(OBJEXT) \ + grub-core/libgrubmods_a-unidata.$(OBJEXT) \ + grub-core/io/libgrubmods_a-bufio.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-affs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-afs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-bfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-btrfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-cbfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-cpio.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-cpio_be.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-odc.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-newc.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-ext2.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-fat.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-exfat.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-fshelp.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-hfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-hfsplus.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-hfspluscomp.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-iso9660.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-jfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-minix.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-minix2.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-minix3.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-minix_be.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-minix2_be.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-minix3_be.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-nilfs2.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-ntfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-ntfscomp.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-reiserfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-romfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-sfs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-squash4.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-tar.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-udf.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-ufs2.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-ufs.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-ufs_be.$(OBJEXT) \ + grub-core/fs/libgrubmods_a-xfs.$(OBJEXT) \ + grub-core/fs/zfs/libgrubmods_a-zfscrypt.$(OBJEXT) \ + grub-core/fs/zfs/libgrubmods_a-zfs.$(OBJEXT) \ + grub-core/fs/zfs/libgrubmods_a-zfsinfo.$(OBJEXT) \ + grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.$(OBJEXT) \ + grub-core/fs/zfs/libgrubmods_a-zfs_lz4.$(OBJEXT) \ + grub-core/fs/zfs/libgrubmods_a-zfs_sha256.$(OBJEXT) \ + grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.$(OBJEXT) \ + grub-core/lib/libgrubmods_a-envblk.$(OBJEXT) \ + grub-core/lib/libgrubmods_a-hexdump.$(OBJEXT) \ + grub-core/lib/libgrubmods_a-LzFind.$(OBJEXT) \ + grub-core/lib/libgrubmods_a-LzmaEnc.$(OBJEXT) \ + grub-core/lib/libgrubmods_a-crc.$(OBJEXT) \ + grub-core/lib/libgrubmods_a-adler32.$(OBJEXT) \ + grub-core/lib/libgrubmods_a-crc64.$(OBJEXT) \ + grub-core/normal/libgrubmods_a-datetime.$(OBJEXT) \ + grub-core/normal/libgrubmods_a-misc.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-acorn.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-amiga.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-apple.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-sun.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-plan.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-dvh.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-sunpc.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-bsdlabel.$(OBJEXT) \ + grub-core/partmap/libgrubmods_a-dfly.$(OBJEXT) \ + grub-core/script/libgrubmods_a-function.$(OBJEXT) \ + grub-core/script/libgrubmods_a-lexer.$(OBJEXT) \ + grub-core/script/libgrubmods_a-main.$(OBJEXT) \ + grub-core/script/libgrubmods_a-script.$(OBJEXT) \ + grub-core/script/libgrubmods_a-argv.$(OBJEXT) \ + grub-core/io/libgrubmods_a-gzio.$(OBJEXT) \ + grub-core/io/libgrubmods_a-xzio.$(OBJEXT) \ + grub-core/io/libgrubmods_a-lzopio.$(OBJEXT) \ + grub-core/kern/ia64/libgrubmods_a-dl_helper.$(OBJEXT) \ + grub-core/kern/arm/libgrubmods_a-dl_helper.$(OBJEXT) \ + grub-core/kern/arm64/libgrubmods_a-dl_helper.$(OBJEXT) \ + grub-core/lib/minilzo/libgrubmods_a-minilzo.$(OBJEXT) \ + grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.$(OBJEXT) \ + grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.$(OBJEXT) \ + grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.$(OBJEXT) +nodist_libgrubmods_a_OBJECTS = \ + libgrubmods_a-grub_script.tab.$(OBJEXT) \ + libgrubmods_a-grub_script.yy.$(OBJEXT) \ + libgrubmods_a-libgrub_a_init.$(OBJEXT) +libgrubmods_a_OBJECTS = $(am_libgrubmods_a_OBJECTS) \ + $(nodist_libgrubmods_a_OBJECTS) +@COND_APPLE_LINKER_TRUE@am__EXEEXT_1 = grub-macho2img$(EXEEXT) +@COND_GRUB_MOUNT_TRUE@am__EXEEXT_2 = grub-mount$(EXEEXT) +@COND_GRUB_MKFONT_TRUE@am__EXEEXT_3 = grub-mkfont$(EXEEXT) +@COND_HAVE_EXEC_TRUE@am__EXEEXT_4 = grub-mkrescue$(EXEEXT) +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(platformdir)" \ + "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(grubconfdir)" "$(DESTDIR)$(platformdir)" \ + "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(grubconfdir)" \ + "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(platformdir)" \ + "$(DESTDIR)$(starfielddir)" "$(DESTDIR)$(platformdir)" +@COND_HAVE_CXX_TRUE@am__EXEEXT_5 = priority_queue_unit_test$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(platform_PROGRAMS) \ + $(sbin_PROGRAMS) +am_cmp_test_OBJECTS = tests/cmp_test-cmp_unit_test.$(OBJEXT) \ + tests/lib/cmp_test-unit_test.$(OBJEXT) \ + grub-core/kern/cmp_test-list.$(OBJEXT) \ + grub-core/kern/cmp_test-misc.$(OBJEXT) \ + grub-core/tests/lib/cmp_test-test.$(OBJEXT) +nodist_cmp_test_OBJECTS = +cmp_test_OBJECTS = $(am_cmp_test_OBJECTS) $(nodist_cmp_test_OBJECTS) +am__DEPENDENCIES_1 = +cmp_test_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +cmp_test_LINK = $(CCLD) $(cmp_test_CFLAGS) $(CFLAGS) \ + $(cmp_test_LDFLAGS) $(LDFLAGS) -o $@ +am_date_test_OBJECTS = tests/date_test-date_unit_test.$(OBJEXT) \ + tests/lib/date_test-unit_test.$(OBJEXT) \ + grub-core/kern/date_test-list.$(OBJEXT) \ + grub-core/kern/date_test-misc.$(OBJEXT) \ + grub-core/tests/lib/date_test-test.$(OBJEXT) +nodist_date_test_OBJECTS = +date_test_OBJECTS = $(am_date_test_OBJECTS) \ + $(nodist_date_test_OBJECTS) +date_test_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +date_test_LINK = $(CCLD) $(date_test_CFLAGS) $(CFLAGS) \ + $(date_test_LDFLAGS) $(LDFLAGS) -o $@ +am_example_unit_test_OBJECTS = \ + tests/example_unit_test-example_unit_test.$(OBJEXT) \ + tests/lib/example_unit_test-unit_test.$(OBJEXT) \ + grub-core/kern/example_unit_test-list.$(OBJEXT) \ + grub-core/kern/example_unit_test-misc.$(OBJEXT) \ + grub-core/tests/lib/example_unit_test-test.$(OBJEXT) +nodist_example_unit_test_OBJECTS = +example_unit_test_OBJECTS = $(am_example_unit_test_OBJECTS) \ + $(nodist_example_unit_test_OBJECTS) +example_unit_test_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +example_unit_test_LINK = $(CCLD) $(example_unit_test_CFLAGS) $(CFLAGS) \ + $(example_unit_test_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_bios_setup_OBJECTS = \ + util/grub_bios_setup-grub-setup.$(OBJEXT) \ + util/grub_bios_setup-setup_bios.$(OBJEXT) \ + grub-core/kern/emu/grub_bios_setup-argp_common.$(OBJEXT) \ + grub-core/lib/grub_bios_setup-reed_solomon.$(OBJEXT) \ + grub-core/osdep/grub_bios_setup-blocklist.$(OBJEXT) \ + grub-core/osdep/grub_bios_setup-init.$(OBJEXT) +nodist_grub_bios_setup_OBJECTS = +grub_bios_setup_OBJECTS = $(am_grub_bios_setup_OBJECTS) \ + $(nodist_grub_bios_setup_OBJECTS) +grub_bios_setup_DEPENDENCIES = libgrubmods.a libgrubkern.a \ + libgrubgcry.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_bios_setup_LINK = $(CCLD) $(grub_bios_setup_CFLAGS) $(CFLAGS) \ + $(grub_bios_setup_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_editenv_OBJECTS = util/grub_editenv-grub-editenv.$(OBJEXT) \ + util/grub_editenv-editenv.$(OBJEXT) \ + grub-core/osdep/grub_editenv-init.$(OBJEXT) +nodist_grub_editenv_OBJECTS = +grub_editenv_OBJECTS = $(am_grub_editenv_OBJECTS) \ + $(nodist_grub_editenv_OBJECTS) +grub_editenv_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_editenv_LINK = $(CCLD) $(grub_editenv_CFLAGS) $(CFLAGS) \ + $(grub_editenv_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_file_OBJECTS = util/grub_file-grub-file.$(OBJEXT) \ + util/grub_file-render-label.$(OBJEXT) \ + grub-core/commands/grub_file-file.$(OBJEXT) \ + grub-core/commands/grub_file-file32.$(OBJEXT) \ + grub-core/commands/grub_file-file64.$(OBJEXT) \ + grub-core/loader/i386/grub_file-xen_file.$(OBJEXT) \ + grub-core/loader/i386/grub_file-xen_file32.$(OBJEXT) \ + grub-core/loader/i386/grub_file-xen_file64.$(OBJEXT) \ + grub-core/io/grub_file-offset.$(OBJEXT) \ + grub-core/kern/grub_file-elf.$(OBJEXT) \ + grub-core/loader/grub_file-lzss.$(OBJEXT) \ + grub-core/loader/grub_file-macho.$(OBJEXT) \ + grub-core/loader/grub_file-macho32.$(OBJEXT) \ + grub-core/loader/grub_file-macho64.$(OBJEXT) \ + grub-core/kern/emu/grub_file-hostfs.$(OBJEXT) \ + grub-core/disk/grub_file-host.$(OBJEXT) \ + grub-core/osdep/grub_file-init.$(OBJEXT) +nodist_grub_file_OBJECTS = +grub_file_OBJECTS = $(am_grub_file_OBJECTS) \ + $(nodist_grub_file_OBJECTS) +grub_file_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_file_LINK = $(CCLD) $(grub_file_CFLAGS) $(CFLAGS) \ + $(grub_file_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_fstest_OBJECTS = util/grub_fstest-grub-fstest.$(OBJEXT) \ + grub-core/kern/emu/grub_fstest-hostfs.$(OBJEXT) \ + grub-core/disk/grub_fstest-host.$(OBJEXT) \ + grub-core/osdep/grub_fstest-init.$(OBJEXT) +nodist_grub_fstest_OBJECTS = grub_fstest-grub_fstest_init.$(OBJEXT) +grub_fstest_OBJECTS = $(am_grub_fstest_OBJECTS) \ + $(nodist_grub_fstest_OBJECTS) +grub_fstest_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_fstest_LINK = $(CCLD) $(grub_fstest_CFLAGS) $(CFLAGS) \ + $(grub_fstest_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_glue_efi_OBJECTS = util/grub_glue_efi-grub-glue-efi.$(OBJEXT) \ + util/grub_glue_efi-glue-efi.$(OBJEXT) \ + grub-core/kern/emu/grub_glue_efi-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_glue_efi-init.$(OBJEXT) +nodist_grub_glue_efi_OBJECTS = +grub_glue_efi_OBJECTS = $(am_grub_glue_efi_OBJECTS) \ + $(nodist_grub_glue_efi_OBJECTS) +grub_glue_efi_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_glue_efi_LINK = $(CCLD) $(grub_glue_efi_CFLAGS) $(CFLAGS) \ + $(grub_glue_efi_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_install_OBJECTS = util/grub_install-grub-install.$(OBJEXT) \ + util/grub_install-probe.$(OBJEXT) \ + util/grub_install-mkimage.$(OBJEXT) \ + util/grub_install-grub-mkimage32.$(OBJEXT) \ + util/grub_install-grub-mkimage64.$(OBJEXT) \ + util/grub_install-grub-install-common.$(OBJEXT) \ + util/grub_install-setup_bios.$(OBJEXT) \ + util/grub_install-setup_sparc.$(OBJEXT) \ + grub-core/lib/grub_install-reed_solomon.$(OBJEXT) \ + grub-core/osdep/grub_install-random.$(OBJEXT) \ + grub-core/osdep/grub_install-ofpath.$(OBJEXT) \ + grub-core/osdep/grub_install-platform.$(OBJEXT) \ + grub-core/osdep/grub_install-platform_unix.$(OBJEXT) \ + grub-core/osdep/grub_install-compress.$(OBJEXT) \ + util/grub_install-editenv.$(OBJEXT) \ + grub-core/osdep/grub_install-blocklist.$(OBJEXT) \ + grub-core/osdep/grub_install-config.$(OBJEXT) \ + util/grub_install-config.$(OBJEXT) \ + util/grub_install-render-label.$(OBJEXT) \ + grub-core/kern/emu/grub_install-hostfs.$(OBJEXT) \ + grub-core/disk/grub_install-host.$(OBJEXT) \ + util/grub_install-resolve.$(OBJEXT) \ + grub-core/kern/emu/grub_install-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_install-init.$(OBJEXT) +nodist_grub_install_OBJECTS = +grub_install_OBJECTS = $(am_grub_install_OBJECTS) \ + $(nodist_grub_install_OBJECTS) +grub_install_DEPENDENCIES = $(am__DEPENDENCIES_1) libgrubmods.a \ + libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_install_LINK = $(CCLD) $(grub_install_CFLAGS) $(CFLAGS) \ + $(grub_install_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_macbless_OBJECTS = util/grub_macbless-grub-macbless.$(OBJEXT) \ + grub-core/osdep/grub_macbless-init.$(OBJEXT) \ + grub-core/kern/emu/grub_macbless-argp_common.$(OBJEXT) +nodist_grub_macbless_OBJECTS = +grub_macbless_OBJECTS = $(am_grub_macbless_OBJECTS) \ + $(nodist_grub_macbless_OBJECTS) +grub_macbless_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_macbless_LINK = $(CCLD) $(grub_macbless_CFLAGS) $(CFLAGS) \ + $(grub_macbless_LDFLAGS) $(LDFLAGS) -o $@ +am__grub_macho2img_SOURCES_DIST = util/grub-macho2img.c +@COND_APPLE_LINKER_TRUE@am_grub_macho2img_OBJECTS = util/grub_macho2img-grub-macho2img.$(OBJEXT) +nodist_grub_macho2img_OBJECTS = +grub_macho2img_OBJECTS = $(am_grub_macho2img_OBJECTS) \ + $(nodist_grub_macho2img_OBJECTS) +grub_macho2img_DEPENDENCIES = +grub_macho2img_LINK = $(CCLD) $(grub_macho2img_CFLAGS) $(CFLAGS) \ + $(grub_macho2img_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_menulst2cfg_OBJECTS = \ + util/grub_menulst2cfg-grub-menulst2cfg.$(OBJEXT) \ + grub-core/lib/grub_menulst2cfg-legacy_parse.$(OBJEXT) \ + grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.$(OBJEXT) \ + grub-core/osdep/grub_menulst2cfg-init.$(OBJEXT) +nodist_grub_menulst2cfg_OBJECTS = +grub_menulst2cfg_OBJECTS = $(am_grub_menulst2cfg_OBJECTS) \ + $(nodist_grub_menulst2cfg_OBJECTS) +grub_menulst2cfg_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_menulst2cfg_LINK = $(CCLD) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) \ + $(grub_menulst2cfg_LDFLAGS) $(LDFLAGS) -o $@ +am__grub_mkfont_SOURCES_DIST = util/grub-mkfont.c \ + grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +@COND_GRUB_MKFONT_TRUE@am_grub_mkfont_OBJECTS = \ +@COND_GRUB_MKFONT_TRUE@ util/grub_mkfont-grub-mkfont.$(OBJEXT) \ +@COND_GRUB_MKFONT_TRUE@ grub-core/kern/emu/grub_mkfont-argp_common.$(OBJEXT) \ +@COND_GRUB_MKFONT_TRUE@ grub-core/osdep/grub_mkfont-init.$(OBJEXT) +nodist_grub_mkfont_OBJECTS = +grub_mkfont_OBJECTS = $(am_grub_mkfont_OBJECTS) \ + $(nodist_grub_mkfont_OBJECTS) +@COND_GRUB_MKFONT_TRUE@grub_mkfont_DEPENDENCIES = libgrubmods.a \ +@COND_GRUB_MKFONT_TRUE@ libgrubgcry.a libgrubkern.a \ +@COND_GRUB_MKFONT_TRUE@ grub-core/gnulib/libgnu.a \ +@COND_GRUB_MKFONT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MKFONT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MKFONT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MKFONT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MKFONT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MKFONT_TRUE@ $(am__DEPENDENCIES_1) +grub_mkfont_LINK = $(CCLD) $(grub_mkfont_CFLAGS) $(CFLAGS) \ + $(grub_mkfont_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_mkimage_OBJECTS = util/grub_mkimage-grub-mkimage.$(OBJEXT) \ + util/grub_mkimage-mkimage.$(OBJEXT) \ + util/grub_mkimage-grub-mkimage32.$(OBJEXT) \ + util/grub_mkimage-grub-mkimage64.$(OBJEXT) \ + util/grub_mkimage-resolve.$(OBJEXT) \ + grub-core/kern/emu/grub_mkimage-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_mkimage-init.$(OBJEXT) \ + grub-core/osdep/grub_mkimage-config.$(OBJEXT) \ + util/grub_mkimage-config.$(OBJEXT) +nodist_grub_mkimage_OBJECTS = +grub_mkimage_OBJECTS = $(am_grub_mkimage_OBJECTS) \ + $(nodist_grub_mkimage_OBJECTS) +grub_mkimage_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_mkimage_LINK = $(CCLD) $(grub_mkimage_CFLAGS) $(CFLAGS) \ + $(grub_mkimage_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_mklayout_OBJECTS = util/grub_mklayout-grub-mklayout.$(OBJEXT) \ + grub-core/kern/emu/grub_mklayout-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_mklayout-init.$(OBJEXT) +nodist_grub_mklayout_OBJECTS = +grub_mklayout_OBJECTS = $(am_grub_mklayout_OBJECTS) \ + $(nodist_grub_mklayout_OBJECTS) +grub_mklayout_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_mklayout_LINK = $(CCLD) $(grub_mklayout_CFLAGS) $(CFLAGS) \ + $(grub_mklayout_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_mknetdir_OBJECTS = util/grub_mknetdir-grub-mknetdir.$(OBJEXT) \ + util/grub_mknetdir-mkimage.$(OBJEXT) \ + util/grub_mknetdir-grub-mkimage32.$(OBJEXT) \ + util/grub_mknetdir-grub-mkimage64.$(OBJEXT) \ + util/grub_mknetdir-grub-install-common.$(OBJEXT) \ + util/grub_mknetdir-setup_bios.$(OBJEXT) \ + util/grub_mknetdir-setup_sparc.$(OBJEXT) \ + grub-core/lib/grub_mknetdir-reed_solomon.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-random.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-ofpath.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-platform.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-platform_unix.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-compress.$(OBJEXT) \ + util/grub_mknetdir-editenv.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-blocklist.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-config.$(OBJEXT) \ + util/grub_mknetdir-config.$(OBJEXT) \ + util/grub_mknetdir-resolve.$(OBJEXT) \ + grub-core/kern/emu/grub_mknetdir-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_mknetdir-init.$(OBJEXT) +nodist_grub_mknetdir_OBJECTS = +grub_mknetdir_OBJECTS = $(am_grub_mknetdir_OBJECTS) \ + $(nodist_grub_mknetdir_OBJECTS) +grub_mknetdir_DEPENDENCIES = $(am__DEPENDENCIES_1) libgrubmods.a \ + libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_mknetdir_LINK = $(CCLD) $(grub_mknetdir_CFLAGS) $(CFLAGS) \ + $(grub_mknetdir_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_mkpasswd_pbkdf2_OBJECTS = \ + util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.$(OBJEXT) \ + grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_mkpasswd_pbkdf2-random.$(OBJEXT) \ + grub-core/osdep/grub_mkpasswd_pbkdf2-init.$(OBJEXT) +nodist_grub_mkpasswd_pbkdf2_OBJECTS = +grub_mkpasswd_pbkdf2_OBJECTS = $(am_grub_mkpasswd_pbkdf2_OBJECTS) \ + $(nodist_grub_mkpasswd_pbkdf2_OBJECTS) +grub_mkpasswd_pbkdf2_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_mkpasswd_pbkdf2_LINK = $(CCLD) $(grub_mkpasswd_pbkdf2_CFLAGS) \ + $(CFLAGS) $(grub_mkpasswd_pbkdf2_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_mkrelpath_OBJECTS = \ + util/grub_mkrelpath-grub-mkrelpath.$(OBJEXT) \ + grub-core/kern/emu/grub_mkrelpath-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_mkrelpath-init.$(OBJEXT) +nodist_grub_mkrelpath_OBJECTS = +grub_mkrelpath_OBJECTS = $(am_grub_mkrelpath_OBJECTS) \ + $(nodist_grub_mkrelpath_OBJECTS) +grub_mkrelpath_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_mkrelpath_LINK = $(CCLD) $(grub_mkrelpath_CFLAGS) $(CFLAGS) \ + $(grub_mkrelpath_LDFLAGS) $(LDFLAGS) -o $@ +am__grub_mkrescue_SOURCES_DIST = util/grub-mkrescue.c \ + util/render-label.c util/glue-efi.c util/mkimage.c \ + util/grub-mkimage32.c util/grub-mkimage64.c \ + util/grub-install-common.c util/setup_bios.c \ + util/setup_sparc.c grub-core/lib/reed_solomon.c \ + grub-core/osdep/random.c grub-core/osdep/ofpath.c \ + grub-core/osdep/platform.c grub-core/osdep/platform_unix.c \ + grub-core/osdep/compress.c util/editenv.c \ + grub-core/osdep/blocklist.c grub-core/osdep/config.c \ + util/config.c grub-core/kern/emu/hostfs.c \ + grub-core/disk/host.c util/resolve.c \ + grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +@COND_HAVE_EXEC_TRUE@am_grub_mkrescue_OBJECTS = util/grub_mkrescue-grub-mkrescue.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-render-label.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-glue-efi.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-mkimage.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-grub-mkimage32.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-grub-mkimage64.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-grub-install-common.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-setup_bios.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-setup_sparc.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/lib/grub_mkrescue-reed_solomon.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-random.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-ofpath.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-platform.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-platform_unix.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-compress.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-editenv.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-blocklist.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-config.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-config.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/kern/emu/grub_mkrescue-hostfs.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/disk/grub_mkrescue-host.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ util/grub_mkrescue-resolve.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/kern/emu/grub_mkrescue-argp_common.$(OBJEXT) \ +@COND_HAVE_EXEC_TRUE@ grub-core/osdep/grub_mkrescue-init.$(OBJEXT) +nodist_grub_mkrescue_OBJECTS = +grub_mkrescue_OBJECTS = $(am_grub_mkrescue_OBJECTS) \ + $(nodist_grub_mkrescue_OBJECTS) +@COND_HAVE_EXEC_TRUE@grub_mkrescue_DEPENDENCIES = \ +@COND_HAVE_EXEC_TRUE@ $(am__DEPENDENCIES_1) libgrubmods.a \ +@COND_HAVE_EXEC_TRUE@ libgrubgcry.a libgrubkern.a \ +@COND_HAVE_EXEC_TRUE@ grub-core/gnulib/libgnu.a \ +@COND_HAVE_EXEC_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_EXEC_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_EXEC_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_EXEC_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_EXEC_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_EXEC_TRUE@ $(am__DEPENDENCIES_1) +grub_mkrescue_LINK = $(CCLD) $(grub_mkrescue_CFLAGS) $(CFLAGS) \ + $(grub_mkrescue_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_mkstandalone_OBJECTS = \ + util/grub_mkstandalone-grub-mkstandalone.$(OBJEXT) \ + util/grub_mkstandalone-render-label.$(OBJEXT) \ + util/grub_mkstandalone-glue-efi.$(OBJEXT) \ + util/grub_mkstandalone-mkimage.$(OBJEXT) \ + util/grub_mkstandalone-grub-mkimage32.$(OBJEXT) \ + util/grub_mkstandalone-grub-mkimage64.$(OBJEXT) \ + util/grub_mkstandalone-grub-install-common.$(OBJEXT) \ + util/grub_mkstandalone-setup_bios.$(OBJEXT) \ + util/grub_mkstandalone-setup_sparc.$(OBJEXT) \ + grub-core/lib/grub_mkstandalone-reed_solomon.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-random.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-ofpath.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-platform.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-platform_unix.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-compress.$(OBJEXT) \ + util/grub_mkstandalone-editenv.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-blocklist.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-config.$(OBJEXT) \ + util/grub_mkstandalone-config.$(OBJEXT) \ + grub-core/kern/emu/grub_mkstandalone-hostfs.$(OBJEXT) \ + grub-core/disk/grub_mkstandalone-host.$(OBJEXT) \ + util/grub_mkstandalone-resolve.$(OBJEXT) \ + grub-core/kern/emu/grub_mkstandalone-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_mkstandalone-init.$(OBJEXT) +nodist_grub_mkstandalone_OBJECTS = +grub_mkstandalone_OBJECTS = $(am_grub_mkstandalone_OBJECTS) \ + $(nodist_grub_mkstandalone_OBJECTS) +grub_mkstandalone_DEPENDENCIES = $(am__DEPENDENCIES_1) libgrubmods.a \ + libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_mkstandalone_LINK = $(CCLD) $(grub_mkstandalone_CFLAGS) $(CFLAGS) \ + $(grub_mkstandalone_LDFLAGS) $(LDFLAGS) -o $@ +am__grub_mount_SOURCES_DIST = util/grub-mount.c \ + grub-core/kern/emu/hostfs.c grub-core/disk/host.c \ + grub-core/osdep/init.c +@COND_GRUB_MOUNT_TRUE@am_grub_mount_OBJECTS = \ +@COND_GRUB_MOUNT_TRUE@ util/grub_mount-grub-mount.$(OBJEXT) \ +@COND_GRUB_MOUNT_TRUE@ grub-core/kern/emu/grub_mount-hostfs.$(OBJEXT) \ +@COND_GRUB_MOUNT_TRUE@ grub-core/disk/grub_mount-host.$(OBJEXT) \ +@COND_GRUB_MOUNT_TRUE@ grub-core/osdep/grub_mount-init.$(OBJEXT) +@COND_GRUB_MOUNT_TRUE@nodist_grub_mount_OBJECTS = \ +@COND_GRUB_MOUNT_TRUE@ grub_mount-grub_fstest_init.$(OBJEXT) +grub_mount_OBJECTS = $(am_grub_mount_OBJECTS) \ + $(nodist_grub_mount_OBJECTS) +@COND_GRUB_MOUNT_TRUE@grub_mount_DEPENDENCIES = libgrubmods.a \ +@COND_GRUB_MOUNT_TRUE@ libgrubgcry.a libgrubkern.a \ +@COND_GRUB_MOUNT_TRUE@ grub-core/gnulib/libgnu.a \ +@COND_GRUB_MOUNT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MOUNT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MOUNT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MOUNT_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_GRUB_MOUNT_TRUE@ $(am__DEPENDENCIES_1) +grub_mount_LINK = $(CCLD) $(grub_mount_CFLAGS) $(CFLAGS) \ + $(grub_mount_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_ofpathname_OBJECTS = \ + util/ieee1275/grub_ofpathname-grub-ofpathname.$(OBJEXT) \ + grub-core/osdep/grub_ofpathname-ofpath.$(OBJEXT) \ + grub-core/osdep/grub_ofpathname-init.$(OBJEXT) +nodist_grub_ofpathname_OBJECTS = +grub_ofpathname_OBJECTS = $(am_grub_ofpathname_OBJECTS) \ + $(nodist_grub_ofpathname_OBJECTS) +grub_ofpathname_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_ofpathname_LINK = $(CCLD) $(grub_ofpathname_CFLAGS) $(CFLAGS) \ + $(grub_ofpathname_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_probe_OBJECTS = util/grub_probe-grub-probe.$(OBJEXT) \ + util/grub_probe-probe.$(OBJEXT) \ + grub-core/osdep/grub_probe-ofpath.$(OBJEXT) \ + grub-core/kern/emu/grub_probe-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_probe-init.$(OBJEXT) +nodist_grub_probe_OBJECTS = +grub_probe_OBJECTS = $(am_grub_probe_OBJECTS) \ + $(nodist_grub_probe_OBJECTS) +grub_probe_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_probe_LINK = $(CCLD) $(grub_probe_CFLAGS) $(CFLAGS) \ + $(grub_probe_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_render_label_OBJECTS = \ + util/grub_render_label-grub-render-label.$(OBJEXT) \ + util/grub_render_label-render-label.$(OBJEXT) \ + grub-core/kern/emu/grub_render_label-argp_common.$(OBJEXT) \ + grub-core/kern/emu/grub_render_label-hostfs.$(OBJEXT) \ + grub-core/disk/grub_render_label-host.$(OBJEXT) \ + grub-core/osdep/grub_render_label-init.$(OBJEXT) +nodist_grub_render_label_OBJECTS = +grub_render_label_OBJECTS = $(am_grub_render_label_OBJECTS) \ + $(nodist_grub_render_label_OBJECTS) +grub_render_label_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_render_label_LINK = $(CCLD) $(grub_render_label_CFLAGS) $(CFLAGS) \ + $(grub_render_label_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_script_check_OBJECTS = \ + util/grub_script_check-grub-script-check.$(OBJEXT) \ + grub-core/kern/emu/grub_script_check-argp_common.$(OBJEXT) \ + grub-core/osdep/grub_script_check-init.$(OBJEXT) +nodist_grub_script_check_OBJECTS = +grub_script_check_OBJECTS = $(am_grub_script_check_OBJECTS) \ + $(nodist_grub_script_check_OBJECTS) +grub_script_check_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_script_check_LINK = $(CCLD) $(grub_script_check_CFLAGS) $(CFLAGS) \ + $(grub_script_check_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_sparc64_setup_OBJECTS = \ + util/grub_sparc64_setup-grub-setup.$(OBJEXT) \ + util/grub_sparc64_setup-setup_sparc.$(OBJEXT) \ + grub-core/kern/emu/grub_sparc64_setup-argp_common.$(OBJEXT) \ + grub-core/lib/grub_sparc64_setup-reed_solomon.$(OBJEXT) \ + grub-core/osdep/grub_sparc64_setup-ofpath.$(OBJEXT) \ + grub-core/osdep/grub_sparc64_setup-blocklist.$(OBJEXT) \ + grub-core/osdep/grub_sparc64_setup-init.$(OBJEXT) +nodist_grub_sparc64_setup_OBJECTS = +grub_sparc64_setup_OBJECTS = $(am_grub_sparc64_setup_OBJECTS) \ + $(nodist_grub_sparc64_setup_OBJECTS) +grub_sparc64_setup_DEPENDENCIES = libgrubmods.a libgrubkern.a \ + libgrubgcry.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +grub_sparc64_setup_LINK = $(CCLD) $(grub_sparc64_setup_CFLAGS) \ + $(CFLAGS) $(grub_sparc64_setup_LDFLAGS) $(LDFLAGS) -o $@ +am_grub_syslinux2cfg_OBJECTS = \ + util/grub_syslinux2cfg-grub-syslinux2cfg.$(OBJEXT) \ + grub-core/lib/grub_syslinux2cfg-syslinux_parse.$(OBJEXT) \ + grub-core/lib/grub_syslinux2cfg-getline.$(OBJEXT) \ + grub-core/osdep/grub_syslinux2cfg-init.$(OBJEXT) \ + grub-core/kern/emu/grub_syslinux2cfg-hostfs.$(OBJEXT) \ + grub-core/disk/grub_syslinux2cfg-host.$(OBJEXT) \ + grub-core/kern/emu/grub_syslinux2cfg-argp_common.$(OBJEXT) +nodist_grub_syslinux2cfg_OBJECTS = +grub_syslinux2cfg_OBJECTS = $(am_grub_syslinux2cfg_OBJECTS) \ + $(nodist_grub_syslinux2cfg_OBJECTS) +grub_syslinux2cfg_DEPENDENCIES = libgrubmods.a libgrubgcry.a \ + libgrubkern.a grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_syslinux2cfg_LINK = $(CCLD) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) \ + $(grub_syslinux2cfg_LDFLAGS) $(LDFLAGS) -o $@ +am_printf_test_OBJECTS = tests/printf_test-printf_unit_test.$(OBJEXT) \ + tests/lib/printf_test-unit_test.$(OBJEXT) \ + grub-core/kern/printf_test-list.$(OBJEXT) \ + grub-core/kern/printf_test-misc.$(OBJEXT) \ + grub-core/tests/lib/printf_test-test.$(OBJEXT) +nodist_printf_test_OBJECTS = +printf_test_OBJECTS = $(am_printf_test_OBJECTS) \ + $(nodist_printf_test_OBJECTS) +printf_test_DEPENDENCIES = libgrubmods.a libgrubgcry.a libgrubkern.a \ + grub-core/gnulib/libgnu.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +printf_test_LINK = $(CCLD) $(printf_test_CFLAGS) $(CFLAGS) \ + $(printf_test_LDFLAGS) $(LDFLAGS) -o $@ +am__priority_queue_unit_test_SOURCES_DIST = \ + tests/priority_queue_unit_test.cc tests/lib/unit_test.c \ + grub-core/kern/list.c grub-core/kern/misc.c \ + grub-core/tests/lib/test.c grub-core/lib/priority_queue.c +@COND_HAVE_CXX_TRUE@am_priority_queue_unit_test_OBJECTS = tests/priority_queue_unit_test-priority_queue_unit_test.$(OBJEXT) \ +@COND_HAVE_CXX_TRUE@ tests/lib/priority_queue_unit_test-unit_test.$(OBJEXT) \ +@COND_HAVE_CXX_TRUE@ grub-core/kern/priority_queue_unit_test-list.$(OBJEXT) \ +@COND_HAVE_CXX_TRUE@ grub-core/kern/priority_queue_unit_test-misc.$(OBJEXT) \ +@COND_HAVE_CXX_TRUE@ grub-core/tests/lib/priority_queue_unit_test-test.$(OBJEXT) \ +@COND_HAVE_CXX_TRUE@ grub-core/lib/priority_queue_unit_test-priority_queue.$(OBJEXT) +nodist_priority_queue_unit_test_OBJECTS = +priority_queue_unit_test_OBJECTS = \ + $(am_priority_queue_unit_test_OBJECTS) \ + $(nodist_priority_queue_unit_test_OBJECTS) +@COND_HAVE_CXX_TRUE@priority_queue_unit_test_DEPENDENCIES = \ +@COND_HAVE_CXX_TRUE@ libgrubmods.a libgrubgcry.a libgrubkern.a \ +@COND_HAVE_CXX_TRUE@ grub-core/gnulib/libgnu.a \ +@COND_HAVE_CXX_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_CXX_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_CXX_TRUE@ $(am__DEPENDENCIES_1) \ +@COND_HAVE_CXX_TRUE@ $(am__DEPENDENCIES_1) +priority_queue_unit_test_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ + $(priority_queue_unit_test_LDFLAGS) $(LDFLAGS) -o $@ +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +SCRIPTS = $(bin_SCRIPTS) $(grubconf_SCRIPTS) $(noinst_SCRIPTS) \ + $(platform_SCRIPTS) $(sbin_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_@AM_V@) +am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) +am__v_CXX_0 = @echo " CXX " $@; +am__v_CXX_1 = +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) +am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) +am__v_CXXLD_0 = @echo " CXXLD " $@; +am__v_CXXLD_1 = +SOURCES = $(libgrubgcry_a_SOURCES) $(nodist_libgrubgcry_a_SOURCES) \ + $(libgrubkern_a_SOURCES) $(nodist_libgrubkern_a_SOURCES) \ + $(libgrubmods_a_SOURCES) $(nodist_libgrubmods_a_SOURCES) \ + $(cmp_test_SOURCES) $(nodist_cmp_test_SOURCES) \ + $(date_test_SOURCES) $(nodist_date_test_SOURCES) \ + $(example_unit_test_SOURCES) \ + $(nodist_example_unit_test_SOURCES) $(grub_bios_setup_SOURCES) \ + $(nodist_grub_bios_setup_SOURCES) $(grub_editenv_SOURCES) \ + $(nodist_grub_editenv_SOURCES) $(grub_file_SOURCES) \ + $(nodist_grub_file_SOURCES) $(grub_fstest_SOURCES) \ + $(nodist_grub_fstest_SOURCES) $(grub_glue_efi_SOURCES) \ + $(nodist_grub_glue_efi_SOURCES) $(grub_install_SOURCES) \ + $(nodist_grub_install_SOURCES) $(grub_macbless_SOURCES) \ + $(nodist_grub_macbless_SOURCES) $(grub_macho2img_SOURCES) \ + $(nodist_grub_macho2img_SOURCES) $(grub_menulst2cfg_SOURCES) \ + $(nodist_grub_menulst2cfg_SOURCES) $(grub_mkfont_SOURCES) \ + $(nodist_grub_mkfont_SOURCES) $(grub_mkimage_SOURCES) \ + $(nodist_grub_mkimage_SOURCES) $(grub_mklayout_SOURCES) \ + $(nodist_grub_mklayout_SOURCES) $(grub_mknetdir_SOURCES) \ + $(nodist_grub_mknetdir_SOURCES) \ + $(grub_mkpasswd_pbkdf2_SOURCES) \ + $(nodist_grub_mkpasswd_pbkdf2_SOURCES) \ + $(grub_mkrelpath_SOURCES) $(nodist_grub_mkrelpath_SOURCES) \ + $(grub_mkrescue_SOURCES) $(nodist_grub_mkrescue_SOURCES) \ + $(grub_mkstandalone_SOURCES) \ + $(nodist_grub_mkstandalone_SOURCES) $(grub_mount_SOURCES) \ + $(nodist_grub_mount_SOURCES) $(grub_ofpathname_SOURCES) \ + $(nodist_grub_ofpathname_SOURCES) $(grub_probe_SOURCES) \ + $(nodist_grub_probe_SOURCES) $(grub_render_label_SOURCES) \ + $(nodist_grub_render_label_SOURCES) \ + $(grub_script_check_SOURCES) \ + $(nodist_grub_script_check_SOURCES) \ + $(grub_sparc64_setup_SOURCES) \ + $(nodist_grub_sparc64_setup_SOURCES) \ + $(grub_syslinux2cfg_SOURCES) \ + $(nodist_grub_syslinux2cfg_SOURCES) $(printf_test_SOURCES) \ + $(nodist_printf_test_SOURCES) \ + $(priority_queue_unit_test_SOURCES) \ + $(nodist_priority_queue_unit_test_SOURCES) +DIST_SOURCES = $(libgrubgcry_a_SOURCES) $(libgrubkern_a_SOURCES) \ + $(libgrubmods_a_SOURCES) $(cmp_test_SOURCES) \ + $(date_test_SOURCES) $(example_unit_test_SOURCES) \ + $(grub_bios_setup_SOURCES) $(grub_editenv_SOURCES) \ + $(grub_file_SOURCES) $(grub_fstest_SOURCES) \ + $(grub_glue_efi_SOURCES) $(grub_install_SOURCES) \ + $(grub_macbless_SOURCES) $(am__grub_macho2img_SOURCES_DIST) \ + $(grub_menulst2cfg_SOURCES) $(am__grub_mkfont_SOURCES_DIST) \ + $(grub_mkimage_SOURCES) $(grub_mklayout_SOURCES) \ + $(grub_mknetdir_SOURCES) $(grub_mkpasswd_pbkdf2_SOURCES) \ + $(grub_mkrelpath_SOURCES) $(am__grub_mkrescue_SOURCES_DIST) \ + $(grub_mkstandalone_SOURCES) $(am__grub_mount_SOURCES_DIST) \ + $(grub_ofpathname_SOURCES) $(grub_probe_SOURCES) \ + $(grub_render_label_SOURCES) $(grub_script_check_SOURCES) \ + $(grub_sparc64_setup_SOURCES) $(grub_syslinux2cfg_SOURCES) \ + $(printf_test_SOURCES) \ + $(am__priority_queue_unit_test_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +man8dir = $(mandir)/man8 +NROFF = nroff +MANS = $(man_MANS) +am__dist_noinst_DATA_DIST = grub-core/kern/disk_common.c \ + grub-core/osdep/unix/relpath.c grub-core/osdep/aros/relpath.c \ + grub-core/osdep/windows/relpath.c \ + grub-core/lib/libgcrypt-grub/cipher/ChangeLog \ + grub-core/osdep/aros/config.c grub-core/osdep/windows/config.c \ + grub-core/osdep/unix/config.c util/grub-mkimagexx.c \ + util/setup.c grub-core/osdep/generic/blocklist.c \ + grub-core/osdep/linux/blocklist.c \ + grub-core/osdep/windows/blocklist.c \ + grub-core/osdep/unix/compress.c \ + grub-core/osdep/basic/compress.c \ + grub-core/osdep/linux/platform.c \ + grub-core/osdep/windows/platform.c \ + grub-core/osdep/basic/platform.c \ + grub-core/osdep/basic/no_platform.c \ + grub-core/osdep/unix/platform.c util/grub.d/00_header.in \ + util/grub.d/10_windows.in util/grub.d/10_hurd.in \ + util/grub.d/10_kfreebsd.in util/grub.d/10_illumos.in \ + util/grub.d/10_netbsd.in util/grub.d/10_linux.in \ + util/grub.d/10_xnu.in util/grub.d/20_linux_xen.in \ + util/grub.d/30_os-prober.in util/grub.d/40_custom.in \ + util/grub.d/41_custom.in util/grub-mkconfig.in \ + util/grub-set-default.in util/grub-reboot.in \ + util/grub-mkconfig_lib.in util/grub-kbdcomp.in \ + tests/util/grub-shell.in tests/util/grub-shell-tester.in \ + tests/util/grub-fs-tester.in tests/ext234_test.in \ + tests/squashfs_test.in tests/iso9660_test.in \ + tests/hfsplus_test.in tests/ntfs_test.in \ + tests/reiserfs_test.in tests/fat_test.in tests/minixfs_test.in \ + tests/xfs_test.in tests/nilfs2_test.in tests/romfs_test.in \ + tests/exfat_test.in tests/tar_test.in tests/udf_test.in \ + tests/hfs_test.in tests/jfs_test.in tests/btrfs_test.in \ + tests/zfs_test.in tests/cpio_test.in \ + tests/example_scripted_test.in tests/gettext_strings_test.in \ + tests/pata_test.in tests/ahci_test.in tests/uhci_test.in \ + tests/ohci_test.in tests/ehci_test.in \ + tests/example_grub_script_test.in tests/grub_script_eval.in \ + tests/grub_script_test.in tests/grub_script_echo1.in \ + tests/grub_script_leading_whitespace.in \ + tests/grub_script_echo_keywords.in tests/grub_script_vars1.in \ + tests/grub_script_for1.in tests/grub_script_while1.in \ + tests/grub_script_if.in tests/grub_script_blanklines.in \ + tests/grub_script_final_semicolon.in \ + tests/grub_script_dollar.in tests/grub_script_comments.in \ + tests/grub_script_functions.in tests/grub_script_break.in \ + tests/grub_script_continue.in tests/grub_script_shift.in \ + tests/grub_script_blockarg.in tests/grub_script_setparams.in \ + tests/grub_script_return.in tests/grub_cmd_regexp.in \ + tests/grub_cmd_date.in tests/grub_cmd_set_date.in \ + tests/grub_cmd_sleep.in tests/grub_script_expansion.in \ + tests/grub_script_not.in tests/grub_script_no_commands.in \ + tests/partmap_test.in tests/hddboot_test.in \ + tests/fddboot_test.in tests/cdboot_test.in \ + tests/netboot_test.in tests/pseries_test.in \ + tests/core_compress_test.in tests/xzcompress_test.in \ + tests/gzcompress_test.in tests/lzocompress_test.in \ + tests/grub_cmd_echo.in tests/help_test.in \ + tests/grub_script_gettext.in tests/grub_script_escape_comma.in \ + tests/grub_script_strcmp.in tests/test_sha512sum.in \ + tests/test_unset.in tests/grub_func_test.in \ + tests/grub_cmd_tr.in tests/file_filter_test.in \ + tests/grub_cmd_test.in tests/syslinux_test.in +DATA = $(dist_grubconf_DATA) $(dist_noinst_DATA) $(noinst_DATA) \ + $(pkgdata_DATA) $(platform_DATA) $(starfield_DATA) +HEADERS = $(nodist_platform_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope check recheck distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config-util.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DIST_SUBDIRS = grub-core/gnulib . grub-core po docs \ + util/bash-completion.d +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.util.am \ + $(srcdir)/config-util.h.in $(srcdir)/config.h.in \ + $(srcdir)/stamp-h.in $(top_srcdir)/build-aux/compile \ + $(top_srcdir)/build-aux/config.guess \ + $(top_srcdir)/build-aux/config.rpath \ + $(top_srcdir)/build-aux/config.sub \ + $(top_srcdir)/build-aux/depcomp \ + $(top_srcdir)/build-aux/install-sh \ + $(top_srcdir)/build-aux/missing \ + $(top_srcdir)/build-aux/test-driver \ + $(top_srcdir)/conf/Makefile.common \ + $(top_srcdir)/conf/Makefile.extra-dist ABOUT-NLS AUTHORS \ + COPYING ChangeLog INSTALL NEWS README THANKS TODO \ + build-aux/compile build-aux/config.guess \ + build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ + build-aux/install-sh build-aux/mdate-sh build-aux/missing \ + build-aux/texinfo.tex +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +pkglibexecdir = @pkglibexecdir@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +BOOT_TIME_STATS = @BOOT_TIME_STATS@ +BSS_START_SYMBOL = @BSS_START_SYMBOL@ +BUILD_CC = @BUILD_CC@ +BUILD_CFLAGS = @BUILD_CFLAGS@ +BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ $(CPPFLAGS_DEFAULT) +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_FREETYPE = @BUILD_FREETYPE@ +BUILD_LDFLAGS = @BUILD_LDFLAGS@ +BUILD_LIBM = @BUILD_LIBM@ +BUILD_SIZEOF_LONG = @BUILD_SIZEOF_LONG@ +BUILD_SIZEOF_VOID_P = @BUILD_SIZEOF_VOID_P@ +BUILD_WORDS_BIGENDIAN = @BUILD_WORDS_BIGENDIAN@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CMP = @CMP@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = .deps-util +DISK_CACHE_STATS = @DISK_CACHE_STATS@ +DJVU_FONT_SOURCE = @DJVU_FONT_SOURCE@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EFIEMU64_LINK_FORMAT = @EFIEMU64_LINK_FORMAT@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +END_SYMBOL = @END_SYMBOL@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FLOAT_H = @FLOAT_H@ +FNMATCH_H = @FNMATCH_H@ +FONT_SOURCE = @FONT_SOURCE@ +FREETYPE = @FREETYPE@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GRUB_BOOT_MACHINE_LINK_ADDR = @GRUB_BOOT_MACHINE_LINK_ADDR@ +GRUB_PLATFORM = @GRUB_PLATFORM@ +GRUB_TARGET_CPU = @GRUB_TARGET_CPU@ +HAVE_ASM_USCORE = @HAVE_ASM_USCORE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FONT_SOURCE = @HAVE_FONT_SOURCE@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HOST_CC = @HOST_CC@ +HOST_CCASFLAGS = @HOST_CCASFLAGS@ +HOST_CFLAGS = @HOST_CFLAGS@ +HOST_CPPFLAGS = @HOST_CPPFLAGS@ +HOST_LDFLAGS = @HOST_LDFLAGS@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBDEVMAPPER = @LIBDEVMAPPER@ +LIBGEOM = @LIBGEOM@ +LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ +LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBLZMA = @LIBLZMA@ +LIBNVPAIR = @LIBNVPAIR@ +LIBOBJS = @LIBOBJS@ +LIBPCIACCESS = @LIBPCIACCESS@ +LIBS = @LIBS@ +LIBSDL = @LIBSDL@ +LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ +LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ +LIBUTIL = @LIBUTIL@ +LIBZFS = @LIBZFS@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDALIGN_H = @STDALIGN_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYSEXITS_H = @SYSEXITS_H@ +TARGET_APPLE_LINKER = @TARGET_APPLE_LINKER@ +TARGET_CC = @TARGET_CC@ +TARGET_CCAS = @TARGET_CCAS@ +TARGET_CCASFLAGS = @TARGET_CCASFLAGS@ +TARGET_CC_VERSION = @TARGET_CC_VERSION@ +TARGET_CFLAGS = @TARGET_CFLAGS@ +TARGET_CPP = @TARGET_CPP@ +TARGET_CPPFLAGS = @TARGET_CPPFLAGS@ +TARGET_DECOMPRESSOR_LINK_ADDR = @TARGET_DECOMPRESSOR_LINK_ADDR@ +TARGET_IMG_BASE_LDOPT = @TARGET_IMG_BASE_LDOPT@ +TARGET_IMG_CFLAGS = @TARGET_IMG_CFLAGS@ +TARGET_IMG_LDFLAGS = @TARGET_IMG_LDFLAGS@ +TARGET_LDFLAGS = @TARGET_LDFLAGS@ +TARGET_LDFLAGS_OLDMAGIC = @TARGET_LDFLAGS_OLDMAGIC@ +TARGET_LINK_ADDR = @TARGET_LINK_ADDR@ +TARGET_MODULE_FORMAT = @TARGET_MODULE_FORMAT@ +TARGET_NM = @TARGET_NM@ +TARGET_NMFLAGS_DEFINED_ONLY = @TARGET_NMFLAGS_DEFINED_ONLY@ +TARGET_NMFLAGS_MINUS_P = @TARGET_NMFLAGS_MINUS_P@ +TARGET_OBJ2ELF = @TARGET_OBJ2ELF@ +TARGET_OBJCONV = @TARGET_OBJCONV@ +TARGET_OBJCOPY = @TARGET_OBJCOPY@ +TARGET_RANLIB = @TARGET_RANLIB@ +TARGET_STRIP = @TARGET_STRIP@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_FREETYPE = @ac_ct_FREETYPE@ +ac_ct_TARGET_CC = @ac_ct_TARGET_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +bootdirname = @bootdirname@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_freetype_cflags = @build_freetype_cflags@ +build_freetype_libs = @build_freetype_libs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_efiemu = @enable_efiemu@ +enable_grub_emu_pci = @enable_grub_emu_pci@ +enable_grub_emu_sdl = @enable_grub_emu_sdl@ +enable_grub_mkfont = @enable_grub_mkfont@ +enable_grub_mount = @enable_grub_mount@ +exec_prefix = @exec_prefix@ +freetype_cflags = @freetype_cflags@ +freetype_libs = @freetype_libs@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +grub_bios_setup = @grub_bios_setup@ +grub_editenv = @grub_editenv@ +grub_file = @grub_file@ +grub_glue_efi = @grub_glue_efi@ +grub_install = @grub_install@ +grub_mkconfig = @grub_mkconfig@ +grub_mkfont = @grub_mkfont@ +grub_mkimage = @grub_mkimage@ +grub_mklayout = @grub_mklayout@ +grub_mkpasswd_pbkdf2 = @grub_mkpasswd_pbkdf2@ +grub_mkrelpath = @grub_mkrelpath@ +grub_mkrescue = @grub_mkrescue@ +grub_probe = @grub_probe@ +grub_reboot = @grub_reboot@ +grub_render_label = @grub_render_label@ +grub_script_check = @grub_script_check@ +grub_set_default = @grub_set_default@ +grub_sparc64_setup = @grub_sparc64_setup@ +grubdirname = @grubdirname@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_kernel = @host_kernel@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +platform = @platform@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = subdir-objects -Wno-portability +SUBDIRS = grub-core/gnulib . $(am__append_1) po docs \ + util/bash-completion.d +CFLAGS_PLATFORM = $(am__append_2) $(am__append_3) +@COND_arm_TRUE@@COND_emu_FALSE@LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache + +# Platform specific options +@COND_sparc64_ieee1275_TRUE@LDFLAGS_PLATFORM = -Wl,-melf64_sparc + +# Other options +CPPFLAGS_DEFAULT = -DGRUB_FILE=\"$(subst $(srcdir)/,,$<)\" \ + -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_srcdir)/include -I$(top_builddir)/include \ + -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/ +CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1 +CFLAGS_KERNEL = $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) +CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 +CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx +CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d +CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +CFLAGS_IMAGE = $(CFLAGS_PLATFORM) -fno-builtin +LDFLAGS_IMAGE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S +CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +CFLAGS_PROGRAM = $(CFLAGS_GNULIB) +LDFLAGS_PROGRAM = $(LDFLAGS_GNULIB) +CPPFLAGS_PROGRAM = $(CPPFLAGS_GNULIB) +CCASFLAGS_PROGRAM = $(CCASFLAGS_GNULIB) +CFLAGS_LIBRARY = +CPPFLAGS_LIBRARY = +CCASFLAGS_LIBRARY = + +# Other variables +grubconfdir = $(sysconfdir)/grub.d +platformdir = $(pkglibdir)/$(target_cpu)-$(platform) +starfielddir = $(pkgdatadir)/themes/starfield +CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion +CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/gnulib -I$(top_srcdir)/grub-core/gnulib +CFLAGS_POSIX = -fno-builtin +CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap +CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -Wno-redundant-decls -Wno-undef $(CFLAGS_POSIX) +CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap $(CPPFLAGS_POSIX) -D_GCRYPT_IN_LIBGCRYPT=1 -I$(top_srcdir)/include/grub/gcrypt +CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime + +# List file macros for recognizing /interesting/ modules +CPPFLAGS_FS_LIST = -Dgrub_fs_register=FS_LIST_MARKER +CPPFLAGS_VIDEO_LIST = -Dgrub_video_register=VIDEO_LIST_MARKER +CPPFLAGS_PARTMAP_LIST = -Dgrub_partition_map_register=PARTMAP_LIST_MARKER +CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER +CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \ + $(CPPFLAGS_PARTTOOL_LIST) $(CPPFLAGS_PARTMAP_LIST) \ + $(CPPFLAGS_TERMINAL_LIST) $(CPPFLAGS_COMMAND_LIST) + + +# Define these variables to calm down automake +IMG_FILES = +MOD_FILES = +MODULE_FILES = +MARKER_FILES = +KERNEL_HEADER_FILES = +man_MANS = $(am__append_4) $(am__append_11) $(am__append_16) \ + $(am__append_19) $(am__append_25) $(am__append_30) \ + $(am__append_38) $(am__append_43) +noinst_DATA = +pkgdata_DATA = $(am__append_93) grub-mkconfig_lib +bin_SCRIPTS = grub-kbdcomp +sbin_SCRIPTS = grub-mkconfig grub-set-default grub-reboot +platform_DATA = +check_SCRIPTS = ext234_test squashfs_test iso9660_test hfsplus_test \ + ntfs_test reiserfs_test fat_test minixfs_test xfs_test \ + nilfs2_test romfs_test exfat_test tar_test udf_test hfs_test \ + jfs_test btrfs_test zfs_test cpio_test example_scripted_test \ + gettext_strings_test pata_test ahci_test uhci_test ohci_test \ + ehci_test example_grub_script_test grub_script_eval \ + grub_script_test grub_script_echo1 \ + grub_script_leading_whitespace grub_script_echo_keywords \ + grub_script_vars1 grub_script_for1 grub_script_while1 \ + grub_script_if grub_script_blanklines \ + grub_script_final_semicolon grub_script_dollar \ + grub_script_comments grub_script_functions grub_script_break \ + grub_script_continue grub_script_shift grub_script_blockarg \ + grub_script_setparams grub_script_return grub_cmd_regexp \ + grub_cmd_date grub_cmd_set_date grub_cmd_sleep \ + grub_script_expansion grub_script_not grub_script_no_commands \ + partmap_test hddboot_test fddboot_test cdboot_test \ + netboot_test pseries_test core_compress_test xzcompress_test \ + gzcompress_test lzocompress_test grub_cmd_echo help_test \ + grub_script_gettext grub_script_escape_comma \ + grub_script_strcmp test_sha512sum test_unset grub_func_test \ + grub_cmd_tr file_filter_test grub_cmd_test syslinux_test +dist_grubconf_DATA = util/grub.d/README +noinst_SCRIPTS = grub-mkconfig_lib grub-shell grub-shell-tester \ + grub-fs-tester +grubconf_SCRIPTS = 00_header $(am__append_57) $(am__append_61) \ + $(am__append_65) $(am__append_69) $(am__append_73) \ + $(am__append_77) $(am__append_81) $(am__append_85) \ + 30_os-prober 40_custom 41_custom +noinst_LIBRARIES = libgrubkern.a libgrubmods.a libgrubgcry.a +dist_noinst_DATA = grub-core/kern/disk_common.c \ + grub-core/osdep/unix/relpath.c grub-core/osdep/aros/relpath.c \ + grub-core/osdep/windows/relpath.c \ + grub-core/lib/libgcrypt-grub/cipher/ChangeLog \ + grub-core/osdep/aros/config.c grub-core/osdep/windows/config.c \ + grub-core/osdep/unix/config.c util/grub-mkimagexx.c \ + $(am__append_13) $(am__append_21) $(am__append_27) \ + util/setup.c grub-core/osdep/generic/blocklist.c \ + grub-core/osdep/linux/blocklist.c \ + grub-core/osdep/windows/blocklist.c $(am__append_40) \ + grub-core/osdep/linux/platform.c \ + grub-core/osdep/windows/platform.c \ + grub-core/osdep/basic/platform.c \ + grub-core/osdep/basic/no_platform.c \ + grub-core/osdep/unix/platform.c $(am__append_49) \ + util/grub.d/00_header.in $(am__append_60) $(am__append_64) \ + $(am__append_68) $(am__append_72) $(am__append_76) \ + $(am__append_80) $(am__append_84) $(am__append_88) \ + util/grub.d/30_os-prober.in util/grub.d/40_custom.in \ + util/grub.d/41_custom.in util/grub-mkconfig.in \ + util/grub-set-default.in util/grub-reboot.in \ + util/grub-mkconfig_lib.in util/grub-kbdcomp.in \ + tests/util/grub-shell.in tests/util/grub-shell-tester.in \ + tests/util/grub-fs-tester.in tests/ext234_test.in \ + tests/squashfs_test.in tests/iso9660_test.in \ + tests/hfsplus_test.in tests/ntfs_test.in \ + tests/reiserfs_test.in tests/fat_test.in tests/minixfs_test.in \ + tests/xfs_test.in tests/nilfs2_test.in tests/romfs_test.in \ + tests/exfat_test.in tests/tar_test.in tests/udf_test.in \ + tests/hfs_test.in tests/jfs_test.in tests/btrfs_test.in \ + tests/zfs_test.in tests/cpio_test.in \ + tests/example_scripted_test.in tests/gettext_strings_test.in \ + tests/pata_test.in tests/ahci_test.in tests/uhci_test.in \ + tests/ohci_test.in tests/ehci_test.in \ + tests/example_grub_script_test.in tests/grub_script_eval.in \ + tests/grub_script_test.in tests/grub_script_echo1.in \ + tests/grub_script_leading_whitespace.in \ + tests/grub_script_echo_keywords.in tests/grub_script_vars1.in \ + tests/grub_script_for1.in tests/grub_script_while1.in \ + tests/grub_script_if.in tests/grub_script_blanklines.in \ + tests/grub_script_final_semicolon.in \ + tests/grub_script_dollar.in tests/grub_script_comments.in \ + tests/grub_script_functions.in tests/grub_script_break.in \ + tests/grub_script_continue.in tests/grub_script_shift.in \ + tests/grub_script_blockarg.in tests/grub_script_setparams.in \ + tests/grub_script_return.in tests/grub_cmd_regexp.in \ + tests/grub_cmd_date.in tests/grub_cmd_set_date.in \ + tests/grub_cmd_sleep.in tests/grub_script_expansion.in \ + tests/grub_script_not.in tests/grub_script_no_commands.in \ + tests/partmap_test.in tests/hddboot_test.in \ + tests/fddboot_test.in tests/cdboot_test.in \ + tests/netboot_test.in tests/pseries_test.in \ + tests/core_compress_test.in tests/xzcompress_test.in \ + tests/gzcompress_test.in tests/lzocompress_test.in \ + tests/grub_cmd_echo.in tests/help_test.in \ + tests/grub_script_gettext.in tests/grub_script_escape_comma.in \ + tests/grub_script_strcmp.in tests/test_sha512sum.in \ + tests/test_unset.in tests/grub_func_test.in \ + tests/grub_cmd_tr.in tests/file_filter_test.in \ + tests/grub_cmd_test.in tests/syslinux_test.in +platform_SCRIPTS = +EXTRA_DIST = autogen.sh geninit.sh gentpl.py Makefile.util.def \ + Makefile.utilgcry.def asm-tests unicode util/import_gcry.py \ + util/import_unicode.py docs/man docs/autoiso.cfg docs/grub.cfg \ + docs/osdetect.cfg conf/i386-cygwin-img-ld.sc \ + grub-core/Makefile.core.def grub-core/Makefile.gcry.def \ + grub-core/genmoddep.awk grub-core/genmod.sh.in \ + grub-core/gensyminfo.sh.in grub-core/gensymlist.sh \ + grub-core/genemuinit.sh grub-core/genemuinitheader.sh \ + grub-core/gnulib-fix-null-deref.diff \ + grub-core/gnulib-fix-width.diff grub-core/gnulib-no-abort.diff \ + grub-core/gnulib-no-gets.diff grub-core/lib/libgcrypt \ + grub-core/lib/libgcrypt-grub/mpi/generic $(shell find \ + $(top_srcdir)/include -name '*.h') $(shell find \ + $(top_srcdir)/grub-core/lib -name '*.h') \ + grub-core/efiemu/runtime/config.h grub-core/lib/LzmaDec.c \ + grub-core/fs/cpio_common.c BUGS util/i386/efi/grub-dumpdevtree \ + util/spkmodem-recv.c util/import_gcrypth.sed util/bin2h.c \ + util/grub-gen-asciih.c util/grub-gen-widthspec.c \ + util/grub-module-verifier.c util/grub-module-verifier32.c \ + util/grub-module-verifier64.c util/grub-module-verifierXX.c \ + util/grub-pe2elf.c m4/gnulib-cache.m4 m4/glibc2.m4 \ + m4/gnulib-tool.m4 m4/intdiv0.m4 m4/intl.m4 m4/intldir.m4 \ + m4/intmax.m4 m4/inttypes-pri.m4 m4/lcmessage.m4 m4/lock.m4 \ + m4/printf-posix.m4 m4/threadlib.m4 m4/uintmax_t.m4 \ + m4/visibility.m4 m4/math_h.m4 grub-core/osdep/apple/hostdisk.c \ + grub-core/osdep/aros/hostdisk.c \ + grub-core/osdep/basic/hostdisk.c \ + grub-core/osdep/bsd/hostdisk.c \ + grub-core/osdep/freebsd/hostdisk.c \ + grub-core/osdep/hurd/hostdisk.c \ + grub-core/osdep/linux/hostdisk.c \ + grub-core/osdep/windows/hostdisk.c \ + grub-core/osdep/sun/hostdisk.c \ + grub-core/osdep/haiku/hostdisk.c grub-core/osdep/basic/init.c \ + grub-core/osdep/windows/init.c grub-core/osdep/apple/getroot.c \ + grub-core/osdep/aros/getroot.c grub-core/osdep/basic/getroot.c \ + grub-core/osdep/bsd/getroot.c \ + grub-core/osdep/windows/getroot.c \ + grub-core/osdep/freebsd/getroot.c \ + grub-core/osdep/hurd/getroot.c grub-core/osdep/linux/getroot.c \ + grub-core/osdep/sun/getroot.c grub-core/osdep/haiku/getroot.c \ + grub-core/osdep/basic/random.c grub-core/osdep/basic/ofpath.c \ + grub-core/osdep/unix/password.c grub-core/osdep/unix/random.c \ + grub-core/osdep/unix/sleep.c grub-core/osdep/linux/ofpath.c \ + grub-core/osdep/windows/password.c \ + grub-core/osdep/windows/random.c \ + grub-core/osdep/windows/sleep.c \ + tests/dfly-mbr-mbexample.mbr.img.gz \ + tests/dfly-mbr-mbexample.dfly.img.gz coreboot.cfg \ + tests/file_filter/file tests/file_filter/file.gz \ + tests/file_filter/file.gz.sig tests/file_filter/file.lzop \ + tests/file_filter/file.lzop.sig tests/file_filter/file.xz \ + tests/file_filter/file.xz.sig tests/file_filter/keys \ + tests/file_filter/keys.pub tests/file_filter/test.cfg \ + tests/syslinux/ubuntu10.04/isolinux/prompt.cfg \ + tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg \ + tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg \ + tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg \ + tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg \ + tests/syslinux/ubuntu10.04/isolinux/txt.cfg \ + tests/syslinux/ubuntu10.04/isolinux/menu.cfg \ + tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg \ + tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg \ + tests/syslinux/ubuntu10.04/isolinux/po4a.cfg \ + tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg \ + tests/syslinux/ubuntu10.04_grub.cfg.in $(am__append_59) \ + $(am__append_63) $(am__append_67) $(am__append_71) \ + $(am__append_75) $(am__append_79) $(am__append_83) \ + $(am__append_87) po/exclude.pot util/garbage-gen.c \ + $(starfield_theme_files) \ + $(srcdir)/themes/starfield/src/slider_s.xcf \ + $(srcdir)/themes/starfield/src/slider_n.xcf \ + $(srcdir)/themes/starfield/src/slider_c.xcf \ + $(srcdir)/themes/starfield/src/blob_nw.xcf \ + $(srcdir)/themes/starfield/src/bootmenu/center.xcf \ + $(srcdir)/themes/starfield/src/bootmenu/corner.xcf \ + $(srcdir)/themes/starfield/src/bootmenu/side.xcf \ + $(srcdir)/themes/starfield/src/terminalbox/side.xcf \ + $(srcdir)/themes/starfield/src/terminalbox/corner.xcf \ + $(srcdir)/themes/starfield/src/terminalbox/center.xcf \ + grub-core/tests/boot/kbsd.init-i386.S \ + grub-core/tests/boot/kbsd.init-x86_64.S \ + grub-core/tests/boot/kbsd.spec.txt \ + grub-core/tests/boot/kernel-8086.S \ + grub-core/tests/boot/kernel-i386.S \ + grub-core/tests/boot/kfreebsd-aout.cfg \ + grub-core/tests/boot/kfreebsd.cfg \ + grub-core/tests/boot/kfreebsd.init-i386.S \ + grub-core/tests/boot/kfreebsd.init-x86_64.S \ + grub-core/tests/boot/knetbsd.cfg \ + grub-core/tests/boot/kopenbsd.cfg \ + grub-core/tests/boot/kopenbsdlabel.txt \ + grub-core/tests/boot/linux16.cfg \ + grub-core/tests/boot/linux.cfg \ + grub-core/tests/boot/linux.init-i386.S \ + grub-core/tests/boot/linux.init-mips.S \ + grub-core/tests/boot/linux.init-ppc.S \ + grub-core/tests/boot/linux.init-x86_64.S \ + grub-core/tests/boot/linux-ppc.cfg \ + grub-core/tests/boot/multiboot2.cfg \ + grub-core/tests/boot/multiboot.cfg \ + grub-core/tests/boot/ntldr.cfg \ + grub-core/tests/boot/pc-chainloader.cfg \ + grub-core/tests/boot/qemu-shutdown-x86.S linguas.sh ChangeLog \ + ChangeLog-2015 +CLEANFILES = $(nodist_libgrubkern_a_SOURCES) \ + $(nodist_libgrubmods_a_SOURCES) \ + $(nodist_libgrubgcry_a_SOURCES) $(am__append_5) \ + $(nodist_grub_mkimage_SOURCES) $(am__append_6) \ + $(nodist_grub_mkrelpath_SOURCES) $(am__append_7) \ + $(nodist_grub_script_check_SOURCES) $(am__append_8) \ + $(nodist_grub_editenv_SOURCES) $(am__append_9) \ + $(nodist_grub_mkpasswd_pbkdf2_SOURCES) $(am__append_12) \ + $(am__append_15) $(am__append_17) \ + $(nodist_grub_fstest_SOURCES) $(am__append_20) \ + $(am__append_23) $(am__append_26) $(am__append_29) \ + $(am__append_31) $(nodist_grub_probe_SOURCES) $(am__append_32) \ + $(nodist_grub_bios_setup_SOURCES) $(am__append_33) \ + $(nodist_grub_sparc64_setup_SOURCES) $(am__append_34) \ + $(nodist_grub_ofpathname_SOURCES) $(am__append_35) \ + $(nodist_grub_mklayout_SOURCES) $(am__append_36) \ + $(nodist_grub_macbless_SOURCES) $(am__append_39) \ + $(am__append_42) $(am__append_44) \ + $(nodist_grub_mkstandalone_SOURCES) $(am__append_45) \ + $(nodist_grub_install_SOURCES) $(am__append_46) \ + $(nodist_grub_mknetdir_SOURCES) \ + $(nodist_example_unit_test_SOURCES) \ + $(nodist_printf_test_SOURCES) $(nodist_date_test_SOURCES) \ + $(am__append_51) $(nodist_cmp_test_SOURCES) $(am__append_52) \ + $(nodist_grub_menulst2cfg_SOURCES) $(am__append_53) \ + $(nodist_grub_syslinux2cfg_SOURCES) $(am__append_54) \ + $(nodist_grub_glue_efi_SOURCES) $(am__append_55) \ + $(nodist_grub_render_label_SOURCES) $(am__append_56) \ + $(nodist_grub_file_SOURCES) 00_header $(am__append_58) \ + $(am__append_62) $(am__append_66) $(am__append_70) \ + $(am__append_74) $(am__append_78) $(am__append_82) \ + $(am__append_86) 30_os-prober 40_custom 41_custom \ + $(am__append_89) grub-mkconfig $(am__append_90) \ + grub-set-default $(am__append_91) grub-reboot \ + grub-mkconfig_lib $(am__append_92) grub-kbdcomp grub-shell \ + grub-shell-tester grub-fs-tester ext234_test squashfs_test \ + iso9660_test hfsplus_test ntfs_test reiserfs_test fat_test \ + minixfs_test xfs_test nilfs2_test romfs_test exfat_test \ + tar_test udf_test hfs_test jfs_test btrfs_test zfs_test \ + cpio_test example_scripted_test gettext_strings_test pata_test \ + ahci_test uhci_test ohci_test ehci_test \ + example_grub_script_test grub_script_eval grub_script_test \ + grub_script_echo1 grub_script_leading_whitespace \ + grub_script_echo_keywords grub_script_vars1 grub_script_for1 \ + grub_script_while1 grub_script_if grub_script_blanklines \ + grub_script_final_semicolon grub_script_dollar \ + grub_script_comments grub_script_functions grub_script_break \ + grub_script_continue grub_script_shift grub_script_blockarg \ + grub_script_setparams grub_script_return grub_cmd_regexp \ + grub_cmd_date grub_cmd_set_date grub_cmd_sleep \ + grub_script_expansion grub_script_not grub_script_no_commands \ + partmap_test hddboot_test fddboot_test cdboot_test \ + netboot_test pseries_test core_compress_test xzcompress_test \ + gzcompress_test lzocompress_test grub_cmd_echo help_test \ + grub_script_gettext grub_script_escape_comma \ + grub_script_strcmp test_sha512sum test_unset grub_func_test \ + grub_cmd_tr file_filter_test grub_cmd_test syslinux_test \ + grub_script.tab.c grub_script.tab.h grub_script.yy.c \ + grub_script.yy.h libgrub.pp libgrub_a_init.lst \ + libgrub_a_init.c grub_fstest.pp grub_fstest_init.lst \ + grub_fstest_init.c build-grub-mkfont$(BUILD_EXEEXT) \ + garbage-gen$(BUILD_EXEEXT) \ + build-grub-gen-asciih$(BUILD_EXEEXT) \ + build-grub-gen-widthspec$(BUILD_EXEEXT) $(am__append_94) \ + unicode.pf2 ascii.pf2 euro.pf2 ascii.h widthspec.h \ + $(am__append_95) tests/syslinux/ubuntu10.04_grub.cfg +BUILT_SOURCES = $(nodist_libgrubkern_a_SOURCES) \ + $(nodist_libgrubmods_a_SOURCES) \ + $(nodist_libgrubgcry_a_SOURCES) $(nodist_grub_mkimage_SOURCES) \ + $(nodist_grub_mkrelpath_SOURCES) \ + $(nodist_grub_script_check_SOURCES) \ + $(nodist_grub_editenv_SOURCES) \ + $(nodist_grub_mkpasswd_pbkdf2_SOURCES) $(am__append_14) \ + $(nodist_grub_fstest_SOURCES) $(am__append_22) \ + $(am__append_28) $(nodist_grub_probe_SOURCES) \ + $(nodist_grub_bios_setup_SOURCES) \ + $(nodist_grub_sparc64_setup_SOURCES) \ + $(nodist_grub_ofpathname_SOURCES) \ + $(nodist_grub_mklayout_SOURCES) \ + $(nodist_grub_macbless_SOURCES) $(am__append_41) \ + $(nodist_grub_mkstandalone_SOURCES) \ + $(nodist_grub_install_SOURCES) $(nodist_grub_mknetdir_SOURCES) \ + $(nodist_example_unit_test_SOURCES) \ + $(nodist_printf_test_SOURCES) $(nodist_date_test_SOURCES) \ + $(am__append_50) $(nodist_cmp_test_SOURCES) \ + $(nodist_grub_menulst2cfg_SOURCES) \ + $(nodist_grub_syslinux2cfg_SOURCES) \ + $(nodist_grub_glue_efi_SOURCES) \ + $(nodist_grub_render_label_SOURCES) \ + $(nodist_grub_file_SOURCES) +AM_CFLAGS = $(HOST_CFLAGS) +AM_LDFLAGS = $(HOST_LDFLAGS) +AM_CPPFLAGS = $(HOST_CPPFLAGS) $(CPPFLAGS_DEFAULT) +AM_CCASFLAGS = $(HOST_CCASFLAGS) $(CCASFLAGS_DEFAULT) +ACLOCAL_AMFLAGS = -I m4 +libgrubkern_a_SOURCES = util/misc.c grub-core/kern/command.c \ + grub-core/kern/device.c grub-core/kern/disk.c \ + grub-core/lib/disk.c util/getroot.c \ + grub-core/osdep/unix/getroot.c grub-core/osdep/getroot.c \ + grub-core/osdep/devmapper/getroot.c grub-core/osdep/relpath.c \ + grub-core/kern/emu/hostdisk.c \ + grub-core/osdep/devmapper/hostdisk.c \ + grub-core/osdep/hostdisk.c grub-core/osdep/unix/hostdisk.c \ + grub-core/osdep/exec.c grub-core/osdep/sleep.c \ + grub-core/osdep/password.c grub-core/kern/emu/misc.c \ + grub-core/kern/emu/mm.c grub-core/kern/env.c \ + grub-core/kern/err.c grub-core/kern/file.c grub-core/kern/fs.c \ + grub-core/kern/list.c grub-core/kern/misc.c \ + grub-core/kern/partition.c grub-core/lib/crypto.c \ + grub-core/disk/luks.c grub-core/disk/geli.c \ + grub-core/disk/cryptodisk.c grub-core/disk/AFSplitter.c \ + grub-core/lib/pbkdf2.c grub-core/commands/extcmd.c \ + grub-core/lib/arg.c grub-core/disk/ldm.c \ + grub-core/disk/diskfilter.c grub-core/partmap/gpt.c \ + grub-core/partmap/msdos.c grub-core/fs/proc.c \ + grub-core/fs/archelp.c +nodist_libgrubkern_a_SOURCES = +libgrubkern_a_CFLAGS = $(AM_CFLAGS) $(CFLAGS_LIBRARY) $(CFLAGS_GNULIB) +libgrubkern_a_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) \ + $(CPPFLAGS_GNULIB) +libgrubkern_a_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) +libgrubmods_a_SOURCES = grub-core/commands/blocklist.c \ + grub-core/commands/macbless.c grub-core/commands/xnu_uuid.c \ + grub-core/commands/testload.c grub-core/commands/ls.c \ + grub-core/disk/dmraid_nvidia.c grub-core/disk/loopback.c \ + grub-core/disk/lvm.c grub-core/disk/mdraid_linux.c \ + grub-core/disk/mdraid_linux_be.c \ + grub-core/disk/mdraid1x_linux.c grub-core/disk/raid5_recover.c \ + grub-core/disk/raid6_recover.c grub-core/font/font.c \ + grub-core/gfxmenu/font.c grub-core/normal/charset.c \ + grub-core/video/fb/fbblit.c grub-core/video/fb/fbutil.c \ + grub-core/video/fb/fbfill.c grub-core/video/fb/video_fb.c \ + grub-core/video/video.c grub-core/video/capture.c \ + grub-core/video/colors.c grub-core/unidata.c \ + grub-core/io/bufio.c grub-core/fs/affs.c grub-core/fs/afs.c \ + grub-core/fs/bfs.c grub-core/fs/btrfs.c grub-core/fs/cbfs.c \ + grub-core/fs/cpio.c grub-core/fs/cpio_be.c grub-core/fs/odc.c \ + grub-core/fs/newc.c grub-core/fs/ext2.c grub-core/fs/fat.c \ + grub-core/fs/exfat.c grub-core/fs/fshelp.c grub-core/fs/hfs.c \ + grub-core/fs/hfsplus.c grub-core/fs/hfspluscomp.c \ + grub-core/fs/iso9660.c grub-core/fs/jfs.c grub-core/fs/minix.c \ + grub-core/fs/minix2.c grub-core/fs/minix3.c \ + grub-core/fs/minix_be.c grub-core/fs/minix2_be.c \ + grub-core/fs/minix3_be.c grub-core/fs/nilfs2.c \ + grub-core/fs/ntfs.c grub-core/fs/ntfscomp.c \ + grub-core/fs/reiserfs.c grub-core/fs/romfs.c \ + grub-core/fs/sfs.c grub-core/fs/squash4.c grub-core/fs/tar.c \ + grub-core/fs/udf.c grub-core/fs/ufs2.c grub-core/fs/ufs.c \ + grub-core/fs/ufs_be.c grub-core/fs/xfs.c \ + grub-core/fs/zfs/zfscrypt.c grub-core/fs/zfs/zfs.c \ + grub-core/fs/zfs/zfsinfo.c grub-core/fs/zfs/zfs_lzjb.c \ + grub-core/fs/zfs/zfs_lz4.c grub-core/fs/zfs/zfs_sha256.c \ + grub-core/fs/zfs/zfs_fletcher.c grub-core/lib/envblk.c \ + grub-core/lib/hexdump.c grub-core/lib/LzFind.c \ + grub-core/lib/LzmaEnc.c grub-core/lib/crc.c \ + grub-core/lib/adler32.c grub-core/lib/crc64.c \ + grub-core/normal/datetime.c grub-core/normal/misc.c \ + grub-core/partmap/acorn.c grub-core/partmap/amiga.c \ + grub-core/partmap/apple.c grub-core/partmap/sun.c \ + grub-core/partmap/plan.c grub-core/partmap/dvh.c \ + grub-core/partmap/sunpc.c grub-core/partmap/bsdlabel.c \ + grub-core/partmap/dfly.c grub-core/script/function.c \ + grub-core/script/lexer.c grub-core/script/main.c \ + grub-core/script/script.c grub-core/script/argv.c \ + grub-core/io/gzio.c grub-core/io/xzio.c grub-core/io/lzopio.c \ + grub-core/kern/ia64/dl_helper.c grub-core/kern/arm/dl_helper.c \ + grub-core/kern/arm64/dl_helper.c \ + grub-core/lib/minilzo/minilzo.c \ + grub-core/lib/xzembed/xz_dec_bcj.c \ + grub-core/lib/xzembed/xz_dec_lzma2.c \ + grub-core/lib/xzembed/xz_dec_stream.c +nodist_libgrubmods_a_SOURCES = grub_script.tab.c grub_script.yy.c \ + libgrub_a_init.c grub_script.yy.h grub_script.tab.h +libgrubmods_a_CFLAGS = $(AM_CFLAGS) $(CFLAGS_LIBRARY) -fno-builtin \ + -Wno-undef +libgrubmods_a_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) \ + -I$(top_srcdir)/grub-core/lib/minilzo \ + -I$(srcdir)/grub-core/lib/xzembed -DMINILZO_HAVE_CONFIG_H +libgrubmods_a_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) +libgrubgcry_a_SOURCES = grub-core/lib/libgcrypt-grub/cipher/arcfour.c \ + grub-core/lib/libgcrypt-grub/cipher/blowfish.c \ + grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c \ + grub-core/lib/libgcrypt-grub/cipher/camellia.c \ + grub-core/lib/libgcrypt-grub/cipher/cast5.c \ + grub-core/lib/libgcrypt-grub/cipher/crc.c \ + grub-core/lib/libgcrypt-grub/cipher/des.c \ + grub-core/lib/libgcrypt-grub/cipher/idea.c \ + grub-core/lib/libgcrypt-grub/cipher/md4.c \ + grub-core/lib/libgcrypt-grub/cipher/md5.c \ + grub-core/lib/libgcrypt-grub/cipher/rfc2268.c \ + grub-core/lib/libgcrypt-grub/cipher/rijndael.c \ + grub-core/lib/libgcrypt-grub/cipher/rmd160.c \ + grub-core/lib/libgcrypt-grub/cipher/seed.c \ + grub-core/lib/libgcrypt-grub/cipher/serpent.c \ + grub-core/lib/libgcrypt-grub/cipher/sha1.c \ + grub-core/lib/libgcrypt-grub/cipher/sha256.c \ + grub-core/lib/libgcrypt-grub/cipher/sha512.c \ + grub-core/lib/libgcrypt-grub/cipher/tiger.c \ + grub-core/lib/libgcrypt-grub/cipher/twofish.c \ + grub-core/lib/libgcrypt-grub/cipher/whirlpool.c \ + grub-core/lib/libgcrypt-grub/cipher/init.c +nodist_libgrubgcry_a_SOURCES = +libgrubgcry_a_CFLAGS = $(AM_CFLAGS) $(CFLAGS_LIBRARY) $(CFLAGS_GCRY) +libgrubgcry_a_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) \ + $(CPPFLAGS_GCRY) +libgrubgcry_a_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) +grub_mkimage_SOURCES = util/grub-mkimage.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c grub-core/osdep/config.c util/config.c +nodist_grub_mkimage_SOURCES = +grub_mkimage_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBLZMA) $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkimage_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkimage_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkimage_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_PKGLIBDIR=\"$(pkglibdir)\" +grub_mkimage_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_mkrelpath_SOURCES = util/grub-mkrelpath.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mkrelpath_SOURCES = +grub_mkrelpath_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkrelpath_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkrelpath_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkrelpath_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mkrelpath_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_script_check_SOURCES = util/grub-script-check.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_script_check_SOURCES = +grub_script_check_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_script_check_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_script_check_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_script_check_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_script_check_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_editenv_SOURCES = util/grub-editenv.c util/editenv.c grub-core/osdep/init.c +nodist_grub_editenv_SOURCES = +grub_editenv_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_editenv_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_editenv_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_editenv_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_editenv_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_mkpasswd_pbkdf2_SOURCES = util/grub-mkpasswd-pbkdf2.c grub-core/kern/emu/argp_common.c grub-core/osdep/random.c grub-core/osdep/init.c +nodist_grub_mkpasswd_pbkdf2_SOURCES = +grub_mkpasswd_pbkdf2_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkpasswd_pbkdf2_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkpasswd_pbkdf2_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkpasswd_pbkdf2_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mkpasswd_pbkdf2_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +@COND_APPLE_LINKER_TRUE@grub_macho2img_SOURCES = util/grub-macho2img.c +@COND_APPLE_LINKER_TRUE@nodist_grub_macho2img_SOURCES = +@COND_APPLE_LINKER_TRUE@grub_macho2img_LDADD = +@COND_APPLE_LINKER_TRUE@grub_macho2img_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +@COND_APPLE_LINKER_TRUE@grub_macho2img_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +@COND_APPLE_LINKER_TRUE@grub_macho2img_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +@COND_APPLE_LINKER_TRUE@grub_macho2img_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_fstest_SOURCES = util/grub-fstest.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +nodist_grub_fstest_SOURCES = grub_fstest_init.c +grub_fstest_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_fstest_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_fstest_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_fstest_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_fstest_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +@COND_GRUB_MOUNT_TRUE@grub_mount_SOURCES = util/grub-mount.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +@COND_GRUB_MOUNT_TRUE@nodist_grub_mount_SOURCES = grub_fstest_init.c +@COND_GRUB_MOUNT_TRUE@grub_mount_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse +@COND_GRUB_MOUNT_TRUE@grub_mount_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +@COND_GRUB_MOUNT_TRUE@grub_mount_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +@COND_GRUB_MOUNT_TRUE@grub_mount_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +@COND_GRUB_MOUNT_TRUE@grub_mount_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +@COND_GRUB_MKFONT_TRUE@grub_mkfont_SOURCES = util/grub-mkfont.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +@COND_GRUB_MKFONT_TRUE@nodist_grub_mkfont_SOURCES = +@COND_GRUB_MKFONT_TRUE@grub_mkfont_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(freetype_libs) $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +@COND_GRUB_MKFONT_TRUE@grub_mkfont_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) $(freetype_cflags) +@COND_GRUB_MKFONT_TRUE@grub_mkfont_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +@COND_GRUB_MKFONT_TRUE@grub_mkfont_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_MKFONT=1 +@COND_GRUB_MKFONT_TRUE@grub_mkfont_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_probe_SOURCES = util/grub-probe.c util/probe.c grub-core/osdep/ofpath.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_probe_SOURCES = +grub_probe_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_probe_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_probe_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_probe_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_probe_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_bios_setup_SOURCES = util/grub-setup.c util/setup_bios.c grub-core/kern/emu/argp_common.c grub-core/lib/reed_solomon.c grub-core/osdep/blocklist.c grub-core/osdep/init.c +nodist_grub_bios_setup_SOURCES = +grub_bios_setup_LDADD = libgrubmods.a libgrubkern.a libgrubgcry.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_bios_setup_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_bios_setup_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_bios_setup_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_SETUP_FUNC=grub_util_bios_setup +grub_bios_setup_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_sparc64_setup_SOURCES = util/grub-setup.c util/setup_sparc.c grub-core/kern/emu/argp_common.c grub-core/lib/reed_solomon.c grub-core/osdep/ofpath.c grub-core/osdep/blocklist.c grub-core/osdep/init.c +nodist_grub_sparc64_setup_SOURCES = +grub_sparc64_setup_LDADD = libgrubmods.a libgrubkern.a libgrubgcry.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_sparc64_setup_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_sparc64_setup_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_sparc64_setup_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_SETUP_FUNC=grub_util_sparc_setup +grub_sparc64_setup_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_ofpathname_SOURCES = util/ieee1275/grub-ofpathname.c grub-core/osdep/ofpath.c grub-core/osdep/init.c +nodist_grub_ofpathname_SOURCES = +grub_ofpathname_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_ofpathname_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_ofpathname_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_ofpathname_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_ofpathname_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_mklayout_SOURCES = util/grub-mklayout.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mklayout_SOURCES = +grub_mklayout_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mklayout_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mklayout_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mklayout_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mklayout_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_macbless_SOURCES = util/grub-macbless.c grub-core/osdep/init.c grub-core/kern/emu/argp_common.c +nodist_grub_macbless_SOURCES = +grub_macbless_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_macbless_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_macbless_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_macbless_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_macbless_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +@COND_HAVE_EXEC_TRUE@grub_mkrescue_SOURCES = util/grub-mkrescue.c util/render-label.c util/glue-efi.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +@COND_HAVE_EXEC_TRUE@nodist_grub_mkrescue_SOURCES = +@COND_HAVE_EXEC_TRUE@grub_mkrescue_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +@COND_HAVE_EXEC_TRUE@grub_mkrescue_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +@COND_HAVE_EXEC_TRUE@grub_mkrescue_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +@COND_HAVE_EXEC_TRUE@grub_mkrescue_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +@COND_HAVE_EXEC_TRUE@grub_mkrescue_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_mkstandalone_SOURCES = util/grub-mkstandalone.c util/render-label.c util/glue-efi.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mkstandalone_SOURCES = +grub_mkstandalone_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkstandalone_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkstandalone_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkstandalone_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mkstandalone_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_install_SOURCES = util/grub-install.c util/probe.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c util/render-label.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_install_SOURCES = +grub_install_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_install_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_install_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_install_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_install_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_mknetdir_SOURCES = util/grub-mknetdir.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mknetdir_SOURCES = +grub_mknetdir_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mknetdir_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mknetdir_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mknetdir_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mknetdir_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +example_unit_test_SOURCES = tests/example_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_example_unit_test_SOURCES = +example_unit_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +example_unit_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +example_unit_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +example_unit_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +example_unit_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +printf_test_SOURCES = tests/printf_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_printf_test_SOURCES = +printf_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +printf_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +printf_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +printf_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +printf_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +date_test_SOURCES = tests/date_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_date_test_SOURCES = +date_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +date_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +date_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +date_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +date_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +@COND_HAVE_CXX_TRUE@priority_queue_unit_test_SOURCES = tests/priority_queue_unit_test.cc tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c grub-core/lib/priority_queue.c +@COND_HAVE_CXX_TRUE@nodist_priority_queue_unit_test_SOURCES = +@COND_HAVE_CXX_TRUE@priority_queue_unit_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +@COND_HAVE_CXX_TRUE@priority_queue_unit_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +@COND_HAVE_CXX_TRUE@priority_queue_unit_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +@COND_HAVE_CXX_TRUE@priority_queue_unit_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +@COND_HAVE_CXX_TRUE@priority_queue_unit_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +cmp_test_SOURCES = tests/cmp_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_cmp_test_SOURCES = +cmp_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +cmp_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +cmp_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +cmp_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +cmp_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_menulst2cfg_SOURCES = util/grub-menulst2cfg.c grub-core/lib/legacy_parse.c grub-core/lib/i386/pc/vesa_modes_table.c grub-core/osdep/init.c +nodist_grub_menulst2cfg_SOURCES = +grub_menulst2cfg_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_menulst2cfg_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_menulst2cfg_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_menulst2cfg_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_menulst2cfg_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_syslinux2cfg_SOURCES = util/grub-syslinux2cfg.c grub-core/lib/syslinux_parse.c grub-core/lib/getline.c grub-core/osdep/init.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/kern/emu/argp_common.c +nodist_grub_syslinux2cfg_SOURCES = +grub_syslinux2cfg_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_syslinux2cfg_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_syslinux2cfg_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_syslinux2cfg_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_syslinux2cfg_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_glue_efi_SOURCES = util/grub-glue-efi.c util/glue-efi.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_glue_efi_SOURCES = +grub_glue_efi_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_glue_efi_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_glue_efi_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_glue_efi_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_glue_efi_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_render_label_SOURCES = util/grub-render-label.c util/render-label.c grub-core/kern/emu/argp_common.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +nodist_grub_render_label_SOURCES = +grub_render_label_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_render_label_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_render_label_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_render_label_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_render_label_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +grub_file_SOURCES = util/grub-file.c util/render-label.c grub-core/commands/file.c grub-core/commands/file32.c grub-core/commands/file64.c grub-core/loader/i386/xen_file.c grub-core/loader/i386/xen_file32.c grub-core/loader/i386/xen_file64.c grub-core/io/offset.c grub-core/kern/elf.c grub-core/loader/lzss.c grub-core/loader/macho.c grub-core/loader/macho32.c grub-core/loader/macho64.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +nodist_grub_file_SOURCES = +grub_file_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_file_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_file_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_file_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_file_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png \ + $(srcdir)/themes/starfield/boot_menu_c.png \ + $(srcdir)/themes/starfield/boot_menu_e.png \ + $(srcdir)/themes/starfield/boot_menu_ne.png \ + $(srcdir)/themes/starfield/boot_menu_n.png \ + $(srcdir)/themes/starfield/boot_menu_nw.png \ + $(srcdir)/themes/starfield/boot_menu_se.png \ + $(srcdir)/themes/starfield/boot_menu_s.png \ + $(srcdir)/themes/starfield/boot_menu_sw.png \ + $(srcdir)/themes/starfield/boot_menu_w.png \ + $(srcdir)/themes/starfield/slider_c.png \ + $(srcdir)/themes/starfield/slider_n.png \ + $(srcdir)/themes/starfield/slider_s.png \ + $(srcdir)/themes/starfield/starfield.png \ + $(srcdir)/themes/starfield/terminal_box_c.png \ + $(srcdir)/themes/starfield/terminal_box_e.png \ + $(srcdir)/themes/starfield/terminal_box_ne.png \ + $(srcdir)/themes/starfield/terminal_box_n.png \ + $(srcdir)/themes/starfield/terminal_box_nw.png \ + $(srcdir)/themes/starfield/terminal_box_se.png \ + $(srcdir)/themes/starfield/terminal_box_s.png \ + $(srcdir)/themes/starfield/terminal_box_sw.png \ + $(srcdir)/themes/starfield/terminal_box_w.png \ + $(srcdir)/themes/starfield/theme.txt \ + $(srcdir)/themes/starfield/README \ + $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0 +@COND_STARFIELD_FALSE@starfield_DATA = +@COND_STARFIELD_TRUE@starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files) + +# Arrows and lines are needed to draw the menu, so always include them +UNICODE_ARROWS = 0x2190-0x2193 +UNICODE_LINES = 0x2501-0x251B + +# Install config.h into platformdir +nodist_platform_HEADERS = config.h +@COND_i386_coreboot_TRUE@@COND_real_platform_TRUE@QEMU32 = qemu-system-i386 +@COND_i386_efi_TRUE@@COND_real_platform_TRUE@QEMU32 = qemu-system-i386 +@COND_i386_ieee1275_TRUE@@COND_real_platform_TRUE@QEMU32 = qemu-system-i386 +@COND_i386_multiboot_TRUE@@COND_real_platform_TRUE@QEMU32 = qemu-system-i386 +@COND_i386_pc_TRUE@@COND_real_platform_TRUE@QEMU32 = qemu-system-i386 +@COND_i386_qemu_TRUE@@COND_real_platform_TRUE@QEMU32 = qemu-system-i386 +@COND_real_platform_TRUE@@COND_x86_64_efi_TRUE@QEMU32 = qemu-system-x86_64 +@COND_i386_coreboot_TRUE@@COND_real_platform_TRUE@MINIMUM_CPU_LINUX = pentium2 +@COND_i386_efi_TRUE@@COND_real_platform_TRUE@MINIMUM_CPU_LINUX = pentium2 +@COND_i386_ieee1275_TRUE@@COND_real_platform_TRUE@MINIMUM_CPU_LINUX = pentium2 +@COND_i386_multiboot_TRUE@@COND_real_platform_TRUE@MINIMUM_CPU_LINUX = pentium2 +@COND_i386_pc_TRUE@@COND_real_platform_TRUE@MINIMUM_CPU_LINUX = pentium2 +@COND_i386_qemu_TRUE@@COND_real_platform_TRUE@MINIMUM_CPU_LINUX = pentium2 +@COND_real_platform_TRUE@@COND_x86_64_efi_TRUE@MINIMUM_CPU_LINUX = core2duo +@COND_i386_coreboot_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 + +# NetBSD has no support for finding ACPI on EFI +@COND_i386_efi_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 + +# *BSD requires ACPI +#legacy protocol (linux16) makes early BIOS calls. +@COND_i386_ieee1275_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 + +# *BSD requires ACPI +@COND_i386_multiboot_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 + +#pc chainloader by definition is only for i386-pc +#ntldr and bootmgr require BIOS. +#legacy protocol (linux16) makes early BIOS calls. +# 32-bit NetBSD crashes early on non-BIOS +@COND_i386_pc_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-i386 + +# *BSD requires ACPI +@COND_i386_qemu_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 +@COND_mips_loongson_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-linux-loongson +@COND_mips_qemu_mips_TRUE@@COND_mipseb_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-linux-mips +@COND_mips_qemu_mips_TRUE@@COND_mipsel_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-linux-mipsel +@COND_powerpc_ieee1275_TRUE@@COND_real_platform_TRUE@BOOTCHECKS = bootcheck-linux-ppc + +# NetBSD has no support for finding ACPI on EFI +@COND_real_platform_TRUE@@COND_x86_64_efi_TRUE@BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 + +# Randomly generated +@COND_real_platform_TRUE@SUCCESSFUL_BOOT_STRING = 3e49994fd5d82b7c9298d672d774080d +# tianocore cd access is very slow +@COND_real_platform_TRUE@BOOTCHECK_TIMEOUT = 180 +windowsdir = $(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows +windowszip = $(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip +changelog_start_date = 2015-01-23 +gitlog_to_changelog = $(top_srcdir)/build-aux/gitlog-to-changelog +all: $(BUILT_SOURCES) config-util.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .cc .log .o .obj .test .test$(EXEEXT) .trs +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/conf/Makefile.common $(top_srcdir)/conf/Makefile.extra-dist $(srcdir)/Makefile.util.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/conf/Makefile.common $(top_srcdir)/conf/Makefile.extra-dist $(srcdir)/Makefile.util.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config-util.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config-util.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config-util.h +$(srcdir)/config-util.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config-util.h stamp-h1 +stamp-h: $(top_builddir)/config.status $(srcdir)/stamp-h.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +config.h: $(top_builddir)/config.status $(srcdir)/config.h.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/libgcrypt-grub/cipher + @: > grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR) + @: > grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.$(OBJEXT): \ + grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +libgrubgcry.a: $(libgrubgcry_a_OBJECTS) $(libgrubgcry_a_DEPENDENCIES) $(EXTRA_libgrubgcry_a_DEPENDENCIES) + $(AM_V_at)-rm -f libgrubgcry.a + $(AM_V_AR)$(libgrubgcry_a_AR) libgrubgcry.a $(libgrubgcry_a_OBJECTS) $(libgrubgcry_a_LIBADD) + $(AM_V_at)$(RANLIB) libgrubgcry.a +util/$(am__dirstamp): + @$(MKDIR_P) util + @: > util/$(am__dirstamp) +util/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) util/$(DEPDIR) + @: > util/$(DEPDIR)/$(am__dirstamp) +util/libgrubkern_a-misc.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern + @: > grub-core/kern/$(am__dirstamp) +grub-core/kern/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/$(DEPDIR) + @: > grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-command.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-device.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-disk.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib + @: > grub-core/lib/$(am__dirstamp) +grub-core/lib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/$(DEPDIR) + @: > grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubkern_a-disk.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +util/libgrubkern_a-getroot.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/unix/$(am__dirstamp): + @$(MKDIR_P) grub-core/osdep/unix + @: > grub-core/osdep/unix/$(am__dirstamp) +grub-core/osdep/unix/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/osdep/unix/$(DEPDIR) + @: > grub-core/osdep/unix/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/unix/libgrubkern_a-getroot.$(OBJEXT): \ + grub-core/osdep/unix/$(am__dirstamp) \ + grub-core/osdep/unix/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/$(am__dirstamp): + @$(MKDIR_P) grub-core/osdep + @: > grub-core/osdep/$(am__dirstamp) +grub-core/osdep/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/osdep/$(DEPDIR) + @: > grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/libgrubkern_a-getroot.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/devmapper/$(am__dirstamp): + @$(MKDIR_P) grub-core/osdep/devmapper + @: > grub-core/osdep/devmapper/$(am__dirstamp) +grub-core/osdep/devmapper/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/osdep/devmapper/$(DEPDIR) + @: > grub-core/osdep/devmapper/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/devmapper/libgrubkern_a-getroot.$(OBJEXT): \ + grub-core/osdep/devmapper/$(am__dirstamp) \ + grub-core/osdep/devmapper/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/libgrubkern_a-relpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/emu + @: > grub-core/kern/emu/$(am__dirstamp) +grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/emu/$(DEPDIR) + @: > grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/libgrubkern_a-hostdisk.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/devmapper/libgrubkern_a-hostdisk.$(OBJEXT): \ + grub-core/osdep/devmapper/$(am__dirstamp) \ + grub-core/osdep/devmapper/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/libgrubkern_a-hostdisk.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/unix/libgrubkern_a-hostdisk.$(OBJEXT): \ + grub-core/osdep/unix/$(am__dirstamp) \ + grub-core/osdep/unix/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/libgrubkern_a-exec.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/libgrubkern_a-sleep.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/libgrubkern_a-password.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/libgrubkern_a-misc.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/libgrubkern_a-mm.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-env.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-err.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-file.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-fs.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-list.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-misc.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/libgrubkern_a-partition.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubkern_a-crypto.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/$(am__dirstamp): + @$(MKDIR_P) grub-core/disk + @: > grub-core/disk/$(am__dirstamp) +grub-core/disk/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/disk/$(DEPDIR) + @: > grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubkern_a-luks.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubkern_a-geli.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubkern_a-cryptodisk.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubkern_a-AFSplitter.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubkern_a-pbkdf2.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/$(am__dirstamp): + @$(MKDIR_P) grub-core/commands + @: > grub-core/commands/$(am__dirstamp) +grub-core/commands/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/commands/$(DEPDIR) + @: > grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/libgrubkern_a-extcmd.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubkern_a-arg.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubkern_a-ldm.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubkern_a-diskfilter.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/$(am__dirstamp): + @$(MKDIR_P) grub-core/partmap + @: > grub-core/partmap/$(am__dirstamp) +grub-core/partmap/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/partmap/$(DEPDIR) + @: > grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubkern_a-gpt.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubkern_a-msdos.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/$(am__dirstamp): + @$(MKDIR_P) grub-core/fs + @: > grub-core/fs/$(am__dirstamp) +grub-core/fs/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/fs/$(DEPDIR) + @: > grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubkern_a-proc.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubkern_a-archelp.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) + +libgrubkern.a: $(libgrubkern_a_OBJECTS) $(libgrubkern_a_DEPENDENCIES) $(EXTRA_libgrubkern_a_DEPENDENCIES) + $(AM_V_at)-rm -f libgrubkern.a + $(AM_V_AR)$(libgrubkern_a_AR) libgrubkern.a $(libgrubkern_a_OBJECTS) $(libgrubkern_a_LIBADD) + $(AM_V_at)$(RANLIB) libgrubkern.a +grub-core/commands/libgrubmods_a-blocklist.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/libgrubmods_a-macbless.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/libgrubmods_a-xnu_uuid.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/libgrubmods_a-testload.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/libgrubmods_a-ls.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-dmraid_nvidia.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-loopback.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-lvm.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-mdraid_linux.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-mdraid_linux_be.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-mdraid1x_linux.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-raid5_recover.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/libgrubmods_a-raid6_recover.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/font/$(am__dirstamp): + @$(MKDIR_P) grub-core/font + @: > grub-core/font/$(am__dirstamp) +grub-core/font/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/font/$(DEPDIR) + @: > grub-core/font/$(DEPDIR)/$(am__dirstamp) +grub-core/font/libgrubmods_a-font.$(OBJEXT): \ + grub-core/font/$(am__dirstamp) \ + grub-core/font/$(DEPDIR)/$(am__dirstamp) +grub-core/gfxmenu/$(am__dirstamp): + @$(MKDIR_P) grub-core/gfxmenu + @: > grub-core/gfxmenu/$(am__dirstamp) +grub-core/gfxmenu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/gfxmenu/$(DEPDIR) + @: > grub-core/gfxmenu/$(DEPDIR)/$(am__dirstamp) +grub-core/gfxmenu/libgrubmods_a-font.$(OBJEXT): \ + grub-core/gfxmenu/$(am__dirstamp) \ + grub-core/gfxmenu/$(DEPDIR)/$(am__dirstamp) +grub-core/normal/$(am__dirstamp): + @$(MKDIR_P) grub-core/normal + @: > grub-core/normal/$(am__dirstamp) +grub-core/normal/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/normal/$(DEPDIR) + @: > grub-core/normal/$(DEPDIR)/$(am__dirstamp) +grub-core/normal/libgrubmods_a-charset.$(OBJEXT): \ + grub-core/normal/$(am__dirstamp) \ + grub-core/normal/$(DEPDIR)/$(am__dirstamp) +grub-core/video/fb/$(am__dirstamp): + @$(MKDIR_P) grub-core/video/fb + @: > grub-core/video/fb/$(am__dirstamp) +grub-core/video/fb/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/video/fb/$(DEPDIR) + @: > grub-core/video/fb/$(DEPDIR)/$(am__dirstamp) +grub-core/video/fb/libgrubmods_a-fbblit.$(OBJEXT): \ + grub-core/video/fb/$(am__dirstamp) \ + grub-core/video/fb/$(DEPDIR)/$(am__dirstamp) +grub-core/video/fb/libgrubmods_a-fbutil.$(OBJEXT): \ + grub-core/video/fb/$(am__dirstamp) \ + grub-core/video/fb/$(DEPDIR)/$(am__dirstamp) +grub-core/video/fb/libgrubmods_a-fbfill.$(OBJEXT): \ + grub-core/video/fb/$(am__dirstamp) \ + grub-core/video/fb/$(DEPDIR)/$(am__dirstamp) +grub-core/video/fb/libgrubmods_a-video_fb.$(OBJEXT): \ + grub-core/video/fb/$(am__dirstamp) \ + grub-core/video/fb/$(DEPDIR)/$(am__dirstamp) +grub-core/video/$(am__dirstamp): + @$(MKDIR_P) grub-core/video + @: > grub-core/video/$(am__dirstamp) +grub-core/video/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/video/$(DEPDIR) + @: > grub-core/video/$(DEPDIR)/$(am__dirstamp) +grub-core/video/libgrubmods_a-video.$(OBJEXT): \ + grub-core/video/$(am__dirstamp) \ + grub-core/video/$(DEPDIR)/$(am__dirstamp) +grub-core/video/libgrubmods_a-capture.$(OBJEXT): \ + grub-core/video/$(am__dirstamp) \ + grub-core/video/$(DEPDIR)/$(am__dirstamp) +grub-core/video/libgrubmods_a-colors.$(OBJEXT): \ + grub-core/video/$(am__dirstamp) \ + grub-core/video/$(DEPDIR)/$(am__dirstamp) +grub-core/$(am__dirstamp): + @$(MKDIR_P) grub-core + @: > grub-core/$(am__dirstamp) +grub-core/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/$(DEPDIR) + @: > grub-core/$(DEPDIR)/$(am__dirstamp) +grub-core/libgrubmods_a-unidata.$(OBJEXT): grub-core/$(am__dirstamp) \ + grub-core/$(DEPDIR)/$(am__dirstamp) +grub-core/io/$(am__dirstamp): + @$(MKDIR_P) grub-core/io + @: > grub-core/io/$(am__dirstamp) +grub-core/io/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/io/$(DEPDIR) + @: > grub-core/io/$(DEPDIR)/$(am__dirstamp) +grub-core/io/libgrubmods_a-bufio.$(OBJEXT): \ + grub-core/io/$(am__dirstamp) \ + grub-core/io/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-affs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-afs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-bfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-btrfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-cbfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-cpio.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-cpio_be.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-odc.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-newc.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-ext2.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-fat.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-exfat.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-fshelp.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-hfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-hfsplus.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-hfspluscomp.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-iso9660.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-jfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-minix.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-minix2.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-minix3.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-minix_be.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-minix2_be.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-minix3_be.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-nilfs2.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-ntfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-ntfscomp.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-reiserfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-romfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-sfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-squash4.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-tar.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-udf.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-ufs2.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-ufs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-ufs_be.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/libgrubmods_a-xfs.$(OBJEXT): \ + grub-core/fs/$(am__dirstamp) \ + grub-core/fs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/$(am__dirstamp): + @$(MKDIR_P) grub-core/fs/zfs + @: > grub-core/fs/zfs/$(am__dirstamp) +grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/fs/zfs/$(DEPDIR) + @: > grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/libgrubmods_a-zfscrypt.$(OBJEXT): \ + grub-core/fs/zfs/$(am__dirstamp) \ + grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/libgrubmods_a-zfs.$(OBJEXT): \ + grub-core/fs/zfs/$(am__dirstamp) \ + grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/libgrubmods_a-zfsinfo.$(OBJEXT): \ + grub-core/fs/zfs/$(am__dirstamp) \ + grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.$(OBJEXT): \ + grub-core/fs/zfs/$(am__dirstamp) \ + grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/libgrubmods_a-zfs_lz4.$(OBJEXT): \ + grub-core/fs/zfs/$(am__dirstamp) \ + grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/libgrubmods_a-zfs_sha256.$(OBJEXT): \ + grub-core/fs/zfs/$(am__dirstamp) \ + grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.$(OBJEXT): \ + grub-core/fs/zfs/$(am__dirstamp) \ + grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubmods_a-envblk.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubmods_a-hexdump.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubmods_a-LzFind.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubmods_a-LzmaEnc.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubmods_a-crc.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubmods_a-adler32.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/libgrubmods_a-crc64.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/normal/libgrubmods_a-datetime.$(OBJEXT): \ + grub-core/normal/$(am__dirstamp) \ + grub-core/normal/$(DEPDIR)/$(am__dirstamp) +grub-core/normal/libgrubmods_a-misc.$(OBJEXT): \ + grub-core/normal/$(am__dirstamp) \ + grub-core/normal/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-acorn.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-amiga.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-apple.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-sun.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-plan.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-dvh.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-sunpc.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-bsdlabel.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/partmap/libgrubmods_a-dfly.$(OBJEXT): \ + grub-core/partmap/$(am__dirstamp) \ + grub-core/partmap/$(DEPDIR)/$(am__dirstamp) +grub-core/script/$(am__dirstamp): + @$(MKDIR_P) grub-core/script + @: > grub-core/script/$(am__dirstamp) +grub-core/script/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/script/$(DEPDIR) + @: > grub-core/script/$(DEPDIR)/$(am__dirstamp) +grub-core/script/libgrubmods_a-function.$(OBJEXT): \ + grub-core/script/$(am__dirstamp) \ + grub-core/script/$(DEPDIR)/$(am__dirstamp) +grub-core/script/libgrubmods_a-lexer.$(OBJEXT): \ + grub-core/script/$(am__dirstamp) \ + grub-core/script/$(DEPDIR)/$(am__dirstamp) +grub-core/script/libgrubmods_a-main.$(OBJEXT): \ + grub-core/script/$(am__dirstamp) \ + grub-core/script/$(DEPDIR)/$(am__dirstamp) +grub-core/script/libgrubmods_a-script.$(OBJEXT): \ + grub-core/script/$(am__dirstamp) \ + grub-core/script/$(DEPDIR)/$(am__dirstamp) +grub-core/script/libgrubmods_a-argv.$(OBJEXT): \ + grub-core/script/$(am__dirstamp) \ + grub-core/script/$(DEPDIR)/$(am__dirstamp) +grub-core/io/libgrubmods_a-gzio.$(OBJEXT): \ + grub-core/io/$(am__dirstamp) \ + grub-core/io/$(DEPDIR)/$(am__dirstamp) +grub-core/io/libgrubmods_a-xzio.$(OBJEXT): \ + grub-core/io/$(am__dirstamp) \ + grub-core/io/$(DEPDIR)/$(am__dirstamp) +grub-core/io/libgrubmods_a-lzopio.$(OBJEXT): \ + grub-core/io/$(am__dirstamp) \ + grub-core/io/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/ia64/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/ia64 + @: > grub-core/kern/ia64/$(am__dirstamp) +grub-core/kern/ia64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/ia64/$(DEPDIR) + @: > grub-core/kern/ia64/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/ia64/libgrubmods_a-dl_helper.$(OBJEXT): \ + grub-core/kern/ia64/$(am__dirstamp) \ + grub-core/kern/ia64/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/arm/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/arm + @: > grub-core/kern/arm/$(am__dirstamp) +grub-core/kern/arm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/arm/$(DEPDIR) + @: > grub-core/kern/arm/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/arm/libgrubmods_a-dl_helper.$(OBJEXT): \ + grub-core/kern/arm/$(am__dirstamp) \ + grub-core/kern/arm/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/arm64/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/arm64 + @: > grub-core/kern/arm64/$(am__dirstamp) +grub-core/kern/arm64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/kern/arm64/$(DEPDIR) + @: > grub-core/kern/arm64/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/arm64/libgrubmods_a-dl_helper.$(OBJEXT): \ + grub-core/kern/arm64/$(am__dirstamp) \ + grub-core/kern/arm64/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/minilzo/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/minilzo + @: > grub-core/lib/minilzo/$(am__dirstamp) +grub-core/lib/minilzo/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/minilzo/$(DEPDIR) + @: > grub-core/lib/minilzo/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/minilzo/libgrubmods_a-minilzo.$(OBJEXT): \ + grub-core/lib/minilzo/$(am__dirstamp) \ + grub-core/lib/minilzo/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/xzembed/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/xzembed + @: > grub-core/lib/xzembed/$(am__dirstamp) +grub-core/lib/xzembed/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/xzembed/$(DEPDIR) + @: > grub-core/lib/xzembed/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.$(OBJEXT): \ + grub-core/lib/xzembed/$(am__dirstamp) \ + grub-core/lib/xzembed/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.$(OBJEXT): \ + grub-core/lib/xzembed/$(am__dirstamp) \ + grub-core/lib/xzembed/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.$(OBJEXT): \ + grub-core/lib/xzembed/$(am__dirstamp) \ + grub-core/lib/xzembed/$(DEPDIR)/$(am__dirstamp) + +libgrubmods.a: $(libgrubmods_a_OBJECTS) $(libgrubmods_a_DEPENDENCIES) $(EXTRA_libgrubmods_a_DEPENDENCIES) + $(AM_V_at)-rm -f libgrubmods.a + $(AM_V_AR)$(libgrubmods_a_AR) libgrubmods.a $(libgrubmods_a_OBJECTS) $(libgrubmods_a_LIBADD) + $(AM_V_at)$(RANLIB) libgrubmods.a +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +install-platformPROGRAMS: $(platform_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(platform_PROGRAMS)'; test -n "$(platformdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(platformdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(platformdir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(platformdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(platformdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-platformPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(platform_PROGRAMS)'; test -n "$(platformdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(platformdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(platformdir)" && rm -f $$files + +clean-platformPROGRAMS: + -test -z "$(platform_PROGRAMS)" || rm -f $(platform_PROGRAMS) +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) +tests/$(am__dirstamp): + @$(MKDIR_P) tests + @: > tests/$(am__dirstamp) +tests/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tests/$(DEPDIR) + @: > tests/$(DEPDIR)/$(am__dirstamp) +tests/cmp_test-cmp_unit_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/lib/$(am__dirstamp): + @$(MKDIR_P) tests/lib + @: > tests/lib/$(am__dirstamp) +tests/lib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tests/lib/$(DEPDIR) + @: > tests/lib/$(DEPDIR)/$(am__dirstamp) +tests/lib/cmp_test-unit_test.$(OBJEXT): tests/lib/$(am__dirstamp) \ + tests/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/cmp_test-list.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/cmp_test-misc.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/tests/lib/$(am__dirstamp): + @$(MKDIR_P) grub-core/tests/lib + @: > grub-core/tests/lib/$(am__dirstamp) +grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/tests/lib/$(DEPDIR) + @: > grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/tests/lib/cmp_test-test.$(OBJEXT): \ + grub-core/tests/lib/$(am__dirstamp) \ + grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp) + +cmp_test$(EXEEXT): $(cmp_test_OBJECTS) $(cmp_test_DEPENDENCIES) $(EXTRA_cmp_test_DEPENDENCIES) + @rm -f cmp_test$(EXEEXT) + $(AM_V_CCLD)$(cmp_test_LINK) $(cmp_test_OBJECTS) $(cmp_test_LDADD) $(LIBS) +tests/date_test-date_unit_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/lib/date_test-unit_test.$(OBJEXT): tests/lib/$(am__dirstamp) \ + tests/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/date_test-list.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/date_test-misc.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/tests/lib/date_test-test.$(OBJEXT): \ + grub-core/tests/lib/$(am__dirstamp) \ + grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp) + +date_test$(EXEEXT): $(date_test_OBJECTS) $(date_test_DEPENDENCIES) $(EXTRA_date_test_DEPENDENCIES) + @rm -f date_test$(EXEEXT) + $(AM_V_CCLD)$(date_test_LINK) $(date_test_OBJECTS) $(date_test_LDADD) $(LIBS) +tests/example_unit_test-example_unit_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) +tests/lib/example_unit_test-unit_test.$(OBJEXT): \ + tests/lib/$(am__dirstamp) tests/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/example_unit_test-list.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/example_unit_test-misc.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/tests/lib/example_unit_test-test.$(OBJEXT): \ + grub-core/tests/lib/$(am__dirstamp) \ + grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp) + +example_unit_test$(EXEEXT): $(example_unit_test_OBJECTS) $(example_unit_test_DEPENDENCIES) $(EXTRA_example_unit_test_DEPENDENCIES) + @rm -f example_unit_test$(EXEEXT) + $(AM_V_CCLD)$(example_unit_test_LINK) $(example_unit_test_OBJECTS) $(example_unit_test_LDADD) $(LIBS) +util/grub_bios_setup-grub-setup.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_bios_setup-setup_bios.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_bios_setup-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_bios_setup-reed_solomon.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_bios_setup-blocklist.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_bios_setup-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-bios-setup$(EXEEXT): $(grub_bios_setup_OBJECTS) $(grub_bios_setup_DEPENDENCIES) $(EXTRA_grub_bios_setup_DEPENDENCIES) + @rm -f grub-bios-setup$(EXEEXT) + $(AM_V_CCLD)$(grub_bios_setup_LINK) $(grub_bios_setup_OBJECTS) $(grub_bios_setup_LDADD) $(LIBS) +util/grub_editenv-grub-editenv.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_editenv-editenv.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_editenv-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-editenv$(EXEEXT): $(grub_editenv_OBJECTS) $(grub_editenv_DEPENDENCIES) $(EXTRA_grub_editenv_DEPENDENCIES) + @rm -f grub-editenv$(EXEEXT) + $(AM_V_CCLD)$(grub_editenv_LINK) $(grub_editenv_OBJECTS) $(grub_editenv_LDADD) $(LIBS) +util/grub_file-grub-file.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_file-render-label.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/grub_file-file.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/grub_file-file32.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/commands/grub_file-file64.$(OBJEXT): \ + grub-core/commands/$(am__dirstamp) \ + grub-core/commands/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/i386/$(am__dirstamp): + @$(MKDIR_P) grub-core/loader/i386 + @: > grub-core/loader/i386/$(am__dirstamp) +grub-core/loader/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/loader/i386/$(DEPDIR) + @: > grub-core/loader/i386/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/i386/grub_file-xen_file.$(OBJEXT): \ + grub-core/loader/i386/$(am__dirstamp) \ + grub-core/loader/i386/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/i386/grub_file-xen_file32.$(OBJEXT): \ + grub-core/loader/i386/$(am__dirstamp) \ + grub-core/loader/i386/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/i386/grub_file-xen_file64.$(OBJEXT): \ + grub-core/loader/i386/$(am__dirstamp) \ + grub-core/loader/i386/$(DEPDIR)/$(am__dirstamp) +grub-core/io/grub_file-offset.$(OBJEXT): grub-core/io/$(am__dirstamp) \ + grub-core/io/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/grub_file-elf.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/$(am__dirstamp): + @$(MKDIR_P) grub-core/loader + @: > grub-core/loader/$(am__dirstamp) +grub-core/loader/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/loader/$(DEPDIR) + @: > grub-core/loader/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/grub_file-lzss.$(OBJEXT): \ + grub-core/loader/$(am__dirstamp) \ + grub-core/loader/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/grub_file-macho.$(OBJEXT): \ + grub-core/loader/$(am__dirstamp) \ + grub-core/loader/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/grub_file-macho32.$(OBJEXT): \ + grub-core/loader/$(am__dirstamp) \ + grub-core/loader/$(DEPDIR)/$(am__dirstamp) +grub-core/loader/grub_file-macho64.$(OBJEXT): \ + grub-core/loader/$(am__dirstamp) \ + grub-core/loader/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_file-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_file-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_file-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-file$(EXEEXT): $(grub_file_OBJECTS) $(grub_file_DEPENDENCIES) $(EXTRA_grub_file_DEPENDENCIES) + @rm -f grub-file$(EXEEXT) + $(AM_V_CCLD)$(grub_file_LINK) $(grub_file_OBJECTS) $(grub_file_LDADD) $(LIBS) +util/grub_fstest-grub-fstest.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_fstest-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_fstest-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_fstest-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-fstest$(EXEEXT): $(grub_fstest_OBJECTS) $(grub_fstest_DEPENDENCIES) $(EXTRA_grub_fstest_DEPENDENCIES) + @rm -f grub-fstest$(EXEEXT) + $(AM_V_CCLD)$(grub_fstest_LINK) $(grub_fstest_OBJECTS) $(grub_fstest_LDADD) $(LIBS) +util/grub_glue_efi-grub-glue-efi.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_glue_efi-glue-efi.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_glue_efi-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_glue_efi-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-glue-efi$(EXEEXT): $(grub_glue_efi_OBJECTS) $(grub_glue_efi_DEPENDENCIES) $(EXTRA_grub_glue_efi_DEPENDENCIES) + @rm -f grub-glue-efi$(EXEEXT) + $(AM_V_CCLD)$(grub_glue_efi_LINK) $(grub_glue_efi_OBJECTS) $(grub_glue_efi_LDADD) $(LIBS) +util/grub_install-grub-install.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-probe.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-mkimage.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-grub-mkimage32.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-grub-mkimage64.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-grub-install-common.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-setup_bios.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-setup_sparc.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_install-reed_solomon.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-random.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-ofpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-platform.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-platform_unix.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-compress.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_install-editenv.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-blocklist.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-config.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_install-config.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_install-render-label.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_install-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_install-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +util/grub_install-resolve.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_install-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_install-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-install$(EXEEXT): $(grub_install_OBJECTS) $(grub_install_DEPENDENCIES) $(EXTRA_grub_install_DEPENDENCIES) + @rm -f grub-install$(EXEEXT) + $(AM_V_CCLD)$(grub_install_LINK) $(grub_install_OBJECTS) $(grub_install_LDADD) $(LIBS) +util/grub_macbless-grub-macbless.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_macbless-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_macbless-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) + +grub-macbless$(EXEEXT): $(grub_macbless_OBJECTS) $(grub_macbless_DEPENDENCIES) $(EXTRA_grub_macbless_DEPENDENCIES) + @rm -f grub-macbless$(EXEEXT) + $(AM_V_CCLD)$(grub_macbless_LINK) $(grub_macbless_OBJECTS) $(grub_macbless_LDADD) $(LIBS) +util/grub_macho2img-grub-macho2img.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) + +grub-macho2img$(EXEEXT): $(grub_macho2img_OBJECTS) $(grub_macho2img_DEPENDENCIES) $(EXTRA_grub_macho2img_DEPENDENCIES) + @rm -f grub-macho2img$(EXEEXT) + $(AM_V_CCLD)$(grub_macho2img_LINK) $(grub_macho2img_OBJECTS) $(grub_macho2img_LDADD) $(LIBS) +util/grub_menulst2cfg-grub-menulst2cfg.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_menulst2cfg-legacy_parse.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/i386/pc/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/i386/pc + @: > grub-core/lib/i386/pc/$(am__dirstamp) +grub-core/lib/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) grub-core/lib/i386/pc/$(DEPDIR) + @: > grub-core/lib/i386/pc/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.$(OBJEXT): \ + grub-core/lib/i386/pc/$(am__dirstamp) \ + grub-core/lib/i386/pc/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_menulst2cfg-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-menulst2cfg$(EXEEXT): $(grub_menulst2cfg_OBJECTS) $(grub_menulst2cfg_DEPENDENCIES) $(EXTRA_grub_menulst2cfg_DEPENDENCIES) + @rm -f grub-menulst2cfg$(EXEEXT) + $(AM_V_CCLD)$(grub_menulst2cfg_LINK) $(grub_menulst2cfg_OBJECTS) $(grub_menulst2cfg_LDADD) $(LIBS) +util/grub_mkfont-grub-mkfont.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkfont-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkfont-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mkfont$(EXEEXT): $(grub_mkfont_OBJECTS) $(grub_mkfont_DEPENDENCIES) $(EXTRA_grub_mkfont_DEPENDENCIES) + @rm -f grub-mkfont$(EXEEXT) + $(AM_V_CCLD)$(grub_mkfont_LINK) $(grub_mkfont_OBJECTS) $(grub_mkfont_LDADD) $(LIBS) +util/grub_mkimage-grub-mkimage.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkimage-mkimage.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkimage-grub-mkimage32.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkimage-grub-mkimage64.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkimage-resolve.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkimage-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkimage-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkimage-config.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_mkimage-config.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) + +grub-mkimage$(EXEEXT): $(grub_mkimage_OBJECTS) $(grub_mkimage_DEPENDENCIES) $(EXTRA_grub_mkimage_DEPENDENCIES) + @rm -f grub-mkimage$(EXEEXT) + $(AM_V_CCLD)$(grub_mkimage_LINK) $(grub_mkimage_OBJECTS) $(grub_mkimage_LDADD) $(LIBS) +util/grub_mklayout-grub-mklayout.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mklayout-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mklayout-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mklayout$(EXEEXT): $(grub_mklayout_OBJECTS) $(grub_mklayout_DEPENDENCIES) $(EXTRA_grub_mklayout_DEPENDENCIES) + @rm -f grub-mklayout$(EXEEXT) + $(AM_V_CCLD)$(grub_mklayout_LINK) $(grub_mklayout_OBJECTS) $(grub_mklayout_LDADD) $(LIBS) +util/grub_mknetdir-grub-mknetdir.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-mkimage.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-grub-mkimage32.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-grub-mkimage64.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-grub-install-common.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-setup_bios.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-setup_sparc.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_mknetdir-reed_solomon.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-random.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-ofpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-platform.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-platform_unix.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-compress.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-editenv.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-blocklist.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-config.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-config.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mknetdir-resolve.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mknetdir-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mknetdir-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mknetdir$(EXEEXT): $(grub_mknetdir_OBJECTS) $(grub_mknetdir_DEPENDENCIES) $(EXTRA_grub_mknetdir_DEPENDENCIES) + @rm -f grub-mknetdir$(EXEEXT) + $(AM_V_CCLD)$(grub_mknetdir_LINK) $(grub_mknetdir_OBJECTS) $(grub_mknetdir_LDADD) $(LIBS) +util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkpasswd_pbkdf2-random.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkpasswd_pbkdf2-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mkpasswd-pbkdf2$(EXEEXT): $(grub_mkpasswd_pbkdf2_OBJECTS) $(grub_mkpasswd_pbkdf2_DEPENDENCIES) $(EXTRA_grub_mkpasswd_pbkdf2_DEPENDENCIES) + @rm -f grub-mkpasswd-pbkdf2$(EXEEXT) + $(AM_V_CCLD)$(grub_mkpasswd_pbkdf2_LINK) $(grub_mkpasswd_pbkdf2_OBJECTS) $(grub_mkpasswd_pbkdf2_LDADD) $(LIBS) +util/grub_mkrelpath-grub-mkrelpath.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkrelpath-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrelpath-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mkrelpath$(EXEEXT): $(grub_mkrelpath_OBJECTS) $(grub_mkrelpath_DEPENDENCIES) $(EXTRA_grub_mkrelpath_DEPENDENCIES) + @rm -f grub-mkrelpath$(EXEEXT) + $(AM_V_CCLD)$(grub_mkrelpath_LINK) $(grub_mkrelpath_OBJECTS) $(grub_mkrelpath_LDADD) $(LIBS) +util/grub_mkrescue-grub-mkrescue.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-render-label.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-glue-efi.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-mkimage.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-grub-mkimage32.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-grub-mkimage64.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-grub-install-common.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-setup_bios.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-setup_sparc.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_mkrescue-reed_solomon.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-random.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-ofpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-platform.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-platform_unix.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-compress.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-editenv.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-blocklist.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-config.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-config.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkrescue-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_mkrescue-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +util/grub_mkrescue-resolve.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkrescue-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkrescue-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mkrescue$(EXEEXT): $(grub_mkrescue_OBJECTS) $(grub_mkrescue_DEPENDENCIES) $(EXTRA_grub_mkrescue_DEPENDENCIES) + @rm -f grub-mkrescue$(EXEEXT) + $(AM_V_CCLD)$(grub_mkrescue_LINK) $(grub_mkrescue_OBJECTS) $(grub_mkrescue_LDADD) $(LIBS) +util/grub_mkstandalone-grub-mkstandalone.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-render-label.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-glue-efi.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-mkimage.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-grub-mkimage32.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-grub-mkimage64.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-grub-install-common.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-setup_bios.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-setup_sparc.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_mkstandalone-reed_solomon.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-random.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-ofpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-platform.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-platform_unix.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-compress.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-editenv.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-blocklist.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-config.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-config.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkstandalone-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_mkstandalone-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +util/grub_mkstandalone-resolve.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mkstandalone-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mkstandalone-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mkstandalone$(EXEEXT): $(grub_mkstandalone_OBJECTS) $(grub_mkstandalone_DEPENDENCIES) $(EXTRA_grub_mkstandalone_DEPENDENCIES) + @rm -f grub-mkstandalone$(EXEEXT) + $(AM_V_CCLD)$(grub_mkstandalone_LINK) $(grub_mkstandalone_OBJECTS) $(grub_mkstandalone_LDADD) $(LIBS) +util/grub_mount-grub-mount.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_mount-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_mount-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_mount-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-mount$(EXEEXT): $(grub_mount_OBJECTS) $(grub_mount_DEPENDENCIES) $(EXTRA_grub_mount_DEPENDENCIES) + @rm -f grub-mount$(EXEEXT) + $(AM_V_CCLD)$(grub_mount_LINK) $(grub_mount_OBJECTS) $(grub_mount_LDADD) $(LIBS) +util/ieee1275/$(am__dirstamp): + @$(MKDIR_P) util/ieee1275 + @: > util/ieee1275/$(am__dirstamp) +util/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) util/ieee1275/$(DEPDIR) + @: > util/ieee1275/$(DEPDIR)/$(am__dirstamp) +util/ieee1275/grub_ofpathname-grub-ofpathname.$(OBJEXT): \ + util/ieee1275/$(am__dirstamp) \ + util/ieee1275/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_ofpathname-ofpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_ofpathname-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-ofpathname$(EXEEXT): $(grub_ofpathname_OBJECTS) $(grub_ofpathname_DEPENDENCIES) $(EXTRA_grub_ofpathname_DEPENDENCIES) + @rm -f grub-ofpathname$(EXEEXT) + $(AM_V_CCLD)$(grub_ofpathname_LINK) $(grub_ofpathname_OBJECTS) $(grub_ofpathname_LDADD) $(LIBS) +util/grub_probe-grub-probe.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_probe-probe.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_probe-ofpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_probe-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_probe-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-probe$(EXEEXT): $(grub_probe_OBJECTS) $(grub_probe_DEPENDENCIES) $(EXTRA_grub_probe_DEPENDENCIES) + @rm -f grub-probe$(EXEEXT) + $(AM_V_CCLD)$(grub_probe_LINK) $(grub_probe_OBJECTS) $(grub_probe_LDADD) $(LIBS) +util/grub_render_label-grub-render-label.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +util/grub_render_label-render-label.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_render_label-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_render_label-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_render_label-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_render_label-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-render-label$(EXEEXT): $(grub_render_label_OBJECTS) $(grub_render_label_DEPENDENCIES) $(EXTRA_grub_render_label_DEPENDENCIES) + @rm -f grub-render-label$(EXEEXT) + $(AM_V_CCLD)$(grub_render_label_LINK) $(grub_render_label_OBJECTS) $(grub_render_label_LDADD) $(LIBS) +util/grub_script_check-grub-script-check.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_script_check-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_script_check-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-script-check$(EXEEXT): $(grub_script_check_OBJECTS) $(grub_script_check_DEPENDENCIES) $(EXTRA_grub_script_check_DEPENDENCIES) + @rm -f grub-script-check$(EXEEXT) + $(AM_V_CCLD)$(grub_script_check_LINK) $(grub_script_check_OBJECTS) $(grub_script_check_LDADD) $(LIBS) +util/grub_sparc64_setup-grub-setup.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +util/grub_sparc64_setup-setup_sparc.$(OBJEXT): util/$(am__dirstamp) \ + util/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_sparc64_setup-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_sparc64_setup-reed_solomon.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_sparc64_setup-ofpath.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_sparc64_setup-blocklist.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_sparc64_setup-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + +grub-sparc64-setup$(EXEEXT): $(grub_sparc64_setup_OBJECTS) $(grub_sparc64_setup_DEPENDENCIES) $(EXTRA_grub_sparc64_setup_DEPENDENCIES) + @rm -f grub-sparc64-setup$(EXEEXT) + $(AM_V_CCLD)$(grub_sparc64_setup_LINK) $(grub_sparc64_setup_OBJECTS) $(grub_sparc64_setup_LDADD) $(LIBS) +util/grub_syslinux2cfg-grub-syslinux2cfg.$(OBJEXT): \ + util/$(am__dirstamp) util/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_syslinux2cfg-syslinux_parse.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/grub_syslinux2cfg-getline.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/osdep/grub_syslinux2cfg-init.$(OBJEXT): \ + grub-core/osdep/$(am__dirstamp) \ + grub-core/osdep/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_syslinux2cfg-hostfs.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) +grub-core/disk/grub_syslinux2cfg-host.$(OBJEXT): \ + grub-core/disk/$(am__dirstamp) \ + grub-core/disk/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/emu/grub_syslinux2cfg-argp_common.$(OBJEXT): \ + grub-core/kern/emu/$(am__dirstamp) \ + grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) + +grub-syslinux2cfg$(EXEEXT): $(grub_syslinux2cfg_OBJECTS) $(grub_syslinux2cfg_DEPENDENCIES) $(EXTRA_grub_syslinux2cfg_DEPENDENCIES) + @rm -f grub-syslinux2cfg$(EXEEXT) + $(AM_V_CCLD)$(grub_syslinux2cfg_LINK) $(grub_syslinux2cfg_OBJECTS) $(grub_syslinux2cfg_LDADD) $(LIBS) +tests/printf_test-printf_unit_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +tests/lib/printf_test-unit_test.$(OBJEXT): tests/lib/$(am__dirstamp) \ + tests/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/printf_test-list.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/printf_test-misc.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/tests/lib/printf_test-test.$(OBJEXT): \ + grub-core/tests/lib/$(am__dirstamp) \ + grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp) + +printf_test$(EXEEXT): $(printf_test_OBJECTS) $(printf_test_DEPENDENCIES) $(EXTRA_printf_test_DEPENDENCIES) + @rm -f printf_test$(EXEEXT) + $(AM_V_CCLD)$(printf_test_LINK) $(printf_test_OBJECTS) $(printf_test_LDADD) $(LIBS) +tests/priority_queue_unit_test-priority_queue_unit_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) +tests/lib/priority_queue_unit_test-unit_test.$(OBJEXT): \ + tests/lib/$(am__dirstamp) tests/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/priority_queue_unit_test-list.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/kern/priority_queue_unit_test-misc.$(OBJEXT): \ + grub-core/kern/$(am__dirstamp) \ + grub-core/kern/$(DEPDIR)/$(am__dirstamp) +grub-core/tests/lib/priority_queue_unit_test-test.$(OBJEXT): \ + grub-core/tests/lib/$(am__dirstamp) \ + grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp) +grub-core/lib/priority_queue_unit_test-priority_queue.$(OBJEXT): \ + grub-core/lib/$(am__dirstamp) \ + grub-core/lib/$(DEPDIR)/$(am__dirstamp) + +priority_queue_unit_test$(EXEEXT): $(priority_queue_unit_test_OBJECTS) $(priority_queue_unit_test_DEPENDENCIES) $(EXTRA_priority_queue_unit_test_DEPENDENCIES) + @rm -f priority_queue_unit_test$(EXEEXT) + $(AM_V_CXXLD)$(priority_queue_unit_test_LINK) $(priority_queue_unit_test_OBJECTS) $(priority_queue_unit_test_LDADD) $(LIBS) +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) +install-grubconfSCRIPTS: $(grubconf_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(grubconf_SCRIPTS)'; test -n "$(grubconfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(grubconfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(grubconfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(grubconfdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(grubconfdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-grubconfSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(grubconf_SCRIPTS)'; test -n "$(grubconfdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(grubconfdir)'; $(am__uninstall_files_from_dir) +install-platformSCRIPTS: $(platform_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(platform_SCRIPTS)'; test -n "$(platformdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(platformdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(platformdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(platformdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(platformdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-platformSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(platform_SCRIPTS)'; test -n "$(platformdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(platformdir)'; $(am__uninstall_files_from_dir) +install-sbinSCRIPTS: $(sbin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(sbindir)'; $(am__uninstall_files_from_dir) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f grub-core/*.$(OBJEXT) + -rm -f grub-core/commands/*.$(OBJEXT) + -rm -f grub-core/disk/*.$(OBJEXT) + -rm -f grub-core/font/*.$(OBJEXT) + -rm -f grub-core/fs/*.$(OBJEXT) + -rm -f grub-core/fs/zfs/*.$(OBJEXT) + -rm -f grub-core/gfxmenu/*.$(OBJEXT) + -rm -f grub-core/io/*.$(OBJEXT) + -rm -f grub-core/kern/*.$(OBJEXT) + -rm -f grub-core/kern/arm/*.$(OBJEXT) + -rm -f grub-core/kern/arm64/*.$(OBJEXT) + -rm -f grub-core/kern/emu/*.$(OBJEXT) + -rm -f grub-core/kern/ia64/*.$(OBJEXT) + -rm -f grub-core/lib/*.$(OBJEXT) + -rm -f grub-core/lib/i386/pc/*.$(OBJEXT) + -rm -f grub-core/lib/libgcrypt-grub/cipher/*.$(OBJEXT) + -rm -f grub-core/lib/minilzo/*.$(OBJEXT) + -rm -f grub-core/lib/xzembed/*.$(OBJEXT) + -rm -f grub-core/loader/*.$(OBJEXT) + -rm -f grub-core/loader/i386/*.$(OBJEXT) + -rm -f grub-core/normal/*.$(OBJEXT) + -rm -f grub-core/osdep/*.$(OBJEXT) + -rm -f grub-core/osdep/devmapper/*.$(OBJEXT) + -rm -f grub-core/osdep/unix/*.$(OBJEXT) + -rm -f grub-core/partmap/*.$(OBJEXT) + -rm -f grub-core/script/*.$(OBJEXT) + -rm -f grub-core/tests/lib/*.$(OBJEXT) + -rm -f grub-core/video/*.$(OBJEXT) + -rm -f grub-core/video/fb/*.$(OBJEXT) + -rm -f tests/*.$(OBJEXT) + -rm -f tests/lib/*.$(OBJEXT) + -rm -f util/*.$(OBJEXT) + -rm -f util/ieee1275/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grub_fstest-grub_fstest_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grub_mount-grub_fstest_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrubmods_a-grub_script.tab.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrubmods_a-grub_script.yy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrubmods_a-libgrub_a_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/$(DEPDIR)/libgrubmods_a-unidata.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/grub_file-file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/grub_file-file32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/grub_file-file64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/libgrubkern_a-extcmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/libgrubmods_a-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/libgrubmods_a-ls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/libgrubmods_a-macbless.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/libgrubmods_a-testload.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/commands/$(DEPDIR)/libgrubmods_a-xnu_uuid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_file-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_fstest-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_install-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_mkrescue-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_mkstandalone-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_mount-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_render_label-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/grub_syslinux2cfg-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubkern_a-AFSplitter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubkern_a-cryptodisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubkern_a-diskfilter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubkern_a-geli.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubkern_a-ldm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubkern_a-luks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-dmraid_nvidia.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-loopback.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-lvm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid1x_linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-raid5_recover.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/disk/$(DEPDIR)/libgrubmods_a-raid6_recover.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/font/$(DEPDIR)/libgrubmods_a-font.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubkern_a-archelp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubkern_a-proc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-affs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-afs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-bfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-btrfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-cbfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-exfat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-ext2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-fat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-fshelp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-hfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-hfsplus.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-hfspluscomp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-iso9660.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-jfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-minix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-minix_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-newc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-nilfs2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfscomp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-odc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-reiserfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-romfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-sfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-squash4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-tar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-udf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/$(DEPDIR)/libgrubmods_a-xfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_fletcher.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lz4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lzjb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_sha256.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfscrypt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfsinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/gfxmenu/$(DEPDIR)/libgrubmods_a-font.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/io/$(DEPDIR)/grub_file-offset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/io/$(DEPDIR)/libgrubmods_a-bufio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/io/$(DEPDIR)/libgrubmods_a-gzio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/io/$(DEPDIR)/libgrubmods_a-lzopio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/io/$(DEPDIR)/libgrubmods_a-xzio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/cmp_test-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/cmp_test-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/date_test-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/date_test-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/example_unit_test-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/example_unit_test-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/grub_file-elf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-command.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-device.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-disk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-env.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-err.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-fs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/libgrubkern_a-partition.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/printf_test-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/printf_test-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/priority_queue_unit_test-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/$(DEPDIR)/priority_queue_unit_test-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/arm/$(DEPDIR)/libgrubmods_a-dl_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/arm64/$(DEPDIR)/libgrubmods_a-dl_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_bios_setup-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_file-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_fstest-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_glue_efi-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_install-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_install-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_macbless-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkfont-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkimage-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mklayout-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mknetdir-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkpasswd_pbkdf2-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkrelpath-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_mount-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_probe-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_render_label-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_render_label-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_script_check-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_sparc64_setup-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-mm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/kern/ia64/$(DEPDIR)/libgrubmods_a-dl_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_bios_setup-reed_solomon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_install-reed_solomon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_menulst2cfg-legacy_parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_mknetdir-reed_solomon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_mkrescue-reed_solomon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_mkstandalone-reed_solomon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_sparc64_setup-reed_solomon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-getline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-syslinux_parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubkern_a-arg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubkern_a-crypto.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubkern_a-disk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubkern_a-pbkdf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubmods_a-LzFind.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubmods_a-LzmaEnc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubmods_a-adler32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubmods_a-crc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubmods_a-crc64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubmods_a-envblk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/libgrubmods_a-hexdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/$(DEPDIR)/priority_queue_unit_test-priority_queue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/i386/pc/$(DEPDIR)/grub_menulst2cfg-vesa_modes_table.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-arcfour.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-blowfish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia-glue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-cast5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-crc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-des.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-idea.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rfc2268.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rijndael.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rmd160.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-seed.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-serpent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha256.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha512.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-tiger.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-twofish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-whirlpool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/minilzo/$(DEPDIR)/libgrubmods_a-minilzo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_bcj.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_lzma2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_stream.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/loader/$(DEPDIR)/grub_file-lzss.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/loader/$(DEPDIR)/grub_file-macho.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/loader/$(DEPDIR)/grub_file-macho32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/loader/$(DEPDIR)/grub_file-macho64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/normal/$(DEPDIR)/libgrubmods_a-charset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/normal/$(DEPDIR)/libgrubmods_a-datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/normal/$(DEPDIR)/libgrubmods_a-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_bios_setup-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_bios_setup-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_editenv-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_file-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_fstest-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_glue_efi-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-compress.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-ofpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-platform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-platform_unix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_install-random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_macbless-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_menulst2cfg-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkfont-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkimage-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkimage-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mklayout-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-compress.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-ofpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform_unix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mknetdir-random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrelpath-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-compress.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-ofpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform_unix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkrescue-random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-compress.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-ofpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform_unix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mkstandalone-random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_mount-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_ofpathname-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_ofpathname-ofpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_probe-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_probe-ofpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_render_label-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_script_check-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-ofpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/grub_syslinux2cfg-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/libgrubkern_a-exec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/libgrubkern_a-getroot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/libgrubkern_a-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/libgrubkern_a-password.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/libgrubkern_a-relpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/$(DEPDIR)/libgrubkern_a-sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-getroot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-getroot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubkern_a-gpt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubkern_a-msdos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-acorn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-amiga.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-apple.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-bsdlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-dfly.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-dvh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-plan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-sun.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/partmap/$(DEPDIR)/libgrubmods_a-sunpc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/script/$(DEPDIR)/libgrubmods_a-argv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/script/$(DEPDIR)/libgrubmods_a-function.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/script/$(DEPDIR)/libgrubmods_a-lexer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/script/$(DEPDIR)/libgrubmods_a-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/script/$(DEPDIR)/libgrubmods_a-script.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/tests/lib/$(DEPDIR)/cmp_test-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/tests/lib/$(DEPDIR)/date_test-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/tests/lib/$(DEPDIR)/example_unit_test-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/tests/lib/$(DEPDIR)/printf_test-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/tests/lib/$(DEPDIR)/priority_queue_unit_test-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/video/$(DEPDIR)/libgrubmods_a-capture.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/video/$(DEPDIR)/libgrubmods_a-colors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/video/$(DEPDIR)/libgrubmods_a-video.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbblit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbfill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbutil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@grub-core/video/fb/$(DEPDIR)/libgrubmods_a-video_fb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/cmp_test-cmp_unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/date_test-date_unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/example_unit_test-example_unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/printf_test-printf_unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/priority_queue_unit_test-priority_queue_unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/lib/$(DEPDIR)/cmp_test-unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/lib/$(DEPDIR)/date_test-unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/lib/$(DEPDIR)/example_unit_test-unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/lib/$(DEPDIR)/printf_test-unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/lib/$(DEPDIR)/priority_queue_unit_test-unit_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_bios_setup-grub-setup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_bios_setup-setup_bios.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_editenv-editenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_editenv-grub-editenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_file-grub-file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_file-render-label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_fstest-grub-fstest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_glue_efi-glue-efi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_glue_efi-grub-glue-efi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-editenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-grub-install-common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-grub-install.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-grub-mkimage32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-grub-mkimage64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-mkimage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-probe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-render-label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-resolve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-setup_bios.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_install-setup_sparc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_macbless-grub-macbless.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_macho2img-grub-macho2img.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_menulst2cfg-grub-menulst2cfg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkfont-grub-mkfont.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkimage-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkimage-grub-mkimage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkimage-grub-mkimage32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkimage-grub-mkimage64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkimage-mkimage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkimage-resolve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mklayout-grub-mklayout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-editenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-grub-install-common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-grub-mkimage32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-grub-mkimage64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-grub-mknetdir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-mkimage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-resolve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-setup_bios.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mknetdir-setup_sparc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrelpath-grub-mkrelpath.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-editenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-glue-efi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-grub-install-common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-grub-mkimage32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-grub-mkimage64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-grub-mkrescue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-mkimage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-render-label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-resolve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-setup_bios.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkrescue-setup_sparc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-config.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-editenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-glue-efi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-grub-install-common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-grub-mkimage32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-grub-mkimage64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-grub-mkstandalone.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-mkimage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-render-label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-resolve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-setup_bios.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mkstandalone-setup_sparc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_mount-grub-mount.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_probe-grub-probe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_probe-probe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_render_label-grub-render-label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_render_label-render-label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_script_check-grub-script-check.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_sparc64_setup-grub-setup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_sparc64_setup-setup_sparc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/grub_syslinux2cfg-grub-syslinux2cfg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libgrubkern_a-getroot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/$(DEPDIR)/libgrubkern_a-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@util/ieee1275/$(DEPDIR)/grub_ofpathname-grub-ofpathname.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.o: grub-core/lib/libgcrypt-grub/cipher/arcfour.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-arcfour.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/arcfour.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/arcfour.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-arcfour.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-arcfour.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/arcfour.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/arcfour.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/arcfour.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.obj: grub-core/lib/libgcrypt-grub/cipher/arcfour.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-arcfour.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/arcfour.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/arcfour.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/arcfour.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-arcfour.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-arcfour.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/arcfour.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-arcfour.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/arcfour.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/arcfour.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/arcfour.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.o: grub-core/lib/libgcrypt-grub/cipher/blowfish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-blowfish.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/blowfish.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/blowfish.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-blowfish.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-blowfish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/blowfish.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/blowfish.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/blowfish.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.obj: grub-core/lib/libgcrypt-grub/cipher/blowfish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-blowfish.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/blowfish.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/blowfish.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/blowfish.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-blowfish.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-blowfish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/blowfish.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-blowfish.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/blowfish.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/blowfish.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/blowfish.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.o: grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia-glue.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia-glue.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia-glue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.obj: grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia-glue.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia-glue.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia-glue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia-glue.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.o: grub-core/lib/libgcrypt-grub/cipher/camellia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/camellia.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/camellia.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/camellia.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.obj: grub-core/lib/libgcrypt-grub/cipher/camellia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/camellia.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/camellia.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-camellia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/camellia.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-camellia.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/camellia.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/camellia.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/camellia.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.o: grub-core/lib/libgcrypt-grub/cipher/cast5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-cast5.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/cast5.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/cast5.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-cast5.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-cast5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/cast5.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/cast5.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/cast5.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.obj: grub-core/lib/libgcrypt-grub/cipher/cast5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-cast5.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/cast5.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/cast5.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/cast5.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-cast5.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-cast5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/cast5.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-cast5.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/cast5.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/cast5.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/cast5.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.o: grub-core/lib/libgcrypt-grub/cipher/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-crc.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/crc.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/crc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-crc.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/crc.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/crc.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/crc.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.obj: grub-core/lib/libgcrypt-grub/cipher/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-crc.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/crc.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/crc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/crc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-crc.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/crc.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-crc.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/crc.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/crc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/crc.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.o: grub-core/lib/libgcrypt-grub/cipher/des.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-des.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/des.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/des.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-des.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-des.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/des.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/des.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/des.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.obj: grub-core/lib/libgcrypt-grub/cipher/des.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-des.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/des.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/des.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/des.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-des.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-des.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/des.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-des.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/des.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/des.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/des.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.o: grub-core/lib/libgcrypt-grub/cipher/idea.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-idea.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/idea.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/idea.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-idea.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-idea.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/idea.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/idea.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/idea.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.obj: grub-core/lib/libgcrypt-grub/cipher/idea.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-idea.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/idea.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/idea.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/idea.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-idea.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-idea.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/idea.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-idea.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/idea.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/idea.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/idea.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.o: grub-core/lib/libgcrypt-grub/cipher/md4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md4.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/md4.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/md4.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md4.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/md4.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/md4.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/md4.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.obj: grub-core/lib/libgcrypt-grub/cipher/md4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md4.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/md4.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/md4.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/md4.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md4.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/md4.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md4.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/md4.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/md4.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/md4.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.o: grub-core/lib/libgcrypt-grub/cipher/md5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md5.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/md5.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/md5.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md5.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/md5.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/md5.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/md5.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.obj: grub-core/lib/libgcrypt-grub/cipher/md5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md5.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/md5.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/md5.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/md5.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md5.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-md5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/md5.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-md5.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/md5.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/md5.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/md5.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.o: grub-core/lib/libgcrypt-grub/cipher/rfc2268.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rfc2268.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/rfc2268.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/rfc2268.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rfc2268.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rfc2268.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/rfc2268.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/rfc2268.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/rfc2268.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.obj: grub-core/lib/libgcrypt-grub/cipher/rfc2268.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rfc2268.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/rfc2268.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/rfc2268.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/rfc2268.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rfc2268.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rfc2268.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/rfc2268.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rfc2268.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/rfc2268.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/rfc2268.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/rfc2268.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.o: grub-core/lib/libgcrypt-grub/cipher/rijndael.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rijndael.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/rijndael.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/rijndael.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rijndael.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rijndael.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/rijndael.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/rijndael.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/rijndael.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.obj: grub-core/lib/libgcrypt-grub/cipher/rijndael.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rijndael.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/rijndael.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/rijndael.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/rijndael.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rijndael.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rijndael.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/rijndael.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rijndael.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/rijndael.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/rijndael.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/rijndael.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.o: grub-core/lib/libgcrypt-grub/cipher/rmd160.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rmd160.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/rmd160.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/rmd160.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rmd160.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rmd160.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/rmd160.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/rmd160.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/rmd160.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.obj: grub-core/lib/libgcrypt-grub/cipher/rmd160.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rmd160.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/rmd160.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/rmd160.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/rmd160.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rmd160.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-rmd160.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/rmd160.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-rmd160.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/rmd160.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/rmd160.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/rmd160.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.o: grub-core/lib/libgcrypt-grub/cipher/seed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-seed.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/seed.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/seed.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-seed.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-seed.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/seed.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/seed.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/seed.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.obj: grub-core/lib/libgcrypt-grub/cipher/seed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-seed.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/seed.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/seed.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/seed.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-seed.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-seed.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/seed.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-seed.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/seed.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/seed.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/seed.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.o: grub-core/lib/libgcrypt-grub/cipher/serpent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-serpent.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/serpent.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/serpent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-serpent.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-serpent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/serpent.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/serpent.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/serpent.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.obj: grub-core/lib/libgcrypt-grub/cipher/serpent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-serpent.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/serpent.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/serpent.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/serpent.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-serpent.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-serpent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/serpent.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-serpent.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/serpent.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/serpent.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/serpent.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.o: grub-core/lib/libgcrypt-grub/cipher/sha1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha1.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/sha1.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/sha1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha1.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/sha1.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/sha1.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/sha1.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.obj: grub-core/lib/libgcrypt-grub/cipher/sha1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha1.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/sha1.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/sha1.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/sha1.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha1.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/sha1.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha1.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/sha1.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/sha1.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/sha1.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.o: grub-core/lib/libgcrypt-grub/cipher/sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha256.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/sha256.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/sha256.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha256.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/sha256.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/sha256.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/sha256.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.obj: grub-core/lib/libgcrypt-grub/cipher/sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha256.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/sha256.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/sha256.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/sha256.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha256.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/sha256.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha256.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/sha256.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/sha256.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/sha256.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.o: grub-core/lib/libgcrypt-grub/cipher/sha512.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha512.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/sha512.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/sha512.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha512.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha512.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/sha512.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/sha512.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/sha512.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.obj: grub-core/lib/libgcrypt-grub/cipher/sha512.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha512.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/sha512.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/sha512.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/sha512.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha512.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-sha512.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/sha512.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-sha512.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/sha512.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/sha512.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/sha512.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.o: grub-core/lib/libgcrypt-grub/cipher/tiger.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-tiger.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/tiger.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/tiger.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-tiger.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-tiger.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/tiger.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/tiger.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/tiger.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.obj: grub-core/lib/libgcrypt-grub/cipher/tiger.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-tiger.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/tiger.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/tiger.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/tiger.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-tiger.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-tiger.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/tiger.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-tiger.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/tiger.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/tiger.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/tiger.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.o: grub-core/lib/libgcrypt-grub/cipher/twofish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-twofish.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/twofish.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/twofish.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-twofish.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-twofish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/twofish.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/twofish.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/twofish.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.obj: grub-core/lib/libgcrypt-grub/cipher/twofish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-twofish.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/twofish.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/twofish.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/twofish.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-twofish.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-twofish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/twofish.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-twofish.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/twofish.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/twofish.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/twofish.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.o: grub-core/lib/libgcrypt-grub/cipher/whirlpool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-whirlpool.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/whirlpool.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/whirlpool.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-whirlpool.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-whirlpool.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/whirlpool.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/whirlpool.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/whirlpool.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.obj: grub-core/lib/libgcrypt-grub/cipher/whirlpool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-whirlpool.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/whirlpool.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/whirlpool.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/whirlpool.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-whirlpool.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-whirlpool.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/whirlpool.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-whirlpool.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/whirlpool.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/whirlpool.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/whirlpool.c'; fi` + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.o: grub-core/lib/libgcrypt-grub/cipher/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.o -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-init.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/init.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-init.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/init.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.o `test -f 'grub-core/lib/libgcrypt-grub/cipher/init.c' || echo '$(srcdir)/'`grub-core/lib/libgcrypt-grub/cipher/init.c + +grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.obj: grub-core/lib/libgcrypt-grub/cipher/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.obj -MD -MP -MF grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-init.Tpo -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/init.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-init.Tpo grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/libgrubgcry_a-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/libgcrypt-grub/cipher/init.c' object='grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubgcry_a_CPPFLAGS) $(CPPFLAGS) $(libgrubgcry_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgcrypt-grub/cipher/libgrubgcry_a-init.obj `if test -f 'grub-core/lib/libgcrypt-grub/cipher/init.c'; then $(CYGPATH_W) 'grub-core/lib/libgcrypt-grub/cipher/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/libgcrypt-grub/cipher/init.c'; fi` + +util/libgrubkern_a-misc.o: util/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT util/libgrubkern_a-misc.o -MD -MP -MF util/$(DEPDIR)/libgrubkern_a-misc.Tpo -c -o util/libgrubkern_a-misc.o `test -f 'util/misc.c' || echo '$(srcdir)/'`util/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libgrubkern_a-misc.Tpo util/$(DEPDIR)/libgrubkern_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/misc.c' object='util/libgrubkern_a-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o util/libgrubkern_a-misc.o `test -f 'util/misc.c' || echo '$(srcdir)/'`util/misc.c + +util/libgrubkern_a-misc.obj: util/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT util/libgrubkern_a-misc.obj -MD -MP -MF util/$(DEPDIR)/libgrubkern_a-misc.Tpo -c -o util/libgrubkern_a-misc.obj `if test -f 'util/misc.c'; then $(CYGPATH_W) 'util/misc.c'; else $(CYGPATH_W) '$(srcdir)/util/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libgrubkern_a-misc.Tpo util/$(DEPDIR)/libgrubkern_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/misc.c' object='util/libgrubkern_a-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o util/libgrubkern_a-misc.obj `if test -f 'util/misc.c'; then $(CYGPATH_W) 'util/misc.c'; else $(CYGPATH_W) '$(srcdir)/util/misc.c'; fi` + +grub-core/kern/libgrubkern_a-command.o: grub-core/kern/command.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-command.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-command.Tpo -c -o grub-core/kern/libgrubkern_a-command.o `test -f 'grub-core/kern/command.c' || echo '$(srcdir)/'`grub-core/kern/command.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-command.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-command.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/command.c' object='grub-core/kern/libgrubkern_a-command.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-command.o `test -f 'grub-core/kern/command.c' || echo '$(srcdir)/'`grub-core/kern/command.c + +grub-core/kern/libgrubkern_a-command.obj: grub-core/kern/command.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-command.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-command.Tpo -c -o grub-core/kern/libgrubkern_a-command.obj `if test -f 'grub-core/kern/command.c'; then $(CYGPATH_W) 'grub-core/kern/command.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/command.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-command.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-command.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/command.c' object='grub-core/kern/libgrubkern_a-command.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-command.obj `if test -f 'grub-core/kern/command.c'; then $(CYGPATH_W) 'grub-core/kern/command.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/command.c'; fi` + +grub-core/kern/libgrubkern_a-device.o: grub-core/kern/device.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-device.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-device.Tpo -c -o grub-core/kern/libgrubkern_a-device.o `test -f 'grub-core/kern/device.c' || echo '$(srcdir)/'`grub-core/kern/device.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-device.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-device.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/device.c' object='grub-core/kern/libgrubkern_a-device.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-device.o `test -f 'grub-core/kern/device.c' || echo '$(srcdir)/'`grub-core/kern/device.c + +grub-core/kern/libgrubkern_a-device.obj: grub-core/kern/device.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-device.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-device.Tpo -c -o grub-core/kern/libgrubkern_a-device.obj `if test -f 'grub-core/kern/device.c'; then $(CYGPATH_W) 'grub-core/kern/device.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/device.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-device.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-device.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/device.c' object='grub-core/kern/libgrubkern_a-device.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-device.obj `if test -f 'grub-core/kern/device.c'; then $(CYGPATH_W) 'grub-core/kern/device.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/device.c'; fi` + +grub-core/kern/libgrubkern_a-disk.o: grub-core/kern/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-disk.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-disk.Tpo -c -o grub-core/kern/libgrubkern_a-disk.o `test -f 'grub-core/kern/disk.c' || echo '$(srcdir)/'`grub-core/kern/disk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-disk.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/disk.c' object='grub-core/kern/libgrubkern_a-disk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-disk.o `test -f 'grub-core/kern/disk.c' || echo '$(srcdir)/'`grub-core/kern/disk.c + +grub-core/kern/libgrubkern_a-disk.obj: grub-core/kern/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-disk.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-disk.Tpo -c -o grub-core/kern/libgrubkern_a-disk.obj `if test -f 'grub-core/kern/disk.c'; then $(CYGPATH_W) 'grub-core/kern/disk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/disk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-disk.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/disk.c' object='grub-core/kern/libgrubkern_a-disk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-disk.obj `if test -f 'grub-core/kern/disk.c'; then $(CYGPATH_W) 'grub-core/kern/disk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/disk.c'; fi` + +grub-core/lib/libgrubkern_a-disk.o: grub-core/lib/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-disk.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-disk.Tpo -c -o grub-core/lib/libgrubkern_a-disk.o `test -f 'grub-core/lib/disk.c' || echo '$(srcdir)/'`grub-core/lib/disk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-disk.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/disk.c' object='grub-core/lib/libgrubkern_a-disk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-disk.o `test -f 'grub-core/lib/disk.c' || echo '$(srcdir)/'`grub-core/lib/disk.c + +grub-core/lib/libgrubkern_a-disk.obj: grub-core/lib/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-disk.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-disk.Tpo -c -o grub-core/lib/libgrubkern_a-disk.obj `if test -f 'grub-core/lib/disk.c'; then $(CYGPATH_W) 'grub-core/lib/disk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/disk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-disk.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/disk.c' object='grub-core/lib/libgrubkern_a-disk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-disk.obj `if test -f 'grub-core/lib/disk.c'; then $(CYGPATH_W) 'grub-core/lib/disk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/disk.c'; fi` + +util/libgrubkern_a-getroot.o: util/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT util/libgrubkern_a-getroot.o -MD -MP -MF util/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o util/libgrubkern_a-getroot.o `test -f 'util/getroot.c' || echo '$(srcdir)/'`util/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libgrubkern_a-getroot.Tpo util/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/getroot.c' object='util/libgrubkern_a-getroot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o util/libgrubkern_a-getroot.o `test -f 'util/getroot.c' || echo '$(srcdir)/'`util/getroot.c + +util/libgrubkern_a-getroot.obj: util/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT util/libgrubkern_a-getroot.obj -MD -MP -MF util/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o util/libgrubkern_a-getroot.obj `if test -f 'util/getroot.c'; then $(CYGPATH_W) 'util/getroot.c'; else $(CYGPATH_W) '$(srcdir)/util/getroot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/libgrubkern_a-getroot.Tpo util/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/getroot.c' object='util/libgrubkern_a-getroot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o util/libgrubkern_a-getroot.obj `if test -f 'util/getroot.c'; then $(CYGPATH_W) 'util/getroot.c'; else $(CYGPATH_W) '$(srcdir)/util/getroot.c'; fi` + +grub-core/osdep/unix/libgrubkern_a-getroot.o: grub-core/osdep/unix/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/unix/libgrubkern_a-getroot.o -MD -MP -MF grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o grub-core/osdep/unix/libgrubkern_a-getroot.o `test -f 'grub-core/osdep/unix/getroot.c' || echo '$(srcdir)/'`grub-core/osdep/unix/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-getroot.Tpo grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/unix/getroot.c' object='grub-core/osdep/unix/libgrubkern_a-getroot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/unix/libgrubkern_a-getroot.o `test -f 'grub-core/osdep/unix/getroot.c' || echo '$(srcdir)/'`grub-core/osdep/unix/getroot.c + +grub-core/osdep/unix/libgrubkern_a-getroot.obj: grub-core/osdep/unix/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/unix/libgrubkern_a-getroot.obj -MD -MP -MF grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o grub-core/osdep/unix/libgrubkern_a-getroot.obj `if test -f 'grub-core/osdep/unix/getroot.c'; then $(CYGPATH_W) 'grub-core/osdep/unix/getroot.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/unix/getroot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-getroot.Tpo grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/unix/getroot.c' object='grub-core/osdep/unix/libgrubkern_a-getroot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/unix/libgrubkern_a-getroot.obj `if test -f 'grub-core/osdep/unix/getroot.c'; then $(CYGPATH_W) 'grub-core/osdep/unix/getroot.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/unix/getroot.c'; fi` + +grub-core/osdep/libgrubkern_a-getroot.o: grub-core/osdep/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-getroot.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o grub-core/osdep/libgrubkern_a-getroot.o `test -f 'grub-core/osdep/getroot.c' || echo '$(srcdir)/'`grub-core/osdep/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-getroot.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/getroot.c' object='grub-core/osdep/libgrubkern_a-getroot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-getroot.o `test -f 'grub-core/osdep/getroot.c' || echo '$(srcdir)/'`grub-core/osdep/getroot.c + +grub-core/osdep/libgrubkern_a-getroot.obj: grub-core/osdep/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-getroot.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o grub-core/osdep/libgrubkern_a-getroot.obj `if test -f 'grub-core/osdep/getroot.c'; then $(CYGPATH_W) 'grub-core/osdep/getroot.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/getroot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-getroot.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/getroot.c' object='grub-core/osdep/libgrubkern_a-getroot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-getroot.obj `if test -f 'grub-core/osdep/getroot.c'; then $(CYGPATH_W) 'grub-core/osdep/getroot.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/getroot.c'; fi` + +grub-core/osdep/devmapper/libgrubkern_a-getroot.o: grub-core/osdep/devmapper/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/devmapper/libgrubkern_a-getroot.o -MD -MP -MF grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o grub-core/osdep/devmapper/libgrubkern_a-getroot.o `test -f 'grub-core/osdep/devmapper/getroot.c' || echo '$(srcdir)/'`grub-core/osdep/devmapper/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-getroot.Tpo grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/devmapper/getroot.c' object='grub-core/osdep/devmapper/libgrubkern_a-getroot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/devmapper/libgrubkern_a-getroot.o `test -f 'grub-core/osdep/devmapper/getroot.c' || echo '$(srcdir)/'`grub-core/osdep/devmapper/getroot.c + +grub-core/osdep/devmapper/libgrubkern_a-getroot.obj: grub-core/osdep/devmapper/getroot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/devmapper/libgrubkern_a-getroot.obj -MD -MP -MF grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-getroot.Tpo -c -o grub-core/osdep/devmapper/libgrubkern_a-getroot.obj `if test -f 'grub-core/osdep/devmapper/getroot.c'; then $(CYGPATH_W) 'grub-core/osdep/devmapper/getroot.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/devmapper/getroot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-getroot.Tpo grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-getroot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/devmapper/getroot.c' object='grub-core/osdep/devmapper/libgrubkern_a-getroot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/devmapper/libgrubkern_a-getroot.obj `if test -f 'grub-core/osdep/devmapper/getroot.c'; then $(CYGPATH_W) 'grub-core/osdep/devmapper/getroot.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/devmapper/getroot.c'; fi` + +grub-core/osdep/libgrubkern_a-relpath.o: grub-core/osdep/relpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-relpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-relpath.Tpo -c -o grub-core/osdep/libgrubkern_a-relpath.o `test -f 'grub-core/osdep/relpath.c' || echo '$(srcdir)/'`grub-core/osdep/relpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-relpath.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-relpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/relpath.c' object='grub-core/osdep/libgrubkern_a-relpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-relpath.o `test -f 'grub-core/osdep/relpath.c' || echo '$(srcdir)/'`grub-core/osdep/relpath.c + +grub-core/osdep/libgrubkern_a-relpath.obj: grub-core/osdep/relpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-relpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-relpath.Tpo -c -o grub-core/osdep/libgrubkern_a-relpath.obj `if test -f 'grub-core/osdep/relpath.c'; then $(CYGPATH_W) 'grub-core/osdep/relpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/relpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-relpath.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-relpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/relpath.c' object='grub-core/osdep/libgrubkern_a-relpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-relpath.obj `if test -f 'grub-core/osdep/relpath.c'; then $(CYGPATH_W) 'grub-core/osdep/relpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/relpath.c'; fi` + +grub-core/kern/emu/libgrubkern_a-hostdisk.o: grub-core/kern/emu/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/libgrubkern_a-hostdisk.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/kern/emu/libgrubkern_a-hostdisk.o `test -f 'grub-core/kern/emu/hostdisk.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostdisk.c' object='grub-core/kern/emu/libgrubkern_a-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/libgrubkern_a-hostdisk.o `test -f 'grub-core/kern/emu/hostdisk.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostdisk.c + +grub-core/kern/emu/libgrubkern_a-hostdisk.obj: grub-core/kern/emu/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/libgrubkern_a-hostdisk.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/kern/emu/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/kern/emu/hostdisk.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostdisk.c' object='grub-core/kern/emu/libgrubkern_a-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/kern/emu/hostdisk.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostdisk.c'; fi` + +grub-core/osdep/devmapper/libgrubkern_a-hostdisk.o: grub-core/osdep/devmapper/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/devmapper/libgrubkern_a-hostdisk.o -MD -MP -MF grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/osdep/devmapper/libgrubkern_a-hostdisk.o `test -f 'grub-core/osdep/devmapper/hostdisk.c' || echo '$(srcdir)/'`grub-core/osdep/devmapper/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/devmapper/hostdisk.c' object='grub-core/osdep/devmapper/libgrubkern_a-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/devmapper/libgrubkern_a-hostdisk.o `test -f 'grub-core/osdep/devmapper/hostdisk.c' || echo '$(srcdir)/'`grub-core/osdep/devmapper/hostdisk.c + +grub-core/osdep/devmapper/libgrubkern_a-hostdisk.obj: grub-core/osdep/devmapper/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/devmapper/libgrubkern_a-hostdisk.obj -MD -MP -MF grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/osdep/devmapper/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/osdep/devmapper/hostdisk.c'; then $(CYGPATH_W) 'grub-core/osdep/devmapper/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/devmapper/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/osdep/devmapper/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/devmapper/hostdisk.c' object='grub-core/osdep/devmapper/libgrubkern_a-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/devmapper/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/osdep/devmapper/hostdisk.c'; then $(CYGPATH_W) 'grub-core/osdep/devmapper/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/devmapper/hostdisk.c'; fi` + +grub-core/osdep/libgrubkern_a-hostdisk.o: grub-core/osdep/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-hostdisk.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/osdep/libgrubkern_a-hostdisk.o `test -f 'grub-core/osdep/hostdisk.c' || echo '$(srcdir)/'`grub-core/osdep/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/hostdisk.c' object='grub-core/osdep/libgrubkern_a-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-hostdisk.o `test -f 'grub-core/osdep/hostdisk.c' || echo '$(srcdir)/'`grub-core/osdep/hostdisk.c + +grub-core/osdep/libgrubkern_a-hostdisk.obj: grub-core/osdep/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-hostdisk.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/osdep/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/osdep/hostdisk.c'; then $(CYGPATH_W) 'grub-core/osdep/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/hostdisk.c' object='grub-core/osdep/libgrubkern_a-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/osdep/hostdisk.c'; then $(CYGPATH_W) 'grub-core/osdep/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/hostdisk.c'; fi` + +grub-core/osdep/unix/libgrubkern_a-hostdisk.o: grub-core/osdep/unix/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/unix/libgrubkern_a-hostdisk.o -MD -MP -MF grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/osdep/unix/libgrubkern_a-hostdisk.o `test -f 'grub-core/osdep/unix/hostdisk.c' || echo '$(srcdir)/'`grub-core/osdep/unix/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/unix/hostdisk.c' object='grub-core/osdep/unix/libgrubkern_a-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/unix/libgrubkern_a-hostdisk.o `test -f 'grub-core/osdep/unix/hostdisk.c' || echo '$(srcdir)/'`grub-core/osdep/unix/hostdisk.c + +grub-core/osdep/unix/libgrubkern_a-hostdisk.obj: grub-core/osdep/unix/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/unix/libgrubkern_a-hostdisk.obj -MD -MP -MF grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo -c -o grub-core/osdep/unix/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/osdep/unix/hostdisk.c'; then $(CYGPATH_W) 'grub-core/osdep/unix/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/unix/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-hostdisk.Tpo grub-core/osdep/unix/$(DEPDIR)/libgrubkern_a-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/unix/hostdisk.c' object='grub-core/osdep/unix/libgrubkern_a-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/unix/libgrubkern_a-hostdisk.obj `if test -f 'grub-core/osdep/unix/hostdisk.c'; then $(CYGPATH_W) 'grub-core/osdep/unix/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/unix/hostdisk.c'; fi` + +grub-core/osdep/libgrubkern_a-exec.o: grub-core/osdep/exec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-exec.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-exec.Tpo -c -o grub-core/osdep/libgrubkern_a-exec.o `test -f 'grub-core/osdep/exec.c' || echo '$(srcdir)/'`grub-core/osdep/exec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-exec.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-exec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/exec.c' object='grub-core/osdep/libgrubkern_a-exec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-exec.o `test -f 'grub-core/osdep/exec.c' || echo '$(srcdir)/'`grub-core/osdep/exec.c + +grub-core/osdep/libgrubkern_a-exec.obj: grub-core/osdep/exec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-exec.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-exec.Tpo -c -o grub-core/osdep/libgrubkern_a-exec.obj `if test -f 'grub-core/osdep/exec.c'; then $(CYGPATH_W) 'grub-core/osdep/exec.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/exec.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-exec.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-exec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/exec.c' object='grub-core/osdep/libgrubkern_a-exec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-exec.obj `if test -f 'grub-core/osdep/exec.c'; then $(CYGPATH_W) 'grub-core/osdep/exec.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/exec.c'; fi` + +grub-core/osdep/libgrubkern_a-sleep.o: grub-core/osdep/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-sleep.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-sleep.Tpo -c -o grub-core/osdep/libgrubkern_a-sleep.o `test -f 'grub-core/osdep/sleep.c' || echo '$(srcdir)/'`grub-core/osdep/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-sleep.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-sleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/sleep.c' object='grub-core/osdep/libgrubkern_a-sleep.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-sleep.o `test -f 'grub-core/osdep/sleep.c' || echo '$(srcdir)/'`grub-core/osdep/sleep.c + +grub-core/osdep/libgrubkern_a-sleep.obj: grub-core/osdep/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-sleep.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-sleep.Tpo -c -o grub-core/osdep/libgrubkern_a-sleep.obj `if test -f 'grub-core/osdep/sleep.c'; then $(CYGPATH_W) 'grub-core/osdep/sleep.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/sleep.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-sleep.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-sleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/sleep.c' object='grub-core/osdep/libgrubkern_a-sleep.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-sleep.obj `if test -f 'grub-core/osdep/sleep.c'; then $(CYGPATH_W) 'grub-core/osdep/sleep.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/sleep.c'; fi` + +grub-core/osdep/libgrubkern_a-password.o: grub-core/osdep/password.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-password.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-password.Tpo -c -o grub-core/osdep/libgrubkern_a-password.o `test -f 'grub-core/osdep/password.c' || echo '$(srcdir)/'`grub-core/osdep/password.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-password.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-password.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/password.c' object='grub-core/osdep/libgrubkern_a-password.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-password.o `test -f 'grub-core/osdep/password.c' || echo '$(srcdir)/'`grub-core/osdep/password.c + +grub-core/osdep/libgrubkern_a-password.obj: grub-core/osdep/password.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/osdep/libgrubkern_a-password.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/libgrubkern_a-password.Tpo -c -o grub-core/osdep/libgrubkern_a-password.obj `if test -f 'grub-core/osdep/password.c'; then $(CYGPATH_W) 'grub-core/osdep/password.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/password.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/libgrubkern_a-password.Tpo grub-core/osdep/$(DEPDIR)/libgrubkern_a-password.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/password.c' object='grub-core/osdep/libgrubkern_a-password.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/libgrubkern_a-password.obj `if test -f 'grub-core/osdep/password.c'; then $(CYGPATH_W) 'grub-core/osdep/password.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/password.c'; fi` + +grub-core/kern/emu/libgrubkern_a-misc.o: grub-core/kern/emu/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/libgrubkern_a-misc.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-misc.Tpo -c -o grub-core/kern/emu/libgrubkern_a-misc.o `test -f 'grub-core/kern/emu/misc.c' || echo '$(srcdir)/'`grub-core/kern/emu/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-misc.Tpo grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/misc.c' object='grub-core/kern/emu/libgrubkern_a-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/libgrubkern_a-misc.o `test -f 'grub-core/kern/emu/misc.c' || echo '$(srcdir)/'`grub-core/kern/emu/misc.c + +grub-core/kern/emu/libgrubkern_a-misc.obj: grub-core/kern/emu/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/libgrubkern_a-misc.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-misc.Tpo -c -o grub-core/kern/emu/libgrubkern_a-misc.obj `if test -f 'grub-core/kern/emu/misc.c'; then $(CYGPATH_W) 'grub-core/kern/emu/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-misc.Tpo grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/misc.c' object='grub-core/kern/emu/libgrubkern_a-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/libgrubkern_a-misc.obj `if test -f 'grub-core/kern/emu/misc.c'; then $(CYGPATH_W) 'grub-core/kern/emu/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/misc.c'; fi` + +grub-core/kern/emu/libgrubkern_a-mm.o: grub-core/kern/emu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/libgrubkern_a-mm.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-mm.Tpo -c -o grub-core/kern/emu/libgrubkern_a-mm.o `test -f 'grub-core/kern/emu/mm.c' || echo '$(srcdir)/'`grub-core/kern/emu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-mm.Tpo grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/mm.c' object='grub-core/kern/emu/libgrubkern_a-mm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/libgrubkern_a-mm.o `test -f 'grub-core/kern/emu/mm.c' || echo '$(srcdir)/'`grub-core/kern/emu/mm.c + +grub-core/kern/emu/libgrubkern_a-mm.obj: grub-core/kern/emu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/libgrubkern_a-mm.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-mm.Tpo -c -o grub-core/kern/emu/libgrubkern_a-mm.obj `if test -f 'grub-core/kern/emu/mm.c'; then $(CYGPATH_W) 'grub-core/kern/emu/mm.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/mm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-mm.Tpo grub-core/kern/emu/$(DEPDIR)/libgrubkern_a-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/mm.c' object='grub-core/kern/emu/libgrubkern_a-mm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/libgrubkern_a-mm.obj `if test -f 'grub-core/kern/emu/mm.c'; then $(CYGPATH_W) 'grub-core/kern/emu/mm.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/mm.c'; fi` + +grub-core/kern/libgrubkern_a-env.o: grub-core/kern/env.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-env.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-env.Tpo -c -o grub-core/kern/libgrubkern_a-env.o `test -f 'grub-core/kern/env.c' || echo '$(srcdir)/'`grub-core/kern/env.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-env.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-env.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/env.c' object='grub-core/kern/libgrubkern_a-env.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-env.o `test -f 'grub-core/kern/env.c' || echo '$(srcdir)/'`grub-core/kern/env.c + +grub-core/kern/libgrubkern_a-env.obj: grub-core/kern/env.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-env.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-env.Tpo -c -o grub-core/kern/libgrubkern_a-env.obj `if test -f 'grub-core/kern/env.c'; then $(CYGPATH_W) 'grub-core/kern/env.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/env.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-env.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-env.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/env.c' object='grub-core/kern/libgrubkern_a-env.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-env.obj `if test -f 'grub-core/kern/env.c'; then $(CYGPATH_W) 'grub-core/kern/env.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/env.c'; fi` + +grub-core/kern/libgrubkern_a-err.o: grub-core/kern/err.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-err.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-err.Tpo -c -o grub-core/kern/libgrubkern_a-err.o `test -f 'grub-core/kern/err.c' || echo '$(srcdir)/'`grub-core/kern/err.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-err.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-err.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/err.c' object='grub-core/kern/libgrubkern_a-err.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-err.o `test -f 'grub-core/kern/err.c' || echo '$(srcdir)/'`grub-core/kern/err.c + +grub-core/kern/libgrubkern_a-err.obj: grub-core/kern/err.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-err.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-err.Tpo -c -o grub-core/kern/libgrubkern_a-err.obj `if test -f 'grub-core/kern/err.c'; then $(CYGPATH_W) 'grub-core/kern/err.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/err.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-err.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-err.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/err.c' object='grub-core/kern/libgrubkern_a-err.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-err.obj `if test -f 'grub-core/kern/err.c'; then $(CYGPATH_W) 'grub-core/kern/err.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/err.c'; fi` + +grub-core/kern/libgrubkern_a-file.o: grub-core/kern/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-file.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-file.Tpo -c -o grub-core/kern/libgrubkern_a-file.o `test -f 'grub-core/kern/file.c' || echo '$(srcdir)/'`grub-core/kern/file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-file.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/file.c' object='grub-core/kern/libgrubkern_a-file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-file.o `test -f 'grub-core/kern/file.c' || echo '$(srcdir)/'`grub-core/kern/file.c + +grub-core/kern/libgrubkern_a-file.obj: grub-core/kern/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-file.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-file.Tpo -c -o grub-core/kern/libgrubkern_a-file.obj `if test -f 'grub-core/kern/file.c'; then $(CYGPATH_W) 'grub-core/kern/file.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-file.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/file.c' object='grub-core/kern/libgrubkern_a-file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-file.obj `if test -f 'grub-core/kern/file.c'; then $(CYGPATH_W) 'grub-core/kern/file.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/file.c'; fi` + +grub-core/kern/libgrubkern_a-fs.o: grub-core/kern/fs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-fs.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-fs.Tpo -c -o grub-core/kern/libgrubkern_a-fs.o `test -f 'grub-core/kern/fs.c' || echo '$(srcdir)/'`grub-core/kern/fs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-fs.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-fs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/fs.c' object='grub-core/kern/libgrubkern_a-fs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-fs.o `test -f 'grub-core/kern/fs.c' || echo '$(srcdir)/'`grub-core/kern/fs.c + +grub-core/kern/libgrubkern_a-fs.obj: grub-core/kern/fs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-fs.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-fs.Tpo -c -o grub-core/kern/libgrubkern_a-fs.obj `if test -f 'grub-core/kern/fs.c'; then $(CYGPATH_W) 'grub-core/kern/fs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/fs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-fs.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-fs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/fs.c' object='grub-core/kern/libgrubkern_a-fs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-fs.obj `if test -f 'grub-core/kern/fs.c'; then $(CYGPATH_W) 'grub-core/kern/fs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/fs.c'; fi` + +grub-core/kern/libgrubkern_a-list.o: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-list.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-list.Tpo -c -o grub-core/kern/libgrubkern_a-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-list.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/libgrubkern_a-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c + +grub-core/kern/libgrubkern_a-list.obj: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-list.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-list.Tpo -c -o grub-core/kern/libgrubkern_a-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-list.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/libgrubkern_a-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` + +grub-core/kern/libgrubkern_a-misc.o: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-misc.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-misc.Tpo -c -o grub-core/kern/libgrubkern_a-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-misc.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/libgrubkern_a-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c + +grub-core/kern/libgrubkern_a-misc.obj: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-misc.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-misc.Tpo -c -o grub-core/kern/libgrubkern_a-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-misc.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/libgrubkern_a-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` + +grub-core/kern/libgrubkern_a-partition.o: grub-core/kern/partition.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-partition.o -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-partition.Tpo -c -o grub-core/kern/libgrubkern_a-partition.o `test -f 'grub-core/kern/partition.c' || echo '$(srcdir)/'`grub-core/kern/partition.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-partition.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-partition.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/partition.c' object='grub-core/kern/libgrubkern_a-partition.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-partition.o `test -f 'grub-core/kern/partition.c' || echo '$(srcdir)/'`grub-core/kern/partition.c + +grub-core/kern/libgrubkern_a-partition.obj: grub-core/kern/partition.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/libgrubkern_a-partition.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/libgrubkern_a-partition.Tpo -c -o grub-core/kern/libgrubkern_a-partition.obj `if test -f 'grub-core/kern/partition.c'; then $(CYGPATH_W) 'grub-core/kern/partition.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/partition.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/libgrubkern_a-partition.Tpo grub-core/kern/$(DEPDIR)/libgrubkern_a-partition.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/partition.c' object='grub-core/kern/libgrubkern_a-partition.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/libgrubkern_a-partition.obj `if test -f 'grub-core/kern/partition.c'; then $(CYGPATH_W) 'grub-core/kern/partition.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/partition.c'; fi` + +grub-core/lib/libgrubkern_a-crypto.o: grub-core/lib/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-crypto.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-crypto.Tpo -c -o grub-core/lib/libgrubkern_a-crypto.o `test -f 'grub-core/lib/crypto.c' || echo '$(srcdir)/'`grub-core/lib/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-crypto.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-crypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/crypto.c' object='grub-core/lib/libgrubkern_a-crypto.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-crypto.o `test -f 'grub-core/lib/crypto.c' || echo '$(srcdir)/'`grub-core/lib/crypto.c + +grub-core/lib/libgrubkern_a-crypto.obj: grub-core/lib/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-crypto.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-crypto.Tpo -c -o grub-core/lib/libgrubkern_a-crypto.obj `if test -f 'grub-core/lib/crypto.c'; then $(CYGPATH_W) 'grub-core/lib/crypto.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/crypto.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-crypto.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-crypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/crypto.c' object='grub-core/lib/libgrubkern_a-crypto.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-crypto.obj `if test -f 'grub-core/lib/crypto.c'; then $(CYGPATH_W) 'grub-core/lib/crypto.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/crypto.c'; fi` + +grub-core/disk/libgrubkern_a-luks.o: grub-core/disk/luks.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-luks.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-luks.Tpo -c -o grub-core/disk/libgrubkern_a-luks.o `test -f 'grub-core/disk/luks.c' || echo '$(srcdir)/'`grub-core/disk/luks.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-luks.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-luks.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/luks.c' object='grub-core/disk/libgrubkern_a-luks.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-luks.o `test -f 'grub-core/disk/luks.c' || echo '$(srcdir)/'`grub-core/disk/luks.c + +grub-core/disk/libgrubkern_a-luks.obj: grub-core/disk/luks.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-luks.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-luks.Tpo -c -o grub-core/disk/libgrubkern_a-luks.obj `if test -f 'grub-core/disk/luks.c'; then $(CYGPATH_W) 'grub-core/disk/luks.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/luks.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-luks.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-luks.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/luks.c' object='grub-core/disk/libgrubkern_a-luks.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-luks.obj `if test -f 'grub-core/disk/luks.c'; then $(CYGPATH_W) 'grub-core/disk/luks.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/luks.c'; fi` + +grub-core/disk/libgrubkern_a-geli.o: grub-core/disk/geli.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-geli.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-geli.Tpo -c -o grub-core/disk/libgrubkern_a-geli.o `test -f 'grub-core/disk/geli.c' || echo '$(srcdir)/'`grub-core/disk/geli.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-geli.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-geli.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/geli.c' object='grub-core/disk/libgrubkern_a-geli.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-geli.o `test -f 'grub-core/disk/geli.c' || echo '$(srcdir)/'`grub-core/disk/geli.c + +grub-core/disk/libgrubkern_a-geli.obj: grub-core/disk/geli.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-geli.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-geli.Tpo -c -o grub-core/disk/libgrubkern_a-geli.obj `if test -f 'grub-core/disk/geli.c'; then $(CYGPATH_W) 'grub-core/disk/geli.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/geli.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-geli.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-geli.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/geli.c' object='grub-core/disk/libgrubkern_a-geli.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-geli.obj `if test -f 'grub-core/disk/geli.c'; then $(CYGPATH_W) 'grub-core/disk/geli.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/geli.c'; fi` + +grub-core/disk/libgrubkern_a-cryptodisk.o: grub-core/disk/cryptodisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-cryptodisk.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-cryptodisk.Tpo -c -o grub-core/disk/libgrubkern_a-cryptodisk.o `test -f 'grub-core/disk/cryptodisk.c' || echo '$(srcdir)/'`grub-core/disk/cryptodisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-cryptodisk.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-cryptodisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/cryptodisk.c' object='grub-core/disk/libgrubkern_a-cryptodisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-cryptodisk.o `test -f 'grub-core/disk/cryptodisk.c' || echo '$(srcdir)/'`grub-core/disk/cryptodisk.c + +grub-core/disk/libgrubkern_a-cryptodisk.obj: grub-core/disk/cryptodisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-cryptodisk.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-cryptodisk.Tpo -c -o grub-core/disk/libgrubkern_a-cryptodisk.obj `if test -f 'grub-core/disk/cryptodisk.c'; then $(CYGPATH_W) 'grub-core/disk/cryptodisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/cryptodisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-cryptodisk.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-cryptodisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/cryptodisk.c' object='grub-core/disk/libgrubkern_a-cryptodisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-cryptodisk.obj `if test -f 'grub-core/disk/cryptodisk.c'; then $(CYGPATH_W) 'grub-core/disk/cryptodisk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/cryptodisk.c'; fi` + +grub-core/disk/libgrubkern_a-AFSplitter.o: grub-core/disk/AFSplitter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-AFSplitter.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-AFSplitter.Tpo -c -o grub-core/disk/libgrubkern_a-AFSplitter.o `test -f 'grub-core/disk/AFSplitter.c' || echo '$(srcdir)/'`grub-core/disk/AFSplitter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-AFSplitter.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-AFSplitter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/AFSplitter.c' object='grub-core/disk/libgrubkern_a-AFSplitter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-AFSplitter.o `test -f 'grub-core/disk/AFSplitter.c' || echo '$(srcdir)/'`grub-core/disk/AFSplitter.c + +grub-core/disk/libgrubkern_a-AFSplitter.obj: grub-core/disk/AFSplitter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-AFSplitter.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-AFSplitter.Tpo -c -o grub-core/disk/libgrubkern_a-AFSplitter.obj `if test -f 'grub-core/disk/AFSplitter.c'; then $(CYGPATH_W) 'grub-core/disk/AFSplitter.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/AFSplitter.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-AFSplitter.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-AFSplitter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/AFSplitter.c' object='grub-core/disk/libgrubkern_a-AFSplitter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-AFSplitter.obj `if test -f 'grub-core/disk/AFSplitter.c'; then $(CYGPATH_W) 'grub-core/disk/AFSplitter.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/AFSplitter.c'; fi` + +grub-core/lib/libgrubkern_a-pbkdf2.o: grub-core/lib/pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-pbkdf2.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-pbkdf2.Tpo -c -o grub-core/lib/libgrubkern_a-pbkdf2.o `test -f 'grub-core/lib/pbkdf2.c' || echo '$(srcdir)/'`grub-core/lib/pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-pbkdf2.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/pbkdf2.c' object='grub-core/lib/libgrubkern_a-pbkdf2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-pbkdf2.o `test -f 'grub-core/lib/pbkdf2.c' || echo '$(srcdir)/'`grub-core/lib/pbkdf2.c + +grub-core/lib/libgrubkern_a-pbkdf2.obj: grub-core/lib/pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-pbkdf2.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-pbkdf2.Tpo -c -o grub-core/lib/libgrubkern_a-pbkdf2.obj `if test -f 'grub-core/lib/pbkdf2.c'; then $(CYGPATH_W) 'grub-core/lib/pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/pbkdf2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-pbkdf2.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/pbkdf2.c' object='grub-core/lib/libgrubkern_a-pbkdf2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-pbkdf2.obj `if test -f 'grub-core/lib/pbkdf2.c'; then $(CYGPATH_W) 'grub-core/lib/pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/pbkdf2.c'; fi` + +grub-core/commands/libgrubkern_a-extcmd.o: grub-core/commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubkern_a-extcmd.o -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubkern_a-extcmd.Tpo -c -o grub-core/commands/libgrubkern_a-extcmd.o `test -f 'grub-core/commands/extcmd.c' || echo '$(srcdir)/'`grub-core/commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubkern_a-extcmd.Tpo grub-core/commands/$(DEPDIR)/libgrubkern_a-extcmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/extcmd.c' object='grub-core/commands/libgrubkern_a-extcmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubkern_a-extcmd.o `test -f 'grub-core/commands/extcmd.c' || echo '$(srcdir)/'`grub-core/commands/extcmd.c + +grub-core/commands/libgrubkern_a-extcmd.obj: grub-core/commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubkern_a-extcmd.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubkern_a-extcmd.Tpo -c -o grub-core/commands/libgrubkern_a-extcmd.obj `if test -f 'grub-core/commands/extcmd.c'; then $(CYGPATH_W) 'grub-core/commands/extcmd.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/extcmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubkern_a-extcmd.Tpo grub-core/commands/$(DEPDIR)/libgrubkern_a-extcmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/extcmd.c' object='grub-core/commands/libgrubkern_a-extcmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubkern_a-extcmd.obj `if test -f 'grub-core/commands/extcmd.c'; then $(CYGPATH_W) 'grub-core/commands/extcmd.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/extcmd.c'; fi` + +grub-core/lib/libgrubkern_a-arg.o: grub-core/lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-arg.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-arg.Tpo -c -o grub-core/lib/libgrubkern_a-arg.o `test -f 'grub-core/lib/arg.c' || echo '$(srcdir)/'`grub-core/lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-arg.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-arg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/arg.c' object='grub-core/lib/libgrubkern_a-arg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-arg.o `test -f 'grub-core/lib/arg.c' || echo '$(srcdir)/'`grub-core/lib/arg.c + +grub-core/lib/libgrubkern_a-arg.obj: grub-core/lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubkern_a-arg.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubkern_a-arg.Tpo -c -o grub-core/lib/libgrubkern_a-arg.obj `if test -f 'grub-core/lib/arg.c'; then $(CYGPATH_W) 'grub-core/lib/arg.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/arg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubkern_a-arg.Tpo grub-core/lib/$(DEPDIR)/libgrubkern_a-arg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/arg.c' object='grub-core/lib/libgrubkern_a-arg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubkern_a-arg.obj `if test -f 'grub-core/lib/arg.c'; then $(CYGPATH_W) 'grub-core/lib/arg.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/arg.c'; fi` + +grub-core/disk/libgrubkern_a-ldm.o: grub-core/disk/ldm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-ldm.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-ldm.Tpo -c -o grub-core/disk/libgrubkern_a-ldm.o `test -f 'grub-core/disk/ldm.c' || echo '$(srcdir)/'`grub-core/disk/ldm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-ldm.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-ldm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/ldm.c' object='grub-core/disk/libgrubkern_a-ldm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-ldm.o `test -f 'grub-core/disk/ldm.c' || echo '$(srcdir)/'`grub-core/disk/ldm.c + +grub-core/disk/libgrubkern_a-ldm.obj: grub-core/disk/ldm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-ldm.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-ldm.Tpo -c -o grub-core/disk/libgrubkern_a-ldm.obj `if test -f 'grub-core/disk/ldm.c'; then $(CYGPATH_W) 'grub-core/disk/ldm.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/ldm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-ldm.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-ldm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/ldm.c' object='grub-core/disk/libgrubkern_a-ldm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-ldm.obj `if test -f 'grub-core/disk/ldm.c'; then $(CYGPATH_W) 'grub-core/disk/ldm.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/ldm.c'; fi` + +grub-core/disk/libgrubkern_a-diskfilter.o: grub-core/disk/diskfilter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-diskfilter.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-diskfilter.Tpo -c -o grub-core/disk/libgrubkern_a-diskfilter.o `test -f 'grub-core/disk/diskfilter.c' || echo '$(srcdir)/'`grub-core/disk/diskfilter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-diskfilter.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-diskfilter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/diskfilter.c' object='grub-core/disk/libgrubkern_a-diskfilter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-diskfilter.o `test -f 'grub-core/disk/diskfilter.c' || echo '$(srcdir)/'`grub-core/disk/diskfilter.c + +grub-core/disk/libgrubkern_a-diskfilter.obj: grub-core/disk/diskfilter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubkern_a-diskfilter.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubkern_a-diskfilter.Tpo -c -o grub-core/disk/libgrubkern_a-diskfilter.obj `if test -f 'grub-core/disk/diskfilter.c'; then $(CYGPATH_W) 'grub-core/disk/diskfilter.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/diskfilter.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubkern_a-diskfilter.Tpo grub-core/disk/$(DEPDIR)/libgrubkern_a-diskfilter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/diskfilter.c' object='grub-core/disk/libgrubkern_a-diskfilter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubkern_a-diskfilter.obj `if test -f 'grub-core/disk/diskfilter.c'; then $(CYGPATH_W) 'grub-core/disk/diskfilter.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/diskfilter.c'; fi` + +grub-core/partmap/libgrubkern_a-gpt.o: grub-core/partmap/gpt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubkern_a-gpt.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubkern_a-gpt.Tpo -c -o grub-core/partmap/libgrubkern_a-gpt.o `test -f 'grub-core/partmap/gpt.c' || echo '$(srcdir)/'`grub-core/partmap/gpt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubkern_a-gpt.Tpo grub-core/partmap/$(DEPDIR)/libgrubkern_a-gpt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/gpt.c' object='grub-core/partmap/libgrubkern_a-gpt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubkern_a-gpt.o `test -f 'grub-core/partmap/gpt.c' || echo '$(srcdir)/'`grub-core/partmap/gpt.c + +grub-core/partmap/libgrubkern_a-gpt.obj: grub-core/partmap/gpt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubkern_a-gpt.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubkern_a-gpt.Tpo -c -o grub-core/partmap/libgrubkern_a-gpt.obj `if test -f 'grub-core/partmap/gpt.c'; then $(CYGPATH_W) 'grub-core/partmap/gpt.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/gpt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubkern_a-gpt.Tpo grub-core/partmap/$(DEPDIR)/libgrubkern_a-gpt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/gpt.c' object='grub-core/partmap/libgrubkern_a-gpt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubkern_a-gpt.obj `if test -f 'grub-core/partmap/gpt.c'; then $(CYGPATH_W) 'grub-core/partmap/gpt.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/gpt.c'; fi` + +grub-core/partmap/libgrubkern_a-msdos.o: grub-core/partmap/msdos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubkern_a-msdos.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubkern_a-msdos.Tpo -c -o grub-core/partmap/libgrubkern_a-msdos.o `test -f 'grub-core/partmap/msdos.c' || echo '$(srcdir)/'`grub-core/partmap/msdos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubkern_a-msdos.Tpo grub-core/partmap/$(DEPDIR)/libgrubkern_a-msdos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/msdos.c' object='grub-core/partmap/libgrubkern_a-msdos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubkern_a-msdos.o `test -f 'grub-core/partmap/msdos.c' || echo '$(srcdir)/'`grub-core/partmap/msdos.c + +grub-core/partmap/libgrubkern_a-msdos.obj: grub-core/partmap/msdos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubkern_a-msdos.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubkern_a-msdos.Tpo -c -o grub-core/partmap/libgrubkern_a-msdos.obj `if test -f 'grub-core/partmap/msdos.c'; then $(CYGPATH_W) 'grub-core/partmap/msdos.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/msdos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubkern_a-msdos.Tpo grub-core/partmap/$(DEPDIR)/libgrubkern_a-msdos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/msdos.c' object='grub-core/partmap/libgrubkern_a-msdos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubkern_a-msdos.obj `if test -f 'grub-core/partmap/msdos.c'; then $(CYGPATH_W) 'grub-core/partmap/msdos.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/msdos.c'; fi` + +grub-core/fs/libgrubkern_a-proc.o: grub-core/fs/proc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubkern_a-proc.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubkern_a-proc.Tpo -c -o grub-core/fs/libgrubkern_a-proc.o `test -f 'grub-core/fs/proc.c' || echo '$(srcdir)/'`grub-core/fs/proc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubkern_a-proc.Tpo grub-core/fs/$(DEPDIR)/libgrubkern_a-proc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/proc.c' object='grub-core/fs/libgrubkern_a-proc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubkern_a-proc.o `test -f 'grub-core/fs/proc.c' || echo '$(srcdir)/'`grub-core/fs/proc.c + +grub-core/fs/libgrubkern_a-proc.obj: grub-core/fs/proc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubkern_a-proc.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubkern_a-proc.Tpo -c -o grub-core/fs/libgrubkern_a-proc.obj `if test -f 'grub-core/fs/proc.c'; then $(CYGPATH_W) 'grub-core/fs/proc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/proc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubkern_a-proc.Tpo grub-core/fs/$(DEPDIR)/libgrubkern_a-proc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/proc.c' object='grub-core/fs/libgrubkern_a-proc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubkern_a-proc.obj `if test -f 'grub-core/fs/proc.c'; then $(CYGPATH_W) 'grub-core/fs/proc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/proc.c'; fi` + +grub-core/fs/libgrubkern_a-archelp.o: grub-core/fs/archelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubkern_a-archelp.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubkern_a-archelp.Tpo -c -o grub-core/fs/libgrubkern_a-archelp.o `test -f 'grub-core/fs/archelp.c' || echo '$(srcdir)/'`grub-core/fs/archelp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubkern_a-archelp.Tpo grub-core/fs/$(DEPDIR)/libgrubkern_a-archelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/archelp.c' object='grub-core/fs/libgrubkern_a-archelp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubkern_a-archelp.o `test -f 'grub-core/fs/archelp.c' || echo '$(srcdir)/'`grub-core/fs/archelp.c + +grub-core/fs/libgrubkern_a-archelp.obj: grub-core/fs/archelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubkern_a-archelp.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubkern_a-archelp.Tpo -c -o grub-core/fs/libgrubkern_a-archelp.obj `if test -f 'grub-core/fs/archelp.c'; then $(CYGPATH_W) 'grub-core/fs/archelp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/archelp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubkern_a-archelp.Tpo grub-core/fs/$(DEPDIR)/libgrubkern_a-archelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/archelp.c' object='grub-core/fs/libgrubkern_a-archelp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) $(libgrubkern_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubkern_a-archelp.obj `if test -f 'grub-core/fs/archelp.c'; then $(CYGPATH_W) 'grub-core/fs/archelp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/archelp.c'; fi` + +grub-core/commands/libgrubmods_a-blocklist.o: grub-core/commands/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-blocklist.o -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-blocklist.Tpo -c -o grub-core/commands/libgrubmods_a-blocklist.o `test -f 'grub-core/commands/blocklist.c' || echo '$(srcdir)/'`grub-core/commands/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-blocklist.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/blocklist.c' object='grub-core/commands/libgrubmods_a-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-blocklist.o `test -f 'grub-core/commands/blocklist.c' || echo '$(srcdir)/'`grub-core/commands/blocklist.c + +grub-core/commands/libgrubmods_a-blocklist.obj: grub-core/commands/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-blocklist.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-blocklist.Tpo -c -o grub-core/commands/libgrubmods_a-blocklist.obj `if test -f 'grub-core/commands/blocklist.c'; then $(CYGPATH_W) 'grub-core/commands/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-blocklist.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/blocklist.c' object='grub-core/commands/libgrubmods_a-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-blocklist.obj `if test -f 'grub-core/commands/blocklist.c'; then $(CYGPATH_W) 'grub-core/commands/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/blocklist.c'; fi` + +grub-core/commands/libgrubmods_a-macbless.o: grub-core/commands/macbless.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-macbless.o -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-macbless.Tpo -c -o grub-core/commands/libgrubmods_a-macbless.o `test -f 'grub-core/commands/macbless.c' || echo '$(srcdir)/'`grub-core/commands/macbless.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-macbless.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-macbless.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/macbless.c' object='grub-core/commands/libgrubmods_a-macbless.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-macbless.o `test -f 'grub-core/commands/macbless.c' || echo '$(srcdir)/'`grub-core/commands/macbless.c + +grub-core/commands/libgrubmods_a-macbless.obj: grub-core/commands/macbless.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-macbless.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-macbless.Tpo -c -o grub-core/commands/libgrubmods_a-macbless.obj `if test -f 'grub-core/commands/macbless.c'; then $(CYGPATH_W) 'grub-core/commands/macbless.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/macbless.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-macbless.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-macbless.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/macbless.c' object='grub-core/commands/libgrubmods_a-macbless.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-macbless.obj `if test -f 'grub-core/commands/macbless.c'; then $(CYGPATH_W) 'grub-core/commands/macbless.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/macbless.c'; fi` + +grub-core/commands/libgrubmods_a-xnu_uuid.o: grub-core/commands/xnu_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-xnu_uuid.o -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-xnu_uuid.Tpo -c -o grub-core/commands/libgrubmods_a-xnu_uuid.o `test -f 'grub-core/commands/xnu_uuid.c' || echo '$(srcdir)/'`grub-core/commands/xnu_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-xnu_uuid.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-xnu_uuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/xnu_uuid.c' object='grub-core/commands/libgrubmods_a-xnu_uuid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-xnu_uuid.o `test -f 'grub-core/commands/xnu_uuid.c' || echo '$(srcdir)/'`grub-core/commands/xnu_uuid.c + +grub-core/commands/libgrubmods_a-xnu_uuid.obj: grub-core/commands/xnu_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-xnu_uuid.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-xnu_uuid.Tpo -c -o grub-core/commands/libgrubmods_a-xnu_uuid.obj `if test -f 'grub-core/commands/xnu_uuid.c'; then $(CYGPATH_W) 'grub-core/commands/xnu_uuid.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/xnu_uuid.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-xnu_uuid.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-xnu_uuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/xnu_uuid.c' object='grub-core/commands/libgrubmods_a-xnu_uuid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-xnu_uuid.obj `if test -f 'grub-core/commands/xnu_uuid.c'; then $(CYGPATH_W) 'grub-core/commands/xnu_uuid.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/xnu_uuid.c'; fi` + +grub-core/commands/libgrubmods_a-testload.o: grub-core/commands/testload.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-testload.o -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-testload.Tpo -c -o grub-core/commands/libgrubmods_a-testload.o `test -f 'grub-core/commands/testload.c' || echo '$(srcdir)/'`grub-core/commands/testload.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-testload.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-testload.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/testload.c' object='grub-core/commands/libgrubmods_a-testload.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-testload.o `test -f 'grub-core/commands/testload.c' || echo '$(srcdir)/'`grub-core/commands/testload.c + +grub-core/commands/libgrubmods_a-testload.obj: grub-core/commands/testload.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-testload.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-testload.Tpo -c -o grub-core/commands/libgrubmods_a-testload.obj `if test -f 'grub-core/commands/testload.c'; then $(CYGPATH_W) 'grub-core/commands/testload.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/testload.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-testload.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-testload.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/testload.c' object='grub-core/commands/libgrubmods_a-testload.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-testload.obj `if test -f 'grub-core/commands/testload.c'; then $(CYGPATH_W) 'grub-core/commands/testload.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/testload.c'; fi` + +grub-core/commands/libgrubmods_a-ls.o: grub-core/commands/ls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-ls.o -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-ls.Tpo -c -o grub-core/commands/libgrubmods_a-ls.o `test -f 'grub-core/commands/ls.c' || echo '$(srcdir)/'`grub-core/commands/ls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-ls.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-ls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/ls.c' object='grub-core/commands/libgrubmods_a-ls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-ls.o `test -f 'grub-core/commands/ls.c' || echo '$(srcdir)/'`grub-core/commands/ls.c + +grub-core/commands/libgrubmods_a-ls.obj: grub-core/commands/ls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/commands/libgrubmods_a-ls.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/libgrubmods_a-ls.Tpo -c -o grub-core/commands/libgrubmods_a-ls.obj `if test -f 'grub-core/commands/ls.c'; then $(CYGPATH_W) 'grub-core/commands/ls.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/ls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/libgrubmods_a-ls.Tpo grub-core/commands/$(DEPDIR)/libgrubmods_a-ls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/ls.c' object='grub-core/commands/libgrubmods_a-ls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/commands/libgrubmods_a-ls.obj `if test -f 'grub-core/commands/ls.c'; then $(CYGPATH_W) 'grub-core/commands/ls.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/ls.c'; fi` + +grub-core/disk/libgrubmods_a-dmraid_nvidia.o: grub-core/disk/dmraid_nvidia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-dmraid_nvidia.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-dmraid_nvidia.Tpo -c -o grub-core/disk/libgrubmods_a-dmraid_nvidia.o `test -f 'grub-core/disk/dmraid_nvidia.c' || echo '$(srcdir)/'`grub-core/disk/dmraid_nvidia.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-dmraid_nvidia.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-dmraid_nvidia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/dmraid_nvidia.c' object='grub-core/disk/libgrubmods_a-dmraid_nvidia.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-dmraid_nvidia.o `test -f 'grub-core/disk/dmraid_nvidia.c' || echo '$(srcdir)/'`grub-core/disk/dmraid_nvidia.c + +grub-core/disk/libgrubmods_a-dmraid_nvidia.obj: grub-core/disk/dmraid_nvidia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-dmraid_nvidia.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-dmraid_nvidia.Tpo -c -o grub-core/disk/libgrubmods_a-dmraid_nvidia.obj `if test -f 'grub-core/disk/dmraid_nvidia.c'; then $(CYGPATH_W) 'grub-core/disk/dmraid_nvidia.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/dmraid_nvidia.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-dmraid_nvidia.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-dmraid_nvidia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/dmraid_nvidia.c' object='grub-core/disk/libgrubmods_a-dmraid_nvidia.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-dmraid_nvidia.obj `if test -f 'grub-core/disk/dmraid_nvidia.c'; then $(CYGPATH_W) 'grub-core/disk/dmraid_nvidia.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/dmraid_nvidia.c'; fi` + +grub-core/disk/libgrubmods_a-loopback.o: grub-core/disk/loopback.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-loopback.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-loopback.Tpo -c -o grub-core/disk/libgrubmods_a-loopback.o `test -f 'grub-core/disk/loopback.c' || echo '$(srcdir)/'`grub-core/disk/loopback.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-loopback.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-loopback.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/loopback.c' object='grub-core/disk/libgrubmods_a-loopback.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-loopback.o `test -f 'grub-core/disk/loopback.c' || echo '$(srcdir)/'`grub-core/disk/loopback.c + +grub-core/disk/libgrubmods_a-loopback.obj: grub-core/disk/loopback.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-loopback.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-loopback.Tpo -c -o grub-core/disk/libgrubmods_a-loopback.obj `if test -f 'grub-core/disk/loopback.c'; then $(CYGPATH_W) 'grub-core/disk/loopback.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/loopback.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-loopback.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-loopback.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/loopback.c' object='grub-core/disk/libgrubmods_a-loopback.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-loopback.obj `if test -f 'grub-core/disk/loopback.c'; then $(CYGPATH_W) 'grub-core/disk/loopback.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/loopback.c'; fi` + +grub-core/disk/libgrubmods_a-lvm.o: grub-core/disk/lvm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-lvm.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-lvm.Tpo -c -o grub-core/disk/libgrubmods_a-lvm.o `test -f 'grub-core/disk/lvm.c' || echo '$(srcdir)/'`grub-core/disk/lvm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-lvm.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-lvm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/lvm.c' object='grub-core/disk/libgrubmods_a-lvm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-lvm.o `test -f 'grub-core/disk/lvm.c' || echo '$(srcdir)/'`grub-core/disk/lvm.c + +grub-core/disk/libgrubmods_a-lvm.obj: grub-core/disk/lvm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-lvm.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-lvm.Tpo -c -o grub-core/disk/libgrubmods_a-lvm.obj `if test -f 'grub-core/disk/lvm.c'; then $(CYGPATH_W) 'grub-core/disk/lvm.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/lvm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-lvm.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-lvm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/lvm.c' object='grub-core/disk/libgrubmods_a-lvm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-lvm.obj `if test -f 'grub-core/disk/lvm.c'; then $(CYGPATH_W) 'grub-core/disk/lvm.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/lvm.c'; fi` + +grub-core/disk/libgrubmods_a-mdraid_linux.o: grub-core/disk/mdraid_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-mdraid_linux.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux.Tpo -c -o grub-core/disk/libgrubmods_a-mdraid_linux.o `test -f 'grub-core/disk/mdraid_linux.c' || echo '$(srcdir)/'`grub-core/disk/mdraid_linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/mdraid_linux.c' object='grub-core/disk/libgrubmods_a-mdraid_linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-mdraid_linux.o `test -f 'grub-core/disk/mdraid_linux.c' || echo '$(srcdir)/'`grub-core/disk/mdraid_linux.c + +grub-core/disk/libgrubmods_a-mdraid_linux.obj: grub-core/disk/mdraid_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-mdraid_linux.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux.Tpo -c -o grub-core/disk/libgrubmods_a-mdraid_linux.obj `if test -f 'grub-core/disk/mdraid_linux.c'; then $(CYGPATH_W) 'grub-core/disk/mdraid_linux.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/mdraid_linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/mdraid_linux.c' object='grub-core/disk/libgrubmods_a-mdraid_linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-mdraid_linux.obj `if test -f 'grub-core/disk/mdraid_linux.c'; then $(CYGPATH_W) 'grub-core/disk/mdraid_linux.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/mdraid_linux.c'; fi` + +grub-core/disk/libgrubmods_a-mdraid_linux_be.o: grub-core/disk/mdraid_linux_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-mdraid_linux_be.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux_be.Tpo -c -o grub-core/disk/libgrubmods_a-mdraid_linux_be.o `test -f 'grub-core/disk/mdraid_linux_be.c' || echo '$(srcdir)/'`grub-core/disk/mdraid_linux_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux_be.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/mdraid_linux_be.c' object='grub-core/disk/libgrubmods_a-mdraid_linux_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-mdraid_linux_be.o `test -f 'grub-core/disk/mdraid_linux_be.c' || echo '$(srcdir)/'`grub-core/disk/mdraid_linux_be.c + +grub-core/disk/libgrubmods_a-mdraid_linux_be.obj: grub-core/disk/mdraid_linux_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-mdraid_linux_be.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux_be.Tpo -c -o grub-core/disk/libgrubmods_a-mdraid_linux_be.obj `if test -f 'grub-core/disk/mdraid_linux_be.c'; then $(CYGPATH_W) 'grub-core/disk/mdraid_linux_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/mdraid_linux_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux_be.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid_linux_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/mdraid_linux_be.c' object='grub-core/disk/libgrubmods_a-mdraid_linux_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-mdraid_linux_be.obj `if test -f 'grub-core/disk/mdraid_linux_be.c'; then $(CYGPATH_W) 'grub-core/disk/mdraid_linux_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/mdraid_linux_be.c'; fi` + +grub-core/disk/libgrubmods_a-mdraid1x_linux.o: grub-core/disk/mdraid1x_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-mdraid1x_linux.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid1x_linux.Tpo -c -o grub-core/disk/libgrubmods_a-mdraid1x_linux.o `test -f 'grub-core/disk/mdraid1x_linux.c' || echo '$(srcdir)/'`grub-core/disk/mdraid1x_linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid1x_linux.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid1x_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/mdraid1x_linux.c' object='grub-core/disk/libgrubmods_a-mdraid1x_linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-mdraid1x_linux.o `test -f 'grub-core/disk/mdraid1x_linux.c' || echo '$(srcdir)/'`grub-core/disk/mdraid1x_linux.c + +grub-core/disk/libgrubmods_a-mdraid1x_linux.obj: grub-core/disk/mdraid1x_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-mdraid1x_linux.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid1x_linux.Tpo -c -o grub-core/disk/libgrubmods_a-mdraid1x_linux.obj `if test -f 'grub-core/disk/mdraid1x_linux.c'; then $(CYGPATH_W) 'grub-core/disk/mdraid1x_linux.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/mdraid1x_linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid1x_linux.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-mdraid1x_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/mdraid1x_linux.c' object='grub-core/disk/libgrubmods_a-mdraid1x_linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-mdraid1x_linux.obj `if test -f 'grub-core/disk/mdraid1x_linux.c'; then $(CYGPATH_W) 'grub-core/disk/mdraid1x_linux.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/mdraid1x_linux.c'; fi` + +grub-core/disk/libgrubmods_a-raid5_recover.o: grub-core/disk/raid5_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-raid5_recover.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-raid5_recover.Tpo -c -o grub-core/disk/libgrubmods_a-raid5_recover.o `test -f 'grub-core/disk/raid5_recover.c' || echo '$(srcdir)/'`grub-core/disk/raid5_recover.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-raid5_recover.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-raid5_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/raid5_recover.c' object='grub-core/disk/libgrubmods_a-raid5_recover.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-raid5_recover.o `test -f 'grub-core/disk/raid5_recover.c' || echo '$(srcdir)/'`grub-core/disk/raid5_recover.c + +grub-core/disk/libgrubmods_a-raid5_recover.obj: grub-core/disk/raid5_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-raid5_recover.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-raid5_recover.Tpo -c -o grub-core/disk/libgrubmods_a-raid5_recover.obj `if test -f 'grub-core/disk/raid5_recover.c'; then $(CYGPATH_W) 'grub-core/disk/raid5_recover.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/raid5_recover.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-raid5_recover.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-raid5_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/raid5_recover.c' object='grub-core/disk/libgrubmods_a-raid5_recover.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-raid5_recover.obj `if test -f 'grub-core/disk/raid5_recover.c'; then $(CYGPATH_W) 'grub-core/disk/raid5_recover.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/raid5_recover.c'; fi` + +grub-core/disk/libgrubmods_a-raid6_recover.o: grub-core/disk/raid6_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-raid6_recover.o -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-raid6_recover.Tpo -c -o grub-core/disk/libgrubmods_a-raid6_recover.o `test -f 'grub-core/disk/raid6_recover.c' || echo '$(srcdir)/'`grub-core/disk/raid6_recover.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-raid6_recover.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-raid6_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/raid6_recover.c' object='grub-core/disk/libgrubmods_a-raid6_recover.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-raid6_recover.o `test -f 'grub-core/disk/raid6_recover.c' || echo '$(srcdir)/'`grub-core/disk/raid6_recover.c + +grub-core/disk/libgrubmods_a-raid6_recover.obj: grub-core/disk/raid6_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/disk/libgrubmods_a-raid6_recover.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/libgrubmods_a-raid6_recover.Tpo -c -o grub-core/disk/libgrubmods_a-raid6_recover.obj `if test -f 'grub-core/disk/raid6_recover.c'; then $(CYGPATH_W) 'grub-core/disk/raid6_recover.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/raid6_recover.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/libgrubmods_a-raid6_recover.Tpo grub-core/disk/$(DEPDIR)/libgrubmods_a-raid6_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/raid6_recover.c' object='grub-core/disk/libgrubmods_a-raid6_recover.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/disk/libgrubmods_a-raid6_recover.obj `if test -f 'grub-core/disk/raid6_recover.c'; then $(CYGPATH_W) 'grub-core/disk/raid6_recover.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/raid6_recover.c'; fi` + +grub-core/font/libgrubmods_a-font.o: grub-core/font/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/font/libgrubmods_a-font.o -MD -MP -MF grub-core/font/$(DEPDIR)/libgrubmods_a-font.Tpo -c -o grub-core/font/libgrubmods_a-font.o `test -f 'grub-core/font/font.c' || echo '$(srcdir)/'`grub-core/font/font.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/font/$(DEPDIR)/libgrubmods_a-font.Tpo grub-core/font/$(DEPDIR)/libgrubmods_a-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/font/font.c' object='grub-core/font/libgrubmods_a-font.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/font/libgrubmods_a-font.o `test -f 'grub-core/font/font.c' || echo '$(srcdir)/'`grub-core/font/font.c + +grub-core/font/libgrubmods_a-font.obj: grub-core/font/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/font/libgrubmods_a-font.obj -MD -MP -MF grub-core/font/$(DEPDIR)/libgrubmods_a-font.Tpo -c -o grub-core/font/libgrubmods_a-font.obj `if test -f 'grub-core/font/font.c'; then $(CYGPATH_W) 'grub-core/font/font.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/font/font.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/font/$(DEPDIR)/libgrubmods_a-font.Tpo grub-core/font/$(DEPDIR)/libgrubmods_a-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/font/font.c' object='grub-core/font/libgrubmods_a-font.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/font/libgrubmods_a-font.obj `if test -f 'grub-core/font/font.c'; then $(CYGPATH_W) 'grub-core/font/font.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/font/font.c'; fi` + +grub-core/gfxmenu/libgrubmods_a-font.o: grub-core/gfxmenu/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/gfxmenu/libgrubmods_a-font.o -MD -MP -MF grub-core/gfxmenu/$(DEPDIR)/libgrubmods_a-font.Tpo -c -o grub-core/gfxmenu/libgrubmods_a-font.o `test -f 'grub-core/gfxmenu/font.c' || echo '$(srcdir)/'`grub-core/gfxmenu/font.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/gfxmenu/$(DEPDIR)/libgrubmods_a-font.Tpo grub-core/gfxmenu/$(DEPDIR)/libgrubmods_a-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/gfxmenu/font.c' object='grub-core/gfxmenu/libgrubmods_a-font.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/gfxmenu/libgrubmods_a-font.o `test -f 'grub-core/gfxmenu/font.c' || echo '$(srcdir)/'`grub-core/gfxmenu/font.c + +grub-core/gfxmenu/libgrubmods_a-font.obj: grub-core/gfxmenu/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/gfxmenu/libgrubmods_a-font.obj -MD -MP -MF grub-core/gfxmenu/$(DEPDIR)/libgrubmods_a-font.Tpo -c -o grub-core/gfxmenu/libgrubmods_a-font.obj `if test -f 'grub-core/gfxmenu/font.c'; then $(CYGPATH_W) 'grub-core/gfxmenu/font.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/gfxmenu/font.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/gfxmenu/$(DEPDIR)/libgrubmods_a-font.Tpo grub-core/gfxmenu/$(DEPDIR)/libgrubmods_a-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/gfxmenu/font.c' object='grub-core/gfxmenu/libgrubmods_a-font.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/gfxmenu/libgrubmods_a-font.obj `if test -f 'grub-core/gfxmenu/font.c'; then $(CYGPATH_W) 'grub-core/gfxmenu/font.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/gfxmenu/font.c'; fi` + +grub-core/normal/libgrubmods_a-charset.o: grub-core/normal/charset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/normal/libgrubmods_a-charset.o -MD -MP -MF grub-core/normal/$(DEPDIR)/libgrubmods_a-charset.Tpo -c -o grub-core/normal/libgrubmods_a-charset.o `test -f 'grub-core/normal/charset.c' || echo '$(srcdir)/'`grub-core/normal/charset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/normal/$(DEPDIR)/libgrubmods_a-charset.Tpo grub-core/normal/$(DEPDIR)/libgrubmods_a-charset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/normal/charset.c' object='grub-core/normal/libgrubmods_a-charset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/normal/libgrubmods_a-charset.o `test -f 'grub-core/normal/charset.c' || echo '$(srcdir)/'`grub-core/normal/charset.c + +grub-core/normal/libgrubmods_a-charset.obj: grub-core/normal/charset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/normal/libgrubmods_a-charset.obj -MD -MP -MF grub-core/normal/$(DEPDIR)/libgrubmods_a-charset.Tpo -c -o grub-core/normal/libgrubmods_a-charset.obj `if test -f 'grub-core/normal/charset.c'; then $(CYGPATH_W) 'grub-core/normal/charset.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/normal/charset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/normal/$(DEPDIR)/libgrubmods_a-charset.Tpo grub-core/normal/$(DEPDIR)/libgrubmods_a-charset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/normal/charset.c' object='grub-core/normal/libgrubmods_a-charset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/normal/libgrubmods_a-charset.obj `if test -f 'grub-core/normal/charset.c'; then $(CYGPATH_W) 'grub-core/normal/charset.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/normal/charset.c'; fi` + +grub-core/video/fb/libgrubmods_a-fbblit.o: grub-core/video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-fbblit.o -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbblit.Tpo -c -o grub-core/video/fb/libgrubmods_a-fbblit.o `test -f 'grub-core/video/fb/fbblit.c' || echo '$(srcdir)/'`grub-core/video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbblit.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbblit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/fbblit.c' object='grub-core/video/fb/libgrubmods_a-fbblit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-fbblit.o `test -f 'grub-core/video/fb/fbblit.c' || echo '$(srcdir)/'`grub-core/video/fb/fbblit.c + +grub-core/video/fb/libgrubmods_a-fbblit.obj: grub-core/video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-fbblit.obj -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbblit.Tpo -c -o grub-core/video/fb/libgrubmods_a-fbblit.obj `if test -f 'grub-core/video/fb/fbblit.c'; then $(CYGPATH_W) 'grub-core/video/fb/fbblit.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/fbblit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbblit.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbblit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/fbblit.c' object='grub-core/video/fb/libgrubmods_a-fbblit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-fbblit.obj `if test -f 'grub-core/video/fb/fbblit.c'; then $(CYGPATH_W) 'grub-core/video/fb/fbblit.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/fbblit.c'; fi` + +grub-core/video/fb/libgrubmods_a-fbutil.o: grub-core/video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-fbutil.o -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbutil.Tpo -c -o grub-core/video/fb/libgrubmods_a-fbutil.o `test -f 'grub-core/video/fb/fbutil.c' || echo '$(srcdir)/'`grub-core/video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbutil.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/fbutil.c' object='grub-core/video/fb/libgrubmods_a-fbutil.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-fbutil.o `test -f 'grub-core/video/fb/fbutil.c' || echo '$(srcdir)/'`grub-core/video/fb/fbutil.c + +grub-core/video/fb/libgrubmods_a-fbutil.obj: grub-core/video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-fbutil.obj -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbutil.Tpo -c -o grub-core/video/fb/libgrubmods_a-fbutil.obj `if test -f 'grub-core/video/fb/fbutil.c'; then $(CYGPATH_W) 'grub-core/video/fb/fbutil.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/fbutil.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbutil.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/fbutil.c' object='grub-core/video/fb/libgrubmods_a-fbutil.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-fbutil.obj `if test -f 'grub-core/video/fb/fbutil.c'; then $(CYGPATH_W) 'grub-core/video/fb/fbutil.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/fbutil.c'; fi` + +grub-core/video/fb/libgrubmods_a-fbfill.o: grub-core/video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-fbfill.o -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbfill.Tpo -c -o grub-core/video/fb/libgrubmods_a-fbfill.o `test -f 'grub-core/video/fb/fbfill.c' || echo '$(srcdir)/'`grub-core/video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbfill.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbfill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/fbfill.c' object='grub-core/video/fb/libgrubmods_a-fbfill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-fbfill.o `test -f 'grub-core/video/fb/fbfill.c' || echo '$(srcdir)/'`grub-core/video/fb/fbfill.c + +grub-core/video/fb/libgrubmods_a-fbfill.obj: grub-core/video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-fbfill.obj -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbfill.Tpo -c -o grub-core/video/fb/libgrubmods_a-fbfill.obj `if test -f 'grub-core/video/fb/fbfill.c'; then $(CYGPATH_W) 'grub-core/video/fb/fbfill.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/fbfill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbfill.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-fbfill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/fbfill.c' object='grub-core/video/fb/libgrubmods_a-fbfill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-fbfill.obj `if test -f 'grub-core/video/fb/fbfill.c'; then $(CYGPATH_W) 'grub-core/video/fb/fbfill.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/fbfill.c'; fi` + +grub-core/video/fb/libgrubmods_a-video_fb.o: grub-core/video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-video_fb.o -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-video_fb.Tpo -c -o grub-core/video/fb/libgrubmods_a-video_fb.o `test -f 'grub-core/video/fb/video_fb.c' || echo '$(srcdir)/'`grub-core/video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-video_fb.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-video_fb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/video_fb.c' object='grub-core/video/fb/libgrubmods_a-video_fb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-video_fb.o `test -f 'grub-core/video/fb/video_fb.c' || echo '$(srcdir)/'`grub-core/video/fb/video_fb.c + +grub-core/video/fb/libgrubmods_a-video_fb.obj: grub-core/video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/fb/libgrubmods_a-video_fb.obj -MD -MP -MF grub-core/video/fb/$(DEPDIR)/libgrubmods_a-video_fb.Tpo -c -o grub-core/video/fb/libgrubmods_a-video_fb.obj `if test -f 'grub-core/video/fb/video_fb.c'; then $(CYGPATH_W) 'grub-core/video/fb/video_fb.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/video_fb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/fb/$(DEPDIR)/libgrubmods_a-video_fb.Tpo grub-core/video/fb/$(DEPDIR)/libgrubmods_a-video_fb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/fb/video_fb.c' object='grub-core/video/fb/libgrubmods_a-video_fb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/fb/libgrubmods_a-video_fb.obj `if test -f 'grub-core/video/fb/video_fb.c'; then $(CYGPATH_W) 'grub-core/video/fb/video_fb.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/fb/video_fb.c'; fi` + +grub-core/video/libgrubmods_a-video.o: grub-core/video/video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/libgrubmods_a-video.o -MD -MP -MF grub-core/video/$(DEPDIR)/libgrubmods_a-video.Tpo -c -o grub-core/video/libgrubmods_a-video.o `test -f 'grub-core/video/video.c' || echo '$(srcdir)/'`grub-core/video/video.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/$(DEPDIR)/libgrubmods_a-video.Tpo grub-core/video/$(DEPDIR)/libgrubmods_a-video.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/video.c' object='grub-core/video/libgrubmods_a-video.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/libgrubmods_a-video.o `test -f 'grub-core/video/video.c' || echo '$(srcdir)/'`grub-core/video/video.c + +grub-core/video/libgrubmods_a-video.obj: grub-core/video/video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/libgrubmods_a-video.obj -MD -MP -MF grub-core/video/$(DEPDIR)/libgrubmods_a-video.Tpo -c -o grub-core/video/libgrubmods_a-video.obj `if test -f 'grub-core/video/video.c'; then $(CYGPATH_W) 'grub-core/video/video.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/video.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/$(DEPDIR)/libgrubmods_a-video.Tpo grub-core/video/$(DEPDIR)/libgrubmods_a-video.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/video.c' object='grub-core/video/libgrubmods_a-video.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/libgrubmods_a-video.obj `if test -f 'grub-core/video/video.c'; then $(CYGPATH_W) 'grub-core/video/video.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/video.c'; fi` + +grub-core/video/libgrubmods_a-capture.o: grub-core/video/capture.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/libgrubmods_a-capture.o -MD -MP -MF grub-core/video/$(DEPDIR)/libgrubmods_a-capture.Tpo -c -o grub-core/video/libgrubmods_a-capture.o `test -f 'grub-core/video/capture.c' || echo '$(srcdir)/'`grub-core/video/capture.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/$(DEPDIR)/libgrubmods_a-capture.Tpo grub-core/video/$(DEPDIR)/libgrubmods_a-capture.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/capture.c' object='grub-core/video/libgrubmods_a-capture.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/libgrubmods_a-capture.o `test -f 'grub-core/video/capture.c' || echo '$(srcdir)/'`grub-core/video/capture.c + +grub-core/video/libgrubmods_a-capture.obj: grub-core/video/capture.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/libgrubmods_a-capture.obj -MD -MP -MF grub-core/video/$(DEPDIR)/libgrubmods_a-capture.Tpo -c -o grub-core/video/libgrubmods_a-capture.obj `if test -f 'grub-core/video/capture.c'; then $(CYGPATH_W) 'grub-core/video/capture.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/capture.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/$(DEPDIR)/libgrubmods_a-capture.Tpo grub-core/video/$(DEPDIR)/libgrubmods_a-capture.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/capture.c' object='grub-core/video/libgrubmods_a-capture.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/libgrubmods_a-capture.obj `if test -f 'grub-core/video/capture.c'; then $(CYGPATH_W) 'grub-core/video/capture.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/capture.c'; fi` + +grub-core/video/libgrubmods_a-colors.o: grub-core/video/colors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/libgrubmods_a-colors.o -MD -MP -MF grub-core/video/$(DEPDIR)/libgrubmods_a-colors.Tpo -c -o grub-core/video/libgrubmods_a-colors.o `test -f 'grub-core/video/colors.c' || echo '$(srcdir)/'`grub-core/video/colors.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/$(DEPDIR)/libgrubmods_a-colors.Tpo grub-core/video/$(DEPDIR)/libgrubmods_a-colors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/colors.c' object='grub-core/video/libgrubmods_a-colors.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/libgrubmods_a-colors.o `test -f 'grub-core/video/colors.c' || echo '$(srcdir)/'`grub-core/video/colors.c + +grub-core/video/libgrubmods_a-colors.obj: grub-core/video/colors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/video/libgrubmods_a-colors.obj -MD -MP -MF grub-core/video/$(DEPDIR)/libgrubmods_a-colors.Tpo -c -o grub-core/video/libgrubmods_a-colors.obj `if test -f 'grub-core/video/colors.c'; then $(CYGPATH_W) 'grub-core/video/colors.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/colors.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/video/$(DEPDIR)/libgrubmods_a-colors.Tpo grub-core/video/$(DEPDIR)/libgrubmods_a-colors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/video/colors.c' object='grub-core/video/libgrubmods_a-colors.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/video/libgrubmods_a-colors.obj `if test -f 'grub-core/video/colors.c'; then $(CYGPATH_W) 'grub-core/video/colors.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/video/colors.c'; fi` + +grub-core/libgrubmods_a-unidata.o: grub-core/unidata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/libgrubmods_a-unidata.o -MD -MP -MF grub-core/$(DEPDIR)/libgrubmods_a-unidata.Tpo -c -o grub-core/libgrubmods_a-unidata.o `test -f 'grub-core/unidata.c' || echo '$(srcdir)/'`grub-core/unidata.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/$(DEPDIR)/libgrubmods_a-unidata.Tpo grub-core/$(DEPDIR)/libgrubmods_a-unidata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/unidata.c' object='grub-core/libgrubmods_a-unidata.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/libgrubmods_a-unidata.o `test -f 'grub-core/unidata.c' || echo '$(srcdir)/'`grub-core/unidata.c + +grub-core/libgrubmods_a-unidata.obj: grub-core/unidata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/libgrubmods_a-unidata.obj -MD -MP -MF grub-core/$(DEPDIR)/libgrubmods_a-unidata.Tpo -c -o grub-core/libgrubmods_a-unidata.obj `if test -f 'grub-core/unidata.c'; then $(CYGPATH_W) 'grub-core/unidata.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/unidata.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/$(DEPDIR)/libgrubmods_a-unidata.Tpo grub-core/$(DEPDIR)/libgrubmods_a-unidata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/unidata.c' object='grub-core/libgrubmods_a-unidata.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/libgrubmods_a-unidata.obj `if test -f 'grub-core/unidata.c'; then $(CYGPATH_W) 'grub-core/unidata.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/unidata.c'; fi` + +grub-core/io/libgrubmods_a-bufio.o: grub-core/io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-bufio.o -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-bufio.Tpo -c -o grub-core/io/libgrubmods_a-bufio.o `test -f 'grub-core/io/bufio.c' || echo '$(srcdir)/'`grub-core/io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-bufio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-bufio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/bufio.c' object='grub-core/io/libgrubmods_a-bufio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-bufio.o `test -f 'grub-core/io/bufio.c' || echo '$(srcdir)/'`grub-core/io/bufio.c + +grub-core/io/libgrubmods_a-bufio.obj: grub-core/io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-bufio.obj -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-bufio.Tpo -c -o grub-core/io/libgrubmods_a-bufio.obj `if test -f 'grub-core/io/bufio.c'; then $(CYGPATH_W) 'grub-core/io/bufio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/bufio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-bufio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-bufio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/bufio.c' object='grub-core/io/libgrubmods_a-bufio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-bufio.obj `if test -f 'grub-core/io/bufio.c'; then $(CYGPATH_W) 'grub-core/io/bufio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/bufio.c'; fi` + +grub-core/fs/libgrubmods_a-affs.o: grub-core/fs/affs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-affs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-affs.Tpo -c -o grub-core/fs/libgrubmods_a-affs.o `test -f 'grub-core/fs/affs.c' || echo '$(srcdir)/'`grub-core/fs/affs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-affs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-affs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/affs.c' object='grub-core/fs/libgrubmods_a-affs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-affs.o `test -f 'grub-core/fs/affs.c' || echo '$(srcdir)/'`grub-core/fs/affs.c + +grub-core/fs/libgrubmods_a-affs.obj: grub-core/fs/affs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-affs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-affs.Tpo -c -o grub-core/fs/libgrubmods_a-affs.obj `if test -f 'grub-core/fs/affs.c'; then $(CYGPATH_W) 'grub-core/fs/affs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/affs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-affs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-affs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/affs.c' object='grub-core/fs/libgrubmods_a-affs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-affs.obj `if test -f 'grub-core/fs/affs.c'; then $(CYGPATH_W) 'grub-core/fs/affs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/affs.c'; fi` + +grub-core/fs/libgrubmods_a-afs.o: grub-core/fs/afs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-afs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-afs.Tpo -c -o grub-core/fs/libgrubmods_a-afs.o `test -f 'grub-core/fs/afs.c' || echo '$(srcdir)/'`grub-core/fs/afs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-afs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-afs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/afs.c' object='grub-core/fs/libgrubmods_a-afs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-afs.o `test -f 'grub-core/fs/afs.c' || echo '$(srcdir)/'`grub-core/fs/afs.c + +grub-core/fs/libgrubmods_a-afs.obj: grub-core/fs/afs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-afs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-afs.Tpo -c -o grub-core/fs/libgrubmods_a-afs.obj `if test -f 'grub-core/fs/afs.c'; then $(CYGPATH_W) 'grub-core/fs/afs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/afs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-afs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-afs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/afs.c' object='grub-core/fs/libgrubmods_a-afs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-afs.obj `if test -f 'grub-core/fs/afs.c'; then $(CYGPATH_W) 'grub-core/fs/afs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/afs.c'; fi` + +grub-core/fs/libgrubmods_a-bfs.o: grub-core/fs/bfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-bfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-bfs.Tpo -c -o grub-core/fs/libgrubmods_a-bfs.o `test -f 'grub-core/fs/bfs.c' || echo '$(srcdir)/'`grub-core/fs/bfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-bfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-bfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/bfs.c' object='grub-core/fs/libgrubmods_a-bfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-bfs.o `test -f 'grub-core/fs/bfs.c' || echo '$(srcdir)/'`grub-core/fs/bfs.c + +grub-core/fs/libgrubmods_a-bfs.obj: grub-core/fs/bfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-bfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-bfs.Tpo -c -o grub-core/fs/libgrubmods_a-bfs.obj `if test -f 'grub-core/fs/bfs.c'; then $(CYGPATH_W) 'grub-core/fs/bfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/bfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-bfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-bfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/bfs.c' object='grub-core/fs/libgrubmods_a-bfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-bfs.obj `if test -f 'grub-core/fs/bfs.c'; then $(CYGPATH_W) 'grub-core/fs/bfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/bfs.c'; fi` + +grub-core/fs/libgrubmods_a-btrfs.o: grub-core/fs/btrfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-btrfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-btrfs.Tpo -c -o grub-core/fs/libgrubmods_a-btrfs.o `test -f 'grub-core/fs/btrfs.c' || echo '$(srcdir)/'`grub-core/fs/btrfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-btrfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-btrfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/btrfs.c' object='grub-core/fs/libgrubmods_a-btrfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-btrfs.o `test -f 'grub-core/fs/btrfs.c' || echo '$(srcdir)/'`grub-core/fs/btrfs.c + +grub-core/fs/libgrubmods_a-btrfs.obj: grub-core/fs/btrfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-btrfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-btrfs.Tpo -c -o grub-core/fs/libgrubmods_a-btrfs.obj `if test -f 'grub-core/fs/btrfs.c'; then $(CYGPATH_W) 'grub-core/fs/btrfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/btrfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-btrfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-btrfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/btrfs.c' object='grub-core/fs/libgrubmods_a-btrfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-btrfs.obj `if test -f 'grub-core/fs/btrfs.c'; then $(CYGPATH_W) 'grub-core/fs/btrfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/btrfs.c'; fi` + +grub-core/fs/libgrubmods_a-cbfs.o: grub-core/fs/cbfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-cbfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-cbfs.Tpo -c -o grub-core/fs/libgrubmods_a-cbfs.o `test -f 'grub-core/fs/cbfs.c' || echo '$(srcdir)/'`grub-core/fs/cbfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-cbfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-cbfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/cbfs.c' object='grub-core/fs/libgrubmods_a-cbfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-cbfs.o `test -f 'grub-core/fs/cbfs.c' || echo '$(srcdir)/'`grub-core/fs/cbfs.c + +grub-core/fs/libgrubmods_a-cbfs.obj: grub-core/fs/cbfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-cbfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-cbfs.Tpo -c -o grub-core/fs/libgrubmods_a-cbfs.obj `if test -f 'grub-core/fs/cbfs.c'; then $(CYGPATH_W) 'grub-core/fs/cbfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/cbfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-cbfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-cbfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/cbfs.c' object='grub-core/fs/libgrubmods_a-cbfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-cbfs.obj `if test -f 'grub-core/fs/cbfs.c'; then $(CYGPATH_W) 'grub-core/fs/cbfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/cbfs.c'; fi` + +grub-core/fs/libgrubmods_a-cpio.o: grub-core/fs/cpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-cpio.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio.Tpo -c -o grub-core/fs/libgrubmods_a-cpio.o `test -f 'grub-core/fs/cpio.c' || echo '$(srcdir)/'`grub-core/fs/cpio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/cpio.c' object='grub-core/fs/libgrubmods_a-cpio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-cpio.o `test -f 'grub-core/fs/cpio.c' || echo '$(srcdir)/'`grub-core/fs/cpio.c + +grub-core/fs/libgrubmods_a-cpio.obj: grub-core/fs/cpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-cpio.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio.Tpo -c -o grub-core/fs/libgrubmods_a-cpio.obj `if test -f 'grub-core/fs/cpio.c'; then $(CYGPATH_W) 'grub-core/fs/cpio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/cpio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/cpio.c' object='grub-core/fs/libgrubmods_a-cpio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-cpio.obj `if test -f 'grub-core/fs/cpio.c'; then $(CYGPATH_W) 'grub-core/fs/cpio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/cpio.c'; fi` + +grub-core/fs/libgrubmods_a-cpio_be.o: grub-core/fs/cpio_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-cpio_be.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio_be.Tpo -c -o grub-core/fs/libgrubmods_a-cpio_be.o `test -f 'grub-core/fs/cpio_be.c' || echo '$(srcdir)/'`grub-core/fs/cpio_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/cpio_be.c' object='grub-core/fs/libgrubmods_a-cpio_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-cpio_be.o `test -f 'grub-core/fs/cpio_be.c' || echo '$(srcdir)/'`grub-core/fs/cpio_be.c + +grub-core/fs/libgrubmods_a-cpio_be.obj: grub-core/fs/cpio_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-cpio_be.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio_be.Tpo -c -o grub-core/fs/libgrubmods_a-cpio_be.obj `if test -f 'grub-core/fs/cpio_be.c'; then $(CYGPATH_W) 'grub-core/fs/cpio_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/cpio_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-cpio_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/cpio_be.c' object='grub-core/fs/libgrubmods_a-cpio_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-cpio_be.obj `if test -f 'grub-core/fs/cpio_be.c'; then $(CYGPATH_W) 'grub-core/fs/cpio_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/cpio_be.c'; fi` + +grub-core/fs/libgrubmods_a-odc.o: grub-core/fs/odc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-odc.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-odc.Tpo -c -o grub-core/fs/libgrubmods_a-odc.o `test -f 'grub-core/fs/odc.c' || echo '$(srcdir)/'`grub-core/fs/odc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-odc.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-odc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/odc.c' object='grub-core/fs/libgrubmods_a-odc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-odc.o `test -f 'grub-core/fs/odc.c' || echo '$(srcdir)/'`grub-core/fs/odc.c + +grub-core/fs/libgrubmods_a-odc.obj: grub-core/fs/odc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-odc.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-odc.Tpo -c -o grub-core/fs/libgrubmods_a-odc.obj `if test -f 'grub-core/fs/odc.c'; then $(CYGPATH_W) 'grub-core/fs/odc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/odc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-odc.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-odc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/odc.c' object='grub-core/fs/libgrubmods_a-odc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-odc.obj `if test -f 'grub-core/fs/odc.c'; then $(CYGPATH_W) 'grub-core/fs/odc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/odc.c'; fi` + +grub-core/fs/libgrubmods_a-newc.o: grub-core/fs/newc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-newc.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-newc.Tpo -c -o grub-core/fs/libgrubmods_a-newc.o `test -f 'grub-core/fs/newc.c' || echo '$(srcdir)/'`grub-core/fs/newc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-newc.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-newc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/newc.c' object='grub-core/fs/libgrubmods_a-newc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-newc.o `test -f 'grub-core/fs/newc.c' || echo '$(srcdir)/'`grub-core/fs/newc.c + +grub-core/fs/libgrubmods_a-newc.obj: grub-core/fs/newc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-newc.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-newc.Tpo -c -o grub-core/fs/libgrubmods_a-newc.obj `if test -f 'grub-core/fs/newc.c'; then $(CYGPATH_W) 'grub-core/fs/newc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/newc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-newc.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-newc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/newc.c' object='grub-core/fs/libgrubmods_a-newc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-newc.obj `if test -f 'grub-core/fs/newc.c'; then $(CYGPATH_W) 'grub-core/fs/newc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/newc.c'; fi` + +grub-core/fs/libgrubmods_a-ext2.o: grub-core/fs/ext2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ext2.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ext2.Tpo -c -o grub-core/fs/libgrubmods_a-ext2.o `test -f 'grub-core/fs/ext2.c' || echo '$(srcdir)/'`grub-core/fs/ext2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ext2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ext2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ext2.c' object='grub-core/fs/libgrubmods_a-ext2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ext2.o `test -f 'grub-core/fs/ext2.c' || echo '$(srcdir)/'`grub-core/fs/ext2.c + +grub-core/fs/libgrubmods_a-ext2.obj: grub-core/fs/ext2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ext2.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ext2.Tpo -c -o grub-core/fs/libgrubmods_a-ext2.obj `if test -f 'grub-core/fs/ext2.c'; then $(CYGPATH_W) 'grub-core/fs/ext2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ext2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ext2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ext2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ext2.c' object='grub-core/fs/libgrubmods_a-ext2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ext2.obj `if test -f 'grub-core/fs/ext2.c'; then $(CYGPATH_W) 'grub-core/fs/ext2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ext2.c'; fi` + +grub-core/fs/libgrubmods_a-fat.o: grub-core/fs/fat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-fat.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-fat.Tpo -c -o grub-core/fs/libgrubmods_a-fat.o `test -f 'grub-core/fs/fat.c' || echo '$(srcdir)/'`grub-core/fs/fat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-fat.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-fat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/fat.c' object='grub-core/fs/libgrubmods_a-fat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-fat.o `test -f 'grub-core/fs/fat.c' || echo '$(srcdir)/'`grub-core/fs/fat.c + +grub-core/fs/libgrubmods_a-fat.obj: grub-core/fs/fat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-fat.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-fat.Tpo -c -o grub-core/fs/libgrubmods_a-fat.obj `if test -f 'grub-core/fs/fat.c'; then $(CYGPATH_W) 'grub-core/fs/fat.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/fat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-fat.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-fat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/fat.c' object='grub-core/fs/libgrubmods_a-fat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-fat.obj `if test -f 'grub-core/fs/fat.c'; then $(CYGPATH_W) 'grub-core/fs/fat.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/fat.c'; fi` + +grub-core/fs/libgrubmods_a-exfat.o: grub-core/fs/exfat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-exfat.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-exfat.Tpo -c -o grub-core/fs/libgrubmods_a-exfat.o `test -f 'grub-core/fs/exfat.c' || echo '$(srcdir)/'`grub-core/fs/exfat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-exfat.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-exfat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/exfat.c' object='grub-core/fs/libgrubmods_a-exfat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-exfat.o `test -f 'grub-core/fs/exfat.c' || echo '$(srcdir)/'`grub-core/fs/exfat.c + +grub-core/fs/libgrubmods_a-exfat.obj: grub-core/fs/exfat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-exfat.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-exfat.Tpo -c -o grub-core/fs/libgrubmods_a-exfat.obj `if test -f 'grub-core/fs/exfat.c'; then $(CYGPATH_W) 'grub-core/fs/exfat.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/exfat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-exfat.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-exfat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/exfat.c' object='grub-core/fs/libgrubmods_a-exfat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-exfat.obj `if test -f 'grub-core/fs/exfat.c'; then $(CYGPATH_W) 'grub-core/fs/exfat.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/exfat.c'; fi` + +grub-core/fs/libgrubmods_a-fshelp.o: grub-core/fs/fshelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-fshelp.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-fshelp.Tpo -c -o grub-core/fs/libgrubmods_a-fshelp.o `test -f 'grub-core/fs/fshelp.c' || echo '$(srcdir)/'`grub-core/fs/fshelp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-fshelp.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-fshelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/fshelp.c' object='grub-core/fs/libgrubmods_a-fshelp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-fshelp.o `test -f 'grub-core/fs/fshelp.c' || echo '$(srcdir)/'`grub-core/fs/fshelp.c + +grub-core/fs/libgrubmods_a-fshelp.obj: grub-core/fs/fshelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-fshelp.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-fshelp.Tpo -c -o grub-core/fs/libgrubmods_a-fshelp.obj `if test -f 'grub-core/fs/fshelp.c'; then $(CYGPATH_W) 'grub-core/fs/fshelp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/fshelp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-fshelp.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-fshelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/fshelp.c' object='grub-core/fs/libgrubmods_a-fshelp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-fshelp.obj `if test -f 'grub-core/fs/fshelp.c'; then $(CYGPATH_W) 'grub-core/fs/fshelp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/fshelp.c'; fi` + +grub-core/fs/libgrubmods_a-hfs.o: grub-core/fs/hfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-hfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-hfs.Tpo -c -o grub-core/fs/libgrubmods_a-hfs.o `test -f 'grub-core/fs/hfs.c' || echo '$(srcdir)/'`grub-core/fs/hfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-hfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-hfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/hfs.c' object='grub-core/fs/libgrubmods_a-hfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-hfs.o `test -f 'grub-core/fs/hfs.c' || echo '$(srcdir)/'`grub-core/fs/hfs.c + +grub-core/fs/libgrubmods_a-hfs.obj: grub-core/fs/hfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-hfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-hfs.Tpo -c -o grub-core/fs/libgrubmods_a-hfs.obj `if test -f 'grub-core/fs/hfs.c'; then $(CYGPATH_W) 'grub-core/fs/hfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/hfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-hfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-hfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/hfs.c' object='grub-core/fs/libgrubmods_a-hfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-hfs.obj `if test -f 'grub-core/fs/hfs.c'; then $(CYGPATH_W) 'grub-core/fs/hfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/hfs.c'; fi` + +grub-core/fs/libgrubmods_a-hfsplus.o: grub-core/fs/hfsplus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-hfsplus.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-hfsplus.Tpo -c -o grub-core/fs/libgrubmods_a-hfsplus.o `test -f 'grub-core/fs/hfsplus.c' || echo '$(srcdir)/'`grub-core/fs/hfsplus.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-hfsplus.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-hfsplus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/hfsplus.c' object='grub-core/fs/libgrubmods_a-hfsplus.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-hfsplus.o `test -f 'grub-core/fs/hfsplus.c' || echo '$(srcdir)/'`grub-core/fs/hfsplus.c + +grub-core/fs/libgrubmods_a-hfsplus.obj: grub-core/fs/hfsplus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-hfsplus.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-hfsplus.Tpo -c -o grub-core/fs/libgrubmods_a-hfsplus.obj `if test -f 'grub-core/fs/hfsplus.c'; then $(CYGPATH_W) 'grub-core/fs/hfsplus.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/hfsplus.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-hfsplus.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-hfsplus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/hfsplus.c' object='grub-core/fs/libgrubmods_a-hfsplus.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-hfsplus.obj `if test -f 'grub-core/fs/hfsplus.c'; then $(CYGPATH_W) 'grub-core/fs/hfsplus.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/hfsplus.c'; fi` + +grub-core/fs/libgrubmods_a-hfspluscomp.o: grub-core/fs/hfspluscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-hfspluscomp.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-hfspluscomp.Tpo -c -o grub-core/fs/libgrubmods_a-hfspluscomp.o `test -f 'grub-core/fs/hfspluscomp.c' || echo '$(srcdir)/'`grub-core/fs/hfspluscomp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-hfspluscomp.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-hfspluscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/hfspluscomp.c' object='grub-core/fs/libgrubmods_a-hfspluscomp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-hfspluscomp.o `test -f 'grub-core/fs/hfspluscomp.c' || echo '$(srcdir)/'`grub-core/fs/hfspluscomp.c + +grub-core/fs/libgrubmods_a-hfspluscomp.obj: grub-core/fs/hfspluscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-hfspluscomp.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-hfspluscomp.Tpo -c -o grub-core/fs/libgrubmods_a-hfspluscomp.obj `if test -f 'grub-core/fs/hfspluscomp.c'; then $(CYGPATH_W) 'grub-core/fs/hfspluscomp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/hfspluscomp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-hfspluscomp.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-hfspluscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/hfspluscomp.c' object='grub-core/fs/libgrubmods_a-hfspluscomp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-hfspluscomp.obj `if test -f 'grub-core/fs/hfspluscomp.c'; then $(CYGPATH_W) 'grub-core/fs/hfspluscomp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/hfspluscomp.c'; fi` + +grub-core/fs/libgrubmods_a-iso9660.o: grub-core/fs/iso9660.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-iso9660.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-iso9660.Tpo -c -o grub-core/fs/libgrubmods_a-iso9660.o `test -f 'grub-core/fs/iso9660.c' || echo '$(srcdir)/'`grub-core/fs/iso9660.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-iso9660.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-iso9660.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/iso9660.c' object='grub-core/fs/libgrubmods_a-iso9660.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-iso9660.o `test -f 'grub-core/fs/iso9660.c' || echo '$(srcdir)/'`grub-core/fs/iso9660.c + +grub-core/fs/libgrubmods_a-iso9660.obj: grub-core/fs/iso9660.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-iso9660.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-iso9660.Tpo -c -o grub-core/fs/libgrubmods_a-iso9660.obj `if test -f 'grub-core/fs/iso9660.c'; then $(CYGPATH_W) 'grub-core/fs/iso9660.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/iso9660.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-iso9660.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-iso9660.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/iso9660.c' object='grub-core/fs/libgrubmods_a-iso9660.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-iso9660.obj `if test -f 'grub-core/fs/iso9660.c'; then $(CYGPATH_W) 'grub-core/fs/iso9660.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/iso9660.c'; fi` + +grub-core/fs/libgrubmods_a-jfs.o: grub-core/fs/jfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-jfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-jfs.Tpo -c -o grub-core/fs/libgrubmods_a-jfs.o `test -f 'grub-core/fs/jfs.c' || echo '$(srcdir)/'`grub-core/fs/jfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-jfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-jfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/jfs.c' object='grub-core/fs/libgrubmods_a-jfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-jfs.o `test -f 'grub-core/fs/jfs.c' || echo '$(srcdir)/'`grub-core/fs/jfs.c + +grub-core/fs/libgrubmods_a-jfs.obj: grub-core/fs/jfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-jfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-jfs.Tpo -c -o grub-core/fs/libgrubmods_a-jfs.obj `if test -f 'grub-core/fs/jfs.c'; then $(CYGPATH_W) 'grub-core/fs/jfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/jfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-jfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-jfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/jfs.c' object='grub-core/fs/libgrubmods_a-jfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-jfs.obj `if test -f 'grub-core/fs/jfs.c'; then $(CYGPATH_W) 'grub-core/fs/jfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/jfs.c'; fi` + +grub-core/fs/libgrubmods_a-minix.o: grub-core/fs/minix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix.Tpo -c -o grub-core/fs/libgrubmods_a-minix.o `test -f 'grub-core/fs/minix.c' || echo '$(srcdir)/'`grub-core/fs/minix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix.c' object='grub-core/fs/libgrubmods_a-minix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix.o `test -f 'grub-core/fs/minix.c' || echo '$(srcdir)/'`grub-core/fs/minix.c + +grub-core/fs/libgrubmods_a-minix.obj: grub-core/fs/minix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix.Tpo -c -o grub-core/fs/libgrubmods_a-minix.obj `if test -f 'grub-core/fs/minix.c'; then $(CYGPATH_W) 'grub-core/fs/minix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix.c' object='grub-core/fs/libgrubmods_a-minix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix.obj `if test -f 'grub-core/fs/minix.c'; then $(CYGPATH_W) 'grub-core/fs/minix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix.c'; fi` + +grub-core/fs/libgrubmods_a-minix2.o: grub-core/fs/minix2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix2.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2.Tpo -c -o grub-core/fs/libgrubmods_a-minix2.o `test -f 'grub-core/fs/minix2.c' || echo '$(srcdir)/'`grub-core/fs/minix2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix2.c' object='grub-core/fs/libgrubmods_a-minix2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix2.o `test -f 'grub-core/fs/minix2.c' || echo '$(srcdir)/'`grub-core/fs/minix2.c + +grub-core/fs/libgrubmods_a-minix2.obj: grub-core/fs/minix2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix2.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2.Tpo -c -o grub-core/fs/libgrubmods_a-minix2.obj `if test -f 'grub-core/fs/minix2.c'; then $(CYGPATH_W) 'grub-core/fs/minix2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix2.c' object='grub-core/fs/libgrubmods_a-minix2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix2.obj `if test -f 'grub-core/fs/minix2.c'; then $(CYGPATH_W) 'grub-core/fs/minix2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix2.c'; fi` + +grub-core/fs/libgrubmods_a-minix3.o: grub-core/fs/minix3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix3.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3.Tpo -c -o grub-core/fs/libgrubmods_a-minix3.o `test -f 'grub-core/fs/minix3.c' || echo '$(srcdir)/'`grub-core/fs/minix3.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix3.c' object='grub-core/fs/libgrubmods_a-minix3.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix3.o `test -f 'grub-core/fs/minix3.c' || echo '$(srcdir)/'`grub-core/fs/minix3.c + +grub-core/fs/libgrubmods_a-minix3.obj: grub-core/fs/minix3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix3.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3.Tpo -c -o grub-core/fs/libgrubmods_a-minix3.obj `if test -f 'grub-core/fs/minix3.c'; then $(CYGPATH_W) 'grub-core/fs/minix3.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix3.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix3.c' object='grub-core/fs/libgrubmods_a-minix3.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix3.obj `if test -f 'grub-core/fs/minix3.c'; then $(CYGPATH_W) 'grub-core/fs/minix3.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix3.c'; fi` + +grub-core/fs/libgrubmods_a-minix_be.o: grub-core/fs/minix_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix_be.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix_be.Tpo -c -o grub-core/fs/libgrubmods_a-minix_be.o `test -f 'grub-core/fs/minix_be.c' || echo '$(srcdir)/'`grub-core/fs/minix_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix_be.c' object='grub-core/fs/libgrubmods_a-minix_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix_be.o `test -f 'grub-core/fs/minix_be.c' || echo '$(srcdir)/'`grub-core/fs/minix_be.c + +grub-core/fs/libgrubmods_a-minix_be.obj: grub-core/fs/minix_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix_be.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix_be.Tpo -c -o grub-core/fs/libgrubmods_a-minix_be.obj `if test -f 'grub-core/fs/minix_be.c'; then $(CYGPATH_W) 'grub-core/fs/minix_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix_be.c' object='grub-core/fs/libgrubmods_a-minix_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix_be.obj `if test -f 'grub-core/fs/minix_be.c'; then $(CYGPATH_W) 'grub-core/fs/minix_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix_be.c'; fi` + +grub-core/fs/libgrubmods_a-minix2_be.o: grub-core/fs/minix2_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix2_be.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2_be.Tpo -c -o grub-core/fs/libgrubmods_a-minix2_be.o `test -f 'grub-core/fs/minix2_be.c' || echo '$(srcdir)/'`grub-core/fs/minix2_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix2_be.c' object='grub-core/fs/libgrubmods_a-minix2_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix2_be.o `test -f 'grub-core/fs/minix2_be.c' || echo '$(srcdir)/'`grub-core/fs/minix2_be.c + +grub-core/fs/libgrubmods_a-minix2_be.obj: grub-core/fs/minix2_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix2_be.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2_be.Tpo -c -o grub-core/fs/libgrubmods_a-minix2_be.obj `if test -f 'grub-core/fs/minix2_be.c'; then $(CYGPATH_W) 'grub-core/fs/minix2_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix2_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix2_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix2_be.c' object='grub-core/fs/libgrubmods_a-minix2_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix2_be.obj `if test -f 'grub-core/fs/minix2_be.c'; then $(CYGPATH_W) 'grub-core/fs/minix2_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix2_be.c'; fi` + +grub-core/fs/libgrubmods_a-minix3_be.o: grub-core/fs/minix3_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix3_be.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3_be.Tpo -c -o grub-core/fs/libgrubmods_a-minix3_be.o `test -f 'grub-core/fs/minix3_be.c' || echo '$(srcdir)/'`grub-core/fs/minix3_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix3_be.c' object='grub-core/fs/libgrubmods_a-minix3_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix3_be.o `test -f 'grub-core/fs/minix3_be.c' || echo '$(srcdir)/'`grub-core/fs/minix3_be.c + +grub-core/fs/libgrubmods_a-minix3_be.obj: grub-core/fs/minix3_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-minix3_be.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3_be.Tpo -c -o grub-core/fs/libgrubmods_a-minix3_be.obj `if test -f 'grub-core/fs/minix3_be.c'; then $(CYGPATH_W) 'grub-core/fs/minix3_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix3_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-minix3_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/minix3_be.c' object='grub-core/fs/libgrubmods_a-minix3_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-minix3_be.obj `if test -f 'grub-core/fs/minix3_be.c'; then $(CYGPATH_W) 'grub-core/fs/minix3_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/minix3_be.c'; fi` + +grub-core/fs/libgrubmods_a-nilfs2.o: grub-core/fs/nilfs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-nilfs2.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-nilfs2.Tpo -c -o grub-core/fs/libgrubmods_a-nilfs2.o `test -f 'grub-core/fs/nilfs2.c' || echo '$(srcdir)/'`grub-core/fs/nilfs2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-nilfs2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-nilfs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/nilfs2.c' object='grub-core/fs/libgrubmods_a-nilfs2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-nilfs2.o `test -f 'grub-core/fs/nilfs2.c' || echo '$(srcdir)/'`grub-core/fs/nilfs2.c + +grub-core/fs/libgrubmods_a-nilfs2.obj: grub-core/fs/nilfs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-nilfs2.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-nilfs2.Tpo -c -o grub-core/fs/libgrubmods_a-nilfs2.obj `if test -f 'grub-core/fs/nilfs2.c'; then $(CYGPATH_W) 'grub-core/fs/nilfs2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/nilfs2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-nilfs2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-nilfs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/nilfs2.c' object='grub-core/fs/libgrubmods_a-nilfs2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-nilfs2.obj `if test -f 'grub-core/fs/nilfs2.c'; then $(CYGPATH_W) 'grub-core/fs/nilfs2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/nilfs2.c'; fi` + +grub-core/fs/libgrubmods_a-ntfs.o: grub-core/fs/ntfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ntfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfs.Tpo -c -o grub-core/fs/libgrubmods_a-ntfs.o `test -f 'grub-core/fs/ntfs.c' || echo '$(srcdir)/'`grub-core/fs/ntfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ntfs.c' object='grub-core/fs/libgrubmods_a-ntfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ntfs.o `test -f 'grub-core/fs/ntfs.c' || echo '$(srcdir)/'`grub-core/fs/ntfs.c + +grub-core/fs/libgrubmods_a-ntfs.obj: grub-core/fs/ntfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ntfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfs.Tpo -c -o grub-core/fs/libgrubmods_a-ntfs.obj `if test -f 'grub-core/fs/ntfs.c'; then $(CYGPATH_W) 'grub-core/fs/ntfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ntfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ntfs.c' object='grub-core/fs/libgrubmods_a-ntfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ntfs.obj `if test -f 'grub-core/fs/ntfs.c'; then $(CYGPATH_W) 'grub-core/fs/ntfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ntfs.c'; fi` + +grub-core/fs/libgrubmods_a-ntfscomp.o: grub-core/fs/ntfscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ntfscomp.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfscomp.Tpo -c -o grub-core/fs/libgrubmods_a-ntfscomp.o `test -f 'grub-core/fs/ntfscomp.c' || echo '$(srcdir)/'`grub-core/fs/ntfscomp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfscomp.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ntfscomp.c' object='grub-core/fs/libgrubmods_a-ntfscomp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ntfscomp.o `test -f 'grub-core/fs/ntfscomp.c' || echo '$(srcdir)/'`grub-core/fs/ntfscomp.c + +grub-core/fs/libgrubmods_a-ntfscomp.obj: grub-core/fs/ntfscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ntfscomp.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfscomp.Tpo -c -o grub-core/fs/libgrubmods_a-ntfscomp.obj `if test -f 'grub-core/fs/ntfscomp.c'; then $(CYGPATH_W) 'grub-core/fs/ntfscomp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ntfscomp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfscomp.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ntfscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ntfscomp.c' object='grub-core/fs/libgrubmods_a-ntfscomp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ntfscomp.obj `if test -f 'grub-core/fs/ntfscomp.c'; then $(CYGPATH_W) 'grub-core/fs/ntfscomp.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ntfscomp.c'; fi` + +grub-core/fs/libgrubmods_a-reiserfs.o: grub-core/fs/reiserfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-reiserfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-reiserfs.Tpo -c -o grub-core/fs/libgrubmods_a-reiserfs.o `test -f 'grub-core/fs/reiserfs.c' || echo '$(srcdir)/'`grub-core/fs/reiserfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-reiserfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-reiserfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/reiserfs.c' object='grub-core/fs/libgrubmods_a-reiserfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-reiserfs.o `test -f 'grub-core/fs/reiserfs.c' || echo '$(srcdir)/'`grub-core/fs/reiserfs.c + +grub-core/fs/libgrubmods_a-reiserfs.obj: grub-core/fs/reiserfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-reiserfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-reiserfs.Tpo -c -o grub-core/fs/libgrubmods_a-reiserfs.obj `if test -f 'grub-core/fs/reiserfs.c'; then $(CYGPATH_W) 'grub-core/fs/reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/reiserfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-reiserfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-reiserfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/reiserfs.c' object='grub-core/fs/libgrubmods_a-reiserfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-reiserfs.obj `if test -f 'grub-core/fs/reiserfs.c'; then $(CYGPATH_W) 'grub-core/fs/reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/reiserfs.c'; fi` + +grub-core/fs/libgrubmods_a-romfs.o: grub-core/fs/romfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-romfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-romfs.Tpo -c -o grub-core/fs/libgrubmods_a-romfs.o `test -f 'grub-core/fs/romfs.c' || echo '$(srcdir)/'`grub-core/fs/romfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-romfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-romfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/romfs.c' object='grub-core/fs/libgrubmods_a-romfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-romfs.o `test -f 'grub-core/fs/romfs.c' || echo '$(srcdir)/'`grub-core/fs/romfs.c + +grub-core/fs/libgrubmods_a-romfs.obj: grub-core/fs/romfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-romfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-romfs.Tpo -c -o grub-core/fs/libgrubmods_a-romfs.obj `if test -f 'grub-core/fs/romfs.c'; then $(CYGPATH_W) 'grub-core/fs/romfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/romfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-romfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-romfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/romfs.c' object='grub-core/fs/libgrubmods_a-romfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-romfs.obj `if test -f 'grub-core/fs/romfs.c'; then $(CYGPATH_W) 'grub-core/fs/romfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/romfs.c'; fi` + +grub-core/fs/libgrubmods_a-sfs.o: grub-core/fs/sfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-sfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-sfs.Tpo -c -o grub-core/fs/libgrubmods_a-sfs.o `test -f 'grub-core/fs/sfs.c' || echo '$(srcdir)/'`grub-core/fs/sfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-sfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-sfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/sfs.c' object='grub-core/fs/libgrubmods_a-sfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-sfs.o `test -f 'grub-core/fs/sfs.c' || echo '$(srcdir)/'`grub-core/fs/sfs.c + +grub-core/fs/libgrubmods_a-sfs.obj: grub-core/fs/sfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-sfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-sfs.Tpo -c -o grub-core/fs/libgrubmods_a-sfs.obj `if test -f 'grub-core/fs/sfs.c'; then $(CYGPATH_W) 'grub-core/fs/sfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/sfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-sfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-sfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/sfs.c' object='grub-core/fs/libgrubmods_a-sfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-sfs.obj `if test -f 'grub-core/fs/sfs.c'; then $(CYGPATH_W) 'grub-core/fs/sfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/sfs.c'; fi` + +grub-core/fs/libgrubmods_a-squash4.o: grub-core/fs/squash4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-squash4.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-squash4.Tpo -c -o grub-core/fs/libgrubmods_a-squash4.o `test -f 'grub-core/fs/squash4.c' || echo '$(srcdir)/'`grub-core/fs/squash4.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-squash4.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-squash4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/squash4.c' object='grub-core/fs/libgrubmods_a-squash4.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-squash4.o `test -f 'grub-core/fs/squash4.c' || echo '$(srcdir)/'`grub-core/fs/squash4.c + +grub-core/fs/libgrubmods_a-squash4.obj: grub-core/fs/squash4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-squash4.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-squash4.Tpo -c -o grub-core/fs/libgrubmods_a-squash4.obj `if test -f 'grub-core/fs/squash4.c'; then $(CYGPATH_W) 'grub-core/fs/squash4.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/squash4.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-squash4.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-squash4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/squash4.c' object='grub-core/fs/libgrubmods_a-squash4.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-squash4.obj `if test -f 'grub-core/fs/squash4.c'; then $(CYGPATH_W) 'grub-core/fs/squash4.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/squash4.c'; fi` + +grub-core/fs/libgrubmods_a-tar.o: grub-core/fs/tar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-tar.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-tar.Tpo -c -o grub-core/fs/libgrubmods_a-tar.o `test -f 'grub-core/fs/tar.c' || echo '$(srcdir)/'`grub-core/fs/tar.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-tar.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-tar.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/tar.c' object='grub-core/fs/libgrubmods_a-tar.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-tar.o `test -f 'grub-core/fs/tar.c' || echo '$(srcdir)/'`grub-core/fs/tar.c + +grub-core/fs/libgrubmods_a-tar.obj: grub-core/fs/tar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-tar.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-tar.Tpo -c -o grub-core/fs/libgrubmods_a-tar.obj `if test -f 'grub-core/fs/tar.c'; then $(CYGPATH_W) 'grub-core/fs/tar.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/tar.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-tar.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-tar.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/tar.c' object='grub-core/fs/libgrubmods_a-tar.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-tar.obj `if test -f 'grub-core/fs/tar.c'; then $(CYGPATH_W) 'grub-core/fs/tar.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/tar.c'; fi` + +grub-core/fs/libgrubmods_a-udf.o: grub-core/fs/udf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-udf.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-udf.Tpo -c -o grub-core/fs/libgrubmods_a-udf.o `test -f 'grub-core/fs/udf.c' || echo '$(srcdir)/'`grub-core/fs/udf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-udf.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-udf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/udf.c' object='grub-core/fs/libgrubmods_a-udf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-udf.o `test -f 'grub-core/fs/udf.c' || echo '$(srcdir)/'`grub-core/fs/udf.c + +grub-core/fs/libgrubmods_a-udf.obj: grub-core/fs/udf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-udf.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-udf.Tpo -c -o grub-core/fs/libgrubmods_a-udf.obj `if test -f 'grub-core/fs/udf.c'; then $(CYGPATH_W) 'grub-core/fs/udf.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/udf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-udf.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-udf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/udf.c' object='grub-core/fs/libgrubmods_a-udf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-udf.obj `if test -f 'grub-core/fs/udf.c'; then $(CYGPATH_W) 'grub-core/fs/udf.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/udf.c'; fi` + +grub-core/fs/libgrubmods_a-ufs2.o: grub-core/fs/ufs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ufs2.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs2.Tpo -c -o grub-core/fs/libgrubmods_a-ufs2.o `test -f 'grub-core/fs/ufs2.c' || echo '$(srcdir)/'`grub-core/fs/ufs2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ufs2.c' object='grub-core/fs/libgrubmods_a-ufs2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ufs2.o `test -f 'grub-core/fs/ufs2.c' || echo '$(srcdir)/'`grub-core/fs/ufs2.c + +grub-core/fs/libgrubmods_a-ufs2.obj: grub-core/fs/ufs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ufs2.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs2.Tpo -c -o grub-core/fs/libgrubmods_a-ufs2.obj `if test -f 'grub-core/fs/ufs2.c'; then $(CYGPATH_W) 'grub-core/fs/ufs2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ufs2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs2.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ufs2.c' object='grub-core/fs/libgrubmods_a-ufs2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ufs2.obj `if test -f 'grub-core/fs/ufs2.c'; then $(CYGPATH_W) 'grub-core/fs/ufs2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ufs2.c'; fi` + +grub-core/fs/libgrubmods_a-ufs.o: grub-core/fs/ufs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ufs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs.Tpo -c -o grub-core/fs/libgrubmods_a-ufs.o `test -f 'grub-core/fs/ufs.c' || echo '$(srcdir)/'`grub-core/fs/ufs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ufs.c' object='grub-core/fs/libgrubmods_a-ufs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ufs.o `test -f 'grub-core/fs/ufs.c' || echo '$(srcdir)/'`grub-core/fs/ufs.c + +grub-core/fs/libgrubmods_a-ufs.obj: grub-core/fs/ufs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ufs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs.Tpo -c -o grub-core/fs/libgrubmods_a-ufs.obj `if test -f 'grub-core/fs/ufs.c'; then $(CYGPATH_W) 'grub-core/fs/ufs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ufs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ufs.c' object='grub-core/fs/libgrubmods_a-ufs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ufs.obj `if test -f 'grub-core/fs/ufs.c'; then $(CYGPATH_W) 'grub-core/fs/ufs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ufs.c'; fi` + +grub-core/fs/libgrubmods_a-ufs_be.o: grub-core/fs/ufs_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ufs_be.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs_be.Tpo -c -o grub-core/fs/libgrubmods_a-ufs_be.o `test -f 'grub-core/fs/ufs_be.c' || echo '$(srcdir)/'`grub-core/fs/ufs_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ufs_be.c' object='grub-core/fs/libgrubmods_a-ufs_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ufs_be.o `test -f 'grub-core/fs/ufs_be.c' || echo '$(srcdir)/'`grub-core/fs/ufs_be.c + +grub-core/fs/libgrubmods_a-ufs_be.obj: grub-core/fs/ufs_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-ufs_be.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs_be.Tpo -c -o grub-core/fs/libgrubmods_a-ufs_be.obj `if test -f 'grub-core/fs/ufs_be.c'; then $(CYGPATH_W) 'grub-core/fs/ufs_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ufs_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs_be.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-ufs_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/ufs_be.c' object='grub-core/fs/libgrubmods_a-ufs_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-ufs_be.obj `if test -f 'grub-core/fs/ufs_be.c'; then $(CYGPATH_W) 'grub-core/fs/ufs_be.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/ufs_be.c'; fi` + +grub-core/fs/libgrubmods_a-xfs.o: grub-core/fs/xfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-xfs.o -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-xfs.Tpo -c -o grub-core/fs/libgrubmods_a-xfs.o `test -f 'grub-core/fs/xfs.c' || echo '$(srcdir)/'`grub-core/fs/xfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-xfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-xfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/xfs.c' object='grub-core/fs/libgrubmods_a-xfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-xfs.o `test -f 'grub-core/fs/xfs.c' || echo '$(srcdir)/'`grub-core/fs/xfs.c + +grub-core/fs/libgrubmods_a-xfs.obj: grub-core/fs/xfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/libgrubmods_a-xfs.obj -MD -MP -MF grub-core/fs/$(DEPDIR)/libgrubmods_a-xfs.Tpo -c -o grub-core/fs/libgrubmods_a-xfs.obj `if test -f 'grub-core/fs/xfs.c'; then $(CYGPATH_W) 'grub-core/fs/xfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/xfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/$(DEPDIR)/libgrubmods_a-xfs.Tpo grub-core/fs/$(DEPDIR)/libgrubmods_a-xfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/xfs.c' object='grub-core/fs/libgrubmods_a-xfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/libgrubmods_a-xfs.obj `if test -f 'grub-core/fs/xfs.c'; then $(CYGPATH_W) 'grub-core/fs/xfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/xfs.c'; fi` + +grub-core/fs/zfs/libgrubmods_a-zfscrypt.o: grub-core/fs/zfs/zfscrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfscrypt.o -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfscrypt.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfscrypt.o `test -f 'grub-core/fs/zfs/zfscrypt.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfscrypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfscrypt.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfscrypt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfscrypt.c' object='grub-core/fs/zfs/libgrubmods_a-zfscrypt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfscrypt.o `test -f 'grub-core/fs/zfs/zfscrypt.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfscrypt.c + +grub-core/fs/zfs/libgrubmods_a-zfscrypt.obj: grub-core/fs/zfs/zfscrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfscrypt.obj -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfscrypt.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfscrypt.obj `if test -f 'grub-core/fs/zfs/zfscrypt.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfscrypt.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfscrypt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfscrypt.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfscrypt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfscrypt.c' object='grub-core/fs/zfs/libgrubmods_a-zfscrypt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfscrypt.obj `if test -f 'grub-core/fs/zfs/zfscrypt.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfscrypt.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfscrypt.c'; fi` + +grub-core/fs/zfs/libgrubmods_a-zfs.o: grub-core/fs/zfs/zfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs.o -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs.o `test -f 'grub-core/fs/zfs/zfs.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs.c' object='grub-core/fs/zfs/libgrubmods_a-zfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs.o `test -f 'grub-core/fs/zfs/zfs.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs.c + +grub-core/fs/zfs/libgrubmods_a-zfs.obj: grub-core/fs/zfs/zfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs.obj -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs.obj `if test -f 'grub-core/fs/zfs/zfs.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs.c' object='grub-core/fs/zfs/libgrubmods_a-zfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs.obj `if test -f 'grub-core/fs/zfs/zfs.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs.c'; fi` + +grub-core/fs/zfs/libgrubmods_a-zfsinfo.o: grub-core/fs/zfs/zfsinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfsinfo.o -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfsinfo.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfsinfo.o `test -f 'grub-core/fs/zfs/zfsinfo.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfsinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfsinfo.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfsinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfsinfo.c' object='grub-core/fs/zfs/libgrubmods_a-zfsinfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfsinfo.o `test -f 'grub-core/fs/zfs/zfsinfo.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfsinfo.c + +grub-core/fs/zfs/libgrubmods_a-zfsinfo.obj: grub-core/fs/zfs/zfsinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfsinfo.obj -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfsinfo.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfsinfo.obj `if test -f 'grub-core/fs/zfs/zfsinfo.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfsinfo.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfsinfo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfsinfo.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfsinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfsinfo.c' object='grub-core/fs/zfs/libgrubmods_a-zfsinfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfsinfo.obj `if test -f 'grub-core/fs/zfs/zfsinfo.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfsinfo.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfsinfo.c'; fi` + +grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.o: grub-core/fs/zfs/zfs_lzjb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.o -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lzjb.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.o `test -f 'grub-core/fs/zfs/zfs_lzjb.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_lzjb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lzjb.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lzjb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_lzjb.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.o `test -f 'grub-core/fs/zfs/zfs_lzjb.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_lzjb.c + +grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.obj: grub-core/fs/zfs/zfs_lzjb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.obj -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lzjb.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.obj `if test -f 'grub-core/fs/zfs/zfs_lzjb.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_lzjb.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_lzjb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lzjb.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lzjb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_lzjb.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lzjb.obj `if test -f 'grub-core/fs/zfs/zfs_lzjb.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_lzjb.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_lzjb.c'; fi` + +grub-core/fs/zfs/libgrubmods_a-zfs_lz4.o: grub-core/fs/zfs/zfs_lz4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_lz4.o -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lz4.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lz4.o `test -f 'grub-core/fs/zfs/zfs_lz4.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_lz4.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lz4.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lz4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_lz4.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_lz4.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lz4.o `test -f 'grub-core/fs/zfs/zfs_lz4.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_lz4.c + +grub-core/fs/zfs/libgrubmods_a-zfs_lz4.obj: grub-core/fs/zfs/zfs_lz4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_lz4.obj -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lz4.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lz4.obj `if test -f 'grub-core/fs/zfs/zfs_lz4.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_lz4.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_lz4.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lz4.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_lz4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_lz4.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_lz4.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_lz4.obj `if test -f 'grub-core/fs/zfs/zfs_lz4.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_lz4.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_lz4.c'; fi` + +grub-core/fs/zfs/libgrubmods_a-zfs_sha256.o: grub-core/fs/zfs/zfs_sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_sha256.o -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_sha256.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_sha256.o `test -f 'grub-core/fs/zfs/zfs_sha256.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_sha256.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_sha256.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_sha256.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_sha256.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_sha256.o `test -f 'grub-core/fs/zfs/zfs_sha256.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_sha256.c + +grub-core/fs/zfs/libgrubmods_a-zfs_sha256.obj: grub-core/fs/zfs/zfs_sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_sha256.obj -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_sha256.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_sha256.obj `if test -f 'grub-core/fs/zfs/zfs_sha256.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_sha256.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_sha256.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_sha256.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_sha256.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_sha256.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_sha256.obj `if test -f 'grub-core/fs/zfs/zfs_sha256.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_sha256.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_sha256.c'; fi` + +grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.o: grub-core/fs/zfs/zfs_fletcher.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.o -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_fletcher.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.o `test -f 'grub-core/fs/zfs/zfs_fletcher.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_fletcher.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_fletcher.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_fletcher.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_fletcher.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.o `test -f 'grub-core/fs/zfs/zfs_fletcher.c' || echo '$(srcdir)/'`grub-core/fs/zfs/zfs_fletcher.c + +grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.obj: grub-core/fs/zfs/zfs_fletcher.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.obj -MD -MP -MF grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_fletcher.Tpo -c -o grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.obj `if test -f 'grub-core/fs/zfs/zfs_fletcher.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_fletcher.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_fletcher.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_fletcher.Tpo grub-core/fs/zfs/$(DEPDIR)/libgrubmods_a-zfs_fletcher.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/fs/zfs/zfs_fletcher.c' object='grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/fs/zfs/libgrubmods_a-zfs_fletcher.obj `if test -f 'grub-core/fs/zfs/zfs_fletcher.c'; then $(CYGPATH_W) 'grub-core/fs/zfs/zfs_fletcher.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/fs/zfs/zfs_fletcher.c'; fi` + +grub-core/lib/libgrubmods_a-envblk.o: grub-core/lib/envblk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-envblk.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-envblk.Tpo -c -o grub-core/lib/libgrubmods_a-envblk.o `test -f 'grub-core/lib/envblk.c' || echo '$(srcdir)/'`grub-core/lib/envblk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-envblk.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-envblk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/envblk.c' object='grub-core/lib/libgrubmods_a-envblk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-envblk.o `test -f 'grub-core/lib/envblk.c' || echo '$(srcdir)/'`grub-core/lib/envblk.c + +grub-core/lib/libgrubmods_a-envblk.obj: grub-core/lib/envblk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-envblk.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-envblk.Tpo -c -o grub-core/lib/libgrubmods_a-envblk.obj `if test -f 'grub-core/lib/envblk.c'; then $(CYGPATH_W) 'grub-core/lib/envblk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/envblk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-envblk.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-envblk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/envblk.c' object='grub-core/lib/libgrubmods_a-envblk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-envblk.obj `if test -f 'grub-core/lib/envblk.c'; then $(CYGPATH_W) 'grub-core/lib/envblk.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/envblk.c'; fi` + +grub-core/lib/libgrubmods_a-hexdump.o: grub-core/lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-hexdump.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-hexdump.Tpo -c -o grub-core/lib/libgrubmods_a-hexdump.o `test -f 'grub-core/lib/hexdump.c' || echo '$(srcdir)/'`grub-core/lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-hexdump.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/hexdump.c' object='grub-core/lib/libgrubmods_a-hexdump.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-hexdump.o `test -f 'grub-core/lib/hexdump.c' || echo '$(srcdir)/'`grub-core/lib/hexdump.c + +grub-core/lib/libgrubmods_a-hexdump.obj: grub-core/lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-hexdump.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-hexdump.Tpo -c -o grub-core/lib/libgrubmods_a-hexdump.obj `if test -f 'grub-core/lib/hexdump.c'; then $(CYGPATH_W) 'grub-core/lib/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/hexdump.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-hexdump.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/hexdump.c' object='grub-core/lib/libgrubmods_a-hexdump.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-hexdump.obj `if test -f 'grub-core/lib/hexdump.c'; then $(CYGPATH_W) 'grub-core/lib/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/hexdump.c'; fi` + +grub-core/lib/libgrubmods_a-LzFind.o: grub-core/lib/LzFind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-LzFind.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-LzFind.Tpo -c -o grub-core/lib/libgrubmods_a-LzFind.o `test -f 'grub-core/lib/LzFind.c' || echo '$(srcdir)/'`grub-core/lib/LzFind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-LzFind.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-LzFind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/LzFind.c' object='grub-core/lib/libgrubmods_a-LzFind.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-LzFind.o `test -f 'grub-core/lib/LzFind.c' || echo '$(srcdir)/'`grub-core/lib/LzFind.c + +grub-core/lib/libgrubmods_a-LzFind.obj: grub-core/lib/LzFind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-LzFind.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-LzFind.Tpo -c -o grub-core/lib/libgrubmods_a-LzFind.obj `if test -f 'grub-core/lib/LzFind.c'; then $(CYGPATH_W) 'grub-core/lib/LzFind.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/LzFind.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-LzFind.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-LzFind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/LzFind.c' object='grub-core/lib/libgrubmods_a-LzFind.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-LzFind.obj `if test -f 'grub-core/lib/LzFind.c'; then $(CYGPATH_W) 'grub-core/lib/LzFind.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/LzFind.c'; fi` + +grub-core/lib/libgrubmods_a-LzmaEnc.o: grub-core/lib/LzmaEnc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-LzmaEnc.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-LzmaEnc.Tpo -c -o grub-core/lib/libgrubmods_a-LzmaEnc.o `test -f 'grub-core/lib/LzmaEnc.c' || echo '$(srcdir)/'`grub-core/lib/LzmaEnc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-LzmaEnc.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-LzmaEnc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/LzmaEnc.c' object='grub-core/lib/libgrubmods_a-LzmaEnc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-LzmaEnc.o `test -f 'grub-core/lib/LzmaEnc.c' || echo '$(srcdir)/'`grub-core/lib/LzmaEnc.c + +grub-core/lib/libgrubmods_a-LzmaEnc.obj: grub-core/lib/LzmaEnc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-LzmaEnc.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-LzmaEnc.Tpo -c -o grub-core/lib/libgrubmods_a-LzmaEnc.obj `if test -f 'grub-core/lib/LzmaEnc.c'; then $(CYGPATH_W) 'grub-core/lib/LzmaEnc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/LzmaEnc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-LzmaEnc.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-LzmaEnc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/LzmaEnc.c' object='grub-core/lib/libgrubmods_a-LzmaEnc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-LzmaEnc.obj `if test -f 'grub-core/lib/LzmaEnc.c'; then $(CYGPATH_W) 'grub-core/lib/LzmaEnc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/LzmaEnc.c'; fi` + +grub-core/lib/libgrubmods_a-crc.o: grub-core/lib/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-crc.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-crc.Tpo -c -o grub-core/lib/libgrubmods_a-crc.o `test -f 'grub-core/lib/crc.c' || echo '$(srcdir)/'`grub-core/lib/crc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-crc.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/crc.c' object='grub-core/lib/libgrubmods_a-crc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-crc.o `test -f 'grub-core/lib/crc.c' || echo '$(srcdir)/'`grub-core/lib/crc.c + +grub-core/lib/libgrubmods_a-crc.obj: grub-core/lib/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-crc.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-crc.Tpo -c -o grub-core/lib/libgrubmods_a-crc.obj `if test -f 'grub-core/lib/crc.c'; then $(CYGPATH_W) 'grub-core/lib/crc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/crc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-crc.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/crc.c' object='grub-core/lib/libgrubmods_a-crc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-crc.obj `if test -f 'grub-core/lib/crc.c'; then $(CYGPATH_W) 'grub-core/lib/crc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/crc.c'; fi` + +grub-core/lib/libgrubmods_a-adler32.o: grub-core/lib/adler32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-adler32.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-adler32.Tpo -c -o grub-core/lib/libgrubmods_a-adler32.o `test -f 'grub-core/lib/adler32.c' || echo '$(srcdir)/'`grub-core/lib/adler32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-adler32.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-adler32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/adler32.c' object='grub-core/lib/libgrubmods_a-adler32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-adler32.o `test -f 'grub-core/lib/adler32.c' || echo '$(srcdir)/'`grub-core/lib/adler32.c + +grub-core/lib/libgrubmods_a-adler32.obj: grub-core/lib/adler32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-adler32.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-adler32.Tpo -c -o grub-core/lib/libgrubmods_a-adler32.obj `if test -f 'grub-core/lib/adler32.c'; then $(CYGPATH_W) 'grub-core/lib/adler32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/adler32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-adler32.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-adler32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/adler32.c' object='grub-core/lib/libgrubmods_a-adler32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-adler32.obj `if test -f 'grub-core/lib/adler32.c'; then $(CYGPATH_W) 'grub-core/lib/adler32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/adler32.c'; fi` + +grub-core/lib/libgrubmods_a-crc64.o: grub-core/lib/crc64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-crc64.o -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-crc64.Tpo -c -o grub-core/lib/libgrubmods_a-crc64.o `test -f 'grub-core/lib/crc64.c' || echo '$(srcdir)/'`grub-core/lib/crc64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-crc64.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-crc64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/crc64.c' object='grub-core/lib/libgrubmods_a-crc64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-crc64.o `test -f 'grub-core/lib/crc64.c' || echo '$(srcdir)/'`grub-core/lib/crc64.c + +grub-core/lib/libgrubmods_a-crc64.obj: grub-core/lib/crc64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/libgrubmods_a-crc64.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/libgrubmods_a-crc64.Tpo -c -o grub-core/lib/libgrubmods_a-crc64.obj `if test -f 'grub-core/lib/crc64.c'; then $(CYGPATH_W) 'grub-core/lib/crc64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/crc64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/libgrubmods_a-crc64.Tpo grub-core/lib/$(DEPDIR)/libgrubmods_a-crc64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/crc64.c' object='grub-core/lib/libgrubmods_a-crc64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/libgrubmods_a-crc64.obj `if test -f 'grub-core/lib/crc64.c'; then $(CYGPATH_W) 'grub-core/lib/crc64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/crc64.c'; fi` + +grub-core/normal/libgrubmods_a-datetime.o: grub-core/normal/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/normal/libgrubmods_a-datetime.o -MD -MP -MF grub-core/normal/$(DEPDIR)/libgrubmods_a-datetime.Tpo -c -o grub-core/normal/libgrubmods_a-datetime.o `test -f 'grub-core/normal/datetime.c' || echo '$(srcdir)/'`grub-core/normal/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/normal/$(DEPDIR)/libgrubmods_a-datetime.Tpo grub-core/normal/$(DEPDIR)/libgrubmods_a-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/normal/datetime.c' object='grub-core/normal/libgrubmods_a-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/normal/libgrubmods_a-datetime.o `test -f 'grub-core/normal/datetime.c' || echo '$(srcdir)/'`grub-core/normal/datetime.c + +grub-core/normal/libgrubmods_a-datetime.obj: grub-core/normal/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/normal/libgrubmods_a-datetime.obj -MD -MP -MF grub-core/normal/$(DEPDIR)/libgrubmods_a-datetime.Tpo -c -o grub-core/normal/libgrubmods_a-datetime.obj `if test -f 'grub-core/normal/datetime.c'; then $(CYGPATH_W) 'grub-core/normal/datetime.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/normal/datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/normal/$(DEPDIR)/libgrubmods_a-datetime.Tpo grub-core/normal/$(DEPDIR)/libgrubmods_a-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/normal/datetime.c' object='grub-core/normal/libgrubmods_a-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/normal/libgrubmods_a-datetime.obj `if test -f 'grub-core/normal/datetime.c'; then $(CYGPATH_W) 'grub-core/normal/datetime.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/normal/datetime.c'; fi` + +grub-core/normal/libgrubmods_a-misc.o: grub-core/normal/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/normal/libgrubmods_a-misc.o -MD -MP -MF grub-core/normal/$(DEPDIR)/libgrubmods_a-misc.Tpo -c -o grub-core/normal/libgrubmods_a-misc.o `test -f 'grub-core/normal/misc.c' || echo '$(srcdir)/'`grub-core/normal/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/normal/$(DEPDIR)/libgrubmods_a-misc.Tpo grub-core/normal/$(DEPDIR)/libgrubmods_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/normal/misc.c' object='grub-core/normal/libgrubmods_a-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/normal/libgrubmods_a-misc.o `test -f 'grub-core/normal/misc.c' || echo '$(srcdir)/'`grub-core/normal/misc.c + +grub-core/normal/libgrubmods_a-misc.obj: grub-core/normal/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/normal/libgrubmods_a-misc.obj -MD -MP -MF grub-core/normal/$(DEPDIR)/libgrubmods_a-misc.Tpo -c -o grub-core/normal/libgrubmods_a-misc.obj `if test -f 'grub-core/normal/misc.c'; then $(CYGPATH_W) 'grub-core/normal/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/normal/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/normal/$(DEPDIR)/libgrubmods_a-misc.Tpo grub-core/normal/$(DEPDIR)/libgrubmods_a-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/normal/misc.c' object='grub-core/normal/libgrubmods_a-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/normal/libgrubmods_a-misc.obj `if test -f 'grub-core/normal/misc.c'; then $(CYGPATH_W) 'grub-core/normal/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/normal/misc.c'; fi` + +grub-core/partmap/libgrubmods_a-acorn.o: grub-core/partmap/acorn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-acorn.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-acorn.Tpo -c -o grub-core/partmap/libgrubmods_a-acorn.o `test -f 'grub-core/partmap/acorn.c' || echo '$(srcdir)/'`grub-core/partmap/acorn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-acorn.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-acorn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/acorn.c' object='grub-core/partmap/libgrubmods_a-acorn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-acorn.o `test -f 'grub-core/partmap/acorn.c' || echo '$(srcdir)/'`grub-core/partmap/acorn.c + +grub-core/partmap/libgrubmods_a-acorn.obj: grub-core/partmap/acorn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-acorn.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-acorn.Tpo -c -o grub-core/partmap/libgrubmods_a-acorn.obj `if test -f 'grub-core/partmap/acorn.c'; then $(CYGPATH_W) 'grub-core/partmap/acorn.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/acorn.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-acorn.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-acorn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/acorn.c' object='grub-core/partmap/libgrubmods_a-acorn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-acorn.obj `if test -f 'grub-core/partmap/acorn.c'; then $(CYGPATH_W) 'grub-core/partmap/acorn.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/acorn.c'; fi` + +grub-core/partmap/libgrubmods_a-amiga.o: grub-core/partmap/amiga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-amiga.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-amiga.Tpo -c -o grub-core/partmap/libgrubmods_a-amiga.o `test -f 'grub-core/partmap/amiga.c' || echo '$(srcdir)/'`grub-core/partmap/amiga.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-amiga.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-amiga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/amiga.c' object='grub-core/partmap/libgrubmods_a-amiga.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-amiga.o `test -f 'grub-core/partmap/amiga.c' || echo '$(srcdir)/'`grub-core/partmap/amiga.c + +grub-core/partmap/libgrubmods_a-amiga.obj: grub-core/partmap/amiga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-amiga.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-amiga.Tpo -c -o grub-core/partmap/libgrubmods_a-amiga.obj `if test -f 'grub-core/partmap/amiga.c'; then $(CYGPATH_W) 'grub-core/partmap/amiga.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/amiga.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-amiga.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-amiga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/amiga.c' object='grub-core/partmap/libgrubmods_a-amiga.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-amiga.obj `if test -f 'grub-core/partmap/amiga.c'; then $(CYGPATH_W) 'grub-core/partmap/amiga.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/amiga.c'; fi` + +grub-core/partmap/libgrubmods_a-apple.o: grub-core/partmap/apple.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-apple.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-apple.Tpo -c -o grub-core/partmap/libgrubmods_a-apple.o `test -f 'grub-core/partmap/apple.c' || echo '$(srcdir)/'`grub-core/partmap/apple.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-apple.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-apple.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/apple.c' object='grub-core/partmap/libgrubmods_a-apple.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-apple.o `test -f 'grub-core/partmap/apple.c' || echo '$(srcdir)/'`grub-core/partmap/apple.c + +grub-core/partmap/libgrubmods_a-apple.obj: grub-core/partmap/apple.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-apple.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-apple.Tpo -c -o grub-core/partmap/libgrubmods_a-apple.obj `if test -f 'grub-core/partmap/apple.c'; then $(CYGPATH_W) 'grub-core/partmap/apple.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/apple.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-apple.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-apple.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/apple.c' object='grub-core/partmap/libgrubmods_a-apple.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-apple.obj `if test -f 'grub-core/partmap/apple.c'; then $(CYGPATH_W) 'grub-core/partmap/apple.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/apple.c'; fi` + +grub-core/partmap/libgrubmods_a-sun.o: grub-core/partmap/sun.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-sun.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-sun.Tpo -c -o grub-core/partmap/libgrubmods_a-sun.o `test -f 'grub-core/partmap/sun.c' || echo '$(srcdir)/'`grub-core/partmap/sun.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-sun.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-sun.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/sun.c' object='grub-core/partmap/libgrubmods_a-sun.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-sun.o `test -f 'grub-core/partmap/sun.c' || echo '$(srcdir)/'`grub-core/partmap/sun.c + +grub-core/partmap/libgrubmods_a-sun.obj: grub-core/partmap/sun.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-sun.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-sun.Tpo -c -o grub-core/partmap/libgrubmods_a-sun.obj `if test -f 'grub-core/partmap/sun.c'; then $(CYGPATH_W) 'grub-core/partmap/sun.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/sun.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-sun.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-sun.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/sun.c' object='grub-core/partmap/libgrubmods_a-sun.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-sun.obj `if test -f 'grub-core/partmap/sun.c'; then $(CYGPATH_W) 'grub-core/partmap/sun.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/sun.c'; fi` + +grub-core/partmap/libgrubmods_a-plan.o: grub-core/partmap/plan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-plan.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-plan.Tpo -c -o grub-core/partmap/libgrubmods_a-plan.o `test -f 'grub-core/partmap/plan.c' || echo '$(srcdir)/'`grub-core/partmap/plan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-plan.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-plan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/plan.c' object='grub-core/partmap/libgrubmods_a-plan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-plan.o `test -f 'grub-core/partmap/plan.c' || echo '$(srcdir)/'`grub-core/partmap/plan.c + +grub-core/partmap/libgrubmods_a-plan.obj: grub-core/partmap/plan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-plan.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-plan.Tpo -c -o grub-core/partmap/libgrubmods_a-plan.obj `if test -f 'grub-core/partmap/plan.c'; then $(CYGPATH_W) 'grub-core/partmap/plan.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/plan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-plan.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-plan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/plan.c' object='grub-core/partmap/libgrubmods_a-plan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-plan.obj `if test -f 'grub-core/partmap/plan.c'; then $(CYGPATH_W) 'grub-core/partmap/plan.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/plan.c'; fi` + +grub-core/partmap/libgrubmods_a-dvh.o: grub-core/partmap/dvh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-dvh.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-dvh.Tpo -c -o grub-core/partmap/libgrubmods_a-dvh.o `test -f 'grub-core/partmap/dvh.c' || echo '$(srcdir)/'`grub-core/partmap/dvh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-dvh.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-dvh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/dvh.c' object='grub-core/partmap/libgrubmods_a-dvh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-dvh.o `test -f 'grub-core/partmap/dvh.c' || echo '$(srcdir)/'`grub-core/partmap/dvh.c + +grub-core/partmap/libgrubmods_a-dvh.obj: grub-core/partmap/dvh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-dvh.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-dvh.Tpo -c -o grub-core/partmap/libgrubmods_a-dvh.obj `if test -f 'grub-core/partmap/dvh.c'; then $(CYGPATH_W) 'grub-core/partmap/dvh.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/dvh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-dvh.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-dvh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/dvh.c' object='grub-core/partmap/libgrubmods_a-dvh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-dvh.obj `if test -f 'grub-core/partmap/dvh.c'; then $(CYGPATH_W) 'grub-core/partmap/dvh.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/dvh.c'; fi` + +grub-core/partmap/libgrubmods_a-sunpc.o: grub-core/partmap/sunpc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-sunpc.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-sunpc.Tpo -c -o grub-core/partmap/libgrubmods_a-sunpc.o `test -f 'grub-core/partmap/sunpc.c' || echo '$(srcdir)/'`grub-core/partmap/sunpc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-sunpc.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-sunpc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/sunpc.c' object='grub-core/partmap/libgrubmods_a-sunpc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-sunpc.o `test -f 'grub-core/partmap/sunpc.c' || echo '$(srcdir)/'`grub-core/partmap/sunpc.c + +grub-core/partmap/libgrubmods_a-sunpc.obj: grub-core/partmap/sunpc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-sunpc.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-sunpc.Tpo -c -o grub-core/partmap/libgrubmods_a-sunpc.obj `if test -f 'grub-core/partmap/sunpc.c'; then $(CYGPATH_W) 'grub-core/partmap/sunpc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/sunpc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-sunpc.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-sunpc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/sunpc.c' object='grub-core/partmap/libgrubmods_a-sunpc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-sunpc.obj `if test -f 'grub-core/partmap/sunpc.c'; then $(CYGPATH_W) 'grub-core/partmap/sunpc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/sunpc.c'; fi` + +grub-core/partmap/libgrubmods_a-bsdlabel.o: grub-core/partmap/bsdlabel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-bsdlabel.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-bsdlabel.Tpo -c -o grub-core/partmap/libgrubmods_a-bsdlabel.o `test -f 'grub-core/partmap/bsdlabel.c' || echo '$(srcdir)/'`grub-core/partmap/bsdlabel.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-bsdlabel.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-bsdlabel.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/bsdlabel.c' object='grub-core/partmap/libgrubmods_a-bsdlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-bsdlabel.o `test -f 'grub-core/partmap/bsdlabel.c' || echo '$(srcdir)/'`grub-core/partmap/bsdlabel.c + +grub-core/partmap/libgrubmods_a-bsdlabel.obj: grub-core/partmap/bsdlabel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-bsdlabel.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-bsdlabel.Tpo -c -o grub-core/partmap/libgrubmods_a-bsdlabel.obj `if test -f 'grub-core/partmap/bsdlabel.c'; then $(CYGPATH_W) 'grub-core/partmap/bsdlabel.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/bsdlabel.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-bsdlabel.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-bsdlabel.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/bsdlabel.c' object='grub-core/partmap/libgrubmods_a-bsdlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-bsdlabel.obj `if test -f 'grub-core/partmap/bsdlabel.c'; then $(CYGPATH_W) 'grub-core/partmap/bsdlabel.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/bsdlabel.c'; fi` + +grub-core/partmap/libgrubmods_a-dfly.o: grub-core/partmap/dfly.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-dfly.o -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-dfly.Tpo -c -o grub-core/partmap/libgrubmods_a-dfly.o `test -f 'grub-core/partmap/dfly.c' || echo '$(srcdir)/'`grub-core/partmap/dfly.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-dfly.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-dfly.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/dfly.c' object='grub-core/partmap/libgrubmods_a-dfly.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-dfly.o `test -f 'grub-core/partmap/dfly.c' || echo '$(srcdir)/'`grub-core/partmap/dfly.c + +grub-core/partmap/libgrubmods_a-dfly.obj: grub-core/partmap/dfly.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/partmap/libgrubmods_a-dfly.obj -MD -MP -MF grub-core/partmap/$(DEPDIR)/libgrubmods_a-dfly.Tpo -c -o grub-core/partmap/libgrubmods_a-dfly.obj `if test -f 'grub-core/partmap/dfly.c'; then $(CYGPATH_W) 'grub-core/partmap/dfly.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/dfly.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/partmap/$(DEPDIR)/libgrubmods_a-dfly.Tpo grub-core/partmap/$(DEPDIR)/libgrubmods_a-dfly.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/partmap/dfly.c' object='grub-core/partmap/libgrubmods_a-dfly.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/partmap/libgrubmods_a-dfly.obj `if test -f 'grub-core/partmap/dfly.c'; then $(CYGPATH_W) 'grub-core/partmap/dfly.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/partmap/dfly.c'; fi` + +grub-core/script/libgrubmods_a-function.o: grub-core/script/function.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-function.o -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-function.Tpo -c -o grub-core/script/libgrubmods_a-function.o `test -f 'grub-core/script/function.c' || echo '$(srcdir)/'`grub-core/script/function.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-function.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-function.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/function.c' object='grub-core/script/libgrubmods_a-function.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-function.o `test -f 'grub-core/script/function.c' || echo '$(srcdir)/'`grub-core/script/function.c + +grub-core/script/libgrubmods_a-function.obj: grub-core/script/function.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-function.obj -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-function.Tpo -c -o grub-core/script/libgrubmods_a-function.obj `if test -f 'grub-core/script/function.c'; then $(CYGPATH_W) 'grub-core/script/function.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/function.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-function.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-function.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/function.c' object='grub-core/script/libgrubmods_a-function.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-function.obj `if test -f 'grub-core/script/function.c'; then $(CYGPATH_W) 'grub-core/script/function.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/function.c'; fi` + +grub-core/script/libgrubmods_a-lexer.o: grub-core/script/lexer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-lexer.o -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-lexer.Tpo -c -o grub-core/script/libgrubmods_a-lexer.o `test -f 'grub-core/script/lexer.c' || echo '$(srcdir)/'`grub-core/script/lexer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-lexer.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-lexer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/lexer.c' object='grub-core/script/libgrubmods_a-lexer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-lexer.o `test -f 'grub-core/script/lexer.c' || echo '$(srcdir)/'`grub-core/script/lexer.c + +grub-core/script/libgrubmods_a-lexer.obj: grub-core/script/lexer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-lexer.obj -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-lexer.Tpo -c -o grub-core/script/libgrubmods_a-lexer.obj `if test -f 'grub-core/script/lexer.c'; then $(CYGPATH_W) 'grub-core/script/lexer.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/lexer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-lexer.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-lexer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/lexer.c' object='grub-core/script/libgrubmods_a-lexer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-lexer.obj `if test -f 'grub-core/script/lexer.c'; then $(CYGPATH_W) 'grub-core/script/lexer.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/lexer.c'; fi` + +grub-core/script/libgrubmods_a-main.o: grub-core/script/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-main.o -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-main.Tpo -c -o grub-core/script/libgrubmods_a-main.o `test -f 'grub-core/script/main.c' || echo '$(srcdir)/'`grub-core/script/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-main.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/main.c' object='grub-core/script/libgrubmods_a-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-main.o `test -f 'grub-core/script/main.c' || echo '$(srcdir)/'`grub-core/script/main.c + +grub-core/script/libgrubmods_a-main.obj: grub-core/script/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-main.obj -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-main.Tpo -c -o grub-core/script/libgrubmods_a-main.obj `if test -f 'grub-core/script/main.c'; then $(CYGPATH_W) 'grub-core/script/main.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-main.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/main.c' object='grub-core/script/libgrubmods_a-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-main.obj `if test -f 'grub-core/script/main.c'; then $(CYGPATH_W) 'grub-core/script/main.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/main.c'; fi` + +grub-core/script/libgrubmods_a-script.o: grub-core/script/script.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-script.o -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-script.Tpo -c -o grub-core/script/libgrubmods_a-script.o `test -f 'grub-core/script/script.c' || echo '$(srcdir)/'`grub-core/script/script.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-script.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-script.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/script.c' object='grub-core/script/libgrubmods_a-script.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-script.o `test -f 'grub-core/script/script.c' || echo '$(srcdir)/'`grub-core/script/script.c + +grub-core/script/libgrubmods_a-script.obj: grub-core/script/script.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-script.obj -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-script.Tpo -c -o grub-core/script/libgrubmods_a-script.obj `if test -f 'grub-core/script/script.c'; then $(CYGPATH_W) 'grub-core/script/script.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/script.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-script.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-script.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/script.c' object='grub-core/script/libgrubmods_a-script.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-script.obj `if test -f 'grub-core/script/script.c'; then $(CYGPATH_W) 'grub-core/script/script.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/script.c'; fi` + +grub-core/script/libgrubmods_a-argv.o: grub-core/script/argv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-argv.o -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-argv.Tpo -c -o grub-core/script/libgrubmods_a-argv.o `test -f 'grub-core/script/argv.c' || echo '$(srcdir)/'`grub-core/script/argv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-argv.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-argv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/argv.c' object='grub-core/script/libgrubmods_a-argv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-argv.o `test -f 'grub-core/script/argv.c' || echo '$(srcdir)/'`grub-core/script/argv.c + +grub-core/script/libgrubmods_a-argv.obj: grub-core/script/argv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/script/libgrubmods_a-argv.obj -MD -MP -MF grub-core/script/$(DEPDIR)/libgrubmods_a-argv.Tpo -c -o grub-core/script/libgrubmods_a-argv.obj `if test -f 'grub-core/script/argv.c'; then $(CYGPATH_W) 'grub-core/script/argv.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/argv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/script/$(DEPDIR)/libgrubmods_a-argv.Tpo grub-core/script/$(DEPDIR)/libgrubmods_a-argv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/script/argv.c' object='grub-core/script/libgrubmods_a-argv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/script/libgrubmods_a-argv.obj `if test -f 'grub-core/script/argv.c'; then $(CYGPATH_W) 'grub-core/script/argv.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/script/argv.c'; fi` + +grub-core/io/libgrubmods_a-gzio.o: grub-core/io/gzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-gzio.o -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-gzio.Tpo -c -o grub-core/io/libgrubmods_a-gzio.o `test -f 'grub-core/io/gzio.c' || echo '$(srcdir)/'`grub-core/io/gzio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-gzio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-gzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/gzio.c' object='grub-core/io/libgrubmods_a-gzio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-gzio.o `test -f 'grub-core/io/gzio.c' || echo '$(srcdir)/'`grub-core/io/gzio.c + +grub-core/io/libgrubmods_a-gzio.obj: grub-core/io/gzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-gzio.obj -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-gzio.Tpo -c -o grub-core/io/libgrubmods_a-gzio.obj `if test -f 'grub-core/io/gzio.c'; then $(CYGPATH_W) 'grub-core/io/gzio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/gzio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-gzio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-gzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/gzio.c' object='grub-core/io/libgrubmods_a-gzio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-gzio.obj `if test -f 'grub-core/io/gzio.c'; then $(CYGPATH_W) 'grub-core/io/gzio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/gzio.c'; fi` + +grub-core/io/libgrubmods_a-xzio.o: grub-core/io/xzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-xzio.o -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-xzio.Tpo -c -o grub-core/io/libgrubmods_a-xzio.o `test -f 'grub-core/io/xzio.c' || echo '$(srcdir)/'`grub-core/io/xzio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-xzio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-xzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/xzio.c' object='grub-core/io/libgrubmods_a-xzio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-xzio.o `test -f 'grub-core/io/xzio.c' || echo '$(srcdir)/'`grub-core/io/xzio.c + +grub-core/io/libgrubmods_a-xzio.obj: grub-core/io/xzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-xzio.obj -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-xzio.Tpo -c -o grub-core/io/libgrubmods_a-xzio.obj `if test -f 'grub-core/io/xzio.c'; then $(CYGPATH_W) 'grub-core/io/xzio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/xzio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-xzio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-xzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/xzio.c' object='grub-core/io/libgrubmods_a-xzio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-xzio.obj `if test -f 'grub-core/io/xzio.c'; then $(CYGPATH_W) 'grub-core/io/xzio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/xzio.c'; fi` + +grub-core/io/libgrubmods_a-lzopio.o: grub-core/io/lzopio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-lzopio.o -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-lzopio.Tpo -c -o grub-core/io/libgrubmods_a-lzopio.o `test -f 'grub-core/io/lzopio.c' || echo '$(srcdir)/'`grub-core/io/lzopio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-lzopio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-lzopio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/lzopio.c' object='grub-core/io/libgrubmods_a-lzopio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-lzopio.o `test -f 'grub-core/io/lzopio.c' || echo '$(srcdir)/'`grub-core/io/lzopio.c + +grub-core/io/libgrubmods_a-lzopio.obj: grub-core/io/lzopio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/io/libgrubmods_a-lzopio.obj -MD -MP -MF grub-core/io/$(DEPDIR)/libgrubmods_a-lzopio.Tpo -c -o grub-core/io/libgrubmods_a-lzopio.obj `if test -f 'grub-core/io/lzopio.c'; then $(CYGPATH_W) 'grub-core/io/lzopio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/lzopio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/libgrubmods_a-lzopio.Tpo grub-core/io/$(DEPDIR)/libgrubmods_a-lzopio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/lzopio.c' object='grub-core/io/libgrubmods_a-lzopio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/io/libgrubmods_a-lzopio.obj `if test -f 'grub-core/io/lzopio.c'; then $(CYGPATH_W) 'grub-core/io/lzopio.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/lzopio.c'; fi` + +grub-core/kern/ia64/libgrubmods_a-dl_helper.o: grub-core/kern/ia64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/ia64/libgrubmods_a-dl_helper.o -MD -MP -MF grub-core/kern/ia64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo -c -o grub-core/kern/ia64/libgrubmods_a-dl_helper.o `test -f 'grub-core/kern/ia64/dl_helper.c' || echo '$(srcdir)/'`grub-core/kern/ia64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/ia64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo grub-core/kern/ia64/$(DEPDIR)/libgrubmods_a-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/ia64/dl_helper.c' object='grub-core/kern/ia64/libgrubmods_a-dl_helper.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/ia64/libgrubmods_a-dl_helper.o `test -f 'grub-core/kern/ia64/dl_helper.c' || echo '$(srcdir)/'`grub-core/kern/ia64/dl_helper.c + +grub-core/kern/ia64/libgrubmods_a-dl_helper.obj: grub-core/kern/ia64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/ia64/libgrubmods_a-dl_helper.obj -MD -MP -MF grub-core/kern/ia64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo -c -o grub-core/kern/ia64/libgrubmods_a-dl_helper.obj `if test -f 'grub-core/kern/ia64/dl_helper.c'; then $(CYGPATH_W) 'grub-core/kern/ia64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/ia64/dl_helper.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/ia64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo grub-core/kern/ia64/$(DEPDIR)/libgrubmods_a-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/ia64/dl_helper.c' object='grub-core/kern/ia64/libgrubmods_a-dl_helper.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/ia64/libgrubmods_a-dl_helper.obj `if test -f 'grub-core/kern/ia64/dl_helper.c'; then $(CYGPATH_W) 'grub-core/kern/ia64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/ia64/dl_helper.c'; fi` + +grub-core/kern/arm/libgrubmods_a-dl_helper.o: grub-core/kern/arm/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/arm/libgrubmods_a-dl_helper.o -MD -MP -MF grub-core/kern/arm/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo -c -o grub-core/kern/arm/libgrubmods_a-dl_helper.o `test -f 'grub-core/kern/arm/dl_helper.c' || echo '$(srcdir)/'`grub-core/kern/arm/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/arm/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo grub-core/kern/arm/$(DEPDIR)/libgrubmods_a-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/arm/dl_helper.c' object='grub-core/kern/arm/libgrubmods_a-dl_helper.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/arm/libgrubmods_a-dl_helper.o `test -f 'grub-core/kern/arm/dl_helper.c' || echo '$(srcdir)/'`grub-core/kern/arm/dl_helper.c + +grub-core/kern/arm/libgrubmods_a-dl_helper.obj: grub-core/kern/arm/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/arm/libgrubmods_a-dl_helper.obj -MD -MP -MF grub-core/kern/arm/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo -c -o grub-core/kern/arm/libgrubmods_a-dl_helper.obj `if test -f 'grub-core/kern/arm/dl_helper.c'; then $(CYGPATH_W) 'grub-core/kern/arm/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/arm/dl_helper.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/arm/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo grub-core/kern/arm/$(DEPDIR)/libgrubmods_a-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/arm/dl_helper.c' object='grub-core/kern/arm/libgrubmods_a-dl_helper.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/arm/libgrubmods_a-dl_helper.obj `if test -f 'grub-core/kern/arm/dl_helper.c'; then $(CYGPATH_W) 'grub-core/kern/arm/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/arm/dl_helper.c'; fi` + +grub-core/kern/arm64/libgrubmods_a-dl_helper.o: grub-core/kern/arm64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/arm64/libgrubmods_a-dl_helper.o -MD -MP -MF grub-core/kern/arm64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo -c -o grub-core/kern/arm64/libgrubmods_a-dl_helper.o `test -f 'grub-core/kern/arm64/dl_helper.c' || echo '$(srcdir)/'`grub-core/kern/arm64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/arm64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo grub-core/kern/arm64/$(DEPDIR)/libgrubmods_a-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/arm64/dl_helper.c' object='grub-core/kern/arm64/libgrubmods_a-dl_helper.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/arm64/libgrubmods_a-dl_helper.o `test -f 'grub-core/kern/arm64/dl_helper.c' || echo '$(srcdir)/'`grub-core/kern/arm64/dl_helper.c + +grub-core/kern/arm64/libgrubmods_a-dl_helper.obj: grub-core/kern/arm64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/kern/arm64/libgrubmods_a-dl_helper.obj -MD -MP -MF grub-core/kern/arm64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo -c -o grub-core/kern/arm64/libgrubmods_a-dl_helper.obj `if test -f 'grub-core/kern/arm64/dl_helper.c'; then $(CYGPATH_W) 'grub-core/kern/arm64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/arm64/dl_helper.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/arm64/$(DEPDIR)/libgrubmods_a-dl_helper.Tpo grub-core/kern/arm64/$(DEPDIR)/libgrubmods_a-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/arm64/dl_helper.c' object='grub-core/kern/arm64/libgrubmods_a-dl_helper.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/kern/arm64/libgrubmods_a-dl_helper.obj `if test -f 'grub-core/kern/arm64/dl_helper.c'; then $(CYGPATH_W) 'grub-core/kern/arm64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/arm64/dl_helper.c'; fi` + +grub-core/lib/minilzo/libgrubmods_a-minilzo.o: grub-core/lib/minilzo/minilzo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/minilzo/libgrubmods_a-minilzo.o -MD -MP -MF grub-core/lib/minilzo/$(DEPDIR)/libgrubmods_a-minilzo.Tpo -c -o grub-core/lib/minilzo/libgrubmods_a-minilzo.o `test -f 'grub-core/lib/minilzo/minilzo.c' || echo '$(srcdir)/'`grub-core/lib/minilzo/minilzo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/minilzo/$(DEPDIR)/libgrubmods_a-minilzo.Tpo grub-core/lib/minilzo/$(DEPDIR)/libgrubmods_a-minilzo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/minilzo/minilzo.c' object='grub-core/lib/minilzo/libgrubmods_a-minilzo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/minilzo/libgrubmods_a-minilzo.o `test -f 'grub-core/lib/minilzo/minilzo.c' || echo '$(srcdir)/'`grub-core/lib/minilzo/minilzo.c + +grub-core/lib/minilzo/libgrubmods_a-minilzo.obj: grub-core/lib/minilzo/minilzo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/minilzo/libgrubmods_a-minilzo.obj -MD -MP -MF grub-core/lib/minilzo/$(DEPDIR)/libgrubmods_a-minilzo.Tpo -c -o grub-core/lib/minilzo/libgrubmods_a-minilzo.obj `if test -f 'grub-core/lib/minilzo/minilzo.c'; then $(CYGPATH_W) 'grub-core/lib/minilzo/minilzo.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/minilzo/minilzo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/minilzo/$(DEPDIR)/libgrubmods_a-minilzo.Tpo grub-core/lib/minilzo/$(DEPDIR)/libgrubmods_a-minilzo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/minilzo/minilzo.c' object='grub-core/lib/minilzo/libgrubmods_a-minilzo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/minilzo/libgrubmods_a-minilzo.obj `if test -f 'grub-core/lib/minilzo/minilzo.c'; then $(CYGPATH_W) 'grub-core/lib/minilzo/minilzo.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/minilzo/minilzo.c'; fi` + +grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.o: grub-core/lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.o -MD -MP -MF grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_bcj.Tpo -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.o `test -f 'grub-core/lib/xzembed/xz_dec_bcj.c' || echo '$(srcdir)/'`grub-core/lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_bcj.Tpo grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_bcj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/xzembed/xz_dec_bcj.c' object='grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.o `test -f 'grub-core/lib/xzembed/xz_dec_bcj.c' || echo '$(srcdir)/'`grub-core/lib/xzembed/xz_dec_bcj.c + +grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.obj: grub-core/lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.obj -MD -MP -MF grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_bcj.Tpo -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.obj `if test -f 'grub-core/lib/xzembed/xz_dec_bcj.c'; then $(CYGPATH_W) 'grub-core/lib/xzembed/xz_dec_bcj.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/xzembed/xz_dec_bcj.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_bcj.Tpo grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_bcj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/xzembed/xz_dec_bcj.c' object='grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_bcj.obj `if test -f 'grub-core/lib/xzembed/xz_dec_bcj.c'; then $(CYGPATH_W) 'grub-core/lib/xzembed/xz_dec_bcj.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/xzembed/xz_dec_bcj.c'; fi` + +grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.o: grub-core/lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.o -MD -MP -MF grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_lzma2.Tpo -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.o `test -f 'grub-core/lib/xzembed/xz_dec_lzma2.c' || echo '$(srcdir)/'`grub-core/lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_lzma2.Tpo grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_lzma2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/xzembed/xz_dec_lzma2.c' object='grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.o `test -f 'grub-core/lib/xzembed/xz_dec_lzma2.c' || echo '$(srcdir)/'`grub-core/lib/xzembed/xz_dec_lzma2.c + +grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.obj: grub-core/lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.obj -MD -MP -MF grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_lzma2.Tpo -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.obj `if test -f 'grub-core/lib/xzembed/xz_dec_lzma2.c'; then $(CYGPATH_W) 'grub-core/lib/xzembed/xz_dec_lzma2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/xzembed/xz_dec_lzma2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_lzma2.Tpo grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_lzma2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/xzembed/xz_dec_lzma2.c' object='grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_lzma2.obj `if test -f 'grub-core/lib/xzembed/xz_dec_lzma2.c'; then $(CYGPATH_W) 'grub-core/lib/xzembed/xz_dec_lzma2.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/xzembed/xz_dec_lzma2.c'; fi` + +grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.o: grub-core/lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.o -MD -MP -MF grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_stream.Tpo -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.o `test -f 'grub-core/lib/xzembed/xz_dec_stream.c' || echo '$(srcdir)/'`grub-core/lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_stream.Tpo grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_stream.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/xzembed/xz_dec_stream.c' object='grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.o `test -f 'grub-core/lib/xzembed/xz_dec_stream.c' || echo '$(srcdir)/'`grub-core/lib/xzembed/xz_dec_stream.c + +grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.obj: grub-core/lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.obj -MD -MP -MF grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_stream.Tpo -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.obj `if test -f 'grub-core/lib/xzembed/xz_dec_stream.c'; then $(CYGPATH_W) 'grub-core/lib/xzembed/xz_dec_stream.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/xzembed/xz_dec_stream.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_stream.Tpo grub-core/lib/xzembed/$(DEPDIR)/libgrubmods_a-xz_dec_stream.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/xzembed/xz_dec_stream.c' object='grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o grub-core/lib/xzembed/libgrubmods_a-xz_dec_stream.obj `if test -f 'grub-core/lib/xzembed/xz_dec_stream.c'; then $(CYGPATH_W) 'grub-core/lib/xzembed/xz_dec_stream.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/xzembed/xz_dec_stream.c'; fi` + +libgrubmods_a-grub_script.tab.o: grub_script.tab.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT libgrubmods_a-grub_script.tab.o -MD -MP -MF $(DEPDIR)/libgrubmods_a-grub_script.tab.Tpo -c -o libgrubmods_a-grub_script.tab.o `test -f 'grub_script.tab.c' || echo '$(srcdir)/'`grub_script.tab.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgrubmods_a-grub_script.tab.Tpo $(DEPDIR)/libgrubmods_a-grub_script.tab.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.tab.c' object='libgrubmods_a-grub_script.tab.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o libgrubmods_a-grub_script.tab.o `test -f 'grub_script.tab.c' || echo '$(srcdir)/'`grub_script.tab.c + +libgrubmods_a-grub_script.tab.obj: grub_script.tab.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT libgrubmods_a-grub_script.tab.obj -MD -MP -MF $(DEPDIR)/libgrubmods_a-grub_script.tab.Tpo -c -o libgrubmods_a-grub_script.tab.obj `if test -f 'grub_script.tab.c'; then $(CYGPATH_W) 'grub_script.tab.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.tab.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgrubmods_a-grub_script.tab.Tpo $(DEPDIR)/libgrubmods_a-grub_script.tab.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.tab.c' object='libgrubmods_a-grub_script.tab.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o libgrubmods_a-grub_script.tab.obj `if test -f 'grub_script.tab.c'; then $(CYGPATH_W) 'grub_script.tab.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.tab.c'; fi` + +libgrubmods_a-grub_script.yy.o: grub_script.yy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT libgrubmods_a-grub_script.yy.o -MD -MP -MF $(DEPDIR)/libgrubmods_a-grub_script.yy.Tpo -c -o libgrubmods_a-grub_script.yy.o `test -f 'grub_script.yy.c' || echo '$(srcdir)/'`grub_script.yy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgrubmods_a-grub_script.yy.Tpo $(DEPDIR)/libgrubmods_a-grub_script.yy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.yy.c' object='libgrubmods_a-grub_script.yy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o libgrubmods_a-grub_script.yy.o `test -f 'grub_script.yy.c' || echo '$(srcdir)/'`grub_script.yy.c + +libgrubmods_a-grub_script.yy.obj: grub_script.yy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT libgrubmods_a-grub_script.yy.obj -MD -MP -MF $(DEPDIR)/libgrubmods_a-grub_script.yy.Tpo -c -o libgrubmods_a-grub_script.yy.obj `if test -f 'grub_script.yy.c'; then $(CYGPATH_W) 'grub_script.yy.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.yy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgrubmods_a-grub_script.yy.Tpo $(DEPDIR)/libgrubmods_a-grub_script.yy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.yy.c' object='libgrubmods_a-grub_script.yy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o libgrubmods_a-grub_script.yy.obj `if test -f 'grub_script.yy.c'; then $(CYGPATH_W) 'grub_script.yy.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.yy.c'; fi` + +libgrubmods_a-libgrub_a_init.o: libgrub_a_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT libgrubmods_a-libgrub_a_init.o -MD -MP -MF $(DEPDIR)/libgrubmods_a-libgrub_a_init.Tpo -c -o libgrubmods_a-libgrub_a_init.o `test -f 'libgrub_a_init.c' || echo '$(srcdir)/'`libgrub_a_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgrubmods_a-libgrub_a_init.Tpo $(DEPDIR)/libgrubmods_a-libgrub_a_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libgrub_a_init.c' object='libgrubmods_a-libgrub_a_init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o libgrubmods_a-libgrub_a_init.o `test -f 'libgrub_a_init.c' || echo '$(srcdir)/'`libgrub_a_init.c + +libgrubmods_a-libgrub_a_init.obj: libgrub_a_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -MT libgrubmods_a-libgrub_a_init.obj -MD -MP -MF $(DEPDIR)/libgrubmods_a-libgrub_a_init.Tpo -c -o libgrubmods_a-libgrub_a_init.obj `if test -f 'libgrub_a_init.c'; then $(CYGPATH_W) 'libgrub_a_init.c'; else $(CYGPATH_W) '$(srcdir)/libgrub_a_init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgrubmods_a-libgrub_a_init.Tpo $(DEPDIR)/libgrubmods_a-libgrub_a_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libgrub_a_init.c' object='libgrubmods_a-libgrub_a_init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(CPPFLAGS) $(libgrubmods_a_CFLAGS) $(CFLAGS) -c -o libgrubmods_a-libgrub_a_init.obj `if test -f 'libgrub_a_init.c'; then $(CYGPATH_W) 'libgrub_a_init.c'; else $(CYGPATH_W) '$(srcdir)/libgrub_a_init.c'; fi` + +tests/cmp_test-cmp_unit_test.o: tests/cmp_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT tests/cmp_test-cmp_unit_test.o -MD -MP -MF tests/$(DEPDIR)/cmp_test-cmp_unit_test.Tpo -c -o tests/cmp_test-cmp_unit_test.o `test -f 'tests/cmp_unit_test.c' || echo '$(srcdir)/'`tests/cmp_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/cmp_test-cmp_unit_test.Tpo tests/$(DEPDIR)/cmp_test-cmp_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/cmp_unit_test.c' object='tests/cmp_test-cmp_unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o tests/cmp_test-cmp_unit_test.o `test -f 'tests/cmp_unit_test.c' || echo '$(srcdir)/'`tests/cmp_unit_test.c + +tests/cmp_test-cmp_unit_test.obj: tests/cmp_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT tests/cmp_test-cmp_unit_test.obj -MD -MP -MF tests/$(DEPDIR)/cmp_test-cmp_unit_test.Tpo -c -o tests/cmp_test-cmp_unit_test.obj `if test -f 'tests/cmp_unit_test.c'; then $(CYGPATH_W) 'tests/cmp_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/cmp_unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/cmp_test-cmp_unit_test.Tpo tests/$(DEPDIR)/cmp_test-cmp_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/cmp_unit_test.c' object='tests/cmp_test-cmp_unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o tests/cmp_test-cmp_unit_test.obj `if test -f 'tests/cmp_unit_test.c'; then $(CYGPATH_W) 'tests/cmp_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/cmp_unit_test.c'; fi` + +tests/lib/cmp_test-unit_test.o: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT tests/lib/cmp_test-unit_test.o -MD -MP -MF tests/lib/$(DEPDIR)/cmp_test-unit_test.Tpo -c -o tests/lib/cmp_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/cmp_test-unit_test.Tpo tests/lib/$(DEPDIR)/cmp_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/cmp_test-unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o tests/lib/cmp_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c + +tests/lib/cmp_test-unit_test.obj: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT tests/lib/cmp_test-unit_test.obj -MD -MP -MF tests/lib/$(DEPDIR)/cmp_test-unit_test.Tpo -c -o tests/lib/cmp_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/cmp_test-unit_test.Tpo tests/lib/$(DEPDIR)/cmp_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/cmp_test-unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o tests/lib/cmp_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` + +grub-core/kern/cmp_test-list.o: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/cmp_test-list.o -MD -MP -MF grub-core/kern/$(DEPDIR)/cmp_test-list.Tpo -c -o grub-core/kern/cmp_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/cmp_test-list.Tpo grub-core/kern/$(DEPDIR)/cmp_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/cmp_test-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/cmp_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c + +grub-core/kern/cmp_test-list.obj: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/cmp_test-list.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/cmp_test-list.Tpo -c -o grub-core/kern/cmp_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/cmp_test-list.Tpo grub-core/kern/$(DEPDIR)/cmp_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/cmp_test-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/cmp_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` + +grub-core/kern/cmp_test-misc.o: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/cmp_test-misc.o -MD -MP -MF grub-core/kern/$(DEPDIR)/cmp_test-misc.Tpo -c -o grub-core/kern/cmp_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/cmp_test-misc.Tpo grub-core/kern/$(DEPDIR)/cmp_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/cmp_test-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/cmp_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c + +grub-core/kern/cmp_test-misc.obj: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/cmp_test-misc.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/cmp_test-misc.Tpo -c -o grub-core/kern/cmp_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/cmp_test-misc.Tpo grub-core/kern/$(DEPDIR)/cmp_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/cmp_test-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/cmp_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` + +grub-core/tests/lib/cmp_test-test.o: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/cmp_test-test.o -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/cmp_test-test.Tpo -c -o grub-core/tests/lib/cmp_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/cmp_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/cmp_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/cmp_test-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/cmp_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c + +grub-core/tests/lib/cmp_test-test.obj: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/cmp_test-test.obj -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/cmp_test-test.Tpo -c -o grub-core/tests/lib/cmp_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/cmp_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/cmp_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/cmp_test-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_CPPFLAGS) $(CPPFLAGS) $(cmp_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/cmp_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` + +tests/date_test-date_unit_test.o: tests/date_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT tests/date_test-date_unit_test.o -MD -MP -MF tests/$(DEPDIR)/date_test-date_unit_test.Tpo -c -o tests/date_test-date_unit_test.o `test -f 'tests/date_unit_test.c' || echo '$(srcdir)/'`tests/date_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/date_test-date_unit_test.Tpo tests/$(DEPDIR)/date_test-date_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/date_unit_test.c' object='tests/date_test-date_unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o tests/date_test-date_unit_test.o `test -f 'tests/date_unit_test.c' || echo '$(srcdir)/'`tests/date_unit_test.c + +tests/date_test-date_unit_test.obj: tests/date_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT tests/date_test-date_unit_test.obj -MD -MP -MF tests/$(DEPDIR)/date_test-date_unit_test.Tpo -c -o tests/date_test-date_unit_test.obj `if test -f 'tests/date_unit_test.c'; then $(CYGPATH_W) 'tests/date_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/date_unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/date_test-date_unit_test.Tpo tests/$(DEPDIR)/date_test-date_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/date_unit_test.c' object='tests/date_test-date_unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o tests/date_test-date_unit_test.obj `if test -f 'tests/date_unit_test.c'; then $(CYGPATH_W) 'tests/date_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/date_unit_test.c'; fi` + +tests/lib/date_test-unit_test.o: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT tests/lib/date_test-unit_test.o -MD -MP -MF tests/lib/$(DEPDIR)/date_test-unit_test.Tpo -c -o tests/lib/date_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/date_test-unit_test.Tpo tests/lib/$(DEPDIR)/date_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/date_test-unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o tests/lib/date_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c + +tests/lib/date_test-unit_test.obj: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT tests/lib/date_test-unit_test.obj -MD -MP -MF tests/lib/$(DEPDIR)/date_test-unit_test.Tpo -c -o tests/lib/date_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/date_test-unit_test.Tpo tests/lib/$(DEPDIR)/date_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/date_test-unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o tests/lib/date_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` + +grub-core/kern/date_test-list.o: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/date_test-list.o -MD -MP -MF grub-core/kern/$(DEPDIR)/date_test-list.Tpo -c -o grub-core/kern/date_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/date_test-list.Tpo grub-core/kern/$(DEPDIR)/date_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/date_test-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/date_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c + +grub-core/kern/date_test-list.obj: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/date_test-list.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/date_test-list.Tpo -c -o grub-core/kern/date_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/date_test-list.Tpo grub-core/kern/$(DEPDIR)/date_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/date_test-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/date_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` + +grub-core/kern/date_test-misc.o: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/date_test-misc.o -MD -MP -MF grub-core/kern/$(DEPDIR)/date_test-misc.Tpo -c -o grub-core/kern/date_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/date_test-misc.Tpo grub-core/kern/$(DEPDIR)/date_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/date_test-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/date_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c + +grub-core/kern/date_test-misc.obj: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/date_test-misc.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/date_test-misc.Tpo -c -o grub-core/kern/date_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/date_test-misc.Tpo grub-core/kern/$(DEPDIR)/date_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/date_test-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/date_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` + +grub-core/tests/lib/date_test-test.o: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/date_test-test.o -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/date_test-test.Tpo -c -o grub-core/tests/lib/date_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/date_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/date_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/date_test-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/date_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c + +grub-core/tests/lib/date_test-test.obj: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/date_test-test.obj -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/date_test-test.Tpo -c -o grub-core/tests/lib/date_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/date_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/date_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/date_test-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_test_CPPFLAGS) $(CPPFLAGS) $(date_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/date_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` + +tests/example_unit_test-example_unit_test.o: tests/example_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT tests/example_unit_test-example_unit_test.o -MD -MP -MF tests/$(DEPDIR)/example_unit_test-example_unit_test.Tpo -c -o tests/example_unit_test-example_unit_test.o `test -f 'tests/example_unit_test.c' || echo '$(srcdir)/'`tests/example_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/example_unit_test-example_unit_test.Tpo tests/$(DEPDIR)/example_unit_test-example_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/example_unit_test.c' object='tests/example_unit_test-example_unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o tests/example_unit_test-example_unit_test.o `test -f 'tests/example_unit_test.c' || echo '$(srcdir)/'`tests/example_unit_test.c + +tests/example_unit_test-example_unit_test.obj: tests/example_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT tests/example_unit_test-example_unit_test.obj -MD -MP -MF tests/$(DEPDIR)/example_unit_test-example_unit_test.Tpo -c -o tests/example_unit_test-example_unit_test.obj `if test -f 'tests/example_unit_test.c'; then $(CYGPATH_W) 'tests/example_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/example_unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/example_unit_test-example_unit_test.Tpo tests/$(DEPDIR)/example_unit_test-example_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/example_unit_test.c' object='tests/example_unit_test-example_unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o tests/example_unit_test-example_unit_test.obj `if test -f 'tests/example_unit_test.c'; then $(CYGPATH_W) 'tests/example_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/example_unit_test.c'; fi` + +tests/lib/example_unit_test-unit_test.o: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT tests/lib/example_unit_test-unit_test.o -MD -MP -MF tests/lib/$(DEPDIR)/example_unit_test-unit_test.Tpo -c -o tests/lib/example_unit_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/example_unit_test-unit_test.Tpo tests/lib/$(DEPDIR)/example_unit_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/example_unit_test-unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o tests/lib/example_unit_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c + +tests/lib/example_unit_test-unit_test.obj: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT tests/lib/example_unit_test-unit_test.obj -MD -MP -MF tests/lib/$(DEPDIR)/example_unit_test-unit_test.Tpo -c -o tests/lib/example_unit_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/example_unit_test-unit_test.Tpo tests/lib/$(DEPDIR)/example_unit_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/example_unit_test-unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o tests/lib/example_unit_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` + +grub-core/kern/example_unit_test-list.o: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/example_unit_test-list.o -MD -MP -MF grub-core/kern/$(DEPDIR)/example_unit_test-list.Tpo -c -o grub-core/kern/example_unit_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/example_unit_test-list.Tpo grub-core/kern/$(DEPDIR)/example_unit_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/example_unit_test-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/example_unit_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c + +grub-core/kern/example_unit_test-list.obj: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/example_unit_test-list.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/example_unit_test-list.Tpo -c -o grub-core/kern/example_unit_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/example_unit_test-list.Tpo grub-core/kern/$(DEPDIR)/example_unit_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/example_unit_test-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/example_unit_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` + +grub-core/kern/example_unit_test-misc.o: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/example_unit_test-misc.o -MD -MP -MF grub-core/kern/$(DEPDIR)/example_unit_test-misc.Tpo -c -o grub-core/kern/example_unit_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/example_unit_test-misc.Tpo grub-core/kern/$(DEPDIR)/example_unit_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/example_unit_test-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/example_unit_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c + +grub-core/kern/example_unit_test-misc.obj: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/example_unit_test-misc.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/example_unit_test-misc.Tpo -c -o grub-core/kern/example_unit_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/example_unit_test-misc.Tpo grub-core/kern/$(DEPDIR)/example_unit_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/example_unit_test-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/example_unit_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` + +grub-core/tests/lib/example_unit_test-test.o: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/example_unit_test-test.o -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/example_unit_test-test.Tpo -c -o grub-core/tests/lib/example_unit_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/example_unit_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/example_unit_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/example_unit_test-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/example_unit_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c + +grub-core/tests/lib/example_unit_test-test.obj: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/example_unit_test-test.obj -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/example_unit_test-test.Tpo -c -o grub-core/tests/lib/example_unit_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/example_unit_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/example_unit_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/example_unit_test-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(example_unit_test_CPPFLAGS) $(CPPFLAGS) $(example_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/example_unit_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` + +util/grub_bios_setup-grub-setup.o: util/grub-setup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT util/grub_bios_setup-grub-setup.o -MD -MP -MF util/$(DEPDIR)/grub_bios_setup-grub-setup.Tpo -c -o util/grub_bios_setup-grub-setup.o `test -f 'util/grub-setup.c' || echo '$(srcdir)/'`util/grub-setup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_bios_setup-grub-setup.Tpo util/$(DEPDIR)/grub_bios_setup-grub-setup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-setup.c' object='util/grub_bios_setup-grub-setup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o util/grub_bios_setup-grub-setup.o `test -f 'util/grub-setup.c' || echo '$(srcdir)/'`util/grub-setup.c + +util/grub_bios_setup-grub-setup.obj: util/grub-setup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT util/grub_bios_setup-grub-setup.obj -MD -MP -MF util/$(DEPDIR)/grub_bios_setup-grub-setup.Tpo -c -o util/grub_bios_setup-grub-setup.obj `if test -f 'util/grub-setup.c'; then $(CYGPATH_W) 'util/grub-setup.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-setup.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_bios_setup-grub-setup.Tpo util/$(DEPDIR)/grub_bios_setup-grub-setup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-setup.c' object='util/grub_bios_setup-grub-setup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o util/grub_bios_setup-grub-setup.obj `if test -f 'util/grub-setup.c'; then $(CYGPATH_W) 'util/grub-setup.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-setup.c'; fi` + +util/grub_bios_setup-setup_bios.o: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT util/grub_bios_setup-setup_bios.o -MD -MP -MF util/$(DEPDIR)/grub_bios_setup-setup_bios.Tpo -c -o util/grub_bios_setup-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_bios_setup-setup_bios.Tpo util/$(DEPDIR)/grub_bios_setup-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_bios_setup-setup_bios.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o util/grub_bios_setup-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c + +util/grub_bios_setup-setup_bios.obj: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT util/grub_bios_setup-setup_bios.obj -MD -MP -MF util/$(DEPDIR)/grub_bios_setup-setup_bios.Tpo -c -o util/grub_bios_setup-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_bios_setup-setup_bios.Tpo util/$(DEPDIR)/grub_bios_setup-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_bios_setup-setup_bios.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o util/grub_bios_setup-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` + +grub-core/kern/emu/grub_bios_setup-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_bios_setup-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_bios_setup-argp_common.Tpo -c -o grub-core/kern/emu/grub_bios_setup-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_bios_setup-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_bios_setup-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_bios_setup-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_bios_setup-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_bios_setup-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_bios_setup-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_bios_setup-argp_common.Tpo -c -o grub-core/kern/emu/grub_bios_setup-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_bios_setup-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_bios_setup-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_bios_setup-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_bios_setup-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/lib/grub_bios_setup-reed_solomon.o: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_bios_setup-reed_solomon.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_bios_setup-reed_solomon.Tpo -c -o grub-core/lib/grub_bios_setup-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_bios_setup-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_bios_setup-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_bios_setup-reed_solomon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_bios_setup-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c + +grub-core/lib/grub_bios_setup-reed_solomon.obj: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_bios_setup-reed_solomon.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_bios_setup-reed_solomon.Tpo -c -o grub-core/lib/grub_bios_setup-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_bios_setup-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_bios_setup-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_bios_setup-reed_solomon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_bios_setup-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` + +grub-core/osdep/grub_bios_setup-blocklist.o: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_bios_setup-blocklist.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_bios_setup-blocklist.Tpo -c -o grub-core/osdep/grub_bios_setup-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_bios_setup-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_bios_setup-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_bios_setup-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_bios_setup-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c + +grub-core/osdep/grub_bios_setup-blocklist.obj: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_bios_setup-blocklist.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_bios_setup-blocklist.Tpo -c -o grub-core/osdep/grub_bios_setup-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_bios_setup-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_bios_setup-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_bios_setup-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_bios_setup-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` + +grub-core/osdep/grub_bios_setup-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_bios_setup-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_bios_setup-init.Tpo -c -o grub-core/osdep/grub_bios_setup-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_bios_setup-init.Tpo grub-core/osdep/$(DEPDIR)/grub_bios_setup-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_bios_setup-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_bios_setup-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_bios_setup-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_bios_setup-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_bios_setup-init.Tpo -c -o grub-core/osdep/grub_bios_setup-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_bios_setup-init.Tpo grub-core/osdep/$(DEPDIR)/grub_bios_setup-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_bios_setup-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_bios_setup_CPPFLAGS) $(CPPFLAGS) $(grub_bios_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_bios_setup-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_editenv-grub-editenv.o: util/grub-editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -MT util/grub_editenv-grub-editenv.o -MD -MP -MF util/$(DEPDIR)/grub_editenv-grub-editenv.Tpo -c -o util/grub_editenv-grub-editenv.o `test -f 'util/grub-editenv.c' || echo '$(srcdir)/'`util/grub-editenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_editenv-grub-editenv.Tpo util/$(DEPDIR)/grub_editenv-grub-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-editenv.c' object='util/grub_editenv-grub-editenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -c -o util/grub_editenv-grub-editenv.o `test -f 'util/grub-editenv.c' || echo '$(srcdir)/'`util/grub-editenv.c + +util/grub_editenv-grub-editenv.obj: util/grub-editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -MT util/grub_editenv-grub-editenv.obj -MD -MP -MF util/$(DEPDIR)/grub_editenv-grub-editenv.Tpo -c -o util/grub_editenv-grub-editenv.obj `if test -f 'util/grub-editenv.c'; then $(CYGPATH_W) 'util/grub-editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-editenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_editenv-grub-editenv.Tpo util/$(DEPDIR)/grub_editenv-grub-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-editenv.c' object='util/grub_editenv-grub-editenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -c -o util/grub_editenv-grub-editenv.obj `if test -f 'util/grub-editenv.c'; then $(CYGPATH_W) 'util/grub-editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-editenv.c'; fi` + +util/grub_editenv-editenv.o: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -MT util/grub_editenv-editenv.o -MD -MP -MF util/$(DEPDIR)/grub_editenv-editenv.Tpo -c -o util/grub_editenv-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_editenv-editenv.Tpo util/$(DEPDIR)/grub_editenv-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_editenv-editenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -c -o util/grub_editenv-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c + +util/grub_editenv-editenv.obj: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -MT util/grub_editenv-editenv.obj -MD -MP -MF util/$(DEPDIR)/grub_editenv-editenv.Tpo -c -o util/grub_editenv-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_editenv-editenv.Tpo util/$(DEPDIR)/grub_editenv-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_editenv-editenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -c -o util/grub_editenv-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` + +grub-core/osdep/grub_editenv-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_editenv-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_editenv-init.Tpo -c -o grub-core/osdep/grub_editenv-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_editenv-init.Tpo grub-core/osdep/$(DEPDIR)/grub_editenv-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_editenv-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_editenv-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_editenv-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_editenv-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_editenv-init.Tpo -c -o grub-core/osdep/grub_editenv-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_editenv-init.Tpo grub-core/osdep/$(DEPDIR)/grub_editenv-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_editenv-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_editenv_CPPFLAGS) $(CPPFLAGS) $(grub_editenv_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_editenv-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_file-grub-file.o: util/grub-file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT util/grub_file-grub-file.o -MD -MP -MF util/$(DEPDIR)/grub_file-grub-file.Tpo -c -o util/grub_file-grub-file.o `test -f 'util/grub-file.c' || echo '$(srcdir)/'`util/grub-file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_file-grub-file.Tpo util/$(DEPDIR)/grub_file-grub-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-file.c' object='util/grub_file-grub-file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o util/grub_file-grub-file.o `test -f 'util/grub-file.c' || echo '$(srcdir)/'`util/grub-file.c + +util/grub_file-grub-file.obj: util/grub-file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT util/grub_file-grub-file.obj -MD -MP -MF util/$(DEPDIR)/grub_file-grub-file.Tpo -c -o util/grub_file-grub-file.obj `if test -f 'util/grub-file.c'; then $(CYGPATH_W) 'util/grub-file.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_file-grub-file.Tpo util/$(DEPDIR)/grub_file-grub-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-file.c' object='util/grub_file-grub-file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o util/grub_file-grub-file.obj `if test -f 'util/grub-file.c'; then $(CYGPATH_W) 'util/grub-file.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-file.c'; fi` + +util/grub_file-render-label.o: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT util/grub_file-render-label.o -MD -MP -MF util/$(DEPDIR)/grub_file-render-label.Tpo -c -o util/grub_file-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_file-render-label.Tpo util/$(DEPDIR)/grub_file-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_file-render-label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o util/grub_file-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c + +util/grub_file-render-label.obj: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT util/grub_file-render-label.obj -MD -MP -MF util/$(DEPDIR)/grub_file-render-label.Tpo -c -o util/grub_file-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_file-render-label.Tpo util/$(DEPDIR)/grub_file-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_file-render-label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o util/grub_file-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` + +grub-core/commands/grub_file-file.o: grub-core/commands/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/commands/grub_file-file.o -MD -MP -MF grub-core/commands/$(DEPDIR)/grub_file-file.Tpo -c -o grub-core/commands/grub_file-file.o `test -f 'grub-core/commands/file.c' || echo '$(srcdir)/'`grub-core/commands/file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/grub_file-file.Tpo grub-core/commands/$(DEPDIR)/grub_file-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/file.c' object='grub-core/commands/grub_file-file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/commands/grub_file-file.o `test -f 'grub-core/commands/file.c' || echo '$(srcdir)/'`grub-core/commands/file.c + +grub-core/commands/grub_file-file.obj: grub-core/commands/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/commands/grub_file-file.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/grub_file-file.Tpo -c -o grub-core/commands/grub_file-file.obj `if test -f 'grub-core/commands/file.c'; then $(CYGPATH_W) 'grub-core/commands/file.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/grub_file-file.Tpo grub-core/commands/$(DEPDIR)/grub_file-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/file.c' object='grub-core/commands/grub_file-file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/commands/grub_file-file.obj `if test -f 'grub-core/commands/file.c'; then $(CYGPATH_W) 'grub-core/commands/file.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/file.c'; fi` + +grub-core/commands/grub_file-file32.o: grub-core/commands/file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/commands/grub_file-file32.o -MD -MP -MF grub-core/commands/$(DEPDIR)/grub_file-file32.Tpo -c -o grub-core/commands/grub_file-file32.o `test -f 'grub-core/commands/file32.c' || echo '$(srcdir)/'`grub-core/commands/file32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/grub_file-file32.Tpo grub-core/commands/$(DEPDIR)/grub_file-file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/file32.c' object='grub-core/commands/grub_file-file32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/commands/grub_file-file32.o `test -f 'grub-core/commands/file32.c' || echo '$(srcdir)/'`grub-core/commands/file32.c + +grub-core/commands/grub_file-file32.obj: grub-core/commands/file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/commands/grub_file-file32.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/grub_file-file32.Tpo -c -o grub-core/commands/grub_file-file32.obj `if test -f 'grub-core/commands/file32.c'; then $(CYGPATH_W) 'grub-core/commands/file32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/file32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/grub_file-file32.Tpo grub-core/commands/$(DEPDIR)/grub_file-file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/file32.c' object='grub-core/commands/grub_file-file32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/commands/grub_file-file32.obj `if test -f 'grub-core/commands/file32.c'; then $(CYGPATH_W) 'grub-core/commands/file32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/file32.c'; fi` + +grub-core/commands/grub_file-file64.o: grub-core/commands/file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/commands/grub_file-file64.o -MD -MP -MF grub-core/commands/$(DEPDIR)/grub_file-file64.Tpo -c -o grub-core/commands/grub_file-file64.o `test -f 'grub-core/commands/file64.c' || echo '$(srcdir)/'`grub-core/commands/file64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/grub_file-file64.Tpo grub-core/commands/$(DEPDIR)/grub_file-file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/file64.c' object='grub-core/commands/grub_file-file64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/commands/grub_file-file64.o `test -f 'grub-core/commands/file64.c' || echo '$(srcdir)/'`grub-core/commands/file64.c + +grub-core/commands/grub_file-file64.obj: grub-core/commands/file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/commands/grub_file-file64.obj -MD -MP -MF grub-core/commands/$(DEPDIR)/grub_file-file64.Tpo -c -o grub-core/commands/grub_file-file64.obj `if test -f 'grub-core/commands/file64.c'; then $(CYGPATH_W) 'grub-core/commands/file64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/file64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/commands/$(DEPDIR)/grub_file-file64.Tpo grub-core/commands/$(DEPDIR)/grub_file-file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/commands/file64.c' object='grub-core/commands/grub_file-file64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/commands/grub_file-file64.obj `if test -f 'grub-core/commands/file64.c'; then $(CYGPATH_W) 'grub-core/commands/file64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/commands/file64.c'; fi` + +grub-core/loader/i386/grub_file-xen_file.o: grub-core/loader/i386/xen_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/i386/grub_file-xen_file.o -MD -MP -MF grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file.Tpo -c -o grub-core/loader/i386/grub_file-xen_file.o `test -f 'grub-core/loader/i386/xen_file.c' || echo '$(srcdir)/'`grub-core/loader/i386/xen_file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file.Tpo grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/i386/xen_file.c' object='grub-core/loader/i386/grub_file-xen_file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/i386/grub_file-xen_file.o `test -f 'grub-core/loader/i386/xen_file.c' || echo '$(srcdir)/'`grub-core/loader/i386/xen_file.c + +grub-core/loader/i386/grub_file-xen_file.obj: grub-core/loader/i386/xen_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/i386/grub_file-xen_file.obj -MD -MP -MF grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file.Tpo -c -o grub-core/loader/i386/grub_file-xen_file.obj `if test -f 'grub-core/loader/i386/xen_file.c'; then $(CYGPATH_W) 'grub-core/loader/i386/xen_file.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/i386/xen_file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file.Tpo grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/i386/xen_file.c' object='grub-core/loader/i386/grub_file-xen_file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/i386/grub_file-xen_file.obj `if test -f 'grub-core/loader/i386/xen_file.c'; then $(CYGPATH_W) 'grub-core/loader/i386/xen_file.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/i386/xen_file.c'; fi` + +grub-core/loader/i386/grub_file-xen_file32.o: grub-core/loader/i386/xen_file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/i386/grub_file-xen_file32.o -MD -MP -MF grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file32.Tpo -c -o grub-core/loader/i386/grub_file-xen_file32.o `test -f 'grub-core/loader/i386/xen_file32.c' || echo '$(srcdir)/'`grub-core/loader/i386/xen_file32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file32.Tpo grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/i386/xen_file32.c' object='grub-core/loader/i386/grub_file-xen_file32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/i386/grub_file-xen_file32.o `test -f 'grub-core/loader/i386/xen_file32.c' || echo '$(srcdir)/'`grub-core/loader/i386/xen_file32.c + +grub-core/loader/i386/grub_file-xen_file32.obj: grub-core/loader/i386/xen_file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/i386/grub_file-xen_file32.obj -MD -MP -MF grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file32.Tpo -c -o grub-core/loader/i386/grub_file-xen_file32.obj `if test -f 'grub-core/loader/i386/xen_file32.c'; then $(CYGPATH_W) 'grub-core/loader/i386/xen_file32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/i386/xen_file32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file32.Tpo grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/i386/xen_file32.c' object='grub-core/loader/i386/grub_file-xen_file32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/i386/grub_file-xen_file32.obj `if test -f 'grub-core/loader/i386/xen_file32.c'; then $(CYGPATH_W) 'grub-core/loader/i386/xen_file32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/i386/xen_file32.c'; fi` + +grub-core/loader/i386/grub_file-xen_file64.o: grub-core/loader/i386/xen_file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/i386/grub_file-xen_file64.o -MD -MP -MF grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file64.Tpo -c -o grub-core/loader/i386/grub_file-xen_file64.o `test -f 'grub-core/loader/i386/xen_file64.c' || echo '$(srcdir)/'`grub-core/loader/i386/xen_file64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file64.Tpo grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/i386/xen_file64.c' object='grub-core/loader/i386/grub_file-xen_file64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/i386/grub_file-xen_file64.o `test -f 'grub-core/loader/i386/xen_file64.c' || echo '$(srcdir)/'`grub-core/loader/i386/xen_file64.c + +grub-core/loader/i386/grub_file-xen_file64.obj: grub-core/loader/i386/xen_file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/i386/grub_file-xen_file64.obj -MD -MP -MF grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file64.Tpo -c -o grub-core/loader/i386/grub_file-xen_file64.obj `if test -f 'grub-core/loader/i386/xen_file64.c'; then $(CYGPATH_W) 'grub-core/loader/i386/xen_file64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/i386/xen_file64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file64.Tpo grub-core/loader/i386/$(DEPDIR)/grub_file-xen_file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/i386/xen_file64.c' object='grub-core/loader/i386/grub_file-xen_file64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/i386/grub_file-xen_file64.obj `if test -f 'grub-core/loader/i386/xen_file64.c'; then $(CYGPATH_W) 'grub-core/loader/i386/xen_file64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/i386/xen_file64.c'; fi` + +grub-core/io/grub_file-offset.o: grub-core/io/offset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/io/grub_file-offset.o -MD -MP -MF grub-core/io/$(DEPDIR)/grub_file-offset.Tpo -c -o grub-core/io/grub_file-offset.o `test -f 'grub-core/io/offset.c' || echo '$(srcdir)/'`grub-core/io/offset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/grub_file-offset.Tpo grub-core/io/$(DEPDIR)/grub_file-offset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/offset.c' object='grub-core/io/grub_file-offset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/io/grub_file-offset.o `test -f 'grub-core/io/offset.c' || echo '$(srcdir)/'`grub-core/io/offset.c + +grub-core/io/grub_file-offset.obj: grub-core/io/offset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/io/grub_file-offset.obj -MD -MP -MF grub-core/io/$(DEPDIR)/grub_file-offset.Tpo -c -o grub-core/io/grub_file-offset.obj `if test -f 'grub-core/io/offset.c'; then $(CYGPATH_W) 'grub-core/io/offset.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/offset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/io/$(DEPDIR)/grub_file-offset.Tpo grub-core/io/$(DEPDIR)/grub_file-offset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/io/offset.c' object='grub-core/io/grub_file-offset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/io/grub_file-offset.obj `if test -f 'grub-core/io/offset.c'; then $(CYGPATH_W) 'grub-core/io/offset.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/io/offset.c'; fi` + +grub-core/kern/grub_file-elf.o: grub-core/kern/elf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/kern/grub_file-elf.o -MD -MP -MF grub-core/kern/$(DEPDIR)/grub_file-elf.Tpo -c -o grub-core/kern/grub_file-elf.o `test -f 'grub-core/kern/elf.c' || echo '$(srcdir)/'`grub-core/kern/elf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/grub_file-elf.Tpo grub-core/kern/$(DEPDIR)/grub_file-elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/elf.c' object='grub-core/kern/grub_file-elf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/kern/grub_file-elf.o `test -f 'grub-core/kern/elf.c' || echo '$(srcdir)/'`grub-core/kern/elf.c + +grub-core/kern/grub_file-elf.obj: grub-core/kern/elf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/kern/grub_file-elf.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/grub_file-elf.Tpo -c -o grub-core/kern/grub_file-elf.obj `if test -f 'grub-core/kern/elf.c'; then $(CYGPATH_W) 'grub-core/kern/elf.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/elf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/grub_file-elf.Tpo grub-core/kern/$(DEPDIR)/grub_file-elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/elf.c' object='grub-core/kern/grub_file-elf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/kern/grub_file-elf.obj `if test -f 'grub-core/kern/elf.c'; then $(CYGPATH_W) 'grub-core/kern/elf.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/elf.c'; fi` + +grub-core/loader/grub_file-lzss.o: grub-core/loader/lzss.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-lzss.o -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-lzss.Tpo -c -o grub-core/loader/grub_file-lzss.o `test -f 'grub-core/loader/lzss.c' || echo '$(srcdir)/'`grub-core/loader/lzss.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-lzss.Tpo grub-core/loader/$(DEPDIR)/grub_file-lzss.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/lzss.c' object='grub-core/loader/grub_file-lzss.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-lzss.o `test -f 'grub-core/loader/lzss.c' || echo '$(srcdir)/'`grub-core/loader/lzss.c + +grub-core/loader/grub_file-lzss.obj: grub-core/loader/lzss.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-lzss.obj -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-lzss.Tpo -c -o grub-core/loader/grub_file-lzss.obj `if test -f 'grub-core/loader/lzss.c'; then $(CYGPATH_W) 'grub-core/loader/lzss.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/lzss.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-lzss.Tpo grub-core/loader/$(DEPDIR)/grub_file-lzss.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/lzss.c' object='grub-core/loader/grub_file-lzss.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-lzss.obj `if test -f 'grub-core/loader/lzss.c'; then $(CYGPATH_W) 'grub-core/loader/lzss.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/lzss.c'; fi` + +grub-core/loader/grub_file-macho.o: grub-core/loader/macho.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-macho.o -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-macho.Tpo -c -o grub-core/loader/grub_file-macho.o `test -f 'grub-core/loader/macho.c' || echo '$(srcdir)/'`grub-core/loader/macho.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-macho.Tpo grub-core/loader/$(DEPDIR)/grub_file-macho.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/macho.c' object='grub-core/loader/grub_file-macho.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-macho.o `test -f 'grub-core/loader/macho.c' || echo '$(srcdir)/'`grub-core/loader/macho.c + +grub-core/loader/grub_file-macho.obj: grub-core/loader/macho.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-macho.obj -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-macho.Tpo -c -o grub-core/loader/grub_file-macho.obj `if test -f 'grub-core/loader/macho.c'; then $(CYGPATH_W) 'grub-core/loader/macho.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/macho.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-macho.Tpo grub-core/loader/$(DEPDIR)/grub_file-macho.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/macho.c' object='grub-core/loader/grub_file-macho.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-macho.obj `if test -f 'grub-core/loader/macho.c'; then $(CYGPATH_W) 'grub-core/loader/macho.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/macho.c'; fi` + +grub-core/loader/grub_file-macho32.o: grub-core/loader/macho32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-macho32.o -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-macho32.Tpo -c -o grub-core/loader/grub_file-macho32.o `test -f 'grub-core/loader/macho32.c' || echo '$(srcdir)/'`grub-core/loader/macho32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-macho32.Tpo grub-core/loader/$(DEPDIR)/grub_file-macho32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/macho32.c' object='grub-core/loader/grub_file-macho32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-macho32.o `test -f 'grub-core/loader/macho32.c' || echo '$(srcdir)/'`grub-core/loader/macho32.c + +grub-core/loader/grub_file-macho32.obj: grub-core/loader/macho32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-macho32.obj -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-macho32.Tpo -c -o grub-core/loader/grub_file-macho32.obj `if test -f 'grub-core/loader/macho32.c'; then $(CYGPATH_W) 'grub-core/loader/macho32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/macho32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-macho32.Tpo grub-core/loader/$(DEPDIR)/grub_file-macho32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/macho32.c' object='grub-core/loader/grub_file-macho32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-macho32.obj `if test -f 'grub-core/loader/macho32.c'; then $(CYGPATH_W) 'grub-core/loader/macho32.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/macho32.c'; fi` + +grub-core/loader/grub_file-macho64.o: grub-core/loader/macho64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-macho64.o -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-macho64.Tpo -c -o grub-core/loader/grub_file-macho64.o `test -f 'grub-core/loader/macho64.c' || echo '$(srcdir)/'`grub-core/loader/macho64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-macho64.Tpo grub-core/loader/$(DEPDIR)/grub_file-macho64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/macho64.c' object='grub-core/loader/grub_file-macho64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-macho64.o `test -f 'grub-core/loader/macho64.c' || echo '$(srcdir)/'`grub-core/loader/macho64.c + +grub-core/loader/grub_file-macho64.obj: grub-core/loader/macho64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/loader/grub_file-macho64.obj -MD -MP -MF grub-core/loader/$(DEPDIR)/grub_file-macho64.Tpo -c -o grub-core/loader/grub_file-macho64.obj `if test -f 'grub-core/loader/macho64.c'; then $(CYGPATH_W) 'grub-core/loader/macho64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/macho64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/loader/$(DEPDIR)/grub_file-macho64.Tpo grub-core/loader/$(DEPDIR)/grub_file-macho64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/loader/macho64.c' object='grub-core/loader/grub_file-macho64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/loader/grub_file-macho64.obj `if test -f 'grub-core/loader/macho64.c'; then $(CYGPATH_W) 'grub-core/loader/macho64.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/loader/macho64.c'; fi` + +grub-core/kern/emu/grub_file-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_file-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_file-hostfs.Tpo -c -o grub-core/kern/emu/grub_file-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_file-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_file-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_file-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_file-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_file-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_file-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_file-hostfs.Tpo -c -o grub-core/kern/emu/grub_file-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_file-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_file-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_file-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_file-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_file-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_file-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_file-host.Tpo -c -o grub-core/disk/grub_file-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_file-host.Tpo grub-core/disk/$(DEPDIR)/grub_file-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_file-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_file-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_file-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_file-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_file-host.Tpo -c -o grub-core/disk/grub_file-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_file-host.Tpo grub-core/disk/$(DEPDIR)/grub_file-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_file-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_file-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +grub-core/osdep/grub_file-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_file-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_file-init.Tpo -c -o grub-core/osdep/grub_file-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_file-init.Tpo grub-core/osdep/$(DEPDIR)/grub_file-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_file-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_file-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_file-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_file-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_file-init.Tpo -c -o grub-core/osdep/grub_file-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_file-init.Tpo grub-core/osdep/$(DEPDIR)/grub_file-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_file-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_file_CPPFLAGS) $(CPPFLAGS) $(grub_file_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_file-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_fstest-grub-fstest.o: util/grub-fstest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT util/grub_fstest-grub-fstest.o -MD -MP -MF util/$(DEPDIR)/grub_fstest-grub-fstest.Tpo -c -o util/grub_fstest-grub-fstest.o `test -f 'util/grub-fstest.c' || echo '$(srcdir)/'`util/grub-fstest.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_fstest-grub-fstest.Tpo util/$(DEPDIR)/grub_fstest-grub-fstest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-fstest.c' object='util/grub_fstest-grub-fstest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o util/grub_fstest-grub-fstest.o `test -f 'util/grub-fstest.c' || echo '$(srcdir)/'`util/grub-fstest.c + +util/grub_fstest-grub-fstest.obj: util/grub-fstest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT util/grub_fstest-grub-fstest.obj -MD -MP -MF util/$(DEPDIR)/grub_fstest-grub-fstest.Tpo -c -o util/grub_fstest-grub-fstest.obj `if test -f 'util/grub-fstest.c'; then $(CYGPATH_W) 'util/grub-fstest.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-fstest.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_fstest-grub-fstest.Tpo util/$(DEPDIR)/grub_fstest-grub-fstest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-fstest.c' object='util/grub_fstest-grub-fstest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o util/grub_fstest-grub-fstest.obj `if test -f 'util/grub-fstest.c'; then $(CYGPATH_W) 'util/grub-fstest.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-fstest.c'; fi` + +grub-core/kern/emu/grub_fstest-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_fstest-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_fstest-hostfs.Tpo -c -o grub-core/kern/emu/grub_fstest-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_fstest-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_fstest-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_fstest-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_fstest-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_fstest-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_fstest-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_fstest-hostfs.Tpo -c -o grub-core/kern/emu/grub_fstest-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_fstest-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_fstest-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_fstest-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_fstest-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_fstest-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_fstest-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_fstest-host.Tpo -c -o grub-core/disk/grub_fstest-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_fstest-host.Tpo grub-core/disk/$(DEPDIR)/grub_fstest-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_fstest-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_fstest-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_fstest-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_fstest-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_fstest-host.Tpo -c -o grub-core/disk/grub_fstest-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_fstest-host.Tpo grub-core/disk/$(DEPDIR)/grub_fstest-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_fstest-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_fstest-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +grub-core/osdep/grub_fstest-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_fstest-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_fstest-init.Tpo -c -o grub-core/osdep/grub_fstest-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_fstest-init.Tpo grub-core/osdep/$(DEPDIR)/grub_fstest-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_fstest-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_fstest-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_fstest-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_fstest-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_fstest-init.Tpo -c -o grub-core/osdep/grub_fstest-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_fstest-init.Tpo grub-core/osdep/$(DEPDIR)/grub_fstest-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_fstest-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_fstest-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +grub_fstest-grub_fstest_init.o: grub_fstest_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub_fstest-grub_fstest_init.o -MD -MP -MF $(DEPDIR)/grub_fstest-grub_fstest_init.Tpo -c -o grub_fstest-grub_fstest_init.o `test -f 'grub_fstest_init.c' || echo '$(srcdir)/'`grub_fstest_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_fstest-grub_fstest_init.Tpo $(DEPDIR)/grub_fstest-grub_fstest_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_fstest_init.c' object='grub_fstest-grub_fstest_init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub_fstest-grub_fstest_init.o `test -f 'grub_fstest_init.c' || echo '$(srcdir)/'`grub_fstest_init.c + +grub_fstest-grub_fstest_init.obj: grub_fstest_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -MT grub_fstest-grub_fstest_init.obj -MD -MP -MF $(DEPDIR)/grub_fstest-grub_fstest_init.Tpo -c -o grub_fstest-grub_fstest_init.obj `if test -f 'grub_fstest_init.c'; then $(CYGPATH_W) 'grub_fstest_init.c'; else $(CYGPATH_W) '$(srcdir)/grub_fstest_init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_fstest-grub_fstest_init.Tpo $(DEPDIR)/grub_fstest-grub_fstest_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_fstest_init.c' object='grub_fstest-grub_fstest_init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) $(grub_fstest_CFLAGS) $(CFLAGS) -c -o grub_fstest-grub_fstest_init.obj `if test -f 'grub_fstest_init.c'; then $(CYGPATH_W) 'grub_fstest_init.c'; else $(CYGPATH_W) '$(srcdir)/grub_fstest_init.c'; fi` + +util/grub_glue_efi-grub-glue-efi.o: util/grub-glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT util/grub_glue_efi-grub-glue-efi.o -MD -MP -MF util/$(DEPDIR)/grub_glue_efi-grub-glue-efi.Tpo -c -o util/grub_glue_efi-grub-glue-efi.o `test -f 'util/grub-glue-efi.c' || echo '$(srcdir)/'`util/grub-glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_glue_efi-grub-glue-efi.Tpo util/$(DEPDIR)/grub_glue_efi-grub-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-glue-efi.c' object='util/grub_glue_efi-grub-glue-efi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o util/grub_glue_efi-grub-glue-efi.o `test -f 'util/grub-glue-efi.c' || echo '$(srcdir)/'`util/grub-glue-efi.c + +util/grub_glue_efi-grub-glue-efi.obj: util/grub-glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT util/grub_glue_efi-grub-glue-efi.obj -MD -MP -MF util/$(DEPDIR)/grub_glue_efi-grub-glue-efi.Tpo -c -o util/grub_glue_efi-grub-glue-efi.obj `if test -f 'util/grub-glue-efi.c'; then $(CYGPATH_W) 'util/grub-glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-glue-efi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_glue_efi-grub-glue-efi.Tpo util/$(DEPDIR)/grub_glue_efi-grub-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-glue-efi.c' object='util/grub_glue_efi-grub-glue-efi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o util/grub_glue_efi-grub-glue-efi.obj `if test -f 'util/grub-glue-efi.c'; then $(CYGPATH_W) 'util/grub-glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-glue-efi.c'; fi` + +util/grub_glue_efi-glue-efi.o: util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT util/grub_glue_efi-glue-efi.o -MD -MP -MF util/$(DEPDIR)/grub_glue_efi-glue-efi.Tpo -c -o util/grub_glue_efi-glue-efi.o `test -f 'util/glue-efi.c' || echo '$(srcdir)/'`util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_glue_efi-glue-efi.Tpo util/$(DEPDIR)/grub_glue_efi-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/glue-efi.c' object='util/grub_glue_efi-glue-efi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o util/grub_glue_efi-glue-efi.o `test -f 'util/glue-efi.c' || echo '$(srcdir)/'`util/glue-efi.c + +util/grub_glue_efi-glue-efi.obj: util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT util/grub_glue_efi-glue-efi.obj -MD -MP -MF util/$(DEPDIR)/grub_glue_efi-glue-efi.Tpo -c -o util/grub_glue_efi-glue-efi.obj `if test -f 'util/glue-efi.c'; then $(CYGPATH_W) 'util/glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/glue-efi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_glue_efi-glue-efi.Tpo util/$(DEPDIR)/grub_glue_efi-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/glue-efi.c' object='util/grub_glue_efi-glue-efi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o util/grub_glue_efi-glue-efi.obj `if test -f 'util/glue-efi.c'; then $(CYGPATH_W) 'util/glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/glue-efi.c'; fi` + +grub-core/kern/emu/grub_glue_efi-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_glue_efi-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_glue_efi-argp_common.Tpo -c -o grub-core/kern/emu/grub_glue_efi-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_glue_efi-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_glue_efi-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_glue_efi-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_glue_efi-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_glue_efi-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_glue_efi-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_glue_efi-argp_common.Tpo -c -o grub-core/kern/emu/grub_glue_efi-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_glue_efi-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_glue_efi-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_glue_efi-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_glue_efi-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_glue_efi-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_glue_efi-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_glue_efi-init.Tpo -c -o grub-core/osdep/grub_glue_efi-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_glue_efi-init.Tpo grub-core/osdep/$(DEPDIR)/grub_glue_efi-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_glue_efi-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_glue_efi-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_glue_efi-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_glue_efi-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_glue_efi-init.Tpo -c -o grub-core/osdep/grub_glue_efi-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_glue_efi-init.Tpo grub-core/osdep/$(DEPDIR)/grub_glue_efi-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_glue_efi-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_glue_efi_CPPFLAGS) $(CPPFLAGS) $(grub_glue_efi_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_glue_efi-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_install-grub-install.o: util/grub-install.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-install.o -MD -MP -MF util/$(DEPDIR)/grub_install-grub-install.Tpo -c -o util/grub_install-grub-install.o `test -f 'util/grub-install.c' || echo '$(srcdir)/'`util/grub-install.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-install.Tpo util/$(DEPDIR)/grub_install-grub-install.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install.c' object='util/grub_install-grub-install.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-install.o `test -f 'util/grub-install.c' || echo '$(srcdir)/'`util/grub-install.c + +util/grub_install-grub-install.obj: util/grub-install.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-install.obj -MD -MP -MF util/$(DEPDIR)/grub_install-grub-install.Tpo -c -o util/grub_install-grub-install.obj `if test -f 'util/grub-install.c'; then $(CYGPATH_W) 'util/grub-install.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-install.Tpo util/$(DEPDIR)/grub_install-grub-install.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install.c' object='util/grub_install-grub-install.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-install.obj `if test -f 'util/grub-install.c'; then $(CYGPATH_W) 'util/grub-install.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install.c'; fi` + +util/grub_install-probe.o: util/probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-probe.o -MD -MP -MF util/$(DEPDIR)/grub_install-probe.Tpo -c -o util/grub_install-probe.o `test -f 'util/probe.c' || echo '$(srcdir)/'`util/probe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-probe.Tpo util/$(DEPDIR)/grub_install-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/probe.c' object='util/grub_install-probe.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-probe.o `test -f 'util/probe.c' || echo '$(srcdir)/'`util/probe.c + +util/grub_install-probe.obj: util/probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-probe.obj -MD -MP -MF util/$(DEPDIR)/grub_install-probe.Tpo -c -o util/grub_install-probe.obj `if test -f 'util/probe.c'; then $(CYGPATH_W) 'util/probe.c'; else $(CYGPATH_W) '$(srcdir)/util/probe.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-probe.Tpo util/$(DEPDIR)/grub_install-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/probe.c' object='util/grub_install-probe.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-probe.obj `if test -f 'util/probe.c'; then $(CYGPATH_W) 'util/probe.c'; else $(CYGPATH_W) '$(srcdir)/util/probe.c'; fi` + +util/grub_install-mkimage.o: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-mkimage.o -MD -MP -MF util/$(DEPDIR)/grub_install-mkimage.Tpo -c -o util/grub_install-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-mkimage.Tpo util/$(DEPDIR)/grub_install-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_install-mkimage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c + +util/grub_install-mkimage.obj: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-mkimage.obj -MD -MP -MF util/$(DEPDIR)/grub_install-mkimage.Tpo -c -o util/grub_install-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-mkimage.Tpo util/$(DEPDIR)/grub_install-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_install-mkimage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` + +util/grub_install-grub-mkimage32.o: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-mkimage32.o -MD -MP -MF util/$(DEPDIR)/grub_install-grub-mkimage32.Tpo -c -o util/grub_install-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-mkimage32.Tpo util/$(DEPDIR)/grub_install-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_install-grub-mkimage32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c + +util/grub_install-grub-mkimage32.obj: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-mkimage32.obj -MD -MP -MF util/$(DEPDIR)/grub_install-grub-mkimage32.Tpo -c -o util/grub_install-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-mkimage32.Tpo util/$(DEPDIR)/grub_install-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_install-grub-mkimage32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` + +util/grub_install-grub-mkimage64.o: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-mkimage64.o -MD -MP -MF util/$(DEPDIR)/grub_install-grub-mkimage64.Tpo -c -o util/grub_install-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-mkimage64.Tpo util/$(DEPDIR)/grub_install-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_install-grub-mkimage64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c + +util/grub_install-grub-mkimage64.obj: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-mkimage64.obj -MD -MP -MF util/$(DEPDIR)/grub_install-grub-mkimage64.Tpo -c -o util/grub_install-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-mkimage64.Tpo util/$(DEPDIR)/grub_install-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_install-grub-mkimage64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` + +util/grub_install-grub-install-common.o: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-install-common.o -MD -MP -MF util/$(DEPDIR)/grub_install-grub-install-common.Tpo -c -o util/grub_install-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-install-common.Tpo util/$(DEPDIR)/grub_install-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_install-grub-install-common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c + +util/grub_install-grub-install-common.obj: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-grub-install-common.obj -MD -MP -MF util/$(DEPDIR)/grub_install-grub-install-common.Tpo -c -o util/grub_install-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-grub-install-common.Tpo util/$(DEPDIR)/grub_install-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_install-grub-install-common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` + +util/grub_install-setup_bios.o: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-setup_bios.o -MD -MP -MF util/$(DEPDIR)/grub_install-setup_bios.Tpo -c -o util/grub_install-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-setup_bios.Tpo util/$(DEPDIR)/grub_install-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_install-setup_bios.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c + +util/grub_install-setup_bios.obj: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-setup_bios.obj -MD -MP -MF util/$(DEPDIR)/grub_install-setup_bios.Tpo -c -o util/grub_install-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-setup_bios.Tpo util/$(DEPDIR)/grub_install-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_install-setup_bios.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` + +util/grub_install-setup_sparc.o: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-setup_sparc.o -MD -MP -MF util/$(DEPDIR)/grub_install-setup_sparc.Tpo -c -o util/grub_install-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-setup_sparc.Tpo util/$(DEPDIR)/grub_install-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_install-setup_sparc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c + +util/grub_install-setup_sparc.obj: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-setup_sparc.obj -MD -MP -MF util/$(DEPDIR)/grub_install-setup_sparc.Tpo -c -o util/grub_install-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-setup_sparc.Tpo util/$(DEPDIR)/grub_install-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_install-setup_sparc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` + +grub-core/lib/grub_install-reed_solomon.o: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_install-reed_solomon.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_install-reed_solomon.Tpo -c -o grub-core/lib/grub_install-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_install-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_install-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_install-reed_solomon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_install-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c + +grub-core/lib/grub_install-reed_solomon.obj: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_install-reed_solomon.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_install-reed_solomon.Tpo -c -o grub-core/lib/grub_install-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_install-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_install-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_install-reed_solomon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_install-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` + +grub-core/osdep/grub_install-random.o: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-random.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-random.Tpo -c -o grub-core/osdep/grub_install-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-random.Tpo grub-core/osdep/$(DEPDIR)/grub_install-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_install-random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c + +grub-core/osdep/grub_install-random.obj: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-random.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-random.Tpo -c -o grub-core/osdep/grub_install-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-random.Tpo grub-core/osdep/$(DEPDIR)/grub_install-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_install-random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` + +grub-core/osdep/grub_install-ofpath.o: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-ofpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-ofpath.Tpo -c -o grub-core/osdep/grub_install-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_install-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_install-ofpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c + +grub-core/osdep/grub_install-ofpath.obj: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-ofpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-ofpath.Tpo -c -o grub-core/osdep/grub_install-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_install-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_install-ofpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` + +grub-core/osdep/grub_install-platform.o: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-platform.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-platform.Tpo -c -o grub-core/osdep/grub_install-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_install-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_install-platform.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c + +grub-core/osdep/grub_install-platform.obj: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-platform.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-platform.Tpo -c -o grub-core/osdep/grub_install-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_install-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_install-platform.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` + +grub-core/osdep/grub_install-platform_unix.o: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-platform_unix.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-platform_unix.Tpo -c -o grub-core/osdep/grub_install-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_install-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_install-platform_unix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c + +grub-core/osdep/grub_install-platform_unix.obj: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-platform_unix.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-platform_unix.Tpo -c -o grub-core/osdep/grub_install-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_install-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_install-platform_unix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` + +grub-core/osdep/grub_install-compress.o: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-compress.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-compress.Tpo -c -o grub-core/osdep/grub_install-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_install-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_install-compress.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c + +grub-core/osdep/grub_install-compress.obj: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-compress.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-compress.Tpo -c -o grub-core/osdep/grub_install-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_install-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_install-compress.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` + +util/grub_install-editenv.o: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-editenv.o -MD -MP -MF util/$(DEPDIR)/grub_install-editenv.Tpo -c -o util/grub_install-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-editenv.Tpo util/$(DEPDIR)/grub_install-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_install-editenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c + +util/grub_install-editenv.obj: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-editenv.obj -MD -MP -MF util/$(DEPDIR)/grub_install-editenv.Tpo -c -o util/grub_install-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-editenv.Tpo util/$(DEPDIR)/grub_install-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_install-editenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` + +grub-core/osdep/grub_install-blocklist.o: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-blocklist.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-blocklist.Tpo -c -o grub-core/osdep/grub_install-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_install-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_install-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c + +grub-core/osdep/grub_install-blocklist.obj: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-blocklist.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-blocklist.Tpo -c -o grub-core/osdep/grub_install-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_install-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_install-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` + +grub-core/osdep/grub_install-config.o: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-config.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-config.Tpo -c -o grub-core/osdep/grub_install-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-config.Tpo grub-core/osdep/$(DEPDIR)/grub_install-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_install-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c + +grub-core/osdep/grub_install-config.obj: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-config.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-config.Tpo -c -o grub-core/osdep/grub_install-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-config.Tpo grub-core/osdep/$(DEPDIR)/grub_install-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_install-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` + +util/grub_install-config.o: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-config.o -MD -MP -MF util/$(DEPDIR)/grub_install-config.Tpo -c -o util/grub_install-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-config.Tpo util/$(DEPDIR)/grub_install-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_install-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c + +util/grub_install-config.obj: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-config.obj -MD -MP -MF util/$(DEPDIR)/grub_install-config.Tpo -c -o util/grub_install-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-config.Tpo util/$(DEPDIR)/grub_install-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_install-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` + +util/grub_install-render-label.o: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-render-label.o -MD -MP -MF util/$(DEPDIR)/grub_install-render-label.Tpo -c -o util/grub_install-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-render-label.Tpo util/$(DEPDIR)/grub_install-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_install-render-label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c + +util/grub_install-render-label.obj: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-render-label.obj -MD -MP -MF util/$(DEPDIR)/grub_install-render-label.Tpo -c -o util/grub_install-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-render-label.Tpo util/$(DEPDIR)/grub_install-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_install-render-label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` + +grub-core/kern/emu/grub_install-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_install-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_install-hostfs.Tpo -c -o grub-core/kern/emu/grub_install-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_install-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_install-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_install-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_install-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_install-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_install-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_install-hostfs.Tpo -c -o grub-core/kern/emu/grub_install-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_install-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_install-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_install-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_install-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_install-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_install-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_install-host.Tpo -c -o grub-core/disk/grub_install-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_install-host.Tpo grub-core/disk/$(DEPDIR)/grub_install-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_install-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_install-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_install-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_install-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_install-host.Tpo -c -o grub-core/disk/grub_install-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_install-host.Tpo grub-core/disk/$(DEPDIR)/grub_install-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_install-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_install-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +util/grub_install-resolve.o: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-resolve.o -MD -MP -MF util/$(DEPDIR)/grub_install-resolve.Tpo -c -o util/grub_install-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-resolve.Tpo util/$(DEPDIR)/grub_install-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_install-resolve.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c + +util/grub_install-resolve.obj: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT util/grub_install-resolve.obj -MD -MP -MF util/$(DEPDIR)/grub_install-resolve.Tpo -c -o util/grub_install-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_install-resolve.Tpo util/$(DEPDIR)/grub_install-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_install-resolve.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o util/grub_install-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` + +grub-core/kern/emu/grub_install-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_install-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_install-argp_common.Tpo -c -o grub-core/kern/emu/grub_install-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_install-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_install-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_install-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_install-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_install-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_install-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_install-argp_common.Tpo -c -o grub-core/kern/emu/grub_install-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_install-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_install-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_install-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_install-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_install-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-init.Tpo -c -o grub-core/osdep/grub_install-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-init.Tpo grub-core/osdep/$(DEPDIR)/grub_install-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_install-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_install-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_install-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_install-init.Tpo -c -o grub-core/osdep/grub_install-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_install-init.Tpo grub-core/osdep/$(DEPDIR)/grub_install-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_install-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_install_CPPFLAGS) $(CPPFLAGS) $(grub_install_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_install-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_macbless-grub-macbless.o: util/grub-macbless.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -MT util/grub_macbless-grub-macbless.o -MD -MP -MF util/$(DEPDIR)/grub_macbless-grub-macbless.Tpo -c -o util/grub_macbless-grub-macbless.o `test -f 'util/grub-macbless.c' || echo '$(srcdir)/'`util/grub-macbless.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_macbless-grub-macbless.Tpo util/$(DEPDIR)/grub_macbless-grub-macbless.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-macbless.c' object='util/grub_macbless-grub-macbless.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -c -o util/grub_macbless-grub-macbless.o `test -f 'util/grub-macbless.c' || echo '$(srcdir)/'`util/grub-macbless.c + +util/grub_macbless-grub-macbless.obj: util/grub-macbless.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -MT util/grub_macbless-grub-macbless.obj -MD -MP -MF util/$(DEPDIR)/grub_macbless-grub-macbless.Tpo -c -o util/grub_macbless-grub-macbless.obj `if test -f 'util/grub-macbless.c'; then $(CYGPATH_W) 'util/grub-macbless.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-macbless.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_macbless-grub-macbless.Tpo util/$(DEPDIR)/grub_macbless-grub-macbless.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-macbless.c' object='util/grub_macbless-grub-macbless.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -c -o util/grub_macbless-grub-macbless.obj `if test -f 'util/grub-macbless.c'; then $(CYGPATH_W) 'util/grub-macbless.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-macbless.c'; fi` + +grub-core/osdep/grub_macbless-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_macbless-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_macbless-init.Tpo -c -o grub-core/osdep/grub_macbless-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_macbless-init.Tpo grub-core/osdep/$(DEPDIR)/grub_macbless-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_macbless-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_macbless-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_macbless-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_macbless-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_macbless-init.Tpo -c -o grub-core/osdep/grub_macbless-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_macbless-init.Tpo grub-core/osdep/$(DEPDIR)/grub_macbless-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_macbless-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_macbless-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +grub-core/kern/emu/grub_macbless-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_macbless-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_macbless-argp_common.Tpo -c -o grub-core/kern/emu/grub_macbless-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_macbless-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_macbless-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_macbless-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_macbless-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_macbless-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_macbless-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_macbless-argp_common.Tpo -c -o grub-core/kern/emu/grub_macbless-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_macbless-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_macbless-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_macbless-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macbless_CPPFLAGS) $(CPPFLAGS) $(grub_macbless_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_macbless-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +util/grub_macho2img-grub-macho2img.o: util/grub-macho2img.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macho2img_CPPFLAGS) $(CPPFLAGS) $(grub_macho2img_CFLAGS) $(CFLAGS) -MT util/grub_macho2img-grub-macho2img.o -MD -MP -MF util/$(DEPDIR)/grub_macho2img-grub-macho2img.Tpo -c -o util/grub_macho2img-grub-macho2img.o `test -f 'util/grub-macho2img.c' || echo '$(srcdir)/'`util/grub-macho2img.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_macho2img-grub-macho2img.Tpo util/$(DEPDIR)/grub_macho2img-grub-macho2img.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-macho2img.c' object='util/grub_macho2img-grub-macho2img.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macho2img_CPPFLAGS) $(CPPFLAGS) $(grub_macho2img_CFLAGS) $(CFLAGS) -c -o util/grub_macho2img-grub-macho2img.o `test -f 'util/grub-macho2img.c' || echo '$(srcdir)/'`util/grub-macho2img.c + +util/grub_macho2img-grub-macho2img.obj: util/grub-macho2img.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macho2img_CPPFLAGS) $(CPPFLAGS) $(grub_macho2img_CFLAGS) $(CFLAGS) -MT util/grub_macho2img-grub-macho2img.obj -MD -MP -MF util/$(DEPDIR)/grub_macho2img-grub-macho2img.Tpo -c -o util/grub_macho2img-grub-macho2img.obj `if test -f 'util/grub-macho2img.c'; then $(CYGPATH_W) 'util/grub-macho2img.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-macho2img.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_macho2img-grub-macho2img.Tpo util/$(DEPDIR)/grub_macho2img-grub-macho2img.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-macho2img.c' object='util/grub_macho2img-grub-macho2img.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_macho2img_CPPFLAGS) $(CPPFLAGS) $(grub_macho2img_CFLAGS) $(CFLAGS) -c -o util/grub_macho2img-grub-macho2img.obj `if test -f 'util/grub-macho2img.c'; then $(CYGPATH_W) 'util/grub-macho2img.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-macho2img.c'; fi` + +util/grub_menulst2cfg-grub-menulst2cfg.o: util/grub-menulst2cfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT util/grub_menulst2cfg-grub-menulst2cfg.o -MD -MP -MF util/$(DEPDIR)/grub_menulst2cfg-grub-menulst2cfg.Tpo -c -o util/grub_menulst2cfg-grub-menulst2cfg.o `test -f 'util/grub-menulst2cfg.c' || echo '$(srcdir)/'`util/grub-menulst2cfg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_menulst2cfg-grub-menulst2cfg.Tpo util/$(DEPDIR)/grub_menulst2cfg-grub-menulst2cfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-menulst2cfg.c' object='util/grub_menulst2cfg-grub-menulst2cfg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o util/grub_menulst2cfg-grub-menulst2cfg.o `test -f 'util/grub-menulst2cfg.c' || echo '$(srcdir)/'`util/grub-menulst2cfg.c + +util/grub_menulst2cfg-grub-menulst2cfg.obj: util/grub-menulst2cfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT util/grub_menulst2cfg-grub-menulst2cfg.obj -MD -MP -MF util/$(DEPDIR)/grub_menulst2cfg-grub-menulst2cfg.Tpo -c -o util/grub_menulst2cfg-grub-menulst2cfg.obj `if test -f 'util/grub-menulst2cfg.c'; then $(CYGPATH_W) 'util/grub-menulst2cfg.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-menulst2cfg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_menulst2cfg-grub-menulst2cfg.Tpo util/$(DEPDIR)/grub_menulst2cfg-grub-menulst2cfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-menulst2cfg.c' object='util/grub_menulst2cfg-grub-menulst2cfg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o util/grub_menulst2cfg-grub-menulst2cfg.obj `if test -f 'util/grub-menulst2cfg.c'; then $(CYGPATH_W) 'util/grub-menulst2cfg.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-menulst2cfg.c'; fi` + +grub-core/lib/grub_menulst2cfg-legacy_parse.o: grub-core/lib/legacy_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_menulst2cfg-legacy_parse.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_menulst2cfg-legacy_parse.Tpo -c -o grub-core/lib/grub_menulst2cfg-legacy_parse.o `test -f 'grub-core/lib/legacy_parse.c' || echo '$(srcdir)/'`grub-core/lib/legacy_parse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_menulst2cfg-legacy_parse.Tpo grub-core/lib/$(DEPDIR)/grub_menulst2cfg-legacy_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/legacy_parse.c' object='grub-core/lib/grub_menulst2cfg-legacy_parse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_menulst2cfg-legacy_parse.o `test -f 'grub-core/lib/legacy_parse.c' || echo '$(srcdir)/'`grub-core/lib/legacy_parse.c + +grub-core/lib/grub_menulst2cfg-legacy_parse.obj: grub-core/lib/legacy_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_menulst2cfg-legacy_parse.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_menulst2cfg-legacy_parse.Tpo -c -o grub-core/lib/grub_menulst2cfg-legacy_parse.obj `if test -f 'grub-core/lib/legacy_parse.c'; then $(CYGPATH_W) 'grub-core/lib/legacy_parse.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/legacy_parse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_menulst2cfg-legacy_parse.Tpo grub-core/lib/$(DEPDIR)/grub_menulst2cfg-legacy_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/legacy_parse.c' object='grub-core/lib/grub_menulst2cfg-legacy_parse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_menulst2cfg-legacy_parse.obj `if test -f 'grub-core/lib/legacy_parse.c'; then $(CYGPATH_W) 'grub-core/lib/legacy_parse.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/legacy_parse.c'; fi` + +grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.o: grub-core/lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.o -MD -MP -MF grub-core/lib/i386/pc/$(DEPDIR)/grub_menulst2cfg-vesa_modes_table.Tpo -c -o grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.o `test -f 'grub-core/lib/i386/pc/vesa_modes_table.c' || echo '$(srcdir)/'`grub-core/lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/i386/pc/$(DEPDIR)/grub_menulst2cfg-vesa_modes_table.Tpo grub-core/lib/i386/pc/$(DEPDIR)/grub_menulst2cfg-vesa_modes_table.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/i386/pc/vesa_modes_table.c' object='grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.o `test -f 'grub-core/lib/i386/pc/vesa_modes_table.c' || echo '$(srcdir)/'`grub-core/lib/i386/pc/vesa_modes_table.c + +grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.obj: grub-core/lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.obj -MD -MP -MF grub-core/lib/i386/pc/$(DEPDIR)/grub_menulst2cfg-vesa_modes_table.Tpo -c -o grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.obj `if test -f 'grub-core/lib/i386/pc/vesa_modes_table.c'; then $(CYGPATH_W) 'grub-core/lib/i386/pc/vesa_modes_table.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/i386/pc/vesa_modes_table.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/i386/pc/$(DEPDIR)/grub_menulst2cfg-vesa_modes_table.Tpo grub-core/lib/i386/pc/$(DEPDIR)/grub_menulst2cfg-vesa_modes_table.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/i386/pc/vesa_modes_table.c' object='grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/i386/pc/grub_menulst2cfg-vesa_modes_table.obj `if test -f 'grub-core/lib/i386/pc/vesa_modes_table.c'; then $(CYGPATH_W) 'grub-core/lib/i386/pc/vesa_modes_table.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/i386/pc/vesa_modes_table.c'; fi` + +grub-core/osdep/grub_menulst2cfg-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_menulst2cfg-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_menulst2cfg-init.Tpo -c -o grub-core/osdep/grub_menulst2cfg-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_menulst2cfg-init.Tpo grub-core/osdep/$(DEPDIR)/grub_menulst2cfg-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_menulst2cfg-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_menulst2cfg-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_menulst2cfg-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_menulst2cfg-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_menulst2cfg-init.Tpo -c -o grub-core/osdep/grub_menulst2cfg-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_menulst2cfg-init.Tpo grub-core/osdep/$(DEPDIR)/grub_menulst2cfg-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_menulst2cfg-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_menulst2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_menulst2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_menulst2cfg-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mkfont-grub-mkfont.o: util/grub-mkfont.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -MT util/grub_mkfont-grub-mkfont.o -MD -MP -MF util/$(DEPDIR)/grub_mkfont-grub-mkfont.Tpo -c -o util/grub_mkfont-grub-mkfont.o `test -f 'util/grub-mkfont.c' || echo '$(srcdir)/'`util/grub-mkfont.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkfont-grub-mkfont.Tpo util/$(DEPDIR)/grub_mkfont-grub-mkfont.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkfont.c' object='util/grub_mkfont-grub-mkfont.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -c -o util/grub_mkfont-grub-mkfont.o `test -f 'util/grub-mkfont.c' || echo '$(srcdir)/'`util/grub-mkfont.c + +util/grub_mkfont-grub-mkfont.obj: util/grub-mkfont.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -MT util/grub_mkfont-grub-mkfont.obj -MD -MP -MF util/$(DEPDIR)/grub_mkfont-grub-mkfont.Tpo -c -o util/grub_mkfont-grub-mkfont.obj `if test -f 'util/grub-mkfont.c'; then $(CYGPATH_W) 'util/grub-mkfont.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkfont.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkfont-grub-mkfont.Tpo util/$(DEPDIR)/grub_mkfont-grub-mkfont.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkfont.c' object='util/grub_mkfont-grub-mkfont.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -c -o util/grub_mkfont-grub-mkfont.obj `if test -f 'util/grub-mkfont.c'; then $(CYGPATH_W) 'util/grub-mkfont.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkfont.c'; fi` + +grub-core/kern/emu/grub_mkfont-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkfont-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkfont-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkfont-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkfont-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkfont-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkfont-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkfont-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mkfont-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkfont-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkfont-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkfont-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkfont-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkfont-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkfont-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkfont-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mkfont-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkfont-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkfont-init.Tpo -c -o grub-core/osdep/grub_mkfont-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkfont-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkfont-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkfont-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkfont-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mkfont-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkfont-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkfont-init.Tpo -c -o grub-core/osdep/grub_mkfont-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkfont-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkfont-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkfont-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkfont_CPPFLAGS) $(CPPFLAGS) $(grub_mkfont_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkfont-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mkimage-grub-mkimage.o: util/grub-mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-grub-mkimage.o -MD -MP -MF util/$(DEPDIR)/grub_mkimage-grub-mkimage.Tpo -c -o util/grub_mkimage-grub-mkimage.o `test -f 'util/grub-mkimage.c' || echo '$(srcdir)/'`util/grub-mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-grub-mkimage.Tpo util/$(DEPDIR)/grub_mkimage-grub-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage.c' object='util/grub_mkimage-grub-mkimage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-grub-mkimage.o `test -f 'util/grub-mkimage.c' || echo '$(srcdir)/'`util/grub-mkimage.c + +util/grub_mkimage-grub-mkimage.obj: util/grub-mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-grub-mkimage.obj -MD -MP -MF util/$(DEPDIR)/grub_mkimage-grub-mkimage.Tpo -c -o util/grub_mkimage-grub-mkimage.obj `if test -f 'util/grub-mkimage.c'; then $(CYGPATH_W) 'util/grub-mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-grub-mkimage.Tpo util/$(DEPDIR)/grub_mkimage-grub-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage.c' object='util/grub_mkimage-grub-mkimage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-grub-mkimage.obj `if test -f 'util/grub-mkimage.c'; then $(CYGPATH_W) 'util/grub-mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage.c'; fi` + +util/grub_mkimage-mkimage.o: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-mkimage.o -MD -MP -MF util/$(DEPDIR)/grub_mkimage-mkimage.Tpo -c -o util/grub_mkimage-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-mkimage.Tpo util/$(DEPDIR)/grub_mkimage-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mkimage-mkimage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c + +util/grub_mkimage-mkimage.obj: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-mkimage.obj -MD -MP -MF util/$(DEPDIR)/grub_mkimage-mkimage.Tpo -c -o util/grub_mkimage-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-mkimage.Tpo util/$(DEPDIR)/grub_mkimage-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mkimage-mkimage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` + +util/grub_mkimage-grub-mkimage32.o: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-grub-mkimage32.o -MD -MP -MF util/$(DEPDIR)/grub_mkimage-grub-mkimage32.Tpo -c -o util/grub_mkimage-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mkimage-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mkimage-grub-mkimage32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c + +util/grub_mkimage-grub-mkimage32.obj: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-grub-mkimage32.obj -MD -MP -MF util/$(DEPDIR)/grub_mkimage-grub-mkimage32.Tpo -c -o util/grub_mkimage-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mkimage-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mkimage-grub-mkimage32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` + +util/grub_mkimage-grub-mkimage64.o: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-grub-mkimage64.o -MD -MP -MF util/$(DEPDIR)/grub_mkimage-grub-mkimage64.Tpo -c -o util/grub_mkimage-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mkimage-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mkimage-grub-mkimage64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c + +util/grub_mkimage-grub-mkimage64.obj: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-grub-mkimage64.obj -MD -MP -MF util/$(DEPDIR)/grub_mkimage-grub-mkimage64.Tpo -c -o util/grub_mkimage-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mkimage-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mkimage-grub-mkimage64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` + +util/grub_mkimage-resolve.o: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-resolve.o -MD -MP -MF util/$(DEPDIR)/grub_mkimage-resolve.Tpo -c -o util/grub_mkimage-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-resolve.Tpo util/$(DEPDIR)/grub_mkimage-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mkimage-resolve.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c + +util/grub_mkimage-resolve.obj: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-resolve.obj -MD -MP -MF util/$(DEPDIR)/grub_mkimage-resolve.Tpo -c -o util/grub_mkimage-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-resolve.Tpo util/$(DEPDIR)/grub_mkimage-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mkimage-resolve.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` + +grub-core/kern/emu/grub_mkimage-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkimage-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkimage-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkimage-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkimage-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkimage-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkimage-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkimage-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mkimage-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkimage-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkimage-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkimage-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkimage-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkimage-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkimage-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkimage-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mkimage-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkimage-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkimage-init.Tpo -c -o grub-core/osdep/grub_mkimage-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkimage-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkimage-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkimage-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkimage-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mkimage-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkimage-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkimage-init.Tpo -c -o grub-core/osdep/grub_mkimage-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkimage-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkimage-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkimage-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkimage-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +grub-core/osdep/grub_mkimage-config.o: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkimage-config.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkimage-config.Tpo -c -o grub-core/osdep/grub_mkimage-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkimage-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mkimage-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mkimage-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkimage-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c + +grub-core/osdep/grub_mkimage-config.obj: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkimage-config.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkimage-config.Tpo -c -o grub-core/osdep/grub_mkimage-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkimage-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mkimage-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mkimage-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkimage-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` + +util/grub_mkimage-config.o: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-config.o -MD -MP -MF util/$(DEPDIR)/grub_mkimage-config.Tpo -c -o util/grub_mkimage-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-config.Tpo util/$(DEPDIR)/grub_mkimage-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mkimage-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c + +util/grub_mkimage-config.obj: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -MT util/grub_mkimage-config.obj -MD -MP -MF util/$(DEPDIR)/grub_mkimage-config.Tpo -c -o util/grub_mkimage-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkimage-config.Tpo util/$(DEPDIR)/grub_mkimage-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mkimage-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkimage_CPPFLAGS) $(CPPFLAGS) $(grub_mkimage_CFLAGS) $(CFLAGS) -c -o util/grub_mkimage-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` + +util/grub_mklayout-grub-mklayout.o: util/grub-mklayout.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -MT util/grub_mklayout-grub-mklayout.o -MD -MP -MF util/$(DEPDIR)/grub_mklayout-grub-mklayout.Tpo -c -o util/grub_mklayout-grub-mklayout.o `test -f 'util/grub-mklayout.c' || echo '$(srcdir)/'`util/grub-mklayout.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mklayout-grub-mklayout.Tpo util/$(DEPDIR)/grub_mklayout-grub-mklayout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mklayout.c' object='util/grub_mklayout-grub-mklayout.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -c -o util/grub_mklayout-grub-mklayout.o `test -f 'util/grub-mklayout.c' || echo '$(srcdir)/'`util/grub-mklayout.c + +util/grub_mklayout-grub-mklayout.obj: util/grub-mklayout.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -MT util/grub_mklayout-grub-mklayout.obj -MD -MP -MF util/$(DEPDIR)/grub_mklayout-grub-mklayout.Tpo -c -o util/grub_mklayout-grub-mklayout.obj `if test -f 'util/grub-mklayout.c'; then $(CYGPATH_W) 'util/grub-mklayout.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mklayout.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mklayout-grub-mklayout.Tpo util/$(DEPDIR)/grub_mklayout-grub-mklayout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mklayout.c' object='util/grub_mklayout-grub-mklayout.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -c -o util/grub_mklayout-grub-mklayout.obj `if test -f 'util/grub-mklayout.c'; then $(CYGPATH_W) 'util/grub-mklayout.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mklayout.c'; fi` + +grub-core/kern/emu/grub_mklayout-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mklayout-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mklayout-argp_common.Tpo -c -o grub-core/kern/emu/grub_mklayout-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mklayout-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mklayout-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mklayout-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mklayout-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mklayout-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mklayout-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mklayout-argp_common.Tpo -c -o grub-core/kern/emu/grub_mklayout-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mklayout-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mklayout-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mklayout-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mklayout-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mklayout-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mklayout-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mklayout-init.Tpo -c -o grub-core/osdep/grub_mklayout-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mklayout-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mklayout-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mklayout-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mklayout-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mklayout-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mklayout-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mklayout-init.Tpo -c -o grub-core/osdep/grub_mklayout-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mklayout-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mklayout-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mklayout-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mklayout_CPPFLAGS) $(CPPFLAGS) $(grub_mklayout_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mklayout-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mknetdir-grub-mknetdir.o: util/grub-mknetdir.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-mknetdir.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-mknetdir.Tpo -c -o util/grub_mknetdir-grub-mknetdir.o `test -f 'util/grub-mknetdir.c' || echo '$(srcdir)/'`util/grub-mknetdir.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-mknetdir.Tpo util/$(DEPDIR)/grub_mknetdir-grub-mknetdir.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mknetdir.c' object='util/grub_mknetdir-grub-mknetdir.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-mknetdir.o `test -f 'util/grub-mknetdir.c' || echo '$(srcdir)/'`util/grub-mknetdir.c + +util/grub_mknetdir-grub-mknetdir.obj: util/grub-mknetdir.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-mknetdir.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-mknetdir.Tpo -c -o util/grub_mknetdir-grub-mknetdir.obj `if test -f 'util/grub-mknetdir.c'; then $(CYGPATH_W) 'util/grub-mknetdir.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mknetdir.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-mknetdir.Tpo util/$(DEPDIR)/grub_mknetdir-grub-mknetdir.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mknetdir.c' object='util/grub_mknetdir-grub-mknetdir.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-mknetdir.obj `if test -f 'util/grub-mknetdir.c'; then $(CYGPATH_W) 'util/grub-mknetdir.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mknetdir.c'; fi` + +util/grub_mknetdir-mkimage.o: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-mkimage.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-mkimage.Tpo -c -o util/grub_mknetdir-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-mkimage.Tpo util/$(DEPDIR)/grub_mknetdir-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mknetdir-mkimage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c + +util/grub_mknetdir-mkimage.obj: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-mkimage.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-mkimage.Tpo -c -o util/grub_mknetdir-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-mkimage.Tpo util/$(DEPDIR)/grub_mknetdir-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mknetdir-mkimage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` + +util/grub_mknetdir-grub-mkimage32.o: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-mkimage32.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-mkimage32.Tpo -c -o util/grub_mknetdir-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mknetdir-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mknetdir-grub-mkimage32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c + +util/grub_mknetdir-grub-mkimage32.obj: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-mkimage32.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-mkimage32.Tpo -c -o util/grub_mknetdir-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mknetdir-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mknetdir-grub-mkimage32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` + +util/grub_mknetdir-grub-mkimage64.o: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-mkimage64.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-mkimage64.Tpo -c -o util/grub_mknetdir-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mknetdir-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mknetdir-grub-mkimage64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c + +util/grub_mknetdir-grub-mkimage64.obj: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-mkimage64.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-mkimage64.Tpo -c -o util/grub_mknetdir-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mknetdir-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mknetdir-grub-mkimage64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` + +util/grub_mknetdir-grub-install-common.o: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-install-common.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-install-common.Tpo -c -o util/grub_mknetdir-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-install-common.Tpo util/$(DEPDIR)/grub_mknetdir-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_mknetdir-grub-install-common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c + +util/grub_mknetdir-grub-install-common.obj: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-grub-install-common.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-grub-install-common.Tpo -c -o util/grub_mknetdir-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-grub-install-common.Tpo util/$(DEPDIR)/grub_mknetdir-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_mknetdir-grub-install-common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` + +util/grub_mknetdir-setup_bios.o: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-setup_bios.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-setup_bios.Tpo -c -o util/grub_mknetdir-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-setup_bios.Tpo util/$(DEPDIR)/grub_mknetdir-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_mknetdir-setup_bios.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c + +util/grub_mknetdir-setup_bios.obj: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-setup_bios.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-setup_bios.Tpo -c -o util/grub_mknetdir-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-setup_bios.Tpo util/$(DEPDIR)/grub_mknetdir-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_mknetdir-setup_bios.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` + +util/grub_mknetdir-setup_sparc.o: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-setup_sparc.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-setup_sparc.Tpo -c -o util/grub_mknetdir-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-setup_sparc.Tpo util/$(DEPDIR)/grub_mknetdir-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_mknetdir-setup_sparc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c + +util/grub_mknetdir-setup_sparc.obj: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-setup_sparc.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-setup_sparc.Tpo -c -o util/grub_mknetdir-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-setup_sparc.Tpo util/$(DEPDIR)/grub_mknetdir-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_mknetdir-setup_sparc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` + +grub-core/lib/grub_mknetdir-reed_solomon.o: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_mknetdir-reed_solomon.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_mknetdir-reed_solomon.Tpo -c -o grub-core/lib/grub_mknetdir-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_mknetdir-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_mknetdir-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_mknetdir-reed_solomon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_mknetdir-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c + +grub-core/lib/grub_mknetdir-reed_solomon.obj: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_mknetdir-reed_solomon.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_mknetdir-reed_solomon.Tpo -c -o grub-core/lib/grub_mknetdir-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_mknetdir-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_mknetdir-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_mknetdir-reed_solomon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_mknetdir-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` + +grub-core/osdep/grub_mknetdir-random.o: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-random.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-random.Tpo -c -o grub-core/osdep/grub_mknetdir-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mknetdir-random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c + +grub-core/osdep/grub_mknetdir-random.obj: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-random.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-random.Tpo -c -o grub-core/osdep/grub_mknetdir-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mknetdir-random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` + +grub-core/osdep/grub_mknetdir-ofpath.o: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-ofpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-ofpath.Tpo -c -o grub-core/osdep/grub_mknetdir-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_mknetdir-ofpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c + +grub-core/osdep/grub_mknetdir-ofpath.obj: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-ofpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-ofpath.Tpo -c -o grub-core/osdep/grub_mknetdir-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_mknetdir-ofpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` + +grub-core/osdep/grub_mknetdir-platform.o: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-platform.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform.Tpo -c -o grub-core/osdep/grub_mknetdir-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_mknetdir-platform.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c + +grub-core/osdep/grub_mknetdir-platform.obj: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-platform.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform.Tpo -c -o grub-core/osdep/grub_mknetdir-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_mknetdir-platform.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` + +grub-core/osdep/grub_mknetdir-platform_unix.o: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-platform_unix.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform_unix.Tpo -c -o grub-core/osdep/grub_mknetdir-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_mknetdir-platform_unix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c + +grub-core/osdep/grub_mknetdir-platform_unix.obj: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-platform_unix.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform_unix.Tpo -c -o grub-core/osdep/grub_mknetdir-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_mknetdir-platform_unix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` + +grub-core/osdep/grub_mknetdir-compress.o: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-compress.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-compress.Tpo -c -o grub-core/osdep/grub_mknetdir-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_mknetdir-compress.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c + +grub-core/osdep/grub_mknetdir-compress.obj: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-compress.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-compress.Tpo -c -o grub-core/osdep/grub_mknetdir-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_mknetdir-compress.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` + +util/grub_mknetdir-editenv.o: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-editenv.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-editenv.Tpo -c -o util/grub_mknetdir-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-editenv.Tpo util/$(DEPDIR)/grub_mknetdir-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_mknetdir-editenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c + +util/grub_mknetdir-editenv.obj: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-editenv.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-editenv.Tpo -c -o util/grub_mknetdir-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-editenv.Tpo util/$(DEPDIR)/grub_mknetdir-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_mknetdir-editenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` + +grub-core/osdep/grub_mknetdir-blocklist.o: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-blocklist.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-blocklist.Tpo -c -o grub-core/osdep/grub_mknetdir-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_mknetdir-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c + +grub-core/osdep/grub_mknetdir-blocklist.obj: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-blocklist.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-blocklist.Tpo -c -o grub-core/osdep/grub_mknetdir-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_mknetdir-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` + +grub-core/osdep/grub_mknetdir-config.o: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-config.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-config.Tpo -c -o grub-core/osdep/grub_mknetdir-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mknetdir-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c + +grub-core/osdep/grub_mknetdir-config.obj: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-config.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-config.Tpo -c -o grub-core/osdep/grub_mknetdir-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mknetdir-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` + +util/grub_mknetdir-config.o: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-config.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-config.Tpo -c -o util/grub_mknetdir-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-config.Tpo util/$(DEPDIR)/grub_mknetdir-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mknetdir-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c + +util/grub_mknetdir-config.obj: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-config.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-config.Tpo -c -o util/grub_mknetdir-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-config.Tpo util/$(DEPDIR)/grub_mknetdir-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mknetdir-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` + +util/grub_mknetdir-resolve.o: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-resolve.o -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-resolve.Tpo -c -o util/grub_mknetdir-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-resolve.Tpo util/$(DEPDIR)/grub_mknetdir-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mknetdir-resolve.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c + +util/grub_mknetdir-resolve.obj: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT util/grub_mknetdir-resolve.obj -MD -MP -MF util/$(DEPDIR)/grub_mknetdir-resolve.Tpo -c -o util/grub_mknetdir-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mknetdir-resolve.Tpo util/$(DEPDIR)/grub_mknetdir-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mknetdir-resolve.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o util/grub_mknetdir-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` + +grub-core/kern/emu/grub_mknetdir-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mknetdir-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mknetdir-argp_common.Tpo -c -o grub-core/kern/emu/grub_mknetdir-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mknetdir-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mknetdir-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mknetdir-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mknetdir-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mknetdir-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mknetdir-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mknetdir-argp_common.Tpo -c -o grub-core/kern/emu/grub_mknetdir-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mknetdir-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mknetdir-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mknetdir-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mknetdir-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mknetdir-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-init.Tpo -c -o grub-core/osdep/grub_mknetdir-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mknetdir-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mknetdir-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mknetdir-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mknetdir-init.Tpo -c -o grub-core/osdep/grub_mknetdir-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mknetdir-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mknetdir-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mknetdir-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mknetdir_CPPFLAGS) $(CPPFLAGS) $(grub_mknetdir_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mknetdir-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.o: util/grub-mkpasswd-pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.o -MD -MP -MF util/$(DEPDIR)/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.Tpo -c -o util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.o `test -f 'util/grub-mkpasswd-pbkdf2.c' || echo '$(srcdir)/'`util/grub-mkpasswd-pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.Tpo util/$(DEPDIR)/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkpasswd-pbkdf2.c' object='util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.o `test -f 'util/grub-mkpasswd-pbkdf2.c' || echo '$(srcdir)/'`util/grub-mkpasswd-pbkdf2.c + +util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.obj: util/grub-mkpasswd-pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.obj -MD -MP -MF util/$(DEPDIR)/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.Tpo -c -o util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.obj `if test -f 'util/grub-mkpasswd-pbkdf2.c'; then $(CYGPATH_W) 'util/grub-mkpasswd-pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkpasswd-pbkdf2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.Tpo util/$(DEPDIR)/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkpasswd-pbkdf2.c' object='util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o util/grub_mkpasswd_pbkdf2-grub-mkpasswd-pbkdf2.obj `if test -f 'util/grub-mkpasswd-pbkdf2.c'; then $(CYGPATH_W) 'util/grub-mkpasswd-pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkpasswd-pbkdf2.c'; fi` + +grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkpasswd_pbkdf2-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkpasswd_pbkdf2-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkpasswd_pbkdf2-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkpasswd_pbkdf2-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkpasswd_pbkdf2-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkpasswd_pbkdf2-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkpasswd_pbkdf2-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mkpasswd_pbkdf2-random.o: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkpasswd_pbkdf2-random.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-random.Tpo -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mkpasswd_pbkdf2-random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c + +grub-core/osdep/grub_mkpasswd_pbkdf2-random.obj: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkpasswd_pbkdf2-random.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-random.Tpo -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mkpasswd_pbkdf2-random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` + +grub-core/osdep/grub_mkpasswd_pbkdf2-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkpasswd_pbkdf2-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-init.Tpo -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkpasswd_pbkdf2-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mkpasswd_pbkdf2-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkpasswd_pbkdf2-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-init.Tpo -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkpasswd_pbkdf2-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkpasswd_pbkdf2-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkpasswd_pbkdf2_CPPFLAGS) $(CPPFLAGS) $(grub_mkpasswd_pbkdf2_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkpasswd_pbkdf2-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mkrelpath-grub-mkrelpath.o: util/grub-mkrelpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -MT util/grub_mkrelpath-grub-mkrelpath.o -MD -MP -MF util/$(DEPDIR)/grub_mkrelpath-grub-mkrelpath.Tpo -c -o util/grub_mkrelpath-grub-mkrelpath.o `test -f 'util/grub-mkrelpath.c' || echo '$(srcdir)/'`util/grub-mkrelpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrelpath-grub-mkrelpath.Tpo util/$(DEPDIR)/grub_mkrelpath-grub-mkrelpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkrelpath.c' object='util/grub_mkrelpath-grub-mkrelpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -c -o util/grub_mkrelpath-grub-mkrelpath.o `test -f 'util/grub-mkrelpath.c' || echo '$(srcdir)/'`util/grub-mkrelpath.c + +util/grub_mkrelpath-grub-mkrelpath.obj: util/grub-mkrelpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -MT util/grub_mkrelpath-grub-mkrelpath.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrelpath-grub-mkrelpath.Tpo -c -o util/grub_mkrelpath-grub-mkrelpath.obj `if test -f 'util/grub-mkrelpath.c'; then $(CYGPATH_W) 'util/grub-mkrelpath.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkrelpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrelpath-grub-mkrelpath.Tpo util/$(DEPDIR)/grub_mkrelpath-grub-mkrelpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkrelpath.c' object='util/grub_mkrelpath-grub-mkrelpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -c -o util/grub_mkrelpath-grub-mkrelpath.obj `if test -f 'util/grub-mkrelpath.c'; then $(CYGPATH_W) 'util/grub-mkrelpath.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkrelpath.c'; fi` + +grub-core/kern/emu/grub_mkrelpath-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkrelpath-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkrelpath-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkrelpath-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkrelpath-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkrelpath-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkrelpath-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkrelpath-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mkrelpath-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkrelpath-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkrelpath-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkrelpath-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkrelpath-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkrelpath-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkrelpath-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkrelpath-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mkrelpath-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrelpath-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrelpath-init.Tpo -c -o grub-core/osdep/grub_mkrelpath-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrelpath-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrelpath-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkrelpath-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrelpath-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mkrelpath-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrelpath-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrelpath-init.Tpo -c -o grub-core/osdep/grub_mkrelpath-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrelpath-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrelpath-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkrelpath-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrelpath_CPPFLAGS) $(CPPFLAGS) $(grub_mkrelpath_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrelpath-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mkrescue-grub-mkrescue.o: util/grub-mkrescue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-mkrescue.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-mkrescue.Tpo -c -o util/grub_mkrescue-grub-mkrescue.o `test -f 'util/grub-mkrescue.c' || echo '$(srcdir)/'`util/grub-mkrescue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-mkrescue.Tpo util/$(DEPDIR)/grub_mkrescue-grub-mkrescue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkrescue.c' object='util/grub_mkrescue-grub-mkrescue.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-mkrescue.o `test -f 'util/grub-mkrescue.c' || echo '$(srcdir)/'`util/grub-mkrescue.c + +util/grub_mkrescue-grub-mkrescue.obj: util/grub-mkrescue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-mkrescue.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-mkrescue.Tpo -c -o util/grub_mkrescue-grub-mkrescue.obj `if test -f 'util/grub-mkrescue.c'; then $(CYGPATH_W) 'util/grub-mkrescue.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkrescue.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-mkrescue.Tpo util/$(DEPDIR)/grub_mkrescue-grub-mkrescue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkrescue.c' object='util/grub_mkrescue-grub-mkrescue.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-mkrescue.obj `if test -f 'util/grub-mkrescue.c'; then $(CYGPATH_W) 'util/grub-mkrescue.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkrescue.c'; fi` + +util/grub_mkrescue-render-label.o: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-render-label.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-render-label.Tpo -c -o util/grub_mkrescue-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-render-label.Tpo util/$(DEPDIR)/grub_mkrescue-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_mkrescue-render-label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c + +util/grub_mkrescue-render-label.obj: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-render-label.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-render-label.Tpo -c -o util/grub_mkrescue-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-render-label.Tpo util/$(DEPDIR)/grub_mkrescue-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_mkrescue-render-label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` + +util/grub_mkrescue-glue-efi.o: util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-glue-efi.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-glue-efi.Tpo -c -o util/grub_mkrescue-glue-efi.o `test -f 'util/glue-efi.c' || echo '$(srcdir)/'`util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-glue-efi.Tpo util/$(DEPDIR)/grub_mkrescue-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/glue-efi.c' object='util/grub_mkrescue-glue-efi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-glue-efi.o `test -f 'util/glue-efi.c' || echo '$(srcdir)/'`util/glue-efi.c + +util/grub_mkrescue-glue-efi.obj: util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-glue-efi.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-glue-efi.Tpo -c -o util/grub_mkrescue-glue-efi.obj `if test -f 'util/glue-efi.c'; then $(CYGPATH_W) 'util/glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/glue-efi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-glue-efi.Tpo util/$(DEPDIR)/grub_mkrescue-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/glue-efi.c' object='util/grub_mkrescue-glue-efi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-glue-efi.obj `if test -f 'util/glue-efi.c'; then $(CYGPATH_W) 'util/glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/glue-efi.c'; fi` + +util/grub_mkrescue-mkimage.o: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-mkimage.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-mkimage.Tpo -c -o util/grub_mkrescue-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-mkimage.Tpo util/$(DEPDIR)/grub_mkrescue-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mkrescue-mkimage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c + +util/grub_mkrescue-mkimage.obj: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-mkimage.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-mkimage.Tpo -c -o util/grub_mkrescue-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-mkimage.Tpo util/$(DEPDIR)/grub_mkrescue-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mkrescue-mkimage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` + +util/grub_mkrescue-grub-mkimage32.o: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-mkimage32.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-mkimage32.Tpo -c -o util/grub_mkrescue-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mkrescue-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mkrescue-grub-mkimage32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c + +util/grub_mkrescue-grub-mkimage32.obj: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-mkimage32.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-mkimage32.Tpo -c -o util/grub_mkrescue-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mkrescue-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mkrescue-grub-mkimage32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` + +util/grub_mkrescue-grub-mkimage64.o: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-mkimage64.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-mkimage64.Tpo -c -o util/grub_mkrescue-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mkrescue-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mkrescue-grub-mkimage64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c + +util/grub_mkrescue-grub-mkimage64.obj: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-mkimage64.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-mkimage64.Tpo -c -o util/grub_mkrescue-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mkrescue-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mkrescue-grub-mkimage64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` + +util/grub_mkrescue-grub-install-common.o: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-install-common.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-install-common.Tpo -c -o util/grub_mkrescue-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-install-common.Tpo util/$(DEPDIR)/grub_mkrescue-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_mkrescue-grub-install-common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c + +util/grub_mkrescue-grub-install-common.obj: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-grub-install-common.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-grub-install-common.Tpo -c -o util/grub_mkrescue-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-grub-install-common.Tpo util/$(DEPDIR)/grub_mkrescue-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_mkrescue-grub-install-common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` + +util/grub_mkrescue-setup_bios.o: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-setup_bios.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-setup_bios.Tpo -c -o util/grub_mkrescue-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-setup_bios.Tpo util/$(DEPDIR)/grub_mkrescue-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_mkrescue-setup_bios.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c + +util/grub_mkrescue-setup_bios.obj: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-setup_bios.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-setup_bios.Tpo -c -o util/grub_mkrescue-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-setup_bios.Tpo util/$(DEPDIR)/grub_mkrescue-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_mkrescue-setup_bios.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` + +util/grub_mkrescue-setup_sparc.o: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-setup_sparc.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-setup_sparc.Tpo -c -o util/grub_mkrescue-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-setup_sparc.Tpo util/$(DEPDIR)/grub_mkrescue-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_mkrescue-setup_sparc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c + +util/grub_mkrescue-setup_sparc.obj: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-setup_sparc.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-setup_sparc.Tpo -c -o util/grub_mkrescue-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-setup_sparc.Tpo util/$(DEPDIR)/grub_mkrescue-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_mkrescue-setup_sparc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` + +grub-core/lib/grub_mkrescue-reed_solomon.o: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_mkrescue-reed_solomon.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_mkrescue-reed_solomon.Tpo -c -o grub-core/lib/grub_mkrescue-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_mkrescue-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_mkrescue-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_mkrescue-reed_solomon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_mkrescue-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c + +grub-core/lib/grub_mkrescue-reed_solomon.obj: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_mkrescue-reed_solomon.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_mkrescue-reed_solomon.Tpo -c -o grub-core/lib/grub_mkrescue-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_mkrescue-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_mkrescue-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_mkrescue-reed_solomon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_mkrescue-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` + +grub-core/osdep/grub_mkrescue-random.o: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-random.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-random.Tpo -c -o grub-core/osdep/grub_mkrescue-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mkrescue-random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c + +grub-core/osdep/grub_mkrescue-random.obj: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-random.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-random.Tpo -c -o grub-core/osdep/grub_mkrescue-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mkrescue-random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` + +grub-core/osdep/grub_mkrescue-ofpath.o: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-ofpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-ofpath.Tpo -c -o grub-core/osdep/grub_mkrescue-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_mkrescue-ofpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c + +grub-core/osdep/grub_mkrescue-ofpath.obj: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-ofpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-ofpath.Tpo -c -o grub-core/osdep/grub_mkrescue-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_mkrescue-ofpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` + +grub-core/osdep/grub_mkrescue-platform.o: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-platform.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform.Tpo -c -o grub-core/osdep/grub_mkrescue-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_mkrescue-platform.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c + +grub-core/osdep/grub_mkrescue-platform.obj: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-platform.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform.Tpo -c -o grub-core/osdep/grub_mkrescue-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_mkrescue-platform.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` + +grub-core/osdep/grub_mkrescue-platform_unix.o: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-platform_unix.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform_unix.Tpo -c -o grub-core/osdep/grub_mkrescue-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_mkrescue-platform_unix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c + +grub-core/osdep/grub_mkrescue-platform_unix.obj: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-platform_unix.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform_unix.Tpo -c -o grub-core/osdep/grub_mkrescue-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_mkrescue-platform_unix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` + +grub-core/osdep/grub_mkrescue-compress.o: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-compress.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-compress.Tpo -c -o grub-core/osdep/grub_mkrescue-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_mkrescue-compress.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c + +grub-core/osdep/grub_mkrescue-compress.obj: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-compress.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-compress.Tpo -c -o grub-core/osdep/grub_mkrescue-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_mkrescue-compress.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` + +util/grub_mkrescue-editenv.o: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-editenv.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-editenv.Tpo -c -o util/grub_mkrescue-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-editenv.Tpo util/$(DEPDIR)/grub_mkrescue-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_mkrescue-editenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c + +util/grub_mkrescue-editenv.obj: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-editenv.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-editenv.Tpo -c -o util/grub_mkrescue-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-editenv.Tpo util/$(DEPDIR)/grub_mkrescue-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_mkrescue-editenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` + +grub-core/osdep/grub_mkrescue-blocklist.o: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-blocklist.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-blocklist.Tpo -c -o grub-core/osdep/grub_mkrescue-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_mkrescue-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c + +grub-core/osdep/grub_mkrescue-blocklist.obj: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-blocklist.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-blocklist.Tpo -c -o grub-core/osdep/grub_mkrescue-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_mkrescue-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` + +grub-core/osdep/grub_mkrescue-config.o: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-config.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-config.Tpo -c -o grub-core/osdep/grub_mkrescue-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mkrescue-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c + +grub-core/osdep/grub_mkrescue-config.obj: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-config.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-config.Tpo -c -o grub-core/osdep/grub_mkrescue-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mkrescue-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` + +util/grub_mkrescue-config.o: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-config.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-config.Tpo -c -o util/grub_mkrescue-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-config.Tpo util/$(DEPDIR)/grub_mkrescue-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mkrescue-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c + +util/grub_mkrescue-config.obj: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-config.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-config.Tpo -c -o util/grub_mkrescue-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-config.Tpo util/$(DEPDIR)/grub_mkrescue-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mkrescue-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` + +grub-core/kern/emu/grub_mkrescue-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkrescue-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-hostfs.Tpo -c -o grub-core/kern/emu/grub_mkrescue-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_mkrescue-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkrescue-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_mkrescue-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkrescue-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-hostfs.Tpo -c -o grub-core/kern/emu/grub_mkrescue-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_mkrescue-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkrescue-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_mkrescue-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_mkrescue-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_mkrescue-host.Tpo -c -o grub-core/disk/grub_mkrescue-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_mkrescue-host.Tpo grub-core/disk/$(DEPDIR)/grub_mkrescue-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_mkrescue-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_mkrescue-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_mkrescue-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_mkrescue-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_mkrescue-host.Tpo -c -o grub-core/disk/grub_mkrescue-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_mkrescue-host.Tpo grub-core/disk/$(DEPDIR)/grub_mkrescue-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_mkrescue-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_mkrescue-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +util/grub_mkrescue-resolve.o: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-resolve.o -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-resolve.Tpo -c -o util/grub_mkrescue-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-resolve.Tpo util/$(DEPDIR)/grub_mkrescue-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mkrescue-resolve.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c + +util/grub_mkrescue-resolve.obj: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT util/grub_mkrescue-resolve.obj -MD -MP -MF util/$(DEPDIR)/grub_mkrescue-resolve.Tpo -c -o util/grub_mkrescue-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkrescue-resolve.Tpo util/$(DEPDIR)/grub_mkrescue-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mkrescue-resolve.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o util/grub_mkrescue-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` + +grub-core/kern/emu/grub_mkrescue-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkrescue-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkrescue-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkrescue-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkrescue-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mkrescue-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkrescue-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkrescue-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkrescue-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkrescue-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkrescue-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mkrescue-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-init.Tpo -c -o grub-core/osdep/grub_mkrescue-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkrescue-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mkrescue-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkrescue-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkrescue-init.Tpo -c -o grub-core/osdep/grub_mkrescue-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkrescue-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkrescue-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkrescue-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkrescue_CPPFLAGS) $(CPPFLAGS) $(grub_mkrescue_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkrescue-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mkstandalone-grub-mkstandalone.o: util/grub-mkstandalone.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-mkstandalone.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-mkstandalone.Tpo -c -o util/grub_mkstandalone-grub-mkstandalone.o `test -f 'util/grub-mkstandalone.c' || echo '$(srcdir)/'`util/grub-mkstandalone.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-mkstandalone.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-mkstandalone.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkstandalone.c' object='util/grub_mkstandalone-grub-mkstandalone.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-mkstandalone.o `test -f 'util/grub-mkstandalone.c' || echo '$(srcdir)/'`util/grub-mkstandalone.c + +util/grub_mkstandalone-grub-mkstandalone.obj: util/grub-mkstandalone.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-mkstandalone.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-mkstandalone.Tpo -c -o util/grub_mkstandalone-grub-mkstandalone.obj `if test -f 'util/grub-mkstandalone.c'; then $(CYGPATH_W) 'util/grub-mkstandalone.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkstandalone.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-mkstandalone.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-mkstandalone.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkstandalone.c' object='util/grub_mkstandalone-grub-mkstandalone.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-mkstandalone.obj `if test -f 'util/grub-mkstandalone.c'; then $(CYGPATH_W) 'util/grub-mkstandalone.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkstandalone.c'; fi` + +util/grub_mkstandalone-render-label.o: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-render-label.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-render-label.Tpo -c -o util/grub_mkstandalone-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-render-label.Tpo util/$(DEPDIR)/grub_mkstandalone-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_mkstandalone-render-label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c + +util/grub_mkstandalone-render-label.obj: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-render-label.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-render-label.Tpo -c -o util/grub_mkstandalone-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-render-label.Tpo util/$(DEPDIR)/grub_mkstandalone-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_mkstandalone-render-label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` + +util/grub_mkstandalone-glue-efi.o: util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-glue-efi.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-glue-efi.Tpo -c -o util/grub_mkstandalone-glue-efi.o `test -f 'util/glue-efi.c' || echo '$(srcdir)/'`util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-glue-efi.Tpo util/$(DEPDIR)/grub_mkstandalone-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/glue-efi.c' object='util/grub_mkstandalone-glue-efi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-glue-efi.o `test -f 'util/glue-efi.c' || echo '$(srcdir)/'`util/glue-efi.c + +util/grub_mkstandalone-glue-efi.obj: util/glue-efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-glue-efi.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-glue-efi.Tpo -c -o util/grub_mkstandalone-glue-efi.obj `if test -f 'util/glue-efi.c'; then $(CYGPATH_W) 'util/glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/glue-efi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-glue-efi.Tpo util/$(DEPDIR)/grub_mkstandalone-glue-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/glue-efi.c' object='util/grub_mkstandalone-glue-efi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-glue-efi.obj `if test -f 'util/glue-efi.c'; then $(CYGPATH_W) 'util/glue-efi.c'; else $(CYGPATH_W) '$(srcdir)/util/glue-efi.c'; fi` + +util/grub_mkstandalone-mkimage.o: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-mkimage.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-mkimage.Tpo -c -o util/grub_mkstandalone-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-mkimage.Tpo util/$(DEPDIR)/grub_mkstandalone-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mkstandalone-mkimage.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-mkimage.o `test -f 'util/mkimage.c' || echo '$(srcdir)/'`util/mkimage.c + +util/grub_mkstandalone-mkimage.obj: util/mkimage.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-mkimage.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-mkimage.Tpo -c -o util/grub_mkstandalone-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-mkimage.Tpo util/$(DEPDIR)/grub_mkstandalone-mkimage.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/mkimage.c' object='util/grub_mkstandalone-mkimage.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-mkimage.obj `if test -f 'util/mkimage.c'; then $(CYGPATH_W) 'util/mkimage.c'; else $(CYGPATH_W) '$(srcdir)/util/mkimage.c'; fi` + +util/grub_mkstandalone-grub-mkimage32.o: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-mkimage32.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-mkimage32.Tpo -c -o util/grub_mkstandalone-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mkstandalone-grub-mkimage32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-mkimage32.o `test -f 'util/grub-mkimage32.c' || echo '$(srcdir)/'`util/grub-mkimage32.c + +util/grub_mkstandalone-grub-mkimage32.obj: util/grub-mkimage32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-mkimage32.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-mkimage32.Tpo -c -o util/grub_mkstandalone-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-mkimage32.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-mkimage32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage32.c' object='util/grub_mkstandalone-grub-mkimage32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-mkimage32.obj `if test -f 'util/grub-mkimage32.c'; then $(CYGPATH_W) 'util/grub-mkimage32.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage32.c'; fi` + +util/grub_mkstandalone-grub-mkimage64.o: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-mkimage64.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-mkimage64.Tpo -c -o util/grub_mkstandalone-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mkstandalone-grub-mkimage64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-mkimage64.o `test -f 'util/grub-mkimage64.c' || echo '$(srcdir)/'`util/grub-mkimage64.c + +util/grub_mkstandalone-grub-mkimage64.obj: util/grub-mkimage64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-mkimage64.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-mkimage64.Tpo -c -o util/grub_mkstandalone-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-mkimage64.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-mkimage64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mkimage64.c' object='util/grub_mkstandalone-grub-mkimage64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-mkimage64.obj `if test -f 'util/grub-mkimage64.c'; then $(CYGPATH_W) 'util/grub-mkimage64.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mkimage64.c'; fi` + +util/grub_mkstandalone-grub-install-common.o: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-install-common.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-install-common.Tpo -c -o util/grub_mkstandalone-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-install-common.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_mkstandalone-grub-install-common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-install-common.o `test -f 'util/grub-install-common.c' || echo '$(srcdir)/'`util/grub-install-common.c + +util/grub_mkstandalone-grub-install-common.obj: util/grub-install-common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-grub-install-common.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-grub-install-common.Tpo -c -o util/grub_mkstandalone-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-grub-install-common.Tpo util/$(DEPDIR)/grub_mkstandalone-grub-install-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-install-common.c' object='util/grub_mkstandalone-grub-install-common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-grub-install-common.obj `if test -f 'util/grub-install-common.c'; then $(CYGPATH_W) 'util/grub-install-common.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-install-common.c'; fi` + +util/grub_mkstandalone-setup_bios.o: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-setup_bios.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-setup_bios.Tpo -c -o util/grub_mkstandalone-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-setup_bios.Tpo util/$(DEPDIR)/grub_mkstandalone-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_mkstandalone-setup_bios.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-setup_bios.o `test -f 'util/setup_bios.c' || echo '$(srcdir)/'`util/setup_bios.c + +util/grub_mkstandalone-setup_bios.obj: util/setup_bios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-setup_bios.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-setup_bios.Tpo -c -o util/grub_mkstandalone-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-setup_bios.Tpo util/$(DEPDIR)/grub_mkstandalone-setup_bios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_bios.c' object='util/grub_mkstandalone-setup_bios.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-setup_bios.obj `if test -f 'util/setup_bios.c'; then $(CYGPATH_W) 'util/setup_bios.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_bios.c'; fi` + +util/grub_mkstandalone-setup_sparc.o: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-setup_sparc.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-setup_sparc.Tpo -c -o util/grub_mkstandalone-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-setup_sparc.Tpo util/$(DEPDIR)/grub_mkstandalone-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_mkstandalone-setup_sparc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c + +util/grub_mkstandalone-setup_sparc.obj: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-setup_sparc.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-setup_sparc.Tpo -c -o util/grub_mkstandalone-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-setup_sparc.Tpo util/$(DEPDIR)/grub_mkstandalone-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_mkstandalone-setup_sparc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` + +grub-core/lib/grub_mkstandalone-reed_solomon.o: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_mkstandalone-reed_solomon.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_mkstandalone-reed_solomon.Tpo -c -o grub-core/lib/grub_mkstandalone-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_mkstandalone-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_mkstandalone-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_mkstandalone-reed_solomon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_mkstandalone-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c + +grub-core/lib/grub_mkstandalone-reed_solomon.obj: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_mkstandalone-reed_solomon.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_mkstandalone-reed_solomon.Tpo -c -o grub-core/lib/grub_mkstandalone-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_mkstandalone-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_mkstandalone-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_mkstandalone-reed_solomon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_mkstandalone-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` + +grub-core/osdep/grub_mkstandalone-random.o: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-random.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-random.Tpo -c -o grub-core/osdep/grub_mkstandalone-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mkstandalone-random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-random.o `test -f 'grub-core/osdep/random.c' || echo '$(srcdir)/'`grub-core/osdep/random.c + +grub-core/osdep/grub_mkstandalone-random.obj: grub-core/osdep/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-random.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-random.Tpo -c -o grub-core/osdep/grub_mkstandalone-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-random.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/random.c' object='grub-core/osdep/grub_mkstandalone-random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-random.obj `if test -f 'grub-core/osdep/random.c'; then $(CYGPATH_W) 'grub-core/osdep/random.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/random.c'; fi` + +grub-core/osdep/grub_mkstandalone-ofpath.o: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-ofpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-ofpath.Tpo -c -o grub-core/osdep/grub_mkstandalone-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_mkstandalone-ofpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c + +grub-core/osdep/grub_mkstandalone-ofpath.obj: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-ofpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-ofpath.Tpo -c -o grub-core/osdep/grub_mkstandalone-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_mkstandalone-ofpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` + +grub-core/osdep/grub_mkstandalone-platform.o: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-platform.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform.Tpo -c -o grub-core/osdep/grub_mkstandalone-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_mkstandalone-platform.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-platform.o `test -f 'grub-core/osdep/platform.c' || echo '$(srcdir)/'`grub-core/osdep/platform.c + +grub-core/osdep/grub_mkstandalone-platform.obj: grub-core/osdep/platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-platform.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform.Tpo -c -o grub-core/osdep/grub_mkstandalone-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform.c' object='grub-core/osdep/grub_mkstandalone-platform.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-platform.obj `if test -f 'grub-core/osdep/platform.c'; then $(CYGPATH_W) 'grub-core/osdep/platform.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform.c'; fi` + +grub-core/osdep/grub_mkstandalone-platform_unix.o: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-platform_unix.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform_unix.Tpo -c -o grub-core/osdep/grub_mkstandalone-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_mkstandalone-platform_unix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-platform_unix.o `test -f 'grub-core/osdep/platform_unix.c' || echo '$(srcdir)/'`grub-core/osdep/platform_unix.c + +grub-core/osdep/grub_mkstandalone-platform_unix.obj: grub-core/osdep/platform_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-platform_unix.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform_unix.Tpo -c -o grub-core/osdep/grub_mkstandalone-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform_unix.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-platform_unix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/platform_unix.c' object='grub-core/osdep/grub_mkstandalone-platform_unix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-platform_unix.obj `if test -f 'grub-core/osdep/platform_unix.c'; then $(CYGPATH_W) 'grub-core/osdep/platform_unix.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/platform_unix.c'; fi` + +grub-core/osdep/grub_mkstandalone-compress.o: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-compress.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-compress.Tpo -c -o grub-core/osdep/grub_mkstandalone-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_mkstandalone-compress.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-compress.o `test -f 'grub-core/osdep/compress.c' || echo '$(srcdir)/'`grub-core/osdep/compress.c + +grub-core/osdep/grub_mkstandalone-compress.obj: grub-core/osdep/compress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-compress.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-compress.Tpo -c -o grub-core/osdep/grub_mkstandalone-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-compress.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-compress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/compress.c' object='grub-core/osdep/grub_mkstandalone-compress.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-compress.obj `if test -f 'grub-core/osdep/compress.c'; then $(CYGPATH_W) 'grub-core/osdep/compress.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/compress.c'; fi` + +util/grub_mkstandalone-editenv.o: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-editenv.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-editenv.Tpo -c -o util/grub_mkstandalone-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-editenv.Tpo util/$(DEPDIR)/grub_mkstandalone-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_mkstandalone-editenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-editenv.o `test -f 'util/editenv.c' || echo '$(srcdir)/'`util/editenv.c + +util/grub_mkstandalone-editenv.obj: util/editenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-editenv.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-editenv.Tpo -c -o util/grub_mkstandalone-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-editenv.Tpo util/$(DEPDIR)/grub_mkstandalone-editenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/editenv.c' object='util/grub_mkstandalone-editenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-editenv.obj `if test -f 'util/editenv.c'; then $(CYGPATH_W) 'util/editenv.c'; else $(CYGPATH_W) '$(srcdir)/util/editenv.c'; fi` + +grub-core/osdep/grub_mkstandalone-blocklist.o: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-blocklist.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-blocklist.Tpo -c -o grub-core/osdep/grub_mkstandalone-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_mkstandalone-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c + +grub-core/osdep/grub_mkstandalone-blocklist.obj: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-blocklist.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-blocklist.Tpo -c -o grub-core/osdep/grub_mkstandalone-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_mkstandalone-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` + +grub-core/osdep/grub_mkstandalone-config.o: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-config.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-config.Tpo -c -o grub-core/osdep/grub_mkstandalone-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mkstandalone-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-config.o `test -f 'grub-core/osdep/config.c' || echo '$(srcdir)/'`grub-core/osdep/config.c + +grub-core/osdep/grub_mkstandalone-config.obj: grub-core/osdep/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-config.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-config.Tpo -c -o grub-core/osdep/grub_mkstandalone-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-config.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/config.c' object='grub-core/osdep/grub_mkstandalone-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-config.obj `if test -f 'grub-core/osdep/config.c'; then $(CYGPATH_W) 'grub-core/osdep/config.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/config.c'; fi` + +util/grub_mkstandalone-config.o: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-config.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-config.Tpo -c -o util/grub_mkstandalone-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-config.Tpo util/$(DEPDIR)/grub_mkstandalone-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mkstandalone-config.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-config.o `test -f 'util/config.c' || echo '$(srcdir)/'`util/config.c + +util/grub_mkstandalone-config.obj: util/config.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-config.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-config.Tpo -c -o util/grub_mkstandalone-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-config.Tpo util/$(DEPDIR)/grub_mkstandalone-config.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/config.c' object='util/grub_mkstandalone-config.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-config.obj `if test -f 'util/config.c'; then $(CYGPATH_W) 'util/config.c'; else $(CYGPATH_W) '$(srcdir)/util/config.c'; fi` + +grub-core/kern/emu/grub_mkstandalone-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkstandalone-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-hostfs.Tpo -c -o grub-core/kern/emu/grub_mkstandalone-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_mkstandalone-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkstandalone-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_mkstandalone-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkstandalone-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-hostfs.Tpo -c -o grub-core/kern/emu/grub_mkstandalone-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_mkstandalone-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkstandalone-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_mkstandalone-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_mkstandalone-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_mkstandalone-host.Tpo -c -o grub-core/disk/grub_mkstandalone-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_mkstandalone-host.Tpo grub-core/disk/$(DEPDIR)/grub_mkstandalone-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_mkstandalone-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_mkstandalone-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_mkstandalone-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_mkstandalone-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_mkstandalone-host.Tpo -c -o grub-core/disk/grub_mkstandalone-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_mkstandalone-host.Tpo grub-core/disk/$(DEPDIR)/grub_mkstandalone-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_mkstandalone-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_mkstandalone-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +util/grub_mkstandalone-resolve.o: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-resolve.o -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-resolve.Tpo -c -o util/grub_mkstandalone-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-resolve.Tpo util/$(DEPDIR)/grub_mkstandalone-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mkstandalone-resolve.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-resolve.o `test -f 'util/resolve.c' || echo '$(srcdir)/'`util/resolve.c + +util/grub_mkstandalone-resolve.obj: util/resolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT util/grub_mkstandalone-resolve.obj -MD -MP -MF util/$(DEPDIR)/grub_mkstandalone-resolve.Tpo -c -o util/grub_mkstandalone-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mkstandalone-resolve.Tpo util/$(DEPDIR)/grub_mkstandalone-resolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/resolve.c' object='util/grub_mkstandalone-resolve.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o util/grub_mkstandalone-resolve.obj `if test -f 'util/resolve.c'; then $(CYGPATH_W) 'util/resolve.c'; else $(CYGPATH_W) '$(srcdir)/util/resolve.c'; fi` + +grub-core/kern/emu/grub_mkstandalone-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkstandalone-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkstandalone-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkstandalone-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkstandalone-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_mkstandalone-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mkstandalone-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-argp_common.Tpo -c -o grub-core/kern/emu/grub_mkstandalone-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mkstandalone-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_mkstandalone-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mkstandalone-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_mkstandalone-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-init.Tpo -c -o grub-core/osdep/grub_mkstandalone-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkstandalone-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mkstandalone-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mkstandalone-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mkstandalone-init.Tpo -c -o grub-core/osdep/grub_mkstandalone-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mkstandalone-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mkstandalone-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mkstandalone-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mkstandalone_CPPFLAGS) $(CPPFLAGS) $(grub_mkstandalone_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mkstandalone-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_mount-grub-mount.o: util/grub-mount.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT util/grub_mount-grub-mount.o -MD -MP -MF util/$(DEPDIR)/grub_mount-grub-mount.Tpo -c -o util/grub_mount-grub-mount.o `test -f 'util/grub-mount.c' || echo '$(srcdir)/'`util/grub-mount.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mount-grub-mount.Tpo util/$(DEPDIR)/grub_mount-grub-mount.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mount.c' object='util/grub_mount-grub-mount.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o util/grub_mount-grub-mount.o `test -f 'util/grub-mount.c' || echo '$(srcdir)/'`util/grub-mount.c + +util/grub_mount-grub-mount.obj: util/grub-mount.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT util/grub_mount-grub-mount.obj -MD -MP -MF util/$(DEPDIR)/grub_mount-grub-mount.Tpo -c -o util/grub_mount-grub-mount.obj `if test -f 'util/grub-mount.c'; then $(CYGPATH_W) 'util/grub-mount.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mount.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_mount-grub-mount.Tpo util/$(DEPDIR)/grub_mount-grub-mount.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-mount.c' object='util/grub_mount-grub-mount.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o util/grub_mount-grub-mount.obj `if test -f 'util/grub-mount.c'; then $(CYGPATH_W) 'util/grub-mount.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-mount.c'; fi` + +grub-core/kern/emu/grub_mount-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mount-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mount-hostfs.Tpo -c -o grub-core/kern/emu/grub_mount-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mount-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mount-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_mount-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mount-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_mount-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_mount-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_mount-hostfs.Tpo -c -o grub-core/kern/emu/grub_mount-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_mount-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_mount-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_mount-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_mount-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_mount-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_mount-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_mount-host.Tpo -c -o grub-core/disk/grub_mount-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_mount-host.Tpo grub-core/disk/$(DEPDIR)/grub_mount-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_mount-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_mount-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_mount-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_mount-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_mount-host.Tpo -c -o grub-core/disk/grub_mount-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_mount-host.Tpo grub-core/disk/$(DEPDIR)/grub_mount-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_mount-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_mount-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +grub-core/osdep/grub_mount-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mount-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mount-init.Tpo -c -o grub-core/osdep/grub_mount-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mount-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mount-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mount-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mount-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_mount-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_mount-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_mount-init.Tpo -c -o grub-core/osdep/grub_mount-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_mount-init.Tpo grub-core/osdep/$(DEPDIR)/grub_mount-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_mount-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_mount-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +grub_mount-grub_fstest_init.o: grub_fstest_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub_mount-grub_fstest_init.o -MD -MP -MF $(DEPDIR)/grub_mount-grub_fstest_init.Tpo -c -o grub_mount-grub_fstest_init.o `test -f 'grub_fstest_init.c' || echo '$(srcdir)/'`grub_fstest_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_mount-grub_fstest_init.Tpo $(DEPDIR)/grub_mount-grub_fstest_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_fstest_init.c' object='grub_mount-grub_fstest_init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub_mount-grub_fstest_init.o `test -f 'grub_fstest_init.c' || echo '$(srcdir)/'`grub_fstest_init.c + +grub_mount-grub_fstest_init.obj: grub_fstest_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -MT grub_mount-grub_fstest_init.obj -MD -MP -MF $(DEPDIR)/grub_mount-grub_fstest_init.Tpo -c -o grub_mount-grub_fstest_init.obj `if test -f 'grub_fstest_init.c'; then $(CYGPATH_W) 'grub_fstest_init.c'; else $(CYGPATH_W) '$(srcdir)/grub_fstest_init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_mount-grub_fstest_init.Tpo $(DEPDIR)/grub_mount-grub_fstest_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_fstest_init.c' object='grub_mount-grub_fstest_init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_mount_CPPFLAGS) $(CPPFLAGS) $(grub_mount_CFLAGS) $(CFLAGS) -c -o grub_mount-grub_fstest_init.obj `if test -f 'grub_fstest_init.c'; then $(CYGPATH_W) 'grub_fstest_init.c'; else $(CYGPATH_W) '$(srcdir)/grub_fstest_init.c'; fi` + +util/ieee1275/grub_ofpathname-grub-ofpathname.o: util/ieee1275/grub-ofpathname.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -MT util/ieee1275/grub_ofpathname-grub-ofpathname.o -MD -MP -MF util/ieee1275/$(DEPDIR)/grub_ofpathname-grub-ofpathname.Tpo -c -o util/ieee1275/grub_ofpathname-grub-ofpathname.o `test -f 'util/ieee1275/grub-ofpathname.c' || echo '$(srcdir)/'`util/ieee1275/grub-ofpathname.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/ieee1275/$(DEPDIR)/grub_ofpathname-grub-ofpathname.Tpo util/ieee1275/$(DEPDIR)/grub_ofpathname-grub-ofpathname.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ieee1275/grub-ofpathname.c' object='util/ieee1275/grub_ofpathname-grub-ofpathname.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -c -o util/ieee1275/grub_ofpathname-grub-ofpathname.o `test -f 'util/ieee1275/grub-ofpathname.c' || echo '$(srcdir)/'`util/ieee1275/grub-ofpathname.c + +util/ieee1275/grub_ofpathname-grub-ofpathname.obj: util/ieee1275/grub-ofpathname.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -MT util/ieee1275/grub_ofpathname-grub-ofpathname.obj -MD -MP -MF util/ieee1275/$(DEPDIR)/grub_ofpathname-grub-ofpathname.Tpo -c -o util/ieee1275/grub_ofpathname-grub-ofpathname.obj `if test -f 'util/ieee1275/grub-ofpathname.c'; then $(CYGPATH_W) 'util/ieee1275/grub-ofpathname.c'; else $(CYGPATH_W) '$(srcdir)/util/ieee1275/grub-ofpathname.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/ieee1275/$(DEPDIR)/grub_ofpathname-grub-ofpathname.Tpo util/ieee1275/$(DEPDIR)/grub_ofpathname-grub-ofpathname.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/ieee1275/grub-ofpathname.c' object='util/ieee1275/grub_ofpathname-grub-ofpathname.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -c -o util/ieee1275/grub_ofpathname-grub-ofpathname.obj `if test -f 'util/ieee1275/grub-ofpathname.c'; then $(CYGPATH_W) 'util/ieee1275/grub-ofpathname.c'; else $(CYGPATH_W) '$(srcdir)/util/ieee1275/grub-ofpathname.c'; fi` + +grub-core/osdep/grub_ofpathname-ofpath.o: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_ofpathname-ofpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_ofpathname-ofpath.Tpo -c -o grub-core/osdep/grub_ofpathname-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_ofpathname-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_ofpathname-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_ofpathname-ofpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_ofpathname-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c + +grub-core/osdep/grub_ofpathname-ofpath.obj: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_ofpathname-ofpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_ofpathname-ofpath.Tpo -c -o grub-core/osdep/grub_ofpathname-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_ofpathname-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_ofpathname-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_ofpathname-ofpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_ofpathname-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` + +grub-core/osdep/grub_ofpathname-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_ofpathname-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_ofpathname-init.Tpo -c -o grub-core/osdep/grub_ofpathname-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_ofpathname-init.Tpo grub-core/osdep/$(DEPDIR)/grub_ofpathname-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_ofpathname-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_ofpathname-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_ofpathname-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_ofpathname-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_ofpathname-init.Tpo -c -o grub-core/osdep/grub_ofpathname-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_ofpathname-init.Tpo grub-core/osdep/$(DEPDIR)/grub_ofpathname-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_ofpathname-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_ofpathname_CPPFLAGS) $(CPPFLAGS) $(grub_ofpathname_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_ofpathname-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_probe-grub-probe.o: util/grub-probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT util/grub_probe-grub-probe.o -MD -MP -MF util/$(DEPDIR)/grub_probe-grub-probe.Tpo -c -o util/grub_probe-grub-probe.o `test -f 'util/grub-probe.c' || echo '$(srcdir)/'`util/grub-probe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_probe-grub-probe.Tpo util/$(DEPDIR)/grub_probe-grub-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-probe.c' object='util/grub_probe-grub-probe.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o util/grub_probe-grub-probe.o `test -f 'util/grub-probe.c' || echo '$(srcdir)/'`util/grub-probe.c + +util/grub_probe-grub-probe.obj: util/grub-probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT util/grub_probe-grub-probe.obj -MD -MP -MF util/$(DEPDIR)/grub_probe-grub-probe.Tpo -c -o util/grub_probe-grub-probe.obj `if test -f 'util/grub-probe.c'; then $(CYGPATH_W) 'util/grub-probe.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-probe.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_probe-grub-probe.Tpo util/$(DEPDIR)/grub_probe-grub-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-probe.c' object='util/grub_probe-grub-probe.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o util/grub_probe-grub-probe.obj `if test -f 'util/grub-probe.c'; then $(CYGPATH_W) 'util/grub-probe.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-probe.c'; fi` + +util/grub_probe-probe.o: util/probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT util/grub_probe-probe.o -MD -MP -MF util/$(DEPDIR)/grub_probe-probe.Tpo -c -o util/grub_probe-probe.o `test -f 'util/probe.c' || echo '$(srcdir)/'`util/probe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_probe-probe.Tpo util/$(DEPDIR)/grub_probe-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/probe.c' object='util/grub_probe-probe.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o util/grub_probe-probe.o `test -f 'util/probe.c' || echo '$(srcdir)/'`util/probe.c + +util/grub_probe-probe.obj: util/probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT util/grub_probe-probe.obj -MD -MP -MF util/$(DEPDIR)/grub_probe-probe.Tpo -c -o util/grub_probe-probe.obj `if test -f 'util/probe.c'; then $(CYGPATH_W) 'util/probe.c'; else $(CYGPATH_W) '$(srcdir)/util/probe.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_probe-probe.Tpo util/$(DEPDIR)/grub_probe-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/probe.c' object='util/grub_probe-probe.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o util/grub_probe-probe.obj `if test -f 'util/probe.c'; then $(CYGPATH_W) 'util/probe.c'; else $(CYGPATH_W) '$(srcdir)/util/probe.c'; fi` + +grub-core/osdep/grub_probe-ofpath.o: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_probe-ofpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_probe-ofpath.Tpo -c -o grub-core/osdep/grub_probe-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_probe-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_probe-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_probe-ofpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_probe-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c + +grub-core/osdep/grub_probe-ofpath.obj: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_probe-ofpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_probe-ofpath.Tpo -c -o grub-core/osdep/grub_probe-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_probe-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_probe-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_probe-ofpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_probe-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` + +grub-core/kern/emu/grub_probe-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_probe-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_probe-argp_common.Tpo -c -o grub-core/kern/emu/grub_probe-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_probe-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_probe-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_probe-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_probe-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_probe-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_probe-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_probe-argp_common.Tpo -c -o grub-core/kern/emu/grub_probe-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_probe-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_probe-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_probe-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_probe-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_probe-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_probe-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_probe-init.Tpo -c -o grub-core/osdep/grub_probe-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_probe-init.Tpo grub-core/osdep/$(DEPDIR)/grub_probe-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_probe-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_probe-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_probe-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_probe-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_probe-init.Tpo -c -o grub-core/osdep/grub_probe-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_probe-init.Tpo grub-core/osdep/$(DEPDIR)/grub_probe-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_probe-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_probe_CPPFLAGS) $(CPPFLAGS) $(grub_probe_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_probe-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_render_label-grub-render-label.o: util/grub-render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT util/grub_render_label-grub-render-label.o -MD -MP -MF util/$(DEPDIR)/grub_render_label-grub-render-label.Tpo -c -o util/grub_render_label-grub-render-label.o `test -f 'util/grub-render-label.c' || echo '$(srcdir)/'`util/grub-render-label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_render_label-grub-render-label.Tpo util/$(DEPDIR)/grub_render_label-grub-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-render-label.c' object='util/grub_render_label-grub-render-label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o util/grub_render_label-grub-render-label.o `test -f 'util/grub-render-label.c' || echo '$(srcdir)/'`util/grub-render-label.c + +util/grub_render_label-grub-render-label.obj: util/grub-render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT util/grub_render_label-grub-render-label.obj -MD -MP -MF util/$(DEPDIR)/grub_render_label-grub-render-label.Tpo -c -o util/grub_render_label-grub-render-label.obj `if test -f 'util/grub-render-label.c'; then $(CYGPATH_W) 'util/grub-render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-render-label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_render_label-grub-render-label.Tpo util/$(DEPDIR)/grub_render_label-grub-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-render-label.c' object='util/grub_render_label-grub-render-label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o util/grub_render_label-grub-render-label.obj `if test -f 'util/grub-render-label.c'; then $(CYGPATH_W) 'util/grub-render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-render-label.c'; fi` + +util/grub_render_label-render-label.o: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT util/grub_render_label-render-label.o -MD -MP -MF util/$(DEPDIR)/grub_render_label-render-label.Tpo -c -o util/grub_render_label-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_render_label-render-label.Tpo util/$(DEPDIR)/grub_render_label-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_render_label-render-label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o util/grub_render_label-render-label.o `test -f 'util/render-label.c' || echo '$(srcdir)/'`util/render-label.c + +util/grub_render_label-render-label.obj: util/render-label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT util/grub_render_label-render-label.obj -MD -MP -MF util/$(DEPDIR)/grub_render_label-render-label.Tpo -c -o util/grub_render_label-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_render_label-render-label.Tpo util/$(DEPDIR)/grub_render_label-render-label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/render-label.c' object='util/grub_render_label-render-label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o util/grub_render_label-render-label.obj `if test -f 'util/render-label.c'; then $(CYGPATH_W) 'util/render-label.c'; else $(CYGPATH_W) '$(srcdir)/util/render-label.c'; fi` + +grub-core/kern/emu/grub_render_label-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_render_label-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_render_label-argp_common.Tpo -c -o grub-core/kern/emu/grub_render_label-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_render_label-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_render_label-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_render_label-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_render_label-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_render_label-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_render_label-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_render_label-argp_common.Tpo -c -o grub-core/kern/emu/grub_render_label-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_render_label-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_render_label-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_render_label-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_render_label-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/kern/emu/grub_render_label-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_render_label-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_render_label-hostfs.Tpo -c -o grub-core/kern/emu/grub_render_label-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_render_label-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_render_label-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_render_label-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_render_label-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_render_label-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_render_label-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_render_label-hostfs.Tpo -c -o grub-core/kern/emu/grub_render_label-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_render_label-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_render_label-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_render_label-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_render_label-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_render_label-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_render_label-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_render_label-host.Tpo -c -o grub-core/disk/grub_render_label-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_render_label-host.Tpo grub-core/disk/$(DEPDIR)/grub_render_label-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_render_label-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_render_label-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_render_label-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_render_label-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_render_label-host.Tpo -c -o grub-core/disk/grub_render_label-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_render_label-host.Tpo grub-core/disk/$(DEPDIR)/grub_render_label-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_render_label-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_render_label-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +grub-core/osdep/grub_render_label-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_render_label-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_render_label-init.Tpo -c -o grub-core/osdep/grub_render_label-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_render_label-init.Tpo grub-core/osdep/$(DEPDIR)/grub_render_label-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_render_label-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_render_label-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_render_label-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_render_label-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_render_label-init.Tpo -c -o grub-core/osdep/grub_render_label-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_render_label-init.Tpo grub-core/osdep/$(DEPDIR)/grub_render_label-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_render_label-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_render_label_CPPFLAGS) $(CPPFLAGS) $(grub_render_label_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_render_label-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_script_check-grub-script-check.o: util/grub-script-check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -MT util/grub_script_check-grub-script-check.o -MD -MP -MF util/$(DEPDIR)/grub_script_check-grub-script-check.Tpo -c -o util/grub_script_check-grub-script-check.o `test -f 'util/grub-script-check.c' || echo '$(srcdir)/'`util/grub-script-check.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_script_check-grub-script-check.Tpo util/$(DEPDIR)/grub_script_check-grub-script-check.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-script-check.c' object='util/grub_script_check-grub-script-check.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -c -o util/grub_script_check-grub-script-check.o `test -f 'util/grub-script-check.c' || echo '$(srcdir)/'`util/grub-script-check.c + +util/grub_script_check-grub-script-check.obj: util/grub-script-check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -MT util/grub_script_check-grub-script-check.obj -MD -MP -MF util/$(DEPDIR)/grub_script_check-grub-script-check.Tpo -c -o util/grub_script_check-grub-script-check.obj `if test -f 'util/grub-script-check.c'; then $(CYGPATH_W) 'util/grub-script-check.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-script-check.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_script_check-grub-script-check.Tpo util/$(DEPDIR)/grub_script_check-grub-script-check.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-script-check.c' object='util/grub_script_check-grub-script-check.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -c -o util/grub_script_check-grub-script-check.obj `if test -f 'util/grub-script-check.c'; then $(CYGPATH_W) 'util/grub-script-check.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-script-check.c'; fi` + +grub-core/kern/emu/grub_script_check-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_script_check-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_script_check-argp_common.Tpo -c -o grub-core/kern/emu/grub_script_check-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_script_check-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_script_check-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_script_check-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_script_check-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_script_check-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_script_check-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_script_check-argp_common.Tpo -c -o grub-core/kern/emu/grub_script_check-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_script_check-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_script_check-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_script_check-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_script_check-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/osdep/grub_script_check-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_script_check-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_script_check-init.Tpo -c -o grub-core/osdep/grub_script_check-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_script_check-init.Tpo grub-core/osdep/$(DEPDIR)/grub_script_check-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_script_check-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_script_check-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_script_check-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_script_check-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_script_check-init.Tpo -c -o grub-core/osdep/grub_script_check-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_script_check-init.Tpo grub-core/osdep/$(DEPDIR)/grub_script_check-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_script_check-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_script_check_CPPFLAGS) $(CPPFLAGS) $(grub_script_check_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_script_check-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_sparc64_setup-grub-setup.o: util/grub-setup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT util/grub_sparc64_setup-grub-setup.o -MD -MP -MF util/$(DEPDIR)/grub_sparc64_setup-grub-setup.Tpo -c -o util/grub_sparc64_setup-grub-setup.o `test -f 'util/grub-setup.c' || echo '$(srcdir)/'`util/grub-setup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_sparc64_setup-grub-setup.Tpo util/$(DEPDIR)/grub_sparc64_setup-grub-setup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-setup.c' object='util/grub_sparc64_setup-grub-setup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o util/grub_sparc64_setup-grub-setup.o `test -f 'util/grub-setup.c' || echo '$(srcdir)/'`util/grub-setup.c + +util/grub_sparc64_setup-grub-setup.obj: util/grub-setup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT util/grub_sparc64_setup-grub-setup.obj -MD -MP -MF util/$(DEPDIR)/grub_sparc64_setup-grub-setup.Tpo -c -o util/grub_sparc64_setup-grub-setup.obj `if test -f 'util/grub-setup.c'; then $(CYGPATH_W) 'util/grub-setup.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-setup.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_sparc64_setup-grub-setup.Tpo util/$(DEPDIR)/grub_sparc64_setup-grub-setup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-setup.c' object='util/grub_sparc64_setup-grub-setup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o util/grub_sparc64_setup-grub-setup.obj `if test -f 'util/grub-setup.c'; then $(CYGPATH_W) 'util/grub-setup.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-setup.c'; fi` + +util/grub_sparc64_setup-setup_sparc.o: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT util/grub_sparc64_setup-setup_sparc.o -MD -MP -MF util/$(DEPDIR)/grub_sparc64_setup-setup_sparc.Tpo -c -o util/grub_sparc64_setup-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_sparc64_setup-setup_sparc.Tpo util/$(DEPDIR)/grub_sparc64_setup-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_sparc64_setup-setup_sparc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o util/grub_sparc64_setup-setup_sparc.o `test -f 'util/setup_sparc.c' || echo '$(srcdir)/'`util/setup_sparc.c + +util/grub_sparc64_setup-setup_sparc.obj: util/setup_sparc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT util/grub_sparc64_setup-setup_sparc.obj -MD -MP -MF util/$(DEPDIR)/grub_sparc64_setup-setup_sparc.Tpo -c -o util/grub_sparc64_setup-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_sparc64_setup-setup_sparc.Tpo util/$(DEPDIR)/grub_sparc64_setup-setup_sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/setup_sparc.c' object='util/grub_sparc64_setup-setup_sparc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o util/grub_sparc64_setup-setup_sparc.obj `if test -f 'util/setup_sparc.c'; then $(CYGPATH_W) 'util/setup_sparc.c'; else $(CYGPATH_W) '$(srcdir)/util/setup_sparc.c'; fi` + +grub-core/kern/emu/grub_sparc64_setup-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_sparc64_setup-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_sparc64_setup-argp_common.Tpo -c -o grub-core/kern/emu/grub_sparc64_setup-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_sparc64_setup-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_sparc64_setup-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_sparc64_setup-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_sparc64_setup-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_sparc64_setup-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_sparc64_setup-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_sparc64_setup-argp_common.Tpo -c -o grub-core/kern/emu/grub_sparc64_setup-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_sparc64_setup-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_sparc64_setup-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_sparc64_setup-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_sparc64_setup-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +grub-core/lib/grub_sparc64_setup-reed_solomon.o: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_sparc64_setup-reed_solomon.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_sparc64_setup-reed_solomon.Tpo -c -o grub-core/lib/grub_sparc64_setup-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_sparc64_setup-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_sparc64_setup-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_sparc64_setup-reed_solomon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_sparc64_setup-reed_solomon.o `test -f 'grub-core/lib/reed_solomon.c' || echo '$(srcdir)/'`grub-core/lib/reed_solomon.c + +grub-core/lib/grub_sparc64_setup-reed_solomon.obj: grub-core/lib/reed_solomon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_sparc64_setup-reed_solomon.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_sparc64_setup-reed_solomon.Tpo -c -o grub-core/lib/grub_sparc64_setup-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_sparc64_setup-reed_solomon.Tpo grub-core/lib/$(DEPDIR)/grub_sparc64_setup-reed_solomon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/reed_solomon.c' object='grub-core/lib/grub_sparc64_setup-reed_solomon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_sparc64_setup-reed_solomon.obj `if test -f 'grub-core/lib/reed_solomon.c'; then $(CYGPATH_W) 'grub-core/lib/reed_solomon.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/reed_solomon.c'; fi` + +grub-core/osdep/grub_sparc64_setup-ofpath.o: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_sparc64_setup-ofpath.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-ofpath.Tpo -c -o grub-core/osdep/grub_sparc64_setup-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_sparc64_setup-ofpath.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_sparc64_setup-ofpath.o `test -f 'grub-core/osdep/ofpath.c' || echo '$(srcdir)/'`grub-core/osdep/ofpath.c + +grub-core/osdep/grub_sparc64_setup-ofpath.obj: grub-core/osdep/ofpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_sparc64_setup-ofpath.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-ofpath.Tpo -c -o grub-core/osdep/grub_sparc64_setup-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-ofpath.Tpo grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-ofpath.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/ofpath.c' object='grub-core/osdep/grub_sparc64_setup-ofpath.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_sparc64_setup-ofpath.obj `if test -f 'grub-core/osdep/ofpath.c'; then $(CYGPATH_W) 'grub-core/osdep/ofpath.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/ofpath.c'; fi` + +grub-core/osdep/grub_sparc64_setup-blocklist.o: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_sparc64_setup-blocklist.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-blocklist.Tpo -c -o grub-core/osdep/grub_sparc64_setup-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_sparc64_setup-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_sparc64_setup-blocklist.o `test -f 'grub-core/osdep/blocklist.c' || echo '$(srcdir)/'`grub-core/osdep/blocklist.c + +grub-core/osdep/grub_sparc64_setup-blocklist.obj: grub-core/osdep/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_sparc64_setup-blocklist.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-blocklist.Tpo -c -o grub-core/osdep/grub_sparc64_setup-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-blocklist.Tpo grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/blocklist.c' object='grub-core/osdep/grub_sparc64_setup-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_sparc64_setup-blocklist.obj `if test -f 'grub-core/osdep/blocklist.c'; then $(CYGPATH_W) 'grub-core/osdep/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/blocklist.c'; fi` + +grub-core/osdep/grub_sparc64_setup-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_sparc64_setup-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-init.Tpo -c -o grub-core/osdep/grub_sparc64_setup-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-init.Tpo grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_sparc64_setup-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_sparc64_setup-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_sparc64_setup-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_sparc64_setup-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-init.Tpo -c -o grub-core/osdep/grub_sparc64_setup-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-init.Tpo grub-core/osdep/$(DEPDIR)/grub_sparc64_setup-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_sparc64_setup-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_sparc64_setup_CPPFLAGS) $(CPPFLAGS) $(grub_sparc64_setup_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_sparc64_setup-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +util/grub_syslinux2cfg-grub-syslinux2cfg.o: util/grub-syslinux2cfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT util/grub_syslinux2cfg-grub-syslinux2cfg.o -MD -MP -MF util/$(DEPDIR)/grub_syslinux2cfg-grub-syslinux2cfg.Tpo -c -o util/grub_syslinux2cfg-grub-syslinux2cfg.o `test -f 'util/grub-syslinux2cfg.c' || echo '$(srcdir)/'`util/grub-syslinux2cfg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_syslinux2cfg-grub-syslinux2cfg.Tpo util/$(DEPDIR)/grub_syslinux2cfg-grub-syslinux2cfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-syslinux2cfg.c' object='util/grub_syslinux2cfg-grub-syslinux2cfg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o util/grub_syslinux2cfg-grub-syslinux2cfg.o `test -f 'util/grub-syslinux2cfg.c' || echo '$(srcdir)/'`util/grub-syslinux2cfg.c + +util/grub_syslinux2cfg-grub-syslinux2cfg.obj: util/grub-syslinux2cfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT util/grub_syslinux2cfg-grub-syslinux2cfg.obj -MD -MP -MF util/$(DEPDIR)/grub_syslinux2cfg-grub-syslinux2cfg.Tpo -c -o util/grub_syslinux2cfg-grub-syslinux2cfg.obj `if test -f 'util/grub-syslinux2cfg.c'; then $(CYGPATH_W) 'util/grub-syslinux2cfg.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-syslinux2cfg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) util/$(DEPDIR)/grub_syslinux2cfg-grub-syslinux2cfg.Tpo util/$(DEPDIR)/grub_syslinux2cfg-grub-syslinux2cfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util/grub-syslinux2cfg.c' object='util/grub_syslinux2cfg-grub-syslinux2cfg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o util/grub_syslinux2cfg-grub-syslinux2cfg.obj `if test -f 'util/grub-syslinux2cfg.c'; then $(CYGPATH_W) 'util/grub-syslinux2cfg.c'; else $(CYGPATH_W) '$(srcdir)/util/grub-syslinux2cfg.c'; fi` + +grub-core/lib/grub_syslinux2cfg-syslinux_parse.o: grub-core/lib/syslinux_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_syslinux2cfg-syslinux_parse.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-syslinux_parse.Tpo -c -o grub-core/lib/grub_syslinux2cfg-syslinux_parse.o `test -f 'grub-core/lib/syslinux_parse.c' || echo '$(srcdir)/'`grub-core/lib/syslinux_parse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-syslinux_parse.Tpo grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-syslinux_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/syslinux_parse.c' object='grub-core/lib/grub_syslinux2cfg-syslinux_parse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_syslinux2cfg-syslinux_parse.o `test -f 'grub-core/lib/syslinux_parse.c' || echo '$(srcdir)/'`grub-core/lib/syslinux_parse.c + +grub-core/lib/grub_syslinux2cfg-syslinux_parse.obj: grub-core/lib/syslinux_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_syslinux2cfg-syslinux_parse.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-syslinux_parse.Tpo -c -o grub-core/lib/grub_syslinux2cfg-syslinux_parse.obj `if test -f 'grub-core/lib/syslinux_parse.c'; then $(CYGPATH_W) 'grub-core/lib/syslinux_parse.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/syslinux_parse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-syslinux_parse.Tpo grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-syslinux_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/syslinux_parse.c' object='grub-core/lib/grub_syslinux2cfg-syslinux_parse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_syslinux2cfg-syslinux_parse.obj `if test -f 'grub-core/lib/syslinux_parse.c'; then $(CYGPATH_W) 'grub-core/lib/syslinux_parse.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/syslinux_parse.c'; fi` + +grub-core/lib/grub_syslinux2cfg-getline.o: grub-core/lib/getline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_syslinux2cfg-getline.o -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-getline.Tpo -c -o grub-core/lib/grub_syslinux2cfg-getline.o `test -f 'grub-core/lib/getline.c' || echo '$(srcdir)/'`grub-core/lib/getline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-getline.Tpo grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-getline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/getline.c' object='grub-core/lib/grub_syslinux2cfg-getline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_syslinux2cfg-getline.o `test -f 'grub-core/lib/getline.c' || echo '$(srcdir)/'`grub-core/lib/getline.c + +grub-core/lib/grub_syslinux2cfg-getline.obj: grub-core/lib/getline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/lib/grub_syslinux2cfg-getline.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-getline.Tpo -c -o grub-core/lib/grub_syslinux2cfg-getline.obj `if test -f 'grub-core/lib/getline.c'; then $(CYGPATH_W) 'grub-core/lib/getline.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/getline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-getline.Tpo grub-core/lib/$(DEPDIR)/grub_syslinux2cfg-getline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/getline.c' object='grub-core/lib/grub_syslinux2cfg-getline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/lib/grub_syslinux2cfg-getline.obj `if test -f 'grub-core/lib/getline.c'; then $(CYGPATH_W) 'grub-core/lib/getline.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/getline.c'; fi` + +grub-core/osdep/grub_syslinux2cfg-init.o: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_syslinux2cfg-init.o -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_syslinux2cfg-init.Tpo -c -o grub-core/osdep/grub_syslinux2cfg-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_syslinux2cfg-init.Tpo grub-core/osdep/$(DEPDIR)/grub_syslinux2cfg-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_syslinux2cfg-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_syslinux2cfg-init.o `test -f 'grub-core/osdep/init.c' || echo '$(srcdir)/'`grub-core/osdep/init.c + +grub-core/osdep/grub_syslinux2cfg-init.obj: grub-core/osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/osdep/grub_syslinux2cfg-init.obj -MD -MP -MF grub-core/osdep/$(DEPDIR)/grub_syslinux2cfg-init.Tpo -c -o grub-core/osdep/grub_syslinux2cfg-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/osdep/$(DEPDIR)/grub_syslinux2cfg-init.Tpo grub-core/osdep/$(DEPDIR)/grub_syslinux2cfg-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/osdep/init.c' object='grub-core/osdep/grub_syslinux2cfg-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/osdep/grub_syslinux2cfg-init.obj `if test -f 'grub-core/osdep/init.c'; then $(CYGPATH_W) 'grub-core/osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/osdep/init.c'; fi` + +grub-core/kern/emu/grub_syslinux2cfg-hostfs.o: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_syslinux2cfg-hostfs.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-hostfs.Tpo -c -o grub-core/kern/emu/grub_syslinux2cfg-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_syslinux2cfg-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_syslinux2cfg-hostfs.o `test -f 'grub-core/kern/emu/hostfs.c' || echo '$(srcdir)/'`grub-core/kern/emu/hostfs.c + +grub-core/kern/emu/grub_syslinux2cfg-hostfs.obj: grub-core/kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_syslinux2cfg-hostfs.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-hostfs.Tpo -c -o grub-core/kern/emu/grub_syslinux2cfg-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-hostfs.Tpo grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/hostfs.c' object='grub-core/kern/emu/grub_syslinux2cfg-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_syslinux2cfg-hostfs.obj `if test -f 'grub-core/kern/emu/hostfs.c'; then $(CYGPATH_W) 'grub-core/kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/hostfs.c'; fi` + +grub-core/disk/grub_syslinux2cfg-host.o: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_syslinux2cfg-host.o -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_syslinux2cfg-host.Tpo -c -o grub-core/disk/grub_syslinux2cfg-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_syslinux2cfg-host.Tpo grub-core/disk/$(DEPDIR)/grub_syslinux2cfg-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_syslinux2cfg-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_syslinux2cfg-host.o `test -f 'grub-core/disk/host.c' || echo '$(srcdir)/'`grub-core/disk/host.c + +grub-core/disk/grub_syslinux2cfg-host.obj: grub-core/disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/disk/grub_syslinux2cfg-host.obj -MD -MP -MF grub-core/disk/$(DEPDIR)/grub_syslinux2cfg-host.Tpo -c -o grub-core/disk/grub_syslinux2cfg-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/disk/$(DEPDIR)/grub_syslinux2cfg-host.Tpo grub-core/disk/$(DEPDIR)/grub_syslinux2cfg-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/disk/host.c' object='grub-core/disk/grub_syslinux2cfg-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/disk/grub_syslinux2cfg-host.obj `if test -f 'grub-core/disk/host.c'; then $(CYGPATH_W) 'grub-core/disk/host.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/disk/host.c'; fi` + +grub-core/kern/emu/grub_syslinux2cfg-argp_common.o: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_syslinux2cfg-argp_common.o -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-argp_common.Tpo -c -o grub-core/kern/emu/grub_syslinux2cfg-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_syslinux2cfg-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_syslinux2cfg-argp_common.o `test -f 'grub-core/kern/emu/argp_common.c' || echo '$(srcdir)/'`grub-core/kern/emu/argp_common.c + +grub-core/kern/emu/grub_syslinux2cfg-argp_common.obj: grub-core/kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -MT grub-core/kern/emu/grub_syslinux2cfg-argp_common.obj -MD -MP -MF grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-argp_common.Tpo -c -o grub-core/kern/emu/grub_syslinux2cfg-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-argp_common.Tpo grub-core/kern/emu/$(DEPDIR)/grub_syslinux2cfg-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/emu/argp_common.c' object='grub-core/kern/emu/grub_syslinux2cfg-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_syslinux2cfg_CPPFLAGS) $(CPPFLAGS) $(grub_syslinux2cfg_CFLAGS) $(CFLAGS) -c -o grub-core/kern/emu/grub_syslinux2cfg-argp_common.obj `if test -f 'grub-core/kern/emu/argp_common.c'; then $(CYGPATH_W) 'grub-core/kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/emu/argp_common.c'; fi` + +tests/printf_test-printf_unit_test.o: tests/printf_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT tests/printf_test-printf_unit_test.o -MD -MP -MF tests/$(DEPDIR)/printf_test-printf_unit_test.Tpo -c -o tests/printf_test-printf_unit_test.o `test -f 'tests/printf_unit_test.c' || echo '$(srcdir)/'`tests/printf_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/printf_test-printf_unit_test.Tpo tests/$(DEPDIR)/printf_test-printf_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/printf_unit_test.c' object='tests/printf_test-printf_unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o tests/printf_test-printf_unit_test.o `test -f 'tests/printf_unit_test.c' || echo '$(srcdir)/'`tests/printf_unit_test.c + +tests/printf_test-printf_unit_test.obj: tests/printf_unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT tests/printf_test-printf_unit_test.obj -MD -MP -MF tests/$(DEPDIR)/printf_test-printf_unit_test.Tpo -c -o tests/printf_test-printf_unit_test.obj `if test -f 'tests/printf_unit_test.c'; then $(CYGPATH_W) 'tests/printf_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/printf_unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/printf_test-printf_unit_test.Tpo tests/$(DEPDIR)/printf_test-printf_unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/printf_unit_test.c' object='tests/printf_test-printf_unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o tests/printf_test-printf_unit_test.obj `if test -f 'tests/printf_unit_test.c'; then $(CYGPATH_W) 'tests/printf_unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/printf_unit_test.c'; fi` + +tests/lib/printf_test-unit_test.o: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT tests/lib/printf_test-unit_test.o -MD -MP -MF tests/lib/$(DEPDIR)/printf_test-unit_test.Tpo -c -o tests/lib/printf_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/printf_test-unit_test.Tpo tests/lib/$(DEPDIR)/printf_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/printf_test-unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o tests/lib/printf_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c + +tests/lib/printf_test-unit_test.obj: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT tests/lib/printf_test-unit_test.obj -MD -MP -MF tests/lib/$(DEPDIR)/printf_test-unit_test.Tpo -c -o tests/lib/printf_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/printf_test-unit_test.Tpo tests/lib/$(DEPDIR)/printf_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/printf_test-unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o tests/lib/printf_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` + +grub-core/kern/printf_test-list.o: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/printf_test-list.o -MD -MP -MF grub-core/kern/$(DEPDIR)/printf_test-list.Tpo -c -o grub-core/kern/printf_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/printf_test-list.Tpo grub-core/kern/$(DEPDIR)/printf_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/printf_test-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/printf_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c + +grub-core/kern/printf_test-list.obj: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/printf_test-list.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/printf_test-list.Tpo -c -o grub-core/kern/printf_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/printf_test-list.Tpo grub-core/kern/$(DEPDIR)/printf_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/printf_test-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/printf_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` + +grub-core/kern/printf_test-misc.o: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/printf_test-misc.o -MD -MP -MF grub-core/kern/$(DEPDIR)/printf_test-misc.Tpo -c -o grub-core/kern/printf_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/printf_test-misc.Tpo grub-core/kern/$(DEPDIR)/printf_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/printf_test-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/printf_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c + +grub-core/kern/printf_test-misc.obj: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/printf_test-misc.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/printf_test-misc.Tpo -c -o grub-core/kern/printf_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/printf_test-misc.Tpo grub-core/kern/$(DEPDIR)/printf_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/printf_test-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/printf_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` + +grub-core/tests/lib/printf_test-test.o: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/printf_test-test.o -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/printf_test-test.Tpo -c -o grub-core/tests/lib/printf_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/printf_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/printf_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/printf_test-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/printf_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c + +grub-core/tests/lib/printf_test-test.obj: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/printf_test-test.obj -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/printf_test-test.Tpo -c -o grub-core/tests/lib/printf_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/printf_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/printf_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/printf_test-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(printf_test_CPPFLAGS) $(CPPFLAGS) $(printf_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/printf_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` + +tests/lib/priority_queue_unit_test-unit_test.o: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT tests/lib/priority_queue_unit_test-unit_test.o -MD -MP -MF tests/lib/$(DEPDIR)/priority_queue_unit_test-unit_test.Tpo -c -o tests/lib/priority_queue_unit_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/priority_queue_unit_test-unit_test.Tpo tests/lib/$(DEPDIR)/priority_queue_unit_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/priority_queue_unit_test-unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o tests/lib/priority_queue_unit_test-unit_test.o `test -f 'tests/lib/unit_test.c' || echo '$(srcdir)/'`tests/lib/unit_test.c + +tests/lib/priority_queue_unit_test-unit_test.obj: tests/lib/unit_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT tests/lib/priority_queue_unit_test-unit_test.obj -MD -MP -MF tests/lib/$(DEPDIR)/priority_queue_unit_test-unit_test.Tpo -c -o tests/lib/priority_queue_unit_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/priority_queue_unit_test-unit_test.Tpo tests/lib/$(DEPDIR)/priority_queue_unit_test-unit_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/unit_test.c' object='tests/lib/priority_queue_unit_test-unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o tests/lib/priority_queue_unit_test-unit_test.obj `if test -f 'tests/lib/unit_test.c'; then $(CYGPATH_W) 'tests/lib/unit_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/unit_test.c'; fi` + +grub-core/kern/priority_queue_unit_test-list.o: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/priority_queue_unit_test-list.o -MD -MP -MF grub-core/kern/$(DEPDIR)/priority_queue_unit_test-list.Tpo -c -o grub-core/kern/priority_queue_unit_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/priority_queue_unit_test-list.Tpo grub-core/kern/$(DEPDIR)/priority_queue_unit_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/priority_queue_unit_test-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/priority_queue_unit_test-list.o `test -f 'grub-core/kern/list.c' || echo '$(srcdir)/'`grub-core/kern/list.c + +grub-core/kern/priority_queue_unit_test-list.obj: grub-core/kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/priority_queue_unit_test-list.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/priority_queue_unit_test-list.Tpo -c -o grub-core/kern/priority_queue_unit_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/priority_queue_unit_test-list.Tpo grub-core/kern/$(DEPDIR)/priority_queue_unit_test-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/list.c' object='grub-core/kern/priority_queue_unit_test-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/priority_queue_unit_test-list.obj `if test -f 'grub-core/kern/list.c'; then $(CYGPATH_W) 'grub-core/kern/list.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/list.c'; fi` + +grub-core/kern/priority_queue_unit_test-misc.o: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/priority_queue_unit_test-misc.o -MD -MP -MF grub-core/kern/$(DEPDIR)/priority_queue_unit_test-misc.Tpo -c -o grub-core/kern/priority_queue_unit_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/priority_queue_unit_test-misc.Tpo grub-core/kern/$(DEPDIR)/priority_queue_unit_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/priority_queue_unit_test-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/priority_queue_unit_test-misc.o `test -f 'grub-core/kern/misc.c' || echo '$(srcdir)/'`grub-core/kern/misc.c + +grub-core/kern/priority_queue_unit_test-misc.obj: grub-core/kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/kern/priority_queue_unit_test-misc.obj -MD -MP -MF grub-core/kern/$(DEPDIR)/priority_queue_unit_test-misc.Tpo -c -o grub-core/kern/priority_queue_unit_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/kern/$(DEPDIR)/priority_queue_unit_test-misc.Tpo grub-core/kern/$(DEPDIR)/priority_queue_unit_test-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/kern/misc.c' object='grub-core/kern/priority_queue_unit_test-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/kern/priority_queue_unit_test-misc.obj `if test -f 'grub-core/kern/misc.c'; then $(CYGPATH_W) 'grub-core/kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/kern/misc.c'; fi` + +grub-core/tests/lib/priority_queue_unit_test-test.o: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/priority_queue_unit_test-test.o -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/priority_queue_unit_test-test.Tpo -c -o grub-core/tests/lib/priority_queue_unit_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/priority_queue_unit_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/priority_queue_unit_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/priority_queue_unit_test-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/priority_queue_unit_test-test.o `test -f 'grub-core/tests/lib/test.c' || echo '$(srcdir)/'`grub-core/tests/lib/test.c + +grub-core/tests/lib/priority_queue_unit_test-test.obj: grub-core/tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/tests/lib/priority_queue_unit_test-test.obj -MD -MP -MF grub-core/tests/lib/$(DEPDIR)/priority_queue_unit_test-test.Tpo -c -o grub-core/tests/lib/priority_queue_unit_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/tests/lib/$(DEPDIR)/priority_queue_unit_test-test.Tpo grub-core/tests/lib/$(DEPDIR)/priority_queue_unit_test-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/tests/lib/test.c' object='grub-core/tests/lib/priority_queue_unit_test-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/tests/lib/priority_queue_unit_test-test.obj `if test -f 'grub-core/tests/lib/test.c'; then $(CYGPATH_W) 'grub-core/tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/tests/lib/test.c'; fi` + +grub-core/lib/priority_queue_unit_test-priority_queue.o: grub-core/lib/priority_queue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/lib/priority_queue_unit_test-priority_queue.o -MD -MP -MF grub-core/lib/$(DEPDIR)/priority_queue_unit_test-priority_queue.Tpo -c -o grub-core/lib/priority_queue_unit_test-priority_queue.o `test -f 'grub-core/lib/priority_queue.c' || echo '$(srcdir)/'`grub-core/lib/priority_queue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/priority_queue_unit_test-priority_queue.Tpo grub-core/lib/$(DEPDIR)/priority_queue_unit_test-priority_queue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/priority_queue.c' object='grub-core/lib/priority_queue_unit_test-priority_queue.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/lib/priority_queue_unit_test-priority_queue.o `test -f 'grub-core/lib/priority_queue.c' || echo '$(srcdir)/'`grub-core/lib/priority_queue.c + +grub-core/lib/priority_queue_unit_test-priority_queue.obj: grub-core/lib/priority_queue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -MT grub-core/lib/priority_queue_unit_test-priority_queue.obj -MD -MP -MF grub-core/lib/$(DEPDIR)/priority_queue_unit_test-priority_queue.Tpo -c -o grub-core/lib/priority_queue_unit_test-priority_queue.obj `if test -f 'grub-core/lib/priority_queue.c'; then $(CYGPATH_W) 'grub-core/lib/priority_queue.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/priority_queue.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) grub-core/lib/$(DEPDIR)/priority_queue_unit_test-priority_queue.Tpo grub-core/lib/$(DEPDIR)/priority_queue_unit_test-priority_queue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub-core/lib/priority_queue.c' object='grub-core/lib/priority_queue_unit_test-priority_queue.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(priority_queue_unit_test_CFLAGS) $(CFLAGS) -c -o grub-core/lib/priority_queue_unit_test-priority_queue.obj `if test -f 'grub-core/lib/priority_queue.c'; then $(CYGPATH_W) 'grub-core/lib/priority_queue.c'; else $(CYGPATH_W) '$(srcdir)/grub-core/lib/priority_queue.c'; fi` + +.cc.o: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +tests/priority_queue_unit_test-priority_queue_unit_test.o: tests/priority_queue_unit_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/priority_queue_unit_test-priority_queue_unit_test.o -MD -MP -MF tests/$(DEPDIR)/priority_queue_unit_test-priority_queue_unit_test.Tpo -c -o tests/priority_queue_unit_test-priority_queue_unit_test.o `test -f 'tests/priority_queue_unit_test.cc' || echo '$(srcdir)/'`tests/priority_queue_unit_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/priority_queue_unit_test-priority_queue_unit_test.Tpo tests/$(DEPDIR)/priority_queue_unit_test-priority_queue_unit_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tests/priority_queue_unit_test.cc' object='tests/priority_queue_unit_test-priority_queue_unit_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/priority_queue_unit_test-priority_queue_unit_test.o `test -f 'tests/priority_queue_unit_test.cc' || echo '$(srcdir)/'`tests/priority_queue_unit_test.cc + +tests/priority_queue_unit_test-priority_queue_unit_test.obj: tests/priority_queue_unit_test.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/priority_queue_unit_test-priority_queue_unit_test.obj -MD -MP -MF tests/$(DEPDIR)/priority_queue_unit_test-priority_queue_unit_test.Tpo -c -o tests/priority_queue_unit_test-priority_queue_unit_test.obj `if test -f 'tests/priority_queue_unit_test.cc'; then $(CYGPATH_W) 'tests/priority_queue_unit_test.cc'; else $(CYGPATH_W) '$(srcdir)/tests/priority_queue_unit_test.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/priority_queue_unit_test-priority_queue_unit_test.Tpo tests/$(DEPDIR)/priority_queue_unit_test-priority_queue_unit_test.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tests/priority_queue_unit_test.cc' object='tests/priority_queue_unit_test-priority_queue_unit_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_unit_test_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/priority_queue_unit_test-priority_queue_unit_test.obj `if test -f 'tests/priority_queue_unit_test.cc'; then $(CYGPATH_W) 'tests/priority_queue_unit_test.cc'; else $(CYGPATH_W) '$(srcdir)/tests/priority_queue_unit_test.cc'; fi` +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-man8: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man8dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.8[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ + done; } + +uninstall-man8: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man8dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.8[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) +install-dist_grubconfDATA: $(dist_grubconf_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_grubconf_DATA)'; test -n "$(grubconfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(grubconfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(grubconfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(grubconfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(grubconfdir)" || exit $$?; \ + done + +uninstall-dist_grubconfDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_grubconf_DATA)'; test -n "$(grubconfdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(grubconfdir)'; $(am__uninstall_files_from_dir) +install-pkgdataDATA: $(pkgdata_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ + done + +uninstall-pkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) +install-platformDATA: $(platform_DATA) + @$(NORMAL_INSTALL) + @list='$(platform_DATA)'; test -n "$(platformdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(platformdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(platformdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(platformdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(platformdir)" || exit $$?; \ + done + +uninstall-platformDATA: + @$(NORMAL_UNINSTALL) + @list='$(platform_DATA)'; test -n "$(platformdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(platformdir)'; $(am__uninstall_files_from_dir) +install-starfieldDATA: $(starfield_DATA) + @$(NORMAL_INSTALL) + @list='$(starfield_DATA)'; test -n "$(starfielddir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(starfielddir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(starfielddir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(starfielddir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(starfielddir)" || exit $$?; \ + done + +uninstall-starfieldDATA: + @$(NORMAL_UNINSTALL) + @list='$(starfield_DATA)'; test -n "$(starfielddir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(starfielddir)'; $(am__uninstall_files_from_dir) +install-nodist_platformHEADERS: $(nodist_platform_HEADERS) + @$(NORMAL_INSTALL) + @list='$(nodist_platform_HEADERS)'; test -n "$(platformdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(platformdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(platformdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(platformdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(platformdir)" || exit $$?; \ + done + +uninstall-nodist_platformHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nodist_platform_HEADERS)'; test -n "$(platformdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(platformdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) $(check_SCRIPTS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +example_unit_test.log: example_unit_test$(EXEEXT) + @p='example_unit_test$(EXEEXT)'; \ + b='example_unit_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +printf_test.log: printf_test$(EXEEXT) + @p='printf_test$(EXEEXT)'; \ + b='printf_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +date_test.log: date_test$(EXEEXT) + @p='date_test$(EXEEXT)'; \ + b='date_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +priority_queue_unit_test.log: priority_queue_unit_test$(EXEEXT) + @p='priority_queue_unit_test$(EXEEXT)'; \ + b='priority_queue_unit_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +cmp_test.log: cmp_test$(EXEEXT) + @p='cmp_test$(EXEEXT)'; \ + b='cmp_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +ext234_test.log: ext234_test + @p='ext234_test'; \ + b='ext234_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +squashfs_test.log: squashfs_test + @p='squashfs_test'; \ + b='squashfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +iso9660_test.log: iso9660_test + @p='iso9660_test'; \ + b='iso9660_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +hfsplus_test.log: hfsplus_test + @p='hfsplus_test'; \ + b='hfsplus_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +ntfs_test.log: ntfs_test + @p='ntfs_test'; \ + b='ntfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +reiserfs_test.log: reiserfs_test + @p='reiserfs_test'; \ + b='reiserfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +fat_test.log: fat_test + @p='fat_test'; \ + b='fat_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +minixfs_test.log: minixfs_test + @p='minixfs_test'; \ + b='minixfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +xfs_test.log: xfs_test + @p='xfs_test'; \ + b='xfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +nilfs2_test.log: nilfs2_test + @p='nilfs2_test'; \ + b='nilfs2_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +romfs_test.log: romfs_test + @p='romfs_test'; \ + b='romfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +exfat_test.log: exfat_test + @p='exfat_test'; \ + b='exfat_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +tar_test.log: tar_test + @p='tar_test'; \ + b='tar_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +udf_test.log: udf_test + @p='udf_test'; \ + b='udf_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +hfs_test.log: hfs_test + @p='hfs_test'; \ + b='hfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +jfs_test.log: jfs_test + @p='jfs_test'; \ + b='jfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +btrfs_test.log: btrfs_test + @p='btrfs_test'; \ + b='btrfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +zfs_test.log: zfs_test + @p='zfs_test'; \ + b='zfs_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +cpio_test.log: cpio_test + @p='cpio_test'; \ + b='cpio_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +example_scripted_test.log: example_scripted_test + @p='example_scripted_test'; \ + b='example_scripted_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +gettext_strings_test.log: gettext_strings_test + @p='gettext_strings_test'; \ + b='gettext_strings_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +pata_test.log: pata_test + @p='pata_test'; \ + b='pata_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +ahci_test.log: ahci_test + @p='ahci_test'; \ + b='ahci_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +uhci_test.log: uhci_test + @p='uhci_test'; \ + b='uhci_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +ohci_test.log: ohci_test + @p='ohci_test'; \ + b='ohci_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +ehci_test.log: ehci_test + @p='ehci_test'; \ + b='ehci_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +example_grub_script_test.log: example_grub_script_test + @p='example_grub_script_test'; \ + b='example_grub_script_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_eval.log: grub_script_eval + @p='grub_script_eval'; \ + b='grub_script_eval'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_test.log: grub_script_test + @p='grub_script_test'; \ + b='grub_script_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_echo1.log: grub_script_echo1 + @p='grub_script_echo1'; \ + b='grub_script_echo1'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_leading_whitespace.log: grub_script_leading_whitespace + @p='grub_script_leading_whitespace'; \ + b='grub_script_leading_whitespace'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_echo_keywords.log: grub_script_echo_keywords + @p='grub_script_echo_keywords'; \ + b='grub_script_echo_keywords'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_vars1.log: grub_script_vars1 + @p='grub_script_vars1'; \ + b='grub_script_vars1'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_for1.log: grub_script_for1 + @p='grub_script_for1'; \ + b='grub_script_for1'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_while1.log: grub_script_while1 + @p='grub_script_while1'; \ + b='grub_script_while1'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_if.log: grub_script_if + @p='grub_script_if'; \ + b='grub_script_if'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_blanklines.log: grub_script_blanklines + @p='grub_script_blanklines'; \ + b='grub_script_blanklines'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_final_semicolon.log: grub_script_final_semicolon + @p='grub_script_final_semicolon'; \ + b='grub_script_final_semicolon'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_dollar.log: grub_script_dollar + @p='grub_script_dollar'; \ + b='grub_script_dollar'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_comments.log: grub_script_comments + @p='grub_script_comments'; \ + b='grub_script_comments'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_functions.log: grub_script_functions + @p='grub_script_functions'; \ + b='grub_script_functions'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_break.log: grub_script_break + @p='grub_script_break'; \ + b='grub_script_break'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_continue.log: grub_script_continue + @p='grub_script_continue'; \ + b='grub_script_continue'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_shift.log: grub_script_shift + @p='grub_script_shift'; \ + b='grub_script_shift'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_blockarg.log: grub_script_blockarg + @p='grub_script_blockarg'; \ + b='grub_script_blockarg'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_setparams.log: grub_script_setparams + @p='grub_script_setparams'; \ + b='grub_script_setparams'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_return.log: grub_script_return + @p='grub_script_return'; \ + b='grub_script_return'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_cmd_regexp.log: grub_cmd_regexp + @p='grub_cmd_regexp'; \ + b='grub_cmd_regexp'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_cmd_date.log: grub_cmd_date + @p='grub_cmd_date'; \ + b='grub_cmd_date'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_cmd_set_date.log: grub_cmd_set_date + @p='grub_cmd_set_date'; \ + b='grub_cmd_set_date'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_cmd_sleep.log: grub_cmd_sleep + @p='grub_cmd_sleep'; \ + b='grub_cmd_sleep'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_expansion.log: grub_script_expansion + @p='grub_script_expansion'; \ + b='grub_script_expansion'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_not.log: grub_script_not + @p='grub_script_not'; \ + b='grub_script_not'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_no_commands.log: grub_script_no_commands + @p='grub_script_no_commands'; \ + b='grub_script_no_commands'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +partmap_test.log: partmap_test + @p='partmap_test'; \ + b='partmap_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +hddboot_test.log: hddboot_test + @p='hddboot_test'; \ + b='hddboot_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +fddboot_test.log: fddboot_test + @p='fddboot_test'; \ + b='fddboot_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +cdboot_test.log: cdboot_test + @p='cdboot_test'; \ + b='cdboot_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +netboot_test.log: netboot_test + @p='netboot_test'; \ + b='netboot_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +pseries_test.log: pseries_test + @p='pseries_test'; \ + b='pseries_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +core_compress_test.log: core_compress_test + @p='core_compress_test'; \ + b='core_compress_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +xzcompress_test.log: xzcompress_test + @p='xzcompress_test'; \ + b='xzcompress_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +gzcompress_test.log: gzcompress_test + @p='gzcompress_test'; \ + b='gzcompress_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +lzocompress_test.log: lzocompress_test + @p='lzocompress_test'; \ + b='lzocompress_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_cmd_echo.log: grub_cmd_echo + @p='grub_cmd_echo'; \ + b='grub_cmd_echo'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +help_test.log: help_test + @p='help_test'; \ + b='help_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_gettext.log: grub_script_gettext + @p='grub_script_gettext'; \ + b='grub_script_gettext'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_escape_comma.log: grub_script_escape_comma + @p='grub_script_escape_comma'; \ + b='grub_script_escape_comma'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_script_strcmp.log: grub_script_strcmp + @p='grub_script_strcmp'; \ + b='grub_script_strcmp'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_sha512sum.log: test_sha512sum + @p='test_sha512sum'; \ + b='test_sha512sum'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +test_unset.log: test_unset + @p='test_unset'; \ + b='test_unset'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_func_test.log: grub_func_test + @p='grub_func_test'; \ + b='grub_func_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_cmd_tr.log: grub_cmd_tr + @p='grub_cmd_tr'; \ + b='grub_cmd_tr'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +file_filter_test.log: file_filter_test + @p='file_filter_test'; \ + b='file_filter_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +grub_cmd_test.log: grub_cmd_test + @p='grub_cmd_test'; \ + b='grub_cmd_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +syslinux_test.log: syslinux_test + @p='syslinux_test'; \ + b='syslinux_test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \ + $(HEADERS) config-util.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(platformdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(grubconfdir)" "$(DESTDIR)$(platformdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(grubconfdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(platformdir)" "$(DESTDIR)$(starfielddir)" "$(DESTDIR)$(platformdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f grub-core/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/$(am__dirstamp) + -rm -f grub-core/commands/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/commands/$(am__dirstamp) + -rm -f grub-core/disk/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/disk/$(am__dirstamp) + -rm -f grub-core/font/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/font/$(am__dirstamp) + -rm -f grub-core/fs/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/fs/$(am__dirstamp) + -rm -f grub-core/fs/zfs/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/fs/zfs/$(am__dirstamp) + -rm -f grub-core/gfxmenu/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/gfxmenu/$(am__dirstamp) + -rm -f grub-core/io/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/io/$(am__dirstamp) + -rm -f grub-core/kern/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/kern/$(am__dirstamp) + -rm -f grub-core/kern/arm/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/kern/arm/$(am__dirstamp) + -rm -f grub-core/kern/arm64/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/kern/arm64/$(am__dirstamp) + -rm -f grub-core/kern/emu/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/kern/emu/$(am__dirstamp) + -rm -f grub-core/kern/ia64/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/kern/ia64/$(am__dirstamp) + -rm -f grub-core/lib/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/lib/$(am__dirstamp) + -rm -f grub-core/lib/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/lib/i386/pc/$(am__dirstamp) + -rm -f grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/lib/libgcrypt-grub/cipher/$(am__dirstamp) + -rm -f grub-core/lib/minilzo/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/lib/minilzo/$(am__dirstamp) + -rm -f grub-core/lib/xzembed/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/lib/xzembed/$(am__dirstamp) + -rm -f grub-core/loader/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/loader/$(am__dirstamp) + -rm -f grub-core/loader/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/loader/i386/$(am__dirstamp) + -rm -f grub-core/normal/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/normal/$(am__dirstamp) + -rm -f grub-core/osdep/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/osdep/$(am__dirstamp) + -rm -f grub-core/osdep/devmapper/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/osdep/devmapper/$(am__dirstamp) + -rm -f grub-core/osdep/unix/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/osdep/unix/$(am__dirstamp) + -rm -f grub-core/partmap/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/partmap/$(am__dirstamp) + -rm -f grub-core/script/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/script/$(am__dirstamp) + -rm -f grub-core/tests/lib/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/tests/lib/$(am__dirstamp) + -rm -f grub-core/video/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/video/$(am__dirstamp) + -rm -f grub-core/video/fb/$(DEPDIR)/$(am__dirstamp) + -rm -f grub-core/video/fb/$(am__dirstamp) + -rm -f tests/$(DEPDIR)/$(am__dirstamp) + -rm -f tests/$(am__dirstamp) + -rm -f tests/lib/$(DEPDIR)/$(am__dirstamp) + -rm -f tests/lib/$(am__dirstamp) + -rm -f util/$(DEPDIR)/$(am__dirstamp) + -rm -f util/$(am__dirstamp) + -rm -f util/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f util/ieee1275/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-recursive + +clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-noinstLIBRARIES clean-noinstPROGRAMS \ + clean-platformPROGRAMS clean-sbinPROGRAMS mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) grub-core/$(DEPDIR) grub-core/commands/$(DEPDIR) grub-core/disk/$(DEPDIR) grub-core/font/$(DEPDIR) grub-core/fs/$(DEPDIR) grub-core/fs/zfs/$(DEPDIR) grub-core/gfxmenu/$(DEPDIR) grub-core/io/$(DEPDIR) grub-core/kern/$(DEPDIR) grub-core/kern/arm/$(DEPDIR) grub-core/kern/arm64/$(DEPDIR) grub-core/kern/emu/$(DEPDIR) grub-core/kern/ia64/$(DEPDIR) grub-core/lib/$(DEPDIR) grub-core/lib/i386/pc/$(DEPDIR) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR) grub-core/lib/minilzo/$(DEPDIR) grub-core/lib/xzembed/$(DEPDIR) grub-core/loader/$(DEPDIR) grub-core/loader/i386/$(DEPDIR) grub-core/normal/$(DEPDIR) grub-core/osdep/$(DEPDIR) grub-core/osdep/devmapper/$(DEPDIR) grub-core/osdep/unix/$(DEPDIR) grub-core/partmap/$(DEPDIR) grub-core/script/$(DEPDIR) grub-core/tests/lib/$(DEPDIR) grub-core/video/$(DEPDIR) grub-core/video/fb/$(DEPDIR) tests/$(DEPDIR) tests/lib/$(DEPDIR) util/$(DEPDIR) util/ieee1275/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-dist_grubconfDATA install-grubconfSCRIPTS \ + install-man install-nodist_platformHEADERS install-pkgdataDATA \ + install-platformDATA install-platformPROGRAMS \ + install-platformSCRIPTS install-starfieldDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-binSCRIPTS \ + install-sbinPROGRAMS install-sbinSCRIPTS + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: install-man1 install-man8 + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) grub-core/$(DEPDIR) grub-core/commands/$(DEPDIR) grub-core/disk/$(DEPDIR) grub-core/font/$(DEPDIR) grub-core/fs/$(DEPDIR) grub-core/fs/zfs/$(DEPDIR) grub-core/gfxmenu/$(DEPDIR) grub-core/io/$(DEPDIR) grub-core/kern/$(DEPDIR) grub-core/kern/arm/$(DEPDIR) grub-core/kern/arm64/$(DEPDIR) grub-core/kern/emu/$(DEPDIR) grub-core/kern/ia64/$(DEPDIR) grub-core/lib/$(DEPDIR) grub-core/lib/i386/pc/$(DEPDIR) grub-core/lib/libgcrypt-grub/cipher/$(DEPDIR) grub-core/lib/minilzo/$(DEPDIR) grub-core/lib/xzembed/$(DEPDIR) grub-core/loader/$(DEPDIR) grub-core/loader/i386/$(DEPDIR) grub-core/normal/$(DEPDIR) grub-core/osdep/$(DEPDIR) grub-core/osdep/devmapper/$(DEPDIR) grub-core/osdep/unix/$(DEPDIR) grub-core/partmap/$(DEPDIR) grub-core/script/$(DEPDIR) grub-core/tests/lib/$(DEPDIR) grub-core/video/$(DEPDIR) grub-core/video/fb/$(DEPDIR) tests/$(DEPDIR) tests/lib/$(DEPDIR) util/$(DEPDIR) util/ieee1275/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ + uninstall-dist_grubconfDATA uninstall-grubconfSCRIPTS \ + uninstall-man uninstall-nodist_platformHEADERS \ + uninstall-pkgdataDATA uninstall-platformDATA \ + uninstall-platformPROGRAMS uninstall-platformSCRIPTS \ + uninstall-sbinPROGRAMS uninstall-sbinSCRIPTS \ + uninstall-starfieldDATA + +uninstall-man: uninstall-man1 uninstall-man8 + +.MAKE: $(am__recursive_targets) all check check-am install install-am \ + install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-TESTS check-am clean clean-binPROGRAMS \ + clean-checkPROGRAMS clean-cscope clean-generic \ + clean-noinstLIBRARIES clean-noinstPROGRAMS \ + clean-platformPROGRAMS clean-sbinPROGRAMS cscope cscopelist-am \ + ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-binSCRIPTS install-data \ + install-data-am install-dist_grubconfDATA install-dvi \ + install-dvi-am install-exec install-exec-am \ + install-grubconfSCRIPTS install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-man8 install-nodist_platformHEADERS install-pdf \ + install-pdf-am install-pkgdataDATA install-platformDATA \ + install-platformPROGRAMS install-platformSCRIPTS install-ps \ + install-ps-am install-sbinPROGRAMS install-sbinSCRIPTS \ + install-starfieldDATA install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am recheck tags tags-am \ + uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-binSCRIPTS uninstall-dist_grubconfDATA \ + uninstall-grubconfSCRIPTS uninstall-man uninstall-man1 \ + uninstall-man8 uninstall-nodist_platformHEADERS \ + uninstall-pkgdataDATA uninstall-platformDATA \ + uninstall-platformPROGRAMS uninstall-platformSCRIPTS \ + uninstall-sbinPROGRAMS uninstall-sbinSCRIPTS \ + uninstall-starfieldDATA + +.PRECIOUS: Makefile + + +export LC_COLLATE := C +unexport LC_ALL + +# Rules for Automake input + +.PRECIOUS: $(top_srcdir)/Makefile.util.am +$(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def + python $^ > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am +$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def + if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./autogen.sh manually." >&2; exit 1; fi + python $^ > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +@COND_MAN_PAGES_TRUE@grub-mkimage.1: grub-mkimage +@COND_MAN_PAGES_TRUE@ chmod a+x grub-mkimage +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkimage.h2m -o $@ grub-mkimage + +@COND_MAN_PAGES_TRUE@grub-mkrelpath.1: grub-mkrelpath +@COND_MAN_PAGES_TRUE@ chmod a+x grub-mkrelpath +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkrelpath.h2m -o $@ grub-mkrelpath + +@COND_MAN_PAGES_TRUE@grub-script-check.1: grub-script-check +@COND_MAN_PAGES_TRUE@ chmod a+x grub-script-check +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-script-check.h2m -o $@ grub-script-check + +@COND_MAN_PAGES_TRUE@grub-editenv.1: grub-editenv +@COND_MAN_PAGES_TRUE@ chmod a+x grub-editenv +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-editenv.h2m -o $@ grub-editenv + +@COND_MAN_PAGES_TRUE@grub-mkpasswd-pbkdf2.1: grub-mkpasswd-pbkdf2 +@COND_MAN_PAGES_TRUE@ chmod a+x grub-mkpasswd-pbkdf2 +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkpasswd-pbkdf2.h2m -o $@ grub-mkpasswd-pbkdf2 + +@COND_APPLE_LINKER_TRUE@@COND_MAN_PAGES_TRUE@grub-macho2img.1: grub-macho2img +@COND_APPLE_LINKER_TRUE@@COND_MAN_PAGES_TRUE@ chmod a+x grub-macho2img +@COND_APPLE_LINKER_TRUE@@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-macho2img.h2m -o $@ grub-macho2img + +@COND_MAN_PAGES_TRUE@grub-fstest.1: grub-fstest +@COND_MAN_PAGES_TRUE@ chmod a+x grub-fstest +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-fstest.h2m -o $@ grub-fstest + +@COND_GRUB_MOUNT_TRUE@@COND_MAN_PAGES_TRUE@grub-mount.1: grub-mount +@COND_GRUB_MOUNT_TRUE@@COND_MAN_PAGES_TRUE@ chmod a+x grub-mount +@COND_GRUB_MOUNT_TRUE@@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mount.h2m -o $@ grub-mount + +@COND_GRUB_MKFONT_TRUE@@COND_MAN_PAGES_TRUE@grub-mkfont.1: grub-mkfont +@COND_GRUB_MKFONT_TRUE@@COND_MAN_PAGES_TRUE@ chmod a+x grub-mkfont +@COND_GRUB_MKFONT_TRUE@@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkfont.h2m -o $@ grub-mkfont + +@COND_MAN_PAGES_TRUE@grub-probe.8: grub-probe +@COND_MAN_PAGES_TRUE@ chmod a+x grub-probe +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-probe.h2m -o $@ grub-probe + +@COND_MAN_PAGES_TRUE@grub-bios-setup.8: grub-bios-setup +@COND_MAN_PAGES_TRUE@ chmod a+x grub-bios-setup +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-bios-setup.h2m -o $@ grub-bios-setup + +@COND_MAN_PAGES_TRUE@grub-sparc64-setup.8: grub-sparc64-setup +@COND_MAN_PAGES_TRUE@ chmod a+x grub-sparc64-setup +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-sparc64-setup.h2m -o $@ grub-sparc64-setup + +@COND_MAN_PAGES_TRUE@grub-ofpathname.8: grub-ofpathname +@COND_MAN_PAGES_TRUE@ chmod a+x grub-ofpathname +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-ofpathname.h2m -o $@ grub-ofpathname + +@COND_MAN_PAGES_TRUE@grub-mklayout.1: grub-mklayout +@COND_MAN_PAGES_TRUE@ chmod a+x grub-mklayout +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mklayout.h2m -o $@ grub-mklayout + +@COND_MAN_PAGES_TRUE@grub-macbless.8: grub-macbless +@COND_MAN_PAGES_TRUE@ chmod a+x grub-macbless +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-macbless.h2m -o $@ grub-macbless + +@COND_HAVE_EXEC_TRUE@@COND_MAN_PAGES_TRUE@grub-mkrescue.1: grub-mkrescue +@COND_HAVE_EXEC_TRUE@@COND_MAN_PAGES_TRUE@ chmod a+x grub-mkrescue +@COND_HAVE_EXEC_TRUE@@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkrescue.h2m -o $@ grub-mkrescue + +@COND_MAN_PAGES_TRUE@grub-mkstandalone.1: grub-mkstandalone +@COND_MAN_PAGES_TRUE@ chmod a+x grub-mkstandalone +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkstandalone.h2m -o $@ grub-mkstandalone + +@COND_MAN_PAGES_TRUE@grub-install.8: grub-install +@COND_MAN_PAGES_TRUE@ chmod a+x grub-install +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-install.h2m -o $@ grub-install + +@COND_MAN_PAGES_TRUE@grub-mknetdir.1: grub-mknetdir +@COND_MAN_PAGES_TRUE@ chmod a+x grub-mknetdir +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mknetdir.h2m -o $@ grub-mknetdir + +@COND_MAN_PAGES_TRUE@grub-menulst2cfg.1: grub-menulst2cfg +@COND_MAN_PAGES_TRUE@ chmod a+x grub-menulst2cfg +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-menulst2cfg.h2m -o $@ grub-menulst2cfg + +@COND_MAN_PAGES_TRUE@grub-syslinux2cfg.1: grub-syslinux2cfg +@COND_MAN_PAGES_TRUE@ chmod a+x grub-syslinux2cfg +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-syslinux2cfg.h2m -o $@ grub-syslinux2cfg + +@COND_MAN_PAGES_TRUE@grub-glue-efi.1: grub-glue-efi +@COND_MAN_PAGES_TRUE@ chmod a+x grub-glue-efi +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-glue-efi.h2m -o $@ grub-glue-efi + +@COND_MAN_PAGES_TRUE@grub-render-label.1: grub-render-label +@COND_MAN_PAGES_TRUE@ chmod a+x grub-render-label +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-render-label.h2m -o $@ grub-render-label + +@COND_MAN_PAGES_TRUE@grub-file.1: grub-file +@COND_MAN_PAGES_TRUE@ chmod a+x grub-file +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-file.h2m -o $@ grub-file + +00_header: $(top_builddir)/config.status util/grub.d/00_header.in + (for x in util/grub.d/00_header.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 00_header + +@COND_HOST_WINDOWS_TRUE@10_windows: $(top_builddir)/config.status util/grub.d/10_windows.in +@COND_HOST_WINDOWS_TRUE@ (for x in util/grub.d/10_windows.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_WINDOWS_TRUE@ chmod a+x 10_windows + +@COND_HOST_HURD_TRUE@10_hurd: $(top_builddir)/config.status util/grub.d/10_hurd.in +@COND_HOST_HURD_TRUE@ (for x in util/grub.d/10_hurd.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_HURD_TRUE@ chmod a+x 10_hurd + +@COND_HOST_KFREEBSD_TRUE@10_kfreebsd: $(top_builddir)/config.status util/grub.d/10_kfreebsd.in +@COND_HOST_KFREEBSD_TRUE@ (for x in util/grub.d/10_kfreebsd.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_KFREEBSD_TRUE@ chmod a+x 10_kfreebsd + +@COND_HOST_ILLUMOS_TRUE@10_illumos: $(top_builddir)/config.status util/grub.d/10_illumos.in +@COND_HOST_ILLUMOS_TRUE@ (for x in util/grub.d/10_illumos.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_ILLUMOS_TRUE@ chmod a+x 10_illumos + +@COND_HOST_NETBSD_TRUE@10_netbsd: $(top_builddir)/config.status util/grub.d/10_netbsd.in +@COND_HOST_NETBSD_TRUE@ (for x in util/grub.d/10_netbsd.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_NETBSD_TRUE@ chmod a+x 10_netbsd + +@COND_HOST_LINUX_TRUE@10_linux: $(top_builddir)/config.status util/grub.d/10_linux.in +@COND_HOST_LINUX_TRUE@ (for x in util/grub.d/10_linux.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_LINUX_TRUE@ chmod a+x 10_linux + +@COND_HOST_XNU_TRUE@10_xnu: $(top_builddir)/config.status util/grub.d/10_xnu.in +@COND_HOST_XNU_TRUE@ (for x in util/grub.d/10_xnu.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_XNU_TRUE@ chmod a+x 10_xnu + +@COND_HOST_LINUX_TRUE@20_linux_xen: $(top_builddir)/config.status util/grub.d/20_linux_xen.in +@COND_HOST_LINUX_TRUE@ (for x in util/grub.d/20_linux_xen.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_HOST_LINUX_TRUE@ chmod a+x 20_linux_xen + +30_os-prober: $(top_builddir)/config.status util/grub.d/30_os-prober.in + (for x in util/grub.d/30_os-prober.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 30_os-prober + +40_custom: $(top_builddir)/config.status util/grub.d/40_custom.in + (for x in util/grub.d/40_custom.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 40_custom + +41_custom: $(top_builddir)/config.status util/grub.d/41_custom.in + (for x in util/grub.d/41_custom.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 41_custom + +@COND_MAN_PAGES_TRUE@grub-mkconfig.8: grub-mkconfig grub-mkconfig_lib +@COND_MAN_PAGES_TRUE@ chmod a+x grub-mkconfig +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-mkconfig.h2m -o $@ grub-mkconfig + +grub-mkconfig: $(top_builddir)/config.status util/grub-mkconfig.in + (for x in util/grub-mkconfig.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-mkconfig + +@COND_MAN_PAGES_TRUE@grub-set-default.8: grub-set-default grub-mkconfig_lib +@COND_MAN_PAGES_TRUE@ chmod a+x grub-set-default +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-set-default.h2m -o $@ grub-set-default + +grub-set-default: $(top_builddir)/config.status util/grub-set-default.in + (for x in util/grub-set-default.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-set-default + +@COND_MAN_PAGES_TRUE@grub-reboot.8: grub-reboot grub-mkconfig_lib +@COND_MAN_PAGES_TRUE@ chmod a+x grub-reboot +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-reboot.h2m -o $@ grub-reboot + +grub-reboot: $(top_builddir)/config.status util/grub-reboot.in + (for x in util/grub-reboot.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-reboot + +grub-mkconfig_lib: $(top_builddir)/config.status util/grub-mkconfig_lib.in + (for x in util/grub-mkconfig_lib.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-mkconfig_lib + +@COND_MAN_PAGES_TRUE@grub-kbdcomp.1: grub-kbdcomp grub-mkconfig_lib +@COND_MAN_PAGES_TRUE@ chmod a+x grub-kbdcomp +@COND_MAN_PAGES_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-kbdcomp.h2m -o $@ grub-kbdcomp + +grub-kbdcomp: $(top_builddir)/config.status util/grub-kbdcomp.in + (for x in util/grub-kbdcomp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-kbdcomp + +grub-shell: $(top_builddir)/config.status tests/util/grub-shell.in + (for x in tests/util/grub-shell.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-shell + +grub-shell-tester: $(top_builddir)/config.status tests/util/grub-shell-tester.in + (for x in tests/util/grub-shell-tester.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-shell-tester + +grub-fs-tester: $(top_builddir)/config.status tests/util/grub-fs-tester.in garbage-gen$(BUILD_EXEEXT) + (for x in tests/util/grub-fs-tester.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-fs-tester + +ext234_test: $(top_builddir)/config.status tests/ext234_test.in + (for x in tests/ext234_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ext234_test + +squashfs_test: $(top_builddir)/config.status tests/squashfs_test.in + (for x in tests/squashfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x squashfs_test + +iso9660_test: $(top_builddir)/config.status tests/iso9660_test.in + (for x in tests/iso9660_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x iso9660_test + +hfsplus_test: $(top_builddir)/config.status tests/hfsplus_test.in + (for x in tests/hfsplus_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x hfsplus_test + +ntfs_test: $(top_builddir)/config.status tests/ntfs_test.in + (for x in tests/ntfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ntfs_test + +reiserfs_test: $(top_builddir)/config.status tests/reiserfs_test.in + (for x in tests/reiserfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x reiserfs_test + +fat_test: $(top_builddir)/config.status tests/fat_test.in + (for x in tests/fat_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x fat_test + +minixfs_test: $(top_builddir)/config.status tests/minixfs_test.in + (for x in tests/minixfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x minixfs_test + +xfs_test: $(top_builddir)/config.status tests/xfs_test.in + (for x in tests/xfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x xfs_test + +nilfs2_test: $(top_builddir)/config.status tests/nilfs2_test.in + (for x in tests/nilfs2_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x nilfs2_test + +romfs_test: $(top_builddir)/config.status tests/romfs_test.in + (for x in tests/romfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x romfs_test + +exfat_test: $(top_builddir)/config.status tests/exfat_test.in + (for x in tests/exfat_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x exfat_test + +tar_test: $(top_builddir)/config.status tests/tar_test.in + (for x in tests/tar_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x tar_test + +udf_test: $(top_builddir)/config.status tests/udf_test.in + (for x in tests/udf_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x udf_test + +hfs_test: $(top_builddir)/config.status tests/hfs_test.in + (for x in tests/hfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x hfs_test + +jfs_test: $(top_builddir)/config.status tests/jfs_test.in + (for x in tests/jfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x jfs_test + +btrfs_test: $(top_builddir)/config.status tests/btrfs_test.in + (for x in tests/btrfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x btrfs_test + +zfs_test: $(top_builddir)/config.status tests/zfs_test.in + (for x in tests/zfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x zfs_test + +cpio_test: $(top_builddir)/config.status tests/cpio_test.in + (for x in tests/cpio_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x cpio_test + +example_scripted_test: $(top_builddir)/config.status tests/example_scripted_test.in + (for x in tests/example_scripted_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x example_scripted_test + +gettext_strings_test: $(top_builddir)/config.status tests/gettext_strings_test.in + (for x in tests/gettext_strings_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gettext_strings_test + +pata_test: $(top_builddir)/config.status tests/pata_test.in + (for x in tests/pata_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x pata_test + +ahci_test: $(top_builddir)/config.status tests/ahci_test.in + (for x in tests/ahci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ahci_test + +uhci_test: $(top_builddir)/config.status tests/uhci_test.in + (for x in tests/uhci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x uhci_test + +ohci_test: $(top_builddir)/config.status tests/ohci_test.in + (for x in tests/ohci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ohci_test + +ehci_test: $(top_builddir)/config.status tests/ehci_test.in + (for x in tests/ehci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ehci_test + +example_grub_script_test: $(top_builddir)/config.status tests/example_grub_script_test.in + (for x in tests/example_grub_script_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x example_grub_script_test + +grub_script_eval: $(top_builddir)/config.status tests/grub_script_eval.in + (for x in tests/grub_script_eval.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_eval + +grub_script_test: $(top_builddir)/config.status tests/grub_script_test.in + (for x in tests/grub_script_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_test + +grub_script_echo1: $(top_builddir)/config.status tests/grub_script_echo1.in + (for x in tests/grub_script_echo1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_echo1 + +grub_script_leading_whitespace: $(top_builddir)/config.status tests/grub_script_leading_whitespace.in + (for x in tests/grub_script_leading_whitespace.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_leading_whitespace + +grub_script_echo_keywords: $(top_builddir)/config.status tests/grub_script_echo_keywords.in + (for x in tests/grub_script_echo_keywords.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_echo_keywords + +grub_script_vars1: $(top_builddir)/config.status tests/grub_script_vars1.in + (for x in tests/grub_script_vars1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_vars1 + +grub_script_for1: $(top_builddir)/config.status tests/grub_script_for1.in + (for x in tests/grub_script_for1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_for1 + +grub_script_while1: $(top_builddir)/config.status tests/grub_script_while1.in + (for x in tests/grub_script_while1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_while1 + +grub_script_if: $(top_builddir)/config.status tests/grub_script_if.in + (for x in tests/grub_script_if.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_if + +grub_script_blanklines: $(top_builddir)/config.status tests/grub_script_blanklines.in + (for x in tests/grub_script_blanklines.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_blanklines + +grub_script_final_semicolon: $(top_builddir)/config.status tests/grub_script_final_semicolon.in + (for x in tests/grub_script_final_semicolon.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_final_semicolon + +grub_script_dollar: $(top_builddir)/config.status tests/grub_script_dollar.in + (for x in tests/grub_script_dollar.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_dollar + +grub_script_comments: $(top_builddir)/config.status tests/grub_script_comments.in + (for x in tests/grub_script_comments.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_comments + +grub_script_functions: $(top_builddir)/config.status tests/grub_script_functions.in + (for x in tests/grub_script_functions.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_functions + +grub_script_break: $(top_builddir)/config.status tests/grub_script_break.in + (for x in tests/grub_script_break.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_break + +grub_script_continue: $(top_builddir)/config.status tests/grub_script_continue.in + (for x in tests/grub_script_continue.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_continue + +grub_script_shift: $(top_builddir)/config.status tests/grub_script_shift.in + (for x in tests/grub_script_shift.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_shift + +grub_script_blockarg: $(top_builddir)/config.status tests/grub_script_blockarg.in + (for x in tests/grub_script_blockarg.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_blockarg + +grub_script_setparams: $(top_builddir)/config.status tests/grub_script_setparams.in + (for x in tests/grub_script_setparams.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_setparams + +grub_script_return: $(top_builddir)/config.status tests/grub_script_return.in + (for x in tests/grub_script_return.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_return + +grub_cmd_regexp: $(top_builddir)/config.status tests/grub_cmd_regexp.in + (for x in tests/grub_cmd_regexp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_regexp + +grub_cmd_date: $(top_builddir)/config.status tests/grub_cmd_date.in + (for x in tests/grub_cmd_date.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_date + +grub_cmd_set_date: $(top_builddir)/config.status tests/grub_cmd_set_date.in + (for x in tests/grub_cmd_set_date.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_set_date + +grub_cmd_sleep: $(top_builddir)/config.status tests/grub_cmd_sleep.in + (for x in tests/grub_cmd_sleep.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_sleep + +grub_script_expansion: $(top_builddir)/config.status tests/grub_script_expansion.in + (for x in tests/grub_script_expansion.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_expansion + +grub_script_not: $(top_builddir)/config.status tests/grub_script_not.in + (for x in tests/grub_script_not.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_not + +grub_script_no_commands: $(top_builddir)/config.status tests/grub_script_no_commands.in + (for x in tests/grub_script_no_commands.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_no_commands + +partmap_test: $(top_builddir)/config.status tests/partmap_test.in + (for x in tests/partmap_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x partmap_test + +hddboot_test: $(top_builddir)/config.status tests/hddboot_test.in + (for x in tests/hddboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x hddboot_test + +fddboot_test: $(top_builddir)/config.status tests/fddboot_test.in + (for x in tests/fddboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x fddboot_test + +cdboot_test: $(top_builddir)/config.status tests/cdboot_test.in + (for x in tests/cdboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x cdboot_test + +netboot_test: $(top_builddir)/config.status tests/netboot_test.in + (for x in tests/netboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x netboot_test + +pseries_test: $(top_builddir)/config.status tests/pseries_test.in + (for x in tests/pseries_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x pseries_test + +core_compress_test: $(top_builddir)/config.status tests/core_compress_test.in + (for x in tests/core_compress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x core_compress_test + +xzcompress_test: $(top_builddir)/config.status tests/xzcompress_test.in + (for x in tests/xzcompress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x xzcompress_test + +gzcompress_test: $(top_builddir)/config.status tests/gzcompress_test.in + (for x in tests/gzcompress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gzcompress_test + +lzocompress_test: $(top_builddir)/config.status tests/lzocompress_test.in + (for x in tests/lzocompress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x lzocompress_test + +grub_cmd_echo: $(top_builddir)/config.status tests/grub_cmd_echo.in + (for x in tests/grub_cmd_echo.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_echo + +help_test: $(top_builddir)/config.status tests/help_test.in + (for x in tests/help_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x help_test + +grub_script_gettext: $(top_builddir)/config.status tests/grub_script_gettext.in + (for x in tests/grub_script_gettext.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_gettext + +grub_script_escape_comma: $(top_builddir)/config.status tests/grub_script_escape_comma.in + (for x in tests/grub_script_escape_comma.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_escape_comma + +grub_script_strcmp: $(top_builddir)/config.status tests/grub_script_strcmp.in + (for x in tests/grub_script_strcmp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_strcmp + +test_sha512sum: $(top_builddir)/config.status tests/test_sha512sum.in + (for x in tests/test_sha512sum.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x test_sha512sum + +test_unset: $(top_builddir)/config.status tests/test_unset.in + (for x in tests/test_unset.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x test_unset + +grub_func_test: $(top_builddir)/config.status tests/grub_func_test.in + (for x in tests/grub_func_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_func_test + +grub_cmd_tr: $(top_builddir)/config.status tests/grub_cmd_tr.in + (for x in tests/grub_cmd_tr.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_tr + +file_filter_test: $(top_builddir)/config.status tests/file_filter_test.in + (for x in tests/file_filter_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x file_filter_test + +grub_cmd_test: $(top_builddir)/config.status tests/grub_cmd_test.in + (for x in tests/grub_cmd_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_test + +syslinux_test: $(top_builddir)/config.status tests/syslinux_test.in + (for x in tests/syslinux_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x syslinux_test + +# XXX Use Automake's LEX & YACC support +grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y + $(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/grub-core/script/parser.y +grub_script.tab.c: grub_script.tab.h + +# For the lexer. +grub_script.yy.h: $(top_srcdir)/grub-core/script/yylex.l + $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $(top_srcdir)/grub-core/script/yylex.l +grub_script.yy.c: grub_script.yy.h + +# For libgrub.a +libgrub.pp: grub_script.tab.h grub_script.yy.h $(libgrubmods_a_SOURCES) $(libgrubkern_a_SOURCES) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) \ + -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1) + +libgrub_a_init.lst: libgrub.pp + cat $< | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) + +libgrub_a_init.c: libgrub_a_init.lst $(top_srcdir)/geninit.sh + sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) + +# For grub-fstest +grub_fstest.pp: $(grub_fstest_SOURCES) + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) \ + -D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1) + +grub_fstest_init.lst: libgrub.pp grub_fstest.pp + cat $^ | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1) + +grub_fstest_init.c: grub_fstest_init.lst $(top_srcdir)/geninit.sh + sh $(top_srcdir)/geninit.sh `cat $<` > $@ || (rm -f $@; exit 1) + +build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs) + +garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c + $(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^ + +build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror + +build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror +@COND_STARFIELD_TRUE@dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) +@COND_STARFIELD_TRUE@ ./build-grub-mkfont$(BUILD_EXEEXT) -s 10 -o $@ $(DJVU_FONT_SOURCE) +@COND_STARFIELD_TRUE@dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) +@COND_STARFIELD_TRUE@ ./build-grub-mkfont$(BUILD_EXEEXT) -s 12 -o $@ $(DJVU_FONT_SOURCE) +@COND_STARFIELD_TRUE@dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) +@COND_STARFIELD_TRUE@ ./build-grub-mkfont$(BUILD_EXEEXT) -s 14 -o $@ $(DJVU_FONT_SOURCE) +@COND_STARFIELD_TRUE@dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) +@COND_STARFIELD_TRUE@ ./build-grub-mkfont$(BUILD_EXEEXT) -b -s 14 -o $@ $(DJVU_FONT_SOURCE) +@COND_STARFIELD_TRUE@dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) +@COND_STARFIELD_TRUE@ ./build-grub-mkfont$(BUILD_EXEEXT) -s 16 -o $@ $(DJVU_FONT_SOURCE) + +unicode.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1) + +ascii.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1) + +euro.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT) + ./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1) + +ascii.h: $(FONT_SOURCE) build-grub-gen-asciih$(BUILD_EXEEXT) + ./build-grub-gen-asciih$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1) + +widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec$(BUILD_EXEEXT) + ./build-grub-gen-widthspec$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1) + +@COND_real_platform_TRUE@linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -static -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -static -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1 + +@COND_real_platform_TRUE@multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include + +@COND_real_platform_TRUE@kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include + +@COND_real_platform_TRUE@kfreebsd.aout: kfreebsd.elf +@COND_real_platform_TRUE@ $(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -j .text + +@COND_real_platform_TRUE@pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -static -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32 + +@COND_real_platform_TRUE@pc-chainloader.bin: pc-chainloader.elf +@COND_real_platform_TRUE@ $(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@; + +@COND_real_platform_TRUE@ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32 + +@COND_real_platform_TRUE@ntldr.bin: ntldr.elf +@COND_real_platform_TRUE@ $(TARGET_OBJCOPY) -O binary --strip-unneeded -j .text $< $@; + +@COND_real_platform_TRUE@multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -static -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1 + +@COND_real_platform_TRUE@kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -m64 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + +@COND_real_platform_TRUE@kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@ + +@COND_real_platform_TRUE@knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S +@COND_real_platform_TRUE@ $(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" + +@COND_real_platform_TRUE@linux-initramfs.mips: linux.init.mips Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +@COND_real_platform_TRUE@linux-initramfs.ppc: linux.init.ppc Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +@COND_real_platform_TRUE@linux-initramfs.mipsel: linux.init.mipsel Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +@COND_real_platform_TRUE@linux-initramfs.loongson: linux.init.loongson Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +@COND_real_platform_TRUE@linux-initramfs.i386: linux.init.i386 Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +@COND_real_platform_TRUE@linux-initramfs.x86_64: linux.init.x86_64 Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR + +@COND_real_platform_TRUE@kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +@COND_real_platform_TRUE@knetbsd.image.i386: knetbsd.init.i386 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +@COND_real_platform_TRUE@kopenbsd.image.i386: kopenbsd.init.i386 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@ + +@COND_real_platform_TRUE@kopenbsd.image.x86_64: kopenbsd.init.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 128k -f 10 -o minfree=0,version=1 $@ $$TDIR && bsdlabel -f -R $@ $(srcdir)/grub-core/tests/boot/kopenbsdlabel.txt && rm -rf $$TDIR || rm -f $@ + +@COND_real_platform_TRUE@knetbsd.miniroot-image.i386.img: knetbsd.image.i386 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 +@COND_real_platform_TRUE@ $(TARGET_OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.i386 $@ + +@COND_real_platform_TRUE@kfreebsd-mfsroot.x86_64.img: kfreebsd.init.x86_64 Makefile +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +@COND_real_platform_TRUE@knetbsd.image.x86_64: knetbsd.init.x86_64 $(srcdir)/grub-core/tests/boot/kbsd.spec.txt +@COND_real_platform_TRUE@ TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -F $(srcdir)/grub-core/tests/boot/kbsd.spec.txt -t ffs -s 64k -f 10 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR + +@COND_real_platform_TRUE@knetbsd.miniroot-image.x86_64.img: knetbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 +@COND_real_platform_TRUE@ $(TARGET_OBJCOPY) --add-section=miniroot=$< $(GRUB_PAYLOADS_DIR)/knetbsd.miniroot.x86_64 $@ + +@COND_real_platform_TRUE@kfreebsd-mfsroot.i386.gz: kfreebsd-mfsroot.i386.img +@COND_real_platform_TRUE@ gzip < $< > $@ + +@COND_real_platform_TRUE@bootcheck-kfreebsd-i386: kfreebsd-mfsroot.i386.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.i386 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/mfsroot.gz=kfreebsd-mfsroot.i386.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.i386 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.i386 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@kfreebsd-mfsroot.x86_64.gz: kfreebsd-mfsroot.x86_64.img +@COND_real_platform_TRUE@ gzip < $< > $@ + +@COND_real_platform_TRUE@bootcheck-kfreebsd-x86_64: kfreebsd-mfsroot.x86_64.gz $(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 $(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/mfsroot.gz=kfreebsd-mfsroot.x86_64.gz --files=/kfreebsd=$(GRUB_PAYLOADS_DIR)/kfreebsd.x86_64 --files=/kfreebsd_env=$(GRUB_PAYLOADS_DIR)/kfreebsd_env.x86_64 $(srcdir)/grub-core/tests/boot/kfreebsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@knetbsd.miniroot-image.i386.gz: knetbsd.miniroot-image.i386.img +@COND_real_platform_TRUE@ gzip < $< > $@ + +@COND_real_platform_TRUE@bootcheck-knetbsd-i386: knetbsd.miniroot-image.i386.gz $(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/miniroot.gz=knetbsd.miniroot-image.i386.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.i386 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-kopenbsd-i386: kopenbsd.image.i386 $(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ramdisk=kopenbsd.image.i386 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.i386 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-kopenbsd-x86_64: kopenbsd.image.x86_64 $(GRUB_PAYLOADS_DIR)/kopenbsd.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/ramdisk=kopenbsd.image.x86_64 --files=/kopenbsd=$(GRUB_PAYLOADS_DIR)/kopenbsd.x86_64 $(srcdir)/grub-core/tests/boot/kopenbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@knetbsd.miniroot-image.x86_64.gz: knetbsd.miniroot-image.x86_64.img +@COND_real_platform_TRUE@ gzip < $< > $@ + +@COND_real_platform_TRUE@bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg --qemu-opts="-cpu $(MINIMUM_CPU_LINUX)" | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux-mips: linux-initramfs.mips $(GRUB_PAYLOADS_DIR)/linux.mips $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.mips --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.mips $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux-ppc: linux-initramfs.ppc $(GRUB_PAYLOADS_DIR)/linux.ppc $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.ppc --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.ppc $(srcdir)/grub-core/tests/boot/linux-ppc.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux-mipsel: linux-initramfs.mipsel $(GRUB_PAYLOADS_DIR)/linux.mipsel $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.mipsel --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.mipsel $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux-loongson: linux-initramfs.loongson $(GRUB_PAYLOADS_DIR)/linux.loongson $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --files=/initrd=linux-initramfs.loongson --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.loongson $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux16-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-linux16-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux16.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-multiboot: multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/multiboot.elf=multiboot.elf $(srcdir)/grub-core/tests/boot/multiboot.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-multiboot2: multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/multiboot2.elf=multiboot2.elf $(srcdir)/grub-core/tests/boot/multiboot2.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-kfreebsd-aout: kfreebsd.aout $(srcdir)/grub-core/tests/boot/kfreebsd-aout.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/kfreebsd.aout=kfreebsd.aout $(srcdir)/grub-core/tests/boot/kfreebsd-aout.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-pc-chainloader: pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/pc-chainloader.bin=pc-chainloader.bin $(srcdir)/grub-core/tests/boot/pc-chainloader.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@bootcheck-ntldr: ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg grub-shell +@COND_real_platform_TRUE@ ./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null + +@COND_real_platform_TRUE@.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ +@COND_real_platform_TRUE@ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ +@COND_real_platform_TRUE@ bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \ +@COND_real_platform_TRUE@ bootcheck-linux-mips FORCE + +@COND_real_platform_TRUE@bootcheck: $(BOOTCHECKS) + +@COND_i386_coreboot_TRUE@@COND_real_platform_TRUE@default_payload.elf: grub-mkstandalone grub-mkimage FORCE +@COND_i386_coreboot_TRUE@@COND_real_platform_TRUE@ test -f $@ && rm $@ || true +@COND_i386_coreboot_TRUE@@COND_real_platform_TRUE@ pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(shell cat grub-core/fs.lst) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg +windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA) + test -d $(windowsdir) && rm -rf $(windowsdir) || true + test -d $(windowsdir) || mkdir $(windowsdir) + $(MAKE) -C po $(AM_MAKEFLAGS) windowsdir + $(MAKE) -C grub-core $(AM_MAKEFLAGS) windowsdir + test -d $(windowsdir)/themes || mkdir $(windowsdir)/themes + test -d $(windowsdir)/themes/starfield || mkdir $(windowsdir)/themes/starfield + for x in $(PROGRAMS); do \ + if [ x$(STRIP) != x ]; then $(STRIP) $$x -o $(windowsdir)/$$x; \ + else cp -fp $$x $(windowsdir)/$$x; fi; \ + done + for x in $(pkgdata_DATA); do \ + cp -fp $$x $(windowsdir)/$$x; \ + done + for x in $(starfield_DATA); do \ + cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \ + done + for x in $(GRUB_WINDOWS_EXTRA_DIST); do \ + cp -fp $$x $(windowsdir); \ + done +windowszip: windowsdir + test -f $(windowszip) && rm $(windowszip) || true + zip -r $(windowszip) $(windowsdir) + rm -rf $(windowsdir) + +ChangeLog: FORCE + if test -d $(top_srcdir)/.git; then \ + $(gitlog_to_changelog) --srcdir=$(top_srcdir) --since=$(changelog_start_date) > '$@.tmp'; \ + rm -f '$@'; mv '$@.tmp' '$@'; \ + else \ + touch $@; \ + fi + +syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg + +tests/syslinux/ubuntu10.04_grub.cfg: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg.in + (for x in tests/syslinux/ubuntu10.04_grub.cfg.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Makefile.util.am b/Makefile.util.am new file mode 100644 index 000000000..762705756 --- /dev/null +++ b/Makefile.util.am @@ -0,0 +1,1586 @@ +libgrubkern_a_SOURCES = +nodist_libgrubkern_a_SOURCES = +libgrubkern_a_CFLAGS = +libgrubkern_a_CPPFLAGS = +libgrubkern_a_CCASFLAGS = +libgrubmods_a_SOURCES = +nodist_libgrubmods_a_SOURCES = +libgrubmods_a_CFLAGS = +libgrubmods_a_CPPFLAGS = +libgrubmods_a_CCASFLAGS = +libgrubgcry_a_SOURCES = +nodist_libgrubgcry_a_SOURCES = +libgrubgcry_a_CFLAGS = +libgrubgcry_a_CPPFLAGS = +libgrubgcry_a_CCASFLAGS = +noinst_LIBRARIES += libgrubkern.a +libgrubkern_a_SOURCES += util/misc.c grub-core/kern/command.c grub-core/kern/device.c grub-core/kern/disk.c grub-core/lib/disk.c util/getroot.c grub-core/osdep/unix/getroot.c grub-core/osdep/getroot.c grub-core/osdep/devmapper/getroot.c grub-core/osdep/relpath.c grub-core/kern/emu/hostdisk.c grub-core/osdep/devmapper/hostdisk.c grub-core/osdep/hostdisk.c grub-core/osdep/unix/hostdisk.c grub-core/osdep/exec.c grub-core/osdep/sleep.c grub-core/osdep/password.c grub-core/kern/emu/misc.c grub-core/kern/emu/mm.c grub-core/kern/env.c grub-core/kern/err.c grub-core/kern/file.c grub-core/kern/fs.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/kern/partition.c grub-core/lib/crypto.c grub-core/disk/luks.c grub-core/disk/geli.c grub-core/disk/cryptodisk.c grub-core/disk/AFSplitter.c grub-core/lib/pbkdf2.c grub-core/commands/extcmd.c grub-core/lib/arg.c grub-core/disk/ldm.c grub-core/disk/diskfilter.c grub-core/partmap/gpt.c grub-core/partmap/msdos.c grub-core/fs/proc.c grub-core/fs/archelp.c +nodist_libgrubkern_a_SOURCES += +libgrubkern_a_CFLAGS += $(AM_CFLAGS) $(CFLAGS_LIBRARY) $(CFLAGS_GNULIB) +libgrubkern_a_CPPFLAGS += $(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) $(CPPFLAGS_GNULIB) +libgrubkern_a_CCASFLAGS += $(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) +dist_noinst_DATA += grub-core/kern/disk_common.c grub-core/osdep/unix/relpath.c grub-core/osdep/aros/relpath.c grub-core/osdep/windows/relpath.c +BUILT_SOURCES += $(nodist_libgrubkern_a_SOURCES) +CLEANFILES += $(nodist_libgrubkern_a_SOURCES) +noinst_LIBRARIES += libgrubmods.a +libgrubmods_a_SOURCES += grub-core/commands/blocklist.c grub-core/commands/macbless.c grub-core/commands/xnu_uuid.c grub-core/commands/testload.c grub-core/commands/ls.c grub-core/disk/dmraid_nvidia.c grub-core/disk/loopback.c grub-core/disk/lvm.c grub-core/disk/mdraid_linux.c grub-core/disk/mdraid_linux_be.c grub-core/disk/mdraid1x_linux.c grub-core/disk/raid5_recover.c grub-core/disk/raid6_recover.c grub-core/font/font.c grub-core/gfxmenu/font.c grub-core/normal/charset.c grub-core/video/fb/fbblit.c grub-core/video/fb/fbutil.c grub-core/video/fb/fbfill.c grub-core/video/fb/video_fb.c grub-core/video/video.c grub-core/video/capture.c grub-core/video/colors.c grub-core/unidata.c grub-core/io/bufio.c grub-core/fs/affs.c grub-core/fs/afs.c grub-core/fs/bfs.c grub-core/fs/btrfs.c grub-core/fs/cbfs.c grub-core/fs/cpio.c grub-core/fs/cpio_be.c grub-core/fs/odc.c grub-core/fs/newc.c grub-core/fs/ext2.c grub-core/fs/fat.c grub-core/fs/exfat.c grub-core/fs/fshelp.c grub-core/fs/hfs.c grub-core/fs/hfsplus.c grub-core/fs/hfspluscomp.c grub-core/fs/iso9660.c grub-core/fs/jfs.c grub-core/fs/minix.c grub-core/fs/minix2.c grub-core/fs/minix3.c grub-core/fs/minix_be.c grub-core/fs/minix2_be.c grub-core/fs/minix3_be.c grub-core/fs/nilfs2.c grub-core/fs/ntfs.c grub-core/fs/ntfscomp.c grub-core/fs/reiserfs.c grub-core/fs/romfs.c grub-core/fs/sfs.c grub-core/fs/squash4.c grub-core/fs/tar.c grub-core/fs/udf.c grub-core/fs/ufs2.c grub-core/fs/ufs.c grub-core/fs/ufs_be.c grub-core/fs/xfs.c grub-core/fs/zfs/zfscrypt.c grub-core/fs/zfs/zfs.c grub-core/fs/zfs/zfsinfo.c grub-core/fs/zfs/zfs_lzjb.c grub-core/fs/zfs/zfs_lz4.c grub-core/fs/zfs/zfs_sha256.c grub-core/fs/zfs/zfs_fletcher.c grub-core/lib/envblk.c grub-core/lib/hexdump.c grub-core/lib/LzFind.c grub-core/lib/LzmaEnc.c grub-core/lib/crc.c grub-core/lib/adler32.c grub-core/lib/crc64.c grub-core/normal/datetime.c grub-core/normal/misc.c grub-core/partmap/acorn.c grub-core/partmap/amiga.c grub-core/partmap/apple.c grub-core/partmap/sun.c grub-core/partmap/plan.c grub-core/partmap/dvh.c grub-core/partmap/sunpc.c grub-core/partmap/bsdlabel.c grub-core/partmap/dfly.c grub-core/script/function.c grub-core/script/lexer.c grub-core/script/main.c grub-core/script/script.c grub-core/script/argv.c grub-core/io/gzio.c grub-core/io/xzio.c grub-core/io/lzopio.c grub-core/kern/ia64/dl_helper.c grub-core/kern/arm/dl_helper.c grub-core/kern/arm64/dl_helper.c grub-core/lib/minilzo/minilzo.c grub-core/lib/xzembed/xz_dec_bcj.c grub-core/lib/xzembed/xz_dec_lzma2.c grub-core/lib/xzembed/xz_dec_stream.c +nodist_libgrubmods_a_SOURCES += grub_script.tab.c grub_script.yy.c libgrub_a_init.c grub_script.yy.h grub_script.tab.h +libgrubmods_a_CFLAGS += $(AM_CFLAGS) $(CFLAGS_LIBRARY) -fno-builtin -Wno-undef +libgrubmods_a_CPPFLAGS += $(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) -I$(top_srcdir)/grub-core/lib/minilzo -I$(srcdir)/grub-core/lib/xzembed -DMINILZO_HAVE_CONFIG_H +libgrubmods_a_CCASFLAGS += $(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_libgrubmods_a_SOURCES) +CLEANFILES += $(nodist_libgrubmods_a_SOURCES) +noinst_LIBRARIES += libgrubgcry.a +libgrubgcry_a_SOURCES += grub-core/lib/libgcrypt-grub/cipher/arcfour.c grub-core/lib/libgcrypt-grub/cipher/blowfish.c grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c grub-core/lib/libgcrypt-grub/cipher/camellia.c grub-core/lib/libgcrypt-grub/cipher/cast5.c grub-core/lib/libgcrypt-grub/cipher/crc.c grub-core/lib/libgcrypt-grub/cipher/des.c grub-core/lib/libgcrypt-grub/cipher/idea.c grub-core/lib/libgcrypt-grub/cipher/md4.c grub-core/lib/libgcrypt-grub/cipher/md5.c grub-core/lib/libgcrypt-grub/cipher/rfc2268.c grub-core/lib/libgcrypt-grub/cipher/rijndael.c grub-core/lib/libgcrypt-grub/cipher/rmd160.c grub-core/lib/libgcrypt-grub/cipher/seed.c grub-core/lib/libgcrypt-grub/cipher/serpent.c grub-core/lib/libgcrypt-grub/cipher/sha1.c grub-core/lib/libgcrypt-grub/cipher/sha256.c grub-core/lib/libgcrypt-grub/cipher/sha512.c grub-core/lib/libgcrypt-grub/cipher/tiger.c grub-core/lib/libgcrypt-grub/cipher/twofish.c grub-core/lib/libgcrypt-grub/cipher/whirlpool.c grub-core/lib/libgcrypt-grub/cipher/init.c +nodist_libgrubgcry_a_SOURCES += +libgrubgcry_a_CFLAGS += $(AM_CFLAGS) $(CFLAGS_LIBRARY) $(CFLAGS_GCRY) +libgrubgcry_a_CPPFLAGS += $(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) $(CPPFLAGS_GCRY) +libgrubgcry_a_CCASFLAGS += $(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) +dist_noinst_DATA += grub-core/lib/libgcrypt-grub/cipher/ChangeLog +BUILT_SOURCES += $(nodist_libgrubgcry_a_SOURCES) +CLEANFILES += $(nodist_libgrubgcry_a_SOURCES) +bin_PROGRAMS += grub-mkimage +if COND_MAN_PAGES +man_MANS += grub-mkimage.1 + +grub-mkimage.1: grub-mkimage + chmod a+x grub-mkimage + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkimage.h2m -o $@ grub-mkimage + +CLEANFILES += grub-mkimage.1 +endif +grub_mkimage_SOURCES = util/grub-mkimage.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c grub-core/osdep/config.c util/config.c +nodist_grub_mkimage_SOURCES = +grub_mkimage_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBLZMA) $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkimage_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkimage_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkimage_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_PKGLIBDIR=\"$(pkglibdir)\" +grub_mkimage_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += grub-core/osdep/aros/config.c grub-core/osdep/windows/config.c grub-core/osdep/unix/config.c util/grub-mkimagexx.c +BUILT_SOURCES += $(nodist_grub_mkimage_SOURCES) +CLEANFILES += $(nodist_grub_mkimage_SOURCES) +bin_PROGRAMS += grub-mkrelpath +if COND_MAN_PAGES +man_MANS += grub-mkrelpath.1 + +grub-mkrelpath.1: grub-mkrelpath + chmod a+x grub-mkrelpath + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkrelpath.h2m -o $@ grub-mkrelpath + +CLEANFILES += grub-mkrelpath.1 +endif +grub_mkrelpath_SOURCES = util/grub-mkrelpath.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mkrelpath_SOURCES = +grub_mkrelpath_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkrelpath_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkrelpath_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkrelpath_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mkrelpath_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_mkrelpath_SOURCES) +CLEANFILES += $(nodist_grub_mkrelpath_SOURCES) +bin_PROGRAMS += grub-script-check +if COND_MAN_PAGES +man_MANS += grub-script-check.1 + +grub-script-check.1: grub-script-check + chmod a+x grub-script-check + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-script-check.h2m -o $@ grub-script-check + +CLEANFILES += grub-script-check.1 +endif +grub_script_check_SOURCES = util/grub-script-check.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_script_check_SOURCES = +grub_script_check_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_script_check_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_script_check_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_script_check_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_script_check_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_script_check_SOURCES) +CLEANFILES += $(nodist_grub_script_check_SOURCES) +bin_PROGRAMS += grub-editenv +if COND_MAN_PAGES +man_MANS += grub-editenv.1 + +grub-editenv.1: grub-editenv + chmod a+x grub-editenv + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-editenv.h2m -o $@ grub-editenv + +CLEANFILES += grub-editenv.1 +endif +grub_editenv_SOURCES = util/grub-editenv.c util/editenv.c grub-core/osdep/init.c +nodist_grub_editenv_SOURCES = +grub_editenv_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_editenv_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_editenv_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_editenv_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_editenv_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_editenv_SOURCES) +CLEANFILES += $(nodist_grub_editenv_SOURCES) +bin_PROGRAMS += grub-mkpasswd-pbkdf2 +if COND_MAN_PAGES +man_MANS += grub-mkpasswd-pbkdf2.1 + +grub-mkpasswd-pbkdf2.1: grub-mkpasswd-pbkdf2 + chmod a+x grub-mkpasswd-pbkdf2 + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkpasswd-pbkdf2.h2m -o $@ grub-mkpasswd-pbkdf2 + +CLEANFILES += grub-mkpasswd-pbkdf2.1 +endif +grub_mkpasswd_pbkdf2_SOURCES = util/grub-mkpasswd-pbkdf2.c grub-core/kern/emu/argp_common.c grub-core/osdep/random.c grub-core/osdep/init.c +nodist_grub_mkpasswd_pbkdf2_SOURCES = +grub_mkpasswd_pbkdf2_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkpasswd_pbkdf2_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkpasswd_pbkdf2_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkpasswd_pbkdf2_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mkpasswd_pbkdf2_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_mkpasswd_pbkdf2_SOURCES) +CLEANFILES += $(nodist_grub_mkpasswd_pbkdf2_SOURCES) +if COND_APPLE_LINKER +bin_PROGRAMS += grub-macho2img +if COND_MAN_PAGES +man_MANS += grub-macho2img.1 + +grub-macho2img.1: grub-macho2img + chmod a+x grub-macho2img + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-macho2img.h2m -o $@ grub-macho2img + +CLEANFILES += grub-macho2img.1 +endif +grub_macho2img_SOURCES = util/grub-macho2img.c +nodist_grub_macho2img_SOURCES = +grub_macho2img_LDADD = +grub_macho2img_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_macho2img_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_macho2img_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_macho2img_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_macho2img_SOURCES) +CLEANFILES += $(nodist_grub_macho2img_SOURCES) +endif COND_APPLE_LINKER +bin_PROGRAMS += grub-fstest +if COND_MAN_PAGES +man_MANS += grub-fstest.1 + +grub-fstest.1: grub-fstest + chmod a+x grub-fstest + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-fstest.h2m -o $@ grub-fstest + +CLEANFILES += grub-fstest.1 +endif +grub_fstest_SOURCES = util/grub-fstest.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +nodist_grub_fstest_SOURCES = grub_fstest_init.c +grub_fstest_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_fstest_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_fstest_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_fstest_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_fstest_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_fstest_SOURCES) +CLEANFILES += $(nodist_grub_fstest_SOURCES) +if COND_GRUB_MOUNT +bin_PROGRAMS += grub-mount +if COND_MAN_PAGES +man_MANS += grub-mount.1 + +grub-mount.1: grub-mount + chmod a+x grub-mount + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mount.h2m -o $@ grub-mount + +CLEANFILES += grub-mount.1 +endif +grub_mount_SOURCES = util/grub-mount.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +nodist_grub_mount_SOURCES = grub_fstest_init.c +grub_mount_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse +grub_mount_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mount_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mount_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mount_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_mount_SOURCES) +CLEANFILES += $(nodist_grub_mount_SOURCES) +endif COND_GRUB_MOUNT +if COND_GRUB_MKFONT +bin_PROGRAMS += grub-mkfont +if COND_MAN_PAGES +man_MANS += grub-mkfont.1 + +grub-mkfont.1: grub-mkfont + chmod a+x grub-mkfont + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkfont.h2m -o $@ grub-mkfont + +CLEANFILES += grub-mkfont.1 +endif +grub_mkfont_SOURCES = util/grub-mkfont.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mkfont_SOURCES = +grub_mkfont_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(freetype_libs) $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkfont_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) $(freetype_cflags) +grub_mkfont_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkfont_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_MKFONT=1 +grub_mkfont_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_mkfont_SOURCES) +CLEANFILES += $(nodist_grub_mkfont_SOURCES) +endif COND_GRUB_MKFONT +sbin_PROGRAMS += grub-probe +if COND_MAN_PAGES +man_MANS += grub-probe.8 + +grub-probe.8: grub-probe + chmod a+x grub-probe + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-probe.h2m -o $@ grub-probe + +CLEANFILES += grub-probe.8 +endif +grub_probe_SOURCES = util/grub-probe.c util/probe.c grub-core/osdep/ofpath.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_probe_SOURCES = +grub_probe_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_probe_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_probe_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_probe_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_probe_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_probe_SOURCES) +CLEANFILES += $(nodist_grub_probe_SOURCES) +sbin_PROGRAMS += grub-bios-setup +if COND_MAN_PAGES +man_MANS += grub-bios-setup.8 + +grub-bios-setup.8: grub-bios-setup + chmod a+x grub-bios-setup + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-bios-setup.h2m -o $@ grub-bios-setup + +CLEANFILES += grub-bios-setup.8 +endif +grub_bios_setup_SOURCES = util/grub-setup.c util/setup_bios.c grub-core/kern/emu/argp_common.c grub-core/lib/reed_solomon.c grub-core/osdep/blocklist.c grub-core/osdep/init.c +nodist_grub_bios_setup_SOURCES = +grub_bios_setup_LDADD = libgrubmods.a libgrubkern.a libgrubgcry.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_bios_setup_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_bios_setup_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_bios_setup_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_SETUP_FUNC=grub_util_bios_setup +grub_bios_setup_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += util/setup.c grub-core/osdep/generic/blocklist.c grub-core/osdep/linux/blocklist.c grub-core/osdep/windows/blocklist.c +BUILT_SOURCES += $(nodist_grub_bios_setup_SOURCES) +CLEANFILES += $(nodist_grub_bios_setup_SOURCES) +sbin_PROGRAMS += grub-sparc64-setup +if COND_MAN_PAGES +man_MANS += grub-sparc64-setup.8 + +grub-sparc64-setup.8: grub-sparc64-setup + chmod a+x grub-sparc64-setup + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-sparc64-setup.h2m -o $@ grub-sparc64-setup + +CLEANFILES += grub-sparc64-setup.8 +endif +grub_sparc64_setup_SOURCES = util/grub-setup.c util/setup_sparc.c grub-core/kern/emu/argp_common.c grub-core/lib/reed_solomon.c grub-core/osdep/ofpath.c grub-core/osdep/blocklist.c grub-core/osdep/init.c +nodist_grub_sparc64_setup_SOURCES = +grub_sparc64_setup_LDADD = libgrubmods.a libgrubkern.a libgrubgcry.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_sparc64_setup_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_sparc64_setup_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_sparc64_setup_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) -DGRUB_SETUP_FUNC=grub_util_sparc_setup +grub_sparc64_setup_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_sparc64_setup_SOURCES) +CLEANFILES += $(nodist_grub_sparc64_setup_SOURCES) +sbin_PROGRAMS += grub-ofpathname +if COND_MAN_PAGES +man_MANS += grub-ofpathname.8 + +grub-ofpathname.8: grub-ofpathname + chmod a+x grub-ofpathname + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-ofpathname.h2m -o $@ grub-ofpathname + +CLEANFILES += grub-ofpathname.8 +endif +grub_ofpathname_SOURCES = util/ieee1275/grub-ofpathname.c grub-core/osdep/ofpath.c grub-core/osdep/init.c +nodist_grub_ofpathname_SOURCES = +grub_ofpathname_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_ofpathname_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_ofpathname_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_ofpathname_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_ofpathname_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_ofpathname_SOURCES) +CLEANFILES += $(nodist_grub_ofpathname_SOURCES) +bin_PROGRAMS += grub-mklayout +if COND_MAN_PAGES +man_MANS += grub-mklayout.1 + +grub-mklayout.1: grub-mklayout + chmod a+x grub-mklayout + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mklayout.h2m -o $@ grub-mklayout + +CLEANFILES += grub-mklayout.1 +endif +grub_mklayout_SOURCES = util/grub-mklayout.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mklayout_SOURCES = +grub_mklayout_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mklayout_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mklayout_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mklayout_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mklayout_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_mklayout_SOURCES) +CLEANFILES += $(nodist_grub_mklayout_SOURCES) +sbin_PROGRAMS += grub-macbless +if COND_MAN_PAGES +man_MANS += grub-macbless.8 + +grub-macbless.8: grub-macbless + chmod a+x grub-macbless + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-macbless.h2m -o $@ grub-macbless + +CLEANFILES += grub-macbless.8 +endif +grub_macbless_SOURCES = util/grub-macbless.c grub-core/osdep/init.c grub-core/kern/emu/argp_common.c +nodist_grub_macbless_SOURCES = +grub_macbless_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_macbless_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_macbless_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_macbless_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_macbless_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_macbless_SOURCES) +CLEANFILES += $(nodist_grub_macbless_SOURCES) +if COND_HAVE_EXEC +bin_PROGRAMS += grub-mkrescue +if COND_MAN_PAGES +man_MANS += grub-mkrescue.1 + +grub-mkrescue.1: grub-mkrescue + chmod a+x grub-mkrescue + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkrescue.h2m -o $@ grub-mkrescue + +CLEANFILES += grub-mkrescue.1 +endif +grub_mkrescue_SOURCES = util/grub-mkrescue.c util/render-label.c util/glue-efi.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mkrescue_SOURCES = +grub_mkrescue_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkrescue_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkrescue_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkrescue_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mkrescue_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += grub-core/osdep/unix/compress.c grub-core/osdep/basic/compress.c +BUILT_SOURCES += $(nodist_grub_mkrescue_SOURCES) +CLEANFILES += $(nodist_grub_mkrescue_SOURCES) +endif COND_HAVE_EXEC +bin_PROGRAMS += grub-mkstandalone +if COND_MAN_PAGES +man_MANS += grub-mkstandalone.1 + +grub-mkstandalone.1: grub-mkstandalone + chmod a+x grub-mkstandalone + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mkstandalone.h2m -o $@ grub-mkstandalone + +CLEANFILES += grub-mkstandalone.1 +endif +grub_mkstandalone_SOURCES = util/grub-mkstandalone.c util/render-label.c util/glue-efi.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mkstandalone_SOURCES = +grub_mkstandalone_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mkstandalone_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mkstandalone_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mkstandalone_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mkstandalone_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += grub-core/osdep/linux/platform.c grub-core/osdep/windows/platform.c grub-core/osdep/basic/platform.c grub-core/osdep/basic/no_platform.c grub-core/osdep/unix/platform.c +BUILT_SOURCES += $(nodist_grub_mkstandalone_SOURCES) +CLEANFILES += $(nodist_grub_mkstandalone_SOURCES) +sbin_PROGRAMS += grub-install +if COND_MAN_PAGES +man_MANS += grub-install.8 + +grub-install.8: grub-install + chmod a+x grub-install + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-install.h2m -o $@ grub-install + +CLEANFILES += grub-install.8 +endif +grub_install_SOURCES = util/grub-install.c util/probe.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c util/render-label.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_install_SOURCES = +grub_install_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_install_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_install_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_install_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_install_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_install_SOURCES) +CLEANFILES += $(nodist_grub_install_SOURCES) +bin_PROGRAMS += grub-mknetdir +if COND_MAN_PAGES +man_MANS += grub-mknetdir.1 + +grub-mknetdir.1: grub-mknetdir + chmod a+x grub-mknetdir + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-mknetdir.h2m -o $@ grub-mknetdir + +CLEANFILES += grub-mknetdir.1 +endif +grub_mknetdir_SOURCES = util/grub-mknetdir.c util/mkimage.c util/grub-mkimage32.c util/grub-mkimage64.c util/grub-install-common.c util/setup_bios.c util/setup_sparc.c grub-core/lib/reed_solomon.c grub-core/osdep/random.c grub-core/osdep/ofpath.c grub-core/osdep/platform.c grub-core/osdep/platform_unix.c grub-core/osdep/compress.c util/editenv.c grub-core/osdep/blocklist.c grub-core/osdep/config.c util/config.c util/resolve.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_mknetdir_SOURCES = +grub_mknetdir_LDADD = $(LIBLZMA) libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_mknetdir_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_mknetdir_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_mknetdir_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_mknetdir_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_mknetdir_SOURCES) +CLEANFILES += $(nodist_grub_mknetdir_SOURCES) +check_PROGRAMS += example_unit_test +TESTS += example_unit_test +example_unit_test_SOURCES = tests/example_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_example_unit_test_SOURCES = +example_unit_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +example_unit_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +example_unit_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +example_unit_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +example_unit_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_example_unit_test_SOURCES) +CLEANFILES += $(nodist_example_unit_test_SOURCES) +check_PROGRAMS += printf_test +TESTS += printf_test +printf_test_SOURCES = tests/printf_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_printf_test_SOURCES = +printf_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +printf_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +printf_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +printf_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +printf_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_printf_test_SOURCES) +CLEANFILES += $(nodist_printf_test_SOURCES) +check_PROGRAMS += date_test +TESTS += date_test +date_test_SOURCES = tests/date_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_date_test_SOURCES = +date_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +date_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +date_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +date_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +date_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_date_test_SOURCES) +CLEANFILES += $(nodist_date_test_SOURCES) +if COND_HAVE_CXX +check_PROGRAMS += priority_queue_unit_test +TESTS += priority_queue_unit_test +priority_queue_unit_test_SOURCES = tests/priority_queue_unit_test.cc tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c grub-core/lib/priority_queue.c +nodist_priority_queue_unit_test_SOURCES = +priority_queue_unit_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +priority_queue_unit_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +priority_queue_unit_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +priority_queue_unit_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +priority_queue_unit_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_priority_queue_unit_test_SOURCES) +CLEANFILES += $(nodist_priority_queue_unit_test_SOURCES) +endif COND_HAVE_CXX +check_PROGRAMS += cmp_test +TESTS += cmp_test +cmp_test_SOURCES = tests/cmp_unit_test.c tests/lib/unit_test.c grub-core/kern/list.c grub-core/kern/misc.c grub-core/tests/lib/test.c +nodist_cmp_test_SOURCES = +cmp_test_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +cmp_test_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +cmp_test_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +cmp_test_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +cmp_test_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmp_test_SOURCES) +CLEANFILES += $(nodist_cmp_test_SOURCES) +bin_PROGRAMS += grub-menulst2cfg +if COND_MAN_PAGES +man_MANS += grub-menulst2cfg.1 + +grub-menulst2cfg.1: grub-menulst2cfg + chmod a+x grub-menulst2cfg + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-menulst2cfg.h2m -o $@ grub-menulst2cfg + +CLEANFILES += grub-menulst2cfg.1 +endif +grub_menulst2cfg_SOURCES = util/grub-menulst2cfg.c grub-core/lib/legacy_parse.c grub-core/lib/i386/pc/vesa_modes_table.c grub-core/osdep/init.c +nodist_grub_menulst2cfg_SOURCES = +grub_menulst2cfg_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_menulst2cfg_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_menulst2cfg_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_menulst2cfg_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_menulst2cfg_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_menulst2cfg_SOURCES) +CLEANFILES += $(nodist_grub_menulst2cfg_SOURCES) +bin_PROGRAMS += grub-syslinux2cfg +if COND_MAN_PAGES +man_MANS += grub-syslinux2cfg.1 + +grub-syslinux2cfg.1: grub-syslinux2cfg + chmod a+x grub-syslinux2cfg + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-syslinux2cfg.h2m -o $@ grub-syslinux2cfg + +CLEANFILES += grub-syslinux2cfg.1 +endif +grub_syslinux2cfg_SOURCES = util/grub-syslinux2cfg.c grub-core/lib/syslinux_parse.c grub-core/lib/getline.c grub-core/osdep/init.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/kern/emu/argp_common.c +nodist_grub_syslinux2cfg_SOURCES = +grub_syslinux2cfg_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_syslinux2cfg_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_syslinux2cfg_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_syslinux2cfg_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_syslinux2cfg_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_syslinux2cfg_SOURCES) +CLEANFILES += $(nodist_grub_syslinux2cfg_SOURCES) +bin_PROGRAMS += grub-glue-efi +if COND_MAN_PAGES +man_MANS += grub-glue-efi.1 + +grub-glue-efi.1: grub-glue-efi + chmod a+x grub-glue-efi + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-glue-efi.h2m -o $@ grub-glue-efi + +CLEANFILES += grub-glue-efi.1 +endif +grub_glue_efi_SOURCES = util/grub-glue-efi.c util/glue-efi.c grub-core/kern/emu/argp_common.c grub-core/osdep/init.c +nodist_grub_glue_efi_SOURCES = +grub_glue_efi_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_glue_efi_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_glue_efi_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_glue_efi_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_glue_efi_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_glue_efi_SOURCES) +CLEANFILES += $(nodist_grub_glue_efi_SOURCES) +bin_PROGRAMS += grub-render-label +if COND_MAN_PAGES +man_MANS += grub-render-label.1 + +grub-render-label.1: grub-render-label + chmod a+x grub-render-label + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-render-label.h2m -o $@ grub-render-label + +CLEANFILES += grub-render-label.1 +endif +grub_render_label_SOURCES = util/grub-render-label.c util/render-label.c grub-core/kern/emu/argp_common.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +nodist_grub_render_label_SOURCES = +grub_render_label_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_render_label_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_render_label_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_render_label_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_render_label_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_render_label_SOURCES) +CLEANFILES += $(nodist_grub_render_label_SOURCES) +bin_PROGRAMS += grub-file +if COND_MAN_PAGES +man_MANS += grub-file.1 + +grub-file.1: grub-file + chmod a+x grub-file + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-file.h2m -o $@ grub-file + +CLEANFILES += grub-file.1 +endif +grub_file_SOURCES = util/grub-file.c util/render-label.c grub-core/commands/file.c grub-core/commands/file32.c grub-core/commands/file64.c grub-core/loader/i386/xen_file.c grub-core/loader/i386/xen_file32.c grub-core/loader/i386/xen_file64.c grub-core/io/offset.c grub-core/kern/elf.c grub-core/loader/lzss.c grub-core/loader/macho.c grub-core/loader/macho32.c grub-core/loader/macho64.c grub-core/kern/emu/hostfs.c grub-core/disk/host.c grub-core/osdep/init.c +nodist_grub_file_SOURCES = +grub_file_LDADD = libgrubmods.a libgrubgcry.a libgrubkern.a grub-core/gnulib/libgnu.a $(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_file_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_file_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_file_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_file_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_file_SOURCES) +CLEANFILES += $(nodist_grub_file_SOURCES) +grubconf_SCRIPTS += 00_header + +00_header: $(top_builddir)/config.status util/grub.d/00_header.in + (for x in util/grub.d/00_header.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 00_header + +CLEANFILES += 00_header +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/00_header.in +if COND_HOST_WINDOWS +grubconf_SCRIPTS += 10_windows + +10_windows: $(top_builddir)/config.status util/grub.d/10_windows.in + (for x in util/grub.d/10_windows.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 10_windows + +CLEANFILES += 10_windows +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/10_windows.in +endif COND_HOST_WINDOWS +if COND_HOST_HURD +grubconf_SCRIPTS += 10_hurd + +10_hurd: $(top_builddir)/config.status util/grub.d/10_hurd.in + (for x in util/grub.d/10_hurd.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 10_hurd + +CLEANFILES += 10_hurd +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/10_hurd.in +endif COND_HOST_HURD +if COND_HOST_KFREEBSD +grubconf_SCRIPTS += 10_kfreebsd + +10_kfreebsd: $(top_builddir)/config.status util/grub.d/10_kfreebsd.in + (for x in util/grub.d/10_kfreebsd.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 10_kfreebsd + +CLEANFILES += 10_kfreebsd +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/10_kfreebsd.in +endif COND_HOST_KFREEBSD +if COND_HOST_ILLUMOS +grubconf_SCRIPTS += 10_illumos + +10_illumos: $(top_builddir)/config.status util/grub.d/10_illumos.in + (for x in util/grub.d/10_illumos.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 10_illumos + +CLEANFILES += 10_illumos +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/10_illumos.in +endif COND_HOST_ILLUMOS +if COND_HOST_NETBSD +grubconf_SCRIPTS += 10_netbsd + +10_netbsd: $(top_builddir)/config.status util/grub.d/10_netbsd.in + (for x in util/grub.d/10_netbsd.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 10_netbsd + +CLEANFILES += 10_netbsd +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/10_netbsd.in +endif COND_HOST_NETBSD +if COND_HOST_LINUX +grubconf_SCRIPTS += 10_linux + +10_linux: $(top_builddir)/config.status util/grub.d/10_linux.in + (for x in util/grub.d/10_linux.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 10_linux + +CLEANFILES += 10_linux +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/10_linux.in +endif COND_HOST_LINUX +if COND_HOST_XNU +grubconf_SCRIPTS += 10_xnu + +10_xnu: $(top_builddir)/config.status util/grub.d/10_xnu.in + (for x in util/grub.d/10_xnu.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 10_xnu + +CLEANFILES += 10_xnu +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/10_xnu.in +endif COND_HOST_XNU +if COND_HOST_LINUX +grubconf_SCRIPTS += 20_linux_xen + +20_linux_xen: $(top_builddir)/config.status util/grub.d/20_linux_xen.in + (for x in util/grub.d/20_linux_xen.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 20_linux_xen + +CLEANFILES += 20_linux_xen +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/20_linux_xen.in +endif COND_HOST_LINUX +grubconf_SCRIPTS += 30_os-prober + +30_os-prober: $(top_builddir)/config.status util/grub.d/30_os-prober.in + (for x in util/grub.d/30_os-prober.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 30_os-prober + +CLEANFILES += 30_os-prober +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/30_os-prober.in +grubconf_SCRIPTS += 40_custom + +40_custom: $(top_builddir)/config.status util/grub.d/40_custom.in + (for x in util/grub.d/40_custom.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 40_custom + +CLEANFILES += 40_custom +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/40_custom.in +grubconf_SCRIPTS += 41_custom + +41_custom: $(top_builddir)/config.status util/grub.d/41_custom.in + (for x in util/grub.d/41_custom.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x 41_custom + +CLEANFILES += 41_custom +EXTRA_DIST += +dist_noinst_DATA += util/grub.d/41_custom.in +sbin_SCRIPTS += grub-mkconfig +if COND_MAN_PAGES +man_MANS += grub-mkconfig.8 + +grub-mkconfig.8: grub-mkconfig grub-mkconfig_lib + chmod a+x grub-mkconfig + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-mkconfig.h2m -o $@ grub-mkconfig + +CLEANFILES += grub-mkconfig.8 +endif + +grub-mkconfig: $(top_builddir)/config.status util/grub-mkconfig.in + (for x in util/grub-mkconfig.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-mkconfig + +CLEANFILES += grub-mkconfig +EXTRA_DIST += +dist_noinst_DATA += util/grub-mkconfig.in +sbin_SCRIPTS += grub-set-default +if COND_MAN_PAGES +man_MANS += grub-set-default.8 + +grub-set-default.8: grub-set-default grub-mkconfig_lib + chmod a+x grub-set-default + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-set-default.h2m -o $@ grub-set-default + +CLEANFILES += grub-set-default.8 +endif + +grub-set-default: $(top_builddir)/config.status util/grub-set-default.in + (for x in util/grub-set-default.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-set-default + +CLEANFILES += grub-set-default +EXTRA_DIST += +dist_noinst_DATA += util/grub-set-default.in +sbin_SCRIPTS += grub-reboot +if COND_MAN_PAGES +man_MANS += grub-reboot.8 + +grub-reboot.8: grub-reboot grub-mkconfig_lib + chmod a+x grub-reboot + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=8 -i $(top_srcdir)/docs/man/grub-reboot.h2m -o $@ grub-reboot + +CLEANFILES += grub-reboot.8 +endif + +grub-reboot: $(top_builddir)/config.status util/grub-reboot.in + (for x in util/grub-reboot.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-reboot + +CLEANFILES += grub-reboot +EXTRA_DIST += +dist_noinst_DATA += util/grub-reboot.in +noinst_SCRIPTS += grub-mkconfig_lib + +grub-mkconfig_lib: $(top_builddir)/config.status util/grub-mkconfig_lib.in + (for x in util/grub-mkconfig_lib.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-mkconfig_lib + +CLEANFILES += grub-mkconfig_lib +EXTRA_DIST += +dist_noinst_DATA += util/grub-mkconfig_lib.in +bin_SCRIPTS += grub-kbdcomp +if COND_MAN_PAGES +man_MANS += grub-kbdcomp.1 + +grub-kbdcomp.1: grub-kbdcomp grub-mkconfig_lib + chmod a+x grub-kbdcomp + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-kbdcomp.h2m -o $@ grub-kbdcomp + +CLEANFILES += grub-kbdcomp.1 +endif + +grub-kbdcomp: $(top_builddir)/config.status util/grub-kbdcomp.in + (for x in util/grub-kbdcomp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-kbdcomp + +CLEANFILES += grub-kbdcomp +EXTRA_DIST += +dist_noinst_DATA += util/grub-kbdcomp.in +noinst_SCRIPTS += grub-shell + +grub-shell: $(top_builddir)/config.status tests/util/grub-shell.in + (for x in tests/util/grub-shell.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-shell + +CLEANFILES += grub-shell +EXTRA_DIST += +dist_noinst_DATA += tests/util/grub-shell.in +noinst_SCRIPTS += grub-shell-tester + +grub-shell-tester: $(top_builddir)/config.status tests/util/grub-shell-tester.in + (for x in tests/util/grub-shell-tester.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-shell-tester + +CLEANFILES += grub-shell-tester +EXTRA_DIST += +dist_noinst_DATA += tests/util/grub-shell-tester.in +noinst_SCRIPTS += grub-fs-tester + +grub-fs-tester: $(top_builddir)/config.status tests/util/grub-fs-tester.in garbage-gen$(BUILD_EXEEXT) + (for x in tests/util/grub-fs-tester.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub-fs-tester + +CLEANFILES += grub-fs-tester +EXTRA_DIST += +dist_noinst_DATA += tests/util/grub-fs-tester.in +check_SCRIPTS += ext234_test +TESTS += ext234_test + +ext234_test: $(top_builddir)/config.status tests/ext234_test.in + (for x in tests/ext234_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ext234_test + +CLEANFILES += ext234_test +EXTRA_DIST += +dist_noinst_DATA += tests/ext234_test.in +check_SCRIPTS += squashfs_test +TESTS += squashfs_test + +squashfs_test: $(top_builddir)/config.status tests/squashfs_test.in + (for x in tests/squashfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x squashfs_test + +CLEANFILES += squashfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/squashfs_test.in +check_SCRIPTS += iso9660_test +TESTS += iso9660_test + +iso9660_test: $(top_builddir)/config.status tests/iso9660_test.in + (for x in tests/iso9660_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x iso9660_test + +CLEANFILES += iso9660_test +EXTRA_DIST += +dist_noinst_DATA += tests/iso9660_test.in +check_SCRIPTS += hfsplus_test +TESTS += hfsplus_test + +hfsplus_test: $(top_builddir)/config.status tests/hfsplus_test.in + (for x in tests/hfsplus_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x hfsplus_test + +CLEANFILES += hfsplus_test +EXTRA_DIST += +dist_noinst_DATA += tests/hfsplus_test.in +check_SCRIPTS += ntfs_test +TESTS += ntfs_test + +ntfs_test: $(top_builddir)/config.status tests/ntfs_test.in + (for x in tests/ntfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ntfs_test + +CLEANFILES += ntfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/ntfs_test.in +check_SCRIPTS += reiserfs_test +TESTS += reiserfs_test + +reiserfs_test: $(top_builddir)/config.status tests/reiserfs_test.in + (for x in tests/reiserfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x reiserfs_test + +CLEANFILES += reiserfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/reiserfs_test.in +check_SCRIPTS += fat_test +TESTS += fat_test + +fat_test: $(top_builddir)/config.status tests/fat_test.in + (for x in tests/fat_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x fat_test + +CLEANFILES += fat_test +EXTRA_DIST += +dist_noinst_DATA += tests/fat_test.in +check_SCRIPTS += minixfs_test +TESTS += minixfs_test + +minixfs_test: $(top_builddir)/config.status tests/minixfs_test.in + (for x in tests/minixfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x minixfs_test + +CLEANFILES += minixfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/minixfs_test.in +check_SCRIPTS += xfs_test +TESTS += xfs_test + +xfs_test: $(top_builddir)/config.status tests/xfs_test.in + (for x in tests/xfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x xfs_test + +CLEANFILES += xfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/xfs_test.in +check_SCRIPTS += nilfs2_test +TESTS += nilfs2_test + +nilfs2_test: $(top_builddir)/config.status tests/nilfs2_test.in + (for x in tests/nilfs2_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x nilfs2_test + +CLEANFILES += nilfs2_test +EXTRA_DIST += +dist_noinst_DATA += tests/nilfs2_test.in +check_SCRIPTS += romfs_test +TESTS += romfs_test + +romfs_test: $(top_builddir)/config.status tests/romfs_test.in + (for x in tests/romfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x romfs_test + +CLEANFILES += romfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/romfs_test.in +check_SCRIPTS += exfat_test +TESTS += exfat_test + +exfat_test: $(top_builddir)/config.status tests/exfat_test.in + (for x in tests/exfat_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x exfat_test + +CLEANFILES += exfat_test +EXTRA_DIST += +dist_noinst_DATA += tests/exfat_test.in +check_SCRIPTS += tar_test +TESTS += tar_test + +tar_test: $(top_builddir)/config.status tests/tar_test.in + (for x in tests/tar_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x tar_test + +CLEANFILES += tar_test +EXTRA_DIST += +dist_noinst_DATA += tests/tar_test.in +check_SCRIPTS += udf_test +TESTS += udf_test + +udf_test: $(top_builddir)/config.status tests/udf_test.in + (for x in tests/udf_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x udf_test + +CLEANFILES += udf_test +EXTRA_DIST += +dist_noinst_DATA += tests/udf_test.in +check_SCRIPTS += hfs_test +TESTS += hfs_test + +hfs_test: $(top_builddir)/config.status tests/hfs_test.in + (for x in tests/hfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x hfs_test + +CLEANFILES += hfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/hfs_test.in +check_SCRIPTS += jfs_test +TESTS += jfs_test + +jfs_test: $(top_builddir)/config.status tests/jfs_test.in + (for x in tests/jfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x jfs_test + +CLEANFILES += jfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/jfs_test.in +check_SCRIPTS += btrfs_test +TESTS += btrfs_test + +btrfs_test: $(top_builddir)/config.status tests/btrfs_test.in + (for x in tests/btrfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x btrfs_test + +CLEANFILES += btrfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/btrfs_test.in +check_SCRIPTS += zfs_test +TESTS += zfs_test + +zfs_test: $(top_builddir)/config.status tests/zfs_test.in + (for x in tests/zfs_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x zfs_test + +CLEANFILES += zfs_test +EXTRA_DIST += +dist_noinst_DATA += tests/zfs_test.in +check_SCRIPTS += cpio_test +TESTS += cpio_test + +cpio_test: $(top_builddir)/config.status tests/cpio_test.in + (for x in tests/cpio_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x cpio_test + +CLEANFILES += cpio_test +EXTRA_DIST += +dist_noinst_DATA += tests/cpio_test.in +check_SCRIPTS += example_scripted_test +TESTS += example_scripted_test + +example_scripted_test: $(top_builddir)/config.status tests/example_scripted_test.in + (for x in tests/example_scripted_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x example_scripted_test + +CLEANFILES += example_scripted_test +EXTRA_DIST += +dist_noinst_DATA += tests/example_scripted_test.in +check_SCRIPTS += gettext_strings_test +TESTS += gettext_strings_test + +gettext_strings_test: $(top_builddir)/config.status tests/gettext_strings_test.in + (for x in tests/gettext_strings_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gettext_strings_test + +CLEANFILES += gettext_strings_test +EXTRA_DIST += po/exclude.pot +dist_noinst_DATA += tests/gettext_strings_test.in +check_SCRIPTS += pata_test +TESTS += pata_test + +pata_test: $(top_builddir)/config.status tests/pata_test.in + (for x in tests/pata_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x pata_test + +CLEANFILES += pata_test +EXTRA_DIST += +dist_noinst_DATA += tests/pata_test.in +check_SCRIPTS += ahci_test +TESTS += ahci_test + +ahci_test: $(top_builddir)/config.status tests/ahci_test.in + (for x in tests/ahci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ahci_test + +CLEANFILES += ahci_test +EXTRA_DIST += +dist_noinst_DATA += tests/ahci_test.in +check_SCRIPTS += uhci_test +TESTS += uhci_test + +uhci_test: $(top_builddir)/config.status tests/uhci_test.in + (for x in tests/uhci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x uhci_test + +CLEANFILES += uhci_test +EXTRA_DIST += +dist_noinst_DATA += tests/uhci_test.in +check_SCRIPTS += ohci_test +TESTS += ohci_test + +ohci_test: $(top_builddir)/config.status tests/ohci_test.in + (for x in tests/ohci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ohci_test + +CLEANFILES += ohci_test +EXTRA_DIST += +dist_noinst_DATA += tests/ohci_test.in +check_SCRIPTS += ehci_test +TESTS += ehci_test + +ehci_test: $(top_builddir)/config.status tests/ehci_test.in + (for x in tests/ehci_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x ehci_test + +CLEANFILES += ehci_test +EXTRA_DIST += +dist_noinst_DATA += tests/ehci_test.in +check_SCRIPTS += example_grub_script_test +TESTS += example_grub_script_test + +example_grub_script_test: $(top_builddir)/config.status tests/example_grub_script_test.in + (for x in tests/example_grub_script_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x example_grub_script_test + +CLEANFILES += example_grub_script_test +EXTRA_DIST += +dist_noinst_DATA += tests/example_grub_script_test.in +check_SCRIPTS += grub_script_eval +TESTS += grub_script_eval + +grub_script_eval: $(top_builddir)/config.status tests/grub_script_eval.in + (for x in tests/grub_script_eval.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_eval + +CLEANFILES += grub_script_eval +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_eval.in +check_SCRIPTS += grub_script_test +TESTS += grub_script_test + +grub_script_test: $(top_builddir)/config.status tests/grub_script_test.in + (for x in tests/grub_script_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_test + +CLEANFILES += grub_script_test +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_test.in +check_SCRIPTS += grub_script_echo1 +TESTS += grub_script_echo1 + +grub_script_echo1: $(top_builddir)/config.status tests/grub_script_echo1.in + (for x in tests/grub_script_echo1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_echo1 + +CLEANFILES += grub_script_echo1 +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_echo1.in +check_SCRIPTS += grub_script_leading_whitespace +TESTS += grub_script_leading_whitespace + +grub_script_leading_whitespace: $(top_builddir)/config.status tests/grub_script_leading_whitespace.in + (for x in tests/grub_script_leading_whitespace.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_leading_whitespace + +CLEANFILES += grub_script_leading_whitespace +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_leading_whitespace.in +check_SCRIPTS += grub_script_echo_keywords +TESTS += grub_script_echo_keywords + +grub_script_echo_keywords: $(top_builddir)/config.status tests/grub_script_echo_keywords.in + (for x in tests/grub_script_echo_keywords.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_echo_keywords + +CLEANFILES += grub_script_echo_keywords +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_echo_keywords.in +check_SCRIPTS += grub_script_vars1 +TESTS += grub_script_vars1 + +grub_script_vars1: $(top_builddir)/config.status tests/grub_script_vars1.in + (for x in tests/grub_script_vars1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_vars1 + +CLEANFILES += grub_script_vars1 +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_vars1.in +check_SCRIPTS += grub_script_for1 +TESTS += grub_script_for1 + +grub_script_for1: $(top_builddir)/config.status tests/grub_script_for1.in + (for x in tests/grub_script_for1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_for1 + +CLEANFILES += grub_script_for1 +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_for1.in +check_SCRIPTS += grub_script_while1 +TESTS += grub_script_while1 + +grub_script_while1: $(top_builddir)/config.status tests/grub_script_while1.in + (for x in tests/grub_script_while1.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_while1 + +CLEANFILES += grub_script_while1 +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_while1.in +check_SCRIPTS += grub_script_if +TESTS += grub_script_if + +grub_script_if: $(top_builddir)/config.status tests/grub_script_if.in + (for x in tests/grub_script_if.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_if + +CLEANFILES += grub_script_if +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_if.in +check_SCRIPTS += grub_script_blanklines +TESTS += grub_script_blanklines + +grub_script_blanklines: $(top_builddir)/config.status tests/grub_script_blanklines.in + (for x in tests/grub_script_blanklines.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_blanklines + +CLEANFILES += grub_script_blanklines +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_blanklines.in +check_SCRIPTS += grub_script_final_semicolon +TESTS += grub_script_final_semicolon + +grub_script_final_semicolon: $(top_builddir)/config.status tests/grub_script_final_semicolon.in + (for x in tests/grub_script_final_semicolon.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_final_semicolon + +CLEANFILES += grub_script_final_semicolon +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_final_semicolon.in +check_SCRIPTS += grub_script_dollar +TESTS += grub_script_dollar + +grub_script_dollar: $(top_builddir)/config.status tests/grub_script_dollar.in + (for x in tests/grub_script_dollar.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_dollar + +CLEANFILES += grub_script_dollar +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_dollar.in +check_SCRIPTS += grub_script_comments +TESTS += grub_script_comments + +grub_script_comments: $(top_builddir)/config.status tests/grub_script_comments.in + (for x in tests/grub_script_comments.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_comments + +CLEANFILES += grub_script_comments +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_comments.in +check_SCRIPTS += grub_script_functions +TESTS += grub_script_functions + +grub_script_functions: $(top_builddir)/config.status tests/grub_script_functions.in + (for x in tests/grub_script_functions.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_functions + +CLEANFILES += grub_script_functions +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_functions.in +check_SCRIPTS += grub_script_break +TESTS += grub_script_break + +grub_script_break: $(top_builddir)/config.status tests/grub_script_break.in + (for x in tests/grub_script_break.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_break + +CLEANFILES += grub_script_break +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_break.in +check_SCRIPTS += grub_script_continue +TESTS += grub_script_continue + +grub_script_continue: $(top_builddir)/config.status tests/grub_script_continue.in + (for x in tests/grub_script_continue.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_continue + +CLEANFILES += grub_script_continue +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_continue.in +check_SCRIPTS += grub_script_shift +TESTS += grub_script_shift + +grub_script_shift: $(top_builddir)/config.status tests/grub_script_shift.in + (for x in tests/grub_script_shift.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_shift + +CLEANFILES += grub_script_shift +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_shift.in +check_SCRIPTS += grub_script_blockarg +TESTS += grub_script_blockarg + +grub_script_blockarg: $(top_builddir)/config.status tests/grub_script_blockarg.in + (for x in tests/grub_script_blockarg.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_blockarg + +CLEANFILES += grub_script_blockarg +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_blockarg.in +check_SCRIPTS += grub_script_setparams +TESTS += grub_script_setparams + +grub_script_setparams: $(top_builddir)/config.status tests/grub_script_setparams.in + (for x in tests/grub_script_setparams.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_setparams + +CLEANFILES += grub_script_setparams +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_setparams.in +check_SCRIPTS += grub_script_return +TESTS += grub_script_return + +grub_script_return: $(top_builddir)/config.status tests/grub_script_return.in + (for x in tests/grub_script_return.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_return + +CLEANFILES += grub_script_return +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_return.in +check_SCRIPTS += grub_cmd_regexp +TESTS += grub_cmd_regexp + +grub_cmd_regexp: $(top_builddir)/config.status tests/grub_cmd_regexp.in + (for x in tests/grub_cmd_regexp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_regexp + +CLEANFILES += grub_cmd_regexp +EXTRA_DIST += +dist_noinst_DATA += tests/grub_cmd_regexp.in +check_SCRIPTS += grub_cmd_date +TESTS += grub_cmd_date + +grub_cmd_date: $(top_builddir)/config.status tests/grub_cmd_date.in + (for x in tests/grub_cmd_date.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_date + +CLEANFILES += grub_cmd_date +EXTRA_DIST += +dist_noinst_DATA += tests/grub_cmd_date.in +check_SCRIPTS += grub_cmd_set_date +TESTS += grub_cmd_set_date + +grub_cmd_set_date: $(top_builddir)/config.status tests/grub_cmd_set_date.in + (for x in tests/grub_cmd_set_date.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_set_date + +CLEANFILES += grub_cmd_set_date +EXTRA_DIST += +dist_noinst_DATA += tests/grub_cmd_set_date.in +check_SCRIPTS += grub_cmd_sleep +TESTS += grub_cmd_sleep + +grub_cmd_sleep: $(top_builddir)/config.status tests/grub_cmd_sleep.in + (for x in tests/grub_cmd_sleep.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_sleep + +CLEANFILES += grub_cmd_sleep +EXTRA_DIST += +dist_noinst_DATA += tests/grub_cmd_sleep.in +check_SCRIPTS += grub_script_expansion +TESTS += grub_script_expansion + +grub_script_expansion: $(top_builddir)/config.status tests/grub_script_expansion.in + (for x in tests/grub_script_expansion.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_expansion + +CLEANFILES += grub_script_expansion +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_expansion.in +check_SCRIPTS += grub_script_not +TESTS += grub_script_not + +grub_script_not: $(top_builddir)/config.status tests/grub_script_not.in + (for x in tests/grub_script_not.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_not + +CLEANFILES += grub_script_not +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_not.in +check_SCRIPTS += grub_script_no_commands +TESTS += grub_script_no_commands + +grub_script_no_commands: $(top_builddir)/config.status tests/grub_script_no_commands.in + (for x in tests/grub_script_no_commands.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_no_commands + +CLEANFILES += grub_script_no_commands +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_no_commands.in +check_SCRIPTS += partmap_test +TESTS += partmap_test + +partmap_test: $(top_builddir)/config.status tests/partmap_test.in + (for x in tests/partmap_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x partmap_test + +CLEANFILES += partmap_test +EXTRA_DIST += +dist_noinst_DATA += tests/partmap_test.in +check_SCRIPTS += hddboot_test +TESTS += hddboot_test + +hddboot_test: $(top_builddir)/config.status tests/hddboot_test.in + (for x in tests/hddboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x hddboot_test + +CLEANFILES += hddboot_test +EXTRA_DIST += +dist_noinst_DATA += tests/hddboot_test.in +check_SCRIPTS += fddboot_test +TESTS += fddboot_test + +fddboot_test: $(top_builddir)/config.status tests/fddboot_test.in + (for x in tests/fddboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x fddboot_test + +CLEANFILES += fddboot_test +EXTRA_DIST += +dist_noinst_DATA += tests/fddboot_test.in +check_SCRIPTS += cdboot_test +TESTS += cdboot_test + +cdboot_test: $(top_builddir)/config.status tests/cdboot_test.in + (for x in tests/cdboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x cdboot_test + +CLEANFILES += cdboot_test +EXTRA_DIST += +dist_noinst_DATA += tests/cdboot_test.in +check_SCRIPTS += netboot_test +TESTS += netboot_test + +netboot_test: $(top_builddir)/config.status tests/netboot_test.in + (for x in tests/netboot_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x netboot_test + +CLEANFILES += netboot_test +EXTRA_DIST += +dist_noinst_DATA += tests/netboot_test.in +check_SCRIPTS += pseries_test +TESTS += pseries_test + +pseries_test: $(top_builddir)/config.status tests/pseries_test.in + (for x in tests/pseries_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x pseries_test + +CLEANFILES += pseries_test +EXTRA_DIST += +dist_noinst_DATA += tests/pseries_test.in +check_SCRIPTS += core_compress_test +TESTS += core_compress_test + +core_compress_test: $(top_builddir)/config.status tests/core_compress_test.in + (for x in tests/core_compress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x core_compress_test + +CLEANFILES += core_compress_test +EXTRA_DIST += +dist_noinst_DATA += tests/core_compress_test.in +check_SCRIPTS += xzcompress_test +TESTS += xzcompress_test + +xzcompress_test: $(top_builddir)/config.status tests/xzcompress_test.in + (for x in tests/xzcompress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x xzcompress_test + +CLEANFILES += xzcompress_test +EXTRA_DIST += +dist_noinst_DATA += tests/xzcompress_test.in +check_SCRIPTS += gzcompress_test +TESTS += gzcompress_test + +gzcompress_test: $(top_builddir)/config.status tests/gzcompress_test.in + (for x in tests/gzcompress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gzcompress_test + +CLEANFILES += gzcompress_test +EXTRA_DIST += +dist_noinst_DATA += tests/gzcompress_test.in +check_SCRIPTS += lzocompress_test +TESTS += lzocompress_test + +lzocompress_test: $(top_builddir)/config.status tests/lzocompress_test.in + (for x in tests/lzocompress_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x lzocompress_test + +CLEANFILES += lzocompress_test +EXTRA_DIST += +dist_noinst_DATA += tests/lzocompress_test.in +check_SCRIPTS += grub_cmd_echo +TESTS += grub_cmd_echo + +grub_cmd_echo: $(top_builddir)/config.status tests/grub_cmd_echo.in + (for x in tests/grub_cmd_echo.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_echo + +CLEANFILES += grub_cmd_echo +EXTRA_DIST += +dist_noinst_DATA += tests/grub_cmd_echo.in +check_SCRIPTS += help_test +TESTS += help_test + +help_test: $(top_builddir)/config.status tests/help_test.in + (for x in tests/help_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x help_test + +CLEANFILES += help_test +EXTRA_DIST += +dist_noinst_DATA += tests/help_test.in +check_SCRIPTS += grub_script_gettext +TESTS += grub_script_gettext + +grub_script_gettext: $(top_builddir)/config.status tests/grub_script_gettext.in + (for x in tests/grub_script_gettext.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_gettext + +CLEANFILES += grub_script_gettext +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_gettext.in +check_SCRIPTS += grub_script_escape_comma +TESTS += grub_script_escape_comma + +grub_script_escape_comma: $(top_builddir)/config.status tests/grub_script_escape_comma.in + (for x in tests/grub_script_escape_comma.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_escape_comma + +CLEANFILES += grub_script_escape_comma +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_escape_comma.in +check_SCRIPTS += grub_script_strcmp +TESTS += grub_script_strcmp + +grub_script_strcmp: $(top_builddir)/config.status tests/grub_script_strcmp.in + (for x in tests/grub_script_strcmp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_script_strcmp + +CLEANFILES += grub_script_strcmp +EXTRA_DIST += +dist_noinst_DATA += tests/grub_script_strcmp.in +check_SCRIPTS += test_sha512sum +TESTS += test_sha512sum + +test_sha512sum: $(top_builddir)/config.status tests/test_sha512sum.in + (for x in tests/test_sha512sum.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x test_sha512sum + +CLEANFILES += test_sha512sum +EXTRA_DIST += +dist_noinst_DATA += tests/test_sha512sum.in +check_SCRIPTS += test_unset +TESTS += test_unset + +test_unset: $(top_builddir)/config.status tests/test_unset.in + (for x in tests/test_unset.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x test_unset + +CLEANFILES += test_unset +EXTRA_DIST += +dist_noinst_DATA += tests/test_unset.in +check_SCRIPTS += grub_func_test +TESTS += grub_func_test + +grub_func_test: $(top_builddir)/config.status tests/grub_func_test.in + (for x in tests/grub_func_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_func_test + +CLEANFILES += grub_func_test +EXTRA_DIST += +dist_noinst_DATA += tests/grub_func_test.in +check_SCRIPTS += grub_cmd_tr +TESTS += grub_cmd_tr + +grub_cmd_tr: $(top_builddir)/config.status tests/grub_cmd_tr.in + (for x in tests/grub_cmd_tr.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_tr + +CLEANFILES += grub_cmd_tr +EXTRA_DIST += +dist_noinst_DATA += tests/grub_cmd_tr.in +check_SCRIPTS += file_filter_test +TESTS += file_filter_test + +file_filter_test: $(top_builddir)/config.status tests/file_filter_test.in + (for x in tests/file_filter_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x file_filter_test + +CLEANFILES += file_filter_test +EXTRA_DIST += +dist_noinst_DATA += tests/file_filter_test.in +check_SCRIPTS += grub_cmd_test +TESTS += grub_cmd_test + +grub_cmd_test: $(top_builddir)/config.status tests/grub_cmd_test.in + (for x in tests/grub_cmd_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub_cmd_test + +CLEANFILES += grub_cmd_test +EXTRA_DIST += +dist_noinst_DATA += tests/grub_cmd_test.in +check_SCRIPTS += syslinux_test +TESTS += syslinux_test + +syslinux_test: $(top_builddir)/config.status tests/syslinux_test.in + (for x in tests/syslinux_test.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x syslinux_test + +CLEANFILES += syslinux_test +EXTRA_DIST += +dist_noinst_DATA += tests/syslinux_test.in +dist_grubconf_DATA += util/grub.d/README +dist_noinst_DATA += diff --git a/Makefile.util.def b/Makefile.util.def new file mode 100644 index 000000000..f9caccb97 --- /dev/null +++ b/Makefile.util.def @@ -0,0 +1,1351 @@ +AutoGen definitions Makefile.tpl; + +library = { + name = libgrubkern.a; + cflags = '$(CFLAGS_GNULIB)'; + cppflags = '$(CPPFLAGS_GNULIB)'; + + common = util/misc.c; + common = grub-core/kern/command.c; + common = grub-core/kern/device.c; + common = grub-core/kern/disk.c; + common = grub-core/lib/disk.c; + common = util/getroot.c; + common = grub-core/osdep/unix/getroot.c; + common = grub-core/osdep/getroot.c; + common = grub-core/osdep/devmapper/getroot.c; + common = grub-core/osdep/relpath.c; + extra_dist = grub-core/kern/disk_common.c; + extra_dist = grub-core/osdep/unix/relpath.c; + extra_dist = grub-core/osdep/aros/relpath.c; + extra_dist = grub-core/osdep/windows/relpath.c; + common = grub-core/kern/emu/hostdisk.c; + common = grub-core/osdep/devmapper/hostdisk.c; + common = grub-core/osdep/hostdisk.c; + common = grub-core/osdep/unix/hostdisk.c; + common = grub-core/osdep/exec.c; + common = grub-core/osdep/sleep.c; + common = grub-core/osdep/password.c; + common = grub-core/kern/emu/misc.c; + common = grub-core/kern/emu/mm.c; + common = grub-core/kern/env.c; + common = grub-core/kern/err.c; + common = grub-core/kern/file.c; + common = grub-core/kern/fs.c; + common = grub-core/kern/list.c; + common = grub-core/kern/misc.c; + common = grub-core/kern/partition.c; + common = grub-core/lib/crypto.c; + common = grub-core/disk/luks.c; + common = grub-core/disk/geli.c; + common = grub-core/disk/cryptodisk.c; + common = grub-core/disk/AFSplitter.c; + common = grub-core/lib/pbkdf2.c; + common = grub-core/commands/extcmd.c; + common = grub-core/lib/arg.c; + common = grub-core/disk/ldm.c; + common = grub-core/disk/diskfilter.c; + common = grub-core/partmap/gpt.c; + common = grub-core/partmap/msdos.c; + common = grub-core/fs/proc.c; + common = grub-core/fs/archelp.c; +}; + +library = { + name = libgrubmods.a; + cflags = '-fno-builtin -Wno-undef'; + cppflags = '-I$(top_srcdir)/grub-core/lib/minilzo -I$(srcdir)/grub-core/lib/xzembed -DMINILZO_HAVE_CONFIG_H'; + + common_nodist = grub_script.tab.c; + common_nodist = grub_script.yy.c; + common_nodist = libgrub_a_init.c; + common_nodist = grub_script.yy.h; + common_nodist = grub_script.tab.h; + + common = grub-core/commands/blocklist.c; + common = grub-core/commands/macbless.c; + common = grub-core/commands/xnu_uuid.c; + common = grub-core/commands/testload.c; + common = grub-core/commands/ls.c; + common = grub-core/disk/dmraid_nvidia.c; + common = grub-core/disk/loopback.c; + common = grub-core/disk/lvm.c; + common = grub-core/disk/mdraid_linux.c; + common = grub-core/disk/mdraid_linux_be.c; + common = grub-core/disk/mdraid1x_linux.c; + common = grub-core/disk/raid5_recover.c; + common = grub-core/disk/raid6_recover.c; + common = grub-core/font/font.c; + common = grub-core/gfxmenu/font.c; + common = grub-core/normal/charset.c; + common = grub-core/video/fb/fbblit.c; + common = grub-core/video/fb/fbutil.c; + common = grub-core/video/fb/fbfill.c; + common = grub-core/video/fb/video_fb.c; + common = grub-core/video/video.c; + common = grub-core/video/capture.c; + common = grub-core/video/colors.c; + common = grub-core/unidata.c; + common = grub-core/io/bufio.c; + common = grub-core/fs/affs.c; + common = grub-core/fs/afs.c; + common = grub-core/fs/bfs.c; + common = grub-core/fs/btrfs.c; + common = grub-core/fs/cbfs.c; + common = grub-core/fs/cpio.c; + common = grub-core/fs/cpio_be.c; + common = grub-core/fs/odc.c; + common = grub-core/fs/newc.c; + common = grub-core/fs/ext2.c; + common = grub-core/fs/fat.c; + common = grub-core/fs/exfat.c; + common = grub-core/fs/fshelp.c; + common = grub-core/fs/hfs.c; + common = grub-core/fs/hfsplus.c; + common = grub-core/fs/hfspluscomp.c; + common = grub-core/fs/iso9660.c; + common = grub-core/fs/jfs.c; + common = grub-core/fs/minix.c; + common = grub-core/fs/minix2.c; + common = grub-core/fs/minix3.c; + common = grub-core/fs/minix_be.c; + common = grub-core/fs/minix2_be.c; + common = grub-core/fs/minix3_be.c; + common = grub-core/fs/nilfs2.c; + common = grub-core/fs/ntfs.c; + common = grub-core/fs/ntfscomp.c; + common = grub-core/fs/reiserfs.c; + common = grub-core/fs/romfs.c; + common = grub-core/fs/sfs.c; + common = grub-core/fs/squash4.c; + common = grub-core/fs/tar.c; + common = grub-core/fs/udf.c; + common = grub-core/fs/ufs2.c; + common = grub-core/fs/ufs.c; + common = grub-core/fs/ufs_be.c; + common = grub-core/fs/xfs.c; + common = grub-core/fs/zfs/zfscrypt.c; + common = grub-core/fs/zfs/zfs.c; + common = grub-core/fs/zfs/zfsinfo.c; + common = grub-core/fs/zfs/zfs_lzjb.c; + common = grub-core/fs/zfs/zfs_lz4.c; + common = grub-core/fs/zfs/zfs_sha256.c; + common = grub-core/fs/zfs/zfs_fletcher.c; + common = grub-core/lib/envblk.c; + common = grub-core/lib/hexdump.c; + common = grub-core/lib/LzFind.c; + common = grub-core/lib/LzmaEnc.c; + common = grub-core/lib/crc.c; + common = grub-core/lib/adler32.c; + common = grub-core/lib/crc64.c; + common = grub-core/normal/datetime.c; + common = grub-core/normal/misc.c; + common = grub-core/partmap/acorn.c; + common = grub-core/partmap/amiga.c; + common = grub-core/partmap/apple.c; + common = grub-core/partmap/sun.c; + common = grub-core/partmap/plan.c; + common = grub-core/partmap/dvh.c; + common = grub-core/partmap/sunpc.c; + common = grub-core/partmap/bsdlabel.c; + common = grub-core/partmap/dfly.c; + common = grub-core/script/function.c; + common = grub-core/script/lexer.c; + common = grub-core/script/main.c; + common = grub-core/script/script.c; + common = grub-core/script/argv.c; + common = grub-core/io/gzio.c; + common = grub-core/io/xzio.c; + common = grub-core/io/lzopio.c; + common = grub-core/kern/ia64/dl_helper.c; + common = grub-core/kern/arm/dl_helper.c; + common = grub-core/kern/arm64/dl_helper.c; + common = grub-core/lib/minilzo/minilzo.c; + common = grub-core/lib/xzembed/xz_dec_bcj.c; + common = grub-core/lib/xzembed/xz_dec_lzma2.c; + common = grub-core/lib/xzembed/xz_dec_stream.c; +}; + +program = { + name = grub-mkimage; + mansection = 1; + + common = util/grub-mkimage.c; + common = util/mkimage.c; + common = util/grub-mkimage32.c; + common = util/grub-mkimage64.c; + common = util/resolve.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + common = grub-core/osdep/config.c; + extra_dist = grub-core/osdep/aros/config.c; + extra_dist = grub-core/osdep/windows/config.c; + extra_dist = grub-core/osdep/unix/config.c; + common = util/config.c; + + extra_dist = util/grub-mkimagexx.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBLZMA)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + cppflags = '-DGRUB_PKGLIBDIR=\"$(pkglibdir)\"'; +}; + +program = { + name = grub-mkrelpath; + mansection = 1; + + common = util/grub-mkrelpath.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-script-check; + mansection = 1; + + common = util/grub-script-check.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-editenv; + mansection = 1; + + common = util/grub-editenv.c; + common = util/editenv.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-mkpasswd-pbkdf2; + mansection = 1; + + common = util/grub-mkpasswd-pbkdf2.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/random.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-macho2img; + mansection = 1; + common = util/grub-macho2img.c; + condition = COND_APPLE_LINKER; +}; + +program = { + name = grub-fstest; + mansection = 1; + common_nodist = grub_fstest_init.c; + common = util/grub-fstest.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-mount; + mansection = 1; + common_nodist = grub_fstest_init.c; + common = util/grub-mount.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse'; + condition = COND_GRUB_MOUNT; +}; + +program = { + name = grub-mkfont; + mansection = 1; + common = util/grub-mkfont.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + cflags = '$(freetype_cflags)'; + cppflags = '-DGRUB_MKFONT=1'; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(freetype_libs)'; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + condition = COND_GRUB_MKFONT; +}; + +program = { + name = grub-probe; + installdir = sbin; + mansection = 8; + common = util/grub-probe.c; + common = util/probe.c; + common = grub-core/osdep/ofpath.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-bios-setup; + installdir = sbin; + mansection = 8; + common = util/grub-setup.c; + common = util/setup_bios.c; + extra_dist = util/setup.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/lib/reed_solomon.c; + common = grub-core/osdep/blocklist.c; + extra_dist = grub-core/osdep/generic/blocklist.c; + extra_dist = grub-core/osdep/linux/blocklist.c; + extra_dist = grub-core/osdep/windows/blocklist.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubkern.a; + ldadd = libgrubgcry.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + cppflags = '-DGRUB_SETUP_FUNC=grub_util_bios_setup'; +}; + +program = { + name = grub-sparc64-setup; + installdir = sbin; + mansection = 8; + common = util/grub-setup.c; + common = util/setup_sparc.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/lib/reed_solomon.c; + common = grub-core/osdep/ofpath.c; + common = grub-core/osdep/blocklist.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubkern.a; + ldadd = libgrubgcry.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + cppflags = '-DGRUB_SETUP_FUNC=grub_util_sparc_setup'; +}; + +program = { + name = grub-ofpathname; + installdir = sbin; + mansection = 8; + common = util/ieee1275/grub-ofpathname.c; + common = grub-core/osdep/ofpath.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-mklayout; + mansection = 1; + + common = util/grub-mklayout.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-macbless; + installdir = sbin; + mansection = 8; + common = util/grub-macbless.c; + common = grub-core/osdep/init.c; + common = grub-core/kern/emu/argp_common.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +data = { + common = util/grub.d/README; + installdir = grubconf; +}; + +script = { + name = '00_header'; + common = util/grub.d/00_header.in; + installdir = grubconf; +}; + +script = { + name = '10_windows'; + common = util/grub.d/10_windows.in; + installdir = grubconf; + condition = COND_HOST_WINDOWS; +}; + +script = { + name = '10_hurd'; + common = util/grub.d/10_hurd.in; + installdir = grubconf; + condition = COND_HOST_HURD; +}; + +script = { + name = '10_kfreebsd'; + common = util/grub.d/10_kfreebsd.in; + installdir = grubconf; + condition = COND_HOST_KFREEBSD; +}; + +script = { + name = '10_illumos'; + common = util/grub.d/10_illumos.in; + installdir = grubconf; + condition = COND_HOST_ILLUMOS; +}; + +script = { + name = '10_netbsd'; + common = util/grub.d/10_netbsd.in; + installdir = grubconf; + condition = COND_HOST_NETBSD; +}; + +script = { + name = '10_linux'; + common = util/grub.d/10_linux.in; + installdir = grubconf; + condition = COND_HOST_LINUX; +}; + +script = { + name = '10_xnu'; + common = util/grub.d/10_xnu.in; + installdir = grubconf; + condition = COND_HOST_XNU; +}; + +script = { + name = '20_linux_xen'; + common = util/grub.d/20_linux_xen.in; + installdir = grubconf; + condition = COND_HOST_LINUX; +}; + +script = { + name = '30_os-prober'; + common = util/grub.d/30_os-prober.in; + installdir = grubconf; +}; + +script = { + name = '40_custom'; + common = util/grub.d/40_custom.in; + installdir = grubconf; +}; + +script = { + name = '41_custom'; + common = util/grub.d/41_custom.in; + installdir = grubconf; +}; + +program = { + mansection = 1; + name = grub-mkrescue; + + common = util/grub-mkrescue.c; + common = util/render-label.c; + common = util/glue-efi.c; + common = util/mkimage.c; + common = util/grub-mkimage32.c; + common = util/grub-mkimage64.c; + common = util/grub-install-common.c; + common = util/setup_bios.c; + common = util/setup_sparc.c; + common = grub-core/lib/reed_solomon.c; + common = grub-core/osdep/random.c; + common = grub-core/osdep/ofpath.c; + common = grub-core/osdep/platform.c; + common = grub-core/osdep/platform_unix.c; + common = grub-core/osdep/compress.c; + extra_dist = grub-core/osdep/unix/compress.c; + extra_dist = grub-core/osdep/basic/compress.c; + common = util/editenv.c; + common = grub-core/osdep/blocklist.c; + common = grub-core/osdep/config.c; + common = util/config.c; + + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + + common = util/resolve.c; + + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = '$(LIBLZMA)'; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + + condition = COND_HAVE_EXEC; +}; + +program = { + mansection = 1; + name = grub-mkstandalone; + common = util/grub-mkstandalone.c; + + common = util/render-label.c; + common = util/glue-efi.c; + common = util/mkimage.c; + common = util/grub-mkimage32.c; + common = util/grub-mkimage64.c; + common = util/grub-install-common.c; + common = util/setup_bios.c; + common = util/setup_sparc.c; + common = grub-core/lib/reed_solomon.c; + common = grub-core/osdep/random.c; + common = grub-core/osdep/ofpath.c; + common = grub-core/osdep/platform.c; + common = grub-core/osdep/platform_unix.c; + extra_dist = grub-core/osdep/linux/platform.c; + extra_dist = grub-core/osdep/windows/platform.c; + extra_dist = grub-core/osdep/basic/platform.c; + extra_dist = grub-core/osdep/basic/no_platform.c; + extra_dist = grub-core/osdep/unix/platform.c; + common = grub-core/osdep/compress.c; + common = util/editenv.c; + common = grub-core/osdep/blocklist.c; + common = grub-core/osdep/config.c; + common = util/config.c; + + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + + common = util/resolve.c; + + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = '$(LIBLZMA)'; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + mansection = 8; + installdir = sbin; + name = grub-install; + + common = util/grub-install.c; + common = util/probe.c; + common = util/mkimage.c; + common = util/grub-mkimage32.c; + common = util/grub-mkimage64.c; + common = util/grub-install-common.c; + common = util/setup_bios.c; + common = util/setup_sparc.c; + common = grub-core/lib/reed_solomon.c; + common = grub-core/osdep/random.c; + common = grub-core/osdep/ofpath.c; + common = grub-core/osdep/platform.c; + common = grub-core/osdep/platform_unix.c; + common = grub-core/osdep/compress.c; + common = util/editenv.c; + common = grub-core/osdep/blocklist.c; + common = grub-core/osdep/config.c; + common = util/config.c; + common = util/render-label.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + + common = util/resolve.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = '$(LIBLZMA)'; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + mansection = 1; + installdir = bin; + name = grub-mknetdir; + + common = util/grub-mknetdir.c; + + common = util/mkimage.c; + common = util/grub-mkimage32.c; + common = util/grub-mkimage64.c; + common = util/grub-install-common.c; + common = util/setup_bios.c; + common = util/setup_sparc.c; + common = grub-core/lib/reed_solomon.c; + common = grub-core/osdep/random.c; + common = grub-core/osdep/ofpath.c; + common = grub-core/osdep/platform.c; + common = grub-core/osdep/platform_unix.c; + common = grub-core/osdep/compress.c; + common = util/editenv.c; + common = grub-core/osdep/blocklist.c; + common = grub-core/osdep/config.c; + common = util/config.c; + + common = util/resolve.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = '$(LIBLZMA)'; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +script = { + name = grub-mkconfig; + common = util/grub-mkconfig.in; + mansection = 8; + installdir = sbin; +}; + +script = { + name = grub-set-default; + common = util/grub-set-default.in; + mansection = 8; + installdir = sbin; +}; + +script = { + name = grub-reboot; + common = util/grub-reboot.in; + mansection = 8; + installdir = sbin; +}; + +script = { + name = grub-mkconfig_lib; + common = util/grub-mkconfig_lib.in; + installdir = noinst; +}; + +script = { + name = grub-kbdcomp; + common = util/grub-kbdcomp.in; + mansection = 1; +}; + +script = { + name = grub-shell; + common = tests/util/grub-shell.in; + installdir = noinst; +}; + +script = { + name = grub-shell-tester; + common = tests/util/grub-shell-tester.in; + installdir = noinst; +}; + +script = { + name = grub-fs-tester; + common = tests/util/grub-fs-tester.in; + installdir = noinst; + dependencies = 'garbage-gen$(BUILD_EXEEXT)'; +}; + +script = { + testcase; + name = ext234_test; + common = tests/ext234_test.in; +}; + +script = { + testcase; + name = squashfs_test; + common = tests/squashfs_test.in; +}; + +script = { + testcase; + name = iso9660_test; + common = tests/iso9660_test.in; +}; + +script = { + testcase; + name = hfsplus_test; + common = tests/hfsplus_test.in; +}; + +script = { + testcase; + name = ntfs_test; + common = tests/ntfs_test.in; +}; + +script = { + testcase; + name = reiserfs_test; + common = tests/reiserfs_test.in; +}; + +script = { + testcase; + name = fat_test; + common = tests/fat_test.in; +}; + +script = { + testcase; + name = minixfs_test; + common = tests/minixfs_test.in; +}; + +script = { + testcase; + name = xfs_test; + common = tests/xfs_test.in; +}; + +script = { + testcase; + name = nilfs2_test; + common = tests/nilfs2_test.in; +}; + +script = { + testcase; + name = romfs_test; + common = tests/romfs_test.in; +}; + +script = { + testcase; + name = exfat_test; + common = tests/exfat_test.in; +}; + +script = { + testcase; + name = tar_test; + common = tests/tar_test.in; +}; + +script = { + testcase; + name = udf_test; + common = tests/udf_test.in; +}; + +script = { + testcase; + name = hfs_test; + common = tests/hfs_test.in; +}; + +script = { + testcase; + name = jfs_test; + common = tests/jfs_test.in; +}; + +script = { + testcase; + name = btrfs_test; + common = tests/btrfs_test.in; +}; + +script = { + testcase; + name = zfs_test; + common = tests/zfs_test.in; +}; + +script = { + testcase; + name = cpio_test; + common = tests/cpio_test.in; +}; + +script = { + testcase; + name = example_scripted_test; + common = tests/example_scripted_test.in; +}; + +script = { + testcase; + name = gettext_strings_test; + common = tests/gettext_strings_test.in; + extra_dist = po/exclude.pot; +}; + +script = { + testcase; + name = pata_test; + common = tests/pata_test.in; +}; + +script = { + testcase; + name = ahci_test; + common = tests/ahci_test.in; +}; + +script = { + testcase; + name = uhci_test; + common = tests/uhci_test.in; +}; + +script = { + testcase; + name = ohci_test; + common = tests/ohci_test.in; +}; + +script = { + testcase; + name = ehci_test; + common = tests/ehci_test.in; +}; + +script = { + testcase; + name = example_grub_script_test; + common = tests/example_grub_script_test.in; +}; + +script = { + testcase; + name = grub_script_eval; + common = tests/grub_script_eval.in; +}; + +script = { + testcase; + name = grub_script_test; + common = tests/grub_script_test.in; +}; + +script = { + testcase; + name = grub_script_echo1; + common = tests/grub_script_echo1.in; +}; + +script = { + testcase; + name = grub_script_leading_whitespace; + common = tests/grub_script_leading_whitespace.in; +}; + +script = { + testcase; + name = grub_script_echo_keywords; + common = tests/grub_script_echo_keywords.in; +}; + +script = { + testcase; + name = grub_script_vars1; + common = tests/grub_script_vars1.in; +}; + +script = { + testcase; + name = grub_script_for1; + common = tests/grub_script_for1.in; +}; + +script = { + testcase; + name = grub_script_while1; + common = tests/grub_script_while1.in; +}; + +script = { + testcase; + name = grub_script_if; + common = tests/grub_script_if.in; +}; + +script = { + testcase; + name = grub_script_blanklines; + common = tests/grub_script_blanklines.in; +}; + +script = { + testcase; + name = grub_script_final_semicolon; + common = tests/grub_script_final_semicolon.in; +}; + +script = { + testcase; + name = grub_script_dollar; + common = tests/grub_script_dollar.in; +}; + +script = { + testcase; + name = grub_script_comments; + common = tests/grub_script_comments.in; +}; + +script = { + testcase; + name = grub_script_functions; + common = tests/grub_script_functions.in; +}; + +script = { + testcase; + name = grub_script_break; + common = tests/grub_script_break.in; +}; + +script = { + testcase; + name = grub_script_continue; + common = tests/grub_script_continue.in; +}; + +script = { + testcase; + name = grub_script_shift; + common = tests/grub_script_shift.in; +}; + +script = { + testcase; + name = grub_script_blockarg; + common = tests/grub_script_blockarg.in; +}; + +script = { + testcase; + name = grub_script_setparams; + common = tests/grub_script_setparams.in; +}; + +script = { + testcase; + name = grub_script_return; + common = tests/grub_script_return.in; +}; + +script = { + testcase; + name = grub_cmd_regexp; + common = tests/grub_cmd_regexp.in; +}; + +script = { + testcase; + name = grub_cmd_date; + common = tests/grub_cmd_date.in; +}; + +script = { + testcase; + name = grub_cmd_set_date; + common = tests/grub_cmd_set_date.in; +}; + +script = { + testcase; + name = grub_cmd_sleep; + common = tests/grub_cmd_sleep.in; +}; + +script = { + testcase; + name = grub_script_expansion; + common = tests/grub_script_expansion.in; +}; + +script = { + testcase; + name = grub_script_not; + common = tests/grub_script_not.in; +}; + +script = { + testcase; + name = grub_script_no_commands; + common = tests/grub_script_no_commands.in; +}; + +script = { + testcase; + name = partmap_test; + common = tests/partmap_test.in; +}; + +script = { + testcase; + name = hddboot_test; + common = tests/hddboot_test.in; +}; + +script = { + testcase; + name = fddboot_test; + common = tests/fddboot_test.in; +}; + +script = { + testcase; + name = cdboot_test; + common = tests/cdboot_test.in; +}; + +script = { + testcase; + name = netboot_test; + common = tests/netboot_test.in; +}; + +script = { + testcase; + name = pseries_test; + common = tests/pseries_test.in; +}; + +script = { + testcase; + name = core_compress_test; + common = tests/core_compress_test.in; +}; + +script = { + testcase; + name = xzcompress_test; + common = tests/xzcompress_test.in; +}; + +script = { + testcase; + name = gzcompress_test; + common = tests/gzcompress_test.in; +}; + +script = { + testcase; + name = lzocompress_test; + common = tests/lzocompress_test.in; +}; + +script = { + testcase; + name = grub_cmd_echo; + common = tests/grub_cmd_echo.in; +}; + +script = { + testcase; + name = help_test; + common = tests/help_test.in; +}; + +script = { + testcase; + name = grub_script_gettext; + common = tests/grub_script_gettext.in; +}; + +script = { + testcase; + name = grub_script_escape_comma; + common = tests/grub_script_escape_comma.in; +}; + +script = { + testcase; + name = grub_script_strcmp; + common = tests/grub_script_strcmp.in; +}; + +script = { + testcase; + name = test_sha512sum; + common = tests/test_sha512sum.in; +}; + +script = { + testcase; + name = test_unset; + common = tests/test_unset.in; +}; + +script = { + testcase; + name = grub_func_test; + common = tests/grub_func_test.in; +}; + +script = { + testcase; + name = grub_cmd_tr; + common = tests/grub_cmd_tr.in; +}; + +script = { + testcase; + name = file_filter_test; + common = tests/file_filter_test.in; +}; + +script = { + testcase; + name = grub_cmd_test; + common = tests/grub_cmd_test.in; +}; + +script = { + testcase; + name = syslinux_test; + common = tests/syslinux_test.in; +}; + +program = { + testcase; + name = example_unit_test; + common = tests/example_unit_test.c; + common = tests/lib/unit_test.c; + common = grub-core/kern/list.c; + common = grub-core/kern/misc.c; + common = grub-core/tests/lib/test.c; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + testcase; + name = printf_test; + common = tests/printf_unit_test.c; + common = tests/lib/unit_test.c; + common = grub-core/kern/list.c; + common = grub-core/kern/misc.c; + common = grub-core/tests/lib/test.c; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + testcase; + name = date_test; + common = tests/date_unit_test.c; + common = tests/lib/unit_test.c; + common = grub-core/kern/list.c; + common = grub-core/kern/misc.c; + common = grub-core/tests/lib/test.c; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + testcase; + name = priority_queue_unit_test; + common = tests/priority_queue_unit_test.cc; + common = tests/lib/unit_test.c; + common = grub-core/kern/list.c; + common = grub-core/kern/misc.c; + common = grub-core/tests/lib/test.c; + common = grub-core/lib/priority_queue.c; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + condition = COND_HAVE_CXX; +}; + +program = { + testcase; + name = cmp_test; + common = tests/cmp_unit_test.c; + common = tests/lib/unit_test.c; + common = grub-core/kern/list.c; + common = grub-core/kern/misc.c; + common = grub-core/tests/lib/test.c; + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-menulst2cfg; + mansection = 1; + common = util/grub-menulst2cfg.c; + common = grub-core/lib/legacy_parse.c; + common = grub-core/lib/i386/pc/vesa_modes_table.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-syslinux2cfg; + mansection = 1; + common = util/grub-syslinux2cfg.c; + common = grub-core/lib/syslinux_parse.c; + common = grub-core/lib/getline.c; + common = grub-core/osdep/init.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + common = grub-core/kern/emu/argp_common.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-glue-efi; + mansection = 1; + + common = util/grub-glue-efi.c; + common = util/glue-efi.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-render-label; + mansection = 1; + + common = util/grub-render-label.c; + common = util/render-label.c; + common = grub-core/kern/emu/argp_common.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; + +program = { + name = grub-file; + mansection = 1; + + common = util/grub-file.c; + common = util/render-label.c; + common = grub-core/commands/file.c; + common = grub-core/commands/file32.c; + common = grub-core/commands/file64.c; + common = grub-core/loader/i386/xen_file.c; + common = grub-core/loader/i386/xen_file32.c; + common = grub-core/loader/i386/xen_file64.c; + common = grub-core/io/offset.c; + common = grub-core/kern/elf.c; + common = grub-core/loader/lzss.c; + common = grub-core/loader/macho.c; + common = grub-core/loader/macho32.c; + common = grub-core/loader/macho64.c; + common = grub-core/kern/emu/hostfs.c; + common = grub-core/disk/host.c; + common = grub-core/osdep/init.c; + + ldadd = libgrubmods.a; + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; +}; diff --git a/Makefile.utilgcry.def b/Makefile.utilgcry.def new file mode 100644 index 000000000..c85333b60 --- /dev/null +++ b/Makefile.utilgcry.def @@ -0,0 +1,31 @@ +AutoGen definitions Makefile.tpl; + +library = { + name = libgrubgcry.a; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; + extra_dist = grub-core/lib/libgcrypt-grub/cipher/ChangeLog; + + common = grub-core/lib/libgcrypt-grub/cipher/arcfour.c; + common = grub-core/lib/libgcrypt-grub/cipher/blowfish.c; + common = grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c; + common = grub-core/lib/libgcrypt-grub/cipher/camellia.c; + common = grub-core/lib/libgcrypt-grub/cipher/cast5.c; + common = grub-core/lib/libgcrypt-grub/cipher/crc.c; + common = grub-core/lib/libgcrypt-grub/cipher/des.c; + common = grub-core/lib/libgcrypt-grub/cipher/idea.c; + common = grub-core/lib/libgcrypt-grub/cipher/md4.c; + common = grub-core/lib/libgcrypt-grub/cipher/md5.c; + common = grub-core/lib/libgcrypt-grub/cipher/rfc2268.c; + common = grub-core/lib/libgcrypt-grub/cipher/rijndael.c; + common = grub-core/lib/libgcrypt-grub/cipher/rmd160.c; + common = grub-core/lib/libgcrypt-grub/cipher/seed.c; + common = grub-core/lib/libgcrypt-grub/cipher/serpent.c; + common = grub-core/lib/libgcrypt-grub/cipher/sha1.c; + common = grub-core/lib/libgcrypt-grub/cipher/sha256.c; + common = grub-core/lib/libgcrypt-grub/cipher/sha512.c; + common = grub-core/lib/libgcrypt-grub/cipher/tiger.c; + common = grub-core/lib/libgcrypt-grub/cipher/twofish.c; + common = grub-core/lib/libgcrypt-grub/cipher/whirlpool.c; + common = grub-core/lib/libgcrypt-grub/cipher/init.c; +}; diff --git a/NEWS b/NEWS new file mode 100644 index 000000000..2ebd54e78 --- /dev/null +++ b/NEWS @@ -0,0 +1,703 @@ +New in 2.02: + +* New/improved filesystem and disk support: + * Big-endian UFS1. + * Experimental 64-bit ext2 support. + * Various fixes for non-512-byte sector devices. + * New `proc' filesystem framework, used by LUKS disks. + * Fix DM-RAID partition handling. + * New `nativedisk' command to switch from firmware to native disk drivers. + * Compressed HFS+. + * DragonFly BSD labels. + * CBFS (coreboot). + * Handle partitioned LVM properly. + * Use LVM UUIDs whenever possible. + * GPT PReP. + * New `progress' module that shows progress information while reading + files. + * ZFS features support. + * ZFS LZ4 support. + * XFS V5 format support. + * LVM RAID1 support. + +* New/improved terminal and video support: + * Monochrome text (matching `hercules' in GRUB Legacy). + * Morse code output using system speaker. + * `spkmodem' output (simple data protocol using system speaker). + * Handle Japanese special keys. + * coreboot framebuffer. + * Serial on ARC. + * Native vt100 handling for grub-emu, replacing the use of the curses + library. + * New gfxmenu options for terminal window positioning, theme background + image handling, and scrollbar padding, plus `item_pixmap_style' and + `highlight_overlay'. + * Support several more image types (paletted and greyscale). + +* Boot protocol improvements: + * Support Apple FAT binaries on non-Apple platforms. + * Improve FreeDOS direct loading support compatibility. + * Enable `linux16' on all x86 platforms, not just BIOS. + * New TrueCrypt ISO loader. + * multiboot2 boot-services EFI specification. + * multiboot2 EFI memory map specification. + * multiboot2 full-file specfication. + +* New/improved network support: + * New variables `net_default_*' containing properties of the default + interface. + * Autoload `http' and `tftp' modules if necessary. + * Improve TFTP robustness. + * Parse `nd' disk names in GRUB Legacy configuration files. + * Issue separate DNS queries for IPv4 and IPv6. + * Support IPv6 Router Advertisement to configure default router. + * New variable net__next_server containing next server + from BOOTP reply. + +* Coreboot improvements: + * CBFS support both in on-disk images (loopback) and flash. + * Ability to launch another payload from flash or disk + * Coreboot framebuffer + * CBMEMC support (both logging and inspecting logs) + * Command for inspecting coreboot timestamps (`coreboot_boottime'). + * Command for inspecting coreboot tables (`lscoreboot'). + * New target default_payload.elf. + * Increased maximal core size. + * Prefer pmtimer for TSC calibration. + +* New/improved platform support: + * New `efifwsetup' and `lsefi' commands on EFI platforms. + * New `cmosdump' and `cmosset' commands on platforms with CMOS support. + * New command `pcidump' for PCI platforms. + * Improve opcode parsing in ACPI halt implementation. + * Use the TSC as a possible time source on i386-ieee1275. + * Merge PowerPC grub-mkrescue implementation with the common one. + * Support grub-mkrescue on i386-ieee1275, sparc64, bootinfo machines such + as pSeries, and mips-arc. + * Make grub-mkrescue better support Apple Intel Macs on CD. + * Enable GRUB Legacy configuration file parsing on EFI. + * Support halt for Loongson 2E. + * ARM U-Boot and EFI ports. + * Reorganise platform-dependent code in utilities to avoid #ifdef mess. + * AROS and Haiku support for userspace utilities. + * Xen PV port. + * Fix EFI stack alignment. + * ARM64 EFI port. + * On Linux, read partition start offsets from sysfs if possible. + * New grub-macbless utility, and better integration with Mac firmware in + grub-install. + * Support Yeeloong 3A. + * Add `cpuid --pae' option to detect Physical Address Extension on x86. + * Support for USB debug dongles. + * Support for *-emu on all platforms (previously only i386/x86_64 worked). + * Support *-emu on Windows. + * New platform `none' which builds only user level utilities. This is now + default if target CPU is not supported. + * Support for booting little-endian Linux kernel on powerpc. + * Support network boot with Oracle sun4v vnet devices. + * Added SAS disks to the IEEE 1275 Open Firmware device list. + * Try multiple methods for TSC (timestamp counter) calibration - PIT, pmtimer, + EFI Stall. If everything fails, use hardcoded frequency 800MHz. + * Support Hyper-V Gen2 platforms which lack PIT for TSC calibration. + * Map UEFI Persistent Memory to E820 persistent memory. + * New Xen loader on ARM64. + * Respect alignment requirement for block device IO buffers on EFI. + +* Security: + * Add optional facility to enforce that all files read by the core image + from disk have a valid detached digital signature. + +* Performance: + * Avoid costly division operations in many places. + * New boot time analysis framework (`./configure --enable-boot-time'). + * Initialise USB ports in parallel. + * New `testspeed' command to test file read speed. + * Speed-up gfxterm by storing intermediate results in more compact format. + * Lazy LVM/mdraid scan. + * Disk hints. + +* Scripting: + * New `eval' and `tr' commands. + * grub-script-check fails on scripts containing no commands. + +* Installation and other utility improvements: + * Add option to compress files on installation or image creation. + * Using grub-reboot no longer requires setting `GRUB_DEFAULT=saved'. + * Support probing EFI System Partition (requires os-prober >= 1.58). + * Fix inconsistent use of `GRUB_CRYPTODISK_ENABLE' and + `GRUB_ENABLE_CRYPTODISK'; the latter is now used consistently. + * grub-mount handles symbolic links to directories. + * Support disabling submenus with `GRUB_DISABLE_SUBMENU' configuration key + for grub-mkconfig. + * grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone + rewritten in C. They should now work in supported non-Unix-like + environments. + * Native mingw support. + * Ability to install on EFI under windows. + * Reorganise timeout handling using new `timeout_style' environment + variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig. + Menu hotkeys pressed during a hidden timeout now boot the corresponding + menu entry immediately. + * New `file' command and grub-file utility to check file types. + * New syslinux configuration file parser. + * Set menu entry class to primary OS name returned by os-prober to display + OS specific icon. + * On Linux x86 detect EFI word size in grub-install and automatically select + correct platform (x86_64-efi or i386-efi) to install. Requires Linux kernel + 4.0 or higher. + +* Build system: + * Remove all uses of nested functions; GRUB no longer requires an + executable stack. + * Fix documentation build with Texinfo >= 5.1. + * More robust and documented cross-compiling support. + * Partial clang support for some platforms (experimental). + * Partial mingw64 x86_64-efi compile support (highly experimental). + * Partial mingw32 i386-* (other than already present i386-pc) + compile support (highly experimental). + * Support for grub-mkpasswd on Windows. + * Eliminate the use of AutoGen. This allowed some performance + improvements to the build system. + * Remove variable length arrays. + * OpenBSD compile and tools support (NetBSD and FreeBSD were already supported). + * Fix build with FreeType >= 2.5.1. + * Make gentpl.py compatible with Python 3. It now requires at least + Python 2.6. + * modinfo.sh contains build information now. + * Added many new tests to improve robustness. + * Target is built without libgcc now. Necessary builtins are reimplemented + directly. This removes requirement for target-specific runtime on build + system. + * emu libusb support removed (was broken and unmaintained). + * powerpc64le compile support. + * Use fixed timestamp when generating GRUB image for reproducible builds. + * Verify at build time that modules contain only supported relocations and their + structure matches what boot-time module loader expects. + * Do not require fonts on powerpc-ieee1275. + +* Revision control moved to git. + +New in 2.00: + +* Appearance: + * Official theme for gfxmenu (starfield) + * Menu is organised with submenus. + * Better default video mode selection using EDID. + +* New platforms: + * Itanium port. + * Fuloong2F support (including GRUB as firmware) + * Fuloong2E support (except GRUB as firmware) + * ARCS (SGI machines) port. + * qemu -M mips port. + +* grub-mount to mount filesystems using GRUB FS drivers and FUSE. + +* Changed security default so entries are locked by default if any superuser is + defined. + +* New drivers: + * EHCI. + * AHCI. + * ESCC serial. + * IEEE1275 serial. + * EFI serial. + * Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS. + +* New filesystem, filters and disks formats: + * DVH partition map. + * Plan9 partition map. + * Big-endian mdraid. + * Big-endian cpio. + * ODC and NEWC cpio. + * ExFAT. + * Minix3fs. + * Big-endian minixfs. + * RomFS. + * Squash4. + * Support non-512B disk blocks. + * LUKS and GELI support. + * LDM read support (no install yet). + * LZOP. + +* Improved filesystem and disks formats support: + * HFS+ label support. + * Improved reiserfs support. + * multidevice, mirrored and raidz(2,3) ZFS support. + * RAID LVM (internal RAIDing) support. + * ZFS crypto support. + * ZLE, LZ4 and GZIP on ZFS support. + * Support ZFS up to 33. + * HFS string is now treated like mac-roman and not UTF-8 + * HFS mtime support. + * Improved AFFS and SFS support. + * LZO-compressed btrfs support. + * cpio and tar symlinks support. + * Better FS detection to reduce false positives. + +* New boot protocols: + * Ability to load another coreboot payload when on coreboot. + * Plan9. + * Freedos. + * Ntldr/bootmgr (to load Windows bootloader). + * chainloader --bpb support to patch FAT or NTFS BPB in memory to correct + wrong partition offset. + * PXE chainloading support. + * Darwin 11 (Mac OS X Lion) protocol support. + +* Boot protocol improvements: + * Multiple initrd support. + * Basic illumos and xnu autoconfig. + +* Testing and debugging: + * New grub-fstest commands: cat, zfsinfo, testload xnu_uuid + * grub-fstest recursive directory compare for quickly checking that + a directory is read correctly. + * Backtace on crash (if gdb module is loaded, x86 only) + * Disk cache statistics gathering. + * GDB stub and GDB support script. + * "make check" and "make bootcheck" expanded to almost all platforms + (except i386-ieee1275, mips-arc, sparc64-ieee1275, ia64-efi and emu) + * New `time' command. + +* Performance: + * Lazy scanning to avoid accessing devices which aren't really used. + This avoids boot delay due to slow device scanning. + * Use CPU cache when accessing video memory. + * Search hints to first try the most likely device when searching for a + device with given UUID. This avoids slow scanning in most cases. + +* Internationalisation: + * Updated to Unicode 6.0. + * $"..." syntax for translation in grub scripting language. This allows easy + translation of grub.cfg at runtime. + * Translations to many languages included in official distribution. + +* Scripting: + * $grub_cpu and $grub_platform variables for conditioning grub.cfg on platform + at runtime. + * $feature_* variables to condition scripts on available features. + * Use of ids to identify menu entries. + * all_video module which is empty but depends on all video modules thus + allowing easy loading of all of them. + +* Installation: + * grub-mknetdir script for easy creation of netbootable GRUB directory. + * Itanium and mips support in grub-mkrescue. + * grub-install support for all platforms except emu. + * PreP partition install support. + * No files conflict between flavours (except grub-mkrescue for ppc). This + allows easy install of GRUB for several platforms. + * grub-mkstandalone script for easy creating of image including all modules + for platforms with generous limit on image size. + * program-transform-name now functions according to usual conventions. + Use --grubdir and --bootdir to get old behaviour. + +* ADLER32 and CRC64 support (for XZ and hashsum). + +* ofconsole renamed to console + +* Experimental support for compiling with Apple toolchain. + +* grub-mkdevicemap removed. Now all devices are detected on invocation of + any grub utility. + +New in 1.99: + +* Keyboard layouts support. + +* New `lsapm' command (i386-pc only). + +* Parser for GRUB Legacy configuration files. + +* Support RAID on virtio devices. + +* Remove deprecated `root' command. + +* New `euro.pf2' font which supports most European languages. + +* Avoid opening the same device twice on Open Firmware platforms. + +* Extend `vbeinfo' and `vbetest' commands to non-VBE graphics, as + `videoinfo' and `videotest'. + +* New `lsefisystab', `lssal', and `lsefimmap' commands on EFI platforms. + +* Support explicit user claim that a device is BIOS-visible. Devices + listed in device.map will be assumed to be readable using only BIOS + facilities, rather than anything more complex such as LVM or RAID. + +* New bash-completion script for GRUB utilities. + +* Use ACPI to shut down if possible. + +* New `lsacpi' command. + +* Btrfs support. + +* New `--boot-directory' option to `grub-install', `grub-reboot', and + `grub-set-default', with clearer semantics than the previous + `--root-directory' option. + +* Rename CD-ROM device to "cd" on BIOS platforms. + +* Transparent decompression filters. + +* Simpler PXE image generation. New `grub-mknetdir' utility to generate + netboot directory trees. + +* New relocator. Allows for more kernel support and more + straightforward loader writing. + +* Handle USB pendrives exposed as floppies. + +* New Automake-based build system. + +* Add `sendkey' command (i386-pc only). + +* ZFS support. + +* Support 1.x versions of mdadm metadata. + +* Fix corruption when reading Reiserfs directory entries. + +* Bidirectional text and diacritics support. + +* Skip LVM snapshots. + +* MIPS Yeeloong firmware port. + +* Change grub-mkdevicemap to emit /dev/disk/by-id/ names where possible + on GNU/Linux. + +* Add `grub-mkconfig' support for Xen with Linux. + +* Add `grub-mkconfig' support for initrd images on Fedora 13. + +* Support >3GiB and <16MiB RAM in i386-qemu. + +* Add support for Cirrus 5446 and Bochs video cards. + +* Load more appropriate video drivers automatically in `grub-mkconfig'. + +* USB improvements, including hotplugging/hotunplugging, hub support, + and USB serial support. + +* AMD Geode CS5536 support. + +* Extensive updates to the Texinfo documentation. + +* Handle symbolic links under /dev/mapper on GNU/Linux. + +* Handle installation across multiple partition table types. + +* Add `cmostest' command (i386/x86_64 only). + +* Add support for DM-RAID disk devices on GNU/Linux. + +* Remove `grub-mkisofs'. `grub-mkrescue' now uses GNU xorriso to build + CD images. + +* `grub-mkrescue' support for EFI, coreboot, and QEMU platforms. + +* Unify `grub-mkimage', `grub-setup', and `grub-install' source code + across platforms. + +* Fix VGA (as opposed to VBE) video driver, formerly a terminal driver. + +* Add menu hotkey support. + +* Add support for the nilfs2 filesystem. + +* `grub-probe' and `grub-mkconfig' support for NetBSD. + +* Support setting a background image in `grub-mkconfig'. + +* Support multiple terminals in `grub-mkconfig'. + +* Regexp support. + +* MIPS multiboot2 support. + +* Multiboot2 tag support. + +* sunpc partition table support. + +* Add a number of new language features to GRUB script: `for', `while', + `until', `elif', function parameters, `break', `continue', `shift', + multi-line quoted strings, positional parameters with `setparams', + `return', filename wildcard expansion, and `!'. + +* Support nested partition tables. GRUB now prefers to name partitions + in the form `(hd0,msdos1,bsd1)' rather than `(hd0,1,a)'. + +* Speed up consecutive hostdisk operations on the same device. + +* Compile parts of `grub-emu' as modules. + +New in 1.98 - 2010-03-06: + +* Multiboot on EFI support. + +* Graphical menu support. + +* MIPS support. + +* Saved default menu entry support, with new utilities `grub-reboot' and + `grub-set-default'. + +* Unit testing framework. + +* Support for multiple terminals. + +* Encrypted password support, with a new utility `grub-mkpasswd-pbkdf2'. + +* `grub-mkfloppy' removed; use `grub-mkrescue' to create floppy images. + +* Add grub-probe support for GNU/Hurd. + +* Add support for gettext. + +New in 1.97: + +* Add support for loading XNU (MacOS X kernel). + +* ACPI override support. + +* Integrated gptsync. + +* Password protection support. + +* Partition manipulation tool. + +* Add `keystatus' command. + +* Unicode fonts are now used by default. + +* Add `hdparm' command. + +* Add support for getting the current date and time from CMOS as variables. + +* Add `drivemap' command. + +* Add support for RAID levels 4,6 and 10. + +* update-grub is replaced by grub-mkconfig. + +* When booting from PXE, PXE can be used to load files. + +* High resolution timer support. + +* Image loaders now support IO buffering. + +* Add `crc' command. + +* Add Cygwin support. + +* Add x86_64 EFI support. + +* Use LZMA compression instead of LZO. + +* Support for saving the environment from and loading the environment + from a file. + +* Allow the UUID to be used as device name. + +* The `search' command can use UUIDs now. + +* Add support for IEEE 1275 on i386. + +* Create partmap.lst and use it to automatically load partition map + modules. + +* grub-mkconfig supports os-prober to add operating systems to the + boot menu. + +* The ATA driver supports devices bigger than 2 TiB. + +* Add support for the UDF, AFS and EXT4 filesystems. + +* The ISO9660 filesystem supports the Joliet extension + +* Add support for loading kernels of FreeBSD, NetBSD and OpenBSD. + +* Add new command `sleep'. + +* Support for direct access to AT keyboards. + +* New utility `grub-fstest'. + +New in 1.96 - 2008-02-03: + +* The license term is changed to GNU General Public License Version 3. + +* grub-emu is made optional. Now you have to use + `--enable-grub-emu' to enable it. + +* Add Multiboot2 support. + +* grub-emu can access the host filesystem now. + +* Add support for the NTFS, cpio/tar and Reiserfs filesystems. + +* Add support for ATA/ATAPI. + +* Add update-grub script to generate grub.cfg. + +* Add grub-mkrescue script to generate floppy or ElTorito images + (i386-pc only). + +* Add support for background images in gfxterm (background_image command). + +* Add support for detection of 64-bit support in CPU (cpuid command). + +* GPT is now enabled in i386-pc target. + +* Add grub-install for EFI. + +* Ported to the following new platforms: Efika, coreboot (a.k.a. LinuxBIOS), + OLPC XO. + +* Add support for colored menu (menu_color_normal and menu_color_highlight + variables). + +* Fix support for loading Linux zImages (such as memtest86). + +New in 1.95 - 2006-10-15: + +* Number partitions from 1 instead of 0. For instance, the first + partition of "hd0" is now "hd0,1" but not "hd0,0". + +* grub-probefs is renamed to grub-probe, and supports printing a + guessed OS device name and a GRUB drive name. + +* RAID and LVM support is added. + +* New command, echo. + +* The disk API is changed to support 64-bit addressing. + +* A TGA loader is added for the video API. + +New in 1.94 - 2006-06-04: + +* Fix several serious bugs in HFS+. + +* Add experimental EFI support. Chainloading and Linux loading are + supported at the moment. + +* Add a new command "blocklist" to show a block list. + +* Use --with-platform to specify a boot environment. For now, efi, + ieee1275 and pc are supported. + +* Use the filename "kernel.elf" instead of "grubof" on ieee1275. + +* Install GRUB into pkglibdir instead of pkgdatadir. + +* Support environmental variables. You can export variables by the + command "export". + +* Remove the commands "default" and "timeout". They are now variables. + +* Add the commands "source" and "." to include a file. + +* Implement experimental Video API and a new terminal "gfxterm" based + on the Video API. + + +New in 1.93 - 2006-03-10: + +* Add support for the HFS+ wrapper. + +* Major improvements to scripting support. + +* Menu entries are now scriptable. + + +New in 1.92 - 2005-12-25: + +* Add support for GPT partition table format. + +* Add a new command "play" to play an audio file on PC. + +* Add support for Linux/ADFS partition table format. + +* Add support for BASH-like scripting. + +* Add support for Apple HFS+ filesystems. + + +New in 1.91 - 2005-10-15: + +* Add support for LZO version 2. + +* Support completion in the entry editor. + +* Add VBE support. + +* New commands, "search", "vbetest" and "vbeinfo". + +* The option BOOT_IMAGE is passed to Linux. + +* Add support for automatic decompression for gzip. + +* Add support for terminfo and serial. + +* Add support for x86_64. + +* GRUB itself is a Multiboot-compliant kernel. + +* Add new filesystems: XFS, SFS, and AFFS. + + +New in 1.90 - 2005-08-07: + +* Rename the project name PUPA to GRUB. Now this version is the + developmental version of GRUB officially. + +* The GRUB emulator ``grub-emu'' is added. + +* Add support for newworld Mac. This should work with other + PowerPC-based machines as well, if they use IEEE 1275 + (Open Firmware). + +* Too many changes to describe. Look at ChangeLog for more details. + + +New in 0.7: + +* Problems in cross-compiling PUPA are fixed. + +* Use -mrtd and -mregparm=3 to reduce the generated code sizes. This + means that any missing prototypes could be fatal. Also, you must take + care when writing assembly code. See the comments at the beginning of + startup.S, for more details. + +* New utility, ``pupa-setup''. This sets up PUPA to make it bootable + from a real disk. + +* New commands, "prefix", "insmod", "rmmod" and "lsmod" are added into + the rescue mode to manipulate PUPA modules. + +* Linux support is added. Initrd is not support yet. + +* Reduce the size of a core image significantly by compressing a large + part of the core image and decompressing itself at boot time. The + currently used algorithm is LZO (more precisely, LZO1X-999). So you + have to install LZO to build PUPA. See + , for more information. + + +New in 0.6 - 2002-12-27, Yoshinori K. Okuji: + +* The chainloader and the FAT filesystem are modularized. + +* The structure of the source tree is a bit changed. + +* Support for building loadable modules is added. + +* Some generic parts of pupa-mkimage are segregated. + +* Some documentation files are added, according to the GNU Coding + Standards. diff --git a/README b/README new file mode 100644 index 000000000..685b01657 --- /dev/null +++ b/README @@ -0,0 +1,20 @@ +This is GRUB 2, the second version of the GRand Unified Bootloader. +GRUB 2 is rewritten from scratch to make GNU GRUB cleaner, safer, more +robust, more powerful, and more portable. + +See the file NEWS for a description of recent changes to GRUB 2. + +See the file INSTALL for instructions on how to build and install the +GRUB 2 data and program files. + +Please visit the official web page of GRUB 2, for more information. +The URL is . + +More extensive documentation is available in the Info manual, +accessible using 'info grub' after building and installing GRUB 2. + +There are a number of important user-visible differences from the +first version of GRUB, now known as GRUB Legacy. For a summary, please +see: + + info grub Introduction 'Changes from GRUB Legacy' diff --git a/THANKS b/THANKS new file mode 100644 index 000000000..82b4bc838 --- /dev/null +++ b/THANKS @@ -0,0 +1,38 @@ +GRUB 2 would not be what it is today without the invaluable help of +everybody who was kind enough to spend time testing it and reporting +bugs. + +The following people made especially gracious contributions of their +time and energy in helping to track down bugs, add new features, and +generally assist in the GRUB 2 maintainership process: + +Andrey Shuvikov +Bibo Mao +David Miller +Guillem Jover +Harley D. Eades III +Hitoshi Ozeki +Hollis Blanchard +Jeroen Dekkers +Johan Rydberg +Marco Gerards +Michael Guntsche +NIIBE Yutaka +Omniflux +Robert Bihlmeyer +Roger Leigh +Ruslan Nikolaev +Timothy Baldwin +Tomas Ebenlendr +Tristan Gingold +Tsuneyoshi Yasuo +Vesa Jaaskelainen +Vincent Guffens +Vincent Pelletier +Vladimir Serbinenko + +Also, we thank the projects GNU Automake and LZMA. Some code +was stolen from them. + +This project was supported by Information-technology Promotion Agency, +Japan. diff --git a/TODO b/TODO new file mode 100644 index 000000000..a9b6d3523 --- /dev/null +++ b/TODO @@ -0,0 +1,9 @@ + +Before working on improving GRUB, it's very important that you +make contact with the core GRUB developers. Things herein might be +slightly out of date or otherwise not easy to understand at first +glance. So write to first. + +For bug tracking, refer to: + + http://savannah.gnu.org/bugs/?group=grub diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 000000000..78cdf6e1d --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,477 @@ +dnl Redefine AC_LANG_PROGRAM with a "-Wstrict-prototypes -Werror"-friendly +dnl version. Patch submitted to bug-autoconf in 2009-09-16. +m4_define([AC_LANG_PROGRAM(C)], +[$1 +int +main (void) +{ +dnl Do *not* indent the following line: there may be CPP directives. +dnl Don't move the `;' right after for the same reason. +$2 + ; + return 0; +}]) + + +dnl Check whether target compiler is working +AC_DEFUN([grub_PROG_TARGET_CC], +[AC_MSG_CHECKING([whether target compiler is working]) +AC_CACHE_VAL(grub_cv_prog_target_cc, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +]], [[]])], + [grub_cv_prog_target_cc=yes], + [grub_cv_prog_target_cc=no]) +]) +AC_MSG_RESULT([$grub_cv_prog_target_cc]) + +if test "x$grub_cv_prog_target_cc" = xno; then + AC_MSG_ERROR([cannot compile for the target]) +fi +]) + + +dnl grub_ASM_USCORE checks if C symbols get an underscore after +dnl compiling to assembler. +dnl Written by Pavel Roskin. Based on grub_ASM_EXT_C written by +dnl Erich Boleyn and modified by Yoshinori K. Okuji. +AC_DEFUN([grub_ASM_USCORE], +[AC_REQUIRE([AC_PROG_CC]) +AC_REQUIRE([AC_PROG_EGREP]) +AC_MSG_CHECKING([if C symbols get an underscore after compilation]) +AC_CACHE_VAL(grub_cv_asm_uscore, +[cat > conftest.c <<\EOF +int func (int *); +int +func (int *list) +{ + *list = 0; + return *list; +} +EOF + +if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -S conftest.c]) && test -s conftest.s; then + true +else + AC_MSG_ERROR([${CC-cc} failed to produce assembly code]) +fi + +if $EGREP '(^|[^_[:alnum]])_func' conftest.s >/dev/null 2>&1; then + HAVE_ASM_USCORE=1 + grub_cv_asm_uscore=yes +else + HAVE_ASM_USCORE=0 + grub_cv_asm_uscore=no +fi + +rm -f conftest*]) + +AC_MSG_RESULT([$grub_cv_asm_uscore]) +]) + + +dnl Some versions of `objcopy -O binary' vary their output depending +dnl on the link address. +AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE], +[AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses]) +AC_CACHE_VAL(grub_cv_prog_objcopy_absolute, +[cat > conftest.c <<\EOF +void cmain (void); +void +cmain (void) +{ + *((int *) 0x1000) = 2; +} +EOF + +if AC_TRY_EVAL(ac_compile) && test -s conftest.o; then : +else + AC_MSG_ERROR([${CC-cc} cannot compile C source code]) +fi +grub_cv_prog_objcopy_absolute=yes +for link_addr in 0x2000 0x8000 0x7C00; do + if AC_TRY_COMMAND([${CC-cc} ${TARGET_CFLAGS} ${TARGET_LDFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then : + else + AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) + fi + if AC_TRY_COMMAND([${TARGET_OBJCOPY-objcopy} --only-section=.text -O binary conftest.exec conftest]); then : + else + AC_MSG_ERROR([${TARGET_OBJCOPY-objcopy} cannot create binary files]) + fi + if test ! -f conftest.old || AC_TRY_COMMAND([cmp -s conftest.old conftest]); then + mv -f conftest conftest.old + else + grub_cv_prog_objcopy_absolute=no + break + fi +done +rm -f conftest*]) +AC_MSG_RESULT([$grub_cv_prog_objcopy_absolute]) + +if test "x$grub_cv_prog_objcopy_absolute" = xno; then + AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils]) +fi +]) + + +dnl Supply --build-id=none to ld if building modules. +dnl This suppresses warnings from ld on some systems +AC_DEFUN([grub_PROG_LD_BUILD_ID_NONE], +[AC_MSG_CHECKING([whether linker accepts --build-id=none]) +AC_CACHE_VAL(grub_cv_prog_ld_build_id_none, +[save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -Wl,--build-id=none" +AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_prog_ld_build_id_none=yes], + [grub_cv_prog_ld_build_id_none=no]) +LDFLAGS="$save_LDFLAGS" +]) +AC_MSG_RESULT([$grub_cv_prog_ld_build_id_none]) + +if test "x$grub_cv_prog_ld_build_id_none" = xyes; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,--build-id=none" +fi +]) + +dnl Check nm +AC_DEFUN([grub_PROG_NM_WORKS], +[AC_MSG_CHECKING([whether nm works]) +AC_CACHE_VAL(grub_cv_prog_nm_works, +[ +nm_works_tmp_dir="$(mktemp -d "./confXXXXXX")" +AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])]) +$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_works_tmp_dir/ef" +if $TARGET_NM "$nm_works_tmp_dir/ef" > /dev/null; then + grub_cv_prog_nm_works=yes +else + grub_cv_prog_nm_minus_p=no +fi +rm "$nm_works_tmp_dir/ef" +rmdir "$nm_works_tmp_dir" +]) +AC_MSG_RESULT([$grub_cv_prog_nm_works]) + +if test "x$grub_cv_prog_nm_works" != xyes; then + AC_MSG_ERROR([nm does not work]) +fi +]) + +dnl Supply -P to nm +AC_DEFUN([grub_PROG_NM_MINUS_P], +[AC_MSG_CHECKING([whether nm accepts -P]) +AC_CACHE_VAL(grub_cv_prog_nm_minus_p, +[ +nm_minus_p_tmp_dir="$(mktemp -d "./confXXXXXX")" +AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])]) +$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_minus_p_tmp_dir/ef" +if $TARGET_NM -P "$nm_minus_p_tmp_dir/ef" 2>&1 > /dev/null; then + grub_cv_prog_nm_minus_p=yes +else + grub_cv_prog_nm_minus_p=no +fi +rm "$nm_minus_p_tmp_dir/ef" +rmdir "$nm_minus_p_tmp_dir" +]) +AC_MSG_RESULT([$grub_cv_prog_nm_minus_p]) + +if test "x$grub_cv_prog_nm_minus_p" = xyes; then + TARGET_NMFLAGS_MINUS_P="-P" +else + TARGET_NMFLAGS_MINUS_P= +fi +]) + +dnl Supply --defined-only to nm +AC_DEFUN([grub_PROG_NM_DEFINED_ONLY], +[AC_MSG_CHECKING([whether nm accepts --defined-only]) +AC_CACHE_VAL(grub_cv_prog_nm_defined_only, +[ +nm_defined_only_tmp_dir="$(mktemp -d "./confXXXXXX")" +AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])]) +$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_defined_only_tmp_dir/ef" +if $TARGET_NM --defined-only "$nm_defined_only_tmp_dir/ef" 2>&1 > /dev/null; then + grub_cv_prog_nm_defined_only=yes +else + grub_cv_prog_nm_defined_only=no +fi +rm "$nm_defined_only_tmp_dir/ef" +rmdir "$nm_defined_only_tmp_dir" +]) +AC_MSG_RESULT([$grub_cv_prog_nm_defined_only]) + +if test "x$grub_cv_prog_nm_defined_only" = xyes; then + TARGET_NMFLAGS_DEFINED_ONLY=--defined-only +else + TARGET_NMFLAGS_DEFINED_ONLY= +fi +]) + + +dnl Check what symbol is defined as a bss start symbol. +dnl Written by Michael Hohmoth and Yoshinori K. Okuji. +AC_DEFUN([grub_CHECK_BSS_START_SYMBOL], +[AC_REQUIRE([AC_PROG_CC]) +AC_MSG_CHECKING([if __bss_start is defined by the compiler]) +AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +]], + [[asm ("incl __bss_start")]])], + [grub_cv_check_uscore_uscore_bss_start_symbol=yes], + [grub_cv_check_uscore_uscore_bss_start_symbol=no])]) + +AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol]) + +AC_MSG_CHECKING([if edata is defined by the compiler]) +AC_CACHE_VAL(grub_cv_check_edata_symbol, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], + [[asm ("incl edata")]])], + [grub_cv_check_edata_symbol=yes], + [grub_cv_check_edata_symbol=no])]) + +AC_MSG_RESULT([$grub_cv_check_edata_symbol]) + +AC_MSG_CHECKING([if _edata is defined by the compiler]) +AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], + [[asm ("incl _edata")]])], + [grub_cv_check_uscore_edata_symbol=yes], + [grub_cv_check_uscore_edata_symbol=no])]) + +AC_MSG_RESULT([$grub_cv_check_uscore_edata_symbol]) + +if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then + BSS_START_SYMBOL=__bss_start +elif test "x$grub_cv_check_edata_symbol" = xyes; then + BSS_START_SYMBOL=edata +elif test "x$grub_cv_check_uscore_edata_symbol" = xyes; then + BSS_START_SYMBOL=_edata +else + AC_MSG_ERROR([none of __bss_start, edata or _edata is defined]) +fi +]) + +dnl Check what symbol is defined as an end symbol. +dnl Written by Yoshinori K. Okuji. +AC_DEFUN([grub_CHECK_END_SYMBOL], +[AC_REQUIRE([AC_PROG_CC]) +AC_MSG_CHECKING([if end is defined by the compiler]) +AC_CACHE_VAL(grub_cv_check_end_symbol, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], + [[asm ("incl end")]])], + [grub_cv_check_end_symbol=yes], + [grub_cv_check_end_symbol=no])]) + +AC_MSG_RESULT([$grub_cv_check_end_symbol]) + +AC_MSG_CHECKING([if _end is defined by the compiler]) +AC_CACHE_VAL(grub_cv_check_uscore_end_symbol, +[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void);]], + [[asm ("incl _end")]])], + [grub_cv_check_uscore_end_symbol=yes], + [grub_cv_check_uscore_end_symbol=no])]) + +AC_MSG_RESULT([$grub_cv_check_uscore_end_symbol]) + +if test "x$grub_cv_check_end_symbol" = xyes; then + END_SYMBOL=end +elif test "x$grub_cv_check_uscore_end_symbol" = xyes; then + END_SYMBOL=_end +else + AC_MSG_ERROR([neither end nor _end is defined]) +fi +]) + + +dnl Check if the C compiler supports `-fstack-protector'. +AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[ +[# Smashing stack protector. +ssp_possible=yes] +AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector']) +# Is this a reliable test case? +AC_LANG_CONFTEST([AC_LANG_SOURCE([[ +void foo (void) { volatile char a[8]; a[3]; } +]])]) +[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling +# `ac_compile' like this correct, after all? +if eval "$ac_compile -S -fstack-protector -o conftest.s" 2> /dev/null; then] + AC_MSG_RESULT([yes]) + [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + ssp_possible=no] + AC_MSG_RESULT([no]) +[fi] +]) + +dnl Check if the C compiler supports `-mstack-arg-probe' (Cygwin). +AC_DEFUN([grub_CHECK_STACK_ARG_PROBE],[ +[# Smashing stack arg probe. +sap_possible=yes] +AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe']) +AC_LANG_CONFTEST([AC_LANG_SOURCE([[ +void foo (void) { volatile char a[8]; a[3]; } +]])]) +[if eval "$ac_compile -S -mstack-arg-probe -Werror -o conftest.s" 2> /dev/null; then] + AC_MSG_RESULT([yes]) + [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + sap_possible=no] + AC_MSG_RESULT([no]) +[fi] +]) + +dnl Check if ln -s can handle directories properly (mingw). +AC_DEFUN([grub_CHECK_LINK_DIR],[ +AC_MSG_CHECKING([whether ln -s can handle directories properly]) +[mkdir testdir 2>/dev/null +case $srcdir in +[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;; + *) reldir=../$srcdir/include/grub/util ;; +esac +if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then] + AC_MSG_RESULT([yes]) + [link_dir=yes +else + link_dir=no] + AC_MSG_RESULT([no]) +[fi +rm -rf testdir] +]) + +dnl Check if the C compiler supports `-fPIE'. +AC_DEFUN([grub_CHECK_PIE],[ +[# Position independent executable. +pie_possible=yes] +AC_MSG_CHECKING([whether `$CC' has `-fPIE' as default]) +# Is this a reliable test case? +AC_LANG_CONFTEST([AC_LANG_SOURCE([[ +#ifdef __PIE__ +int main() { + return 0; +} +#else +#error NO __PIE__ DEFINED +#endif +]])]) + +[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling +# `ac_compile' like this correct, after all? +if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then] + AC_MSG_RESULT([yes]) + [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + pie_possible=no] + AC_MSG_RESULT([no]) +[fi] +]) + +AC_DEFUN([grub_CHECK_LINK_PIE],[ +[# Position independent executable. +link_nopie_needed=no] +AC_MSG_CHECKING([whether linker needs disabling of PIE to work]) +AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])]) + +[if eval "$ac_compile -Wl,-r,-d -nostdlib -Werror -o conftest.o" 2> /dev/null; then] + AC_MSG_RESULT([no]) + [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.o +else + link_nopie_needed=yes] + AC_MSG_RESULT([yes]) +[fi] +]) + + +dnl Check if the Linker supports `-no-pie'. +AC_DEFUN([grub_CHECK_NO_PIE], +[AC_MSG_CHECKING([whether linker accepts -no-pie]) +AC_CACHE_VAL(grub_cv_cc_ld_no_pie, +[save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -no-pie -nostdlib -Werror" +AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_ld_no_pie=yes], + [grub_cv_cc_ld_no_pie=no]) +LDFLAGS="$save_LDFLAGS" +]) +AC_MSG_RESULT([$grub_cv_cc_ld_no_pie]) +nopie_possible=no +if test "x$grub_cv_cc_ld_no_pie" = xyes ; then + nopie_possible=yes +fi +]) + +AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD], +[AC_MSG_CHECKING([whether linker accepts -nopie]) +AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword, +[save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -nopie -nostdlib -Werror" +AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_ld_no_pie_oneword=yes], + [grub_cv_cc_ld_no_pie_oneword=no]) +LDFLAGS="$save_LDFLAGS" +]) +AC_MSG_RESULT([$grub_cv_cc_ld_no_pie_oneword]) +nopie_oneword_possible=no +if test "x$grub_cv_cc_ld_no_pie_oneword" = xyes ; then + nopie_oneword_possible=yes +fi +]) + +dnl Check if the C compiler supports `-fPIC'. +AC_DEFUN([grub_CHECK_PIC],[ +[# Position independent executable. +pic_possible=yes] +AC_MSG_CHECKING([whether `$CC' has `-fPIC' as default]) +# Is this a reliable test case? +AC_LANG_CONFTEST([AC_LANG_SOURCE([[ +#ifdef __PIC__ +int main() { + return 0; +} +#else +#error NO __PIC__ DEFINED +#endif +]])]) + +[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling +# `ac_compile' like this correct, after all? +if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then] + AC_MSG_RESULT([yes]) + [# Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + pic_possible=no] + AC_MSG_RESULT([no]) +[fi] +]) + +dnl Create an output variable with the transformed name of a GRUB utility +dnl program. +AC_DEFUN([grub_TRANSFORM],[dnl +AC_SUBST(AS_TR_SH([$1]), [`AS_ECHO([$1]) | sed "$program_transform_name"`])dnl +]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 000000000..2dc765ff8 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1268 @@ +# generated automatically by aclocal 1.15 -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# Figure out how to run the assembler. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_AS +# ---------- +AC_DEFUN([AM_PROG_AS], +[# By default we simply use the C compiler to build assembly code. +AC_REQUIRE([AC_PROG_CC]) +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS +AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) +AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) +_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl +]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/00gnulib.m4]) +m4_include([m4/alloca.m4]) +m4_include([m4/argp.m4]) +m4_include([m4/btowc.m4]) +m4_include([m4/codeset.m4]) +m4_include([m4/configmake.m4]) +m4_include([m4/dirname.m4]) +m4_include([m4/double-slash-root.m4]) +m4_include([m4/eealloc.m4]) +m4_include([m4/errno_h.m4]) +m4_include([m4/error.m4]) +m4_include([m4/exponentd.m4]) +m4_include([m4/extensions.m4]) +m4_include([m4/extern-inline.m4]) +m4_include([m4/fcntl-o.m4]) +m4_include([m4/float_h.m4]) +m4_include([m4/fnmatch.m4]) +m4_include([m4/getdelim.m4]) +m4_include([m4/getline.m4]) +m4_include([m4/getopt.m4]) +m4_include([m4/gettext.m4]) +m4_include([m4/glibc21.m4]) +m4_include([m4/gnulib-common.m4]) +m4_include([m4/gnulib-comp.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/include_next.m4]) +m4_include([m4/intlmacosx.m4]) +m4_include([m4/intmax_t.m4]) +m4_include([m4/inttypes_h.m4]) +m4_include([m4/langinfo_h.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/libunistring-base.m4]) +m4_include([m4/localcharset.m4]) +m4_include([m4/locale-fr.m4]) +m4_include([m4/locale-ja.m4]) +m4_include([m4/locale-zh.m4]) +m4_include([m4/locale_h.m4]) +m4_include([m4/localeconv.m4]) +m4_include([m4/longlong.m4]) +m4_include([m4/malloc.m4]) +m4_include([m4/mbrtowc.m4]) +m4_include([m4/mbsinit.m4]) +m4_include([m4/mbsrtowcs.m4]) +m4_include([m4/mbstate_t.m4]) +m4_include([m4/mbswidth.m4]) +m4_include([m4/mbtowc.m4]) +m4_include([m4/memchr.m4]) +m4_include([m4/mempcpy.m4]) +m4_include([m4/mmap-anon.m4]) +m4_include([m4/msvc-inval.m4]) +m4_include([m4/msvc-nothrow.m4]) +m4_include([m4/multiarch.m4]) +m4_include([m4/nl_langinfo.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/nocrash.m4]) +m4_include([m4/off_t.m4]) +m4_include([m4/po.m4]) +m4_include([m4/printf.m4]) +m4_include([m4/progtest.m4]) +m4_include([m4/rawmemchr.m4]) +m4_include([m4/realloc.m4]) +m4_include([m4/regex.m4]) +m4_include([m4/size_max.m4]) +m4_include([m4/sleep.m4]) +m4_include([m4/ssize_t.m4]) +m4_include([m4/stdalign.m4]) +m4_include([m4/stdbool.m4]) +m4_include([m4/stddef_h.m4]) +m4_include([m4/stdint.m4]) +m4_include([m4/stdint_h.m4]) +m4_include([m4/stdio_h.m4]) +m4_include([m4/stdlib_h.m4]) +m4_include([m4/strcase.m4]) +m4_include([m4/strchrnul.m4]) +m4_include([m4/strerror.m4]) +m4_include([m4/string_h.m4]) +m4_include([m4/strings_h.m4]) +m4_include([m4/strndup.m4]) +m4_include([m4/strnlen.m4]) +m4_include([m4/sys_socket_h.m4]) +m4_include([m4/sys_types_h.m4]) +m4_include([m4/sysexits.m4]) +m4_include([m4/unistd_h.m4]) +m4_include([m4/vasnprintf.m4]) +m4_include([m4/vsnprintf.m4]) +m4_include([m4/warn-on-use.m4]) +m4_include([m4/wchar_h.m4]) +m4_include([m4/wchar_t.m4]) +m4_include([m4/wcrtomb.m4]) +m4_include([m4/wctype_h.m4]) +m4_include([m4/wcwidth.m4]) +m4_include([m4/wint_t.m4]) +m4_include([m4/xsize.m4]) +m4_include([acinclude.m4]) diff --git a/asm-tests/arm.S b/asm-tests/arm.S new file mode 100644 index 000000000..97c2546bf --- /dev/null +++ b/asm-tests/arm.S @@ -0,0 +1,20 @@ +/* on arm clang doesn't support .arch directive */ + + .text + .syntax unified + +#if !defined (__thumb2__) + .arch armv7a + .arm +#else + .arch armv7 + .thumb +#endif + mcr p15, 0, r11, c7, c14, 2 + + /* clang restricts access to dsb/isb despite .arch */ + dsb + isb + + + diff --git a/asm-tests/i386-pc.S b/asm-tests/i386-pc.S new file mode 100644 index 000000000..d037744f9 --- /dev/null +++ b/asm-tests/i386-pc.S @@ -0,0 +1,18 @@ +/* on x86 old clang doesn't support .code16 + newer clang supports it but creates 6-byte jumps instead of 3-byte ones + which makes us go over boot sector size. + Starting with 3.9 clang emits 3-byte jumps but still creates 8-bytes movl + instead of 5-bytes, so code overflows into data. */ + + .code16 + jmp far + .org 4 + jmp nearer + .org 6 + movl nearer, %ebx + .org 11 + .space 100 +nearer: + .space 200 +far: + .byte 0 diff --git a/asm-tests/i386.S b/asm-tests/i386.S new file mode 100644 index 000000000..30adc4fe2 --- /dev/null +++ b/asm-tests/i386.S @@ -0,0 +1,4 @@ +/* on x86 old clang doesn't support .code16 */ + + .code16 + movb %al, %bl diff --git a/asm-tests/mips.S b/asm-tests/mips.S new file mode 100644 index 000000000..1312d47d5 --- /dev/null +++ b/asm-tests/mips.S @@ -0,0 +1,11 @@ +/* on mips clang doesn't support privilegied instructions, doubleword store/load + and crashes with hand-written assembly + */ + + .set mips3 + sync + ld $t2, 0($t1) + +a: + addiu $t1, $s0, (b - a) +b: nop diff --git a/asm-tests/powerpc.S b/asm-tests/powerpc.S new file mode 100644 index 000000000..396a6cce9 --- /dev/null +++ b/asm-tests/powerpc.S @@ -0,0 +1,8 @@ +/* clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly + used by gcrypt */ +/* Cache invalidation loop is a fair test. */ + li 5, 0 +1: icbi 5, 3 + addi 5, 5, 32 + cmpw 5, 4 + blt 1b diff --git a/asm-tests/sparc64.S b/asm-tests/sparc64.S new file mode 100644 index 000000000..03c5fe02a --- /dev/null +++ b/asm-tests/sparc64.S @@ -0,0 +1,9 @@ + .text +1: + /* A small list of examples of what clang doesn't support. */ + clr %o0 + lduw [%o4 + 4], %o4 + and %o6, ~0xff, %o6 + stw %o5, [%o3] + bne,pt %icc, 1b + nop diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 000000000..7537561ad --- /dev/null +++ b/autogen.sh @@ -0,0 +1,87 @@ +#! /usr/bin/env bash + +set -e + +# Set ${PYTHON} to plain 'python' if not set already +: ${PYTHON:=python} + +export LC_COLLATE=C +unset LC_ALL + +find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' |sort > po/POTFILES.in +find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in + +echo "Importing unicode..." +${PYTHON} util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c + +echo "Importing libgcrypt..." +${PYTHON} util/import_gcry.py grub-core/lib/libgcrypt/ grub-core +sed -n -f util/import_gcrypth.sed < grub-core/lib/libgcrypt/src/gcrypt.h.in > include/grub/gcrypt/gcrypt.h +if [ -f include/grub/gcrypt/g10lib.h ]; then + rm include/grub/gcrypt/g10lib.h +fi +if [ -d grub-core/lib/libgcrypt-grub/mpi/generic ]; then + rm -rf grub-core/lib/libgcrypt-grub/mpi/generic +fi +cp grub-core/lib/libgcrypt-grub/src/g10lib.h include/grub/gcrypt/g10lib.h +cp -R grub-core/lib/libgcrypt/mpi/generic grub-core/lib/libgcrypt-grub/mpi/generic + +for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c; do + if [ -h grub-core/lib/libgcrypt-grub/mpi/"$x" ] || [ -f grub-core/lib/libgcrypt-grub/mpi/"$x" ]; then + rm grub-core/lib/libgcrypt-grub/mpi/"$x" + fi + cp grub-core/lib/libgcrypt-grub/mpi/generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x" +done + +echo "Generating Automake input..." + +# Automake doesn't like including files from a path outside the project. +rm -f contrib grub-core/contrib +if [ "x${GRUB_CONTRIB}" != x ]; then + [ "${GRUB_CONTRIB}" = contrib ] || ln -s "${GRUB_CONTRIB}" contrib + [ "${GRUB_CONTRIB}" = grub-core/contrib ] || ln -s ../contrib grub-core/contrib +fi + +UTIL_DEFS='Makefile.util.def Makefile.utilgcry.def' +CORE_DEFS='grub-core/Makefile.core.def grub-core/Makefile.gcry.def' + +for extra in contrib/*/Makefile.util.def; do + if test -e "$extra"; then + UTIL_DEFS="$UTIL_DEFS $extra" + fi +done + +for extra in contrib/*/Makefile.core.def; do + if test -e "$extra"; then + CORE_DEFS="$CORE_DEFS $extra" + fi +done + +${PYTHON} gentpl.py $UTIL_DEFS > Makefile.util.am +${PYTHON} gentpl.py $CORE_DEFS > grub-core/Makefile.core.am + +for extra in contrib/*/Makefile.common; do + if test -e "$extra"; then + echo "include $extra" >> Makefile.util.am + echo "include $extra" >> grub-core/Makefile.core.am + fi +done + +for extra in contrib/*/Makefile.util.common; do + if test -e "$extra"; then + echo "include $extra" >> Makefile.util.am + fi +done + +for extra in contrib/*/Makefile.core.common; do + if test -e "$extra"; then + echo "include $extra" >> grub-core/Makefile.core.am + fi +done + +echo "Saving timestamps..." +echo timestamp > stamp-h.in + +echo "Running autoreconf..." +autoreconf -vi +exit 0 diff --git a/build-aux/compile b/build-aux/compile new file mode 100755 index 000000000..531136b06 --- /dev/null +++ b/build-aux/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/config.guess b/build-aux/config.guess new file mode 100755 index 000000000..1f5c50c0d --- /dev/null +++ b/build-aux/config.guess @@ -0,0 +1,1420 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2014 Free Software Foundation, Inc. + +timestamp='2014-03-23' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2014 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-aux/config.rpath b/build-aux/config.rpath new file mode 100755 index 000000000..c38b914d6 --- /dev/null +++ b/build-aux/config.rpath @@ -0,0 +1,690 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2013 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + newsos6) + ;; + *nto* | *qnx*) + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + haiku*) + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then + : + else + ld_shlibs=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + *nto* | *qnx*) + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + haiku*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + *nto* | *qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + tpf*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2014 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-aux/depcomp b/build-aux/depcomp new file mode 100755 index 000000000..4ebd5b3a2 --- /dev/null +++ b/build-aux/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/install-sh b/build-aux/install-sh new file mode 100755 index 000000000..377bb8687 --- /dev/null +++ b/build-aux/install-sh @@ -0,0 +1,527 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2011-11-20.07; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh new file mode 100755 index 000000000..b3719cf76 --- /dev/null +++ b/build-aux/mdate-sh @@ -0,0 +1,224 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2010-08-21.06; # UTC + +# Copyright (C) 1995-2013 Free Software Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +fi + +case $1 in + '') + echo "$0: No file. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: mdate-sh [--help] [--version] FILE + +Pretty-print the modification day of FILE, in the format: +1 January 1970 + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "mdate-sh $scriptversion" + exit $? + ;; +esac + +error () +{ + echo "$0: $1" >&2 + exit 1 +} + + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# GNU ls changes its time format in response to the TIME_STYLE +# variable. Since we cannot assume 'unset' works, revert this +# variable to its documented default. +if test "${TIME_STYLE+set}" = set; then + TIME_STYLE=posix-long-iso + export TIME_STYLE +fi + +save_arg1=$1 + +# Find out how to get the extended ls output of a file or directory. +if ls -L /dev/null 1>/dev/null 2>&1; then + ls_command='ls -L -l -d' +else + ls_command='ls -l -d' +fi +# Avoid user/group names that might have spaces, when possible. +if ls -n /dev/null 1>/dev/null 2>&1; then + ls_command="$ls_command -n" +fi + +# A 'ls -l' line looks as follows on OS/2. +# drwxrwx--- 0 Aug 11 2001 foo +# This differs from Unix, which adds ownership information. +# drwxrwx--- 2 root root 4096 Aug 11 2001 foo +# +# To find the date, we split the line on spaces and iterate on words +# until we find a month. This cannot work with files whose owner is a +# user named "Jan", or "Feb", etc. However, it's unlikely that '/' +# will be owned by a user whose name is a month. So we first look at +# the extended ls output of the root directory to decide how many +# words should be skipped to get the date. + +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +set x`$ls_command /` + +# Find which argument is the month. +month= +command= +until test $month +do + test $# -gt 0 || error "failed parsing '$ls_command /' output" + shift + # Add another shift to the command. + command="$command shift;" + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +test -n "$month" || error "failed parsing '$ls_command /' output" + +# Get the extended ls output of the file or directory. +set dummy x`eval "$ls_command \"\\\$save_arg1\""` + +# Remove all preceding arguments +eval $command + +# Because of the dummy argument above, month is in $2. +# +# On a POSIX system, we should have +# +# $# = 5 +# $1 = file size +# $2 = month +# $3 = day +# $4 = year or time +# $5 = filename +# +# On Darwin 7.7.0 and 7.6.0, we have +# +# $# = 4 +# $1 = day +# $2 = month +# $3 = year or time +# $4 = filename + +# Get the month. +case $2 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; +esac + +case $3 in + ???*) day=$1;; + *) day=$3; shift;; +esac + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/missing b/build-aux/missing new file mode 100755 index 000000000..db98974ff --- /dev/null +++ b/build-aux/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/snippet/_Noreturn.h b/build-aux/snippet/_Noreturn.h new file mode 100644 index 000000000..c44ad89b7 --- /dev/null +++ b/build-aux/snippet/_Noreturn.h @@ -0,0 +1,10 @@ +#if !defined _Noreturn && __STDC_VERSION__ < 201112 +# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif diff --git a/build-aux/snippet/arg-nonnull.h b/build-aux/snippet/arg-nonnull.h new file mode 100644 index 000000000..8ea2a4747 --- /dev/null +++ b/build-aux/snippet/arg-nonnull.h @@ -0,0 +1,26 @@ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h new file mode 100644 index 000000000..b35b933cd --- /dev/null +++ b/build-aux/snippet/c++defs.h @@ -0,0 +1,271 @@ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + rettype (*const func) parameters = ::rpl_func; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + rettype (*const func) parameters = \ + reinterpret_cast(::rpl_func); \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* If we were to write + rettype (*const func) parameters = ::func; + like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls + better (remove an indirection through a 'static' pointer variable), + but then the _GL_CXXALIASWARN macro below would cause a warning not only + for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static rettype (*func) parameters = ::func; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static rettype (*func) parameters = \ + reinterpret_cast(::func); \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static rettype (*func) parameters = \ + reinterpret_cast( \ + (rettype2(*)parameters2)(::func)); \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug , + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ diff --git a/build-aux/snippet/warn-on-use.h b/build-aux/snippet/warn-on-use.h new file mode 100644 index 000000000..1736a1bd7 --- /dev/null +++ b/build-aux/snippet/warn-on-use.h @@ -0,0 +1,109 @@ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + This macro is useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. However, one of the reasons that a function is a + portability trap is if it has the wrong signature. Declaring + FUNCTION with a different signature in C is a compilation error, so + this macro must use the same type as any existing declaration so + that programs that avoid the problematic FUNCTION do not fail to + compile merely because they included a header that poisoned the + function. But this implies that _GL_WARN_ON_USE is only safe to + use if FUNCTION is known to already have a declaration. Use of + this macro implies that there must not be any other macro hiding + the declaration of FUNCTION; but undefining FUNCTION first is part + of the poisoning process anyway (although for symbols that are + provided only via a macro, the result is a compilation error rather + than a warning containing "literal string"). Also note that in + C++, it is only safe to use if FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system : + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char ***rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif diff --git a/build-aux/test-driver b/build-aux/test-driver new file mode 100755 index 000000000..d30605660 --- /dev/null +++ b/build-aux/test-driver @@ -0,0 +1,139 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2013-07-13.22; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex new file mode 100644 index 000000000..85f184cc4 --- /dev/null +++ b/build-aux/texinfo.tex @@ -0,0 +1,10079 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2013-02-01.11} +% +% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +% +% This texinfo.tex file is free software: you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation, either version 3 of the +% License, or (at your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see . +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. This Exception is an additional permission under section 7 +% of the GNU General Public License, version 3 ("GPLv3"). +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or +% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or +% http://www.gnu.org/software/texinfo/ (the Texinfo home page) +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexraggedright=\raggedright +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t +\let\ptextop=\top +{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putworderror\undefined \gdef\putworderror{error}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences. +\chardef\ampChar = `\& +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dashChar = `\- +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\hashChar = `\# +\chardef\lquoteChar= `\` +\chardef\questChar = `\? +\chardef\rquoteChar= `\' +\chardef\semiChar = `\; +\chardef\slashChar = `\/ +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt } + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\thisisundefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% @errormsg{MSG}. Do the index-like expansions on MSG, but if things +% aren't perfect, it's not the end of the world, being an error message, +% after all. +% +\def\errormsg{\begingroup \indexnofonts \doerrormsg} +\def\doerrormsg#1{\errmessage{#1}} + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. The solution is +% described on page 260 of The TeXbook. It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after. I won't pretend I can describe this better than DEK... +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 + \noexpand\or \the\toks4 \the\toks6 + \noexpand\else \the\toks8 + }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\tt \backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1\relax \unvbox#1\relax +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurrence of `\^^M' or `\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as environments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At run-time, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Environment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + outside of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal. + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\unskip\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. Not documented, written for gawk manual. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). This command +% is not documented, not supported, and doesn't work. +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% @include FILE -- \input text of FILE. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable % we want to expand any @value in FILE. + \turnoffactive % and allow special characters in the expansion + \indexnofonts % Allow `@@' and other weird things in file names. + \wlog{texinfo.tex: doing @include of #1^^J}% + \edef\temp{\noexpand\input #1 }% + % + % This trickery is to read FILE outside of a group, in case it makes + % definitions, etc. + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other + \catcode`\`=\other + \catcode`\'=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} +% +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\centersub\centerH + \else + \let\centersub\centerV + \fi + \centersub{\hfil \ignorespaces#1\unskip \hfil}% + \let\centersub\relax % don't let the definition persist, just in case +} +\def\centerH#1{{% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break +}} +% +\newcount\centerpenalty +\def\centerV#1{% + % The idea here is the same as in \startdefun, \cartouche, etc.: if + % @center is the first thing after a section heading, we need to wipe + % out the negative parskip inserted by \sectionheading, but still + % prevent a page break here. + \centerpenalty = \lastpenalty + \ifnum\centerpenalty>10000 \vskip\parskip \fi + \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi + \line{\kern\leftskip #1\kern\rightskip}% +} + +% @sp n outputs n lines of vertical space +% +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment +% +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} +% +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as being undefined. +\ifx\pdfoutput\thisisundefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% +% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and +% related messages. The final outcome is that it is up to the TeX user +% to double the backslashes and otherwise make the string valid, so +% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to +% do this reliably, so we use it. + +% #1 is a control sequence in which to do the replacements, +% which we \xdef. +\def\txiescapepdf#1{% + \ifx\pdfescapestring\thisisundefined + % No primitive available; should we give a warning or log? + % Many times it won't matter. + \else + % The expandable \pdfescapestring primitive escapes parentheses, + % backslashes, and other special chars. + \xdef#1{\pdfescapestring{#1}}% + \fi +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros based on pdfcolor.tex, + % except using rgb instead of cmyk; the latter is said to render as a + % very dark gray on-screen and a very dark halftone in print, instead + % of actual black. + \def\rgbDarkRed{0.50 0.09 0.12} + \def\rgbBlack{0 0 0} + % + % k sets the color for filling (usual text, etc.); + % K sets the color for stroking (thin rules, e.g., normal _'s). + \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} + % + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\rgbBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .pdf, .png, .jpg (among + % others). Let's try in that order, PDF first since if + % someone has a scalable image, presumably better to use that than a + % bitmap. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \else \gdef\pdfimgext{PDF}% + \fi + \else \gdef\pdfimgext{pdf}% + \fi + \closein 1 + \endgroup + % + % without \immediate, ancient pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \pdfimagewidth \fi + \ifdim \wd2 >0pt height \pdfimageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \turnoffactive + \makevalueexpandable + \def\pdfdestname{#1}% + \txiescapepdf\pdfdestname + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + }} + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use a color that is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. + \def\urlcolor{\rgbDarkRed} + \def\linkcolor{\rgbDarkRed} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \edef\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + \txiescapepdf\pdfoutlinedest + \fi + % + % Also escape PDF chars in the display string. + \edef\pdfoutlinetext{#1}% + \txiescapepdf\pdfoutlinetext + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\partentry##1##2##3##4{}% ignore parts in the outlines + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % TODO this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Too + % much work for too little return. Just use the ASCII equivalents + % we use for the index sort strings. + % + \indexnofonts + \setupdatafile + % We can have normal brace characters in the PDF outlines, unlike + % Texinfo index files. So set that up. + \def\{{\lbracecharliteral}% + \def\}{\rbracecharliteral}% + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + {\catcode`[=1 \catcode`]=2 + \catcode`{=\other \catcode`}=\other + \gdef\lbracecharliteral[{]% + \gdef\rbracecharliteral[}]% + ] + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \nextsp} + \def\getfilename#1{% + \filenamelength=0 + % If we don't expand the argument now, \skipspaces will get + % snagged on things like "@value{foo}". + \edef\temp{#1}% + \expandafter\skipspaces\temp|\relax + } + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + % do we want to go so far as to use \indexnofonts instead of just + % special-casing \var here? + \def\var##1{##1}% + % + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + % non-pdf mode + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Unfortunately, we have to override this for titles and the like, since +% in those cases "rm" is bold. Sigh. +\def\rmisbold{\rm\def\curfontstyle{bf}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\newdimen\textleading +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% PDF CMaps. See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\thisisundefined \else + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\fi\fi + + +% Set the font macro #1 to the font named \fontprefix#2. +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). +% Example: +% #1 = \textrm +% #2 = \rmshape +% #3 = 10 +% #4 = \mainmagstep +% #5 = OT1 +% +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% +% (end of cmaps) + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\thisisundefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} % where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Definitions for a main text size of 11pt. (The default in Texinfo.) +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +\textleading = 13.2pt % line spacing for 11pt CM +\textfonts % reset the current fonts +\rm +} % end of 11pt text font size definitions, \definetextfontsizexi + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +\divide\parskip by 2 % reduce space between paragraphs +\textleading = 12pt % line spacing for 10pt CM +\textfonts % reset the current fonts +\rm +} % end of 10pt text font size definitions, \definetextfontsizex + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xiword{11} +\def\xword{10} +\def\xwordpt{10pt} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + %\wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts except +% in the main text, we don't bother to reset \scriptfont and +% \scriptscriptfont (which would also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy + \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf + \textfont\ttfam=\tentt \textfont\sffam=\tensf +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{27pt}} +\def\titlefont#1{{\titlefonts\rmisbold #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +% Define these just so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% --karl, 24jan03. + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + + +\message{markup,} + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will +% define and register \INITMACRO to be called on markup style changes. +% \INITMACRO can check \currentmarkupstyle for the innermost +% style and the set of \ifmarkupSTYLE switches for all styles +% currently in effect. +\newif\ifmarkupvar +\newif\ifmarkupsamp +\newif\ifmarkupkey +%\newif\ifmarkupfile % @file == @samp. +%\newif\ifmarkupoption % @option == @samp. +\newif\ifmarkupcode +\newif\ifmarkupkbd +%\newif\ifmarkupenv % @env == @code. +%\newif\ifmarkupcommand % @command == @code. +\newif\ifmarkuptex % @tex (and part of @math, for now). +\newif\ifmarkupexample +\newif\ifmarkupverb +\newif\ifmarkupverbatim + +\let\currentmarkupstyle\empty + +\def\setupmarkupstyle#1{% + \csname markup#1true\endcsname + \def\currentmarkupstyle{#1}% + \markupstylesetup +} + +\let\markupstylesetup\empty + +\def\defmarkupstylesetup#1{% + \expandafter\def\expandafter\markupstylesetup + \expandafter{\markupstylesetup #1}% + \def#1% +} + +% Markup style setup for left and right quotes. +\defmarkupstylesetup\markupsetuplq{% + \expandafter\let\expandafter \temp + \csname markupsetuplq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuplqdefault \else \temp \fi +} + +\defmarkupstylesetup\markupsetuprq{% + \expandafter\let\expandafter \temp + \csname markupsetuprq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuprqdefault \else \temp \fi +} + +{ +\catcode`\'=\active +\catcode`\`=\active + +\gdef\markupsetuplqdefault{\let`\lq} +\gdef\markupsetuprqdefault{\let'\rq} + +\gdef\markupsetcodequoteleft{\let`\codequoteleft} +\gdef\markupsetcodequoteright{\let'\codequoteright} +} + +\let\markupsetuplqcode \markupsetcodequoteleft +\let\markupsetuprqcode \markupsetcodequoteright +% +\let\markupsetuplqexample \markupsetcodequoteleft +\let\markupsetuprqexample \markupsetcodequoteright +% +\let\markupsetuplqkbd \markupsetcodequoteleft +\let\markupsetuprqkbd \markupsetcodequoteright +% +\let\markupsetuplqsamp \markupsetcodequoteleft +\let\markupsetuprqsamp \markupsetcodequoteright +% +\let\markupsetuplqverb \markupsetcodequoteleft +\let\markupsetuprqverb \markupsetcodequoteright +% +\let\markupsetuplqverbatim \markupsetcodequoteleft +\let\markupsetuprqverbatim \markupsetcodequoteright + +% Allow an option to not use regular directed right quote/apostrophe +% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). +% The undirected quote is ugly, so don't make it the default, but it +% works for pasting with more pdf viewers (at least evince), the +% lilypond developers report. xpdf does work with the regular 0x27. +% +\def\codequoteright{% + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + % [Knuth] pp. 380,381,391 + % \relax disables Spanish ligatures ?` and !` of \tt font. + \relax`% + \else \char'22 \fi + \else \char'22 \fi +} + +% Commands to set the quote options. +% +\parseargdef\codequoteundirected{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETtxicodequoteundirected\endcsname + = t% + \else\ifx\temp\offword + \expandafter\let\csname SETtxicodequoteundirected\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% + \fi\fi +} +% +\parseargdef\codequotebacktick{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETtxicodequotebacktick\endcsname + = t% + \else\ifx\temp\offword + \expandafter\let\csname SETtxicodequotebacktick\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% + \fi\fi +} + +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. +\def\noligaturesquoteleft{\relax\lq} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Font commands. + +% #1 is the font command (\sl or \it), #2 is the text to slant. +% If we are in a monospaced environment, however, 1) always use \ttsl, +% and 2) do not add an italic correction. +\def\dosmartslant#1#2{% + \ifusingtt + {{\ttsl #2}\let\next=\relax}% + {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% + \next +} +\def\smartslanted{\dosmartslant\sl} +\def\smartitalic{\dosmartslant\it} + +% Output an italic correction unless \next (presumed to be the following +% character) is such as not to need one. +\def\smartitaliccorrection{% + \ifx\next,% + \else\ifx\next-% + \else\ifx\next.% + \else\ptexslash + \fi\fi\fi + \aftersmartic +} + +% Unconditional use \ttsl, and no ic. @var is set to this for defuns. +\def\ttslanted#1{{\ttsl #1}} + +% @cite is like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} + +\def\aftersmartic{} +\def\var#1{% + \let\saveaftersmartic = \aftersmartic + \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% + \smartslanted{#1}% +} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @b, explicit bold. Also @strong. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +% @t, explicit typewriter. +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} + +% @samp. +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} + +% @indicateurl is \samp, that is, with quotes. +\let\indicateurl=\samp + +% @code (and similar) prints in typewriter, but with spaces the same +% size as normal in the surrounding text, without hyphenation, etc. +% This is a subroutine for that. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \plainfrenchspacing + #1% + }% + \null % reset spacefactor to 1000 +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. +% +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ + \catcode`\-=\active \catcode`\_=\active + \catcode`\'=\active \catcode`\`=\active + \global\let'=\rq \global\let`=\lq % default definitions + % + \global\def\code{\begingroup + \setupmarkupstyle{code}% + % The following should really be moved into \setupmarkupstyle handlers. + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\normaldash + \let_\realunder + \fi + \codex + } +} + +\def\codex #1{\tclose{#1}\endgroup} + +\def\normaldash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is bad. +% @allowcodebreaks provides a document-level way to turn breaking at - +% and _ on and off. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% + \fi\fi +} + +% For @command, @env, @file, @option quotes seem unnecessary, +% so use \code rather than \samp. +\let\command=\code +\let\env=\code +\let\file=\code +\let\option=\code + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. +% (This \urefnobreak definition isn't used now, leaving it for a while +% for comparison.) +\def\urefnobreak#1{\dourefnobreak #1,,,\finish} +\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% This \urefbreak definition is the active one. +\def\urefbreak{\begingroup \urefcatcodes \dourefbreak} +\let\uref=\urefbreak +\def\dourefbreak#1{\urefbreakfinish #1,,,\finish} +\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \urefcode{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% Allow line breaks around only a few characters (only). +\def\urefcatcodes{% + \catcode\ampChar=\active \catcode\dotChar=\active + \catcode\hashChar=\active \catcode\questChar=\active + \catcode\slashChar=\active +} +{ + \urefcatcodes + % + \global\def\urefcode{\begingroup + \setupmarkupstyle{code}% + \urefcatcodes + \let&\urefcodeamp + \let.\urefcodedot + \let#\urefcodehash + \let?\urefcodequest + \let/\urefcodeslash + \codex + } + % + % By default, they are just regular characters. + \global\def&{\normalamp} + \global\def.{\normaldot} + \global\def#{\normalhash} + \global\def?{\normalquest} + \global\def/{\normalslash} +} + +% we put a little stretch before and after the breakable chars, to help +% line breaking of long url's. The unequal skips make look better in +% cmtt at least, especially for dots. +\def\urefprestretch{\urefprebreak \hskip0pt plus.13em } +\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } +% +\def\urefcodeamp{\urefprestretch \&\urefpoststretch} +\def\urefcodedot{\urefprestretch .\urefpoststretch} +\def\urefcodehash{\urefprestretch \#\urefpoststretch} +\def\urefcodequest{\urefprestretch ?\urefpoststretch} +\def\urefcodeslash{\futurelet\next\urefcodeslashfinish} +{ + \catcode`\/=\active + \global\def\urefcodeslashfinish{% + \urefprestretch \slashChar + % Allow line break only after the final / in a sequence of + % slashes, to avoid line break between the slashes in http://. + \ifx\next/\else \urefpoststretch \fi + } +} + +% One more complication: by default we'll break after the special +% characters, but some people like to break before the special chars, so +% allow that. Also allow no breaking at all, for manual control. +% +\parseargdef\urefbreakstyle{% + \def\txiarg{#1}% + \ifx\txiarg\wordnone + \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} + \else\ifx\txiarg\wordbefore + \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} + \else\ifx\txiarg\wordafter + \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} + \else + \errhelp = \EMsimple + \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% + \fi\fi\fi +} +\def\wordafter{after} +\def\wordbefore{before} +\def\wordnone{none} + +\urefbreakstyle after + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct'. +\kbdinputstyle distinct + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. +\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} + +\def\xkey{\key} +\def\kbdsub#1#2#3\par{% + \def\one{#1}\def\three{#3}\def\threex{??}% + \ifx\one\xkey\ifx\threex\three \key{#2}% + \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi + \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi +} + +% definition of @key that produces a lozenge. Doesn't adjust to text size. +%\setfont\keyrm\rmshape{8}{1000}{OT1} +%\font\keysy=cmsy9 +%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% +% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% +% \vbox{\hrule\kern-0.4pt +% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% +% \kern-0.4pt\hrule}% +% \kern-.06em\raise0.4pt\hbox{\angleright}}}} + +% definition of @key with no lozenge. If the current font is already +% monospace, don't change it; that way, we respect @kbdinputstyle. But +% if it isn't monospace, then use \tt. +% +\def\key#1{{\setupmarkupstyle{key}% + \nohyphenation + \ifmonospace\else\tt\fi + #1}\null} + +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi + \null % reset \spacefactor=1000 +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi + \null % reset \spacefactor=1000 +} + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a math (or tt) \. +% FYI, plain.tex uses \\ as a temporary control sequence (for no +% particular reason), but this is not advertised and we don't care. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + % make the texinfo accent commands work in math mode + \let\"=\ddot + \let\'=\acute + \let\==\bar + \let\^=\hat + \let\`=\grave + \let\u=\breve + \let\v=\check + \let\~=\tilde + \let\dotaccent=\dot + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \catcode`' = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + \let' = \ptexquoteright + } +} + +% ctrl is no longer a Texinfo command, but leave this definition for fun. +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. +% Ignore unless FMTNAME == tex; then it is like @iftex and @tex, +% except specified as a normal braced arg, so no newlines to worry about. +% +\def\outfmtnametex{tex} +% +\long\def\inlinefmt#1{\doinlinefmt #1,\finish} +\long\def\doinlinefmt#1,#2,\finish{% + \def\inlinefmtname{#1}% + \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi +} +% For raw, must switch into @tex before parsing the argument, to avoid +% setting catcodes prematurely. Doing it this way means that, for +% example, @inlineraw{html, foo{bar} gets a parse error instead of being +% ignored. But this isn't important because if people want a literal +% *right* brace they would have to use a command anyway, so they may as +% well use a command to get a left brace too. We could re-use the +% delimiter character idea from \verb, but it seems like overkill. +% +\long\def\inlineraw{\tex \doinlineraw} +\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} +\def\doinlinerawtwo#1,#2,\finish{% + \def\inlinerawname{#1}% + \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi + \endgroup % close group opened by \tex. +} + + +\message{glyphs,} +% and logos. + +% @@ prints an @, as does @atchar{}. +\def\@{\char64 } +\let\atchar=\@ + +% @{ @} @lbracechar{} @rbracechar{} all generate brace characters. +% Unless we're in typewriter, use \ecfont because the CM text fonts do +% not have braces, and we don't want to switch into math. +\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} +\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} +\let\{=\mylbrace \let\lbracechar=\{ +\let\}=\myrbrace \let\rbracechar=\} +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \ptexc +\let\dotaccent = \ptexdot +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \ptext +\let\ubaraccent = \ptexb +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi + \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{% + \ifx\textnominalsize\xwordpt + % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. + % Revert to plain's \scriptsize, which is 7pt. + \count255=\the\fam $\fam\count255 \scriptstyle A$% + \else + % For 11pt, we can use our lllsize. + \selectfonts\lllsize A% + \fi + }% + \vss + }}% + \kern-.15em + \TeX +} + +% Some math mode symbols. +\def\bullet{$\ptexbullet$} +\def\geq{\ifmmode \ge\else $\ge$\fi} +\def\leq{\ifmmode \le\else $\le$\fi} +\def\minus{\ifmmode -\else $-$\fi} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Glyphs from the EC fonts. We don't use \let for the aliases, because +% sometimes we redefine the original macro, and the alias should reflect +% the redefinition. +% +% Use LaTeX names for the Icelandic letters. +\def\DH{{\ecfont \char"D0}} % Eth +\def\dh{{\ecfont \char"F0}} % eth +\def\TH{{\ecfont \char"DE}} % Thorn +\def\th{{\ecfont \char"FE}} % thorn +% +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +% This positioning is not perfect (see the ogonek LaTeX package), but +% we have the precomposed glyphs for the most common cases. We put the +% tests to use those glyphs in the single \ogonek macro so we have fewer +% dummy definitions to worry about for index entries, etc. +% +% ogonek is also used with other letters in Lithuanian (IOU), but using +% the precomposed glyphs for those is not so easy since they aren't in +% the same EC font. +\def\ogonek#1{{% + \def\temp{#1}% + \ifx\temp\macrocharA\Aogonek + \else\ifx\temp\macrochara\aogonek + \else\ifx\temp\macrocharE\Eogonek + \else\ifx\temp\macrochare\eogonek + \else + \ecfont \setbox0=\hbox{#1}% + \ifdim\ht0=1ex\accent"0C #1% + \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% + \fi + \fi\fi\fi\fi + }% +} +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} +% +% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. +\def\ecfont{% + % We can't distinguish serif/sans and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifmonospace + % typewriter: + \font\thisecfont = ectt\ecsize \space at \nominalsize + \else + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\thisisundefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{% + \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +% Settings used for typesetting titles: no hyphenation, no indentation, +% don't worry much about spacing, ragged right. This should be used +% inside a \vbox, and fonts need to be set appropriately first. Because +% it is always used for titles, nothing else, we call \rmisbold. \par +% should be specified before the end of the \vbox, since a vbox is a group. +% +\def\raggedtitlesettings{% + \rmisbold + \hyphenpenalty=10000 + \parindent=0pt + \tolerance=5000 + \ptexraggedright +} + +% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\parseargdef\title{% + \checkenv\titlepage + \vbox{\titlefonts \raggedtitlesettings #1\par}% + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\secfonts\rmisbold \leftline{#1}}% + \fi +} + + +% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\headingsoff{% non-global headings elimination + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% +} + +\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting +\HEADINGSoff % it's the default + +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\thisisundefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil\relax + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + % + % Try typesetting the item mark that if the document erroneously says + % something like @itemize @samp (intending @table), there's an error + % right away at the @itemize. It's not the best error message in the + % world, but it's better than leaving it to the @item. This means if + % the user wants an empty mark, they have to say @w{} not just @w. + \def\itemcontents{#1}% + \setbox0 = \hbox{\itemcontents}% + % + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + % + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + % + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a . + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. \everycr resets \everytab so we don't have to +% undo it ourselves. +\def\headitemfont{\b}% for people to use in the template row; not changeable +\def\headitem{% + \checkenv\multitable + \crcr + \global\everytab={\bf}% can't use \headitemfont since the parsing differs + \the\everytab % for the first item +}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we again encounter the problem the 1sp was intended to solve. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +% Test to see if parskip is larger than space between lines of +% table. If not, do nothing. +% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller + % than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller + % than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\normaldash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end executes the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written +% without the @) is in fact defined. We can only feasibly check at the +% TeX level, so something like `mathcode' is going to considered +% defined even though it is not a Texinfo command. +% +\makecond{ifcommanddefined} +\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} +% +\def\doifcmddefined#1#2{{% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname #2\endcsname\relax + #1% If not defined, \let\next as above. + \fi + \expandafter + }\next +} +\def\ifcmddefinedfail{\doignore{ifcommanddefined}} + +% @ifcommandnotdefined CMD ... handled similar to @ifclear above. +\makecond{ifcommandnotdefined} +\def\ifcommandnotdefined{% + \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} +\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} + +% Set the `txicommandconditionals' variable, so documents have a way to +% test if the @ifcommand...defined conditionals are available. +\set txicommandconditionals + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \relax + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % + % Need these unexpandable (because we define \tt as a dummy) + % definitions when @{ or @} appear in index entry text. Also, more + % complicated, when \tex is in effect and \{ is a \delimiter again. + % We can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. Perhaps we + % should define @lbrace and @rbrace commands a la @comma. + \def\{{{\tt\char123}}% + \def\}{{\tt\char125}}% + % + % I don't entirely understand this, but when an index entry is + % generated from a macro call, the \endinput which \scanmacro inserts + % causes processing to be prematurely terminated. This is, + % apparently, because \indexsorttmp is fully expanded, and \endinput + % is an expandable command. The redefinition below makes \endinput + % disappear altogether for that purpose -- although logging shows that + % processing continues to some further point. On the other hand, it + % seems \endinput does not hurt in the printed index arg, since that + % is still getting written without apparent harm. + % + % Sample source (mac-idx3.tex, reported by Graham Percival to + % help-texinfo, 22may06): + % @macro funindex {WORD} + % @findex xyz + % @end macro + % ... + % @funindex commtest + % + % The above is not enough to reproduce the bug, but it gives the flavor. + % + % Sample whatsit resulting: + % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} + % + % So: + \let\endinput = \empty + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies + \otherbackslash +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + \definedummyletter\-% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\DH + \definedummyword\L + \definedummyword\O + \definedummyword\OE + \definedummyword\TH + \definedummyword\aa + \definedummyword\ae + \definedummyword\dh + \definedummyword\exclamdown + \definedummyword\l + \definedummyword\o + \definedummyword\oe + \definedummyword\ordf + \definedummyword\ordm + \definedummyword\questiondown + \definedummyword\ss + \definedummyword\th + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\arrow + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\entrybreak + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\expansion + \definedummyword\geq + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\lbracechar + \definedummyword\leq + \definedummyword\minus + \definedummyword\ogonek + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\rbracechar + \definedummyword\result + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ogonek + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sansserif + \definedummyword\sc + \definedummyword\slanted + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\abbr + \definedummyword\acronym + \definedummyword\anchor + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\dmn + \definedummyword\email + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\image + \definedummyword\indicateurl + \definedummyword\inforef + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\pxref + \definedummyword\ref + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + \definedummyword\xref +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % All control words become @asis by default; overrides below. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + \def\_{\normalunderscore}% + \def\-{}% @- shouldn't affect sorting + % + % Unfortunately, texindex is not prepared to handle braces in the + % content at all. So for index sorting, we map @{ and @} to strings + % starting with |, since that ASCII character is between ASCII { and }. + \def\{{|a}% + \def\lbracechar{|a}% + % + \def\}{|b}% + \def\rbracechar{|b}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\DH{DZZ}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\TH{ZZZ}% + \def\aa{aa}% + \def\ae{ae}% + \def\dh{dzz}% + \def\exclamdown{!}% + \def\l{l}% + \def\oe{oe}% + \def\ordf{a}% + \def\ordm{o}% + \def\o{o}% + \def\questiondown{?}% + \def\ss{ss}% + \def\th{zzz}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\arrow{->}% + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\expansion{==>}% + \def\geq{>=}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\leq{<=}% + \def\minus{-}% + \def\point{.}% + \def\pounds{pounds}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\registeredsymbol{R}% + \def\result{=>}% + \def\textdegree{o}% + % + \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax + \else \indexlquoteignore \fi + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us +% ignore left quotes in the sort term. +{\catcode`\`=\active + \gdef\indexlquoteignore{\let`=\empty}} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{\ifhmode + #1% + \else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this freezes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % When reading the text of entry, convert explicit line breaks + % from @* into spaces. The user might give these in long section + % titles, for instance. + \def\*{\unskip\space\ignorespaces}% + \def\entrybreak{\hfil\break}% + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\entrybreak{\unskip\space\ignorespaces}% +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \setbox\boxA = \hbox{#1}% + \ifdim\wd\boxA = 0pt + \ % + \else + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like plain.tex's \dotfill, except uses up at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \pageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% Let's start with @part. +\outer\parseargdef\part{\partzzz{#1}} +\def\partzzz#1{% + \chapoddpage + \null + \vskip.3\vsize % move it down on the page a bit + \begingroup + \noindent \titlefonts\rmisbold #1\par % the text + \let\lastnode=\empty % no node to associate with + \writetocentry{part}{#1}{}% but put it in the toc + \headingsoff % no headline or footline on the part page + \chapoddpage + \endgroup +} + +% \unnumberedno is an oxymoron. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achieve this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unnlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unnlevel + \chardef\unnlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unnlevel + \def\headtype{U}% + \else + \chardef\unnlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + % \putwordChapter can contain complex things in translations. + \toks0=\expandafter{\putwordChapter}% + \message{\the\toks0 \space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz +% +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + % \putwordAppendix can contain complex things in translations. + \toks0=\expandafter{\putwordAppendix}% + \message{\the\toks0 \space \appendixletter}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +% normally unnmhead0 calls unnumberedzzz: +\outer\parseargdef\unnumbered{\unnmhead0{#1}} +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the to achieve this: TeX expands \the only once, + % simply yielding the contents of . (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +% +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +% normally calls appendixsectionzzz: +\outer\parseargdef\appendixsection{\apphead1{#1}} +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +% normally calls unnumberedseczzz: +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +% +% normally calls numberedsubseczzz: +\outer\parseargdef\numberedsubsec{\numhead2{#1}} +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +% normally calls appendixsubseczzz: +\outer\parseargdef\appendixsubsec{\apphead2{#1}} +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +% normally calls unnumberedsubseczzz: +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +% +% normally numberedsubsubseczzz: +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% normally appendixsubsubseczzz: +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% normally unnumberedsubsubseczzz: +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + \vbox{\chapfonts \raggedtitlesettings #1\par}% + \nobreak\bigskip \nobreak + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +% Parameter controlling skip before chapter headings (if needed) +\newskip\chapheadingskip + +% Define plain chapter starts, and page on/off switching for it. +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \headingsoff + \null + \chappager + \endgroup + \fi +} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + % \noexpand\putwordAppendix avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} + \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + % \noexpand\putwordChapter avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordChapter{} + \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rmisbold + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% + \chapoddpage + \vbox{\chapfonts \raggedtitlesettings #1\par}% + \nobreak\bigskip\nobreak +} +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} +\def\centerchfopen #1{% + \chapoddpage + \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% + \nobreak\bigskip \nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + \checkenv{}% should not be in an environment. + % + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rmisbold + % + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Go into vertical mode. Usually we'll already be there, but we + % don't want the following whatsit to end up in a preceding paragraph + % if the document didn't happen to have a blank line. + \par + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) However, when a paragraph is not started next + % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out + % or the negative glue will cause weirdly wrong output, typically + % obscuring the section heading with something else. + \vskip-\parskip + % + % This is so the last item on the main vertical list is a known + % \penalty > 10000, so \startdefun, etc., can recognize the situation + % and do the needful. + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\partentry = \shortpartentry + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Parts, in the main contents. Replace the part number, which doesn't +% exist, with an empty box. Let's hope all the numbers have the same width. +% Also ignore the page number, which is conventionally not printed. +\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} +\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} +% +% Parts, in the short toc. +\def\shortpartentry#1#2#3#4{% + \penalty-300 + \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip + \shortchapentry{{\bf #1}}{\numeralbox}{}{}% +} + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @tex ... @end tex escapes into raw TeX temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain @ character. + +\envdef\tex{% + \setupmarkupstyle{tex}% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \catcode`\`=\other + \catcode`\'=\other + \escapechar=`\\ + % + % ' is active in math mode (mathcode"8000). So reset it, and all our + % other math active characters (just in case), to plain's definitions. + \mathactive + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \expandafter \let\csname top\endcsname=\ptextop % outer + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + % + % If this cartouche directly follows a sectioning command, we need the + % \parskip glue (backspaced over by default) or the cartouche can + % collide with the section heading. + \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi + % + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\newdimen\nonfillparindent +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + % Turn off paragraph indentation but redefine \indent to emulate + % the normal \indent. + \nonfillparindent=\parindent + \parindent = 0pt + \let\indent\nonfillindent + % + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +\begingroup +\obeyspaces +% We want to swallow spaces (but not other tokens) after the fake +% @indent in our nonfill-environments, where spaces are normally +% active and set to @tie, resulting in them not being ignored after +% @indent. +\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% +\gdef\nonfillindentcheck{% +\ifx\temp % +\expandafter\nonfillindentgobble% +\else% +\leavevmode\nonfillindentbox% +\fi% +}% +\endgroup +\def\nonfillindentgobble#1{\nonfillindent} +\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it in one command. #1 is the env name, #2 the definition. +\def\makedispenvdef#1#2{% + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two environment synonyms (#1 and #2) for an environment. +\def\maketwodispenvdef#1#2#3{% + \makedispenvdef{#1}{#3}% + \makedispenvdef{#2}{#3}% +} +% +% @lisp: indented, narrowed, typewriter font; +% @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvdef{lisp}{example}{% + \nonfillstart + \tt\setupmarkupstyle{example}% + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenvdef{display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenvdef{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill\relax + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @raggedright does more-or-less normal line breaking but no right +% justification. From plain.tex. +\envdef\raggedright{% + \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax +} +\let\Eraggedright\par + +\envdef\raggedleft{% + \parindent=0pt \leftskip0pt plus2em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedleft\par + +\envdef\raggedcenter{% + \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedcenter\par + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\makedispenvdef{quotation}{\quotationstart} +% +\def\quotationstart{% + \indentedblockstart % same as \indentedblock, but increase right margin too. + \ifx\nonarrowing\relax + \advance\rightskip by \lispnarrowing + \fi + \parsearg\quotationlabel +} + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\thisisundefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} +\def\Esmallquotation{\Equotation} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + +% @indentedblock is like @quotation, but indents only on the left and +% has no optional argument. +% +\makedispenvdef{indentedblock}{\indentedblockstart} +% +\def\indentedblockstart{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi +} + +% Keep a nonzero parskip for the environment, since we're doing normal filling. +% +\def\Eindentedblock{% + \par + {\parskip=0pt \afterenvbreak}% +} +\def\Esmallindentedblock{\Eindentedblock} + + +% LaTeX-like @verbatim...@end verbatim and @verb{...} +% If we want to allow any as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% + % Don't do the quotes -- if we do, @set txicodequoteundirected and + % @set txicodequotebacktick will not have effect on @verb and + % @verbatim, and ?` and !` ligatures won't get disabled. + %\do\`\do\'% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \setupmarkupstyle{verb}% + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion. +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +% We typeset each line of the verbatim in an \hbox, so we can handle +% tabs. The \global is in case the verbatim line starts with an accent, +% or some other command that starts with a begin-group. Otherwise, the +% entire \verbbox would disappear at the corresponding end-group, before +% it is typeset. Meanwhile, we can't have nested verbatim commands +% (can we?), so the \global won't be overwriting itself. +\newbox\verbbox +\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} +% +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab + \divide\dimen\verbbox by\tabw + \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw + \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw + \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox + }% + } +\endgroup + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + \tt % easiest (and conventionally used) font for verbatim + % The \leavevmode here is for blank lines. Otherwise, we would + % never \starttabox and the \egroup would end verbatim mode. + \def\par{\leavevmode\egroup\box\verbbox\endgraf}% + \tabexpand + \setupmarkupstyle{verbatim}% + % Respect line breaks, + % print special symbols as themselves, and + % make each space count. + % Must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'#1'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \indexnofonts % Allow `@@' and other weird things in file names. + \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a further refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil\relax + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remaining is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \doingtypefnfalse % distinguish typed functions from all else + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +\newif\ifdoingtypefn % doing typed function? +\newif\ifrettypeownline % typeset return type on its own line? + +% @deftypefnnewline on|off says whether the return type of typed functions +% are printed on their own line. This affects @deftypefn, @deftypefun, +% @deftypeop, and @deftypemethod. +% +\parseargdef\deftypefnnewline{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETtxideftypefnnl\endcsname + = \empty + \else\ifx\temp\offword + \expandafter\let\csname SETtxideftypefnnl\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @txideftypefnnl value `\temp', + must be on|off}% + \fi\fi +} + +% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \doingtypefntrue + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +% Types: + +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + \par + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % Determine if we are typesetting the return type of a typed function + % on a line by itself. + \rettypeownlinefalse + \ifdoingtypefn % doing a typed function specifically? + % then check user option for putting return type on its own line: + \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else + \rettypeownlinetrue + \fi + \fi + % + % How we'll format the category name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. We'll always have at + % least two. + \tempnum = 2 + % + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % + % If doing a return type on its own line, we'll have another line. + \ifrettypeownline + \advance\tempnum by 1 + \def\maybeshapeline{0in \hsize}% + \else + \def\maybeshapeline{}% + \fi + % + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % + % The final paragraph shape: + \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 + % + % Put the category name at the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% text of the return type + \ifx\temp\empty\else + \tclose{\temp}% typeset the return type + \ifrettypeownline + % put return type on its own line; prohibit line break following: + \hfil\vadjust{\nobreak}\break + \else + \space % type on same line, so just followed by a space + \fi + \fi % no return type + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. We used to recommend @var for that, so + % leave the code in, but it's strange for @var to lead to typewriter. + % Nowadays we recommend @code, since the difference between a ttsl hyphen + % and a tt hyphen is pretty tiny. @code also disables ?` !`. + \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\thisisundefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{\begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % + % ... and for \example: + \spaceisspace + % + % The \empty here causes a following catcode 5 newline to be eaten as + % part of reading whitespace after a control sequence. It does not + % eat a catcode 13 newline. There's no good way to handle the two + % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX + % would then have different behavior). See the Macro Details node in + % the manual for the workaround we recommend for macros and + % line-oriented commands. + % + \scantokens{#1\empty}% +\endgroup} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \ +% to recognize macro arguments; this is the job of \mbodybackslash. +% +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. +% +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. +% +\def\scanctxt{% used as subroutine + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi +} + +\def\scanargctxt{% used for copying and captions, not macros. + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% used for @macro definitions + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% used when scanning invocations + \scanctxt + \catcode`\\=0 +} +% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" +% for the single characters \ { }. Thus, we end up with the "commands" +% that would be written @\ @{ @} in a Texinfo document. +% +% We already have @{ and @}. For @\, we define it here, and only for +% this purpose, to produce a typewriter backslash (so, the @\ that we +% define for @math can't be used with @macro calls): +% +\def\\{\normalbackslash}% +% +% We would like to do this for \, too, since that is what makeinfo does. +% But it is not possible, because Texinfo already has a command @, for a +% cedilla accent. Documents must use @comma{} instead. +% +% \anythingelse will almost certainly be an error of some kind. + + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. +% +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\margbackslash#1{\char`\#1 } + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0\relax + \else + \expandafter\parsemargdef \argl;% + \if\paramno>256\relax + \ifx\eTeXversion\thisisundefined + \errhelp = \EMsimple + \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} + \fi + \fi + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname#1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% For macro processing make @ a letter so that we can make Texinfo private macro names. +\edef\texiatcatcode{\the\catcode`\@} +\catcode `@=11\relax + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH +% in the params list to some hook where the argument si to be expanded. If +% there are less than 10 arguments that hook is to be replaced by ##N where N +% is the position in that list, that is to say the macro arguments are to be +% defined `a la TeX in the macro body. +% +% That gets used by \mbodybackslash (above). +% +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. +% +% If there are 10 or more arguments, a different technique is used, where the +% hook remains in the body, and when macro is to be expanded the body is +% processed again to replace the arguments. +% +% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the +% argument N value and then \edef the body (nothing else will expand because of +% the catcode regime underwhich the body was input). +% +% If you compile with TeX (not eTeX), and you have macros with 10 or more +% arguments, you need that no macro has more than 256 arguments, otherwise an +% error is produced. +\def\parsemargdef#1;{% + \paramno=0\def\paramlist{}% + \let\hash\relax + \let\xeatspaces\relax + \parsemargdefxxx#1,;,% + % In case that there are 10 or more arguments we parse again the arguments + % list to set new definitions for the \macarg.BLAH macros corresponding to + % each BLAH argument. It was anyhow needed to parse already once this list + % in order to count the arguments, and as macros with at most 9 arguments + % are by far more frequent than macro with 10 or more arguments, defining + % twice the \macarg.BLAH macros does not cost too much processing power. + \ifnum\paramno<10\relax\else + \paramno0\relax + \parsemmanyargdef@@#1,;,% 10 or more arguments + \fi +} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1 + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +\def\parsemmanyargdef@@#1,{% + \if#1;\let\next=\relax + \else + \let\next=\parsemmanyargdef@@ + \edef\tempb{\eatspaces{#1}}% + \expandafter\def\expandafter\tempa + \expandafter{\csname macarg.\tempb\endcsname}% + % Note that we need some extra \noexpand\noexpand, this is because we + % don't want \the to be expanded in the \parsermacbody as it uses an + % \xdef . + \expandafter\edef\tempa + {\noexpand\noexpand\noexpand\the\toks\the\paramno}% + \advance\paramno by 1\relax + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) +% + +\catcode `\@\texiatcatcode +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\catcode `\@=11\relax + +\let\endargs@\relax +\let\nil@\relax +\def\nilm@{\nil@}% +\long\def\nillm@{\nil@}% + +% This macro is expanded during the Texinfo macro expansion, not during its +% definition. It gets all the arguments values and assigns them to macros +% macarg.ARGNAME +% +% #1 is the macro name +% #2 is the list of argument names +% #3 is the list of argument values +\def\getargvals@#1#2#3{% + \def\macargdeflist@{}% + \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. + \def\paramlist{#2,\nil@}% + \def\macroname{#1}% + \begingroup + \macroargctxt + \def\argvaluelist{#3,\nil@}% + \def\@tempa{#3}% + \ifx\@tempa\empty + \setemptyargvalues@ + \else + \getargvals@@ + \fi +} + +% +\def\getargvals@@{% + \ifx\paramlist\nilm@ + % Some sanity check needed here that \argvaluelist is also empty. + \ifx\argvaluelist\nillm@ + \else + \errhelp = \EMsimple + \errmessage{Too many arguments in macro `\macroname'!}% + \fi + \let\next\macargexpandinbody@ + \else + \ifx\argvaluelist\nillm@ + % No more arguments values passed to macro. Set remaining named-arg + % macros to empty. + \let\next\setemptyargvalues@ + \else + % pop current arg name into \@tempb + \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% + \expandafter\@tempa\expandafter{\paramlist}% + % pop current argument value into \@tempc + \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% + \expandafter\@tempa\expandafter{\argvaluelist}% + % Here \@tempb is the current arg name and \@tempc is the current arg value. + % First place the new argument macro definition into \@tempd + \expandafter\macname\expandafter{\@tempc}% + \expandafter\let\csname macarg.\@tempb\endcsname\relax + \expandafter\def\expandafter\@tempe\expandafter{% + \csname macarg.\@tempb\endcsname}% + \edef\@tempd{\long\def\@tempe{\the\macname}}% + \push@\@tempd\macargdeflist@ + \let\next\getargvals@@ + \fi + \fi + \next +} + +\def\push@#1#2{% + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter#2% + \expandafter\expandafter\expandafter{% + \expandafter#1#2}% +} + +% Replace arguments by their values in the macro body, and place the result +% in macro \@tempa +\def\macvalstoargs@{% + % To do this we use the property that token registers that are \the'ed + % within an \edef expand only once. So we are going to place all argument + % values into respective token registers. + % + % First we save the token context, and initialize argument numbering. + \begingroup + \paramno0\relax + % Then, for each argument number #N, we place the corresponding argument + % value into a new token list register \toks#N + \expandafter\putargsintokens@\saveparamlist@,;,% + % Then, we expand the body so that argument are replaced by their + % values. The trick for values not to be expanded themselves is that they + % are within tokens and that tokens expand only once in an \edef . + \edef\@tempc{\csname mac.\macroname .body\endcsname}% + % Now we restore the token stack pointer to free the token list registers + % which we have used, but we make sure that expanded body is saved after + % group. + \expandafter + \endgroup + \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% + } + +\def\macargexpandinbody@{% + %% Define the named-macro outside of this group and then close this group. + \expandafter + \endgroup + \macargdeflist@ + % First the replace in body the macro arguments by their values, the result + % is in \@tempa . + \macvalstoargs@ + % Then we point at the \norecurse or \gobble (for recursive) macro value + % with \@tempb . + \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname + % Depending on whether it is recursive or not, we need some tailing + % \egroup . + \ifx\@tempb\gobble + \let\@tempc\relax + \else + \let\@tempc\egroup + \fi + % And now we do the real job: + \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% + \@tempd +} + +\def\putargsintokens@#1,{% + \if#1;\let\next\relax + \else + \let\next\putargsintokens@ + % First we allocate the new token list register, and give it a temporary + % alias \@tempb . + \toksdef\@tempb\the\paramno + % Then we place the argument value into that token list register. + \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname + \expandafter\@tempb\expandafter{\@tempa}% + \advance\paramno by 1\relax + \fi + \next +} + +% Save the token stack pointer into macro #1 +\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} +% Restore the token stack pointer from number in macro #1 +\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} +% newtoks that can be used non \outer . +\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} + +% Tailing missing arguments are set to empty +\def\setemptyargvalues@{% + \ifx\paramlist\nilm@ + \let\next\macargexpandinbody@ + \else + \expandafter\setemptyargvaluesparser@\paramlist\endargs@ + \let\next\setemptyargvalues@ + \fi + \next +} + +\def\setemptyargvaluesparser@#1,#2\endargs@{% + \expandafter\def\expandafter\@tempa\expandafter{% + \expandafter\def\csname macarg.#1\endcsname{}}% + \push@\@tempa\macargdeflist@ + \def\paramlist{#2}% +} + +% #1 is the element target macro +% #2 is the list macro +% #3,#4\endargs@ is the list value +\def\pop@#1#2#3,#4\endargs@{% + \def#1{#3}% + \def#2{#4}% +} +\long\def\longpop@#1#2#3,#4\endargs@{% + \long\def#1{#3}% + \long\def#2{#4}% +} + +% This defines a Texinfo @macro. There are eight cases: recursive and +% nonrecursive macros of zero, one, up to nine, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +% +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else + \ifnum\paramno<10\relax % at most 9 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \else % 10 or more + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\getargvals@{\the\macname}{\argl}% + }% + \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp + \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble + \fi + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % at most 9 + \ifnum\paramno<10\relax + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % 10 or more: + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\getargvals@{\the\macname}{\argl}% + }% + \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp + \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse + \fi + \fi + \fi} + +\catcode `\@\texiatcatcode\relax + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg). +% +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \macnamexxx} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Make them active and then expand them all to nothing. +% +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{% + \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout + }% + \fi +} + +% @xrefautosectiontitle on|off says whether @section(ing) names are used +% automatically in xrefs, if the third arg is not explicitly specified. +% This was provided as a "secret" @set xref-automatic-section-title +% variable, now it's official. +% +\parseargdef\xrefautomaticsectiontitle{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETxref-automatic-section-title\endcsname + = \empty + \else\ifx\temp\offword + \expandafter\let\csname SETxref-automatic-section-title\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', + must be on|off}% + \fi\fi +} + +% +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +% +\newbox\toprefbox +\newbox\printedrefnamebox +\newbox\infofilenamebox +\newbox\printedmanualbox +% +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + % + % Get args without leading/trailing spaces. + \def\printedrefname{\ignorespaces #3}% + \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% + % + \def\infofilename{\ignorespaces #4}% + \setbox\infofilenamebox = \hbox{\infofilename\unskip}% + % + \def\printedmanual{\ignorespaces #5}% + \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% + % + % If the printed reference name (arg #3) was not explicitly given in + % the @xref, figure out what we want to use. + \ifdim \wd\printedrefnamebox = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax + % Not auto section-title: use node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Auto section-title: use chapter/section title inside + % the square brackets if we have it. + \ifdim \wd\printedmanualbox > 0pt + % It is in another manual, so we don't have it; use node name. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We (should) know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + {\indexnofonts + \turnoffactive + \makevalueexpandable + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. This ignores all spaces in + % #4, including (wrongly) those in the middle of the filename. + \getfilename{#4}% + % + % This (wrongly) does not take account of leading or trailing + % spaces in #1, which should be ignored. + \edef\pdfxrefdest{#1}% + \ifx\pdfxrefdest\empty + \def\pdfxrefdest{Top}% no empty targets + \else + \txiescapepdf\pdfxrefdest % escape PDF special chars + \fi + % + \leavevmode + \startlink attr{/Border [0 0 0]}% + \ifnum\filenamelength>0 + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \setcolor{\linkcolor}% + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd\printedrefnamebox = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % If the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd\printedmanualbox > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox to print the node names, TeX does not insert + % empty discretionaries after hyphens, which means that it will not + % find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, + % this is a loss. Therefore, we give the text of the node name + % again, so it is as if TeX is seeing it for the first time. + % + \ifdim \wd\printedmanualbox > 0pt + % Cross-manual reference with a printed manual name. + % + \crossmanualxref{\cite{\printedmanual\unskip}}% + % + \else\ifdim \wd\infofilenamebox > 0pt + % Cross-manual reference with only an info filename (arg 4), no + % printed manual name (arg 5). This is essentially the same as + % the case above; we output the filename, since we have nothing else. + % + \crossmanualxref{\code{\infofilename\unskip}}% + % + \else + % Reference within this manual. + % + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via the macro below so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi\fi + \fi + \endlink +\endgroup} + +% Output a cross-manual xref to #1. Used just above (twice). +% +% Only include the text "Section ``foo'' in" if the foo is neither +% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply +% "see The Foo Manual", the idea being to refer to the whole manual. +% +% But, this being TeX, we can't easily compare our node name against the +% string "Top" while ignoring the possible spaces before and after in +% the input. By adding the arbitrary 7sp below, we make it much less +% likely that a real node name would have the same width as "Top" (e.g., +% in a monospaced font). Hopefully it will never happen in practice. +% +% For the same basic reason, we retypeset the "Top" at every +% reference, since the current font is indeterminate. +% +\def\crossmanualxref#1{% + \setbox\toprefbox = \hbox{Top\kern7sp}% + \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% + \ifdim \wd2 > 7sp % nonempty? + \ifdim \wd2 = \wd\toprefbox \else % same as Top? + \putwordSection{} ``\printedrefname'' \putwordin{}\space + \fi + \fi + #1% +} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + {\toks0 = {#1}% avoid expansion of possibly-complex value + \message{\linenumber Undefined cross reference `\the\toks0'.}}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + {% The node name might contain 8-bit characters, which in our current + % implementation are changed to commands like @'e. Don't let these + % mess up the control sequence name. + \indexnofonts + \turnoffactive + \xdef\safexrefname{#1}% + }% + % + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for Info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\pagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + % + % Invoke rest of plain TeX footnote routine. + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarly, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\thisisundefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \else \ifx\centersub\centerV + % for @center @image, we need a vbox so we can have our vertical space + \imagevmodetrue + \vbox\bgroup % vbox has better behavior than vtop herev + \fi\fi + % + \ifimagevmode + \nobreak\medskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \fi + % + % Leave vertical mode so that indentation from an enclosing + % environment such as @quotation is respected. + % However, if we're at the top level, we don't want the + % normal paragraph indentation. + % On the other hand, if we are in the case of @center @image, we don't + % want to start a paragraph, which will create a hsize-width box and + % eradicate the centering. + \ifx\centersub\centerV\else \noindent \fi + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode + \medskip % space after a standalone image + \fi + \ifx\centersub\centerV \egroup \fi +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start floating, we have to issue warning + % whenever an insert appears inside a float which could possibly + % float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% For single-language documents, @documentlanguage is usually given very +% early, just after @documentencoding. Single argument is the language +% (de) or locale (de_DE) abbreviation. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{\begingroup + \let_=\normalunderscore % normal _ character for filenames + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore{#1_\finish}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 + \endgroup % end raw TeX +\endgroup} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 +} +}% end of special _ catcode +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? Putting it in the current +directory should work if nowhere else does.} + +% This macro is called from txi-??.tex files; the first argument is the +% \language name to set (without the "\lang@" prefix), the second and +% third args are \{left,right}hyphenmin. +% +% The language names to pass are determined when the format is built. +% See the etex.log file created at that time, e.g., +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. +% +% With TeX Live 2008, etex now includes hyphenation patterns for all +% available languages. This means we can support hyphenation in +% Texinfo, at least to some extent. (This still doesn't solve the +% accented characters problem.) +% +\catcode`@=11 +\def\txisetlanguage#1#2#3{% + % do not set the language if the name is undefined in the current TeX. + \expandafter\ifx\csname lang@#1\endcsname \relax + \message{no patterns for #1}% + \else + \global\language = \csname lang@#1\endcsname + \fi + % but there is no harm in adjusting the hyphenmin values regardless. + \global\lefthyphenmin = #2\relax + \global\righthyphenmin = #3\relax +} + +% Helpers for encodings. +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\parseargdef\documentencoding{% + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \setnonasciicharscatcode\active + \utfeightchardefs + % + \else + \message{Unknown document encoding #1, ignoring.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdef^^a0{\tie} + \gdef^^a1{\exclamdown} + \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a3{{\pounds}} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\missingcharmsg{YEN SIGN}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} + \gdef^^aa{\ordf} + \gdef^^ab{\guillemetleft} + \gdef^^ac{$\lnot$} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} + \gdef^^af{\={}} + % + \gdef^^b0{\textdegree} + \gdef^^b1{$\pm$} + \gdef^^b2{$^2$} + \gdef^^b3{$^3$} + \gdef^^b4{\'{}} + \gdef^^b5{$\mu$} + \gdef^^b6{\P} + % + \gdef^^b7{$^.$} + \gdef^^b8{\cedilla\ } + \gdef^^b9{$^1$} + \gdef^^ba{\ordm} + % + \gdef^^bb{\guillemetright} + \gdef^^bc{$1\over4$} + \gdef^^bd{$1\over2$} + \gdef^^be{$3\over4$} + \gdef^^bf{\questiondown} + % + \gdef^^c0{\`A} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\~A} + \gdef^^c4{\"A} + \gdef^^c5{\ringaccent A} + \gdef^^c6{\AE} + \gdef^^c7{\cedilla C} + \gdef^^c8{\`E} + \gdef^^c9{\'E} + \gdef^^ca{\^E} + \gdef^^cb{\"E} + \gdef^^cc{\`I} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\"I} + % + \gdef^^d0{\DH} + \gdef^^d1{\~N} + \gdef^^d2{\`O} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\~O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\O} + \gdef^^d9{\`U} + \gdef^^da{\'U} + \gdef^^db{\^U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\TH} + \gdef^^df{\ss} + % + \gdef^^e0{\`a} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\~a} + \gdef^^e4{\"a} + \gdef^^e5{\ringaccent a} + \gdef^^e6{\ae} + \gdef^^e7{\cedilla c} + \gdef^^e8{\`e} + \gdef^^e9{\'e} + \gdef^^ea{\^e} + \gdef^^eb{\"e} + \gdef^^ec{\`{\dotless i}} + \gdef^^ed{\'{\dotless i}} + \gdef^^ee{\^{\dotless i}} + \gdef^^ef{\"{\dotless i}} + % + \gdef^^f0{\dh} + \gdef^^f1{\~n} + \gdef^^f2{\`o} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\~o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\o} + \gdef^^f9{\`u} + \gdef^^fa{\'u} + \gdef^^fb{\^u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\th} + \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdef^^a4{\euro} + \gdef^^a6{\v S} + \gdef^^a8{\v s} + \gdef^^b4{\v Z} + \gdef^^b8{\v z} + \gdef^^bc{\OE} + \gdef^^bd{\oe} + \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdef^^a0{\tie} + \gdef^^a1{\ogonek{A}} + \gdef^^a2{\u{}} + \gdef^^a3{\L} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\v L} + \gdef^^a6{\'S} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\v S} + \gdef^^aa{\cedilla S} + \gdef^^ab{\v T} + \gdef^^ac{\'Z} + \gdef^^ad{\-} + \gdef^^ae{\v Z} + \gdef^^af{\dotaccent Z} + % + \gdef^^b0{\textdegree} + \gdef^^b1{\ogonek{a}} + \gdef^^b2{\ogonek{ }} + \gdef^^b3{\l} + \gdef^^b4{\'{}} + \gdef^^b5{\v l} + \gdef^^b6{\'s} + \gdef^^b7{\v{}} + \gdef^^b8{\cedilla\ } + \gdef^^b9{\v s} + \gdef^^ba{\cedilla s} + \gdef^^bb{\v t} + \gdef^^bc{\'z} + \gdef^^bd{\H{}} + \gdef^^be{\v z} + \gdef^^bf{\dotaccent z} + % + \gdef^^c0{\'R} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\u A} + \gdef^^c4{\"A} + \gdef^^c5{\'L} + \gdef^^c6{\'C} + \gdef^^c7{\cedilla C} + \gdef^^c8{\v C} + \gdef^^c9{\'E} + \gdef^^ca{\ogonek{E}} + \gdef^^cb{\"E} + \gdef^^cc{\v E} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\v D} + % + \gdef^^d0{\DH} + \gdef^^d1{\'N} + \gdef^^d2{\v N} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\H O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\v R} + \gdef^^d9{\ringaccent U} + \gdef^^da{\'U} + \gdef^^db{\H U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\cedilla T} + \gdef^^df{\ss} + % + \gdef^^e0{\'r} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\u a} + \gdef^^e4{\"a} + \gdef^^e5{\'l} + \gdef^^e6{\'c} + \gdef^^e7{\cedilla c} + \gdef^^e8{\v c} + \gdef^^e9{\'e} + \gdef^^ea{\ogonek{e}} + \gdef^^eb{\"e} + \gdef^^ec{\v e} + \gdef^^ed{\'{\dotless{i}}} + \gdef^^ee{\^{\dotless{i}}} + \gdef^^ef{\v d} + % + \gdef^^f0{\dh} + \gdef^^f1{\'n} + \gdef^^f2{\v n} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\H o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\v r} + \gdef^^f9{\ringaccent u} + \gdef^^fa{\'u} + \gdef^^fb{\H u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\cedilla t} + \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +\begingroup + \catcode`\~13 + \catcode`\"12 + + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiTwoOctets\string~}} + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiThreeOctets\string~}} + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiFourOctets\string~}} + \UTFviiiLoop +\endgroup + +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + + \gdef\DeclareUnicodeCharacter#1#2{% + \countUTFz = "#1\relax + %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% + \begingroup + \parseXMLCharref + \def\UTFviiiTwoOctets##1##2{% + \csname u8:##1\string ##2\endcsname}% + \def\UTFviiiThreeOctets##1##2##3{% + \csname u8:##1\string ##2\string ##3\endcsname}% + \def\UTFviiiFourOctets##1##2##3##4{% + \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \gdef\UTFviiiTmp{#2}% + \endgroup} + + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctets.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% + \fi\fi\fi + } + + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz + \multiply\countUTFz by 64 + \advance\countUTFx by -\countUTFz + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% + \DeclareUnicodeCharacter{00A0}{\tie} + \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A8}{\"{ }} + \DeclareUnicodeCharacter{00A9}{\copyright} + \DeclareUnicodeCharacter{00AA}{\ordf} + \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AD}{\-} + \DeclareUnicodeCharacter{00AE}{\registeredsymbol} + \DeclareUnicodeCharacter{00AF}{\={ }} + + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00BA}{\ordm} + \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BF}{\questiondown} + + \DeclareUnicodeCharacter{00C0}{\`A} + \DeclareUnicodeCharacter{00C1}{\'A} + \DeclareUnicodeCharacter{00C2}{\^A} + \DeclareUnicodeCharacter{00C3}{\~A} + \DeclareUnicodeCharacter{00C4}{\"A} + \DeclareUnicodeCharacter{00C5}{\AA} + \DeclareUnicodeCharacter{00C6}{\AE} + \DeclareUnicodeCharacter{00C7}{\cedilla{C}} + \DeclareUnicodeCharacter{00C8}{\`E} + \DeclareUnicodeCharacter{00C9}{\'E} + \DeclareUnicodeCharacter{00CA}{\^E} + \DeclareUnicodeCharacter{00CB}{\"E} + \DeclareUnicodeCharacter{00CC}{\`I} + \DeclareUnicodeCharacter{00CD}{\'I} + \DeclareUnicodeCharacter{00CE}{\^I} + \DeclareUnicodeCharacter{00CF}{\"I} + + \DeclareUnicodeCharacter{00D0}{\DH} + \DeclareUnicodeCharacter{00D1}{\~N} + \DeclareUnicodeCharacter{00D2}{\`O} + \DeclareUnicodeCharacter{00D3}{\'O} + \DeclareUnicodeCharacter{00D4}{\^O} + \DeclareUnicodeCharacter{00D5}{\~O} + \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D8}{\O} + \DeclareUnicodeCharacter{00D9}{\`U} + \DeclareUnicodeCharacter{00DA}{\'U} + \DeclareUnicodeCharacter{00DB}{\^U} + \DeclareUnicodeCharacter{00DC}{\"U} + \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DE}{\TH} + \DeclareUnicodeCharacter{00DF}{\ss} + + \DeclareUnicodeCharacter{00E0}{\`a} + \DeclareUnicodeCharacter{00E1}{\'a} + \DeclareUnicodeCharacter{00E2}{\^a} + \DeclareUnicodeCharacter{00E3}{\~a} + \DeclareUnicodeCharacter{00E4}{\"a} + \DeclareUnicodeCharacter{00E5}{\aa} + \DeclareUnicodeCharacter{00E6}{\ae} + \DeclareUnicodeCharacter{00E7}{\cedilla{c}} + \DeclareUnicodeCharacter{00E8}{\`e} + \DeclareUnicodeCharacter{00E9}{\'e} + \DeclareUnicodeCharacter{00EA}{\^e} + \DeclareUnicodeCharacter{00EB}{\"e} + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + + \DeclareUnicodeCharacter{00F0}{\dh} + \DeclareUnicodeCharacter{00F1}{\~n} + \DeclareUnicodeCharacter{00F2}{\`o} + \DeclareUnicodeCharacter{00F3}{\'o} + \DeclareUnicodeCharacter{00F4}{\^o} + \DeclareUnicodeCharacter{00F5}{\~o} + \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F8}{\o} + \DeclareUnicodeCharacter{00F9}{\`u} + \DeclareUnicodeCharacter{00FA}{\'u} + \DeclareUnicodeCharacter{00FB}{\^u} + \DeclareUnicodeCharacter{00FC}{\"u} + \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FE}{\th} + \DeclareUnicodeCharacter{00FF}{\"y} + + \DeclareUnicodeCharacter{0100}{\=A} + \DeclareUnicodeCharacter{0101}{\=a} + \DeclareUnicodeCharacter{0102}{\u{A}} + \DeclareUnicodeCharacter{0103}{\u{a}} + \DeclareUnicodeCharacter{0104}{\ogonek{A}} + \DeclareUnicodeCharacter{0105}{\ogonek{a}} + \DeclareUnicodeCharacter{0106}{\'C} + \DeclareUnicodeCharacter{0107}{\'c} + \DeclareUnicodeCharacter{0108}{\^C} + \DeclareUnicodeCharacter{0109}{\^c} + \DeclareUnicodeCharacter{0118}{\ogonek{E}} + \DeclareUnicodeCharacter{0119}{\ogonek{e}} + \DeclareUnicodeCharacter{010A}{\dotaccent{C}} + \DeclareUnicodeCharacter{010B}{\dotaccent{c}} + \DeclareUnicodeCharacter{010C}{\v{C}} + \DeclareUnicodeCharacter{010D}{\v{c}} + \DeclareUnicodeCharacter{010E}{\v{D}} + + \DeclareUnicodeCharacter{0112}{\=E} + \DeclareUnicodeCharacter{0113}{\=e} + \DeclareUnicodeCharacter{0114}{\u{E}} + \DeclareUnicodeCharacter{0115}{\u{e}} + \DeclareUnicodeCharacter{0116}{\dotaccent{E}} + \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{011A}{\v{E}} + \DeclareUnicodeCharacter{011B}{\v{e}} + \DeclareUnicodeCharacter{011C}{\^G} + \DeclareUnicodeCharacter{011D}{\^g} + \DeclareUnicodeCharacter{011E}{\u{G}} + \DeclareUnicodeCharacter{011F}{\u{g}} + + \DeclareUnicodeCharacter{0120}{\dotaccent{G}} + \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0124}{\^H} + \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0128}{\~I} + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} + \DeclareUnicodeCharacter{012A}{\=I} + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} + \DeclareUnicodeCharacter{012C}{\u{I}} + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + + \DeclareUnicodeCharacter{0130}{\dotaccent{I}} + \DeclareUnicodeCharacter{0131}{\dotless{i}} + \DeclareUnicodeCharacter{0132}{IJ} + \DeclareUnicodeCharacter{0133}{ij} + \DeclareUnicodeCharacter{0134}{\^J} + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0139}{\'L} + \DeclareUnicodeCharacter{013A}{\'l} + + \DeclareUnicodeCharacter{0141}{\L} + \DeclareUnicodeCharacter{0142}{\l} + \DeclareUnicodeCharacter{0143}{\'N} + \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0147}{\v{N}} + \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{014C}{\=O} + \DeclareUnicodeCharacter{014D}{\=o} + \DeclareUnicodeCharacter{014E}{\u{O}} + \DeclareUnicodeCharacter{014F}{\u{o}} + + \DeclareUnicodeCharacter{0150}{\H{O}} + \DeclareUnicodeCharacter{0151}{\H{o}} + \DeclareUnicodeCharacter{0152}{\OE} + \DeclareUnicodeCharacter{0153}{\oe} + \DeclareUnicodeCharacter{0154}{\'R} + \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0158}{\v{R}} + \DeclareUnicodeCharacter{0159}{\v{r}} + \DeclareUnicodeCharacter{015A}{\'S} + \DeclareUnicodeCharacter{015B}{\'s} + \DeclareUnicodeCharacter{015C}{\^S} + \DeclareUnicodeCharacter{015D}{\^s} + \DeclareUnicodeCharacter{015E}{\cedilla{S}} + \DeclareUnicodeCharacter{015F}{\cedilla{s}} + + \DeclareUnicodeCharacter{0160}{\v{S}} + \DeclareUnicodeCharacter{0161}{\v{s}} + \DeclareUnicodeCharacter{0162}{\cedilla{t}} + \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0164}{\v{T}} + + \DeclareUnicodeCharacter{0168}{\~U} + \DeclareUnicodeCharacter{0169}{\~u} + \DeclareUnicodeCharacter{016A}{\=U} + \DeclareUnicodeCharacter{016B}{\=u} + \DeclareUnicodeCharacter{016C}{\u{U}} + \DeclareUnicodeCharacter{016D}{\u{u}} + \DeclareUnicodeCharacter{016E}{\ringaccent{U}} + \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + + \DeclareUnicodeCharacter{0170}{\H{U}} + \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0174}{\^W} + \DeclareUnicodeCharacter{0175}{\^w} + \DeclareUnicodeCharacter{0176}{\^Y} + \DeclareUnicodeCharacter{0177}{\^y} + \DeclareUnicodeCharacter{0178}{\"Y} + \DeclareUnicodeCharacter{0179}{\'Z} + \DeclareUnicodeCharacter{017A}{\'z} + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} + \DeclareUnicodeCharacter{017C}{\dotaccent{z}} + \DeclareUnicodeCharacter{017D}{\v{Z}} + \DeclareUnicodeCharacter{017E}{\v{z}} + + \DeclareUnicodeCharacter{01C4}{D\v{Z}} + \DeclareUnicodeCharacter{01C5}{D\v{z}} + \DeclareUnicodeCharacter{01C6}{d\v{z}} + \DeclareUnicodeCharacter{01C7}{LJ} + \DeclareUnicodeCharacter{01C8}{Lj} + \DeclareUnicodeCharacter{01C9}{lj} + \DeclareUnicodeCharacter{01CA}{NJ} + \DeclareUnicodeCharacter{01CB}{Nj} + \DeclareUnicodeCharacter{01CC}{nj} + \DeclareUnicodeCharacter{01CD}{\v{A}} + \DeclareUnicodeCharacter{01CE}{\v{a}} + \DeclareUnicodeCharacter{01CF}{\v{I}} + + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} + \DeclareUnicodeCharacter{01D1}{\v{O}} + \DeclareUnicodeCharacter{01D2}{\v{o}} + \DeclareUnicodeCharacter{01D3}{\v{U}} + \DeclareUnicodeCharacter{01D4}{\v{u}} + + \DeclareUnicodeCharacter{01E2}{\={\AE}} + \DeclareUnicodeCharacter{01E3}{\={\ae}} + \DeclareUnicodeCharacter{01E6}{\v{G}} + \DeclareUnicodeCharacter{01E7}{\v{g}} + \DeclareUnicodeCharacter{01E8}{\v{K}} + \DeclareUnicodeCharacter{01E9}{\v{k}} + + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} + \DeclareUnicodeCharacter{01F1}{DZ} + \DeclareUnicodeCharacter{01F2}{Dz} + \DeclareUnicodeCharacter{01F3}{dz} + \DeclareUnicodeCharacter{01F4}{\'G} + \DeclareUnicodeCharacter{01F5}{\'g} + \DeclareUnicodeCharacter{01F8}{\`N} + \DeclareUnicodeCharacter{01F9}{\`n} + \DeclareUnicodeCharacter{01FC}{\'{\AE}} + \DeclareUnicodeCharacter{01FD}{\'{\ae}} + \DeclareUnicodeCharacter{01FE}{\'{\O}} + \DeclareUnicodeCharacter{01FF}{\'{\o}} + + \DeclareUnicodeCharacter{021E}{\v{H}} + \DeclareUnicodeCharacter{021F}{\v{h}} + + \DeclareUnicodeCharacter{0226}{\dotaccent{A}} + \DeclareUnicodeCharacter{0227}{\dotaccent{a}} + \DeclareUnicodeCharacter{0228}{\cedilla{E}} + \DeclareUnicodeCharacter{0229}{\cedilla{e}} + \DeclareUnicodeCharacter{022E}{\dotaccent{O}} + \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + + \DeclareUnicodeCharacter{0232}{\=Y} + \DeclareUnicodeCharacter{0233}{\=y} + \DeclareUnicodeCharacter{0237}{\dotless{j}} + + \DeclareUnicodeCharacter{02DB}{\ogonek{ }} + + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + + \DeclareUnicodeCharacter{1E20}{\=G} + \DeclareUnicodeCharacter{1E21}{\=g} + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} + \DeclareUnicodeCharacter{1E26}{\"H} + \DeclareUnicodeCharacter{1E27}{\"h} + + \DeclareUnicodeCharacter{1E30}{\'K} + \DeclareUnicodeCharacter{1E31}{\'k} + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} + \DeclareUnicodeCharacter{1E3E}{\'M} + \DeclareUnicodeCharacter{1E3F}{\'m} + + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + + \DeclareUnicodeCharacter{1E54}{\'P} + \DeclareUnicodeCharacter{1E55}{\'p} + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + + \DeclareUnicodeCharacter{1E7C}{\~V} + \DeclareUnicodeCharacter{1E7D}{\~v} + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + + \DeclareUnicodeCharacter{1E80}{\`W} + \DeclareUnicodeCharacter{1E81}{\`w} + \DeclareUnicodeCharacter{1E82}{\'W} + \DeclareUnicodeCharacter{1E83}{\'w} + \DeclareUnicodeCharacter{1E84}{\"W} + \DeclareUnicodeCharacter{1E85}{\"w} + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} + \DeclareUnicodeCharacter{1E8C}{\"X} + \DeclareUnicodeCharacter{1E8D}{\"x} + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + + \DeclareUnicodeCharacter{1E90}{\^Z} + \DeclareUnicodeCharacter{1E91}{\^z} + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} + \DeclareUnicodeCharacter{1E97}{\"t} + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} + \DeclareUnicodeCharacter{1EBC}{\~E} + \DeclareUnicodeCharacter{1EBD}{\~e} + + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + + \DeclareUnicodeCharacter{1EF2}{\`Y} + \DeclareUnicodeCharacter{1EF3}{\`y} + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + + \DeclareUnicodeCharacter{1EF8}{\~Y} + \DeclareUnicodeCharacter{1EF9}{\~y} + + \DeclareUnicodeCharacter{2013}{--} + \DeclareUnicodeCharacter{2014}{---} + \DeclareUnicodeCharacter{2018}{\quoteleft} + \DeclareUnicodeCharacter{2019}{\quoteright} + \DeclareUnicodeCharacter{201A}{\quotesinglbase} + \DeclareUnicodeCharacter{201C}{\quotedblleft} + \DeclareUnicodeCharacter{201D}{\quotedblright} + \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2022}{\bullet} + \DeclareUnicodeCharacter{2026}{\dots} + \DeclareUnicodeCharacter{2039}{\guilsinglleft} + \DeclareUnicodeCharacter{203A}{\guilsinglright} + \DeclareUnicodeCharacter{20AC}{\euro} + + \DeclareUnicodeCharacter{2192}{\expansion} + \DeclareUnicodeCharacter{21D2}{\result} + + \DeclareUnicodeCharacter{2212}{\minus} + \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be very finicky about underfull hboxes, either. +\hbadness = 6666 + +% Following George Bush, get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +\def^^L{\par} % remove \outer, so ^L can appear in an @comment + +% DEL is a comment character, in case @c does not suffice. +\catcode`\^^? = 14 + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other \def\normaldoublequote{"} +\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix +\catcode`\+=\other \def\normalplus{+} +\catcode`\<=\other \def\normalless{<} +\catcode`\>=\other \def\normalgreater{>} +\catcode`\^=\other \def\normalcaret{^} +\catcode`\_=\other \def\normalunderscore{_} +\catcode`\|=\other \def\normalverticalbar{|} +\catcode`\~=\other \def\normaltilde{~} + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active % @ for escape char from now on. + +% The story here is that in math mode, the \char of \backslashcurfont +% ends up printing the roman \ from the math symbol font (because \char +% in math mode uses the \mathcode, and plain.tex sets +% \mathcode`\\="026E). It seems better for @backslashchar{} to always +% print a typewriter backslash, hence we use an explicit \mathchar, +% which is the decimal equivalent of "715c (class 7, e.g., use \fam; +% ignored family value; char position "5C). We can't use " for the +% usual hex value because it has already been made active. +@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} +@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. + +% On startup, @fixbackslash assigns: +% @let \ = @normalbackslash +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. We switch back and forth between these. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. Also revert - to its normal character, in +% case the active - from code has slipped in. +% +{@catcode`- = @active + @gdef@normalturnoffactive{% + @let-=@normaldash + @let"=@normaldoublequote + @let$=@normaldollar %$ font-lock fix + @let+=@normalplus + @let<=@normalless + @let>=@normalgreater + @let\=@normalbackslash + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let~=@normaltilde + @markupsetuplqdefault + @markupsetuprqdefault + @unsepspaces + } +} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\' in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also turn back on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These (along with & and #) are made active for url-breaking, so need +% active definitions as the normal characters. +@def@normaldot{.} +@def@normalquest{?} +@def@normalslash{/} + +% These look ok in all fonts, so just make them not special. +% @hashchar{} gets its own user-level command, because of #line. +@catcode`@& = @other @def@normalamp{&} +@catcode`@# = @other @def@normalhash{#} +@catcode`@% = @other @def@normalpercent{%} + +@let @hashchar = @normalhash + +@c Finally, make ` and ' active, so that txicodequoteundirected and +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we +@c don't make ` and ' active, @code will not get them as active chars. +@c Do this last of all since we use ` in the previous @catcode assignments. +@catcode`@'=@active +@catcode`@`=@active +@markupsetuplqdefault +@markupsetuprqdefault + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/conf/Makefile.common b/conf/Makefile.common new file mode 100644 index 000000000..11296b550 --- /dev/null +++ b/conf/Makefile.common @@ -0,0 +1,136 @@ +# -*- makefile -*- + +CFLAGS_PLATFORM= + +export LC_COLLATE := C +unexport LC_ALL + +# Platform specific options +if COND_sparc64_ieee1275 + LDFLAGS_PLATFORM = -Wl,-melf64_sparc +endif +if COND_arm +if !COND_emu + LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache +endif +endif +if COND_arm64 + CFLAGS_PLATFORM += -mcmodel=large +endif +if COND_powerpc_ieee1275 + CFLAGS_PLATFORM += -mcpu=powerpc +endif + +# Other options + +CPPFLAGS_DEFAULT = -DGRUB_FILE=\"$(subst $(srcdir)/,,$<)\" +CPPFLAGS_DEFAULT += -I$(builddir) +CPPFLAGS_DEFAULT += -I$(srcdir) +CPPFLAGS_DEFAULT += -I$(top_builddir) +CPPFLAGS_DEFAULT += -I$(top_srcdir) +CPPFLAGS_DEFAULT += -I$(top_srcdir)/include +CPPFLAGS_DEFAULT += -I$(top_builddir)/include +CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/ +CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1 +BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT) + +CFLAGS_KERNEL = $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) +CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 +CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx + +CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d +CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_IMAGE = $(CFLAGS_PLATFORM) -fno-builtin +LDFLAGS_IMAGE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S +CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) + +CFLAGS_PROGRAM = +LDFLAGS_PROGRAM = +CPPFLAGS_PROGRAM = +CCASFLAGS_PROGRAM = + +CFLAGS_LIBRARY = +CPPFLAGS_LIBRARY = +CCASFLAGS_LIBRARY = + +# Other variables + +grubconfdir = $(sysconfdir)/grub.d +platformdir = $(pkglibdir)/$(target_cpu)-$(platform) +starfielddir = $(pkgdatadir)/themes/starfield + +CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion +CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/gnulib -I$(top_srcdir)/grub-core/gnulib + +CFLAGS_POSIX = -fno-builtin +CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap + +CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -Wno-redundant-decls -Wno-undef $(CFLAGS_POSIX) +CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap $(CPPFLAGS_POSIX) -D_GCRYPT_IN_LIBGCRYPT=1 -I$(top_srcdir)/include/grub/gcrypt + +CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime + +# List file macros for recognizing /interesting/ modules +CPPFLAGS_FS_LIST = -Dgrub_fs_register=FS_LIST_MARKER +CPPFLAGS_VIDEO_LIST= -Dgrub_video_register=VIDEO_LIST_MARKER +CPPFLAGS_PARTMAP_LIST = -Dgrub_partition_map_register=PARTMAP_LIST_MARKER +CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER +CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_TERMINAL_LIST += '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \ + $(CPPFLAGS_PARTTOOL_LIST) $(CPPFLAGS_PARTMAP_LIST) \ + $(CPPFLAGS_TERMINAL_LIST) $(CPPFLAGS_COMMAND_LIST) + +# Define these variables to calm down automake + +IMG_FILES = +MOD_FILES = +MODULE_FILES = +MARKER_FILES = +KERNEL_HEADER_FILES = + +man_MANS = +noinst_DATA = +pkgdata_DATA = +bin_SCRIPTS = +sbin_SCRIPTS = +bin_PROGRAMS = +platform_DATA = +sbin_PROGRAMS = +check_SCRIPTS = +dist_grubconf_DATA = +check_PROGRAMS = +noinst_SCRIPTS = +noinst_PROGRAMS = +grubconf_SCRIPTS = +noinst_LIBRARIES = +dist_noinst_DATA = +platform_SCRIPTS = +platform_PROGRAMS = + +TESTS = +EXTRA_DIST = +CLEANFILES = +BUILT_SOURCES = + +# Rules for Automake input + +.PRECIOUS: $(top_srcdir)/Makefile.util.am +$(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def + python $^ > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am +$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def + if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./autogen.sh manually." >&2; exit 1; fi + python $^ > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist new file mode 100644 index 000000000..b16bd9253 --- /dev/null +++ b/conf/Makefile.extra-dist @@ -0,0 +1,140 @@ +EXTRA_DIST += autogen.sh +EXTRA_DIST += geninit.sh + +EXTRA_DIST += gentpl.py +EXTRA_DIST += Makefile.util.def +EXTRA_DIST += Makefile.utilgcry.def + +EXTRA_DIST += asm-tests +EXTRA_DIST += unicode + +EXTRA_DIST += util/import_gcry.py +EXTRA_DIST += util/import_unicode.py + +EXTRA_DIST += docs/man +EXTRA_DIST += docs/autoiso.cfg +EXTRA_DIST += docs/grub.cfg +EXTRA_DIST += docs/osdetect.cfg + +EXTRA_DIST += conf/i386-cygwin-img-ld.sc + +EXTRA_DIST += grub-core/Makefile.core.def +EXTRA_DIST += grub-core/Makefile.gcry.def + +EXTRA_DIST += grub-core/genmoddep.awk +EXTRA_DIST += grub-core/genmod.sh.in +EXTRA_DIST += grub-core/gensyminfo.sh.in +EXTRA_DIST += grub-core/gensymlist.sh +EXTRA_DIST += grub-core/genemuinit.sh +EXTRA_DIST += grub-core/genemuinitheader.sh + +EXTRA_DIST += grub-core/gnulib-fix-null-deref.diff +EXTRA_DIST += grub-core/gnulib-fix-width.diff +EXTRA_DIST += grub-core/gnulib-no-abort.diff +EXTRA_DIST += grub-core/gnulib-no-gets.diff + +EXTRA_DIST += grub-core/lib/libgcrypt +EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic +EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h') +EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h') +EXTRA_DIST += grub-core/efiemu/runtime/config.h + +EXTRA_DIST += grub-core/lib/LzmaDec.c + +EXTRA_DIST += grub-core/fs/cpio_common.c + +EXTRA_DIST += BUGS +EXTRA_DIST += util/i386/efi/grub-dumpdevtree +EXTRA_DIST += util/spkmodem-recv.c +EXTRA_DIST += util/import_gcrypth.sed +EXTRA_DIST += util/bin2h.c +EXTRA_DIST += util/grub-gen-asciih.c +EXTRA_DIST += util/grub-gen-widthspec.c +EXTRA_DIST += util/grub-module-verifier.c +EXTRA_DIST += util/grub-module-verifier32.c +EXTRA_DIST += util/grub-module-verifier64.c +EXTRA_DIST += util/grub-module-verifierXX.c +EXTRA_DIST += util/grub-pe2elf.c + + +EXTRA_DIST += m4/gnulib-cache.m4 +EXTRA_DIST += m4/glibc2.m4 +EXTRA_DIST += m4/gnulib-tool.m4 +EXTRA_DIST += m4/intdiv0.m4 +EXTRA_DIST += m4/intl.m4 +EXTRA_DIST += m4/intldir.m4 +EXTRA_DIST += m4/intmax.m4 +EXTRA_DIST += m4/inttypes-pri.m4 +EXTRA_DIST += m4/lcmessage.m4 +EXTRA_DIST += m4/lock.m4 +EXTRA_DIST += m4/printf-posix.m4 +EXTRA_DIST += m4/threadlib.m4 +EXTRA_DIST += m4/uintmax_t.m4 +EXTRA_DIST += m4/visibility.m4 +EXTRA_DIST += m4/math_h.m4 + +EXTRA_DIST += grub-core/osdep/apple/hostdisk.c +EXTRA_DIST += grub-core/osdep/aros/hostdisk.c +EXTRA_DIST += grub-core/osdep/basic/hostdisk.c +EXTRA_DIST += grub-core/osdep/bsd/hostdisk.c +EXTRA_DIST += grub-core/osdep/freebsd/hostdisk.c +EXTRA_DIST += grub-core/osdep/hurd/hostdisk.c +EXTRA_DIST += grub-core/osdep/linux/hostdisk.c +EXTRA_DIST += grub-core/osdep/windows/hostdisk.c +EXTRA_DIST += grub-core/osdep/sun/hostdisk.c +EXTRA_DIST += grub-core/osdep/haiku/hostdisk.c + +EXTRA_DIST += grub-core/osdep/basic/init.c +EXTRA_DIST += grub-core/osdep/windows/init.c + +EXTRA_DIST += grub-core/osdep/apple/getroot.c +EXTRA_DIST += grub-core/osdep/aros/getroot.c +EXTRA_DIST += grub-core/osdep/basic/getroot.c +EXTRA_DIST += grub-core/osdep/bsd/getroot.c +EXTRA_DIST += grub-core/osdep/windows/getroot.c +EXTRA_DIST += grub-core/osdep/freebsd/getroot.c +EXTRA_DIST += grub-core/osdep/hurd/getroot.c +EXTRA_DIST += grub-core/osdep/linux/getroot.c +EXTRA_DIST += grub-core/osdep/sun/getroot.c +EXTRA_DIST += grub-core/osdep/haiku/getroot.c + +EXTRA_DIST += grub-core/osdep/basic/random.c +EXTRA_DIST += grub-core/osdep/basic/ofpath.c + +EXTRA_DIST += grub-core/osdep/unix/password.c +EXTRA_DIST += grub-core/osdep/unix/random.c +EXTRA_DIST += grub-core/osdep/unix/sleep.c + +EXTRA_DIST += grub-core/osdep/linux/ofpath.c + +EXTRA_DIST += grub-core/osdep/windows/password.c +EXTRA_DIST += grub-core/osdep/windows/random.c +EXTRA_DIST += grub-core/osdep/windows/sleep.c + +EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz +EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz + +EXTRA_DIST += coreboot.cfg + +EXTRA_DIST += tests/file_filter/file +EXTRA_DIST += tests/file_filter/file.gz +EXTRA_DIST += tests/file_filter/file.gz.sig +EXTRA_DIST += tests/file_filter/file.lzop +EXTRA_DIST += tests/file_filter/file.lzop.sig +EXTRA_DIST += tests/file_filter/file.xz +EXTRA_DIST += tests/file_filter/file.xz.sig +EXTRA_DIST += tests/file_filter/keys +EXTRA_DIST += tests/file_filter/keys.pub +EXTRA_DIST += tests/file_filter/test.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/prompt.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/txt.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/menu.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/po4a.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg +EXTRA_DIST += tests/syslinux/ubuntu10.04_grub.cfg.in diff --git a/conf/i386-cygwin-img-ld.sc b/conf/i386-cygwin-img-ld.sc new file mode 100644 index 000000000..3ac26fcce --- /dev/null +++ b/conf/i386-cygwin-img-ld.sc @@ -0,0 +1,53 @@ +/* Linker script to create grub .img files on Cygwin. */ + +SECTIONS +{ + .text : + { + start = . ; + _start = . ; + __start = . ; + *(.text) + etext = . ; + } + .data : + { + __data_start__ = . ; + *(.data) + __data_end__ = . ; + __rdata_start__ = . ; + *(.rdata) + __rdata_end__ = . ; + *(.pdata) + edata = . ; + _edata = . ; + __edata = . ; + } + .bss : + { + __bss_start__ = . ; + *(.bss) + __common_start__ = . ; + *(COMMON) + __bss_end__ = . ; + } + .edata : + { + *(.edata) + end = . ; + _end = . ; + __end = . ; + } + .stab : + { + *(.stab) + } + .stabstr : + { + *(.stabstr) + } +} + +ASSERT("__rdata_end__"=="edata", ".pdata not empty") +ASSERT("__bss_end__" =="end" , ".edata not empty") + diff --git a/config-util.h.in b/config-util.h.in new file mode 100644 index 000000000..3ebc11ceb --- /dev/null +++ b/config-util.h.in @@ -0,0 +1,1680 @@ +/* config-util.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to the number of bits in type 'ptrdiff_t'. */ +#undef BITSIZEOF_PTRDIFF_T + +/* Define to the number of bits in type 'sig_atomic_t'. */ +#undef BITSIZEOF_SIG_ATOMIC_T + +/* Define to the number of bits in type 'size_t'. */ +#undef BITSIZEOF_SIZE_T + +/* Define to the number of bits in type 'wchar_t'. */ +#undef BITSIZEOF_WCHAR_T + +/* Define to the number of bits in type 'wint_t'. */ +#undef BITSIZEOF_WINT_T + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'double'. */ +#undef DBL_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'double'. */ +#undef DBL_EXPBIT0_WORD + +/* Define to 1 if // is a file system root distinct from /. */ +#undef DOUBLE_SLASH_IS_DISTINCT_ROOT + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ +#undef FUNC_NL_LANGINFO_YESEXPR_WORKS + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fscanf shall be considered present. */ +#undef GNULIB_FSCANF + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module malloc-gnu shall be considered present. */ +#undef GNULIB_MALLOC_GNU + +/* Define to 1 to add extern declaration of program_invocation_name to argp.h + */ +#undef GNULIB_PROGRAM_INVOCATION_NAME + +/* Define to 1 to add extern declaration of program_invocation_short_name to + argp.h */ +#undef GNULIB_PROGRAM_INVOCATION_SHORT_NAME + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module scanf shall be considered present. */ +#undef GNULIB_SCANF + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module strerror shall be considered present. */ +#undef GNULIB_STRERROR + +/* Define to 1 when the gnulib module btowc should be tested. */ +#undef GNULIB_TEST_BTOWC + +/* Define to 1 when the gnulib module getdelim should be tested. */ +#undef GNULIB_TEST_GETDELIM + +/* Define to 1 when the gnulib module getline should be tested. */ +#undef GNULIB_TEST_GETLINE + +/* Define to 1 when the gnulib module getopt-gnu should be tested. */ +#undef GNULIB_TEST_GETOPT_GNU + +/* Define to 1 when the gnulib module localeconv should be tested. */ +#undef GNULIB_TEST_LOCALECONV + +/* Define to 1 when the gnulib module malloc-posix should be tested. */ +#undef GNULIB_TEST_MALLOC_POSIX + +/* Define to 1 when the gnulib module mbrtowc should be tested. */ +#undef GNULIB_TEST_MBRTOWC + +/* Define to 1 when the gnulib module mbsinit should be tested. */ +#undef GNULIB_TEST_MBSINIT + +/* Define to 1 when the gnulib module mbsrtowcs should be tested. */ +#undef GNULIB_TEST_MBSRTOWCS + +/* Define to 1 when the gnulib module mbtowc should be tested. */ +#undef GNULIB_TEST_MBTOWC + +/* Define to 1 when the gnulib module memchr should be tested. */ +#undef GNULIB_TEST_MEMCHR + +/* Define to 1 when the gnulib module mempcpy should be tested. */ +#undef GNULIB_TEST_MEMPCPY + +/* Define to 1 when the gnulib module nl_langinfo should be tested. */ +#undef GNULIB_TEST_NL_LANGINFO + +/* Define to 1 when the gnulib module rawmemchr should be tested. */ +#undef GNULIB_TEST_RAWMEMCHR + +/* Define to 1 when the gnulib module realloc-posix should be tested. */ +#undef GNULIB_TEST_REALLOC_POSIX + +/* Define to 1 when the gnulib module sleep should be tested. */ +#undef GNULIB_TEST_SLEEP + +/* Define to 1 when the gnulib module strchrnul should be tested. */ +#undef GNULIB_TEST_STRCHRNUL + +/* Define to 1 when the gnulib module strerror should be tested. */ +#undef GNULIB_TEST_STRERROR + +/* Define to 1 when the gnulib module strndup should be tested. */ +#undef GNULIB_TEST_STRNDUP + +/* Define to 1 when the gnulib module strnlen should be tested. */ +#undef GNULIB_TEST_STRNLEN + +/* Define to 1 when the gnulib module vsnprintf should be tested. */ +#undef GNULIB_TEST_VSNPRINTF + +/* Define to 1 when the gnulib module wcrtomb should be tested. */ +#undef GNULIB_TEST_WCRTOMB + +/* Define to 1 when the gnulib module wcwidth should be tested. */ +#undef GNULIB_TEST_WCWIDTH + +/* Default boot directory name" */ +#undef GRUB_BOOT_DIR_NAME + +/* Data dir */ +#undef GRUB_DATADIR + +/* Default grub directory name */ +#undef GRUB_DIR_NAME + +/* Library dir */ +#undef GRUB_LIBDIR + +/* Configuration dir */ +#undef GRUB_SYSCONFDIR + +/* Define to 1 if you have 'alloca' after including , a header that + may be supplied by this distribution. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_BP_SYM_H + +/* Define to 1 if you have the `btowc' function. */ +#undef HAVE_BTOWC + +/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. + */ +#undef HAVE_DECL_ALARM + +/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_CLEARERR_UNLOCKED + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_FEOF_UNLOCKED + +/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FERROR_UNLOCKED + +/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FFLUSH_UNLOCKED + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FGETS_UNLOCKED + +/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FPUTC_UNLOCKED + +/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FPUTS_UNLOCKED + +/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FREAD_UNLOCKED + +/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FWRITE_UNLOCKED + +/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_GETCHAR_UNLOCKED + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_GETC_UNLOCKED + +/* Define to 1 if you have the declaration of `getdelim', and to 0 if you + don't. */ +#undef HAVE_DECL_GETDELIM + +/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't. + */ +#undef HAVE_DECL_GETENV + +/* Define to 1 if you have the declaration of `getline', and to 0 if you + don't. */ +#undef HAVE_DECL_GETLINE + +/* Define to 1 if you have the declaration of `isblank', and to 0 if you + don't. */ +#undef HAVE_DECL_ISBLANK + +/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you + don't. */ +#undef HAVE_DECL_MBRTOWC + +/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you + don't. */ +#undef HAVE_DECL_MBSINIT + +/* Define to 1 if you have the declaration of `mbsrtowcs', and to 0 if you + don't. */ +#undef HAVE_DECL_MBSRTOWCS + +/* Define to 1 if you have a declaration of mbswidth() in , and to 0 + otherwise. */ +#undef HAVE_DECL_MBSWIDTH_IN_WCHAR_H + +/* Define to 1 if you have the declaration of `program_invocation_name', and + to 0 if you don't. */ +#undef HAVE_DECL_PROGRAM_INVOCATION_NAME + +/* Define to 1 if you have the declaration of `program_invocation_short_name', + and to 0 if you don't. */ +#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + +/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_PUTCHAR_UNLOCKED + +/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_PUTC_UNLOCKED + +/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't. + */ +#undef HAVE_DECL_SLEEP + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR_R + +/* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNCASECMP + +/* Define to 1 if you have the declaration of `strndup', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNDUP + +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNLEN + +/* Define to 1 if you have the declaration of `towlower', and to 0 if you + don't. */ +#undef HAVE_DECL_TOWLOWER + +/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_VSNPRINTF + +/* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you + don't. */ +#undef HAVE_DECL_WCRTOMB + +/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you + don't. */ +#undef HAVE_DECL_WCWIDTH + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#undef HAVE_DECL__SNPRINTF + +/* Define to 1 if you have the devmapper library. */ +#undef HAVE_DEVICE_MAPPER + +/* Define to 1 if you have the header file. */ +#undef HAVE_FEATURES_H + +/* Define to 1 if you have the `flockfile' function. */ +#undef HAVE_FLOCKFILE + +/* Define to 1 if you have the header file. */ +#undef HAVE_FT2BUILD_H + +/* Define to 1 if you have the `funlockfile' function. */ +#undef HAVE_FUNLOCKFILE + +/* Define to 1 if you have the header file. */ +#undef HAVE_FUSE_FUSE_H + +/* Define to 1 if you have the `getdelim' function. */ +#undef HAVE_GETDELIM + +/* Define to 1 if you have the `getextmntent' function. */ +#undef HAVE_GETEXTMNTENT + +/* Define to 1 if you have the header file. */ +#undef HAVE_GETOPT_H + +/* Define to 1 if you have the `getopt_long_only' function. */ +#undef HAVE_GETOPT_LONG_ONLY + +/* Define if getrawpartition() in -lutil can be used */ +#undef HAVE_GETRAWPARTITION + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define if you have the 'intmax_t' type in or . */ +#undef HAVE_INTMAX_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if exists, doesn't clash with , and + declares uintmax_t. */ +#undef HAVE_INTTYPES_H_WITH_UINTMAX + +/* Define to 1 if you have the `isascii' function. */ +#undef HAVE_ISASCII + +/* Define to 1 if you have the `isblank' function. */ +#undef HAVE_ISBLANK + +/* Define to 1 if you have the `iswcntrl' function. */ +#undef HAVE_ISWCNTRL + +/* Define to 1 if you have the `iswctype' function. */ +#undef HAVE_ISWCTYPE + +/* Define if you have and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define to 1 if you have the header file. */ +#undef HAVE_LANGINFO_H + +/* Define to 1 if you have the `devmapper' library (-ldevmapper). */ +#undef HAVE_LIBDEVMAPPER + +/* Define to 1 if you have the `fuse' library (-lfuse). */ +#undef HAVE_LIBFUSE + +/* Define to 1 if you have the `geom' library (-lgeom). */ +#undef HAVE_LIBGEOM + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBINTL_H + +/* Define to 1 if you have the `lzma' library (-llzma). */ +#undef HAVE_LIBLZMA + +/* Define to 1 if you have the NVPAIR library. */ +#undef HAVE_LIBNVPAIR + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBNVPAIR_H + +/* Define to 1 if you have the ZFS library. */ +#undef HAVE_LIBZFS + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBZFS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LINEWRAP_H + +/* Define to 1 if the system has the type 'long long int'. */ +#undef HAVE_LONG_LONG_INT + +/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC_GNU + +/* Define if the 'malloc' function is POSIX compliant. */ +#undef HAVE_MALLOC_POSIX + +/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and . */ +#undef HAVE_MAP_ANONYMOUS + +/* Define to 1 if you have the `mbrtowc' function. */ +#undef HAVE_MBRTOWC + +/* Define to 1 if you have the `mbsinit' function. */ +#undef HAVE_MBSINIT + +/* Define to 1 if you have the `mbsrtowcs' function. */ +#undef HAVE_MBSRTOWCS + +/* Define to 1 if declares mbstate_t. */ +#undef HAVE_MBSTATE_T + +/* Define to 1 if you have the `memalign' function. */ +#undef HAVE_MEMALIGN + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mempcpy' function. */ +#undef HAVE_MEMPCPY + +/* Define to 1 if you have the `mprotect' function. */ +#undef HAVE_MPROTECT + +/* Define to 1 on MSVC platforms that have the "invalid parameter handler" + concept. */ +#undef HAVE_MSVC_INVALID_PARAMETER_HANDLER + +/* Define to 1 if you have the `nl_langinfo' function. */ +#undef HAVE_NL_LANGINFO + +/* Define if opendisk() in -lutil can be used */ +#undef HAVE_OPENDISK + +/* Define to 1 if you have the header file. */ +#undef HAVE_PCIACCESS_H + +/* Define to 1 if you have the `posix_memalign' function. */ +#undef HAVE_POSIX_MEMALIGN + +/* Define if program_invocation_name is defined */ +#undef HAVE_PROGRAM_INVOCATION_NAME + +/* Define if program_invocation_short_name is defined */ +#undef HAVE_PROGRAM_INVOCATION_SHORT_NAME + +/* Define to 1 if you have the `rawmemchr' function. */ +#undef HAVE_RAWMEMCHR + +/* Define to 1 if atoll is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ATOLL + +/* Define to 1 if btowc is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_BTOWC + +/* Define to 1 if canonicalize_file_name is declared even after undefining + macros. */ +#undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME + +/* Define to 1 if chdir is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_CHDIR + +/* Define to 1 if chown is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_CHOWN + +/* Define to 1 if dprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DPRINTF + +/* Define to 1 if dup is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DUP + +/* Define to 1 if dup2 is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DUP2 + +/* Define to 1 if dup3 is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DUP3 + +/* Define to 1 if duplocale is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_DUPLOCALE + +/* Define to 1 if endusershell is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ENDUSERSHELL + +/* Define to 1 if environ is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ENVIRON + +/* Define to 1 if euidaccess is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_EUIDACCESS + +/* Define to 1 if faccessat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FACCESSAT + +/* Define to 1 if fchdir is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FCHDIR + +/* Define to 1 if fchownat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FCHOWNAT + +/* Define to 1 if fdatasync is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FDATASYNC + +/* Define to 1 if ffs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FFS + +/* Define to 1 if ffsl is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FFSL + +/* Define to 1 if ffsll is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FFSLL + +/* Define to 1 if fpurge is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FPURGE + +/* Define to 1 if fseeko is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FSEEKO + +/* Define to 1 if fsync is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FSYNC + +/* Define to 1 if ftello is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FTELLO + +/* Define to 1 if ftruncate is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_FTRUNCATE + +/* Define to 1 if getcwd is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETCWD + +/* Define to 1 if getdelim is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETDELIM + +/* Define to 1 if getdomainname is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETDOMAINNAME + +/* Define to 1 if getdtablesize is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETDTABLESIZE + +/* Define to 1 if getgroups is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETGROUPS + +/* Define to 1 if gethostname is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETHOSTNAME + +/* Define to 1 if getline is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLINE + +/* Define to 1 if getloadavg is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLOADAVG + +/* Define to 1 if getlogin is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLOGIN + +/* Define to 1 if getlogin_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETLOGIN_R + +/* Define to 1 if getpagesize is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETPAGESIZE + +/* Define to 1 if gets is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETS + +/* Define to 1 if getsubopt is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETSUBOPT + +/* Define to 1 if getusershell is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GETUSERSHELL + +/* Define to 1 if grantpt is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GRANTPT + +/* Define to 1 if group_member is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_GROUP_MEMBER + +/* Define to 1 if initstate is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_INITSTATE + +/* Define to 1 if initstate_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_INITSTATE_R + +/* Define to 1 if isatty is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ISATTY + +/* Define to 1 if iswctype is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_ISWCTYPE + +/* Define to 1 if lchown is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LCHOWN + +/* Define to 1 if link is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LINK + +/* Define to 1 if linkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LINKAT + +/* Define to 1 if lseek is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_LSEEK + +/* Define to 1 if mbrlen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBRLEN + +/* Define to 1 if mbrtowc is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBRTOWC + +/* Define to 1 if mbsinit is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBSINIT + +/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBSNRTOWCS + +/* Define to 1 if mbsrtowcs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MBSRTOWCS + +/* Define to 1 if memmem is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MEMMEM + +/* Define to 1 if mempcpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MEMPCPY + +/* Define to 1 if memrchr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MEMRCHR + +/* Define to 1 if mkdtemp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKDTEMP + +/* Define to 1 if mkostemp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKOSTEMP + +/* Define to 1 if mkostemps is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKOSTEMPS + +/* Define to 1 if mkstemp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKSTEMP + +/* Define to 1 if mkstemps is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_MKSTEMPS + +/* Define to 1 if nl_langinfo is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_NL_LANGINFO + +/* Define to 1 if pclose is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PCLOSE + +/* Define to 1 if pipe is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PIPE + +/* Define to 1 if pipe2 is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PIPE2 + +/* Define to 1 if popen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_POPEN + +/* Define to 1 if posix_openpt is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_POSIX_OPENPT + +/* Define to 1 if pread is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PREAD + +/* Define to 1 if ptsname is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PTSNAME + +/* Define to 1 if ptsname_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PTSNAME_R + +/* Define to 1 if pwrite is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_PWRITE + +/* Define to 1 if random is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RANDOM + +/* Define to 1 if random_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RANDOM_R + +/* Define to 1 if rawmemchr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RAWMEMCHR + +/* Define to 1 if readlink is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_READLINK + +/* Define to 1 if readlinkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_READLINKAT + +/* Define to 1 if realpath is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_REALPATH + +/* Define to 1 if renameat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RENAMEAT + +/* Define to 1 if rmdir is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RMDIR + +/* Define to 1 if rpmatch is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_RPMATCH + +/* Define to 1 if secure_getenv is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SECURE_GETENV + +/* Define to 1 if setenv is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETENV + +/* Define to 1 if sethostname is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETHOSTNAME + +/* Define to 1 if setlocale is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETLOCALE + +/* Define to 1 if setstate is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETSTATE + +/* Define to 1 if setstate_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETSTATE_R + +/* Define to 1 if setusershell is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SETUSERSHELL + +/* Define to 1 if sleep is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SLEEP + +/* Define to 1 if snprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SNPRINTF + +/* Define to 1 if srandom is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SRANDOM + +/* Define to 1 if srandom_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SRANDOM_R + +/* Define to 1 if stpcpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STPCPY + +/* Define to 1 if stpncpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STPNCPY + +/* Define to 1 if strcasecmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRCASECMP + +/* Define to 1 if strcasestr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRCASESTR + +/* Define to 1 if strchrnul is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRCHRNUL + +/* Define to 1 if strdup is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRDUP + +/* Define to 1 if strerror_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRERROR_R + +/* Define to 1 if strncasecmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNCASECMP + +/* Define to 1 if strncat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNCAT + +/* Define to 1 if strndup is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNDUP + +/* Define to 1 if strnlen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRNLEN + +/* Define to 1 if strpbrk is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRPBRK + +/* Define to 1 if strsep is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRSEP + +/* Define to 1 if strsignal is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRSIGNAL + +/* Define to 1 if strtod is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOD + +/* Define to 1 if strtok_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOK_R + +/* Define to 1 if strtoll is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOLL + +/* Define to 1 if strtoull is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRTOULL + +/* Define to 1 if strverscmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_STRVERSCMP + +/* Define to 1 if symlink is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SYMLINK + +/* Define to 1 if symlinkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_SYMLINKAT + +/* Define to 1 if tmpfile is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_TMPFILE + +/* Define to 1 if towctrans is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_TOWCTRANS + +/* Define to 1 if ttyname_r is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_TTYNAME_R + +/* Define to 1 if unlink is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNLINK + +/* Define to 1 if unlinkat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNLINKAT + +/* Define to 1 if unlockpt is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNLOCKPT + +/* Define to 1 if unsetenv is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_UNSETENV + +/* Define to 1 if usleep is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_USLEEP + +/* Define to 1 if vdprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_VDPRINTF + +/* Define to 1 if vsnprintf is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_VSNPRINTF + +/* Define to 1 if wcpcpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCPCPY + +/* Define to 1 if wcpncpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCPNCPY + +/* Define to 1 if wcrtomb is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCRTOMB + +/* Define to 1 if wcscasecmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSCASECMP + +/* Define to 1 if wcscat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSCAT + +/* Define to 1 if wcschr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSCHR + +/* Define to 1 if wcscmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSCMP + +/* Define to 1 if wcscoll is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSCOLL + +/* Define to 1 if wcscpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSCPY + +/* Define to 1 if wcscspn is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSCSPN + +/* Define to 1 if wcsdup is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSDUP + +/* Define to 1 if wcslen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSLEN + +/* Define to 1 if wcsncasecmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSNCASECMP + +/* Define to 1 if wcsncat is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSNCAT + +/* Define to 1 if wcsncmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSNCMP + +/* Define to 1 if wcsncpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSNCPY + +/* Define to 1 if wcsnlen is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSNLEN + +/* Define to 1 if wcsnrtombs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSNRTOMBS + +/* Define to 1 if wcspbrk is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSPBRK + +/* Define to 1 if wcsrchr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSRCHR + +/* Define to 1 if wcsrtombs is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSRTOMBS + +/* Define to 1 if wcsspn is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSSPN + +/* Define to 1 if wcsstr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSSTR + +/* Define to 1 if wcstok is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSTOK + +/* Define to 1 if wcswidth is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSWIDTH + +/* Define to 1 if wcsxfrm is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCSXFRM + +/* Define to 1 if wctob is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCTOB + +/* Define to 1 if wctrans is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCTRANS + +/* Define to 1 if wctype is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCTYPE + +/* Define to 1 if wcwidth is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WCWIDTH + +/* Define to 1 if wmemchr is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WMEMCHR + +/* Define to 1 if wmemcmp is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WMEMCMP + +/* Define to 1 if wmemcpy is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WMEMCPY + +/* Define to 1 if wmemmove is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WMEMMOVE + +/* Define to 1 if wmemset is declared even after undefining macros. */ +#undef HAVE_RAW_DECL_WMEMSET + +/* Define to 1 if _Exit is declared even after undefining macros. */ +#undef HAVE_RAW_DECL__EXIT + +/* Define if the 'realloc' function is POSIX compliant. */ +#undef HAVE_REALLOC_POSIX + +/* Define to 1 if you have the header file. */ +#undef HAVE_SDL_SDL_H + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +#undef HAVE_SIGNED_SIG_ATOMIC_T + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +#undef HAVE_SIGNED_WCHAR_T + +/* Define to 1 if 'wint_t' is a signed integer type. */ +#undef HAVE_SIGNED_WINT_T + +/* Define to 1 if you have the `sleep' function. */ +#undef HAVE_SLEEP + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* Define if the return value of the snprintf function is the number of of + bytes (excluding the terminating NUL) that would have been produced if the + buffer had been large enough. */ +#undef HAVE_SNPRINTF_RETVAL_C99 + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define if exists, doesn't clash with , and declares + uintmax_t. */ +#undef HAVE_STDINT_H_WITH_UINTMAX + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchrnul' function. */ +#undef HAVE_STRCHRNUL + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strndup' function. */ +#undef HAVE_STRNDUP + +/* Define to 1 if you have the `strnlen' function. */ +#undef HAVE_STRNLEN + +/* Define to 1 if `decimal_point' is a member of `struct lconv'. */ +#undef HAVE_STRUCT_LCONV_DECIMAL_POINT + +/* Define to 1 if `f_fstypename' is a member of `struct statfs'. */ +#undef HAVE_STRUCT_STATFS_F_FSTYPENAME + +/* Define to 1 if `f_mntfromname' is a member of `struct statfs'. */ +#undef HAVE_STRUCT_STATFS_F_MNTFROMNAME + +/* Define to 1 if you have the `symlink' function. */ +#undef HAVE_SYMLINK + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYSEXITS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_BITYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_MNTTAB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_MOUNT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the `towlower' function. */ +#undef HAVE_TOWLOWER + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if the system has the type 'unsigned long long int'. */ +#undef HAVE_UNSIGNED_LONG_LONG_INT + +/* Define to 1 if you have the `vasnprintf' function. */ +#undef HAVE_VASNPRINTF + +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + +/* Define if you have the 'wchar_t' type. */ +#undef HAVE_WCHAR_T + +/* Define to 1 if you have the `wcrtomb' function. */ +#undef HAVE_WCRTOMB + +/* Define to 1 if you have the `wcscoll' function. */ +#undef HAVE_WCSCOLL + +/* Define to 1 if you have the `wcslen' function. */ +#undef HAVE_WCSLEN + +/* Define to 1 if you have the `wcsnlen' function. */ +#undef HAVE_WCSNLEN + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCTYPE_H + +/* Define to 1 if you have the `wcwidth' function. */ +#undef HAVE_WCWIDTH + +/* Define to 1 if you have the header file. */ +#undef HAVE_WINSOCK2_H + +/* Define if you have the 'wint_t' type. */ +#undef HAVE_WINT_T + +/* Define to 1 if you have the `wmemchr' function. */ +#undef HAVE_WMEMCHR + +/* Define to 1 if you have the `wmemcpy' function. */ +#undef HAVE_WMEMCPY + +/* Define to 1 if you have the `wmempcpy' function. */ +#undef HAVE_WMEMPCPY + +/* Define to 1 if O_NOATIME works. */ +#undef HAVE_WORKING_O_NOATIME + +/* Define to 1 if O_NOFOLLOW works. */ +#undef HAVE_WORKING_O_NOFOLLOW + +/* Define to 1 if you have the header file. */ +#undef HAVE_XLOCALE_H + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to 1 if you have the `_restgpr_14_x' function. */ +#undef HAVE__RESTGPR_14_X + +/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ +#undef HAVE__SET_INVALID_PARAMETER_HANDLER + +/* Define to 1 if you have the `__aeabi_idiv' function. */ +#undef HAVE___AEABI_IDIV + +/* Define to 1 if you have the `__aeabi_idivmod' function. */ +#undef HAVE___AEABI_IDIVMOD + +/* Define to 1 if you have the `__aeabi_lasr' function. */ +#undef HAVE___AEABI_LASR + +/* Define to 1 if you have the `__aeabi_llsl' function. */ +#undef HAVE___AEABI_LLSL + +/* Define to 1 if you have the `__aeabi_llsr' function. */ +#undef HAVE___AEABI_LLSR + +/* Define to 1 if you have the `__aeabi_lmul' function. */ +#undef HAVE___AEABI_LMUL + +/* Define to 1 if you have the `__aeabi_memclr' function. */ +#undef HAVE___AEABI_MEMCLR + +/* Define to 1 if you have the `__aeabi_memclr4' function. */ +#undef HAVE___AEABI_MEMCLR4 + +/* Define to 1 if you have the `__aeabi_memclr8' function. */ +#undef HAVE___AEABI_MEMCLR8 + +/* Define to 1 if you have the `__aeabi_memcpy' function. */ +#undef HAVE___AEABI_MEMCPY + +/* Define to 1 if you have the `__aeabi_memcpy4' function. */ +#undef HAVE___AEABI_MEMCPY4 + +/* Define to 1 if you have the `__aeabi_memcpy8' function. */ +#undef HAVE___AEABI_MEMCPY8 + +/* Define to 1 if you have the `__aeabi_memset' function. */ +#undef HAVE___AEABI_MEMSET + +/* Define to 1 if you have the `__aeabi_uidiv' function. */ +#undef HAVE___AEABI_UIDIV + +/* Define to 1 if you have the `__aeabi_uidivmod' function. */ +#undef HAVE___AEABI_UIDIVMOD + +/* Define to 1 if you have the `__aeabi_ulcmp' function. */ +#undef HAVE___AEABI_ULCMP + +/* Define to 1 if you have the `__ashldi3' function. */ +#undef HAVE___ASHLDI3 + +/* Define to 1 if you have the `__ashrdi3' function. */ +#undef HAVE___ASHRDI3 + +/* Define to 1 if you have the `__bswapdi2' function. */ +#undef HAVE___BSWAPDI2 + +/* Define to 1 if you have the `__bswapsi2' function. */ +#undef HAVE___BSWAPSI2 + +/* Define to 1 if you have the `__bzero' function. */ +#undef HAVE___BZERO + +/* Define to 1 if you have the `__chkstk_ms' function. */ +#undef HAVE___CHKSTK_MS + +/* Define to 1 if you have the `__ctzdi2' function. */ +#undef HAVE___CTZDI2 + +/* Define to 1 if you have the `__ctzsi2' function. */ +#undef HAVE___CTZSI2 + +/* Define to 1 if you have the `__deregister_frame_info' function. */ +#undef HAVE___DEREGISTER_FRAME_INFO + +/* Define to 1 if you have the `__divdi3' function. */ +#undef HAVE___DIVDI3 + +/* Define to 1 if you have the `__divsi3' function. */ +#undef HAVE___DIVSI3 + +/* Define to 1 if you have the `__lshrdi3' function. */ +#undef HAVE___LSHRDI3 + +/* Define to 1 if you have the `__moddi3' function. */ +#undef HAVE___MODDI3 + +/* Define to 1 if you have the `__modsi3' function. */ +#undef HAVE___MODSI3 + +/* Define to 1 if you have the `__muldi3' function. */ +#undef HAVE___MULDI3 + +/* Define to 1 if you have the `__register_frame_info' function. */ +#undef HAVE___REGISTER_FRAME_INFO + +/* Define to 1 if you have the `__ucmpdi2' function. */ +#undef HAVE___UCMPDI2 + +/* Define to 1 if you have the `__udivdi3' function. */ +#undef HAVE___UDIVDI3 + +/* Define to 1 if you have the `__udivsi3' function. */ +#undef HAVE___UDIVSI3 + +/* Define to 1 if you have the `__umoddi3' function. */ +#undef HAVE___UMODDI3 + +/* Define to 1 if you have the `__umodsi3' function. */ +#undef HAVE___UMODSI3 + +/* Define to 1 if you have the `___chkstk_ms' function. */ +#undef HAVE____CHKSTK_MS + +/* Locale dir */ +#undef LOCALEDIR + +/* Define to 1 if `major', `minor', and `makedev' are declared in . + */ +#undef MAJOR_IN_MKDEV + +/* Define to 1 if `major', `minor', and `makedev' are declared in + . */ +#undef MAJOR_IN_SYSMACROS + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#undef MALLOC_0_IS_NONNULL + +/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ +#undef MAP_ANONYMOUS + +/* Define if the mbrtowc function has the NULL pwc argument bug. */ +#undef MBRTOWC_NULL_ARG1_BUG + +/* Define if the mbrtowc function has the NULL string argument bug. */ +#undef MBRTOWC_NULL_ARG2_BUG + +/* Define if the mbrtowc function does not return 0 for a NUL character. */ +#undef MBRTOWC_NUL_RETVAL_BUG + +/* Define if the mbrtowc function returns a wrong return value. */ +#undef MBRTOWC_RETVAL_BUG + +/* Define to 1 if you enable memory manager debugging. */ +#undef MM_DEBUG + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +#undef PTRDIFF_T_SUFFIX + +/* Define if nl_langinfo exists but is overridden by gnulib. */ +#undef REPLACE_NL_LANGINFO + +/* Define to 1 if strerror(0) does not return a message implying success. */ +#undef REPLACE_STRERROR_0 + +/* Define if vasnprintf exists but is overridden by gnulib. */ +#undef REPLACE_VASNPRINTF + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +#undef SIG_ATOMIC_T_SUFFIX + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `off_t', as computed by sizeof. */ +#undef SIZEOF_OFF_T + +/* The size of `TCHAR', as computed by sizeof. */ +#undef SIZEOF_TCHAR + +/* The size of `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +# undef SIZE_MAX +#endif + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +#undef SIZE_T_SUFFIX + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if strerror_r returns char *. */ +#undef STRERROR_R_CHAR_P + +/* Define to 1 if you have the LZMA library. */ +#undef USE_LIBLZMA + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable general extensions on OS X. */ +#ifndef _DARWIN_C_SOURCE +# undef _DARWIN_C_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable X/Open extensions if necessary. HP-UX 11.11 defines + mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of + whether compiling with -Ae or -D_HPUX_SOURCE=1. */ +#ifndef _XOPEN_SOURCE +# undef _XOPEN_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Version number of package */ +#undef VERSION + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +#undef WCHAR_T_SUFFIX + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +#undef WINT_T_SUFFIX + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a + `char[]'. */ +#undef YYTEXT_POINTER + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 on Solaris. */ +#undef _LCONV_C99 + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ +#undef _NETBSD_SOURCE + +/* The _Noreturn keyword of C11. */ +#if ! (defined _Noreturn \ + || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) +# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ + || 0x5110 <= __SUNPRO_C) +# define _Noreturn __attribute__ ((__noreturn__)) +# elif defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for 'stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Define if you want to include , so that it consistently + overrides 's RE_DUP_MAX. */ +#undef _REGEX_INCLUDE_LIMITS_H + +/* Define if you want regoff_t to be at least as wide POSIX requires. */ +#undef _REGEX_LARGE_OFFSETS + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +#undef __GETOPT_PREFIX + +/* Please see the Gnulib manual for how to use these macros. + + Suppress extern inline with HP-UX cc, as it appears to be broken; see + . + + Suppress extern inline with Sun C in standards-conformance mode, as it + mishandles inline functions that call each other. E.g., for 'inline void f + (void) { } inline void g (void) { f (); }', c99 incorrectly complains + 'reference to static identifier "f" in extern inline function'. + This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. + + Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) + on configurations that mistakenly use 'static inline' to implement + functions or macros in standard C headers like . For example, + if isdigit is mistakenly implemented via a static inline function, + a program containing an extern inline function that calls isdigit + may not work since the C standard prohibits extern inline functions + from calling static functions. This bug is known to occur on: + + OS X 10.8 and earlier; see: + http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html + + DragonFly; see + http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log + + FreeBSD; see: + http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html + + OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and + for clang but remains for g++; see . + Assume DragonFly and FreeBSD will be similar. */ +#if (((defined __APPLE__ && defined __MACH__) \ + || defined __DragonFly__ || defined __FreeBSD__) \ + && (defined __header_inline \ + ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ + && ! defined __clang__) \ + : ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus)))) +# define _GL_EXTERN_INLINE_STDHEADER_BUG +#endif +#if ((__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : (199901L <= __STDC_VERSION__ \ + && !defined __HP_cc \ + && !(defined __SUNPRO_C && __STDC__))) \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE +#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ + /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ +# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) +# else +# define _GL_INLINE extern inline +# endif +# define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE +#else +# define _GL_INLINE static _GL_UNUSED +# define _GL_EXTERN_INLINE static _GL_UNUSED +#endif + +/* In GCC, suppress bogus "no previous prototype for 'FOO'" + and "no previous declaration for 'FOO'" diagnostics, + when FOO is an inline function in the header; see + and + . */ +#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ +# define _GL_INLINE_HEADER_CONST_PRAGMA +# else +# define _GL_INLINE_HEADER_CONST_PRAGMA \ + _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") +# endif +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ + _GL_INLINE_HEADER_CONST_PRAGMA +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +#else +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif + +/* Define to a replacement function name for fnmatch(). */ +#undef fnmatch + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to long or long long if and don't define. */ +#undef intmax_t + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for Mac OS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Define to a type if does not define. */ +#undef mbstate_t + +/* Define to `int' if does not define. */ +#undef mode_t + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +#undef ptrdiff_t + +/* Define to rpl_re_comp if the replacement should be used. */ +#undef re_comp + +/* Define to rpl_re_compile_fastmap if the replacement should be used. */ +#undef re_compile_fastmap + +/* Define to rpl_re_compile_pattern if the replacement should be used. */ +#undef re_compile_pattern + +/* Define to rpl_re_exec if the replacement should be used. */ +#undef re_exec + +/* Define to rpl_re_match if the replacement should be used. */ +#undef re_match + +/* Define to rpl_re_match_2 if the replacement should be used. */ +#undef re_match_2 + +/* Define to rpl_re_search if the replacement should be used. */ +#undef re_search + +/* Define to rpl_re_search_2 if the replacement should be used. */ +#undef re_search_2 + +/* Define to rpl_re_set_registers if the replacement should be used. */ +#undef re_set_registers + +/* Define to rpl_re_set_syntax if the replacement should be used. */ +#undef re_set_syntax + +/* Define to rpl_re_syntax_options if the replacement should be used. */ +#undef re_syntax_options + +/* Define to rpl_regcomp if the replacement should be used. */ +#undef regcomp + +/* Define to rpl_regerror if the replacement should be used. */ +#undef regerror + +/* Define to rpl_regexec if the replacement should be used. */ +#undef regexec + +/* Define to rpl_regfree if the replacement should be used. */ +#undef regfree + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict or + __restrict__, even though the corresponding Sun C compiler ends up with + "#define restrict _Restrict" or "#define restrict __restrict__" in the + previous line. Perhaps some future version of Sun C++ will work with + restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +# define __restrict__ +#endif + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define as a signed type of the same size as size_t. */ +#undef ssize_t + +/* Define as a marker that can be attached to declarations that might not + be used. This helps to reduce warnings, such as from + GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_UNUSED +#endif +/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name + is a misnomer outside of parameter lists. */ +#define _UNUSED_PARAMETER_ _GL_UNUSED + +/* The __pure__ attribute was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The __const__ attribute was added in gcc 2.95. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST /* empty */ +#endif + diff --git a/config.h.in b/config.h.in new file mode 100644 index 000000000..9e8f9911b --- /dev/null +++ b/config.h.in @@ -0,0 +1,67 @@ +#undef _LARGEFILE_SOURCE +#undef _FILE_OFFSET_BITS +#define _LARGEFILE_SOURCE +#define _FILE_OFFSET_BITS 64 +#if defined(__PPC__) && !defined(__powerpc__) +#define __powerpc__ 1 +#endif + +#define GCRYPT_NO_DEPRECATED 1 +#define HAVE_MEMMOVE 1 + +/* Define to 1 to enable disk cache statistics. */ +#define DISK_CACHE_STATS @DISK_CACHE_STATS@ +#define BOOT_TIME_STATS @BOOT_TIME_STATS@ + +/* We don't need those. */ +#define MINILZO_CFG_SKIP_LZO_PTR 1 +#define MINILZO_CFG_SKIP_LZO_UTIL 1 +#define MINILZO_CFG_SKIP_LZO_STRING 1 +#define MINILZO_CFG_SKIP_LZO_INIT 1 +#define MINILZO_CFG_SKIP_LZO1X_1_COMPRESS 1 +#define MINILZO_CFG_SKIP_LZO1X_DECOMPRESS 1 + +#if defined (GRUB_BUILD) +#undef ENABLE_NLS +#define BUILD_SIZEOF_LONG @BUILD_SIZEOF_LONG@ +#define BUILD_SIZEOF_VOID_P @BUILD_SIZEOF_VOID_P@ +#if defined __APPLE__ +# if defined __BIG_ENDIAN__ +# define BUILD_WORDS_BIGENDIAN 1 +# else +# define BUILD_WORDS_BIGENDIAN 0 +# endif +#else +#define BUILD_WORDS_BIGENDIAN @BUILD_WORDS_BIGENDIAN@ +#endif +#elif defined (GRUB_UTIL) || !defined (GRUB_MACHINE) +#include +#else +#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@ +/* Define if C symbols get an underscore after compilation. */ +#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@ +/* Define it to one of __bss_start, edata and _edata. */ +#define BSS_START_SYMBOL @BSS_START_SYMBOL@ +/* Define it to either end or _end. */ +#define END_SYMBOL @END_SYMBOL@ +/* Name of package. */ +#define PACKAGE "@PACKAGE@" +/* Version number of package. */ +#define VERSION "@VERSION@" +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "@PACKAGE_STRING@" +/* Define to the version of this package. */ +#define PACKAGE_VERSION "@PACKAGE_VERSION@" +/* Define to the full name of this package. */ +#define PACKAGE_NAME "@PACKAGE_NAME@" +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +#define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@" +#define GRUB_PLATFORM "@GRUB_PLATFORM@" + +#define RE_ENABLE_I18N 1 + +#define _GNU_SOURCE 1 + +#endif diff --git a/configure b/configure new file mode 100755 index 000000000..5a41d5fe2 --- /dev/null +++ b/configure @@ -0,0 +1,30763 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for GRUB 2.02. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-grub@gnu.org +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='GRUB' +PACKAGE_TARNAME='grub' +PACKAGE_VERSION='2.02' +PACKAGE_STRING='GRUB 2.02' +PACKAGE_BUGREPORT='bug-grub@gnu.org' +PACKAGE_URL='' + +ac_unique_file="include/grub/dl.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +gt_needs= +ac_func_list= +ac_header_list= +gl_fnmatch_required=POSIX +gl_getopt_required=POSIX +gl_getopt_required=POSIX +ac_subst_vars='gltests_LTLIBOBJS +gltests_LIBOBJS +gl_LTLIBOBJS +gl_LIBOBJS +am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +COND_HAVE_EXEC_FALSE +COND_HAVE_EXEC_TRUE +COND_STARFIELD_FALSE +COND_STARFIELD_TRUE +COND_HAVE_ASM_USCORE_FALSE +COND_HAVE_ASM_USCORE_TRUE +COND_HAVE_CXX_FALSE +COND_HAVE_CXX_TRUE +COND_ENABLE_BOOT_TIME_STATS_FALSE +COND_ENABLE_BOOT_TIME_STATS_TRUE +COND_ENABLE_CACHE_STATS_FALSE +COND_ENABLE_CACHE_STATS_TRUE +COND_ENABLE_EFIEMU_FALSE +COND_ENABLE_EFIEMU_TRUE +COND_APPLE_LINKER_FALSE +COND_APPLE_LINKER_TRUE +HAVE_FONT_SOURCE +COND_HAVE_FONT_SOURCE_FALSE +COND_HAVE_FONT_SOURCE_TRUE +COND_GRUB_MOUNT_FALSE +COND_GRUB_MOUNT_TRUE +COND_GRUB_MKFONT_FALSE +COND_GRUB_MKFONT_TRUE +COND_GRUB_EMU_PCI_FALSE +COND_GRUB_EMU_PCI_TRUE +COND_GRUB_EMU_SDL_FALSE +COND_GRUB_EMU_SDL_TRUE +COND_MAN_PAGES_FALSE +COND_MAN_PAGES_TRUE +COND_HOST_ILLUMOS_FALSE +COND_HOST_ILLUMOS_TRUE +COND_HOST_XNU_FALSE +COND_HOST_XNU_TRUE +COND_HOST_KFREEBSD_FALSE +COND_HOST_KFREEBSD_TRUE +COND_HOST_WINDOWS_FALSE +COND_HOST_WINDOWS_TRUE +COND_HOST_NETBSD_FALSE +COND_HOST_NETBSD_TRUE +COND_HOST_LINUX_FALSE +COND_HOST_LINUX_TRUE +COND_HOST_HURD_FALSE +COND_HOST_HURD_TRUE +COND_arm64_efi_FALSE +COND_arm64_efi_TRUE +COND_arm64_FALSE +COND_arm64_TRUE +COND_arm_efi_FALSE +COND_arm_efi_TRUE +COND_arm_uboot_FALSE +COND_arm_uboot_TRUE +COND_arm_FALSE +COND_arm_TRUE +COND_mipseb_FALSE +COND_mipseb_TRUE +COND_mipsel_FALSE +COND_mipsel_TRUE +COND_mips_FALSE +COND_mips_TRUE +COND_powerpc_ieee1275_FALSE +COND_powerpc_ieee1275_TRUE +COND_sparc64_emu_FALSE +COND_sparc64_emu_TRUE +COND_sparc64_ieee1275_FALSE +COND_sparc64_ieee1275_TRUE +COND_mips_arc_FALSE +COND_mips_arc_TRUE +COND_mips_qemu_mips_FALSE +COND_mips_qemu_mips_TRUE +COND_mips_loongson_FALSE +COND_mips_loongson_TRUE +COND_x86_64_xen_FALSE +COND_x86_64_xen_TRUE +COND_i386_xen_FALSE +COND_i386_xen_TRUE +COND_x86_64_efi_FALSE +COND_x86_64_efi_TRUE +COND_i386_multiboot_FALSE +COND_i386_multiboot_TRUE +COND_i386_coreboot_FALSE +COND_i386_coreboot_TRUE +COND_i386_ieee1275_FALSE +COND_i386_ieee1275_TRUE +COND_i386_qemu_FALSE +COND_i386_qemu_TRUE +COND_ia64_efi_FALSE +COND_ia64_efi_TRUE +COND_i386_efi_FALSE +COND_i386_efi_TRUE +COND_i386_pc_FALSE +COND_i386_pc_TRUE +COND_emu_FALSE +COND_emu_TRUE +COND_real_platform_FALSE +COND_real_platform_TRUE +BUILD_LIBM +HOST_CCASFLAGS +HOST_CPPFLAGS +HOST_LDFLAGS +HOST_CFLAGS +TARGET_APPLE_LINKER +TARGET_IMG_BASE_LDOPT +TARGET_IMG_CFLAGS +TARGET_IMG_LDFLAGS +TARGET_CCASFLAGS +TARGET_CPPFLAGS +TARGET_LDFLAGS +TARGET_CFLAGS +TARGET_CC_VERSION +TARGET_MODULE_FORMAT +TARGET_OBJ2ELF +TARGET_CCAS +TARGET_CPP +GRUB_PLATFORM +GRUB_TARGET_CPU +END_SYMBOL +BSS_START_SYMBOL +HAVE_ASM_USCORE +GRUB_BOOT_MACHINE_LINK_ADDR +LIBNVPAIR +LIBZFS +LIBLZMA +LIBGEOM +LIBDEVMAPPER +enable_grub_mount +FONT_SOURCE +DJVU_FONT_SOURCE +build_freetype_libs +build_freetype_cflags +BUILD_FREETYPE +BUILD_WORDS_BIGENDIAN +BUILD_SIZEOF_VOID_P +BUILD_SIZEOF_LONG +freetype_libs +freetype_cflags +enable_grub_mkfont +ac_ct_FREETYPE +FREETYPE +enable_grub_emu_pci +enable_grub_emu_sdl +LIBPCIACCESS +LIBSDL +BOOT_TIME_STATS +DISK_CACHE_STATS +TARGET_NMFLAGS_DEFINED_ONLY +TARGET_NMFLAGS_MINUS_P +TARGET_LDFLAGS_OLDMAGIC +EFIEMU64_LINK_FORMAT +enable_efiemu +TARGET_OBJCONV +BUILD_LDFLAGS +BUILD_CPPFLAGS +BUILD_CFLAGS +HOST_CC +TARGET_RANLIB +TARGET_NM +TARGET_STRIP +TARGET_OBJCOPY +ac_ct_TARGET_CC +TARGET_CC +LIBGNU_LTLIBDEPS +LIBGNU_LIBDEPS +gltests_WITNESS +REPLACE_TOWLOWER +REPLACE_ISWCNTRL +HAVE_WCTYPE_H +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H +NEXT_WCTYPE_H +HAVE_ISWCNTRL +REPLACE_ISWBLANK +HAVE_WCTRANS_T +HAVE_WCTYPE_T +HAVE_ISWBLANK +GNULIB_TOWCTRANS +GNULIB_WCTRANS +GNULIB_ISWCTYPE +GNULIB_WCTYPE +GNULIB_ISWBLANK +HAVE_WINT_T +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H +NEXT_WCHAR_H +HAVE_FEATURES_H +LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE +LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE +LIBUNISTRING_UNIWIDTH_H +LIBUNISTRING_UNITYPES_H +HAVE_UNISTD_H +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H +NEXT_UNISTD_H +GL_GENERATE_SYSEXITS_H_FALSE +GL_GENERATE_SYSEXITS_H_TRUE +SYSEXITS_H +HAVE_SYSEXITS_H +NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H +NEXT_SYSEXITS_H +WINDOWS_64_BIT_OFF_T +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H +NEXT_SYS_TYPES_H +HAVE_STRINGS_H +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H +NEXT_STRINGS_H +NEXT_AS_FIRST_DIRECTIVE_STRING_H +NEXT_STRING_H +HAVE_WINSOCK2_H +HAVE_DECL_STRNCASECMP +HAVE_STRCASECMP +HAVE_FFS +GNULIB_FFS +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H +NEXT_STDLIB_H +NEXT_AS_FIRST_DIRECTIVE_STDIO_H +NEXT_STDIO_H +GL_GENERATE_STDINT_H_FALSE +GL_GENERATE_STDINT_H_TRUE +STDINT_H +WINT_T_SUFFIX +WCHAR_T_SUFFIX +SIG_ATOMIC_T_SUFFIX +SIZE_T_SUFFIX +PTRDIFF_T_SUFFIX +HAVE_SIGNED_WINT_T +HAVE_SIGNED_WCHAR_T +HAVE_SIGNED_SIG_ATOMIC_T +BITSIZEOF_WINT_T +BITSIZEOF_WCHAR_T +BITSIZEOF_SIG_ATOMIC_T +BITSIZEOF_SIZE_T +BITSIZEOF_PTRDIFF_T +HAVE_SYS_BITYPES_H +HAVE_SYS_INTTYPES_H +HAVE_STDINT_H +NEXT_AS_FIRST_DIRECTIVE_STDINT_H +NEXT_STDINT_H +HAVE_SYS_TYPES_H +HAVE_INTTYPES_H +HAVE_WCHAR_H +HAVE_UNSIGNED_LONG_LONG_INT +HAVE_LONG_LONG_INT +HAVE__BOOL +GL_GENERATE_STDBOOL_H_FALSE +GL_GENERATE_STDBOOL_H_TRUE +STDBOOL_H +GL_GENERATE_STDALIGN_H_FALSE +GL_GENERATE_STDALIGN_H_TRUE +STDALIGN_H +APPLE_UNIVERSAL_BUILD +HAVE_MSVC_INVALID_PARAMETER_HANDLER +UNDEFINE_STRTOK_R +REPLACE_STRTOK_R +REPLACE_STRSIGNAL +REPLACE_STRNLEN +REPLACE_STRNDUP +REPLACE_STRNCAT +REPLACE_STRERROR_R +REPLACE_STRERROR +REPLACE_STRCHRNUL +REPLACE_STRCASESTR +REPLACE_STRSTR +REPLACE_STRDUP +REPLACE_STPNCPY +REPLACE_MEMMEM +REPLACE_MEMCHR +HAVE_STRVERSCMP +HAVE_DECL_STRSIGNAL +HAVE_DECL_STRERROR_R +HAVE_DECL_STRTOK_R +HAVE_STRCASESTR +HAVE_STRSEP +HAVE_STRPBRK +HAVE_DECL_STRNLEN +HAVE_DECL_STRNDUP +HAVE_DECL_STRDUP +HAVE_STRCHRNUL +HAVE_STPNCPY +HAVE_STPCPY +HAVE_RAWMEMCHR +HAVE_DECL_MEMRCHR +HAVE_MEMPCPY +HAVE_DECL_MEMMEM +HAVE_MEMCHR +HAVE_FFSLL +HAVE_FFSL +HAVE_MBSLEN +GNULIB_STRVERSCMP +GNULIB_STRSIGNAL +GNULIB_STRERROR_R +GNULIB_STRERROR +GNULIB_MBSTOK_R +GNULIB_MBSSEP +GNULIB_MBSSPN +GNULIB_MBSPBRK +GNULIB_MBSCSPN +GNULIB_MBSCASESTR +GNULIB_MBSPCASECMP +GNULIB_MBSNCASECMP +GNULIB_MBSCASECMP +GNULIB_MBSSTR +GNULIB_MBSRCHR +GNULIB_MBSCHR +GNULIB_MBSNLEN +GNULIB_MBSLEN +GNULIB_STRTOK_R +GNULIB_STRCASESTR +GNULIB_STRSTR +GNULIB_STRSEP +GNULIB_STRPBRK +GNULIB_STRNLEN +GNULIB_STRNDUP +GNULIB_STRNCAT +GNULIB_STRDUP +GNULIB_STRCHRNUL +GNULIB_STPNCPY +GNULIB_STPCPY +GNULIB_RAWMEMCHR +GNULIB_MEMRCHR +GNULIB_MEMPCPY +GNULIB_MEMMEM +GNULIB_MEMCHR +GNULIB_FFSLL +GNULIB_FFSL +LOCALE_FR_UTF8 +LOCALE_ZH_CN +LOCALE_JA +REPLACE_WCTOMB +REPLACE_UNSETENV +REPLACE_STRTOD +REPLACE_SETENV +REPLACE_REALPATH +REPLACE_REALLOC +REPLACE_RANDOM_R +REPLACE_PUTENV +REPLACE_PTSNAME_R +REPLACE_PTSNAME +REPLACE_MKSTEMP +REPLACE_MBTOWC +REPLACE_MALLOC +REPLACE_CANONICALIZE_FILE_NAME +REPLACE_CALLOC +HAVE_DECL_UNSETENV +HAVE_UNLOCKPT +HAVE_SYS_LOADAVG_H +HAVE_STRUCT_RANDOM_DATA +HAVE_STRTOULL +HAVE_STRTOLL +HAVE_STRTOD +HAVE_DECL_SETENV +HAVE_SETENV +HAVE_SECURE_GETENV +HAVE_RPMATCH +HAVE_REALPATH +HAVE_RANDOM_R +HAVE_RANDOM_H +HAVE_RANDOM +HAVE_PTSNAME_R +HAVE_PTSNAME +HAVE_POSIX_OPENPT +HAVE_MKSTEMPS +HAVE_MKSTEMP +HAVE_MKOSTEMPS +HAVE_MKOSTEMP +HAVE_MKDTEMP +HAVE_GRANTPT +HAVE_GETSUBOPT +HAVE_DECL_GETLOADAVG +HAVE_CANONICALIZE_FILE_NAME +HAVE_ATOLL +HAVE__EXIT +GNULIB_WCTOMB +GNULIB_UNSETENV +GNULIB_UNLOCKPT +GNULIB_SYSTEM_POSIX +GNULIB_STRTOULL +GNULIB_STRTOLL +GNULIB_STRTOD +GNULIB_SETENV +GNULIB_SECURE_GETENV +GNULIB_RPMATCH +GNULIB_REALPATH +GNULIB_REALLOC_POSIX +GNULIB_RANDOM_R +GNULIB_RANDOM +GNULIB_PUTENV +GNULIB_PTSNAME_R +GNULIB_PTSNAME +GNULIB_POSIX_OPENPT +GNULIB_MKSTEMPS +GNULIB_MKSTEMP +GNULIB_MKOSTEMPS +GNULIB_MKOSTEMP +GNULIB_MKDTEMP +GNULIB_MBTOWC +GNULIB_MALLOC_POSIX +GNULIB_GRANTPT +GNULIB_GETSUBOPT +GNULIB_GETLOADAVG +GNULIB_CANONICALIZE_FILE_NAME +GNULIB_CALLOC_POSIX +GNULIB_ATOLL +GNULIB__EXIT +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H +NEXT_LOCALE_H +HAVE_XLOCALE_H +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H +NEXT_STDDEF_H +GL_GENERATE_STDDEF_H_FALSE +GL_GENERATE_STDDEF_H_TRUE +STDDEF_H +HAVE_WCHAR_T +REPLACE_NULL +REPLACE_STRUCT_LCONV +REPLACE_DUPLOCALE +REPLACE_SETLOCALE +REPLACE_LOCALECONV +HAVE_DUPLOCALE +GNULIB_DUPLOCALE +GNULIB_SETLOCALE +GNULIB_LOCALECONV +LOCALCHARSET_TESTS_ENVIRONMENT +GLIBC21 +HAVE_LANGINFO_YESEXPR +HAVE_LANGINFO_ERA +HAVE_LANGINFO_T_FMT_AMPM +HAVE_LANGINFO_CODESET +HAVE_LANGINFO_H +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H +NEXT_LANGINFO_H +REPLACE_NL_LANGINFO +HAVE_NL_LANGINFO +GNULIB_NL_LANGINFO +GNULIB_GL_UNISTD_H_GETOPT +GETOPT_H +HAVE_GETOPT_H +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H +NEXT_GETOPT_H +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS +UNISTD_H_HAVE_WINSOCK2_H +REPLACE_WRITE +REPLACE_USLEEP +REPLACE_UNLINKAT +REPLACE_UNLINK +REPLACE_TTYNAME_R +REPLACE_SYMLINK +REPLACE_SLEEP +REPLACE_RMDIR +REPLACE_READLINK +REPLACE_READ +REPLACE_PWRITE +REPLACE_PREAD +REPLACE_LSEEK +REPLACE_LINKAT +REPLACE_LINK +REPLACE_LCHOWN +REPLACE_ISATTY +REPLACE_GETPAGESIZE +REPLACE_GETGROUPS +REPLACE_GETLOGIN_R +REPLACE_GETDOMAINNAME +REPLACE_GETCWD +REPLACE_FTRUNCATE +REPLACE_FCHOWNAT +REPLACE_DUP2 +REPLACE_DUP +REPLACE_CLOSE +REPLACE_CHOWN +HAVE_SYS_PARAM_H +HAVE_OS_H +HAVE_DECL_TTYNAME_R +HAVE_DECL_SETHOSTNAME +HAVE_DECL_GETUSERSHELL +HAVE_DECL_GETPAGESIZE +HAVE_DECL_GETLOGIN_R +HAVE_DECL_GETDOMAINNAME +HAVE_DECL_FDATASYNC +HAVE_DECL_FCHDIR +HAVE_DECL_ENVIRON +HAVE_USLEEP +HAVE_UNLINKAT +HAVE_SYMLINKAT +HAVE_SYMLINK +HAVE_SLEEP +HAVE_SETHOSTNAME +HAVE_READLINKAT +HAVE_READLINK +HAVE_PWRITE +HAVE_PREAD +HAVE_PIPE2 +HAVE_PIPE +HAVE_LINKAT +HAVE_LINK +HAVE_LCHOWN +HAVE_GROUP_MEMBER +HAVE_GETPAGESIZE +HAVE_GETLOGIN +HAVE_GETHOSTNAME +HAVE_GETGROUPS +HAVE_GETDTABLESIZE +HAVE_FTRUNCATE +HAVE_FSYNC +HAVE_FDATASYNC +HAVE_FCHOWNAT +HAVE_FCHDIR +HAVE_FACCESSAT +HAVE_EUIDACCESS +HAVE_DUP3 +HAVE_DUP2 +HAVE_CHOWN +GNULIB_WRITE +GNULIB_USLEEP +GNULIB_UNLINKAT +GNULIB_UNLINK +GNULIB_UNISTD_H_SIGPIPE +GNULIB_UNISTD_H_NONBLOCKING +GNULIB_TTYNAME_R +GNULIB_SYMLINKAT +GNULIB_SYMLINK +GNULIB_SLEEP +GNULIB_SETHOSTNAME +GNULIB_RMDIR +GNULIB_READLINKAT +GNULIB_READLINK +GNULIB_READ +GNULIB_PWRITE +GNULIB_PREAD +GNULIB_PIPE2 +GNULIB_PIPE +GNULIB_LSEEK +GNULIB_LINKAT +GNULIB_LINK +GNULIB_LCHOWN +GNULIB_ISATTY +GNULIB_GROUP_MEMBER +GNULIB_GETUSERSHELL +GNULIB_GETPAGESIZE +GNULIB_GETLOGIN_R +GNULIB_GETLOGIN +GNULIB_GETHOSTNAME +GNULIB_GETGROUPS +GNULIB_GETDTABLESIZE +GNULIB_GETDOMAINNAME +GNULIB_GETCWD +GNULIB_FTRUNCATE +GNULIB_FSYNC +GNULIB_FDATASYNC +GNULIB_FCHOWNAT +GNULIB_FCHDIR +GNULIB_FACCESSAT +GNULIB_EUIDACCESS +GNULIB_ENVIRON +GNULIB_DUP3 +GNULIB_DUP2 +GNULIB_DUP +GNULIB_CLOSE +GNULIB_CHOWN +GNULIB_CHDIR +REPLACE_VSPRINTF +REPLACE_VSNPRINTF +REPLACE_VPRINTF +REPLACE_VFPRINTF +REPLACE_VDPRINTF +REPLACE_VASPRINTF +REPLACE_TMPFILE +REPLACE_STDIO_WRITE_FUNCS +REPLACE_STDIO_READ_FUNCS +REPLACE_SPRINTF +REPLACE_SNPRINTF +REPLACE_RENAMEAT +REPLACE_RENAME +REPLACE_REMOVE +REPLACE_PRINTF +REPLACE_POPEN +REPLACE_PERROR +REPLACE_OBSTACK_PRINTF +REPLACE_GETLINE +REPLACE_GETDELIM +REPLACE_FTELLO +REPLACE_FTELL +REPLACE_FSEEKO +REPLACE_FSEEK +REPLACE_FREOPEN +REPLACE_FPURGE +REPLACE_FPRINTF +REPLACE_FOPEN +REPLACE_FFLUSH +REPLACE_FDOPEN +REPLACE_FCLOSE +REPLACE_DPRINTF +HAVE_VDPRINTF +HAVE_VASPRINTF +HAVE_RENAMEAT +HAVE_POPEN +HAVE_PCLOSE +HAVE_FTELLO +HAVE_FSEEKO +HAVE_DPRINTF +HAVE_DECL_VSNPRINTF +HAVE_DECL_SNPRINTF +HAVE_DECL_OBSTACK_PRINTF +HAVE_DECL_GETLINE +HAVE_DECL_GETDELIM +HAVE_DECL_FTELLO +HAVE_DECL_FSEEKO +HAVE_DECL_FPURGE +GNULIB_VSPRINTF_POSIX +GNULIB_VSNPRINTF +GNULIB_VPRINTF_POSIX +GNULIB_VPRINTF +GNULIB_VFPRINTF_POSIX +GNULIB_VFPRINTF +GNULIB_VDPRINTF +GNULIB_VSCANF +GNULIB_VFSCANF +GNULIB_VASPRINTF +GNULIB_TMPFILE +GNULIB_STDIO_H_SIGPIPE +GNULIB_STDIO_H_NONBLOCKING +GNULIB_SPRINTF_POSIX +GNULIB_SNPRINTF +GNULIB_SCANF +GNULIB_RENAMEAT +GNULIB_RENAME +GNULIB_REMOVE +GNULIB_PUTS +GNULIB_PUTCHAR +GNULIB_PUTC +GNULIB_PRINTF_POSIX +GNULIB_PRINTF +GNULIB_POPEN +GNULIB_PERROR +GNULIB_PCLOSE +GNULIB_OBSTACK_PRINTF_POSIX +GNULIB_OBSTACK_PRINTF +GNULIB_GETLINE +GNULIB_GETDELIM +GNULIB_GETCHAR +GNULIB_GETC +GNULIB_FWRITE +GNULIB_FTELLO +GNULIB_FTELL +GNULIB_FSEEKO +GNULIB_FSEEK +GNULIB_FSCANF +GNULIB_FREOPEN +GNULIB_FREAD +GNULIB_FPUTS +GNULIB_FPUTC +GNULIB_FPURGE +GNULIB_FPRINTF_POSIX +GNULIB_FPRINTF +GNULIB_FOPEN +GNULIB_FGETS +GNULIB_FGETC +GNULIB_FFLUSH +GNULIB_FDOPEN +GNULIB_FCLOSE +GNULIB_DPRINTF +GL_GENERATE_FNMATCH_H_FALSE +GL_GENERATE_FNMATCH_H_TRUE +FNMATCH_H +REPLACE_ITOLD +GL_GENERATE_FLOAT_H_FALSE +GL_GENERATE_FLOAT_H_TRUE +FLOAT_H +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H +NEXT_FLOAT_H +EOVERFLOW_VALUE +EOVERFLOW_HIDDEN +ENOLINK_VALUE +ENOLINK_HIDDEN +EMULTIHOP_VALUE +EMULTIHOP_HIDDEN +GL_GENERATE_ERRNO_H_FALSE +GL_GENERATE_ERRNO_H_TRUE +ERRNO_H +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H +NEXT_ERRNO_H +PRAGMA_COLUMNS +PRAGMA_SYSTEM_HEADER +INCLUDE_NEXT_AS_FIRST_DIRECTIVE +INCLUDE_NEXT +pkglibexecdir +lispdir +LOCALE_FR +REPLACE_WCSWIDTH +REPLACE_WCWIDTH +REPLACE_WCSNRTOMBS +REPLACE_WCSRTOMBS +REPLACE_WCRTOMB +REPLACE_MBSNRTOWCS +REPLACE_MBSRTOWCS +REPLACE_MBRLEN +REPLACE_MBRTOWC +REPLACE_MBSINIT +REPLACE_WCTOB +REPLACE_BTOWC +REPLACE_MBSTATE_T +HAVE_DECL_WCWIDTH +HAVE_DECL_WCTOB +HAVE_WCSWIDTH +HAVE_WCSTOK +HAVE_WCSSTR +HAVE_WCSPBRK +HAVE_WCSSPN +HAVE_WCSCSPN +HAVE_WCSRCHR +HAVE_WCSCHR +HAVE_WCSDUP +HAVE_WCSXFRM +HAVE_WCSCOLL +HAVE_WCSNCASECMP +HAVE_WCSCASECMP +HAVE_WCSNCMP +HAVE_WCSCMP +HAVE_WCSNCAT +HAVE_WCSCAT +HAVE_WCPNCPY +HAVE_WCSNCPY +HAVE_WCPCPY +HAVE_WCSCPY +HAVE_WCSNLEN +HAVE_WCSLEN +HAVE_WMEMSET +HAVE_WMEMMOVE +HAVE_WMEMCPY +HAVE_WMEMCMP +HAVE_WMEMCHR +HAVE_WCSNRTOMBS +HAVE_WCSRTOMBS +HAVE_WCRTOMB +HAVE_MBSNRTOWCS +HAVE_MBSRTOWCS +HAVE_MBRLEN +HAVE_MBRTOWC +HAVE_MBSINIT +HAVE_BTOWC +GNULIB_WCSWIDTH +GNULIB_WCSTOK +GNULIB_WCSSTR +GNULIB_WCSPBRK +GNULIB_WCSSPN +GNULIB_WCSCSPN +GNULIB_WCSRCHR +GNULIB_WCSCHR +GNULIB_WCSDUP +GNULIB_WCSXFRM +GNULIB_WCSCOLL +GNULIB_WCSNCASECMP +GNULIB_WCSCASECMP +GNULIB_WCSNCMP +GNULIB_WCSCMP +GNULIB_WCSNCAT +GNULIB_WCSCAT +GNULIB_WCPNCPY +GNULIB_WCSNCPY +GNULIB_WCPCPY +GNULIB_WCSCPY +GNULIB_WCSNLEN +GNULIB_WCSLEN +GNULIB_WMEMSET +GNULIB_WMEMMOVE +GNULIB_WMEMCPY +GNULIB_WMEMCMP +GNULIB_WMEMCHR +GNULIB_WCWIDTH +GNULIB_WCSNRTOMBS +GNULIB_WCSRTOMBS +GNULIB_WCRTOMB +GNULIB_MBSNRTOWCS +GNULIB_MBSRTOWCS +GNULIB_MBRLEN +GNULIB_MBRTOWC +GNULIB_MBSINIT +GNULIB_WCTOB +GNULIB_BTOWC +GL_GENERATE_ALLOCA_H_FALSE +GL_GENERATE_ALLOCA_H_TRUE +ALLOCA_H +ALLOCA +GL_COND_LIBTOOL_FALSE +GL_COND_LIBTOOL_TRUE +BUILD_EXEEXT +BUILD_CC +LIBUTIL +HELP2MAN +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +HAVE_CXX +am__fastdepCCAS_FALSE +am__fastdepCCAS_TRUE +CCASDEPMODE +CCASFLAGS +CCAS +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +ARFLAGS +AR +EGREP +GREP +CPP +LN_S +YFLAGS +LEXLIB +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +LEX_OUTPUT_ROOT +LEX +RANLIB +YACC +CMP +grubdirname +bootdirname +platform +host_kernel +TARGET_DECOMPRESSOR_LINK_ADDR +TARGET_LINK_ADDR +grub_file +grub_render_label +grub_sparc64_setup +grub_set_default +grub_script_check +grub_reboot +grub_probe +grub_mkrescue +grub_mkrelpath +grub_mkpasswd_pbkdf2 +grub_mklayout +grub_glue_efi +grub_mkimage +grub_mkfont +grub_mkconfig +grub_install +grub_editenv +grub_bios_setup +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +with_platform +with_bootdir +with_grubdir +enable_dependency_tracking +enable_nls +with_gnu_ld +enable_rpath +with_libiconv_prefix +with_libintl_prefix +enable_largefile +with_included_regex +enable_efiemu +enable_mm_debug +enable_cache_stats +enable_boot_time +enable_grub_emu_sdl +enable_grub_emu_pci +enable_grub_mkfont +enable_grub_themes +enable_grub_mount +enable_device_mapper +enable_liblzma +enable_libzfs +enable_werror +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +YACC +YFLAGS +CPP +CXX +CXXFLAGS +CCC +CCAS +CCASFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures GRUB 2.02 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/grub] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of GRUB 2.02:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-nls do not use Native Language Support + --disable-rpath do not hardcode runtime library paths + --disable-largefile omit support for large files + --enable-efiemu build and install the efiemu runtimes + (default=guessed) + --enable-mm-debug include memory manager debugging + --enable-cache-stats enable disk cache statistics collection + --enable-boot-time enable boot time statistics collection + --enable-grub-emu-sdl build and install the `grub-emu' debugging utility + with SDL support (default=guessed) + --enable-grub-emu-pci build and install the `grub-emu' debugging utility + with PCI support (potentially dangerous) + (default=no) + --enable-grub-mkfont build and install the `grub-mkfont' utility + (default=guessed) + --enable-grub-themes build and install GRUB themes (default=guessed) + --enable-grub-mount build and install the `grub-mount' utility + (default=guessed) + --enable-device-mapper enable Linux device-mapper support (default=guessed) + --enable-liblzma enable liblzma integration (default=guessed) + --enable-libzfs enable libzfs integration (default=guessed) + --disable-werror do not use -Werror when building GRUB + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-platform=PLATFORM + select the host platform [[guessed]] + --with-bootdir=DIR set the name of /boot directory [[guessed]] + --with-grubdir=DIR set the name of grub directory [[guessed]] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + --without-included-regex + don't compile regex; this is the default on systems + with recent-enough versions of the GNU C Library + (use with caution on other systems). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + YACC The `Yet Another Compiler Compiler' implementation to use. + Defaults to the first program found out of: `bison -y', `byacc', + `yacc'. + YFLAGS The list of arguments that will be passed by default to $YACC. + This script will default YFLAGS to the empty string to avoid a + default value of `-d' given by some make applications. + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CCAS assembler compiler command (defaults to CC) + CCASFLAGS assembler compiler flags (defaults to CFLAGS) + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +GRUB configure 2.02 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ------------------------------- ## +## Report this to bug-grub@gnu.org ## +## ------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main (void) +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main (void) +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main (void) +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main (void) +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GRUB $as_me 2.02, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +gt_needs="$gt_needs " +as_fn_append ac_func_list " flockfile" +as_fn_append ac_func_list " funlockfile" +as_fn_append ac_header_list " features.h" +as_fn_append ac_header_list " linewrap.h" +as_fn_append ac_func_list " btowc" +as_fn_append ac_func_list " isblank" +as_fn_append ac_func_list " iswctype" +as_fn_append ac_func_list " mbsrtowcs" +as_fn_append ac_func_list " mempcpy" +as_fn_append ac_func_list " wmemchr" +as_fn_append ac_func_list " wmemcpy" +as_fn_append ac_func_list " wmempcpy" +as_fn_append ac_header_list " wctype.h" +as_fn_append ac_func_list " getdelim" +gl_getopt_required=GNU +as_fn_append ac_header_list " getopt.h" +as_fn_append ac_header_list " langinfo.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_func_list " symlink" +as_fn_append ac_header_list " xlocale.h" +as_fn_append ac_func_list " mbsinit" +as_fn_append ac_func_list " mbrtowc" +as_fn_append ac_header_list " wchar.h" +as_fn_append ac_func_list " isascii" +as_fn_append ac_header_list " sys/mman.h" +as_fn_append ac_func_list " mprotect" +as_fn_append ac_func_list " _set_invalid_parameter_handler" +as_fn_append ac_func_list " nl_langinfo" +as_fn_append ac_func_list " wcscoll" +as_fn_append ac_func_list " sleep" +as_fn_append ac_header_list " stdint.h" +as_fn_append ac_header_list " sys/socket.h" +as_fn_append ac_header_list " strings.h" +as_fn_append ac_func_list " strndup" +as_fn_append ac_header_list " sysexits.h" +as_fn_append ac_func_list " vasnprintf" +as_fn_append ac_func_list " snprintf" +as_fn_append ac_func_list " wcrtomb" +as_fn_append ac_func_list " iswcntrl" +as_fn_append ac_func_list " wcwidth" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +# We don't want -g -O2 by default in CFLAGS +: ${CFLAGS=""} + +# Checks for build, host and target systems. +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +save_program_prefix="${program_prefix}" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +program_prefix="${save_program_prefix}" + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='grub' + VERSION='2.02' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + + + +ac_config_headers="$ac_config_headers config-util.h" + + +# Program name transformations + +grub_bios_setup=`$as_echo grub-bios-setup | sed "$program_transform_name"` + +grub_editenv=`$as_echo grub-editenv | sed "$program_transform_name"` + +grub_install=`$as_echo grub-install | sed "$program_transform_name"` + +grub_mkconfig=`$as_echo grub-mkconfig | sed "$program_transform_name"` + +grub_mkfont=`$as_echo grub-mkfont | sed "$program_transform_name"` + +grub_mkimage=`$as_echo grub-mkimage | sed "$program_transform_name"` + +grub_glue_efi=`$as_echo grub-glue-efi | sed "$program_transform_name"` + +grub_mklayout=`$as_echo grub-mklayout | sed "$program_transform_name"` + +grub_mkpasswd_pbkdf2=`$as_echo grub-mkpasswd-pbkdf2 | sed "$program_transform_name"` + +grub_mkrelpath=`$as_echo grub-mkrelpath | sed "$program_transform_name"` + +grub_mkrescue=`$as_echo grub-mkrescue | sed "$program_transform_name"` + +grub_probe=`$as_echo grub-probe | sed "$program_transform_name"` + +grub_reboot=`$as_echo grub-reboot | sed "$program_transform_name"` + +grub_script_check=`$as_echo grub-script-check | sed "$program_transform_name"` + +grub_set_default=`$as_echo grub-set-default | sed "$program_transform_name"` + +grub_sparc64_setup=`$as_echo grub-sparc64-setup | sed "$program_transform_name"` + +grub_render_label=`$as_echo grub-render-label | sed "$program_transform_name"` + +grub_file=`$as_echo grub-file | sed "$program_transform_name"` + + +# Optimization flag. Allow user to override. +if test "x$TARGET_CFLAGS" = x; then + TARGET_CFLAGS="$TARGET_CFLAGS -Os" +fi + +# Default HOST_CPPFLAGS +HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1" + +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W" + +case "$target_cpu" in + i[3456]86) target_cpu=i386 ;; + amd64) target_cpu=x86_64 ;; + sparc) target_cpu=sparc64 ;; + mipsel|mips64el) + target_cpu=mipsel + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1" + ;; + mips|mips64) + target_cpu=mips + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1" + ;; + arm*) + target_cpu=arm + ;; + aarch64*) + target_cpu=arm64 + ;; +esac + +# Specify the platform (such as firmware). + +# Check whether --with-platform was given. +if test "${with_platform+set}" = set; then : + withval=$with_platform; +fi + + +# Guess the platform if not specified. +if test "x$with_platform" = x; then + case "$target_cpu"-"$target_vendor" in + i386-apple) platform=efi ;; + i386-*) platform=pc ;; + x86_64-apple) platform=efi ;; + x86_64-*) platform=pc ;; + powerpc-*) platform=ieee1275 ;; + powerpc64-*) platform=ieee1275 ;; + powerpc64le-*) platform=ieee1275 ;; + sparc64-*) platform=ieee1275 ;; + mipsel-*) platform=loongson ;; + mips-*) platform=arc ;; + ia64-*) platform=efi ;; + arm-*) platform=uboot ;; + arm64-*) platform=efi ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unsupported CPU: \"$target_cpu\" - only building utilities" >&5 +$as_echo "$as_me: WARNING: unsupported CPU: \"$target_cpu\" - only building utilities" >&2;} + platform=none + ;; + esac +else + platform="$with_platform" +fi + +case "$target_cpu"-"$platform" in + x86_64-efi) ;; + x86_64-emu) ;; + x86_64-xen) ;; + x86_64-none) ;; + x86_64-*) target_cpu=i386 ;; + powerpc64-ieee1275) target_cpu=powerpc ;; + powerpc64le-ieee1275) target_cpu=powerpc ;; +esac + +# Check if the platform is supported, make final adjustments. +case "$target_cpu"-"$platform" in + i386-efi) ;; + x86_64-efi) ;; + i386-xen) ;; + x86_64-xen) ;; + i386-pc) ;; + i386-multiboot) ;; + i386-coreboot) ;; + i386-linuxbios) platform=coreboot ;; + i386-ieee1275) ;; + i386-qemu) ;; + powerpc-ieee1275) ;; + sparc64-ieee1275) ;; + ia64-efi) ;; + mips-qemu_mips) ;; + mips-qemu-mips) platform=qemu_mips;; + mips-arc) ;; + mipsel-arc) ;; + mipsel-qemu_mips) ;; + mipsel-qemu-mips) platform=qemu_mips;; + mipsel-yeeloong) platform=loongson ;; + mipsel-fuloong) platform=loongson ;; + mipsel-loongson) ;; + arm-uboot) ;; + arm-efi) ;; + arm64-efi) ;; + *-emu) ;; + *-none) ;; + *) as_fn_error $? "platform \"$platform\" is not supported for target CPU \"$target_cpu\"" "$LINENO" 5 ;; +esac + +if test x$platform != xemu ; then + case "$target_cpu" in + i386 | powerpc) target_m32=1 ;; + x86_64 | sparc64) target_m64=1 ;; + esac +fi + +if test x"$target_cpu-$platform" = xsparc64-emu ; then + target_m64=1 +fi + +case "$target_os" in + windows* | mingw32*) target_os=cygwin ;; +esac + +# This normalizes the names, and creates a new variable ("host_kernel") +# while at it, since the mapping is not always 1:1 (e.g. different OSes +# using the same kernel type). +case "$host_os" in + gnu*) host_kernel=hurd ;; + linux*) host_kernel=linux ;; + freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;; + netbsd*) host_kernel=netbsd ;; + solaris*) host_kernel=illumos ;; + darwin*) host_kernel=xnu ;; + cygwin | windows* | mingw32*) host_kernel=windows ;; +esac + +case "$host_os" in + cygwin | windows* | mingw32*) have_exec=n ;; + aros*) have_exec=n ;; + *) have_exec=y;; +esac + +case "$platform" in + coreboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;; + xen) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;; + ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;; + uboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;; + qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;; + loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;; + qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;; + arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;; +esac +if test x${target_cpu} = xmipsel ; then + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +else + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +fi + +case "${target_cpu}-$platform" in + mips-arc) + TARGET_LINK_ADDR=0x88200000 + TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000 + ;; + mipsel-arc) + TARGET_LINK_ADDR=0x80700000 + TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000 + ;; + mips*-qemu_mips | mips*-loongson) + TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000 + ;; +esac + + + + +TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS" + + + + + + + + +# Define default variables + +have_with_bootdir=n + +# Check whether --with-bootdir was given. +if test "${with_bootdir+set}" = set; then : + withval=$with_bootdir; have_with_bootdir=y +else + have_with_bootdir=n +fi + +if test x$have_with_bootdir = xy; then + bootdirname="$with_bootdir" +else + case "$host_os" in + netbsd* | openbsd*) + # Because /boot is used for the boot block in NetBSD and OpenBSD, + bootdirname='' ;; + *) bootdirname='boot' ;; + esac +fi + + + +cat >>confdefs.h <<_ACEOF +#define GRUB_BOOT_DIR_NAME "$bootdirname" +_ACEOF + + + +# Check whether --with-grubdir was given. +if test "${with_grubdir+set}" = set; then : + withval=$with_grubdir; grubdirname="$with_grubdir" +else + grubdirname="$PACKAGE" +fi + + + + +cat >>confdefs.h <<_ACEOF +#define GRUB_DIR_NAME "$grubdirname" +_ACEOF + + +# +# Checks for build programs. +# + +# Although cmp is listed in the GNU Coding Standards as a command which +# can used directly, OpenBSD lacks cmp in the default installation. +for ac_prog in cmp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CMP"; then + ac_cv_prog_CMP="$CMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CMP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CMP=$ac_cv_prog_CMP +if test -n "$CMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CMP" >&5 +$as_echo "$CMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CMP" && break +done + +if test "x$CMP" = x; then + as_fn_error $? "cmp is not found" "$LINENO" 5 +fi + +for ac_prog in bison +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_YACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_YACC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +YACC=$ac_cv_prog_YACC +if test -n "$YACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +$as_echo "$YACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$YACC" && break +done + +if test "x$YACC" = x; then + as_fn_error $? "bison is not found" "$LINENO" 5 +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main (void) +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +for ac_prog in flex lex +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LEX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LEX"; then + ac_cv_prog_LEX="$LEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LEX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LEX=$ac_cv_prog_LEX +if test -n "$LEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 +$as_echo "$LEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$LEX" && break +done +test -n "$LEX" || LEX=":" + +if test "x$LEX" != "x:"; then + cat >conftest.l <<_ACEOF +%% +a { ECHO; } +b { REJECT; } +c { yymore (); } +d { yyless (1); } +e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ + yyless ((input () != 0)); } +f { unput (yytext[0]); } +. { BEGIN INITIAL; } +%% +#ifdef YYTEXT_POINTER +extern char *yytext; +#endif +int +main (void) +{ + return ! yylex () + ! yywrap (); +} +_ACEOF +{ { ac_try="$LEX conftest.l" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$LEX conftest.l") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 +$as_echo_n "checking lex output file root... " >&6; } +if ${ac_cv_prog_lex_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + +if test -f lex.yy.c; then + ac_cv_prog_lex_root=lex.yy +elif test -f lexyy.c; then + ac_cv_prog_lex_root=lexyy +else + as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 +$as_echo "$ac_cv_prog_lex_root" >&6; } +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root + +if test -z "${LEXLIB+set}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 +$as_echo_n "checking lex library... " >&6; } +if ${ac_cv_lib_lex+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_save_LIBS=$LIBS + ac_cv_lib_lex='none needed' + for ac_lib in '' -lfl -ll; do + LIBS="$ac_lib $ac_save_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +`cat $LEX_OUTPUT_ROOT.c` +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lex=$ac_lib +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + test "$ac_cv_lib_lex" != 'none needed' && break + done + LIBS=$ac_save_LIBS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 +$as_echo "$ac_cv_lib_lex" >&6; } + test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 +$as_echo_n "checking whether yytext is a pointer... " >&6; } +if ${ac_cv_prog_lex_yytext_pointer+:} false; then : + $as_echo_n "(cached) " >&6 +else + # POSIX says lex can declare yytext either as a pointer or an array; the +# default is implementation-dependent. Figure out which it is, since +# not all implementations provide the %pointer and %array declarations. +ac_cv_prog_lex_yytext_pointer=no +ac_save_LIBS=$LIBS +LIBS="$LEXLIB $ac_save_LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define YYTEXT_POINTER 1 +`cat $LEX_OUTPUT_ROOT.c` +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_prog_lex_yytext_pointer=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_save_LIBS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 +$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } +if test $ac_cv_prog_lex_yytext_pointer = yes; then + +$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h + +fi +rm -f conftest.l $LEX_OUTPUT_ROOT.c + +fi +for ac_prog in 'bison -y' byacc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_YACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_YACC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +YACC=$ac_cv_prog_YACC +if test -n "$YACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +$as_echo "$YACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$YACC" && break +done +test -n "$YACC" || YACC="yacc" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + + +if test "x$LEX" = "x:"; then + as_fn_error $? "flex is not found" "$LINENO" 5 +else + version=`$LEX --version | $AWK '{ split($2,x,"."); print x[1]*10000+x[2]*100+x[3]; }'` + if test -n "$version" -a "$version" -ge 20535; then + : + else + as_fn_error $? "flex is too old. GRUB requires 2.5.35 or above" "$LINENO" 5 + fi +fi + +# These are not a "must". +for ac_prog in makeinfo true +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MAKEINFO+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAKEINFO in + [\\/]* | ?:[\\/]*) + ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MAKEINFO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MAKEINFO=$ac_cv_path_MAKEINFO +if test -n "$MAKEINFO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 +$as_echo "$MAKEINFO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MAKEINFO" && break +done + + +# +# Checks for host programs. +# + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main (void) +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 +$as_echo_n "checking for Minix Amsterdam compiler... " >&6; } +if ${gl_cv_c_amsterdam_compiler+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __ACK__ +Amsterdam +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Amsterdam" >/dev/null 2>&1; then : + gl_cv_c_amsterdam_compiler=yes +else + gl_cv_c_amsterdam_compiler=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 +$as_echo "$gl_cv_c_amsterdam_compiler" >&6; } + if test -z "$AR"; then + if test $gl_cv_c_amsterdam_compiler = yes; then + AR='cc -c.a' + if test -z "$ARFLAGS"; then + ARFLAGS='-o' + fi + else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="ar" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test -z "$ARFLAGS"; then + ARFLAGS='cru' + fi + fi + else + if test -z "$ARFLAGS"; then + ARFLAGS='cru' + fi + fi + + + if test -z "$RANLIB"; then + if test $gl_cv_c_amsterdam_compiler = yes; then + RANLIB=':' + else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + fi + fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + +$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 +$as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; } +if ${ac_cv_should_define__xopen_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_should_define__xopen_source=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + mbstate_t x; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define _XOPEN_SOURCE 500 + #include + mbstate_t x; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_should_define__xopen_source=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 +$as_echo "$ac_cv_should_define__xopen_source" >&6; } + test $ac_cv_should_define__xopen_source = yes && + $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h + + + + + + + + + + + + # Code from module alloca: + # Code from module alloca-opt: + # Code from module argp: + # Code from module btowc: + # Code from module configmake: + # Code from module dirname-lgpl: + # Code from module dosname: + # Code from module double-slash-root: + # Code from module errno: + # Code from module error: + # Code from module extensions: + + # Code from module extern-inline: + # Code from module float: + # Code from module fnmatch: + # Code from module getdelim: + # Code from module getline: + # Code from module getopt-gnu: + # Code from module getopt-posix: + # Code from module gettext: + # Code from module gettext-h: + # Code from module havelib: + # Code from module include_next: + # Code from module intprops: + # Code from module langinfo: + # Code from module localcharset: + # Code from module locale: + # Code from module localeconv: + # Code from module malloc-gnu: + # Code from module malloc-posix: + # Code from module mbrtowc: + # Code from module mbsinit: + # Code from module mbsrtowcs: + # Code from module mbswidth: + # Code from module mbtowc: + # Code from module memchr: + # Code from module mempcpy: + # Code from module msvc-inval: + # Code from module msvc-nothrow: + # Code from module multiarch: + # Code from module nl_langinfo: + # Code from module nocrash: + # Code from module progname: + # Code from module rawmemchr: + # Code from module realloc-posix: + # Code from module regex: + # Code from module size_max: + # Code from module sleep: + # Code from module snippet/_Noreturn: + # Code from module snippet/arg-nonnull: + # Code from module snippet/c++defs: + # Code from module snippet/warn-on-use: + # Code from module ssize_t: + # Code from module stdalign: + # Code from module stdbool: + # Code from module stddef: + # Code from module stdint: + # Code from module stdio: + # Code from module stdlib: + # Code from module strcase: + # Code from module strchrnul: + # Code from module streq: + # Code from module strerror: + # Code from module strerror-override: + # Code from module string: + # Code from module strings: + # Code from module strndup: + # Code from module strnlen: + # Code from module strnlen1: + # Code from module sys_types: + # Code from module sysexits: + # Code from module unistd: + # Code from module unitypes: + # Code from module uniwidth/base: + # Code from module uniwidth/width: + # Code from module vasnprintf: + # Code from module verify: + # Code from module vsnprintf: + # Code from module wchar: + # Code from module wcrtomb: + # Code from module wctype-h: + # Code from module wcwidth: + # Code from module xsize: + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + +# By default we simply use the C compiler to build assembly code. + +test "${CCAS+set}" = set || CCAS=$CC +test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS + + + +depcc="$CCAS" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CCAS_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CCAS_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CCAS_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } +CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then + am__fastdepCCAS_TRUE= + am__fastdepCCAS_FALSE='#' +else + am__fastdepCCAS_TRUE='#' + am__fastdepCCAS_FALSE= +fi + + + +# Must be GCC. +test "x$GCC" = xyes || as_fn_error $? "GCC is required" "$LINENO" 5 + +# Extract the first word of "$CXX", so it can be a program name with args. +set dummy $CXX; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_HAVE_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_CXX"; then + ac_cv_prog_HAVE_CXX="$HAVE_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_HAVE_CXX="yes" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_HAVE_CXX" && ac_cv_prog_HAVE_CXX="no" +fi +fi +HAVE_CXX=$ac_cv_prog_HAVE_CXX +if test -n "$HAVE_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_CXX" >&5 +$as_echo "$HAVE_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + GETTEXT_MACRO_VERSION=0.18 + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + + + ac_config_commands="$ac_config_commands po-directories" + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${gl_cv_solaris_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; + +int +main (void) +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main (void) +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main (void) +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +int main () +{ + int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\263"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +else + am_cv_func_iconv_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + LIBINTL_PREFIX= + HAVE_LIBINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main (void) +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" +else + eval "$gt_func_gnugettext_libintl=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main (void) +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +fi + + +# Identify characteristics of the host architecture. +unset ac_cv_c_bigendian + +if test x"$target_cpu-$platform" = xsparc64-emu ; then + CFLAGS="$CFLAGS -m64" + HOST_CFLAGS="$HOST_CFLAGS -m64" +fi + +CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64" +HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main (void) +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +$as_echo_n "checking size of void *... " >&6; } +if ${ac_cv_sizeof_void_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (void *) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_void_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +$as_echo "$ac_cv_sizeof_void_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + + +case "$host_os" in + cygwin | windows* | mingw32*) + HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500" + CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500" + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of TCHAR" >&5 +$as_echo_n "checking size of TCHAR... " >&6; } +if ${ac_cv_sizeof_TCHAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (TCHAR))" "ac_cv_sizeof_TCHAR" "#include +"; then : + +else + if test "$ac_cv_type_TCHAR" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (TCHAR) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_TCHAR=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_TCHAR" >&5 +$as_echo "$ac_cv_sizeof_TCHAR" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_TCHAR $ac_cv_sizeof_TCHAR +_ACEOF + + + ;; +esac + +case "$host_os" in + cygwin | windows* | mingw32* | aros*) + ;; + *) + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 +$as_echo_n "checking size of off_t... " >&6; } +if ${ac_cv_sizeof_off_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_off_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (off_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_off_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 +$as_echo "$ac_cv_sizeof_off_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_OFF_T $ac_cv_sizeof_off_t +_ACEOF + + + test x"$ac_cv_sizeof_off_t" = x8 || as_fn_error $? "Large file support is required" "$LINENO" 5;; +esac + +if test x$USE_NLS = xno; then + HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext" +fi + +if test "x$cross_compiling" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot generate manual pages while cross compiling" >&5 +$as_echo "$as_me: WARNING: cannot generate manual pages while cross compiling" >&2;} +else + # Extract the first word of "help2man", so it can be a program name with args. +set dummy help2man; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_HELP2MAN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $HELP2MAN in + [\\/]* | ?:[\\/]*) + ac_cv_path_HELP2MAN="$HELP2MAN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_HELP2MAN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HELP2MAN=$ac_cv_path_HELP2MAN +if test -n "$HELP2MAN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HELP2MAN" >&5 +$as_echo "$HELP2MAN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi + +# Check for functions and headers. +for ac_func in posix_memalign memalign getextmntent +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_header in sys/param.h sys/mount.h sys/mnttab.h limits.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +# glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation +# warning which causes compilation failure later with -Werror. So use -Werror here +# as well to force proper sys/sysmacros.h detection. +SAVED_CFLAGS="$CFLAGS" +CFLAGS="$HOST_CFLAGS -Werror" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5 +$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } +if ${ac_cv_header_sys_types_h_makedev+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +return makedev(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_header_sys_types_h_makedev=yes +else + ac_cv_header_sys_types_h_makedev=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5 +$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } + +if test $ac_cv_header_sys_types_h_makedev = no; then +ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = xyes; then : + +$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h + +fi + + + + if test $ac_cv_header_sys_mkdev_h = no; then + ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then : + +$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h + +fi + + + fi +fi + +CFLAGS="$SAVED_CFLAGS" + +ac_fn_c_check_member "$LINENO" "struct statfs" "f_fstypename" "ac_cv_member_struct_statfs_f_fstypename" "$ac_includes_default +#include +#include +" +if test "x$ac_cv_member_struct_statfs_f_fstypename" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STATFS_F_FSTYPENAME 1 +_ACEOF + + +fi + + +ac_fn_c_check_member "$LINENO" "struct statfs" "f_mntfromname" "ac_cv_member_struct_statfs_f_mntfromname" "$ac_includes_default +#include +#include +" +if test "x$ac_cv_member_struct_statfs_f_mntfromname" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STATFS_F_MNTFROMNAME 1 +_ACEOF + + +fi + + +# For opendisk() and getrawpartition() on NetBSD. +# Used in util/deviceiter.c and in util/hostdisk.c. +ac_fn_c_check_header_mongrel "$LINENO" "util.h" "ac_cv_header_util_h" "$ac_includes_default" +if test "x$ac_cv_header_util_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for opendisk in -lutil" >&5 +$as_echo_n "checking for opendisk in -lutil... " >&6; } +if ${ac_cv_lib_util_opendisk+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lutil $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendisk (); +int +main (void) +{ +return opendisk (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_util_opendisk=yes +else + ac_cv_lib_util_opendisk=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_opendisk" >&5 +$as_echo "$ac_cv_lib_util_opendisk" >&6; } +if test "x$ac_cv_lib_util_opendisk" = xyes; then : + + LIBUTIL="-lutil" + +$as_echo "#define HAVE_OPENDISK 1" >>confdefs.h + + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getrawpartition in -lutil" >&5 +$as_echo_n "checking for getrawpartition in -lutil... " >&6; } +if ${ac_cv_lib_util_getrawpartition+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lutil $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getrawpartition (); +int +main (void) +{ +return getrawpartition (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_util_getrawpartition=yes +else + ac_cv_lib_util_getrawpartition=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_getrawpartition" >&5 +$as_echo "$ac_cv_lib_util_getrawpartition" >&6; } +if test "x$ac_cv_lib_util_getrawpartition" = xyes; then : + + LIBUTIL="-lutil" + +$as_echo "#define HAVE_GETRAWPARTITION 1" >>confdefs.h + + +fi + + +fi + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wtrampolines work" >&5 +$as_echo_n "checking whether -Wtrampolines work... " >&6; } +if ${grub_cv_host_cc_wtrampolines+:} false; then : + $as_echo_n "(cached) " >&6 +else + + SAVED_CFLAGS="$CFLAGS" + CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int va_arg_func (int fixed, va_list args); +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_host_cc_wtrampolines=yes +else + grub_cv_host_cc_wtrampolines=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$SAVED_CFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_host_cc_wtrampolines" >&5 +$as_echo "$grub_cv_host_cc_wtrampolines" >&6; } + +if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then + HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines" +fi + +# +# Check for host and build compilers. +# +HOST_CC=$CC +for ac_prog in gcc egcs cc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_BUILD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BUILD_CC"; then + ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_BUILD_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BUILD_CC=$ac_cv_prog_BUILD_CC +if test -n "$BUILD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5 +$as_echo "$BUILD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_CC" && break +done + +test -z "$BUILD_CC" && as_fn_error $? "none of gcc, egcs and cc is found. set BUILD_CC manually." "$LINENO" 5 +BUILD_CPP="$BUILD_CC -E" + +case "$build_os" in + haiku*) BUILD_LIBM= ;; + *) BUILD_LIBM=-lm ;; +esac + + +case "$build_os" in + cygwin*|mingw32*|mingw64*) BUILD_EXEEXT=.exe ;; + *) BUILD_EXEEXT= ;; +esac + + +# For gnulib. + + + + + + LIBC_FATAL_STDERR_=1 + export LIBC_FATAL_STDERR_ + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main (void) +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + + + + + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 +$as_echo_n "checking for C/C++ restrict keyword... " >&6; } +if ${ac_cv_c_restrict+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +typedef int * int_ptr; + int foo (int_ptr $ac_kw ip) { + return ip[0]; + } +int +main (void) +{ +int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(t) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_restrict=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_restrict" != no && break + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 +$as_echo "$ac_cv_c_restrict" >&6; } + + case $ac_cv_c_restrict in + restrict) ;; + no) $as_echo "#define restrict /**/" >>confdefs.h + ;; + *) cat >>confdefs.h <<_ACEOF +#define restrict $ac_cv_c_restrict +_ACEOF + ;; + esac + +ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_ferror_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fflush_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fputc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fputs_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fread_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getchar_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_putc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_putchar_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl +_ACEOF + + + + + for ac_func in $ac_func_list +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + XGETTEXT_EXTRA_OPTIONS= + + + GNULIB_BTOWC=0; + GNULIB_WCTOB=0; + GNULIB_MBSINIT=0; + GNULIB_MBRTOWC=0; + GNULIB_MBRLEN=0; + GNULIB_MBSRTOWCS=0; + GNULIB_MBSNRTOWCS=0; + GNULIB_WCRTOMB=0; + GNULIB_WCSRTOMBS=0; + GNULIB_WCSNRTOMBS=0; + GNULIB_WCWIDTH=0; + GNULIB_WMEMCHR=0; + GNULIB_WMEMCMP=0; + GNULIB_WMEMCPY=0; + GNULIB_WMEMMOVE=0; + GNULIB_WMEMSET=0; + GNULIB_WCSLEN=0; + GNULIB_WCSNLEN=0; + GNULIB_WCSCPY=0; + GNULIB_WCPCPY=0; + GNULIB_WCSNCPY=0; + GNULIB_WCPNCPY=0; + GNULIB_WCSCAT=0; + GNULIB_WCSNCAT=0; + GNULIB_WCSCMP=0; + GNULIB_WCSNCMP=0; + GNULIB_WCSCASECMP=0; + GNULIB_WCSNCASECMP=0; + GNULIB_WCSCOLL=0; + GNULIB_WCSXFRM=0; + GNULIB_WCSDUP=0; + GNULIB_WCSCHR=0; + GNULIB_WCSRCHR=0; + GNULIB_WCSCSPN=0; + GNULIB_WCSSPN=0; + GNULIB_WCSPBRK=0; + GNULIB_WCSSTR=0; + GNULIB_WCSTOK=0; + GNULIB_WCSWIDTH=0; + HAVE_BTOWC=1; + HAVE_MBSINIT=1; + HAVE_MBRTOWC=1; + HAVE_MBRLEN=1; + HAVE_MBSRTOWCS=1; + HAVE_MBSNRTOWCS=1; + HAVE_WCRTOMB=1; + HAVE_WCSRTOMBS=1; + HAVE_WCSNRTOMBS=1; + HAVE_WMEMCHR=1; + HAVE_WMEMCMP=1; + HAVE_WMEMCPY=1; + HAVE_WMEMMOVE=1; + HAVE_WMEMSET=1; + HAVE_WCSLEN=1; + HAVE_WCSNLEN=1; + HAVE_WCSCPY=1; + HAVE_WCPCPY=1; + HAVE_WCSNCPY=1; + HAVE_WCPNCPY=1; + HAVE_WCSCAT=1; + HAVE_WCSNCAT=1; + HAVE_WCSCMP=1; + HAVE_WCSNCMP=1; + HAVE_WCSCASECMP=1; + HAVE_WCSNCASECMP=1; + HAVE_WCSCOLL=1; + HAVE_WCSXFRM=1; + HAVE_WCSDUP=1; + HAVE_WCSCHR=1; + HAVE_WCSRCHR=1; + HAVE_WCSCSPN=1; + HAVE_WCSSPN=1; + HAVE_WCSPBRK=1; + HAVE_WCSSTR=1; + HAVE_WCSTOK=1; + HAVE_WCSWIDTH=1; + HAVE_DECL_WCTOB=1; + HAVE_DECL_WCWIDTH=1; + REPLACE_MBSTATE_T=0; + REPLACE_BTOWC=0; + REPLACE_WCTOB=0; + REPLACE_MBSINIT=0; + REPLACE_MBRTOWC=0; + REPLACE_MBRLEN=0; + REPLACE_MBSRTOWCS=0; + REPLACE_MBSNRTOWCS=0; + REPLACE_WCRTOMB=0; + REPLACE_WCSRTOMBS=0; + REPLACE_WCSNRTOMBS=0; + REPLACE_WCWIDTH=0; + REPLACE_WCSWIDTH=0; + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uses 'inline' correctly" >&5 +$as_echo_n "checking whether uses 'inline' correctly... " >&6; } +if ${gl_cv_header_wchar_h_correct_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_wchar_h_correct_inline=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +extern int zero (void); +int main () { return zero(); } + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + mv conftest.$ac_objext conftest1.$ac_objext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int zero (void) { return 0; } + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + mv conftest.$ac_objext conftest2.$ac_objext + if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then + : + else + gl_cv_header_wchar_h_correct_inline=no + fi + fi + fi + rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 +$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; } + if test $gl_cv_header_wchar_h_correct_inline = no; then + as_fn_error $? " cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). +This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in +C99 mode. You have four options: + - Add the flag -fgnu89-inline to CC and reconfigure, or + - Fix your include files, using parts of + , or + - Use a gcc version older than 4.3, or + - Don't use the flags -std=c99 or -std=gnu99. +Configuration aborted." "$LINENO" 5 + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +char* cs = nl_langinfo(CODESET); return !cs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_langinfo_codeset=yes +else + am_cv_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then + +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if ${gt_cv_locale_fr+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +#else + if (setlocale (LC_ALL, "") == NULL) return 1; +#endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; +#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +#endif + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the native Windows locale name. + if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=French_France.1252 + else + # None found. + gt_cv_locale_fr=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if ${gl_cv_double_slash_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # . + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then + +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 +$as_echo_n "checking whether the preprocessor supports include_next... " >&6; } +if ${gl_cv_have_include_next+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + cat < conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_have_include_next=yes +else + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_have_include_next=buggy +else + gl_cv_have_include_next=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 +$as_echo "$gl_cv_have_include_next" >&6; } + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 +$as_echo_n "checking whether system header files limit the line length... " >&6; } +if ${gl_cv_pragma_columns+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __TANDEM +choke me +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "choke me" >/dev/null 2>&1; then : + gl_cv_pragma_columns=yes +else + gl_cv_pragma_columns=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 +$as_echo "$gl_cv_pragma_columns" >&6; } + if test $gl_cv_pragma_columns = yes; then + PRAGMA_COLUMNS="#pragma COLUMNS 10000" + else + PRAGMA_COLUMNS= + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 +$as_echo_n "checking for complete errno.h... " >&6; } +if ${gl_cv_header_errno_h_complete+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#if !defined ETXTBSY +booboo +#endif +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ENETRESET +booboo +#endif +#if !defined ECONNABORTED +booboo +#endif +#if !defined ESTALE +booboo +#endif +#if !defined EDQUOT +booboo +#endif +#if !defined ECANCELED +booboo +#endif +#if !defined EOWNERDEAD +booboo +#endif +#if !defined ENOTRECOVERABLE +booboo +#endif +#if !defined EILSEQ +booboo +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "booboo" >/dev/null 2>&1; then : + gl_cv_header_errno_h_complete=no +else + gl_cv_header_errno_h_complete=yes +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 +$as_echo "$gl_cv_header_errno_h_complete" >&6; } + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_errno_h='<'errno.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_errno_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'errno.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 +$as_echo "$gl_cv_next_errno_h" >&6; } + fi + NEXT_ERRNO_H=$gl_cv_next_errno_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'errno.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_errno_h + fi + NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive + + + + + ERRNO_H='errno.h' + fi + + if test -n "$ERRNO_H"; then + GL_GENERATE_ERRNO_H_TRUE= + GL_GENERATE_ERRNO_H_FALSE='#' +else + GL_GENERATE_ERRNO_H_TRUE='#' + GL_GENERATE_ERRNO_H_FALSE= +fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 +$as_echo_n "checking for EMULTIHOP value... " >&6; } +if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EMULTIHOP=yes +else + gl_cv_header_errno_h_EMULTIHOP=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EMULTIHOP=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then + if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include +"; then : + +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 +$as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } + case $gl_cv_header_errno_h_EMULTIHOP in + yes | no) + EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= + ;; + *) + EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 +$as_echo_n "checking for ENOLINK value... " >&6; } +if ${gl_cv_header_errno_h_ENOLINK+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_ENOLINK=yes +else + gl_cv_header_errno_h_ENOLINK=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_ENOLINK=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = hidden; then + if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include +"; then : + +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 +$as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } + case $gl_cv_header_errno_h_ENOLINK in + yes | no) + ENOLINK_HIDDEN=0; ENOLINK_VALUE= + ;; + *) + ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 +$as_echo_n "checking for EOVERFLOW value... " >&6; } +if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EOVERFLOW=yes +else + gl_cv_header_errno_h_EOVERFLOW=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EOVERFLOW=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then + if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include +"; then : + +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 +$as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } + case $gl_cv_header_errno_h_EOVERFLOW in + yes | no) + EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= + ;; + *) + EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" + ;; + esac + + + fi + + +ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror_r" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R $ac_have_decl +_ACEOF + +for ac_func in strerror_r +do : + ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" +if test "x$ac_cv_func_strerror_r" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR_R 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 +$as_echo_n "checking whether strerror_r returns char *... " >&6; } +if ${ac_cv_func_strerror_r_char_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_cv_func_strerror_r_char_p=no + if test $ac_cv_have_decl_strerror_r = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ + + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + return !p || x; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + # strerror_r is not declared. Choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + extern char *strerror_r (); +int +main (void) +{ +char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + return ! isalpha (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 +$as_echo "$ac_cv_func_strerror_r_char_p" >&6; } +if test $ac_cv_func_strerror_r_char_p = yes; then + +$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h + +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } +if ${ac_cv_type_mbstate_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int +main (void) +{ +mbstate_t x; return sizeof x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_mbstate_t=yes +else + ac_cv_type_mbstate_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 +$as_echo "$ac_cv_type_mbstate_t" >&6; } + if test $ac_cv_type_mbstate_t = yes; then + +$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h + + else + +$as_echo "#define mbstate_t int" >>confdefs.h + + fi + + + + + + + + + + + + + + + + + + + GNULIB_DPRINTF=0; + GNULIB_FCLOSE=0; + GNULIB_FDOPEN=0; + GNULIB_FFLUSH=0; + GNULIB_FGETC=0; + GNULIB_FGETS=0; + GNULIB_FOPEN=0; + GNULIB_FPRINTF=0; + GNULIB_FPRINTF_POSIX=0; + GNULIB_FPURGE=0; + GNULIB_FPUTC=0; + GNULIB_FPUTS=0; + GNULIB_FREAD=0; + GNULIB_FREOPEN=0; + GNULIB_FSCANF=0; + GNULIB_FSEEK=0; + GNULIB_FSEEKO=0; + GNULIB_FTELL=0; + GNULIB_FTELLO=0; + GNULIB_FWRITE=0; + GNULIB_GETC=0; + GNULIB_GETCHAR=0; + GNULIB_GETDELIM=0; + GNULIB_GETLINE=0; + GNULIB_OBSTACK_PRINTF=0; + GNULIB_OBSTACK_PRINTF_POSIX=0; + GNULIB_PCLOSE=0; + GNULIB_PERROR=0; + GNULIB_POPEN=0; + GNULIB_PRINTF=0; + GNULIB_PRINTF_POSIX=0; + GNULIB_PUTC=0; + GNULIB_PUTCHAR=0; + GNULIB_PUTS=0; + GNULIB_REMOVE=0; + GNULIB_RENAME=0; + GNULIB_RENAMEAT=0; + GNULIB_SCANF=0; + GNULIB_SNPRINTF=0; + GNULIB_SPRINTF_POSIX=0; + GNULIB_STDIO_H_NONBLOCKING=0; + GNULIB_STDIO_H_SIGPIPE=0; + GNULIB_TMPFILE=0; + GNULIB_VASPRINTF=0; + GNULIB_VFSCANF=0; + GNULIB_VSCANF=0; + GNULIB_VDPRINTF=0; + GNULIB_VFPRINTF=0; + GNULIB_VFPRINTF_POSIX=0; + GNULIB_VPRINTF=0; + GNULIB_VPRINTF_POSIX=0; + GNULIB_VSNPRINTF=0; + GNULIB_VSPRINTF_POSIX=0; + HAVE_DECL_FPURGE=1; + HAVE_DECL_FSEEKO=1; + HAVE_DECL_FTELLO=1; + HAVE_DECL_GETDELIM=1; + HAVE_DECL_GETLINE=1; + HAVE_DECL_OBSTACK_PRINTF=1; + HAVE_DECL_SNPRINTF=1; + HAVE_DECL_VSNPRINTF=1; + HAVE_DPRINTF=1; + HAVE_FSEEKO=1; + HAVE_FTELLO=1; + HAVE_PCLOSE=1; + HAVE_POPEN=1; + HAVE_RENAMEAT=1; + HAVE_VASPRINTF=1; + HAVE_VDPRINTF=1; + REPLACE_DPRINTF=0; + REPLACE_FCLOSE=0; + REPLACE_FDOPEN=0; + REPLACE_FFLUSH=0; + REPLACE_FOPEN=0; + REPLACE_FPRINTF=0; + REPLACE_FPURGE=0; + REPLACE_FREOPEN=0; + REPLACE_FSEEK=0; + REPLACE_FSEEKO=0; + REPLACE_FTELL=0; + REPLACE_FTELLO=0; + REPLACE_GETDELIM=0; + REPLACE_GETLINE=0; + REPLACE_OBSTACK_PRINTF=0; + REPLACE_PERROR=0; + REPLACE_POPEN=0; + REPLACE_PRINTF=0; + REPLACE_REMOVE=0; + REPLACE_RENAME=0; + REPLACE_RENAMEAT=0; + REPLACE_SNPRINTF=0; + REPLACE_SPRINTF=0; + REPLACE_STDIO_READ_FUNCS=0; + REPLACE_STDIO_WRITE_FUNCS=0; + REPLACE_TMPFILE=0; + REPLACE_VASPRINTF=0; + REPLACE_VDPRINTF=0; + REPLACE_VFPRINTF=0; + REPLACE_VPRINTF=0; + REPLACE_VSNPRINTF=0; + REPLACE_VSPRINTF=0; + +ac_fn_c_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "$ac_includes_default" +if test "x$ac_cv_have_decl_getdelim" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETDELIM $ac_have_decl +_ACEOF + + + +ac_fn_c_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "$ac_includes_default" +if test "x$ac_cv_have_decl_getline" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETLINE $ac_have_decl +_ACEOF + + + GNULIB_CHDIR=0; + GNULIB_CHOWN=0; + GNULIB_CLOSE=0; + GNULIB_DUP=0; + GNULIB_DUP2=0; + GNULIB_DUP3=0; + GNULIB_ENVIRON=0; + GNULIB_EUIDACCESS=0; + GNULIB_FACCESSAT=0; + GNULIB_FCHDIR=0; + GNULIB_FCHOWNAT=0; + GNULIB_FDATASYNC=0; + GNULIB_FSYNC=0; + GNULIB_FTRUNCATE=0; + GNULIB_GETCWD=0; + GNULIB_GETDOMAINNAME=0; + GNULIB_GETDTABLESIZE=0; + GNULIB_GETGROUPS=0; + GNULIB_GETHOSTNAME=0; + GNULIB_GETLOGIN=0; + GNULIB_GETLOGIN_R=0; + GNULIB_GETPAGESIZE=0; + GNULIB_GETUSERSHELL=0; + GNULIB_GROUP_MEMBER=0; + GNULIB_ISATTY=0; + GNULIB_LCHOWN=0; + GNULIB_LINK=0; + GNULIB_LINKAT=0; + GNULIB_LSEEK=0; + GNULIB_PIPE=0; + GNULIB_PIPE2=0; + GNULIB_PREAD=0; + GNULIB_PWRITE=0; + GNULIB_READ=0; + GNULIB_READLINK=0; + GNULIB_READLINKAT=0; + GNULIB_RMDIR=0; + GNULIB_SETHOSTNAME=0; + GNULIB_SLEEP=0; + GNULIB_SYMLINK=0; + GNULIB_SYMLINKAT=0; + GNULIB_TTYNAME_R=0; + GNULIB_UNISTD_H_NONBLOCKING=0; + GNULIB_UNISTD_H_SIGPIPE=0; + GNULIB_UNLINK=0; + GNULIB_UNLINKAT=0; + GNULIB_USLEEP=0; + GNULIB_WRITE=0; + HAVE_CHOWN=1; + HAVE_DUP2=1; + HAVE_DUP3=1; + HAVE_EUIDACCESS=1; + HAVE_FACCESSAT=1; + HAVE_FCHDIR=1; + HAVE_FCHOWNAT=1; + HAVE_FDATASYNC=1; + HAVE_FSYNC=1; + HAVE_FTRUNCATE=1; + HAVE_GETDTABLESIZE=1; + HAVE_GETGROUPS=1; + HAVE_GETHOSTNAME=1; + HAVE_GETLOGIN=1; + HAVE_GETPAGESIZE=1; + HAVE_GROUP_MEMBER=1; + HAVE_LCHOWN=1; + HAVE_LINK=1; + HAVE_LINKAT=1; + HAVE_PIPE=1; + HAVE_PIPE2=1; + HAVE_PREAD=1; + HAVE_PWRITE=1; + HAVE_READLINK=1; + HAVE_READLINKAT=1; + HAVE_SETHOSTNAME=1; + HAVE_SLEEP=1; + HAVE_SYMLINK=1; + HAVE_SYMLINKAT=1; + HAVE_UNLINKAT=1; + HAVE_USLEEP=1; + HAVE_DECL_ENVIRON=1; + HAVE_DECL_FCHDIR=1; + HAVE_DECL_FDATASYNC=1; + HAVE_DECL_GETDOMAINNAME=1; + HAVE_DECL_GETLOGIN_R=1; + HAVE_DECL_GETPAGESIZE=1; + HAVE_DECL_GETUSERSHELL=1; + HAVE_DECL_SETHOSTNAME=1; + HAVE_DECL_TTYNAME_R=1; + HAVE_OS_H=0; + HAVE_SYS_PARAM_H=0; + REPLACE_CHOWN=0; + REPLACE_CLOSE=0; + REPLACE_DUP=0; + REPLACE_DUP2=0; + REPLACE_FCHOWNAT=0; + REPLACE_FTRUNCATE=0; + REPLACE_GETCWD=0; + REPLACE_GETDOMAINNAME=0; + REPLACE_GETLOGIN_R=0; + REPLACE_GETGROUPS=0; + REPLACE_GETPAGESIZE=0; + REPLACE_ISATTY=0; + REPLACE_LCHOWN=0; + REPLACE_LINK=0; + REPLACE_LINKAT=0; + REPLACE_LSEEK=0; + REPLACE_PREAD=0; + REPLACE_PWRITE=0; + REPLACE_READ=0; + REPLACE_READLINK=0; + REPLACE_RMDIR=0; + REPLACE_SLEEP=0; + REPLACE_SYMLINK=0; + REPLACE_TTYNAME_R=0; + REPLACE_UNLINK=0; + REPLACE_UNLINKAT=0; + REPLACE_USLEEP=0; + REPLACE_WRITE=0; + UNISTD_H_HAVE_WINSOCK2_H=0; + UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_getopt_h='<'getopt.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_getopt_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_getopt_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'getopt.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_getopt_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_getopt_h='<'getopt.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 +$as_echo "$gl_cv_next_getopt_h" >&6; } + fi + NEXT_GETOPT_H=$gl_cv_next_getopt_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'getopt.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_getopt_h + fi + NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_getopt_h = yes; then + HAVE_GETOPT_H=1 + else + HAVE_GETOPT_H=0 + fi + + + gl_replace_getopt= + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + for ac_header in getopt.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" +if test "x$ac_cv_header_getopt_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_H 1 +_ACEOF + +else + gl_replace_getopt=yes +fi + +done + + fi + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + for ac_func in getopt_long_only +do : + ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" +if test "x$ac_cv_func_getopt_long_only" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_LONG_ONLY 1 +_ACEOF + +else + gl_replace_getopt=yes +fi +done + + fi + + if test -z "$gl_replace_getopt"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 +$as_echo_n "checking whether getopt is POSIX compatible... " >&6; } +if ${gl_cv_func_getopt_posix+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $cross_compiling = no; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include + +int +main () +{ + static char program[] = "program"; + static char a[] = "-a"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, a, foo, bar, NULL }; + int c; + + c = getopt (4, argv, "ab"); + if (!(c == 'a')) + return 1; + c = getopt (4, argv, "ab"); + if (!(c == -1)) + return 2; + if (!(optind == 2)) + return 3; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_posix=maybe +else + gl_cv_func_getopt_posix=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test $gl_cv_func_getopt_posix = maybe; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include + +int +main () +{ + static char program[] = "program"; + static char donald[] = "donald"; + static char p[] = "-p"; + static char billy[] = "billy"; + static char duck[] = "duck"; + static char a[] = "-a"; + static char bar[] = "bar"; + char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; + int c; + + c = getopt (7, argv, "+abp:q:"); + if (!(c == -1)) + return 4; + if (!(strcmp (argv[0], "program") == 0)) + return 5; + if (!(strcmp (argv[1], "donald") == 0)) + return 6; + if (!(strcmp (argv[2], "-p") == 0)) + return 7; + if (!(strcmp (argv[3], "billy") == 0)) + return 8; + if (!(strcmp (argv[4], "duck") == 0)) + return 9; + if (!(strcmp (argv[5], "-a") == 0)) + return 10; + if (!(strcmp (argv[6], "bar") == 0)) + return 11; + if (!(optind == 1)) + return 12; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_posix=maybe +else + gl_cv_func_getopt_posix=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + if test $gl_cv_func_getopt_posix = maybe; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include + +int +main () +{ + static char program[] = "program"; + static char ab[] = "-ab"; + char *argv[3] = { program, ab, NULL }; + if (getopt (2, argv, "ab:") != 'a') + return 13; + if (getopt (2, argv, "ab:") != '?') + return 14; + if (optopt != 'b') + return 15; + if (optind != 2) + return 16; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_posix=yes +else + gl_cv_func_getopt_posix=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + else + case "$host_os" in + darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; + *) gl_cv_func_getopt_posix="guessing yes";; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 +$as_echo "$gl_cv_func_getopt_posix" >&6; } + case "$gl_cv_func_getopt_posix" in + *no) gl_replace_getopt=yes ;; + esac + fi + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 +$as_echo_n "checking for working GNU getopt function... " >&6; } +if ${gl_cv_func_getopt_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the + # optstring is necessary for programs like m4 that have POSIX-mandated + # semantics for supporting options interspersed with files. + # Also, since getopt_long is a GNU extension, we require optind=0. + # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; + # so take care to revert to the correct (non-)export state. + gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' + case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + #include + +#include +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on Mac OS X. */ +#include +#include +#include +#include +#include +#include +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include +#include +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + + +int +main (void) +{ + + int result = 0; + + nocrash_init(); + + /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, + and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, + OSF/1 5.1, Solaris 10. */ + { + static char conftest[] = "conftest"; + static char plus[] = "-+"; + char *argv[3] = { conftest, plus, NULL }; + opterr = 0; + if (getopt (2, argv, "+a") != '?') + result |= 1; + } + /* This code succeeds on glibc 2.8, mingw, + and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, + IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ + { + static char program[] = "program"; + static char p[] = "-p"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, p, foo, bar, NULL }; + + optind = 1; + if (getopt (4, argv, "p::") != 'p') + result |= 2; + else if (optarg != NULL) + result |= 4; + else if (getopt (4, argv, "p::") != -1) + result |= 6; + else if (optind != 2) + result |= 8; + } + /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ + { + static char program[] = "program"; + static char foo[] = "foo"; + static char p[] = "-p"; + char *argv[] = { program, foo, p, NULL }; + optind = 0; + if (getopt (3, argv, "-p") != 1) + result |= 16; + else if (getopt (3, argv, "-p") != 'p') + result |= 16; + } + /* This code fails on glibc 2.11. */ + { + static char program[] = "program"; + static char b[] = "-b"; + static char a[] = "-a"; + char *argv[] = { program, b, a, NULL }; + optind = opterr = 0; + if (getopt (3, argv, "+:a:b") != 'b') + result |= 32; + else if (getopt (3, argv, "+:a:b") != ':') + result |= 32; + } + /* This code dumps core on glibc 2.14. */ + { + static char program[] = "program"; + static char w[] = "-W"; + static char dummy[] = "dummy"; + char *argv[] = { program, w, dummy, NULL }; + optind = opterr = 1; + if (getopt (3, argv, "W;") != 'W') + result |= 64; + } + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_gnu=yes +else + gl_cv_func_getopt_gnu=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + case $gl_had_POSIXLY_CORRECT in + exported) ;; + yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; + *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 +$as_echo "$gl_cv_func_getopt_gnu" >&6; } + if test "$gl_cv_func_getopt_gnu" != yes; then + gl_replace_getopt=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 +$as_echo_n "checking for working GNU getopt_long function... " >&6; } +if ${gl_cv_func_getopt_long_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; + *) gl_cv_func_getopt_long_gnu="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + #include + +int +main (void) +{ +static const struct option long_options[] = + { + { "xtremely-",no_argument, NULL, 1003 }, + { "xtra", no_argument, NULL, 1001 }, + { "xtreme", no_argument, NULL, 1002 }, + { "xtremely", no_argument, NULL, 1003 }, + { NULL, 0, NULL, 0 } + }; + /* This code fails on OpenBSD 5.0. */ + { + static char program[] = "program"; + static char xtremel[] = "--xtremel"; + char *argv[] = { program, xtremel, NULL }; + int option_index; + optind = 1; opterr = 0; + if (getopt_long (2, argv, "", long_options, &option_index) != 1003) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_long_gnu=yes +else + gl_cv_func_getopt_long_gnu=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5 +$as_echo "$gl_cv_func_getopt_long_gnu" >&6; } + case "$gl_cv_func_getopt_long_gnu" in + *yes) ;; + *) gl_replace_getopt=yes ;; + esac + fi + fi + + + + + + + REPLACE_GETOPT=1 + + if test $REPLACE_GETOPT = 1; then + + GETOPT_H=getopt.h + +$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h + + + + fi + +ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_getenv" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETENV $ac_have_decl +_ACEOF + + + GNULIB_NL_LANGINFO=0; + HAVE_NL_LANGINFO=1; + REPLACE_NL_LANGINFO=0; + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 +$as_echo_n "checking for working fcntl.h... " >&6; } +if ${gl_cv_header_working_fcntl_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_header_working_fcntl_h=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + #if HAVE_UNISTD_H + # include + #else /* on Windows with MSVC */ + # include + # include + # defined sleep(n) _sleep ((n) * 1000) + #endif + #include + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif + #ifndef O_NOFOLLOW + #define O_NOFOLLOW 0 + #endif + static int const constants[] = + { + O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, + O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY + }; + +int +main (void) +{ + + int result = !constants; + #if HAVE_SYMLINK + { + static char const sym[] = "conftest.sym"; + if (symlink ("/dev/null", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + if (unlink (sym) != 0 || symlink (".", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_RDONLY | O_NOFOLLOW); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + unlink (sym); + } + #endif + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + if (fd < 0) + result |= 8; + else + { + struct stat st0; + if (fstat (fd, &st0) != 0) + result |= 16; + else + { + char c; + sleep (1); + if (read (fd, &c, 1) != 1) + result |= 24; + else + { + if (close (fd) != 0) + result |= 32; + else + { + struct stat st1; + if (stat (file, &st1) != 0) + result |= 40; + else + if (st0.st_atime != st1.st_atime) + result |= 64; + } + } + } + } + } + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_header_working_fcntl_h=yes +else + case $? in #( + 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 +$as_echo "$gl_cv_header_working_fcntl_h" >&6; } + + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOATIME $ac_val +_ACEOF + + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOFOLLOW $ac_val +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 +$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } +if ${ac_cv_gnu_library_2_1+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif +#ifdef __UCLIBC__ + Lucky user +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky" >/dev/null 2>&1; then : + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 +$as_echo "$ac_cv_gnu_library_2_1" >&6; } + + GLIBC21="$ac_cv_gnu_library_2_1" + + + + GNULIB_LOCALECONV=0; + GNULIB_SETLOCALE=0; + GNULIB_DUPLOCALE=0; + HAVE_DUPLOCALE=1; + REPLACE_LOCALECONV=0; + REPLACE_SETLOCALE=0; + REPLACE_DUPLOCALE=0; + REPLACE_STRUCT_LCONV=0; + + + REPLACE_NULL=0; + HAVE_WCHAR_T=1; + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if ${gt_cv_c_wchar_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + wchar_t foo = (wchar_t)'\0'; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wchar_t=yes +else + gt_cv_c_wchar_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then + +$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h + + fi + + + + + STDDEF_H= + if test $gt_cv_c_wchar_t = no; then + HAVE_WCHAR_T=0 + STDDEF_H=stddef.h + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 +$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } +if ${gl_cv_decl_null_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + int test[2 * (sizeof NULL == sizeof (void *)) -1]; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_decl_null_works=yes +else + gl_cv_decl_null_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 +$as_echo "$gl_cv_decl_null_works" >&6; } + if test $gl_cv_decl_null_works = no; then + REPLACE_NULL=1 + STDDEF_H=stddef.h + fi + + if test -n "$STDDEF_H"; then + GL_GENERATE_STDDEF_H_TRUE= + GL_GENERATE_STDDEF_H_FALSE='#' +else + GL_GENERATE_STDDEF_H_TRUE='#' + GL_GENERATE_STDDEF_H_FALSE= +fi + + if test -n "$STDDEF_H"; then + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stddef_h='<'stddef.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_stddef_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'stddef.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 +$as_echo "$gl_cv_next_stddef_h" >&6; } + fi + NEXT_STDDEF_H=$gl_cv_next_stddef_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stddef.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stddef_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive + + + + + fi + + + + + GNULIB__EXIT=0; + GNULIB_ATOLL=0; + GNULIB_CALLOC_POSIX=0; + GNULIB_CANONICALIZE_FILE_NAME=0; + GNULIB_GETLOADAVG=0; + GNULIB_GETSUBOPT=0; + GNULIB_GRANTPT=0; + GNULIB_MALLOC_POSIX=0; + GNULIB_MBTOWC=0; + GNULIB_MKDTEMP=0; + GNULIB_MKOSTEMP=0; + GNULIB_MKOSTEMPS=0; + GNULIB_MKSTEMP=0; + GNULIB_MKSTEMPS=0; + GNULIB_POSIX_OPENPT=0; + GNULIB_PTSNAME=0; + GNULIB_PTSNAME_R=0; + GNULIB_PUTENV=0; + GNULIB_RANDOM=0; + GNULIB_RANDOM_R=0; + GNULIB_REALLOC_POSIX=0; + GNULIB_REALPATH=0; + GNULIB_RPMATCH=0; + GNULIB_SECURE_GETENV=0; + GNULIB_SETENV=0; + GNULIB_STRTOD=0; + GNULIB_STRTOLL=0; + GNULIB_STRTOULL=0; + GNULIB_SYSTEM_POSIX=0; + GNULIB_UNLOCKPT=0; + GNULIB_UNSETENV=0; + GNULIB_WCTOMB=0; + HAVE__EXIT=1; + HAVE_ATOLL=1; + HAVE_CANONICALIZE_FILE_NAME=1; + HAVE_DECL_GETLOADAVG=1; + HAVE_GETSUBOPT=1; + HAVE_GRANTPT=1; + HAVE_MKDTEMP=1; + HAVE_MKOSTEMP=1; + HAVE_MKOSTEMPS=1; + HAVE_MKSTEMP=1; + HAVE_MKSTEMPS=1; + HAVE_POSIX_OPENPT=1; + HAVE_PTSNAME=1; + HAVE_PTSNAME_R=1; + HAVE_RANDOM=1; + HAVE_RANDOM_H=1; + HAVE_RANDOM_R=1; + HAVE_REALPATH=1; + HAVE_RPMATCH=1; + HAVE_SECURE_GETENV=1; + HAVE_SETENV=1; + HAVE_DECL_SETENV=1; + HAVE_STRTOD=1; + HAVE_STRTOLL=1; + HAVE_STRTOULL=1; + HAVE_STRUCT_RANDOM_DATA=1; + HAVE_SYS_LOADAVG_H=0; + HAVE_UNLOCKPT=1; + HAVE_DECL_UNSETENV=1; + REPLACE_CALLOC=0; + REPLACE_CANONICALIZE_FILE_NAME=0; + REPLACE_MALLOC=0; + REPLACE_MBTOWC=0; + REPLACE_MKSTEMP=0; + REPLACE_PTSNAME=0; + REPLACE_PTSNAME_R=0; + REPLACE_PUTENV=0; + REPLACE_RANDOM_R=0; + REPLACE_REALLOC=0; + REPLACE_REALPATH=0; + REPLACE_SETENV=0; + REPLACE_STRTOD=0; + REPLACE_UNSETENV=0; + REPLACE_WCTOMB=0; + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 +$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } +if ${gl_cv_func_malloc_posix+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + choke me + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_malloc_posix=yes +else + gl_cv_func_malloc_posix=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 +$as_echo "$gl_cv_func_malloc_posix" >&6; } + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if ${gt_cv_locale_ja+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +#else + if (setlocale (LC_ALL, "") == NULL) return 1; +#endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Note that on native Windows, the Japanese locale is + # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we + # cannot use it here. + gt_cv_locale_ja=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if ${gt_cv_locale_zh_CN+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +#else + if (setlocale (LC_ALL, "") == NULL) return 1; +#endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=Chinese_China.54936 + else + # None found. + gt_cv_locale_zh_CN=none + fi + ;; + solaris2.8) + # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are + # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. + # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. + gt_cv_locale_zh_CN=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + ;; + esac + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if ${gt_cv_locale_fr_utf8+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ +# if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif +#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +#endif + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=French_France.65001 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + + + + + + + GNULIB_FFSL=0; + GNULIB_FFSLL=0; + GNULIB_MEMCHR=0; + GNULIB_MEMMEM=0; + GNULIB_MEMPCPY=0; + GNULIB_MEMRCHR=0; + GNULIB_RAWMEMCHR=0; + GNULIB_STPCPY=0; + GNULIB_STPNCPY=0; + GNULIB_STRCHRNUL=0; + GNULIB_STRDUP=0; + GNULIB_STRNCAT=0; + GNULIB_STRNDUP=0; + GNULIB_STRNLEN=0; + GNULIB_STRPBRK=0; + GNULIB_STRSEP=0; + GNULIB_STRSTR=0; + GNULIB_STRCASESTR=0; + GNULIB_STRTOK_R=0; + GNULIB_MBSLEN=0; + GNULIB_MBSNLEN=0; + GNULIB_MBSCHR=0; + GNULIB_MBSRCHR=0; + GNULIB_MBSSTR=0; + GNULIB_MBSCASECMP=0; + GNULIB_MBSNCASECMP=0; + GNULIB_MBSPCASECMP=0; + GNULIB_MBSCASESTR=0; + GNULIB_MBSCSPN=0; + GNULIB_MBSPBRK=0; + GNULIB_MBSSPN=0; + GNULIB_MBSSEP=0; + GNULIB_MBSTOK_R=0; + GNULIB_STRERROR=0; + GNULIB_STRERROR_R=0; + GNULIB_STRSIGNAL=0; + GNULIB_STRVERSCMP=0; + HAVE_MBSLEN=0; + HAVE_FFSL=1; + HAVE_FFSLL=1; + HAVE_MEMCHR=1; + HAVE_DECL_MEMMEM=1; + HAVE_MEMPCPY=1; + HAVE_DECL_MEMRCHR=1; + HAVE_RAWMEMCHR=1; + HAVE_STPCPY=1; + HAVE_STPNCPY=1; + HAVE_STRCHRNUL=1; + HAVE_DECL_STRDUP=1; + HAVE_DECL_STRNDUP=1; + HAVE_DECL_STRNLEN=1; + HAVE_STRPBRK=1; + HAVE_STRSEP=1; + HAVE_STRCASESTR=1; + HAVE_DECL_STRTOK_R=1; + HAVE_DECL_STRERROR_R=1; + HAVE_DECL_STRSIGNAL=1; + HAVE_STRVERSCMP=1; + REPLACE_MEMCHR=0; + REPLACE_MEMMEM=0; + REPLACE_STPNCPY=0; + REPLACE_STRDUP=0; + REPLACE_STRSTR=0; + REPLACE_STRCASESTR=0; + REPLACE_STRCHRNUL=0; + REPLACE_STRERROR=0; + REPLACE_STRERROR_R=0; + REPLACE_STRNCAT=0; + REPLACE_STRNDUP=0; + REPLACE_STRNLEN=0; + REPLACE_STRSIGNAL=0; + REPLACE_STRTOK_R=0; + UNDEFINE_STRTOK_R=0; + + + + + + # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it + # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is + # irrelevant for anonymous mappings. + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = xyes; then : + gl_have_mmap=yes +else + gl_have_mmap=no +fi + + + # Try to allow MAP_ANONYMOUS. + gl_have_mmap_anonymous=no + if test $gl_have_mmap = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 +$as_echo_n "checking for MAP_ANONYMOUS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef MAP_ANONYMOUS + I cannot identify this map +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cannot identify this map" >/dev/null 2>&1; then : + gl_have_mmap_anonymous=yes +fi +rm -f conftest* + + if test $gl_have_mmap_anonymous != yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef MAP_ANON + I cannot identify this map +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cannot identify this map" >/dev/null 2>&1; then : + +$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h + + gl_have_mmap_anonymous=yes +fi +rm -f conftest* + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 +$as_echo "$gl_have_mmap_anonymous" >&6; } + if test $gl_have_mmap_anonymous = yes; then + +$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h + + fi + fi + + + + + + + if test $HAVE_MEMCHR = 1; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # http://bugzilla.redhat.com/499689 + # memchr should not dereference overestimated length after a match + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # Assume that memchr works on platforms that lack mprotect. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 +$as_echo_n "checking whether memchr works... " >&6; } +if ${gl_cv_func_memchr_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_memchr_works="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#if HAVE_SYS_MMAN_H +# include +# include +# include +# include +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif + +int +main (void) +{ + + int result = 0; + char *fence = NULL; +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + fence = two_pages + pagesize; + } +#endif + if (fence) + { + if (memchr (fence, 0, 0)) + result |= 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + result |= 2; + if (memchr (fence - 1, 0, 3) != fence - 1) + result |= 4; + } + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_memchr_works=yes +else + gl_cv_func_memchr_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5 +$as_echo "$gl_cv_func_memchr_works" >&6; } + if test "$gl_cv_func_memchr_works" != yes; then + REPLACE_MEMCHR=1 + fi + fi + + + + + gl_cv_c_multiarch=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $gl_cv_c_multiarch = yes; then + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + + + + +ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" +if test "x$ac_cv_have_decl_alarm" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ALARM $ac_have_decl +_ACEOF + + + + for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* \ + | hpux* | solaris* | cygwin* | mingw*) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H + # include + #else + char *malloc (); + #endif + +int +main (void) +{ +return ! malloc (0); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } + if test $ac_cv_func_malloc_0_nonnull = yes; then : + gl_cv_func_malloc_0_nonnull=1 +else + gl_cv_func_malloc_0_nonnull=0 +fi + + +cat >>confdefs.h <<_ACEOF +#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull +_ACEOF + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main (void) +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 +$as_echo_n "checking for unsigned long long int... " >&6; } +if ${ac_cv_type_unsigned_long_long_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_type_unsigned_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main (void) +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + ac_cv_type_unsigned_long_long_int=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 +$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } + if test $ac_cv_type_unsigned_long_long_int = yes; then + +$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +$as_echo_n "checking for long long int... " >&6; } +if ${ac_cv_type_long_long_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_type_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif +int +main (void) +{ +long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_type_long_long_int=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 +$as_echo "$ac_cv_type_long_long_int" >&6; } + if test $ac_cv_type_long_long_int = yes; then + +$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h + + fi + + + + + + + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + + + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + + + + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + + + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + + + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdint_h='<'stdint.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_stdint_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdint_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'stdint.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_stdint_h='<'stdint.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 +$as_echo "$gl_cv_next_stdint_h" >&6; } + fi + NEXT_STDINT_H=$gl_cv_next_stdint_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdint.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdint_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + + + if test $ac_cv_header_stdint_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 +$as_echo_n "checking whether stdint.h conforms to C99... " >&6; } +if ${gl_cv_header_working_stdint_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_working_stdint_h=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in " +#endif + + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +#include /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 \ + ? (t) -1 \ + : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if test "$cross_compiling" = yes; then : + gl_cv_header_working_stdint_h=yes + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include + + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + +#include +#include +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; + +int +main (void) +{ + + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return mv - macro_values + 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_header_working_stdint_h=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 +$as_echo "$gl_cv_header_working_stdint_h" >&6; } + fi + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + for ac_header in sys/inttypes.h sys/bitypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + else + HAVE_SYS_INTTYPES_H=0 + fi + + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + fi + + + + + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include "; then : + +else + result=unknown +fi + + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + fi + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include "; then : + +else + result=unknown +fi + + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 +$as_echo_n "checking whether $gltype is signed... " >&6; } +if eval \${gl_cv_type_${gltype}_signed+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + result=yes +else + result=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval gl_cv_type_${gltype}_signed=\$result + +fi +eval ac_res=\$gl_cv_type_${gltype}_signed + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SIGNED_${GLTYPE} 1 +_ACEOF + + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + + + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if eval \${gl_cv_type_${gltype}_suffix+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval gl_cv_type_${gltype}_suffix=\$glsuf +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + fi + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if eval \${gl_cv_type_${gltype}_suffix+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval gl_cv_type_${gltype}_suffix=\$glsuf +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + + if test $BITSIZEOF_WINT_T -lt 32; then + BITSIZEOF_WINT_T=32 + fi + + STDINT_H=stdint.h + fi + + if test -n "$STDINT_H"; then + GL_GENERATE_STDINT_H_TRUE= + GL_GENERATE_STDINT_H_FALSE='#' +else + GL_GENERATE_STDINT_H_TRUE='#' + GL_GENERATE_STDINT_H_FALSE= +fi + + + + GNULIB_FFS=0; + HAVE_FFS=1; + HAVE_STRCASECMP=1; + HAVE_DECL_STRNCASECMP=1; + + + REPLACE_STRERROR_0=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 +$as_echo_n "checking whether strerror(0) succeeds... " >&6; } +if ${gl_cv_func_strerror_0_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_strerror_0_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +int result = 0; + char *str; + errno = 0; + str = strerror (0); + if (!*str) result |= 1; + if (errno) result |= 2; + if (strstr (str, "nknown") || strstr (str, "ndefined")) + result |= 4; + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strerror_0_works=yes +else + gl_cv_func_strerror_0_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 +$as_echo "$gl_cv_func_strerror_0_works" >&6; } + case "$gl_cv_func_strerror_0_works" in + *yes) ;; + *) + REPLACE_STRERROR_0=1 + +$as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_string_h='<'string.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_string_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'string.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 +$as_echo "$gl_cv_next_string_h" >&6; } + fi + NEXT_STRING_H=$gl_cv_next_string_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'string.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_string_h + fi + NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive + + + + + + + for gl_func in ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_strings_h='<'strings.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_strings_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_strings_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'strings.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_strings_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_strings_h='<'strings.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_strings_h" >&5 +$as_echo "$gl_cv_next_strings_h" >&6; } + fi + NEXT_STRINGS_H=$gl_cv_next_strings_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'strings.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_strings_h + fi + NEXT_AS_FIRST_DIRECTIVE_STRINGS_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_strings_h = yes; then + HAVE_STRINGS_H=1 + else + HAVE_STRINGS_H=0 + fi + + + + for gl_func in ffs strcasecmp strncasecmp; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Minix 3.1.8 has a bug: must be included before + . */ + #include + #include + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + +ac_fn_c_check_decl "$LINENO" "strndup" "ac_cv_have_decl_strndup" "$ac_includes_default" +if test "x$ac_cv_have_decl_strndup" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNDUP $ac_have_decl +_ACEOF + + + +ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" +if test "x$ac_cv_have_decl_strnlen" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNLEN $ac_have_decl +_ACEOF + + + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + + + + WINDOWS_64_BIT_OFF_T=0 + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_types_h='<'sys/types.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_sys_types_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'sys/types.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_sys_types_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 +$as_echo "$gl_cv_next_sys_types_h" >&6; } + fi + NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/types.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_types_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive + + + + + + + + + + + + + + + + + + + +gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' +gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' +gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' + + + if test "$HAVE_LIBUNISTRING" = yes; then + LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"` + LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"` + LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"` + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if ${gt_cv_c_wint_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + wint_t foo = (wchar_t)'\0'; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wint_t=yes +else + gt_cv_c_wint_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then + +$as_echo "#define HAVE_WINT_T 1" >>confdefs.h + + fi + + + + if test $ac_cv_header_features_h = yes; then + HAVE_FEATURES_H=1 + else + HAVE_FEATURES_H=0 + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 +$as_echo_n "checking for inttypes.h... " >&6; } +if ${gl_cv_header_inttypes_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main (void) +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_inttypes_h=yes +else + gl_cv_header_inttypes_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 +$as_echo "$gl_cv_header_inttypes_h" >&6; } + if test $gl_cv_header_inttypes_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 +$as_echo_n "checking for stdint.h... " >&6; } +if ${gl_cv_header_stdint_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include +int +main (void) +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_stdint_h=yes +else + gl_cv_header_stdint_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 +$as_echo "$gl_cv_header_stdint_h" >&6; } + if test $gl_cv_header_stdint_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 +$as_echo_n "checking for intmax_t... " >&6; } +if ${gt_cv_c_intmax_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif + +int +main (void) +{ +intmax_t x = -1; return !x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_intmax_t=yes +else + gt_cv_c_intmax_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 +$as_echo "$gt_cv_c_intmax_t" >&6; } + if test $gt_cv_c_intmax_t = yes; then + +$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h + + else + + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + +cat >>confdefs.h <<_ACEOF +#define intmax_t $ac_type +_ACEOF + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 +$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } +if ${gl_cv_cc_double_expbit0+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "mixed_endianness" >/dev/null 2>&1; then : + gl_cv_cc_double_expbit0="unknown" +else + + : +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main (void) +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +: + case $ac_cv_c_bigendian in #( + yes) + gl_cv_cc_double_expbit0="word 0 bit 20";; #( + no) + gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + gl_cv_cc_double_expbit0="unknown" ;; + esac + + +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_double_expbit0=`cat conftest.out` +else + gl_cv_cc_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 +$as_echo "$gl_cv_cc_double_expbit0" >&6; } + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5 +$as_echo_n "checking whether snprintf returns a byte count as in C99... " >&6; } +if ${gl_cv_func_snprintf_retval_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_retval_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; + darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_retval_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; + aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_retval_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_retval_c99="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) + return 1; + if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) + return 2; + if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) + return 3; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_snprintf_retval_c99=yes +else + gl_cv_func_snprintf_retval_c99=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_retval_c99" >&5 +$as_echo "$gl_cv_func_snprintf_retval_c99" >&6; } + + + + + + + for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include +" +if test "x$ac_cv_have_decl__snprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNPRINTF $ac_have_decl +_ACEOF + + + + case "$gl_cv_func_snprintf_retval_c99" in + *yes) + +$as_echo "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h + + ;; + esac + +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vsnprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VSNPRINTF $ac_have_decl +_ACEOF + + + + + GNULIB_ISWBLANK=0; + GNULIB_WCTYPE=0; + GNULIB_ISWCTYPE=0; + GNULIB_WCTRANS=0; + GNULIB_TOWCTRANS=0; + HAVE_ISWBLANK=1; + HAVE_WCTYPE_T=1; + HAVE_WCTRANS_T=1; + REPLACE_ISWBLANK=0; + + + + + + + if false; then + GL_COND_LIBTOOL_TRUE= + GL_COND_LIBTOOL_FALSE='#' +else + GL_COND_LIBTOOL_TRUE='#' + GL_COND_LIBTOOL_FALSE= +fi + + gl_cond_libtool=false + gl_libdeps= + gl_ltlibdeps= + gl_m4_base='m4' + + + + + + + + + + gl_source_base='grub-core/gnulib' + + + if test $ac_cv_func_alloca_works = no; then + : + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 +$as_echo_n "checking for alloca as a compiler built-in... " >&6; } +if ${gl_cv_rpl_alloca+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Need own alloca" >/dev/null 2>&1; then : + gl_cv_rpl_alloca=yes +else + gl_cv_rpl_alloca=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 +$as_echo "$gl_cv_rpl_alloca" >&6; } + if test $gl_cv_rpl_alloca = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + + ALLOCA_H=alloca.h + else + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + + if test -n "$ALLOCA_H"; then + GL_GENERATE_ALLOCA_H_TRUE= + GL_GENERATE_ALLOCA_H_FALSE='#' +else + GL_GENERATE_ALLOCA_H_TRUE='#' + GL_GENERATE_ALLOCA_H_FALSE= +fi + + + + + + + + ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include +" +if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + +$as_echo "#define GNULIB_PROGRAM_INVOCATION_NAME 1" >>confdefs.h + +fi + + ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include +" +if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + +else + +$as_echo "#define GNULIB_PROGRAM_INVOCATION_SHORT_NAME 1" >>confdefs.h + +fi + + + # Check if program_invocation_name and program_invocation_short_name + # are defined elsewhere. It is improbable that only one of them will + # be defined and other not, I prefer to stay on the safe side and to + # test each one separately. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether program_invocation_name is defined" >&5 +$as_echo_n "checking whether program_invocation_name is defined... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +program_invocation_name = "test"; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_PROGRAM_INVOCATION_NAME 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether program_invocation_short_name is defined" >&5 +$as_echo_n "checking whether program_invocation_short_name is defined... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +program_invocation_short_name = "test"; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_PROGRAM_INVOCATION_SHORT_NAME 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + + + + + + + + + + + + + + + + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=argp_error:2:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=argp_failure:4:c-format" + + + + + + + + if test $ac_cv_func_btowc = no; then + HAVE_BTOWC=0 + else + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5 +$as_echo_n "checking whether btowc(0) is correct... " >&6; } +if ${gl_cv_func_btowc_nul+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess no on Cygwin. + cygwin*) gl_cv_func_btowc_nul="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_nul="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + if (btowc ('\0') != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_btowc_nul=yes +else + gl_cv_func_btowc_nul=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_nul" >&5 +$as_echo "$gl_cv_func_btowc_nul" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 +$as_echo_n "checking whether btowc(EOF) is correct... " >&6; } +if ${gl_cv_func_btowc_eof+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on IRIX. + irix*) gl_cv_func_btowc_eof="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac + if test $LOCALE_FR != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (btowc (EOF) != WEOF) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_btowc_eof=yes +else + gl_cv_func_btowc_eof=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 +$as_echo "$gl_cv_func_btowc_eof" >&6; } + + case "$gl_cv_func_btowc_nul" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + case "$gl_cv_func_btowc_eof" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + fi + + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS btowc.$ac_objext" + + + : + + fi + + + + + + GNULIB_BTOWC=1 + + + + + +$as_echo "#define GNULIB_TEST_BTOWC 1" >>confdefs.h + + + + + if test "x$datarootdir" = x; then + datarootdir='${datadir}' + + fi + if test "x$docdir" = x; then + docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' + + fi + if test "x$htmldir" = x; then + htmldir='${docdir}' + + fi + if test "x$dvidir" = x; then + dvidir='${docdir}' + + fi + if test "x$pdfdir" = x; then + pdfdir='${docdir}' + + fi + if test "x$psdir" = x; then + psdir='${docdir}' + + fi + if test "x$lispdir" = x; then + lispdir='${datarootdir}/emacs/site-lisp' + + fi + if test "x$localedir" = x; then + localedir='${datarootdir}/locale' + + fi + + pkglibexecdir='${libexecdir}/${PACKAGE}' + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if ${gl_cv_double_slash_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # . + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then + +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if ${ac_cv_lib_error_at_line+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +error_at_line (0, 0, "", 0, "an error occurred"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_error_at_line=yes +else + ac_cv_lib_error_at_line=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } + + if test $ac_cv_lib_error_at_line = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext" + + + + : + + fi + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" + + + + + + FLOAT_H= + REPLACE_FLOAT_LDBL=0 + case "$host_os" in + aix* | beos* | openbsd* | mirbsd* | irix*) + FLOAT_H=float.h + ;; + freebsd*) + case "$host_cpu" in + i[34567]86 ) + FLOAT_H=float.h + ;; + x86_64 ) + # On x86_64 systems, the C compiler may still be generating + # 32-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __x86_64__ || defined __amd64__ + yes + #endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + +else + FLOAT_H=float.h +fi +rm -f conftest* + + ;; + esac + ;; + linux*) + case "$host_cpu" in + powerpc*) + FLOAT_H=float.h + ;; + esac + ;; + esac + case "$host_os" in + aix* | freebsd* | linux*) + if test -n "$FLOAT_H"; then + REPLACE_FLOAT_LDBL=1 + fi + ;; + esac + + REPLACE_ITOLD=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 +$as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; } +if ${gl_cv_func_itold_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host" in + sparc*-*-linux*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __arch64__ + yes + #endif +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_func_itold_works="guessing no" +else + gl_cv_func_itold_works="guessing yes" +fi +rm -f conftest* + + ;; + *) gl_cv_func_itold_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int i = -1; +volatile long double ld; +int main () +{ + ld += i * 1.0L; + if (ld > 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_itold_works=yes +else + gl_cv_func_itold_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5 +$as_echo "$gl_cv_func_itold_works" >&6; } + case "$gl_cv_func_itold_works" in + *no) + REPLACE_ITOLD=1 + FLOAT_H=float.h + ;; + esac + + if test -n "$FLOAT_H"; then + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_float_h='<'float.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_float_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'float.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_float_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 +$as_echo "$gl_cv_next_float_h" >&6; } + fi + NEXT_FLOAT_H=$gl_cv_next_float_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'float.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_float_h + fi + NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive + + + + + fi + + if test -n "$FLOAT_H"; then + GL_GENERATE_FLOAT_H_TRUE= + GL_GENERATE_FLOAT_H_FALSE='#' +else + GL_GENERATE_FLOAT_H_TRUE='#' + GL_GENERATE_FLOAT_H_FALSE= +fi + + + + if test $REPLACE_FLOAT_LDBL = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext" + + fi + if test $REPLACE_ITOLD = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext" + + fi + + + + + + FNMATCH_H= + gl_fnmatch_required_lowercase=` + echo $gl_fnmatch_required | LC_ALL=C tr '[A-Z]' '[a-z]' + ` + gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working $gl_fnmatch_required fnmatch" >&5 +$as_echo_n "checking for working $gl_fnmatch_required fnmatch... " >&6; } +if eval \${$gl_fnmatch_cache_var+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test $gl_fnmatch_required = GNU; then + gl_fnmatch_gnu_start= + gl_fnmatch_gnu_end= + else + gl_fnmatch_gnu_start='#if 0' + gl_fnmatch_gnu_end='#endif' + fi + if test "$cross_compiling" = yes; then : + eval "$gl_fnmatch_cache_var=\"guessing no\"" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + static int + y (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == 0; + } + static int + n (char const *pattern, char const *string, int flags) + { + return fnmatch (pattern, string, flags) == FNM_NOMATCH; + } + +int +main (void) +{ +char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]"; + char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]"; + static char const A_1[] = { 'A' - 1, 0 }; + static char const A01[] = { 'A' + 1, 0 }; + static char const a_1[] = { 'a' - 1, 0 }; + static char const a01[] = { 'a' + 1, 0 }; + static char const bs_1[] = { '\\\\' - 1, 0 }; + static char const bs01[] = { '\\\\' + 1, 0 }; + int result = 0; + if (!n ("a*", "", 0)) + return 1; + if (!y ("a*", "abc", 0)) + return 1; + if (!y ("[/b", "[/b", 0)) /*"]]"*/ /* glibc Bugzilla bug 12378 */ + return 1; + if (!n ("d*/*1", "d/s/1", FNM_PATHNAME)) + return 2; + if (!y ("a\\\\bc", "abc", 0)) + return 3; + if (!n ("a\\\\bc", "abc", FNM_NOESCAPE)) + return 3; + if (!y ("*x", ".x", 0)) + return 4; + if (!n ("*x", ".x", FNM_PERIOD)) + return 4; + if (!y (Apat, "\\\\", 0)) + return 5; + if (!y (Apat, "A", 0)) + return 5; + if (!y (apat, "\\\\", 0)) + return 5; + if (!y (apat, "a", 0)) + return 5; + if (!(n (Apat, A_1, 0) == ('A' < '\\\\'))) + return 5; + if (!(n (apat, a_1, 0) == ('a' < '\\\\'))) + return 5; + if (!(y (Apat, A01, 0) == ('A' < '\\\\'))) + return 5; + if (!(y (apat, a01, 0) == ('a' < '\\\\'))) + return 5; + if (!(y (Apat, bs_1, 0) == ('A' < '\\\\'))) + return 5; + if (!(y (apat, bs_1, 0) == ('a' < '\\\\'))) + return 5; + if (!(n (Apat, bs01, 0) == ('A' < '\\\\'))) + return 5; + if (!(n (apat, bs01, 0) == ('a' < '\\\\'))) + return 5; + $gl_fnmatch_gnu_start + if (!y ("xxXX", "xXxX", FNM_CASEFOLD)) + result |= 8; + if (!y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)) + result |= 16; + if (!n ("d*/*1", "d/s/1", FNM_FILE_NAME)) + result |= 32; + if (!y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + if (!y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + if (!y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)) + result |= 64; + $gl_fnmatch_gnu_end + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + eval "$gl_fnmatch_cache_var=yes" +else + eval "$gl_fnmatch_cache_var=no" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +eval ac_res=\$$gl_fnmatch_cache_var + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\"" + if test "$gl_fnmatch_result" = yes; then + rm -f "$gl_source_base/fnmatch.h" + else + FNMATCH_H=fnmatch.h + fi + + if test -n "$FNMATCH_H"; then + GL_GENERATE_FNMATCH_H_TRUE= + GL_GENERATE_FNMATCH_H_FALSE='#' +else + GL_GENERATE_FNMATCH_H_TRUE='#' + GL_GENERATE_FNMATCH_H_FALSE= +fi + + + if test -n "$FNMATCH_H"; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext" + + + +cat >>confdefs.h <<_ACEOF +#define fnmatch ${gl_fnmatch_required_lowercase}_fnmatch +_ACEOF + + + ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include +" +if test "x$ac_cv_have_decl_isblank" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISBLANK $ac_have_decl +_ACEOF + + + + + fi + + + + + + + + + if test $ac_cv_func_getdelim = yes; then + HAVE_GETDELIM=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getdelim function" >&5 +$as_echo_n "checking for working getdelim function... " >&6; } +if ${gl_cv_func_working_getdelim+:} false; then : + $as_echo_n "(cached) " >&6 +else + echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then : + gl_cv_func_working_getdelim="guessing yes" +else + gl_cv_func_working_getdelim="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include +# include +# include + int main () + { + FILE *in = fopen ("./conftest.data", "r"); + if (!in) + return 1; + { + /* Test result for a NULL buffer and a zero size. + Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len = getdelim (&line, &siz, '\n', in); + if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) + return 2; + } + { + /* Test result for a NULL buffer and a non-zero size. + This crashes on FreeBSD 8.0. */ + char *line = NULL; + size_t siz = (size_t)(~0) / 4; + if (getdelim (&line, &siz, '\n', in) == -1) + return 3; + } + return 0; + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_working_getdelim=yes +else + gl_cv_func_working_getdelim=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_getdelim" >&5 +$as_echo "$gl_cv_func_working_getdelim" >&6; } + case "$gl_cv_func_working_getdelim" in + *no) + REPLACE_GETDELIM=1 + ;; + esac + else + HAVE_GETDELIM=0 + fi + + if test $ac_cv_have_decl_getdelim = no; then + HAVE_DECL_GETDELIM=0 + fi + + if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getdelim.$ac_objext" + + + for ac_func in flockfile funlockfile +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl +_ACEOF + + + fi + + + + + + GNULIB_GETDELIM=1 + + + + + +$as_echo "#define GNULIB_TEST_GETDELIM 1" >>confdefs.h + + + + + + + + + + + gl_getline_needs_run_time_check=no + ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" +if test "x$ac_cv_func_getline" = xyes; then : + gl_getline_needs_run_time_check=yes +else + am_cv_func_working_getline=no +fi + + if test $gl_getline_needs_run_time_check = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getline function" >&5 +$as_echo_n "checking for working getline function... " >&6; } +if ${am_cv_func_working_getline+:} false; then : + $as_echo_n "(cached) " >&6 +else + echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then : + am_cv_func_working_getline="guessing yes" +else + am_cv_func_working_getline="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include +# include +# include + int main () + { + FILE *in = fopen ("./conftest.data", "r"); + if (!in) + return 1; + { + /* Test result for a NULL buffer and a zero size. + Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len = getline (&line, &siz, in); + if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) + return 2; + } + { + /* Test result for a NULL buffer and a non-zero size. + This crashes on FreeBSD 8.0. */ + char *line = NULL; + size_t siz = (size_t)(~0) / 4; + if (getline (&line, &siz, in) == -1) + return 3; + } + return 0; + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_working_getline=yes +else + am_cv_func_working_getline=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_working_getline" >&5 +$as_echo "$am_cv_func_working_getline" >&6; } + fi + + if test $ac_cv_have_decl_getline = no; then + HAVE_DECL_GETLINE=0 + fi + + case "$am_cv_func_working_getline" in + *no) + REPLACE_GETLINE=1 + ;; + esac + + if test $REPLACE_GETLINE = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getline.$ac_objext" + + + : + + fi + + + + + + GNULIB_GETLINE=1 + + + + + +$as_echo "#define GNULIB_TEST_GETLINE 1" >>confdefs.h + + + + + + + + + if test $REPLACE_GETOPT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext" + + + + + GNULIB_GL_UNISTD_H_GETOPT=1 + fi + + + +$as_echo "#define GNULIB_TEST_GETOPT_GNU 1" >>confdefs.h + + + + + + + + REPLACE_GETOPT=1 + + if test $REPLACE_GETOPT = 1; then + + GETOPT_H=getopt.h + +$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h + + + + fi + + if test $REPLACE_GETOPT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext" + + + + + GNULIB_GL_UNISTD_H_GETOPT=1 + fi + + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_langinfo_h='<'langinfo.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_langinfo_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_langinfo_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'langinfo.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_langinfo_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_langinfo_h='<'langinfo.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_langinfo_h" >&5 +$as_echo "$gl_cv_next_langinfo_h" >&6; } + fi + NEXT_LANGINFO_H=$gl_cv_next_langinfo_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'langinfo.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_langinfo_h + fi + NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive + + + + + + HAVE_LANGINFO_CODESET=0 + HAVE_LANGINFO_T_FMT_AMPM=0 + HAVE_LANGINFO_ERA=0 + HAVE_LANGINFO_YESEXPR=0 + + if test $ac_cv_header_langinfo_h = yes; then + HAVE_LANGINFO_H=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines CODESET" >&5 +$as_echo_n "checking whether langinfo.h defines CODESET... " >&6; } +if ${gl_cv_header_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int a = CODESET; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_codeset=yes +else + gl_cv_header_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_codeset" >&5 +$as_echo "$gl_cv_header_langinfo_codeset" >&6; } + if test $gl_cv_header_langinfo_codeset = yes; then + HAVE_LANGINFO_CODESET=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines T_FMT_AMPM" >&5 +$as_echo_n "checking whether langinfo.h defines T_FMT_AMPM... " >&6; } +if ${gl_cv_header_langinfo_t_fmt_ampm+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int a = T_FMT_AMPM; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_t_fmt_ampm=yes +else + gl_cv_header_langinfo_t_fmt_ampm=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_t_fmt_ampm" >&5 +$as_echo "$gl_cv_header_langinfo_t_fmt_ampm" >&6; } + if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then + HAVE_LANGINFO_T_FMT_AMPM=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ERA" >&5 +$as_echo_n "checking whether langinfo.h defines ERA... " >&6; } +if ${gl_cv_header_langinfo_era+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int a = ERA; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_era=yes +else + gl_cv_header_langinfo_era=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_era" >&5 +$as_echo "$gl_cv_header_langinfo_era" >&6; } + if test $gl_cv_header_langinfo_era = yes; then + HAVE_LANGINFO_ERA=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines YESEXPR" >&5 +$as_echo_n "checking whether langinfo.h defines YESEXPR... " >&6; } +if ${gl_cv_header_langinfo_yesexpr+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int a = YESEXPR; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_yesexpr=yes +else + gl_cv_header_langinfo_yesexpr=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_yesexpr" >&5 +$as_echo "$gl_cv_header_langinfo_yesexpr" >&6; } + if test $gl_cv_header_langinfo_yesexpr = yes; then + HAVE_LANGINFO_YESEXPR=1 + fi + else + HAVE_LANGINFO_H=0 + fi + + + + + + + + for gl_func in nl_langinfo; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + + + + + + LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\"" + + + + + + + + + + case "$host_os" in + solaris*) + +$as_echo "#define _LCONV_C99 1" >>confdefs.h + + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5 +$as_echo_n "checking whether locale.h conforms to POSIX:2001... " >&6; } +if ${gl_cv_header_locale_h_posix2001+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + int x = LC_MESSAGES; + int y = sizeof (((struct lconv *) 0)->decimal_point); +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_locale_h_posix2001=yes +else + gl_cv_header_locale_h_posix2001=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5 +$as_echo "$gl_cv_header_locale_h_posix2001" >&6; } + + + if test $ac_cv_header_xlocale_h = yes; then + HAVE_XLOCALE_H=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5 +$as_echo_n "checking whether locale.h defines locale_t... " >&6; } +if ${gl_cv_header_locale_has_locale_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + locale_t x; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_locale_has_locale_t=yes +else + gl_cv_header_locale_has_locale_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_has_locale_t" >&5 +$as_echo "$gl_cv_header_locale_has_locale_t" >&6; } + if test $gl_cv_header_locale_has_locale_t = yes; then + gl_cv_header_locale_h_needs_xlocale_h=no + else + gl_cv_header_locale_h_needs_xlocale_h=yes + fi + else + HAVE_XLOCALE_H=0 + gl_cv_header_locale_h_needs_xlocale_h=no + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5 +$as_echo_n "checking whether struct lconv is properly defined... " >&6; } +if ${gl_cv_sys_struct_lconv_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + struct lconv l; + int x = sizeof (l.decimal_point); + int y = sizeof (l.int_p_cs_precedes); +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_lconv_ok=yes +else + gl_cv_sys_struct_lconv_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5 +$as_echo "$gl_cv_sys_struct_lconv_ok" >&6; } + if test $gl_cv_sys_struct_lconv_ok = no; then + REPLACE_STRUCT_LCONV=1 + fi + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_locale_h='<'locale.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_locale_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'locale.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_locale_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5 +$as_echo "$gl_cv_next_locale_h" >&6; } + fi + NEXT_LOCALE_H=$gl_cv_next_locale_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'locale.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_locale_h + fi + NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive + + + + + + + for gl_func in setlocale duplocale; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +/* Some systems provide declarations in a non-standard header. */ +#if HAVE_XLOCALE_H +# include +#endif + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + + if test $REPLACE_STRUCT_LCONV = 1; then + REPLACE_LOCALECONV=1 + fi + + if test $REPLACE_LOCALECONV = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS localeconv.$ac_objext" + + + ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include +" +if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1 +_ACEOF + + +fi + + + fi + + + + + + GNULIB_LOCALECONV=1 + + + + + +$as_echo "#define GNULIB_TEST_LOCALECONV 1" >>confdefs.h + + + + + + + for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on platforms where we know the result. + *-gnu* | freebsd* | netbsd* | openbsd* \ + | hpux* | solaris* | cygwin* | mingw*) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H + # include + #else + char *malloc (); + #endif + +int +main (void) +{ +return ! malloc (0); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } + if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC_GNU 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC_GNU 0" >>confdefs.h + + REPLACE_MALLOC=1 + +fi + + + if test $REPLACE_MALLOC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" + + fi + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_MALLOC_GNU 1 +_ACEOF + + + + + + if test $gl_cv_func_malloc_posix = yes; then + +$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h + + else + REPLACE_MALLOC=1 + fi + + if test $REPLACE_MALLOC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" + + fi + + + + + + GNULIB_MALLOC_POSIX=1 + + + + + +$as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + ac_fn_c_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include + +" +if test "x$ac_cv_have_decl_mbrtowc" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBRTOWC $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_mbrtowc = yes; then + REPLACE_MBRTOWC=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + else + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL pwc argument... " >&6; } +if ${gl_cv_func_mbrtowc_null_arg1+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris. + solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + int result = 0; + + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "\303\237er"; + mbstate_t state; + wchar_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 5, &state); + if (ret != 2) + result |= 1; + if (!mbsinit (&state)) + result |= 2; + + memset (&state, '\0', sizeof (mbstate_t)); + ret = mbrtowc (NULL, input, 5, &state); + if (ret != 2) /* Solaris 7 fails here: ret is -1. */ + result |= 4; + if (!mbsinit (&state)) + result |= 8; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg1=yes +else + gl_cv_func_mbrtowc_null_arg1=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg1" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } +if ${gl_cv_func_mbrtowc_null_arg2+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg2=yes +else + gl_cv_func_mbrtowc_null_arg2=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg2" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 +$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; } +if ${gl_cv_func_mbrtowc_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX, Solaris, native Windows. + hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ + || { case "$host_os" in mingw*) true;; *) false;; esac; }; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + int result = 0; + int found_some_locale = 0; + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + result |= 1; + } + found_some_locale = 1; + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + result |= 2; + } + found_some_locale = 1; + } + /* This fails on native Windows. */ + if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) + { + char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 4; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) + { + char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 8; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_China.936") != NULL) + { + char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 16; + } + found_some_locale = 1; + } + return (found_some_locale ? result : 77); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_retval=yes +else + if test $? != 77; then + gl_cv_func_mbrtowc_retval=no + fi + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_retval" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 +$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } +if ${gl_cv_func_mbrtowc_nul_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_nul_retval=yes +else + gl_cv_func_mbrtowc_nul_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } + + case "$gl_cv_func_mbrtowc_null_arg1" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_null_arg2" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + fi + fi + + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext" + + + : + + fi + + + + + + GNULIB_MBRTOWC=1 + + + + + +$as_echo "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h + + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + ac_fn_c_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" " +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include + +" +if test "x$ac_cv_have_decl_mbsinit" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBSINIT $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_mbsinit = yes; then + REPLACE_MBSINIT=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + else + case "$host_os" in + mingw*) REPLACE_MBSINIT=1 ;; + esac + fi + fi + + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext" + + + : + + fi + + + + + + GNULIB_MBSINIT=1 + + + + + +$as_echo "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_mbsrtowcs = no; then + HAVE_MBSRTOWCS=0 + ac_fn_c_check_decl "$LINENO" "mbsrtowcs" "ac_cv_have_decl_mbsrtowcs" " +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include + +" +if test "x$ac_cv_have_decl_mbsrtowcs" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBSRTOWCS $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_mbsrtowcs = yes; then + REPLACE_MBSRTOWCS=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSRTOWCS=1 + else + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbsrtowcs works" >&5 +$as_echo_n "checking whether mbsrtowcs works... " >&6; } +if ${gl_cv_func_mbsrtowcs_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX, Solaris, mingw. + hpux* | solaris* | mingw*) gl_cv_func_mbsrtowcs_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbsrtowcs_works="guessing yes" ;; + esac + if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + int result = 0; + /* Test whether the function supports a NULL destination argument. + This fails on native Windows. */ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + const char input[] = "\337er"; + const char *src = input; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbsrtowcs (NULL, &src, 1, &state) != 3 + || src != input) + result |= 1; + } + /* Test whether the function works when started with a conversion state + in non-initial state. This fails on HP-UX 11.11 and Solaris 10. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + const char input[] = "B\303\274\303\237er"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 2; + if (mbsrtowcs (NULL, &src, 10, &state) != 4) + result |= 2; + } + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "<\306\374\313\334\270\354>"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 4; + if (mbsrtowcs (NULL, &src, 10, &state) != 3) + result |= 4; + } + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + const char input[] = "B\250\271\201\060\211\070er"; + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2)) + if (!mbsinit (&state)) + { + const char *src = input + 2; + if (mbsrtowcs (NULL, &src, 10, &state) != 4) + result |= 8; + } + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbsrtowcs_works=yes +else + gl_cv_func_mbsrtowcs_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbsrtowcs_works" >&5 +$as_echo "$gl_cv_func_mbsrtowcs_works" >&6; } + + case "$gl_cv_func_mbsrtowcs_works" in + *yes) ;; + *) REPLACE_MBSRTOWCS=1 ;; + esac + fi + fi + + if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext" + + + : + + fi + + + + + + GNULIB_MBSRTOWCS=1 + + + + + +$as_echo "#define GNULIB_TEST_MBSRTOWCS 1" >>confdefs.h + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbswidth is declared in " >&5 +$as_echo_n "checking whether mbswidth is declared in ... " >&6; } +if ${ac_cv_have_decl_mbswidth+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + +int +main (void) +{ + + char *p = (char *) mbswidth; + return !p; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_have_decl_mbswidth=yes +else + ac_cv_have_decl_mbswidth=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_mbswidth" >&5 +$as_echo "$ac_cv_have_decl_mbswidth" >&6; } + if test $ac_cv_have_decl_mbswidth = yes; then + ac_val=1 + else + ac_val=0 + fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBSWIDTH_IN_WCHAR_H $ac_val +_ACEOF + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } +if ${ac_cv_type_mbstate_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int +main (void) +{ +mbstate_t x; return sizeof x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_mbstate_t=yes +else + ac_cv_type_mbstate_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 +$as_echo "$ac_cv_type_mbstate_t" >&6; } + if test $ac_cv_type_mbstate_t = yes; then + +$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h + + else + +$as_echo "#define mbstate_t int" >>confdefs.h + + fi + + + + + + if false; then + REPLACE_MBTOWC=1 + fi + + if test $REPLACE_MBTOWC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbtowc.$ac_objext" + + + : + + fi + + + + + + GNULIB_MBTOWC=1 + + + + + +$as_echo "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h + + + + + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext" + + + for ac_header in bp-sym.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default" +if test "x$ac_cv_header_bp_sym_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BP_SYM_H 1 +_ACEOF + +fi + +done + + + fi + + + + + + GNULIB_MEMCHR=1 + + + + + +$as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h + + + + + + + + + + for ac_func in mempcpy +do : + ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" +if test "x$ac_cv_func_mempcpy" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MEMPCPY 1 +_ACEOF + +fi +done + + if test $ac_cv_func_mempcpy = no; then + HAVE_MEMPCPY=0 + fi + + if test $HAVE_MEMPCPY = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mempcpy.$ac_objext" + + + : + + fi + + + + + + GNULIB_MEMPCPY=1 + + + + + +$as_echo "#define GNULIB_TEST_MEMPCPY 1" >>confdefs.h + + + + + + if test $ac_cv_func__set_invalid_parameter_handler = yes; then + HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 + +$as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h + + else + HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 + fi + + + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS msvc-inval.$ac_objext" + + fi + + + + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS msvc-nothrow.$ac_objext" + + fi + + + + + + if test $ac_cv_func_nl_langinfo = yes; then + # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether YESEXPR works" >&5 +$as_echo_n "checking whether YESEXPR works... " >&6; } +if ${gl_cv_func_nl_langinfo_yesexpr_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess no on irix systems. + irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; + # Guess yes elsewhere. + *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +return !*nl_langinfo(YESEXPR); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_nl_langinfo_yesexpr_works=yes +else + gl_cv_func_nl_langinfo_yesexpr_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nl_langinfo_yesexpr_works" >&5 +$as_echo "$gl_cv_func_nl_langinfo_yesexpr_works" >&6; } + case $gl_cv_func_nl_langinfo_yesexpr_works in + *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; + *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; + esac + +cat >>confdefs.h <<_ACEOF +#define FUNC_NL_LANGINFO_YESEXPR_WORKS $FUNC_NL_LANGINFO_YESEXPR_WORKS +_ACEOF + + if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1 \ + && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1; then + : + else + REPLACE_NL_LANGINFO=1 + +$as_echo "#define REPLACE_NL_LANGINFO 1" >>confdefs.h + + fi + else + HAVE_NL_LANGINFO=0 + fi + + if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS nl_langinfo.$ac_objext" + + fi + + + + + + GNULIB_NL_LANGINFO=1 + + + + + +$as_echo "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h + + + + ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include +" +if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include +" +if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl +_ACEOF + + + + + + for ac_func in rawmemchr +do : + ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr" +if test "x$ac_cv_func_rawmemchr" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RAWMEMCHR 1 +_ACEOF + +fi +done + + if test $ac_cv_func_rawmemchr = no; then + HAVE_RAWMEMCHR=0 + fi + + if test $HAVE_RAWMEMCHR = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS rawmemchr.$ac_objext" + + : + fi + + + + + + GNULIB_RAWMEMCHR=1 + + + + + +$as_echo "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h + + + + + + + if test $gl_cv_func_malloc_posix = yes; then + +$as_echo "#define HAVE_REALLOC_POSIX 1" >>confdefs.h + + else + REPLACE_REALLOC=1 + fi + + if test $REPLACE_REALLOC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" + + fi + + + + + + GNULIB_REALLOC_POSIX=1 + + + + + +$as_echo "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h + + + + + +# Check whether --with-included-regex was given. +if test "${with_included_regex+set}" = set; then : + withval=$with_included_regex; +fi + + + case $with_included_regex in #( + yes|no) ac_use_included_regex=$with_included_regex + ;; + '') + # If the system regex support is good enough that it passes the + # following run test, then default to *not* using the included regex.c. + # If cross compiling, assume the test would fail and use the included + # regex.c. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5 +$as_echo_n "checking for working re_compile_pattern... " >&6; } +if ${gl_cv_func_re_compile_pattern_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_func_re_compile_pattern_working=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + + #include + #include + #include + #if HAVE_DECL_ALARM + # include + # include + #endif + +int +main (void) +{ +int result = 0; + static struct re_pattern_buffer regex; + unsigned char folded_chars[UCHAR_MAX + 1]; + int i; + const char *s; + struct re_registers regs; + +#if HAVE_DECL_ALARM + /* Some builds of glibc go into an infinite loop on this test. */ + signal (SIGALRM, SIG_DFL); + alarm (2); +#endif + if (setlocale (LC_ALL, "en_US.UTF-8")) + { + { + /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html + This test needs valgrind to catch the bug on Debian + GNU/Linux 3.1 x86, but it might catch the bug better + on other platforms and it shouldn't hurt to try the + test here. */ + static char const pat[] = "insert into"; + static char const data[] = + "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; + re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE + | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + result |= 1; + else if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, ®s) + != -1) + result |= 1; + } + + { + /* This test is from glibc bug 15078. + The test case is from Andreas Schwab in + . + */ + static char const pat[] = "[^x]x"; + static char const data[] = + "\xe1\x80\x80\xe1\x80\xbb\xe1\x80\xbd\xe1\x80\x94\xe1\x80" + "\xba\xe1\x80\xaf\xe1\x80\x95\xe1\x80\xbax"; + re_set_syntax (0); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + result |= 1; + else if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, 0) + != 21) + result |= 1; + } + + if (! setlocale (LC_ALL, "C")) + return 1; + } + + /* This test is from glibc bug 3957, reported by Andrew Mackey. */ + re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[^x]b", 6, ®ex); + if (s) + result |= 2; + /* This should fail, but succeeds for glibc-2.5. */ + else if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) + result |= 2; + + /* This regular expression is from Spencer ere test number 75 + in grep-2.3. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (®ex, 0, sizeof regex); + for (i = 0; i <= UCHAR_MAX; i++) + folded_chars[i] = i; + regex.translate = folded_chars; + s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); + /* This should fail with _Invalid character class name_ error. */ + if (!s) + result |= 4; + + /* Ensure that [b-a] is diagnosed as invalid, when + using RE_NO_EMPTY_RANGES. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[b-a]", 6, ®ex); + if (s == 0) + result |= 8; + + /* This should succeed, but does not for glibc-2.1.3. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("{1", 2, ®ex); + if (s) + result |= 8; + + /* The following example is derived from a problem report + against gawk from Jorge Stolfi . */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[an\371]*n", 7, ®ex); + if (s) + result |= 8; + /* This should match, but does not for glibc-2.2.1. */ + else if (re_match (®ex, "an", 2, 0, ®s) != 2) + result |= 8; + + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + result |= 8; + /* glibc-2.2.93 does not work with a negative RANGE argument. */ + else if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) + result |= 8; + + /* The version of regex.c in older versions of gnulib + ignored RE_ICASE. Detect that problem too. */ + re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + result |= 16; + else if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) + result |= 16; + + /* Catch a bug reported by Vin Shelton in + http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html + */ + re_set_syntax (RE_SYNTAX_POSIX_BASIC + & ~RE_CONTEXT_INVALID_DUP + & ~RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); + if (s) + result |= 32; + + /* REG_STARTEND was added to glibc on 2004-01-15. + Reject older versions. */ + if (! REG_STARTEND) + result |= 64; + +#if 0 + /* It would be nice to reject hosts whose regoff_t values are too + narrow (including glibc on hosts with 64-bit ptrdiff_t and + 32-bit int), but we should wait until glibc implements this + feature. Otherwise, support for equivalence classes and + multibyte collation symbols would always be broken except + when compiling --without-included-regex. */ + if (sizeof (regoff_t) < sizeof (ptrdiff_t) + || sizeof (regoff_t) < sizeof (ssize_t)) + result |= 64; +#endif + + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_re_compile_pattern_working=yes +else + gl_cv_func_re_compile_pattern_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_re_compile_pattern_working" >&5 +$as_echo "$gl_cv_func_re_compile_pattern_working" >&6; } + case $gl_cv_func_re_compile_pattern_working in #( + yes) ac_use_included_regex=no;; #( + no) ac_use_included_regex=yes;; + esac + ;; + *) as_fn_error $? "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5 + ;; + esac + + if test $ac_use_included_regex = yes; then + +$as_echo "#define _REGEX_INCLUDE_LIMITS_H 1" >>confdefs.h + + +$as_echo "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h + + +$as_echo "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h + + +$as_echo "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h + + +$as_echo "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h + + +$as_echo "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h + + +$as_echo "#define re_search rpl_re_search" >>confdefs.h + + +$as_echo "#define re_search_2 rpl_re_search_2" >>confdefs.h + + +$as_echo "#define re_match rpl_re_match" >>confdefs.h + + +$as_echo "#define re_match_2 rpl_re_match_2" >>confdefs.h + + +$as_echo "#define re_set_registers rpl_re_set_registers" >>confdefs.h + + +$as_echo "#define re_comp rpl_re_comp" >>confdefs.h + + +$as_echo "#define re_exec rpl_re_exec" >>confdefs.h + + +$as_echo "#define regcomp rpl_regcomp" >>confdefs.h + + +$as_echo "#define regexec rpl_regexec" >>confdefs.h + + +$as_echo "#define regerror rpl_regerror" >>confdefs.h + + +$as_echo "#define regfree rpl_regfree" >>confdefs.h + + fi + + if test $ac_use_included_regex = yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS regex.$ac_objext" + + + + + + + + for ac_header in libintl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" +if test "x$ac_cv_header_libintl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBINTL_H 1 +_ACEOF + +fi + +done + + + ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include +" +if test "x$ac_cv_have_decl_isblank" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISBLANK $ac_have_decl +_ACEOF + + + fi + + for ac_header in stdint.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 +$as_echo_n "checking for SIZE_MAX... " >&6; } +if ${gl_cv_size_max+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_size_max= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Found it" >/dev/null 2>&1; then : + gl_cv_size_max=yes +fi +rm -f conftest* + + if test -z "$gl_cv_size_max"; then + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include +#include "; then : + +else + size_t_bits_minus_1= +fi + + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : + +else + fits_in_uint= +fi + + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + extern size_t foo; + extern unsigned long foo; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + fits_in_uint=0 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 +$as_echo "$gl_cv_size_max" >&6; } + if test "$gl_cv_size_max" != yes; then + +cat >>confdefs.h <<_ACEOF +#define SIZE_MAX $gl_cv_size_max +_ACEOF + + fi + + + + + ac_fn_c_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include +" +if test "x$ac_cv_have_decl_sleep" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SLEEP $ac_have_decl +_ACEOF + + + if test $ac_cv_have_decl_sleep != yes; then + HAVE_SLEEP=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working sleep" >&5 +$as_echo_n "checking for working sleep... " >&6; } +if ${gl_cv_func_sleep_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_sleep_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_sleep_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +static void +handle_alarm (int sig) +{ + if (sig != SIGALRM) + _exit (2); +} + +int +main (void) +{ + + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also lack sleep. */ + unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ + unsigned int remaining; + signal (SIGALRM, handle_alarm); + alarm (1); + remaining = sleep (pentecost); + if (remaining > pentecost) + return 3; + if (remaining <= pentecost - 10) + return 4; + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_sleep_works=yes +else + gl_cv_func_sleep_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_sleep_works" >&5 +$as_echo "$gl_cv_func_sleep_works" >&6; } + case "$gl_cv_func_sleep_works" in + *yes) ;; + *) + REPLACE_SLEEP=1 + ;; + esac + fi + + if test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS sleep.$ac_objext" + + fi + + + + + + GNULIB_SLEEP=1 + + + + + +$as_echo "#define GNULIB_TEST_SLEEP 1" >>confdefs.h + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 +$as_echo_n "checking for ssize_t... " >&6; } +if ${gt_cv_ssize_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +int x = sizeof (ssize_t *) + sizeof (ssize_t); + return !x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_ssize_t=yes +else + gt_cv_ssize_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 +$as_echo "$gt_cv_ssize_t" >&6; } + if test $gt_cv_ssize_t = no; then + +$as_echo "#define ssize_t int" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working stdalign.h" >&5 +$as_echo_n "checking for working stdalign.h... " >&6; } +if ${gl_cv_header_working_stdalign_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + + /* Test that alignof yields a result consistent with offsetof. + This catches GCC bug 52023 + . */ + #ifdef __cplusplus + template struct alignof_helper { char a; t b; }; + # define ao(type) offsetof (alignof_helper, b) + #else + # define ao(type) offsetof (struct { char a; type b; }, b) + #endif + char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; + char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; + char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; + + /* Test _Alignas only on platforms where gnulib can help. */ + #if \ + (__GNUC__ || __IBMC__ || __IBMCPP__ \ + || 0x5110 <= __SUNPRO_C || 1300 <= _MSC_VER) + struct alignas_test { char c; char alignas (8) alignas_8; }; + char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 + ? 1 : -1]; + #endif + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_working_stdalign_h=yes +else + gl_cv_header_working_stdalign_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdalign_h" >&5 +$as_echo "$gl_cv_header_working_stdalign_h" >&6; } + + if test $gl_cv_header_working_stdalign_h = yes; then + STDALIGN_H='' + else + STDALIGN_H='stdalign.h' + fi + + + if test -n "$STDALIGN_H"; then + GL_GENERATE_STDALIGN_H_TRUE= + GL_GENERATE_STDALIGN_H_FALSE='#' +else + GL_GENERATE_STDALIGN_H_TRUE='#' + GL_GENERATE_STDALIGN_H_FALSE= +fi + + + + + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + + if test -n "$STDBOOL_H"; then + GL_GENERATE_STDBOOL_H_TRUE= + GL_GENERATE_STDBOOL_H_FALSE='#' +else + GL_GENERATE_STDBOOL_H_TRUE='#' + GL_GENERATE_STDBOOL_H_FALSE= +fi + + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + + + + + + STDDEF_H= + if test $gt_cv_c_wchar_t = no; then + HAVE_WCHAR_T=0 + STDDEF_H=stddef.h + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 +$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } +if ${gl_cv_decl_null_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + int test[2 * (sizeof NULL == sizeof (void *)) -1]; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_decl_null_works=yes +else + gl_cv_decl_null_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 +$as_echo "$gl_cv_decl_null_works" >&6; } + if test $gl_cv_decl_null_works = no; then + REPLACE_NULL=1 + STDDEF_H=stddef.h + fi + + if test -n "$STDDEF_H"; then + GL_GENERATE_STDDEF_H_TRUE= + GL_GENERATE_STDDEF_H_FALSE='#' +else + GL_GENERATE_STDDEF_H_TRUE='#' + GL_GENERATE_STDDEF_H_FALSE= +fi + + if test -n "$STDDEF_H"; then + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stddef_h='<'stddef.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_stddef_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'stddef.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 +$as_echo "$gl_cv_next_stddef_h" >&6; } + fi + NEXT_STDDEF_H=$gl_cv_next_stddef_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stddef.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stddef_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive + + + + + fi + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdio_h='<'stdio.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_stdio_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'stdio.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_stdio_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 +$as_echo "$gl_cv_next_stdio_h" >&6; } + fi + NEXT_STDIO_H=$gl_cv_next_stdio_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdio.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdio_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive + + + + + + GNULIB_FSCANF=1 + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_FSCANF 1 +_ACEOF + + + GNULIB_SCANF=1 + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_SCANF 1 +_ACEOF + + + GNULIB_FGETC=1 + GNULIB_GETC=1 + GNULIB_GETCHAR=1 + GNULIB_FGETS=1 + GNULIB_FREAD=1 + + + GNULIB_FPRINTF=1 + GNULIB_PRINTF=1 + GNULIB_VFPRINTF=1 + GNULIB_VPRINTF=1 + GNULIB_FPUTC=1 + GNULIB_PUTC=1 + GNULIB_PUTCHAR=1 + GNULIB_FPUTS=1 + GNULIB_PUTS=1 + GNULIB_FWRITE=1 + + + + + for gl_func in dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdlib_h='<'stdlib.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_stdlib_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'stdlib.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 +$as_echo "$gl_cv_next_stdlib_h" >&6; } + fi + NEXT_STDLIB_H=$gl_cv_next_stdlib_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdlib.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdlib_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive + + + + + + + for gl_func in _Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r random random_r realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtoll strtoull unlockpt unsetenv; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#if HAVE_SYS_LOADAVG_H +# include +#endif +#if HAVE_RANDOM_H +# include +#endif + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + for ac_func in strcasecmp +do : + ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" +if test "x$ac_cv_func_strcasecmp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCASECMP 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strcasecmp = no; then + HAVE_STRCASECMP=0 + fi + + + + for ac_func in strncasecmp +do : + ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" +if test "x$ac_cv_func_strncasecmp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRNCASECMP 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strncasecmp = yes; then + HAVE_STRNCASECMP=1 + else + HAVE_STRNCASECMP=0 + fi + ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default" +if test "x$ac_cv_have_decl_strncasecmp" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNCASECMP $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_strncasecmp = no; then + HAVE_DECL_STRNCASECMP=0 + fi + + + if test $HAVE_STRCASECMP = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strcasecmp.$ac_objext" + + + : + + fi + if test $HAVE_STRNCASECMP = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strncasecmp.$ac_objext" + + + : + + fi + + + + + for ac_func in strchrnul +do : + ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" +if test "x$ac_cv_func_strchrnul" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCHRNUL 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strchrnul = no; then + HAVE_STRCHRNUL=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strchrnul works" >&5 +$as_echo_n "checking whether strchrnul works... " >&6; } +if ${gl_cv_func_strchrnul_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined __CYGWIN__ + #include + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) + Lucky user + #endif +#else + Lucky user +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky user" >/dev/null 2>&1; then : + gl_cv_func_strchrnul_works="guessing yes" +else + gl_cv_func_strchrnul_works="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include /* for strchrnul */ + +int +main (void) +{ +const char *buf = "a"; + return strchrnul (buf, 'b') != buf + 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strchrnul_works=yes +else + gl_cv_func_strchrnul_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strchrnul_works" >&5 +$as_echo "$gl_cv_func_strchrnul_works" >&6; } + case "$gl_cv_func_strchrnul_works" in + *yes) ;; + *) REPLACE_STRCHRNUL=1 ;; + esac + fi + + if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strchrnul.$ac_objext" + + : + fi + + + + + + GNULIB_STRCHRNUL=1 + + + + + +$as_echo "#define GNULIB_TEST_STRCHRNUL 1" >>confdefs.h + + + + + + + + + if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 +$as_echo_n "checking for working strerror function... " >&6; } +if ${gl_cv_func_working_strerror+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_working_strerror="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +if (!*strerror (-2)) return 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_working_strerror=yes +else + gl_cv_func_working_strerror=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5 +$as_echo "$gl_cv_func_working_strerror" >&6; } + case "$gl_cv_func_working_strerror" in + *yes) ;; + *) + REPLACE_STRERROR=1 + ;; + esac + + else + REPLACE_STRERROR=1 + fi + + if test $REPLACE_STRERROR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext" + + fi + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_STRERROR 1 +_ACEOF + + + + + + + + GNULIB_STRERROR=1 + + + + + +$as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h + + + + + + if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strerror-override.$ac_objext" + + + + + + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + +fi + +done + + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 + fi + + + fi + + + + + + + + + + + + + if test $ac_cv_have_decl_strndup = no; then + HAVE_DECL_STRNDUP=0 + fi + + if test $ac_cv_func_strndup = yes; then + HAVE_STRNDUP=1 + # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strndup" >&5 +$as_echo_n "checking for working strndup... " >&6; } +if ${gl_cv_func_strndup_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + + case $host_os in + aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; + *) gl_cv_func_strndup_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main (void) +{ + +#if !HAVE_DECL_STRNDUP + extern + #ifdef __cplusplus + "C" + #endif + char *strndup (const char *, size_t); +#endif + char *s; + s = strndup ("some longer string", 15); + free (s); + s = strndup ("shorter string", 13); + return s[13] != '\0'; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strndup_works=yes +else + gl_cv_func_strndup_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strndup_works" >&5 +$as_echo "$gl_cv_func_strndup_works" >&6; } + case $gl_cv_func_strndup_works in + *no) REPLACE_STRNDUP=1 ;; + esac + else + HAVE_STRNDUP=0 + fi + + if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext" + + fi + + + + + + GNULIB_STRNDUP=1 + + + + + +$as_echo "#define GNULIB_TEST_STRNDUP 1" >>confdefs.h + + + + + + + + + + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + else + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 +$as_echo_n "checking for working strnlen... " >&6; } +if ${ac_cv_func_strnlen_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + # Guess no on AIX systems, yes otherwise. + case "$host_os" in + aix*) ac_cv_func_strnlen_working=no;; + *) ac_cv_func_strnlen_working=yes;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ + +#define S "foobar" +#define S_LEN (sizeof S - 1) + + /* At least one implementation is buggy: that of AIX 4.3 would + give strnlen (S, 1) == 3. */ + + int i; + for (i = 0; i < S_LEN + 1; ++i) + { + int expected = i <= S_LEN ? i : S_LEN; + if (strnlen (S, i) != expected) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strnlen_working=yes +else + ac_cv_func_strnlen_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strnlen_working" >&5 +$as_echo "$ac_cv_func_strnlen_working" >&6; } +test $ac_cv_func_strnlen_working = no && : + + + if test $ac_cv_func_strnlen_working = no; then + REPLACE_STRNLEN=1 + fi + fi + + if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strnlen.$ac_objext" + + : + fi + + + + + + GNULIB_STRNLEN=1 + + + + + +$as_echo "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h + + + + + + + + if test $ac_cv_header_sysexits_h = yes; then + HAVE_SYSEXITS_H=1 + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sysexits_h='<'sysexits.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_sysexits_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sysexits_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'sysexits.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_sysexits_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_sysexits_h='<'sysexits.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sysexits_h" >&5 +$as_echo "$gl_cv_next_sysexits_h" >&6; } + fi + NEXT_SYSEXITS_H=$gl_cv_next_sysexits_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sysexits.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sysexits_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H=$gl_next_as_first_directive + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +switch (0) + { + case EX_OK: + case EX_USAGE: + case EX_DATAERR: + case EX_NOINPUT: + case EX_NOUSER: + case EX_NOHOST: + case EX_UNAVAILABLE: + case EX_SOFTWARE: + case EX_OSERR: + case EX_OSFILE: + case EX_CANTCREAT: + case EX_IOERR: + case EX_TEMPFAIL: + case EX_PROTOCOL: + case EX_NOPERM: + case EX_CONFIG: + break; + } + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + SYSEXITS_H= +else + SYSEXITS_H=sysexits.h +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + HAVE_SYSEXITS_H=0 + SYSEXITS_H=sysexits.h + fi + + + if test -n "$SYSEXITS_H"; then + GL_GENERATE_SYSEXITS_H_TRUE= + GL_GENERATE_SYSEXITS_H_FALSE='#' +else + GL_GENERATE_SYSEXITS_H_TRUE='#' + GL_GENERATE_SYSEXITS_H_FALSE= +fi + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_unistd_h='<'unistd.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_unistd_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_unistd_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'unistd.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_unistd_h='<'unistd.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 +$as_echo "$gl_cv_next_unistd_h" >&6; } + fi + NEXT_UNISTD_H=$gl_cv_next_unistd_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'unistd.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_unistd_h + fi + NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + + + + + + + + for gl_func in chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r unlink unlinkat usleep; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if HAVE_UNISTD_H +# include +#endif +/* Some systems declare various items in the wrong headers. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include +# include +# include +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# include +# endif +#endif + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + if { test "$HAVE_LIBUNISTRING" != yes \ + || { + + + + test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ + || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ + && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ + || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ + && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 + } + } + } + + + + + } + }; then + LIBUNISTRING_UNITYPES_H='unitypes.h' + else + LIBUNISTRING_UNITYPES_H= + fi + + + + + if { test "$HAVE_LIBUNISTRING" != yes \ + || { + + + + test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ + || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ + && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ + || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ + && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 + } + } + } + + + + + } + }; then + LIBUNISTRING_UNIWIDTH_H='uniwidth.h' + else + LIBUNISTRING_UNIWIDTH_H= + fi + + + + + if { test "$HAVE_LIBUNISTRING" != yes \ + || { + + + + test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ + || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ + && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ + || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ + && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4 + } + } + } + + + + + } + }; then + LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE= + LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#' +else + LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#' + LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE= +fi + + + + + if test $ac_cv_func_vasnprintf = no; then + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + fi + + + + gl_cv_func_vsnprintf_usable=no + for ac_func in vsnprintf +do : + ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" +if test "x$ac_cv_func_vsnprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VSNPRINTF 1 +_ACEOF + +fi +done + + if test $ac_cv_func_vsnprintf = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5 +$as_echo_n "checking whether snprintf respects a size of 1... " >&6; } +if ${gl_cv_func_snprintf_size1+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + gl_cv_func_snprintf_size1="guessing yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + my_snprintf (buf, 1, "%d", 12345); + return buf[1] != 'E'; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_snprintf_size1=yes +else + gl_cv_func_snprintf_size1=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5 +$as_echo "$gl_cv_func_snprintf_size1" >&6; } + + case "$gl_cv_func_snprintf_size1" in + *yes) + + case "$gl_cv_func_snprintf_retval_c99" in + *yes) + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5 +$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; } +if ${gl_cv_func_printf_positions+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) + gl_cv_func_printf_positions="guessing no";; + beos*) gl_cv_func_printf_positions="guessing no";; + mingw* | pw*) gl_cv_func_printf_positions="guessing no";; + *) gl_cv_func_printf_positions="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_positions=yes +else + gl_cv_func_printf_positions=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5 +$as_echo "$gl_cv_func_printf_positions" >&6; } + + case "$gl_cv_func_printf_positions" in + *yes) + gl_cv_func_vsnprintf_usable=yes + ;; + esac + ;; + esac + ;; + esac + fi + if test $gl_cv_func_vsnprintf_usable = no; then + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vsnprintf.$ac_objext" + + if test $ac_cv_func_vsnprintf = yes; then + REPLACE_VSNPRINTF=1 + fi + : + + fi + + if test $ac_cv_have_decl_vsnprintf = no; then + HAVE_DECL_VSNPRINTF=0 + fi + + + + + + + GNULIB_VSNPRINTF=1 + + + + + +$as_echo "#define GNULIB_TEST_VSNPRINTF 1" >>confdefs.h + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wchar_h='<'wchar.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_wchar_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wchar_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'wchar.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_wchar_h='<'wchar.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 +$as_echo "$gl_cv_next_wchar_h" >&6; } + fi + NEXT_WCHAR_H=$gl_cv_next_wchar_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'wchar.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_wchar_h + fi + NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + + + + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + + for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth ; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include +# include +# include +#endif +#include + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_wcrtomb = no; then + HAVE_WCRTOMB=0 + ac_fn_c_check_decl "$LINENO" "wcrtomb" "ac_cv_have_decl_wcrtomb" " +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include + +" +if test "x$ac_cv_have_decl_wcrtomb" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCRTOMB $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_wcrtomb = yes; then + REPLACE_WCRTOMB=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_WCRTOMB=1 + else + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5 +$as_echo_n "checking whether wcrtomb return value is correct... " >&6; } +if ${gl_cv_func_wcrtomb_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX 4, OSF/1 and Solaris. + aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wcrtomb_retval="guessing yes" ;; + esac + if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +int main () +{ + int result = 0; + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 1; + } + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 2; + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 4; + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 8; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_wcrtomb_retval=yes +else + gl_cv_func_wcrtomb_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5 +$as_echo "$gl_cv_func_wcrtomb_retval" >&6; } + case "$gl_cv_func_wcrtomb_retval" in + *yes) ;; + *) REPLACE_WCRTOMB=1 ;; + esac + fi + fi + + if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wcrtomb.$ac_objext" + + + : + + fi + + + + + + GNULIB_WCRTOMB=1 + + + + + +$as_echo "#define GNULIB_TEST_WCRTOMB 1" >>confdefs.h + + + + + + + + + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wctype_h='<'wctype.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if ${gl_cv_next_wctype_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wctype_h = yes; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + + gl_header_literal_regex=`echo 'wctype.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"`'"' + else + gl_cv_next_wctype_h='<'wctype.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 +$as_echo "$gl_cv_next_wctype_h" >&6; } + fi + NEXT_WCTYPE_H=$gl_cv_next_wctype_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'wctype.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_wctype_h + fi + NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_wctype_h = yes; then + if test $ac_cv_func_iswcntrl = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 +$as_echo_n "checking whether iswcntrl works... " >&6; } +if ${gl_cv_func_iswcntrl_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_iswcntrl_works="guessing yes" +else + gl_cv_func_iswcntrl_works="guessing no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Tru64 with Desktop Toolkit C has a bug: must be + included before . + BSD/OS 4.0.1 has a bug: , and + must be included before . */ + #include + #include + #include + #include + #include + int main () { return iswprint ('x') == 0; } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_iswcntrl_works=yes +else + gl_cv_func_iswcntrl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5 +$as_echo "$gl_cv_func_iswcntrl_works" >&6; } + fi + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + + + case "$gl_cv_func_iswcntrl_works" in + *yes) REPLACE_ISWCNTRL=0 ;; + *) REPLACE_ISWCNTRL=1 ;; + esac + + + if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then + : + fi + + if test $REPLACE_ISWCNTRL = 1; then + REPLACE_TOWLOWER=1 + else + for ac_func in towlower +do : + ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" +if test "x$ac_cv_func_towlower" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TOWLOWER 1 +_ACEOF + +fi +done + + if test $ac_cv_func_towlower = yes; then + REPLACE_TOWLOWER=0 + else + ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: must be + included before . + BSD/OS 4.0.1 has a bug: , and + must be included before . */ + #include + #include + #include + #include + #if HAVE_WCTYPE_H + # include + #endif + +" +if test "x$ac_cv_have_decl_towlower" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_TOWLOWER $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_towlower = yes; then + REPLACE_TOWLOWER=1 + else + REPLACE_TOWLOWER=0 + fi + fi + fi + + + if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then + : + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5 +$as_echo_n "checking for wctype_t... " >&6; } +if ${gl_cv_type_wctype_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Tru64 with Desktop Toolkit C has a bug: must be + included before . + BSD/OS 4.0.1 has a bug: , and + must be included before . */ + #include + #include + #include + #include + #if HAVE_WCTYPE_H + # include + #endif + wctype_t a; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_wctype_t=yes +else + gl_cv_type_wctype_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5 +$as_echo "$gl_cv_type_wctype_t" >&6; } + if test $gl_cv_type_wctype_t = no; then + HAVE_WCTYPE_T=0 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5 +$as_echo_n "checking for wctrans_t... " >&6; } +if ${gl_cv_type_wctrans_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Tru64 with Desktop Toolkit C has a bug: must be + included before . + BSD/OS 4.0.1 has a bug: , and + must be included before . */ + #include + #include + #include + #include + #include + wctrans_t a; + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_wctrans_t=yes +else + gl_cv_type_wctrans_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5 +$as_echo "$gl_cv_type_wctrans_t" >&6; } + if test $gl_cv_type_wctrans_t = no; then + HAVE_WCTRANS_T=0 + fi + + + for gl_func in wctype iswctype wctrans towctrans ; do + as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 +$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } +if eval \${$as_gl_Symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include +# include +# include +# include +#endif +#include + +int +main (void) +{ +#undef $gl_func + (void) $gl_func; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_gl_Symbol=yes" +else + eval "$as_gl_Symbol=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$as_gl_Symbol + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 +_ACEOF + + eval ac_cv_have_decl_$gl_func=yes +fi + done + + + + + + + + + + + + + + ac_fn_c_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" " +/* AIX 3.2.5 declares wcwidth in . */ +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + +" +if test "x$ac_cv_have_decl_wcwidth" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCWIDTH $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_wcwidth != yes; then + HAVE_DECL_WCWIDTH=0 + fi + + if test $ac_cv_func_wcwidth = yes; then + HAVE_WCWIDTH=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5 +$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; } +if ${gl_cv_func_wcwidth_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on glibc and AIX 7 systems. + *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; + *) gl_cv_func_wcwidth_works="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +/* AIX 3.2.5 declares wcwidth in . */ +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +#if !HAVE_DECL_WCWIDTH +extern +# ifdef __cplusplus +"C" +# endif +int wcwidth (int); +#endif +int main () +{ + int result = 0; + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) + { + if (wcwidth (0x0301) > 0) + result |= 1; + if (wcwidth (0x05B0) > 0) + result |= 2; + if (wcwidth (0x200B) > 0) + result |= 4; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_wcwidth_works=yes +else + gl_cv_func_wcwidth_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_works" >&5 +$as_echo "$gl_cv_func_wcwidth_works" >&6; } + case "$gl_cv_func_wcwidth_works" in + *yes) ;; + *no) REPLACE_WCWIDTH=1 ;; + esac + else + HAVE_WCWIDTH=0 + fi + + if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext" + + fi + + + + + + GNULIB_WCWIDTH=1 + + + + + +$as_echo "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h + + + + + + for ac_header in stdint.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + + # End of code from modules + + + + + + + + + + gltests_libdeps= + gltests_ltlibdeps= + + + + + + + + + + gl_source_base='tests' + gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS + + gl_module_indicator_condition=$gltests_WITNESS + + + + + + + + + + LIBGNU_LIBDEPS="$gl_libdeps" + + LIBGNU_LTLIBDEPS="$gl_ltlibdeps" + + + +WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes" +EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2" + +HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which extra warnings work" >&5 +$as_echo_n "checking which extra warnings work... " >&6; } +if ${grub_cv_cc_w_extra_flags+:} false; then : + $as_echo_n "(cached) " >&6 +else + + SAVED_CFLAGS="$CFLAGS" + grub_cv_cc_w_extra_flags= + for x in $EXTRA_WARN_FLAGS; do + CFLAGS="$HOST_CFLAGS $x -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + flag=1 +else + flag=0 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x$flag = x1 ; then + grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x" + fi + done + CFLAGS="$SAVED_CFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_w_extra_flags" >&5 +$as_echo "$grub_cv_cc_w_extra_flags" >&6; } + +HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags" + +# +# Check for target programs. +# + +# Find tools for the target. +if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then + tmp_ac_tool_prefix="$ac_tool_prefix" + ac_tool_prefix=$target_alias- + + if test -n "$ac_tool_prefix"; then + for ac_prog in gcc egcs cc + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_CC"; then + ac_cv_prog_TARGET_CC="$TARGET_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_CC=$ac_cv_prog_TARGET_CC +if test -n "$TARGET_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_CC" >&5 +$as_echo "$TARGET_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$TARGET_CC" && break + done +fi +if test -z "$TARGET_CC"; then + ac_ct_TARGET_CC=$TARGET_CC + for ac_prog in gcc egcs cc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_CC"; then + ac_cv_prog_ac_ct_TARGET_CC="$ac_ct_TARGET_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_CC=$ac_cv_prog_ac_ct_TARGET_CC +if test -n "$ac_ct_TARGET_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_CC" >&5 +$as_echo "$ac_ct_TARGET_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_TARGET_CC" && break +done + + if test "x$ac_ct_TARGET_CC" = x; then + TARGET_CC="as_fn_error $? "none of gcc, egcs and cc is found. set TARGET_CC manually." "$LINENO" 5" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_CC=$ac_ct_TARGET_CC + fi +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_OBJCOPY"; then + ac_cv_prog_TARGET_OBJCOPY="$TARGET_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_OBJCOPY="${ac_tool_prefix}objcopy" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_OBJCOPY=$ac_cv_prog_TARGET_OBJCOPY +if test -n "$TARGET_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_OBJCOPY" >&5 +$as_echo "$TARGET_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_OBJCOPY"; then + ac_ct_TARGET_OBJCOPY=$TARGET_OBJCOPY + # Extract the first word of "objcopy", so it can be a program name with args. +set dummy objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_OBJCOPY"; then + ac_cv_prog_ac_ct_TARGET_OBJCOPY="$ac_ct_TARGET_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_OBJCOPY="objcopy" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_OBJCOPY=$ac_cv_prog_ac_ct_TARGET_OBJCOPY +if test -n "$ac_ct_TARGET_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_OBJCOPY" >&5 +$as_echo "$ac_ct_TARGET_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_OBJCOPY" = x; then + TARGET_OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_OBJCOPY=$ac_ct_TARGET_OBJCOPY + fi +else + TARGET_OBJCOPY="$ac_cv_prog_TARGET_OBJCOPY" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_STRIP"; then + ac_cv_prog_TARGET_STRIP="$TARGET_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_STRIP=$ac_cv_prog_TARGET_STRIP +if test -n "$TARGET_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_STRIP" >&5 +$as_echo "$TARGET_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_STRIP"; then + ac_ct_TARGET_STRIP=$TARGET_STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_STRIP"; then + ac_cv_prog_ac_ct_TARGET_STRIP="$ac_ct_TARGET_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_STRIP=$ac_cv_prog_ac_ct_TARGET_STRIP +if test -n "$ac_ct_TARGET_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_STRIP" >&5 +$as_echo "$ac_ct_TARGET_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_STRIP" = x; then + TARGET_STRIP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_STRIP=$ac_ct_TARGET_STRIP + fi +else + TARGET_STRIP="$ac_cv_prog_TARGET_STRIP" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. +set dummy ${ac_tool_prefix}nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_NM"; then + ac_cv_prog_TARGET_NM="$TARGET_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_NM="${ac_tool_prefix}nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_NM=$ac_cv_prog_TARGET_NM +if test -n "$TARGET_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_NM" >&5 +$as_echo "$TARGET_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_NM"; then + ac_ct_TARGET_NM=$TARGET_NM + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_NM"; then + ac_cv_prog_ac_ct_TARGET_NM="$ac_ct_TARGET_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_NM="nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_NM=$ac_cv_prog_ac_ct_TARGET_NM +if test -n "$ac_ct_TARGET_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_NM" >&5 +$as_echo "$ac_ct_TARGET_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_NM" = x; then + TARGET_NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_NM=$ac_ct_TARGET_NM + fi +else + TARGET_NM="$ac_cv_prog_TARGET_NM" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_RANLIB"; then + ac_cv_prog_TARGET_RANLIB="$TARGET_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_RANLIB=$ac_cv_prog_TARGET_RANLIB +if test -n "$TARGET_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_RANLIB" >&5 +$as_echo "$TARGET_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_RANLIB"; then + ac_ct_TARGET_RANLIB=$TARGET_RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_RANLIB"; then + ac_cv_prog_ac_ct_TARGET_RANLIB="$ac_ct_TARGET_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_RANLIB=$ac_cv_prog_ac_ct_TARGET_RANLIB +if test -n "$ac_ct_TARGET_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_RANLIB" >&5 +$as_echo "$ac_ct_TARGET_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_RANLIB" = x; then + TARGET_RANLIB="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_RANLIB=$ac_ct_TARGET_RANLIB + fi +else + TARGET_RANLIB="$ac_cv_prog_TARGET_RANLIB" +fi + + + ac_tool_prefix="$tmp_ac_tool_prefix" +else + if test "x$TARGET_CC" = x; then + TARGET_CC=$CC + fi + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_OBJCOPY"; then + ac_cv_prog_TARGET_OBJCOPY="$TARGET_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_OBJCOPY="${ac_tool_prefix}objcopy" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_OBJCOPY=$ac_cv_prog_TARGET_OBJCOPY +if test -n "$TARGET_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_OBJCOPY" >&5 +$as_echo "$TARGET_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_OBJCOPY"; then + ac_ct_TARGET_OBJCOPY=$TARGET_OBJCOPY + # Extract the first word of "objcopy", so it can be a program name with args. +set dummy objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_OBJCOPY"; then + ac_cv_prog_ac_ct_TARGET_OBJCOPY="$ac_ct_TARGET_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_OBJCOPY="objcopy" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_OBJCOPY=$ac_cv_prog_ac_ct_TARGET_OBJCOPY +if test -n "$ac_ct_TARGET_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_OBJCOPY" >&5 +$as_echo "$ac_ct_TARGET_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_OBJCOPY" = x; then + TARGET_OBJCOPY="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_OBJCOPY=$ac_ct_TARGET_OBJCOPY + fi +else + TARGET_OBJCOPY="$ac_cv_prog_TARGET_OBJCOPY" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_STRIP"; then + ac_cv_prog_TARGET_STRIP="$TARGET_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_STRIP=$ac_cv_prog_TARGET_STRIP +if test -n "$TARGET_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_STRIP" >&5 +$as_echo "$TARGET_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_STRIP"; then + ac_ct_TARGET_STRIP=$TARGET_STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_STRIP"; then + ac_cv_prog_ac_ct_TARGET_STRIP="$ac_ct_TARGET_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_STRIP=$ac_cv_prog_ac_ct_TARGET_STRIP +if test -n "$ac_ct_TARGET_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_STRIP" >&5 +$as_echo "$ac_ct_TARGET_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_STRIP" = x; then + TARGET_STRIP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_STRIP=$ac_ct_TARGET_STRIP + fi +else + TARGET_STRIP="$ac_cv_prog_TARGET_STRIP" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. +set dummy ${ac_tool_prefix}nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_NM"; then + ac_cv_prog_TARGET_NM="$TARGET_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_NM="${ac_tool_prefix}nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_NM=$ac_cv_prog_TARGET_NM +if test -n "$TARGET_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_NM" >&5 +$as_echo "$TARGET_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_NM"; then + ac_ct_TARGET_NM=$TARGET_NM + # Extract the first word of "nm", so it can be a program name with args. +set dummy nm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_NM"; then + ac_cv_prog_ac_ct_TARGET_NM="$ac_ct_TARGET_NM" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_NM="nm" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_NM=$ac_cv_prog_ac_ct_TARGET_NM +if test -n "$ac_ct_TARGET_NM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_NM" >&5 +$as_echo "$ac_ct_TARGET_NM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_NM" = x; then + TARGET_NM="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_NM=$ac_ct_TARGET_NM + fi +else + TARGET_NM="$ac_cv_prog_TARGET_NM" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_RANLIB"; then + ac_cv_prog_TARGET_RANLIB="$TARGET_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_RANLIB=$ac_cv_prog_TARGET_RANLIB +if test -n "$TARGET_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_RANLIB" >&5 +$as_echo "$TARGET_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_TARGET_RANLIB"; then + ac_ct_TARGET_RANLIB=$TARGET_RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_TARGET_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_TARGET_RANLIB"; then + ac_cv_prog_ac_ct_TARGET_RANLIB="$ac_ct_TARGET_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_TARGET_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_TARGET_RANLIB=$ac_cv_prog_ac_ct_TARGET_RANLIB +if test -n "$ac_ct_TARGET_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_TARGET_RANLIB" >&5 +$as_echo "$ac_ct_TARGET_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_TARGET_RANLIB" = x; then + TARGET_RANLIB="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + TARGET_RANLIB=$ac_ct_TARGET_RANLIB + fi +else + TARGET_RANLIB="$ac_cv_prog_TARGET_RANLIB" +fi + +fi + + + + + + + + + + + + +# Test the C compiler for the target environment. +tmp_CC="$CC" +tmp_CFLAGS="$CFLAGS" +tmp_LDFLAGS="$LDFLAGS" +tmp_CPPFLAGS="$CPPFLAGS" +tmp_LIBS="$LIBS" +CC="$TARGET_CC" +CFLAGS="$TARGET_CFLAGS" +CPPFLAGS="$TARGET_CPPFLAGS" +LDFLAGS="$TARGET_LDFLAGS" +LIBS="" + +# debug flags. +TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations" +TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g" + +if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then +TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align" +fi + +TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which extra warnings work" >&5 +$as_echo_n "checking which extra warnings work... " >&6; } +if ${grub_cv_target_cc_w_extra_flags+:} false; then : + $as_echo_n "(cached) " >&6 +else + + LDFLAGS="$TARGET_LDFLAGS -nostdlib -static" + + grub_cv_target_cc_w_extra_flags= + for x in $EXTRA_WARN_FLAGS; do + CFLAGS="$TARGET_CFLAGS $x -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + flag=1 +else + flag=0 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x$flag = x1 ; then + grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x" + fi + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_w_extra_flags" >&5 +$as_echo "$grub_cv_target_cc_w_extra_flags" >&6; } + +TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiling with clang" >&5 +$as_echo_n "checking if compiling with clang... " >&6; } +if ${grub_cv_cc_target_clang+:} false; then : + $as_echo_n "(cached) " >&6 +else + +CFLAGS="$TARGET_CFLAGS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + +#ifdef __clang__ +#error "is clang" +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_target_clang=no +else + grub_cv_cc_target_clang=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_target_clang" >&5 +$as_echo "$grub_cv_cc_target_clang" >&6; } + +if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for options to get big-endian compilation" >&5 +$as_echo_n "checking for options to get big-endian compilation... " >&6; } +if ${grub_cv_target_cc_big_endian+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_big_endian=no + for cand in "-target $target_cpu -Wl,-EB" "-target $target_cpu" \ + "-target $target_cpu-linux-gnu -Wl,-EB" "-target $target_cpu-linux-gnu" \ + "-EB" "-mbig-endian"; do + if test x"$grub_cv_target_cc_big_endian" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__) +#error still little endian +#endif +asm (".globl start; start:"); +asm (".globl _start; _start:"); +asm (".globl __start; __start:"); +void __main (void); +void __main (void) {} +int main (void); + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_target_cc_big_endian="$cand" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_big_endian" >&5 +$as_echo "$grub_cv_target_cc_big_endian" >&6; } + + if test x"$grub_cv_target_cc_big_endian" = xno ; then + as_fn_error $? "could not force big-endian" "$LINENO" 5 + fi + + skip_linkflags="$(echo "$grub_cv_target_cc_big_endian"|sed 's@-Wl,-EB@@')" + + TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags" + TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_big_endian" +elif test x$target_cpu = xmipsel; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for options to get little-endian compilation" >&5 +$as_echo_n "checking for options to get little-endian compilation... " >&6; } +if ${grub_cv_target_cc_little_endian+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_little_endian=no + for cand in "-target $target_cpu -Wl,-EL" "-target $target_cpu" \ + "-target $target_cpu-linux-gnu -Wl,-EL" "-target $target_cpu-linux-gnu" \ + "-EL"; do + if test x"$grub_cv_target_cc_little_endian" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__) +#error still big endian +#endif +asm (".globl start; start:"); +asm (".globl _start; _start:"); +asm (".globl __start; __start:"); +void __main (void); +void __main (void) {} +int main (void); + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_target_cc_little_endian="$cand" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_little_endian" >&5 +$as_echo "$grub_cv_target_cc_little_endian" >&6; } + + if test x"$grub_cv_target_cc_little_endian" = xno ; then + as_fn_error $? "could not force little-endian" "$LINENO" 5 + fi + + skip_linkflags="$(echo "$grub_cv_target_cc_little_endian"|sed 's@-Wl,-EL@@')" + + TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags" + TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_little_endian" +fi + +# GRUB code is N32-compliant but it's experimental and we would prefer to +# avoid having too much variety when it doesn't result in any real improvement. +# Moreover N64 isn't supported. +if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for options to force MIPS o32 ABI" >&5 +$as_echo_n "checking for options to force MIPS o32 ABI... " >&6; } +if ${grub_cv_target_cc_mips_o32_abi+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_mips_o32_abi=no + for arg in "" "-mabi=32" "-target $target_cpu -mabi=32" ; do + if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $arg -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32) +#error not o32 ABI +#endif +asm (".globl start; start:"); +asm (".globl _start; _start:"); +asm (".globl __start; __start:"); +void __main (void); +void __main (void) {} +int main (void); + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_target_cc_mips_o32_abi="$arg" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_mips_o32_abi" >&5 +$as_echo "$grub_cv_target_cc_mips_o32_abi" >&6; } + + if test x"$grub_cv_target_cc_mips_o32_abi" = xno ; then + as_fn_error $? "could not force MIPS o32 ABI" "$LINENO" 5 + fi + + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mips_o32_abi" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_mips_o32_abi" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for options to compile assembly" >&5 +$as_echo_n "checking for options to compile assembly... " >&6; } +if ${grub_cv_cc_target_asm_compile+:} false; then : + $as_echo_n "(cached) " >&6 +else + +test_program= +case "x$target_cpu-$platform" in + xmips-* | xmipsel-*) + test_program=mips + ;; + xi386-pc) + test_program=i386-pc + ;; + xi386-* | xx86_64-*) + test_program=i386 + ;; + xpowerpc-* | xsparc64-* | xarm-*) + test_program=$target_cpu + ;; +esac +if test x"$test_program" = x ; then + grub_cv_cc_target_asm_compile= +else + found=no + for arg in "" "-no-integrated-as"; do + cmdline="$TARGET_CC -c -o /dev/null $TARGET_CCASFLAGS $arg $TARGET_CPPFLAGS $srcdir/asm-tests/$test_program.S" + echo "Running $cmdline" >&5 + if $cmdline >&5 2>&5; then + grub_cv_cc_target_asm_compile="$arg" + found=yes + break + fi + done + if test x"$found" = xno ; then + as_fn_error $? "could not compile assembly" "$LINENO" 5 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_target_asm_compile" >&5 +$as_echo "$grub_cv_cc_target_asm_compile" >&6; } + +TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_cc_target_asm_compile" + +if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then + TARGET_CFLAGS="$TARGET_CFLAGS -march=i386" +fi + +if test "x$target_m32" = x1; then + # Force 32-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m32" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m32" + TARGET_MODULE_FORMAT="elf32" +fi + +if test "x$target_m64" = x1; then + # Force 64-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m64" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m64" + TARGET_MODULE_FORMAT="elf64" +fi + +if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then + TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3" +fi + +# on mips redirect cache flushing function to non-existant one. +if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -mflush-func=grub_red_herring works" >&5 +$as_echo_n "checking whether -mflush-func=grub_red_herring works... " >&6; } +if ${grub_cv_cc_mflush_func+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_mflush_func=yes +else + grub_cv_cc_mflush_func=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_mflush_func" >&5 +$as_echo "$grub_cv_cc_mflush_func" >&6; } + + if test "x$grub_cv_cc_mflush_func" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring" + fi +fi + + +# Force no alignment to save space on i386. +if test "x$target_cpu" = xi386; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -falign-loops works" >&5 +$as_echo_n "checking whether -falign-loops works... " >&6; } +if ${grub_cv_cc_falign_loop+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_falign_loop=yes +else + grub_cv_cc_falign_loop=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_falign_loop" >&5 +$as_echo "$grub_cv_cc_falign_loop" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -malign-loops works" >&5 +$as_echo_n "checking whether -malign-loops works... " >&6; } +if ${grub_cv_cc_malign_loop+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_malign_loop=yes +else + grub_cv_cc_malign_loop=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_malign_loop" >&5 +$as_echo "$grub_cv_cc_malign_loop" >&6; } + + if test "x$grub_cv_cc_falign_loop" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" + elif test "x$grub_cv_cc_malign_loop" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -freg-struct-return works" >&5 +$as_echo_n "checking whether -freg-struct-return works... " >&6; } +if ${grub_cv_cc_freg_struct_return+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_freg_struct_return=yes +else + grub_cv_cc_freg_struct_return=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_freg_struct_return" >&5 +$as_echo "$grub_cv_cc_freg_struct_return" >&6; } + +if test "x$grub_cv_cc_freg_struct_return" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return" +fi + +if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then + # Some toolchains enable these features by default, but they need + # registers that aren't set up properly in GRUB. + TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow" +fi + +# GRUB doesn't use float or doubles at all. Yet some toolchains may decide +# that floats are a good fit to run instead of what's written in the code. +# Given that floating point unit is disabled (if present to begin with) +# when GRUB is running which may result in various hard crashes. +if test x"$platform" != xemu ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for options to get soft-float" >&5 +$as_echo_n "checking for options to get soft-float... " >&6; } +if ${grub_cv_target_cc_soft_float+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_soft_float=no + if test "x$target_cpu" = xarm64; then + CFLAGS="$TARGET_CFLAGS -mgeneral-regs-only -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_target_cc_soft_float="-mgeneral-regs-only" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test "x$target_cpu" = xia64; then + CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + for cand in "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \ + "-Xclang -msoft-float -Xclang -no-implicit-float" \ + "-Xclang -msoft-float" "-msoft-float"; do + if test x"$grub_cv_target_cc_soft_float" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_target_cc_soft_float="$cand" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_soft_float" >&5 +$as_echo "$grub_cv_target_cc_soft_float" >&6; } + + if test x"$grub_cv_target_cc_soft_float" = xno ; then + as_fn_error $? "could not force soft-float" "$LINENO" 5 + fi + + case x"$grub_cv_target_cc_soft_float" in + x*"-Xclang"*) + # A trick so that clang doesn't see it on link stаge + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float" + ;; + *) + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float" + ;; + esac + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float" + +fi + +if test x"$target_cpu" = xsparc64 ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for options to reserve application registers" >&5 +$as_echo_n "checking for options to reserve application registers... " >&6; } +if ${grub_cv_target_cc_mno_app_regs+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_mno_app_regs=no + for cand in "-mllvm -sparc-reserve-app-registers" \ + "-mno-app-regs"; do + if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + CPPFLAGS="$TARGET_CPPFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_target_cc_mno_app_regs="$cand" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_mno_app_regs" >&5 +$as_echo "$grub_cv_target_cc_mno_app_regs" >&6; } + + if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then + as_fn_error $? "could not reserve application registers" "$LINENO" 5 + fi + if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then + # A trick so that clang doesn't see it on link stаge + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs" + else + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for no-relax options" >&5 +$as_echo_n "checking for no-relax options... " >&6; } +if ${grub_cv_target_cc_mno_relax+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_mno_relax=no + for cand in "-mno-relax" "-Wl,--no-relax"; do + if test x"$grub_cv_target_cc_mno_relax" != xno ; then + break + fi + LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static" + CFLAGS="$TARGET_CFLAGS -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + asm (".globl start; start:"); + void __main (void); + void __main (void) {} + int main (void); + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_target_cc_mno_relax="$cand" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_mno_relax" >&5 +$as_echo "$grub_cv_target_cc_mno_relax" >&6; } + LDFLAGS="$TARGET_LDFLAGS" + CFLAGS="$TARGET_CFLAGS" + + if test x"$grub_cv_target_cc_mno_relax" = xno ; then + as_fn_error $? "could not find no-relax options" "$LINENO" 5 + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax" +fi + +# By default, GCC 4.4 generates .eh_frame sections containing unwind +# information in some cases where it previously did not. GRUB doesn't need +# these and they just use up vital space. Restore the old compiler +# behaviour. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fno-dwarf2-cfi-asm works" >&5 +$as_echo_n "checking whether -fno-dwarf2-cfi-asm works... " >&6; } +if ${grub_cv_cc_fno_dwarf2_cfi_asm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_fno_dwarf2_cfi_asm=yes +else + grub_cv_cc_fno_dwarf2_cfi_asm=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_fno_dwarf2_cfi_asm" >&5 +$as_echo "$grub_cv_cc_fno_dwarf2_cfi_asm" >&6; } + +if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" +fi + +if test x"$target_os" = xcygwin; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether option -fno-reorder-functions works" >&5 +$as_echo_n "checking whether option -fno-reorder-functions works... " >&6; } +if ${grub_cv_cc_no_reorder_functions+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -fno-reorder-functions" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_no_reorder_functions=yes +else + grub_cv_cc_no_reorder_functions=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_no_reorder_functions" >&5 +$as_echo "$grub_cv_cc_no_reorder_functions" >&6; } +fi + +if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -mno-stack-arg-probe works" >&5 +$as_echo_n "checking whether -mno-stack-arg-probe works... " >&6; } +if ${grub_cv_cc_mno_stack_arg_probe+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_mno_stack_arg_probe=yes +else + grub_cv_cc_mno_stack_arg_probe=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_mno_stack_arg_probe" >&5 +$as_echo "$grub_cv_cc_mno_stack_arg_probe" >&6; } + +if test "x$grub_cv_cc_mno_stack_arg_probe" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" +fi + + +# By default, GCC 4.6 generates .eh_frame sections containing unwind +# information in some cases where it previously did not. GRUB doesn't need +# these and they just use up vital space. Restore the old compiler +# behaviour. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fno-asynchronous-unwind-tables works" >&5 +$as_echo_n "checking whether -fno-asynchronous-unwind-tables works... " >&6; } +if ${grub_cv_cc_fno_asynchronous_unwind_tables+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_fno_asynchronous_unwind_tables=yes +else + grub_cv_cc_fno_asynchronous_unwind_tables=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_fno_asynchronous_unwind_tables" >&5 +$as_echo "$grub_cv_cc_fno_asynchronous_unwind_tables" >&6; } + +if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fno-unwind-tables works" >&5 +$as_echo_n "checking whether -fno-unwind-tables works... " >&6; } +if ${grub_cv_cc_fno_unwind_tables+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -fno-unwind-tables" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_fno_unwind_tables=yes +else + grub_cv_cc_fno_unwind_tables=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_fno_unwind_tables" >&5 +$as_echo "$grub_cv_cc_fno_unwind_tables" >&6; } + +if test "x$grub_cv_cc_fno_unwind_tables" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-unwind-tables" +fi + + +CFLAGS="$TARGET_CFLAGS" + + +if test x"$platform" = xemu ; then + TARGET_OBJ2ELF= + grub_cv_target_cc_link_format= + case "$host_os" in + *darwin* | *mac*) + grub_cv_target_cc_link_format="-arch,${target_cpu}" + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + ;; + *windows* | *cygwin* | *mingw*) + if test x${target_cpu} = xi386 ; then + grub_cv_target_cc_link_format=-mi386pe + TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)' + fi + if test x${target_cpu} = xx86_64 ; then + grub_cv_target_cc_link_format=-mi386pep + TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)' + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + ;; + esac +elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for target linking format" >&5 +$as_echo_n "checking for target linking format... " >&6; } +if ${grub_cv_target_cc_link_format+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_link_format=unknown + for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do + if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then + continue + fi + if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then + continue + fi + CFLAGS="$TARGET_CFLAGS" + LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + asm (".globl start; start:"); + asm (".globl _start; _start:"); + asm (".globl __start; __start:"); + void __main (void); + void __main (void) {} + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + flag=1 +else + flag=0 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x"$flag" = x1; then + grub_cv_target_cc_link_format="$format" + break + fi + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_link_format" >&5 +$as_echo "$grub_cv_target_cc_link_format" >&6; } + if test x"$grub_cv_target_cc_link_format" = xunknown; then + as_fn_error $? "no suitable link format found" "$LINENO" 5 + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then + TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)' + fi + if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then + TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)' + fi +fi + +if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then + TARGET_APPLE_LINKER=1 + # Extract the first word of "objconv", so it can be a program name with args. +set dummy objconv; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_OBJCONV+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_OBJCONV"; then + ac_cv_prog_TARGET_OBJCONV="$TARGET_OBJCONV" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_OBJCONV="objconv" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_OBJCONV=$ac_cv_prog_TARGET_OBJCONV +if test -n "$TARGET_OBJCONV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_OBJCONV" >&5 +$as_echo "$TARGET_OBJCONV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$TARGET_OBJCONV" = x ; then + # Extract the first word of "objconv", so it can be a program name with args. +set dummy objconv; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_TARGET_OBJCONV+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$TARGET_OBJCONV"; then + ac_cv_prog_TARGET_OBJCONV="$TARGET_OBJCONV" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in . +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_TARGET_OBJCONV="./objconv" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +TARGET_OBJCONV=$ac_cv_prog_TARGET_OBJCONV +if test -n "$TARGET_OBJCONV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TARGET_OBJCONV" >&5 +$as_echo "$TARGET_OBJCONV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + if test "x$TARGET_OBJCONV" = x ; then + as_fn_error $? "objconv not found which is required when building with apple compiler" "$LINENO" 5 + fi + TARGET_IMG_LDSCRIPT= + TARGET_IMG_CFLAGS="-static" + TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_BASE_LDOPT="-Wl,-image_base" + TARGET_LDFLAGS_OLDMAGIC="" +elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then + TARGET_APPLE_LINKER=0 + TARGET_LDFLAGS_OLDMAGIC="-Wl,-N" + TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc" + TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" + TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc" + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" + TARGET_IMG_CFLAGS= +else + TARGET_APPLE_LINKER=0 + TARGET_LDFLAGS_OLDMAGIC="-Wl,-N" + TARGET_IMG_LDSCRIPT= + TARGET_IMG_LDFLAGS='-Wl,-N' + TARGET_IMG_LDFLAGS_AC='-Wl,-N' + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" + TARGET_IMG_CFLAGS= +fi + +CFLAGS="$TARGET_CFLAGS" + +# Check whether --enable-efiemu was given. +if test "${enable_efiemu+set}" = set; then : + enableval=$enable_efiemu; +fi + +if test x"$enable_efiemu" = xno ; then + efiemu_excuse="explicitly disabled" +fi + +if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then + efiemu_excuse="not available on cygwin" +fi +if test x"$target_cpu" != xi386 ; then + efiemu_excuse="only available on i386" +fi +if test x"$platform" = xefi ; then + efiemu_excuse="not available on efi" +fi + +if test x"$efiemu_excuse" = x ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether options required for efiemu work" >&5 +$as_echo_n "checking whether options required for efiemu work... " >&6; } +if ${grub_cv_cc_efiemu+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_efiemu=yes +else + grub_cv_cc_efiemu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_efiemu" >&5 +$as_echo "$grub_cv_cc_efiemu" >&6; } + if test x$grub_cv_cc_efiemu = xno; then + efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" + fi +fi +if test x"$efiemu_excuse" = x ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for efiemu64 linking format" >&5 +$as_echo_n "checking for efiemu64 linking format... " >&6; } +if ${grub_cv_target_cc_efiemu64_link_format+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_efiemu64_link_format=unknown + for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do + CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone" + LDFLAGS="-m64 -Wl,$format -nostdlib -static" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + asm (".globl start; start:"); + asm (".globl _start; _start:"); + asm (".globl __start; __start:"); + void __main (void); + void __main (void) {} + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + flag=1 +else + flag=0 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x"$flag" = x1; then + grub_cv_target_cc_efiemu64_link_format="$format" + break + fi + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_efiemu64_link_format" >&5 +$as_echo "$grub_cv_target_cc_efiemu64_link_format" >&6; } + if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then + efiemu_excuse="no suitable link format for efiemu64 found" + else + EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format" + fi +fi +if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then + as_fn_error $? "efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)" "$LINENO" 5 +fi +if test x"$efiemu_excuse" = x ; then +enable_efiemu=yes +else +enable_efiemu=no +fi + + + +CFLAGS="$TARGET_CFLAGS" + + + + +LDFLAGS="$TARGET_LDFLAGS" + +if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then + # Use large model to support 4G memory + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether option -mcmodel=large works" >&5 +$as_echo_n "checking whether option -mcmodel=large works... " >&6; } +if ${grub_cv_cc_mcmodel+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -mcmodel=large" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_mcmodel=yes +else + grub_cv_cc_mcmodel=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_mcmodel" >&5 +$as_echo "$grub_cv_cc_mcmodel" >&6; } + if test "x$grub_cv_cc_mcmodel" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" + elif test "$target_cpu" = sparc64; then + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany" + fi +fi + +if test "$target_cpu"-"$platform" = x86_64-efi; then + # EFI writes to stack below %rsp, we must not use the red zone + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether option -mno-red-zone works" >&5 +$as_echo_n "checking whether option -mno-red-zone works... " >&6; } +if ${grub_cv_cc_no_red_zone+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -mno-red-zone" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_no_red_zone=yes +else + grub_cv_cc_no_red_zone=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_no_red_zone" >&5 +$as_echo "$grub_cv_cc_no_red_zone" >&6; } + if test "x$grub_cv_cc_no_red_zone" = xno; then + as_fn_error $? "-mno-red-zone not supported, upgrade your gcc" "$LINENO" 5 + fi + + TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone" +fi + +if test "x$target_cpu" = xarm; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for options to disable movt and movw" >&5 +$as_echo_n "checking for options to disable movt and movw... " >&6; } +if ${grub_cv_target_cc_mno_movt+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_mno_movt=no + for cand in "-mno-movt" \ + "-mllvm -arm-use-movt=0"; do + if test x"$grub_cv_target_cc_mno_movt" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + CPPFLAGS="$TARGET_CPPFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_target_cc_mno_movt="$cand" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_mno_movt" >&5 +$as_echo "$grub_cv_target_cc_mno_movt" >&6; } + + if test x"$grub_cv_target_cc_mno_movt" != xno ; then + # A trick so that clang doesn't see it on link stage + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether option -mthumb-interwork works" >&5 +$as_echo_n "checking whether option -mthumb-interwork works... " >&6; } +if ${grub_cv_cc_mthumb_interwork+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_mthumb_interwork=yes +else + grub_cv_cc_mthumb_interwork=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_mthumb_interwork" >&5 +$as_echo "$grub_cv_cc_mthumb_interwork" >&6; } + if test "x$grub_cv_cc_mthumb_interwork" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork" + # Clang defaults to thumb interworking + elif test "x$grub_cv_cc_target_clang" = xno ; then + as_fn_error $? "your compiler doesn't support -mthumb-interwork" "$LINENO" 5 + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether option -Qn works" >&5 +$as_echo_n "checking whether option -Qn works... " >&6; } +if ${grub_cv_target_cc_qn+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -Qn -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_target_cc_qn=yes +else + grub_cv_target_cc_qn=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_qn" >&5 +$as_echo "$grub_cv_target_cc_qn" >&6; } +if test "x$grub_cv_target_cc_qn" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -Qn" +fi + +# +# Compiler features. +# + +CFLAGS="$TARGET_CFLAGS" + +# Position independent executable. + +# Position independent executable. +pie_possible=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`$CC' has \`-fPIE' as default" >&5 +$as_echo_n "checking whether \`$CC' has \`-fPIE' as default... " >&6; } +# Is this a reliable test case? +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __PIE__ +int main() { + return 0; +} +#else +#error NO __PIE__ DEFINED +#endif + +_ACEOF + +# `$CC -c -o ...' might not be portable. But, oh, well... Is calling +# `ac_compile' like this correct, after all? +if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + # Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + pie_possible=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker accepts -no-pie" >&5 +$as_echo_n "checking whether linker accepts -no-pie... " >&6; } +if ${grub_cv_cc_ld_no_pie+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -no-pie -nostdlib -Werror" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_cc_ld_no_pie=yes +else + grub_cv_cc_ld_no_pie=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LDFLAGS="$save_LDFLAGS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_ld_no_pie" >&5 +$as_echo "$grub_cv_cc_ld_no_pie" >&6; } +nopie_possible=no +if test "x$grub_cv_cc_ld_no_pie" = xyes ; then + nopie_possible=yes +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker accepts -nopie" >&5 +$as_echo_n "checking whether linker accepts -nopie... " >&6; } +if ${grub_cv_cc_ld_no_pie_oneword+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -nopie -nostdlib -Werror" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_cc_ld_no_pie_oneword=yes +else + grub_cv_cc_ld_no_pie_oneword=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LDFLAGS="$save_LDFLAGS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_ld_no_pie_oneword" >&5 +$as_echo "$grub_cv_cc_ld_no_pie_oneword" >&6; } +nopie_oneword_possible=no +if test "x$grub_cv_cc_ld_no_pie_oneword" = xyes ; then + nopie_oneword_possible=yes +fi + + +# Position independent executable. +link_nopie_needed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker needs disabling of PIE to work" >&5 +$as_echo_n "checking whether linker needs disabling of PIE to work... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +_ACEOF + +if eval "$ac_compile -Wl,-r,-d -nostdlib -Werror -o conftest.o" 2> /dev/null; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.o +else + link_nopie_needed=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi + +# Need that, because some distributions ship compilers that include +# `-fPIE' or '-fpie' and '-pie' in the default specs. +if [ x"$pie_possible" = xyes ]; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE -fno-pie" +fi + +if [ x"$link_nopie_needed" = xyes ] || [ x"$pie_possible" = xyes ]; then + if [ x"$nopie_possible" = xyes ]; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -no-pie" + fi + if [ x"$nopie_oneword_possible" = xyes ]; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -nopie" + fi +fi + +CFLAGS="$TARGET_CFLAGS" +LDFLAGS="$TARGET_LDFLAGS" + +# Position independent executable. + +# Position independent executable. +pic_possible=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`$CC' has \`-fPIC' as default" >&5 +$as_echo_n "checking whether \`$CC' has \`-fPIC' as default... " >&6; } +# Is this a reliable test case? +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __PIC__ +int main() { + return 0; +} +#else +#error NO __PIC__ DEFINED +#endif + +_ACEOF + +# `$CC -c -o ...' might not be portable. But, oh, well... Is calling +# `ac_compile' like this correct, after all? +if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + # Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + pic_possible=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# On most platforms we don't want PIC as it only makes relocations harder +# and code less efficient. On mips we want to have one got table per module +# and reload $gp in every function. +# GCC implements it using symbol __gnu_local_gp in non-PIC as well. +# However with clang we need PIC for this reloading to happen. +# With arm64 we need relocations that are in some way representable in +# PE as we need to support arm64-efi. Without -fPIC clang generates +# movk's which aren't representable. +# Since default varies across dictributions use either -fPIC or -fno-PIC +# explicitly. +if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel || test x$target_cpu = xarm64 ) && test "x$grub_cv_cc_target_clang" = xyes ; then + TARGET_CFLAGS="$TARGET_CFLAGS -fPIC" +elif [ x"$pic_possible" = xyes ]; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC" +fi + +CFLAGS="$TARGET_CFLAGS" + +# Smashing stack protector. + +# Smashing stack protector. +ssp_possible=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`$CC' accepts \`-fstack-protector'" >&5 +$as_echo_n "checking whether \`$CC' accepts \`-fstack-protector'... " >&6; } +# Is this a reliable test case? +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +void foo (void) { volatile char a[8]; a[3]; } + +_ACEOF +# `$CC -c -o ...' might not be portable. But, oh, well... Is calling +# `ac_compile' like this correct, after all? +if eval "$ac_compile -S -fstack-protector -o conftest.s" 2> /dev/null; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + # Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + ssp_possible=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# Need that, because some distributions ship compilers that include +# `-fstack-protector' in the default specs. +if test "x$ssp_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" +fi + +CFLAGS="$TARGET_CFLAGS" + + +# Smashing stack arg probe. +sap_possible=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`$CC' accepts \`-mstack-arg-probe'" >&5 +$as_echo_n "checking whether \`$CC' accepts \`-mstack-arg-probe'... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +void foo (void) { volatile char a[8]; a[3]; } + +_ACEOF +if eval "$ac_compile -S -mstack-arg-probe -Werror -o conftest.s" 2> /dev/null; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + # Should we clear up other files as well, having called `AC_LANG_CONFTEST'? + rm -f conftest.s +else + sap_possible=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +# Cygwin's GCC uses alloca() to probe the stackframe on static +# stack allocations above some threshold. +if test x"$sap_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" +fi + +CFLAGS="$TARGET_CFLAGS" + +# -mno-unaligned-access -mstrict-align +if test "$target_cpu" = arm; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compile options to get strict alignment" >&5 +$as_echo_n "checking for compile options to get strict alignment... " >&6; } +if ${grub_cv_target_cc_strict_align+:} false; then : + $as_echo_n "(cached) " >&6 +else + + grub_cv_target_cc_strict_align= + for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do + CFLAGS="$TARGET_CFLAGS $arg -Werror" + LDFLAGS="$TARGET_LDFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + flag=1 +else + flag=0 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x"$flag" = x1; then + grub_cv_target_cc_strict_align="$arg" + break + fi + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_target_cc_strict_align" >&5 +$as_echo "$grub_cv_target_cc_strict_align" >&6; } + + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align" + if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler generates unaligned accesses" >&5 +$as_echo_n "checking if compiler generates unaligned accesses... " >&6; } +if ${grub_cv_cc_target_emits_unaligned+:} false; then : + $as_echo_n "(cached) " >&6 +else + CFLAGS="$TARGET_CFLAGS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + +#ifdef __ARM_FEATURE_UNALIGNED +#error "unaligned" +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_target_emits_unaligned=no +else + grub_cv_cc_target_emits_unaligned=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_target_emits_unaligned" >&5 +$as_echo "$grub_cv_cc_target_emits_unaligned" >&6; } + if test x$grub_cv_cc_target_emits_unaligned = xyes; then + as_fn_error $? "compiler generates unaligned accesses" "$LINENO" 5 + fi +fi + +# Set them to their new values for the tests below. +CC="$TARGET_CC" +if test x"$platform" = xemu ; then +CFLAGS="$TARGET_CFLAGS -Wno-error" +elif test "x$TARGET_APPLE_LINKER" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error" +else +CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error" +fi +CPPFLAGS="$TARGET_CPPFLAGS" + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C symbols get an underscore after compilation" >&5 +$as_echo_n "checking if C symbols get an underscore after compilation... " >&6; } +if ${grub_cv_asm_uscore+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <<\EOF +int func (int *); +int +func (int *list) +{ + *list = 0; + return *list; +} +EOF + +if { ac_try='${CC-cc} ${CFLAGS} -S conftest.c' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } && test -s conftest.s; then + true +else + as_fn_error $? "${CC-cc} failed to produce assembly code" "$LINENO" 5 +fi + +if $EGREP '(^|^_[:alnum])_func' conftest.s >/dev/null 2>&1; then + HAVE_ASM_USCORE=1 + grub_cv_asm_uscore=yes +else + HAVE_ASM_USCORE=0 + grub_cv_asm_uscore=no +fi + +rm -f conftest* +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_asm_uscore" >&5 +$as_echo "$grub_cv_asm_uscore" >&6; } + +if test "x$TARGET_APPLE_LINKER" = x0 && test x"$platform" != xemu; then +if test x$grub_cv_asm_uscore = xyes; then +DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main" +else +DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main" +fi +CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM" +fi + +# Check for libgcc symbols +if test x"$platform" = xemu; then +for ac_func in __udivsi3 __umodsi3 __divsi3 __modsi3 __divdi3 __moddi3 __udivdi3 __umoddi3 __ctzdi2 __ctzsi2 __aeabi_uidiv __aeabi_uidivmod __aeabi_idiv __aeabi_idivmod __aeabi_ulcmp __muldi3 __aeabi_lmul __aeabi_memcpy __aeabi_memcpy4 __aeabi_memcpy8 __aeabi_memclr __aeabi_memclr4 __aeabi_memclr8 __aeabi_memset __aeabi_lasr __aeabi_llsl __aeabi_llsr _restgpr_14_x __ucmpdi2 __ashldi3 __ashrdi3 __lshrdi3 __bswapsi2 __bswapdi2 __bzero __register_frame_info __deregister_frame_info ___chkstk_ms __chkstk_ms +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +fi + +if test "x$TARGET_APPLE_LINKER" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib -static" +else +CFLAGS="$TARGET_CFLAGS -nostdlib" +fi +LIBS="" + +# Defined in aclocal.m4. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether target compiler is working" >&5 +$as_echo_n "checking whether target compiler is working... " >&6; } +if ${grub_cv_prog_target_cc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_prog_target_cc=yes +else + grub_cv_prog_target_cc=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_prog_target_cc" >&5 +$as_echo "$grub_cv_prog_target_cc" >&6; } + +if test "x$grub_cv_prog_target_cc" = xno; then + as_fn_error $? "cannot compile for the target" "$LINENO" 5 +fi + +if test "x$TARGET_APPLE_LINKER" != x1 ; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${TARGET_OBJCOPY} works for absolute addresses" >&5 +$as_echo_n "checking whether ${TARGET_OBJCOPY} works for absolute addresses... " >&6; } +if ${grub_cv_prog_objcopy_absolute+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <<\EOF +void cmain (void); +void +cmain (void) +{ + *((int *) 0x1000) = 2; +} +EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest.o; then : +else + as_fn_error $? "${CC-cc} cannot compile C source code" "$LINENO" 5 +fi +grub_cv_prog_objcopy_absolute=yes +for link_addr in 0x2000 0x8000 0x7C00; do + if { ac_try='${CC-cc} ${TARGET_CFLAGS} ${TARGET_LDFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + else + as_fn_error $? "${CC-cc} cannot link at address $link_addr" "$LINENO" 5 + fi + if { ac_try='${TARGET_OBJCOPY-objcopy} --only-section=.text -O binary conftest.exec conftest' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + else + as_fn_error $? "${TARGET_OBJCOPY-objcopy} cannot create binary files" "$LINENO" 5 + fi + if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + mv -f conftest conftest.old + else + grub_cv_prog_objcopy_absolute=no + break + fi +done +rm -f conftest* +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_prog_objcopy_absolute" >&5 +$as_echo "$grub_cv_prog_objcopy_absolute" >&6; } + +if test "x$grub_cv_prog_objcopy_absolute" = xno; then + as_fn_error $? "GRUB requires a working absolute objcopy; upgrade your binutils" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker accepts --build-id=none" >&5 +$as_echo_n "checking whether linker accepts --build-id=none... " >&6; } +if ${grub_cv_prog_ld_build_id_none+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS -Wl,--build-id=none" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_prog_ld_build_id_none=yes +else + grub_cv_prog_ld_build_id_none=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LDFLAGS="$save_LDFLAGS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_prog_ld_build_id_none" >&5 +$as_echo "$grub_cv_prog_ld_build_id_none" >&6; } + +if test "x$grub_cv_prog_ld_build_id_none" = xyes; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,--build-id=none" +fi + +if test "x$target_cpu" = xi386; then + if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then + if test ! -z "$TARGET_IMG_LDSCRIPT"; then + # Check symbols provided by linker script. + CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000" + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __bss_start is defined by the compiler" >&5 +$as_echo_n "checking if __bss_start is defined by the compiler... " >&6; } +if ${grub_cv_check_uscore_uscore_bss_start_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); + +int +main (void) +{ +asm ("incl __bss_start") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_check_uscore_uscore_bss_start_symbol=yes +else + grub_cv_check_uscore_uscore_bss_start_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_check_uscore_uscore_bss_start_symbol" >&5 +$as_echo "$grub_cv_check_uscore_uscore_bss_start_symbol" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if edata is defined by the compiler" >&5 +$as_echo_n "checking if edata is defined by the compiler... " >&6; } +if ${grub_cv_check_edata_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +int +main (void) +{ +asm ("incl edata") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_check_edata_symbol=yes +else + grub_cv_check_edata_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_check_edata_symbol" >&5 +$as_echo "$grub_cv_check_edata_symbol" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if _edata is defined by the compiler" >&5 +$as_echo_n "checking if _edata is defined by the compiler... " >&6; } +if ${grub_cv_check_uscore_edata_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +int +main (void) +{ +asm ("incl _edata") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_check_uscore_edata_symbol=yes +else + grub_cv_check_uscore_edata_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_check_uscore_edata_symbol" >&5 +$as_echo "$grub_cv_check_uscore_edata_symbol" >&6; } + +if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then + BSS_START_SYMBOL=__bss_start +elif test "x$grub_cv_check_edata_symbol" = xyes; then + BSS_START_SYMBOL=edata +elif test "x$grub_cv_check_uscore_edata_symbol" = xyes; then + BSS_START_SYMBOL=_edata +else + as_fn_error $? "none of __bss_start, edata or _edata is defined" "$LINENO" 5 +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if end is defined by the compiler" >&5 +$as_echo_n "checking if end is defined by the compiler... " >&6; } +if ${grub_cv_check_end_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +int +main (void) +{ +asm ("incl end") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_check_end_symbol=yes +else + grub_cv_check_end_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_check_end_symbol" >&5 +$as_echo "$grub_cv_check_end_symbol" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if _end is defined by the compiler" >&5 +$as_echo_n "checking if _end is defined by the compiler... " >&6; } +if ${grub_cv_check_uscore_end_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +int +main (void) +{ +asm ("incl _end") + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + grub_cv_check_uscore_end_symbol=yes +else + grub_cv_check_uscore_end_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_check_uscore_end_symbol" >&5 +$as_echo "$grub_cv_check_uscore_end_symbol" >&6; } + +if test "x$grub_cv_check_end_symbol" = xyes; then + END_SYMBOL=end +elif test "x$grub_cv_check_uscore_end_symbol" = xyes; then + END_SYMBOL=_end +else + as_fn_error $? "neither end nor _end is defined" "$LINENO" 5 +fi + + fi + CFLAGS="$TARGET_CFLAGS" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nm works" >&5 +$as_echo_n "checking whether nm works... " >&6; } +if ${grub_cv_prog_nm_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + +nm_works_tmp_dir="$(mktemp -d "./confXXXXXX")" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_works_tmp_dir/ef" +if $TARGET_NM "$nm_works_tmp_dir/ef" > /dev/null; then + grub_cv_prog_nm_works=yes +else + grub_cv_prog_nm_minus_p=no +fi +rm "$nm_works_tmp_dir/ef" +rmdir "$nm_works_tmp_dir" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_prog_nm_works" >&5 +$as_echo "$grub_cv_prog_nm_works" >&6; } + +if test "x$grub_cv_prog_nm_works" != xyes; then + as_fn_error $? "nm does not work" "$LINENO" 5 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nm accepts -P" >&5 +$as_echo_n "checking whether nm accepts -P... " >&6; } +if ${grub_cv_prog_nm_minus_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + +nm_minus_p_tmp_dir="$(mktemp -d "./confXXXXXX")" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_minus_p_tmp_dir/ef" +if $TARGET_NM -P "$nm_minus_p_tmp_dir/ef" 2>&1 > /dev/null; then + grub_cv_prog_nm_minus_p=yes +else + grub_cv_prog_nm_minus_p=no +fi +rm "$nm_minus_p_tmp_dir/ef" +rmdir "$nm_minus_p_tmp_dir" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_prog_nm_minus_p" >&5 +$as_echo "$grub_cv_prog_nm_minus_p" >&6; } + +if test "x$grub_cv_prog_nm_minus_p" = xyes; then + TARGET_NMFLAGS_MINUS_P="-P" +else + TARGET_NMFLAGS_MINUS_P= +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether nm accepts --defined-only" >&5 +$as_echo_n "checking whether nm accepts --defined-only... " >&6; } +if ${grub_cv_prog_nm_defined_only+:} false; then : + $as_echo_n "(cached) " >&6 +else + +nm_defined_only_tmp_dir="$(mktemp -d "./confXXXXXX")" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_defined_only_tmp_dir/ef" +if $TARGET_NM --defined-only "$nm_defined_only_tmp_dir/ef" 2>&1 > /dev/null; then + grub_cv_prog_nm_defined_only=yes +else + grub_cv_prog_nm_defined_only=no +fi +rm "$nm_defined_only_tmp_dir/ef" +rmdir "$nm_defined_only_tmp_dir" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_prog_nm_defined_only" >&5 +$as_echo "$grub_cv_prog_nm_defined_only" >&6; } + +if test "x$grub_cv_prog_nm_defined_only" = xyes; then + TARGET_NMFLAGS_DEFINED_ONLY=--defined-only +else + TARGET_NMFLAGS_DEFINED_ONLY= +fi + + + + +if test "$platform" != emu; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -nostdinc -isystem works" >&5 +$as_echo_n "checking whether -nostdinc -isystem works... " >&6; } +if ${grub_cv_cc_isystem+:} false; then : + $as_echo_n "(cached) " >&6 +else + + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +int va_arg_func (int fixed, va_list args); +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_isystem=yes +else + grub_cv_cc_isystem=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$SAVED_CPPFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_isystem" >&5 +$as_echo "$grub_cv_cc_isystem" >&6; } + +if test x"$grub_cv_cc_isystem" = xyes ; then + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" +fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wtrampolines work" >&5 +$as_echo_n "checking whether -Wtrampolines work... " >&6; } +if ${grub_cv_cc_wtrampolines+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int va_arg_func (int fixed, va_list args); +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + grub_cv_cc_wtrampolines=yes +else + grub_cv_cc_wtrampolines=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $grub_cv_cc_wtrampolines" >&5 +$as_echo "$grub_cv_cc_wtrampolines" >&6; } + +if test x"$grub_cv_cc_wtrampolines" = xyes ; then + TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines" +fi + +# Restore the flags. +CC="$tmp_CC" +CFLAGS="$tmp_CFLAGS" +CPPFLAGS="$tmp_CPPFLAGS" +LDFLAGS="$tmp_LDFLAGS" +LIBS="$tmp_LIBS" + +# +# Check for options. +# + +# Memory manager debugging. +# Check whether --enable-mm-debug was given. +if test "${enable_mm_debug+set}" = set; then : + enableval=$enable_mm_debug; +$as_echo "#define MM_DEBUG 1" >>confdefs.h + +fi + + +# Check whether --enable-cache-stats was given. +if test "${enable_cache_stats+set}" = set; then : + enableval=$enable_cache_stats; +fi + + +if test x$enable_cache_stats = xyes; then + DISK_CACHE_STATS=1 +else + DISK_CACHE_STATS=0 +fi + + +# Check whether --enable-boot-time was given. +if test "${enable_boot_time+set}" = set; then : + enableval=$enable_boot_time; +fi + + +if test x$enable_boot_time = xyes; then + BOOT_TIME_STATS=1 +else + BOOT_TIME_STATS=0 +fi + + +# Check whether --enable-grub-emu-sdl was given. +if test "${enable_grub_emu_sdl+set}" = set; then : + enableval=$enable_grub_emu_sdl; +fi + + +# Check whether --enable-grub-emu-pci was given. +if test "${enable_grub_emu_pci+set}" = set; then : + enableval=$enable_grub_emu_pci; +fi + + +if test "$platform" = emu; then + +if test x"$enable_grub_emu_sdl" = xno ; then + grub_emu_sdl_excuse="explicitly disabled" +fi +if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for libSDL libraries. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL_Init in -lSDL" >&5 +$as_echo_n "checking for SDL_Init in -lSDL... " >&6; } +if ${ac_cv_lib_SDL_SDL_Init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lSDL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SDL_Init (); +int +main (void) +{ +return SDL_Init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_SDL_SDL_Init=yes +else + ac_cv_lib_SDL_SDL_Init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_SDL_SDL_Init" >&5 +$as_echo "$ac_cv_lib_SDL_SDL_Init" >&6; } +if test "x$ac_cv_lib_SDL_SDL_Init" = xyes; then : + LIBSDL="-lSDL" +else + grub_emu_sdl_excuse="libSDL libraries are required to build \`grub-emu' with SDL support" +fi + + +fi + +if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for headers. + for ac_header in SDL/SDL.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "SDL/SDL.h" "ac_cv_header_SDL_SDL_h" "$ac_includes_default" +if test "x$ac_cv_header_SDL_SDL_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SDL_SDL_H 1 +_ACEOF + +else + grub_emu_sdl_excuse="libSDL header file is required to build \`grub-emu' with SDL support" +fi + +done + +fi + +if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then + as_fn_error $? "SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)" "$LINENO" 5 +fi +if test x"$grub_emu_sdl_excuse" = x ; then +enable_grub_emu_sdl=yes +else +enable_grub_emu_sdl=no +fi + +if test x"$enable_grub_emu_pci" != xyes ; then + grub_emu_pci_excuse="not enabled" +fi + +if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for libpci libraries. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pci_system_init in -lpciaccess" >&5 +$as_echo_n "checking for pci_system_init in -lpciaccess... " >&6; } +if ${ac_cv_lib_pciaccess_pci_system_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpciaccess $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pci_system_init (); +int +main (void) +{ +return pci_system_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pciaccess_pci_system_init=yes +else + ac_cv_lib_pciaccess_pci_system_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pciaccess_pci_system_init" >&5 +$as_echo "$ac_cv_lib_pciaccess_pci_system_init" >&6; } +if test "x$ac_cv_lib_pciaccess_pci_system_init" = xyes; then : + LIBPCIACCESS="-lpciaccess" +else + grub_emu_pci_excuse="need libpciaccess library" +fi + + +fi +if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for headers. + for ac_header in pciaccess.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "pciaccess.h" "ac_cv_header_pciaccess_h" "$ac_includes_default" +if test "x$ac_cv_header_pciaccess_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PCIACCESS_H 1 +_ACEOF + +else + grub_emu_pci_excuse="need libpciaccess headers" +fi + +done + +fi + +if test x"$grub_emu_pci_excuse" = x ; then +enable_grub_emu_pci=yes +else + +enable_grub_emu_pci=no +fi + + + + +else + +# Ignore --enable-emu-* if platform is not emu +enable_grub_emu_sdl=no +enable_grub_emu_pci=no +fi + +# Check whether --enable-grub-mkfont was given. +if test "${enable_grub_mkfont+set}" = set; then : + enableval=$enable_grub_mkfont; +fi + +if test x"$enable_grub_mkfont" = xno ; then + grub_mkfont_excuse="explicitly disabled" +fi + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + if test -n "$ac_tool_prefix"; then + for ac_prog in freetype-config + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_FREETYPE+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FREETYPE"; then + ac_cv_prog_FREETYPE="$FREETYPE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_FREETYPE="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FREETYPE=$ac_cv_prog_FREETYPE +if test -n "$FREETYPE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE" >&5 +$as_echo "$FREETYPE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$FREETYPE" && break + done +fi +if test -z "$FREETYPE"; then + ac_ct_FREETYPE=$FREETYPE + for ac_prog in freetype-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_FREETYPE+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_FREETYPE"; then + ac_cv_prog_ac_ct_FREETYPE="$ac_ct_FREETYPE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_FREETYPE="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_FREETYPE=$ac_cv_prog_ac_ct_FREETYPE +if test -n "$ac_ct_FREETYPE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FREETYPE" >&5 +$as_echo "$ac_ct_FREETYPE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_FREETYPE" && break +done + + if test "x$ac_ct_FREETYPE" = x; then + FREETYPE="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + FREETYPE=$ac_ct_FREETYPE + fi +fi + + if test "x$FREETYPE" = x ; then + grub_mkfont_excuse="need freetype2 library" + fi +fi + +unset ac_cv_header_ft2build_h + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + freetype_cflags=`$FREETYPE --cflags` + freetype_libs=`$FREETYPE --libs` + SAVED_CPPFLAGS="$CPPFLAGS" + SAVED_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $freetype_cflags" + LIBS="$LIBS $freetype_libs" + for ac_header in ft2build.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "ft2build.h" "ac_cv_header_ft2build_h" "$ac_includes_default" +if test "x$ac_cv_header_ft2build_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FT2BUILD_H 1 +_ACEOF + +else + grub_mkfont_excuse="need freetype2 headers" +fi + +done + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char FT_Load_Glyph (); +int +main (void) +{ +return FT_Load_Glyph (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + grub_mkfont_excuse="freetype2 library unusable" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS="$SAVED_CPPFLAGS" + LIBS="$SAVED_LIBS" +fi + +if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then + as_fn_error $? "grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)" "$LINENO" 5 +fi +if test x"$grub_mkfont_excuse" = x ; then +enable_grub_mkfont=yes +else +enable_grub_mkfont=no +fi + + + + +SAVED_CC="$CC" +SAVED_CPP="$CPP" +SAVED_CFLAGS="$CFLAGS" +SAVED_CPPFLAGS="$CPPFLAGS" +SAVED_LDFLAGS="$LDFLAGS" +CC="$BUILD_CC" +CPP="$BUILD_CPP" +CFLAGS="$BUILD_CFLAGS" +CPPFLAGS="$BUILD_CPPFLAGS" +LDFLAGS="$BUILD_LDFAGS" + +unset ac_cv_c_bigendian +unset ac_cv_header_ft2build_h + +if ac_fn_c_compute_int "$LINENO" "sizeof (void *)" "BUILD_SIZEOF_VOID_P" ""; then : + +fi + +if ac_fn_c_compute_int "$LINENO" "sizeof (long)" "BUILD_SIZEOF_LONG" ""; then : + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main (void) +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + BUILD_WORDS_BIGENDIAN=1;; #( + no) + BUILD_WORDS_BIGENDIAN=0 ;; #( + universal) + BUILD_WORDS_BIGENDIAN=err + ;; #( + *) + BUILD_WORDS_BIGENDIAN=err ;; + esac + + +if test x$BUILD_WORDS_BIGENDIAN = xerr ; then + as_fn_error $? "couldnt determine build endianness" "$LINENO" 5 +fi + + + + + +if test x"$grub_build_mkfont_excuse" = x ; then + # Check for freetype libraries. + for ac_prog in freetype-config +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_BUILD_FREETYPE+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BUILD_FREETYPE"; then + ac_cv_prog_BUILD_FREETYPE="$BUILD_FREETYPE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_BUILD_FREETYPE="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BUILD_FREETYPE=$ac_cv_prog_BUILD_FREETYPE +if test -n "$BUILD_FREETYPE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_FREETYPE" >&5 +$as_echo "$BUILD_FREETYPE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_FREETYPE" && break +done + + if test "x$BUILD_FREETYPE" = x ; then + grub_build_mkfont_excuse="need freetype2 library" + fi +fi + +if test x"$grub_build_mkfont_excuse" = x ; then + # Check for freetype libraries. + build_freetype_cflags=`$BUILD_FREETYPE --cflags` + build_freetype_libs=`$BUILD_FREETYPE --libs` + SAVED_CPPFLAGS_2="$CPPFLAGS" + SAVED_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $build_freetype_cflags" + LIBS="$LIBS $build_freetype_libs" + for ac_header in ft2build.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "ft2build.h" "ac_cv_header_ft2build_h" "$ac_includes_default" +if test "x$ac_cv_header_ft2build_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FT2BUILD_H 1 +_ACEOF + +else + grub_build_mkfont_excuse="need freetype2 headers" +fi + +done + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char FT_Load_Glyph (); +int +main (void) +{ +return FT_Load_Glyph (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + grub_build_mkfont_excuse="freetype2 library unusable" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$SAVED_LIBS" + CPPFLAGS="$SAVED_CPPFLAGS_2" +fi + +if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then + as_fn_error $? "build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)" "$LINENO" 5 +fi +if test x"$grub_build_mkfont_excuse" = x ; then + enable_build_grub_mkfont=yes +else + enable_build_grub_mkfont=no +fi +if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then + if test x"$grub_build_mkfont_excuse" = x ; then + as_fn_error $? "qemu, coreboot and loongson ports need build-time grub-mkfont" "$LINENO" 5 + else + as_fn_error $? "qemu, coreboot and loongson ports need build-time grub-mkfont ($grub_build_mkfont_excuse)" "$LINENO" 5 + fi +fi + + + + +CC="$SAVED_CC" +CPP="$SAVED_CPP" +CFLAGS="$SAVED_CFLAGS" +CPPFLAGS="$SAVED_CPPFLAGS" +LDFLAGS="$SAVED_LDFLAGS" + + +DJVU_FONT_SOURCE= + +starfield_excuse= + +# Check whether --enable-grub-themes was given. +if test "${enable_grub_themes+set}" = set; then : + enableval=$enable_grub_themes; +fi + +if test x"$enable_grub_themes" = xno ; then + starfield_excuse="explicitly disabled" +fi + +if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then + starfield_excuse="No build-time grub-mkfont" +fi + +if test x"$starfield_excuse" = x; then + for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do + if test -f "$dir/DejaVuSans.$ext"; then + DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext" + break 2 + fi + done + done + + if test "x$DJVU_FONT_SOURCE" = x; then + starfield_excuse="No DejaVu found" + fi +fi + +if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then + as_fn_error $? "themes were explicitly requested but requirements are not satisfied ($starfield_excuse)" "$LINENO" 5 +fi + + + +FONT_SOURCE= + +for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do + if test -f "$dir/unifont.$ext"; then + md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')" + # PCF and BDF from version 6.3 isn't hanled properly by libfreetype. + if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then + continue + fi + FONT_SOURCE="$dir/unifont.$ext" + break 2 + fi + done +done + +if test x"$enable_build_grub_mkfont" = xno ; then + FONT_SOURCE= +fi + +if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then + if test x"$grub_build_mkfont_excuse" = x ; then + as_fn_error $? "qemu, coreboot and loongson ports need unifont" "$LINENO" 5 + else + as_fn_error $? "qemu, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)" "$LINENO" 5 + fi +fi + + + +if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then + grub_build_mkfont_excuse="no fonts" +fi + + +# Check whether --enable-grub-mount was given. +if test "${enable_grub_mount+set}" = set; then : + enableval=$enable_grub_mount; +fi + +if test x"$enable_grub_mount" = xno ; then + grub_mount_excuse="explicitly disabled" +fi + +if test x"$grub_mount_excuse" = x ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main_real in -lfuse" >&5 +$as_echo_n "checking for fuse_main_real in -lfuse... " >&6; } +if ${ac_cv_lib_fuse_fuse_main_real+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfuse $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char fuse_main_real (); +int +main (void) +{ +return fuse_main_real (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_fuse_fuse_main_real=yes +else + ac_cv_lib_fuse_fuse_main_real=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fuse_fuse_main_real" >&5 +$as_echo "$ac_cv_lib_fuse_fuse_main_real" >&6; } +if test "x$ac_cv_lib_fuse_fuse_main_real" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBFUSE 1 +_ACEOF + + LIBS="-lfuse $LIBS" + +else + grub_mount_excuse="need FUSE library" +fi + +fi + +if test x"$grub_mount_excuse" = x ; then + # Check for fuse headers. + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26" + for ac_header in fuse/fuse.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "fuse/fuse.h" "ac_cv_header_fuse_fuse_h" "$ac_includes_default" +if test "x$ac_cv_header_fuse_fuse_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FUSE_FUSE_H 1 +_ACEOF + +else + grub_mount_excuse="need FUSE headers" +fi + +done + + CPPFLAGS="$SAVED_CPPFLAGS" +fi + +if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then + as_fn_error $? "grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)" "$LINENO" 5 +fi +if test x"$grub_mount_excuse" = x ; then +enable_grub_mount=yes +else +enable_grub_mount=no +fi + + +# Check whether --enable-device-mapper was given. +if test "${enable_device_mapper+set}" = set; then : + enableval=$enable_device_mapper; +fi + +if test x"$enable_device_mapper" = xno ; then + device_mapper_excuse="explicitly disabled" +fi + +if test x"$device_mapper_excuse" = x ; then + # Check for device-mapper header. + ac_fn_c_check_header_mongrel "$LINENO" "libdevmapper.h" "ac_cv_header_libdevmapper_h" "$ac_includes_default" +if test "x$ac_cv_header_libdevmapper_h" = xyes; then : + +else + device_mapper_excuse="need libdevmapper header" +fi + + +fi + +if test x"$device_mapper_excuse" = x ; then + # Check for device-mapper library. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_task_create in -ldevmapper" >&5 +$as_echo_n "checking for dm_task_create in -ldevmapper... " >&6; } +if ${ac_cv_lib_devmapper_dm_task_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldevmapper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dm_task_create (); +int +main (void) +{ +return dm_task_create (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_devmapper_dm_task_create=yes +else + ac_cv_lib_devmapper_dm_task_create=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_create" >&5 +$as_echo "$ac_cv_lib_devmapper_dm_task_create" >&6; } +if test "x$ac_cv_lib_devmapper_dm_task_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDEVMAPPER 1 +_ACEOF + + LIBS="-ldevmapper $LIBS" + +else + device_mapper_excuse="need devmapper library" +fi + +fi + +if test x"$device_mapper_excuse" = x ; then + # Check for device-mapper library. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dm_log_with_errno_init in -ldevmapper" >&5 +$as_echo_n "checking for dm_log_with_errno_init in -ldevmapper... " >&6; } +if ${ac_cv_lib_devmapper_dm_log_with_errno_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldevmapper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dm_log_with_errno_init (); +int +main (void) +{ +return dm_log_with_errno_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_devmapper_dm_log_with_errno_init=yes +else + ac_cv_lib_devmapper_dm_log_with_errno_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_log_with_errno_init" >&5 +$as_echo "$ac_cv_lib_devmapper_dm_log_with_errno_init" >&6; } +if test "x$ac_cv_lib_devmapper_dm_log_with_errno_init" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDEVMAPPER 1 +_ACEOF + + LIBS="-ldevmapper $LIBS" + +else + device_mapper_excuse="need devmapper library" +fi + +fi + +if test x"$device_mapper_excuse" = x ; then + LIBDEVMAPPER="-ldevmapper" + +$as_echo "#define HAVE_DEVICE_MAPPER 1" >>confdefs.h + +fi + + + +LIBGEOM= +if test x$host_kernel = xkfreebsd; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for geom_gettree in -lgeom" >&5 +$as_echo_n "checking for geom_gettree in -lgeom... " >&6; } +if ${ac_cv_lib_geom_geom_gettree+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgeom $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char geom_gettree (); +int +main (void) +{ +return geom_gettree (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_geom_geom_gettree=yes +else + ac_cv_lib_geom_geom_gettree=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_geom_geom_gettree" >&5 +$as_echo "$ac_cv_lib_geom_geom_gettree" >&6; } +if test "x$ac_cv_lib_geom_geom_gettree" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGEOM 1 +_ACEOF + + LIBS="-lgeom $LIBS" + +else + as_fn_error $? "Your platform requires libgeom" "$LINENO" 5 +fi + + LIBGEOM="-lgeom" +fi + + + +# Check whether --enable-liblzma was given. +if test "${enable_liblzma+set}" = set; then : + enableval=$enable_liblzma; +fi + +if test x"$enable_liblzma" = xno ; then + liblzma_excuse="explicitly disabled" +fi + +if test x"$liblzma_excuse" = x ; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_code in -llzma" >&5 +$as_echo_n "checking for lzma_code in -llzma... " >&6; } +if ${ac_cv_lib_lzma_lzma_code+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llzma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char lzma_code (); +int +main (void) +{ +return lzma_code (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lzma_lzma_code=yes +else + ac_cv_lib_lzma_lzma_code=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_code" >&5 +$as_echo "$ac_cv_lib_lzma_lzma_code" >&6; } +if test "x$ac_cv_lib_lzma_lzma_code" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBLZMA 1 +_ACEOF + + LIBS="-llzma $LIBS" + +else + liblzma_excuse="need lzma library" +fi + +fi +if test x"$liblzma_excuse" = x ; then +ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default" +if test "x$ac_cv_header_lzma_h" = xyes; then : + +else + liblzma_excuse="need lzma header" +fi + + +fi + +if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then + as_fn_error $? "liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)" "$LINENO" 5 +fi + + +if test x"$liblzma_excuse" = x ; then + LIBLZMA="-llzma" + +$as_echo "#define USE_LIBLZMA 1" >>confdefs.h + +fi + + + +# Check whether --enable-libzfs was given. +if test "${enable_libzfs+set}" = set; then : + enableval=$enable_libzfs; +fi + +if test x"$enable_libzfs" = xno ; then + libzfs_excuse="explicitly disabled" +fi + +if test x"$libzfs_excuse" = x ; then + # Only check for system headers if libzfs support has not been disabled. + for ac_header in libzfs.h libnvpair.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +fi + +if test x"$libzfs_excuse" = x ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libzfs_init in -lzfs" >&5 +$as_echo_n "checking for libzfs_init in -lzfs... " >&6; } +if ${ac_cv_lib_zfs_libzfs_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lzfs $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char libzfs_init (); +int +main (void) +{ +return libzfs_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_zfs_libzfs_init=yes +else + ac_cv_lib_zfs_libzfs_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zfs_libzfs_init" >&5 +$as_echo "$ac_cv_lib_zfs_libzfs_init" >&6; } +if test "x$ac_cv_lib_zfs_libzfs_init" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBZFS 1 +_ACEOF + + LIBS="-lzfs $LIBS" + +else + libzfs_excuse="need zfs library" +fi + +fi + +if test x"$libzfs_excuse" = x ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nvlist_lookup_string in -lnvpair" >&5 +$as_echo_n "checking for nvlist_lookup_string in -lnvpair... " >&6; } +if ${ac_cv_lib_nvpair_nvlist_lookup_string+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnvpair $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char nvlist_lookup_string (); +int +main (void) +{ +return nvlist_lookup_string (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_nvpair_nvlist_lookup_string=yes +else + ac_cv_lib_nvpair_nvlist_lookup_string=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nvpair_nvlist_lookup_string" >&5 +$as_echo "$ac_cv_lib_nvpair_nvlist_lookup_string" >&6; } +if test "x$ac_cv_lib_nvpair_nvlist_lookup_string" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNVPAIR 1 +_ACEOF + + LIBS="-lnvpair $LIBS" + +else + libzfs_excuse="need nvpair library" +fi + +fi + +if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then + as_fn_error $? "libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)" "$LINENO" 5 +fi + +if test x"$libzfs_excuse" = x ; then + # We need both libzfs and libnvpair for a successful build. + LIBZFS="-lzfs" + +$as_echo "#define HAVE_LIBZFS 1" >>confdefs.h + + LIBNVPAIR="-lnvpair" + +$as_echo "#define HAVE_LIBNVPAIR 1" >>confdefs.h + +fi + + + + +LIBS="" + + +if test x$target_cpu = xi386 -a x$platform = xqemu; then : + GRUB_BOOT_MACHINE_LINK_ADDR=0xffe00 + +fi + + + + + + + +# Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; +fi + +if test x"$enable_werror" != xno ; then + TARGET_CFLAGS="$TARGET_CFLAGS -Werror" + HOST_CFLAGS="$HOST_CFLAGS -Werror" +fi + +TARGET_CPP="$TARGET_CC -E" +TARGET_CCAS=$TARGET_CC + +# Includes which include make-time substitutions. They must come last +# as to avoid executing top_builddir in shell. +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include" + +GRUB_TARGET_CPU="${target_cpu}" +GRUB_PLATFORM="${platform}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# +# Automake conditionals +# + + if test x$platform != xnone; then + COND_real_platform_TRUE= + COND_real_platform_FALSE='#' +else + COND_real_platform_TRUE='#' + COND_real_platform_FALSE= +fi + + if test x$platform = xemu; then + COND_emu_TRUE= + COND_emu_FALSE='#' +else + COND_emu_TRUE='#' + COND_emu_FALSE= +fi + + if test x$target_cpu = xi386 -a x$platform = xpc; then + COND_i386_pc_TRUE= + COND_i386_pc_FALSE='#' +else + COND_i386_pc_TRUE='#' + COND_i386_pc_FALSE= +fi + + if test x$target_cpu = xi386 -a x$platform = xefi; then + COND_i386_efi_TRUE= + COND_i386_efi_FALSE='#' +else + COND_i386_efi_TRUE='#' + COND_i386_efi_FALSE= +fi + + if test x$target_cpu = xia64 -a x$platform = xefi; then + COND_ia64_efi_TRUE= + COND_ia64_efi_FALSE='#' +else + COND_ia64_efi_TRUE='#' + COND_ia64_efi_FALSE= +fi + + if test x$target_cpu = xi386 -a x$platform = xqemu; then + COND_i386_qemu_TRUE= + COND_i386_qemu_FALSE='#' +else + COND_i386_qemu_TRUE='#' + COND_i386_qemu_FALSE= +fi + + if test x$target_cpu = xi386 -a x$platform = xieee1275; then + COND_i386_ieee1275_TRUE= + COND_i386_ieee1275_FALSE='#' +else + COND_i386_ieee1275_TRUE='#' + COND_i386_ieee1275_FALSE= +fi + + if test x$target_cpu = xi386 -a x$platform = xcoreboot; then + COND_i386_coreboot_TRUE= + COND_i386_coreboot_FALSE='#' +else + COND_i386_coreboot_TRUE='#' + COND_i386_coreboot_FALSE= +fi + + if test x$target_cpu = xi386 -a x$platform = xmultiboot; then + COND_i386_multiboot_TRUE= + COND_i386_multiboot_FALSE='#' +else + COND_i386_multiboot_TRUE='#' + COND_i386_multiboot_FALSE= +fi + + if test x$target_cpu = xx86_64 -a x$platform = xefi; then + COND_x86_64_efi_TRUE= + COND_x86_64_efi_FALSE='#' +else + COND_x86_64_efi_TRUE='#' + COND_x86_64_efi_FALSE= +fi + + if test x$target_cpu = xi386 -a x$platform = xxen; then + COND_i386_xen_TRUE= + COND_i386_xen_FALSE='#' +else + COND_i386_xen_TRUE='#' + COND_i386_xen_FALSE= +fi + + if test x$target_cpu = xx86_64 -a x$platform = xxen; then + COND_x86_64_xen_TRUE= + COND_x86_64_xen_FALSE='#' +else + COND_x86_64_xen_TRUE='#' + COND_x86_64_xen_FALSE= +fi + + if test x$target_cpu = xmipsel -a x$platform = xloongson; then + COND_mips_loongson_TRUE= + COND_mips_loongson_FALSE='#' +else + COND_mips_loongson_TRUE='#' + COND_mips_loongson_FALSE= +fi + + if test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips; then + COND_mips_qemu_mips_TRUE= + COND_mips_qemu_mips_FALSE='#' +else + COND_mips_qemu_mips_TRUE='#' + COND_mips_qemu_mips_FALSE= +fi + + if test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc; then + COND_mips_arc_TRUE= + COND_mips_arc_FALSE='#' +else + COND_mips_arc_TRUE='#' + COND_mips_arc_FALSE= +fi + + if test x$target_cpu = xsparc64 -a x$platform = xieee1275; then + COND_sparc64_ieee1275_TRUE= + COND_sparc64_ieee1275_FALSE='#' +else + COND_sparc64_ieee1275_TRUE='#' + COND_sparc64_ieee1275_FALSE= +fi + + if test x$target_cpu = xsparc64 -a x$platform = xemu; then + COND_sparc64_emu_TRUE= + COND_sparc64_emu_FALSE='#' +else + COND_sparc64_emu_TRUE='#' + COND_sparc64_emu_FALSE= +fi + + if test x$target_cpu = xpowerpc -a x$platform = xieee1275; then + COND_powerpc_ieee1275_TRUE= + COND_powerpc_ieee1275_FALSE='#' +else + COND_powerpc_ieee1275_TRUE='#' + COND_powerpc_ieee1275_FALSE= +fi + + if test x$target_cpu = xmips -o x$target_cpu = xmipsel; then + COND_mips_TRUE= + COND_mips_FALSE='#' +else + COND_mips_TRUE='#' + COND_mips_FALSE= +fi + + if test x$target_cpu = xmipsel; then + COND_mipsel_TRUE= + COND_mipsel_FALSE='#' +else + COND_mipsel_TRUE='#' + COND_mipsel_FALSE= +fi + + if test x$target_cpu = xmips; then + COND_mipseb_TRUE= + COND_mipseb_FALSE='#' +else + COND_mipseb_TRUE='#' + COND_mipseb_FALSE= +fi + + if test x$target_cpu = xarm ; then + COND_arm_TRUE= + COND_arm_FALSE='#' +else + COND_arm_TRUE='#' + COND_arm_FALSE= +fi + + if test x$target_cpu = xarm -a x$platform = xuboot; then + COND_arm_uboot_TRUE= + COND_arm_uboot_FALSE='#' +else + COND_arm_uboot_TRUE='#' + COND_arm_uboot_FALSE= +fi + + if test x$target_cpu = xarm -a x$platform = xefi; then + COND_arm_efi_TRUE= + COND_arm_efi_FALSE='#' +else + COND_arm_efi_TRUE='#' + COND_arm_efi_FALSE= +fi + + if test x$target_cpu = xarm64 ; then + COND_arm64_TRUE= + COND_arm64_FALSE='#' +else + COND_arm64_TRUE='#' + COND_arm64_FALSE= +fi + + if test x$target_cpu = xarm64 -a x$platform = xefi; then + COND_arm64_efi_TRUE= + COND_arm64_efi_FALSE='#' +else + COND_arm64_efi_TRUE='#' + COND_arm64_efi_FALSE= +fi + + + if test x$host_kernel = xhurd; then + COND_HOST_HURD_TRUE= + COND_HOST_HURD_FALSE='#' +else + COND_HOST_HURD_TRUE='#' + COND_HOST_HURD_FALSE= +fi + + if test x$host_kernel = xlinux; then + COND_HOST_LINUX_TRUE= + COND_HOST_LINUX_FALSE='#' +else + COND_HOST_LINUX_TRUE='#' + COND_HOST_LINUX_FALSE= +fi + + if test x$host_kernel = xnetbsd; then + COND_HOST_NETBSD_TRUE= + COND_HOST_NETBSD_FALSE='#' +else + COND_HOST_NETBSD_TRUE='#' + COND_HOST_NETBSD_FALSE= +fi + + if test x$host_kernel = xwindows; then + COND_HOST_WINDOWS_TRUE= + COND_HOST_WINDOWS_FALSE='#' +else + COND_HOST_WINDOWS_TRUE='#' + COND_HOST_WINDOWS_FALSE= +fi + + if test x$host_kernel = xkfreebsd; then + COND_HOST_KFREEBSD_TRUE= + COND_HOST_KFREEBSD_FALSE='#' +else + COND_HOST_KFREEBSD_TRUE='#' + COND_HOST_KFREEBSD_FALSE= +fi + + if test x$host_kernel = xxnu; then + COND_HOST_XNU_TRUE= + COND_HOST_XNU_FALSE='#' +else + COND_HOST_XNU_TRUE='#' + COND_HOST_XNU_FALSE= +fi + + if test x$host_kernel = xillumos; then + COND_HOST_ILLUMOS_TRUE= + COND_HOST_ILLUMOS_FALSE='#' +else + COND_HOST_ILLUMOS_TRUE='#' + COND_HOST_ILLUMOS_FALSE= +fi + + + if test x$cross_compiling = xno -a x$HELP2MAN != x; then + COND_MAN_PAGES_TRUE= + COND_MAN_PAGES_FALSE='#' +else + COND_MAN_PAGES_TRUE='#' + COND_MAN_PAGES_FALSE= +fi + + if test x$enable_grub_emu_sdl = xyes; then + COND_GRUB_EMU_SDL_TRUE= + COND_GRUB_EMU_SDL_FALSE='#' +else + COND_GRUB_EMU_SDL_TRUE='#' + COND_GRUB_EMU_SDL_FALSE= +fi + + if test x$enable_grub_emu_pci = xyes; then + COND_GRUB_EMU_PCI_TRUE= + COND_GRUB_EMU_PCI_FALSE='#' +else + COND_GRUB_EMU_PCI_TRUE='#' + COND_GRUB_EMU_PCI_FALSE= +fi + + if test x$enable_grub_mkfont = xyes; then + COND_GRUB_MKFONT_TRUE= + COND_GRUB_MKFONT_FALSE='#' +else + COND_GRUB_MKFONT_TRUE='#' + COND_GRUB_MKFONT_FALSE= +fi + + if test x$enable_grub_mount = xyes; then + COND_GRUB_MOUNT_TRUE= + COND_GRUB_MOUNT_FALSE='#' +else + COND_GRUB_MOUNT_TRUE='#' + COND_GRUB_MOUNT_FALSE= +fi + + if test x$FONT_SOURCE != x; then + COND_HAVE_FONT_SOURCE_TRUE= + COND_HAVE_FONT_SOURCE_FALSE='#' +else + COND_HAVE_FONT_SOURCE_TRUE='#' + COND_HAVE_FONT_SOURCE_FALSE= +fi + +if test x$FONT_SOURCE != x ; then + HAVE_FONT_SOURCE=1 +else + HAVE_FONT_SOURCE=0 +fi + + if test x$TARGET_APPLE_LINKER = x1; then + COND_APPLE_LINKER_TRUE= + COND_APPLE_LINKER_FALSE='#' +else + COND_APPLE_LINKER_TRUE='#' + COND_APPLE_LINKER_FALSE= +fi + + if test x$enable_efiemu = xyes; then + COND_ENABLE_EFIEMU_TRUE= + COND_ENABLE_EFIEMU_FALSE='#' +else + COND_ENABLE_EFIEMU_TRUE='#' + COND_ENABLE_EFIEMU_FALSE= +fi + + if test x$DISK_CACHE_STATS = x1; then + COND_ENABLE_CACHE_STATS_TRUE= + COND_ENABLE_CACHE_STATS_FALSE='#' +else + COND_ENABLE_CACHE_STATS_TRUE='#' + COND_ENABLE_CACHE_STATS_FALSE= +fi + + if test x$BOOT_TIME_STATS = x1; then + COND_ENABLE_BOOT_TIME_STATS_TRUE= + COND_ENABLE_BOOT_TIME_STATS_FALSE='#' +else + COND_ENABLE_BOOT_TIME_STATS_TRUE='#' + COND_ENABLE_BOOT_TIME_STATS_FALSE= +fi + + + if test x$HAVE_CXX = xyes; then + COND_HAVE_CXX_TRUE= + COND_HAVE_CXX_FALSE='#' +else + COND_HAVE_CXX_TRUE='#' + COND_HAVE_CXX_FALSE= +fi + + + if test x$HAVE_ASM_USCORE = x1; then + COND_HAVE_ASM_USCORE_TRUE= + COND_HAVE_ASM_USCORE_FALSE='#' +else + COND_HAVE_ASM_USCORE_TRUE='#' + COND_HAVE_ASM_USCORE_FALSE= +fi + + if test "x$starfield_excuse" = x; then + COND_STARFIELD_TRUE= + COND_STARFIELD_FALSE='#' +else + COND_STARFIELD_TRUE='#' + COND_STARFIELD_FALSE= +fi + + if test "x$have_exec" = xy; then + COND_HAVE_EXEC_TRUE= + COND_HAVE_EXEC_FALSE='#' +else + COND_HAVE_EXEC_TRUE='#' + COND_HAVE_EXEC_FALSE= +fi + + +test "x$prefix" = xNONE && prefix="$ac_default_prefix" +test "x$exec_prefix" = xNONE && exec_prefix="${prefix}" +datarootdir="$(eval echo "$datarootdir")" +grub_libdir="$(eval echo "$libdir")" +grub_localedir="$(eval echo "$localedir")" +grub_datadir="$(eval echo "$datadir")" +grub_sysconfdir="$(eval echo "$sysconfdir")" + +cat >>confdefs.h <<_ACEOF +#define LOCALEDIR "$grub_localedir" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define GRUB_LIBDIR "$grub_libdir" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define GRUB_DATADIR "$grub_datadir" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define GRUB_SYSCONFDIR "$grub_sysconfdir" +_ACEOF + + + +# Output files. +if test "$platform" != none; then + cpudir="${target_cpu}" + if test x${cpudir} = xmipsel; then + cpudir=mips; + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s can handle directories properly" >&5 +$as_echo_n "checking whether ln -s can handle directories properly... " >&6; } +mkdir testdir 2>/dev/null +case $srcdir in +[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;; + *) reldir=../$srcdir/include/grub/util ;; +esac +if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + link_dir=yes +else + link_dir=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -rf testdir + + if test x"$link_dir" = xyes ; then + ac_config_links="$ac_config_links include/grub/cpu:include/grub/$cpudir" + + if test "$platform" != emu ; then + ac_config_links="$ac_config_links include/grub/machine:include/grub/$cpudir/$platform" + + fi + else + mkdir -p include/grub 2>/dev/null + rm -rf include/grub/cpu + cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null + if test "$platform" != emu ; then + rm -rf include/grub/machine + cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null + fi + fi +else + # Just enough to stop the compiler failing with -I$(srcdir)/include. + mkdir -p include 2>/dev/null + rm -rf include/grub/cpu include/grub/machine +fi + +ac_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files grub-core/Makefile" + +ac_config_files="$ac_config_files grub-core/gnulib/Makefile" + +ac_config_files="$ac_config_files po/Makefile.in" + +ac_config_files="$ac_config_files docs/Makefile" + +ac_config_files="$ac_config_files util/bash-completion.d/Makefile" + +ac_config_files="$ac_config_files stamp-h" + +ac_config_files="$ac_config_files config.h" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then + as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_FLOAT_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_FNMATCH_H_TRUE}" && test -z "${GL_GENERATE_FNMATCH_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_FNMATCH_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDALIGN_H_TRUE}" && test -z "${GL_GENERATE_STDALIGN_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDALIGN_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_SYSEXITS_H_TRUE}" && test -z "${GL_GENERATE_SYSEXITS_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_SYSEXITS_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE}"; then + as_fn_error $? "conditional \"LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + + + gl_libobjs= + gl_ltlibobjs= + if test -n "$gl_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gl_libobjs="$gl_libobjs $i.$ac_objext" + gl_ltlibobjs="$gl_ltlibobjs $i.lo" + done + fi + gl_LIBOBJS=$gl_libobjs + + gl_LTLIBOBJS=$gl_ltlibobjs + + + + gltests_libobjs= + gltests_ltlibobjs= + if test -n "$gltests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gltests_libobjs="$gltests_libobjs $i.$ac_objext" + gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" + done + fi + gltests_LIBOBJS=$gltests_libobjs + + gltests_LTLIBOBJS=$gltests_ltlibobjs + + +if test -z "${COND_real_platform_TRUE}" && test -z "${COND_real_platform_FALSE}"; then + as_fn_error $? "conditional \"COND_real_platform\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_emu_TRUE}" && test -z "${COND_emu_FALSE}"; then + as_fn_error $? "conditional \"COND_emu\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_i386_pc_TRUE}" && test -z "${COND_i386_pc_FALSE}"; then + as_fn_error $? "conditional \"COND_i386_pc\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_i386_efi_TRUE}" && test -z "${COND_i386_efi_FALSE}"; then + as_fn_error $? "conditional \"COND_i386_efi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ia64_efi_TRUE}" && test -z "${COND_ia64_efi_FALSE}"; then + as_fn_error $? "conditional \"COND_ia64_efi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_i386_qemu_TRUE}" && test -z "${COND_i386_qemu_FALSE}"; then + as_fn_error $? "conditional \"COND_i386_qemu\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_i386_ieee1275_TRUE}" && test -z "${COND_i386_ieee1275_FALSE}"; then + as_fn_error $? "conditional \"COND_i386_ieee1275\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_i386_coreboot_TRUE}" && test -z "${COND_i386_coreboot_FALSE}"; then + as_fn_error $? "conditional \"COND_i386_coreboot\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_i386_multiboot_TRUE}" && test -z "${COND_i386_multiboot_FALSE}"; then + as_fn_error $? "conditional \"COND_i386_multiboot\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_x86_64_efi_TRUE}" && test -z "${COND_x86_64_efi_FALSE}"; then + as_fn_error $? "conditional \"COND_x86_64_efi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_i386_xen_TRUE}" && test -z "${COND_i386_xen_FALSE}"; then + as_fn_error $? "conditional \"COND_i386_xen\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_x86_64_xen_TRUE}" && test -z "${COND_x86_64_xen_FALSE}"; then + as_fn_error $? "conditional \"COND_x86_64_xen\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_mips_loongson_TRUE}" && test -z "${COND_mips_loongson_FALSE}"; then + as_fn_error $? "conditional \"COND_mips_loongson\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_mips_qemu_mips_TRUE}" && test -z "${COND_mips_qemu_mips_FALSE}"; then + as_fn_error $? "conditional \"COND_mips_qemu_mips\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_mips_arc_TRUE}" && test -z "${COND_mips_arc_FALSE}"; then + as_fn_error $? "conditional \"COND_mips_arc\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_sparc64_ieee1275_TRUE}" && test -z "${COND_sparc64_ieee1275_FALSE}"; then + as_fn_error $? "conditional \"COND_sparc64_ieee1275\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_sparc64_emu_TRUE}" && test -z "${COND_sparc64_emu_FALSE}"; then + as_fn_error $? "conditional \"COND_sparc64_emu\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_powerpc_ieee1275_TRUE}" && test -z "${COND_powerpc_ieee1275_FALSE}"; then + as_fn_error $? "conditional \"COND_powerpc_ieee1275\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_mips_TRUE}" && test -z "${COND_mips_FALSE}"; then + as_fn_error $? "conditional \"COND_mips\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_mipsel_TRUE}" && test -z "${COND_mipsel_FALSE}"; then + as_fn_error $? "conditional \"COND_mipsel\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_mipseb_TRUE}" && test -z "${COND_mipseb_FALSE}"; then + as_fn_error $? "conditional \"COND_mipseb\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_arm_TRUE}" && test -z "${COND_arm_FALSE}"; then + as_fn_error $? "conditional \"COND_arm\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_arm_uboot_TRUE}" && test -z "${COND_arm_uboot_FALSE}"; then + as_fn_error $? "conditional \"COND_arm_uboot\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_arm_efi_TRUE}" && test -z "${COND_arm_efi_FALSE}"; then + as_fn_error $? "conditional \"COND_arm_efi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_arm64_TRUE}" && test -z "${COND_arm64_FALSE}"; then + as_fn_error $? "conditional \"COND_arm64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_arm64_efi_TRUE}" && test -z "${COND_arm64_efi_FALSE}"; then + as_fn_error $? "conditional \"COND_arm64_efi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HOST_HURD_TRUE}" && test -z "${COND_HOST_HURD_FALSE}"; then + as_fn_error $? "conditional \"COND_HOST_HURD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HOST_LINUX_TRUE}" && test -z "${COND_HOST_LINUX_FALSE}"; then + as_fn_error $? "conditional \"COND_HOST_LINUX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HOST_NETBSD_TRUE}" && test -z "${COND_HOST_NETBSD_FALSE}"; then + as_fn_error $? "conditional \"COND_HOST_NETBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HOST_WINDOWS_TRUE}" && test -z "${COND_HOST_WINDOWS_FALSE}"; then + as_fn_error $? "conditional \"COND_HOST_WINDOWS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HOST_KFREEBSD_TRUE}" && test -z "${COND_HOST_KFREEBSD_FALSE}"; then + as_fn_error $? "conditional \"COND_HOST_KFREEBSD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HOST_XNU_TRUE}" && test -z "${COND_HOST_XNU_FALSE}"; then + as_fn_error $? "conditional \"COND_HOST_XNU\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HOST_ILLUMOS_TRUE}" && test -z "${COND_HOST_ILLUMOS_FALSE}"; then + as_fn_error $? "conditional \"COND_HOST_ILLUMOS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_MAN_PAGES_TRUE}" && test -z "${COND_MAN_PAGES_FALSE}"; then + as_fn_error $? "conditional \"COND_MAN_PAGES\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_GRUB_EMU_SDL_TRUE}" && test -z "${COND_GRUB_EMU_SDL_FALSE}"; then + as_fn_error $? "conditional \"COND_GRUB_EMU_SDL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_GRUB_EMU_PCI_TRUE}" && test -z "${COND_GRUB_EMU_PCI_FALSE}"; then + as_fn_error $? "conditional \"COND_GRUB_EMU_PCI\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_GRUB_MKFONT_TRUE}" && test -z "${COND_GRUB_MKFONT_FALSE}"; then + as_fn_error $? "conditional \"COND_GRUB_MKFONT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_GRUB_MOUNT_TRUE}" && test -z "${COND_GRUB_MOUNT_FALSE}"; then + as_fn_error $? "conditional \"COND_GRUB_MOUNT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HAVE_FONT_SOURCE_TRUE}" && test -z "${COND_HAVE_FONT_SOURCE_FALSE}"; then + as_fn_error $? "conditional \"COND_HAVE_FONT_SOURCE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_APPLE_LINKER_TRUE}" && test -z "${COND_APPLE_LINKER_FALSE}"; then + as_fn_error $? "conditional \"COND_APPLE_LINKER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENABLE_EFIEMU_TRUE}" && test -z "${COND_ENABLE_EFIEMU_FALSE}"; then + as_fn_error $? "conditional \"COND_ENABLE_EFIEMU\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENABLE_CACHE_STATS_TRUE}" && test -z "${COND_ENABLE_CACHE_STATS_FALSE}"; then + as_fn_error $? "conditional \"COND_ENABLE_CACHE_STATS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_ENABLE_BOOT_TIME_STATS_TRUE}" && test -z "${COND_ENABLE_BOOT_TIME_STATS_FALSE}"; then + as_fn_error $? "conditional \"COND_ENABLE_BOOT_TIME_STATS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HAVE_CXX_TRUE}" && test -z "${COND_HAVE_CXX_FALSE}"; then + as_fn_error $? "conditional \"COND_HAVE_CXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HAVE_ASM_USCORE_TRUE}" && test -z "${COND_HAVE_ASM_USCORE_FALSE}"; then + as_fn_error $? "conditional \"COND_HAVE_ASM_USCORE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_STARFIELD_TRUE}" && test -z "${COND_STARFIELD_FALSE}"; then + as_fn_error $? "conditional \"COND_STARFIELD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COND_HAVE_EXEC_TRUE}" && test -z "${COND_HAVE_EXEC_FALSE}"; then + as_fn_error $? "conditional \"COND_HAVE_EXEC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GRUB $as_me 2.02, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_links="$ac_config_links" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration links: +$config_links + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +GRUB config.status 2.02 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config-util.h") CONFIG_HEADERS="$CONFIG_HEADERS config-util.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "include/grub/cpu") CONFIG_LINKS="$CONFIG_LINKS include/grub/cpu:include/grub/$cpudir" ;; + "include/grub/machine") CONFIG_LINKS="$CONFIG_LINKS include/grub/machine:include/grub/$cpudir/$platform" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "grub-core/Makefile") CONFIG_FILES="$CONFIG_FILES grub-core/Makefile" ;; + "grub-core/gnulib/Makefile") CONFIG_FILES="$CONFIG_FILES grub-core/gnulib/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "util/bash-completion.d/Makefile") CONFIG_FILES="$CONFIG_FILES util/bash-completion.d/Makefile" ;; + "stamp-h") CONFIG_FILES="$CONFIG_FILES stamp-h" ;; + "config.h") CONFIG_FILES="$CONFIG_FILES config.h" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + as_fn_error $? "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $ac_source in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi + ;; + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + "stamp-h":F) echo timestamp > stamp-h ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +echo "*******************************************************" +echo GRUB2 will be compiled with following components: +echo Platform: "$target_cpu"-"$platform" +if [ x"$platform" = xemu ]; then +if [ x"$grub_emu_sdl_excuse" = x ]; then +echo SDL support for grub-emu: Yes +else +echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)" +fi +if [ x"$grub_emu_pci_excuse" = x ]; then +echo PCI support for grub-emu: Yes +else +echo PCI support for grub-emu: No "($grub_emu_pci_excuse)" +fi +fi +if test x"$device_mapper_excuse" = x ; then +echo With devmapper support: Yes +else +echo With devmapper support: No "($device_mapper_excuse)" +fi +if [ x"$enable_mm_debug" = xyes ]; then +echo With memory debugging: Yes +else +echo With memory debugging: No +fi +if [ x"$enable_cache_stats" = xyes ]; then +echo With disk cache statistics: Yes +else +echo With disk cache statistics: No +fi + +if [ x"$enable_boot_time" = xyes ]; then +echo With boot time statistics: Yes +else +echo With boot time statistics: No +fi + +if [ x"$efiemu_excuse" = x ]; then +echo efiemu runtime: Yes +else +echo efiemu runtime: No "($efiemu_excuse)" +fi +if [ x"$grub_mkfont_excuse" = x ]; then +echo grub-mkfont: Yes +else +echo grub-mkfont: No "($grub_mkfont_excuse)" +fi +if [ x"$grub_mount_excuse" = x ]; then +echo grub-mount: Yes +else +echo grub-mount: No "($grub_mount_excuse)" +fi +if [ x"$starfield_excuse" = x ]; then +echo starfield theme: Yes +echo With DejaVuSans font from $DJVU_FONT_SOURCE +else +echo starfield theme: No "($starfield_excuse)" +fi +if [ x"$libzfs_excuse" = x ]; then +echo With libzfs support: Yes +else +echo With libzfs support: No "($libzfs_excuse)" +fi +if [ x"$grub_build_mkfont_excuse" = x ]; then + echo Build-time grub-mkfont: Yes + if test "x$FONT_SOURCE" = x ; then + echo "Without unifont" + else + echo "With unifont from $FONT_SOURCE" + fi +else + echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)" + echo "Without unifont (no build-time grub-mkfont)" +fi +if test x"$liblzma_excuse" != x ; then +echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)" +else +echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" +fi +echo "*******************************************************" + diff --git a/configure.ac b/configure.ac new file mode 100644 index 000000000..edd184154 --- /dev/null +++ b/configure.ac @@ -0,0 +1,2074 @@ +# -*- autoconf -*- + +# Process this file with autoconf to produce a configure script. + +# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# This configure.ac is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +dnl This configure script is complicated, because GRUB needs to deal +dnl with three potentially different types: +dnl +dnl build -- the environment for building GRUB +dnl host -- the environment for running utilities +dnl target -- the environment for running GRUB +dnl +dnl In addition, GRUB needs to deal with a platform specification +dnl which specifies the system running GRUB, such as firmware. +dnl This is necessary because the target type in autoconf does not +dnl describe such a system very well. +dnl +dnl The current strategy is to use variables with no prefix (such as +dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_" +dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables +dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are +dnl used for the target type. See INSTALL for full list of variables. + +AC_INIT([GRUB],[2.02],[bug-grub@gnu.org]) + +AC_CONFIG_AUX_DIR([build-aux]) + +# We don't want -g -O2 by default in CFLAGS +: ${CFLAGS=""} + +# Checks for build, host and target systems. +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +save_program_prefix="${program_prefix}" +AC_CANONICAL_TARGET +program_prefix="${save_program_prefix}" + +AM_INIT_AUTOMAKE([1.10.1]) +AC_PREREQ(2.60) +AC_CONFIG_SRCDIR([include/grub/dl.h]) +AC_CONFIG_HEADER([config-util.h]) + +# Program name transformations +AC_ARG_PROGRAM +grub_TRANSFORM([grub-bios-setup]) +grub_TRANSFORM([grub-editenv]) +grub_TRANSFORM([grub-install]) +grub_TRANSFORM([grub-mkconfig]) +grub_TRANSFORM([grub-mkfont]) +grub_TRANSFORM([grub-mkimage]) +grub_TRANSFORM([grub-glue-efi]) +grub_TRANSFORM([grub-mklayout]) +grub_TRANSFORM([grub-mkpasswd-pbkdf2]) +grub_TRANSFORM([grub-mkrelpath]) +grub_TRANSFORM([grub-mkrescue]) +grub_TRANSFORM([grub-probe]) +grub_TRANSFORM([grub-reboot]) +grub_TRANSFORM([grub-script-check]) +grub_TRANSFORM([grub-set-default]) +grub_TRANSFORM([grub-sparc64-setup]) +grub_TRANSFORM([grub-render-label]) +grub_TRANSFORM([grub-file]) + +# Optimization flag. Allow user to override. +if test "x$TARGET_CFLAGS" = x; then + TARGET_CFLAGS="$TARGET_CFLAGS -Os" +fi + +# Default HOST_CPPFLAGS +HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W" +HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1" + +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W" + +case "$target_cpu" in + i[[3456]]86) target_cpu=i386 ;; + amd64) target_cpu=x86_64 ;; + sparc) target_cpu=sparc64 ;; + mipsel|mips64el) + target_cpu=mipsel + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1" + ;; + mips|mips64) + target_cpu=mips + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1" + ;; + arm*) + target_cpu=arm + ;; + aarch64*) + target_cpu=arm64 + ;; +esac + +# Specify the platform (such as firmware). +AC_ARG_WITH([platform], + AS_HELP_STRING([--with-platform=PLATFORM], + [select the host platform [[guessed]]])) + +# Guess the platform if not specified. +if test "x$with_platform" = x; then + case "$target_cpu"-"$target_vendor" in + i386-apple) platform=efi ;; + i386-*) platform=pc ;; + x86_64-apple) platform=efi ;; + x86_64-*) platform=pc ;; + powerpc-*) platform=ieee1275 ;; + powerpc64-*) platform=ieee1275 ;; + powerpc64le-*) platform=ieee1275 ;; + sparc64-*) platform=ieee1275 ;; + mipsel-*) platform=loongson ;; + mips-*) platform=arc ;; + ia64-*) platform=efi ;; + arm-*) platform=uboot ;; + arm64-*) platform=efi ;; + *) + AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities]) + platform=none + ;; + esac +else + platform="$with_platform" +fi + +case "$target_cpu"-"$platform" in + x86_64-efi) ;; + x86_64-emu) ;; + x86_64-xen) ;; + x86_64-none) ;; + x86_64-*) target_cpu=i386 ;; + powerpc64-ieee1275) target_cpu=powerpc ;; + powerpc64le-ieee1275) target_cpu=powerpc ;; +esac + +# Check if the platform is supported, make final adjustments. +case "$target_cpu"-"$platform" in + i386-efi) ;; + x86_64-efi) ;; + i386-xen) ;; + x86_64-xen) ;; + i386-pc) ;; + i386-multiboot) ;; + i386-coreboot) ;; + i386-linuxbios) platform=coreboot ;; + i386-ieee1275) ;; + i386-qemu) ;; + powerpc-ieee1275) ;; + sparc64-ieee1275) ;; + ia64-efi) ;; + mips-qemu_mips) ;; + mips-qemu-mips) platform=qemu_mips;; + mips-arc) ;; + mipsel-arc) ;; + mipsel-qemu_mips) ;; + mipsel-qemu-mips) platform=qemu_mips;; + mipsel-yeeloong) platform=loongson ;; + mipsel-fuloong) platform=loongson ;; + mipsel-loongson) ;; + arm-uboot) ;; + arm-efi) ;; + arm64-efi) ;; + *-emu) ;; + *-none) ;; + *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;; +esac + +if test x$platform != xemu ; then + case "$target_cpu" in + i386 | powerpc) target_m32=1 ;; + x86_64 | sparc64) target_m64=1 ;; + esac +fi + +if test x"$target_cpu-$platform" = xsparc64-emu ; then + target_m64=1 +fi + +case "$target_os" in + windows* | mingw32*) target_os=cygwin ;; +esac + +# This normalizes the names, and creates a new variable ("host_kernel") +# while at it, since the mapping is not always 1:1 (e.g. different OSes +# using the same kernel type). +case "$host_os" in + gnu*) host_kernel=hurd ;; + linux*) host_kernel=linux ;; + freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;; + netbsd*) host_kernel=netbsd ;; + solaris*) host_kernel=illumos ;; + darwin*) host_kernel=xnu ;; + cygwin | windows* | mingw32*) host_kernel=windows ;; +esac + +case "$host_os" in + cygwin | windows* | mingw32*) have_exec=n ;; + aros*) have_exec=n ;; + *) have_exec=y;; +esac + +case "$platform" in + coreboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;; + multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;; + efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;; + xen) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;; + ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;; + uboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;; + qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;; + pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;; + emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;; + loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;; + qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;; + arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;; +esac +if test x${target_cpu} = xmipsel ; then + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +else + machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" +fi + +case "${target_cpu}-$platform" in + mips-arc) + TARGET_LINK_ADDR=0x88200000 + TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000 + ;; + mipsel-arc) + TARGET_LINK_ADDR=0x80700000 + TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000 + ;; + mips*-qemu_mips | mips*-loongson) + TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000 + ;; +esac + +AC_SUBST(TARGET_LINK_ADDR) +AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR) + +TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS" + +AC_SUBST(host_cpu) +AC_SUBST(host_os) +AC_SUBST(host_kernel) + +AC_SUBST(target_cpu) +AC_SUBST(platform) + +# Define default variables + +have_with_bootdir=n +AC_ARG_WITH([bootdir], + AS_HELP_STRING([--with-bootdir=DIR], + [set the name of /boot directory [[guessed]]]), + [have_with_bootdir=y], + [have_with_bootdir=n]) +if test x$have_with_bootdir = xy; then + bootdirname="$with_bootdir" +else + case "$host_os" in + netbsd* | openbsd*) + # Because /boot is used for the boot block in NetBSD and OpenBSD, + bootdirname='' ;; + *) bootdirname='boot' ;; + esac +fi + +AC_SUBST(bootdirname) +AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname", + [Default boot directory name]") + +AC_ARG_WITH([grubdir], + AS_HELP_STRING([--with-grubdir=DIR], + [set the name of grub directory [[guessed]]]), + [grubdirname="$with_grubdir"], + [grubdirname="$PACKAGE"]) + +AC_SUBST(grubdirname) +AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname", + [Default grub directory name]) + +# +# Checks for build programs. +# + +# Although cmp is listed in the GNU Coding Standards as a command which +# can used directly, OpenBSD lacks cmp in the default installation. +AC_CHECK_PROGS([CMP], [cmp]) +if test "x$CMP" = x; then + AC_MSG_ERROR([cmp is not found]) +fi + +AC_CHECK_PROGS([YACC], [bison]) +if test "x$YACC" = x; then + AC_MSG_ERROR([bison is not found]) +fi + +AC_PROG_RANLIB +AC_PROG_INSTALL +AC_PROG_AWK +AC_PROG_LEX +AC_PROG_YACC +AC_PROG_MAKE_SET +AC_PROG_MKDIR_P +AC_PROG_LN_S + +if test "x$LEX" = "x:"; then + AC_MSG_ERROR([flex is not found]) +else + version=`$LEX --version | $AWK '{ split($2,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'` + if test -n "$version" -a "$version" -ge 20535; then + : + else + AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above]) + fi +fi + +# These are not a "must". +AC_PATH_PROGS(MAKEINFO, makeinfo true) + +# +# Checks for host programs. +# + +AC_PROG_CC +gl_EARLY +AC_PROG_CXX +AM_PROG_CC_C_O +AM_PROG_AS + +# Must be GCC. +test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required]) + +AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no) + +AC_GNU_SOURCE +AM_GNU_GETTEXT([external]) +AC_SYS_LARGEFILE + +# Identify characteristics of the host architecture. +unset ac_cv_c_bigendian + +if test x"$target_cpu-$platform" = xsparc64-emu ; then + CFLAGS="$CFLAGS -m64" + HOST_CFLAGS="$HOST_CFLAGS -m64" +fi + +CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64" +HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64" + +AC_C_BIGENDIAN +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(long) + +case "$host_os" in + cygwin | windows* | mingw32*) + HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500" + CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500" + AC_CHECK_SIZEOF(TCHAR,,[#include ]) + ;; +esac + +case "$host_os" in + cygwin | windows* | mingw32* | aros*) + ;; + *) + AC_CHECK_SIZEOF(off_t) + test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);; +esac + +if test x$USE_NLS = xno; then + HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext" +fi + +if test "x$cross_compiling" = xyes; then + AC_MSG_WARN([cannot generate manual pages while cross compiling]) +else + AC_PATH_PROG(HELP2MAN, help2man) +fi + +# Check for functions and headers. +AC_CHECK_FUNCS(posix_memalign memalign getextmntent) +AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h) + +# glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation +# warning which causes compilation failure later with -Werror. So use -Werror here +# as well to force proper sys/sysmacros.h detection. +SAVED_CFLAGS="$CFLAGS" +CFLAGS="$HOST_CFLAGS -Werror" +AC_HEADER_MAJOR +CFLAGS="$SAVED_CFLAGS" + +AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default +#include +#include ]) + +AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default +#include +#include ]) + +# For opendisk() and getrawpartition() on NetBSD. +# Used in util/deviceiter.c and in util/hostdisk.c. +AC_CHECK_HEADER([util.h], [ + AC_CHECK_LIB([util], [opendisk], [ + LIBUTIL="-lutil" + AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used]) + ]) + AC_CHECK_LIB([util], [getrawpartition], [ + LIBUTIL="-lutil" + AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used]) + ]) +]) +AC_SUBST([LIBUTIL]) + +AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [ + SAVED_CFLAGS="$CFLAGS" + CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +int va_arg_func (int fixed, va_list args);]], [[]])], + [grub_cv_host_cc_wtrampolines=yes], + [grub_cv_host_cc_wtrampolines=no]) + CFLAGS="$SAVED_CFLAGS" +]) + +if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then + HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines" +fi + +# +# Check for host and build compilers. +# +HOST_CC=$CC +AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc]) +test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.]) +BUILD_CPP="$BUILD_CC -E" + +case "$build_os" in + haiku*) BUILD_LIBM= ;; + *) BUILD_LIBM=-lm ;; +esac + +dnl FIXME proper test seems to require too deep dive into Autoconf internals. +dnl For now just list known platforms that we support. + +case "$build_os" in + cygwin*|mingw32*|mingw64*) BUILD_EXEEXT=.exe ;; + *) BUILD_EXEEXT= ;; +esac +AC_SUBST(BUILD_EXEEXT) + +# For gnulib. +gl_INIT + +WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes" +EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2" + +HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align" + +AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [ + SAVED_CFLAGS="$CFLAGS" + grub_cv_cc_w_extra_flags= + for x in $EXTRA_WARN_FLAGS; do + CFLAGS="$HOST_CFLAGS $x -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0]) + if test x$flag = x1 ; then + grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x" + fi + done + CFLAGS="$SAVED_CFLAGS" +]) + +HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags" + +# +# Check for target programs. +# + +# Find tools for the target. +if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then + tmp_ac_tool_prefix="$ac_tool_prefix" + ac_tool_prefix=$target_alias- + + AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc], + [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])]) + AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy) + AC_CHECK_TOOL(TARGET_STRIP, strip) + AC_CHECK_TOOL(TARGET_NM, nm) + AC_CHECK_TOOL(TARGET_RANLIB, ranlib) + + ac_tool_prefix="$tmp_ac_tool_prefix" +else + if test "x$TARGET_CC" = x; then + TARGET_CC=$CC + fi + AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy) + AC_CHECK_TOOL(TARGET_STRIP, strip) + AC_CHECK_TOOL(TARGET_NM, nm) + AC_CHECK_TOOL(TARGET_RANLIB, ranlib) +fi + +AC_SUBST(HOST_CC) +AC_SUBST(BUILD_CC) +AC_SUBST(BUILD_CFLAGS) +AC_SUBST(BUILD_CPPFLAGS) +AC_SUBST(BUILD_LDFLAGS) +AC_SUBST(TARGET_CC) +AC_SUBST(TARGET_NM) +AC_SUBST(TARGET_RANLIB) +AC_SUBST(TARGET_STRIP) +AC_SUBST(TARGET_OBJCOPY) + +# Test the C compiler for the target environment. +tmp_CC="$CC" +tmp_CFLAGS="$CFLAGS" +tmp_LDFLAGS="$LDFLAGS" +tmp_CPPFLAGS="$CPPFLAGS" +tmp_LIBS="$LIBS" +CC="$TARGET_CC" +CFLAGS="$TARGET_CFLAGS" +CPPFLAGS="$TARGET_CPPFLAGS" +LDFLAGS="$TARGET_LDFLAGS" +LIBS="" + +# debug flags. +TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations" +TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g" + +if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then +TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align" +fi + +TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)" + +AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [ + LDFLAGS="$TARGET_LDFLAGS -nostdlib -static" + + grub_cv_target_cc_w_extra_flags= + for x in $EXTRA_WARN_FLAGS; do + CFLAGS="$TARGET_CFLAGS $x -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +asm (".globl start; start:"); +void __main (void); +void __main (void) {} +int main (void); +]], [[]])], [flag=1], [flag=0]) + if test x$flag = x1 ; then + grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x" + fi + done +]) + +TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags" + +AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang], +[ +CFLAGS="$TARGET_CFLAGS" +AC_COMPILE_IFELSE( +[AC_LANG_PROGRAM([], [[ +#ifdef __clang__ +#error "is clang" +#endif +]])], +[grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])]) + +if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then + AC_CACHE_CHECK([for options to get big-endian compilation], grub_cv_target_cc_big_endian, [ + grub_cv_target_cc_big_endian=no + for cand in "-target $target_cpu -Wl,-EB" "-target $target_cpu" \ + "-target $target_cpu-linux-gnu -Wl,-EB" "-target $target_cpu-linux-gnu" \ + "-EB" "-mbig-endian"; do + if test x"$grub_cv_target_cc_big_endian" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__) +#error still little endian +#endif +asm (".globl start; start:"); +asm (".globl _start; _start:"); +asm (".globl __start; __start:"); +void __main (void); +void __main (void) {} +int main (void); +]], [[]])], + [grub_cv_target_cc_big_endian="$cand"], []) + done + ]) + + if test x"$grub_cv_target_cc_big_endian" = xno ; then + AC_MSG_ERROR([could not force big-endian]) + fi + + skip_linkflags="$(echo "$grub_cv_target_cc_big_endian"|sed 's@-Wl,-EB@@')" + + TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags" + TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_big_endian" +elif test x$target_cpu = xmipsel; then + AC_CACHE_CHECK([for options to get little-endian compilation], grub_cv_target_cc_little_endian, [ + grub_cv_target_cc_little_endian=no + for cand in "-target $target_cpu -Wl,-EL" "-target $target_cpu" \ + "-target $target_cpu-linux-gnu -Wl,-EL" "-target $target_cpu-linux-gnu" \ + "-EL"; do + if test x"$grub_cv_target_cc_little_endian" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__) +#error still big endian +#endif +asm (".globl start; start:"); +asm (".globl _start; _start:"); +asm (".globl __start; __start:"); +void __main (void); +void __main (void) {} +int main (void); +]], [[]])], + [grub_cv_target_cc_little_endian="$cand"], []) + done + ]) + + if test x"$grub_cv_target_cc_little_endian" = xno ; then + AC_MSG_ERROR([could not force little-endian]) + fi + + skip_linkflags="$(echo "$grub_cv_target_cc_little_endian"|sed 's@-Wl,-EL@@')" + + TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags" + TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_little_endian" +fi + +# GRUB code is N32-compliant but it's experimental and we would prefer to +# avoid having too much variety when it doesn't result in any real improvement. +# Moreover N64 isn't supported. +if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then + AC_CACHE_CHECK([for options to force MIPS o32 ABI], grub_cv_target_cc_mips_o32_abi, [ + grub_cv_target_cc_mips_o32_abi=no + for arg in "" "-mabi=32" "-target $target_cpu -mabi=32" ; do + if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $arg -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32) +#error not o32 ABI +#endif +asm (".globl start; start:"); +asm (".globl _start; _start:"); +asm (".globl __start; __start:"); +void __main (void); +void __main (void) {} +int main (void); +]], [[]])], + [grub_cv_target_cc_mips_o32_abi="$arg"], []) + done + ]) + + if test x"$grub_cv_target_cc_mips_o32_abi" = xno ; then + AC_MSG_ERROR([could not force MIPS o32 ABI]) + fi + + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mips_o32_abi" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_mips_o32_abi" +fi + +AC_CACHE_CHECK([for options to compile assembly], [grub_cv_cc_target_asm_compile], [ +test_program= +case "x$target_cpu-$platform" in + xmips-* | xmipsel-*) + test_program=mips + ;; + xi386-pc) + test_program=i386-pc + ;; + xi386-* | xx86_64-*) + test_program=i386 + ;; + xpowerpc-* | xsparc64-* | xarm-*) + test_program=$target_cpu + ;; +esac +if test x"$test_program" = x ; then + grub_cv_cc_target_asm_compile= +else + found=no + for arg in "" "-no-integrated-as"; do + cmdline="$TARGET_CC -c -o /dev/null $TARGET_CCASFLAGS $arg $TARGET_CPPFLAGS $srcdir/asm-tests/$test_program.S" + echo "Running $cmdline" >&AS_MESSAGE_LOG_FD + if $cmdline >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then + grub_cv_cc_target_asm_compile="$arg" + found=yes + break + fi + done + if test x"$found" = xno ; then + AC_MSG_ERROR([could not compile assembly]) + fi +fi +]) + +TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_cc_target_asm_compile" + +if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then + TARGET_CFLAGS="$TARGET_CFLAGS -march=i386" +fi + +if test "x$target_m32" = x1; then + # Force 32-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m32" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m32" + TARGET_MODULE_FORMAT="elf32" +fi + +if test "x$target_m64" = x1; then + # Force 64-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m64" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64" + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m64" + TARGET_MODULE_FORMAT="elf64" +fi + +if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then + TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3" +fi + +# on mips redirect cache flushing function to non-existant one. +if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then + AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [ + CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mflush_func=yes], + [grub_cv_cc_mflush_func=no]) + ]) + + if test "x$grub_cv_cc_mflush_func" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring" + fi +fi + + +# Force no alignment to save space on i386. +if test "x$target_cpu" = xi386; then + AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [ + CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_falign_loop=yes], + [grub_cv_cc_falign_loop=no]) + ]) + + AC_CACHE_CHECK([whether -malign-loops works], [grub_cv_cc_malign_loop], [ + CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_malign_loop=yes], + [grub_cv_cc_malign_loop=no]) + ]) + + if test "x$grub_cv_cc_falign_loop" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" + elif test "x$grub_cv_cc_malign_loop" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" + fi +fi + +AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [ + CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_freg_struct_return=yes], + [grub_cv_cc_freg_struct_return=no]) +]) + +if test "x$grub_cv_cc_freg_struct_return" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return" +fi + +if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then + # Some toolchains enable these features by default, but they need + # registers that aren't set up properly in GRUB. + TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow" +fi + +# GRUB doesn't use float or doubles at all. Yet some toolchains may decide +# that floats are a good fit to run instead of what's written in the code. +# Given that floating point unit is disabled (if present to begin with) +# when GRUB is running which may result in various hard crashes. +if test x"$platform" != xemu ; then + AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [ + grub_cv_target_cc_soft_float=no + if test "x$target_cpu" = xarm64; then + CFLAGS="$TARGET_CFLAGS -mgeneral-regs-only -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_soft_float="-mgeneral-regs-only"], []) + fi + if test "x$target_cpu" = xia64; then + CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], []) + fi + for cand in "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \ + "-Xclang -msoft-float -Xclang -no-implicit-float" \ + "-Xclang -msoft-float" "-msoft-float"; do + if test x"$grub_cv_target_cc_soft_float" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_soft_float="$cand"], []) + done + ]) + + if test x"$grub_cv_target_cc_soft_float" = xno ; then + AC_MSG_ERROR([could not force soft-float]) + fi + + case x"$grub_cv_target_cc_soft_float" in + x*"-Xclang"*) + # A trick so that clang doesn't see it on link stаge + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float" + ;; + *) + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float" + ;; + esac + TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float" + +fi + +if test x"$target_cpu" = xsparc64 ; then + AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [ + grub_cv_target_cc_mno_app_regs=no + for cand in "-mllvm -sparc-reserve-app-registers" \ + "-mno-app-regs"; do + if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + CPPFLAGS="$TARGET_CPPFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_mno_app_regs="$cand"], []) + done + ]) + + if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then + AC_MSG_ERROR([could not reserve application registers]) + fi + if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then + # A trick so that clang doesn't see it on link stаge + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs" + else + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs" + fi + + AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [ + grub_cv_target_cc_mno_relax=no + for cand in "-mno-relax" "-Wl,--no-relax"; do + if test x"$grub_cv_target_cc_mno_relax" != xno ; then + break + fi + LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static" + CFLAGS="$TARGET_CFLAGS -Werror" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + asm (".globl start; start:"); + void __main (void); + void __main (void) {} + int main (void); + ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], []) + done + ]) + LDFLAGS="$TARGET_LDFLAGS" + CFLAGS="$TARGET_CFLAGS" + + if test x"$grub_cv_target_cc_mno_relax" = xno ; then + AC_MSG_ERROR([could not find no-relax options]) + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax" +fi + +# By default, GCC 4.4 generates .eh_frame sections containing unwind +# information in some cases where it previously did not. GRUB doesn't need +# these and they just use up vital space. Restore the old compiler +# behaviour. +AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [ + CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_fno_dwarf2_cfi_asm=yes], + [grub_cv_cc_fno_dwarf2_cfi_asm=no]) +]) + +if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm" +fi + +if test x"$target_os" = xcygwin; then + AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [ + CFLAGS="$TARGET_CFLAGS -fno-reorder-functions" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_no_reorder_functions=yes], + [grub_cv_cc_no_reorder_functions=no]) + ]) +fi + +if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions" +fi + +AC_CACHE_CHECK([whether -mno-stack-arg-probe works], [grub_cv_cc_mno_stack_arg_probe], [ + CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mno_stack_arg_probe=yes], + [grub_cv_cc_mno_stack_arg_probe=no]) +]) + +if test "x$grub_cv_cc_mno_stack_arg_probe" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" +fi + + +# By default, GCC 4.6 generates .eh_frame sections containing unwind +# information in some cases where it previously did not. GRUB doesn't need +# these and they just use up vital space. Restore the old compiler +# behaviour. +AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [ + CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_fno_asynchronous_unwind_tables=yes], + [grub_cv_cc_fno_asynchronous_unwind_tables=no]) +]) + +if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables" +fi + +AC_CACHE_CHECK([whether -fno-unwind-tables works], [grub_cv_cc_fno_unwind_tables], [ + CFLAGS="$TARGET_CFLAGS -fno-unwind-tables" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_fno_unwind_tables=yes], + [grub_cv_cc_fno_unwind_tables=no]) +]) + +if test "x$grub_cv_cc_fno_unwind_tables" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-unwind-tables" +fi + + +CFLAGS="$TARGET_CFLAGS" + + +if test x"$platform" = xemu ; then + TARGET_OBJ2ELF= + grub_cv_target_cc_link_format= + case "$host_os" in + *darwin* | *mac*) + grub_cv_target_cc_link_format="-arch,${target_cpu}" + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + ;; + *windows* | *cygwin* | *mingw*) + if test x${target_cpu} = xi386 ; then + grub_cv_target_cc_link_format=-mi386pe + TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)' + fi + if test x${target_cpu} = xx86_64 ; then + grub_cv_target_cc_link_format=-mi386pep + TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)' + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + ;; + esac +elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then + AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [ + grub_cv_target_cc_link_format=unknown + for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do + if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then + continue + fi + if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then + continue + fi + CFLAGS="$TARGET_CFLAGS" + LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + asm (".globl start; start:"); + asm (".globl _start; _start:"); + asm (".globl __start; __start:"); + void __main (void); + void __main (void) {} + ]], [[]])], [flag=1], [flag=0]) + if test x"$flag" = x1; then + grub_cv_target_cc_link_format="$format" + break + fi + done]) + if test x"$grub_cv_target_cc_link_format" = xunknown; then + AC_MSG_ERROR([no suitable link format found]) + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then + TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)' + fi + if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then + TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)' + fi +fi + +if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then + TARGET_APPLE_LINKER=1 + AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], []) + if test "x$TARGET_OBJCONV" = x ; then + AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.]) + fi + if test "x$TARGET_OBJCONV" = x ; then + AC_MSG_ERROR([objconv not found which is required when building with apple compiler]) + fi + TARGET_IMG_LDSCRIPT= + TARGET_IMG_CFLAGS="-static" + TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20' + TARGET_IMG_BASE_LDOPT="-Wl,-image_base" + TARGET_LDFLAGS_OLDMAGIC="" +elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then + TARGET_APPLE_LINKER=0 + TARGET_LDFLAGS_OLDMAGIC="-Wl,-N" + TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc" + TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" + TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc" + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" + TARGET_IMG_CFLAGS= +else + TARGET_APPLE_LINKER=0 + TARGET_LDFLAGS_OLDMAGIC="-Wl,-N" + TARGET_IMG_LDSCRIPT= + TARGET_IMG_LDFLAGS='-Wl,-N' + TARGET_IMG_LDFLAGS_AC='-Wl,-N' + TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" + TARGET_IMG_CFLAGS= +fi + +CFLAGS="$TARGET_CFLAGS" + +AC_ARG_ENABLE([efiemu], + [AS_HELP_STRING([--enable-efiemu], + [build and install the efiemu runtimes (default=guessed)])]) +if test x"$enable_efiemu" = xno ; then + efiemu_excuse="explicitly disabled" +fi + +if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then + efiemu_excuse="not available on cygwin" +fi +if test x"$target_cpu" != xi386 ; then + efiemu_excuse="only available on i386" +fi +if test x"$platform" = xefi ; then + efiemu_excuse="not available on efi" +fi + +if test x"$efiemu_excuse" = x ; then + AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ + CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_efiemu=yes], + [grub_cv_cc_efiemu=no]) + ]) + if test x$grub_cv_cc_efiemu = xno; then + efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" + fi +fi +if test x"$efiemu_excuse" = x ; then + AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [ + grub_cv_target_cc_efiemu64_link_format=unknown + for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do + CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone" + LDFLAGS="-m64 -Wl,$format -nostdlib -static" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + asm (".globl start; start:"); + asm (".globl _start; _start:"); + asm (".globl __start; __start:"); + void __main (void); + void __main (void) {} + ]], [[]])], [flag=1], [flag=0]) + if test x"$flag" = x1; then + grub_cv_target_cc_efiemu64_link_format="$format" + break + fi + done]) + if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then + efiemu_excuse="no suitable link format for efiemu64 found" + else + EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format" + fi +fi +if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then + AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)]) +fi +if test x"$efiemu_excuse" = x ; then +enable_efiemu=yes +else +enable_efiemu=no +fi +AC_SUBST([enable_efiemu]) +AC_SUBST([EFIEMU64_LINK_FORMAT]) + +CFLAGS="$TARGET_CFLAGS" + +AC_SUBST(TARGET_LDFLAGS_OLDMAGIC) + + +LDFLAGS="$TARGET_LDFLAGS" + +if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then + # Use large model to support 4G memory + AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ + CFLAGS="$TARGET_CFLAGS -mcmodel=large" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mcmodel=yes], + [grub_cv_cc_mcmodel=no]) + ]) + if test "x$grub_cv_cc_mcmodel" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" + elif test "$target_cpu" = sparc64; then + TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany" + fi +fi + +if test "$target_cpu"-"$platform" = x86_64-efi; then + # EFI writes to stack below %rsp, we must not use the red zone + AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [ + CFLAGS="$TARGET_CFLAGS -mno-red-zone" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_no_red_zone=yes], + [grub_cv_cc_no_red_zone=no]) + ]) + if test "x$grub_cv_cc_no_red_zone" = xno; then + AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc]) + fi + + TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone" +fi + +if test "x$target_cpu" = xarm; then + AC_CACHE_CHECK([for options to disable movt and movw], grub_cv_target_cc_mno_movt, [ + grub_cv_target_cc_mno_movt=no + for cand in "-mno-movt" \ + "-mllvm -arm-use-movt=0"; do + if test x"$grub_cv_target_cc_mno_movt" != xno ; then + break + fi + CFLAGS="$TARGET_CFLAGS $cand -Werror" + CPPFLAGS="$TARGET_CPPFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_mno_movt="$cand"], []) + done + ]) + + if test x"$grub_cv_target_cc_mno_movt" != xno ; then + # A trick so that clang doesn't see it on link stage + TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt" + fi + AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [ + CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_cc_mthumb_interwork=yes], + [grub_cv_cc_mthumb_interwork=no]) + ]) + if test "x$grub_cv_cc_mthumb_interwork" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork" + # Clang defaults to thumb interworking + elif test "x$grub_cv_cc_target_clang" = xno ; then + AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork]) + fi +fi + +AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [ + CFLAGS="$TARGET_CFLAGS -Qn -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], + [grub_cv_target_cc_qn=yes], + [grub_cv_target_cc_qn=no])]) +if test "x$grub_cv_target_cc_qn" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -Qn" +fi + +# +# Compiler features. +# + +CFLAGS="$TARGET_CFLAGS" + +# Position independent executable. +grub_CHECK_PIE +grub_CHECK_NO_PIE +grub_CHECK_NO_PIE_ONEWORD +grub_CHECK_LINK_PIE +[# Need that, because some distributions ship compilers that include +# `-fPIE' or '-fpie' and '-pie' in the default specs. +if [ x"$pie_possible" = xyes ]; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE -fno-pie" +fi + +if [ x"$link_nopie_needed" = xyes ] || [ x"$pie_possible" = xyes ]; then + if [ x"$nopie_possible" = xyes ]; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -no-pie" + fi + if [ x"$nopie_oneword_possible" = xyes ]; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -nopie" + fi +fi] + +CFLAGS="$TARGET_CFLAGS" +LDFLAGS="$TARGET_LDFLAGS" + +# Position independent executable. +grub_CHECK_PIC +[# On most platforms we don't want PIC as it only makes relocations harder +# and code less efficient. On mips we want to have one got table per module +# and reload $gp in every function. +# GCC implements it using symbol __gnu_local_gp in non-PIC as well. +# However with clang we need PIC for this reloading to happen. +# With arm64 we need relocations that are in some way representable in +# PE as we need to support arm64-efi. Without -fPIC clang generates +# movk's which aren't representable. +# Since default varies across dictributions use either -fPIC or -fno-PIC +# explicitly. +if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel || test x$target_cpu = xarm64 ) && test "x$grub_cv_cc_target_clang" = xyes ; then + TARGET_CFLAGS="$TARGET_CFLAGS -fPIC" +elif [ x"$pic_possible" = xyes ]; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC" +fi] + +CFLAGS="$TARGET_CFLAGS" + +# Smashing stack protector. +grub_CHECK_STACK_PROTECTOR +# Need that, because some distributions ship compilers that include +# `-fstack-protector' in the default specs. +if test "x$ssp_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector" +fi + +CFLAGS="$TARGET_CFLAGS" + +grub_CHECK_STACK_ARG_PROBE +# Cygwin's GCC uses alloca() to probe the stackframe on static +# stack allocations above some threshold. +if test x"$sap_possible" = xyes; then + TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" +fi + +CFLAGS="$TARGET_CFLAGS" + +# -mno-unaligned-access -mstrict-align +if test "$target_cpu" = arm; then + AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [ + grub_cv_target_cc_strict_align= + for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do + CFLAGS="$TARGET_CFLAGS $arg -Werror" + LDFLAGS="$TARGET_LDFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0]) + if test x"$flag" = x1; then + grub_cv_target_cc_strict_align="$arg" + break + fi + done]) + + TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align" + if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then + TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments" + fi + AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned], + [CFLAGS="$TARGET_CFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[ +#ifdef __ARM_FEATURE_UNALIGNED +#error "unaligned" +#endif + ]])], + [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])]) + if test x$grub_cv_cc_target_emits_unaligned = xyes; then + AC_MSG_ERROR([compiler generates unaligned accesses]) + fi +fi + +# Set them to their new values for the tests below. +CC="$TARGET_CC" +if test x"$platform" = xemu ; then +CFLAGS="$TARGET_CFLAGS -Wno-error" +elif test "x$TARGET_APPLE_LINKER" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error" +else +CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error" +fi +CPPFLAGS="$TARGET_CPPFLAGS" + +grub_ASM_USCORE +if test "x$TARGET_APPLE_LINKER" = x0 && test x"$platform" != xemu; then +if test x$grub_cv_asm_uscore = xyes; then +DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main" +else +DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main" +fi +CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM" +fi + +# Check for libgcc symbols +if test x"$platform" = xemu; then +AC_CHECK_FUNCS(__udivsi3 __umodsi3 __divsi3 __modsi3 __divdi3 __moddi3 __udivdi3 __umoddi3 __ctzdi2 __ctzsi2 __aeabi_uidiv __aeabi_uidivmod __aeabi_idiv __aeabi_idivmod __aeabi_ulcmp __muldi3 __aeabi_lmul __aeabi_memcpy __aeabi_memcpy4 __aeabi_memcpy8 __aeabi_memclr __aeabi_memclr4 __aeabi_memclr8 __aeabi_memset __aeabi_lasr __aeabi_llsl __aeabi_llsr _restgpr_14_x __ucmpdi2 __ashldi3 __ashrdi3 __lshrdi3 __bswapsi2 __bswapdi2 __bzero __register_frame_info __deregister_frame_info ___chkstk_ms __chkstk_ms) +fi + +if test "x$TARGET_APPLE_LINKER" = x1 ; then +CFLAGS="$TARGET_CFLAGS -nostdlib -static" +else +CFLAGS="$TARGET_CFLAGS -nostdlib" +fi +LIBS="" + +# Defined in aclocal.m4. +grub_PROG_TARGET_CC +if test "x$TARGET_APPLE_LINKER" != x1 ; then +grub_PROG_OBJCOPY_ABSOLUTE +fi +grub_PROG_LD_BUILD_ID_NONE +if test "x$target_cpu" = xi386; then + if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then + if test ! -z "$TARGET_IMG_LDSCRIPT"; then + # Check symbols provided by linker script. + CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000" + fi + grub_CHECK_BSS_START_SYMBOL + grub_CHECK_END_SYMBOL + fi + CFLAGS="$TARGET_CFLAGS" +fi + +grub_PROG_NM_WORKS +grub_PROG_NM_MINUS_P +grub_PROG_NM_DEFINED_ONLY +AC_SUBST(TARGET_NMFLAGS_MINUS_P) +AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY) + +if test "$platform" != emu; then +AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [ + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +#include +int va_arg_func (int fixed, va_list args);]], [[]])], + [grub_cv_cc_isystem=yes], + [grub_cv_cc_isystem=no]) + CPPFLAGS="$SAVED_CPPFLAGS" +]) + +if test x"$grub_cv_cc_isystem" = xyes ; then + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`" +fi +fi + +AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [ + CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include +int va_arg_func (int fixed, va_list args);]], [[]])], + [grub_cv_cc_wtrampolines=yes], + [grub_cv_cc_wtrampolines=no]) +]) + +if test x"$grub_cv_cc_wtrampolines" = xyes ; then + TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines" +fi + +# Restore the flags. +CC="$tmp_CC" +CFLAGS="$tmp_CFLAGS" +CPPFLAGS="$tmp_CPPFLAGS" +LDFLAGS="$tmp_LDFLAGS" +LIBS="$tmp_LIBS" + +# +# Check for options. +# + +# Memory manager debugging. +AC_ARG_ENABLE([mm-debug], + AS_HELP_STRING([--enable-mm-debug], + [include memory manager debugging]), + [AC_DEFINE([MM_DEBUG], [1], + [Define to 1 if you enable memory manager debugging.])]) + +AC_ARG_ENABLE([cache-stats], + AS_HELP_STRING([--enable-cache-stats], + [enable disk cache statistics collection])) + +if test x$enable_cache_stats = xyes; then + DISK_CACHE_STATS=1 +else + DISK_CACHE_STATS=0 +fi +AC_SUBST([DISK_CACHE_STATS]) + +AC_ARG_ENABLE([boot-time], + AS_HELP_STRING([--enable-boot-time], + [enable boot time statistics collection])) + +if test x$enable_boot_time = xyes; then + BOOT_TIME_STATS=1 +else + BOOT_TIME_STATS=0 +fi +AC_SUBST([BOOT_TIME_STATS]) + +AC_ARG_ENABLE([grub-emu-sdl], + [AS_HELP_STRING([--enable-grub-emu-sdl], + [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])]) + +AC_ARG_ENABLE([grub-emu-pci], + [AS_HELP_STRING([--enable-grub-emu-pci], + [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])]) + +if test "$platform" = emu; then + +if test x"$enable_grub_emu_sdl" = xno ; then + grub_emu_sdl_excuse="explicitly disabled" +fi +[if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for libSDL libraries.] +AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"], + [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]]) + AC_SUBST([LIBSDL]) +[fi] + +[if [ x"$grub_emu_sdl_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([SDL/SDL.h], [], + [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]]) +[fi] + +if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then + AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)]) +fi +if test x"$grub_emu_sdl_excuse" = x ; then +enable_grub_emu_sdl=yes +else +enable_grub_emu_sdl=no +fi + +if test x"$enable_grub_emu_pci" != xyes ; then + grub_emu_pci_excuse="not enabled" +fi + +[if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for libpci libraries.] + AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"], + [grub_emu_pci_excuse=["need libpciaccess library"]]) + AC_SUBST([LIBPCIACCESS]) +[fi] +[if [ x"$grub_emu_pci_excuse" = x ]; then + # Check for headers.] + AC_CHECK_HEADERS([pciaccess.h], [], + [grub_emu_pci_excuse=["need libpciaccess headers"]]) +[fi] + +if test x"$grub_emu_pci_excuse" = x ; then +enable_grub_emu_pci=yes +else + +enable_grub_emu_pci=no +fi + +AC_SUBST([enable_grub_emu_sdl]) +AC_SUBST([enable_grub_emu_pci]) + +else + +# Ignore --enable-emu-* if platform is not emu +enable_grub_emu_sdl=no +enable_grub_emu_pci=no +fi + +AC_ARG_ENABLE([grub-mkfont], + [AS_HELP_STRING([--enable-grub-mkfont], + [build and install the `grub-mkfont' utility (default=guessed)])]) +if test x"$enable_grub_mkfont" = xno ; then + grub_mkfont_excuse="explicitly disabled" +fi + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + AC_CHECK_TOOLS([FREETYPE], [freetype-config]) + if test "x$FREETYPE" = x ; then + grub_mkfont_excuse=["need freetype2 library"] + fi +fi + +unset ac_cv_header_ft2build_h + +if test x"$grub_mkfont_excuse" = x ; then + # Check for freetype libraries. + freetype_cflags=`$FREETYPE --cflags` + freetype_libs=`$FREETYPE --libs` + SAVED_CPPFLAGS="$CPPFLAGS" + SAVED_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $freetype_cflags" + LIBS="$LIBS $freetype_libs" + AC_CHECK_HEADERS([ft2build.h], [], + [grub_mkfont_excuse=["need freetype2 headers"]]) + AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]]) + CPPFLAGS="$SAVED_CPPFLAGS" + LIBS="$SAVED_LIBS" +fi + +if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then + AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)]) +fi +if test x"$grub_mkfont_excuse" = x ; then +enable_grub_mkfont=yes +else +enable_grub_mkfont=no +fi +AC_SUBST([enable_grub_mkfont]) +AC_SUBST([freetype_cflags]) +AC_SUBST([freetype_libs]) + +SAVED_CC="$CC" +SAVED_CPP="$CPP" +SAVED_CFLAGS="$CFLAGS" +SAVED_CPPFLAGS="$CPPFLAGS" +SAVED_LDFLAGS="$LDFLAGS" +CC="$BUILD_CC" +CPP="$BUILD_CPP" +CFLAGS="$BUILD_CFLAGS" +CPPFLAGS="$BUILD_CPPFLAGS" +LDFLAGS="$BUILD_LDFAGS" + +unset ac_cv_c_bigendian +unset ac_cv_header_ft2build_h + +AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)]) +AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)]) +AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err]) + +if test x$BUILD_WORDS_BIGENDIAN = xerr ; then + AC_MSG_ERROR([couldnt determine build endianness]) +fi + +AC_SUBST([BUILD_SIZEOF_LONG]) +AC_SUBST([BUILD_SIZEOF_VOID_P]) +AC_SUBST([BUILD_WORDS_BIGENDIAN]) + +if test x"$grub_build_mkfont_excuse" = x ; then + # Check for freetype libraries. + AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config]) + if test "x$BUILD_FREETYPE" = x ; then + grub_build_mkfont_excuse=["need freetype2 library"] + fi +fi + +if test x"$grub_build_mkfont_excuse" = x ; then + # Check for freetype libraries. + build_freetype_cflags=`$BUILD_FREETYPE --cflags` + build_freetype_libs=`$BUILD_FREETYPE --libs` + SAVED_CPPFLAGS_2="$CPPFLAGS" + SAVED_LIBS="$LIBS" + CPPFLAGS="$CPPFLAGS $build_freetype_cflags" + LIBS="$LIBS $build_freetype_libs" + AC_CHECK_HEADERS([ft2build.h], [], + [grub_build_mkfont_excuse=["need freetype2 headers"]]) + AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]]) + LIBS="$SAVED_LIBS" + CPPFLAGS="$SAVED_CPPFLAGS_2" +fi + +if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then + AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)]) +fi +if test x"$grub_build_mkfont_excuse" = x ; then + enable_build_grub_mkfont=yes +else + enable_build_grub_mkfont=no +fi +if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then + if test x"$grub_build_mkfont_excuse" = x ; then + AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont]) + else + AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont ($grub_build_mkfont_excuse)]) + fi +fi + +AC_SUBST([build_freetype_cflags]) +AC_SUBST([build_freetype_libs]) + +CC="$SAVED_CC" +CPP="$SAVED_CPP" +CFLAGS="$SAVED_CFLAGS" +CPPFLAGS="$SAVED_CPPFLAGS" +LDFLAGS="$SAVED_LDFLAGS" + + +DJVU_FONT_SOURCE= + +starfield_excuse= + +AC_ARG_ENABLE([grub-themes], + [AS_HELP_STRING([--enable-grub-themes], + [build and install GRUB themes (default=guessed)])]) +if test x"$enable_grub_themes" = xno ; then + starfield_excuse="explicitly disabled" +fi + +if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then + starfield_excuse="No build-time grub-mkfont" +fi + +if test x"$starfield_excuse" = x; then + for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do + if test -f "$dir/DejaVuSans.$ext"; then + DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext" + break 2 + fi + done + done + + if test "x$DJVU_FONT_SOURCE" = x; then + starfield_excuse="No DejaVu found" + fi +fi + +if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then + AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)]) +fi + +AC_SUBST([DJVU_FONT_SOURCE]) + +FONT_SOURCE= + +for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do + for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do + if test -f "$dir/unifont.$ext"; then + md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')" + # PCF and BDF from version 6.3 isn't hanled properly by libfreetype. + if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then + continue + fi + FONT_SOURCE="$dir/unifont.$ext" + break 2 + fi + done +done + +if test x"$enable_build_grub_mkfont" = xno ; then + FONT_SOURCE= +fi + +if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then + if test x"$grub_build_mkfont_excuse" = x ; then + AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont]) + else + AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)]) + fi +fi + +AC_SUBST([FONT_SOURCE]) + +if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then + grub_build_mkfont_excuse="no fonts" +fi + + +AC_ARG_ENABLE([grub-mount], + [AS_HELP_STRING([--enable-grub-mount], + [build and install the `grub-mount' utility (default=guessed)])]) +if test x"$enable_grub_mount" = xno ; then + grub_mount_excuse="explicitly disabled" +fi + +if test x"$grub_mount_excuse" = x ; then + AC_CHECK_LIB([fuse], [fuse_main_real], [], + [grub_mount_excuse="need FUSE library"]) +fi + +if test x"$grub_mount_excuse" = x ; then + # Check for fuse headers. + SAVED_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26" + AC_CHECK_HEADERS([fuse/fuse.h], [], + [grub_mount_excuse=["need FUSE headers"]]) + CPPFLAGS="$SAVED_CPPFLAGS" +fi + +if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then + AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)]) +fi +if test x"$grub_mount_excuse" = x ; then +enable_grub_mount=yes +else +enable_grub_mount=no +fi +AC_SUBST([enable_grub_mount]) + +AC_ARG_ENABLE([device-mapper], + [AS_HELP_STRING([--enable-device-mapper], + [enable Linux device-mapper support (default=guessed)])]) +if test x"$enable_device_mapper" = xno ; then + device_mapper_excuse="explicitly disabled" +fi + +if test x"$device_mapper_excuse" = x ; then + # Check for device-mapper header. + AC_CHECK_HEADER([libdevmapper.h], [], + [device_mapper_excuse="need libdevmapper header"]) +fi + +if test x"$device_mapper_excuse" = x ; then + # Check for device-mapper library. + AC_CHECK_LIB([devmapper], [dm_task_create], [], + [device_mapper_excuse="need devmapper library"]) +fi + +if test x"$device_mapper_excuse" = x ; then + # Check for device-mapper library. + AC_CHECK_LIB([devmapper], [dm_log_with_errno_init], + [], + [device_mapper_excuse="need devmapper library"]) +fi + +if test x"$device_mapper_excuse" = x ; then + LIBDEVMAPPER="-ldevmapper" + AC_DEFINE([HAVE_DEVICE_MAPPER], [1], + [Define to 1 if you have the devmapper library.]) +fi + +AC_SUBST([LIBDEVMAPPER]) + +LIBGEOM= +if test x$host_kernel = xkfreebsd; then + AC_CHECK_LIB([geom], [geom_gettree], [], + [AC_MSG_ERROR([Your platform requires libgeom])]) + LIBGEOM="-lgeom" +fi + +AC_SUBST([LIBGEOM]) + +AC_ARG_ENABLE([liblzma], + [AS_HELP_STRING([--enable-liblzma], + [enable liblzma integration (default=guessed)])]) +if test x"$enable_liblzma" = xno ; then + liblzma_excuse="explicitly disabled" +fi + +if test x"$liblzma_excuse" = x ; then +AC_CHECK_LIB([lzma], [lzma_code], + [],[liblzma_excuse="need lzma library"]) +fi +if test x"$liblzma_excuse" = x ; then +AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"]) +fi + +if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then + AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)]) +fi + + +if test x"$liblzma_excuse" = x ; then + LIBLZMA="-llzma" + AC_DEFINE([USE_LIBLZMA], [1], + [Define to 1 if you have the LZMA library.]) +fi + +AC_SUBST([LIBLZMA]) + +AC_ARG_ENABLE([libzfs], + [AS_HELP_STRING([--enable-libzfs], + [enable libzfs integration (default=guessed)])]) +if test x"$enable_libzfs" = xno ; then + libzfs_excuse="explicitly disabled" +fi + +if test x"$libzfs_excuse" = x ; then + # Only check for system headers if libzfs support has not been disabled. + AC_CHECK_HEADERS(libzfs.h libnvpair.h) +fi + +if test x"$libzfs_excuse" = x ; then + AC_CHECK_LIB([zfs], [libzfs_init], + [], + [libzfs_excuse="need zfs library"]) +fi + +if test x"$libzfs_excuse" = x ; then + AC_CHECK_LIB([nvpair], [nvlist_lookup_string], + [], + [libzfs_excuse="need nvpair library"]) +fi + +if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then + AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)]) +fi + +if test x"$libzfs_excuse" = x ; then + # We need both libzfs and libnvpair for a successful build. + LIBZFS="-lzfs" + AC_DEFINE([HAVE_LIBZFS], [1], + [Define to 1 if you have the ZFS library.]) + LIBNVPAIR="-lnvpair" + AC_DEFINE([HAVE_LIBNVPAIR], [1], + [Define to 1 if you have the NVPAIR library.]) +fi + +AC_SUBST([LIBZFS]) +AC_SUBST([LIBNVPAIR]) + +LIBS="" + +AC_SUBST([FONT_SOURCE]) +AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu], + [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)]) + +AC_SUBST(HAVE_ASM_USCORE) +AC_SUBST(BSS_START_SYMBOL) +AC_SUBST(END_SYMBOL) +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--disable-werror], + [do not use -Werror when building GRUB])]) +if test x"$enable_werror" != xno ; then + TARGET_CFLAGS="$TARGET_CFLAGS -Werror" + HOST_CFLAGS="$HOST_CFLAGS -Werror" +fi + +TARGET_CPP="$TARGET_CC -E" +TARGET_CCAS=$TARGET_CC + +# Includes which include make-time substitutions. They must come last +# as to avoid executing top_builddir in shell. +HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include" +TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include" + +GRUB_TARGET_CPU="${target_cpu}" +GRUB_PLATFORM="${platform}" + +AC_SUBST(GRUB_TARGET_CPU) +AC_SUBST(GRUB_PLATFORM) + +AC_SUBST(TARGET_OBJCONV) +AC_SUBST(TARGET_CPP) +AC_SUBST(TARGET_CCAS) +AC_SUBST(TARGET_OBJ2ELF) +AC_SUBST(TARGET_MODULE_FORMAT) +AC_SUBST(TARGET_CC_VERSION) + +AC_SUBST(TARGET_CFLAGS) +AC_SUBST(TARGET_LDFLAGS) +AC_SUBST(TARGET_CPPFLAGS) +AC_SUBST(TARGET_CCASFLAGS) + +AC_SUBST(TARGET_IMG_LDFLAGS) +AC_SUBST(TARGET_IMG_CFLAGS) +AC_SUBST(TARGET_IMG_BASE_LDOPT) +AC_SUBST(TARGET_APPLE_LINKER) + +AC_SUBST(HOST_CFLAGS) +AC_SUBST(HOST_LDFLAGS) +AC_SUBST(HOST_CPPFLAGS) +AC_SUBST(HOST_CCASFLAGS) + +AC_SUBST(BUILD_LIBM) + +# +# Automake conditionals +# + +AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone]) +AM_CONDITIONAL([COND_emu], [test x$platform = xemu]) +AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc]) +AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi]) +AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi]) +AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu]) +AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot]) +AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot]) +AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi]) +AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen]) +AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen]) +AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson]) +AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips]) +AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc]) +AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu]) +AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel]) +AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel]) +AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips]) +AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ]) +AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot]) +AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi]) +AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ]) +AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi]) + +AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd]) +AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux]) +AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd]) +AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows]) +AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd]) +AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu]) +AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos]) + +AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x]) +AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes]) +AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes]) +AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) +AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes]) +AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) +if test x$FONT_SOURCE != x ; then + HAVE_FONT_SOURCE=1 +else + HAVE_FONT_SOURCE=0 +fi +AC_SUBST(HAVE_FONT_SOURCE) +AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1]) +AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) +AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1]) +AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1]) + +AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes]) + +AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1]) +AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x]) +AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy]) + +test "x$prefix" = xNONE && prefix="$ac_default_prefix" +test "x$exec_prefix" = xNONE && exec_prefix="${prefix}" +datarootdir="$(eval echo "$datarootdir")" +grub_libdir="$(eval echo "$libdir")" +grub_localedir="$(eval echo "$localedir")" +grub_datadir="$(eval echo "$datadir")" +grub_sysconfdir="$(eval echo "$sysconfdir")" +AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir]) +AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir]) +AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir]) +AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir]) + + +# Output files. +if test "$platform" != none; then + cpudir="${target_cpu}" + if test x${cpudir} = xmipsel; then + cpudir=mips; + fi + grub_CHECK_LINK_DIR + if test x"$link_dir" = xyes ; then + AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir]) + if test "$platform" != emu ; then + AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform]) + fi + else + mkdir -p include/grub 2>/dev/null + rm -rf include/grub/cpu + cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null + if test "$platform" != emu ; then + rm -rf include/grub/machine + cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null + fi + fi +else + # Just enough to stop the compiler failing with -I$(srcdir)/include. + mkdir -p include 2>/dev/null + rm -rf include/grub/cpu include/grub/machine +fi + +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([grub-core/Makefile]) +AC_CONFIG_FILES([grub-core/gnulib/Makefile]) +AC_CONFIG_FILES([po/Makefile.in]) +AC_CONFIG_FILES([docs/Makefile]) +AC_CONFIG_FILES([util/bash-completion.d/Makefile]) +AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h]) +AC_CONFIG_FILES([config.h]) + +AC_OUTPUT +[ +echo "*******************************************************" +echo GRUB2 will be compiled with following components: +echo Platform: "$target_cpu"-"$platform" +if [ x"$platform" = xemu ]; then +if [ x"$grub_emu_sdl_excuse" = x ]; then +echo SDL support for grub-emu: Yes +else +echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)" +fi +if [ x"$grub_emu_pci_excuse" = x ]; then +echo PCI support for grub-emu: Yes +else +echo PCI support for grub-emu: No "($grub_emu_pci_excuse)" +fi +fi +if test x"$device_mapper_excuse" = x ; then +echo With devmapper support: Yes +else +echo With devmapper support: No "($device_mapper_excuse)" +fi +if [ x"$enable_mm_debug" = xyes ]; then +echo With memory debugging: Yes +else +echo With memory debugging: No +fi +if [ x"$enable_cache_stats" = xyes ]; then +echo With disk cache statistics: Yes +else +echo With disk cache statistics: No +fi + +if [ x"$enable_boot_time" = xyes ]; then +echo With boot time statistics: Yes +else +echo With boot time statistics: No +fi + +if [ x"$efiemu_excuse" = x ]; then +echo efiemu runtime: Yes +else +echo efiemu runtime: No "($efiemu_excuse)" +fi +if [ x"$grub_mkfont_excuse" = x ]; then +echo grub-mkfont: Yes +else +echo grub-mkfont: No "($grub_mkfont_excuse)" +fi +if [ x"$grub_mount_excuse" = x ]; then +echo grub-mount: Yes +else +echo grub-mount: No "($grub_mount_excuse)" +fi +if [ x"$starfield_excuse" = x ]; then +echo starfield theme: Yes +echo With DejaVuSans font from $DJVU_FONT_SOURCE +else +echo starfield theme: No "($starfield_excuse)" +fi +if [ x"$libzfs_excuse" = x ]; then +echo With libzfs support: Yes +else +echo With libzfs support: No "($libzfs_excuse)" +fi +if [ x"$grub_build_mkfont_excuse" = x ]; then + echo Build-time grub-mkfont: Yes + if test "x$FONT_SOURCE" = x ; then + echo "Without unifont" + else + echo "With unifont from $FONT_SOURCE" + fi +else + echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)" + echo "Without unifont (no build-time grub-mkfont)" +fi +if test x"$liblzma_excuse" != x ; then +echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)" +else +echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" +fi +echo "*******************************************************" +] diff --git a/coreboot.cfg b/coreboot.cfg new file mode 100644 index 000000000..188090d3a --- /dev/null +++ b/coreboot.cfg @@ -0,0 +1,3 @@ +if test -f (cbfsdisk)/etc/grub.cfg; then + source (cbfsdisk)/etc/grub.cfg +fi diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 000000000..93eb39627 --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,9 @@ +AUTOMAKE_OPTIONS = subdir-objects + +# AM_MAKEINFOFLAGS = --no-split --no-validate +info_TEXINFOS = grub.texi grub-dev.texi +grub_TEXINFOS = fdl.texi + +EXTRA_DIST = font_char_metrics.png font_char_metrics.txt + + diff --git a/docs/Makefile.in b/docs/Makefile.in new file mode 100644 index 000000000..19626b7f8 --- /dev/null +++ b/docs/Makefile.in @@ -0,0 +1,1562 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = docs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argp.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/errno_h.m4 \ + $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \ + $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/langinfo_h.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libunistring-base.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/mbtowc.m4 \ + $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ + $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/sleep.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdalign.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strchrnul.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sysexits.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/warn-on-use.m4 \ + $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ + $(top_srcdir)/m4/wcwidth.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ + $(srcdir)/stamp-vti $(srcdir)/version-dev.texi \ + $(srcdir)/stamp-1 $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config-util.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) +am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) +am__v_DVIPS_0 = @echo " DVIPS " $@; +am__v_DVIPS_1 = +AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) +am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) +am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; +am__v_MAKEINFO_1 = +AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) +am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) +am__v_INFOHTML_0 = @echo " INFOHTML" $@; +am__v_INFOHTML_1 = +AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) +am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) +am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; +am__v_TEXI2DVI_1 = +AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) +am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) +am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; +am__v_TEXI2PDF_1 = +AM_V_texinfo = $(am__v_texinfo_@AM_V@) +am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) +am__v_texinfo_0 = -q +am__v_texinfo_1 = +AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) +am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) +am__v_texidevnull_0 = > /dev/null +am__v_texidevnull_1 = +INFO_DEPS = $(srcdir)/grub.info $(srcdir)/grub-dev.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = grub.dvi grub-dev.dvi +PDFS = grub.pdf grub-dev.pdf +PSS = grub.ps grub-dev.ps +HTMLS = grub.html grub-dev.html +TEXINFOS = grub.texi grub-dev.texi +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__installdirs = "$(DESTDIR)$(infodir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(grub_TEXINFOS) $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/mdate-sh \ + $(top_srcdir)/build-aux/texinfo.tex mdate-sh texinfo.tex +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibexecdir = @pkglibexecdir@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +BOOT_TIME_STATS = @BOOT_TIME_STATS@ +BSS_START_SYMBOL = @BSS_START_SYMBOL@ +BUILD_CC = @BUILD_CC@ +BUILD_CFLAGS = @BUILD_CFLAGS@ +BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_FREETYPE = @BUILD_FREETYPE@ +BUILD_LDFLAGS = @BUILD_LDFLAGS@ +BUILD_LIBM = @BUILD_LIBM@ +BUILD_SIZEOF_LONG = @BUILD_SIZEOF_LONG@ +BUILD_SIZEOF_VOID_P = @BUILD_SIZEOF_VOID_P@ +BUILD_WORDS_BIGENDIAN = @BUILD_WORDS_BIGENDIAN@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CMP = @CMP@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISK_CACHE_STATS = @DISK_CACHE_STATS@ +DJVU_FONT_SOURCE = @DJVU_FONT_SOURCE@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EFIEMU64_LINK_FORMAT = @EFIEMU64_LINK_FORMAT@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +END_SYMBOL = @END_SYMBOL@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FLOAT_H = @FLOAT_H@ +FNMATCH_H = @FNMATCH_H@ +FONT_SOURCE = @FONT_SOURCE@ +FREETYPE = @FREETYPE@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GRUB_BOOT_MACHINE_LINK_ADDR = @GRUB_BOOT_MACHINE_LINK_ADDR@ +GRUB_PLATFORM = @GRUB_PLATFORM@ +GRUB_TARGET_CPU = @GRUB_TARGET_CPU@ +HAVE_ASM_USCORE = @HAVE_ASM_USCORE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FONT_SOURCE = @HAVE_FONT_SOURCE@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HOST_CC = @HOST_CC@ +HOST_CCASFLAGS = @HOST_CCASFLAGS@ +HOST_CFLAGS = @HOST_CFLAGS@ +HOST_CPPFLAGS = @HOST_CPPFLAGS@ +HOST_LDFLAGS = @HOST_LDFLAGS@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBDEVMAPPER = @LIBDEVMAPPER@ +LIBGEOM = @LIBGEOM@ +LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ +LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBLZMA = @LIBLZMA@ +LIBNVPAIR = @LIBNVPAIR@ +LIBOBJS = @LIBOBJS@ +LIBPCIACCESS = @LIBPCIACCESS@ +LIBS = @LIBS@ +LIBSDL = @LIBSDL@ +LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ +LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ +LIBUTIL = @LIBUTIL@ +LIBZFS = @LIBZFS@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDALIGN_H = @STDALIGN_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYSEXITS_H = @SYSEXITS_H@ +TARGET_APPLE_LINKER = @TARGET_APPLE_LINKER@ +TARGET_CC = @TARGET_CC@ +TARGET_CCAS = @TARGET_CCAS@ +TARGET_CCASFLAGS = @TARGET_CCASFLAGS@ +TARGET_CC_VERSION = @TARGET_CC_VERSION@ +TARGET_CFLAGS = @TARGET_CFLAGS@ +TARGET_CPP = @TARGET_CPP@ +TARGET_CPPFLAGS = @TARGET_CPPFLAGS@ +TARGET_DECOMPRESSOR_LINK_ADDR = @TARGET_DECOMPRESSOR_LINK_ADDR@ +TARGET_IMG_BASE_LDOPT = @TARGET_IMG_BASE_LDOPT@ +TARGET_IMG_CFLAGS = @TARGET_IMG_CFLAGS@ +TARGET_IMG_LDFLAGS = @TARGET_IMG_LDFLAGS@ +TARGET_LDFLAGS = @TARGET_LDFLAGS@ +TARGET_LDFLAGS_OLDMAGIC = @TARGET_LDFLAGS_OLDMAGIC@ +TARGET_LINK_ADDR = @TARGET_LINK_ADDR@ +TARGET_MODULE_FORMAT = @TARGET_MODULE_FORMAT@ +TARGET_NM = @TARGET_NM@ +TARGET_NMFLAGS_DEFINED_ONLY = @TARGET_NMFLAGS_DEFINED_ONLY@ +TARGET_NMFLAGS_MINUS_P = @TARGET_NMFLAGS_MINUS_P@ +TARGET_OBJ2ELF = @TARGET_OBJ2ELF@ +TARGET_OBJCONV = @TARGET_OBJCONV@ +TARGET_OBJCOPY = @TARGET_OBJCOPY@ +TARGET_RANLIB = @TARGET_RANLIB@ +TARGET_STRIP = @TARGET_STRIP@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_FREETYPE = @ac_ct_FREETYPE@ +ac_ct_TARGET_CC = @ac_ct_TARGET_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +bootdirname = @bootdirname@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_freetype_cflags = @build_freetype_cflags@ +build_freetype_libs = @build_freetype_libs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_efiemu = @enable_efiemu@ +enable_grub_emu_pci = @enable_grub_emu_pci@ +enable_grub_emu_sdl = @enable_grub_emu_sdl@ +enable_grub_mkfont = @enable_grub_mkfont@ +enable_grub_mount = @enable_grub_mount@ +exec_prefix = @exec_prefix@ +freetype_cflags = @freetype_cflags@ +freetype_libs = @freetype_libs@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +grub_bios_setup = @grub_bios_setup@ +grub_editenv = @grub_editenv@ +grub_file = @grub_file@ +grub_glue_efi = @grub_glue_efi@ +grub_install = @grub_install@ +grub_mkconfig = @grub_mkconfig@ +grub_mkfont = @grub_mkfont@ +grub_mkimage = @grub_mkimage@ +grub_mklayout = @grub_mklayout@ +grub_mkpasswd_pbkdf2 = @grub_mkpasswd_pbkdf2@ +grub_mkrelpath = @grub_mkrelpath@ +grub_mkrescue = @grub_mkrescue@ +grub_probe = @grub_probe@ +grub_reboot = @grub_reboot@ +grub_render_label = @grub_render_label@ +grub_script_check = @grub_script_check@ +grub_set_default = @grub_set_default@ +grub_sparc64_setup = @grub_sparc64_setup@ +grubdirname = @grubdirname@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_kernel = @host_kernel@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +platform = @platform@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = subdir-objects + +# AM_MAKEINFOFLAGS = --no-split --no-validate +info_TEXINFOS = grub.texi grub-dev.texi +grub_TEXINFOS = fdl.texi +EXTRA_DIST = font_char_metrics.png font_char_metrics.txt +all: all-am + +.SUFFIXES: +.SUFFIXES: .dvi .html .info .pdf .ps .texi +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu docs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +.texi.info: + $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texi.dvi: + $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.pdf: + $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.html: + $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) + $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@ && mv $(@:.html=.htp) $@; \ + else \ + rm -rf $(@:.html=.htp); exit 1; \ + fi +$(srcdir)/grub.info: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +grub.dvi: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +grub.pdf: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +grub.html: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: grub.texi $(top_srcdir)/configure + @(dir=.; test -f ./grub.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/grub.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ + (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi" && \ + cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ + mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ + rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp* $(srcdir)/version.texi.tmp* + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +$(srcdir)/grub-dev.info: grub-dev.texi $(srcdir)/version-dev.texi +grub-dev.dvi: grub-dev.texi $(srcdir)/version-dev.texi +grub-dev.pdf: grub-dev.texi $(srcdir)/version-dev.texi +grub-dev.html: grub-dev.texi $(srcdir)/version-dev.texi +$(srcdir)/version-dev.texi: $(srcdir)/stamp-1 +$(srcdir)/stamp-1: grub-dev.texi $(top_srcdir)/configure + @(dir=.; test -f ./grub-dev.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/grub-dev.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > 1.tmp$$$$ && \ + (cmp -s 1.tmp$$$$ $(srcdir)/version-dev.texi \ + || (echo "Updating $(srcdir)/version-dev.texi" && \ + cp 1.tmp$$$$ $(srcdir)/version-dev.texi.tmp$$$$ && \ + mv $(srcdir)/version-dev.texi.tmp$$$$ $(srcdir)/version-dev.texi)) && \ + rm -f 1.tmp$$$$ $(srcdir)/version-dev.texi.$$$$ + @cp $(srcdir)/version-dev.texi $@ + +mostlyclean-1: + -rm -f 1.tmp* $(srcdir)/version-dev.texi.tmp* + +maintainer-clean-1: + -rm -f $(srcdir)/stamp-1 $(srcdir)/version-dev.texi +.dvi.ps: + $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) $(AM_V_texinfo) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf grub.t2d grub.t2p grub-dev.t2d grub-dev.t2p + +clean-aminfo: + -test -z "grub.dvi grub.pdf grub.ps grub.html grub-dev.dvi grub-dev.pdf \ + grub-dev.ps grub-dev.html" \ + || rm -rf grub.dvi grub.pdf grub.ps grub.html grub-dev.dvi grub-dev.pdf \ + grub-dev.ps grub-dev.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: check-am +all-am: Makefile $(INFO_DEPS) +installdirs: + for dir in "$(DESTDIR)$(infodir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-aminfo clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + d2=$$d$$p; \ + if test -d "$$d2"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d2"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ + fi; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-1 \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-pdf-am uninstall-ps-am + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ + cscopelist-am ctags-am dist-info distclean distclean-generic \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-1 maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-vti pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-dvi-am uninstall-html-am \ + uninstall-info-am uninstall-pdf-am uninstall-ps-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/docs/autoiso.cfg b/docs/autoiso.cfg new file mode 100644 index 000000000..9ce51c692 --- /dev/null +++ b/docs/autoiso.cfg @@ -0,0 +1,244 @@ +# Sample GRUB script to autodetect operating systems +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +function pathname { regexp -s 2:"$2" '^(\(.*\))?(/.*)$' "$1"; } +function devname { regexp -s "$2" '^(\(.*\)).*$' "$1"; } + +function loopback_iso_entry { + realdev="$1" + isopath="$2" + loopdev="$3" + + if test -f /boot/grub/loopback.cfg; then + cfgpath=/boot/grub/loopback.cfg + elif test -f /grub/loopback.cfg; then + cfgpath=/grub/loopback.cfg + else + return 1; + fi + + echo loopback.cfg $isopath: yes + menuentry "Boot GRUB Loopback Config from ${realdev}${isopath}" "$realdev" "$isopath" "$cfgpath" { + set device="$2" + set iso_path="$3" + set cfg_path="$4" + + export iso_path + loopback loopdev_cfg "${device}${iso_path}" + set root=(loopdev_cfg) + configfile $cfg_path + loopback -d loopdev_cfg + } + return 0 +} + +function grml_iso_entry { + realdev="$1" + isopath="$2" + loopdev="$3" + + result=1 + for dir in /boot/grml /boot/grmlsmall /boot/grmlmedium; do + if ! test -f ${dir}/linux26 -a -f ${dir}/initrd.gz; then continue; fi + + echo grml $isopath: yes + result=0 + menuentry "GRML Linux from ${realdev}${isopath}" \ + "$realdev" "$isopath" "$dir" { + set device="$2" + set isopath="$3" + set grmldir="$4" + + loopback loopdev_grml "${device}${isopath}" + set root=(loopdev_grml) + linux $grmldir/linux26 findiso="$isopath" apm=power-off quiet \ + boot=live nomce + initrd $grmldir/initrd.gz + loopback -d loopdev_grml + } + done + return $result +} + +function pmagic_iso_entry { + realdev="$1" + isopath="$2" + loopdev="$3" + + if ! test -f /pmagic/bzImage -a -f /pmagic/initramfs; then return 1; fi + + echo pmagic $isopath: yes + menuentry "Parted Magic from ${realdev}${isopath}" "$realdev" "$isopath" { + set device="$2" + set isopath="$3" + + loopback loopdev_pmagic "${device}${isopath}" + set root=(loopdev_pmagic) + linux /pmagic/bzImage iso_filename="$isopath" edd=off noapic \ + load_ramdisk=1 prompt_ramdisk=0 rw sleep=10 loglevel=0 \ + keymap=$langcode + initrd /pmagic/initramfs + loopback -d loopdev_pmagic + } + return 0 +} + +function sidux_iso_entry { + realdev="$1" + isopath="$2" + loopdev="$3" + + result=1 + for kernel in /boot/vmlinuz-*-sidux-*; do + if ! test -f "$kernel"; then continue; fi + regexp -s 1:v1 -s 2:v2 '/boot/vmlinuz-(.*)-sidux-(.*)' "$kernel" + + initrd="/boot/initrd.img-$v1-sidux-$v2" + if ! test -f "$initrd"; then continue; fi + + result=0 + echo sidux $isopath: yes + menuentry "Sidux vmlinux-$v1-sidux-$v2 from ${realdev}${isopath}" "$realdev" "$isopath" "$kernel" "$initrd" { + set device="$2" + set isopath="$3" + set kernel="$4" + set initrd="$5" + + loopback loopdev_sidux "${device}${isopath}" + set root=(loopdev_sidux) + linux $kernel fromiso=$isopath boot=fll quiet + initrd $initrd + loopback -d loopdev_sidux + } + done + return $result +} + +function slax_iso_entry { + realdev="$1" + isopath="$2" + loopdev="$3" + + if ! test -f /boot/vmlinuz -a -f /boot/initrd.gz; then return 1; fi + + echo slax $isopath: yes + menuentry "Slax Linux from ${realdev}${isopath}" "$realdev" "$isopath" { + set device="$2" + set isopath="$3" + + loopback loopdev_slax "${device}${isopath}" + set root=(loopdev_slax) + linux /boot/vmlinuz from=$isopath ramdisk_size=6666 root=/dev/ram0 rw + initrd /boot/initrd.gz + loopback -d loopdev_slax + } + return 0 +} + +function tinycore_iso_entry { + realpath="$1" + isopath="$2" + loopdev="$3" + + if ! test -f /boot/bzImage -a -f /boot/tinycore.gz; then return 1; fi + + echo tinycore $isopath: yes + menuentry "Tinycore Linux from ${realdev}${isopath}" "$realdev" "$isopath" { + set device="$2" + set isopath="$3" + + loopback loopdev_tiny "${device}${isopath}" + set root=(loopdev_tiny) + linux /boot/bzImage + initrd /boot/tinycore.gz + loopback -d loopdev_tiny + } + return 0 +} + +function casper_iso_entry { + realpath="$1" + isopath="$2" + loopdev="$3" + + if ! test -f /casper/vmlinuz; then return 1; fi + initrd= + for f in /casper/initrd.*z; do + if ! test -f "$f"; then continue; fi + pathname "$f" initrd + done + if test -z "$initrd"; then return 1; fi + + echo casper $isopath: yes + menuentry "Casper based Linux from ${realdev}${isopath}" "$realdev" "$isopath" "$initrd" { + set device="$2" + set isopath="$3" + set initrd="$4" + + loopback loopdev_casper "${device}${isopath}" + set root=(loopdev_casper) + linux /casper/vmlinuz boot=casper iso-scan/filename="$isopath" quiet splash noprompt keyb="$langcode" \ + debian-installer/language="$langcode" console-setup/layoutcode?="$langcode" -- + initrd $initrd + loopback -d loopdev_casper + } + return 0 +} + +function scan_isos { + isodirs="$1" + + for dev in (*); do + for dir in $isodirs; do + for file in ${dev}${dir}/*.iso ${dev}${dir}/*.ISO; do + if ! test -f "$file"; then continue; fi + + pathname $file isopath + if test -z "$dev" -o -z "$isopath"; then continue; fi + + if ! loopback loopdev_scan "$file"; then continue; fi + saved_root=$root + set root=(loopdev_scan) + + if loopback_iso_entry $dev $isopath (loopdev_scan); then true; + elif grml_iso_entry $dev $isopath (loopdev_scan); then true; + elif pmagic_iso_entry $dev $isopath (loopdev_scan); then true; + elif sidux_iso_entry $dev $isopath (loopdev_scan); then true; + elif slax_iso_entry $dev $isopath (loopdev_scan); then true; + elif tinycore_iso_entry $dev $isopath (loopdev_scan); then true; + elif casper_iso_entry $dev $isopath (loopdev_scan); then true; + else true; fi + + set root=$saved_root + loopback -d loopdev_scan + done + done + done + return 0 +} + +# XXX Remove later +insmod serial +serial +terminal_output --append serial +# terminal_input --append serial + +langcode="$lang" + +insmod regexp +scan_isos /iso /boot/iso + diff --git a/docs/fdl.texi b/docs/fdl.texi new file mode 100644 index 000000000..fe78df8d5 --- /dev/null +++ b/docs/fdl.texi @@ -0,0 +1,452 @@ + +@node GNU Free Documentation License +@appendixsec GNU Free Documentation License + +@cindex FDL, GNU Free Documentation License +@center Version 1.2, November 2002 + +@display +Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except +as expressly provided for under this License. Any other attempt to +copy, modify, sublicense or distribute the Document is void, and will +automatically terminate your rights under this License. However, +parties who have received copies, or rights, from you under this +License will not have their licenses terminated so long as such +parties remain in full compliance. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. +@end enumerate + +@page +@appendixsubsec ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with...Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/docs/font_char_metrics.png b/docs/font_char_metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..8d10d1f645e3a22b1535716256adc73f262e56cb GIT binary patch literal 16443 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. To fetch: + + git clone git://git.sv.gnu.org/grub.git + + Web access is available under + http://git.savannah.gnu.org/cgit/grub.git/ + + The branches available are: + +'master' + Main development branch. +'grub-legacy' + GRUB 0.97 codebase. Kept for reference and legal reasons +'multiboot' + Multiboot specfication +'multiboot2' + Multiboot2 specfication +'developer branches' + Prefixed with developer name. Every developer of a team manages + his own branches. Developer branches do not need changelog + entries. + + Once you have used 'git clone' to fetch an initial copy of a branch, +you can use 'git pull' to keep it up to date. If you have modified your +local version, you may need to resolve conflicts when pulling. + + +File: grub-dev.info, Node: Coding style, Next: Finding your way around, Prev: Getting the source code, Up: Top + +2 Coding style +************** + +Basically we follow the GNU Coding Standards +(http://www.gnu.org/prep/standards_toc.html). We define additional +conventions for GRUB here. + +* Menu: + +* Naming Conventions:: +* Functions:: +* Variables:: +* Types:: +* Macros:: +* Comments:: +* Multi-Line Comments:: + + +File: grub-dev.info, Node: Naming Conventions, Next: Functions, Up: Coding style + +2.1 Naming Conventions +====================== + +All global symbols (i.e. functions, variables, types, and macros) must +have the prefix grub_ or GRUB_. The all capital form is used only by +macros. + + +File: grub-dev.info, Node: Functions, Next: Variables, Prev: Naming Conventions, Up: Coding style + +2.2 Functions +============= + +If a function is global, its name must be prefixed with grub_ and must +consist of only small letters. If the function belongs to a specific +function module, the name must also be prefixed with the module name. +For example, if a function is for file systems, its name is prefixed +with grub_fs_. If a function is for FAT file system but not for all +file systems, its name is prefixed with grub_fs_fat_. The hierarchy is +noted this way. + + After a prefix, a function name must start with a verb (such as get +or is). It must not be a noun. Some kind of abbreviation is permitted, +as long as it wouldn't make code less readable (e.g. init). + + If a function is local, its name may not start with any prefix. It +must start with a verb. + + +File: grub-dev.info, Node: Variables, Next: Types, Prev: Functions, Up: Coding style + +2.3 Variables +============= + +The rule is mostly the same as functions, as noted above. If a variable +is global, its name must be prefixed with grub_ and must consist of only +small letters. If the variable belongs to a specific function module, +the name must also be prefixed with the module name. For example, if a +function is for dynamic loading, its name is prefixed with grub_dl_. If +a variable is for ELF but not for all dynamic loading systems, its name +is prefixed with grub_dl_elf_. + + After a prefix, a variable name must start with a noun or an +adjective (such as name or long) and it should end with a noun. Some +kind of abbreviation is permitted, as long as it wouldn't make code less +readable (e.g. i18n). + + If a variable is global in the scope of a single file (i.e. it is +declared with static), its name may not start with any prefix. It must +start with a noun or an adjective. + + If a variable is local, you may choose any shorter name, as long as +it wouldn't make code less readable (e.g. i). + + +File: grub-dev.info, Node: Types, Next: Macros, Prev: Variables, Up: Coding style + +2.4 Types +========= + +The name of a type must be prefixed with grub_ and must consist of only +small letters. If the type belongs to a specific function module, the +name must also be prefixed with the module name. For example, if a type +is for OS loaders, its name is prefixed with grub_loader_. If a type is +for Multiboot but not for all OS loaders, its name is prefixed with +grub_loader_linux_. + + The name must be suffixed with _t, to emphasize the fact that it is a +type but not a variable or a function. + + +File: grub-dev.info, Node: Macros, Next: Comments, Prev: Types, Up: Coding style + +2.5 Macros +========== + +If a macro is global, its name must be prefixed with GRUB_ and must +consist of only large letters. Other rules are the same as functions or +variables, depending on whether a macro is used like a function or a +variable. + + +File: grub-dev.info, Node: Comments, Next: Multi-Line Comments, Prev: Macros, Up: Coding style + +2.6 Comments +============ + +All comments shall be C-style comments, of the form '/* ... */'. + + Comments shall be placed only on a line by themselves. They shall +not be placed together with code, variable declarations, or other +non-comment entities. A comment should be placed immediately preceding +the entity it describes. + + Acceptable: + /* The page # that is the front buffer. */ + int displayed_page; + /* The page # that is the back buffer. */ + int render_page; + + Unacceptable: + int displayed_page; /* The page # that is the front buffer. */ + int render_page; /* The page # that is the back buffer. */ + + +File: grub-dev.info, Node: Multi-Line Comments, Prev: Comments, Up: Coding style + +2.7 Multi-Line Comments +======================= + +Comments spanning multiple lines shall be formatted with all lines after +the first aligned with the first line. + + Asterisk characters should not be repeated a the start of each +subsequent line. + + Acceptable: + /* This is a comment + which spans multiple lines. + It is long. */ + + Unacceptable: + /* + * This is a comment + * which spans multiple lines. + * It is long. */ + + The opening '/*' and closing '*/' should be placed together on a line +with text. + + +File: grub-dev.info, Node: Finding your way around, Next: Contributing Changes, Prev: Coding style, Up: Top + +3 Finding your way around +************************* + +Here is a brief map of the GRUB code base. + + GRUB uses Autoconf and Automake, with most of the Automake input +generated by a Python script. The top-level build rules are in +'configure.ac', 'grub-core/Makefile.core.def', and 'Makefile.util.def'. +Each block in a '*.def' file represents a build target, and specifies +the source files used to build it on various platforms. The '*.def' +files are processed into Automake input by 'gentpl.py' (which you only +need to look at if you are extending the build system). If you are +adding a new module which follows an existing pattern, such as a new +command or a new filesystem implementation, it is usually easiest to +grep 'grub-core/Makefile.core.def' and 'Makefile.util.def' for an +existing example of that pattern to find out where it should be added. + + In general, code that may be run at boot time is in a subdirectory of +'grub-core', while code that is only run from within a full operating +system is in a subdirectory of the top level. + + Low-level boot code, such as the MBR implementation on PC BIOS +systems, is in the 'grub-core/boot/' directory. + + The GRUB kernel is in 'grub-core/kern/'. This contains core +facilities such as the device, disk, and file frameworks, environment +variable handling, list processing, and so on. The kernel should +contain enough to get up to a rescue prompt. Header files for kernel +facilities, among others, are in 'include/'. + + Terminal implementations are in 'grub-core/term/'. + + Disk access code is spread across 'grub-core/disk/' (for accessing +the disk devices themselves), 'grub-core/partmap/' (for interpreting +partition table data), and 'grub-core/fs/' (for accessing filesystems). +Note that, with the odd specialised exception, GRUB only contains code +to _read_ from filesystems and tries to avoid containing any code to +_write_ to filesystems; this lets us confidently assure users that GRUB +cannot be responsible for filesystem corruption. + + PCI and USB bus handling is in 'grub-core/bus/'. + + Video handling code is in 'grub-core/video/'. The graphical menu +system uses this heavily, but is in a separate directory, +'grub-core/gfxmenu/'. + + Most commands are implemented by files in 'grub-core/commands/', with +the following exceptions: + + * A few core commands live in 'grub-core/kern/corecmd.c'. + + * Commands related to normal mode live under 'grub-core/normal/'. + + * Commands that load and boot kernels live under 'grub-core/loader/'. + + * The 'loopback' command is really a disk device, and so lives in + 'grub-core/disk/loopback.c'. + + * The 'gettext' command lives under 'grub-core/gettext/'. + + * The 'loadfont' and 'lsfonts' commands live under 'grub-core/font/'. + + * The 'serial', 'terminfo', and 'background_image' commands live + under 'grub-core/term/'. + + * The 'efiemu_*' commands live under 'grub-core/efiemu/'. + + * OS-dependent code should be under 'grub-core/osdep/' + + * Utility programs meant to be run from a full operating system + (except OS-dependent code mentioned previously) are in 'util/'. + + There are a few other special-purpose exceptions; grep for them if +they matter to you. + + +File: grub-dev.info, Node: Contributing Changes, Next: Porting, Prev: Finding your way around, Up: Top + +4 Contributing changes +********************** + +Contributing changes to GRUB 2 is welcomed activity. However we have a +bit of control what kind of changes will be accepted to GRUB 2. +Therefore it is important to discuss your changes on grub-devel mailing +list (see MailingLists). On this page there are some basic details on +the development process and activities. + + First of all you should come up with the idea yourself what you want +to contribute. If you do not have that beforehand you are advised to +study this manual and try GRUB 2 out to see what you think is missing +from there. + + Here are additional pointers: + * + * + + If you intended to make changes to GRUB Legacy (<=0.97) those are not +accepted anymore. + +* Menu: + +* Getting started:: +* Typical Developer Experience:: +* When you are approved for write access to project's files:: + + +File: grub-dev.info, Node: Getting started, Next: Typical Developer Experience, Up: Contributing Changes + +4.1 Getting started +=================== + + * Always use latest GRUB 2 source code. So get that first. + + For developers it is recommended always to use the newest + development version of GRUB 2. If development takes a long period + of time, please remember to keep in sync with newest developments + regularly so it is much easier to integrate your change in the + future. GRUB 2 is being developed in a GIT repository. + + Please check Savannah's GRUB project page for details how to get + newest git: GRUB 2 git Repository + (https://savannah.gnu.org/git/?group=grub) + + * Compile it and try it out. + + It is always good idea to first see that things work somehow and + after that to start to implement new features or develop fixes to + bugs. + + * Study the code. + + There are sometimes odd ways to do things in GRUB 2 code base. + This is mainly related to limited environment where GRUB 2 is being + executed. You usually do not need to understand it all so it is + better to only try to look at places that relates to your work. + Please do not hesitate to ask for help if there is something that + you do not understand. + + * Develop a new feature. + + Now that you know what to do and how it should work in GRUB 2 code + base, please be free to develop it. If you have not so far + announced your idea on grub-devel mailing list, please do it now. + This is to make sure you are not wasting your time working on the + solution that will not be integrated to GRUB 2 code base. + + You might want to study our coding style before starting + development so you do not need to change much of the code when your + patch is being reviewed. (see *note Coding style::) + + For every accepted patch there has to exist a ChangeLog entry. Our + ChangeLog consist of changes within source code and are not + describing about what the change logically does. Please see + examples from previous entries. + + Also remember that GRUB 2 is licensed under GPLv3 license and that + usually means that you are not allowed to copy pieces of code from + other projects. Even if the source project's license would be + compatible with GPLv3, please discuss it beforehand on grub-devel + mailing list. + + * Test your change. + + Test that your change works properly. Try it out a couple of + times, preferably on different systems, and try to find problems + with it. + + * Publish your change. + + When you are happy with your change, first make sure it is + compilable with latest development version of GRUB 2. After that + please send a patch to grub-devel for review. Please describe in + your email why you made the change, what it changes and so on. + Please be prepared to receive even discouraging comments about your + patch. There is usually at least something that needs to be + improved in every patch. + + Please use unified diff to make your patch (good match of arguments + for diff is '-pruN'). + + * Respond to received feedback. + + If you are asked to modify your patch, please do that and resubmit + it for review. If your change is large you are required to submit + a copyright agreement to FSF. Please keep in mind that if you are + asked to submit for copyright agreement, process can take some time + and is mandatory in order to get your changes integrated. + + If you are not on grub-devel to respond to questions, most likely + your patch will not be accepted. Also if problems arise from your + changes later on, it would be preferable that you also fix the + problem. So stay around for a while. + + * Your patch is accepted. + + Good job! Your patch will now be integrated into GRUB 2 mainline, + and if it didn't break anything it will be publicly available in + the next release. + + Now you are welcome to do further improvements :) + + +File: grub-dev.info, Node: Typical Developer Experience, Next: When you are approved for write access to project's files, Prev: Getting started, Up: Contributing Changes + +4.2 Typical Developer Experience +================================ + +The typical experience for a developer in this project is the following: + + 1. You find yourself wanting to do something (e.g. fixing a bug). + 2. You show some result in the mailing list or the IRC. + 3. You are getting to be known to other developers. + 4. You accumulate significant amount of contribution, so copyright + assignment is processed. + 5. You are free to check in your changes on your own, legally + speaking. + + At this point, it is rather annoying that you ought to ask somebody +else every change to be checked in. For efficiency, it is far better, +if you can commit it yourself. Therefore, our policy is to give you the +write permission to our official repository, once you have shown your +skill and will, and the FSF clerks have dealt with your copyright +assignment. + + +File: grub-dev.info, Node: When you are approved for write access to project's files, Prev: Typical Developer Experience, Up: Contributing Changes + +4.3 When you are approved for write access to project's files +============================================================= + +As you might know, GRUB is hosted on +, thus the membership +is managed by Savannah. This means that, if you want to be a member of +this project: + + 1. You need to create your own account on Savannah. + 2. You can submit "Request for Inclusion" from "My Groups" on + Savannah. + + Then, one of the admins can approve your request, and you will be a +member. If you don't want to use the Savannah interface to submit a +request, you can simply notify the admins by email or something else, +alternatively. But you still need to create an account beforehand. + + NOTE: we sometimes receive a "Request for Inclusion" from an unknown +person. In this case, the request would be just discarded, since it is +too dangerous to allow a stranger to be a member, which automatically +gives him a commit right to the repository, both for a legal reason and +for a technical reason. + + If your intention is to just get started, please do not submit a +inclusion request. Instead, please subscribe to the mailing list, and +communicate first (e.g. sending a patch, asking a question, commenting +on another message...). + + +File: grub-dev.info, Node: Porting, Next: Error Handling, Prev: Contributing Changes, Up: Top + +5 Porting +********* + +GRUB2 is designed to be easily portable accross platforms. But because +of the nature of bootloader every new port must be done separately. +Here is how I did MIPS (loongson and ARC) and Xen ports. Note than this +is more of suggestions, not absolute truth. + + First of all grab any architecture specifications you can find in +public (please avoid NDA). + + First stage is "Hello world". I've done it outside of GRUB for +simplicity. Your task is to have a small program which is loadable as +bootloader and clearly shows its presence to you. If you have easily +accessible console you can just print a message. If you have a mapped +framebuffer you know address of, you can draw a square. If you have a +debug facility, just hanging without crashing might be enough. For the +first stage you can choose to load the bootloader across the network +since format for network image is often easier than for local boot and +it skips the need of small intermediary stages and nvram handling. +Additionally you can often have a good idea of the needed format by +running "file" on any netbootable executable for given platform. + + This program should probably have 2 parts: an assembler and C one. +Assembler one handles BSS cleaning and other needed setup (on some +platforms you may need to switch modes or copy the executable to its +definitive position). So your code may look like (x86 assembly for +illustration purposes) + + .globl _start + _start: + movl $_bss_start, %edi + movl $_end, %ecx + subl %edi, %ecx + xorl %eax, %eax + cld + rep + stosb + call main + + + static const char msg[] = "Hello, world"; + + void + putchar (int c) + { + ... + } + + void + main (void) + { + const char *ptr = msg; + while (*ptr) + putchar (*ptr++); + while (1); + } + + Sometimes you need a third file: assembly stubs for +ABI-compatibility. + + Once this file is functional it's time to move it into GRUB2. The +startup assembly file goes to grub-core/kern/$cpu/$platform/startup.S. +You should also include grub/symbol.h and replace call to entry point +with call to EXT_C(grub_main). The C file goes to +grub-core/kern/$cpu/$platform/init.c and its entry point is renamed to +void grub_machine_init (void). Keep final infinite loop for now. Stubs +file if any goes to grub-core/kern/$cpu/$platform/callwrap.S. Sometimes +either $cpu or $platform is dropped if file is used on several cpus +respectivelyplatforms. Check those locations if they already have what +you're looking for. + + Then modify in configure.ac the following parts: + + CPU names: + + case "$target_cpu" in + i[[3456]]86) target_cpu=i386 ;; + amd64) target_cpu=x86_64 ;; + sparc) target_cpu=sparc64 ;; + s390x) target_cpu=s390 ;; + ... + esac + + Sometimes CPU have additional architecture names which don't +influence booting. You might want to have some canonical name to avoid +having bunch of identical platforms with different names. + + NOTE: it doesn't influence compile optimisations which depend solely +on chosen compiler and compile options. + + if test "x$with_platform" = x; then + case "$target_cpu"-"$target_vendor" in + i386-apple) platform=efi ;; + i386-*) platform=pc ;; + x86_64-apple) platform=efi ;; + x86_64-*) platform=pc ;; + powerpc-*) platform=ieee1275 ;; + ... + esac + else + ... + fi + + This part deals with guessing the platform from CPU and vendor. +Sometimes you need to use 32-bit mode for booting even if OS runs in +64-bit one. If so add your platform to: + + case "$target_cpu"-"$platform" in + x86_64-efi) ;; + x86_64-emu) ;; + x86_64-*) target_cpu=i386 ;; + powerpc64-ieee1275) target_cpu=powerpc ;; + esac + + Add your platform to the list of supported ones: + + case "$target_cpu"-"$platform" in + i386-efi) ;; + x86_64-efi) ;; + i386-pc) ;; + i386-multiboot) ;; + i386-coreboot) ;; + ... + esac + + If explicit -m32 or -m64 is needed add it to: + + case "$target_cpu" in + i386 | powerpc) target_m32=1 ;; + x86_64 | sparc64) target_m64=1 ;; + esac + + Finally you need to add a conditional to the following block: + + AM_CONDITIONAL([COND_mips_arc], [test x$target_cpu = xmips -a x$platform = xarc]) + AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) + AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) + + Next stop is gentpl.py. You need to add your platform to the list of +supported ones (sorry that this list is duplicated): + + GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", + "i386_multiboot", "i386_ieee1275", "x86_64_efi", + "mips_loongson", "sparc64_ieee1275", + "powerpc_ieee1275", "mips_arc", "ia64_efi", + "mips_qemu_mips", "s390_mainframe" ] + + You may also want already to add new platform to one or several of +available groups. In particular we always have a group for each CPU +even when only one platform for given CPU is available. + + Then comes grub-core/Makefile.core.def. In the block "kernel" you'll +need to define ldflags for your platform ($cpu_$platform_ldflags). You +also need to declare startup asm file ($cpu_$platform_startup) as well +as any other files (e.g. init.c and callwrap.S) (e.g. $cpu_$platform = +kern/$cpu/$platform/init.c). At this stage you will also need to add +dummy dl.c and cache.S with functions grub_err_t +grub_arch_dl_check_header (void *ehdr), grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) (dl.c) and +void grub_arch_sync_caches (void *address, grub_size_t len) (cache.S). +They won't be used for now. + + You will need to create directory include/$cpu/$platform and a file +include/$cpu/types.h. The later folowing this template: + + #ifndef GRUB_TYPES_CPU_HEADER + #define GRUB_TYPES_CPU_HEADER 1 + + /* The size of void *. */ + #define GRUB_TARGET_SIZEOF_VOID_P 4 + + /* The size of long. */ + #define GRUB_TARGET_SIZEOF_LONG 4 + + /* mycpu is big-endian. */ + #define GRUB_TARGET_WORDS_BIGENDIAN 1 + /* Alternatively: mycpu is little-endian. */ + #undef GRUB_TARGET_WORDS_BIGENDIAN + + #endif /* ! GRUB_TYPES_CPU_HEADER */ + + You will also need to add a dummy file to datetime and setjmp modules +to avoid any of it having no files. It can be just completely empty at +this stage. + + You'll need to make grub-mkimage.c (util/grub_mkimage.c) aware of the +needed format. For most commonly used formats like ELF, PE, aout or raw +the support is already present and you'll need to make it follow the +existant code paths for your platform adding adjustments if necessary. +When done compile: + + ./autogen.sh + ./configure --target=$cpu --with-platform=$platform TARGET_CC=.. OBJCOPY=... STRIP=... + make > /dev/null + + And create image + + ./grub-mkimage -d grub-core -O $format_id -o test.img + + And it's time to test your test.img. + + If it works next stage is to have heap, console and timer. + + To have the heap working you need to determine which regions are +suitable for heap usage, allocate them from firmware and map (if +applicable). Then call grub_mm_init_region (vois *start, grub_size_t s) +for every of this region. As a shortcut for early port you can allocate +right after _end or have a big static array for heap. If you do you'll +probably need to come back to this later. As for output console you +should distinguish between an array of text, terminfo or graphics-based +console. Many of real-world examples don't fit perfectly into any of +these categories but one of the models is easier to be used as base. In +second and third case you should add your platform to terminfokernel +respectively videoinkernel group. A good example of array of text is +i386-pc (kern/i386/pc/init.c and term/i386/pc/console.c). Of terminfo +is ieee1275 (kern/ieee1275/init.c and term/ieee1275/console.c). Of +video is loongson (kern/mips/loongson/init.c). Note that terminfo has +to be inited in 2 stages: one before (to get at least rudimentary +console as early as possible) and another after the heap (to get +full-featured console). For the input there are string of keys, +terminfo and direct hardware. For string of keys look at i386-pc (same +files), for termino ieee1275 (same files) and for hardware loongson +(kern/mips/loongson/init.c and term/at_keyboard.c). + + For the timer you'll need to call grub_install_get_time_ms (...) +with as sole argument a function returning a grub_uint64_t of a number +of milliseconds elapsed since arbitrary point in the past. + + Once these steps accomplished you can remove the inifinite loop and +you should be able to get to the minimal console. Next step is to have +module loading working. For this you'll need to fill kern/$cpu/dl.c and +kern/$cpu/cache.S with real handling of relocations and respectively the +real sync of I and D caches. Also you'll need to decide where in the +image to store the modules. Usual way is to have it concatenated at the +end. In this case you'll need to modify startup.S to copy modules out +of bss to let's say ALIGN_UP (_end, 8) before cleaning out bss. You'll +probably find useful to add total_module_size field to startup.S. In +init.c you need to set grub_modbase to the address where modules can be +found. You may need grub_modules_get_end () to avoid declaring the +space occupied by modules as usable for heap. You can test modules +with: + + ./grub-mkimage -d grub-core -O $format_id -o test.img hello + + and then running "hello" in the shell. + + Once this works, you should think of implementing disk access. Look +around disk/ for examples. + + Then, very importantly, you probably need to implement the actual +loader (examples available in loader/) + + Last step to have minimally usable port is to add support to +grub-install to put GRUB in a place where firmware or platform will pick +it up. + + Next steps are: filling datetime.c, setjmp.S, network (net/drivers), +video (video/), halt (lib/), reboot (lib/). + + Please add your platform to Platform limitations and Supported +kernels chapter in user documentation and mention any steps you skipped +which result in reduced features or performance. Here is the quick +checklist of features. Some of them are less important than others and +skipping them is completely ok, just needs to be mentioned in user +documentation. + + Checklist: + * Is heap big enough? + * Which charset is supported by console? + * Does platform have disk driver? + * Do you have network card support? + * Are you able to retrieve datetime (with date)? + * Are you able to set datetime (with date)? + * Is serial supported? + * Do you have direct disk support? + * Do you have direct keyboard support? + * Do you have USB support? + * Do you support loading through network? + * Do you support loading from disk? + * Do you support chainloading? + * Do you support network chainloading? + * Does cpuid command supports checking all CPU features that the user + might want conditionalise on (64-bit mode, hypervisor,...) + * Do you support hints? How reliable are they? + * Does platform have ACPI? If so do "acpi" and "lsacpi" modules work? + * Do any of platform-specific operations mentioned in the relevant + section of user manual makes sense on your platform? + * Does your platform support PCI? If so is there an appropriate + driver for GRUB? + * Do you support badram? + + +File: grub-dev.info, Node: Error Handling, Next: Stack and heap size, Prev: Porting, Up: Top + +6 Error Handling +**************** + +Error handling in GRUB 2 is based on exception handling model. As C +language doesn't directly support exceptions, exception handling +behavior is emulated in software. + + When exception is raised, function must return to calling function. +If calling function does not provide handling of the exception it must +return back to its calling function and so on, until exception is +handled. If exception is not handled before prompt is displayed, error +message will be shown to user. + + Exception information is stored on 'grub_errno' global variable. If +'grub_errno' variable contains value 'GRUB_ERR_NONE', there is no active +exception and application can continue normal processing. When +'grub_errno' has other value, it is required that application code +either handles this error or returns instantly to caller. If function +is with return type 'grub_err_t' is about to return 'GRUB_ERR_NONE', it +should not set 'grub_errno' to that value. Only set 'grub_errno' in +cases where there is error situation. + + Simple exception forwarder. + grub_err_t + forwarding_example (void) + { + /* Call function that might cause exception. */ + foobar (); + + /* No special exception handler, just forward possible exceptions. */ + if (grub_errno != GRUB_ERR_NONE) + { + return grub_errno; + } + + /* All is OK, do more processing. */ + + /* Return OK signal, to caller. */ + return GRUB_ERR_NONE; + } + + Error reporting has two components, the actual error code (of type +'grub_err_t') and textual message that will be displayed to user. List +of valid error codes is listed in header file 'include/grub/err.h'. +Textual error message can contain any textual data. At time of writing, +error message can contain up to 256 characters (including terminating +NUL). To ease error reporting there is a helper function 'grub_error' +that allows easier formatting of error messages and should be used +instead of writing directly to global variables. + + Example of error reporting. + grub_err_t + failing_example () + { + return grub_error (GRUB_ERR_FILE_NOT_FOUND, + "Failed to read %s, tried %d times.", + "test.txt", + 10); + } + + If there is a special reason that error code does not need to be +taken account, 'grub_errno' can be zeroed back to 'GRUB_ERR_NONE'. In +cases like this all previous error codes should have been handled +correctly. This makes sure that there are no unhandled exceptions. + + Example of zeroing 'grub_errno'. + grub_err_t + probe_example () + { + /* Try to probe device type 1. */ + probe_for_device (); + if (grub_errno == GRUB_ERR_NONE) + { + /* Device type 1 was found on system. */ + register_device (); + return GRUB_ERR_NONE; + } + /* Zero out error code. */ + grub_errno = GRUB_ERR_NONE; + + /* No device type 1 found, try to probe device type 2. */ + probe_for_device2 (); + if (grub_errno == GRUB_ERR_NONE) + { + /* Device type 2 was found on system. */ + register_device2 (); + return GRUB_ERR_NONE; + } + /* Zero out error code. */ + grub_errno = GRUB_ERR_NONE; + + /* Return custom error message. */ + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "No device type 1 or 2 found."); + } + + Some times there is a need to continue processing even if there is a +error state in application. In situations like this, there is a needed +to save old error state and then call other functions that might fail. +To aid in this, there is a error stack implemented. Error state can be +pushed to error stack by calling function 'grub_error_push ()'. When +processing has been completed, 'grub_error_pop ()' can be used to pop +error state from stack. Error stack contains predefined amount of error +stack items. Error stack is protected for overflow and marks these +situations so overflow error does not get unseen. If there is no space +available to store error message, it is simply discarded and overflow +will be marked as happened. When overflow happens, it most likely will +corrupt error stack consistency as for pushed error there is no matching +pop, but overflow message will be shown to inform user about the +situation. Overflow message will be shown at time when prompt is about +to be drawn. + + Example usage of error stack. + /* Save possible old error message. */ + grub_error_push (); + + /* Do your stuff here. */ + call_possibly_failing_function (); + + if (grub_errno != GRUB_ERR_NONE) + { + /* Inform rest of the code that there is error (grub_errno + is set). There is no pop here as we want both error states + to be displayed. */ + return; + } + + /* Restore old error state by popping previous item from stack. */ + grub_error_pop (); + + +File: grub-dev.info, Node: Stack and heap size, Next: BIOS port memory map, Prev: Error Handling, Up: Top + +7 Stack and heap size +********************* + +On emu stack and heap are just normal host OS stack and heap. Stack is +typically 8 MiB although it's OS-dependent. + + On i386-pc, i386-coreboot, i386-qemu and i386-multiboot the stack is +60KiB. All available space between 1MiB and 4GiB marks is part of heap. + + On *-xen stack is 4MiB. If compiled for x86-64 with GCC 4.4 or later +adressable space is unlimited. When compiled for x86-64 with older GCC +version adressable space is limited to 2GiB. When compiling for i386 +adressable space is limited to 4GiB. All adressable pages except the +ones for stack, GRUB binary, special pages and page table are in the +heap. + + On *-efi GRUB uses same stack as EFI. If compiled for x86-64 with GCC +4.4 or later adressable space is unlimited. When compiled for x86-64 +with older GCC version adressable space is limited to 2GiB. For all +other platforms adressable space is limited to 4GiB. GRUB allocates +pages from EFI for its heap, at most 1.6 GiB. + + On i386-ieee1275 and powerpc-ieee1275 GRUB uses same stack as +IEEE1275. It allocates at most 32MiB for its heap. + + On sparc64-ieee1275 stack is 256KiB and heap is 2MiB. + + On mips(el)-qemu_mips and mipsel-loongson stack is 2MiB (everything +below GRUB image) and everything above GRUB image (from 2MiB + kernel +size) until 256MiB is part of heap. + + On mips-arc stack is 2MiB (everything below GRUB image) and +everything above GRUB image(from 2MiB + kernel size) until 128MiB is +part of heap. + + On mipsel-arc stack is 2MiB (everything below GRUB image which is not +part of ARC) and everything above GRUB image (from 7MiB + kernel size) +until 256MiB is part of heap. + + On arm-uboot stack is 256KiB and heap is 2MiB. + + In short: + +Platform Stack Heap +-------------------------------------------------------------------- +emu 8 MiB ? +i386-pc 60 KiB < 4 GiB +i386-coreboot60 KiB < 4 GiB +i386-multiboot60 KiB < 4 GiB +i386-qemu 60 KiB < 4 GiB +*-efi ? < 1.6 GiB +i386-ieee1275? < 32 MiB +powerpc-ieee1275? < 32 MiB +sparc64-ieee1275256KiB 2 MiB +arm-uboot 256KiB 2 MiB +mips(el)-qemu_mips2MiB 253 MiB +mipsel-loongson2MiB 253 MiB +mips-arc 2MiB 125 MiB +mipsel-arc 2MiB 248 MiB +x86_64-xen 4MiB unlimited +(GCC >= +4.4) +x86_64-xen 4MiB < 2GiB +(GCC < +4.4) +i386-xen 4MiB < 4GiB + + +File: grub-dev.info, Node: BIOS port memory map, Next: Video Subsystem, Prev: Stack and heap size, Up: Top + +8 BIOS port memory map +********************** + +Start End Usage +-------------------------------------------------------------------- +0 0x1000 - 1 BIOS and real mode interrupts +0x07BE 0x07FF Partition table passed to another + boot loader +? 0x2000 - 1 Real mode stack +0x7C00 0x7D00 - 1 Boot sector +0x8000 ? GRUB kernel +0x68000 0x71000 - 1 Disk buffer +? 0x80000 - 1 Protected mode stack +? 0xA0000 - 1 Extended BIOS Data Area +0xA0000 0xC0000 - 1 Video RAM +0xC0000 0x100000 - 1 BIOS +0x100000 ? Heap and module code + + +File: grub-dev.info, Node: Video Subsystem, Next: PFF2 Font File Format, Prev: BIOS port memory map, Up: Top + +9 Video Subsystem +***************** + +This document contains specification for Video Subsystem for GRUB2. +Currently only the usage interface is described in this document. +Internal structure of how video drivers are registering and how video +driver manager works are not included here. + +* Menu: + +* Video API:: +* Example usage of Video API:: +* Bitmap API:: + + +File: grub-dev.info, Node: Video API, Next: Example usage of Video API, Up: Video Subsystem + +9.1 Video API +============= + +9.1.1 grub_video_setup +---------------------- + + * Prototype: + grub_err_t + grub_video_setup (unsigned int width, unsigned int height, unsigned int mode_type); + * Description: + + Driver will use information provided to it to select best possible + video mode and switch to it. Supported values for 'mode_type' are + 'GRUB_VIDEO_MODE_TYPE_INDEX_COLOR' for index color modes, + 'GRUB_VIDEO_MODE_TYPE_RGB' for direct RGB color modes and + 'GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED' for double buffering. When + requesting RGB mode, highest bits per pixel mode will be selected. + When requesting Index color mode, mode with highest number of + colors will be selected. If all parameters are specified as zero, + video adapter will try to figure out best possible mode and + initialize it, platform specific differences are allowed here. If + there is no mode matching request, error X will be returned. If + there are no problems, function returns 'GRUB_ERR_NONE'. + + This function also performs following task upon succesful mode + switch. Active rendering target is changed to screen and viewport + is maximized to allow whole screen to be used when performing + graphics operations. In RGB modes, emulated palette gets 16 + entries containing default values for VGA palette, other colors are + defined as black. When switching to Indexed Color mode, driver may + set default VGA palette to screen if the video card allows the + operation. + +9.1.2 grub_video_restore +------------------------ + + * Prototype: + + grub_err_t + grub_video_restore (void); + * Description: + + Video subsystem will deinitialize activated video driver to restore + old state of video device. This can be used to switch back to text + mode. + +9.1.3 grub_video_get_info +------------------------- + + * Prototype: + + grub_err_t + grub_video_get_info (struct grub_video_mode_info *mode_info); + struct grub_video_mode_info + { + /* Width of the screen. */ + unsigned int width; + /* Height of the screen. */ + unsigned int height; + /* Mode type bitmask. Contains information like is it Index color or + RGB mode. */ + unsigned int mode_type; + /* Bits per pixel. */ + unsigned int bpp; + /* Bytes per pixel. */ + unsigned int bytes_per_pixel; + /* Pitch of one scanline. How many bytes there are for scanline. */ + unsigned int pitch; + /* In index color mode, number of colors. In RGB mode this is 256. */ + unsigned int number_of_colors; + /* Optimization hint how binary data is coded. */ + enum grub_video_blit_format blit_format; + /* How many bits are reserved for red color. */ + unsigned int red_mask_size; + /* What is location of red color bits. In Index Color mode, this is 0. */ + unsigned int red_field_pos; + /* How many bits are reserved for green color. */ + unsigned int green_mask_size; + /* What is location of green color bits. In Index Color mode, this is 0. */ + unsigned int green_field_pos; + /* How many bits are reserved for blue color. */ + unsigned int blue_mask_size; + /* What is location of blue color bits. In Index Color mode, this is 0. */ + unsigned int blue_field_pos; + /* How many bits are reserved in color. */ + unsigned int reserved_mask_size; + /* What is location of reserved color bits. In Index Color mode, + this is 0. */ + unsigned int reserved_field_pos; + }; + * Description: + + Software developer can use this function to query properties of + active rendering taget. Information provided here can be used by + other parts of GRUB, like image loaders to convert loaded images to + correct screen format to allow more optimized blitters to be used. + If there there is no configured video driver with active screen, + error 'GRUB_ERR_BAD_DEVICE' is returned, otherwise 'mode_info' is + filled with valid information and 'GRUB_ERR_NONE' is returned. + +9.1.4 grub_video_get_blit_format +-------------------------------- + + * Prototype: + + enum grub_video_blit_format + grub_video_get_blit_format (struct grub_video_mode_info *mode_info); + enum grub_video_blit_format + { + /* Follow exactly field & mask information. */ + GRUB_VIDEO_BLIT_FORMAT_RGBA, + /* Make optimization assumption. */ + GRUB_VIDEO_BLIT_FORMAT_R8G8B8A8, + /* Follow exactly field & mask information. */ + GRUB_VIDEO_BLIT_FORMAT_RGB, + /* Make optimization assumption. */ + GRUB_VIDEO_BLIT_FORMAT_R8G8B8, + /* When needed, decode color or just use value as is. */ + GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR + }; + * Description: + + Used to query how data could be optimized to suit specified video + mode. Returns exact video format type, or a generic one if there + is no definition for the type. For generic formats, use + 'grub_video_get_info' to query video color coding settings. + +9.1.5 grub_video_set_palette +---------------------------- + + * Prototype: + + grub_err_t + grub_video_set_palette (unsigned int start, unsigned int count, struct grub_video_palette_data *palette_data); + struct grub_video_palette_data + { + grub_uint8_t r; /* Red color value (0-255). */ + grub_uint8_t g; /* Green color value (0-255). */ + grub_uint8_t b; /* Blue color value (0-255). */ + grub_uint8_t a; /* Reserved bits value (0-255). */ + }; + * Description: + + Used to setup indexed color palettes. If mode is RGB mode, colors + will be set to emulated palette data. In Indexed Color modes, + palettes will be set to hardware. Color values will be converted + to suit requirements of the video mode. 'start' will tell what + hardware color index (or emulated color index) will be set to + according information in first indice of 'palette_data', after that + both hardware color index and 'palette_data' index will be + incremented until 'count' number of colors have been set. + +9.1.6 grub_video_get_palette +---------------------------- + + * Prototype: + + grub_err_t + grub_video_get_palette (unsigned int start, unsigned int count, struct grub_video_palette_data *palette_data); + struct grub_video_palette_data + { + grub_uint8_t r; /* Red color value (0-255). */ + grub_uint8_t g; /* Green color value (0-255). */ + grub_uint8_t b; /* Blue color value (0-255). */ + grub_uint8_t a; /* Reserved bits value (0-255). */ + }; + * Description: + + Used to query indexed color palettes. If mode is RGB mode, colors + will be copied from emulated palette data. In Indexed Color modes, + palettes will be read from hardware. Color values will be + converted to suit structure format. 'start' will tell what + hardware color index (or emulated color index) will be used as a + source for first indice of 'palette_data', after that both hardware + color index and 'palette_data' index will be incremented until + 'count' number of colors have been read. + +9.1.7 grub_video_set_area_status +-------------------------------- + + * Prototype: + grub_err_t + grub_video_set_area_status (grub_video_area_status_t area_status); + enum grub_video_area_status_t + { + GRUB_VIDEO_AREA_DISABLED, + GRUB_VIDEO_AREA_ENABLED + }; + + * Description: + + Used to set area drawing mode for redrawing the specified region. + Draw commands are performed in the intersection of the viewport and + the region called area. Coordinates remain related to the + viewport. If draw commands try to draw over the area, they are + clipped. Set status to DISABLED if you need to draw everything. + Set status to ENABLED and region to the desired rectangle to redraw + everything inside the region leaving everything else intact. + Should be used for redrawing of active elements. + +9.1.8 grub_video_get_area_status +-------------------------------- + + * Prototype: + grub_err_r + grub_video_get_area_status (grub_video_area_status_t *area_status); + + * Description: Used to query the area status. + +9.1.9 grub_video_set_viewport +----------------------------- + + * Prototype: + + grub_err_t + grub_video_set_viewport (unsigned int x, unsigned int y, unsigned int width, unsigned int height); + * Description: + + Used to specify viewport where draw commands are performed. When + viewport is set, all draw commands coordinates relate to those + specified by 'x' and 'y'. If draw commands try to draw over + viewport, they are clipped. If developer requests larger than + possible viewport, width and height will be clamped to fit screen. + If 'x' and 'y' are out of bounds, all functions drawing to screen + will not be displayed. In order to maximize viewport, use + 'grub_video_get_info' to query actual screen dimensions and provide + that information to this function. + +9.1.10 grub_video_get_viewport +------------------------------ + + * Prototype: + + grub_err_t + grub_video_get_viewport (unsigned int *x, unsigned int *y, unsigned int *width, unsigned int *height); + * Description: + + Used to query current viewport dimensions. Software developer can + use this to choose best way to render contents of the viewport. + +9.1.11 grub_video_set_region +---------------------------- + + * Prototype: + + grub_err_t + grub_video_set_region (unsigned int x, unsigned int y, unsigned int width, unsigned int height); + * Description: + + Used to specify the region of the screen which should be redrawn. + Use absolute values. When the region is set and area status is + ENABLE all draw commands will be performed inside the interseption + of region and viewport named area. If draw commands try to draw + over viewport, they are clipped. If developer requests larger than + possible region, width and height will be clamped to fit screen. + Should be used for redrawing of active elements. + +9.1.12 grub_video_get_region +---------------------------- + + * Prototype: + + grub_err_t + grub_video_get_region (unsigned int *x, unsigned int *y, unsigned int *width, unsigned int *height); + * Description: + + Used to query current region dimensions. + +9.1.13 grub_video_map_color +--------------------------- + + * Prototype: + + grub_video_color_t + grub_video_map_color (grub_uint32_t color_name); + * Description: + + Map color can be used to support color themes in GRUB. There will + be collection of color names that can be used to query actual + screen mapped color data. Examples could be + 'GRUB_COLOR_CONSOLE_BACKGROUND', 'GRUB_COLOR_CONSOLE_TEXT'. The + actual color defines are not specified at this point. + +9.1.14 grub_video_map_rgb +------------------------- + + * Prototype: + + grub_video_color_t + grub_video_map_rgb (grub_uint8_t red, grub_uint8_t green, grub_uint8_t blue); + * Description: + + Map RGB values to compatible screen color data. Values are + expected to be in range 0-255 and in RGB modes they will be + converted to screen color data. In index color modes, index color + palette will be searched for specified color and then index is + returned. + +9.1.15 grub_video_map_rgba +-------------------------- + + * Prototype: + + grub_video_color_t + grub_video_map_rgba (grub_uint8_t red, grub_uint8_t green, grub_uint8_t blue, grub_uint8_t alpha); + * Description: + + Map RGBA values to compatible screen color data. Values are + expected to be in range 0-255. In RGBA modes they will be + converted to screen color data. In index color modes, index color + palette will be searched for best matching color and its index is + returned. + +9.1.16 grub_video_unmap_color +----------------------------- + + * Prototype: + + grub_err_t + grub_video_unmap_color (grub_video_color_t color, grub_uint8_t *red, grub_uint8_t *green, grub_uint8_t *blue, grub_uint8_t *alpha); + * Description: + + Unmap color value from 'color' to color channels in 'red', 'green', + 'blue' and 'alpha'. Values will be in range 0-255. Active + rendering target will be used for color domain. In case alpha + information is not available in rendering target, it is assumed to + be opaque (having value 255). + +9.1.17 grub_video_fill_rect +--------------------------- + + * Prototype: + + grub_err_t + grub_video_fill_rect (grub_video_color_t color, int x, int y, unsigned int width, unsigned int height); + * Description: + + Fill specified area limited by given coordinates within specified + viewport. Negative coordinates are accepted in order to allow easy + moving of rectangle within viewport. If coordinates are negative, + area of the rectangle will be shrinken to follow size limits of the + viewport. + + Software developer should use either 'grub_video_map_color', + 'grub_video_map_rgb' or 'grub_video_map_rgba' to map requested + color to 'color' parameter. + +9.1.18 grub_video_blit_glyph +---------------------------- + + * Prototype: + + grub_err_t + grub_video_blit_glyph (struct grub_font_glyph *glyph, grub_video_color_t color, int x, int y); + struct grub_font_glyph { + /* TBD. */ + }; + * Description: + + Used to blit glyph to viewport in specified coodinates. If glyph + is at edge of viewport, pixels outside of viewport will be clipped + out. Software developer should use either 'grub_video_map_rgb' or + 'grub_video_map_rgba' to map requested color to 'color' parameter. + +9.1.19 grub_video_blit_bitmap +----------------------------- + + * Prototype: + + grub_err_t + grub_video_blit_bitmap (struct grub_video_bitmap *bitmap, enum grub_video_blit_operators oper, int x, int y, int offset_x, int offset_y, unsigned int width, unsigned int height); + struct grub_video_bitmap + { + /* TBD. */ + }; + + enum grub_video_blit_operators + { + GRUB_VIDEO_BLIT_REPLACE, + GRUB_VIDEO_BLIT_BLEND + }; + * Description: + + Used to blit bitmap to viewport in specified coordinates. If part + of bitmap is outside of viewport region, it will be clipped out. + Offsets affect bitmap position where data will be copied from. + Negative values for both viewport coordinates and bitmap offset + coordinates are allowed. If data is looked out of bounds of + bitmap, color value will be assumed to be transparent. If viewport + coordinates are negative, area of the blitted rectangle will be + shrinken to follow size limits of the viewport and bitmap. + Blitting operator 'oper' specifies should source pixel replace data + in screen or blend with pixel alpha value. + + Software developer should use 'grub_video_bitmap_create' or + 'grub_video_bitmap_load' to create or load bitmap data. + +9.1.20 grub_video_blit_render_target +------------------------------------ + + * Prototype: + + grub_err_t + grub_video_blit_render_target (struct grub_video_render_target *source, enum grub_video_blit_operators oper, int x, int y, int offset_x, int offset_y, unsigned int width, unsigned int height); + struct grub_video_render_target { + /* This is private data for video driver. Should not be accessed from elsewhere directly. */ + }; + + enum grub_video_blit_operators + { + GRUB_VIDEO_BLIT_REPLACE, + GRUB_VIDEO_BLIT_BLEND + }; + * Description: + + Used to blit source render target to viewport in specified + coordinates. If part of source render target is outside of + viewport region, it will be clipped out. If blitting operator is + specified and source contains alpha values, resulting pixel color + components will be calculated using formula ((src_color * + src_alpha) + (dst_color * (255 - src_alpha)) / 255, if target + buffer has alpha, it will be set to src_alpha. Offsets affect + render target position where data will be copied from. If data is + looked out of bounds of render target, color value will be assumed + to be transparent. Blitting operator 'oper' specifies should + source pixel replace data in screen or blend with pixel alpha + value. + +9.1.21 grub_video_scroll +------------------------ + + * Prototype: + + grub_err_t + grub_video_scroll (grub_video_color_t color, int dx, int dy); + * Description: + + Used to scroll viewport to specified direction. New areas are + filled with specified color. This function is used when screen is + scroller up in video terminal. + +9.1.22 grub_video_swap_buffers +------------------------------ + + * Prototype: + + grub_err_t + grub_video_swap_buffers (void); + * Description: + + If double buffering is enabled, this swaps frontbuffer and + backbuffer, in order to show values drawn to back buffer. Video + driver is free to choose how this operation is techincally done. + +9.1.23 grub_video_create_render_target +-------------------------------------- + + * Prototype: + + grub_err_t + grub_video_create_render_target (struct grub_video_render_target **result, unsigned int width, unsigned int height, unsigned int mode_type); + struct grub_video_render_target { + /* This is private data for video driver. Should not be accessed from elsewhere directly. */ + }; + * Description: + + Driver will use information provided to it to create best fitting + render target. 'mode_type' will be used to guide on selecting what + features are wanted for render target. Supported values for + 'mode_type' are 'GRUB_VIDEO_MODE_TYPE_INDEX_COLOR' for index color + modes, 'GRUB_VIDEO_MODE_TYPE_RGB' for direct RGB color modes and + 'GRUB_VIDEO_MODE_TYPE_ALPHA' for alpha component. + +9.1.24 grub_video_delete_render_target +-------------------------------------- + + * Prototype: + + grub_err_t + grub_video_delete_render_target (struct grub_video_render_target *target); + * Description: + + Used to delete previously created render target. If 'target' + contains 'NULL' pointer, nothing will be done. If render target is + correctly destroyed, GRUB_ERR_NONE is returned. + +9.1.25 grub_video_set_active_render_target +------------------------------------------ + + * Prototype: + + grub_err_t + grub_video_set_active_render_target (struct grub_video_render_target *target); + * Description: + + Sets active render target. If this comand is successful all + drawing commands will be done to specified 'target'. There is also + special values for target, 'GRUB_VIDEO_RENDER_TARGET_DISPLAY' used + to reference screen's front buffer, + 'GRUB_VIDEO_RENDER_TARGET_FRONT_BUFFER' used to reference screen's + front buffer (alias for 'GRUB_VIDEO_RENDER_TARGET_DISPLAY') and + 'GRUB_VIDEO_RENDER_TARGET_BACK_BUFFER' used to reference back + buffer (if double buffering is enabled). If render target is + correclty switched GRUB_ERR_NONE is returned. In no any event + shall there be non drawable active render target. + +9.1.26 grub_video_get_active_render_target +------------------------------------------ + + * Prototype: + + grub_err_t + grub_video_get_active_render_target (struct grub_video_render_target **target); + * Description: + + Returns currently active render target. It returns value in + 'target' that can be subsequently issued back to + 'grub_video_set_active_render_target'. + + +File: grub-dev.info, Node: Example usage of Video API, Next: Bitmap API, Prev: Video API, Up: Video Subsystem + +9.2 Example usage of Video API +============================== + +9.2.1 Example of screen setup +----------------------------- + + grub_err_t rc; + /* Try to initialize video mode 1024 x 768 with direct RGB. */ + rc = grub_video_setup (1024, 768, GRUB_VIDEO_MODE_TYPE_RGB); + if (rc != GRUB_ERR_NONE) + { + /* Fall back to standard VGA Index Color mode. */ + rc = grub_video_setup (640, 480, GRUB_VIDEO_MODE_TYPE_INDEX); + if (rc != GRUB_ERR_NONE) + { + /* Handle error. */ + } + } + +9.2.2 Example of setting up console viewport +-------------------------------------------- + + grub_uint32_t x, y, width, height; + grub_video_color_t color; + struct grub_font_glyph glyph; + grub_err_t rc; + /* Query existing viewport. */ + grub_video_get_viewport (&x, &y, &width, &height); + /* Fill background. */ + color = grub_video_map_color (GRUB_COLOR_BACKGROUND); + grub_video_fill_rect (color, 0, 0, width, height); + /* Setup console viewport. */ + grub_video_set_viewport (x + 10, y + 10, width - 20, height - 20); + grub_video_get_viewport (&x, &y, &width, &height); + color = grub_video_map_color (GRUB_COLOR_CONSOLE_BACKGROUND); + grub_video_fill_rect (color, 0, 0, width, height); + /* Draw text to viewport. */ + color = grub_video_map_color (GRUB_COLOR_CONSOLE_TEXT); + grub_font_get_glyph ('X', &glyph); + grub_video_blit_glyph (&glyph, color, 0, 0); + + +File: grub-dev.info, Node: Bitmap API, Prev: Example usage of Video API, Up: Video Subsystem + +9.3 Bitmap API +============== + +9.3.1 grub_video_bitmap_create +------------------------------ + + * Prototype: + grub_err_t grub_video_bitmap_create (struct grub_video_bitmap **bitmap, unsigned int width, unsigned int height, enum grub_video_blit_format blit_format) + + * Description: + + Creates a new bitmap with given dimensions and blitting format. + Allocated bitmap data can then be modified freely and finally + blitted with 'grub_video_blit_bitmap' to rendering target. + +9.3.2 grub_video_bitmap_destroy +------------------------------- + + * Prototype: + grub_err_t grub_video_bitmap_destroy (struct grub_video_bitmap *bitmap); + + * Description: + + When bitmap is no longer needed, it can be freed from memory using + this command. 'bitmap' is previously allocated bitmap with + 'grub_video_bitmap_create' or loaded with 'grub_video_bitmap_load'. + +9.3.3 grub_video_bitmap_load +---------------------------- + + * Prototype: + grub_err_t grub_video_bitmap_load (struct grub_video_bitmap **bitmap, const char *filename); + + * Description: + + Tries to load given bitmap ('filename') using registered bitmap + loaders. In case bitmap format is not recognized or supported + error 'GRUB_ERR_BAD_FILE_TYPE' is returned. + +9.3.4 grub_video_bitmap_get_width +--------------------------------- + + * Prototype: + unsigned int grub_video_bitmap_get_width (struct grub_video_bitmap *bitmap); + + * Description: + + Returns bitmap width. + +9.3.5 grub_video_bitmap_get_height +---------------------------------- + + * Prototype: + unsigned int grub_video_bitmap_get_height (struct grub_video_bitmap *bitmap); + + * Description: + + Return bitmap height. + +9.3.6 grub_video_bitmap_get_mode_info +------------------------------------- + + * Prototype: + void grub_video_bitmap_get_mode_info (struct grub_video_bitmap *bitmap, struct grub_video_mode_info *mode_info); + + * Description: + + Returns bitmap format details in form of 'grub_video_mode_info'. + +9.3.7 grub_video_bitmap_get_data +-------------------------------- + + * Prototype: + void *grub_video_bitmap_get_data (struct grub_video_bitmap *bitmap); + + * Description: + + Return pointer to bitmap data. Contents of the pointed data can be + freely modified. There is no extra protection against going off + the bounds so you have to be carefull how to access the data. + + +File: grub-dev.info, Node: PFF2 Font File Format, Next: Graphical Menu Software Design, Prev: Video Subsystem, Up: Top + +10 PFF2 Font File Format +************************ + +* Menu: + +* Introduction:: +* File Structure:: +* Font Metrics:: + + +File: grub-dev.info, Node: Introduction, Next: File Structure, Up: PFF2 Font File Format + +10.1 Introduction +================= + +The goal of this format is to provide a bitmap font format that is +simple to use, compact, and cleanly supports Unicode. + +10.1.1 Goals of the GRUB Font Format +------------------------------------ + + * Simple to read and use. Since GRUB will only be reading the font + files, we are more concerned with making the code to read the font + simple than we are with writing the font. + + * Compact storage. The fonts will generally be stored in a small + boot partition where GRUB is located, and this may be on a + removable storage device such as a CD or USB flash drive where + space is more limited than it is on most hard drives. + + * Unicode. GRUB should not have to deal with multiple character + encodings. The font should always use Unicode character codes for + simple internationalization. + +10.1.2 Why Another Font Format? +------------------------------- + +There are many existing bitmap font formats that GRUB could use. +However, there are aspects of these formats that may make them less than +suitable for use in GRUB at this time: + +'BDF' + Inefficient storage; uses ASCII to describe properties and + hexadecimal numbers in ASCII for the bitmap rows. +'PCF' + Many format variations such as byte order and bitmap padding (rows + padded to byte, word, etc.) would result in more complex code to + handle the font format. + + +File: grub-dev.info, Node: File Structure, Next: Font Metrics, Prev: Introduction, Up: PFF2 Font File Format + +10.2 File Structure +=================== + +A file *section* consists of a 4-byte name, a 32-bit big-endian length +(not including the name or length), and then LENGTH more +section-type-specific bytes. + + The standard file extension for PFF2 font files is '.pf2'. + +10.2.1 Section Types +-------------------- + +'FILE' + *File type ID* (ASCII string). This must be the first section in + the file. It has length 4 and the contents are the four bytes of + the ASCII string 'PFF2'. + +'NAME' + *Font name* (ASCII string). This is the full font name including + family, weight, style, and point size. For instance, "Helvetica + Bold Italic 14". + +'FAMI' + *Font family name* (ASCII string). For instance, "Helvetica". + This should be included so that intelligent font substitution can + take place. + +'WEIG' + *Font weight* (ASCII string). Valid values are 'bold' and + 'normal'. This should be included so that intelligent font + substitution can take place. + +'SLAN' + *Font slant* (ASCII string). Valid values are 'italic' and + 'normal'. This should be included so that intelligent font + substitution can take place. + +'PTSZ' + *Font point size* (uint16be). + +'MAXW' + *Maximum character width in pixels* (uint16be). + +'MAXH' + *Maximum character height in pixels* (uint16be). + +'ASCE' + *Ascent in pixels* (uint16be). *Note Font Metrics::, for details. + +'DESC' + *Descent in pixels* (uint16be). *Note Font Metrics::, for details. + +'CHIX' + *Character index.* The character index begins with a 32-bit + big-endian unsigned integer indicating the total size of the + section, not including this size value. For each character, there + is an instance of the following entry structure: + + * *Unicode code point.* (32-bit big-endian integer.) + + * *Storage flags.* (byte.) + + * Bits 2..0: + + If equal to 000 binary, then the character data is stored + uncompressed beginning at the offset indicated by the + character's *offset* value. + + If equal to 001 binary, then the character data is stored + within a compressed character definition block that + begins at the offset within the file indicated by the + character's *offset* value. + + * *Offset.* (32-bit big-endian integer.) + + A marker that indicates the remainder of the file is data + accessed via the character index (CHIX) section. When reading + this font file, the rest of the file can be ignored when + scanning the sections. The length should be set to -1 + (0xFFFFFFFF). + + Supported data structures: + + Character definition Each character definition consists of: + + * *Width.* Width of the bitmap in pixels. The bitmap's + extents represent the glyph's bounding box. 'uint16be'. + + * *Height.* Height of the bitmap in pixels. The bitmap's + extents represent the glyph's bounding box. 'uint16be'. + + * *X offset.* The number of pixels to shift the bitmap by + horizontally before drawing the character. 'int16be'. + + * *Y offset.* The number of pixels to shift the bitmap by + vertically before drawing the character. 'int16be'. + + * *Device width.* The number of pixels to advance + horizontally from this character's origin to the origin + of the next character. 'int16be'. + + * *Bitmap data.* This is encoded as a string of bits. It + is organized as a row-major, top-down, left-to-right + bitmap. The most significant bit of each byte is taken + to be the leftmost or uppermost bit in the byte. For the + sake of compact storage, rows are not padded to byte + boundaries (i.e., a single byte may contain bits + belonging to multiple rows). The last byte of the bitmap + *is* padded with zero bits in the bits positions to the + right of the last used bit if the bitmap data does not + fill the last byte. + + The length of the *bitmap data* field is (WIDTH * HEIGHT + + 7) / 8 using integer arithmetic, which is equivalent to + ceil(WIDTH * HEIGHT / 8) using real number arithmetic. + + It remains to be determined whether bitmap fonts usually + make all glyph bitmaps the same height, or if smaller + glyphs are stored with bitmaps having a lesser height. + In the latter case, the baseline would have to be used to + calculate the location the bitmap should be anchored at + on screen. + + +File: grub-dev.info, Node: Font Metrics, Prev: File Structure, Up: PFF2 Font File Format + +10.3 Font Metrics +================= + + * Ascent. The distance from the baseline to the top of most + characters. Note that in some cases characters may extend above + the ascent. + + * Descent. The distance from the baseline to the bottom of most + characters. Note that in some cases characters may extend below + the descent. + + * Leading. The amount of space, in pixels, to leave between the + descent of one line of text and the ascent of the next line. This + metrics is not specified in the current file format; instead, the + font rendering engine calculates a reasonable leading value based + on the other font metrics. + + * Horizonal leading. The amount of space, in pixels, to leave + horizontally between the left and right edges of two adjacent + glyphs. The *device width* field determines the effective leading + value that is used to render the font. + +[image src="font_char_metrics.png" text="Please fill this in."] + + An illustration of how the various font metrics apply to characters. + + +File: grub-dev.info, Node: Graphical Menu Software Design, Next: Copying This Manual, Prev: PFF2 Font File Format, Up: Top + +11 Graphical Menu Software Design +********************************* + +* Menu: + +* Introduction_2:: +* Startup Sequence:: +* GUI Components:: +* Command Line Window:: + + +File: grub-dev.info, Node: Introduction_2, Next: Startup Sequence, Up: Graphical Menu Software Design + +11.1 Introduction +================= + +The 'gfxmenu' module provides a graphical menu interface for GRUB 2. It +functions as an alternative to the menu interface provided by the +'normal' module, which uses the grub terminal interface to display a +menu on a character-oriented terminal. + + The graphical menu uses the GRUB video API, which is currently for +the VESA BIOS extensions (VBE) 2.0+. This is supported on the i386-pc +platform. However, the graphical menu itself does not depend on using +VBE, so if another GRUB video driver were implemented, the 'gfxmenu' +graphical menu would work on the new video driver as well. + + +File: grub-dev.info, Node: Startup Sequence, Next: GUI Components, Prev: Introduction_2, Up: Graphical Menu Software Design + +11.2 Startup Sequence +===================== + + * grub_enter_normal_mode [normal/main.c] + * grub_normal_execute [normal/main.c] + * read_config_file [normal/main.c] + * (When 'gfxmenu.mod' is loaded with 'insmod', it will call + 'grub_menu_viewer_register()' to register itself.) + * GRUB_MOD_INIT (gfxmenu) [gfxmenu/gfxmenu.c] + * grub_menu_viewer_register [kern/menu_viewer.c] + * grub_menu_viewer_show_menu [kern/menu_viewer.c] + * get_current_menu_viewer() [kern/menu_viewer.c] + * show_menu() [gfxmenu/gfxmenu.c] + * grub_gfxmenu_model_new [gfxmenu/model.c] + * grub_gfxmenu_view_new [gfxmenu/view.c] + * set_graphics_mode [gfxmenu/view.c] + * grub_gfxmenu_view_load_theme [gfxmenu/theme_loader.c] + + +File: grub-dev.info, Node: GUI Components, Next: Command Line Window, Prev: Startup Sequence, Up: Graphical Menu Software Design + +11.3 GUI Components +=================== + +The graphical menu implements a GUI component system that supports a +container-based layout system. Components can be added to containers, +and containers (which are a type of component) can then be added to +other containers, to form a tree of components. Currently, the root +component of this tree is a 'canvas' component, which allows manual +layout of its child components. + + Components (non-container): + + * label + * image + * progress_bar + * circular_progress + * list (currently hard coded to be a boot menu list) + + Containers: + + * canvas + * hbox + * vbox + + The GUI component instances are created by the theme loader in +'gfxmenu/theme_loader.c' when a theme is loaded. Theme files specify +statements such as '+vbox{ +label { text="Hello" } +label{ text="World" +} }' to add components to the component tree root. By nesting the +component creation statements in the theme file, the instantiated +components are nested the same way. + + When a component is added to a container, that new child is +considered *owned* by the container. Great care should be taken if the +caller retains a reference to the child component, since it will be +destroyed if its parent container is destroyed. A better choice instead +of storing a pointer to the child component is to use the component ID +to find the desired component. Component IDs do not have to be unique +(it is often useful to have multiple components with an ID of +"__timeout__", for instance). + + In order to access and use components in the component tree, there +are two functions (defined in 'gfxmenu/gui_util.c') that are +particularly useful: + + * 'grub_gui_find_by_id (root, id, callback, userdata)': + + This function ecursively traverses the component tree rooted at + ROOT, and for every component that has an ID equal to ID, calls the + function pointed to by CALLBACK with the matching component and the + void pointer USERDATA as arguments. The callback function can do + whatever is desired to use the component passed in. + + * 'grub_gui_iterate_recursively (root, callback, userdata)': + + This function calls the function pointed to by CALLBACK for every + component that is a descendant of ROOT in the component tree. When + the callback function is called, the component and the void pointer + USERDATA as arguments. The callback function can do whatever is + desired to use the component passed in. + + +File: grub-dev.info, Node: Command Line Window, Prev: GUI Components, Up: Graphical Menu Software Design + +11.4 Command Line Window +======================== + +The terminal window used to provide command line access within the +graphical menu is managed by 'gfxmenu/view.c'. The 'gfxterm' terminal +is used, and it has been modified to allow rendering to an offscreen +render target to allow it to be composed into the double buffering +system that the graphical menu view uses. This is bad for performance, +however, so it would probably be a good idea to make it possible to +temporarily disable double buffering as long as the terminal window is +visible. There are still unresolved problems that occur when commands +are executed from the terminal window that change the graphics mode. +It's possible that making 'grub_video_restore()' return to the graphics +mode that was in use before 'grub_video_setup()' was called might fix +some of the problems. + + +File: grub-dev.info, Node: Copying This Manual, Next: Index, Prev: Graphical Menu Software Design, Up: Top + +Appendix A Copying This Manual +****************************** + +* Menu: + +* GNU Free Documentation License:: License for copying this manual. + + +File: grub-dev.info, Node: GNU Free Documentation License, Up: Copying This Manual + +A.1 GNU Free Documentation License +================================== + + Version 1.2, November 2002 + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses terminated + so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + . + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. + +A.1.1 ADDENDUM: How to use this License for your documents +---------------------------------------------------------- + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: grub-dev.info, Node: Index, Prev: Copying This Manual, Up: Top + +Index +***** + +[index] +* Menu: + +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) + + + +Tag Table: +Node: Top641 +Node: Getting the source code1734 +Node: Coding style2695 +Node: Naming Conventions3104 +Node: Functions3389 +Node: Variables4263 +Node: Types5378 +Node: Macros5979 +Node: Comments6311 +Node: Multi-Line Comments7073 +Node: Finding your way around7704 +Node: Contributing Changes11020 +Node: Getting started12110 +Node: Typical Developer Experience16162 +Node: When you are approved for write access to project's files17204 +Node: Porting18637 +Node: Error Handling30400 +Node: Stack and heap size35492 +Node: BIOS port memory map38125 +Node: Video Subsystem38974 +Node: Video API39446 +Node: Example usage of Video API59841 +Node: Bitmap API61415 +Node: PFF2 Font File Format63932 +Node: Introduction64172 +Node: File Structure65675 +Node: Font Metrics70593 +Node: Graphical Menu Software Design71741 +Node: Introduction_272033 +Node: Startup Sequence72767 +Node: GUI Components73618 +Node: Command Line Window76218 +Node: Copying This Manual77170 +Node: GNU Free Documentation License77426 +Node: Index99819 + +End Tag Table diff --git a/docs/grub-dev.texi b/docs/grub-dev.texi new file mode 100644 index 000000000..a9f4de631 --- /dev/null +++ b/docs/grub-dev.texi @@ -0,0 +1,1968 @@ +\input texinfo +@c -*-texinfo-*- +@c %**start of header +@setfilename grub-dev.info +@include version-dev.texi +@settitle GNU GRUB Developers Manual @value{VERSION} +@c Unify all our little indices for now. +@syncodeindex fn cp +@syncodeindex vr cp +@syncodeindex ky cp +@syncodeindex pg cp +@syncodeindex tp cp +@c %**end of header + +@footnotestyle separate +@paragraphindent 3 +@finalout + +@copying +This developer manual is for GNU GRUB (version @value{VERSION}, +@value{UPDATED}). + +Copyright @copyright{} 1999,2000,2001,2002,2004,2005,2006,2008,2009,2010,2011 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections. +@end quotation +@end copying + +@dircategory Kernel +@direntry +* grub-dev: (grub-dev). The GRand Unified Bootloader Dev +@end direntry + +@setchapternewpage odd + +@titlepage +@sp 10 +@title the GNU GRUB developer manual +@subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}. +@author Yoshinori K. Okuji +@author Colin D Bennett +@author Vesa Jääskeläinen +@author Colin Watson +@author Robert Millan +@author Carles Pina +@c The following two commands start the copyright page. +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@c Output the table of contents at the beginning. +@contents + +@finalout +@headings double + +@ifnottex +@node Top +@top GNU GRUB developer manual + +This is the developer documentation of GNU GRUB, the GRand Unified Bootloader, +a flexible and powerful boot loader program for a wide range of +architectures. + +This edition documents version @value{VERSION}. + +@insertcopying +@end ifnottex + +@menu +* Getting the source code:: +* Coding style:: +* Finding your way around:: +* Contributing Changes:: +* Porting:: +* Error Handling:: +* Stack and heap size:: +* BIOS port memory map:: +* Video Subsystem:: +* PFF2 Font File Format:: +* Graphical Menu Software Design:: +* Copying This Manual:: Copying This Manual +* Index:: +@end menu + + +@node Getting the source code +@chapter Getting the source code + +GRUB is maintained using the @uref{GIT revision +control system}. To fetch: + +@example +git clone git://git.sv.gnu.org/grub.git +@end example + +Web access is available under +@example +http://git.savannah.gnu.org/cgit/grub.git/ +@end example + +The branches available are: + +@table @samp +@item master + Main development branch. +@item grub-legacy + GRUB 0.97 codebase. Kept for reference and legal reasons +@item multiboot + Multiboot specfication +@item multiboot2 + Multiboot2 specfication +@item developer branches + Prefixed with developer name. Every developer of a team manages his own branches. + Developer branches do not need changelog entries. +@end table + +Once you have used @kbd{git clone} to fetch an initial copy of a branch, you +can use @kbd{git pull} to keep it up to date. If you have modified your +local version, you may need to resolve conflicts when pulling. + +@node Coding style +@chapter Coding style +@c By YoshinoriOkuji, VesaJääskeläinen and ColinBennett + +Basically we follow the @uref{http://www.gnu.org/prep/standards_toc.html, GNU Coding Standards}. We define additional conventions for GRUB here. + +@menu +* Naming Conventions:: +* Functions:: +* Variables:: +* Types:: +* Macros:: +* Comments:: +* Multi-Line Comments:: +@end menu + +@node Naming Conventions +@section Naming Conventions + +All global symbols (i.e. functions, variables, types, and macros) must have the prefix grub_ or GRUB_. The all capital form is used only by macros. + +@node Functions +@section Functions + +If a function is global, its name must be prefixed with grub_ and must consist of only small letters. If the function belongs to a specific function module, the name must also be prefixed with the module name. For example, if a function is for file systems, its name is prefixed with grub_fs_. If a function is for FAT file system but not for all file systems, its name is prefixed with grub_fs_fat_. The hierarchy is noted this way. + +After a prefix, a function name must start with a verb (such as get or is). It must not be a noun. Some kind of abbreviation is permitted, as long as it wouldn't make code less readable (e.g. init). + +If a function is local, its name may not start with any prefix. It must start with a verb. + +@node Variables +@section Variables + +The rule is mostly the same as functions, as noted above. If a variable is global, its name must be prefixed with grub_ and must consist of only small letters. If the variable belongs to a specific function module, the name must also be prefixed with the module name. For example, if a function is for dynamic loading, its name is prefixed with grub_dl_. If a variable is for ELF but not for all dynamic loading systems, its name is prefixed with grub_dl_elf_. + +After a prefix, a variable name must start with a noun or an adjective (such as name or long) and it should end with a noun. Some kind of abbreviation is permitted, as long as it wouldn't make code less readable (e.g. i18n). + +If a variable is global in the scope of a single file (i.e. it is declared with static), its name may not start with any prefix. It must start with a noun or an adjective. + +If a variable is local, you may choose any shorter name, as long as it wouldn't make code less readable (e.g. i). + +@node Types +@section Types + +The name of a type must be prefixed with grub_ and must consist of only small letters. If the type belongs to a specific function module, the name must also be prefixed with the module name. For example, if a type is for OS loaders, its name is prefixed with grub_loader_. If a type is for Multiboot but not for all OS loaders, its name is prefixed with grub_loader_linux_. + +The name must be suffixed with _t, to emphasize the fact that it is a type but not a variable or a function. + +@node Macros +@section Macros + +If a macro is global, its name must be prefixed with GRUB_ and must consist of only large letters. Other rules are the same as functions or variables, depending on whether a macro is used like a function or a variable. + +@node Comments +@section Comments + +All comments shall be C-style comments, of the form @samp{/* @dots{} */}. + +Comments shall be placed only on a line by themselves. They shall not be placed together with code, variable declarations, or other non-comment entities. A comment should be placed immediately preceding the entity it describes. + +Acceptable: +@example +/* The page # that is the front buffer. */ +int displayed_page; +/* The page # that is the back buffer. */ +int render_page; +@end example + +Unacceptable: +@example +int displayed_page; /* The page # that is the front buffer. */ +int render_page; /* The page # that is the back buffer. */ +@end example + +@node Multi-Line Comments +@section Multi-Line Comments + +Comments spanning multiple lines shall be formatted with all lines after the first aligned with the first line. + +Asterisk characters should not be repeated a the start of each subsequent line. + +Acceptable: +@example +/* This is a comment + which spans multiple lines. + It is long. */ +@end example + +Unacceptable: +@example +/* + * This is a comment + * which spans multiple lines. + * It is long. */ +@end example + +The opening @samp{/*} and closing @samp{*/} should be placed together on a line with text. + +@node Finding your way around +@chapter Finding your way around + +Here is a brief map of the GRUB code base. + +GRUB uses Autoconf and Automake, with most of the Automake input generated +by a Python script. The top-level build rules are in @file{configure.ac}, +@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each +block in a @file{*.def} file represents a build target, and specifies the +source files used to build it on various platforms. The @file{*.def} files +are processed into Automake input by @file{gentpl.py} (which you only need +to look at if you are extending the build system). If you are adding a new +module which follows an existing pattern, such as a new command or a new +filesystem implementation, it is usually easiest to grep +@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an +existing example of that pattern to find out where it should be added. + +In general, code that may be run at boot time is in a subdirectory of +@file{grub-core}, while code that is only run from within a full operating +system is in a subdirectory of the top level. + +Low-level boot code, such as the MBR implementation on PC BIOS systems, is +in the @file{grub-core/boot/} directory. + +The GRUB kernel is in @file{grub-core/kern/}. This contains core facilities +such as the device, disk, and file frameworks, environment variable +handling, list processing, and so on. The kernel should contain enough to +get up to a rescue prompt. Header files for kernel facilities, among +others, are in @file{include/}. + +Terminal implementations are in @file{grub-core/term/}. + +Disk access code is spread across @file{grub-core/disk/} (for accessing the +disk devices themselves), @file{grub-core/partmap/} (for interpreting +partition table data), and @file{grub-core/fs/} (for accessing filesystems). +Note that, with the odd specialised exception, GRUB only contains code to +@emph{read} from filesystems and tries to avoid containing any code to +@emph{write} to filesystems; this lets us confidently assure users that GRUB +cannot be responsible for filesystem corruption. + +PCI and USB bus handling is in @file{grub-core/bus/}. + +Video handling code is in @file{grub-core/video/}. The graphical menu +system uses this heavily, but is in a separate directory, +@file{grub-core/gfxmenu/}. + +Most commands are implemented by files in @file{grub-core/commands/}, with +the following exceptions: + +@itemize +@item +A few core commands live in @file{grub-core/kern/corecmd.c}. + +@item +Commands related to normal mode live under @file{grub-core/normal/}. + +@item +Commands that load and boot kernels live under @file{grub-core/loader/}. + +@item +The @samp{loopback} command is really a disk device, and so lives in +@file{grub-core/disk/loopback.c}. + +@item +The @samp{gettext} command lives under @file{grub-core/gettext/}. + +@item +The @samp{loadfont} and @samp{lsfonts} commands live under +@file{grub-core/font/}. + +@item +The @samp{serial}, @samp{terminfo}, and @samp{background_image} commands +live under @file{grub-core/term/}. + +@item +The @samp{efiemu_*} commands live under @file{grub-core/efiemu/}. + +@item +OS-dependent code should be under @file{grub-core/osdep/} + +@item +Utility programs meant to be run from a full operating system +(except OS-dependent code mentioned previously) are in @file{util/}. + +@end itemize + +There are a few other special-purpose exceptions; grep for them if they +matter to you. + +@node Contributing Changes +@chapter Contributing changes +@c By YoshinoriOkuji, VesaJääskeläinen, ColinWatson + +Contributing changes to GRUB 2 is welcomed activity. However we have a +bit of control what kind of changes will be accepted to GRUB 2. +Therefore it is important to discuss your changes on grub-devel mailing list +(see MailingLists). On this page there are some basic details on the +development process and activities. + +First of all you should come up with the idea yourself what you want to +contribute. If you do not have that beforehand you are advised to study this +manual and try GRUB 2 out to see what you think is missing from there. + +Here are additional pointers: +@itemize +@item @url{https://savannah.gnu.org/task/?group=grub GRUB's Task Tracker} +@item @url{https://savannah.gnu.org/bugs/?group=grub GRUB's Bug Tracker} +@end itemize + +If you intended to make changes to GRUB Legacy (<=0.97) those are not accepted +anymore. + +@menu +* Getting started:: +* Typical Developer Experience:: +* When you are approved for write access to project's files:: +@end menu + +@node Getting started +@section Getting started + +@itemize +@item Always use latest GRUB 2 source code. So get that first. + +For developers it is recommended always to use the newest development version of GRUB 2. If development takes a long period of time, please remember to keep in sync with newest developments regularly so it is much easier to integrate your change in the future. GRUB 2 is being developed in a GIT repository. + +Please check Savannah's GRUB project page for details how to get newest git: +@uref{https://savannah.gnu.org/git/?group=grub, GRUB 2 git Repository} + +@item Compile it and try it out. + +It is always good idea to first see that things work somehow and after that +to start to implement new features or develop fixes to bugs. + +@item Study the code. + +There are sometimes odd ways to do things in GRUB 2 code base. +This is mainly related to limited environment where GRUB 2 is being executed. +You usually do not need to understand it all so it is better to only try to +look at places that relates to your work. Please do not hesitate to ask for +help if there is something that you do not understand. + +@item Develop a new feature. + +Now that you know what to do and how it should work in GRUB 2 code base, please +be free to develop it. If you have not so far announced your idea on grub-devel +mailing list, please do it now. This is to make sure you are not wasting your +time working on the solution that will not be integrated to GRUB 2 code base. + +You might want to study our coding style before starting development so you +do not need to change much of the code when your patch is being reviewed. +(see @ref{Coding style}) + +For every accepted patch there has to exist a ChangeLog entry. Our ChangeLog +consist of changes within source code and are not describing about what the +change logically does. Please see examples from previous entries. + +Also remember that GRUB 2 is licensed under GPLv3 license and that usually +means that you are not allowed to copy pieces of code from other projects. +Even if the source project's license would be compatible with GPLv3, please +discuss it beforehand on grub-devel mailing list. + +@item Test your change. + +Test that your change works properly. Try it out a couple of times, preferably on different systems, and try to find problems with it. + +@item Publish your change. + +When you are happy with your change, first make sure it is compilable with +latest development version of GRUB 2. After that please send a patch to +grub-devel for review. Please describe in your email why you made the change, +what it changes and so on. Please be prepared to receive even discouraging +comments about your patch. There is usually at least something that needs +to be improved in every patch. + +Please use unified diff to make your patch (good match of arguments for diff is @samp{-pruN}). + +@item Respond to received feedback. + +If you are asked to modify your patch, please do that and resubmit it for +review. If your change is large you are required to submit a copyright +agreement to FSF. Please keep in mind that if you are asked to submit +for copyright agreement, process can take some time and is mandatory +in order to get your changes integrated. + +If you are not on grub-devel to respond to questions, most likely your patch +will not be accepted. Also if problems arise from your changes later on, +it would be preferable that you also fix the problem. So stay around +for a while. + +@item Your patch is accepted. + +Good job! Your patch will now be integrated into GRUB 2 mainline, and if it didn't break anything it will be publicly available in the next release. + +Now you are welcome to do further improvements :) +@end itemize + +@node Typical Developer Experience +@section Typical Developer Experience + +The typical experience for a developer in this project is the following: + +@enumerate +@item You find yourself wanting to do something (e.g. fixing a bug). +@item You show some result in the mailing list or the IRC. +@item You are getting to be known to other developers. +@item You accumulate significant amount of contribution, so copyright assignment is processed. +@item You are free to check in your changes on your own, legally speaking. +@end enumerate + +At this point, it is rather annoying that you ought to ask somebody else every +change to be checked in. For efficiency, it is far better, if you can commit +it yourself. Therefore, our policy is to give you the write permission to our +official repository, once you have shown your skill and will, +and the FSF clerks have dealt with your copyright assignment. + +@node When you are approved for write access to project's files +@section When you are approved for write access to project's files + +As you might know, GRUB is hosted on +@url{https://savannah.gnu.org/projects/grub Savannah}, thus the membership +is managed by Savannah. This means that, if you want to be a member of this +project: + +@enumerate +@item You need to create your own account on Savannah. +@item You can submit ``Request for Inclusion'' from ``My Groups'' on Savannah. +@end enumerate + +Then, one of the admins can approve your request, and you will be a member. +If you don't want to use the Savannah interface to submit a request, you can +simply notify the admins by email or something else, alternatively. But you +still need to create an account beforehand. + +NOTE: we sometimes receive a ``Request for Inclusion'' from an unknown person. +In this case, the request would be just discarded, since it is too dangerous +to allow a stranger to be a member, which automatically gives him a commit +right to the repository, both for a legal reason and for a technical reason. + +If your intention is to just get started, please do not submit a inclusion +request. Instead, please subscribe to the mailing list, and communicate first +(e.g. sending a patch, asking a question, commenting on another message...). + +@node Porting +@chapter Porting + +GRUB2 is designed to be easily portable accross platforms. But because of the +nature of bootloader every new port must be done separately. Here is how I did +MIPS (loongson and ARC) and Xen ports. Note than this is more of suggestions, +not absolute truth. + +First of all grab any architecture specifications you can find in public +(please avoid NDA). + +First stage is ``Hello world''. I've done it outside of GRUB for simplicity. +Your task is to have a small program which is loadable as bootloader and +clearly shows its presence to you. If you have easily accessible console +you can just print a message. If you have a mapped framebuffer you know address +of, you can draw a square. If you have a debug facility, just hanging without +crashing might be enough. For the first stage you can choose to load the +bootloader across the network since format for network image is often easier +than for local boot and it skips the need of small intermediary stages and +nvram handling. Additionally you can often have a good idea of the needed +format by running ``file'' on any netbootable executable for given platform. + +This program should probably have 2 parts: an assembler and C one. Assembler one +handles BSS cleaning and other needed setup (on some platforms you may need +to switch modes or copy the executable to its definitive position). So your code +may look like (x86 assembly for illustration purposes) + +@example + .globl _start +_start: + movl $_bss_start, %edi + movl $_end, %ecx + subl %edi, %ecx + xorl %eax, %eax + cld + rep + stosb + call main +@end example + +@example + +static const char msg[] = "Hello, world"; + +void +putchar (int c) +@{ + ... +@} + +void +main (void) +@{ + const char *ptr = msg; + while (*ptr) + putchar (*ptr++); + while (1); +@} +@end example + +Sometimes you need a third file: assembly stubs for ABI-compatibility. + +Once this file is functional it's time to move it into GRUB2. The startup +assembly file goes to grub-core/kern/$cpu/$platform/startup.S. You should also +include grub/symbol.h and replace call to entry point with call to +EXT_C(grub_main). The C file goes to grub-core/kern/$cpu/$platform/init.c +and its entry point is renamed to void grub_machine_init (void). Keep final +infinite loop for now. Stubs file if any goes to +grub-core/kern/$cpu/$platform/callwrap.S. Sometimes either $cpu or $platform +is dropped if file is used on several cpus respectivelyplatforms. +Check those locations if they already have what you're looking for. + +Then modify in configure.ac the following parts: + +CPU names: + +@example +case "$target_cpu" in + i[[3456]]86) target_cpu=i386 ;; + amd64) target_cpu=x86_64 ;; + sparc) target_cpu=sparc64 ;; + s390x) target_cpu=s390 ;; + ... +esac +@end example + +Sometimes CPU have additional architecture names which don't influence booting. +You might want to have some canonical name to avoid having bunch of identical +platforms with different names. + +NOTE: it doesn't influence compile optimisations which depend solely on +chosen compiler and compile options. + +@example +if test "x$with_platform" = x; then + case "$target_cpu"-"$target_vendor" in + i386-apple) platform=efi ;; + i386-*) platform=pc ;; + x86_64-apple) platform=efi ;; + x86_64-*) platform=pc ;; + powerpc-*) platform=ieee1275 ;; + ... + esac +else + ... +fi +@end example + +This part deals with guessing the platform from CPU and vendor. Sometimes you +need to use 32-bit mode for booting even if OS runs in 64-bit one. If so add +your platform to: + +@example +case "$target_cpu"-"$platform" in + x86_64-efi) ;; + x86_64-emu) ;; + x86_64-*) target_cpu=i386 ;; + powerpc64-ieee1275) target_cpu=powerpc ;; +esac +@end example + +Add your platform to the list of supported ones: + +@example +case "$target_cpu"-"$platform" in + i386-efi) ;; + x86_64-efi) ;; + i386-pc) ;; + i386-multiboot) ;; + i386-coreboot) ;; + ... +esac +@end example + +If explicit -m32 or -m64 is needed add it to: + +@example +case "$target_cpu" in + i386 | powerpc) target_m32=1 ;; + x86_64 | sparc64) target_m64=1 ;; +esac +@end example + +Finally you need to add a conditional to the following block: + +@example +AM_CONDITIONAL([COND_mips_arc], [test x$target_cpu = xmips -a x$platform = xarc]) +AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) +AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) +@end example + +Next stop is gentpl.py. You need to add your platform to the list of supported +ones (sorry that this list is duplicated): + +@example +GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", + "i386_multiboot", "i386_ieee1275", "x86_64_efi", + "mips_loongson", "sparc64_ieee1275", + "powerpc_ieee1275", "mips_arc", "ia64_efi", + "mips_qemu_mips", "s390_mainframe" ] +@end example + +You may also want already to add new platform to one or several of available +groups. In particular we always have a group for each CPU even when only +one platform for given CPU is available. + +Then comes grub-core/Makefile.core.def. In the block ``kernel'' you'll need +to define ldflags for your platform ($cpu_$platform_ldflags). You also need to +declare startup asm file ($cpu_$platform_startup) as well as any other files +(e.g. init.c and callwrap.S) (e.g. $cpu_$platform = kern/$cpu/$platform/init.c). +At this stage you will also need to add dummy dl.c and cache.S with functions +grub_err_t grub_arch_dl_check_header (void *ehdr), grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr) (dl.c) and +void grub_arch_sync_caches (void *address, grub_size_t len) (cache.S). They +won't be used for now. + +You will need to create directory include/$cpu/$platform and a file +include/$cpu/types.h. The later folowing this template: + +@example +#ifndef GRUB_TYPES_CPU_HEADER +#define GRUB_TYPES_CPU_HEADER 1 + +/* The size of void *. */ +#define GRUB_TARGET_SIZEOF_VOID_P 4 + +/* The size of long. */ +#define GRUB_TARGET_SIZEOF_LONG 4 + +/* mycpu is big-endian. */ +#define GRUB_TARGET_WORDS_BIGENDIAN 1 +/* Alternatively: mycpu is little-endian. */ +#undef GRUB_TARGET_WORDS_BIGENDIAN + +#endif /* ! GRUB_TYPES_CPU_HEADER */ +@end example + +You will also need to add a dummy file to datetime and setjmp modules to +avoid any of it having no files. It can be just completely empty at this stage. + +You'll need to make grub-mkimage.c (util/grub_mkimage.c) aware of the needed +format. For most commonly used formats like ELF, PE, aout or raw the support +is already present and you'll need to make it follow the existant code paths +for your platform adding adjustments if necessary. When done compile: + +@example +./autogen.sh +./configure --target=$cpu --with-platform=$platform TARGET_CC=.. OBJCOPY=... STRIP=... +make > /dev/null +@end example + +And create image + +@example +./grub-mkimage -d grub-core -O $format_id -o test.img +@end example + +And it's time to test your test.img. + +If it works next stage is to have heap, console and timer. + +To have the heap working you need to determine which regions are suitable for +heap usage, allocate them from firmware and map (if applicable). Then call +grub_mm_init_region (vois *start, grub_size_t s) for every of this region. +As a shortcut for early port you can allocate right after _end or have +a big static array for heap. If you do you'll probably need to come back to +this later. As for output console you should distinguish between an array of +text, terminfo or graphics-based console. Many of real-world examples don't +fit perfectly into any of these categories but one of the models is easier +to be used as base. In second and third case you should add your platform to +terminfokernel respectively videoinkernel group. A good example of array of +text is i386-pc (kern/i386/pc/init.c and term/i386/pc/console.c). +Of terminfo is ieee1275 (kern/ieee1275/init.c and term/ieee1275/console.c). +Of video is loongson (kern/mips/loongson/init.c). Note that terminfo has +to be inited in 2 stages: one before (to get at least rudimentary console +as early as possible) and another after the heap (to get full-featured console). +For the input there are string of keys, terminfo and direct hardware. For string +of keys look at i386-pc (same files), for termino ieee1275 (same files) and for +hardware loongson (kern/mips/loongson/init.c and term/at_keyboard.c). + +For the timer you'll need to call grub_install_get_time_ms (...) with as sole +argument a function returning a grub_uint64_t of a number of milliseconds +elapsed since arbitrary point in the past. + +Once these steps accomplished you can remove the inifinite loop and you should +be able to get to the minimal console. Next step is to have module loading +working. For this you'll need to fill kern/$cpu/dl.c and kern/$cpu/cache.S +with real handling of relocations and respectively the real sync of I and D +caches. Also you'll need to decide where in the image to store the modules. +Usual way is to have it concatenated at the end. In this case you'll need to +modify startup.S to copy modules out of bss to let's say ALIGN_UP (_end, 8) +before cleaning out bss. You'll probably find useful to add total_module_size +field to startup.S. In init.c you need to set grub_modbase to the address +where modules can be found. You may need grub_modules_get_end () to avoid +declaring the space occupied by modules as usable for heap. You can test modules +with: + +@example +./grub-mkimage -d grub-core -O $format_id -o test.img hello +@end example + +and then running ``hello'' in the shell. + +Once this works, you should think of implementing disk access. Look around +disk/ for examples. + +Then, very importantly, you probably need to implement the actual loader +(examples available in loader/) + +Last step to have minimally usable port is to add support to grub-install to +put GRUB in a place where firmware or platform will pick it up. + +Next steps are: filling datetime.c, setjmp.S, network (net/drivers), +video (video/), halt (lib/), reboot (lib/). + +Please add your platform to Platform limitations and Supported kernels chapter +in user documentation and mention any steps you skipped which result in reduced +features or performance. Here is the quick checklist of features. Some of them +are less important than others and skipping them is completely ok, just needs +to be mentioned in user documentation. + +Checklist: +@itemize +@item Is heap big enough? +@item Which charset is supported by console? +@item Does platform have disk driver? +@item Do you have network card support? +@item Are you able to retrieve datetime (with date)? +@item Are you able to set datetime (with date)? +@item Is serial supported? +@item Do you have direct disk support? +@item Do you have direct keyboard support? +@item Do you have USB support? +@item Do you support loading through network? +@item Do you support loading from disk? +@item Do you support chainloading? +@item Do you support network chainloading? +@item Does cpuid command supports checking all +CPU features that the user might want conditionalise on +(64-bit mode, hypervisor,...) +@item Do you support hints? How reliable are they? +@item Does platform have ACPI? If so do ``acpi'' and ``lsacpi'' modules work? +@item Do any of platform-specific operations mentioned in the relevant section of +user manual makes sense on your platform? +@item Does your platform support PCI? If so is there an appropriate driver for +GRUB? +@item Do you support badram? +@end itemize + +@node Error Handling +@chapter Error Handling + +Error handling in GRUB 2 is based on exception handling model. As C language +doesn't directly support exceptions, exception handling behavior is emulated +in software. + +When exception is raised, function must return to calling function. If calling +function does not provide handling of the exception it must return back to its +calling function and so on, until exception is handled. If exception is not +handled before prompt is displayed, error message will be shown to user. + +Exception information is stored on @code{grub_errno} global variable. If +@code{grub_errno} variable contains value @code{GRUB_ERR_NONE}, there is no active +exception and application can continue normal processing. When @code{grub_errno} has +other value, it is required that application code either handles this error or +returns instantly to caller. If function is with return type @code{grub_err_t} is +about to return @code{GRUB_ERR_NONE}, it should not set @code{grub_errno} to that +value. Only set @code{grub_errno} in cases where there is error situation. + +Simple exception forwarder. +@example +grub_err_t +forwarding_example (void) +@{ + /* Call function that might cause exception. */ + foobar (); + + /* No special exception handler, just forward possible exceptions. */ + if (grub_errno != GRUB_ERR_NONE) + @{ + return grub_errno; + @} + + /* All is OK, do more processing. */ + + /* Return OK signal, to caller. */ + return GRUB_ERR_NONE; +@} +@end example + +Error reporting has two components, the actual error code (of type +@code{grub_err_t}) and textual message that will be displayed to user. List of +valid error codes is listed in header file @file{include/grub/err.h}. Textual +error message can contain any textual data. At time of writing, error message +can contain up to 256 characters (including terminating NUL). To ease error +reporting there is a helper function @code{grub_error} that allows easier +formatting of error messages and should be used instead of writing directly to +global variables. + +Example of error reporting. +@example +grub_err_t +failing_example () +@{ + return grub_error (GRUB_ERR_FILE_NOT_FOUND, + "Failed to read %s, tried %d times.", + "test.txt", + 10); +@} +@end example + +If there is a special reason that error code does not need to be taken account, +@code{grub_errno} can be zeroed back to @code{GRUB_ERR_NONE}. In cases like this all +previous error codes should have been handled correctly. This makes sure that +there are no unhandled exceptions. + +Example of zeroing @code{grub_errno}. +@example +grub_err_t +probe_example () +@{ + /* Try to probe device type 1. */ + probe_for_device (); + if (grub_errno == GRUB_ERR_NONE) + @{ + /* Device type 1 was found on system. */ + register_device (); + return GRUB_ERR_NONE; + @} + /* Zero out error code. */ + grub_errno = GRUB_ERR_NONE; + + /* No device type 1 found, try to probe device type 2. */ + probe_for_device2 (); + if (grub_errno == GRUB_ERR_NONE) + @{ + /* Device type 2 was found on system. */ + register_device2 (); + return GRUB_ERR_NONE; + @} + /* Zero out error code. */ + grub_errno = GRUB_ERR_NONE; + + /* Return custom error message. */ + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "No device type 1 or 2 found."); +@} +@end example + +Some times there is a need to continue processing even if there is a error +state in application. In situations like this, there is a needed to save old +error state and then call other functions that might fail. To aid in this, +there is a error stack implemented. Error state can be pushed to error stack +by calling function @code{grub_error_push ()}. When processing has been completed, +@code{grub_error_pop ()} can be used to pop error state from stack. Error stack +contains predefined amount of error stack items. Error stack is protected for +overflow and marks these situations so overflow error does not get unseen. +If there is no space available to store error message, it is simply discarded +and overflow will be marked as happened. When overflow happens, it most likely +will corrupt error stack consistency as for pushed error there is no matching +pop, but overflow message will be shown to inform user about the situation. +Overflow message will be shown at time when prompt is about to be drawn. + +Example usage of error stack. +@example +/* Save possible old error message. */ +grub_error_push (); + +/* Do your stuff here. */ +call_possibly_failing_function (); + +if (grub_errno != GRUB_ERR_NONE) + @{ + /* Inform rest of the code that there is error (grub_errno + is set). There is no pop here as we want both error states + to be displayed. */ + return; + @} + +/* Restore old error state by popping previous item from stack. */ +grub_error_pop (); +@end example + +@node Stack and heap size +@chapter Stack and heap size + +On emu stack and heap are just normal host OS stack and heap. Stack is typically +8 MiB although it's OS-dependent. + +On i386-pc, i386-coreboot, i386-qemu and i386-multiboot the stack is 60KiB. +All available space between 1MiB and 4GiB marks is part of heap. + +On *-xen stack is 4MiB. If compiled for x86-64 with GCC 4.4 or later adressable +space is unlimited. When compiled for x86-64 with older GCC version adressable +space is limited to 2GiB. When compiling for i386 adressable space is limited +to 4GiB. All adressable pages except the ones for stack, GRUB binary, special +pages and page table are in the heap. + +On *-efi GRUB uses same stack as EFI. If compiled for x86-64 with GCC 4.4 or +later adressable space is unlimited. When compiled for x86-64 with older GCC +version adressable space is limited to 2GiB. For all other platforms adressable +space is limited to 4GiB. GRUB allocates pages from EFI for its heap, at most +1.6 GiB. + +On i386-ieee1275 and powerpc-ieee1275 GRUB uses same stack as IEEE1275. +It allocates at most 32MiB for its heap. + +On sparc64-ieee1275 stack is 256KiB and heap is 2MiB. + +On mips(el)-qemu_mips and mipsel-loongson stack is 2MiB (everything below +GRUB image) and everything above GRUB image (from 2MiB + kernel size) +until 256MiB is part of heap. + +On mips-arc stack is 2MiB (everything below GRUB image) and everything above +GRUB image(from 2MiB + kernel size) until 128MiB is part of heap. + +On mipsel-arc stack is 2MiB (everything below GRUB image which is not part +of ARC) and everything above GRUB image (from 7MiB + kernel size) +until 256MiB is part of heap. + +On arm-uboot stack is 256KiB and heap is 2MiB. + +In short: + +@multitable @columnfractions .15 .25 .5 +@headitem Platform @tab Stack @tab Heap +@item emu @tab 8 MiB @tab ? +@item i386-pc @tab 60 KiB @tab < 4 GiB +@item i386-coreboot @tab 60 KiB @tab < 4 GiB +@item i386-multiboot @tab 60 KiB @tab < 4 GiB +@item i386-qemu @tab 60 KiB @tab < 4 GiB +@item *-efi @tab ? @tab < 1.6 GiB +@item i386-ieee1275 @tab ? @tab < 32 MiB +@item powerpc-ieee1275 @tab ? @tab < 32 MiB +@item sparc64-ieee1275 @tab 256KiB @tab 2 MiB +@item arm-uboot @tab 256KiB @tab 2 MiB +@item mips(el)-qemu_mips @tab 2MiB @tab 253 MiB +@item mipsel-loongson @tab 2MiB @tab 253 MiB +@item mips-arc @tab 2MiB @tab 125 MiB +@item mipsel-arc @tab 2MiB @tab 248 MiB +@item x86_64-xen (GCC >= 4.4) @tab 4MiB @tab unlimited +@item x86_64-xen (GCC < 4.4) @tab 4MiB @tab < 2GiB +@item i386-xen @tab 4MiB @tab < 4GiB +@end multitable + + +@node BIOS port memory map +@chapter BIOS port memory map +@c By Yoshinori K Okuji + +@multitable @columnfractions .15 .25 .5 +@headitem Start @tab End @tab Usage +@item 0 @tab 0x1000 - 1 @tab BIOS and real mode interrupts +@item 0x07BE @tab 0x07FF @tab Partition table passed to another boot loader +@item ? @tab 0x2000 - 1 @tab Real mode stack +@item 0x7C00 @tab 0x7D00 - 1 @tab Boot sector +@item 0x8000 @tab ? @tab GRUB kernel +@item 0x68000 @tab 0x71000 - 1 @tab Disk buffer +@item ? @tab 0x80000 - 1 @tab Protected mode stack +@item ? @tab 0xA0000 - 1 @tab Extended BIOS Data Area +@item 0xA0000 @tab 0xC0000 - 1 @tab Video RAM +@item 0xC0000 @tab 0x100000 - 1 @tab BIOS +@item 0x100000 @tab ? @tab Heap and module code +@end multitable + +@node Video Subsystem +@chapter Video Subsystem +@c By VesaJääskeläinen +This document contains specification for Video Subsystem for GRUB2. +Currently only the usage interface is described in this document. +Internal structure of how video drivers are registering and how video +driver manager works are not included here. + +@menu +* Video API:: +* Example usage of Video API:: +* Bitmap API:: +@end menu + +@node Video API +@section Video API + +@subsection grub_video_setup + +@itemize +@item Prototype: +@example +grub_err_t +grub_video_setup (unsigned int width, unsigned int height, unsigned int mode_type); +@end example +@item Description: + +Driver will use information provided to it to select best possible video mode and switch to it. Supported values for @code{mode_type} are @code{GRUB_VIDEO_MODE_TYPE_INDEX_COLOR} for index color modes, @code{GRUB_VIDEO_MODE_TYPE_RGB} for direct RGB color modes and @code{GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED} for double buffering. When requesting RGB mode, highest bits per pixel mode will be selected. When requesting Index color mode, mode with highest number of colors will be selected. If all parameters are specified as zero, video adapter will try to figure out best possible mode and initialize it, platform specific differences are allowed here. If there is no mode matching request, error X will be returned. If there are no problems, function returns @code{GRUB_ERR_NONE}. + +This function also performs following task upon succesful mode switch. Active rendering target is changed to screen and viewport is maximized to allow whole screen to be used when performing graphics operations. In RGB modes, emulated palette gets 16 entries containing default values for VGA palette, other colors are defined as black. When switching to Indexed Color mode, driver may set default VGA palette to screen if the video card allows the operation. + +@end itemize + +@subsection grub_video_restore +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_restore (void); +@end example +@item Description: + +Video subsystem will deinitialize activated video driver to restore old state of video device. This can be used to switch back to text mode. +@end itemize + +@subsection grub_video_get_info +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_get_info (struct grub_video_mode_info *mode_info); +@end example +@example +struct grub_video_mode_info +@{ + /* Width of the screen. */ + unsigned int width; + /* Height of the screen. */ + unsigned int height; + /* Mode type bitmask. Contains information like is it Index color or + RGB mode. */ + unsigned int mode_type; + /* Bits per pixel. */ + unsigned int bpp; + /* Bytes per pixel. */ + unsigned int bytes_per_pixel; + /* Pitch of one scanline. How many bytes there are for scanline. */ + unsigned int pitch; + /* In index color mode, number of colors. In RGB mode this is 256. */ + unsigned int number_of_colors; + /* Optimization hint how binary data is coded. */ + enum grub_video_blit_format blit_format; + /* How many bits are reserved for red color. */ + unsigned int red_mask_size; + /* What is location of red color bits. In Index Color mode, this is 0. */ + unsigned int red_field_pos; + /* How many bits are reserved for green color. */ + unsigned int green_mask_size; + /* What is location of green color bits. In Index Color mode, this is 0. */ + unsigned int green_field_pos; + /* How many bits are reserved for blue color. */ + unsigned int blue_mask_size; + /* What is location of blue color bits. In Index Color mode, this is 0. */ + unsigned int blue_field_pos; + /* How many bits are reserved in color. */ + unsigned int reserved_mask_size; + /* What is location of reserved color bits. In Index Color mode, + this is 0. */ + unsigned int reserved_field_pos; +@}; +@end example +@item Description: + +Software developer can use this function to query properties of active rendering taget. Information provided here can be used by other parts of GRUB, like image loaders to convert loaded images to correct screen format to allow more optimized blitters to be used. If there there is no configured video driver with active screen, error @code{GRUB_ERR_BAD_DEVICE} is returned, otherwise @code{mode_info} is filled with valid information and @code{GRUB_ERR_NONE} is returned. +@end itemize + +@subsection grub_video_get_blit_format +@itemize +@item Prototype: + +@example +enum grub_video_blit_format +grub_video_get_blit_format (struct grub_video_mode_info *mode_info); +@end example +@example +enum grub_video_blit_format + @{ + /* Follow exactly field & mask information. */ + GRUB_VIDEO_BLIT_FORMAT_RGBA, + /* Make optimization assumption. */ + GRUB_VIDEO_BLIT_FORMAT_R8G8B8A8, + /* Follow exactly field & mask information. */ + GRUB_VIDEO_BLIT_FORMAT_RGB, + /* Make optimization assumption. */ + GRUB_VIDEO_BLIT_FORMAT_R8G8B8, + /* When needed, decode color or just use value as is. */ + GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR + @}; +@end example +@item Description: + +Used to query how data could be optimized to suit specified video mode. Returns exact video format type, or a generic one if there is no definition for the type. For generic formats, use @code{grub_video_get_info} to query video color coding settings. +@end itemize + +@subsection grub_video_set_palette +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_set_palette (unsigned int start, unsigned int count, struct grub_video_palette_data *palette_data); +@end example +@example +struct grub_video_palette_data +@{ + grub_uint8_t r; /* Red color value (0-255). */ + grub_uint8_t g; /* Green color value (0-255). */ + grub_uint8_t b; /* Blue color value (0-255). */ + grub_uint8_t a; /* Reserved bits value (0-255). */ +@}; +@end example +@item Description: + +Used to setup indexed color palettes. If mode is RGB mode, colors will be set to emulated palette data. In Indexed Color modes, palettes will be set to hardware. Color values will be converted to suit requirements of the video mode. @code{start} will tell what hardware color index (or emulated color index) will be set to according information in first indice of @code{palette_data}, after that both hardware color index and @code{palette_data} index will be incremented until @code{count} number of colors have been set. +@end itemize + +@subsection grub_video_get_palette +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_get_palette (unsigned int start, unsigned int count, struct grub_video_palette_data *palette_data); +@end example +@example +struct grub_video_palette_data +@{ + grub_uint8_t r; /* Red color value (0-255). */ + grub_uint8_t g; /* Green color value (0-255). */ + grub_uint8_t b; /* Blue color value (0-255). */ + grub_uint8_t a; /* Reserved bits value (0-255). */ +@}; +@end example +@item Description: + +Used to query indexed color palettes. If mode is RGB mode, colors will be copied from emulated palette data. In Indexed Color modes, palettes will be read from hardware. Color values will be converted to suit structure format. @code{start} will tell what hardware color index (or emulated color index) will be used as a source for first indice of @code{palette_data}, after that both hardware color index and @code{palette_data} index will be incremented until @code{count} number of colors have been read. +@end itemize + +@subsection grub_video_set_area_status +@itemize + +@item Prototype: +@example +grub_err_t +grub_video_set_area_status (grub_video_area_status_t area_status); +@end example +@example +enum grub_video_area_status_t + @{ + GRUB_VIDEO_AREA_DISABLED, + GRUB_VIDEO_AREA_ENABLED + @}; +@end example + +@item Description: + +Used to set area drawing mode for redrawing the specified region. Draw commands +are performed in the intersection of the viewport and the region called area. +Coordinates remain related to the viewport. If draw commands try to draw over +the area, they are clipped. +Set status to DISABLED if you need to draw everything. +Set status to ENABLED and region to the desired rectangle to redraw everything +inside the region leaving everything else intact. +Should be used for redrawing of active elements. +@end itemize + +@subsection grub_video_get_area_status +@itemize + +@item Prototype: +@example +grub_err_r +grub_video_get_area_status (grub_video_area_status_t *area_status); +@end example + +@item Description: +Used to query the area status. +@end itemize + +@subsection grub_video_set_viewport +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_set_viewport (unsigned int x, unsigned int y, unsigned int width, unsigned int height); +@end example +@item Description: + +Used to specify viewport where draw commands are performed. When viewport is set, all draw commands coordinates relate to those specified by @code{x} and @code{y}. If draw commands try to draw over viewport, they are clipped. If developer requests larger than possible viewport, width and height will be clamped to fit screen. If @code{x} and @code{y} are out of bounds, all functions drawing to screen will not be displayed. In order to maximize viewport, use @code{grub_video_get_info} to query actual screen dimensions and provide that information to this function. +@end itemize + +@subsection grub_video_get_viewport +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_get_viewport (unsigned int *x, unsigned int *y, unsigned int *width, unsigned int *height); +@end example +@item Description: + +Used to query current viewport dimensions. Software developer can use this to choose best way to render contents of the viewport. +@end itemize + +@subsection grub_video_set_region +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_set_region (unsigned int x, unsigned int y, unsigned int width, unsigned int height); +@end example +@item Description: + +Used to specify the region of the screen which should be redrawn. Use absolute +values. When the region is set and area status is ENABLE all draw commands will +be performed inside the interseption of region and viewport named area. +If draw commands try to draw over viewport, they are clipped. If developer +requests larger than possible region, width and height will be clamped to fit +screen. Should be used for redrawing of active elements. +@end itemize + +@subsection grub_video_get_region +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_get_region (unsigned int *x, unsigned int *y, unsigned int *width, unsigned int *height); +@end example +@item Description: + +Used to query current region dimensions. +@end itemize + +@subsection grub_video_map_color +@itemize +@item Prototype: + +@example +grub_video_color_t +grub_video_map_color (grub_uint32_t color_name); +@end example +@item Description: + +Map color can be used to support color themes in GRUB. There will be collection of color names that can be used to query actual screen mapped color data. Examples could be @code{GRUB_COLOR_CONSOLE_BACKGROUND}, @code{GRUB_COLOR_CONSOLE_TEXT}. The actual color defines are not specified at this point. +@end itemize + +@subsection grub_video_map_rgb +@itemize +@item Prototype: + +@example +grub_video_color_t +grub_video_map_rgb (grub_uint8_t red, grub_uint8_t green, grub_uint8_t blue); +@end example +@item Description: + +Map RGB values to compatible screen color data. Values are expected to be in range 0-255 and in RGB modes they will be converted to screen color data. In index color modes, index color palette will be searched for specified color and then index is returned. +@end itemize + +@subsection grub_video_map_rgba +@itemize +@item Prototype: + +@example +grub_video_color_t +grub_video_map_rgba (grub_uint8_t red, grub_uint8_t green, grub_uint8_t blue, grub_uint8_t alpha); +@end example +@item Description: + +Map RGBA values to compatible screen color data. Values are expected to be in range 0-255. In RGBA modes they will be converted to screen color data. In index color modes, index color palette will be searched for best matching color and its index is returned. +@end itemize + +@subsection grub_video_unmap_color +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_unmap_color (grub_video_color_t color, grub_uint8_t *red, grub_uint8_t *green, grub_uint8_t *blue, grub_uint8_t *alpha); +@end example +@item Description: + +Unmap color value from @code{color} to color channels in @code{red}, @code{green}, @code{blue} and @code{alpha}. Values will be in range 0-255. Active rendering target will be used for color domain. In case alpha information is not available in rendering target, it is assumed to be opaque (having value 255). +@end itemize + +@subsection grub_video_fill_rect +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_fill_rect (grub_video_color_t color, int x, int y, unsigned int width, unsigned int height); +@end example +@item Description: + +Fill specified area limited by given coordinates within specified viewport. Negative coordinates are accepted in order to allow easy moving of rectangle within viewport. If coordinates are negative, area of the rectangle will be shrinken to follow size limits of the viewport. + +Software developer should use either @code{grub_video_map_color}, @code{grub_video_map_rgb} or @code{grub_video_map_rgba} to map requested color to @code{color} parameter. +@end itemize + +@subsection grub_video_blit_glyph +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_blit_glyph (struct grub_font_glyph *glyph, grub_video_color_t color, int x, int y); +@end example +@example +struct grub_font_glyph @{ + /* TBD. */ +@}; +@end example +@item Description: + +Used to blit glyph to viewport in specified coodinates. If glyph is at edge of viewport, pixels outside of viewport will be clipped out. Software developer should use either @code{grub_video_map_rgb} or @code{grub_video_map_rgba} to map requested color to @code{color} parameter. +@end itemize + +@subsection grub_video_blit_bitmap +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_blit_bitmap (struct grub_video_bitmap *bitmap, enum grub_video_blit_operators oper, int x, int y, int offset_x, int offset_y, unsigned int width, unsigned int height); +@end example +@example +struct grub_video_bitmap +@{ + /* TBD. */ +@}; + +enum grub_video_blit_operators + @{ + GRUB_VIDEO_BLIT_REPLACE, + GRUB_VIDEO_BLIT_BLEND + @}; +@end example +@item Description: + +Used to blit bitmap to viewport in specified coordinates. If part of bitmap is outside of viewport region, it will be clipped out. Offsets affect bitmap position where data will be copied from. Negative values for both viewport coordinates and bitmap offset coordinates are allowed. If data is looked out of bounds of bitmap, color value will be assumed to be transparent. If viewport coordinates are negative, area of the blitted rectangle will be shrinken to follow size limits of the viewport and bitmap. Blitting operator @code{oper} specifies should source pixel replace data in screen or blend with pixel alpha value. + +Software developer should use @code{grub_video_bitmap_create} or @code{grub_video_bitmap_load} to create or load bitmap data. +@end itemize + +@subsection grub_video_blit_render_target +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_blit_render_target (struct grub_video_render_target *source, enum grub_video_blit_operators oper, int x, int y, int offset_x, int offset_y, unsigned int width, unsigned int height); +@end example +@example +struct grub_video_render_target @{ + /* This is private data for video driver. Should not be accessed from elsewhere directly. */ +@}; + +enum grub_video_blit_operators + @{ + GRUB_VIDEO_BLIT_REPLACE, + GRUB_VIDEO_BLIT_BLEND + @}; +@end example +@item Description: + +Used to blit source render target to viewport in specified coordinates. If part of source render target is outside of viewport region, it will be clipped out. If blitting operator is specified and source contains alpha values, resulting pixel color components will be calculated using formula ((src_color * src_alpha) + (dst_color * (255 - src_alpha)) / 255, if target buffer has alpha, it will be set to src_alpha. Offsets affect render target position where data will be copied from. If data is looked out of bounds of render target, color value will be assumed to be transparent. Blitting operator @code{oper} specifies should source pixel replace data in screen or blend with pixel alpha value. +@end itemize + +@subsection grub_video_scroll +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_scroll (grub_video_color_t color, int dx, int dy); +@end example +@item Description: + +Used to scroll viewport to specified direction. New areas are filled with specified color. This function is used when screen is scroller up in video terminal. +@end itemize + +@subsection grub_video_swap_buffers +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_swap_buffers (void); +@end example +@item Description: + +If double buffering is enabled, this swaps frontbuffer and backbuffer, in order to show values drawn to back buffer. Video driver is free to choose how this operation is techincally done. +@end itemize + +@subsection grub_video_create_render_target +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_create_render_target (struct grub_video_render_target **result, unsigned int width, unsigned int height, unsigned int mode_type); +@end example +@example +struct grub_video_render_target @{ + /* This is private data for video driver. Should not be accessed from elsewhere directly. */ +@}; +@end example +@item Description: + +Driver will use information provided to it to create best fitting render target. @code{mode_type} will be used to guide on selecting what features are wanted for render target. Supported values for @code{mode_type} are @code{GRUB_VIDEO_MODE_TYPE_INDEX_COLOR} for index color modes, @code{GRUB_VIDEO_MODE_TYPE_RGB} for direct RGB color modes and @code{GRUB_VIDEO_MODE_TYPE_ALPHA} for alpha component. +@end itemize + +@subsection grub_video_delete_render_target +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_delete_render_target (struct grub_video_render_target *target); +@end example +@item Description: + +Used to delete previously created render target. If @code{target} contains @code{NULL} pointer, nothing will be done. If render target is correctly destroyed, GRUB_ERR_NONE is returned. +@end itemize + +@subsection grub_video_set_active_render_target +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_set_active_render_target (struct grub_video_render_target *target); +@end example +@item Description: + +Sets active render target. If this comand is successful all drawing commands will be done to specified @code{target}. There is also special values for target, @code{GRUB_VIDEO_RENDER_TARGET_DISPLAY} used to reference screen's front buffer, @code{GRUB_VIDEO_RENDER_TARGET_FRONT_BUFFER} used to reference screen's front buffer (alias for @code{GRUB_VIDEO_RENDER_TARGET_DISPLAY}) and @code{GRUB_VIDEO_RENDER_TARGET_BACK_BUFFER} used to reference back buffer (if double buffering is enabled). If render target is correclty switched GRUB_ERR_NONE is returned. In no any event shall there be non drawable active render target. + +@end itemize +@subsection grub_video_get_active_render_target +@itemize +@item Prototype: + +@example +grub_err_t +grub_video_get_active_render_target (struct grub_video_render_target **target); +@end example +@item Description: + +Returns currently active render target. It returns value in @code{target} that can be subsequently issued back to @code{grub_video_set_active_render_target}. +@end itemize + +@node Example usage of Video API +@section Example usage of Video API +@subsection Example of screen setup +@example +grub_err_t rc; +/* Try to initialize video mode 1024 x 768 with direct RGB. */ +rc = grub_video_setup (1024, 768, GRUB_VIDEO_MODE_TYPE_RGB); +if (rc != GRUB_ERR_NONE) +@{ + /* Fall back to standard VGA Index Color mode. */ + rc = grub_video_setup (640, 480, GRUB_VIDEO_MODE_TYPE_INDEX); + if (rc != GRUB_ERR_NONE) + @{ + /* Handle error. */ + @} +@} +@end example +@subsection Example of setting up console viewport +@example +grub_uint32_t x, y, width, height; +grub_video_color_t color; +struct grub_font_glyph glyph; +grub_err_t rc; +/* Query existing viewport. */ +grub_video_get_viewport (&x, &y, &width, &height); +/* Fill background. */ +color = grub_video_map_color (GRUB_COLOR_BACKGROUND); +grub_video_fill_rect (color, 0, 0, width, height); +/* Setup console viewport. */ +grub_video_set_viewport (x + 10, y + 10, width - 20, height - 20); +grub_video_get_viewport (&x, &y, &width, &height); +color = grub_video_map_color (GRUB_COLOR_CONSOLE_BACKGROUND); +grub_video_fill_rect (color, 0, 0, width, height); +/* Draw text to viewport. */ +color = grub_video_map_color (GRUB_COLOR_CONSOLE_TEXT); +grub_font_get_glyph ('X', &glyph); +grub_video_blit_glyph (&glyph, color, 0, 0); +@end example + +@node Bitmap API +@section Bitmap API +@subsection grub_video_bitmap_create +@itemize +@item Prototype: +@example +grub_err_t grub_video_bitmap_create (struct grub_video_bitmap **bitmap, unsigned int width, unsigned int height, enum grub_video_blit_format blit_format) +@end example + +@item Description: + +Creates a new bitmap with given dimensions and blitting format. Allocated bitmap data can then be modified freely and finally blitted with @code{grub_video_blit_bitmap} to rendering target. +@end itemize + +@subsection grub_video_bitmap_destroy +@itemize +@item Prototype: +@example +grub_err_t grub_video_bitmap_destroy (struct grub_video_bitmap *bitmap); +@end example + +@item Description: + +When bitmap is no longer needed, it can be freed from memory using this command. @code{bitmap} is previously allocated bitmap with @code{grub_video_bitmap_create} or loaded with @code{grub_video_bitmap_load}. +@end itemize + +@subsection grub_video_bitmap_load +@itemize +@item Prototype: +@example +grub_err_t grub_video_bitmap_load (struct grub_video_bitmap **bitmap, const char *filename); +@end example + +@item Description: + +Tries to load given bitmap (@code{filename}) using registered bitmap loaders. In case bitmap format is not recognized or supported error @code{GRUB_ERR_BAD_FILE_TYPE} is returned. +@end itemize + +@subsection grub_video_bitmap_get_width +@itemize +@item Prototype: +@example +unsigned int grub_video_bitmap_get_width (struct grub_video_bitmap *bitmap); +@end example + +@item Description: + +Returns bitmap width. +@end itemize + +@subsection grub_video_bitmap_get_height +@itemize +@item Prototype: +@example +unsigned int grub_video_bitmap_get_height (struct grub_video_bitmap *bitmap); +@end example + +@item Description: + +Return bitmap height. +@end itemize + +@subsection grub_video_bitmap_get_mode_info +@itemize +@item Prototype: +@example +void grub_video_bitmap_get_mode_info (struct grub_video_bitmap *bitmap, struct grub_video_mode_info *mode_info); +@end example + +@item Description: + +Returns bitmap format details in form of @code{grub_video_mode_info}. +@end itemize + +@subsection grub_video_bitmap_get_data +@itemize +@item Prototype: +@example +void *grub_video_bitmap_get_data (struct grub_video_bitmap *bitmap); +@end example + +@item Description: + +Return pointer to bitmap data. Contents of the pointed data can be freely modified. There is no extra protection against going off the bounds so you have to be carefull how to access the data. +@end itemize + +@node PFF2 Font File Format +@chapter PFF2 Font File Format + +@c Author: Colin D. Bennett +@c Date: 8 January 2009 + +@menu +* Introduction:: +* File Structure:: +* Font Metrics:: +@end menu + + +@node Introduction +@section Introduction + +The goal of this format is to provide a bitmap font format that is simple to +use, compact, and cleanly supports Unicode. + + +@subsection Goals of the GRUB Font Format + +@itemize +@item Simple to read and use. +Since GRUB will only be reading the font files, +we are more concerned with making the code to read the font simple than we +are with writing the font. + +@item Compact storage. +The fonts will generally be stored in a small boot +partition where GRUB is located, and this may be on a removable storage +device such as a CD or USB flash drive where space is more limited than it +is on most hard drives. + +@item Unicode. +GRUB should not have to deal with multiple character +encodings. The font should always use Unicode character codes for simple +internationalization. +@end itemize + +@subsection Why Another Font Format? + +There are many existing bitmap font formats that GRUB could use. However, +there are aspects of these formats that may make them less than suitable for +use in GRUB at this time: + +@table @samp +@item BDF +Inefficient storage; uses ASCII to describe properties and +hexadecimal numbers in ASCII for the bitmap rows. +@item PCF +Many format variations such as byte order and bitmap padding (rows +padded to byte, word, etc.) would result in more complex code to +handle the font format. +@end table + +@node File Structure +@section File Structure + +A file @strong{section} consists of a 4-byte name, a 32-bit big-endian length (not +including the name or length), and then @var{length} more section-type-specific +bytes. + +The standard file extension for PFF2 font files is @file{.pf2}. + + +@subsection Section Types + +@table @samp +@item FILE +@strong{File type ID} (ASCII string). This must be the first section in the file. It has length 4 +and the contents are the four bytes of the ASCII string @samp{PFF2}. + +@item NAME +@strong{Font name} (ASCII string). This is the full font name including family, +weight, style, and point size. For instance, "Helvetica Bold Italic 14". + +@item FAMI +@strong{Font family name} (ASCII string). For instance, "Helvetica". This should +be included so that intelligent font substitution can take place. + +@item WEIG +@strong{Font weight} (ASCII string). Valid values are @samp{bold} and @samp{normal}. +This should be included so that intelligent font substitution can take +place. + +@item SLAN +@strong{Font slant} (ASCII string). Valid values are @samp{italic} and @samp{normal}. +This should be included so that intelligent font substitution can take +place. + +@item PTSZ +@strong{Font point size} (uint16be). + +@item MAXW +@strong{Maximum character width in pixels} (uint16be). + +@item MAXH +@strong{Maximum character height in pixels} (uint16be). + +@item ASCE +@strong{Ascent in pixels} (uint16be). @xref{Font Metrics}, for details. + +@item DESC +@strong{Descent in pixels} (uint16be). @xref{Font Metrics}, for details. + +@item CHIX +@strong{Character index.} +The character index begins with a 32-bit big-endian unsigned integer +indicating the total size of the section, not including this size value. +For each character, there is an instance of the following entry structure: + +@itemize +@item @strong{Unicode code point.} (32-bit big-endian integer.) + +@item @strong{Storage flags.} (byte.) + +@itemize +@item Bits 2..0: + +If equal to 000 binary, then the character data is stored +uncompressed beginning at the offset indicated by the character's +@strong{offset} value. + +If equal to 001 binary, then the character data is stored within a +compressed character definition block that begins at the offset +within the file indicated by the character's @strong{offset} value. +@end itemize + +@item @strong{Offset.} (32-bit big-endian integer.) + +A marker that indicates the remainder of the file is data accessed via +the character index (CHIX) section. When reading this font file, the rest +of the file can be ignored when scanning the sections. The length should +be set to -1 (0xFFFFFFFF). + +Supported data structures: + +Character definition +Each character definition consists of: + +@itemize +@item @strong{Width.} +Width of the bitmap in pixels. The bitmap's extents +represent the glyph's bounding box. @code{uint16be}. + +@item @strong{Height.} +Height of the bitmap in pixels. The bitmap's extents +represent the glyph's bounding box. @code{uint16be}. + +@item @strong{X offset.} +The number of pixels to shift the bitmap by +horizontally before drawing the character. @code{int16be}. + +@item @strong{Y offset.} +The number of pixels to shift the bitmap by +vertically before drawing the character. @code{int16be}. + +@item @strong{Device width.} +The number of pixels to advance horizontally from +this character's origin to the origin of the next character. +@code{int16be}. + +@item @strong{Bitmap data.} +This is encoded as a string of bits. It is +organized as a row-major, top-down, left-to-right bitmap. The most +significant bit of each byte is taken to be the leftmost or uppermost +bit in the byte. For the sake of compact storage, rows are not padded +to byte boundaries (i.e., a single byte may contain bits belonging to +multiple rows). The last byte of the bitmap @strong{is} padded with zero +bits in the bits positions to the right of the last used bit if the +bitmap data does not fill the last byte. + +The length of the @strong{bitmap data} field is (@var{width} * @var{height} + 7) / 8 +using integer arithmetic, which is equivalent to ceil(@var{width} * +@var{height} / 8) using real number arithmetic. + +It remains to be determined whether bitmap fonts usually make all +glyph bitmaps the same height, or if smaller glyphs are stored with +bitmaps having a lesser height. In the latter case, the baseline +would have to be used to calculate the location the bitmap should be +anchored at on screen. +@end itemize + +@end itemize +@end table + +@node Font Metrics +@section Font Metrics + +@itemize +@item Ascent. +The distance from the baseline to the top of most characters. +Note that in some cases characters may extend above the ascent. + +@item Descent. +The distance from the baseline to the bottom of most characters. Note that +in some cases characters may extend below the descent. + +@item Leading. +The amount of space, in pixels, to leave between the descent of one line of +text and the ascent of the next line. This metrics is not specified in the +current file format; instead, the font rendering engine calculates a +reasonable leading value based on the other font metrics. + +@item Horizonal leading. +The amount of space, in pixels, to leave horizontally between the left and +right edges of two adjacent glyphs. The @strong{device width} field determines +the effective leading value that is used to render the font. + +@end itemize +@ifnottex +@image{font_char_metrics,,,,.png} +@end ifnottex + +An illustration of how the various font metrics apply to characters. + + + +@node Graphical Menu Software Design +@chapter Graphical Menu Software Design + +@c By Colin D. Bennett +@c Date: 17 August 2008 + +@menu +* Introduction_2:: +* Startup Sequence:: +* GUI Components:: +* Command Line Window:: +@end menu + +@node Introduction_2 +@section Introduction + +The @samp{gfxmenu} module provides a graphical menu interface for GRUB 2. It +functions as an alternative to the menu interface provided by the @samp{normal} +module, which uses the grub terminal interface to display a menu on a +character-oriented terminal. + +The graphical menu uses the GRUB video API, which is currently for the VESA +BIOS extensions (VBE) 2.0+. This is supported on the i386-pc platform. +However, the graphical menu itself does not depend on using VBE, so if another +GRUB video driver were implemented, the @samp{gfxmenu} graphical menu would work +on the new video driver as well. + + +@node Startup Sequence +@section Startup Sequence + +@itemize +@item grub_enter_normal_mode [normal/main.c] +@item grub_normal_execute [normal/main.c] +@item read_config_file [normal/main.c] +@item (When @file{gfxmenu.mod} is loaded with @command{insmod}, it will call @code{grub_menu_viewer_register()} to register itself.) +@item GRUB_MOD_INIT (gfxmenu) [gfxmenu/gfxmenu.c] +@item grub_menu_viewer_register [kern/menu_viewer.c] +@item grub_menu_viewer_show_menu [kern/menu_viewer.c] +@item get_current_menu_viewer() [kern/menu_viewer.c] +@item show_menu() [gfxmenu/gfxmenu.c] +@item grub_gfxmenu_model_new [gfxmenu/model.c] +@item grub_gfxmenu_view_new [gfxmenu/view.c] +@item set_graphics_mode [gfxmenu/view.c] +@item grub_gfxmenu_view_load_theme [gfxmenu/theme_loader.c] +@end itemize + + +@node GUI Components +@section GUI Components + +The graphical menu implements a GUI component system that supports a +container-based layout system. Components can be added to containers, and +containers (which are a type of component) can then be added to other +containers, to form a tree of components. Currently, the root component of +this tree is a @samp{canvas} component, which allows manual layout of its child +components. + +Components (non-container): + +@itemize +@item label +@item image +@item progress_bar +@item circular_progress +@item list (currently hard coded to be a boot menu list) +@end itemize + +Containers: + +@itemize +@item canvas +@item hbox +@item vbox +@end itemize + +The GUI component instances are created by the theme loader in +@file{gfxmenu/theme_loader.c} when a theme is loaded. Theme files specify +statements such as @samp{+vbox@{ +label @{ text="Hello" @} +label@{ text="World" @} @}} +to add components to the component tree root. By nesting the component +creation statements in the theme file, the instantiated components are nested +the same way. + +When a component is added to a container, that new child is considered @strong{owned} +by the container. Great care should be taken if the caller retains a +reference to the child component, since it will be destroyed if its parent +container is destroyed. A better choice instead of storing a pointer to the +child component is to use the component ID to find the desired component. +Component IDs do not have to be unique (it is often useful to have multiple +components with an ID of "__timeout__", for instance). + +In order to access and use components in the component tree, there are two +functions (defined in @file{gfxmenu/gui_util.c}) that are particularly useful: + +@itemize + +@item @code{grub_gui_find_by_id (root, id, callback, userdata)}: + +This function ecursively traverses the component tree rooted at @var{root}, and +for every component that has an ID equal to @var{id}, calls the function pointed +to by @var{callback} with the matching component and the void pointer @var{userdata} +as arguments. The callback function can do whatever is desired to use the +component passed in. + +@item @code{grub_gui_iterate_recursively (root, callback, userdata)}: + +This function calls the function pointed to by @var{callback} for every +component that is a descendant of @var{root} in the component tree. When the +callback function is called, the component and the void pointer @var{userdata} +as arguments. The callback function can do whatever is desired to use the +component passed in. +@end itemize + +@node Command Line Window +@section Command Line Window + +The terminal window used to provide command line access within the graphical +menu is managed by @file{gfxmenu/view.c}. The @samp{gfxterm} terminal is used, and +it has been modified to allow rendering to an offscreen render target to allow +it to be composed into the double buffering system that the graphical menu +view uses. This is bad for performance, however, so it would probably be a +good idea to make it possible to temporarily disable double buffering as long +as the terminal window is visible. There are still unresolved problems that +occur when commands are executed from the terminal window that change the +graphics mode. It's possible that making @code{grub_video_restore()} return to +the graphics mode that was in use before @code{grub_video_setup()} was called +might fix some of the problems. + + +@node Copying This Manual +@appendix Copying This Manual + +@menu +* GNU Free Documentation License:: License for copying this manual. +@end menu + +@include fdl.texi + + +@node Index +@unnumbered Index + +@c Currently, we use only the Concept Index. +@printindex cp + +@bye diff --git a/docs/grub.cfg b/docs/grub.cfg new file mode 100644 index 000000000..dc184d7d9 --- /dev/null +++ b/docs/grub.cfg @@ -0,0 +1,76 @@ +# +# Sample GRUB configuration file +# + +# Boot automatically after 30 secs. +set timeout=30 + +# By default, boot the GNU/Linux +set default=gnulinux + +# Fallback to GNU/Hurd. +set fallback=gnuhurd + +# For booting GNU/Linux +menuentry "GNU/Linux" --id gnulinux { + set root=(hd0,msdos1) + linux /vmlinuz root=/dev/sda1 + initrd /initrd.img +} + +# For booting GNU/Hurd +menuentry "GNU (aka GNU/Hurd)" --id gnuhurd { + set root=(hd0,msdos1) + multiboot /boot/gnumach.gz root=device:hd0s1 + module /hurd/ext2fs.static ext2fs --readonly \ + --multiboot-command-line='${kernel-command-line}' \ + --host-priv-port='${host-port}' \ + --device-master-port='${device-port}' \ + --exec-server-task='${exec-task}' -T typed '${root}' \ + '$(task-create)' '$(task-resume)' + module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)' +} + +# For booting FreeBSD +menuentry "FreeBSD (or GNU/kFreeBSD), direct boot" { + set root=(hd0,msdos1,bsd1) + kfreebsd /boot/kernel/kernel + kfreebsd_loadenv /boot/device.hints + kfreebsd_module /boot/splash.bmp type=splash_image_data + set kFreeBSD.vfs.root.mountfrom=ufs:ad0s1a +} + +menuentry "FreeBSD (or GNU/kFreeBSD), via /boot/loader" { + set root=(hd0,msdos1,bsd1) + kfreebsd /boot/loader +} + +# For booting NetBSD +menuentry "NetBSD" { + set root=(hd0,netbsd1) + knetbsd /netbsd +} + +# For booting OpenBSD +menuentry "OpenBSD" { + set root=(hd0,openbsd1) + kopenbsd /bsd +} + +# For booting Microsoft Windows +menuentry "Microsoft Windows" { + set root=(hd0,msdos1) + chainloader +1 +} + +# For booting Memtest86+ +menuentry "Memtest86+" { + set root=(hd0,1) + linux16 /memtest86+.bin +} + +# Change the colors. +menuentry "Change the colors" { + set menu_color_normal=light-green/brown + set menu_color_highlight=red/blue +} diff --git a/docs/grub.info b/docs/grub.info new file mode 100644 index 000000000..954cc9a27 --- /dev/null +++ b/docs/grub.info @@ -0,0 +1,7463 @@ +This is grub.info, produced by makeinfo version 6.3 from grub.texi. + +This manual is for GNU GRUB (version 2.02, 24 April 2017). + + Copyright (C) +1999,2000,2001,2002,2004,2006,2008,2009,2010,2011,2012,2013 Free +Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections. +INFO-DIR-SECTION Kernel +START-INFO-DIR-ENTRY +* GRUB: (grub). The GRand Unified Bootloader +* grub-install: (grub)Invoking grub-install. Install GRUB on your drive +* grub-mkconfig: (grub)Invoking grub-mkconfig. Generate GRUB configuration +* grub-mkpasswd-pbkdf2: (grub)Invoking grub-mkpasswd-pbkdf2. +* grub-mkrelpath: (grub)Invoking grub-mkrelpath. +* grub-mkrescue: (grub)Invoking grub-mkrescue. Make a GRUB rescue image +* grub-mount: (grub)Invoking grub-mount. Mount a file system using GRUB +* grub-probe: (grub)Invoking grub-probe. Probe device information +* grub-script-check: (grub)Invoking grub-script-check. +END-INFO-DIR-ENTRY + + +File: grub.info, Node: Top, Next: Introduction, Up: (dir) + +GNU GRUB manual +*************** + +This is the documentation of GNU GRUB, the GRand Unified Bootloader, a +flexible and powerful boot loader program for a wide range of +architectures. + + This edition documents version 2.02. + + This manual is for GNU GRUB (version 2.02, 24 April 2017). + + Copyright (C) +1999,2000,2001,2002,2004,2006,2008,2009,2010,2011,2012,2013 Free +Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections. + +* Menu: + +* Introduction:: Capturing the spirit of GRUB +* Naming convention:: Names of your drives in GRUB +* OS-specific notes about grub tools:: + Some notes about OS-specific behaviour of GRUB + tools +* Installation:: Installing GRUB on your drive +* Booting:: How to boot different operating systems +* Configuration:: Writing your own configuration file +* Theme file format:: Format of GRUB theme files +* Network:: Downloading OS images from a network +* Serial terminal:: Using GRUB via a serial line +* Vendor power-on keys:: Changing GRUB behaviour on vendor power-on keys +* Images:: GRUB image files +* Core image size limitation:: GRUB image files size limitations +* Filesystem:: Filesystem syntax and semantics +* Interface:: The menu and the command-line +* Environment:: GRUB environment variables +* Commands:: The list of available builtin commands +* Internationalisation:: Topics relating to language support +* Security:: Authentication, authorisation, and signatures +* Platform limitations:: The list of platform-specific limitations +* Platform-specific operations:: Platform-specific operations +* Supported kernels:: The list of supported kernels +* Troubleshooting:: Error messages produced by GRUB +* Invoking grub-install:: How to use the GRUB installer +* Invoking grub-mkconfig:: Generate a GRUB configuration file +* Invoking grub-mkpasswd-pbkdf2:: + Generate GRUB password hashes +* Invoking grub-mkrelpath:: Make system path relative to its root +* Invoking grub-mkrescue:: Make a GRUB rescue image +* Invoking grub-mount:: Mount a file system using GRUB +* Invoking grub-probe:: Probe device information for GRUB +* Invoking grub-script-check:: Check GRUB script file for syntax errors +* Obtaining and Building GRUB:: How to obtain and build GRUB +* Reporting bugs:: Where you should send a bug report +* Future:: Some future plans on GRUB +* Copying This Manual:: Copying This Manual +* Index:: + + +File: grub.info, Node: Introduction, Next: Naming convention, Prev: Top, Up: Top + +1 Introduction to GRUB +********************** + +* Menu: + +* Overview:: What exactly GRUB is and how to use it +* History:: From maggot to house fly +* Changes from GRUB Legacy:: Differences from previous versions +* Features:: GRUB features +* Role of a boot loader:: The role of a boot loader + + +File: grub.info, Node: Overview, Next: History, Up: Introduction + +1.1 Overview +============ + +Briefly, a "boot loader" is the first software program that runs when a +computer starts. It is responsible for loading and transferring control +to an operating system "kernel" software (such as Linux or GNU Mach). +The kernel, in turn, initializes the rest of the operating system (e.g. +a GNU system). + + GNU GRUB is a very powerful boot loader, which can load a wide +variety of free operating systems, as well as proprietary operating +systems with chain-loading(1) (*note Overview-Footnote-1::). GRUB is +designed to address the complexity of booting a personal computer; both +the program and this manual are tightly bound to that computer platform, +although porting to other platforms may be addressed in the future. + + One of the important features in GRUB is flexibility; GRUB +understands filesystems and kernel executable formats, so you can load +an arbitrary operating system the way you like, without recording the +physical position of your kernel on the disk. Thus you can load the +kernel just by specifying its file name and the drive and partition +where the kernel resides. + + When booting with GRUB, you can use either a command-line interface +(*note Command-line interface::), or a menu interface (*note Menu +interface::). Using the command-line interface, you type the drive +specification and file name of the kernel manually. In the menu +interface, you just select an OS using the arrow keys. The menu is +based on a configuration file which you prepare beforehand (*note +Configuration::). While in the menu, you can switch to the command-line +mode, and vice-versa. You can even edit menu entries before using them. + + In the following chapters, you will learn how to specify a drive, a +partition, and a file name (*note Naming convention::) to GRUB, how to +install GRUB on your drive (*note Installation::), and how to boot your +OSes (*note Booting::), step by step. + + +File: grub.info, Node: Overview-Footnotes, Up: Overview + + (1) "chain-load" is the mechanism for loading unsupported operating +systems by loading another boot loader. It is typically used for +loading DOS or Windows. + + +File: grub.info, Node: History, Next: Changes from GRUB Legacy, Prev: Overview, Up: Introduction + +1.2 History of GRUB +=================== + +GRUB originated in 1995 when Erich Boleyn was trying to boot the GNU +Hurd with the University of Utah's Mach 4 microkernel (now known as GNU +Mach). Erich and Brian Ford designed the Multiboot Specification (*note +Multiboot Specification: (multiboot)Top.), because they were determined +not to add to the large number of mutually-incompatible PC boot methods. + + Erich then began modifying the FreeBSD boot loader so that it would +understand Multiboot. He soon realized that it would be a lot easier to +write his own boot loader from scratch than to keep working on the +FreeBSD boot loader, and so GRUB was born. + + Erich added many features to GRUB, but other priorities prevented him +from keeping up with the demands of its quickly-expanding user base. In +1999, Gordon Matzigkeit and Yoshinori K. Okuji adopted GRUB as an +official GNU package, and opened its development by making the latest +sources available via anonymous CVS. *Note Obtaining and Building +GRUB::, for more information. + + Over the next few years, GRUB was extended to meet many needs, but it +quickly became clear that its design was not keeping up with the +extensions being made to it, and we reached the point where it was very +difficult to make any further changes without breaking existing +features. Around 2002, Yoshinori K. Okuji started work on PUPA +(Preliminary Universal Programming Architecture for GNU GRUB), aiming to +rewrite the core of GRUB to make it cleaner, safer, more robust, and +more powerful. PUPA was eventually renamed to GRUB 2, and the original +version of GRUB was renamed to GRUB Legacy. Small amounts of +maintenance continued to be done on GRUB Legacy, but the last release +(0.97) was made in 2005 and at the time of writing it seems unlikely +that there will be another. + + By around 2007, GNU/Linux distributions started to use GRUB 2 to +limited extents, and by the end of 2009 multiple major distributions +were installing it by default. + + +File: grub.info, Node: Changes from GRUB Legacy, Next: Features, Prev: History, Up: Introduction + +1.3 Differences from previous versions +====================================== + +GRUB 2 is a rewrite of GRUB (*note History::), although it shares many +characteristics with the previous version, now known as GRUB Legacy. +Users of GRUB Legacy may need some guidance to find their way around +this new version. + + * The configuration file has a new name ('grub.cfg' rather than + 'menu.lst' or 'grub.conf'), new syntax (*note Configuration::) and + many new commands (*note Commands::). Configuration cannot be + copied over directly, although most GRUB Legacy users should not + find the syntax too surprising. + + * 'grub.cfg' is typically automatically generated by 'grub-mkconfig' + (*note Simple configuration::). This makes it easier to handle + versioned kernel upgrades. + + * Partition numbers in GRUB device names now start at 1, not 0 (*note + Naming convention::). + + * The configuration file is now written in something closer to a full + scripting language: variables, conditionals, and loops are + available. + + * A small amount of persistent storage is available across reboots, + using the 'save_env' and 'load_env' commands in GRUB and the + 'grub-editenv' utility. This is not available in all + configurations (*note Environment block::). + + * GRUB 2 has more reliable ways to find its own files and those of + target kernels on multiple-disk systems, and has commands (*note + search::) to find devices using file system labels or Universally + Unique Identifiers (UUIDs). + + * GRUB 2 is available for several other types of system in addition + to the PC BIOS systems supported by GRUB Legacy: PC EFI, PC + coreboot, PowerPC, SPARC, and MIPS Lemote Yeeloong are all + supported. + + * Many more file systems are supported, including but not limited to + ext4, HFS+, and NTFS. + + * GRUB 2 can read files directly from LVM and RAID devices. + + * A graphical terminal and a graphical menu system are available. + + * GRUB 2's interface can be translated, including menu entry names. + + * The image files (*note Images::) that make up GRUB have been + reorganised; Stage 1, Stage 1.5, and Stage 2 are no more. + + * GRUB 2 puts many facilities in dynamically loaded modules, allowing + the core image to be smaller, and allowing the core image to be + built in more flexible ways. + + +File: grub.info, Node: Features, Next: Role of a boot loader, Prev: Changes from GRUB Legacy, Up: Introduction + +1.4 GRUB features +================= + +The primary requirement for GRUB is that it be compliant with the +"Multiboot Specification", which is described in *note Multiboot +Specification: (multiboot)Top. + + The other goals, listed in approximate order of importance, are: + + * Basic functions must be straightforward for end-users. + + * Rich functionality to support kernel experts and designers. + + * Backward compatibility for booting FreeBSD, NetBSD, OpenBSD, and + Linux. Proprietary kernels (such as DOS, Windows NT, and OS/2) are + supported via a chain-loading function. + + Except for specific compatibility modes (chain-loading and the Linux +"piggyback" format), all kernels will be started in much the same state +as in the Multiboot Specification. Only kernels loaded at 1 megabyte or +above are presently supported. Any attempt to load below that boundary +will simply result in immediate failure and an error message reporting +the problem. + + In addition to the requirements above, GRUB has the following +features (note that the Multiboot Specification doesn't require all the +features that GRUB supports): + +Recognize multiple executable formats + Support many of the "a.out" variants plus "ELF". Symbol tables are + also loaded. + +Support non-Multiboot kernels + Support many of the various free 32-bit kernels that lack Multiboot + compliance (primarily FreeBSD, NetBSD(1) (*note + Features-Footnote-1::), OpenBSD, and Linux). Chain-loading of + other boot loaders is also supported. + +Load multiples modules + Fully support the Multiboot feature of loading multiple modules. + +Load a configuration file + Support a human-readable text configuration file with preset boot + commands. You can also load another configuration file dynamically + and embed a preset configuration file in a GRUB image file. The + list of commands (*note Commands::) are a superset of those + supported on the command-line. An example configuration file is + provided in *note Configuration::. + +Provide a menu interface + A menu interface listing preset boot commands, with a programmable + timeout, is available. There is no fixed limit on the number of + boot entries, and the current implementation has space for several + hundred. + +Have a flexible command-line interface + A fairly flexible command-line interface, accessible from the menu, + is available to edit any preset commands, or write a new boot + command set from scratch. If no configuration file is present, + GRUB drops to the command-line. + + The list of commands (*note Commands::) are a subset of those + supported for configuration files. Editing commands closely + resembles the Bash command-line (*note Bash: (features)Command Line + Editing.), with -completion of commands, devices, partitions, + and files in a directory depending on context. + +Support multiple filesystem types + Support multiple filesystem types transparently, plus a useful + explicit blocklist notation. The currently supported filesystem + types are "Amiga Fast FileSystem (AFFS)", "AtheOS fs", "BeFS", + "BtrFS" (including raid0, raid1, raid10, gzip and lzo), "cpio" + (little- and big-endian bin, odc and newc variants), "Linux + ext2/ext3/ext4", "DOS FAT12/FAT16/FAT32", "exFAT", "HFS", "HFS+", + "ISO9660" (including Joliet, Rock-ridge and multi-chunk files), + "JFS", "Minix fs" (versions 1, 2 and 3), "nilfs2", "NTFS" + (including compression), "ReiserFS", "ROMFS", "Amiga Smart + FileSystem (SFS)", "Squash4", "tar", "UDF", "BSD UFS/UFS2", "XFS", + and "ZFS" (including lzjb, gzip, zle, mirror, stripe, raidz1/2/3 + and encryption in AES-CCM and AES-GCM). *Note Filesystem::, for + more information. + +Support automatic decompression + Can decompress files which were compressed by 'gzip' or 'xz'(2) + (*note Features-Footnote-2::). This function is both automatic and + transparent to the user (i.e. all functions operate upon the + uncompressed contents of the specified files). This greatly + reduces a file size and loading time, a particularly great benefit + for floppies.(3) (*note Features-Footnote-3::) + + It is conceivable that some kernel modules should be loaded in a + compressed state, so a different module-loading command can be + specified to avoid uncompressing the modules. + +Access data on any installed device + Support reading data from any or all floppies or hard disk(s) + recognized by the BIOS, independent of the setting of the root + device. + +Be independent of drive geometry translations + Unlike many other boot loaders, GRUB makes the particular drive + translation irrelevant. A drive installed and running with one + translation may be converted to another translation without any + adverse effects or changes in GRUB's configuration. + +Detect all installed RAM + GRUB can generally find all the installed RAM on a PC-compatible + machine. It uses an advanced BIOS query technique for finding all + memory regions. As described on the Multiboot Specification (*note + Multiboot Specification: (multiboot)Top.), not all kernels make use + of this information, but GRUB provides it for those who do. + +Support Logical Block Address mode + In traditional disk calls (called "CHS mode"), there is a geometry + translation problem, that is, the BIOS cannot access over 1024 + cylinders, so the accessible space is limited to at least 508 MB + and to at most 8GB. GRUB can't universally solve this problem, as + there is no standard interface used in all machines. However, + several newer machines have the new interface, Logical Block + Address ("LBA") mode. GRUB automatically detects if LBA mode is + available and uses it if available. In LBA mode, GRUB can access + the entire disk. + +Support network booting + GRUB is basically a disk-based boot loader but also has network + support. You can load OS images from a network by using the "TFTP" + protocol. + +Support remote terminals + To support computers with no console, GRUB provides remote terminal + support, so that you can control GRUB from a remote host. Only + serial terminal support is implemented at the moment. + + +File: grub.info, Node: Features-Footnotes, Up: Features + + (1) The NetBSD/i386 kernel is Multiboot-compliant, but lacks support +for Multiboot modules. + + (2) Only CRC32 data integrity check is supported (xz default is CRC64 +so one should use -check=crc32 option). LZMA BCJ filters are supported. + + (3) There are a few pathological cases where loading a very badly +organized ELF kernel might take longer, but in practice this never +happen. + + +File: grub.info, Node: Role of a boot loader, Prev: Features, Up: Introduction + +1.5 The role of a boot loader +============================= + +The following is a quotation from Gordon Matzigkeit, a GRUB fanatic: + + Some people like to acknowledge both the operating system and + kernel when they talk about their computers, so they might say they + use "GNU/Linux" or "GNU/Hurd". Other people seem to think that the + kernel is the most important part of the system, so they like to + call their GNU operating systems "Linux systems." + + I, personally, believe that this is a grave injustice, because the + _boot loader_ is the most important software of all. I used to + refer to the above systems as either "LILO"(1) (*note Role of a + boot loader-Footnote-1::) or "GRUB" systems. + + Unfortunately, nobody ever understood what I was talking about; now + I just use the word "GNU" as a pseudonym for GRUB. + + So, if you ever hear people talking about their alleged "GNU" + systems, remember that they are actually paying homage to the best + boot loader around... GRUB! + + We, the GRUB maintainers, do not (usually) encourage Gordon's level +of fanaticism, but it helps to remember that boot loaders deserve +recognition. We hope that you enjoy using GNU GRUB as much as we did +writing it. + + +File: grub.info, Node: Role of a boot loader-Footnotes, Up: Role of a boot loader + + (1) The LInux LOader, a boot loader that everybody uses, but nobody +likes. + + +File: grub.info, Node: Naming convention, Next: OS-specific notes about grub tools, Prev: Introduction, Up: Top + +2 Naming convention +******************* + +The device syntax used in GRUB is a wee bit different from what you may +have seen before in your operating system(s), and you need to know it so +that you can specify a drive/partition. + + Look at the following examples and explanations: + + (fd0) + + First of all, GRUB requires that the device name be enclosed with '(' +and ')'. The 'fd' part means that it is a floppy disk. The number '0' +is the drive number, which is counted from _zero_. This expression +means that GRUB will use the whole floppy disk. + + (hd0,msdos2) + + Here, 'hd' means it is a hard disk drive. The first integer '0' +indicates the drive number, that is, the first hard disk, the string +'msdos' indicates the partition scheme, while the second integer, '2', +indicates the partition number (or the PC slice number in the BSD +terminology). The partition numbers are counted from _one_, not from +zero (as was the case in previous versions of GRUB). This expression +means the second partition of the first hard disk drive. In this case, +GRUB uses one partition of the disk, instead of the whole disk. + + (hd0,msdos5) + + This specifies the first "extended partition" of the first hard disk +drive. Note that the partition numbers for extended partitions are +counted from '5', regardless of the actual number of primary partitions +on your hard disk. + + (hd1,msdos1,bsd1) + + This means the BSD 'a' partition on first PC slice number of the +second hard disk. + + Of course, to actually access the disks or partitions with GRUB, you +need to use the device specification in a command, like 'set root=(fd0)' +or 'parttool (hd0,msdos3) hidden-'. To help you find out which number +specifies a partition you want, the GRUB command-line (*note +Command-line interface::) options have argument completion. This means +that, for example, you only need to type + + set root=( + + followed by a , and GRUB will display the list of drives, +partitions, or file names. So it should be quite easy to determine the +name of your target partition, even with minimal knowledge of the +syntax. + + Note that GRUB does _not_ distinguish IDE from SCSI - it simply +counts the drive numbers from zero, regardless of their type. Normally, +any IDE drive number is less than any SCSI drive number, although that +is not true if you change the boot sequence by swapping IDE and SCSI +drives in your BIOS. + + Now the question is, how to specify a file? Again, consider an +example: + + (hd0,msdos1)/vmlinuz + + This specifies the file named 'vmlinuz', found on the first partition +of the first hard disk drive. Note that the argument completion works +with file names, too. + + That was easy, admit it. Now read the next chapter, to find out how +to actually install GRUB on your drive. + + +File: grub.info, Node: OS-specific notes about grub tools, Next: Installation, Prev: Naming convention, Up: Top + +3 OS-specific notes about grub tools +************************************ + +On OS which have device nodes similar to Unix-like OS GRUB tools use the +OS name. E.g. for GNU/Linux: + + # grub-install /dev/sda + + On AROS we use another syntax. For volumes: + + //: + + E.g. + + //:DH0 + + For disks we use syntax: + //:/unit/flags + + E.g. + + # grub-install //:ata.device/0/0 + + On Windows we use UNC path. For volumes it's typically + + \\?\Volume{} + \\?\: + + E.g. + + \\?\Volume{17f34d50-cf64-4b02-800e-51d79c3aa2ff} + \\?\C: + + For disks it's + + \\?\PhysicalDrive + + E.g. + + # grub-install \\?\PhysicalDrive0 + + Beware that you may need to further escape the backslashes depending +on your shell. + + When compiled with cygwin support then cygwin drive names are +automatically when needed. E.g. + + # grub-install /dev/sda + + +File: grub.info, Node: Installation, Next: Booting, Prev: OS-specific notes about grub tools, Up: Top + +4 Installation +************** + +In order to install GRUB as your boot loader, you need to first install +the GRUB system and utilities under your UNIX-like operating system +(*note Obtaining and Building GRUB::). You can do this either from the +source tarball, or as a package for your OS. + + After you have done that, you need to install the boot loader on a +drive (floppy or hard disk) by using the utility 'grub-install' (*note +Invoking grub-install::) on a UNIX-like OS. + + GRUB comes with boot images, which are normally put in the directory +'/usr/lib/grub/-' (for BIOS-based machines +'/usr/lib/grub/i386-pc'). Hereafter, the directory where GRUB images +are initially placed (normally '/usr/lib/grub/-') will be +called the "image directory", and the directory where the boot loader +needs to find them (usually '/boot') will be called the "boot +directory". + +* Menu: + +* Installing GRUB using grub-install:: +* Making a GRUB bootable CD-ROM:: +* Device map:: +* BIOS installation:: + + +File: grub.info, Node: Installing GRUB using grub-install, Next: Making a GRUB bootable CD-ROM, Up: Installation + +4.1 Installing GRUB using grub-install +====================================== + +For information on where GRUB should be installed on PC BIOS platforms, +*note BIOS installation::. + + In order to install GRUB under a UNIX-like OS (such as GNU), invoke +the program 'grub-install' (*note Invoking grub-install::) as the +superuser ("root"). + + The usage is basically very simple. You only need to specify one +argument to the program, namely, where to install the boot loader. The +argument has to be either a device file (like '/dev/hda'). For example, +under Linux the following will install GRUB into the MBR of the first +IDE disk: + + # grub-install /dev/sda + + Likewise, under GNU/Hurd, this has the same effect: + + # grub-install /dev/hd0 + + But all the above examples assume that GRUB should put images under +the '/boot' directory. If you want GRUB to put images under a directory +other than '/boot', you need to specify the option '--boot-directory'. +The typical usage is that you create a GRUB boot floppy with a +filesystem. Here is an example: + + # mke2fs /dev/fd0 + # mount -t ext2 /dev/fd0 /mnt + # mkdir /mnt/boot + # grub-install --boot-directory=/mnt/boot /dev/fd0 + # umount /mnt + + Some BIOSes have a bug of exposing the first partition of a USB drive +as a floppy instead of exposing the USB drive as a hard disk (they call +it "USB-FDD" boot). In such cases, you need to install like this: + + # losetup /dev/loop0 /dev/sdb1 + # mount /dev/loop0 /mnt/usb + # grub-install --boot-directory=/mnt/usb/bugbios --force --allow-floppy /dev/loop0 + + This install doesn't conflict with standard install as long as they +are in separate directories. + + Note that 'grub-install' is actually just a shell script and the real +task is done by other tools such as 'grub-mkimage'. Therefore, you may +run those commands directly to install GRUB, without using +'grub-install'. Don't do that, however, unless you are very familiar +with the internals of GRUB. Installing a boot loader on a running OS may +be extremely dangerous. + + On EFI systems for fixed disk install you have to mount EFI System +Partition. If you mount it at '/boot/efi' then you don't need any +special arguments: + + # grub-install + + Otherwise you need to specify where your EFI System partition is +mounted: + + # grub-install --efi-directory=/mnt/efi + + For removable installs you have to use '--removable' and specify both +'--boot-directory' and '--efi-directory': + + # grub-install --efi-directory=/mnt/usb --boot-directory=/mnt/usb/boot --removable + + +File: grub.info, Node: Making a GRUB bootable CD-ROM, Next: Device map, Prev: Installing GRUB using grub-install, Up: Installation + +4.2 Making a GRUB bootable CD-ROM +================================= + +GRUB supports the "no emulation mode" in the El Torito specification(1) +(*note Making a GRUB bootable CD-ROM-Footnote-1::). This means that you +can use the whole CD-ROM from GRUB and you don't have to make a floppy +or hard disk image file, which can cause compatibility problems. + + For booting from a CD-ROM, GRUB uses a special image called +'cdboot.img', which is concatenated with 'core.img'. The 'core.img' +used for this should be built with at least the 'iso9660' and 'biosdisk' +modules. Your bootable CD-ROM will usually also need to include a +configuration file 'grub.cfg' and some other GRUB modules. + + To make a simple generic GRUB rescue CD, you can use the +'grub-mkrescue' program (*note Invoking grub-mkrescue::): + + $ grub-mkrescue -o grub.iso + + You will often need to include other files in your image. To do +this, first make a top directory for the bootable image, say, 'iso': + + $ mkdir iso + + Make a directory for GRUB: + + $ mkdir -p iso/boot/grub + + If desired, make the config file 'grub.cfg' under 'iso/boot/grub' +(*note Configuration::), and copy any files and directories for the disc +to the directory 'iso/'. + + Finally, make the image: + + $ grub-mkrescue -o grub.iso iso + + This produces a file named 'grub.iso', which then can be burned into +a CD (or a DVD), or written to a USB mass storage device. + + The root device will be set up appropriately on entering your +'grub.cfg' configuration file, so you can refer to file names on the CD +without needing to use an explicit device name. This makes it easier to +produce rescue images that will work on both optical drives and USB mass +storage devices. + + +File: grub.info, Node: Making a GRUB bootable CD-ROM-Footnotes, Up: Making a GRUB bootable CD-ROM + + (1) El Torito is a specification for bootable CD using BIOS +functions. + + +File: grub.info, Node: Device map, Next: BIOS installation, Prev: Making a GRUB bootable CD-ROM, Up: Installation + +4.3 The map between BIOS drives and OS devices +============================================== + +If the device map file exists, the GRUB utilities ('grub-probe', etc.) +read it to map BIOS drives to OS devices. This file consists of lines +like this: + + (DEVICE) FILE + + DEVICE is a drive specified in the GRUB syntax (*note Device +syntax::), and FILE is an OS file, which is normally a device file. + + Historically, the device map file was used because GRUB device names +had to be used in the configuration file, and they were derived from +BIOS drive numbers. The map between BIOS drives and OS devices cannot +always be guessed correctly: for example, GRUB will get the order wrong +if you exchange the boot sequence between IDE and SCSI in your BIOS. + + Unfortunately, even OS device names are not always stable. Modern +versions of the Linux kernel may probe drives in a different order from +boot to boot, and the prefix ('/dev/hd*' versus '/dev/sd*') may change +depending on the driver subsystem in use. As a result, the device map +file required frequent editing on some systems. + + GRUB avoids this problem nowadays by using UUIDs or file system +labels when generating 'grub.cfg', and we advise that you do the same +for any custom menu entries you write. If the device map file does not +exist, then the GRUB utilities will assume a temporary device map on the +fly. This is often good enough, particularly in the common case of +single-disk systems. + + However, the device map file is not entirely obsolete yet, and it is +used for overriding when current environment is different from the one +on boot. Most common case is if you use a partition or logical volume +as a disk for virtual machine. You can put any comments in the file if +needed, as the GRUB utilities assume that a line is just a comment if +the first character is '#'. + + +File: grub.info, Node: BIOS installation, Prev: Device map, Up: Installation + +4.4 BIOS installation +===================== + +MBR +=== + +The partition table format traditionally used on PC BIOS platforms is +called the Master Boot Record (MBR) format; this is the format that +allows up to four primary partitions and additional logical partitions. +With this partition table format, there are two ways to install GRUB: it +can be embedded in the area between the MBR and the first partition +(called by various names, such as the "boot track", "MBR gap", or +"embedding area", and which is usually at least 31 KiB), or the core +image can be installed in a file system and a list of the blocks that +make it up can be stored in the first sector of that partition. + + Each of these has different problems. There is no way to reserve +space in the embedding area with complete safety, and some proprietary +software is known to use it to make it difficult for users to work +around licensing restrictions; and systems are sometimes partitioned +without leaving enough space before the first partition. On the other +hand, installing to a filesystem means that GRUB is vulnerable to its +blocks being moved around by filesystem features such as tail packing, +or even by aggressive fsck implementations, so this approach is quite +fragile; and this approach can only be used if the '/boot' filesystem is +on the same disk that the BIOS boots from, so that GRUB does not have to +rely on guessing BIOS drive numbers. + + The GRUB development team generally recommends embedding GRUB before +the first partition, unless you have special requirements. You must +ensure that the first partition starts at least 31 KiB (63 sectors) from +the start of the disk; on modern disks, it is often a performance +advantage to align partitions on larger boundaries anyway, so the first +partition might start 1 MiB from the start of the disk. + +GPT +=== + +Some newer systems use the GUID Partition Table (GPT) format. This was +specified as part of the Extensible Firmware Interface (EFI), but it can +also be used on BIOS platforms if system software supports it; for +example, GRUB and GNU/Linux can be used in this configuration. With +this format, it is possible to reserve a whole partition for GRUB, +called the BIOS Boot Partition. GRUB can then be embedded into that +partition without the risk of being overwritten by other software and +without being contained in a filesystem which might move its blocks +around. + + When creating a BIOS Boot Partition on a GPT system, you should make +sure that it is at least 31 KiB in size. (GPT-formatted disks are not +usually particularly small, so we recommend that you make it larger than +the bare minimum, such as 1 MiB, to allow plenty of room for growth.) +You must also make sure that it has the proper partition type. Using +GNU Parted, you can set this using a command such as the following: + + # parted /dev/DISK set PARTITION-NUMBER bios_grub on + + If you are using gdisk, set the partition type to '0xEF02'. With +partitioning programs that require setting the GUID directly, it should +be '21686148-6449-6e6f-744e656564454649'. + + *Caution:* Be very careful which partition you select! When GRUB +finds a BIOS Boot Partition during installation, it will automatically +overwrite part of it. Make sure that the partition does not contain any +other data. + + +File: grub.info, Node: Booting, Next: Configuration, Prev: Installation, Up: Top + +5 Booting +********* + +GRUB can load Multiboot-compliant kernels in a consistent way, but for +some free operating systems you need to use some OS-specific magic. + +* Menu: + +* General boot methods:: How to boot OSes with GRUB generally +* Loopback booting:: Notes on booting from loopbacks +* OS-specific notes:: Notes on some operating systems + + +File: grub.info, Node: General boot methods, Next: Loopback booting, Up: Booting + +5.1 How to boot operating systems +================================= + +GRUB has two distinct boot methods. One of the two is to load an +operating system directly, and the other is to chain-load another boot +loader which then will load an operating system actually. Generally +speaking, the former is more desirable, because you don't need to +install or maintain other boot loaders and GRUB is flexible enough to +load an operating system from an arbitrary disk/partition. However, the +latter is sometimes required, since GRUB doesn't support all the +existing operating systems natively. + +* Menu: + +* Loading an operating system directly:: +* Chain-loading:: + + +File: grub.info, Node: Loading an operating system directly, Next: Chain-loading, Up: General boot methods + +5.1.1 How to boot an OS directly with GRUB +------------------------------------------ + +Multiboot (*note Multiboot Specification: (multiboot)Top.) is the native +format supported by GRUB. For the sake of convenience, there is also +support for Linux, FreeBSD, NetBSD and OpenBSD. If you want to boot +other operating systems, you will have to chain-load them (*note +Chain-loading::). + + FIXME: this section is incomplete. + + 1. Run the command 'boot' (*note boot::). + + However, DOS and Windows have some deficiencies, so you might have to +use more complicated instructions. *Note DOS/Windows::, for more +information. + + +File: grub.info, Node: Chain-loading, Prev: Loading an operating system directly, Up: General boot methods + +5.1.2 Chain-loading an OS +------------------------- + +Operating systems that do not support Multiboot and do not have specific +support in GRUB (specific support is available for Linux, FreeBSD, +NetBSD and OpenBSD) must be chain-loaded, which involves loading another +boot loader and jumping to it in real mode. + + The 'chainloader' command (*note chainloader::) is used to set this +up. It is normally also necessary to load some GRUB modules and set the +appropriate root device. Putting this together, we get something like +this, for a Windows system on the first partition of the first hard +disk: + +menuentry "Windows" { + insmod chain + insmod ntfs + set root=(hd0,1) + chainloader +1 +} + + On systems with multiple hard disks, an additional workaround may be +required. *Note DOS/Windows::. + + Chain-loading is only supported on PC BIOS and EFI platforms. + + +File: grub.info, Node: Loopback booting, Next: OS-specific notes, Prev: General boot methods, Up: Booting + +5.2 Loopback booting +==================== + +GRUB is able to read from an image (be it one of CD or HDD) stored on +any of its accessible storages (refer to *note loopback:: command). +However the OS itself should be able to find its root. This usually +involves running a userspace program running before the real root is +discovered. This is achieved by GRUB loading a specially made small +image and passing it as ramdisk to the kernel. This is achieved by +commands 'kfreebsd_module', 'knetbsd_module_elf', 'kopenbsd_ramdisk', +'initrd' (*note initrd::), 'initrd16' (*note initrd::), +'multiboot_module', 'multiboot2_module' or 'xnu_ramdisk' depending on +the loader. Note that for knetbsd the image must be put inside +miniroot.kmod and the whole miniroot.kmod has to be loaded. In kopenbsd +payload this is disabled by default. Aditionally behaviour of initial +ramdisk depends on command line options. Several distributors provide +the image for this purpose or it's integrated in their standard ramdisk +and activated by special option. Consult your kernel and distribution +manual for more details. Other loaders like appleloader, chainloader +(BIOS, EFI, coreboot), freedos, ntldr and plan9 provide no possibility +of loading initial ramdisk and as far as author is aware the payloads in +question don't support either initial ramdisk or discovering loopback +boot in other way and as such not bootable this way. Please consider +alternative boot methods like copying all files from the image to actual +partition. Consult your OS documentation for more details + + +File: grub.info, Node: OS-specific notes, Prev: Loopback booting, Up: Booting + +5.3 Some caveats on OS-specific issues +====================================== + +Here, we describe some caveats on several operating systems. + +* Menu: + +* GNU/Hurd:: +* GNU/Linux:: +* NetBSD:: +* DOS/Windows:: + + +File: grub.info, Node: GNU/Hurd, Next: GNU/Linux, Up: OS-specific notes + +5.3.1 GNU/Hurd +-------------- + +Since GNU/Hurd is Multiboot-compliant, it is easy to boot it; there is +nothing special about it. But do not forget that you have to specify a +root partition to the kernel. + + 1. Set GRUB's root device to the same drive as GNU/Hurd's. The + command 'search --set=root --file /boot/gnumach.gz' or similar may + help you (*note search::). + + 2. Load the kernel and the modules, like this: + + grub> multiboot /boot/gnumach.gz root=device:hd0s1 + grub> module /hurd/ext2fs.static ext2fs --readonly \ + --multiboot-command-line='${kernel-command-line}' \ + --host-priv-port='${host-port}' \ + --device-master-port='${device-port}' \ + --exec-server-task='${exec-task}' -T typed '${root}' \ + '$(task-create)' '$(task-resume)' + grub> module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)' + + 3. Finally, run the command 'boot' (*note boot::). + + +File: grub.info, Node: GNU/Linux, Next: NetBSD, Prev: GNU/Hurd, Up: OS-specific notes + +5.3.2 GNU/Linux +--------------- + +It is relatively easy to boot GNU/Linux from GRUB, because it somewhat +resembles to boot a Multiboot-compliant OS. + + 1. Set GRUB's root device to the same drive as GNU/Linux's. The + command 'search --set=root --file /vmlinuz' or similar may help you + (*note search::). + + 2. Load the kernel using the command 'linux' (*note linux::): + + grub> linux /vmlinuz root=/dev/sda1 + + If you need to specify some kernel parameters, just append them to + the command. For example, to set 'acpi' to 'off', do this: + + grub> linux /vmlinuz root=/dev/sda1 acpi=off + + See the documentation in the Linux source tree for complete + information on the available options. + + With 'linux' GRUB uses 32-bit protocol. Some BIOS services like + APM or EDD aren't available with this protocol. In this case you + need to use 'linux16' + + grub> linux16 /vmlinuz root=/dev/sda1 acpi=off + + 3. If you use an initrd, execute the command 'initrd' (*note initrd::) + after 'linux': + + grub> initrd /initrd + + If you used 'linux16' you need to use 'initrd16': + + grub> initrd16 /initrd + + 4. Finally, run the command 'boot' (*note boot::). + + *Caution:* If you use an initrd and specify the 'mem=' option to the +kernel to let it use less than actual memory size, you will also have to +specify the same memory size to GRUB. To let GRUB know the size, run the +command 'uppermem' _before_ loading the kernel. *Note uppermem::, for +more information. + + +File: grub.info, Node: NetBSD, Next: DOS/Windows, Prev: GNU/Linux, Up: OS-specific notes + +5.3.3 NetBSD +------------ + +Booting a NetBSD kernel from GRUB is also relatively easy: first set +GRUB's root device, then load the kernel and the modules, and finally +run 'boot'. + + 1. Set GRUB's root device to the partition holding the NetBSD root + file system. For a disk with a NetBSD disk label, this is usually + the first partition (a:). In that case, and assuming that the + partition is on the first hard disk, set GRUB's root device as + follows: + + grub> insmod part_bsd + grub> set root=(hd0,netbsd1) + + For a disk with a GUID Partition Table (GPT), and assuming that the + NetBSD root partition is the third GPT partition, do this: + + grub> insmod part_gpt + grub> set root=(hd0,gpt3) + + 2. Load the kernel using the command 'knetbsd': + + grub> knetbsd /netbsd + + Various options may be given to 'knetbsd'. These options are, for + the most part, the same as in the NetBSD boot loader. For + instance, to boot the system in single-user mode and with verbose + messages, do this: + + grub> knetbsd /netbsd -s -v + + 3. If needed, load kernel modules with the command + 'knetbsd_module_elf'. A typical example is the module for the root + file system: + + grub> knetbsd_module_elf /stand/amd64/6.0/modules/ffs/ffs.kmod + + 4. Finally, run the command 'boot' (*note boot::). + + +File: grub.info, Node: DOS/Windows, Prev: NetBSD, Up: OS-specific notes + +5.3.4 DOS/Windows +----------------- + +GRUB cannot boot DOS or Windows directly, so you must chain-load them +(*note Chain-loading::). However, their boot loaders have some critical +deficiencies, so it may not work to just chain-load them. To overcome +the problems, GRUB provides you with two helper functions. + + If you have installed DOS (or Windows) on a non-first hard disk, you +have to use the disk swapping technique, because that OS cannot boot +from any disks but the first one. The workaround used in GRUB is the +command 'drivemap' (*note drivemap::), like this: + + drivemap -s (hd0) (hd1) + + This performs a "virtual" swap between your first and second hard +drive. + + *Caution:* This is effective only if DOS (or Windows) uses BIOS to +access the swapped disks. If that OS uses a special driver for the +disks, this probably won't work. + + Another problem arises if you installed more than one set of +DOS/Windows onto one disk, because they could be confused if there are +more than one primary partitions for DOS/Windows. Certainly you should +avoid doing this, but there is a solution if you do want to do so. Use +the partition hiding/unhiding technique. + + If GRUB "hides" a DOS (or Windows) partition (*note parttool::), DOS +(or Windows) will ignore the partition. If GRUB "unhides" a DOS (or +Windows) partition, DOS (or Windows) will detect the partition. Thus, +if you have installed DOS (or Windows) on the first and the second +partition of the first hard disk, and you want to boot the copy on the +first partition, do the following: + + parttool (hd0,1) hidden- + parttool (hd0,2) hidden+ + set root=(hd0,1) + chainloader +1 + parttool ${root} boot+ + boot + + +File: grub.info, Node: Configuration, Next: Theme file format, Prev: Booting, Up: Top + +6 Writing your own configuration file +************************************* + +GRUB is configured using 'grub.cfg', usually located under '/boot/grub'. +This file is quite flexible, but most users will not need to write the +whole thing by hand. + +* Menu: + +* Simple configuration:: Recommended for most users +* Shell-like scripting:: For power users and developers +* Multi-boot manual config:: For non-standard multi-OS scenarios +* Embedded configuration:: Embedding a configuration file into GRUB + + +File: grub.info, Node: Simple configuration, Next: Shell-like scripting, Up: Configuration + +6.1 Simple configuration handling +================================= + +The program 'grub-mkconfig' (*note Invoking grub-mkconfig::) generates +'grub.cfg' files suitable for most cases. It is suitable for use when +upgrading a distribution, and will discover available kernels and +attempt to generate menu entries for them. + + 'grub-mkconfig' does have some limitations. While adding extra +custom menu entries to the end of the list can be done by editing +'/etc/grub.d/40_custom' or creating '/boot/grub/custom.cfg', changing +the order of menu entries or changing their titles may require making +complex changes to shell scripts stored in '/etc/grub.d/'. This may be +improved in the future. In the meantime, those who feel that it would +be easier to write 'grub.cfg' directly are encouraged to do so (*note +Booting::, and *note Shell-like scripting::), and to disable any system +provided by their distribution to automatically run 'grub-mkconfig'. + + The file '/etc/default/grub' controls the operation of +'grub-mkconfig'. It is sourced by a shell script, and so must be valid +POSIX shell input; normally, it will just be a sequence of 'KEY=value' +lines, but if the value contains spaces or other special characters then +it must be quoted. For example: + + GRUB_TERMINAL_INPUT="console serial" + + Valid keys in '/etc/default/grub' are as follows: + +'GRUB_DEFAULT' + The default menu entry. This may be a number, in which case it + identifies the Nth entry in the generated menu counted from zero, + or the title of a menu entry, or the special string 'saved'. Using + the id may be useful if you want to set a menu entry as the default + even though there may be a variable number of entries before it. + + For example, if you have: + + menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux { + ... + } + + then you can make this the default using: + + GRUB_DEFAULT=example-gnu-linux + + Previously it was documented the way to use entry title. While + this still works it's not recommended since titles often contain + unstable device names and may be translated + + If you set this to 'saved', then the default menu entry will be + that saved by 'GRUB_SAVEDEFAULT' or 'grub-set-default'. This + relies on the environment block, which may not be available in all + situations (*note Environment block::). + + The default is '0'. + +'GRUB_SAVEDEFAULT' + If this option is set to 'true', then, when an entry is selected, + save it as a new default entry for use by future runs of GRUB. This + is only useful if 'GRUB_DEFAULT=saved'; it is a separate option + because 'GRUB_DEFAULT=saved' is useful without this option, in + conjunction with 'grub-set-default'. Unset by default. This + option relies on the environment block, which may not be available + in all situations (*note Environment block::). + +'GRUB_TIMEOUT' + Boot the default entry this many seconds after the menu is + displayed, unless a key is pressed. The default is '5'. Set to + '0' to boot immediately without displaying the menu, or to '-1' to + wait indefinitely. + + If 'GRUB_TIMEOUT_STYLE' is set to 'countdown' or 'hidden', the + timeout is instead counted before the menu is displayed. + +'GRUB_TIMEOUT_STYLE' + If this option is unset or set to 'menu', then GRUB will display + the menu and then wait for the timeout set by 'GRUB_TIMEOUT' to + expire before booting the default entry. Pressing a key interrupts + the timeout. + + If this option is set to 'countdown' or 'hidden', then, before + displaying the menu, GRUB will wait for the timeout set by + 'GRUB_TIMEOUT' to expire. If is pressed during that time, it + will display the menu and wait for input. If a hotkey associated + with a menu entry is pressed, it will boot the associated menu + entry immediately. If the timeout expires before either of these + happens, it will boot the default entry. In the 'countdown' case, + it will show a one-line indication of the remaining time. + +'GRUB_DEFAULT_BUTTON' +'GRUB_TIMEOUT_BUTTON' +'GRUB_TIMEOUT_STYLE_BUTTON' +'GRUB_BUTTON_CMOS_ADDRESS' + Variants of the corresponding variables without the '_BUTTON' + suffix, used to support vendor-specific power buttons. *Note + Vendor power-on keys::. + +'GRUB_DISTRIBUTOR' + Set by distributors of GRUB to their identifying name. This is + used to generate more informative menu entry titles. + +'GRUB_TERMINAL_INPUT' + Select the terminal input device. You may select multiple devices + here, separated by spaces. + + Valid terminal input names depend on the platform, but may include + 'console' (native platform console), 'serial' (serial terminal), + 'serial_' (serial terminal with explicit port selection), + 'at_keyboard' (PC AT keyboard), or 'usb_keyboard' (USB keyboard + using the HID Boot Protocol, for cases where the firmware does not + handle this). + + The default is to use the platform's native terminal input. + +'GRUB_TERMINAL_OUTPUT' + Select the terminal output device. You may select multiple devices + here, separated by spaces. + + Valid terminal output names depend on the platform, but may include + 'console' (native platform console), 'serial' (serial terminal), + 'serial_' (serial terminal with explicit port selection), + 'gfxterm' (graphics-mode output), 'vga_text' (VGA text output), + 'mda_text' (MDA text output), 'morse' (Morse-coding using system + beeper) or 'spkmodem' (simple data protocol using system speaker). + + 'spkmodem' is useful when no serial port is available. Connect the + output of sending system (where GRUB is running) to line-in of + receiving system (usually developer machine). On receiving system + compile 'spkmodem-recv' from 'util/spkmodem-recv.c' and run: + + parecord --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv + + The default is to use the platform's native terminal output. + +'GRUB_TERMINAL' + If this option is set, it overrides both 'GRUB_TERMINAL_INPUT' and + 'GRUB_TERMINAL_OUTPUT' to the same value. + +'GRUB_SERIAL_COMMAND' + A command to configure the serial port when using the serial + console. *Note serial::. Defaults to 'serial'. + +'GRUB_CMDLINE_LINUX' + Command-line arguments to add to menu entries for the Linux kernel. + +'GRUB_CMDLINE_LINUX_DEFAULT' + Unless 'GRUB_DISABLE_RECOVERY' is set to 'true', two menu entries + will be generated for each Linux kernel: one default entry and one + entry for recovery mode. This option lists command-line arguments + to add only to the default menu entry, after those listed in + 'GRUB_CMDLINE_LINUX'. + +'GRUB_CMDLINE_NETBSD' +'GRUB_CMDLINE_NETBSD_DEFAULT' + As 'GRUB_CMDLINE_LINUX' and 'GRUB_CMDLINE_LINUX_DEFAULT', but for + NetBSD. + +'GRUB_CMDLINE_GNUMACH' + As 'GRUB_CMDLINE_LINUX', but for GNU Mach. + +'GRUB_CMDLINE_XEN' +'GRUB_CMDLINE_XEN_DEFAULT' + The values of these options are passed to Xen hypervisor Xen menu + entries, for all respectively normal entries. + +'GRUB_CMDLINE_LINUX_XEN_REPLACE' +'GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT' + The values of these options replace the values of + 'GRUB_CMDLINE_LINUX' and 'GRUB_CMDLINE_LINUX_DEFAULT' for Linux and + Xen menu entries. + +'GRUB_DISABLE_LINUX_UUID' + Normally, 'grub-mkconfig' will generate menu entries that use + universally-unique identifiers (UUIDs) to identify the root + filesystem to the Linux kernel, using a 'root=UUID=...' kernel + parameter. This is usually more reliable, but in some cases it may + not be appropriate. To disable the use of UUIDs, set this option + to 'true'. + +'GRUB_DISABLE_RECOVERY' + If this option is set to 'true', disable the generation of recovery + mode menu entries. + +'GRUB_VIDEO_BACKEND' + If graphical video support is required, either because the + 'gfxterm' graphical terminal is in use or because + 'GRUB_GFXPAYLOAD_LINUX' is set, then 'grub-mkconfig' will normally + load all available GRUB video drivers and use the one most + appropriate for your hardware. If you need to override this for + some reason, then you can set this option. + + After 'grub-install' has been run, the available video drivers are + listed in '/boot/grub/video.lst'. + +'GRUB_GFXMODE' + Set the resolution used on the 'gfxterm' graphical terminal. Note + that you can only use modes which your graphics card supports via + VESA BIOS Extensions (VBE), so for example native LCD panel + resolutions may not be available. The default is 'auto', which + tries to select a preferred resolution. *Note gfxmode::. + +'GRUB_BACKGROUND' + Set a background image for use with the 'gfxterm' graphical + terminal. The value of this option must be a file readable by GRUB + at boot time, and it must end with '.png', '.tga', '.jpg', or + '.jpeg'. The image will be scaled if necessary to fit the screen. + +'GRUB_THEME' + Set a theme for use with the 'gfxterm' graphical terminal. + +'GRUB_GFXPAYLOAD_LINUX' + Set to 'text' to force the Linux kernel to boot in normal text + mode, 'keep' to preserve the graphics mode set using + 'GRUB_GFXMODE', 'WIDTHxHEIGHT'['xDEPTH'] to set a particular + graphics mode, or a sequence of these separated by commas or + semicolons to try several modes in sequence. *Note gfxpayload::. + + Depending on your kernel, your distribution, your graphics card, + and the phase of the moon, note that using this option may cause + GNU/Linux to suffer from various display problems, particularly + during the early part of the boot sequence. If you have problems, + set this option to 'text' and GRUB will tell Linux to boot in + normal text mode. + +'GRUB_DISABLE_OS_PROBER' + Normally, 'grub-mkconfig' will try to use the external 'os-prober' + program, if installed, to discover other operating systems + installed on the same system and generate appropriate menu entries + for them. Set this option to 'true' to disable this. + +'GRUB_OS_PROBER_SKIP_LIST' + List of space-separated FS UUIDs of filesystems to be ignored from + os-prober output. For efi chainloaders it's @ + +'GRUB_DISABLE_SUBMENU' + Normally, 'grub-mkconfig' will generate top level menu entry for + the kernel with highest version number and put all other found + kernels or alternative menu entries for recovery mode in submenu. + For entries returned by 'os-prober' first entry will be put on top + level and all others in submenu. If this option is set to 'y', + flat menu with all entries on top level will be generated instead. + Changing this option will require changing existing values of + 'GRUB_DEFAULT', 'fallback' (*note fallback::) and 'default' (*note + default::) environment variables as well as saved default entry + using 'grub-set-default' and value used with 'grub-reboot'. + +'GRUB_ENABLE_CRYPTODISK' + If set to 'y', 'grub-mkconfig' and 'grub-install' will check for + encrypted disks and generate additional commands needed to access + them during boot. Note that in this case unattended boot is not + possible because GRUB will wait for passphrase to unlock encrypted + container. + +'GRUB_INIT_TUNE' + Play a tune on the speaker when GRUB starts. This is particularly + useful for users unable to see the screen. The value of this + option is passed directly to *note play::. + +'GRUB_BADRAM' + If this option is set, GRUB will issue a *note badram:: command to + filter out specified regions of RAM. + +'GRUB_PRELOAD_MODULES' + This option may be set to a list of GRUB module names separated by + spaces. Each module will be loaded as early as possible, at the + start of 'grub.cfg'. + + The following options are still accepted for compatibility with +existing configurations, but have better replacements: + +'GRUB_HIDDEN_TIMEOUT' + Wait this many seconds before displaying the menu. If is + pressed during that time, display the menu and wait for input + according to 'GRUB_TIMEOUT'. If a hotkey associated with a menu + entry is pressed, boot the associated menu entry immediately. If + the timeout expires before either of these happens, display the + menu for the number of seconds specified in 'GRUB_TIMEOUT' before + booting the default entry. + + If you set 'GRUB_HIDDEN_TIMEOUT', you should also set + 'GRUB_TIMEOUT=0' so that the menu is not displayed at all unless + is pressed. + + This option is unset by default, and is deprecated in favour of the + less confusing 'GRUB_TIMEOUT_STYLE=countdown' or + 'GRUB_TIMEOUT_STYLE=hidden'. + +'GRUB_HIDDEN_TIMEOUT_QUIET' + In conjunction with 'GRUB_HIDDEN_TIMEOUT', set this to 'true' to + suppress the verbose countdown while waiting for a key to be + pressed before displaying the menu. + + This option is unset by default, and is deprecated in favour of the + less confusing 'GRUB_TIMEOUT_STYLE=countdown'. + +'GRUB_HIDDEN_TIMEOUT_BUTTON' + Variant of 'GRUB_HIDDEN_TIMEOUT', used to support vendor-specific + power buttons. *Note Vendor power-on keys::. + + This option is unset by default, and is deprecated in favour of the + less confusing 'GRUB_TIMEOUT_STYLE=countdown' or + 'GRUB_TIMEOUT_STYLE=hidden'. + + For more detailed customisation of 'grub-mkconfig''s output, you may +edit the scripts in '/etc/grub.d' directly. '/etc/grub.d/40_custom' is +particularly useful for adding entire custom menu entries; simply type +the menu entries you want to add at the end of that file, making sure to +leave at least the first two lines intact. + + +File: grub.info, Node: Shell-like scripting, Next: Multi-boot manual config, Prev: Simple configuration, Up: Configuration + +6.2 Writing full configuration files directly +============================================= + +'grub.cfg' is written in GRUB's built-in scripting language, which has a +syntax quite similar to that of GNU Bash and other Bourne shell +derivatives. + +Words +===== + +A "word" is a sequence of characters considered as a single unit by +GRUB. Words are separated by "metacharacters", which are the following +plus space, tab, and newline: + + { } | & $ ; < > + + Quoting may be used to include metacharacters in words; see below. + +Reserved words +============== + +Reserved words have a special meaning to GRUB. The following words are +recognised as reserved when unquoted and either the first word of a +simple command or the third word of a 'for' command: + + ! [[ ]] { } + case do done elif else esac fi for function + if in menuentry select then time until while + + Not all of these reserved words have a useful purpose yet; some are +reserved for future expansion. + +Quoting +======= + +Quoting is used to remove the special meaning of certain characters or +words. It can be used to treat metacharacters as part of a word, to +prevent reserved words from being recognised as such, and to prevent +variable expansion. + + There are three quoting mechanisms: the escape character, single +quotes, and double quotes. + + A non-quoted backslash (\) is the "escape character". It preserves +the literal value of the next character that follows, with the exception +of newline. + + Enclosing characters in single quotes preserves the literal value of +each character within the quotes. A single quote may not occur between +single quotes, even when preceded by a backslash. + + Enclosing characters in double quotes preserves the literal value of +all characters within the quotes, with the exception of '$' and '\'. +The '$' character retains its special meaning within double quotes. The +backslash retains its special meaning only when followed by one of the +following characters: '$', '"', '\', or newline. A backslash-newline +pair is treated as a line continuation (that is, it is removed from the +input stream and effectively ignored(1) (*note Shell-like +scripting-Footnote-1::)). A double quote may be quoted within double +quotes by preceding it with a backslash. + +Variable expansion +================== + +The '$' character introduces variable expansion. The variable name to +be expanded may be enclosed in braces, which are optional but serve to +protect the variable to be expanded from characters immediately +following it which could be interpreted as part of the name. + + Normal variable names begin with an alphabetic character, followed by +zero or more alphanumeric characters. These names refer to entries in +the GRUB environment (*note Environment::). + + Positional variable names consist of one or more digits. They +represent parameters passed to function calls, with '$1' representing +the first parameter, and so on. + + The special variable name '?' expands to the exit status of the most +recently executed command. When positional variable names are active, +other special variable names '@', '*' and '#' are defined and they +expand to all positional parameters with necessary quoting, positional +parameters without any quoting, and positional parameter count +respectively. + +Comments +======== + +A word beginning with '#' causes that word and all remaining characters +on that line to be ignored. + +Simple commands +=============== + +A "simple command" is a sequence of words separated by spaces or tabs +and terminated by a semicolon or a newline. The first word specifies +the command to be executed. The remaining words are passed as arguments +to the invoked command. + + The return value of a simple command is its exit status. If the +reserved word '!' precedes the command, then the return value is instead +the logical negation of the command's exit status. + +Compound commands +================= + +A "compound command" is one of the following: + +for NAME in WORD ...; do LIST; done + The list of words following 'in' is expanded, generating a list of + items. The variable NAME is set to each element of this list in + turn, and LIST is executed each time. The return value is the exit + status of the last command that executes. If the expansion of the + items following 'in' results in an empty list, no commands are + executed, and the return status is 0. + +if LIST; then LIST; [elif LIST; then LIST;] ... [else LIST;] fi + The 'if' LIST is executed. If its exit status is zero, the 'then' + LIST is executed. Otherwise, each 'elif' LIST is executed in turn, + and if its exit status is zero, the corresponding 'then' LIST is + executed and the command completes. Otherwise, the 'else' LIST is + executed, if present. The exit status is the exit status of the + last command executed, or zero if no condition tested true. + +while COND; do LIST; done +until COND; do LIST; done + The 'while' command continuously executes the 'do' LIST as long as + the last command in COND returns an exit status of zero. The + 'until' command is identical to the 'while' command, except that + the test is negated; the 'do' LIST is executed as long as the last + command in COND returns a non-zero exit status. The exit status of + the 'while' and 'until' commands is the exit status of the last + 'do' LIST command executed, or zero if none was executed. + +function NAME { COMMAND; ... } + This defines a function named NAME. The "body" of the function is + the list of commands within braces, each of which must be + terminated with a semicolon or a newline. This list of commands + will be executed whenever NAME is specified as the name of a simple + command. Function definitions do not affect the exit status in + '$?'. When executed, the exit status of a function is the exit + status of the last command executed in the body. + +menuentry TITLE ['--class=class' ...] ['--users=users'] ['--unrestricted'] ['--hotkey=key'] ['--id=id'] { COMMAND; ... } + *Note menuentry::. + +Built-in Commands +================= + +Some built-in commands are also provided by GRUB script to help script +writers perform actions that are otherwise not possible. For example, +these include commands to jump out of a loop without fully completing +it, etc. + +break ['n'] + Exit from within a 'for', 'while', or 'until' loop. If 'n' is + specified, break 'n' levels. 'n' must be greater than or equal to + 1. If 'n' is greater than the number of enclosing loops, all + enclosing loops are exited. The return value is 0 unless 'n' is + not greater than or equal to 1. + +continue ['n'] + Resume the next iteration of the enclosing 'for', 'while' or + 'until' loop. If 'n' is specified, resume at the 'n'th enclosing + loop. 'n' must be greater than or equal to 1. If 'n' is greater + than the number of enclosing loops, the last enclosing loop (the + "top-level" loop) is resumed. The return value is 0 unless 'n' is + not greater than or equal to 1. + +return ['n'] + Causes a function to exit with the return value specified by 'n'. + If 'n' is omitted, the return status is that of the last command + executed in the function body. If used outside a function the + return status is false. + +setparams ['arg'] ... + Replace positional parameters starting with '$1' with arguments to + 'setparams'. + +shift ['n'] + The positional parameters from 'n'+1 ... are renamed to '$1'.... + Parameters represented by the numbers '$#' down to '$#'-'n'+1 are + unset. 'n' must be a non-negative number less than or equal to + '$#'. If 'n' is 0, no parameters are changed. If 'n' is not + given, it is assumed to be 1. If 'n' is greater than '$#', the + positional parameters are not changed. The return status is + greater than zero if 'n' is greater than '$#' or less than zero; + otherwise 0. + + +File: grub.info, Node: Shell-like scripting-Footnotes, Up: Shell-like scripting + + (1) Currently a backslash-newline pair within a variable name is not +handled properly, so use this feature with some care. + + +File: grub.info, Node: Multi-boot manual config, Next: Embedded configuration, Prev: Shell-like scripting, Up: Configuration + +6.3 Multi-boot manual config +============================ + +Currently autogenerating config files for multi-boot environments +depends on os-prober and has several shortcomings. While fixing it is +scheduled for the next release, meanwhile you can make use of the power +of GRUB syntax and do it yourself. A possible configuration is detailed +here, feel free to adjust to your needs. + + First create a separate GRUB partition, big enough to hold GRUB. Some +of the following entries show how to load OS installer images from this +same partition, for that you obviously need to make the partition large +enough to hold those images as well. Mount this partition on/mnt/boot +and disable GRUB in all OSes and manually install self-compiled latest +GRUB with: + + 'grub-install --boot-directory=/mnt/boot /dev/sda' + + In all the OSes install GRUB tools but disable installing GRUB in +bootsector, so you'll have menu.lst and grub.cfg available for use. +Also disable os-prober use by setting: + + 'GRUB_DISABLE_OS_PROBER=true' + + in /etc/default/grub + + Then write a grub.cfg (/mnt/boot/grub/grub.cfg): + + + menuentry "OS using grub2" { + insmod xfs + search --set=root --label OS1 --hint hd0,msdos8 + configfile /boot/grub/grub.cfg + } + + menuentry "OS using grub2-legacy" { + insmod ext2 + search --set=root --label OS2 --hint hd0,msdos6 + legacy_configfile /boot/grub/menu.lst + } + + menuentry "Windows XP" { + insmod ntfs + search --set=root --label WINDOWS_XP --hint hd0,msdos1 + ntldr /ntldr + } + + menuentry "Windows 7" { + insmod ntfs + search --set=root --label WINDOWS_7 --hint hd0,msdos2 + ntldr /bootmgr + } + + menuentry "FreeBSD" { + insmod zfs + search --set=root --label freepool --hint hd0,msdos7 + kfreebsd /freebsd@/boot/kernel/kernel + kfreebsd_module_elf /freebsd@/boot/kernel/opensolaris.ko + kfreebsd_module_elf /freebsd@/boot/kernel/zfs.ko + kfreebsd_module /freebsd@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + set kFreeBSD.vfs.root.mountfrom=zfs:freepool/freebsd + set kFreeBSD.hw.psm.synaptics_support=1 + } + + menuentry "experimental GRUB" { + search --set=root --label GRUB --hint hd0,msdos5 + multiboot /experimental/grub/i386-pc/core.img + } + + menuentry "Fedora 16 installer" { + search --set=root --label GRUB --hint hd0,msdos5 + linux /fedora/vmlinuz lang=en_US keymap=sg resolution=1280x800 + initrd /fedora/initrd.img + } + + menuentry "Fedora rawhide installer" { + search --set=root --label GRUB --hint hd0,msdos5 + linux /fedora/vmlinuz repo=ftp://mirror.switch.ch/mirror/fedora/linux/development/rawhide/x86_64 lang=en_US keymap=sg resolution=1280x800 + initrd /fedora/initrd.img + } + + menuentry "Debian sid installer" { + search --set=root --label GRUB --hint hd0,msdos5 + linux /debian/dists/sid/main/installer-amd64/current/images/hd-media/vmlinuz + initrd /debian/dists/sid/main/installer-amd64/current/images/hd-media/initrd.gz + } + + + Notes: + * Argument to search after -label is FS LABEL. You can also use UUIDs + with -fs-uuid UUID instead of -label LABEL. You could also use + direct 'root=hd0,msdosX' but this is not recommended due to device + name instability. + + +File: grub.info, Node: Embedded configuration, Prev: Multi-boot manual config, Up: Configuration + +6.4 Embedding a configuration file into GRUB +============================================ + +GRUB supports embedding a configuration file directly into the core +image, so that it is loaded before entering normal mode. This is +useful, for example, when it is not straightforward to find the real +configuration file, or when you need to debug problems with loading that +file. 'grub-install' uses this feature when it is not using BIOS disk +functions or when installing to a different disk from the one containing +'/boot/grub', in which case it needs to use the 'search' command (*note +search::) to find '/boot/grub'. + + To embed a configuration file, use the '-c' option to 'grub-mkimage'. +The file is copied into the core image, so it may reside anywhere on the +file system, and may be removed after running 'grub-mkimage'. + + After the embedded configuration file (if any) is executed, GRUB will +load the 'normal' module (*note normal::), which will then read the real +configuration file from '$prefix/grub.cfg'. By this point, the 'root' +variable will also have been set to the root device name. For example, +'prefix' might be set to '(hd0,1)/boot/grub', and 'root' might be set to +'hd0,1'. Thus, in most cases, the embedded configuration file only +needs to set the 'prefix' and 'root' variables, and then drop through to +GRUB's normal processing. A typical example of this might look like +this: + + search.fs_uuid 01234567-89ab-cdef-0123-456789abcdef root + set prefix=($root)/boot/grub + + (The 'search_fs_uuid' module must be included in the core image for +this example to work.) + + In more complex cases, it may be useful to read other configuration +files directly from the embedded configuration file. This allows such +things as reading files not called 'grub.cfg', or reading files from a +directory other than that where GRUB's loadable modules are installed. +To do this, include the 'configfile' and 'normal' modules in the core +image, and embed a configuration file that uses the 'configfile' command +to load another file. The following example of this also requires the +'echo', 'search_label', and 'test' modules to be included in the core +image: + + search.fs_label grub root + if [ -e /boot/grub/example/test1.cfg ]; then + set prefix=($root)/boot/grub + configfile /boot/grub/example/test1.cfg + else + if [ -e /boot/grub/example/test2.cfg ]; then + set prefix=($root)/boot/grub + configfile /boot/grub/example/test2.cfg + else + echo "Could not find an example configuration file!" + fi + fi + + The embedded configuration file may not contain menu entries +directly, but may only read them from elsewhere using 'configfile'. + + +File: grub.info, Node: Theme file format, Next: Network, Prev: Configuration, Up: Top + +7 Theme file format +******************* + +7.1 Introduction +================ + +The GRUB graphical menu supports themes that can customize the layout +and appearance of the GRUB boot menu. The theme is configured through a +plain text file that specifies the layout of the various GUI components +(including the boot menu, timeout progress bar, and text messages) as +well as the appearance using colors, fonts, and images. Example is +available in docs/example_theme.txt + +7.2 Theme Elements +================== + +7.2.1 Colors +------------ + +Colors can be specified in several ways: + + * HTML-style "#RRGGBB" or "#RGB" format, where *R*, *G*, and *B* are + hexadecimal digits (e.g., "#8899FF") + * as comma-separated decimal RGB values (e.g., "128, 128, 255") + * with "SVG 1.0 color names" (e.g., "cornflowerblue") which must be + specified in lowercase. + +7.2.2 Fonts +----------- + +The fonts GRUB uses "PFF2 font format" bitmap fonts. Fonts are +specified with full font names. Currently there is no provision for a +preference list of fonts, or deriving one font from another. Fonts are +loaded with the "loadfont" command in GRUB (*note loadfont::). To see +the list of loaded fonts, execute the "lsfonts" command (*note +lsfonts::). If there are too many fonts to fit on screen, do "set +pager=1" before executing "lsfonts". + +7.2.3 Progress Bar +------------------ + +Figure 7.1 + +Figure 7.2 + +Progress bars are used to display the remaining time before GRUB boots +the default menu entry. To create a progress bar that will display the +remaining time before automatic boot, simply create a "progress_bar" +component with the id "__timeout__". This indicates to GRUB that the +progress bar should be updated as time passes, and it should be made +invisible if the countdown to automatic boot is interrupted by the user. + + Progress bars may optionally have text displayed on them. This text +is controlled by variable "text" which contains a printf template with +the only argument %d is the number of seconds remaining. Additionally +special values "@TIMEOUT_NOTIFICATION_SHORT@", +"@TIMEOUT_NOTIFICATION_MIDDLE@", "@TIMEOUT_NOTIFICATION_LONG@" are +replaced with standard and translated templates. + +7.2.4 Circular Progress Indicator +--------------------------------- + +The circular progress indicator functions similarly to the progress bar. +When given an id of "__timeout__", GRUB updates the circular progress +indicator's value to indicate the time remaining. For the circular +progress indicator, there are two images used to render it: the *center* +image, and the *tick* image. The center image is rendered in the center +of the component, while the tick image is used to render each mark along +the circumference of the indicator. + +7.2.5 Labels +------------ + +Text labels can be placed on the boot screen. The font, color, and +horizontal alignment can be specified for labels. If a label is given +the id "__timeout__", then the "text" property for that label is also +updated with a message informing the user of the number of seconds +remaining until automatic boot. This is useful in case you want the +text displayed somewhere else instead of directly on the progress bar. + +7.2.6 Boot Menu +--------------- + +The boot menu where GRUB displays the menu entries from the "grub.cfg" +file. It is a list of items, where each item has a title and an +optional icon. The icon is selected based on the *classes* specified +for the menu entry. If there is a PNG file named "myclass.png" in the +"grub/themes/icons" directory, it will be displayed for items which have +the class *myclass*. The boot menu can be customized in several ways, +such as the font and color used for the menu entry title, and by +specifying styled boxes for the menu itself and for the selected item +highlight. + +7.2.7 Styled Boxes +------------------ + +One of the most important features for customizing the layout is the use +of *styled boxes*. A styled box is composed of 9 rectangular (and +potentially empty) regions, which are used to seamlessly draw the styled +box on screen: + +Northwest (nw) North (n) Northeast (ne) +West (w) Center (c) East (e) +Southwest (sw) South (s) Southeast (se) + + To support any size of box on screen, the center slice and the slices +for the top, bottom, and sides are all scaled to the correct size for +the component on screen, using the following rules: + + 1. The edge slices (north, south, east, and west) are scaled in the + direction of the edge they are adjacent to. For instance, the west + slice is scaled vertically. + 2. The corner slices (northwest, northeast, southeast, and southwest) + are not scaled. + 3. The center slice is scaled to fill the remaining space in the + middle. + + As an example of how an image might be sliced up, consider the styled +box used for a terminal view. + +Figure 7.3 + +7.2.8 Creating Styled Box Images +-------------------------------- + +The Inkscape_ scalable vector graphics editor is a very useful tool for +creating styled box images. One process that works well for slicing a +drawing into the necessary image slices is: + + 1. Create or open the drawing you'd like use. + 2. Create a new layer on the top of the layer stack. Make it visible. + Select this layer as the current layer. + 3. Draw 9 rectangles on your drawing where you'd like the slices to + be. Clear the fill option, and set the stroke to 1 pixel wide + solid stroke. The corners of the slices must meet precisely; if it + is off by a single pixel, it will probably be evident when the + styled box is rendered in the GRUB menu. You should probably go to + File | Document Properties | Grids and enable a grid or create a + guide (click on one of the rulers next to the drawing and drag over + the drawing; release the mouse button to place the guide) to help + place the rectangles precisely. + 4. Right click on the center slice rectangle and choose Object + Properties. Change the "Id" to "slice_c" and click Set. Repeat + this for the remaining 8 rectangles, giving them Id values of + "slice_n", "slice_ne", "slice_e", and so on according to the + location. + 5. Save the drawing. + 6. Select all the slice rectangles. With the slice layer selected, + you can simply press Ctrl+A to select all rectangles. The status + bar should indicate that 9 rectangles are selected. + 7. Click the layer hide icon for the slice layer in the layer palette. + The rectangles will remain selected, even though they are hidden. + 8. Choose File | Export Bitmap and check the *Batch export 9 selected + objects* box. Make sure that *Hide all except selected* is + unchecked. click *Export*. This will create PNG files in the same + directory as the drawing, named after the slices. These can now be + used for a styled box in a GRUB theme. + +7.3 Theme File Manual +===================== + +The theme file is a plain text file. Lines that begin with "#" are +ignored and considered comments. (Note: This may not be the case if the +previous line ended where a value was expected.) + + The theme file contains two types of statements: + 1. Global properties. + 2. Component construction. + +7.3.1 Global Properties +----------------------- + +7.3.2 Format +------------ + +Global properties are specified with the simple format: + * name1: value1 + * name2: "value which may contain spaces" + * name3: #88F + + In this example, name3 is assigned a color value. + +7.3.3 Global Property List +-------------------------- + +title-text Specifies the text to display at the top + center of the screen as a title. +title-font Defines the font used for the title + message at the top of the screen. +title-color Defines the color of the title message. +message-font Currently unused. Left for backward + compatibility. +message-color Currently unused. Left for backward + compatibility. +message-bg-color Currently unused. Left for backward + compatibility. +desktop-image Specifies the image to use as the + background. It will be scaled to fit the + screen size or proportionally scaled + depending on the scale method. +desktop-image-scale-methodSpecifies the scaling method for the + *desktop-image*. Options are "stretch", + "crop", "padding", "fitwidth", + "fitheight". "stretch" for fitting the + screen size. Otherwise it is + proportional scaling of a part of + *desktop-image* to the part of the + screen. "crop" part of the + *desktop-image* will be proportionally + scaled to fit the screen sizes. + "padding" the entire *desktop-image* will + be contained on the screen. "fitwidth" + for fitting the *desktop-image*'s width + with screen width. "fitheight" for + fitting the *desktop-image*'s height with + the screen height. Default is "stretch". +desktop-image-h-align Specifies the horizontal alignment of the + *desktop-image* if + *desktop-image-scale-method* isn't equeal + to "stretch". Options are "left", + "center", "right". Default is "center". +desktop-image-v-align Specifies the vertical alignment of the + *desktop-image* if + *desktop-image-scale-method* isn't equeal + to "stretch". Options are "top", + "center", "bottom". Default is "center". +desktop-color Specifies the color for the background if + *desktop-image* is not specified. +terminal-box Specifies the file name pattern for the + styled box slices used for the command + line terminal window. For example, + "terminal-box: terminal_*.png" will use + the images "terminal_c.png" as the center + area, "terminal_n.png" as the north (top) + edge, "terminal_nw.png" as the northwest + (upper left) corner, and so on. If the + image for any slice is not found, it will + simply be left empty. +terminal-border Specifies the border width of the + terminal window. +terminal-left Specifies the left coordinate of the + terminal window. +terminal-top Specifies the top coordinate of the + terminal window. +terminal-width Specifies the width of the terminal + window. +terminal-height Specifies the height of the terminal + window. + +7.3.4 Component Construction +---------------------------- + +Greater customizability comes is provided by components. A tree of +components forms the user interface. *Containers* are components that +can contain other components, and there is always a single root +component which is an instance of a *canvas* container. + + Components are created in the theme file by prefixing the type of +component with a '+' sign: + + ' + label { text="GRUB" font="aqui 11" color="#8FF" } ' + + properties of a component are specified as "name = value" (whitespace +surrounding tokens is optional and is ignored) where *value* may be: + * a single word (e.g., "align = center", "color = #FF8080"), + * a quoted string (e.g., "text = "Hello, World!""), or + * a tuple (e.g., "preferred_size = (120, 80)"). + +7.3.5 Component List +-------------------- + +The following is a list of the components and the properties they +support. + + * label A label displays a line of text. + + Properties: + id Set to "__timeout__" to display the time elapsed + to an automatical boot of the default entry. + text The text to display. If "id" is set to + "__timeout__" and no "text" property is set then + the amount of seconds will be shown. If set to + "@KEYMAP_SHORT@", "@KEYMAP_MIDDLE@" or + "@KEYMAP_LONG@" then predefined hotkey + information will be shown. + font The font to use for text display. + color The color of the text. + align The horizontal alignment of the text within the + component. Options are "left", "center" and + "right". + visible Set to "false" to hide the label. + + * image A component that displays an image. The image is scaled to + fit the component. + + Properties: + + file The full path to the image file to load. + + * progress_bar Displays a horizontally oriented progress bar. It can + be rendered using simple solid filled rectangles, or using a pair + of pixmap styled boxes. + + Properties: + + id Set to "__timeout__" to display the time elapsed + to an automatical boot of the default entry. + fg_color The foreground color for plain solid color + rendering. + bg_color The background color for plain solid color + rendering. + border_color The border color for plain solid color + rendering. + text_color The text color. + bar_style The styled box specification for the frame of + the progress bar. Example: + "progress_frame_*.png" If the value is equal to + "highlight_style" then no styled boxes will be + shown. + highlight_styleThe styled box specification for the highlighted + region of the progress bar. This box will be + used to paint just the highlighted region of the + bar, and will be increased in size as the bar + nears completion. Example: "progress_hl_*.png". + If the value is equal to "bar_style" then no + styled boxes will be shown. + highlight_overlayIf this option is set to "true" then the + highlight box side slices (every slice except + the center slice) will overlay the frame box + side slices. And the center slice of the + highlight box can move all the way (from top to + bottom), being drawn on the center slice of the + frame box. That way we can make a progress bar + with round-shaped edges so there won't be a free + space from the highlight to the frame in top and + bottom scrollbar positions. Default is "false". + font The font to use for progress bar. + text The text to display on the progress bar. If the + progress bar's ID is set to "__timeout__" and + the value of this property is set to + "@TIMEOUT_NOTIFICATION_SHORT@", + "@TIMEOUT_NOTIFICATION_MIDDLE@" or + "@TIMEOUT_NOTIFICATION_LONG@", then GRUB will + update this property with an informative message + as the timeout approaches. + + * circular_progress Displays a circular progress indicator. The + appearance of this component is determined by two images: the + *center* image and the *tick* image. The center image is generally + larger and will be drawn in the center of the component. Around + the circumference of a circle within the component, the tick image + will be drawn a certain number of times, depending on the + properties of the component. + + Properties: + + id Set to "__timeout__" to display the time + elapsed to an automatical boot of the + default entry. + center_bitmap The file name of the image to draw in the + center of the component. + tick_bitmap The file name of the image to draw for + the tick marks. + num_ticks The number of ticks that make up a full + circle. + ticks_disappear Boolean value indicating whether tick + marks should progressively appear, or + progressively disappear as *value* + approaches *end*. Specify "true" or + "false". Default is "false". + start_angle The position of the first tick mark to + appear or disappear. Measured in + "parrots", 1 "parrot" = 1 / 256 of the + full circle. Use values "xxx deg" or + "xxx \xc2\xb0" to set the angle in + degrees. + + * boot_menu Displays the GRUB boot menu. It allows selecting items + and executing them. + + Properties: + + item_font The font to use for the menu item + titles. + selected_item_font The font to use for the selected + menu item, or "inherit" (the + default) to use "item_font" for + the selected menu item as well. + item_color The color to use for the menu item + titles. + selected_item_color The color to use for the selected + menu item, or "inherit" (the + default) to use "item_color" for + the selected menu item as well. + icon_width The width of menu item icons. + Icons are scaled to the specified + size. + icon_height The height of menu item icons. + item_height The height of each menu item in + pixels. + item_padding The amount of space in pixels to + leave on each side of the menu + item contents. + item_icon_space The space between an item's icon + and the title text, in pixels. + item_spacing The amount of space to leave + between menu items, in pixels. + menu_pixmap_style The image file pattern for the + menu frame styled box. Example: + "menu_*.png" (this will use images + such as "menu_c.png", + "menu_w.png", 'menu_nw.png", etc.) + item_pixmap_style The image file pattern for the + item styled box. + selected_item_pixmap_style The image file pattern for the + selected item highlight styled + box. + scrollbar Boolean value indicating whether + the scroll bar should be drawn if + the frame and thumb styled boxes + are configured. + scrollbar_frame The image file pattern for the + entire scroll bar. Example: + "scrollbar_*.png" + scrollbar_thumb The image file pattern for the + scroll bar thumb (the part of the + scroll bar that moves as scrolling + occurs). Example: + "scrollbar_thumb_*.png" + scrollbar_thumb_overlay If this option is set to "true" + then the scrollbar thumb side + slices (every slice except the + center slice) will overlay the + scrollbar frame side slices. And + the center slice of the + scrollbar_thumb can move all the + way (from top to bottom), being + drawn on the center slice of the + scrollbar frame. That way we can + make a scrollbar with round-shaped + edges so there won't be a free + space from the thumb to the frame + in top and bottom scrollbar + positions. Default is "false". + scrollbar_slice The menu frame styled box's slice + in which the scrollbar will be + drawn. Possible values are + "west", "center", "east" + (default). "west" - the scrollbar + will be drawn in the west slice + (right-aligned). "east" - the + scrollbar will be drawn in the + east slice (left-aligned). + "center" - the scrollbar will be + drawn in the center slice. Note: + in case of "center" slice: a) If + the scrollbar should be drawn then + boot menu entry's width is + decreased by the scrollbar's width + and the scrollbar is drawn at the + right side of the center slice. + b) If the scrollbar won't be drawn + then the boot menu entry's width + is the width of the center slice. + c) We don't necessary need the + menu pixmap box to display the + scrollbar. + scrollbar_left_pad The left scrollbar padding in + pixels. Unused if + "scrollbar_slice" is "west". + scrollbar_right_pad The right scrollbar padding in + pixels. Unused if + "scrollbar_slice" is "east". + scrollbar_top_pad The top scrollbar padding in + pixels. + scrollbar_bottom_pad The bottom scrollbar padding in + pixels. + visible Set to "false" to hide the boot + menu. + + * canvas Canvas is a container that allows manual placement of + components within it. It does not alter the positions of its child + components. It assigns all child components their preferred sizes. + + * hbox The *hbox* container lays out its children from left to right, + giving each one its preferred width. The height of each child is + set to the maximum of the preferred heights of all children. + + * vbox The *vbox* container lays out its children from top to bottom, + giving each one its preferred height. The width of each child is + set to the maximum of the preferred widths of all children. + +7.3.6 Common properties +----------------------- + +The following properties are supported by all components: +'left' + The distance from the left border of container to left border of + the object in either of three formats: + x Value in pixels + p% Percentage + p%+x mixture of both +'top' + The distance from the left border of container to left border of + the object in same format. +'width' + The width of object in same format. +'height' + The height of object in same format. +'id' + The identifier for the component. This can be any arbitrary + string. The ID can be used by scripts to refer to various + components in the GUI component tree. Currently, there is one + special ID value that GRUB recognizes: + + "__timeout__" Component with this ID will be updated by GRUB + and will indicate time elapsed to an automatical + boot of the default entry. Affected components: + "label", "circular_progress", "progress_bar". + + +File: grub.info, Node: Network, Next: Serial terminal, Prev: Theme file format, Up: Top + +8 Booting GRUB from the network +******************************* + +The following instructions don't work for *-emu, i386-qemu, +i386-coreboot, i386-multiboot, mips_loongson, mips-arc and +mips_qemu_mips + + To generate a netbootable directory, run: + + grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/ + + E.g. for i386-pc: + + grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/i386-pc + + Then follow instructions printed out by grub-mknetdir on configuring +your DHCP server. + + After GRUB has started, files on the TFTP server will be accessible +via the '(tftp)' device. + + The server IP address can be controlled by changing the '(tftp)' +device name to '(tftp,SERVER-IP)'. Note that this should be changed +both in the prefix and in any references to the device name in the +configuration file. + + GRUB provides several environment variables which may be used to +inspect or change the behaviour of the PXE device. In the following +description is placeholder for the name of network interface +(platform dependent): + +'net__ip' + The network interface's IP address. Read-only. + +'net__mac' + The network interface's MAC address. Read-only. + +'net__hostname' + The client host name provided by DHCP. Read-only. + +'net__domain' + The client domain name provided by DHCP. Read-only. + +'net__rootpath' + The path to the client's root disk provided by DHCP. Read-only. + +'net__extensionspath' + The path to additional DHCP vendor extensions provided by DHCP. + Read-only. + +'net__boot_file' + The boot file name provided by DHCP. Read-only. + +'net__dhcp_server_name' + The name of the DHCP server responsible for these boot parameters. + Read-only. + +'net__next_server' + The IP address of the next (usually, TFTP) server provided by DHCP. + Read-only. + +'net_default_interface' + Initially set to name of network interface that was used to load + grub. Read-write, although setting it affects only interpretation + of 'net_default_ip' and 'net_default_mac' + +'net_default_ip' + The IP address of default interface. Read-only. This is alias for + the 'net_${net_default_interface}_ip'. + +'net_default_mac' + The default interface's MAC address. Read-only. This is alias for + the 'net_${net_default_interface}_mac'. + +'net_default_server' + The default server used by network drives (*note Device syntax::). + Read-write, although setting this is only useful before opening a + network device. + + +File: grub.info, Node: Serial terminal, Next: Vendor power-on keys, Prev: Network, Up: Top + +9 Using GRUB via a serial line +****************************** + +This chapter describes how to use the serial terminal support in GRUB. + + If you have many computers or computers with no display/keyboard, it +could be very useful to control the computers through serial +communications. To connect one computer with another via a serial line, +you need to prepare a null-modem (cross) serial cable, and you may need +to have multiport serial boards, if your computer doesn't have extra +serial ports. In addition, a terminal emulator is also required, such +as minicom. Refer to a manual of your operating system, for more +information. + + As for GRUB, the instruction to set up a serial terminal is quite +simple. Here is an example: + + grub> serial --unit=0 --speed=9600 + grub> terminal_input serial; terminal_output serial + + The command 'serial' initializes the serial unit 0 with the speed +9600bps. The serial unit 0 is usually called 'COM1', so, if you want to +use COM2, you must specify '--unit=1' instead. This command accepts +many other options, so please refer to *note serial::, for more details. + + The commands 'terminal_input' (*note terminal_input::) and +'terminal_output' (*note terminal_output::) choose which type of +terminal you want to use. In the case above, the terminal will be a +serial terminal, but you can also pass 'console' to the command, as +'terminal_input serial console'. In this case, a terminal in which you +press any key will be selected as a GRUB terminal. In the example +above, note that you need to put both commands on the same command line, +as you will lose the ability to type commands on the console after the +first command. + + However, note that GRUB assumes that your terminal emulator is +compatible with VT100 by default. This is true for most terminal +emulators nowadays, but you should pass the option '--dumb' to the +command if your terminal emulator is not VT100-compatible or implements +few VT100 escape sequences. If you specify this option then GRUB +provides you with an alternative menu interface, because the normal menu +requires several fancy features of your terminal. + + +File: grub.info, Node: Vendor power-on keys, Next: Images, Prev: Serial terminal, Up: Top + +10 Using GRUB with vendor power-on keys +*************************************** + +Some laptop vendors provide an additional power-on button which boots +another OS. GRUB supports such buttons with the 'GRUB_TIMEOUT_BUTTON', +'GRUB_TIMEOUT_STYLE_BUTTON', 'GRUB_DEFAULT_BUTTON', and +'GRUB_BUTTON_CMOS_ADDRESS' variables in default/grub (*note Simple +configuration::). 'GRUB_TIMEOUT_BUTTON', 'GRUB_TIMEOUT_STYLE_BUTTON', +and 'GRUB_DEFAULT_BUTTON' are used instead of the corresponding +variables without the '_BUTTON' suffix when powered on using the special +button. 'GRUB_BUTTON_CMOS_ADDRESS' is vendor-specific and partially +model-specific. Values known to the GRUB team are: + + + 121:3 + + 85:3 + + 85:3 + + 84:1 (unconfirmed) + + 101:3 + + To take full advantage of this function, install GRUB into the MBR +(*note Installing GRUB using grub-install::). + + If you have a laptop which has a similar feature and not in the above +list could you figure your address and contribute? To discover the +address do the following: + * boot normally + * sudo modprobe nvram + sudo cat /dev/nvram | xxd > normal_button.txt + * boot using vendor button + * sudo modprobe nvram + sudo cat /dev/nvram | xxd > normal_vendor.txt + + Then compare these text files and find where a bit was toggled. E.g. +in case of Dell XPS it was: + byte 0x47: 20 --> 28 + It's a bit number 3 as seen from following table: +0 01 +1 02 +2 04 +3 08 +4 10 +5 20 +6 40 +7 80 + + 0x47 is decimal 71. Linux nvram implementation cuts first 14 bytes +of CMOS. So the real byte address in CMOS is 71+14=85 So complete +address is 85:3 + + +File: grub.info, Node: Images, Next: Core image size limitation, Prev: Vendor power-on keys, Up: Top + +11 GRUB image files +******************* + +GRUB consists of several images: a variety of bootstrap images for +starting GRUB in various ways, a kernel image, and a set of modules +which are combined with the kernel image to form a core image. Here is +a short overview of them. + +'boot.img' + On PC BIOS systems, this image is the first part of GRUB to start. + It is written to a master boot record (MBR) or to the boot sector + of a partition. Because a PC boot sector is 512 bytes, the size of + this image is exactly 512 bytes. + + The sole function of 'boot.img' is to read the first sector of the + core image from a local disk and jump to it. Because of the size + restriction, 'boot.img' cannot understand any file system + structure, so 'grub-install' hardcodes the location of the first + sector of the core image into 'boot.img' when installing GRUB. + +'diskboot.img' + This image is used as the first sector of the core image when + booting from a hard disk. It reads the rest of the core image into + memory and starts the kernel. Since file system handling is not + yet available, it encodes the location of the core image using a + block list format. + +'cdboot.img' + This image is used as the first sector of the core image when + booting from a CD-ROM drive. It performs a similar function to + 'diskboot.img'. + +'pxeboot.img' + This image is used as the start of the core image when booting from + the network using PXE. *Note Network::. + +'lnxboot.img' + This image may be placed at the start of the core image in order to + make GRUB look enough like a Linux kernel that it can be booted by + LILO using an 'image=' section. + +'kernel.img' + This image contains GRUB's basic run-time facilities: frameworks + for device and file handling, environment variables, the rescue + mode command-line parser, and so on. It is rarely used directly, + but is built into all core images. + +'core.img' + This is the core image of GRUB. It is built dynamically from the + kernel image and an arbitrary list of modules by the 'grub-mkimage' + program. Usually, it contains enough modules to access + '/boot/grub', and loads everything else (including menu handling, + the ability to load target operating systems, and so on) from the + file system at run-time. The modular design allows the core image + to be kept small, since the areas of disk where it must be + installed are often as small as 32KB. + + *Note BIOS installation::, for details on where the core image can + be installed on PC systems. + +'*.mod' + Everything else in GRUB resides in dynamically loadable modules. + These are often loaded automatically, or built into the core image + if they are essential, but may also be loaded manually using the + 'insmod' command (*note insmod::). + +For GRUB Legacy users +===================== + +GRUB 2 has a different design from GRUB Legacy, and so correspondences +with the images it used cannot be exact. Nevertheless, GRUB Legacy +users often ask questions in the terms they are familiar with, and so +here is a brief guide to how GRUB 2's images relate to that. + +'stage1' + Stage 1 from GRUB Legacy was very similar to 'boot.img' in GRUB 2, + and they serve the same function. + +'*_stage1_5' + In GRUB Legacy, Stage 1.5's function was to include enough + filesystem code to allow the much larger Stage 2 to be read from an + ordinary filesystem. In this respect, its function was similar to + 'core.img' in GRUB 2. However, 'core.img' is much more capable + than Stage 1.5 was; since it offers a rescue shell, it is sometimes + possible to recover manually in the event that it is unable to load + any other modules, for example if partition numbers have changed. + 'core.img' is built in a more flexible way, allowing GRUB 2 to + support reading modules from advanced disk types such as LVM and + RAID. + + GRUB Legacy could run with only Stage 1 and Stage 2 in some limited + configurations, while GRUB 2 requires 'core.img' and cannot work + without it. + +'stage2' + GRUB 2 has no single Stage 2 image. Instead, it loads modules from + '/boot/grub' at run-time. + +'stage2_eltorito' + In GRUB 2, images for booting from CD-ROM drives are now + constructed using 'cdboot.img' and 'core.img', making sure that the + core image contains the 'iso9660' module. It is usually best to + use the 'grub-mkrescue' program for this. + +'nbgrub' + There is as yet no equivalent for 'nbgrub' in GRUB 2; it was used + by Etherboot and some other network boot loaders. + +'pxegrub' + In GRUB 2, images for PXE network booting are now constructed using + 'pxeboot.img' and 'core.img', making sure that the core image + contains the 'pxe' and 'pxecmd' modules. *Note Network::. + + +File: grub.info, Node: Core image size limitation, Next: Filesystem, Prev: Images, Up: Top + +12 Core image size limitation +***************************** + +Heavily limited platforms: + * i386-pc (normal and PXE): the core image size (compressed) is + limited by 458240 bytes. kernel.img (.text + .data + .bss, + uncompressed) is limited by 392704 bytes. module size + (uncompressed) + kernel.img (.text + .data, uncompressed) is + limited by the size of contiguous chunk at 1M address. + * sparc64-ieee1275: kernel.img (.text + .data + .bss) + modules + + 256K (stack) + 2M (heap) is limited by space available at 0x4400. + On most platforms it's just 3 or 4M since ieee1275 maps only so + much. + * i386-ieee1275: kernel.img (.text + .data + .bss) + modules is + limited by memory available at 0x10000, at most 596K + + Lightly limited platforms: + + * *-xen: limited only by adress space and RAM size. + * i386-qemu: kernel.img (.text + .data + .bss) is limited by 392704 + bytes. (core.img would be limited by ROM size but it's unlimited + on qemu + * All EFI platforms: limited by contiguous RAM size and possibly + firmware bugs + * Coreboot and multiboot. kernel.img (.text + .data + .bss) is + limited by 392704 bytes. module size is limited by the size of + contiguous chunk at 1M address. + * mipsel-loongson (ELF), mips(el)-qemu_mips (ELF): if uncompressed: + kernel.img (.text + .data) + modules is limited by the space from + 80200000 forward if compressed: kernel.img (.text + .data, + uncompressed) + modules (uncompressed) + (modules + kernel.img + (.text + .data)) (compressed) + decompressor is limited by the + space from 80200000 forward + * mipsel-loongson (Flash), mips(el)-qemu_mips (Flash): kernel.img + (.text + .data) + modules is limited by the space from 80200000 + forward core.img (final) is limited by flash size (512K on yeeloong + and fulooong) + * mips-arc: if uncompressed: kernel.img (.text + .data) is limited by + the space from 8bd00000 forward modules + dummy decompressor is + limited by the space from 8bd00000 backward if compressed: + kernel.img (.text + .data, uncompressed) is limited by the space + from 8bd00000 forward modules (uncompressed) + (modules + + kernel.img (.text + .data)) (compressed, aligned to 1M) + 1M + (decompressor + scratch space) is limited by the space from + 8bd00000 backward + * powerpc-ieee1275: kernel.img (.text + .data + .bss) + modules is + limited by space available at 0x200000 + + +File: grub.info, Node: Filesystem, Next: Interface, Prev: Core image size limitation, Up: Top + +13 Filesystem syntax and semantics +********************************** + +GRUB uses a special syntax for specifying disk drives which can be +accessed by BIOS. Because of BIOS limitations, GRUB cannot distinguish +between IDE, ESDI, SCSI, or others. You must know yourself which BIOS +device is equivalent to which OS device. Normally, that will be clear +if you see the files in a device or use the command 'search' (*note +search::). + +* Menu: + +* Device syntax:: How to specify devices +* File name syntax:: How to specify files +* Block list syntax:: How to specify block lists + + +File: grub.info, Node: Device syntax, Next: File name syntax, Up: Filesystem + +13.1 How to specify devices +=========================== + +The device syntax is like this: + + (DEVICE[,PARTMAP-NAME1PART-NUM1[,PARTMAP-NAME2PART-NUM2[,...]]]) + + '[]' means the parameter is optional. DEVICE depends on the disk +driver in use. BIOS and EFI disks use either 'fd' or 'hd' followed by a +digit, like 'fd0', or 'cd'. AHCI, PATA (ata), crypto, USB use the name +of driver followed by a number. Memdisk and host are limited to one +disk and so it's refered just by driver name. RAID (md), ofdisk +(ieee1275 and nand), LVM (lvm), LDM, virtio (vdsk) and arcdisk (arc) use +intrinsic name of disk prefixed by driver name. Additionally just +"nand" refers to the disk aliased as "nand". Conflicts are solved by +suffixing a number if necessarry. Commas need to be escaped. Loopback +uses whatever name specified to 'loopback' command. Hostdisk uses names +specified in device.map as long as it's of the form [fhc]d[0-9]* or +hostdisk/. For crypto and RAID (md) additionally you can use +the syntax uuid/. For LVM additionally you can use +the syntax lvmid//. + + (fd0) + (hd0) + (cd) + (ahci0) + (ata0) + (crypto0) + (usb0) + (cryptouuid/123456789abcdef0123456789abcdef0) + (mduuid/123456789abcdef0123456789abcdef0) + (lvm/system-root) + (lvmid/F1ikgD-2RES-306G-il9M-7iwa-4NKW-EbV1NV/eLGuCQ-L4Ka-XUgR-sjtJ-ffch-bajr-fCNfz5) + (md/myraid) + (md/0) + (ieee1275/disk2) + (ieee1275//pci@1f\,0/ide@d/disk@2) + (nand) + (memdisk) + (host) + (myloop) + (hostdisk//dev/sda) + + PART-NUM represents the partition number of DEVICE, starting from +one. PARTNAME is optional but is recommended since disk may have +several top-level partmaps. Specifying third and later component you +can access to subpartitions. + + The syntax '(hd0)' represents using the entire disk (or the MBR when +installing GRUB), while the syntax '(hd0,1)' represents using the first +partition of the disk (or the boot sector of the partition when +installing GRUB). + + (hd0,msdos1) + (hd0,msdos1,msdos5) + (hd0,msdos1,bsd3) + (hd0,netbsd1) + (hd0,gpt1) + (hd0,1,3) + + If you enabled the network support, the special drives +'(PROTOCOL[,SERVER])' are also available. Supported protocols are +'http' and 'tftp'. If SERVER is omitted, value of environment variable +'net_default_server' is used. Before using the network drive, you must +initialize the network. *Note Network::, for more information. + + If you boot GRUB from a CD-ROM, '(cd)' is available. *Note Making a +GRUB bootable CD-ROM::, for details. + + +File: grub.info, Node: File name syntax, Next: Block list syntax, Prev: Device syntax, Up: Filesystem + +13.2 How to specify files +========================= + +There are two ways to specify files, by "absolute file name" and by +"block list". + + An absolute file name resembles a Unix absolute file name, using '/' +for the directory separator (not '\' as in DOS). One example is +'(hd0,1)/boot/grub/grub.cfg'. This means the file '/boot/grub/grub.cfg' +in the first partition of the first hard disk. If you omit the device +name in an absolute file name, GRUB uses GRUB's "root device" +implicitly. So if you set the root device to, say, '(hd1,1)' by the +command 'set root=(hd1,1)' (*note set::), then '/boot/kernel' is the +same as '(hd1,1)/boot/kernel'. + + On ZFS filesystem the first path component must be +VOLUME'@'[SNAPSHOT]. So '/rootvol@snap-129/boot/grub/grub.cfg' refers +to file '/boot/grub/grub.cfg' in snapshot of volume 'rootvol' with name +'snap-129'. Trailing '@' after volume name is mandatory even if +snapshot name is omitted. + + +File: grub.info, Node: Block list syntax, Prev: File name syntax, Up: Filesystem + +13.3 How to specify block lists +=============================== + +A block list is used for specifying a file that doesn't appear in the +filesystem, like a chainloader. The syntax is +'[OFFSET]+LENGTH[,[OFFSET]+LENGTH]...'. Here is an example: + + 0+100,200+1,300+300 + + This represents that GRUB should read blocks 0 through 99, block 200, +and blocks 300 through 599. If you omit an offset, then GRUB assumes +the offset is zero. + + Like the file name syntax (*note File name syntax::), if a blocklist +does not contain a device name, then GRUB uses GRUB's "root device". So +'(hd0,2)+1' is the same as '+1' when the root device is '(hd0,2)'. + + +File: grub.info, Node: Interface, Next: Environment, Prev: Filesystem, Up: Top + +14 GRUB's user interface +************************ + +GRUB has both a simple menu interface for choosing preset entries from a +configuration file, and a highly flexible command-line for performing +any desired combination of boot commands. + + GRUB looks for its configuration file as soon as it is loaded. If +one is found, then the full menu interface is activated using whatever +entries were found in the file. If you choose the "command-line" menu +option, or if the configuration file was not found, then GRUB drops to +the command-line interface. + +* Menu: + +* Command-line interface:: The flexible command-line interface +* Menu interface:: The simple menu interface +* Menu entry editor:: Editing a menu entry + + +File: grub.info, Node: Command-line interface, Next: Menu interface, Up: Interface + +14.1 The flexible command-line interface +======================================== + +The command-line interface provides a prompt and after it an editable +text area much like a command-line in Unix or DOS. Each command is +immediately executed after it is entered(1) (*note Command-line +interface-Footnote-1::). The commands (*note Command-line and menu +entry commands::) are a subset of those available in the configuration +file, used with exactly the same syntax. + + Cursor movement and editing of the text on the line can be done via a +subset of the functions available in the Bash shell: + + + + Move forward one character. + + + + Move back one character. + + + + Move to the start of the line. + + + + Move the the end of the line. + + + + Delete the character underneath the cursor. + + + + Delete the character to the left of the cursor. + + + Kill the text from the current cursor position to the end of the + line. + + + Kill backward from the cursor to the beginning of the line. + + + Yank the killed text back into the buffer at the cursor. + + + + Move up through the history list. + + + + Move down through the history list. + + When typing commands interactively, if the cursor is within or before +the first word in the command-line, pressing the key (or ) +will display a listing of the available commands, and if the cursor is +after the first word, the '' will provide a completion listing of +disks, partitions, and file names depending on the context. Note that +to obtain a list of drives, one must open a parenthesis, as 'root ('. + + Note that you cannot use the completion functionality in the TFTP +filesystem. This is because TFTP doesn't support file name listing for +the security. + + +File: grub.info, Node: Command-line interface-Footnotes, Up: Command-line interface + + (1) However, this behavior will be changed in the future version, in +a user-invisible way. + + +File: grub.info, Node: Menu interface, Next: Menu entry editor, Prev: Command-line interface, Up: Interface + +14.2 The simple menu interface +============================== + +The menu interface is quite easy to use. Its commands are both +reasonably intuitive and described on screen. + + Basically, the menu interface provides a list of "boot entries" to +the user to choose from. Use the arrow keys to select the entry of +choice, then press to run it. An optional timeout is available to +boot the default entry (the first one if not set), which is aborted by +pressing any key. + + Commands are available to enter a bare command-line by pressing +(which operates exactly like the non-config-file version of GRUB, but +allows one to return to the menu if desired by pressing ) or to +edit any of the "boot entries" by pressing . + + If you protect the menu interface with a password (*note Security::), +all you can do is choose an entry by pressing , or press

to +enter the password. + + +File: grub.info, Node: Menu entry editor, Prev: Menu interface, Up: Interface + +14.3 Editing a menu entry +========================= + +The menu entry editor looks much like the main menu interface, but the +lines in the menu are individual commands in the selected entry instead +of entry names. + + If an is pressed in the editor, it aborts all the changes made +to the configuration entry and returns to the main menu interface. + + Each line in the menu entry can be edited freely, and you can add new +lines by pressing at the end of a line. To boot the edited entry, +press . + + Although GRUB unfortunately does not support "undo", you can do +almost the same thing by just returning to the main menu using . + + +File: grub.info, Node: Environment, Next: Commands, Prev: Interface, Up: Top + +15 GRUB environment variables +***************************** + +GRUB supports environment variables which are rather like those offered +by all Unix-like systems. Environment variables have a name, which is +unique and is usually a short identifier, and a value, which is an +arbitrary string of characters. They may be set (*note set::), unset +(*note unset::), or looked up (*note Shell-like scripting::) by name. + + A number of environment variables have special meanings to various +parts of GRUB. Others may be used freely in GRUB configuration files. + +* Menu: + +* Special environment variables:: +* Environment block:: + + +File: grub.info, Node: Special environment variables, Next: Environment block, Up: Environment + +15.1 Special environment variables +================================== + +These variables have special meaning to GRUB. + +* Menu: + +* biosnum:: +* check_signatures:: +* chosen:: +* cmdpath:: +* color_highlight:: +* color_normal:: +* config_directory:: +* config_file:: +* debug:: +* default:: +* fallback:: +* gfxmode:: +* gfxpayload:: +* gfxterm_font:: +* grub_cpu:: +* grub_platform:: +* icondir:: +* lang:: +* locale_dir:: +* menu_color_highlight:: +* menu_color_normal:: +* net__boot_file:: +* net__dhcp_server_name:: +* net__domain:: +* net__extensionspath:: +* net__hostname:: +* net__ip:: +* net__mac:: +* net__next_server:: +* net__rootpath:: +* net_default_interface:: +* net_default_ip:: +* net_default_mac:: +* net_default_server:: +* pager:: +* prefix:: +* pxe_blksize:: +* pxe_default_gateway:: +* pxe_default_server:: +* root:: +* superusers:: +* theme:: +* timeout:: +* timeout_style:: + + +File: grub.info, Node: biosnum, Next: check_signatures, Up: Special environment variables + +15.1.1 biosnum +-------------- + +When chain-loading another boot loader (*note Chain-loading::), GRUB may +need to know what BIOS drive number corresponds to the root device +(*note root::) so that it can set up registers properly. If the BIOSNUM +variable is set, it overrides GRUB's own means of guessing this. + + For an alternative approach which also changes BIOS drive mappings +for the chain-loaded system, *note drivemap::. + + +File: grub.info, Node: check_signatures, Next: chosen, Prev: biosnum, Up: Special environment variables + +15.1.2 check_signatures +----------------------- + +This variable controls whether GRUB enforces digital signature +validation on loaded files. *Note Using digital signatures::. + + +File: grub.info, Node: chosen, Next: cmdpath, Prev: check_signatures, Up: Special environment variables + +15.1.3 chosen +------------- + +When executing a menu entry, GRUB sets the CHOSEN variable to the title +of the entry being executed. + + If the menu entry is in one or more submenus, then CHOSEN is set to +the titles of each of the submenus starting from the top level followed +by the title of the menu entry itself, separated by '>'. + + +File: grub.info, Node: cmdpath, Next: color_highlight, Prev: chosen, Up: Special environment variables + +15.1.4 cmdpath +-------------- + +The location from which 'core.img' was loaded as an absolute directory +name (*note File name syntax::). This is set by GRUB at startup based +on information returned by platform firmware. Not every platform +provides this information and some may return only device without path +name. + + +File: grub.info, Node: color_highlight, Next: color_normal, Prev: cmdpath, Up: Special environment variables + +15.1.5 color_highlight +---------------------- + +This variable contains the "highlight" foreground and background +terminal colors, separated by a slash ('/'). Setting this variable +changes those colors. For the available color names, *note +color_normal::. + + The default is 'black/light-gray'. + + +File: grub.info, Node: color_normal, Next: config_directory, Prev: color_highlight, Up: Special environment variables + +15.1.6 color_normal +------------------- + +This variable contains the "normal" foreground and background terminal +colors, separated by a slash ('/'). Setting this variable changes those +colors. Each color must be a name from the following list: + + * black + * blue + * green + * cyan + * red + * magenta + * brown + * light-gray + * dark-gray + * light-blue + * light-green + * light-cyan + * light-red + * light-magenta + * yellow + * white + + The default is 'light-gray/black'. + + The color support support varies from terminal to terminal. + + 'morse' has no color support at all. + + 'mda_text' color support is limited to highlighting by black/white +reversal. + + 'console' on ARC, EMU and IEEE1275, 'serial_*' and 'spkmodem' are +governed by terminfo and support only 8 colors if in modes 'vt100-color' +(default for console on emu), 'arc' (default for console on ARC), +'ieee1275' (default for console on IEEE1275). When in mode 'vt100' then +the color support is limited to highlighting by black/white reversal. +When in mode 'dumb' there is no color support. + + When console supports no colors this setting is ignored. When +console supports 8 colors, then the colors from the second half of the +previous list are mapped to the matching colors of first half. + + 'console' on EFI and BIOS and 'vga_text' support all 16 colors. + + 'gfxterm' supports all 16 colors and would be theoretically +extendable to support whole rgb24 palette but currently there is no +compelling reason to go beyond the current 16 colors. + + +File: grub.info, Node: config_directory, Next: config_file, Prev: color_normal, Up: Special environment variables + +15.1.7 config_directory +----------------------- + +This variable is automatically set by GRUB to the directory part of +current configuration file name (*note config_file::). + + +File: grub.info, Node: config_file, Next: debug, Prev: config_directory, Up: Special environment variables + +15.1.8 config_file +------------------ + +This variable is automatically set by GRUB to the name of configuration +file that is being processed by commands 'configfile' (*note +configfile::) or 'normal' (*note normal::). It is restored to the +previous value when command completes. + + +File: grub.info, Node: debug, Next: default, Prev: config_file, Up: Special environment variables + +15.1.9 debug +------------ + +This variable may be set to enable debugging output from various +components of GRUB. The value is a list of debug facility names +separated by whitespace or ',', or 'all' to enable all available +debugging output. The facility names are the first argument to +grub_dprintf. Consult source for more details. + + +File: grub.info, Node: default, Next: fallback, Prev: debug, Up: Special environment variables + +15.1.10 default +--------------- + +If this variable is set, it identifies a menu entry that should be +selected by default, possibly after a timeout (*note timeout::). The +entry may be identified by number (starting from 0 at each level of the +hierarchy), by title, or by id. + + For example, if you have: + +menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux { + ... +} + + then you can make this the default using: + + default=example-gnu-linux + + If the entry is in a submenu, then it must be identified using the +number, title, or id of each of the submenus starting from the top +level, followed by the number, title, or id of the menu entry itself, +with each element separated by '>'. For example, take the following +menu structure: + + GNU/Hurd --id gnu-hurd + Standard Boot --id=gnu-hurd-std + Rescue shell --id=gnu-hurd-rescue + Other platforms --id=other + Minix --id=minix + Version 3.4.0 --id=minix-3.4.0 + Version 3.3.0 --id=minix-3.3.0 + GRUB Invaders --id=grub-invaders + + The more recent release of Minix would then be identified as 'Other +platforms>Minix>Version 3.4.0', or as '1>0>0', or as +'other>minix>minix-3.4.0'. + + This variable is often set by 'GRUB_DEFAULT' (*note Simple +configuration::), 'grub-set-default', or 'grub-reboot'. + + +File: grub.info, Node: fallback, Next: gfxmode, Prev: default, Up: Special environment variables + +15.1.11 fallback +---------------- + +If this variable is set, it identifies a menu entry that should be +selected if the default menu entry fails to boot. Entries are +identified in the same way as for 'default' (*note default::). + + +File: grub.info, Node: gfxmode, Next: gfxpayload, Prev: fallback, Up: Special environment variables + +15.1.12 gfxmode +--------------- + +If this variable is set, it sets the resolution used on the 'gfxterm' +graphical terminal. Note that you can only use modes which your +graphics card supports via VESA BIOS Extensions (VBE), so for example +native LCD panel resolutions may not be available. The default is +'auto', which selects a platform-specific default that should look +reasonable. Supported modes can be listed by 'videoinfo' command in +GRUB. + + The resolution may be specified as a sequence of one or more modes, +separated by commas (',') or semicolons (';'); each will be tried in +turn until one is found. Each mode should be either 'auto', +'WIDTHxHEIGHT', or 'WIDTHxHEIGHTxDEPTH'. + + +File: grub.info, Node: gfxpayload, Next: gfxterm_font, Prev: gfxmode, Up: Special environment variables + +15.1.13 gfxpayload +------------------ + +If this variable is set, it controls the video mode in which the Linux +kernel starts up, replacing the 'vga=' boot option (*note linux::). It +may be set to 'text' to force the Linux kernel to boot in normal text +mode, 'keep' to preserve the graphics mode set using 'gfxmode', or any +of the permitted values for 'gfxmode' to set a particular graphics mode +(*note gfxmode::). + + Depending on your kernel, your distribution, your graphics card, and +the phase of the moon, note that using this option may cause GNU/Linux +to suffer from various display problems, particularly during the early +part of the boot sequence. If you have problems, set this variable to +'text' and GRUB will tell Linux to boot in normal text mode. + + The default is platform-specific. On platforms with a native text +mode (such as PC BIOS platforms), the default is 'text'. Otherwise the +default may be 'auto' or a specific video mode. + + This variable is often set by 'GRUB_GFXPAYLOAD_LINUX' (*note Simple +configuration::). + + +File: grub.info, Node: gfxterm_font, Next: grub_cpu, Prev: gfxpayload, Up: Special environment variables + +15.1.14 gfxterm_font +-------------------- + +If this variable is set, it names a font to use for text on the +'gfxterm' graphical terminal. Otherwise, 'gfxterm' may use any +available font. + + +File: grub.info, Node: grub_cpu, Next: grub_platform, Prev: gfxterm_font, Up: Special environment variables + +15.1.15 grub_cpu +---------------- + +In normal mode (*note normal::), GRUB sets the 'grub_cpu' variable to +the CPU type for which GRUB was built (e.g. 'i386' or 'powerpc'). + + +File: grub.info, Node: grub_platform, Next: icondir, Prev: grub_cpu, Up: Special environment variables + +15.1.16 grub_platform +--------------------- + +In normal mode (*note normal::), GRUB sets the 'grub_platform' variable +to the platform for which GRUB was built (e.g. 'pc' or 'efi'). + + +File: grub.info, Node: icondir, Next: lang, Prev: grub_platform, Up: Special environment variables + +15.1.17 icondir +--------------- + +If this variable is set, it names a directory in which the GRUB +graphical menu should look for icons after looking in the theme's +'icons' directory. *Note Theme file format::. + + +File: grub.info, Node: lang, Next: locale_dir, Prev: icondir, Up: Special environment variables + +15.1.18 lang +------------ + +If this variable is set, it names the language code that the 'gettext' +command (*note gettext::) uses to translate strings. For example, +French would be named as 'fr', and Simplified Chinese as 'zh_CN'. + + 'grub-mkconfig' (*note Simple configuration::) will try to set a +reasonable default for this variable based on the system locale. + + +File: grub.info, Node: locale_dir, Next: menu_color_highlight, Prev: lang, Up: Special environment variables + +15.1.19 locale_dir +------------------ + +If this variable is set, it names the directory where translation files +may be found (*note gettext::), usually '/boot/grub/locale'. Otherwise, +internationalization is disabled. + + 'grub-mkconfig' (*note Simple configuration::) will set a reasonable +default for this variable if internationalization is needed and any +translation files are available. + + +File: grub.info, Node: menu_color_highlight, Next: menu_color_normal, Prev: locale_dir, Up: Special environment variables + +15.1.20 menu_color_highlight +---------------------------- + +This variable contains the foreground and background colors to be used +for the highlighted menu entry, separated by a slash ('/'). Setting +this variable changes those colors. For the available color names, +*note color_normal::. + + The default is the value of 'color_highlight' (*note +color_highlight::). + + +File: grub.info, Node: menu_color_normal, Next: net__boot_file, Prev: menu_color_highlight, Up: Special environment variables + +15.1.21 menu_color_normal +------------------------- + +This variable contains the foreground and background colors to be used +for non-highlighted menu entries, separated by a slash ('/'). Setting +this variable changes those colors. For the available color names, +*note color_normal::. + + The default is the value of 'color_normal' (*note color_normal::). + + +File: grub.info, Node: net__boot_file, Next: net__dhcp_server_name, Prev: menu_color_normal, Up: Special environment variables + +15.1.22 net__boot_file +--------------------------------- + +*Note Network::. + + +File: grub.info, Node: net__dhcp_server_name, Next: net__domain, Prev: net__boot_file, Up: Special environment variables + +15.1.23 net__dhcp_server_name +---------------------------------------- + +*Note Network::. + + +File: grub.info, Node: net__domain, Next: net__extensionspath, Prev: net__dhcp_server_name, Up: Special environment variables + +15.1.24 net__domain +------------------------------ + +*Note Network::. + + +File: grub.info, Node: net__extensionspath, Next: net__hostname, Prev: net__domain, Up: Special environment variables + +15.1.25 net__extensionspath +-------------------------------------- + +*Note Network::. + + +File: grub.info, Node: net__hostname, Next: net__ip, Prev: net__extensionspath, Up: Special environment variables + +15.1.26 net__hostname +-------------------------------- + +*Note Network::. + + +File: grub.info, Node: net__ip, Next: net__mac, Prev: net__hostname, Up: Special environment variables + +15.1.27 net__ip +-------------------------- + +*Note Network::. + + +File: grub.info, Node: net__mac, Next: net__next_server, Prev: net__ip, Up: Special environment variables + +15.1.28 net__mac +--------------------------- + +*Note Network::. + + +File: grub.info, Node: net__next_server, Next: net__rootpath, Prev: net__mac, Up: Special environment variables + +15.1.29 net__next_server +----------------------------------- + +*Note Network::. + + +File: grub.info, Node: net__rootpath, Next: net_default_interface, Prev: net__next_server, Up: Special environment variables + +15.1.30 net__rootpath +-------------------------------- + +*Note Network::. + + +File: grub.info, Node: net_default_interface, Next: net_default_ip, Prev: net__rootpath, Up: Special environment variables + +15.1.31 net_default_interface +----------------------------- + +*Note Network::. + + +File: grub.info, Node: net_default_ip, Next: net_default_mac, Prev: net_default_interface, Up: Special environment variables + +15.1.32 net_default_ip +---------------------- + +*Note Network::. + + +File: grub.info, Node: net_default_mac, Next: net_default_server, Prev: net_default_ip, Up: Special environment variables + +15.1.33 net_default_mac +----------------------- + +*Note Network::. + + +File: grub.info, Node: net_default_server, Next: pager, Prev: net_default_mac, Up: Special environment variables + +15.1.34 net_default_server +-------------------------- + +*Note Network::. + + +File: grub.info, Node: pager, Next: prefix, Prev: net_default_server, Up: Special environment variables + +15.1.35 pager +------------- + +If set to '1', pause output after each screenful and wait for keyboard +input. The default is not to pause output. + + +File: grub.info, Node: prefix, Next: pxe_blksize, Prev: pager, Up: Special environment variables + +15.1.36 prefix +-------------- + +The location of the '/boot/grub' directory as an absolute file name +(*note File name syntax::). This is normally set by GRUB at startup +based on information provided by 'grub-install'. GRUB modules are +dynamically loaded from this directory, so it must be set correctly in +order for many parts of GRUB to work. + + +File: grub.info, Node: pxe_blksize, Next: pxe_default_gateway, Prev: prefix, Up: Special environment variables + +15.1.37 pxe_blksize +------------------- + +*Note Network::. + + +File: grub.info, Node: pxe_default_gateway, Next: pxe_default_server, Prev: pxe_blksize, Up: Special environment variables + +15.1.38 pxe_default_gateway +--------------------------- + +*Note Network::. + + +File: grub.info, Node: pxe_default_server, Next: root, Prev: pxe_default_gateway, Up: Special environment variables + +15.1.39 pxe_default_server +-------------------------- + +*Note Network::. + + +File: grub.info, Node: root, Next: superusers, Prev: pxe_default_server, Up: Special environment variables + +15.1.40 root +------------ + +The root device name (*note Device syntax::). Any file names that do +not specify an explicit device name are read from this device. The +default is normally set by GRUB at startup based on the value of +'prefix' (*note prefix::). + + For example, if GRUB was installed to the first partition of the +first hard disk, then 'prefix' might be set to '(hd0,msdos1)/boot/grub' +and 'root' to 'hd0,msdos1'. + + +File: grub.info, Node: superusers, Next: theme, Prev: root, Up: Special environment variables + +15.1.41 superusers +------------------ + +This variable may be set to a list of superuser names to enable +authentication support. *Note Security::. + + +File: grub.info, Node: theme, Next: timeout, Prev: superusers, Up: Special environment variables + +15.1.42 theme +------------- + +This variable may be set to a directory containing a GRUB graphical menu +theme. *Note Theme file format::. + + This variable is often set by 'GRUB_THEME' (*note Simple +configuration::). + + +File: grub.info, Node: timeout, Next: timeout_style, Prev: theme, Up: Special environment variables + +15.1.43 timeout +--------------- + +If this variable is set, it specifies the time in seconds to wait for +keyboard input before booting the default menu entry. A timeout of '0' +means to boot the default entry immediately without displaying the menu; +a timeout of '-1' (or unset) means to wait indefinitely. + + If 'timeout_style' (*note timeout_style::) is set to 'countdown' or +'hidden', the timeout is instead counted before the menu is displayed. + + This variable is often set by 'GRUB_TIMEOUT' (*note Simple +configuration::). + + +File: grub.info, Node: timeout_style, Prev: timeout, Up: Special environment variables + +15.1.44 timeout_style +--------------------- + +This variable may be set to 'menu', 'countdown', or 'hidden' to control +the way in which the timeout (*note timeout::) interacts with displaying +the menu. See the documentation of 'GRUB_TIMEOUT_STYLE' (*note Simple +configuration::) for details. + + +File: grub.info, Node: Environment block, Prev: Special environment variables, Up: Environment + +15.2 The GRUB environment block +=============================== + +It is often useful to be able to remember a small amount of information +from one boot to the next. For example, you might want to set the +default menu entry based on what was selected the last time. GRUB +deliberately does not implement support for writing files in order to +minimise the possibility of the boot loader being responsible for file +system corruption, so a GRUB configuration file cannot just create a +file in the ordinary way. However, GRUB provides an "environment block" +which can be used to save a small amount of state. + + The environment block is a preallocated 1024-byte file, which +normally lives in '/boot/grub/grubenv' (although you should not assume +this). At boot time, the 'load_env' command (*note load_env::) loads +environment variables from it, and the 'save_env' (*note save_env::) +command saves environment variables to it. From a running system, the +'grub-editenv' utility can be used to edit the environment block. + + For safety reasons, this storage is only available when installed on +a plain disk (no LVM or RAID), using a non-checksumming filesystem (no +ZFS), and using BIOS or EFI functions (no ATA, USB or IEEE1275). + + 'grub-mkconfig' uses this facility to implement 'GRUB_SAVEDEFAULT' +(*note Simple configuration::). + + +File: grub.info, Node: Commands, Next: Internationalisation, Prev: Environment, Up: Top + +16 The list of available commands +********************************* + +In this chapter, we list all commands that are available in GRUB. + + Commands belong to different groups. A few can only be used in the +global section of the configuration file (or "menu"); most of them can +be entered on the command-line and can be used either anywhere in the +menu or specifically in the menu entries. + + In rescue mode, only the 'insmod' (*note insmod::), 'ls' (*note +ls::), 'set' (*note set::), and 'unset' (*note unset::) commands are +normally available. If you end up in rescue mode and do not know what +to do, then *note GRUB only offers a rescue shell::. + +* Menu: + +* Menu-specific commands:: +* General commands:: +* Command-line and menu entry commands:: +* Networking commands:: + + +File: grub.info, Node: Menu-specific commands, Next: General commands, Up: Commands + +16.1 The list of commands for the menu only +=========================================== + +The semantics used in parsing the configuration file are the following: + + * The files _must_ be in plain-text format. + + * '#' at the beginning of a line in a configuration file means it is + only a comment. + + * Options are separated by spaces. + + * All numbers can be either decimal or hexadecimal. A hexadecimal + number must be preceded by '0x', and is case-insensitive. + + These commands can only be used in the menu: + +* Menu: + +* menuentry:: Start a menu entry +* submenu:: Group menu entries + + +File: grub.info, Node: menuentry, Next: submenu, Up: Menu-specific commands + +16.1.1 menuentry +---------------- + + -- Command: menuentry TITLE ['--class=class' ...] ['--users=users'] + ['--unrestricted'] ['--hotkey=key'] ['--id=id'] [ARG ...] { + COMMAND; ... } + This defines a GRUB menu entry named TITLE. When this entry is + selected from the menu, GRUB will set the CHOSEN environment + variable to value of '--id' if '--id' is given, execute the list of + commands given within braces, and if the last command in the list + returned successfully and a kernel was loaded it will execute the + 'boot' command. + + The '--class' option may be used any number of times to group menu + entries into classes. Menu themes may display different classes + using different styles. + + The '--users' option grants specific users access to specific menu + entries. *Note Security::. + + The '--unrestricted' option grants all users access to specific + menu entries. *Note Security::. + + The '--hotkey' option associates a hotkey with a menu entry. KEY + may be a single letter, or one of the aliases 'backspace', 'tab', + or 'delete'. + + The '--id' may be used to associate unique identifier with a menu + entry. ID is string of ASCII aphanumeric characters, underscore + and hyphen and should not start with a digit. + + All other arguments including TITLE are passed as positional + parameters when list of commands is executed with TITLE always + assigned to '$1'. + + +File: grub.info, Node: submenu, Prev: menuentry, Up: Menu-specific commands + +16.1.2 submenu +-------------- + + -- Command: submenu TITLE ['--class=class' ...] ['--users=users'] + ['--unrestricted'] ['--hotkey=key'] ['--id=id'] { MENU ENTRIES + ... } + This defines a submenu. An entry called TITLE will be added to the + menu; when that entry is selected, a new menu will be displayed + showing all the entries within this submenu. + + All options are the same as in the 'menuentry' command (*note + menuentry::). + + +File: grub.info, Node: General commands, Next: Command-line and menu entry commands, Prev: Menu-specific commands, Up: Commands + +16.2 The list of general commands +================================= + +Commands usable anywhere in the menu and in the command-line. + +* Menu: + +* serial:: Set up a serial device +* terminal_input:: Manage input terminals +* terminal_output:: Manage output terminals +* terminfo:: Define terminal type + + +File: grub.info, Node: serial, Next: terminal_input, Up: General commands + +16.2.1 serial +------------- + + -- Command: serial ['--unit=unit'] ['--port=port'] ['--speed=speed'] + ['--word=word'] ['--parity=parity'] ['--stop=stop'] + Initialize a serial device. UNIT is a number in the range 0-3 + specifying which serial port to use; default is 0, which + corresponds to the port often called COM1. PORT is the I/O port + where the UART is to be found; if specified it takes precedence + over UNIT. SPEED is the transmission speed; default is 9600. WORD + and STOP are the number of data bits and stop bits. Data bits must + be in the range 5-8 and stop bits must be 1 or 2. Default is 8 + data bits and one stop bit. PARITY is one of 'no', 'odd', 'even' + and defaults to 'no'. + + The serial port is not used as a communication channel unless the + 'terminal_input' or 'terminal_output' command is used (*note + terminal_input::, *note terminal_output::). + + See also *note Serial terminal::. + + +File: grub.info, Node: terminal_input, Next: terminal_output, Prev: serial, Up: General commands + +16.2.2 terminal_input +--------------------- + + -- Command: terminal_input ['--append'|'--remove'] [terminal1] + [terminal2] ... + List or select an input terminal. + + With no arguments, list the active and available input terminals. + + With '--append', add the named terminals to the list of active + input terminals; any of these may be used to provide input to GRUB. + + With '--remove', remove the named terminals from the active list. + + With no options but a list of terminal names, make only the listed + terminal names active. + + +File: grub.info, Node: terminal_output, Next: terminfo, Prev: terminal_input, Up: General commands + +16.2.3 terminal_output +---------------------- + + -- Command: terminal_output ['--append'|'--remove'] [terminal1] + [terminal2] ... + List or select an output terminal. + + With no arguments, list the active and available output terminals. + + With '--append', add the named terminals to the list of active + output terminals; all of these will receive output from GRUB. + + With '--remove', remove the named terminals from the active list. + + With no options but a list of terminal names, make only the listed + terminal names active. + + +File: grub.info, Node: terminfo, Prev: terminal_output, Up: General commands + +16.2.4 terminfo +--------------- + + -- Command: terminfo [-a|-u|-v] [term] + Define the capabilities of your terminal by giving the name of an + entry in the terminfo database, which should correspond roughly to + a 'TERM' environment variable in Unix. + + The currently available terminal types are 'vt100', 'vt100-color', + 'ieee1275', and 'dumb'. If you need other terminal types, please + contact us to discuss the best way to include support for these in + GRUB. + + The '-a' ('--ascii'), '-u' ('--utf8'), and '-v' ('--visual-utf8') + options control how non-ASCII text is displayed. '-a' specifies an + ASCII-only terminal; '-u' specifies logically-ordered UTF-8; and + '-v' specifies "visually-ordered UTF-8" (in other words, arranged + such that a terminal emulator without bidirectional text support + will display right-to-left text in the proper order; this is not + really proper UTF-8, but a workaround). + + If no option or terminal type is specified, the current terminal + type is printed. + + +File: grub.info, Node: Command-line and menu entry commands, Next: Networking commands, Prev: General commands, Up: Commands + +16.3 The list of command-line and menu entry commands +===================================================== + +These commands are usable in the command-line and in menu entries. If +you forget a command, you can run the command 'help' (*note help::). + +* Menu: + +* [:: Check file types and compare values +* acpi:: Load ACPI tables +* authenticate:: Check whether user is in user list +* background_color:: Set background color for active terminal +* background_image:: Load background image for active terminal +* badram:: Filter out bad regions of RAM +* blocklist:: Print a block list +* boot:: Start up your operating system +* cat:: Show the contents of a file +* chainloader:: Chain-load another boot loader +* clear:: Clear the screen +* cmosclean:: Clear bit in CMOS +* cmosdump:: Dump CMOS contents +* cmostest:: Test bit in CMOS +* cmp:: Compare two files +* configfile:: Load a configuration file +* cpuid:: Check for CPU features +* crc:: Compute or check CRC32 checksums +* cryptomount:: Mount a crypto device +* date:: Display or set current date and time +* devicetree:: Load a device tree blob +* distrust:: Remove a pubkey from trusted keys +* drivemap:: Map a drive to another +* echo:: Display a line of text +* eval:: Evaluate agruments as GRUB commands +* export:: Export an environment variable +* false:: Do nothing, unsuccessfully +* gettext:: Translate a string +* gptsync:: Fill an MBR based on GPT entries +* halt:: Shut down your computer +* hashsum:: Compute or check hash checksum +* help:: Show help messages +* initrd:: Load a Linux initrd +* initrd16:: Load a Linux initrd (16-bit mode) +* insmod:: Insert a module +* keystatus:: Check key modifier status +* linux:: Load a Linux kernel +* linux16:: Load a Linux kernel (16-bit mode) +* list_env:: List variables in environment block +* list_trusted:: List trusted public keys +* load_env:: Load variables from environment block +* loadfont:: Load font files +* loopback:: Make a device from a filesystem image +* ls:: List devices or files +* lsfonts:: List loaded fonts +* lsmod:: Show loaded modules +* md5sum:: Compute or check MD5 hash +* module:: Load module for multiboot kernel +* multiboot:: Load multiboot compliant kernel +* nativedisk:: Switch to native disk drivers +* normal:: Enter normal mode +* normal_exit:: Exit from normal mode +* parttool:: Modify partition table entries +* password:: Set a clear-text password +* password_pbkdf2:: Set a hashed password +* play:: Play a tune +* probe:: Retrieve device info +* pxe_unload:: Unload the PXE environment +* read:: Read user input +* reboot:: Reboot your computer +* regexp:: Test if regular expression matches string +* rmmod:: Remove a module +* save_env:: Save variables to environment block +* search:: Search devices by file, label, or UUID +* sendkey:: Emulate keystrokes +* set:: Set an environment variable +* sha1sum:: Compute or check SHA1 hash +* sha256sum:: Compute or check SHA256 hash +* sha512sum:: Compute or check SHA512 hash +* sleep:: Wait for a specified number of seconds +* source:: Read a configuration file in same context +* test:: Check file types and compare values +* true:: Do nothing, successfully +* trust:: Add public key to list of trusted keys +* unset:: Unset an environment variable +* uppermem:: Set the upper memory size +* verify_detached:: Verify detached digital signature +* videoinfo:: List available video modes +* xen_hypervisor:: Load xen hypervisor binary +* xen_linux:: Load dom0 kernel for xen hypervisor +* xen_initrd:: Load dom0 initrd for dom0 kernel +* xen_xsm:: Load xen security module for xen hypervisor + + +File: grub.info, Node: [, Next: acpi, Up: Command-line and menu entry commands + +16.3.1 [ +-------- + + -- Command: '[' expression ']' + Alias for 'test EXPRESSION' (*note test::). + + +File: grub.info, Node: acpi, Next: authenticate, Prev: [, Up: Command-line and menu entry commands + +16.3.2 acpi +----------- + + -- Command: acpi ['-1'|'-2'] + ['--exclude=table1,...'|'--load-only=table1,...'] + ['--oemid=id'] ['--oemtable=table'] ['--oemtablerev=rev'] + ['--oemtablecreator=creator'] ['--oemtablecreatorrev=rev'] + ['--no-ebda'] filename ... + Modern BIOS systems normally implement the Advanced Configuration + and Power Interface (ACPI), and define various tables that describe + the interface between an ACPI-compliant operating system and the + firmware. In some cases, the tables provided by default only work + well with certain operating systems, and it may be necessary to + replace some of them. + + Normally, this command will replace the Root System Description + Pointer (RSDP) in the Extended BIOS Data Area to point to the new + tables. If the '--no-ebda' option is used, the new tables will be + known only to GRUB, but may be used by GRUB's EFI emulation. + + +File: grub.info, Node: authenticate, Next: background_color, Prev: acpi, Up: Command-line and menu entry commands + +16.3.3 authenticate +------------------- + + -- Command: authenticate [userlist] + Check whether user is in USERLIST or listed in the value of + variable 'superusers'. See *note superusers:: for valid user list + format. If 'superusers' is empty, this command returns true. + *Note Security::. + + +File: grub.info, Node: background_color, Next: background_image, Prev: authenticate, Up: Command-line and menu entry commands + +16.3.4 background_color +----------------------- + + -- Command: background_color color + Set background color for active terminal. For valid color + specifications see *note Colors: Theme file format. Background + color can be changed only when using 'gfxterm' for terminal output. + + This command sets color of empty areas without text. Text + background color is controlled by environment variables + COLOR_NORMAL, COLOR_HIGHLIGHT, MENU_COLOR_NORMAL, + MENU_COLOR_HIGHLIGHT. *Note Special environment variables::. + + +File: grub.info, Node: background_image, Next: badram, Prev: background_color, Up: Command-line and menu entry commands + +16.3.5 background_image +----------------------- + + -- Command: background_image [['--mode' 'stretch'|'normal'] file] + Load background image for active terminal from FILE. Image is + stretched to fill up entire screen unless option '--mode' 'normal' + is given. Without arguments remove currently loaded background + image. Background image can be changed only when using 'gfxterm' + for terminal output. + + +File: grub.info, Node: badram, Next: blocklist, Prev: background_image, Up: Command-line and menu entry commands + +16.3.6 badram +------------- + + -- Command: badram addr,mask[,addr,mask...] + Filter out bad RAM. + + This command notifies the memory manager that specified regions of +RAM ought to be filtered out (usually, because they're damaged). This +remains in effect after a payload kernel has been loaded by GRUB, as +long as the loaded kernel obtains its memory map from GRUB. Kernels that +support this include Linux, GNU Mach, the kernel of FreeBSD and +Multiboot kernels in general. + + Syntax is the same as provided by the Memtest86+ utility +(http://www.memtest.org/): a list of address/mask pairs. Given a +page-aligned address and a base address / mask pair, if all the bits of +the page-aligned address that are enabled by the mask match with the +base address, it means this page is to be filtered. This syntax makes +it easy to represent patterns that are often result of memory damage, +due to physical distribution of memory cells. + + +File: grub.info, Node: blocklist, Next: boot, Prev: badram, Up: Command-line and menu entry commands + +16.3.7 blocklist +---------------- + + -- Command: blocklist file + Print a block list (*note Block list syntax::) for FILE. + + +File: grub.info, Node: boot, Next: cat, Prev: blocklist, Up: Command-line and menu entry commands + +16.3.8 boot +----------- + + -- Command: boot + Boot the OS or chain-loader which has been loaded. Only necessary + if running the fully interactive command-line (it is implicit at + the end of a menu entry). + + +File: grub.info, Node: cat, Next: chainloader, Prev: boot, Up: Command-line and menu entry commands + +16.3.9 cat +---------- + + -- Command: cat ['--dos'] file + Display the contents of the file FILE. This command may be useful + to remind you of your OS's root partition: + + grub> cat /etc/fstab + + If the '--dos' option is used, then carriage return / new line + pairs will be displayed as a simple new line. Otherwise, the + carriage return will be displayed as a control character ('') to + make it easier to see when boot problems are caused by a file + formatted using DOS-style line endings. + + +File: grub.info, Node: chainloader, Next: clear, Prev: cat, Up: Command-line and menu entry commands + +16.3.10 chainloader +------------------- + + -- Command: chainloader ['--force'] file + Load FILE as a chain-loader. Like any other file loaded by the + filesystem code, it can use the blocklist notation (*note Block + list syntax::) to grab the first sector of the current partition + with '+1'. If you specify the option '--force', then load FILE + forcibly, whether it has a correct signature or not. This is + required when you want to load a defective boot loader, such as SCO + UnixWare 7.1. + + +File: grub.info, Node: clear, Next: cmosclean, Prev: chainloader, Up: Command-line and menu entry commands + +16.3.11 clear +------------- + + -- Command: clear + Clear the screen. + + +File: grub.info, Node: cmosclean, Next: cmosdump, Prev: clear, Up: Command-line and menu entry commands + +16.3.12 cmosclean +----------------- + + -- Command: cmosclean byte:bit + Clear value of bit in CMOS at location BYTE:BIT. This command is + available only on platforms that support CMOS. + + +File: grub.info, Node: cmosdump, Next: cmostest, Prev: cmosclean, Up: Command-line and menu entry commands + +16.3.13 cmosdump +---------------- + + -- Dump: CMOS contents + Dump full CMOS contents as hexadecimal values. This command is + available only on platforms that support CMOS. + + +File: grub.info, Node: cmostest, Next: cmp, Prev: cmosdump, Up: Command-line and menu entry commands + +16.3.14 cmostest +---------------- + + -- Command: cmostest byte:bit + Test value of bit in CMOS at location BYTE:BIT. Exit status is + zero if bit is set, non zero otherwise. This command is available + only on platforms that support CMOS. + + +File: grub.info, Node: cmp, Next: configfile, Prev: cmostest, Up: Command-line and menu entry commands + +16.3.15 cmp +----------- + + -- Command: cmp file1 file2 + Compare the file FILE1 with the file FILE2. If they differ in + size, print the sizes like this: + + Differ in size: 0x1234 [foo], 0x4321 [bar] + + If the sizes are equal but the bytes at an offset differ, then + print the bytes like this: + + Differ at the offset 777: 0xbe [foo], 0xef [bar] + + If they are completely identical, nothing will be printed. + + +File: grub.info, Node: configfile, Next: cpuid, Prev: cmp, Up: Command-line and menu entry commands + +16.3.16 configfile +------------------ + + -- Command: configfile file + Load FILE as a configuration file. If FILE defines any menu + entries, then show a menu containing them immediately. Any + environment variable changes made by the commands in FILE will not + be preserved after 'configfile' returns. + + +File: grub.info, Node: cpuid, Next: crc, Prev: configfile, Up: Command-line and menu entry commands + +16.3.17 cpuid +------------- + + -- Command: cpuid [-l] [-p] + Check for CPU features. This command is only available on x86 + systems. + + With the '-l' option, return true if the CPU supports long mode + (64-bit). + + With the '-p' option, return true if the CPU supports Physical + Address Extension (PAE). + + If invoked without options, this command currently behaves as if it + had been invoked with '-l'. This may change in the future. + + +File: grub.info, Node: crc, Next: cryptomount, Prev: cpuid, Up: Command-line and menu entry commands + +16.3.18 crc +----------- + + -- Command: crc arg ... + Alias for 'hashsum --hash crc32 arg ...'. See command 'hashsum' + (*note hashsum::) for full description. + + +File: grub.info, Node: cryptomount, Next: date, Prev: crc, Up: Command-line and menu entry commands + +16.3.19 cryptomount +------------------- + + -- Command: cryptomount device|'-u' uuid|'-a'|'-b' + Setup access to encrypted device. If necessary, passphrase is + requested interactively. Option DEVICE configures specific grub + device (*note Naming convention::); option '-u' UUID configures + device with specified UUID; option '-a' configures all detected + encrypted devices; option '-b' configures all geli containers that + have boot flag set. + + GRUB suports devices encrypted using LUKS and geli. Note that + necessary modules (LUKS and GELI) have to be loaded manually before + this command can be used. + + +File: grub.info, Node: date, Next: devicetree, Prev: cryptomount, Up: Command-line and menu entry commands + +16.3.20 date +------------ + + -- Command: date [[year-]month-day] [hour:minute[:second]] + With no arguments, print the current date and time. + + Otherwise, take the current date and time, change any elements + specified as arguments, and set the result as the new date and + time. For example, 'date 01-01' will set the current month and day + to January 1, but leave the year, hour, minute, and second + unchanged. + + +File: grub.info, Node: devicetree, Next: distrust, Prev: date, Up: Command-line and menu entry commands + +16.3.21 linux +------------- + + -- Command: devicetree file + Load a device tree blob (.dtb) from a filesystem, for later use by + a Linux kernel. Does not perform merging with any device tree + supplied by firmware, but rather replaces it completely. *note + GNU/Linux::. + + +File: grub.info, Node: distrust, Next: drivemap, Prev: devicetree, Up: Command-line and menu entry commands + +16.3.22 distrust +---------------- + + -- Command: distrust pubkey_id + Remove public key PUBKEY_ID from GRUB's keyring of trusted keys. + PUBKEY_ID is the last four bytes (eight hexadecimal digits) of the + GPG v4 key id, which is also the output of 'list_trusted' (*note + list_trusted::). Outside of GRUB, the key id can be obtained using + 'gpg --fingerprint'). These keys are used to validate signatures + when environment variable 'check_signatures' is set to 'enforce' + (*note check_signatures::), and by some invocations of + 'verify_detached' (*note verify_detached::). *Note Using digital + signatures::, for more information. + + +File: grub.info, Node: drivemap, Next: echo, Prev: distrust, Up: Command-line and menu entry commands + +16.3.23 drivemap +---------------- + + -- Command: drivemap '-l'|'-r'|['-s'] from_drive to_drive + Without options, map the drive FROM_DRIVE to the drive TO_DRIVE. + This is necessary when you chain-load some operating systems, such + as DOS, if such an OS resides at a non-first drive. For + convenience, any partition suffix on the drive is ignored, so you + can safely use ${root} as a drive specification. + + With the '-s' option, perform the reverse mapping as well, swapping + the two drives. + + With the '-l' option, list the current mappings. + + With the '-r' option, reset all mappings to the default values. + + For example: + + drivemap -s (hd0) (hd1) + + +File: grub.info, Node: echo, Next: eval, Prev: drivemap, Up: Command-line and menu entry commands + +16.3.24 echo +------------ + + -- Command: echo ['-n'] ['-e'] string ... + Display the requested text and, unless the '-n' option is used, a + trailing new line. If there is more than one string, they are + separated by spaces in the output. As usual in GRUB commands, + variables may be substituted using '${var}'. + + The '-e' option enables interpretation of backslash escapes. The + following sequences are recognised: + + '\\' + backslash + + '\a' + alert (BEL) + + '\c' + suppress trailing new line + + '\f' + form feed + + '\n' + new line + + '\r' + carriage return + + '\t' + horizontal tab + + '\v' + vertical tab + + When interpreting backslash escapes, backslash followed by any + other character will print that character. + + +File: grub.info, Node: eval, Next: export, Prev: echo, Up: Command-line and menu entry commands + +16.3.25 eval +------------ + + -- Command: eval string ... + Concatenate arguments together using single space as separator and + evaluate result as sequence of GRUB commands. + + +File: grub.info, Node: export, Next: false, Prev: eval, Up: Command-line and menu entry commands + +16.3.26 export +-------------- + + -- Command: export envvar + Export the environment variable ENVVAR. Exported variables are + visible to subsidiary configuration files loaded using + 'configfile'. + + +File: grub.info, Node: false, Next: gettext, Prev: export, Up: Command-line and menu entry commands + +16.3.27 false +------------- + + -- Command: false + Do nothing, unsuccessfully. This is mainly useful in control + constructs such as 'if' and 'while' (*note Shell-like scripting::). + + +File: grub.info, Node: gettext, Next: gptsync, Prev: false, Up: Command-line and menu entry commands + +16.3.28 gettext +--------------- + + -- Command: gettext string + Translate STRING into the current language. + + The current language code is stored in the 'lang' variable in + GRUB's environment (*note lang::). Translation files in MO format + are read from 'locale_dir' (*note locale_dir::), usually + '/boot/grub/locale'. + + +File: grub.info, Node: gptsync, Next: halt, Prev: gettext, Up: Command-line and menu entry commands + +16.3.29 gptsync +--------------- + + -- Command: gptsync device [partition[+/-[type]]] ... + Disks using the GUID Partition Table (GPT) also have a legacy + Master Boot Record (MBR) partition table for compatibility with the + BIOS and with older operating systems. The legacy MBR can only + represent a limited subset of GPT partition entries. + + This command populates the legacy MBR with the specified PARTITION + entries on DEVICE. Up to three partitions may be used. + + TYPE is an MBR partition type code; prefix with '0x' if you want to + enter this in hexadecimal. The separator between PARTITION and + TYPE may be '+' to make the partition active, or '-' to make it + inactive; only one partition may be active. If both the separator + and type are omitted, then the partition will be inactive. + + +File: grub.info, Node: halt, Next: hashsum, Prev: gptsync, Up: Command-line and menu entry commands + +16.3.30 halt +------------ + + -- Command: halt '--no-apm' + The command halts the computer. If the '--no-apm' option is + specified, no APM BIOS call is performed. Otherwise, the computer + is shut down using APM. + + +File: grub.info, Node: hashsum, Next: help, Prev: halt, Up: Command-line and menu entry commands + +16.3.31 hashsum +--------------- + + -- Command: hashsum '--hash' hash '--keep-going' '--uncompress' + '--check' file ['--prefix' dir]|file ... + Compute or verify file hashes. Hash type is selected with option + '--hash'. Supported hashes are: 'adler32', 'crc64', 'crc32', + 'crc32rfc1510', 'crc24rfc2440', 'md4', 'md5', 'ripemd160', 'sha1', + 'sha224', 'sha256', 'sha512', 'sha384', 'tiger192', 'tiger', + 'tiger2', 'whirlpool'. Option '--uncompress' uncompresses files + before computing hash. + + When list of files is given, hash of each file is computed and + printed, followed by file name, each file on a new line. + + When option '--check' is given, it points to a file that contains + list of HASH NAME pairs in the same format as used by UNIX 'md5sum' + command. Option '--prefix' may be used to give directory where + files are located. Hash verification stops after the first + mismatch was found unless option '--keep-going' was given. The + exit code '$?' is set to 0 if hash verification is successful. If + it fails, '$?' is set to a nonzero value. + + +File: grub.info, Node: help, Next: initrd, Prev: hashsum, Up: Command-line and menu entry commands + +16.3.32 help +------------ + + -- Command: help [pattern ...] + Display helpful information about builtin commands. If you do not + specify PATTERN, this command shows short descriptions of all + available commands. + + If you specify any PATTERNS, it displays longer information about + each of the commands whose names begin with those PATTERNS. + + +File: grub.info, Node: initrd, Next: initrd16, Prev: help, Up: Command-line and menu entry commands + +16.3.33 initrd +-------------- + + -- Command: initrd file + Load an initial ramdisk for a Linux kernel image, and set the + appropriate parameters in the Linux setup area in memory. This may + only be used after the 'linux' command (*note linux::) has been + run. See also *note GNU/Linux::. + + +File: grub.info, Node: initrd16, Next: insmod, Prev: initrd, Up: Command-line and menu entry commands + +16.3.34 initrd16 +---------------- + + -- Command: initrd16 file + Load an initial ramdisk for a Linux kernel image to be booted in + 16-bit mode, and set the appropriate parameters in the Linux setup + area in memory. This may only be used after the 'linux16' command + (*note linux16::) has been run. See also *note GNU/Linux::. + + This command is only available on x86 systems. + + +File: grub.info, Node: insmod, Next: keystatus, Prev: initrd16, Up: Command-line and menu entry commands + +16.3.35 insmod +-------------- + + -- Command: insmod module + Insert the dynamic GRUB module called MODULE. + + +File: grub.info, Node: keystatus, Next: linux, Prev: insmod, Up: Command-line and menu entry commands + +16.3.36 keystatus +----------------- + + -- Command: keystatus ['--shift'] ['--ctrl'] ['--alt'] + Return true if the Shift, Control, or Alt modifier keys are held + down, as requested by options. This is useful in scripting, to + allow some user control over behaviour without having to wait for a + keypress. + + Checking key modifier status is only supported on some platforms. + If invoked without any options, the 'keystatus' command returns + true if and only if checking key modifier status is supported. + + +File: grub.info, Node: linux, Next: linux16, Prev: keystatus, Up: Command-line and menu entry commands + +16.3.37 linux +------------- + + -- Command: linux file ... + Load a Linux kernel image from FILE. The rest of the line is + passed verbatim as the "kernel command-line". Any initrd must be + reloaded after using this command (*note initrd::). + + On x86 systems, the kernel will be booted using the 32-bit boot + protocol. Note that this means that the 'vga=' boot option will + not work; if you want to set a special video mode, you will need to + use GRUB commands such as 'set gfxpayload=1024x768' or 'set + gfxpayload=keep' (to keep the same mode as used in GRUB) instead. + GRUB can automatically detect some uses of 'vga=' and translate + them to appropriate settings of 'gfxpayload'. The 'linux16' + command (*note linux16::) avoids this restriction. + + +File: grub.info, Node: linux16, Next: list_env, Prev: linux, Up: Command-line and menu entry commands + +16.3.38 linux16 +--------------- + + -- Command: linux16 file ... + Load a Linux kernel image from FILE in 16-bit mode. The rest of + the line is passed verbatim as the "kernel command-line". Any + initrd must be reloaded after using this command (*note + initrd16::). + + The kernel will be booted using the traditional 16-bit boot + protocol. As well as bypassing problems with 'vga=' described in + *note linux::, this permits booting some other programs that + implement the Linux boot protocol for the sake of convenience. + + This command is only available on x86 systems. + + +File: grub.info, Node: list_env, Next: list_trusted, Prev: linux16, Up: Command-line and menu entry commands + +16.3.39 list_env +---------------- + + -- Command: list_env ['--file' file] + List all variables in the environment block file. *Note + Environment block::. + + The '--file' option overrides the default location of the + environment block. + + +File: grub.info, Node: list_trusted, Next: load_env, Prev: list_env, Up: Command-line and menu entry commands + +16.3.40 list_trusted +-------------------- + + -- Command: list_trusted + List all public keys trusted by GRUB for validating signatures. + The output is in GPG's v4 key fingerprint format (i.e., the output + of 'gpg --fingerprint'). The least significant four bytes (last + eight hexadecimal digits) can be used as an argument to 'distrust' + (*note distrust::). *Note Using digital signatures::, for more + information about uses for these keys. + + +File: grub.info, Node: load_env, Next: loadfont, Prev: list_trusted, Up: Command-line and menu entry commands + +16.3.41 load_env +---------------- + + -- Command: load_env ['--file' file] ['--skip-sig'] + [whitelisted_variable_name] ... + Load all variables from the environment block file into the + environment. *Note Environment block::. + + The '--file' option overrides the default location of the + environment block. + + The '--skip-sig' option skips signature checking even when the + value of environment variable 'check_signatures' is set to + 'enforce' (*note check_signatures::). + + If one or more variable names are provided as arguments, they are + interpreted as a whitelist of variables to load from the + environment block file. Variables set in the file but not present + in the whitelist are ignored. + + The '--skip-sig' option should be used with care, and should always + be used in concert with a whitelist of acceptable variables whose + values should be set. Failure to employ a carefully constructed + whitelist could result in reading a malicious value into critical + environment variables from the file, such as setting + 'check_signatures=no', modifying 'prefix' to boot from an + unexpected location or not at all, etc. + + When used with care, '--skip-sig' and the whitelist enable an + administrator to configure a system to boot only signed + configurations, but to allow the user to select from among multiple + configurations, and to enable "one-shot" boot attempts and + "savedefault" behavior. *Note Using digital signatures::, for more + information. + + +File: grub.info, Node: loadfont, Next: loopback, Prev: load_env, Up: Command-line and menu entry commands + +16.3.42 loadfont +---------------- + + -- Command: loadfont file ... + Load specified font files. Unless absolute pathname is given, FILE + is assumed to be in directory '$prefix/fonts' with suffix '.pf2' + appended. *Note Fonts: Theme file format. + + +File: grub.info, Node: loopback, Next: ls, Prev: loadfont, Up: Command-line and menu entry commands + +16.3.43 loopback +---------------- + + -- Command: loopback ['-d'] device file + Make the device named DEVICE correspond to the contents of the + filesystem image in FILE. For example: + + loopback loop0 /path/to/image + ls (loop0)/ + + With the '-d' option, delete a device previously created using this + command. + + +File: grub.info, Node: ls, Next: lsfonts, Prev: loopback, Up: Command-line and menu entry commands + +16.3.44 ls +---------- + + -- Command: ls [arg ...] + List devices or files. + + With no arguments, print all devices known to GRUB. + + If the argument is a device name enclosed in parentheses (*note + Device syntax::), then print the name of the filesystem of that + device. + + If the argument is a directory given as an absolute file name + (*note File name syntax::), then list the contents of that + directory. + + +File: grub.info, Node: lsfonts, Next: lsmod, Prev: ls, Up: Command-line and menu entry commands + +16.3.45 lsfonts +--------------- + + -- Command: lsfonts + List loaded fonts. + + +File: grub.info, Node: lsmod, Next: md5sum, Prev: lsfonts, Up: Command-line and menu entry commands + +16.3.46 lsmod +------------- + + -- Command: lsmod + Show list of loaded modules. + + +File: grub.info, Node: md5sum, Next: module, Prev: lsmod, Up: Command-line and menu entry commands + +16.3.47 md5sum +-------------- + + -- Command: md5sum arg ... + Alias for 'hashsum --hash md5 arg ...'. See command 'hashsum' + (*note hashsum::) for full description. + + +File: grub.info, Node: module, Next: multiboot, Prev: md5sum, Up: Command-line and menu entry commands + +16.3.48 module +-------------- + + -- Command: module [--nounzip] file [arguments] + Load a module for multiboot kernel image. The rest of the line is + passed verbatim as the module command line. + + +File: grub.info, Node: multiboot, Next: nativedisk, Prev: module, Up: Command-line and menu entry commands + +16.3.49 multiboot +----------------- + + -- Command: multiboot [--quirk-bad-kludge] + [--quirk-modules-after-kernel] file ... + Load a multiboot kernel image from FILE. The rest of the line is + passed verbatim as the "kernel command-line". Any module must be + reloaded after using this command (*note module::). + + Some kernels have known problems. You need to specify -quirk-* for + those. -quirk-bad-kludge is a problem seen in several products + that they include loading kludge information with invalid data in + ELF file. GRUB prior to 0.97 and some custom builds prefered ELF + information while 0.97 and GRUB 2 use kludge. Use this option to + ignore kludge. Known affected systems: old Solaris, SkyOS. + + -quirk-modules-after-kernel is needed for kernels which load at + relatively high address e.g. 16MiB mark and can't cope with + modules stuffed between 1MiB mark and beginning of the kernel. + Known afftected systems: VMWare. + + +File: grub.info, Node: nativedisk, Next: normal, Prev: multiboot, Up: Command-line and menu entry commands + +16.3.50 nativedisk +------------------ + + -- Command: nativedisk + Switch from firmware disk drivers to native ones. Really useful + only on platforms where both firmware and native disk drives are + available. Currently i386-pc, i386-efi, i386-ieee1275 and + x86_64-efi. + + +File: grub.info, Node: normal, Next: normal_exit, Prev: nativedisk, Up: Command-line and menu entry commands + +16.3.51 normal +-------------- + + -- Command: normal [file] + Enter normal mode and display the GRUB menu. + + In normal mode, commands, filesystem modules, and cryptography + modules are automatically loaded, and the full GRUB script parser + is available. Other modules may be explicitly loaded using + 'insmod' (*note insmod::). + + If a FILE is given, then commands will be read from that file. + Otherwise, they will be read from '$prefix/grub.cfg' if it exists. + + 'normal' may be called from within normal mode, creating a nested + environment. It is more usual to use 'configfile' (*note + configfile::) for this. + + +File: grub.info, Node: normal_exit, Next: parttool, Prev: normal, Up: Command-line and menu entry commands + +16.3.52 normal_exit +------------------- + + -- Command: normal_exit + Exit normal mode (*note normal::). If this instance of normal mode + was not nested within another one, then return to rescue mode. + + +File: grub.info, Node: parttool, Next: password, Prev: normal_exit, Up: Command-line and menu entry commands + +16.3.53 parttool +---------------- + + -- Command: parttool partition commands + Make various modifications to partition table entries. + + Each COMMAND is either a boolean option, in which case it must be + followed with '+' or '-' (with no intervening space) to enable or + disable that option, or else it takes a value in the form + 'COMMAND=VALUE'. + + Currently, 'parttool' is only useful on DOS partition tables (also + known as Master Boot Record, or MBR). On these partition tables, + the following commands are available: + + 'boot' (boolean) + When enabled, this makes the selected partition be the active + (bootable) partition on its disk, clearing the active flag on + all other partitions. This command is limited to _primary_ + partitions. + + 'type' (value) + Change the type of an existing partition. The value must be a + number in the range 0-0xFF (prefix with '0x' to enter it in + hexadecimal). + + 'hidden' (boolean) + When enabled, this hides the selected partition by setting the + "hidden" bit in its partition type code; when disabled, + unhides the selected partition by clearing this bit. This is + useful only when booting DOS or Wwindows and multiple primary + FAT partitions exist in one disk. See also *note + DOS/Windows::. + + +File: grub.info, Node: password, Next: password_pbkdf2, Prev: parttool, Up: Command-line and menu entry commands + +16.3.54 password +---------------- + + -- Command: password user clear-password + Define a user named USER with password CLEAR-PASSWORD. *Note + Security::. + + +File: grub.info, Node: password_pbkdf2, Next: play, Prev: password, Up: Command-line and menu entry commands + +16.3.55 password_pbkdf2 +----------------------- + + -- Command: password_pbkdf2 user hashed-password + Define a user named USER with password hash HASHED-PASSWORD. Use + 'grub-mkpasswd-pbkdf2' (*note Invoking grub-mkpasswd-pbkdf2::) to + generate password hashes. *Note Security::. + + +File: grub.info, Node: play, Next: probe, Prev: password_pbkdf2, Up: Command-line and menu entry commands + +16.3.56 play +------------ + + -- Command: play file | tempo [pitch1 duration1] [pitch2 duration2] ... + Plays a tune + + If the argument is a file name (*note File name syntax::), play the + tune recorded in it. The file format is first the tempo as an + unsigned 32bit little-endian number, then pairs of unsigned 16bit + little-endian numbers for pitch and duration pairs. + + If the arguments are a series of numbers, play the inline tune. + + The tempo is the base for all note durations. 60 gives a 1-second + base, 120 gives a half-second base, etc. Pitches are Hz. Set + pitch to 0 to produce a rest. + + +File: grub.info, Node: probe, Next: pxe_unload, Prev: play, Up: Command-line and menu entry commands + +16.3.57 probe +------------- + + -- Command: probe ['--set' var] + '--driver'|'--partmap'|'--fs'|'--fs-uuid'|'--label' device + Retrieve device information. If option '--set' is given, assign + result to variable VAR, otherwise print information on the screen. + + +File: grub.info, Node: pxe_unload, Next: read, Prev: probe, Up: Command-line and menu entry commands + +16.3.58 pxe_unload +------------------ + + -- Command: pxe_unload + Unload the PXE environment (*note Network::). + + This command is only available on PC BIOS systems. + + +File: grub.info, Node: read, Next: reboot, Prev: pxe_unload, Up: Command-line and menu entry commands + +16.3.59 read +------------ + + -- Command: read [var] + Read a line of input from the user. If an environment variable VAR + is given, set that environment variable to the line of input that + was read, with no terminating newline. + + +File: grub.info, Node: reboot, Next: regexp, Prev: read, Up: Command-line and menu entry commands + +16.3.60 reboot +-------------- + + -- Command: reboot + Reboot the computer. + + +File: grub.info, Node: regexp, Next: rmmod, Prev: reboot, Up: Command-line and menu entry commands + +16.3.61 regexp +-------------- + + -- Command: regexp ['--set' [number:]var] regexp string + Test if regular expression REGEXP matches STRING. Supported + regular expressions are POSIX.2 Extended Regular Expressions. If + option '--set' is given, store NUMBERth matched subexpression in + variable VAR. Subexpressions are numbered in order of their + opening parentheses starting from '1'. NUMBER defaults to '1'. + + +File: grub.info, Node: rmmod, Next: save_env, Prev: regexp, Up: Command-line and menu entry commands + +16.3.62 rmmod +------------- + + -- Command: rmmod module + Remove a loaded MODULE. + + +File: grub.info, Node: save_env, Next: search, Prev: rmmod, Up: Command-line and menu entry commands + +16.3.63 save_env +---------------- + + -- Command: save_env ['--file' file] var ... + Save the named variables from the environment to the environment + block file. *Note Environment block::. + + The '--file' option overrides the default location of the + environment block. + + This command will operate successfully even when environment + variable 'check_signatures' is set to 'enforce' (*note + check_signatures::), since it writes to disk and does not alter the + behavior of GRUB based on any contents of disk that have been read. + It is possible to modify a digitally signed environment block file + from within GRUB using this command, such that its signature will + no longer be valid on subsequent boots. Care should be taken in + such advanced configurations to avoid rendering the system + unbootable. *Note Using digital signatures::, for more + information. + + +File: grub.info, Node: search, Next: sendkey, Prev: save_env, Up: Command-line and menu entry commands + +16.3.64 search +-------------- + + -- Command: search ['--file'|'--label'|'--fs-uuid'] ['--set' [var]] + ['--no-floppy'] name + Search devices by file ('-f', '--file'), filesystem label ('-l', + '--label'), or filesystem UUID ('-u', '--fs-uuid'). + + If the '--set' option is used, the first device found is set as the + value of environment variable VAR. The default variable is 'root'. + + The '--no-floppy' option prevents searching floppy devices, which + can be slow. + + The 'search.file', 'search.fs_label', and 'search.fs_uuid' commands + are aliases for 'search --file', 'search --label', and 'search + --fs-uuid' respectively. + + +File: grub.info, Node: sendkey, Next: set, Prev: search, Up: Command-line and menu entry commands + +16.3.65 sendkey +--------------- + + -- Command: sendkey + ['--num'|'--caps'|'--scroll'|'--insert'|'--pause'|'--left-shift'|'--right-shift'|'--sysrq'|'--numkey'|'--capskey'|'--scrollkey'|'--insertkey'|'--left-alt'|'--right-alt'|'--left-ctrl'|'--right-ctrl' + 'on'|'off']... ['no-led'] keystroke + Insert keystrokes into the keyboard buffer when booting. Sometimes + an operating system or chainloaded boot loader requires particular + keys to be pressed: for example, one might need to press a + particular key to enter "safe mode", or when chainloading another + boot loader one might send keystrokes to it to navigate its menu. + + You may provide up to 16 keystrokes (the length of the BIOS + keyboard buffer). Keystroke names may be upper-case or lower-case + letters, digits, or taken from the following table: + + Name Key + ------------------------------------------------------------------- + escape Escape + exclam ! + at @ + numbersign # + dollar $ + percent % + caret ^ + ampersand & + asterisk * + parenleft ( + parenright ) + minus - + underscore _ + equal = + plus + + backspace Backspace + tab Tab + bracketleft [ + braceleft { + bracketright ] + braceright } + enter Enter + control press and release Control + semicolon ; + colon : + quote ' + doublequote " + backquote ' + tilde ~ + shift press and release left Shift + backslash \ + bar | + comma , + less < + period . + greater > + slash / + question ? + rshift press and release right Shift + alt press and release Alt + space space bar + capslock Caps Lock + F1 F1 + F2 F2 + F3 F3 + F4 F4 + F5 F5 + F6 F6 + F7 F7 + F8 F8 + F9 F9 + F10 F10 + F11 F11 + F12 F12 + num1 1 (numeric keypad) + num2 2 (numeric keypad) + num3 3 (numeric keypad) + num4 4 (numeric keypad) + num5 5 (numeric keypad) + num6 6 (numeric keypad) + num7 7 (numeric keypad) + num8 8 (numeric keypad) + num9 9 (numeric keypad) + num0 0 (numeric keypad) + numperiod . (numeric keypad) + numend End (numeric keypad) + numdown Down (numeric keypad) + numpgdown Page Down (numeric keypad) + numleft Left (numeric keypad) + numcenter 5 with Num Lock inactive (numeric + keypad) + numright Right (numeric keypad) + numhome Home (numeric keypad) + numup Up (numeric keypad) + numpgup Page Up (numeric keypad) + numinsert Insert (numeric keypad) + numdelete Delete (numeric keypad) + numasterisk * (numeric keypad) + numminus - (numeric keypad) + numplus + (numeric keypad) + numslash / (numeric keypad) + numenter Enter (numeric keypad) + delete Delete + insert Insert + home Home + end End + pgdown Page Down + pgup Page Up + down Down + up Up + left Left + right Right + + As well as keystrokes, the 'sendkey' command takes various options + that affect the BIOS keyboard status flags. These options take an + 'on' or 'off' parameter, specifying that the corresponding status + flag be set or unset; omitting the option for a given status flag + will leave that flag at its initial state at boot. The '--num', + '--caps', '--scroll', and '--insert' options emulate setting the + corresponding mode, while the '--numkey', '--capskey', + '--scrollkey', and '--insertkey' options emulate pressing and + holding the corresponding key. The other status flag options are + self-explanatory. + + If the '--no-led' option is given, the status flag options will + have no effect on keyboard LEDs. + + If the 'sendkey' command is given multiple times, then only the + last invocation has any effect. + + Since 'sendkey' manipulates the BIOS keyboard buffer, it may cause + hangs, reboots, or other misbehaviour on some systems. If the + operating system or boot loader that runs after GRUB uses its own + keyboard driver rather than the BIOS keyboard functions, then + 'sendkey' will have no effect. + + This command is only available on PC BIOS systems. + + +File: grub.info, Node: set, Next: sha1sum, Prev: sendkey, Up: Command-line and menu entry commands + +16.3.66 set +----------- + + -- Command: set [envvar=value] + Set the environment variable ENVVAR to VALUE. If invoked with no + arguments, print all environment variables with their values. + + +File: grub.info, Node: sha1sum, Next: sha256sum, Prev: set, Up: Command-line and menu entry commands + +16.3.67 sha1sum +--------------- + + -- Command: sha1sum arg ... + Alias for 'hashsum --hash sha1 arg ...'. See command 'hashsum' + (*note hashsum::) for full description. + + +File: grub.info, Node: sha256sum, Next: sha512sum, Prev: sha1sum, Up: Command-line and menu entry commands + +16.3.68 sha256sum +----------------- + + -- Command: sha256sum arg ... + Alias for 'hashsum --hash sha256 arg ...'. See command 'hashsum' + (*note hashsum::) for full description. + + +File: grub.info, Node: sha512sum, Next: sleep, Prev: sha256sum, Up: Command-line and menu entry commands + +16.3.69 sha512sum +----------------- + + -- Command: sha512sum arg ... + Alias for 'hashsum --hash sha512 arg ...'. See command 'hashsum' + (*note hashsum::) for full description. + + +File: grub.info, Node: sleep, Next: source, Prev: sha512sum, Up: Command-line and menu entry commands + +16.3.70 sleep +------------- + + -- Command: sleep ['--verbose'] ['--interruptible'] count + Sleep for COUNT seconds. If option '--interruptible' is given, + allow to interrupt sleep. With '--verbose' show countdown of + remaining seconds. Exit code is set to 0 if timeout expired and to + 1 if timeout was interrupted by . + + +File: grub.info, Node: source, Next: test, Prev: sleep, Up: Command-line and menu entry commands + +16.3.71 source +-------------- + + -- Command: source file + Read FILE as a configuration file, as if its contents had been + incorporated directly into the sourcing file. Unlike 'configfile' + (*note configfile::), this executes the contents of FILE without + changing context: any environment variable changes made by the + commands in FILE will be preserved after 'source' returns, and the + menu will not be shown immediately. + + +File: grub.info, Node: test, Next: true, Prev: source, Up: Command-line and menu entry commands + +16.3.72 test +------------ + + -- Command: test expression + Evaluate EXPRESSION and return zero exit status if result is true, + non zero status otherwise. + + EXPRESSION is one of: + + STRING1 '==' STRING2 + the strings are equal + STRING1 '!=' STRING2 + the strings are not equal + STRING1 '<' STRING2 + STRING1 is lexicographically less than STRING2 + STRING1 '<=' STRING2 + STRING1 is lexicographically less or equal than STRING2 + STRING1 '>' STRING2 + STRING1 is lexicographically greater than STRING2 + STRING1 '>=' STRING2 + STRING1 is lexicographically greater or equal than STRING2 + INTEGER1 '-eq' INTEGER2 + INTEGER1 is equal to INTEGER2 + INTEGER1 '-ge' INTEGER2 + INTEGER1 is greater than or equal to INTEGER2 + INTEGER1 '-gt' INTEGER2 + INTEGER1 is greater than INTEGER2 + INTEGER1 '-le' INTEGER2 + INTEGER1 is less than or equal to INTEGER2 + INTEGER1 '-lt' INTEGER2 + INTEGER1 is less than INTEGER2 + INTEGER1 '-ne' INTEGER2 + INTEGER1 is not equal to INTEGER2 + PREFIXINTEGER1 '-pgt' PREFIXINTEGER2 + INTEGER1 is greater than INTEGER2 after stripping off common + non-numeric PREFIX. + PREFIXINTEGER1 '-plt' PREFIXINTEGER2 + INTEGER1 is less than INTEGER2 after stripping off common + non-numeric PREFIX. + FILE1 '-nt' FILE2 + FILE1 is newer than FILE2 (modification time). Optionally + numeric BIAS may be directly appended to '-nt' in which case + it is added to the first file modification time. + FILE1 '-ot' FILE2 + FILE1 is older than FILE2 (modification time). Optionally + numeric BIAS may be directly appended to '-ot' in which case + it is added to the first file modification time. + '-d' FILE + FILE exists and is a directory + '-e' FILE + FILE exists + '-f' FILE + FILE exists and is not a directory + '-s' FILE + FILE exists and has a size greater than zero + '-n' STRING + the length of STRING is nonzero + STRING + STRING is equivalent to '-n STRING' + '-z' STRING + the length of STRING is zero + '(' EXPRESSION ')' + EXPRESSION is true + '!' EXPRESSION + EXPRESSION is false + EXPRESSION1 '-a' EXPRESSION2 + both EXPRESSION1 and EXPRESSION2 are true + EXPRESSION1 EXPRESSION2 + both EXPRESSION1 and EXPRESSION2 are true. This syntax is not + POSIX-compliant and is not recommended. + EXPRESSION1 '-o' EXPRESSION2 + either EXPRESSION1 or EXPRESSION2 is true + + +File: grub.info, Node: true, Next: trust, Prev: test, Up: Command-line and menu entry commands + +16.3.73 true +------------ + + -- Command: true + Do nothing, successfully. This is mainly useful in control + constructs such as 'if' and 'while' (*note Shell-like scripting::). + + +File: grub.info, Node: trust, Next: unset, Prev: true, Up: Command-line and menu entry commands + +16.3.74 trust +------------- + + -- Command: trust ['--skip-sig'] pubkey_file + Read public key from PUBKEY_FILE and add it to GRUB's internal list + of trusted public keys. These keys are used to validate digital + signatures when environment variable 'check_signatures' is set to + 'enforce'. Note that if 'check_signatures' is set to 'enforce' + when 'trust' executes, then PUBKEY_FILE must itself be properly + signed. The '--skip-sig' option can be used to disable + signature-checking when reading PUBKEY_FILE itself. It is expected + that '--skip-sig' is useful for testing and manual booting. *Note + Using digital signatures::, for more information. + + +File: grub.info, Node: unset, Next: uppermem, Prev: trust, Up: Command-line and menu entry commands + +16.3.75 unset +------------- + + -- Command: unset envvar + Unset the environment variable ENVVAR. + + +File: grub.info, Node: uppermem, Next: verify_detached, Prev: unset, Up: Command-line and menu entry commands + +16.3.76 uppermem +---------------- + +This command is not yet implemented for GRUB 2, although it is planned. + + +File: grub.info, Node: verify_detached, Next: videoinfo, Prev: uppermem, Up: Command-line and menu entry commands + +16.3.77 verify_detached +----------------------- + + -- Command: verify_detached ['--skip-sig'] file signature_file + [pubkey_file] + Verifies a GPG-style detached signature, where the signed file is + FILE, and the signature itself is in file SIGNATURE_FILE. + Optionally, a specific public key to use can be specified using + PUBKEY_FILE. When environment variable 'check_signatures' is set + to 'enforce', then PUBKEY_FILE must itself be properly signed by an + already-trusted key. An unsigned PUBKEY_FILE can be loaded by + specifying '--skip-sig'. If PUBKEY_FILE is omitted, then public + keys from GRUB's trusted keys (*note list_trusted::, *note trust::, + and *note distrust::) are tried. + + Exit code '$?' is set to 0 if the signature validates successfully. + If validation fails, it is set to a non-zero value. *Note Using + digital signatures::, for more information. + + +File: grub.info, Node: videoinfo, Next: xen_hypervisor, Prev: verify_detached, Up: Command-line and menu entry commands + +16.3.78 videoinfo +----------------- + + -- Command: videoinfo [[WxH]xD] + List available video modes. If resolution is given, show only + matching modes. + + +File: grub.info, Node: xen_hypervisor, Next: xen_linux, Prev: videoinfo, Up: Command-line and menu entry commands + +16.3.79 xen_hypervisor +---------------------- + + -- Command: xen_hypervisor file [arguments] ... + Load a Xen hypervisor binary from FILE. The rest of the line is + passed verbatim as the "kernel command-line". Any other binaries + must be reloaded after using this command. + + +File: grub.info, Node: xen_linux, Next: xen_initrd, Prev: xen_hypervisor, Up: Command-line and menu entry commands + +16.3.80 xen_linux +----------------- + + -- Command: xen_linux file [arguments] + Load a dom0 kernel image for xen hypervisor at the booting process + of xen. The rest of the line is passed verbatim as the module + command line. + + +File: grub.info, Node: xen_initrd, Next: xen_xsm, Prev: xen_linux, Up: Command-line and menu entry commands + +16.3.81 xen_initrd +------------------ + + -- Command: xen_initrd file + Load a initrd image for dom0 kernel at the booting process of xen. + + +File: grub.info, Node: xen_xsm, Prev: xen_initrd, Up: Command-line and menu entry commands + +16.3.82 xen_xsm +--------------- + + -- Command: xen_xsm file + Load a xen security module for xen hypervisor at the booting + process of xen. See for more + detail. + + +File: grub.info, Node: Networking commands, Prev: Command-line and menu entry commands, Up: Commands + +16.4 The list of networking commands +==================================== + +* Menu: + +* net_add_addr:: Add a network address +* net_add_dns:: Add a DNS server +* net_add_route:: Add routing entry +* net_bootp:: Perform a bootp autoconfiguration +* net_del_addr:: Remove IP address from interface +* net_del_dns:: Remove a DNS server +* net_del_route:: Remove a route entry +* net_get_dhcp_option:: Retrieve DHCP options +* net_ipv6_autoconf:: Perform IPv6 autoconfiguration +* net_ls_addr:: List interfaces +* net_ls_cards:: List network cards +* net_ls_dns:: List DNS servers +* net_ls_routes:: List routing entries +* net_nslookup:: Perform a DNS lookup + + +File: grub.info, Node: net_add_addr, Next: net_add_dns, Up: Networking commands + +16.4.1 net_add_addr +------------------- + + -- Command: net_add_addr INTERFACE CARD ADDRESS + Configure additional network INTERFACE with ADDRESS on a network + CARD. ADDRESS can be either IP in dotted decimal notation, or + symbolic name which is resolved using DNS lookup. If successful, + this command also adds local link routing entry to the default + subnet of ADDRESS with name INTERFACE':local' via INTERFACE. + + +File: grub.info, Node: net_add_dns, Next: net_add_route, Prev: net_add_addr, Up: Networking commands + +16.4.2 net_add_dns +------------------ + + -- Command: net_add_dns SERVER + Resolve SERVER IP address and add to the list of DNS servers used + during name lookup. + + +File: grub.info, Node: net_add_route, Next: net_bootp, Prev: net_add_dns, Up: Networking commands + +16.4.3 net_add_route +-------------------- + + -- Command: net_add_route SHORTNAME IP[/PREFIX] [INTERFACE | 'gw' + GATEWAY] + Add route to network with address IP as modified by PREFIX via + either local INTERFACE or GATEWAY. PREFIX is optional and defaults + to 32 for IPv4 address and 128 for IPv6 address. Route is + identified by SHORTNAME which can be used to remove it (*note + net_del_route::). + + +File: grub.info, Node: net_bootp, Next: net_del_addr, Prev: net_add_route, Up: Networking commands + +16.4.4 net_bootp +---------------- + + -- Command: net_bootp [CARD] + Perform configuration of CARD using DHCP protocol. If no card name + is specified, try to configure all existing cards. If + configuration was successful, interface with name CARD':dhcp' and + configured address is added to CARD. Additionally the following + DHCP options are recognized and processed: + + '1 (Subnet Mask)' + Used to calculate network local routing entry for interface + CARD':dhcp'. + '3 (Router)' + Adds default route entry with the name CARD':dhcp:default' via + gateway from DHCP option. Note that only option with single + route is accepted. + '6 (Domain Name Server)' + Adds all servers from option value to the list of servers used + during name resolution. + '12 (Host Name)' + Sets environment variable 'net_''_dhcp_hostname' (*note + net__hostname::) to the value of option. + '15 (Domain Name)' + Sets environment variable 'net_''_dhcp_domain' (*note + net__domain::) to the value of option. + '17 (Root Path)' + Sets environment variable 'net_''_dhcp_rootpath' (*note + net__rootpath::) to the value of option. + '18 (Extensions Path)' + Sets environment variable 'net_''_dhcp_extensionspath' + (*note net__extensionspath::) to the value of + option. + + +File: grub.info, Node: net_del_addr, Next: net_del_dns, Prev: net_bootp, Up: Networking commands + +16.4.5 net_del_addr +------------------- + + -- Command: net_del_addr INTERFACE + Remove configured INTERFACE with associated address. + + +File: grub.info, Node: net_del_dns, Next: net_del_route, Prev: net_del_addr, Up: Networking commands + +16.4.6 net_del_dns +------------------ + + -- Command: net_del_dns ADDRESS + Remove ADDRESS from list of servers used during name lookup. + + +File: grub.info, Node: net_del_route, Next: net_get_dhcp_option, Prev: net_del_dns, Up: Networking commands + +16.4.7 net_del_route +-------------------- + + -- Command: net_del_route SHORTNAME + Remove route entry identified by SHORTNAME. + + +File: grub.info, Node: net_get_dhcp_option, Next: net_ipv6_autoconf, Prev: net_del_route, Up: Networking commands + +16.4.8 net_get_dhcp_option +-------------------------- + + -- Command: net_get_dhcp_option VAR INTERFACE NUMBER TYPE + Request DHCP option NUMBER of TYPE via INTERFACE. TYPE can be one + of 'string', 'number' or 'hex'. If option is found, assign its + value to variable VAR. Values of types 'number' and 'hex' are + converted to string representation. + + +File: grub.info, Node: net_ipv6_autoconf, Next: net_ls_addr, Prev: net_get_dhcp_option, Up: Networking commands + +16.4.9 net_ipv6_autoconf +------------------------ + + -- Command: net_ipv6_autoconf [CARD] + Perform IPv6 autoconfiguration by adding to the CARD interface with + name CARD':link' and link local MAC-based address. If no card is + specified, perform autoconfiguration for all existing cards. + + +File: grub.info, Node: net_ls_addr, Next: net_ls_cards, Prev: net_ipv6_autoconf, Up: Networking commands + +16.4.10 net_ls_addr +------------------- + + -- Command: net_ls_addr + List all configured interfaces with their MAC and IP addresses. + + +File: grub.info, Node: net_ls_cards, Next: net_ls_dns, Prev: net_ls_addr, Up: Networking commands + +16.4.11 net_ls_cards +-------------------- + + -- Command: net_ls_cards + List all detected network cards with their MAC address. + + +File: grub.info, Node: net_ls_dns, Next: net_ls_routes, Prev: net_ls_cards, Up: Networking commands + +16.4.12 net_ls_dns +------------------ + + -- Command: net_ls_dns + List addresses of DNS servers used during name lookup. + + +File: grub.info, Node: net_ls_routes, Next: net_nslookup, Prev: net_ls_dns, Up: Networking commands + +16.4.13 net_ls_routes +--------------------- + + -- Command: net_ls_routes + List routing entries. + + +File: grub.info, Node: net_nslookup, Prev: net_ls_routes, Up: Networking commands + +16.4.14 net_nslookup +-------------------- + + -- Command: net_nslookup NAME [SERVER] + Resolve address of NAME using DNS server SERVER. If no server is + given, use default list of servers. + + +File: grub.info, Node: Internationalisation, Next: Security, Prev: Commands, Up: Top + +17 Internationalisation +*********************** + +17.1 Charset +============ + +GRUB uses UTF-8 internally other than in rendering where some +GRUB-specific appropriate representation is used. All text files +(including config) are assumed to be encoded in UTF-8. + +17.2 Filesystems +================ + +NTFS, JFS, UDF, HFS+, exFAT, long filenames in FAT, Joliet part of +ISO9660 are treated as UTF-16 as per specification. AFS and BFS are +read as UTF-8, again according to specification. BtrFS, cpio, tar, +squash4, minix, minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4, +FAT (short names), RockRidge part of ISO9660, nilfs2, UFS1, UFS2 and ZFS +are assumed to be UTF-8. This might be false on systems configured with +legacy charset but as long as the charset used is superset of ASCII you +should be able to access ASCII-named files. And it's recommended to +configure your system to use UTF-8 to access the filesystem, convmv may +help with migration. ISO9660 (plain) filenames are specified as being +ASCII or being described with unspecified escape sequences. GRUB +assumes that the ISO9660 names are UTF-8 (since any ASCII is valid +UTF-8). There are some old CD-ROMs which use CP437 in non-compliant +way. You're still able to access files with names containing only ASCII +characters on such filesystems though. You're also able to access any +file if the filesystem contains valid Joliet (UTF-16) or RockRidge +(UTF-8). AFFS, SFS and HFS never use unicode and GRUB assumes them to +be in Latin1, Latin1 and MacRoman respectively. GRUB handles filesystem +case-insensitivity however no attempt is performed at case conversion of +international characters so e.g. a file named lowercase greek alpha is +treated as different from the one named as uppercase alpha. The +filesystems in questions are NTFS (except POSIX namespace), HFS+ +(configurable at mkfs time, default insensitive), SFS (configurable at +mkfs time, default insensitive), JFS (configurable at mkfs time, default +sensitive), HFS, AFFS, FAT, exFAT and ZFS (configurable on per-subvolume +basis by property "casesensitivity", default sensitive). On ZFS +subvolumes marked as case insensitive files containing lowercase +international characters are inaccessible. Also like all supported +filesystems except HFS+ and ZFS (configurable on per-subvolume basis by +property "normalization", default none) GRUB makes no attempt at check +of canonical equivalence so a file name u-diaresis is treated as +distinct from u+combining diaresis. This however means that in order to +access file on HFS+ its name must be specified in normalisation form D. +On normalized ZFS subvolumes filenames out of normalisation are +inaccessible. + +17.3 Output terminal +==================== + +Firmware output console "console" on ARC and IEEE1275 are limited to +ASCII. + + BIOS firmware console and VGA text are limited to ASCII and some +pseudographics. + + None of above mentioned is appropriate for displaying international +and any unsupported character is replaced with question mark except +pseudographics which we attempt to approximate with ASCII. + + EFI console on the other hand nominally supports UTF-16 but actual +language coverage depends on firmware and may be very limited. + + The encoding used on serial can be chosen with 'terminfo' as either +ASCII, UTF-8 or "visual UTF-8". Last one is against the specification +but results in correct rendering of right-to-left on some readers which +don't have own bidi implementation. + + On emu GRUB checks if charset is UTF-8 and uses it if so and uses +ASCII otherwise. + + When using gfxterm or gfxmenu GRUB itself is responsible for +rendering the text. In this case GRUB is limited by loaded fonts. If +fonts contain all required characters then bidirectional text, cursive +variants and combining marks other than enclosing, half (e.g. left half +tilde or combining overline) and double ones. Ligatures aren't +supported though. This should cover European, Middle Eastern (if you +don't mind lack of lam-alif ligature in Arabic) and East Asian scripts. +Notable unsupported scripts are Brahmic family and derived as well as +Mongolian, Tifinagh, Korean Jamo (precomposed characters have no +problem) and tonal writing (2e5-2e9). GRUB also ignores deprecated (as +specified in Unicode) characters (e.g. tags). GRUB also doesn't handle +so called "annotation characters" If you can complete either of two +lists or, better, propose a patch to improve rendering, please contact +developer team. + +17.4 Input terminal +=================== + +Firmware console on BIOS, IEEE1275 and ARC doesn't allow you to enter +non-ASCII characters. EFI specification allows for such but author is +unaware of any actual implementations. Serial input is currently +limited for latin1 (unlikely to change). Own keyboard implementations +(at_keyboard and usb_keyboard) supports any key but work on +one-char-per-keystroke. So no dead keys or advanced input method. Also +there is no keymap change hotkey. In practice it makes difficult to +enter any text using non-Latin alphabet. Moreover all current input +consumers are limited to ASCII. + +17.5 Gettext +============ + +GRUB supports being translated. For this you need to have language *.mo +files in $prefix/locale, load gettext module and set "lang" variable. + +17.6 Regexp +=========== + +Regexps work on unicode characters, however no attempt at checking +cannonical equivalence has been made. Moreover the classes like +[:alpha:] match only ASCII subset. + +17.7 Other +========== + +Currently GRUB always uses YEAR-MONTH-DAY HOUR:MINUTE:SECOND [WEEKDAY] +24-hour datetime format but weekdays are translated. GRUB always uses +the decimal number format with [0-9] as digits and . as descimal +separator and no group separator. IEEE1275 aliases are matched +case-insensitively except non-ASCII which is matched as binary. Similar +behaviour is for matching OSBundleRequired. Since IEEE1275 aliases and +OSBundleRequired don't contain any non-ASCII it should never be a +problem in practice. Case-sensitive identifiers are matched as raw +strings, no canonical equivalence check is performed. Case-insenstive +identifiers are matched as RAW but additionally [a-z] is equivalent to +[A-Z]. GRUB-defined identifiers use only ASCII and so should +user-defined ones. Identifiers containing non-ASCII may work but aren't +supported. Only the ASCII space characters (space U+0020, tab U+000b, +CR U+000d and LF U+000a) are recognised. Other unicode space characters +aren't a valid field separator. 'test' (*note test::) tests <, >, <=, +>=, -pgt and -plt compare the strings in the lexicographical order of +unicode codepoints, replicating the behaviour of test from coreutils. +environment variables and commands are listed in the same order. + + +File: grub.info, Node: Security, Next: Platform limitations, Prev: Internationalisation, Up: Top + +18 Security +*********** + +* Menu: + +* Authentication and authorisation:: Users and access control +* Using digital signatures:: Booting digitally signed code + + +File: grub.info, Node: Authentication and authorisation, Next: Using digital signatures, Up: Security + +18.1 Authentication and authorisation in GRUB +============================================= + +By default, the boot loader interface is accessible to anyone with +physical access to the console: anyone can select and edit any menu +entry, and anyone can get direct access to a GRUB shell prompt. For +most systems, this is reasonable since anyone with direct physical +access has a variety of other ways to gain full access, and requiring +authentication at the boot loader level would only serve to make it +difficult to recover broken systems. + + However, in some environments, such as kiosks, it may be appropriate +to lock down the boot loader to require authentication before performing +certain operations. + + The 'password' (*note password::) and 'password_pbkdf2' (*note +password_pbkdf2::) commands can be used to define users, each of which +has an associated password. 'password' sets the password in plain text, +requiring 'grub.cfg' to be secure; 'password_pbkdf2' sets the password +hashed using the Password-Based Key Derivation Function (RFC 2898), +requiring the use of 'grub-mkpasswd-pbkdf2' (*note Invoking +grub-mkpasswd-pbkdf2::) to generate password hashes. + + In order to enable authentication support, the 'superusers' +environment variable must be set to a list of usernames, separated by +any of spaces, commas, semicolons, pipes, or ampersands. Superusers are +permitted to use the GRUB command line, edit menu entries, and execute +any menu entry. If 'superusers' is set, then use of the command line +and editing of menu entries are automatically restricted to superusers. +Setting 'superusers' to empty string effectively disables both access to +CLI and editing of menu entries. + + Other users may be allowed to execute specific menu entries by giving +a list of usernames (as above) using the '--users' option to the +'menuentry' command (*note menuentry::). If the '--unrestricted' option +is used for a menu entry, then that entry is unrestricted. If the +'--users' option is not used for a menu entry, then that only superusers +are able to use it. + + Putting this together, a typical 'grub.cfg' fragment might look like +this: + + set superusers="root" + password_pbkdf2 root grub.pbkdf2.sha512.10000.biglongstring + password user1 insecure + + menuentry "May be run by any user" --unrestricted { + set root=(hd0,1) + linux /vmlinuz + } + + menuentry "Superusers only" --users "" { + set root=(hd0,1) + linux /vmlinuz single + } + + menuentry "May be run by user1 or a superuser" --users user1 { + set root=(hd0,2) + chainloader +1 + } + + The 'grub-mkconfig' program does not yet have built-in support for +generating configuration files with authentication. You can use +'/etc/grub.d/40_custom' to add simple superuser authentication, by +adding 'set superusers=' and 'password' or 'password_pbkdf2' commands. + + +File: grub.info, Node: Using digital signatures, Prev: Authentication and authorisation, Up: Security + +18.2 Using digital signatures in GRUB +===================================== + +GRUB's 'core.img' can optionally provide enforcement that all files +subsequently read from disk are covered by a valid digital signature. +This document does *not* cover how to ensure that your platform's +firmware (e.g., Coreboot) validates 'core.img'. + + If environment variable 'check_signatures' (*note check_signatures::) +is set to 'enforce', then every attempt by the GRUB 'core.img' to load +another file 'foo' implicitly invokes 'verify_detached foo foo.sig' +(*note verify_detached::). 'foo.sig' must contain a valid digital +signature over the contents of 'foo', which can be verified with a +public key currently trusted by GRUB (*note list_trusted::, *note +trust::, and *note distrust::). If validation fails, then file 'foo' +cannot be opened. This failure may halt or otherwise impact the boot +process. + + GRUB uses GPG-style detached signatures (meaning that a file +'foo.sig' will be produced when file 'foo' is signed), and currently +supports the DSA and RSA signing algorithms. A signing key can be +generated as follows: + + gpg --gen-key + + An individual file can be signed as follows: + + gpg --detach-sign /path/to/file + + For successful validation of all of GRUB's subcomponents and the +loaded OS kernel, they must all be signed. One way to accomplish this +is the following (after having already produced the desired 'grub.cfg' +file, e.g., by running 'grub-mkconfig' (*note Invoking grub-mkconfig::): + + # Edit /dev/shm/passphrase.txt to contain your signing key's passphrase + for i in `find /boot -name "*.cfg" -or -name "*.lst" -or \ + -name "*.mod" -or -name "vmlinuz*" -or -name "initrd*" -or \ + -name "grubenv"`; + do + gpg --batch --detach-sign --passphrase-fd 0 $i < \ + /dev/shm/passphrase.txt + done + shred /dev/shm/passphrase.txt + + See also: *note check_signatures::, *note verify_detached::, *note +trust::, *note list_trusted::, *note distrust::, *note load_env::, *note +save_env::. + + Note that internally signature enforcement is controlled by setting +the environment variable 'check_signatures' equal to 'enforce'. Passing +one or more '--pubkey' options to 'grub-mkimage' implicitly defines +'check_signatures' equal to 'enforce' in 'core.img' prior to processing +any configuration files. + + Note that signature checking does *not* prevent an attacker with +(serial, physical, ...) console access from dropping manually to the +GRUB console and executing: + + set check_signatures=no + + To prevent this, password-protection (*note Authentication and +authorisation::) is essential. Note that even with GRUB password +protection, GRUB itself cannot prevent someone with physical access to +the machine from altering that machine's firmware (e.g., Coreboot or +BIOS) configuration to cause the machine to boot from a different +(attacker-controlled) device. GRUB is at best only one link in a secure +boot chain. + + +File: grub.info, Node: Platform limitations, Next: Platform-specific operations, Prev: Security, Up: Top + +19 Platform limitations +*********************** + +GRUB2 is designed to be portable and is actually ported across +platforms. We try to keep all platforms at the level. Unfortunately +some platforms are better supported than others. This is detailed in +current and 2 following sections. + + ARC platform is unable to change datetime (firmware doesn't seem to +provide a function for it). EMU has similar limitation. + + On EMU platform no serial port is available. + + Console charset refers only to firmware-assisted console. gfxterm is +always Unicode (see Internationalisation section for its limitations). +Serial is configurable to UTF-8 or ASCII (see Internationalisation). In +case of qemu and coreboot ports the refered console is vga_text. +Loongson always uses gfxterm. + + Most limited one is ASCII. CP437 provides additionally +pseudographics. GRUB2 doesn't use any language characters from CP437 as +often CP437 is replaced by national encoding compatible only in +pseudographics. Unicode is the most versatile charset which supports +many languages. However the actual console may be much more limited +depending on firmware + + On BIOS network is supported only if the image is loaded through +network. On sparc64 GRUB is unable to determine which server it was +booted from. + + Direct ATA/AHCI support allows to circumvent various firmware +limitations but isn't needed for normal operation except on baremetal +ports. + + AT keyboard support allows keyboard layout remapping and support for +keys not available through firmware. It isn't needed for normal +operation except baremetal ports. + + Speaker allows morse and spkmodem communication. + + USB support provides benefits similar to ATA (for USB disks) or AT +(for USB keyboards). In addition it allows USBserial. + + Chainloading refers to the ability to load another bootloader through +the same protocol + + Hints allow faster disk discovery by already knowing in advance which +is the disk in question. On some platforms hints are correct unless you +move the disk between boots. On other platforms it's just an educated +guess. Note that hint failure results in just reduced performance, not +a failure + + BadRAM is the ability to mark some of the RAM as "bad". Note: due to +protocol limitations mips-loongson (with Linux protocol) and +mips-qemu_mips can use only memory up to first hole. + + Bootlocation is ability of GRUB to automatically detect where it +boots from. "disk" means the detection is limited to detecting the disk +with partition being discovered on install time. "partition" means that +disk and partiton can be automatically discovered. "file" means that +boot image file name as well as disk and partition can be discovered. +For consistency default install ignores partition and relies solely on +disk detection. If no bootlocation discovery is available or boot and +grub-root disks are different, UUID is used instead. On ARC if no +device to install to is specified, UUID is used instead as well. + + BIOS Coreboot Multiboot Qemu +video yes yes yes yes +console CP437 CP437 CP437 CP437 +charset +network yes (*) no no no +ATA/AHCI yes yes yes yes +AT keyboard yes yes yes yes +Speaker yes yes yes yes +USB yes yes yes yes +chainloader local yes yes no +cpuid partial partial partial partial +hints guess guess guess guess +PCI yes yes yes yes +badram yes yes yes yes +compression always pointless no no +exit yes no no no +bootlocation disk no no no + + ia32 EFI amd64 EFI ia32 Itanium + IEEE1275 +video yes yes no no +console Unicode Unicode ASCII Unicode +charset +network yes yes yes yes +ATA/AHCI yes yes yes no +AT keyboard yes yes yes no +Speaker yes yes yes no +USB yes yes yes no +chainloader local local no local +cpuid partial partial partial no +hints guess guess good guess +PCI yes yes yes no +badram yes yes no yes +compression no no no no +exit yes yes yes yes +bootlocation file file file, file + ignored + + Loongson sparc64 Powerpc ARC +video yes no yes no +console N/A ASCII ASCII ASCII +charset +network no yes (*) yes no +ATA/AHCI yes no no no +AT keyboard yes no no no +Speaker no no no no +USB yes no no no +chainloader yes no no no +cpuid no no no no +hints good good good no +PCI yes no no no +badram yes (*) no no no +compression configurable no no configurable +exit no yes yes yes +bootlocation no partition file file (*) + + MIPS qemu emu xen +video no yes no +console CP437 Unicode (*) ASCII +charset +network no yes no +ATA/AHCI yes no no +AT keyboard yes no no +Speaker no no no +USB N/A yes no +chainloader yes no yes +cpuid no no yes +hints guess no no +PCI no no no +badram yes (*) no no +compression configurable no no +exit no yes no +bootlocation no file no + + +File: grub.info, Node: Platform-specific operations, Next: Supported kernels, Prev: Platform limitations, Up: Top + +20 Outline +********** + +Some platforms have features which allows to implement some commands +useless or not implementable on others. + + Quick summary: + + Information retrieval: + + * mipsel-loongson: lsspd + * mips-arc: lsdev + * efi: lsefisystab, lssal, lsefimmap, lsefi + * i386-pc: lsapm + * i386-coreboot: lscoreboot, coreboot_boottime, cbmemc + * acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): + lsacpi + + Workarounds for platform-specific issues: + * i386-efi/x86_64-efi: loadbios, fakebios, fix_video + * acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): acpi + (override ACPI tables) + * i386-pc: drivemap + * i386-pc: sendkey + + Advanced operations for power users: + * x86: iorw (direct access to I/O ports) + + Miscelaneous: + * cmos (x86-*, ieee1275, mips-qemu_mips, mips-loongson): cmostest + (used on some laptops to check for special power-on key), cmosclean + * i386-pc: play + + +File: grub.info, Node: Supported kernels, Next: Troubleshooting, Prev: Platform-specific operations, Up: Top + +21 Supported boot targets +************************* + +X86 support is summarised in the following table. "Yes" means that the +kernel works on the given platform, "crashes" means an early kernel +crash which we hope will be fixed by concerned kernel developers. "no" +means GRUB doesn't load the given kernel on a given platform. +"headless" means that the kernel works but lacks console drivers (you +can still use serial or network console). In case of "no" and "crashes" +the reason is given in footnote. + BIOS Coreboot +BIOS chainloading yes no (1) +NTLDR yes no (1) +Plan9 yes no (1) +Freedos yes no (1) +FreeBSD bootloader yes crashes (1) +32-bit kFreeBSD yes crashes (5) +64-bit kFreeBSD yes crashes (5) +32-bit kNetBSD yes crashes (1) +64-bit kNetBSD yes crashes +32-bit kOpenBSD yes yes +64-bit kOpenBSD yes yes +Multiboot yes yes +Multiboot2 yes yes +32-bit Linux (legacy protocol) yes no (1) +64-bit Linux (legacy protocol) yes no (1) +32-bit Linux (modern protocol) yes yes +64-bit Linux (modern protocol) yes yes +32-bit XNU yes ? +64-bit XNU yes ? +32-bit EFI chainloader no (2) no (2) +64-bit EFI chainloader no (2) no (2) +Appleloader no (2) no (2) + + Multiboot Qemu +BIOS chainloading no (1) no (1) +NTLDR no (1) no (1) +Plan9 no (1) no (1) +FreeDOS no (1) no (1) +FreeBSD bootloader crashes (1) crashes (1) +32-bit kFreeBSD crashes (5) crashes (5) +64-bit kFreeBSD crashes (5) crashes (5) +32-bit kNetBSD crashes (1) crashes (1) +64-bit kNetBSD yes yes +32-bit kOpenBSD yes yes +64-bit kOpenBSD yes yes +Multiboot yes yes +Multiboot2 yes yes +32-bit Linux (legacy protocol) no (1) no (1) +64-bit Linux (legacy protocol) no (1) no (1) +32-bit Linux (modern protocol) yes yes +64-bit Linux (modern protocol) yes yes +32-bit XNU ? ? +64-bit XNU ? ? +32-bit EFI chainloader no (2) no (2) +64-bit EFI chainloader no (2) no (2) +Appleloader no (2) no (2) + + ia32 EFI amd64 EFI +BIOS chainloading no (1) no (1) +NTLDR no (1) no (1) +Plan9 no (1) no (1) +FreeDOS no (1) no (1) +FreeBSD bootloader crashes (1) crashes (1) +32-bit kFreeBSD headless headless +64-bit kFreeBSD headless headless +32-bit kNetBSD crashes (1) crashes (1) +64-bit kNetBSD yes yes +32-bit kOpenBSD headless headless +64-bit kOpenBSD headless headless +Multiboot yes yes +Multiboot2 yes yes +32-bit Linux (legacy protocol) no (1) no (1) +64-bit Linux (legacy protocol) no (1) no (1) +32-bit Linux (modern protocol) yes yes +64-bit Linux (modern protocol) yes yes +32-bit XNU yes yes +64-bit XNU yes (4) yes +32-bit EFI chainloader yes no (3) +64-bit EFI chainloader no (3) yes +Appleloader yes yes + + ia32 IEEE1275 +BIOS chainloading no (1) +NTLDR no (1) +Plan9 no (1) +FreeDOS no (1) +FreeBSD bootloader crashes (1) +32-bit kFreeBSD crashes (5) +64-bit kFreeBSD crashes (5) +32-bit kNetBSD crashes (1) +64-bit kNetBSD ? +32-bit kOpenBSD ? +64-bit kOpenBSD ? +Multiboot ? +Multiboot2 ? +32-bit Linux (legacy protocol) no (1) +64-bit Linux (legacy protocol) no (1) +32-bit Linux (modern protocol) ? +64-bit Linux (modern protocol) ? +32-bit XNU ? +64-bit XNU ? +32-bit EFI chainloader no (2) +64-bit EFI chainloader no (2) +Appleloader no (2) + + 1. Requires BIOS + 2. EFI only + 3. 32-bit and 64-bit EFI have different structures and work in + different CPU modes so it's not possible to chainload 32-bit + bootloader on 64-bit platform and vice-versa + 4. Some modules may need to be disabled + 5. Requires ACPI + + PowerPC, IA64 and Sparc64 ports support only Linux. MIPS port +supports Linux and multiboot2. + +21.1 Boot tests +=============== + +As you have seen in previous chapter the support matrix is pretty big +and some of the configurations are only rarely used. To ensure the +quality bootchecks are available for all x86 targets except EFI +chainloader, Appleloader and XNU. All x86 platforms have bootcheck +facility except ieee1275. Multiboot, multiboot2, BIOS chainloader, +ntldr and freebsd-bootloader boot targets are tested only with a fake +kernel images. Only Linux is tested among the payloads using Linux +protocols. + + Following variables must be defined: + +GRUB_PAYLOADS_DIR directory containing the required kernels +GRUB_CBFSTOOL cbfstool from Coreboot package (for coreboot + platform only) +GRUB_COREBOOT_ROM empty Coreboot ROM +GRUB_QEMU_OPTS additional options to be supplied to QEMU + + Required files are: + +kfreebsd_env.i386 32-bit kFreeBSD device hints +kfreebsd.i386 32-bit FreeBSD kernel image +kfreebsd.x86_64, same from 64-bit kFreeBSD +kfreebsd_env.x86_64 +knetbsd.i386 32-bit NetBSD kernel image +knetbsd.miniroot.i386 32-bit kNetBSD miniroot.kmod. +knetbsd.x86_64, same from 64-bit kNetBSD +knetbsd.miniroot.x86_64 +kopenbsd.i386 32-bit OpenBSD kernel bsd.rd image +kopenbsd.x86_64 same from 64-bit kOpenBSD +linux.i386 32-bit Linux +linux.x86_64 64-bit Linux + + +File: grub.info, Node: Troubleshooting, Next: Invoking grub-install, Prev: Supported kernels, Up: Top + +22 Error messages produced by GRUB +********************************** + +* Menu: + +* GRUB only offers a rescue shell:: + + +File: grub.info, Node: GRUB only offers a rescue shell, Up: Troubleshooting + +22.1 GRUB only offers a rescue shell +==================================== + +GRUB's normal start-up procedure involves setting the 'prefix' +environment variable to a value set in the core image by 'grub-install', +setting the 'root' variable to match, loading the 'normal' module from +the prefix, and running the 'normal' command (*note normal::). This +command is responsible for reading '/boot/grub/grub.cfg', running the +menu, and doing all the useful things GRUB is supposed to do. + + If, instead, you only get a rescue shell, this usually means that +GRUB failed to load the 'normal' module for some reason. It may be +possible to work around this temporarily: for instance, if the reason +for the failure is that 'prefix' is wrong (perhaps it refers to the +wrong device, or perhaps the path to '/boot/grub' was not correctly made +relative to the device), then you can correct this and enter normal mode +manually: + + # Inspect the current prefix (and other preset variables): + set + # Find out which devices are available: + ls + # Set to the correct value, which might be something like this: + set prefix=(hd0,1)/grub + set root=(hd0,1) + insmod normal + normal + + However, any problem that leaves you in the rescue shell probably +means that GRUB was not correctly installed. It may be more useful to +try to reinstall it properly using 'grub-install DEVICE' (*note Invoking +grub-install::). When doing this, there are a few things to remember: + + * Drive ordering in your operating system may not be the same as the + boot drive ordering used by your firmware. Do not assume that your + first hard drive (e.g. '/dev/sda') is the one that your firmware + will boot from. 'device.map' (*note Device map::) can be used to + override this, but it is usually better to use UUIDs or file system + labels and avoid depending on drive ordering entirely. + + * At least on BIOS systems, if you tell 'grub-install' to install + GRUB to a partition but GRUB has already been installed in the + master boot record, then the GRUB installation in the partition + will be ignored. + + * If possible, it is generally best to avoid installing GRUB to a + partition (unless it is a special partition for the use of GRUB + alone, such as the BIOS Boot Partition used on GPT). Doing this + means that GRUB may stop being able to read its core image due to a + file system moving blocks around, such as while defragmenting, + running checks, or even during normal operation. Installing to the + whole disk device is normally more robust. + + * Check that GRUB actually knows how to read from the device and file + system containing '/boot/grub'. It will not be able to read from + encrypted devices with unsupported encryption scheme, nor from file + systems for which support has not yet been added to GRUB. + + +File: grub.info, Node: Invoking grub-install, Next: Invoking grub-mkconfig, Prev: Troubleshooting, Up: Top + +23 Invoking grub-install +************************ + +The program 'grub-install' generates a GRUB core image using +'grub-mkimage' and installs it on your system. You must specify the +device name on which you want to install GRUB, like this: + + grub-install INSTALL_DEVICE + + The device name INSTALL_DEVICE is an OS device name or a GRUB device +name. + + 'grub-install' accepts the following options: + +'--help' + Print a summary of the command-line options and exit. + +'--version' + Print the version number of GRUB and exit. + +'--boot-directory=DIR' + Install GRUB images under the directory 'DIR/grub/' This option is + useful when you want to install GRUB into a separate partition or a + removable disk. If this option is not specified then it defaults + to '/boot', so + + grub-install /dev/sda + + is equivalent to + + grub-install --boot-directory=/boot/ /dev/sda + + Here is an example in which you have a separate "boot" partition + which is mounted on '/mnt/boot': + + grub-install --boot-directory=/mnt/boot /dev/sdb + +'--recheck' + Recheck the device map, even if '/boot/grub/device.map' already + exists. You should use this option whenever you add/remove a disk + into/from your computer. + +'--no-rs-codes' + By default on x86 BIOS systems, 'grub-install' will use some extra + space in the bootloader embedding area for Reed-Solomon + error-correcting codes. This enables GRUB to still boot + successfully if some blocks are corrupted. The exact amount of + protection offered is dependent on available space in the embedding + area. R sectors of redundancy can tolerate up to R/2 corrupted + sectors. This redundancy may be cumbersome if attempting to + cryptographically validate the contents of the bootloader embedding + area, or in more modern systems with GPT-style partition tables + (*note BIOS installation::) where GRUB does not reside in any + unpartitioned space outside of the MBR. Disable the Reed-Solomon + codes with this option. + + +File: grub.info, Node: Invoking grub-mkconfig, Next: Invoking grub-mkpasswd-pbkdf2, Prev: Invoking grub-install, Up: Top + +24 Invoking grub-mkconfig +************************* + +The program 'grub-mkconfig' generates a configuration file for GRUB +(*note Simple configuration::). + + grub-mkconfig -o /boot/grub/grub.cfg + + 'grub-mkconfig' accepts the following options: + +'--help' + Print a summary of the command-line options and exit. + +'--version' + Print the version number of GRUB and exit. + +'-o FILE' +'--output=FILE' + Send the generated configuration file to FILE. The default is to + send it to standard output. + + +File: grub.info, Node: Invoking grub-mkpasswd-pbkdf2, Next: Invoking grub-mkrelpath, Prev: Invoking grub-mkconfig, Up: Top + +25 Invoking grub-mkpasswd-pbkdf2 +******************************** + +The program 'grub-mkpasswd-pbkdf2' generates password hashes for GRUB +(*note Security::). + + grub-mkpasswd-pbkdf2 + + 'grub-mkpasswd-pbkdf2' accepts the following options: + +'-c NUMBER' +'--iteration-count=NUMBER' + Number of iterations of the underlying pseudo-random function. + Defaults to 10000. + +'-l NUMBER' +'--buflen=NUMBER' + Length of the generated hash. Defaults to 64. + +'-s NUMBER' +'--salt=NUMBER' + Length of the salt. Defaults to 64. + + +File: grub.info, Node: Invoking grub-mkrelpath, Next: Invoking grub-mkrescue, Prev: Invoking grub-mkpasswd-pbkdf2, Up: Top + +26 Invoking grub-mkrelpath +************************** + +The program 'grub-mkrelpath' makes a file system path relative to the +root of its containing file system. For instance, if '/usr' is a mount +point, then: + + $ grub-mkrelpath /usr/share/grub/unicode.pf2 + '/share/grub/unicode.pf2' + + This is mainly used internally by other GRUB utilities such as +'grub-mkconfig' (*note Invoking grub-mkconfig::), but may occasionally +also be useful for debugging. + + 'grub-mkrelpath' accepts the following options: + +'--help' + Print a summary of the command-line options and exit. + +'--version' + Print the version number of GRUB and exit. + + +File: grub.info, Node: Invoking grub-mkrescue, Next: Invoking grub-mount, Prev: Invoking grub-mkrelpath, Up: Top + +27 Invoking grub-mkrescue +************************* + +The program 'grub-mkrescue' generates a bootable GRUB rescue image +(*note Making a GRUB bootable CD-ROM::). + + grub-mkrescue -o grub.iso + + All arguments not explicitly listed as 'grub-mkrescue' options are +passed on directly to 'xorriso' in 'mkisofs' emulation mode. Options +passed to 'xorriso' will normally be interpreted as 'mkisofs' options; +if the option '--' is used, then anything after that will be interpreted +as native 'xorriso' options. + + Non-option arguments specify additional source directories. This is +commonly used to add extra files to the image: + + mkdir -p disk/boot/grub + (add extra files to 'disk/boot/grub') + grub-mkrescue -o grub.iso disk + + 'grub-mkrescue' accepts the following options: + +'--help' + Print a summary of the command-line options and exit. + +'--version' + Print the version number of GRUB and exit. + +'-o FILE' +'--output=FILE' + Save output in FILE. This "option" is required. + +'--modules=MODULES' + Pre-load the named GRUB modules in the image. Multiple entries in + MODULES should be separated by whitespace (so you will probably + need to quote this for your shell). + +'--rom-directory=DIR' + If generating images for the QEMU or Coreboot platforms, copy the + resulting 'qemu.img' or 'coreboot.elf' files respectively to the + DIR directory as well as including them in the image. + +'--xorriso=FILE' + Use FILE as the 'xorriso' program, rather than the built-in + default. + +'--grub-mkimage=FILE' + Use FILE as the 'grub-mkimage' program, rather than the built-in + default. + + +File: grub.info, Node: Invoking grub-mount, Next: Invoking grub-probe, Prev: Invoking grub-mkrescue, Up: Top + +28 Invoking grub-mount +********************** + +The program 'grub-mount' performs a read-only mount of any file system +or file system image that GRUB understands, using GRUB's file system +drivers via FUSE. (It is only available if FUSE development files were +present when GRUB was built.) This has a number of uses: + + * It provides a convenient way to check how GRUB will view a file + system at boot time. You can use normal command-line tools to + compare that view with that of your operating system, making it + easy to find bugs. + + * It offers true read-only mounts. Linux does not have these for + journalling file systems, because it will always attempt to replay + the journal at mount time; while you can temporarily mark the block + device read-only to avoid this, that causes the mount to fail. + Since GRUB intentionally contains no code for writing to file + systems, it can easily provide a guaranteed read-only mount + mechanism. + + * It allows you to examine any file system that GRUB understands + without needing to load additional modules into your running + kernel, which may be useful in constrained environments such as + installers. + + * Since it can examine file system images (contained in regular + files) just as easily as file systems on block devices, you can use + it to inspect any file system image that GRUB understands with only + enough privileges to use FUSE, even if nobody has yet written a + FUSE module specifically for that file system type. + + Using 'grub-mount' is normally as simple as: + + grub-mount /dev/sda1 /mnt + + 'grub-mount' must be given one or more images and a mount point as +non-option arguments (if it is given more than one image, it will treat +them as a RAID set), and also accepts the following options: + +'--help' + Print a summary of the command-line options and exit. + +'--version' + Print the version number of GRUB and exit. + +'-C' +'--crypto' + Mount encrypted devices, prompting for a passphrase if necessary. + +'-d STRING' +'--debug=STRING' + Show debugging output for conditions matching STRING. + +'-K prompt|FILE' +'--zfs-key=prompt|FILE' + Load a ZFS encryption key. If you use 'prompt' as the argument, + 'grub-mount' will read a passphrase from the terminal; otherwise, + it will read key material from the specified file. + +'-r DEVICE' +'--root=DEVICE' + Set the GRUB root device to DEVICE. You do not normally need to + set this; 'grub-mount' will automatically set the root device to + the root of the supplied file system. + + If DEVICE is just a number, then it will be treated as a partition + number within the supplied image. This means that, if you have an + image of an entire disk in 'disk.img', then you can use this + command to mount its second partition: + + grub-mount -r 2 disk.img mount-point + +'-v' +'--verbose' + Print verbose messages. + + +File: grub.info, Node: Invoking grub-probe, Next: Invoking grub-script-check, Prev: Invoking grub-mount, Up: Top + +29 Invoking grub-probe +********************** + +The program 'grub-probe' probes device information for a given path or +device. + + grub-probe --target=fs /boot/grub + grub-probe --target=drive --device /dev/sda1 + + 'grub-probe' must be given a path or device as a non-option argument, +and also accepts the following options: + +'--help' + Print a summary of the command-line options and exit. + +'--version' + Print the version number of GRUB and exit. + +'-d' +'--device' + If this option is given, then the non-option argument is a system + device name (such as '/dev/sda1'), and 'grub-probe' will print + information about that device. If it is not given, then the + non-option argument is a filesystem path (such as '/boot/grub'), + and 'grub-probe' will print information about the device containing + that part of the filesystem. + +'-m FILE' +'--device-map=FILE' + Use FILE as the device map (*note Device map::) rather than the + default, usually '/boot/grub/device.map'. + +'-t TARGET' +'--target=TARGET' + Print information about the given path or device as defined by + TARGET. The available targets and their meanings are: + + 'fs' + GRUB filesystem module. + 'fs_uuid' + Filesystem Universally Unique Identifier (UUID). + 'fs_label' + Filesystem label. + 'drive' + GRUB device name. + 'device' + System device name. + 'partmap' + GRUB partition map module. + 'abstraction' + GRUB abstraction module (e.g. 'lvm'). + 'cryptodisk_uuid' + Crypto device UUID. + 'msdos_parttype' + MBR partition type code (two hexadecimal digits). + 'hints_string' + A string of platform search hints suitable for passing to the + 'search' command (*note search::). + 'bios_hints' + Search hints for the PC BIOS platform. + 'ieee1275_hints' + Search hints for the IEEE1275 platform. + 'baremetal_hints' + Search hints for platforms where disks are addressed directly + rather than via firmware. + 'efi_hints' + Search hints for the EFI platform. + 'arc_hints' + Search hints for the ARC platform. + 'compatibility_hint' + A guess at a reasonable GRUB drive name for this device, which + may be used as a fallback if the 'search' command fails. + 'disk' + System device name for the whole disk. + +'-v' +'--verbose' + Print verbose messages. + + +File: grub.info, Node: Invoking grub-script-check, Next: Obtaining and Building GRUB, Prev: Invoking grub-probe, Up: Top + +30 Invoking grub-script-check +***************************** + +The program 'grub-script-check' takes a GRUB script file (*note +Shell-like scripting::) and checks it for syntax errors, similar to +commands such as 'sh -n'. It may take a PATH as a non-option argument; +if none is supplied, it will read from standard input. + + grub-script-check /boot/grub/grub.cfg + + 'grub-script-check' accepts the following options: + +'--help' + Print a summary of the command-line options and exit. + +'--version' + Print the version number of GRUB and exit. + +'-v' +'--verbose' + Print each line of input after reading it. + + +File: grub.info, Node: Obtaining and Building GRUB, Next: Reporting bugs, Prev: Invoking grub-script-check, Up: Top + +Appendix A How to obtain and build GRUB +*************************************** + + *Caution:* GRUB requires binutils-2.9.1.0.23 or later because the + GNU assembler has been changed so that it can produce real 16bits + machine code between 2.9.1 and 2.9.1.0.x. See + , to obtain information on how + to get the latest version. + + GRUB is available from the GNU alpha archive site + or any of its mirrors. The file will be +named grub-version.tar.gz. The current version is 2.02, so the file you +should grab is: + + + + To unbundle GRUB use the instruction: + + zcat grub-2.02.tar.gz | tar xvf - + + which will create a directory called 'grub-2.02' with all the +sources. You can look at the file 'INSTALL' for detailed instructions +on how to build and install GRUB, but you should be able to just do: + + cd grub-2.02 + ./configure + make install + + Also, the latest version is available using Git. See + for more +information. + + +File: grub.info, Node: Reporting bugs, Next: Future, Prev: Obtaining and Building GRUB, Up: Top + +Appendix B Reporting bugs +************************* + +These are the guideline for how to report bugs. Take a look at this +list below before you submit bugs: + + 1. Before getting unsettled, read this manual through and through. + Also, see the GNU GRUB FAQ + (http://www.gnu.org/software/grub/grub-faq.html). + + 2. Always mention the information on your GRUB. The version number and + the configuration are quite important. If you build it yourself, + write the options specified to the configure script and your + operating system, including the versions of gcc and binutils. + + 3. If you have trouble with the installation, inform us of how you + installed GRUB. Don't omit error messages, if any. Just 'GRUB + hangs up when it boots' is not enough. + + The information on your hardware is also essential. These are + especially important: the geometries and the partition tables of + your hard disk drives and your BIOS. + + 4. If GRUB cannot boot your operating system, write down _everything_ + you see on the screen. Don't paraphrase them, like 'The foo OS + crashes with GRUB, even though it can boot with the bar boot loader + just fine'. Mention the commands you executed, the messages + printed by them, and information on your operating system including + the version number. + + 5. Explain what you wanted to do. It is very useful to know your + purpose and your wish, and how GRUB didn't satisfy you. + + 6. If you can investigate the problem yourself, please do. That will + give you and us much more information on the problem. Attaching a + patch is even better. + + When you attach a patch, make the patch in unified diff format, and + write ChangeLog entries. But, even when you make a patch, don't + forget to explain the problem, so that we can understand what your + patch is for. + + 7. Write down anything that you think might be related. Please + understand that we often need to reproduce the same problem you + encountered in our environment. So your information should be + sufficient for us to do the same thing--Don't forget that we cannot + see your computer directly. If you are not sure whether to state a + fact or leave it out, state it! Reporting too many things is much + better than omitting something important. + + If you follow the guideline above, submit a report to the Bug +Tracking System (http://savannah.gnu.org/bugs/?group=grub). +Alternatively, you can submit a report via electronic mail to +, but we strongly recommend that you use the Bug +Tracking System, because e-mail can be passed over easily. + + Once we get your report, we will try to fix the bugs. + + +File: grub.info, Node: Future, Next: Copying This Manual, Prev: Reporting bugs, Up: Top + +Appendix C Where GRUB will go +***************************** + +GRUB 2 is now quite stable and used in many production systems. We are +currently working towards a 2.0 release. + + If you are interested in the development of GRUB 2, take a look at +the homepage (http://www.gnu.org/software/grub/grub.html). + + +File: grub.info, Node: Copying This Manual, Next: Index, Prev: Future, Up: Top + +Appendix D Copying This Manual +****************************** + +* Menu: + +* GNU Free Documentation License:: License for copying this manual. + + +File: grub.info, Node: GNU Free Documentation License, Up: Copying This Manual + +D.1 GNU Free Documentation License +================================== + + Version 1.2, November 2002 + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses terminated + so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + . + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. + +D.1.1 ADDENDUM: How to use this License for your documents +---------------------------------------------------------- + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: grub.info, Node: Index, Prev: Copying This Manual, Up: Top + +Index +***** + +[index] +* Menu: + +* [: [. (line 6) +* acpi: acpi. (line 6) +* authenticate: authenticate. (line 6) +* background_color: background_color. (line 6) +* background_image: background_image. (line 6) +* badram: badram. (line 6) +* blocklist: blocklist. (line 6) +* boot: boot. (line 6) +* cat: cat. (line 6) +* chainloader: chainloader. (line 6) +* clear: clear. (line 6) +* CMOS: cmosdump. (line 6) +* cmosclean: cmosclean. (line 6) +* cmostest: cmostest. (line 6) +* cmp: cmp. (line 6) +* configfile: configfile. (line 6) +* cpuid: cpuid. (line 6) +* crc: crc. (line 6) +* cryptomount: cryptomount. (line 6) +* date: date. (line 6) +* devicetree: devicetree. (line 6) +* distrust: distrust. (line 6) +* drivemap: drivemap. (line 6) +* echo: echo. (line 6) +* eval: eval. (line 6) +* export: export. (line 6) +* false: false. (line 6) +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* gettext: gettext. (line 6) +* gptsync: gptsync. (line 6) +* halt: halt. (line 6) +* hashsum: hashsum. (line 6) +* help: help. (line 6) +* initrd: initrd. (line 6) +* initrd16: initrd16. (line 6) +* insmod: insmod. (line 6) +* keystatus: keystatus. (line 6) +* linux: linux. (line 6) +* linux16: linux16. (line 6) +* list_env: list_env. (line 6) +* list_trusted: list_trusted. (line 6) +* loadfont: loadfont. (line 6) +* load_env: load_env. (line 6) +* loopback: loopback. (line 6) +* ls: ls. (line 6) +* lsfonts: lsfonts. (line 6) +* lsmod: lsmod. (line 6) +* md5sum: md5sum. (line 6) +* menuentry: menuentry. (line 6) +* module: module. (line 6) +* multiboot: multiboot. (line 6) +* nativedisk: nativedisk. (line 6) +* net_add_addr: net_add_addr. (line 6) +* net_add_dns: net_add_dns. (line 6) +* net_add_route: net_add_route. (line 6) +* net_bootp: net_bootp. (line 6) +* net_del_addr: net_del_addr. (line 6) +* net_del_dns: net_del_dns. (line 6) +* net_del_route: net_del_route. (line 6) +* net_get_dhcp_option: net_get_dhcp_option. (line 6) +* net_ipv6_autoconf: net_ipv6_autoconf. (line 6) +* net_ls_addr: net_ls_addr. (line 6) +* net_ls_cards: net_ls_cards. (line 6) +* net_ls_dns: net_ls_dns. (line 6) +* net_ls_routes: net_ls_routes. (line 6) +* net_nslookup: net_nslookup. (line 6) +* normal: normal. (line 6) +* normal_exit: normal_exit. (line 6) +* parttool: parttool. (line 6) +* password: password. (line 6) +* password_pbkdf2: password_pbkdf2. (line 6) +* play: play. (line 6) +* probe: probe. (line 6) +* pxe_unload: pxe_unload. (line 6) +* read: read. (line 6) +* reboot: reboot. (line 6) +* regexp: regexp. (line 6) +* rmmod: rmmod. (line 6) +* save_env: save_env. (line 6) +* search: search. (line 6) +* sendkey: sendkey. (line 6) +* serial: serial. (line 6) +* set: set. (line 6) +* sha1sum: sha1sum. (line 6) +* sha256sum: sha256sum. (line 6) +* sha512sum: sha512sum. (line 6) +* sleep: sleep. (line 6) +* source: source. (line 6) +* submenu: submenu. (line 6) +* terminal_input: terminal_input. (line 6) +* terminal_output: terminal_output. (line 6) +* terminfo: terminfo. (line 6) +* test: test. (line 6) +* true: true. (line 6) +* trust: trust. (line 6) +* unset: unset. (line 6) +* verify_detached: verify_detached. (line 6) +* videoinfo: videoinfo. (line 6) +* xen_hypervisor: xen_hypervisor. (line 6) +* xen_initrd: xen_initrd. (line 6) +* xen_linux: xen_linux. (line 6) +* xen_xsm: xen_xsm. (line 6) + + + +Tag Table: +Node: Top1154 +Node: Introduction4204 +Node: Overview4648 +Node: Overview-Footnotes6638 +Ref: Overview-Footnote-16699 +Node: History6861 +Node: Changes from GRUB Legacy8951 +Node: Features11427 +Node: Features-Footnotes17846 +Ref: Features-Footnote-117907 +Ref: Features-Footnote-218003 +Ref: Features-Footnote-318150 +Node: Role of a boot loader18295 +Node: Role of a boot loader-Footnotes19634 +Ref: Role of a boot loader-Footnote-119721 +Node: Naming convention19800 +Node: OS-specific notes about grub tools22711 +Node: Installation23747 +Node: Installing GRUB using grub-install24869 +Node: Making a GRUB bootable CD-ROM27556 +Node: Making a GRUB bootable CD-ROM-Footnotes29415 +Ref: Making a GRUB bootable CD-ROM-Footnote-129518 +Node: Device map29593 +Node: BIOS installation31560 +Node: Booting34936 +Node: General boot methods35392 +Node: Loading an operating system directly36135 +Node: Chain-loading36866 +Node: Loopback booting37837 +Node: OS-specific notes39511 +Node: GNU/Hurd39800 +Node: GNU/Linux40923 +Node: NetBSD42549 +Node: DOS/Windows44023 +Node: Configuration45801 +Node: Simple configuration46410 +Node: Shell-like scripting60266 +Node: Shell-like scripting-Footnotes68320 +Ref: Shell-like scripting-Footnote-168405 +Node: Multi-boot manual config68532 +Node: Embedded configuration72161 +Node: Theme file format74997 +Ref: Pixmap-styled progress bar76456 +Ref: Plain progress bar, drawn with solid color.76468 +Ref: An example of the slices (in red) used for a terminal window. This drawing was created and sliced in Inkscape_, as the next section explains.79960 +Node: Network100372 +Node: Serial terminal103099 +Node: Vendor power-on keys105336 +Node: Images107271 +Node: Core image size limitation112246 +Node: Filesystem114810 +Node: Device syntax115519 +Node: File name syntax118220 +Node: Block list syntax119266 +Node: Interface120000 +Node: Command-line interface120824 +Node: Command-line interface-Footnotes122768 +Ref: Command-line interface-Footnote-1122857 +Node: Menu interface122952 +Node: Menu entry editor123964 +Node: Environment124702 +Node: Special environment variables125405 +Node: biosnum126459 +Node: check_signatures126983 +Node: chosen127270 +Node: cmdpath127713 +Node: color_highlight128140 +Node: color_normal128552 +Node: config_directory130215 +Node: config_file130509 +Node: debug130902 +Node: default131341 +Node: fallback132769 +Node: gfxmode133102 +Node: gfxpayload133900 +Node: gfxterm_font135054 +Node: grub_cpu135354 +Node: grub_platform135642 +Node: icondir135934 +Node: lang136251 +Node: locale_dir136720 +Node: menu_color_highlight137229 +Node: menu_color_normal137725 +Node: net__boot_file138226 +Node: net__dhcp_server_name138469 +Node: net__domain138731 +Node: net__extensionspath138978 +Node: net__hostname139233 +Node: net__ip139472 +Node: net__mac139688 +Node: net__next_server139909 +Node: net__rootpath140152 +Node: net_default_interface140391 +Node: net_default_ip140611 +Node: net_default_mac140808 +Node: net_default_server141004 +Node: pager141197 +Node: prefix141453 +Node: pxe_blksize141902 +Node: pxe_default_gateway142079 +Node: pxe_default_server142284 +Node: root142480 +Node: superusers143021 +Node: theme143269 +Node: timeout143590 +Node: timeout_style144227 +Node: Environment block144612 +Node: Commands146044 +Node: Menu-specific commands146914 +Node: menuentry147642 +Node: submenu149193 +Node: General commands149742 +Node: serial150238 +Node: terminal_input151289 +Node: terminal_output151955 +Node: terminfo152622 +Node: Command-line and menu entry commands153757 +Node: [159040 +Node: acpi159226 +Node: authenticate160283 +Node: background_color160710 +Node: background_image161383 +Node: badram161933 +Node: blocklist162986 +Node: boot163220 +Node: cat163542 +Node: chainloader164178 +Node: clear164806 +Node: cmosclean164992 +Node: cmosdump165296 +Node: cmostest165591 +Node: cmp165949 +Node: configfile166500 +Node: cpuid166925 +Node: crc167496 +Node: cryptomount167770 +Node: date168517 +Node: devicetree169066 +Node: distrust169463 +Node: drivemap170244 +Node: echo171051 +Node: eval171994 +Node: export172277 +Node: false172588 +Node: gettext172884 +Node: gptsync173331 +Node: halt174276 +Node: hashsum174607 +Node: help175833 +Node: initrd176300 +Node: initrd16176712 +Node: insmod177217 +Node: keystatus177439 +Node: linux178078 +Node: linux16178981 +Node: list_env179695 +Node: list_trusted180061 +Node: load_env180644 +Node: loadfont182317 +Node: loopback182688 +Node: ls183136 +Node: lsfonts183678 +Node: lsmod183860 +Node: md5sum184050 +Node: module184329 +Node: multiboot184641 +Node: nativedisk185749 +Node: normal186148 +Node: normal_exit186915 +Node: parttool187237 +Node: password188744 +Node: password_pbkdf2189026 +Node: play189434 +Node: probe190182 +Node: pxe_unload190564 +Node: read190844 +Node: reboot191193 +Node: regexp191376 +Node: rmmod191913 +Node: save_env192106 +Node: search193128 +Node: sendkey193906 +Node: set200332 +Node: sha1sum200634 +Node: sha256sum200919 +Node: sha512sum201218 +Node: sleep201515 +Node: source201972 +Node: test202524 +Node: true205293 +Node: trust205579 +Node: unset206371 +Node: uppermem206578 +Node: verify_detached206803 +Node: videoinfo207851 +Node: xen_hypervisor208138 +Node: xen_linux208545 +Node: xen_initrd208904 +Node: xen_xsm209160 +Node: Networking commands209462 +Node: net_add_addr210414 +Node: net_add_dns210934 +Node: net_add_route211210 +Node: net_bootp211740 +Node: net_del_addr213329 +Node: net_del_dns213569 +Node: net_del_route213816 +Node: net_get_dhcp_option214061 +Node: net_ipv6_autoconf214547 +Node: net_ls_addr214966 +Node: net_ls_cards215214 +Node: net_ls_dns215450 +Node: net_ls_routes215681 +Node: net_nslookup215888 +Node: Internationalisation216172 +Node: Security222999 +Node: Authentication and authorisation223267 +Node: Using digital signatures226251 +Node: Platform limitations229331 +Node: Platform-specific operations236435 +Node: Supported kernels237500 +Node: Troubleshooting245137 +Node: GRUB only offers a rescue shell245363 +Node: Invoking grub-install248324 +Node: Invoking grub-mkconfig250494 +Node: Invoking grub-mkpasswd-pbkdf2251131 +Node: Invoking grub-mkrelpath251790 +Node: Invoking grub-mkrescue252563 +Node: Invoking grub-mount254312 +Node: Invoking grub-probe257361 +Node: Invoking grub-script-check259955 +Node: Obtaining and Building GRUB260699 +Node: Reporting bugs261942 +Node: Future264758 +Node: Copying This Manual265158 +Node: GNU Free Documentation License265386 +Node: Index287775 + +End Tag Table diff --git a/docs/grub.texi b/docs/grub.texi new file mode 100644 index 000000000..e935af33e --- /dev/null +++ b/docs/grub.texi @@ -0,0 +1,6590 @@ +\input texinfo +@c -*-texinfo-*- +@c %**start of header +@setfilename grub.info +@include version.texi +@settitle GNU GRUB Manual @value{VERSION} +@c Unify all our little indices for now. +@syncodeindex fn cp +@syncodeindex vr cp +@syncodeindex ky cp +@syncodeindex pg cp +@syncodeindex tp cp +@c %**end of header + +@footnotestyle separate +@paragraphindent 3 +@finalout + +@copying +This manual is for GNU GRUB (version @value{VERSION}, +@value{UPDATED}). + +Copyright @copyright{} 1999,2000,2001,2002,2004,2006,2008,2009,2010,2011,2012,2013 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections. +@end quotation +@end copying + +@dircategory Kernel +@direntry +* GRUB: (grub). The GRand Unified Bootloader +* grub-install: (grub)Invoking grub-install. Install GRUB on your drive +* grub-mkconfig: (grub)Invoking grub-mkconfig. Generate GRUB configuration +* grub-mkpasswd-pbkdf2: (grub)Invoking grub-mkpasswd-pbkdf2. +* grub-mkrelpath: (grub)Invoking grub-mkrelpath. +* grub-mkrescue: (grub)Invoking grub-mkrescue. Make a GRUB rescue image +* grub-mount: (grub)Invoking grub-mount. Mount a file system using GRUB +* grub-probe: (grub)Invoking grub-probe. Probe device information +* grub-script-check: (grub)Invoking grub-script-check. +@end direntry + +@setchapternewpage odd + +@titlepage +@sp 10 +@title the GNU GRUB manual +@subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}. +@author Gordon Matzigkeit +@author Yoshinori K. Okuji +@author Colin Watson +@author Colin D. Bennett +@c The following two commands start the copyright page. +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@c Output the table of contents at the beginning. +@contents + +@finalout +@headings double + +@ifnottex +@node Top +@top GNU GRUB manual + +This is the documentation of GNU GRUB, the GRand Unified Bootloader, +a flexible and powerful boot loader program for a wide range of +architectures. + +This edition documents version @value{VERSION}. + +@insertcopying +@end ifnottex + +@menu +* Introduction:: Capturing the spirit of GRUB +* Naming convention:: Names of your drives in GRUB +* OS-specific notes about grub tools:: + Some notes about OS-specific behaviour of GRUB + tools +* Installation:: Installing GRUB on your drive +* Booting:: How to boot different operating systems +* Configuration:: Writing your own configuration file +* Theme file format:: Format of GRUB theme files +* Network:: Downloading OS images from a network +* Serial terminal:: Using GRUB via a serial line +* Vendor power-on keys:: Changing GRUB behaviour on vendor power-on keys +* Images:: GRUB image files +* Core image size limitation:: GRUB image files size limitations +* Filesystem:: Filesystem syntax and semantics +* Interface:: The menu and the command-line +* Environment:: GRUB environment variables +* Commands:: The list of available builtin commands +* Internationalisation:: Topics relating to language support +* Security:: Authentication, authorisation, and signatures +* Platform limitations:: The list of platform-specific limitations +* Platform-specific operations:: Platform-specific operations +* Supported kernels:: The list of supported kernels +* Troubleshooting:: Error messages produced by GRUB +* Invoking grub-install:: How to use the GRUB installer +* Invoking grub-mkconfig:: Generate a GRUB configuration file +* Invoking grub-mkpasswd-pbkdf2:: + Generate GRUB password hashes +* Invoking grub-mkrelpath:: Make system path relative to its root +* Invoking grub-mkrescue:: Make a GRUB rescue image +* Invoking grub-mount:: Mount a file system using GRUB +* Invoking grub-probe:: Probe device information for GRUB +* Invoking grub-script-check:: Check GRUB script file for syntax errors +* Obtaining and Building GRUB:: How to obtain and build GRUB +* Reporting bugs:: Where you should send a bug report +* Future:: Some future plans on GRUB +* Copying This Manual:: Copying This Manual +* Index:: +@end menu + + +@node Introduction +@chapter Introduction to GRUB + +@menu +* Overview:: What exactly GRUB is and how to use it +* History:: From maggot to house fly +* Changes from GRUB Legacy:: Differences from previous versions +* Features:: GRUB features +* Role of a boot loader:: The role of a boot loader +@end menu + + +@node Overview +@section Overview + +Briefly, a @dfn{boot loader} is the first software program that runs when +a computer starts. It is responsible for loading and transferring +control to an operating system @dfn{kernel} software (such as Linux or +GNU Mach). The kernel, in turn, initializes the rest of the operating +system (e.g. a GNU system). + +GNU GRUB is a very powerful boot loader, which can load a wide variety +of free operating systems, as well as proprietary operating systems with +chain-loading@footnote{@dfn{chain-load} is the mechanism for loading +unsupported operating systems by loading another boot loader. It is +typically used for loading DOS or Windows.}. GRUB is designed to +address the complexity of booting a personal computer; both the +program and this manual are tightly bound to that computer platform, +although porting to other platforms may be addressed in the future. + +One of the important features in GRUB is flexibility; GRUB understands +filesystems and kernel executable formats, so you can load an arbitrary +operating system the way you like, without recording the physical +position of your kernel on the disk. Thus you can load the kernel +just by specifying its file name and the drive and partition where the +kernel resides. + +When booting with GRUB, you can use either a command-line interface +(@pxref{Command-line interface}), or a menu interface (@pxref{Menu +interface}). Using the command-line interface, you type the drive +specification and file name of the kernel manually. In the menu +interface, you just select an OS using the arrow keys. The menu is +based on a configuration file which you prepare beforehand +(@pxref{Configuration}). While in the menu, you can switch to the +command-line mode, and vice-versa. You can even edit menu entries +before using them. + +In the following chapters, you will learn how to specify a drive, a +partition, and a file name (@pxref{Naming convention}) to GRUB, how to +install GRUB on your drive (@pxref{Installation}), and how to boot your +OSes (@pxref{Booting}), step by step. + + +@node History +@section History of GRUB + +GRUB originated in 1995 when Erich Boleyn was trying to boot the GNU +Hurd with the University of Utah's Mach 4 microkernel (now known as GNU +Mach). Erich and Brian Ford designed the Multiboot Specification +(@pxref{Top, Multiboot Specification, Motivation, multiboot, The Multiboot +Specification}), because they were determined not to add to the large +number of mutually-incompatible PC boot methods. + +Erich then began modifying the FreeBSD boot loader so that it would +understand Multiboot. He soon realized that it would be a lot easier +to write his own boot loader from scratch than to keep working on the +FreeBSD boot loader, and so GRUB was born. + +Erich added many features to GRUB, but other priorities prevented him +from keeping up with the demands of its quickly-expanding user base. In +1999, Gordon Matzigkeit and Yoshinori K. Okuji adopted GRUB as an +official GNU package, and opened its development by making the latest +sources available via anonymous CVS. @xref{Obtaining and Building +GRUB}, for more information. + +Over the next few years, GRUB was extended to meet many needs, but it +quickly became clear that its design was not keeping up with the extensions +being made to it, and we reached the point where it was very difficult to +make any further changes without breaking existing features. Around 2002, +Yoshinori K. Okuji started work on PUPA (Preliminary Universal Programming +Architecture for GNU GRUB), aiming to rewrite the core of GRUB to make it +cleaner, safer, more robust, and more powerful. PUPA was eventually renamed +to GRUB 2, and the original version of GRUB was renamed to GRUB Legacy. +Small amounts of maintenance continued to be done on GRUB Legacy, but the +last release (0.97) was made in 2005 and at the time of writing it seems +unlikely that there will be another. + +By around 2007, GNU/Linux distributions started to use GRUB 2 to limited +extents, and by the end of 2009 multiple major distributions were installing +it by default. + + +@node Changes from GRUB Legacy +@section Differences from previous versions + +GRUB 2 is a rewrite of GRUB (@pxref{History}), although it shares many +characteristics with the previous version, now known as GRUB Legacy. Users +of GRUB Legacy may need some guidance to find their way around this new +version. + +@itemize @bullet +@item +The configuration file has a new name (@file{grub.cfg} rather than +@file{menu.lst} or @file{grub.conf}), new syntax (@pxref{Configuration}) and +many new commands (@pxref{Commands}). Configuration cannot be copied over +directly, although most GRUB Legacy users should not find the syntax too +surprising. + +@item +@file{grub.cfg} is typically automatically generated by +@command{grub-mkconfig} (@pxref{Simple configuration}). This makes it +easier to handle versioned kernel upgrades. + +@item +Partition numbers in GRUB device names now start at 1, not 0 (@pxref{Naming +convention}). + +@item +The configuration file is now written in something closer to a full +scripting language: variables, conditionals, and loops are available. + +@item +A small amount of persistent storage is available across reboots, using the +@command{save_env} and @command{load_env} commands in GRUB and the +@command{grub-editenv} utility. This is not available in all configurations +(@pxref{Environment block}). + +@item +GRUB 2 has more reliable ways to find its own files and those of target +kernels on multiple-disk systems, and has commands (@pxref{search}) to find +devices using file system labels or Universally Unique Identifiers (UUIDs). + +@item +GRUB 2 is available for several other types of system in addition to the PC +BIOS systems supported by GRUB Legacy: PC EFI, PC coreboot, PowerPC, SPARC, +and MIPS Lemote Yeeloong are all supported. + +@item +Many more file systems are supported, including but not limited to ext4, +HFS+, and NTFS. + +@item +GRUB 2 can read files directly from LVM and RAID devices. + +@item +A graphical terminal and a graphical menu system are available. + +@item +GRUB 2's interface can be translated, including menu entry names. + +@item +The image files (@pxref{Images}) that make up GRUB have been reorganised; +Stage 1, Stage 1.5, and Stage 2 are no more. + +@item +GRUB 2 puts many facilities in dynamically loaded modules, allowing the core +image to be smaller, and allowing the core image to be built in more +flexible ways. +@end itemize + + +@node Features +@section GRUB features + +The primary requirement for GRUB is that it be compliant with the +@dfn{Multiboot Specification}, which is described in @ref{Top, Multiboot +Specification, Motivation, multiboot, The Multiboot Specification}. + +The other goals, listed in approximate order of importance, are: + +@itemize @bullet{} +@item +Basic functions must be straightforward for end-users. + +@item +Rich functionality to support kernel experts and designers. + +@item +Backward compatibility for booting FreeBSD, NetBSD, OpenBSD, and +Linux. Proprietary kernels (such as DOS, Windows NT, and OS/2) are +supported via a chain-loading function. +@end itemize + +Except for specific compatibility modes (chain-loading and the Linux +@dfn{piggyback} format), all kernels will be started in much the same +state as in the Multiboot Specification. Only kernels loaded at 1 megabyte +or above are presently supported. Any attempt to load below that +boundary will simply result in immediate failure and an error message +reporting the problem. + +In addition to the requirements above, GRUB has the following features +(note that the Multiboot Specification doesn't require all the features +that GRUB supports): + +@table @asis +@item Recognize multiple executable formats +Support many of the @dfn{a.out} variants plus @dfn{ELF}. Symbol +tables are also loaded. + +@item Support non-Multiboot kernels +Support many of the various free 32-bit kernels that lack Multiboot +compliance (primarily FreeBSD, NetBSD@footnote{The NetBSD/i386 kernel +is Multiboot-compliant, but lacks support for Multiboot modules.}, +OpenBSD, and Linux). Chain-loading of other boot loaders is also +supported. + +@item Load multiples modules +Fully support the Multiboot feature of loading multiple modules. + +@item Load a configuration file +Support a human-readable text configuration file with preset boot +commands. You can also load another configuration file dynamically and +embed a preset configuration file in a GRUB image file. The list of +commands (@pxref{Commands}) are a superset of those supported on the +command-line. An example configuration file is provided in +@ref{Configuration}. + +@item Provide a menu interface +A menu interface listing preset boot commands, with a programmable +timeout, is available. There is no fixed limit on the number of boot +entries, and the current implementation has space for several hundred. + +@item Have a flexible command-line interface +A fairly flexible command-line interface, accessible from the menu, +is available to edit any preset commands, or write a new boot command +set from scratch. If no configuration file is present, GRUB drops to +the command-line. + +The list of commands (@pxref{Commands}) are a subset of those supported +for configuration files. Editing commands closely resembles the Bash +command-line (@pxref{Command Line Editing, Bash, Command Line Editing, +features, Bash Features}), with @key{TAB}-completion of commands, +devices, partitions, and files in a directory depending on context. + +@item Support multiple filesystem types +Support multiple filesystem types transparently, plus a useful explicit +blocklist notation. The currently supported filesystem types are @dfn{Amiga +Fast FileSystem (AFFS)}, @dfn{AtheOS fs}, @dfn{BeFS}, +@dfn{BtrFS} (including raid0, raid1, raid10, gzip and lzo), +@dfn{cpio} (little- and big-endian bin, odc and newc variants), +@dfn{Linux ext2/ext3/ext4}, @dfn{DOS FAT12/FAT16/FAT32}, @dfn{exFAT}, @dfn{HFS}, +@dfn{HFS+}, @dfn{ISO9660} (including Joliet, Rock-ridge and multi-chunk files), +@dfn{JFS}, @dfn{Minix fs} (versions 1, 2 and 3), @dfn{nilfs2}, +@dfn{NTFS} (including compression), @dfn{ReiserFS}, @dfn{ROMFS}, +@dfn{Amiga Smart FileSystem (SFS)}, @dfn{Squash4}, @dfn{tar}, @dfn{UDF}, +@dfn{BSD UFS/UFS2}, @dfn{XFS}, and @dfn{ZFS} (including lzjb, gzip, +zle, mirror, stripe, raidz1/2/3 and encryption in AES-CCM and AES-GCM). +@xref{Filesystem}, for more information. + +@item Support automatic decompression +Can decompress files which were compressed by @command{gzip} or +@command{xz}@footnote{Only CRC32 data integrity check is supported (xz default +is CRC64 so one should use --check=crc32 option). LZMA BCJ filters are +supported.}. This function is both automatic and transparent to the user +(i.e. all functions operate upon the uncompressed contents of the specified +files). This greatly reduces a file size and loading time, a +particularly great benefit for floppies.@footnote{There are a few +pathological cases where loading a very badly organized ELF kernel might +take longer, but in practice this never happen.} + +It is conceivable that some kernel modules should be loaded in a +compressed state, so a different module-loading command can be specified +to avoid uncompressing the modules. + +@item Access data on any installed device +Support reading data from any or all floppies or hard disk(s) recognized +by the BIOS, independent of the setting of the root device. + +@item Be independent of drive geometry translations +Unlike many other boot loaders, GRUB makes the particular drive +translation irrelevant. A drive installed and running with one +translation may be converted to another translation without any adverse +effects or changes in GRUB's configuration. + +@item Detect all installed @sc{ram} +GRUB can generally find all the installed @sc{ram} on a PC-compatible +machine. It uses an advanced BIOS query technique for finding all +memory regions. As described on the Multiboot Specification (@pxref{Top, +Multiboot Specification, Motivation, multiboot, The Multiboot +Specification}), not all kernels make use of this information, but GRUB +provides it for those who do. + +@item Support Logical Block Address mode +In traditional disk calls (called @dfn{CHS mode}), there is a geometry +translation problem, that is, the BIOS cannot access over 1024 +cylinders, so the accessible space is limited to at least 508 MB and to +at most 8GB. GRUB can't universally solve this problem, as there is no +standard interface used in all machines. However, several newer machines +have the new interface, Logical Block Address (@dfn{LBA}) mode. GRUB +automatically detects if LBA mode is available and uses it if +available. In LBA mode, GRUB can access the entire disk. + +@item Support network booting +GRUB is basically a disk-based boot loader but also has network +support. You can load OS images from a network by using the @dfn{TFTP} +protocol. + +@item Support remote terminals +To support computers with no console, GRUB provides remote terminal +support, so that you can control GRUB from a remote host. Only serial +terminal support is implemented at the moment. +@end table + + +@node Role of a boot loader +@section The role of a boot loader + +The following is a quotation from Gordon Matzigkeit, a GRUB fanatic: + +@quotation +Some people like to acknowledge both the operating system and kernel when +they talk about their computers, so they might say they use +``GNU/Linux'' or ``GNU/Hurd''. Other people seem to think that the +kernel is the most important part of the system, so they like to call +their GNU operating systems ``Linux systems.'' + +I, personally, believe that this is a grave injustice, because the +@emph{boot loader} is the most important software of all. I used to +refer to the above systems as either ``LILO''@footnote{The LInux LOader, +a boot loader that everybody uses, but nobody likes.} or ``GRUB'' +systems. + +Unfortunately, nobody ever understood what I was talking about; now I +just use the word ``GNU'' as a pseudonym for GRUB. + +So, if you ever hear people talking about their alleged ``GNU'' systems, +remember that they are actually paying homage to the best boot loader +around@dots{} GRUB! +@end quotation + +We, the GRUB maintainers, do not (usually) encourage Gordon's level of +fanaticism, but it helps to remember that boot loaders deserve +recognition. We hope that you enjoy using GNU GRUB as much as we did +writing it. + + +@node Naming convention +@chapter Naming convention + +The device syntax used in GRUB is a wee bit different from what you may +have seen before in your operating system(s), and you need to know it so +that you can specify a drive/partition. + +Look at the following examples and explanations: + +@example +(fd0) +@end example + +First of all, GRUB requires that the device name be enclosed with +@samp{(} and @samp{)}. The @samp{fd} part means that it is a floppy +disk. The number @samp{0} is the drive number, which is counted from +@emph{zero}. This expression means that GRUB will use the whole floppy +disk. + +@example +(hd0,msdos2) +@end example + +Here, @samp{hd} means it is a hard disk drive. The first integer +@samp{0} indicates the drive number, that is, the first hard disk, +the string @samp{msdos} indicates the partition scheme, while +the second integer, @samp{2}, indicates the partition number (or the +@sc{pc} slice number in the BSD terminology). The partition numbers are +counted from @emph{one}, not from zero (as was the case in previous +versions of GRUB). This expression means the second partition of the +first hard disk drive. In this case, GRUB uses one partition of the +disk, instead of the whole disk. + +@example +(hd0,msdos5) +@end example + +This specifies the first @dfn{extended partition} of the first hard disk +drive. Note that the partition numbers for extended partitions are +counted from @samp{5}, regardless of the actual number of primary +partitions on your hard disk. + +@example +(hd1,msdos1,bsd1) +@end example + +This means the BSD @samp{a} partition on first @sc{pc} slice number +of the second hard disk. + +Of course, to actually access the disks or partitions with GRUB, you +need to use the device specification in a command, like @samp{set +root=(fd0)} or @samp{parttool (hd0,msdos3) hidden-}. To help you find out +which number specifies a partition you want, the GRUB command-line +(@pxref{Command-line interface}) options have argument +completion. This means that, for example, you only need to type + +@example +set root=( +@end example + +followed by a @key{TAB}, and GRUB will display the list of drives, +partitions, or file names. So it should be quite easy to determine the +name of your target partition, even with minimal knowledge of the +syntax. + +Note that GRUB does @emph{not} distinguish IDE from SCSI - it simply +counts the drive numbers from zero, regardless of their type. Normally, +any IDE drive number is less than any SCSI drive number, although that +is not true if you change the boot sequence by swapping IDE and SCSI +drives in your BIOS. + +Now the question is, how to specify a file? Again, consider an +example: + +@example +(hd0,msdos1)/vmlinuz +@end example + +This specifies the file named @samp{vmlinuz}, found on the first +partition of the first hard disk drive. Note that the argument +completion works with file names, too. + +That was easy, admit it. Now read the next chapter, to find out how to +actually install GRUB on your drive. + +@node OS-specific notes about grub tools +@chapter OS-specific notes about grub tools + +On OS which have device nodes similar to Unix-like OS GRUB tools use the +OS name. E.g. for GNU/Linux: + +@example +# @kbd{grub-install /dev/sda} +@end example + +On AROS we use another syntax. For volumes: + +@example +//: +@end example + +E.g. + +@example +//:DH0 +@end example + +For disks we use syntax: +@example +//:/unit/flags +@end example + +E.g. + +@example +# @kbd{grub-install //:ata.device/0/0} +@end example + +On Windows we use UNC path. For volumes it's typically + +@example +\\?\Volume@{@} +\\?\: +@end example + +E.g. + +@example +\\?\Volume@{17f34d50-cf64-4b02-800e-51d79c3aa2ff@} +\\?\C: +@end example + + +For disks it's + +@example +\\?\PhysicalDrive +@end example + +E.g. + +@example +# @kbd{grub-install \\?\PhysicalDrive0} +@end example + +Beware that you may need to further escape the backslashes depending on your +shell. + +When compiled with cygwin support then cygwin drive names are automatically +when needed. E.g. + +@example +# @kbd{grub-install /dev/sda} +@end example + +@node Installation +@chapter Installation + +In order to install GRUB as your boot loader, you need to first +install the GRUB system and utilities under your UNIX-like operating +system (@pxref{Obtaining and Building GRUB}). You can do this either +from the source tarball, or as a package for your OS. + +After you have done that, you need to install the boot loader on a +drive (floppy or hard disk) by using the utility +@command{grub-install} (@pxref{Invoking grub-install}) on a UNIX-like OS. + +GRUB comes with boot images, which are normally put in the directory +@file{/usr/lib/grub/-} (for BIOS-based machines +@file{/usr/lib/grub/i386-pc}). Hereafter, the directory where GRUB images are +initially placed (normally @file{/usr/lib/grub/-}) will be +called the @dfn{image directory}, and the directory where the boot +loader needs to find them (usually @file{/boot}) will be called +the @dfn{boot directory}. + +@menu +* Installing GRUB using grub-install:: +* Making a GRUB bootable CD-ROM:: +* Device map:: +* BIOS installation:: +@end menu + + +@node Installing GRUB using grub-install +@section Installing GRUB using grub-install + +For information on where GRUB should be installed on PC BIOS platforms, +@pxref{BIOS installation}. + +In order to install GRUB under a UNIX-like OS (such +as @sc{gnu}), invoke the program @command{grub-install} (@pxref{Invoking +grub-install}) as the superuser (@dfn{root}). + +The usage is basically very simple. You only need to specify one +argument to the program, namely, where to install the boot loader. The +argument has to be either a device file (like @samp{/dev/hda}). +For example, under Linux the following will install GRUB into the MBR +of the first IDE disk: + +@example +# @kbd{grub-install /dev/sda} +@end example + +Likewise, under GNU/Hurd, this has the same effect: + +@example +# @kbd{grub-install /dev/hd0} +@end example + +But all the above examples assume that GRUB should put images under +the @file{/boot} directory. If you want GRUB to put images under a directory +other than @file{/boot}, you need to specify the option +@option{--boot-directory}. The typical usage is that you create a GRUB +boot floppy with a filesystem. Here is an example: + +@example +@group +# @kbd{mke2fs /dev/fd0} +# @kbd{mount -t ext2 /dev/fd0 /mnt} +# @kbd{mkdir /mnt/boot} +# @kbd{grub-install --boot-directory=/mnt/boot /dev/fd0} +# @kbd{umount /mnt} +@end group +@end example + +Some BIOSes have a bug of exposing the first partition of a USB drive as a +floppy instead of exposing the USB drive as a hard disk (they call it +``USB-FDD'' boot). In such cases, you need to install like this: + +@example +# @kbd{losetup /dev/loop0 /dev/sdb1} +# @kbd{mount /dev/loop0 /mnt/usb} +# @kbd{grub-install --boot-directory=/mnt/usb/bugbios --force --allow-floppy /dev/loop0} +@end example + +This install doesn't conflict with standard install as long as they are in +separate directories. + +Note that @command{grub-install} is actually just a shell script and the +real task is done by other tools such as @command{grub-mkimage}. Therefore, +you may run those commands directly to install GRUB, without using +@command{grub-install}. Don't do that, however, unless you are very familiar +with the internals of GRUB. Installing a boot loader on a running OS may be +extremely dangerous. + +On EFI systems for fixed disk install you have to mount EFI System Partition. +If you mount it at @file{/boot/efi} then you don't need any special arguments: + +@example +# @kbd{grub-install} +@end example + +Otherwise you need to specify where your EFI System partition is mounted: + +@example +# @kbd{grub-install --efi-directory=/mnt/efi} +@end example + +For removable installs you have to use @option{--removable} and specify both +@option{--boot-directory} and @option{--efi-directory}: + +@example +# @kbd{grub-install --efi-directory=/mnt/usb --boot-directory=/mnt/usb/boot --removable} +@end example + +@node Making a GRUB bootable CD-ROM +@section Making a GRUB bootable CD-ROM + +GRUB supports the @dfn{no emulation mode} in the El Torito +specification@footnote{El Torito is a specification for bootable CD +using BIOS functions.}. This means that you can use the whole CD-ROM +from GRUB and you don't have to make a floppy or hard disk image file, +which can cause compatibility problems. + +For booting from a CD-ROM, GRUB uses a special image called +@file{cdboot.img}, which is concatenated with @file{core.img}. The +@file{core.img} used for this should be built with at least the +@samp{iso9660} and @samp{biosdisk} modules. Your bootable CD-ROM will +usually also need to include a configuration file @file{grub.cfg} and some +other GRUB modules. + +To make a simple generic GRUB rescue CD, you can use the +@command{grub-mkrescue} program (@pxref{Invoking grub-mkrescue}): + +@example +$ @kbd{grub-mkrescue -o grub.iso} +@end example + +You will often need to include other files in your image. To do this, first +make a top directory for the bootable image, say, @samp{iso}: + +@example +$ @kbd{mkdir iso} +@end example + +Make a directory for GRUB: + +@example +$ @kbd{mkdir -p iso/boot/grub} +@end example + +If desired, make the config file @file{grub.cfg} under @file{iso/boot/grub} +(@pxref{Configuration}), and copy any files and directories for the disc to the +directory @file{iso/}. + +Finally, make the image: + +@example +$ @kbd{grub-mkrescue -o grub.iso iso} +@end example + +This produces a file named @file{grub.iso}, which then can be burned +into a CD (or a DVD), or written to a USB mass storage device. + +The root device will be set up appropriately on entering your +@file{grub.cfg} configuration file, so you can refer to file names on the CD +without needing to use an explicit device name. This makes it easier to +produce rescue images that will work on both optical drives and USB mass +storage devices. + + +@node Device map +@section The map between BIOS drives and OS devices + +If the device map file exists, the GRUB utilities (@command{grub-probe}, +etc.) read it to map BIOS drives to OS devices. This file consists of lines +like this: + +@example +(@var{device}) @var{file} +@end example + +@var{device} is a drive specified in the GRUB syntax (@pxref{Device +syntax}), and @var{file} is an OS file, which is normally a device file. + +Historically, the device map file was used because GRUB device names had to +be used in the configuration file, and they were derived from BIOS drive +numbers. The map between BIOS drives and OS devices cannot always be +guessed correctly: for example, GRUB will get the order wrong if you +exchange the boot sequence between IDE and SCSI in your BIOS. + +Unfortunately, even OS device names are not always stable. Modern versions +of the Linux kernel may probe drives in a different order from boot to boot, +and the prefix (@file{/dev/hd*} versus @file{/dev/sd*}) may change depending +on the driver subsystem in use. As a result, the device map file required +frequent editing on some systems. + +GRUB avoids this problem nowadays by using UUIDs or file system labels when +generating @file{grub.cfg}, and we advise that you do the same for any +custom menu entries you write. If the device map file does not exist, then +the GRUB utilities will assume a temporary device map on the fly. This is +often good enough, particularly in the common case of single-disk systems. + +However, the device map file is not entirely obsolete yet, and it is +used for overriding when current environment is different from the one on boot. +Most common case is if you use a partition or logical volume as a disk for +virtual machine. You can put any comments in the file if needed, +as the GRUB utilities assume that a line is just a comment if +the first character is @samp{#}. + + +@node BIOS installation +@section BIOS installation + +@heading MBR + +The partition table format traditionally used on PC BIOS platforms is called +the Master Boot Record (MBR) format; this is the format that allows up to +four primary partitions and additional logical partitions. With this +partition table format, there are two ways to install GRUB: it can be +embedded in the area between the MBR and the first partition (called by +various names, such as the "boot track", "MBR gap", or "embedding area", and +which is usually at least 31 KiB), or the core image can be installed in a +file system and a list of the blocks that make it up can be stored in the +first sector of that partition. + +Each of these has different problems. There is no way to reserve space in +the embedding area with complete safety, and some proprietary software is +known to use it to make it difficult for users to work around licensing +restrictions; and systems are sometimes partitioned without leaving enough +space before the first partition. On the other hand, installing to a +filesystem means that GRUB is vulnerable to its blocks being moved around by +filesystem features such as tail packing, or even by aggressive fsck +implementations, so this approach is quite fragile; and this approach can +only be used if the @file{/boot} filesystem is on the same disk that the +BIOS boots from, so that GRUB does not have to rely on guessing BIOS drive +numbers. + +The GRUB development team generally recommends embedding GRUB before the +first partition, unless you have special requirements. You must ensure that +the first partition starts at least 31 KiB (63 sectors) from the start of +the disk; on modern disks, it is often a performance advantage to align +partitions on larger boundaries anyway, so the first partition might start 1 +MiB from the start of the disk. + +@heading GPT + +Some newer systems use the GUID Partition Table (GPT) format. This was +specified as part of the Extensible Firmware Interface (EFI), but it can +also be used on BIOS platforms if system software supports it; for example, +GRUB and GNU/Linux can be used in this configuration. With this format, it +is possible to reserve a whole partition for GRUB, called the BIOS Boot +Partition. GRUB can then be embedded into that partition without the risk +of being overwritten by other software and without being contained in a +filesystem which might move its blocks around. + +When creating a BIOS Boot Partition on a GPT system, you should make sure +that it is at least 31 KiB in size. (GPT-formatted disks are not usually +particularly small, so we recommend that you make it larger than the bare +minimum, such as 1 MiB, to allow plenty of room for growth.) You must also +make sure that it has the proper partition type. Using GNU Parted, you can +set this using a command such as the following: + +@example +# @kbd{parted /dev/@var{disk} set @var{partition-number} bios_grub on} +@end example + +If you are using gdisk, set the partition type to @samp{0xEF02}. With +partitioning programs that require setting the GUID directly, it should be +@samp{21686148-6449-6e6f-744e656564454649}. + +@strong{Caution:} Be very careful which partition you select! When GRUB +finds a BIOS Boot Partition during installation, it will automatically +overwrite part of it. Make sure that the partition does not contain any +other data. + + +@node Booting +@chapter Booting + +GRUB can load Multiboot-compliant kernels in a consistent way, +but for some free operating systems you need to use some OS-specific +magic. + +@menu +* General boot methods:: How to boot OSes with GRUB generally +* Loopback booting:: Notes on booting from loopbacks +* OS-specific notes:: Notes on some operating systems +@end menu + + +@node General boot methods +@section How to boot operating systems + +GRUB has two distinct boot methods. One of the two is to load an +operating system directly, and the other is to chain-load another boot +loader which then will load an operating system actually. Generally +speaking, the former is more desirable, because you don't need to +install or maintain other boot loaders and GRUB is flexible enough to +load an operating system from an arbitrary disk/partition. However, +the latter is sometimes required, since GRUB doesn't support all the +existing operating systems natively. + +@menu +* Loading an operating system directly:: +* Chain-loading:: +@end menu + + +@node Loading an operating system directly +@subsection How to boot an OS directly with GRUB + +Multiboot (@pxref{Top, Multiboot Specification, Motivation, multiboot, +The Multiboot Specification}) is the native format supported by GRUB. +For the sake of convenience, there is also support for Linux, FreeBSD, +NetBSD and OpenBSD. If you want to boot other operating systems, you +will have to chain-load them (@pxref{Chain-loading}). + +FIXME: this section is incomplete. + +@enumerate +@item +Run the command @command{boot} (@pxref{boot}). +@end enumerate + +However, DOS and Windows have some deficiencies, so you might have to +use more complicated instructions. @xref{DOS/Windows}, for more +information. + + +@node Chain-loading +@subsection Chain-loading an OS + +Operating systems that do not support Multiboot and do not have specific +support in GRUB (specific support is available for Linux, FreeBSD, NetBSD +and OpenBSD) must be chain-loaded, which involves loading another boot +loader and jumping to it in real mode. + +The @command{chainloader} command (@pxref{chainloader}) is used to set this +up. It is normally also necessary to load some GRUB modules and set the +appropriate root device. Putting this together, we get something like this, +for a Windows system on the first partition of the first hard disk: + +@verbatim +menuentry "Windows" { + insmod chain + insmod ntfs + set root=(hd0,1) + chainloader +1 +} +@end verbatim +@c FIXME: document UUIDs. + +On systems with multiple hard disks, an additional workaround may be +required. @xref{DOS/Windows}. + +Chain-loading is only supported on PC BIOS and EFI platforms. + +@node Loopback booting +@section Loopback booting +GRUB is able to read from an image (be it one of CD or HDD) stored on +any of its accessible storages (refer to @pxref{loopback} command). +However the OS itself should be able to find its root. This usually +involves running a userspace program running before the real root +is discovered. This is achieved by GRUB loading a specially made +small image and passing it as ramdisk to the kernel. This is achieved +by commands @command{kfreebsd_module}, @command{knetbsd_module_elf}, +@command{kopenbsd_ramdisk}, @command{initrd} (@pxref{initrd}), +@command{initrd16} (@pxref{initrd}), @command{multiboot_module}, +@command{multiboot2_module} or @command{xnu_ramdisk} +depending on the loader. Note that for knetbsd the image must be put +inside miniroot.kmod and the whole miniroot.kmod has to be loaded. In +kopenbsd payload this is disabled by default. Aditionally behaviour of +initial ramdisk depends on command line options. Several distributors provide +the image for this purpose or it's integrated in their standard ramdisk and +activated by special option. Consult your kernel and distribution manual for +more details. Other loaders like appleloader, chainloader (BIOS, EFI, coreboot), +freedos, ntldr and plan9 provide no possibility of loading initial ramdisk and +as far as author is aware the payloads in question don't support either initial +ramdisk or discovering loopback boot in other way and as such not bootable this +way. Please consider alternative boot methods like copying all files +from the image to actual partition. Consult your OS documentation for +more details + +@node OS-specific notes +@section Some caveats on OS-specific issues + +Here, we describe some caveats on several operating systems. + +@menu +* GNU/Hurd:: +* GNU/Linux:: +* NetBSD:: +* DOS/Windows:: +@end menu + + +@node GNU/Hurd +@subsection GNU/Hurd + +Since GNU/Hurd is Multiboot-compliant, it is easy to boot it; there is +nothing special about it. But do not forget that you have to specify a +root partition to the kernel. + +@enumerate +@item +Set GRUB's root device to the same drive as GNU/Hurd's. The command +@code{search --set=root --file /boot/gnumach.gz} or similar may help you +(@pxref{search}). + +@item +Load the kernel and the modules, like this: + +@example +@group +grub> @kbd{multiboot /boot/gnumach.gz root=device:hd0s1} +grub> @kbd{module /hurd/ext2fs.static ext2fs --readonly \ + --multiboot-command-line='$@{kernel-command-line@}' \ + --host-priv-port='$@{host-port@}' \ + --device-master-port='$@{device-port@}' \ + --exec-server-task='$@{exec-task@}' -T typed '$@{root@}' \ + '$(task-create)' '$(task-resume)'} +grub> @kbd{module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)'} +@end group +@end example + +@item +Finally, run the command @command{boot} (@pxref{boot}). +@end enumerate + + +@node GNU/Linux +@subsection GNU/Linux + +It is relatively easy to boot GNU/Linux from GRUB, because it somewhat +resembles to boot a Multiboot-compliant OS. + +@enumerate +@item +Set GRUB's root device to the same drive as GNU/Linux's. The command +@code{search --set=root --file /vmlinuz} or similar may help you +(@pxref{search}). + +@item +Load the kernel using the command @command{linux} (@pxref{linux}): + +@example +grub> @kbd{linux /vmlinuz root=/dev/sda1} +@end example + +If you need to specify some kernel parameters, just append them to the +command. For example, to set @option{acpi} to @samp{off}, do this: + +@example +grub> @kbd{linux /vmlinuz root=/dev/sda1 acpi=off} +@end example + +See the documentation in the Linux source tree for complete information on +the available options. + +With @command{linux} GRUB uses 32-bit protocol. Some BIOS services like APM +or EDD aren't available with this protocol. In this case you need to use +@command{linux16} + +@example +grub> @kbd{linux16 /vmlinuz root=/dev/sda1 acpi=off} +@end example + +@item +If you use an initrd, execute the command @command{initrd} (@pxref{initrd}) +after @command{linux}: + +@example +grub> @kbd{initrd /initrd} +@end example + +If you used @command{linux16} you need to use @command{initrd16}: + +@example +grub> @kbd{initrd16 /initrd} +@end example + +@item +Finally, run the command @command{boot} (@pxref{boot}). +@end enumerate + +@strong{Caution:} If you use an initrd and specify the @samp{mem=} +option to the kernel to let it use less than actual memory size, you +will also have to specify the same memory size to GRUB. To let GRUB know +the size, run the command @command{uppermem} @emph{before} loading the +kernel. @xref{uppermem}, for more information. + + +@node NetBSD +@subsection NetBSD + +Booting a NetBSD kernel from GRUB is also relatively easy: first set +GRUB's root device, then load the kernel and the modules, and finally +run @command{boot}. + +@enumerate +@item +Set GRUB's root device to the partition holding the NetBSD root file +system. For a disk with a NetBSD disk label, this is usually the first +partition (a:). In that case, and assuming that the partition is on the +first hard disk, set GRUB's root device as follows: + +@example +grub> @kbd{insmod part_bsd} +grub> @kbd{set root=(hd0,netbsd1)} +@end example + +For a disk with a GUID Partition Table (GPT), and assuming that the +NetBSD root partition is the third GPT partition, do this: + +@example +grub> @kbd{insmod part_gpt} +grub> @kbd{set root=(hd0,gpt3)} +@end example + +@item +Load the kernel using the command @command{knetbsd}: + +@example +grub> @kbd{knetbsd /netbsd} +@end example + +Various options may be given to @command{knetbsd}. These options are, +for the most part, the same as in the NetBSD boot loader. For instance, +to boot the system in single-user mode and with verbose messages, do +this: + +@example +grub> @kbd{knetbsd /netbsd -s -v} +@end example + +@item +If needed, load kernel modules with the command +@command{knetbsd_module_elf}. A typical example is the module for the +root file system: + +@example +grub> @kbd{knetbsd_module_elf /stand/amd64/6.0/modules/ffs/ffs.kmod} +@end example + +@item +Finally, run the command @command{boot} (@pxref{boot}). +@end enumerate + + +@node DOS/Windows +@subsection DOS/Windows + +GRUB cannot boot DOS or Windows directly, so you must chain-load them +(@pxref{Chain-loading}). However, their boot loaders have some critical +deficiencies, so it may not work to just chain-load them. To overcome +the problems, GRUB provides you with two helper functions. + +If you have installed DOS (or Windows) on a non-first hard disk, you +have to use the disk swapping technique, because that OS cannot boot +from any disks but the first one. The workaround used in GRUB is the +command @command{drivemap} (@pxref{drivemap}), like this: + +@example +drivemap -s (hd0) (hd1) +@end example + +This performs a @dfn{virtual} swap between your first and second hard +drive. + +@strong{Caution:} This is effective only if DOS (or Windows) uses BIOS +to access the swapped disks. If that OS uses a special driver for the +disks, this probably won't work. + +Another problem arises if you installed more than one set of DOS/Windows +onto one disk, because they could be confused if there are more than one +primary partitions for DOS/Windows. Certainly you should avoid doing +this, but there is a solution if you do want to do so. Use the partition +hiding/unhiding technique. + +If GRUB @dfn{hides} a DOS (or Windows) partition (@pxref{parttool}), DOS (or +Windows) will ignore the partition. If GRUB @dfn{unhides} a DOS (or Windows) +partition, DOS (or Windows) will detect the partition. Thus, if you have +installed DOS (or Windows) on the first and the second partition of the +first hard disk, and you want to boot the copy on the first partition, do +the following: + +@example +@group +parttool (hd0,1) hidden- +parttool (hd0,2) hidden+ +set root=(hd0,1) +chainloader +1 +parttool @verb{'${root}'} boot+ +boot +@end group +@end example + + +@node Configuration +@chapter Writing your own configuration file + +GRUB is configured using @file{grub.cfg}, usually located under +@file{/boot/grub}. This file is quite flexible, but most users will not +need to write the whole thing by hand. + +@menu +* Simple configuration:: Recommended for most users +* Shell-like scripting:: For power users and developers +* Multi-boot manual config:: For non-standard multi-OS scenarios +* Embedded configuration:: Embedding a configuration file into GRUB +@end menu + + +@node Simple configuration +@section Simple configuration handling + +The program @command{grub-mkconfig} (@pxref{Invoking grub-mkconfig}) +generates @file{grub.cfg} files suitable for most cases. It is suitable for +use when upgrading a distribution, and will discover available kernels and +attempt to generate menu entries for them. + +@command{grub-mkconfig} does have some limitations. While adding extra +custom menu entries to the end of the list can be done by editing +@file{/etc/grub.d/40_custom} or creating @file{/boot/grub/custom.cfg}, +changing the order of menu entries or changing their titles may require +making complex changes to shell scripts stored in @file{/etc/grub.d/}. This +may be improved in the future. In the meantime, those who feel that it +would be easier to write @file{grub.cfg} directly are encouraged to do so +(@pxref{Booting}, and @ref{Shell-like scripting}), and to disable any system +provided by their distribution to automatically run @command{grub-mkconfig}. + +The file @file{/etc/default/grub} controls the operation of +@command{grub-mkconfig}. It is sourced by a shell script, and so must be +valid POSIX shell input; normally, it will just be a sequence of +@samp{KEY=value} lines, but if the value contains spaces or other special +characters then it must be quoted. For example: + +@example +GRUB_TERMINAL_INPUT="console serial" +@end example + +Valid keys in @file{/etc/default/grub} are as follows: + +@table @samp +@item GRUB_DEFAULT +The default menu entry. This may be a number, in which case it identifies +the Nth entry in the generated menu counted from zero, or the title of a +menu entry, or the special string @samp{saved}. Using the id may be +useful if you want to set a menu entry as the default even though there may +be a variable number of entries before it. + +For example, if you have: + +@verbatim +menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux { + ... +} +@end verbatim + +then you can make this the default using: + +@example +GRUB_DEFAULT=example-gnu-linux +@end example + +Previously it was documented the way to use entry title. While this still +works it's not recommended since titles often contain unstable device names +and may be translated + +If you set this to @samp{saved}, then the default menu entry will be that +saved by @samp{GRUB_SAVEDEFAULT} or @command{grub-set-default}. This relies on +the environment block, which may not be available in all situations +(@pxref{Environment block}). + +The default is @samp{0}. + +@item GRUB_SAVEDEFAULT +If this option is set to @samp{true}, then, when an entry is selected, save +it as a new default entry for use by future runs of GRUB. This is only +useful if @samp{GRUB_DEFAULT=saved}; it is a separate option because +@samp{GRUB_DEFAULT=saved} is useful without this option, in conjunction with +@command{grub-set-default}. Unset by default. +This option relies on the environment block, which may not be available in +all situations (@pxref{Environment block}). + +@item GRUB_TIMEOUT +Boot the default entry this many seconds after the menu is displayed, unless +a key is pressed. The default is @samp{5}. Set to @samp{0} to boot +immediately without displaying the menu, or to @samp{-1} to wait +indefinitely. + +If @samp{GRUB_TIMEOUT_STYLE} is set to @samp{countdown} or @samp{hidden}, +the timeout is instead counted before the menu is displayed. + +@item GRUB_TIMEOUT_STYLE +If this option is unset or set to @samp{menu}, then GRUB will display the +menu and then wait for the timeout set by @samp{GRUB_TIMEOUT} to expire +before booting the default entry. Pressing a key interrupts the timeout. + +If this option is set to @samp{countdown} or @samp{hidden}, then, before +displaying the menu, GRUB will wait for the timeout set by +@samp{GRUB_TIMEOUT} to expire. If @key{ESC} is pressed during that time, it +will display the menu and wait for input. If a hotkey associated with a +menu entry is pressed, it will boot the associated menu entry immediately. +If the timeout expires before either of these happens, it will boot the +default entry. In the @samp{countdown} case, it will show a one-line +indication of the remaining time. + +@item GRUB_DEFAULT_BUTTON +@itemx GRUB_TIMEOUT_BUTTON +@itemx GRUB_TIMEOUT_STYLE_BUTTON +@itemx GRUB_BUTTON_CMOS_ADDRESS +Variants of the corresponding variables without the @samp{_BUTTON} suffix, +used to support vendor-specific power buttons. @xref{Vendor power-on keys}. + +@item GRUB_DISTRIBUTOR +Set by distributors of GRUB to their identifying name. This is used to +generate more informative menu entry titles. + +@item GRUB_TERMINAL_INPUT +Select the terminal input device. You may select multiple devices here, +separated by spaces. + +Valid terminal input names depend on the platform, but may include +@samp{console} (native platform console), @samp{serial} (serial terminal), +@samp{serial_} (serial terminal with explicit port selection), +@samp{at_keyboard} (PC AT keyboard), or @samp{usb_keyboard} (USB keyboard +using the HID Boot Protocol, for cases where the firmware does not handle +this). + +The default is to use the platform's native terminal input. + +@item GRUB_TERMINAL_OUTPUT +Select the terminal output device. You may select multiple devices here, +separated by spaces. + +Valid terminal output names depend on the platform, but may include +@samp{console} (native platform console), @samp{serial} (serial terminal), +@samp{serial_} (serial terminal with explicit port selection), +@samp{gfxterm} (graphics-mode output), @samp{vga_text} (VGA text output), +@samp{mda_text} (MDA text output), @samp{morse} (Morse-coding using system +beeper) or @samp{spkmodem} (simple data protocol using system speaker). + +@samp{spkmodem} is useful when no serial port is available. Connect the output +of sending system (where GRUB is running) to line-in of receiving system +(usually developer machine). +On receiving system compile @samp{spkmodem-recv} from +@samp{util/spkmodem-recv.c} and run: + +@example +parecord --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv +@end example + +The default is to use the platform's native terminal output. + +@item GRUB_TERMINAL +If this option is set, it overrides both @samp{GRUB_TERMINAL_INPUT} and +@samp{GRUB_TERMINAL_OUTPUT} to the same value. + +@item GRUB_SERIAL_COMMAND +A command to configure the serial port when using the serial console. +@xref{serial}. Defaults to @samp{serial}. + +@item GRUB_CMDLINE_LINUX +Command-line arguments to add to menu entries for the Linux kernel. + +@item GRUB_CMDLINE_LINUX_DEFAULT +Unless @samp{GRUB_DISABLE_RECOVERY} is set to @samp{true}, two menu +entries will be generated for each Linux kernel: one default entry and one +entry for recovery mode. This option lists command-line arguments to add +only to the default menu entry, after those listed in +@samp{GRUB_CMDLINE_LINUX}. + +@item GRUB_CMDLINE_NETBSD +@itemx GRUB_CMDLINE_NETBSD_DEFAULT +As @samp{GRUB_CMDLINE_LINUX} and @samp{GRUB_CMDLINE_LINUX_DEFAULT}, but for +NetBSD. + +@item GRUB_CMDLINE_GNUMACH +As @samp{GRUB_CMDLINE_LINUX}, but for GNU Mach. + +@item GRUB_CMDLINE_XEN +@itemx GRUB_CMDLINE_XEN_DEFAULT +The values of these options are passed to Xen hypervisor Xen menu entries, +for all respectively normal entries. + +@item GRUB_CMDLINE_LINUX_XEN_REPLACE +@item GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT +The values of these options replace the values of @samp{GRUB_CMDLINE_LINUX} +and @samp{GRUB_CMDLINE_LINUX_DEFAULT} for Linux and Xen menu entries. + +@item GRUB_DISABLE_LINUX_UUID +Normally, @command{grub-mkconfig} will generate menu entries that use +universally-unique identifiers (UUIDs) to identify the root filesystem to +the Linux kernel, using a @samp{root=UUID=...} kernel parameter. This is +usually more reliable, but in some cases it may not be appropriate. To +disable the use of UUIDs, set this option to @samp{true}. + +@item GRUB_DISABLE_RECOVERY +If this option is set to @samp{true}, disable the generation of recovery +mode menu entries. + +@item GRUB_VIDEO_BACKEND +If graphical video support is required, either because the @samp{gfxterm} +graphical terminal is in use or because @samp{GRUB_GFXPAYLOAD_LINUX} is set, +then @command{grub-mkconfig} will normally load all available GRUB video +drivers and use the one most appropriate for your hardware. If you need to +override this for some reason, then you can set this option. + +After @command{grub-install} has been run, the available video drivers are +listed in @file{/boot/grub/video.lst}. + +@item GRUB_GFXMODE +Set the resolution used on the @samp{gfxterm} graphical terminal. Note that +you can only use modes which your graphics card supports via VESA BIOS +Extensions (VBE), so for example native LCD panel resolutions may not be +available. The default is @samp{auto}, which tries to select a preferred +resolution. @xref{gfxmode}. + +@item GRUB_BACKGROUND +Set a background image for use with the @samp{gfxterm} graphical terminal. +The value of this option must be a file readable by GRUB at boot time, and +it must end with @file{.png}, @file{.tga}, @file{.jpg}, or @file{.jpeg}. +The image will be scaled if necessary to fit the screen. + +@item GRUB_THEME +Set a theme for use with the @samp{gfxterm} graphical terminal. + +@item GRUB_GFXPAYLOAD_LINUX +Set to @samp{text} to force the Linux kernel to boot in normal text mode, +@samp{keep} to preserve the graphics mode set using @samp{GRUB_GFXMODE}, +@samp{@var{width}x@var{height}}[@samp{x@var{depth}}] to set a particular +graphics mode, or a sequence of these separated by commas or semicolons to +try several modes in sequence. @xref{gfxpayload}. + +Depending on your kernel, your distribution, your graphics card, and the +phase of the moon, note that using this option may cause GNU/Linux to suffer +from various display problems, particularly during the early part of the +boot sequence. If you have problems, set this option to @samp{text} and +GRUB will tell Linux to boot in normal text mode. + +@item GRUB_DISABLE_OS_PROBER +Normally, @command{grub-mkconfig} will try to use the external +@command{os-prober} program, if installed, to discover other operating +systems installed on the same system and generate appropriate menu entries +for them. Set this option to @samp{true} to disable this. + +@item GRUB_OS_PROBER_SKIP_LIST +List of space-separated FS UUIDs of filesystems to be ignored from os-prober +output. For efi chainloaders it's @@ + +@item GRUB_DISABLE_SUBMENU +Normally, @command{grub-mkconfig} will generate top level menu entry for +the kernel with highest version number and put all other found kernels +or alternative menu entries for recovery mode in submenu. For entries returned +by @command{os-prober} first entry will be put on top level and all others +in submenu. If this option is set to @samp{y}, flat menu with all entries +on top level will be generated instead. Changing this option will require +changing existing values of @samp{GRUB_DEFAULT}, @samp{fallback} (@pxref{fallback}) +and @samp{default} (@pxref{default}) environment variables as well as saved +default entry using @command{grub-set-default} and value used with +@command{grub-reboot}. + +@item GRUB_ENABLE_CRYPTODISK +If set to @samp{y}, @command{grub-mkconfig} and @command{grub-install} will +check for encrypted disks and generate additional commands needed to access +them during boot. Note that in this case unattended boot is not possible +because GRUB will wait for passphrase to unlock encrypted container. + +@item GRUB_INIT_TUNE +Play a tune on the speaker when GRUB starts. This is particularly useful +for users unable to see the screen. The value of this option is passed +directly to @ref{play}. + +@item GRUB_BADRAM +If this option is set, GRUB will issue a @ref{badram} command to filter +out specified regions of RAM. + +@item GRUB_PRELOAD_MODULES +This option may be set to a list of GRUB module names separated by spaces. +Each module will be loaded as early as possible, at the start of +@file{grub.cfg}. + +@end table + +The following options are still accepted for compatibility with existing +configurations, but have better replacements: + +@table @samp +@item GRUB_HIDDEN_TIMEOUT +Wait this many seconds before displaying the menu. If @key{ESC} is pressed +during that time, display the menu and wait for input according to +@samp{GRUB_TIMEOUT}. If a hotkey associated with a menu entry is pressed, +boot the associated menu entry immediately. If the timeout expires before +either of these happens, display the menu for the number of seconds +specified in @samp{GRUB_TIMEOUT} before booting the default entry. + +If you set @samp{GRUB_HIDDEN_TIMEOUT}, you should also set +@samp{GRUB_TIMEOUT=0} so that the menu is not displayed at all unless +@key{ESC} is pressed. + +This option is unset by default, and is deprecated in favour of the less +confusing @samp{GRUB_TIMEOUT_STYLE=countdown} or +@samp{GRUB_TIMEOUT_STYLE=hidden}. + +@item GRUB_HIDDEN_TIMEOUT_QUIET +In conjunction with @samp{GRUB_HIDDEN_TIMEOUT}, set this to @samp{true} to +suppress the verbose countdown while waiting for a key to be pressed before +displaying the menu. + +This option is unset by default, and is deprecated in favour of the less +confusing @samp{GRUB_TIMEOUT_STYLE=countdown}. + +@item GRUB_HIDDEN_TIMEOUT_BUTTON +Variant of @samp{GRUB_HIDDEN_TIMEOUT}, used to support vendor-specific power +buttons. @xref{Vendor power-on keys}. + +This option is unset by default, and is deprecated in favour of the less +confusing @samp{GRUB_TIMEOUT_STYLE=countdown} or +@samp{GRUB_TIMEOUT_STYLE=hidden}. + +@end table + +For more detailed customisation of @command{grub-mkconfig}'s output, you may +edit the scripts in @file{/etc/grub.d} directly. +@file{/etc/grub.d/40_custom} is particularly useful for adding entire custom +menu entries; simply type the menu entries you want to add at the end of +that file, making sure to leave at least the first two lines intact. + + +@node Shell-like scripting +@section Writing full configuration files directly + +@c Some of this section is derived from the GNU Bash manual page, also +@c copyrighted by the FSF. + +@file{grub.cfg} is written in GRUB's built-in scripting language, which has +a syntax quite similar to that of GNU Bash and other Bourne shell +derivatives. + +@heading Words + +A @dfn{word} is a sequence of characters considered as a single unit by +GRUB. Words are separated by @dfn{metacharacters}, which are the following +plus space, tab, and newline: + +@example +@{ @} | & $ ; < > +@end example + +Quoting may be used to include metacharacters in words; see below. + +@heading Reserved words + +Reserved words have a special meaning to GRUB. The following words are +recognised as reserved when unquoted and either the first word of a simple +command or the third word of a @code{for} command: + +@example +! [[ ]] @{ @} +case do done elif else esac fi for function +if in menuentry select then time until while +@end example + +Not all of these reserved words have a useful purpose yet; some are reserved +for future expansion. + +@heading Quoting + +Quoting is used to remove the special meaning of certain characters or +words. It can be used to treat metacharacters as part of a word, to prevent +reserved words from being recognised as such, and to prevent variable +expansion. + +There are three quoting mechanisms: the escape character, single quotes, and +double quotes. + +A non-quoted backslash (\) is the @dfn{escape character}. It preserves the +literal value of the next character that follows, with the exception of +newline. + +Enclosing characters in single quotes preserves the literal value of each +character within the quotes. A single quote may not occur between single +quotes, even when preceded by a backslash. + +Enclosing characters in double quotes preserves the literal value of all +characters within the quotes, with the exception of @samp{$} and @samp{\}. +The @samp{$} character retains its special meaning within double quotes. +The backslash retains its special meaning only when followed by one of the +following characters: @samp{$}, @samp{"}, @samp{\}, or newline. A +backslash-newline pair is treated as a line continuation (that is, it is +removed from the input stream and effectively ignored@footnote{Currently a +backslash-newline pair within a variable name is not handled properly, so +use this feature with some care.}). A double quote may be quoted within +double quotes by preceding it with a backslash. + +@heading Variable expansion + +The @samp{$} character introduces variable expansion. The variable name to +be expanded may be enclosed in braces, which are optional but serve to +protect the variable to be expanded from characters immediately following it +which could be interpreted as part of the name. + +Normal variable names begin with an alphabetic character, followed by zero +or more alphanumeric characters. These names refer to entries in the GRUB +environment (@pxref{Environment}). + +Positional variable names consist of one or more digits. They represent +parameters passed to function calls, with @samp{$1} representing the first +parameter, and so on. + +The special variable name @samp{?} expands to the exit status of the most +recently executed command. When positional variable names are active, other +special variable names @samp{@@}, @samp{*} and @samp{#} are defined and they +expand to all positional parameters with necessary quoting, positional +parameters without any quoting, and positional parameter count respectively. + +@heading Comments + +A word beginning with @samp{#} causes that word and all remaining characters +on that line to be ignored. + +@heading Simple commands + +A @dfn{simple command} is a sequence of words separated by spaces or tabs +and terminated by a semicolon or a newline. The first word specifies the +command to be executed. The remaining words are passed as arguments to the +invoked command. + +The return value of a simple command is its exit status. If the reserved +word @code{!} precedes the command, then the return value is instead the +logical negation of the command's exit status. + +@heading Compound commands + +A @dfn{compound command} is one of the following: + +@table @asis +@item for @var{name} in @var{word} @dots{}; do @var{list}; done +The list of words following @code{in} is expanded, generating a list of +items. The variable @var{name} is set to each element of this list in turn, +and @var{list} is executed each time. The return value is the exit status +of the last command that executes. If the expansion of the items following +@code{in} results in an empty list, no commands are executed, and the return +status is 0. + +@item if @var{list}; then @var{list}; [elif @var{list}; then @var{list};] @dots{} [else @var{list};] fi +The @code{if} @var{list} is executed. If its exit status is zero, the +@code{then} @var{list} is executed. Otherwise, each @code{elif} @var{list} +is executed in turn, and if its exit status is zero, the corresponding +@code{then} @var{list} is executed and the command completes. Otherwise, +the @code{else} @var{list} is executed, if present. The exit status is the +exit status of the last command executed, or zero if no condition tested +true. + +@item while @var{cond}; do @var{list}; done +@itemx until @var{cond}; do @var{list}; done +The @code{while} command continuously executes the @code{do} @var{list} as +long as the last command in @var{cond} returns an exit status of zero. The +@code{until} command is identical to the @code{while} command, except that +the test is negated; the @code{do} @var{list} is executed as long as the +last command in @var{cond} returns a non-zero exit status. The exit status +of the @code{while} and @code{until} commands is the exit status of the last +@code{do} @var{list} command executed, or zero if none was executed. + +@item function @var{name} @{ @var{command}; @dots{} @} +This defines a function named @var{name}. The @dfn{body} of the function is +the list of commands within braces, each of which must be terminated with a +semicolon or a newline. This list of commands will be executed whenever +@var{name} is specified as the name of a simple command. Function +definitions do not affect the exit status in @code{$?}. When executed, the +exit status of a function is the exit status of the last command executed in +the body. + +@item menuentry @var{title} [@option{--class=class} @dots{}] [@option{--users=users}] [@option{--unrestricted}] [@option{--hotkey=key}] [@option{--id=id}] @{ @var{command}; @dots{} @} +@xref{menuentry}. +@end table + +@heading Built-in Commands + +Some built-in commands are also provided by GRUB script to help script +writers perform actions that are otherwise not possible. For example, these +include commands to jump out of a loop without fully completing it, etc. + +@table @asis +@item break [@code{n}] +Exit from within a @code{for}, @code{while}, or @code{until} loop. If +@code{n} is specified, break @code{n} levels. @code{n} must be greater than +or equal to 1. If @code{n} is greater than the number of enclosing loops, +all enclosing loops are exited. The return value is 0 unless @code{n} is +not greater than or equal to 1. + +@item continue [@code{n}] +Resume the next iteration of the enclosing @code{for}, @code{while} or +@code{until} loop. If @code{n} is specified, resume at the @code{n}th +enclosing loop. @code{n} must be greater than or equal to 1. If @code{n} +is greater than the number of enclosing loops, the last enclosing loop (the +@dfn{top-level} loop) is resumed. The return value is 0 unless @code{n} is +not greater than or equal to 1. + +@item return [@code{n}] +Causes a function to exit with the return value specified by @code{n}. If +@code{n} is omitted, the return status is that of the last command executed +in the function body. If used outside a function the return status is +false. + +@item setparams [@code{arg}] @dots{} +Replace positional parameters starting with @code{$1} with arguments to +@command{setparams}. + +@item shift [@code{n}] +The positional parameters from @code{n}+1 @dots{} are renamed to +@code{$1}@dots{}. Parameters represented by the numbers @code{$#} down to +@code{$#}-@code{n}+1 are unset. @code{n} must be a non-negative number less +than or equal to @code{$#}. If @code{n} is 0, no parameters are changed. +If @code{n} is not given, it is assumed to be 1. If @code{n} is greater +than @code{$#}, the positional parameters are not changed. The return +status is greater than zero if @code{n} is greater than @code{$#} or less +than zero; otherwise 0. + +@end table + +@node Multi-boot manual config +@section Multi-boot manual config + +Currently autogenerating config files for multi-boot environments depends on +os-prober and has several shortcomings. While fixing it is scheduled for the +next release, meanwhile you can make use of the power of GRUB syntax and do it +yourself. A possible configuration is detailed here, feel free to adjust to your +needs. + +First create a separate GRUB partition, big enough to hold GRUB. Some of the +following entries show how to load OS installer images from this same partition, +for that you obviously need to make the partition large enough to hold those +images as well. +Mount this partition on/mnt/boot and disable GRUB in all OSes and manually +install self-compiled latest GRUB with: + +@code{grub-install --boot-directory=/mnt/boot /dev/sda} + +In all the OSes install GRUB tools but disable installing GRUB in bootsector, +so you'll have menu.lst and grub.cfg available for use. Also disable os-prober +use by setting: + +@code{GRUB_DISABLE_OS_PROBER=true} + +in /etc/default/grub + +Then write a grub.cfg (/mnt/boot/grub/grub.cfg): + +@example + +menuentry "OS using grub2" @{ + insmod xfs + search --set=root --label OS1 --hint hd0,msdos8 + configfile /boot/grub/grub.cfg +@} + +menuentry "OS using grub2-legacy" @{ + insmod ext2 + search --set=root --label OS2 --hint hd0,msdos6 + legacy_configfile /boot/grub/menu.lst +@} + +menuentry "Windows XP" @{ + insmod ntfs + search --set=root --label WINDOWS_XP --hint hd0,msdos1 + ntldr /ntldr +@} + +menuentry "Windows 7" @{ + insmod ntfs + search --set=root --label WINDOWS_7 --hint hd0,msdos2 + ntldr /bootmgr +@} + +menuentry "FreeBSD" @{ + insmod zfs + search --set=root --label freepool --hint hd0,msdos7 + kfreebsd /freebsd@@/boot/kernel/kernel + kfreebsd_module_elf /freebsd@@/boot/kernel/opensolaris.ko + kfreebsd_module_elf /freebsd@@/boot/kernel/zfs.ko + kfreebsd_module /freebsd@@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + set kFreeBSD.vfs.root.mountfrom=zfs:freepool/freebsd + set kFreeBSD.hw.psm.synaptics_support=1 +@} + +menuentry "experimental GRUB" @{ + search --set=root --label GRUB --hint hd0,msdos5 + multiboot /experimental/grub/i386-pc/core.img +@} + +menuentry "Fedora 16 installer" @{ + search --set=root --label GRUB --hint hd0,msdos5 + linux /fedora/vmlinuz lang=en_US keymap=sg resolution=1280x800 + initrd /fedora/initrd.img +@} + +menuentry "Fedora rawhide installer" @{ + search --set=root --label GRUB --hint hd0,msdos5 + linux /fedora/vmlinuz repo=ftp://mirror.switch.ch/mirror/fedora/linux/development/rawhide/x86_64 lang=en_US keymap=sg resolution=1280x800 + initrd /fedora/initrd.img +@} + +menuentry "Debian sid installer" @{ + search --set=root --label GRUB --hint hd0,msdos5 + linux /debian/dists/sid/main/installer-amd64/current/images/hd-media/vmlinuz + initrd /debian/dists/sid/main/installer-amd64/current/images/hd-media/initrd.gz +@} + +@end example + +Notes: +@itemize +@item Argument to search after --label is FS LABEL. You can also use UUIDs with --fs-uuid UUID instead of --label LABEL. You could also use direct @code{root=hd0,msdosX} but this is not recommended due to device name instability. +@end itemize + +@node Embedded configuration +@section Embedding a configuration file into GRUB + +GRUB supports embedding a configuration file directly into the core image, +so that it is loaded before entering normal mode. This is useful, for +example, when it is not straightforward to find the real configuration file, +or when you need to debug problems with loading that file. +@command{grub-install} uses this feature when it is not using BIOS disk +functions or when installing to a different disk from the one containing +@file{/boot/grub}, in which case it needs to use the @command{search} +command (@pxref{search}) to find @file{/boot/grub}. + +To embed a configuration file, use the @option{-c} option to +@command{grub-mkimage}. The file is copied into the core image, so it may +reside anywhere on the file system, and may be removed after running +@command{grub-mkimage}. + +After the embedded configuration file (if any) is executed, GRUB will load +the @samp{normal} module (@pxref{normal}), which will then read the real +configuration file from @file{$prefix/grub.cfg}. By this point, the +@code{root} variable will also have been set to the root device name. For +example, @code{prefix} might be set to @samp{(hd0,1)/boot/grub}, and +@code{root} might be set to @samp{hd0,1}. Thus, in most cases, the embedded +configuration file only needs to set the @code{prefix} and @code{root} +variables, and then drop through to GRUB's normal processing. A typical +example of this might look like this: + +@example +@group +search.fs_uuid 01234567-89ab-cdef-0123-456789abcdef root +set prefix=($root)/boot/grub +@end group +@end example + +(The @samp{search_fs_uuid} module must be included in the core image for this +example to work.) + +In more complex cases, it may be useful to read other configuration files +directly from the embedded configuration file. This allows such things as +reading files not called @file{grub.cfg}, or reading files from a directory +other than that where GRUB's loadable modules are installed. To do this, +include the @samp{configfile} and @samp{normal} modules in the core image, +and embed a configuration file that uses the @command{configfile} command to +load another file. The following example of this also requires the +@command{echo}, @command{search_label}, and @command{test} modules to be +included in the core image: + +@example +@group +search.fs_label grub root +if [ -e /boot/grub/example/test1.cfg ]; then + set prefix=($root)/boot/grub + configfile /boot/grub/example/test1.cfg +else + if [ -e /boot/grub/example/test2.cfg ]; then + set prefix=($root)/boot/grub + configfile /boot/grub/example/test2.cfg + else + echo "Could not find an example configuration file!" + fi +fi +@end group +@end example + +The embedded configuration file may not contain menu entries directly, but +may only read them from elsewhere using @command{configfile}. + +@node Theme file format +@chapter Theme file format +@section Introduction +The GRUB graphical menu supports themes that can customize the layout and +appearance of the GRUB boot menu. The theme is configured through a plain +text file that specifies the layout of the various GUI components (including +the boot menu, timeout progress bar, and text messages) as well as the +appearance using colors, fonts, and images. Example is available in docs/example_theme.txt + +@section Theme Elements +@subsection Colors + +Colors can be specified in several ways: + +@itemize +@item HTML-style ``#RRGGBB'' or ``#RGB'' format, where *R*, *G*, and *B* are hexadecimal digits (e.g., ``#8899FF'') +@item as comma-separated decimal RGB values (e.g., ``128, 128, 255'') +@item with ``SVG 1.0 color names'' (e.g., ``cornflowerblue'') which must be specified in lowercase. +@end itemize +@subsection Fonts +The fonts GRUB uses ``PFF2 font format'' bitmap fonts. Fonts are specified +with full font names. Currently there is no +provision for a preference list of fonts, or deriving one font from another. +Fonts are loaded with the ``loadfont'' command in GRUB (@ref{loadfont}). To see the list of +loaded fonts, execute the ``lsfonts'' command (@ref{lsfonts}). If there are too many fonts to +fit on screen, do ``set pager=1'' before executing ``lsfonts''. + + +@subsection Progress Bar + +@float Figure, Pixmap-styled progress bar +@c @image{Theme_progress_bar,,,,png} +@end float + +@float Figure, Plain progress bar, drawn with solid color. +@c @image{Theme_progress_bar_filled,,,,png} +@end float + +Progress bars are used to display the remaining time before GRUB boots the +default menu entry. To create a progress bar that will display the remaining +time before automatic boot, simply create a ``progress_bar'' component with +the id ``__timeout__''. This indicates to GRUB that the progress bar should +be updated as time passes, and it should be made invisible if the countdown to +automatic boot is interrupted by the user. + +Progress bars may optionally have text displayed on them. This text is +controlled by variable ``text'' which contains a printf template with the +only argument %d is the number of seconds remaining. Additionally special +values ``@@TIMEOUT_NOTIFICATION_SHORT@@'', ``@@TIMEOUT_NOTIFICATION_MIDDLE@@'', +``@@TIMEOUT_NOTIFICATION_LONG@@'' are replaced with standard and translated +templates. + +@subsection Circular Progress Indicator + +@c @image{Theme_circular_progress,,,,.png} + +The circular progress indicator functions similarly to the progress bar. When +given an id of ``__timeout__'', GRUB updates the circular progress indicator's +value to indicate the time remaining. For the circular progress indicator, +there are two images used to render it: the *center* image, and the *tick* +image. The center image is rendered in the center of the component, while the +tick image is used to render each mark along the circumference of the +indicator. + + +@subsection Labels + +Text labels can be placed on the boot screen. The font, color, and horizontal +alignment can be specified for labels. If a label is given the id +``__timeout__'', then the ``text'' property for that label is also updated +with a message informing the user of the number of seconds remaining until +automatic boot. This is useful in case you want the text displayed somewhere +else instead of directly on the progress bar. + + +@subsection Boot Menu + +@c @image{Theme_boot_menu,,,,.png} + +The boot menu where GRUB displays the menu entries from the ``grub.cfg'' file. +It is a list of items, where each item has a title and an optional icon. The +icon is selected based on the *classes* specified for the menu entry. If +there is a PNG file named ``myclass.png'' in the ``grub/themes/icons'' +directory, it will be displayed for items which have the class *myclass*. The +boot menu can be customized in several ways, such as the font and color used +for the menu entry title, and by specifying styled boxes for the menu itself +and for the selected item highlight. + + +@subsection Styled Boxes + +One of the most important features for customizing the layout is the use of + *styled boxes*. A styled box is composed of 9 rectangular (and potentially +empty) regions, which are used to seamlessly draw the styled box on screen: + +@multitable @columnfractions 0.3 0.3 0.3 +@item Northwest (nw) @tab North (n) @tab Northeast (ne) +@item West (w) @tab Center (c) @tab East (e) +@item Southwest (sw) @tab South (s) @tab Southeast (se) +@end multitable + +To support any size of box on screen, the center slice and the slices for the +top, bottom, and sides are all scaled to the correct size for the component on +screen, using the following rules: + +@enumerate +@item The edge slices (north, south, east, and west) are scaled in the direction of the edge they are adjacent to. For instance, the west slice is scaled vertically. +@item The corner slices (northwest, northeast, southeast, and southwest) are not scaled. +@item The center slice is scaled to fill the remaining space in the middle. +@end enumerate + +As an example of how an image might be sliced up, consider the styled box +used for a terminal view. + +@float Figure, An example of the slices (in red) used for a terminal window. This drawing was created and sliced in Inkscape_, as the next section explains. +@c @image{Box_slice_example_terminal,,,,.png} +@end float + +@subsection Creating Styled Box Images + +The Inkscape_ scalable vector graphics editor is a very useful tool for +creating styled box images. One process that works well for slicing a drawing +into the necessary image slices is: + +@enumerate +@item Create or open the drawing you'd like use. +@item Create a new layer on the top of the layer stack. Make it visible. Select this layer as the current layer. +@item Draw 9 rectangles on your drawing where you'd like the slices to be. Clear the fill option, and set the stroke to 1 pixel wide solid stroke. The corners of the slices must meet precisely; if it is off by a single pixel, it will probably be evident when the styled box is rendered in the GRUB menu. You should probably go to File | Document Properties | Grids and enable a grid or create a guide (click on one of the rulers next to the drawing and drag over the drawing; release the mouse button to place the guide) to help place the rectangles precisely. +@item Right click on the center slice rectangle and choose Object Properties. Change the "Id" to ``slice_c`` and click Set. Repeat this for the remaining 8 rectangles, giving them Id values of ``slice_n``, ``slice_ne``, ``slice_e``, and so on according to the location. +@item Save the drawing. +@item Select all the slice rectangles. With the slice layer selected, you can simply press Ctrl+A to select all rectangles. The status bar should indicate that 9 rectangles are selected. +@item Click the layer hide icon for the slice layer in the layer palette. The rectangles will remain selected, even though they are hidden. +@item Choose File | Export Bitmap and check the *Batch export 9 selected objects* box. Make sure that *Hide all except selected* is unchecked. click *Export*. This will create PNG files in the same directory as the drawing, named after the slices. These can now be used for a styled box in a GRUB theme. +@end enumerate + +@section Theme File Manual + +The theme file is a plain text file. Lines that begin with ``#`` are ignored +and considered comments. (Note: This may not be the case if the previous line +ended where a value was expected.) + +The theme file contains two types of statements: +@enumerate +@item Global properties. +@item Component construction. +@end enumerate + +@subsection Global Properties + +@subsection Format + +Global properties are specified with the simple format: +@itemize +@item name1: value1 +@item name2: "value which may contain spaces" +@item name3: #88F +@end itemize + +In this example, name3 is assigned a color value. + + +@subsection Global Property List + +@multitable @columnfractions 0.3 0.6 +@item title-text + @tab Specifies the text to display at the top center of the screen as a title. +@item title-font + @tab Defines the font used for the title message at the top of the screen. +@item title-color + @tab Defines the color of the title message. +@item message-font + @tab Currently unused. Left for backward compatibility. +@item message-color + @tab Currently unused. Left for backward compatibility. +@item message-bg-color + @tab Currently unused. Left for backward compatibility. +@item desktop-image + @tab Specifies the image to use as the background. It will be scaled + to fit the screen size or proportionally scaled depending on the scale + method. +@item desktop-image-scale-method + @tab Specifies the scaling method for the *desktop-image*. Options are + ``stretch``, ``crop``, ``padding``, ``fitwidth``, ``fitheight``. + ``stretch`` for fitting the screen size. Otherwise it is proportional + scaling of a part of *desktop-image* to the part of the screen. + ``crop`` part of the *desktop-image* will be proportionally scaled to + fit the screen sizes. ``padding`` the entire *desktop-image* will be + contained on the screen. ``fitwidth`` for fitting the *desktop-image*'s + width with screen width. ``fitheight`` for fitting the *desktop-image*'s + height with the screen height. Default is ``stretch``. +@item desktop-image-h-align + @tab Specifies the horizontal alignment of the *desktop-image* if + *desktop-image-scale-method* isn't equeal to ``stretch``. Options are + ``left``, ``center``, ``right``. Default is ``center``. +@item desktop-image-v-align + @tab Specifies the vertical alignment of the *desktop-image* if + *desktop-image-scale-method* isn't equeal to ``stretch``. Options are + ``top``, ``center``, ``bottom``. Default is ``center``. +@item desktop-color + @tab Specifies the color for the background if *desktop-image* is not + specified. +@item terminal-box + @tab Specifies the file name pattern for the styled box slices used for the + command line terminal window. For example, ``terminal-box: terminal_*.png`` + will use the images ``terminal_c.png`` as the center area, ``terminal_n.png`` + as the north (top) edge, ``terminal_nw.png`` as the northwest (upper left) + corner, and so on. If the image for any slice is not found, it will simply + be left empty. +@item terminal-border + @tab Specifies the border width of the terminal window. +@item terminal-left + @tab Specifies the left coordinate of the terminal window. +@item terminal-top + @tab Specifies the top coordinate of the terminal window. +@item terminal-width + @tab Specifies the width of the terminal window. +@item terminal-height + @tab Specifies the height of the terminal window. +@end multitable + + +@subsection Component Construction + +Greater customizability comes is provided by components. A tree of components +forms the user interface. *Containers* are components that can contain other +components, and there is always a single root component which is an instance +of a *canvas* container. + +Components are created in the theme file by prefixing the type of component +with a '+' sign: + +@code{ + label @{ text="GRUB" font="aqui 11" color="#8FF" @} } + +properties of a component are specified as "name = value" (whitespace +surrounding tokens is optional and is ignored) where *value* may be: +@itemize +@item a single word (e.g., ``align = center``, ``color = #FF8080``), +@item a quoted string (e.g., ``text = "Hello, World!"``), or +@item a tuple (e.g., ``preferred_size = (120, 80)``). +@end itemize + +@subsection Component List + +The following is a list of the components and the properties they support. + +@itemize +@item label + A label displays a line of text. + + Properties: + @multitable @columnfractions 0.2 0.7 + @item id + @tab Set to ``__timeout__`` to display the time elapsed to an automatical + boot of the default entry. + @item text + @tab The text to display. If ``id`` is set to ``__timeout__`` and no + ``text`` property is set then the amount of seconds will be shown. + If set to ``@@KEYMAP_SHORT@@``, ``@@KEYMAP_MIDDLE@@`` or + ``@@KEYMAP_LONG@@`` then predefined hotkey information will be shown. + @item font + @tab The font to use for text display. + @item color + @tab The color of the text. + @item align + @tab The horizontal alignment of the text within the component. + Options are ``left``, ``center`` and ``right``. + @item visible + @tab Set to ``false`` to hide the label. + @end multitable + +@item image + A component that displays an image. The image is scaled to fit + the component. + + Properties: + + @multitable @columnfractions 0.2 0.7 + @item file + @tab The full path to the image file to load. + @end multitable + +@item progress_bar + Displays a horizontally oriented progress bar. It can be rendered using + simple solid filled rectangles, or using a pair of pixmap styled boxes. + + Properties: + + @multitable @columnfractions 0.2 0.7 + @item id + @tab Set to ``__timeout__`` to display the time elapsed to an automatical + boot of the default entry. + @item fg_color + @tab The foreground color for plain solid color rendering. + @item bg_color + @tab The background color for plain solid color rendering. + @item border_color + @tab The border color for plain solid color rendering. + @item text_color + @tab The text color. + @item bar_style + @tab The styled box specification for the frame of the progress bar. + Example: ``progress_frame_*.png`` + If the value is equal to ``highlight_style`` then no styled boxes + will be shown. + @item highlight_style + @tab The styled box specification for the highlighted region of the + progress bar. This box will be used to paint just the highlighted region + of the bar, and will be increased in size as the bar nears completion. + Example: ``progress_hl_*.png``. + If the value is equal to ``bar_style`` then no styled boxes + will be shown. + @item highlight_overlay + @tab If this option is set to ``true`` then the highlight box + side slices (every slice except the center slice) will overlay the + frame box side slices. And the center slice of the highlight box + can move all the way (from top to bottom), being drawn on the center + slice of the frame box. That way we can make a progress bar with + round-shaped edges so there won't be a free space from the highlight to + the frame in top and bottom scrollbar positions. Default is ``false``. + @item font + @tab The font to use for progress bar. + @item text + @tab The text to display on the progress bar. If the progress bar's ID + is set to ``__timeout__`` and the value of this property is set to + ``@@TIMEOUT_NOTIFICATION_SHORT@@``, ``@@TIMEOUT_NOTIFICATION_MIDDLE@@`` + or ``@@TIMEOUT_NOTIFICATION_LONG@@``, then GRUB will update this + property with an informative message as the timeout approaches. + @end multitable + +@item circular_progress + Displays a circular progress indicator. The appearance of this component + is determined by two images: the *center* image and the *tick* image. The + center image is generally larger and will be drawn in the center of the + component. Around the circumference of a circle within the component, the + tick image will be drawn a certain number of times, depending on the + properties of the component. + + Properties: + + @multitable @columnfractions 0.3 0.6 + @item id + @tab Set to ``__timeout__`` to display the time elapsed to an automatical + boot of the default entry. + @item center_bitmap + @tab The file name of the image to draw in the center of the component. + @item tick_bitmap + @tab The file name of the image to draw for the tick marks. + @item num_ticks + @tab The number of ticks that make up a full circle. + @item ticks_disappear + @tab Boolean value indicating whether tick marks should progressively appear, + or progressively disappear as *value* approaches *end*. Specify + ``true`` or ``false``. Default is ``false``. + @item start_angle + @tab The position of the first tick mark to appear or disappear. + Measured in "parrots", 1 "parrot" = 1 / 256 of the full circle. + Use values ``xxx deg`` or ``xxx \xc2\xb0`` to set the angle in degrees. + @end multitable + +@item boot_menu + Displays the GRUB boot menu. It allows selecting items and executing them. + + Properties: + + @multitable @columnfractions 0.4 0.5 + @item item_font + @tab The font to use for the menu item titles. + @item selected_item_font + @tab The font to use for the selected menu item, or ``inherit`` (the default) + to use ``item_font`` for the selected menu item as well. + @item item_color + @tab The color to use for the menu item titles. + @item selected_item_color + @tab The color to use for the selected menu item, or ``inherit`` (the default) + to use ``item_color`` for the selected menu item as well. + @item icon_width + @tab The width of menu item icons. Icons are scaled to the specified size. + @item icon_height + @tab The height of menu item icons. + @item item_height + @tab The height of each menu item in pixels. + @item item_padding + @tab The amount of space in pixels to leave on each side of the menu item + contents. + @item item_icon_space + @tab The space between an item's icon and the title text, in pixels. + @item item_spacing + @tab The amount of space to leave between menu items, in pixels. + @item menu_pixmap_style + @tab The image file pattern for the menu frame styled box. + Example: ``menu_*.png`` (this will use images such as ``menu_c.png``, + ``menu_w.png``, `menu_nw.png``, etc.) + @item item_pixmap_style + @tab The image file pattern for the item styled box. + @item selected_item_pixmap_style + @tab The image file pattern for the selected item highlight styled box. + @item scrollbar + @tab Boolean value indicating whether the scroll bar should be drawn if the + frame and thumb styled boxes are configured. + @item scrollbar_frame + @tab The image file pattern for the entire scroll bar. + Example: ``scrollbar_*.png`` + @item scrollbar_thumb + @tab The image file pattern for the scroll bar thumb (the part of the scroll + bar that moves as scrolling occurs). + Example: ``scrollbar_thumb_*.png`` + @item scrollbar_thumb_overlay + @tab If this option is set to ``true`` then the scrollbar thumb + side slices (every slice except the center slice) will overlay the + scrollbar frame side slices. And the center slice of the scrollbar_thumb + can move all the way (from top to bottom), being drawn on the center + slice of the scrollbar frame. That way we can make a scrollbar with + round-shaped edges so there won't be a free space from the thumb to + the frame in top and bottom scrollbar positions. Default is ``false``. + @item scrollbar_slice + @tab The menu frame styled box's slice in which the scrollbar will be + drawn. Possible values are ``west``, ``center``, ``east`` (default). + ``west`` - the scrollbar will be drawn in the west slice (right-aligned). + ``east`` - the scrollbar will be drawn in the east slice (left-aligned). + ``center`` - the scrollbar will be drawn in the center slice. + Note: in case of ``center`` slice: + a) If the scrollbar should be drawn then boot menu entry's width is + decreased by the scrollbar's width and the scrollbar is drawn at the + right side of the center slice. + b) If the scrollbar won't be drawn then the boot menu entry's width + is the width of the center slice. + c) We don't necessary need the menu pixmap box to display the scrollbar. + @item scrollbar_left_pad + @tab The left scrollbar padding in pixels. + Unused if ``scrollbar_slice`` is ``west``. + @item scrollbar_right_pad + @tab The right scrollbar padding in pixels. + Unused if ``scrollbar_slice`` is ``east``. + @item scrollbar_top_pad + @tab The top scrollbar padding in pixels. + @item scrollbar_bottom_pad + @tab The bottom scrollbar padding in pixels. + @item visible + @tab Set to ``false`` to hide the boot menu. + @end multitable + +@item canvas + Canvas is a container that allows manual placement of components within it. + It does not alter the positions of its child components. It assigns all + child components their preferred sizes. + +@item hbox + The *hbox* container lays out its children from left to right, giving each + one its preferred width. The height of each child is set to the maximum of + the preferred heights of all children. + +@item vbox + The *vbox* container lays out its children from top to bottom, giving each + one its preferred height. The width of each child is set to the maximum of + the preferred widths of all children. +@end itemize + + +@subsection Common properties + +The following properties are supported by all components: +@table @samp +@item left + The distance from the left border of container to left border of the object in either of three formats: + @multitable @columnfractions 0.2 0.7 + @item x @tab Value in pixels + @item p% @tab Percentage + @item p%+x @tab mixture of both + @end multitable +@item top + The distance from the left border of container to left border of the object in same format. +@item width + The width of object in same format. +@item height + The height of object in same format. +@item id + The identifier for the component. This can be any arbitrary string. + The ID can be used by scripts to refer to various components in the GUI + component tree. Currently, there is one special ID value that GRUB + recognizes: + + @multitable @columnfractions 0.2 0.7 + @item ``__timeout__`` + @tab Component with this ID will be updated by GRUB and will indicate + time elapsed to an automatical boot of the default entry. + Affected components: ``label``, ``circular_progress``, ``progress_bar``. + @end multitable +@end table + + + +@node Network +@chapter Booting GRUB from the network + +The following instructions don't work for *-emu, i386-qemu, i386-coreboot, +i386-multiboot, mips_loongson, mips-arc and mips_qemu_mips + +To generate a netbootable directory, run: + +@example +@group +grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/ +@end group +@end example + +E.g. for i386-pc: + +@example +@group +grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/i386-pc +@end group +@end example + +Then follow instructions printed out by grub-mknetdir on configuring your DHCP +server. + +After GRUB has started, files on the TFTP server will be accessible via the +@samp{(tftp)} device. + +The server IP address can be controlled by changing the +@samp{(tftp)} device name to @samp{(tftp,@var{server-ip})}. Note that +this should be changed both in the prefix and in any references to the +device name in the configuration file. + +GRUB provides several environment variables which may be used to inspect or +change the behaviour of the PXE device. In the following description +@var{} is placeholder for the name of network interface (platform +dependent): + +@table @samp +@item net_@var{}_ip +The network interface's IP address. Read-only. + +@item net_@var{}_mac +The network interface's MAC address. Read-only. + +@item net_@var{}_hostname +The client host name provided by DHCP. Read-only. + +@item net_@var{}_domain +The client domain name provided by DHCP. Read-only. + +@item net_@var{}_rootpath +The path to the client's root disk provided by DHCP. Read-only. + +@item net_@var{}_extensionspath +The path to additional DHCP vendor extensions provided by DHCP. Read-only. + +@item net_@var{}_boot_file +The boot file name provided by DHCP. Read-only. + +@item net_@var{}_dhcp_server_name +The name of the DHCP server responsible for these boot parameters. +Read-only. + +@item net_@var{}_next_server +The IP address of the next (usually, TFTP) server provided by DHCP. +Read-only. + +@item net_default_interface +Initially set to name of network interface that was used to load grub. +Read-write, although setting it affects only interpretation of +@samp{net_default_ip} and @samp{net_default_mac} + +@item net_default_ip +The IP address of default interface. Read-only. This is alias for the +@samp{net_$@{net_default_interface@}_ip}. + +@item net_default_mac +The default interface's MAC address. Read-only. This is alias for the +@samp{net_$@{net_default_interface@}_mac}. + +@item net_default_server +The default server used by network drives (@pxref{Device syntax}). Read-write, +although setting this is only useful before opening a network device. + +@end table + + +@node Serial terminal +@chapter Using GRUB via a serial line + +This chapter describes how to use the serial terminal support in GRUB. + +If you have many computers or computers with no display/keyboard, it +could be very useful to control the computers through serial +communications. To connect one computer with another via a serial line, +you need to prepare a null-modem (cross) serial cable, and you may need +to have multiport serial boards, if your computer doesn't have extra +serial ports. In addition, a terminal emulator is also required, such as +minicom. Refer to a manual of your operating system, for more +information. + +As for GRUB, the instruction to set up a serial terminal is quite +simple. Here is an example: + +@example +@group +grub> @kbd{serial --unit=0 --speed=9600} +grub> @kbd{terminal_input serial; terminal_output serial} +@end group +@end example + +The command @command{serial} initializes the serial unit 0 with the +speed 9600bps. The serial unit 0 is usually called @samp{COM1}, so, if +you want to use COM2, you must specify @samp{--unit=1} instead. This +command accepts many other options, so please refer to @ref{serial}, +for more details. + +The commands @command{terminal_input} (@pxref{terminal_input}) and +@command{terminal_output} (@pxref{terminal_output}) choose which type of +terminal you want to use. In the case above, the terminal will be a +serial terminal, but you can also pass @code{console} to the command, +as @samp{terminal_input serial console}. In this case, a terminal in which +you press any key will be selected as a GRUB terminal. In the example above, +note that you need to put both commands on the same command line, as you +will lose the ability to type commands on the console after the first +command. + +However, note that GRUB assumes that your terminal emulator is +compatible with VT100 by default. This is true for most terminal +emulators nowadays, but you should pass the option @option{--dumb} to +the command if your terminal emulator is not VT100-compatible or +implements few VT100 escape sequences. If you specify this option then +GRUB provides you with an alternative menu interface, because the normal +menu requires several fancy features of your terminal. + + +@node Vendor power-on keys +@chapter Using GRUB with vendor power-on keys + +Some laptop vendors provide an additional power-on button which boots +another OS. GRUB supports such buttons with the @samp{GRUB_TIMEOUT_BUTTON}, +@samp{GRUB_TIMEOUT_STYLE_BUTTON}, @samp{GRUB_DEFAULT_BUTTON}, and +@samp{GRUB_BUTTON_CMOS_ADDRESS} variables in default/grub (@pxref{Simple +configuration}). @samp{GRUB_TIMEOUT_BUTTON}, +@samp{GRUB_TIMEOUT_STYLE_BUTTON}, and @samp{GRUB_DEFAULT_BUTTON} are used +instead of the corresponding variables without the @samp{_BUTTON} suffix +when powered on using the special button. @samp{GRUB_BUTTON_CMOS_ADDRESS} +is vendor-specific and partially model-specific. Values known to the GRUB +team are: + +@table @key +@item Dell XPS M1330M +121:3 +@item Dell XPS M1530 +85:3 +@item Dell Latitude E4300 +85:3 +@item Asus EeePC 1005PE +84:1 (unconfirmed) +@item LENOVO ThinkPad T410s (2912W1C) +101:3 +@end table + +To take full advantage of this function, install GRUB into the MBR +(@pxref{Installing GRUB using grub-install}). + +If you have a laptop which has a similar feature and not in the above list +could you figure your address and contribute? +To discover the address do the following: +@itemize +@item boot normally +@item +@example +sudo modprobe nvram +sudo cat /dev/nvram | xxd > normal_button.txt +@end example +@item boot using vendor button +@item +@example +sudo modprobe nvram +sudo cat /dev/nvram | xxd > normal_vendor.txt +@end example +@end itemize + +Then compare these text files and find where a bit was toggled. E.g. in +case of Dell XPS it was: +@example +byte 0x47: 20 --> 28 +@end example +It's a bit number 3 as seen from following table: +@multitable @columnfractions .2 .2 +@item 0 @tab 01 +@item 1 @tab 02 +@item 2 @tab 04 +@item 3 @tab 08 +@item 4 @tab 10 +@item 5 @tab 20 +@item 6 @tab 40 +@item 7 @tab 80 +@end multitable + +0x47 is decimal 71. Linux nvram implementation cuts first 14 bytes of +CMOS. So the real byte address in CMOS is 71+14=85 +So complete address is 85:3 + +@node Images +@chapter GRUB image files + +@c FIXME: parts of this section are specific to PC BIOS right now. + +GRUB consists of several images: a variety of bootstrap images for starting +GRUB in various ways, a kernel image, and a set of modules which are +combined with the kernel image to form a core image. Here is a short +overview of them. + +@table @file +@item boot.img +On PC BIOS systems, this image is the first part of GRUB to start. It is +written to a master boot record (MBR) or to the boot sector of a partition. +Because a PC boot sector is 512 bytes, the size of this image is exactly 512 +bytes. + +The sole function of @file{boot.img} is to read the first sector of the core +image from a local disk and jump to it. Because of the size restriction, +@file{boot.img} cannot understand any file system structure, so +@command{grub-install} hardcodes the location of the first sector of the +core image into @file{boot.img} when installing GRUB. + +@item diskboot.img +This image is used as the first sector of the core image when booting from a +hard disk. It reads the rest of the core image into memory and starts the +kernel. Since file system handling is not yet available, it encodes the +location of the core image using a block list format. + +@item cdboot.img +This image is used as the first sector of the core image when booting from a +CD-ROM drive. It performs a similar function to @file{diskboot.img}. + +@item pxeboot.img +This image is used as the start of the core image when booting from the +network using PXE. @xref{Network}. + +@item lnxboot.img +This image may be placed at the start of the core image in order to make +GRUB look enough like a Linux kernel that it can be booted by LILO using an +@samp{image=} section. + +@item kernel.img +This image contains GRUB's basic run-time facilities: frameworks for device +and file handling, environment variables, the rescue mode command-line +parser, and so on. It is rarely used directly, but is built into all core +images. + +@item core.img +This is the core image of GRUB. It is built dynamically from the kernel +image and an arbitrary list of modules by the @command{grub-mkimage} +program. Usually, it contains enough modules to access @file{/boot/grub}, +and loads everything else (including menu handling, the ability to load +target operating systems, and so on) from the file system at run-time. The +modular design allows the core image to be kept small, since the areas of +disk where it must be installed are often as small as 32KB. + +@xref{BIOS installation}, for details on where the core image can be +installed on PC systems. + +@item *.mod +Everything else in GRUB resides in dynamically loadable modules. These are +often loaded automatically, or built into the core image if they are +essential, but may also be loaded manually using the @command{insmod} +command (@pxref{insmod}). +@end table + +@heading For GRUB Legacy users + +GRUB 2 has a different design from GRUB Legacy, and so correspondences with +the images it used cannot be exact. Nevertheless, GRUB Legacy users often +ask questions in the terms they are familiar with, and so here is a brief +guide to how GRUB 2's images relate to that. + +@table @file +@item stage1 +Stage 1 from GRUB Legacy was very similar to @file{boot.img} in GRUB 2, and +they serve the same function. + +@item *_stage1_5 +In GRUB Legacy, Stage 1.5's function was to include enough filesystem code +to allow the much larger Stage 2 to be read from an ordinary filesystem. In +this respect, its function was similar to @file{core.img} in GRUB 2. +However, @file{core.img} is much more capable than Stage 1.5 was; since it +offers a rescue shell, it is sometimes possible to recover manually in the +event that it is unable to load any other modules, for example if partition +numbers have changed. @file{core.img} is built in a more flexible way, +allowing GRUB 2 to support reading modules from advanced disk types such as +LVM and RAID. + +GRUB Legacy could run with only Stage 1 and Stage 2 in some limited +configurations, while GRUB 2 requires @file{core.img} and cannot work +without it. + +@item stage2 +GRUB 2 has no single Stage 2 image. Instead, it loads modules from +@file{/boot/grub} at run-time. + +@item stage2_eltorito +In GRUB 2, images for booting from CD-ROM drives are now constructed using +@file{cdboot.img} and @file{core.img}, making sure that the core image +contains the @samp{iso9660} module. It is usually best to use the +@command{grub-mkrescue} program for this. + +@item nbgrub +There is as yet no equivalent for @file{nbgrub} in GRUB 2; it was used by +Etherboot and some other network boot loaders. + +@item pxegrub +In GRUB 2, images for PXE network booting are now constructed using +@file{pxeboot.img} and @file{core.img}, making sure that the core image +contains the @samp{pxe} and @samp{pxecmd} modules. @xref{Network}. +@end table + +@node Core image size limitation +@chapter Core image size limitation + +Heavily limited platforms: +@itemize +@item i386-pc (normal and PXE): the core image size (compressed) is limited by 458240 bytes. + kernel.img (.text + .data + .bss, uncompressed) is limited by 392704 bytes. + module size (uncompressed) + kernel.img (.text + .data, uncompressed) is limited by the size of contiguous chunk at 1M address. +@item sparc64-ieee1275: kernel.img (.text + .data + .bss) + modules + 256K (stack) + 2M (heap) is limited by space available at 0x4400. On most platforms it's just 3 or 4M since ieee1275 maps only so much. +@item i386-ieee1275: kernel.img (.text + .data + .bss) + modules is limited by memory available at 0x10000, at most 596K +@end itemize + +Lightly limited platforms: + +@itemize +@item *-xen: limited only by adress space and RAM size. +@item i386-qemu: kernel.img (.text + .data + .bss) is limited by 392704 bytes. + (core.img would be limited by ROM size but it's unlimited on qemu +@item All EFI platforms: limited by contiguous RAM size and possibly firmware bugs +@item Coreboot and multiboot. kernel.img (.text + .data + .bss) is limited by 392704 bytes. + module size is limited by the size of contiguous chunk at 1M address. +@item mipsel-loongson (ELF), mips(el)-qemu_mips (ELF): if uncompressed: + kernel.img (.text + .data) + modules is limited by the space from 80200000 forward + if compressed: + kernel.img (.text + .data, uncompressed) + modules (uncompressed) + + (modules + kernel.img (.text + .data)) (compressed) + + decompressor is limited by the space from 80200000 forward +@item mipsel-loongson (Flash), mips(el)-qemu_mips (Flash): kernel.img (.text + .data) + modules is limited by the space from 80200000 forward + core.img (final) is limited by flash size (512K on yeeloong and fulooong) +@item mips-arc: if uncompressed: + kernel.img (.text + .data) is limited by the space from 8bd00000 forward + modules + dummy decompressor is limited by the space from 8bd00000 backward + if compressed: + kernel.img (.text + .data, uncompressed) is limited by the space from 8bd00000 forward + modules (uncompressed) + (modules + kernel.img (.text + .data)) (compressed, aligned to 1M) + + 1M (decompressor + scratch space) is limited by the space from 8bd00000 backward +@item powerpc-ieee1275: kernel.img (.text + .data + .bss) + modules is limited by space available at 0x200000 +@end itemize + +@node Filesystem +@chapter Filesystem syntax and semantics + +GRUB uses a special syntax for specifying disk drives which can be +accessed by BIOS. Because of BIOS limitations, GRUB cannot distinguish +between IDE, ESDI, SCSI, or others. You must know yourself which BIOS +device is equivalent to which OS device. Normally, that will be clear if +you see the files in a device or use the command @command{search} +(@pxref{search}). + +@menu +* Device syntax:: How to specify devices +* File name syntax:: How to specify files +* Block list syntax:: How to specify block lists +@end menu + + +@node Device syntax +@section How to specify devices + +The device syntax is like this: + +@example +@code{(@var{device}[,@var{partmap-name1}@var{part-num1}[,@var{partmap-name2}@var{part-num2}[,...]]])} +@end example + +@samp{[]} means the parameter is optional. @var{device} depends on the disk +driver in use. BIOS and EFI disks use either @samp{fd} or @samp{hd} followed +by a digit, like @samp{fd0}, or @samp{cd}. +AHCI, PATA (ata), crypto, USB use the name of driver followed by a number. +Memdisk and host are limited to one disk and so it's refered just by driver +name. +RAID (md), ofdisk (ieee1275 and nand), LVM (lvm), LDM, virtio (vdsk) +and arcdisk (arc) use intrinsic name of disk prefixed by driver name. +Additionally just ``nand'' refers to the disk aliased as ``nand''. +Conflicts are solved by suffixing a number if necessarry. +Commas need to be escaped. +Loopback uses whatever name specified to @command{loopback} command. +Hostdisk uses names specified in device.map as long as it's of the form +[fhc]d[0-9]* or hostdisk/. +For crypto and RAID (md) additionally you can use the syntax +uuid/. For LVM additionally you can use the syntax +lvmid//. + +@example +(fd0) +(hd0) +(cd) +(ahci0) +(ata0) +(crypto0) +(usb0) +(cryptouuid/123456789abcdef0123456789abcdef0) +(mduuid/123456789abcdef0123456789abcdef0) +(lvm/system-root) +(lvmid/F1ikgD-2RES-306G-il9M-7iwa-4NKW-EbV1NV/eLGuCQ-L4Ka-XUgR-sjtJ-ffch-bajr-fCNfz5) +(md/myraid) +(md/0) +(ieee1275/disk2) +(ieee1275//pci@@1f\,0/ide@@d/disk@@2) +(nand) +(memdisk) +(host) +(myloop) +(hostdisk//dev/sda) +@end example + +@var{part-num} represents the partition number of @var{device}, starting +from one. @var{partname} is optional but is recommended since disk may have +several top-level partmaps. Specifying third and later component you can access +to subpartitions. + +The syntax @samp{(hd0)} represents using the entire disk (or the +MBR when installing GRUB), while the syntax @samp{(hd0,1)} +represents using the first partition of the disk (or the boot sector +of the partition when installing GRUB). + +@example +(hd0,msdos1) +(hd0,msdos1,msdos5) +(hd0,msdos1,bsd3) +(hd0,netbsd1) +(hd0,gpt1) +(hd0,1,3) +@end example + +If you enabled the network support, the special drives +@code{(@var{protocol}[,@var{server}])} are also available. Supported protocols +are @samp{http} and @samp{tftp}. If @var{server} is omitted, value of +environment variable @samp{net_default_server} is used. +Before using the network drive, you must initialize the network. +@xref{Network}, for more information. + +If you boot GRUB from a CD-ROM, @samp{(cd)} is available. @xref{Making +a GRUB bootable CD-ROM}, for details. + + +@node File name syntax +@section How to specify files + +There are two ways to specify files, by @dfn{absolute file name} and by +@dfn{block list}. + +An absolute file name resembles a Unix absolute file name, using +@samp{/} for the directory separator (not @samp{\} as in DOS). One +example is @samp{(hd0,1)/boot/grub/grub.cfg}. This means the file +@file{/boot/grub/grub.cfg} in the first partition of the first hard +disk. If you omit the device name in an absolute file name, GRUB uses +GRUB's @dfn{root device} implicitly. So if you set the root device to, +say, @samp{(hd1,1)} by the command @samp{set root=(hd1,1)} (@pxref{set}), +then @code{/boot/kernel} is the same as @code{(hd1,1)/boot/kernel}. + +On ZFS filesystem the first path component must be +@var{volume}@samp{@@}[@var{snapshot}]. +So @samp{/rootvol@@snap-129/boot/grub/grub.cfg} refers to file +@samp{/boot/grub/grub.cfg} in snapshot of volume @samp{rootvol} with name +@samp{snap-129}. Trailing @samp{@@} after volume name is mandatory even if +snapshot name is omitted. + + +@node Block list syntax +@section How to specify block lists + +A block list is used for specifying a file that doesn't appear in the +filesystem, like a chainloader. The syntax is +@code{[@var{offset}]+@var{length}[,[@var{offset}]+@var{length}]@dots{}}. +Here is an example: + +@example +@code{0+100,200+1,300+300} +@end example + +This represents that GRUB should read blocks 0 through 99, block 200, +and blocks 300 through 599. If you omit an offset, then GRUB assumes +the offset is zero. + +Like the file name syntax (@pxref{File name syntax}), if a blocklist +does not contain a device name, then GRUB uses GRUB's @dfn{root +device}. So @code{(hd0,2)+1} is the same as @code{+1} when the root +device is @samp{(hd0,2)}. + + +@node Interface +@chapter GRUB's user interface + +GRUB has both a simple menu interface for choosing preset entries from a +configuration file, and a highly flexible command-line for performing +any desired combination of boot commands. + +GRUB looks for its configuration file as soon as it is loaded. If one +is found, then the full menu interface is activated using whatever +entries were found in the file. If you choose the @dfn{command-line} menu +option, or if the configuration file was not found, then GRUB drops to +the command-line interface. + +@menu +* Command-line interface:: The flexible command-line interface +* Menu interface:: The simple menu interface +* Menu entry editor:: Editing a menu entry +@end menu + + +@node Command-line interface +@section The flexible command-line interface + +The command-line interface provides a prompt and after it an editable +text area much like a command-line in Unix or DOS. Each command is +immediately executed after it is entered@footnote{However, this +behavior will be changed in the future version, in a user-invisible +way.}. The commands (@pxref{Command-line and menu entry commands}) are a +subset of those available in the configuration file, used with exactly +the same syntax. + +Cursor movement and editing of the text on the line can be done via a +subset of the functions available in the Bash shell: + +@table @key +@item C-f +@itemx PC right key +Move forward one character. + +@item C-b +@itemx PC left key +Move back one character. + +@item C-a +@itemx HOME +Move to the start of the line. + +@item C-e +@itemx END +Move the the end of the line. + +@item C-d +@itemx DEL +Delete the character underneath the cursor. + +@item C-h +@itemx BS +Delete the character to the left of the cursor. + +@item C-k +Kill the text from the current cursor position to the end of the line. + +@item C-u +Kill backward from the cursor to the beginning of the line. + +@item C-y +Yank the killed text back into the buffer at the cursor. + +@item C-p +@itemx PC up key +Move up through the history list. + +@item C-n +@itemx PC down key +Move down through the history list. +@end table + +When typing commands interactively, if the cursor is within or before +the first word in the command-line, pressing the @key{TAB} key (or +@key{C-i}) will display a listing of the available commands, and if the +cursor is after the first word, the @kbd{@key{TAB}} will provide a +completion listing of disks, partitions, and file names depending on the +context. Note that to obtain a list of drives, one must open a +parenthesis, as @command{root (}. + +Note that you cannot use the completion functionality in the TFTP +filesystem. This is because TFTP doesn't support file name listing for +the security. + + +@node Menu interface +@section The simple menu interface + +The menu interface is quite easy to use. Its commands are both +reasonably intuitive and described on screen. + +Basically, the menu interface provides a list of @dfn{boot entries} to +the user to choose from. Use the arrow keys to select the entry of +choice, then press @key{RET} to run it. An optional timeout is +available to boot the default entry (the first one if not set), which is +aborted by pressing any key. + +Commands are available to enter a bare command-line by pressing @key{c} +(which operates exactly like the non-config-file version of GRUB, but +allows one to return to the menu if desired by pressing @key{ESC}) or to +edit any of the @dfn{boot entries} by pressing @key{e}. + +If you protect the menu interface with a password (@pxref{Security}), +all you can do is choose an entry by pressing @key{RET}, or press +@key{p} to enter the password. + + +@node Menu entry editor +@section Editing a menu entry + +The menu entry editor looks much like the main menu interface, but the +lines in the menu are individual commands in the selected entry instead +of entry names. + +If an @key{ESC} is pressed in the editor, it aborts all the changes made +to the configuration entry and returns to the main menu interface. + +Each line in the menu entry can be edited freely, and you can add new lines +by pressing @key{RET} at the end of a line. To boot the edited entry, press +@key{Ctrl-x}. + +Although GRUB unfortunately does not support @dfn{undo}, you can do almost +the same thing by just returning to the main menu using @key{ESC}. + + +@node Environment +@chapter GRUB environment variables + +GRUB supports environment variables which are rather like those offered by +all Unix-like systems. Environment variables have a name, which is unique +and is usually a short identifier, and a value, which is an arbitrary string +of characters. They may be set (@pxref{set}), unset (@pxref{unset}), or +looked up (@pxref{Shell-like scripting}) by name. + +A number of environment variables have special meanings to various parts of +GRUB. Others may be used freely in GRUB configuration files. + + +@menu +* Special environment variables:: +* Environment block:: +@end menu + + +@node Special environment variables +@section Special environment variables + +These variables have special meaning to GRUB. + +@menu +* biosnum:: +* check_signatures:: +* chosen:: +* cmdpath:: +* color_highlight:: +* color_normal:: +* config_directory:: +* config_file:: +* debug:: +* default:: +* fallback:: +* gfxmode:: +* gfxpayload:: +* gfxterm_font:: +* grub_cpu:: +* grub_platform:: +* icondir:: +* lang:: +* locale_dir:: +* menu_color_highlight:: +* menu_color_normal:: +* net_@var{}_boot_file:: +* net_@var{}_dhcp_server_name:: +* net_@var{}_domain:: +* net_@var{}_extensionspath:: +* net_@var{}_hostname:: +* net_@var{}_ip:: +* net_@var{}_mac:: +* net_@var{}_next_server:: +* net_@var{}_rootpath:: +* net_default_interface:: +* net_default_ip:: +* net_default_mac:: +* net_default_server:: +* pager:: +* prefix:: +* pxe_blksize:: +* pxe_default_gateway:: +* pxe_default_server:: +* root:: +* superusers:: +* theme:: +* timeout:: +* timeout_style:: +@end menu + + +@node biosnum +@subsection biosnum + +When chain-loading another boot loader (@pxref{Chain-loading}), GRUB may +need to know what BIOS drive number corresponds to the root device +(@pxref{root}) so that it can set up registers properly. If the +@var{biosnum} variable is set, it overrides GRUB's own means of guessing +this. + +For an alternative approach which also changes BIOS drive mappings for the +chain-loaded system, @pxref{drivemap}. + + +@node check_signatures +@subsection check_signatures + +This variable controls whether GRUB enforces digital signature +validation on loaded files. @xref{Using digital signatures}. + +@node chosen +@subsection chosen + +When executing a menu entry, GRUB sets the @var{chosen} variable to the +title of the entry being executed. + +If the menu entry is in one or more submenus, then @var{chosen} is set to +the titles of each of the submenus starting from the top level followed by +the title of the menu entry itself, separated by @samp{>}. + + +@node cmdpath +@subsection cmdpath + +The location from which @file{core.img} was loaded as an absolute +directory name (@pxref{File name syntax}). This is set by GRUB at +startup based on information returned by platform firmware. Not every +platform provides this information and some may return only device +without path name. + + +@node color_highlight +@subsection color_highlight + +This variable contains the ``highlight'' foreground and background terminal +colors, separated by a slash (@samp{/}). Setting this variable changes +those colors. For the available color names, @pxref{color_normal}. + +The default is @samp{black/light-gray}. + + +@node color_normal +@subsection color_normal + +This variable contains the ``normal'' foreground and background terminal +colors, separated by a slash (@samp{/}). Setting this variable changes +those colors. Each color must be a name from the following list: + +@itemize @bullet +@item black +@item blue +@item green +@item cyan +@item red +@item magenta +@item brown +@item light-gray +@item dark-gray +@item light-blue +@item light-green +@item light-cyan +@item light-red +@item light-magenta +@item yellow +@item white +@end itemize + +The default is @samp{light-gray/black}. + +The color support support varies from terminal to terminal. + +@samp{morse} has no color support at all. + +@samp{mda_text} color support is limited to highlighting by +black/white reversal. + +@samp{console} on ARC, EMU and IEEE1275, @samp{serial_*} and +@samp{spkmodem} are governed by terminfo and support +only 8 colors if in modes @samp{vt100-color} (default for console on emu), +@samp{arc} (default for console on ARC), @samp{ieee1275} (default +for console on IEEE1275). When in mode @samp{vt100} +then the color support is limited to highlighting by black/white +reversal. When in mode @samp{dumb} there is no color support. + +When console supports no colors this setting is ignored. +When console supports 8 colors, then the colors from the +second half of the previous list are mapped to the +matching colors of first half. + +@samp{console} on EFI and BIOS and @samp{vga_text} support all 16 colors. + +@samp{gfxterm} supports all 16 colors and would be theoretically extendable +to support whole rgb24 palette but currently there is no compelling reason +to go beyond the current 16 colors. + + +@node config_directory +@subsection config_directory + +This variable is automatically set by GRUB to the directory part of +current configuration file name (@pxref{config_file}). + + +@node config_file +@subsection config_file + +This variable is automatically set by GRUB to the name of configuration file that is being +processed by commands @command{configfile} (@pxref{configfile}) or @command{normal} +(@pxref{normal}). It is restored to the previous value when command completes. + + +@node debug +@subsection debug + +This variable may be set to enable debugging output from various components +of GRUB. The value is a list of debug facility names separated by +whitespace or @samp{,}, or @samp{all} to enable all available debugging +output. The facility names are the first argument to grub_dprintf. Consult +source for more details. + + +@node default +@subsection default + +If this variable is set, it identifies a menu entry that should be +selected by default, possibly after a timeout (@pxref{timeout}). The +entry may be identified by number (starting from 0 at each level of +the hierarchy), by title, or by id. + +For example, if you have: + +@verbatim +menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux { + ... +} +@end verbatim + +then you can make this the default using: + +@example +default=example-gnu-linux +@end example + +If the entry is in a submenu, then it must be identified using the +number, title, or id of each of the submenus starting from the top +level, followed by the number, title, or id of the menu entry itself, +with each element separated by @samp{>}. For example, take the +following menu structure: + +@example +GNU/Hurd --id gnu-hurd + Standard Boot --id=gnu-hurd-std + Rescue shell --id=gnu-hurd-rescue +Other platforms --id=other + Minix --id=minix + Version 3.4.0 --id=minix-3.4.0 + Version 3.3.0 --id=minix-3.3.0 + GRUB Invaders --id=grub-invaders +@end example + +The more recent release of Minix would then be identified as +@samp{Other platforms>Minix>Version 3.4.0}, or as @samp{1>0>0}, or as +@samp{other>minix>minix-3.4.0}. + +This variable is often set by @samp{GRUB_DEFAULT} (@pxref{Simple +configuration}), @command{grub-set-default}, or @command{grub-reboot}. + + +@node fallback +@subsection fallback + +If this variable is set, it identifies a menu entry that should be selected +if the default menu entry fails to boot. Entries are identified in the same +way as for @samp{default} (@pxref{default}). + + +@node gfxmode +@subsection gfxmode + +If this variable is set, it sets the resolution used on the @samp{gfxterm} +graphical terminal. Note that you can only use modes which your graphics +card supports via VESA BIOS Extensions (VBE), so for example native LCD +panel resolutions may not be available. The default is @samp{auto}, which +selects a platform-specific default that should look reasonable. Supported +modes can be listed by @samp{videoinfo} command in GRUB. + +The resolution may be specified as a sequence of one or more modes, +separated by commas (@samp{,}) or semicolons (@samp{;}); each will be tried +in turn until one is found. Each mode should be either @samp{auto}, +@samp{@var{width}x@var{height}}, or +@samp{@var{width}x@var{height}x@var{depth}}. + + +@node gfxpayload +@subsection gfxpayload + +If this variable is set, it controls the video mode in which the Linux +kernel starts up, replacing the @samp{vga=} boot option (@pxref{linux}). It +may be set to @samp{text} to force the Linux kernel to boot in normal text +mode, @samp{keep} to preserve the graphics mode set using @samp{gfxmode}, or +any of the permitted values for @samp{gfxmode} to set a particular graphics +mode (@pxref{gfxmode}). + +Depending on your kernel, your distribution, your graphics card, and the +phase of the moon, note that using this option may cause GNU/Linux to suffer +from various display problems, particularly during the early part of the +boot sequence. If you have problems, set this variable to @samp{text} and +GRUB will tell Linux to boot in normal text mode. + +The default is platform-specific. On platforms with a native text mode +(such as PC BIOS platforms), the default is @samp{text}. Otherwise the +default may be @samp{auto} or a specific video mode. + +This variable is often set by @samp{GRUB_GFXPAYLOAD_LINUX} (@pxref{Simple +configuration}). + + +@node gfxterm_font +@subsection gfxterm_font + +If this variable is set, it names a font to use for text on the +@samp{gfxterm} graphical terminal. Otherwise, @samp{gfxterm} may use any +available font. + + +@node grub_cpu +@subsection grub_cpu + +In normal mode (@pxref{normal}), GRUB sets the @samp{grub_cpu} variable to +the CPU type for which GRUB was built (e.g. @samp{i386} or @samp{powerpc}). + + +@node grub_platform +@subsection grub_platform + +In normal mode (@pxref{normal}), GRUB sets the @samp{grub_platform} variable +to the platform for which GRUB was built (e.g. @samp{pc} or @samp{efi}). + + +@node icondir +@subsection icondir + +If this variable is set, it names a directory in which the GRUB graphical +menu should look for icons after looking in the theme's @samp{icons} +directory. @xref{Theme file format}. + + +@node lang +@subsection lang + +If this variable is set, it names the language code that the +@command{gettext} command (@pxref{gettext}) uses to translate strings. For +example, French would be named as @samp{fr}, and Simplified Chinese as +@samp{zh_CN}. + +@command{grub-mkconfig} (@pxref{Simple configuration}) will try to set a +reasonable default for this variable based on the system locale. + + +@node locale_dir +@subsection locale_dir + +If this variable is set, it names the directory where translation files may +be found (@pxref{gettext}), usually @file{/boot/grub/locale}. Otherwise, +internationalization is disabled. + +@command{grub-mkconfig} (@pxref{Simple configuration}) will set a reasonable +default for this variable if internationalization is needed and any +translation files are available. + + +@node menu_color_highlight +@subsection menu_color_highlight + +This variable contains the foreground and background colors to be used for +the highlighted menu entry, separated by a slash (@samp{/}). Setting this +variable changes those colors. For the available color names, +@pxref{color_normal}. + +The default is the value of @samp{color_highlight} +(@pxref{color_highlight}). + + +@node menu_color_normal +@subsection menu_color_normal + +This variable contains the foreground and background colors to be used for +non-highlighted menu entries, separated by a slash (@samp{/}). Setting this +variable changes those colors. For the available color names, +@pxref{color_normal}. + +The default is the value of @samp{color_normal} (@pxref{color_normal}). + + +@node net_@var{}_boot_file +@subsection net_@var{}_boot_file + +@xref{Network}. + + +@node net_@var{}_dhcp_server_name +@subsection net_@var{}_dhcp_server_name + +@xref{Network}. + + +@node net_@var{}_domain +@subsection net_@var{}_domain + +@xref{Network}. + + +@node net_@var{}_extensionspath +@subsection net_@var{}_extensionspath + +@xref{Network}. + + +@node net_@var{}_hostname +@subsection net_@var{}_hostname + +@xref{Network}. + + +@node net_@var{}_ip +@subsection net_@var{}_ip + +@xref{Network}. + + +@node net_@var{}_mac +@subsection net_@var{}_mac + +@xref{Network}. + + +@node net_@var{}_next_server +@subsection net_@var{}_next_server + +@xref{Network}. + + +@node net_@var{}_rootpath +@subsection net_@var{}_rootpath + +@xref{Network}. + + +@node net_default_interface +@subsection net_default_interface + +@xref{Network}. + + +@node net_default_ip +@subsection net_default_ip + +@xref{Network}. + + +@node net_default_mac +@subsection net_default_mac + +@xref{Network}. + + +@node net_default_server +@subsection net_default_server + +@xref{Network}. + + +@node pager +@subsection pager + +If set to @samp{1}, pause output after each screenful and wait for keyboard +input. The default is not to pause output. + + +@node prefix +@subsection prefix + +The location of the @samp{/boot/grub} directory as an absolute file name +(@pxref{File name syntax}). This is normally set by GRUB at startup based +on information provided by @command{grub-install}. GRUB modules are +dynamically loaded from this directory, so it must be set correctly in order +for many parts of GRUB to work. + + +@node pxe_blksize +@subsection pxe_blksize + +@xref{Network}. + + +@node pxe_default_gateway +@subsection pxe_default_gateway + +@xref{Network}. + + +@node pxe_default_server +@subsection pxe_default_server + +@xref{Network}. + + +@node root +@subsection root + +The root device name (@pxref{Device syntax}). Any file names that do not +specify an explicit device name are read from this device. The default is +normally set by GRUB at startup based on the value of @samp{prefix} +(@pxref{prefix}). + +For example, if GRUB was installed to the first partition of the first hard +disk, then @samp{prefix} might be set to @samp{(hd0,msdos1)/boot/grub} and +@samp{root} to @samp{hd0,msdos1}. + + +@node superusers +@subsection superusers + +This variable may be set to a list of superuser names to enable +authentication support. @xref{Security}. + + +@node theme +@subsection theme + +This variable may be set to a directory containing a GRUB graphical menu +theme. @xref{Theme file format}. + +This variable is often set by @samp{GRUB_THEME} (@pxref{Simple +configuration}). + + +@node timeout +@subsection timeout + +If this variable is set, it specifies the time in seconds to wait for +keyboard input before booting the default menu entry. A timeout of @samp{0} +means to boot the default entry immediately without displaying the menu; a +timeout of @samp{-1} (or unset) means to wait indefinitely. + +If @samp{timeout_style} (@pxref{timeout_style}) is set to @samp{countdown} +or @samp{hidden}, the timeout is instead counted before the menu is +displayed. + +This variable is often set by @samp{GRUB_TIMEOUT} (@pxref{Simple +configuration}). + + +@node timeout_style +@subsection timeout_style + +This variable may be set to @samp{menu}, @samp{countdown}, or @samp{hidden} +to control the way in which the timeout (@pxref{timeout}) interacts with +displaying the menu. See the documentation of @samp{GRUB_TIMEOUT_STYLE} +(@pxref{Simple configuration}) for details. + + +@node Environment block +@section The GRUB environment block + +It is often useful to be able to remember a small amount of information from +one boot to the next. For example, you might want to set the default menu +entry based on what was selected the last time. GRUB deliberately does not +implement support for writing files in order to minimise the possibility of +the boot loader being responsible for file system corruption, so a GRUB +configuration file cannot just create a file in the ordinary way. However, +GRUB provides an ``environment block'' which can be used to save a small +amount of state. + +The environment block is a preallocated 1024-byte file, which normally lives +in @file{/boot/grub/grubenv} (although you should not assume this). At boot +time, the @command{load_env} command (@pxref{load_env}) loads environment +variables from it, and the @command{save_env} (@pxref{save_env}) command +saves environment variables to it. From a running system, the +@command{grub-editenv} utility can be used to edit the environment block. + +For safety reasons, this storage is only available when installed on a plain +disk (no LVM or RAID), using a non-checksumming filesystem (no ZFS), and +using BIOS or EFI functions (no ATA, USB or IEEE1275). + +@command{grub-mkconfig} uses this facility to implement +@samp{GRUB_SAVEDEFAULT} (@pxref{Simple configuration}). + + +@node Commands +@chapter The list of available commands + +In this chapter, we list all commands that are available in GRUB. + +Commands belong to different groups. A few can only be used in +the global section of the configuration file (or ``menu''); most +of them can be entered on the command-line and can be used either +anywhere in the menu or specifically in the menu entries. + +In rescue mode, only the @command{insmod} (@pxref{insmod}), @command{ls} +(@pxref{ls}), @command{set} (@pxref{set}), and @command{unset} +(@pxref{unset}) commands are normally available. If you end up in rescue +mode and do not know what to do, then @pxref{GRUB only offers a rescue +shell}. + +@menu +* Menu-specific commands:: +* General commands:: +* Command-line and menu entry commands:: +* Networking commands:: +@end menu + + +@node Menu-specific commands +@section The list of commands for the menu only + +The semantics used in parsing the configuration file are the following: + +@itemize @bullet +@item +The files @emph{must} be in plain-text format. + +@item +@samp{#} at the beginning of a line in a configuration file means it is +only a comment. + +@item +Options are separated by spaces. + +@item +All numbers can be either decimal or hexadecimal. A hexadecimal number +must be preceded by @samp{0x}, and is case-insensitive. +@end itemize + +These commands can only be used in the menu: + +@menu +* menuentry:: Start a menu entry +* submenu:: Group menu entries +@end menu + + +@node menuentry +@subsection menuentry + +@deffn Command menuentry @var{title} @ + [@option{--class=class} @dots{}] [@option{--users=users}] @ + [@option{--unrestricted}] [@option{--hotkey=key}] [@option{--id=id}] @ + [@var{arg} @dots{}] @{ @var{command}; @dots{} @} +This defines a GRUB menu entry named @var{title}. When this entry is +selected from the menu, GRUB will set the @var{chosen} environment variable +to value of @option{--id} if @option{--id} is given, execute the list of +commands given within braces, and if the last command in the list returned +successfully and a kernel was loaded it will execute the @command{boot} command. + +The @option{--class} option may be used any number of times to group menu +entries into classes. Menu themes may display different classes using +different styles. + +The @option{--users} option grants specific users access to specific menu +entries. @xref{Security}. + +The @option{--unrestricted} option grants all users access to specific menu +entries. @xref{Security}. + +The @option{--hotkey} option associates a hotkey with a menu entry. +@var{key} may be a single letter, or one of the aliases @samp{backspace}, +@samp{tab}, or @samp{delete}. + +The @option{--id} may be used to associate unique identifier with a menu entry. +@var{id} is string of ASCII aphanumeric characters, underscore and hyphen +and should not start with a digit. + +All other arguments including @var{title} are passed as positional parameters +when list of commands is executed with @var{title} always assigned to @code{$1}. +@end deffn + + +@node submenu +@subsection submenu + +@deffn Command submenu @var{title} @ + [@option{--class=class} @dots{}] [@option{--users=users}] @ + [@option{--unrestricted}] [@option{--hotkey=key}] [@option{--id=id}] @ + @{ @var{menu entries} @dots{} @} +This defines a submenu. An entry called @var{title} will be added to the +menu; when that entry is selected, a new menu will be displayed showing all +the entries within this submenu. + +All options are the same as in the @command{menuentry} command +(@pxref{menuentry}). +@end deffn + + +@node General commands +@section The list of general commands + +Commands usable anywhere in the menu and in the command-line. + +@menu +* serial:: Set up a serial device +* terminal_input:: Manage input terminals +* terminal_output:: Manage output terminals +* terminfo:: Define terminal type +@end menu + + +@node serial +@subsection serial + +@deffn Command serial [@option{--unit=unit}] [@option{--port=port}] [@option{--speed=speed}] [@option{--word=word}] [@option{--parity=parity}] [@option{--stop=stop}] +Initialize a serial device. @var{unit} is a number in the range 0-3 +specifying which serial port to use; default is 0, which corresponds to +the port often called COM1. @var{port} is the I/O port where the UART +is to be found; if specified it takes precedence over @var{unit}. +@var{speed} is the transmission speed; default is 9600. @var{word} and +@var{stop} are the number of data bits and stop bits. Data bits must +be in the range 5-8 and stop bits must be 1 or 2. Default is 8 data +bits and one stop bit. @var{parity} is one of @samp{no}, @samp{odd}, +@samp{even} and defaults to @samp{no}. + +The serial port is not used as a communication channel unless the +@command{terminal_input} or @command{terminal_output} command is used +(@pxref{terminal_input}, @pxref{terminal_output}). + +See also @ref{Serial terminal}. +@end deffn + + +@node terminal_input +@subsection terminal_input + +@deffn Command terminal_input [@option{--append}|@option{--remove}] @ + [terminal1] [terminal2] @dots{} +List or select an input terminal. + +With no arguments, list the active and available input terminals. + +With @option{--append}, add the named terminals to the list of active input +terminals; any of these may be used to provide input to GRUB. + +With @option{--remove}, remove the named terminals from the active list. + +With no options but a list of terminal names, make only the listed terminal +names active. +@end deffn + + +@node terminal_output +@subsection terminal_output + +@deffn Command terminal_output [@option{--append}|@option{--remove}] @ + [terminal1] [terminal2] @dots{} +List or select an output terminal. + +With no arguments, list the active and available output terminals. + +With @option{--append}, add the named terminals to the list of active output +terminals; all of these will receive output from GRUB. + +With @option{--remove}, remove the named terminals from the active list. + +With no options but a list of terminal names, make only the listed terminal +names active. +@end deffn + + +@node terminfo +@subsection terminfo + +@deffn Command terminfo [-a|-u|-v] [term] +Define the capabilities of your terminal by giving the name of an entry in +the terminfo database, which should correspond roughly to a @samp{TERM} +environment variable in Unix. + +The currently available terminal types are @samp{vt100}, @samp{vt100-color}, +@samp{ieee1275}, and @samp{dumb}. If you need other terminal types, please +contact us to discuss the best way to include support for these in GRUB. + +The @option{-a} (@option{--ascii}), @option{-u} (@option{--utf8}), and +@option{-v} (@option{--visual-utf8}) options control how non-ASCII text is +displayed. @option{-a} specifies an ASCII-only terminal; @option{-u} +specifies logically-ordered UTF-8; and @option{-v} specifies +"visually-ordered UTF-8" (in other words, arranged such that a terminal +emulator without bidirectional text support will display right-to-left text +in the proper order; this is not really proper UTF-8, but a workaround). + +If no option or terminal type is specified, the current terminal type is +printed. +@end deffn + + +@node Command-line and menu entry commands +@section The list of command-line and menu entry commands + +These commands are usable in the command-line and in menu entries. If +you forget a command, you can run the command @command{help} +(@pxref{help}). + +@menu +* [:: Check file types and compare values +* acpi:: Load ACPI tables +* authenticate:: Check whether user is in user list +* background_color:: Set background color for active terminal +* background_image:: Load background image for active terminal +* badram:: Filter out bad regions of RAM +* blocklist:: Print a block list +* boot:: Start up your operating system +* cat:: Show the contents of a file +* chainloader:: Chain-load another boot loader +* clear:: Clear the screen +* cmosclean:: Clear bit in CMOS +* cmosdump:: Dump CMOS contents +* cmostest:: Test bit in CMOS +* cmp:: Compare two files +* configfile:: Load a configuration file +* cpuid:: Check for CPU features +* crc:: Compute or check CRC32 checksums +* cryptomount:: Mount a crypto device +* date:: Display or set current date and time +* devicetree:: Load a device tree blob +* distrust:: Remove a pubkey from trusted keys +* drivemap:: Map a drive to another +* echo:: Display a line of text +* eval:: Evaluate agruments as GRUB commands +* export:: Export an environment variable +* false:: Do nothing, unsuccessfully +* gettext:: Translate a string +* gptsync:: Fill an MBR based on GPT entries +* halt:: Shut down your computer +* hashsum:: Compute or check hash checksum +* help:: Show help messages +* initrd:: Load a Linux initrd +* initrd16:: Load a Linux initrd (16-bit mode) +* insmod:: Insert a module +* keystatus:: Check key modifier status +* linux:: Load a Linux kernel +* linux16:: Load a Linux kernel (16-bit mode) +* list_env:: List variables in environment block +* list_trusted:: List trusted public keys +* load_env:: Load variables from environment block +* loadfont:: Load font files +* loopback:: Make a device from a filesystem image +* ls:: List devices or files +* lsfonts:: List loaded fonts +* lsmod:: Show loaded modules +* md5sum:: Compute or check MD5 hash +* module:: Load module for multiboot kernel +* multiboot:: Load multiboot compliant kernel +* nativedisk:: Switch to native disk drivers +* normal:: Enter normal mode +* normal_exit:: Exit from normal mode +* parttool:: Modify partition table entries +* password:: Set a clear-text password +* password_pbkdf2:: Set a hashed password +* play:: Play a tune +* probe:: Retrieve device info +* pxe_unload:: Unload the PXE environment +* read:: Read user input +* reboot:: Reboot your computer +* regexp:: Test if regular expression matches string +* rmmod:: Remove a module +* save_env:: Save variables to environment block +* search:: Search devices by file, label, or UUID +* sendkey:: Emulate keystrokes +* set:: Set an environment variable +* sha1sum:: Compute or check SHA1 hash +* sha256sum:: Compute or check SHA256 hash +* sha512sum:: Compute or check SHA512 hash +* sleep:: Wait for a specified number of seconds +* source:: Read a configuration file in same context +* test:: Check file types and compare values +* true:: Do nothing, successfully +* trust:: Add public key to list of trusted keys +* unset:: Unset an environment variable +* uppermem:: Set the upper memory size +@comment * vbeinfo:: List available video modes +* verify_detached:: Verify detached digital signature +* videoinfo:: List available video modes +@comment * xen_*:: Xen boot commands +* xen_hypervisor:: Load xen hypervisor binary +* xen_linux:: Load dom0 kernel for xen hypervisor +* xen_initrd:: Load dom0 initrd for dom0 kernel +* xen_xsm:: Load xen security module for xen hypervisor +@end menu + + +@node [ +@subsection [ +@deffn Command @code{[} expression @code{]} +Alias for @code{test @var{expression}} (@pxref{test}). +@end deffn + + +@node acpi +@subsection acpi + +@deffn Command acpi [@option{-1}|@option{-2}] @ + [@option{--exclude=table1,@dots{}}|@option{--load-only=table1,@dots{}}] @ + [@option{--oemid=id}] [@option{--oemtable=table}] @ + [@option{--oemtablerev=rev}] [@option{--oemtablecreator=creator}] @ + [@option{--oemtablecreatorrev=rev}] [@option{--no-ebda}] @ + filename @dots{} +Modern BIOS systems normally implement the Advanced Configuration and Power +Interface (ACPI), and define various tables that describe the interface +between an ACPI-compliant operating system and the firmware. In some cases, +the tables provided by default only work well with certain operating +systems, and it may be necessary to replace some of them. + +Normally, this command will replace the Root System Description Pointer +(RSDP) in the Extended BIOS Data Area to point to the new tables. If the +@option{--no-ebda} option is used, the new tables will be known only to +GRUB, but may be used by GRUB's EFI emulation. +@end deffn + + +@node authenticate +@subsection authenticate +@deffn Command authenticate [userlist] +Check whether user is in @var{userlist} or listed in the value of variable +@samp{superusers}. See @pxref{superusers} for valid user list format. +If @samp{superusers} is empty, this command returns true. @xref{Security}. +@end deffn + + +@node background_color +@subsection background_color + +@deffn Command background_color color +Set background color for active terminal. For valid color specifications see +@pxref{Theme file format, ,Colors}. Background color can be changed only when +using @samp{gfxterm} for terminal output. + +This command sets color of empty areas without text. Text background color +is controlled by environment variables @var{color_normal}, @var{color_highlight}, +@var{menu_color_normal}, @var{menu_color_highlight}. @xref{Special environment variables}. +@end deffn + + +@node background_image +@subsection background_image + +@deffn Command background_image [[@option{--mode} @samp{stretch}|@samp{normal}] file] +Load background image for active terminal from @var{file}. Image is stretched +to fill up entire screen unless option @option{--mode} @samp{normal} is given. +Without arguments remove currently loaded background image. Background image +can be changed only when using @samp{gfxterm} for terminal output. + +@end deffn + + +@node badram +@subsection badram + +@deffn Command badram addr,mask[,addr,mask...] +Filter out bad RAM. +@end deffn + +This command notifies the memory manager that specified regions of +RAM ought to be filtered out (usually, because they're damaged). This +remains in effect after a payload kernel has been loaded by GRUB, as +long as the loaded kernel obtains its memory map from GRUB. Kernels that +support this include Linux, GNU Mach, the kernel of FreeBSD and Multiboot +kernels in general. + +Syntax is the same as provided by the @uref{http://www.memtest.org/, +Memtest86+ utility}: a list of address/mask pairs. Given a page-aligned +address and a base address / mask pair, if all the bits of the page-aligned +address that are enabled by the mask match with the base address, it means +this page is to be filtered. This syntax makes it easy to represent patterns +that are often result of memory damage, due to physical distribution of memory +cells. + +@node blocklist +@subsection blocklist + +@deffn Command blocklist file +Print a block list (@pxref{Block list syntax}) for @var{file}. +@end deffn + + +@node boot +@subsection boot + +@deffn Command boot +Boot the OS or chain-loader which has been loaded. Only necessary if +running the fully interactive command-line (it is implicit at the end of +a menu entry). +@end deffn + + +@node cat +@subsection cat + +@deffn Command cat [@option{--dos}] file +Display the contents of the file @var{file}. This command may be useful +to remind you of your OS's root partition: + +@example +grub> @kbd{cat /etc/fstab} +@end example + +If the @option{--dos} option is used, then carriage return / new line pairs +will be displayed as a simple new line. Otherwise, the carriage return will +be displayed as a control character (@samp{}) to make it easier to see +when boot problems are caused by a file formatted using DOS-style line +endings. +@end deffn + + +@node chainloader +@subsection chainloader + +@deffn Command chainloader [@option{--force}] file +Load @var{file} as a chain-loader. Like any other file loaded by the +filesystem code, it can use the blocklist notation (@pxref{Block list +syntax}) to grab the first sector of the current partition with @samp{+1}. +If you specify the option @option{--force}, then load @var{file} forcibly, +whether it has a correct signature or not. This is required when you want to +load a defective boot loader, such as SCO UnixWare 7.1. +@end deffn + + +@node clear +@subsection clear + +@deffn Command clear +Clear the screen. +@end deffn + + +@node cmosclean +@subsection cmosclean + +@deffn Command cmosclean byte:bit +Clear value of bit in CMOS at location @var{byte}:@var{bit}. This command +is available only on platforms that support CMOS. +@end deffn + + +@node cmosdump +@subsection cmosdump + +@deffn Dump CMOS contents +Dump full CMOS contents as hexadecimal values. This command is available only +on platforms that support CMOS. +@end deffn + + +@node cmostest +@subsection cmostest + +@deffn Command cmostest byte:bit +Test value of bit in CMOS at location @var{byte}:@var{bit}. Exit status +is zero if bit is set, non zero otherwise. This command is available only +on platforms that support CMOS. +@end deffn + + +@node cmp +@subsection cmp + +@deffn Command cmp file1 file2 +Compare the file @var{file1} with the file @var{file2}. If they differ +in size, print the sizes like this: + +@example +Differ in size: 0x1234 [foo], 0x4321 [bar] +@end example + +If the sizes are equal but the bytes at an offset differ, then print the +bytes like this: + +@example +Differ at the offset 777: 0xbe [foo], 0xef [bar] +@end example + +If they are completely identical, nothing will be printed. +@end deffn + + +@node configfile +@subsection configfile + +@deffn Command configfile file +Load @var{file} as a configuration file. If @var{file} defines any menu +entries, then show a menu containing them immediately. Any environment +variable changes made by the commands in @var{file} will not be preserved +after @command{configfile} returns. +@end deffn + + +@node cpuid +@subsection cpuid + +@deffn Command cpuid [-l] [-p] +Check for CPU features. This command is only available on x86 systems. + +With the @option{-l} option, return true if the CPU supports long mode +(64-bit). + +With the @option{-p} option, return true if the CPU supports Physical +Address Extension (PAE). + +If invoked without options, this command currently behaves as if it had been +invoked with @option{-l}. This may change in the future. +@end deffn + + +@node crc +@subsection crc + +@deffn Command crc arg @dots{} +Alias for @code{hashsum --hash crc32 arg @dots{}}. See command @command{hashsum} +(@pxref{hashsum}) for full description. +@end deffn + + +@node cryptomount +@subsection cryptomount + +@deffn Command cryptomount device|@option{-u} uuid|@option{-a}|@option{-b} +Setup access to encrypted device. If necessary, passphrase +is requested interactively. Option @var{device} configures specific grub device +(@pxref{Naming convention}); option @option{-u} @var{uuid} configures device +with specified @var{uuid}; option @option{-a} configures all detected encrypted +devices; option @option{-b} configures all geli containers that have boot flag set. + +GRUB suports devices encrypted using LUKS and geli. Note that necessary modules (@var{luks} and @var{geli}) have to be loaded manually before this command can +be used. +@end deffn + + +@node date +@subsection date + +@deffn Command date [[year-]month-day] [hour:minute[:second]] +With no arguments, print the current date and time. + +Otherwise, take the current date and time, change any elements specified as +arguments, and set the result as the new date and time. For example, `date +01-01' will set the current month and day to January 1, but leave the year, +hour, minute, and second unchanged. +@end deffn + + +@node devicetree +@subsection linux + +@deffn Command devicetree file +Load a device tree blob (.dtb) from a filesystem, for later use by a Linux +kernel. Does not perform merging with any device tree supplied by firmware, +but rather replaces it completely. +@ref{GNU/Linux}. +@end deffn + +@node distrust +@subsection distrust + +@deffn Command distrust pubkey_id +Remove public key @var{pubkey_id} from GRUB's keyring of trusted keys. +@var{pubkey_id} is the last four bytes (eight hexadecimal digits) of +the GPG v4 key id, which is also the output of @command{list_trusted} +(@pxref{list_trusted}). Outside of GRUB, the key id can be obtained +using @code{gpg --fingerprint}). +These keys are used to validate signatures when environment variable +@code{check_signatures} is set to @code{enforce} +(@pxref{check_signatures}), and by some invocations of +@command{verify_detached} (@pxref{verify_detached}). @xref{Using +digital signatures}, for more information. +@end deffn + +@node drivemap +@subsection drivemap + +@deffn Command drivemap @option{-l}|@option{-r}|[@option{-s}] @ + from_drive to_drive +Without options, map the drive @var{from_drive} to the drive @var{to_drive}. +This is necessary when you chain-load some operating systems, such as DOS, +if such an OS resides at a non-first drive. For convenience, any partition +suffix on the drive is ignored, so you can safely use @verb{'${root}'} as a +drive specification. + +With the @option{-s} option, perform the reverse mapping as well, swapping +the two drives. + +With the @option{-l} option, list the current mappings. + +With the @option{-r} option, reset all mappings to the default values. + +For example: + +@example +drivemap -s (hd0) (hd1) +@end example +@end deffn + + +@node echo +@subsection echo + +@deffn Command echo [@option{-n}] [@option{-e}] string @dots{} +Display the requested text and, unless the @option{-n} option is used, a +trailing new line. If there is more than one string, they are separated by +spaces in the output. As usual in GRUB commands, variables may be +substituted using @samp{$@{var@}}. + +The @option{-e} option enables interpretation of backslash escapes. The +following sequences are recognised: + +@table @code +@item \\ +backslash + +@item \a +alert (BEL) + +@item \c +suppress trailing new line + +@item \f +form feed + +@item \n +new line + +@item \r +carriage return + +@item \t +horizontal tab + +@item \v +vertical tab +@end table + +When interpreting backslash escapes, backslash followed by any other +character will print that character. +@end deffn + + +@node eval +@subsection eval + +@deffn Command eval string ... +Concatenate arguments together using single space as separator and evaluate +result as sequence of GRUB commands. +@end deffn + + +@node export +@subsection export + +@deffn Command export envvar +Export the environment variable @var{envvar}. Exported variables are visible +to subsidiary configuration files loaded using @command{configfile}. +@end deffn + + +@node false +@subsection false + +@deffn Command false +Do nothing, unsuccessfully. This is mainly useful in control constructs +such as @code{if} and @code{while} (@pxref{Shell-like scripting}). +@end deffn + + +@node gettext +@subsection gettext + +@deffn Command gettext string +Translate @var{string} into the current language. + +The current language code is stored in the @samp{lang} variable in GRUB's +environment (@pxref{lang}). Translation files in MO format are read from +@samp{locale_dir} (@pxref{locale_dir}), usually @file{/boot/grub/locale}. +@end deffn + + +@node gptsync +@subsection gptsync + +@deffn Command gptsync device [partition[+/-[type]]] @dots{} +Disks using the GUID Partition Table (GPT) also have a legacy Master Boot +Record (MBR) partition table for compatibility with the BIOS and with older +operating systems. The legacy MBR can only represent a limited subset of +GPT partition entries. + +This command populates the legacy MBR with the specified @var{partition} +entries on @var{device}. Up to three partitions may be used. + +@var{type} is an MBR partition type code; prefix with @samp{0x} if you want +to enter this in hexadecimal. The separator between @var{partition} and +@var{type} may be @samp{+} to make the partition active, or @samp{-} to make +it inactive; only one partition may be active. If both the separator and +type are omitted, then the partition will be inactive. +@end deffn + + +@node halt +@subsection halt + +@deffn Command halt @option{--no-apm} +The command halts the computer. If the @option{--no-apm} option +is specified, no APM BIOS call is performed. Otherwise, the computer +is shut down using APM. +@end deffn + + +@node hashsum +@subsection hashsum + +@deffn Command hashsum @option{--hash} hash @option{--keep-going} @option{--uncompress} @option{--check} file [@option{--prefix} dir]|file @dots{} +Compute or verify file hashes. Hash type is selected with option @option{--hash}. +Supported hashes are: @samp{adler32}, @samp{crc64}, @samp{crc32}, +@samp{crc32rfc1510}, @samp{crc24rfc2440}, @samp{md4}, @samp{md5}, +@samp{ripemd160}, @samp{sha1}, @samp{sha224}, @samp{sha256}, @samp{sha512}, +@samp{sha384}, @samp{tiger192}, @samp{tiger}, @samp{tiger2}, @samp{whirlpool}. +Option @option{--uncompress} uncompresses files before computing hash. + +When list of files is given, hash of each file is computed and printed, +followed by file name, each file on a new line. + +When option @option{--check} is given, it points to a file that contains +list of @var{hash name} pairs in the same format as used by UNIX +@command{md5sum} command. Option @option{--prefix} +may be used to give directory where files are located. Hash verification +stops after the first mismatch was found unless option @option{--keep-going} +was given. The exit code @code{$?} is set to 0 if hash verification +is successful. If it fails, @code{$?} is set to a nonzero value. +@end deffn + + +@node help +@subsection help + +@deffn Command help [pattern @dots{}] +Display helpful information about builtin commands. If you do not +specify @var{pattern}, this command shows short descriptions of all +available commands. + +If you specify any @var{patterns}, it displays longer information +about each of the commands whose names begin with those @var{patterns}. +@end deffn + + +@node initrd +@subsection initrd + +@deffn Command initrd file +Load an initial ramdisk for a Linux kernel image, and set the appropriate +parameters in the Linux setup area in memory. This may only be used after +the @command{linux} command (@pxref{linux}) has been run. See also +@ref{GNU/Linux}. +@end deffn + + +@node initrd16 +@subsection initrd16 + +@deffn Command initrd16 file +Load an initial ramdisk for a Linux kernel image to be booted in 16-bit +mode, and set the appropriate parameters in the Linux setup area in memory. +This may only be used after the @command{linux16} command (@pxref{linux16}) +has been run. See also @ref{GNU/Linux}. + +This command is only available on x86 systems. +@end deffn + + +@node insmod +@subsection insmod + +@deffn Command insmod module +Insert the dynamic GRUB module called @var{module}. +@end deffn + + +@node keystatus +@subsection keystatus + +@deffn Command keystatus [@option{--shift}] [@option{--ctrl}] [@option{--alt}] +Return true if the Shift, Control, or Alt modifier keys are held down, as +requested by options. This is useful in scripting, to allow some user +control over behaviour without having to wait for a keypress. + +Checking key modifier status is only supported on some platforms. If invoked +without any options, the @command{keystatus} command returns true if and +only if checking key modifier status is supported. +@end deffn + + +@node linux +@subsection linux + +@deffn Command linux file @dots{} +Load a Linux kernel image from @var{file}. The rest of the line is passed +verbatim as the @dfn{kernel command-line}. Any initrd must be reloaded +after using this command (@pxref{initrd}). + +On x86 systems, the kernel will be booted using the 32-bit boot protocol. +Note that this means that the @samp{vga=} boot option will not work; if you +want to set a special video mode, you will need to use GRUB commands such as +@samp{set gfxpayload=1024x768} or @samp{set gfxpayload=keep} (to keep the +same mode as used in GRUB) instead. GRUB can automatically detect some uses +of @samp{vga=} and translate them to appropriate settings of +@samp{gfxpayload}. The @command{linux16} command (@pxref{linux16}) avoids +this restriction. +@end deffn + + +@node linux16 +@subsection linux16 + +@deffn Command linux16 file @dots{} +Load a Linux kernel image from @var{file} in 16-bit mode. The rest of the +line is passed verbatim as the @dfn{kernel command-line}. Any initrd must +be reloaded after using this command (@pxref{initrd16}). + +The kernel will be booted using the traditional 16-bit boot protocol. As +well as bypassing problems with @samp{vga=} described in @ref{linux}, this +permits booting some other programs that implement the Linux boot protocol +for the sake of convenience. + +This command is only available on x86 systems. +@end deffn + + +@node list_env +@subsection list_env + +@deffn Command list_env [@option{--file} file] +List all variables in the environment block file. @xref{Environment block}. + +The @option{--file} option overrides the default location of the +environment block. +@end deffn + +@node list_trusted +@subsection list_trusted + +@deffn Command list_trusted +List all public keys trusted by GRUB for validating signatures. +The output is in GPG's v4 key fingerprint format (i.e., the output of +@code{gpg --fingerprint}). The least significant four bytes (last +eight hexadecimal digits) can be used as an argument to +@command{distrust} (@pxref{distrust}). +@xref{Using digital signatures}, for more information about uses for +these keys. +@end deffn + +@node load_env +@subsection load_env + +@deffn Command load_env [@option{--file} file] [@option{--skip-sig}] [whitelisted_variable_name] @dots{} +Load all variables from the environment block file into the environment. +@xref{Environment block}. + +The @option{--file} option overrides the default location of the environment +block. + +The @option{--skip-sig} option skips signature checking even when the +value of environment variable @code{check_signatures} is set to +@code{enforce} (@pxref{check_signatures}). + +If one or more variable names are provided as arguments, they are +interpreted as a whitelist of variables to load from the environment +block file. Variables set in the file but not present in the +whitelist are ignored. + +The @option{--skip-sig} option should be used with care, and should +always be used in concert with a whitelist of acceptable variables +whose values should be set. Failure to employ a carefully constructed +whitelist could result in reading a malicious value into critical +environment variables from the file, such as setting +@code{check_signatures=no}, modifying @code{prefix} to boot from an +unexpected location or not at all, etc. + +When used with care, @option{--skip-sig} and the whitelist enable an +administrator to configure a system to boot only signed +configurations, but to allow the user to select from among multiple +configurations, and to enable ``one-shot'' boot attempts and +``savedefault'' behavior. @xref{Using digital signatures}, for more +information. +@end deffn + + +@node loadfont +@subsection loadfont + +@deffn Command loadfont file @dots{} +Load specified font files. Unless absolute pathname is given, @var{file} +is assumed to be in directory @samp{$prefix/fonts} with +suffix @samp{.pf2} appended. @xref{Theme file format,,Fonts}. +@end deffn + + +@node loopback +@subsection loopback + +@deffn Command loopback [@option{-d}] device file +Make the device named @var{device} correspond to the contents of the +filesystem image in @var{file}. For example: + +@example +loopback loop0 /path/to/image +ls (loop0)/ +@end example + +With the @option{-d} option, delete a device previously created using this +command. +@end deffn + + +@node ls +@subsection ls + +@deffn Command ls [arg @dots{}] +List devices or files. + +With no arguments, print all devices known to GRUB. + +If the argument is a device name enclosed in parentheses (@pxref{Device +syntax}), then print the name of the filesystem of that device. + +If the argument is a directory given as an absolute file name (@pxref{File +name syntax}), then list the contents of that directory. +@end deffn + + +@node lsfonts +@subsection lsfonts + +@deffn Command lsfonts +List loaded fonts. +@end deffn + + +@node lsmod +@subsection lsmod + +@deffn Command lsmod +Show list of loaded modules. +@end deffn + +@node md5sum +@subsection md5sum + +@deffn Command md5sum arg @dots{} +Alias for @code{hashsum --hash md5 arg @dots{}}. See command @command{hashsum} +(@pxref{hashsum}) for full description. +@end deffn + +@node module +@subsection module + +@deffn Command module [--nounzip] file [arguments] +Load a module for multiboot kernel image. The rest of the +line is passed verbatim as the module command line. +@end deffn + +@node multiboot +@subsection multiboot + +@deffn Command multiboot [--quirk-bad-kludge] [--quirk-modules-after-kernel] file @dots{} +Load a multiboot kernel image from @var{file}. The rest of the +line is passed verbatim as the @dfn{kernel command-line}. Any module must +be reloaded after using this command (@pxref{module}). + +Some kernels have known problems. You need to specify --quirk-* for those. +--quirk-bad-kludge is a problem seen in several products that they include +loading kludge information with invalid data in ELF file. GRUB prior to 0.97 +and some custom builds prefered ELF information while 0.97 and GRUB 2 +use kludge. Use this option to ignore kludge. +Known affected systems: old Solaris, SkyOS. + +--quirk-modules-after-kernel is needed for kernels which load at relatively +high address e.g. 16MiB mark and can't cope with modules stuffed between +1MiB mark and beginning of the kernel. +Known afftected systems: VMWare. +@end deffn + +@node nativedisk +@subsection nativedisk + +@deffn Command nativedisk +Switch from firmware disk drivers to native ones. +Really useful only on platforms where both +firmware and native disk drives are available. +Currently i386-pc, i386-efi, i386-ieee1275 and +x86_64-efi. +@end deffn + +@node normal +@subsection normal + +@deffn Command normal [file] +Enter normal mode and display the GRUB menu. + +In normal mode, commands, filesystem modules, and cryptography modules are +automatically loaded, and the full GRUB script parser is available. Other +modules may be explicitly loaded using @command{insmod} (@pxref{insmod}). + +If a @var{file} is given, then commands will be read from that file. +Otherwise, they will be read from @file{$prefix/grub.cfg} if it exists. + +@command{normal} may be called from within normal mode, creating a nested +environment. It is more usual to use @command{configfile} +(@pxref{configfile}) for this. +@end deffn + + +@node normal_exit +@subsection normal_exit + +@deffn Command normal_exit +Exit normal mode (@pxref{normal}). If this instance of normal mode was not +nested within another one, then return to rescue mode. +@end deffn + + +@node parttool +@subsection parttool + +@deffn Command parttool partition commands +Make various modifications to partition table entries. + +Each @var{command} is either a boolean option, in which case it must be +followed with @samp{+} or @samp{-} (with no intervening space) to enable or +disable that option, or else it takes a value in the form +@samp{@var{command}=@var{value}}. + +Currently, @command{parttool} is only useful on DOS partition tables (also +known as Master Boot Record, or MBR). On these partition tables, the +following commands are available: + +@table @asis +@item @samp{boot} (boolean) +When enabled, this makes the selected partition be the active (bootable) +partition on its disk, clearing the active flag on all other partitions. +This command is limited to @emph{primary} partitions. + +@item @samp{type} (value) +Change the type of an existing partition. The value must be a number in the +range 0-0xFF (prefix with @samp{0x} to enter it in hexadecimal). + +@item @samp{hidden} (boolean) +When enabled, this hides the selected partition by setting the @dfn{hidden} +bit in its partition type code; when disabled, unhides the selected +partition by clearing this bit. This is useful only when booting DOS or +Wwindows and multiple primary FAT partitions exist in one disk. See also +@ref{DOS/Windows}. +@end table +@end deffn + + +@node password +@subsection password + +@deffn Command password user clear-password +Define a user named @var{user} with password @var{clear-password}. +@xref{Security}. +@end deffn + + +@node password_pbkdf2 +@subsection password_pbkdf2 + +@deffn Command password_pbkdf2 user hashed-password +Define a user named @var{user} with password hash @var{hashed-password}. +Use @command{grub-mkpasswd-pbkdf2} (@pxref{Invoking grub-mkpasswd-pbkdf2}) +to generate password hashes. @xref{Security}. +@end deffn + + +@node play +@subsection play + +@deffn Command play file | tempo [pitch1 duration1] [pitch2 duration2] @dots{} +Plays a tune + +If the argument is a file name (@pxref{File name syntax}), play the tune +recorded in it. The file format is first the tempo as an unsigned 32bit +little-endian number, then pairs of unsigned 16bit little-endian numbers for +pitch and duration pairs. + +If the arguments are a series of numbers, play the inline tune. + +The tempo is the base for all note durations. 60 gives a 1-second base, 120 +gives a half-second base, etc. Pitches are Hz. Set pitch to 0 to produce +a rest. +@end deffn + + +@node probe +@subsection probe + +@deffn Command probe [@option{--set} var] @option{--driver}|@option{--partmap}|@option{--fs}|@option{--fs-uuid}|@option{--label} device +Retrieve device information. If option @option{--set} is given, assign result +to variable @var{var}, otherwise print information on the screen. +@end deffn + + +@node pxe_unload +@subsection pxe_unload + +@deffn Command pxe_unload +Unload the PXE environment (@pxref{Network}). + +This command is only available on PC BIOS systems. +@end deffn + + +@node read +@subsection read + +@deffn Command read [var] +Read a line of input from the user. If an environment variable @var{var} is +given, set that environment variable to the line of input that was read, +with no terminating newline. +@end deffn + + +@node reboot +@subsection reboot + +@deffn Command reboot +Reboot the computer. +@end deffn + + +@node regexp +@subsection regexp + +@deffn Command regexp [@option{--set} [number:]var] regexp string +Test if regular expression @var{regexp} matches @var{string}. Supported +regular expressions are POSIX.2 Extended Regular Expressions. If option +@option{--set} is given, store @var{number}th matched subexpression in +variable @var{var}. Subexpressions are numbered in order of their opening +parentheses starting from @samp{1}. @var{number} defaults to @samp{1}. +@end deffn + + +@node rmmod +@subsection rmmod + +@deffn Command rmmod module +Remove a loaded @var{module}. +@end deffn + + +@node save_env +@subsection save_env + +@deffn Command save_env [@option{--file} file] var @dots{} +Save the named variables from the environment to the environment block file. +@xref{Environment block}. + +The @option{--file} option overrides the default location of the environment +block. + +This command will operate successfully even when environment variable +@code{check_signatures} is set to @code{enforce} +(@pxref{check_signatures}), since it writes to disk and does not alter +the behavior of GRUB based on any contents of disk that have been +read. It is possible to modify a digitally signed environment block +file from within GRUB using this command, such that its signature will +no longer be valid on subsequent boots. Care should be taken in such +advanced configurations to avoid rendering the system +unbootable. @xref{Using digital signatures}, for more information. +@end deffn + + +@node search +@subsection search + +@deffn Command search @ + [@option{--file}|@option{--label}|@option{--fs-uuid}] @ + [@option{--set} [var]] [@option{--no-floppy}] name +Search devices by file (@option{-f}, @option{--file}), filesystem label +(@option{-l}, @option{--label}), or filesystem UUID (@option{-u}, +@option{--fs-uuid}). + +If the @option{--set} option is used, the first device found is set as the +value of environment variable @var{var}. The default variable is +@samp{root}. + +The @option{--no-floppy} option prevents searching floppy devices, which can +be slow. + +The @samp{search.file}, @samp{search.fs_label}, and @samp{search.fs_uuid} +commands are aliases for @samp{search --file}, @samp{search --label}, and +@samp{search --fs-uuid} respectively. +@end deffn + + +@node sendkey +@subsection sendkey + +@deffn Command sendkey @ + [@option{--num}|@option{--caps}|@option{--scroll}|@option{--insert}|@ +@option{--pause}|@option{--left-shift}|@option{--right-shift}|@ +@option{--sysrq}|@option{--numkey}|@option{--capskey}|@option{--scrollkey}|@ +@option{--insertkey}|@option{--left-alt}|@option{--right-alt}|@ +@option{--left-ctrl}|@option{--right-ctrl} @ + @samp{on}|@samp{off}]@dots{} @ + [@option{no-led}] @ + keystroke +Insert keystrokes into the keyboard buffer when booting. Sometimes an +operating system or chainloaded boot loader requires particular keys to be +pressed: for example, one might need to press a particular key to enter +"safe mode", or when chainloading another boot loader one might send +keystrokes to it to navigate its menu. + +You may provide up to 16 keystrokes (the length of the BIOS keyboard +buffer). Keystroke names may be upper-case or lower-case letters, digits, +or taken from the following table: + +@c Please keep this table in the same order as in +@c commands/i386/pc/sendkey.c, for ease of maintenance. +@c Exception: The function and numeric keys are sorted, for aesthetics. + +@multitable @columnfractions .4 .5 +@headitem Name @tab Key +@item escape @tab Escape +@item exclam @tab ! +@item at @tab @@ +@item numbersign @tab # +@item dollar @tab $ +@item percent @tab % +@item caret @tab ^ +@item ampersand @tab & +@item asterisk @tab * +@item parenleft @tab ( +@item parenright @tab ) +@item minus @tab - +@item underscore @tab _ +@item equal @tab = +@item plus @tab + +@item backspace @tab Backspace +@item tab @tab Tab +@item bracketleft @tab [ +@item braceleft @tab @{ +@item bracketright @tab ] +@item braceright @tab @} +@item enter @tab Enter +@item control @tab press and release Control +@item semicolon @tab ; +@item colon @tab : +@item quote @tab ' +@item doublequote @tab " +@item backquote @tab ` +@item tilde @tab ~ +@item shift @tab press and release left Shift +@item backslash @tab \ +@item bar @tab | +@item comma @tab , +@item less @tab < +@item period @tab . +@item greater @tab > +@item slash @tab / +@item question @tab ? +@item rshift @tab press and release right Shift +@item alt @tab press and release Alt +@item space @tab space bar +@item capslock @tab Caps Lock +@item F1 @tab F1 +@item F2 @tab F2 +@item F3 @tab F3 +@item F4 @tab F4 +@item F5 @tab F5 +@item F6 @tab F6 +@item F7 @tab F7 +@item F8 @tab F8 +@item F9 @tab F9 +@item F10 @tab F10 +@item F11 @tab F11 +@item F12 @tab F12 +@item num1 @tab 1 (numeric keypad) +@item num2 @tab 2 (numeric keypad) +@item num3 @tab 3 (numeric keypad) +@item num4 @tab 4 (numeric keypad) +@item num5 @tab 5 (numeric keypad) +@item num6 @tab 6 (numeric keypad) +@item num7 @tab 7 (numeric keypad) +@item num8 @tab 8 (numeric keypad) +@item num9 @tab 9 (numeric keypad) +@item num0 @tab 0 (numeric keypad) +@item numperiod @tab . (numeric keypad) +@item numend @tab End (numeric keypad) +@item numdown @tab Down (numeric keypad) +@item numpgdown @tab Page Down (numeric keypad) +@item numleft @tab Left (numeric keypad) +@item numcenter @tab 5 with Num Lock inactive (numeric keypad) +@item numright @tab Right (numeric keypad) +@item numhome @tab Home (numeric keypad) +@item numup @tab Up (numeric keypad) +@item numpgup @tab Page Up (numeric keypad) +@item numinsert @tab Insert (numeric keypad) +@item numdelete @tab Delete (numeric keypad) +@item numasterisk @tab * (numeric keypad) +@item numminus @tab - (numeric keypad) +@item numplus @tab + (numeric keypad) +@item numslash @tab / (numeric keypad) +@item numenter @tab Enter (numeric keypad) +@item delete @tab Delete +@item insert @tab Insert +@item home @tab Home +@item end @tab End +@item pgdown @tab Page Down +@item pgup @tab Page Up +@item down @tab Down +@item up @tab Up +@item left @tab Left +@item right @tab Right +@end multitable + +As well as keystrokes, the @command{sendkey} command takes various options +that affect the BIOS keyboard status flags. These options take an @samp{on} +or @samp{off} parameter, specifying that the corresponding status flag be +set or unset; omitting the option for a given status flag will leave that +flag at its initial state at boot. The @option{--num}, @option{--caps}, +@option{--scroll}, and @option{--insert} options emulate setting the +corresponding mode, while the @option{--numkey}, @option{--capskey}, +@option{--scrollkey}, and @option{--insertkey} options emulate pressing and +holding the corresponding key. The other status flag options are +self-explanatory. + +If the @option{--no-led} option is given, the status flag options will have +no effect on keyboard LEDs. + +If the @command{sendkey} command is given multiple times, then only the last +invocation has any effect. + +Since @command{sendkey} manipulates the BIOS keyboard buffer, it may cause +hangs, reboots, or other misbehaviour on some systems. If the operating +system or boot loader that runs after GRUB uses its own keyboard driver +rather than the BIOS keyboard functions, then @command{sendkey} will have no +effect. + +This command is only available on PC BIOS systems. +@end deffn + + +@node set +@subsection set + +@deffn Command set [envvar=value] +Set the environment variable @var{envvar} to @var{value}. If invoked with no +arguments, print all environment variables with their values. +@end deffn + + +@node sha1sum +@subsection sha1sum + +@deffn Command sha1sum arg @dots{} +Alias for @code{hashsum --hash sha1 arg @dots{}}. See command @command{hashsum} +(@pxref{hashsum}) for full description. +@end deffn + + +@node sha256sum +@subsection sha256sum + +@deffn Command sha256sum arg @dots{} +Alias for @code{hashsum --hash sha256 arg @dots{}}. See command @command{hashsum} +(@pxref{hashsum}) for full description. +@end deffn + + +@node sha512sum +@subsection sha512sum + +@deffn Command sha512sum arg @dots{} +Alias for @code{hashsum --hash sha512 arg @dots{}}. See command @command{hashsum} +(@pxref{hashsum}) for full description. +@end deffn + + +@node sleep +@subsection sleep + +@deffn Command sleep [@option{--verbose}] [@option{--interruptible}] count +Sleep for @var{count} seconds. If option @option{--interruptible} is given, +allow @key{ESC} to interrupt sleep. With @option{--verbose} show countdown +of remaining seconds. Exit code is set to 0 if timeout expired and to 1 +if timeout was interrupted by @key{ESC}. +@end deffn + + +@node source +@subsection source + +@deffn Command source file +Read @var{file} as a configuration file, as if its contents had been +incorporated directly into the sourcing file. Unlike @command{configfile} +(@pxref{configfile}), this executes the contents of @var{file} without +changing context: any environment variable changes made by the commands in +@var{file} will be preserved after @command{source} returns, and the menu +will not be shown immediately. +@end deffn + + +@node test +@subsection test + +@deffn Command test expression +Evaluate @var{expression} and return zero exit status if result is true, +non zero status otherwise. + +@var{expression} is one of: + +@table @asis +@item @var{string1} @code{==} @var{string2} +the strings are equal +@item @var{string1} @code{!=} @var{string2} +the strings are not equal +@item @var{string1} @code{<} @var{string2} +@var{string1} is lexicographically less than @var{string2} +@item @var{string1} @code{<=} @var{string2} +@var{string1} is lexicographically less or equal than @var{string2} +@item @var{string1} @code{>} @var{string2} +@var{string1} is lexicographically greater than @var{string2} +@item @var{string1} @code{>=} @var{string2} +@var{string1} is lexicographically greater or equal than @var{string2} +@item @var{integer1} @code{-eq} @var{integer2} +@var{integer1} is equal to @var{integer2} +@item @var{integer1} @code{-ge} @var{integer2} +@var{integer1} is greater than or equal to @var{integer2} +@item @var{integer1} @code{-gt} @var{integer2} +@var{integer1} is greater than @var{integer2} +@item @var{integer1} @code{-le} @var{integer2} +@var{integer1} is less than or equal to @var{integer2} +@item @var{integer1} @code{-lt} @var{integer2} +@var{integer1} is less than @var{integer2} +@item @var{integer1} @code{-ne} @var{integer2} +@var{integer1} is not equal to @var{integer2} +@item @var{prefix}@var{integer1} @code{-pgt} @var{prefix}@var{integer2} +@var{integer1} is greater than @var{integer2} after stripping off common non-numeric @var{prefix}. +@item @var{prefix}@var{integer1} @code{-plt} @var{prefix}@var{integer2} +@var{integer1} is less than @var{integer2} after stripping off common non-numeric @var{prefix}. +@item @var{file1} @code{-nt} @var{file2} +@var{file1} is newer than @var{file2} (modification time). Optionally numeric @var{bias} may be directly appended to @code{-nt} in which case it is added to the first file modification time. +@item @var{file1} @code{-ot} @var{file2} +@var{file1} is older than @var{file2} (modification time). Optionally numeric @var{bias} may be directly appended to @code{-ot} in which case it is added to the first file modification time. +@item @code{-d} @var{file} +@var{file} exists and is a directory +@item @code{-e} @var{file} +@var{file} exists +@item @code{-f} @var{file} +@var{file} exists and is not a directory +@item @code{-s} @var{file} +@var{file} exists and has a size greater than zero +@item @code{-n} @var{string} +the length of @var{string} is nonzero +@item @var{string} +@var{string} is equivalent to @code{-n @var{string}} +@item @code{-z} @var{string} +the length of @var{string} is zero +@item @code{(} @var{expression} @code{)} +@var{expression} is true +@item @code{!} @var{expression} +@var{expression} is false +@item @var{expression1} @code{-a} @var{expression2} +both @var{expression1} and @var{expression2} are true +@item @var{expression1} @var{expression2} +both @var{expression1} and @var{expression2} are true. This syntax is not POSIX-compliant and is not recommended. +@item @var{expression1} @code{-o} @var{expression2} +either @var{expression1} or @var{expression2} is true +@end table +@end deffn + + +@node true +@subsection true + +@deffn Command true +Do nothing, successfully. This is mainly useful in control constructs such +as @code{if} and @code{while} (@pxref{Shell-like scripting}). +@end deffn + +@node trust +@subsection trust + +@deffn Command trust [@option{--skip-sig}] pubkey_file +Read public key from @var{pubkey_file} and add it to GRUB's internal +list of trusted public keys. These keys are used to validate digital +signatures when environment variable @code{check_signatures} is set to +@code{enforce}. Note that if @code{check_signatures} is set to +@code{enforce} when @command{trust} executes, then @var{pubkey_file} +must itself be properly signed. The @option{--skip-sig} option can be +used to disable signature-checking when reading @var{pubkey_file} +itself. It is expected that @option{--skip-sig} is useful for testing +and manual booting. @xref{Using digital signatures}, for more +information. +@end deffn + + +@node unset +@subsection unset + +@deffn Command unset envvar +Unset the environment variable @var{envvar}. +@end deffn + + +@node uppermem +@subsection uppermem + +This command is not yet implemented for GRUB 2, although it is planned. + + +@ignore +@node vbeinfo +@subsection vbeinfo + +@deffn Command vbeinfo [[WxH]xD] +Alias for command @command{videoinfo} (@pxref{videoinfo}). It is available +only on PC BIOS platforms. +@end deffn +@end ignore + + +@node verify_detached +@subsection verify_detached + +@deffn Command verify_detached [@option{--skip-sig}] file signature_file [pubkey_file] +Verifies a GPG-style detached signature, where the signed file is +@var{file}, and the signature itself is in file @var{signature_file}. +Optionally, a specific public key to use can be specified using +@var{pubkey_file}. When environment variable @code{check_signatures} +is set to @code{enforce}, then @var{pubkey_file} must itself be +properly signed by an already-trusted key. An unsigned +@var{pubkey_file} can be loaded by specifying @option{--skip-sig}. +If @var{pubkey_file} is omitted, then public keys from GRUB's trusted keys +(@pxref{list_trusted}, @pxref{trust}, and @pxref{distrust}) are +tried. + +Exit code @code{$?} is set to 0 if the signature validates +successfully. If validation fails, it is set to a non-zero value. +@xref{Using digital signatures}, for more information. +@end deffn + +@node videoinfo +@subsection videoinfo + +@deffn Command videoinfo [[WxH]xD] +List available video modes. If resolution is given, show only matching modes. +@end deffn + +@node xen_hypervisor +@subsection xen_hypervisor + +@deffn Command xen_hypervisor file [arguments] @dots{} +Load a Xen hypervisor binary from @var{file}. The rest of the line is passed +verbatim as the @dfn{kernel command-line}. Any other binaries must be +reloaded after using this command. +@end deffn + +@node xen_linux +@subsection xen_linux + +@deffn Command xen_linux file [arguments] +Load a dom0 kernel image for xen hypervisor at the booting process of xen. +The rest of the line is passed verbatim as the module command line. +@end deffn + +@node xen_initrd +@subsection xen_initrd + +@deffn Command xen_initrd file +Load a initrd image for dom0 kernel at the booting process of xen. +@end deffn + +@node xen_xsm +@subsection xen_xsm + +@deffn Command xen_xsm file +Load a xen security module for xen hypervisor at the booting process of xen. +See @uref{http://wiki.xen.org/wiki/XSM} for more detail. +@end deffn + + +@node Networking commands +@section The list of networking commands + +@menu +* net_add_addr:: Add a network address +* net_add_dns:: Add a DNS server +* net_add_route:: Add routing entry +* net_bootp:: Perform a bootp autoconfiguration +* net_del_addr:: Remove IP address from interface +* net_del_dns:: Remove a DNS server +* net_del_route:: Remove a route entry +* net_get_dhcp_option:: Retrieve DHCP options +* net_ipv6_autoconf:: Perform IPv6 autoconfiguration +* net_ls_addr:: List interfaces +* net_ls_cards:: List network cards +* net_ls_dns:: List DNS servers +* net_ls_routes:: List routing entries +* net_nslookup:: Perform a DNS lookup +@end menu + + +@node net_add_addr +@subsection net_add_addr + +@deffn Command net_add_addr @var{interface} @var{card} @var{address} +Configure additional network @var{interface} with @var{address} on a +network @var{card}. @var{address} can be either IP in dotted decimal notation, +or symbolic name which is resolved using DNS lookup. If successful, this command +also adds local link routing entry to the default subnet of @var{address} +with name @var{interface}@samp{:local} via @var{interface}. +@end deffn + + +@node net_add_dns +@subsection net_add_dns + +@deffn Command net_add_dns @var{server} +Resolve @var{server} IP address and add to the list of DNS servers used during +name lookup. +@end deffn + + +@node net_add_route +@subsection net_add_route + +@deffn Command net_add_route @var{shortname} @var{ip}[/@var{prefix}] [@var{interface} | @samp{gw} @var{gateway}] +Add route to network with address @var{ip} as modified by @var{prefix} via +either local @var{interface} or @var{gateway}. @var{prefix} is optional and +defaults to 32 for IPv4 address and 128 for IPv6 address. Route is identified +by @var{shortname} which can be used to remove it (@pxref{net_del_route}). +@end deffn + + +@node net_bootp +@subsection net_bootp + +@deffn Command net_bootp [@var{card}] +Perform configuration of @var{card} using DHCP protocol. If no card name +is specified, try to configure all existing cards. If configuration was +successful, interface with name @var{card}@samp{:dhcp} and configured +address is added to @var{card}. +@comment If server provided gateway information in +@comment DHCP ACK packet, it is added as route entry with the name @var{card}@samp{:dhcp:gw}. +Additionally the following DHCP options are recognized and processed: + +@table @samp +@item 1 (Subnet Mask) +Used to calculate network local routing entry for interface @var{card}@samp{:dhcp}. +@item 3 (Router) +Adds default route entry with the name @var{card}@samp{:dhcp:default} via gateway +from DHCP option. Note that only option with single route is accepted. +@item 6 (Domain Name Server) +Adds all servers from option value to the list of servers used during name resolution. +@item 12 (Host Name) +Sets environment variable @samp{net_}@var{}@samp{_dhcp_hostname} +(@pxref{net_@var{}_hostname}) to the value of option. +@item 15 (Domain Name) +Sets environment variable @samp{net_}@var{}@samp{_dhcp_domain} +(@pxref{net_@var{}_domain}) to the value of option. +@item 17 (Root Path) +Sets environment variable @samp{net_}@var{}@samp{_dhcp_rootpath} +(@pxref{net_@var{}_rootpath}) to the value of option. +@item 18 (Extensions Path) +Sets environment variable @samp{net_}@var{}@samp{_dhcp_extensionspath} +(@pxref{net_@var{}_extensionspath}) to the value of option. +@end table + +@end deffn + + +@node net_del_addr +@subsection net_del_addr + +@deffn Command net_del_addr @var{interface} +Remove configured @var{interface} with associated address. +@end deffn + + +@node net_del_dns +@subsection net_del_dns + +@deffn Command net_del_dns @var{address} +Remove @var{address} from list of servers used during name lookup. +@end deffn + + +@node net_del_route +@subsection net_del_route + +@deffn Command net_del_route @var{shortname} +Remove route entry identified by @var{shortname}. +@end deffn + + +@node net_get_dhcp_option +@subsection net_get_dhcp_option + +@deffn Command net_get_dhcp_option @var{var} @var{interface} @var{number} @var{type} +Request DHCP option @var{number} of @var{type} via @var{interface}. @var{type} +can be one of @samp{string}, @samp{number} or @samp{hex}. If option is found, +assign its value to variable @var{var}. Values of types @samp{number} and @samp{hex} +are converted to string representation. +@end deffn + + +@node net_ipv6_autoconf +@subsection net_ipv6_autoconf + +@deffn Command net_ipv6_autoconf [@var{card}] +Perform IPv6 autoconfiguration by adding to the @var{card} interface with name +@var{card}@samp{:link} and link local MAC-based address. If no card is specified, +perform autoconfiguration for all existing cards. +@end deffn + + +@node net_ls_addr +@subsection net_ls_addr + +@deffn Command net_ls_addr +List all configured interfaces with their MAC and IP addresses. +@end deffn + + +@node net_ls_cards +@subsection net_ls_cards + +@deffn Command net_ls_cards +List all detected network cards with their MAC address. +@end deffn + + +@node net_ls_dns +@subsection net_ls_dns + +@deffn Command net_ls_dns +List addresses of DNS servers used during name lookup. +@end deffn + + +@node net_ls_routes +@subsection net_ls_routes + +@deffn Command net_ls_routes +List routing entries. +@end deffn + + +@node net_nslookup +@subsection net_nslookup + +@deffn Command net_nslookup @var{name} [@var{server}] +Resolve address of @var{name} using DNS server @var{server}. If no server +is given, use default list of servers. +@end deffn + + +@node Internationalisation +@chapter Internationalisation + +@section Charset +GRUB uses UTF-8 internally other than in rendering where some GRUB-specific +appropriate representation is used. All text files (including config) are +assumed to be encoded in UTF-8. + +@section Filesystems +NTFS, JFS, UDF, HFS+, exFAT, long filenames in FAT, Joliet part of +ISO9660 are treated as UTF-16 as per specification. AFS and BFS are read +as UTF-8, again according to specification. BtrFS, cpio, tar, squash4, minix, +minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4, FAT (short names), +RockRidge part of ISO9660, nilfs2, UFS1, UFS2 and ZFS are assumed +to be UTF-8. This might be false on systems configured with legacy charset +but as long as the charset used is superset of ASCII you should be able to +access ASCII-named files. And it's recommended to configure your system to use +UTF-8 to access the filesystem, convmv may help with migration. ISO9660 (plain) +filenames are specified as being ASCII or being described with unspecified +escape sequences. GRUB assumes that the ISO9660 names are UTF-8 (since +any ASCII is valid UTF-8). There are some old CD-ROMs which use CP437 +in non-compliant way. You're still able to access files with names containing +only ASCII characters on such filesystems though. You're also able to access +any file if the filesystem contains valid Joliet (UTF-16) or RockRidge (UTF-8). +AFFS, SFS and HFS never use unicode and GRUB assumes them to be in Latin1, +Latin1 and MacRoman respectively. GRUB handles filesystem case-insensitivity +however no attempt is performed at case conversion of international characters +so e.g. a file named lowercase greek alpha is treated as different from +the one named as uppercase alpha. The filesystems in questions are +NTFS (except POSIX namespace), HFS+ (configurable at mkfs time, default +insensitive), SFS (configurable at mkfs time, default insensitive), +JFS (configurable at mkfs time, default sensitive), HFS, AFFS, FAT, exFAT +and ZFS (configurable on per-subvolume basis by property ``casesensitivity'', +default sensitive). On ZFS subvolumes marked as case insensitive files +containing lowercase international characters are inaccessible. +Also like all supported filesystems except HFS+ and ZFS (configurable on +per-subvolume basis by property ``normalization'', default none) GRUB makes +no attempt at check of canonical equivalence so a file name u-diaresis is +treated as distinct from u+combining diaresis. This however means that in +order to access file on HFS+ its name must be specified in normalisation form D. +On normalized ZFS subvolumes filenames out of normalisation are inaccessible. + +@section Output terminal +Firmware output console ``console'' on ARC and IEEE1275 are limited to ASCII. + +BIOS firmware console and VGA text are limited to ASCII and some pseudographics. + +None of above mentioned is appropriate for displaying international and any +unsupported character is replaced with question mark except pseudographics +which we attempt to approximate with ASCII. + +EFI console on the other hand nominally supports UTF-16 but actual language +coverage depends on firmware and may be very limited. + +The encoding used on serial can be chosen with @command{terminfo} as +either ASCII, UTF-8 or ``visual UTF-8''. Last one is against the specification +but results in correct rendering of right-to-left on some readers which don't +have own bidi implementation. + +On emu GRUB checks if charset is UTF-8 and uses it if so and uses ASCII +otherwise. + +When using gfxterm or gfxmenu GRUB itself is responsible for rendering the +text. In this case GRUB is limited by loaded fonts. If fonts contain all +required characters then bidirectional text, cursive variants and combining +marks other than enclosing, half (e.g. left half tilde or combining overline) +and double ones. Ligatures aren't supported though. This should cover European, +Middle Eastern (if you don't mind lack of lam-alif ligature in Arabic) and +East Asian scripts. Notable unsupported scripts are Brahmic family and +derived as well as Mongolian, Tifinagh, Korean Jamo (precomposed characters +have no problem) and tonal writing (2e5-2e9). GRUB also ignores deprecated +(as specified in Unicode) characters (e.g. tags). GRUB also doesn't handle so +called ``annotation characters'' If you can complete either of +two lists or, better, propose a patch to improve rendering, please contact +developer team. + +@section Input terminal +Firmware console on BIOS, IEEE1275 and ARC doesn't allow you to enter non-ASCII +characters. EFI specification allows for such but author is unaware of any +actual implementations. Serial input is currently limited for latin1 (unlikely +to change). Own keyboard implementations (at_keyboard and usb_keyboard) +supports any key but work on one-char-per-keystroke. +So no dead keys or advanced input method. Also there is no keymap change hotkey. +In practice it makes difficult to enter any text using non-Latin alphabet. +Moreover all current input consumers are limited to ASCII. + +@section Gettext +GRUB supports being translated. For this you need to have language *.mo files in $prefix/locale, load gettext module and set ``lang'' variable. + +@section Regexp +Regexps work on unicode characters, however no attempt at checking cannonical +equivalence has been made. Moreover the classes like [:alpha:] match only +ASCII subset. + +@section Other +Currently GRUB always uses YEAR-MONTH-DAY HOUR:MINUTE:SECOND [WEEKDAY] 24-hour +datetime format but weekdays are translated. +GRUB always uses the decimal number format with [0-9] as digits and . as +descimal separator and no group separator. +IEEE1275 aliases are matched case-insensitively except non-ASCII which is +matched as binary. Similar behaviour is for matching OSBundleRequired. +Since IEEE1275 aliases and OSBundleRequired don't contain any non-ASCII it +should never be a problem in practice. +Case-sensitive identifiers are matched as raw strings, no canonical +equivalence check is performed. Case-insenstive identifiers are matched +as RAW but additionally [a-z] is equivalent to [A-Z]. GRUB-defined +identifiers use only ASCII and so should user-defined ones. +Identifiers containing non-ASCII may work but aren't supported. +Only the ASCII space characters (space U+0020, tab U+000b, CR U+000d and +LF U+000a) are recognised. Other unicode space characters aren't a valid +field separator. +@command{test} (@pxref{test}) tests <, >, <=, >=, -pgt and -plt compare the strings in the +lexicographical order of unicode codepoints, replicating the behaviour of +test from coreutils. +environment variables and commands are listed in the same order. + +@node Security +@chapter Security + +@menu +* Authentication and authorisation:: Users and access control +* Using digital signatures:: Booting digitally signed code +@end menu + +@node Authentication and authorisation +@section Authentication and authorisation in GRUB + +By default, the boot loader interface is accessible to anyone with physical +access to the console: anyone can select and edit any menu entry, and anyone +can get direct access to a GRUB shell prompt. For most systems, this is +reasonable since anyone with direct physical access has a variety of other +ways to gain full access, and requiring authentication at the boot loader +level would only serve to make it difficult to recover broken systems. + +However, in some environments, such as kiosks, it may be appropriate to lock +down the boot loader to require authentication before performing certain +operations. + +The @samp{password} (@pxref{password}) and @samp{password_pbkdf2} +(@pxref{password_pbkdf2}) commands can be used to define users, each of +which has an associated password. @samp{password} sets the password in +plain text, requiring @file{grub.cfg} to be secure; @samp{password_pbkdf2} +sets the password hashed using the Password-Based Key Derivation Function +(RFC 2898), requiring the use of @command{grub-mkpasswd-pbkdf2} +(@pxref{Invoking grub-mkpasswd-pbkdf2}) to generate password hashes. + +In order to enable authentication support, the @samp{superusers} environment +variable must be set to a list of usernames, separated by any of spaces, +commas, semicolons, pipes, or ampersands. Superusers are permitted to use +the GRUB command line, edit menu entries, and execute any menu entry. If +@samp{superusers} is set, then use of the command line and editing of menu +entries are automatically restricted to superusers. Setting @samp{superusers} +to empty string effectively disables both access to CLI and editing of menu +entries. + +Other users may be allowed to execute specific menu entries by giving a list of +usernames (as above) using the @option{--users} option to the +@samp{menuentry} command (@pxref{menuentry}). If the @option{--unrestricted} +option is used for a menu entry, then that entry is unrestricted. +If the @option{--users} option is not used for a menu entry, then that +only superusers are able to use it. + +Putting this together, a typical @file{grub.cfg} fragment might look like +this: + +@example +@group +set superusers="root" +password_pbkdf2 root grub.pbkdf2.sha512.10000.biglongstring +password user1 insecure + +menuentry "May be run by any user" --unrestricted @{ + set root=(hd0,1) + linux /vmlinuz +@} + +menuentry "Superusers only" --users "" @{ + set root=(hd0,1) + linux /vmlinuz single +@} + +menuentry "May be run by user1 or a superuser" --users user1 @{ + set root=(hd0,2) + chainloader +1 +@} +@end group +@end example + +The @command{grub-mkconfig} program does not yet have built-in support for +generating configuration files with authentication. You can use +@file{/etc/grub.d/40_custom} to add simple superuser authentication, by +adding @kbd{set superusers=} and @kbd{password} or @kbd{password_pbkdf2} +commands. + +@node Using digital signatures +@section Using digital signatures in GRUB + +GRUB's @file{core.img} can optionally provide enforcement that all files +subsequently read from disk are covered by a valid digital signature. +This document does @strong{not} cover how to ensure that your +platform's firmware (e.g., Coreboot) validates @file{core.img}. + +If environment variable @code{check_signatures} +(@pxref{check_signatures}) is set to @code{enforce}, then every +attempt by the GRUB @file{core.img} to load another file @file{foo} +implicitly invokes @code{verify_detached foo foo.sig} +(@pxref{verify_detached}). @code{foo.sig} must contain a valid +digital signature over the contents of @code{foo}, which can be +verified with a public key currently trusted by GRUB +(@pxref{list_trusted}, @pxref{trust}, and @pxref{distrust}). If +validation fails, then file @file{foo} cannot be opened. This failure +may halt or otherwise impact the boot process. + +@comment Unfortunately --pubkey is not yet supported by grub-install, +@comment but we should not bring up internal detail grub-mkimage here +@comment in the user guide (as opposed to developer's manual). + +@comment An initial trusted public key can be embedded within the GRUB +@comment @file{core.img} using the @code{--pubkey} option to +@comment @command{grub-mkimage} (@pxref{Invoking grub-install}). Presently it +@comment is necessary to write a custom wrapper around @command{grub-mkimage} +@comment using the @code{--grub-mkimage} flag to @command{grub-install}. + +GRUB uses GPG-style detached signatures (meaning that a file +@file{foo.sig} will be produced when file @file{foo} is signed), and +currently supports the DSA and RSA signing algorithms. A signing key +can be generated as follows: + +@example +gpg --gen-key +@end example + +An individual file can be signed as follows: + +@example +gpg --detach-sign /path/to/file +@end example + +For successful validation of all of GRUB's subcomponents and the +loaded OS kernel, they must all be signed. One way to accomplish this +is the following (after having already produced the desired +@file{grub.cfg} file, e.g., by running @command{grub-mkconfig} +(@pxref{Invoking grub-mkconfig}): + +@example +@group +# Edit /dev/shm/passphrase.txt to contain your signing key's passphrase +for i in `find /boot -name "*.cfg" -or -name "*.lst" -or \ + -name "*.mod" -or -name "vmlinuz*" -or -name "initrd*" -or \ + -name "grubenv"`; +do + gpg --batch --detach-sign --passphrase-fd 0 $i < \ + /dev/shm/passphrase.txt +done +shred /dev/shm/passphrase.txt +@end group +@end example + +See also: @ref{check_signatures}, @ref{verify_detached}, @ref{trust}, +@ref{list_trusted}, @ref{distrust}, @ref{load_env}, @ref{save_env}. + +Note that internally signature enforcement is controlled by setting +the environment variable @code{check_signatures} equal to +@code{enforce}. Passing one or more @code{--pubkey} options to +@command{grub-mkimage} implicitly defines @code{check_signatures} +equal to @code{enforce} in @file{core.img} prior to processing any +configuration files. + +Note that signature checking does @strong{not} prevent an attacker +with (serial, physical, ...) console access from dropping manually to +the GRUB console and executing: + +@example +set check_signatures=no +@end example + +To prevent this, password-protection (@pxref{Authentication and +authorisation}) is essential. Note that even with GRUB password +protection, GRUB itself cannot prevent someone with physical access to +the machine from altering that machine's firmware (e.g., Coreboot +or BIOS) configuration to cause the machine to boot from a different +(attacker-controlled) device. GRUB is at best only one link in a +secure boot chain. + +@node Platform limitations +@chapter Platform limitations + +GRUB2 is designed to be portable and is actually ported across platforms. We +try to keep all platforms at the level. Unfortunately some platforms are better +supported than others. This is detailed in current and 2 following sections. + +ARC platform is unable to change datetime (firmware doesn't seem to provide a +function for it). +EMU has similar limitation. + +On EMU platform no serial port is available. + +Console charset refers only to firmware-assisted console. gfxterm is always +Unicode (see Internationalisation section for its limitations). Serial is +configurable to UTF-8 or ASCII (see Internationalisation). In case of qemu +and coreboot ports the refered console is vga_text. Loongson always uses +gfxterm. + +Most limited one is ASCII. CP437 provides additionally pseudographics. +GRUB2 doesn't use any language characters from CP437 as often CP437 is replaced +by national encoding compatible only in pseudographics. +Unicode is the most versatile charset which supports many languages. However +the actual console may be much more limited depending on firmware + +On BIOS network is supported only if the image is loaded through network. +On sparc64 GRUB is unable to determine which server it was booted from. + +Direct ATA/AHCI support allows to circumvent various firmware limitations but +isn't needed for normal operation except on baremetal ports. + +AT keyboard support allows keyboard layout remapping and support for keys not +available through firmware. It isn't needed for normal operation except +baremetal ports. + +Speaker allows morse and spkmodem communication. + +USB support provides benefits similar to ATA (for USB disks) or AT (for USB +keyboards). In addition it allows USBserial. + +Chainloading refers to the ability to load another bootloader through the same protocol + +Hints allow faster disk discovery by already knowing in advance which is the disk in +question. On some platforms hints are correct unless you move the disk between boots. +On other platforms it's just an educated guess. +Note that hint failure results in just reduced performance, not a failure + +BadRAM is the ability to mark some of the RAM as ``bad''. Note: due to protocol +limitations mips-loongson (with Linux protocol) +and mips-qemu_mips can use only memory up to first hole. + +Bootlocation is ability of GRUB to automatically detect where it boots from. +``disk'' means the detection is limited to detecting the disk with partition +being discovered on install time. ``partition'' means that disk and partiton +can be automatically discovered. ``file'' means that boot image file name as +well as disk and partition can be discovered. For consistency default install ignores +partition and relies solely on disk detection. If no bootlocation discovery is available +or boot and grub-root disks are different, UUID is used instead. On ARC if no device +to install to is specified, UUID is used instead as well. + + +@multitable @columnfractions .20 .20 .20 .20 .20 +@item @tab BIOS @tab Coreboot @tab Multiboot @tab Qemu +@item video @tab yes @tab yes @tab yes @tab yes +@item console charset @tab CP437 @tab CP437 @tab CP437 @tab CP437 +@item network @tab yes (*) @tab no @tab no @tab no +@item ATA/AHCI @tab yes @tab yes @tab yes @tab yes +@item AT keyboard @tab yes @tab yes @tab yes @tab yes +@item Speaker @tab yes @tab yes @tab yes @tab yes +@item USB @tab yes @tab yes @tab yes @tab yes +@item chainloader @tab local @tab yes @tab yes @tab no +@item cpuid @tab partial @tab partial @tab partial @tab partial +@item hints @tab guess @tab guess @tab guess @tab guess +@item PCI @tab yes @tab yes @tab yes @tab yes +@item badram @tab yes @tab yes @tab yes @tab yes +@item compression @tab always @tab pointless @tab no @tab no +@item exit @tab yes @tab no @tab no @tab no +@item bootlocation @tab disk @tab no @tab no @tab no +@end multitable + +@multitable @columnfractions .20 .20 .20 .20 .20 +@item @tab ia32 EFI @tab amd64 EFI @tab ia32 IEEE1275 @tab Itanium +@item video @tab yes @tab yes @tab no @tab no +@item console charset @tab Unicode @tab Unicode @tab ASCII @tab Unicode +@item network @tab yes @tab yes @tab yes @tab yes +@item ATA/AHCI @tab yes @tab yes @tab yes @tab no +@item AT keyboard @tab yes @tab yes @tab yes @tab no +@item Speaker @tab yes @tab yes @tab yes @tab no +@item USB @tab yes @tab yes @tab yes @tab no +@item chainloader @tab local @tab local @tab no @tab local +@item cpuid @tab partial @tab partial @tab partial @tab no +@item hints @tab guess @tab guess @tab good @tab guess +@item PCI @tab yes @tab yes @tab yes @tab no +@item badram @tab yes @tab yes @tab no @tab yes +@item compression @tab no @tab no @tab no @tab no +@item exit @tab yes @tab yes @tab yes @tab yes +@item bootlocation @tab file @tab file @tab file, ignored @tab file +@end multitable + +@multitable @columnfractions .20 .20 .20 .20 .20 +@item @tab Loongson @tab sparc64 @tab Powerpc @tab ARC +@item video @tab yes @tab no @tab yes @tab no +@item console charset @tab N/A @tab ASCII @tab ASCII @tab ASCII +@item network @tab no @tab yes (*) @tab yes @tab no +@item ATA/AHCI @tab yes @tab no @tab no @tab no +@item AT keyboard @tab yes @tab no @tab no @tab no +@item Speaker @tab no @tab no @tab no @tab no +@item USB @tab yes @tab no @tab no @tab no +@item chainloader @tab yes @tab no @tab no @tab no +@item cpuid @tab no @tab no @tab no @tab no +@item hints @tab good @tab good @tab good @tab no +@item PCI @tab yes @tab no @tab no @tab no +@item badram @tab yes (*) @tab no @tab no @tab no +@item compression @tab configurable @tab no @tab no @tab configurable +@item exit @tab no @tab yes @tab yes @tab yes +@item bootlocation @tab no @tab partition @tab file @tab file (*) +@end multitable + +@multitable @columnfractions .20 .20 .20 .20 .20 +@item @tab MIPS qemu @tab emu @tab xen +@item video @tab no @tab yes @tab no +@item console charset @tab CP437 @tab Unicode (*) @tab ASCII +@item network @tab no @tab yes @tab no +@item ATA/AHCI @tab yes @tab no @tab no +@item AT keyboard @tab yes @tab no @tab no +@item Speaker @tab no @tab no @tab no +@item USB @tab N/A @tab yes @tab no +@item chainloader @tab yes @tab no @tab yes +@item cpuid @tab no @tab no @tab yes +@item hints @tab guess @tab no @tab no +@item PCI @tab no @tab no @tab no +@item badram @tab yes (*) @tab no @tab no +@item compression @tab configurable @tab no @tab no +@item exit @tab no @tab yes @tab no +@item bootlocation @tab no @tab file @tab no +@end multitable + +@node Platform-specific operations +@chapter Outline + +Some platforms have features which allows to implement +some commands useless or not implementable on others. + +Quick summary: + +Information retrieval: + +@itemize +@item mipsel-loongson: lsspd +@item mips-arc: lsdev +@item efi: lsefisystab, lssal, lsefimmap, lsefi +@item i386-pc: lsapm +@item i386-coreboot: lscoreboot, coreboot_boottime, cbmemc +@item acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): lsacpi +@end itemize + +Workarounds for platform-specific issues: +@itemize +@item i386-efi/x86_64-efi: loadbios, fakebios, fix_video +@item acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): + acpi (override ACPI tables) +@item i386-pc: drivemap +@item i386-pc: sendkey +@end itemize + +Advanced operations for power users: +@itemize +@item x86: iorw (direct access to I/O ports) +@end itemize + +Miscelaneous: +@itemize +@item cmos (x86-*, ieee1275, mips-qemu_mips, mips-loongson): cmostest + (used on some laptops to check for special power-on key), cmosclean +@item i386-pc: play +@end itemize + +@node Supported kernels +@chapter Supported boot targets + +X86 support is summarised in the following table. ``Yes'' means that the kernel works on the given platform, ``crashes'' means an early kernel crash which we hope will be fixed by concerned kernel developers. ``no'' means GRUB doesn't load the given kernel on a given platform. ``headless'' means that the kernel works but lacks console drivers (you can still use serial or network console). In case of ``no'' and ``crashes'' the reason is given in footnote. +@multitable @columnfractions .50 .22 .22 +@item @tab BIOS @tab Coreboot +@item BIOS chainloading @tab yes @tab no (1) +@item NTLDR @tab yes @tab no (1) +@item Plan9 @tab yes @tab no (1) +@item Freedos @tab yes @tab no (1) +@item FreeBSD bootloader @tab yes @tab crashes (1) +@item 32-bit kFreeBSD @tab yes @tab crashes (5) +@item 64-bit kFreeBSD @tab yes @tab crashes (5) +@item 32-bit kNetBSD @tab yes @tab crashes (1) +@item 64-bit kNetBSD @tab yes @tab crashes +@item 32-bit kOpenBSD @tab yes @tab yes +@item 64-bit kOpenBSD @tab yes @tab yes +@item Multiboot @tab yes @tab yes +@item Multiboot2 @tab yes @tab yes +@item 32-bit Linux (legacy protocol) @tab yes @tab no (1) +@item 64-bit Linux (legacy protocol) @tab yes @tab no (1) +@item 32-bit Linux (modern protocol) @tab yes @tab yes +@item 64-bit Linux (modern protocol) @tab yes @tab yes +@item 32-bit XNU @tab yes @tab ? +@item 64-bit XNU @tab yes @tab ? +@item 32-bit EFI chainloader @tab no (2) @tab no (2) +@item 64-bit EFI chainloader @tab no (2) @tab no (2) +@item Appleloader @tab no (2) @tab no (2) +@end multitable + +@multitable @columnfractions .50 .22 .22 +@item @tab Multiboot @tab Qemu +@item BIOS chainloading @tab no (1) @tab no (1) +@item NTLDR @tab no (1) @tab no (1) +@item Plan9 @tab no (1) @tab no (1) +@item FreeDOS @tab no (1) @tab no (1) +@item FreeBSD bootloader @tab crashes (1) @tab crashes (1) +@item 32-bit kFreeBSD @tab crashes (5) @tab crashes (5) +@item 64-bit kFreeBSD @tab crashes (5) @tab crashes (5) +@item 32-bit kNetBSD @tab crashes (1) @tab crashes (1) +@item 64-bit kNetBSD @tab yes @tab yes +@item 32-bit kOpenBSD @tab yes @tab yes +@item 64-bit kOpenBSD @tab yes @tab yes +@item Multiboot @tab yes @tab yes +@item Multiboot2 @tab yes @tab yes +@item 32-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 64-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 32-bit Linux (modern protocol) @tab yes @tab yes +@item 64-bit Linux (modern protocol) @tab yes @tab yes +@item 32-bit XNU @tab ? @tab ? +@item 64-bit XNU @tab ? @tab ? +@item 32-bit EFI chainloader @tab no (2) @tab no (2) +@item 64-bit EFI chainloader @tab no (2) @tab no (2) +@item Appleloader @tab no (2) @tab no (2) +@end multitable + +@multitable @columnfractions .50 .22 .22 +@item @tab ia32 EFI @tab amd64 EFI +@item BIOS chainloading @tab no (1) @tab no (1) +@item NTLDR @tab no (1) @tab no (1) +@item Plan9 @tab no (1) @tab no (1) +@item FreeDOS @tab no (1) @tab no (1) +@item FreeBSD bootloader @tab crashes (1) @tab crashes (1) +@item 32-bit kFreeBSD @tab headless @tab headless +@item 64-bit kFreeBSD @tab headless @tab headless +@item 32-bit kNetBSD @tab crashes (1) @tab crashes (1) +@item 64-bit kNetBSD @tab yes @tab yes +@item 32-bit kOpenBSD @tab headless @tab headless +@item 64-bit kOpenBSD @tab headless @tab headless +@item Multiboot @tab yes @tab yes +@item Multiboot2 @tab yes @tab yes +@item 32-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 64-bit Linux (legacy protocol) @tab no (1) @tab no (1) +@item 32-bit Linux (modern protocol) @tab yes @tab yes +@item 64-bit Linux (modern protocol) @tab yes @tab yes +@item 32-bit XNU @tab yes @tab yes +@item 64-bit XNU @tab yes (4) @tab yes +@item 32-bit EFI chainloader @tab yes @tab no (3) +@item 64-bit EFI chainloader @tab no (3) @tab yes +@item Appleloader @tab yes @tab yes +@end multitable + +@multitable @columnfractions .50 .22 .22 +@item @tab ia32 IEEE1275 +@item BIOS chainloading @tab no (1) +@item NTLDR @tab no (1) +@item Plan9 @tab no (1) +@item FreeDOS @tab no (1) +@item FreeBSD bootloader @tab crashes (1) +@item 32-bit kFreeBSD @tab crashes (5) +@item 64-bit kFreeBSD @tab crashes (5) +@item 32-bit kNetBSD @tab crashes (1) +@item 64-bit kNetBSD @tab ? +@item 32-bit kOpenBSD @tab ? +@item 64-bit kOpenBSD @tab ? +@item Multiboot @tab ? +@item Multiboot2 @tab ? +@item 32-bit Linux (legacy protocol) @tab no (1) +@item 64-bit Linux (legacy protocol) @tab no (1) +@item 32-bit Linux (modern protocol) @tab ? +@item 64-bit Linux (modern protocol) @tab ? +@item 32-bit XNU @tab ? +@item 64-bit XNU @tab ? +@item 32-bit EFI chainloader @tab no (2) +@item 64-bit EFI chainloader @tab no (2) +@item Appleloader @tab no (2) +@end multitable + +@enumerate +@item Requires BIOS +@item EFI only +@item 32-bit and 64-bit EFI have different structures and work in different CPU modes so it's not possible to chainload 32-bit bootloader on 64-bit platform and vice-versa +@item Some modules may need to be disabled +@item Requires ACPI +@end enumerate + +PowerPC, IA64 and Sparc64 ports support only Linux. MIPS port supports Linux +and multiboot2. + +@section Boot tests + +As you have seen in previous chapter the support matrix is pretty big and some of the configurations are only rarely used. To ensure the quality bootchecks are available for all x86 targets except EFI chainloader, Appleloader and XNU. All x86 platforms have bootcheck facility except ieee1275. Multiboot, multiboot2, BIOS chainloader, ntldr and freebsd-bootloader boot targets are tested only with a fake kernel images. Only Linux is tested among the payloads using Linux protocols. + +Following variables must be defined: + +@multitable @columnfractions .30 .65 +@item GRUB_PAYLOADS_DIR @tab directory containing the required kernels +@item GRUB_CBFSTOOL @tab cbfstool from Coreboot package (for coreboot platform only) +@item GRUB_COREBOOT_ROM @tab empty Coreboot ROM +@item GRUB_QEMU_OPTS @tab additional options to be supplied to QEMU +@end multitable + +Required files are: + +@multitable @columnfractions .40 .55 +@item kfreebsd_env.i386 @tab 32-bit kFreeBSD device hints +@item kfreebsd.i386 @tab 32-bit FreeBSD kernel image +@item kfreebsd.x86_64, kfreebsd_env.x86_64 @tab same from 64-bit kFreeBSD +@item knetbsd.i386 @tab 32-bit NetBSD kernel image +@item knetbsd.miniroot.i386 @tab 32-bit kNetBSD miniroot.kmod. +@item knetbsd.x86_64, knetbsd.miniroot.x86_64 @tab same from 64-bit kNetBSD +@item kopenbsd.i386 @tab 32-bit OpenBSD kernel bsd.rd image +@item kopenbsd.x86_64 @tab same from 64-bit kOpenBSD +@item linux.i386 @tab 32-bit Linux +@item linux.x86_64 @tab 64-bit Linux +@end multitable + +@node Troubleshooting +@chapter Error messages produced by GRUB + +@menu +* GRUB only offers a rescue shell:: +@end menu + + +@node GRUB only offers a rescue shell +@section GRUB only offers a rescue shell + +GRUB's normal start-up procedure involves setting the @samp{prefix} +environment variable to a value set in the core image by +@command{grub-install}, setting the @samp{root} variable to match, loading +the @samp{normal} module from the prefix, and running the @samp{normal} +command (@pxref{normal}). This command is responsible for reading +@file{/boot/grub/grub.cfg}, running the menu, and doing all the useful +things GRUB is supposed to do. + +If, instead, you only get a rescue shell, this usually means that GRUB +failed to load the @samp{normal} module for some reason. It may be possible +to work around this temporarily: for instance, if the reason for the failure +is that @samp{prefix} is wrong (perhaps it refers to the wrong device, or +perhaps the path to @file{/boot/grub} was not correctly made relative to the +device), then you can correct this and enter normal mode manually: + +@example +@group +# Inspect the current prefix (and other preset variables): +set +# Find out which devices are available: +ls +# Set to the correct value, which might be something like this: +set prefix=(hd0,1)/grub +set root=(hd0,1) +insmod normal +normal +@end group +@end example + +However, any problem that leaves you in the rescue shell probably means that +GRUB was not correctly installed. It may be more useful to try to reinstall +it properly using @kbd{grub-install @var{device}} (@pxref{Invoking +grub-install}). When doing this, there are a few things to remember: + +@itemize @bullet{} +@item +Drive ordering in your operating system may not be the same as the boot +drive ordering used by your firmware. Do not assume that your first hard +drive (e.g. @samp{/dev/sda}) is the one that your firmware will boot from. +@file{device.map} (@pxref{Device map}) can be used to override this, but it +is usually better to use UUIDs or file system labels and avoid depending on +drive ordering entirely. + +@item +At least on BIOS systems, if you tell @command{grub-install} to install GRUB +to a partition but GRUB has already been installed in the master boot +record, then the GRUB installation in the partition will be ignored. + +@item +If possible, it is generally best to avoid installing GRUB to a partition +(unless it is a special partition for the use of GRUB alone, such as the +BIOS Boot Partition used on GPT). Doing this means that GRUB may stop being +able to read its core image due to a file system moving blocks around, such +as while defragmenting, running checks, or even during normal operation. +Installing to the whole disk device is normally more robust. + +@item +Check that GRUB actually knows how to read from the device and file system +containing @file{/boot/grub}. It will not be able to read from encrypted +devices with unsupported encryption scheme, nor from file systems for which +support has not yet been added to GRUB. +@end itemize + + +@node Invoking grub-install +@chapter Invoking grub-install + +The program @command{grub-install} generates a GRUB core image using +@command{grub-mkimage} and installs it on your system. You must specify the +device name on which you want to install GRUB, like this: + +@example +grub-install @var{install_device} +@end example + +The device name @var{install_device} is an OS device name or a GRUB +device name. + +@command{grub-install} accepts the following options: + +@table @option +@item --help +Print a summary of the command-line options and exit. + +@item --version +Print the version number of GRUB and exit. + +@item --boot-directory=@var{dir} +Install GRUB images under the directory @file{@var{dir}/grub/} +This option is useful when you want to install GRUB into a +separate partition or a removable disk. +If this option is not specified then it defaults to @file{/boot}, so + +@example +@kbd{grub-install /dev/sda} +@end example + +is equivalent to + +@example +@kbd{grub-install --boot-directory=/boot/ /dev/sda} +@end example + +Here is an example in which you have a separate @dfn{boot} partition which is +mounted on +@file{/mnt/boot}: + +@example +@kbd{grub-install --boot-directory=/mnt/boot /dev/sdb} +@end example + +@item --recheck +Recheck the device map, even if @file{/boot/grub/device.map} already +exists. You should use this option whenever you add/remove a disk +into/from your computer. + +@item --no-rs-codes +By default on x86 BIOS systems, @command{grub-install} will use some +extra space in the bootloader embedding area for Reed-Solomon +error-correcting codes. This enables GRUB to still boot successfully +if some blocks are corrupted. The exact amount of protection offered +is dependent on available space in the embedding area. R sectors of +redundancy can tolerate up to R/2 corrupted sectors. This +redundancy may be cumbersome if attempting to cryptographically +validate the contents of the bootloader embedding area, or in more +modern systems with GPT-style partition tables (@pxref{BIOS +installation}) where GRUB does not reside in any unpartitioned space +outside of the MBR. Disable the Reed-Solomon codes with this option. +@end table + +@node Invoking grub-mkconfig +@chapter Invoking grub-mkconfig + +The program @command{grub-mkconfig} generates a configuration file for GRUB +(@pxref{Simple configuration}). + +@example +grub-mkconfig -o /boot/grub/grub.cfg +@end example + +@command{grub-mkconfig} accepts the following options: + +@table @option +@item --help +Print a summary of the command-line options and exit. + +@item --version +Print the version number of GRUB and exit. + +@item -o @var{file} +@itemx --output=@var{file} +Send the generated configuration file to @var{file}. The default is to send +it to standard output. +@end table + + +@node Invoking grub-mkpasswd-pbkdf2 +@chapter Invoking grub-mkpasswd-pbkdf2 + +The program @command{grub-mkpasswd-pbkdf2} generates password hashes for +GRUB (@pxref{Security}). + +@example +grub-mkpasswd-pbkdf2 +@end example + +@command{grub-mkpasswd-pbkdf2} accepts the following options: + +@table @option +@item -c @var{number} +@itemx --iteration-count=@var{number} +Number of iterations of the underlying pseudo-random function. Defaults to +10000. + +@item -l @var{number} +@itemx --buflen=@var{number} +Length of the generated hash. Defaults to 64. + +@item -s @var{number} +@itemx --salt=@var{number} +Length of the salt. Defaults to 64. +@end table + + +@node Invoking grub-mkrelpath +@chapter Invoking grub-mkrelpath + +The program @command{grub-mkrelpath} makes a file system path relative to +the root of its containing file system. For instance, if @file{/usr} is a +mount point, then: + +@example +$ @kbd{grub-mkrelpath /usr/share/grub/unicode.pf2} +@samp{/share/grub/unicode.pf2} +@end example + +This is mainly used internally by other GRUB utilities such as +@command{grub-mkconfig} (@pxref{Invoking grub-mkconfig}), but may +occasionally also be useful for debugging. + +@command{grub-mkrelpath} accepts the following options: + +@table @option +@item --help +Print a summary of the command-line options and exit. + +@item --version +Print the version number of GRUB and exit. +@end table + + +@node Invoking grub-mkrescue +@chapter Invoking grub-mkrescue + +The program @command{grub-mkrescue} generates a bootable GRUB rescue image +(@pxref{Making a GRUB bootable CD-ROM}). + +@example +grub-mkrescue -o grub.iso +@end example + +All arguments not explicitly listed as @command{grub-mkrescue} options are +passed on directly to @command{xorriso} in @command{mkisofs} emulation mode. +Options passed to @command{xorriso} will normally be interpreted as +@command{mkisofs} options; if the option @samp{--} is used, then anything +after that will be interpreted as native @command{xorriso} options. + +Non-option arguments specify additional source directories. This is +commonly used to add extra files to the image: + +@example +mkdir -p disk/boot/grub +@r{(add extra files to @file{disk/boot/grub})} +grub-mkrescue -o grub.iso disk +@end example + +@command{grub-mkrescue} accepts the following options: + +@table @option +@item --help +Print a summary of the command-line options and exit. + +@item --version +Print the version number of GRUB and exit. + +@item -o @var{file} +@itemx --output=@var{file} +Save output in @var{file}. This "option" is required. + +@item --modules=@var{modules} +Pre-load the named GRUB modules in the image. Multiple entries in +@var{modules} should be separated by whitespace (so you will probably need +to quote this for your shell). + +@item --rom-directory=@var{dir} +If generating images for the QEMU or Coreboot platforms, copy the resulting +@file{qemu.img} or @file{coreboot.elf} files respectively to the @var{dir} +directory as well as including them in the image. + +@item --xorriso=@var{file} +Use @var{file} as the @command{xorriso} program, rather than the built-in +default. + +@item --grub-mkimage=@var{file} +Use @var{file} as the @command{grub-mkimage} program, rather than the +built-in default. +@end table + + +@node Invoking grub-mount +@chapter Invoking grub-mount + +The program @command{grub-mount} performs a read-only mount of any file +system or file system image that GRUB understands, using GRUB's file system +drivers via FUSE. (It is only available if FUSE development files were +present when GRUB was built.) This has a number of uses: + +@itemize @bullet +@item +It provides a convenient way to check how GRUB will view a file system at +boot time. You can use normal command-line tools to compare that view with +that of your operating system, making it easy to find bugs. + +@item +It offers true read-only mounts. Linux does not have these for journalling +file systems, because it will always attempt to replay the journal at mount +time; while you can temporarily mark the block device read-only to avoid +this, that causes the mount to fail. Since GRUB intentionally contains no +code for writing to file systems, it can easily provide a guaranteed +read-only mount mechanism. + +@item +It allows you to examine any file system that GRUB understands without +needing to load additional modules into your running kernel, which may be +useful in constrained environments such as installers. + +@item +Since it can examine file system images (contained in regular files) just as +easily as file systems on block devices, you can use it to inspect any file +system image that GRUB understands with only enough privileges to use FUSE, +even if nobody has yet written a FUSE module specifically for that file +system type. +@end itemize + +Using @command{grub-mount} is normally as simple as: + +@example +grub-mount /dev/sda1 /mnt +@end example + +@command{grub-mount} must be given one or more images and a mount point as +non-option arguments (if it is given more than one image, it will treat them +as a RAID set), and also accepts the following options: + +@table @option +@item --help +Print a summary of the command-line options and exit. + +@item --version +Print the version number of GRUB and exit. + +@item -C +@itemx --crypto +Mount encrypted devices, prompting for a passphrase if necessary. + +@item -d @var{string} +@itemx --debug=@var{string} +Show debugging output for conditions matching @var{string}. + +@item -K prompt|@var{file} +@itemx --zfs-key=prompt|@var{file} +Load a ZFS encryption key. If you use @samp{prompt} as the argument, +@command{grub-mount} will read a passphrase from the terminal; otherwise, it +will read key material from the specified file. + +@item -r @var{device} +@itemx --root=@var{device} +Set the GRUB root device to @var{device}. You do not normally need to set +this; @command{grub-mount} will automatically set the root device to the +root of the supplied file system. + +If @var{device} is just a number, then it will be treated as a partition +number within the supplied image. This means that, if you have an image of +an entire disk in @file{disk.img}, then you can use this command to mount +its second partition: + +@example +grub-mount -r 2 disk.img mount-point +@end example + +@item -v +@itemx --verbose +Print verbose messages. +@end table + + +@node Invoking grub-probe +@chapter Invoking grub-probe + +The program @command{grub-probe} probes device information for a given path +or device. + +@example +grub-probe --target=fs /boot/grub +grub-probe --target=drive --device /dev/sda1 +@end example + +@command{grub-probe} must be given a path or device as a non-option +argument, and also accepts the following options: + +@table @option +@item --help +Print a summary of the command-line options and exit. + +@item --version +Print the version number of GRUB and exit. + +@item -d +@itemx --device +If this option is given, then the non-option argument is a system device +name (such as @samp{/dev/sda1}), and @command{grub-probe} will print +information about that device. If it is not given, then the non-option +argument is a filesystem path (such as @samp{/boot/grub}), and +@command{grub-probe} will print information about the device containing that +part of the filesystem. + +@item -m @var{file} +@itemx --device-map=@var{file} +Use @var{file} as the device map (@pxref{Device map}) rather than the +default, usually @samp{/boot/grub/device.map}. + +@item -t @var{target} +@itemx --target=@var{target} +Print information about the given path or device as defined by @var{target}. +The available targets and their meanings are: + +@table @samp +@item fs +GRUB filesystem module. +@item fs_uuid +Filesystem Universally Unique Identifier (UUID). +@item fs_label +Filesystem label. +@item drive +GRUB device name. +@item device +System device name. +@item partmap +GRUB partition map module. +@item abstraction +GRUB abstraction module (e.g. @samp{lvm}). +@item cryptodisk_uuid +Crypto device UUID. +@item msdos_parttype +MBR partition type code (two hexadecimal digits). +@item hints_string +A string of platform search hints suitable for passing to the +@command{search} command (@pxref{search}). +@item bios_hints +Search hints for the PC BIOS platform. +@item ieee1275_hints +Search hints for the IEEE1275 platform. +@item baremetal_hints +Search hints for platforms where disks are addressed directly rather than +via firmware. +@item efi_hints +Search hints for the EFI platform. +@item arc_hints +Search hints for the ARC platform. +@item compatibility_hint +A guess at a reasonable GRUB drive name for this device, which may be +used as a fallback if the @command{search} command fails. +@item disk +System device name for the whole disk. +@end table + +@item -v +@itemx --verbose +Print verbose messages. +@end table + + +@node Invoking grub-script-check +@chapter Invoking grub-script-check + +The program @command{grub-script-check} takes a GRUB script file +(@pxref{Shell-like scripting}) and checks it for syntax errors, similar to +commands such as @command{sh -n}. It may take a @var{path} as a non-option +argument; if none is supplied, it will read from standard input. + +@example +grub-script-check /boot/grub/grub.cfg +@end example + +@command{grub-script-check} accepts the following options: + +@table @option +@item --help +Print a summary of the command-line options and exit. + +@item --version +Print the version number of GRUB and exit. + +@item -v +@itemx --verbose +Print each line of input after reading it. +@end table + + +@node Obtaining and Building GRUB +@appendix How to obtain and build GRUB + +@quotation +@strong{Caution:} GRUB requires binutils-2.9.1.0.23 or later because the +GNU assembler has been changed so that it can produce real 16bits +machine code between 2.9.1 and 2.9.1.0.x. See +@uref{http://sources.redhat.com/binutils/}, to obtain information on +how to get the latest version. +@end quotation + +GRUB is available from the GNU alpha archive site +@uref{ftp://ftp.gnu.org/gnu/grub} or any of its mirrors. The file +will be named grub-version.tar.gz. The current version is +@value{VERSION}, so the file you should grab is: + +@uref{ftp://ftp.gnu.org/gnu/grub/grub-@value{VERSION}.tar.gz} + +To unbundle GRUB use the instruction: + +@example +@kbd{zcat grub-@value{VERSION}.tar.gz | tar xvf -} +@end example + +which will create a directory called @file{grub-@value{VERSION}} with +all the sources. You can look at the file @file{INSTALL} for detailed +instructions on how to build and install GRUB, but you should be able to +just do: + +@example +@group +@kbd{cd grub-@value{VERSION}} +@kbd{./configure} +@kbd{make install} +@end group +@end example + +Also, the latest version is available using Git. See +@uref{http://www.gnu.org/software/grub/grub-download.html} for more +information. + +@node Reporting bugs +@appendix Reporting bugs + +These are the guideline for how to report bugs. Take a look at this +list below before you submit bugs: + +@enumerate +@item +Before getting unsettled, read this manual through and through. Also, +see the @uref{http://www.gnu.org/software/grub/grub-faq.html, GNU GRUB FAQ}. + +@item +Always mention the information on your GRUB. The version number and the +configuration are quite important. If you build it yourself, write the +options specified to the configure script and your operating system, +including the versions of gcc and binutils. + +@item +If you have trouble with the installation, inform us of how you +installed GRUB. Don't omit error messages, if any. Just @samp{GRUB hangs +up when it boots} is not enough. + +The information on your hardware is also essential. These are especially +important: the geometries and the partition tables of your hard disk +drives and your BIOS. + +@item +If GRUB cannot boot your operating system, write down +@emph{everything} you see on the screen. Don't paraphrase them, like +@samp{The foo OS crashes with GRUB, even though it can boot with the +bar boot loader just fine}. Mention the commands you executed, the +messages printed by them, and information on your operating system +including the version number. + +@item +Explain what you wanted to do. It is very useful to know your purpose +and your wish, and how GRUB didn't satisfy you. + +@item +If you can investigate the problem yourself, please do. That will give +you and us much more information on the problem. Attaching a patch is +even better. + +When you attach a patch, make the patch in unified diff format, and +write ChangeLog entries. But, even when you make a patch, don't forget +to explain the problem, so that we can understand what your patch is +for. + +@item +Write down anything that you think might be related. Please understand +that we often need to reproduce the same problem you encountered in our +environment. So your information should be sufficient for us to do the +same thing---Don't forget that we cannot see your computer directly. If +you are not sure whether to state a fact or leave it out, state it! +Reporting too many things is much better than omitting something +important. +@end enumerate + +If you follow the guideline above, submit a report to the +@uref{http://savannah.gnu.org/bugs/?group=grub, Bug Tracking System}. +Alternatively, you can submit a report via electronic mail to +@email{bug-grub@@gnu.org}, but we strongly recommend that you use the +Bug Tracking System, because e-mail can be passed over easily. + +Once we get your report, we will try to fix the bugs. + + +@node Future +@appendix Where GRUB will go + +GRUB 2 is now quite stable and used in many production systems. We are +currently working towards a 2.0 release. + +If you are interested in the development of GRUB 2, take a look at +@uref{http://www.gnu.org/software/grub/grub.html, the homepage}. + + + + + +@node Copying This Manual +@appendix Copying This Manual + +@menu +* GNU Free Documentation License:: License for copying this manual. +@end menu + +@include fdl.texi + + +@node Index +@unnumbered Index + +@c Currently, we use only the Concept Index. +@printindex cp + + +@bye + +Some notes: + + This is an attempt to make a manual for GRUB 2. The contents are + copied from the GRUB manual in GRUB Legacy, so they are not always + appropriate yet for GRUB 2. diff --git a/docs/man/grub-bios-setup.h2m b/docs/man/grub-bios-setup.h2m new file mode 100644 index 000000000..ac6ede362 --- /dev/null +++ b/docs/man/grub-bios-setup.h2m @@ -0,0 +1,6 @@ +[NAME] +grub-bios-setup \- set up a device to boot using GRUB +[SEE ALSO] +.BR grub-install (8), +.BR grub-mkimage (1), +.BR grub-mkrescue (1) diff --git a/docs/man/grub-editenv.h2m b/docs/man/grub-editenv.h2m new file mode 100644 index 000000000..3859d3d4c --- /dev/null +++ b/docs/man/grub-editenv.h2m @@ -0,0 +1,5 @@ +[NAME] +grub-editenv \- edit GRUB environment block +[SEE ALSO] +.BR grub-reboot (8), +.BR grub-set-default (8) diff --git a/docs/man/grub-emu.h2m b/docs/man/grub-emu.h2m new file mode 100644 index 000000000..ef1c00065 --- /dev/null +++ b/docs/man/grub-emu.h2m @@ -0,0 +1,6 @@ +[NAME] +grub-emu \- GRUB emulator +[SEE ALSO] +If you are trying to install GRUB, then you should use +.BR grub-install (8) +rather than this program. diff --git a/docs/man/grub-file.h2m b/docs/man/grub-file.h2m new file mode 100644 index 000000000..e09bb4d31 --- /dev/null +++ b/docs/man/grub-file.h2m @@ -0,0 +1,2 @@ +[NAME] +grub-file \- check file type diff --git a/docs/man/grub-fstest.h2m b/docs/man/grub-fstest.h2m new file mode 100644 index 000000000..9676b159a --- /dev/null +++ b/docs/man/grub-fstest.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-fstest \- debug tool for GRUB filesystem drivers +[SEE ALSO] +.BR grub-probe (8) diff --git a/docs/man/grub-glue-efi.h2m b/docs/man/grub-glue-efi.h2m new file mode 100644 index 000000000..c1c6ded49 --- /dev/null +++ b/docs/man/grub-glue-efi.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-glue-efi \- generate a fat binary for EFI +[DESCRIPTION] +grub-glue-efi processes ia32 and amd64 EFI images and glues them according to Apple format. diff --git a/docs/man/grub-install.h2m b/docs/man/grub-install.h2m new file mode 100644 index 000000000..8cbbc87a0 --- /dev/null +++ b/docs/man/grub-install.h2m @@ -0,0 +1,6 @@ +[NAME] +grub-install \- install GRUB to a device +[SEE ALSO] +.BR grub-mkconfig (8), +.BR grub-mkimage (1), +.BR grub-mkrescue (1) diff --git a/docs/man/grub-kbdcomp.h2m b/docs/man/grub-kbdcomp.h2m new file mode 100644 index 000000000..d81f9157e --- /dev/null +++ b/docs/man/grub-kbdcomp.h2m @@ -0,0 +1,10 @@ +[NAME] +grub-kbdcomp \- generate a GRUB keyboard layout file +[DESCRIPTION] +grub-kbdcomp processes a X keyboard layout description in +.BR keymaps (5) +format into a format that can be used by GRUB's +.B keymap +command. +[SEE ALSO] +.BR grub-mklayout (8) diff --git a/docs/man/grub-macbless.h2m b/docs/man/grub-macbless.h2m new file mode 100644 index 000000000..0197c0087 --- /dev/null +++ b/docs/man/grub-macbless.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-macbless \- bless a mac file/directory +[SEE ALSO] +.BR grub-install (1) diff --git a/docs/man/grub-macho2img.h2m b/docs/man/grub-macho2img.h2m new file mode 100644 index 000000000..d79aaeed8 --- /dev/null +++ b/docs/man/grub-macho2img.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-macho2img \- convert Mach-O to raw image +[SEE ALSO] +.BR grub-mkimage (1) diff --git a/docs/man/grub-menulst2cfg.h2m b/docs/man/grub-menulst2cfg.h2m new file mode 100644 index 000000000..c2e0055ed --- /dev/null +++ b/docs/man/grub-menulst2cfg.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-menulst2cfg \- transform legacy menu.lst into grub.cfg +[SEE ALSO] +.BR grub-mkconfig (8) diff --git a/docs/man/grub-mkconfig.h2m b/docs/man/grub-mkconfig.h2m new file mode 100644 index 000000000..9b42f8130 --- /dev/null +++ b/docs/man/grub-mkconfig.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-mkconfig \- generate a GRUB configuration file +[SEE ALSO] +.BR grub-install (8) diff --git a/docs/man/grub-mkfont.h2m b/docs/man/grub-mkfont.h2m new file mode 100644 index 000000000..d46fe600e --- /dev/null +++ b/docs/man/grub-mkfont.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-mkfont \- make GRUB font files +[SEE ALSO] +.BR grub-mkconfig (8) diff --git a/docs/man/grub-mkimage.h2m b/docs/man/grub-mkimage.h2m new file mode 100644 index 000000000..f0fbc2bb1 --- /dev/null +++ b/docs/man/grub-mkimage.h2m @@ -0,0 +1,6 @@ +[NAME] +grub-mkimage \- make a bootable image of GRUB +[SEE ALSO] +.BR grub-install (8), +.BR grub-mkrescue (1), +.BR grub-mknetdir (8) diff --git a/docs/man/grub-mklayout.h2m b/docs/man/grub-mklayout.h2m new file mode 100644 index 000000000..1e43409c0 --- /dev/null +++ b/docs/man/grub-mklayout.h2m @@ -0,0 +1,10 @@ +[NAME] +grub-mklayout \- generate a GRUB keyboard layout file +[DESCRIPTION] +grub-mklayout processes a keyboard layout description in +.BR keymaps (5) +format into a format that can be used by GRUB's +.B keymap +command. +[SEE ALSO] +.BR grub-mkconfig (8) diff --git a/docs/man/grub-mknetdir.h2m b/docs/man/grub-mknetdir.h2m new file mode 100644 index 000000000..a2ef13ec1 --- /dev/null +++ b/docs/man/grub-mknetdir.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-mknetdir \- prepare a GRUB netboot directory. +[SEE ALSO] +.BR grub-mkimage (1) diff --git a/docs/man/grub-mkpasswd-pbkdf2.h2m b/docs/man/grub-mkpasswd-pbkdf2.h2m new file mode 100644 index 000000000..4d202f3da --- /dev/null +++ b/docs/man/grub-mkpasswd-pbkdf2.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-mkpasswd-pbkdf2 \- generate hashed password for GRUB +[SEE ALSO] +.BR grub-mkconfig (8) diff --git a/docs/man/grub-mkrelpath.h2m b/docs/man/grub-mkrelpath.h2m new file mode 100644 index 000000000..d01f3961e --- /dev/null +++ b/docs/man/grub-mkrelpath.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-mkrelpath \- make a system path relative to its root +[SEE ALSO] +.BR grub-probe (8) diff --git a/docs/man/grub-mkrescue.h2m b/docs/man/grub-mkrescue.h2m new file mode 100644 index 000000000..a427f02e3 --- /dev/null +++ b/docs/man/grub-mkrescue.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-mkrescue \- make a GRUB rescue image +[SEE ALSO] +.BR grub-mkimage (1) diff --git a/docs/man/grub-mkstandalone.h2m b/docs/man/grub-mkstandalone.h2m new file mode 100644 index 000000000..c77313978 --- /dev/null +++ b/docs/man/grub-mkstandalone.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-mkstandalone \- make a memdisk-based GRUB image +[SEE ALSO] +.BR grub-mkimage (1) diff --git a/docs/man/grub-mount.h2m b/docs/man/grub-mount.h2m new file mode 100644 index 000000000..8d168982d --- /dev/null +++ b/docs/man/grub-mount.h2m @@ -0,0 +1,2 @@ +[NAME] +grub-mount \- export GRUB filesystem with FUSE diff --git a/docs/man/grub-ofpathname.h2m b/docs/man/grub-ofpathname.h2m new file mode 100644 index 000000000..74b43eea0 --- /dev/null +++ b/docs/man/grub-ofpathname.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-ofpathname \- find OpenBOOT path for a device +[SEE ALSO] +.BR grub-probe (8) diff --git a/docs/man/grub-pe2elf.h2m b/docs/man/grub-pe2elf.h2m new file mode 100644 index 000000000..7ca29bd70 --- /dev/null +++ b/docs/man/grub-pe2elf.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-pe2elf \- convert PE image to ELF +[SEE ALSO] +.BR grub-mkimage (1) diff --git a/docs/man/grub-probe.h2m b/docs/man/grub-probe.h2m new file mode 100644 index 000000000..6e1ffdcf9 --- /dev/null +++ b/docs/man/grub-probe.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-probe \- probe device information for GRUB +[SEE ALSO] +.BR grub-fstest (1) diff --git a/docs/man/grub-reboot.h2m b/docs/man/grub-reboot.h2m new file mode 100644 index 000000000..e4acace65 --- /dev/null +++ b/docs/man/grub-reboot.h2m @@ -0,0 +1,5 @@ +[NAME] +grub-reboot \- set the default boot entry for GRUB, for the next boot only +[SEE ALSO] +.BR grub-set-default (8), +.BR grub-editenv (1) diff --git a/docs/man/grub-render-label.h2m b/docs/man/grub-render-label.h2m new file mode 100644 index 000000000..50ae5247c --- /dev/null +++ b/docs/man/grub-render-label.h2m @@ -0,0 +1,3 @@ +[NAME] +grub-render-label \- generate a .disk_label for Apple Macs. + diff --git a/docs/man/grub-script-check.h2m b/docs/man/grub-script-check.h2m new file mode 100644 index 000000000..365368267 --- /dev/null +++ b/docs/man/grub-script-check.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-script-check \- check grub.cfg for syntax errors +[SEE ALSO] +.BR grub-mkconfig (8) diff --git a/docs/man/grub-set-default.h2m b/docs/man/grub-set-default.h2m new file mode 100644 index 000000000..7945001c1 --- /dev/null +++ b/docs/man/grub-set-default.h2m @@ -0,0 +1,5 @@ +[NAME] +grub-set-default \- set the saved default boot entry for GRUB +[SEE ALSO] +.BR grub-reboot (8), +.BR grub-editenv (1) diff --git a/docs/man/grub-sparc64-setup.h2m b/docs/man/grub-sparc64-setup.h2m new file mode 100644 index 000000000..18f803a50 --- /dev/null +++ b/docs/man/grub-sparc64-setup.h2m @@ -0,0 +1,6 @@ +[NAME] +grub-sparc64-setup \- set up a device to boot using GRUB +[SEE ALSO] +.BR grub-install (8), +.BR grub-mkimage (1), +.BR grub-mkrescue (1) diff --git a/docs/man/grub-syslinux2cfg.h2m b/docs/man/grub-syslinux2cfg.h2m new file mode 100644 index 000000000..ad25c8ab7 --- /dev/null +++ b/docs/man/grub-syslinux2cfg.h2m @@ -0,0 +1,4 @@ +[NAME] +grub-syslinux2cfg \- transform syslinux config into grub.cfg +[SEE ALSO] +.BR grub-menulst2cfg (8) diff --git a/docs/mdate-sh b/docs/mdate-sh new file mode 100644 index 000000000..22f2f8be9 --- /dev/null +++ b/docs/mdate-sh @@ -0,0 +1,205 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2007-03-30.02 + +# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007 Free Software +# Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No file. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: mdate-sh [--help] [--version] FILE + +Pretty-print the modification time of FILE. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "mdate-sh $scriptversion" + exit $? + ;; +esac + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# GNU ls changes its time format in response to the TIME_STYLE +# variable. Since we cannot assume `unset' works, revert this +# variable to its documented default. +if test "${TIME_STYLE+set}" = set; then + TIME_STYLE=posix-long-iso + export TIME_STYLE +fi + +save_arg1=$1 + +# Find out how to get the extended ls output of a file or directory. +if ls -L /dev/null 1>/dev/null 2>&1; then + ls_command='ls -L -l -d' +else + ls_command='ls -l -d' +fi +# Avoid user/group names that might have spaces, when possible. +if ls -n /dev/null 1>/dev/null 2>&1; then + ls_command="$ls_command -n" +fi + +# A `ls -l' line looks as follows on OS/2. +# drwxrwx--- 0 Aug 11 2001 foo +# This differs from Unix, which adds ownership information. +# drwxrwx--- 2 root root 4096 Aug 11 2001 foo +# +# To find the date, we split the line on spaces and iterate on words +# until we find a month. This cannot work with files whose owner is a +# user named `Jan', or `Feb', etc. However, it's unlikely that `/' +# will be owned by a user whose name is a month. So we first look at +# the extended ls output of the root directory to decide how many +# words should be skipped to get the date. + +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +set x`$ls_command /` + +# Find which argument is the month. +month= +command= +until test $month +do + shift + # Add another shift to the command. + command="$command shift;" + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +# Get the extended ls output of the file or directory. +set dummy x`eval "$ls_command \"\$save_arg1\""` + +# Remove all preceding arguments +eval $command + +# Because of the dummy argument above, month is in $2. +# +# On a POSIX system, we should have +# +# $# = 5 +# $1 = file size +# $2 = month +# $3 = day +# $4 = year or time +# $5 = filename +# +# On Darwin 7.7.0 and 7.6.0, we have +# +# $# = 4 +# $1 = day +# $2 = month +# $3 = year or time +# $4 = filename + +# Get the month. +case $2 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; +esac + +case $3 in + ???*) day=$1;; + *) day=$3; shift;; +esac + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/docs/osdetect.cfg b/docs/osdetect.cfg new file mode 100644 index 000000000..47455601d --- /dev/null +++ b/docs/osdetect.cfg @@ -0,0 +1,331 @@ +# Sample GRUB script to autodetect operating systems +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set saved_root=$root + +function freebsd_ufs_variants { + set device=$1 + set fstype=$2 + set uuid=$3 + + menuentry "FreeBSD (on $fstype $device)" $device $uuid { + set root=$2 + set uuid=$3 + + freebsd /boot/kernel/kernel + set FreeBSD.acpi_load=YES + set FreeBSD.hint.acpi.0.disabled=0 + set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + frebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (single)" $device $uuid { + set root=$2 + set uuid=$3 + + freebsd /boot/kernel/kernel --single + set FreeBSD.acpi_load=YES + set FreeBSD.hint.acpi.0.disabled=0 + set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + frebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (verbose)" $device $uuid { + set root=$2 + set uuid=$3 + + freebsd /boot/kernel/kernel --verbose + set FreeBSD.acpi_load=YES + set FreeBSD.hint.acpi.0.disabled=0 + set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + frebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device $uuid { + set root=$2 + set uuid=$3 + + freebsd /boot/kernel/kernel --verbose + unset FreeBSD.acpi_load + set FreeBSD.hint.acpi.0.disabled=1 + set FreeBSD.loader.acpi_disabled_by_user=1 + set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + frebsd_loadenv /boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (safe mode)" $device $uuid { + set root=$2 + set uuid=$3 + + freebsd /boot/kernel/kernel --verbose + unset FreeBSD.acpi_load + set FreeBSD.hint.acpi.0.disabled=1 + set FreeBSD.loader.acpi_disabled_by_user=1 + set FreeBSD.hint.apic.0.disabled=1 + set FreeBSD.hw.ata.ata_dma=0 + set FreeBSD.hw.ata.atapi_dma=0 + set FreeBSD.hw.ata.wc=0 + set FreeBSD.hw.eisa_slots=0 + set FreeBSD.hint.kbdmux.0.disabled=1 + set FreeBSD.vfs.root.mountfrom=ufs:ufsid/$uuid + frebsd_loadenv /boot/device.hints + } +} + +function freebsd_zfs_variants { + set device=$1 + set fstype=zfs + + menuentry "FreeBSD (on $fstype $device)" $device { + set root=$2 + + freebsd /@/boot/kernel/kernel + set FreeBSD.acpi_load=YES + set FreeBSD.hint.acpi.0.disabled=0 + freebsd_module_elf /@/boot/kernel/opensolaris.ko + freebsd_module_elf /@/boot/kernel/zfs.ko + freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set FreeBSD.vfs.root.mountfrom=zfs:$name + freebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (single)" $device { + set root=$2 + + freebsd /@/boot/kernel/kernel --single + set FreeBSD.acpi_load=YES + set FreeBSD.hint.acpi.0.disabled=0 + freebsd_module_elf /@/boot/kernel/opensolaris.ko + freebsd_module_elf /@/boot/kernel/zfs.ko + freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set FreeBSD.vfs.root.mountfrom=zfs:$name + freebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (verbose)" $device { + set root=$2 + + freebsd /@/boot/kernel/kernel --verbose + set FreeBSD.acpi_load=YES + set FreeBSD.hint.acpi.0.disabled=0 + freebsd_module_elf /@/boot/kernel/opensolaris.ko + freebsd_module_elf /@/boot/kernel/zfs.ko + freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set FreeBSD.vfs.root.mountfrom=zfs:$name + freebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (without ACPI)" $device { + set root=$2 + + freebsd /@/boot/kernel/kernel --verbose + unset FreeBSD.acpi_load + set FreeBSD.hint.acpi.0.disabled=1 + set FreeBSD.loader.acpi_disabled_by_user=1 + freebsd_module_elf /@/boot/kernel/opensolaris.ko + freebsd_module_elf /@/boot/kernel/zfs.ko + freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set FreeBSD.vfs.root.mountfrom=zfs:$name + freebsd_loadenv /@/boot/device.hints + } + + menuentry "FreeBSD (on $fstype $device) (safe mode)" $device { + set root=$2 + + freebsd /@/boot/kernel/kernel --verbose + unset FreeBSD.acpi_load + set FreeBSD.hint.acpi.0.disabled=1 + set FreeBSD.loader.acpi_disabled_by_user=1 + set FreeBSD.hint.apic.0.disabled=1 + set FreeBSD.hw.ata.ata_dma=0 + set FreeBSD.hw.ata.atapi_dma=0 + set FreeBSD.hw.ata.wc=0 + set FreeBSD.hw.eisa_slots=0 + set FreeBSD.hint.kbdmux.0.disabled=1 + freebsd_module_elf /@/boot/kernel/opensolaris.ko + freebsd_module_elf /@/boot/kernel/zfs.ko + freebsd_module /@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache + probe -l -s name $root + set FreeBSD.vfs.root.mountfrom=zfs:$name + freebsd_loadenv /@/boot/device.hints + } +} + +insmod regexp +for dev in (*); do + # $device: parenthesis removed from $dev + regexp -s device '\((.*)\)' $dev + # $fstype: filesystem type identified + probe -s fstype -f $dev + # uuid: filesystem UUID + probe -s uuid -u $dev + + if test -f ($device)/isolinux/isolinux.cfg ; then + menuentry "ISOLINUX config (on $device)" $device { + set root=$2 + syslinux_configfile -i /isolinux/isolinux.cfg + } + fi + if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then + menuentry "Windows Vista bootmgr (on $device)" $device { + set root=$2 + chainloader +1 + } + elif test -f ($device)/ntldr -a \ + -e ($device)/ntdetect.com -a -f ($device)/boot.ini; then + menuentry "Windows NT/2000/XP loader (on $device)" $device { + set root=$2 + regexp -s devnum 'hd([0-9]+)' $root + if test "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test -f ($device)/windows/win.com; then + menuentry "Windows 98/ME (on $device)" $device { + set root=$2 + regexp -s devnum 'hd([0-9]+)' $root + if test "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test -f ($device)/io.sys -a -f ($device)/command.com; then + menuentry "MS-DOS (on $device)" $device { + set root=$2 + regexp -s devnum 'hd([0-9]+)' $root + if test "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test -f ($device)/kernel.sys; then + menuentry "FreeDOS (on $device)" $device { + set root=$2 + regexp -s type '([fh])d[0-9]+' $root + regexp -s devnum '[fh]d([0-9]+)' $root + if test $type = 'h' -a "$devnum" != "0"; then + drivemap -s hd0 $root + fi + chainloader +1 + } + elif test "$fstype" = ufs1 -o "$fstype" = ufs2 -a \ + -e ($device)/boot/kernel/kernel -a \ + -e ($device)/boot/device.hints; then + + freebsd_ufs_variants $device $fstype $uuid + + elif test "$fstype" = zfs -a \ + -e ($device)/@/boot/kernel/kernel -a \ + -e ($device)/@/boot/device.hints; then + + freebsd_zfs_variants $device + + elif test "$fstype" = hfsplus -a -f ($device)/mach_kernel; then + menuentry "Mac OS X/Darwin" $device $uuid { + set root=$2 + set uuid=$3 + + insmod vbe + do_resume=0 + if [ /var/vm/sleepimage -nt10 / ]; then + if xnu_resume /var/vm/sleepimage; then + do_resume=1 + fi + fi + if [ $do_resume = 1 ]; then + xnu_uuid $uuid uuid + if [ -f /Extra/DSDT.aml ]; then + acpi -e /Extra/DSDT.aml + fi + xnu_kernel /mach_kernel boot-uuid=${uuid} rd=*uuid + if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then + xnu_mkext /System/Library/Extensions.mkext + else + xnu_mkext /System/Library/Extensions + fi + if [ -f /Extra/Extensions.mkext ]; then + xnu_mkext /Extra/Extensions.mkext + fi + if [ -d /Extra/Extensions ]; then + xnu_kextdir /Extra/Extensions + fi + if [ -f /Extra/devtree.txt ]; then + xnu_devtree /Extra/devtree.txt + fi + if [ -f /Extra/splash.jpg ]; then + insmod jpeg + xnu_splash /Extra/splash.jpg + fi + if [ -f /Extra/splash.png ]; then + insmod png + xnu_splash /Extra/splash.png + fi + if [ -f /Extra/splash.tga ]; then + insmod tga + xnu_splash /Extra/splash.tga + fi + fi + } + else + set root=$device + for file in /boot/vmlinuz-* /boot/linux-*; do + if test -f $file; then + regexp -s version '/boot/vmlinuz-(.*)' $file + regexp -s version '/boot/linux-(.*)' $file + + menuentry "Linux $file" $device $uuid $file $version { + set root=$2 + set uuid=$3 + set kernel=$4 + set version=$5 + + linux $kernel root=UUID=$uuid ro + if test -f /boot/initrd-$version.img; then + initrd /boot/initrd-$version.img + elif test -f /boot/initrd.img-$version; then + initrd /boot/initrd.img-$version + elif test -f /boot/initrd-$version; then + initrd /boot/initrd-$version + fi + } + + menuentry "Linux $file (single)" $device $uuid $file $version { + set root=$2 + set uuid=$3 + set kernel=$4 + set version=$5 + + linux $kernel root=UUID=$uuid ro single + if test -f /boot/initrd-$version.img; then + initrd /boot/initrd-$version.img + elif test -f /boot/initrd.img-$version; then + initrd /boot/initrd.img-$version + elif test -f /boot/initrd-$version; then + initrd /boot/initrd-$version + fi + } + fi + done + fi +done + +set root=$saved_root diff --git a/docs/stamp-1 b/docs/stamp-1 new file mode 100644 index 000000000..4233783f0 --- /dev/null +++ b/docs/stamp-1 @@ -0,0 +1,4 @@ +@set UPDATED 2 September 2015 +@set UPDATED-MONTH September 2015 +@set EDITION 2.02 +@set VERSION 2.02 diff --git a/docs/stamp-vti b/docs/stamp-vti new file mode 100644 index 000000000..4a8341fb7 --- /dev/null +++ b/docs/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 24 April 2017 +@set UPDATED-MONTH April 2017 +@set EDITION 2.02 +@set VERSION 2.02 diff --git a/docs/texinfo.tex b/docs/texinfo.tex new file mode 100644 index 000000000..0135d0c7c --- /dev/null +++ b/docs/texinfo.tex @@ -0,0 +1,8959 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2007-09-03.05} +% +% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 2007, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007 Free Software Foundation, Inc. +% +% This texinfo.tex file is free software: you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation, either version 3 of the +% License, or (at your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see . +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dashChar = `\- +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\lquoteChar= `\` +\chardef\questChar = `\? +\chardef\rquoteChar= `\' +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\undefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. The solution is +% described on page 260 of The TeXbook. It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after. I won't pretend I can describe this better than DEK... +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 + \noexpand\or \the\toks4 \the\toks6 + \noexpand\else \the\toks8 + }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\tt \backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1\relax \unvbox#1\relax +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurence of `\^^M' or `\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarily, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as enviroments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At runtime, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Evironment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +% Old definition--didn't work. +%\parseargdef\need{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include file insert text of that file as input. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable + \def\temp{\input #1 }% + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ character. +% FYI, plain.tex uses \\ as a temporary control sequence (why?), but +% this is not advertised and we don't care. Texinfo does not +% otherwise define @\. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + } +} + +% @bullet and @minus need the same treatment as @math, just above. +\def\bullet{$\ptexbullet$} +\def\minus{$-$} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's what we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef@activebackslashdouble{% + @catcode`@\=@active + @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters. hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens, with minor +% changes for Texinfo. It is included here under the GPL by permission +% from the author, Heiko Oberdiek. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% + \def\HyPsdReplace##1#1##2\END{% + ##1% + \ifx\\##2\\% + \else + #2% + \HyReturnAfterFi{% + \HyPsdReplace##2\END + }% + \fi + }% + \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% + \xdef#1{#1}% redefine it as its expansion; the definition is simply + % \lastnode when called from \setref -> \pdfmkdest. + \HyPsdSubst{(}{\realbackslash(}{#1}% + \HyPsdSubst{)}{\realbackslash)}{#1}% +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros based on pdfcolor.tex. + \def\cmykDarkRed{0.28 1 1 0.35} + \def\cmykBlack{0 0 0 1} + % + \def\pdfsetcolor#1{\pdfliteral{#1 k}} + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\cmykBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .png, .jpg, .pdf (among + % others). Let's try in that order. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \openin 1 #1.pdf \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{pdf}% + \fi + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \closein 1 + \endgroup + % + % without \immediate, pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \imagewidth \fi + \ifdim \wd2 >0pt height \imageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \turnoffactive + \activebackslashdouble + \makevalueexpandable + \def\pdfdestname{#1}% + \backslashparens\pdfdestname + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + }} + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use a color that is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. + \def\urlcolor{\cmykDarkRed} + \def\linkcolor{\cmykDarkRed} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + % Doubled backslashes in the name. + {\activebackslashdouble \xdef\pdfoutlinedest{#3}% + \backslashparens\pdfoutlinedest}% + \fi + % + % Also double the backslashes in the display string. + {\activebackslashdouble \xdef\pdfoutlinetext{#1}% + \backslashparens\pdfoutlinetext}% + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \setupdatafile + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% Default leading. +\newdimen\textleading \textleading = 13.2pt + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% +% PDF CMaps. See also LaTeX's t1.cmap. +% +% \cmapOT1 +\ifpdf + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\else + \expandafter\let\csname cmapOT1\endcsname\gobble + \expandafter\let\csname cmapOT1IT\endcsname\gobble + \expandafter\let\csname cmapOT1TT\endcsname\gobble +\fi + + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass +% empty to omit). +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble + + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Definitions for a main text size of 11pt. This is the default in +% Texinfo. +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} +\def\authortt{\sectt} +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +% reset the current fonts +\textfonts +\rm +} % end of 11pt text font size definitions + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} +\def\authortt{\sectt} +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +% reduce space between paragraphs +\divide\parskip by 2 + +% reset the current fonts +\textfonts +\rm +} % end of 10pt text font size definitions + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xword{10} +\def\xiword{11} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + \wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts except +% in the main text, we don't bother to reset \scriptfont and +% \scriptscriptfont (which would also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy + \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf + \textfont\ttfam=\tentt \textfont\sffam=\tensf +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rm #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% +% I wish the USA used A4 paper. +% --karl, 24jan03. + + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + +% Define these so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\let\var=\smartslanted +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% @b, explicit bold. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} +\def\samp#1{`\tclose{#1}'\null} +\setfont\keyrm\rmshape{8}{1000}{OT1} +\font\keysy=cmsy9 +\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% + \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{\angleright}}}} +\def\key #1{{\nohyphenation \uppercase{#1}}\null} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \plainfrenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ + \catcode`\-=\active \catcode`\_=\active + \catcode`\'=\active \catcode`\`=\active + % + \global\def\code{\begingroup + \catcode\rquoteChar=\active \catcode\lquoteChar=\active + \let'\codequoteright \let`\codequoteleft + % + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\realdash + \let_\realunder + \fi + \codex + } +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} +\def\codex #1{\tclose{#1}\endgroup} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general. @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg'}% + \fi\fi +} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct.' +\kbdinputstyle distinct + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Hacks for glyphs from the EC fonts similar to \euro. We don't +% use \let for the aliases, because sometimes we redefine the original +% macro, and the alias should reflect the redefinition. +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +\def\ecfont{% + % We can't distinguish serif/sanserif and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines + \let\tt=\authortt} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rm #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\authorfont \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\undefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + \def\itemcontents{#1}% + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a . + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. Note that \everycr resets \everytab. +\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we encounter the problem it was intended to solve again. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \undefined + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname\donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + % + % I don't entirely understand this, but when an index entry is + % generated from a macro call, the \endinput which \scanmacro inserts + % causes processing to be prematurely terminated. This is, + % apparently, because \indexsorttmp is fully expanded, and \endinput + % is an expandable command. The redefinition below makes \endinput + % disappear altogether for that purpose -- although logging shows that + % processing continues to some further point. On the other hand, it + % seems \endinput does not hurt in the printed index arg, since that + % is still getting written without apparent harm. + % + % Sample source (mac-idx3.tex, reported by Graham Percival to + % help-texinfo, 22may06): + % @macro funindex {WORD} + % @findex xyz + % @end macro + % ... + % @funindex commtest + % + % The above is not enough to reproduce the bug, but it gives the flavor. + % + % Sample whatsit resulting: + % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} + % + % So: + \let\endinput = \empty + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies + \otherbackslash +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control% words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\L + \definedummyword\OE + \definedummyword\O + \definedummyword\aa + \definedummyword\ae + \definedummyword\l + \definedummyword\oe + \definedummyword\o + \definedummyword\ss + \definedummyword\exclamdown + \definedummyword\questiondown + \definedummyword\ordf + \definedummyword\ordm + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\expansion + \definedummyword\minus + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\result + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sc + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\acronym + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\pxref + \definedummyword\ref + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + \definedummyword\xref +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\aa{aa}% + \def\ae{ae}% + \def\l{l}% + \def\oe{oe}% + \def\o{o}% + \def\ss{ss}% + \def\exclamdown{!}% + \def\questiondown{?}% + \def\ordf{a}% + \def\ordm{o}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\result{=>}% + \def\textdegree{degrees}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{% +\ifhmode + #1% +\else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi +} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this frozes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \setbox\boxA = \hbox{#1}% + \ifdim\wd\boxA = 0pt + \ % + \else + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like plain.tex's \dotfill, except uses up at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \pageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the to achieve this: TeX expands \the only once, + % simply yielding the contents of . (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% + \hbox to 0pt{}% + \chappager + \endgroup + \fi +} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rm + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\nobreak +} +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rm #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rm + % + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, it should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\envdef\tex{% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + \parindent = 0pt + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt\quoteexpand + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\envdef\quotation{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{...} +% If we want to allow any as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% [Knuth] pp. 380,381,391 +% Disable Spanish ligatures ?` and !` of \tt font +\begingroup + \catcode`\`=\active\gdef`{\relax\lq} +\endgroup +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \catcode`\`=\active + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} + +% Allow an option to not replace quotes with a regular directed right +% quote/apostrophe (char 0x27), but instead use the undirected quote +% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it +% the default, but it works for pasting with more pdf viewers (at least +% evince), the lilypond developers report. xpdf does work with the +% regular 0x27. +% +\def\codequoteright{% + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + `% + \else \char'22 \fi + \else \char'22 \fi +} +% +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen0=\wd0 % the width so far, or since the previous tab + \divide\dimen0 by\tabw + \multiply\dimen0 by\tabw % compute previous multiple of \tabw + \advance\dimen0 by\tabw % advance to next multiple of \tabw + \wd0=\dimen0 \box0 \starttabbox + }% + } + \catcode`\'=\active + \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}% + % + \catcode`\`=\active + \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}% + % + \gdef\quoteexpand{\rquoteexpand \lquoteexpand}% +\endgroup + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \catcode`\`=\active + \tabexpand + \quoteexpand + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'#1'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a minor refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remainnig is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \let\var=\ttslanted + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \macnamexxx} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + \def\printedmanual{\ignorespaces #5}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1 > 0pt + % It is in another manual, so we don't have it. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + \leavevmode + \getfilename{#4}% + {\indexnofonts + \turnoffactive + % See comments at \activebackslashdouble. + {\activebackslashdouble \xdef\pdfxrefdest{#1}% + \backslashparens\pdfxrefdest}% + % + \ifnum\filenamelength>0 + \startlink attr{/Border [0 0 0]}% + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + \startlink attr{/Border [0 0 0]}% + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \setcolor{\linkcolor}% + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + {% The node name might contain 8-bit characters, which in our current + % implementation are changed to commands like @'e. Don't let these + % mess up the control sequence name. + \indexnofonts + \turnoffactive + \xdef\safexrefname{#1}% + }% + % + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\pagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarily, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing this stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \nobreak\bigskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \line\bgroup + \fi + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \egroup \bigbreak \fi % space after the image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start floating, we have to issue warning + % whenever an insert appears inside a float which could possibly + % float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% @documentlanguage is usually given very early, just after +% @setfilename. If done too late, it may not override everything +% properly. Single argument is the language (de) or locale (de_DE) +% abbreviation. It would be nice if we could set up a hyphenation file. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{\begingroup + \let_=\normalunderscore % normal _ character for filenames + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore{#1_\finish}% + \else + \input txi-#1.tex + \fi + \closein 1 + \endgroup +\endgroup} +} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\def\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 +} +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? In the current directory +should work if nowhere else does.} + +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\parseargdef\documentencoding{% + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \setnonasciicharscatcode\active + \utfeightchardefs + % + \else + \message{Unknown document encoding #1, ignoring.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdef^^a0{~} + \gdef^^a1{\exclamdown} + \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a3{{\pounds}} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\missingcharmsg{YEN SIGN}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} + \gdef^^aa{\ordf} + \gdef^^ab{\missingcharmsg{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}} + \gdef^^ac{$\lnot$} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} + \gdef^^af{\={}} + % + \gdef^^b0{\textdegree} + \gdef^^b1{$\pm$} + \gdef^^b2{$^2$} + \gdef^^b3{$^3$} + \gdef^^b4{\'{}} + \gdef^^b5{$\mu$} + \gdef^^b6{\P} + % + \gdef^^b7{$^.$} + \gdef^^b8{\cedilla\ } + \gdef^^b9{$^1$} + \gdef^^ba{\ordm} + % + \gdef^^bb{\missingcharmsg{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}} + \gdef^^bc{$1\over4$} + \gdef^^bd{$1\over2$} + \gdef^^be{$3\over4$} + \gdef^^bf{\questiondown} + % + \gdef^^c0{\`A} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\~A} + \gdef^^c4{\"A} + \gdef^^c5{\ringaccent A} + \gdef^^c6{\AE} + \gdef^^c7{\cedilla C} + \gdef^^c8{\`E} + \gdef^^c9{\'E} + \gdef^^ca{\^E} + \gdef^^cb{\"E} + \gdef^^cc{\`I} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\"I} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}} + \gdef^^d1{\~N} + \gdef^^d2{\`O} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\~O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\O} + \gdef^^d9{\`U} + \gdef^^da{\'U} + \gdef^^db{\^U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}} + \gdef^^df{\ss} + % + \gdef^^e0{\`a} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\~a} + \gdef^^e4{\"a} + \gdef^^e5{\ringaccent a} + \gdef^^e6{\ae} + \gdef^^e7{\cedilla c} + \gdef^^e8{\`e} + \gdef^^e9{\'e} + \gdef^^ea{\^e} + \gdef^^eb{\"e} + \gdef^^ec{\`{\dotless i}} + \gdef^^ed{\'{\dotless i}} + \gdef^^ee{\^{\dotless i}} + \gdef^^ef{\"{\dotless i}} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}} + \gdef^^f1{\~n} + \gdef^^f2{\`o} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\~o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\o} + \gdef^^f9{\`u} + \gdef^^fa{\'u} + \gdef^^fb{\^u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}} + \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdef^^a4{\euro} + \gdef^^a6{\v S} + \gdef^^a8{\v s} + \gdef^^b4{\v Z} + \gdef^^b8{\v z} + \gdef^^bc{\OE} + \gdef^^bd{\oe} + \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdef^^a0{~} + \gdef^^a1{\missingcharmsg{LATIN CAPITAL LETTER A WITH OGONEK}} + \gdef^^a2{\u{}} + \gdef^^a3{\L} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\v L} + \gdef^^a6{\'S} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\v S} + \gdef^^aa{\cedilla S} + \gdef^^ab{\v T} + \gdef^^ac{\'Z} + \gdef^^ad{\-} + \gdef^^ae{\v Z} + \gdef^^af{\dotaccent Z} + % + \gdef^^b0{\textdegree} + \gdef^^b1{\missingcharmsg{LATIN SMALL LETTER A WITH OGONEK}} + \gdef^^b2{\missingcharmsg{OGONEK}} + \gdef^^b3{\l} + \gdef^^b4{\'{}} + \gdef^^b5{\v l} + \gdef^^b6{\'s} + \gdef^^b7{\v{}} + \gdef^^b8{\cedilla\ } + \gdef^^b9{\v s} + \gdef^^ba{\cedilla s} + \gdef^^bb{\v t} + \gdef^^bc{\'z} + \gdef^^bd{\H{}} + \gdef^^be{\v z} + \gdef^^bf{\dotaccent z} + % + \gdef^^c0{\'R} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\u A} + \gdef^^c4{\"A} + \gdef^^c5{\'L} + \gdef^^c6{\'C} + \gdef^^c7{\cedilla C} + \gdef^^c8{\v C} + \gdef^^c9{\'E} + \gdef^^ca{\missingcharmsg{LATIN CAPITAL LETTER E WITH OGONEK}} + \gdef^^cb{\"E} + \gdef^^cc{\v E} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\v D} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}} + \gdef^^d1{\'N} + \gdef^^d2{\v N} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\H O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\v R} + \gdef^^d9{\ringaccent U} + \gdef^^da{\'U} + \gdef^^db{\H U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\cedilla T} + \gdef^^df{\ss} + % + \gdef^^e0{\'r} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\u a} + \gdef^^e4{\"a} + \gdef^^e5{\'l} + \gdef^^e6{\'c} + \gdef^^e7{\cedilla c} + \gdef^^e8{\v c} + \gdef^^e9{\'e} + \gdef^^ea{\missingcharmsg{LATIN SMALL LETTER E WITH OGONEK}} + \gdef^^eb{\"e} + \gdef^^ec{\v e} + \gdef^^ed{\'\i} + \gdef^^ee{\^\i} + \gdef^^ef{\v d} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}} + \gdef^^f1{\'n} + \gdef^^f2{\v n} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\H o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\v r} + \gdef^^f9{\ringaccent u} + \gdef^^fa{\'u} + \gdef^^fb{\H u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\cedilla t} + \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +\begingroup + \catcode`\~13 + \catcode`\"12 + + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiTwoOctets\string~}} + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiThreeOctets\string~}} + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiFourOctets\string~}} + \UTFviiiLoop +\endgroup + +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + + \gdef\DeclareUnicodeCharacter#1#2{% + \countUTFz = "#1\relax + \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% + \begingroup + \parseXMLCharref + \def\UTFviiiTwoOctets##1##2{% + \csname u8:##1\string ##2\endcsname}% + \def\UTFviiiThreeOctets##1##2##3{% + \csname u8:##1\string ##2\string ##3\endcsname}% + \def\UTFviiiFourOctets##1##2##3##4{% + \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \gdef\UTFviiiTmp{#2}% + \endgroup} + + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctets.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% + \fi\fi\fi + } + + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz + \multiply\countUTFz by 64 + \advance\countUTFx by -\countUTFz + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% + \DeclareUnicodeCharacter{00A0}{\tie} + \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A8}{\"{ }} + \DeclareUnicodeCharacter{00A9}{\copyright} + \DeclareUnicodeCharacter{00AA}{\ordf} + \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AD}{\-} + \DeclareUnicodeCharacter{00AE}{\registeredsymbol} + \DeclareUnicodeCharacter{00AF}{\={ }} + + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00BA}{\ordm} + \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BF}{\questiondown} + + \DeclareUnicodeCharacter{00C0}{\`A} + \DeclareUnicodeCharacter{00C1}{\'A} + \DeclareUnicodeCharacter{00C2}{\^A} + \DeclareUnicodeCharacter{00C3}{\~A} + \DeclareUnicodeCharacter{00C4}{\"A} + \DeclareUnicodeCharacter{00C5}{\AA} + \DeclareUnicodeCharacter{00C6}{\AE} + \DeclareUnicodeCharacter{00C7}{\cedilla{C}} + \DeclareUnicodeCharacter{00C8}{\`E} + \DeclareUnicodeCharacter{00C9}{\'E} + \DeclareUnicodeCharacter{00CA}{\^E} + \DeclareUnicodeCharacter{00CB}{\"E} + \DeclareUnicodeCharacter{00CC}{\`I} + \DeclareUnicodeCharacter{00CD}{\'I} + \DeclareUnicodeCharacter{00CE}{\^I} + \DeclareUnicodeCharacter{00CF}{\"I} + + \DeclareUnicodeCharacter{00D1}{\~N} + \DeclareUnicodeCharacter{00D2}{\`O} + \DeclareUnicodeCharacter{00D3}{\'O} + \DeclareUnicodeCharacter{00D4}{\^O} + \DeclareUnicodeCharacter{00D5}{\~O} + \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D8}{\O} + \DeclareUnicodeCharacter{00D9}{\`U} + \DeclareUnicodeCharacter{00DA}{\'U} + \DeclareUnicodeCharacter{00DB}{\^U} + \DeclareUnicodeCharacter{00DC}{\"U} + \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DF}{\ss} + + \DeclareUnicodeCharacter{00E0}{\`a} + \DeclareUnicodeCharacter{00E1}{\'a} + \DeclareUnicodeCharacter{00E2}{\^a} + \DeclareUnicodeCharacter{00E3}{\~a} + \DeclareUnicodeCharacter{00E4}{\"a} + \DeclareUnicodeCharacter{00E5}{\aa} + \DeclareUnicodeCharacter{00E6}{\ae} + \DeclareUnicodeCharacter{00E7}{\cedilla{c}} + \DeclareUnicodeCharacter{00E8}{\`e} + \DeclareUnicodeCharacter{00E9}{\'e} + \DeclareUnicodeCharacter{00EA}{\^e} + \DeclareUnicodeCharacter{00EB}{\"e} + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + + \DeclareUnicodeCharacter{00F1}{\~n} + \DeclareUnicodeCharacter{00F2}{\`o} + \DeclareUnicodeCharacter{00F3}{\'o} + \DeclareUnicodeCharacter{00F4}{\^o} + \DeclareUnicodeCharacter{00F5}{\~o} + \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F8}{\o} + \DeclareUnicodeCharacter{00F9}{\`u} + \DeclareUnicodeCharacter{00FA}{\'u} + \DeclareUnicodeCharacter{00FB}{\^u} + \DeclareUnicodeCharacter{00FC}{\"u} + \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FF}{\"y} + + \DeclareUnicodeCharacter{0100}{\=A} + \DeclareUnicodeCharacter{0101}{\=a} + \DeclareUnicodeCharacter{0102}{\u{A}} + \DeclareUnicodeCharacter{0103}{\u{a}} + \DeclareUnicodeCharacter{0106}{\'C} + \DeclareUnicodeCharacter{0107}{\'c} + \DeclareUnicodeCharacter{0108}{\^C} + \DeclareUnicodeCharacter{0109}{\^c} + \DeclareUnicodeCharacter{010A}{\dotaccent{C}} + \DeclareUnicodeCharacter{010B}{\dotaccent{c}} + \DeclareUnicodeCharacter{010C}{\v{C}} + \DeclareUnicodeCharacter{010D}{\v{c}} + \DeclareUnicodeCharacter{010E}{\v{D}} + + \DeclareUnicodeCharacter{0112}{\=E} + \DeclareUnicodeCharacter{0113}{\=e} + \DeclareUnicodeCharacter{0114}{\u{E}} + \DeclareUnicodeCharacter{0115}{\u{e}} + \DeclareUnicodeCharacter{0116}{\dotaccent{E}} + \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{011A}{\v{E}} + \DeclareUnicodeCharacter{011B}{\v{e}} + \DeclareUnicodeCharacter{011C}{\^G} + \DeclareUnicodeCharacter{011D}{\^g} + \DeclareUnicodeCharacter{011E}{\u{G}} + \DeclareUnicodeCharacter{011F}{\u{g}} + + \DeclareUnicodeCharacter{0120}{\dotaccent{G}} + \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0124}{\^H} + \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0128}{\~I} + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} + \DeclareUnicodeCharacter{012A}{\=I} + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} + \DeclareUnicodeCharacter{012C}{\u{I}} + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + + \DeclareUnicodeCharacter{0130}{\dotaccent{I}} + \DeclareUnicodeCharacter{0131}{\dotless{i}} + \DeclareUnicodeCharacter{0132}{IJ} + \DeclareUnicodeCharacter{0133}{ij} + \DeclareUnicodeCharacter{0134}{\^J} + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0139}{\'L} + \DeclareUnicodeCharacter{013A}{\'l} + + \DeclareUnicodeCharacter{0141}{\L} + \DeclareUnicodeCharacter{0142}{\l} + \DeclareUnicodeCharacter{0143}{\'N} + \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0147}{\v{N}} + \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{014C}{\=O} + \DeclareUnicodeCharacter{014D}{\=o} + \DeclareUnicodeCharacter{014E}{\u{O}} + \DeclareUnicodeCharacter{014F}{\u{o}} + + \DeclareUnicodeCharacter{0150}{\H{O}} + \DeclareUnicodeCharacter{0151}{\H{o}} + \DeclareUnicodeCharacter{0152}{\OE} + \DeclareUnicodeCharacter{0153}{\oe} + \DeclareUnicodeCharacter{0154}{\'R} + \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0158}{\v{R}} + \DeclareUnicodeCharacter{0159}{\v{r}} + \DeclareUnicodeCharacter{015A}{\'S} + \DeclareUnicodeCharacter{015B}{\'s} + \DeclareUnicodeCharacter{015C}{\^S} + \DeclareUnicodeCharacter{015D}{\^s} + \DeclareUnicodeCharacter{015E}{\cedilla{S}} + \DeclareUnicodeCharacter{015F}{\cedilla{s}} + + \DeclareUnicodeCharacter{0160}{\v{S}} + \DeclareUnicodeCharacter{0161}{\v{s}} + \DeclareUnicodeCharacter{0162}{\cedilla{t}} + \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0164}{\v{T}} + + \DeclareUnicodeCharacter{0168}{\~U} + \DeclareUnicodeCharacter{0169}{\~u} + \DeclareUnicodeCharacter{016A}{\=U} + \DeclareUnicodeCharacter{016B}{\=u} + \DeclareUnicodeCharacter{016C}{\u{U}} + \DeclareUnicodeCharacter{016D}{\u{u}} + \DeclareUnicodeCharacter{016E}{\ringaccent{U}} + \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + + \DeclareUnicodeCharacter{0170}{\H{U}} + \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0174}{\^W} + \DeclareUnicodeCharacter{0175}{\^w} + \DeclareUnicodeCharacter{0176}{\^Y} + \DeclareUnicodeCharacter{0177}{\^y} + \DeclareUnicodeCharacter{0178}{\"Y} + \DeclareUnicodeCharacter{0179}{\'Z} + \DeclareUnicodeCharacter{017A}{\'z} + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} + \DeclareUnicodeCharacter{017C}{\dotaccent{z}} + \DeclareUnicodeCharacter{017D}{\v{Z}} + \DeclareUnicodeCharacter{017E}{\v{z}} + + \DeclareUnicodeCharacter{01C4}{D\v{Z}} + \DeclareUnicodeCharacter{01C5}{D\v{z}} + \DeclareUnicodeCharacter{01C6}{d\v{z}} + \DeclareUnicodeCharacter{01C7}{LJ} + \DeclareUnicodeCharacter{01C8}{Lj} + \DeclareUnicodeCharacter{01C9}{lj} + \DeclareUnicodeCharacter{01CA}{NJ} + \DeclareUnicodeCharacter{01CB}{Nj} + \DeclareUnicodeCharacter{01CC}{nj} + \DeclareUnicodeCharacter{01CD}{\v{A}} + \DeclareUnicodeCharacter{01CE}{\v{a}} + \DeclareUnicodeCharacter{01CF}{\v{I}} + + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} + \DeclareUnicodeCharacter{01D1}{\v{O}} + \DeclareUnicodeCharacter{01D2}{\v{o}} + \DeclareUnicodeCharacter{01D3}{\v{U}} + \DeclareUnicodeCharacter{01D4}{\v{u}} + + \DeclareUnicodeCharacter{01E2}{\={\AE}} + \DeclareUnicodeCharacter{01E3}{\={\ae}} + \DeclareUnicodeCharacter{01E6}{\v{G}} + \DeclareUnicodeCharacter{01E7}{\v{g}} + \DeclareUnicodeCharacter{01E8}{\v{K}} + \DeclareUnicodeCharacter{01E9}{\v{k}} + + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} + \DeclareUnicodeCharacter{01F1}{DZ} + \DeclareUnicodeCharacter{01F2}{Dz} + \DeclareUnicodeCharacter{01F3}{dz} + \DeclareUnicodeCharacter{01F4}{\'G} + \DeclareUnicodeCharacter{01F5}{\'g} + \DeclareUnicodeCharacter{01F8}{\`N} + \DeclareUnicodeCharacter{01F9}{\`n} + \DeclareUnicodeCharacter{01FC}{\'{\AE}} + \DeclareUnicodeCharacter{01FD}{\'{\ae}} + \DeclareUnicodeCharacter{01FE}{\'{\O}} + \DeclareUnicodeCharacter{01FF}{\'{\o}} + + \DeclareUnicodeCharacter{021E}{\v{H}} + \DeclareUnicodeCharacter{021F}{\v{h}} + + \DeclareUnicodeCharacter{0226}{\dotaccent{A}} + \DeclareUnicodeCharacter{0227}{\dotaccent{a}} + \DeclareUnicodeCharacter{0228}{\cedilla{E}} + \DeclareUnicodeCharacter{0229}{\cedilla{e}} + \DeclareUnicodeCharacter{022E}{\dotaccent{O}} + \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + + \DeclareUnicodeCharacter{0232}{\=Y} + \DeclareUnicodeCharacter{0233}{\=y} + \DeclareUnicodeCharacter{0237}{\dotless{j}} + + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + + \DeclareUnicodeCharacter{1E20}{\=G} + \DeclareUnicodeCharacter{1E21}{\=g} + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} + \DeclareUnicodeCharacter{1E26}{\"H} + \DeclareUnicodeCharacter{1E27}{\"h} + + \DeclareUnicodeCharacter{1E30}{\'K} + \DeclareUnicodeCharacter{1E31}{\'k} + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} + \DeclareUnicodeCharacter{1E3E}{\'M} + \DeclareUnicodeCharacter{1E3F}{\'m} + + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + + \DeclareUnicodeCharacter{1E54}{\'P} + \DeclareUnicodeCharacter{1E55}{\'p} + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + + \DeclareUnicodeCharacter{1E7C}{\~V} + \DeclareUnicodeCharacter{1E7D}{\~v} + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + + \DeclareUnicodeCharacter{1E80}{\`W} + \DeclareUnicodeCharacter{1E81}{\`w} + \DeclareUnicodeCharacter{1E82}{\'W} + \DeclareUnicodeCharacter{1E83}{\'w} + \DeclareUnicodeCharacter{1E84}{\"W} + \DeclareUnicodeCharacter{1E85}{\"w} + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} + \DeclareUnicodeCharacter{1E8C}{\"X} + \DeclareUnicodeCharacter{1E8D}{\"x} + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + + \DeclareUnicodeCharacter{1E90}{\^Z} + \DeclareUnicodeCharacter{1E91}{\^z} + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} + \DeclareUnicodeCharacter{1E97}{\"t} + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} + \DeclareUnicodeCharacter{1EBC}{\~E} + \DeclareUnicodeCharacter{1EBD}{\~e} + + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + + \DeclareUnicodeCharacter{1EF2}{\`Y} + \DeclareUnicodeCharacter{1EF3}{\`y} + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + + \DeclareUnicodeCharacter{1EF8}{\~Y} + \DeclareUnicodeCharacter{1EF9}{\~y} + + \DeclareUnicodeCharacter{2013}{--} + \DeclareUnicodeCharacter{2014}{---} + \DeclareUnicodeCharacter{2018}{\quoteleft} + \DeclareUnicodeCharacter{2019}{\quoteright} + \DeclareUnicodeCharacter{201A}{\quotesinglbase} + \DeclareUnicodeCharacter{201C}{\quotedblleft} + \DeclareUnicodeCharacter{201D}{\quotedblright} + \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2022}{\bullet} + \DeclareUnicodeCharacter{2026}{\dots} + \DeclareUnicodeCharacter{2039}{\guilsinglleft} + \DeclareUnicodeCharacter{203A}{\guilsinglright} + \DeclareUnicodeCharacter{20AC}{\euro} + + \DeclareUnicodeCharacter{2192}{\expansion} + \DeclareUnicodeCharacter{21D2}{\result} + + \DeclareUnicodeCharacter{2212}{\minus} + \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active +@def@normalbackslash{{@tt@backslashcurfont}} +% On startup, @fixbackslash assigns: +% @let \ = @normalbackslash + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +@def@normalturnoffactive{% + @let\=@normalbackslash + @let"=@normaldoublequote + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @unsepspaces +} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\' in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also turn back on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other + + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/docs/version-dev.texi b/docs/version-dev.texi new file mode 100644 index 000000000..4233783f0 --- /dev/null +++ b/docs/version-dev.texi @@ -0,0 +1,4 @@ +@set UPDATED 2 September 2015 +@set UPDATED-MONTH September 2015 +@set EDITION 2.02 +@set VERSION 2.02 diff --git a/docs/version.texi b/docs/version.texi new file mode 100644 index 000000000..4a8341fb7 --- /dev/null +++ b/docs/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 24 April 2017 +@set UPDATED-MONTH April 2017 +@set EDITION 2.02 +@set VERSION 2.02 diff --git a/geninit.sh b/geninit.sh new file mode 100644 index 000000000..f0810120f --- /dev/null +++ b/geninit.sh @@ -0,0 +1,69 @@ +#! /bin/sh +# +# Copyright (C) 2002,2005,2007 Free Software Foundation, Inc. +# +# This gensymlist.sh is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +cat <. + */ + +#include + +EOF + +for mod in "$@"; do + echo "extern void grub_${mod}_init (void);" + echo "extern void grub_${mod}_fini (void);" +done + +cat <. + +from __future__ import print_function + +__metaclass__ = type + +from optparse import OptionParser +import re + +# +# This is the python script used to generate Makefile.*.am +# + +GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", + "i386_multiboot", "i386_ieee1275", "x86_64_efi", + "i386_xen", "x86_64_xen", + "mips_loongson", "sparc64_ieee1275", + "powerpc_ieee1275", "mips_arc", "ia64_efi", + "mips_qemu_mips", "arm_uboot", "arm_efi", "arm64_efi" ] + +GROUPS = {} + +GROUPS["common"] = GRUB_PLATFORMS[:] + +# Groups based on CPU +GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ] +GROUPS["x86_64"] = [ "x86_64_efi" ] +GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] +GROUPS["mips"] = [ "mips_loongson", "mips_qemu_mips", "mips_arc" ] +GROUPS["sparc64"] = [ "sparc64_ieee1275" ] +GROUPS["powerpc"] = [ "powerpc_ieee1275" ] +GROUPS["arm"] = [ "arm_uboot", "arm_efi" ] +GROUPS["arm64"] = [ "arm64_efi" ] + +# Groups based on firmware +GROUPS["efi"] = [ "i386_efi", "x86_64_efi", "ia64_efi", "arm_efi", "arm64_efi" ] +GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ] +GROUPS["uboot"] = [ "arm_uboot" ] +GROUPS["xen"] = [ "i386_xen", "x86_64_xen" ] + +# emu is a special case so many core functionality isn't needed on this platform +GROUPS["noemu"] = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu") + +# Groups based on hardware features +GROUPS["cmos"] = GROUPS["x86"][:] + ["mips_loongson", "mips_qemu_mips", + "sparc64_ieee1275", "powerpc_ieee1275"] +GROUPS["cmos"].remove("i386_efi"); GROUPS["cmos"].remove("x86_64_efi"); +GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"] +GROUPS["usb"] = GROUPS["pci"] + +# If gfxterm is main output console integrate it into kernel +GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ] +GROUPS["videomodules"] = GRUB_PLATFORMS[:]; +for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i) + +# Similar for terminfo +GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", "mips_qemu_mips" ] + GROUPS["xen"] + GROUPS["ieee1275"] + GROUPS["uboot"]; +GROUPS["terminfomodule"] = GRUB_PLATFORMS[:]; +for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i) + +# Flattened Device Trees (FDT) +GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi" ] + +# Needs software helpers for division +# Must match GRUB_DIVISION_IN_SOFTWARE in misc.h +GROUPS["softdiv"] = GROUPS["arm"] + ["ia64_efi"] +GROUPS["no_softdiv"] = GRUB_PLATFORMS[:] +for i in GROUPS["softdiv"]: GROUPS["no_softdiv"].remove(i) + +# Miscellaneous groups scheduled to disappear in future +GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"] +GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc") + +# +# Create platform => groups reverse map, where groups covering that +# platform are ordered by their sizes +# +RMAP = {} +for platform in GRUB_PLATFORMS: + # initialize with platform itself as a group + RMAP[platform] = [ platform ] + + for k in GROUPS.keys(): + v = GROUPS[k] + # skip groups that don't cover this platform + if platform not in v: continue + + bigger = [] + smaller = [] + # partition currently known groups based on their size + for group in RMAP[platform]: + if group in GRUB_PLATFORMS: smaller.append(group) + elif len(GROUPS[group]) < len(v): smaller.append(group) + else: bigger.append(group) + # insert in the middle + RMAP[platform] = smaller + [ k ] + bigger + +# +# Input +# + +# We support a subset of the AutoGen definitions file syntax. Specifically, +# compound names are disallowed; some preprocessing directives are +# disallowed (though #if/#endif are allowed; note that, like AutoGen, #if +# skips everything to the next #endif regardless of the value of the +# conditional); and shell-generated strings, Scheme-generated strings, and +# here strings are disallowed. + +class AutogenToken: + (autogen, definitions, eof, var_name, other_name, string, number, + semicolon, equals, comma, lbrace, rbrace, lbracket, rbracket) = range(14) + +class AutogenState: + (init, need_def, need_tpl, need_semi, need_name, have_name, need_value, + need_idx, need_rbracket, indx_name, have_value, done) = range(12) + +class AutogenParseError(Exception): + def __init__(self, message, path, line): + super(AutogenParseError, self).__init__(message) + self.path = path + self.line = line + + def __str__(self): + return ( + super(AutogenParseError, self).__str__() + + " at file %s line %d" % (self.path, self.line)) + +class AutogenDefinition(list): + def __getitem__(self, key): + try: + return super(AutogenDefinition, self).__getitem__(key) + except TypeError: + for name, value in self: + if name == key: + return value + + def __contains__(self, key): + for name, value in self: + if name == key: + return True + return False + + def get(self, key, default): + for name, value in self: + if name == key: + return value + else: + return default + + def find_all(self, key): + for name, value in self: + if name == key: + yield value + +class AutogenParser: + def __init__(self): + self.definitions = AutogenDefinition() + self.def_stack = [("", self.definitions)] + self.curdef = None + self.new_name = None + self.cur_path = None + self.cur_line = 0 + + @staticmethod + def is_unquotable_char(c): + return (ord(c) in range(ord("!"), ord("~") + 1) and + c not in "#,;<=>[\\]`{}?*'\"()") + + @staticmethod + def is_value_name_char(c): + return c in ":^-_" or c.isalnum() + + def error(self, message): + raise AutogenParseError(message, self.cur_file, self.cur_line) + + def read_tokens(self, f): + data = f.read() + end = len(data) + offset = 0 + while offset < end: + while offset < end and data[offset].isspace(): + if data[offset] == "\n": + self.cur_line += 1 + offset += 1 + if offset >= end: + break + c = data[offset] + if c == "#": + offset += 1 + try: + end_directive = data.index("\n", offset) + directive = data[offset:end_directive] + offset = end_directive + except ValueError: + directive = data[offset:] + offset = end + name, value = directive.split(None, 1) + if name == "if": + try: + end_if = data.index("\n#endif", offset) + new_offset = end_if + len("\n#endif") + self.cur_line += data[offset:new_offset].count("\n") + offset = new_offset + except ValueError: + self.error("#if without matching #endif") + else: + self.error("Unhandled directive '#%s'" % name) + elif c == "{": + yield AutogenToken.lbrace, c + offset += 1 + elif c == "=": + yield AutogenToken.equals, c + offset += 1 + elif c == "}": + yield AutogenToken.rbrace, c + offset += 1 + elif c == "[": + yield AutogenToken.lbracket, c + offset += 1 + elif c == "]": + yield AutogenToken.rbracket, c + offset += 1 + elif c == ";": + yield AutogenToken.semicolon, c + offset += 1 + elif c == ",": + yield AutogenToken.comma, c + offset += 1 + elif c in ("'", '"'): + s = [] + while True: + offset += 1 + if offset >= end: + self.error("EOF in quoted string") + if data[offset] == "\n": + self.cur_line += 1 + if data[offset] == "\\": + offset += 1 + if offset >= end: + self.error("EOF in quoted string") + if data[offset] == "\n": + self.cur_line += 1 + # Proper escaping unimplemented; this can be filled + # out if needed. + s.append("\\") + s.append(data[offset]) + elif data[offset] == c: + offset += 1 + break + else: + s.append(data[offset]) + yield AutogenToken.string, "".join(s) + elif c == "/": + offset += 1 + if data[offset] == "*": + offset += 1 + try: + end_comment = data.index("*/", offset) + new_offset = end_comment + len("*/") + self.cur_line += data[offset:new_offset].count("\n") + offset = new_offset + except ValueError: + self.error("/* without matching */") + elif data[offset] == "/": + try: + offset = data.index("\n", offset) + except ValueError: + pass + elif (c.isdigit() or + (c == "-" and offset < end - 1 and + data[offset + 1].isdigit())): + end_number = offset + 1 + while end_number < end and data[end_number].isdigit(): + end_number += 1 + yield AutogenToken.number, data[offset:end_number] + offset = end_number + elif self.is_unquotable_char(c): + end_name = offset + while (end_name < end and + self.is_value_name_char(data[end_name])): + end_name += 1 + if end_name < end and self.is_unquotable_char(data[end_name]): + while (end_name < end and + self.is_unquotable_char(data[end_name])): + end_name += 1 + yield AutogenToken.other_name, data[offset:end_name] + offset = end_name + else: + s = data[offset:end_name] + if s.lower() == "autogen": + yield AutogenToken.autogen, s + elif s.lower() == "definitions": + yield AutogenToken.definitions, s + else: + yield AutogenToken.var_name, s + offset = end_name + else: + self.error("Invalid input character '%s'" % c) + yield AutogenToken.eof, None + + def do_need_name_end(self, token): + if len(self.def_stack) > 1: + self.error("Definition blocks were left open") + + def do_need_name_var_name(self, token): + self.new_name = token + + def do_end_block(self, token): + if len(self.def_stack) <= 1: + self.error("Too many close braces") + new_name, parent_def = self.def_stack.pop() + parent_def.append((new_name, self.curdef)) + self.curdef = parent_def + + def do_empty_val(self, token): + self.curdef.append((self.new_name, "")) + + def do_str_value(self, token): + self.curdef.append((self.new_name, token)) + + def do_start_block(self, token): + self.def_stack.append((self.new_name, self.curdef)) + self.curdef = AutogenDefinition() + + def do_indexed_name(self, token): + self.new_name = token + + def read_definitions_file(self, f): + self.curdef = self.definitions + self.cur_line = 0 + state = AutogenState.init + + # The following transition table was reduced from the Autogen + # documentation: + # info -f autogen -n 'Full Syntax' + transitions = { + AutogenState.init: { + AutogenToken.autogen: (AutogenState.need_def, None), + }, + AutogenState.need_def: { + AutogenToken.definitions: (AutogenState.need_tpl, None), + }, + AutogenState.need_tpl: { + AutogenToken.var_name: (AutogenState.need_semi, None), + AutogenToken.other_name: (AutogenState.need_semi, None), + AutogenToken.string: (AutogenState.need_semi, None), + }, + AutogenState.need_semi: { + AutogenToken.semicolon: (AutogenState.need_name, None), + }, + AutogenState.need_name: { + AutogenToken.autogen: (AutogenState.need_def, None), + AutogenToken.eof: (AutogenState.done, self.do_need_name_end), + AutogenToken.var_name: ( + AutogenState.have_name, self.do_need_name_var_name), + AutogenToken.rbrace: ( + AutogenState.have_value, self.do_end_block), + }, + AutogenState.have_name: { + AutogenToken.semicolon: ( + AutogenState.need_name, self.do_empty_val), + AutogenToken.equals: (AutogenState.need_value, None), + AutogenToken.lbracket: (AutogenState.need_idx, None), + }, + AutogenState.need_value: { + AutogenToken.var_name: ( + AutogenState.have_value, self.do_str_value), + AutogenToken.other_name: ( + AutogenState.have_value, self.do_str_value), + AutogenToken.string: ( + AutogenState.have_value, self.do_str_value), + AutogenToken.number: ( + AutogenState.have_value, self.do_str_value), + AutogenToken.lbrace: ( + AutogenState.need_name, self.do_start_block), + }, + AutogenState.need_idx: { + AutogenToken.var_name: ( + AutogenState.need_rbracket, self.do_indexed_name), + AutogenToken.number: ( + AutogenState.need_rbracket, self.do_indexed_name), + }, + AutogenState.need_rbracket: { + AutogenToken.rbracket: (AutogenState.indx_name, None), + }, + AutogenState.indx_name: { + AutogenToken.semicolon: ( + AutogenState.need_name, self.do_empty_val), + AutogenToken.equals: (AutogenState.need_value, None), + }, + AutogenState.have_value: { + AutogenToken.semicolon: (AutogenState.need_name, None), + AutogenToken.comma: (AutogenState.need_value, None), + }, + } + + for code, token in self.read_tokens(f): + if code in transitions[state]: + state, handler = transitions[state][code] + if handler is not None: + handler(token) + else: + self.error( + "Parse error in state %s: unexpected token '%s'" % ( + state, token)) + if state == AutogenState.done: + break + + def read_definitions(self, path): + self.cur_file = path + with open(path) as f: + self.read_definitions_file(f) + +defparser = AutogenParser() + +# +# Output +# + +outputs = {} + +def output(s, section=''): + if s == "": + return + outputs.setdefault(section, []) + outputs[section].append(s) + +def write_output(section=''): + for s in outputs.get(section, []): + print(s, end='') + +# +# Global variables +# + +def gvar_add(var, value): + output(var + " += " + value + "\n") + +# +# Per PROGRAM/SCRIPT variables +# + +seen_vars = set() + +def vars_init(defn, *var_list): + name = defn['name'] + + if name not in seen_target and name not in seen_vars: + for var in var_list: + output(var + " = \n", section='decl') + seen_vars.add(name) + +def var_set(var, value): + output(var + " = " + value + "\n") + +def var_add(var, value): + output(var + " += " + value + "\n") + +# +# Variable names and rules +# + +canonical_name_re = re.compile(r'[^0-9A-Za-z@_]') +canonical_name_suffix = "" + +def set_canonical_name_suffix(suffix): + global canonical_name_suffix + canonical_name_suffix = suffix + +def cname(defn): + return canonical_name_re.sub('_', defn['name'] + canonical_name_suffix) + +def rule(target, source, cmd): + if cmd[0] == "\n": + output("\n" + target + ": " + source + cmd.replace("\n", "\n\t") + "\n") + else: + output("\n" + target + ": " + source + "\n\t" + cmd.replace("\n", "\n\t") + "\n") + +# +# Handle keys with platform names as values, for example: +# +# kernel = { +# nostrip = emu; +# ... +# } +# +def platform_tagged(defn, platform, tag): + for value in defn.find_all(tag): + for group in RMAP[platform]: + if value == group: + return True + return False + +def if_platform_tagged(defn, platform, tag, snippet_if, snippet_else=None): + if platform_tagged(defn, platform, tag): + return snippet_if + elif snippet_else is not None: + return snippet_else + +# +# Handle tagged values +# +# module = { +# extra_dist = ... +# extra_dist = ... +# ... +# }; +# +def foreach_value(defn, tag, closure): + r = [] + for value in defn.find_all(tag): + r.append(closure(value)) + return ''.join(r) + +# +# Handle best matched values for a platform, for example: +# +# module = { +# cflags = '-Wall'; +# emu_cflags = '-Wall -DGRUB_EMU=1'; +# ... +# } +# +def foreach_platform_specific_value(defn, platform, suffix, nonetag, closure): + r = [] + for group in RMAP[platform]: + values = list(defn.find_all(group + suffix)) + if values: + for value in values: + r.append(closure(value)) + break + else: + for value in defn.find_all(nonetag): + r.append(closure(value)) + return ''.join(r) + +# +# Handle values from sum of all groups for a platform, for example: +# +# module = { +# common = kern/misc.c; +# emu = kern/emu/misc.c; +# ... +# } +# +def foreach_platform_value(defn, platform, suffix, closure): + r = [] + for group in RMAP[platform]: + for value in defn.find_all(group + suffix): + r.append(closure(value)) + return ''.join(r) + +def platform_conditional(platform, closure): + output("\nif COND_" + platform + "\n") + closure(platform) + output("endif\n") + +# +# Handle guarding with platform-specific "enable" keys, for example: +# +# module = { +# name = pci; +# noemu = bus/pci.c; +# emu = bus/emu/pci.c; +# emu = commands/lspci.c; +# +# enable = emu; +# enable = i386_pc; +# enable = x86_efi; +# enable = i386_ieee1275; +# enable = i386_coreboot; +# }; +# +def foreach_enabled_platform(defn, closure): + if 'enable' in defn: + for platform in GRUB_PLATFORMS: + if platform_tagged(defn, platform, "enable"): + platform_conditional(platform, closure) + else: + for platform in GRUB_PLATFORMS: + platform_conditional(platform, closure) + +# +# Handle guarding with platform-specific automake conditionals, for example: +# +# module = { +# name = usb; +# common = bus/usb/usb.c; +# noemu = bus/usb/usbtrans.c; +# noemu = bus/usb/usbhub.c; +# enable = emu; +# enable = i386; +# enable = mips_loongson; +# emu_condition = COND_GRUB_EMU_SDL; +# }; +# +def under_platform_specific_conditionals(defn, platform, closure): + output(foreach_platform_specific_value(defn, platform, "_condition", "condition", lambda cond: "if " + cond + "\n")) + closure(defn, platform) + output(foreach_platform_specific_value(defn, platform, "_condition", "condition", lambda cond: "endif " + cond + "\n")) + +def platform_specific_values(defn, platform, suffix, nonetag): + return foreach_platform_specific_value(defn, platform, suffix, nonetag, + lambda value: value + " ") + +def platform_values(defn, platform, suffix): + return foreach_platform_value(defn, platform, suffix, lambda value: value + " ") + +def extra_dist(defn): + return foreach_value(defn, "extra_dist", lambda value: value + " ") + +def platform_sources(defn, p): return platform_values(defn, p, "") +def platform_nodist_sources(defn, p): return platform_values(defn, p, "_nodist") + +def platform_startup(defn, p): return platform_specific_values(defn, p, "_startup", "startup") +def platform_ldadd(defn, p): return platform_specific_values(defn, p, "_ldadd", "ldadd") +def platform_dependencies(defn, p): return platform_specific_values(defn, p, "_dependencies", "dependencies") +def platform_cflags(defn, p): return platform_specific_values(defn, p, "_cflags", "cflags") +def platform_ldflags(defn, p): return platform_specific_values(defn, p, "_ldflags", "ldflags") +def platform_cppflags(defn, p): return platform_specific_values(defn, p, "_cppflags", "cppflags") +def platform_ccasflags(defn, p): return platform_specific_values(defn, p, "_ccasflags", "ccasflags") +def platform_stripflags(defn, p): return platform_specific_values(defn, p, "_stripflags", "stripflags") +def platform_objcopyflags(defn, p): return platform_specific_values(defn, p, "_objcopyflags", "objcopyflags") + +# +# Emit snippet only the first time through for the current name. +# +seen_target = set() + +def first_time(defn, snippet): + if defn['name'] not in seen_target: + return snippet + return '' + +def is_platform_independent(defn): + if 'enable' in defn: + return False + for suffix in [ "", "_nodist" ]: + template = platform_values(defn, GRUB_PLATFORMS[0], suffix) + for platform in GRUB_PLATFORMS[1:]: + if template != platform_values(defn, platform, suffix): + return False + + for suffix in [ "startup", "ldadd", "dependencies", "cflags", "ldflags", "cppflags", "ccasflags", "stripflags", "objcopyflags", "condition" ]: + template = platform_specific_values(defn, GRUB_PLATFORMS[0], "_" + suffix, suffix) + for platform in GRUB_PLATFORMS[1:]: + if template != platform_specific_values(defn, platform, "_" + suffix, suffix): + return False + for tag in [ "nostrip" ]: + template = platform_tagged(defn, GRUB_PLATFORMS[0], tag) + for platform in GRUB_PLATFORMS[1:]: + if template != platform_tagged(defn, platform, tag): + return False + + return True + +def module(defn, platform): + name = defn['name'] + set_canonical_name_suffix(".module") + + gvar_add("platform_PROGRAMS", name + ".module") + gvar_add("MODULE_FILES", name + ".module$(EXEEXT)") + + var_set(cname(defn) + "_SOURCES", platform_sources(defn, platform) + " ## platform sources") + var_set("nodist_" + cname(defn) + "_SOURCES", platform_nodist_sources(defn, platform) + " ## platform nodist sources") + var_set(cname(defn) + "_LDADD", platform_ldadd(defn, platform)) + var_set(cname(defn) + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_MODULE) " + platform_cflags(defn, platform)) + var_set(cname(defn) + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_MODULE) " + platform_ldflags(defn, platform)) + var_set(cname(defn) + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) " + platform_cppflags(defn, platform)) + var_set(cname(defn) + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(defn, platform)) + var_set(cname(defn) + "_DEPENDENCIES", "$(TARGET_OBJ2ELF) " + platform_dependencies(defn, platform)) + + gvar_add("dist_noinst_DATA", extra_dist(defn)) + gvar_add("BUILT_SOURCES", "$(nodist_" + cname(defn) + "_SOURCES)") + gvar_add("CLEANFILES", "$(nodist_" + cname(defn) + "_SOURCES)") + + gvar_add("MOD_FILES", name + ".mod") + gvar_add("MARKER_FILES", name + ".marker") + gvar_add("CLEANFILES", name + ".marker") + output(""" +""" + name + """.marker: $(""" + cname(defn) + """_SOURCES) $(nodist_""" + cname(defn) + """_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname(defn) + """_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +""") + +def kernel(defn, platform): + name = defn['name'] + set_canonical_name_suffix(".exec") + gvar_add("platform_PROGRAMS", name + ".exec") + var_set(cname(defn) + "_SOURCES", platform_startup(defn, platform)) + var_add(cname(defn) + "_SOURCES", platform_sources(defn, platform)) + var_set("nodist_" + cname(defn) + "_SOURCES", platform_nodist_sources(defn, platform) + " ## platform nodist sources") + var_set(cname(defn) + "_LDADD", platform_ldadd(defn, platform)) + var_set(cname(defn) + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_KERNEL) " + platform_cflags(defn, platform)) + var_set(cname(defn) + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_KERNEL) " + platform_ldflags(defn, platform)) + var_set(cname(defn) + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) " + platform_cppflags(defn, platform)) + var_set(cname(defn) + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) " + platform_ccasflags(defn, platform)) + var_set(cname(defn) + "_STRIPFLAGS", "$(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) " + platform_stripflags(defn, platform)) + var_set(cname(defn) + "_DEPENDENCIES", "$(TARGET_OBJ2ELF)") + + gvar_add("dist_noinst_DATA", extra_dist(defn)) + gvar_add("BUILT_SOURCES", "$(nodist_" + cname(defn) + "_SOURCES)") + gvar_add("CLEANFILES", "$(nodist_" + cname(defn) + "_SOURCES)") + + gvar_add("platform_DATA", name + ".img") + gvar_add("CLEANFILES", name + ".img") + rule(name + ".img", name + ".exec$(EXEEXT)", + if_platform_tagged(defn, platform, "nostrip", +"""if test x$(TARGET_APPLE_LINKER) = x1; then \ + $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; \ + elif test ! -z '$(TARGET_OBJ2ELF)'; then \ + $(TARGET_OBJ2ELF) $< $@ || (rm -f $@; exit 1); \ + else cp $< $@; fi""", +"""if test x$(TARGET_APPLE_LINKER) = x1; then \ + $(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \ + $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \ + rm -f $@.bin; \ + elif test ! -z '$(TARGET_OBJ2ELF)'; then \ + """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \ + $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \ + rm -f $@.bin; \ +else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \ +fi""")) + +def image(defn, platform): + name = defn['name'] + set_canonical_name_suffix(".image") + gvar_add("platform_PROGRAMS", name + ".image") + var_set(cname(defn) + "_SOURCES", platform_sources(defn, platform)) + var_set("nodist_" + cname(defn) + "_SOURCES", platform_nodist_sources(defn, platform) + "## platform nodist sources") + var_set(cname(defn) + "_LDADD", platform_ldadd(defn, platform)) + var_set(cname(defn) + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_IMAGE) " + platform_cflags(defn, platform)) + var_set(cname(defn) + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_IMAGE) " + platform_ldflags(defn, platform)) + var_set(cname(defn) + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(defn, platform)) + var_set(cname(defn) + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(defn, platform)) + var_set(cname(defn) + "_OBJCOPYFLAGS", "$(OBJCOPYFLAGS_IMAGE) " + platform_objcopyflags(defn, platform)) + # var_set(cname(defn) + "_DEPENDENCIES", platform_dependencies(defn, platform) + " " + platform_ldadd(defn, platform)) + + gvar_add("dist_noinst_DATA", extra_dist(defn)) + gvar_add("BUILT_SOURCES", "$(nodist_" + cname(defn) + "_SOURCES)") + gvar_add("CLEANFILES", "$(nodist_" + cname(defn) + "_SOURCES)") + + gvar_add("platform_DATA", name + ".img") + gvar_add("CLEANFILES", name + ".img") + rule(name + ".img", name + ".image$(EXEEXT)", """ +if test x$(TARGET_APPLE_LINKER) = x1; then \ + $(MACHO2IMG) $< $@; \ +else \ + $(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; \ +fi +""") + +def library(defn, platform): + name = defn['name'] + set_canonical_name_suffix("") + + vars_init(defn, + cname(defn) + "_SOURCES", + "nodist_" + cname(defn) + "_SOURCES", + cname(defn) + "_CFLAGS", + cname(defn) + "_CPPFLAGS", + cname(defn) + "_CCASFLAGS") + # cname(defn) + "_DEPENDENCIES") + + if name not in seen_target: + gvar_add("noinst_LIBRARIES", name) + var_add(cname(defn) + "_SOURCES", platform_sources(defn, platform)) + var_add("nodist_" + cname(defn) + "_SOURCES", platform_nodist_sources(defn, platform)) + var_add(cname(defn) + "_CFLAGS", first_time(defn, "$(AM_CFLAGS) $(CFLAGS_LIBRARY) ") + platform_cflags(defn, platform)) + var_add(cname(defn) + "_CPPFLAGS", first_time(defn, "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) ") + platform_cppflags(defn, platform)) + var_add(cname(defn) + "_CCASFLAGS", first_time(defn, "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) ") + platform_ccasflags(defn, platform)) + # var_add(cname(defn) + "_DEPENDENCIES", platform_dependencies(defn, platform) + " " + platform_ldadd(defn, platform)) + + gvar_add("dist_noinst_DATA", extra_dist(defn)) + if name not in seen_target: + gvar_add("BUILT_SOURCES", "$(nodist_" + cname(defn) + "_SOURCES)") + gvar_add("CLEANFILES", "$(nodist_" + cname(defn) + "_SOURCES)") + +def installdir(defn, default="bin"): + return defn.get('installdir', default) + +def manpage(defn, adddeps): + name = defn['name'] + mansection = defn['mansection'] + + output("if COND_MAN_PAGES\n") + gvar_add("man_MANS", name + "." + mansection) + rule(name + "." + mansection, name + " " + adddeps, """ +chmod a+x """ + name + """ +PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=""" + mansection + """ -i $(top_srcdir)/docs/man/""" + name + """.h2m -o $@ """ + name + """ +""") + gvar_add("CLEANFILES", name + "." + mansection) + output("endif\n") + +def program(defn, platform, test=False): + name = defn['name'] + set_canonical_name_suffix("") + + if 'testcase' in defn: + gvar_add("check_PROGRAMS", name) + gvar_add("TESTS", name) + else: + var_add(installdir(defn) + "_PROGRAMS", name) + if 'mansection' in defn: + manpage(defn, "") + + var_set(cname(defn) + "_SOURCES", platform_sources(defn, platform)) + var_set("nodist_" + cname(defn) + "_SOURCES", platform_nodist_sources(defn, platform)) + var_set(cname(defn) + "_LDADD", platform_ldadd(defn, platform)) + var_set(cname(defn) + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_PROGRAM) " + platform_cflags(defn, platform)) + var_set(cname(defn) + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) " + platform_ldflags(defn, platform)) + var_set(cname(defn) + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) " + platform_cppflags(defn, platform)) + var_set(cname(defn) + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(defn, platform)) + # var_set(cname(defn) + "_DEPENDENCIES", platform_dependencies(defn, platform) + " " + platform_ldadd(defn, platform)) + + gvar_add("dist_noinst_DATA", extra_dist(defn)) + gvar_add("BUILT_SOURCES", "$(nodist_" + cname(defn) + "_SOURCES)") + gvar_add("CLEANFILES", "$(nodist_" + cname(defn) + "_SOURCES)") + +def data(defn, platform): + var_add("dist_" + installdir(defn) + "_DATA", platform_sources(defn, platform)) + gvar_add("dist_noinst_DATA", extra_dist(defn)) + +def transform_data(defn, platform): + name = defn['name'] + + var_add(installdir(defn) + "_DATA", name) + + rule(name, "$(top_builddir)/config.status " + platform_sources(defn, platform) + platform_dependencies(defn, platform), """ +(for x in """ + platform_sources(defn, platform) + """; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +chmod a+x """ + name + """ +""") + + gvar_add("CLEANFILES", name) + gvar_add("EXTRA_DIST", extra_dist(defn)) + gvar_add("dist_noinst_DATA", platform_sources(defn, platform)) + +def script(defn, platform): + name = defn['name'] + + if 'testcase' in defn: + gvar_add("check_SCRIPTS", name) + gvar_add ("TESTS", name) + else: + var_add(installdir(defn) + "_SCRIPTS", name) + if 'mansection' in defn: + manpage(defn, "grub-mkconfig_lib") + + rule(name, "$(top_builddir)/config.status " + platform_sources(defn, platform) + platform_dependencies(defn, platform), """ +(for x in """ + platform_sources(defn, platform) + """; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +chmod a+x """ + name + """ +""") + + gvar_add("CLEANFILES", name) + gvar_add("EXTRA_DIST", extra_dist(defn)) + gvar_add("dist_noinst_DATA", platform_sources(defn, platform)) + +def rules(target, closure): + seen_target.clear() + seen_vars.clear() + + for defn in defparser.definitions.find_all(target): + if is_platform_independent(defn): + under_platform_specific_conditionals(defn, GRUB_PLATFORMS[0], closure) + else: + foreach_enabled_platform( + defn, + lambda p: under_platform_specific_conditionals(defn, p, closure)) + # Remember that we've seen this target. + seen_target.add(defn['name']) + +parser = OptionParser(usage="%prog DEFINITION-FILES") +_, args = parser.parse_args() + +for arg in args: + defparser.read_definitions(arg) + +rules("module", module) +rules("kernel", kernel) +rules("image", image) +rules("library", library) +rules("program", program) +rules("script", script) +rules("data", data) +rules("transform_data", transform_data) + +write_output(section='decl') +write_output() diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am new file mode 100644 index 000000000..04e9395fd --- /dev/null +++ b/grub-core/Makefile.am @@ -0,0 +1,447 @@ +AUTOMAKE_OPTIONS = subdir-objects -Wno-portability + +DEPDIR=.deps-core + +include $(top_srcdir)/conf/Makefile.common + +CC=$(TARGET_CC) +CPP=$(TARGET_CC) +CCAS=$(TARGET_CC) +RANLIB=$(TARGET_RANLIB) +STRIP=$(TARGET_STRIP) + +MACHO2IMG=$(top_builddir)/grub-macho2img + +AM_CFLAGS = $(TARGET_CFLAGS) +AM_LDFLAGS = $(TARGET_LDFLAGS) +AM_CPPFLAGS = $(TARGET_CPPFLAGS) $(CPPFLAGS_DEFAULT) +AM_CCASFLAGS = $(TARGET_CCASFLAGS) $(CCASFLAGS_DEFAULT) + +CFLAGS_PROGRAM += $(CFLAGS_PLATFORM) +LDFLAGS_PROGRAM += $(LDFLAGS_PLATFORM) +CPPFLAGS_PROGRAM += $(CPPFLAGS_PLATFORM) +CCASFLAGS_PROGRAM += $(CCASFLAGS_PLATFORM) + +CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin +CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) +CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) + +build-grub-pep2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^ +CLEANFILES += build-grub-pep2elf$(BUILD_EXEEXT) + +build-grub-pe2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ +CLEANFILES += build-grub-pe2elf$(BUILD_EXEEXT) + +# gentrigtables +gentrigtables$(BUILD_EXEEXT): gentrigtables.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM) +CLEANFILES += gentrigtables$(BUILD_EXEEXT) + +build-grub-module-verifier$(BUILD_EXEEXT): $(top_srcdir)/util/grub-module-verifier.c $(top_srcdir)/util/grub-module-verifier32.c $(top_srcdir)/util/grub-module-verifier64.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-module-verifier\" $^ +CLEANFILES += build-grub-module-verifier$(BUILD_EXEEXT) + +# trigtables.c +trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac + ./gentrigtables$(BUILD_EXEEXT) > $@ +CLEANFILES += trigtables.c + +# XXX Use Automake's LEX & YACC support +grub_script.tab.h: script/parser.y + $(YACC) -d -p grub_script_yy -b grub_script $< +grub_script.tab.c: grub_script.tab.h +CLEANFILES += grub_script.tab.c grub_script.tab.h + +# For the lexer. +grub_script.yy.h: script/yylex.l + $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $< +grub_script.yy.c: grub_script.yy.h + +rs_decoder.h: $(srcdir)/lib/reed_solomon.c + $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Os -I$(top_builddir) -S -DSTANDALONE -o $@ $< -g0 -mregparm=3 -ffreestanding + +CLEANFILES += grub_script.yy.c grub_script.yy.h + +include $(srcdir)/Makefile.core.am + +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cache.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/device.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dl.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/file.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fs.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h +if COND_emu +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt-emu.h +else +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt.h +endif +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h + +if COND_i386_pc +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pxe.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +endif + +if COND_i386_efi +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h +endif + +if COND_i386_coreboot +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h +endif + +if COND_i386_multiboot +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h +endif + +if COND_i386_qemu +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +endif + +if COND_i386_ieee1275 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +endif + +if COND_i386_xen +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +endif + +if COND_x86_64_xen +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/x86_64/xen/hypercall.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +endif + +if COND_x86_64_efi +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h +endif + +if COND_ia64_efi +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h +endif + +if COND_mips +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/kernel.h +endif + +if COND_mips_arc +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arc/arc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +endif + +if COND_mips_qemu_mips +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +endif + +if COND_mips_loongson +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/time.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cs5536.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pci.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +endif + +if COND_mips_qemu_mips +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h +KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h +endif + +if COND_powerpc_ieee1275 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +endif + +if COND_sparc64_ieee1275 +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sparc64/ieee1275/ieee1275.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +endif + +if COND_arm_uboot +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/uboot.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h +endif + +if COND_arm_efi +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/efi/loader.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h +endif + +if COND_arm64_efi +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h +endif + +if COND_emu +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/datetime.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/misc.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/net.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostdisk.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostfile.h +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +if COND_GRUB_EMU_SDL +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h +endif +if COND_GRUB_EMU_PCI +KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h +endif +endif + +symlist.h: $(top_builddir)/config.h $(KERNEL_HEADER_FILES) + @list='$^'; \ + for p in $$list; do \ + echo "#include <$$p>" >> $@ || (rm -f $@; exit 1); \ + done +CLEANFILES += symlist.h +BUILT_SOURCES += symlist.h + +symlist.c: symlist.h gensymlist.sh + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1) + cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) + rm -f symlist.p +CLEANFILES += symlist.c +BUILT_SOURCES += symlist.c + +if COND_HAVE_ASM_USCORE +ASM_PREFIX=_ +else +ASM_PREFIX= +endif + +noinst_DATA += kernel_syms.lst + +kernel_syms.lst: $(KERNEL_HEADER_FILES) $(top_builddir)/config.h + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input + cat kernel_syms.input | grep -v '^#' | sed -n \ + -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/defined kernel '"$(ASM_PREFIX)"'\1/;p;}' \ + -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/defined kernel '"$(ASM_PREFIX)"'\1/;p;}' \ + | sort -u >$@ + rm -f kernel_syms.input +CLEANFILES += kernel_syms.lst + +if COND_emu +kern/emu/grub_emu-main.$(OBJEXT):grub_emu_init.h +grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h +kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h +grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h + +grub_emu_init.h: genemuinitheader.sh $(MODULE_FILES) + rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@ +CLEANFILES += grub_emu_init.h + +grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MODULE_FILES) + rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@ +CLEANFILES += grub_emu_init.c +endif + +# List files + +fs.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + if grep 'FS_LIST_MARKER' $$pp >/dev/null 2>&1; then \ + echo $$b; \ + fi; \ + done) | sort -u > $@ +platform_DATA += fs.lst +CLEANFILES += fs.lst + +command.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + sed -n \ + -e "/EXTCOMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ + -e "/P1COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ + -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ +platform_DATA += command.lst +CLEANFILES += command.lst + +partmap.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + if grep 'PARTMAP_LIST_MARKER' $$pp >/dev/null 2>&1; then \ + echo $$b; \ + fi; \ + done) | sort -u > $@ +platform_DATA += partmap.lst +CLEANFILES += partmap.lst + +terminal.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + sed -n \ + -e "/INPUT_TERMINAL_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/i\1: $$b/;p;}" \ + -e "/OUTPUT_TERMINAL_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/o\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ +platform_DATA += terminal.lst +CLEANFILES += terminal.lst + +parttool.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + sed -n \ + -e "/PARTTOOL_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ +platform_DATA += parttool.lst +CLEANFILES += parttool.lst + +video.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + if grep 'VIDEO_LIST_MARKER' $$pp >/dev/null 2>&1; then \ + echo $$b; \ + fi; \ + done) | sort -u > $@ +platform_DATA += video.lst +CLEANFILES += video.lst + +# but, crypto.lst is simply copied +crypto.lst: $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst + cp $^ $@ +platform_DATA += crypto.lst +CLEANFILES += crypto.lst + +syminfo.lst: gensyminfo.sh kernel_syms.lst $(MODULE_FILES) + cat kernel_syms.lst > $@.new + for m in $(MODULE_FILES); do \ + sh $< $$m >> $@.new || exit 1; \ + done + mv $@.new $@ + +# generate global module dependencies list +moddep.lst: syminfo.lst genmoddep.awk video.lst + cat $< | sort | $(AWK) -f $(srcdir)/genmoddep.awk > $@ || (rm -f $@; exit 1) +platform_DATA += moddep.lst +CLEANFILES += config.log syminfo.lst moddep.lst + +$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT) build-grub-module-verifier$(BUILD_EXEEXT) + TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@ +platform_DATA += $(MOD_FILES) +platform_DATA += modinfo.sh +CLEANFILES += $(MOD_FILES) + +if COND_ENABLE_EFIEMU +efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) + -rm -f $@ + -rm -f $@.bin + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -static -O2 -c -o $@.bin $< + if test "x$(TARGET_APPLE_LINKER)" = x1; then \ + $(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \ + rm -f $@.bin ; \ + elif test ! -z "$(TARGET_OBJ2ELF)"; then \ + $(TARGET_OBJ2ELF) $@.bin || (rm -f $@.bin; exit 1); \ + mv $@.bin $@ ; \ + else \ + mv $@.bin $@ ; \ + fi + +# Link format -arch,x86_64 means Apple linker +efiemu64_c.o: efiemu/runtime/efiemu.c + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $< + +efiemu64_s.o: efiemu/runtime/efiemu.S + $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $< + +efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF) + -rm -f $@ + -rm -f $@.bin + $(TARGET_CC) -m64 $(EFIEMU64_LINK_FORMAT) -nostdlib -static -Wl,-r -o $@.bin $^ + if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \ + $(TARGET_OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \ + rm -f $@.bin; \ + else \ + mv $@.bin $@ ; \ + fi + +platform_DATA += efiemu32.o efiemu64.o +CLEANFILES += efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o +endif + +windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows +windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA) + test -d $(windowsdir)/$(target_cpu)-$(platform) || mkdir $(windowsdir)/$(target_cpu)-$(platform) + for x in $(platform_DATA); do \ + cp -fp $$x $(windowsdir)/$(target_cpu)-$(platform)/$$x; \ + done diff --git a/grub-core/Makefile.core.am b/grub-core/Makefile.core.am new file mode 100644 index 000000000..484c2d7d8 --- /dev/null +++ b/grub-core/Makefile.core.am @@ -0,0 +1,20872 @@ +platform_PROGRAMS += disk.module +MODULE_FILES += disk.module$(EXEEXT) +disk_module_SOURCES = lib/disk.c ## platform sources +nodist_disk_module_SOURCES = ## platform nodist sources +disk_module_LDADD = +disk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +disk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +disk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +disk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +disk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += kern/disk_common.c +BUILT_SOURCES += $(nodist_disk_module_SOURCES) +CLEANFILES += $(nodist_disk_module_SOURCES) +MOD_FILES += disk.mod +MARKER_FILES += disk.marker +CLEANFILES += disk.marker + +disk.marker: $(disk_module_SOURCES) $(nodist_disk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(disk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += trig.module +MODULE_FILES += trig.module$(EXEEXT) +trig_module_SOURCES = ## platform sources +nodist_trig_module_SOURCES = trigtables.c ## platform nodist sources +trig_module_LDADD = +trig_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +trig_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +trig_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +trig_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +trig_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += gentrigtables.c +BUILT_SOURCES += $(nodist_trig_module_SOURCES) +CLEANFILES += $(nodist_trig_module_SOURCES) +MOD_FILES += trig.mod +MARKER_FILES += trig.marker +CLEANFILES += trig.marker + +trig.marker: $(trig_module_SOURCES) $(nodist_trig_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(trig_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += cs5536.module +MODULE_FILES += cs5536.module$(EXEEXT) +cs5536_module_SOURCES = bus/cs5536.c ## platform sources +nodist_cs5536_module_SOURCES = ## platform nodist sources +cs5536_module_LDADD = +cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cs5536_module_SOURCES) +CLEANFILES += $(nodist_cs5536_module_SOURCES) +MOD_FILES += cs5536.mod +MARKER_FILES += cs5536.marker +CLEANFILES += cs5536.marker + +cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += cs5536.module +MODULE_FILES += cs5536.module$(EXEEXT) +cs5536_module_SOURCES = bus/cs5536.c ## platform sources +nodist_cs5536_module_SOURCES = ## platform nodist sources +cs5536_module_LDADD = +cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cs5536_module_SOURCES) +CLEANFILES += $(nodist_cs5536_module_SOURCES) +MOD_FILES += cs5536.mod +MARKER_FILES += cs5536.marker +CLEANFILES += cs5536.marker + +cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cs5536.module +MODULE_FILES += cs5536.module$(EXEEXT) +cs5536_module_SOURCES = bus/cs5536.c ## platform sources +nodist_cs5536_module_SOURCES = ## platform nodist sources +cs5536_module_LDADD = +cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cs5536_module_SOURCES) +CLEANFILES += $(nodist_cs5536_module_SOURCES) +MOD_FILES += cs5536.mod +MARKER_FILES += cs5536.marker +CLEANFILES += cs5536.marker + +cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += cs5536.module +MODULE_FILES += cs5536.module$(EXEEXT) +cs5536_module_SOURCES = bus/cs5536.c ## platform sources +nodist_cs5536_module_SOURCES = ## platform nodist sources +cs5536_module_LDADD = +cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cs5536_module_SOURCES) +CLEANFILES += $(nodist_cs5536_module_SOURCES) +MOD_FILES += cs5536.mod +MARKER_FILES += cs5536.marker +CLEANFILES += cs5536.marker + +cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cs5536.module +MODULE_FILES += cs5536.module$(EXEEXT) +cs5536_module_SOURCES = bus/cs5536.c ## platform sources +nodist_cs5536_module_SOURCES = ## platform nodist sources +cs5536_module_LDADD = +cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cs5536_module_SOURCES) +CLEANFILES += $(nodist_cs5536_module_SOURCES) +MOD_FILES += cs5536.mod +MARKER_FILES += cs5536.marker +CLEANFILES += cs5536.marker + +cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cs5536.module +MODULE_FILES += cs5536.module$(EXEEXT) +cs5536_module_SOURCES = bus/cs5536.c ## platform sources +nodist_cs5536_module_SOURCES = ## platform nodist sources +cs5536_module_LDADD = +cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cs5536_module_SOURCES) +CLEANFILES += $(nodist_cs5536_module_SOURCES) +MOD_FILES += cs5536.mod +MARKER_FILES += cs5536.marker +CLEANFILES += cs5536.marker + +cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += cs5536.module +MODULE_FILES += cs5536.module$(EXEEXT) +cs5536_module_SOURCES = bus/cs5536.c ## platform sources +nodist_cs5536_module_SOURCES = ## platform nodist sources +cs5536_module_LDADD = +cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cs5536_module_SOURCES) +CLEANFILES += $(nodist_cs5536_module_SOURCES) +MOD_FILES += cs5536.mod +MARKER_FILES += cs5536.marker +CLEANFILES += cs5536.marker + +cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += lsspd.module +MODULE_FILES += lsspd.module$(EXEEXT) +lsspd_module_SOURCES = commands/mips/loongson/lsspd.c ## platform sources +nodist_lsspd_module_SOURCES = ## platform nodist sources +lsspd_module_LDADD = +lsspd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsspd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsspd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsspd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsspd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsspd_module_SOURCES) +CLEANFILES += $(nodist_lsspd_module_SOURCES) +MOD_FILES += lsspd.mod +MARKER_FILES += lsspd.marker +CLEANFILES += lsspd.marker + +lsspd.marker: $(lsspd_module_SOURCES) $(nodist_lsspd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsspd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usb.module +MODULE_FILES += usb.module$(EXEEXT) +usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +nodist_usb_module_SOURCES = ## platform nodist sources +usb_module_LDADD = +usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_module_SOURCES) +CLEANFILES += $(nodist_usb_module_SOURCES) +MOD_FILES += usb.mod +MARKER_FILES += usb.marker +CLEANFILES += usb.marker + +usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usbserial_common.module +MODULE_FILES += usbserial_common.module$(EXEEXT) +usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +nodist_usbserial_common_module_SOURCES = ## platform nodist sources +usbserial_common_module_LDADD = +usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_common_module_SOURCES) +CLEANFILES += $(nodist_usbserial_common_module_SOURCES) +MOD_FILES += usbserial_common.mod +MARKER_FILES += usbserial_common.marker +CLEANFILES += usbserial_common.marker + +usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usbserial_pl2303.module +MODULE_FILES += usbserial_pl2303.module$(EXEEXT) +usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +usbserial_pl2303_module_LDADD = +usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_pl2303_module_SOURCES) +CLEANFILES += $(nodist_usbserial_pl2303_module_SOURCES) +MOD_FILES += usbserial_pl2303.mod +MARKER_FILES += usbserial_pl2303.marker +CLEANFILES += usbserial_pl2303.marker + +usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usbserial_ftdi.module +MODULE_FILES += usbserial_ftdi.module$(EXEEXT) +usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +usbserial_ftdi_module_LDADD = +usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_ftdi_module_SOURCES) +CLEANFILES += $(nodist_usbserial_ftdi_module_SOURCES) +MOD_FILES += usbserial_ftdi.mod +MARKER_FILES += usbserial_ftdi.marker +CLEANFILES += usbserial_ftdi.marker + +usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usbserial_usbdebug.module +MODULE_FILES += usbserial_usbdebug.module$(EXEEXT) +usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +usbserial_usbdebug_module_LDADD = +usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbserial_usbdebug_module_SOURCES) +CLEANFILES += $(nodist_usbserial_usbdebug_module_SOURCES) +MOD_FILES += usbserial_usbdebug.mod +MARKER_FILES += usbserial_usbdebug.marker +CLEANFILES += usbserial_usbdebug.marker + +usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += uhci.module +MODULE_FILES += uhci.module$(EXEEXT) +uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +nodist_uhci_module_SOURCES = ## platform nodist sources +uhci_module_LDADD = +uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_uhci_module_SOURCES) +CLEANFILES += $(nodist_uhci_module_SOURCES) +MOD_FILES += uhci.mod +MARKER_FILES += uhci.marker +CLEANFILES += uhci.marker + +uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += ohci.module +MODULE_FILES += ohci.module$(EXEEXT) +ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +nodist_ohci_module_SOURCES = ## platform nodist sources +ohci_module_LDADD = +ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ohci_module_SOURCES) +CLEANFILES += $(nodist_ohci_module_SOURCES) +MOD_FILES += ohci.mod +MARKER_FILES += ohci.marker +CLEANFILES += ohci.marker + +ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += ehci.module +MODULE_FILES += ehci.module$(EXEEXT) +ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +nodist_ehci_module_SOURCES = ## platform nodist sources +ehci_module_LDADD = +ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ehci_module_SOURCES) +CLEANFILES += $(nodist_ehci_module_SOURCES) +MOD_FILES += ehci.mod +MARKER_FILES += ehci.marker +CLEANFILES += ehci.marker + +ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += pci.module +MODULE_FILES += pci.module$(EXEEXT) +pci_module_SOURCES = bus/pci.c ## platform sources +nodist_pci_module_SOURCES = ## platform nodist sources +pci_module_LDADD = +pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pci_module_SOURCES) +CLEANFILES += $(nodist_pci_module_SOURCES) +MOD_FILES += pci.mod +MARKER_FILES += pci.marker +CLEANFILES += pci.marker + +pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += pci.module +MODULE_FILES += pci.module$(EXEEXT) +pci_module_SOURCES = bus/pci.c ## platform sources +nodist_pci_module_SOURCES = ## platform nodist sources +pci_module_LDADD = +pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pci_module_SOURCES) +CLEANFILES += $(nodist_pci_module_SOURCES) +MOD_FILES += pci.mod +MARKER_FILES += pci.marker +CLEANFILES += pci.marker + +pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += pci.module +MODULE_FILES += pci.module$(EXEEXT) +pci_module_SOURCES = bus/pci.c ## platform sources +nodist_pci_module_SOURCES = ## platform nodist sources +pci_module_LDADD = +pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pci_module_SOURCES) +CLEANFILES += $(nodist_pci_module_SOURCES) +MOD_FILES += pci.mod +MARKER_FILES += pci.marker +CLEANFILES += pci.marker + +pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += pci.module +MODULE_FILES += pci.module$(EXEEXT) +pci_module_SOURCES = bus/i386/ieee1275/pci.c bus/pci.c ## platform sources +nodist_pci_module_SOURCES = ## platform nodist sources +pci_module_LDADD = +pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pci_module_SOURCES) +CLEANFILES += $(nodist_pci_module_SOURCES) +MOD_FILES += pci.mod +MARKER_FILES += pci.marker +CLEANFILES += pci.marker + +pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += nativedisk.module +MODULE_FILES += nativedisk.module$(EXEEXT) +nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +nodist_nativedisk_module_SOURCES = ## platform nodist sources +nativedisk_module_LDADD = +nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nativedisk_module_SOURCES) +CLEANFILES += $(nodist_nativedisk_module_SOURCES) +MOD_FILES += nativedisk.mod +MARKER_FILES += nativedisk.marker +CLEANFILES += nativedisk.marker + +nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +if COND_GRUB_EMU_PCI +platform_PROGRAMS += emupci.module +MODULE_FILES += emupci.module$(EXEEXT) +emupci_module_SOURCES = bus/emu/pci.c commands/lspci.c ## platform sources +nodist_emupci_module_SOURCES = ## platform nodist sources +emupci_module_LDADD = +emupci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +emupci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +emupci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +emupci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +emupci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_emupci_module_SOURCES) +CLEANFILES += $(nodist_emupci_module_SOURCES) +MOD_FILES += emupci.mod +MARKER_FILES += emupci.marker +CLEANFILES += emupci.marker + +emupci.marker: $(emupci_module_SOURCES) $(nodist_emupci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif COND_GRUB_EMU_PCI +endif + +if COND_mips_arc +platform_PROGRAMS += lsdev.module +MODULE_FILES += lsdev.module$(EXEEXT) +lsdev_module_SOURCES = commands/arc/lsdev.c ## platform sources +nodist_lsdev_module_SOURCES = ## platform nodist sources +lsdev_module_LDADD = +lsdev_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsdev_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsdev_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsdev_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsdev_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsdev_module_SOURCES) +CLEANFILES += $(nodist_lsdev_module_SOURCES) +MOD_FILES += lsdev.mod +MARKER_FILES += lsdev.marker +CLEANFILES += lsdev.marker + +lsdev.marker: $(lsdev_module_SOURCES) $(nodist_lsdev_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsdev_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += lsxen.module +MODULE_FILES += lsxen.module$(EXEEXT) +lsxen_module_SOURCES = commands/xen/lsxen.c ## platform sources +nodist_lsxen_module_SOURCES = ## platform nodist sources +lsxen_module_LDADD = +lsxen_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsxen_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsxen_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsxen_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsxen_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsxen_module_SOURCES) +CLEANFILES += $(nodist_lsxen_module_SOURCES) +MOD_FILES += lsxen.mod +MARKER_FILES += lsxen.marker +CLEANFILES += lsxen.marker + +lsxen.marker: $(lsxen_module_SOURCES) $(nodist_lsxen_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += lsxen.module +MODULE_FILES += lsxen.module$(EXEEXT) +lsxen_module_SOURCES = commands/xen/lsxen.c ## platform sources +nodist_lsxen_module_SOURCES = ## platform nodist sources +lsxen_module_LDADD = +lsxen_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsxen_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsxen_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsxen_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsxen_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsxen_module_SOURCES) +CLEANFILES += $(nodist_lsxen_module_SOURCES) +MOD_FILES += lsxen.mod +MARKER_FILES += lsxen.marker +CLEANFILES += lsxen.marker + +lsxen.marker: $(lsxen_module_SOURCES) $(nodist_lsxen_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += cmostest.module +MODULE_FILES += cmostest.module$(EXEEXT) +cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +nodist_cmostest_module_SOURCES = ## platform nodist sources +cmostest_module_LDADD = +cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmostest_module_SOURCES) +CLEANFILES += $(nodist_cmostest_module_SOURCES) +MOD_FILES += cmostest.mod +MARKER_FILES += cmostest.marker +CLEANFILES += cmostest.marker + +cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += cmosdump.module +MODULE_FILES += cmosdump.module$(EXEEXT) +cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +nodist_cmosdump_module_SOURCES = ## platform nodist sources +cmosdump_module_LDADD = +cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmosdump_module_SOURCES) +CLEANFILES += $(nodist_cmosdump_module_SOURCES) +MOD_FILES += cmosdump.mod +MARKER_FILES += cmosdump.marker +CLEANFILES += cmosdump.marker + +cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += iorw.module +MODULE_FILES += iorw.module$(EXEEXT) +iorw_module_SOURCES = commands/iorw.c ## platform sources +nodist_iorw_module_SOURCES = ## platform nodist sources +iorw_module_LDADD = +iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iorw_module_SOURCES) +CLEANFILES += $(nodist_iorw_module_SOURCES) +MOD_FILES += iorw.mod +MARKER_FILES += iorw.marker +CLEANFILES += iorw.marker + +iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += iorw.module +MODULE_FILES += iorw.module$(EXEEXT) +iorw_module_SOURCES = commands/iorw.c ## platform sources +nodist_iorw_module_SOURCES = ## platform nodist sources +iorw_module_LDADD = +iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iorw_module_SOURCES) +CLEANFILES += $(nodist_iorw_module_SOURCES) +MOD_FILES += iorw.mod +MARKER_FILES += iorw.marker +CLEANFILES += iorw.marker + +iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += iorw.module +MODULE_FILES += iorw.module$(EXEEXT) +iorw_module_SOURCES = commands/iorw.c ## platform sources +nodist_iorw_module_SOURCES = ## platform nodist sources +iorw_module_LDADD = +iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iorw_module_SOURCES) +CLEANFILES += $(nodist_iorw_module_SOURCES) +MOD_FILES += iorw.mod +MARKER_FILES += iorw.marker +CLEANFILES += iorw.marker + +iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += iorw.module +MODULE_FILES += iorw.module$(EXEEXT) +iorw_module_SOURCES = commands/iorw.c ## platform sources +nodist_iorw_module_SOURCES = ## platform nodist sources +iorw_module_LDADD = +iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iorw_module_SOURCES) +CLEANFILES += $(nodist_iorw_module_SOURCES) +MOD_FILES += iorw.mod +MARKER_FILES += iorw.marker +CLEANFILES += iorw.marker + +iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += iorw.module +MODULE_FILES += iorw.module$(EXEEXT) +iorw_module_SOURCES = commands/iorw.c ## platform sources +nodist_iorw_module_SOURCES = ## platform nodist sources +iorw_module_LDADD = +iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iorw_module_SOURCES) +CLEANFILES += $(nodist_iorw_module_SOURCES) +MOD_FILES += iorw.mod +MARKER_FILES += iorw.marker +CLEANFILES += iorw.marker + +iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += iorw.module +MODULE_FILES += iorw.module$(EXEEXT) +iorw_module_SOURCES = commands/iorw.c ## platform sources +nodist_iorw_module_SOURCES = ## platform nodist sources +iorw_module_LDADD = +iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iorw_module_SOURCES) +CLEANFILES += $(nodist_iorw_module_SOURCES) +MOD_FILES += iorw.mod +MARKER_FILES += iorw.marker +CLEANFILES += iorw.marker + +iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += iorw.module +MODULE_FILES += iorw.module$(EXEEXT) +iorw_module_SOURCES = commands/iorw.c ## platform sources +nodist_iorw_module_SOURCES = ## platform nodist sources +iorw_module_LDADD = +iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iorw_module_SOURCES) +CLEANFILES += $(nodist_iorw_module_SOURCES) +MOD_FILES += iorw.mod +MARKER_FILES += iorw.marker +CLEANFILES += iorw.marker + +iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += cbtable.module +MODULE_FILES += cbtable.module$(EXEEXT) +cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +nodist_cbtable_module_SOURCES = ## platform nodist sources +cbtable_module_LDADD = +cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtable_module_SOURCES) +CLEANFILES += $(nodist_cbtable_module_SOURCES) +MOD_FILES += cbtable.mod +MARKER_FILES += cbtable.marker +CLEANFILES += cbtable.marker + +cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += cbtable.module +MODULE_FILES += cbtable.module$(EXEEXT) +cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +nodist_cbtable_module_SOURCES = ## platform nodist sources +cbtable_module_LDADD = +cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtable_module_SOURCES) +CLEANFILES += $(nodist_cbtable_module_SOURCES) +MOD_FILES += cbtable.mod +MARKER_FILES += cbtable.marker +CLEANFILES += cbtable.marker + +cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cbtable.module +MODULE_FILES += cbtable.module$(EXEEXT) +cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +nodist_cbtable_module_SOURCES = ## platform nodist sources +cbtable_module_LDADD = +cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtable_module_SOURCES) +CLEANFILES += $(nodist_cbtable_module_SOURCES) +MOD_FILES += cbtable.mod +MARKER_FILES += cbtable.marker +CLEANFILES += cbtable.marker + +cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cbtable.module +MODULE_FILES += cbtable.module$(EXEEXT) +cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +nodist_cbtable_module_SOURCES = ## platform nodist sources +cbtable_module_LDADD = +cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtable_module_SOURCES) +CLEANFILES += $(nodist_cbtable_module_SOURCES) +MOD_FILES += cbtable.mod +MARKER_FILES += cbtable.marker +CLEANFILES += cbtable.marker + +cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cbtable.module +MODULE_FILES += cbtable.module$(EXEEXT) +cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +nodist_cbtable_module_SOURCES = ## platform nodist sources +cbtable_module_LDADD = +cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtable_module_SOURCES) +CLEANFILES += $(nodist_cbtable_module_SOURCES) +MOD_FILES += cbtable.mod +MARKER_FILES += cbtable.marker +CLEANFILES += cbtable.marker + +cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += cbtable.module +MODULE_FILES += cbtable.module$(EXEEXT) +cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +nodist_cbtable_module_SOURCES = ## platform nodist sources +cbtable_module_LDADD = +cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtable_module_SOURCES) +CLEANFILES += $(nodist_cbtable_module_SOURCES) +MOD_FILES += cbtable.mod +MARKER_FILES += cbtable.marker +CLEANFILES += cbtable.marker + +cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += cbtime.module +MODULE_FILES += cbtime.module$(EXEEXT) +cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +nodist_cbtime_module_SOURCES = ## platform nodist sources +cbtime_module_LDADD = +cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtime_module_SOURCES) +CLEANFILES += $(nodist_cbtime_module_SOURCES) +MOD_FILES += cbtime.mod +MARKER_FILES += cbtime.marker +CLEANFILES += cbtime.marker + +cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += cbtime.module +MODULE_FILES += cbtime.module$(EXEEXT) +cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +nodist_cbtime_module_SOURCES = ## platform nodist sources +cbtime_module_LDADD = +cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtime_module_SOURCES) +CLEANFILES += $(nodist_cbtime_module_SOURCES) +MOD_FILES += cbtime.mod +MARKER_FILES += cbtime.marker +CLEANFILES += cbtime.marker + +cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cbtime.module +MODULE_FILES += cbtime.module$(EXEEXT) +cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +nodist_cbtime_module_SOURCES = ## platform nodist sources +cbtime_module_LDADD = +cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtime_module_SOURCES) +CLEANFILES += $(nodist_cbtime_module_SOURCES) +MOD_FILES += cbtime.mod +MARKER_FILES += cbtime.marker +CLEANFILES += cbtime.marker + +cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += cbtime.module +MODULE_FILES += cbtime.module$(EXEEXT) +cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +nodist_cbtime_module_SOURCES = ## platform nodist sources +cbtime_module_LDADD = +cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtime_module_SOURCES) +CLEANFILES += $(nodist_cbtime_module_SOURCES) +MOD_FILES += cbtime.mod +MARKER_FILES += cbtime.marker +CLEANFILES += cbtime.marker + +cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cbtime.module +MODULE_FILES += cbtime.module$(EXEEXT) +cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +nodist_cbtime_module_SOURCES = ## platform nodist sources +cbtime_module_LDADD = +cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtime_module_SOURCES) +CLEANFILES += $(nodist_cbtime_module_SOURCES) +MOD_FILES += cbtime.mod +MARKER_FILES += cbtime.marker +CLEANFILES += cbtime.marker + +cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cbtime.module +MODULE_FILES += cbtime.module$(EXEEXT) +cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +nodist_cbtime_module_SOURCES = ## platform nodist sources +cbtime_module_LDADD = +cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtime_module_SOURCES) +CLEANFILES += $(nodist_cbtime_module_SOURCES) +MOD_FILES += cbtime.mod +MARKER_FILES += cbtime.marker +CLEANFILES += cbtime.marker + +cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += cbtime.module +MODULE_FILES += cbtime.module$(EXEEXT) +cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +nodist_cbtime_module_SOURCES = ## platform nodist sources +cbtime_module_LDADD = +cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbtime_module_SOURCES) +CLEANFILES += $(nodist_cbtime_module_SOURCES) +MOD_FILES += cbtime.mod +MARKER_FILES += cbtime.marker +CLEANFILES += cbtime.marker + +cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += cbls.module +MODULE_FILES += cbls.module$(EXEEXT) +cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +nodist_cbls_module_SOURCES = ## platform nodist sources +cbls_module_LDADD = +cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbls_module_SOURCES) +CLEANFILES += $(nodist_cbls_module_SOURCES) +MOD_FILES += cbls.mod +MARKER_FILES += cbls.marker +CLEANFILES += cbls.marker + +cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += cbls.module +MODULE_FILES += cbls.module$(EXEEXT) +cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +nodist_cbls_module_SOURCES = ## platform nodist sources +cbls_module_LDADD = +cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbls_module_SOURCES) +CLEANFILES += $(nodist_cbls_module_SOURCES) +MOD_FILES += cbls.mod +MARKER_FILES += cbls.marker +CLEANFILES += cbls.marker + +cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cbls.module +MODULE_FILES += cbls.module$(EXEEXT) +cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +nodist_cbls_module_SOURCES = ## platform nodist sources +cbls_module_LDADD = +cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbls_module_SOURCES) +CLEANFILES += $(nodist_cbls_module_SOURCES) +MOD_FILES += cbls.mod +MARKER_FILES += cbls.marker +CLEANFILES += cbls.marker + +cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += cbls.module +MODULE_FILES += cbls.module$(EXEEXT) +cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +nodist_cbls_module_SOURCES = ## platform nodist sources +cbls_module_LDADD = +cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbls_module_SOURCES) +CLEANFILES += $(nodist_cbls_module_SOURCES) +MOD_FILES += cbls.mod +MARKER_FILES += cbls.marker +CLEANFILES += cbls.marker + +cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cbls.module +MODULE_FILES += cbls.module$(EXEEXT) +cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +nodist_cbls_module_SOURCES = ## platform nodist sources +cbls_module_LDADD = +cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbls_module_SOURCES) +CLEANFILES += $(nodist_cbls_module_SOURCES) +MOD_FILES += cbls.mod +MARKER_FILES += cbls.marker +CLEANFILES += cbls.marker + +cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cbls.module +MODULE_FILES += cbls.module$(EXEEXT) +cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +nodist_cbls_module_SOURCES = ## platform nodist sources +cbls_module_LDADD = +cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbls_module_SOURCES) +CLEANFILES += $(nodist_cbls_module_SOURCES) +MOD_FILES += cbls.mod +MARKER_FILES += cbls.marker +CLEANFILES += cbls.marker + +cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += cbls.module +MODULE_FILES += cbls.module$(EXEEXT) +cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +nodist_cbls_module_SOURCES = ## platform nodist sources +cbls_module_LDADD = +cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbls_module_SOURCES) +CLEANFILES += $(nodist_cbls_module_SOURCES) +MOD_FILES += cbls.mod +MARKER_FILES += cbls.marker +CLEANFILES += cbls.marker + +cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += cbmemc.module +MODULE_FILES += cbmemc.module$(EXEEXT) +cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +nodist_cbmemc_module_SOURCES = ## platform nodist sources +cbmemc_module_LDADD = +cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbmemc_module_SOURCES) +CLEANFILES += $(nodist_cbmemc_module_SOURCES) +MOD_FILES += cbmemc.mod +MARKER_FILES += cbmemc.marker +CLEANFILES += cbmemc.marker + +cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += cbmemc.module +MODULE_FILES += cbmemc.module$(EXEEXT) +cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +nodist_cbmemc_module_SOURCES = ## platform nodist sources +cbmemc_module_LDADD = +cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbmemc_module_SOURCES) +CLEANFILES += $(nodist_cbmemc_module_SOURCES) +MOD_FILES += cbmemc.mod +MARKER_FILES += cbmemc.marker +CLEANFILES += cbmemc.marker + +cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cbmemc.module +MODULE_FILES += cbmemc.module$(EXEEXT) +cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +nodist_cbmemc_module_SOURCES = ## platform nodist sources +cbmemc_module_LDADD = +cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbmemc_module_SOURCES) +CLEANFILES += $(nodist_cbmemc_module_SOURCES) +MOD_FILES += cbmemc.mod +MARKER_FILES += cbmemc.marker +CLEANFILES += cbmemc.marker + +cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += cbmemc.module +MODULE_FILES += cbmemc.module$(EXEEXT) +cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +nodist_cbmemc_module_SOURCES = ## platform nodist sources +cbmemc_module_LDADD = +cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbmemc_module_SOURCES) +CLEANFILES += $(nodist_cbmemc_module_SOURCES) +MOD_FILES += cbmemc.mod +MARKER_FILES += cbmemc.marker +CLEANFILES += cbmemc.marker + +cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cbmemc.module +MODULE_FILES += cbmemc.module$(EXEEXT) +cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +nodist_cbmemc_module_SOURCES = ## platform nodist sources +cbmemc_module_LDADD = +cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbmemc_module_SOURCES) +CLEANFILES += $(nodist_cbmemc_module_SOURCES) +MOD_FILES += cbmemc.mod +MARKER_FILES += cbmemc.marker +CLEANFILES += cbmemc.marker + +cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cbmemc.module +MODULE_FILES += cbmemc.module$(EXEEXT) +cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +nodist_cbmemc_module_SOURCES = ## platform nodist sources +cbmemc_module_LDADD = +cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbmemc_module_SOURCES) +CLEANFILES += $(nodist_cbmemc_module_SOURCES) +MOD_FILES += cbmemc.mod +MARKER_FILES += cbmemc.marker +CLEANFILES += cbmemc.marker + +cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += cbmemc.module +MODULE_FILES += cbmemc.module$(EXEEXT) +cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +nodist_cbmemc_module_SOURCES = ## platform nodist sources +cbmemc_module_LDADD = +cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbmemc_module_SOURCES) +CLEANFILES += $(nodist_cbmemc_module_SOURCES) +MOD_FILES += cbmemc.mod +MARKER_FILES += cbmemc.marker +CLEANFILES += cbmemc.marker + +cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += regexp.module +MODULE_FILES += regexp.module$(EXEEXT) +regexp_module_SOURCES = commands/regexp.c commands/wildcard.c gnulib/regex.c ## platform sources +nodist_regexp_module_SOURCES = ## platform nodist sources +regexp_module_LDADD = +regexp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) $(CFLAGS_GNULIB) +regexp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +regexp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB) +regexp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +regexp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_regexp_module_SOURCES) +CLEANFILES += $(nodist_regexp_module_SOURCES) +MOD_FILES += regexp.mod +MARKER_FILES += regexp.marker +CLEANFILES += regexp.marker + +regexp.marker: $(regexp_module_SOURCES) $(nodist_regexp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = kern/acpi.c kern/i386/pc/acpi.c commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += acpi.module +MODULE_FILES += acpi.module$(EXEEXT) +acpi_module_SOURCES = commands/acpi.c ## platform sources +nodist_acpi_module_SOURCES = ## platform nodist sources +acpi_module_LDADD = +acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_acpi_module_SOURCES) +CLEANFILES += $(nodist_acpi_module_SOURCES) +MOD_FILES += acpi.mod +MARKER_FILES += acpi.marker +CLEANFILES += acpi.marker + +acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += lsacpi.module +MODULE_FILES += lsacpi.module$(EXEEXT) +lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +nodist_lsacpi_module_SOURCES = ## platform nodist sources +lsacpi_module_LDADD = +lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsacpi_module_SOURCES) +CLEANFILES += $(nodist_lsacpi_module_SOURCES) +MOD_FILES += lsacpi.mod +MARKER_FILES += lsacpi.marker +CLEANFILES += lsacpi.marker + +lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += lsefisystab.module +MODULE_FILES += lsefisystab.module$(EXEEXT) +lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +nodist_lsefisystab_module_SOURCES = ## platform nodist sources +lsefisystab_module_LDADD = +lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefisystab_module_SOURCES) +CLEANFILES += $(nodist_lsefisystab_module_SOURCES) +MOD_FILES += lsefisystab.mod +MARKER_FILES += lsefisystab.marker +CLEANFILES += lsefisystab.marker + +lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += lsefisystab.module +MODULE_FILES += lsefisystab.module$(EXEEXT) +lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +nodist_lsefisystab_module_SOURCES = ## platform nodist sources +lsefisystab_module_LDADD = +lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefisystab_module_SOURCES) +CLEANFILES += $(nodist_lsefisystab_module_SOURCES) +MOD_FILES += lsefisystab.mod +MARKER_FILES += lsefisystab.marker +CLEANFILES += lsefisystab.marker + +lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += lsefisystab.module +MODULE_FILES += lsefisystab.module$(EXEEXT) +lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +nodist_lsefisystab_module_SOURCES = ## platform nodist sources +lsefisystab_module_LDADD = +lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefisystab_module_SOURCES) +CLEANFILES += $(nodist_lsefisystab_module_SOURCES) +MOD_FILES += lsefisystab.mod +MARKER_FILES += lsefisystab.marker +CLEANFILES += lsefisystab.marker + +lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += lsefisystab.module +MODULE_FILES += lsefisystab.module$(EXEEXT) +lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +nodist_lsefisystab_module_SOURCES = ## platform nodist sources +lsefisystab_module_LDADD = +lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefisystab_module_SOURCES) +CLEANFILES += $(nodist_lsefisystab_module_SOURCES) +MOD_FILES += lsefisystab.mod +MARKER_FILES += lsefisystab.marker +CLEANFILES += lsefisystab.marker + +lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += lsefisystab.module +MODULE_FILES += lsefisystab.module$(EXEEXT) +lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +nodist_lsefisystab_module_SOURCES = ## platform nodist sources +lsefisystab_module_LDADD = +lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefisystab_module_SOURCES) +CLEANFILES += $(nodist_lsefisystab_module_SOURCES) +MOD_FILES += lsefisystab.mod +MARKER_FILES += lsefisystab.marker +CLEANFILES += lsefisystab.marker + +lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += lssal.module +MODULE_FILES += lssal.module$(EXEEXT) +lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +nodist_lssal_module_SOURCES = ## platform nodist sources +lssal_module_LDADD = +lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lssal_module_SOURCES) +CLEANFILES += $(nodist_lssal_module_SOURCES) +MOD_FILES += lssal.mod +MARKER_FILES += lssal.marker +CLEANFILES += lssal.marker + +lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += lssal.module +MODULE_FILES += lssal.module$(EXEEXT) +lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +nodist_lssal_module_SOURCES = ## platform nodist sources +lssal_module_LDADD = +lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lssal_module_SOURCES) +CLEANFILES += $(nodist_lssal_module_SOURCES) +MOD_FILES += lssal.mod +MARKER_FILES += lssal.marker +CLEANFILES += lssal.marker + +lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += lssal.module +MODULE_FILES += lssal.module$(EXEEXT) +lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +nodist_lssal_module_SOURCES = ## platform nodist sources +lssal_module_LDADD = +lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lssal_module_SOURCES) +CLEANFILES += $(nodist_lssal_module_SOURCES) +MOD_FILES += lssal.mod +MARKER_FILES += lssal.marker +CLEANFILES += lssal.marker + +lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += lssal.module +MODULE_FILES += lssal.module$(EXEEXT) +lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +nodist_lssal_module_SOURCES = ## platform nodist sources +lssal_module_LDADD = +lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lssal_module_SOURCES) +CLEANFILES += $(nodist_lssal_module_SOURCES) +MOD_FILES += lssal.mod +MARKER_FILES += lssal.marker +CLEANFILES += lssal.marker + +lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += lssal.module +MODULE_FILES += lssal.module$(EXEEXT) +lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +nodist_lssal_module_SOURCES = ## platform nodist sources +lssal_module_LDADD = +lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lssal_module_SOURCES) +CLEANFILES += $(nodist_lssal_module_SOURCES) +MOD_FILES += lssal.mod +MARKER_FILES += lssal.marker +CLEANFILES += lssal.marker + +lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += lsefimmap.module +MODULE_FILES += lsefimmap.module$(EXEEXT) +lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +nodist_lsefimmap_module_SOURCES = ## platform nodist sources +lsefimmap_module_LDADD = +lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefimmap_module_SOURCES) +CLEANFILES += $(nodist_lsefimmap_module_SOURCES) +MOD_FILES += lsefimmap.mod +MARKER_FILES += lsefimmap.marker +CLEANFILES += lsefimmap.marker + +lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += lsefimmap.module +MODULE_FILES += lsefimmap.module$(EXEEXT) +lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +nodist_lsefimmap_module_SOURCES = ## platform nodist sources +lsefimmap_module_LDADD = +lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefimmap_module_SOURCES) +CLEANFILES += $(nodist_lsefimmap_module_SOURCES) +MOD_FILES += lsefimmap.mod +MARKER_FILES += lsefimmap.marker +CLEANFILES += lsefimmap.marker + +lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += lsefimmap.module +MODULE_FILES += lsefimmap.module$(EXEEXT) +lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +nodist_lsefimmap_module_SOURCES = ## platform nodist sources +lsefimmap_module_LDADD = +lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefimmap_module_SOURCES) +CLEANFILES += $(nodist_lsefimmap_module_SOURCES) +MOD_FILES += lsefimmap.mod +MARKER_FILES += lsefimmap.marker +CLEANFILES += lsefimmap.marker + +lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += lsefimmap.module +MODULE_FILES += lsefimmap.module$(EXEEXT) +lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +nodist_lsefimmap_module_SOURCES = ## platform nodist sources +lsefimmap_module_LDADD = +lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefimmap_module_SOURCES) +CLEANFILES += $(nodist_lsefimmap_module_SOURCES) +MOD_FILES += lsefimmap.mod +MARKER_FILES += lsefimmap.marker +CLEANFILES += lsefimmap.marker + +lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += lsefimmap.module +MODULE_FILES += lsefimmap.module$(EXEEXT) +lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +nodist_lsefimmap_module_SOURCES = ## platform nodist sources +lsefimmap_module_LDADD = +lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefimmap_module_SOURCES) +CLEANFILES += $(nodist_lsefimmap_module_SOURCES) +MOD_FILES += lsefimmap.mod +MARKER_FILES += lsefimmap.marker +CLEANFILES += lsefimmap.marker + +lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += lsefi.module +MODULE_FILES += lsefi.module$(EXEEXT) +lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +nodist_lsefi_module_SOURCES = ## platform nodist sources +lsefi_module_LDADD = +lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefi_module_SOURCES) +CLEANFILES += $(nodist_lsefi_module_SOURCES) +MOD_FILES += lsefi.mod +MARKER_FILES += lsefi.marker +CLEANFILES += lsefi.marker + +lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += lsefi.module +MODULE_FILES += lsefi.module$(EXEEXT) +lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +nodist_lsefi_module_SOURCES = ## platform nodist sources +lsefi_module_LDADD = +lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefi_module_SOURCES) +CLEANFILES += $(nodist_lsefi_module_SOURCES) +MOD_FILES += lsefi.mod +MARKER_FILES += lsefi.marker +CLEANFILES += lsefi.marker + +lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += lsefi.module +MODULE_FILES += lsefi.module$(EXEEXT) +lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +nodist_lsefi_module_SOURCES = ## platform nodist sources +lsefi_module_LDADD = +lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefi_module_SOURCES) +CLEANFILES += $(nodist_lsefi_module_SOURCES) +MOD_FILES += lsefi.mod +MARKER_FILES += lsefi.marker +CLEANFILES += lsefi.marker + +lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += lsefi.module +MODULE_FILES += lsefi.module$(EXEEXT) +lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +nodist_lsefi_module_SOURCES = ## platform nodist sources +lsefi_module_LDADD = +lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefi_module_SOURCES) +CLEANFILES += $(nodist_lsefi_module_SOURCES) +MOD_FILES += lsefi.mod +MARKER_FILES += lsefi.marker +CLEANFILES += lsefi.marker + +lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += lsefi.module +MODULE_FILES += lsefi.module$(EXEEXT) +lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +nodist_lsefi_module_SOURCES = ## platform nodist sources +lsefi_module_LDADD = +lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsefi_module_SOURCES) +CLEANFILES += $(nodist_lsefi_module_SOURCES) +MOD_FILES += lsefi.mod +MARKER_FILES += lsefi.marker +CLEANFILES += lsefi.marker + +lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += efifwsetup.module +MODULE_FILES += efifwsetup.module$(EXEEXT) +efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +nodist_efifwsetup_module_SOURCES = ## platform nodist sources +efifwsetup_module_LDADD = +efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efifwsetup_module_SOURCES) +CLEANFILES += $(nodist_efifwsetup_module_SOURCES) +MOD_FILES += efifwsetup.mod +MARKER_FILES += efifwsetup.marker +CLEANFILES += efifwsetup.marker + +efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += efifwsetup.module +MODULE_FILES += efifwsetup.module$(EXEEXT) +efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +nodist_efifwsetup_module_SOURCES = ## platform nodist sources +efifwsetup_module_LDADD = +efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efifwsetup_module_SOURCES) +CLEANFILES += $(nodist_efifwsetup_module_SOURCES) +MOD_FILES += efifwsetup.mod +MARKER_FILES += efifwsetup.marker +CLEANFILES += efifwsetup.marker + +efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += efifwsetup.module +MODULE_FILES += efifwsetup.module$(EXEEXT) +efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +nodist_efifwsetup_module_SOURCES = ## platform nodist sources +efifwsetup_module_LDADD = +efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efifwsetup_module_SOURCES) +CLEANFILES += $(nodist_efifwsetup_module_SOURCES) +MOD_FILES += efifwsetup.mod +MARKER_FILES += efifwsetup.marker +CLEANFILES += efifwsetup.marker + +efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += efifwsetup.module +MODULE_FILES += efifwsetup.module$(EXEEXT) +efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +nodist_efifwsetup_module_SOURCES = ## platform nodist sources +efifwsetup_module_LDADD = +efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efifwsetup_module_SOURCES) +CLEANFILES += $(nodist_efifwsetup_module_SOURCES) +MOD_FILES += efifwsetup.mod +MARKER_FILES += efifwsetup.marker +CLEANFILES += efifwsetup.marker + +efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += efifwsetup.module +MODULE_FILES += efifwsetup.module$(EXEEXT) +efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +nodist_efifwsetup_module_SOURCES = ## platform nodist sources +efifwsetup_module_LDADD = +efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efifwsetup_module_SOURCES) +CLEANFILES += $(nodist_efifwsetup_module_SOURCES) +MOD_FILES += efifwsetup.mod +MARKER_FILES += efifwsetup.marker +CLEANFILES += efifwsetup.marker + +efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += blocklist.module +MODULE_FILES += blocklist.module$(EXEEXT) +blocklist_module_SOURCES = commands/blocklist.c ## platform sources +nodist_blocklist_module_SOURCES = ## platform nodist sources +blocklist_module_LDADD = +blocklist_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +blocklist_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +blocklist_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +blocklist_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +blocklist_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_blocklist_module_SOURCES) +CLEANFILES += $(nodist_blocklist_module_SOURCES) +MOD_FILES += blocklist.mod +MARKER_FILES += blocklist.marker +CLEANFILES += blocklist.marker + +blocklist.marker: $(blocklist_module_SOURCES) $(nodist_blocklist_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blocklist_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_emu +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = lib/i386/pc/biosnum.c commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += boot.module +MODULE_FILES += boot.module$(EXEEXT) +boot_module_SOURCES = commands/boot.c ## platform sources +nodist_boot_module_SOURCES = ## platform nodist sources +boot_module_LDADD = +boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_module_SOURCES) +CLEANFILES += $(nodist_boot_module_SOURCES) +MOD_FILES += boot.mod +MARKER_FILES += boot.marker +CLEANFILES += boot.marker + +boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += cat.module +MODULE_FILES += cat.module$(EXEEXT) +cat_module_SOURCES = commands/cat.c ## platform sources +nodist_cat_module_SOURCES = ## platform nodist sources +cat_module_LDADD = +cat_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cat_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cat_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cat_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cat_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cat_module_SOURCES) +CLEANFILES += $(nodist_cat_module_SOURCES) +MOD_FILES += cat.mod +MARKER_FILES += cat.marker +CLEANFILES += cat.marker + +cat.marker: $(cat_module_SOURCES) $(nodist_cat_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cat_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += cmp.module +MODULE_FILES += cmp.module$(EXEEXT) +cmp_module_SOURCES = commands/cmp.c ## platform sources +nodist_cmp_module_SOURCES = ## platform nodist sources +cmp_module_LDADD = +cmp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmp_module_SOURCES) +CLEANFILES += $(nodist_cmp_module_SOURCES) +MOD_FILES += cmp.mod +MARKER_FILES += cmp.marker +CLEANFILES += cmp.marker + +cmp.marker: $(cmp_module_SOURCES) $(nodist_cmp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += configfile.module +MODULE_FILES += configfile.module$(EXEEXT) +configfile_module_SOURCES = commands/configfile.c ## platform sources +nodist_configfile_module_SOURCES = ## platform nodist sources +configfile_module_LDADD = +configfile_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +configfile_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +configfile_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +configfile_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +configfile_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_configfile_module_SOURCES) +CLEANFILES += $(nodist_configfile_module_SOURCES) +MOD_FILES += configfile.mod +MARKER_FILES += configfile.marker +CLEANFILES += configfile.marker + +configfile.marker: $(configfile_module_SOURCES) $(nodist_configfile_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(configfile_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += cpuid.module +MODULE_FILES += cpuid.module$(EXEEXT) +cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +nodist_cpuid_module_SOURCES = ## platform nodist sources +cpuid_module_LDADD = +cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpuid_module_SOURCES) +CLEANFILES += $(nodist_cpuid_module_SOURCES) +MOD_FILES += cpuid.mod +MARKER_FILES += cpuid.marker +CLEANFILES += cpuid.marker + +cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += date.module +MODULE_FILES += date.module$(EXEEXT) +date_module_SOURCES = commands/date.c ## platform sources +nodist_date_module_SOURCES = ## platform nodist sources +date_module_LDADD = +date_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +date_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +date_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +date_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +date_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_date_module_SOURCES) +CLEANFILES += $(nodist_date_module_SOURCES) +MOD_FILES += date.mod +MARKER_FILES += date.marker +CLEANFILES += date.marker + +date.marker: $(date_module_SOURCES) $(nodist_date_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += drivemap.module +MODULE_FILES += drivemap.module$(EXEEXT) +drivemap_module_SOURCES = commands/i386/pc/drivemap.c commands/i386/pc/drivemap_int13h.S ## platform sources +nodist_drivemap_module_SOURCES = ## platform nodist sources +drivemap_module_LDADD = +drivemap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +drivemap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +drivemap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +drivemap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +drivemap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_drivemap_module_SOURCES) +CLEANFILES += $(nodist_drivemap_module_SOURCES) +MOD_FILES += drivemap.mod +MARKER_FILES += drivemap.marker +CLEANFILES += drivemap.marker + +drivemap.marker: $(drivemap_module_SOURCES) $(nodist_drivemap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += echo.module +MODULE_FILES += echo.module$(EXEEXT) +echo_module_SOURCES = commands/echo.c ## platform sources +nodist_echo_module_SOURCES = ## platform nodist sources +echo_module_LDADD = +echo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +echo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +echo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +echo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +echo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_echo_module_SOURCES) +CLEANFILES += $(nodist_echo_module_SOURCES) +MOD_FILES += echo.mod +MARKER_FILES += echo.marker +CLEANFILES += echo.marker + +echo.marker: $(echo_module_SOURCES) $(nodist_echo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(echo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += eval.module +MODULE_FILES += eval.module$(EXEEXT) +eval_module_SOURCES = commands/eval.c ## platform sources +nodist_eval_module_SOURCES = ## platform nodist sources +eval_module_LDADD = +eval_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +eval_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +eval_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +eval_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +eval_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_eval_module_SOURCES) +CLEANFILES += $(nodist_eval_module_SOURCES) +MOD_FILES += eval.mod +MARKER_FILES += eval.marker +CLEANFILES += eval.marker + +eval.marker: $(eval_module_SOURCES) $(nodist_eval_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eval_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += extcmd.module +MODULE_FILES += extcmd.module$(EXEEXT) +extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +nodist_extcmd_module_SOURCES = ## platform nodist sources +extcmd_module_LDADD = +extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_extcmd_module_SOURCES) +CLEANFILES += $(nodist_extcmd_module_SOURCES) +MOD_FILES += extcmd.mod +MARKER_FILES += extcmd.marker +CLEANFILES += extcmd.marker + +extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += fixvideo.module +MODULE_FILES += fixvideo.module$(EXEEXT) +fixvideo_module_SOURCES = commands/efi/fixvideo.c ## platform sources +nodist_fixvideo_module_SOURCES = ## platform nodist sources +fixvideo_module_LDADD = +fixvideo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fixvideo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fixvideo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fixvideo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fixvideo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fixvideo_module_SOURCES) +CLEANFILES += $(nodist_fixvideo_module_SOURCES) +MOD_FILES += fixvideo.mod +MARKER_FILES += fixvideo.marker +CLEANFILES += fixvideo.marker + +fixvideo.marker: $(fixvideo_module_SOURCES) $(nodist_fixvideo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += fixvideo.module +MODULE_FILES += fixvideo.module$(EXEEXT) +fixvideo_module_SOURCES = commands/efi/fixvideo.c ## platform sources +nodist_fixvideo_module_SOURCES = ## platform nodist sources +fixvideo_module_LDADD = +fixvideo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fixvideo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fixvideo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fixvideo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fixvideo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fixvideo_module_SOURCES) +CLEANFILES += $(nodist_fixvideo_module_SOURCES) +MOD_FILES += fixvideo.mod +MARKER_FILES += fixvideo.marker +CLEANFILES += fixvideo.marker + +fixvideo.marker: $(fixvideo_module_SOURCES) $(nodist_fixvideo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += gptsync.module +MODULE_FILES += gptsync.module$(EXEEXT) +gptsync_module_SOURCES = commands/gptsync.c ## platform sources +nodist_gptsync_module_SOURCES = ## platform nodist sources +gptsync_module_LDADD = +gptsync_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gptsync_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gptsync_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gptsync_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gptsync_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gptsync_module_SOURCES) +CLEANFILES += $(nodist_gptsync_module_SOURCES) +MOD_FILES += gptsync.mod +MARKER_FILES += gptsync.marker +CLEANFILES += gptsync.marker + +gptsync.marker: $(gptsync_module_SOURCES) $(nodist_gptsync_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gptsync_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_emu +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/emu/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/i386/pc/halt.c commands/acpihalt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/acpihalt.c lib/efi/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/i386/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/acpihalt.c lib/i386/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/acpihalt.c lib/i386/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/ieee1275/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/acpihalt.c lib/efi/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/xen/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/xen/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/ieee1275/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/ieee1275/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/efi/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/uboot/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/efi/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += halt.module +MODULE_FILES += halt.module$(EXEEXT) +halt_module_SOURCES = lib/efi/halt.c commands/halt.c ## platform sources +nodist_halt_module_SOURCES = ## platform nodist sources +halt_module_LDADD = +halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_halt_module_SOURCES) +CLEANFILES += $(nodist_halt_module_SOURCES) +MOD_FILES += halt.mod +MARKER_FILES += halt.marker +CLEANFILES += halt.marker + +halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/xen/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/xen/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/mips/loongson/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/ieee1275/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/ieee1275/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/mips/arc/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/mips/qemu_mips/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/uboot/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += reboot.module +MODULE_FILES += reboot.module$(EXEEXT) +reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +nodist_reboot_module_SOURCES = ## platform nodist sources +reboot_module_LDADD = +reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reboot_module_SOURCES) +CLEANFILES += $(nodist_reboot_module_SOURCES) +MOD_FILES += reboot.mod +MARKER_FILES += reboot.marker +CLEANFILES += reboot.marker + +reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += hashsum.module +MODULE_FILES += hashsum.module$(EXEEXT) +hashsum_module_SOURCES = commands/hashsum.c ## platform sources +nodist_hashsum_module_SOURCES = ## platform nodist sources +hashsum_module_LDADD = +hashsum_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hashsum_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hashsum_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hashsum_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hashsum_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hashsum_module_SOURCES) +CLEANFILES += $(nodist_hashsum_module_SOURCES) +MOD_FILES += hashsum.mod +MARKER_FILES += hashsum.marker +CLEANFILES += hashsum.marker + +hashsum.marker: $(hashsum_module_SOURCES) $(nodist_hashsum_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashsum_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += verify.module +MODULE_FILES += verify.module$(EXEEXT) +verify_module_SOURCES = commands/verify.c ## platform sources +nodist_verify_module_SOURCES = ## platform nodist sources +verify_module_LDADD = +verify_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) +verify_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +verify_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap +verify_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +verify_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_verify_module_SOURCES) +CLEANFILES += $(nodist_verify_module_SOURCES) +MOD_FILES += verify.mod +MARKER_FILES += verify.marker +CLEANFILES += verify.marker + +verify.marker: $(verify_module_SOURCES) $(nodist_verify_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verify_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += hdparm.module +MODULE_FILES += hdparm.module$(EXEEXT) +hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +nodist_hdparm_module_SOURCES = ## platform nodist sources +hdparm_module_LDADD = +hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hdparm_module_SOURCES) +CLEANFILES += $(nodist_hdparm_module_SOURCES) +MOD_FILES += hdparm.mod +MARKER_FILES += hdparm.marker +CLEANFILES += hdparm.marker + +hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += help.module +MODULE_FILES += help.module$(EXEEXT) +help_module_SOURCES = commands/help.c ## platform sources +nodist_help_module_SOURCES = ## platform nodist sources +help_module_LDADD = +help_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +help_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +help_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +help_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +help_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_help_module_SOURCES) +CLEANFILES += $(nodist_help_module_SOURCES) +MOD_FILES += help.mod +MARKER_FILES += help.marker +CLEANFILES += help.marker + +help.marker: $(help_module_SOURCES) $(nodist_help_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(help_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += hexdump.module +MODULE_FILES += hexdump.module$(EXEEXT) +hexdump_module_SOURCES = commands/hexdump.c lib/hexdump.c ## platform sources +nodist_hexdump_module_SOURCES = ## platform nodist sources +hexdump_module_LDADD = +hexdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hexdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hexdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hexdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hexdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hexdump_module_SOURCES) +CLEANFILES += $(nodist_hexdump_module_SOURCES) +MOD_FILES += hexdump.mod +MARKER_FILES += hexdump.marker +CLEANFILES += hexdump.marker + +hexdump.marker: $(hexdump_module_SOURCES) $(nodist_hexdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += keystatus.module +MODULE_FILES += keystatus.module$(EXEEXT) +keystatus_module_SOURCES = commands/keystatus.c ## platform sources +nodist_keystatus_module_SOURCES = ## platform nodist sources +keystatus_module_LDADD = +keystatus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keystatus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keystatus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keystatus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keystatus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keystatus_module_SOURCES) +CLEANFILES += $(nodist_keystatus_module_SOURCES) +MOD_FILES += keystatus.mod +MARKER_FILES += keystatus.marker +CLEANFILES += keystatus.marker + +keystatus.marker: $(keystatus_module_SOURCES) $(nodist_keystatus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keystatus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_efi +platform_PROGRAMS += loadbios.module +MODULE_FILES += loadbios.module$(EXEEXT) +loadbios_module_SOURCES = commands/efi/loadbios.c ## platform sources +nodist_loadbios_module_SOURCES = ## platform nodist sources +loadbios_module_LDADD = +loadbios_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +loadbios_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +loadbios_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +loadbios_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +loadbios_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_loadbios_module_SOURCES) +CLEANFILES += $(nodist_loadbios_module_SOURCES) +MOD_FILES += loadbios.mod +MARKER_FILES += loadbios.marker +CLEANFILES += loadbios.marker + +loadbios.marker: $(loadbios_module_SOURCES) $(nodist_loadbios_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += loadbios.module +MODULE_FILES += loadbios.module$(EXEEXT) +loadbios_module_SOURCES = commands/efi/loadbios.c ## platform sources +nodist_loadbios_module_SOURCES = ## platform nodist sources +loadbios_module_LDADD = +loadbios_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +loadbios_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +loadbios_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +loadbios_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +loadbios_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_loadbios_module_SOURCES) +CLEANFILES += $(nodist_loadbios_module_SOURCES) +MOD_FILES += loadbios.mod +MARKER_FILES += loadbios.marker +CLEANFILES += loadbios.marker + +loadbios.marker: $(loadbios_module_SOURCES) $(nodist_loadbios_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += loadenv.module +MODULE_FILES += loadenv.module$(EXEEXT) +loadenv_module_SOURCES = commands/loadenv.c lib/envblk.c ## platform sources +nodist_loadenv_module_SOURCES = ## platform nodist sources +loadenv_module_LDADD = +loadenv_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +loadenv_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +loadenv_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +loadenv_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +loadenv_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_loadenv_module_SOURCES) +CLEANFILES += $(nodist_loadenv_module_SOURCES) +MOD_FILES += loadenv.mod +MARKER_FILES += loadenv.marker +CLEANFILES += loadenv.marker + +loadenv.marker: $(loadenv_module_SOURCES) $(nodist_loadenv_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ls.module +MODULE_FILES += ls.module$(EXEEXT) +ls_module_SOURCES = commands/ls.c ## platform sources +nodist_ls_module_SOURCES = ## platform nodist sources +ls_module_LDADD = +ls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ls_module_SOURCES) +CLEANFILES += $(nodist_ls_module_SOURCES) +MOD_FILES += ls.mod +MARKER_FILES += ls.marker +CLEANFILES += ls.marker + +ls.marker: $(ls_module_SOURCES) $(nodist_ls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += lsmmap.module +MODULE_FILES += lsmmap.module$(EXEEXT) +lsmmap_module_SOURCES = commands/lsmmap.c ## platform sources +nodist_lsmmap_module_SOURCES = ## platform nodist sources +lsmmap_module_LDADD = +lsmmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsmmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsmmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsmmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsmmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsmmap_module_SOURCES) +CLEANFILES += $(nodist_lsmmap_module_SOURCES) +MOD_FILES += lsmmap.mod +MARKER_FILES += lsmmap.marker +CLEANFILES += lsmmap.marker + +lsmmap.marker: $(lsmmap_module_SOURCES) $(nodist_lsmmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsmmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += lspci.module +MODULE_FILES += lspci.module$(EXEEXT) +lspci_module_SOURCES = commands/lspci.c ## platform sources +nodist_lspci_module_SOURCES = ## platform nodist sources +lspci_module_LDADD = +lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lspci_module_SOURCES) +CLEANFILES += $(nodist_lspci_module_SOURCES) +MOD_FILES += lspci.mod +MARKER_FILES += lspci.marker +CLEANFILES += lspci.marker + +lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += memrw.module +MODULE_FILES += memrw.module$(EXEEXT) +memrw_module_SOURCES = commands/memrw.c ## platform sources +nodist_memrw_module_SOURCES = ## platform nodist sources +memrw_module_LDADD = +memrw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +memrw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +memrw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +memrw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +memrw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_memrw_module_SOURCES) +CLEANFILES += $(nodist_memrw_module_SOURCES) +MOD_FILES += memrw.mod +MARKER_FILES += memrw.marker +CLEANFILES += memrw.marker + +memrw.marker: $(memrw_module_SOURCES) $(nodist_memrw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memrw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += minicmd.module +MODULE_FILES += minicmd.module$(EXEEXT) +minicmd_module_SOURCES = commands/minicmd.c ## platform sources +nodist_minicmd_module_SOURCES = ## platform nodist sources +minicmd_module_LDADD = +minicmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minicmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minicmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minicmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minicmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_minicmd_module_SOURCES) +CLEANFILES += $(nodist_minicmd_module_SOURCES) +MOD_FILES += minicmd.mod +MARKER_FILES += minicmd.marker +CLEANFILES += minicmd.marker + +minicmd.marker: $(minicmd_module_SOURCES) $(nodist_minicmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minicmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += parttool.module +MODULE_FILES += parttool.module$(EXEEXT) +parttool_module_SOURCES = commands/parttool.c ## platform sources +nodist_parttool_module_SOURCES = ## platform nodist sources +parttool_module_LDADD = +parttool_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +parttool_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +parttool_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +parttool_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +parttool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_parttool_module_SOURCES) +CLEANFILES += $(nodist_parttool_module_SOURCES) +MOD_FILES += parttool.mod +MARKER_FILES += parttool.marker +CLEANFILES += parttool.marker + +parttool.marker: $(parttool_module_SOURCES) $(nodist_parttool_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(parttool_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += password.module +MODULE_FILES += password.module$(EXEEXT) +password_module_SOURCES = commands/password.c ## platform sources +nodist_password_module_SOURCES = ## platform nodist sources +password_module_LDADD = +password_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +password_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +password_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +password_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +password_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_password_module_SOURCES) +CLEANFILES += $(nodist_password_module_SOURCES) +MOD_FILES += password.mod +MARKER_FILES += password.marker +CLEANFILES += password.marker + +password.marker: $(password_module_SOURCES) $(nodist_password_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += password_pbkdf2.module +MODULE_FILES += password_pbkdf2.module$(EXEEXT) +password_pbkdf2_module_SOURCES = commands/password_pbkdf2.c ## platform sources +nodist_password_pbkdf2_module_SOURCES = ## platform nodist sources +password_pbkdf2_module_LDADD = +password_pbkdf2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +password_pbkdf2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +password_pbkdf2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +password_pbkdf2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +password_pbkdf2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_password_pbkdf2_module_SOURCES) +CLEANFILES += $(nodist_password_pbkdf2_module_SOURCES) +MOD_FILES += password_pbkdf2.mod +MARKER_FILES += password_pbkdf2.marker +CLEANFILES += password_pbkdf2.marker + +password_pbkdf2.marker: $(password_pbkdf2_module_SOURCES) $(nodist_password_pbkdf2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += play.module +MODULE_FILES += play.module$(EXEEXT) +play_module_SOURCES = commands/i386/pc/play.c ## platform sources +nodist_play_module_SOURCES = ## platform nodist sources +play_module_LDADD = +play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_play_module_SOURCES) +CLEANFILES += $(nodist_play_module_SOURCES) +MOD_FILES += play.mod +MARKER_FILES += play.marker +CLEANFILES += play.marker + +play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += play.module +MODULE_FILES += play.module$(EXEEXT) +play_module_SOURCES = commands/i386/pc/play.c ## platform sources +nodist_play_module_SOURCES = ## platform nodist sources +play_module_LDADD = +play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_play_module_SOURCES) +CLEANFILES += $(nodist_play_module_SOURCES) +MOD_FILES += play.mod +MARKER_FILES += play.marker +CLEANFILES += play.marker + +play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += play.module +MODULE_FILES += play.module$(EXEEXT) +play_module_SOURCES = commands/i386/pc/play.c ## platform sources +nodist_play_module_SOURCES = ## platform nodist sources +play_module_LDADD = +play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_play_module_SOURCES) +CLEANFILES += $(nodist_play_module_SOURCES) +MOD_FILES += play.mod +MARKER_FILES += play.marker +CLEANFILES += play.marker + +play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += play.module +MODULE_FILES += play.module$(EXEEXT) +play_module_SOURCES = commands/i386/pc/play.c ## platform sources +nodist_play_module_SOURCES = ## platform nodist sources +play_module_LDADD = +play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_play_module_SOURCES) +CLEANFILES += $(nodist_play_module_SOURCES) +MOD_FILES += play.mod +MARKER_FILES += play.marker +CLEANFILES += play.marker + +play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += play.module +MODULE_FILES += play.module$(EXEEXT) +play_module_SOURCES = commands/i386/pc/play.c ## platform sources +nodist_play_module_SOURCES = ## platform nodist sources +play_module_LDADD = +play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_play_module_SOURCES) +CLEANFILES += $(nodist_play_module_SOURCES) +MOD_FILES += play.mod +MARKER_FILES += play.marker +CLEANFILES += play.marker + +play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += play.module +MODULE_FILES += play.module$(EXEEXT) +play_module_SOURCES = commands/i386/pc/play.c ## platform sources +nodist_play_module_SOURCES = ## platform nodist sources +play_module_LDADD = +play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_play_module_SOURCES) +CLEANFILES += $(nodist_play_module_SOURCES) +MOD_FILES += play.mod +MARKER_FILES += play.marker +CLEANFILES += play.marker + +play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += play.module +MODULE_FILES += play.module$(EXEEXT) +play_module_SOURCES = commands/i386/pc/play.c ## platform sources +nodist_play_module_SOURCES = ## platform nodist sources +play_module_LDADD = +play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_play_module_SOURCES) +CLEANFILES += $(nodist_play_module_SOURCES) +MOD_FILES += play.mod +MARKER_FILES += play.marker +CLEANFILES += play.marker + +play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += spkmodem.module +MODULE_FILES += spkmodem.module$(EXEEXT) +spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +nodist_spkmodem_module_SOURCES = ## platform nodist sources +spkmodem_module_LDADD = +spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_spkmodem_module_SOURCES) +CLEANFILES += $(nodist_spkmodem_module_SOURCES) +MOD_FILES += spkmodem.mod +MARKER_FILES += spkmodem.marker +CLEANFILES += spkmodem.marker + +spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += spkmodem.module +MODULE_FILES += spkmodem.module$(EXEEXT) +spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +nodist_spkmodem_module_SOURCES = ## platform nodist sources +spkmodem_module_LDADD = +spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_spkmodem_module_SOURCES) +CLEANFILES += $(nodist_spkmodem_module_SOURCES) +MOD_FILES += spkmodem.mod +MARKER_FILES += spkmodem.marker +CLEANFILES += spkmodem.marker + +spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += spkmodem.module +MODULE_FILES += spkmodem.module$(EXEEXT) +spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +nodist_spkmodem_module_SOURCES = ## platform nodist sources +spkmodem_module_LDADD = +spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_spkmodem_module_SOURCES) +CLEANFILES += $(nodist_spkmodem_module_SOURCES) +MOD_FILES += spkmodem.mod +MARKER_FILES += spkmodem.marker +CLEANFILES += spkmodem.marker + +spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += spkmodem.module +MODULE_FILES += spkmodem.module$(EXEEXT) +spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +nodist_spkmodem_module_SOURCES = ## platform nodist sources +spkmodem_module_LDADD = +spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_spkmodem_module_SOURCES) +CLEANFILES += $(nodist_spkmodem_module_SOURCES) +MOD_FILES += spkmodem.mod +MARKER_FILES += spkmodem.marker +CLEANFILES += spkmodem.marker + +spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += spkmodem.module +MODULE_FILES += spkmodem.module$(EXEEXT) +spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +nodist_spkmodem_module_SOURCES = ## platform nodist sources +spkmodem_module_LDADD = +spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_spkmodem_module_SOURCES) +CLEANFILES += $(nodist_spkmodem_module_SOURCES) +MOD_FILES += spkmodem.mod +MARKER_FILES += spkmodem.marker +CLEANFILES += spkmodem.marker + +spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += spkmodem.module +MODULE_FILES += spkmodem.module$(EXEEXT) +spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +nodist_spkmodem_module_SOURCES = ## platform nodist sources +spkmodem_module_LDADD = +spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_spkmodem_module_SOURCES) +CLEANFILES += $(nodist_spkmodem_module_SOURCES) +MOD_FILES += spkmodem.mod +MARKER_FILES += spkmodem.marker +CLEANFILES += spkmodem.marker + +spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += spkmodem.module +MODULE_FILES += spkmodem.module$(EXEEXT) +spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +nodist_spkmodem_module_SOURCES = ## platform nodist sources +spkmodem_module_LDADD = +spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_spkmodem_module_SOURCES) +CLEANFILES += $(nodist_spkmodem_module_SOURCES) +MOD_FILES += spkmodem.mod +MARKER_FILES += spkmodem.marker +CLEANFILES += spkmodem.marker + +spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += morse.module +MODULE_FILES += morse.module$(EXEEXT) +morse_module_SOURCES = term/morse.c ## platform sources +nodist_morse_module_SOURCES = ## platform nodist sources +morse_module_LDADD = +morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_morse_module_SOURCES) +CLEANFILES += $(nodist_morse_module_SOURCES) +MOD_FILES += morse.mod +MARKER_FILES += morse.marker +CLEANFILES += morse.marker + +morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += morse.module +MODULE_FILES += morse.module$(EXEEXT) +morse_module_SOURCES = term/morse.c ## platform sources +nodist_morse_module_SOURCES = ## platform nodist sources +morse_module_LDADD = +morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_morse_module_SOURCES) +CLEANFILES += $(nodist_morse_module_SOURCES) +MOD_FILES += morse.mod +MARKER_FILES += morse.marker +CLEANFILES += morse.marker + +morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += morse.module +MODULE_FILES += morse.module$(EXEEXT) +morse_module_SOURCES = term/morse.c ## platform sources +nodist_morse_module_SOURCES = ## platform nodist sources +morse_module_LDADD = +morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_morse_module_SOURCES) +CLEANFILES += $(nodist_morse_module_SOURCES) +MOD_FILES += morse.mod +MARKER_FILES += morse.marker +CLEANFILES += morse.marker + +morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += morse.module +MODULE_FILES += morse.module$(EXEEXT) +morse_module_SOURCES = term/morse.c ## platform sources +nodist_morse_module_SOURCES = ## platform nodist sources +morse_module_LDADD = +morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_morse_module_SOURCES) +CLEANFILES += $(nodist_morse_module_SOURCES) +MOD_FILES += morse.mod +MARKER_FILES += morse.marker +CLEANFILES += morse.marker + +morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += morse.module +MODULE_FILES += morse.module$(EXEEXT) +morse_module_SOURCES = term/morse.c ## platform sources +nodist_morse_module_SOURCES = ## platform nodist sources +morse_module_LDADD = +morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_morse_module_SOURCES) +CLEANFILES += $(nodist_morse_module_SOURCES) +MOD_FILES += morse.mod +MARKER_FILES += morse.marker +CLEANFILES += morse.marker + +morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += morse.module +MODULE_FILES += morse.module$(EXEEXT) +morse_module_SOURCES = term/morse.c ## platform sources +nodist_morse_module_SOURCES = ## platform nodist sources +morse_module_LDADD = +morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_morse_module_SOURCES) +CLEANFILES += $(nodist_morse_module_SOURCES) +MOD_FILES += morse.mod +MARKER_FILES += morse.marker +CLEANFILES += morse.marker + +morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += morse.module +MODULE_FILES += morse.module$(EXEEXT) +morse_module_SOURCES = term/morse.c ## platform sources +nodist_morse_module_SOURCES = ## platform nodist sources +morse_module_LDADD = +morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_morse_module_SOURCES) +CLEANFILES += $(nodist_morse_module_SOURCES) +MOD_FILES += morse.mod +MARKER_FILES += morse.marker +CLEANFILES += morse.marker + +morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += probe.module +MODULE_FILES += probe.module$(EXEEXT) +probe_module_SOURCES = commands/probe.c ## platform sources +nodist_probe_module_SOURCES = ## platform nodist sources +probe_module_LDADD = +probe_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +probe_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +probe_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +probe_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +probe_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_probe_module_SOURCES) +CLEANFILES += $(nodist_probe_module_SOURCES) +MOD_FILES += probe.mod +MARKER_FILES += probe.marker +CLEANFILES += probe.marker + +probe.marker: $(probe_module_SOURCES) $(nodist_probe_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(probe_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += read.module +MODULE_FILES += read.module$(EXEEXT) +read_module_SOURCES = commands/read.c ## platform sources +nodist_read_module_SOURCES = ## platform nodist sources +read_module_LDADD = +read_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +read_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +read_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +read_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +read_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_read_module_SOURCES) +CLEANFILES += $(nodist_read_module_SOURCES) +MOD_FILES += read.mod +MARKER_FILES += read.marker +CLEANFILES += read.marker + +read.marker: $(read_module_SOURCES) $(nodist_read_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += search.module +MODULE_FILES += search.module$(EXEEXT) +search_module_SOURCES = commands/search_wrap.c ## platform sources +nodist_search_module_SOURCES = ## platform nodist sources +search_module_LDADD = +search_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += commands/search.c +BUILT_SOURCES += $(nodist_search_module_SOURCES) +CLEANFILES += $(nodist_search_module_SOURCES) +MOD_FILES += search.mod +MARKER_FILES += search.marker +CLEANFILES += search.marker + +search.marker: $(search_module_SOURCES) $(nodist_search_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += search_fs_file.module +MODULE_FILES += search_fs_file.module$(EXEEXT) +search_fs_file_module_SOURCES = commands/search_file.c ## platform sources +nodist_search_fs_file_module_SOURCES = ## platform nodist sources +search_fs_file_module_LDADD = +search_fs_file_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_fs_file_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_fs_file_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_fs_file_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_fs_file_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_search_fs_file_module_SOURCES) +CLEANFILES += $(nodist_search_fs_file_module_SOURCES) +MOD_FILES += search_fs_file.mod +MARKER_FILES += search_fs_file.marker +CLEANFILES += search_fs_file.marker + +search_fs_file.marker: $(search_fs_file_module_SOURCES) $(nodist_search_fs_file_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_file_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += search_fs_uuid.module +MODULE_FILES += search_fs_uuid.module$(EXEEXT) +search_fs_uuid_module_SOURCES = commands/search_uuid.c ## platform sources +nodist_search_fs_uuid_module_SOURCES = ## platform nodist sources +search_fs_uuid_module_LDADD = +search_fs_uuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_fs_uuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_fs_uuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_fs_uuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_fs_uuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_search_fs_uuid_module_SOURCES) +CLEANFILES += $(nodist_search_fs_uuid_module_SOURCES) +MOD_FILES += search_fs_uuid.mod +MARKER_FILES += search_fs_uuid.marker +CLEANFILES += search_fs_uuid.marker + +search_fs_uuid.marker: $(search_fs_uuid_module_SOURCES) $(nodist_search_fs_uuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_uuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += search_label.module +MODULE_FILES += search_label.module$(EXEEXT) +search_label_module_SOURCES = commands/search_label.c ## platform sources +nodist_search_label_module_SOURCES = ## platform nodist sources +search_label_module_LDADD = +search_label_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_label_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_label_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_label_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_label_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_search_label_module_SOURCES) +CLEANFILES += $(nodist_search_label_module_SOURCES) +MOD_FILES += search_label.mod +MARKER_FILES += search_label.marker +CLEANFILES += search_label.marker + +search_label.marker: $(search_label_module_SOURCES) $(nodist_search_label_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_label_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += setpci.module +MODULE_FILES += setpci.module$(EXEEXT) +setpci_module_SOURCES = commands/setpci.c ## platform sources +nodist_setpci_module_SOURCES = ## platform nodist sources +setpci_module_LDADD = +setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setpci_module_SOURCES) +CLEANFILES += $(nodist_setpci_module_SOURCES) +MOD_FILES += setpci.mod +MARKER_FILES += setpci.marker +CLEANFILES += setpci.marker + +setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += pcidump.module +MODULE_FILES += pcidump.module$(EXEEXT) +pcidump_module_SOURCES = commands/pcidump.c ## platform sources +nodist_pcidump_module_SOURCES = ## platform nodist sources +pcidump_module_LDADD = +pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pcidump_module_SOURCES) +CLEANFILES += $(nodist_pcidump_module_SOURCES) +MOD_FILES += pcidump.mod +MARKER_FILES += pcidump.marker +CLEANFILES += pcidump.marker + +pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += sleep.module +MODULE_FILES += sleep.module$(EXEEXT) +sleep_module_SOURCES = commands/sleep.c ## platform sources +nodist_sleep_module_SOURCES = ## platform nodist sources +sleep_module_LDADD = +sleep_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sleep_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sleep_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sleep_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sleep_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_sleep_module_SOURCES) +CLEANFILES += $(nodist_sleep_module_SOURCES) +MOD_FILES += sleep.mod +MARKER_FILES += sleep.marker +CLEANFILES += sleep.marker + +sleep.marker: $(sleep_module_SOURCES) $(nodist_sleep_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_ieee1275 +platform_PROGRAMS += suspend.module +MODULE_FILES += suspend.module$(EXEEXT) +suspend_module_SOURCES = commands/ieee1275/suspend.c ## platform sources +nodist_suspend_module_SOURCES = ## platform nodist sources +suspend_module_LDADD = +suspend_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +suspend_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +suspend_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +suspend_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +suspend_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_suspend_module_SOURCES) +CLEANFILES += $(nodist_suspend_module_SOURCES) +MOD_FILES += suspend.mod +MARKER_FILES += suspend.marker +CLEANFILES += suspend.marker + +suspend.marker: $(suspend_module_SOURCES) $(nodist_suspend_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += suspend.module +MODULE_FILES += suspend.module$(EXEEXT) +suspend_module_SOURCES = commands/ieee1275/suspend.c ## platform sources +nodist_suspend_module_SOURCES = ## platform nodist sources +suspend_module_LDADD = +suspend_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +suspend_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +suspend_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +suspend_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +suspend_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_suspend_module_SOURCES) +CLEANFILES += $(nodist_suspend_module_SOURCES) +MOD_FILES += suspend.mod +MARKER_FILES += suspend.marker +CLEANFILES += suspend.marker + +suspend.marker: $(suspend_module_SOURCES) $(nodist_suspend_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += escc.module +MODULE_FILES += escc.module$(EXEEXT) +escc_module_SOURCES = term/ieee1275/escc.c ## platform sources +nodist_escc_module_SOURCES = ## platform nodist sources +escc_module_LDADD = +escc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +escc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +escc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +escc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +escc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_escc_module_SOURCES) +CLEANFILES += $(nodist_escc_module_SOURCES) +MOD_FILES += escc.mod +MARKER_FILES += escc.marker +CLEANFILES += escc.marker + +escc.marker: $(escc_module_SOURCES) $(nodist_escc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(escc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += terminal.module +MODULE_FILES += terminal.module$(EXEEXT) +terminal_module_SOURCES = commands/terminal.c ## platform sources +nodist_terminal_module_SOURCES = ## platform nodist sources +terminal_module_LDADD = +terminal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminal_module_SOURCES) +CLEANFILES += $(nodist_terminal_module_SOURCES) +MOD_FILES += terminal.mod +MARKER_FILES += terminal.marker +CLEANFILES += terminal.marker + +terminal.marker: $(terminal_module_SOURCES) $(nodist_terminal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += test.module +MODULE_FILES += test.module$(EXEEXT) +test_module_SOURCES = commands/test.c ## platform sources +nodist_test_module_SOURCES = ## platform nodist sources +test_module_LDADD = +test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_test_module_SOURCES) +CLEANFILES += $(nodist_test_module_SOURCES) +MOD_FILES += test.mod +MARKER_FILES += test.marker +CLEANFILES += test.marker + +test.marker: $(test_module_SOURCES) $(nodist_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += true.module +MODULE_FILES += true.module$(EXEEXT) +true_module_SOURCES = commands/true.c ## platform sources +nodist_true_module_SOURCES = ## platform nodist sources +true_module_LDADD = +true_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +true_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +true_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +true_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +true_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_true_module_SOURCES) +CLEANFILES += $(nodist_true_module_SOURCES) +MOD_FILES += true.mod +MARKER_FILES += true.marker +CLEANFILES += true.marker + +true.marker: $(true_module_SOURCES) $(nodist_true_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(true_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usbtest.module +MODULE_FILES += usbtest.module$(EXEEXT) +usbtest_module_SOURCES = commands/usbtest.c ## platform sources +nodist_usbtest_module_SOURCES = ## platform nodist sources +usbtest_module_LDADD = +usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbtest_module_SOURCES) +CLEANFILES += $(nodist_usbtest_module_SOURCES) +MOD_FILES += usbtest.mod +MARKER_FILES += usbtest.marker +CLEANFILES += usbtest.marker + +usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += videoinfo.module +MODULE_FILES += videoinfo.module$(EXEEXT) +videoinfo_module_SOURCES = commands/videoinfo.c ## platform sources +nodist_videoinfo_module_SOURCES = ## platform nodist sources +videoinfo_module_LDADD = +videoinfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +videoinfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +videoinfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +videoinfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +videoinfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_videoinfo_module_SOURCES) +CLEANFILES += $(nodist_videoinfo_module_SOURCES) +MOD_FILES += videoinfo.mod +MARKER_FILES += videoinfo.marker +CLEANFILES += videoinfo.marker + +videoinfo.marker: $(videoinfo_module_SOURCES) $(nodist_videoinfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videoinfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += videotest.module +MODULE_FILES += videotest.module$(EXEEXT) +videotest_module_SOURCES = commands/videotest.c ## platform sources +nodist_videotest_module_SOURCES = ## platform nodist sources +videotest_module_LDADD = +videotest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +videotest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +videotest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +videotest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +videotest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_videotest_module_SOURCES) +CLEANFILES += $(nodist_videotest_module_SOURCES) +MOD_FILES += videotest.mod +MARKER_FILES += videotest.marker +CLEANFILES += videotest.marker + +videotest.marker: $(videotest_module_SOURCES) $(nodist_videotest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += xnu_uuid.module +MODULE_FILES += xnu_uuid.module$(EXEEXT) +xnu_uuid_module_SOURCES = commands/xnu_uuid.c ## platform sources +nodist_xnu_uuid_module_SOURCES = ## platform nodist sources +xnu_uuid_module_LDADD = +xnu_uuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_uuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_uuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_uuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_uuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xnu_uuid_module_SOURCES) +CLEANFILES += $(nodist_xnu_uuid_module_SOURCES) +MOD_FILES += xnu_uuid.mod +MARKER_FILES += xnu_uuid.marker +CLEANFILES += xnu_uuid.marker + +xnu_uuid.marker: $(xnu_uuid_module_SOURCES) $(nodist_xnu_uuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += dm_nv.module +MODULE_FILES += dm_nv.module$(EXEEXT) +dm_nv_module_SOURCES = disk/dmraid_nvidia.c ## platform sources +nodist_dm_nv_module_SOURCES = ## platform nodist sources +dm_nv_module_LDADD = +dm_nv_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +dm_nv_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +dm_nv_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +dm_nv_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +dm_nv_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_dm_nv_module_SOURCES) +CLEANFILES += $(nodist_dm_nv_module_SOURCES) +MOD_FILES += dm_nv.mod +MARKER_FILES += dm_nv.marker +CLEANFILES += dm_nv.marker + +dm_nv.marker: $(dm_nv_module_SOURCES) $(nodist_dm_nv_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dm_nv_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += loopback.module +MODULE_FILES += loopback.module$(EXEEXT) +loopback_module_SOURCES = disk/loopback.c ## platform sources +nodist_loopback_module_SOURCES = ## platform nodist sources +loopback_module_LDADD = +loopback_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +loopback_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +loopback_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +loopback_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +loopback_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_loopback_module_SOURCES) +CLEANFILES += $(nodist_loopback_module_SOURCES) +MOD_FILES += loopback.mod +MARKER_FILES += loopback.marker +CLEANFILES += loopback.marker + +loopback.marker: $(loopback_module_SOURCES) $(nodist_loopback_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loopback_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += cryptodisk.module +MODULE_FILES += cryptodisk.module$(EXEEXT) +cryptodisk_module_SOURCES = disk/cryptodisk.c ## platform sources +nodist_cryptodisk_module_SOURCES = ## platform nodist sources +cryptodisk_module_LDADD = +cryptodisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cryptodisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cryptodisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cryptodisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cryptodisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cryptodisk_module_SOURCES) +CLEANFILES += $(nodist_cryptodisk_module_SOURCES) +MOD_FILES += cryptodisk.mod +MARKER_FILES += cryptodisk.marker +CLEANFILES += cryptodisk.marker + +cryptodisk.marker: $(cryptodisk_module_SOURCES) $(nodist_cryptodisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cryptodisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += luks.module +MODULE_FILES += luks.module$(EXEEXT) +luks_module_SOURCES = disk/luks.c disk/AFSplitter.c ## platform sources +nodist_luks_module_SOURCES = ## platform nodist sources +luks_module_LDADD = +luks_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +luks_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +luks_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +luks_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +luks_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_luks_module_SOURCES) +CLEANFILES += $(nodist_luks_module_SOURCES) +MOD_FILES += luks.mod +MARKER_FILES += luks.marker +CLEANFILES += luks.marker + +luks.marker: $(luks_module_SOURCES) $(nodist_luks_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += geli.module +MODULE_FILES += geli.module$(EXEEXT) +geli_module_SOURCES = disk/geli.c ## platform sources +nodist_geli_module_SOURCES = ## platform nodist sources +geli_module_LDADD = +geli_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +geli_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +geli_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +geli_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +geli_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_geli_module_SOURCES) +CLEANFILES += $(nodist_geli_module_SOURCES) +MOD_FILES += geli.mod +MARKER_FILES += geli.marker +CLEANFILES += geli.marker + +geli.marker: $(geli_module_SOURCES) $(nodist_geli_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geli_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += lvm.module +MODULE_FILES += lvm.module$(EXEEXT) +lvm_module_SOURCES = disk/lvm.c ## platform sources +nodist_lvm_module_SOURCES = ## platform nodist sources +lvm_module_LDADD = +lvm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lvm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lvm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lvm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lvm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lvm_module_SOURCES) +CLEANFILES += $(nodist_lvm_module_SOURCES) +MOD_FILES += lvm.mod +MARKER_FILES += lvm.marker +CLEANFILES += lvm.marker + +lvm.marker: $(lvm_module_SOURCES) $(nodist_lvm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lvm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ldm.module +MODULE_FILES += ldm.module$(EXEEXT) +ldm_module_SOURCES = disk/ldm.c ## platform sources +nodist_ldm_module_SOURCES = ## platform nodist sources +ldm_module_LDADD = +ldm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ldm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ldm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ldm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ldm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ldm_module_SOURCES) +CLEANFILES += $(nodist_ldm_module_SOURCES) +MOD_FILES += ldm.mod +MARKER_FILES += ldm.marker +CLEANFILES += ldm.marker + +ldm.marker: $(ldm_module_SOURCES) $(nodist_ldm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += mdraid09.module +MODULE_FILES += mdraid09.module$(EXEEXT) +mdraid09_module_SOURCES = disk/mdraid_linux.c ## platform sources +nodist_mdraid09_module_SOURCES = ## platform nodist sources +mdraid09_module_LDADD = +mdraid09_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mdraid09_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mdraid09_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mdraid09_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mdraid09_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mdraid09_module_SOURCES) +CLEANFILES += $(nodist_mdraid09_module_SOURCES) +MOD_FILES += mdraid09.mod +MARKER_FILES += mdraid09.marker +CLEANFILES += mdraid09.marker + +mdraid09.marker: $(mdraid09_module_SOURCES) $(nodist_mdraid09_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += mdraid09_be.module +MODULE_FILES += mdraid09_be.module$(EXEEXT) +mdraid09_be_module_SOURCES = disk/mdraid_linux_be.c ## platform sources +nodist_mdraid09_be_module_SOURCES = ## platform nodist sources +mdraid09_be_module_LDADD = +mdraid09_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mdraid09_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mdraid09_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mdraid09_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mdraid09_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mdraid09_be_module_SOURCES) +CLEANFILES += $(nodist_mdraid09_be_module_SOURCES) +MOD_FILES += mdraid09_be.mod +MARKER_FILES += mdraid09_be.marker +CLEANFILES += mdraid09_be.marker + +mdraid09_be.marker: $(mdraid09_be_module_SOURCES) $(nodist_mdraid09_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += mdraid1x.module +MODULE_FILES += mdraid1x.module$(EXEEXT) +mdraid1x_module_SOURCES = disk/mdraid1x_linux.c ## platform sources +nodist_mdraid1x_module_SOURCES = ## platform nodist sources +mdraid1x_module_LDADD = +mdraid1x_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mdraid1x_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mdraid1x_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mdraid1x_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mdraid1x_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mdraid1x_module_SOURCES) +CLEANFILES += $(nodist_mdraid1x_module_SOURCES) +MOD_FILES += mdraid1x.mod +MARKER_FILES += mdraid1x.marker +CLEANFILES += mdraid1x.marker + +mdraid1x.marker: $(mdraid1x_module_SOURCES) $(nodist_mdraid1x_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid1x_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += diskfilter.module +MODULE_FILES += diskfilter.module$(EXEEXT) +diskfilter_module_SOURCES = disk/diskfilter.c ## platform sources +nodist_diskfilter_module_SOURCES = ## platform nodist sources +diskfilter_module_LDADD = +diskfilter_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +diskfilter_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +diskfilter_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +diskfilter_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +diskfilter_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_diskfilter_module_SOURCES) +CLEANFILES += $(nodist_diskfilter_module_SOURCES) +MOD_FILES += diskfilter.mod +MARKER_FILES += diskfilter.marker +CLEANFILES += diskfilter.marker + +diskfilter.marker: $(diskfilter_module_SOURCES) $(nodist_diskfilter_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskfilter_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += raid5rec.module +MODULE_FILES += raid5rec.module$(EXEEXT) +raid5rec_module_SOURCES = disk/raid5_recover.c ## platform sources +nodist_raid5rec_module_SOURCES = ## platform nodist sources +raid5rec_module_LDADD = +raid5rec_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +raid5rec_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +raid5rec_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +raid5rec_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +raid5rec_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_raid5rec_module_SOURCES) +CLEANFILES += $(nodist_raid5rec_module_SOURCES) +MOD_FILES += raid5rec.mod +MARKER_FILES += raid5rec.marker +CLEANFILES += raid5rec.marker + +raid5rec.marker: $(raid5rec_module_SOURCES) $(nodist_raid5rec_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid5rec_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += raid6rec.module +MODULE_FILES += raid6rec.module$(EXEEXT) +raid6rec_module_SOURCES = disk/raid6_recover.c ## platform sources +nodist_raid6rec_module_SOURCES = ## platform nodist sources +raid6rec_module_LDADD = +raid6rec_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +raid6rec_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +raid6rec_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +raid6rec_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +raid6rec_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_raid6rec_module_SOURCES) +CLEANFILES += $(nodist_raid6rec_module_SOURCES) +MOD_FILES += raid6rec.mod +MARKER_FILES += raid6rec.marker +CLEANFILES += raid6rec.marker + +raid6rec.marker: $(raid6rec_module_SOURCES) $(nodist_raid6rec_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid6rec_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += scsi.module +MODULE_FILES += scsi.module$(EXEEXT) +scsi_module_SOURCES = disk/scsi.c ## platform sources +nodist_scsi_module_SOURCES = ## platform nodist sources +scsi_module_LDADD = +scsi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +scsi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +scsi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +scsi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +scsi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_scsi_module_SOURCES) +CLEANFILES += $(nodist_scsi_module_SOURCES) +MOD_FILES += scsi.mod +MARKER_FILES += scsi.marker +CLEANFILES += scsi.marker + +scsi.marker: $(scsi_module_SOURCES) $(nodist_scsi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(scsi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += memdisk.module +MODULE_FILES += memdisk.module$(EXEEXT) +memdisk_module_SOURCES = disk/memdisk.c ## platform sources +nodist_memdisk_module_SOURCES = ## platform nodist sources +memdisk_module_LDADD = +memdisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +memdisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +memdisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +memdisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +memdisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_memdisk_module_SOURCES) +CLEANFILES += $(nodist_memdisk_module_SOURCES) +MOD_FILES += memdisk.mod +MARKER_FILES += memdisk.marker +CLEANFILES += memdisk.marker + +memdisk.marker: $(memdisk_module_SOURCES) $(nodist_memdisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memdisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += ata.module +MODULE_FILES += ata.module$(EXEEXT) +ata_module_SOURCES = disk/ata.c ## platform sources +nodist_ata_module_SOURCES = ## platform nodist sources +ata_module_LDADD = +ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ata_module_SOURCES) +CLEANFILES += $(nodist_ata_module_SOURCES) +MOD_FILES += ata.mod +MARKER_FILES += ata.marker +CLEANFILES += ata.marker + +ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += ahci.module +MODULE_FILES += ahci.module$(EXEEXT) +ahci_module_SOURCES = disk/ahci.c ## platform sources +nodist_ahci_module_SOURCES = ## platform nodist sources +ahci_module_LDADD = +ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ahci_module_SOURCES) +CLEANFILES += $(nodist_ahci_module_SOURCES) +MOD_FILES += ahci.mod +MARKER_FILES += ahci.marker +CLEANFILES += ahci.marker + +ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += pata.module +MODULE_FILES += pata.module$(EXEEXT) +pata_module_SOURCES = disk/pata.c ## platform sources +nodist_pata_module_SOURCES = ## platform nodist sources +pata_module_LDADD = +pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pata_module_SOURCES) +CLEANFILES += $(nodist_pata_module_SOURCES) +MOD_FILES += pata.mod +MARKER_FILES += pata.marker +CLEANFILES += pata.marker + +pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += biosdisk.module +MODULE_FILES += biosdisk.module$(EXEEXT) +biosdisk_module_SOURCES = disk/i386/pc/biosdisk.c ## platform sources +nodist_biosdisk_module_SOURCES = ## platform nodist sources +biosdisk_module_LDADD = +biosdisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +biosdisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +biosdisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +biosdisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +biosdisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_biosdisk_module_SOURCES) +CLEANFILES += $(nodist_biosdisk_module_SOURCES) +MOD_FILES += biosdisk.mod +MARKER_FILES += biosdisk.marker +CLEANFILES += biosdisk.marker + +biosdisk.marker: $(biosdisk_module_SOURCES) $(nodist_biosdisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(biosdisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usbms.module +MODULE_FILES += usbms.module$(EXEEXT) +usbms_module_SOURCES = disk/usbms.c ## platform sources +nodist_usbms_module_SOURCES = ## platform nodist sources +usbms_module_LDADD = +usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usbms_module_SOURCES) +CLEANFILES += $(nodist_usbms_module_SOURCES) +MOD_FILES += usbms.mod +MARKER_FILES += usbms.marker +CLEANFILES += usbms.marker + +usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += nand.module +MODULE_FILES += nand.module$(EXEEXT) +nand_module_SOURCES = disk/ieee1275/nand.c ## platform sources +nodist_nand_module_SOURCES = ## platform nodist sources +nand_module_LDADD = +nand_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nand_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nand_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nand_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nand_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nand_module_SOURCES) +CLEANFILES += $(nodist_nand_module_SOURCES) +MOD_FILES += nand.mod +MARKER_FILES += nand.marker +CLEANFILES += nand.marker + +nand.marker: $(nand_module_SOURCES) $(nodist_nand_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nand_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += efiemu.module +MODULE_FILES += efiemu.module$(EXEEXT) +efiemu_module_SOURCES = efiemu/i386/pc/cfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +nodist_efiemu_module_SOURCES = ## platform nodist sources +efiemu_module_LDADD = +efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +BUILT_SOURCES += $(nodist_efiemu_module_SOURCES) +CLEANFILES += $(nodist_efiemu_module_SOURCES) +MOD_FILES += efiemu.mod +MARKER_FILES += efiemu.marker +CLEANFILES += efiemu.marker + +efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += efiemu.module +MODULE_FILES += efiemu.module$(EXEEXT) +efiemu_module_SOURCES = efiemu/i386/nocfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +nodist_efiemu_module_SOURCES = ## platform nodist sources +efiemu_module_LDADD = +efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +BUILT_SOURCES += $(nodist_efiemu_module_SOURCES) +CLEANFILES += $(nodist_efiemu_module_SOURCES) +MOD_FILES += efiemu.mod +MARKER_FILES += efiemu.marker +CLEANFILES += efiemu.marker + +efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += efiemu.module +MODULE_FILES += efiemu.module$(EXEEXT) +efiemu_module_SOURCES = efiemu/i386/pc/cfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +nodist_efiemu_module_SOURCES = ## platform nodist sources +efiemu_module_LDADD = +efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +BUILT_SOURCES += $(nodist_efiemu_module_SOURCES) +CLEANFILES += $(nodist_efiemu_module_SOURCES) +MOD_FILES += efiemu.mod +MARKER_FILES += efiemu.marker +CLEANFILES += efiemu.marker + +efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += efiemu.module +MODULE_FILES += efiemu.module$(EXEEXT) +efiemu_module_SOURCES = efiemu/i386/pc/cfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +nodist_efiemu_module_SOURCES = ## platform nodist sources +efiemu_module_LDADD = +efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +BUILT_SOURCES += $(nodist_efiemu_module_SOURCES) +CLEANFILES += $(nodist_efiemu_module_SOURCES) +MOD_FILES += efiemu.mod +MARKER_FILES += efiemu.marker +CLEANFILES += efiemu.marker + +efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += efiemu.module +MODULE_FILES += efiemu.module$(EXEEXT) +efiemu_module_SOURCES = efiemu/i386/nocfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +nodist_efiemu_module_SOURCES = ## platform nodist sources +efiemu_module_LDADD = +efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +BUILT_SOURCES += $(nodist_efiemu_module_SOURCES) +CLEANFILES += $(nodist_efiemu_module_SOURCES) +MOD_FILES += efiemu.mod +MARKER_FILES += efiemu.marker +CLEANFILES += efiemu.marker + +efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += font.module +MODULE_FILES += font.module$(EXEEXT) +font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +nodist_font_module_SOURCES = ## platform nodist sources +font_module_LDADD = +font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_font_module_SOURCES) +CLEANFILES += $(nodist_font_module_SOURCES) +MOD_FILES += font.mod +MARKER_FILES += font.marker +CLEANFILES += font.marker + +font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += procfs.module +MODULE_FILES += procfs.module$(EXEEXT) +procfs_module_SOURCES = fs/proc.c ## platform sources +nodist_procfs_module_SOURCES = ## platform nodist sources +procfs_module_LDADD = +procfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +procfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +procfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +procfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +procfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_procfs_module_SOURCES) +CLEANFILES += $(nodist_procfs_module_SOURCES) +MOD_FILES += procfs.mod +MARKER_FILES += procfs.marker +CLEANFILES += procfs.marker + +procfs.marker: $(procfs_module_SOURCES) $(nodist_procfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(procfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += affs.module +MODULE_FILES += affs.module$(EXEEXT) +affs_module_SOURCES = fs/affs.c ## platform sources +nodist_affs_module_SOURCES = ## platform nodist sources +affs_module_LDADD = +affs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +affs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +affs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +affs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +affs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_affs_module_SOURCES) +CLEANFILES += $(nodist_affs_module_SOURCES) +MOD_FILES += affs.mod +MARKER_FILES += affs.marker +CLEANFILES += affs.marker + +affs.marker: $(affs_module_SOURCES) $(nodist_affs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(affs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += afs.module +MODULE_FILES += afs.module$(EXEEXT) +afs_module_SOURCES = fs/afs.c ## platform sources +nodist_afs_module_SOURCES = ## platform nodist sources +afs_module_LDADD = +afs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +afs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +afs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +afs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +afs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_afs_module_SOURCES) +CLEANFILES += $(nodist_afs_module_SOURCES) +MOD_FILES += afs.mod +MARKER_FILES += afs.marker +CLEANFILES += afs.marker + +afs.marker: $(afs_module_SOURCES) $(nodist_afs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(afs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += bfs.module +MODULE_FILES += bfs.module$(EXEEXT) +bfs_module_SOURCES = fs/bfs.c ## platform sources +nodist_bfs_module_SOURCES = ## platform nodist sources +bfs_module_LDADD = +bfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bfs_module_SOURCES) +CLEANFILES += $(nodist_bfs_module_SOURCES) +MOD_FILES += bfs.mod +MARKER_FILES += bfs.marker +CLEANFILES += bfs.marker + +bfs.marker: $(bfs_module_SOURCES) $(nodist_bfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += btrfs.module +MODULE_FILES += btrfs.module$(EXEEXT) +btrfs_module_SOURCES = fs/btrfs.c lib/crc.c ## platform sources +nodist_btrfs_module_SOURCES = ## platform nodist sources +btrfs_module_LDADD = +btrfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-undef +btrfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +btrfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H +btrfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +btrfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_btrfs_module_SOURCES) +CLEANFILES += $(nodist_btrfs_module_SOURCES) +MOD_FILES += btrfs.mod +MARKER_FILES += btrfs.marker +CLEANFILES += btrfs.marker + +btrfs.marker: $(btrfs_module_SOURCES) $(nodist_btrfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += archelp.module +MODULE_FILES += archelp.module$(EXEEXT) +archelp_module_SOURCES = fs/archelp.c ## platform sources +nodist_archelp_module_SOURCES = ## platform nodist sources +archelp_module_LDADD = +archelp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +archelp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +archelp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +archelp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +archelp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_archelp_module_SOURCES) +CLEANFILES += $(nodist_archelp_module_SOURCES) +MOD_FILES += archelp.mod +MARKER_FILES += archelp.marker +CLEANFILES += archelp.marker + +archelp.marker: $(archelp_module_SOURCES) $(nodist_archelp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(archelp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += cbfs.module +MODULE_FILES += cbfs.module$(EXEEXT) +cbfs_module_SOURCES = fs/cbfs.c ## platform sources +nodist_cbfs_module_SOURCES = ## platform nodist sources +cbfs_module_LDADD = +cbfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cbfs_module_SOURCES) +CLEANFILES += $(nodist_cbfs_module_SOURCES) +MOD_FILES += cbfs.mod +MARKER_FILES += cbfs.marker +CLEANFILES += cbfs.marker + +cbfs.marker: $(cbfs_module_SOURCES) $(nodist_cbfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += cpio.module +MODULE_FILES += cpio.module$(EXEEXT) +cpio_module_SOURCES = fs/cpio.c ## platform sources +nodist_cpio_module_SOURCES = ## platform nodist sources +cpio_module_LDADD = +cpio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpio_module_SOURCES) +CLEANFILES += $(nodist_cpio_module_SOURCES) +MOD_FILES += cpio.mod +MARKER_FILES += cpio.marker +CLEANFILES += cpio.marker + +cpio.marker: $(cpio_module_SOURCES) $(nodist_cpio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += cpio_be.module +MODULE_FILES += cpio_be.module$(EXEEXT) +cpio_be_module_SOURCES = fs/cpio_be.c ## platform sources +nodist_cpio_be_module_SOURCES = ## platform nodist sources +cpio_be_module_LDADD = +cpio_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpio_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpio_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpio_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpio_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cpio_be_module_SOURCES) +CLEANFILES += $(nodist_cpio_be_module_SOURCES) +MOD_FILES += cpio_be.mod +MARKER_FILES += cpio_be.marker +CLEANFILES += cpio_be.marker + +cpio_be.marker: $(cpio_be_module_SOURCES) $(nodist_cpio_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += newc.module +MODULE_FILES += newc.module$(EXEEXT) +newc_module_SOURCES = fs/newc.c ## platform sources +nodist_newc_module_SOURCES = ## platform nodist sources +newc_module_LDADD = +newc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +newc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +newc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +newc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +newc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_newc_module_SOURCES) +CLEANFILES += $(nodist_newc_module_SOURCES) +MOD_FILES += newc.mod +MARKER_FILES += newc.marker +CLEANFILES += newc.marker + +newc.marker: $(newc_module_SOURCES) $(nodist_newc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += odc.module +MODULE_FILES += odc.module$(EXEEXT) +odc_module_SOURCES = fs/odc.c ## platform sources +nodist_odc_module_SOURCES = ## platform nodist sources +odc_module_LDADD = +odc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +odc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +odc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +odc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +odc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_odc_module_SOURCES) +CLEANFILES += $(nodist_odc_module_SOURCES) +MOD_FILES += odc.mod +MARKER_FILES += odc.marker +CLEANFILES += odc.marker + +odc.marker: $(odc_module_SOURCES) $(nodist_odc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(odc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ext2.module +MODULE_FILES += ext2.module$(EXEEXT) +ext2_module_SOURCES = fs/ext2.c ## platform sources +nodist_ext2_module_SOURCES = ## platform nodist sources +ext2_module_LDADD = +ext2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ext2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ext2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ext2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ext2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ext2_module_SOURCES) +CLEANFILES += $(nodist_ext2_module_SOURCES) +MOD_FILES += ext2.mod +MARKER_FILES += ext2.marker +CLEANFILES += ext2.marker + +ext2.marker: $(ext2_module_SOURCES) $(nodist_ext2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ext2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += fat.module +MODULE_FILES += fat.module$(EXEEXT) +fat_module_SOURCES = fs/fat.c ## platform sources +nodist_fat_module_SOURCES = ## platform nodist sources +fat_module_LDADD = +fat_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fat_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fat_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fat_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fat_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fat_module_SOURCES) +CLEANFILES += $(nodist_fat_module_SOURCES) +MOD_FILES += fat.mod +MARKER_FILES += fat.marker +CLEANFILES += fat.marker + +fat.marker: $(fat_module_SOURCES) $(nodist_fat_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fat_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += exfat.module +MODULE_FILES += exfat.module$(EXEEXT) +exfat_module_SOURCES = fs/exfat.c ## platform sources +nodist_exfat_module_SOURCES = ## platform nodist sources +exfat_module_LDADD = +exfat_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +exfat_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +exfat_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +exfat_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +exfat_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_exfat_module_SOURCES) +CLEANFILES += $(nodist_exfat_module_SOURCES) +MOD_FILES += exfat.mod +MARKER_FILES += exfat.marker +CLEANFILES += exfat.marker + +exfat.marker: $(exfat_module_SOURCES) $(nodist_exfat_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfat_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += fshelp.module +MODULE_FILES += fshelp.module$(EXEEXT) +fshelp_module_SOURCES = fs/fshelp.c ## platform sources +nodist_fshelp_module_SOURCES = ## platform nodist sources +fshelp_module_LDADD = +fshelp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fshelp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fshelp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fshelp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fshelp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fshelp_module_SOURCES) +CLEANFILES += $(nodist_fshelp_module_SOURCES) +MOD_FILES += fshelp.mod +MARKER_FILES += fshelp.marker +CLEANFILES += fshelp.marker + +fshelp.marker: $(fshelp_module_SOURCES) $(nodist_fshelp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fshelp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += hfs.module +MODULE_FILES += hfs.module$(EXEEXT) +hfs_module_SOURCES = fs/hfs.c ## platform sources +nodist_hfs_module_SOURCES = ## platform nodist sources +hfs_module_LDADD = +hfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hfs_module_SOURCES) +CLEANFILES += $(nodist_hfs_module_SOURCES) +MOD_FILES += hfs.mod +MARKER_FILES += hfs.marker +CLEANFILES += hfs.marker + +hfs.marker: $(hfs_module_SOURCES) $(nodist_hfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += hfsplus.module +MODULE_FILES += hfsplus.module$(EXEEXT) +hfsplus_module_SOURCES = fs/hfsplus.c ## platform sources +nodist_hfsplus_module_SOURCES = ## platform nodist sources +hfsplus_module_LDADD = +hfsplus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hfsplus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hfsplus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hfsplus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hfsplus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hfsplus_module_SOURCES) +CLEANFILES += $(nodist_hfsplus_module_SOURCES) +MOD_FILES += hfsplus.mod +MARKER_FILES += hfsplus.marker +CLEANFILES += hfsplus.marker + +hfsplus.marker: $(hfsplus_module_SOURCES) $(nodist_hfsplus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfsplus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += hfspluscomp.module +MODULE_FILES += hfspluscomp.module$(EXEEXT) +hfspluscomp_module_SOURCES = fs/hfspluscomp.c ## platform sources +nodist_hfspluscomp_module_SOURCES = ## platform nodist sources +hfspluscomp_module_LDADD = +hfspluscomp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hfspluscomp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hfspluscomp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hfspluscomp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hfspluscomp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hfspluscomp_module_SOURCES) +CLEANFILES += $(nodist_hfspluscomp_module_SOURCES) +MOD_FILES += hfspluscomp.mod +MARKER_FILES += hfspluscomp.marker +CLEANFILES += hfspluscomp.marker + +hfspluscomp.marker: $(hfspluscomp_module_SOURCES) $(nodist_hfspluscomp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfspluscomp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += iso9660.module +MODULE_FILES += iso9660.module$(EXEEXT) +iso9660_module_SOURCES = fs/iso9660.c ## platform sources +nodist_iso9660_module_SOURCES = ## platform nodist sources +iso9660_module_LDADD = +iso9660_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iso9660_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iso9660_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iso9660_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iso9660_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_iso9660_module_SOURCES) +CLEANFILES += $(nodist_iso9660_module_SOURCES) +MOD_FILES += iso9660.mod +MARKER_FILES += iso9660.marker +CLEANFILES += iso9660.marker + +iso9660.marker: $(iso9660_module_SOURCES) $(nodist_iso9660_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iso9660_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += jfs.module +MODULE_FILES += jfs.module$(EXEEXT) +jfs_module_SOURCES = fs/jfs.c ## platform sources +nodist_jfs_module_SOURCES = ## platform nodist sources +jfs_module_LDADD = +jfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +jfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +jfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +jfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +jfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_jfs_module_SOURCES) +CLEANFILES += $(nodist_jfs_module_SOURCES) +MOD_FILES += jfs.mod +MARKER_FILES += jfs.marker +CLEANFILES += jfs.marker + +jfs.marker: $(jfs_module_SOURCES) $(nodist_jfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += minix.module +MODULE_FILES += minix.module$(EXEEXT) +minix_module_SOURCES = fs/minix.c ## platform sources +nodist_minix_module_SOURCES = ## platform nodist sources +minix_module_LDADD = +minix_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_minix_module_SOURCES) +CLEANFILES += $(nodist_minix_module_SOURCES) +MOD_FILES += minix.mod +MARKER_FILES += minix.marker +CLEANFILES += minix.marker + +minix.marker: $(minix_module_SOURCES) $(nodist_minix_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += minix2.module +MODULE_FILES += minix2.module$(EXEEXT) +minix2_module_SOURCES = fs/minix2.c ## platform sources +nodist_minix2_module_SOURCES = ## platform nodist sources +minix2_module_LDADD = +minix2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_minix2_module_SOURCES) +CLEANFILES += $(nodist_minix2_module_SOURCES) +MOD_FILES += minix2.mod +MARKER_FILES += minix2.marker +CLEANFILES += minix2.marker + +minix2.marker: $(minix2_module_SOURCES) $(nodist_minix2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += minix3.module +MODULE_FILES += minix3.module$(EXEEXT) +minix3_module_SOURCES = fs/minix3.c ## platform sources +nodist_minix3_module_SOURCES = ## platform nodist sources +minix3_module_LDADD = +minix3_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix3_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix3_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix3_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix3_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_minix3_module_SOURCES) +CLEANFILES += $(nodist_minix3_module_SOURCES) +MOD_FILES += minix3.mod +MARKER_FILES += minix3.marker +CLEANFILES += minix3.marker + +minix3.marker: $(minix3_module_SOURCES) $(nodist_minix3_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += minix_be.module +MODULE_FILES += minix_be.module$(EXEEXT) +minix_be_module_SOURCES = fs/minix_be.c ## platform sources +nodist_minix_be_module_SOURCES = ## platform nodist sources +minix_be_module_LDADD = +minix_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_minix_be_module_SOURCES) +CLEANFILES += $(nodist_minix_be_module_SOURCES) +MOD_FILES += minix_be.mod +MARKER_FILES += minix_be.marker +CLEANFILES += minix_be.marker + +minix_be.marker: $(minix_be_module_SOURCES) $(nodist_minix_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += minix2_be.module +MODULE_FILES += minix2_be.module$(EXEEXT) +minix2_be_module_SOURCES = fs/minix2_be.c ## platform sources +nodist_minix2_be_module_SOURCES = ## platform nodist sources +minix2_be_module_LDADD = +minix2_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix2_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix2_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix2_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix2_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_minix2_be_module_SOURCES) +CLEANFILES += $(nodist_minix2_be_module_SOURCES) +MOD_FILES += minix2_be.mod +MARKER_FILES += minix2_be.marker +CLEANFILES += minix2_be.marker + +minix2_be.marker: $(minix2_be_module_SOURCES) $(nodist_minix2_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += minix3_be.module +MODULE_FILES += minix3_be.module$(EXEEXT) +minix3_be_module_SOURCES = fs/minix3_be.c ## platform sources +nodist_minix3_be_module_SOURCES = ## platform nodist sources +minix3_be_module_LDADD = +minix3_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix3_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix3_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix3_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix3_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_minix3_be_module_SOURCES) +CLEANFILES += $(nodist_minix3_be_module_SOURCES) +MOD_FILES += minix3_be.mod +MARKER_FILES += minix3_be.marker +CLEANFILES += minix3_be.marker + +minix3_be.marker: $(minix3_be_module_SOURCES) $(nodist_minix3_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += nilfs2.module +MODULE_FILES += nilfs2.module$(EXEEXT) +nilfs2_module_SOURCES = fs/nilfs2.c ## platform sources +nodist_nilfs2_module_SOURCES = ## platform nodist sources +nilfs2_module_LDADD = +nilfs2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nilfs2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nilfs2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nilfs2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nilfs2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_nilfs2_module_SOURCES) +CLEANFILES += $(nodist_nilfs2_module_SOURCES) +MOD_FILES += nilfs2.mod +MARKER_FILES += nilfs2.marker +CLEANFILES += nilfs2.marker + +nilfs2.marker: $(nilfs2_module_SOURCES) $(nodist_nilfs2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nilfs2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ntfs.module +MODULE_FILES += ntfs.module$(EXEEXT) +ntfs_module_SOURCES = fs/ntfs.c ## platform sources +nodist_ntfs_module_SOURCES = ## platform nodist sources +ntfs_module_LDADD = +ntfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ntfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ntfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ntfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ntfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ntfs_module_SOURCES) +CLEANFILES += $(nodist_ntfs_module_SOURCES) +MOD_FILES += ntfs.mod +MARKER_FILES += ntfs.marker +CLEANFILES += ntfs.marker + +ntfs.marker: $(ntfs_module_SOURCES) $(nodist_ntfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ntfscomp.module +MODULE_FILES += ntfscomp.module$(EXEEXT) +ntfscomp_module_SOURCES = fs/ntfscomp.c ## platform sources +nodist_ntfscomp_module_SOURCES = ## platform nodist sources +ntfscomp_module_LDADD = +ntfscomp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ntfscomp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ntfscomp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ntfscomp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ntfscomp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ntfscomp_module_SOURCES) +CLEANFILES += $(nodist_ntfscomp_module_SOURCES) +MOD_FILES += ntfscomp.mod +MARKER_FILES += ntfscomp.marker +CLEANFILES += ntfscomp.marker + +ntfscomp.marker: $(ntfscomp_module_SOURCES) $(nodist_ntfscomp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfscomp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += reiserfs.module +MODULE_FILES += reiserfs.module$(EXEEXT) +reiserfs_module_SOURCES = fs/reiserfs.c ## platform sources +nodist_reiserfs_module_SOURCES = ## platform nodist sources +reiserfs_module_LDADD = +reiserfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reiserfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reiserfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reiserfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reiserfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_reiserfs_module_SOURCES) +CLEANFILES += $(nodist_reiserfs_module_SOURCES) +MOD_FILES += reiserfs.mod +MARKER_FILES += reiserfs.marker +CLEANFILES += reiserfs.marker + +reiserfs.marker: $(reiserfs_module_SOURCES) $(nodist_reiserfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reiserfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += romfs.module +MODULE_FILES += romfs.module$(EXEEXT) +romfs_module_SOURCES = fs/romfs.c ## platform sources +nodist_romfs_module_SOURCES = ## platform nodist sources +romfs_module_LDADD = +romfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +romfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +romfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +romfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +romfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_romfs_module_SOURCES) +CLEANFILES += $(nodist_romfs_module_SOURCES) +MOD_FILES += romfs.mod +MARKER_FILES += romfs.marker +CLEANFILES += romfs.marker + +romfs.marker: $(romfs_module_SOURCES) $(nodist_romfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(romfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += sfs.module +MODULE_FILES += sfs.module$(EXEEXT) +sfs_module_SOURCES = fs/sfs.c ## platform sources +nodist_sfs_module_SOURCES = ## platform nodist sources +sfs_module_LDADD = +sfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_sfs_module_SOURCES) +CLEANFILES += $(nodist_sfs_module_SOURCES) +MOD_FILES += sfs.mod +MARKER_FILES += sfs.marker +CLEANFILES += sfs.marker + +sfs.marker: $(sfs_module_SOURCES) $(nodist_sfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += squash4.module +MODULE_FILES += squash4.module$(EXEEXT) +squash4_module_SOURCES = fs/squash4.c ## platform sources +nodist_squash4_module_SOURCES = ## platform nodist sources +squash4_module_LDADD = +squash4_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-undef +squash4_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +squash4_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H +squash4_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +squash4_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_squash4_module_SOURCES) +CLEANFILES += $(nodist_squash4_module_SOURCES) +MOD_FILES += squash4.mod +MARKER_FILES += squash4.marker +CLEANFILES += squash4.marker + +squash4.marker: $(squash4_module_SOURCES) $(nodist_squash4_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(squash4_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += tar.module +MODULE_FILES += tar.module$(EXEEXT) +tar_module_SOURCES = fs/tar.c ## platform sources +nodist_tar_module_SOURCES = ## platform nodist sources +tar_module_LDADD = +tar_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tar_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tar_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tar_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tar_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_tar_module_SOURCES) +CLEANFILES += $(nodist_tar_module_SOURCES) +MOD_FILES += tar.mod +MARKER_FILES += tar.marker +CLEANFILES += tar.marker + +tar.marker: $(tar_module_SOURCES) $(nodist_tar_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tar_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += udf.module +MODULE_FILES += udf.module$(EXEEXT) +udf_module_SOURCES = fs/udf.c ## platform sources +nodist_udf_module_SOURCES = ## platform nodist sources +udf_module_LDADD = +udf_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +udf_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +udf_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +udf_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +udf_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_udf_module_SOURCES) +CLEANFILES += $(nodist_udf_module_SOURCES) +MOD_FILES += udf.mod +MARKER_FILES += udf.marker +CLEANFILES += udf.marker + +udf.marker: $(udf_module_SOURCES) $(nodist_udf_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udf_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ufs1.module +MODULE_FILES += ufs1.module$(EXEEXT) +ufs1_module_SOURCES = fs/ufs.c ## platform sources +nodist_ufs1_module_SOURCES = ## platform nodist sources +ufs1_module_LDADD = +ufs1_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ufs1_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ufs1_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ufs1_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ufs1_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ufs1_module_SOURCES) +CLEANFILES += $(nodist_ufs1_module_SOURCES) +MOD_FILES += ufs1.mod +MARKER_FILES += ufs1.marker +CLEANFILES += ufs1.marker + +ufs1.marker: $(ufs1_module_SOURCES) $(nodist_ufs1_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ufs1_be.module +MODULE_FILES += ufs1_be.module$(EXEEXT) +ufs1_be_module_SOURCES = fs/ufs_be.c ## platform sources +nodist_ufs1_be_module_SOURCES = ## platform nodist sources +ufs1_be_module_LDADD = +ufs1_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ufs1_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ufs1_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ufs1_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ufs1_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ufs1_be_module_SOURCES) +CLEANFILES += $(nodist_ufs1_be_module_SOURCES) +MOD_FILES += ufs1_be.mod +MARKER_FILES += ufs1_be.marker +CLEANFILES += ufs1_be.marker + +ufs1_be.marker: $(ufs1_be_module_SOURCES) $(nodist_ufs1_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ufs2.module +MODULE_FILES += ufs2.module$(EXEEXT) +ufs2_module_SOURCES = fs/ufs2.c ## platform sources +nodist_ufs2_module_SOURCES = ## platform nodist sources +ufs2_module_LDADD = +ufs2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ufs2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ufs2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ufs2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ufs2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ufs2_module_SOURCES) +CLEANFILES += $(nodist_ufs2_module_SOURCES) +MOD_FILES += ufs2.mod +MARKER_FILES += ufs2.marker +CLEANFILES += ufs2.marker + +ufs2.marker: $(ufs2_module_SOURCES) $(nodist_ufs2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += xfs.module +MODULE_FILES += xfs.module$(EXEEXT) +xfs_module_SOURCES = fs/xfs.c ## platform sources +nodist_xfs_module_SOURCES = ## platform nodist sources +xfs_module_LDADD = +xfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xfs_module_SOURCES) +CLEANFILES += $(nodist_xfs_module_SOURCES) +MOD_FILES += xfs.mod +MARKER_FILES += xfs.marker +CLEANFILES += xfs.marker + +xfs.marker: $(xfs_module_SOURCES) $(nodist_xfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += zfs.module +MODULE_FILES += zfs.module$(EXEEXT) +zfs_module_SOURCES = fs/zfs/zfs.c fs/zfs/zfs_lzjb.c fs/zfs/zfs_lz4.c fs/zfs/zfs_sha256.c fs/zfs/zfs_fletcher.c ## platform sources +nodist_zfs_module_SOURCES = ## platform nodist sources +zfs_module_LDADD = +zfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +zfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +zfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +zfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +zfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_zfs_module_SOURCES) +CLEANFILES += $(nodist_zfs_module_SOURCES) +MOD_FILES += zfs.mod +MARKER_FILES += zfs.marker +CLEANFILES += zfs.marker + +zfs.marker: $(zfs_module_SOURCES) $(nodist_zfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += zfscrypt.module +MODULE_FILES += zfscrypt.module$(EXEEXT) +zfscrypt_module_SOURCES = fs/zfs/zfscrypt.c ## platform sources +nodist_zfscrypt_module_SOURCES = ## platform nodist sources +zfscrypt_module_LDADD = +zfscrypt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +zfscrypt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +zfscrypt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +zfscrypt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +zfscrypt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_zfscrypt_module_SOURCES) +CLEANFILES += $(nodist_zfscrypt_module_SOURCES) +MOD_FILES += zfscrypt.mod +MARKER_FILES += zfscrypt.marker +CLEANFILES += zfscrypt.marker + +zfscrypt.marker: $(zfscrypt_module_SOURCES) $(nodist_zfscrypt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfscrypt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += zfsinfo.module +MODULE_FILES += zfsinfo.module$(EXEEXT) +zfsinfo_module_SOURCES = fs/zfs/zfsinfo.c ## platform sources +nodist_zfsinfo_module_SOURCES = ## platform nodist sources +zfsinfo_module_LDADD = +zfsinfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +zfsinfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +zfsinfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +zfsinfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +zfsinfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_zfsinfo_module_SOURCES) +CLEANFILES += $(nodist_zfsinfo_module_SOURCES) +MOD_FILES += zfsinfo.mod +MARKER_FILES += zfsinfo.marker +CLEANFILES += zfsinfo.marker + +zfsinfo.marker: $(zfsinfo_module_SOURCES) $(nodist_zfsinfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfsinfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += macbless.module +MODULE_FILES += macbless.module$(EXEEXT) +macbless_module_SOURCES = commands/macbless.c ## platform sources +nodist_macbless_module_SOURCES = ## platform nodist sources +macbless_module_LDADD = +macbless_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +macbless_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +macbless_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +macbless_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +macbless_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_macbless_module_SOURCES) +CLEANFILES += $(nodist_macbless_module_SOURCES) +MOD_FILES += macbless.mod +MARKER_FILES += macbless.marker +CLEANFILES += macbless.marker + +macbless.marker: $(macbless_module_SOURCES) $(nodist_macbless_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macbless_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += pxe.module +MODULE_FILES += pxe.module$(EXEEXT) +pxe_module_SOURCES = net/drivers/i386/pc/pxe.c ## platform sources +nodist_pxe_module_SOURCES = ## platform nodist sources +pxe_module_LDADD = +pxe_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pxe_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pxe_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pxe_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pxe_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pxe_module_SOURCES) +CLEANFILES += $(nodist_pxe_module_SOURCES) +MOD_FILES += pxe.mod +MARKER_FILES += pxe.marker +CLEANFILES += pxe.marker + +pxe.marker: $(pxe_module_SOURCES) $(nodist_pxe_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxe_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += gettext.module +MODULE_FILES += gettext.module$(EXEEXT) +gettext_module_SOURCES = gettext/gettext.c ## platform sources +nodist_gettext_module_SOURCES = ## platform nodist sources +gettext_module_LDADD = +gettext_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gettext_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gettext_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gettext_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gettext_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gettext_module_SOURCES) +CLEANFILES += $(nodist_gettext_module_SOURCES) +MOD_FILES += gettext.mod +MARKER_FILES += gettext.marker +CLEANFILES += gettext.marker + +gettext.marker: $(gettext_module_SOURCES) $(nodist_gettext_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gettext_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gfxmenu.module +MODULE_FILES += gfxmenu.module$(EXEEXT) +gfxmenu_module_SOURCES = gfxmenu/gfxmenu.c gfxmenu/view.c gfxmenu/font.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 ## platform sources +nodist_gfxmenu_module_SOURCES = ## platform nodist sources +gfxmenu_module_LDADD = +gfxmenu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxmenu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxmenu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxmenu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxmenu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxmenu_module_SOURCES) +CLEANFILES += $(nodist_gfxmenu_module_SOURCES) +MOD_FILES += gfxmenu.mod +MARKER_FILES += gfxmenu.marker +CLEANFILES += gfxmenu.marker + +gfxmenu.marker: $(gfxmenu_module_SOURCES) $(nodist_gfxmenu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += hello.module +MODULE_FILES += hello.module$(EXEEXT) +hello_module_SOURCES = hello/hello.c ## platform sources +nodist_hello_module_SOURCES = ## platform nodist sources +hello_module_LDADD = +hello_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hello_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hello_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hello_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hello_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_hello_module_SOURCES) +CLEANFILES += $(nodist_hello_module_SOURCES) +MOD_FILES += hello.mod +MARKER_FILES += hello.marker +CLEANFILES += hello.marker + +hello.marker: $(hello_module_SOURCES) $(nodist_hello_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hello_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gzio.module +MODULE_FILES += gzio.module$(EXEEXT) +gzio_module_SOURCES = io/gzio.c ## platform sources +nodist_gzio_module_SOURCES = ## platform nodist sources +gzio_module_LDADD = +gzio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gzio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gzio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gzio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gzio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gzio_module_SOURCES) +CLEANFILES += $(nodist_gzio_module_SOURCES) +MOD_FILES += gzio.mod +MARKER_FILES += gzio.marker +CLEANFILES += gzio.marker + +gzio.marker: $(gzio_module_SOURCES) $(nodist_gzio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gzio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += offsetio.module +MODULE_FILES += offsetio.module$(EXEEXT) +offsetio_module_SOURCES = io/offset.c ## platform sources +nodist_offsetio_module_SOURCES = ## platform nodist sources +offsetio_module_LDADD = +offsetio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +offsetio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +offsetio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +offsetio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +offsetio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_offsetio_module_SOURCES) +CLEANFILES += $(nodist_offsetio_module_SOURCES) +MOD_FILES += offsetio.mod +MARKER_FILES += offsetio.marker +CLEANFILES += offsetio.marker + +offsetio.marker: $(offsetio_module_SOURCES) $(nodist_offsetio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(offsetio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_emu +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += bufio.module +MODULE_FILES += bufio.module$(EXEEXT) +bufio_module_SOURCES = io/bufio.c ## platform sources +nodist_bufio_module_SOURCES = ## platform nodist sources +bufio_module_LDADD = +bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bufio_module_SOURCES) +CLEANFILES += $(nodist_bufio_module_SOURCES) +MOD_FILES += bufio.mod +MARKER_FILES += bufio.marker +CLEANFILES += bufio.marker + +bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += elf.module +MODULE_FILES += elf.module$(EXEEXT) +elf_module_SOURCES = kern/elf.c ## platform sources +nodist_elf_module_SOURCES = ## platform nodist sources +elf_module_LDADD = +elf_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +elf_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +elf_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +elf_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +elf_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += kern/elfXX.c +BUILT_SOURCES += $(nodist_elf_module_SOURCES) +CLEANFILES += $(nodist_elf_module_SOURCES) +MOD_FILES += elf.mod +MARKER_FILES += elf.marker +CLEANFILES += elf.marker + +elf.marker: $(elf_module_SOURCES) $(nodist_elf_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(elf_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += crypto.module +MODULE_FILES += crypto.module$(EXEEXT) +crypto_module_SOURCES = lib/crypto.c ## platform sources +nodist_crypto_module_SOURCES = ## platform nodist sources +crypto_module_LDADD = +crypto_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +crypto_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +crypto_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +crypto_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +crypto_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/libgcrypt-grub/cipher/crypto.lst +BUILT_SOURCES += $(nodist_crypto_module_SOURCES) +CLEANFILES += $(nodist_crypto_module_SOURCES) +MOD_FILES += crypto.mod +MARKER_FILES += crypto.marker +CLEANFILES += crypto.marker + +crypto.marker: $(crypto_module_SOURCES) $(nodist_crypto_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crypto_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += pbkdf2.module +MODULE_FILES += pbkdf2.module$(EXEEXT) +pbkdf2_module_SOURCES = lib/pbkdf2.c ## platform sources +nodist_pbkdf2_module_SOURCES = ## platform nodist sources +pbkdf2_module_LDADD = +pbkdf2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pbkdf2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pbkdf2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pbkdf2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pbkdf2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pbkdf2_module_SOURCES) +CLEANFILES += $(nodist_pbkdf2_module_SOURCES) +MOD_FILES += pbkdf2.mod +MARKER_FILES += pbkdf2.marker +CLEANFILES += pbkdf2.marker + +pbkdf2.marker: $(pbkdf2_module_SOURCES) $(nodist_pbkdf2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/efi/relocator.c lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/ieee1275/relocator.c lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/x86_64/efi/relocator.c lib/x86_64/relocator_asm.S lib/efi/relocator.c lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/xen/relocator.S lib/xen/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/x86_64/relocator_asm.S lib/x86_64/xen/relocator.S lib/xen/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/mips/relocator_asm.S lib/mips/relocator.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/powerpc/relocator_asm.S lib/powerpc/relocator.c lib/ieee1275/relocator.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/mips/relocator_asm.S lib/mips/relocator.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += relocator.module +MODULE_FILES += relocator.module$(EXEEXT) +relocator_module_SOURCES = lib/mips/relocator_asm.S lib/mips/relocator.c lib/relocator.c ## platform sources +nodist_relocator_module_SOURCES = ## platform nodist sources +relocator_module_LDADD = +relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/relocator_common.S kern/powerpc/cache_flush.S +BUILT_SOURCES += $(nodist_relocator_module_SOURCES) +CLEANFILES += $(nodist_relocator_module_SOURCES) +MOD_FILES += relocator.mod +MARKER_FILES += relocator.marker +CLEANFILES += relocator.marker + +relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/xen/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/xen/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/ieee1275/datetime.c lib/ieee1275/cmos.c lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/ieee1275/datetime.c lib/ieee1275/cmos.c lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/arc/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/uboot/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += datetime.module +MODULE_FILES += datetime.module$(EXEEXT) +datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +nodist_datetime_module_SOURCES = ## platform nodist sources +datetime_module_LDADD = +datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datetime_module_SOURCES) +CLEANFILES += $(nodist_datetime_module_SOURCES) +MOD_FILES += datetime.mod +MARKER_FILES += datetime.marker +CLEANFILES += datetime.marker + +datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += setjmp.module +MODULE_FILES += setjmp.module$(EXEEXT) +setjmp_module_SOURCES = lib/setjmp.S ## platform sources +nodist_setjmp_module_SOURCES = ## platform nodist sources +setjmp_module_LDADD = +setjmp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setjmp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setjmp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setjmp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setjmp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += lib/i386/setjmp.S lib/mips/setjmp.S lib/x86_64/setjmp.S lib/sparc64/setjmp.S lib/powerpc/setjmp.S lib/ia64/setjmp.S lib/ia64/longjmp.S lib/arm/setjmp.S lib/arm64/setjmp.S +BUILT_SOURCES += $(nodist_setjmp_module_SOURCES) +CLEANFILES += $(nodist_setjmp_module_SOURCES) +MOD_FILES += setjmp.mod +MARKER_FILES += setjmp.marker +CLEANFILES += setjmp.marker + +setjmp.marker: $(setjmp_module_SOURCES) $(nodist_setjmp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += aout.module +MODULE_FILES += aout.module$(EXEEXT) +aout_module_SOURCES = loader/aout.c ## platform sources +nodist_aout_module_SOURCES = ## platform nodist sources +aout_module_LDADD = +aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_aout_module_SOURCES) +CLEANFILES += $(nodist_aout_module_SOURCES) +MOD_FILES += aout.mod +MARKER_FILES += aout.marker +CLEANFILES += aout.marker + +aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += aout.module +MODULE_FILES += aout.module$(EXEEXT) +aout_module_SOURCES = loader/aout.c ## platform sources +nodist_aout_module_SOURCES = ## platform nodist sources +aout_module_LDADD = +aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_aout_module_SOURCES) +CLEANFILES += $(nodist_aout_module_SOURCES) +MOD_FILES += aout.mod +MARKER_FILES += aout.marker +CLEANFILES += aout.marker + +aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += aout.module +MODULE_FILES += aout.module$(EXEEXT) +aout_module_SOURCES = loader/aout.c ## platform sources +nodist_aout_module_SOURCES = ## platform nodist sources +aout_module_LDADD = +aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_aout_module_SOURCES) +CLEANFILES += $(nodist_aout_module_SOURCES) +MOD_FILES += aout.mod +MARKER_FILES += aout.marker +CLEANFILES += aout.marker + +aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += aout.module +MODULE_FILES += aout.module$(EXEEXT) +aout_module_SOURCES = loader/aout.c ## platform sources +nodist_aout_module_SOURCES = ## platform nodist sources +aout_module_LDADD = +aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_aout_module_SOURCES) +CLEANFILES += $(nodist_aout_module_SOURCES) +MOD_FILES += aout.mod +MARKER_FILES += aout.marker +CLEANFILES += aout.marker + +aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += aout.module +MODULE_FILES += aout.module$(EXEEXT) +aout_module_SOURCES = loader/aout.c ## platform sources +nodist_aout_module_SOURCES = ## platform nodist sources +aout_module_LDADD = +aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_aout_module_SOURCES) +CLEANFILES += $(nodist_aout_module_SOURCES) +MOD_FILES += aout.mod +MARKER_FILES += aout.marker +CLEANFILES += aout.marker + +aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += aout.module +MODULE_FILES += aout.module$(EXEEXT) +aout_module_SOURCES = loader/aout.c ## platform sources +nodist_aout_module_SOURCES = ## platform nodist sources +aout_module_LDADD = +aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_aout_module_SOURCES) +CLEANFILES += $(nodist_aout_module_SOURCES) +MOD_FILES += aout.mod +MARKER_FILES += aout.marker +CLEANFILES += aout.marker + +aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += aout.module +MODULE_FILES += aout.module$(EXEEXT) +aout_module_SOURCES = loader/aout.c ## platform sources +nodist_aout_module_SOURCES = ## platform nodist sources +aout_module_LDADD = +aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_aout_module_SOURCES) +CLEANFILES += $(nodist_aout_module_SOURCES) +MOD_FILES += aout.mod +MARKER_FILES += aout.marker +CLEANFILES += aout.marker + +aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += bsd.module +MODULE_FILES += bsd.module$(EXEEXT) +bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +nodist_bsd_module_SOURCES = ## platform nodist sources +bsd_module_LDADD = +bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +BUILT_SOURCES += $(nodist_bsd_module_SOURCES) +CLEANFILES += $(nodist_bsd_module_SOURCES) +MOD_FILES += bsd.mod +MARKER_FILES += bsd.marker +CLEANFILES += bsd.marker + +bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += bsd.module +MODULE_FILES += bsd.module$(EXEEXT) +bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +nodist_bsd_module_SOURCES = ## platform nodist sources +bsd_module_LDADD = +bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +BUILT_SOURCES += $(nodist_bsd_module_SOURCES) +CLEANFILES += $(nodist_bsd_module_SOURCES) +MOD_FILES += bsd.mod +MARKER_FILES += bsd.marker +CLEANFILES += bsd.marker + +bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += bsd.module +MODULE_FILES += bsd.module$(EXEEXT) +bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +nodist_bsd_module_SOURCES = ## platform nodist sources +bsd_module_LDADD = +bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +BUILT_SOURCES += $(nodist_bsd_module_SOURCES) +CLEANFILES += $(nodist_bsd_module_SOURCES) +MOD_FILES += bsd.mod +MARKER_FILES += bsd.marker +CLEANFILES += bsd.marker + +bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += bsd.module +MODULE_FILES += bsd.module$(EXEEXT) +bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +nodist_bsd_module_SOURCES = ## platform nodist sources +bsd_module_LDADD = +bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +BUILT_SOURCES += $(nodist_bsd_module_SOURCES) +CLEANFILES += $(nodist_bsd_module_SOURCES) +MOD_FILES += bsd.mod +MARKER_FILES += bsd.marker +CLEANFILES += bsd.marker + +bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += bsd.module +MODULE_FILES += bsd.module$(EXEEXT) +bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +nodist_bsd_module_SOURCES = ## platform nodist sources +bsd_module_LDADD = +bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +BUILT_SOURCES += $(nodist_bsd_module_SOURCES) +CLEANFILES += $(nodist_bsd_module_SOURCES) +MOD_FILES += bsd.mod +MARKER_FILES += bsd.marker +CLEANFILES += bsd.marker + +bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += bsd.module +MODULE_FILES += bsd.module$(EXEEXT) +bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +nodist_bsd_module_SOURCES = ## platform nodist sources +bsd_module_LDADD = +bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +BUILT_SOURCES += $(nodist_bsd_module_SOURCES) +CLEANFILES += $(nodist_bsd_module_SOURCES) +MOD_FILES += bsd.mod +MARKER_FILES += bsd.marker +CLEANFILES += bsd.marker + +bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += bsd.module +MODULE_FILES += bsd.module$(EXEEXT) +bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +nodist_bsd_module_SOURCES = ## platform nodist sources +bsd_module_LDADD = +bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +BUILT_SOURCES += $(nodist_bsd_module_SOURCES) +CLEANFILES += $(nodist_bsd_module_SOURCES) +MOD_FILES += bsd.mod +MARKER_FILES += bsd.marker +CLEANFILES += bsd.marker + +bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += plan9.module +MODULE_FILES += plan9.module$(EXEEXT) +plan9_module_SOURCES = loader/i386/pc/plan9.c ## platform sources +nodist_plan9_module_SOURCES = ## platform nodist sources +plan9_module_LDADD = +plan9_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +plan9_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +plan9_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +plan9_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +plan9_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_plan9_module_SOURCES) +CLEANFILES += $(nodist_plan9_module_SOURCES) +MOD_FILES += plan9.mod +MARKER_FILES += plan9.marker +CLEANFILES += plan9.marker + +plan9.marker: $(plan9_module_SOURCES) $(nodist_plan9_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(plan9_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += linux16.module +MODULE_FILES += linux16.module$(EXEEXT) +linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux16_module_SOURCES = ## platform nodist sources +linux16_module_LDADD = +linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux16_module_SOURCES) +CLEANFILES += $(nodist_linux16_module_SOURCES) +MOD_FILES += linux16.mod +MARKER_FILES += linux16.marker +CLEANFILES += linux16.marker + +linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += linux16.module +MODULE_FILES += linux16.module$(EXEEXT) +linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux16_module_SOURCES = ## platform nodist sources +linux16_module_LDADD = +linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux16_module_SOURCES) +CLEANFILES += $(nodist_linux16_module_SOURCES) +MOD_FILES += linux16.mod +MARKER_FILES += linux16.marker +CLEANFILES += linux16.marker + +linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += linux16.module +MODULE_FILES += linux16.module$(EXEEXT) +linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux16_module_SOURCES = ## platform nodist sources +linux16_module_LDADD = +linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux16_module_SOURCES) +CLEANFILES += $(nodist_linux16_module_SOURCES) +MOD_FILES += linux16.mod +MARKER_FILES += linux16.marker +CLEANFILES += linux16.marker + +linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += linux16.module +MODULE_FILES += linux16.module$(EXEEXT) +linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux16_module_SOURCES = ## platform nodist sources +linux16_module_LDADD = +linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux16_module_SOURCES) +CLEANFILES += $(nodist_linux16_module_SOURCES) +MOD_FILES += linux16.mod +MARKER_FILES += linux16.marker +CLEANFILES += linux16.marker + +linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += linux16.module +MODULE_FILES += linux16.module$(EXEEXT) +linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux16_module_SOURCES = ## platform nodist sources +linux16_module_LDADD = +linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux16_module_SOURCES) +CLEANFILES += $(nodist_linux16_module_SOURCES) +MOD_FILES += linux16.mod +MARKER_FILES += linux16.marker +CLEANFILES += linux16.marker + +linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += linux16.module +MODULE_FILES += linux16.module$(EXEEXT) +linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux16_module_SOURCES = ## platform nodist sources +linux16_module_LDADD = +linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux16_module_SOURCES) +CLEANFILES += $(nodist_linux16_module_SOURCES) +MOD_FILES += linux16.mod +MARKER_FILES += linux16.marker +CLEANFILES += linux16.marker + +linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += linux16.module +MODULE_FILES += linux16.module$(EXEEXT) +linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux16_module_SOURCES = ## platform nodist sources +linux16_module_LDADD = +linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux16_module_SOURCES) +CLEANFILES += $(nodist_linux16_module_SOURCES) +MOD_FILES += linux16.mod +MARKER_FILES += linux16.marker +CLEANFILES += linux16.marker + +linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += ntldr.module +MODULE_FILES += ntldr.module$(EXEEXT) +ntldr_module_SOURCES = loader/i386/pc/ntldr.c ## platform sources +nodist_ntldr_module_SOURCES = ## platform nodist sources +ntldr_module_LDADD = +ntldr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ntldr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ntldr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ntldr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ntldr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ntldr_module_SOURCES) +CLEANFILES += $(nodist_ntldr_module_SOURCES) +MOD_FILES += ntldr.mod +MARKER_FILES += ntldr.marker +CLEANFILES += ntldr.marker + +ntldr.marker: $(ntldr_module_SOURCES) $(nodist_ntldr_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntldr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += truecrypt.module +MODULE_FILES += truecrypt.module$(EXEEXT) +truecrypt_module_SOURCES = loader/i386/pc/truecrypt.c ## platform sources +nodist_truecrypt_module_SOURCES = ## platform nodist sources +truecrypt_module_LDADD = +truecrypt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +truecrypt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +truecrypt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +truecrypt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +truecrypt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_truecrypt_module_SOURCES) +CLEANFILES += $(nodist_truecrypt_module_SOURCES) +MOD_FILES += truecrypt.mod +MARKER_FILES += truecrypt.marker +CLEANFILES += truecrypt.marker + +truecrypt.marker: $(truecrypt_module_SOURCES) $(nodist_truecrypt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(truecrypt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += freedos.module +MODULE_FILES += freedos.module$(EXEEXT) +freedos_module_SOURCES = loader/i386/pc/freedos.c ## platform sources +nodist_freedos_module_SOURCES = ## platform nodist sources +freedos_module_LDADD = +freedos_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +freedos_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +freedos_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +freedos_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +freedos_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_freedos_module_SOURCES) +CLEANFILES += $(nodist_freedos_module_SOURCES) +MOD_FILES += freedos.mod +MARKER_FILES += freedos.marker +CLEANFILES += freedos.marker + +freedos.marker: $(freedos_module_SOURCES) $(nodist_freedos_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedos_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += pxechain.module +MODULE_FILES += pxechain.module$(EXEEXT) +pxechain_module_SOURCES = loader/i386/pc/pxechainloader.c ## platform sources +nodist_pxechain_module_SOURCES = ## platform nodist sources +pxechain_module_LDADD = +pxechain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pxechain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pxechain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pxechain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pxechain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pxechain_module_SOURCES) +CLEANFILES += $(nodist_pxechain_module_SOURCES) +MOD_FILES += pxechain.mod +MARKER_FILES += pxechain.marker +CLEANFILES += pxechain.marker + +pxechain.marker: $(pxechain_module_SOURCES) $(nodist_pxechain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxechain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += multiboot2.module +MODULE_FILES += multiboot2.module$(EXEEXT) +multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +nodist_multiboot2_module_SOURCES = ## platform nodist sources +multiboot2_module_LDADD = +multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_multiboot2_module_SOURCES) +CLEANFILES += $(nodist_multiboot2_module_SOURCES) +MOD_FILES += multiboot2.mod +MARKER_FILES += multiboot2.marker +CLEANFILES += multiboot2.marker + +multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += multiboot.module +MODULE_FILES += multiboot.module$(EXEEXT) +multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +nodist_multiboot_module_SOURCES = ## platform nodist sources +multiboot_module_LDADD = +multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/multiboot_elfxx.c +BUILT_SOURCES += $(nodist_multiboot_module_SOURCES) +CLEANFILES += $(nodist_multiboot_module_SOURCES) +MOD_FILES += multiboot.mod +MARKER_FILES += multiboot.marker +CLEANFILES += multiboot.marker + +multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += multiboot.module +MODULE_FILES += multiboot.module$(EXEEXT) +multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +nodist_multiboot_module_SOURCES = ## platform nodist sources +multiboot_module_LDADD = +multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/multiboot_elfxx.c +BUILT_SOURCES += $(nodist_multiboot_module_SOURCES) +CLEANFILES += $(nodist_multiboot_module_SOURCES) +MOD_FILES += multiboot.mod +MARKER_FILES += multiboot.marker +CLEANFILES += multiboot.marker + +multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += multiboot.module +MODULE_FILES += multiboot.module$(EXEEXT) +multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +nodist_multiboot_module_SOURCES = ## platform nodist sources +multiboot_module_LDADD = +multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/multiboot_elfxx.c +BUILT_SOURCES += $(nodist_multiboot_module_SOURCES) +CLEANFILES += $(nodist_multiboot_module_SOURCES) +MOD_FILES += multiboot.mod +MARKER_FILES += multiboot.marker +CLEANFILES += multiboot.marker + +multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += multiboot.module +MODULE_FILES += multiboot.module$(EXEEXT) +multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +nodist_multiboot_module_SOURCES = ## platform nodist sources +multiboot_module_LDADD = +multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/multiboot_elfxx.c +BUILT_SOURCES += $(nodist_multiboot_module_SOURCES) +CLEANFILES += $(nodist_multiboot_module_SOURCES) +MOD_FILES += multiboot.mod +MARKER_FILES += multiboot.marker +CLEANFILES += multiboot.marker + +multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += multiboot.module +MODULE_FILES += multiboot.module$(EXEEXT) +multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +nodist_multiboot_module_SOURCES = ## platform nodist sources +multiboot_module_LDADD = +multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/multiboot_elfxx.c +BUILT_SOURCES += $(nodist_multiboot_module_SOURCES) +CLEANFILES += $(nodist_multiboot_module_SOURCES) +MOD_FILES += multiboot.mod +MARKER_FILES += multiboot.marker +CLEANFILES += multiboot.marker + +multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += multiboot.module +MODULE_FILES += multiboot.module$(EXEEXT) +multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +nodist_multiboot_module_SOURCES = ## platform nodist sources +multiboot_module_LDADD = +multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/multiboot_elfxx.c +BUILT_SOURCES += $(nodist_multiboot_module_SOURCES) +CLEANFILES += $(nodist_multiboot_module_SOURCES) +MOD_FILES += multiboot.mod +MARKER_FILES += multiboot.marker +CLEANFILES += multiboot.marker + +multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += multiboot.module +MODULE_FILES += multiboot.module$(EXEEXT) +multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +nodist_multiboot_module_SOURCES = ## platform nodist sources +multiboot_module_LDADD = +multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/multiboot_elfxx.c +BUILT_SOURCES += $(nodist_multiboot_module_SOURCES) +CLEANFILES += $(nodist_multiboot_module_SOURCES) +MOD_FILES += multiboot.mod +MARKER_FILES += multiboot.marker +CLEANFILES += multiboot.marker + +multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += xen_boot.module +MODULE_FILES += xen_boot.module$(EXEEXT) +xen_boot_module_SOURCES = loader/arm64/xen_boot.c lib/cmdline.c ## platform sources +nodist_xen_boot_module_SOURCES = ## platform nodist sources +xen_boot_module_LDADD = +xen_boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xen_boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xen_boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xen_boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xen_boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xen_boot_module_SOURCES) +CLEANFILES += $(nodist_xen_boot_module_SOURCES) +MOD_FILES += xen_boot.mod +MARKER_FILES += xen_boot.marker +CLEANFILES += xen_boot.marker + +xen_boot.marker: $(xen_boot_module_SOURCES) $(nodist_xen_boot_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = lib/i386/pc/vesa_modes_table.c loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/xen.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/i386/xen.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/mips/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/sparc64/ieee1275/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/powerpc/ieee1275/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/mips/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/ia64/efi/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/mips/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/arm/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/arm/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += linux.module +MODULE_FILES += linux.module$(EXEEXT) +linux_module_SOURCES = loader/arm64/linux.c loader/linux.c lib/cmdline.c ## platform sources +nodist_linux_module_SOURCES = ## platform nodist sources +linux_module_LDADD = +linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_linux_module_SOURCES) +CLEANFILES += $(nodist_linux_module_SOURCES) +MOD_FILES += linux.mod +MARKER_FILES += linux.marker +CLEANFILES += linux.marker + +linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += fdt.module +MODULE_FILES += fdt.module$(EXEEXT) +fdt_module_SOURCES = lib/fdt.c ## platform sources +nodist_fdt_module_SOURCES = ## platform nodist sources +fdt_module_LDADD = +fdt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fdt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fdt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fdt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fdt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fdt_module_SOURCES) +CLEANFILES += $(nodist_fdt_module_SOURCES) +MOD_FILES += fdt.mod +MARKER_FILES += fdt.marker +CLEANFILES += fdt.marker + +fdt.marker: $(fdt_module_SOURCES) $(nodist_fdt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += fdt.module +MODULE_FILES += fdt.module$(EXEEXT) +fdt_module_SOURCES = lib/fdt.c ## platform sources +nodist_fdt_module_SOURCES = ## platform nodist sources +fdt_module_LDADD = +fdt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fdt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fdt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fdt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fdt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fdt_module_SOURCES) +CLEANFILES += $(nodist_fdt_module_SOURCES) +MOD_FILES += fdt.mod +MARKER_FILES += fdt.marker +CLEANFILES += fdt.marker + +fdt.marker: $(fdt_module_SOURCES) $(nodist_fdt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += fdt.module +MODULE_FILES += fdt.module$(EXEEXT) +fdt_module_SOURCES = loader/arm64/fdt.c lib/fdt.c ## platform sources +nodist_fdt_module_SOURCES = ## platform nodist sources +fdt_module_LDADD = +fdt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fdt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fdt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fdt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fdt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fdt_module_SOURCES) +CLEANFILES += $(nodist_fdt_module_SOURCES) +MOD_FILES += fdt.mod +MARKER_FILES += fdt.marker +CLEANFILES += fdt.marker + +fdt.marker: $(fdt_module_SOURCES) $(nodist_fdt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += xnu.module +MODULE_FILES += xnu.module$(EXEEXT) +xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +nodist_xnu_module_SOURCES = ## platform nodist sources +xnu_module_LDADD = +xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xnu_module_SOURCES) +CLEANFILES += $(nodist_xnu_module_SOURCES) +MOD_FILES += xnu.mod +MARKER_FILES += xnu.marker +CLEANFILES += xnu.marker + +xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += xnu.module +MODULE_FILES += xnu.module$(EXEEXT) +xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +nodist_xnu_module_SOURCES = ## platform nodist sources +xnu_module_LDADD = +xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xnu_module_SOURCES) +CLEANFILES += $(nodist_xnu_module_SOURCES) +MOD_FILES += xnu.mod +MARKER_FILES += xnu.marker +CLEANFILES += xnu.marker + +xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += xnu.module +MODULE_FILES += xnu.module$(EXEEXT) +xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +nodist_xnu_module_SOURCES = ## platform nodist sources +xnu_module_LDADD = +xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xnu_module_SOURCES) +CLEANFILES += $(nodist_xnu_module_SOURCES) +MOD_FILES += xnu.mod +MARKER_FILES += xnu.marker +CLEANFILES += xnu.marker + +xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += xnu.module +MODULE_FILES += xnu.module$(EXEEXT) +xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +nodist_xnu_module_SOURCES = ## platform nodist sources +xnu_module_LDADD = +xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xnu_module_SOURCES) +CLEANFILES += $(nodist_xnu_module_SOURCES) +MOD_FILES += xnu.mod +MARKER_FILES += xnu.marker +CLEANFILES += xnu.marker + +xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += xnu.module +MODULE_FILES += xnu.module$(EXEEXT) +xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +nodist_xnu_module_SOURCES = ## platform nodist sources +xnu_module_LDADD = +xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xnu_module_SOURCES) +CLEANFILES += $(nodist_xnu_module_SOURCES) +MOD_FILES += xnu.mod +MARKER_FILES += xnu.marker +CLEANFILES += xnu.marker + +xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += random.module +MODULE_FILES += random.module$(EXEEXT) +random_module_SOURCES = kern/i386/tsc_pmtimer.c lib/i386/random.c lib/random.c ## platform sources +nodist_random_module_SOURCES = ## platform nodist sources +random_module_LDADD = +random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_random_module_SOURCES) +CLEANFILES += $(nodist_random_module_SOURCES) +MOD_FILES += random.mod +MARKER_FILES += random.marker +CLEANFILES += random.marker + +random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += random.module +MODULE_FILES += random.module$(EXEEXT) +random_module_SOURCES = lib/i386/random.c lib/random.c ## platform sources +nodist_random_module_SOURCES = ## platform nodist sources +random_module_LDADD = +random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_random_module_SOURCES) +CLEANFILES += $(nodist_random_module_SOURCES) +MOD_FILES += random.mod +MARKER_FILES += random.marker +CLEANFILES += random.marker + +random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += random.module +MODULE_FILES += random.module$(EXEEXT) +random_module_SOURCES = kern/i386/tsc_pmtimer.c lib/i386/random.c lib/random.c ## platform sources +nodist_random_module_SOURCES = ## platform nodist sources +random_module_LDADD = +random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_random_module_SOURCES) +CLEANFILES += $(nodist_random_module_SOURCES) +MOD_FILES += random.mod +MARKER_FILES += random.marker +CLEANFILES += random.marker + +random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += random.module +MODULE_FILES += random.module$(EXEEXT) +random_module_SOURCES = kern/i386/tsc_pmtimer.c lib/i386/random.c lib/random.c ## platform sources +nodist_random_module_SOURCES = ## platform nodist sources +random_module_LDADD = +random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_random_module_SOURCES) +CLEANFILES += $(nodist_random_module_SOURCES) +MOD_FILES += random.mod +MARKER_FILES += random.marker +CLEANFILES += random.marker + +random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += random.module +MODULE_FILES += random.module$(EXEEXT) +random_module_SOURCES = lib/i386/random.c lib/random.c ## platform sources +nodist_random_module_SOURCES = ## platform nodist sources +random_module_LDADD = +random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_random_module_SOURCES) +CLEANFILES += $(nodist_random_module_SOURCES) +MOD_FILES += random.mod +MARKER_FILES += random.marker +CLEANFILES += random.marker + +random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += macho.module +MODULE_FILES += macho.module$(EXEEXT) +macho_module_SOURCES = loader/macho.c loader/macho32.c loader/macho64.c loader/lzss.c ## platform sources +nodist_macho_module_SOURCES = ## platform nodist sources +macho_module_LDADD = +macho_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +macho_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +macho_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +macho_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +macho_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += loader/machoXX.c +BUILT_SOURCES += $(nodist_macho_module_SOURCES) +CLEANFILES += $(nodist_macho_module_SOURCES) +MOD_FILES += macho.mod +MARKER_FILES += macho.marker +CLEANFILES += macho.marker + +macho.marker: $(macho_module_SOURCES) $(nodist_macho_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_efi +platform_PROGRAMS += appleldr.module +MODULE_FILES += appleldr.module$(EXEEXT) +appleldr_module_SOURCES = loader/efi/appleloader.c ## platform sources +nodist_appleldr_module_SOURCES = ## platform nodist sources +appleldr_module_LDADD = +appleldr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +appleldr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +appleldr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +appleldr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +appleldr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_appleldr_module_SOURCES) +CLEANFILES += $(nodist_appleldr_module_SOURCES) +MOD_FILES += appleldr.mod +MARKER_FILES += appleldr.marker +CLEANFILES += appleldr.marker + +appleldr.marker: $(appleldr_module_SOURCES) $(nodist_appleldr_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += appleldr.module +MODULE_FILES += appleldr.module$(EXEEXT) +appleldr_module_SOURCES = loader/efi/appleloader.c ## platform sources +nodist_appleldr_module_SOURCES = ## platform nodist sources +appleldr_module_LDADD = +appleldr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +appleldr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +appleldr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +appleldr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +appleldr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_appleldr_module_SOURCES) +CLEANFILES += $(nodist_appleldr_module_SOURCES) +MOD_FILES += appleldr.mod +MARKER_FILES += appleldr.marker +CLEANFILES += appleldr.marker + +appleldr.marker: $(appleldr_module_SOURCES) $(nodist_appleldr_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += chain.module +MODULE_FILES += chain.module$(EXEEXT) +chain_module_SOURCES = loader/i386/pc/chainloader.c ## platform sources +nodist_chain_module_SOURCES = ## platform nodist sources +chain_module_LDADD = +chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_chain_module_SOURCES) +CLEANFILES += $(nodist_chain_module_SOURCES) +MOD_FILES += chain.mod +MARKER_FILES += chain.marker +CLEANFILES += chain.marker + +chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += chain.module +MODULE_FILES += chain.module$(EXEEXT) +chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +nodist_chain_module_SOURCES = ## platform nodist sources +chain_module_LDADD = +chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_chain_module_SOURCES) +CLEANFILES += $(nodist_chain_module_SOURCES) +MOD_FILES += chain.mod +MARKER_FILES += chain.marker +CLEANFILES += chain.marker + +chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += chain.module +MODULE_FILES += chain.module$(EXEEXT) +chain_module_SOURCES = loader/i386/coreboot/chainloader.c lib/LzmaDec.c ## platform sources +nodist_chain_module_SOURCES = ## platform nodist sources +chain_module_LDADD = +chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_chain_module_SOURCES) +CLEANFILES += $(nodist_chain_module_SOURCES) +MOD_FILES += chain.mod +MARKER_FILES += chain.marker +CLEANFILES += chain.marker + +chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += chain.module +MODULE_FILES += chain.module$(EXEEXT) +chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +nodist_chain_module_SOURCES = ## platform nodist sources +chain_module_LDADD = +chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_chain_module_SOURCES) +CLEANFILES += $(nodist_chain_module_SOURCES) +MOD_FILES += chain.mod +MARKER_FILES += chain.marker +CLEANFILES += chain.marker + +chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += chain.module +MODULE_FILES += chain.module$(EXEEXT) +chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +nodist_chain_module_SOURCES = ## platform nodist sources +chain_module_LDADD = +chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_chain_module_SOURCES) +CLEANFILES += $(nodist_chain_module_SOURCES) +MOD_FILES += chain.mod +MARKER_FILES += chain.marker +CLEANFILES += chain.marker + +chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += chain.module +MODULE_FILES += chain.module$(EXEEXT) +chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +nodist_chain_module_SOURCES = ## platform nodist sources +chain_module_LDADD = +chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_chain_module_SOURCES) +CLEANFILES += $(nodist_chain_module_SOURCES) +MOD_FILES += chain.mod +MARKER_FILES += chain.marker +CLEANFILES += chain.marker + +chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += chain.module +MODULE_FILES += chain.module$(EXEEXT) +chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +nodist_chain_module_SOURCES = ## platform nodist sources +chain_module_LDADD = +chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_chain_module_SOURCES) +CLEANFILES += $(nodist_chain_module_SOURCES) +MOD_FILES += chain.mod +MARKER_FILES += chain.marker +CLEANFILES += chain.marker + +chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/i386/pc/mmap.c mmap/i386/pc/mmap_helper.S mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/efi/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/efi/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/mips/uppermem.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/mips/uppermem.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/efi/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/mips/uppermem.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/efi/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += mmap.module +MODULE_FILES += mmap.module$(EXEEXT) +mmap_module_SOURCES = mmap/efi/mmap.c mmap/mmap.c ## platform sources +nodist_mmap_module_SOURCES = ## platform nodist sources +mmap_module_LDADD = +mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mmap_module_SOURCES) +CLEANFILES += $(nodist_mmap_module_SOURCES) +MOD_FILES += mmap.mod +MARKER_FILES += mmap.marker +CLEANFILES += mmap.marker + +mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += normal.module +MODULE_FILES += normal.module$(EXEEXT) +normal_module_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c normal/auth.c normal/autofs.c normal/color.c normal/completion.c normal/datetime.c normal/menu.c normal/menu_entry.c normal/menu_text.c normal/misc.c normal/crypto.c normal/term.c normal/context.c normal/charset.c lib/getline.c script/main.c script/script.c script/execute.c script/function.c script/lexer.c script/argv.c commands/menuentry.c unidata.c ## platform sources +nodist_normal_module_SOURCES = grub_script.tab.c grub_script.yy.c grub_script.tab.h grub_script.yy.h ## platform nodist sources +normal_module_LDADD = +normal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-redundant-decls +normal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +normal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_POSIX) +normal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +normal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += script/yylex.l script/parser.y +BUILT_SOURCES += $(nodist_normal_module_SOURCES) +CLEANFILES += $(nodist_normal_module_SOURCES) +MOD_FILES += normal.mod +MARKER_FILES += normal.marker +CLEANFILES += normal.marker + +normal.marker: $(normal_module_SOURCES) $(nodist_normal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_acorn.module +MODULE_FILES += part_acorn.module$(EXEEXT) +part_acorn_module_SOURCES = partmap/acorn.c ## platform sources +nodist_part_acorn_module_SOURCES = ## platform nodist sources +part_acorn_module_LDADD = +part_acorn_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_acorn_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_acorn_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_acorn_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_acorn_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_acorn_module_SOURCES) +CLEANFILES += $(nodist_part_acorn_module_SOURCES) +MOD_FILES += part_acorn.mod +MARKER_FILES += part_acorn.marker +CLEANFILES += part_acorn.marker + +part_acorn.marker: $(part_acorn_module_SOURCES) $(nodist_part_acorn_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_acorn_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_amiga.module +MODULE_FILES += part_amiga.module$(EXEEXT) +part_amiga_module_SOURCES = partmap/amiga.c ## platform sources +nodist_part_amiga_module_SOURCES = ## platform nodist sources +part_amiga_module_LDADD = +part_amiga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_amiga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_amiga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_amiga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_amiga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_amiga_module_SOURCES) +CLEANFILES += $(nodist_part_amiga_module_SOURCES) +MOD_FILES += part_amiga.mod +MARKER_FILES += part_amiga.marker +CLEANFILES += part_amiga.marker + +part_amiga.marker: $(part_amiga_module_SOURCES) $(nodist_part_amiga_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_amiga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_apple.module +MODULE_FILES += part_apple.module$(EXEEXT) +part_apple_module_SOURCES = partmap/apple.c ## platform sources +nodist_part_apple_module_SOURCES = ## platform nodist sources +part_apple_module_LDADD = +part_apple_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_apple_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_apple_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_apple_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_apple_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_apple_module_SOURCES) +CLEANFILES += $(nodist_part_apple_module_SOURCES) +MOD_FILES += part_apple.mod +MARKER_FILES += part_apple.marker +CLEANFILES += part_apple.marker + +part_apple.marker: $(part_apple_module_SOURCES) $(nodist_part_apple_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_apple_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_gpt.module +MODULE_FILES += part_gpt.module$(EXEEXT) +part_gpt_module_SOURCES = partmap/gpt.c ## platform sources +nodist_part_gpt_module_SOURCES = ## platform nodist sources +part_gpt_module_LDADD = +part_gpt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_gpt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_gpt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_gpt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_gpt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_gpt_module_SOURCES) +CLEANFILES += $(nodist_part_gpt_module_SOURCES) +MOD_FILES += part_gpt.mod +MARKER_FILES += part_gpt.marker +CLEANFILES += part_gpt.marker + +part_gpt.marker: $(part_gpt_module_SOURCES) $(nodist_part_gpt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_gpt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_msdos.module +MODULE_FILES += part_msdos.module$(EXEEXT) +part_msdos_module_SOURCES = partmap/msdos.c ## platform sources +nodist_part_msdos_module_SOURCES = ## platform nodist sources +part_msdos_module_LDADD = +part_msdos_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_msdos_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_msdos_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_msdos_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_msdos_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_msdos_module_SOURCES) +CLEANFILES += $(nodist_part_msdos_module_SOURCES) +MOD_FILES += part_msdos.mod +MARKER_FILES += part_msdos.marker +CLEANFILES += part_msdos.marker + +part_msdos.marker: $(part_msdos_module_SOURCES) $(nodist_part_msdos_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_msdos_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_sun.module +MODULE_FILES += part_sun.module$(EXEEXT) +part_sun_module_SOURCES = partmap/sun.c ## platform sources +nodist_part_sun_module_SOURCES = ## platform nodist sources +part_sun_module_LDADD = +part_sun_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_sun_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_sun_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_sun_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_sun_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_sun_module_SOURCES) +CLEANFILES += $(nodist_part_sun_module_SOURCES) +MOD_FILES += part_sun.mod +MARKER_FILES += part_sun.marker +CLEANFILES += part_sun.marker + +part_sun.marker: $(part_sun_module_SOURCES) $(nodist_part_sun_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sun_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_plan.module +MODULE_FILES += part_plan.module$(EXEEXT) +part_plan_module_SOURCES = partmap/plan.c ## platform sources +nodist_part_plan_module_SOURCES = ## platform nodist sources +part_plan_module_LDADD = +part_plan_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_plan_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_plan_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_plan_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_plan_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_plan_module_SOURCES) +CLEANFILES += $(nodist_part_plan_module_SOURCES) +MOD_FILES += part_plan.mod +MARKER_FILES += part_plan.marker +CLEANFILES += part_plan.marker + +part_plan.marker: $(part_plan_module_SOURCES) $(nodist_part_plan_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_plan_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_dvh.module +MODULE_FILES += part_dvh.module$(EXEEXT) +part_dvh_module_SOURCES = partmap/dvh.c ## platform sources +nodist_part_dvh_module_SOURCES = ## platform nodist sources +part_dvh_module_LDADD = +part_dvh_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_dvh_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_dvh_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_dvh_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_dvh_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_dvh_module_SOURCES) +CLEANFILES += $(nodist_part_dvh_module_SOURCES) +MOD_FILES += part_dvh.mod +MARKER_FILES += part_dvh.marker +CLEANFILES += part_dvh.marker + +part_dvh.marker: $(part_dvh_module_SOURCES) $(nodist_part_dvh_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dvh_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_bsd.module +MODULE_FILES += part_bsd.module$(EXEEXT) +part_bsd_module_SOURCES = partmap/bsdlabel.c ## platform sources +nodist_part_bsd_module_SOURCES = ## platform nodist sources +part_bsd_module_LDADD = +part_bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_bsd_module_SOURCES) +CLEANFILES += $(nodist_part_bsd_module_SOURCES) +MOD_FILES += part_bsd.mod +MARKER_FILES += part_bsd.marker +CLEANFILES += part_bsd.marker + +part_bsd.marker: $(part_bsd_module_SOURCES) $(nodist_part_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_sunpc.module +MODULE_FILES += part_sunpc.module$(EXEEXT) +part_sunpc_module_SOURCES = partmap/sunpc.c ## platform sources +nodist_part_sunpc_module_SOURCES = ## platform nodist sources +part_sunpc_module_LDADD = +part_sunpc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_sunpc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_sunpc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_sunpc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_sunpc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_sunpc_module_SOURCES) +CLEANFILES += $(nodist_part_sunpc_module_SOURCES) +MOD_FILES += part_sunpc.mod +MARKER_FILES += part_sunpc.marker +CLEANFILES += part_sunpc.marker + +part_sunpc.marker: $(part_sunpc_module_SOURCES) $(nodist_part_sunpc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sunpc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += part_dfly.module +MODULE_FILES += part_dfly.module$(EXEEXT) +part_dfly_module_SOURCES = partmap/dfly.c ## platform sources +nodist_part_dfly_module_SOURCES = ## platform nodist sources +part_dfly_module_LDADD = +part_dfly_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_dfly_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_dfly_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_dfly_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_dfly_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_part_dfly_module_SOURCES) +CLEANFILES += $(nodist_part_dfly_module_SOURCES) +MOD_FILES += part_dfly.mod +MARKER_FILES += part_dfly.marker +CLEANFILES += part_dfly.marker + +part_dfly.marker: $(part_dfly_module_SOURCES) $(nodist_part_dfly_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dfly_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += msdospart.module +MODULE_FILES += msdospart.module$(EXEEXT) +msdospart_module_SOURCES = parttool/msdospart.c ## platform sources +nodist_msdospart_module_SOURCES = ## platform nodist sources +msdospart_module_LDADD = +msdospart_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +msdospart_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +msdospart_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +msdospart_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +msdospart_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_msdospart_module_SOURCES) +CLEANFILES += $(nodist_msdospart_module_SOURCES) +MOD_FILES += msdospart.mod +MARKER_FILES += msdospart.marker +CLEANFILES += msdospart.marker + +msdospart.marker: $(msdospart_module_SOURCES) $(nodist_msdospart_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(msdospart_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += at_keyboard.module +MODULE_FILES += at_keyboard.module$(EXEEXT) +at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +nodist_at_keyboard_module_SOURCES = ## platform nodist sources +at_keyboard_module_LDADD = +at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_at_keyboard_module_SOURCES) +CLEANFILES += $(nodist_at_keyboard_module_SOURCES) +MOD_FILES += at_keyboard.mod +MARKER_FILES += at_keyboard.marker +CLEANFILES += at_keyboard.marker + +at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += at_keyboard.module +MODULE_FILES += at_keyboard.module$(EXEEXT) +at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +nodist_at_keyboard_module_SOURCES = ## platform nodist sources +at_keyboard_module_LDADD = +at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_at_keyboard_module_SOURCES) +CLEANFILES += $(nodist_at_keyboard_module_SOURCES) +MOD_FILES += at_keyboard.mod +MARKER_FILES += at_keyboard.marker +CLEANFILES += at_keyboard.marker + +at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += at_keyboard.module +MODULE_FILES += at_keyboard.module$(EXEEXT) +at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +nodist_at_keyboard_module_SOURCES = ## platform nodist sources +at_keyboard_module_LDADD = +at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_at_keyboard_module_SOURCES) +CLEANFILES += $(nodist_at_keyboard_module_SOURCES) +MOD_FILES += at_keyboard.mod +MARKER_FILES += at_keyboard.marker +CLEANFILES += at_keyboard.marker + +at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += at_keyboard.module +MODULE_FILES += at_keyboard.module$(EXEEXT) +at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +nodist_at_keyboard_module_SOURCES = ## platform nodist sources +at_keyboard_module_LDADD = +at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_at_keyboard_module_SOURCES) +CLEANFILES += $(nodist_at_keyboard_module_SOURCES) +MOD_FILES += at_keyboard.mod +MARKER_FILES += at_keyboard.marker +CLEANFILES += at_keyboard.marker + +at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += at_keyboard.module +MODULE_FILES += at_keyboard.module$(EXEEXT) +at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +nodist_at_keyboard_module_SOURCES = ## platform nodist sources +at_keyboard_module_LDADD = +at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_at_keyboard_module_SOURCES) +CLEANFILES += $(nodist_at_keyboard_module_SOURCES) +MOD_FILES += at_keyboard.mod +MARKER_FILES += at_keyboard.marker +CLEANFILES += at_keyboard.marker + +at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += at_keyboard.module +MODULE_FILES += at_keyboard.module$(EXEEXT) +at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +nodist_at_keyboard_module_SOURCES = ## platform nodist sources +at_keyboard_module_LDADD = +at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_at_keyboard_module_SOURCES) +CLEANFILES += $(nodist_at_keyboard_module_SOURCES) +MOD_FILES += at_keyboard.mod +MARKER_FILES += at_keyboard.marker +CLEANFILES += at_keyboard.marker + +at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += at_keyboard.module +MODULE_FILES += at_keyboard.module$(EXEEXT) +at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +nodist_at_keyboard_module_SOURCES = ## platform nodist sources +at_keyboard_module_LDADD = +at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_at_keyboard_module_SOURCES) +CLEANFILES += $(nodist_at_keyboard_module_SOURCES) +MOD_FILES += at_keyboard.mod +MARKER_FILES += at_keyboard.marker +CLEANFILES += at_keyboard.marker + +at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += gfxterm.module +MODULE_FILES += gfxterm.module$(EXEEXT) +gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +nodist_gfxterm_module_SOURCES = ## platform nodist sources +gfxterm_module_LDADD = +gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_module_SOURCES) +MOD_FILES += gfxterm.mod +MARKER_FILES += gfxterm.marker +CLEANFILES += gfxterm.marker + +gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += gfxterm_background.module +MODULE_FILES += gfxterm_background.module$(EXEEXT) +gfxterm_background_module_SOURCES = term/gfxterm_background.c ## platform sources +nodist_gfxterm_background_module_SOURCES = ## platform nodist sources +gfxterm_background_module_LDADD = +gfxterm_background_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_background_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_background_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_background_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_background_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_background_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_background_module_SOURCES) +MOD_FILES += gfxterm_background.mod +MARKER_FILES += gfxterm_background.marker +CLEANFILES += gfxterm_background.marker + +gfxterm_background.marker: $(gfxterm_background_module_SOURCES) $(nodist_gfxterm_background_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_background_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/efi/serial.c term/ns8250.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/ieee1275/serial.c term/ns8250.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/efi/serial.c term/ns8250.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/ieee1275/serial.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/ieee1275/serial.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/arc/serial.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/efi/serial.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/efi/serial.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += serial.module +MODULE_FILES += serial.module$(EXEEXT) +serial_module_SOURCES = term/efi/serial.c term/serial.c ## platform sources +nodist_serial_module_SOURCES = ## platform nodist sources +serial_module_LDADD = +serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_serial_module_SOURCES) +CLEANFILES += $(nodist_serial_module_SOURCES) +MOD_FILES += serial.mod +MARKER_FILES += serial.marker +CLEANFILES += serial.marker + +serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += sendkey.module +MODULE_FILES += sendkey.module$(EXEEXT) +sendkey_module_SOURCES = commands/i386/pc/sendkey.c ## platform sources +nodist_sendkey_module_SOURCES = ## platform nodist sources +sendkey_module_LDADD = +sendkey_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sendkey_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sendkey_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sendkey_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sendkey_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_sendkey_module_SOURCES) +CLEANFILES += $(nodist_sendkey_module_SOURCES) +MOD_FILES += sendkey.mod +MARKER_FILES += sendkey.marker +CLEANFILES += sendkey.marker + +sendkey.marker: $(sendkey_module_SOURCES) $(nodist_sendkey_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sendkey_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += terminfo.module +MODULE_FILES += terminfo.module$(EXEEXT) +terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +nodist_terminfo_module_SOURCES = ## platform nodist sources +terminfo_module_LDADD = +terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_terminfo_module_SOURCES) +CLEANFILES += $(nodist_terminfo_module_SOURCES) +MOD_FILES += terminfo.mod +MARKER_FILES += terminfo.marker +CLEANFILES += terminfo.marker + +terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += usb_keyboard.module +MODULE_FILES += usb_keyboard.module$(EXEEXT) +usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +usb_keyboard_module_LDADD = +usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_usb_keyboard_module_SOURCES) +CLEANFILES += $(nodist_usb_keyboard_module_SOURCES) +MOD_FILES += usb_keyboard.mod +MARKER_FILES += usb_keyboard.marker +CLEANFILES += usb_keyboard.marker + +usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += vga.module +MODULE_FILES += vga.module$(EXEEXT) +vga_module_SOURCES = video/i386/pc/vga.c ## platform sources +nodist_vga_module_SOURCES = ## platform nodist sources +vga_module_LDADD = +vga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +vga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +vga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +vga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +vga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_vga_module_SOURCES) +CLEANFILES += $(nodist_vga_module_SOURCES) +MOD_FILES += vga.mod +MARKER_FILES += vga.marker +CLEANFILES += vga.marker + +vga.marker: $(vga_module_SOURCES) $(nodist_vga_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += vga_text.module +MODULE_FILES += vga_text.module$(EXEEXT) +vga_text_module_SOURCES = term/i386/pc/vga_text.c ## platform sources +nodist_vga_text_module_SOURCES = ## platform nodist sources +vga_text_module_LDADD = +vga_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +vga_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +vga_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +vga_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +vga_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_vga_text_module_SOURCES) +CLEANFILES += $(nodist_vga_text_module_SOURCES) +MOD_FILES += vga_text.mod +MARKER_FILES += vga_text.marker +CLEANFILES += vga_text.marker + +vga_text.marker: $(vga_text_module_SOURCES) $(nodist_vga_text_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += mda_text.module +MODULE_FILES += mda_text.module$(EXEEXT) +mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +nodist_mda_text_module_SOURCES = ## platform nodist sources +mda_text_module_LDADD = +mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mda_text_module_SOURCES) +CLEANFILES += $(nodist_mda_text_module_SOURCES) +MOD_FILES += mda_text.mod +MARKER_FILES += mda_text.marker +CLEANFILES += mda_text.marker + +mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += mda_text.module +MODULE_FILES += mda_text.module$(EXEEXT) +mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +nodist_mda_text_module_SOURCES = ## platform nodist sources +mda_text_module_LDADD = +mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mda_text_module_SOURCES) +CLEANFILES += $(nodist_mda_text_module_SOURCES) +MOD_FILES += mda_text.mod +MARKER_FILES += mda_text.marker +CLEANFILES += mda_text.marker + +mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += mda_text.module +MODULE_FILES += mda_text.module$(EXEEXT) +mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +nodist_mda_text_module_SOURCES = ## platform nodist sources +mda_text_module_LDADD = +mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mda_text_module_SOURCES) +CLEANFILES += $(nodist_mda_text_module_SOURCES) +MOD_FILES += mda_text.mod +MARKER_FILES += mda_text.marker +CLEANFILES += mda_text.marker + +mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += mda_text.module +MODULE_FILES += mda_text.module$(EXEEXT) +mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +nodist_mda_text_module_SOURCES = ## platform nodist sources +mda_text_module_LDADD = +mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mda_text_module_SOURCES) +CLEANFILES += $(nodist_mda_text_module_SOURCES) +MOD_FILES += mda_text.mod +MARKER_FILES += mda_text.marker +CLEANFILES += mda_text.marker + +mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += video_cirrus.module +MODULE_FILES += video_cirrus.module$(EXEEXT) +video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +nodist_video_cirrus_module_SOURCES = ## platform nodist sources +video_cirrus_module_LDADD = +video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_cirrus_module_SOURCES) +CLEANFILES += $(nodist_video_cirrus_module_SOURCES) +MOD_FILES += video_cirrus.mod +MARKER_FILES += video_cirrus.marker +CLEANFILES += video_cirrus.marker + +video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += video_cirrus.module +MODULE_FILES += video_cirrus.module$(EXEEXT) +video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +nodist_video_cirrus_module_SOURCES = ## platform nodist sources +video_cirrus_module_LDADD = +video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_cirrus_module_SOURCES) +CLEANFILES += $(nodist_video_cirrus_module_SOURCES) +MOD_FILES += video_cirrus.mod +MARKER_FILES += video_cirrus.marker +CLEANFILES += video_cirrus.marker + +video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += video_cirrus.module +MODULE_FILES += video_cirrus.module$(EXEEXT) +video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +nodist_video_cirrus_module_SOURCES = ## platform nodist sources +video_cirrus_module_LDADD = +video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_cirrus_module_SOURCES) +CLEANFILES += $(nodist_video_cirrus_module_SOURCES) +MOD_FILES += video_cirrus.mod +MARKER_FILES += video_cirrus.marker +CLEANFILES += video_cirrus.marker + +video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += video_cirrus.module +MODULE_FILES += video_cirrus.module$(EXEEXT) +video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +nodist_video_cirrus_module_SOURCES = ## platform nodist sources +video_cirrus_module_LDADD = +video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_cirrus_module_SOURCES) +CLEANFILES += $(nodist_video_cirrus_module_SOURCES) +MOD_FILES += video_cirrus.mod +MARKER_FILES += video_cirrus.marker +CLEANFILES += video_cirrus.marker + +video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += video_cirrus.module +MODULE_FILES += video_cirrus.module$(EXEEXT) +video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +nodist_video_cirrus_module_SOURCES = ## platform nodist sources +video_cirrus_module_LDADD = +video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_cirrus_module_SOURCES) +CLEANFILES += $(nodist_video_cirrus_module_SOURCES) +MOD_FILES += video_cirrus.mod +MARKER_FILES += video_cirrus.marker +CLEANFILES += video_cirrus.marker + +video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += video_cirrus.module +MODULE_FILES += video_cirrus.module$(EXEEXT) +video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +nodist_video_cirrus_module_SOURCES = ## platform nodist sources +video_cirrus_module_LDADD = +video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_cirrus_module_SOURCES) +CLEANFILES += $(nodist_video_cirrus_module_SOURCES) +MOD_FILES += video_cirrus.mod +MARKER_FILES += video_cirrus.marker +CLEANFILES += video_cirrus.marker + +video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += video_cirrus.module +MODULE_FILES += video_cirrus.module$(EXEEXT) +video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +nodist_video_cirrus_module_SOURCES = ## platform nodist sources +video_cirrus_module_LDADD = +video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_cirrus_module_SOURCES) +CLEANFILES += $(nodist_video_cirrus_module_SOURCES) +MOD_FILES += video_cirrus.mod +MARKER_FILES += video_cirrus.marker +CLEANFILES += video_cirrus.marker + +video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += video_bochs.module +MODULE_FILES += video_bochs.module$(EXEEXT) +video_bochs_module_SOURCES = video/bochs.c ## platform sources +nodist_video_bochs_module_SOURCES = ## platform nodist sources +video_bochs_module_LDADD = +video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_bochs_module_SOURCES) +CLEANFILES += $(nodist_video_bochs_module_SOURCES) +MOD_FILES += video_bochs.mod +MARKER_FILES += video_bochs.marker +CLEANFILES += video_bochs.marker + +video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += video_bochs.module +MODULE_FILES += video_bochs.module$(EXEEXT) +video_bochs_module_SOURCES = video/bochs.c ## platform sources +nodist_video_bochs_module_SOURCES = ## platform nodist sources +video_bochs_module_LDADD = +video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_bochs_module_SOURCES) +CLEANFILES += $(nodist_video_bochs_module_SOURCES) +MOD_FILES += video_bochs.mod +MARKER_FILES += video_bochs.marker +CLEANFILES += video_bochs.marker + +video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += video_bochs.module +MODULE_FILES += video_bochs.module$(EXEEXT) +video_bochs_module_SOURCES = video/bochs.c ## platform sources +nodist_video_bochs_module_SOURCES = ## platform nodist sources +video_bochs_module_LDADD = +video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_bochs_module_SOURCES) +CLEANFILES += $(nodist_video_bochs_module_SOURCES) +MOD_FILES += video_bochs.mod +MARKER_FILES += video_bochs.marker +CLEANFILES += video_bochs.marker + +video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += video_bochs.module +MODULE_FILES += video_bochs.module$(EXEEXT) +video_bochs_module_SOURCES = video/bochs.c ## platform sources +nodist_video_bochs_module_SOURCES = ## platform nodist sources +video_bochs_module_LDADD = +video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_bochs_module_SOURCES) +CLEANFILES += $(nodist_video_bochs_module_SOURCES) +MOD_FILES += video_bochs.mod +MARKER_FILES += video_bochs.marker +CLEANFILES += video_bochs.marker + +video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += video_bochs.module +MODULE_FILES += video_bochs.module$(EXEEXT) +video_bochs_module_SOURCES = video/bochs.c ## platform sources +nodist_video_bochs_module_SOURCES = ## platform nodist sources +video_bochs_module_LDADD = +video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_bochs_module_SOURCES) +CLEANFILES += $(nodist_video_bochs_module_SOURCES) +MOD_FILES += video_bochs.mod +MARKER_FILES += video_bochs.marker +CLEANFILES += video_bochs.marker + +video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += video_bochs.module +MODULE_FILES += video_bochs.module$(EXEEXT) +video_bochs_module_SOURCES = video/bochs.c ## platform sources +nodist_video_bochs_module_SOURCES = ## platform nodist sources +video_bochs_module_LDADD = +video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_bochs_module_SOURCES) +CLEANFILES += $(nodist_video_bochs_module_SOURCES) +MOD_FILES += video_bochs.mod +MARKER_FILES += video_bochs.marker +CLEANFILES += video_bochs.marker + +video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += video_bochs.module +MODULE_FILES += video_bochs.module$(EXEEXT) +video_bochs_module_SOURCES = video/bochs.c ## platform sources +nodist_video_bochs_module_SOURCES = ## platform nodist sources +video_bochs_module_LDADD = +video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_bochs_module_SOURCES) +CLEANFILES += $(nodist_video_bochs_module_SOURCES) +MOD_FILES += video_bochs.mod +MARKER_FILES += video_bochs.marker +CLEANFILES += video_bochs.marker + +video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += functional_test.module +MODULE_FILES += functional_test.module$(EXEEXT) +functional_test_module_SOURCES = tests/lib/functional_test.c tests/lib/test.c tests/checksums.h tests/video_checksum.c tests/fake_input.c video/capture.c ## platform sources +nodist_functional_test_module_SOURCES = ## platform nodist sources +functional_test_module_LDADD = +functional_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +functional_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +functional_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +functional_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +functional_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_functional_test_module_SOURCES) +CLEANFILES += $(nodist_functional_test_module_SOURCES) +MOD_FILES += functional_test.mod +MARKER_FILES += functional_test.marker +CLEANFILES += functional_test.marker + +functional_test.marker: $(functional_test_module_SOURCES) $(nodist_functional_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += exfctest.module +MODULE_FILES += exfctest.module$(EXEEXT) +exfctest_module_SOURCES = tests/example_functional_test.c ## platform sources +nodist_exfctest_module_SOURCES = ## platform nodist sources +exfctest_module_LDADD = +exfctest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +exfctest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +exfctest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +exfctest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +exfctest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_exfctest_module_SOURCES) +CLEANFILES += $(nodist_exfctest_module_SOURCES) +MOD_FILES += exfctest.mod +MARKER_FILES += exfctest.marker +CLEANFILES += exfctest.marker + +exfctest.marker: $(exfctest_module_SOURCES) $(nodist_exfctest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfctest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += setjmp_test.module +MODULE_FILES += setjmp_test.module$(EXEEXT) +setjmp_test_module_SOURCES = tests/setjmp_test.c ## platform sources +nodist_setjmp_test_module_SOURCES = ## platform nodist sources +setjmp_test_module_LDADD = +setjmp_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setjmp_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setjmp_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setjmp_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setjmp_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_setjmp_test_module_SOURCES) +CLEANFILES += $(nodist_setjmp_test_module_SOURCES) +MOD_FILES += setjmp_test.mod +MARKER_FILES += setjmp_test.marker +CLEANFILES += setjmp_test.marker + +setjmp_test.marker: $(setjmp_test_module_SOURCES) $(nodist_setjmp_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += signature_test.module +MODULE_FILES += signature_test.module$(EXEEXT) +signature_test_module_SOURCES = tests/signature_test.c tests/signatures.h ## platform sources +nodist_signature_test_module_SOURCES = ## platform nodist sources +signature_test_module_LDADD = +signature_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +signature_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +signature_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +signature_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +signature_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_signature_test_module_SOURCES) +CLEANFILES += $(nodist_signature_test_module_SOURCES) +MOD_FILES += signature_test.mod +MARKER_FILES += signature_test.marker +CLEANFILES += signature_test.marker + +signature_test.marker: $(signature_test_module_SOURCES) $(nodist_signature_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(signature_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += sleep_test.module +MODULE_FILES += sleep_test.module$(EXEEXT) +sleep_test_module_SOURCES = tests/sleep_test.c ## platform sources +nodist_sleep_test_module_SOURCES = ## platform nodist sources +sleep_test_module_LDADD = +sleep_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sleep_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sleep_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sleep_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sleep_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_sleep_test_module_SOURCES) +CLEANFILES += $(nodist_sleep_test_module_SOURCES) +MOD_FILES += sleep_test.mod +MARKER_FILES += sleep_test.marker +CLEANFILES += sleep_test.marker + +sleep_test.marker: $(sleep_test_module_SOURCES) $(nodist_sleep_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += xnu_uuid_test.module +MODULE_FILES += xnu_uuid_test.module$(EXEEXT) +xnu_uuid_test_module_SOURCES = tests/xnu_uuid_test.c ## platform sources +nodist_xnu_uuid_test_module_SOURCES = ## platform nodist sources +xnu_uuid_test_module_LDADD = +xnu_uuid_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_uuid_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_uuid_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_uuid_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_uuid_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xnu_uuid_test_module_SOURCES) +CLEANFILES += $(nodist_xnu_uuid_test_module_SOURCES) +MOD_FILES += xnu_uuid_test.mod +MARKER_FILES += xnu_uuid_test.marker +CLEANFILES += xnu_uuid_test.marker + +xnu_uuid_test.marker: $(xnu_uuid_test_module_SOURCES) $(nodist_xnu_uuid_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += pbkdf2_test.module +MODULE_FILES += pbkdf2_test.module$(EXEEXT) +pbkdf2_test_module_SOURCES = tests/pbkdf2_test.c ## platform sources +nodist_pbkdf2_test_module_SOURCES = ## platform nodist sources +pbkdf2_test_module_LDADD = +pbkdf2_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pbkdf2_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pbkdf2_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pbkdf2_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pbkdf2_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pbkdf2_test_module_SOURCES) +CLEANFILES += $(nodist_pbkdf2_test_module_SOURCES) +MOD_FILES += pbkdf2_test.mod +MARKER_FILES += pbkdf2_test.marker +CLEANFILES += pbkdf2_test.marker + +pbkdf2_test.marker: $(pbkdf2_test_module_SOURCES) $(nodist_pbkdf2_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_emu +platform_PROGRAMS += legacy_password_test.module +MODULE_FILES += legacy_password_test.module$(EXEEXT) +legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +legacy_password_test_module_LDADD = +legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacy_password_test_module_SOURCES) +CLEANFILES += $(nodist_legacy_password_test_module_SOURCES) +MOD_FILES += legacy_password_test.mod +MARKER_FILES += legacy_password_test.marker +CLEANFILES += legacy_password_test.marker + +legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += legacy_password_test.module +MODULE_FILES += legacy_password_test.module$(EXEEXT) +legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +legacy_password_test_module_LDADD = +legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacy_password_test_module_SOURCES) +CLEANFILES += $(nodist_legacy_password_test_module_SOURCES) +MOD_FILES += legacy_password_test.mod +MARKER_FILES += legacy_password_test.marker +CLEANFILES += legacy_password_test.marker + +legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += legacy_password_test.module +MODULE_FILES += legacy_password_test.module$(EXEEXT) +legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +legacy_password_test_module_LDADD = +legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacy_password_test_module_SOURCES) +CLEANFILES += $(nodist_legacy_password_test_module_SOURCES) +MOD_FILES += legacy_password_test.mod +MARKER_FILES += legacy_password_test.marker +CLEANFILES += legacy_password_test.marker + +legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += legacy_password_test.module +MODULE_FILES += legacy_password_test.module$(EXEEXT) +legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +legacy_password_test_module_LDADD = +legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacy_password_test_module_SOURCES) +CLEANFILES += $(nodist_legacy_password_test_module_SOURCES) +MOD_FILES += legacy_password_test.mod +MARKER_FILES += legacy_password_test.marker +CLEANFILES += legacy_password_test.marker + +legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += legacy_password_test.module +MODULE_FILES += legacy_password_test.module$(EXEEXT) +legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +legacy_password_test_module_LDADD = +legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacy_password_test_module_SOURCES) +CLEANFILES += $(nodist_legacy_password_test_module_SOURCES) +MOD_FILES += legacy_password_test.mod +MARKER_FILES += legacy_password_test.marker +CLEANFILES += legacy_password_test.marker + +legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += legacy_password_test.module +MODULE_FILES += legacy_password_test.module$(EXEEXT) +legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +legacy_password_test_module_LDADD = +legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacy_password_test_module_SOURCES) +CLEANFILES += $(nodist_legacy_password_test_module_SOURCES) +MOD_FILES += legacy_password_test.mod +MARKER_FILES += legacy_password_test.marker +CLEANFILES += legacy_password_test.marker + +legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_loongson +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += div.module +MODULE_FILES += div.module$(EXEEXT) +div_module_SOURCES = lib/division.c ## platform sources +nodist_div_module_SOURCES = ## platform nodist sources +div_module_LDADD = +div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_module_SOURCES) +CLEANFILES += $(nodist_div_module_SOURCES) +MOD_FILES += div.mod +MARKER_FILES += div.marker +CLEANFILES += div.marker + +div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += div_test.module +MODULE_FILES += div_test.module$(EXEEXT) +div_test_module_SOURCES = tests/div_test.c ## platform sources +nodist_div_test_module_SOURCES = ## platform nodist sources +div_test_module_LDADD = +div_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_div_test_module_SOURCES) +CLEANFILES += $(nodist_div_test_module_SOURCES) +MOD_FILES += div_test.mod +MARKER_FILES += div_test.marker +CLEANFILES += div_test.marker + +div_test.marker: $(div_test_module_SOURCES) $(nodist_div_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += mul_test.module +MODULE_FILES += mul_test.module$(EXEEXT) +mul_test_module_SOURCES = tests/mul_test.c ## platform sources +nodist_mul_test_module_SOURCES = ## platform nodist sources +mul_test_module_LDADD = +mul_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mul_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mul_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mul_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mul_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mul_test_module_SOURCES) +CLEANFILES += $(nodist_mul_test_module_SOURCES) +MOD_FILES += mul_test.mod +MARKER_FILES += mul_test.marker +CLEANFILES += mul_test.marker + +mul_test.marker: $(mul_test_module_SOURCES) $(nodist_mul_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mul_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += shift_test.module +MODULE_FILES += shift_test.module$(EXEEXT) +shift_test_module_SOURCES = tests/shift_test.c ## platform sources +nodist_shift_test_module_SOURCES = ## platform nodist sources +shift_test_module_LDADD = +shift_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +shift_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +shift_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +shift_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +shift_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_shift_test_module_SOURCES) +CLEANFILES += $(nodist_shift_test_module_SOURCES) +MOD_FILES += shift_test.mod +MARKER_FILES += shift_test.marker +CLEANFILES += shift_test.marker + +shift_test.marker: $(shift_test_module_SOURCES) $(nodist_shift_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shift_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += cmp_test.module +MODULE_FILES += cmp_test.module$(EXEEXT) +cmp_test_module_SOURCES = tests/cmp_test.c ## platform sources +nodist_cmp_test_module_SOURCES = ## platform nodist sources +cmp_test_module_LDADD = +cmp_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmp_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmp_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmp_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmp_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmp_test_module_SOURCES) +CLEANFILES += $(nodist_cmp_test_module_SOURCES) +MOD_FILES += cmp_test.mod +MARKER_FILES += cmp_test.marker +CLEANFILES += cmp_test.marker + +cmp_test.marker: $(cmp_test_module_SOURCES) $(nodist_cmp_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += ctz_test.module +MODULE_FILES += ctz_test.module$(EXEEXT) +ctz_test_module_SOURCES = tests/ctz_test.c ## platform sources +nodist_ctz_test_module_SOURCES = ## platform nodist sources +ctz_test_module_LDADD = +ctz_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ctz_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ctz_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ctz_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ctz_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ctz_test_module_SOURCES) +CLEANFILES += $(nodist_ctz_test_module_SOURCES) +MOD_FILES += ctz_test.mod +MARKER_FILES += ctz_test.marker +CLEANFILES += ctz_test.marker + +ctz_test.marker: $(ctz_test_module_SOURCES) $(nodist_ctz_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ctz_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += bswap_test.module +MODULE_FILES += bswap_test.module$(EXEEXT) +bswap_test_module_SOURCES = tests/bswap_test.c ## platform sources +nodist_bswap_test_module_SOURCES = ## platform nodist sources +bswap_test_module_LDADD = +bswap_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bswap_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bswap_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bswap_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bswap_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bswap_test_module_SOURCES) +CLEANFILES += $(nodist_bswap_test_module_SOURCES) +MOD_FILES += bswap_test.mod +MARKER_FILES += bswap_test.marker +CLEANFILES += bswap_test.marker + +bswap_test.marker: $(bswap_test_module_SOURCES) $(nodist_bswap_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bswap_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += videotest_checksum.module +MODULE_FILES += videotest_checksum.module$(EXEEXT) +videotest_checksum_module_SOURCES = tests/videotest_checksum.c ## platform sources +nodist_videotest_checksum_module_SOURCES = ## platform nodist sources +videotest_checksum_module_LDADD = +videotest_checksum_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +videotest_checksum_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +videotest_checksum_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +videotest_checksum_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +videotest_checksum_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_videotest_checksum_module_SOURCES) +CLEANFILES += $(nodist_videotest_checksum_module_SOURCES) +MOD_FILES += videotest_checksum.mod +MARKER_FILES += videotest_checksum.marker +CLEANFILES += videotest_checksum.marker + +videotest_checksum.marker: $(videotest_checksum_module_SOURCES) $(nodist_videotest_checksum_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_checksum_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gfxterm_menu.module +MODULE_FILES += gfxterm_menu.module$(EXEEXT) +gfxterm_menu_module_SOURCES = tests/gfxterm_menu.c ## platform sources +nodist_gfxterm_menu_module_SOURCES = ## platform nodist sources +gfxterm_menu_module_LDADD = +gfxterm_menu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_menu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_menu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_menu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_menu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gfxterm_menu_module_SOURCES) +CLEANFILES += $(nodist_gfxterm_menu_module_SOURCES) +MOD_FILES += gfxterm_menu.mod +MARKER_FILES += gfxterm_menu.marker +CLEANFILES += gfxterm_menu.marker + +gfxterm_menu.marker: $(gfxterm_menu_module_SOURCES) $(nodist_gfxterm_menu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_menu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += cmdline_cat_test.module +MODULE_FILES += cmdline_cat_test.module$(EXEEXT) +cmdline_cat_test_module_SOURCES = tests/cmdline_cat_test.c ## platform sources +nodist_cmdline_cat_test_module_SOURCES = ## platform nodist sources +cmdline_cat_test_module_LDADD = +cmdline_cat_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmdline_cat_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmdline_cat_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmdline_cat_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmdline_cat_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cmdline_cat_test_module_SOURCES) +CLEANFILES += $(nodist_cmdline_cat_test_module_SOURCES) +MOD_FILES += cmdline_cat_test.mod +MARKER_FILES += cmdline_cat_test.marker +CLEANFILES += cmdline_cat_test.marker + +cmdline_cat_test.marker: $(cmdline_cat_test_module_SOURCES) $(nodist_cmdline_cat_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmdline_cat_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += bitmap.module +MODULE_FILES += bitmap.module$(EXEEXT) +bitmap_module_SOURCES = video/bitmap.c ## platform sources +nodist_bitmap_module_SOURCES = ## platform nodist sources +bitmap_module_LDADD = +bitmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bitmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bitmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bitmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bitmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bitmap_module_SOURCES) +CLEANFILES += $(nodist_bitmap_module_SOURCES) +MOD_FILES += bitmap.mod +MARKER_FILES += bitmap.marker +CLEANFILES += bitmap.marker + +bitmap.marker: $(bitmap_module_SOURCES) $(nodist_bitmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += bitmap_scale.module +MODULE_FILES += bitmap_scale.module$(EXEEXT) +bitmap_scale_module_SOURCES = video/bitmap_scale.c ## platform sources +nodist_bitmap_scale_module_SOURCES = ## platform nodist sources +bitmap_scale_module_LDADD = +bitmap_scale_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bitmap_scale_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bitmap_scale_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bitmap_scale_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bitmap_scale_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_bitmap_scale_module_SOURCES) +CLEANFILES += $(nodist_bitmap_scale_module_SOURCES) +MOD_FILES += bitmap_scale.mod +MARKER_FILES += bitmap_scale.marker +CLEANFILES += bitmap_scale.marker + +bitmap_scale.marker: $(bitmap_scale_module_SOURCES) $(nodist_bitmap_scale_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_scale_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_efi +platform_PROGRAMS += efi_gop.module +MODULE_FILES += efi_gop.module$(EXEEXT) +efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +nodist_efi_gop_module_SOURCES = ## platform nodist sources +efi_gop_module_LDADD = +efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efi_gop_module_SOURCES) +CLEANFILES += $(nodist_efi_gop_module_SOURCES) +MOD_FILES += efi_gop.mod +MARKER_FILES += efi_gop.marker +CLEANFILES += efi_gop.marker + +efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += efi_gop.module +MODULE_FILES += efi_gop.module$(EXEEXT) +efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +nodist_efi_gop_module_SOURCES = ## platform nodist sources +efi_gop_module_LDADD = +efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efi_gop_module_SOURCES) +CLEANFILES += $(nodist_efi_gop_module_SOURCES) +MOD_FILES += efi_gop.mod +MARKER_FILES += efi_gop.marker +CLEANFILES += efi_gop.marker + +efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += efi_gop.module +MODULE_FILES += efi_gop.module$(EXEEXT) +efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +nodist_efi_gop_module_SOURCES = ## platform nodist sources +efi_gop_module_LDADD = +efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efi_gop_module_SOURCES) +CLEANFILES += $(nodist_efi_gop_module_SOURCES) +MOD_FILES += efi_gop.mod +MARKER_FILES += efi_gop.marker +CLEANFILES += efi_gop.marker + +efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += efi_gop.module +MODULE_FILES += efi_gop.module$(EXEEXT) +efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +nodist_efi_gop_module_SOURCES = ## platform nodist sources +efi_gop_module_LDADD = +efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efi_gop_module_SOURCES) +CLEANFILES += $(nodist_efi_gop_module_SOURCES) +MOD_FILES += efi_gop.mod +MARKER_FILES += efi_gop.marker +CLEANFILES += efi_gop.marker + +efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += efi_gop.module +MODULE_FILES += efi_gop.module$(EXEEXT) +efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +nodist_efi_gop_module_SOURCES = ## platform nodist sources +efi_gop_module_LDADD = +efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efi_gop_module_SOURCES) +CLEANFILES += $(nodist_efi_gop_module_SOURCES) +MOD_FILES += efi_gop.mod +MARKER_FILES += efi_gop.marker +CLEANFILES += efi_gop.marker + +efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += efi_uga.module +MODULE_FILES += efi_uga.module$(EXEEXT) +efi_uga_module_SOURCES = video/efi_uga.c ## platform sources +nodist_efi_uga_module_SOURCES = ## platform nodist sources +efi_uga_module_LDADD = +efi_uga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efi_uga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efi_uga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efi_uga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efi_uga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efi_uga_module_SOURCES) +CLEANFILES += $(nodist_efi_uga_module_SOURCES) +MOD_FILES += efi_uga.mod +MARKER_FILES += efi_uga.marker +CLEANFILES += efi_uga.marker + +efi_uga.marker: $(efi_uga_module_SOURCES) $(nodist_efi_uga_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += efi_uga.module +MODULE_FILES += efi_uga.module$(EXEEXT) +efi_uga_module_SOURCES = video/efi_uga.c ## platform sources +nodist_efi_uga_module_SOURCES = ## platform nodist sources +efi_uga_module_LDADD = +efi_uga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efi_uga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efi_uga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efi_uga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efi_uga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efi_uga_module_SOURCES) +CLEANFILES += $(nodist_efi_uga_module_SOURCES) +MOD_FILES += efi_uga.mod +MARKER_FILES += efi_uga.marker +CLEANFILES += efi_uga.marker + +efi_uga.marker: $(efi_uga_module_SOURCES) $(nodist_efi_uga_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += jpeg.module +MODULE_FILES += jpeg.module$(EXEEXT) +jpeg_module_SOURCES = video/readers/jpeg.c ## platform sources +nodist_jpeg_module_SOURCES = ## platform nodist sources +jpeg_module_LDADD = +jpeg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +jpeg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +jpeg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +jpeg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +jpeg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_jpeg_module_SOURCES) +CLEANFILES += $(nodist_jpeg_module_SOURCES) +MOD_FILES += jpeg.mod +MARKER_FILES += jpeg.marker +CLEANFILES += jpeg.marker + +jpeg.marker: $(jpeg_module_SOURCES) $(nodist_jpeg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jpeg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += png.module +MODULE_FILES += png.module$(EXEEXT) +png_module_SOURCES = video/readers/png.c ## platform sources +nodist_png_module_SOURCES = ## platform nodist sources +png_module_LDADD = +png_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +png_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +png_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +png_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +png_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_png_module_SOURCES) +CLEANFILES += $(nodist_png_module_SOURCES) +MOD_FILES += png.mod +MARKER_FILES += png.marker +CLEANFILES += png.marker + +png.marker: $(png_module_SOURCES) $(nodist_png_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(png_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += tga.module +MODULE_FILES += tga.module$(EXEEXT) +tga_module_SOURCES = video/readers/tga.c ## platform sources +nodist_tga_module_SOURCES = ## platform nodist sources +tga_module_LDADD = +tga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_tga_module_SOURCES) +CLEANFILES += $(nodist_tga_module_SOURCES) +MOD_FILES += tga.mod +MARKER_FILES += tga.marker +CLEANFILES += tga.marker + +tga.marker: $(tga_module_SOURCES) $(nodist_tga_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += vbe.module +MODULE_FILES += vbe.module$(EXEEXT) +vbe_module_SOURCES = video/i386/pc/vbe.c ## platform sources +nodist_vbe_module_SOURCES = ## platform nodist sources +vbe_module_LDADD = +vbe_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +vbe_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +vbe_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +vbe_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +vbe_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_vbe_module_SOURCES) +CLEANFILES += $(nodist_vbe_module_SOURCES) +MOD_FILES += vbe.mod +MARKER_FILES += vbe.marker +CLEANFILES += vbe.marker + +vbe.marker: $(vbe_module_SOURCES) $(nodist_vbe_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vbe_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += video_fb.module +MODULE_FILES += video_fb.module$(EXEEXT) +video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +nodist_video_fb_module_SOURCES = ## platform nodist sources +video_fb_module_LDADD = +video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_fb_module_SOURCES) +CLEANFILES += $(nodist_video_fb_module_SOURCES) +MOD_FILES += video_fb.mod +MARKER_FILES += video_fb.marker +CLEANFILES += video_fb.marker + +video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_arc +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += video.module +MODULE_FILES += video.module$(EXEEXT) +video_module_SOURCES = video/video.c ## platform sources +nodist_video_module_SOURCES = ## platform nodist sources +video_module_LDADD = +video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_module_SOURCES) +CLEANFILES += $(nodist_video_module_SOURCES) +MOD_FILES += video.mod +MARKER_FILES += video.marker +CLEANFILES += video.marker + +video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += video_colors.module +MODULE_FILES += video_colors.module$(EXEEXT) +video_colors_module_SOURCES = video/colors.c ## platform sources +nodist_video_colors_module_SOURCES = ## platform nodist sources +video_colors_module_LDADD = +video_colors_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_colors_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_colors_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_colors_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_colors_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_video_colors_module_SOURCES) +CLEANFILES += $(nodist_video_colors_module_SOURCES) +MOD_FILES += video_colors.mod +MARKER_FILES += video_colors.marker +CLEANFILES += video_colors.marker + +video_colors.marker: $(video_colors_module_SOURCES) $(nodist_video_colors_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_colors_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_powerpc_ieee1275 +platform_PROGRAMS += ieee1275_fb.module +MODULE_FILES += ieee1275_fb.module$(EXEEXT) +ieee1275_fb_module_SOURCES = video/ieee1275.c ## platform sources +nodist_ieee1275_fb_module_SOURCES = ## platform nodist sources +ieee1275_fb_module_LDADD = +ieee1275_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ieee1275_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ieee1275_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ieee1275_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ieee1275_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ieee1275_fb_module_SOURCES) +CLEANFILES += $(nodist_ieee1275_fb_module_SOURCES) +MOD_FILES += ieee1275_fb.mod +MARKER_FILES += ieee1275_fb.marker +CLEANFILES += ieee1275_fb.marker + +ieee1275_fb.marker: $(ieee1275_fb_module_SOURCES) $(nodist_ieee1275_fb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ieee1275_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +if COND_GRUB_EMU_SDL +platform_PROGRAMS += sdl.module +MODULE_FILES += sdl.module$(EXEEXT) +sdl_module_SOURCES = video/emu/sdl.c ## platform sources +nodist_sdl_module_SOURCES = ## platform nodist sources +sdl_module_LDADD = +sdl_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sdl_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sdl_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sdl_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sdl_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_sdl_module_SOURCES) +CLEANFILES += $(nodist_sdl_module_SOURCES) +MOD_FILES += sdl.mod +MARKER_FILES += sdl.marker +CLEANFILES += sdl.marker + +sdl.marker: $(sdl_module_SOURCES) $(nodist_sdl_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sdl_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif COND_GRUB_EMU_SDL +endif +platform_PROGRAMS += datehook.module +MODULE_FILES += datehook.module$(EXEEXT) +datehook_module_SOURCES = hook/datehook.c ## platform sources +nodist_datehook_module_SOURCES = ## platform nodist sources +datehook_module_LDADD = +datehook_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datehook_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datehook_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datehook_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datehook_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_datehook_module_SOURCES) +CLEANFILES += $(nodist_datehook_module_SOURCES) +MOD_FILES += datehook.mod +MARKER_FILES += datehook.marker +CLEANFILES += datehook.marker + +datehook.marker: $(datehook_module_SOURCES) $(nodist_datehook_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datehook_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += net.module +MODULE_FILES += net.module$(EXEEXT) +net_module_SOURCES = net/net.c net/dns.c net/bootp.c net/ip.c net/udp.c net/tcp.c net/icmp.c net/icmp6.c net/ethernet.c net/arp.c net/netbuff.c ## platform sources +nodist_net_module_SOURCES = ## platform nodist sources +net_module_LDADD = +net_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +net_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +net_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +net_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +net_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_net_module_SOURCES) +CLEANFILES += $(nodist_net_module_SOURCES) +MOD_FILES += net.mod +MARKER_FILES += net.marker +CLEANFILES += net.marker + +net.marker: $(net_module_SOURCES) $(nodist_net_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += tftp.module +MODULE_FILES += tftp.module$(EXEEXT) +tftp_module_SOURCES = net/tftp.c ## platform sources +nodist_tftp_module_SOURCES = ## platform nodist sources +tftp_module_LDADD = +tftp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tftp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tftp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tftp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tftp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_tftp_module_SOURCES) +CLEANFILES += $(nodist_tftp_module_SOURCES) +MOD_FILES += tftp.mod +MARKER_FILES += tftp.marker +CLEANFILES += tftp.marker + +tftp.marker: $(tftp_module_SOURCES) $(nodist_tftp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tftp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += http.module +MODULE_FILES += http.module$(EXEEXT) +http_module_SOURCES = net/http.c ## platform sources +nodist_http_module_SOURCES = ## platform nodist sources +http_module_LDADD = +http_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +http_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +http_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +http_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +http_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_http_module_SOURCES) +CLEANFILES += $(nodist_http_module_SOURCES) +MOD_FILES += http.mod +MARKER_FILES += http.marker +CLEANFILES += http.marker + +http.marker: $(http_module_SOURCES) $(nodist_http_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(http_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_ieee1275 +platform_PROGRAMS += ofnet.module +MODULE_FILES += ofnet.module$(EXEEXT) +ofnet_module_SOURCES = net/drivers/ieee1275/ofnet.c ## platform sources +nodist_ofnet_module_SOURCES = ## platform nodist sources +ofnet_module_LDADD = +ofnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ofnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ofnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ofnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ofnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ofnet_module_SOURCES) +CLEANFILES += $(nodist_ofnet_module_SOURCES) +MOD_FILES += ofnet.mod +MARKER_FILES += ofnet.marker +CLEANFILES += ofnet.marker + +ofnet.marker: $(ofnet_module_SOURCES) $(nodist_ofnet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += ofnet.module +MODULE_FILES += ofnet.module$(EXEEXT) +ofnet_module_SOURCES = net/drivers/ieee1275/ofnet.c ## platform sources +nodist_ofnet_module_SOURCES = ## platform nodist sources +ofnet_module_LDADD = +ofnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ofnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ofnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ofnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ofnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ofnet_module_SOURCES) +CLEANFILES += $(nodist_ofnet_module_SOURCES) +MOD_FILES += ofnet.mod +MARKER_FILES += ofnet.marker +CLEANFILES += ofnet.marker + +ofnet.marker: $(ofnet_module_SOURCES) $(nodist_ofnet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += ofnet.module +MODULE_FILES += ofnet.module$(EXEEXT) +ofnet_module_SOURCES = net/drivers/ieee1275/ofnet.c ## platform sources +nodist_ofnet_module_SOURCES = ## platform nodist sources +ofnet_module_LDADD = +ofnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ofnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ofnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ofnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ofnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ofnet_module_SOURCES) +CLEANFILES += $(nodist_ofnet_module_SOURCES) +MOD_FILES += ofnet.mod +MARKER_FILES += ofnet.marker +CLEANFILES += ofnet.marker + +ofnet.marker: $(ofnet_module_SOURCES) $(nodist_ofnet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_uboot +platform_PROGRAMS += ubootnet.module +MODULE_FILES += ubootnet.module$(EXEEXT) +ubootnet_module_SOURCES = net/drivers/uboot/ubootnet.c ## platform sources +nodist_ubootnet_module_SOURCES = ## platform nodist sources +ubootnet_module_LDADD = +ubootnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ubootnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ubootnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ubootnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ubootnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_ubootnet_module_SOURCES) +CLEANFILES += $(nodist_ubootnet_module_SOURCES) +MOD_FILES += ubootnet.mod +MARKER_FILES += ubootnet.marker +CLEANFILES += ubootnet.marker + +ubootnet.marker: $(ubootnet_module_SOURCES) $(nodist_ubootnet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ubootnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += efinet.module +MODULE_FILES += efinet.module$(EXEEXT) +efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +nodist_efinet_module_SOURCES = ## platform nodist sources +efinet_module_LDADD = +efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efinet_module_SOURCES) +CLEANFILES += $(nodist_efinet_module_SOURCES) +MOD_FILES += efinet.mod +MARKER_FILES += efinet.marker +CLEANFILES += efinet.marker + +efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += efinet.module +MODULE_FILES += efinet.module$(EXEEXT) +efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +nodist_efinet_module_SOURCES = ## platform nodist sources +efinet_module_LDADD = +efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efinet_module_SOURCES) +CLEANFILES += $(nodist_efinet_module_SOURCES) +MOD_FILES += efinet.mod +MARKER_FILES += efinet.marker +CLEANFILES += efinet.marker + +efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_ia64_efi +platform_PROGRAMS += efinet.module +MODULE_FILES += efinet.module$(EXEEXT) +efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +nodist_efinet_module_SOURCES = ## platform nodist sources +efinet_module_LDADD = +efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efinet_module_SOURCES) +CLEANFILES += $(nodist_efinet_module_SOURCES) +MOD_FILES += efinet.mod +MARKER_FILES += efinet.marker +CLEANFILES += efinet.marker + +efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm_efi +platform_PROGRAMS += efinet.module +MODULE_FILES += efinet.module$(EXEEXT) +efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +nodist_efinet_module_SOURCES = ## platform nodist sources +efinet_module_LDADD = +efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efinet_module_SOURCES) +CLEANFILES += $(nodist_efinet_module_SOURCES) +MOD_FILES += efinet.mod +MARKER_FILES += efinet.marker +CLEANFILES += efinet.marker + +efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_arm64_efi +platform_PROGRAMS += efinet.module +MODULE_FILES += efinet.module$(EXEEXT) +efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +nodist_efinet_module_SOURCES = ## platform nodist sources +efinet_module_LDADD = +efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_efinet_module_SOURCES) +CLEANFILES += $(nodist_efinet_module_SOURCES) +MOD_FILES += efinet.mod +MARKER_FILES += efinet.marker +CLEANFILES += efinet.marker + +efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += emunet.module +MODULE_FILES += emunet.module$(EXEEXT) +emunet_module_SOURCES = net/drivers/emu/emunet.c ## platform sources +nodist_emunet_module_SOURCES = ## platform nodist sources +emunet_module_LDADD = +emunet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +emunet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +emunet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +emunet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +emunet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_emunet_module_SOURCES) +CLEANFILES += $(nodist_emunet_module_SOURCES) +MOD_FILES += emunet.mod +MARKER_FILES += emunet.marker +CLEANFILES += emunet.marker + +emunet.marker: $(emunet_module_SOURCES) $(nodist_emunet_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emunet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_emu +platform_PROGRAMS += legacycfg.module +MODULE_FILES += legacycfg.module$(EXEEXT) +legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +nodist_legacycfg_module_SOURCES = ## platform nodist sources +legacycfg_module_LDADD = +legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacycfg_module_SOURCES) +CLEANFILES += $(nodist_legacycfg_module_SOURCES) +MOD_FILES += legacycfg.mod +MARKER_FILES += legacycfg.marker +CLEANFILES += legacycfg.marker + +legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += legacycfg.module +MODULE_FILES += legacycfg.module$(EXEEXT) +legacycfg_module_SOURCES = commands/legacycfg.c lib/legacy_parse.c ## platform sources +nodist_legacycfg_module_SOURCES = ## platform nodist sources +legacycfg_module_LDADD = +legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacycfg_module_SOURCES) +CLEANFILES += $(nodist_legacycfg_module_SOURCES) +MOD_FILES += legacycfg.mod +MARKER_FILES += legacycfg.marker +CLEANFILES += legacycfg.marker + +legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += legacycfg.module +MODULE_FILES += legacycfg.module$(EXEEXT) +legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +nodist_legacycfg_module_SOURCES = ## platform nodist sources +legacycfg_module_LDADD = +legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacycfg_module_SOURCES) +CLEANFILES += $(nodist_legacycfg_module_SOURCES) +MOD_FILES += legacycfg.mod +MARKER_FILES += legacycfg.marker +CLEANFILES += legacycfg.marker + +legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += legacycfg.module +MODULE_FILES += legacycfg.module$(EXEEXT) +legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +nodist_legacycfg_module_SOURCES = ## platform nodist sources +legacycfg_module_LDADD = +legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacycfg_module_SOURCES) +CLEANFILES += $(nodist_legacycfg_module_SOURCES) +MOD_FILES += legacycfg.mod +MARKER_FILES += legacycfg.marker +CLEANFILES += legacycfg.marker + +legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += legacycfg.module +MODULE_FILES += legacycfg.module$(EXEEXT) +legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +nodist_legacycfg_module_SOURCES = ## platform nodist sources +legacycfg_module_LDADD = +legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacycfg_module_SOURCES) +CLEANFILES += $(nodist_legacycfg_module_SOURCES) +MOD_FILES += legacycfg.mod +MARKER_FILES += legacycfg.marker +CLEANFILES += legacycfg.marker + +legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += legacycfg.module +MODULE_FILES += legacycfg.module$(EXEEXT) +legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +nodist_legacycfg_module_SOURCES = ## platform nodist sources +legacycfg_module_LDADD = +legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_legacycfg_module_SOURCES) +CLEANFILES += $(nodist_legacycfg_module_SOURCES) +MOD_FILES += legacycfg.mod +MARKER_FILES += legacycfg.marker +CLEANFILES += legacycfg.marker + +legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += syslinuxcfg.module +MODULE_FILES += syslinuxcfg.module$(EXEEXT) +syslinuxcfg_module_SOURCES = lib/syslinux_parse.c commands/syslinuxcfg.c ## platform sources +nodist_syslinuxcfg_module_SOURCES = ## platform nodist sources +syslinuxcfg_module_LDADD = +syslinuxcfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +syslinuxcfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +syslinuxcfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +syslinuxcfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +syslinuxcfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_syslinuxcfg_module_SOURCES) +CLEANFILES += $(nodist_syslinuxcfg_module_SOURCES) +MOD_FILES += syslinuxcfg.mod +MARKER_FILES += syslinuxcfg.marker +CLEANFILES += syslinuxcfg.marker + +syslinuxcfg.marker: $(syslinuxcfg_module_SOURCES) $(nodist_syslinuxcfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += test_blockarg.module +MODULE_FILES += test_blockarg.module$(EXEEXT) +test_blockarg_module_SOURCES = tests/test_blockarg.c ## platform sources +nodist_test_blockarg_module_SOURCES = ## platform nodist sources +test_blockarg_module_LDADD = +test_blockarg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +test_blockarg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +test_blockarg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +test_blockarg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +test_blockarg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_test_blockarg_module_SOURCES) +CLEANFILES += $(nodist_test_blockarg_module_SOURCES) +MOD_FILES += test_blockarg.mod +MARKER_FILES += test_blockarg.marker +CLEANFILES += test_blockarg.marker + +test_blockarg.marker: $(test_blockarg_module_SOURCES) $(nodist_test_blockarg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_blockarg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += xzio.module +MODULE_FILES += xzio.module$(EXEEXT) +xzio_module_SOURCES = io/xzio.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c ## platform sources +nodist_xzio_module_SOURCES = ## platform nodist sources +xzio_module_LDADD = +xzio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) -Wno-unreachable-code +xzio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xzio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed +xzio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xzio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xzio_module_SOURCES) +CLEANFILES += $(nodist_xzio_module_SOURCES) +MOD_FILES += xzio.mod +MARKER_FILES += xzio.marker +CLEANFILES += xzio.marker + +xzio.marker: $(xzio_module_SOURCES) $(nodist_xzio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += lzopio.module +MODULE_FILES += lzopio.module$(EXEEXT) +lzopio_module_SOURCES = io/lzopio.c lib/minilzo/minilzo.c ## platform sources +nodist_lzopio_module_SOURCES = ## platform nodist sources +lzopio_module_LDADD = +lzopio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-undef -Wno-redundant-decls -Wno-error +lzopio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lzopio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H +lzopio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lzopio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lzopio_module_SOURCES) +CLEANFILES += $(nodist_lzopio_module_SOURCES) +MOD_FILES += lzopio.mod +MARKER_FILES += lzopio.marker +CLEANFILES += lzopio.marker + +lzopio.marker: $(lzopio_module_SOURCES) $(nodist_lzopio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += testload.module +MODULE_FILES += testload.module$(EXEEXT) +testload_module_SOURCES = commands/testload.c ## platform sources +nodist_testload_module_SOURCES = ## platform nodist sources +testload_module_LDADD = +testload_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +testload_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +testload_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +testload_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +testload_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_testload_module_SOURCES) +CLEANFILES += $(nodist_testload_module_SOURCES) +MOD_FILES += testload.mod +MARKER_FILES += testload.marker +CLEANFILES += testload.marker + +testload.marker: $(testload_module_SOURCES) $(nodist_testload_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testload_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_xen +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_xen +platform_PROGRAMS += backtrace.module +MODULE_FILES += backtrace.module$(EXEEXT) +backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +nodist_backtrace_module_SOURCES = ## platform nodist sources +backtrace_module_LDADD = +backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_backtrace_module_SOURCES) +CLEANFILES += $(nodist_backtrace_module_SOURCES) +MOD_FILES += backtrace.mod +MARKER_FILES += backtrace.marker +CLEANFILES += backtrace.marker + +backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += lsapm.module +MODULE_FILES += lsapm.module$(EXEEXT) +lsapm_module_SOURCES = commands/i386/pc/lsapm.c ## platform sources +nodist_lsapm_module_SOURCES = ## platform nodist sources +lsapm_module_LDADD = +lsapm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsapm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsapm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsapm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsapm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lsapm_module_SOURCES) +CLEANFILES += $(nodist_lsapm_module_SOURCES) +MOD_FILES += lsapm.mod +MARKER_FILES += lsapm.marker +CLEANFILES += lsapm.marker + +lsapm.marker: $(lsapm_module_SOURCES) $(nodist_lsapm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsapm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_pc +platform_PROGRAMS += keylayouts.module +MODULE_FILES += keylayouts.module$(EXEEXT) +keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +nodist_keylayouts_module_SOURCES = ## platform nodist sources +keylayouts_module_LDADD = +keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keylayouts_module_SOURCES) +CLEANFILES += $(nodist_keylayouts_module_SOURCES) +MOD_FILES += keylayouts.mod +MARKER_FILES += keylayouts.marker +CLEANFILES += keylayouts.marker + +keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += keylayouts.module +MODULE_FILES += keylayouts.module$(EXEEXT) +keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +nodist_keylayouts_module_SOURCES = ## platform nodist sources +keylayouts_module_LDADD = +keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keylayouts_module_SOURCES) +CLEANFILES += $(nodist_keylayouts_module_SOURCES) +MOD_FILES += keylayouts.mod +MARKER_FILES += keylayouts.marker +CLEANFILES += keylayouts.marker + +keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += keylayouts.module +MODULE_FILES += keylayouts.module$(EXEEXT) +keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +nodist_keylayouts_module_SOURCES = ## platform nodist sources +keylayouts_module_LDADD = +keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keylayouts_module_SOURCES) +CLEANFILES += $(nodist_keylayouts_module_SOURCES) +MOD_FILES += keylayouts.mod +MARKER_FILES += keylayouts.marker +CLEANFILES += keylayouts.marker + +keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += keylayouts.module +MODULE_FILES += keylayouts.module$(EXEEXT) +keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +nodist_keylayouts_module_SOURCES = ## platform nodist sources +keylayouts_module_LDADD = +keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keylayouts_module_SOURCES) +CLEANFILES += $(nodist_keylayouts_module_SOURCES) +MOD_FILES += keylayouts.mod +MARKER_FILES += keylayouts.marker +CLEANFILES += keylayouts.marker + +keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += keylayouts.module +MODULE_FILES += keylayouts.module$(EXEEXT) +keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +nodist_keylayouts_module_SOURCES = ## platform nodist sources +keylayouts_module_LDADD = +keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keylayouts_module_SOURCES) +CLEANFILES += $(nodist_keylayouts_module_SOURCES) +MOD_FILES += keylayouts.mod +MARKER_FILES += keylayouts.marker +CLEANFILES += keylayouts.marker + +keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += keylayouts.module +MODULE_FILES += keylayouts.module$(EXEEXT) +keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +nodist_keylayouts_module_SOURCES = ## platform nodist sources +keylayouts_module_LDADD = +keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keylayouts_module_SOURCES) +CLEANFILES += $(nodist_keylayouts_module_SOURCES) +MOD_FILES += keylayouts.mod +MARKER_FILES += keylayouts.marker +CLEANFILES += keylayouts.marker + +keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_x86_64_efi +platform_PROGRAMS += keylayouts.module +MODULE_FILES += keylayouts.module$(EXEEXT) +keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +nodist_keylayouts_module_SOURCES = ## platform nodist sources +keylayouts_module_LDADD = +keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_keylayouts_module_SOURCES) +CLEANFILES += $(nodist_keylayouts_module_SOURCES) +MOD_FILES += keylayouts.mod +MARKER_FILES += keylayouts.marker +CLEANFILES += keylayouts.marker + +keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += priority_queue.module +MODULE_FILES += priority_queue.module$(EXEEXT) +priority_queue_module_SOURCES = lib/priority_queue.c ## platform sources +nodist_priority_queue_module_SOURCES = ## platform nodist sources +priority_queue_module_LDADD = +priority_queue_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +priority_queue_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +priority_queue_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +priority_queue_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +priority_queue_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_priority_queue_module_SOURCES) +CLEANFILES += $(nodist_priority_queue_module_SOURCES) +MOD_FILES += priority_queue.mod +MARKER_FILES += priority_queue.marker +CLEANFILES += priority_queue.marker + +priority_queue.marker: $(priority_queue_module_SOURCES) $(nodist_priority_queue_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += time.module +MODULE_FILES += time.module$(EXEEXT) +time_module_SOURCES = commands/time.c ## platform sources +nodist_time_module_SOURCES = ## platform nodist sources +time_module_LDADD = +time_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +time_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +time_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +time_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +time_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_time_module_SOURCES) +CLEANFILES += $(nodist_time_module_SOURCES) +MOD_FILES += time.mod +MARKER_FILES += time.marker +CLEANFILES += time.marker + +time.marker: $(time_module_SOURCES) $(nodist_time_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(time_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +if COND_ENABLE_CACHE_STATS +platform_PROGRAMS += cacheinfo.module +MODULE_FILES += cacheinfo.module$(EXEEXT) +cacheinfo_module_SOURCES = commands/cacheinfo.c ## platform sources +nodist_cacheinfo_module_SOURCES = ## platform nodist sources +cacheinfo_module_LDADD = +cacheinfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cacheinfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cacheinfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cacheinfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cacheinfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cacheinfo_module_SOURCES) +CLEANFILES += $(nodist_cacheinfo_module_SOURCES) +MOD_FILES += cacheinfo.mod +MARKER_FILES += cacheinfo.marker +CLEANFILES += cacheinfo.marker + +cacheinfo.marker: $(cacheinfo_module_SOURCES) $(nodist_cacheinfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cacheinfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif COND_ENABLE_CACHE_STATS +if COND_ENABLE_BOOT_TIME_STATS +platform_PROGRAMS += boottime.module +MODULE_FILES += boottime.module$(EXEEXT) +boottime_module_SOURCES = commands/boottime.c ## platform sources +nodist_boottime_module_SOURCES = ## platform nodist sources +boottime_module_LDADD = +boottime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +boottime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +boottime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +boottime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +boottime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boottime_module_SOURCES) +CLEANFILES += $(nodist_boottime_module_SOURCES) +MOD_FILES += boottime.mod +MARKER_FILES += boottime.marker +CLEANFILES += boottime.marker + +boottime.marker: $(boottime_module_SOURCES) $(nodist_boottime_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boottime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif COND_ENABLE_BOOT_TIME_STATS +platform_PROGRAMS += adler32.module +MODULE_FILES += adler32.module$(EXEEXT) +adler32_module_SOURCES = lib/adler32.c ## platform sources +nodist_adler32_module_SOURCES = ## platform nodist sources +adler32_module_LDADD = +adler32_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +adler32_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +adler32_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +adler32_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +adler32_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_adler32_module_SOURCES) +CLEANFILES += $(nodist_adler32_module_SOURCES) +MOD_FILES += adler32.mod +MARKER_FILES += adler32.marker +CLEANFILES += adler32.marker + +adler32.marker: $(adler32_module_SOURCES) $(nodist_adler32_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adler32_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += crc64.module +MODULE_FILES += crc64.module$(EXEEXT) +crc64_module_SOURCES = lib/crc64.c ## platform sources +nodist_crc64_module_SOURCES = ## platform nodist sources +crc64_module_LDADD = +crc64_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +crc64_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +crc64_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +crc64_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +crc64_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_crc64_module_SOURCES) +CLEANFILES += $(nodist_crc64_module_SOURCES) +MOD_FILES += crc64.mod +MARKER_FILES += crc64.marker +CLEANFILES += crc64.marker + +crc64.marker: $(crc64_module_SOURCES) $(nodist_crc64_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crc64_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += mpi.module +MODULE_FILES += mpi.module$(EXEEXT) +mpi_module_SOURCES = lib/libgcrypt-grub/mpi/mpiutil.c lib/libgcrypt-grub/mpi/mpi-bit.c lib/libgcrypt-grub/mpi/mpi-add.c lib/libgcrypt-grub/mpi/mpi-mul.c lib/libgcrypt-grub/mpi/mpi-mod.c lib/libgcrypt-grub/mpi/mpi-gcd.c lib/libgcrypt-grub/mpi/mpi-div.c lib/libgcrypt-grub/mpi/mpi-cmp.c lib/libgcrypt-grub/mpi/mpi-inv.c lib/libgcrypt-grub/mpi/mpi-pow.c lib/libgcrypt-grub/mpi/mpi-mpow.c lib/libgcrypt-grub/mpi/mpih-lshift.c lib/libgcrypt-grub/mpi/mpih-mul.c lib/libgcrypt-grub/mpi/mpih-mul1.c lib/libgcrypt-grub/mpi/mpih-mul2.c lib/libgcrypt-grub/mpi/mpih-mul3.c lib/libgcrypt-grub/mpi/mpih-add1.c lib/libgcrypt-grub/mpi/mpih-sub1.c lib/libgcrypt-grub/mpi/mpih-div.c lib/libgcrypt-grub/mpi/mpicoder.c lib/libgcrypt-grub/mpi/mpih-rshift.c lib/libgcrypt-grub/mpi/mpi-inline.c lib/libgcrypt_wrap/mem.c ## platform sources +nodist_mpi_module_SOURCES = ## platform nodist sources +mpi_module_LDADD = +mpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-redundant-decls -Wno-sign-compare +mpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +mpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_mpi_module_SOURCES) +CLEANFILES += $(nodist_mpi_module_SOURCES) +MOD_FILES += mpi.mod +MARKER_FILES += mpi.marker +CLEANFILES += mpi.marker + +mpi.marker: $(mpi_module_SOURCES) $(nodist_mpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += all_video.module +MODULE_FILES += all_video.module$(EXEEXT) +all_video_module_SOURCES = lib/fake_module.c ## platform sources +nodist_all_video_module_SOURCES = ## platform nodist sources +all_video_module_LDADD = +all_video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +all_video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +all_video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +all_video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +all_video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_all_video_module_SOURCES) +CLEANFILES += $(nodist_all_video_module_SOURCES) +MOD_FILES += all_video.mod +MARKER_FILES += all_video.marker +CLEANFILES += all_video.marker + +all_video.marker: $(all_video_module_SOURCES) $(nodist_all_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(all_video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_i386_pc +platform_PROGRAMS += gdb.module +MODULE_FILES += gdb.module$(EXEEXT) +gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +nodist_gdb_module_SOURCES = ## platform nodist sources +gdb_module_LDADD = +gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gdb_module_SOURCES) +CLEANFILES += $(nodist_gdb_module_SOURCES) +MOD_FILES += gdb.mod +MARKER_FILES += gdb.marker +CLEANFILES += gdb.marker + +gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_efi +platform_PROGRAMS += gdb.module +MODULE_FILES += gdb.module$(EXEEXT) +gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +nodist_gdb_module_SOURCES = ## platform nodist sources +gdb_module_LDADD = +gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gdb_module_SOURCES) +CLEANFILES += $(nodist_gdb_module_SOURCES) +MOD_FILES += gdb.mod +MARKER_FILES += gdb.marker +CLEANFILES += gdb.marker + +gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_qemu +platform_PROGRAMS += gdb.module +MODULE_FILES += gdb.module$(EXEEXT) +gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +nodist_gdb_module_SOURCES = ## platform nodist sources +gdb_module_LDADD = +gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gdb_module_SOURCES) +CLEANFILES += $(nodist_gdb_module_SOURCES) +MOD_FILES += gdb.mod +MARKER_FILES += gdb.marker +CLEANFILES += gdb.marker + +gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_coreboot +platform_PROGRAMS += gdb.module +MODULE_FILES += gdb.module$(EXEEXT) +gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +nodist_gdb_module_SOURCES = ## platform nodist sources +gdb_module_LDADD = +gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gdb_module_SOURCES) +CLEANFILES += $(nodist_gdb_module_SOURCES) +MOD_FILES += gdb.mod +MARKER_FILES += gdb.marker +CLEANFILES += gdb.marker + +gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_multiboot +platform_PROGRAMS += gdb.module +MODULE_FILES += gdb.module$(EXEEXT) +gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +nodist_gdb_module_SOURCES = ## platform nodist sources +gdb_module_LDADD = +gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gdb_module_SOURCES) +CLEANFILES += $(nodist_gdb_module_SOURCES) +MOD_FILES += gdb.mod +MARKER_FILES += gdb.marker +CLEANFILES += gdb.marker + +gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += gdb.module +MODULE_FILES += gdb.module$(EXEEXT) +gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +nodist_gdb_module_SOURCES = ## platform nodist sources +gdb_module_LDADD = +gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gdb_module_SOURCES) +CLEANFILES += $(nodist_gdb_module_SOURCES) +MOD_FILES += gdb.mod +MARKER_FILES += gdb.marker +CLEANFILES += gdb.marker + +gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +endif +platform_PROGRAMS += testspeed.module +MODULE_FILES += testspeed.module$(EXEEXT) +testspeed_module_SOURCES = commands/testspeed.c ## platform sources +nodist_testspeed_module_SOURCES = ## platform nodist sources +testspeed_module_LDADD = +testspeed_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +testspeed_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +testspeed_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +testspeed_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +testspeed_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_testspeed_module_SOURCES) +CLEANFILES += $(nodist_testspeed_module_SOURCES) +MOD_FILES += testspeed.mod +MARKER_FILES += testspeed.marker +CLEANFILES += testspeed.marker + +testspeed.marker: $(testspeed_module_SOURCES) $(nodist_testspeed_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testspeed_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += tr.module +MODULE_FILES += tr.module$(EXEEXT) +tr_module_SOURCES = commands/tr.c ## platform sources +nodist_tr_module_SOURCES = ## platform nodist sources +tr_module_LDADD = +tr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_tr_module_SOURCES) +CLEANFILES += $(nodist_tr_module_SOURCES) +MOD_FILES += tr.mod +MARKER_FILES += tr.marker +CLEANFILES += tr.marker + +tr.marker: $(tr_module_SOURCES) $(nodist_tr_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += progress.module +MODULE_FILES += progress.module$(EXEEXT) +progress_module_SOURCES = lib/progress.c ## platform sources +nodist_progress_module_SOURCES = ## platform nodist sources +progress_module_LDADD = +progress_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +progress_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +progress_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +progress_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +progress_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_progress_module_SOURCES) +CLEANFILES += $(nodist_progress_module_SOURCES) +MOD_FILES += progress.mod +MARKER_FILES += progress.marker +CLEANFILES += progress.marker + +progress.marker: $(progress_module_SOURCES) $(nodist_progress_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(progress_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += file.module +MODULE_FILES += file.module$(EXEEXT) +file_module_SOURCES = commands/file.c commands/file32.c commands/file64.c loader/i386/xen_file.c loader/i386/xen_file32.c loader/i386/xen_file64.c ## platform sources +nodist_file_module_SOURCES = ## platform nodist sources +file_module_LDADD = +file_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +file_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +file_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +file_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +file_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += commands/fileXX.c loader/i386/xen_fileXX.c +BUILT_SOURCES += $(nodist_file_module_SOURCES) +CLEANFILES += $(nodist_file_module_SOURCES) +MOD_FILES += file.mod +MARKER_FILES += file.marker +CLEANFILES += file.marker + +file.marker: $(file_module_SOURCES) $(nodist_file_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_arcfour.module +MODULE_FILES += gcry_arcfour.module$(EXEEXT) +gcry_arcfour_module_SOURCES = lib/libgcrypt-grub/cipher/arcfour.c ## platform sources +nodist_gcry_arcfour_module_SOURCES = ## platform nodist sources +gcry_arcfour_module_LDADD = +gcry_arcfour_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_arcfour_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_arcfour_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_arcfour_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_arcfour_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_arcfour_module_SOURCES) +CLEANFILES += $(nodist_gcry_arcfour_module_SOURCES) +MOD_FILES += gcry_arcfour.mod +MARKER_FILES += gcry_arcfour.marker +CLEANFILES += gcry_arcfour.marker + +gcry_arcfour.marker: $(gcry_arcfour_module_SOURCES) $(nodist_gcry_arcfour_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_arcfour_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_blowfish.module +MODULE_FILES += gcry_blowfish.module$(EXEEXT) +gcry_blowfish_module_SOURCES = lib/libgcrypt-grub/cipher/blowfish.c ## platform sources +nodist_gcry_blowfish_module_SOURCES = ## platform nodist sources +gcry_blowfish_module_LDADD = +gcry_blowfish_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_blowfish_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_blowfish_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_blowfish_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_blowfish_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_blowfish_module_SOURCES) +CLEANFILES += $(nodist_gcry_blowfish_module_SOURCES) +MOD_FILES += gcry_blowfish.mod +MARKER_FILES += gcry_blowfish.marker +CLEANFILES += gcry_blowfish.marker + +gcry_blowfish.marker: $(gcry_blowfish_module_SOURCES) $(nodist_gcry_blowfish_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_blowfish_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_camellia.module +MODULE_FILES += gcry_camellia.module$(EXEEXT) +gcry_camellia_module_SOURCES = lib/libgcrypt-grub/cipher/camellia-glue.c lib/libgcrypt-grub/cipher/camellia.c ## platform sources +nodist_gcry_camellia_module_SOURCES = ## platform nodist sources +gcry_camellia_module_LDADD = +gcry_camellia_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_camellia_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_camellia_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_camellia_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_camellia_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_camellia_module_SOURCES) +CLEANFILES += $(nodist_gcry_camellia_module_SOURCES) +MOD_FILES += gcry_camellia.mod +MARKER_FILES += gcry_camellia.marker +CLEANFILES += gcry_camellia.marker + +gcry_camellia.marker: $(gcry_camellia_module_SOURCES) $(nodist_gcry_camellia_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_cast5.module +MODULE_FILES += gcry_cast5.module$(EXEEXT) +gcry_cast5_module_SOURCES = lib/libgcrypt-grub/cipher/cast5.c ## platform sources +nodist_gcry_cast5_module_SOURCES = ## platform nodist sources +gcry_cast5_module_LDADD = +gcry_cast5_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_cast5_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_cast5_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_cast5_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_cast5_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_cast5_module_SOURCES) +CLEANFILES += $(nodist_gcry_cast5_module_SOURCES) +MOD_FILES += gcry_cast5.mod +MARKER_FILES += gcry_cast5.marker +CLEANFILES += gcry_cast5.marker + +gcry_cast5.marker: $(gcry_cast5_module_SOURCES) $(nodist_gcry_cast5_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_cast5_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_crc.module +MODULE_FILES += gcry_crc.module$(EXEEXT) +gcry_crc_module_SOURCES = lib/libgcrypt-grub/cipher/crc.c ## platform sources +nodist_gcry_crc_module_SOURCES = ## platform nodist sources +gcry_crc_module_LDADD = +gcry_crc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_crc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_crc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_crc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_crc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_crc_module_SOURCES) +CLEANFILES += $(nodist_gcry_crc_module_SOURCES) +MOD_FILES += gcry_crc.mod +MARKER_FILES += gcry_crc.marker +CLEANFILES += gcry_crc.marker + +gcry_crc.marker: $(gcry_crc_module_SOURCES) $(nodist_gcry_crc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_crc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_des.module +MODULE_FILES += gcry_des.module$(EXEEXT) +gcry_des_module_SOURCES = lib/libgcrypt-grub/cipher/des.c ## platform sources +nodist_gcry_des_module_SOURCES = ## platform nodist sources +gcry_des_module_LDADD = +gcry_des_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_des_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_des_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_des_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_des_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_des_module_SOURCES) +CLEANFILES += $(nodist_gcry_des_module_SOURCES) +MOD_FILES += gcry_des.mod +MARKER_FILES += gcry_des.marker +CLEANFILES += gcry_des.marker + +gcry_des.marker: $(gcry_des_module_SOURCES) $(nodist_gcry_des_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_des_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_dsa.module +MODULE_FILES += gcry_dsa.module$(EXEEXT) +gcry_dsa_module_SOURCES = lib/libgcrypt-grub/cipher/dsa.c ## platform sources +nodist_gcry_dsa_module_SOURCES = ## platform nodist sources +gcry_dsa_module_LDADD = +gcry_dsa_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_dsa_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_dsa_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_dsa_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_dsa_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_dsa_module_SOURCES) +CLEANFILES += $(nodist_gcry_dsa_module_SOURCES) +MOD_FILES += gcry_dsa.mod +MARKER_FILES += gcry_dsa.marker +CLEANFILES += gcry_dsa.marker + +gcry_dsa.marker: $(gcry_dsa_module_SOURCES) $(nodist_gcry_dsa_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_dsa_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_idea.module +MODULE_FILES += gcry_idea.module$(EXEEXT) +gcry_idea_module_SOURCES = lib/libgcrypt-grub/cipher/idea.c ## platform sources +nodist_gcry_idea_module_SOURCES = ## platform nodist sources +gcry_idea_module_LDADD = +gcry_idea_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_idea_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_idea_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_idea_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_idea_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_idea_module_SOURCES) +CLEANFILES += $(nodist_gcry_idea_module_SOURCES) +MOD_FILES += gcry_idea.mod +MARKER_FILES += gcry_idea.marker +CLEANFILES += gcry_idea.marker + +gcry_idea.marker: $(gcry_idea_module_SOURCES) $(nodist_gcry_idea_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_idea_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_md4.module +MODULE_FILES += gcry_md4.module$(EXEEXT) +gcry_md4_module_SOURCES = lib/libgcrypt-grub/cipher/md4.c ## platform sources +nodist_gcry_md4_module_SOURCES = ## platform nodist sources +gcry_md4_module_LDADD = +gcry_md4_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_md4_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_md4_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_md4_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_md4_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_md4_module_SOURCES) +CLEANFILES += $(nodist_gcry_md4_module_SOURCES) +MOD_FILES += gcry_md4.mod +MARKER_FILES += gcry_md4.marker +CLEANFILES += gcry_md4.marker + +gcry_md4.marker: $(gcry_md4_module_SOURCES) $(nodist_gcry_md4_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md4_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_md5.module +MODULE_FILES += gcry_md5.module$(EXEEXT) +gcry_md5_module_SOURCES = lib/libgcrypt-grub/cipher/md5.c ## platform sources +nodist_gcry_md5_module_SOURCES = ## platform nodist sources +gcry_md5_module_LDADD = +gcry_md5_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_md5_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_md5_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_md5_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_md5_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_md5_module_SOURCES) +CLEANFILES += $(nodist_gcry_md5_module_SOURCES) +MOD_FILES += gcry_md5.mod +MARKER_FILES += gcry_md5.marker +CLEANFILES += gcry_md5.marker + +gcry_md5.marker: $(gcry_md5_module_SOURCES) $(nodist_gcry_md5_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md5_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_rfc2268.module +MODULE_FILES += gcry_rfc2268.module$(EXEEXT) +gcry_rfc2268_module_SOURCES = lib/libgcrypt-grub/cipher/rfc2268.c ## platform sources +nodist_gcry_rfc2268_module_SOURCES = ## platform nodist sources +gcry_rfc2268_module_LDADD = +gcry_rfc2268_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_rfc2268_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rfc2268_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rfc2268_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rfc2268_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_rfc2268_module_SOURCES) +CLEANFILES += $(nodist_gcry_rfc2268_module_SOURCES) +MOD_FILES += gcry_rfc2268.mod +MARKER_FILES += gcry_rfc2268.marker +CLEANFILES += gcry_rfc2268.marker + +gcry_rfc2268.marker: $(gcry_rfc2268_module_SOURCES) $(nodist_gcry_rfc2268_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rfc2268_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_rijndael.module +MODULE_FILES += gcry_rijndael.module$(EXEEXT) +gcry_rijndael_module_SOURCES = lib/libgcrypt-grub/cipher/rijndael.c ## platform sources +nodist_gcry_rijndael_module_SOURCES = ## platform nodist sources +gcry_rijndael_module_LDADD = +gcry_rijndael_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_rijndael_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rijndael_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rijndael_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rijndael_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_rijndael_module_SOURCES) +CLEANFILES += $(nodist_gcry_rijndael_module_SOURCES) +MOD_FILES += gcry_rijndael.mod +MARKER_FILES += gcry_rijndael.marker +CLEANFILES += gcry_rijndael.marker + +gcry_rijndael.marker: $(gcry_rijndael_module_SOURCES) $(nodist_gcry_rijndael_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rijndael_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_rmd160.module +MODULE_FILES += gcry_rmd160.module$(EXEEXT) +gcry_rmd160_module_SOURCES = lib/libgcrypt-grub/cipher/rmd160.c ## platform sources +nodist_gcry_rmd160_module_SOURCES = ## platform nodist sources +gcry_rmd160_module_LDADD = +gcry_rmd160_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_rmd160_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rmd160_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rmd160_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rmd160_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_rmd160_module_SOURCES) +CLEANFILES += $(nodist_gcry_rmd160_module_SOURCES) +MOD_FILES += gcry_rmd160.mod +MARKER_FILES += gcry_rmd160.marker +CLEANFILES += gcry_rmd160.marker + +gcry_rmd160.marker: $(gcry_rmd160_module_SOURCES) $(nodist_gcry_rmd160_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rmd160_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_rsa.module +MODULE_FILES += gcry_rsa.module$(EXEEXT) +gcry_rsa_module_SOURCES = lib/libgcrypt-grub/cipher/rsa.c ## platform sources +nodist_gcry_rsa_module_SOURCES = ## platform nodist sources +gcry_rsa_module_LDADD = +gcry_rsa_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_rsa_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rsa_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rsa_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rsa_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_rsa_module_SOURCES) +CLEANFILES += $(nodist_gcry_rsa_module_SOURCES) +MOD_FILES += gcry_rsa.mod +MARKER_FILES += gcry_rsa.marker +CLEANFILES += gcry_rsa.marker + +gcry_rsa.marker: $(gcry_rsa_module_SOURCES) $(nodist_gcry_rsa_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rsa_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_seed.module +MODULE_FILES += gcry_seed.module$(EXEEXT) +gcry_seed_module_SOURCES = lib/libgcrypt-grub/cipher/seed.c ## platform sources +nodist_gcry_seed_module_SOURCES = ## platform nodist sources +gcry_seed_module_LDADD = +gcry_seed_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_seed_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_seed_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_seed_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_seed_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_seed_module_SOURCES) +CLEANFILES += $(nodist_gcry_seed_module_SOURCES) +MOD_FILES += gcry_seed.mod +MARKER_FILES += gcry_seed.marker +CLEANFILES += gcry_seed.marker + +gcry_seed.marker: $(gcry_seed_module_SOURCES) $(nodist_gcry_seed_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_seed_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_serpent.module +MODULE_FILES += gcry_serpent.module$(EXEEXT) +gcry_serpent_module_SOURCES = lib/libgcrypt-grub/cipher/serpent.c ## platform sources +nodist_gcry_serpent_module_SOURCES = ## platform nodist sources +gcry_serpent_module_LDADD = +gcry_serpent_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_serpent_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_serpent_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_serpent_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_serpent_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_serpent_module_SOURCES) +CLEANFILES += $(nodist_gcry_serpent_module_SOURCES) +MOD_FILES += gcry_serpent.mod +MARKER_FILES += gcry_serpent.marker +CLEANFILES += gcry_serpent.marker + +gcry_serpent.marker: $(gcry_serpent_module_SOURCES) $(nodist_gcry_serpent_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_serpent_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_sha1.module +MODULE_FILES += gcry_sha1.module$(EXEEXT) +gcry_sha1_module_SOURCES = lib/libgcrypt-grub/cipher/sha1.c ## platform sources +nodist_gcry_sha1_module_SOURCES = ## platform nodist sources +gcry_sha1_module_LDADD = +gcry_sha1_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_sha1_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_sha1_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_sha1_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_sha1_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_sha1_module_SOURCES) +CLEANFILES += $(nodist_gcry_sha1_module_SOURCES) +MOD_FILES += gcry_sha1.mod +MARKER_FILES += gcry_sha1.marker +CLEANFILES += gcry_sha1.marker + +gcry_sha1.marker: $(gcry_sha1_module_SOURCES) $(nodist_gcry_sha1_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha1_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_sha256.module +MODULE_FILES += gcry_sha256.module$(EXEEXT) +gcry_sha256_module_SOURCES = lib/libgcrypt-grub/cipher/sha256.c ## platform sources +nodist_gcry_sha256_module_SOURCES = ## platform nodist sources +gcry_sha256_module_LDADD = +gcry_sha256_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_sha256_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_sha256_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_sha256_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_sha256_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_sha256_module_SOURCES) +CLEANFILES += $(nodist_gcry_sha256_module_SOURCES) +MOD_FILES += gcry_sha256.mod +MARKER_FILES += gcry_sha256.marker +CLEANFILES += gcry_sha256.marker + +gcry_sha256.marker: $(gcry_sha256_module_SOURCES) $(nodist_gcry_sha256_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha256_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_sha512.module +MODULE_FILES += gcry_sha512.module$(EXEEXT) +gcry_sha512_module_SOURCES = lib/libgcrypt-grub/cipher/sha512.c ## platform sources +nodist_gcry_sha512_module_SOURCES = ## platform nodist sources +gcry_sha512_module_LDADD = +gcry_sha512_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_sha512_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_sha512_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_sha512_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_sha512_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_sha512_module_SOURCES) +CLEANFILES += $(nodist_gcry_sha512_module_SOURCES) +MOD_FILES += gcry_sha512.mod +MARKER_FILES += gcry_sha512.marker +CLEANFILES += gcry_sha512.marker + +gcry_sha512.marker: $(gcry_sha512_module_SOURCES) $(nodist_gcry_sha512_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha512_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_tiger.module +MODULE_FILES += gcry_tiger.module$(EXEEXT) +gcry_tiger_module_SOURCES = lib/libgcrypt-grub/cipher/tiger.c ## platform sources +nodist_gcry_tiger_module_SOURCES = ## platform nodist sources +gcry_tiger_module_LDADD = +gcry_tiger_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_tiger_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_tiger_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_tiger_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_tiger_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_tiger_module_SOURCES) +CLEANFILES += $(nodist_gcry_tiger_module_SOURCES) +MOD_FILES += gcry_tiger.mod +MARKER_FILES += gcry_tiger.marker +CLEANFILES += gcry_tiger.marker + +gcry_tiger.marker: $(gcry_tiger_module_SOURCES) $(nodist_gcry_tiger_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_tiger_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_twofish.module +MODULE_FILES += gcry_twofish.module$(EXEEXT) +gcry_twofish_module_SOURCES = lib/libgcrypt-grub/cipher/twofish.c ## platform sources +nodist_gcry_twofish_module_SOURCES = ## platform nodist sources +gcry_twofish_module_LDADD = +gcry_twofish_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_twofish_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_twofish_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_twofish_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_twofish_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_twofish_module_SOURCES) +CLEANFILES += $(nodist_gcry_twofish_module_SOURCES) +MOD_FILES += gcry_twofish.mod +MARKER_FILES += gcry_twofish.marker +CLEANFILES += gcry_twofish.marker + +gcry_twofish.marker: $(gcry_twofish_module_SOURCES) $(nodist_gcry_twofish_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_twofish_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new +platform_PROGRAMS += gcry_whirlpool.module +MODULE_FILES += gcry_whirlpool.module$(EXEEXT) +gcry_whirlpool_module_SOURCES = lib/libgcrypt-grub/cipher/whirlpool.c ## platform sources +nodist_gcry_whirlpool_module_SOURCES = ## platform nodist sources +gcry_whirlpool_module_LDADD = +gcry_whirlpool_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_whirlpool_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_whirlpool_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_whirlpool_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_gcry_whirlpool_module_SOURCES) +CLEANFILES += $(nodist_gcry_whirlpool_module_SOURCES) +MOD_FILES += gcry_whirlpool.mod +MARKER_FILES += gcry_whirlpool.marker +CLEANFILES += gcry_whirlpool.marker + +gcry_whirlpool.marker: $(gcry_whirlpool_module_SOURCES) $(nodist_gcry_whirlpool_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_whirlpool_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +if COND_emu +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = +kernel_exec_SOURCES += disk/host.c kern/emu/cache_s.S kern/emu/hostdisk.c osdep/unix/hostdisk.c osdep/exec.c osdep/devmapper/hostdisk.c osdep/hostdisk.c kern/emu/hostfs.c kern/emu/main.c kern/emu/argp_common.c kern/emu/misc.c kern/emu/mm.c kern/emu/time.c kern/emu/cache.c osdep/emuconsole.c osdep/dl.c osdep/sleep.c osdep/init.c osdep/emunet.c osdep/cputime.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) $(CFLAGS_GNULIB) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS_GNULIB) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_OBJ2ELF) $< $@ || (rm -f $@; exit 1); else cp $< $@; fi +endif + +if COND_i386_pc +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/i386/pc/startup.S +kernel_exec_SOURCES += kern/i386/pc/init.c kern/i386/pc/mmap.c term/i386/pc/console.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x9000 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_i386_efi +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/i386/efi/startup.S +kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/i386/efi/init.c bus/pci.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_i386_qemu +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/i386/qemu/startup.S +kernel_exec_SOURCES += kern/i386/qemu/init.c bus/pci.c kern/vga_init.c kern/i386/qemu/mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_i386_coreboot +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/i386/coreboot/startup.S +kernel_exec_SOURCES += kern/i386/coreboot/init.c video/i386/coreboot/cbfb.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/tsc_pmtimer.c kern/i386/coreboot/mmap.c kern/i386/coreboot/cbtable.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_i386_multiboot +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/i386/coreboot/startup.S +kernel_exec_SOURCES += kern/i386/coreboot/init.c kern/i386/pc/acpi.c kern/acpi.c kern/i386/multiboot_mmap.c term/i386/pc/vga_text.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_i386_ieee1275 +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/i386/ieee1275/startup.S +kernel_exec_SOURCES += disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x10000 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_x86_64_efi +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/x86_64/efi/startup.S +kernel_exec_SOURCES += kern/i386/efi/tsc.c kern/i386/tsc_pmtimer.c kern/x86_64/efi/callwrap.S kern/i386/efi/init.c bus/pci.c kern/x86_64/dl.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/i386/tsc.c kern/i386/tsc_pit.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_i386_xen +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/i386/xen/startup.S +kernel_exec_SOURCES += kern/i386/dl.c kern/i386/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_x86_64_xen +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/x86_64/xen/startup.S +kernel_exec_SOURCES += kern/x86_64/dl.c kern/x86_64/xen/hypercall.S kern/i386/tsc.c kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c disk/xen/xendisk.c commands/boot.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_mips_loongson +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/mips/startup.S +kernel_exec_SOURCES += term/ns8250.c bus/bonito.c bus/cs5536.c bus/pci.c kern/mips/loongson/init.c term/at_keyboard.c commands/boot.c term/serial.c video/sm712.c video/sis315pro.c video/radeon_fuloong2e.c video/radeon_yeeloong3a.c commands/keylayouts.c term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c video/fb/video_fb.c video/video.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x80200000 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/sparc64/ieee1275/crt0.S +kernel_exec_SOURCES += kern/sparc64/cache.S kern/sparc64/dl.c kern/sparc64/ieee1275/ieee1275.c disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x4400 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_powerpc_ieee1275 +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/powerpc/ieee1275/startup.S +kernel_exec_SOURCES += kern/powerpc/cache.S kern/powerpc/dl.c kern/powerpc/compiler-rt.S disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c kern/ieee1275/openfw.c term/ieee1275/console.c kern/ieee1275/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x200000 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_mips_arc +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/mips/startup.S +kernel_exec_SOURCES += kern/mips/arc/init.c term/arc/console.c disk/arc/arcdisk.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,$(TARGET_LINK_ADDR) +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) -DGRUB_DECOMPRESSOR_LINK_ADDR=$(TARGET_DECOMPRESSOR_LINK_ADDR) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_ia64_efi +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = +kernel_exec_SOURCES += kern/ia64/efi/startup.S kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c kern/ia64/cache.c lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) -fno-builtin -fpic -minline-int-divide-max-throughput +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/mips/startup.S +kernel_exec_SOURCES += kern/mips/qemu_mips/init.c term/ns8250.c term/serial.c term/at_keyboard.c commands/boot.c commands/keylayouts.c term/i386/pc/vga_text.c kern/vga_init.c kern/generic/rtc_get_time_ms.c kern/mips/cache.S kern/mips/dl.c kern/mips/init.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x80200000 +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_arm_uboot +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/arm/uboot/startup.S +kernel_exec_SOURCES += disk/uboot/ubootdisk.c kern/uboot/uboot.c kern/uboot/init.c kern/uboot/hw.c term/uboot/console.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c term/terminfo.c term/tparm.c commands/extcmd.c lib/arg.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_arm_efi +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/arm/efi/startup.S +kernel_exec_SOURCES += kern/arm/efi/init.c kern/arm/efi/misc.c kern/efi/fdt.c kern/arm/dl.c kern/arm/dl_helper.c kern/arm/cache_armv6.S kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S lib/division.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_arm64_efi +platform_PROGRAMS += kernel.exec +kernel_exec_SOURCES = kern/arm64/efi/startup.S +kernel_exec_SOURCES += kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c kern/arm64/cache_flush.S kern/arm64/dl.c kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c kern/generic/millisleep.c kern/command.c kern/corecmd.c kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c kern/parser.c kern/partition.c kern/rescue_parser.c kern/rescue_reader.c kern/term.c +nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +kernel_exec_LDADD = +kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame +kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +dist_noinst_DATA += video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +BUILT_SOURCES += $(nodist_kernel_exec_SOURCES) +CLEANFILES += $(nodist_kernel_exec_SOURCES) +platform_DATA += kernel.img +CLEANFILES += kernel.img + +kernel.img: kernel.exec$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi +endif + +if COND_i386_pc +platform_PROGRAMS += boot.image +boot_image_SOURCES = boot/i386/pc/boot.S +nodist_boot_image_SOURCES = ## platform nodist sources +boot_image_LDADD = +boot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +boot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +boot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +boot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +boot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_image_SOURCES) +CLEANFILES += $(nodist_boot_image_SOURCES) +platform_DATA += boot.img +CLEANFILES += boot.img + +boot.img: boot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_i386_qemu +platform_PROGRAMS += boot.image +boot_image_SOURCES = boot/i386/qemu/boot.S +nodist_boot_image_SOURCES = ## platform nodist sources +boot_image_LDADD = +boot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +boot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR) +boot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +boot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) +boot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_image_SOURCES) +CLEANFILES += $(nodist_boot_image_SOURCES) +platform_DATA += boot.img +CLEANFILES += boot.img + +boot.img: boot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += boot.image +boot_image_SOURCES = boot/sparc64/ieee1275/boot.S +nodist_boot_image_SOURCES = ## platform nodist sources +boot_image_LDADD = +boot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +boot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext=0x4000 +boot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +boot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +boot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O a.out-sunos-big +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_image_SOURCES) +CLEANFILES += $(nodist_boot_image_SOURCES) +platform_DATA += boot.img +CLEANFILES += boot.img + +boot.img: boot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_i386_pc +platform_PROGRAMS += boot_hybrid.image +boot_hybrid_image_SOURCES = boot/i386/pc/boot.S +nodist_boot_hybrid_image_SOURCES = ## platform nodist sources +boot_hybrid_image_LDADD = +boot_hybrid_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +boot_hybrid_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +boot_hybrid_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DHYBRID_BOOT=1 +boot_hybrid_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +boot_hybrid_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_boot_hybrid_image_SOURCES) +CLEANFILES += $(nodist_boot_hybrid_image_SOURCES) +platform_DATA += boot_hybrid.img +CLEANFILES += boot_hybrid.img + +boot_hybrid.img: boot_hybrid.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_hybrid_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_i386_pc +platform_PROGRAMS += cdboot.image +cdboot_image_SOURCES = boot/i386/pc/cdboot.S +nodist_cdboot_image_SOURCES = ## platform nodist sources +cdboot_image_LDADD = +cdboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +cdboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +cdboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +cdboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +cdboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cdboot_image_SOURCES) +CLEANFILES += $(nodist_cdboot_image_SOURCES) +platform_DATA += cdboot.img +CLEANFILES += cdboot.img + +cdboot.img: cdboot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += cdboot.image +cdboot_image_SOURCES = boot/sparc64/ieee1275/boot.S +nodist_cdboot_image_SOURCES = ## platform nodist sources +cdboot_image_LDADD = +cdboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +cdboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext=0x4000 +cdboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DCDBOOT=1 +cdboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +cdboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O a.out-sunos-big +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_cdboot_image_SOURCES) +CLEANFILES += $(nodist_cdboot_image_SOURCES) +platform_DATA += cdboot.img +CLEANFILES += cdboot.img + +cdboot.img: cdboot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_i386_pc +platform_PROGRAMS += pxeboot.image +pxeboot_image_SOURCES = boot/i386/pc/pxeboot.S +nodist_pxeboot_image_SOURCES = ## platform nodist sources +pxeboot_image_LDADD = +pxeboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +pxeboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +pxeboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +pxeboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +pxeboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_pxeboot_image_SOURCES) +CLEANFILES += $(nodist_pxeboot_image_SOURCES) +platform_DATA += pxeboot.img +CLEANFILES += pxeboot.img + +pxeboot.img: pxeboot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(pxeboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_i386_pc +platform_PROGRAMS += diskboot.image +diskboot_image_SOURCES = boot/i386/pc/diskboot.S +nodist_diskboot_image_SOURCES = ## platform nodist sources +diskboot_image_LDADD = +diskboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +diskboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8000 +diskboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +diskboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +diskboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_diskboot_image_SOURCES) +CLEANFILES += $(nodist_diskboot_image_SOURCES) +platform_DATA += diskboot.img +CLEANFILES += diskboot.img + +diskboot.img: diskboot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_sparc64_ieee1275 +platform_PROGRAMS += diskboot.image +diskboot_image_SOURCES = boot/sparc64/ieee1275/diskboot.S +nodist_diskboot_image_SOURCES = ## platform nodist sources +diskboot_image_LDADD = +diskboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +diskboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext=0x4200 +diskboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +diskboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +diskboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_diskboot_image_SOURCES) +CLEANFILES += $(nodist_diskboot_image_SOURCES) +platform_DATA += diskboot.img +CLEANFILES += diskboot.img + +diskboot.img: diskboot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_i386_pc +platform_PROGRAMS += lnxboot.image +lnxboot_image_SOURCES = boot/i386/pc/lnxboot.S +nodist_lnxboot_image_SOURCES = ## platform nodist sources +lnxboot_image_LDADD = +lnxboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +lnxboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x6000 +lnxboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +lnxboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +lnxboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lnxboot_image_SOURCES) +CLEANFILES += $(nodist_lnxboot_image_SOURCES) +platform_DATA += lnxboot.img +CLEANFILES += lnxboot.img + +lnxboot.img: lnxboot.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lnxboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_loongson +platform_PROGRAMS += xz_decompress.image +xz_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/minilib.c boot/decompressor/xz.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c kern/compiler-rt.c +nodist_xz_decompress_image_SOURCES = ## platform nodist sources +xz_decompress_image_LDADD = +xz_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) -Wno-unreachable-code +xz_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +xz_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1 +xz_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +xz_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xz_decompress_image_SOURCES) +CLEANFILES += $(nodist_xz_decompress_image_SOURCES) +platform_DATA += xz_decompress.img +CLEANFILES += xz_decompress.img + +xz_decompress.img: xz_decompress.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_arc +platform_PROGRAMS += xz_decompress.image +xz_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/minilib.c boot/decompressor/xz.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c kern/compiler-rt.c +nodist_xz_decompress_image_SOURCES = ## platform nodist sources +xz_decompress_image_LDADD = +xz_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) -Wno-unreachable-code +xz_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +xz_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1 +xz_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +xz_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xz_decompress_image_SOURCES) +CLEANFILES += $(nodist_xz_decompress_image_SOURCES) +platform_DATA += xz_decompress.img +CLEANFILES += xz_decompress.img + +xz_decompress.img: xz_decompress.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += xz_decompress.image +xz_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/minilib.c boot/decompressor/xz.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c kern/compiler-rt.c +nodist_xz_decompress_image_SOURCES = ## platform nodist sources +xz_decompress_image_LDADD = +xz_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) -Wno-unreachable-code +xz_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +xz_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1 +xz_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +xz_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_xz_decompress_image_SOURCES) +CLEANFILES += $(nodist_xz_decompress_image_SOURCES) +platform_DATA += xz_decompress.img +CLEANFILES += xz_decompress.img + +xz_decompress.img: xz_decompress.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_loongson +platform_PROGRAMS += none_decompress.image +none_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/none.c +nodist_none_decompress_image_SOURCES = ## platform nodist sources +none_decompress_image_LDADD = +none_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +none_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +none_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DGRUB_EMBED_DECOMPRESSOR=1 +none_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +none_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_none_decompress_image_SOURCES) +CLEANFILES += $(nodist_none_decompress_image_SOURCES) +platform_DATA += none_decompress.img +CLEANFILES += none_decompress.img + +none_decompress.img: none_decompress.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_arc +platform_PROGRAMS += none_decompress.image +none_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/none.c +nodist_none_decompress_image_SOURCES = ## platform nodist sources +none_decompress_image_LDADD = +none_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +none_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +none_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DGRUB_EMBED_DECOMPRESSOR=1 +none_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +none_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_none_decompress_image_SOURCES) +CLEANFILES += $(nodist_none_decompress_image_SOURCES) +platform_DATA += none_decompress.img +CLEANFILES += none_decompress.img + +none_decompress.img: none_decompress.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_qemu_mips +platform_PROGRAMS += none_decompress.image +none_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/none.c +nodist_none_decompress_image_SOURCES = ## platform nodist sources +none_decompress_image_LDADD = +none_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +none_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +none_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DGRUB_EMBED_DECOMPRESSOR=1 +none_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +none_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_none_decompress_image_SOURCES) +CLEANFILES += $(nodist_none_decompress_image_SOURCES) +platform_DATA += none_decompress.img +CLEANFILES += none_decompress.img + +none_decompress.img: none_decompress.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_i386_pc +platform_PROGRAMS += lzma_decompress.image +lzma_decompress_image_SOURCES = boot/i386/pc/startup_raw.S +nodist_lzma_decompress_image_SOURCES = rs_decoder.h ## platform nodist sources +lzma_decompress_image_LDADD = +lzma_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +lzma_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +lzma_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +lzma_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +lzma_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_lzma_decompress_image_SOURCES) +CLEANFILES += $(nodist_lzma_decompress_image_SOURCES) +platform_DATA += lzma_decompress.img +CLEANFILES += lzma_decompress.img + +lzma_decompress.img: lzma_decompress.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lzma_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_loongson +platform_PROGRAMS += fwstart.image +fwstart_image_SOURCES = boot/mips/loongson/fwstart.S +nodist_fwstart_image_SOURCES = ## platform nodist sources +fwstart_image_LDADD = +fwstart_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +fwstart_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic +fwstart_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +fwstart_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +fwstart_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fwstart_image_SOURCES) +CLEANFILES += $(nodist_fwstart_image_SOURCES) +platform_DATA += fwstart.img +CLEANFILES += fwstart.img + +fwstart.img: fwstart.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_mips_loongson +platform_PROGRAMS += fwstart_fuloong2f.image +fwstart_fuloong2f_image_SOURCES = boot/mips/loongson/fuloong2f.S +nodist_fwstart_fuloong2f_image_SOURCES = ## platform nodist sources +fwstart_fuloong2f_image_LDADD = +fwstart_fuloong2f_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +fwstart_fuloong2f_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic +fwstart_fuloong2f_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +fwstart_fuloong2f_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +fwstart_fuloong2f_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_fwstart_fuloong2f_image_SOURCES) +CLEANFILES += $(nodist_fwstart_fuloong2f_image_SOURCES) +platform_DATA += fwstart_fuloong2f.img +CLEANFILES += fwstart_fuloong2f.img + +fwstart_fuloong2f.img: fwstart_fuloong2f.image$(EXEEXT) + if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_fuloong2f_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +endif + +if COND_emu +bin_PROGRAMS += grub-emu +if COND_MAN_PAGES +man_MANS += grub-emu.1 + +grub-emu.1: grub-emu + chmod a+x grub-emu + PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-emu.h2m -o $@ grub-emu + +CLEANFILES += grub-emu.1 +endif +grub_emu_SOURCES = kern/emu/full.c +nodist_grub_emu_SOURCES = grub_emu_init.c +grub_emu_LDADD = kernel.exec$(EXEEXT) $(MODULE_FILES) gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_emu_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_emu_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_emu_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_emu_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_emu_SOURCES) +CLEANFILES += $(nodist_grub_emu_SOURCES) +endif + +if COND_emu +bin_PROGRAMS += grub-emu-lite +grub_emu_lite_SOURCES = kern/emu/lite.c +nodist_grub_emu_lite_SOURCES = symlist.c +grub_emu_lite_LDADD = kernel.exec$(EXEEXT) gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +grub_emu_lite_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +grub_emu_lite_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +grub_emu_lite_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +grub_emu_lite_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +dist_noinst_DATA += +BUILT_SOURCES += $(nodist_grub_emu_lite_SOURCES) +CLEANFILES += $(nodist_grub_emu_lite_SOURCES) +endif +noinst_DATA += gensyminfo.sh + +gensyminfo.sh: $(top_builddir)/config.status gensyminfo.sh.in + (for x in gensyminfo.sh.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gensyminfo.sh + +CLEANFILES += gensyminfo.sh +EXTRA_DIST += +dist_noinst_DATA += gensyminfo.sh.in +noinst_DATA += genmod.sh + +genmod.sh: $(top_builddir)/config.status genmod.sh.in + (for x in genmod.sh.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x genmod.sh + +CLEANFILES += genmod.sh +EXTRA_DIST += +dist_noinst_DATA += genmod.sh.in +noinst_DATA += modinfo.sh + +modinfo.sh: $(top_builddir)/config.status modinfo.sh.in + (for x in modinfo.sh.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x modinfo.sh + +CLEANFILES += modinfo.sh +EXTRA_DIST += +dist_noinst_DATA += modinfo.sh.in +platform_DATA += gmodule.pl + +gmodule.pl: $(top_builddir)/config.status gmodule.pl.in + (for x in gmodule.pl.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gmodule.pl + +CLEANFILES += gmodule.pl +EXTRA_DIST += +dist_noinst_DATA += gmodule.pl.in +platform_DATA += gdb_grub + +gdb_grub: $(top_builddir)/config.status gdb_grub.in + (for x in gdb_grub.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gdb_grub + +CLEANFILES += gdb_grub +EXTRA_DIST += +dist_noinst_DATA += gdb_grub.in + +if COND_powerpc_ieee1275 +platform_DATA += grub.chrp + +grub.chrp: $(top_builddir)/config.status boot/powerpc/grub.chrp.in + (for x in boot/powerpc/grub.chrp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x grub.chrp + +CLEANFILES += grub.chrp +EXTRA_DIST += +dist_noinst_DATA += boot/powerpc/grub.chrp.in +endif + +if COND_powerpc_ieee1275 +platform_DATA += bootinfo.txt + +bootinfo.txt: $(top_builddir)/config.status boot/powerpc/bootinfo.txt.in + (for x in boot/powerpc/bootinfo.txt.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x bootinfo.txt + +CLEANFILES += bootinfo.txt +EXTRA_DIST += +dist_noinst_DATA += boot/powerpc/bootinfo.txt.in +endif diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def new file mode 100644 index 000000000..2dfa22a92 --- /dev/null +++ b/grub-core/Makefile.core.def @@ -0,0 +1,2357 @@ +AutoGen definitions Makefile.tpl; + +transform_data = { + installdir = noinst; + name = gensyminfo.sh; + common = gensyminfo.sh.in; +}; + +transform_data = { + installdir = noinst; + name = genmod.sh; + common = genmod.sh.in; +}; + +transform_data = { + installdir = noinst; + name = modinfo.sh; + common = modinfo.sh.in; +}; + +transform_data = { + installdir = platform; + name = gmodule.pl; + common = gmodule.pl.in; +}; + +transform_data = { + installdir = platform; + name = gdb_grub; + common = gdb_grub.in; +}; + +transform_data = { + installdir = platform; + name = grub.chrp; + common = boot/powerpc/grub.chrp.in; + enable = powerpc_ieee1275; +}; + +transform_data = { + installdir = platform; + name = bootinfo.txt; + common = boot/powerpc/bootinfo.txt.in; + enable = powerpc_ieee1275; +}; + +kernel = { + name = kernel; + + nostrip = emu; + + emu_ldflags = '-Wl,-r,-d'; + i386_efi_ldflags = '-Wl,-r,-d'; + i386_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; + x86_64_efi_ldflags = '-Wl,-r,-d'; + x86_64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; + + ia64_efi_cflags = '-fno-builtin -fpic -minline-int-divide-max-throughput'; + ia64_efi_ldflags = '-Wl,-r,-d'; + ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; + + arm_efi_ldflags = '-Wl,-r,-d'; + arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; + + arm64_efi_ldflags = '-Wl,-r,-d'; + arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame'; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000'; + i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; + i386_coreboot_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_coreboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; + i386_multiboot_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_multiboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; + i386_ieee1275_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_ieee1275_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x10000'; + i386_xen_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0'; + x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)'; + x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0'; + + mips_loongson_ldflags = '-Wl,-Ttext,0x80200000'; + powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000'; + sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400'; + mips_arc_ldflags = '-Wl,-Ttext,$(TARGET_LINK_ADDR)'; + mips_qemu_mips_ldflags = '-Wl,-Ttext,0x80200000'; + + mips_arc_cppflags = '-DGRUB_DECOMPRESSOR_LINK_ADDR=$(TARGET_DECOMPRESSOR_LINK_ADDR)'; + i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; + emu_cflags = '$(CFLAGS_GNULIB)'; + emu_cppflags = '$(CPPFLAGS_GNULIB)'; + arm_uboot_ldflags = '-Wl,-r,-d'; + arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; + + i386_pc_startup = kern/i386/pc/startup.S; + i386_efi_startup = kern/i386/efi/startup.S; + x86_64_efi_startup = kern/x86_64/efi/startup.S; + i386_xen_startup = kern/i386/xen/startup.S; + x86_64_xen_startup = kern/x86_64/xen/startup.S; + i386_qemu_startup = kern/i386/qemu/startup.S; + i386_ieee1275_startup = kern/i386/ieee1275/startup.S; + i386_coreboot_startup = kern/i386/coreboot/startup.S; + i386_multiboot_startup = kern/i386/coreboot/startup.S; + mips_startup = kern/mips/startup.S; + sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S; + powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S; + arm_uboot_startup = kern/arm/uboot/startup.S; + arm_efi_startup = kern/arm/efi/startup.S; + arm64_efi_startup = kern/arm64/efi/startup.S; + + common = kern/command.c; + common = kern/corecmd.c; + common = kern/device.c; + common = kern/disk.c; + common = kern/dl.c; + common = kern/env.c; + common = kern/err.c; + common = kern/file.c; + common = kern/fs.c; + common = kern/list.c; + common = kern/main.c; + common = kern/misc.c; + common = kern/parser.c; + common = kern/partition.c; + common = kern/rescue_parser.c; + common = kern/rescue_reader.c; + common = kern/term.c; + + noemu = kern/compiler-rt.c; + noemu = kern/mm.c; + noemu = kern/time.c; + noemu = kern/generic/millisleep.c; + + noemu_nodist = symlist.c; + + mips = kern/generic/rtc_get_time_ms.c; + + ieee1275 = disk/ieee1275/ofdisk.c; + ieee1275 = kern/ieee1275/cmain.c; + ieee1275 = kern/ieee1275/ieee1275.c; + ieee1275 = kern/ieee1275/mmap.c; + ieee1275 = kern/ieee1275/openfw.c; + ieee1275 = term/ieee1275/console.c; + ieee1275 = kern/ieee1275/init.c; + + uboot = disk/uboot/ubootdisk.c; + uboot = kern/uboot/uboot.c; + uboot = kern/uboot/init.c; + uboot = kern/uboot/hw.c; + uboot = term/uboot/console.c; + + terminfoinkernel = term/terminfo.c; + terminfoinkernel = term/tparm.c; + terminfoinkernel = commands/extcmd.c; + terminfoinkernel = lib/arg.c; + + softdiv = lib/division.c; + + i386 = kern/i386/dl.c; + i386_xen = kern/i386/dl.c; + + i386_coreboot = kern/i386/coreboot/init.c; + i386_multiboot = kern/i386/coreboot/init.c; + i386_qemu = kern/i386/qemu/init.c; + i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c; + i386_coreboot = video/i386/coreboot/cbfb.c; + + efi = disk/efi/efidisk.c; + efi = kern/efi/efi.c; + efi = kern/efi/init.c; + efi = kern/efi/mm.c; + efi = term/efi/console.c; + efi = kern/acpi.c; + efi = kern/efi/acpi.c; + i386_coreboot = kern/i386/pc/acpi.c; + i386_multiboot = kern/i386/pc/acpi.c; + i386_coreboot = kern/acpi.c; + i386_multiboot = kern/acpi.c; + + x86 = kern/i386/tsc.c; + x86 = kern/i386/tsc_pit.c; + i386_efi = kern/i386/efi/tsc.c; + x86_64_efi = kern/i386/efi/tsc.c; + i386_efi = kern/i386/tsc_pmtimer.c; + i386_coreboot = kern/i386/tsc_pmtimer.c; + x86_64_efi = kern/i386/tsc_pmtimer.c; + + i386_efi = kern/i386/efi/init.c; + i386_efi = bus/pci.c; + + x86_64 = kern/x86_64/dl.c; + x86_64_xen = kern/x86_64/dl.c; + x86_64_efi = kern/x86_64/efi/callwrap.S; + x86_64_efi = kern/i386/efi/init.c; + x86_64_efi = bus/pci.c; + + xen = kern/i386/tsc.c; + xen = kern/i386/xen/tsc.c; + x86_64_xen = kern/x86_64/xen/hypercall.S; + i386_xen = kern/i386/xen/hypercall.S; + xen = kern/xen/init.c; + xen = term/xen/console.c; + xen = disk/xen/xendisk.c; + xen = commands/boot.c; + + ia64_efi = kern/ia64/efi/startup.S; + ia64_efi = kern/ia64/efi/init.c; + ia64_efi = kern/ia64/dl.c; + ia64_efi = kern/ia64/dl_helper.c; + ia64_efi = kern/ia64/cache.c; + + arm_efi = kern/arm/efi/init.c; + arm_efi = kern/arm/efi/misc.c; + arm_efi = kern/efi/fdt.c; + + arm64_efi = kern/arm64/efi/init.c; + arm64_efi = kern/efi/fdt.c; + + i386_pc = kern/i386/pc/init.c; + i386_pc = kern/i386/pc/mmap.c; + i386_pc = term/i386/pc/console.c; + + i386_qemu = bus/pci.c; + i386_qemu = kern/vga_init.c; + i386_qemu = kern/i386/qemu/mmap.c; + + i386_coreboot = kern/i386/coreboot/mmap.c; + i386_coreboot = kern/i386/coreboot/cbtable.c; + + i386_multiboot = kern/i386/multiboot_mmap.c; + + mips = kern/mips/cache.S; + mips = kern/mips/dl.c; + mips = kern/mips/init.c; + + mips_qemu_mips = kern/mips/qemu_mips/init.c; + mips_qemu_mips = term/ns8250.c; + mips_qemu_mips = term/serial.c; + mips_qemu_mips = term/at_keyboard.c; + mips_qemu_mips = commands/boot.c; + mips_qemu_mips = commands/keylayouts.c; + mips_qemu_mips = term/i386/pc/vga_text.c; + mips_qemu_mips = kern/vga_init.c; + + mips_arc = kern/mips/arc/init.c; + mips_arc = term/arc/console.c; + mips_arc = disk/arc/arcdisk.c; + + mips_loongson = term/ns8250.c; + mips_loongson = bus/bonito.c; + mips_loongson = bus/cs5536.c; + mips_loongson = bus/pci.c; + mips_loongson = kern/mips/loongson/init.c; + mips_loongson = term/at_keyboard.c; + mips_loongson = commands/boot.c; + mips_loongson = term/serial.c; + mips_loongson = video/sm712.c; + mips_loongson = video/sis315pro.c; + mips_loongson = video/radeon_fuloong2e.c; + mips_loongson = video/radeon_yeeloong3a.c; + extra_dist = video/sm712_init.c; + extra_dist = video/sis315_init.c; + mips_loongson = commands/keylayouts.c; + + powerpc_ieee1275 = kern/powerpc/cache.S; + powerpc_ieee1275 = kern/powerpc/dl.c; + powerpc_ieee1275 = kern/powerpc/compiler-rt.S; + + sparc64_ieee1275 = kern/sparc64/cache.S; + sparc64_ieee1275 = kern/sparc64/dl.c; + sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c; + + arm = kern/arm/dl.c; + arm = kern/arm/dl_helper.c; + arm = kern/arm/cache_armv6.S; + arm = kern/arm/cache_armv7.S; + extra_dist = kern/arm/cache.S; + arm = kern/arm/cache.c; + arm = kern/arm/compiler-rt.S; + + arm64 = kern/arm64/cache.c; + arm64 = kern/arm64/cache_flush.S; + arm64 = kern/arm64/dl.c; + arm64 = kern/arm64/dl_helper.c; + + emu = disk/host.c; + emu = kern/emu/cache_s.S; + emu = kern/emu/hostdisk.c; + emu = osdep/unix/hostdisk.c; + emu = osdep/exec.c; + extra_dist = osdep/unix/exec.c; + emu = osdep/devmapper/hostdisk.c; + emu = osdep/hostdisk.c; + emu = kern/emu/hostfs.c; + emu = kern/emu/main.c; + emu = kern/emu/argp_common.c; + emu = kern/emu/misc.c; + emu = kern/emu/mm.c; + emu = kern/emu/time.c; + emu = kern/emu/cache.c; + emu = osdep/emuconsole.c; + extra_dist = osdep/unix/emuconsole.c; + extra_dist = osdep/windows/emuconsole.c; + emu = osdep/dl.c; + extra_dist = osdep/unix/dl.c; + extra_dist = osdep/windows/dl.c; + emu = osdep/sleep.c; + emu = osdep/init.c; + emu = osdep/emunet.c; + extra_dist = osdep/linux/emunet.c; + extra_dist = osdep/basic/emunet.c; + emu = osdep/cputime.c; + extra_dist = osdep/unix/cputime.c; + extra_dist = osdep/windows/cputime.c; + + videoinkernel = term/gfxterm.c; + videoinkernel = font/font.c; + videoinkernel = font/font_cmd.c; + videoinkernel = io/bufio.c; + videoinkernel = video/fb/fbblit.c; + videoinkernel = video/fb/fbfill.c; + videoinkernel = video/fb/fbutil.c; + videoinkernel = video/fb/video_fb.c; + videoinkernel = video/video.c; + + extra_dist = kern/i386/int.S; + extra_dist = kern/i386/realmode.S; + extra_dist = boot/i386/pc/lzma_decode.S; + extra_dist = kern/mips/cache_flush.S; +}; + +program = { + name = grub-emu; + mansection = 1; + + emu = kern/emu/full.c; + emu_nodist = grub_emu_init.c; + + ldadd = 'kernel.exec$(EXEEXT)'; + ldadd = '$(MODULE_FILES)'; + ldadd = 'gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + + enable = emu; +}; + +program = { + name = grub-emu-lite; + + emu = kern/emu/lite.c; + emu_nodist = symlist.c; + + ldadd = 'kernel.exec$(EXEEXT)'; + ldadd = 'gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + + enable = emu; +}; + +image = { + name = boot; + i386_pc = boot/i386/pc/boot.S; + i386_qemu = boot/i386/qemu/boot.S; + sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; + + i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)'; + i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; + + sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big'; + sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000'; + + objcopyflags = '-O binary'; + enable = i386_pc; + enable = i386_qemu; + enable = sparc64_ieee1275; +}; + +image = { + name = boot_hybrid; + i386_pc = boot/i386/pc/boot.S; + + cppflags = '-DHYBRID_BOOT=1'; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; + + objcopyflags = '-O binary'; + enable = i386_pc; +}; + +image = { + name = cdboot; + + i386_pc = boot/i386/pc/cdboot.S; + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; + + sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S; + sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big'; + sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000'; + sparc64_ieee1275_cppflags = '-DCDBOOT=1'; + + objcopyflags = '-O binary'; + + enable = sparc64_ieee1275; + enable = i386_pc; +}; + +image = { + name = pxeboot; + i386_pc = boot/i386/pc/pxeboot.S; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00'; + + objcopyflags = '-O binary'; + enable = i386_pc; +}; + +image = { + name = diskboot; + i386_pc = boot/i386/pc/diskboot.S; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8000'; + + sparc64_ieee1275 = boot/sparc64/ieee1275/diskboot.S; + sparc64_ieee1275_ldflags = '-Wl,-Ttext=0x4200'; + + objcopyflags = '-O binary'; + + enable = i386_pc; + enable = sparc64_ieee1275; +}; + +image = { + name = lnxboot; + i386_pc = boot/i386/pc/lnxboot.S; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x6000'; + + objcopyflags = '-O binary'; + enable = i386_pc; +}; + +image = { + name = xz_decompress; + mips = boot/mips/startup_raw.S; + common = boot/decompressor/minilib.c; + common = boot/decompressor/xz.c; + common = lib/xzembed/xz_dec_bcj.c; + common = lib/xzembed/xz_dec_lzma2.c; + common = lib/xzembed/xz_dec_stream.c; + common = kern/compiler-rt.c; + + cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1'; + + objcopyflags = '-O binary'; + mips_ldflags = '-Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)'; + cflags = '-Wno-unreachable-code'; + enable = mips; +}; + +image = { + name = none_decompress; + mips = boot/mips/startup_raw.S; + common = boot/decompressor/none.c; + + cppflags = '-DGRUB_EMBED_DECOMPRESSOR=1'; + + objcopyflags = '-O binary'; + mips_ldflags = '-Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)'; + enable = mips; +}; + +image = { + name = lzma_decompress; + i386_pc = boot/i386/pc/startup_raw.S; + i386_pc_nodist = rs_decoder.h; + + objcopyflags = '-O binary'; + ldflags = '$(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200'; + enable = i386_pc; +}; + +image = { + name = fwstart; + mips_loongson = boot/mips/loongson/fwstart.S; + objcopyflags = '-O binary'; + ldflags = '-Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic'; + enable = mips_loongson; +}; + +image = { + name = fwstart_fuloong2f; + mips_loongson = boot/mips/loongson/fuloong2f.S; + objcopyflags = '-O binary'; + ldflags = '-Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic'; + enable = mips_loongson; +}; + +module = { + name = disk; + common = lib/disk.c; + extra_dist = kern/disk_common.c; +}; + +module = { + name = trig; + common_nodist = trigtables.c; + extra_dist = gentrigtables.c; +}; + +module = { + name = cs5536; + x86 = bus/cs5536.c; + enable = x86; +}; + +module = { + name = lsspd; + mips_loongson = commands/mips/loongson/lsspd.c; + enable = mips_loongson; +}; + +module = { + name = usb; + common = bus/usb/usb.c; + common = bus/usb/usbtrans.c; + common = bus/usb/usbhub.c; + enable = usb; +}; + +module = { + name = usbserial_common; + common = bus/usb/serial/common.c; + enable = usb; +}; + +module = { + name = usbserial_pl2303; + common = bus/usb/serial/pl2303.c; + enable = usb; +}; + +module = { + name = usbserial_ftdi; + common = bus/usb/serial/ftdi.c; + enable = usb; +}; + +module = { + name = usbserial_usbdebug; + common = bus/usb/serial/usbdebug_late.c; + enable = usb; +}; + +module = { + name = uhci; + common = bus/usb/uhci.c; + enable = pci; +}; + +module = { + name = ohci; + common = bus/usb/ohci.c; + enable = pci; +}; + +module = { + name = ehci; + common = bus/usb/ehci.c; + enable = pci; +}; + +module = { + name = pci; + common = bus/pci.c; + i386_ieee1275 = bus/i386/ieee1275/pci.c; + + enable = i386_pc; + enable = i386_ieee1275; + enable = i386_coreboot; + enable = i386_multiboot; +}; + +module = { + name = nativedisk; + common = commands/nativedisk.c; + + enable = x86; + enable = mips_loongson; + enable = mips_qemu_mips; +}; + +module = { + name = emupci; + common = bus/emu/pci.c; + common = commands/lspci.c; + + enable = emu; + condition = COND_GRUB_EMU_PCI; +}; + +module = { + name = lsdev; + common = commands/arc/lsdev.c; + + enable = mips_arc; +}; + +module = { + name = lsxen; + common = commands/xen/lsxen.c; + + enable = xen; +}; + +module = { + name = cmostest; + common = commands/i386/cmostest.c; + enable = cmos; +}; + +module = { + name = cmosdump; + common = commands/i386/cmosdump.c; + enable = cmos; +}; + +module = { + name = iorw; + common = commands/iorw.c; + enable = x86; +}; + +module = { + name = cbtable; + common = kern/i386/coreboot/cbtable.c; + enable = i386_pc; + enable = i386_efi; + enable = i386_qemu; + enable = i386_multiboot; + enable = i386_ieee1275; + enable = x86_64_efi; +}; + +module = { + name = cbtime; + common = commands/i386/coreboot/cb_timestamps.c; + enable = x86; +}; + +module = { + name = cbls; + common = commands/i386/coreboot/cbls.c; + enable = x86; +}; + +module = { + name = cbmemc; + common = term/i386/coreboot/cbmemc.c; + enable = x86; +}; + +module = { + name = regexp; + common = commands/regexp.c; + common = commands/wildcard.c; + common = gnulib/regex.c; + cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; + cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; +}; + +module = { + name = acpi; + + common = commands/acpi.c; + i386_pc = kern/acpi.c; + i386_pc = kern/i386/pc/acpi.c; + + enable = efi; + enable = i386_pc; + enable = i386_coreboot; + enable = i386_multiboot; +}; + +module = { + name = lsacpi; + + common = commands/lsacpi.c; + + enable = efi; + enable = i386_pc; + enable = i386_coreboot; + enable = i386_multiboot; +}; + +module = { + name = lsefisystab; + + common = commands/efi/lsefisystab.c; + + enable = efi; +}; + +module = { + name = lssal; + + common = commands/efi/lssal.c; + + enable = efi; +}; + +module = { + name = lsefimmap; + + common = commands/efi/lsefimmap.c; + + enable = efi; +}; + +module = { + name = lsefi; + common = commands/efi/lsefi.c; + enable = efi; +}; + +module = { + name = efifwsetup; + efi = commands/efi/efifwsetup.c; + enable = efi; +}; + +module = { + name = blocklist; + common = commands/blocklist.c; +}; + +module = { + name = boot; + common = commands/boot.c; + i386_pc = lib/i386/pc/biosnum.c; + enable = x86; + enable = emu; + enable = sparc64_ieee1275; + enable = powerpc_ieee1275; + enable = mips_arc; + enable = ia64_efi; + enable = arm_efi; + enable = arm64_efi; + enable = arm_uboot; +}; + +module = { + name = cat; + common = commands/cat.c; +}; + +module = { + name = cmp; + common = commands/cmp.c; +}; + +module = { + name = configfile; + common = commands/configfile.c; +}; + +module = { + name = cpuid; + common = commands/i386/cpuid.c; + enable = x86; + enable = i386_xen; + enable = x86_64_xen; +}; + +module = { + name = date; + common = commands/date.c; +}; + +module = { + name = drivemap; + + i386_pc = commands/i386/pc/drivemap.c; + i386_pc = commands/i386/pc/drivemap_int13h.S; + enable = i386_pc; +}; + +module = { + name = echo; + common = commands/echo.c; +}; + +module = { + name = eval; + common = commands/eval.c; +}; + +module = { + name = extcmd; + common = commands/extcmd.c; + common = lib/arg.c; + enable = terminfomodule; +}; + +module = { + name = fixvideo; + common = commands/efi/fixvideo.c; + enable = i386_efi; + enable = x86_64_efi; +}; + +module = { + name = gptsync; + common = commands/gptsync.c; +}; + +module = { + name = halt; + nopc = commands/halt.c; + i386_pc = commands/i386/pc/halt.c; + i386_pc = commands/acpihalt.c; + i386_coreboot = commands/acpihalt.c; + i386_multiboot = commands/acpihalt.c; + i386_efi = commands/acpihalt.c; + x86_64_efi = commands/acpihalt.c; + i386_multiboot = lib/i386/halt.c; + i386_coreboot = lib/i386/halt.c; + i386_qemu = lib/i386/halt.c; + xen = lib/xen/halt.c; + efi = lib/efi/halt.c; + ieee1275 = lib/ieee1275/halt.c; + emu = lib/emu/halt.c; + uboot = lib/uboot/halt.c; +}; + +module = { + name = reboot; + i386 = lib/i386/reboot.c; + i386 = lib/i386/reboot_trampoline.S; + ia64_efi = lib/efi/reboot.c; + x86_64_efi = lib/efi/reboot.c; + arm_efi = lib/efi/reboot.c; + arm64_efi = lib/efi/reboot.c; + powerpc_ieee1275 = lib/ieee1275/reboot.c; + sparc64_ieee1275 = lib/ieee1275/reboot.c; + mips_arc = lib/mips/arc/reboot.c; + mips_loongson = lib/mips/loongson/reboot.c; + mips_qemu_mips = lib/mips/qemu_mips/reboot.c; + xen = lib/xen/reboot.c; + uboot = lib/uboot/reboot.c; + common = commands/reboot.c; +}; + +module = { + name = hashsum; + common = commands/hashsum.c; +}; + +module = { + name = verify; + common = commands/verify.c; + cflags = '$(CFLAGS_POSIX)'; + cppflags = '-I$(srcdir)/lib/posix_wrap'; +}; + +module = { + name = hdparm; + common = commands/hdparm.c; + common = lib/hexdump.c; + enable = pci; + enable = mips_qemu_mips; +}; + +module = { + name = help; + common = commands/help.c; +}; + +module = { + name = hexdump; + common = commands/hexdump.c; + common = lib/hexdump.c; +}; + +module = { + name = keystatus; + common = commands/keystatus.c; +}; + +module = { + name = loadbios; + common = commands/efi/loadbios.c; + enable = i386_efi; + enable = x86_64_efi; +}; + +module = { + name = loadenv; + common = commands/loadenv.c; + common = lib/envblk.c; +}; + +module = { + name = ls; + common = commands/ls.c; +}; + +module = { + name = lsmmap; + common = commands/lsmmap.c; +}; + +module = { + name = lspci; + common = commands/lspci.c; + + enable = pci; +}; + +module = { + name = memrw; + common = commands/memrw.c; +}; + +module = { + name = minicmd; + common = commands/minicmd.c; +}; + +module = { + name = parttool; + common = commands/parttool.c; +}; + +module = { + name = password; + common = commands/password.c; +}; + +module = { + name = password_pbkdf2; + common = commands/password_pbkdf2.c; +}; + +module = { + name = play; + x86 = commands/i386/pc/play.c; + enable = x86; +}; + +module = { + name = spkmodem; + x86 = term/spkmodem.c; + enable = x86; +}; + +module = { + name = morse; + x86 = term/morse.c; + enable = x86; +}; + +module = { + name = probe; + common = commands/probe.c; +}; + +module = { + name = read; + common = commands/read.c; +}; + +module = { + name = search; + common = commands/search_wrap.c; + extra_dist = commands/search.c; +}; + +module = { + name = search_fs_file; + common = commands/search_file.c; +}; + +module = { + name = search_fs_uuid; + common = commands/search_uuid.c; +}; + +module = { + name = search_label; + common = commands/search_label.c; +}; + +module = { + name = setpci; + common = commands/setpci.c; + enable = pci; +}; + +module = { + name = pcidump; + common = commands/pcidump.c; + enable = pci; +}; + +module = { + name = sleep; + common = commands/sleep.c; +}; + +module = { + name = suspend; + ieee1275 = commands/ieee1275/suspend.c; + enable = i386_ieee1275; + enable = powerpc_ieee1275; +}; + +module = { + name = escc; + ieee1275 = term/ieee1275/escc.c; + enable = powerpc_ieee1275; +}; + +module = { + name = terminal; + common = commands/terminal.c; +}; + +module = { + name = test; + common = commands/test.c; +}; + +module = { + name = true; + common = commands/true.c; +}; + +module = { + name = usbtest; + common = commands/usbtest.c; + enable = usb; +}; + +module = { + name = videoinfo; + common = commands/videoinfo.c; +}; + +module = { + name = videotest; + common = commands/videotest.c; +}; + +module = { + name = xnu_uuid; + common = commands/xnu_uuid.c; +}; + +module = { + name = dm_nv; + common = disk/dmraid_nvidia.c; +}; + +module = { + name = loopback; + common = disk/loopback.c; +}; + +module = { + name = cryptodisk; + common = disk/cryptodisk.c; +}; + +module = { + name = luks; + common = disk/luks.c; + common = disk/AFSplitter.c; +}; + +module = { + name = geli; + common = disk/geli.c; +}; + +module = { + name = lvm; + common = disk/lvm.c; +}; + +module = { + name = ldm; + common = disk/ldm.c; +}; + +module = { + name = mdraid09; + common = disk/mdraid_linux.c; +}; + +module = { + name = mdraid09_be; + common = disk/mdraid_linux_be.c; +}; + +module = { + name = mdraid1x; + common = disk/mdraid1x_linux.c; +}; + +module = { + name = diskfilter; + common = disk/diskfilter.c; +}; + +module = { + name = raid5rec; + common = disk/raid5_recover.c; +}; + +module = { + name = raid6rec; + common = disk/raid6_recover.c; +}; + +module = { + name = scsi; + common = disk/scsi.c; +}; + +module = { + name = memdisk; + common = disk/memdisk.c; +}; + +module = { + name = ata; + common = disk/ata.c; + enable = pci; + enable = mips_qemu_mips; +}; + +module = { + name = ahci; + common = disk/ahci.c; + enable = pci; +}; + +module = { + name = pata; + common = disk/pata.c; + enable = pci; + enable = mips_qemu_mips; +}; + +module = { + name = biosdisk; + i386_pc = disk/i386/pc/biosdisk.c; + enable = i386_pc; +}; + +module = { + name = usbms; + common = disk/usbms.c; + enable = usb; +}; + +module = { + name = nand; + ieee1275 = disk/ieee1275/nand.c; + enable = i386_ieee1275; +}; + +module = { + name = efiemu; + common = efiemu/main.c; + common = efiemu/i386/loadcore32.c; + common = efiemu/i386/loadcore64.c; + i386_pc = efiemu/i386/pc/cfgtables.c; + i386_coreboot = efiemu/i386/pc/cfgtables.c; + i386_multiboot = efiemu/i386/pc/cfgtables.c; + i386_ieee1275 = efiemu/i386/nocfgtables.c; + i386_qemu = efiemu/i386/nocfgtables.c; + common = efiemu/mm.c; + common = efiemu/loadcore_common.c; + common = efiemu/symbols.c; + common = efiemu/loadcore32.c; + common = efiemu/loadcore64.c; + common = efiemu/prepare32.c; + common = efiemu/prepare64.c; + common = efiemu/pnvram.c; + common = efiemu/i386/coredetect.c; + + extra_dist = efiemu/prepare.c; + extra_dist = efiemu/loadcore.c; + extra_dist = efiemu/runtime/efiemu.S; + extra_dist = efiemu/runtime/efiemu.c; + + enable = i386_pc; + enable = i386_coreboot; + enable = i386_ieee1275; + enable = i386_multiboot; + enable = i386_qemu; +}; + +module = { + name = font; + common = font/font.c; + common = font/font_cmd.c; + enable = videomodules; +}; + +module = { + name = procfs; + common = fs/proc.c; +}; + +module = { + name = affs; + common = fs/affs.c; +}; + +module = { + name = afs; + common = fs/afs.c; +}; + +module = { + name = bfs; + common = fs/bfs.c; +}; + +module = { + name = btrfs; + common = fs/btrfs.c; + common = lib/crc.c; + cflags = '$(CFLAGS_POSIX) -Wno-undef'; + cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; +}; + +module = { + name = archelp; + common = fs/archelp.c; +}; + +module = { + name = cbfs; + common = fs/cbfs.c; +}; + +module = { + name = cpio; + common = fs/cpio.c; +}; + +module = { + name = cpio_be; + common = fs/cpio_be.c; +}; + +module = { + name = newc; + common = fs/newc.c; +}; + +module = { + name = odc; + common = fs/odc.c; +}; + +module = { + name = ext2; + common = fs/ext2.c; +}; + +module = { + name = fat; + common = fs/fat.c; +}; + +module = { + name = exfat; + common = fs/exfat.c; +}; + +module = { + name = fshelp; + common = fs/fshelp.c; +}; + +module = { + name = hfs; + common = fs/hfs.c; +}; + +module = { + name = hfsplus; + common = fs/hfsplus.c; +}; + +module = { + name = hfspluscomp; + common = fs/hfspluscomp.c; +}; + +module = { + name = iso9660; + common = fs/iso9660.c; +}; + +module = { + name = jfs; + common = fs/jfs.c; +}; + +module = { + name = minix; + common = fs/minix.c; +}; + +module = { + name = minix2; + common = fs/minix2.c; +}; + +module = { + name = minix3; + common = fs/minix3.c; +}; + +module = { + name = minix_be; + common = fs/minix_be.c; +}; + +module = { + name = minix2_be; + common = fs/minix2_be.c; +}; + +module = { + name = minix3_be; + common = fs/minix3_be.c; +}; + +module = { + name = nilfs2; + common = fs/nilfs2.c; +}; + +module = { + name = ntfs; + common = fs/ntfs.c; +}; + +module = { + name = ntfscomp; + common = fs/ntfscomp.c; +}; + +module = { + name = reiserfs; + common = fs/reiserfs.c; +}; + +module = { + name = romfs; + common = fs/romfs.c; +}; + +module = { + name = sfs; + common = fs/sfs.c; +}; + +module = { + name = squash4; + common = fs/squash4.c; + cflags = '$(CFLAGS_POSIX) -Wno-undef'; + cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; +}; + +module = { + name = tar; + common = fs/tar.c; +}; + +module = { + name = udf; + common = fs/udf.c; +}; + +module = { + name = ufs1; + common = fs/ufs.c; +}; + +module = { + name = ufs1_be; + common = fs/ufs_be.c; +}; + +module = { + name = ufs2; + common = fs/ufs2.c; +}; + +module = { + name = xfs; + common = fs/xfs.c; +}; + +module = { + name = zfs; + common = fs/zfs/zfs.c; + common = fs/zfs/zfs_lzjb.c; + common = fs/zfs/zfs_lz4.c; + common = fs/zfs/zfs_sha256.c; + common = fs/zfs/zfs_fletcher.c; +}; + +module = { + name = zfscrypt; + common = fs/zfs/zfscrypt.c; +}; + +module = { + name = zfsinfo; + common = fs/zfs/zfsinfo.c; +}; + +module = { + name = macbless; + common = commands/macbless.c; +}; + +module = { + name = pxe; + i386_pc = net/drivers/i386/pc/pxe.c; + enable = i386_pc; +}; + +module = { + name = gettext; + common = gettext/gettext.c; +}; + +module = { + name = gfxmenu; + common = gfxmenu/gfxmenu.c; + common = gfxmenu/view.c; + common = gfxmenu/font.c; + common = gfxmenu/icon_manager.c; + common = gfxmenu/theme_loader.c; + common = gfxmenu/widget-box.c; + common = gfxmenu/gui_canvas.c; + common = gfxmenu/gui_circular_progress.c; + common = gfxmenu/gui_box.c; + common = gfxmenu/gui_label.c; + common = gfxmenu/gui_list.c; + common = gfxmenu/gui_image.c; + common = gfxmenu/gui_progress_bar.c; + common = gfxmenu/gui_util.c; + common = gfxmenu/gui_string_util.c; +}; + +module = { + name = hello; + common = hello/hello.c; +}; + +module = { + name = gzio; + common = io/gzio.c; +}; + +module = { + name = offsetio; + common = io/offset.c; +}; + +module = { + name = bufio; + common = io/bufio.c; + enable = videomodules; +}; + +module = { + name = elf; + common = kern/elf.c; + + extra_dist = kern/elfXX.c; +}; + +module = { + name = crypto; + common = lib/crypto.c; + + extra_dist = lib/libgcrypt-grub/cipher/crypto.lst; +}; + +module = { + name = pbkdf2; + common = lib/pbkdf2.c; +}; + +module = { + name = relocator; + common = lib/relocator.c; + x86 = lib/i386/relocator16.S; + x86 = lib/i386/relocator32.S; + x86 = lib/i386/relocator64.S; + i386 = lib/i386/relocator_asm.S; + x86_64 = lib/x86_64/relocator_asm.S; + i386_xen = lib/i386/relocator_asm.S; + x86_64_xen = lib/x86_64/relocator_asm.S; + x86 = lib/i386/relocator.c; + x86 = lib/i386/relocator_common_c.c; + ieee1275 = lib/ieee1275/relocator.c; + efi = lib/efi/relocator.c; + mips = lib/mips/relocator_asm.S; + mips = lib/mips/relocator.c; + powerpc = lib/powerpc/relocator_asm.S; + powerpc = lib/powerpc/relocator.c; + xen = lib/xen/relocator.c; + i386_xen = lib/i386/xen/relocator.S; + x86_64_xen = lib/x86_64/xen/relocator.S; + xen = lib/i386/relocator_common_c.c; + x86_64_efi = lib/x86_64/efi/relocator.c; + + extra_dist = lib/i386/relocator_common.S; + extra_dist = kern/powerpc/cache_flush.S; + + enable = mips; + enable = powerpc; + enable = x86; + enable = xen; +}; + +module = { + name = datetime; + cmos = lib/cmos_datetime.c; + efi = lib/efi/datetime.c; + uboot = lib/uboot/datetime.c; + sparc64_ieee1275 = lib/ieee1275/datetime.c; + powerpc_ieee1275 = lib/ieee1275/datetime.c; + sparc64_ieee1275 = lib/ieee1275/cmos.c; + powerpc_ieee1275 = lib/ieee1275/cmos.c; + xen = lib/xen/datetime.c; + + mips_arc = lib/arc/datetime.c; + enable = noemu; +}; + +module = { + name = setjmp; + common = lib/setjmp.S; + extra_dist = lib/i386/setjmp.S; + extra_dist = lib/mips/setjmp.S; + extra_dist = lib/x86_64/setjmp.S; + extra_dist = lib/sparc64/setjmp.S; + extra_dist = lib/powerpc/setjmp.S; + extra_dist = lib/ia64/setjmp.S; + extra_dist = lib/ia64/longjmp.S; + extra_dist = lib/arm/setjmp.S; + extra_dist = lib/arm64/setjmp.S; +}; + +module = { + name = aout; + common = loader/aout.c; + enable = x86; +}; + +module = { + name = bsd; + x86 = loader/i386/bsd.c; + x86 = loader/i386/bsd32.c; + x86 = loader/i386/bsd64.c; + + extra_dist = loader/i386/bsdXX.c; + extra_dist = loader/i386/bsd_pagetable.c; + + enable = x86; +}; + +module = { + name = plan9; + i386_pc = loader/i386/pc/plan9.c; + enable = i386_pc; +}; + + +module = { + name = linux16; + common = loader/i386/pc/linux.c; + common = loader/linux.c; + common = lib/cmdline.c; + enable = x86; +}; + +module = { + name = ntldr; + i386_pc = loader/i386/pc/ntldr.c; + enable = i386_pc; +}; + + +module = { + name = truecrypt; + i386_pc = loader/i386/pc/truecrypt.c; + enable = i386_pc; +}; + + +module = { + name = freedos; + i386_pc = loader/i386/pc/freedos.c; + enable = i386_pc; +}; + +module = { + name = pxechain; + i386_pc = loader/i386/pc/pxechainloader.c; + enable = i386_pc; +}; + +module = { + name = multiboot2; + cppflags = "-DGRUB_USE_MULTIBOOT2"; + + common = loader/multiboot.c; + common = lib/cmdline.c; + common = loader/multiboot_mbi2.c; + enable = x86; + enable = mips; +}; + +module = { + name = multiboot; + common = loader/multiboot.c; + common = lib/cmdline.c; + x86 = loader/i386/multiboot_mbi.c; + extra_dist = loader/multiboot_elfxx.c; + enable = x86; +}; + +module = { + name = xen_boot; + common = lib/cmdline.c; + arm64 = loader/arm64/xen_boot.c; + enable = arm64; +}; + +module = { + name = linux; + x86 = loader/i386/linux.c; + xen = loader/i386/xen.c; + i386_pc = lib/i386/pc/vesa_modes_table.c; + mips = loader/mips/linux.c; + powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c; + sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c; + ia64_efi = loader/ia64/efi/linux.c; + arm = loader/arm/linux.c; + arm64 = loader/arm64/linux.c; + common = loader/linux.c; + common = lib/cmdline.c; + enable = noemu; +}; + +module = { + name = fdt; + arm64 = loader/arm64/fdt.c; + common = lib/fdt.c; + enable = fdt; +}; + +module = { + name = xnu; + x86 = loader/xnu_resume.c; + x86 = loader/i386/xnu.c; + x86 = loader/xnu.c; + + /* Code is pretty generic but relies on RNG which + is available only on few platforms. It's not a + big deal as xnu needs ACPI anyway and we have + RNG on all platforms with ACPI. + */ + enable = i386_multiboot; + enable = i386_coreboot; + enable = i386_pc; + enable = i386_efi; + enable = x86_64_efi; +}; + +module = { + name = random; + x86 = lib/i386/random.c; + common = lib/random.c; + + i386_multiboot = kern/i386/tsc_pmtimer.c; + i386_coreboot = kern/i386/tsc_pmtimer.c; + i386_pc = kern/i386/tsc_pmtimer.c; + + enable = i386_multiboot; + enable = i386_coreboot; + enable = i386_pc; + enable = i386_efi; + enable = x86_64_efi; +}; + +module = { + name = macho; + + common = loader/macho.c; + common = loader/macho32.c; + common = loader/macho64.c; + common = loader/lzss.c; + extra_dist = loader/machoXX.c; +}; + +module = { + name = appleldr; + common = loader/efi/appleloader.c; + enable = i386_efi; + enable = x86_64_efi; +}; + +module = { + name = chain; + efi = loader/efi/chainloader.c; + i386_pc = loader/i386/pc/chainloader.c; + i386_coreboot = loader/i386/coreboot/chainloader.c; + i386_coreboot = lib/LzmaDec.c; + enable = i386_pc; + enable = i386_coreboot; + enable = efi; +}; + +module = { + name = mmap; + common = mmap/mmap.c; + x86 = mmap/i386/uppermem.c; + x86 = mmap/i386/mmap.c; + + i386_pc = mmap/i386/pc/mmap.c; + i386_pc = mmap/i386/pc/mmap_helper.S; + + efi = mmap/efi/mmap.c; + + mips = mmap/mips/uppermem.c; + + enable = x86; + enable = ia64_efi; + enable = arm_efi; + enable = arm64_efi; + enable = mips; +}; + +module = { + name = normal; + common = normal/main.c; + common = normal/cmdline.c; + common = normal/dyncmd.c; + common = normal/auth.c; + common = normal/autofs.c; + common = normal/color.c; + common = normal/completion.c; + common = normal/datetime.c; + common = normal/menu.c; + common = normal/menu_entry.c; + common = normal/menu_text.c; + common = normal/misc.c; + common = normal/crypto.c; + common = normal/term.c; + common = normal/context.c; + common = normal/charset.c; + common = lib/getline.c; + + common = script/main.c; + common = script/script.c; + common = script/execute.c; + common = script/function.c; + common = script/lexer.c; + common = script/argv.c; + + common = commands/menuentry.c; + + common = unidata.c; + common_nodist = grub_script.tab.c; + common_nodist = grub_script.yy.c; + common_nodist = grub_script.tab.h; + common_nodist = grub_script.yy.h; + + extra_dist = script/yylex.l; + extra_dist = script/parser.y; + + cflags = '$(CFLAGS_POSIX) -Wno-redundant-decls'; + cppflags = '$(CPPFLAGS_POSIX)'; +}; + +module = { + name = part_acorn; + common = partmap/acorn.c; +}; + +module = { + name = part_amiga; + common = partmap/amiga.c; +}; + +module = { + name = part_apple; + common = partmap/apple.c; +}; + +module = { + name = part_gpt; + common = partmap/gpt.c; +}; + +module = { + name = part_msdos; + common = partmap/msdos.c; +}; + +module = { + name = part_sun; + common = partmap/sun.c; +}; + +module = { + name = part_plan; + common = partmap/plan.c; +}; + +module = { + name = part_dvh; + common = partmap/dvh.c; +}; + +module = { + name = part_bsd; + common = partmap/bsdlabel.c; +}; + +module = { + name = part_sunpc; + common = partmap/sunpc.c; +}; + +module = { + name = part_dfly; + common = partmap/dfly.c; +}; + +module = { + name = msdospart; + common = parttool/msdospart.c; +}; + +module = { + name = at_keyboard; + common = term/at_keyboard.c; + enable = x86; +}; + +module = { + name = gfxterm; + common = term/gfxterm.c; + enable = videomodules; +}; + +module = { + name = gfxterm_background; + common = term/gfxterm_background.c; +}; + +module = { + name = serial; + common = term/serial.c; + x86 = term/ns8250.c; + ieee1275 = term/ieee1275/serial.c; + mips_arc = term/arc/serial.c; + efi = term/efi/serial.c; + + enable = terminfomodule; + enable = ieee1275; + enable = mips_arc; +}; + +module = { + name = sendkey; + i386_pc = commands/i386/pc/sendkey.c; + enable = i386_pc; +}; + +module = { + name = terminfo; + common = term/terminfo.c; + common = term/tparm.c; + enable = terminfomodule; +}; + +module = { + name = usb_keyboard; + common = term/usb_keyboard.c; + enable = usb; +}; + +module = { + name = vga; + common = video/i386/pc/vga.c; + enable = i386_pc; +}; + +module = { + name = vga_text; + common = term/i386/pc/vga_text.c; + enable = i386_pc; +}; + +module = { + name = mda_text; + common = term/i386/pc/mda_text.c; + enable = i386_pc; + enable = i386_coreboot_multiboot_qemu; +}; + +module = { + name = video_cirrus; + x86 = video/cirrus.c; + enable = x86; +}; + +module = { + name = video_bochs; + x86 = video/bochs.c; + enable = x86; +}; + +module = { + name = functional_test; + common = tests/lib/functional_test.c; + common = tests/lib/test.c; + common = tests/checksums.h; + common = tests/video_checksum.c; + common = tests/fake_input.c; + common = video/capture.c; +}; + +module = { + name = exfctest; + common = tests/example_functional_test.c; +}; + +module = { + name = setjmp_test; + common = tests/setjmp_test.c; +}; + +module = { + name = signature_test; + common = tests/signature_test.c; + common = tests/signatures.h; +}; + +module = { + name = sleep_test; + common = tests/sleep_test.c; +}; + +module = { + name = xnu_uuid_test; + common = tests/xnu_uuid_test.c; +}; + +module = { + name = pbkdf2_test; + common = tests/pbkdf2_test.c; +}; + +module = { + name = legacy_password_test; + common = tests/legacy_password_test.c; + enable = i386_pc; + enable = i386_efi; + enable = x86_64_efi; + enable = emu; + enable = xen; +}; + +module = { + name = div; + common = lib/division.c; + enable = no_softdiv; +}; + +module = { + name = div_test; + common = tests/div_test.c; +}; + +module = { + name = mul_test; + common = tests/mul_test.c; +}; + +module = { + name = shift_test; + common = tests/shift_test.c; +}; + +module = { + name = cmp_test; + common = tests/cmp_test.c; +}; + +module = { + name = ctz_test; + common = tests/ctz_test.c; +}; + +module = { + name = bswap_test; + common = tests/bswap_test.c; +}; + +module = { + name = videotest_checksum; + common = tests/videotest_checksum.c; +}; + +module = { + name = gfxterm_menu; + common = tests/gfxterm_menu.c; +}; + +module = { + name = cmdline_cat_test; + common = tests/cmdline_cat_test.c; +}; + +module = { + name = bitmap; + common = video/bitmap.c; +}; + +module = { + name = bitmap_scale; + common = video/bitmap_scale.c; +}; + +module = { + name = efi_gop; + efi = video/efi_gop.c; + enable = efi; +}; + +module = { + name = efi_uga; + efi = video/efi_uga.c; + enable = i386_efi; + enable = x86_64_efi; +}; + +module = { + name = jpeg; + common = video/readers/jpeg.c; +}; + +module = { + name = png; + common = video/readers/png.c; +}; + +module = { + name = tga; + common = video/readers/tga.c; +}; + +module = { + name = vbe; + common = video/i386/pc/vbe.c; + enable = i386_pc; +}; + +module = { + name = video_fb; + common = video/fb/video_fb.c; + common = video/fb/fbblit.c; + common = video/fb/fbfill.c; + common = video/fb/fbutil.c; + enable = videomodules; +}; + +module = { + name = video; + common = video/video.c; + enable = videomodules; +}; + +module = { + name = video_colors; + common = video/colors.c; +}; + +module = { + name = ieee1275_fb; + ieee1275 = video/ieee1275.c; + enable = powerpc_ieee1275; +}; + +module = { + name = sdl; + emu = video/emu/sdl.c; + enable = emu; + condition = COND_GRUB_EMU_SDL; +}; + +module = { + name = datehook; + common = hook/datehook.c; +}; + +module = { + name = net; + common = net/net.c; + common = net/dns.c; + common = net/bootp.c; + common = net/ip.c; + common = net/udp.c; + common = net/tcp.c; + common = net/icmp.c; + common = net/icmp6.c; + common = net/ethernet.c; + common = net/arp.c; + common = net/netbuff.c; +}; + +module = { + name = tftp; + common = net/tftp.c; +}; + +module = { + name = http; + common = net/http.c; +}; + +module = { + name = ofnet; + common = net/drivers/ieee1275/ofnet.c; + enable = ieee1275; +}; + +module = { + name = ubootnet; + common = net/drivers/uboot/ubootnet.c; + enable = uboot; +}; + +module = { + name = efinet; + common = net/drivers/efi/efinet.c; + enable = efi; +}; + +module = { + name = emunet; + emu = net/drivers/emu/emunet.c; + enable = emu; +}; + +module = { + name = legacycfg; + common = commands/legacycfg.c; + common = lib/legacy_parse.c; + emu = lib/i386/pc/vesa_modes_table.c; + i386_efi = lib/i386/pc/vesa_modes_table.c; + x86_64_efi = lib/i386/pc/vesa_modes_table.c; + xen = lib/i386/pc/vesa_modes_table.c; + + enable = i386_pc; + enable = i386_efi; + enable = x86_64_efi; + enable = emu; + enable = xen; +}; + +module = { + name = syslinuxcfg; + common = lib/syslinux_parse.c; + common = commands/syslinuxcfg.c; +}; + +module = { + name = test_blockarg; + common = tests/test_blockarg.c; +}; + +module = { + name = xzio; + common = io/xzio.c; + common = lib/xzembed/xz_dec_bcj.c; + common = lib/xzembed/xz_dec_lzma2.c; + common = lib/xzembed/xz_dec_stream.c; + cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed'; + cflags='-Wno-unreachable-code'; +}; + +module = { + name = lzopio; + common = io/lzopio.c; + common = lib/minilzo/minilzo.c; + cflags = '$(CFLAGS_POSIX) -Wno-undef -Wno-redundant-decls -Wno-error'; + cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; +}; + +module = { + name = testload; + common = commands/testload.c; +}; + +module = { + name = backtrace; + x86 = lib/i386/backtrace.c; + i386_xen = lib/i386/backtrace.c; + x86_64_xen = lib/i386/backtrace.c; + common = lib/backtrace.c; + enable = x86; + enable = i386_xen; + enable = x86_64_xen; +}; + +module = { + name = lsapm; + common = commands/i386/pc/lsapm.c; + enable = i386_pc; +}; + +module = { + name = keylayouts; + common = commands/keylayouts.c; + enable = x86; +}; + +module = { + name = priority_queue; + common = lib/priority_queue.c; +}; + +module = { + name = time; + common = commands/time.c; +}; + +module = { + name = cacheinfo; + common = commands/cacheinfo.c; + condition = COND_ENABLE_CACHE_STATS; +}; + +module = { + name = boottime; + common = commands/boottime.c; + condition = COND_ENABLE_BOOT_TIME_STATS; +}; + +module = { + name = adler32; + common = lib/adler32.c; +}; + +module = { + name = crc64; + common = lib/crc64.c; +}; + +module = { + name = mpi; + common = lib/libgcrypt-grub/mpi/mpiutil.c; + common = lib/libgcrypt-grub/mpi/mpi-bit.c; + common = lib/libgcrypt-grub/mpi/mpi-add.c; + common = lib/libgcrypt-grub/mpi/mpi-mul.c; + common = lib/libgcrypt-grub/mpi/mpi-mod.c; + common = lib/libgcrypt-grub/mpi/mpi-gcd.c; + common = lib/libgcrypt-grub/mpi/mpi-div.c; + common = lib/libgcrypt-grub/mpi/mpi-cmp.c; + common = lib/libgcrypt-grub/mpi/mpi-inv.c; + common = lib/libgcrypt-grub/mpi/mpi-pow.c; + common = lib/libgcrypt-grub/mpi/mpi-mpow.c; + common = lib/libgcrypt-grub/mpi/mpih-lshift.c; + common = lib/libgcrypt-grub/mpi/mpih-mul.c; + common = lib/libgcrypt-grub/mpi/mpih-mul1.c; + common = lib/libgcrypt-grub/mpi/mpih-mul2.c; + common = lib/libgcrypt-grub/mpi/mpih-mul3.c; + common = lib/libgcrypt-grub/mpi/mpih-add1.c; + common = lib/libgcrypt-grub/mpi/mpih-sub1.c; + common = lib/libgcrypt-grub/mpi/mpih-div.c; + common = lib/libgcrypt-grub/mpi/mpicoder.c; + common = lib/libgcrypt-grub/mpi/mpih-rshift.c; + common = lib/libgcrypt-grub/mpi/mpi-inline.c; + common = lib/libgcrypt_wrap/mem.c; + + cflags = '$(CFLAGS_GCRY) -Wno-redundant-decls -Wno-sign-compare'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = all_video; + common = lib/fake_module.c; +}; + +module = { + name = gdb; + common = gdb/cstub.c; + common = gdb/gdb.c; + i386 = gdb/i386/idt.c; + i386 = gdb/i386/machdep.S; + i386 = gdb/i386/signal.c; + enable = i386; +}; + +module = { + name = testspeed; + common = commands/testspeed.c; +}; + +module = { + name = tr; + common = commands/tr.c; +}; + +module = { + name = progress; + common = lib/progress.c; +}; + +module = { + name = file; + common = commands/file.c; + common = commands/file32.c; + common = commands/file64.c; + extra_dist = commands/fileXX.c; + common = loader/i386/xen_file.c; + common = loader/i386/xen_file32.c; + common = loader/i386/xen_file64.c; + extra_dist = loader/i386/xen_fileXX.c; +}; diff --git a/grub-core/Makefile.gcry.def b/grub-core/Makefile.gcry.def new file mode 100644 index 000000000..4853ed23e --- /dev/null +++ b/grub-core/Makefile.gcry.def @@ -0,0 +1,157 @@ +AutoGen definitions Makefile.tpl; + +module = { + name = gcry_arcfour; + common = lib/libgcrypt-grub/cipher/arcfour.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_blowfish; + common = lib/libgcrypt-grub/cipher/blowfish.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_camellia; + common = lib/libgcrypt-grub/cipher/camellia-glue.c; + common = lib/libgcrypt-grub/cipher/camellia.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_cast5; + common = lib/libgcrypt-grub/cipher/cast5.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_crc; + common = lib/libgcrypt-grub/cipher/crc.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_des; + common = lib/libgcrypt-grub/cipher/des.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_dsa; + common = lib/libgcrypt-grub/cipher/dsa.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_idea; + common = lib/libgcrypt-grub/cipher/idea.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_md4; + common = lib/libgcrypt-grub/cipher/md4.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_md5; + common = lib/libgcrypt-grub/cipher/md5.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_rfc2268; + common = lib/libgcrypt-grub/cipher/rfc2268.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_rijndael; + common = lib/libgcrypt-grub/cipher/rijndael.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_rmd160; + common = lib/libgcrypt-grub/cipher/rmd160.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_rsa; + common = lib/libgcrypt-grub/cipher/rsa.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_seed; + common = lib/libgcrypt-grub/cipher/seed.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_serpent; + common = lib/libgcrypt-grub/cipher/serpent.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_sha1; + common = lib/libgcrypt-grub/cipher/sha1.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_sha256; + common = lib/libgcrypt-grub/cipher/sha256.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_sha512; + common = lib/libgcrypt-grub/cipher/sha512.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_tiger; + common = lib/libgcrypt-grub/cipher/tiger.c; + cflags = '$(CFLAGS_GCRY) -Wno-cast-align'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_twofish; + common = lib/libgcrypt-grub/cipher/twofish.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + +module = { + name = gcry_whirlpool; + common = lib/libgcrypt-grub/cipher/whirlpool.c; + cflags = '$(CFLAGS_GCRY)'; + cppflags = '$(CPPFLAGS_GCRY)'; +}; + diff --git a/grub-core/Makefile.in b/grub-core/Makefile.in new file mode 100644 index 000000000..63c389ed0 --- /dev/null +++ b/grub-core/Makefile.in @@ -0,0 +1,42674 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# -*- makefile -*- + + + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@COND_arm64_TRUE@am__append_1 = -mcmodel=large +@COND_powerpc_ieee1275_TRUE@am__append_2 = -mcpu=powerpc +bin_PROGRAMS = $(am__EXEEXT_1) +sbin_PROGRAMS = +check_PROGRAMS = +noinst_PROGRAMS = +platform_PROGRAMS = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ + $(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \ + $(am__EXEEXT_8) $(am__EXEEXT_9) $(am__EXEEXT_10) \ + $(am__EXEEXT_11) $(am__EXEEXT_12) $(am__EXEEXT_13) \ + $(am__EXEEXT_14) $(am__EXEEXT_15) $(am__EXEEXT_16) \ + $(am__EXEEXT_17) $(am__EXEEXT_18) $(am__EXEEXT_19) \ + $(am__EXEEXT_20) $(am__EXEEXT_21) $(am__EXEEXT_22) \ + $(am__EXEEXT_23) $(am__EXEEXT_24) $(am__EXEEXT_25) \ + $(am__EXEEXT_26) $(am__EXEEXT_27) $(am__EXEEXT_28) \ + $(am__EXEEXT_29) $(am__EXEEXT_30) $(am__EXEEXT_31) \ + $(am__EXEEXT_32) $(am__EXEEXT_33) $(am__EXEEXT_34) \ + $(am__EXEEXT_35) $(am__EXEEXT_36) $(am__EXEEXT_37) \ + $(am__EXEEXT_38) $(am__EXEEXT_39) $(am__EXEEXT_40) \ + $(am__EXEEXT_41) $(am__EXEEXT_42) $(am__EXEEXT_43) \ + $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \ + $(am__EXEEXT_47) $(am__EXEEXT_48) $(am__EXEEXT_49) \ + $(am__EXEEXT_50) $(am__EXEEXT_51) $(am__EXEEXT_52) \ + $(am__EXEEXT_53) $(am__EXEEXT_54) $(am__EXEEXT_55) \ + $(am__EXEEXT_56) $(am__EXEEXT_57) $(am__EXEEXT_58) \ + $(am__EXEEXT_59) $(am__EXEEXT_60) $(am__EXEEXT_61) \ + $(am__EXEEXT_62) $(am__EXEEXT_63) $(am__EXEEXT_64) \ + $(am__EXEEXT_65) $(am__EXEEXT_66) $(am__EXEEXT_67) \ + $(am__EXEEXT_68) $(am__EXEEXT_69) $(am__EXEEXT_70) \ + $(am__EXEEXT_71) $(am__EXEEXT_72) $(am__EXEEXT_73) \ + $(am__EXEEXT_74) $(am__EXEEXT_75) $(am__EXEEXT_76) \ + $(am__EXEEXT_77) $(am__EXEEXT_78) $(am__EXEEXT_79) \ + $(am__EXEEXT_80) $(am__EXEEXT_81) $(am__EXEEXT_82) \ + $(am__EXEEXT_83) $(am__EXEEXT_84) $(am__EXEEXT_85) \ + $(am__EXEEXT_86) $(am__EXEEXT_87) $(am__EXEEXT_88) \ + $(am__EXEEXT_89) $(am__EXEEXT_90) $(am__EXEEXT_91) \ + $(am__EXEEXT_92) $(am__EXEEXT_93) $(am__EXEEXT_94) \ + $(am__EXEEXT_95) $(am__EXEEXT_96) $(am__EXEEXT_97) \ + $(am__EXEEXT_98) $(am__EXEEXT_99) $(am__EXEEXT_100) \ + $(am__EXEEXT_101) $(am__EXEEXT_102) $(am__EXEEXT_103) \ + $(am__EXEEXT_104) $(am__EXEEXT_105) $(am__EXEEXT_106) \ + $(am__EXEEXT_107) $(am__EXEEXT_108) $(am__EXEEXT_109) \ + $(am__EXEEXT_110) $(am__EXEEXT_111) $(am__EXEEXT_112) \ + $(am__EXEEXT_113) $(am__EXEEXT_114) $(am__EXEEXT_115) \ + $(am__EXEEXT_116) $(am__EXEEXT_117) $(am__EXEEXT_118) \ + $(am__EXEEXT_119) $(am__EXEEXT_120) $(am__EXEEXT_121) \ + $(am__EXEEXT_122) $(am__EXEEXT_123) $(am__EXEEXT_124) \ + $(am__EXEEXT_125) $(am__EXEEXT_126) $(am__EXEEXT_127) \ + $(am__EXEEXT_128) $(am__EXEEXT_129) $(am__EXEEXT_130) \ + $(am__EXEEXT_131) $(am__EXEEXT_132) $(am__EXEEXT_133) \ + $(am__EXEEXT_134) $(am__EXEEXT_135) $(am__EXEEXT_136) \ + $(am__EXEEXT_137) $(am__EXEEXT_138) $(am__EXEEXT_139) \ + $(am__EXEEXT_140) $(am__EXEEXT_141) $(am__EXEEXT_142) \ + regexp.module$(EXEEXT) $(am__EXEEXT_143) $(am__EXEEXT_144) \ + $(am__EXEEXT_145) $(am__EXEEXT_146) $(am__EXEEXT_147) \ + $(am__EXEEXT_148) $(am__EXEEXT_149) $(am__EXEEXT_150) \ + $(am__EXEEXT_151) $(am__EXEEXT_152) $(am__EXEEXT_153) \ + $(am__EXEEXT_154) $(am__EXEEXT_155) $(am__EXEEXT_156) \ + $(am__EXEEXT_157) $(am__EXEEXT_158) $(am__EXEEXT_159) \ + $(am__EXEEXT_160) $(am__EXEEXT_161) $(am__EXEEXT_162) \ + $(am__EXEEXT_163) $(am__EXEEXT_164) $(am__EXEEXT_165) \ + $(am__EXEEXT_166) $(am__EXEEXT_167) $(am__EXEEXT_168) \ + $(am__EXEEXT_169) $(am__EXEEXT_170) $(am__EXEEXT_171) \ + $(am__EXEEXT_172) $(am__EXEEXT_173) $(am__EXEEXT_174) \ + $(am__EXEEXT_175) $(am__EXEEXT_176) $(am__EXEEXT_177) \ + $(am__EXEEXT_178) $(am__EXEEXT_179) $(am__EXEEXT_180) \ + $(am__EXEEXT_181) $(am__EXEEXT_182) $(am__EXEEXT_183) \ + blocklist.module$(EXEEXT) $(am__EXEEXT_184) $(am__EXEEXT_185) \ + $(am__EXEEXT_186) $(am__EXEEXT_187) $(am__EXEEXT_188) \ + $(am__EXEEXT_189) $(am__EXEEXT_190) $(am__EXEEXT_191) \ + $(am__EXEEXT_192) $(am__EXEEXT_193) $(am__EXEEXT_194) \ + $(am__EXEEXT_195) $(am__EXEEXT_196) $(am__EXEEXT_197) \ + $(am__EXEEXT_198) cat.module$(EXEEXT) cmp.module$(EXEEXT) \ + configfile.module$(EXEEXT) $(am__EXEEXT_199) $(am__EXEEXT_200) \ + $(am__EXEEXT_201) $(am__EXEEXT_202) $(am__EXEEXT_203) \ + $(am__EXEEXT_204) $(am__EXEEXT_205) $(am__EXEEXT_206) \ + $(am__EXEEXT_207) date.module$(EXEEXT) $(am__EXEEXT_208) \ + echo.module$(EXEEXT) eval.module$(EXEEXT) $(am__EXEEXT_209) \ + $(am__EXEEXT_210) $(am__EXEEXT_211) $(am__EXEEXT_212) \ + $(am__EXEEXT_213) $(am__EXEEXT_214) $(am__EXEEXT_215) \ + $(am__EXEEXT_216) $(am__EXEEXT_217) $(am__EXEEXT_218) \ + $(am__EXEEXT_219) gptsync.module$(EXEEXT) $(am__EXEEXT_220) \ + $(am__EXEEXT_221) $(am__EXEEXT_222) $(am__EXEEXT_223) \ + $(am__EXEEXT_224) $(am__EXEEXT_225) $(am__EXEEXT_226) \ + $(am__EXEEXT_227) $(am__EXEEXT_228) $(am__EXEEXT_229) \ + $(am__EXEEXT_230) $(am__EXEEXT_231) $(am__EXEEXT_232) \ + $(am__EXEEXT_233) $(am__EXEEXT_234) $(am__EXEEXT_235) \ + $(am__EXEEXT_236) $(am__EXEEXT_237) $(am__EXEEXT_238) \ + $(am__EXEEXT_239) $(am__EXEEXT_240) $(am__EXEEXT_241) \ + $(am__EXEEXT_242) $(am__EXEEXT_243) $(am__EXEEXT_244) \ + $(am__EXEEXT_245) $(am__EXEEXT_246) $(am__EXEEXT_247) \ + $(am__EXEEXT_248) $(am__EXEEXT_249) $(am__EXEEXT_250) \ + $(am__EXEEXT_251) $(am__EXEEXT_252) $(am__EXEEXT_253) \ + $(am__EXEEXT_254) $(am__EXEEXT_255) $(am__EXEEXT_256) \ + $(am__EXEEXT_257) hashsum.module$(EXEEXT) \ + verify.module$(EXEEXT) $(am__EXEEXT_258) $(am__EXEEXT_259) \ + $(am__EXEEXT_260) $(am__EXEEXT_261) $(am__EXEEXT_262) \ + $(am__EXEEXT_263) $(am__EXEEXT_264) $(am__EXEEXT_265) \ + $(am__EXEEXT_266) help.module$(EXEEXT) hexdump.module$(EXEEXT) \ + keystatus.module$(EXEEXT) $(am__EXEEXT_267) $(am__EXEEXT_268) \ + loadenv.module$(EXEEXT) ls.module$(EXEEXT) \ + lsmmap.module$(EXEEXT) $(am__EXEEXT_269) $(am__EXEEXT_270) \ + $(am__EXEEXT_271) $(am__EXEEXT_272) $(am__EXEEXT_273) \ + $(am__EXEEXT_274) $(am__EXEEXT_275) $(am__EXEEXT_276) \ + memrw.module$(EXEEXT) minicmd.module$(EXEEXT) \ + parttool.module$(EXEEXT) password.module$(EXEEXT) \ + password_pbkdf2.module$(EXEEXT) $(am__EXEEXT_277) \ + $(am__EXEEXT_278) $(am__EXEEXT_279) $(am__EXEEXT_280) \ + $(am__EXEEXT_281) $(am__EXEEXT_282) $(am__EXEEXT_283) \ + $(am__EXEEXT_284) $(am__EXEEXT_285) $(am__EXEEXT_286) \ + $(am__EXEEXT_287) $(am__EXEEXT_288) $(am__EXEEXT_289) \ + $(am__EXEEXT_290) $(am__EXEEXT_291) $(am__EXEEXT_292) \ + $(am__EXEEXT_293) $(am__EXEEXT_294) $(am__EXEEXT_295) \ + $(am__EXEEXT_296) $(am__EXEEXT_297) probe.module$(EXEEXT) \ + read.module$(EXEEXT) search.module$(EXEEXT) \ + search_fs_file.module$(EXEEXT) search_fs_uuid.module$(EXEEXT) \ + search_label.module$(EXEEXT) $(am__EXEEXT_298) \ + $(am__EXEEXT_299) $(am__EXEEXT_300) $(am__EXEEXT_301) \ + $(am__EXEEXT_302) $(am__EXEEXT_303) $(am__EXEEXT_304) \ + $(am__EXEEXT_305) $(am__EXEEXT_306) $(am__EXEEXT_307) \ + $(am__EXEEXT_308) $(am__EXEEXT_309) $(am__EXEEXT_310) \ + $(am__EXEEXT_311) $(am__EXEEXT_312) $(am__EXEEXT_313) \ + sleep.module$(EXEEXT) $(am__EXEEXT_314) $(am__EXEEXT_315) \ + terminal.module$(EXEEXT) test.module$(EXEEXT) \ + true.module$(EXEEXT) $(am__EXEEXT_316) $(am__EXEEXT_317) \ + $(am__EXEEXT_318) $(am__EXEEXT_319) $(am__EXEEXT_320) \ + $(am__EXEEXT_321) $(am__EXEEXT_322) $(am__EXEEXT_323) \ + videoinfo.module$(EXEEXT) videotest.module$(EXEEXT) \ + xnu_uuid.module$(EXEEXT) dm_nv.module$(EXEEXT) \ + loopback.module$(EXEEXT) cryptodisk.module$(EXEEXT) \ + luks.module$(EXEEXT) geli.module$(EXEEXT) lvm.module$(EXEEXT) \ + ldm.module$(EXEEXT) mdraid09.module$(EXEEXT) \ + mdraid09_be.module$(EXEEXT) mdraid1x.module$(EXEEXT) \ + diskfilter.module$(EXEEXT) raid5rec.module$(EXEEXT) \ + raid6rec.module$(EXEEXT) scsi.module$(EXEEXT) \ + memdisk.module$(EXEEXT) $(am__EXEEXT_324) $(am__EXEEXT_325) \ + $(am__EXEEXT_326) $(am__EXEEXT_327) $(am__EXEEXT_328) \ + $(am__EXEEXT_329) $(am__EXEEXT_330) $(am__EXEEXT_331) \ + $(am__EXEEXT_332) $(am__EXEEXT_333) $(am__EXEEXT_334) \ + $(am__EXEEXT_335) $(am__EXEEXT_336) $(am__EXEEXT_337) \ + $(am__EXEEXT_338) $(am__EXEEXT_339) $(am__EXEEXT_340) \ + $(am__EXEEXT_341) $(am__EXEEXT_342) $(am__EXEEXT_343) \ + $(am__EXEEXT_344) $(am__EXEEXT_345) $(am__EXEEXT_346) \ + $(am__EXEEXT_347) $(am__EXEEXT_348) $(am__EXEEXT_349) \ + $(am__EXEEXT_350) $(am__EXEEXT_351) $(am__EXEEXT_352) \ + $(am__EXEEXT_353) $(am__EXEEXT_354) $(am__EXEEXT_355) \ + $(am__EXEEXT_356) $(am__EXEEXT_357) $(am__EXEEXT_358) \ + $(am__EXEEXT_359) $(am__EXEEXT_360) $(am__EXEEXT_361) \ + $(am__EXEEXT_362) $(am__EXEEXT_363) $(am__EXEEXT_364) \ + $(am__EXEEXT_365) $(am__EXEEXT_366) $(am__EXEEXT_367) \ + $(am__EXEEXT_368) $(am__EXEEXT_369) $(am__EXEEXT_370) \ + $(am__EXEEXT_371) $(am__EXEEXT_372) $(am__EXEEXT_373) \ + $(am__EXEEXT_374) $(am__EXEEXT_375) $(am__EXEEXT_376) \ + $(am__EXEEXT_377) $(am__EXEEXT_378) $(am__EXEEXT_379) \ + $(am__EXEEXT_380) procfs.module$(EXEEXT) affs.module$(EXEEXT) \ + afs.module$(EXEEXT) bfs.module$(EXEEXT) btrfs.module$(EXEEXT) \ + archelp.module$(EXEEXT) cbfs.module$(EXEEXT) \ + cpio.module$(EXEEXT) cpio_be.module$(EXEEXT) \ + newc.module$(EXEEXT) odc.module$(EXEEXT) ext2.module$(EXEEXT) \ + fat.module$(EXEEXT) exfat.module$(EXEEXT) \ + fshelp.module$(EXEEXT) hfs.module$(EXEEXT) \ + hfsplus.module$(EXEEXT) hfspluscomp.module$(EXEEXT) \ + iso9660.module$(EXEEXT) jfs.module$(EXEEXT) \ + minix.module$(EXEEXT) minix2.module$(EXEEXT) \ + minix3.module$(EXEEXT) minix_be.module$(EXEEXT) \ + minix2_be.module$(EXEEXT) minix3_be.module$(EXEEXT) \ + nilfs2.module$(EXEEXT) ntfs.module$(EXEEXT) \ + ntfscomp.module$(EXEEXT) reiserfs.module$(EXEEXT) \ + romfs.module$(EXEEXT) sfs.module$(EXEEXT) \ + squash4.module$(EXEEXT) tar.module$(EXEEXT) \ + udf.module$(EXEEXT) ufs1.module$(EXEEXT) \ + ufs1_be.module$(EXEEXT) ufs2.module$(EXEEXT) \ + xfs.module$(EXEEXT) zfs.module$(EXEEXT) \ + zfscrypt.module$(EXEEXT) zfsinfo.module$(EXEEXT) \ + macbless.module$(EXEEXT) $(am__EXEEXT_381) \ + gettext.module$(EXEEXT) gfxmenu.module$(EXEEXT) \ + hello.module$(EXEEXT) gzio.module$(EXEEXT) \ + offsetio.module$(EXEEXT) $(am__EXEEXT_382) $(am__EXEEXT_383) \ + $(am__EXEEXT_384) $(am__EXEEXT_385) $(am__EXEEXT_386) \ + $(am__EXEEXT_387) $(am__EXEEXT_388) $(am__EXEEXT_389) \ + $(am__EXEEXT_390) $(am__EXEEXT_391) $(am__EXEEXT_392) \ + $(am__EXEEXT_393) $(am__EXEEXT_394) $(am__EXEEXT_395) \ + $(am__EXEEXT_396) $(am__EXEEXT_397) $(am__EXEEXT_398) \ + elf.module$(EXEEXT) crypto.module$(EXEEXT) \ + pbkdf2.module$(EXEEXT) $(am__EXEEXT_399) $(am__EXEEXT_400) \ + $(am__EXEEXT_401) $(am__EXEEXT_402) $(am__EXEEXT_403) \ + $(am__EXEEXT_404) $(am__EXEEXT_405) $(am__EXEEXT_406) \ + $(am__EXEEXT_407) $(am__EXEEXT_408) $(am__EXEEXT_409) \ + $(am__EXEEXT_410) $(am__EXEEXT_411) $(am__EXEEXT_412) \ + $(am__EXEEXT_413) $(am__EXEEXT_414) $(am__EXEEXT_415) \ + $(am__EXEEXT_416) $(am__EXEEXT_417) $(am__EXEEXT_418) \ + $(am__EXEEXT_419) $(am__EXEEXT_420) $(am__EXEEXT_421) \ + $(am__EXEEXT_422) $(am__EXEEXT_423) $(am__EXEEXT_424) \ + $(am__EXEEXT_425) $(am__EXEEXT_426) $(am__EXEEXT_427) \ + $(am__EXEEXT_428) $(am__EXEEXT_429) setjmp.module$(EXEEXT) \ + $(am__EXEEXT_430) $(am__EXEEXT_431) $(am__EXEEXT_432) \ + $(am__EXEEXT_433) $(am__EXEEXT_434) $(am__EXEEXT_435) \ + $(am__EXEEXT_436) $(am__EXEEXT_437) $(am__EXEEXT_438) \ + $(am__EXEEXT_439) $(am__EXEEXT_440) $(am__EXEEXT_441) \ + $(am__EXEEXT_442) $(am__EXEEXT_443) $(am__EXEEXT_444) \ + $(am__EXEEXT_445) $(am__EXEEXT_446) $(am__EXEEXT_447) \ + $(am__EXEEXT_448) $(am__EXEEXT_449) $(am__EXEEXT_450) \ + $(am__EXEEXT_451) $(am__EXEEXT_452) $(am__EXEEXT_453) \ + $(am__EXEEXT_454) $(am__EXEEXT_455) $(am__EXEEXT_456) \ + $(am__EXEEXT_457) $(am__EXEEXT_458) $(am__EXEEXT_459) \ + $(am__EXEEXT_460) $(am__EXEEXT_461) $(am__EXEEXT_462) \ + $(am__EXEEXT_463) $(am__EXEEXT_464) $(am__EXEEXT_465) \ + $(am__EXEEXT_466) $(am__EXEEXT_467) $(am__EXEEXT_468) \ + $(am__EXEEXT_469) $(am__EXEEXT_470) $(am__EXEEXT_471) \ + $(am__EXEEXT_472) $(am__EXEEXT_473) $(am__EXEEXT_474) \ + $(am__EXEEXT_475) $(am__EXEEXT_476) $(am__EXEEXT_477) \ + $(am__EXEEXT_478) $(am__EXEEXT_479) $(am__EXEEXT_480) \ + $(am__EXEEXT_481) $(am__EXEEXT_482) $(am__EXEEXT_483) \ + $(am__EXEEXT_484) $(am__EXEEXT_485) $(am__EXEEXT_486) \ + $(am__EXEEXT_487) $(am__EXEEXT_488) $(am__EXEEXT_489) \ + $(am__EXEEXT_490) $(am__EXEEXT_491) $(am__EXEEXT_492) \ + $(am__EXEEXT_493) $(am__EXEEXT_494) $(am__EXEEXT_495) \ + $(am__EXEEXT_496) $(am__EXEEXT_497) $(am__EXEEXT_498) \ + $(am__EXEEXT_499) macho.module$(EXEEXT) $(am__EXEEXT_500) \ + $(am__EXEEXT_501) $(am__EXEEXT_502) $(am__EXEEXT_503) \ + $(am__EXEEXT_504) $(am__EXEEXT_505) $(am__EXEEXT_506) \ + $(am__EXEEXT_507) $(am__EXEEXT_508) $(am__EXEEXT_509) \ + $(am__EXEEXT_510) $(am__EXEEXT_511) $(am__EXEEXT_512) \ + $(am__EXEEXT_513) $(am__EXEEXT_514) $(am__EXEEXT_515) \ + $(am__EXEEXT_516) $(am__EXEEXT_517) $(am__EXEEXT_518) \ + $(am__EXEEXT_519) $(am__EXEEXT_520) $(am__EXEEXT_521) \ + normal.module$(EXEEXT) part_acorn.module$(EXEEXT) \ + part_amiga.module$(EXEEXT) part_apple.module$(EXEEXT) \ + part_gpt.module$(EXEEXT) part_msdos.module$(EXEEXT) \ + part_sun.module$(EXEEXT) part_plan.module$(EXEEXT) \ + part_dvh.module$(EXEEXT) part_bsd.module$(EXEEXT) \ + part_sunpc.module$(EXEEXT) part_dfly.module$(EXEEXT) \ + msdospart.module$(EXEEXT) $(am__EXEEXT_522) $(am__EXEEXT_523) \ + $(am__EXEEXT_524) $(am__EXEEXT_525) $(am__EXEEXT_526) \ + $(am__EXEEXT_527) $(am__EXEEXT_528) $(am__EXEEXT_529) \ + $(am__EXEEXT_530) $(am__EXEEXT_531) $(am__EXEEXT_532) \ + $(am__EXEEXT_533) $(am__EXEEXT_534) $(am__EXEEXT_535) \ + $(am__EXEEXT_536) $(am__EXEEXT_537) $(am__EXEEXT_538) \ + $(am__EXEEXT_539) $(am__EXEEXT_540) $(am__EXEEXT_541) \ + $(am__EXEEXT_542) $(am__EXEEXT_543) $(am__EXEEXT_544) \ + $(am__EXEEXT_545) gfxterm_background.module$(EXEEXT) \ + $(am__EXEEXT_546) $(am__EXEEXT_547) $(am__EXEEXT_548) \ + $(am__EXEEXT_549) $(am__EXEEXT_550) $(am__EXEEXT_551) \ + $(am__EXEEXT_552) $(am__EXEEXT_553) $(am__EXEEXT_554) \ + $(am__EXEEXT_555) $(am__EXEEXT_556) $(am__EXEEXT_557) \ + $(am__EXEEXT_558) $(am__EXEEXT_559) $(am__EXEEXT_560) \ + $(am__EXEEXT_561) $(am__EXEEXT_562) $(am__EXEEXT_563) \ + $(am__EXEEXT_564) $(am__EXEEXT_565) $(am__EXEEXT_566) \ + $(am__EXEEXT_567) $(am__EXEEXT_568) $(am__EXEEXT_569) \ + $(am__EXEEXT_570) $(am__EXEEXT_571) $(am__EXEEXT_572) \ + $(am__EXEEXT_573) $(am__EXEEXT_574) $(am__EXEEXT_575) \ + $(am__EXEEXT_576) $(am__EXEEXT_577) $(am__EXEEXT_578) \ + $(am__EXEEXT_579) $(am__EXEEXT_580) $(am__EXEEXT_581) \ + $(am__EXEEXT_582) $(am__EXEEXT_583) $(am__EXEEXT_584) \ + $(am__EXEEXT_585) $(am__EXEEXT_586) $(am__EXEEXT_587) \ + $(am__EXEEXT_588) $(am__EXEEXT_589) $(am__EXEEXT_590) \ + $(am__EXEEXT_591) $(am__EXEEXT_592) $(am__EXEEXT_593) \ + functional_test.module$(EXEEXT) exfctest.module$(EXEEXT) \ + setjmp_test.module$(EXEEXT) signature_test.module$(EXEEXT) \ + sleep_test.module$(EXEEXT) xnu_uuid_test.module$(EXEEXT) \ + pbkdf2_test.module$(EXEEXT) $(am__EXEEXT_594) \ + $(am__EXEEXT_595) $(am__EXEEXT_596) $(am__EXEEXT_597) \ + $(am__EXEEXT_598) $(am__EXEEXT_599) $(am__EXEEXT_600) \ + $(am__EXEEXT_601) $(am__EXEEXT_602) $(am__EXEEXT_603) \ + $(am__EXEEXT_604) $(am__EXEEXT_605) $(am__EXEEXT_606) \ + $(am__EXEEXT_607) $(am__EXEEXT_608) $(am__EXEEXT_609) \ + $(am__EXEEXT_610) $(am__EXEEXT_611) $(am__EXEEXT_612) \ + $(am__EXEEXT_613) $(am__EXEEXT_614) $(am__EXEEXT_615) \ + div_test.module$(EXEEXT) mul_test.module$(EXEEXT) \ + shift_test.module$(EXEEXT) cmp_test.module$(EXEEXT) \ + ctz_test.module$(EXEEXT) bswap_test.module$(EXEEXT) \ + videotest_checksum.module$(EXEEXT) \ + gfxterm_menu.module$(EXEEXT) cmdline_cat_test.module$(EXEEXT) \ + bitmap.module$(EXEEXT) bitmap_scale.module$(EXEEXT) \ + $(am__EXEEXT_616) $(am__EXEEXT_617) $(am__EXEEXT_618) \ + $(am__EXEEXT_619) $(am__EXEEXT_620) $(am__EXEEXT_621) \ + $(am__EXEEXT_622) jpeg.module$(EXEEXT) png.module$(EXEEXT) \ + tga.module$(EXEEXT) $(am__EXEEXT_623) $(am__EXEEXT_624) \ + $(am__EXEEXT_625) $(am__EXEEXT_626) $(am__EXEEXT_627) \ + $(am__EXEEXT_628) $(am__EXEEXT_629) $(am__EXEEXT_630) \ + $(am__EXEEXT_631) $(am__EXEEXT_632) $(am__EXEEXT_633) \ + $(am__EXEEXT_634) $(am__EXEEXT_635) $(am__EXEEXT_636) \ + $(am__EXEEXT_637) $(am__EXEEXT_638) $(am__EXEEXT_639) \ + $(am__EXEEXT_640) $(am__EXEEXT_641) $(am__EXEEXT_642) \ + $(am__EXEEXT_643) $(am__EXEEXT_644) $(am__EXEEXT_645) \ + $(am__EXEEXT_646) $(am__EXEEXT_647) $(am__EXEEXT_648) \ + $(am__EXEEXT_649) $(am__EXEEXT_650) $(am__EXEEXT_651) \ + $(am__EXEEXT_652) $(am__EXEEXT_653) $(am__EXEEXT_654) \ + $(am__EXEEXT_655) $(am__EXEEXT_656) $(am__EXEEXT_657) \ + video_colors.module$(EXEEXT) $(am__EXEEXT_658) \ + $(am__EXEEXT_659) datehook.module$(EXEEXT) net.module$(EXEEXT) \ + tftp.module$(EXEEXT) http.module$(EXEEXT) $(am__EXEEXT_660) \ + $(am__EXEEXT_661) $(am__EXEEXT_662) $(am__EXEEXT_663) \ + $(am__EXEEXT_664) $(am__EXEEXT_665) $(am__EXEEXT_666) \ + $(am__EXEEXT_667) $(am__EXEEXT_668) $(am__EXEEXT_669) \ + $(am__EXEEXT_670) $(am__EXEEXT_671) $(am__EXEEXT_672) \ + $(am__EXEEXT_673) $(am__EXEEXT_674) \ + syslinuxcfg.module$(EXEEXT) test_blockarg.module$(EXEEXT) \ + xzio.module$(EXEEXT) lzopio.module$(EXEEXT) \ + testload.module$(EXEEXT) $(am__EXEEXT_675) $(am__EXEEXT_676) \ + $(am__EXEEXT_677) $(am__EXEEXT_678) $(am__EXEEXT_679) \ + $(am__EXEEXT_680) $(am__EXEEXT_681) $(am__EXEEXT_682) \ + $(am__EXEEXT_683) $(am__EXEEXT_684) $(am__EXEEXT_685) \ + $(am__EXEEXT_686) $(am__EXEEXT_687) $(am__EXEEXT_688) \ + $(am__EXEEXT_689) $(am__EXEEXT_690) \ + priority_queue.module$(EXEEXT) time.module$(EXEEXT) \ + $(am__EXEEXT_691) $(am__EXEEXT_692) adler32.module$(EXEEXT) \ + crc64.module$(EXEEXT) mpi.module$(EXEEXT) \ + all_video.module$(EXEEXT) $(am__EXEEXT_693) $(am__EXEEXT_694) \ + $(am__EXEEXT_695) $(am__EXEEXT_696) $(am__EXEEXT_697) \ + $(am__EXEEXT_698) testspeed.module$(EXEEXT) tr.module$(EXEEXT) \ + progress.module$(EXEEXT) file.module$(EXEEXT) \ + gcry_arcfour.module$(EXEEXT) gcry_blowfish.module$(EXEEXT) \ + gcry_camellia.module$(EXEEXT) gcry_cast5.module$(EXEEXT) \ + gcry_crc.module$(EXEEXT) gcry_des.module$(EXEEXT) \ + gcry_dsa.module$(EXEEXT) gcry_idea.module$(EXEEXT) \ + gcry_md4.module$(EXEEXT) gcry_md5.module$(EXEEXT) \ + gcry_rfc2268.module$(EXEEXT) gcry_rijndael.module$(EXEEXT) \ + gcry_rmd160.module$(EXEEXT) gcry_rsa.module$(EXEEXT) \ + gcry_seed.module$(EXEEXT) gcry_serpent.module$(EXEEXT) \ + gcry_sha1.module$(EXEEXT) gcry_sha256.module$(EXEEXT) \ + gcry_sha512.module$(EXEEXT) gcry_tiger.module$(EXEEXT) \ + gcry_twofish.module$(EXEEXT) gcry_whirlpool.module$(EXEEXT) \ + $(am__EXEEXT_699) $(am__EXEEXT_700) $(am__EXEEXT_701) \ + $(am__EXEEXT_702) $(am__EXEEXT_703) $(am__EXEEXT_704) \ + $(am__EXEEXT_705) $(am__EXEEXT_706) $(am__EXEEXT_707) \ + $(am__EXEEXT_708) $(am__EXEEXT_709) $(am__EXEEXT_710) \ + $(am__EXEEXT_711) $(am__EXEEXT_712) $(am__EXEEXT_713) \ + $(am__EXEEXT_714) $(am__EXEEXT_715) $(am__EXEEXT_716) \ + $(am__EXEEXT_717) $(am__EXEEXT_718) $(am__EXEEXT_719) \ + $(am__EXEEXT_720) $(am__EXEEXT_721) $(am__EXEEXT_722) \ + $(am__EXEEXT_723) $(am__EXEEXT_724) $(am__EXEEXT_725) \ + $(am__EXEEXT_726) $(am__EXEEXT_727) $(am__EXEEXT_728) \ + $(am__EXEEXT_729) $(am__EXEEXT_730) $(am__EXEEXT_731) \ + $(am__EXEEXT_732) $(am__EXEEXT_733) +TESTS = +@COND_i386_pc_TRUE@am__append_3 = cs5536.module +@COND_i386_pc_TRUE@am__append_4 = cs5536.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@cs5536_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_5 = +@COND_i386_pc_TRUE@am__append_6 = $(nodist_cs5536_module_SOURCES) +@COND_i386_pc_TRUE@am__append_7 = $(nodist_cs5536_module_SOURCES) \ +@COND_i386_pc_TRUE@ cs5536.marker +@COND_i386_pc_TRUE@am__append_8 = cs5536.mod +@COND_i386_pc_TRUE@am__append_9 = cs5536.marker +@COND_i386_efi_TRUE@am__append_10 = cs5536.module +@COND_i386_efi_TRUE@am__append_11 = cs5536.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_12 = +@COND_i386_efi_TRUE@am__append_13 = $(nodist_cs5536_module_SOURCES) +@COND_i386_efi_TRUE@am__append_14 = $(nodist_cs5536_module_SOURCES) \ +@COND_i386_efi_TRUE@ cs5536.marker +@COND_i386_efi_TRUE@am__append_15 = cs5536.mod +@COND_i386_efi_TRUE@am__append_16 = cs5536.marker +@COND_i386_qemu_TRUE@am__append_17 = cs5536.module +@COND_i386_qemu_TRUE@am__append_18 = cs5536.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_19 = +@COND_i386_qemu_TRUE@am__append_20 = $(nodist_cs5536_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_21 = $(nodist_cs5536_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cs5536.marker +@COND_i386_qemu_TRUE@am__append_22 = cs5536.mod +@COND_i386_qemu_TRUE@am__append_23 = cs5536.marker +@COND_i386_coreboot_TRUE@am__append_24 = cs5536.module +@COND_i386_coreboot_TRUE@am__append_25 = cs5536.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_26 = +@COND_i386_coreboot_TRUE@am__append_27 = $(nodist_cs5536_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_28 = \ +@COND_i386_coreboot_TRUE@ $(nodist_cs5536_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ cs5536.marker +@COND_i386_coreboot_TRUE@am__append_29 = cs5536.mod +@COND_i386_coreboot_TRUE@am__append_30 = cs5536.marker +@COND_i386_multiboot_TRUE@am__append_31 = cs5536.module +@COND_i386_multiboot_TRUE@am__append_32 = cs5536.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_33 = +@COND_i386_multiboot_TRUE@am__append_34 = $(nodist_cs5536_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_35 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cs5536_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cs5536.marker +@COND_i386_multiboot_TRUE@am__append_36 = cs5536.mod +@COND_i386_multiboot_TRUE@am__append_37 = cs5536.marker +@COND_i386_ieee1275_TRUE@am__append_38 = cs5536.module +@COND_i386_ieee1275_TRUE@am__append_39 = cs5536.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_40 = +@COND_i386_ieee1275_TRUE@am__append_41 = $(nodist_cs5536_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_42 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cs5536_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cs5536.marker +@COND_i386_ieee1275_TRUE@am__append_43 = cs5536.mod +@COND_i386_ieee1275_TRUE@am__append_44 = cs5536.marker +@COND_x86_64_efi_TRUE@am__append_45 = cs5536.module +@COND_x86_64_efi_TRUE@am__append_46 = cs5536.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_47 = +@COND_x86_64_efi_TRUE@am__append_48 = $(nodist_cs5536_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_49 = $(nodist_cs5536_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ cs5536.marker +@COND_x86_64_efi_TRUE@am__append_50 = cs5536.mod +@COND_x86_64_efi_TRUE@am__append_51 = cs5536.marker +@COND_mips_loongson_TRUE@am__append_52 = lsspd.module +@COND_mips_loongson_TRUE@am__append_53 = lsspd.module$(EXEEXT) +@COND_mips_loongson_FALSE@lsspd_module_DEPENDENCIES = +@COND_mips_loongson_TRUE@am__append_54 = +@COND_mips_loongson_TRUE@am__append_55 = $(nodist_lsspd_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_56 = \ +@COND_mips_loongson_TRUE@ $(nodist_lsspd_module_SOURCES) \ +@COND_mips_loongson_TRUE@ lsspd.marker +@COND_mips_loongson_TRUE@am__append_57 = lsspd.mod +@COND_mips_loongson_TRUE@am__append_58 = lsspd.marker +@COND_i386_pc_TRUE@am__append_59 = usb.module +@COND_i386_pc_TRUE@am__append_60 = usb.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usb_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_61 = +@COND_i386_pc_TRUE@am__append_62 = $(nodist_usb_module_SOURCES) +@COND_i386_pc_TRUE@am__append_63 = $(nodist_usb_module_SOURCES) \ +@COND_i386_pc_TRUE@ usb.marker +@COND_i386_pc_TRUE@am__append_64 = usb.mod +@COND_i386_pc_TRUE@am__append_65 = usb.marker +@COND_i386_efi_TRUE@am__append_66 = usb.module +@COND_i386_efi_TRUE@am__append_67 = usb.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_68 = +@COND_i386_efi_TRUE@am__append_69 = $(nodist_usb_module_SOURCES) +@COND_i386_efi_TRUE@am__append_70 = $(nodist_usb_module_SOURCES) \ +@COND_i386_efi_TRUE@ usb.marker +@COND_i386_efi_TRUE@am__append_71 = usb.mod +@COND_i386_efi_TRUE@am__append_72 = usb.marker +@COND_i386_qemu_TRUE@am__append_73 = usb.module +@COND_i386_qemu_TRUE@am__append_74 = usb.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_75 = +@COND_i386_qemu_TRUE@am__append_76 = $(nodist_usb_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_77 = $(nodist_usb_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usb.marker +@COND_i386_qemu_TRUE@am__append_78 = usb.mod +@COND_i386_qemu_TRUE@am__append_79 = usb.marker +@COND_i386_coreboot_TRUE@am__append_80 = usb.module +@COND_i386_coreboot_TRUE@am__append_81 = usb.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_82 = +@COND_i386_coreboot_TRUE@am__append_83 = $(nodist_usb_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_84 = $(nodist_usb_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usb.marker +@COND_i386_coreboot_TRUE@am__append_85 = usb.mod +@COND_i386_coreboot_TRUE@am__append_86 = usb.marker +@COND_i386_multiboot_TRUE@am__append_87 = usb.module +@COND_i386_multiboot_TRUE@am__append_88 = usb.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_89 = +@COND_i386_multiboot_TRUE@am__append_90 = $(nodist_usb_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_91 = \ +@COND_i386_multiboot_TRUE@ $(nodist_usb_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usb.marker +@COND_i386_multiboot_TRUE@am__append_92 = usb.mod +@COND_i386_multiboot_TRUE@am__append_93 = usb.marker +@COND_i386_ieee1275_TRUE@am__append_94 = usb.module +@COND_i386_ieee1275_TRUE@am__append_95 = usb.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_96 = +@COND_i386_ieee1275_TRUE@am__append_97 = $(nodist_usb_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_98 = $(nodist_usb_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usb.marker +@COND_i386_ieee1275_TRUE@am__append_99 = usb.mod +@COND_i386_ieee1275_TRUE@am__append_100 = usb.marker +@COND_x86_64_efi_TRUE@am__append_101 = usb.module +@COND_x86_64_efi_TRUE@am__append_102 = usb.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_103 = +@COND_x86_64_efi_TRUE@am__append_104 = $(nodist_usb_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_105 = $(nodist_usb_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usb.marker +@COND_x86_64_efi_TRUE@am__append_106 = usb.mod +@COND_x86_64_efi_TRUE@am__append_107 = usb.marker +@COND_mips_loongson_TRUE@am__append_108 = usb.module +@COND_mips_loongson_TRUE@am__append_109 = usb.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_110 = +@COND_mips_loongson_TRUE@am__append_111 = $(nodist_usb_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_112 = \ +@COND_mips_loongson_TRUE@ $(nodist_usb_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usb.marker +@COND_mips_loongson_TRUE@am__append_113 = usb.mod +@COND_mips_loongson_TRUE@am__append_114 = usb.marker +@COND_i386_pc_TRUE@am__append_115 = usbserial_common.module +@COND_i386_pc_TRUE@am__append_116 = usbserial_common.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbserial_common_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_117 = +@COND_i386_pc_TRUE@am__append_118 = $(nodist_usbserial_common_module_SOURCES) +@COND_i386_pc_TRUE@am__append_119 = \ +@COND_i386_pc_TRUE@ $(nodist_usbserial_common_module_SOURCES) \ +@COND_i386_pc_TRUE@ usbserial_common.marker +@COND_i386_pc_TRUE@am__append_120 = usbserial_common.mod +@COND_i386_pc_TRUE@am__append_121 = usbserial_common.marker +@COND_i386_efi_TRUE@am__append_122 = usbserial_common.module +@COND_i386_efi_TRUE@am__append_123 = usbserial_common.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_124 = +@COND_i386_efi_TRUE@am__append_125 = $(nodist_usbserial_common_module_SOURCES) +@COND_i386_efi_TRUE@am__append_126 = \ +@COND_i386_efi_TRUE@ $(nodist_usbserial_common_module_SOURCES) \ +@COND_i386_efi_TRUE@ usbserial_common.marker +@COND_i386_efi_TRUE@am__append_127 = usbserial_common.mod +@COND_i386_efi_TRUE@am__append_128 = usbserial_common.marker +@COND_i386_qemu_TRUE@am__append_129 = usbserial_common.module +@COND_i386_qemu_TRUE@am__append_130 = usbserial_common.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_131 = +@COND_i386_qemu_TRUE@am__append_132 = $(nodist_usbserial_common_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_133 = $(nodist_usbserial_common_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usbserial_common.marker +@COND_i386_qemu_TRUE@am__append_134 = usbserial_common.mod +@COND_i386_qemu_TRUE@am__append_135 = usbserial_common.marker +@COND_i386_coreboot_TRUE@am__append_136 = usbserial_common.module +@COND_i386_coreboot_TRUE@am__append_137 = usbserial_common.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_138 = +@COND_i386_coreboot_TRUE@am__append_139 = $(nodist_usbserial_common_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_140 = $(nodist_usbserial_common_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usbserial_common.marker +@COND_i386_coreboot_TRUE@am__append_141 = usbserial_common.mod +@COND_i386_coreboot_TRUE@am__append_142 = usbserial_common.marker +@COND_i386_multiboot_TRUE@am__append_143 = usbserial_common.module +@COND_i386_multiboot_TRUE@am__append_144 = usbserial_common.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_145 = +@COND_i386_multiboot_TRUE@am__append_146 = $(nodist_usbserial_common_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_147 = $(nodist_usbserial_common_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usbserial_common.marker +@COND_i386_multiboot_TRUE@am__append_148 = usbserial_common.mod +@COND_i386_multiboot_TRUE@am__append_149 = usbserial_common.marker +@COND_i386_ieee1275_TRUE@am__append_150 = usbserial_common.module +@COND_i386_ieee1275_TRUE@am__append_151 = usbserial_common.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_152 = +@COND_i386_ieee1275_TRUE@am__append_153 = $(nodist_usbserial_common_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_154 = $(nodist_usbserial_common_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usbserial_common.marker +@COND_i386_ieee1275_TRUE@am__append_155 = usbserial_common.mod +@COND_i386_ieee1275_TRUE@am__append_156 = usbserial_common.marker +@COND_x86_64_efi_TRUE@am__append_157 = usbserial_common.module +@COND_x86_64_efi_TRUE@am__append_158 = usbserial_common.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_159 = +@COND_x86_64_efi_TRUE@am__append_160 = $(nodist_usbserial_common_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_161 = $(nodist_usbserial_common_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usbserial_common.marker +@COND_x86_64_efi_TRUE@am__append_162 = usbserial_common.mod +@COND_x86_64_efi_TRUE@am__append_163 = usbserial_common.marker +@COND_mips_loongson_TRUE@am__append_164 = usbserial_common.module +@COND_mips_loongson_TRUE@am__append_165 = usbserial_common.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_166 = +@COND_mips_loongson_TRUE@am__append_167 = $(nodist_usbserial_common_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_168 = $(nodist_usbserial_common_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usbserial_common.marker +@COND_mips_loongson_TRUE@am__append_169 = usbserial_common.mod +@COND_mips_loongson_TRUE@am__append_170 = usbserial_common.marker +@COND_i386_pc_TRUE@am__append_171 = usbserial_pl2303.module +@COND_i386_pc_TRUE@am__append_172 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbserial_pl2303_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_173 = +@COND_i386_pc_TRUE@am__append_174 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_pc_TRUE@am__append_175 = \ +@COND_i386_pc_TRUE@ $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_i386_pc_TRUE@ usbserial_pl2303.marker +@COND_i386_pc_TRUE@am__append_176 = usbserial_pl2303.mod +@COND_i386_pc_TRUE@am__append_177 = usbserial_pl2303.marker +@COND_i386_efi_TRUE@am__append_178 = usbserial_pl2303.module +@COND_i386_efi_TRUE@am__append_179 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_180 = +@COND_i386_efi_TRUE@am__append_181 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_efi_TRUE@am__append_182 = \ +@COND_i386_efi_TRUE@ $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_i386_efi_TRUE@ usbserial_pl2303.marker +@COND_i386_efi_TRUE@am__append_183 = usbserial_pl2303.mod +@COND_i386_efi_TRUE@am__append_184 = usbserial_pl2303.marker +@COND_i386_qemu_TRUE@am__append_185 = usbserial_pl2303.module +@COND_i386_qemu_TRUE@am__append_186 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_187 = +@COND_i386_qemu_TRUE@am__append_188 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_189 = $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usbserial_pl2303.marker +@COND_i386_qemu_TRUE@am__append_190 = usbserial_pl2303.mod +@COND_i386_qemu_TRUE@am__append_191 = usbserial_pl2303.marker +@COND_i386_coreboot_TRUE@am__append_192 = usbserial_pl2303.module +@COND_i386_coreboot_TRUE@am__append_193 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_194 = +@COND_i386_coreboot_TRUE@am__append_195 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_196 = $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usbserial_pl2303.marker +@COND_i386_coreboot_TRUE@am__append_197 = usbserial_pl2303.mod +@COND_i386_coreboot_TRUE@am__append_198 = usbserial_pl2303.marker +@COND_i386_multiboot_TRUE@am__append_199 = usbserial_pl2303.module +@COND_i386_multiboot_TRUE@am__append_200 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_201 = +@COND_i386_multiboot_TRUE@am__append_202 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_203 = $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usbserial_pl2303.marker +@COND_i386_multiboot_TRUE@am__append_204 = usbserial_pl2303.mod +@COND_i386_multiboot_TRUE@am__append_205 = usbserial_pl2303.marker +@COND_i386_ieee1275_TRUE@am__append_206 = usbserial_pl2303.module +@COND_i386_ieee1275_TRUE@am__append_207 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_208 = +@COND_i386_ieee1275_TRUE@am__append_209 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_210 = $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usbserial_pl2303.marker +@COND_i386_ieee1275_TRUE@am__append_211 = usbserial_pl2303.mod +@COND_i386_ieee1275_TRUE@am__append_212 = usbserial_pl2303.marker +@COND_x86_64_efi_TRUE@am__append_213 = usbserial_pl2303.module +@COND_x86_64_efi_TRUE@am__append_214 = usbserial_pl2303.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_215 = +@COND_x86_64_efi_TRUE@am__append_216 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_217 = $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usbserial_pl2303.marker +@COND_x86_64_efi_TRUE@am__append_218 = usbserial_pl2303.mod +@COND_x86_64_efi_TRUE@am__append_219 = usbserial_pl2303.marker +@COND_mips_loongson_TRUE@am__append_220 = usbserial_pl2303.module +@COND_mips_loongson_TRUE@am__append_221 = usbserial_pl2303.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_222 = +@COND_mips_loongson_TRUE@am__append_223 = $(nodist_usbserial_pl2303_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_224 = $(nodist_usbserial_pl2303_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usbserial_pl2303.marker +@COND_mips_loongson_TRUE@am__append_225 = usbserial_pl2303.mod +@COND_mips_loongson_TRUE@am__append_226 = usbserial_pl2303.marker +@COND_i386_pc_TRUE@am__append_227 = usbserial_ftdi.module +@COND_i386_pc_TRUE@am__append_228 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbserial_ftdi_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_229 = +@COND_i386_pc_TRUE@am__append_230 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_pc_TRUE@am__append_231 = \ +@COND_i386_pc_TRUE@ $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_i386_pc_TRUE@ usbserial_ftdi.marker +@COND_i386_pc_TRUE@am__append_232 = usbserial_ftdi.mod +@COND_i386_pc_TRUE@am__append_233 = usbserial_ftdi.marker +@COND_i386_efi_TRUE@am__append_234 = usbserial_ftdi.module +@COND_i386_efi_TRUE@am__append_235 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_236 = +@COND_i386_efi_TRUE@am__append_237 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_efi_TRUE@am__append_238 = \ +@COND_i386_efi_TRUE@ $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_i386_efi_TRUE@ usbserial_ftdi.marker +@COND_i386_efi_TRUE@am__append_239 = usbserial_ftdi.mod +@COND_i386_efi_TRUE@am__append_240 = usbserial_ftdi.marker +@COND_i386_qemu_TRUE@am__append_241 = usbserial_ftdi.module +@COND_i386_qemu_TRUE@am__append_242 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_243 = +@COND_i386_qemu_TRUE@am__append_244 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_245 = \ +@COND_i386_qemu_TRUE@ $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usbserial_ftdi.marker +@COND_i386_qemu_TRUE@am__append_246 = usbserial_ftdi.mod +@COND_i386_qemu_TRUE@am__append_247 = usbserial_ftdi.marker +@COND_i386_coreboot_TRUE@am__append_248 = usbserial_ftdi.module +@COND_i386_coreboot_TRUE@am__append_249 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_250 = +@COND_i386_coreboot_TRUE@am__append_251 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_252 = $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usbserial_ftdi.marker +@COND_i386_coreboot_TRUE@am__append_253 = usbserial_ftdi.mod +@COND_i386_coreboot_TRUE@am__append_254 = usbserial_ftdi.marker +@COND_i386_multiboot_TRUE@am__append_255 = usbserial_ftdi.module +@COND_i386_multiboot_TRUE@am__append_256 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_257 = +@COND_i386_multiboot_TRUE@am__append_258 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_259 = $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usbserial_ftdi.marker +@COND_i386_multiboot_TRUE@am__append_260 = usbserial_ftdi.mod +@COND_i386_multiboot_TRUE@am__append_261 = usbserial_ftdi.marker +@COND_i386_ieee1275_TRUE@am__append_262 = usbserial_ftdi.module +@COND_i386_ieee1275_TRUE@am__append_263 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_264 = +@COND_i386_ieee1275_TRUE@am__append_265 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_266 = $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usbserial_ftdi.marker +@COND_i386_ieee1275_TRUE@am__append_267 = usbserial_ftdi.mod +@COND_i386_ieee1275_TRUE@am__append_268 = usbserial_ftdi.marker +@COND_x86_64_efi_TRUE@am__append_269 = usbserial_ftdi.module +@COND_x86_64_efi_TRUE@am__append_270 = usbserial_ftdi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_271 = +@COND_x86_64_efi_TRUE@am__append_272 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_273 = \ +@COND_x86_64_efi_TRUE@ $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usbserial_ftdi.marker +@COND_x86_64_efi_TRUE@am__append_274 = usbserial_ftdi.mod +@COND_x86_64_efi_TRUE@am__append_275 = usbserial_ftdi.marker +@COND_mips_loongson_TRUE@am__append_276 = usbserial_ftdi.module +@COND_mips_loongson_TRUE@am__append_277 = usbserial_ftdi.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_278 = +@COND_mips_loongson_TRUE@am__append_279 = $(nodist_usbserial_ftdi_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_280 = $(nodist_usbserial_ftdi_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usbserial_ftdi.marker +@COND_mips_loongson_TRUE@am__append_281 = usbserial_ftdi.mod +@COND_mips_loongson_TRUE@am__append_282 = usbserial_ftdi.marker +@COND_i386_pc_TRUE@am__append_283 = usbserial_usbdebug.module +@COND_i386_pc_TRUE@am__append_284 = usbserial_usbdebug.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbserial_usbdebug_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_285 = +@COND_i386_pc_TRUE@am__append_286 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_pc_TRUE@am__append_287 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_i386_pc_TRUE@ usbserial_usbdebug.marker +@COND_i386_pc_TRUE@am__append_288 = usbserial_usbdebug.mod +@COND_i386_pc_TRUE@am__append_289 = usbserial_usbdebug.marker +@COND_i386_efi_TRUE@am__append_290 = usbserial_usbdebug.module +@COND_i386_efi_TRUE@am__append_291 = usbserial_usbdebug.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_292 = +@COND_i386_efi_TRUE@am__append_293 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_efi_TRUE@am__append_294 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_i386_efi_TRUE@ usbserial_usbdebug.marker +@COND_i386_efi_TRUE@am__append_295 = usbserial_usbdebug.mod +@COND_i386_efi_TRUE@am__append_296 = usbserial_usbdebug.marker +@COND_i386_qemu_TRUE@am__append_297 = usbserial_usbdebug.module +@COND_i386_qemu_TRUE@am__append_298 = usbserial_usbdebug.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_299 = +@COND_i386_qemu_TRUE@am__append_300 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_301 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usbserial_usbdebug.marker +@COND_i386_qemu_TRUE@am__append_302 = usbserial_usbdebug.mod +@COND_i386_qemu_TRUE@am__append_303 = usbserial_usbdebug.marker +@COND_i386_coreboot_TRUE@am__append_304 = usbserial_usbdebug.module +@COND_i386_coreboot_TRUE@am__append_305 = usbserial_usbdebug.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_306 = +@COND_i386_coreboot_TRUE@am__append_307 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_308 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usbserial_usbdebug.marker +@COND_i386_coreboot_TRUE@am__append_309 = usbserial_usbdebug.mod +@COND_i386_coreboot_TRUE@am__append_310 = usbserial_usbdebug.marker +@COND_i386_multiboot_TRUE@am__append_311 = usbserial_usbdebug.module +@COND_i386_multiboot_TRUE@am__append_312 = usbserial_usbdebug.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_313 = +@COND_i386_multiboot_TRUE@am__append_314 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_315 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usbserial_usbdebug.marker +@COND_i386_multiboot_TRUE@am__append_316 = usbserial_usbdebug.mod +@COND_i386_multiboot_TRUE@am__append_317 = usbserial_usbdebug.marker +@COND_i386_ieee1275_TRUE@am__append_318 = usbserial_usbdebug.module +@COND_i386_ieee1275_TRUE@am__append_319 = usbserial_usbdebug.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_320 = +@COND_i386_ieee1275_TRUE@am__append_321 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_322 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usbserial_usbdebug.marker +@COND_i386_ieee1275_TRUE@am__append_323 = usbserial_usbdebug.mod +@COND_i386_ieee1275_TRUE@am__append_324 = usbserial_usbdebug.marker +@COND_x86_64_efi_TRUE@am__append_325 = usbserial_usbdebug.module +@COND_x86_64_efi_TRUE@am__append_326 = usbserial_usbdebug.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_327 = +@COND_x86_64_efi_TRUE@am__append_328 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_329 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usbserial_usbdebug.marker +@COND_x86_64_efi_TRUE@am__append_330 = usbserial_usbdebug.mod +@COND_x86_64_efi_TRUE@am__append_331 = usbserial_usbdebug.marker +@COND_mips_loongson_TRUE@am__append_332 = usbserial_usbdebug.module +@COND_mips_loongson_TRUE@am__append_333 = usbserial_usbdebug.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_334 = +@COND_mips_loongson_TRUE@am__append_335 = $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_336 = $(nodist_usbserial_usbdebug_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usbserial_usbdebug.marker +@COND_mips_loongson_TRUE@am__append_337 = usbserial_usbdebug.mod +@COND_mips_loongson_TRUE@am__append_338 = usbserial_usbdebug.marker +@COND_i386_pc_TRUE@am__append_339 = uhci.module +@COND_i386_pc_TRUE@am__append_340 = uhci.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@uhci_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_341 = +@COND_i386_pc_TRUE@am__append_342 = $(nodist_uhci_module_SOURCES) +@COND_i386_pc_TRUE@am__append_343 = $(nodist_uhci_module_SOURCES) \ +@COND_i386_pc_TRUE@ uhci.marker +@COND_i386_pc_TRUE@am__append_344 = uhci.mod +@COND_i386_pc_TRUE@am__append_345 = uhci.marker +@COND_i386_efi_TRUE@am__append_346 = uhci.module +@COND_i386_efi_TRUE@am__append_347 = uhci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_348 = +@COND_i386_efi_TRUE@am__append_349 = $(nodist_uhci_module_SOURCES) +@COND_i386_efi_TRUE@am__append_350 = $(nodist_uhci_module_SOURCES) \ +@COND_i386_efi_TRUE@ uhci.marker +@COND_i386_efi_TRUE@am__append_351 = uhci.mod +@COND_i386_efi_TRUE@am__append_352 = uhci.marker +@COND_i386_qemu_TRUE@am__append_353 = uhci.module +@COND_i386_qemu_TRUE@am__append_354 = uhci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_355 = +@COND_i386_qemu_TRUE@am__append_356 = $(nodist_uhci_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_357 = $(nodist_uhci_module_SOURCES) \ +@COND_i386_qemu_TRUE@ uhci.marker +@COND_i386_qemu_TRUE@am__append_358 = uhci.mod +@COND_i386_qemu_TRUE@am__append_359 = uhci.marker +@COND_i386_coreboot_TRUE@am__append_360 = uhci.module +@COND_i386_coreboot_TRUE@am__append_361 = uhci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_362 = +@COND_i386_coreboot_TRUE@am__append_363 = $(nodist_uhci_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_364 = \ +@COND_i386_coreboot_TRUE@ $(nodist_uhci_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ uhci.marker +@COND_i386_coreboot_TRUE@am__append_365 = uhci.mod +@COND_i386_coreboot_TRUE@am__append_366 = uhci.marker +@COND_i386_multiboot_TRUE@am__append_367 = uhci.module +@COND_i386_multiboot_TRUE@am__append_368 = uhci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_369 = +@COND_i386_multiboot_TRUE@am__append_370 = $(nodist_uhci_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_371 = \ +@COND_i386_multiboot_TRUE@ $(nodist_uhci_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ uhci.marker +@COND_i386_multiboot_TRUE@am__append_372 = uhci.mod +@COND_i386_multiboot_TRUE@am__append_373 = uhci.marker +@COND_i386_ieee1275_TRUE@am__append_374 = uhci.module +@COND_i386_ieee1275_TRUE@am__append_375 = uhci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_376 = +@COND_i386_ieee1275_TRUE@am__append_377 = $(nodist_uhci_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_378 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_uhci_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ uhci.marker +@COND_i386_ieee1275_TRUE@am__append_379 = uhci.mod +@COND_i386_ieee1275_TRUE@am__append_380 = uhci.marker +@COND_x86_64_efi_TRUE@am__append_381 = uhci.module +@COND_x86_64_efi_TRUE@am__append_382 = uhci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_383 = +@COND_x86_64_efi_TRUE@am__append_384 = $(nodist_uhci_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_385 = $(nodist_uhci_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ uhci.marker +@COND_x86_64_efi_TRUE@am__append_386 = uhci.mod +@COND_x86_64_efi_TRUE@am__append_387 = uhci.marker +@COND_mips_loongson_TRUE@am__append_388 = uhci.module +@COND_mips_loongson_TRUE@am__append_389 = uhci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_390 = +@COND_mips_loongson_TRUE@am__append_391 = $(nodist_uhci_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_392 = \ +@COND_mips_loongson_TRUE@ $(nodist_uhci_module_SOURCES) \ +@COND_mips_loongson_TRUE@ uhci.marker +@COND_mips_loongson_TRUE@am__append_393 = uhci.mod +@COND_mips_loongson_TRUE@am__append_394 = uhci.marker +@COND_i386_pc_TRUE@am__append_395 = ohci.module +@COND_i386_pc_TRUE@am__append_396 = ohci.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@ohci_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_397 = +@COND_i386_pc_TRUE@am__append_398 = $(nodist_ohci_module_SOURCES) +@COND_i386_pc_TRUE@am__append_399 = $(nodist_ohci_module_SOURCES) \ +@COND_i386_pc_TRUE@ ohci.marker +@COND_i386_pc_TRUE@am__append_400 = ohci.mod +@COND_i386_pc_TRUE@am__append_401 = ohci.marker +@COND_i386_efi_TRUE@am__append_402 = ohci.module +@COND_i386_efi_TRUE@am__append_403 = ohci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_404 = +@COND_i386_efi_TRUE@am__append_405 = $(nodist_ohci_module_SOURCES) +@COND_i386_efi_TRUE@am__append_406 = $(nodist_ohci_module_SOURCES) \ +@COND_i386_efi_TRUE@ ohci.marker +@COND_i386_efi_TRUE@am__append_407 = ohci.mod +@COND_i386_efi_TRUE@am__append_408 = ohci.marker +@COND_i386_qemu_TRUE@am__append_409 = ohci.module +@COND_i386_qemu_TRUE@am__append_410 = ohci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_411 = +@COND_i386_qemu_TRUE@am__append_412 = $(nodist_ohci_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_413 = $(nodist_ohci_module_SOURCES) \ +@COND_i386_qemu_TRUE@ ohci.marker +@COND_i386_qemu_TRUE@am__append_414 = ohci.mod +@COND_i386_qemu_TRUE@am__append_415 = ohci.marker +@COND_i386_coreboot_TRUE@am__append_416 = ohci.module +@COND_i386_coreboot_TRUE@am__append_417 = ohci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_418 = +@COND_i386_coreboot_TRUE@am__append_419 = $(nodist_ohci_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_420 = \ +@COND_i386_coreboot_TRUE@ $(nodist_ohci_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ ohci.marker +@COND_i386_coreboot_TRUE@am__append_421 = ohci.mod +@COND_i386_coreboot_TRUE@am__append_422 = ohci.marker +@COND_i386_multiboot_TRUE@am__append_423 = ohci.module +@COND_i386_multiboot_TRUE@am__append_424 = ohci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_425 = +@COND_i386_multiboot_TRUE@am__append_426 = $(nodist_ohci_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_427 = \ +@COND_i386_multiboot_TRUE@ $(nodist_ohci_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ ohci.marker +@COND_i386_multiboot_TRUE@am__append_428 = ohci.mod +@COND_i386_multiboot_TRUE@am__append_429 = ohci.marker +@COND_i386_ieee1275_TRUE@am__append_430 = ohci.module +@COND_i386_ieee1275_TRUE@am__append_431 = ohci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_432 = +@COND_i386_ieee1275_TRUE@am__append_433 = $(nodist_ohci_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_434 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_ohci_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ ohci.marker +@COND_i386_ieee1275_TRUE@am__append_435 = ohci.mod +@COND_i386_ieee1275_TRUE@am__append_436 = ohci.marker +@COND_x86_64_efi_TRUE@am__append_437 = ohci.module +@COND_x86_64_efi_TRUE@am__append_438 = ohci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_439 = +@COND_x86_64_efi_TRUE@am__append_440 = $(nodist_ohci_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_441 = $(nodist_ohci_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ ohci.marker +@COND_x86_64_efi_TRUE@am__append_442 = ohci.mod +@COND_x86_64_efi_TRUE@am__append_443 = ohci.marker +@COND_mips_loongson_TRUE@am__append_444 = ohci.module +@COND_mips_loongson_TRUE@am__append_445 = ohci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_446 = +@COND_mips_loongson_TRUE@am__append_447 = $(nodist_ohci_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_448 = \ +@COND_mips_loongson_TRUE@ $(nodist_ohci_module_SOURCES) \ +@COND_mips_loongson_TRUE@ ohci.marker +@COND_mips_loongson_TRUE@am__append_449 = ohci.mod +@COND_mips_loongson_TRUE@am__append_450 = ohci.marker +@COND_i386_pc_TRUE@am__append_451 = ehci.module +@COND_i386_pc_TRUE@am__append_452 = ehci.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@ehci_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_453 = +@COND_i386_pc_TRUE@am__append_454 = $(nodist_ehci_module_SOURCES) +@COND_i386_pc_TRUE@am__append_455 = $(nodist_ehci_module_SOURCES) \ +@COND_i386_pc_TRUE@ ehci.marker +@COND_i386_pc_TRUE@am__append_456 = ehci.mod +@COND_i386_pc_TRUE@am__append_457 = ehci.marker +@COND_i386_efi_TRUE@am__append_458 = ehci.module +@COND_i386_efi_TRUE@am__append_459 = ehci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_460 = +@COND_i386_efi_TRUE@am__append_461 = $(nodist_ehci_module_SOURCES) +@COND_i386_efi_TRUE@am__append_462 = $(nodist_ehci_module_SOURCES) \ +@COND_i386_efi_TRUE@ ehci.marker +@COND_i386_efi_TRUE@am__append_463 = ehci.mod +@COND_i386_efi_TRUE@am__append_464 = ehci.marker +@COND_i386_qemu_TRUE@am__append_465 = ehci.module +@COND_i386_qemu_TRUE@am__append_466 = ehci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_467 = +@COND_i386_qemu_TRUE@am__append_468 = $(nodist_ehci_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_469 = $(nodist_ehci_module_SOURCES) \ +@COND_i386_qemu_TRUE@ ehci.marker +@COND_i386_qemu_TRUE@am__append_470 = ehci.mod +@COND_i386_qemu_TRUE@am__append_471 = ehci.marker +@COND_i386_coreboot_TRUE@am__append_472 = ehci.module +@COND_i386_coreboot_TRUE@am__append_473 = ehci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_474 = +@COND_i386_coreboot_TRUE@am__append_475 = $(nodist_ehci_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_476 = \ +@COND_i386_coreboot_TRUE@ $(nodist_ehci_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ ehci.marker +@COND_i386_coreboot_TRUE@am__append_477 = ehci.mod +@COND_i386_coreboot_TRUE@am__append_478 = ehci.marker +@COND_i386_multiboot_TRUE@am__append_479 = ehci.module +@COND_i386_multiboot_TRUE@am__append_480 = ehci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_481 = +@COND_i386_multiboot_TRUE@am__append_482 = $(nodist_ehci_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_483 = \ +@COND_i386_multiboot_TRUE@ $(nodist_ehci_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ ehci.marker +@COND_i386_multiboot_TRUE@am__append_484 = ehci.mod +@COND_i386_multiboot_TRUE@am__append_485 = ehci.marker +@COND_i386_ieee1275_TRUE@am__append_486 = ehci.module +@COND_i386_ieee1275_TRUE@am__append_487 = ehci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_488 = +@COND_i386_ieee1275_TRUE@am__append_489 = $(nodist_ehci_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_490 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_ehci_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ ehci.marker +@COND_i386_ieee1275_TRUE@am__append_491 = ehci.mod +@COND_i386_ieee1275_TRUE@am__append_492 = ehci.marker +@COND_x86_64_efi_TRUE@am__append_493 = ehci.module +@COND_x86_64_efi_TRUE@am__append_494 = ehci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_495 = +@COND_x86_64_efi_TRUE@am__append_496 = $(nodist_ehci_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_497 = $(nodist_ehci_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ ehci.marker +@COND_x86_64_efi_TRUE@am__append_498 = ehci.mod +@COND_x86_64_efi_TRUE@am__append_499 = ehci.marker +@COND_mips_loongson_TRUE@am__append_500 = ehci.module +@COND_mips_loongson_TRUE@am__append_501 = ehci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_502 = +@COND_mips_loongson_TRUE@am__append_503 = $(nodist_ehci_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_504 = \ +@COND_mips_loongson_TRUE@ $(nodist_ehci_module_SOURCES) \ +@COND_mips_loongson_TRUE@ ehci.marker +@COND_mips_loongson_TRUE@am__append_505 = ehci.mod +@COND_mips_loongson_TRUE@am__append_506 = ehci.marker +@COND_i386_pc_TRUE@am__append_507 = pci.module +@COND_i386_pc_TRUE@am__append_508 = pci.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@pci_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_509 = +@COND_i386_pc_TRUE@am__append_510 = $(nodist_pci_module_SOURCES) +@COND_i386_pc_TRUE@am__append_511 = $(nodist_pci_module_SOURCES) \ +@COND_i386_pc_TRUE@ pci.marker +@COND_i386_pc_TRUE@am__append_512 = pci.mod +@COND_i386_pc_TRUE@am__append_513 = pci.marker +@COND_i386_coreboot_TRUE@am__append_514 = pci.module +@COND_i386_coreboot_TRUE@am__append_515 = pci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_516 = +@COND_i386_coreboot_TRUE@am__append_517 = $(nodist_pci_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_518 = \ +@COND_i386_coreboot_TRUE@ $(nodist_pci_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ pci.marker +@COND_i386_coreboot_TRUE@am__append_519 = pci.mod +@COND_i386_coreboot_TRUE@am__append_520 = pci.marker +@COND_i386_multiboot_TRUE@am__append_521 = pci.module +@COND_i386_multiboot_TRUE@am__append_522 = pci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_523 = +@COND_i386_multiboot_TRUE@am__append_524 = $(nodist_pci_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_525 = \ +@COND_i386_multiboot_TRUE@ $(nodist_pci_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ pci.marker +@COND_i386_multiboot_TRUE@am__append_526 = pci.mod +@COND_i386_multiboot_TRUE@am__append_527 = pci.marker +@COND_i386_ieee1275_TRUE@am__append_528 = pci.module +@COND_i386_ieee1275_TRUE@am__append_529 = pci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_530 = +@COND_i386_ieee1275_TRUE@am__append_531 = $(nodist_pci_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_532 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_pci_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ pci.marker +@COND_i386_ieee1275_TRUE@am__append_533 = pci.mod +@COND_i386_ieee1275_TRUE@am__append_534 = pci.marker +@COND_i386_pc_TRUE@am__append_535 = nativedisk.module +@COND_i386_pc_TRUE@am__append_536 = nativedisk.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@nativedisk_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_537 = +@COND_i386_pc_TRUE@am__append_538 = $(nodist_nativedisk_module_SOURCES) +@COND_i386_pc_TRUE@am__append_539 = \ +@COND_i386_pc_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_i386_pc_TRUE@ nativedisk.marker +@COND_i386_pc_TRUE@am__append_540 = nativedisk.mod +@COND_i386_pc_TRUE@am__append_541 = nativedisk.marker +@COND_i386_efi_TRUE@am__append_542 = nativedisk.module +@COND_i386_efi_TRUE@am__append_543 = nativedisk.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_544 = +@COND_i386_efi_TRUE@am__append_545 = $(nodist_nativedisk_module_SOURCES) +@COND_i386_efi_TRUE@am__append_546 = \ +@COND_i386_efi_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_i386_efi_TRUE@ nativedisk.marker +@COND_i386_efi_TRUE@am__append_547 = nativedisk.mod +@COND_i386_efi_TRUE@am__append_548 = nativedisk.marker +@COND_i386_qemu_TRUE@am__append_549 = nativedisk.module +@COND_i386_qemu_TRUE@am__append_550 = nativedisk.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_551 = +@COND_i386_qemu_TRUE@am__append_552 = $(nodist_nativedisk_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_553 = \ +@COND_i386_qemu_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_i386_qemu_TRUE@ nativedisk.marker +@COND_i386_qemu_TRUE@am__append_554 = nativedisk.mod +@COND_i386_qemu_TRUE@am__append_555 = nativedisk.marker +@COND_i386_coreboot_TRUE@am__append_556 = nativedisk.module +@COND_i386_coreboot_TRUE@am__append_557 = nativedisk.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_558 = +@COND_i386_coreboot_TRUE@am__append_559 = $(nodist_nativedisk_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_560 = \ +@COND_i386_coreboot_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ nativedisk.marker +@COND_i386_coreboot_TRUE@am__append_561 = nativedisk.mod +@COND_i386_coreboot_TRUE@am__append_562 = nativedisk.marker +@COND_i386_multiboot_TRUE@am__append_563 = nativedisk.module +@COND_i386_multiboot_TRUE@am__append_564 = nativedisk.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_565 = +@COND_i386_multiboot_TRUE@am__append_566 = $(nodist_nativedisk_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_567 = \ +@COND_i386_multiboot_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ nativedisk.marker +@COND_i386_multiboot_TRUE@am__append_568 = nativedisk.mod +@COND_i386_multiboot_TRUE@am__append_569 = nativedisk.marker +@COND_i386_ieee1275_TRUE@am__append_570 = nativedisk.module +@COND_i386_ieee1275_TRUE@am__append_571 = nativedisk.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_572 = +@COND_i386_ieee1275_TRUE@am__append_573 = $(nodist_nativedisk_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_574 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ nativedisk.marker +@COND_i386_ieee1275_TRUE@am__append_575 = nativedisk.mod +@COND_i386_ieee1275_TRUE@am__append_576 = nativedisk.marker +@COND_x86_64_efi_TRUE@am__append_577 = nativedisk.module +@COND_x86_64_efi_TRUE@am__append_578 = nativedisk.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_579 = +@COND_x86_64_efi_TRUE@am__append_580 = $(nodist_nativedisk_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_581 = \ +@COND_x86_64_efi_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ nativedisk.marker +@COND_x86_64_efi_TRUE@am__append_582 = nativedisk.mod +@COND_x86_64_efi_TRUE@am__append_583 = nativedisk.marker +@COND_mips_loongson_TRUE@am__append_584 = nativedisk.module +@COND_mips_loongson_TRUE@am__append_585 = nativedisk.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_586 = +@COND_mips_loongson_TRUE@am__append_587 = $(nodist_nativedisk_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_588 = \ +@COND_mips_loongson_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_mips_loongson_TRUE@ nativedisk.marker +@COND_mips_loongson_TRUE@am__append_589 = nativedisk.mod +@COND_mips_loongson_TRUE@am__append_590 = nativedisk.marker +@COND_mips_qemu_mips_TRUE@am__append_591 = nativedisk.module +@COND_mips_qemu_mips_TRUE@am__append_592 = nativedisk.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_593 = +@COND_mips_qemu_mips_TRUE@am__append_594 = $(nodist_nativedisk_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_595 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_nativedisk_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ nativedisk.marker +@COND_mips_qemu_mips_TRUE@am__append_596 = nativedisk.mod +@COND_mips_qemu_mips_TRUE@am__append_597 = nativedisk.marker +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_598 = emupci.module +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_599 = emupci.module$(EXEEXT) +@COND_GRUB_EMU_PCI_FALSE@emupci_module_DEPENDENCIES = +@COND_emu_FALSE@emupci_module_DEPENDENCIES = +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_600 = +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_601 = $(nodist_emupci_module_SOURCES) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_602 = $(nodist_emupci_module_SOURCES) \ +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@ emupci.marker +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_603 = emupci.mod +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_604 = emupci.marker +@COND_mips_arc_TRUE@am__append_605 = lsdev.module +@COND_mips_arc_TRUE@am__append_606 = lsdev.module$(EXEEXT) +@COND_mips_arc_FALSE@lsdev_module_DEPENDENCIES = +@COND_mips_arc_TRUE@am__append_607 = +@COND_mips_arc_TRUE@am__append_608 = $(nodist_lsdev_module_SOURCES) +@COND_mips_arc_TRUE@am__append_609 = $(nodist_lsdev_module_SOURCES) \ +@COND_mips_arc_TRUE@ lsdev.marker +@COND_mips_arc_TRUE@am__append_610 = lsdev.mod +@COND_mips_arc_TRUE@am__append_611 = lsdev.marker +@COND_i386_xen_TRUE@am__append_612 = lsxen.module +@COND_i386_xen_TRUE@am__append_613 = lsxen.module$(EXEEXT) +@COND_i386_xen_FALSE@@COND_x86_64_xen_FALSE@lsxen_module_DEPENDENCIES = +@COND_i386_xen_TRUE@am__append_614 = +@COND_i386_xen_TRUE@am__append_615 = $(nodist_lsxen_module_SOURCES) +@COND_i386_xen_TRUE@am__append_616 = $(nodist_lsxen_module_SOURCES) \ +@COND_i386_xen_TRUE@ lsxen.marker +@COND_i386_xen_TRUE@am__append_617 = lsxen.mod +@COND_i386_xen_TRUE@am__append_618 = lsxen.marker +@COND_x86_64_xen_TRUE@am__append_619 = lsxen.module +@COND_x86_64_xen_TRUE@am__append_620 = lsxen.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_621 = +@COND_x86_64_xen_TRUE@am__append_622 = $(nodist_lsxen_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_623 = $(nodist_lsxen_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ lsxen.marker +@COND_x86_64_xen_TRUE@am__append_624 = lsxen.mod +@COND_x86_64_xen_TRUE@am__append_625 = lsxen.marker +@COND_i386_pc_TRUE@am__append_626 = cmostest.module +@COND_i386_pc_TRUE@am__append_627 = cmostest.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@cmostest_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_628 = +@COND_i386_pc_TRUE@am__append_629 = $(nodist_cmostest_module_SOURCES) +@COND_i386_pc_TRUE@am__append_630 = $(nodist_cmostest_module_SOURCES) \ +@COND_i386_pc_TRUE@ cmostest.marker +@COND_i386_pc_TRUE@am__append_631 = cmostest.mod +@COND_i386_pc_TRUE@am__append_632 = cmostest.marker +@COND_i386_qemu_TRUE@am__append_633 = cmostest.module +@COND_i386_qemu_TRUE@am__append_634 = cmostest.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_635 = +@COND_i386_qemu_TRUE@am__append_636 = $(nodist_cmostest_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_637 = \ +@COND_i386_qemu_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cmostest.marker +@COND_i386_qemu_TRUE@am__append_638 = cmostest.mod +@COND_i386_qemu_TRUE@am__append_639 = cmostest.marker +@COND_i386_coreboot_TRUE@am__append_640 = cmostest.module +@COND_i386_coreboot_TRUE@am__append_641 = cmostest.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_642 = +@COND_i386_coreboot_TRUE@am__append_643 = $(nodist_cmostest_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_644 = \ +@COND_i386_coreboot_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ cmostest.marker +@COND_i386_coreboot_TRUE@am__append_645 = cmostest.mod +@COND_i386_coreboot_TRUE@am__append_646 = cmostest.marker +@COND_i386_multiboot_TRUE@am__append_647 = cmostest.module +@COND_i386_multiboot_TRUE@am__append_648 = cmostest.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_649 = +@COND_i386_multiboot_TRUE@am__append_650 = $(nodist_cmostest_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_651 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cmostest.marker +@COND_i386_multiboot_TRUE@am__append_652 = cmostest.mod +@COND_i386_multiboot_TRUE@am__append_653 = cmostest.marker +@COND_i386_ieee1275_TRUE@am__append_654 = cmostest.module +@COND_i386_ieee1275_TRUE@am__append_655 = cmostest.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_656 = +@COND_i386_ieee1275_TRUE@am__append_657 = $(nodist_cmostest_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_658 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cmostest.marker +@COND_i386_ieee1275_TRUE@am__append_659 = cmostest.mod +@COND_i386_ieee1275_TRUE@am__append_660 = cmostest.marker +@COND_mips_loongson_TRUE@am__append_661 = cmostest.module +@COND_mips_loongson_TRUE@am__append_662 = cmostest.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_663 = +@COND_mips_loongson_TRUE@am__append_664 = $(nodist_cmostest_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_665 = \ +@COND_mips_loongson_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_mips_loongson_TRUE@ cmostest.marker +@COND_mips_loongson_TRUE@am__append_666 = cmostest.mod +@COND_mips_loongson_TRUE@am__append_667 = cmostest.marker +@COND_sparc64_ieee1275_TRUE@am__append_668 = cmostest.module +@COND_sparc64_ieee1275_TRUE@am__append_669 = cmostest.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_670 = +@COND_sparc64_ieee1275_TRUE@am__append_671 = $(nodist_cmostest_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_672 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ cmostest.marker +@COND_sparc64_ieee1275_TRUE@am__append_673 = cmostest.mod +@COND_sparc64_ieee1275_TRUE@am__append_674 = cmostest.marker +@COND_powerpc_ieee1275_TRUE@am__append_675 = cmostest.module +@COND_powerpc_ieee1275_TRUE@am__append_676 = cmostest.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_677 = +@COND_powerpc_ieee1275_TRUE@am__append_678 = $(nodist_cmostest_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_679 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ cmostest.marker +@COND_powerpc_ieee1275_TRUE@am__append_680 = cmostest.mod +@COND_powerpc_ieee1275_TRUE@am__append_681 = cmostest.marker +@COND_mips_qemu_mips_TRUE@am__append_682 = cmostest.module +@COND_mips_qemu_mips_TRUE@am__append_683 = cmostest.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_684 = +@COND_mips_qemu_mips_TRUE@am__append_685 = $(nodist_cmostest_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_686 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_cmostest_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ cmostest.marker +@COND_mips_qemu_mips_TRUE@am__append_687 = cmostest.mod +@COND_mips_qemu_mips_TRUE@am__append_688 = cmostest.marker +@COND_i386_pc_TRUE@am__append_689 = cmosdump.module +@COND_i386_pc_TRUE@am__append_690 = cmosdump.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@cmosdump_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_691 = +@COND_i386_pc_TRUE@am__append_692 = $(nodist_cmosdump_module_SOURCES) +@COND_i386_pc_TRUE@am__append_693 = $(nodist_cmosdump_module_SOURCES) \ +@COND_i386_pc_TRUE@ cmosdump.marker +@COND_i386_pc_TRUE@am__append_694 = cmosdump.mod +@COND_i386_pc_TRUE@am__append_695 = cmosdump.marker +@COND_i386_qemu_TRUE@am__append_696 = cmosdump.module +@COND_i386_qemu_TRUE@am__append_697 = cmosdump.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_698 = +@COND_i386_qemu_TRUE@am__append_699 = $(nodist_cmosdump_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_700 = \ +@COND_i386_qemu_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cmosdump.marker +@COND_i386_qemu_TRUE@am__append_701 = cmosdump.mod +@COND_i386_qemu_TRUE@am__append_702 = cmosdump.marker +@COND_i386_coreboot_TRUE@am__append_703 = cmosdump.module +@COND_i386_coreboot_TRUE@am__append_704 = cmosdump.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_705 = +@COND_i386_coreboot_TRUE@am__append_706 = $(nodist_cmosdump_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_707 = \ +@COND_i386_coreboot_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ cmosdump.marker +@COND_i386_coreboot_TRUE@am__append_708 = cmosdump.mod +@COND_i386_coreboot_TRUE@am__append_709 = cmosdump.marker +@COND_i386_multiboot_TRUE@am__append_710 = cmosdump.module +@COND_i386_multiboot_TRUE@am__append_711 = cmosdump.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_712 = +@COND_i386_multiboot_TRUE@am__append_713 = $(nodist_cmosdump_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_714 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cmosdump.marker +@COND_i386_multiboot_TRUE@am__append_715 = cmosdump.mod +@COND_i386_multiboot_TRUE@am__append_716 = cmosdump.marker +@COND_i386_ieee1275_TRUE@am__append_717 = cmosdump.module +@COND_i386_ieee1275_TRUE@am__append_718 = cmosdump.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_719 = +@COND_i386_ieee1275_TRUE@am__append_720 = $(nodist_cmosdump_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_721 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cmosdump.marker +@COND_i386_ieee1275_TRUE@am__append_722 = cmosdump.mod +@COND_i386_ieee1275_TRUE@am__append_723 = cmosdump.marker +@COND_mips_loongson_TRUE@am__append_724 = cmosdump.module +@COND_mips_loongson_TRUE@am__append_725 = cmosdump.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_726 = +@COND_mips_loongson_TRUE@am__append_727 = $(nodist_cmosdump_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_728 = \ +@COND_mips_loongson_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_mips_loongson_TRUE@ cmosdump.marker +@COND_mips_loongson_TRUE@am__append_729 = cmosdump.mod +@COND_mips_loongson_TRUE@am__append_730 = cmosdump.marker +@COND_sparc64_ieee1275_TRUE@am__append_731 = cmosdump.module +@COND_sparc64_ieee1275_TRUE@am__append_732 = cmosdump.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_733 = +@COND_sparc64_ieee1275_TRUE@am__append_734 = $(nodist_cmosdump_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_735 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ cmosdump.marker +@COND_sparc64_ieee1275_TRUE@am__append_736 = cmosdump.mod +@COND_sparc64_ieee1275_TRUE@am__append_737 = cmosdump.marker +@COND_powerpc_ieee1275_TRUE@am__append_738 = cmosdump.module +@COND_powerpc_ieee1275_TRUE@am__append_739 = cmosdump.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_740 = +@COND_powerpc_ieee1275_TRUE@am__append_741 = $(nodist_cmosdump_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_742 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ cmosdump.marker +@COND_powerpc_ieee1275_TRUE@am__append_743 = cmosdump.mod +@COND_powerpc_ieee1275_TRUE@am__append_744 = cmosdump.marker +@COND_mips_qemu_mips_TRUE@am__append_745 = cmosdump.module +@COND_mips_qemu_mips_TRUE@am__append_746 = cmosdump.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_747 = +@COND_mips_qemu_mips_TRUE@am__append_748 = $(nodist_cmosdump_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_749 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_cmosdump_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ cmosdump.marker +@COND_mips_qemu_mips_TRUE@am__append_750 = cmosdump.mod +@COND_mips_qemu_mips_TRUE@am__append_751 = cmosdump.marker +@COND_i386_pc_TRUE@am__append_752 = iorw.module +@COND_i386_pc_TRUE@am__append_753 = iorw.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@iorw_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_754 = +@COND_i386_pc_TRUE@am__append_755 = $(nodist_iorw_module_SOURCES) +@COND_i386_pc_TRUE@am__append_756 = $(nodist_iorw_module_SOURCES) \ +@COND_i386_pc_TRUE@ iorw.marker +@COND_i386_pc_TRUE@am__append_757 = iorw.mod +@COND_i386_pc_TRUE@am__append_758 = iorw.marker +@COND_i386_efi_TRUE@am__append_759 = iorw.module +@COND_i386_efi_TRUE@am__append_760 = iorw.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_761 = +@COND_i386_efi_TRUE@am__append_762 = $(nodist_iorw_module_SOURCES) +@COND_i386_efi_TRUE@am__append_763 = $(nodist_iorw_module_SOURCES) \ +@COND_i386_efi_TRUE@ iorw.marker +@COND_i386_efi_TRUE@am__append_764 = iorw.mod +@COND_i386_efi_TRUE@am__append_765 = iorw.marker +@COND_i386_qemu_TRUE@am__append_766 = iorw.module +@COND_i386_qemu_TRUE@am__append_767 = iorw.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_768 = +@COND_i386_qemu_TRUE@am__append_769 = $(nodist_iorw_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_770 = $(nodist_iorw_module_SOURCES) \ +@COND_i386_qemu_TRUE@ iorw.marker +@COND_i386_qemu_TRUE@am__append_771 = iorw.mod +@COND_i386_qemu_TRUE@am__append_772 = iorw.marker +@COND_i386_coreboot_TRUE@am__append_773 = iorw.module +@COND_i386_coreboot_TRUE@am__append_774 = iorw.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_775 = +@COND_i386_coreboot_TRUE@am__append_776 = $(nodist_iorw_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_777 = \ +@COND_i386_coreboot_TRUE@ $(nodist_iorw_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ iorw.marker +@COND_i386_coreboot_TRUE@am__append_778 = iorw.mod +@COND_i386_coreboot_TRUE@am__append_779 = iorw.marker +@COND_i386_multiboot_TRUE@am__append_780 = iorw.module +@COND_i386_multiboot_TRUE@am__append_781 = iorw.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_782 = +@COND_i386_multiboot_TRUE@am__append_783 = $(nodist_iorw_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_784 = \ +@COND_i386_multiboot_TRUE@ $(nodist_iorw_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ iorw.marker +@COND_i386_multiboot_TRUE@am__append_785 = iorw.mod +@COND_i386_multiboot_TRUE@am__append_786 = iorw.marker +@COND_i386_ieee1275_TRUE@am__append_787 = iorw.module +@COND_i386_ieee1275_TRUE@am__append_788 = iorw.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_789 = +@COND_i386_ieee1275_TRUE@am__append_790 = $(nodist_iorw_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_791 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_iorw_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ iorw.marker +@COND_i386_ieee1275_TRUE@am__append_792 = iorw.mod +@COND_i386_ieee1275_TRUE@am__append_793 = iorw.marker +@COND_x86_64_efi_TRUE@am__append_794 = iorw.module +@COND_x86_64_efi_TRUE@am__append_795 = iorw.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_796 = +@COND_x86_64_efi_TRUE@am__append_797 = $(nodist_iorw_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_798 = $(nodist_iorw_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ iorw.marker +@COND_x86_64_efi_TRUE@am__append_799 = iorw.mod +@COND_x86_64_efi_TRUE@am__append_800 = iorw.marker +@COND_i386_pc_TRUE@am__append_801 = cbtable.module +@COND_i386_pc_TRUE@am__append_802 = cbtable.module$(EXEEXT) +@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@cbtable_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_803 = +@COND_i386_pc_TRUE@am__append_804 = $(nodist_cbtable_module_SOURCES) +@COND_i386_pc_TRUE@am__append_805 = $(nodist_cbtable_module_SOURCES) \ +@COND_i386_pc_TRUE@ cbtable.marker +@COND_i386_pc_TRUE@am__append_806 = cbtable.mod +@COND_i386_pc_TRUE@am__append_807 = cbtable.marker +@COND_i386_efi_TRUE@am__append_808 = cbtable.module +@COND_i386_efi_TRUE@am__append_809 = cbtable.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_810 = +@COND_i386_efi_TRUE@am__append_811 = $(nodist_cbtable_module_SOURCES) +@COND_i386_efi_TRUE@am__append_812 = $(nodist_cbtable_module_SOURCES) \ +@COND_i386_efi_TRUE@ cbtable.marker +@COND_i386_efi_TRUE@am__append_813 = cbtable.mod +@COND_i386_efi_TRUE@am__append_814 = cbtable.marker +@COND_i386_qemu_TRUE@am__append_815 = cbtable.module +@COND_i386_qemu_TRUE@am__append_816 = cbtable.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_817 = +@COND_i386_qemu_TRUE@am__append_818 = $(nodist_cbtable_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_819 = \ +@COND_i386_qemu_TRUE@ $(nodist_cbtable_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cbtable.marker +@COND_i386_qemu_TRUE@am__append_820 = cbtable.mod +@COND_i386_qemu_TRUE@am__append_821 = cbtable.marker +@COND_i386_multiboot_TRUE@am__append_822 = cbtable.module +@COND_i386_multiboot_TRUE@am__append_823 = cbtable.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_824 = +@COND_i386_multiboot_TRUE@am__append_825 = $(nodist_cbtable_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_826 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cbtable_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cbtable.marker +@COND_i386_multiboot_TRUE@am__append_827 = cbtable.mod +@COND_i386_multiboot_TRUE@am__append_828 = cbtable.marker +@COND_i386_ieee1275_TRUE@am__append_829 = cbtable.module +@COND_i386_ieee1275_TRUE@am__append_830 = cbtable.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_831 = +@COND_i386_ieee1275_TRUE@am__append_832 = $(nodist_cbtable_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_833 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cbtable_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cbtable.marker +@COND_i386_ieee1275_TRUE@am__append_834 = cbtable.mod +@COND_i386_ieee1275_TRUE@am__append_835 = cbtable.marker +@COND_x86_64_efi_TRUE@am__append_836 = cbtable.module +@COND_x86_64_efi_TRUE@am__append_837 = cbtable.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_838 = +@COND_x86_64_efi_TRUE@am__append_839 = $(nodist_cbtable_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_840 = \ +@COND_x86_64_efi_TRUE@ $(nodist_cbtable_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ cbtable.marker +@COND_x86_64_efi_TRUE@am__append_841 = cbtable.mod +@COND_x86_64_efi_TRUE@am__append_842 = cbtable.marker +@COND_i386_pc_TRUE@am__append_843 = cbtime.module +@COND_i386_pc_TRUE@am__append_844 = cbtime.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@cbtime_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_845 = +@COND_i386_pc_TRUE@am__append_846 = $(nodist_cbtime_module_SOURCES) +@COND_i386_pc_TRUE@am__append_847 = $(nodist_cbtime_module_SOURCES) \ +@COND_i386_pc_TRUE@ cbtime.marker +@COND_i386_pc_TRUE@am__append_848 = cbtime.mod +@COND_i386_pc_TRUE@am__append_849 = cbtime.marker +@COND_i386_efi_TRUE@am__append_850 = cbtime.module +@COND_i386_efi_TRUE@am__append_851 = cbtime.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_852 = +@COND_i386_efi_TRUE@am__append_853 = $(nodist_cbtime_module_SOURCES) +@COND_i386_efi_TRUE@am__append_854 = $(nodist_cbtime_module_SOURCES) \ +@COND_i386_efi_TRUE@ cbtime.marker +@COND_i386_efi_TRUE@am__append_855 = cbtime.mod +@COND_i386_efi_TRUE@am__append_856 = cbtime.marker +@COND_i386_qemu_TRUE@am__append_857 = cbtime.module +@COND_i386_qemu_TRUE@am__append_858 = cbtime.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_859 = +@COND_i386_qemu_TRUE@am__append_860 = $(nodist_cbtime_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_861 = $(nodist_cbtime_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cbtime.marker +@COND_i386_qemu_TRUE@am__append_862 = cbtime.mod +@COND_i386_qemu_TRUE@am__append_863 = cbtime.marker +@COND_i386_coreboot_TRUE@am__append_864 = cbtime.module +@COND_i386_coreboot_TRUE@am__append_865 = cbtime.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_866 = +@COND_i386_coreboot_TRUE@am__append_867 = $(nodist_cbtime_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_868 = \ +@COND_i386_coreboot_TRUE@ $(nodist_cbtime_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ cbtime.marker +@COND_i386_coreboot_TRUE@am__append_869 = cbtime.mod +@COND_i386_coreboot_TRUE@am__append_870 = cbtime.marker +@COND_i386_multiboot_TRUE@am__append_871 = cbtime.module +@COND_i386_multiboot_TRUE@am__append_872 = cbtime.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_873 = +@COND_i386_multiboot_TRUE@am__append_874 = $(nodist_cbtime_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_875 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cbtime_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cbtime.marker +@COND_i386_multiboot_TRUE@am__append_876 = cbtime.mod +@COND_i386_multiboot_TRUE@am__append_877 = cbtime.marker +@COND_i386_ieee1275_TRUE@am__append_878 = cbtime.module +@COND_i386_ieee1275_TRUE@am__append_879 = cbtime.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_880 = +@COND_i386_ieee1275_TRUE@am__append_881 = $(nodist_cbtime_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_882 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cbtime_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cbtime.marker +@COND_i386_ieee1275_TRUE@am__append_883 = cbtime.mod +@COND_i386_ieee1275_TRUE@am__append_884 = cbtime.marker +@COND_x86_64_efi_TRUE@am__append_885 = cbtime.module +@COND_x86_64_efi_TRUE@am__append_886 = cbtime.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_887 = +@COND_x86_64_efi_TRUE@am__append_888 = $(nodist_cbtime_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_889 = \ +@COND_x86_64_efi_TRUE@ $(nodist_cbtime_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ cbtime.marker +@COND_x86_64_efi_TRUE@am__append_890 = cbtime.mod +@COND_x86_64_efi_TRUE@am__append_891 = cbtime.marker +@COND_i386_pc_TRUE@am__append_892 = cbls.module +@COND_i386_pc_TRUE@am__append_893 = cbls.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@cbls_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_894 = +@COND_i386_pc_TRUE@am__append_895 = $(nodist_cbls_module_SOURCES) +@COND_i386_pc_TRUE@am__append_896 = $(nodist_cbls_module_SOURCES) \ +@COND_i386_pc_TRUE@ cbls.marker +@COND_i386_pc_TRUE@am__append_897 = cbls.mod +@COND_i386_pc_TRUE@am__append_898 = cbls.marker +@COND_i386_efi_TRUE@am__append_899 = cbls.module +@COND_i386_efi_TRUE@am__append_900 = cbls.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_901 = +@COND_i386_efi_TRUE@am__append_902 = $(nodist_cbls_module_SOURCES) +@COND_i386_efi_TRUE@am__append_903 = $(nodist_cbls_module_SOURCES) \ +@COND_i386_efi_TRUE@ cbls.marker +@COND_i386_efi_TRUE@am__append_904 = cbls.mod +@COND_i386_efi_TRUE@am__append_905 = cbls.marker +@COND_i386_qemu_TRUE@am__append_906 = cbls.module +@COND_i386_qemu_TRUE@am__append_907 = cbls.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_908 = +@COND_i386_qemu_TRUE@am__append_909 = $(nodist_cbls_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_910 = $(nodist_cbls_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cbls.marker +@COND_i386_qemu_TRUE@am__append_911 = cbls.mod +@COND_i386_qemu_TRUE@am__append_912 = cbls.marker +@COND_i386_coreboot_TRUE@am__append_913 = cbls.module +@COND_i386_coreboot_TRUE@am__append_914 = cbls.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_915 = +@COND_i386_coreboot_TRUE@am__append_916 = $(nodist_cbls_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_917 = \ +@COND_i386_coreboot_TRUE@ $(nodist_cbls_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ cbls.marker +@COND_i386_coreboot_TRUE@am__append_918 = cbls.mod +@COND_i386_coreboot_TRUE@am__append_919 = cbls.marker +@COND_i386_multiboot_TRUE@am__append_920 = cbls.module +@COND_i386_multiboot_TRUE@am__append_921 = cbls.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_922 = +@COND_i386_multiboot_TRUE@am__append_923 = $(nodist_cbls_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_924 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cbls_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cbls.marker +@COND_i386_multiboot_TRUE@am__append_925 = cbls.mod +@COND_i386_multiboot_TRUE@am__append_926 = cbls.marker +@COND_i386_ieee1275_TRUE@am__append_927 = cbls.module +@COND_i386_ieee1275_TRUE@am__append_928 = cbls.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_929 = +@COND_i386_ieee1275_TRUE@am__append_930 = $(nodist_cbls_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_931 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cbls_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cbls.marker +@COND_i386_ieee1275_TRUE@am__append_932 = cbls.mod +@COND_i386_ieee1275_TRUE@am__append_933 = cbls.marker +@COND_x86_64_efi_TRUE@am__append_934 = cbls.module +@COND_x86_64_efi_TRUE@am__append_935 = cbls.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_936 = +@COND_x86_64_efi_TRUE@am__append_937 = $(nodist_cbls_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_938 = $(nodist_cbls_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ cbls.marker +@COND_x86_64_efi_TRUE@am__append_939 = cbls.mod +@COND_x86_64_efi_TRUE@am__append_940 = cbls.marker +@COND_i386_pc_TRUE@am__append_941 = cbmemc.module +@COND_i386_pc_TRUE@am__append_942 = cbmemc.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@cbmemc_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_943 = +@COND_i386_pc_TRUE@am__append_944 = $(nodist_cbmemc_module_SOURCES) +@COND_i386_pc_TRUE@am__append_945 = $(nodist_cbmemc_module_SOURCES) \ +@COND_i386_pc_TRUE@ cbmemc.marker +@COND_i386_pc_TRUE@am__append_946 = cbmemc.mod +@COND_i386_pc_TRUE@am__append_947 = cbmemc.marker +@COND_i386_efi_TRUE@am__append_948 = cbmemc.module +@COND_i386_efi_TRUE@am__append_949 = cbmemc.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_950 = +@COND_i386_efi_TRUE@am__append_951 = $(nodist_cbmemc_module_SOURCES) +@COND_i386_efi_TRUE@am__append_952 = $(nodist_cbmemc_module_SOURCES) \ +@COND_i386_efi_TRUE@ cbmemc.marker +@COND_i386_efi_TRUE@am__append_953 = cbmemc.mod +@COND_i386_efi_TRUE@am__append_954 = cbmemc.marker +@COND_i386_qemu_TRUE@am__append_955 = cbmemc.module +@COND_i386_qemu_TRUE@am__append_956 = cbmemc.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_957 = +@COND_i386_qemu_TRUE@am__append_958 = $(nodist_cbmemc_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_959 = $(nodist_cbmemc_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cbmemc.marker +@COND_i386_qemu_TRUE@am__append_960 = cbmemc.mod +@COND_i386_qemu_TRUE@am__append_961 = cbmemc.marker +@COND_i386_coreboot_TRUE@am__append_962 = cbmemc.module +@COND_i386_coreboot_TRUE@am__append_963 = cbmemc.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_964 = +@COND_i386_coreboot_TRUE@am__append_965 = $(nodist_cbmemc_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_966 = \ +@COND_i386_coreboot_TRUE@ $(nodist_cbmemc_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ cbmemc.marker +@COND_i386_coreboot_TRUE@am__append_967 = cbmemc.mod +@COND_i386_coreboot_TRUE@am__append_968 = cbmemc.marker +@COND_i386_multiboot_TRUE@am__append_969 = cbmemc.module +@COND_i386_multiboot_TRUE@am__append_970 = cbmemc.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_971 = +@COND_i386_multiboot_TRUE@am__append_972 = $(nodist_cbmemc_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_973 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cbmemc_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cbmemc.marker +@COND_i386_multiboot_TRUE@am__append_974 = cbmemc.mod +@COND_i386_multiboot_TRUE@am__append_975 = cbmemc.marker +@COND_i386_ieee1275_TRUE@am__append_976 = cbmemc.module +@COND_i386_ieee1275_TRUE@am__append_977 = cbmemc.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_978 = +@COND_i386_ieee1275_TRUE@am__append_979 = $(nodist_cbmemc_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_980 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cbmemc_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cbmemc.marker +@COND_i386_ieee1275_TRUE@am__append_981 = cbmemc.mod +@COND_i386_ieee1275_TRUE@am__append_982 = cbmemc.marker +@COND_x86_64_efi_TRUE@am__append_983 = cbmemc.module +@COND_x86_64_efi_TRUE@am__append_984 = cbmemc.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_985 = +@COND_x86_64_efi_TRUE@am__append_986 = $(nodist_cbmemc_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_987 = \ +@COND_x86_64_efi_TRUE@ $(nodist_cbmemc_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ cbmemc.marker +@COND_x86_64_efi_TRUE@am__append_988 = cbmemc.mod +@COND_x86_64_efi_TRUE@am__append_989 = cbmemc.marker +@COND_i386_pc_TRUE@am__append_990 = acpi.module +@COND_i386_pc_TRUE@am__append_991 = acpi.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@acpi_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_992 = +@COND_i386_pc_TRUE@am__append_993 = $(nodist_acpi_module_SOURCES) +@COND_i386_pc_TRUE@am__append_994 = $(nodist_acpi_module_SOURCES) \ +@COND_i386_pc_TRUE@ acpi.marker +@COND_i386_pc_TRUE@am__append_995 = acpi.mod +@COND_i386_pc_TRUE@am__append_996 = acpi.marker +@COND_i386_efi_TRUE@am__append_997 = acpi.module +@COND_i386_efi_TRUE@am__append_998 = acpi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_999 = +@COND_i386_efi_TRUE@am__append_1000 = $(nodist_acpi_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1001 = $(nodist_acpi_module_SOURCES) \ +@COND_i386_efi_TRUE@ acpi.marker +@COND_i386_efi_TRUE@am__append_1002 = acpi.mod +@COND_i386_efi_TRUE@am__append_1003 = acpi.marker +@COND_i386_coreboot_TRUE@am__append_1004 = acpi.module +@COND_i386_coreboot_TRUE@am__append_1005 = acpi.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1006 = +@COND_i386_coreboot_TRUE@am__append_1007 = $(nodist_acpi_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1008 = \ +@COND_i386_coreboot_TRUE@ $(nodist_acpi_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ acpi.marker +@COND_i386_coreboot_TRUE@am__append_1009 = acpi.mod +@COND_i386_coreboot_TRUE@am__append_1010 = acpi.marker +@COND_i386_multiboot_TRUE@am__append_1011 = acpi.module +@COND_i386_multiboot_TRUE@am__append_1012 = acpi.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1013 = +@COND_i386_multiboot_TRUE@am__append_1014 = $(nodist_acpi_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1015 = \ +@COND_i386_multiboot_TRUE@ $(nodist_acpi_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ acpi.marker +@COND_i386_multiboot_TRUE@am__append_1016 = acpi.mod +@COND_i386_multiboot_TRUE@am__append_1017 = acpi.marker +@COND_x86_64_efi_TRUE@am__append_1018 = acpi.module +@COND_x86_64_efi_TRUE@am__append_1019 = acpi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1020 = +@COND_x86_64_efi_TRUE@am__append_1021 = $(nodist_acpi_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1022 = $(nodist_acpi_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ acpi.marker +@COND_x86_64_efi_TRUE@am__append_1023 = acpi.mod +@COND_x86_64_efi_TRUE@am__append_1024 = acpi.marker +@COND_ia64_efi_TRUE@am__append_1025 = acpi.module +@COND_ia64_efi_TRUE@am__append_1026 = acpi.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1027 = +@COND_ia64_efi_TRUE@am__append_1028 = $(nodist_acpi_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1029 = $(nodist_acpi_module_SOURCES) \ +@COND_ia64_efi_TRUE@ acpi.marker +@COND_ia64_efi_TRUE@am__append_1030 = acpi.mod +@COND_ia64_efi_TRUE@am__append_1031 = acpi.marker +@COND_arm_efi_TRUE@am__append_1032 = acpi.module +@COND_arm_efi_TRUE@am__append_1033 = acpi.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1034 = +@COND_arm_efi_TRUE@am__append_1035 = $(nodist_acpi_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1036 = $(nodist_acpi_module_SOURCES) \ +@COND_arm_efi_TRUE@ acpi.marker +@COND_arm_efi_TRUE@am__append_1037 = acpi.mod +@COND_arm_efi_TRUE@am__append_1038 = acpi.marker +@COND_arm64_efi_TRUE@am__append_1039 = acpi.module +@COND_arm64_efi_TRUE@am__append_1040 = acpi.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1041 = +@COND_arm64_efi_TRUE@am__append_1042 = $(nodist_acpi_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1043 = $(nodist_acpi_module_SOURCES) \ +@COND_arm64_efi_TRUE@ acpi.marker +@COND_arm64_efi_TRUE@am__append_1044 = acpi.mod +@COND_arm64_efi_TRUE@am__append_1045 = acpi.marker +@COND_i386_pc_TRUE@am__append_1046 = lsacpi.module +@COND_i386_pc_TRUE@am__append_1047 = lsacpi.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@lsacpi_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1048 = +@COND_i386_pc_TRUE@am__append_1049 = $(nodist_lsacpi_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1050 = $(nodist_lsacpi_module_SOURCES) \ +@COND_i386_pc_TRUE@ lsacpi.marker +@COND_i386_pc_TRUE@am__append_1051 = lsacpi.mod +@COND_i386_pc_TRUE@am__append_1052 = lsacpi.marker +@COND_i386_efi_TRUE@am__append_1053 = lsacpi.module +@COND_i386_efi_TRUE@am__append_1054 = lsacpi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1055 = +@COND_i386_efi_TRUE@am__append_1056 = $(nodist_lsacpi_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1057 = $(nodist_lsacpi_module_SOURCES) \ +@COND_i386_efi_TRUE@ lsacpi.marker +@COND_i386_efi_TRUE@am__append_1058 = lsacpi.mod +@COND_i386_efi_TRUE@am__append_1059 = lsacpi.marker +@COND_i386_coreboot_TRUE@am__append_1060 = lsacpi.module +@COND_i386_coreboot_TRUE@am__append_1061 = lsacpi.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1062 = +@COND_i386_coreboot_TRUE@am__append_1063 = $(nodist_lsacpi_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1064 = \ +@COND_i386_coreboot_TRUE@ $(nodist_lsacpi_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ lsacpi.marker +@COND_i386_coreboot_TRUE@am__append_1065 = lsacpi.mod +@COND_i386_coreboot_TRUE@am__append_1066 = lsacpi.marker +@COND_i386_multiboot_TRUE@am__append_1067 = lsacpi.module +@COND_i386_multiboot_TRUE@am__append_1068 = lsacpi.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1069 = +@COND_i386_multiboot_TRUE@am__append_1070 = $(nodist_lsacpi_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1071 = \ +@COND_i386_multiboot_TRUE@ $(nodist_lsacpi_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ lsacpi.marker +@COND_i386_multiboot_TRUE@am__append_1072 = lsacpi.mod +@COND_i386_multiboot_TRUE@am__append_1073 = lsacpi.marker +@COND_x86_64_efi_TRUE@am__append_1074 = lsacpi.module +@COND_x86_64_efi_TRUE@am__append_1075 = lsacpi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1076 = +@COND_x86_64_efi_TRUE@am__append_1077 = $(nodist_lsacpi_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1078 = \ +@COND_x86_64_efi_TRUE@ $(nodist_lsacpi_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ lsacpi.marker +@COND_x86_64_efi_TRUE@am__append_1079 = lsacpi.mod +@COND_x86_64_efi_TRUE@am__append_1080 = lsacpi.marker +@COND_ia64_efi_TRUE@am__append_1081 = lsacpi.module +@COND_ia64_efi_TRUE@am__append_1082 = lsacpi.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1083 = +@COND_ia64_efi_TRUE@am__append_1084 = $(nodist_lsacpi_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1085 = $(nodist_lsacpi_module_SOURCES) \ +@COND_ia64_efi_TRUE@ lsacpi.marker +@COND_ia64_efi_TRUE@am__append_1086 = lsacpi.mod +@COND_ia64_efi_TRUE@am__append_1087 = lsacpi.marker +@COND_arm_efi_TRUE@am__append_1088 = lsacpi.module +@COND_arm_efi_TRUE@am__append_1089 = lsacpi.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1090 = +@COND_arm_efi_TRUE@am__append_1091 = $(nodist_lsacpi_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1092 = $(nodist_lsacpi_module_SOURCES) \ +@COND_arm_efi_TRUE@ lsacpi.marker +@COND_arm_efi_TRUE@am__append_1093 = lsacpi.mod +@COND_arm_efi_TRUE@am__append_1094 = lsacpi.marker +@COND_arm64_efi_TRUE@am__append_1095 = lsacpi.module +@COND_arm64_efi_TRUE@am__append_1096 = lsacpi.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1097 = +@COND_arm64_efi_TRUE@am__append_1098 = $(nodist_lsacpi_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1099 = \ +@COND_arm64_efi_TRUE@ $(nodist_lsacpi_module_SOURCES) \ +@COND_arm64_efi_TRUE@ lsacpi.marker +@COND_arm64_efi_TRUE@am__append_1100 = lsacpi.mod +@COND_arm64_efi_TRUE@am__append_1101 = lsacpi.marker +@COND_i386_efi_TRUE@am__append_1102 = lsefisystab.module +@COND_i386_efi_TRUE@am__append_1103 = lsefisystab.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@lsefisystab_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_1104 = +@COND_i386_efi_TRUE@am__append_1105 = $(nodist_lsefisystab_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1106 = \ +@COND_i386_efi_TRUE@ $(nodist_lsefisystab_module_SOURCES) \ +@COND_i386_efi_TRUE@ lsefisystab.marker +@COND_i386_efi_TRUE@am__append_1107 = lsefisystab.mod +@COND_i386_efi_TRUE@am__append_1108 = lsefisystab.marker +@COND_x86_64_efi_TRUE@am__append_1109 = lsefisystab.module +@COND_x86_64_efi_TRUE@am__append_1110 = lsefisystab.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1111 = +@COND_x86_64_efi_TRUE@am__append_1112 = $(nodist_lsefisystab_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1113 = \ +@COND_x86_64_efi_TRUE@ $(nodist_lsefisystab_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ lsefisystab.marker +@COND_x86_64_efi_TRUE@am__append_1114 = lsefisystab.mod +@COND_x86_64_efi_TRUE@am__append_1115 = lsefisystab.marker +@COND_ia64_efi_TRUE@am__append_1116 = lsefisystab.module +@COND_ia64_efi_TRUE@am__append_1117 = lsefisystab.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1118 = +@COND_ia64_efi_TRUE@am__append_1119 = $(nodist_lsefisystab_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1120 = \ +@COND_ia64_efi_TRUE@ $(nodist_lsefisystab_module_SOURCES) \ +@COND_ia64_efi_TRUE@ lsefisystab.marker +@COND_ia64_efi_TRUE@am__append_1121 = lsefisystab.mod +@COND_ia64_efi_TRUE@am__append_1122 = lsefisystab.marker +@COND_arm_efi_TRUE@am__append_1123 = lsefisystab.module +@COND_arm_efi_TRUE@am__append_1124 = lsefisystab.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1125 = +@COND_arm_efi_TRUE@am__append_1126 = $(nodist_lsefisystab_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1127 = \ +@COND_arm_efi_TRUE@ $(nodist_lsefisystab_module_SOURCES) \ +@COND_arm_efi_TRUE@ lsefisystab.marker +@COND_arm_efi_TRUE@am__append_1128 = lsefisystab.mod +@COND_arm_efi_TRUE@am__append_1129 = lsefisystab.marker +@COND_arm64_efi_TRUE@am__append_1130 = lsefisystab.module +@COND_arm64_efi_TRUE@am__append_1131 = lsefisystab.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1132 = +@COND_arm64_efi_TRUE@am__append_1133 = $(nodist_lsefisystab_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1134 = \ +@COND_arm64_efi_TRUE@ $(nodist_lsefisystab_module_SOURCES) \ +@COND_arm64_efi_TRUE@ lsefisystab.marker +@COND_arm64_efi_TRUE@am__append_1135 = lsefisystab.mod +@COND_arm64_efi_TRUE@am__append_1136 = lsefisystab.marker +@COND_i386_efi_TRUE@am__append_1137 = lssal.module +@COND_i386_efi_TRUE@am__append_1138 = lssal.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@lssal_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_1139 = +@COND_i386_efi_TRUE@am__append_1140 = $(nodist_lssal_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1141 = $(nodist_lssal_module_SOURCES) \ +@COND_i386_efi_TRUE@ lssal.marker +@COND_i386_efi_TRUE@am__append_1142 = lssal.mod +@COND_i386_efi_TRUE@am__append_1143 = lssal.marker +@COND_x86_64_efi_TRUE@am__append_1144 = lssal.module +@COND_x86_64_efi_TRUE@am__append_1145 = lssal.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1146 = +@COND_x86_64_efi_TRUE@am__append_1147 = $(nodist_lssal_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1148 = \ +@COND_x86_64_efi_TRUE@ $(nodist_lssal_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ lssal.marker +@COND_x86_64_efi_TRUE@am__append_1149 = lssal.mod +@COND_x86_64_efi_TRUE@am__append_1150 = lssal.marker +@COND_ia64_efi_TRUE@am__append_1151 = lssal.module +@COND_ia64_efi_TRUE@am__append_1152 = lssal.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1153 = +@COND_ia64_efi_TRUE@am__append_1154 = $(nodist_lssal_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1155 = $(nodist_lssal_module_SOURCES) \ +@COND_ia64_efi_TRUE@ lssal.marker +@COND_ia64_efi_TRUE@am__append_1156 = lssal.mod +@COND_ia64_efi_TRUE@am__append_1157 = lssal.marker +@COND_arm_efi_TRUE@am__append_1158 = lssal.module +@COND_arm_efi_TRUE@am__append_1159 = lssal.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1160 = +@COND_arm_efi_TRUE@am__append_1161 = $(nodist_lssal_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1162 = $(nodist_lssal_module_SOURCES) \ +@COND_arm_efi_TRUE@ lssal.marker +@COND_arm_efi_TRUE@am__append_1163 = lssal.mod +@COND_arm_efi_TRUE@am__append_1164 = lssal.marker +@COND_arm64_efi_TRUE@am__append_1165 = lssal.module +@COND_arm64_efi_TRUE@am__append_1166 = lssal.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1167 = +@COND_arm64_efi_TRUE@am__append_1168 = $(nodist_lssal_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1169 = $(nodist_lssal_module_SOURCES) \ +@COND_arm64_efi_TRUE@ lssal.marker +@COND_arm64_efi_TRUE@am__append_1170 = lssal.mod +@COND_arm64_efi_TRUE@am__append_1171 = lssal.marker +@COND_i386_efi_TRUE@am__append_1172 = lsefimmap.module +@COND_i386_efi_TRUE@am__append_1173 = lsefimmap.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@lsefimmap_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_1174 = +@COND_i386_efi_TRUE@am__append_1175 = $(nodist_lsefimmap_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1176 = \ +@COND_i386_efi_TRUE@ $(nodist_lsefimmap_module_SOURCES) \ +@COND_i386_efi_TRUE@ lsefimmap.marker +@COND_i386_efi_TRUE@am__append_1177 = lsefimmap.mod +@COND_i386_efi_TRUE@am__append_1178 = lsefimmap.marker +@COND_x86_64_efi_TRUE@am__append_1179 = lsefimmap.module +@COND_x86_64_efi_TRUE@am__append_1180 = lsefimmap.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1181 = +@COND_x86_64_efi_TRUE@am__append_1182 = $(nodist_lsefimmap_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1183 = \ +@COND_x86_64_efi_TRUE@ $(nodist_lsefimmap_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ lsefimmap.marker +@COND_x86_64_efi_TRUE@am__append_1184 = lsefimmap.mod +@COND_x86_64_efi_TRUE@am__append_1185 = lsefimmap.marker +@COND_ia64_efi_TRUE@am__append_1186 = lsefimmap.module +@COND_ia64_efi_TRUE@am__append_1187 = lsefimmap.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1188 = +@COND_ia64_efi_TRUE@am__append_1189 = $(nodist_lsefimmap_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1190 = \ +@COND_ia64_efi_TRUE@ $(nodist_lsefimmap_module_SOURCES) \ +@COND_ia64_efi_TRUE@ lsefimmap.marker +@COND_ia64_efi_TRUE@am__append_1191 = lsefimmap.mod +@COND_ia64_efi_TRUE@am__append_1192 = lsefimmap.marker +@COND_arm_efi_TRUE@am__append_1193 = lsefimmap.module +@COND_arm_efi_TRUE@am__append_1194 = lsefimmap.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1195 = +@COND_arm_efi_TRUE@am__append_1196 = $(nodist_lsefimmap_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1197 = \ +@COND_arm_efi_TRUE@ $(nodist_lsefimmap_module_SOURCES) \ +@COND_arm_efi_TRUE@ lsefimmap.marker +@COND_arm_efi_TRUE@am__append_1198 = lsefimmap.mod +@COND_arm_efi_TRUE@am__append_1199 = lsefimmap.marker +@COND_arm64_efi_TRUE@am__append_1200 = lsefimmap.module +@COND_arm64_efi_TRUE@am__append_1201 = lsefimmap.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1202 = +@COND_arm64_efi_TRUE@am__append_1203 = $(nodist_lsefimmap_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1204 = \ +@COND_arm64_efi_TRUE@ $(nodist_lsefimmap_module_SOURCES) \ +@COND_arm64_efi_TRUE@ lsefimmap.marker +@COND_arm64_efi_TRUE@am__append_1205 = lsefimmap.mod +@COND_arm64_efi_TRUE@am__append_1206 = lsefimmap.marker +@COND_i386_efi_TRUE@am__append_1207 = lsefi.module +@COND_i386_efi_TRUE@am__append_1208 = lsefi.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@lsefi_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_1209 = +@COND_i386_efi_TRUE@am__append_1210 = $(nodist_lsefi_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1211 = $(nodist_lsefi_module_SOURCES) \ +@COND_i386_efi_TRUE@ lsefi.marker +@COND_i386_efi_TRUE@am__append_1212 = lsefi.mod +@COND_i386_efi_TRUE@am__append_1213 = lsefi.marker +@COND_x86_64_efi_TRUE@am__append_1214 = lsefi.module +@COND_x86_64_efi_TRUE@am__append_1215 = lsefi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1216 = +@COND_x86_64_efi_TRUE@am__append_1217 = $(nodist_lsefi_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1218 = \ +@COND_x86_64_efi_TRUE@ $(nodist_lsefi_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ lsefi.marker +@COND_x86_64_efi_TRUE@am__append_1219 = lsefi.mod +@COND_x86_64_efi_TRUE@am__append_1220 = lsefi.marker +@COND_ia64_efi_TRUE@am__append_1221 = lsefi.module +@COND_ia64_efi_TRUE@am__append_1222 = lsefi.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1223 = +@COND_ia64_efi_TRUE@am__append_1224 = $(nodist_lsefi_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1225 = $(nodist_lsefi_module_SOURCES) \ +@COND_ia64_efi_TRUE@ lsefi.marker +@COND_ia64_efi_TRUE@am__append_1226 = lsefi.mod +@COND_ia64_efi_TRUE@am__append_1227 = lsefi.marker +@COND_arm_efi_TRUE@am__append_1228 = lsefi.module +@COND_arm_efi_TRUE@am__append_1229 = lsefi.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1230 = +@COND_arm_efi_TRUE@am__append_1231 = $(nodist_lsefi_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1232 = $(nodist_lsefi_module_SOURCES) \ +@COND_arm_efi_TRUE@ lsefi.marker +@COND_arm_efi_TRUE@am__append_1233 = lsefi.mod +@COND_arm_efi_TRUE@am__append_1234 = lsefi.marker +@COND_arm64_efi_TRUE@am__append_1235 = lsefi.module +@COND_arm64_efi_TRUE@am__append_1236 = lsefi.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1237 = +@COND_arm64_efi_TRUE@am__append_1238 = $(nodist_lsefi_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1239 = $(nodist_lsefi_module_SOURCES) \ +@COND_arm64_efi_TRUE@ lsefi.marker +@COND_arm64_efi_TRUE@am__append_1240 = lsefi.mod +@COND_arm64_efi_TRUE@am__append_1241 = lsefi.marker +@COND_i386_efi_TRUE@am__append_1242 = efifwsetup.module +@COND_i386_efi_TRUE@am__append_1243 = efifwsetup.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@efifwsetup_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_1244 = +@COND_i386_efi_TRUE@am__append_1245 = $(nodist_efifwsetup_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1246 = \ +@COND_i386_efi_TRUE@ $(nodist_efifwsetup_module_SOURCES) \ +@COND_i386_efi_TRUE@ efifwsetup.marker +@COND_i386_efi_TRUE@am__append_1247 = efifwsetup.mod +@COND_i386_efi_TRUE@am__append_1248 = efifwsetup.marker +@COND_x86_64_efi_TRUE@am__append_1249 = efifwsetup.module +@COND_x86_64_efi_TRUE@am__append_1250 = efifwsetup.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1251 = +@COND_x86_64_efi_TRUE@am__append_1252 = $(nodist_efifwsetup_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1253 = \ +@COND_x86_64_efi_TRUE@ $(nodist_efifwsetup_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ efifwsetup.marker +@COND_x86_64_efi_TRUE@am__append_1254 = efifwsetup.mod +@COND_x86_64_efi_TRUE@am__append_1255 = efifwsetup.marker +@COND_ia64_efi_TRUE@am__append_1256 = efifwsetup.module +@COND_ia64_efi_TRUE@am__append_1257 = efifwsetup.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1258 = +@COND_ia64_efi_TRUE@am__append_1259 = $(nodist_efifwsetup_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1260 = \ +@COND_ia64_efi_TRUE@ $(nodist_efifwsetup_module_SOURCES) \ +@COND_ia64_efi_TRUE@ efifwsetup.marker +@COND_ia64_efi_TRUE@am__append_1261 = efifwsetup.mod +@COND_ia64_efi_TRUE@am__append_1262 = efifwsetup.marker +@COND_arm_efi_TRUE@am__append_1263 = efifwsetup.module +@COND_arm_efi_TRUE@am__append_1264 = efifwsetup.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1265 = +@COND_arm_efi_TRUE@am__append_1266 = $(nodist_efifwsetup_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1267 = \ +@COND_arm_efi_TRUE@ $(nodist_efifwsetup_module_SOURCES) \ +@COND_arm_efi_TRUE@ efifwsetup.marker +@COND_arm_efi_TRUE@am__append_1268 = efifwsetup.mod +@COND_arm_efi_TRUE@am__append_1269 = efifwsetup.marker +@COND_arm64_efi_TRUE@am__append_1270 = efifwsetup.module +@COND_arm64_efi_TRUE@am__append_1271 = efifwsetup.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1272 = +@COND_arm64_efi_TRUE@am__append_1273 = $(nodist_efifwsetup_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1274 = \ +@COND_arm64_efi_TRUE@ $(nodist_efifwsetup_module_SOURCES) \ +@COND_arm64_efi_TRUE@ efifwsetup.marker +@COND_arm64_efi_TRUE@am__append_1275 = efifwsetup.mod +@COND_arm64_efi_TRUE@am__append_1276 = efifwsetup.marker +@COND_emu_TRUE@am__append_1277 = boot.module +@COND_emu_TRUE@am__append_1278 = boot.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@boot_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_1279 = +@COND_emu_TRUE@am__append_1280 = $(nodist_boot_module_SOURCES) +@COND_emu_TRUE@am__append_1281 = $(nodist_boot_module_SOURCES) \ +@COND_emu_TRUE@ boot.marker +@COND_emu_TRUE@am__append_1282 = boot.mod +@COND_emu_TRUE@am__append_1283 = boot.marker +@COND_i386_pc_TRUE@am__append_1284 = boot.module +@COND_i386_pc_TRUE@am__append_1285 = boot.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_1286 = +@COND_i386_pc_TRUE@am__append_1287 = $(nodist_boot_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1288 = $(nodist_boot_module_SOURCES) \ +@COND_i386_pc_TRUE@ boot.marker +@COND_i386_pc_TRUE@am__append_1289 = boot.mod +@COND_i386_pc_TRUE@am__append_1290 = boot.marker +@COND_i386_efi_TRUE@am__append_1291 = boot.module +@COND_i386_efi_TRUE@am__append_1292 = boot.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1293 = +@COND_i386_efi_TRUE@am__append_1294 = $(nodist_boot_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1295 = $(nodist_boot_module_SOURCES) \ +@COND_i386_efi_TRUE@ boot.marker +@COND_i386_efi_TRUE@am__append_1296 = boot.mod +@COND_i386_efi_TRUE@am__append_1297 = boot.marker +@COND_i386_qemu_TRUE@am__append_1298 = boot.module +@COND_i386_qemu_TRUE@am__append_1299 = boot.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1300 = +@COND_i386_qemu_TRUE@am__append_1301 = $(nodist_boot_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1302 = $(nodist_boot_module_SOURCES) \ +@COND_i386_qemu_TRUE@ boot.marker +@COND_i386_qemu_TRUE@am__append_1303 = boot.mod +@COND_i386_qemu_TRUE@am__append_1304 = boot.marker +@COND_i386_coreboot_TRUE@am__append_1305 = boot.module +@COND_i386_coreboot_TRUE@am__append_1306 = boot.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1307 = +@COND_i386_coreboot_TRUE@am__append_1308 = $(nodist_boot_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1309 = \ +@COND_i386_coreboot_TRUE@ $(nodist_boot_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ boot.marker +@COND_i386_coreboot_TRUE@am__append_1310 = boot.mod +@COND_i386_coreboot_TRUE@am__append_1311 = boot.marker +@COND_i386_multiboot_TRUE@am__append_1312 = boot.module +@COND_i386_multiboot_TRUE@am__append_1313 = boot.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1314 = +@COND_i386_multiboot_TRUE@am__append_1315 = $(nodist_boot_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1316 = \ +@COND_i386_multiboot_TRUE@ $(nodist_boot_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ boot.marker +@COND_i386_multiboot_TRUE@am__append_1317 = boot.mod +@COND_i386_multiboot_TRUE@am__append_1318 = boot.marker +@COND_i386_ieee1275_TRUE@am__append_1319 = boot.module +@COND_i386_ieee1275_TRUE@am__append_1320 = boot.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_1321 = +@COND_i386_ieee1275_TRUE@am__append_1322 = $(nodist_boot_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_1323 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_boot_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ boot.marker +@COND_i386_ieee1275_TRUE@am__append_1324 = boot.mod +@COND_i386_ieee1275_TRUE@am__append_1325 = boot.marker +@COND_x86_64_efi_TRUE@am__append_1326 = boot.module +@COND_x86_64_efi_TRUE@am__append_1327 = boot.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1328 = +@COND_x86_64_efi_TRUE@am__append_1329 = $(nodist_boot_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1330 = $(nodist_boot_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ boot.marker +@COND_x86_64_efi_TRUE@am__append_1331 = boot.mod +@COND_x86_64_efi_TRUE@am__append_1332 = boot.marker +@COND_sparc64_ieee1275_TRUE@am__append_1333 = boot.module +@COND_sparc64_ieee1275_TRUE@am__append_1334 = boot.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_1335 = +@COND_sparc64_ieee1275_TRUE@am__append_1336 = $(nodist_boot_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_1337 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_boot_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ boot.marker +@COND_sparc64_ieee1275_TRUE@am__append_1338 = boot.mod +@COND_sparc64_ieee1275_TRUE@am__append_1339 = boot.marker +@COND_powerpc_ieee1275_TRUE@am__append_1340 = boot.module +@COND_powerpc_ieee1275_TRUE@am__append_1341 = boot.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_1342 = +@COND_powerpc_ieee1275_TRUE@am__append_1343 = $(nodist_boot_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_1344 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_boot_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ boot.marker +@COND_powerpc_ieee1275_TRUE@am__append_1345 = boot.mod +@COND_powerpc_ieee1275_TRUE@am__append_1346 = boot.marker +@COND_mips_arc_TRUE@am__append_1347 = boot.module +@COND_mips_arc_TRUE@am__append_1348 = boot.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_1349 = +@COND_mips_arc_TRUE@am__append_1350 = $(nodist_boot_module_SOURCES) +@COND_mips_arc_TRUE@am__append_1351 = $(nodist_boot_module_SOURCES) \ +@COND_mips_arc_TRUE@ boot.marker +@COND_mips_arc_TRUE@am__append_1352 = boot.mod +@COND_mips_arc_TRUE@am__append_1353 = boot.marker +@COND_ia64_efi_TRUE@am__append_1354 = boot.module +@COND_ia64_efi_TRUE@am__append_1355 = boot.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1356 = +@COND_ia64_efi_TRUE@am__append_1357 = $(nodist_boot_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1358 = $(nodist_boot_module_SOURCES) \ +@COND_ia64_efi_TRUE@ boot.marker +@COND_ia64_efi_TRUE@am__append_1359 = boot.mod +@COND_ia64_efi_TRUE@am__append_1360 = boot.marker +@COND_arm_uboot_TRUE@am__append_1361 = boot.module +@COND_arm_uboot_TRUE@am__append_1362 = boot.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_1363 = +@COND_arm_uboot_TRUE@am__append_1364 = $(nodist_boot_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_1365 = $(nodist_boot_module_SOURCES) \ +@COND_arm_uboot_TRUE@ boot.marker +@COND_arm_uboot_TRUE@am__append_1366 = boot.mod +@COND_arm_uboot_TRUE@am__append_1367 = boot.marker +@COND_arm_efi_TRUE@am__append_1368 = boot.module +@COND_arm_efi_TRUE@am__append_1369 = boot.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1370 = +@COND_arm_efi_TRUE@am__append_1371 = $(nodist_boot_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1372 = $(nodist_boot_module_SOURCES) \ +@COND_arm_efi_TRUE@ boot.marker +@COND_arm_efi_TRUE@am__append_1373 = boot.mod +@COND_arm_efi_TRUE@am__append_1374 = boot.marker +@COND_arm64_efi_TRUE@am__append_1375 = boot.module +@COND_arm64_efi_TRUE@am__append_1376 = boot.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1377 = +@COND_arm64_efi_TRUE@am__append_1378 = $(nodist_boot_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1379 = $(nodist_boot_module_SOURCES) \ +@COND_arm64_efi_TRUE@ boot.marker +@COND_arm64_efi_TRUE@am__append_1380 = boot.mod +@COND_arm64_efi_TRUE@am__append_1381 = boot.marker +@COND_i386_pc_TRUE@am__append_1382 = cpuid.module +@COND_i386_pc_TRUE@am__append_1383 = cpuid.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@cpuid_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1384 = +@COND_i386_pc_TRUE@am__append_1385 = $(nodist_cpuid_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1386 = $(nodist_cpuid_module_SOURCES) \ +@COND_i386_pc_TRUE@ cpuid.marker +@COND_i386_pc_TRUE@am__append_1387 = cpuid.mod +@COND_i386_pc_TRUE@am__append_1388 = cpuid.marker +@COND_i386_efi_TRUE@am__append_1389 = cpuid.module +@COND_i386_efi_TRUE@am__append_1390 = cpuid.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1391 = +@COND_i386_efi_TRUE@am__append_1392 = $(nodist_cpuid_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1393 = $(nodist_cpuid_module_SOURCES) \ +@COND_i386_efi_TRUE@ cpuid.marker +@COND_i386_efi_TRUE@am__append_1394 = cpuid.mod +@COND_i386_efi_TRUE@am__append_1395 = cpuid.marker +@COND_i386_qemu_TRUE@am__append_1396 = cpuid.module +@COND_i386_qemu_TRUE@am__append_1397 = cpuid.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1398 = +@COND_i386_qemu_TRUE@am__append_1399 = $(nodist_cpuid_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1400 = $(nodist_cpuid_module_SOURCES) \ +@COND_i386_qemu_TRUE@ cpuid.marker +@COND_i386_qemu_TRUE@am__append_1401 = cpuid.mod +@COND_i386_qemu_TRUE@am__append_1402 = cpuid.marker +@COND_i386_coreboot_TRUE@am__append_1403 = cpuid.module +@COND_i386_coreboot_TRUE@am__append_1404 = cpuid.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1405 = +@COND_i386_coreboot_TRUE@am__append_1406 = $(nodist_cpuid_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1407 = \ +@COND_i386_coreboot_TRUE@ $(nodist_cpuid_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ cpuid.marker +@COND_i386_coreboot_TRUE@am__append_1408 = cpuid.mod +@COND_i386_coreboot_TRUE@am__append_1409 = cpuid.marker +@COND_i386_multiboot_TRUE@am__append_1410 = cpuid.module +@COND_i386_multiboot_TRUE@am__append_1411 = cpuid.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1412 = +@COND_i386_multiboot_TRUE@am__append_1413 = $(nodist_cpuid_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1414 = \ +@COND_i386_multiboot_TRUE@ $(nodist_cpuid_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ cpuid.marker +@COND_i386_multiboot_TRUE@am__append_1415 = cpuid.mod +@COND_i386_multiboot_TRUE@am__append_1416 = cpuid.marker +@COND_i386_ieee1275_TRUE@am__append_1417 = cpuid.module +@COND_i386_ieee1275_TRUE@am__append_1418 = cpuid.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_1419 = +@COND_i386_ieee1275_TRUE@am__append_1420 = $(nodist_cpuid_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_1421 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_cpuid_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ cpuid.marker +@COND_i386_ieee1275_TRUE@am__append_1422 = cpuid.mod +@COND_i386_ieee1275_TRUE@am__append_1423 = cpuid.marker +@COND_x86_64_efi_TRUE@am__append_1424 = cpuid.module +@COND_x86_64_efi_TRUE@am__append_1425 = cpuid.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1426 = +@COND_x86_64_efi_TRUE@am__append_1427 = $(nodist_cpuid_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1428 = \ +@COND_x86_64_efi_TRUE@ $(nodist_cpuid_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ cpuid.marker +@COND_x86_64_efi_TRUE@am__append_1429 = cpuid.mod +@COND_x86_64_efi_TRUE@am__append_1430 = cpuid.marker +@COND_i386_xen_TRUE@am__append_1431 = cpuid.module +@COND_i386_xen_TRUE@am__append_1432 = cpuid.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_1433 = +@COND_i386_xen_TRUE@am__append_1434 = $(nodist_cpuid_module_SOURCES) +@COND_i386_xen_TRUE@am__append_1435 = $(nodist_cpuid_module_SOURCES) \ +@COND_i386_xen_TRUE@ cpuid.marker +@COND_i386_xen_TRUE@am__append_1436 = cpuid.mod +@COND_i386_xen_TRUE@am__append_1437 = cpuid.marker +@COND_x86_64_xen_TRUE@am__append_1438 = cpuid.module +@COND_x86_64_xen_TRUE@am__append_1439 = cpuid.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_1440 = +@COND_x86_64_xen_TRUE@am__append_1441 = $(nodist_cpuid_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_1442 = \ +@COND_x86_64_xen_TRUE@ $(nodist_cpuid_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ cpuid.marker +@COND_x86_64_xen_TRUE@am__append_1443 = cpuid.mod +@COND_x86_64_xen_TRUE@am__append_1444 = cpuid.marker +@COND_i386_pc_TRUE@am__append_1445 = drivemap.module +@COND_i386_pc_TRUE@am__append_1446 = drivemap.module$(EXEEXT) +@COND_i386_pc_FALSE@drivemap_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1447 = +@COND_i386_pc_TRUE@am__append_1448 = $(nodist_drivemap_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1449 = \ +@COND_i386_pc_TRUE@ $(nodist_drivemap_module_SOURCES) \ +@COND_i386_pc_TRUE@ drivemap.marker +@COND_i386_pc_TRUE@am__append_1450 = drivemap.mod +@COND_i386_pc_TRUE@am__append_1451 = drivemap.marker +@COND_i386_pc_TRUE@am__append_1452 = extcmd.module +@COND_i386_pc_TRUE@am__append_1453 = extcmd.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@extcmd_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1454 = +@COND_i386_pc_TRUE@am__append_1455 = $(nodist_extcmd_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1456 = $(nodist_extcmd_module_SOURCES) \ +@COND_i386_pc_TRUE@ extcmd.marker +@COND_i386_pc_TRUE@am__append_1457 = extcmd.mod +@COND_i386_pc_TRUE@am__append_1458 = extcmd.marker +@COND_i386_efi_TRUE@am__append_1459 = extcmd.module +@COND_i386_efi_TRUE@am__append_1460 = extcmd.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1461 = +@COND_i386_efi_TRUE@am__append_1462 = $(nodist_extcmd_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1463 = $(nodist_extcmd_module_SOURCES) \ +@COND_i386_efi_TRUE@ extcmd.marker +@COND_i386_efi_TRUE@am__append_1464 = extcmd.mod +@COND_i386_efi_TRUE@am__append_1465 = extcmd.marker +@COND_i386_qemu_TRUE@am__append_1466 = extcmd.module +@COND_i386_qemu_TRUE@am__append_1467 = extcmd.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1468 = +@COND_i386_qemu_TRUE@am__append_1469 = $(nodist_extcmd_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1470 = \ +@COND_i386_qemu_TRUE@ $(nodist_extcmd_module_SOURCES) \ +@COND_i386_qemu_TRUE@ extcmd.marker +@COND_i386_qemu_TRUE@am__append_1471 = extcmd.mod +@COND_i386_qemu_TRUE@am__append_1472 = extcmd.marker +@COND_i386_coreboot_TRUE@am__append_1473 = extcmd.module +@COND_i386_coreboot_TRUE@am__append_1474 = extcmd.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1475 = +@COND_i386_coreboot_TRUE@am__append_1476 = $(nodist_extcmd_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1477 = \ +@COND_i386_coreboot_TRUE@ $(nodist_extcmd_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ extcmd.marker +@COND_i386_coreboot_TRUE@am__append_1478 = extcmd.mod +@COND_i386_coreboot_TRUE@am__append_1479 = extcmd.marker +@COND_i386_multiboot_TRUE@am__append_1480 = extcmd.module +@COND_i386_multiboot_TRUE@am__append_1481 = extcmd.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1482 = +@COND_i386_multiboot_TRUE@am__append_1483 = $(nodist_extcmd_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1484 = \ +@COND_i386_multiboot_TRUE@ $(nodist_extcmd_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ extcmd.marker +@COND_i386_multiboot_TRUE@am__append_1485 = extcmd.mod +@COND_i386_multiboot_TRUE@am__append_1486 = extcmd.marker +@COND_x86_64_efi_TRUE@am__append_1487 = extcmd.module +@COND_x86_64_efi_TRUE@am__append_1488 = extcmd.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1489 = +@COND_x86_64_efi_TRUE@am__append_1490 = $(nodist_extcmd_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1491 = \ +@COND_x86_64_efi_TRUE@ $(nodist_extcmd_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ extcmd.marker +@COND_x86_64_efi_TRUE@am__append_1492 = extcmd.mod +@COND_x86_64_efi_TRUE@am__append_1493 = extcmd.marker +@COND_ia64_efi_TRUE@am__append_1494 = extcmd.module +@COND_ia64_efi_TRUE@am__append_1495 = extcmd.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1496 = +@COND_ia64_efi_TRUE@am__append_1497 = $(nodist_extcmd_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1498 = $(nodist_extcmd_module_SOURCES) \ +@COND_ia64_efi_TRUE@ extcmd.marker +@COND_ia64_efi_TRUE@am__append_1499 = extcmd.mod +@COND_ia64_efi_TRUE@am__append_1500 = extcmd.marker +@COND_arm_efi_TRUE@am__append_1501 = extcmd.module +@COND_arm_efi_TRUE@am__append_1502 = extcmd.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1503 = +@COND_arm_efi_TRUE@am__append_1504 = $(nodist_extcmd_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1505 = $(nodist_extcmd_module_SOURCES) \ +@COND_arm_efi_TRUE@ extcmd.marker +@COND_arm_efi_TRUE@am__append_1506 = extcmd.mod +@COND_arm_efi_TRUE@am__append_1507 = extcmd.marker +@COND_arm64_efi_TRUE@am__append_1508 = extcmd.module +@COND_arm64_efi_TRUE@am__append_1509 = extcmd.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1510 = +@COND_arm64_efi_TRUE@am__append_1511 = $(nodist_extcmd_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1512 = \ +@COND_arm64_efi_TRUE@ $(nodist_extcmd_module_SOURCES) \ +@COND_arm64_efi_TRUE@ extcmd.marker +@COND_arm64_efi_TRUE@am__append_1513 = extcmd.mod +@COND_arm64_efi_TRUE@am__append_1514 = extcmd.marker +@COND_i386_efi_TRUE@am__append_1515 = fixvideo.module +@COND_i386_efi_TRUE@am__append_1516 = fixvideo.module$(EXEEXT) +@COND_i386_efi_FALSE@@COND_x86_64_efi_FALSE@fixvideo_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_1517 = +@COND_i386_efi_TRUE@am__append_1518 = $(nodist_fixvideo_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1519 = \ +@COND_i386_efi_TRUE@ $(nodist_fixvideo_module_SOURCES) \ +@COND_i386_efi_TRUE@ fixvideo.marker +@COND_i386_efi_TRUE@am__append_1520 = fixvideo.mod +@COND_i386_efi_TRUE@am__append_1521 = fixvideo.marker +@COND_x86_64_efi_TRUE@am__append_1522 = fixvideo.module +@COND_x86_64_efi_TRUE@am__append_1523 = fixvideo.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1524 = +@COND_x86_64_efi_TRUE@am__append_1525 = $(nodist_fixvideo_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1526 = \ +@COND_x86_64_efi_TRUE@ $(nodist_fixvideo_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ fixvideo.marker +@COND_x86_64_efi_TRUE@am__append_1527 = fixvideo.mod +@COND_x86_64_efi_TRUE@am__append_1528 = fixvideo.marker +@COND_emu_TRUE@am__append_1529 = halt.module +@COND_emu_TRUE@am__append_1530 = halt.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@halt_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_1531 = +@COND_emu_TRUE@am__append_1532 = $(nodist_halt_module_SOURCES) +@COND_emu_TRUE@am__append_1533 = $(nodist_halt_module_SOURCES) \ +@COND_emu_TRUE@ halt.marker +@COND_emu_TRUE@am__append_1534 = halt.mod +@COND_emu_TRUE@am__append_1535 = halt.marker +@COND_i386_pc_TRUE@am__append_1536 = halt.module +@COND_i386_pc_TRUE@am__append_1537 = halt.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_1538 = +@COND_i386_pc_TRUE@am__append_1539 = $(nodist_halt_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1540 = $(nodist_halt_module_SOURCES) \ +@COND_i386_pc_TRUE@ halt.marker +@COND_i386_pc_TRUE@am__append_1541 = halt.mod +@COND_i386_pc_TRUE@am__append_1542 = halt.marker +@COND_i386_efi_TRUE@am__append_1543 = halt.module +@COND_i386_efi_TRUE@am__append_1544 = halt.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1545 = +@COND_i386_efi_TRUE@am__append_1546 = $(nodist_halt_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1547 = $(nodist_halt_module_SOURCES) \ +@COND_i386_efi_TRUE@ halt.marker +@COND_i386_efi_TRUE@am__append_1548 = halt.mod +@COND_i386_efi_TRUE@am__append_1549 = halt.marker +@COND_i386_qemu_TRUE@am__append_1550 = halt.module +@COND_i386_qemu_TRUE@am__append_1551 = halt.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1552 = +@COND_i386_qemu_TRUE@am__append_1553 = $(nodist_halt_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1554 = $(nodist_halt_module_SOURCES) \ +@COND_i386_qemu_TRUE@ halt.marker +@COND_i386_qemu_TRUE@am__append_1555 = halt.mod +@COND_i386_qemu_TRUE@am__append_1556 = halt.marker +@COND_i386_coreboot_TRUE@am__append_1557 = halt.module +@COND_i386_coreboot_TRUE@am__append_1558 = halt.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1559 = +@COND_i386_coreboot_TRUE@am__append_1560 = $(nodist_halt_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1561 = \ +@COND_i386_coreboot_TRUE@ $(nodist_halt_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ halt.marker +@COND_i386_coreboot_TRUE@am__append_1562 = halt.mod +@COND_i386_coreboot_TRUE@am__append_1563 = halt.marker +@COND_i386_multiboot_TRUE@am__append_1564 = halt.module +@COND_i386_multiboot_TRUE@am__append_1565 = halt.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1566 = +@COND_i386_multiboot_TRUE@am__append_1567 = $(nodist_halt_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1568 = \ +@COND_i386_multiboot_TRUE@ $(nodist_halt_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ halt.marker +@COND_i386_multiboot_TRUE@am__append_1569 = halt.mod +@COND_i386_multiboot_TRUE@am__append_1570 = halt.marker +@COND_i386_ieee1275_TRUE@am__append_1571 = halt.module +@COND_i386_ieee1275_TRUE@am__append_1572 = halt.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_1573 = +@COND_i386_ieee1275_TRUE@am__append_1574 = $(nodist_halt_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_1575 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_halt_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ halt.marker +@COND_i386_ieee1275_TRUE@am__append_1576 = halt.mod +@COND_i386_ieee1275_TRUE@am__append_1577 = halt.marker +@COND_x86_64_efi_TRUE@am__append_1578 = halt.module +@COND_x86_64_efi_TRUE@am__append_1579 = halt.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1580 = +@COND_x86_64_efi_TRUE@am__append_1581 = $(nodist_halt_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1582 = $(nodist_halt_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ halt.marker +@COND_x86_64_efi_TRUE@am__append_1583 = halt.mod +@COND_x86_64_efi_TRUE@am__append_1584 = halt.marker +@COND_i386_xen_TRUE@am__append_1585 = halt.module +@COND_i386_xen_TRUE@am__append_1586 = halt.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_1587 = +@COND_i386_xen_TRUE@am__append_1588 = $(nodist_halt_module_SOURCES) +@COND_i386_xen_TRUE@am__append_1589 = $(nodist_halt_module_SOURCES) \ +@COND_i386_xen_TRUE@ halt.marker +@COND_i386_xen_TRUE@am__append_1590 = halt.mod +@COND_i386_xen_TRUE@am__append_1591 = halt.marker +@COND_x86_64_xen_TRUE@am__append_1592 = halt.module +@COND_x86_64_xen_TRUE@am__append_1593 = halt.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_1594 = +@COND_x86_64_xen_TRUE@am__append_1595 = $(nodist_halt_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_1596 = $(nodist_halt_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ halt.marker +@COND_x86_64_xen_TRUE@am__append_1597 = halt.mod +@COND_x86_64_xen_TRUE@am__append_1598 = halt.marker +@COND_mips_loongson_TRUE@am__append_1599 = halt.module +@COND_mips_loongson_TRUE@am__append_1600 = halt.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_1601 = +@COND_mips_loongson_TRUE@am__append_1602 = $(nodist_halt_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_1603 = \ +@COND_mips_loongson_TRUE@ $(nodist_halt_module_SOURCES) \ +@COND_mips_loongson_TRUE@ halt.marker +@COND_mips_loongson_TRUE@am__append_1604 = halt.mod +@COND_mips_loongson_TRUE@am__append_1605 = halt.marker +@COND_sparc64_ieee1275_TRUE@am__append_1606 = halt.module +@COND_sparc64_ieee1275_TRUE@am__append_1607 = halt.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_1608 = +@COND_sparc64_ieee1275_TRUE@am__append_1609 = $(nodist_halt_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_1610 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_halt_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ halt.marker +@COND_sparc64_ieee1275_TRUE@am__append_1611 = halt.mod +@COND_sparc64_ieee1275_TRUE@am__append_1612 = halt.marker +@COND_powerpc_ieee1275_TRUE@am__append_1613 = halt.module +@COND_powerpc_ieee1275_TRUE@am__append_1614 = halt.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_1615 = +@COND_powerpc_ieee1275_TRUE@am__append_1616 = $(nodist_halt_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_1617 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_halt_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ halt.marker +@COND_powerpc_ieee1275_TRUE@am__append_1618 = halt.mod +@COND_powerpc_ieee1275_TRUE@am__append_1619 = halt.marker +@COND_mips_arc_TRUE@am__append_1620 = halt.module +@COND_mips_arc_TRUE@am__append_1621 = halt.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_1622 = +@COND_mips_arc_TRUE@am__append_1623 = $(nodist_halt_module_SOURCES) +@COND_mips_arc_TRUE@am__append_1624 = $(nodist_halt_module_SOURCES) \ +@COND_mips_arc_TRUE@ halt.marker +@COND_mips_arc_TRUE@am__append_1625 = halt.mod +@COND_mips_arc_TRUE@am__append_1626 = halt.marker +@COND_ia64_efi_TRUE@am__append_1627 = halt.module +@COND_ia64_efi_TRUE@am__append_1628 = halt.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1629 = +@COND_ia64_efi_TRUE@am__append_1630 = $(nodist_halt_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1631 = $(nodist_halt_module_SOURCES) \ +@COND_ia64_efi_TRUE@ halt.marker +@COND_ia64_efi_TRUE@am__append_1632 = halt.mod +@COND_ia64_efi_TRUE@am__append_1633 = halt.marker +@COND_mips_qemu_mips_TRUE@am__append_1634 = halt.module +@COND_mips_qemu_mips_TRUE@am__append_1635 = halt.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_1636 = +@COND_mips_qemu_mips_TRUE@am__append_1637 = $(nodist_halt_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_1638 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_halt_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ halt.marker +@COND_mips_qemu_mips_TRUE@am__append_1639 = halt.mod +@COND_mips_qemu_mips_TRUE@am__append_1640 = halt.marker +@COND_arm_uboot_TRUE@am__append_1641 = halt.module +@COND_arm_uboot_TRUE@am__append_1642 = halt.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_1643 = +@COND_arm_uboot_TRUE@am__append_1644 = $(nodist_halt_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_1645 = $(nodist_halt_module_SOURCES) \ +@COND_arm_uboot_TRUE@ halt.marker +@COND_arm_uboot_TRUE@am__append_1646 = halt.mod +@COND_arm_uboot_TRUE@am__append_1647 = halt.marker +@COND_arm_efi_TRUE@am__append_1648 = halt.module +@COND_arm_efi_TRUE@am__append_1649 = halt.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1650 = +@COND_arm_efi_TRUE@am__append_1651 = $(nodist_halt_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1652 = $(nodist_halt_module_SOURCES) \ +@COND_arm_efi_TRUE@ halt.marker +@COND_arm_efi_TRUE@am__append_1653 = halt.mod +@COND_arm_efi_TRUE@am__append_1654 = halt.marker +@COND_arm64_efi_TRUE@am__append_1655 = halt.module +@COND_arm64_efi_TRUE@am__append_1656 = halt.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1657 = +@COND_arm64_efi_TRUE@am__append_1658 = $(nodist_halt_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1659 = $(nodist_halt_module_SOURCES) \ +@COND_arm64_efi_TRUE@ halt.marker +@COND_arm64_efi_TRUE@am__append_1660 = halt.mod +@COND_arm64_efi_TRUE@am__append_1661 = halt.marker +@COND_emu_TRUE@am__append_1662 = reboot.module +@COND_emu_TRUE@am__append_1663 = reboot.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@reboot_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_1664 = +@COND_emu_TRUE@am__append_1665 = $(nodist_reboot_module_SOURCES) +@COND_emu_TRUE@am__append_1666 = $(nodist_reboot_module_SOURCES) \ +@COND_emu_TRUE@ reboot.marker +@COND_emu_TRUE@am__append_1667 = reboot.mod +@COND_emu_TRUE@am__append_1668 = reboot.marker +@COND_i386_pc_TRUE@am__append_1669 = reboot.module +@COND_i386_pc_TRUE@am__append_1670 = reboot.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_1671 = +@COND_i386_pc_TRUE@am__append_1672 = $(nodist_reboot_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1673 = $(nodist_reboot_module_SOURCES) \ +@COND_i386_pc_TRUE@ reboot.marker +@COND_i386_pc_TRUE@am__append_1674 = reboot.mod +@COND_i386_pc_TRUE@am__append_1675 = reboot.marker +@COND_i386_efi_TRUE@am__append_1676 = reboot.module +@COND_i386_efi_TRUE@am__append_1677 = reboot.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1678 = +@COND_i386_efi_TRUE@am__append_1679 = $(nodist_reboot_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1680 = $(nodist_reboot_module_SOURCES) \ +@COND_i386_efi_TRUE@ reboot.marker +@COND_i386_efi_TRUE@am__append_1681 = reboot.mod +@COND_i386_efi_TRUE@am__append_1682 = reboot.marker +@COND_i386_qemu_TRUE@am__append_1683 = reboot.module +@COND_i386_qemu_TRUE@am__append_1684 = reboot.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1685 = +@COND_i386_qemu_TRUE@am__append_1686 = $(nodist_reboot_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1687 = \ +@COND_i386_qemu_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_i386_qemu_TRUE@ reboot.marker +@COND_i386_qemu_TRUE@am__append_1688 = reboot.mod +@COND_i386_qemu_TRUE@am__append_1689 = reboot.marker +@COND_i386_coreboot_TRUE@am__append_1690 = reboot.module +@COND_i386_coreboot_TRUE@am__append_1691 = reboot.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1692 = +@COND_i386_coreboot_TRUE@am__append_1693 = $(nodist_reboot_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1694 = \ +@COND_i386_coreboot_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ reboot.marker +@COND_i386_coreboot_TRUE@am__append_1695 = reboot.mod +@COND_i386_coreboot_TRUE@am__append_1696 = reboot.marker +@COND_i386_multiboot_TRUE@am__append_1697 = reboot.module +@COND_i386_multiboot_TRUE@am__append_1698 = reboot.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1699 = +@COND_i386_multiboot_TRUE@am__append_1700 = $(nodist_reboot_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1701 = \ +@COND_i386_multiboot_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ reboot.marker +@COND_i386_multiboot_TRUE@am__append_1702 = reboot.mod +@COND_i386_multiboot_TRUE@am__append_1703 = reboot.marker +@COND_i386_ieee1275_TRUE@am__append_1704 = reboot.module +@COND_i386_ieee1275_TRUE@am__append_1705 = reboot.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_1706 = +@COND_i386_ieee1275_TRUE@am__append_1707 = $(nodist_reboot_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_1708 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ reboot.marker +@COND_i386_ieee1275_TRUE@am__append_1709 = reboot.mod +@COND_i386_ieee1275_TRUE@am__append_1710 = reboot.marker +@COND_x86_64_efi_TRUE@am__append_1711 = reboot.module +@COND_x86_64_efi_TRUE@am__append_1712 = reboot.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1713 = +@COND_x86_64_efi_TRUE@am__append_1714 = $(nodist_reboot_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1715 = \ +@COND_x86_64_efi_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ reboot.marker +@COND_x86_64_efi_TRUE@am__append_1716 = reboot.mod +@COND_x86_64_efi_TRUE@am__append_1717 = reboot.marker +@COND_i386_xen_TRUE@am__append_1718 = reboot.module +@COND_i386_xen_TRUE@am__append_1719 = reboot.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_1720 = +@COND_i386_xen_TRUE@am__append_1721 = $(nodist_reboot_module_SOURCES) +@COND_i386_xen_TRUE@am__append_1722 = $(nodist_reboot_module_SOURCES) \ +@COND_i386_xen_TRUE@ reboot.marker +@COND_i386_xen_TRUE@am__append_1723 = reboot.mod +@COND_i386_xen_TRUE@am__append_1724 = reboot.marker +@COND_x86_64_xen_TRUE@am__append_1725 = reboot.module +@COND_x86_64_xen_TRUE@am__append_1726 = reboot.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_1727 = +@COND_x86_64_xen_TRUE@am__append_1728 = $(nodist_reboot_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_1729 = \ +@COND_x86_64_xen_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ reboot.marker +@COND_x86_64_xen_TRUE@am__append_1730 = reboot.mod +@COND_x86_64_xen_TRUE@am__append_1731 = reboot.marker +@COND_mips_loongson_TRUE@am__append_1732 = reboot.module +@COND_mips_loongson_TRUE@am__append_1733 = reboot.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_1734 = +@COND_mips_loongson_TRUE@am__append_1735 = $(nodist_reboot_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_1736 = \ +@COND_mips_loongson_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_mips_loongson_TRUE@ reboot.marker +@COND_mips_loongson_TRUE@am__append_1737 = reboot.mod +@COND_mips_loongson_TRUE@am__append_1738 = reboot.marker +@COND_sparc64_ieee1275_TRUE@am__append_1739 = reboot.module +@COND_sparc64_ieee1275_TRUE@am__append_1740 = reboot.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_1741 = +@COND_sparc64_ieee1275_TRUE@am__append_1742 = $(nodist_reboot_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_1743 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ reboot.marker +@COND_sparc64_ieee1275_TRUE@am__append_1744 = reboot.mod +@COND_sparc64_ieee1275_TRUE@am__append_1745 = reboot.marker +@COND_powerpc_ieee1275_TRUE@am__append_1746 = reboot.module +@COND_powerpc_ieee1275_TRUE@am__append_1747 = reboot.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_1748 = +@COND_powerpc_ieee1275_TRUE@am__append_1749 = $(nodist_reboot_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_1750 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ reboot.marker +@COND_powerpc_ieee1275_TRUE@am__append_1751 = reboot.mod +@COND_powerpc_ieee1275_TRUE@am__append_1752 = reboot.marker +@COND_mips_arc_TRUE@am__append_1753 = reboot.module +@COND_mips_arc_TRUE@am__append_1754 = reboot.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_1755 = +@COND_mips_arc_TRUE@am__append_1756 = $(nodist_reboot_module_SOURCES) +@COND_mips_arc_TRUE@am__append_1757 = $(nodist_reboot_module_SOURCES) \ +@COND_mips_arc_TRUE@ reboot.marker +@COND_mips_arc_TRUE@am__append_1758 = reboot.mod +@COND_mips_arc_TRUE@am__append_1759 = reboot.marker +@COND_ia64_efi_TRUE@am__append_1760 = reboot.module +@COND_ia64_efi_TRUE@am__append_1761 = reboot.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_1762 = +@COND_ia64_efi_TRUE@am__append_1763 = $(nodist_reboot_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_1764 = $(nodist_reboot_module_SOURCES) \ +@COND_ia64_efi_TRUE@ reboot.marker +@COND_ia64_efi_TRUE@am__append_1765 = reboot.mod +@COND_ia64_efi_TRUE@am__append_1766 = reboot.marker +@COND_mips_qemu_mips_TRUE@am__append_1767 = reboot.module +@COND_mips_qemu_mips_TRUE@am__append_1768 = reboot.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_1769 = +@COND_mips_qemu_mips_TRUE@am__append_1770 = $(nodist_reboot_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_1771 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ reboot.marker +@COND_mips_qemu_mips_TRUE@am__append_1772 = reboot.mod +@COND_mips_qemu_mips_TRUE@am__append_1773 = reboot.marker +@COND_arm_uboot_TRUE@am__append_1774 = reboot.module +@COND_arm_uboot_TRUE@am__append_1775 = reboot.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_1776 = +@COND_arm_uboot_TRUE@am__append_1777 = $(nodist_reboot_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_1778 = \ +@COND_arm_uboot_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_arm_uboot_TRUE@ reboot.marker +@COND_arm_uboot_TRUE@am__append_1779 = reboot.mod +@COND_arm_uboot_TRUE@am__append_1780 = reboot.marker +@COND_arm_efi_TRUE@am__append_1781 = reboot.module +@COND_arm_efi_TRUE@am__append_1782 = reboot.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_1783 = +@COND_arm_efi_TRUE@am__append_1784 = $(nodist_reboot_module_SOURCES) +@COND_arm_efi_TRUE@am__append_1785 = $(nodist_reboot_module_SOURCES) \ +@COND_arm_efi_TRUE@ reboot.marker +@COND_arm_efi_TRUE@am__append_1786 = reboot.mod +@COND_arm_efi_TRUE@am__append_1787 = reboot.marker +@COND_arm64_efi_TRUE@am__append_1788 = reboot.module +@COND_arm64_efi_TRUE@am__append_1789 = reboot.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_1790 = +@COND_arm64_efi_TRUE@am__append_1791 = $(nodist_reboot_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_1792 = \ +@COND_arm64_efi_TRUE@ $(nodist_reboot_module_SOURCES) \ +@COND_arm64_efi_TRUE@ reboot.marker +@COND_arm64_efi_TRUE@am__append_1793 = reboot.mod +@COND_arm64_efi_TRUE@am__append_1794 = reboot.marker +@COND_i386_pc_TRUE@am__append_1795 = hdparm.module +@COND_i386_pc_TRUE@am__append_1796 = hdparm.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@hdparm_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1797 = +@COND_i386_pc_TRUE@am__append_1798 = $(nodist_hdparm_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1799 = $(nodist_hdparm_module_SOURCES) \ +@COND_i386_pc_TRUE@ hdparm.marker +@COND_i386_pc_TRUE@am__append_1800 = hdparm.mod +@COND_i386_pc_TRUE@am__append_1801 = hdparm.marker +@COND_i386_efi_TRUE@am__append_1802 = hdparm.module +@COND_i386_efi_TRUE@am__append_1803 = hdparm.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1804 = +@COND_i386_efi_TRUE@am__append_1805 = $(nodist_hdparm_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1806 = $(nodist_hdparm_module_SOURCES) \ +@COND_i386_efi_TRUE@ hdparm.marker +@COND_i386_efi_TRUE@am__append_1807 = hdparm.mod +@COND_i386_efi_TRUE@am__append_1808 = hdparm.marker +@COND_i386_qemu_TRUE@am__append_1809 = hdparm.module +@COND_i386_qemu_TRUE@am__append_1810 = hdparm.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1811 = +@COND_i386_qemu_TRUE@am__append_1812 = $(nodist_hdparm_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1813 = \ +@COND_i386_qemu_TRUE@ $(nodist_hdparm_module_SOURCES) \ +@COND_i386_qemu_TRUE@ hdparm.marker +@COND_i386_qemu_TRUE@am__append_1814 = hdparm.mod +@COND_i386_qemu_TRUE@am__append_1815 = hdparm.marker +@COND_i386_coreboot_TRUE@am__append_1816 = hdparm.module +@COND_i386_coreboot_TRUE@am__append_1817 = hdparm.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1818 = +@COND_i386_coreboot_TRUE@am__append_1819 = $(nodist_hdparm_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1820 = \ +@COND_i386_coreboot_TRUE@ $(nodist_hdparm_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ hdparm.marker +@COND_i386_coreboot_TRUE@am__append_1821 = hdparm.mod +@COND_i386_coreboot_TRUE@am__append_1822 = hdparm.marker +@COND_i386_multiboot_TRUE@am__append_1823 = hdparm.module +@COND_i386_multiboot_TRUE@am__append_1824 = hdparm.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1825 = +@COND_i386_multiboot_TRUE@am__append_1826 = $(nodist_hdparm_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1827 = \ +@COND_i386_multiboot_TRUE@ $(nodist_hdparm_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ hdparm.marker +@COND_i386_multiboot_TRUE@am__append_1828 = hdparm.mod +@COND_i386_multiboot_TRUE@am__append_1829 = hdparm.marker +@COND_i386_ieee1275_TRUE@am__append_1830 = hdparm.module +@COND_i386_ieee1275_TRUE@am__append_1831 = hdparm.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_1832 = +@COND_i386_ieee1275_TRUE@am__append_1833 = $(nodist_hdparm_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_1834 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_hdparm_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ hdparm.marker +@COND_i386_ieee1275_TRUE@am__append_1835 = hdparm.mod +@COND_i386_ieee1275_TRUE@am__append_1836 = hdparm.marker +@COND_x86_64_efi_TRUE@am__append_1837 = hdparm.module +@COND_x86_64_efi_TRUE@am__append_1838 = hdparm.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1839 = +@COND_x86_64_efi_TRUE@am__append_1840 = $(nodist_hdparm_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1841 = \ +@COND_x86_64_efi_TRUE@ $(nodist_hdparm_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ hdparm.marker +@COND_x86_64_efi_TRUE@am__append_1842 = hdparm.mod +@COND_x86_64_efi_TRUE@am__append_1843 = hdparm.marker +@COND_mips_loongson_TRUE@am__append_1844 = hdparm.module +@COND_mips_loongson_TRUE@am__append_1845 = hdparm.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_1846 = +@COND_mips_loongson_TRUE@am__append_1847 = $(nodist_hdparm_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_1848 = \ +@COND_mips_loongson_TRUE@ $(nodist_hdparm_module_SOURCES) \ +@COND_mips_loongson_TRUE@ hdparm.marker +@COND_mips_loongson_TRUE@am__append_1849 = hdparm.mod +@COND_mips_loongson_TRUE@am__append_1850 = hdparm.marker +@COND_mips_qemu_mips_TRUE@am__append_1851 = hdparm.module +@COND_mips_qemu_mips_TRUE@am__append_1852 = hdparm.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_1853 = +@COND_mips_qemu_mips_TRUE@am__append_1854 = $(nodist_hdparm_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_1855 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_hdparm_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ hdparm.marker +@COND_mips_qemu_mips_TRUE@am__append_1856 = hdparm.mod +@COND_mips_qemu_mips_TRUE@am__append_1857 = hdparm.marker +@COND_i386_efi_TRUE@am__append_1858 = loadbios.module +@COND_i386_efi_TRUE@am__append_1859 = loadbios.module$(EXEEXT) +@COND_i386_efi_FALSE@@COND_x86_64_efi_FALSE@loadbios_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_1860 = +@COND_i386_efi_TRUE@am__append_1861 = $(nodist_loadbios_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1862 = \ +@COND_i386_efi_TRUE@ $(nodist_loadbios_module_SOURCES) \ +@COND_i386_efi_TRUE@ loadbios.marker +@COND_i386_efi_TRUE@am__append_1863 = loadbios.mod +@COND_i386_efi_TRUE@am__append_1864 = loadbios.marker +@COND_x86_64_efi_TRUE@am__append_1865 = loadbios.module +@COND_x86_64_efi_TRUE@am__append_1866 = loadbios.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1867 = +@COND_x86_64_efi_TRUE@am__append_1868 = $(nodist_loadbios_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1869 = \ +@COND_x86_64_efi_TRUE@ $(nodist_loadbios_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ loadbios.marker +@COND_x86_64_efi_TRUE@am__append_1870 = loadbios.mod +@COND_x86_64_efi_TRUE@am__append_1871 = loadbios.marker +@COND_i386_pc_TRUE@am__append_1872 = lspci.module +@COND_i386_pc_TRUE@am__append_1873 = lspci.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@lspci_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1874 = +@COND_i386_pc_TRUE@am__append_1875 = $(nodist_lspci_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1876 = $(nodist_lspci_module_SOURCES) \ +@COND_i386_pc_TRUE@ lspci.marker +@COND_i386_pc_TRUE@am__append_1877 = lspci.mod +@COND_i386_pc_TRUE@am__append_1878 = lspci.marker +@COND_i386_efi_TRUE@am__append_1879 = lspci.module +@COND_i386_efi_TRUE@am__append_1880 = lspci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1881 = +@COND_i386_efi_TRUE@am__append_1882 = $(nodist_lspci_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1883 = $(nodist_lspci_module_SOURCES) \ +@COND_i386_efi_TRUE@ lspci.marker +@COND_i386_efi_TRUE@am__append_1884 = lspci.mod +@COND_i386_efi_TRUE@am__append_1885 = lspci.marker +@COND_i386_qemu_TRUE@am__append_1886 = lspci.module +@COND_i386_qemu_TRUE@am__append_1887 = lspci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1888 = +@COND_i386_qemu_TRUE@am__append_1889 = $(nodist_lspci_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1890 = $(nodist_lspci_module_SOURCES) \ +@COND_i386_qemu_TRUE@ lspci.marker +@COND_i386_qemu_TRUE@am__append_1891 = lspci.mod +@COND_i386_qemu_TRUE@am__append_1892 = lspci.marker +@COND_i386_coreboot_TRUE@am__append_1893 = lspci.module +@COND_i386_coreboot_TRUE@am__append_1894 = lspci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1895 = +@COND_i386_coreboot_TRUE@am__append_1896 = $(nodist_lspci_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1897 = \ +@COND_i386_coreboot_TRUE@ $(nodist_lspci_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ lspci.marker +@COND_i386_coreboot_TRUE@am__append_1898 = lspci.mod +@COND_i386_coreboot_TRUE@am__append_1899 = lspci.marker +@COND_i386_multiboot_TRUE@am__append_1900 = lspci.module +@COND_i386_multiboot_TRUE@am__append_1901 = lspci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1902 = +@COND_i386_multiboot_TRUE@am__append_1903 = $(nodist_lspci_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1904 = \ +@COND_i386_multiboot_TRUE@ $(nodist_lspci_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ lspci.marker +@COND_i386_multiboot_TRUE@am__append_1905 = lspci.mod +@COND_i386_multiboot_TRUE@am__append_1906 = lspci.marker +@COND_i386_ieee1275_TRUE@am__append_1907 = lspci.module +@COND_i386_ieee1275_TRUE@am__append_1908 = lspci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_1909 = +@COND_i386_ieee1275_TRUE@am__append_1910 = $(nodist_lspci_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_1911 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_lspci_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ lspci.marker +@COND_i386_ieee1275_TRUE@am__append_1912 = lspci.mod +@COND_i386_ieee1275_TRUE@am__append_1913 = lspci.marker +@COND_x86_64_efi_TRUE@am__append_1914 = lspci.module +@COND_x86_64_efi_TRUE@am__append_1915 = lspci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1916 = +@COND_x86_64_efi_TRUE@am__append_1917 = $(nodist_lspci_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1918 = \ +@COND_x86_64_efi_TRUE@ $(nodist_lspci_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ lspci.marker +@COND_x86_64_efi_TRUE@am__append_1919 = lspci.mod +@COND_x86_64_efi_TRUE@am__append_1920 = lspci.marker +@COND_mips_loongson_TRUE@am__append_1921 = lspci.module +@COND_mips_loongson_TRUE@am__append_1922 = lspci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_1923 = +@COND_mips_loongson_TRUE@am__append_1924 = $(nodist_lspci_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_1925 = \ +@COND_mips_loongson_TRUE@ $(nodist_lspci_module_SOURCES) \ +@COND_mips_loongson_TRUE@ lspci.marker +@COND_mips_loongson_TRUE@am__append_1926 = lspci.mod +@COND_mips_loongson_TRUE@am__append_1927 = lspci.marker +@COND_i386_pc_TRUE@am__append_1928 = play.module +@COND_i386_pc_TRUE@am__append_1929 = play.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@play_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1930 = +@COND_i386_pc_TRUE@am__append_1931 = $(nodist_play_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1932 = $(nodist_play_module_SOURCES) \ +@COND_i386_pc_TRUE@ play.marker +@COND_i386_pc_TRUE@am__append_1933 = play.mod +@COND_i386_pc_TRUE@am__append_1934 = play.marker +@COND_i386_efi_TRUE@am__append_1935 = play.module +@COND_i386_efi_TRUE@am__append_1936 = play.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1937 = +@COND_i386_efi_TRUE@am__append_1938 = $(nodist_play_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1939 = $(nodist_play_module_SOURCES) \ +@COND_i386_efi_TRUE@ play.marker +@COND_i386_efi_TRUE@am__append_1940 = play.mod +@COND_i386_efi_TRUE@am__append_1941 = play.marker +@COND_i386_qemu_TRUE@am__append_1942 = play.module +@COND_i386_qemu_TRUE@am__append_1943 = play.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1944 = +@COND_i386_qemu_TRUE@am__append_1945 = $(nodist_play_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1946 = $(nodist_play_module_SOURCES) \ +@COND_i386_qemu_TRUE@ play.marker +@COND_i386_qemu_TRUE@am__append_1947 = play.mod +@COND_i386_qemu_TRUE@am__append_1948 = play.marker +@COND_i386_coreboot_TRUE@am__append_1949 = play.module +@COND_i386_coreboot_TRUE@am__append_1950 = play.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_1951 = +@COND_i386_coreboot_TRUE@am__append_1952 = $(nodist_play_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_1953 = \ +@COND_i386_coreboot_TRUE@ $(nodist_play_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ play.marker +@COND_i386_coreboot_TRUE@am__append_1954 = play.mod +@COND_i386_coreboot_TRUE@am__append_1955 = play.marker +@COND_i386_multiboot_TRUE@am__append_1956 = play.module +@COND_i386_multiboot_TRUE@am__append_1957 = play.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_1958 = +@COND_i386_multiboot_TRUE@am__append_1959 = $(nodist_play_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_1960 = \ +@COND_i386_multiboot_TRUE@ $(nodist_play_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ play.marker +@COND_i386_multiboot_TRUE@am__append_1961 = play.mod +@COND_i386_multiboot_TRUE@am__append_1962 = play.marker +@COND_i386_ieee1275_TRUE@am__append_1963 = play.module +@COND_i386_ieee1275_TRUE@am__append_1964 = play.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_1965 = +@COND_i386_ieee1275_TRUE@am__append_1966 = $(nodist_play_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_1967 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_play_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ play.marker +@COND_i386_ieee1275_TRUE@am__append_1968 = play.mod +@COND_i386_ieee1275_TRUE@am__append_1969 = play.marker +@COND_x86_64_efi_TRUE@am__append_1970 = play.module +@COND_x86_64_efi_TRUE@am__append_1971 = play.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_1972 = +@COND_x86_64_efi_TRUE@am__append_1973 = $(nodist_play_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_1974 = $(nodist_play_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ play.marker +@COND_x86_64_efi_TRUE@am__append_1975 = play.mod +@COND_x86_64_efi_TRUE@am__append_1976 = play.marker +@COND_i386_pc_TRUE@am__append_1977 = spkmodem.module +@COND_i386_pc_TRUE@am__append_1978 = spkmodem.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@spkmodem_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_1979 = +@COND_i386_pc_TRUE@am__append_1980 = $(nodist_spkmodem_module_SOURCES) +@COND_i386_pc_TRUE@am__append_1981 = \ +@COND_i386_pc_TRUE@ $(nodist_spkmodem_module_SOURCES) \ +@COND_i386_pc_TRUE@ spkmodem.marker +@COND_i386_pc_TRUE@am__append_1982 = spkmodem.mod +@COND_i386_pc_TRUE@am__append_1983 = spkmodem.marker +@COND_i386_efi_TRUE@am__append_1984 = spkmodem.module +@COND_i386_efi_TRUE@am__append_1985 = spkmodem.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_1986 = +@COND_i386_efi_TRUE@am__append_1987 = $(nodist_spkmodem_module_SOURCES) +@COND_i386_efi_TRUE@am__append_1988 = \ +@COND_i386_efi_TRUE@ $(nodist_spkmodem_module_SOURCES) \ +@COND_i386_efi_TRUE@ spkmodem.marker +@COND_i386_efi_TRUE@am__append_1989 = spkmodem.mod +@COND_i386_efi_TRUE@am__append_1990 = spkmodem.marker +@COND_i386_qemu_TRUE@am__append_1991 = spkmodem.module +@COND_i386_qemu_TRUE@am__append_1992 = spkmodem.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_1993 = +@COND_i386_qemu_TRUE@am__append_1994 = $(nodist_spkmodem_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_1995 = \ +@COND_i386_qemu_TRUE@ $(nodist_spkmodem_module_SOURCES) \ +@COND_i386_qemu_TRUE@ spkmodem.marker +@COND_i386_qemu_TRUE@am__append_1996 = spkmodem.mod +@COND_i386_qemu_TRUE@am__append_1997 = spkmodem.marker +@COND_i386_coreboot_TRUE@am__append_1998 = spkmodem.module +@COND_i386_coreboot_TRUE@am__append_1999 = spkmodem.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2000 = +@COND_i386_coreboot_TRUE@am__append_2001 = $(nodist_spkmodem_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2002 = \ +@COND_i386_coreboot_TRUE@ $(nodist_spkmodem_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ spkmodem.marker +@COND_i386_coreboot_TRUE@am__append_2003 = spkmodem.mod +@COND_i386_coreboot_TRUE@am__append_2004 = spkmodem.marker +@COND_i386_multiboot_TRUE@am__append_2005 = spkmodem.module +@COND_i386_multiboot_TRUE@am__append_2006 = spkmodem.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2007 = +@COND_i386_multiboot_TRUE@am__append_2008 = $(nodist_spkmodem_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2009 = \ +@COND_i386_multiboot_TRUE@ $(nodist_spkmodem_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ spkmodem.marker +@COND_i386_multiboot_TRUE@am__append_2010 = spkmodem.mod +@COND_i386_multiboot_TRUE@am__append_2011 = spkmodem.marker +@COND_i386_ieee1275_TRUE@am__append_2012 = spkmodem.module +@COND_i386_ieee1275_TRUE@am__append_2013 = spkmodem.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2014 = +@COND_i386_ieee1275_TRUE@am__append_2015 = $(nodist_spkmodem_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2016 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_spkmodem_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ spkmodem.marker +@COND_i386_ieee1275_TRUE@am__append_2017 = spkmodem.mod +@COND_i386_ieee1275_TRUE@am__append_2018 = spkmodem.marker +@COND_x86_64_efi_TRUE@am__append_2019 = spkmodem.module +@COND_x86_64_efi_TRUE@am__append_2020 = spkmodem.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2021 = +@COND_x86_64_efi_TRUE@am__append_2022 = $(nodist_spkmodem_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2023 = \ +@COND_x86_64_efi_TRUE@ $(nodist_spkmodem_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ spkmodem.marker +@COND_x86_64_efi_TRUE@am__append_2024 = spkmodem.mod +@COND_x86_64_efi_TRUE@am__append_2025 = spkmodem.marker +@COND_i386_pc_TRUE@am__append_2026 = morse.module +@COND_i386_pc_TRUE@am__append_2027 = morse.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@morse_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2028 = +@COND_i386_pc_TRUE@am__append_2029 = $(nodist_morse_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2030 = $(nodist_morse_module_SOURCES) \ +@COND_i386_pc_TRUE@ morse.marker +@COND_i386_pc_TRUE@am__append_2031 = morse.mod +@COND_i386_pc_TRUE@am__append_2032 = morse.marker +@COND_i386_efi_TRUE@am__append_2033 = morse.module +@COND_i386_efi_TRUE@am__append_2034 = morse.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2035 = +@COND_i386_efi_TRUE@am__append_2036 = $(nodist_morse_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2037 = $(nodist_morse_module_SOURCES) \ +@COND_i386_efi_TRUE@ morse.marker +@COND_i386_efi_TRUE@am__append_2038 = morse.mod +@COND_i386_efi_TRUE@am__append_2039 = morse.marker +@COND_i386_qemu_TRUE@am__append_2040 = morse.module +@COND_i386_qemu_TRUE@am__append_2041 = morse.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2042 = +@COND_i386_qemu_TRUE@am__append_2043 = $(nodist_morse_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2044 = $(nodist_morse_module_SOURCES) \ +@COND_i386_qemu_TRUE@ morse.marker +@COND_i386_qemu_TRUE@am__append_2045 = morse.mod +@COND_i386_qemu_TRUE@am__append_2046 = morse.marker +@COND_i386_coreboot_TRUE@am__append_2047 = morse.module +@COND_i386_coreboot_TRUE@am__append_2048 = morse.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2049 = +@COND_i386_coreboot_TRUE@am__append_2050 = $(nodist_morse_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2051 = \ +@COND_i386_coreboot_TRUE@ $(nodist_morse_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ morse.marker +@COND_i386_coreboot_TRUE@am__append_2052 = morse.mod +@COND_i386_coreboot_TRUE@am__append_2053 = morse.marker +@COND_i386_multiboot_TRUE@am__append_2054 = morse.module +@COND_i386_multiboot_TRUE@am__append_2055 = morse.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2056 = +@COND_i386_multiboot_TRUE@am__append_2057 = $(nodist_morse_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2058 = \ +@COND_i386_multiboot_TRUE@ $(nodist_morse_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ morse.marker +@COND_i386_multiboot_TRUE@am__append_2059 = morse.mod +@COND_i386_multiboot_TRUE@am__append_2060 = morse.marker +@COND_i386_ieee1275_TRUE@am__append_2061 = morse.module +@COND_i386_ieee1275_TRUE@am__append_2062 = morse.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2063 = +@COND_i386_ieee1275_TRUE@am__append_2064 = $(nodist_morse_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2065 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_morse_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ morse.marker +@COND_i386_ieee1275_TRUE@am__append_2066 = morse.mod +@COND_i386_ieee1275_TRUE@am__append_2067 = morse.marker +@COND_x86_64_efi_TRUE@am__append_2068 = morse.module +@COND_x86_64_efi_TRUE@am__append_2069 = morse.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2070 = +@COND_x86_64_efi_TRUE@am__append_2071 = $(nodist_morse_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2072 = \ +@COND_x86_64_efi_TRUE@ $(nodist_morse_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ morse.marker +@COND_x86_64_efi_TRUE@am__append_2073 = morse.mod +@COND_x86_64_efi_TRUE@am__append_2074 = morse.marker +@COND_i386_pc_TRUE@am__append_2075 = setpci.module +@COND_i386_pc_TRUE@am__append_2076 = setpci.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@setpci_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2077 = +@COND_i386_pc_TRUE@am__append_2078 = $(nodist_setpci_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2079 = $(nodist_setpci_module_SOURCES) \ +@COND_i386_pc_TRUE@ setpci.marker +@COND_i386_pc_TRUE@am__append_2080 = setpci.mod +@COND_i386_pc_TRUE@am__append_2081 = setpci.marker +@COND_i386_efi_TRUE@am__append_2082 = setpci.module +@COND_i386_efi_TRUE@am__append_2083 = setpci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2084 = +@COND_i386_efi_TRUE@am__append_2085 = $(nodist_setpci_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2086 = $(nodist_setpci_module_SOURCES) \ +@COND_i386_efi_TRUE@ setpci.marker +@COND_i386_efi_TRUE@am__append_2087 = setpci.mod +@COND_i386_efi_TRUE@am__append_2088 = setpci.marker +@COND_i386_qemu_TRUE@am__append_2089 = setpci.module +@COND_i386_qemu_TRUE@am__append_2090 = setpci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2091 = +@COND_i386_qemu_TRUE@am__append_2092 = $(nodist_setpci_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2093 = \ +@COND_i386_qemu_TRUE@ $(nodist_setpci_module_SOURCES) \ +@COND_i386_qemu_TRUE@ setpci.marker +@COND_i386_qemu_TRUE@am__append_2094 = setpci.mod +@COND_i386_qemu_TRUE@am__append_2095 = setpci.marker +@COND_i386_coreboot_TRUE@am__append_2096 = setpci.module +@COND_i386_coreboot_TRUE@am__append_2097 = setpci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2098 = +@COND_i386_coreboot_TRUE@am__append_2099 = $(nodist_setpci_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2100 = \ +@COND_i386_coreboot_TRUE@ $(nodist_setpci_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ setpci.marker +@COND_i386_coreboot_TRUE@am__append_2101 = setpci.mod +@COND_i386_coreboot_TRUE@am__append_2102 = setpci.marker +@COND_i386_multiboot_TRUE@am__append_2103 = setpci.module +@COND_i386_multiboot_TRUE@am__append_2104 = setpci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2105 = +@COND_i386_multiboot_TRUE@am__append_2106 = $(nodist_setpci_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2107 = \ +@COND_i386_multiboot_TRUE@ $(nodist_setpci_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ setpci.marker +@COND_i386_multiboot_TRUE@am__append_2108 = setpci.mod +@COND_i386_multiboot_TRUE@am__append_2109 = setpci.marker +@COND_i386_ieee1275_TRUE@am__append_2110 = setpci.module +@COND_i386_ieee1275_TRUE@am__append_2111 = setpci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2112 = +@COND_i386_ieee1275_TRUE@am__append_2113 = $(nodist_setpci_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2114 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_setpci_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ setpci.marker +@COND_i386_ieee1275_TRUE@am__append_2115 = setpci.mod +@COND_i386_ieee1275_TRUE@am__append_2116 = setpci.marker +@COND_x86_64_efi_TRUE@am__append_2117 = setpci.module +@COND_x86_64_efi_TRUE@am__append_2118 = setpci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2119 = +@COND_x86_64_efi_TRUE@am__append_2120 = $(nodist_setpci_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2121 = \ +@COND_x86_64_efi_TRUE@ $(nodist_setpci_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ setpci.marker +@COND_x86_64_efi_TRUE@am__append_2122 = setpci.mod +@COND_x86_64_efi_TRUE@am__append_2123 = setpci.marker +@COND_mips_loongson_TRUE@am__append_2124 = setpci.module +@COND_mips_loongson_TRUE@am__append_2125 = setpci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2126 = +@COND_mips_loongson_TRUE@am__append_2127 = $(nodist_setpci_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2128 = \ +@COND_mips_loongson_TRUE@ $(nodist_setpci_module_SOURCES) \ +@COND_mips_loongson_TRUE@ setpci.marker +@COND_mips_loongson_TRUE@am__append_2129 = setpci.mod +@COND_mips_loongson_TRUE@am__append_2130 = setpci.marker +@COND_i386_pc_TRUE@am__append_2131 = pcidump.module +@COND_i386_pc_TRUE@am__append_2132 = pcidump.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@pcidump_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2133 = +@COND_i386_pc_TRUE@am__append_2134 = $(nodist_pcidump_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2135 = $(nodist_pcidump_module_SOURCES) \ +@COND_i386_pc_TRUE@ pcidump.marker +@COND_i386_pc_TRUE@am__append_2136 = pcidump.mod +@COND_i386_pc_TRUE@am__append_2137 = pcidump.marker +@COND_i386_efi_TRUE@am__append_2138 = pcidump.module +@COND_i386_efi_TRUE@am__append_2139 = pcidump.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2140 = +@COND_i386_efi_TRUE@am__append_2141 = $(nodist_pcidump_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2142 = \ +@COND_i386_efi_TRUE@ $(nodist_pcidump_module_SOURCES) \ +@COND_i386_efi_TRUE@ pcidump.marker +@COND_i386_efi_TRUE@am__append_2143 = pcidump.mod +@COND_i386_efi_TRUE@am__append_2144 = pcidump.marker +@COND_i386_qemu_TRUE@am__append_2145 = pcidump.module +@COND_i386_qemu_TRUE@am__append_2146 = pcidump.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2147 = +@COND_i386_qemu_TRUE@am__append_2148 = $(nodist_pcidump_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2149 = \ +@COND_i386_qemu_TRUE@ $(nodist_pcidump_module_SOURCES) \ +@COND_i386_qemu_TRUE@ pcidump.marker +@COND_i386_qemu_TRUE@am__append_2150 = pcidump.mod +@COND_i386_qemu_TRUE@am__append_2151 = pcidump.marker +@COND_i386_coreboot_TRUE@am__append_2152 = pcidump.module +@COND_i386_coreboot_TRUE@am__append_2153 = pcidump.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2154 = +@COND_i386_coreboot_TRUE@am__append_2155 = $(nodist_pcidump_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2156 = \ +@COND_i386_coreboot_TRUE@ $(nodist_pcidump_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ pcidump.marker +@COND_i386_coreboot_TRUE@am__append_2157 = pcidump.mod +@COND_i386_coreboot_TRUE@am__append_2158 = pcidump.marker +@COND_i386_multiboot_TRUE@am__append_2159 = pcidump.module +@COND_i386_multiboot_TRUE@am__append_2160 = pcidump.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2161 = +@COND_i386_multiboot_TRUE@am__append_2162 = $(nodist_pcidump_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2163 = \ +@COND_i386_multiboot_TRUE@ $(nodist_pcidump_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ pcidump.marker +@COND_i386_multiboot_TRUE@am__append_2164 = pcidump.mod +@COND_i386_multiboot_TRUE@am__append_2165 = pcidump.marker +@COND_i386_ieee1275_TRUE@am__append_2166 = pcidump.module +@COND_i386_ieee1275_TRUE@am__append_2167 = pcidump.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2168 = +@COND_i386_ieee1275_TRUE@am__append_2169 = $(nodist_pcidump_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2170 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_pcidump_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ pcidump.marker +@COND_i386_ieee1275_TRUE@am__append_2171 = pcidump.mod +@COND_i386_ieee1275_TRUE@am__append_2172 = pcidump.marker +@COND_x86_64_efi_TRUE@am__append_2173 = pcidump.module +@COND_x86_64_efi_TRUE@am__append_2174 = pcidump.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2175 = +@COND_x86_64_efi_TRUE@am__append_2176 = $(nodist_pcidump_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2177 = \ +@COND_x86_64_efi_TRUE@ $(nodist_pcidump_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ pcidump.marker +@COND_x86_64_efi_TRUE@am__append_2178 = pcidump.mod +@COND_x86_64_efi_TRUE@am__append_2179 = pcidump.marker +@COND_mips_loongson_TRUE@am__append_2180 = pcidump.module +@COND_mips_loongson_TRUE@am__append_2181 = pcidump.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2182 = +@COND_mips_loongson_TRUE@am__append_2183 = $(nodist_pcidump_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2184 = \ +@COND_mips_loongson_TRUE@ $(nodist_pcidump_module_SOURCES) \ +@COND_mips_loongson_TRUE@ pcidump.marker +@COND_mips_loongson_TRUE@am__append_2185 = pcidump.mod +@COND_mips_loongson_TRUE@am__append_2186 = pcidump.marker +@COND_i386_ieee1275_TRUE@am__append_2187 = suspend.module +@COND_i386_ieee1275_TRUE@am__append_2188 = suspend.module$(EXEEXT) +@COND_i386_ieee1275_FALSE@@COND_powerpc_ieee1275_FALSE@suspend_module_DEPENDENCIES = +@COND_i386_ieee1275_TRUE@am__append_2189 = +@COND_i386_ieee1275_TRUE@am__append_2190 = $(nodist_suspend_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2191 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_suspend_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ suspend.marker +@COND_i386_ieee1275_TRUE@am__append_2192 = suspend.mod +@COND_i386_ieee1275_TRUE@am__append_2193 = suspend.marker +@COND_powerpc_ieee1275_TRUE@am__append_2194 = suspend.module \ +@COND_powerpc_ieee1275_TRUE@ escc.module +@COND_powerpc_ieee1275_TRUE@am__append_2195 = suspend.module$(EXEEXT) \ +@COND_powerpc_ieee1275_TRUE@ escc.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_2196 = +@COND_powerpc_ieee1275_TRUE@am__append_2197 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_suspend_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_escc_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_2198 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_suspend_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ suspend.marker \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_escc_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ escc.marker +@COND_powerpc_ieee1275_TRUE@am__append_2199 = suspend.mod escc.mod +@COND_powerpc_ieee1275_TRUE@am__append_2200 = suspend.marker \ +@COND_powerpc_ieee1275_TRUE@ escc.marker +@COND_powerpc_ieee1275_FALSE@escc_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2201 = usbtest.module +@COND_i386_pc_TRUE@am__append_2202 = usbtest.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbtest_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2203 = +@COND_i386_pc_TRUE@am__append_2204 = $(nodist_usbtest_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2205 = $(nodist_usbtest_module_SOURCES) \ +@COND_i386_pc_TRUE@ usbtest.marker +@COND_i386_pc_TRUE@am__append_2206 = usbtest.mod +@COND_i386_pc_TRUE@am__append_2207 = usbtest.marker +@COND_i386_efi_TRUE@am__append_2208 = usbtest.module +@COND_i386_efi_TRUE@am__append_2209 = usbtest.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2210 = +@COND_i386_efi_TRUE@am__append_2211 = $(nodist_usbtest_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2212 = \ +@COND_i386_efi_TRUE@ $(nodist_usbtest_module_SOURCES) \ +@COND_i386_efi_TRUE@ usbtest.marker +@COND_i386_efi_TRUE@am__append_2213 = usbtest.mod +@COND_i386_efi_TRUE@am__append_2214 = usbtest.marker +@COND_i386_qemu_TRUE@am__append_2215 = usbtest.module +@COND_i386_qemu_TRUE@am__append_2216 = usbtest.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2217 = +@COND_i386_qemu_TRUE@am__append_2218 = $(nodist_usbtest_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2219 = \ +@COND_i386_qemu_TRUE@ $(nodist_usbtest_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usbtest.marker +@COND_i386_qemu_TRUE@am__append_2220 = usbtest.mod +@COND_i386_qemu_TRUE@am__append_2221 = usbtest.marker +@COND_i386_coreboot_TRUE@am__append_2222 = usbtest.module +@COND_i386_coreboot_TRUE@am__append_2223 = usbtest.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2224 = +@COND_i386_coreboot_TRUE@am__append_2225 = $(nodist_usbtest_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2226 = \ +@COND_i386_coreboot_TRUE@ $(nodist_usbtest_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usbtest.marker +@COND_i386_coreboot_TRUE@am__append_2227 = usbtest.mod +@COND_i386_coreboot_TRUE@am__append_2228 = usbtest.marker +@COND_i386_multiboot_TRUE@am__append_2229 = usbtest.module +@COND_i386_multiboot_TRUE@am__append_2230 = usbtest.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2231 = +@COND_i386_multiboot_TRUE@am__append_2232 = $(nodist_usbtest_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2233 = \ +@COND_i386_multiboot_TRUE@ $(nodist_usbtest_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usbtest.marker +@COND_i386_multiboot_TRUE@am__append_2234 = usbtest.mod +@COND_i386_multiboot_TRUE@am__append_2235 = usbtest.marker +@COND_i386_ieee1275_TRUE@am__append_2236 = usbtest.module +@COND_i386_ieee1275_TRUE@am__append_2237 = usbtest.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2238 = +@COND_i386_ieee1275_TRUE@am__append_2239 = $(nodist_usbtest_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2240 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_usbtest_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usbtest.marker +@COND_i386_ieee1275_TRUE@am__append_2241 = usbtest.mod +@COND_i386_ieee1275_TRUE@am__append_2242 = usbtest.marker +@COND_x86_64_efi_TRUE@am__append_2243 = usbtest.module +@COND_x86_64_efi_TRUE@am__append_2244 = usbtest.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2245 = +@COND_x86_64_efi_TRUE@am__append_2246 = $(nodist_usbtest_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2247 = \ +@COND_x86_64_efi_TRUE@ $(nodist_usbtest_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usbtest.marker +@COND_x86_64_efi_TRUE@am__append_2248 = usbtest.mod +@COND_x86_64_efi_TRUE@am__append_2249 = usbtest.marker +@COND_mips_loongson_TRUE@am__append_2250 = usbtest.module +@COND_mips_loongson_TRUE@am__append_2251 = usbtest.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2252 = +@COND_mips_loongson_TRUE@am__append_2253 = $(nodist_usbtest_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2254 = \ +@COND_mips_loongson_TRUE@ $(nodist_usbtest_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usbtest.marker +@COND_mips_loongson_TRUE@am__append_2255 = usbtest.mod +@COND_mips_loongson_TRUE@am__append_2256 = usbtest.marker +@COND_i386_pc_TRUE@am__append_2257 = ata.module +@COND_i386_pc_TRUE@am__append_2258 = ata.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@ata_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2259 = +@COND_i386_pc_TRUE@am__append_2260 = $(nodist_ata_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2261 = $(nodist_ata_module_SOURCES) \ +@COND_i386_pc_TRUE@ ata.marker +@COND_i386_pc_TRUE@am__append_2262 = ata.mod +@COND_i386_pc_TRUE@am__append_2263 = ata.marker +@COND_i386_efi_TRUE@am__append_2264 = ata.module +@COND_i386_efi_TRUE@am__append_2265 = ata.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2266 = +@COND_i386_efi_TRUE@am__append_2267 = $(nodist_ata_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2268 = $(nodist_ata_module_SOURCES) \ +@COND_i386_efi_TRUE@ ata.marker +@COND_i386_efi_TRUE@am__append_2269 = ata.mod +@COND_i386_efi_TRUE@am__append_2270 = ata.marker +@COND_i386_qemu_TRUE@am__append_2271 = ata.module +@COND_i386_qemu_TRUE@am__append_2272 = ata.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2273 = +@COND_i386_qemu_TRUE@am__append_2274 = $(nodist_ata_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2275 = $(nodist_ata_module_SOURCES) \ +@COND_i386_qemu_TRUE@ ata.marker +@COND_i386_qemu_TRUE@am__append_2276 = ata.mod +@COND_i386_qemu_TRUE@am__append_2277 = ata.marker +@COND_i386_coreboot_TRUE@am__append_2278 = ata.module +@COND_i386_coreboot_TRUE@am__append_2279 = ata.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2280 = +@COND_i386_coreboot_TRUE@am__append_2281 = $(nodist_ata_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2282 = \ +@COND_i386_coreboot_TRUE@ $(nodist_ata_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ ata.marker +@COND_i386_coreboot_TRUE@am__append_2283 = ata.mod +@COND_i386_coreboot_TRUE@am__append_2284 = ata.marker +@COND_i386_multiboot_TRUE@am__append_2285 = ata.module +@COND_i386_multiboot_TRUE@am__append_2286 = ata.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2287 = +@COND_i386_multiboot_TRUE@am__append_2288 = $(nodist_ata_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2289 = \ +@COND_i386_multiboot_TRUE@ $(nodist_ata_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ ata.marker +@COND_i386_multiboot_TRUE@am__append_2290 = ata.mod +@COND_i386_multiboot_TRUE@am__append_2291 = ata.marker +@COND_i386_ieee1275_TRUE@am__append_2292 = ata.module +@COND_i386_ieee1275_TRUE@am__append_2293 = ata.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2294 = +@COND_i386_ieee1275_TRUE@am__append_2295 = $(nodist_ata_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2296 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_ata_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ ata.marker +@COND_i386_ieee1275_TRUE@am__append_2297 = ata.mod +@COND_i386_ieee1275_TRUE@am__append_2298 = ata.marker +@COND_x86_64_efi_TRUE@am__append_2299 = ata.module +@COND_x86_64_efi_TRUE@am__append_2300 = ata.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2301 = +@COND_x86_64_efi_TRUE@am__append_2302 = $(nodist_ata_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2303 = $(nodist_ata_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ ata.marker +@COND_x86_64_efi_TRUE@am__append_2304 = ata.mod +@COND_x86_64_efi_TRUE@am__append_2305 = ata.marker +@COND_mips_loongson_TRUE@am__append_2306 = ata.module +@COND_mips_loongson_TRUE@am__append_2307 = ata.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2308 = +@COND_mips_loongson_TRUE@am__append_2309 = $(nodist_ata_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2310 = \ +@COND_mips_loongson_TRUE@ $(nodist_ata_module_SOURCES) \ +@COND_mips_loongson_TRUE@ ata.marker +@COND_mips_loongson_TRUE@am__append_2311 = ata.mod +@COND_mips_loongson_TRUE@am__append_2312 = ata.marker +@COND_mips_qemu_mips_TRUE@am__append_2313 = ata.module +@COND_mips_qemu_mips_TRUE@am__append_2314 = ata.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_2315 = +@COND_mips_qemu_mips_TRUE@am__append_2316 = $(nodist_ata_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_2317 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_ata_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ ata.marker +@COND_mips_qemu_mips_TRUE@am__append_2318 = ata.mod +@COND_mips_qemu_mips_TRUE@am__append_2319 = ata.marker +@COND_i386_pc_TRUE@am__append_2320 = ahci.module +@COND_i386_pc_TRUE@am__append_2321 = ahci.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@ahci_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2322 = +@COND_i386_pc_TRUE@am__append_2323 = $(nodist_ahci_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2324 = $(nodist_ahci_module_SOURCES) \ +@COND_i386_pc_TRUE@ ahci.marker +@COND_i386_pc_TRUE@am__append_2325 = ahci.mod +@COND_i386_pc_TRUE@am__append_2326 = ahci.marker +@COND_i386_efi_TRUE@am__append_2327 = ahci.module +@COND_i386_efi_TRUE@am__append_2328 = ahci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2329 = +@COND_i386_efi_TRUE@am__append_2330 = $(nodist_ahci_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2331 = $(nodist_ahci_module_SOURCES) \ +@COND_i386_efi_TRUE@ ahci.marker +@COND_i386_efi_TRUE@am__append_2332 = ahci.mod +@COND_i386_efi_TRUE@am__append_2333 = ahci.marker +@COND_i386_qemu_TRUE@am__append_2334 = ahci.module +@COND_i386_qemu_TRUE@am__append_2335 = ahci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2336 = +@COND_i386_qemu_TRUE@am__append_2337 = $(nodist_ahci_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2338 = $(nodist_ahci_module_SOURCES) \ +@COND_i386_qemu_TRUE@ ahci.marker +@COND_i386_qemu_TRUE@am__append_2339 = ahci.mod +@COND_i386_qemu_TRUE@am__append_2340 = ahci.marker +@COND_i386_coreboot_TRUE@am__append_2341 = ahci.module +@COND_i386_coreboot_TRUE@am__append_2342 = ahci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2343 = +@COND_i386_coreboot_TRUE@am__append_2344 = $(nodist_ahci_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2345 = \ +@COND_i386_coreboot_TRUE@ $(nodist_ahci_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ ahci.marker +@COND_i386_coreboot_TRUE@am__append_2346 = ahci.mod +@COND_i386_coreboot_TRUE@am__append_2347 = ahci.marker +@COND_i386_multiboot_TRUE@am__append_2348 = ahci.module +@COND_i386_multiboot_TRUE@am__append_2349 = ahci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2350 = +@COND_i386_multiboot_TRUE@am__append_2351 = $(nodist_ahci_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2352 = \ +@COND_i386_multiboot_TRUE@ $(nodist_ahci_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ ahci.marker +@COND_i386_multiboot_TRUE@am__append_2353 = ahci.mod +@COND_i386_multiboot_TRUE@am__append_2354 = ahci.marker +@COND_i386_ieee1275_TRUE@am__append_2355 = ahci.module +@COND_i386_ieee1275_TRUE@am__append_2356 = ahci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2357 = +@COND_i386_ieee1275_TRUE@am__append_2358 = $(nodist_ahci_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2359 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_ahci_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ ahci.marker +@COND_i386_ieee1275_TRUE@am__append_2360 = ahci.mod +@COND_i386_ieee1275_TRUE@am__append_2361 = ahci.marker +@COND_x86_64_efi_TRUE@am__append_2362 = ahci.module +@COND_x86_64_efi_TRUE@am__append_2363 = ahci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2364 = +@COND_x86_64_efi_TRUE@am__append_2365 = $(nodist_ahci_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2366 = $(nodist_ahci_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ ahci.marker +@COND_x86_64_efi_TRUE@am__append_2367 = ahci.mod +@COND_x86_64_efi_TRUE@am__append_2368 = ahci.marker +@COND_mips_loongson_TRUE@am__append_2369 = ahci.module +@COND_mips_loongson_TRUE@am__append_2370 = ahci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2371 = +@COND_mips_loongson_TRUE@am__append_2372 = $(nodist_ahci_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2373 = \ +@COND_mips_loongson_TRUE@ $(nodist_ahci_module_SOURCES) \ +@COND_mips_loongson_TRUE@ ahci.marker +@COND_mips_loongson_TRUE@am__append_2374 = ahci.mod +@COND_mips_loongson_TRUE@am__append_2375 = ahci.marker +@COND_i386_pc_TRUE@am__append_2376 = pata.module +@COND_i386_pc_TRUE@am__append_2377 = pata.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@pata_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2378 = +@COND_i386_pc_TRUE@am__append_2379 = $(nodist_pata_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2380 = $(nodist_pata_module_SOURCES) \ +@COND_i386_pc_TRUE@ pata.marker +@COND_i386_pc_TRUE@am__append_2381 = pata.mod +@COND_i386_pc_TRUE@am__append_2382 = pata.marker +@COND_i386_efi_TRUE@am__append_2383 = pata.module +@COND_i386_efi_TRUE@am__append_2384 = pata.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2385 = +@COND_i386_efi_TRUE@am__append_2386 = $(nodist_pata_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2387 = $(nodist_pata_module_SOURCES) \ +@COND_i386_efi_TRUE@ pata.marker +@COND_i386_efi_TRUE@am__append_2388 = pata.mod +@COND_i386_efi_TRUE@am__append_2389 = pata.marker +@COND_i386_qemu_TRUE@am__append_2390 = pata.module +@COND_i386_qemu_TRUE@am__append_2391 = pata.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2392 = +@COND_i386_qemu_TRUE@am__append_2393 = $(nodist_pata_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2394 = $(nodist_pata_module_SOURCES) \ +@COND_i386_qemu_TRUE@ pata.marker +@COND_i386_qemu_TRUE@am__append_2395 = pata.mod +@COND_i386_qemu_TRUE@am__append_2396 = pata.marker +@COND_i386_coreboot_TRUE@am__append_2397 = pata.module +@COND_i386_coreboot_TRUE@am__append_2398 = pata.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2399 = +@COND_i386_coreboot_TRUE@am__append_2400 = $(nodist_pata_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2401 = \ +@COND_i386_coreboot_TRUE@ $(nodist_pata_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ pata.marker +@COND_i386_coreboot_TRUE@am__append_2402 = pata.mod +@COND_i386_coreboot_TRUE@am__append_2403 = pata.marker +@COND_i386_multiboot_TRUE@am__append_2404 = pata.module +@COND_i386_multiboot_TRUE@am__append_2405 = pata.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2406 = +@COND_i386_multiboot_TRUE@am__append_2407 = $(nodist_pata_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2408 = \ +@COND_i386_multiboot_TRUE@ $(nodist_pata_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ pata.marker +@COND_i386_multiboot_TRUE@am__append_2409 = pata.mod +@COND_i386_multiboot_TRUE@am__append_2410 = pata.marker +@COND_i386_ieee1275_TRUE@am__append_2411 = pata.module +@COND_i386_ieee1275_TRUE@am__append_2412 = pata.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2413 = +@COND_i386_ieee1275_TRUE@am__append_2414 = $(nodist_pata_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2415 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_pata_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ pata.marker +@COND_i386_ieee1275_TRUE@am__append_2416 = pata.mod +@COND_i386_ieee1275_TRUE@am__append_2417 = pata.marker +@COND_x86_64_efi_TRUE@am__append_2418 = pata.module +@COND_x86_64_efi_TRUE@am__append_2419 = pata.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2420 = +@COND_x86_64_efi_TRUE@am__append_2421 = $(nodist_pata_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2422 = $(nodist_pata_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ pata.marker +@COND_x86_64_efi_TRUE@am__append_2423 = pata.mod +@COND_x86_64_efi_TRUE@am__append_2424 = pata.marker +@COND_mips_loongson_TRUE@am__append_2425 = pata.module +@COND_mips_loongson_TRUE@am__append_2426 = pata.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2427 = +@COND_mips_loongson_TRUE@am__append_2428 = $(nodist_pata_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2429 = \ +@COND_mips_loongson_TRUE@ $(nodist_pata_module_SOURCES) \ +@COND_mips_loongson_TRUE@ pata.marker +@COND_mips_loongson_TRUE@am__append_2430 = pata.mod +@COND_mips_loongson_TRUE@am__append_2431 = pata.marker +@COND_mips_qemu_mips_TRUE@am__append_2432 = pata.module +@COND_mips_qemu_mips_TRUE@am__append_2433 = pata.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_2434 = +@COND_mips_qemu_mips_TRUE@am__append_2435 = $(nodist_pata_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_2436 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_pata_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ pata.marker +@COND_mips_qemu_mips_TRUE@am__append_2437 = pata.mod +@COND_mips_qemu_mips_TRUE@am__append_2438 = pata.marker +@COND_i386_pc_TRUE@am__append_2439 = biosdisk.module usbms.module +@COND_i386_pc_TRUE@am__append_2440 = biosdisk.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ usbms.module$(EXEEXT) +@COND_i386_pc_FALSE@biosdisk_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2441 = +@COND_i386_pc_TRUE@am__append_2442 = \ +@COND_i386_pc_TRUE@ $(nodist_biosdisk_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_usbms_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2443 = \ +@COND_i386_pc_TRUE@ $(nodist_biosdisk_module_SOURCES) \ +@COND_i386_pc_TRUE@ biosdisk.marker \ +@COND_i386_pc_TRUE@ $(nodist_usbms_module_SOURCES) usbms.marker +@COND_i386_pc_TRUE@am__append_2444 = biosdisk.mod usbms.mod +@COND_i386_pc_TRUE@am__append_2445 = biosdisk.marker usbms.marker +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usbms_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_2446 = usbms.module +@COND_i386_efi_TRUE@am__append_2447 = usbms.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2448 = +@COND_i386_efi_TRUE@am__append_2449 = $(nodist_usbms_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2450 = $(nodist_usbms_module_SOURCES) \ +@COND_i386_efi_TRUE@ usbms.marker +@COND_i386_efi_TRUE@am__append_2451 = usbms.mod +@COND_i386_efi_TRUE@am__append_2452 = usbms.marker +@COND_i386_qemu_TRUE@am__append_2453 = usbms.module +@COND_i386_qemu_TRUE@am__append_2454 = usbms.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2455 = +@COND_i386_qemu_TRUE@am__append_2456 = $(nodist_usbms_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2457 = $(nodist_usbms_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usbms.marker +@COND_i386_qemu_TRUE@am__append_2458 = usbms.mod +@COND_i386_qemu_TRUE@am__append_2459 = usbms.marker +@COND_i386_coreboot_TRUE@am__append_2460 = usbms.module +@COND_i386_coreboot_TRUE@am__append_2461 = usbms.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2462 = +@COND_i386_coreboot_TRUE@am__append_2463 = $(nodist_usbms_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2464 = \ +@COND_i386_coreboot_TRUE@ $(nodist_usbms_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usbms.marker +@COND_i386_coreboot_TRUE@am__append_2465 = usbms.mod +@COND_i386_coreboot_TRUE@am__append_2466 = usbms.marker +@COND_i386_multiboot_TRUE@am__append_2467 = usbms.module +@COND_i386_multiboot_TRUE@am__append_2468 = usbms.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2469 = +@COND_i386_multiboot_TRUE@am__append_2470 = $(nodist_usbms_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2471 = \ +@COND_i386_multiboot_TRUE@ $(nodist_usbms_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usbms.marker +@COND_i386_multiboot_TRUE@am__append_2472 = usbms.mod +@COND_i386_multiboot_TRUE@am__append_2473 = usbms.marker +@COND_i386_ieee1275_TRUE@am__append_2474 = usbms.module +@COND_i386_ieee1275_TRUE@am__append_2475 = usbms.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2476 = +@COND_i386_ieee1275_TRUE@am__append_2477 = $(nodist_usbms_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2478 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_usbms_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usbms.marker +@COND_i386_ieee1275_TRUE@am__append_2479 = usbms.mod +@COND_i386_ieee1275_TRUE@am__append_2480 = usbms.marker +@COND_x86_64_efi_TRUE@am__append_2481 = usbms.module +@COND_x86_64_efi_TRUE@am__append_2482 = usbms.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2483 = +@COND_x86_64_efi_TRUE@am__append_2484 = $(nodist_usbms_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2485 = \ +@COND_x86_64_efi_TRUE@ $(nodist_usbms_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usbms.marker +@COND_x86_64_efi_TRUE@am__append_2486 = usbms.mod +@COND_x86_64_efi_TRUE@am__append_2487 = usbms.marker +@COND_mips_loongson_TRUE@am__append_2488 = usbms.module +@COND_mips_loongson_TRUE@am__append_2489 = usbms.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2490 = +@COND_mips_loongson_TRUE@am__append_2491 = $(nodist_usbms_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2492 = \ +@COND_mips_loongson_TRUE@ $(nodist_usbms_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usbms.marker +@COND_mips_loongson_TRUE@am__append_2493 = usbms.mod +@COND_mips_loongson_TRUE@am__append_2494 = usbms.marker +@COND_i386_ieee1275_TRUE@am__append_2495 = nand.module +@COND_i386_ieee1275_TRUE@am__append_2496 = nand.module$(EXEEXT) +@COND_i386_ieee1275_FALSE@nand_module_DEPENDENCIES = +@COND_i386_ieee1275_TRUE@am__append_2497 = +@COND_i386_ieee1275_TRUE@am__append_2498 = $(nodist_nand_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2499 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_nand_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ nand.marker +@COND_i386_ieee1275_TRUE@am__append_2500 = nand.mod +@COND_i386_ieee1275_TRUE@am__append_2501 = nand.marker +@COND_i386_pc_TRUE@am__append_2502 = efiemu.module +@COND_i386_pc_TRUE@am__append_2503 = efiemu.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@efiemu_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2504 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +@COND_i386_pc_TRUE@am__append_2505 = $(nodist_efiemu_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2506 = $(nodist_efiemu_module_SOURCES) \ +@COND_i386_pc_TRUE@ efiemu.marker +@COND_i386_pc_TRUE@am__append_2507 = efiemu.mod +@COND_i386_pc_TRUE@am__append_2508 = efiemu.marker +@COND_i386_qemu_TRUE@am__append_2509 = efiemu.module +@COND_i386_qemu_TRUE@am__append_2510 = efiemu.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2511 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +@COND_i386_qemu_TRUE@am__append_2512 = $(nodist_efiemu_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2513 = \ +@COND_i386_qemu_TRUE@ $(nodist_efiemu_module_SOURCES) \ +@COND_i386_qemu_TRUE@ efiemu.marker +@COND_i386_qemu_TRUE@am__append_2514 = efiemu.mod +@COND_i386_qemu_TRUE@am__append_2515 = efiemu.marker +@COND_i386_coreboot_TRUE@am__append_2516 = efiemu.module +@COND_i386_coreboot_TRUE@am__append_2517 = efiemu.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2518 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +@COND_i386_coreboot_TRUE@am__append_2519 = $(nodist_efiemu_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2520 = \ +@COND_i386_coreboot_TRUE@ $(nodist_efiemu_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ efiemu.marker +@COND_i386_coreboot_TRUE@am__append_2521 = efiemu.mod +@COND_i386_coreboot_TRUE@am__append_2522 = efiemu.marker +@COND_i386_multiboot_TRUE@am__append_2523 = efiemu.module +@COND_i386_multiboot_TRUE@am__append_2524 = efiemu.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2525 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +@COND_i386_multiboot_TRUE@am__append_2526 = $(nodist_efiemu_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2527 = \ +@COND_i386_multiboot_TRUE@ $(nodist_efiemu_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ efiemu.marker +@COND_i386_multiboot_TRUE@am__append_2528 = efiemu.mod +@COND_i386_multiboot_TRUE@am__append_2529 = efiemu.marker +@COND_i386_ieee1275_TRUE@am__append_2530 = efiemu.module +@COND_i386_ieee1275_TRUE@am__append_2531 = efiemu.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2532 = efiemu/prepare.c efiemu/loadcore.c efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c +@COND_i386_ieee1275_TRUE@am__append_2533 = $(nodist_efiemu_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2534 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_efiemu_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ efiemu.marker +@COND_i386_ieee1275_TRUE@am__append_2535 = efiemu.mod +@COND_i386_ieee1275_TRUE@am__append_2536 = efiemu.marker +@COND_emu_TRUE@am__append_2537 = font.module +@COND_emu_TRUE@am__append_2538 = font.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@font_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_2539 = +@COND_emu_TRUE@am__append_2540 = $(nodist_font_module_SOURCES) +@COND_emu_TRUE@am__append_2541 = $(nodist_font_module_SOURCES) \ +@COND_emu_TRUE@ font.marker +@COND_emu_TRUE@am__append_2542 = font.mod +@COND_emu_TRUE@am__append_2543 = font.marker +@COND_i386_pc_TRUE@am__append_2544 = font.module +@COND_i386_pc_TRUE@am__append_2545 = font.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_2546 = +@COND_i386_pc_TRUE@am__append_2547 = $(nodist_font_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2548 = $(nodist_font_module_SOURCES) \ +@COND_i386_pc_TRUE@ font.marker +@COND_i386_pc_TRUE@am__append_2549 = font.mod +@COND_i386_pc_TRUE@am__append_2550 = font.marker +@COND_i386_efi_TRUE@am__append_2551 = font.module +@COND_i386_efi_TRUE@am__append_2552 = font.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2553 = +@COND_i386_efi_TRUE@am__append_2554 = $(nodist_font_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2555 = $(nodist_font_module_SOURCES) \ +@COND_i386_efi_TRUE@ font.marker +@COND_i386_efi_TRUE@am__append_2556 = font.mod +@COND_i386_efi_TRUE@am__append_2557 = font.marker +@COND_i386_qemu_TRUE@am__append_2558 = font.module +@COND_i386_qemu_TRUE@am__append_2559 = font.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2560 = +@COND_i386_qemu_TRUE@am__append_2561 = $(nodist_font_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2562 = $(nodist_font_module_SOURCES) \ +@COND_i386_qemu_TRUE@ font.marker +@COND_i386_qemu_TRUE@am__append_2563 = font.mod +@COND_i386_qemu_TRUE@am__append_2564 = font.marker +@COND_i386_multiboot_TRUE@am__append_2565 = font.module +@COND_i386_multiboot_TRUE@am__append_2566 = font.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2567 = +@COND_i386_multiboot_TRUE@am__append_2568 = $(nodist_font_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2569 = \ +@COND_i386_multiboot_TRUE@ $(nodist_font_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ font.marker +@COND_i386_multiboot_TRUE@am__append_2570 = font.mod +@COND_i386_multiboot_TRUE@am__append_2571 = font.marker +@COND_i386_ieee1275_TRUE@am__append_2572 = font.module +@COND_i386_ieee1275_TRUE@am__append_2573 = font.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2574 = +@COND_i386_ieee1275_TRUE@am__append_2575 = $(nodist_font_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2576 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_font_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ font.marker +@COND_i386_ieee1275_TRUE@am__append_2577 = font.mod +@COND_i386_ieee1275_TRUE@am__append_2578 = font.marker +@COND_x86_64_efi_TRUE@am__append_2579 = font.module +@COND_x86_64_efi_TRUE@am__append_2580 = font.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2581 = +@COND_x86_64_efi_TRUE@am__append_2582 = $(nodist_font_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2583 = $(nodist_font_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ font.marker +@COND_x86_64_efi_TRUE@am__append_2584 = font.mod +@COND_x86_64_efi_TRUE@am__append_2585 = font.marker +@COND_i386_xen_TRUE@am__append_2586 = font.module +@COND_i386_xen_TRUE@am__append_2587 = font.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_2588 = +@COND_i386_xen_TRUE@am__append_2589 = $(nodist_font_module_SOURCES) +@COND_i386_xen_TRUE@am__append_2590 = $(nodist_font_module_SOURCES) \ +@COND_i386_xen_TRUE@ font.marker +@COND_i386_xen_TRUE@am__append_2591 = font.mod +@COND_i386_xen_TRUE@am__append_2592 = font.marker +@COND_x86_64_xen_TRUE@am__append_2593 = font.module +@COND_x86_64_xen_TRUE@am__append_2594 = font.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_2595 = +@COND_x86_64_xen_TRUE@am__append_2596 = $(nodist_font_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_2597 = $(nodist_font_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ font.marker +@COND_x86_64_xen_TRUE@am__append_2598 = font.mod +@COND_x86_64_xen_TRUE@am__append_2599 = font.marker +@COND_sparc64_ieee1275_TRUE@am__append_2600 = font.module +@COND_sparc64_ieee1275_TRUE@am__append_2601 = font.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_2602 = +@COND_sparc64_ieee1275_TRUE@am__append_2603 = $(nodist_font_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_2604 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_font_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ font.marker +@COND_sparc64_ieee1275_TRUE@am__append_2605 = font.mod +@COND_sparc64_ieee1275_TRUE@am__append_2606 = font.marker +@COND_powerpc_ieee1275_TRUE@am__append_2607 = font.module +@COND_powerpc_ieee1275_TRUE@am__append_2608 = font.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_2609 = +@COND_powerpc_ieee1275_TRUE@am__append_2610 = $(nodist_font_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_2611 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_font_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ font.marker +@COND_powerpc_ieee1275_TRUE@am__append_2612 = font.mod +@COND_powerpc_ieee1275_TRUE@am__append_2613 = font.marker +@COND_mips_arc_TRUE@am__append_2614 = font.module +@COND_mips_arc_TRUE@am__append_2615 = font.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_2616 = +@COND_mips_arc_TRUE@am__append_2617 = $(nodist_font_module_SOURCES) +@COND_mips_arc_TRUE@am__append_2618 = $(nodist_font_module_SOURCES) \ +@COND_mips_arc_TRUE@ font.marker +@COND_mips_arc_TRUE@am__append_2619 = font.mod +@COND_mips_arc_TRUE@am__append_2620 = font.marker +@COND_ia64_efi_TRUE@am__append_2621 = font.module +@COND_ia64_efi_TRUE@am__append_2622 = font.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_2623 = +@COND_ia64_efi_TRUE@am__append_2624 = $(nodist_font_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_2625 = $(nodist_font_module_SOURCES) \ +@COND_ia64_efi_TRUE@ font.marker +@COND_ia64_efi_TRUE@am__append_2626 = font.mod +@COND_ia64_efi_TRUE@am__append_2627 = font.marker +@COND_mips_qemu_mips_TRUE@am__append_2628 = font.module +@COND_mips_qemu_mips_TRUE@am__append_2629 = font.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_2630 = +@COND_mips_qemu_mips_TRUE@am__append_2631 = $(nodist_font_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_2632 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_font_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ font.marker +@COND_mips_qemu_mips_TRUE@am__append_2633 = font.mod +@COND_mips_qemu_mips_TRUE@am__append_2634 = font.marker +@COND_arm_uboot_TRUE@am__append_2635 = font.module +@COND_arm_uboot_TRUE@am__append_2636 = font.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_2637 = +@COND_arm_uboot_TRUE@am__append_2638 = $(nodist_font_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_2639 = $(nodist_font_module_SOURCES) \ +@COND_arm_uboot_TRUE@ font.marker +@COND_arm_uboot_TRUE@am__append_2640 = font.mod +@COND_arm_uboot_TRUE@am__append_2641 = font.marker +@COND_arm_efi_TRUE@am__append_2642 = font.module +@COND_arm_efi_TRUE@am__append_2643 = font.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_2644 = +@COND_arm_efi_TRUE@am__append_2645 = $(nodist_font_module_SOURCES) +@COND_arm_efi_TRUE@am__append_2646 = $(nodist_font_module_SOURCES) \ +@COND_arm_efi_TRUE@ font.marker +@COND_arm_efi_TRUE@am__append_2647 = font.mod +@COND_arm_efi_TRUE@am__append_2648 = font.marker +@COND_arm64_efi_TRUE@am__append_2649 = font.module +@COND_arm64_efi_TRUE@am__append_2650 = font.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_2651 = +@COND_arm64_efi_TRUE@am__append_2652 = $(nodist_font_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_2653 = $(nodist_font_module_SOURCES) \ +@COND_arm64_efi_TRUE@ font.marker +@COND_arm64_efi_TRUE@am__append_2654 = font.mod +@COND_arm64_efi_TRUE@am__append_2655 = font.marker +@COND_i386_pc_TRUE@am__append_2656 = pxe.module +@COND_i386_pc_TRUE@am__append_2657 = pxe.module$(EXEEXT) +@COND_i386_pc_FALSE@pxe_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2658 = +@COND_i386_pc_TRUE@am__append_2659 = $(nodist_pxe_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2660 = $(nodist_pxe_module_SOURCES) \ +@COND_i386_pc_TRUE@ pxe.marker +@COND_i386_pc_TRUE@am__append_2661 = pxe.mod +@COND_i386_pc_TRUE@am__append_2662 = pxe.marker +@COND_emu_TRUE@am__append_2663 = bufio.module +@COND_emu_TRUE@am__append_2664 = bufio.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@bufio_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_2665 = +@COND_emu_TRUE@am__append_2666 = $(nodist_bufio_module_SOURCES) +@COND_emu_TRUE@am__append_2667 = $(nodist_bufio_module_SOURCES) \ +@COND_emu_TRUE@ bufio.marker +@COND_emu_TRUE@am__append_2668 = bufio.mod +@COND_emu_TRUE@am__append_2669 = bufio.marker +@COND_i386_pc_TRUE@am__append_2670 = bufio.module +@COND_i386_pc_TRUE@am__append_2671 = bufio.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_2672 = +@COND_i386_pc_TRUE@am__append_2673 = $(nodist_bufio_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2674 = $(nodist_bufio_module_SOURCES) \ +@COND_i386_pc_TRUE@ bufio.marker +@COND_i386_pc_TRUE@am__append_2675 = bufio.mod +@COND_i386_pc_TRUE@am__append_2676 = bufio.marker +@COND_i386_efi_TRUE@am__append_2677 = bufio.module +@COND_i386_efi_TRUE@am__append_2678 = bufio.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2679 = +@COND_i386_efi_TRUE@am__append_2680 = $(nodist_bufio_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2681 = $(nodist_bufio_module_SOURCES) \ +@COND_i386_efi_TRUE@ bufio.marker +@COND_i386_efi_TRUE@am__append_2682 = bufio.mod +@COND_i386_efi_TRUE@am__append_2683 = bufio.marker +@COND_i386_qemu_TRUE@am__append_2684 = bufio.module +@COND_i386_qemu_TRUE@am__append_2685 = bufio.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2686 = +@COND_i386_qemu_TRUE@am__append_2687 = $(nodist_bufio_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2688 = $(nodist_bufio_module_SOURCES) \ +@COND_i386_qemu_TRUE@ bufio.marker +@COND_i386_qemu_TRUE@am__append_2689 = bufio.mod +@COND_i386_qemu_TRUE@am__append_2690 = bufio.marker +@COND_i386_multiboot_TRUE@am__append_2691 = bufio.module +@COND_i386_multiboot_TRUE@am__append_2692 = bufio.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2693 = +@COND_i386_multiboot_TRUE@am__append_2694 = $(nodist_bufio_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2695 = \ +@COND_i386_multiboot_TRUE@ $(nodist_bufio_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ bufio.marker +@COND_i386_multiboot_TRUE@am__append_2696 = bufio.mod +@COND_i386_multiboot_TRUE@am__append_2697 = bufio.marker +@COND_i386_ieee1275_TRUE@am__append_2698 = bufio.module +@COND_i386_ieee1275_TRUE@am__append_2699 = bufio.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2700 = +@COND_i386_ieee1275_TRUE@am__append_2701 = $(nodist_bufio_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2702 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_bufio_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ bufio.marker +@COND_i386_ieee1275_TRUE@am__append_2703 = bufio.mod +@COND_i386_ieee1275_TRUE@am__append_2704 = bufio.marker +@COND_x86_64_efi_TRUE@am__append_2705 = bufio.module +@COND_x86_64_efi_TRUE@am__append_2706 = bufio.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2707 = +@COND_x86_64_efi_TRUE@am__append_2708 = $(nodist_bufio_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2709 = \ +@COND_x86_64_efi_TRUE@ $(nodist_bufio_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ bufio.marker +@COND_x86_64_efi_TRUE@am__append_2710 = bufio.mod +@COND_x86_64_efi_TRUE@am__append_2711 = bufio.marker +@COND_i386_xen_TRUE@am__append_2712 = bufio.module +@COND_i386_xen_TRUE@am__append_2713 = bufio.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_2714 = +@COND_i386_xen_TRUE@am__append_2715 = $(nodist_bufio_module_SOURCES) +@COND_i386_xen_TRUE@am__append_2716 = $(nodist_bufio_module_SOURCES) \ +@COND_i386_xen_TRUE@ bufio.marker +@COND_i386_xen_TRUE@am__append_2717 = bufio.mod +@COND_i386_xen_TRUE@am__append_2718 = bufio.marker +@COND_x86_64_xen_TRUE@am__append_2719 = bufio.module +@COND_x86_64_xen_TRUE@am__append_2720 = bufio.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_2721 = +@COND_x86_64_xen_TRUE@am__append_2722 = $(nodist_bufio_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_2723 = \ +@COND_x86_64_xen_TRUE@ $(nodist_bufio_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ bufio.marker +@COND_x86_64_xen_TRUE@am__append_2724 = bufio.mod +@COND_x86_64_xen_TRUE@am__append_2725 = bufio.marker +@COND_sparc64_ieee1275_TRUE@am__append_2726 = bufio.module +@COND_sparc64_ieee1275_TRUE@am__append_2727 = bufio.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_2728 = +@COND_sparc64_ieee1275_TRUE@am__append_2729 = $(nodist_bufio_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_2730 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_bufio_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ bufio.marker +@COND_sparc64_ieee1275_TRUE@am__append_2731 = bufio.mod +@COND_sparc64_ieee1275_TRUE@am__append_2732 = bufio.marker +@COND_powerpc_ieee1275_TRUE@am__append_2733 = bufio.module +@COND_powerpc_ieee1275_TRUE@am__append_2734 = bufio.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_2735 = +@COND_powerpc_ieee1275_TRUE@am__append_2736 = $(nodist_bufio_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_2737 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_bufio_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ bufio.marker +@COND_powerpc_ieee1275_TRUE@am__append_2738 = bufio.mod +@COND_powerpc_ieee1275_TRUE@am__append_2739 = bufio.marker +@COND_mips_arc_TRUE@am__append_2740 = bufio.module +@COND_mips_arc_TRUE@am__append_2741 = bufio.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_2742 = +@COND_mips_arc_TRUE@am__append_2743 = $(nodist_bufio_module_SOURCES) +@COND_mips_arc_TRUE@am__append_2744 = $(nodist_bufio_module_SOURCES) \ +@COND_mips_arc_TRUE@ bufio.marker +@COND_mips_arc_TRUE@am__append_2745 = bufio.mod +@COND_mips_arc_TRUE@am__append_2746 = bufio.marker +@COND_ia64_efi_TRUE@am__append_2747 = bufio.module +@COND_ia64_efi_TRUE@am__append_2748 = bufio.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_2749 = +@COND_ia64_efi_TRUE@am__append_2750 = $(nodist_bufio_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_2751 = $(nodist_bufio_module_SOURCES) \ +@COND_ia64_efi_TRUE@ bufio.marker +@COND_ia64_efi_TRUE@am__append_2752 = bufio.mod +@COND_ia64_efi_TRUE@am__append_2753 = bufio.marker +@COND_mips_qemu_mips_TRUE@am__append_2754 = bufio.module +@COND_mips_qemu_mips_TRUE@am__append_2755 = bufio.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_2756 = +@COND_mips_qemu_mips_TRUE@am__append_2757 = $(nodist_bufio_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_2758 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_bufio_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ bufio.marker +@COND_mips_qemu_mips_TRUE@am__append_2759 = bufio.mod +@COND_mips_qemu_mips_TRUE@am__append_2760 = bufio.marker +@COND_arm_uboot_TRUE@am__append_2761 = bufio.module +@COND_arm_uboot_TRUE@am__append_2762 = bufio.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_2763 = +@COND_arm_uboot_TRUE@am__append_2764 = $(nodist_bufio_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_2765 = $(nodist_bufio_module_SOURCES) \ +@COND_arm_uboot_TRUE@ bufio.marker +@COND_arm_uboot_TRUE@am__append_2766 = bufio.mod +@COND_arm_uboot_TRUE@am__append_2767 = bufio.marker +@COND_arm_efi_TRUE@am__append_2768 = bufio.module +@COND_arm_efi_TRUE@am__append_2769 = bufio.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_2770 = +@COND_arm_efi_TRUE@am__append_2771 = $(nodist_bufio_module_SOURCES) +@COND_arm_efi_TRUE@am__append_2772 = $(nodist_bufio_module_SOURCES) \ +@COND_arm_efi_TRUE@ bufio.marker +@COND_arm_efi_TRUE@am__append_2773 = bufio.mod +@COND_arm_efi_TRUE@am__append_2774 = bufio.marker +@COND_arm64_efi_TRUE@am__append_2775 = bufio.module +@COND_arm64_efi_TRUE@am__append_2776 = bufio.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_2777 = +@COND_arm64_efi_TRUE@am__append_2778 = $(nodist_bufio_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_2779 = $(nodist_bufio_module_SOURCES) \ +@COND_arm64_efi_TRUE@ bufio.marker +@COND_arm64_efi_TRUE@am__append_2780 = bufio.mod +@COND_arm64_efi_TRUE@am__append_2781 = bufio.marker +@COND_i386_pc_TRUE@am__append_2782 = relocator.module +@COND_i386_pc_TRUE@am__append_2783 = relocator.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@relocator_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2784 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_i386_pc_TRUE@am__append_2785 = $(nodist_relocator_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2786 = \ +@COND_i386_pc_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_i386_pc_TRUE@ relocator.marker +@COND_i386_pc_TRUE@am__append_2787 = relocator.mod +@COND_i386_pc_TRUE@am__append_2788 = relocator.marker +@COND_i386_efi_TRUE@am__append_2789 = relocator.module +@COND_i386_efi_TRUE@am__append_2790 = relocator.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2791 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_i386_efi_TRUE@am__append_2792 = $(nodist_relocator_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2793 = \ +@COND_i386_efi_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_i386_efi_TRUE@ relocator.marker +@COND_i386_efi_TRUE@am__append_2794 = relocator.mod +@COND_i386_efi_TRUE@am__append_2795 = relocator.marker +@COND_i386_qemu_TRUE@am__append_2796 = relocator.module +@COND_i386_qemu_TRUE@am__append_2797 = relocator.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2798 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_i386_qemu_TRUE@am__append_2799 = $(nodist_relocator_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2800 = \ +@COND_i386_qemu_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_i386_qemu_TRUE@ relocator.marker +@COND_i386_qemu_TRUE@am__append_2801 = relocator.mod +@COND_i386_qemu_TRUE@am__append_2802 = relocator.marker +@COND_i386_coreboot_TRUE@am__append_2803 = relocator.module +@COND_i386_coreboot_TRUE@am__append_2804 = relocator.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2805 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_i386_coreboot_TRUE@am__append_2806 = $(nodist_relocator_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2807 = \ +@COND_i386_coreboot_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ relocator.marker +@COND_i386_coreboot_TRUE@am__append_2808 = relocator.mod +@COND_i386_coreboot_TRUE@am__append_2809 = relocator.marker +@COND_i386_multiboot_TRUE@am__append_2810 = relocator.module +@COND_i386_multiboot_TRUE@am__append_2811 = relocator.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2812 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_i386_multiboot_TRUE@am__append_2813 = $(nodist_relocator_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2814 = \ +@COND_i386_multiboot_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ relocator.marker +@COND_i386_multiboot_TRUE@am__append_2815 = relocator.mod +@COND_i386_multiboot_TRUE@am__append_2816 = relocator.marker +@COND_i386_ieee1275_TRUE@am__append_2817 = relocator.module +@COND_i386_ieee1275_TRUE@am__append_2818 = relocator.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2819 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_i386_ieee1275_TRUE@am__append_2820 = $(nodist_relocator_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2821 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ relocator.marker +@COND_i386_ieee1275_TRUE@am__append_2822 = relocator.mod +@COND_i386_ieee1275_TRUE@am__append_2823 = relocator.marker +@COND_x86_64_efi_TRUE@am__append_2824 = relocator.module +@COND_x86_64_efi_TRUE@am__append_2825 = relocator.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2826 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_x86_64_efi_TRUE@am__append_2827 = $(nodist_relocator_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2828 = \ +@COND_x86_64_efi_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ relocator.marker +@COND_x86_64_efi_TRUE@am__append_2829 = relocator.mod +@COND_x86_64_efi_TRUE@am__append_2830 = relocator.marker +@COND_i386_xen_TRUE@am__append_2831 = relocator.module +@COND_i386_xen_TRUE@am__append_2832 = relocator.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_2833 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_i386_xen_TRUE@am__append_2834 = $(nodist_relocator_module_SOURCES) +@COND_i386_xen_TRUE@am__append_2835 = \ +@COND_i386_xen_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_i386_xen_TRUE@ relocator.marker +@COND_i386_xen_TRUE@am__append_2836 = relocator.mod +@COND_i386_xen_TRUE@am__append_2837 = relocator.marker +@COND_x86_64_xen_TRUE@am__append_2838 = relocator.module +@COND_x86_64_xen_TRUE@am__append_2839 = relocator.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_2840 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_x86_64_xen_TRUE@am__append_2841 = $(nodist_relocator_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_2842 = \ +@COND_x86_64_xen_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ relocator.marker +@COND_x86_64_xen_TRUE@am__append_2843 = relocator.mod +@COND_x86_64_xen_TRUE@am__append_2844 = relocator.marker +@COND_mips_loongson_TRUE@am__append_2845 = relocator.module +@COND_mips_loongson_TRUE@am__append_2846 = relocator.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2847 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_mips_loongson_TRUE@am__append_2848 = $(nodist_relocator_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2849 = \ +@COND_mips_loongson_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_mips_loongson_TRUE@ relocator.marker +@COND_mips_loongson_TRUE@am__append_2850 = relocator.mod +@COND_mips_loongson_TRUE@am__append_2851 = relocator.marker +@COND_powerpc_ieee1275_TRUE@am__append_2852 = relocator.module +@COND_powerpc_ieee1275_TRUE@am__append_2853 = relocator.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_2854 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_powerpc_ieee1275_TRUE@am__append_2855 = $(nodist_relocator_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_2856 = $(nodist_relocator_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ relocator.marker +@COND_powerpc_ieee1275_TRUE@am__append_2857 = relocator.mod +@COND_powerpc_ieee1275_TRUE@am__append_2858 = relocator.marker +@COND_mips_arc_TRUE@am__append_2859 = relocator.module +@COND_mips_arc_TRUE@am__append_2860 = relocator.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_2861 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_mips_arc_TRUE@am__append_2862 = $(nodist_relocator_module_SOURCES) +@COND_mips_arc_TRUE@am__append_2863 = \ +@COND_mips_arc_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_mips_arc_TRUE@ relocator.marker +@COND_mips_arc_TRUE@am__append_2864 = relocator.mod +@COND_mips_arc_TRUE@am__append_2865 = relocator.marker +@COND_mips_qemu_mips_TRUE@am__append_2866 = relocator.module +@COND_mips_qemu_mips_TRUE@am__append_2867 = relocator.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_2868 = lib/i386/relocator_common.S kern/powerpc/cache_flush.S +@COND_mips_qemu_mips_TRUE@am__append_2869 = $(nodist_relocator_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_2870 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_relocator_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ relocator.marker +@COND_mips_qemu_mips_TRUE@am__append_2871 = relocator.mod +@COND_mips_qemu_mips_TRUE@am__append_2872 = relocator.marker +@COND_i386_pc_TRUE@am__append_2873 = datetime.module +@COND_i386_pc_TRUE@am__append_2874 = datetime.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@datetime_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_2875 = +@COND_i386_pc_TRUE@am__append_2876 = $(nodist_datetime_module_SOURCES) +@COND_i386_pc_TRUE@am__append_2877 = \ +@COND_i386_pc_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_i386_pc_TRUE@ datetime.marker +@COND_i386_pc_TRUE@am__append_2878 = datetime.mod +@COND_i386_pc_TRUE@am__append_2879 = datetime.marker +@COND_i386_efi_TRUE@am__append_2880 = datetime.module +@COND_i386_efi_TRUE@am__append_2881 = datetime.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_2882 = +@COND_i386_efi_TRUE@am__append_2883 = $(nodist_datetime_module_SOURCES) +@COND_i386_efi_TRUE@am__append_2884 = \ +@COND_i386_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_i386_efi_TRUE@ datetime.marker +@COND_i386_efi_TRUE@am__append_2885 = datetime.mod +@COND_i386_efi_TRUE@am__append_2886 = datetime.marker +@COND_i386_qemu_TRUE@am__append_2887 = datetime.module +@COND_i386_qemu_TRUE@am__append_2888 = datetime.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_2889 = +@COND_i386_qemu_TRUE@am__append_2890 = $(nodist_datetime_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_2891 = \ +@COND_i386_qemu_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_i386_qemu_TRUE@ datetime.marker +@COND_i386_qemu_TRUE@am__append_2892 = datetime.mod +@COND_i386_qemu_TRUE@am__append_2893 = datetime.marker +@COND_i386_coreboot_TRUE@am__append_2894 = datetime.module +@COND_i386_coreboot_TRUE@am__append_2895 = datetime.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_2896 = +@COND_i386_coreboot_TRUE@am__append_2897 = $(nodist_datetime_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_2898 = \ +@COND_i386_coreboot_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ datetime.marker +@COND_i386_coreboot_TRUE@am__append_2899 = datetime.mod +@COND_i386_coreboot_TRUE@am__append_2900 = datetime.marker +@COND_i386_multiboot_TRUE@am__append_2901 = datetime.module +@COND_i386_multiboot_TRUE@am__append_2902 = datetime.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_2903 = +@COND_i386_multiboot_TRUE@am__append_2904 = $(nodist_datetime_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_2905 = \ +@COND_i386_multiboot_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ datetime.marker +@COND_i386_multiboot_TRUE@am__append_2906 = datetime.mod +@COND_i386_multiboot_TRUE@am__append_2907 = datetime.marker +@COND_i386_ieee1275_TRUE@am__append_2908 = datetime.module +@COND_i386_ieee1275_TRUE@am__append_2909 = datetime.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_2910 = +@COND_i386_ieee1275_TRUE@am__append_2911 = $(nodist_datetime_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_2912 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ datetime.marker +@COND_i386_ieee1275_TRUE@am__append_2913 = datetime.mod +@COND_i386_ieee1275_TRUE@am__append_2914 = datetime.marker +@COND_x86_64_efi_TRUE@am__append_2915 = datetime.module +@COND_x86_64_efi_TRUE@am__append_2916 = datetime.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_2917 = +@COND_x86_64_efi_TRUE@am__append_2918 = $(nodist_datetime_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_2919 = \ +@COND_x86_64_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ datetime.marker +@COND_x86_64_efi_TRUE@am__append_2920 = datetime.mod +@COND_x86_64_efi_TRUE@am__append_2921 = datetime.marker +@COND_i386_xen_TRUE@am__append_2922 = datetime.module +@COND_i386_xen_TRUE@am__append_2923 = datetime.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_2924 = +@COND_i386_xen_TRUE@am__append_2925 = $(nodist_datetime_module_SOURCES) +@COND_i386_xen_TRUE@am__append_2926 = \ +@COND_i386_xen_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_i386_xen_TRUE@ datetime.marker +@COND_i386_xen_TRUE@am__append_2927 = datetime.mod +@COND_i386_xen_TRUE@am__append_2928 = datetime.marker +@COND_x86_64_xen_TRUE@am__append_2929 = datetime.module +@COND_x86_64_xen_TRUE@am__append_2930 = datetime.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_2931 = +@COND_x86_64_xen_TRUE@am__append_2932 = $(nodist_datetime_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_2933 = \ +@COND_x86_64_xen_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ datetime.marker +@COND_x86_64_xen_TRUE@am__append_2934 = datetime.mod +@COND_x86_64_xen_TRUE@am__append_2935 = datetime.marker +@COND_mips_loongson_TRUE@am__append_2936 = datetime.module +@COND_mips_loongson_TRUE@am__append_2937 = datetime.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_2938 = +@COND_mips_loongson_TRUE@am__append_2939 = $(nodist_datetime_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_2940 = \ +@COND_mips_loongson_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_mips_loongson_TRUE@ datetime.marker +@COND_mips_loongson_TRUE@am__append_2941 = datetime.mod +@COND_mips_loongson_TRUE@am__append_2942 = datetime.marker +@COND_sparc64_ieee1275_TRUE@am__append_2943 = datetime.module +@COND_sparc64_ieee1275_TRUE@am__append_2944 = datetime.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_2945 = +@COND_sparc64_ieee1275_TRUE@am__append_2946 = $(nodist_datetime_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_2947 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ datetime.marker +@COND_sparc64_ieee1275_TRUE@am__append_2948 = datetime.mod +@COND_sparc64_ieee1275_TRUE@am__append_2949 = datetime.marker +@COND_powerpc_ieee1275_TRUE@am__append_2950 = datetime.module +@COND_powerpc_ieee1275_TRUE@am__append_2951 = datetime.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_2952 = +@COND_powerpc_ieee1275_TRUE@am__append_2953 = $(nodist_datetime_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_2954 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ datetime.marker +@COND_powerpc_ieee1275_TRUE@am__append_2955 = datetime.mod +@COND_powerpc_ieee1275_TRUE@am__append_2956 = datetime.marker +@COND_mips_arc_TRUE@am__append_2957 = datetime.module +@COND_mips_arc_TRUE@am__append_2958 = datetime.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_2959 = +@COND_mips_arc_TRUE@am__append_2960 = $(nodist_datetime_module_SOURCES) +@COND_mips_arc_TRUE@am__append_2961 = \ +@COND_mips_arc_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_mips_arc_TRUE@ datetime.marker +@COND_mips_arc_TRUE@am__append_2962 = datetime.mod +@COND_mips_arc_TRUE@am__append_2963 = datetime.marker +@COND_ia64_efi_TRUE@am__append_2964 = datetime.module +@COND_ia64_efi_TRUE@am__append_2965 = datetime.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_2966 = +@COND_ia64_efi_TRUE@am__append_2967 = $(nodist_datetime_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_2968 = \ +@COND_ia64_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_ia64_efi_TRUE@ datetime.marker +@COND_ia64_efi_TRUE@am__append_2969 = datetime.mod +@COND_ia64_efi_TRUE@am__append_2970 = datetime.marker +@COND_mips_qemu_mips_TRUE@am__append_2971 = datetime.module +@COND_mips_qemu_mips_TRUE@am__append_2972 = datetime.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_2973 = +@COND_mips_qemu_mips_TRUE@am__append_2974 = $(nodist_datetime_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_2975 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ datetime.marker +@COND_mips_qemu_mips_TRUE@am__append_2976 = datetime.mod +@COND_mips_qemu_mips_TRUE@am__append_2977 = datetime.marker +@COND_arm_uboot_TRUE@am__append_2978 = datetime.module +@COND_arm_uboot_TRUE@am__append_2979 = datetime.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_2980 = +@COND_arm_uboot_TRUE@am__append_2981 = $(nodist_datetime_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_2982 = \ +@COND_arm_uboot_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_arm_uboot_TRUE@ datetime.marker +@COND_arm_uboot_TRUE@am__append_2983 = datetime.mod +@COND_arm_uboot_TRUE@am__append_2984 = datetime.marker +@COND_arm_efi_TRUE@am__append_2985 = datetime.module +@COND_arm_efi_TRUE@am__append_2986 = datetime.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_2987 = +@COND_arm_efi_TRUE@am__append_2988 = $(nodist_datetime_module_SOURCES) +@COND_arm_efi_TRUE@am__append_2989 = \ +@COND_arm_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_arm_efi_TRUE@ datetime.marker +@COND_arm_efi_TRUE@am__append_2990 = datetime.mod +@COND_arm_efi_TRUE@am__append_2991 = datetime.marker +@COND_arm64_efi_TRUE@am__append_2992 = datetime.module +@COND_arm64_efi_TRUE@am__append_2993 = datetime.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_2994 = +@COND_arm64_efi_TRUE@am__append_2995 = $(nodist_datetime_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_2996 = \ +@COND_arm64_efi_TRUE@ $(nodist_datetime_module_SOURCES) \ +@COND_arm64_efi_TRUE@ datetime.marker +@COND_arm64_efi_TRUE@am__append_2997 = datetime.mod +@COND_arm64_efi_TRUE@am__append_2998 = datetime.marker +@COND_i386_pc_TRUE@am__append_2999 = aout.module +@COND_i386_pc_TRUE@am__append_3000 = aout.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@aout_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3001 = +@COND_i386_pc_TRUE@am__append_3002 = $(nodist_aout_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3003 = $(nodist_aout_module_SOURCES) \ +@COND_i386_pc_TRUE@ aout.marker +@COND_i386_pc_TRUE@am__append_3004 = aout.mod +@COND_i386_pc_TRUE@am__append_3005 = aout.marker +@COND_i386_efi_TRUE@am__append_3006 = aout.module +@COND_i386_efi_TRUE@am__append_3007 = aout.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3008 = +@COND_i386_efi_TRUE@am__append_3009 = $(nodist_aout_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3010 = $(nodist_aout_module_SOURCES) \ +@COND_i386_efi_TRUE@ aout.marker +@COND_i386_efi_TRUE@am__append_3011 = aout.mod +@COND_i386_efi_TRUE@am__append_3012 = aout.marker +@COND_i386_qemu_TRUE@am__append_3013 = aout.module +@COND_i386_qemu_TRUE@am__append_3014 = aout.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3015 = +@COND_i386_qemu_TRUE@am__append_3016 = $(nodist_aout_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3017 = $(nodist_aout_module_SOURCES) \ +@COND_i386_qemu_TRUE@ aout.marker +@COND_i386_qemu_TRUE@am__append_3018 = aout.mod +@COND_i386_qemu_TRUE@am__append_3019 = aout.marker +@COND_i386_coreboot_TRUE@am__append_3020 = aout.module +@COND_i386_coreboot_TRUE@am__append_3021 = aout.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3022 = +@COND_i386_coreboot_TRUE@am__append_3023 = $(nodist_aout_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3024 = \ +@COND_i386_coreboot_TRUE@ $(nodist_aout_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ aout.marker +@COND_i386_coreboot_TRUE@am__append_3025 = aout.mod +@COND_i386_coreboot_TRUE@am__append_3026 = aout.marker +@COND_i386_multiboot_TRUE@am__append_3027 = aout.module +@COND_i386_multiboot_TRUE@am__append_3028 = aout.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3029 = +@COND_i386_multiboot_TRUE@am__append_3030 = $(nodist_aout_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3031 = \ +@COND_i386_multiboot_TRUE@ $(nodist_aout_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ aout.marker +@COND_i386_multiboot_TRUE@am__append_3032 = aout.mod +@COND_i386_multiboot_TRUE@am__append_3033 = aout.marker +@COND_i386_ieee1275_TRUE@am__append_3034 = aout.module +@COND_i386_ieee1275_TRUE@am__append_3035 = aout.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3036 = +@COND_i386_ieee1275_TRUE@am__append_3037 = $(nodist_aout_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3038 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_aout_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ aout.marker +@COND_i386_ieee1275_TRUE@am__append_3039 = aout.mod +@COND_i386_ieee1275_TRUE@am__append_3040 = aout.marker +@COND_x86_64_efi_TRUE@am__append_3041 = aout.module +@COND_x86_64_efi_TRUE@am__append_3042 = aout.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3043 = +@COND_x86_64_efi_TRUE@am__append_3044 = $(nodist_aout_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3045 = $(nodist_aout_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ aout.marker +@COND_x86_64_efi_TRUE@am__append_3046 = aout.mod +@COND_x86_64_efi_TRUE@am__append_3047 = aout.marker +@COND_i386_pc_TRUE@am__append_3048 = bsd.module +@COND_i386_pc_TRUE@am__append_3049 = bsd.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@bsd_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3050 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +@COND_i386_pc_TRUE@am__append_3051 = $(nodist_bsd_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3052 = $(nodist_bsd_module_SOURCES) \ +@COND_i386_pc_TRUE@ bsd.marker +@COND_i386_pc_TRUE@am__append_3053 = bsd.mod +@COND_i386_pc_TRUE@am__append_3054 = bsd.marker +@COND_i386_efi_TRUE@am__append_3055 = bsd.module +@COND_i386_efi_TRUE@am__append_3056 = bsd.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3057 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +@COND_i386_efi_TRUE@am__append_3058 = $(nodist_bsd_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3059 = $(nodist_bsd_module_SOURCES) \ +@COND_i386_efi_TRUE@ bsd.marker +@COND_i386_efi_TRUE@am__append_3060 = bsd.mod +@COND_i386_efi_TRUE@am__append_3061 = bsd.marker +@COND_i386_qemu_TRUE@am__append_3062 = bsd.module +@COND_i386_qemu_TRUE@am__append_3063 = bsd.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3064 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +@COND_i386_qemu_TRUE@am__append_3065 = $(nodist_bsd_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3066 = $(nodist_bsd_module_SOURCES) \ +@COND_i386_qemu_TRUE@ bsd.marker +@COND_i386_qemu_TRUE@am__append_3067 = bsd.mod +@COND_i386_qemu_TRUE@am__append_3068 = bsd.marker +@COND_i386_coreboot_TRUE@am__append_3069 = bsd.module +@COND_i386_coreboot_TRUE@am__append_3070 = bsd.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3071 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +@COND_i386_coreboot_TRUE@am__append_3072 = $(nodist_bsd_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3073 = \ +@COND_i386_coreboot_TRUE@ $(nodist_bsd_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ bsd.marker +@COND_i386_coreboot_TRUE@am__append_3074 = bsd.mod +@COND_i386_coreboot_TRUE@am__append_3075 = bsd.marker +@COND_i386_multiboot_TRUE@am__append_3076 = bsd.module +@COND_i386_multiboot_TRUE@am__append_3077 = bsd.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3078 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +@COND_i386_multiboot_TRUE@am__append_3079 = $(nodist_bsd_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3080 = \ +@COND_i386_multiboot_TRUE@ $(nodist_bsd_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ bsd.marker +@COND_i386_multiboot_TRUE@am__append_3081 = bsd.mod +@COND_i386_multiboot_TRUE@am__append_3082 = bsd.marker +@COND_i386_ieee1275_TRUE@am__append_3083 = bsd.module +@COND_i386_ieee1275_TRUE@am__append_3084 = bsd.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3085 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +@COND_i386_ieee1275_TRUE@am__append_3086 = $(nodist_bsd_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3087 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_bsd_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ bsd.marker +@COND_i386_ieee1275_TRUE@am__append_3088 = bsd.mod +@COND_i386_ieee1275_TRUE@am__append_3089 = bsd.marker +@COND_x86_64_efi_TRUE@am__append_3090 = bsd.module +@COND_x86_64_efi_TRUE@am__append_3091 = bsd.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3092 = loader/i386/bsdXX.c loader/i386/bsd_pagetable.c +@COND_x86_64_efi_TRUE@am__append_3093 = $(nodist_bsd_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3094 = $(nodist_bsd_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ bsd.marker +@COND_x86_64_efi_TRUE@am__append_3095 = bsd.mod +@COND_x86_64_efi_TRUE@am__append_3096 = bsd.marker +@COND_i386_pc_TRUE@am__append_3097 = plan9.module linux16.module +@COND_i386_pc_TRUE@am__append_3098 = plan9.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ linux16.module$(EXEEXT) +@COND_i386_pc_FALSE@plan9_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3099 = +@COND_i386_pc_TRUE@am__append_3100 = $(nodist_plan9_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_linux16_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3101 = $(nodist_plan9_module_SOURCES) \ +@COND_i386_pc_TRUE@ plan9.marker \ +@COND_i386_pc_TRUE@ $(nodist_linux16_module_SOURCES) \ +@COND_i386_pc_TRUE@ linux16.marker +@COND_i386_pc_TRUE@am__append_3102 = plan9.mod linux16.mod +@COND_i386_pc_TRUE@am__append_3103 = plan9.marker linux16.marker +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@linux16_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_3104 = linux16.module +@COND_i386_efi_TRUE@am__append_3105 = linux16.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3106 = +@COND_i386_efi_TRUE@am__append_3107 = $(nodist_linux16_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3108 = \ +@COND_i386_efi_TRUE@ $(nodist_linux16_module_SOURCES) \ +@COND_i386_efi_TRUE@ linux16.marker +@COND_i386_efi_TRUE@am__append_3109 = linux16.mod +@COND_i386_efi_TRUE@am__append_3110 = linux16.marker +@COND_i386_qemu_TRUE@am__append_3111 = linux16.module +@COND_i386_qemu_TRUE@am__append_3112 = linux16.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3113 = +@COND_i386_qemu_TRUE@am__append_3114 = $(nodist_linux16_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3115 = \ +@COND_i386_qemu_TRUE@ $(nodist_linux16_module_SOURCES) \ +@COND_i386_qemu_TRUE@ linux16.marker +@COND_i386_qemu_TRUE@am__append_3116 = linux16.mod +@COND_i386_qemu_TRUE@am__append_3117 = linux16.marker +@COND_i386_coreboot_TRUE@am__append_3118 = linux16.module +@COND_i386_coreboot_TRUE@am__append_3119 = linux16.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3120 = +@COND_i386_coreboot_TRUE@am__append_3121 = $(nodist_linux16_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3122 = \ +@COND_i386_coreboot_TRUE@ $(nodist_linux16_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ linux16.marker +@COND_i386_coreboot_TRUE@am__append_3123 = linux16.mod +@COND_i386_coreboot_TRUE@am__append_3124 = linux16.marker +@COND_i386_multiboot_TRUE@am__append_3125 = linux16.module +@COND_i386_multiboot_TRUE@am__append_3126 = linux16.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3127 = +@COND_i386_multiboot_TRUE@am__append_3128 = $(nodist_linux16_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3129 = \ +@COND_i386_multiboot_TRUE@ $(nodist_linux16_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ linux16.marker +@COND_i386_multiboot_TRUE@am__append_3130 = linux16.mod +@COND_i386_multiboot_TRUE@am__append_3131 = linux16.marker +@COND_i386_ieee1275_TRUE@am__append_3132 = linux16.module +@COND_i386_ieee1275_TRUE@am__append_3133 = linux16.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3134 = +@COND_i386_ieee1275_TRUE@am__append_3135 = $(nodist_linux16_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3136 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_linux16_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ linux16.marker +@COND_i386_ieee1275_TRUE@am__append_3137 = linux16.mod +@COND_i386_ieee1275_TRUE@am__append_3138 = linux16.marker +@COND_x86_64_efi_TRUE@am__append_3139 = linux16.module +@COND_x86_64_efi_TRUE@am__append_3140 = linux16.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3141 = +@COND_x86_64_efi_TRUE@am__append_3142 = $(nodist_linux16_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3143 = \ +@COND_x86_64_efi_TRUE@ $(nodist_linux16_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ linux16.marker +@COND_x86_64_efi_TRUE@am__append_3144 = linux16.mod +@COND_x86_64_efi_TRUE@am__append_3145 = linux16.marker +@COND_i386_pc_TRUE@am__append_3146 = ntldr.module truecrypt.module \ +@COND_i386_pc_TRUE@ freedos.module pxechain.module \ +@COND_i386_pc_TRUE@ multiboot2.module +@COND_i386_pc_TRUE@am__append_3147 = ntldr.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ truecrypt.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ freedos.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ pxechain.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ multiboot2.module$(EXEEXT) +@COND_i386_pc_FALSE@ntldr_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3148 = +@COND_i386_pc_TRUE@am__append_3149 = $(nodist_ntldr_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_truecrypt_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_freedos_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_pxechain_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_multiboot2_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3150 = $(nodist_ntldr_module_SOURCES) \ +@COND_i386_pc_TRUE@ ntldr.marker \ +@COND_i386_pc_TRUE@ $(nodist_truecrypt_module_SOURCES) \ +@COND_i386_pc_TRUE@ truecrypt.marker \ +@COND_i386_pc_TRUE@ $(nodist_freedos_module_SOURCES) \ +@COND_i386_pc_TRUE@ freedos.marker \ +@COND_i386_pc_TRUE@ $(nodist_pxechain_module_SOURCES) \ +@COND_i386_pc_TRUE@ pxechain.marker \ +@COND_i386_pc_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_i386_pc_TRUE@ multiboot2.marker +@COND_i386_pc_TRUE@am__append_3151 = ntldr.mod truecrypt.mod \ +@COND_i386_pc_TRUE@ freedos.mod pxechain.mod multiboot2.mod +@COND_i386_pc_TRUE@am__append_3152 = ntldr.marker truecrypt.marker \ +@COND_i386_pc_TRUE@ freedos.marker pxechain.marker \ +@COND_i386_pc_TRUE@ multiboot2.marker +@COND_i386_pc_FALSE@truecrypt_module_DEPENDENCIES = +@COND_i386_pc_FALSE@freedos_module_DEPENDENCIES = +@COND_i386_pc_FALSE@pxechain_module_DEPENDENCIES = +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@multiboot2_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_3153 = multiboot2.module +@COND_i386_efi_TRUE@am__append_3154 = multiboot2.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3155 = +@COND_i386_efi_TRUE@am__append_3156 = $(nodist_multiboot2_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3157 = \ +@COND_i386_efi_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_i386_efi_TRUE@ multiboot2.marker +@COND_i386_efi_TRUE@am__append_3158 = multiboot2.mod +@COND_i386_efi_TRUE@am__append_3159 = multiboot2.marker +@COND_i386_qemu_TRUE@am__append_3160 = multiboot2.module +@COND_i386_qemu_TRUE@am__append_3161 = multiboot2.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3162 = +@COND_i386_qemu_TRUE@am__append_3163 = $(nodist_multiboot2_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3164 = \ +@COND_i386_qemu_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_i386_qemu_TRUE@ multiboot2.marker +@COND_i386_qemu_TRUE@am__append_3165 = multiboot2.mod +@COND_i386_qemu_TRUE@am__append_3166 = multiboot2.marker +@COND_i386_coreboot_TRUE@am__append_3167 = multiboot2.module +@COND_i386_coreboot_TRUE@am__append_3168 = multiboot2.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3169 = +@COND_i386_coreboot_TRUE@am__append_3170 = $(nodist_multiboot2_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3171 = \ +@COND_i386_coreboot_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ multiboot2.marker +@COND_i386_coreboot_TRUE@am__append_3172 = multiboot2.mod +@COND_i386_coreboot_TRUE@am__append_3173 = multiboot2.marker +@COND_i386_multiboot_TRUE@am__append_3174 = multiboot2.module +@COND_i386_multiboot_TRUE@am__append_3175 = multiboot2.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3176 = +@COND_i386_multiboot_TRUE@am__append_3177 = $(nodist_multiboot2_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3178 = \ +@COND_i386_multiboot_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ multiboot2.marker +@COND_i386_multiboot_TRUE@am__append_3179 = multiboot2.mod +@COND_i386_multiboot_TRUE@am__append_3180 = multiboot2.marker +@COND_i386_ieee1275_TRUE@am__append_3181 = multiboot2.module +@COND_i386_ieee1275_TRUE@am__append_3182 = multiboot2.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3183 = +@COND_i386_ieee1275_TRUE@am__append_3184 = $(nodist_multiboot2_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3185 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ multiboot2.marker +@COND_i386_ieee1275_TRUE@am__append_3186 = multiboot2.mod +@COND_i386_ieee1275_TRUE@am__append_3187 = multiboot2.marker +@COND_x86_64_efi_TRUE@am__append_3188 = multiboot2.module +@COND_x86_64_efi_TRUE@am__append_3189 = multiboot2.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3190 = +@COND_x86_64_efi_TRUE@am__append_3191 = $(nodist_multiboot2_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3192 = \ +@COND_x86_64_efi_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ multiboot2.marker +@COND_x86_64_efi_TRUE@am__append_3193 = multiboot2.mod +@COND_x86_64_efi_TRUE@am__append_3194 = multiboot2.marker +@COND_mips_loongson_TRUE@am__append_3195 = multiboot2.module +@COND_mips_loongson_TRUE@am__append_3196 = multiboot2.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_3197 = +@COND_mips_loongson_TRUE@am__append_3198 = $(nodist_multiboot2_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_3199 = \ +@COND_mips_loongson_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_mips_loongson_TRUE@ multiboot2.marker +@COND_mips_loongson_TRUE@am__append_3200 = multiboot2.mod +@COND_mips_loongson_TRUE@am__append_3201 = multiboot2.marker +@COND_mips_arc_TRUE@am__append_3202 = multiboot2.module +@COND_mips_arc_TRUE@am__append_3203 = multiboot2.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_3204 = +@COND_mips_arc_TRUE@am__append_3205 = $(nodist_multiboot2_module_SOURCES) +@COND_mips_arc_TRUE@am__append_3206 = \ +@COND_mips_arc_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_mips_arc_TRUE@ multiboot2.marker +@COND_mips_arc_TRUE@am__append_3207 = multiboot2.mod +@COND_mips_arc_TRUE@am__append_3208 = multiboot2.marker +@COND_mips_qemu_mips_TRUE@am__append_3209 = multiboot2.module +@COND_mips_qemu_mips_TRUE@am__append_3210 = multiboot2.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_3211 = +@COND_mips_qemu_mips_TRUE@am__append_3212 = $(nodist_multiboot2_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_3213 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_multiboot2_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ multiboot2.marker +@COND_mips_qemu_mips_TRUE@am__append_3214 = multiboot2.mod +@COND_mips_qemu_mips_TRUE@am__append_3215 = multiboot2.marker +@COND_i386_pc_TRUE@am__append_3216 = multiboot.module +@COND_i386_pc_TRUE@am__append_3217 = multiboot.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@multiboot_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3218 = loader/multiboot_elfxx.c +@COND_i386_pc_TRUE@am__append_3219 = $(nodist_multiboot_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3220 = \ +@COND_i386_pc_TRUE@ $(nodist_multiboot_module_SOURCES) \ +@COND_i386_pc_TRUE@ multiboot.marker +@COND_i386_pc_TRUE@am__append_3221 = multiboot.mod +@COND_i386_pc_TRUE@am__append_3222 = multiboot.marker +@COND_i386_efi_TRUE@am__append_3223 = multiboot.module +@COND_i386_efi_TRUE@am__append_3224 = multiboot.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3225 = loader/multiboot_elfxx.c +@COND_i386_efi_TRUE@am__append_3226 = $(nodist_multiboot_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3227 = \ +@COND_i386_efi_TRUE@ $(nodist_multiboot_module_SOURCES) \ +@COND_i386_efi_TRUE@ multiboot.marker +@COND_i386_efi_TRUE@am__append_3228 = multiboot.mod +@COND_i386_efi_TRUE@am__append_3229 = multiboot.marker +@COND_i386_qemu_TRUE@am__append_3230 = multiboot.module +@COND_i386_qemu_TRUE@am__append_3231 = multiboot.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3232 = loader/multiboot_elfxx.c +@COND_i386_qemu_TRUE@am__append_3233 = $(nodist_multiboot_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3234 = \ +@COND_i386_qemu_TRUE@ $(nodist_multiboot_module_SOURCES) \ +@COND_i386_qemu_TRUE@ multiboot.marker +@COND_i386_qemu_TRUE@am__append_3235 = multiboot.mod +@COND_i386_qemu_TRUE@am__append_3236 = multiboot.marker +@COND_i386_coreboot_TRUE@am__append_3237 = multiboot.module +@COND_i386_coreboot_TRUE@am__append_3238 = multiboot.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3239 = loader/multiboot_elfxx.c +@COND_i386_coreboot_TRUE@am__append_3240 = $(nodist_multiboot_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3241 = \ +@COND_i386_coreboot_TRUE@ $(nodist_multiboot_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ multiboot.marker +@COND_i386_coreboot_TRUE@am__append_3242 = multiboot.mod +@COND_i386_coreboot_TRUE@am__append_3243 = multiboot.marker +@COND_i386_multiboot_TRUE@am__append_3244 = multiboot.module +@COND_i386_multiboot_TRUE@am__append_3245 = multiboot.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3246 = loader/multiboot_elfxx.c +@COND_i386_multiboot_TRUE@am__append_3247 = $(nodist_multiboot_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3248 = \ +@COND_i386_multiboot_TRUE@ $(nodist_multiboot_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ multiboot.marker +@COND_i386_multiboot_TRUE@am__append_3249 = multiboot.mod +@COND_i386_multiboot_TRUE@am__append_3250 = multiboot.marker +@COND_i386_ieee1275_TRUE@am__append_3251 = multiboot.module +@COND_i386_ieee1275_TRUE@am__append_3252 = multiboot.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3253 = loader/multiboot_elfxx.c +@COND_i386_ieee1275_TRUE@am__append_3254 = $(nodist_multiboot_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3255 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_multiboot_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ multiboot.marker +@COND_i386_ieee1275_TRUE@am__append_3256 = multiboot.mod +@COND_i386_ieee1275_TRUE@am__append_3257 = multiboot.marker +@COND_x86_64_efi_TRUE@am__append_3258 = multiboot.module +@COND_x86_64_efi_TRUE@am__append_3259 = multiboot.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3260 = loader/multiboot_elfxx.c +@COND_x86_64_efi_TRUE@am__append_3261 = $(nodist_multiboot_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3262 = \ +@COND_x86_64_efi_TRUE@ $(nodist_multiboot_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ multiboot.marker +@COND_x86_64_efi_TRUE@am__append_3263 = multiboot.mod +@COND_x86_64_efi_TRUE@am__append_3264 = multiboot.marker +@COND_arm64_efi_TRUE@am__append_3265 = xen_boot.module +@COND_arm64_efi_TRUE@am__append_3266 = xen_boot.module$(EXEEXT) +@COND_arm64_efi_FALSE@xen_boot_module_DEPENDENCIES = +@COND_arm64_efi_TRUE@am__append_3267 = +@COND_arm64_efi_TRUE@am__append_3268 = $(nodist_xen_boot_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3269 = \ +@COND_arm64_efi_TRUE@ $(nodist_xen_boot_module_SOURCES) \ +@COND_arm64_efi_TRUE@ xen_boot.marker +@COND_arm64_efi_TRUE@am__append_3270 = xen_boot.mod +@COND_arm64_efi_TRUE@am__append_3271 = xen_boot.marker +@COND_i386_pc_TRUE@am__append_3272 = linux.module +@COND_i386_pc_TRUE@am__append_3273 = linux.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@linux_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3274 = +@COND_i386_pc_TRUE@am__append_3275 = $(nodist_linux_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3276 = $(nodist_linux_module_SOURCES) \ +@COND_i386_pc_TRUE@ linux.marker +@COND_i386_pc_TRUE@am__append_3277 = linux.mod +@COND_i386_pc_TRUE@am__append_3278 = linux.marker +@COND_i386_efi_TRUE@am__append_3279 = linux.module +@COND_i386_efi_TRUE@am__append_3280 = linux.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3281 = +@COND_i386_efi_TRUE@am__append_3282 = $(nodist_linux_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3283 = $(nodist_linux_module_SOURCES) \ +@COND_i386_efi_TRUE@ linux.marker +@COND_i386_efi_TRUE@am__append_3284 = linux.mod +@COND_i386_efi_TRUE@am__append_3285 = linux.marker +@COND_i386_qemu_TRUE@am__append_3286 = linux.module +@COND_i386_qemu_TRUE@am__append_3287 = linux.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3288 = +@COND_i386_qemu_TRUE@am__append_3289 = $(nodist_linux_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3290 = $(nodist_linux_module_SOURCES) \ +@COND_i386_qemu_TRUE@ linux.marker +@COND_i386_qemu_TRUE@am__append_3291 = linux.mod +@COND_i386_qemu_TRUE@am__append_3292 = linux.marker +@COND_i386_coreboot_TRUE@am__append_3293 = linux.module +@COND_i386_coreboot_TRUE@am__append_3294 = linux.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3295 = +@COND_i386_coreboot_TRUE@am__append_3296 = $(nodist_linux_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3297 = \ +@COND_i386_coreboot_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ linux.marker +@COND_i386_coreboot_TRUE@am__append_3298 = linux.mod +@COND_i386_coreboot_TRUE@am__append_3299 = linux.marker +@COND_i386_multiboot_TRUE@am__append_3300 = linux.module +@COND_i386_multiboot_TRUE@am__append_3301 = linux.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3302 = +@COND_i386_multiboot_TRUE@am__append_3303 = $(nodist_linux_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3304 = \ +@COND_i386_multiboot_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ linux.marker +@COND_i386_multiboot_TRUE@am__append_3305 = linux.mod +@COND_i386_multiboot_TRUE@am__append_3306 = linux.marker +@COND_i386_ieee1275_TRUE@am__append_3307 = linux.module +@COND_i386_ieee1275_TRUE@am__append_3308 = linux.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3309 = +@COND_i386_ieee1275_TRUE@am__append_3310 = $(nodist_linux_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3311 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ linux.marker +@COND_i386_ieee1275_TRUE@am__append_3312 = linux.mod +@COND_i386_ieee1275_TRUE@am__append_3313 = linux.marker +@COND_x86_64_efi_TRUE@am__append_3314 = linux.module +@COND_x86_64_efi_TRUE@am__append_3315 = linux.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3316 = +@COND_x86_64_efi_TRUE@am__append_3317 = $(nodist_linux_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3318 = \ +@COND_x86_64_efi_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ linux.marker +@COND_x86_64_efi_TRUE@am__append_3319 = linux.mod +@COND_x86_64_efi_TRUE@am__append_3320 = linux.marker +@COND_i386_xen_TRUE@am__append_3321 = linux.module +@COND_i386_xen_TRUE@am__append_3322 = linux.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_3323 = +@COND_i386_xen_TRUE@am__append_3324 = $(nodist_linux_module_SOURCES) +@COND_i386_xen_TRUE@am__append_3325 = $(nodist_linux_module_SOURCES) \ +@COND_i386_xen_TRUE@ linux.marker +@COND_i386_xen_TRUE@am__append_3326 = linux.mod +@COND_i386_xen_TRUE@am__append_3327 = linux.marker +@COND_x86_64_xen_TRUE@am__append_3328 = linux.module +@COND_x86_64_xen_TRUE@am__append_3329 = linux.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_3330 = +@COND_x86_64_xen_TRUE@am__append_3331 = $(nodist_linux_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_3332 = \ +@COND_x86_64_xen_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ linux.marker +@COND_x86_64_xen_TRUE@am__append_3333 = linux.mod +@COND_x86_64_xen_TRUE@am__append_3334 = linux.marker +@COND_mips_loongson_TRUE@am__append_3335 = linux.module +@COND_mips_loongson_TRUE@am__append_3336 = linux.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_3337 = +@COND_mips_loongson_TRUE@am__append_3338 = $(nodist_linux_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_3339 = \ +@COND_mips_loongson_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_mips_loongson_TRUE@ linux.marker +@COND_mips_loongson_TRUE@am__append_3340 = linux.mod +@COND_mips_loongson_TRUE@am__append_3341 = linux.marker +@COND_sparc64_ieee1275_TRUE@am__append_3342 = linux.module +@COND_sparc64_ieee1275_TRUE@am__append_3343 = linux.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_3344 = +@COND_sparc64_ieee1275_TRUE@am__append_3345 = $(nodist_linux_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_3346 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ linux.marker +@COND_sparc64_ieee1275_TRUE@am__append_3347 = linux.mod +@COND_sparc64_ieee1275_TRUE@am__append_3348 = linux.marker +@COND_powerpc_ieee1275_TRUE@am__append_3349 = linux.module +@COND_powerpc_ieee1275_TRUE@am__append_3350 = linux.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_3351 = +@COND_powerpc_ieee1275_TRUE@am__append_3352 = $(nodist_linux_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_3353 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ linux.marker +@COND_powerpc_ieee1275_TRUE@am__append_3354 = linux.mod +@COND_powerpc_ieee1275_TRUE@am__append_3355 = linux.marker +@COND_mips_arc_TRUE@am__append_3356 = linux.module +@COND_mips_arc_TRUE@am__append_3357 = linux.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_3358 = +@COND_mips_arc_TRUE@am__append_3359 = $(nodist_linux_module_SOURCES) +@COND_mips_arc_TRUE@am__append_3360 = $(nodist_linux_module_SOURCES) \ +@COND_mips_arc_TRUE@ linux.marker +@COND_mips_arc_TRUE@am__append_3361 = linux.mod +@COND_mips_arc_TRUE@am__append_3362 = linux.marker +@COND_ia64_efi_TRUE@am__append_3363 = linux.module +@COND_ia64_efi_TRUE@am__append_3364 = linux.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_3365 = +@COND_ia64_efi_TRUE@am__append_3366 = $(nodist_linux_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_3367 = $(nodist_linux_module_SOURCES) \ +@COND_ia64_efi_TRUE@ linux.marker +@COND_ia64_efi_TRUE@am__append_3368 = linux.mod +@COND_ia64_efi_TRUE@am__append_3369 = linux.marker +@COND_mips_qemu_mips_TRUE@am__append_3370 = linux.module +@COND_mips_qemu_mips_TRUE@am__append_3371 = linux.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_3372 = +@COND_mips_qemu_mips_TRUE@am__append_3373 = $(nodist_linux_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_3374 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_linux_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ linux.marker +@COND_mips_qemu_mips_TRUE@am__append_3375 = linux.mod +@COND_mips_qemu_mips_TRUE@am__append_3376 = linux.marker +@COND_arm_uboot_TRUE@am__append_3377 = linux.module +@COND_arm_uboot_TRUE@am__append_3378 = linux.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_3379 = +@COND_arm_uboot_TRUE@am__append_3380 = $(nodist_linux_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_3381 = $(nodist_linux_module_SOURCES) \ +@COND_arm_uboot_TRUE@ linux.marker +@COND_arm_uboot_TRUE@am__append_3382 = linux.mod +@COND_arm_uboot_TRUE@am__append_3383 = linux.marker +@COND_arm_efi_TRUE@am__append_3384 = linux.module +@COND_arm_efi_TRUE@am__append_3385 = linux.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_3386 = +@COND_arm_efi_TRUE@am__append_3387 = $(nodist_linux_module_SOURCES) +@COND_arm_efi_TRUE@am__append_3388 = $(nodist_linux_module_SOURCES) \ +@COND_arm_efi_TRUE@ linux.marker +@COND_arm_efi_TRUE@am__append_3389 = linux.mod +@COND_arm_efi_TRUE@am__append_3390 = linux.marker +@COND_arm64_efi_TRUE@am__append_3391 = linux.module +@COND_arm64_efi_TRUE@am__append_3392 = linux.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_3393 = +@COND_arm64_efi_TRUE@am__append_3394 = $(nodist_linux_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3395 = $(nodist_linux_module_SOURCES) \ +@COND_arm64_efi_TRUE@ linux.marker +@COND_arm64_efi_TRUE@am__append_3396 = linux.mod +@COND_arm64_efi_TRUE@am__append_3397 = linux.marker +@COND_arm_uboot_TRUE@am__append_3398 = fdt.module +@COND_arm_uboot_TRUE@am__append_3399 = fdt.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@fdt_module_DEPENDENCIES = +@COND_arm_uboot_TRUE@am__append_3400 = +@COND_arm_uboot_TRUE@am__append_3401 = $(nodist_fdt_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_3402 = $(nodist_fdt_module_SOURCES) \ +@COND_arm_uboot_TRUE@ fdt.marker +@COND_arm_uboot_TRUE@am__append_3403 = fdt.mod +@COND_arm_uboot_TRUE@am__append_3404 = fdt.marker +@COND_arm_efi_TRUE@am__append_3405 = fdt.module +@COND_arm_efi_TRUE@am__append_3406 = fdt.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_3407 = +@COND_arm_efi_TRUE@am__append_3408 = $(nodist_fdt_module_SOURCES) +@COND_arm_efi_TRUE@am__append_3409 = $(nodist_fdt_module_SOURCES) \ +@COND_arm_efi_TRUE@ fdt.marker +@COND_arm_efi_TRUE@am__append_3410 = fdt.mod +@COND_arm_efi_TRUE@am__append_3411 = fdt.marker +@COND_arm64_efi_TRUE@am__append_3412 = fdt.module +@COND_arm64_efi_TRUE@am__append_3413 = fdt.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_3414 = +@COND_arm64_efi_TRUE@am__append_3415 = $(nodist_fdt_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3416 = $(nodist_fdt_module_SOURCES) \ +@COND_arm64_efi_TRUE@ fdt.marker +@COND_arm64_efi_TRUE@am__append_3417 = fdt.mod +@COND_arm64_efi_TRUE@am__append_3418 = fdt.marker +@COND_i386_pc_TRUE@am__append_3419 = xnu.module +@COND_i386_pc_TRUE@am__append_3420 = xnu.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_FALSE@xnu_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3421 = +@COND_i386_pc_TRUE@am__append_3422 = $(nodist_xnu_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3423 = $(nodist_xnu_module_SOURCES) \ +@COND_i386_pc_TRUE@ xnu.marker +@COND_i386_pc_TRUE@am__append_3424 = xnu.mod +@COND_i386_pc_TRUE@am__append_3425 = xnu.marker +@COND_i386_efi_TRUE@am__append_3426 = xnu.module +@COND_i386_efi_TRUE@am__append_3427 = xnu.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3428 = +@COND_i386_efi_TRUE@am__append_3429 = $(nodist_xnu_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3430 = $(nodist_xnu_module_SOURCES) \ +@COND_i386_efi_TRUE@ xnu.marker +@COND_i386_efi_TRUE@am__append_3431 = xnu.mod +@COND_i386_efi_TRUE@am__append_3432 = xnu.marker +@COND_i386_coreboot_TRUE@am__append_3433 = xnu.module +@COND_i386_coreboot_TRUE@am__append_3434 = xnu.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3435 = +@COND_i386_coreboot_TRUE@am__append_3436 = $(nodist_xnu_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3437 = \ +@COND_i386_coreboot_TRUE@ $(nodist_xnu_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ xnu.marker +@COND_i386_coreboot_TRUE@am__append_3438 = xnu.mod +@COND_i386_coreboot_TRUE@am__append_3439 = xnu.marker +@COND_i386_multiboot_TRUE@am__append_3440 = xnu.module +@COND_i386_multiboot_TRUE@am__append_3441 = xnu.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3442 = +@COND_i386_multiboot_TRUE@am__append_3443 = $(nodist_xnu_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3444 = \ +@COND_i386_multiboot_TRUE@ $(nodist_xnu_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ xnu.marker +@COND_i386_multiboot_TRUE@am__append_3445 = xnu.mod +@COND_i386_multiboot_TRUE@am__append_3446 = xnu.marker +@COND_x86_64_efi_TRUE@am__append_3447 = xnu.module +@COND_x86_64_efi_TRUE@am__append_3448 = xnu.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3449 = +@COND_x86_64_efi_TRUE@am__append_3450 = $(nodist_xnu_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3451 = $(nodist_xnu_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ xnu.marker +@COND_x86_64_efi_TRUE@am__append_3452 = xnu.mod +@COND_x86_64_efi_TRUE@am__append_3453 = xnu.marker +@COND_i386_pc_TRUE@am__append_3454 = random.module +@COND_i386_pc_TRUE@am__append_3455 = random.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_FALSE@random_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3456 = +@COND_i386_pc_TRUE@am__append_3457 = $(nodist_random_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3458 = $(nodist_random_module_SOURCES) \ +@COND_i386_pc_TRUE@ random.marker +@COND_i386_pc_TRUE@am__append_3459 = random.mod +@COND_i386_pc_TRUE@am__append_3460 = random.marker +@COND_i386_efi_TRUE@am__append_3461 = random.module +@COND_i386_efi_TRUE@am__append_3462 = random.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3463 = +@COND_i386_efi_TRUE@am__append_3464 = $(nodist_random_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3465 = $(nodist_random_module_SOURCES) \ +@COND_i386_efi_TRUE@ random.marker +@COND_i386_efi_TRUE@am__append_3466 = random.mod +@COND_i386_efi_TRUE@am__append_3467 = random.marker +@COND_i386_coreboot_TRUE@am__append_3468 = random.module +@COND_i386_coreboot_TRUE@am__append_3469 = random.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3470 = +@COND_i386_coreboot_TRUE@am__append_3471 = $(nodist_random_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3472 = \ +@COND_i386_coreboot_TRUE@ $(nodist_random_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ random.marker +@COND_i386_coreboot_TRUE@am__append_3473 = random.mod +@COND_i386_coreboot_TRUE@am__append_3474 = random.marker +@COND_i386_multiboot_TRUE@am__append_3475 = random.module +@COND_i386_multiboot_TRUE@am__append_3476 = random.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3477 = +@COND_i386_multiboot_TRUE@am__append_3478 = $(nodist_random_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3479 = \ +@COND_i386_multiboot_TRUE@ $(nodist_random_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ random.marker +@COND_i386_multiboot_TRUE@am__append_3480 = random.mod +@COND_i386_multiboot_TRUE@am__append_3481 = random.marker +@COND_x86_64_efi_TRUE@am__append_3482 = random.module +@COND_x86_64_efi_TRUE@am__append_3483 = random.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3484 = +@COND_x86_64_efi_TRUE@am__append_3485 = $(nodist_random_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3486 = \ +@COND_x86_64_efi_TRUE@ $(nodist_random_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ random.marker +@COND_x86_64_efi_TRUE@am__append_3487 = random.mod +@COND_x86_64_efi_TRUE@am__append_3488 = random.marker +@COND_i386_efi_TRUE@am__append_3489 = appleldr.module +@COND_i386_efi_TRUE@am__append_3490 = appleldr.module$(EXEEXT) +@COND_i386_efi_FALSE@@COND_x86_64_efi_FALSE@appleldr_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_3491 = +@COND_i386_efi_TRUE@am__append_3492 = $(nodist_appleldr_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3493 = \ +@COND_i386_efi_TRUE@ $(nodist_appleldr_module_SOURCES) \ +@COND_i386_efi_TRUE@ appleldr.marker +@COND_i386_efi_TRUE@am__append_3494 = appleldr.mod +@COND_i386_efi_TRUE@am__append_3495 = appleldr.marker +@COND_x86_64_efi_TRUE@am__append_3496 = appleldr.module +@COND_x86_64_efi_TRUE@am__append_3497 = appleldr.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3498 = +@COND_x86_64_efi_TRUE@am__append_3499 = $(nodist_appleldr_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3500 = \ +@COND_x86_64_efi_TRUE@ $(nodist_appleldr_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ appleldr.marker +@COND_x86_64_efi_TRUE@am__append_3501 = appleldr.mod +@COND_x86_64_efi_TRUE@am__append_3502 = appleldr.marker +@COND_i386_pc_TRUE@am__append_3503 = chain.module +@COND_i386_pc_TRUE@am__append_3504 = chain.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@chain_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3505 = +@COND_i386_pc_TRUE@am__append_3506 = $(nodist_chain_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3507 = $(nodist_chain_module_SOURCES) \ +@COND_i386_pc_TRUE@ chain.marker +@COND_i386_pc_TRUE@am__append_3508 = chain.mod +@COND_i386_pc_TRUE@am__append_3509 = chain.marker +@COND_i386_efi_TRUE@am__append_3510 = chain.module +@COND_i386_efi_TRUE@am__append_3511 = chain.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3512 = +@COND_i386_efi_TRUE@am__append_3513 = $(nodist_chain_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3514 = $(nodist_chain_module_SOURCES) \ +@COND_i386_efi_TRUE@ chain.marker +@COND_i386_efi_TRUE@am__append_3515 = chain.mod +@COND_i386_efi_TRUE@am__append_3516 = chain.marker +@COND_i386_coreboot_TRUE@am__append_3517 = chain.module +@COND_i386_coreboot_TRUE@am__append_3518 = chain.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3519 = +@COND_i386_coreboot_TRUE@am__append_3520 = $(nodist_chain_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3521 = \ +@COND_i386_coreboot_TRUE@ $(nodist_chain_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ chain.marker +@COND_i386_coreboot_TRUE@am__append_3522 = chain.mod +@COND_i386_coreboot_TRUE@am__append_3523 = chain.marker +@COND_x86_64_efi_TRUE@am__append_3524 = chain.module +@COND_x86_64_efi_TRUE@am__append_3525 = chain.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3526 = +@COND_x86_64_efi_TRUE@am__append_3527 = $(nodist_chain_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3528 = \ +@COND_x86_64_efi_TRUE@ $(nodist_chain_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ chain.marker +@COND_x86_64_efi_TRUE@am__append_3529 = chain.mod +@COND_x86_64_efi_TRUE@am__append_3530 = chain.marker +@COND_ia64_efi_TRUE@am__append_3531 = chain.module +@COND_ia64_efi_TRUE@am__append_3532 = chain.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_3533 = +@COND_ia64_efi_TRUE@am__append_3534 = $(nodist_chain_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_3535 = $(nodist_chain_module_SOURCES) \ +@COND_ia64_efi_TRUE@ chain.marker +@COND_ia64_efi_TRUE@am__append_3536 = chain.mod +@COND_ia64_efi_TRUE@am__append_3537 = chain.marker +@COND_arm_efi_TRUE@am__append_3538 = chain.module +@COND_arm_efi_TRUE@am__append_3539 = chain.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_3540 = +@COND_arm_efi_TRUE@am__append_3541 = $(nodist_chain_module_SOURCES) +@COND_arm_efi_TRUE@am__append_3542 = $(nodist_chain_module_SOURCES) \ +@COND_arm_efi_TRUE@ chain.marker +@COND_arm_efi_TRUE@am__append_3543 = chain.mod +@COND_arm_efi_TRUE@am__append_3544 = chain.marker +@COND_arm64_efi_TRUE@am__append_3545 = chain.module +@COND_arm64_efi_TRUE@am__append_3546 = chain.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_3547 = +@COND_arm64_efi_TRUE@am__append_3548 = $(nodist_chain_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3549 = $(nodist_chain_module_SOURCES) \ +@COND_arm64_efi_TRUE@ chain.marker +@COND_arm64_efi_TRUE@am__append_3550 = chain.mod +@COND_arm64_efi_TRUE@am__append_3551 = chain.marker +@COND_i386_pc_TRUE@am__append_3552 = mmap.module +@COND_i386_pc_TRUE@am__append_3553 = mmap.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_FALSE@mmap_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3554 = +@COND_i386_pc_TRUE@am__append_3555 = $(nodist_mmap_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3556 = $(nodist_mmap_module_SOURCES) \ +@COND_i386_pc_TRUE@ mmap.marker +@COND_i386_pc_TRUE@am__append_3557 = mmap.mod +@COND_i386_pc_TRUE@am__append_3558 = mmap.marker +@COND_i386_efi_TRUE@am__append_3559 = mmap.module +@COND_i386_efi_TRUE@am__append_3560 = mmap.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3561 = +@COND_i386_efi_TRUE@am__append_3562 = $(nodist_mmap_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3563 = $(nodist_mmap_module_SOURCES) \ +@COND_i386_efi_TRUE@ mmap.marker +@COND_i386_efi_TRUE@am__append_3564 = mmap.mod +@COND_i386_efi_TRUE@am__append_3565 = mmap.marker +@COND_i386_qemu_TRUE@am__append_3566 = mmap.module +@COND_i386_qemu_TRUE@am__append_3567 = mmap.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3568 = +@COND_i386_qemu_TRUE@am__append_3569 = $(nodist_mmap_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3570 = $(nodist_mmap_module_SOURCES) \ +@COND_i386_qemu_TRUE@ mmap.marker +@COND_i386_qemu_TRUE@am__append_3571 = mmap.mod +@COND_i386_qemu_TRUE@am__append_3572 = mmap.marker +@COND_i386_coreboot_TRUE@am__append_3573 = mmap.module +@COND_i386_coreboot_TRUE@am__append_3574 = mmap.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3575 = +@COND_i386_coreboot_TRUE@am__append_3576 = $(nodist_mmap_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3577 = \ +@COND_i386_coreboot_TRUE@ $(nodist_mmap_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ mmap.marker +@COND_i386_coreboot_TRUE@am__append_3578 = mmap.mod +@COND_i386_coreboot_TRUE@am__append_3579 = mmap.marker +@COND_i386_multiboot_TRUE@am__append_3580 = mmap.module +@COND_i386_multiboot_TRUE@am__append_3581 = mmap.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3582 = +@COND_i386_multiboot_TRUE@am__append_3583 = $(nodist_mmap_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3584 = \ +@COND_i386_multiboot_TRUE@ $(nodist_mmap_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ mmap.marker +@COND_i386_multiboot_TRUE@am__append_3585 = mmap.mod +@COND_i386_multiboot_TRUE@am__append_3586 = mmap.marker +@COND_i386_ieee1275_TRUE@am__append_3587 = mmap.module +@COND_i386_ieee1275_TRUE@am__append_3588 = mmap.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3589 = +@COND_i386_ieee1275_TRUE@am__append_3590 = $(nodist_mmap_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3591 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_mmap_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ mmap.marker +@COND_i386_ieee1275_TRUE@am__append_3592 = mmap.mod +@COND_i386_ieee1275_TRUE@am__append_3593 = mmap.marker +@COND_x86_64_efi_TRUE@am__append_3594 = mmap.module +@COND_x86_64_efi_TRUE@am__append_3595 = mmap.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3596 = +@COND_x86_64_efi_TRUE@am__append_3597 = $(nodist_mmap_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3598 = $(nodist_mmap_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ mmap.marker +@COND_x86_64_efi_TRUE@am__append_3599 = mmap.mod +@COND_x86_64_efi_TRUE@am__append_3600 = mmap.marker +@COND_mips_loongson_TRUE@am__append_3601 = mmap.module +@COND_mips_loongson_TRUE@am__append_3602 = mmap.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_3603 = +@COND_mips_loongson_TRUE@am__append_3604 = $(nodist_mmap_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_3605 = \ +@COND_mips_loongson_TRUE@ $(nodist_mmap_module_SOURCES) \ +@COND_mips_loongson_TRUE@ mmap.marker +@COND_mips_loongson_TRUE@am__append_3606 = mmap.mod +@COND_mips_loongson_TRUE@am__append_3607 = mmap.marker +@COND_mips_arc_TRUE@am__append_3608 = mmap.module +@COND_mips_arc_TRUE@am__append_3609 = mmap.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_3610 = +@COND_mips_arc_TRUE@am__append_3611 = $(nodist_mmap_module_SOURCES) +@COND_mips_arc_TRUE@am__append_3612 = $(nodist_mmap_module_SOURCES) \ +@COND_mips_arc_TRUE@ mmap.marker +@COND_mips_arc_TRUE@am__append_3613 = mmap.mod +@COND_mips_arc_TRUE@am__append_3614 = mmap.marker +@COND_ia64_efi_TRUE@am__append_3615 = mmap.module +@COND_ia64_efi_TRUE@am__append_3616 = mmap.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_3617 = +@COND_ia64_efi_TRUE@am__append_3618 = $(nodist_mmap_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_3619 = $(nodist_mmap_module_SOURCES) \ +@COND_ia64_efi_TRUE@ mmap.marker +@COND_ia64_efi_TRUE@am__append_3620 = mmap.mod +@COND_ia64_efi_TRUE@am__append_3621 = mmap.marker +@COND_mips_qemu_mips_TRUE@am__append_3622 = mmap.module +@COND_mips_qemu_mips_TRUE@am__append_3623 = mmap.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_3624 = +@COND_mips_qemu_mips_TRUE@am__append_3625 = $(nodist_mmap_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_3626 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_mmap_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ mmap.marker +@COND_mips_qemu_mips_TRUE@am__append_3627 = mmap.mod +@COND_mips_qemu_mips_TRUE@am__append_3628 = mmap.marker +@COND_arm_efi_TRUE@am__append_3629 = mmap.module +@COND_arm_efi_TRUE@am__append_3630 = mmap.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_3631 = +@COND_arm_efi_TRUE@am__append_3632 = $(nodist_mmap_module_SOURCES) +@COND_arm_efi_TRUE@am__append_3633 = $(nodist_mmap_module_SOURCES) \ +@COND_arm_efi_TRUE@ mmap.marker +@COND_arm_efi_TRUE@am__append_3634 = mmap.mod +@COND_arm_efi_TRUE@am__append_3635 = mmap.marker +@COND_arm64_efi_TRUE@am__append_3636 = mmap.module +@COND_arm64_efi_TRUE@am__append_3637 = mmap.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_3638 = +@COND_arm64_efi_TRUE@am__append_3639 = $(nodist_mmap_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3640 = $(nodist_mmap_module_SOURCES) \ +@COND_arm64_efi_TRUE@ mmap.marker +@COND_arm64_efi_TRUE@am__append_3641 = mmap.mod +@COND_arm64_efi_TRUE@am__append_3642 = mmap.marker +@COND_i386_pc_TRUE@am__append_3643 = at_keyboard.module +@COND_i386_pc_TRUE@am__append_3644 = at_keyboard.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@at_keyboard_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3645 = +@COND_i386_pc_TRUE@am__append_3646 = $(nodist_at_keyboard_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3647 = \ +@COND_i386_pc_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ +@COND_i386_pc_TRUE@ at_keyboard.marker +@COND_i386_pc_TRUE@am__append_3648 = at_keyboard.mod +@COND_i386_pc_TRUE@am__append_3649 = at_keyboard.marker +@COND_i386_efi_TRUE@am__append_3650 = at_keyboard.module +@COND_i386_efi_TRUE@am__append_3651 = at_keyboard.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3652 = +@COND_i386_efi_TRUE@am__append_3653 = $(nodist_at_keyboard_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3654 = \ +@COND_i386_efi_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ +@COND_i386_efi_TRUE@ at_keyboard.marker +@COND_i386_efi_TRUE@am__append_3655 = at_keyboard.mod +@COND_i386_efi_TRUE@am__append_3656 = at_keyboard.marker +@COND_i386_qemu_TRUE@am__append_3657 = at_keyboard.module +@COND_i386_qemu_TRUE@am__append_3658 = at_keyboard.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3659 = +@COND_i386_qemu_TRUE@am__append_3660 = $(nodist_at_keyboard_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3661 = \ +@COND_i386_qemu_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ +@COND_i386_qemu_TRUE@ at_keyboard.marker +@COND_i386_qemu_TRUE@am__append_3662 = at_keyboard.mod +@COND_i386_qemu_TRUE@am__append_3663 = at_keyboard.marker +@COND_i386_coreboot_TRUE@am__append_3664 = at_keyboard.module +@COND_i386_coreboot_TRUE@am__append_3665 = at_keyboard.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3666 = +@COND_i386_coreboot_TRUE@am__append_3667 = $(nodist_at_keyboard_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3668 = \ +@COND_i386_coreboot_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ at_keyboard.marker +@COND_i386_coreboot_TRUE@am__append_3669 = at_keyboard.mod +@COND_i386_coreboot_TRUE@am__append_3670 = at_keyboard.marker +@COND_i386_multiboot_TRUE@am__append_3671 = at_keyboard.module +@COND_i386_multiboot_TRUE@am__append_3672 = at_keyboard.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3673 = +@COND_i386_multiboot_TRUE@am__append_3674 = $(nodist_at_keyboard_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3675 = $(nodist_at_keyboard_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ at_keyboard.marker +@COND_i386_multiboot_TRUE@am__append_3676 = at_keyboard.mod +@COND_i386_multiboot_TRUE@am__append_3677 = at_keyboard.marker +@COND_i386_ieee1275_TRUE@am__append_3678 = at_keyboard.module +@COND_i386_ieee1275_TRUE@am__append_3679 = at_keyboard.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3680 = +@COND_i386_ieee1275_TRUE@am__append_3681 = $(nodist_at_keyboard_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3682 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ at_keyboard.marker +@COND_i386_ieee1275_TRUE@am__append_3683 = at_keyboard.mod +@COND_i386_ieee1275_TRUE@am__append_3684 = at_keyboard.marker +@COND_x86_64_efi_TRUE@am__append_3685 = at_keyboard.module +@COND_x86_64_efi_TRUE@am__append_3686 = at_keyboard.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3687 = +@COND_x86_64_efi_TRUE@am__append_3688 = $(nodist_at_keyboard_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3689 = \ +@COND_x86_64_efi_TRUE@ $(nodist_at_keyboard_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ at_keyboard.marker +@COND_x86_64_efi_TRUE@am__append_3690 = at_keyboard.mod +@COND_x86_64_efi_TRUE@am__append_3691 = at_keyboard.marker +@COND_emu_TRUE@am__append_3692 = gfxterm.module +@COND_emu_TRUE@am__append_3693 = gfxterm.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@gfxterm_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_3694 = +@COND_emu_TRUE@am__append_3695 = $(nodist_gfxterm_module_SOURCES) +@COND_emu_TRUE@am__append_3696 = $(nodist_gfxterm_module_SOURCES) \ +@COND_emu_TRUE@ gfxterm.marker +@COND_emu_TRUE@am__append_3697 = gfxterm.mod +@COND_emu_TRUE@am__append_3698 = gfxterm.marker +@COND_i386_pc_TRUE@am__append_3699 = gfxterm.module +@COND_i386_pc_TRUE@am__append_3700 = gfxterm.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_3701 = +@COND_i386_pc_TRUE@am__append_3702 = $(nodist_gfxterm_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3703 = $(nodist_gfxterm_module_SOURCES) \ +@COND_i386_pc_TRUE@ gfxterm.marker +@COND_i386_pc_TRUE@am__append_3704 = gfxterm.mod +@COND_i386_pc_TRUE@am__append_3705 = gfxterm.marker +@COND_i386_efi_TRUE@am__append_3706 = gfxterm.module +@COND_i386_efi_TRUE@am__append_3707 = gfxterm.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3708 = +@COND_i386_efi_TRUE@am__append_3709 = $(nodist_gfxterm_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3710 = \ +@COND_i386_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_i386_efi_TRUE@ gfxterm.marker +@COND_i386_efi_TRUE@am__append_3711 = gfxterm.mod +@COND_i386_efi_TRUE@am__append_3712 = gfxterm.marker +@COND_i386_qemu_TRUE@am__append_3713 = gfxterm.module +@COND_i386_qemu_TRUE@am__append_3714 = gfxterm.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3715 = +@COND_i386_qemu_TRUE@am__append_3716 = $(nodist_gfxterm_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3717 = \ +@COND_i386_qemu_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_i386_qemu_TRUE@ gfxterm.marker +@COND_i386_qemu_TRUE@am__append_3718 = gfxterm.mod +@COND_i386_qemu_TRUE@am__append_3719 = gfxterm.marker +@COND_i386_multiboot_TRUE@am__append_3720 = gfxterm.module +@COND_i386_multiboot_TRUE@am__append_3721 = gfxterm.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3722 = +@COND_i386_multiboot_TRUE@am__append_3723 = $(nodist_gfxterm_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3724 = \ +@COND_i386_multiboot_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ gfxterm.marker +@COND_i386_multiboot_TRUE@am__append_3725 = gfxterm.mod +@COND_i386_multiboot_TRUE@am__append_3726 = gfxterm.marker +@COND_i386_ieee1275_TRUE@am__append_3727 = gfxterm.module +@COND_i386_ieee1275_TRUE@am__append_3728 = gfxterm.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3729 = +@COND_i386_ieee1275_TRUE@am__append_3730 = $(nodist_gfxterm_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3731 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ gfxterm.marker +@COND_i386_ieee1275_TRUE@am__append_3732 = gfxterm.mod +@COND_i386_ieee1275_TRUE@am__append_3733 = gfxterm.marker +@COND_x86_64_efi_TRUE@am__append_3734 = gfxterm.module +@COND_x86_64_efi_TRUE@am__append_3735 = gfxterm.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3736 = +@COND_x86_64_efi_TRUE@am__append_3737 = $(nodist_gfxterm_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3738 = \ +@COND_x86_64_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ gfxterm.marker +@COND_x86_64_efi_TRUE@am__append_3739 = gfxterm.mod +@COND_x86_64_efi_TRUE@am__append_3740 = gfxterm.marker +@COND_i386_xen_TRUE@am__append_3741 = gfxterm.module +@COND_i386_xen_TRUE@am__append_3742 = gfxterm.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_3743 = +@COND_i386_xen_TRUE@am__append_3744 = $(nodist_gfxterm_module_SOURCES) +@COND_i386_xen_TRUE@am__append_3745 = \ +@COND_i386_xen_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_i386_xen_TRUE@ gfxterm.marker +@COND_i386_xen_TRUE@am__append_3746 = gfxterm.mod +@COND_i386_xen_TRUE@am__append_3747 = gfxterm.marker +@COND_x86_64_xen_TRUE@am__append_3748 = gfxterm.module +@COND_x86_64_xen_TRUE@am__append_3749 = gfxterm.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_3750 = +@COND_x86_64_xen_TRUE@am__append_3751 = $(nodist_gfxterm_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_3752 = \ +@COND_x86_64_xen_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ gfxterm.marker +@COND_x86_64_xen_TRUE@am__append_3753 = gfxterm.mod +@COND_x86_64_xen_TRUE@am__append_3754 = gfxterm.marker +@COND_sparc64_ieee1275_TRUE@am__append_3755 = gfxterm.module +@COND_sparc64_ieee1275_TRUE@am__append_3756 = gfxterm.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_3757 = +@COND_sparc64_ieee1275_TRUE@am__append_3758 = $(nodist_gfxterm_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_3759 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ gfxterm.marker +@COND_sparc64_ieee1275_TRUE@am__append_3760 = gfxterm.mod +@COND_sparc64_ieee1275_TRUE@am__append_3761 = gfxterm.marker +@COND_powerpc_ieee1275_TRUE@am__append_3762 = gfxterm.module +@COND_powerpc_ieee1275_TRUE@am__append_3763 = gfxterm.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_3764 = +@COND_powerpc_ieee1275_TRUE@am__append_3765 = $(nodist_gfxterm_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_3766 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ gfxterm.marker +@COND_powerpc_ieee1275_TRUE@am__append_3767 = gfxterm.mod +@COND_powerpc_ieee1275_TRUE@am__append_3768 = gfxterm.marker +@COND_mips_arc_TRUE@am__append_3769 = gfxterm.module +@COND_mips_arc_TRUE@am__append_3770 = gfxterm.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_3771 = +@COND_mips_arc_TRUE@am__append_3772 = $(nodist_gfxterm_module_SOURCES) +@COND_mips_arc_TRUE@am__append_3773 = \ +@COND_mips_arc_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_mips_arc_TRUE@ gfxterm.marker +@COND_mips_arc_TRUE@am__append_3774 = gfxterm.mod +@COND_mips_arc_TRUE@am__append_3775 = gfxterm.marker +@COND_ia64_efi_TRUE@am__append_3776 = gfxterm.module +@COND_ia64_efi_TRUE@am__append_3777 = gfxterm.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_3778 = +@COND_ia64_efi_TRUE@am__append_3779 = $(nodist_gfxterm_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_3780 = \ +@COND_ia64_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_ia64_efi_TRUE@ gfxterm.marker +@COND_ia64_efi_TRUE@am__append_3781 = gfxterm.mod +@COND_ia64_efi_TRUE@am__append_3782 = gfxterm.marker +@COND_mips_qemu_mips_TRUE@am__append_3783 = gfxterm.module +@COND_mips_qemu_mips_TRUE@am__append_3784 = gfxterm.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_3785 = +@COND_mips_qemu_mips_TRUE@am__append_3786 = $(nodist_gfxterm_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_3787 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ gfxterm.marker +@COND_mips_qemu_mips_TRUE@am__append_3788 = gfxterm.mod +@COND_mips_qemu_mips_TRUE@am__append_3789 = gfxterm.marker +@COND_arm_uboot_TRUE@am__append_3790 = gfxterm.module +@COND_arm_uboot_TRUE@am__append_3791 = gfxterm.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_3792 = +@COND_arm_uboot_TRUE@am__append_3793 = $(nodist_gfxterm_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_3794 = \ +@COND_arm_uboot_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_arm_uboot_TRUE@ gfxterm.marker +@COND_arm_uboot_TRUE@am__append_3795 = gfxterm.mod +@COND_arm_uboot_TRUE@am__append_3796 = gfxterm.marker +@COND_arm_efi_TRUE@am__append_3797 = gfxterm.module +@COND_arm_efi_TRUE@am__append_3798 = gfxterm.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_3799 = +@COND_arm_efi_TRUE@am__append_3800 = $(nodist_gfxterm_module_SOURCES) +@COND_arm_efi_TRUE@am__append_3801 = $(nodist_gfxterm_module_SOURCES) \ +@COND_arm_efi_TRUE@ gfxterm.marker +@COND_arm_efi_TRUE@am__append_3802 = gfxterm.mod +@COND_arm_efi_TRUE@am__append_3803 = gfxterm.marker +@COND_arm64_efi_TRUE@am__append_3804 = gfxterm.module +@COND_arm64_efi_TRUE@am__append_3805 = gfxterm.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_3806 = +@COND_arm64_efi_TRUE@am__append_3807 = $(nodist_gfxterm_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3808 = \ +@COND_arm64_efi_TRUE@ $(nodist_gfxterm_module_SOURCES) \ +@COND_arm64_efi_TRUE@ gfxterm.marker +@COND_arm64_efi_TRUE@am__append_3809 = gfxterm.mod +@COND_arm64_efi_TRUE@am__append_3810 = gfxterm.marker +@COND_i386_pc_TRUE@am__append_3811 = serial.module +@COND_i386_pc_TRUE@am__append_3812 = serial.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@serial_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3813 = +@COND_i386_pc_TRUE@am__append_3814 = $(nodist_serial_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3815 = $(nodist_serial_module_SOURCES) \ +@COND_i386_pc_TRUE@ serial.marker +@COND_i386_pc_TRUE@am__append_3816 = serial.mod +@COND_i386_pc_TRUE@am__append_3817 = serial.marker +@COND_i386_efi_TRUE@am__append_3818 = serial.module +@COND_i386_efi_TRUE@am__append_3819 = serial.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3820 = +@COND_i386_efi_TRUE@am__append_3821 = $(nodist_serial_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3822 = $(nodist_serial_module_SOURCES) \ +@COND_i386_efi_TRUE@ serial.marker +@COND_i386_efi_TRUE@am__append_3823 = serial.mod +@COND_i386_efi_TRUE@am__append_3824 = serial.marker +@COND_i386_qemu_TRUE@am__append_3825 = serial.module +@COND_i386_qemu_TRUE@am__append_3826 = serial.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3827 = +@COND_i386_qemu_TRUE@am__append_3828 = $(nodist_serial_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3829 = \ +@COND_i386_qemu_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_i386_qemu_TRUE@ serial.marker +@COND_i386_qemu_TRUE@am__append_3830 = serial.mod +@COND_i386_qemu_TRUE@am__append_3831 = serial.marker +@COND_i386_coreboot_TRUE@am__append_3832 = serial.module +@COND_i386_coreboot_TRUE@am__append_3833 = serial.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3834 = +@COND_i386_coreboot_TRUE@am__append_3835 = $(nodist_serial_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3836 = \ +@COND_i386_coreboot_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ serial.marker +@COND_i386_coreboot_TRUE@am__append_3837 = serial.mod +@COND_i386_coreboot_TRUE@am__append_3838 = serial.marker +@COND_i386_multiboot_TRUE@am__append_3839 = serial.module +@COND_i386_multiboot_TRUE@am__append_3840 = serial.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3841 = +@COND_i386_multiboot_TRUE@am__append_3842 = $(nodist_serial_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3843 = \ +@COND_i386_multiboot_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ serial.marker +@COND_i386_multiboot_TRUE@am__append_3844 = serial.mod +@COND_i386_multiboot_TRUE@am__append_3845 = serial.marker +@COND_i386_ieee1275_TRUE@am__append_3846 = serial.module +@COND_i386_ieee1275_TRUE@am__append_3847 = serial.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_3848 = +@COND_i386_ieee1275_TRUE@am__append_3849 = $(nodist_serial_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_3850 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ serial.marker +@COND_i386_ieee1275_TRUE@am__append_3851 = serial.mod +@COND_i386_ieee1275_TRUE@am__append_3852 = serial.marker +@COND_x86_64_efi_TRUE@am__append_3853 = serial.module +@COND_x86_64_efi_TRUE@am__append_3854 = serial.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3855 = +@COND_x86_64_efi_TRUE@am__append_3856 = $(nodist_serial_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3857 = \ +@COND_x86_64_efi_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ serial.marker +@COND_x86_64_efi_TRUE@am__append_3858 = serial.mod +@COND_x86_64_efi_TRUE@am__append_3859 = serial.marker +@COND_sparc64_ieee1275_TRUE@am__append_3860 = serial.module +@COND_sparc64_ieee1275_TRUE@am__append_3861 = serial.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_3862 = +@COND_sparc64_ieee1275_TRUE@am__append_3863 = $(nodist_serial_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_3864 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ serial.marker +@COND_sparc64_ieee1275_TRUE@am__append_3865 = serial.mod +@COND_sparc64_ieee1275_TRUE@am__append_3866 = serial.marker +@COND_powerpc_ieee1275_TRUE@am__append_3867 = serial.module +@COND_powerpc_ieee1275_TRUE@am__append_3868 = serial.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_3869 = +@COND_powerpc_ieee1275_TRUE@am__append_3870 = $(nodist_serial_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_3871 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ serial.marker +@COND_powerpc_ieee1275_TRUE@am__append_3872 = serial.mod +@COND_powerpc_ieee1275_TRUE@am__append_3873 = serial.marker +@COND_mips_arc_TRUE@am__append_3874 = serial.module +@COND_mips_arc_TRUE@am__append_3875 = serial.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_3876 = +@COND_mips_arc_TRUE@am__append_3877 = $(nodist_serial_module_SOURCES) +@COND_mips_arc_TRUE@am__append_3878 = $(nodist_serial_module_SOURCES) \ +@COND_mips_arc_TRUE@ serial.marker +@COND_mips_arc_TRUE@am__append_3879 = serial.mod +@COND_mips_arc_TRUE@am__append_3880 = serial.marker +@COND_ia64_efi_TRUE@am__append_3881 = serial.module +@COND_ia64_efi_TRUE@am__append_3882 = serial.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_3883 = +@COND_ia64_efi_TRUE@am__append_3884 = $(nodist_serial_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_3885 = $(nodist_serial_module_SOURCES) \ +@COND_ia64_efi_TRUE@ serial.marker +@COND_ia64_efi_TRUE@am__append_3886 = serial.mod +@COND_ia64_efi_TRUE@am__append_3887 = serial.marker +@COND_arm_efi_TRUE@am__append_3888 = serial.module +@COND_arm_efi_TRUE@am__append_3889 = serial.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_3890 = +@COND_arm_efi_TRUE@am__append_3891 = $(nodist_serial_module_SOURCES) +@COND_arm_efi_TRUE@am__append_3892 = $(nodist_serial_module_SOURCES) \ +@COND_arm_efi_TRUE@ serial.marker +@COND_arm_efi_TRUE@am__append_3893 = serial.mod +@COND_arm_efi_TRUE@am__append_3894 = serial.marker +@COND_arm64_efi_TRUE@am__append_3895 = serial.module +@COND_arm64_efi_TRUE@am__append_3896 = serial.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_3897 = +@COND_arm64_efi_TRUE@am__append_3898 = $(nodist_serial_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3899 = \ +@COND_arm64_efi_TRUE@ $(nodist_serial_module_SOURCES) \ +@COND_arm64_efi_TRUE@ serial.marker +@COND_arm64_efi_TRUE@am__append_3900 = serial.mod +@COND_arm64_efi_TRUE@am__append_3901 = serial.marker +@COND_i386_pc_TRUE@am__append_3902 = sendkey.module terminfo.module +@COND_i386_pc_TRUE@am__append_3903 = sendkey.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ terminfo.module$(EXEEXT) +@COND_i386_pc_FALSE@sendkey_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3904 = +@COND_i386_pc_TRUE@am__append_3905 = $(nodist_sendkey_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_terminfo_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3906 = $(nodist_sendkey_module_SOURCES) \ +@COND_i386_pc_TRUE@ sendkey.marker \ +@COND_i386_pc_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_i386_pc_TRUE@ terminfo.marker +@COND_i386_pc_TRUE@am__append_3907 = sendkey.mod terminfo.mod +@COND_i386_pc_TRUE@am__append_3908 = sendkey.marker terminfo.marker +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@terminfo_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_3909 = terminfo.module +@COND_i386_efi_TRUE@am__append_3910 = terminfo.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3911 = +@COND_i386_efi_TRUE@am__append_3912 = $(nodist_terminfo_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3913 = \ +@COND_i386_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_i386_efi_TRUE@ terminfo.marker +@COND_i386_efi_TRUE@am__append_3914 = terminfo.mod +@COND_i386_efi_TRUE@am__append_3915 = terminfo.marker +@COND_i386_qemu_TRUE@am__append_3916 = terminfo.module +@COND_i386_qemu_TRUE@am__append_3917 = terminfo.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3918 = +@COND_i386_qemu_TRUE@am__append_3919 = $(nodist_terminfo_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3920 = \ +@COND_i386_qemu_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_i386_qemu_TRUE@ terminfo.marker +@COND_i386_qemu_TRUE@am__append_3921 = terminfo.mod +@COND_i386_qemu_TRUE@am__append_3922 = terminfo.marker +@COND_i386_coreboot_TRUE@am__append_3923 = terminfo.module +@COND_i386_coreboot_TRUE@am__append_3924 = terminfo.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3925 = +@COND_i386_coreboot_TRUE@am__append_3926 = $(nodist_terminfo_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3927 = \ +@COND_i386_coreboot_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ terminfo.marker +@COND_i386_coreboot_TRUE@am__append_3928 = terminfo.mod +@COND_i386_coreboot_TRUE@am__append_3929 = terminfo.marker +@COND_i386_multiboot_TRUE@am__append_3930 = terminfo.module +@COND_i386_multiboot_TRUE@am__append_3931 = terminfo.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3932 = +@COND_i386_multiboot_TRUE@am__append_3933 = $(nodist_terminfo_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3934 = \ +@COND_i386_multiboot_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ terminfo.marker +@COND_i386_multiboot_TRUE@am__append_3935 = terminfo.mod +@COND_i386_multiboot_TRUE@am__append_3936 = terminfo.marker +@COND_x86_64_efi_TRUE@am__append_3937 = terminfo.module +@COND_x86_64_efi_TRUE@am__append_3938 = terminfo.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_3939 = +@COND_x86_64_efi_TRUE@am__append_3940 = $(nodist_terminfo_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_3941 = \ +@COND_x86_64_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ terminfo.marker +@COND_x86_64_efi_TRUE@am__append_3942 = terminfo.mod +@COND_x86_64_efi_TRUE@am__append_3943 = terminfo.marker +@COND_ia64_efi_TRUE@am__append_3944 = terminfo.module +@COND_ia64_efi_TRUE@am__append_3945 = terminfo.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_3946 = +@COND_ia64_efi_TRUE@am__append_3947 = $(nodist_terminfo_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_3948 = \ +@COND_ia64_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_ia64_efi_TRUE@ terminfo.marker +@COND_ia64_efi_TRUE@am__append_3949 = terminfo.mod +@COND_ia64_efi_TRUE@am__append_3950 = terminfo.marker +@COND_arm_efi_TRUE@am__append_3951 = terminfo.module +@COND_arm_efi_TRUE@am__append_3952 = terminfo.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_3953 = +@COND_arm_efi_TRUE@am__append_3954 = $(nodist_terminfo_module_SOURCES) +@COND_arm_efi_TRUE@am__append_3955 = \ +@COND_arm_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_arm_efi_TRUE@ terminfo.marker +@COND_arm_efi_TRUE@am__append_3956 = terminfo.mod +@COND_arm_efi_TRUE@am__append_3957 = terminfo.marker +@COND_arm64_efi_TRUE@am__append_3958 = terminfo.module +@COND_arm64_efi_TRUE@am__append_3959 = terminfo.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_3960 = +@COND_arm64_efi_TRUE@am__append_3961 = $(nodist_terminfo_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_3962 = \ +@COND_arm64_efi_TRUE@ $(nodist_terminfo_module_SOURCES) \ +@COND_arm64_efi_TRUE@ terminfo.marker +@COND_arm64_efi_TRUE@am__append_3963 = terminfo.mod +@COND_arm64_efi_TRUE@am__append_3964 = terminfo.marker +@COND_i386_pc_TRUE@am__append_3965 = usb_keyboard.module +@COND_i386_pc_TRUE@am__append_3966 = usb_keyboard.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_FALSE@usb_keyboard_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_3967 = +@COND_i386_pc_TRUE@am__append_3968 = $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_pc_TRUE@am__append_3969 = \ +@COND_i386_pc_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ +@COND_i386_pc_TRUE@ usb_keyboard.marker +@COND_i386_pc_TRUE@am__append_3970 = usb_keyboard.mod +@COND_i386_pc_TRUE@am__append_3971 = usb_keyboard.marker +@COND_i386_efi_TRUE@am__append_3972 = usb_keyboard.module +@COND_i386_efi_TRUE@am__append_3973 = usb_keyboard.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_3974 = +@COND_i386_efi_TRUE@am__append_3975 = $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_efi_TRUE@am__append_3976 = \ +@COND_i386_efi_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ +@COND_i386_efi_TRUE@ usb_keyboard.marker +@COND_i386_efi_TRUE@am__append_3977 = usb_keyboard.mod +@COND_i386_efi_TRUE@am__append_3978 = usb_keyboard.marker +@COND_i386_qemu_TRUE@am__append_3979 = usb_keyboard.module +@COND_i386_qemu_TRUE@am__append_3980 = usb_keyboard.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_3981 = +@COND_i386_qemu_TRUE@am__append_3982 = $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_3983 = \ +@COND_i386_qemu_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ +@COND_i386_qemu_TRUE@ usb_keyboard.marker +@COND_i386_qemu_TRUE@am__append_3984 = usb_keyboard.mod +@COND_i386_qemu_TRUE@am__append_3985 = usb_keyboard.marker +@COND_i386_coreboot_TRUE@am__append_3986 = usb_keyboard.module +@COND_i386_coreboot_TRUE@am__append_3987 = usb_keyboard.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_3988 = +@COND_i386_coreboot_TRUE@am__append_3989 = $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_3990 = $(nodist_usb_keyboard_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ usb_keyboard.marker +@COND_i386_coreboot_TRUE@am__append_3991 = usb_keyboard.mod +@COND_i386_coreboot_TRUE@am__append_3992 = usb_keyboard.marker +@COND_i386_multiboot_TRUE@am__append_3993 = usb_keyboard.module +@COND_i386_multiboot_TRUE@am__append_3994 = usb_keyboard.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_3995 = +@COND_i386_multiboot_TRUE@am__append_3996 = $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_3997 = $(nodist_usb_keyboard_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ usb_keyboard.marker +@COND_i386_multiboot_TRUE@am__append_3998 = usb_keyboard.mod +@COND_i386_multiboot_TRUE@am__append_3999 = usb_keyboard.marker +@COND_i386_ieee1275_TRUE@am__append_4000 = usb_keyboard.module +@COND_i386_ieee1275_TRUE@am__append_4001 = usb_keyboard.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4002 = +@COND_i386_ieee1275_TRUE@am__append_4003 = $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4004 = $(nodist_usb_keyboard_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ usb_keyboard.marker +@COND_i386_ieee1275_TRUE@am__append_4005 = usb_keyboard.mod +@COND_i386_ieee1275_TRUE@am__append_4006 = usb_keyboard.marker +@COND_x86_64_efi_TRUE@am__append_4007 = usb_keyboard.module +@COND_x86_64_efi_TRUE@am__append_4008 = usb_keyboard.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4009 = +@COND_x86_64_efi_TRUE@am__append_4010 = $(nodist_usb_keyboard_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4011 = \ +@COND_x86_64_efi_TRUE@ $(nodist_usb_keyboard_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ usb_keyboard.marker +@COND_x86_64_efi_TRUE@am__append_4012 = usb_keyboard.mod +@COND_x86_64_efi_TRUE@am__append_4013 = usb_keyboard.marker +@COND_mips_loongson_TRUE@am__append_4014 = usb_keyboard.module +@COND_mips_loongson_TRUE@am__append_4015 = usb_keyboard.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_4016 = +@COND_mips_loongson_TRUE@am__append_4017 = $(nodist_usb_keyboard_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_4018 = $(nodist_usb_keyboard_module_SOURCES) \ +@COND_mips_loongson_TRUE@ usb_keyboard.marker +@COND_mips_loongson_TRUE@am__append_4019 = usb_keyboard.mod +@COND_mips_loongson_TRUE@am__append_4020 = usb_keyboard.marker +@COND_i386_pc_TRUE@am__append_4021 = vga.module vga_text.module \ +@COND_i386_pc_TRUE@ mda_text.module +@COND_i386_pc_TRUE@am__append_4022 = vga.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ vga_text.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ mda_text.module$(EXEEXT) +@COND_i386_pc_FALSE@vga_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4023 = +@COND_i386_pc_TRUE@am__append_4024 = $(nodist_vga_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_vga_text_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_mda_text_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4025 = $(nodist_vga_module_SOURCES) \ +@COND_i386_pc_TRUE@ vga.marker \ +@COND_i386_pc_TRUE@ $(nodist_vga_text_module_SOURCES) \ +@COND_i386_pc_TRUE@ vga_text.marker \ +@COND_i386_pc_TRUE@ $(nodist_mda_text_module_SOURCES) \ +@COND_i386_pc_TRUE@ mda_text.marker +@COND_i386_pc_TRUE@am__append_4026 = vga.mod vga_text.mod mda_text.mod +@COND_i386_pc_TRUE@am__append_4027 = vga.marker vga_text.marker \ +@COND_i386_pc_TRUE@ mda_text.marker +@COND_i386_pc_FALSE@vga_text_module_DEPENDENCIES = +@COND_i386_coreboot_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@mda_text_module_DEPENDENCIES = +@COND_i386_qemu_TRUE@am__append_4028 = mda_text.module +@COND_i386_qemu_TRUE@am__append_4029 = mda_text.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4030 = +@COND_i386_qemu_TRUE@am__append_4031 = $(nodist_mda_text_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4032 = \ +@COND_i386_qemu_TRUE@ $(nodist_mda_text_module_SOURCES) \ +@COND_i386_qemu_TRUE@ mda_text.marker +@COND_i386_qemu_TRUE@am__append_4033 = mda_text.mod +@COND_i386_qemu_TRUE@am__append_4034 = mda_text.marker +@COND_i386_coreboot_TRUE@am__append_4035 = mda_text.module +@COND_i386_coreboot_TRUE@am__append_4036 = mda_text.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_4037 = +@COND_i386_coreboot_TRUE@am__append_4038 = $(nodist_mda_text_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4039 = \ +@COND_i386_coreboot_TRUE@ $(nodist_mda_text_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ mda_text.marker +@COND_i386_coreboot_TRUE@am__append_4040 = mda_text.mod +@COND_i386_coreboot_TRUE@am__append_4041 = mda_text.marker +@COND_i386_multiboot_TRUE@am__append_4042 = mda_text.module +@COND_i386_multiboot_TRUE@am__append_4043 = mda_text.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4044 = +@COND_i386_multiboot_TRUE@am__append_4045 = $(nodist_mda_text_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4046 = \ +@COND_i386_multiboot_TRUE@ $(nodist_mda_text_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ mda_text.marker +@COND_i386_multiboot_TRUE@am__append_4047 = mda_text.mod +@COND_i386_multiboot_TRUE@am__append_4048 = mda_text.marker +@COND_i386_pc_TRUE@am__append_4049 = video_cirrus.module +@COND_i386_pc_TRUE@am__append_4050 = video_cirrus.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@video_cirrus_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4051 = +@COND_i386_pc_TRUE@am__append_4052 = $(nodist_video_cirrus_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4053 = \ +@COND_i386_pc_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ +@COND_i386_pc_TRUE@ video_cirrus.marker +@COND_i386_pc_TRUE@am__append_4054 = video_cirrus.mod +@COND_i386_pc_TRUE@am__append_4055 = video_cirrus.marker +@COND_i386_efi_TRUE@am__append_4056 = video_cirrus.module +@COND_i386_efi_TRUE@am__append_4057 = video_cirrus.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4058 = +@COND_i386_efi_TRUE@am__append_4059 = $(nodist_video_cirrus_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4060 = \ +@COND_i386_efi_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ +@COND_i386_efi_TRUE@ video_cirrus.marker +@COND_i386_efi_TRUE@am__append_4061 = video_cirrus.mod +@COND_i386_efi_TRUE@am__append_4062 = video_cirrus.marker +@COND_i386_qemu_TRUE@am__append_4063 = video_cirrus.module +@COND_i386_qemu_TRUE@am__append_4064 = video_cirrus.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4065 = +@COND_i386_qemu_TRUE@am__append_4066 = $(nodist_video_cirrus_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4067 = \ +@COND_i386_qemu_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ +@COND_i386_qemu_TRUE@ video_cirrus.marker +@COND_i386_qemu_TRUE@am__append_4068 = video_cirrus.mod +@COND_i386_qemu_TRUE@am__append_4069 = video_cirrus.marker +@COND_i386_coreboot_TRUE@am__append_4070 = video_cirrus.module +@COND_i386_coreboot_TRUE@am__append_4071 = video_cirrus.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_4072 = +@COND_i386_coreboot_TRUE@am__append_4073 = $(nodist_video_cirrus_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4074 = $(nodist_video_cirrus_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ video_cirrus.marker +@COND_i386_coreboot_TRUE@am__append_4075 = video_cirrus.mod +@COND_i386_coreboot_TRUE@am__append_4076 = video_cirrus.marker +@COND_i386_multiboot_TRUE@am__append_4077 = video_cirrus.module +@COND_i386_multiboot_TRUE@am__append_4078 = video_cirrus.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4079 = +@COND_i386_multiboot_TRUE@am__append_4080 = $(nodist_video_cirrus_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4081 = $(nodist_video_cirrus_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ video_cirrus.marker +@COND_i386_multiboot_TRUE@am__append_4082 = video_cirrus.mod +@COND_i386_multiboot_TRUE@am__append_4083 = video_cirrus.marker +@COND_i386_ieee1275_TRUE@am__append_4084 = video_cirrus.module +@COND_i386_ieee1275_TRUE@am__append_4085 = video_cirrus.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4086 = +@COND_i386_ieee1275_TRUE@am__append_4087 = $(nodist_video_cirrus_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4088 = $(nodist_video_cirrus_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ video_cirrus.marker +@COND_i386_ieee1275_TRUE@am__append_4089 = video_cirrus.mod +@COND_i386_ieee1275_TRUE@am__append_4090 = video_cirrus.marker +@COND_x86_64_efi_TRUE@am__append_4091 = video_cirrus.module +@COND_x86_64_efi_TRUE@am__append_4092 = video_cirrus.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4093 = +@COND_x86_64_efi_TRUE@am__append_4094 = $(nodist_video_cirrus_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4095 = \ +@COND_x86_64_efi_TRUE@ $(nodist_video_cirrus_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ video_cirrus.marker +@COND_x86_64_efi_TRUE@am__append_4096 = video_cirrus.mod +@COND_x86_64_efi_TRUE@am__append_4097 = video_cirrus.marker +@COND_i386_pc_TRUE@am__append_4098 = video_bochs.module +@COND_i386_pc_TRUE@am__append_4099 = video_bochs.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@video_bochs_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4100 = +@COND_i386_pc_TRUE@am__append_4101 = $(nodist_video_bochs_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4102 = \ +@COND_i386_pc_TRUE@ $(nodist_video_bochs_module_SOURCES) \ +@COND_i386_pc_TRUE@ video_bochs.marker +@COND_i386_pc_TRUE@am__append_4103 = video_bochs.mod +@COND_i386_pc_TRUE@am__append_4104 = video_bochs.marker +@COND_i386_efi_TRUE@am__append_4105 = video_bochs.module +@COND_i386_efi_TRUE@am__append_4106 = video_bochs.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4107 = +@COND_i386_efi_TRUE@am__append_4108 = $(nodist_video_bochs_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4109 = \ +@COND_i386_efi_TRUE@ $(nodist_video_bochs_module_SOURCES) \ +@COND_i386_efi_TRUE@ video_bochs.marker +@COND_i386_efi_TRUE@am__append_4110 = video_bochs.mod +@COND_i386_efi_TRUE@am__append_4111 = video_bochs.marker +@COND_i386_qemu_TRUE@am__append_4112 = video_bochs.module +@COND_i386_qemu_TRUE@am__append_4113 = video_bochs.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4114 = +@COND_i386_qemu_TRUE@am__append_4115 = $(nodist_video_bochs_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4116 = \ +@COND_i386_qemu_TRUE@ $(nodist_video_bochs_module_SOURCES) \ +@COND_i386_qemu_TRUE@ video_bochs.marker +@COND_i386_qemu_TRUE@am__append_4117 = video_bochs.mod +@COND_i386_qemu_TRUE@am__append_4118 = video_bochs.marker +@COND_i386_coreboot_TRUE@am__append_4119 = video_bochs.module +@COND_i386_coreboot_TRUE@am__append_4120 = video_bochs.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_4121 = +@COND_i386_coreboot_TRUE@am__append_4122 = $(nodist_video_bochs_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4123 = \ +@COND_i386_coreboot_TRUE@ $(nodist_video_bochs_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ video_bochs.marker +@COND_i386_coreboot_TRUE@am__append_4124 = video_bochs.mod +@COND_i386_coreboot_TRUE@am__append_4125 = video_bochs.marker +@COND_i386_multiboot_TRUE@am__append_4126 = video_bochs.module +@COND_i386_multiboot_TRUE@am__append_4127 = video_bochs.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4128 = +@COND_i386_multiboot_TRUE@am__append_4129 = $(nodist_video_bochs_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4130 = $(nodist_video_bochs_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ video_bochs.marker +@COND_i386_multiboot_TRUE@am__append_4131 = video_bochs.mod +@COND_i386_multiboot_TRUE@am__append_4132 = video_bochs.marker +@COND_i386_ieee1275_TRUE@am__append_4133 = video_bochs.module +@COND_i386_ieee1275_TRUE@am__append_4134 = video_bochs.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4135 = +@COND_i386_ieee1275_TRUE@am__append_4136 = $(nodist_video_bochs_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4137 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_video_bochs_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ video_bochs.marker +@COND_i386_ieee1275_TRUE@am__append_4138 = video_bochs.mod +@COND_i386_ieee1275_TRUE@am__append_4139 = video_bochs.marker +@COND_x86_64_efi_TRUE@am__append_4140 = video_bochs.module +@COND_x86_64_efi_TRUE@am__append_4141 = video_bochs.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4142 = +@COND_x86_64_efi_TRUE@am__append_4143 = $(nodist_video_bochs_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4144 = \ +@COND_x86_64_efi_TRUE@ $(nodist_video_bochs_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ video_bochs.marker +@COND_x86_64_efi_TRUE@am__append_4145 = video_bochs.mod +@COND_x86_64_efi_TRUE@am__append_4146 = video_bochs.marker +@COND_emu_TRUE@am__append_4147 = legacy_password_test.module +@COND_emu_TRUE@am__append_4148 = legacy_password_test.module$(EXEEXT) +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@legacy_password_test_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_4149 = +@COND_emu_TRUE@am__append_4150 = $(nodist_legacy_password_test_module_SOURCES) +@COND_emu_TRUE@am__append_4151 = \ +@COND_emu_TRUE@ $(nodist_legacy_password_test_module_SOURCES) \ +@COND_emu_TRUE@ legacy_password_test.marker +@COND_emu_TRUE@am__append_4152 = legacy_password_test.mod +@COND_emu_TRUE@am__append_4153 = legacy_password_test.marker +@COND_i386_pc_TRUE@am__append_4154 = legacy_password_test.module +@COND_i386_pc_TRUE@am__append_4155 = legacy_password_test.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_4156 = +@COND_i386_pc_TRUE@am__append_4157 = $(nodist_legacy_password_test_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4158 = $(nodist_legacy_password_test_module_SOURCES) \ +@COND_i386_pc_TRUE@ legacy_password_test.marker +@COND_i386_pc_TRUE@am__append_4159 = legacy_password_test.mod +@COND_i386_pc_TRUE@am__append_4160 = legacy_password_test.marker +@COND_i386_efi_TRUE@am__append_4161 = legacy_password_test.module +@COND_i386_efi_TRUE@am__append_4162 = legacy_password_test.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4163 = +@COND_i386_efi_TRUE@am__append_4164 = $(nodist_legacy_password_test_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4165 = $(nodist_legacy_password_test_module_SOURCES) \ +@COND_i386_efi_TRUE@ legacy_password_test.marker +@COND_i386_efi_TRUE@am__append_4166 = legacy_password_test.mod +@COND_i386_efi_TRUE@am__append_4167 = legacy_password_test.marker +@COND_x86_64_efi_TRUE@am__append_4168 = legacy_password_test.module +@COND_x86_64_efi_TRUE@am__append_4169 = legacy_password_test.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4170 = +@COND_x86_64_efi_TRUE@am__append_4171 = $(nodist_legacy_password_test_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4172 = $(nodist_legacy_password_test_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ legacy_password_test.marker +@COND_x86_64_efi_TRUE@am__append_4173 = legacy_password_test.mod +@COND_x86_64_efi_TRUE@am__append_4174 = legacy_password_test.marker +@COND_i386_xen_TRUE@am__append_4175 = legacy_password_test.module +@COND_i386_xen_TRUE@am__append_4176 = legacy_password_test.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_4177 = +@COND_i386_xen_TRUE@am__append_4178 = $(nodist_legacy_password_test_module_SOURCES) +@COND_i386_xen_TRUE@am__append_4179 = $(nodist_legacy_password_test_module_SOURCES) \ +@COND_i386_xen_TRUE@ legacy_password_test.marker +@COND_i386_xen_TRUE@am__append_4180 = legacy_password_test.mod +@COND_i386_xen_TRUE@am__append_4181 = legacy_password_test.marker +@COND_x86_64_xen_TRUE@am__append_4182 = legacy_password_test.module +@COND_x86_64_xen_TRUE@am__append_4183 = legacy_password_test.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_4184 = +@COND_x86_64_xen_TRUE@am__append_4185 = $(nodist_legacy_password_test_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_4186 = $(nodist_legacy_password_test_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ legacy_password_test.marker +@COND_x86_64_xen_TRUE@am__append_4187 = legacy_password_test.mod +@COND_x86_64_xen_TRUE@am__append_4188 = legacy_password_test.marker +@COND_emu_TRUE@am__append_4189 = div.module +@COND_emu_TRUE@am__append_4190 = div.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@div_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_4191 = +@COND_emu_TRUE@am__append_4192 = $(nodist_div_module_SOURCES) +@COND_emu_TRUE@am__append_4193 = $(nodist_div_module_SOURCES) \ +@COND_emu_TRUE@ div.marker +@COND_emu_TRUE@am__append_4194 = div.mod +@COND_emu_TRUE@am__append_4195 = div.marker +@COND_i386_pc_TRUE@am__append_4196 = div.module +@COND_i386_pc_TRUE@am__append_4197 = div.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_4198 = +@COND_i386_pc_TRUE@am__append_4199 = $(nodist_div_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4200 = $(nodist_div_module_SOURCES) \ +@COND_i386_pc_TRUE@ div.marker +@COND_i386_pc_TRUE@am__append_4201 = div.mod +@COND_i386_pc_TRUE@am__append_4202 = div.marker +@COND_i386_efi_TRUE@am__append_4203 = div.module +@COND_i386_efi_TRUE@am__append_4204 = div.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4205 = +@COND_i386_efi_TRUE@am__append_4206 = $(nodist_div_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4207 = $(nodist_div_module_SOURCES) \ +@COND_i386_efi_TRUE@ div.marker +@COND_i386_efi_TRUE@am__append_4208 = div.mod +@COND_i386_efi_TRUE@am__append_4209 = div.marker +@COND_i386_qemu_TRUE@am__append_4210 = div.module +@COND_i386_qemu_TRUE@am__append_4211 = div.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4212 = +@COND_i386_qemu_TRUE@am__append_4213 = $(nodist_div_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4214 = $(nodist_div_module_SOURCES) \ +@COND_i386_qemu_TRUE@ div.marker +@COND_i386_qemu_TRUE@am__append_4215 = div.mod +@COND_i386_qemu_TRUE@am__append_4216 = div.marker +@COND_i386_coreboot_TRUE@am__append_4217 = div.module +@COND_i386_coreboot_TRUE@am__append_4218 = div.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_4219 = +@COND_i386_coreboot_TRUE@am__append_4220 = $(nodist_div_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4221 = \ +@COND_i386_coreboot_TRUE@ $(nodist_div_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ div.marker +@COND_i386_coreboot_TRUE@am__append_4222 = div.mod +@COND_i386_coreboot_TRUE@am__append_4223 = div.marker +@COND_i386_multiboot_TRUE@am__append_4224 = div.module +@COND_i386_multiboot_TRUE@am__append_4225 = div.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4226 = +@COND_i386_multiboot_TRUE@am__append_4227 = $(nodist_div_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4228 = \ +@COND_i386_multiboot_TRUE@ $(nodist_div_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ div.marker +@COND_i386_multiboot_TRUE@am__append_4229 = div.mod +@COND_i386_multiboot_TRUE@am__append_4230 = div.marker +@COND_i386_ieee1275_TRUE@am__append_4231 = div.module +@COND_i386_ieee1275_TRUE@am__append_4232 = div.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4233 = +@COND_i386_ieee1275_TRUE@am__append_4234 = $(nodist_div_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4235 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_div_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ div.marker +@COND_i386_ieee1275_TRUE@am__append_4236 = div.mod +@COND_i386_ieee1275_TRUE@am__append_4237 = div.marker +@COND_x86_64_efi_TRUE@am__append_4238 = div.module +@COND_x86_64_efi_TRUE@am__append_4239 = div.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4240 = +@COND_x86_64_efi_TRUE@am__append_4241 = $(nodist_div_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4242 = $(nodist_div_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ div.marker +@COND_x86_64_efi_TRUE@am__append_4243 = div.mod +@COND_x86_64_efi_TRUE@am__append_4244 = div.marker +@COND_i386_xen_TRUE@am__append_4245 = div.module +@COND_i386_xen_TRUE@am__append_4246 = div.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_4247 = +@COND_i386_xen_TRUE@am__append_4248 = $(nodist_div_module_SOURCES) +@COND_i386_xen_TRUE@am__append_4249 = $(nodist_div_module_SOURCES) \ +@COND_i386_xen_TRUE@ div.marker +@COND_i386_xen_TRUE@am__append_4250 = div.mod +@COND_i386_xen_TRUE@am__append_4251 = div.marker +@COND_x86_64_xen_TRUE@am__append_4252 = div.module +@COND_x86_64_xen_TRUE@am__append_4253 = div.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_4254 = +@COND_x86_64_xen_TRUE@am__append_4255 = $(nodist_div_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_4256 = $(nodist_div_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ div.marker +@COND_x86_64_xen_TRUE@am__append_4257 = div.mod +@COND_x86_64_xen_TRUE@am__append_4258 = div.marker +@COND_mips_loongson_TRUE@am__append_4259 = div.module +@COND_mips_loongson_TRUE@am__append_4260 = div.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__append_4261 = +@COND_mips_loongson_TRUE@am__append_4262 = $(nodist_div_module_SOURCES) +@COND_mips_loongson_TRUE@am__append_4263 = \ +@COND_mips_loongson_TRUE@ $(nodist_div_module_SOURCES) \ +@COND_mips_loongson_TRUE@ div.marker +@COND_mips_loongson_TRUE@am__append_4264 = div.mod +@COND_mips_loongson_TRUE@am__append_4265 = div.marker +@COND_sparc64_ieee1275_TRUE@am__append_4266 = div.module +@COND_sparc64_ieee1275_TRUE@am__append_4267 = div.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_4268 = +@COND_sparc64_ieee1275_TRUE@am__append_4269 = $(nodist_div_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_4270 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_div_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ div.marker +@COND_sparc64_ieee1275_TRUE@am__append_4271 = div.mod +@COND_sparc64_ieee1275_TRUE@am__append_4272 = div.marker +@COND_powerpc_ieee1275_TRUE@am__append_4273 = div.module +@COND_powerpc_ieee1275_TRUE@am__append_4274 = div.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_4275 = +@COND_powerpc_ieee1275_TRUE@am__append_4276 = $(nodist_div_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_4277 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_div_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ div.marker +@COND_powerpc_ieee1275_TRUE@am__append_4278 = div.mod +@COND_powerpc_ieee1275_TRUE@am__append_4279 = div.marker +@COND_mips_arc_TRUE@am__append_4280 = div.module +@COND_mips_arc_TRUE@am__append_4281 = div.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_4282 = +@COND_mips_arc_TRUE@am__append_4283 = $(nodist_div_module_SOURCES) +@COND_mips_arc_TRUE@am__append_4284 = $(nodist_div_module_SOURCES) \ +@COND_mips_arc_TRUE@ div.marker +@COND_mips_arc_TRUE@am__append_4285 = div.mod +@COND_mips_arc_TRUE@am__append_4286 = div.marker +@COND_mips_qemu_mips_TRUE@am__append_4287 = div.module +@COND_mips_qemu_mips_TRUE@am__append_4288 = div.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_4289 = +@COND_mips_qemu_mips_TRUE@am__append_4290 = $(nodist_div_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_4291 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_div_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ div.marker +@COND_mips_qemu_mips_TRUE@am__append_4292 = div.mod +@COND_mips_qemu_mips_TRUE@am__append_4293 = div.marker +@COND_arm64_efi_TRUE@am__append_4294 = div.module +@COND_arm64_efi_TRUE@am__append_4295 = div.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_4296 = +@COND_arm64_efi_TRUE@am__append_4297 = $(nodist_div_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_4298 = $(nodist_div_module_SOURCES) \ +@COND_arm64_efi_TRUE@ div.marker +@COND_arm64_efi_TRUE@am__append_4299 = div.mod +@COND_arm64_efi_TRUE@am__append_4300 = div.marker +@COND_i386_efi_TRUE@am__append_4301 = efi_gop.module +@COND_i386_efi_TRUE@am__append_4302 = efi_gop.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@efi_gop_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_4303 = +@COND_i386_efi_TRUE@am__append_4304 = $(nodist_efi_gop_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4305 = \ +@COND_i386_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ +@COND_i386_efi_TRUE@ efi_gop.marker +@COND_i386_efi_TRUE@am__append_4306 = efi_gop.mod +@COND_i386_efi_TRUE@am__append_4307 = efi_gop.marker +@COND_x86_64_efi_TRUE@am__append_4308 = efi_gop.module +@COND_x86_64_efi_TRUE@am__append_4309 = efi_gop.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4310 = +@COND_x86_64_efi_TRUE@am__append_4311 = $(nodist_efi_gop_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4312 = \ +@COND_x86_64_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ efi_gop.marker +@COND_x86_64_efi_TRUE@am__append_4313 = efi_gop.mod +@COND_x86_64_efi_TRUE@am__append_4314 = efi_gop.marker +@COND_ia64_efi_TRUE@am__append_4315 = efi_gop.module +@COND_ia64_efi_TRUE@am__append_4316 = efi_gop.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_4317 = +@COND_ia64_efi_TRUE@am__append_4318 = $(nodist_efi_gop_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_4319 = \ +@COND_ia64_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ +@COND_ia64_efi_TRUE@ efi_gop.marker +@COND_ia64_efi_TRUE@am__append_4320 = efi_gop.mod +@COND_ia64_efi_TRUE@am__append_4321 = efi_gop.marker +@COND_arm_efi_TRUE@am__append_4322 = efi_gop.module +@COND_arm_efi_TRUE@am__append_4323 = efi_gop.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_4324 = +@COND_arm_efi_TRUE@am__append_4325 = $(nodist_efi_gop_module_SOURCES) +@COND_arm_efi_TRUE@am__append_4326 = $(nodist_efi_gop_module_SOURCES) \ +@COND_arm_efi_TRUE@ efi_gop.marker +@COND_arm_efi_TRUE@am__append_4327 = efi_gop.mod +@COND_arm_efi_TRUE@am__append_4328 = efi_gop.marker +@COND_arm64_efi_TRUE@am__append_4329 = efi_gop.module +@COND_arm64_efi_TRUE@am__append_4330 = efi_gop.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_4331 = +@COND_arm64_efi_TRUE@am__append_4332 = $(nodist_efi_gop_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_4333 = \ +@COND_arm64_efi_TRUE@ $(nodist_efi_gop_module_SOURCES) \ +@COND_arm64_efi_TRUE@ efi_gop.marker +@COND_arm64_efi_TRUE@am__append_4334 = efi_gop.mod +@COND_arm64_efi_TRUE@am__append_4335 = efi_gop.marker +@COND_i386_efi_TRUE@am__append_4336 = efi_uga.module +@COND_i386_efi_TRUE@am__append_4337 = efi_uga.module$(EXEEXT) +@COND_i386_efi_FALSE@@COND_x86_64_efi_FALSE@efi_uga_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_4338 = +@COND_i386_efi_TRUE@am__append_4339 = $(nodist_efi_uga_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4340 = \ +@COND_i386_efi_TRUE@ $(nodist_efi_uga_module_SOURCES) \ +@COND_i386_efi_TRUE@ efi_uga.marker +@COND_i386_efi_TRUE@am__append_4341 = efi_uga.mod +@COND_i386_efi_TRUE@am__append_4342 = efi_uga.marker +@COND_x86_64_efi_TRUE@am__append_4343 = efi_uga.module +@COND_x86_64_efi_TRUE@am__append_4344 = efi_uga.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4345 = +@COND_x86_64_efi_TRUE@am__append_4346 = $(nodist_efi_uga_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4347 = \ +@COND_x86_64_efi_TRUE@ $(nodist_efi_uga_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ efi_uga.marker +@COND_x86_64_efi_TRUE@am__append_4348 = efi_uga.mod +@COND_x86_64_efi_TRUE@am__append_4349 = efi_uga.marker +@COND_i386_pc_TRUE@am__append_4350 = vbe.module +@COND_i386_pc_TRUE@am__append_4351 = vbe.module$(EXEEXT) +@COND_i386_pc_FALSE@vbe_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4352 = +@COND_i386_pc_TRUE@am__append_4353 = $(nodist_vbe_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4354 = $(nodist_vbe_module_SOURCES) \ +@COND_i386_pc_TRUE@ vbe.marker +@COND_i386_pc_TRUE@am__append_4355 = vbe.mod +@COND_i386_pc_TRUE@am__append_4356 = vbe.marker +@COND_emu_TRUE@am__append_4357 = video_fb.module +@COND_emu_TRUE@am__append_4358 = video_fb.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@video_fb_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_4359 = +@COND_emu_TRUE@am__append_4360 = $(nodist_video_fb_module_SOURCES) +@COND_emu_TRUE@am__append_4361 = $(nodist_video_fb_module_SOURCES) \ +@COND_emu_TRUE@ video_fb.marker +@COND_emu_TRUE@am__append_4362 = video_fb.mod +@COND_emu_TRUE@am__append_4363 = video_fb.marker +@COND_i386_pc_TRUE@am__append_4364 = video_fb.module +@COND_i386_pc_TRUE@am__append_4365 = video_fb.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_4366 = +@COND_i386_pc_TRUE@am__append_4367 = $(nodist_video_fb_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4368 = \ +@COND_i386_pc_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_i386_pc_TRUE@ video_fb.marker +@COND_i386_pc_TRUE@am__append_4369 = video_fb.mod +@COND_i386_pc_TRUE@am__append_4370 = video_fb.marker +@COND_i386_efi_TRUE@am__append_4371 = video_fb.module +@COND_i386_efi_TRUE@am__append_4372 = video_fb.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4373 = +@COND_i386_efi_TRUE@am__append_4374 = $(nodist_video_fb_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4375 = \ +@COND_i386_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_i386_efi_TRUE@ video_fb.marker +@COND_i386_efi_TRUE@am__append_4376 = video_fb.mod +@COND_i386_efi_TRUE@am__append_4377 = video_fb.marker +@COND_i386_qemu_TRUE@am__append_4378 = video_fb.module +@COND_i386_qemu_TRUE@am__append_4379 = video_fb.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4380 = +@COND_i386_qemu_TRUE@am__append_4381 = $(nodist_video_fb_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4382 = \ +@COND_i386_qemu_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_i386_qemu_TRUE@ video_fb.marker +@COND_i386_qemu_TRUE@am__append_4383 = video_fb.mod +@COND_i386_qemu_TRUE@am__append_4384 = video_fb.marker +@COND_i386_multiboot_TRUE@am__append_4385 = video_fb.module +@COND_i386_multiboot_TRUE@am__append_4386 = video_fb.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4387 = +@COND_i386_multiboot_TRUE@am__append_4388 = $(nodist_video_fb_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4389 = \ +@COND_i386_multiboot_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ video_fb.marker +@COND_i386_multiboot_TRUE@am__append_4390 = video_fb.mod +@COND_i386_multiboot_TRUE@am__append_4391 = video_fb.marker +@COND_i386_ieee1275_TRUE@am__append_4392 = video_fb.module +@COND_i386_ieee1275_TRUE@am__append_4393 = video_fb.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4394 = +@COND_i386_ieee1275_TRUE@am__append_4395 = $(nodist_video_fb_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4396 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ video_fb.marker +@COND_i386_ieee1275_TRUE@am__append_4397 = video_fb.mod +@COND_i386_ieee1275_TRUE@am__append_4398 = video_fb.marker +@COND_x86_64_efi_TRUE@am__append_4399 = video_fb.module +@COND_x86_64_efi_TRUE@am__append_4400 = video_fb.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4401 = +@COND_x86_64_efi_TRUE@am__append_4402 = $(nodist_video_fb_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4403 = \ +@COND_x86_64_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ video_fb.marker +@COND_x86_64_efi_TRUE@am__append_4404 = video_fb.mod +@COND_x86_64_efi_TRUE@am__append_4405 = video_fb.marker +@COND_i386_xen_TRUE@am__append_4406 = video_fb.module +@COND_i386_xen_TRUE@am__append_4407 = video_fb.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_4408 = +@COND_i386_xen_TRUE@am__append_4409 = $(nodist_video_fb_module_SOURCES) +@COND_i386_xen_TRUE@am__append_4410 = \ +@COND_i386_xen_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_i386_xen_TRUE@ video_fb.marker +@COND_i386_xen_TRUE@am__append_4411 = video_fb.mod +@COND_i386_xen_TRUE@am__append_4412 = video_fb.marker +@COND_x86_64_xen_TRUE@am__append_4413 = video_fb.module +@COND_x86_64_xen_TRUE@am__append_4414 = video_fb.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_4415 = +@COND_x86_64_xen_TRUE@am__append_4416 = $(nodist_video_fb_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_4417 = \ +@COND_x86_64_xen_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ video_fb.marker +@COND_x86_64_xen_TRUE@am__append_4418 = video_fb.mod +@COND_x86_64_xen_TRUE@am__append_4419 = video_fb.marker +@COND_sparc64_ieee1275_TRUE@am__append_4420 = video_fb.module +@COND_sparc64_ieee1275_TRUE@am__append_4421 = video_fb.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_4422 = +@COND_sparc64_ieee1275_TRUE@am__append_4423 = $(nodist_video_fb_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_4424 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ video_fb.marker +@COND_sparc64_ieee1275_TRUE@am__append_4425 = video_fb.mod +@COND_sparc64_ieee1275_TRUE@am__append_4426 = video_fb.marker +@COND_powerpc_ieee1275_TRUE@am__append_4427 = video_fb.module +@COND_powerpc_ieee1275_TRUE@am__append_4428 = video_fb.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_4429 = +@COND_powerpc_ieee1275_TRUE@am__append_4430 = $(nodist_video_fb_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_4431 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ video_fb.marker +@COND_powerpc_ieee1275_TRUE@am__append_4432 = video_fb.mod +@COND_powerpc_ieee1275_TRUE@am__append_4433 = video_fb.marker +@COND_mips_arc_TRUE@am__append_4434 = video_fb.module +@COND_mips_arc_TRUE@am__append_4435 = video_fb.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_4436 = +@COND_mips_arc_TRUE@am__append_4437 = $(nodist_video_fb_module_SOURCES) +@COND_mips_arc_TRUE@am__append_4438 = \ +@COND_mips_arc_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_mips_arc_TRUE@ video_fb.marker +@COND_mips_arc_TRUE@am__append_4439 = video_fb.mod +@COND_mips_arc_TRUE@am__append_4440 = video_fb.marker +@COND_ia64_efi_TRUE@am__append_4441 = video_fb.module +@COND_ia64_efi_TRUE@am__append_4442 = video_fb.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_4443 = +@COND_ia64_efi_TRUE@am__append_4444 = $(nodist_video_fb_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_4445 = \ +@COND_ia64_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_ia64_efi_TRUE@ video_fb.marker +@COND_ia64_efi_TRUE@am__append_4446 = video_fb.mod +@COND_ia64_efi_TRUE@am__append_4447 = video_fb.marker +@COND_mips_qemu_mips_TRUE@am__append_4448 = video_fb.module +@COND_mips_qemu_mips_TRUE@am__append_4449 = video_fb.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_4450 = +@COND_mips_qemu_mips_TRUE@am__append_4451 = $(nodist_video_fb_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_4452 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ video_fb.marker +@COND_mips_qemu_mips_TRUE@am__append_4453 = video_fb.mod +@COND_mips_qemu_mips_TRUE@am__append_4454 = video_fb.marker +@COND_arm_uboot_TRUE@am__append_4455 = video_fb.module +@COND_arm_uboot_TRUE@am__append_4456 = video_fb.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_4457 = +@COND_arm_uboot_TRUE@am__append_4458 = $(nodist_video_fb_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_4459 = \ +@COND_arm_uboot_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_arm_uboot_TRUE@ video_fb.marker +@COND_arm_uboot_TRUE@am__append_4460 = video_fb.mod +@COND_arm_uboot_TRUE@am__append_4461 = video_fb.marker +@COND_arm_efi_TRUE@am__append_4462 = video_fb.module +@COND_arm_efi_TRUE@am__append_4463 = video_fb.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_4464 = +@COND_arm_efi_TRUE@am__append_4465 = $(nodist_video_fb_module_SOURCES) +@COND_arm_efi_TRUE@am__append_4466 = \ +@COND_arm_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_arm_efi_TRUE@ video_fb.marker +@COND_arm_efi_TRUE@am__append_4467 = video_fb.mod +@COND_arm_efi_TRUE@am__append_4468 = video_fb.marker +@COND_arm64_efi_TRUE@am__append_4469 = video_fb.module +@COND_arm64_efi_TRUE@am__append_4470 = video_fb.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_4471 = +@COND_arm64_efi_TRUE@am__append_4472 = $(nodist_video_fb_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_4473 = \ +@COND_arm64_efi_TRUE@ $(nodist_video_fb_module_SOURCES) \ +@COND_arm64_efi_TRUE@ video_fb.marker +@COND_arm64_efi_TRUE@am__append_4474 = video_fb.mod +@COND_arm64_efi_TRUE@am__append_4475 = video_fb.marker +@COND_emu_TRUE@am__append_4476 = video.module +@COND_emu_TRUE@am__append_4477 = video.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@video_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_4478 = +@COND_emu_TRUE@am__append_4479 = $(nodist_video_module_SOURCES) +@COND_emu_TRUE@am__append_4480 = $(nodist_video_module_SOURCES) \ +@COND_emu_TRUE@ video.marker +@COND_emu_TRUE@am__append_4481 = video.mod +@COND_emu_TRUE@am__append_4482 = video.marker +@COND_i386_pc_TRUE@am__append_4483 = video.module +@COND_i386_pc_TRUE@am__append_4484 = video.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_4485 = +@COND_i386_pc_TRUE@am__append_4486 = $(nodist_video_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4487 = $(nodist_video_module_SOURCES) \ +@COND_i386_pc_TRUE@ video.marker +@COND_i386_pc_TRUE@am__append_4488 = video.mod +@COND_i386_pc_TRUE@am__append_4489 = video.marker +@COND_i386_efi_TRUE@am__append_4490 = video.module +@COND_i386_efi_TRUE@am__append_4491 = video.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4492 = +@COND_i386_efi_TRUE@am__append_4493 = $(nodist_video_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4494 = $(nodist_video_module_SOURCES) \ +@COND_i386_efi_TRUE@ video.marker +@COND_i386_efi_TRUE@am__append_4495 = video.mod +@COND_i386_efi_TRUE@am__append_4496 = video.marker +@COND_i386_qemu_TRUE@am__append_4497 = video.module +@COND_i386_qemu_TRUE@am__append_4498 = video.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4499 = +@COND_i386_qemu_TRUE@am__append_4500 = $(nodist_video_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4501 = $(nodist_video_module_SOURCES) \ +@COND_i386_qemu_TRUE@ video.marker +@COND_i386_qemu_TRUE@am__append_4502 = video.mod +@COND_i386_qemu_TRUE@am__append_4503 = video.marker +@COND_i386_multiboot_TRUE@am__append_4504 = video.module +@COND_i386_multiboot_TRUE@am__append_4505 = video.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4506 = +@COND_i386_multiboot_TRUE@am__append_4507 = $(nodist_video_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4508 = \ +@COND_i386_multiboot_TRUE@ $(nodist_video_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ video.marker +@COND_i386_multiboot_TRUE@am__append_4509 = video.mod +@COND_i386_multiboot_TRUE@am__append_4510 = video.marker +@COND_i386_ieee1275_TRUE@am__append_4511 = video.module +@COND_i386_ieee1275_TRUE@am__append_4512 = video.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4513 = +@COND_i386_ieee1275_TRUE@am__append_4514 = $(nodist_video_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4515 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_video_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ video.marker +@COND_i386_ieee1275_TRUE@am__append_4516 = video.mod +@COND_i386_ieee1275_TRUE@am__append_4517 = video.marker +@COND_x86_64_efi_TRUE@am__append_4518 = video.module +@COND_x86_64_efi_TRUE@am__append_4519 = video.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4520 = +@COND_x86_64_efi_TRUE@am__append_4521 = $(nodist_video_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4522 = \ +@COND_x86_64_efi_TRUE@ $(nodist_video_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ video.marker +@COND_x86_64_efi_TRUE@am__append_4523 = video.mod +@COND_x86_64_efi_TRUE@am__append_4524 = video.marker +@COND_i386_xen_TRUE@am__append_4525 = video.module +@COND_i386_xen_TRUE@am__append_4526 = video.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_4527 = +@COND_i386_xen_TRUE@am__append_4528 = $(nodist_video_module_SOURCES) +@COND_i386_xen_TRUE@am__append_4529 = $(nodist_video_module_SOURCES) \ +@COND_i386_xen_TRUE@ video.marker +@COND_i386_xen_TRUE@am__append_4530 = video.mod +@COND_i386_xen_TRUE@am__append_4531 = video.marker +@COND_x86_64_xen_TRUE@am__append_4532 = video.module +@COND_x86_64_xen_TRUE@am__append_4533 = video.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_4534 = +@COND_x86_64_xen_TRUE@am__append_4535 = $(nodist_video_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_4536 = \ +@COND_x86_64_xen_TRUE@ $(nodist_video_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ video.marker +@COND_x86_64_xen_TRUE@am__append_4537 = video.mod +@COND_x86_64_xen_TRUE@am__append_4538 = video.marker +@COND_sparc64_ieee1275_TRUE@am__append_4539 = video.module +@COND_sparc64_ieee1275_TRUE@am__append_4540 = video.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_4541 = +@COND_sparc64_ieee1275_TRUE@am__append_4542 = $(nodist_video_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_4543 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_video_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ video.marker +@COND_sparc64_ieee1275_TRUE@am__append_4544 = video.mod +@COND_sparc64_ieee1275_TRUE@am__append_4545 = video.marker +@COND_powerpc_ieee1275_TRUE@am__append_4546 = video.module +@COND_powerpc_ieee1275_TRUE@am__append_4547 = video.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_4548 = +@COND_powerpc_ieee1275_TRUE@am__append_4549 = $(nodist_video_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_4550 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_video_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ video.marker +@COND_powerpc_ieee1275_TRUE@am__append_4551 = video.mod +@COND_powerpc_ieee1275_TRUE@am__append_4552 = video.marker +@COND_mips_arc_TRUE@am__append_4553 = video.module +@COND_mips_arc_TRUE@am__append_4554 = video.module$(EXEEXT) +@COND_mips_arc_TRUE@am__append_4555 = +@COND_mips_arc_TRUE@am__append_4556 = $(nodist_video_module_SOURCES) +@COND_mips_arc_TRUE@am__append_4557 = $(nodist_video_module_SOURCES) \ +@COND_mips_arc_TRUE@ video.marker +@COND_mips_arc_TRUE@am__append_4558 = video.mod +@COND_mips_arc_TRUE@am__append_4559 = video.marker +@COND_ia64_efi_TRUE@am__append_4560 = video.module +@COND_ia64_efi_TRUE@am__append_4561 = video.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_4562 = +@COND_ia64_efi_TRUE@am__append_4563 = $(nodist_video_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_4564 = $(nodist_video_module_SOURCES) \ +@COND_ia64_efi_TRUE@ video.marker +@COND_ia64_efi_TRUE@am__append_4565 = video.mod +@COND_ia64_efi_TRUE@am__append_4566 = video.marker +@COND_mips_qemu_mips_TRUE@am__append_4567 = video.module +@COND_mips_qemu_mips_TRUE@am__append_4568 = video.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__append_4569 = +@COND_mips_qemu_mips_TRUE@am__append_4570 = $(nodist_video_module_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_4571 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_video_module_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ video.marker +@COND_mips_qemu_mips_TRUE@am__append_4572 = video.mod +@COND_mips_qemu_mips_TRUE@am__append_4573 = video.marker +@COND_arm_uboot_TRUE@am__append_4574 = video.module +@COND_arm_uboot_TRUE@am__append_4575 = video.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__append_4576 = +@COND_arm_uboot_TRUE@am__append_4577 = $(nodist_video_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_4578 = $(nodist_video_module_SOURCES) \ +@COND_arm_uboot_TRUE@ video.marker +@COND_arm_uboot_TRUE@am__append_4579 = video.mod +@COND_arm_uboot_TRUE@am__append_4580 = video.marker +@COND_arm_efi_TRUE@am__append_4581 = video.module +@COND_arm_efi_TRUE@am__append_4582 = video.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_4583 = +@COND_arm_efi_TRUE@am__append_4584 = $(nodist_video_module_SOURCES) +@COND_arm_efi_TRUE@am__append_4585 = $(nodist_video_module_SOURCES) \ +@COND_arm_efi_TRUE@ video.marker +@COND_arm_efi_TRUE@am__append_4586 = video.mod +@COND_arm_efi_TRUE@am__append_4587 = video.marker +@COND_arm64_efi_TRUE@am__append_4588 = video.module +@COND_arm64_efi_TRUE@am__append_4589 = video.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_4590 = +@COND_arm64_efi_TRUE@am__append_4591 = $(nodist_video_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_4592 = $(nodist_video_module_SOURCES) \ +@COND_arm64_efi_TRUE@ video.marker +@COND_arm64_efi_TRUE@am__append_4593 = video.mod +@COND_arm64_efi_TRUE@am__append_4594 = video.marker +@COND_powerpc_ieee1275_TRUE@am__append_4595 = ieee1275_fb.module +@COND_powerpc_ieee1275_TRUE@am__append_4596 = ieee1275_fb.module$(EXEEXT) +@COND_powerpc_ieee1275_FALSE@ieee1275_fb_module_DEPENDENCIES = +@COND_powerpc_ieee1275_TRUE@am__append_4597 = +@COND_powerpc_ieee1275_TRUE@am__append_4598 = $(nodist_ieee1275_fb_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_4599 = $(nodist_ieee1275_fb_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ ieee1275_fb.marker +@COND_powerpc_ieee1275_TRUE@am__append_4600 = ieee1275_fb.mod +@COND_powerpc_ieee1275_TRUE@am__append_4601 = ieee1275_fb.marker +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_4602 = sdl.module +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_4603 = sdl.module$(EXEEXT) +@COND_GRUB_EMU_SDL_FALSE@sdl_module_DEPENDENCIES = +@COND_emu_FALSE@sdl_module_DEPENDENCIES = +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_4604 = +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_4605 = $(nodist_sdl_module_SOURCES) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_4606 = $(nodist_sdl_module_SOURCES) \ +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@ sdl.marker +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_4607 = sdl.mod +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_4608 = sdl.marker +@COND_i386_ieee1275_TRUE@am__append_4609 = ofnet.module +@COND_i386_ieee1275_TRUE@am__append_4610 = ofnet.module$(EXEEXT) +@COND_i386_ieee1275_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@ofnet_module_DEPENDENCIES = +@COND_i386_ieee1275_TRUE@am__append_4611 = +@COND_i386_ieee1275_TRUE@am__append_4612 = $(nodist_ofnet_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4613 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_ofnet_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ ofnet.marker +@COND_i386_ieee1275_TRUE@am__append_4614 = ofnet.mod +@COND_i386_ieee1275_TRUE@am__append_4615 = ofnet.marker +@COND_sparc64_ieee1275_TRUE@am__append_4616 = ofnet.module +@COND_sparc64_ieee1275_TRUE@am__append_4617 = ofnet.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__append_4618 = +@COND_sparc64_ieee1275_TRUE@am__append_4619 = $(nodist_ofnet_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_4620 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_ofnet_module_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ ofnet.marker +@COND_sparc64_ieee1275_TRUE@am__append_4621 = ofnet.mod +@COND_sparc64_ieee1275_TRUE@am__append_4622 = ofnet.marker +@COND_powerpc_ieee1275_TRUE@am__append_4623 = ofnet.module +@COND_powerpc_ieee1275_TRUE@am__append_4624 = ofnet.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__append_4625 = +@COND_powerpc_ieee1275_TRUE@am__append_4626 = $(nodist_ofnet_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_4627 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_ofnet_module_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ ofnet.marker +@COND_powerpc_ieee1275_TRUE@am__append_4628 = ofnet.mod +@COND_powerpc_ieee1275_TRUE@am__append_4629 = ofnet.marker +@COND_arm_uboot_TRUE@am__append_4630 = ubootnet.module +@COND_arm_uboot_TRUE@am__append_4631 = ubootnet.module$(EXEEXT) +@COND_arm_uboot_FALSE@ubootnet_module_DEPENDENCIES = +@COND_arm_uboot_TRUE@am__append_4632 = +@COND_arm_uboot_TRUE@am__append_4633 = $(nodist_ubootnet_module_SOURCES) +@COND_arm_uboot_TRUE@am__append_4634 = \ +@COND_arm_uboot_TRUE@ $(nodist_ubootnet_module_SOURCES) \ +@COND_arm_uboot_TRUE@ ubootnet.marker +@COND_arm_uboot_TRUE@am__append_4635 = ubootnet.mod +@COND_arm_uboot_TRUE@am__append_4636 = ubootnet.marker +@COND_i386_efi_TRUE@am__append_4637 = efinet.module +@COND_i386_efi_TRUE@am__append_4638 = efinet.module$(EXEEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_FALSE@efinet_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_4639 = +@COND_i386_efi_TRUE@am__append_4640 = $(nodist_efinet_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4641 = $(nodist_efinet_module_SOURCES) \ +@COND_i386_efi_TRUE@ efinet.marker +@COND_i386_efi_TRUE@am__append_4642 = efinet.mod +@COND_i386_efi_TRUE@am__append_4643 = efinet.marker +@COND_x86_64_efi_TRUE@am__append_4644 = efinet.module +@COND_x86_64_efi_TRUE@am__append_4645 = efinet.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4646 = +@COND_x86_64_efi_TRUE@am__append_4647 = $(nodist_efinet_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4648 = \ +@COND_x86_64_efi_TRUE@ $(nodist_efinet_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ efinet.marker +@COND_x86_64_efi_TRUE@am__append_4649 = efinet.mod +@COND_x86_64_efi_TRUE@am__append_4650 = efinet.marker +@COND_ia64_efi_TRUE@am__append_4651 = efinet.module +@COND_ia64_efi_TRUE@am__append_4652 = efinet.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__append_4653 = +@COND_ia64_efi_TRUE@am__append_4654 = $(nodist_efinet_module_SOURCES) +@COND_ia64_efi_TRUE@am__append_4655 = $(nodist_efinet_module_SOURCES) \ +@COND_ia64_efi_TRUE@ efinet.marker +@COND_ia64_efi_TRUE@am__append_4656 = efinet.mod +@COND_ia64_efi_TRUE@am__append_4657 = efinet.marker +@COND_arm_efi_TRUE@am__append_4658 = efinet.module +@COND_arm_efi_TRUE@am__append_4659 = efinet.module$(EXEEXT) +@COND_arm_efi_TRUE@am__append_4660 = +@COND_arm_efi_TRUE@am__append_4661 = $(nodist_efinet_module_SOURCES) +@COND_arm_efi_TRUE@am__append_4662 = $(nodist_efinet_module_SOURCES) \ +@COND_arm_efi_TRUE@ efinet.marker +@COND_arm_efi_TRUE@am__append_4663 = efinet.mod +@COND_arm_efi_TRUE@am__append_4664 = efinet.marker +@COND_arm64_efi_TRUE@am__append_4665 = efinet.module +@COND_arm64_efi_TRUE@am__append_4666 = efinet.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__append_4667 = +@COND_arm64_efi_TRUE@am__append_4668 = $(nodist_efinet_module_SOURCES) +@COND_arm64_efi_TRUE@am__append_4669 = \ +@COND_arm64_efi_TRUE@ $(nodist_efinet_module_SOURCES) \ +@COND_arm64_efi_TRUE@ efinet.marker +@COND_arm64_efi_TRUE@am__append_4670 = efinet.mod +@COND_arm64_efi_TRUE@am__append_4671 = efinet.marker +@COND_emu_TRUE@am__append_4672 = emunet.module legacycfg.module +@COND_emu_TRUE@am__append_4673 = emunet.module$(EXEEXT) \ +@COND_emu_TRUE@ legacycfg.module$(EXEEXT) +@COND_emu_FALSE@emunet_module_DEPENDENCIES = +@COND_emu_TRUE@am__append_4674 = +@COND_emu_TRUE@am__append_4675 = $(nodist_emunet_module_SOURCES) \ +@COND_emu_TRUE@ $(nodist_legacycfg_module_SOURCES) +@COND_emu_TRUE@am__append_4676 = $(nodist_emunet_module_SOURCES) \ +@COND_emu_TRUE@ emunet.marker \ +@COND_emu_TRUE@ $(nodist_legacycfg_module_SOURCES) \ +@COND_emu_TRUE@ legacycfg.marker +@COND_emu_TRUE@am__append_4677 = emunet.mod legacycfg.mod +@COND_emu_TRUE@am__append_4678 = emunet.marker legacycfg.marker +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@legacycfg_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4679 = legacycfg.module +@COND_i386_pc_TRUE@am__append_4680 = legacycfg.module$(EXEEXT) +@COND_i386_pc_TRUE@am__append_4681 = +@COND_i386_pc_TRUE@am__append_4682 = $(nodist_legacycfg_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4683 = \ +@COND_i386_pc_TRUE@ $(nodist_legacycfg_module_SOURCES) \ +@COND_i386_pc_TRUE@ legacycfg.marker +@COND_i386_pc_TRUE@am__append_4684 = legacycfg.mod +@COND_i386_pc_TRUE@am__append_4685 = legacycfg.marker +@COND_i386_efi_TRUE@am__append_4686 = legacycfg.module +@COND_i386_efi_TRUE@am__append_4687 = legacycfg.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4688 = +@COND_i386_efi_TRUE@am__append_4689 = $(nodist_legacycfg_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4690 = \ +@COND_i386_efi_TRUE@ $(nodist_legacycfg_module_SOURCES) \ +@COND_i386_efi_TRUE@ legacycfg.marker +@COND_i386_efi_TRUE@am__append_4691 = legacycfg.mod +@COND_i386_efi_TRUE@am__append_4692 = legacycfg.marker +@COND_x86_64_efi_TRUE@am__append_4693 = legacycfg.module +@COND_x86_64_efi_TRUE@am__append_4694 = legacycfg.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4695 = +@COND_x86_64_efi_TRUE@am__append_4696 = $(nodist_legacycfg_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4697 = \ +@COND_x86_64_efi_TRUE@ $(nodist_legacycfg_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ legacycfg.marker +@COND_x86_64_efi_TRUE@am__append_4698 = legacycfg.mod +@COND_x86_64_efi_TRUE@am__append_4699 = legacycfg.marker +@COND_i386_xen_TRUE@am__append_4700 = legacycfg.module +@COND_i386_xen_TRUE@am__append_4701 = legacycfg.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_4702 = +@COND_i386_xen_TRUE@am__append_4703 = $(nodist_legacycfg_module_SOURCES) +@COND_i386_xen_TRUE@am__append_4704 = \ +@COND_i386_xen_TRUE@ $(nodist_legacycfg_module_SOURCES) \ +@COND_i386_xen_TRUE@ legacycfg.marker +@COND_i386_xen_TRUE@am__append_4705 = legacycfg.mod +@COND_i386_xen_TRUE@am__append_4706 = legacycfg.marker +@COND_x86_64_xen_TRUE@am__append_4707 = legacycfg.module +@COND_x86_64_xen_TRUE@am__append_4708 = legacycfg.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_4709 = +@COND_x86_64_xen_TRUE@am__append_4710 = $(nodist_legacycfg_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_4711 = \ +@COND_x86_64_xen_TRUE@ $(nodist_legacycfg_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ legacycfg.marker +@COND_x86_64_xen_TRUE@am__append_4712 = legacycfg.mod +@COND_x86_64_xen_TRUE@am__append_4713 = legacycfg.marker +@COND_i386_pc_TRUE@am__append_4714 = backtrace.module +@COND_i386_pc_TRUE@am__append_4715 = backtrace.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@backtrace_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4716 = +@COND_i386_pc_TRUE@am__append_4717 = $(nodist_backtrace_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4718 = \ +@COND_i386_pc_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_i386_pc_TRUE@ backtrace.marker +@COND_i386_pc_TRUE@am__append_4719 = backtrace.mod +@COND_i386_pc_TRUE@am__append_4720 = backtrace.marker +@COND_i386_efi_TRUE@am__append_4721 = backtrace.module +@COND_i386_efi_TRUE@am__append_4722 = backtrace.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4723 = +@COND_i386_efi_TRUE@am__append_4724 = $(nodist_backtrace_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4725 = \ +@COND_i386_efi_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_i386_efi_TRUE@ backtrace.marker +@COND_i386_efi_TRUE@am__append_4726 = backtrace.mod +@COND_i386_efi_TRUE@am__append_4727 = backtrace.marker +@COND_i386_qemu_TRUE@am__append_4728 = backtrace.module +@COND_i386_qemu_TRUE@am__append_4729 = backtrace.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4730 = +@COND_i386_qemu_TRUE@am__append_4731 = $(nodist_backtrace_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4732 = \ +@COND_i386_qemu_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_i386_qemu_TRUE@ backtrace.marker +@COND_i386_qemu_TRUE@am__append_4733 = backtrace.mod +@COND_i386_qemu_TRUE@am__append_4734 = backtrace.marker +@COND_i386_coreboot_TRUE@am__append_4735 = backtrace.module +@COND_i386_coreboot_TRUE@am__append_4736 = backtrace.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_4737 = +@COND_i386_coreboot_TRUE@am__append_4738 = $(nodist_backtrace_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4739 = \ +@COND_i386_coreboot_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ backtrace.marker +@COND_i386_coreboot_TRUE@am__append_4740 = backtrace.mod +@COND_i386_coreboot_TRUE@am__append_4741 = backtrace.marker +@COND_i386_multiboot_TRUE@am__append_4742 = backtrace.module +@COND_i386_multiboot_TRUE@am__append_4743 = backtrace.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4744 = +@COND_i386_multiboot_TRUE@am__append_4745 = $(nodist_backtrace_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4746 = \ +@COND_i386_multiboot_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ backtrace.marker +@COND_i386_multiboot_TRUE@am__append_4747 = backtrace.mod +@COND_i386_multiboot_TRUE@am__append_4748 = backtrace.marker +@COND_i386_ieee1275_TRUE@am__append_4749 = backtrace.module +@COND_i386_ieee1275_TRUE@am__append_4750 = backtrace.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4751 = +@COND_i386_ieee1275_TRUE@am__append_4752 = $(nodist_backtrace_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4753 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ backtrace.marker +@COND_i386_ieee1275_TRUE@am__append_4754 = backtrace.mod +@COND_i386_ieee1275_TRUE@am__append_4755 = backtrace.marker +@COND_x86_64_efi_TRUE@am__append_4756 = backtrace.module +@COND_x86_64_efi_TRUE@am__append_4757 = backtrace.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4758 = +@COND_x86_64_efi_TRUE@am__append_4759 = $(nodist_backtrace_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4760 = \ +@COND_x86_64_efi_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ backtrace.marker +@COND_x86_64_efi_TRUE@am__append_4761 = backtrace.mod +@COND_x86_64_efi_TRUE@am__append_4762 = backtrace.marker +@COND_i386_xen_TRUE@am__append_4763 = backtrace.module +@COND_i386_xen_TRUE@am__append_4764 = backtrace.module$(EXEEXT) +@COND_i386_xen_TRUE@am__append_4765 = +@COND_i386_xen_TRUE@am__append_4766 = $(nodist_backtrace_module_SOURCES) +@COND_i386_xen_TRUE@am__append_4767 = \ +@COND_i386_xen_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_i386_xen_TRUE@ backtrace.marker +@COND_i386_xen_TRUE@am__append_4768 = backtrace.mod +@COND_i386_xen_TRUE@am__append_4769 = backtrace.marker +@COND_x86_64_xen_TRUE@am__append_4770 = backtrace.module +@COND_x86_64_xen_TRUE@am__append_4771 = backtrace.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__append_4772 = +@COND_x86_64_xen_TRUE@am__append_4773 = $(nodist_backtrace_module_SOURCES) +@COND_x86_64_xen_TRUE@am__append_4774 = \ +@COND_x86_64_xen_TRUE@ $(nodist_backtrace_module_SOURCES) \ +@COND_x86_64_xen_TRUE@ backtrace.marker +@COND_x86_64_xen_TRUE@am__append_4775 = backtrace.mod +@COND_x86_64_xen_TRUE@am__append_4776 = backtrace.marker +@COND_i386_pc_TRUE@am__append_4777 = lsapm.module keylayouts.module +@COND_i386_pc_TRUE@am__append_4778 = lsapm.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ keylayouts.module$(EXEEXT) +@COND_i386_pc_FALSE@lsapm_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4779 = +@COND_i386_pc_TRUE@am__append_4780 = $(nodist_lsapm_module_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_keylayouts_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4781 = $(nodist_lsapm_module_SOURCES) \ +@COND_i386_pc_TRUE@ lsapm.marker \ +@COND_i386_pc_TRUE@ $(nodist_keylayouts_module_SOURCES) \ +@COND_i386_pc_TRUE@ keylayouts.marker +@COND_i386_pc_TRUE@am__append_4782 = lsapm.mod keylayouts.mod +@COND_i386_pc_TRUE@am__append_4783 = lsapm.marker keylayouts.marker +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_FALSE@keylayouts_module_DEPENDENCIES = +@COND_i386_efi_TRUE@am__append_4784 = keylayouts.module +@COND_i386_efi_TRUE@am__append_4785 = keylayouts.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4786 = +@COND_i386_efi_TRUE@am__append_4787 = $(nodist_keylayouts_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4788 = \ +@COND_i386_efi_TRUE@ $(nodist_keylayouts_module_SOURCES) \ +@COND_i386_efi_TRUE@ keylayouts.marker +@COND_i386_efi_TRUE@am__append_4789 = keylayouts.mod +@COND_i386_efi_TRUE@am__append_4790 = keylayouts.marker +@COND_i386_qemu_TRUE@am__append_4791 = keylayouts.module +@COND_i386_qemu_TRUE@am__append_4792 = keylayouts.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4793 = +@COND_i386_qemu_TRUE@am__append_4794 = $(nodist_keylayouts_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4795 = \ +@COND_i386_qemu_TRUE@ $(nodist_keylayouts_module_SOURCES) \ +@COND_i386_qemu_TRUE@ keylayouts.marker +@COND_i386_qemu_TRUE@am__append_4796 = keylayouts.mod +@COND_i386_qemu_TRUE@am__append_4797 = keylayouts.marker +@COND_i386_coreboot_TRUE@am__append_4798 = keylayouts.module +@COND_i386_coreboot_TRUE@am__append_4799 = keylayouts.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_4800 = +@COND_i386_coreboot_TRUE@am__append_4801 = $(nodist_keylayouts_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4802 = \ +@COND_i386_coreboot_TRUE@ $(nodist_keylayouts_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ keylayouts.marker +@COND_i386_coreboot_TRUE@am__append_4803 = keylayouts.mod +@COND_i386_coreboot_TRUE@am__append_4804 = keylayouts.marker +@COND_i386_multiboot_TRUE@am__append_4805 = keylayouts.module +@COND_i386_multiboot_TRUE@am__append_4806 = keylayouts.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4807 = +@COND_i386_multiboot_TRUE@am__append_4808 = $(nodist_keylayouts_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4809 = \ +@COND_i386_multiboot_TRUE@ $(nodist_keylayouts_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ keylayouts.marker +@COND_i386_multiboot_TRUE@am__append_4810 = keylayouts.mod +@COND_i386_multiboot_TRUE@am__append_4811 = keylayouts.marker +@COND_i386_ieee1275_TRUE@am__append_4812 = keylayouts.module +@COND_i386_ieee1275_TRUE@am__append_4813 = keylayouts.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4814 = +@COND_i386_ieee1275_TRUE@am__append_4815 = $(nodist_keylayouts_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4816 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_keylayouts_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ keylayouts.marker +@COND_i386_ieee1275_TRUE@am__append_4817 = keylayouts.mod +@COND_i386_ieee1275_TRUE@am__append_4818 = keylayouts.marker +@COND_x86_64_efi_TRUE@am__append_4819 = keylayouts.module +@COND_x86_64_efi_TRUE@am__append_4820 = keylayouts.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__append_4821 = +@COND_x86_64_efi_TRUE@am__append_4822 = $(nodist_keylayouts_module_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4823 = \ +@COND_x86_64_efi_TRUE@ $(nodist_keylayouts_module_SOURCES) \ +@COND_x86_64_efi_TRUE@ keylayouts.marker +@COND_x86_64_efi_TRUE@am__append_4824 = keylayouts.mod +@COND_x86_64_efi_TRUE@am__append_4825 = keylayouts.marker +@COND_ENABLE_CACHE_STATS_TRUE@am__append_4826 = cacheinfo.module +@COND_ENABLE_CACHE_STATS_TRUE@am__append_4827 = cacheinfo.module$(EXEEXT) +@COND_ENABLE_CACHE_STATS_FALSE@cacheinfo_module_DEPENDENCIES = +@COND_ENABLE_CACHE_STATS_TRUE@am__append_4828 = +@COND_ENABLE_CACHE_STATS_TRUE@am__append_4829 = $(nodist_cacheinfo_module_SOURCES) +@COND_ENABLE_CACHE_STATS_TRUE@am__append_4830 = $(nodist_cacheinfo_module_SOURCES) \ +@COND_ENABLE_CACHE_STATS_TRUE@ cacheinfo.marker +@COND_ENABLE_CACHE_STATS_TRUE@am__append_4831 = cacheinfo.mod +@COND_ENABLE_CACHE_STATS_TRUE@am__append_4832 = cacheinfo.marker +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_4833 = boottime.module +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_4834 = boottime.module$(EXEEXT) +@COND_ENABLE_BOOT_TIME_STATS_FALSE@boottime_module_DEPENDENCIES = +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_4835 = +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_4836 = $(nodist_boottime_module_SOURCES) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_4837 = $(nodist_boottime_module_SOURCES) \ +@COND_ENABLE_BOOT_TIME_STATS_TRUE@ boottime.marker +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_4838 = boottime.mod +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__append_4839 = boottime.marker +@COND_i386_pc_TRUE@am__append_4840 = gdb.module +@COND_i386_pc_TRUE@am__append_4841 = gdb.module$(EXEEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@gdb_module_DEPENDENCIES = +@COND_i386_pc_TRUE@am__append_4842 = +@COND_i386_pc_TRUE@am__append_4843 = $(nodist_gdb_module_SOURCES) +@COND_i386_pc_TRUE@am__append_4844 = $(nodist_gdb_module_SOURCES) \ +@COND_i386_pc_TRUE@ gdb.marker +@COND_i386_pc_TRUE@am__append_4845 = gdb.mod +@COND_i386_pc_TRUE@am__append_4846 = gdb.marker +@COND_i386_efi_TRUE@am__append_4847 = gdb.module +@COND_i386_efi_TRUE@am__append_4848 = gdb.module$(EXEEXT) +@COND_i386_efi_TRUE@am__append_4849 = +@COND_i386_efi_TRUE@am__append_4850 = $(nodist_gdb_module_SOURCES) +@COND_i386_efi_TRUE@am__append_4851 = $(nodist_gdb_module_SOURCES) \ +@COND_i386_efi_TRUE@ gdb.marker +@COND_i386_efi_TRUE@am__append_4852 = gdb.mod +@COND_i386_efi_TRUE@am__append_4853 = gdb.marker +@COND_i386_qemu_TRUE@am__append_4854 = gdb.module +@COND_i386_qemu_TRUE@am__append_4855 = gdb.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__append_4856 = +@COND_i386_qemu_TRUE@am__append_4857 = $(nodist_gdb_module_SOURCES) +@COND_i386_qemu_TRUE@am__append_4858 = $(nodist_gdb_module_SOURCES) \ +@COND_i386_qemu_TRUE@ gdb.marker +@COND_i386_qemu_TRUE@am__append_4859 = gdb.mod +@COND_i386_qemu_TRUE@am__append_4860 = gdb.marker +@COND_i386_coreboot_TRUE@am__append_4861 = gdb.module +@COND_i386_coreboot_TRUE@am__append_4862 = gdb.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__append_4863 = +@COND_i386_coreboot_TRUE@am__append_4864 = $(nodist_gdb_module_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4865 = \ +@COND_i386_coreboot_TRUE@ $(nodist_gdb_module_SOURCES) \ +@COND_i386_coreboot_TRUE@ gdb.marker +@COND_i386_coreboot_TRUE@am__append_4866 = gdb.mod +@COND_i386_coreboot_TRUE@am__append_4867 = gdb.marker +@COND_i386_multiboot_TRUE@am__append_4868 = gdb.module +@COND_i386_multiboot_TRUE@am__append_4869 = gdb.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__append_4870 = +@COND_i386_multiboot_TRUE@am__append_4871 = $(nodist_gdb_module_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4872 = \ +@COND_i386_multiboot_TRUE@ $(nodist_gdb_module_SOURCES) \ +@COND_i386_multiboot_TRUE@ gdb.marker +@COND_i386_multiboot_TRUE@am__append_4873 = gdb.mod +@COND_i386_multiboot_TRUE@am__append_4874 = gdb.marker +@COND_i386_ieee1275_TRUE@am__append_4875 = gdb.module +@COND_i386_ieee1275_TRUE@am__append_4876 = gdb.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__append_4877 = +@COND_i386_ieee1275_TRUE@am__append_4878 = $(nodist_gdb_module_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4879 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_gdb_module_SOURCES) \ +@COND_i386_ieee1275_TRUE@ gdb.marker +@COND_i386_ieee1275_TRUE@am__append_4880 = gdb.mod +@COND_i386_ieee1275_TRUE@am__append_4881 = gdb.marker +@COND_emu_TRUE@am__append_4882 = kernel.exec +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_FALSE@kernel_exec_DEPENDENCIES = +@COND_emu_TRUE@am__append_4883 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_emu_TRUE@am__append_4884 = $(nodist_kernel_exec_SOURCES) +@COND_emu_TRUE@am__append_4885 = $(nodist_kernel_exec_SOURCES) \ +@COND_emu_TRUE@ kernel.img +@COND_emu_TRUE@am__append_4886 = kernel.img +@COND_i386_pc_TRUE@am__append_4887 = kernel.exec +@COND_i386_pc_TRUE@am__append_4888 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_i386_pc_TRUE@am__append_4889 = $(nodist_kernel_exec_SOURCES) +@COND_i386_pc_TRUE@am__append_4890 = $(nodist_kernel_exec_SOURCES) \ +@COND_i386_pc_TRUE@ kernel.img +@COND_i386_pc_TRUE@am__append_4891 = kernel.img +@COND_i386_efi_TRUE@am__append_4892 = kernel.exec +@COND_i386_efi_TRUE@am__append_4893 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_i386_efi_TRUE@am__append_4894 = $(nodist_kernel_exec_SOURCES) +@COND_i386_efi_TRUE@am__append_4895 = $(nodist_kernel_exec_SOURCES) \ +@COND_i386_efi_TRUE@ kernel.img +@COND_i386_efi_TRUE@am__append_4896 = kernel.img +@COND_i386_qemu_TRUE@am__append_4897 = kernel.exec +@COND_i386_qemu_TRUE@am__append_4898 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_i386_qemu_TRUE@am__append_4899 = $(nodist_kernel_exec_SOURCES) +@COND_i386_qemu_TRUE@am__append_4900 = $(nodist_kernel_exec_SOURCES) \ +@COND_i386_qemu_TRUE@ kernel.img +@COND_i386_qemu_TRUE@am__append_4901 = kernel.img +@COND_i386_coreboot_TRUE@am__append_4902 = kernel.exec +@COND_i386_coreboot_TRUE@am__append_4903 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_i386_coreboot_TRUE@am__append_4904 = $(nodist_kernel_exec_SOURCES) +@COND_i386_coreboot_TRUE@am__append_4905 = \ +@COND_i386_coreboot_TRUE@ $(nodist_kernel_exec_SOURCES) \ +@COND_i386_coreboot_TRUE@ kernel.img +@COND_i386_coreboot_TRUE@am__append_4906 = kernel.img +@COND_i386_multiboot_TRUE@am__append_4907 = kernel.exec +@COND_i386_multiboot_TRUE@am__append_4908 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_i386_multiboot_TRUE@am__append_4909 = $(nodist_kernel_exec_SOURCES) +@COND_i386_multiboot_TRUE@am__append_4910 = \ +@COND_i386_multiboot_TRUE@ $(nodist_kernel_exec_SOURCES) \ +@COND_i386_multiboot_TRUE@ kernel.img +@COND_i386_multiboot_TRUE@am__append_4911 = kernel.img +@COND_i386_ieee1275_TRUE@am__append_4912 = kernel.exec +@COND_i386_ieee1275_TRUE@am__append_4913 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_i386_ieee1275_TRUE@am__append_4914 = $(nodist_kernel_exec_SOURCES) +@COND_i386_ieee1275_TRUE@am__append_4915 = \ +@COND_i386_ieee1275_TRUE@ $(nodist_kernel_exec_SOURCES) \ +@COND_i386_ieee1275_TRUE@ kernel.img +@COND_i386_ieee1275_TRUE@am__append_4916 = kernel.img +@COND_x86_64_efi_TRUE@am__append_4917 = kernel.exec +@COND_x86_64_efi_TRUE@am__append_4918 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_x86_64_efi_TRUE@am__append_4919 = $(nodist_kernel_exec_SOURCES) +@COND_x86_64_efi_TRUE@am__append_4920 = $(nodist_kernel_exec_SOURCES) \ +@COND_x86_64_efi_TRUE@ kernel.img +@COND_x86_64_efi_TRUE@am__append_4921 = kernel.img +@COND_i386_xen_TRUE@am__append_4922 = kernel.exec +@COND_i386_xen_TRUE@am__append_4923 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_i386_xen_TRUE@am__append_4924 = $(nodist_kernel_exec_SOURCES) +@COND_i386_xen_TRUE@am__append_4925 = $(nodist_kernel_exec_SOURCES) \ +@COND_i386_xen_TRUE@ kernel.img +@COND_i386_xen_TRUE@am__append_4926 = kernel.img +@COND_x86_64_xen_TRUE@am__append_4927 = kernel.exec +@COND_x86_64_xen_TRUE@am__append_4928 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_x86_64_xen_TRUE@am__append_4929 = $(nodist_kernel_exec_SOURCES) +@COND_x86_64_xen_TRUE@am__append_4930 = $(nodist_kernel_exec_SOURCES) \ +@COND_x86_64_xen_TRUE@ kernel.img +@COND_x86_64_xen_TRUE@am__append_4931 = kernel.img +@COND_mips_loongson_TRUE@am__append_4932 = kernel.exec +@COND_mips_loongson_TRUE@am__append_4933 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_mips_loongson_TRUE@am__append_4934 = $(nodist_kernel_exec_SOURCES) +@COND_mips_loongson_TRUE@am__append_4935 = \ +@COND_mips_loongson_TRUE@ $(nodist_kernel_exec_SOURCES) \ +@COND_mips_loongson_TRUE@ kernel.img +@COND_mips_loongson_TRUE@am__append_4936 = kernel.img +@COND_sparc64_ieee1275_TRUE@am__append_4937 = kernel.exec +@COND_sparc64_ieee1275_TRUE@am__append_4938 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_sparc64_ieee1275_TRUE@am__append_4939 = $(nodist_kernel_exec_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_4940 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_kernel_exec_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ kernel.img +@COND_sparc64_ieee1275_TRUE@am__append_4941 = kernel.img +@COND_powerpc_ieee1275_TRUE@am__append_4942 = kernel.exec +@COND_powerpc_ieee1275_TRUE@am__append_4943 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_powerpc_ieee1275_TRUE@am__append_4944 = $(nodist_kernel_exec_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_4945 = \ +@COND_powerpc_ieee1275_TRUE@ $(nodist_kernel_exec_SOURCES) \ +@COND_powerpc_ieee1275_TRUE@ kernel.img +@COND_powerpc_ieee1275_TRUE@am__append_4946 = kernel.img +@COND_mips_arc_TRUE@am__append_4947 = kernel.exec +@COND_mips_arc_TRUE@am__append_4948 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_mips_arc_TRUE@am__append_4949 = $(nodist_kernel_exec_SOURCES) +@COND_mips_arc_TRUE@am__append_4950 = $(nodist_kernel_exec_SOURCES) \ +@COND_mips_arc_TRUE@ kernel.img +@COND_mips_arc_TRUE@am__append_4951 = kernel.img +@COND_ia64_efi_TRUE@am__append_4952 = kernel.exec +@COND_ia64_efi_TRUE@am__append_4953 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_ia64_efi_TRUE@am__append_4954 = $(nodist_kernel_exec_SOURCES) +@COND_ia64_efi_TRUE@am__append_4955 = $(nodist_kernel_exec_SOURCES) \ +@COND_ia64_efi_TRUE@ kernel.img +@COND_ia64_efi_TRUE@am__append_4956 = kernel.img +@COND_mips_qemu_mips_TRUE@am__append_4957 = kernel.exec +@COND_mips_qemu_mips_TRUE@am__append_4958 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_mips_qemu_mips_TRUE@am__append_4959 = $(nodist_kernel_exec_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_4960 = \ +@COND_mips_qemu_mips_TRUE@ $(nodist_kernel_exec_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ kernel.img +@COND_mips_qemu_mips_TRUE@am__append_4961 = kernel.img +@COND_arm_uboot_TRUE@am__append_4962 = kernel.exec +@COND_arm_uboot_TRUE@am__append_4963 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_arm_uboot_TRUE@am__append_4964 = $(nodist_kernel_exec_SOURCES) +@COND_arm_uboot_TRUE@am__append_4965 = $(nodist_kernel_exec_SOURCES) \ +@COND_arm_uboot_TRUE@ kernel.img +@COND_arm_uboot_TRUE@am__append_4966 = kernel.img +@COND_arm_efi_TRUE@am__append_4967 = kernel.exec +@COND_arm_efi_TRUE@am__append_4968 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_arm_efi_TRUE@am__append_4969 = $(nodist_kernel_exec_SOURCES) +@COND_arm_efi_TRUE@am__append_4970 = $(nodist_kernel_exec_SOURCES) \ +@COND_arm_efi_TRUE@ kernel.img +@COND_arm_efi_TRUE@am__append_4971 = kernel.img +@COND_arm64_efi_TRUE@am__append_4972 = kernel.exec +@COND_arm64_efi_TRUE@am__append_4973 = video/sm712_init.c video/sis315_init.c kern/arm/cache.S osdep/unix/exec.c osdep/unix/emuconsole.c osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S +@COND_arm64_efi_TRUE@am__append_4974 = $(nodist_kernel_exec_SOURCES) +@COND_arm64_efi_TRUE@am__append_4975 = $(nodist_kernel_exec_SOURCES) \ +@COND_arm64_efi_TRUE@ kernel.img +@COND_arm64_efi_TRUE@am__append_4976 = kernel.img +@COND_i386_pc_TRUE@am__append_4977 = boot.image +@COND_i386_pc_TRUE@am__append_4978 = +@COND_i386_pc_TRUE@am__append_4979 = $(nodist_boot_image_SOURCES) +@COND_i386_pc_TRUE@am__append_4980 = $(nodist_boot_image_SOURCES) \ +@COND_i386_pc_TRUE@ boot.img +@COND_i386_pc_TRUE@am__append_4981 = boot.img +@COND_i386_qemu_TRUE@am__append_4982 = boot.image +@COND_i386_qemu_TRUE@am__append_4983 = +@COND_i386_qemu_TRUE@am__append_4984 = $(nodist_boot_image_SOURCES) +@COND_i386_qemu_TRUE@am__append_4985 = $(nodist_boot_image_SOURCES) \ +@COND_i386_qemu_TRUE@ boot.img +@COND_i386_qemu_TRUE@am__append_4986 = boot.img +@COND_sparc64_ieee1275_TRUE@am__append_4987 = boot.image +@COND_sparc64_ieee1275_TRUE@am__append_4988 = +@COND_sparc64_ieee1275_TRUE@am__append_4989 = $(nodist_boot_image_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_4990 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_boot_image_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ boot.img +@COND_sparc64_ieee1275_TRUE@am__append_4991 = boot.img +@COND_i386_pc_TRUE@am__append_4992 = boot_hybrid.image cdboot.image +@COND_i386_pc_TRUE@am__append_4993 = +@COND_i386_pc_TRUE@am__append_4994 = \ +@COND_i386_pc_TRUE@ $(nodist_boot_hybrid_image_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_cdboot_image_SOURCES) +@COND_i386_pc_TRUE@am__append_4995 = \ +@COND_i386_pc_TRUE@ $(nodist_boot_hybrid_image_SOURCES) \ +@COND_i386_pc_TRUE@ boot_hybrid.img \ +@COND_i386_pc_TRUE@ $(nodist_cdboot_image_SOURCES) cdboot.img +@COND_i386_pc_TRUE@am__append_4996 = boot_hybrid.img cdboot.img +@COND_sparc64_ieee1275_TRUE@am__append_4997 = cdboot.image +@COND_sparc64_ieee1275_TRUE@am__append_4998 = +@COND_sparc64_ieee1275_TRUE@am__append_4999 = $(nodist_cdboot_image_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_5000 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_cdboot_image_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ cdboot.img +@COND_sparc64_ieee1275_TRUE@am__append_5001 = cdboot.img +@COND_i386_pc_TRUE@am__append_5002 = pxeboot.image diskboot.image +@COND_i386_pc_TRUE@am__append_5003 = +@COND_i386_pc_TRUE@am__append_5004 = $(nodist_pxeboot_image_SOURCES) \ +@COND_i386_pc_TRUE@ $(nodist_diskboot_image_SOURCES) +@COND_i386_pc_TRUE@am__append_5005 = $(nodist_pxeboot_image_SOURCES) \ +@COND_i386_pc_TRUE@ pxeboot.img \ +@COND_i386_pc_TRUE@ $(nodist_diskboot_image_SOURCES) \ +@COND_i386_pc_TRUE@ diskboot.img +@COND_i386_pc_TRUE@am__append_5006 = pxeboot.img diskboot.img +@COND_sparc64_ieee1275_TRUE@am__append_5007 = diskboot.image +@COND_sparc64_ieee1275_TRUE@am__append_5008 = +@COND_sparc64_ieee1275_TRUE@am__append_5009 = $(nodist_diskboot_image_SOURCES) +@COND_sparc64_ieee1275_TRUE@am__append_5010 = \ +@COND_sparc64_ieee1275_TRUE@ $(nodist_diskboot_image_SOURCES) \ +@COND_sparc64_ieee1275_TRUE@ diskboot.img +@COND_sparc64_ieee1275_TRUE@am__append_5011 = diskboot.img +@COND_i386_pc_TRUE@am__append_5012 = lnxboot.image +@COND_i386_pc_TRUE@am__append_5013 = +@COND_i386_pc_TRUE@am__append_5014 = $(nodist_lnxboot_image_SOURCES) +@COND_i386_pc_TRUE@am__append_5015 = $(nodist_lnxboot_image_SOURCES) \ +@COND_i386_pc_TRUE@ lnxboot.img +@COND_i386_pc_TRUE@am__append_5016 = lnxboot.img +@COND_mips_loongson_TRUE@am__append_5017 = xz_decompress.image +@COND_mips_loongson_TRUE@am__append_5018 = +@COND_mips_loongson_TRUE@am__append_5019 = $(nodist_xz_decompress_image_SOURCES) +@COND_mips_loongson_TRUE@am__append_5020 = $(nodist_xz_decompress_image_SOURCES) \ +@COND_mips_loongson_TRUE@ xz_decompress.img +@COND_mips_loongson_TRUE@am__append_5021 = xz_decompress.img +@COND_mips_arc_TRUE@am__append_5022 = xz_decompress.image +@COND_mips_arc_TRUE@am__append_5023 = +@COND_mips_arc_TRUE@am__append_5024 = $(nodist_xz_decompress_image_SOURCES) +@COND_mips_arc_TRUE@am__append_5025 = \ +@COND_mips_arc_TRUE@ $(nodist_xz_decompress_image_SOURCES) \ +@COND_mips_arc_TRUE@ xz_decompress.img +@COND_mips_arc_TRUE@am__append_5026 = xz_decompress.img +@COND_mips_qemu_mips_TRUE@am__append_5027 = xz_decompress.image +@COND_mips_qemu_mips_TRUE@am__append_5028 = +@COND_mips_qemu_mips_TRUE@am__append_5029 = $(nodist_xz_decompress_image_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_5030 = $(nodist_xz_decompress_image_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ xz_decompress.img +@COND_mips_qemu_mips_TRUE@am__append_5031 = xz_decompress.img +@COND_mips_loongson_TRUE@am__append_5032 = none_decompress.image +@COND_mips_loongson_TRUE@am__append_5033 = +@COND_mips_loongson_TRUE@am__append_5034 = $(nodist_none_decompress_image_SOURCES) +@COND_mips_loongson_TRUE@am__append_5035 = $(nodist_none_decompress_image_SOURCES) \ +@COND_mips_loongson_TRUE@ none_decompress.img +@COND_mips_loongson_TRUE@am__append_5036 = none_decompress.img +@COND_mips_arc_TRUE@am__append_5037 = none_decompress.image +@COND_mips_arc_TRUE@am__append_5038 = +@COND_mips_arc_TRUE@am__append_5039 = $(nodist_none_decompress_image_SOURCES) +@COND_mips_arc_TRUE@am__append_5040 = \ +@COND_mips_arc_TRUE@ $(nodist_none_decompress_image_SOURCES) \ +@COND_mips_arc_TRUE@ none_decompress.img +@COND_mips_arc_TRUE@am__append_5041 = none_decompress.img +@COND_mips_qemu_mips_TRUE@am__append_5042 = none_decompress.image +@COND_mips_qemu_mips_TRUE@am__append_5043 = +@COND_mips_qemu_mips_TRUE@am__append_5044 = $(nodist_none_decompress_image_SOURCES) +@COND_mips_qemu_mips_TRUE@am__append_5045 = $(nodist_none_decompress_image_SOURCES) \ +@COND_mips_qemu_mips_TRUE@ none_decompress.img +@COND_mips_qemu_mips_TRUE@am__append_5046 = none_decompress.img +@COND_i386_pc_TRUE@am__append_5047 = lzma_decompress.image +@COND_i386_pc_TRUE@am__append_5048 = +@COND_i386_pc_TRUE@am__append_5049 = $(nodist_lzma_decompress_image_SOURCES) +@COND_i386_pc_TRUE@am__append_5050 = \ +@COND_i386_pc_TRUE@ $(nodist_lzma_decompress_image_SOURCES) \ +@COND_i386_pc_TRUE@ lzma_decompress.img +@COND_i386_pc_TRUE@am__append_5051 = lzma_decompress.img +@COND_mips_loongson_TRUE@am__append_5052 = fwstart.image \ +@COND_mips_loongson_TRUE@ fwstart_fuloong2f.image +@COND_mips_loongson_TRUE@am__append_5053 = +@COND_mips_loongson_TRUE@am__append_5054 = \ +@COND_mips_loongson_TRUE@ $(nodist_fwstart_image_SOURCES) \ +@COND_mips_loongson_TRUE@ $(nodist_fwstart_fuloong2f_image_SOURCES) +@COND_mips_loongson_TRUE@am__append_5055 = \ +@COND_mips_loongson_TRUE@ $(nodist_fwstart_image_SOURCES) \ +@COND_mips_loongson_TRUE@ fwstart.img \ +@COND_mips_loongson_TRUE@ $(nodist_fwstart_fuloong2f_image_SOURCES) \ +@COND_mips_loongson_TRUE@ fwstart_fuloong2f.img +@COND_mips_loongson_TRUE@am__append_5056 = fwstart.img \ +@COND_mips_loongson_TRUE@ fwstart_fuloong2f.img +@COND_emu_TRUE@am__append_5057 = grub-emu grub-emu-lite +@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@am__append_5058 = grub-emu.1 +@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@am__append_5059 = grub-emu.1 +@COND_emu_TRUE@am__append_5060 = +@COND_emu_TRUE@am__append_5061 = $(nodist_grub_emu_SOURCES) \ +@COND_emu_TRUE@ $(nodist_grub_emu_lite_SOURCES) +@COND_emu_TRUE@am__append_5062 = $(nodist_grub_emu_SOURCES) \ +@COND_emu_TRUE@ $(nodist_grub_emu_lite_SOURCES) +@COND_powerpc_ieee1275_TRUE@am__append_5063 = grub.chrp bootinfo.txt +@COND_powerpc_ieee1275_TRUE@am__append_5064 = grub.chrp bootinfo.txt +@COND_powerpc_ieee1275_TRUE@am__append_5065 = +@COND_powerpc_ieee1275_TRUE@am__append_5066 = \ +@COND_powerpc_ieee1275_TRUE@ boot/powerpc/grub.chrp.in \ +@COND_powerpc_ieee1275_TRUE@ boot/powerpc/bootinfo.txt.in +@COND_emu_TRUE@am__append_5067 = $(top_srcdir)/include/grub/compiler-rt-emu.h +@COND_emu_FALSE@am__append_5068 = $(top_srcdir)/include/grub/compiler-rt.h +@COND_i386_pc_TRUE@am__append_5069 = $(top_builddir)/include/grub/machine/kernel.h \ +@COND_i386_pc_TRUE@ $(top_builddir)/include/grub/machine/pxe.h \ +@COND_i386_pc_TRUE@ $(top_builddir)/include/grub/machine/int.h \ +@COND_i386_pc_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h +@COND_i386_efi_TRUE@am__append_5070 = \ +@COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ +@COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ +@COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h \ +@COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h \ +@COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/pci.h \ +@COND_i386_efi_TRUE@ $(top_srcdir)/include/grub/i386/pmtimer.h +@COND_i386_coreboot_TRUE@am__append_5071 = $(top_srcdir)/include/grub/i386/tsc.h \ +@COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/i386/coreboot/lbio.h \ +@COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/video.h \ +@COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/video_fb.h \ +@COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/gfxterm.h \ +@COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/font.h \ +@COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/bufio.h \ +@COND_i386_coreboot_TRUE@ $(top_srcdir)/include/grub/acpi.h +@COND_i386_multiboot_TRUE@am__append_5072 = $(top_srcdir)/include/grub/i386/tsc.h \ +@COND_i386_multiboot_TRUE@ $(top_srcdir)/include/grub/acpi.h +@COND_i386_qemu_TRUE@am__append_5073 = \ +@COND_i386_qemu_TRUE@ $(top_srcdir)/include/grub/pci.h \ +@COND_i386_qemu_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h +@COND_i386_ieee1275_TRUE@am__append_5074 = $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ +@COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ +@COND_i386_ieee1275_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h +@COND_i386_xen_TRUE@am__append_5075 = \ +@COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/xen.h \ +@COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/i386/xen/hypercall.h \ +@COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ +@COND_i386_xen_TRUE@ $(top_srcdir)/include/grub/loader.h +@COND_x86_64_xen_TRUE@am__append_5076 = \ +@COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/xen.h \ +@COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/x86_64/xen/hypercall.h \ +@COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ +@COND_x86_64_xen_TRUE@ $(top_srcdir)/include/grub/loader.h +@COND_x86_64_efi_TRUE@am__append_5077 = \ +@COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ +@COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ +@COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/i386/tsc.h \ +@COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/pci.h \ +@COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h \ +@COND_x86_64_efi_TRUE@ $(top_srcdir)/include/grub/i386/pmtimer.h +@COND_ia64_efi_TRUE@am__append_5078 = \ +@COND_ia64_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ +@COND_ia64_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ +@COND_ia64_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +@COND_mips_TRUE@am__append_5079 = $(top_builddir)/include/grub/cpu/kernel.h +@COND_mips_arc_TRUE@am__append_5080 = \ +@COND_mips_arc_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_mips_arc_TRUE@ $(top_srcdir)/include/grub/arc/arc.h \ +@COND_mips_arc_TRUE@ $(top_srcdir)/include/grub/terminfo.h +@COND_mips_qemu_mips_TRUE@am__append_5081 = $(top_builddir)/include/grub/keyboard_layouts.h \ +@COND_mips_qemu_mips_TRUE@ $(top_builddir)/include/grub/machine/kernel.h \ +@COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/serial.h \ +@COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/loader.h \ +@COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_mips_qemu_mips_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +@COND_mips_loongson_TRUE@am__append_5082 = $(top_builddir)/include/grub/keyboard_layouts.h \ +@COND_mips_loongson_TRUE@ $(top_builddir)/include/grub/machine/kernel.h \ +@COND_mips_loongson_TRUE@ $(top_builddir)/include/grub/machine/time.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/video.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/video_fb.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/gfxterm.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/font.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/bufio.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/pci.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/cs5536.h \ +@COND_mips_loongson_TRUE@ $(top_builddir)/include/grub/machine/pci.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/serial.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/loader.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_mips_loongson_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +@COND_mips_qemu_mips_TRUE@am__append_5083 = $(top_builddir)/include/grub/machine/memory.h \ +@COND_mips_qemu_mips_TRUE@ $(top_builddir)/include/grub/machine/kernel.h +@COND_powerpc_ieee1275_TRUE@am__append_5084 = $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ +@COND_powerpc_ieee1275_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@COND_powerpc_ieee1275_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_powerpc_ieee1275_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +@COND_sparc64_ieee1275_TRUE@am__append_5085 = $(top_srcdir)/include/grub/ieee1275/ieee1275.h \ +@COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/sparc64/ieee1275/ieee1275.h \ +@COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/terminfo.h \ +@COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_sparc64_ieee1275_TRUE@ $(top_srcdir)/include/grub/lib/arg.h +@COND_arm_uboot_TRUE@am__append_5086 = \ +@COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/uboot/uboot.h \ +@COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/uboot/disk.h \ +@COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/extcmd.h \ +@COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/lib/arg.h \ +@COND_arm_uboot_TRUE@ $(top_srcdir)/include/grub/arm/system.h +@COND_arm_efi_TRUE@am__append_5087 = $(top_srcdir)/include/grub/arm/efi/loader.h \ +@COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ +@COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ +@COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/arm/system.h \ +@COND_arm_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +@COND_arm64_efi_TRUE@am__append_5088 = \ +@COND_arm64_efi_TRUE@ $(top_srcdir)/include/grub/efi/efi.h \ +@COND_arm64_efi_TRUE@ $(top_srcdir)/include/grub/efi/disk.h \ +@COND_arm64_efi_TRUE@ $(top_srcdir)/include/grub/acpi.h +@COND_emu_TRUE@am__append_5089 = \ +@COND_emu_TRUE@ $(top_srcdir)/include/grub/datetime.h \ +@COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/misc.h \ +@COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/net.h \ +@COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/hostdisk.h \ +@COND_emu_TRUE@ $(top_srcdir)/include/grub/emu/hostfile.h \ +@COND_emu_TRUE@ $(top_srcdir)/include/grub/extcmd.h +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__append_5090 = $(top_srcdir)/include/grub/sdl.h +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__append_5091 = $(top_srcdir)/include/grub/libpciaccess.h +@COND_emu_TRUE@am__append_5092 = grub_emu_init.h grub_emu_init.c +@COND_ENABLE_EFIEMU_TRUE@am__append_5093 = efiemu32.o efiemu64.o +@COND_ENABLE_EFIEMU_TRUE@am__append_5094 = efiemu32.o efiemu64.o efiemu64_c.o efiemu64_s.o +subdir = grub-core +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argp.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/errno_h.m4 \ + $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \ + $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/langinfo_h.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libunistring-base.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/mbtowc.m4 \ + $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ + $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/sleep.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdalign.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strchrnul.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sysexits.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/warn-on-use.m4 \ + $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ + $(top_srcdir)/m4/wcwidth.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(dist_grubconf_DATA) \ + $(am__dist_noinst_DATA_DIST) $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config-util.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +@COND_emu_TRUE@am__EXEEXT_1 = grub-emu$(EXEEXT) grub-emu-lite$(EXEEXT) +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(platformdir)" \ + "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(grubconfdir)" "$(DESTDIR)$(platformdir)" \ + "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" \ + "$(DESTDIR)$(grubconfdir)" "$(DESTDIR)$(pkgdatadir)" \ + "$(DESTDIR)$(platformdir)" +@COND_i386_pc_TRUE@am__EXEEXT_2 = cs5536.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_3 = cs5536.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_4 = cs5536.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_5 = cs5536.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_6 = cs5536.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_7 = cs5536.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_8 = cs5536.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_9 = lsspd.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_10 = usb.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_11 = usb.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_12 = usb.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_13 = usb.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_14 = usb.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_15 = usb.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_16 = usb.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_17 = usb.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_18 = usbserial_common.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_19 = usbserial_common.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_20 = usbserial_common.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_21 = \ +@COND_i386_coreboot_TRUE@ usbserial_common.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_22 = \ +@COND_i386_multiboot_TRUE@ usbserial_common.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_23 = \ +@COND_i386_ieee1275_TRUE@ usbserial_common.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_24 = \ +@COND_x86_64_efi_TRUE@ usbserial_common.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_25 = \ +@COND_mips_loongson_TRUE@ usbserial_common.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_26 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_27 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_28 = usbserial_pl2303.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_29 = \ +@COND_i386_coreboot_TRUE@ usbserial_pl2303.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_30 = \ +@COND_i386_multiboot_TRUE@ usbserial_pl2303.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_31 = \ +@COND_i386_ieee1275_TRUE@ usbserial_pl2303.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_32 = \ +@COND_x86_64_efi_TRUE@ usbserial_pl2303.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_33 = \ +@COND_mips_loongson_TRUE@ usbserial_pl2303.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_34 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_35 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_36 = usbserial_ftdi.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_37 = \ +@COND_i386_coreboot_TRUE@ usbserial_ftdi.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_38 = \ +@COND_i386_multiboot_TRUE@ usbserial_ftdi.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_39 = \ +@COND_i386_ieee1275_TRUE@ usbserial_ftdi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_40 = usbserial_ftdi.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_41 = \ +@COND_mips_loongson_TRUE@ usbserial_ftdi.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_42 = usbserial_usbdebug.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_43 = \ +@COND_i386_efi_TRUE@ usbserial_usbdebug.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_44 = \ +@COND_i386_qemu_TRUE@ usbserial_usbdebug.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_45 = \ +@COND_i386_coreboot_TRUE@ usbserial_usbdebug.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_46 = \ +@COND_i386_multiboot_TRUE@ usbserial_usbdebug.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_47 = \ +@COND_i386_ieee1275_TRUE@ usbserial_usbdebug.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_48 = \ +@COND_x86_64_efi_TRUE@ usbserial_usbdebug.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_49 = \ +@COND_mips_loongson_TRUE@ usbserial_usbdebug.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_50 = uhci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_51 = uhci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_52 = uhci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_53 = uhci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_54 = uhci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_55 = uhci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_56 = uhci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_57 = uhci.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_58 = ohci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_59 = ohci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_60 = ohci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_61 = ohci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_62 = ohci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_63 = ohci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_64 = ohci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_65 = ohci.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_66 = ehci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_67 = ehci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_68 = ehci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_69 = ehci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_70 = ehci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_71 = ehci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_72 = ehci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_73 = ehci.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_74 = pci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_75 = pci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_76 = pci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_77 = pci.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_78 = nativedisk.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_79 = nativedisk.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_80 = nativedisk.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_81 = nativedisk.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_82 = nativedisk.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_83 = nativedisk.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_84 = nativedisk.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_85 = nativedisk.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_86 = nativedisk.module$(EXEEXT) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am__EXEEXT_87 = \ +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@ emupci.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_88 = lsdev.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_89 = lsxen.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_90 = lsxen.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_91 = cmostest.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_92 = cmostest.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_93 = cmostest.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_94 = cmostest.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_95 = cmostest.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_96 = cmostest.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_97 = cmostest.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_98 = cmostest.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_99 = cmostest.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_100 = cmosdump.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_101 = cmosdump.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_102 = cmosdump.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_103 = cmosdump.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_104 = cmosdump.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_105 = cmosdump.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_106 = cmosdump.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_107 = cmosdump.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_108 = cmosdump.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_109 = iorw.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_110 = iorw.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_111 = iorw.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_112 = iorw.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_113 = iorw.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_114 = iorw.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_115 = iorw.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_116 = cbtable.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_117 = cbtable.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_118 = cbtable.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_119 = cbtable.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_120 = cbtable.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_121 = cbtable.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_122 = cbtime.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_123 = cbtime.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_124 = cbtime.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_125 = cbtime.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_126 = cbtime.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_127 = cbtime.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_128 = cbtime.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_129 = cbls.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_130 = cbls.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_131 = cbls.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_132 = cbls.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_133 = cbls.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_134 = cbls.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_135 = cbls.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_136 = cbmemc.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_137 = cbmemc.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_138 = cbmemc.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_139 = cbmemc.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_140 = cbmemc.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_141 = cbmemc.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_142 = cbmemc.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_143 = acpi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_144 = acpi.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_145 = acpi.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_146 = acpi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_147 = acpi.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_148 = acpi.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_149 = acpi.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_150 = acpi.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_151 = lsacpi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_152 = lsacpi.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_153 = lsacpi.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_154 = lsacpi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_155 = lsacpi.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_156 = lsacpi.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_157 = lsacpi.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_158 = lsacpi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_159 = lsefisystab.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_160 = lsefisystab.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_161 = lsefisystab.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_162 = lsefisystab.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_163 = lsefisystab.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_164 = lssal.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_165 = lssal.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_166 = lssal.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_167 = lssal.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_168 = lssal.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_169 = lsefimmap.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_170 = lsefimmap.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_171 = lsefimmap.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_172 = lsefimmap.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_173 = lsefimmap.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_174 = lsefi.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_175 = lsefi.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_176 = lsefi.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_177 = lsefi.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_178 = lsefi.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_179 = efifwsetup.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_180 = efifwsetup.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_181 = efifwsetup.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_182 = efifwsetup.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_183 = efifwsetup.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_184 = boot.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_185 = boot.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_186 = boot.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_187 = boot.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_188 = boot.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_189 = boot.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_190 = boot.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_191 = boot.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_192 = boot.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_193 = boot.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_194 = boot.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_195 = boot.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_196 = boot.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_197 = boot.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_198 = boot.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_199 = cpuid.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_200 = cpuid.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_201 = cpuid.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_202 = cpuid.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_203 = cpuid.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_204 = cpuid.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_205 = cpuid.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_206 = cpuid.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_207 = cpuid.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_208 = drivemap.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_209 = extcmd.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_210 = extcmd.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_211 = extcmd.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_212 = extcmd.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_213 = extcmd.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_214 = extcmd.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_215 = extcmd.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_216 = extcmd.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_217 = extcmd.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_218 = fixvideo.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_219 = fixvideo.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_220 = halt.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_221 = halt.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_222 = halt.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_223 = halt.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_224 = halt.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_225 = halt.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_226 = halt.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_227 = halt.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_228 = halt.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_229 = halt.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_230 = halt.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_231 = halt.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_232 = halt.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_233 = halt.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_234 = halt.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_235 = halt.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_236 = halt.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_237 = halt.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_238 = halt.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_239 = reboot.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_240 = reboot.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_241 = reboot.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_242 = reboot.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_243 = reboot.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_244 = reboot.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_245 = reboot.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_246 = reboot.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_247 = reboot.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_248 = reboot.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_249 = reboot.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_250 = reboot.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_251 = reboot.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_252 = reboot.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_253 = reboot.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_254 = reboot.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_255 = reboot.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_256 = reboot.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_257 = reboot.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_258 = hdparm.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_259 = hdparm.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_260 = hdparm.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_261 = hdparm.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_262 = hdparm.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_263 = hdparm.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_264 = hdparm.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_265 = hdparm.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_266 = hdparm.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_267 = loadbios.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_268 = loadbios.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_269 = lspci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_270 = lspci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_271 = lspci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_272 = lspci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_273 = lspci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_274 = lspci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_275 = lspci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_276 = lspci.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_277 = play.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_278 = play.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_279 = play.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_280 = play.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_281 = play.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_282 = play.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_283 = play.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_284 = spkmodem.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_285 = spkmodem.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_286 = spkmodem.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_287 = spkmodem.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_288 = spkmodem.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_289 = spkmodem.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_290 = spkmodem.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_291 = morse.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_292 = morse.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_293 = morse.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_294 = morse.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_295 = morse.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_296 = morse.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_297 = morse.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_298 = setpci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_299 = setpci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_300 = setpci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_301 = setpci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_302 = setpci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_303 = setpci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_304 = setpci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_305 = setpci.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_306 = pcidump.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_307 = pcidump.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_308 = pcidump.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_309 = pcidump.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_310 = pcidump.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_311 = pcidump.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_312 = pcidump.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_313 = pcidump.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_314 = suspend.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_315 = suspend.module$(EXEEXT) \ +@COND_powerpc_ieee1275_TRUE@ escc.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_316 = usbtest.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_317 = usbtest.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_318 = usbtest.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_319 = usbtest.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_320 = usbtest.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_321 = usbtest.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_322 = usbtest.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_323 = usbtest.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_324 = ata.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_325 = ata.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_326 = ata.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_327 = ata.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_328 = ata.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_329 = ata.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_330 = ata.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_331 = ata.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_332 = ata.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_333 = ahci.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_334 = ahci.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_335 = ahci.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_336 = ahci.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_337 = ahci.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_338 = ahci.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_339 = ahci.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_340 = ahci.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_341 = pata.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_342 = pata.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_343 = pata.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_344 = pata.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_345 = pata.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_346 = pata.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_347 = pata.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_348 = pata.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_349 = pata.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_350 = biosdisk.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ usbms.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_351 = usbms.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_352 = usbms.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_353 = usbms.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_354 = usbms.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_355 = usbms.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_356 = usbms.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_357 = usbms.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_358 = nand.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_359 = efiemu.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_360 = efiemu.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_361 = efiemu.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_362 = efiemu.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_363 = efiemu.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_364 = font.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_365 = font.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_366 = font.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_367 = font.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_368 = font.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_369 = font.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_370 = font.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_371 = font.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_372 = font.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_373 = font.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_374 = font.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_375 = font.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_376 = font.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_377 = font.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_378 = font.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_379 = font.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_380 = font.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_381 = pxe.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_382 = bufio.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_383 = bufio.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_384 = bufio.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_385 = bufio.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_386 = bufio.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_387 = bufio.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_388 = bufio.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_389 = bufio.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_390 = bufio.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_391 = bufio.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_392 = bufio.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_393 = bufio.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_394 = bufio.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_395 = bufio.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_396 = bufio.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_397 = bufio.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_398 = bufio.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_399 = relocator.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_400 = relocator.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_401 = relocator.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_402 = relocator.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_403 = relocator.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_404 = relocator.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_405 = relocator.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_406 = relocator.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_407 = relocator.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_408 = relocator.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_409 = \ +@COND_powerpc_ieee1275_TRUE@ relocator.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_410 = relocator.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_411 = relocator.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_412 = datetime.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_413 = datetime.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_414 = datetime.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_415 = datetime.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_416 = datetime.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_417 = datetime.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_418 = datetime.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_419 = datetime.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_420 = datetime.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_421 = datetime.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_422 = datetime.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_423 = datetime.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_424 = datetime.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_425 = datetime.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_426 = datetime.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_427 = datetime.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_428 = datetime.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_429 = datetime.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_430 = aout.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_431 = aout.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_432 = aout.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_433 = aout.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_434 = aout.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_435 = aout.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_436 = aout.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_437 = bsd.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_438 = bsd.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_439 = bsd.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_440 = bsd.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_441 = bsd.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_442 = bsd.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_443 = bsd.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_444 = plan9.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ linux16.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_445 = linux16.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_446 = linux16.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_447 = linux16.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_448 = linux16.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_449 = linux16.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_450 = linux16.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_451 = ntldr.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ truecrypt.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ freedos.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ pxechain.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ multiboot2.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_452 = multiboot2.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_453 = multiboot2.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_454 = multiboot2.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_455 = multiboot2.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_456 = multiboot2.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_457 = multiboot2.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_458 = multiboot2.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_459 = multiboot2.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_460 = multiboot2.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_461 = multiboot.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_462 = multiboot.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_463 = multiboot.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_464 = multiboot.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_465 = multiboot.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_466 = multiboot.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_467 = multiboot.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_468 = xen_boot.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_469 = linux.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_470 = linux.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_471 = linux.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_472 = linux.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_473 = linux.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_474 = linux.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_475 = linux.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_476 = linux.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_477 = linux.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_478 = linux.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_479 = linux.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_480 = linux.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_481 = linux.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_482 = linux.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_483 = linux.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_484 = linux.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_485 = linux.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_486 = linux.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_487 = fdt.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_488 = fdt.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_489 = fdt.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_490 = xnu.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_491 = xnu.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_492 = xnu.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_493 = xnu.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_494 = xnu.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_495 = random.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_496 = random.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_497 = random.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_498 = random.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_499 = random.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_500 = appleldr.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_501 = appleldr.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_502 = chain.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_503 = chain.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_504 = chain.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_505 = chain.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_506 = chain.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_507 = chain.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_508 = chain.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_509 = mmap.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_510 = mmap.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_511 = mmap.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_512 = mmap.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_513 = mmap.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_514 = mmap.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_515 = mmap.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_516 = mmap.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_517 = mmap.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_518 = mmap.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_519 = mmap.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_520 = mmap.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_521 = mmap.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_522 = at_keyboard.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_523 = at_keyboard.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_524 = at_keyboard.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_525 = at_keyboard.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_526 = \ +@COND_i386_multiboot_TRUE@ at_keyboard.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_527 = at_keyboard.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_528 = at_keyboard.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_529 = gfxterm.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_530 = gfxterm.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_531 = gfxterm.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_532 = gfxterm.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_533 = gfxterm.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_534 = gfxterm.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_535 = gfxterm.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_536 = gfxterm.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_537 = gfxterm.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_538 = gfxterm.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_539 = gfxterm.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_540 = gfxterm.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_541 = gfxterm.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_542 = gfxterm.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_543 = gfxterm.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_544 = gfxterm.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_545 = gfxterm.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_546 = serial.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_547 = serial.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_548 = serial.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_549 = serial.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_550 = serial.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_551 = serial.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_552 = serial.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_553 = serial.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_554 = serial.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_555 = serial.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_556 = serial.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_557 = serial.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_558 = serial.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_559 = sendkey.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ terminfo.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_560 = terminfo.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_561 = terminfo.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_562 = terminfo.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_563 = terminfo.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_564 = terminfo.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_565 = terminfo.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_566 = terminfo.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_567 = terminfo.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_568 = usb_keyboard.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_569 = usb_keyboard.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_570 = usb_keyboard.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_571 = \ +@COND_i386_coreboot_TRUE@ usb_keyboard.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_572 = \ +@COND_i386_multiboot_TRUE@ usb_keyboard.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_573 = \ +@COND_i386_ieee1275_TRUE@ usb_keyboard.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_574 = usb_keyboard.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_575 = \ +@COND_mips_loongson_TRUE@ usb_keyboard.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_576 = vga.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ vga_text.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ mda_text.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_577 = mda_text.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_578 = mda_text.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_579 = mda_text.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_580 = video_cirrus.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_581 = video_cirrus.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_582 = video_cirrus.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_583 = \ +@COND_i386_coreboot_TRUE@ video_cirrus.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_584 = \ +@COND_i386_multiboot_TRUE@ video_cirrus.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_585 = \ +@COND_i386_ieee1275_TRUE@ video_cirrus.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_586 = video_cirrus.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_587 = video_bochs.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_588 = video_bochs.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_589 = video_bochs.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_590 = video_bochs.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_591 = \ +@COND_i386_multiboot_TRUE@ video_bochs.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_592 = video_bochs.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_593 = video_bochs.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_594 = legacy_password_test.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_595 = \ +@COND_i386_pc_TRUE@ legacy_password_test.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_596 = \ +@COND_i386_efi_TRUE@ legacy_password_test.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_597 = \ +@COND_x86_64_efi_TRUE@ legacy_password_test.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_598 = \ +@COND_i386_xen_TRUE@ legacy_password_test.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_599 = \ +@COND_x86_64_xen_TRUE@ legacy_password_test.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_600 = div.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_601 = div.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_602 = div.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_603 = div.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_604 = div.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_605 = div.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_606 = div.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_607 = div.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_608 = div.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_609 = div.module$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_610 = div.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_611 = div.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_612 = div.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_613 = div.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_614 = div.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_615 = div.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_616 = efi_gop.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_617 = efi_gop.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_618 = efi_gop.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_619 = efi_gop.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_620 = efi_gop.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_621 = efi_uga.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_622 = efi_uga.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_623 = vbe.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_624 = video_fb.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_625 = video_fb.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_626 = video_fb.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_627 = video_fb.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_628 = video_fb.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_629 = video_fb.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_630 = video_fb.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_631 = video_fb.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_632 = video_fb.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_633 = video_fb.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_634 = video_fb.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_635 = video_fb.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_636 = video_fb.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_637 = video_fb.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_638 = video_fb.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_639 = video_fb.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_640 = video_fb.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_641 = video.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_642 = video.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_643 = video.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_644 = video.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_645 = video.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_646 = video.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_647 = video.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_648 = video.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_649 = video.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_650 = video.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_651 = video.module$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_652 = video.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_653 = video.module$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_654 = video.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_655 = video.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_656 = video.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_657 = video.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_658 = \ +@COND_powerpc_ieee1275_TRUE@ ieee1275_fb.module$(EXEEXT) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am__EXEEXT_659 = \ +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@ sdl.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_660 = ofnet.module$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_661 = ofnet.module$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_662 = ofnet.module$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_663 = ubootnet.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_664 = efinet.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_665 = efinet.module$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_666 = efinet.module$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_667 = efinet.module$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_668 = efinet.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_669 = emunet.module$(EXEEXT) \ +@COND_emu_TRUE@ legacycfg.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_670 = legacycfg.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_671 = legacycfg.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_672 = legacycfg.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_673 = legacycfg.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_674 = legacycfg.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_675 = backtrace.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_676 = backtrace.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_677 = backtrace.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_678 = backtrace.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_679 = backtrace.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_680 = backtrace.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_681 = backtrace.module$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_682 = backtrace.module$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_683 = backtrace.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_684 = lsapm.module$(EXEEXT) \ +@COND_i386_pc_TRUE@ keylayouts.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_685 = keylayouts.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_686 = keylayouts.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_687 = keylayouts.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_688 = keylayouts.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_689 = keylayouts.module$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_690 = keylayouts.module$(EXEEXT) +@COND_ENABLE_CACHE_STATS_TRUE@am__EXEEXT_691 = \ +@COND_ENABLE_CACHE_STATS_TRUE@ cacheinfo.module$(EXEEXT) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am__EXEEXT_692 = \ +@COND_ENABLE_BOOT_TIME_STATS_TRUE@ boottime.module$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_693 = gdb.module$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_694 = gdb.module$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_695 = gdb.module$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_696 = gdb.module$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_697 = gdb.module$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_698 = gdb.module$(EXEEXT) +@COND_emu_TRUE@am__EXEEXT_699 = kernel.exec$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_700 = kernel.exec$(EXEEXT) +@COND_i386_efi_TRUE@am__EXEEXT_701 = kernel.exec$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_702 = kernel.exec$(EXEEXT) +@COND_i386_coreboot_TRUE@am__EXEEXT_703 = kernel.exec$(EXEEXT) +@COND_i386_multiboot_TRUE@am__EXEEXT_704 = kernel.exec$(EXEEXT) +@COND_i386_ieee1275_TRUE@am__EXEEXT_705 = kernel.exec$(EXEEXT) +@COND_x86_64_efi_TRUE@am__EXEEXT_706 = kernel.exec$(EXEEXT) +@COND_i386_xen_TRUE@am__EXEEXT_707 = kernel.exec$(EXEEXT) +@COND_x86_64_xen_TRUE@am__EXEEXT_708 = kernel.exec$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_709 = kernel.exec$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_710 = kernel.exec$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@am__EXEEXT_711 = kernel.exec$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_712 = kernel.exec$(EXEEXT) +@COND_ia64_efi_TRUE@am__EXEEXT_713 = kernel.exec$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_714 = kernel.exec$(EXEEXT) +@COND_arm_uboot_TRUE@am__EXEEXT_715 = kernel.exec$(EXEEXT) +@COND_arm_efi_TRUE@am__EXEEXT_716 = kernel.exec$(EXEEXT) +@COND_arm64_efi_TRUE@am__EXEEXT_717 = kernel.exec$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_718 = boot.image$(EXEEXT) +@COND_i386_qemu_TRUE@am__EXEEXT_719 = boot.image$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_720 = boot.image$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_721 = boot_hybrid.image$(EXEEXT) \ +@COND_i386_pc_TRUE@ cdboot.image$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_722 = cdboot.image$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_723 = pxeboot.image$(EXEEXT) \ +@COND_i386_pc_TRUE@ diskboot.image$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@am__EXEEXT_724 = diskboot.image$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_725 = lnxboot.image$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_726 = \ +@COND_mips_loongson_TRUE@ xz_decompress.image$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_727 = xz_decompress.image$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_728 = \ +@COND_mips_qemu_mips_TRUE@ xz_decompress.image$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_729 = \ +@COND_mips_loongson_TRUE@ none_decompress.image$(EXEEXT) +@COND_mips_arc_TRUE@am__EXEEXT_730 = none_decompress.image$(EXEEXT) +@COND_mips_qemu_mips_TRUE@am__EXEEXT_731 = \ +@COND_mips_qemu_mips_TRUE@ none_decompress.image$(EXEEXT) +@COND_i386_pc_TRUE@am__EXEEXT_732 = lzma_decompress.image$(EXEEXT) +@COND_mips_loongson_TRUE@am__EXEEXT_733 = fwstart.image$(EXEEXT) \ +@COND_mips_loongson_TRUE@ fwstart_fuloong2f.image$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(platform_PROGRAMS) \ + $(sbin_PROGRAMS) +am__acpi_module_SOURCES_DIST = commands/acpi.c kern/acpi.c \ + kern/i386/pc/acpi.c +am__dirstamp = $(am__leading_dot)dirstamp +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_acpi_module_OBJECTS = commands/acpi_module-acpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_TRUE@am_acpi_module_OBJECTS = commands/acpi_module-acpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_acpi_module_OBJECTS = kern/acpi_module-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/pc/acpi_module-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ commands/acpi_module-acpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@am_acpi_module_OBJECTS = commands/acpi_module-acpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_acpi_module_OBJECTS = commands/acpi_module-acpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@am_acpi_module_OBJECTS = commands/acpi_module-acpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_acpi_module_OBJECTS = commands/acpi_module-acpi.$(OBJEXT) +@COND_arm64_efi_TRUE@am_acpi_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ commands/acpi_module-acpi.$(OBJEXT) +nodist_acpi_module_OBJECTS = +acpi_module_OBJECTS = $(am_acpi_module_OBJECTS) \ + $(nodist_acpi_module_OBJECTS) +acpi_module_LINK = $(CCLD) $(acpi_module_CFLAGS) $(CFLAGS) \ + $(acpi_module_LDFLAGS) $(LDFLAGS) -o $@ +am_adler32_module_OBJECTS = lib/adler32_module-adler32.$(OBJEXT) +nodist_adler32_module_OBJECTS = +adler32_module_OBJECTS = $(am_adler32_module_OBJECTS) \ + $(nodist_adler32_module_OBJECTS) +adler32_module_LINK = $(CCLD) $(adler32_module_CFLAGS) $(CFLAGS) \ + $(adler32_module_LDFLAGS) $(LDFLAGS) -o $@ +am_affs_module_OBJECTS = fs/affs_module-affs.$(OBJEXT) +nodist_affs_module_OBJECTS = +affs_module_OBJECTS = $(am_affs_module_OBJECTS) \ + $(nodist_affs_module_OBJECTS) +affs_module_LINK = $(CCLD) $(affs_module_CFLAGS) $(CFLAGS) \ + $(affs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_afs_module_OBJECTS = fs/afs_module-afs.$(OBJEXT) +nodist_afs_module_OBJECTS = +afs_module_OBJECTS = $(am_afs_module_OBJECTS) \ + $(nodist_afs_module_OBJECTS) +afs_module_LINK = $(CCLD) $(afs_module_CFLAGS) $(CFLAGS) \ + $(afs_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ahci_module_SOURCES_DIST = disk/ahci.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_ahci_module_OBJECTS = disk/ahci_module-ahci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_ahci_module_OBJECTS = disk/ahci_module-ahci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_ahci_module_OBJECTS = disk/ahci_module-ahci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_ahci_module_OBJECTS = disk/ahci_module-ahci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_ahci_module_OBJECTS = disk/ahci_module-ahci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_ahci_module_OBJECTS = disk/ahci_module-ahci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_ahci_module_OBJECTS = disk/ahci_module-ahci.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_ahci_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ disk/ahci_module-ahci.$(OBJEXT) +nodist_ahci_module_OBJECTS = +ahci_module_OBJECTS = $(am_ahci_module_OBJECTS) \ + $(nodist_ahci_module_OBJECTS) +ahci_module_LINK = $(CCLD) $(ahci_module_CFLAGS) $(CFLAGS) \ + $(ahci_module_LDFLAGS) $(LDFLAGS) -o $@ +am_all_video_module_OBJECTS = \ + lib/all_video_module-fake_module.$(OBJEXT) +nodist_all_video_module_OBJECTS = +all_video_module_OBJECTS = $(am_all_video_module_OBJECTS) \ + $(nodist_all_video_module_OBJECTS) +all_video_module_LINK = $(CCLD) $(all_video_module_CFLAGS) $(CFLAGS) \ + $(all_video_module_LDFLAGS) $(LDFLAGS) -o $@ +am__aout_module_SOURCES_DIST = loader/aout.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_aout_module_OBJECTS = loader/aout_module-aout.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_aout_module_OBJECTS = loader/aout_module-aout.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_aout_module_OBJECTS = loader/aout_module-aout.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_aout_module_OBJECTS = loader/aout_module-aout.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_aout_module_OBJECTS = loader/aout_module-aout.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_aout_module_OBJECTS = loader/aout_module-aout.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_aout_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ loader/aout_module-aout.$(OBJEXT) +nodist_aout_module_OBJECTS = +aout_module_OBJECTS = $(am_aout_module_OBJECTS) \ + $(nodist_aout_module_OBJECTS) +aout_module_LINK = $(CCLD) $(aout_module_CFLAGS) $(CFLAGS) \ + $(aout_module_LDFLAGS) $(LDFLAGS) -o $@ +am__appleldr_module_SOURCES_DIST = loader/efi/appleloader.c +@COND_i386_efi_FALSE@@COND_x86_64_efi_TRUE@am_appleldr_module_OBJECTS = loader/efi/appleldr_module-appleloader.$(OBJEXT) +@COND_i386_efi_TRUE@am_appleldr_module_OBJECTS = loader/efi/appleldr_module-appleloader.$(OBJEXT) +nodist_appleldr_module_OBJECTS = +appleldr_module_OBJECTS = $(am_appleldr_module_OBJECTS) \ + $(nodist_appleldr_module_OBJECTS) +appleldr_module_LINK = $(CCLD) $(appleldr_module_CFLAGS) $(CFLAGS) \ + $(appleldr_module_LDFLAGS) $(LDFLAGS) -o $@ +am_archelp_module_OBJECTS = fs/archelp_module-archelp.$(OBJEXT) +nodist_archelp_module_OBJECTS = +archelp_module_OBJECTS = $(am_archelp_module_OBJECTS) \ + $(nodist_archelp_module_OBJECTS) +archelp_module_LINK = $(CCLD) $(archelp_module_CFLAGS) $(CFLAGS) \ + $(archelp_module_LDFLAGS) $(LDFLAGS) -o $@ +am__at_keyboard_module_SOURCES_DIST = term/at_keyboard.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_at_keyboard_module_OBJECTS = term/at_keyboard_module-at_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_at_keyboard_module_OBJECTS = term/at_keyboard_module-at_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_at_keyboard_module_OBJECTS = term/at_keyboard_module-at_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_at_keyboard_module_OBJECTS = term/at_keyboard_module-at_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_at_keyboard_module_OBJECTS = term/at_keyboard_module-at_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_at_keyboard_module_OBJECTS = term/at_keyboard_module-at_keyboard.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_at_keyboard_module_OBJECTS = term/at_keyboard_module-at_keyboard.$(OBJEXT) +nodist_at_keyboard_module_OBJECTS = +at_keyboard_module_OBJECTS = $(am_at_keyboard_module_OBJECTS) \ + $(nodist_at_keyboard_module_OBJECTS) +at_keyboard_module_LINK = $(CCLD) $(at_keyboard_module_CFLAGS) \ + $(CFLAGS) $(at_keyboard_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ata_module_SOURCES_DIST = disk/ata.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_ata_module_OBJECTS = disk/ata_module-ata.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_ata_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ disk/ata_module-ata.$(OBJEXT) +nodist_ata_module_OBJECTS = +ata_module_OBJECTS = $(am_ata_module_OBJECTS) \ + $(nodist_ata_module_OBJECTS) +ata_module_LINK = $(CCLD) $(ata_module_CFLAGS) $(CFLAGS) \ + $(ata_module_LDFLAGS) $(LDFLAGS) -o $@ +am__backtrace_module_SOURCES_DIST = lib/i386/backtrace.c \ + lib/backtrace.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_backtrace_module_OBJECTS = lib/i386/backtrace_module-backtrace.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/backtrace_module-backtrace.$(OBJEXT) +nodist_backtrace_module_OBJECTS = +backtrace_module_OBJECTS = $(am_backtrace_module_OBJECTS) \ + $(nodist_backtrace_module_OBJECTS) +backtrace_module_LINK = $(CCLD) $(backtrace_module_CFLAGS) $(CFLAGS) \ + $(backtrace_module_LDFLAGS) $(LDFLAGS) -o $@ +am_bfs_module_OBJECTS = fs/bfs_module-bfs.$(OBJEXT) +nodist_bfs_module_OBJECTS = +bfs_module_OBJECTS = $(am_bfs_module_OBJECTS) \ + $(nodist_bfs_module_OBJECTS) +bfs_module_LINK = $(CCLD) $(bfs_module_CFLAGS) $(CFLAGS) \ + $(bfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am__biosdisk_module_SOURCES_DIST = disk/i386/pc/biosdisk.c +@COND_i386_pc_TRUE@am_biosdisk_module_OBJECTS = disk/i386/pc/biosdisk_module-biosdisk.$(OBJEXT) +nodist_biosdisk_module_OBJECTS = +biosdisk_module_OBJECTS = $(am_biosdisk_module_OBJECTS) \ + $(nodist_biosdisk_module_OBJECTS) +biosdisk_module_LINK = $(CCLD) $(biosdisk_module_CFLAGS) $(CFLAGS) \ + $(biosdisk_module_LDFLAGS) $(LDFLAGS) -o $@ +am_bitmap_module_OBJECTS = video/bitmap_module-bitmap.$(OBJEXT) +nodist_bitmap_module_OBJECTS = +bitmap_module_OBJECTS = $(am_bitmap_module_OBJECTS) \ + $(nodist_bitmap_module_OBJECTS) +bitmap_module_LINK = $(CCLD) $(bitmap_module_CFLAGS) $(CFLAGS) \ + $(bitmap_module_LDFLAGS) $(LDFLAGS) -o $@ +am_bitmap_scale_module_OBJECTS = \ + video/bitmap_scale_module-bitmap_scale.$(OBJEXT) +nodist_bitmap_scale_module_OBJECTS = +bitmap_scale_module_OBJECTS = $(am_bitmap_scale_module_OBJECTS) \ + $(nodist_bitmap_scale_module_OBJECTS) +bitmap_scale_module_LINK = $(CCLD) $(bitmap_scale_module_CFLAGS) \ + $(CFLAGS) $(bitmap_scale_module_LDFLAGS) $(LDFLAGS) -o $@ +am_blocklist_module_OBJECTS = \ + commands/blocklist_module-blocklist.$(OBJEXT) +nodist_blocklist_module_OBJECTS = +blocklist_module_OBJECTS = $(am_blocklist_module_OBJECTS) \ + $(nodist_blocklist_module_OBJECTS) +blocklist_module_LINK = $(CCLD) $(blocklist_module_CFLAGS) $(CFLAGS) \ + $(blocklist_module_LDFLAGS) $(LDFLAGS) -o $@ +am__boot_image_SOURCES_DIST = boot/i386/pc/boot.S \ + boot/i386/qemu/boot.S boot/sparc64/ieee1275/boot.S +@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_sparc64_ieee1275_TRUE@am_boot_image_OBJECTS = boot/sparc64/ieee1275/boot_image-boot.$(OBJEXT) +@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_boot_image_OBJECTS = boot/i386/qemu/boot_image-boot.$(OBJEXT) +@COND_i386_pc_TRUE@am_boot_image_OBJECTS = \ +@COND_i386_pc_TRUE@ boot/i386/pc/boot_image-boot.$(OBJEXT) +nodist_boot_image_OBJECTS = +boot_image_OBJECTS = $(am_boot_image_OBJECTS) \ + $(nodist_boot_image_OBJECTS) +boot_image_DEPENDENCIES = +boot_image_LINK = $(CCLD) $(boot_image_CFLAGS) $(CFLAGS) \ + $(boot_image_LDFLAGS) $(LDFLAGS) -o $@ +am__boot_module_SOURCES_DIST = commands/boot.c lib/i386/pc/biosnum.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_boot_module_OBJECTS = lib/i386/pc/boot_module-biosnum.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_boot_module_OBJECTS = commands/boot_module-boot.$(OBJEXT) +@COND_arm64_efi_TRUE@am_boot_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ commands/boot_module-boot.$(OBJEXT) +nodist_boot_module_OBJECTS = +boot_module_OBJECTS = $(am_boot_module_OBJECTS) \ + $(nodist_boot_module_OBJECTS) +boot_module_LINK = $(CCLD) $(boot_module_CFLAGS) $(CFLAGS) \ + $(boot_module_LDFLAGS) $(LDFLAGS) -o $@ +am__boot_hybrid_image_SOURCES_DIST = boot/i386/pc/boot.S +@COND_i386_pc_TRUE@am_boot_hybrid_image_OBJECTS = boot/i386/pc/boot_hybrid_image-boot.$(OBJEXT) +nodist_boot_hybrid_image_OBJECTS = +boot_hybrid_image_OBJECTS = $(am_boot_hybrid_image_OBJECTS) \ + $(nodist_boot_hybrid_image_OBJECTS) +boot_hybrid_image_DEPENDENCIES = +boot_hybrid_image_LINK = $(CCLD) $(boot_hybrid_image_CFLAGS) $(CFLAGS) \ + $(boot_hybrid_image_LDFLAGS) $(LDFLAGS) -o $@ +am__boottime_module_SOURCES_DIST = commands/boottime.c +@COND_ENABLE_BOOT_TIME_STATS_TRUE@am_boottime_module_OBJECTS = commands/boottime_module-boottime.$(OBJEXT) +nodist_boottime_module_OBJECTS = +boottime_module_OBJECTS = $(am_boottime_module_OBJECTS) \ + $(nodist_boottime_module_OBJECTS) +boottime_module_LINK = $(CCLD) $(boottime_module_CFLAGS) $(CFLAGS) \ + $(boottime_module_LDFLAGS) $(LDFLAGS) -o $@ +am__bsd_module_SOURCES_DIST = loader/i386/bsd.c loader/i386/bsd32.c \ + loader/i386/bsd64.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_bsd_module_OBJECTS = loader/i386/bsd_module-bsd.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@ loader/i386/bsd_module-bsd32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@ loader/i386/bsd_module-bsd64.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_bsd_module_OBJECTS = loader/i386/bsd_module-bsd.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ loader/i386/bsd_module-bsd32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ loader/i386/bsd_module-bsd64.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_bsd_module_OBJECTS = loader/i386/bsd_module-bsd.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/i386/bsd_module-bsd32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/i386/bsd_module-bsd64.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_bsd_module_OBJECTS = loader/i386/bsd_module-bsd.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ loader/i386/bsd_module-bsd32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ loader/i386/bsd_module-bsd64.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_bsd_module_OBJECTS = loader/i386/bsd_module-bsd.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ loader/i386/bsd_module-bsd32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ loader/i386/bsd_module-bsd64.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_bsd_module_OBJECTS = loader/i386/bsd_module-bsd.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/i386/bsd_module-bsd32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/i386/bsd_module-bsd64.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_bsd_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ loader/i386/bsd_module-bsd.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ loader/i386/bsd_module-bsd32.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ loader/i386/bsd_module-bsd64.$(OBJEXT) +nodist_bsd_module_OBJECTS = +bsd_module_OBJECTS = $(am_bsd_module_OBJECTS) \ + $(nodist_bsd_module_OBJECTS) +bsd_module_LINK = $(CCLD) $(bsd_module_CFLAGS) $(CFLAGS) \ + $(bsd_module_LDFLAGS) $(LDFLAGS) -o $@ +am_bswap_test_module_OBJECTS = \ + tests/bswap_test_module-bswap_test.$(OBJEXT) +nodist_bswap_test_module_OBJECTS = +bswap_test_module_OBJECTS = $(am_bswap_test_module_OBJECTS) \ + $(nodist_bswap_test_module_OBJECTS) +bswap_test_module_LINK = $(CCLD) $(bswap_test_module_CFLAGS) $(CFLAGS) \ + $(bswap_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am_btrfs_module_OBJECTS = fs/btrfs_module-btrfs.$(OBJEXT) \ + lib/btrfs_module-crc.$(OBJEXT) +nodist_btrfs_module_OBJECTS = +btrfs_module_OBJECTS = $(am_btrfs_module_OBJECTS) \ + $(nodist_btrfs_module_OBJECTS) +btrfs_module_LINK = $(CCLD) $(btrfs_module_CFLAGS) $(CFLAGS) \ + $(btrfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am__bufio_module_SOURCES_DIST = io/bufio.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_bufio_module_OBJECTS = io/bufio_module-bufio.$(OBJEXT) +@COND_arm64_efi_TRUE@am_bufio_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ io/bufio_module-bufio.$(OBJEXT) +nodist_bufio_module_OBJECTS = +bufio_module_OBJECTS = $(am_bufio_module_OBJECTS) \ + $(nodist_bufio_module_OBJECTS) +bufio_module_LINK = $(CCLD) $(bufio_module_CFLAGS) $(CFLAGS) \ + $(bufio_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cacheinfo_module_SOURCES_DIST = commands/cacheinfo.c +@COND_ENABLE_CACHE_STATS_TRUE@am_cacheinfo_module_OBJECTS = commands/cacheinfo_module-cacheinfo.$(OBJEXT) +nodist_cacheinfo_module_OBJECTS = +cacheinfo_module_OBJECTS = $(am_cacheinfo_module_OBJECTS) \ + $(nodist_cacheinfo_module_OBJECTS) +cacheinfo_module_LINK = $(CCLD) $(cacheinfo_module_CFLAGS) $(CFLAGS) \ + $(cacheinfo_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cat_module_OBJECTS = commands/cat_module-cat.$(OBJEXT) +nodist_cat_module_OBJECTS = +cat_module_OBJECTS = $(am_cat_module_OBJECTS) \ + $(nodist_cat_module_OBJECTS) +cat_module_LINK = $(CCLD) $(cat_module_CFLAGS) $(CFLAGS) \ + $(cat_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cbfs_module_OBJECTS = fs/cbfs_module-cbfs.$(OBJEXT) +nodist_cbfs_module_OBJECTS = +cbfs_module_OBJECTS = $(am_cbfs_module_OBJECTS) \ + $(nodist_cbfs_module_OBJECTS) +cbfs_module_LINK = $(CCLD) $(cbfs_module_CFLAGS) $(CFLAGS) \ + $(cbfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cbls_module_SOURCES_DIST = commands/i386/coreboot/cbls.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_cbls_module_OBJECTS = commands/i386/coreboot/cbls_module-cbls.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cbls_module_OBJECTS = commands/i386/coreboot/cbls_module-cbls.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cbls_module_OBJECTS = commands/i386/coreboot/cbls_module-cbls.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cbls_module_OBJECTS = commands/i386/coreboot/cbls_module-cbls.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_cbls_module_OBJECTS = commands/i386/coreboot/cbls_module-cbls.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_cbls_module_OBJECTS = commands/i386/coreboot/cbls_module-cbls.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_cbls_module_OBJECTS = commands/i386/coreboot/cbls_module-cbls.$(OBJEXT) +nodist_cbls_module_OBJECTS = +cbls_module_OBJECTS = $(am_cbls_module_OBJECTS) \ + $(nodist_cbls_module_OBJECTS) +cbls_module_LINK = $(CCLD) $(cbls_module_CFLAGS) $(CFLAGS) \ + $(cbls_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cbmemc_module_SOURCES_DIST = term/i386/coreboot/cbmemc.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_cbmemc_module_OBJECTS = term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cbmemc_module_OBJECTS = term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cbmemc_module_OBJECTS = term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cbmemc_module_OBJECTS = term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_cbmemc_module_OBJECTS = term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_cbmemc_module_OBJECTS = term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_cbmemc_module_OBJECTS = term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT) +nodist_cbmemc_module_OBJECTS = +cbmemc_module_OBJECTS = $(am_cbmemc_module_OBJECTS) \ + $(nodist_cbmemc_module_OBJECTS) +cbmemc_module_LINK = $(CCLD) $(cbmemc_module_CFLAGS) $(CFLAGS) \ + $(cbmemc_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cbtable_module_SOURCES_DIST = kern/i386/coreboot/cbtable.c +@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_cbtable_module_OBJECTS = kern/i386/coreboot/cbtable_module-cbtable.$(OBJEXT) +@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cbtable_module_OBJECTS = kern/i386/coreboot/cbtable_module-cbtable.$(OBJEXT) +@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cbtable_module_OBJECTS = kern/i386/coreboot/cbtable_module-cbtable.$(OBJEXT) +@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cbtable_module_OBJECTS = kern/i386/coreboot/cbtable_module-cbtable.$(OBJEXT) +@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_cbtable_module_OBJECTS = kern/i386/coreboot/cbtable_module-cbtable.$(OBJEXT) +@COND_i386_efi_TRUE@am_cbtable_module_OBJECTS = kern/i386/coreboot/cbtable_module-cbtable.$(OBJEXT) +nodist_cbtable_module_OBJECTS = +cbtable_module_OBJECTS = $(am_cbtable_module_OBJECTS) \ + $(nodist_cbtable_module_OBJECTS) +cbtable_module_LINK = $(CCLD) $(cbtable_module_CFLAGS) $(CFLAGS) \ + $(cbtable_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cbtime_module_SOURCES_DIST = \ + commands/i386/coreboot/cb_timestamps.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_cbtime_module_OBJECTS = commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cbtime_module_OBJECTS = commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cbtime_module_OBJECTS = commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cbtime_module_OBJECTS = commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_cbtime_module_OBJECTS = commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_cbtime_module_OBJECTS = commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_cbtime_module_OBJECTS = commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT) +nodist_cbtime_module_OBJECTS = +cbtime_module_OBJECTS = $(am_cbtime_module_OBJECTS) \ + $(nodist_cbtime_module_OBJECTS) +cbtime_module_LINK = $(CCLD) $(cbtime_module_CFLAGS) $(CFLAGS) \ + $(cbtime_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cdboot_image_SOURCES_DIST = boot/i386/pc/cdboot.S \ + boot/sparc64/ieee1275/boot.S +@COND_i386_pc_FALSE@@COND_sparc64_ieee1275_TRUE@am_cdboot_image_OBJECTS = boot/sparc64/ieee1275/cdboot_image-boot.$(OBJEXT) +@COND_i386_pc_TRUE@am_cdboot_image_OBJECTS = \ +@COND_i386_pc_TRUE@ boot/i386/pc/cdboot_image-cdboot.$(OBJEXT) +nodist_cdboot_image_OBJECTS = +cdboot_image_OBJECTS = $(am_cdboot_image_OBJECTS) \ + $(nodist_cdboot_image_OBJECTS) +cdboot_image_DEPENDENCIES = +cdboot_image_LINK = $(CCLD) $(cdboot_image_CFLAGS) $(CFLAGS) \ + $(cdboot_image_LDFLAGS) $(LDFLAGS) -o $@ +am__chain_module_SOURCES_DIST = loader/efi/chainloader.c \ + loader/i386/coreboot/chainloader.c lib/LzmaDec.c \ + loader/i386/pc/chainloader.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_chain_module_OBJECTS = loader/efi/chain_module-chainloader.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_TRUE@am_chain_module_OBJECTS = loader/efi/chain_module-chainloader.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_TRUE@am_chain_module_OBJECTS = loader/i386/pc/chain_module-chainloader.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_chain_module_OBJECTS = loader/efi/chain_module-chainloader.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@am_chain_module_OBJECTS = loader/i386/coreboot/chain_module-chainloader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@ lib/chain_module-LzmaDec.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_chain_module_OBJECTS = loader/efi/chain_module-chainloader.$(OBJEXT) +@COND_arm64_efi_TRUE@am_chain_module_OBJECTS = loader/efi/chain_module-chainloader.$(OBJEXT) +nodist_chain_module_OBJECTS = +chain_module_OBJECTS = $(am_chain_module_OBJECTS) \ + $(nodist_chain_module_OBJECTS) +chain_module_LINK = $(CCLD) $(chain_module_CFLAGS) $(CFLAGS) \ + $(chain_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cmdline_cat_test_module_OBJECTS = \ + tests/cmdline_cat_test_module-cmdline_cat_test.$(OBJEXT) +nodist_cmdline_cat_test_module_OBJECTS = +cmdline_cat_test_module_OBJECTS = \ + $(am_cmdline_cat_test_module_OBJECTS) \ + $(nodist_cmdline_cat_test_module_OBJECTS) +cmdline_cat_test_module_LINK = $(CCLD) \ + $(cmdline_cat_test_module_CFLAGS) $(CFLAGS) \ + $(cmdline_cat_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cmosdump_module_SOURCES_DIST = commands/i386/cmosdump.c +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_cmosdump_module_OBJECTS = commands/i386/cmosdump_module-cmosdump.$(OBJEXT) +nodist_cmosdump_module_OBJECTS = +cmosdump_module_OBJECTS = $(am_cmosdump_module_OBJECTS) \ + $(nodist_cmosdump_module_OBJECTS) +cmosdump_module_LINK = $(CCLD) $(cmosdump_module_CFLAGS) $(CFLAGS) \ + $(cmosdump_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cmostest_module_SOURCES_DIST = commands/i386/cmostest.c +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_cmostest_module_OBJECTS = commands/i386/cmostest_module-cmostest.$(OBJEXT) +nodist_cmostest_module_OBJECTS = +cmostest_module_OBJECTS = $(am_cmostest_module_OBJECTS) \ + $(nodist_cmostest_module_OBJECTS) +cmostest_module_LINK = $(CCLD) $(cmostest_module_CFLAGS) $(CFLAGS) \ + $(cmostest_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cmp_module_OBJECTS = commands/cmp_module-cmp.$(OBJEXT) +nodist_cmp_module_OBJECTS = +cmp_module_OBJECTS = $(am_cmp_module_OBJECTS) \ + $(nodist_cmp_module_OBJECTS) +cmp_module_LINK = $(CCLD) $(cmp_module_CFLAGS) $(CFLAGS) \ + $(cmp_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cmp_test_module_OBJECTS = tests/cmp_test_module-cmp_test.$(OBJEXT) +nodist_cmp_test_module_OBJECTS = +cmp_test_module_OBJECTS = $(am_cmp_test_module_OBJECTS) \ + $(nodist_cmp_test_module_OBJECTS) +cmp_test_module_LINK = $(CCLD) $(cmp_test_module_CFLAGS) $(CFLAGS) \ + $(cmp_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am_configfile_module_OBJECTS = \ + commands/configfile_module-configfile.$(OBJEXT) +nodist_configfile_module_OBJECTS = +configfile_module_OBJECTS = $(am_configfile_module_OBJECTS) \ + $(nodist_configfile_module_OBJECTS) +configfile_module_LINK = $(CCLD) $(configfile_module_CFLAGS) $(CFLAGS) \ + $(configfile_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cpio_module_OBJECTS = fs/cpio_module-cpio.$(OBJEXT) +nodist_cpio_module_OBJECTS = +cpio_module_OBJECTS = $(am_cpio_module_OBJECTS) \ + $(nodist_cpio_module_OBJECTS) +cpio_module_LINK = $(CCLD) $(cpio_module_CFLAGS) $(CFLAGS) \ + $(cpio_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cpio_be_module_OBJECTS = fs/cpio_be_module-cpio_be.$(OBJEXT) +nodist_cpio_be_module_OBJECTS = +cpio_be_module_OBJECTS = $(am_cpio_be_module_OBJECTS) \ + $(nodist_cpio_be_module_OBJECTS) +cpio_be_module_LINK = $(CCLD) $(cpio_be_module_CFLAGS) $(CFLAGS) \ + $(cpio_be_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cpuid_module_SOURCES_DIST = commands/i386/cpuid.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_cpuid_module_OBJECTS = commands/i386/cpuid_module-cpuid.$(OBJEXT) +nodist_cpuid_module_OBJECTS = +cpuid_module_OBJECTS = $(am_cpuid_module_OBJECTS) \ + $(nodist_cpuid_module_OBJECTS) +cpuid_module_LINK = $(CCLD) $(cpuid_module_CFLAGS) $(CFLAGS) \ + $(cpuid_module_LDFLAGS) $(LDFLAGS) -o $@ +am_crc64_module_OBJECTS = lib/crc64_module-crc64.$(OBJEXT) +nodist_crc64_module_OBJECTS = +crc64_module_OBJECTS = $(am_crc64_module_OBJECTS) \ + $(nodist_crc64_module_OBJECTS) +crc64_module_LINK = $(CCLD) $(crc64_module_CFLAGS) $(CFLAGS) \ + $(crc64_module_LDFLAGS) $(LDFLAGS) -o $@ +am_crypto_module_OBJECTS = lib/crypto_module-crypto.$(OBJEXT) +nodist_crypto_module_OBJECTS = +crypto_module_OBJECTS = $(am_crypto_module_OBJECTS) \ + $(nodist_crypto_module_OBJECTS) +crypto_module_LINK = $(CCLD) $(crypto_module_CFLAGS) $(CFLAGS) \ + $(crypto_module_LDFLAGS) $(LDFLAGS) -o $@ +am_cryptodisk_module_OBJECTS = \ + disk/cryptodisk_module-cryptodisk.$(OBJEXT) +nodist_cryptodisk_module_OBJECTS = +cryptodisk_module_OBJECTS = $(am_cryptodisk_module_OBJECTS) \ + $(nodist_cryptodisk_module_OBJECTS) +cryptodisk_module_LINK = $(CCLD) $(cryptodisk_module_CFLAGS) $(CFLAGS) \ + $(cryptodisk_module_LDFLAGS) $(LDFLAGS) -o $@ +am__cs5536_module_SOURCES_DIST = bus/cs5536.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_cs5536_module_OBJECTS = bus/cs5536_module-cs5536.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_cs5536_module_OBJECTS = bus/cs5536_module-cs5536.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_cs5536_module_OBJECTS = bus/cs5536_module-cs5536.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_cs5536_module_OBJECTS = bus/cs5536_module-cs5536.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_cs5536_module_OBJECTS = bus/cs5536_module-cs5536.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_cs5536_module_OBJECTS = bus/cs5536_module-cs5536.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_cs5536_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ bus/cs5536_module-cs5536.$(OBJEXT) +nodist_cs5536_module_OBJECTS = +cs5536_module_OBJECTS = $(am_cs5536_module_OBJECTS) \ + $(nodist_cs5536_module_OBJECTS) +cs5536_module_LINK = $(CCLD) $(cs5536_module_CFLAGS) $(CFLAGS) \ + $(cs5536_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ctz_test_module_OBJECTS = tests/ctz_test_module-ctz_test.$(OBJEXT) +nodist_ctz_test_module_OBJECTS = +ctz_test_module_OBJECTS = $(am_ctz_test_module_OBJECTS) \ + $(nodist_ctz_test_module_OBJECTS) +ctz_test_module_LINK = $(CCLD) $(ctz_test_module_CFLAGS) $(CFLAGS) \ + $(ctz_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am_date_module_OBJECTS = commands/date_module-date.$(OBJEXT) +nodist_date_module_OBJECTS = +date_module_OBJECTS = $(am_date_module_OBJECTS) \ + $(nodist_date_module_OBJECTS) +date_module_LINK = $(CCLD) $(date_module_CFLAGS) $(CFLAGS) \ + $(date_module_LDFLAGS) $(LDFLAGS) -o $@ +am_datehook_module_OBJECTS = hook/datehook_module-datehook.$(OBJEXT) +nodist_datehook_module_OBJECTS = +datehook_module_OBJECTS = $(am_datehook_module_OBJECTS) \ + $(nodist_datehook_module_OBJECTS) +datehook_module_LINK = $(CCLD) $(datehook_module_CFLAGS) $(CFLAGS) \ + $(datehook_module_LDFLAGS) $(LDFLAGS) -o $@ +am__datetime_module_SOURCES_DIST = lib/efi/datetime.c \ + lib/uboot/datetime.c lib/cmos_datetime.c lib/xen/datetime.c \ + lib/arc/datetime.c lib/ieee1275/datetime.c lib/ieee1275/cmos.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_datetime_module_OBJECTS = lib/xen/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_datetime_module_OBJECTS = lib/efi/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_datetime_module_OBJECTS = lib/ieee1275/datetime_module-datetime.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ lib/ieee1275/datetime_module-cmos.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_datetime_module_OBJECTS = lib/ieee1275/datetime_module-datetime.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ lib/ieee1275/datetime_module-cmos.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_datetime_module_OBJECTS = lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_datetime_module_OBJECTS = lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_datetime_module_OBJECTS = lib/arc/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_datetime_module_OBJECTS = lib/efi/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_datetime_module_OBJECTS = lib/xen/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_datetime_module_OBJECTS = lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_datetime_module_OBJECTS = lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_datetime_module_OBJECTS = lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_datetime_module_OBJECTS = lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_datetime_module_OBJECTS = lib/efi/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_TRUE@am_datetime_module_OBJECTS = lib/datetime_module-cmos_datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_datetime_module_OBJECTS = lib/uboot/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_datetime_module_OBJECTS = lib/efi/datetime_module-datetime.$(OBJEXT) +@COND_arm64_efi_TRUE@am_datetime_module_OBJECTS = lib/efi/datetime_module-datetime.$(OBJEXT) +nodist_datetime_module_OBJECTS = +datetime_module_OBJECTS = $(am_datetime_module_OBJECTS) \ + $(nodist_datetime_module_OBJECTS) +datetime_module_LINK = $(CCLD) $(datetime_module_CFLAGS) $(CFLAGS) \ + $(datetime_module_LDFLAGS) $(LDFLAGS) -o $@ +am_disk_module_OBJECTS = lib/disk_module-disk.$(OBJEXT) +nodist_disk_module_OBJECTS = +disk_module_OBJECTS = $(am_disk_module_OBJECTS) \ + $(nodist_disk_module_OBJECTS) +disk_module_LINK = $(CCLD) $(disk_module_CFLAGS) $(CFLAGS) \ + $(disk_module_LDFLAGS) $(LDFLAGS) -o $@ +am__diskboot_image_SOURCES_DIST = boot/i386/pc/diskboot.S \ + boot/sparc64/ieee1275/diskboot.S +@COND_i386_pc_FALSE@@COND_sparc64_ieee1275_TRUE@am_diskboot_image_OBJECTS = boot/sparc64/ieee1275/diskboot_image-diskboot.$(OBJEXT) +@COND_i386_pc_TRUE@am_diskboot_image_OBJECTS = boot/i386/pc/diskboot_image-diskboot.$(OBJEXT) +nodist_diskboot_image_OBJECTS = +diskboot_image_OBJECTS = $(am_diskboot_image_OBJECTS) \ + $(nodist_diskboot_image_OBJECTS) +diskboot_image_DEPENDENCIES = +diskboot_image_LINK = $(CCLD) $(diskboot_image_CFLAGS) $(CFLAGS) \ + $(diskboot_image_LDFLAGS) $(LDFLAGS) -o $@ +am_diskfilter_module_OBJECTS = \ + disk/diskfilter_module-diskfilter.$(OBJEXT) +nodist_diskfilter_module_OBJECTS = +diskfilter_module_OBJECTS = $(am_diskfilter_module_OBJECTS) \ + $(nodist_diskfilter_module_OBJECTS) +diskfilter_module_LINK = $(CCLD) $(diskfilter_module_CFLAGS) $(CFLAGS) \ + $(diskfilter_module_LDFLAGS) $(LDFLAGS) -o $@ +am__div_module_SOURCES_DIST = lib/division.c +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_emu_TRUE@am_div_module_OBJECTS = lib/div_module-division.$(OBJEXT) +@COND_arm64_efi_TRUE@am_div_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ lib/div_module-division.$(OBJEXT) +nodist_div_module_OBJECTS = +div_module_OBJECTS = $(am_div_module_OBJECTS) \ + $(nodist_div_module_OBJECTS) +div_module_LINK = $(CCLD) $(div_module_CFLAGS) $(CFLAGS) \ + $(div_module_LDFLAGS) $(LDFLAGS) -o $@ +am_div_test_module_OBJECTS = tests/div_test_module-div_test.$(OBJEXT) +nodist_div_test_module_OBJECTS = +div_test_module_OBJECTS = $(am_div_test_module_OBJECTS) \ + $(nodist_div_test_module_OBJECTS) +div_test_module_LINK = $(CCLD) $(div_test_module_CFLAGS) $(CFLAGS) \ + $(div_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am_dm_nv_module_OBJECTS = disk/dm_nv_module-dmraid_nvidia.$(OBJEXT) +nodist_dm_nv_module_OBJECTS = +dm_nv_module_OBJECTS = $(am_dm_nv_module_OBJECTS) \ + $(nodist_dm_nv_module_OBJECTS) +dm_nv_module_LINK = $(CCLD) $(dm_nv_module_CFLAGS) $(CFLAGS) \ + $(dm_nv_module_LDFLAGS) $(LDFLAGS) -o $@ +am__drivemap_module_SOURCES_DIST = commands/i386/pc/drivemap.c \ + commands/i386/pc/drivemap_int13h.S +@COND_i386_pc_TRUE@am_drivemap_module_OBJECTS = commands/i386/pc/drivemap_module-drivemap.$(OBJEXT) \ +@COND_i386_pc_TRUE@ commands/i386/pc/drivemap_module-drivemap_int13h.$(OBJEXT) +nodist_drivemap_module_OBJECTS = +drivemap_module_OBJECTS = $(am_drivemap_module_OBJECTS) \ + $(nodist_drivemap_module_OBJECTS) +drivemap_module_LINK = $(CCLD) $(drivemap_module_CFLAGS) $(CFLAGS) \ + $(drivemap_module_LDFLAGS) $(LDFLAGS) -o $@ +am_echo_module_OBJECTS = commands/echo_module-echo.$(OBJEXT) +nodist_echo_module_OBJECTS = +echo_module_OBJECTS = $(am_echo_module_OBJECTS) \ + $(nodist_echo_module_OBJECTS) +echo_module_LINK = $(CCLD) $(echo_module_CFLAGS) $(CFLAGS) \ + $(echo_module_LDFLAGS) $(LDFLAGS) -o $@ +am__efi_gop_module_SOURCES_DIST = video/efi_gop.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_efi_gop_module_OBJECTS = video/efi_gop_module-efi_gop.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_TRUE@am_efi_gop_module_OBJECTS = video/efi_gop_module-efi_gop.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_TRUE@am_efi_gop_module_OBJECTS = video/efi_gop_module-efi_gop.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_efi_gop_module_OBJECTS = video/efi_gop_module-efi_gop.$(OBJEXT) +@COND_arm64_efi_TRUE@am_efi_gop_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ video/efi_gop_module-efi_gop.$(OBJEXT) +nodist_efi_gop_module_OBJECTS = +efi_gop_module_OBJECTS = $(am_efi_gop_module_OBJECTS) \ + $(nodist_efi_gop_module_OBJECTS) +efi_gop_module_LINK = $(CCLD) $(efi_gop_module_CFLAGS) $(CFLAGS) \ + $(efi_gop_module_LDFLAGS) $(LDFLAGS) -o $@ +am__efi_uga_module_SOURCES_DIST = video/efi_uga.c +@COND_i386_efi_FALSE@@COND_x86_64_efi_TRUE@am_efi_uga_module_OBJECTS = video/efi_uga_module-efi_uga.$(OBJEXT) +@COND_i386_efi_TRUE@am_efi_uga_module_OBJECTS = \ +@COND_i386_efi_TRUE@ video/efi_uga_module-efi_uga.$(OBJEXT) +nodist_efi_uga_module_OBJECTS = +efi_uga_module_OBJECTS = $(am_efi_uga_module_OBJECTS) \ + $(nodist_efi_uga_module_OBJECTS) +efi_uga_module_LINK = $(CCLD) $(efi_uga_module_CFLAGS) $(CFLAGS) \ + $(efi_uga_module_LDFLAGS) $(LDFLAGS) -o $@ +am__efiemu_module_SOURCES_DIST = efiemu/i386/pc/cfgtables.c \ + efiemu/main.c efiemu/i386/loadcore32.c \ + efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c \ + efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c \ + efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c \ + efiemu/i386/coredetect.c efiemu/i386/nocfgtables.c +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_efiemu_module_OBJECTS = efiemu/i386/efiemu_module-nocfgtables.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-main.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/i386/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/i386/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-mm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-loadcore_common.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-symbols.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-prepare32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-prepare64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/efiemu_module-pnvram.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ efiemu/i386/efiemu_module-coredetect.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_efiemu_module_OBJECTS = efiemu/i386/pc/efiemu_module-cfgtables.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-main.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/i386/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/i386/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-mm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-loadcore_common.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-symbols.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-prepare32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-prepare64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/efiemu_module-pnvram.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ efiemu/i386/efiemu_module-coredetect.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_efiemu_module_OBJECTS = efiemu/i386/pc/efiemu_module-cfgtables.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-main.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/i386/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/i386/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-mm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-loadcore_common.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-symbols.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-prepare32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-prepare64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/efiemu_module-pnvram.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ efiemu/i386/efiemu_module-coredetect.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@am_efiemu_module_OBJECTS = efiemu/i386/efiemu_module-nocfgtables.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-main.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/i386/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/i386/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-mm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-loadcore_common.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-symbols.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-prepare32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-prepare64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/efiemu_module-pnvram.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ efiemu/i386/efiemu_module-coredetect.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_efiemu_module_OBJECTS = efiemu/i386/pc/efiemu_module-cfgtables.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-main.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/i386/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/i386/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-mm.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-loadcore_common.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-symbols.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-loadcore32.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-loadcore64.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-prepare32.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-prepare64.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/efiemu_module-pnvram.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ efiemu/i386/efiemu_module-coredetect.$(OBJEXT) +nodist_efiemu_module_OBJECTS = +efiemu_module_OBJECTS = $(am_efiemu_module_OBJECTS) \ + $(nodist_efiemu_module_OBJECTS) +efiemu_module_LINK = $(CCLD) $(efiemu_module_CFLAGS) $(CFLAGS) \ + $(efiemu_module_LDFLAGS) $(LDFLAGS) -o $@ +am__efifwsetup_module_SOURCES_DIST = commands/efi/efifwsetup.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_efifwsetup_module_OBJECTS = commands/efi/efifwsetup_module-efifwsetup.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_TRUE@am_efifwsetup_module_OBJECTS = commands/efi/efifwsetup_module-efifwsetup.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_TRUE@am_efifwsetup_module_OBJECTS = commands/efi/efifwsetup_module-efifwsetup.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_efifwsetup_module_OBJECTS = commands/efi/efifwsetup_module-efifwsetup.$(OBJEXT) +@COND_arm64_efi_TRUE@am_efifwsetup_module_OBJECTS = commands/efi/efifwsetup_module-efifwsetup.$(OBJEXT) +nodist_efifwsetup_module_OBJECTS = +efifwsetup_module_OBJECTS = $(am_efifwsetup_module_OBJECTS) \ + $(nodist_efifwsetup_module_OBJECTS) +efifwsetup_module_LINK = $(CCLD) $(efifwsetup_module_CFLAGS) $(CFLAGS) \ + $(efifwsetup_module_LDFLAGS) $(LDFLAGS) -o $@ +am__efinet_module_SOURCES_DIST = net/drivers/efi/efinet.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_efinet_module_OBJECTS = net/drivers/efi/efinet_module-efinet.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_TRUE@am_efinet_module_OBJECTS = net/drivers/efi/efinet_module-efinet.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_TRUE@am_efinet_module_OBJECTS = net/drivers/efi/efinet_module-efinet.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_efinet_module_OBJECTS = net/drivers/efi/efinet_module-efinet.$(OBJEXT) +@COND_arm64_efi_TRUE@am_efinet_module_OBJECTS = net/drivers/efi/efinet_module-efinet.$(OBJEXT) +nodist_efinet_module_OBJECTS = +efinet_module_OBJECTS = $(am_efinet_module_OBJECTS) \ + $(nodist_efinet_module_OBJECTS) +efinet_module_LINK = $(CCLD) $(efinet_module_CFLAGS) $(CFLAGS) \ + $(efinet_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ehci_module_SOURCES_DIST = bus/usb/ehci.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_ehci_module_OBJECTS = bus/usb/ehci_module-ehci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_ehci_module_OBJECTS = bus/usb/ehci_module-ehci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_ehci_module_OBJECTS = bus/usb/ehci_module-ehci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_ehci_module_OBJECTS = bus/usb/ehci_module-ehci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_ehci_module_OBJECTS = bus/usb/ehci_module-ehci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_ehci_module_OBJECTS = bus/usb/ehci_module-ehci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_ehci_module_OBJECTS = bus/usb/ehci_module-ehci.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_ehci_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ bus/usb/ehci_module-ehci.$(OBJEXT) +nodist_ehci_module_OBJECTS = +ehci_module_OBJECTS = $(am_ehci_module_OBJECTS) \ + $(nodist_ehci_module_OBJECTS) +ehci_module_LINK = $(CCLD) $(ehci_module_CFLAGS) $(CFLAGS) \ + $(ehci_module_LDFLAGS) $(LDFLAGS) -o $@ +am_elf_module_OBJECTS = kern/elf_module-elf.$(OBJEXT) +nodist_elf_module_OBJECTS = +elf_module_OBJECTS = $(am_elf_module_OBJECTS) \ + $(nodist_elf_module_OBJECTS) +elf_module_LINK = $(CCLD) $(elf_module_CFLAGS) $(CFLAGS) \ + $(elf_module_LDFLAGS) $(LDFLAGS) -o $@ +am__emunet_module_SOURCES_DIST = net/drivers/emu/emunet.c +@COND_emu_TRUE@am_emunet_module_OBJECTS = \ +@COND_emu_TRUE@ net/drivers/emu/emunet_module-emunet.$(OBJEXT) +nodist_emunet_module_OBJECTS = +emunet_module_OBJECTS = $(am_emunet_module_OBJECTS) \ + $(nodist_emunet_module_OBJECTS) +emunet_module_LINK = $(CCLD) $(emunet_module_CFLAGS) $(CFLAGS) \ + $(emunet_module_LDFLAGS) $(LDFLAGS) -o $@ +am__emupci_module_SOURCES_DIST = bus/emu/pci.c commands/lspci.c +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@am_emupci_module_OBJECTS = bus/emu/emupci_module-pci.$(OBJEXT) \ +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@ commands/emupci_module-lspci.$(OBJEXT) +nodist_emupci_module_OBJECTS = +emupci_module_OBJECTS = $(am_emupci_module_OBJECTS) \ + $(nodist_emupci_module_OBJECTS) +emupci_module_LINK = $(CCLD) $(emupci_module_CFLAGS) $(CFLAGS) \ + $(emupci_module_LDFLAGS) $(LDFLAGS) -o $@ +am__escc_module_SOURCES_DIST = term/ieee1275/escc.c +@COND_powerpc_ieee1275_TRUE@am_escc_module_OBJECTS = term/ieee1275/escc_module-escc.$(OBJEXT) +nodist_escc_module_OBJECTS = +escc_module_OBJECTS = $(am_escc_module_OBJECTS) \ + $(nodist_escc_module_OBJECTS) +escc_module_LINK = $(CCLD) $(escc_module_CFLAGS) $(CFLAGS) \ + $(escc_module_LDFLAGS) $(LDFLAGS) -o $@ +am_eval_module_OBJECTS = commands/eval_module-eval.$(OBJEXT) +nodist_eval_module_OBJECTS = +eval_module_OBJECTS = $(am_eval_module_OBJECTS) \ + $(nodist_eval_module_OBJECTS) +eval_module_LINK = $(CCLD) $(eval_module_CFLAGS) $(CFLAGS) \ + $(eval_module_LDFLAGS) $(LDFLAGS) -o $@ +am_exfat_module_OBJECTS = fs/exfat_module-exfat.$(OBJEXT) +nodist_exfat_module_OBJECTS = +exfat_module_OBJECTS = $(am_exfat_module_OBJECTS) \ + $(nodist_exfat_module_OBJECTS) +exfat_module_LINK = $(CCLD) $(exfat_module_CFLAGS) $(CFLAGS) \ + $(exfat_module_LDFLAGS) $(LDFLAGS) -o $@ +am_exfctest_module_OBJECTS = \ + tests/exfctest_module-example_functional_test.$(OBJEXT) +nodist_exfctest_module_OBJECTS = +exfctest_module_OBJECTS = $(am_exfctest_module_OBJECTS) \ + $(nodist_exfctest_module_OBJECTS) +exfctest_module_LINK = $(CCLD) $(exfctest_module_CFLAGS) $(CFLAGS) \ + $(exfctest_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ext2_module_OBJECTS = fs/ext2_module-ext2.$(OBJEXT) +nodist_ext2_module_OBJECTS = +ext2_module_OBJECTS = $(am_ext2_module_OBJECTS) \ + $(nodist_ext2_module_OBJECTS) +ext2_module_LINK = $(CCLD) $(ext2_module_CFLAGS) $(CFLAGS) \ + $(ext2_module_LDFLAGS) $(LDFLAGS) -o $@ +am__extcmd_module_SOURCES_DIST = commands/extcmd.c lib/arg.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_extcmd_module_OBJECTS = commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +@COND_arm64_efi_TRUE@am_extcmd_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ commands/extcmd_module-extcmd.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ lib/extcmd_module-arg.$(OBJEXT) +nodist_extcmd_module_OBJECTS = +extcmd_module_OBJECTS = $(am_extcmd_module_OBJECTS) \ + $(nodist_extcmd_module_OBJECTS) +extcmd_module_LINK = $(CCLD) $(extcmd_module_CFLAGS) $(CFLAGS) \ + $(extcmd_module_LDFLAGS) $(LDFLAGS) -o $@ +am_fat_module_OBJECTS = fs/fat_module-fat.$(OBJEXT) +nodist_fat_module_OBJECTS = +fat_module_OBJECTS = $(am_fat_module_OBJECTS) \ + $(nodist_fat_module_OBJECTS) +fat_module_LINK = $(CCLD) $(fat_module_CFLAGS) $(CFLAGS) \ + $(fat_module_LDFLAGS) $(LDFLAGS) -o $@ +am__fdt_module_SOURCES_DIST = loader/arm64/fdt.c lib/fdt.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_fdt_module_OBJECTS = lib/fdt_module-fdt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_fdt_module_OBJECTS = lib/fdt_module-fdt.$(OBJEXT) +@COND_arm64_efi_TRUE@am_fdt_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ loader/arm64/fdt_module-fdt.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ lib/fdt_module-fdt.$(OBJEXT) +nodist_fdt_module_OBJECTS = +fdt_module_OBJECTS = $(am_fdt_module_OBJECTS) \ + $(nodist_fdt_module_OBJECTS) +fdt_module_LINK = $(CCLD) $(fdt_module_CFLAGS) $(CFLAGS) \ + $(fdt_module_LDFLAGS) $(LDFLAGS) -o $@ +am_file_module_OBJECTS = commands/file_module-file.$(OBJEXT) \ + commands/file_module-file32.$(OBJEXT) \ + commands/file_module-file64.$(OBJEXT) \ + loader/i386/file_module-xen_file.$(OBJEXT) \ + loader/i386/file_module-xen_file32.$(OBJEXT) \ + loader/i386/file_module-xen_file64.$(OBJEXT) +nodist_file_module_OBJECTS = +file_module_OBJECTS = $(am_file_module_OBJECTS) \ + $(nodist_file_module_OBJECTS) +file_module_LINK = $(CCLD) $(file_module_CFLAGS) $(CFLAGS) \ + $(file_module_LDFLAGS) $(LDFLAGS) -o $@ +am__fixvideo_module_SOURCES_DIST = commands/efi/fixvideo.c +@COND_i386_efi_FALSE@@COND_x86_64_efi_TRUE@am_fixvideo_module_OBJECTS = commands/efi/fixvideo_module-fixvideo.$(OBJEXT) +@COND_i386_efi_TRUE@am_fixvideo_module_OBJECTS = commands/efi/fixvideo_module-fixvideo.$(OBJEXT) +nodist_fixvideo_module_OBJECTS = +fixvideo_module_OBJECTS = $(am_fixvideo_module_OBJECTS) \ + $(nodist_fixvideo_module_OBJECTS) +fixvideo_module_LINK = $(CCLD) $(fixvideo_module_CFLAGS) $(CFLAGS) \ + $(fixvideo_module_LDFLAGS) $(LDFLAGS) -o $@ +am__font_module_SOURCES_DIST = font/font.c font/font_cmd.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_font_module_OBJECTS = font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ font/font_module-font_cmd.$(OBJEXT) +@COND_arm64_efi_TRUE@am_font_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ font/font_module-font.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ font/font_module-font_cmd.$(OBJEXT) +nodist_font_module_OBJECTS = +font_module_OBJECTS = $(am_font_module_OBJECTS) \ + $(nodist_font_module_OBJECTS) +font_module_LINK = $(CCLD) $(font_module_CFLAGS) $(CFLAGS) \ + $(font_module_LDFLAGS) $(LDFLAGS) -o $@ +am__freedos_module_SOURCES_DIST = loader/i386/pc/freedos.c +@COND_i386_pc_TRUE@am_freedos_module_OBJECTS = loader/i386/pc/freedos_module-freedos.$(OBJEXT) +nodist_freedos_module_OBJECTS = +freedos_module_OBJECTS = $(am_freedos_module_OBJECTS) \ + $(nodist_freedos_module_OBJECTS) +freedos_module_LINK = $(CCLD) $(freedos_module_CFLAGS) $(CFLAGS) \ + $(freedos_module_LDFLAGS) $(LDFLAGS) -o $@ +am_fshelp_module_OBJECTS = fs/fshelp_module-fshelp.$(OBJEXT) +nodist_fshelp_module_OBJECTS = +fshelp_module_OBJECTS = $(am_fshelp_module_OBJECTS) \ + $(nodist_fshelp_module_OBJECTS) +fshelp_module_LINK = $(CCLD) $(fshelp_module_CFLAGS) $(CFLAGS) \ + $(fshelp_module_LDFLAGS) $(LDFLAGS) -o $@ +am_functional_test_module_OBJECTS = \ + tests/lib/functional_test_module-functional_test.$(OBJEXT) \ + tests/lib/functional_test_module-test.$(OBJEXT) \ + tests/functional_test_module-video_checksum.$(OBJEXT) \ + tests/functional_test_module-fake_input.$(OBJEXT) \ + video/functional_test_module-capture.$(OBJEXT) +nodist_functional_test_module_OBJECTS = +functional_test_module_OBJECTS = $(am_functional_test_module_OBJECTS) \ + $(nodist_functional_test_module_OBJECTS) +functional_test_module_LINK = $(CCLD) $(functional_test_module_CFLAGS) \ + $(CFLAGS) $(functional_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__fwstart_image_SOURCES_DIST = boot/mips/loongson/fwstart.S +@COND_mips_loongson_TRUE@am_fwstart_image_OBJECTS = boot/mips/loongson/fwstart_image-fwstart.$(OBJEXT) +nodist_fwstart_image_OBJECTS = +fwstart_image_OBJECTS = $(am_fwstart_image_OBJECTS) \ + $(nodist_fwstart_image_OBJECTS) +fwstart_image_DEPENDENCIES = +fwstart_image_LINK = $(CCLD) $(fwstart_image_CFLAGS) $(CFLAGS) \ + $(fwstart_image_LDFLAGS) $(LDFLAGS) -o $@ +am__fwstart_fuloong2f_image_SOURCES_DIST = \ + boot/mips/loongson/fuloong2f.S +@COND_mips_loongson_TRUE@am_fwstart_fuloong2f_image_OBJECTS = boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.$(OBJEXT) +nodist_fwstart_fuloong2f_image_OBJECTS = +fwstart_fuloong2f_image_OBJECTS = \ + $(am_fwstart_fuloong2f_image_OBJECTS) \ + $(nodist_fwstart_fuloong2f_image_OBJECTS) +fwstart_fuloong2f_image_DEPENDENCIES = +fwstart_fuloong2f_image_LINK = $(CCLD) \ + $(fwstart_fuloong2f_image_CFLAGS) $(CFLAGS) \ + $(fwstart_fuloong2f_image_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_arcfour_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.$(OBJEXT) +nodist_gcry_arcfour_module_OBJECTS = +gcry_arcfour_module_OBJECTS = $(am_gcry_arcfour_module_OBJECTS) \ + $(nodist_gcry_arcfour_module_OBJECTS) +gcry_arcfour_module_LINK = $(CCLD) $(gcry_arcfour_module_CFLAGS) \ + $(CFLAGS) $(gcry_arcfour_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_blowfish_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.$(OBJEXT) +nodist_gcry_blowfish_module_OBJECTS = +gcry_blowfish_module_OBJECTS = $(am_gcry_blowfish_module_OBJECTS) \ + $(nodist_gcry_blowfish_module_OBJECTS) +gcry_blowfish_module_LINK = $(CCLD) $(gcry_blowfish_module_CFLAGS) \ + $(CFLAGS) $(gcry_blowfish_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_camellia_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.$(OBJEXT) \ + lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.$(OBJEXT) +nodist_gcry_camellia_module_OBJECTS = +gcry_camellia_module_OBJECTS = $(am_gcry_camellia_module_OBJECTS) \ + $(nodist_gcry_camellia_module_OBJECTS) +gcry_camellia_module_LINK = $(CCLD) $(gcry_camellia_module_CFLAGS) \ + $(CFLAGS) $(gcry_camellia_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_cast5_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.$(OBJEXT) +nodist_gcry_cast5_module_OBJECTS = +gcry_cast5_module_OBJECTS = $(am_gcry_cast5_module_OBJECTS) \ + $(nodist_gcry_cast5_module_OBJECTS) +gcry_cast5_module_LINK = $(CCLD) $(gcry_cast5_module_CFLAGS) $(CFLAGS) \ + $(gcry_cast5_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_crc_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_crc_module-crc.$(OBJEXT) +nodist_gcry_crc_module_OBJECTS = +gcry_crc_module_OBJECTS = $(am_gcry_crc_module_OBJECTS) \ + $(nodist_gcry_crc_module_OBJECTS) +gcry_crc_module_LINK = $(CCLD) $(gcry_crc_module_CFLAGS) $(CFLAGS) \ + $(gcry_crc_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_des_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_des_module-des.$(OBJEXT) +nodist_gcry_des_module_OBJECTS = +gcry_des_module_OBJECTS = $(am_gcry_des_module_OBJECTS) \ + $(nodist_gcry_des_module_OBJECTS) +gcry_des_module_LINK = $(CCLD) $(gcry_des_module_CFLAGS) $(CFLAGS) \ + $(gcry_des_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_dsa_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.$(OBJEXT) +nodist_gcry_dsa_module_OBJECTS = +gcry_dsa_module_OBJECTS = $(am_gcry_dsa_module_OBJECTS) \ + $(nodist_gcry_dsa_module_OBJECTS) +gcry_dsa_module_LINK = $(CCLD) $(gcry_dsa_module_CFLAGS) $(CFLAGS) \ + $(gcry_dsa_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_idea_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_idea_module-idea.$(OBJEXT) +nodist_gcry_idea_module_OBJECTS = +gcry_idea_module_OBJECTS = $(am_gcry_idea_module_OBJECTS) \ + $(nodist_gcry_idea_module_OBJECTS) +gcry_idea_module_LINK = $(CCLD) $(gcry_idea_module_CFLAGS) $(CFLAGS) \ + $(gcry_idea_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_md4_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_md4_module-md4.$(OBJEXT) +nodist_gcry_md4_module_OBJECTS = +gcry_md4_module_OBJECTS = $(am_gcry_md4_module_OBJECTS) \ + $(nodist_gcry_md4_module_OBJECTS) +gcry_md4_module_LINK = $(CCLD) $(gcry_md4_module_CFLAGS) $(CFLAGS) \ + $(gcry_md4_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_md5_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_md5_module-md5.$(OBJEXT) +nodist_gcry_md5_module_OBJECTS = +gcry_md5_module_OBJECTS = $(am_gcry_md5_module_OBJECTS) \ + $(nodist_gcry_md5_module_OBJECTS) +gcry_md5_module_LINK = $(CCLD) $(gcry_md5_module_CFLAGS) $(CFLAGS) \ + $(gcry_md5_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_rfc2268_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.$(OBJEXT) +nodist_gcry_rfc2268_module_OBJECTS = +gcry_rfc2268_module_OBJECTS = $(am_gcry_rfc2268_module_OBJECTS) \ + $(nodist_gcry_rfc2268_module_OBJECTS) +gcry_rfc2268_module_LINK = $(CCLD) $(gcry_rfc2268_module_CFLAGS) \ + $(CFLAGS) $(gcry_rfc2268_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_rijndael_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.$(OBJEXT) +nodist_gcry_rijndael_module_OBJECTS = +gcry_rijndael_module_OBJECTS = $(am_gcry_rijndael_module_OBJECTS) \ + $(nodist_gcry_rijndael_module_OBJECTS) +gcry_rijndael_module_LINK = $(CCLD) $(gcry_rijndael_module_CFLAGS) \ + $(CFLAGS) $(gcry_rijndael_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_rmd160_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.$(OBJEXT) +nodist_gcry_rmd160_module_OBJECTS = +gcry_rmd160_module_OBJECTS = $(am_gcry_rmd160_module_OBJECTS) \ + $(nodist_gcry_rmd160_module_OBJECTS) +gcry_rmd160_module_LINK = $(CCLD) $(gcry_rmd160_module_CFLAGS) \ + $(CFLAGS) $(gcry_rmd160_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_rsa_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.$(OBJEXT) +nodist_gcry_rsa_module_OBJECTS = +gcry_rsa_module_OBJECTS = $(am_gcry_rsa_module_OBJECTS) \ + $(nodist_gcry_rsa_module_OBJECTS) +gcry_rsa_module_LINK = $(CCLD) $(gcry_rsa_module_CFLAGS) $(CFLAGS) \ + $(gcry_rsa_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_seed_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_seed_module-seed.$(OBJEXT) +nodist_gcry_seed_module_OBJECTS = +gcry_seed_module_OBJECTS = $(am_gcry_seed_module_OBJECTS) \ + $(nodist_gcry_seed_module_OBJECTS) +gcry_seed_module_LINK = $(CCLD) $(gcry_seed_module_CFLAGS) $(CFLAGS) \ + $(gcry_seed_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_serpent_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.$(OBJEXT) +nodist_gcry_serpent_module_OBJECTS = +gcry_serpent_module_OBJECTS = $(am_gcry_serpent_module_OBJECTS) \ + $(nodist_gcry_serpent_module_OBJECTS) +gcry_serpent_module_LINK = $(CCLD) $(gcry_serpent_module_CFLAGS) \ + $(CFLAGS) $(gcry_serpent_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_sha1_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.$(OBJEXT) +nodist_gcry_sha1_module_OBJECTS = +gcry_sha1_module_OBJECTS = $(am_gcry_sha1_module_OBJECTS) \ + $(nodist_gcry_sha1_module_OBJECTS) +gcry_sha1_module_LINK = $(CCLD) $(gcry_sha1_module_CFLAGS) $(CFLAGS) \ + $(gcry_sha1_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_sha256_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.$(OBJEXT) +nodist_gcry_sha256_module_OBJECTS = +gcry_sha256_module_OBJECTS = $(am_gcry_sha256_module_OBJECTS) \ + $(nodist_gcry_sha256_module_OBJECTS) +gcry_sha256_module_LINK = $(CCLD) $(gcry_sha256_module_CFLAGS) \ + $(CFLAGS) $(gcry_sha256_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_sha512_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.$(OBJEXT) +nodist_gcry_sha512_module_OBJECTS = +gcry_sha512_module_OBJECTS = $(am_gcry_sha512_module_OBJECTS) \ + $(nodist_gcry_sha512_module_OBJECTS) +gcry_sha512_module_LINK = $(CCLD) $(gcry_sha512_module_CFLAGS) \ + $(CFLAGS) $(gcry_sha512_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_tiger_module_OBJECTS = \ + lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.$(OBJEXT) +nodist_gcry_tiger_module_OBJECTS = +gcry_tiger_module_OBJECTS = $(am_gcry_tiger_module_OBJECTS) \ + $(nodist_gcry_tiger_module_OBJECTS) +gcry_tiger_module_LINK = $(CCLD) $(gcry_tiger_module_CFLAGS) $(CFLAGS) \ + $(gcry_tiger_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_twofish_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.$(OBJEXT) +nodist_gcry_twofish_module_OBJECTS = +gcry_twofish_module_OBJECTS = $(am_gcry_twofish_module_OBJECTS) \ + $(nodist_gcry_twofish_module_OBJECTS) +gcry_twofish_module_LINK = $(CCLD) $(gcry_twofish_module_CFLAGS) \ + $(CFLAGS) $(gcry_twofish_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gcry_whirlpool_module_OBJECTS = lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.$(OBJEXT) +nodist_gcry_whirlpool_module_OBJECTS = +gcry_whirlpool_module_OBJECTS = $(am_gcry_whirlpool_module_OBJECTS) \ + $(nodist_gcry_whirlpool_module_OBJECTS) +gcry_whirlpool_module_LINK = $(CCLD) $(gcry_whirlpool_module_CFLAGS) \ + $(CFLAGS) $(gcry_whirlpool_module_LDFLAGS) $(LDFLAGS) -o $@ +am__gdb_module_SOURCES_DIST = gdb/i386/idt.c gdb/i386/machdep.S \ + gdb/i386/signal.c gdb/cstub.c gdb/gdb.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_gdb_module_OBJECTS = gdb/i386/gdb_module-idt.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ gdb/i386/gdb_module-machdep.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ gdb/i386/gdb_module-signal.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ gdb/gdb_module-cstub.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ gdb/gdb_module-gdb.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_gdb_module_OBJECTS = gdb/i386/gdb_module-idt.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ gdb/i386/gdb_module-machdep.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ gdb/i386/gdb_module-signal.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ gdb/gdb_module-cstub.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ gdb/gdb_module-gdb.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_gdb_module_OBJECTS = gdb/i386/gdb_module-idt.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ gdb/i386/gdb_module-machdep.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ gdb/i386/gdb_module-signal.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ gdb/gdb_module-cstub.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ gdb/gdb_module-gdb.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_gdb_module_OBJECTS = gdb/i386/gdb_module-idt.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ gdb/i386/gdb_module-machdep.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ gdb/i386/gdb_module-signal.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ gdb/gdb_module-cstub.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ gdb/gdb_module-gdb.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_gdb_module_OBJECTS = gdb/i386/gdb_module-idt.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ gdb/i386/gdb_module-machdep.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ gdb/i386/gdb_module-signal.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ gdb/gdb_module-cstub.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ gdb/gdb_module-gdb.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_gdb_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ gdb/i386/gdb_module-idt.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ gdb/i386/gdb_module-machdep.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ gdb/i386/gdb_module-signal.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ gdb/gdb_module-cstub.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ gdb/gdb_module-gdb.$(OBJEXT) +nodist_gdb_module_OBJECTS = +gdb_module_OBJECTS = $(am_gdb_module_OBJECTS) \ + $(nodist_gdb_module_OBJECTS) +gdb_module_LINK = $(CCLD) $(gdb_module_CFLAGS) $(CFLAGS) \ + $(gdb_module_LDFLAGS) $(LDFLAGS) -o $@ +am_geli_module_OBJECTS = disk/geli_module-geli.$(OBJEXT) +nodist_geli_module_OBJECTS = +geli_module_OBJECTS = $(am_geli_module_OBJECTS) \ + $(nodist_geli_module_OBJECTS) +geli_module_LINK = $(CCLD) $(geli_module_CFLAGS) $(CFLAGS) \ + $(geli_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gettext_module_OBJECTS = gettext/gettext_module-gettext.$(OBJEXT) +nodist_gettext_module_OBJECTS = +gettext_module_OBJECTS = $(am_gettext_module_OBJECTS) \ + $(nodist_gettext_module_OBJECTS) +gettext_module_LINK = $(CCLD) $(gettext_module_CFLAGS) $(CFLAGS) \ + $(gettext_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gfxmenu_module_OBJECTS = gfxmenu/gfxmenu_module-gfxmenu.$(OBJEXT) \ + gfxmenu/gfxmenu_module-view.$(OBJEXT) \ + gfxmenu/gfxmenu_module-font.$(OBJEXT) \ + gfxmenu/gfxmenu_module-icon_manager.$(OBJEXT) \ + gfxmenu/gfxmenu_module-theme_loader.$(OBJEXT) \ + gfxmenu/gfxmenu_module-widget-box.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_canvas.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_circular_progress.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_box.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_label.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_list.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_image.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_progress_bar.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_util.$(OBJEXT) \ + gfxmenu/gfxmenu_module-gui_string_util.$(OBJEXT) +nodist_gfxmenu_module_OBJECTS = +gfxmenu_module_OBJECTS = $(am_gfxmenu_module_OBJECTS) \ + $(nodist_gfxmenu_module_OBJECTS) +gfxmenu_module_LINK = $(CCLD) $(gfxmenu_module_CFLAGS) $(CFLAGS) \ + $(gfxmenu_module_LDFLAGS) $(LDFLAGS) -o $@ +am__gfxterm_module_SOURCES_DIST = term/gfxterm.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_gfxterm_module_OBJECTS = term/gfxterm_module-gfxterm.$(OBJEXT) +@COND_arm64_efi_TRUE@am_gfxterm_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ term/gfxterm_module-gfxterm.$(OBJEXT) +nodist_gfxterm_module_OBJECTS = +gfxterm_module_OBJECTS = $(am_gfxterm_module_OBJECTS) \ + $(nodist_gfxterm_module_OBJECTS) +gfxterm_module_LINK = $(CCLD) $(gfxterm_module_CFLAGS) $(CFLAGS) \ + $(gfxterm_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gfxterm_background_module_OBJECTS = \ + term/gfxterm_background_module-gfxterm_background.$(OBJEXT) +nodist_gfxterm_background_module_OBJECTS = +gfxterm_background_module_OBJECTS = \ + $(am_gfxterm_background_module_OBJECTS) \ + $(nodist_gfxterm_background_module_OBJECTS) +gfxterm_background_module_LINK = $(CCLD) \ + $(gfxterm_background_module_CFLAGS) $(CFLAGS) \ + $(gfxterm_background_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gfxterm_menu_module_OBJECTS = \ + tests/gfxterm_menu_module-gfxterm_menu.$(OBJEXT) +nodist_gfxterm_menu_module_OBJECTS = +gfxterm_menu_module_OBJECTS = $(am_gfxterm_menu_module_OBJECTS) \ + $(nodist_gfxterm_menu_module_OBJECTS) +gfxterm_menu_module_LINK = $(CCLD) $(gfxterm_menu_module_CFLAGS) \ + $(CFLAGS) $(gfxterm_menu_module_LDFLAGS) $(LDFLAGS) -o $@ +am_gptsync_module_OBJECTS = commands/gptsync_module-gptsync.$(OBJEXT) +nodist_gptsync_module_OBJECTS = +gptsync_module_OBJECTS = $(am_gptsync_module_OBJECTS) \ + $(nodist_gptsync_module_OBJECTS) +gptsync_module_LINK = $(CCLD) $(gptsync_module_CFLAGS) $(CFLAGS) \ + $(gptsync_module_LDFLAGS) $(LDFLAGS) -o $@ +am__grub_emu_SOURCES_DIST = kern/emu/full.c +@COND_emu_TRUE@am_grub_emu_OBJECTS = kern/emu/grub_emu-full.$(OBJEXT) +@COND_emu_TRUE@nodist_grub_emu_OBJECTS = \ +@COND_emu_TRUE@ grub_emu-grub_emu_init.$(OBJEXT) +grub_emu_OBJECTS = $(am_grub_emu_OBJECTS) $(nodist_grub_emu_OBJECTS) +am__DEPENDENCIES_1 = +@COND_emu_TRUE@grub_emu_DEPENDENCIES = kernel.exec$(EXEEXT) \ +@COND_emu_TRUE@ $(MODULE_FILES) gnulib/libgnu.a \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grub_emu_LINK = $(CCLD) $(grub_emu_CFLAGS) $(CFLAGS) \ + $(grub_emu_LDFLAGS) $(LDFLAGS) -o $@ +am__grub_emu_lite_SOURCES_DIST = kern/emu/lite.c +@COND_emu_TRUE@am_grub_emu_lite_OBJECTS = \ +@COND_emu_TRUE@ kern/emu/grub_emu_lite-lite.$(OBJEXT) +@COND_emu_TRUE@nodist_grub_emu_lite_OBJECTS = \ +@COND_emu_TRUE@ grub_emu_lite-symlist.$(OBJEXT) +grub_emu_lite_OBJECTS = $(am_grub_emu_lite_OBJECTS) \ + $(nodist_grub_emu_lite_OBJECTS) +@COND_emu_TRUE@grub_emu_lite_DEPENDENCIES = kernel.exec$(EXEEXT) \ +@COND_emu_TRUE@ gnulib/libgnu.a $(am__DEPENDENCIES_1) \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +@COND_emu_TRUE@ $(am__DEPENDENCIES_1) +grub_emu_lite_LINK = $(CCLD) $(grub_emu_lite_CFLAGS) $(CFLAGS) \ + $(grub_emu_lite_LDFLAGS) $(LDFLAGS) -o $@ +am_gzio_module_OBJECTS = io/gzio_module-gzio.$(OBJEXT) +nodist_gzio_module_OBJECTS = +gzio_module_OBJECTS = $(am_gzio_module_OBJECTS) \ + $(nodist_gzio_module_OBJECTS) +gzio_module_LINK = $(CCLD) $(gzio_module_CFLAGS) $(CFLAGS) \ + $(gzio_module_LDFLAGS) $(LDFLAGS) -o $@ +am__halt_module_SOURCES_DIST = lib/efi/halt.c commands/halt.c \ + lib/uboot/halt.c lib/emu/halt.c commands/acpihalt.c \ + lib/i386/halt.c lib/ieee1275/halt.c commands/i386/pc/halt.c \ + lib/xen/halt.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_halt_module_OBJECTS = lib/xen/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_halt_module_OBJECTS = commands/halt_module-acpihalt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/efi/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_halt_module_OBJECTS = lib/ieee1275/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_halt_module_OBJECTS = lib/ieee1275/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_halt_module_OBJECTS = commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_halt_module_OBJECTS = commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_halt_module_OBJECTS = commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_halt_module_OBJECTS = lib/efi/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_halt_module_OBJECTS = lib/xen/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_halt_module_OBJECTS = lib/i386/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_halt_module_OBJECTS = commands/i386/pc/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ commands/halt_module-acpihalt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_halt_module_OBJECTS = commands/halt_module-acpihalt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_halt_module_OBJECTS = lib/ieee1275/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_halt_module_OBJECTS = commands/halt_module-acpihalt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/efi/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@am_halt_module_OBJECTS = commands/halt_module-acpihalt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ lib/i386/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_halt_module_OBJECTS = lib/emu/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_halt_module_OBJECTS = lib/uboot/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_halt_module_OBJECTS = lib/efi/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ commands/halt_module-halt.$(OBJEXT) +@COND_arm64_efi_TRUE@am_halt_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ lib/efi/halt_module-halt.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ commands/halt_module-halt.$(OBJEXT) +nodist_halt_module_OBJECTS = +halt_module_OBJECTS = $(am_halt_module_OBJECTS) \ + $(nodist_halt_module_OBJECTS) +halt_module_LINK = $(CCLD) $(halt_module_CFLAGS) $(CFLAGS) \ + $(halt_module_LDFLAGS) $(LDFLAGS) -o $@ +am_hashsum_module_OBJECTS = commands/hashsum_module-hashsum.$(OBJEXT) +nodist_hashsum_module_OBJECTS = +hashsum_module_OBJECTS = $(am_hashsum_module_OBJECTS) \ + $(nodist_hashsum_module_OBJECTS) +hashsum_module_LINK = $(CCLD) $(hashsum_module_CFLAGS) $(CFLAGS) \ + $(hashsum_module_LDFLAGS) $(LDFLAGS) -o $@ +am__hdparm_module_SOURCES_DIST = commands/hdparm.c lib/hexdump.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_hdparm_module_OBJECTS = commands/hdparm_module-hdparm.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/hdparm_module-hexdump.$(OBJEXT) +nodist_hdparm_module_OBJECTS = +hdparm_module_OBJECTS = $(am_hdparm_module_OBJECTS) \ + $(nodist_hdparm_module_OBJECTS) +hdparm_module_LINK = $(CCLD) $(hdparm_module_CFLAGS) $(CFLAGS) \ + $(hdparm_module_LDFLAGS) $(LDFLAGS) -o $@ +am_hello_module_OBJECTS = hello/hello_module-hello.$(OBJEXT) +nodist_hello_module_OBJECTS = +hello_module_OBJECTS = $(am_hello_module_OBJECTS) \ + $(nodist_hello_module_OBJECTS) +hello_module_LINK = $(CCLD) $(hello_module_CFLAGS) $(CFLAGS) \ + $(hello_module_LDFLAGS) $(LDFLAGS) -o $@ +am_help_module_OBJECTS = commands/help_module-help.$(OBJEXT) +nodist_help_module_OBJECTS = +help_module_OBJECTS = $(am_help_module_OBJECTS) \ + $(nodist_help_module_OBJECTS) +help_module_LINK = $(CCLD) $(help_module_CFLAGS) $(CFLAGS) \ + $(help_module_LDFLAGS) $(LDFLAGS) -o $@ +am_hexdump_module_OBJECTS = commands/hexdump_module-hexdump.$(OBJEXT) \ + lib/hexdump_module-hexdump.$(OBJEXT) +nodist_hexdump_module_OBJECTS = +hexdump_module_OBJECTS = $(am_hexdump_module_OBJECTS) \ + $(nodist_hexdump_module_OBJECTS) +hexdump_module_LINK = $(CCLD) $(hexdump_module_CFLAGS) $(CFLAGS) \ + $(hexdump_module_LDFLAGS) $(LDFLAGS) -o $@ +am_hfs_module_OBJECTS = fs/hfs_module-hfs.$(OBJEXT) +nodist_hfs_module_OBJECTS = +hfs_module_OBJECTS = $(am_hfs_module_OBJECTS) \ + $(nodist_hfs_module_OBJECTS) +hfs_module_LINK = $(CCLD) $(hfs_module_CFLAGS) $(CFLAGS) \ + $(hfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_hfsplus_module_OBJECTS = fs/hfsplus_module-hfsplus.$(OBJEXT) +nodist_hfsplus_module_OBJECTS = +hfsplus_module_OBJECTS = $(am_hfsplus_module_OBJECTS) \ + $(nodist_hfsplus_module_OBJECTS) +hfsplus_module_LINK = $(CCLD) $(hfsplus_module_CFLAGS) $(CFLAGS) \ + $(hfsplus_module_LDFLAGS) $(LDFLAGS) -o $@ +am_hfspluscomp_module_OBJECTS = \ + fs/hfspluscomp_module-hfspluscomp.$(OBJEXT) +nodist_hfspluscomp_module_OBJECTS = +hfspluscomp_module_OBJECTS = $(am_hfspluscomp_module_OBJECTS) \ + $(nodist_hfspluscomp_module_OBJECTS) +hfspluscomp_module_LINK = $(CCLD) $(hfspluscomp_module_CFLAGS) \ + $(CFLAGS) $(hfspluscomp_module_LDFLAGS) $(LDFLAGS) -o $@ +am_http_module_OBJECTS = net/http_module-http.$(OBJEXT) +nodist_http_module_OBJECTS = +http_module_OBJECTS = $(am_http_module_OBJECTS) \ + $(nodist_http_module_OBJECTS) +http_module_LINK = $(CCLD) $(http_module_CFLAGS) $(CFLAGS) \ + $(http_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ieee1275_fb_module_SOURCES_DIST = video/ieee1275.c +@COND_powerpc_ieee1275_TRUE@am_ieee1275_fb_module_OBJECTS = video/ieee1275_fb_module-ieee1275.$(OBJEXT) +nodist_ieee1275_fb_module_OBJECTS = +ieee1275_fb_module_OBJECTS = $(am_ieee1275_fb_module_OBJECTS) \ + $(nodist_ieee1275_fb_module_OBJECTS) +ieee1275_fb_module_LINK = $(CCLD) $(ieee1275_fb_module_CFLAGS) \ + $(CFLAGS) $(ieee1275_fb_module_LDFLAGS) $(LDFLAGS) -o $@ +am__iorw_module_SOURCES_DIST = commands/iorw.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_iorw_module_OBJECTS = commands/iorw_module-iorw.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_iorw_module_OBJECTS = commands/iorw_module-iorw.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_iorw_module_OBJECTS = commands/iorw_module-iorw.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_iorw_module_OBJECTS = commands/iorw_module-iorw.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_iorw_module_OBJECTS = commands/iorw_module-iorw.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_iorw_module_OBJECTS = commands/iorw_module-iorw.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_iorw_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ commands/iorw_module-iorw.$(OBJEXT) +nodist_iorw_module_OBJECTS = +iorw_module_OBJECTS = $(am_iorw_module_OBJECTS) \ + $(nodist_iorw_module_OBJECTS) +iorw_module_LINK = $(CCLD) $(iorw_module_CFLAGS) $(CFLAGS) \ + $(iorw_module_LDFLAGS) $(LDFLAGS) -o $@ +am_iso9660_module_OBJECTS = fs/iso9660_module-iso9660.$(OBJEXT) +nodist_iso9660_module_OBJECTS = +iso9660_module_OBJECTS = $(am_iso9660_module_OBJECTS) \ + $(nodist_iso9660_module_OBJECTS) +iso9660_module_LINK = $(CCLD) $(iso9660_module_CFLAGS) $(CFLAGS) \ + $(iso9660_module_LDFLAGS) $(LDFLAGS) -o $@ +am_jfs_module_OBJECTS = fs/jfs_module-jfs.$(OBJEXT) +nodist_jfs_module_OBJECTS = +jfs_module_OBJECTS = $(am_jfs_module_OBJECTS) \ + $(nodist_jfs_module_OBJECTS) +jfs_module_LINK = $(CCLD) $(jfs_module_CFLAGS) $(CFLAGS) \ + $(jfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_jpeg_module_OBJECTS = video/readers/jpeg_module-jpeg.$(OBJEXT) +nodist_jpeg_module_OBJECTS = +jpeg_module_OBJECTS = $(am_jpeg_module_OBJECTS) \ + $(nodist_jpeg_module_OBJECTS) +jpeg_module_LINK = $(CCLD) $(jpeg_module_CFLAGS) $(CFLAGS) \ + $(jpeg_module_LDFLAGS) $(LDFLAGS) -o $@ +am__kernel_exec_SOURCES_DIST = kern/arm64/efi/startup.S \ + kern/arm64/efi/init.c kern/efi/fdt.c kern/arm64/cache.c \ + kern/arm64/cache_flush.S kern/arm64/dl.c \ + kern/arm64/dl_helper.c disk/efi/efidisk.c kern/efi/efi.c \ + kern/efi/init.c kern/efi/mm.c term/efi/console.c kern/acpi.c \ + kern/efi/acpi.c kern/compiler-rt.c kern/mm.c kern/time.c \ + kern/generic/millisleep.c kern/command.c kern/corecmd.c \ + kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c \ + kern/file.c kern/fs.c kern/list.c kern/main.c kern/misc.c \ + kern/parser.c kern/partition.c kern/rescue_parser.c \ + kern/rescue_reader.c kern/term.c kern/arm/efi/startup.S \ + kern/arm/efi/init.c kern/arm/efi/misc.c kern/arm/dl.c \ + kern/arm/dl_helper.c kern/arm/cache_armv6.S \ + kern/arm/cache_armv7.S kern/arm/cache.c kern/arm/compiler-rt.S \ + lib/division.c kern/arm/uboot/startup.S disk/uboot/ubootdisk.c \ + kern/uboot/uboot.c kern/uboot/init.c kern/uboot/hw.c \ + term/uboot/console.c term/terminfo.c term/tparm.c \ + commands/extcmd.c lib/arg.c disk/host.c kern/emu/cache_s.S \ + kern/emu/hostdisk.c osdep/unix/hostdisk.c osdep/exec.c \ + osdep/devmapper/hostdisk.c osdep/hostdisk.c kern/emu/hostfs.c \ + kern/emu/main.c kern/emu/argp_common.c kern/emu/misc.c \ + kern/emu/mm.c kern/emu/time.c kern/emu/cache.c \ + osdep/emuconsole.c osdep/dl.c osdep/sleep.c osdep/init.c \ + osdep/emunet.c osdep/cputime.c kern/i386/coreboot/startup.S \ + kern/i386/coreboot/init.c video/i386/coreboot/cbfb.c \ + kern/i386/pc/acpi.c kern/i386/tsc_pmtimer.c \ + kern/i386/coreboot/mmap.c kern/i386/coreboot/cbtable.c \ + term/gfxterm.c font/font.c font/font_cmd.c io/bufio.c \ + video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c \ + video/fb/video_fb.c video/video.c term/i386/pc/vga_text.c \ + kern/i386/dl.c kern/i386/tsc.c kern/i386/tsc_pit.c \ + kern/i386/efi/startup.S kern/i386/efi/tsc.c \ + kern/i386/efi/init.c bus/pci.c kern/i386/ieee1275/startup.S \ + disk/ieee1275/ofdisk.c kern/ieee1275/cmain.c \ + kern/ieee1275/ieee1275.c kern/ieee1275/mmap.c \ + kern/ieee1275/openfw.c term/ieee1275/console.c \ + kern/ieee1275/init.c kern/i386/multiboot_mmap.c \ + kern/i386/pc/startup.S kern/i386/pc/init.c kern/i386/pc/mmap.c \ + term/i386/pc/console.c kern/i386/qemu/startup.S \ + kern/i386/qemu/init.c kern/vga_init.c kern/i386/qemu/mmap.c \ + kern/i386/xen/startup.S kern/i386/xen/hypercall.S \ + kern/i386/xen/tsc.c kern/xen/init.c term/xen/console.c \ + disk/xen/xendisk.c commands/boot.c kern/ia64/efi/startup.S \ + kern/ia64/efi/init.c kern/ia64/dl.c kern/ia64/dl_helper.c \ + kern/ia64/cache.c kern/mips/startup.S kern/mips/arc/init.c \ + term/arc/console.c disk/arc/arcdisk.c \ + kern/generic/rtc_get_time_ms.c kern/mips/cache.S \ + kern/mips/dl.c kern/mips/init.c term/ns8250.c bus/bonito.c \ + bus/cs5536.c kern/mips/loongson/init.c term/at_keyboard.c \ + term/serial.c video/sm712.c video/sis315pro.c \ + video/radeon_fuloong2e.c video/radeon_yeeloong3a.c \ + commands/keylayouts.c kern/mips/qemu_mips/init.c \ + kern/powerpc/ieee1275/startup.S kern/powerpc/cache.S \ + kern/powerpc/dl.c kern/powerpc/compiler-rt.S \ + kern/sparc64/ieee1275/crt0.S kern/sparc64/cache.S \ + kern/sparc64/dl.c kern/sparc64/ieee1275/ieee1275.c \ + kern/x86_64/efi/startup.S kern/x86_64/efi/callwrap.S \ + kern/x86_64/dl.c kern/x86_64/xen/startup.S \ + kern/x86_64/xen/hypercall.S +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_kernel_exec_OBJECTS = kern/x86_64/xen/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/x86_64/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/x86_64/xen/kernel_exec-hypercall.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/i386/xen/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/xen/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ term/xen/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ disk/xen/kernel_exec-xendisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ commands/kernel_exec-boot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_kernel_exec_OBJECTS = kern/x86_64/efi/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/i386/efi/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/i386/kernel_exec-tsc_pmtimer.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/x86_64/efi/kernel_exec-callwrap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/i386/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ bus/kernel_exec-pci.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/x86_64/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ disk/efi/kernel_exec-efidisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-efi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/i386/kernel_exec-tsc_pit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_kernel_exec_OBJECTS = kern/sparc64/ieee1275/kernel_exec-crt0.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/sparc64/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/sparc64/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/sparc64/ieee1275/kernel_exec-ieee1275.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ disk/ieee1275/kernel_exec-ofdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/kernel_exec-cmain.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/kernel_exec-ieee1275.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/kernel_exec-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/kernel_exec-openfw.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ term/ieee1275/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_kernel_exec_OBJECTS = kern/powerpc/ieee1275/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/powerpc/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/powerpc/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/powerpc/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ disk/ieee1275/kernel_exec-ofdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/kernel_exec-cmain.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/kernel_exec-ieee1275.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/kernel_exec-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/kernel_exec-openfw.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ term/ieee1275/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_kernel_exec_OBJECTS = kern/mips/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/mips/qemu_mips/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ term/kernel_exec-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ term/kernel_exec-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ term/kernel_exec-at_keyboard.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ commands/kernel_exec-boot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ commands/kernel_exec-keylayouts.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ term/i386/pc/kernel_exec-vga_text.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-vga_init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/generic/kernel_exec-rtc_get_time_ms.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/mips/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/mips/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/mips/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_kernel_exec_OBJECTS = kern/mips/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ term/kernel_exec-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ bus/kernel_exec-bonito.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ bus/kernel_exec-cs5536.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ bus/kernel_exec-pci.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/mips/loongson/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ term/kernel_exec-at_keyboard.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ commands/kernel_exec-boot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ term/kernel_exec-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/kernel_exec-sm712.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/kernel_exec-sis315pro.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/kernel_exec-radeon_fuloong2e.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/kernel_exec-radeon_yeeloong3a.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ commands/kernel_exec-keylayouts.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ term/kernel_exec-gfxterm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ font/kernel_exec-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ font/kernel_exec-font_cmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ io/kernel_exec-bufio.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/fb/kernel_exec-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/fb/kernel_exec-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/fb/kernel_exec-fbutil.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/fb/kernel_exec-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ video/kernel_exec-video.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/generic/kernel_exec-rtc_get_time_ms.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/mips/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/mips/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/mips/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_kernel_exec_OBJECTS = kern/mips/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/mips/arc/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ term/arc/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ disk/arc/kernel_exec-arcdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/generic/kernel_exec-rtc_get_time_ms.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/mips/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/mips/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/mips/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_kernel_exec_OBJECTS = kern/ia64/efi/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/ia64/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/ia64/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/ia64/kernel_exec-dl_helper.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/ia64/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ lib/kernel_exec-division.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ disk/efi/kernel_exec-efidisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-efi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_kernel_exec_OBJECTS = kern/i386/xen/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/i386/xen/kernel_exec-hypercall.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/i386/xen/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/xen/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ term/xen/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ disk/xen/kernel_exec-xendisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ commands/kernel_exec-boot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_kernel_exec_OBJECTS = kern/i386/qemu/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/i386/qemu/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ bus/kernel_exec-pci.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-vga_init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/i386/qemu/kernel_exec-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ term/i386/pc/kernel_exec-vga_text.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/i386/kernel_exec-tsc_pit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_kernel_exec_OBJECTS = kern/i386/pc/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/pc/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/pc/kernel_exec-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ term/i386/pc/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/i386/kernel_exec-tsc_pit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_kernel_exec_OBJECTS = kern/i386/coreboot/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/coreboot/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/pc/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/kernel_exec-multiboot_mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ term/i386/pc/kernel_exec-vga_text.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/i386/kernel_exec-tsc_pit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_kernel_exec_OBJECTS = kern/i386/ieee1275/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ disk/ieee1275/kernel_exec-ofdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/ieee1275/kernel_exec-cmain.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/ieee1275/kernel_exec-ieee1275.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/ieee1275/kernel_exec-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/ieee1275/kernel_exec-openfw.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ term/ieee1275/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/ieee1275/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/i386/kernel_exec-tsc_pit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_kernel_exec_OBJECTS = kern/i386/efi/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/efi/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/kernel_exec-tsc_pmtimer.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ bus/kernel_exec-pci.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ disk/efi/kernel_exec-efidisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-efi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/i386/kernel_exec-tsc_pit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@am_kernel_exec_OBJECTS = kern/i386/coreboot/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/coreboot/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ video/i386/coreboot/kernel_exec-cbfb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/pc/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/kernel_exec-tsc_pmtimer.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/coreboot/kernel_exec-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/coreboot/kernel_exec-cbtable.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ term/kernel_exec-gfxterm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ font/kernel_exec-font.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ font/kernel_exec-font_cmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ io/kernel_exec-bufio.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ video/fb/kernel_exec-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ video/fb/kernel_exec-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ video/fb/kernel_exec-fbutil.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ video/fb/kernel_exec-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ video/kernel_exec-video.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ term/i386/pc/kernel_exec-vga_text.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/kernel_exec-tsc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/i386/kernel_exec-tsc_pit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_kernel_exec_OBJECTS = disk/kernel_exec-host.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-cache_s.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-hostdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/unix/kernel_exec-hostdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-exec.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/devmapper/kernel_exec-hostdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-hostdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-hostfs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-argp_common.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/emu/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-emuconsole.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-sleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-emunet.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ osdep/kernel_exec-cputime.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_kernel_exec_OBJECTS = kern/arm/uboot/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ disk/uboot/kernel_exec-ubootdisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/uboot/kernel_exec-uboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/uboot/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/uboot/kernel_exec-hw.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ term/uboot/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/kernel_exec-dl_helper.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/kernel_exec-cache_armv6.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/kernel_exec-cache_armv7.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/arm/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ lib/kernel_exec-division.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ term/kernel_exec-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ term/kernel_exec-tparm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ commands/kernel_exec-extcmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ lib/kernel_exec-arg.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_kernel_exec_OBJECTS = kern/arm/efi/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/efi/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-fdt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/kernel_exec-dl_helper.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/kernel_exec-cache_armv6.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/kernel_exec-cache_armv7.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/arm/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ lib/kernel_exec-division.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ disk/efi/kernel_exec-efidisk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-efi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_TRUE@am_kernel_exec_OBJECTS = kern/arm64/efi/kernel_exec-startup.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/arm64/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/efi/kernel_exec-fdt.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/arm64/kernel_exec-cache.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/arm64/kernel_exec-cache_flush.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/arm64/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/arm64/kernel_exec-dl_helper.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ disk/efi/kernel_exec-efidisk.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/efi/kernel_exec-efi.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/efi/kernel_exec-init.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/efi/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ term/efi/kernel_exec-console.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/efi/kernel_exec-acpi.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-compiler-rt.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-mm.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-time.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/generic/kernel_exec-millisleep.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-command.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-corecmd.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-device.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-disk.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-dl.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-env.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-err.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-file.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-fs.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-list.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-main.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-misc.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-parser.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-partition.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-rescue_parser.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-rescue_reader.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ kern/kernel_exec-term.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@nodist_kernel_exec_OBJECTS = kernel_exec-symlist.$(OBJEXT) +@COND_arm64_efi_TRUE@nodist_kernel_exec_OBJECTS = \ +@COND_arm64_efi_TRUE@ kernel_exec-symlist.$(OBJEXT) +kernel_exec_OBJECTS = $(am_kernel_exec_OBJECTS) \ + $(nodist_kernel_exec_OBJECTS) +kernel_exec_LINK = $(CCLD) $(kernel_exec_CFLAGS) $(CFLAGS) \ + $(kernel_exec_LDFLAGS) $(LDFLAGS) -o $@ +am__keylayouts_module_SOURCES_DIST = commands/keylayouts.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_keylayouts_module_OBJECTS = commands/keylayouts_module-keylayouts.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_keylayouts_module_OBJECTS = commands/keylayouts_module-keylayouts.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_keylayouts_module_OBJECTS = commands/keylayouts_module-keylayouts.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_keylayouts_module_OBJECTS = commands/keylayouts_module-keylayouts.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_keylayouts_module_OBJECTS = commands/keylayouts_module-keylayouts.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_keylayouts_module_OBJECTS = commands/keylayouts_module-keylayouts.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_keylayouts_module_OBJECTS = commands/keylayouts_module-keylayouts.$(OBJEXT) +nodist_keylayouts_module_OBJECTS = +keylayouts_module_OBJECTS = $(am_keylayouts_module_OBJECTS) \ + $(nodist_keylayouts_module_OBJECTS) +keylayouts_module_LINK = $(CCLD) $(keylayouts_module_CFLAGS) $(CFLAGS) \ + $(keylayouts_module_LDFLAGS) $(LDFLAGS) -o $@ +am_keystatus_module_OBJECTS = \ + commands/keystatus_module-keystatus.$(OBJEXT) +nodist_keystatus_module_OBJECTS = +keystatus_module_OBJECTS = $(am_keystatus_module_OBJECTS) \ + $(nodist_keystatus_module_OBJECTS) +keystatus_module_LINK = $(CCLD) $(keystatus_module_CFLAGS) $(CFLAGS) \ + $(keystatus_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ldm_module_OBJECTS = disk/ldm_module-ldm.$(OBJEXT) +nodist_ldm_module_OBJECTS = +ldm_module_OBJECTS = $(am_ldm_module_OBJECTS) \ + $(nodist_ldm_module_OBJECTS) +ldm_module_LINK = $(CCLD) $(ldm_module_CFLAGS) $(CFLAGS) \ + $(ldm_module_LDFLAGS) $(LDFLAGS) -o $@ +am__legacy_password_test_module_SOURCES_DIST = \ + tests/legacy_password_test.c +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_legacy_password_test_module_OBJECTS = tests/legacy_password_test_module-legacy_password_test.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_TRUE@am_legacy_password_test_module_OBJECTS = tests/legacy_password_test_module-legacy_password_test.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_TRUE@am_legacy_password_test_module_OBJECTS = tests/legacy_password_test_module-legacy_password_test.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_TRUE@am_legacy_password_test_module_OBJECTS = tests/legacy_password_test_module-legacy_password_test.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_TRUE@am_legacy_password_test_module_OBJECTS = tests/legacy_password_test_module-legacy_password_test.$(OBJEXT) +@COND_emu_TRUE@am_legacy_password_test_module_OBJECTS = tests/legacy_password_test_module-legacy_password_test.$(OBJEXT) +nodist_legacy_password_test_module_OBJECTS = +legacy_password_test_module_OBJECTS = \ + $(am_legacy_password_test_module_OBJECTS) \ + $(nodist_legacy_password_test_module_OBJECTS) +legacy_password_test_module_LINK = $(CCLD) \ + $(legacy_password_test_module_CFLAGS) $(CFLAGS) \ + $(legacy_password_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__legacycfg_module_SOURCES_DIST = lib/i386/pc/vesa_modes_table.c \ + commands/legacycfg.c lib/legacy_parse.c +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_legacycfg_module_OBJECTS = lib/i386/pc/legacycfg_module-vesa_modes_table.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ commands/legacycfg_module-legacycfg.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/legacycfg_module-legacy_parse.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_TRUE@am_legacycfg_module_OBJECTS = lib/i386/pc/legacycfg_module-vesa_modes_table.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_TRUE@ commands/legacycfg_module-legacycfg.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_FALSE@@COND_x86_64_efi_TRUE@ lib/legacycfg_module-legacy_parse.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_TRUE@am_legacycfg_module_OBJECTS = lib/i386/pc/legacycfg_module-vesa_modes_table.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_TRUE@ commands/legacycfg_module-legacycfg.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_FALSE@@COND_i386_xen_TRUE@ lib/legacycfg_module-legacy_parse.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_TRUE@am_legacycfg_module_OBJECTS = commands/legacycfg_module-legacycfg.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_pc_TRUE@ lib/legacycfg_module-legacy_parse.$(OBJEXT) +@COND_emu_FALSE@@COND_i386_efi_TRUE@am_legacycfg_module_OBJECTS = lib/i386/pc/legacycfg_module-vesa_modes_table.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_TRUE@ commands/legacycfg_module-legacycfg.$(OBJEXT) \ +@COND_emu_FALSE@@COND_i386_efi_TRUE@ lib/legacycfg_module-legacy_parse.$(OBJEXT) +@COND_emu_TRUE@am_legacycfg_module_OBJECTS = lib/i386/pc/legacycfg_module-vesa_modes_table.$(OBJEXT) \ +@COND_emu_TRUE@ commands/legacycfg_module-legacycfg.$(OBJEXT) \ +@COND_emu_TRUE@ lib/legacycfg_module-legacy_parse.$(OBJEXT) +nodist_legacycfg_module_OBJECTS = +legacycfg_module_OBJECTS = $(am_legacycfg_module_OBJECTS) \ + $(nodist_legacycfg_module_OBJECTS) +legacycfg_module_LINK = $(CCLD) $(legacycfg_module_CFLAGS) $(CFLAGS) \ + $(legacycfg_module_LDFLAGS) $(LDFLAGS) -o $@ +am__linux_module_SOURCES_DIST = loader/arm64/linux.c loader/linux.c \ + lib/cmdline.c loader/arm/linux.c loader/i386/linux.c \ + lib/i386/pc/vesa_modes_table.c loader/i386/xen.c \ + loader/ia64/efi/linux.c loader/mips/linux.c \ + loader/powerpc/ieee1275/linux.c \ + loader/sparc64/ieee1275/linux.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-xen.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_linux_module_OBJECTS = loader/sparc64/ieee1275/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_linux_module_OBJECTS = loader/powerpc/ieee1275/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_linux_module_OBJECTS = loader/mips/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_linux_module_OBJECTS = loader/mips/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_linux_module_OBJECTS = loader/mips/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_linux_module_OBJECTS = loader/ia64/efi/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-xen.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_linux_module_OBJECTS = lib/i386/pc/linux_module-vesa_modes_table.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/i386/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_TRUE@am_linux_module_OBJECTS = loader/i386/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_i386_coreboot_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_linux_module_OBJECTS = loader/arm/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_linux_module_OBJECTS = loader/arm/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +@COND_arm64_efi_TRUE@am_linux_module_OBJECTS = loader/arm64/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ loader/linux_module-linux.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ lib/linux_module-cmdline.$(OBJEXT) +nodist_linux_module_OBJECTS = +linux_module_OBJECTS = $(am_linux_module_OBJECTS) \ + $(nodist_linux_module_OBJECTS) +linux_module_LINK = $(CCLD) $(linux_module_CFLAGS) $(CFLAGS) \ + $(linux_module_LDFLAGS) $(LDFLAGS) -o $@ +am__linux16_module_SOURCES_DIST = loader/i386/pc/linux.c \ + loader/linux.c lib/cmdline.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_linux16_module_OBJECTS = loader/i386/pc/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@ loader/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@ lib/linux16_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_linux16_module_OBJECTS = loader/i386/pc/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ loader/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/linux16_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_linux16_module_OBJECTS = loader/i386/pc/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/linux16_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_linux16_module_OBJECTS = loader/i386/pc/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ loader/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/linux16_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_linux16_module_OBJECTS = loader/i386/pc/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ loader/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/linux16_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_linux16_module_OBJECTS = loader/i386/pc/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/linux16_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_linux16_module_OBJECTS = loader/i386/pc/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ loader/linux16_module-linux.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/linux16_module-cmdline.$(OBJEXT) +nodist_linux16_module_OBJECTS = +linux16_module_OBJECTS = $(am_linux16_module_OBJECTS) \ + $(nodist_linux16_module_OBJECTS) +linux16_module_LINK = $(CCLD) $(linux16_module_CFLAGS) $(CFLAGS) \ + $(linux16_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lnxboot_image_SOURCES_DIST = boot/i386/pc/lnxboot.S +@COND_i386_pc_TRUE@am_lnxboot_image_OBJECTS = boot/i386/pc/lnxboot_image-lnxboot.$(OBJEXT) +nodist_lnxboot_image_OBJECTS = +lnxboot_image_OBJECTS = $(am_lnxboot_image_OBJECTS) \ + $(nodist_lnxboot_image_OBJECTS) +lnxboot_image_DEPENDENCIES = +lnxboot_image_LINK = $(CCLD) $(lnxboot_image_CFLAGS) $(CFLAGS) \ + $(lnxboot_image_LDFLAGS) $(LDFLAGS) -o $@ +am__loadbios_module_SOURCES_DIST = commands/efi/loadbios.c +@COND_i386_efi_FALSE@@COND_x86_64_efi_TRUE@am_loadbios_module_OBJECTS = commands/efi/loadbios_module-loadbios.$(OBJEXT) +@COND_i386_efi_TRUE@am_loadbios_module_OBJECTS = commands/efi/loadbios_module-loadbios.$(OBJEXT) +nodist_loadbios_module_OBJECTS = +loadbios_module_OBJECTS = $(am_loadbios_module_OBJECTS) \ + $(nodist_loadbios_module_OBJECTS) +loadbios_module_LINK = $(CCLD) $(loadbios_module_CFLAGS) $(CFLAGS) \ + $(loadbios_module_LDFLAGS) $(LDFLAGS) -o $@ +am_loadenv_module_OBJECTS = commands/loadenv_module-loadenv.$(OBJEXT) \ + lib/loadenv_module-envblk.$(OBJEXT) +nodist_loadenv_module_OBJECTS = +loadenv_module_OBJECTS = $(am_loadenv_module_OBJECTS) \ + $(nodist_loadenv_module_OBJECTS) +loadenv_module_LINK = $(CCLD) $(loadenv_module_CFLAGS) $(CFLAGS) \ + $(loadenv_module_LDFLAGS) $(LDFLAGS) -o $@ +am_loopback_module_OBJECTS = disk/loopback_module-loopback.$(OBJEXT) +nodist_loopback_module_OBJECTS = +loopback_module_OBJECTS = $(am_loopback_module_OBJECTS) \ + $(nodist_loopback_module_OBJECTS) +loopback_module_LINK = $(CCLD) $(loopback_module_CFLAGS) $(CFLAGS) \ + $(loopback_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ls_module_OBJECTS = commands/ls_module-ls.$(OBJEXT) +nodist_ls_module_OBJECTS = +ls_module_OBJECTS = $(am_ls_module_OBJECTS) \ + $(nodist_ls_module_OBJECTS) +ls_module_LINK = $(CCLD) $(ls_module_CFLAGS) $(CFLAGS) \ + $(ls_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsacpi_module_SOURCES_DIST = commands/lsacpi.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_lsacpi_module_OBJECTS = commands/lsacpi_module-lsacpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_ia64_efi_TRUE@am_lsacpi_module_OBJECTS = commands/lsacpi_module-lsacpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_lsacpi_module_OBJECTS = commands/lsacpi_module-lsacpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@am_lsacpi_module_OBJECTS = commands/lsacpi_module-lsacpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_lsacpi_module_OBJECTS = commands/lsacpi_module-lsacpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@am_lsacpi_module_OBJECTS = commands/lsacpi_module-lsacpi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_lsacpi_module_OBJECTS = commands/lsacpi_module-lsacpi.$(OBJEXT) +@COND_arm64_efi_TRUE@am_lsacpi_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ commands/lsacpi_module-lsacpi.$(OBJEXT) +nodist_lsacpi_module_OBJECTS = +lsacpi_module_OBJECTS = $(am_lsacpi_module_OBJECTS) \ + $(nodist_lsacpi_module_OBJECTS) +lsacpi_module_LINK = $(CCLD) $(lsacpi_module_CFLAGS) $(CFLAGS) \ + $(lsacpi_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsapm_module_SOURCES_DIST = commands/i386/pc/lsapm.c +@COND_i386_pc_TRUE@am_lsapm_module_OBJECTS = commands/i386/pc/lsapm_module-lsapm.$(OBJEXT) +nodist_lsapm_module_OBJECTS = +lsapm_module_OBJECTS = $(am_lsapm_module_OBJECTS) \ + $(nodist_lsapm_module_OBJECTS) +lsapm_module_LINK = $(CCLD) $(lsapm_module_CFLAGS) $(CFLAGS) \ + $(lsapm_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsdev_module_SOURCES_DIST = commands/arc/lsdev.c +@COND_mips_arc_TRUE@am_lsdev_module_OBJECTS = \ +@COND_mips_arc_TRUE@ commands/arc/lsdev_module-lsdev.$(OBJEXT) +nodist_lsdev_module_OBJECTS = +lsdev_module_OBJECTS = $(am_lsdev_module_OBJECTS) \ + $(nodist_lsdev_module_OBJECTS) +lsdev_module_LINK = $(CCLD) $(lsdev_module_CFLAGS) $(CFLAGS) \ + $(lsdev_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsefi_module_SOURCES_DIST = commands/efi/lsefi.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_lsefi_module_OBJECTS = commands/efi/lsefi_module-lsefi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_TRUE@am_lsefi_module_OBJECTS = commands/efi/lsefi_module-lsefi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_TRUE@am_lsefi_module_OBJECTS = commands/efi/lsefi_module-lsefi.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_lsefi_module_OBJECTS = commands/efi/lsefi_module-lsefi.$(OBJEXT) +@COND_arm64_efi_TRUE@am_lsefi_module_OBJECTS = commands/efi/lsefi_module-lsefi.$(OBJEXT) +nodist_lsefi_module_OBJECTS = +lsefi_module_OBJECTS = $(am_lsefi_module_OBJECTS) \ + $(nodist_lsefi_module_OBJECTS) +lsefi_module_LINK = $(CCLD) $(lsefi_module_CFLAGS) $(CFLAGS) \ + $(lsefi_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsefimmap_module_SOURCES_DIST = commands/efi/lsefimmap.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_lsefimmap_module_OBJECTS = commands/efi/lsefimmap_module-lsefimmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_TRUE@am_lsefimmap_module_OBJECTS = commands/efi/lsefimmap_module-lsefimmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_TRUE@am_lsefimmap_module_OBJECTS = commands/efi/lsefimmap_module-lsefimmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_lsefimmap_module_OBJECTS = commands/efi/lsefimmap_module-lsefimmap.$(OBJEXT) +@COND_arm64_efi_TRUE@am_lsefimmap_module_OBJECTS = commands/efi/lsefimmap_module-lsefimmap.$(OBJEXT) +nodist_lsefimmap_module_OBJECTS = +lsefimmap_module_OBJECTS = $(am_lsefimmap_module_OBJECTS) \ + $(nodist_lsefimmap_module_OBJECTS) +lsefimmap_module_LINK = $(CCLD) $(lsefimmap_module_CFLAGS) $(CFLAGS) \ + $(lsefimmap_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsefisystab_module_SOURCES_DIST = commands/efi/lsefisystab.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_lsefisystab_module_OBJECTS = commands/efi/lsefisystab_module-lsefisystab.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_TRUE@am_lsefisystab_module_OBJECTS = commands/efi/lsefisystab_module-lsefisystab.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_TRUE@am_lsefisystab_module_OBJECTS = commands/efi/lsefisystab_module-lsefisystab.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_lsefisystab_module_OBJECTS = commands/efi/lsefisystab_module-lsefisystab.$(OBJEXT) +@COND_arm64_efi_TRUE@am_lsefisystab_module_OBJECTS = commands/efi/lsefisystab_module-lsefisystab.$(OBJEXT) +nodist_lsefisystab_module_OBJECTS = +lsefisystab_module_OBJECTS = $(am_lsefisystab_module_OBJECTS) \ + $(nodist_lsefisystab_module_OBJECTS) +lsefisystab_module_LINK = $(CCLD) $(lsefisystab_module_CFLAGS) \ + $(CFLAGS) $(lsefisystab_module_LDFLAGS) $(LDFLAGS) -o $@ +am_lsmmap_module_OBJECTS = commands/lsmmap_module-lsmmap.$(OBJEXT) +nodist_lsmmap_module_OBJECTS = +lsmmap_module_OBJECTS = $(am_lsmmap_module_OBJECTS) \ + $(nodist_lsmmap_module_OBJECTS) +lsmmap_module_LINK = $(CCLD) $(lsmmap_module_CFLAGS) $(CFLAGS) \ + $(lsmmap_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lspci_module_SOURCES_DIST = commands/lspci.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_lspci_module_OBJECTS = commands/lspci_module-lspci.$(OBJEXT) +nodist_lspci_module_OBJECTS = +lspci_module_OBJECTS = $(am_lspci_module_OBJECTS) \ + $(nodist_lspci_module_OBJECTS) +lspci_module_LINK = $(CCLD) $(lspci_module_CFLAGS) $(CFLAGS) \ + $(lspci_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lssal_module_SOURCES_DIST = commands/efi/lssal.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_lssal_module_OBJECTS = commands/efi/lssal_module-lssal.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_FALSE@@COND_ia64_efi_TRUE@am_lssal_module_OBJECTS = commands/efi/lssal_module-lssal.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_efi_TRUE@am_lssal_module_OBJECTS = commands/efi/lssal_module-lssal.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_lssal_module_OBJECTS = commands/efi/lssal_module-lssal.$(OBJEXT) +@COND_arm64_efi_TRUE@am_lssal_module_OBJECTS = commands/efi/lssal_module-lssal.$(OBJEXT) +nodist_lssal_module_OBJECTS = +lssal_module_OBJECTS = $(am_lssal_module_OBJECTS) \ + $(nodist_lssal_module_OBJECTS) +lssal_module_LINK = $(CCLD) $(lssal_module_CFLAGS) $(CFLAGS) \ + $(lssal_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsspd_module_SOURCES_DIST = commands/mips/loongson/lsspd.c +@COND_mips_loongson_TRUE@am_lsspd_module_OBJECTS = commands/mips/loongson/lsspd_module-lsspd.$(OBJEXT) +nodist_lsspd_module_OBJECTS = +lsspd_module_OBJECTS = $(am_lsspd_module_OBJECTS) \ + $(nodist_lsspd_module_OBJECTS) +lsspd_module_LINK = $(CCLD) $(lsspd_module_CFLAGS) $(CFLAGS) \ + $(lsspd_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lsxen_module_SOURCES_DIST = commands/xen/lsxen.c +@COND_i386_xen_FALSE@@COND_x86_64_xen_TRUE@am_lsxen_module_OBJECTS = commands/xen/lsxen_module-lsxen.$(OBJEXT) +@COND_i386_xen_TRUE@am_lsxen_module_OBJECTS = \ +@COND_i386_xen_TRUE@ commands/xen/lsxen_module-lsxen.$(OBJEXT) +nodist_lsxen_module_OBJECTS = +lsxen_module_OBJECTS = $(am_lsxen_module_OBJECTS) \ + $(nodist_lsxen_module_OBJECTS) +lsxen_module_LINK = $(CCLD) $(lsxen_module_CFLAGS) $(CFLAGS) \ + $(lsxen_module_LDFLAGS) $(LDFLAGS) -o $@ +am_luks_module_OBJECTS = disk/luks_module-luks.$(OBJEXT) \ + disk/luks_module-AFSplitter.$(OBJEXT) +nodist_luks_module_OBJECTS = +luks_module_OBJECTS = $(am_luks_module_OBJECTS) \ + $(nodist_luks_module_OBJECTS) +luks_module_LINK = $(CCLD) $(luks_module_CFLAGS) $(CFLAGS) \ + $(luks_module_LDFLAGS) $(LDFLAGS) -o $@ +am_lvm_module_OBJECTS = disk/lvm_module-lvm.$(OBJEXT) +nodist_lvm_module_OBJECTS = +lvm_module_OBJECTS = $(am_lvm_module_OBJECTS) \ + $(nodist_lvm_module_OBJECTS) +lvm_module_LINK = $(CCLD) $(lvm_module_CFLAGS) $(CFLAGS) \ + $(lvm_module_LDFLAGS) $(LDFLAGS) -o $@ +am__lzma_decompress_image_SOURCES_DIST = boot/i386/pc/startup_raw.S +@COND_i386_pc_TRUE@am_lzma_decompress_image_OBJECTS = boot/i386/pc/lzma_decompress_image-startup_raw.$(OBJEXT) +nodist_lzma_decompress_image_OBJECTS = +lzma_decompress_image_OBJECTS = $(am_lzma_decompress_image_OBJECTS) \ + $(nodist_lzma_decompress_image_OBJECTS) +lzma_decompress_image_DEPENDENCIES = +lzma_decompress_image_LINK = $(CCLD) $(lzma_decompress_image_CFLAGS) \ + $(CFLAGS) $(lzma_decompress_image_LDFLAGS) $(LDFLAGS) -o $@ +am_lzopio_module_OBJECTS = io/lzopio_module-lzopio.$(OBJEXT) \ + lib/minilzo/lzopio_module-minilzo.$(OBJEXT) +nodist_lzopio_module_OBJECTS = +lzopio_module_OBJECTS = $(am_lzopio_module_OBJECTS) \ + $(nodist_lzopio_module_OBJECTS) +lzopio_module_LINK = $(CCLD) $(lzopio_module_CFLAGS) $(CFLAGS) \ + $(lzopio_module_LDFLAGS) $(LDFLAGS) -o $@ +am_macbless_module_OBJECTS = \ + commands/macbless_module-macbless.$(OBJEXT) +nodist_macbless_module_OBJECTS = +macbless_module_OBJECTS = $(am_macbless_module_OBJECTS) \ + $(nodist_macbless_module_OBJECTS) +macbless_module_LINK = $(CCLD) $(macbless_module_CFLAGS) $(CFLAGS) \ + $(macbless_module_LDFLAGS) $(LDFLAGS) -o $@ +am_macho_module_OBJECTS = loader/macho_module-macho.$(OBJEXT) \ + loader/macho_module-macho32.$(OBJEXT) \ + loader/macho_module-macho64.$(OBJEXT) \ + loader/macho_module-lzss.$(OBJEXT) +nodist_macho_module_OBJECTS = +macho_module_OBJECTS = $(am_macho_module_OBJECTS) \ + $(nodist_macho_module_OBJECTS) +macho_module_LINK = $(CCLD) $(macho_module_CFLAGS) $(CFLAGS) \ + $(macho_module_LDFLAGS) $(LDFLAGS) -o $@ +am__mda_text_module_SOURCES_DIST = term/i386/pc/mda_text.c +@COND_i386_coreboot_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_mda_text_module_OBJECTS = term/i386/pc/mda_text_module-mda_text.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_mda_text_module_OBJECTS = term/i386/pc/mda_text_module-mda_text.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_multiboot_TRUE@am_mda_text_module_OBJECTS = term/i386/pc/mda_text_module-mda_text.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_mda_text_module_OBJECTS = term/i386/pc/mda_text_module-mda_text.$(OBJEXT) +nodist_mda_text_module_OBJECTS = +mda_text_module_OBJECTS = $(am_mda_text_module_OBJECTS) \ + $(nodist_mda_text_module_OBJECTS) +mda_text_module_LINK = $(CCLD) $(mda_text_module_CFLAGS) $(CFLAGS) \ + $(mda_text_module_LDFLAGS) $(LDFLAGS) -o $@ +am_mdraid09_module_OBJECTS = \ + disk/mdraid09_module-mdraid_linux.$(OBJEXT) +nodist_mdraid09_module_OBJECTS = +mdraid09_module_OBJECTS = $(am_mdraid09_module_OBJECTS) \ + $(nodist_mdraid09_module_OBJECTS) +mdraid09_module_LINK = $(CCLD) $(mdraid09_module_CFLAGS) $(CFLAGS) \ + $(mdraid09_module_LDFLAGS) $(LDFLAGS) -o $@ +am_mdraid09_be_module_OBJECTS = \ + disk/mdraid09_be_module-mdraid_linux_be.$(OBJEXT) +nodist_mdraid09_be_module_OBJECTS = +mdraid09_be_module_OBJECTS = $(am_mdraid09_be_module_OBJECTS) \ + $(nodist_mdraid09_be_module_OBJECTS) +mdraid09_be_module_LINK = $(CCLD) $(mdraid09_be_module_CFLAGS) \ + $(CFLAGS) $(mdraid09_be_module_LDFLAGS) $(LDFLAGS) -o $@ +am_mdraid1x_module_OBJECTS = \ + disk/mdraid1x_module-mdraid1x_linux.$(OBJEXT) +nodist_mdraid1x_module_OBJECTS = +mdraid1x_module_OBJECTS = $(am_mdraid1x_module_OBJECTS) \ + $(nodist_mdraid1x_module_OBJECTS) +mdraid1x_module_LINK = $(CCLD) $(mdraid1x_module_CFLAGS) $(CFLAGS) \ + $(mdraid1x_module_LDFLAGS) $(LDFLAGS) -o $@ +am_memdisk_module_OBJECTS = disk/memdisk_module-memdisk.$(OBJEXT) +nodist_memdisk_module_OBJECTS = +memdisk_module_OBJECTS = $(am_memdisk_module_OBJECTS) \ + $(nodist_memdisk_module_OBJECTS) +memdisk_module_LINK = $(CCLD) $(memdisk_module_CFLAGS) $(CFLAGS) \ + $(memdisk_module_LDFLAGS) $(LDFLAGS) -o $@ +am_memrw_module_OBJECTS = commands/memrw_module-memrw.$(OBJEXT) +nodist_memrw_module_OBJECTS = +memrw_module_OBJECTS = $(am_memrw_module_OBJECTS) \ + $(nodist_memrw_module_OBJECTS) +memrw_module_LINK = $(CCLD) $(memrw_module_CFLAGS) $(CFLAGS) \ + $(memrw_module_LDFLAGS) $(LDFLAGS) -o $@ +am_minicmd_module_OBJECTS = commands/minicmd_module-minicmd.$(OBJEXT) +nodist_minicmd_module_OBJECTS = +minicmd_module_OBJECTS = $(am_minicmd_module_OBJECTS) \ + $(nodist_minicmd_module_OBJECTS) +minicmd_module_LINK = $(CCLD) $(minicmd_module_CFLAGS) $(CFLAGS) \ + $(minicmd_module_LDFLAGS) $(LDFLAGS) -o $@ +am_minix_module_OBJECTS = fs/minix_module-minix.$(OBJEXT) +nodist_minix_module_OBJECTS = +minix_module_OBJECTS = $(am_minix_module_OBJECTS) \ + $(nodist_minix_module_OBJECTS) +minix_module_LINK = $(CCLD) $(minix_module_CFLAGS) $(CFLAGS) \ + $(minix_module_LDFLAGS) $(LDFLAGS) -o $@ +am_minix2_module_OBJECTS = fs/minix2_module-minix2.$(OBJEXT) +nodist_minix2_module_OBJECTS = +minix2_module_OBJECTS = $(am_minix2_module_OBJECTS) \ + $(nodist_minix2_module_OBJECTS) +minix2_module_LINK = $(CCLD) $(minix2_module_CFLAGS) $(CFLAGS) \ + $(minix2_module_LDFLAGS) $(LDFLAGS) -o $@ +am_minix2_be_module_OBJECTS = fs/minix2_be_module-minix2_be.$(OBJEXT) +nodist_minix2_be_module_OBJECTS = +minix2_be_module_OBJECTS = $(am_minix2_be_module_OBJECTS) \ + $(nodist_minix2_be_module_OBJECTS) +minix2_be_module_LINK = $(CCLD) $(minix2_be_module_CFLAGS) $(CFLAGS) \ + $(minix2_be_module_LDFLAGS) $(LDFLAGS) -o $@ +am_minix3_module_OBJECTS = fs/minix3_module-minix3.$(OBJEXT) +nodist_minix3_module_OBJECTS = +minix3_module_OBJECTS = $(am_minix3_module_OBJECTS) \ + $(nodist_minix3_module_OBJECTS) +minix3_module_LINK = $(CCLD) $(minix3_module_CFLAGS) $(CFLAGS) \ + $(minix3_module_LDFLAGS) $(LDFLAGS) -o $@ +am_minix3_be_module_OBJECTS = fs/minix3_be_module-minix3_be.$(OBJEXT) +nodist_minix3_be_module_OBJECTS = +minix3_be_module_OBJECTS = $(am_minix3_be_module_OBJECTS) \ + $(nodist_minix3_be_module_OBJECTS) +minix3_be_module_LINK = $(CCLD) $(minix3_be_module_CFLAGS) $(CFLAGS) \ + $(minix3_be_module_LDFLAGS) $(LDFLAGS) -o $@ +am_minix_be_module_OBJECTS = fs/minix_be_module-minix_be.$(OBJEXT) +nodist_minix_be_module_OBJECTS = +minix_be_module_OBJECTS = $(am_minix_be_module_OBJECTS) \ + $(nodist_minix_be_module_OBJECTS) +minix_be_module_LINK = $(CCLD) $(minix_be_module_CFLAGS) $(CFLAGS) \ + $(minix_be_module_LDFLAGS) $(LDFLAGS) -o $@ +am__mmap_module_SOURCES_DIST = mmap/efi/mmap.c mmap/mmap.c \ + mmap/i386/uppermem.c mmap/i386/mmap.c mmap/i386/pc/mmap.c \ + mmap/i386/pc/mmap_helper.S mmap/mips/uppermem.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@am_mmap_module_OBJECTS = mmap/efi/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@ mmap/i386/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@ mmap/i386/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_mmap_module_OBJECTS = mmap/mips/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_mmap_module_OBJECTS = mmap/mips/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_mmap_module_OBJECTS = mmap/mips/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@am_mmap_module_OBJECTS = mmap/efi/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_mmap_module_OBJECTS = mmap/i386/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ mmap/i386/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_mmap_module_OBJECTS = mmap/i386/pc/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ mmap/i386/pc/mmap_module-mmap_helper.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ mmap/i386/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ mmap/i386/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_mmap_module_OBJECTS = mmap/i386/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ mmap/i386/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_mmap_module_OBJECTS = mmap/i386/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ mmap/i386/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_mmap_module_OBJECTS = mmap/efi/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ mmap/i386/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ mmap/i386/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@am_mmap_module_OBJECTS = mmap/i386/mmap_module-uppermem.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@ mmap/i386/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_mmap_module_OBJECTS = mmap/efi/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +@COND_arm64_efi_TRUE@am_mmap_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ mmap/efi/mmap_module-mmap.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ mmap/mmap_module-mmap.$(OBJEXT) +nodist_mmap_module_OBJECTS = +mmap_module_OBJECTS = $(am_mmap_module_OBJECTS) \ + $(nodist_mmap_module_OBJECTS) +mmap_module_LINK = $(CCLD) $(mmap_module_CFLAGS) $(CFLAGS) \ + $(mmap_module_LDFLAGS) $(LDFLAGS) -o $@ +am__morse_module_SOURCES_DIST = term/morse.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_morse_module_OBJECTS = term/morse_module-morse.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_morse_module_OBJECTS = term/morse_module-morse.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_morse_module_OBJECTS = term/morse_module-morse.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_morse_module_OBJECTS = term/morse_module-morse.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_morse_module_OBJECTS = term/morse_module-morse.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_morse_module_OBJECTS = term/morse_module-morse.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_morse_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ term/morse_module-morse.$(OBJEXT) +nodist_morse_module_OBJECTS = +morse_module_OBJECTS = $(am_morse_module_OBJECTS) \ + $(nodist_morse_module_OBJECTS) +morse_module_LINK = $(CCLD) $(morse_module_CFLAGS) $(CFLAGS) \ + $(morse_module_LDFLAGS) $(LDFLAGS) -o $@ +am_mpi_module_OBJECTS = \ + lib/libgcrypt-grub/mpi/mpi_module-mpiutil.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-add.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-div.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-div.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpicoder.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.$(OBJEXT) \ + lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.$(OBJEXT) \ + lib/libgcrypt_wrap/mpi_module-mem.$(OBJEXT) +nodist_mpi_module_OBJECTS = +mpi_module_OBJECTS = $(am_mpi_module_OBJECTS) \ + $(nodist_mpi_module_OBJECTS) +mpi_module_LINK = $(CCLD) $(mpi_module_CFLAGS) $(CFLAGS) \ + $(mpi_module_LDFLAGS) $(LDFLAGS) -o $@ +am_msdospart_module_OBJECTS = \ + parttool/msdospart_module-msdospart.$(OBJEXT) +nodist_msdospart_module_OBJECTS = +msdospart_module_OBJECTS = $(am_msdospart_module_OBJECTS) \ + $(nodist_msdospart_module_OBJECTS) +msdospart_module_LINK = $(CCLD) $(msdospart_module_CFLAGS) $(CFLAGS) \ + $(msdospart_module_LDFLAGS) $(LDFLAGS) -o $@ +am_mul_test_module_OBJECTS = tests/mul_test_module-mul_test.$(OBJEXT) +nodist_mul_test_module_OBJECTS = +mul_test_module_OBJECTS = $(am_mul_test_module_OBJECTS) \ + $(nodist_mul_test_module_OBJECTS) +mul_test_module_LINK = $(CCLD) $(mul_test_module_CFLAGS) $(CFLAGS) \ + $(mul_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__multiboot_module_SOURCES_DIST = loader/i386/multiboot_mbi.c \ + loader/multiboot.c lib/cmdline.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_multiboot_module_OBJECTS = loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@ loader/multiboot_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@ lib/multiboot_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_multiboot_module_OBJECTS = loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ loader/multiboot_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/multiboot_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_multiboot_module_OBJECTS = loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/multiboot_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/multiboot_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_multiboot_module_OBJECTS = loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ loader/multiboot_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/multiboot_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_multiboot_module_OBJECTS = loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ loader/multiboot_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/multiboot_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_multiboot_module_OBJECTS = loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/multiboot_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/multiboot_module-cmdline.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_multiboot_module_OBJECTS = loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ loader/multiboot_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/multiboot_module-cmdline.$(OBJEXT) +nodist_multiboot_module_OBJECTS = +multiboot_module_OBJECTS = $(am_multiboot_module_OBJECTS) \ + $(nodist_multiboot_module_OBJECTS) +multiboot_module_LINK = $(CCLD) $(multiboot_module_CFLAGS) $(CFLAGS) \ + $(multiboot_module_LDFLAGS) $(LDFLAGS) -o $@ +am__multiboot2_module_SOURCES_DIST = loader/multiboot.c lib/cmdline.c \ + loader/multiboot_mbi2.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_arc_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_multiboot2_module_OBJECTS = loader/multiboot2_module-multiboot.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/multiboot2_module-cmdline.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ loader/multiboot2_module-multiboot_mbi2.$(OBJEXT) +nodist_multiboot2_module_OBJECTS = +multiboot2_module_OBJECTS = $(am_multiboot2_module_OBJECTS) \ + $(nodist_multiboot2_module_OBJECTS) +multiboot2_module_LINK = $(CCLD) $(multiboot2_module_CFLAGS) $(CFLAGS) \ + $(multiboot2_module_LDFLAGS) $(LDFLAGS) -o $@ +am__nand_module_SOURCES_DIST = disk/ieee1275/nand.c +@COND_i386_ieee1275_TRUE@am_nand_module_OBJECTS = disk/ieee1275/nand_module-nand.$(OBJEXT) +nodist_nand_module_OBJECTS = +nand_module_OBJECTS = $(am_nand_module_OBJECTS) \ + $(nodist_nand_module_OBJECTS) +nand_module_LINK = $(CCLD) $(nand_module_CFLAGS) $(CFLAGS) \ + $(nand_module_LDFLAGS) $(LDFLAGS) -o $@ +am__nativedisk_module_SOURCES_DIST = commands/nativedisk.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_nativedisk_module_OBJECTS = commands/nativedisk_module-nativedisk.$(OBJEXT) +nodist_nativedisk_module_OBJECTS = +nativedisk_module_OBJECTS = $(am_nativedisk_module_OBJECTS) \ + $(nodist_nativedisk_module_OBJECTS) +nativedisk_module_LINK = $(CCLD) $(nativedisk_module_CFLAGS) $(CFLAGS) \ + $(nativedisk_module_LDFLAGS) $(LDFLAGS) -o $@ +am_net_module_OBJECTS = net/net_module-net.$(OBJEXT) \ + net/net_module-dns.$(OBJEXT) net/net_module-bootp.$(OBJEXT) \ + net/net_module-ip.$(OBJEXT) net/net_module-udp.$(OBJEXT) \ + net/net_module-tcp.$(OBJEXT) net/net_module-icmp.$(OBJEXT) \ + net/net_module-icmp6.$(OBJEXT) \ + net/net_module-ethernet.$(OBJEXT) net/net_module-arp.$(OBJEXT) \ + net/net_module-netbuff.$(OBJEXT) +nodist_net_module_OBJECTS = +net_module_OBJECTS = $(am_net_module_OBJECTS) \ + $(nodist_net_module_OBJECTS) +net_module_LINK = $(CCLD) $(net_module_CFLAGS) $(CFLAGS) \ + $(net_module_LDFLAGS) $(LDFLAGS) -o $@ +am_newc_module_OBJECTS = fs/newc_module-newc.$(OBJEXT) +nodist_newc_module_OBJECTS = +newc_module_OBJECTS = $(am_newc_module_OBJECTS) \ + $(nodist_newc_module_OBJECTS) +newc_module_LINK = $(CCLD) $(newc_module_CFLAGS) $(CFLAGS) \ + $(newc_module_LDFLAGS) $(LDFLAGS) -o $@ +am_nilfs2_module_OBJECTS = fs/nilfs2_module-nilfs2.$(OBJEXT) +nodist_nilfs2_module_OBJECTS = +nilfs2_module_OBJECTS = $(am_nilfs2_module_OBJECTS) \ + $(nodist_nilfs2_module_OBJECTS) +nilfs2_module_LINK = $(CCLD) $(nilfs2_module_CFLAGS) $(CFLAGS) \ + $(nilfs2_module_LDFLAGS) $(LDFLAGS) -o $@ +am__none_decompress_image_SOURCES_DIST = boot/mips/startup_raw.S \ + boot/decompressor/none.c +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_none_decompress_image_OBJECTS = boot/mips/none_decompress_image-startup_raw.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ boot/decompressor/none_decompress_image-none.$(OBJEXT) +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_none_decompress_image_OBJECTS = boot/mips/none_decompress_image-startup_raw.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ boot/decompressor/none_decompress_image-none.$(OBJEXT) +@COND_mips_arc_TRUE@am_none_decompress_image_OBJECTS = boot/mips/none_decompress_image-startup_raw.$(OBJEXT) \ +@COND_mips_arc_TRUE@ boot/decompressor/none_decompress_image-none.$(OBJEXT) +nodist_none_decompress_image_OBJECTS = +none_decompress_image_OBJECTS = $(am_none_decompress_image_OBJECTS) \ + $(nodist_none_decompress_image_OBJECTS) +none_decompress_image_DEPENDENCIES = +none_decompress_image_LINK = $(CCLD) $(none_decompress_image_CFLAGS) \ + $(CFLAGS) $(none_decompress_image_LDFLAGS) $(LDFLAGS) -o $@ +am_normal_module_OBJECTS = normal/normal_module-main.$(OBJEXT) \ + normal/normal_module-cmdline.$(OBJEXT) \ + normal/normal_module-dyncmd.$(OBJEXT) \ + normal/normal_module-auth.$(OBJEXT) \ + normal/normal_module-autofs.$(OBJEXT) \ + normal/normal_module-color.$(OBJEXT) \ + normal/normal_module-completion.$(OBJEXT) \ + normal/normal_module-datetime.$(OBJEXT) \ + normal/normal_module-menu.$(OBJEXT) \ + normal/normal_module-menu_entry.$(OBJEXT) \ + normal/normal_module-menu_text.$(OBJEXT) \ + normal/normal_module-misc.$(OBJEXT) \ + normal/normal_module-crypto.$(OBJEXT) \ + normal/normal_module-term.$(OBJEXT) \ + normal/normal_module-context.$(OBJEXT) \ + normal/normal_module-charset.$(OBJEXT) \ + lib/normal_module-getline.$(OBJEXT) \ + script/normal_module-main.$(OBJEXT) \ + script/normal_module-script.$(OBJEXT) \ + script/normal_module-execute.$(OBJEXT) \ + script/normal_module-function.$(OBJEXT) \ + script/normal_module-lexer.$(OBJEXT) \ + script/normal_module-argv.$(OBJEXT) \ + commands/normal_module-menuentry.$(OBJEXT) \ + normal_module-unidata.$(OBJEXT) +nodist_normal_module_OBJECTS = \ + normal_module-grub_script.tab.$(OBJEXT) \ + normal_module-grub_script.yy.$(OBJEXT) +normal_module_OBJECTS = $(am_normal_module_OBJECTS) \ + $(nodist_normal_module_OBJECTS) +normal_module_LINK = $(CCLD) $(normal_module_CFLAGS) $(CFLAGS) \ + $(normal_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ntfs_module_OBJECTS = fs/ntfs_module-ntfs.$(OBJEXT) +nodist_ntfs_module_OBJECTS = +ntfs_module_OBJECTS = $(am_ntfs_module_OBJECTS) \ + $(nodist_ntfs_module_OBJECTS) +ntfs_module_LINK = $(CCLD) $(ntfs_module_CFLAGS) $(CFLAGS) \ + $(ntfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ntfscomp_module_OBJECTS = fs/ntfscomp_module-ntfscomp.$(OBJEXT) +nodist_ntfscomp_module_OBJECTS = +ntfscomp_module_OBJECTS = $(am_ntfscomp_module_OBJECTS) \ + $(nodist_ntfscomp_module_OBJECTS) +ntfscomp_module_LINK = $(CCLD) $(ntfscomp_module_CFLAGS) $(CFLAGS) \ + $(ntfscomp_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ntldr_module_SOURCES_DIST = loader/i386/pc/ntldr.c +@COND_i386_pc_TRUE@am_ntldr_module_OBJECTS = loader/i386/pc/ntldr_module-ntldr.$(OBJEXT) +nodist_ntldr_module_OBJECTS = +ntldr_module_OBJECTS = $(am_ntldr_module_OBJECTS) \ + $(nodist_ntldr_module_OBJECTS) +ntldr_module_LINK = $(CCLD) $(ntldr_module_CFLAGS) $(CFLAGS) \ + $(ntldr_module_LDFLAGS) $(LDFLAGS) -o $@ +am_odc_module_OBJECTS = fs/odc_module-odc.$(OBJEXT) +nodist_odc_module_OBJECTS = +odc_module_OBJECTS = $(am_odc_module_OBJECTS) \ + $(nodist_odc_module_OBJECTS) +odc_module_LINK = $(CCLD) $(odc_module_CFLAGS) $(CFLAGS) \ + $(odc_module_LDFLAGS) $(LDFLAGS) -o $@ +am_offsetio_module_OBJECTS = io/offsetio_module-offset.$(OBJEXT) +nodist_offsetio_module_OBJECTS = +offsetio_module_OBJECTS = $(am_offsetio_module_OBJECTS) \ + $(nodist_offsetio_module_OBJECTS) +offsetio_module_LINK = $(CCLD) $(offsetio_module_CFLAGS) $(CFLAGS) \ + $(offsetio_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ofnet_module_SOURCES_DIST = net/drivers/ieee1275/ofnet.c +@COND_i386_ieee1275_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_ofnet_module_OBJECTS = net/drivers/ieee1275/ofnet_module-ofnet.$(OBJEXT) +@COND_i386_ieee1275_FALSE@@COND_powerpc_ieee1275_TRUE@am_ofnet_module_OBJECTS = net/drivers/ieee1275/ofnet_module-ofnet.$(OBJEXT) +@COND_i386_ieee1275_TRUE@am_ofnet_module_OBJECTS = net/drivers/ieee1275/ofnet_module-ofnet.$(OBJEXT) +nodist_ofnet_module_OBJECTS = +ofnet_module_OBJECTS = $(am_ofnet_module_OBJECTS) \ + $(nodist_ofnet_module_OBJECTS) +ofnet_module_LINK = $(CCLD) $(ofnet_module_CFLAGS) $(CFLAGS) \ + $(ofnet_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ohci_module_SOURCES_DIST = bus/usb/ohci.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_ohci_module_OBJECTS = bus/usb/ohci_module-ohci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_ohci_module_OBJECTS = bus/usb/ohci_module-ohci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_ohci_module_OBJECTS = bus/usb/ohci_module-ohci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_ohci_module_OBJECTS = bus/usb/ohci_module-ohci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_ohci_module_OBJECTS = bus/usb/ohci_module-ohci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_ohci_module_OBJECTS = bus/usb/ohci_module-ohci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_ohci_module_OBJECTS = bus/usb/ohci_module-ohci.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_ohci_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ bus/usb/ohci_module-ohci.$(OBJEXT) +nodist_ohci_module_OBJECTS = +ohci_module_OBJECTS = $(am_ohci_module_OBJECTS) \ + $(nodist_ohci_module_OBJECTS) +ohci_module_LINK = $(CCLD) $(ohci_module_CFLAGS) $(CFLAGS) \ + $(ohci_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_acorn_module_OBJECTS = \ + partmap/part_acorn_module-acorn.$(OBJEXT) +nodist_part_acorn_module_OBJECTS = +part_acorn_module_OBJECTS = $(am_part_acorn_module_OBJECTS) \ + $(nodist_part_acorn_module_OBJECTS) +part_acorn_module_LINK = $(CCLD) $(part_acorn_module_CFLAGS) $(CFLAGS) \ + $(part_acorn_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_amiga_module_OBJECTS = \ + partmap/part_amiga_module-amiga.$(OBJEXT) +nodist_part_amiga_module_OBJECTS = +part_amiga_module_OBJECTS = $(am_part_amiga_module_OBJECTS) \ + $(nodist_part_amiga_module_OBJECTS) +part_amiga_module_LINK = $(CCLD) $(part_amiga_module_CFLAGS) $(CFLAGS) \ + $(part_amiga_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_apple_module_OBJECTS = \ + partmap/part_apple_module-apple.$(OBJEXT) +nodist_part_apple_module_OBJECTS = +part_apple_module_OBJECTS = $(am_part_apple_module_OBJECTS) \ + $(nodist_part_apple_module_OBJECTS) +part_apple_module_LINK = $(CCLD) $(part_apple_module_CFLAGS) $(CFLAGS) \ + $(part_apple_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_bsd_module_OBJECTS = \ + partmap/part_bsd_module-bsdlabel.$(OBJEXT) +nodist_part_bsd_module_OBJECTS = +part_bsd_module_OBJECTS = $(am_part_bsd_module_OBJECTS) \ + $(nodist_part_bsd_module_OBJECTS) +part_bsd_module_LINK = $(CCLD) $(part_bsd_module_CFLAGS) $(CFLAGS) \ + $(part_bsd_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_dfly_module_OBJECTS = partmap/part_dfly_module-dfly.$(OBJEXT) +nodist_part_dfly_module_OBJECTS = +part_dfly_module_OBJECTS = $(am_part_dfly_module_OBJECTS) \ + $(nodist_part_dfly_module_OBJECTS) +part_dfly_module_LINK = $(CCLD) $(part_dfly_module_CFLAGS) $(CFLAGS) \ + $(part_dfly_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_dvh_module_OBJECTS = partmap/part_dvh_module-dvh.$(OBJEXT) +nodist_part_dvh_module_OBJECTS = +part_dvh_module_OBJECTS = $(am_part_dvh_module_OBJECTS) \ + $(nodist_part_dvh_module_OBJECTS) +part_dvh_module_LINK = $(CCLD) $(part_dvh_module_CFLAGS) $(CFLAGS) \ + $(part_dvh_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_gpt_module_OBJECTS = partmap/part_gpt_module-gpt.$(OBJEXT) +nodist_part_gpt_module_OBJECTS = +part_gpt_module_OBJECTS = $(am_part_gpt_module_OBJECTS) \ + $(nodist_part_gpt_module_OBJECTS) +part_gpt_module_LINK = $(CCLD) $(part_gpt_module_CFLAGS) $(CFLAGS) \ + $(part_gpt_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_msdos_module_OBJECTS = \ + partmap/part_msdos_module-msdos.$(OBJEXT) +nodist_part_msdos_module_OBJECTS = +part_msdos_module_OBJECTS = $(am_part_msdos_module_OBJECTS) \ + $(nodist_part_msdos_module_OBJECTS) +part_msdos_module_LINK = $(CCLD) $(part_msdos_module_CFLAGS) $(CFLAGS) \ + $(part_msdos_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_plan_module_OBJECTS = partmap/part_plan_module-plan.$(OBJEXT) +nodist_part_plan_module_OBJECTS = +part_plan_module_OBJECTS = $(am_part_plan_module_OBJECTS) \ + $(nodist_part_plan_module_OBJECTS) +part_plan_module_LINK = $(CCLD) $(part_plan_module_CFLAGS) $(CFLAGS) \ + $(part_plan_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_sun_module_OBJECTS = partmap/part_sun_module-sun.$(OBJEXT) +nodist_part_sun_module_OBJECTS = +part_sun_module_OBJECTS = $(am_part_sun_module_OBJECTS) \ + $(nodist_part_sun_module_OBJECTS) +part_sun_module_LINK = $(CCLD) $(part_sun_module_CFLAGS) $(CFLAGS) \ + $(part_sun_module_LDFLAGS) $(LDFLAGS) -o $@ +am_part_sunpc_module_OBJECTS = \ + partmap/part_sunpc_module-sunpc.$(OBJEXT) +nodist_part_sunpc_module_OBJECTS = +part_sunpc_module_OBJECTS = $(am_part_sunpc_module_OBJECTS) \ + $(nodist_part_sunpc_module_OBJECTS) +part_sunpc_module_LINK = $(CCLD) $(part_sunpc_module_CFLAGS) $(CFLAGS) \ + $(part_sunpc_module_LDFLAGS) $(LDFLAGS) -o $@ +am_parttool_module_OBJECTS = \ + commands/parttool_module-parttool.$(OBJEXT) +nodist_parttool_module_OBJECTS = +parttool_module_OBJECTS = $(am_parttool_module_OBJECTS) \ + $(nodist_parttool_module_OBJECTS) +parttool_module_LINK = $(CCLD) $(parttool_module_CFLAGS) $(CFLAGS) \ + $(parttool_module_LDFLAGS) $(LDFLAGS) -o $@ +am_password_module_OBJECTS = \ + commands/password_module-password.$(OBJEXT) +nodist_password_module_OBJECTS = +password_module_OBJECTS = $(am_password_module_OBJECTS) \ + $(nodist_password_module_OBJECTS) +password_module_LINK = $(CCLD) $(password_module_CFLAGS) $(CFLAGS) \ + $(password_module_LDFLAGS) $(LDFLAGS) -o $@ +am_password_pbkdf2_module_OBJECTS = \ + commands/password_pbkdf2_module-password_pbkdf2.$(OBJEXT) +nodist_password_pbkdf2_module_OBJECTS = +password_pbkdf2_module_OBJECTS = $(am_password_pbkdf2_module_OBJECTS) \ + $(nodist_password_pbkdf2_module_OBJECTS) +password_pbkdf2_module_LINK = $(CCLD) $(password_pbkdf2_module_CFLAGS) \ + $(CFLAGS) $(password_pbkdf2_module_LDFLAGS) $(LDFLAGS) -o $@ +am__pata_module_SOURCES_DIST = disk/pata.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_x86_64_efi_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_pata_module_OBJECTS = disk/pata_module-pata.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_pata_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ disk/pata_module-pata.$(OBJEXT) +nodist_pata_module_OBJECTS = +pata_module_OBJECTS = $(am_pata_module_OBJECTS) \ + $(nodist_pata_module_OBJECTS) +pata_module_LINK = $(CCLD) $(pata_module_CFLAGS) $(CFLAGS) \ + $(pata_module_LDFLAGS) $(LDFLAGS) -o $@ +am_pbkdf2_module_OBJECTS = lib/pbkdf2_module-pbkdf2.$(OBJEXT) +nodist_pbkdf2_module_OBJECTS = +pbkdf2_module_OBJECTS = $(am_pbkdf2_module_OBJECTS) \ + $(nodist_pbkdf2_module_OBJECTS) +pbkdf2_module_LINK = $(CCLD) $(pbkdf2_module_CFLAGS) $(CFLAGS) \ + $(pbkdf2_module_LDFLAGS) $(LDFLAGS) -o $@ +am_pbkdf2_test_module_OBJECTS = \ + tests/pbkdf2_test_module-pbkdf2_test.$(OBJEXT) +nodist_pbkdf2_test_module_OBJECTS = +pbkdf2_test_module_OBJECTS = $(am_pbkdf2_test_module_OBJECTS) \ + $(nodist_pbkdf2_test_module_OBJECTS) +pbkdf2_test_module_LINK = $(CCLD) $(pbkdf2_test_module_CFLAGS) \ + $(CFLAGS) $(pbkdf2_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__pci_module_SOURCES_DIST = bus/pci.c bus/i386/ieee1275/pci.c +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_pci_module_OBJECTS = bus/pci_module-pci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_pci_module_OBJECTS = bus/pci_module-pci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@am_pci_module_OBJECTS = bus/i386/ieee1275/pci_module-pci.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_ieee1275_TRUE@ bus/pci_module-pci.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_pci_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ bus/pci_module-pci.$(OBJEXT) +nodist_pci_module_OBJECTS = +pci_module_OBJECTS = $(am_pci_module_OBJECTS) \ + $(nodist_pci_module_OBJECTS) +pci_module_LINK = $(CCLD) $(pci_module_CFLAGS) $(CFLAGS) \ + $(pci_module_LDFLAGS) $(LDFLAGS) -o $@ +am__pcidump_module_SOURCES_DIST = commands/pcidump.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_pcidump_module_OBJECTS = commands/pcidump_module-pcidump.$(OBJEXT) +nodist_pcidump_module_OBJECTS = +pcidump_module_OBJECTS = $(am_pcidump_module_OBJECTS) \ + $(nodist_pcidump_module_OBJECTS) +pcidump_module_LINK = $(CCLD) $(pcidump_module_CFLAGS) $(CFLAGS) \ + $(pcidump_module_LDFLAGS) $(LDFLAGS) -o $@ +am__plan9_module_SOURCES_DIST = loader/i386/pc/plan9.c +@COND_i386_pc_TRUE@am_plan9_module_OBJECTS = loader/i386/pc/plan9_module-plan9.$(OBJEXT) +nodist_plan9_module_OBJECTS = +plan9_module_OBJECTS = $(am_plan9_module_OBJECTS) \ + $(nodist_plan9_module_OBJECTS) +plan9_module_LINK = $(CCLD) $(plan9_module_CFLAGS) $(CFLAGS) \ + $(plan9_module_LDFLAGS) $(LDFLAGS) -o $@ +am__play_module_SOURCES_DIST = commands/i386/pc/play.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_play_module_OBJECTS = commands/i386/pc/play_module-play.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_play_module_OBJECTS = commands/i386/pc/play_module-play.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_play_module_OBJECTS = commands/i386/pc/play_module-play.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_play_module_OBJECTS = commands/i386/pc/play_module-play.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_play_module_OBJECTS = commands/i386/pc/play_module-play.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_play_module_OBJECTS = commands/i386/pc/play_module-play.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_play_module_OBJECTS = commands/i386/pc/play_module-play.$(OBJEXT) +nodist_play_module_OBJECTS = +play_module_OBJECTS = $(am_play_module_OBJECTS) \ + $(nodist_play_module_OBJECTS) +play_module_LINK = $(CCLD) $(play_module_CFLAGS) $(CFLAGS) \ + $(play_module_LDFLAGS) $(LDFLAGS) -o $@ +am_png_module_OBJECTS = video/readers/png_module-png.$(OBJEXT) +nodist_png_module_OBJECTS = +png_module_OBJECTS = $(am_png_module_OBJECTS) \ + $(nodist_png_module_OBJECTS) +png_module_LINK = $(CCLD) $(png_module_CFLAGS) $(CFLAGS) \ + $(png_module_LDFLAGS) $(LDFLAGS) -o $@ +am_priority_queue_module_OBJECTS = \ + lib/priority_queue_module-priority_queue.$(OBJEXT) +nodist_priority_queue_module_OBJECTS = +priority_queue_module_OBJECTS = $(am_priority_queue_module_OBJECTS) \ + $(nodist_priority_queue_module_OBJECTS) +priority_queue_module_LINK = $(CCLD) $(priority_queue_module_CFLAGS) \ + $(CFLAGS) $(priority_queue_module_LDFLAGS) $(LDFLAGS) -o $@ +am_probe_module_OBJECTS = commands/probe_module-probe.$(OBJEXT) +nodist_probe_module_OBJECTS = +probe_module_OBJECTS = $(am_probe_module_OBJECTS) \ + $(nodist_probe_module_OBJECTS) +probe_module_LINK = $(CCLD) $(probe_module_CFLAGS) $(CFLAGS) \ + $(probe_module_LDFLAGS) $(LDFLAGS) -o $@ +am_procfs_module_OBJECTS = fs/procfs_module-proc.$(OBJEXT) +nodist_procfs_module_OBJECTS = +procfs_module_OBJECTS = $(am_procfs_module_OBJECTS) \ + $(nodist_procfs_module_OBJECTS) +procfs_module_LINK = $(CCLD) $(procfs_module_CFLAGS) $(CFLAGS) \ + $(procfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_progress_module_OBJECTS = lib/progress_module-progress.$(OBJEXT) +nodist_progress_module_OBJECTS = +progress_module_OBJECTS = $(am_progress_module_OBJECTS) \ + $(nodist_progress_module_OBJECTS) +progress_module_LINK = $(CCLD) $(progress_module_CFLAGS) $(CFLAGS) \ + $(progress_module_LDFLAGS) $(LDFLAGS) -o $@ +am__pxe_module_SOURCES_DIST = net/drivers/i386/pc/pxe.c +@COND_i386_pc_TRUE@am_pxe_module_OBJECTS = net/drivers/i386/pc/pxe_module-pxe.$(OBJEXT) +nodist_pxe_module_OBJECTS = +pxe_module_OBJECTS = $(am_pxe_module_OBJECTS) \ + $(nodist_pxe_module_OBJECTS) +pxe_module_LINK = $(CCLD) $(pxe_module_CFLAGS) $(CFLAGS) \ + $(pxe_module_LDFLAGS) $(LDFLAGS) -o $@ +am__pxeboot_image_SOURCES_DIST = boot/i386/pc/pxeboot.S +@COND_i386_pc_TRUE@am_pxeboot_image_OBJECTS = boot/i386/pc/pxeboot_image-pxeboot.$(OBJEXT) +nodist_pxeboot_image_OBJECTS = +pxeboot_image_OBJECTS = $(am_pxeboot_image_OBJECTS) \ + $(nodist_pxeboot_image_OBJECTS) +pxeboot_image_DEPENDENCIES = +pxeboot_image_LINK = $(CCLD) $(pxeboot_image_CFLAGS) $(CFLAGS) \ + $(pxeboot_image_LDFLAGS) $(LDFLAGS) -o $@ +am__pxechain_module_SOURCES_DIST = loader/i386/pc/pxechainloader.c +@COND_i386_pc_TRUE@am_pxechain_module_OBJECTS = loader/i386/pc/pxechain_module-pxechainloader.$(OBJEXT) +nodist_pxechain_module_OBJECTS = +pxechain_module_OBJECTS = $(am_pxechain_module_OBJECTS) \ + $(nodist_pxechain_module_OBJECTS) +pxechain_module_LINK = $(CCLD) $(pxechain_module_CFLAGS) $(CFLAGS) \ + $(pxechain_module_LDFLAGS) $(LDFLAGS) -o $@ +am_raid5rec_module_OBJECTS = \ + disk/raid5rec_module-raid5_recover.$(OBJEXT) +nodist_raid5rec_module_OBJECTS = +raid5rec_module_OBJECTS = $(am_raid5rec_module_OBJECTS) \ + $(nodist_raid5rec_module_OBJECTS) +raid5rec_module_LINK = $(CCLD) $(raid5rec_module_CFLAGS) $(CFLAGS) \ + $(raid5rec_module_LDFLAGS) $(LDFLAGS) -o $@ +am_raid6rec_module_OBJECTS = \ + disk/raid6rec_module-raid6_recover.$(OBJEXT) +nodist_raid6rec_module_OBJECTS = +raid6rec_module_OBJECTS = $(am_raid6rec_module_OBJECTS) \ + $(nodist_raid6rec_module_OBJECTS) +raid6rec_module_LINK = $(CCLD) $(raid6rec_module_CFLAGS) $(CFLAGS) \ + $(raid6rec_module_LDFLAGS) $(LDFLAGS) -o $@ +am__random_module_SOURCES_DIST = kern/i386/tsc_pmtimer.c \ + lib/i386/random.c lib/random.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_TRUE@am_random_module_OBJECTS = lib/i386/random_module-random.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_TRUE@ lib/random_module-random.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_random_module_OBJECTS = kern/i386/random_module-tsc_pmtimer.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/i386/random_module-random.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/random_module-random.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@am_random_module_OBJECTS = kern/i386/random_module-tsc_pmtimer.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/random_module-random.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@ lib/random_module-random.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_random_module_OBJECTS = lib/i386/random_module-random.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/random_module-random.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_random_module_OBJECTS = kern/i386/random_module-tsc_pmtimer.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/i386/random_module-random.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/random_module-random.$(OBJEXT) +nodist_random_module_OBJECTS = +random_module_OBJECTS = $(am_random_module_OBJECTS) \ + $(nodist_random_module_OBJECTS) +random_module_LINK = $(CCLD) $(random_module_CFLAGS) $(CFLAGS) \ + $(random_module_LDFLAGS) $(LDFLAGS) -o $@ +am_read_module_OBJECTS = commands/read_module-read.$(OBJEXT) +nodist_read_module_OBJECTS = +read_module_OBJECTS = $(am_read_module_OBJECTS) \ + $(nodist_read_module_OBJECTS) +read_module_LINK = $(CCLD) $(read_module_CFLAGS) $(CFLAGS) \ + $(read_module_LDFLAGS) $(LDFLAGS) -o $@ +am__reboot_module_SOURCES_DIST = lib/efi/reboot.c commands/reboot.c \ + lib/uboot/reboot.c lib/i386/reboot.c \ + lib/i386/reboot_trampoline.S lib/xen/reboot.c \ + lib/mips/arc/reboot.c lib/mips/loongson/reboot.c \ + lib/mips/qemu_mips/reboot.c lib/ieee1275/reboot.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_reboot_module_OBJECTS = lib/xen/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_reboot_module_OBJECTS = lib/efi/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_reboot_module_OBJECTS = lib/ieee1275/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_reboot_module_OBJECTS = lib/ieee1275/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_reboot_module_OBJECTS = lib/mips/qemu_mips/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_reboot_module_OBJECTS = lib/mips/loongson/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_reboot_module_OBJECTS = lib/mips/arc/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_reboot_module_OBJECTS = lib/efi/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_reboot_module_OBJECTS = lib/xen/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_reboot_module_OBJECTS = lib/i386/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/i386/reboot_module-reboot_trampoline.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_reboot_module_OBJECTS = lib/i386/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/i386/reboot_module-reboot_trampoline.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_reboot_module_OBJECTS = lib/i386/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/reboot_module-reboot_trampoline.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_reboot_module_OBJECTS = lib/i386/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/i386/reboot_module-reboot_trampoline.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_reboot_module_OBJECTS = lib/i386/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/i386/reboot_module-reboot_trampoline.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@am_reboot_module_OBJECTS = lib/i386/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ lib/i386/reboot_module-reboot_trampoline.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_coreboot_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_reboot_module_OBJECTS = commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_reboot_module_OBJECTS = lib/uboot/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_reboot_module_OBJECTS = lib/efi/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +@COND_arm64_efi_TRUE@am_reboot_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ lib/efi/reboot_module-reboot.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ commands/reboot_module-reboot.$(OBJEXT) +nodist_reboot_module_OBJECTS = +reboot_module_OBJECTS = $(am_reboot_module_OBJECTS) \ + $(nodist_reboot_module_OBJECTS) +reboot_module_LINK = $(CCLD) $(reboot_module_CFLAGS) $(CFLAGS) \ + $(reboot_module_LDFLAGS) $(LDFLAGS) -o $@ +am_regexp_module_OBJECTS = commands/regexp_module-regexp.$(OBJEXT) \ + commands/regexp_module-wildcard.$(OBJEXT) \ + gnulib/regexp_module-regex.$(OBJEXT) +nodist_regexp_module_OBJECTS = +regexp_module_OBJECTS = $(am_regexp_module_OBJECTS) \ + $(nodist_regexp_module_OBJECTS) +regexp_module_LINK = $(CCLD) $(regexp_module_CFLAGS) $(CFLAGS) \ + $(regexp_module_LDFLAGS) $(LDFLAGS) -o $@ +am_reiserfs_module_OBJECTS = fs/reiserfs_module-reiserfs.$(OBJEXT) +nodist_reiserfs_module_OBJECTS = +reiserfs_module_OBJECTS = $(am_reiserfs_module_OBJECTS) \ + $(nodist_reiserfs_module_OBJECTS) +reiserfs_module_LINK = $(CCLD) $(reiserfs_module_CFLAGS) $(CFLAGS) \ + $(reiserfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am__relocator_module_SOURCES_DIST = lib/i386/relocator_asm.S \ + lib/i386/relocator16.S lib/i386/relocator32.S \ + lib/i386/relocator64.S lib/i386/relocator.c \ + lib/i386/relocator_common_c.c lib/relocator.c \ + lib/efi/relocator.c lib/ieee1275/relocator.c \ + lib/i386/xen/relocator.S lib/xen/relocator.c \ + lib/mips/relocator_asm.S lib/mips/relocator.c \ + lib/powerpc/relocator_asm.S lib/powerpc/relocator.c \ + lib/x86_64/efi/relocator.c lib/x86_64/relocator_asm.S \ + lib/x86_64/xen/relocator.S +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_relocator_module_OBJECTS = lib/x86_64/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/x86_64/xen/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/xen/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_relocator_module_OBJECTS = lib/x86_64/efi/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/x86_64/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/efi/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/i386/relocator_module-relocator16.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/i386/relocator_module-relocator32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/i386/relocator_module-relocator64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/i386/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_relocator_module_OBJECTS = lib/powerpc/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ lib/powerpc/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ lib/ieee1275/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_relocator_module_OBJECTS = lib/mips/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/mips/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_relocator_module_OBJECTS = lib/mips/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/mips/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_TRUE@am_relocator_module_OBJECTS = lib/mips/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_TRUE@ lib/mips/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_mips_arc_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_relocator_module_OBJECTS = lib/i386/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ lib/i386/xen/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ lib/xen/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_relocator_module_OBJECTS = lib/i386/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/i386/relocator_module-relocator16.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/i386/relocator_module-relocator32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/i386/relocator_module-relocator64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/i386/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_relocator_module_OBJECTS = lib/i386/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/i386/relocator_module-relocator16.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/i386/relocator_module-relocator32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/i386/relocator_module-relocator64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/i386/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_relocator_module_OBJECTS = lib/i386/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/relocator_module-relocator16.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/relocator_module-relocator32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/relocator_module-relocator64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_relocator_module_OBJECTS = lib/ieee1275/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/i386/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/i386/relocator_module-relocator16.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/i386/relocator_module-relocator32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/i386/relocator_module-relocator64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/i386/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_relocator_module_OBJECTS = lib/efi/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/i386/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/i386/relocator_module-relocator16.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/i386/relocator_module-relocator32.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/i386/relocator_module-relocator64.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/i386/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_relocator_module_OBJECTS = lib/i386/relocator_module-relocator_asm.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/i386/relocator_module-relocator16.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/i386/relocator_module-relocator32.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/i386/relocator_module-relocator64.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/i386/relocator_module-relocator.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/i386/relocator_module-relocator_common_c.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ lib/relocator_module-relocator.$(OBJEXT) +nodist_relocator_module_OBJECTS = +relocator_module_OBJECTS = $(am_relocator_module_OBJECTS) \ + $(nodist_relocator_module_OBJECTS) +relocator_module_LINK = $(CCLD) $(relocator_module_CFLAGS) $(CFLAGS) \ + $(relocator_module_LDFLAGS) $(LDFLAGS) -o $@ +am_romfs_module_OBJECTS = fs/romfs_module-romfs.$(OBJEXT) +nodist_romfs_module_OBJECTS = +romfs_module_OBJECTS = $(am_romfs_module_OBJECTS) \ + $(nodist_romfs_module_OBJECTS) +romfs_module_LINK = $(CCLD) $(romfs_module_CFLAGS) $(CFLAGS) \ + $(romfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_scsi_module_OBJECTS = disk/scsi_module-scsi.$(OBJEXT) +nodist_scsi_module_OBJECTS = +scsi_module_OBJECTS = $(am_scsi_module_OBJECTS) \ + $(nodist_scsi_module_OBJECTS) +scsi_module_LINK = $(CCLD) $(scsi_module_CFLAGS) $(CFLAGS) \ + $(scsi_module_LDFLAGS) $(LDFLAGS) -o $@ +am__sdl_module_SOURCES_DIST = video/emu/sdl.c +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@am_sdl_module_OBJECTS = video/emu/sdl_module-sdl.$(OBJEXT) +nodist_sdl_module_OBJECTS = +sdl_module_OBJECTS = $(am_sdl_module_OBJECTS) \ + $(nodist_sdl_module_OBJECTS) +sdl_module_LINK = $(CCLD) $(sdl_module_CFLAGS) $(CFLAGS) \ + $(sdl_module_LDFLAGS) $(LDFLAGS) -o $@ +am_search_module_OBJECTS = \ + commands/search_module-search_wrap.$(OBJEXT) +nodist_search_module_OBJECTS = +search_module_OBJECTS = $(am_search_module_OBJECTS) \ + $(nodist_search_module_OBJECTS) +search_module_LINK = $(CCLD) $(search_module_CFLAGS) $(CFLAGS) \ + $(search_module_LDFLAGS) $(LDFLAGS) -o $@ +am_search_fs_file_module_OBJECTS = \ + commands/search_fs_file_module-search_file.$(OBJEXT) +nodist_search_fs_file_module_OBJECTS = +search_fs_file_module_OBJECTS = $(am_search_fs_file_module_OBJECTS) \ + $(nodist_search_fs_file_module_OBJECTS) +search_fs_file_module_LINK = $(CCLD) $(search_fs_file_module_CFLAGS) \ + $(CFLAGS) $(search_fs_file_module_LDFLAGS) $(LDFLAGS) -o $@ +am_search_fs_uuid_module_OBJECTS = \ + commands/search_fs_uuid_module-search_uuid.$(OBJEXT) +nodist_search_fs_uuid_module_OBJECTS = +search_fs_uuid_module_OBJECTS = $(am_search_fs_uuid_module_OBJECTS) \ + $(nodist_search_fs_uuid_module_OBJECTS) +search_fs_uuid_module_LINK = $(CCLD) $(search_fs_uuid_module_CFLAGS) \ + $(CFLAGS) $(search_fs_uuid_module_LDFLAGS) $(LDFLAGS) -o $@ +am_search_label_module_OBJECTS = \ + commands/search_label_module-search_label.$(OBJEXT) +nodist_search_label_module_OBJECTS = +search_label_module_OBJECTS = $(am_search_label_module_OBJECTS) \ + $(nodist_search_label_module_OBJECTS) +search_label_module_LINK = $(CCLD) $(search_label_module_CFLAGS) \ + $(CFLAGS) $(search_label_module_LDFLAGS) $(LDFLAGS) -o $@ +am__sendkey_module_SOURCES_DIST = commands/i386/pc/sendkey.c +@COND_i386_pc_TRUE@am_sendkey_module_OBJECTS = commands/i386/pc/sendkey_module-sendkey.$(OBJEXT) +nodist_sendkey_module_OBJECTS = +sendkey_module_OBJECTS = $(am_sendkey_module_OBJECTS) \ + $(nodist_sendkey_module_OBJECTS) +sendkey_module_LINK = $(CCLD) $(sendkey_module_CFLAGS) $(CFLAGS) \ + $(sendkey_module_LDFLAGS) $(LDFLAGS) -o $@ +am__serial_module_SOURCES_DIST = term/efi/serial.c term/serial.c \ + term/ns8250.c term/ieee1275/serial.c term/arc/serial.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_serial_module_OBJECTS = term/efi/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ term/serial_module-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_serial_module_OBJECTS = term/ieee1275/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_TRUE@am_serial_module_OBJECTS = term/ieee1275/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_powerpc_ieee1275_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_serial_module_OBJECTS = term/arc/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@am_serial_module_OBJECTS = term/efi/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_serial_module_OBJECTS = term/serial_module-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_serial_module_OBJECTS = term/serial_module-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_serial_module_OBJECTS = term/serial_module-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_serial_module_OBJECTS = term/ieee1275/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ term/serial_module-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_serial_module_OBJECTS = term/efi/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ term/serial_module-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@am_serial_module_OBJECTS = term/serial_module-ns8250.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_serial_module_OBJECTS = term/efi/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ term/serial_module-serial.$(OBJEXT) +@COND_arm64_efi_TRUE@am_serial_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ term/efi/serial_module-serial.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ term/serial_module-serial.$(OBJEXT) +nodist_serial_module_OBJECTS = +serial_module_OBJECTS = $(am_serial_module_OBJECTS) \ + $(nodist_serial_module_OBJECTS) +serial_module_LINK = $(CCLD) $(serial_module_CFLAGS) $(CFLAGS) \ + $(serial_module_LDFLAGS) $(LDFLAGS) -o $@ +am_setjmp_module_OBJECTS = lib/setjmp_module-setjmp.$(OBJEXT) +nodist_setjmp_module_OBJECTS = +setjmp_module_OBJECTS = $(am_setjmp_module_OBJECTS) \ + $(nodist_setjmp_module_OBJECTS) +setjmp_module_LINK = $(CCLD) $(setjmp_module_CFLAGS) $(CFLAGS) \ + $(setjmp_module_LDFLAGS) $(LDFLAGS) -o $@ +am_setjmp_test_module_OBJECTS = \ + tests/setjmp_test_module-setjmp_test.$(OBJEXT) +nodist_setjmp_test_module_OBJECTS = +setjmp_test_module_OBJECTS = $(am_setjmp_test_module_OBJECTS) \ + $(nodist_setjmp_test_module_OBJECTS) +setjmp_test_module_LINK = $(CCLD) $(setjmp_test_module_CFLAGS) \ + $(CFLAGS) $(setjmp_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__setpci_module_SOURCES_DIST = commands/setpci.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_setpci_module_OBJECTS = commands/setpci_module-setpci.$(OBJEXT) +nodist_setpci_module_OBJECTS = +setpci_module_OBJECTS = $(am_setpci_module_OBJECTS) \ + $(nodist_setpci_module_OBJECTS) +setpci_module_LINK = $(CCLD) $(setpci_module_CFLAGS) $(CFLAGS) \ + $(setpci_module_LDFLAGS) $(LDFLAGS) -o $@ +am_sfs_module_OBJECTS = fs/sfs_module-sfs.$(OBJEXT) +nodist_sfs_module_OBJECTS = +sfs_module_OBJECTS = $(am_sfs_module_OBJECTS) \ + $(nodist_sfs_module_OBJECTS) +sfs_module_LINK = $(CCLD) $(sfs_module_CFLAGS) $(CFLAGS) \ + $(sfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_shift_test_module_OBJECTS = \ + tests/shift_test_module-shift_test.$(OBJEXT) +nodist_shift_test_module_OBJECTS = +shift_test_module_OBJECTS = $(am_shift_test_module_OBJECTS) \ + $(nodist_shift_test_module_OBJECTS) +shift_test_module_LINK = $(CCLD) $(shift_test_module_CFLAGS) $(CFLAGS) \ + $(shift_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am_signature_test_module_OBJECTS = \ + tests/signature_test_module-signature_test.$(OBJEXT) +nodist_signature_test_module_OBJECTS = +signature_test_module_OBJECTS = $(am_signature_test_module_OBJECTS) \ + $(nodist_signature_test_module_OBJECTS) +signature_test_module_LINK = $(CCLD) $(signature_test_module_CFLAGS) \ + $(CFLAGS) $(signature_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am_sleep_module_OBJECTS = commands/sleep_module-sleep.$(OBJEXT) +nodist_sleep_module_OBJECTS = +sleep_module_OBJECTS = $(am_sleep_module_OBJECTS) \ + $(nodist_sleep_module_OBJECTS) +sleep_module_LINK = $(CCLD) $(sleep_module_CFLAGS) $(CFLAGS) \ + $(sleep_module_LDFLAGS) $(LDFLAGS) -o $@ +am_sleep_test_module_OBJECTS = \ + tests/sleep_test_module-sleep_test.$(OBJEXT) +nodist_sleep_test_module_OBJECTS = +sleep_test_module_OBJECTS = $(am_sleep_test_module_OBJECTS) \ + $(nodist_sleep_test_module_OBJECTS) +sleep_test_module_LINK = $(CCLD) $(sleep_test_module_CFLAGS) $(CFLAGS) \ + $(sleep_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__spkmodem_module_SOURCES_DIST = term/spkmodem.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_spkmodem_module_OBJECTS = term/spkmodem_module-spkmodem.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_spkmodem_module_OBJECTS = term/spkmodem_module-spkmodem.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_spkmodem_module_OBJECTS = term/spkmodem_module-spkmodem.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_spkmodem_module_OBJECTS = term/spkmodem_module-spkmodem.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_spkmodem_module_OBJECTS = term/spkmodem_module-spkmodem.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_spkmodem_module_OBJECTS = term/spkmodem_module-spkmodem.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_spkmodem_module_OBJECTS = term/spkmodem_module-spkmodem.$(OBJEXT) +nodist_spkmodem_module_OBJECTS = +spkmodem_module_OBJECTS = $(am_spkmodem_module_OBJECTS) \ + $(nodist_spkmodem_module_OBJECTS) +spkmodem_module_LINK = $(CCLD) $(spkmodem_module_CFLAGS) $(CFLAGS) \ + $(spkmodem_module_LDFLAGS) $(LDFLAGS) -o $@ +am_squash4_module_OBJECTS = fs/squash4_module-squash4.$(OBJEXT) +nodist_squash4_module_OBJECTS = +squash4_module_OBJECTS = $(am_squash4_module_OBJECTS) \ + $(nodist_squash4_module_OBJECTS) +squash4_module_LINK = $(CCLD) $(squash4_module_CFLAGS) $(CFLAGS) \ + $(squash4_module_LDFLAGS) $(LDFLAGS) -o $@ +am__suspend_module_SOURCES_DIST = commands/ieee1275/suspend.c +@COND_i386_ieee1275_FALSE@@COND_powerpc_ieee1275_TRUE@am_suspend_module_OBJECTS = commands/ieee1275/suspend_module-suspend.$(OBJEXT) +@COND_i386_ieee1275_TRUE@am_suspend_module_OBJECTS = commands/ieee1275/suspend_module-suspend.$(OBJEXT) +nodist_suspend_module_OBJECTS = +suspend_module_OBJECTS = $(am_suspend_module_OBJECTS) \ + $(nodist_suspend_module_OBJECTS) +suspend_module_LINK = $(CCLD) $(suspend_module_CFLAGS) $(CFLAGS) \ + $(suspend_module_LDFLAGS) $(LDFLAGS) -o $@ +am_syslinuxcfg_module_OBJECTS = \ + lib/syslinuxcfg_module-syslinux_parse.$(OBJEXT) \ + commands/syslinuxcfg_module-syslinuxcfg.$(OBJEXT) +nodist_syslinuxcfg_module_OBJECTS = +syslinuxcfg_module_OBJECTS = $(am_syslinuxcfg_module_OBJECTS) \ + $(nodist_syslinuxcfg_module_OBJECTS) +syslinuxcfg_module_LINK = $(CCLD) $(syslinuxcfg_module_CFLAGS) \ + $(CFLAGS) $(syslinuxcfg_module_LDFLAGS) $(LDFLAGS) -o $@ +am_tar_module_OBJECTS = fs/tar_module-tar.$(OBJEXT) +nodist_tar_module_OBJECTS = +tar_module_OBJECTS = $(am_tar_module_OBJECTS) \ + $(nodist_tar_module_OBJECTS) +tar_module_LINK = $(CCLD) $(tar_module_CFLAGS) $(CFLAGS) \ + $(tar_module_LDFLAGS) $(LDFLAGS) -o $@ +am_terminal_module_OBJECTS = \ + commands/terminal_module-terminal.$(OBJEXT) +nodist_terminal_module_OBJECTS = +terminal_module_OBJECTS = $(am_terminal_module_OBJECTS) \ + $(nodist_terminal_module_OBJECTS) +terminal_module_LINK = $(CCLD) $(terminal_module_CFLAGS) $(CFLAGS) \ + $(terminal_module_LDFLAGS) $(LDFLAGS) -o $@ +am__terminfo_module_SOURCES_DIST = term/terminfo.c term/tparm.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_FALSE@@COND_x86_64_efi_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_ia64_efi_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_i386_coreboot_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_terminfo_module_OBJECTS = term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +@COND_arm64_efi_TRUE@am_terminfo_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ term/terminfo_module-terminfo.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ term/terminfo_module-tparm.$(OBJEXT) +nodist_terminfo_module_OBJECTS = +terminfo_module_OBJECTS = $(am_terminfo_module_OBJECTS) \ + $(nodist_terminfo_module_OBJECTS) +terminfo_module_LINK = $(CCLD) $(terminfo_module_CFLAGS) $(CFLAGS) \ + $(terminfo_module_LDFLAGS) $(LDFLAGS) -o $@ +am_test_module_OBJECTS = commands/test_module-test.$(OBJEXT) +nodist_test_module_OBJECTS = +test_module_OBJECTS = $(am_test_module_OBJECTS) \ + $(nodist_test_module_OBJECTS) +test_module_LINK = $(CCLD) $(test_module_CFLAGS) $(CFLAGS) \ + $(test_module_LDFLAGS) $(LDFLAGS) -o $@ +am_test_blockarg_module_OBJECTS = \ + tests/test_blockarg_module-test_blockarg.$(OBJEXT) +nodist_test_blockarg_module_OBJECTS = +test_blockarg_module_OBJECTS = $(am_test_blockarg_module_OBJECTS) \ + $(nodist_test_blockarg_module_OBJECTS) +test_blockarg_module_LINK = $(CCLD) $(test_blockarg_module_CFLAGS) \ + $(CFLAGS) $(test_blockarg_module_LDFLAGS) $(LDFLAGS) -o $@ +am_testload_module_OBJECTS = \ + commands/testload_module-testload.$(OBJEXT) +nodist_testload_module_OBJECTS = +testload_module_OBJECTS = $(am_testload_module_OBJECTS) \ + $(nodist_testload_module_OBJECTS) +testload_module_LINK = $(CCLD) $(testload_module_CFLAGS) $(CFLAGS) \ + $(testload_module_LDFLAGS) $(LDFLAGS) -o $@ +am_testspeed_module_OBJECTS = \ + commands/testspeed_module-testspeed.$(OBJEXT) +nodist_testspeed_module_OBJECTS = +testspeed_module_OBJECTS = $(am_testspeed_module_OBJECTS) \ + $(nodist_testspeed_module_OBJECTS) +testspeed_module_LINK = $(CCLD) $(testspeed_module_CFLAGS) $(CFLAGS) \ + $(testspeed_module_LDFLAGS) $(LDFLAGS) -o $@ +am_tftp_module_OBJECTS = net/tftp_module-tftp.$(OBJEXT) +nodist_tftp_module_OBJECTS = +tftp_module_OBJECTS = $(am_tftp_module_OBJECTS) \ + $(nodist_tftp_module_OBJECTS) +tftp_module_LINK = $(CCLD) $(tftp_module_CFLAGS) $(CFLAGS) \ + $(tftp_module_LDFLAGS) $(LDFLAGS) -o $@ +am_tga_module_OBJECTS = video/readers/tga_module-tga.$(OBJEXT) +nodist_tga_module_OBJECTS = +tga_module_OBJECTS = $(am_tga_module_OBJECTS) \ + $(nodist_tga_module_OBJECTS) +tga_module_LINK = $(CCLD) $(tga_module_CFLAGS) $(CFLAGS) \ + $(tga_module_LDFLAGS) $(LDFLAGS) -o $@ +am_time_module_OBJECTS = commands/time_module-time.$(OBJEXT) +nodist_time_module_OBJECTS = +time_module_OBJECTS = $(am_time_module_OBJECTS) \ + $(nodist_time_module_OBJECTS) +time_module_LINK = $(CCLD) $(time_module_CFLAGS) $(CFLAGS) \ + $(time_module_LDFLAGS) $(LDFLAGS) -o $@ +am_tr_module_OBJECTS = commands/tr_module-tr.$(OBJEXT) +nodist_tr_module_OBJECTS = +tr_module_OBJECTS = $(am_tr_module_OBJECTS) \ + $(nodist_tr_module_OBJECTS) +tr_module_LINK = $(CCLD) $(tr_module_CFLAGS) $(CFLAGS) \ + $(tr_module_LDFLAGS) $(LDFLAGS) -o $@ +am_trig_module_OBJECTS = +nodist_trig_module_OBJECTS = trig_module-trigtables.$(OBJEXT) +trig_module_OBJECTS = $(am_trig_module_OBJECTS) \ + $(nodist_trig_module_OBJECTS) +trig_module_LINK = $(CCLD) $(trig_module_CFLAGS) $(CFLAGS) \ + $(trig_module_LDFLAGS) $(LDFLAGS) -o $@ +am_true_module_OBJECTS = commands/true_module-true.$(OBJEXT) +nodist_true_module_OBJECTS = +true_module_OBJECTS = $(am_true_module_OBJECTS) \ + $(nodist_true_module_OBJECTS) +true_module_LINK = $(CCLD) $(true_module_CFLAGS) $(CFLAGS) \ + $(true_module_LDFLAGS) $(LDFLAGS) -o $@ +am__truecrypt_module_SOURCES_DIST = loader/i386/pc/truecrypt.c +@COND_i386_pc_TRUE@am_truecrypt_module_OBJECTS = loader/i386/pc/truecrypt_module-truecrypt.$(OBJEXT) +nodist_truecrypt_module_OBJECTS = +truecrypt_module_OBJECTS = $(am_truecrypt_module_OBJECTS) \ + $(nodist_truecrypt_module_OBJECTS) +truecrypt_module_LINK = $(CCLD) $(truecrypt_module_CFLAGS) $(CFLAGS) \ + $(truecrypt_module_LDFLAGS) $(LDFLAGS) -o $@ +am__ubootnet_module_SOURCES_DIST = net/drivers/uboot/ubootnet.c +@COND_arm_uboot_TRUE@am_ubootnet_module_OBJECTS = net/drivers/uboot/ubootnet_module-ubootnet.$(OBJEXT) +nodist_ubootnet_module_OBJECTS = +ubootnet_module_OBJECTS = $(am_ubootnet_module_OBJECTS) \ + $(nodist_ubootnet_module_OBJECTS) +ubootnet_module_LINK = $(CCLD) $(ubootnet_module_CFLAGS) $(CFLAGS) \ + $(ubootnet_module_LDFLAGS) $(LDFLAGS) -o $@ +am_udf_module_OBJECTS = fs/udf_module-udf.$(OBJEXT) +nodist_udf_module_OBJECTS = +udf_module_OBJECTS = $(am_udf_module_OBJECTS) \ + $(nodist_udf_module_OBJECTS) +udf_module_LINK = $(CCLD) $(udf_module_CFLAGS) $(CFLAGS) \ + $(udf_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ufs1_module_OBJECTS = fs/ufs1_module-ufs.$(OBJEXT) +nodist_ufs1_module_OBJECTS = +ufs1_module_OBJECTS = $(am_ufs1_module_OBJECTS) \ + $(nodist_ufs1_module_OBJECTS) +ufs1_module_LINK = $(CCLD) $(ufs1_module_CFLAGS) $(CFLAGS) \ + $(ufs1_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ufs1_be_module_OBJECTS = fs/ufs1_be_module-ufs_be.$(OBJEXT) +nodist_ufs1_be_module_OBJECTS = +ufs1_be_module_OBJECTS = $(am_ufs1_be_module_OBJECTS) \ + $(nodist_ufs1_be_module_OBJECTS) +ufs1_be_module_LINK = $(CCLD) $(ufs1_be_module_CFLAGS) $(CFLAGS) \ + $(ufs1_be_module_LDFLAGS) $(LDFLAGS) -o $@ +am_ufs2_module_OBJECTS = fs/ufs2_module-ufs2.$(OBJEXT) +nodist_ufs2_module_OBJECTS = +ufs2_module_OBJECTS = $(am_ufs2_module_OBJECTS) \ + $(nodist_ufs2_module_OBJECTS) +ufs2_module_LINK = $(CCLD) $(ufs2_module_CFLAGS) $(CFLAGS) \ + $(ufs2_module_LDFLAGS) $(LDFLAGS) -o $@ +am__uhci_module_SOURCES_DIST = bus/usb/uhci.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_uhci_module_OBJECTS = bus/usb/uhci_module-uhci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_uhci_module_OBJECTS = bus/usb/uhci_module-uhci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_uhci_module_OBJECTS = bus/usb/uhci_module-uhci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_uhci_module_OBJECTS = bus/usb/uhci_module-uhci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_uhci_module_OBJECTS = bus/usb/uhci_module-uhci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_uhci_module_OBJECTS = bus/usb/uhci_module-uhci.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_uhci_module_OBJECTS = bus/usb/uhci_module-uhci.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_uhci_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ bus/usb/uhci_module-uhci.$(OBJEXT) +nodist_uhci_module_OBJECTS = +uhci_module_OBJECTS = $(am_uhci_module_OBJECTS) \ + $(nodist_uhci_module_OBJECTS) +uhci_module_LINK = $(CCLD) $(uhci_module_CFLAGS) $(CFLAGS) \ + $(uhci_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usb_module_SOURCES_DIST = bus/usb/usb.c bus/usb/usbtrans.c \ + bus/usb/usbhub.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usb_module_OBJECTS = bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usb_module_OBJECTS = bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usb_module_OBJECTS = bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usb_module_OBJECTS = bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usb_module_OBJECTS = bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usb_module_OBJECTS = bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usb_module_OBJECTS = bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usb_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ bus/usb/usb_module-usb.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ bus/usb/usb_module-usbtrans.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ bus/usb/usb_module-usbhub.$(OBJEXT) +nodist_usb_module_OBJECTS = +usb_module_OBJECTS = $(am_usb_module_OBJECTS) \ + $(nodist_usb_module_OBJECTS) +usb_module_LINK = $(CCLD) $(usb_module_CFLAGS) $(CFLAGS) \ + $(usb_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usb_keyboard_module_SOURCES_DIST = term/usb_keyboard.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usb_keyboard_module_OBJECTS = term/usb_keyboard_module-usb_keyboard.$(OBJEXT) +nodist_usb_keyboard_module_OBJECTS = +usb_keyboard_module_OBJECTS = $(am_usb_keyboard_module_OBJECTS) \ + $(nodist_usb_keyboard_module_OBJECTS) +usb_keyboard_module_LINK = $(CCLD) $(usb_keyboard_module_CFLAGS) \ + $(CFLAGS) $(usb_keyboard_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usbms_module_SOURCES_DIST = disk/usbms.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usbms_module_OBJECTS = disk/usbms_module-usbms.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usbms_module_OBJECTS = disk/usbms_module-usbms.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usbms_module_OBJECTS = disk/usbms_module-usbms.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usbms_module_OBJECTS = disk/usbms_module-usbms.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usbms_module_OBJECTS = disk/usbms_module-usbms.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usbms_module_OBJECTS = disk/usbms_module-usbms.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usbms_module_OBJECTS = disk/usbms_module-usbms.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usbms_module_OBJECTS = \ +@COND_i386_coreboot_TRUE@ disk/usbms_module-usbms.$(OBJEXT) +nodist_usbms_module_OBJECTS = +usbms_module_OBJECTS = $(am_usbms_module_OBJECTS) \ + $(nodist_usbms_module_OBJECTS) +usbms_module_LINK = $(CCLD) $(usbms_module_CFLAGS) $(CFLAGS) \ + $(usbms_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usbserial_common_module_SOURCES_DIST = bus/usb/serial/common.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usbserial_common_module_OBJECTS = bus/usb/serial/usbserial_common_module-common.$(OBJEXT) +nodist_usbserial_common_module_OBJECTS = +usbserial_common_module_OBJECTS = \ + $(am_usbserial_common_module_OBJECTS) \ + $(nodist_usbserial_common_module_OBJECTS) +usbserial_common_module_LINK = $(CCLD) \ + $(usbserial_common_module_CFLAGS) $(CFLAGS) \ + $(usbserial_common_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usbserial_ftdi_module_SOURCES_DIST = bus/usb/serial/ftdi.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usbserial_ftdi_module_OBJECTS = bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT) +nodist_usbserial_ftdi_module_OBJECTS = +usbserial_ftdi_module_OBJECTS = $(am_usbserial_ftdi_module_OBJECTS) \ + $(nodist_usbserial_ftdi_module_OBJECTS) +usbserial_ftdi_module_LINK = $(CCLD) $(usbserial_ftdi_module_CFLAGS) \ + $(CFLAGS) $(usbserial_ftdi_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usbserial_pl2303_module_SOURCES_DIST = bus/usb/serial/pl2303.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usbserial_pl2303_module_OBJECTS = bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT) +nodist_usbserial_pl2303_module_OBJECTS = +usbserial_pl2303_module_OBJECTS = \ + $(am_usbserial_pl2303_module_OBJECTS) \ + $(nodist_usbserial_pl2303_module_OBJECTS) +usbserial_pl2303_module_LINK = $(CCLD) \ + $(usbserial_pl2303_module_CFLAGS) $(CFLAGS) \ + $(usbserial_pl2303_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usbserial_usbdebug_module_SOURCES_DIST = \ + bus/usb/serial/usbdebug_late.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usbserial_usbdebug_module_OBJECTS = bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT) +nodist_usbserial_usbdebug_module_OBJECTS = +usbserial_usbdebug_module_OBJECTS = \ + $(am_usbserial_usbdebug_module_OBJECTS) \ + $(nodist_usbserial_usbdebug_module_OBJECTS) +usbserial_usbdebug_module_LINK = $(CCLD) \ + $(usbserial_usbdebug_module_CFLAGS) $(CFLAGS) \ + $(usbserial_usbdebug_module_LDFLAGS) $(LDFLAGS) -o $@ +am__usbtest_module_SOURCES_DIST = commands/usbtest.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_FALSE@@COND_x86_64_efi_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_mips_loongson_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_usbtest_module_OBJECTS = commands/usbtest_module-usbtest.$(OBJEXT) +nodist_usbtest_module_OBJECTS = +usbtest_module_OBJECTS = $(am_usbtest_module_OBJECTS) \ + $(nodist_usbtest_module_OBJECTS) +usbtest_module_LINK = $(CCLD) $(usbtest_module_CFLAGS) $(CFLAGS) \ + $(usbtest_module_LDFLAGS) $(LDFLAGS) -o $@ +am__vbe_module_SOURCES_DIST = video/i386/pc/vbe.c +@COND_i386_pc_TRUE@am_vbe_module_OBJECTS = \ +@COND_i386_pc_TRUE@ video/i386/pc/vbe_module-vbe.$(OBJEXT) +nodist_vbe_module_OBJECTS = +vbe_module_OBJECTS = $(am_vbe_module_OBJECTS) \ + $(nodist_vbe_module_OBJECTS) +vbe_module_LINK = $(CCLD) $(vbe_module_CFLAGS) $(CFLAGS) \ + $(vbe_module_LDFLAGS) $(LDFLAGS) -o $@ +am_verify_module_OBJECTS = commands/verify_module-verify.$(OBJEXT) +nodist_verify_module_OBJECTS = +verify_module_OBJECTS = $(am_verify_module_OBJECTS) \ + $(nodist_verify_module_OBJECTS) +verify_module_LINK = $(CCLD) $(verify_module_CFLAGS) $(CFLAGS) \ + $(verify_module_LDFLAGS) $(LDFLAGS) -o $@ +am__vga_module_SOURCES_DIST = video/i386/pc/vga.c +@COND_i386_pc_TRUE@am_vga_module_OBJECTS = \ +@COND_i386_pc_TRUE@ video/i386/pc/vga_module-vga.$(OBJEXT) +nodist_vga_module_OBJECTS = +vga_module_OBJECTS = $(am_vga_module_OBJECTS) \ + $(nodist_vga_module_OBJECTS) +vga_module_LINK = $(CCLD) $(vga_module_CFLAGS) $(CFLAGS) \ + $(vga_module_LDFLAGS) $(LDFLAGS) -o $@ +am__vga_text_module_SOURCES_DIST = term/i386/pc/vga_text.c +@COND_i386_pc_TRUE@am_vga_text_module_OBJECTS = term/i386/pc/vga_text_module-vga_text.$(OBJEXT) +nodist_vga_text_module_OBJECTS = +vga_text_module_OBJECTS = $(am_vga_text_module_OBJECTS) \ + $(nodist_vga_text_module_OBJECTS) +vga_text_module_LINK = $(CCLD) $(vga_text_module_CFLAGS) $(CFLAGS) \ + $(vga_text_module_LDFLAGS) $(LDFLAGS) -o $@ +am__video_module_SOURCES_DIST = video/video.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_video_module_OBJECTS = video/video_module-video.$(OBJEXT) +@COND_arm64_efi_TRUE@am_video_module_OBJECTS = \ +@COND_arm64_efi_TRUE@ video/video_module-video.$(OBJEXT) +nodist_video_module_OBJECTS = +video_module_OBJECTS = $(am_video_module_OBJECTS) \ + $(nodist_video_module_OBJECTS) +video_module_LINK = $(CCLD) $(video_module_CFLAGS) $(CFLAGS) \ + $(video_module_LDFLAGS) $(LDFLAGS) -o $@ +am__video_bochs_module_SOURCES_DIST = video/bochs.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_video_bochs_module_OBJECTS = video/video_bochs_module-bochs.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_video_bochs_module_OBJECTS = video/video_bochs_module-bochs.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_video_bochs_module_OBJECTS = video/video_bochs_module-bochs.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_video_bochs_module_OBJECTS = video/video_bochs_module-bochs.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_video_bochs_module_OBJECTS = video/video_bochs_module-bochs.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_video_bochs_module_OBJECTS = video/video_bochs_module-bochs.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_video_bochs_module_OBJECTS = video/video_bochs_module-bochs.$(OBJEXT) +nodist_video_bochs_module_OBJECTS = +video_bochs_module_OBJECTS = $(am_video_bochs_module_OBJECTS) \ + $(nodist_video_bochs_module_OBJECTS) +video_bochs_module_LINK = $(CCLD) $(video_bochs_module_CFLAGS) \ + $(CFLAGS) $(video_bochs_module_LDFLAGS) $(LDFLAGS) -o $@ +am__video_cirrus_module_SOURCES_DIST = video/cirrus.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_x86_64_efi_TRUE@am_video_cirrus_module_OBJECTS = video/video_cirrus_module-cirrus.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_video_cirrus_module_OBJECTS = video/video_cirrus_module-cirrus.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_video_cirrus_module_OBJECTS = video/video_cirrus_module-cirrus.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_video_cirrus_module_OBJECTS = video/video_cirrus_module-cirrus.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_video_cirrus_module_OBJECTS = video/video_cirrus_module-cirrus.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_video_cirrus_module_OBJECTS = video/video_cirrus_module-cirrus.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_video_cirrus_module_OBJECTS = video/video_cirrus_module-cirrus.$(OBJEXT) +nodist_video_cirrus_module_OBJECTS = +video_cirrus_module_OBJECTS = $(am_video_cirrus_module_OBJECTS) \ + $(nodist_video_cirrus_module_OBJECTS) +video_cirrus_module_LINK = $(CCLD) $(video_cirrus_module_CFLAGS) \ + $(CFLAGS) $(video_cirrus_module_LDFLAGS) $(LDFLAGS) -o $@ +am_video_colors_module_OBJECTS = \ + video/video_colors_module-colors.$(OBJEXT) +nodist_video_colors_module_OBJECTS = +video_colors_module_OBJECTS = $(am_video_colors_module_OBJECTS) \ + $(nodist_video_colors_module_OBJECTS) +video_colors_module_LINK = $(CCLD) $(video_colors_module_CFLAGS) \ + $(CFLAGS) $(video_colors_module_LDFLAGS) $(LDFLAGS) -o $@ +am__video_fb_module_SOURCES_DIST = video/fb/video_fb.c \ + video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_FALSE@@COND_x86_64_xen_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_FALSE@@COND_x86_64_efi_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_FALSE@@COND_sparc64_ieee1275_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_FALSE@@COND_powerpc_ieee1275_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_FALSE@@COND_mips_qemu_mips_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_FALSE@@COND_mips_arc_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_FALSE@@COND_ia64_efi_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_FALSE@@COND_i386_xen_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_i386_qemu_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_FALSE@@COND_i386_multiboot_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_FALSE@@COND_i386_ieee1275_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_FALSE@@COND_i386_efi_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_FALSE@@COND_emu_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_FALSE@@COND_arm_uboot_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_FALSE@@COND_arm_efi_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +@COND_arm64_efi_TRUE@am_video_fb_module_OBJECTS = video/fb/video_fb_module-video_fb.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ video/fb/video_fb_module-fbblit.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ video/fb/video_fb_module-fbfill.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ video/fb/video_fb_module-fbutil.$(OBJEXT) +nodist_video_fb_module_OBJECTS = +video_fb_module_OBJECTS = $(am_video_fb_module_OBJECTS) \ + $(nodist_video_fb_module_OBJECTS) +video_fb_module_LINK = $(CCLD) $(video_fb_module_CFLAGS) $(CFLAGS) \ + $(video_fb_module_LDFLAGS) $(LDFLAGS) -o $@ +am_videoinfo_module_OBJECTS = \ + commands/videoinfo_module-videoinfo.$(OBJEXT) +nodist_videoinfo_module_OBJECTS = +videoinfo_module_OBJECTS = $(am_videoinfo_module_OBJECTS) \ + $(nodist_videoinfo_module_OBJECTS) +videoinfo_module_LINK = $(CCLD) $(videoinfo_module_CFLAGS) $(CFLAGS) \ + $(videoinfo_module_LDFLAGS) $(LDFLAGS) -o $@ +am_videotest_module_OBJECTS = \ + commands/videotest_module-videotest.$(OBJEXT) +nodist_videotest_module_OBJECTS = +videotest_module_OBJECTS = $(am_videotest_module_OBJECTS) \ + $(nodist_videotest_module_OBJECTS) +videotest_module_LINK = $(CCLD) $(videotest_module_CFLAGS) $(CFLAGS) \ + $(videotest_module_LDFLAGS) $(LDFLAGS) -o $@ +am_videotest_checksum_module_OBJECTS = \ + tests/videotest_checksum_module-videotest_checksum.$(OBJEXT) +nodist_videotest_checksum_module_OBJECTS = +videotest_checksum_module_OBJECTS = \ + $(am_videotest_checksum_module_OBJECTS) \ + $(nodist_videotest_checksum_module_OBJECTS) +videotest_checksum_module_LINK = $(CCLD) \ + $(videotest_checksum_module_CFLAGS) $(CFLAGS) \ + $(videotest_checksum_module_LDFLAGS) $(LDFLAGS) -o $@ +am__xen_boot_module_SOURCES_DIST = loader/arm64/xen_boot.c \ + lib/cmdline.c +@COND_arm64_efi_TRUE@am_xen_boot_module_OBJECTS = loader/arm64/xen_boot_module-xen_boot.$(OBJEXT) \ +@COND_arm64_efi_TRUE@ lib/xen_boot_module-cmdline.$(OBJEXT) +nodist_xen_boot_module_OBJECTS = +xen_boot_module_OBJECTS = $(am_xen_boot_module_OBJECTS) \ + $(nodist_xen_boot_module_OBJECTS) +xen_boot_module_LINK = $(CCLD) $(xen_boot_module_CFLAGS) $(CFLAGS) \ + $(xen_boot_module_LDFLAGS) $(LDFLAGS) -o $@ +am_xfs_module_OBJECTS = fs/xfs_module-xfs.$(OBJEXT) +nodist_xfs_module_OBJECTS = +xfs_module_OBJECTS = $(am_xfs_module_OBJECTS) \ + $(nodist_xfs_module_OBJECTS) +xfs_module_LINK = $(CCLD) $(xfs_module_CFLAGS) $(CFLAGS) \ + $(xfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am__xnu_module_SOURCES_DIST = loader/xnu_resume.c loader/i386/xnu.c \ + loader/xnu.c +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_TRUE@am_xnu_module_OBJECTS = loader/xnu_module-xnu_resume.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_TRUE@ loader/i386/xnu_module-xnu.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_FALSE@@COND_x86_64_efi_TRUE@ loader/xnu_module-xnu.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@am_xnu_module_OBJECTS = loader/xnu_module-xnu_resume.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/i386/xnu_module-xnu.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_FALSE@@COND_i386_pc_TRUE@ loader/xnu_module-xnu.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@am_xnu_module_OBJECTS = loader/xnu_module-xnu_resume.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@ loader/i386/xnu_module-xnu.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_FALSE@@COND_i386_multiboot_TRUE@ loader/xnu_module-xnu.$(OBJEXT) +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@am_xnu_module_OBJECTS = loader/xnu_module-xnu_resume.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/i386/xnu_module-xnu.$(OBJEXT) \ +@COND_i386_coreboot_FALSE@@COND_i386_efi_TRUE@ loader/xnu_module-xnu.$(OBJEXT) +@COND_i386_coreboot_TRUE@am_xnu_module_OBJECTS = loader/xnu_module-xnu_resume.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ loader/i386/xnu_module-xnu.$(OBJEXT) \ +@COND_i386_coreboot_TRUE@ loader/xnu_module-xnu.$(OBJEXT) +nodist_xnu_module_OBJECTS = +xnu_module_OBJECTS = $(am_xnu_module_OBJECTS) \ + $(nodist_xnu_module_OBJECTS) +xnu_module_LINK = $(CCLD) $(xnu_module_CFLAGS) $(CFLAGS) \ + $(xnu_module_LDFLAGS) $(LDFLAGS) -o $@ +am_xnu_uuid_module_OBJECTS = \ + commands/xnu_uuid_module-xnu_uuid.$(OBJEXT) +nodist_xnu_uuid_module_OBJECTS = +xnu_uuid_module_OBJECTS = $(am_xnu_uuid_module_OBJECTS) \ + $(nodist_xnu_uuid_module_OBJECTS) +xnu_uuid_module_LINK = $(CCLD) $(xnu_uuid_module_CFLAGS) $(CFLAGS) \ + $(xnu_uuid_module_LDFLAGS) $(LDFLAGS) -o $@ +am_xnu_uuid_test_module_OBJECTS = \ + tests/xnu_uuid_test_module-xnu_uuid_test.$(OBJEXT) +nodist_xnu_uuid_test_module_OBJECTS = +xnu_uuid_test_module_OBJECTS = $(am_xnu_uuid_test_module_OBJECTS) \ + $(nodist_xnu_uuid_test_module_OBJECTS) +xnu_uuid_test_module_LINK = $(CCLD) $(xnu_uuid_test_module_CFLAGS) \ + $(CFLAGS) $(xnu_uuid_test_module_LDFLAGS) $(LDFLAGS) -o $@ +am__xz_decompress_image_SOURCES_DIST = boot/mips/startup_raw.S \ + boot/decompressor/minilib.c boot/decompressor/xz.c \ + lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c \ + lib/xzembed/xz_dec_stream.c kern/compiler-rt.c +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@am_xz_decompress_image_OBJECTS = boot/mips/xz_decompress_image-startup_raw.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ boot/decompressor/xz_decompress_image-minilib.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ boot/decompressor/xz_decompress_image-xz.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_bcj.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_lzma2.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_stream.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_FALSE@@COND_mips_qemu_mips_TRUE@ kern/xz_decompress_image-compiler-rt.$(OBJEXT) +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@am_xz_decompress_image_OBJECTS = boot/mips/xz_decompress_image-startup_raw.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ boot/decompressor/xz_decompress_image-minilib.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ boot/decompressor/xz_decompress_image-xz.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_bcj.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_lzma2.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_stream.$(OBJEXT) \ +@COND_mips_arc_FALSE@@COND_mips_loongson_TRUE@ kern/xz_decompress_image-compiler-rt.$(OBJEXT) +@COND_mips_arc_TRUE@am_xz_decompress_image_OBJECTS = boot/mips/xz_decompress_image-startup_raw.$(OBJEXT) \ +@COND_mips_arc_TRUE@ boot/decompressor/xz_decompress_image-minilib.$(OBJEXT) \ +@COND_mips_arc_TRUE@ boot/decompressor/xz_decompress_image-xz.$(OBJEXT) \ +@COND_mips_arc_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_bcj.$(OBJEXT) \ +@COND_mips_arc_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_lzma2.$(OBJEXT) \ +@COND_mips_arc_TRUE@ lib/xzembed/xz_decompress_image-xz_dec_stream.$(OBJEXT) \ +@COND_mips_arc_TRUE@ kern/xz_decompress_image-compiler-rt.$(OBJEXT) +nodist_xz_decompress_image_OBJECTS = +xz_decompress_image_OBJECTS = $(am_xz_decompress_image_OBJECTS) \ + $(nodist_xz_decompress_image_OBJECTS) +xz_decompress_image_DEPENDENCIES = +xz_decompress_image_LINK = $(CCLD) $(xz_decompress_image_CFLAGS) \ + $(CFLAGS) $(xz_decompress_image_LDFLAGS) $(LDFLAGS) -o $@ +am_xzio_module_OBJECTS = io/xzio_module-xzio.$(OBJEXT) \ + lib/xzembed/xzio_module-xz_dec_bcj.$(OBJEXT) \ + lib/xzembed/xzio_module-xz_dec_lzma2.$(OBJEXT) \ + lib/xzembed/xzio_module-xz_dec_stream.$(OBJEXT) +nodist_xzio_module_OBJECTS = +xzio_module_OBJECTS = $(am_xzio_module_OBJECTS) \ + $(nodist_xzio_module_OBJECTS) +xzio_module_LINK = $(CCLD) $(xzio_module_CFLAGS) $(CFLAGS) \ + $(xzio_module_LDFLAGS) $(LDFLAGS) -o $@ +am_zfs_module_OBJECTS = fs/zfs/zfs_module-zfs.$(OBJEXT) \ + fs/zfs/zfs_module-zfs_lzjb.$(OBJEXT) \ + fs/zfs/zfs_module-zfs_lz4.$(OBJEXT) \ + fs/zfs/zfs_module-zfs_sha256.$(OBJEXT) \ + fs/zfs/zfs_module-zfs_fletcher.$(OBJEXT) +nodist_zfs_module_OBJECTS = +zfs_module_OBJECTS = $(am_zfs_module_OBJECTS) \ + $(nodist_zfs_module_OBJECTS) +zfs_module_LINK = $(CCLD) $(zfs_module_CFLAGS) $(CFLAGS) \ + $(zfs_module_LDFLAGS) $(LDFLAGS) -o $@ +am_zfscrypt_module_OBJECTS = \ + fs/zfs/zfscrypt_module-zfscrypt.$(OBJEXT) +nodist_zfscrypt_module_OBJECTS = +zfscrypt_module_OBJECTS = $(am_zfscrypt_module_OBJECTS) \ + $(nodist_zfscrypt_module_OBJECTS) +zfscrypt_module_LINK = $(CCLD) $(zfscrypt_module_CFLAGS) $(CFLAGS) \ + $(zfscrypt_module_LDFLAGS) $(LDFLAGS) -o $@ +am_zfsinfo_module_OBJECTS = fs/zfs/zfsinfo_module-zfsinfo.$(OBJEXT) +nodist_zfsinfo_module_OBJECTS = +zfsinfo_module_OBJECTS = $(am_zfsinfo_module_OBJECTS) \ + $(nodist_zfsinfo_module_OBJECTS) +zfsinfo_module_LINK = $(CCLD) $(zfsinfo_module_CFLAGS) $(CFLAGS) \ + $(zfsinfo_module_LDFLAGS) $(LDFLAGS) -o $@ +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +SCRIPTS = $(bin_SCRIPTS) $(grubconf_SCRIPTS) $(noinst_SCRIPTS) \ + $(platform_SCRIPTS) $(sbin_SCRIPTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) +AM_V_CPPAS = $(am__v_CPPAS_@AM_V@) +am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@) +am__v_CPPAS_0 = @echo " CPPAS " $@; +am__v_CPPAS_1 = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) \ + $(adler32_module_SOURCES) $(nodist_adler32_module_SOURCES) \ + $(affs_module_SOURCES) $(nodist_affs_module_SOURCES) \ + $(afs_module_SOURCES) $(nodist_afs_module_SOURCES) \ + $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) \ + $(all_video_module_SOURCES) $(nodist_all_video_module_SOURCES) \ + $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) \ + $(appleldr_module_SOURCES) $(nodist_appleldr_module_SOURCES) \ + $(archelp_module_SOURCES) $(nodist_archelp_module_SOURCES) \ + $(at_keyboard_module_SOURCES) \ + $(nodist_at_keyboard_module_SOURCES) $(ata_module_SOURCES) \ + $(nodist_ata_module_SOURCES) $(backtrace_module_SOURCES) \ + $(nodist_backtrace_module_SOURCES) $(bfs_module_SOURCES) \ + $(nodist_bfs_module_SOURCES) $(biosdisk_module_SOURCES) \ + $(nodist_biosdisk_module_SOURCES) $(bitmap_module_SOURCES) \ + $(nodist_bitmap_module_SOURCES) $(bitmap_scale_module_SOURCES) \ + $(nodist_bitmap_scale_module_SOURCES) \ + $(blocklist_module_SOURCES) $(nodist_blocklist_module_SOURCES) \ + $(boot_image_SOURCES) $(nodist_boot_image_SOURCES) \ + $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) \ + $(boot_hybrid_image_SOURCES) \ + $(nodist_boot_hybrid_image_SOURCES) $(boottime_module_SOURCES) \ + $(nodist_boottime_module_SOURCES) $(bsd_module_SOURCES) \ + $(nodist_bsd_module_SOURCES) $(bswap_test_module_SOURCES) \ + $(nodist_bswap_test_module_SOURCES) $(btrfs_module_SOURCES) \ + $(nodist_btrfs_module_SOURCES) $(bufio_module_SOURCES) \ + $(nodist_bufio_module_SOURCES) $(cacheinfo_module_SOURCES) \ + $(nodist_cacheinfo_module_SOURCES) $(cat_module_SOURCES) \ + $(nodist_cat_module_SOURCES) $(cbfs_module_SOURCES) \ + $(nodist_cbfs_module_SOURCES) $(cbls_module_SOURCES) \ + $(nodist_cbls_module_SOURCES) $(cbmemc_module_SOURCES) \ + $(nodist_cbmemc_module_SOURCES) $(cbtable_module_SOURCES) \ + $(nodist_cbtable_module_SOURCES) $(cbtime_module_SOURCES) \ + $(nodist_cbtime_module_SOURCES) $(cdboot_image_SOURCES) \ + $(nodist_cdboot_image_SOURCES) $(chain_module_SOURCES) \ + $(nodist_chain_module_SOURCES) \ + $(cmdline_cat_test_module_SOURCES) \ + $(nodist_cmdline_cat_test_module_SOURCES) \ + $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) \ + $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) \ + $(cmp_module_SOURCES) $(nodist_cmp_module_SOURCES) \ + $(cmp_test_module_SOURCES) $(nodist_cmp_test_module_SOURCES) \ + $(configfile_module_SOURCES) \ + $(nodist_configfile_module_SOURCES) $(cpio_module_SOURCES) \ + $(nodist_cpio_module_SOURCES) $(cpio_be_module_SOURCES) \ + $(nodist_cpio_be_module_SOURCES) $(cpuid_module_SOURCES) \ + $(nodist_cpuid_module_SOURCES) $(crc64_module_SOURCES) \ + $(nodist_crc64_module_SOURCES) $(crypto_module_SOURCES) \ + $(nodist_crypto_module_SOURCES) $(cryptodisk_module_SOURCES) \ + $(nodist_cryptodisk_module_SOURCES) $(cs5536_module_SOURCES) \ + $(nodist_cs5536_module_SOURCES) $(ctz_test_module_SOURCES) \ + $(nodist_ctz_test_module_SOURCES) $(date_module_SOURCES) \ + $(nodist_date_module_SOURCES) $(datehook_module_SOURCES) \ + $(nodist_datehook_module_SOURCES) $(datetime_module_SOURCES) \ + $(nodist_datetime_module_SOURCES) $(disk_module_SOURCES) \ + $(nodist_disk_module_SOURCES) $(diskboot_image_SOURCES) \ + $(nodist_diskboot_image_SOURCES) $(diskfilter_module_SOURCES) \ + $(nodist_diskfilter_module_SOURCES) $(div_module_SOURCES) \ + $(nodist_div_module_SOURCES) $(div_test_module_SOURCES) \ + $(nodist_div_test_module_SOURCES) $(dm_nv_module_SOURCES) \ + $(nodist_dm_nv_module_SOURCES) $(drivemap_module_SOURCES) \ + $(nodist_drivemap_module_SOURCES) $(echo_module_SOURCES) \ + $(nodist_echo_module_SOURCES) $(efi_gop_module_SOURCES) \ + $(nodist_efi_gop_module_SOURCES) $(efi_uga_module_SOURCES) \ + $(nodist_efi_uga_module_SOURCES) $(efiemu_module_SOURCES) \ + $(nodist_efiemu_module_SOURCES) $(efifwsetup_module_SOURCES) \ + $(nodist_efifwsetup_module_SOURCES) $(efinet_module_SOURCES) \ + $(nodist_efinet_module_SOURCES) $(ehci_module_SOURCES) \ + $(nodist_ehci_module_SOURCES) $(elf_module_SOURCES) \ + $(nodist_elf_module_SOURCES) $(emunet_module_SOURCES) \ + $(nodist_emunet_module_SOURCES) $(emupci_module_SOURCES) \ + $(nodist_emupci_module_SOURCES) $(escc_module_SOURCES) \ + $(nodist_escc_module_SOURCES) $(eval_module_SOURCES) \ + $(nodist_eval_module_SOURCES) $(exfat_module_SOURCES) \ + $(nodist_exfat_module_SOURCES) $(exfctest_module_SOURCES) \ + $(nodist_exfctest_module_SOURCES) $(ext2_module_SOURCES) \ + $(nodist_ext2_module_SOURCES) $(extcmd_module_SOURCES) \ + $(nodist_extcmd_module_SOURCES) $(fat_module_SOURCES) \ + $(nodist_fat_module_SOURCES) $(fdt_module_SOURCES) \ + $(nodist_fdt_module_SOURCES) $(file_module_SOURCES) \ + $(nodist_file_module_SOURCES) $(fixvideo_module_SOURCES) \ + $(nodist_fixvideo_module_SOURCES) $(font_module_SOURCES) \ + $(nodist_font_module_SOURCES) $(freedos_module_SOURCES) \ + $(nodist_freedos_module_SOURCES) $(fshelp_module_SOURCES) \ + $(nodist_fshelp_module_SOURCES) \ + $(functional_test_module_SOURCES) \ + $(nodist_functional_test_module_SOURCES) \ + $(fwstart_image_SOURCES) $(nodist_fwstart_image_SOURCES) \ + $(fwstart_fuloong2f_image_SOURCES) \ + $(nodist_fwstart_fuloong2f_image_SOURCES) \ + $(gcry_arcfour_module_SOURCES) \ + $(nodist_gcry_arcfour_module_SOURCES) \ + $(gcry_blowfish_module_SOURCES) \ + $(nodist_gcry_blowfish_module_SOURCES) \ + $(gcry_camellia_module_SOURCES) \ + $(nodist_gcry_camellia_module_SOURCES) \ + $(gcry_cast5_module_SOURCES) \ + $(nodist_gcry_cast5_module_SOURCES) $(gcry_crc_module_SOURCES) \ + $(nodist_gcry_crc_module_SOURCES) $(gcry_des_module_SOURCES) \ + $(nodist_gcry_des_module_SOURCES) $(gcry_dsa_module_SOURCES) \ + $(nodist_gcry_dsa_module_SOURCES) $(gcry_idea_module_SOURCES) \ + $(nodist_gcry_idea_module_SOURCES) $(gcry_md4_module_SOURCES) \ + $(nodist_gcry_md4_module_SOURCES) $(gcry_md5_module_SOURCES) \ + $(nodist_gcry_md5_module_SOURCES) \ + $(gcry_rfc2268_module_SOURCES) \ + $(nodist_gcry_rfc2268_module_SOURCES) \ + $(gcry_rijndael_module_SOURCES) \ + $(nodist_gcry_rijndael_module_SOURCES) \ + $(gcry_rmd160_module_SOURCES) \ + $(nodist_gcry_rmd160_module_SOURCES) \ + $(gcry_rsa_module_SOURCES) $(nodist_gcry_rsa_module_SOURCES) \ + $(gcry_seed_module_SOURCES) $(nodist_gcry_seed_module_SOURCES) \ + $(gcry_serpent_module_SOURCES) \ + $(nodist_gcry_serpent_module_SOURCES) \ + $(gcry_sha1_module_SOURCES) $(nodist_gcry_sha1_module_SOURCES) \ + $(gcry_sha256_module_SOURCES) \ + $(nodist_gcry_sha256_module_SOURCES) \ + $(gcry_sha512_module_SOURCES) \ + $(nodist_gcry_sha512_module_SOURCES) \ + $(gcry_tiger_module_SOURCES) \ + $(nodist_gcry_tiger_module_SOURCES) \ + $(gcry_twofish_module_SOURCES) \ + $(nodist_gcry_twofish_module_SOURCES) \ + $(gcry_whirlpool_module_SOURCES) \ + $(nodist_gcry_whirlpool_module_SOURCES) $(gdb_module_SOURCES) \ + $(nodist_gdb_module_SOURCES) $(geli_module_SOURCES) \ + $(nodist_geli_module_SOURCES) $(gettext_module_SOURCES) \ + $(nodist_gettext_module_SOURCES) $(gfxmenu_module_SOURCES) \ + $(nodist_gfxmenu_module_SOURCES) $(gfxterm_module_SOURCES) \ + $(nodist_gfxterm_module_SOURCES) \ + $(gfxterm_background_module_SOURCES) \ + $(nodist_gfxterm_background_module_SOURCES) \ + $(gfxterm_menu_module_SOURCES) \ + $(nodist_gfxterm_menu_module_SOURCES) \ + $(gptsync_module_SOURCES) $(nodist_gptsync_module_SOURCES) \ + $(grub_emu_SOURCES) $(nodist_grub_emu_SOURCES) \ + $(grub_emu_lite_SOURCES) $(nodist_grub_emu_lite_SOURCES) \ + $(gzio_module_SOURCES) $(nodist_gzio_module_SOURCES) \ + $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) \ + $(hashsum_module_SOURCES) $(nodist_hashsum_module_SOURCES) \ + $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) \ + $(hello_module_SOURCES) $(nodist_hello_module_SOURCES) \ + $(help_module_SOURCES) $(nodist_help_module_SOURCES) \ + $(hexdump_module_SOURCES) $(nodist_hexdump_module_SOURCES) \ + $(hfs_module_SOURCES) $(nodist_hfs_module_SOURCES) \ + $(hfsplus_module_SOURCES) $(nodist_hfsplus_module_SOURCES) \ + $(hfspluscomp_module_SOURCES) \ + $(nodist_hfspluscomp_module_SOURCES) $(http_module_SOURCES) \ + $(nodist_http_module_SOURCES) $(ieee1275_fb_module_SOURCES) \ + $(nodist_ieee1275_fb_module_SOURCES) $(iorw_module_SOURCES) \ + $(nodist_iorw_module_SOURCES) $(iso9660_module_SOURCES) \ + $(nodist_iso9660_module_SOURCES) $(jfs_module_SOURCES) \ + $(nodist_jfs_module_SOURCES) $(jpeg_module_SOURCES) \ + $(nodist_jpeg_module_SOURCES) $(kernel_exec_SOURCES) \ + $(nodist_kernel_exec_SOURCES) $(keylayouts_module_SOURCES) \ + $(nodist_keylayouts_module_SOURCES) \ + $(keystatus_module_SOURCES) $(nodist_keystatus_module_SOURCES) \ + $(ldm_module_SOURCES) $(nodist_ldm_module_SOURCES) \ + $(legacy_password_test_module_SOURCES) \ + $(nodist_legacy_password_test_module_SOURCES) \ + $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) \ + $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) \ + $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) \ + $(lnxboot_image_SOURCES) $(nodist_lnxboot_image_SOURCES) \ + $(loadbios_module_SOURCES) $(nodist_loadbios_module_SOURCES) \ + $(loadenv_module_SOURCES) $(nodist_loadenv_module_SOURCES) \ + $(loopback_module_SOURCES) $(nodist_loopback_module_SOURCES) \ + $(ls_module_SOURCES) $(nodist_ls_module_SOURCES) \ + $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) \ + $(lsapm_module_SOURCES) $(nodist_lsapm_module_SOURCES) \ + $(lsdev_module_SOURCES) $(nodist_lsdev_module_SOURCES) \ + $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) \ + $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) \ + $(lsefisystab_module_SOURCES) \ + $(nodist_lsefisystab_module_SOURCES) $(lsmmap_module_SOURCES) \ + $(nodist_lsmmap_module_SOURCES) $(lspci_module_SOURCES) \ + $(nodist_lspci_module_SOURCES) $(lssal_module_SOURCES) \ + $(nodist_lssal_module_SOURCES) $(lsspd_module_SOURCES) \ + $(nodist_lsspd_module_SOURCES) $(lsxen_module_SOURCES) \ + $(nodist_lsxen_module_SOURCES) $(luks_module_SOURCES) \ + $(nodist_luks_module_SOURCES) $(lvm_module_SOURCES) \ + $(nodist_lvm_module_SOURCES) $(lzma_decompress_image_SOURCES) \ + $(nodist_lzma_decompress_image_SOURCES) \ + $(lzopio_module_SOURCES) $(nodist_lzopio_module_SOURCES) \ + $(macbless_module_SOURCES) $(nodist_macbless_module_SOURCES) \ + $(macho_module_SOURCES) $(nodist_macho_module_SOURCES) \ + $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) \ + $(mdraid09_module_SOURCES) $(nodist_mdraid09_module_SOURCES) \ + $(mdraid09_be_module_SOURCES) \ + $(nodist_mdraid09_be_module_SOURCES) \ + $(mdraid1x_module_SOURCES) $(nodist_mdraid1x_module_SOURCES) \ + $(memdisk_module_SOURCES) $(nodist_memdisk_module_SOURCES) \ + $(memrw_module_SOURCES) $(nodist_memrw_module_SOURCES) \ + $(minicmd_module_SOURCES) $(nodist_minicmd_module_SOURCES) \ + $(minix_module_SOURCES) $(nodist_minix_module_SOURCES) \ + $(minix2_module_SOURCES) $(nodist_minix2_module_SOURCES) \ + $(minix2_be_module_SOURCES) $(nodist_minix2_be_module_SOURCES) \ + $(minix3_module_SOURCES) $(nodist_minix3_module_SOURCES) \ + $(minix3_be_module_SOURCES) $(nodist_minix3_be_module_SOURCES) \ + $(minix_be_module_SOURCES) $(nodist_minix_be_module_SOURCES) \ + $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) \ + $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) \ + $(mpi_module_SOURCES) $(nodist_mpi_module_SOURCES) \ + $(msdospart_module_SOURCES) $(nodist_msdospart_module_SOURCES) \ + $(mul_test_module_SOURCES) $(nodist_mul_test_module_SOURCES) \ + $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) \ + $(multiboot2_module_SOURCES) \ + $(nodist_multiboot2_module_SOURCES) $(nand_module_SOURCES) \ + $(nodist_nand_module_SOURCES) $(nativedisk_module_SOURCES) \ + $(nodist_nativedisk_module_SOURCES) $(net_module_SOURCES) \ + $(nodist_net_module_SOURCES) $(newc_module_SOURCES) \ + $(nodist_newc_module_SOURCES) $(nilfs2_module_SOURCES) \ + $(nodist_nilfs2_module_SOURCES) \ + $(none_decompress_image_SOURCES) \ + $(nodist_none_decompress_image_SOURCES) \ + $(normal_module_SOURCES) $(nodist_normal_module_SOURCES) \ + $(ntfs_module_SOURCES) $(nodist_ntfs_module_SOURCES) \ + $(ntfscomp_module_SOURCES) $(nodist_ntfscomp_module_SOURCES) \ + $(ntldr_module_SOURCES) $(nodist_ntldr_module_SOURCES) \ + $(odc_module_SOURCES) $(nodist_odc_module_SOURCES) \ + $(offsetio_module_SOURCES) $(nodist_offsetio_module_SOURCES) \ + $(ofnet_module_SOURCES) $(nodist_ofnet_module_SOURCES) \ + $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) \ + $(part_acorn_module_SOURCES) \ + $(nodist_part_acorn_module_SOURCES) \ + $(part_amiga_module_SOURCES) \ + $(nodist_part_amiga_module_SOURCES) \ + $(part_apple_module_SOURCES) \ + $(nodist_part_apple_module_SOURCES) $(part_bsd_module_SOURCES) \ + $(nodist_part_bsd_module_SOURCES) $(part_dfly_module_SOURCES) \ + $(nodist_part_dfly_module_SOURCES) $(part_dvh_module_SOURCES) \ + $(nodist_part_dvh_module_SOURCES) $(part_gpt_module_SOURCES) \ + $(nodist_part_gpt_module_SOURCES) $(part_msdos_module_SOURCES) \ + $(nodist_part_msdos_module_SOURCES) \ + $(part_plan_module_SOURCES) $(nodist_part_plan_module_SOURCES) \ + $(part_sun_module_SOURCES) $(nodist_part_sun_module_SOURCES) \ + $(part_sunpc_module_SOURCES) \ + $(nodist_part_sunpc_module_SOURCES) $(parttool_module_SOURCES) \ + $(nodist_parttool_module_SOURCES) $(password_module_SOURCES) \ + $(nodist_password_module_SOURCES) \ + $(password_pbkdf2_module_SOURCES) \ + $(nodist_password_pbkdf2_module_SOURCES) \ + $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) \ + $(pbkdf2_module_SOURCES) $(nodist_pbkdf2_module_SOURCES) \ + $(pbkdf2_test_module_SOURCES) \ + $(nodist_pbkdf2_test_module_SOURCES) $(pci_module_SOURCES) \ + $(nodist_pci_module_SOURCES) $(pcidump_module_SOURCES) \ + $(nodist_pcidump_module_SOURCES) $(plan9_module_SOURCES) \ + $(nodist_plan9_module_SOURCES) $(play_module_SOURCES) \ + $(nodist_play_module_SOURCES) $(png_module_SOURCES) \ + $(nodist_png_module_SOURCES) $(priority_queue_module_SOURCES) \ + $(nodist_priority_queue_module_SOURCES) \ + $(probe_module_SOURCES) $(nodist_probe_module_SOURCES) \ + $(procfs_module_SOURCES) $(nodist_procfs_module_SOURCES) \ + $(progress_module_SOURCES) $(nodist_progress_module_SOURCES) \ + $(pxe_module_SOURCES) $(nodist_pxe_module_SOURCES) \ + $(pxeboot_image_SOURCES) $(nodist_pxeboot_image_SOURCES) \ + $(pxechain_module_SOURCES) $(nodist_pxechain_module_SOURCES) \ + $(raid5rec_module_SOURCES) $(nodist_raid5rec_module_SOURCES) \ + $(raid6rec_module_SOURCES) $(nodist_raid6rec_module_SOURCES) \ + $(random_module_SOURCES) $(nodist_random_module_SOURCES) \ + $(read_module_SOURCES) $(nodist_read_module_SOURCES) \ + $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) \ + $(regexp_module_SOURCES) $(nodist_regexp_module_SOURCES) \ + $(reiserfs_module_SOURCES) $(nodist_reiserfs_module_SOURCES) \ + $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) \ + $(romfs_module_SOURCES) $(nodist_romfs_module_SOURCES) \ + $(scsi_module_SOURCES) $(nodist_scsi_module_SOURCES) \ + $(sdl_module_SOURCES) $(nodist_sdl_module_SOURCES) \ + $(search_module_SOURCES) $(nodist_search_module_SOURCES) \ + $(search_fs_file_module_SOURCES) \ + $(nodist_search_fs_file_module_SOURCES) \ + $(search_fs_uuid_module_SOURCES) \ + $(nodist_search_fs_uuid_module_SOURCES) \ + $(search_label_module_SOURCES) \ + $(nodist_search_label_module_SOURCES) \ + $(sendkey_module_SOURCES) $(nodist_sendkey_module_SOURCES) \ + $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) \ + $(setjmp_module_SOURCES) $(nodist_setjmp_module_SOURCES) \ + $(setjmp_test_module_SOURCES) \ + $(nodist_setjmp_test_module_SOURCES) $(setpci_module_SOURCES) \ + $(nodist_setpci_module_SOURCES) $(sfs_module_SOURCES) \ + $(nodist_sfs_module_SOURCES) $(shift_test_module_SOURCES) \ + $(nodist_shift_test_module_SOURCES) \ + $(signature_test_module_SOURCES) \ + $(nodist_signature_test_module_SOURCES) \ + $(sleep_module_SOURCES) $(nodist_sleep_module_SOURCES) \ + $(sleep_test_module_SOURCES) \ + $(nodist_sleep_test_module_SOURCES) $(spkmodem_module_SOURCES) \ + $(nodist_spkmodem_module_SOURCES) $(squash4_module_SOURCES) \ + $(nodist_squash4_module_SOURCES) $(suspend_module_SOURCES) \ + $(nodist_suspend_module_SOURCES) $(syslinuxcfg_module_SOURCES) \ + $(nodist_syslinuxcfg_module_SOURCES) $(tar_module_SOURCES) \ + $(nodist_tar_module_SOURCES) $(terminal_module_SOURCES) \ + $(nodist_terminal_module_SOURCES) $(terminfo_module_SOURCES) \ + $(nodist_terminfo_module_SOURCES) $(test_module_SOURCES) \ + $(nodist_test_module_SOURCES) $(test_blockarg_module_SOURCES) \ + $(nodist_test_blockarg_module_SOURCES) \ + $(testload_module_SOURCES) $(nodist_testload_module_SOURCES) \ + $(testspeed_module_SOURCES) $(nodist_testspeed_module_SOURCES) \ + $(tftp_module_SOURCES) $(nodist_tftp_module_SOURCES) \ + $(tga_module_SOURCES) $(nodist_tga_module_SOURCES) \ + $(time_module_SOURCES) $(nodist_time_module_SOURCES) \ + $(tr_module_SOURCES) $(nodist_tr_module_SOURCES) \ + $(trig_module_SOURCES) $(nodist_trig_module_SOURCES) \ + $(true_module_SOURCES) $(nodist_true_module_SOURCES) \ + $(truecrypt_module_SOURCES) $(nodist_truecrypt_module_SOURCES) \ + $(ubootnet_module_SOURCES) $(nodist_ubootnet_module_SOURCES) \ + $(udf_module_SOURCES) $(nodist_udf_module_SOURCES) \ + $(ufs1_module_SOURCES) $(nodist_ufs1_module_SOURCES) \ + $(ufs1_be_module_SOURCES) $(nodist_ufs1_be_module_SOURCES) \ + $(ufs2_module_SOURCES) $(nodist_ufs2_module_SOURCES) \ + $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) \ + $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) \ + $(usb_keyboard_module_SOURCES) \ + $(nodist_usb_keyboard_module_SOURCES) $(usbms_module_SOURCES) \ + $(nodist_usbms_module_SOURCES) \ + $(usbserial_common_module_SOURCES) \ + $(nodist_usbserial_common_module_SOURCES) \ + $(usbserial_ftdi_module_SOURCES) \ + $(nodist_usbserial_ftdi_module_SOURCES) \ + $(usbserial_pl2303_module_SOURCES) \ + $(nodist_usbserial_pl2303_module_SOURCES) \ + $(usbserial_usbdebug_module_SOURCES) \ + $(nodist_usbserial_usbdebug_module_SOURCES) \ + $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) \ + $(vbe_module_SOURCES) $(nodist_vbe_module_SOURCES) \ + $(verify_module_SOURCES) $(nodist_verify_module_SOURCES) \ + $(vga_module_SOURCES) $(nodist_vga_module_SOURCES) \ + $(vga_text_module_SOURCES) $(nodist_vga_text_module_SOURCES) \ + $(video_module_SOURCES) $(nodist_video_module_SOURCES) \ + $(video_bochs_module_SOURCES) \ + $(nodist_video_bochs_module_SOURCES) \ + $(video_cirrus_module_SOURCES) \ + $(nodist_video_cirrus_module_SOURCES) \ + $(video_colors_module_SOURCES) \ + $(nodist_video_colors_module_SOURCES) \ + $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) \ + $(videoinfo_module_SOURCES) $(nodist_videoinfo_module_SOURCES) \ + $(videotest_module_SOURCES) $(nodist_videotest_module_SOURCES) \ + $(videotest_checksum_module_SOURCES) \ + $(nodist_videotest_checksum_module_SOURCES) \ + $(xen_boot_module_SOURCES) $(nodist_xen_boot_module_SOURCES) \ + $(xfs_module_SOURCES) $(nodist_xfs_module_SOURCES) \ + $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) \ + $(xnu_uuid_module_SOURCES) $(nodist_xnu_uuid_module_SOURCES) \ + $(xnu_uuid_test_module_SOURCES) \ + $(nodist_xnu_uuid_test_module_SOURCES) \ + $(xz_decompress_image_SOURCES) \ + $(nodist_xz_decompress_image_SOURCES) $(xzio_module_SOURCES) \ + $(nodist_xzio_module_SOURCES) $(zfs_module_SOURCES) \ + $(nodist_zfs_module_SOURCES) $(zfscrypt_module_SOURCES) \ + $(nodist_zfscrypt_module_SOURCES) $(zfsinfo_module_SOURCES) \ + $(nodist_zfsinfo_module_SOURCES) +DIST_SOURCES = $(am__acpi_module_SOURCES_DIST) \ + $(adler32_module_SOURCES) $(affs_module_SOURCES) \ + $(afs_module_SOURCES) $(am__ahci_module_SOURCES_DIST) \ + $(all_video_module_SOURCES) $(am__aout_module_SOURCES_DIST) \ + $(am__appleldr_module_SOURCES_DIST) $(archelp_module_SOURCES) \ + $(am__at_keyboard_module_SOURCES_DIST) \ + $(am__ata_module_SOURCES_DIST) \ + $(am__backtrace_module_SOURCES_DIST) $(bfs_module_SOURCES) \ + $(am__biosdisk_module_SOURCES_DIST) $(bitmap_module_SOURCES) \ + $(bitmap_scale_module_SOURCES) $(blocklist_module_SOURCES) \ + $(am__boot_image_SOURCES_DIST) $(am__boot_module_SOURCES_DIST) \ + $(am__boot_hybrid_image_SOURCES_DIST) \ + $(am__boottime_module_SOURCES_DIST) \ + $(am__bsd_module_SOURCES_DIST) $(bswap_test_module_SOURCES) \ + $(btrfs_module_SOURCES) $(am__bufio_module_SOURCES_DIST) \ + $(am__cacheinfo_module_SOURCES_DIST) $(cat_module_SOURCES) \ + $(cbfs_module_SOURCES) $(am__cbls_module_SOURCES_DIST) \ + $(am__cbmemc_module_SOURCES_DIST) \ + $(am__cbtable_module_SOURCES_DIST) \ + $(am__cbtime_module_SOURCES_DIST) \ + $(am__cdboot_image_SOURCES_DIST) \ + $(am__chain_module_SOURCES_DIST) \ + $(cmdline_cat_test_module_SOURCES) \ + $(am__cmosdump_module_SOURCES_DIST) \ + $(am__cmostest_module_SOURCES_DIST) $(cmp_module_SOURCES) \ + $(cmp_test_module_SOURCES) $(configfile_module_SOURCES) \ + $(cpio_module_SOURCES) $(cpio_be_module_SOURCES) \ + $(am__cpuid_module_SOURCES_DIST) $(crc64_module_SOURCES) \ + $(crypto_module_SOURCES) $(cryptodisk_module_SOURCES) \ + $(am__cs5536_module_SOURCES_DIST) $(ctz_test_module_SOURCES) \ + $(date_module_SOURCES) $(datehook_module_SOURCES) \ + $(am__datetime_module_SOURCES_DIST) $(disk_module_SOURCES) \ + $(am__diskboot_image_SOURCES_DIST) \ + $(diskfilter_module_SOURCES) $(am__div_module_SOURCES_DIST) \ + $(div_test_module_SOURCES) $(dm_nv_module_SOURCES) \ + $(am__drivemap_module_SOURCES_DIST) $(echo_module_SOURCES) \ + $(am__efi_gop_module_SOURCES_DIST) \ + $(am__efi_uga_module_SOURCES_DIST) \ + $(am__efiemu_module_SOURCES_DIST) \ + $(am__efifwsetup_module_SOURCES_DIST) \ + $(am__efinet_module_SOURCES_DIST) \ + $(am__ehci_module_SOURCES_DIST) $(elf_module_SOURCES) \ + $(am__emunet_module_SOURCES_DIST) \ + $(am__emupci_module_SOURCES_DIST) \ + $(am__escc_module_SOURCES_DIST) $(eval_module_SOURCES) \ + $(exfat_module_SOURCES) $(exfctest_module_SOURCES) \ + $(ext2_module_SOURCES) $(am__extcmd_module_SOURCES_DIST) \ + $(fat_module_SOURCES) $(am__fdt_module_SOURCES_DIST) \ + $(file_module_SOURCES) $(am__fixvideo_module_SOURCES_DIST) \ + $(am__font_module_SOURCES_DIST) \ + $(am__freedos_module_SOURCES_DIST) $(fshelp_module_SOURCES) \ + $(functional_test_module_SOURCES) \ + $(am__fwstart_image_SOURCES_DIST) \ + $(am__fwstart_fuloong2f_image_SOURCES_DIST) \ + $(gcry_arcfour_module_SOURCES) $(gcry_blowfish_module_SOURCES) \ + $(gcry_camellia_module_SOURCES) $(gcry_cast5_module_SOURCES) \ + $(gcry_crc_module_SOURCES) $(gcry_des_module_SOURCES) \ + $(gcry_dsa_module_SOURCES) $(gcry_idea_module_SOURCES) \ + $(gcry_md4_module_SOURCES) $(gcry_md5_module_SOURCES) \ + $(gcry_rfc2268_module_SOURCES) $(gcry_rijndael_module_SOURCES) \ + $(gcry_rmd160_module_SOURCES) $(gcry_rsa_module_SOURCES) \ + $(gcry_seed_module_SOURCES) $(gcry_serpent_module_SOURCES) \ + $(gcry_sha1_module_SOURCES) $(gcry_sha256_module_SOURCES) \ + $(gcry_sha512_module_SOURCES) $(gcry_tiger_module_SOURCES) \ + $(gcry_twofish_module_SOURCES) \ + $(gcry_whirlpool_module_SOURCES) \ + $(am__gdb_module_SOURCES_DIST) $(geli_module_SOURCES) \ + $(gettext_module_SOURCES) $(gfxmenu_module_SOURCES) \ + $(am__gfxterm_module_SOURCES_DIST) \ + $(gfxterm_background_module_SOURCES) \ + $(gfxterm_menu_module_SOURCES) $(gptsync_module_SOURCES) \ + $(am__grub_emu_SOURCES_DIST) $(am__grub_emu_lite_SOURCES_DIST) \ + $(gzio_module_SOURCES) $(am__halt_module_SOURCES_DIST) \ + $(hashsum_module_SOURCES) $(am__hdparm_module_SOURCES_DIST) \ + $(hello_module_SOURCES) $(help_module_SOURCES) \ + $(hexdump_module_SOURCES) $(hfs_module_SOURCES) \ + $(hfsplus_module_SOURCES) $(hfspluscomp_module_SOURCES) \ + $(http_module_SOURCES) $(am__ieee1275_fb_module_SOURCES_DIST) \ + $(am__iorw_module_SOURCES_DIST) $(iso9660_module_SOURCES) \ + $(jfs_module_SOURCES) $(jpeg_module_SOURCES) \ + $(am__kernel_exec_SOURCES_DIST) \ + $(am__keylayouts_module_SOURCES_DIST) \ + $(keystatus_module_SOURCES) $(ldm_module_SOURCES) \ + $(am__legacy_password_test_module_SOURCES_DIST) \ + $(am__legacycfg_module_SOURCES_DIST) \ + $(am__linux_module_SOURCES_DIST) \ + $(am__linux16_module_SOURCES_DIST) \ + $(am__lnxboot_image_SOURCES_DIST) \ + $(am__loadbios_module_SOURCES_DIST) $(loadenv_module_SOURCES) \ + $(loopback_module_SOURCES) $(ls_module_SOURCES) \ + $(am__lsacpi_module_SOURCES_DIST) \ + $(am__lsapm_module_SOURCES_DIST) \ + $(am__lsdev_module_SOURCES_DIST) \ + $(am__lsefi_module_SOURCES_DIST) \ + $(am__lsefimmap_module_SOURCES_DIST) \ + $(am__lsefisystab_module_SOURCES_DIST) \ + $(lsmmap_module_SOURCES) $(am__lspci_module_SOURCES_DIST) \ + $(am__lssal_module_SOURCES_DIST) \ + $(am__lsspd_module_SOURCES_DIST) \ + $(am__lsxen_module_SOURCES_DIST) $(luks_module_SOURCES) \ + $(lvm_module_SOURCES) \ + $(am__lzma_decompress_image_SOURCES_DIST) \ + $(lzopio_module_SOURCES) $(macbless_module_SOURCES) \ + $(macho_module_SOURCES) $(am__mda_text_module_SOURCES_DIST) \ + $(mdraid09_module_SOURCES) $(mdraid09_be_module_SOURCES) \ + $(mdraid1x_module_SOURCES) $(memdisk_module_SOURCES) \ + $(memrw_module_SOURCES) $(minicmd_module_SOURCES) \ + $(minix_module_SOURCES) $(minix2_module_SOURCES) \ + $(minix2_be_module_SOURCES) $(minix3_module_SOURCES) \ + $(minix3_be_module_SOURCES) $(minix_be_module_SOURCES) \ + $(am__mmap_module_SOURCES_DIST) \ + $(am__morse_module_SOURCES_DIST) $(mpi_module_SOURCES) \ + $(msdospart_module_SOURCES) $(mul_test_module_SOURCES) \ + $(am__multiboot_module_SOURCES_DIST) \ + $(am__multiboot2_module_SOURCES_DIST) \ + $(am__nand_module_SOURCES_DIST) \ + $(am__nativedisk_module_SOURCES_DIST) $(net_module_SOURCES) \ + $(newc_module_SOURCES) $(nilfs2_module_SOURCES) \ + $(am__none_decompress_image_SOURCES_DIST) \ + $(normal_module_SOURCES) $(ntfs_module_SOURCES) \ + $(ntfscomp_module_SOURCES) $(am__ntldr_module_SOURCES_DIST) \ + $(odc_module_SOURCES) $(offsetio_module_SOURCES) \ + $(am__ofnet_module_SOURCES_DIST) \ + $(am__ohci_module_SOURCES_DIST) $(part_acorn_module_SOURCES) \ + $(part_amiga_module_SOURCES) $(part_apple_module_SOURCES) \ + $(part_bsd_module_SOURCES) $(part_dfly_module_SOURCES) \ + $(part_dvh_module_SOURCES) $(part_gpt_module_SOURCES) \ + $(part_msdos_module_SOURCES) $(part_plan_module_SOURCES) \ + $(part_sun_module_SOURCES) $(part_sunpc_module_SOURCES) \ + $(parttool_module_SOURCES) $(password_module_SOURCES) \ + $(password_pbkdf2_module_SOURCES) \ + $(am__pata_module_SOURCES_DIST) $(pbkdf2_module_SOURCES) \ + $(pbkdf2_test_module_SOURCES) $(am__pci_module_SOURCES_DIST) \ + $(am__pcidump_module_SOURCES_DIST) \ + $(am__plan9_module_SOURCES_DIST) \ + $(am__play_module_SOURCES_DIST) $(png_module_SOURCES) \ + $(priority_queue_module_SOURCES) $(probe_module_SOURCES) \ + $(procfs_module_SOURCES) $(progress_module_SOURCES) \ + $(am__pxe_module_SOURCES_DIST) \ + $(am__pxeboot_image_SOURCES_DIST) \ + $(am__pxechain_module_SOURCES_DIST) $(raid5rec_module_SOURCES) \ + $(raid6rec_module_SOURCES) $(am__random_module_SOURCES_DIST) \ + $(read_module_SOURCES) $(am__reboot_module_SOURCES_DIST) \ + $(regexp_module_SOURCES) $(reiserfs_module_SOURCES) \ + $(am__relocator_module_SOURCES_DIST) $(romfs_module_SOURCES) \ + $(scsi_module_SOURCES) $(am__sdl_module_SOURCES_DIST) \ + $(search_module_SOURCES) $(search_fs_file_module_SOURCES) \ + $(search_fs_uuid_module_SOURCES) \ + $(search_label_module_SOURCES) \ + $(am__sendkey_module_SOURCES_DIST) \ + $(am__serial_module_SOURCES_DIST) $(setjmp_module_SOURCES) \ + $(setjmp_test_module_SOURCES) \ + $(am__setpci_module_SOURCES_DIST) $(sfs_module_SOURCES) \ + $(shift_test_module_SOURCES) $(signature_test_module_SOURCES) \ + $(sleep_module_SOURCES) $(sleep_test_module_SOURCES) \ + $(am__spkmodem_module_SOURCES_DIST) $(squash4_module_SOURCES) \ + $(am__suspend_module_SOURCES_DIST) \ + $(syslinuxcfg_module_SOURCES) $(tar_module_SOURCES) \ + $(terminal_module_SOURCES) $(am__terminfo_module_SOURCES_DIST) \ + $(test_module_SOURCES) $(test_blockarg_module_SOURCES) \ + $(testload_module_SOURCES) $(testspeed_module_SOURCES) \ + $(tftp_module_SOURCES) $(tga_module_SOURCES) \ + $(time_module_SOURCES) $(tr_module_SOURCES) \ + $(trig_module_SOURCES) $(true_module_SOURCES) \ + $(am__truecrypt_module_SOURCES_DIST) \ + $(am__ubootnet_module_SOURCES_DIST) $(udf_module_SOURCES) \ + $(ufs1_module_SOURCES) $(ufs1_be_module_SOURCES) \ + $(ufs2_module_SOURCES) $(am__uhci_module_SOURCES_DIST) \ + $(am__usb_module_SOURCES_DIST) \ + $(am__usb_keyboard_module_SOURCES_DIST) \ + $(am__usbms_module_SOURCES_DIST) \ + $(am__usbserial_common_module_SOURCES_DIST) \ + $(am__usbserial_ftdi_module_SOURCES_DIST) \ + $(am__usbserial_pl2303_module_SOURCES_DIST) \ + $(am__usbserial_usbdebug_module_SOURCES_DIST) \ + $(am__usbtest_module_SOURCES_DIST) \ + $(am__vbe_module_SOURCES_DIST) $(verify_module_SOURCES) \ + $(am__vga_module_SOURCES_DIST) \ + $(am__vga_text_module_SOURCES_DIST) \ + $(am__video_module_SOURCES_DIST) \ + $(am__video_bochs_module_SOURCES_DIST) \ + $(am__video_cirrus_module_SOURCES_DIST) \ + $(video_colors_module_SOURCES) \ + $(am__video_fb_module_SOURCES_DIST) \ + $(videoinfo_module_SOURCES) $(videotest_module_SOURCES) \ + $(videotest_checksum_module_SOURCES) \ + $(am__xen_boot_module_SOURCES_DIST) $(xfs_module_SOURCES) \ + $(am__xnu_module_SOURCES_DIST) $(xnu_uuid_module_SOURCES) \ + $(xnu_uuid_test_module_SOURCES) \ + $(am__xz_decompress_image_SOURCES_DIST) $(xzio_module_SOURCES) \ + $(zfs_module_SOURCES) $(zfscrypt_module_SOURCES) \ + $(zfsinfo_module_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +am__dist_noinst_DATA_DIST = kern/disk_common.c gentrigtables.c \ + commands/search.c efiemu/prepare.c efiemu/loadcore.c \ + efiemu/runtime/efiemu.S efiemu/runtime/efiemu.c kern/elfXX.c \ + lib/libgcrypt-grub/cipher/crypto.lst \ + lib/i386/relocator_common.S kern/powerpc/cache_flush.S \ + lib/i386/setjmp.S lib/mips/setjmp.S lib/x86_64/setjmp.S \ + lib/sparc64/setjmp.S lib/powerpc/setjmp.S lib/ia64/setjmp.S \ + lib/ia64/longjmp.S lib/arm/setjmp.S lib/arm64/setjmp.S \ + loader/i386/bsdXX.c loader/i386/bsd_pagetable.c \ + loader/multiboot_elfxx.c loader/machoXX.c script/yylex.l \ + script/parser.y commands/fileXX.c loader/i386/xen_fileXX.c \ + video/sm712_init.c video/sis315_init.c kern/arm/cache.S \ + osdep/unix/exec.c osdep/unix/emuconsole.c \ + osdep/windows/emuconsole.c osdep/unix/dl.c osdep/windows/dl.c \ + osdep/linux/emunet.c osdep/basic/emunet.c osdep/unix/cputime.c \ + osdep/windows/cputime.c kern/i386/int.S kern/i386/realmode.S \ + boot/i386/pc/lzma_decode.S kern/mips/cache_flush.S \ + gensyminfo.sh.in genmod.sh.in modinfo.sh.in gmodule.pl.in \ + gdb_grub.in boot/powerpc/grub.chrp.in \ + boot/powerpc/bootinfo.txt.in +DATA = $(dist_grubconf_DATA) $(dist_noinst_DATA) $(noinst_DATA) \ + $(pkgdata_DATA) $(platform_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__DIST_COMMON = $(srcdir)/Makefile.core.am $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp \ + $(top_srcdir)/build-aux/test-driver \ + $(top_srcdir)/conf/Makefile.common +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibexecdir = @pkglibexecdir@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +BOOT_TIME_STATS = @BOOT_TIME_STATS@ +BSS_START_SYMBOL = @BSS_START_SYMBOL@ +BUILD_CC = @BUILD_CC@ +BUILD_CFLAGS = @BUILD_CFLAGS@ +BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ $(CPPFLAGS_DEFAULT) +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_FREETYPE = @BUILD_FREETYPE@ +BUILD_LDFLAGS = @BUILD_LDFLAGS@ +BUILD_LIBM = @BUILD_LIBM@ +BUILD_SIZEOF_LONG = @BUILD_SIZEOF_LONG@ +BUILD_SIZEOF_VOID_P = @BUILD_SIZEOF_VOID_P@ +BUILD_WORDS_BIGENDIAN = @BUILD_WORDS_BIGENDIAN@ +CC = $(TARGET_CC) +CCAS = $(TARGET_CC) +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CMP = @CMP@ +CPP = $(TARGET_CC) +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = .deps-core +DISK_CACHE_STATS = @DISK_CACHE_STATS@ +DJVU_FONT_SOURCE = @DJVU_FONT_SOURCE@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EFIEMU64_LINK_FORMAT = @EFIEMU64_LINK_FORMAT@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +END_SYMBOL = @END_SYMBOL@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FLOAT_H = @FLOAT_H@ +FNMATCH_H = @FNMATCH_H@ +FONT_SOURCE = @FONT_SOURCE@ +FREETYPE = @FREETYPE@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GRUB_BOOT_MACHINE_LINK_ADDR = @GRUB_BOOT_MACHINE_LINK_ADDR@ +GRUB_PLATFORM = @GRUB_PLATFORM@ +GRUB_TARGET_CPU = @GRUB_TARGET_CPU@ +HAVE_ASM_USCORE = @HAVE_ASM_USCORE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FONT_SOURCE = @HAVE_FONT_SOURCE@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HOST_CC = @HOST_CC@ +HOST_CCASFLAGS = @HOST_CCASFLAGS@ +HOST_CFLAGS = @HOST_CFLAGS@ +HOST_CPPFLAGS = @HOST_CPPFLAGS@ +HOST_LDFLAGS = @HOST_LDFLAGS@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBDEVMAPPER = @LIBDEVMAPPER@ +LIBGEOM = @LIBGEOM@ +LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ +LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBLZMA = @LIBLZMA@ +LIBNVPAIR = @LIBNVPAIR@ +LIBOBJS = @LIBOBJS@ +LIBPCIACCESS = @LIBPCIACCESS@ +LIBS = @LIBS@ +LIBSDL = @LIBSDL@ +LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ +LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ +LIBUTIL = @LIBUTIL@ +LIBZFS = @LIBZFS@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = $(TARGET_RANLIB) +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDALIGN_H = @STDALIGN_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = $(TARGET_STRIP) +SYSEXITS_H = @SYSEXITS_H@ +TARGET_APPLE_LINKER = @TARGET_APPLE_LINKER@ +TARGET_CC = @TARGET_CC@ +TARGET_CCAS = @TARGET_CCAS@ +TARGET_CCASFLAGS = @TARGET_CCASFLAGS@ +TARGET_CC_VERSION = @TARGET_CC_VERSION@ +TARGET_CFLAGS = @TARGET_CFLAGS@ +TARGET_CPP = @TARGET_CPP@ +TARGET_CPPFLAGS = @TARGET_CPPFLAGS@ +TARGET_DECOMPRESSOR_LINK_ADDR = @TARGET_DECOMPRESSOR_LINK_ADDR@ +TARGET_IMG_BASE_LDOPT = @TARGET_IMG_BASE_LDOPT@ +TARGET_IMG_CFLAGS = @TARGET_IMG_CFLAGS@ +TARGET_IMG_LDFLAGS = @TARGET_IMG_LDFLAGS@ +TARGET_LDFLAGS = @TARGET_LDFLAGS@ +TARGET_LDFLAGS_OLDMAGIC = @TARGET_LDFLAGS_OLDMAGIC@ +TARGET_LINK_ADDR = @TARGET_LINK_ADDR@ +TARGET_MODULE_FORMAT = @TARGET_MODULE_FORMAT@ +TARGET_NM = @TARGET_NM@ +TARGET_NMFLAGS_DEFINED_ONLY = @TARGET_NMFLAGS_DEFINED_ONLY@ +TARGET_NMFLAGS_MINUS_P = @TARGET_NMFLAGS_MINUS_P@ +TARGET_OBJ2ELF = @TARGET_OBJ2ELF@ +TARGET_OBJCONV = @TARGET_OBJCONV@ +TARGET_OBJCOPY = @TARGET_OBJCOPY@ +TARGET_RANLIB = @TARGET_RANLIB@ +TARGET_STRIP = @TARGET_STRIP@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_FREETYPE = @ac_ct_FREETYPE@ +ac_ct_TARGET_CC = @ac_ct_TARGET_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +bootdirname = @bootdirname@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_freetype_cflags = @build_freetype_cflags@ +build_freetype_libs = @build_freetype_libs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_efiemu = @enable_efiemu@ +enable_grub_emu_pci = @enable_grub_emu_pci@ +enable_grub_emu_sdl = @enable_grub_emu_sdl@ +enable_grub_mkfont = @enable_grub_mkfont@ +enable_grub_mount = @enable_grub_mount@ +exec_prefix = @exec_prefix@ +freetype_cflags = @freetype_cflags@ +freetype_libs = @freetype_libs@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +grub_bios_setup = @grub_bios_setup@ +grub_editenv = @grub_editenv@ +grub_file = @grub_file@ +grub_glue_efi = @grub_glue_efi@ +grub_install = @grub_install@ +grub_mkconfig = @grub_mkconfig@ +grub_mkfont = @grub_mkfont@ +grub_mkimage = @grub_mkimage@ +grub_mklayout = @grub_mklayout@ +grub_mkpasswd_pbkdf2 = @grub_mkpasswd_pbkdf2@ +grub_mkrelpath = @grub_mkrelpath@ +grub_mkrescue = @grub_mkrescue@ +grub_probe = @grub_probe@ +grub_reboot = @grub_reboot@ +grub_render_label = @grub_render_label@ +grub_script_check = @grub_script_check@ +grub_set_default = @grub_set_default@ +grub_sparc64_setup = @grub_sparc64_setup@ +grubdirname = @grubdirname@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_kernel = @host_kernel@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +platform = @platform@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = subdir-objects -Wno-portability +CFLAGS_PLATFORM = $(am__append_1) $(am__append_2) +@COND_arm_TRUE@@COND_emu_FALSE@LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache + +# Platform specific options +@COND_sparc64_ieee1275_TRUE@LDFLAGS_PLATFORM = -Wl,-melf64_sparc + +# Other options +CPPFLAGS_DEFAULT = -DGRUB_FILE=\"$(subst $(srcdir)/,,$<)\" \ + -I$(builddir) -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) \ + -I$(top_srcdir)/include -I$(top_builddir)/include \ + -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/ +CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1 +CFLAGS_KERNEL = $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) +CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 +CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx +CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding +LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d +CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +CFLAGS_IMAGE = $(CFLAGS_PLATFORM) -fno-builtin +LDFLAGS_IMAGE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S +CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) +CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +CFLAGS_PROGRAM = $(CFLAGS_PLATFORM) +LDFLAGS_PROGRAM = $(LDFLAGS_PLATFORM) +CPPFLAGS_PROGRAM = $(CPPFLAGS_PLATFORM) +CCASFLAGS_PROGRAM = $(CCASFLAGS_PLATFORM) +CFLAGS_LIBRARY = $(CFLAGS_PLATFORM) -fno-builtin +CPPFLAGS_LIBRARY = $(CPPFLAGS_PLATFORM) +CCASFLAGS_LIBRARY = $(CCASFLAGS_PLATFORM) + +# Other variables +grubconfdir = $(sysconfdir)/grub.d +platformdir = $(pkglibdir)/$(target_cpu)-$(platform) +starfielddir = $(pkgdatadir)/themes/starfield +CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion +CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/gnulib -I$(top_srcdir)/grub-core/gnulib +CFLAGS_POSIX = -fno-builtin +CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap +CFLAGS_GCRY = -Wno-error -Wno-missing-field-initializers -Wno-redundant-decls -Wno-undef $(CFLAGS_POSIX) +CPPFLAGS_GCRY = -I$(top_srcdir)/grub-core/lib/libgcrypt_wrap $(CPPFLAGS_POSIX) -D_GCRYPT_IN_LIBGCRYPT=1 -I$(top_srcdir)/include/grub/gcrypt +CPPFLAGS_EFIEMU = -I$(top_srcdir)/grub-core/efiemu/runtime + +# List file macros for recognizing /interesting/ modules +CPPFLAGS_FS_LIST = -Dgrub_fs_register=FS_LIST_MARKER +CPPFLAGS_VIDEO_LIST = -Dgrub_video_register=VIDEO_LIST_MARKER +CPPFLAGS_PARTMAP_LIST = -Dgrub_partition_map_register=PARTMAP_LIST_MARKER +CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER +CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)' \ + '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)' +CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \ + $(CPPFLAGS_PARTTOOL_LIST) $(CPPFLAGS_PARTMAP_LIST) \ + $(CPPFLAGS_TERMINAL_LIST) $(CPPFLAGS_COMMAND_LIST) + + +# Define these variables to calm down automake +IMG_FILES = +MOD_FILES = disk.mod trig.mod $(am__append_8) $(am__append_15) \ + $(am__append_22) $(am__append_29) $(am__append_36) \ + $(am__append_43) $(am__append_50) $(am__append_57) \ + $(am__append_64) $(am__append_71) $(am__append_78) \ + $(am__append_85) $(am__append_92) $(am__append_99) \ + $(am__append_106) $(am__append_113) $(am__append_120) \ + $(am__append_127) $(am__append_134) $(am__append_141) \ + $(am__append_148) $(am__append_155) $(am__append_162) \ + $(am__append_169) $(am__append_176) $(am__append_183) \ + $(am__append_190) $(am__append_197) $(am__append_204) \ + $(am__append_211) $(am__append_218) $(am__append_225) \ + $(am__append_232) $(am__append_239) $(am__append_246) \ + $(am__append_253) $(am__append_260) $(am__append_267) \ + $(am__append_274) $(am__append_281) $(am__append_288) \ + $(am__append_295) $(am__append_302) $(am__append_309) \ + $(am__append_316) $(am__append_323) $(am__append_330) \ + $(am__append_337) $(am__append_344) $(am__append_351) \ + $(am__append_358) $(am__append_365) $(am__append_372) \ + $(am__append_379) $(am__append_386) $(am__append_393) \ + $(am__append_400) $(am__append_407) $(am__append_414) \ + $(am__append_421) $(am__append_428) $(am__append_435) \ + $(am__append_442) $(am__append_449) $(am__append_456) \ + $(am__append_463) $(am__append_470) $(am__append_477) \ + $(am__append_484) $(am__append_491) $(am__append_498) \ + $(am__append_505) $(am__append_512) $(am__append_519) \ + $(am__append_526) $(am__append_533) $(am__append_540) \ + $(am__append_547) $(am__append_554) $(am__append_561) \ + $(am__append_568) $(am__append_575) $(am__append_582) \ + $(am__append_589) $(am__append_596) $(am__append_603) \ + $(am__append_610) $(am__append_617) $(am__append_624) \ + $(am__append_631) $(am__append_638) $(am__append_645) \ + $(am__append_652) $(am__append_659) $(am__append_666) \ + $(am__append_673) $(am__append_680) $(am__append_687) \ + $(am__append_694) $(am__append_701) $(am__append_708) \ + $(am__append_715) $(am__append_722) $(am__append_729) \ + $(am__append_736) $(am__append_743) $(am__append_750) \ + $(am__append_757) $(am__append_764) $(am__append_771) \ + $(am__append_778) $(am__append_785) $(am__append_792) \ + $(am__append_799) $(am__append_806) $(am__append_813) \ + $(am__append_820) $(am__append_827) $(am__append_834) \ + $(am__append_841) $(am__append_848) $(am__append_855) \ + $(am__append_862) $(am__append_869) $(am__append_876) \ + $(am__append_883) $(am__append_890) $(am__append_897) \ + $(am__append_904) $(am__append_911) $(am__append_918) \ + $(am__append_925) $(am__append_932) $(am__append_939) \ + $(am__append_946) $(am__append_953) $(am__append_960) \ + $(am__append_967) $(am__append_974) $(am__append_981) \ + $(am__append_988) regexp.mod $(am__append_995) \ + $(am__append_1002) $(am__append_1009) $(am__append_1016) \ + $(am__append_1023) $(am__append_1030) $(am__append_1037) \ + $(am__append_1044) $(am__append_1051) $(am__append_1058) \ + $(am__append_1065) $(am__append_1072) $(am__append_1079) \ + $(am__append_1086) $(am__append_1093) $(am__append_1100) \ + $(am__append_1107) $(am__append_1114) $(am__append_1121) \ + $(am__append_1128) $(am__append_1135) $(am__append_1142) \ + $(am__append_1149) $(am__append_1156) $(am__append_1163) \ + $(am__append_1170) $(am__append_1177) $(am__append_1184) \ + $(am__append_1191) $(am__append_1198) $(am__append_1205) \ + $(am__append_1212) $(am__append_1219) $(am__append_1226) \ + $(am__append_1233) $(am__append_1240) $(am__append_1247) \ + $(am__append_1254) $(am__append_1261) $(am__append_1268) \ + $(am__append_1275) blocklist.mod $(am__append_1282) \ + $(am__append_1289) $(am__append_1296) $(am__append_1303) \ + $(am__append_1310) $(am__append_1317) $(am__append_1324) \ + $(am__append_1331) $(am__append_1338) $(am__append_1345) \ + $(am__append_1352) $(am__append_1359) $(am__append_1366) \ + $(am__append_1373) $(am__append_1380) cat.mod cmp.mod \ + configfile.mod $(am__append_1387) $(am__append_1394) \ + $(am__append_1401) $(am__append_1408) $(am__append_1415) \ + $(am__append_1422) $(am__append_1429) $(am__append_1436) \ + $(am__append_1443) date.mod $(am__append_1450) echo.mod \ + eval.mod $(am__append_1457) $(am__append_1464) \ + $(am__append_1471) $(am__append_1478) $(am__append_1485) \ + $(am__append_1492) $(am__append_1499) $(am__append_1506) \ + $(am__append_1513) $(am__append_1520) $(am__append_1527) \ + gptsync.mod $(am__append_1534) $(am__append_1541) \ + $(am__append_1548) $(am__append_1555) $(am__append_1562) \ + $(am__append_1569) $(am__append_1576) $(am__append_1583) \ + $(am__append_1590) $(am__append_1597) $(am__append_1604) \ + $(am__append_1611) $(am__append_1618) $(am__append_1625) \ + $(am__append_1632) $(am__append_1639) $(am__append_1646) \ + $(am__append_1653) $(am__append_1660) $(am__append_1667) \ + $(am__append_1674) $(am__append_1681) $(am__append_1688) \ + $(am__append_1695) $(am__append_1702) $(am__append_1709) \ + $(am__append_1716) $(am__append_1723) $(am__append_1730) \ + $(am__append_1737) $(am__append_1744) $(am__append_1751) \ + $(am__append_1758) $(am__append_1765) $(am__append_1772) \ + $(am__append_1779) $(am__append_1786) $(am__append_1793) \ + hashsum.mod verify.mod $(am__append_1800) $(am__append_1807) \ + $(am__append_1814) $(am__append_1821) $(am__append_1828) \ + $(am__append_1835) $(am__append_1842) $(am__append_1849) \ + $(am__append_1856) help.mod hexdump.mod keystatus.mod \ + $(am__append_1863) $(am__append_1870) loadenv.mod ls.mod \ + lsmmap.mod $(am__append_1877) $(am__append_1884) \ + $(am__append_1891) $(am__append_1898) $(am__append_1905) \ + $(am__append_1912) $(am__append_1919) $(am__append_1926) \ + memrw.mod minicmd.mod parttool.mod password.mod \ + password_pbkdf2.mod $(am__append_1933) $(am__append_1940) \ + $(am__append_1947) $(am__append_1954) $(am__append_1961) \ + $(am__append_1968) $(am__append_1975) $(am__append_1982) \ + $(am__append_1989) $(am__append_1996) $(am__append_2003) \ + $(am__append_2010) $(am__append_2017) $(am__append_2024) \ + $(am__append_2031) $(am__append_2038) $(am__append_2045) \ + $(am__append_2052) $(am__append_2059) $(am__append_2066) \ + $(am__append_2073) probe.mod read.mod search.mod \ + search_fs_file.mod search_fs_uuid.mod search_label.mod \ + $(am__append_2080) $(am__append_2087) $(am__append_2094) \ + $(am__append_2101) $(am__append_2108) $(am__append_2115) \ + $(am__append_2122) $(am__append_2129) $(am__append_2136) \ + $(am__append_2143) $(am__append_2150) $(am__append_2157) \ + $(am__append_2164) $(am__append_2171) $(am__append_2178) \ + $(am__append_2185) sleep.mod $(am__append_2192) \ + $(am__append_2199) terminal.mod test.mod true.mod \ + $(am__append_2206) $(am__append_2213) $(am__append_2220) \ + $(am__append_2227) $(am__append_2234) $(am__append_2241) \ + $(am__append_2248) $(am__append_2255) videoinfo.mod \ + videotest.mod xnu_uuid.mod dm_nv.mod loopback.mod \ + cryptodisk.mod luks.mod geli.mod lvm.mod ldm.mod mdraid09.mod \ + mdraid09_be.mod mdraid1x.mod diskfilter.mod raid5rec.mod \ + raid6rec.mod scsi.mod memdisk.mod $(am__append_2262) \ + $(am__append_2269) $(am__append_2276) $(am__append_2283) \ + $(am__append_2290) $(am__append_2297) $(am__append_2304) \ + $(am__append_2311) $(am__append_2318) $(am__append_2325) \ + $(am__append_2332) $(am__append_2339) $(am__append_2346) \ + $(am__append_2353) $(am__append_2360) $(am__append_2367) \ + $(am__append_2374) $(am__append_2381) $(am__append_2388) \ + $(am__append_2395) $(am__append_2402) $(am__append_2409) \ + $(am__append_2416) $(am__append_2423) $(am__append_2430) \ + $(am__append_2437) $(am__append_2444) $(am__append_2451) \ + $(am__append_2458) $(am__append_2465) $(am__append_2472) \ + $(am__append_2479) $(am__append_2486) $(am__append_2493) \ + $(am__append_2500) $(am__append_2507) $(am__append_2514) \ + $(am__append_2521) $(am__append_2528) $(am__append_2535) \ + $(am__append_2542) $(am__append_2549) $(am__append_2556) \ + $(am__append_2563) $(am__append_2570) $(am__append_2577) \ + $(am__append_2584) $(am__append_2591) $(am__append_2598) \ + $(am__append_2605) $(am__append_2612) $(am__append_2619) \ + $(am__append_2626) $(am__append_2633) $(am__append_2640) \ + $(am__append_2647) $(am__append_2654) procfs.mod affs.mod \ + afs.mod bfs.mod btrfs.mod archelp.mod cbfs.mod cpio.mod \ + cpio_be.mod newc.mod odc.mod ext2.mod fat.mod exfat.mod \ + fshelp.mod hfs.mod hfsplus.mod hfspluscomp.mod iso9660.mod \ + jfs.mod minix.mod minix2.mod minix3.mod minix_be.mod \ + minix2_be.mod minix3_be.mod nilfs2.mod ntfs.mod ntfscomp.mod \ + reiserfs.mod romfs.mod sfs.mod squash4.mod tar.mod udf.mod \ + ufs1.mod ufs1_be.mod ufs2.mod xfs.mod zfs.mod zfscrypt.mod \ + zfsinfo.mod macbless.mod $(am__append_2661) gettext.mod \ + gfxmenu.mod hello.mod gzio.mod offsetio.mod $(am__append_2668) \ + $(am__append_2675) $(am__append_2682) $(am__append_2689) \ + $(am__append_2696) $(am__append_2703) $(am__append_2710) \ + $(am__append_2717) $(am__append_2724) $(am__append_2731) \ + $(am__append_2738) $(am__append_2745) $(am__append_2752) \ + $(am__append_2759) $(am__append_2766) $(am__append_2773) \ + $(am__append_2780) elf.mod crypto.mod pbkdf2.mod \ + $(am__append_2787) $(am__append_2794) $(am__append_2801) \ + $(am__append_2808) $(am__append_2815) $(am__append_2822) \ + $(am__append_2829) $(am__append_2836) $(am__append_2843) \ + $(am__append_2850) $(am__append_2857) $(am__append_2864) \ + $(am__append_2871) $(am__append_2878) $(am__append_2885) \ + $(am__append_2892) $(am__append_2899) $(am__append_2906) \ + $(am__append_2913) $(am__append_2920) $(am__append_2927) \ + $(am__append_2934) $(am__append_2941) $(am__append_2948) \ + $(am__append_2955) $(am__append_2962) $(am__append_2969) \ + $(am__append_2976) $(am__append_2983) $(am__append_2990) \ + $(am__append_2997) setjmp.mod $(am__append_3004) \ + $(am__append_3011) $(am__append_3018) $(am__append_3025) \ + $(am__append_3032) $(am__append_3039) $(am__append_3046) \ + $(am__append_3053) $(am__append_3060) $(am__append_3067) \ + $(am__append_3074) $(am__append_3081) $(am__append_3088) \ + $(am__append_3095) $(am__append_3102) $(am__append_3109) \ + $(am__append_3116) $(am__append_3123) $(am__append_3130) \ + $(am__append_3137) $(am__append_3144) $(am__append_3151) \ + $(am__append_3158) $(am__append_3165) $(am__append_3172) \ + $(am__append_3179) $(am__append_3186) $(am__append_3193) \ + $(am__append_3200) $(am__append_3207) $(am__append_3214) \ + $(am__append_3221) $(am__append_3228) $(am__append_3235) \ + $(am__append_3242) $(am__append_3249) $(am__append_3256) \ + $(am__append_3263) $(am__append_3270) $(am__append_3277) \ + $(am__append_3284) $(am__append_3291) $(am__append_3298) \ + $(am__append_3305) $(am__append_3312) $(am__append_3319) \ + $(am__append_3326) $(am__append_3333) $(am__append_3340) \ + $(am__append_3347) $(am__append_3354) $(am__append_3361) \ + $(am__append_3368) $(am__append_3375) $(am__append_3382) \ + $(am__append_3389) $(am__append_3396) $(am__append_3403) \ + $(am__append_3410) $(am__append_3417) $(am__append_3424) \ + $(am__append_3431) $(am__append_3438) $(am__append_3445) \ + $(am__append_3452) $(am__append_3459) $(am__append_3466) \ + $(am__append_3473) $(am__append_3480) $(am__append_3487) \ + macho.mod $(am__append_3494) $(am__append_3501) \ + $(am__append_3508) $(am__append_3515) $(am__append_3522) \ + $(am__append_3529) $(am__append_3536) $(am__append_3543) \ + $(am__append_3550) $(am__append_3557) $(am__append_3564) \ + $(am__append_3571) $(am__append_3578) $(am__append_3585) \ + $(am__append_3592) $(am__append_3599) $(am__append_3606) \ + $(am__append_3613) $(am__append_3620) $(am__append_3627) \ + $(am__append_3634) $(am__append_3641) normal.mod \ + part_acorn.mod part_amiga.mod part_apple.mod part_gpt.mod \ + part_msdos.mod part_sun.mod part_plan.mod part_dvh.mod \ + part_bsd.mod part_sunpc.mod part_dfly.mod msdospart.mod \ + $(am__append_3648) $(am__append_3655) $(am__append_3662) \ + $(am__append_3669) $(am__append_3676) $(am__append_3683) \ + $(am__append_3690) $(am__append_3697) $(am__append_3704) \ + $(am__append_3711) $(am__append_3718) $(am__append_3725) \ + $(am__append_3732) $(am__append_3739) $(am__append_3746) \ + $(am__append_3753) $(am__append_3760) $(am__append_3767) \ + $(am__append_3774) $(am__append_3781) $(am__append_3788) \ + $(am__append_3795) $(am__append_3802) $(am__append_3809) \ + gfxterm_background.mod $(am__append_3816) $(am__append_3823) \ + $(am__append_3830) $(am__append_3837) $(am__append_3844) \ + $(am__append_3851) $(am__append_3858) $(am__append_3865) \ + $(am__append_3872) $(am__append_3879) $(am__append_3886) \ + $(am__append_3893) $(am__append_3900) $(am__append_3907) \ + $(am__append_3914) $(am__append_3921) $(am__append_3928) \ + $(am__append_3935) $(am__append_3942) $(am__append_3949) \ + $(am__append_3956) $(am__append_3963) $(am__append_3970) \ + $(am__append_3977) $(am__append_3984) $(am__append_3991) \ + $(am__append_3998) $(am__append_4005) $(am__append_4012) \ + $(am__append_4019) $(am__append_4026) $(am__append_4033) \ + $(am__append_4040) $(am__append_4047) $(am__append_4054) \ + $(am__append_4061) $(am__append_4068) $(am__append_4075) \ + $(am__append_4082) $(am__append_4089) $(am__append_4096) \ + $(am__append_4103) $(am__append_4110) $(am__append_4117) \ + $(am__append_4124) $(am__append_4131) $(am__append_4138) \ + $(am__append_4145) functional_test.mod exfctest.mod \ + setjmp_test.mod signature_test.mod sleep_test.mod \ + xnu_uuid_test.mod pbkdf2_test.mod $(am__append_4152) \ + $(am__append_4159) $(am__append_4166) $(am__append_4173) \ + $(am__append_4180) $(am__append_4187) $(am__append_4194) \ + $(am__append_4201) $(am__append_4208) $(am__append_4215) \ + $(am__append_4222) $(am__append_4229) $(am__append_4236) \ + $(am__append_4243) $(am__append_4250) $(am__append_4257) \ + $(am__append_4264) $(am__append_4271) $(am__append_4278) \ + $(am__append_4285) $(am__append_4292) $(am__append_4299) \ + div_test.mod mul_test.mod shift_test.mod cmp_test.mod \ + ctz_test.mod bswap_test.mod videotest_checksum.mod \ + gfxterm_menu.mod cmdline_cat_test.mod bitmap.mod \ + bitmap_scale.mod $(am__append_4306) $(am__append_4313) \ + $(am__append_4320) $(am__append_4327) $(am__append_4334) \ + $(am__append_4341) $(am__append_4348) jpeg.mod png.mod tga.mod \ + $(am__append_4355) $(am__append_4362) $(am__append_4369) \ + $(am__append_4376) $(am__append_4383) $(am__append_4390) \ + $(am__append_4397) $(am__append_4404) $(am__append_4411) \ + $(am__append_4418) $(am__append_4425) $(am__append_4432) \ + $(am__append_4439) $(am__append_4446) $(am__append_4453) \ + $(am__append_4460) $(am__append_4467) $(am__append_4474) \ + $(am__append_4481) $(am__append_4488) $(am__append_4495) \ + $(am__append_4502) $(am__append_4509) $(am__append_4516) \ + $(am__append_4523) $(am__append_4530) $(am__append_4537) \ + $(am__append_4544) $(am__append_4551) $(am__append_4558) \ + $(am__append_4565) $(am__append_4572) $(am__append_4579) \ + $(am__append_4586) $(am__append_4593) video_colors.mod \ + $(am__append_4600) $(am__append_4607) datehook.mod net.mod \ + tftp.mod http.mod $(am__append_4614) $(am__append_4621) \ + $(am__append_4628) $(am__append_4635) $(am__append_4642) \ + $(am__append_4649) $(am__append_4656) $(am__append_4663) \ + $(am__append_4670) $(am__append_4677) $(am__append_4684) \ + $(am__append_4691) $(am__append_4698) $(am__append_4705) \ + $(am__append_4712) syslinuxcfg.mod test_blockarg.mod xzio.mod \ + lzopio.mod testload.mod $(am__append_4719) $(am__append_4726) \ + $(am__append_4733) $(am__append_4740) $(am__append_4747) \ + $(am__append_4754) $(am__append_4761) $(am__append_4768) \ + $(am__append_4775) $(am__append_4782) $(am__append_4789) \ + $(am__append_4796) $(am__append_4803) $(am__append_4810) \ + $(am__append_4817) $(am__append_4824) priority_queue.mod \ + time.mod $(am__append_4831) $(am__append_4838) adler32.mod \ + crc64.mod mpi.mod all_video.mod $(am__append_4845) \ + $(am__append_4852) $(am__append_4859) $(am__append_4866) \ + $(am__append_4873) $(am__append_4880) testspeed.mod tr.mod \ + progress.mod file.mod gcry_arcfour.mod gcry_blowfish.mod \ + gcry_camellia.mod gcry_cast5.mod gcry_crc.mod gcry_des.mod \ + gcry_dsa.mod gcry_idea.mod gcry_md4.mod gcry_md5.mod \ + gcry_rfc2268.mod gcry_rijndael.mod gcry_rmd160.mod \ + gcry_rsa.mod gcry_seed.mod gcry_serpent.mod gcry_sha1.mod \ + gcry_sha256.mod gcry_sha512.mod gcry_tiger.mod \ + gcry_twofish.mod gcry_whirlpool.mod +MODULE_FILES = disk.module$(EXEEXT) trig.module$(EXEEXT) \ + $(am__append_4) $(am__append_11) $(am__append_18) \ + $(am__append_25) $(am__append_32) $(am__append_39) \ + $(am__append_46) $(am__append_53) $(am__append_60) \ + $(am__append_67) $(am__append_74) $(am__append_81) \ + $(am__append_88) $(am__append_95) $(am__append_102) \ + $(am__append_109) $(am__append_116) $(am__append_123) \ + $(am__append_130) $(am__append_137) $(am__append_144) \ + $(am__append_151) $(am__append_158) $(am__append_165) \ + $(am__append_172) $(am__append_179) $(am__append_186) \ + $(am__append_193) $(am__append_200) $(am__append_207) \ + $(am__append_214) $(am__append_221) $(am__append_228) \ + $(am__append_235) $(am__append_242) $(am__append_249) \ + $(am__append_256) $(am__append_263) $(am__append_270) \ + $(am__append_277) $(am__append_284) $(am__append_291) \ + $(am__append_298) $(am__append_305) $(am__append_312) \ + $(am__append_319) $(am__append_326) $(am__append_333) \ + $(am__append_340) $(am__append_347) $(am__append_354) \ + $(am__append_361) $(am__append_368) $(am__append_375) \ + $(am__append_382) $(am__append_389) $(am__append_396) \ + $(am__append_403) $(am__append_410) $(am__append_417) \ + $(am__append_424) $(am__append_431) $(am__append_438) \ + $(am__append_445) $(am__append_452) $(am__append_459) \ + $(am__append_466) $(am__append_473) $(am__append_480) \ + $(am__append_487) $(am__append_494) $(am__append_501) \ + $(am__append_508) $(am__append_515) $(am__append_522) \ + $(am__append_529) $(am__append_536) $(am__append_543) \ + $(am__append_550) $(am__append_557) $(am__append_564) \ + $(am__append_571) $(am__append_578) $(am__append_585) \ + $(am__append_592) $(am__append_599) $(am__append_606) \ + $(am__append_613) $(am__append_620) $(am__append_627) \ + $(am__append_634) $(am__append_641) $(am__append_648) \ + $(am__append_655) $(am__append_662) $(am__append_669) \ + $(am__append_676) $(am__append_683) $(am__append_690) \ + $(am__append_697) $(am__append_704) $(am__append_711) \ + $(am__append_718) $(am__append_725) $(am__append_732) \ + $(am__append_739) $(am__append_746) $(am__append_753) \ + $(am__append_760) $(am__append_767) $(am__append_774) \ + $(am__append_781) $(am__append_788) $(am__append_795) \ + $(am__append_802) $(am__append_809) $(am__append_816) \ + $(am__append_823) $(am__append_830) $(am__append_837) \ + $(am__append_844) $(am__append_851) $(am__append_858) \ + $(am__append_865) $(am__append_872) $(am__append_879) \ + $(am__append_886) $(am__append_893) $(am__append_900) \ + $(am__append_907) $(am__append_914) $(am__append_921) \ + $(am__append_928) $(am__append_935) $(am__append_942) \ + $(am__append_949) $(am__append_956) $(am__append_963) \ + $(am__append_970) $(am__append_977) $(am__append_984) \ + regexp.module$(EXEEXT) $(am__append_991) $(am__append_998) \ + $(am__append_1005) $(am__append_1012) $(am__append_1019) \ + $(am__append_1026) $(am__append_1033) $(am__append_1040) \ + $(am__append_1047) $(am__append_1054) $(am__append_1061) \ + $(am__append_1068) $(am__append_1075) $(am__append_1082) \ + $(am__append_1089) $(am__append_1096) $(am__append_1103) \ + $(am__append_1110) $(am__append_1117) $(am__append_1124) \ + $(am__append_1131) $(am__append_1138) $(am__append_1145) \ + $(am__append_1152) $(am__append_1159) $(am__append_1166) \ + $(am__append_1173) $(am__append_1180) $(am__append_1187) \ + $(am__append_1194) $(am__append_1201) $(am__append_1208) \ + $(am__append_1215) $(am__append_1222) $(am__append_1229) \ + $(am__append_1236) $(am__append_1243) $(am__append_1250) \ + $(am__append_1257) $(am__append_1264) $(am__append_1271) \ + blocklist.module$(EXEEXT) $(am__append_1278) \ + $(am__append_1285) $(am__append_1292) $(am__append_1299) \ + $(am__append_1306) $(am__append_1313) $(am__append_1320) \ + $(am__append_1327) $(am__append_1334) $(am__append_1341) \ + $(am__append_1348) $(am__append_1355) $(am__append_1362) \ + $(am__append_1369) $(am__append_1376) cat.module$(EXEEXT) \ + cmp.module$(EXEEXT) configfile.module$(EXEEXT) \ + $(am__append_1383) $(am__append_1390) $(am__append_1397) \ + $(am__append_1404) $(am__append_1411) $(am__append_1418) \ + $(am__append_1425) $(am__append_1432) $(am__append_1439) \ + date.module$(EXEEXT) $(am__append_1446) echo.module$(EXEEXT) \ + eval.module$(EXEEXT) $(am__append_1453) $(am__append_1460) \ + $(am__append_1467) $(am__append_1474) $(am__append_1481) \ + $(am__append_1488) $(am__append_1495) $(am__append_1502) \ + $(am__append_1509) $(am__append_1516) $(am__append_1523) \ + gptsync.module$(EXEEXT) $(am__append_1530) $(am__append_1537) \ + $(am__append_1544) $(am__append_1551) $(am__append_1558) \ + $(am__append_1565) $(am__append_1572) $(am__append_1579) \ + $(am__append_1586) $(am__append_1593) $(am__append_1600) \ + $(am__append_1607) $(am__append_1614) $(am__append_1621) \ + $(am__append_1628) $(am__append_1635) $(am__append_1642) \ + $(am__append_1649) $(am__append_1656) $(am__append_1663) \ + $(am__append_1670) $(am__append_1677) $(am__append_1684) \ + $(am__append_1691) $(am__append_1698) $(am__append_1705) \ + $(am__append_1712) $(am__append_1719) $(am__append_1726) \ + $(am__append_1733) $(am__append_1740) $(am__append_1747) \ + $(am__append_1754) $(am__append_1761) $(am__append_1768) \ + $(am__append_1775) $(am__append_1782) $(am__append_1789) \ + hashsum.module$(EXEEXT) verify.module$(EXEEXT) \ + $(am__append_1796) $(am__append_1803) $(am__append_1810) \ + $(am__append_1817) $(am__append_1824) $(am__append_1831) \ + $(am__append_1838) $(am__append_1845) $(am__append_1852) \ + help.module$(EXEEXT) hexdump.module$(EXEEXT) \ + keystatus.module$(EXEEXT) $(am__append_1859) \ + $(am__append_1866) loadenv.module$(EXEEXT) ls.module$(EXEEXT) \ + lsmmap.module$(EXEEXT) $(am__append_1873) $(am__append_1880) \ + $(am__append_1887) $(am__append_1894) $(am__append_1901) \ + $(am__append_1908) $(am__append_1915) $(am__append_1922) \ + memrw.module$(EXEEXT) minicmd.module$(EXEEXT) \ + parttool.module$(EXEEXT) password.module$(EXEEXT) \ + password_pbkdf2.module$(EXEEXT) $(am__append_1929) \ + $(am__append_1936) $(am__append_1943) $(am__append_1950) \ + $(am__append_1957) $(am__append_1964) $(am__append_1971) \ + $(am__append_1978) $(am__append_1985) $(am__append_1992) \ + $(am__append_1999) $(am__append_2006) $(am__append_2013) \ + $(am__append_2020) $(am__append_2027) $(am__append_2034) \ + $(am__append_2041) $(am__append_2048) $(am__append_2055) \ + $(am__append_2062) $(am__append_2069) probe.module$(EXEEXT) \ + read.module$(EXEEXT) search.module$(EXEEXT) \ + search_fs_file.module$(EXEEXT) search_fs_uuid.module$(EXEEXT) \ + search_label.module$(EXEEXT) $(am__append_2076) \ + $(am__append_2083) $(am__append_2090) $(am__append_2097) \ + $(am__append_2104) $(am__append_2111) $(am__append_2118) \ + $(am__append_2125) $(am__append_2132) $(am__append_2139) \ + $(am__append_2146) $(am__append_2153) $(am__append_2160) \ + $(am__append_2167) $(am__append_2174) $(am__append_2181) \ + sleep.module$(EXEEXT) $(am__append_2188) $(am__append_2195) \ + terminal.module$(EXEEXT) test.module$(EXEEXT) \ + true.module$(EXEEXT) $(am__append_2202) $(am__append_2209) \ + $(am__append_2216) $(am__append_2223) $(am__append_2230) \ + $(am__append_2237) $(am__append_2244) $(am__append_2251) \ + videoinfo.module$(EXEEXT) videotest.module$(EXEEXT) \ + xnu_uuid.module$(EXEEXT) dm_nv.module$(EXEEXT) \ + loopback.module$(EXEEXT) cryptodisk.module$(EXEEXT) \ + luks.module$(EXEEXT) geli.module$(EXEEXT) lvm.module$(EXEEXT) \ + ldm.module$(EXEEXT) mdraid09.module$(EXEEXT) \ + mdraid09_be.module$(EXEEXT) mdraid1x.module$(EXEEXT) \ + diskfilter.module$(EXEEXT) raid5rec.module$(EXEEXT) \ + raid6rec.module$(EXEEXT) scsi.module$(EXEEXT) \ + memdisk.module$(EXEEXT) $(am__append_2258) $(am__append_2265) \ + $(am__append_2272) $(am__append_2279) $(am__append_2286) \ + $(am__append_2293) $(am__append_2300) $(am__append_2307) \ + $(am__append_2314) $(am__append_2321) $(am__append_2328) \ + $(am__append_2335) $(am__append_2342) $(am__append_2349) \ + $(am__append_2356) $(am__append_2363) $(am__append_2370) \ + $(am__append_2377) $(am__append_2384) $(am__append_2391) \ + $(am__append_2398) $(am__append_2405) $(am__append_2412) \ + $(am__append_2419) $(am__append_2426) $(am__append_2433) \ + $(am__append_2440) $(am__append_2447) $(am__append_2454) \ + $(am__append_2461) $(am__append_2468) $(am__append_2475) \ + $(am__append_2482) $(am__append_2489) $(am__append_2496) \ + $(am__append_2503) $(am__append_2510) $(am__append_2517) \ + $(am__append_2524) $(am__append_2531) $(am__append_2538) \ + $(am__append_2545) $(am__append_2552) $(am__append_2559) \ + $(am__append_2566) $(am__append_2573) $(am__append_2580) \ + $(am__append_2587) $(am__append_2594) $(am__append_2601) \ + $(am__append_2608) $(am__append_2615) $(am__append_2622) \ + $(am__append_2629) $(am__append_2636) $(am__append_2643) \ + $(am__append_2650) procfs.module$(EXEEXT) affs.module$(EXEEXT) \ + afs.module$(EXEEXT) bfs.module$(EXEEXT) btrfs.module$(EXEEXT) \ + archelp.module$(EXEEXT) cbfs.module$(EXEEXT) \ + cpio.module$(EXEEXT) cpio_be.module$(EXEEXT) \ + newc.module$(EXEEXT) odc.module$(EXEEXT) ext2.module$(EXEEXT) \ + fat.module$(EXEEXT) exfat.module$(EXEEXT) \ + fshelp.module$(EXEEXT) hfs.module$(EXEEXT) \ + hfsplus.module$(EXEEXT) hfspluscomp.module$(EXEEXT) \ + iso9660.module$(EXEEXT) jfs.module$(EXEEXT) \ + minix.module$(EXEEXT) minix2.module$(EXEEXT) \ + minix3.module$(EXEEXT) minix_be.module$(EXEEXT) \ + minix2_be.module$(EXEEXT) minix3_be.module$(EXEEXT) \ + nilfs2.module$(EXEEXT) ntfs.module$(EXEEXT) \ + ntfscomp.module$(EXEEXT) reiserfs.module$(EXEEXT) \ + romfs.module$(EXEEXT) sfs.module$(EXEEXT) \ + squash4.module$(EXEEXT) tar.module$(EXEEXT) \ + udf.module$(EXEEXT) ufs1.module$(EXEEXT) \ + ufs1_be.module$(EXEEXT) ufs2.module$(EXEEXT) \ + xfs.module$(EXEEXT) zfs.module$(EXEEXT) \ + zfscrypt.module$(EXEEXT) zfsinfo.module$(EXEEXT) \ + macbless.module$(EXEEXT) $(am__append_2657) \ + gettext.module$(EXEEXT) gfxmenu.module$(EXEEXT) \ + hello.module$(EXEEXT) gzio.module$(EXEEXT) \ + offsetio.module$(EXEEXT) $(am__append_2664) $(am__append_2671) \ + $(am__append_2678) $(am__append_2685) $(am__append_2692) \ + $(am__append_2699) $(am__append_2706) $(am__append_2713) \ + $(am__append_2720) $(am__append_2727) $(am__append_2734) \ + $(am__append_2741) $(am__append_2748) $(am__append_2755) \ + $(am__append_2762) $(am__append_2769) $(am__append_2776) \ + elf.module$(EXEEXT) crypto.module$(EXEEXT) \ + pbkdf2.module$(EXEEXT) $(am__append_2783) $(am__append_2790) \ + $(am__append_2797) $(am__append_2804) $(am__append_2811) \ + $(am__append_2818) $(am__append_2825) $(am__append_2832) \ + $(am__append_2839) $(am__append_2846) $(am__append_2853) \ + $(am__append_2860) $(am__append_2867) $(am__append_2874) \ + $(am__append_2881) $(am__append_2888) $(am__append_2895) \ + $(am__append_2902) $(am__append_2909) $(am__append_2916) \ + $(am__append_2923) $(am__append_2930) $(am__append_2937) \ + $(am__append_2944) $(am__append_2951) $(am__append_2958) \ + $(am__append_2965) $(am__append_2972) $(am__append_2979) \ + $(am__append_2986) $(am__append_2993) setjmp.module$(EXEEXT) \ + $(am__append_3000) $(am__append_3007) $(am__append_3014) \ + $(am__append_3021) $(am__append_3028) $(am__append_3035) \ + $(am__append_3042) $(am__append_3049) $(am__append_3056) \ + $(am__append_3063) $(am__append_3070) $(am__append_3077) \ + $(am__append_3084) $(am__append_3091) $(am__append_3098) \ + $(am__append_3105) $(am__append_3112) $(am__append_3119) \ + $(am__append_3126) $(am__append_3133) $(am__append_3140) \ + $(am__append_3147) $(am__append_3154) $(am__append_3161) \ + $(am__append_3168) $(am__append_3175) $(am__append_3182) \ + $(am__append_3189) $(am__append_3196) $(am__append_3203) \ + $(am__append_3210) $(am__append_3217) $(am__append_3224) \ + $(am__append_3231) $(am__append_3238) $(am__append_3245) \ + $(am__append_3252) $(am__append_3259) $(am__append_3266) \ + $(am__append_3273) $(am__append_3280) $(am__append_3287) \ + $(am__append_3294) $(am__append_3301) $(am__append_3308) \ + $(am__append_3315) $(am__append_3322) $(am__append_3329) \ + $(am__append_3336) $(am__append_3343) $(am__append_3350) \ + $(am__append_3357) $(am__append_3364) $(am__append_3371) \ + $(am__append_3378) $(am__append_3385) $(am__append_3392) \ + $(am__append_3399) $(am__append_3406) $(am__append_3413) \ + $(am__append_3420) $(am__append_3427) $(am__append_3434) \ + $(am__append_3441) $(am__append_3448) $(am__append_3455) \ + $(am__append_3462) $(am__append_3469) $(am__append_3476) \ + $(am__append_3483) macho.module$(EXEEXT) $(am__append_3490) \ + $(am__append_3497) $(am__append_3504) $(am__append_3511) \ + $(am__append_3518) $(am__append_3525) $(am__append_3532) \ + $(am__append_3539) $(am__append_3546) $(am__append_3553) \ + $(am__append_3560) $(am__append_3567) $(am__append_3574) \ + $(am__append_3581) $(am__append_3588) $(am__append_3595) \ + $(am__append_3602) $(am__append_3609) $(am__append_3616) \ + $(am__append_3623) $(am__append_3630) $(am__append_3637) \ + normal.module$(EXEEXT) part_acorn.module$(EXEEXT) \ + part_amiga.module$(EXEEXT) part_apple.module$(EXEEXT) \ + part_gpt.module$(EXEEXT) part_msdos.module$(EXEEXT) \ + part_sun.module$(EXEEXT) part_plan.module$(EXEEXT) \ + part_dvh.module$(EXEEXT) part_bsd.module$(EXEEXT) \ + part_sunpc.module$(EXEEXT) part_dfly.module$(EXEEXT) \ + msdospart.module$(EXEEXT) $(am__append_3644) \ + $(am__append_3651) $(am__append_3658) $(am__append_3665) \ + $(am__append_3672) $(am__append_3679) $(am__append_3686) \ + $(am__append_3693) $(am__append_3700) $(am__append_3707) \ + $(am__append_3714) $(am__append_3721) $(am__append_3728) \ + $(am__append_3735) $(am__append_3742) $(am__append_3749) \ + $(am__append_3756) $(am__append_3763) $(am__append_3770) \ + $(am__append_3777) $(am__append_3784) $(am__append_3791) \ + $(am__append_3798) $(am__append_3805) \ + gfxterm_background.module$(EXEEXT) $(am__append_3812) \ + $(am__append_3819) $(am__append_3826) $(am__append_3833) \ + $(am__append_3840) $(am__append_3847) $(am__append_3854) \ + $(am__append_3861) $(am__append_3868) $(am__append_3875) \ + $(am__append_3882) $(am__append_3889) $(am__append_3896) \ + $(am__append_3903) $(am__append_3910) $(am__append_3917) \ + $(am__append_3924) $(am__append_3931) $(am__append_3938) \ + $(am__append_3945) $(am__append_3952) $(am__append_3959) \ + $(am__append_3966) $(am__append_3973) $(am__append_3980) \ + $(am__append_3987) $(am__append_3994) $(am__append_4001) \ + $(am__append_4008) $(am__append_4015) $(am__append_4022) \ + $(am__append_4029) $(am__append_4036) $(am__append_4043) \ + $(am__append_4050) $(am__append_4057) $(am__append_4064) \ + $(am__append_4071) $(am__append_4078) $(am__append_4085) \ + $(am__append_4092) $(am__append_4099) $(am__append_4106) \ + $(am__append_4113) $(am__append_4120) $(am__append_4127) \ + $(am__append_4134) $(am__append_4141) \ + functional_test.module$(EXEEXT) exfctest.module$(EXEEXT) \ + setjmp_test.module$(EXEEXT) signature_test.module$(EXEEXT) \ + sleep_test.module$(EXEEXT) xnu_uuid_test.module$(EXEEXT) \ + pbkdf2_test.module$(EXEEXT) $(am__append_4148) \ + $(am__append_4155) $(am__append_4162) $(am__append_4169) \ + $(am__append_4176) $(am__append_4183) $(am__append_4190) \ + $(am__append_4197) $(am__append_4204) $(am__append_4211) \ + $(am__append_4218) $(am__append_4225) $(am__append_4232) \ + $(am__append_4239) $(am__append_4246) $(am__append_4253) \ + $(am__append_4260) $(am__append_4267) $(am__append_4274) \ + $(am__append_4281) $(am__append_4288) $(am__append_4295) \ + div_test.module$(EXEEXT) mul_test.module$(EXEEXT) \ + shift_test.module$(EXEEXT) cmp_test.module$(EXEEXT) \ + ctz_test.module$(EXEEXT) bswap_test.module$(EXEEXT) \ + videotest_checksum.module$(EXEEXT) \ + gfxterm_menu.module$(EXEEXT) cmdline_cat_test.module$(EXEEXT) \ + bitmap.module$(EXEEXT) bitmap_scale.module$(EXEEXT) \ + $(am__append_4302) $(am__append_4309) $(am__append_4316) \ + $(am__append_4323) $(am__append_4330) $(am__append_4337) \ + $(am__append_4344) jpeg.module$(EXEEXT) png.module$(EXEEXT) \ + tga.module$(EXEEXT) $(am__append_4351) $(am__append_4358) \ + $(am__append_4365) $(am__append_4372) $(am__append_4379) \ + $(am__append_4386) $(am__append_4393) $(am__append_4400) \ + $(am__append_4407) $(am__append_4414) $(am__append_4421) \ + $(am__append_4428) $(am__append_4435) $(am__append_4442) \ + $(am__append_4449) $(am__append_4456) $(am__append_4463) \ + $(am__append_4470) $(am__append_4477) $(am__append_4484) \ + $(am__append_4491) $(am__append_4498) $(am__append_4505) \ + $(am__append_4512) $(am__append_4519) $(am__append_4526) \ + $(am__append_4533) $(am__append_4540) $(am__append_4547) \ + $(am__append_4554) $(am__append_4561) $(am__append_4568) \ + $(am__append_4575) $(am__append_4582) $(am__append_4589) \ + video_colors.module$(EXEEXT) $(am__append_4596) \ + $(am__append_4603) datehook.module$(EXEEXT) \ + net.module$(EXEEXT) tftp.module$(EXEEXT) http.module$(EXEEXT) \ + $(am__append_4610) $(am__append_4617) $(am__append_4624) \ + $(am__append_4631) $(am__append_4638) $(am__append_4645) \ + $(am__append_4652) $(am__append_4659) $(am__append_4666) \ + $(am__append_4673) $(am__append_4680) $(am__append_4687) \ + $(am__append_4694) $(am__append_4701) $(am__append_4708) \ + syslinuxcfg.module$(EXEEXT) test_blockarg.module$(EXEEXT) \ + xzio.module$(EXEEXT) lzopio.module$(EXEEXT) \ + testload.module$(EXEEXT) $(am__append_4715) $(am__append_4722) \ + $(am__append_4729) $(am__append_4736) $(am__append_4743) \ + $(am__append_4750) $(am__append_4757) $(am__append_4764) \ + $(am__append_4771) $(am__append_4778) $(am__append_4785) \ + $(am__append_4792) $(am__append_4799) $(am__append_4806) \ + $(am__append_4813) $(am__append_4820) \ + priority_queue.module$(EXEEXT) time.module$(EXEEXT) \ + $(am__append_4827) $(am__append_4834) adler32.module$(EXEEXT) \ + crc64.module$(EXEEXT) mpi.module$(EXEEXT) \ + all_video.module$(EXEEXT) $(am__append_4841) \ + $(am__append_4848) $(am__append_4855) $(am__append_4862) \ + $(am__append_4869) $(am__append_4876) \ + testspeed.module$(EXEEXT) tr.module$(EXEEXT) \ + progress.module$(EXEEXT) file.module$(EXEEXT) \ + gcry_arcfour.module$(EXEEXT) gcry_blowfish.module$(EXEEXT) \ + gcry_camellia.module$(EXEEXT) gcry_cast5.module$(EXEEXT) \ + gcry_crc.module$(EXEEXT) gcry_des.module$(EXEEXT) \ + gcry_dsa.module$(EXEEXT) gcry_idea.module$(EXEEXT) \ + gcry_md4.module$(EXEEXT) gcry_md5.module$(EXEEXT) \ + gcry_rfc2268.module$(EXEEXT) gcry_rijndael.module$(EXEEXT) \ + gcry_rmd160.module$(EXEEXT) gcry_rsa.module$(EXEEXT) \ + gcry_seed.module$(EXEEXT) gcry_serpent.module$(EXEEXT) \ + gcry_sha1.module$(EXEEXT) gcry_sha256.module$(EXEEXT) \ + gcry_sha512.module$(EXEEXT) gcry_tiger.module$(EXEEXT) \ + gcry_twofish.module$(EXEEXT) gcry_whirlpool.module$(EXEEXT) +MARKER_FILES = disk.marker trig.marker $(am__append_9) \ + $(am__append_16) $(am__append_23) $(am__append_30) \ + $(am__append_37) $(am__append_44) $(am__append_51) \ + $(am__append_58) $(am__append_65) $(am__append_72) \ + $(am__append_79) $(am__append_86) $(am__append_93) \ + $(am__append_100) $(am__append_107) $(am__append_114) \ + $(am__append_121) $(am__append_128) $(am__append_135) \ + $(am__append_142) $(am__append_149) $(am__append_156) \ + $(am__append_163) $(am__append_170) $(am__append_177) \ + $(am__append_184) $(am__append_191) $(am__append_198) \ + $(am__append_205) $(am__append_212) $(am__append_219) \ + $(am__append_226) $(am__append_233) $(am__append_240) \ + $(am__append_247) $(am__append_254) $(am__append_261) \ + $(am__append_268) $(am__append_275) $(am__append_282) \ + $(am__append_289) $(am__append_296) $(am__append_303) \ + $(am__append_310) $(am__append_317) $(am__append_324) \ + $(am__append_331) $(am__append_338) $(am__append_345) \ + $(am__append_352) $(am__append_359) $(am__append_366) \ + $(am__append_373) $(am__append_380) $(am__append_387) \ + $(am__append_394) $(am__append_401) $(am__append_408) \ + $(am__append_415) $(am__append_422) $(am__append_429) \ + $(am__append_436) $(am__append_443) $(am__append_450) \ + $(am__append_457) $(am__append_464) $(am__append_471) \ + $(am__append_478) $(am__append_485) $(am__append_492) \ + $(am__append_499) $(am__append_506) $(am__append_513) \ + $(am__append_520) $(am__append_527) $(am__append_534) \ + $(am__append_541) $(am__append_548) $(am__append_555) \ + $(am__append_562) $(am__append_569) $(am__append_576) \ + $(am__append_583) $(am__append_590) $(am__append_597) \ + $(am__append_604) $(am__append_611) $(am__append_618) \ + $(am__append_625) $(am__append_632) $(am__append_639) \ + $(am__append_646) $(am__append_653) $(am__append_660) \ + $(am__append_667) $(am__append_674) $(am__append_681) \ + $(am__append_688) $(am__append_695) $(am__append_702) \ + $(am__append_709) $(am__append_716) $(am__append_723) \ + $(am__append_730) $(am__append_737) $(am__append_744) \ + $(am__append_751) $(am__append_758) $(am__append_765) \ + $(am__append_772) $(am__append_779) $(am__append_786) \ + $(am__append_793) $(am__append_800) $(am__append_807) \ + $(am__append_814) $(am__append_821) $(am__append_828) \ + $(am__append_835) $(am__append_842) $(am__append_849) \ + $(am__append_856) $(am__append_863) $(am__append_870) \ + $(am__append_877) $(am__append_884) $(am__append_891) \ + $(am__append_898) $(am__append_905) $(am__append_912) \ + $(am__append_919) $(am__append_926) $(am__append_933) \ + $(am__append_940) $(am__append_947) $(am__append_954) \ + $(am__append_961) $(am__append_968) $(am__append_975) \ + $(am__append_982) $(am__append_989) regexp.marker \ + $(am__append_996) $(am__append_1003) $(am__append_1010) \ + $(am__append_1017) $(am__append_1024) $(am__append_1031) \ + $(am__append_1038) $(am__append_1045) $(am__append_1052) \ + $(am__append_1059) $(am__append_1066) $(am__append_1073) \ + $(am__append_1080) $(am__append_1087) $(am__append_1094) \ + $(am__append_1101) $(am__append_1108) $(am__append_1115) \ + $(am__append_1122) $(am__append_1129) $(am__append_1136) \ + $(am__append_1143) $(am__append_1150) $(am__append_1157) \ + $(am__append_1164) $(am__append_1171) $(am__append_1178) \ + $(am__append_1185) $(am__append_1192) $(am__append_1199) \ + $(am__append_1206) $(am__append_1213) $(am__append_1220) \ + $(am__append_1227) $(am__append_1234) $(am__append_1241) \ + $(am__append_1248) $(am__append_1255) $(am__append_1262) \ + $(am__append_1269) $(am__append_1276) blocklist.marker \ + $(am__append_1283) $(am__append_1290) $(am__append_1297) \ + $(am__append_1304) $(am__append_1311) $(am__append_1318) \ + $(am__append_1325) $(am__append_1332) $(am__append_1339) \ + $(am__append_1346) $(am__append_1353) $(am__append_1360) \ + $(am__append_1367) $(am__append_1374) $(am__append_1381) \ + cat.marker cmp.marker configfile.marker $(am__append_1388) \ + $(am__append_1395) $(am__append_1402) $(am__append_1409) \ + $(am__append_1416) $(am__append_1423) $(am__append_1430) \ + $(am__append_1437) $(am__append_1444) date.marker \ + $(am__append_1451) echo.marker eval.marker $(am__append_1458) \ + $(am__append_1465) $(am__append_1472) $(am__append_1479) \ + $(am__append_1486) $(am__append_1493) $(am__append_1500) \ + $(am__append_1507) $(am__append_1514) $(am__append_1521) \ + $(am__append_1528) gptsync.marker $(am__append_1535) \ + $(am__append_1542) $(am__append_1549) $(am__append_1556) \ + $(am__append_1563) $(am__append_1570) $(am__append_1577) \ + $(am__append_1584) $(am__append_1591) $(am__append_1598) \ + $(am__append_1605) $(am__append_1612) $(am__append_1619) \ + $(am__append_1626) $(am__append_1633) $(am__append_1640) \ + $(am__append_1647) $(am__append_1654) $(am__append_1661) \ + $(am__append_1668) $(am__append_1675) $(am__append_1682) \ + $(am__append_1689) $(am__append_1696) $(am__append_1703) \ + $(am__append_1710) $(am__append_1717) $(am__append_1724) \ + $(am__append_1731) $(am__append_1738) $(am__append_1745) \ + $(am__append_1752) $(am__append_1759) $(am__append_1766) \ + $(am__append_1773) $(am__append_1780) $(am__append_1787) \ + $(am__append_1794) hashsum.marker verify.marker \ + $(am__append_1801) $(am__append_1808) $(am__append_1815) \ + $(am__append_1822) $(am__append_1829) $(am__append_1836) \ + $(am__append_1843) $(am__append_1850) $(am__append_1857) \ + help.marker hexdump.marker keystatus.marker $(am__append_1864) \ + $(am__append_1871) loadenv.marker ls.marker lsmmap.marker \ + $(am__append_1878) $(am__append_1885) $(am__append_1892) \ + $(am__append_1899) $(am__append_1906) $(am__append_1913) \ + $(am__append_1920) $(am__append_1927) memrw.marker \ + minicmd.marker parttool.marker password.marker \ + password_pbkdf2.marker $(am__append_1934) $(am__append_1941) \ + $(am__append_1948) $(am__append_1955) $(am__append_1962) \ + $(am__append_1969) $(am__append_1976) $(am__append_1983) \ + $(am__append_1990) $(am__append_1997) $(am__append_2004) \ + $(am__append_2011) $(am__append_2018) $(am__append_2025) \ + $(am__append_2032) $(am__append_2039) $(am__append_2046) \ + $(am__append_2053) $(am__append_2060) $(am__append_2067) \ + $(am__append_2074) probe.marker read.marker search.marker \ + search_fs_file.marker search_fs_uuid.marker \ + search_label.marker $(am__append_2081) $(am__append_2088) \ + $(am__append_2095) $(am__append_2102) $(am__append_2109) \ + $(am__append_2116) $(am__append_2123) $(am__append_2130) \ + $(am__append_2137) $(am__append_2144) $(am__append_2151) \ + $(am__append_2158) $(am__append_2165) $(am__append_2172) \ + $(am__append_2179) $(am__append_2186) sleep.marker \ + $(am__append_2193) $(am__append_2200) terminal.marker \ + test.marker true.marker $(am__append_2207) $(am__append_2214) \ + $(am__append_2221) $(am__append_2228) $(am__append_2235) \ + $(am__append_2242) $(am__append_2249) $(am__append_2256) \ + videoinfo.marker videotest.marker xnu_uuid.marker dm_nv.marker \ + loopback.marker cryptodisk.marker luks.marker geli.marker \ + lvm.marker ldm.marker mdraid09.marker mdraid09_be.marker \ + mdraid1x.marker diskfilter.marker raid5rec.marker \ + raid6rec.marker scsi.marker memdisk.marker $(am__append_2263) \ + $(am__append_2270) $(am__append_2277) $(am__append_2284) \ + $(am__append_2291) $(am__append_2298) $(am__append_2305) \ + $(am__append_2312) $(am__append_2319) $(am__append_2326) \ + $(am__append_2333) $(am__append_2340) $(am__append_2347) \ + $(am__append_2354) $(am__append_2361) $(am__append_2368) \ + $(am__append_2375) $(am__append_2382) $(am__append_2389) \ + $(am__append_2396) $(am__append_2403) $(am__append_2410) \ + $(am__append_2417) $(am__append_2424) $(am__append_2431) \ + $(am__append_2438) $(am__append_2445) $(am__append_2452) \ + $(am__append_2459) $(am__append_2466) $(am__append_2473) \ + $(am__append_2480) $(am__append_2487) $(am__append_2494) \ + $(am__append_2501) $(am__append_2508) $(am__append_2515) \ + $(am__append_2522) $(am__append_2529) $(am__append_2536) \ + $(am__append_2543) $(am__append_2550) $(am__append_2557) \ + $(am__append_2564) $(am__append_2571) $(am__append_2578) \ + $(am__append_2585) $(am__append_2592) $(am__append_2599) \ + $(am__append_2606) $(am__append_2613) $(am__append_2620) \ + $(am__append_2627) $(am__append_2634) $(am__append_2641) \ + $(am__append_2648) $(am__append_2655) procfs.marker \ + affs.marker afs.marker bfs.marker btrfs.marker archelp.marker \ + cbfs.marker cpio.marker cpio_be.marker newc.marker odc.marker \ + ext2.marker fat.marker exfat.marker fshelp.marker hfs.marker \ + hfsplus.marker hfspluscomp.marker iso9660.marker jfs.marker \ + minix.marker minix2.marker minix3.marker minix_be.marker \ + minix2_be.marker minix3_be.marker nilfs2.marker ntfs.marker \ + ntfscomp.marker reiserfs.marker romfs.marker sfs.marker \ + squash4.marker tar.marker udf.marker ufs1.marker \ + ufs1_be.marker ufs2.marker xfs.marker zfs.marker \ + zfscrypt.marker zfsinfo.marker macbless.marker \ + $(am__append_2662) gettext.marker gfxmenu.marker hello.marker \ + gzio.marker offsetio.marker $(am__append_2669) \ + $(am__append_2676) $(am__append_2683) $(am__append_2690) \ + $(am__append_2697) $(am__append_2704) $(am__append_2711) \ + $(am__append_2718) $(am__append_2725) $(am__append_2732) \ + $(am__append_2739) $(am__append_2746) $(am__append_2753) \ + $(am__append_2760) $(am__append_2767) $(am__append_2774) \ + $(am__append_2781) elf.marker crypto.marker pbkdf2.marker \ + $(am__append_2788) $(am__append_2795) $(am__append_2802) \ + $(am__append_2809) $(am__append_2816) $(am__append_2823) \ + $(am__append_2830) $(am__append_2837) $(am__append_2844) \ + $(am__append_2851) $(am__append_2858) $(am__append_2865) \ + $(am__append_2872) $(am__append_2879) $(am__append_2886) \ + $(am__append_2893) $(am__append_2900) $(am__append_2907) \ + $(am__append_2914) $(am__append_2921) $(am__append_2928) \ + $(am__append_2935) $(am__append_2942) $(am__append_2949) \ + $(am__append_2956) $(am__append_2963) $(am__append_2970) \ + $(am__append_2977) $(am__append_2984) $(am__append_2991) \ + $(am__append_2998) setjmp.marker $(am__append_3005) \ + $(am__append_3012) $(am__append_3019) $(am__append_3026) \ + $(am__append_3033) $(am__append_3040) $(am__append_3047) \ + $(am__append_3054) $(am__append_3061) $(am__append_3068) \ + $(am__append_3075) $(am__append_3082) $(am__append_3089) \ + $(am__append_3096) $(am__append_3103) $(am__append_3110) \ + $(am__append_3117) $(am__append_3124) $(am__append_3131) \ + $(am__append_3138) $(am__append_3145) $(am__append_3152) \ + $(am__append_3159) $(am__append_3166) $(am__append_3173) \ + $(am__append_3180) $(am__append_3187) $(am__append_3194) \ + $(am__append_3201) $(am__append_3208) $(am__append_3215) \ + $(am__append_3222) $(am__append_3229) $(am__append_3236) \ + $(am__append_3243) $(am__append_3250) $(am__append_3257) \ + $(am__append_3264) $(am__append_3271) $(am__append_3278) \ + $(am__append_3285) $(am__append_3292) $(am__append_3299) \ + $(am__append_3306) $(am__append_3313) $(am__append_3320) \ + $(am__append_3327) $(am__append_3334) $(am__append_3341) \ + $(am__append_3348) $(am__append_3355) $(am__append_3362) \ + $(am__append_3369) $(am__append_3376) $(am__append_3383) \ + $(am__append_3390) $(am__append_3397) $(am__append_3404) \ + $(am__append_3411) $(am__append_3418) $(am__append_3425) \ + $(am__append_3432) $(am__append_3439) $(am__append_3446) \ + $(am__append_3453) $(am__append_3460) $(am__append_3467) \ + $(am__append_3474) $(am__append_3481) $(am__append_3488) \ + macho.marker $(am__append_3495) $(am__append_3502) \ + $(am__append_3509) $(am__append_3516) $(am__append_3523) \ + $(am__append_3530) $(am__append_3537) $(am__append_3544) \ + $(am__append_3551) $(am__append_3558) $(am__append_3565) \ + $(am__append_3572) $(am__append_3579) $(am__append_3586) \ + $(am__append_3593) $(am__append_3600) $(am__append_3607) \ + $(am__append_3614) $(am__append_3621) $(am__append_3628) \ + $(am__append_3635) $(am__append_3642) normal.marker \ + part_acorn.marker part_amiga.marker part_apple.marker \ + part_gpt.marker part_msdos.marker part_sun.marker \ + part_plan.marker part_dvh.marker part_bsd.marker \ + part_sunpc.marker part_dfly.marker msdospart.marker \ + $(am__append_3649) $(am__append_3656) $(am__append_3663) \ + $(am__append_3670) $(am__append_3677) $(am__append_3684) \ + $(am__append_3691) $(am__append_3698) $(am__append_3705) \ + $(am__append_3712) $(am__append_3719) $(am__append_3726) \ + $(am__append_3733) $(am__append_3740) $(am__append_3747) \ + $(am__append_3754) $(am__append_3761) $(am__append_3768) \ + $(am__append_3775) $(am__append_3782) $(am__append_3789) \ + $(am__append_3796) $(am__append_3803) $(am__append_3810) \ + gfxterm_background.marker $(am__append_3817) \ + $(am__append_3824) $(am__append_3831) $(am__append_3838) \ + $(am__append_3845) $(am__append_3852) $(am__append_3859) \ + $(am__append_3866) $(am__append_3873) $(am__append_3880) \ + $(am__append_3887) $(am__append_3894) $(am__append_3901) \ + $(am__append_3908) $(am__append_3915) $(am__append_3922) \ + $(am__append_3929) $(am__append_3936) $(am__append_3943) \ + $(am__append_3950) $(am__append_3957) $(am__append_3964) \ + $(am__append_3971) $(am__append_3978) $(am__append_3985) \ + $(am__append_3992) $(am__append_3999) $(am__append_4006) \ + $(am__append_4013) $(am__append_4020) $(am__append_4027) \ + $(am__append_4034) $(am__append_4041) $(am__append_4048) \ + $(am__append_4055) $(am__append_4062) $(am__append_4069) \ + $(am__append_4076) $(am__append_4083) $(am__append_4090) \ + $(am__append_4097) $(am__append_4104) $(am__append_4111) \ + $(am__append_4118) $(am__append_4125) $(am__append_4132) \ + $(am__append_4139) $(am__append_4146) functional_test.marker \ + exfctest.marker setjmp_test.marker signature_test.marker \ + sleep_test.marker xnu_uuid_test.marker pbkdf2_test.marker \ + $(am__append_4153) $(am__append_4160) $(am__append_4167) \ + $(am__append_4174) $(am__append_4181) $(am__append_4188) \ + $(am__append_4195) $(am__append_4202) $(am__append_4209) \ + $(am__append_4216) $(am__append_4223) $(am__append_4230) \ + $(am__append_4237) $(am__append_4244) $(am__append_4251) \ + $(am__append_4258) $(am__append_4265) $(am__append_4272) \ + $(am__append_4279) $(am__append_4286) $(am__append_4293) \ + $(am__append_4300) div_test.marker mul_test.marker \ + shift_test.marker cmp_test.marker ctz_test.marker \ + bswap_test.marker videotest_checksum.marker \ + gfxterm_menu.marker cmdline_cat_test.marker bitmap.marker \ + bitmap_scale.marker $(am__append_4307) $(am__append_4314) \ + $(am__append_4321) $(am__append_4328) $(am__append_4335) \ + $(am__append_4342) $(am__append_4349) jpeg.marker png.marker \ + tga.marker $(am__append_4356) $(am__append_4363) \ + $(am__append_4370) $(am__append_4377) $(am__append_4384) \ + $(am__append_4391) $(am__append_4398) $(am__append_4405) \ + $(am__append_4412) $(am__append_4419) $(am__append_4426) \ + $(am__append_4433) $(am__append_4440) $(am__append_4447) \ + $(am__append_4454) $(am__append_4461) $(am__append_4468) \ + $(am__append_4475) $(am__append_4482) $(am__append_4489) \ + $(am__append_4496) $(am__append_4503) $(am__append_4510) \ + $(am__append_4517) $(am__append_4524) $(am__append_4531) \ + $(am__append_4538) $(am__append_4545) $(am__append_4552) \ + $(am__append_4559) $(am__append_4566) $(am__append_4573) \ + $(am__append_4580) $(am__append_4587) $(am__append_4594) \ + video_colors.marker $(am__append_4601) $(am__append_4608) \ + datehook.marker net.marker tftp.marker http.marker \ + $(am__append_4615) $(am__append_4622) $(am__append_4629) \ + $(am__append_4636) $(am__append_4643) $(am__append_4650) \ + $(am__append_4657) $(am__append_4664) $(am__append_4671) \ + $(am__append_4678) $(am__append_4685) $(am__append_4692) \ + $(am__append_4699) $(am__append_4706) $(am__append_4713) \ + syslinuxcfg.marker test_blockarg.marker xzio.marker \ + lzopio.marker testload.marker $(am__append_4720) \ + $(am__append_4727) $(am__append_4734) $(am__append_4741) \ + $(am__append_4748) $(am__append_4755) $(am__append_4762) \ + $(am__append_4769) $(am__append_4776) $(am__append_4783) \ + $(am__append_4790) $(am__append_4797) $(am__append_4804) \ + $(am__append_4811) $(am__append_4818) $(am__append_4825) \ + priority_queue.marker time.marker $(am__append_4832) \ + $(am__append_4839) adler32.marker crc64.marker mpi.marker \ + all_video.marker $(am__append_4846) $(am__append_4853) \ + $(am__append_4860) $(am__append_4867) $(am__append_4874) \ + $(am__append_4881) testspeed.marker tr.marker progress.marker \ + file.marker gcry_arcfour.marker gcry_blowfish.marker \ + gcry_camellia.marker gcry_cast5.marker gcry_crc.marker \ + gcry_des.marker gcry_dsa.marker gcry_idea.marker \ + gcry_md4.marker gcry_md5.marker gcry_rfc2268.marker \ + gcry_rijndael.marker gcry_rmd160.marker gcry_rsa.marker \ + gcry_seed.marker gcry_serpent.marker gcry_sha1.marker \ + gcry_sha256.marker gcry_sha512.marker gcry_tiger.marker \ + gcry_twofish.marker gcry_whirlpool.marker +KERNEL_HEADER_FILES = $(top_srcdir)/include/grub/cache.h \ + $(top_srcdir)/include/grub/command.h \ + $(top_srcdir)/include/grub/device.h \ + $(top_srcdir)/include/grub/disk.h \ + $(top_srcdir)/include/grub/dl.h \ + $(top_srcdir)/include/grub/env.h \ + $(top_srcdir)/include/grub/env_private.h \ + $(top_srcdir)/include/grub/err.h \ + $(top_srcdir)/include/grub/file.h \ + $(top_srcdir)/include/grub/fs.h \ + $(top_srcdir)/include/grub/i18n.h \ + $(top_srcdir)/include/grub/kernel.h \ + $(top_srcdir)/include/grub/list.h \ + $(top_srcdir)/include/grub/misc.h $(am__append_5067) \ + $(am__append_5068) $(top_srcdir)/include/grub/mm.h \ + $(top_srcdir)/include/grub/parser.h \ + $(top_srcdir)/include/grub/partition.h \ + $(top_srcdir)/include/grub/term.h \ + $(top_srcdir)/include/grub/time.h \ + $(top_srcdir)/include/grub/mm_private.h \ + $(top_srcdir)/include/grub/net.h \ + $(top_srcdir)/include/grub/memory.h $(am__append_5069) \ + $(am__append_5070) $(am__append_5071) $(am__append_5072) \ + $(am__append_5073) $(am__append_5074) $(am__append_5075) \ + $(am__append_5076) $(am__append_5077) $(am__append_5078) \ + $(am__append_5079) $(am__append_5080) $(am__append_5081) \ + $(am__append_5082) $(am__append_5083) $(am__append_5084) \ + $(am__append_5085) $(am__append_5086) $(am__append_5087) \ + $(am__append_5088) $(am__append_5089) $(am__append_5090) \ + $(am__append_5091) +man_MANS = $(am__append_5058) +noinst_DATA = gensyminfo.sh genmod.sh modinfo.sh kernel_syms.lst +pkgdata_DATA = +bin_SCRIPTS = +sbin_SCRIPTS = +platform_DATA = $(am__append_4886) $(am__append_4891) \ + $(am__append_4896) $(am__append_4901) $(am__append_4906) \ + $(am__append_4911) $(am__append_4916) $(am__append_4921) \ + $(am__append_4926) $(am__append_4931) $(am__append_4936) \ + $(am__append_4941) $(am__append_4946) $(am__append_4951) \ + $(am__append_4956) $(am__append_4961) $(am__append_4966) \ + $(am__append_4971) $(am__append_4976) $(am__append_4981) \ + $(am__append_4986) $(am__append_4991) $(am__append_4996) \ + $(am__append_5001) $(am__append_5006) $(am__append_5011) \ + $(am__append_5016) $(am__append_5021) $(am__append_5026) \ + $(am__append_5031) $(am__append_5036) $(am__append_5041) \ + $(am__append_5046) $(am__append_5051) $(am__append_5056) \ + gmodule.pl gdb_grub $(am__append_5063) fs.lst command.lst \ + partmap.lst terminal.lst parttool.lst video.lst crypto.lst \ + moddep.lst $(MOD_FILES) modinfo.sh $(am__append_5093) +check_SCRIPTS = +dist_grubconf_DATA = +noinst_SCRIPTS = +grubconf_SCRIPTS = +noinst_LIBRARIES = +dist_noinst_DATA = kern/disk_common.c gentrigtables.c $(am__append_5) \ + $(am__append_12) $(am__append_19) $(am__append_26) \ + $(am__append_33) $(am__append_40) $(am__append_47) \ + $(am__append_54) $(am__append_61) $(am__append_68) \ + $(am__append_75) $(am__append_82) $(am__append_89) \ + $(am__append_96) $(am__append_103) $(am__append_110) \ + $(am__append_117) $(am__append_124) $(am__append_131) \ + $(am__append_138) $(am__append_145) $(am__append_152) \ + $(am__append_159) $(am__append_166) $(am__append_173) \ + $(am__append_180) $(am__append_187) $(am__append_194) \ + $(am__append_201) $(am__append_208) $(am__append_215) \ + $(am__append_222) $(am__append_229) $(am__append_236) \ + $(am__append_243) $(am__append_250) $(am__append_257) \ + $(am__append_264) $(am__append_271) $(am__append_278) \ + $(am__append_285) $(am__append_292) $(am__append_299) \ + $(am__append_306) $(am__append_313) $(am__append_320) \ + $(am__append_327) $(am__append_334) $(am__append_341) \ + $(am__append_348) $(am__append_355) $(am__append_362) \ + $(am__append_369) $(am__append_376) $(am__append_383) \ + $(am__append_390) $(am__append_397) $(am__append_404) \ + $(am__append_411) $(am__append_418) $(am__append_425) \ + $(am__append_432) $(am__append_439) $(am__append_446) \ + $(am__append_453) $(am__append_460) $(am__append_467) \ + $(am__append_474) $(am__append_481) $(am__append_488) \ + $(am__append_495) $(am__append_502) $(am__append_509) \ + $(am__append_516) $(am__append_523) $(am__append_530) \ + $(am__append_537) $(am__append_544) $(am__append_551) \ + $(am__append_558) $(am__append_565) $(am__append_572) \ + $(am__append_579) $(am__append_586) $(am__append_593) \ + $(am__append_600) $(am__append_607) $(am__append_614) \ + $(am__append_621) $(am__append_628) $(am__append_635) \ + $(am__append_642) $(am__append_649) $(am__append_656) \ + $(am__append_663) $(am__append_670) $(am__append_677) \ + $(am__append_684) $(am__append_691) $(am__append_698) \ + $(am__append_705) $(am__append_712) $(am__append_719) \ + $(am__append_726) $(am__append_733) $(am__append_740) \ + $(am__append_747) $(am__append_754) $(am__append_761) \ + $(am__append_768) $(am__append_775) $(am__append_782) \ + $(am__append_789) $(am__append_796) $(am__append_803) \ + $(am__append_810) $(am__append_817) $(am__append_824) \ + $(am__append_831) $(am__append_838) $(am__append_845) \ + $(am__append_852) $(am__append_859) $(am__append_866) \ + $(am__append_873) $(am__append_880) $(am__append_887) \ + $(am__append_894) $(am__append_901) $(am__append_908) \ + $(am__append_915) $(am__append_922) $(am__append_929) \ + $(am__append_936) $(am__append_943) $(am__append_950) \ + $(am__append_957) $(am__append_964) $(am__append_971) \ + $(am__append_978) $(am__append_985) $(am__append_992) \ + $(am__append_999) $(am__append_1006) $(am__append_1013) \ + $(am__append_1020) $(am__append_1027) $(am__append_1034) \ + $(am__append_1041) $(am__append_1048) $(am__append_1055) \ + $(am__append_1062) $(am__append_1069) $(am__append_1076) \ + $(am__append_1083) $(am__append_1090) $(am__append_1097) \ + $(am__append_1104) $(am__append_1111) $(am__append_1118) \ + $(am__append_1125) $(am__append_1132) $(am__append_1139) \ + $(am__append_1146) $(am__append_1153) $(am__append_1160) \ + $(am__append_1167) $(am__append_1174) $(am__append_1181) \ + $(am__append_1188) $(am__append_1195) $(am__append_1202) \ + $(am__append_1209) $(am__append_1216) $(am__append_1223) \ + $(am__append_1230) $(am__append_1237) $(am__append_1244) \ + $(am__append_1251) $(am__append_1258) $(am__append_1265) \ + $(am__append_1272) $(am__append_1279) $(am__append_1286) \ + $(am__append_1293) $(am__append_1300) $(am__append_1307) \ + $(am__append_1314) $(am__append_1321) $(am__append_1328) \ + $(am__append_1335) $(am__append_1342) $(am__append_1349) \ + $(am__append_1356) $(am__append_1363) $(am__append_1370) \ + $(am__append_1377) $(am__append_1384) $(am__append_1391) \ + $(am__append_1398) $(am__append_1405) $(am__append_1412) \ + $(am__append_1419) $(am__append_1426) $(am__append_1433) \ + $(am__append_1440) $(am__append_1447) $(am__append_1454) \ + $(am__append_1461) $(am__append_1468) $(am__append_1475) \ + $(am__append_1482) $(am__append_1489) $(am__append_1496) \ + $(am__append_1503) $(am__append_1510) $(am__append_1517) \ + $(am__append_1524) $(am__append_1531) $(am__append_1538) \ + $(am__append_1545) $(am__append_1552) $(am__append_1559) \ + $(am__append_1566) $(am__append_1573) $(am__append_1580) \ + $(am__append_1587) $(am__append_1594) $(am__append_1601) \ + $(am__append_1608) $(am__append_1615) $(am__append_1622) \ + $(am__append_1629) $(am__append_1636) $(am__append_1643) \ + $(am__append_1650) $(am__append_1657) $(am__append_1664) \ + $(am__append_1671) $(am__append_1678) $(am__append_1685) \ + $(am__append_1692) $(am__append_1699) $(am__append_1706) \ + $(am__append_1713) $(am__append_1720) $(am__append_1727) \ + $(am__append_1734) $(am__append_1741) $(am__append_1748) \ + $(am__append_1755) $(am__append_1762) $(am__append_1769) \ + $(am__append_1776) $(am__append_1783) $(am__append_1790) \ + $(am__append_1797) $(am__append_1804) $(am__append_1811) \ + $(am__append_1818) $(am__append_1825) $(am__append_1832) \ + $(am__append_1839) $(am__append_1846) $(am__append_1853) \ + $(am__append_1860) $(am__append_1867) $(am__append_1874) \ + $(am__append_1881) $(am__append_1888) $(am__append_1895) \ + $(am__append_1902) $(am__append_1909) $(am__append_1916) \ + $(am__append_1923) $(am__append_1930) $(am__append_1937) \ + $(am__append_1944) $(am__append_1951) $(am__append_1958) \ + $(am__append_1965) $(am__append_1972) $(am__append_1979) \ + $(am__append_1986) $(am__append_1993) $(am__append_2000) \ + $(am__append_2007) $(am__append_2014) $(am__append_2021) \ + $(am__append_2028) $(am__append_2035) $(am__append_2042) \ + $(am__append_2049) $(am__append_2056) $(am__append_2063) \ + $(am__append_2070) commands/search.c $(am__append_2077) \ + $(am__append_2084) $(am__append_2091) $(am__append_2098) \ + $(am__append_2105) $(am__append_2112) $(am__append_2119) \ + $(am__append_2126) $(am__append_2133) $(am__append_2140) \ + $(am__append_2147) $(am__append_2154) $(am__append_2161) \ + $(am__append_2168) $(am__append_2175) $(am__append_2182) \ + $(am__append_2189) $(am__append_2196) $(am__append_2203) \ + $(am__append_2210) $(am__append_2217) $(am__append_2224) \ + $(am__append_2231) $(am__append_2238) $(am__append_2245) \ + $(am__append_2252) $(am__append_2259) $(am__append_2266) \ + $(am__append_2273) $(am__append_2280) $(am__append_2287) \ + $(am__append_2294) $(am__append_2301) $(am__append_2308) \ + $(am__append_2315) $(am__append_2322) $(am__append_2329) \ + $(am__append_2336) $(am__append_2343) $(am__append_2350) \ + $(am__append_2357) $(am__append_2364) $(am__append_2371) \ + $(am__append_2378) $(am__append_2385) $(am__append_2392) \ + $(am__append_2399) $(am__append_2406) $(am__append_2413) \ + $(am__append_2420) $(am__append_2427) $(am__append_2434) \ + $(am__append_2441) $(am__append_2448) $(am__append_2455) \ + $(am__append_2462) $(am__append_2469) $(am__append_2476) \ + $(am__append_2483) $(am__append_2490) $(am__append_2497) \ + $(am__append_2504) $(am__append_2511) $(am__append_2518) \ + $(am__append_2525) $(am__append_2532) $(am__append_2539) \ + $(am__append_2546) $(am__append_2553) $(am__append_2560) \ + $(am__append_2567) $(am__append_2574) $(am__append_2581) \ + $(am__append_2588) $(am__append_2595) $(am__append_2602) \ + $(am__append_2609) $(am__append_2616) $(am__append_2623) \ + $(am__append_2630) $(am__append_2637) $(am__append_2644) \ + $(am__append_2651) $(am__append_2658) $(am__append_2665) \ + $(am__append_2672) $(am__append_2679) $(am__append_2686) \ + $(am__append_2693) $(am__append_2700) $(am__append_2707) \ + $(am__append_2714) $(am__append_2721) $(am__append_2728) \ + $(am__append_2735) $(am__append_2742) $(am__append_2749) \ + $(am__append_2756) $(am__append_2763) $(am__append_2770) \ + $(am__append_2777) kern/elfXX.c \ + lib/libgcrypt-grub/cipher/crypto.lst $(am__append_2784) \ + $(am__append_2791) $(am__append_2798) $(am__append_2805) \ + $(am__append_2812) $(am__append_2819) $(am__append_2826) \ + $(am__append_2833) $(am__append_2840) $(am__append_2847) \ + $(am__append_2854) $(am__append_2861) $(am__append_2868) \ + $(am__append_2875) $(am__append_2882) $(am__append_2889) \ + $(am__append_2896) $(am__append_2903) $(am__append_2910) \ + $(am__append_2917) $(am__append_2924) $(am__append_2931) \ + $(am__append_2938) $(am__append_2945) $(am__append_2952) \ + $(am__append_2959) $(am__append_2966) $(am__append_2973) \ + $(am__append_2980) $(am__append_2987) $(am__append_2994) \ + lib/i386/setjmp.S lib/mips/setjmp.S lib/x86_64/setjmp.S \ + lib/sparc64/setjmp.S lib/powerpc/setjmp.S lib/ia64/setjmp.S \ + lib/ia64/longjmp.S lib/arm/setjmp.S lib/arm64/setjmp.S \ + $(am__append_3001) $(am__append_3008) $(am__append_3015) \ + $(am__append_3022) $(am__append_3029) $(am__append_3036) \ + $(am__append_3043) $(am__append_3050) $(am__append_3057) \ + $(am__append_3064) $(am__append_3071) $(am__append_3078) \ + $(am__append_3085) $(am__append_3092) $(am__append_3099) \ + $(am__append_3106) $(am__append_3113) $(am__append_3120) \ + $(am__append_3127) $(am__append_3134) $(am__append_3141) \ + $(am__append_3148) $(am__append_3155) $(am__append_3162) \ + $(am__append_3169) $(am__append_3176) $(am__append_3183) \ + $(am__append_3190) $(am__append_3197) $(am__append_3204) \ + $(am__append_3211) $(am__append_3218) $(am__append_3225) \ + $(am__append_3232) $(am__append_3239) $(am__append_3246) \ + $(am__append_3253) $(am__append_3260) $(am__append_3267) \ + $(am__append_3274) $(am__append_3281) $(am__append_3288) \ + $(am__append_3295) $(am__append_3302) $(am__append_3309) \ + $(am__append_3316) $(am__append_3323) $(am__append_3330) \ + $(am__append_3337) $(am__append_3344) $(am__append_3351) \ + $(am__append_3358) $(am__append_3365) $(am__append_3372) \ + $(am__append_3379) $(am__append_3386) $(am__append_3393) \ + $(am__append_3400) $(am__append_3407) $(am__append_3414) \ + $(am__append_3421) $(am__append_3428) $(am__append_3435) \ + $(am__append_3442) $(am__append_3449) $(am__append_3456) \ + $(am__append_3463) $(am__append_3470) $(am__append_3477) \ + $(am__append_3484) loader/machoXX.c $(am__append_3491) \ + $(am__append_3498) $(am__append_3505) $(am__append_3512) \ + $(am__append_3519) $(am__append_3526) $(am__append_3533) \ + $(am__append_3540) $(am__append_3547) $(am__append_3554) \ + $(am__append_3561) $(am__append_3568) $(am__append_3575) \ + $(am__append_3582) $(am__append_3589) $(am__append_3596) \ + $(am__append_3603) $(am__append_3610) $(am__append_3617) \ + $(am__append_3624) $(am__append_3631) $(am__append_3638) \ + script/yylex.l script/parser.y $(am__append_3645) \ + $(am__append_3652) $(am__append_3659) $(am__append_3666) \ + $(am__append_3673) $(am__append_3680) $(am__append_3687) \ + $(am__append_3694) $(am__append_3701) $(am__append_3708) \ + $(am__append_3715) $(am__append_3722) $(am__append_3729) \ + $(am__append_3736) $(am__append_3743) $(am__append_3750) \ + $(am__append_3757) $(am__append_3764) $(am__append_3771) \ + $(am__append_3778) $(am__append_3785) $(am__append_3792) \ + $(am__append_3799) $(am__append_3806) $(am__append_3813) \ + $(am__append_3820) $(am__append_3827) $(am__append_3834) \ + $(am__append_3841) $(am__append_3848) $(am__append_3855) \ + $(am__append_3862) $(am__append_3869) $(am__append_3876) \ + $(am__append_3883) $(am__append_3890) $(am__append_3897) \ + $(am__append_3904) $(am__append_3911) $(am__append_3918) \ + $(am__append_3925) $(am__append_3932) $(am__append_3939) \ + $(am__append_3946) $(am__append_3953) $(am__append_3960) \ + $(am__append_3967) $(am__append_3974) $(am__append_3981) \ + $(am__append_3988) $(am__append_3995) $(am__append_4002) \ + $(am__append_4009) $(am__append_4016) $(am__append_4023) \ + $(am__append_4030) $(am__append_4037) $(am__append_4044) \ + $(am__append_4051) $(am__append_4058) $(am__append_4065) \ + $(am__append_4072) $(am__append_4079) $(am__append_4086) \ + $(am__append_4093) $(am__append_4100) $(am__append_4107) \ + $(am__append_4114) $(am__append_4121) $(am__append_4128) \ + $(am__append_4135) $(am__append_4142) $(am__append_4149) \ + $(am__append_4156) $(am__append_4163) $(am__append_4170) \ + $(am__append_4177) $(am__append_4184) $(am__append_4191) \ + $(am__append_4198) $(am__append_4205) $(am__append_4212) \ + $(am__append_4219) $(am__append_4226) $(am__append_4233) \ + $(am__append_4240) $(am__append_4247) $(am__append_4254) \ + $(am__append_4261) $(am__append_4268) $(am__append_4275) \ + $(am__append_4282) $(am__append_4289) $(am__append_4296) \ + $(am__append_4303) $(am__append_4310) $(am__append_4317) \ + $(am__append_4324) $(am__append_4331) $(am__append_4338) \ + $(am__append_4345) $(am__append_4352) $(am__append_4359) \ + $(am__append_4366) $(am__append_4373) $(am__append_4380) \ + $(am__append_4387) $(am__append_4394) $(am__append_4401) \ + $(am__append_4408) $(am__append_4415) $(am__append_4422) \ + $(am__append_4429) $(am__append_4436) $(am__append_4443) \ + $(am__append_4450) $(am__append_4457) $(am__append_4464) \ + $(am__append_4471) $(am__append_4478) $(am__append_4485) \ + $(am__append_4492) $(am__append_4499) $(am__append_4506) \ + $(am__append_4513) $(am__append_4520) $(am__append_4527) \ + $(am__append_4534) $(am__append_4541) $(am__append_4548) \ + $(am__append_4555) $(am__append_4562) $(am__append_4569) \ + $(am__append_4576) $(am__append_4583) $(am__append_4590) \ + $(am__append_4597) $(am__append_4604) $(am__append_4611) \ + $(am__append_4618) $(am__append_4625) $(am__append_4632) \ + $(am__append_4639) $(am__append_4646) $(am__append_4653) \ + $(am__append_4660) $(am__append_4667) $(am__append_4674) \ + $(am__append_4681) $(am__append_4688) $(am__append_4695) \ + $(am__append_4702) $(am__append_4709) $(am__append_4716) \ + $(am__append_4723) $(am__append_4730) $(am__append_4737) \ + $(am__append_4744) $(am__append_4751) $(am__append_4758) \ + $(am__append_4765) $(am__append_4772) $(am__append_4779) \ + $(am__append_4786) $(am__append_4793) $(am__append_4800) \ + $(am__append_4807) $(am__append_4814) $(am__append_4821) \ + $(am__append_4828) $(am__append_4835) $(am__append_4842) \ + $(am__append_4849) $(am__append_4856) $(am__append_4863) \ + $(am__append_4870) $(am__append_4877) commands/fileXX.c \ + loader/i386/xen_fileXX.c $(am__append_4883) $(am__append_4888) \ + $(am__append_4893) $(am__append_4898) $(am__append_4903) \ + $(am__append_4908) $(am__append_4913) $(am__append_4918) \ + $(am__append_4923) $(am__append_4928) $(am__append_4933) \ + $(am__append_4938) $(am__append_4943) $(am__append_4948) \ + $(am__append_4953) $(am__append_4958) $(am__append_4963) \ + $(am__append_4968) $(am__append_4973) $(am__append_4978) \ + $(am__append_4983) $(am__append_4988) $(am__append_4993) \ + $(am__append_4998) $(am__append_5003) $(am__append_5008) \ + $(am__append_5013) $(am__append_5018) $(am__append_5023) \ + $(am__append_5028) $(am__append_5033) $(am__append_5038) \ + $(am__append_5043) $(am__append_5048) $(am__append_5053) \ + $(am__append_5060) gensyminfo.sh.in genmod.sh.in modinfo.sh.in \ + gmodule.pl.in gdb_grub.in $(am__append_5066) +platform_SCRIPTS = +EXTRA_DIST = $(am__append_5065) +CLEANFILES = build-grub-pep2elf$(BUILD_EXEEXT) \ + build-grub-pe2elf$(BUILD_EXEEXT) gentrigtables$(BUILD_EXEEXT) \ + build-grub-module-verifier$(BUILD_EXEEXT) trigtables.c \ + grub_script.tab.c grub_script.tab.h grub_script.yy.c \ + grub_script.yy.h $(nodist_disk_module_SOURCES) disk.marker \ + $(nodist_trig_module_SOURCES) trig.marker $(am__append_7) \ + $(am__append_14) $(am__append_21) $(am__append_28) \ + $(am__append_35) $(am__append_42) $(am__append_49) \ + $(am__append_56) $(am__append_63) $(am__append_70) \ + $(am__append_77) $(am__append_84) $(am__append_91) \ + $(am__append_98) $(am__append_105) $(am__append_112) \ + $(am__append_119) $(am__append_126) $(am__append_133) \ + $(am__append_140) $(am__append_147) $(am__append_154) \ + $(am__append_161) $(am__append_168) $(am__append_175) \ + $(am__append_182) $(am__append_189) $(am__append_196) \ + $(am__append_203) $(am__append_210) $(am__append_217) \ + $(am__append_224) $(am__append_231) $(am__append_238) \ + $(am__append_245) $(am__append_252) $(am__append_259) \ + $(am__append_266) $(am__append_273) $(am__append_280) \ + $(am__append_287) $(am__append_294) $(am__append_301) \ + $(am__append_308) $(am__append_315) $(am__append_322) \ + $(am__append_329) $(am__append_336) $(am__append_343) \ + $(am__append_350) $(am__append_357) $(am__append_364) \ + $(am__append_371) $(am__append_378) $(am__append_385) \ + $(am__append_392) $(am__append_399) $(am__append_406) \ + $(am__append_413) $(am__append_420) $(am__append_427) \ + $(am__append_434) $(am__append_441) $(am__append_448) \ + $(am__append_455) $(am__append_462) $(am__append_469) \ + $(am__append_476) $(am__append_483) $(am__append_490) \ + $(am__append_497) $(am__append_504) $(am__append_511) \ + $(am__append_518) $(am__append_525) $(am__append_532) \ + $(am__append_539) $(am__append_546) $(am__append_553) \ + $(am__append_560) $(am__append_567) $(am__append_574) \ + $(am__append_581) $(am__append_588) $(am__append_595) \ + $(am__append_602) $(am__append_609) $(am__append_616) \ + $(am__append_623) $(am__append_630) $(am__append_637) \ + $(am__append_644) $(am__append_651) $(am__append_658) \ + $(am__append_665) $(am__append_672) $(am__append_679) \ + $(am__append_686) $(am__append_693) $(am__append_700) \ + $(am__append_707) $(am__append_714) $(am__append_721) \ + $(am__append_728) $(am__append_735) $(am__append_742) \ + $(am__append_749) $(am__append_756) $(am__append_763) \ + $(am__append_770) $(am__append_777) $(am__append_784) \ + $(am__append_791) $(am__append_798) $(am__append_805) \ + $(am__append_812) $(am__append_819) $(am__append_826) \ + $(am__append_833) $(am__append_840) $(am__append_847) \ + $(am__append_854) $(am__append_861) $(am__append_868) \ + $(am__append_875) $(am__append_882) $(am__append_889) \ + $(am__append_896) $(am__append_903) $(am__append_910) \ + $(am__append_917) $(am__append_924) $(am__append_931) \ + $(am__append_938) $(am__append_945) $(am__append_952) \ + $(am__append_959) $(am__append_966) $(am__append_973) \ + $(am__append_980) $(am__append_987) \ + $(nodist_regexp_module_SOURCES) regexp.marker \ + $(am__append_994) $(am__append_1001) $(am__append_1008) \ + $(am__append_1015) $(am__append_1022) $(am__append_1029) \ + $(am__append_1036) $(am__append_1043) $(am__append_1050) \ + $(am__append_1057) $(am__append_1064) $(am__append_1071) \ + $(am__append_1078) $(am__append_1085) $(am__append_1092) \ + $(am__append_1099) $(am__append_1106) $(am__append_1113) \ + $(am__append_1120) $(am__append_1127) $(am__append_1134) \ + $(am__append_1141) $(am__append_1148) $(am__append_1155) \ + $(am__append_1162) $(am__append_1169) $(am__append_1176) \ + $(am__append_1183) $(am__append_1190) $(am__append_1197) \ + $(am__append_1204) $(am__append_1211) $(am__append_1218) \ + $(am__append_1225) $(am__append_1232) $(am__append_1239) \ + $(am__append_1246) $(am__append_1253) $(am__append_1260) \ + $(am__append_1267) $(am__append_1274) \ + $(nodist_blocklist_module_SOURCES) blocklist.marker \ + $(am__append_1281) $(am__append_1288) $(am__append_1295) \ + $(am__append_1302) $(am__append_1309) $(am__append_1316) \ + $(am__append_1323) $(am__append_1330) $(am__append_1337) \ + $(am__append_1344) $(am__append_1351) $(am__append_1358) \ + $(am__append_1365) $(am__append_1372) $(am__append_1379) \ + $(nodist_cat_module_SOURCES) cat.marker \ + $(nodist_cmp_module_SOURCES) cmp.marker \ + $(nodist_configfile_module_SOURCES) configfile.marker \ + $(am__append_1386) $(am__append_1393) $(am__append_1400) \ + $(am__append_1407) $(am__append_1414) $(am__append_1421) \ + $(am__append_1428) $(am__append_1435) $(am__append_1442) \ + $(nodist_date_module_SOURCES) date.marker $(am__append_1449) \ + $(nodist_echo_module_SOURCES) echo.marker \ + $(nodist_eval_module_SOURCES) eval.marker $(am__append_1456) \ + $(am__append_1463) $(am__append_1470) $(am__append_1477) \ + $(am__append_1484) $(am__append_1491) $(am__append_1498) \ + $(am__append_1505) $(am__append_1512) $(am__append_1519) \ + $(am__append_1526) $(nodist_gptsync_module_SOURCES) \ + gptsync.marker $(am__append_1533) $(am__append_1540) \ + $(am__append_1547) $(am__append_1554) $(am__append_1561) \ + $(am__append_1568) $(am__append_1575) $(am__append_1582) \ + $(am__append_1589) $(am__append_1596) $(am__append_1603) \ + $(am__append_1610) $(am__append_1617) $(am__append_1624) \ + $(am__append_1631) $(am__append_1638) $(am__append_1645) \ + $(am__append_1652) $(am__append_1659) $(am__append_1666) \ + $(am__append_1673) $(am__append_1680) $(am__append_1687) \ + $(am__append_1694) $(am__append_1701) $(am__append_1708) \ + $(am__append_1715) $(am__append_1722) $(am__append_1729) \ + $(am__append_1736) $(am__append_1743) $(am__append_1750) \ + $(am__append_1757) $(am__append_1764) $(am__append_1771) \ + $(am__append_1778) $(am__append_1785) $(am__append_1792) \ + $(nodist_hashsum_module_SOURCES) hashsum.marker \ + $(nodist_verify_module_SOURCES) verify.marker \ + $(am__append_1799) $(am__append_1806) $(am__append_1813) \ + $(am__append_1820) $(am__append_1827) $(am__append_1834) \ + $(am__append_1841) $(am__append_1848) $(am__append_1855) \ + $(nodist_help_module_SOURCES) help.marker \ + $(nodist_hexdump_module_SOURCES) hexdump.marker \ + $(nodist_keystatus_module_SOURCES) keystatus.marker \ + $(am__append_1862) $(am__append_1869) \ + $(nodist_loadenv_module_SOURCES) loadenv.marker \ + $(nodist_ls_module_SOURCES) ls.marker \ + $(nodist_lsmmap_module_SOURCES) lsmmap.marker \ + $(am__append_1876) $(am__append_1883) $(am__append_1890) \ + $(am__append_1897) $(am__append_1904) $(am__append_1911) \ + $(am__append_1918) $(am__append_1925) \ + $(nodist_memrw_module_SOURCES) memrw.marker \ + $(nodist_minicmd_module_SOURCES) minicmd.marker \ + $(nodist_parttool_module_SOURCES) parttool.marker \ + $(nodist_password_module_SOURCES) password.marker \ + $(nodist_password_pbkdf2_module_SOURCES) \ + password_pbkdf2.marker $(am__append_1932) $(am__append_1939) \ + $(am__append_1946) $(am__append_1953) $(am__append_1960) \ + $(am__append_1967) $(am__append_1974) $(am__append_1981) \ + $(am__append_1988) $(am__append_1995) $(am__append_2002) \ + $(am__append_2009) $(am__append_2016) $(am__append_2023) \ + $(am__append_2030) $(am__append_2037) $(am__append_2044) \ + $(am__append_2051) $(am__append_2058) $(am__append_2065) \ + $(am__append_2072) $(nodist_probe_module_SOURCES) probe.marker \ + $(nodist_read_module_SOURCES) read.marker \ + $(nodist_search_module_SOURCES) search.marker \ + $(nodist_search_fs_file_module_SOURCES) search_fs_file.marker \ + $(nodist_search_fs_uuid_module_SOURCES) search_fs_uuid.marker \ + $(nodist_search_label_module_SOURCES) search_label.marker \ + $(am__append_2079) $(am__append_2086) $(am__append_2093) \ + $(am__append_2100) $(am__append_2107) $(am__append_2114) \ + $(am__append_2121) $(am__append_2128) $(am__append_2135) \ + $(am__append_2142) $(am__append_2149) $(am__append_2156) \ + $(am__append_2163) $(am__append_2170) $(am__append_2177) \ + $(am__append_2184) $(nodist_sleep_module_SOURCES) sleep.marker \ + $(am__append_2191) $(am__append_2198) \ + $(nodist_terminal_module_SOURCES) terminal.marker \ + $(nodist_test_module_SOURCES) test.marker \ + $(nodist_true_module_SOURCES) true.marker $(am__append_2205) \ + $(am__append_2212) $(am__append_2219) $(am__append_2226) \ + $(am__append_2233) $(am__append_2240) $(am__append_2247) \ + $(am__append_2254) $(nodist_videoinfo_module_SOURCES) \ + videoinfo.marker $(nodist_videotest_module_SOURCES) \ + videotest.marker $(nodist_xnu_uuid_module_SOURCES) \ + xnu_uuid.marker $(nodist_dm_nv_module_SOURCES) dm_nv.marker \ + $(nodist_loopback_module_SOURCES) loopback.marker \ + $(nodist_cryptodisk_module_SOURCES) cryptodisk.marker \ + $(nodist_luks_module_SOURCES) luks.marker \ + $(nodist_geli_module_SOURCES) geli.marker \ + $(nodist_lvm_module_SOURCES) lvm.marker \ + $(nodist_ldm_module_SOURCES) ldm.marker \ + $(nodist_mdraid09_module_SOURCES) mdraid09.marker \ + $(nodist_mdraid09_be_module_SOURCES) mdraid09_be.marker \ + $(nodist_mdraid1x_module_SOURCES) mdraid1x.marker \ + $(nodist_diskfilter_module_SOURCES) diskfilter.marker \ + $(nodist_raid5rec_module_SOURCES) raid5rec.marker \ + $(nodist_raid6rec_module_SOURCES) raid6rec.marker \ + $(nodist_scsi_module_SOURCES) scsi.marker \ + $(nodist_memdisk_module_SOURCES) memdisk.marker \ + $(am__append_2261) $(am__append_2268) $(am__append_2275) \ + $(am__append_2282) $(am__append_2289) $(am__append_2296) \ + $(am__append_2303) $(am__append_2310) $(am__append_2317) \ + $(am__append_2324) $(am__append_2331) $(am__append_2338) \ + $(am__append_2345) $(am__append_2352) $(am__append_2359) \ + $(am__append_2366) $(am__append_2373) $(am__append_2380) \ + $(am__append_2387) $(am__append_2394) $(am__append_2401) \ + $(am__append_2408) $(am__append_2415) $(am__append_2422) \ + $(am__append_2429) $(am__append_2436) $(am__append_2443) \ + $(am__append_2450) $(am__append_2457) $(am__append_2464) \ + $(am__append_2471) $(am__append_2478) $(am__append_2485) \ + $(am__append_2492) $(am__append_2499) $(am__append_2506) \ + $(am__append_2513) $(am__append_2520) $(am__append_2527) \ + $(am__append_2534) $(am__append_2541) $(am__append_2548) \ + $(am__append_2555) $(am__append_2562) $(am__append_2569) \ + $(am__append_2576) $(am__append_2583) $(am__append_2590) \ + $(am__append_2597) $(am__append_2604) $(am__append_2611) \ + $(am__append_2618) $(am__append_2625) $(am__append_2632) \ + $(am__append_2639) $(am__append_2646) $(am__append_2653) \ + $(nodist_procfs_module_SOURCES) procfs.marker \ + $(nodist_affs_module_SOURCES) affs.marker \ + $(nodist_afs_module_SOURCES) afs.marker \ + $(nodist_bfs_module_SOURCES) bfs.marker \ + $(nodist_btrfs_module_SOURCES) btrfs.marker \ + $(nodist_archelp_module_SOURCES) archelp.marker \ + $(nodist_cbfs_module_SOURCES) cbfs.marker \ + $(nodist_cpio_module_SOURCES) cpio.marker \ + $(nodist_cpio_be_module_SOURCES) cpio_be.marker \ + $(nodist_newc_module_SOURCES) newc.marker \ + $(nodist_odc_module_SOURCES) odc.marker \ + $(nodist_ext2_module_SOURCES) ext2.marker \ + $(nodist_fat_module_SOURCES) fat.marker \ + $(nodist_exfat_module_SOURCES) exfat.marker \ + $(nodist_fshelp_module_SOURCES) fshelp.marker \ + $(nodist_hfs_module_SOURCES) hfs.marker \ + $(nodist_hfsplus_module_SOURCES) hfsplus.marker \ + $(nodist_hfspluscomp_module_SOURCES) hfspluscomp.marker \ + $(nodist_iso9660_module_SOURCES) iso9660.marker \ + $(nodist_jfs_module_SOURCES) jfs.marker \ + $(nodist_minix_module_SOURCES) minix.marker \ + $(nodist_minix2_module_SOURCES) minix2.marker \ + $(nodist_minix3_module_SOURCES) minix3.marker \ + $(nodist_minix_be_module_SOURCES) minix_be.marker \ + $(nodist_minix2_be_module_SOURCES) minix2_be.marker \ + $(nodist_minix3_be_module_SOURCES) minix3_be.marker \ + $(nodist_nilfs2_module_SOURCES) nilfs2.marker \ + $(nodist_ntfs_module_SOURCES) ntfs.marker \ + $(nodist_ntfscomp_module_SOURCES) ntfscomp.marker \ + $(nodist_reiserfs_module_SOURCES) reiserfs.marker \ + $(nodist_romfs_module_SOURCES) romfs.marker \ + $(nodist_sfs_module_SOURCES) sfs.marker \ + $(nodist_squash4_module_SOURCES) squash4.marker \ + $(nodist_tar_module_SOURCES) tar.marker \ + $(nodist_udf_module_SOURCES) udf.marker \ + $(nodist_ufs1_module_SOURCES) ufs1.marker \ + $(nodist_ufs1_be_module_SOURCES) ufs1_be.marker \ + $(nodist_ufs2_module_SOURCES) ufs2.marker \ + $(nodist_xfs_module_SOURCES) xfs.marker \ + $(nodist_zfs_module_SOURCES) zfs.marker \ + $(nodist_zfscrypt_module_SOURCES) zfscrypt.marker \ + $(nodist_zfsinfo_module_SOURCES) zfsinfo.marker \ + $(nodist_macbless_module_SOURCES) macbless.marker \ + $(am__append_2660) $(nodist_gettext_module_SOURCES) \ + gettext.marker $(nodist_gfxmenu_module_SOURCES) gfxmenu.marker \ + $(nodist_hello_module_SOURCES) hello.marker \ + $(nodist_gzio_module_SOURCES) gzio.marker \ + $(nodist_offsetio_module_SOURCES) offsetio.marker \ + $(am__append_2667) $(am__append_2674) $(am__append_2681) \ + $(am__append_2688) $(am__append_2695) $(am__append_2702) \ + $(am__append_2709) $(am__append_2716) $(am__append_2723) \ + $(am__append_2730) $(am__append_2737) $(am__append_2744) \ + $(am__append_2751) $(am__append_2758) $(am__append_2765) \ + $(am__append_2772) $(am__append_2779) \ + $(nodist_elf_module_SOURCES) elf.marker \ + $(nodist_crypto_module_SOURCES) crypto.marker \ + $(nodist_pbkdf2_module_SOURCES) pbkdf2.marker \ + $(am__append_2786) $(am__append_2793) $(am__append_2800) \ + $(am__append_2807) $(am__append_2814) $(am__append_2821) \ + $(am__append_2828) $(am__append_2835) $(am__append_2842) \ + $(am__append_2849) $(am__append_2856) $(am__append_2863) \ + $(am__append_2870) $(am__append_2877) $(am__append_2884) \ + $(am__append_2891) $(am__append_2898) $(am__append_2905) \ + $(am__append_2912) $(am__append_2919) $(am__append_2926) \ + $(am__append_2933) $(am__append_2940) $(am__append_2947) \ + $(am__append_2954) $(am__append_2961) $(am__append_2968) \ + $(am__append_2975) $(am__append_2982) $(am__append_2989) \ + $(am__append_2996) $(nodist_setjmp_module_SOURCES) \ + setjmp.marker $(am__append_3003) $(am__append_3010) \ + $(am__append_3017) $(am__append_3024) $(am__append_3031) \ + $(am__append_3038) $(am__append_3045) $(am__append_3052) \ + $(am__append_3059) $(am__append_3066) $(am__append_3073) \ + $(am__append_3080) $(am__append_3087) $(am__append_3094) \ + $(am__append_3101) $(am__append_3108) $(am__append_3115) \ + $(am__append_3122) $(am__append_3129) $(am__append_3136) \ + $(am__append_3143) $(am__append_3150) $(am__append_3157) \ + $(am__append_3164) $(am__append_3171) $(am__append_3178) \ + $(am__append_3185) $(am__append_3192) $(am__append_3199) \ + $(am__append_3206) $(am__append_3213) $(am__append_3220) \ + $(am__append_3227) $(am__append_3234) $(am__append_3241) \ + $(am__append_3248) $(am__append_3255) $(am__append_3262) \ + $(am__append_3269) $(am__append_3276) $(am__append_3283) \ + $(am__append_3290) $(am__append_3297) $(am__append_3304) \ + $(am__append_3311) $(am__append_3318) $(am__append_3325) \ + $(am__append_3332) $(am__append_3339) $(am__append_3346) \ + $(am__append_3353) $(am__append_3360) $(am__append_3367) \ + $(am__append_3374) $(am__append_3381) $(am__append_3388) \ + $(am__append_3395) $(am__append_3402) $(am__append_3409) \ + $(am__append_3416) $(am__append_3423) $(am__append_3430) \ + $(am__append_3437) $(am__append_3444) $(am__append_3451) \ + $(am__append_3458) $(am__append_3465) $(am__append_3472) \ + $(am__append_3479) $(am__append_3486) \ + $(nodist_macho_module_SOURCES) macho.marker $(am__append_3493) \ + $(am__append_3500) $(am__append_3507) $(am__append_3514) \ + $(am__append_3521) $(am__append_3528) $(am__append_3535) \ + $(am__append_3542) $(am__append_3549) $(am__append_3556) \ + $(am__append_3563) $(am__append_3570) $(am__append_3577) \ + $(am__append_3584) $(am__append_3591) $(am__append_3598) \ + $(am__append_3605) $(am__append_3612) $(am__append_3619) \ + $(am__append_3626) $(am__append_3633) $(am__append_3640) \ + $(nodist_normal_module_SOURCES) normal.marker \ + $(nodist_part_acorn_module_SOURCES) part_acorn.marker \ + $(nodist_part_amiga_module_SOURCES) part_amiga.marker \ + $(nodist_part_apple_module_SOURCES) part_apple.marker \ + $(nodist_part_gpt_module_SOURCES) part_gpt.marker \ + $(nodist_part_msdos_module_SOURCES) part_msdos.marker \ + $(nodist_part_sun_module_SOURCES) part_sun.marker \ + $(nodist_part_plan_module_SOURCES) part_plan.marker \ + $(nodist_part_dvh_module_SOURCES) part_dvh.marker \ + $(nodist_part_bsd_module_SOURCES) part_bsd.marker \ + $(nodist_part_sunpc_module_SOURCES) part_sunpc.marker \ + $(nodist_part_dfly_module_SOURCES) part_dfly.marker \ + $(nodist_msdospart_module_SOURCES) msdospart.marker \ + $(am__append_3647) $(am__append_3654) $(am__append_3661) \ + $(am__append_3668) $(am__append_3675) $(am__append_3682) \ + $(am__append_3689) $(am__append_3696) $(am__append_3703) \ + $(am__append_3710) $(am__append_3717) $(am__append_3724) \ + $(am__append_3731) $(am__append_3738) $(am__append_3745) \ + $(am__append_3752) $(am__append_3759) $(am__append_3766) \ + $(am__append_3773) $(am__append_3780) $(am__append_3787) \ + $(am__append_3794) $(am__append_3801) $(am__append_3808) \ + $(nodist_gfxterm_background_module_SOURCES) \ + gfxterm_background.marker $(am__append_3815) \ + $(am__append_3822) $(am__append_3829) $(am__append_3836) \ + $(am__append_3843) $(am__append_3850) $(am__append_3857) \ + $(am__append_3864) $(am__append_3871) $(am__append_3878) \ + $(am__append_3885) $(am__append_3892) $(am__append_3899) \ + $(am__append_3906) $(am__append_3913) $(am__append_3920) \ + $(am__append_3927) $(am__append_3934) $(am__append_3941) \ + $(am__append_3948) $(am__append_3955) $(am__append_3962) \ + $(am__append_3969) $(am__append_3976) $(am__append_3983) \ + $(am__append_3990) $(am__append_3997) $(am__append_4004) \ + $(am__append_4011) $(am__append_4018) $(am__append_4025) \ + $(am__append_4032) $(am__append_4039) $(am__append_4046) \ + $(am__append_4053) $(am__append_4060) $(am__append_4067) \ + $(am__append_4074) $(am__append_4081) $(am__append_4088) \ + $(am__append_4095) $(am__append_4102) $(am__append_4109) \ + $(am__append_4116) $(am__append_4123) $(am__append_4130) \ + $(am__append_4137) $(am__append_4144) \ + $(nodist_functional_test_module_SOURCES) \ + functional_test.marker $(nodist_exfctest_module_SOURCES) \ + exfctest.marker $(nodist_setjmp_test_module_SOURCES) \ + setjmp_test.marker $(nodist_signature_test_module_SOURCES) \ + signature_test.marker $(nodist_sleep_test_module_SOURCES) \ + sleep_test.marker $(nodist_xnu_uuid_test_module_SOURCES) \ + xnu_uuid_test.marker $(nodist_pbkdf2_test_module_SOURCES) \ + pbkdf2_test.marker $(am__append_4151) $(am__append_4158) \ + $(am__append_4165) $(am__append_4172) $(am__append_4179) \ + $(am__append_4186) $(am__append_4193) $(am__append_4200) \ + $(am__append_4207) $(am__append_4214) $(am__append_4221) \ + $(am__append_4228) $(am__append_4235) $(am__append_4242) \ + $(am__append_4249) $(am__append_4256) $(am__append_4263) \ + $(am__append_4270) $(am__append_4277) $(am__append_4284) \ + $(am__append_4291) $(am__append_4298) \ + $(nodist_div_test_module_SOURCES) div_test.marker \ + $(nodist_mul_test_module_SOURCES) mul_test.marker \ + $(nodist_shift_test_module_SOURCES) shift_test.marker \ + $(nodist_cmp_test_module_SOURCES) cmp_test.marker \ + $(nodist_ctz_test_module_SOURCES) ctz_test.marker \ + $(nodist_bswap_test_module_SOURCES) bswap_test.marker \ + $(nodist_videotest_checksum_module_SOURCES) \ + videotest_checksum.marker \ + $(nodist_gfxterm_menu_module_SOURCES) gfxterm_menu.marker \ + $(nodist_cmdline_cat_test_module_SOURCES) \ + cmdline_cat_test.marker $(nodist_bitmap_module_SOURCES) \ + bitmap.marker $(nodist_bitmap_scale_module_SOURCES) \ + bitmap_scale.marker $(am__append_4305) $(am__append_4312) \ + $(am__append_4319) $(am__append_4326) $(am__append_4333) \ + $(am__append_4340) $(am__append_4347) \ + $(nodist_jpeg_module_SOURCES) jpeg.marker \ + $(nodist_png_module_SOURCES) png.marker \ + $(nodist_tga_module_SOURCES) tga.marker $(am__append_4354) \ + $(am__append_4361) $(am__append_4368) $(am__append_4375) \ + $(am__append_4382) $(am__append_4389) $(am__append_4396) \ + $(am__append_4403) $(am__append_4410) $(am__append_4417) \ + $(am__append_4424) $(am__append_4431) $(am__append_4438) \ + $(am__append_4445) $(am__append_4452) $(am__append_4459) \ + $(am__append_4466) $(am__append_4473) $(am__append_4480) \ + $(am__append_4487) $(am__append_4494) $(am__append_4501) \ + $(am__append_4508) $(am__append_4515) $(am__append_4522) \ + $(am__append_4529) $(am__append_4536) $(am__append_4543) \ + $(am__append_4550) $(am__append_4557) $(am__append_4564) \ + $(am__append_4571) $(am__append_4578) $(am__append_4585) \ + $(am__append_4592) $(nodist_video_colors_module_SOURCES) \ + video_colors.marker $(am__append_4599) $(am__append_4606) \ + $(nodist_datehook_module_SOURCES) datehook.marker \ + $(nodist_net_module_SOURCES) net.marker \ + $(nodist_tftp_module_SOURCES) tftp.marker \ + $(nodist_http_module_SOURCES) http.marker $(am__append_4613) \ + $(am__append_4620) $(am__append_4627) $(am__append_4634) \ + $(am__append_4641) $(am__append_4648) $(am__append_4655) \ + $(am__append_4662) $(am__append_4669) $(am__append_4676) \ + $(am__append_4683) $(am__append_4690) $(am__append_4697) \ + $(am__append_4704) $(am__append_4711) \ + $(nodist_syslinuxcfg_module_SOURCES) syslinuxcfg.marker \ + $(nodist_test_blockarg_module_SOURCES) test_blockarg.marker \ + $(nodist_xzio_module_SOURCES) xzio.marker \ + $(nodist_lzopio_module_SOURCES) lzopio.marker \ + $(nodist_testload_module_SOURCES) testload.marker \ + $(am__append_4718) $(am__append_4725) $(am__append_4732) \ + $(am__append_4739) $(am__append_4746) $(am__append_4753) \ + $(am__append_4760) $(am__append_4767) $(am__append_4774) \ + $(am__append_4781) $(am__append_4788) $(am__append_4795) \ + $(am__append_4802) $(am__append_4809) $(am__append_4816) \ + $(am__append_4823) $(nodist_priority_queue_module_SOURCES) \ + priority_queue.marker $(nodist_time_module_SOURCES) \ + time.marker $(am__append_4830) $(am__append_4837) \ + $(nodist_adler32_module_SOURCES) adler32.marker \ + $(nodist_crc64_module_SOURCES) crc64.marker \ + $(nodist_mpi_module_SOURCES) mpi.marker \ + $(nodist_all_video_module_SOURCES) all_video.marker \ + $(am__append_4844) $(am__append_4851) $(am__append_4858) \ + $(am__append_4865) $(am__append_4872) $(am__append_4879) \ + $(nodist_testspeed_module_SOURCES) testspeed.marker \ + $(nodist_tr_module_SOURCES) tr.marker \ + $(nodist_progress_module_SOURCES) progress.marker \ + $(nodist_file_module_SOURCES) file.marker \ + $(nodist_gcry_arcfour_module_SOURCES) gcry_arcfour.marker \ + $(nodist_gcry_blowfish_module_SOURCES) gcry_blowfish.marker \ + $(nodist_gcry_camellia_module_SOURCES) gcry_camellia.marker \ + $(nodist_gcry_cast5_module_SOURCES) gcry_cast5.marker \ + $(nodist_gcry_crc_module_SOURCES) gcry_crc.marker \ + $(nodist_gcry_des_module_SOURCES) gcry_des.marker \ + $(nodist_gcry_dsa_module_SOURCES) gcry_dsa.marker \ + $(nodist_gcry_idea_module_SOURCES) gcry_idea.marker \ + $(nodist_gcry_md4_module_SOURCES) gcry_md4.marker \ + $(nodist_gcry_md5_module_SOURCES) gcry_md5.marker \ + $(nodist_gcry_rfc2268_module_SOURCES) gcry_rfc2268.marker \ + $(nodist_gcry_rijndael_module_SOURCES) gcry_rijndael.marker \ + $(nodist_gcry_rmd160_module_SOURCES) gcry_rmd160.marker \ + $(nodist_gcry_rsa_module_SOURCES) gcry_rsa.marker \ + $(nodist_gcry_seed_module_SOURCES) gcry_seed.marker \ + $(nodist_gcry_serpent_module_SOURCES) gcry_serpent.marker \ + $(nodist_gcry_sha1_module_SOURCES) gcry_sha1.marker \ + $(nodist_gcry_sha256_module_SOURCES) gcry_sha256.marker \ + $(nodist_gcry_sha512_module_SOURCES) gcry_sha512.marker \ + $(nodist_gcry_tiger_module_SOURCES) gcry_tiger.marker \ + $(nodist_gcry_twofish_module_SOURCES) gcry_twofish.marker \ + $(nodist_gcry_whirlpool_module_SOURCES) gcry_whirlpool.marker \ + $(am__append_4885) $(am__append_4890) $(am__append_4895) \ + $(am__append_4900) $(am__append_4905) $(am__append_4910) \ + $(am__append_4915) $(am__append_4920) $(am__append_4925) \ + $(am__append_4930) $(am__append_4935) $(am__append_4940) \ + $(am__append_4945) $(am__append_4950) $(am__append_4955) \ + $(am__append_4960) $(am__append_4965) $(am__append_4970) \ + $(am__append_4975) $(am__append_4980) $(am__append_4985) \ + $(am__append_4990) $(am__append_4995) $(am__append_5000) \ + $(am__append_5005) $(am__append_5010) $(am__append_5015) \ + $(am__append_5020) $(am__append_5025) $(am__append_5030) \ + $(am__append_5035) $(am__append_5040) $(am__append_5045) \ + $(am__append_5050) $(am__append_5055) $(am__append_5059) \ + $(am__append_5062) gensyminfo.sh genmod.sh modinfo.sh \ + gmodule.pl gdb_grub $(am__append_5064) symlist.h symlist.c \ + kernel_syms.lst $(am__append_5092) fs.lst command.lst \ + partmap.lst terminal.lst parttool.lst video.lst crypto.lst \ + config.log syminfo.lst moddep.lst $(MOD_FILES) \ + $(am__append_5094) +BUILT_SOURCES = $(nodist_disk_module_SOURCES) \ + $(nodist_trig_module_SOURCES) $(am__append_6) $(am__append_13) \ + $(am__append_20) $(am__append_27) $(am__append_34) \ + $(am__append_41) $(am__append_48) $(am__append_55) \ + $(am__append_62) $(am__append_69) $(am__append_76) \ + $(am__append_83) $(am__append_90) $(am__append_97) \ + $(am__append_104) $(am__append_111) $(am__append_118) \ + $(am__append_125) $(am__append_132) $(am__append_139) \ + $(am__append_146) $(am__append_153) $(am__append_160) \ + $(am__append_167) $(am__append_174) $(am__append_181) \ + $(am__append_188) $(am__append_195) $(am__append_202) \ + $(am__append_209) $(am__append_216) $(am__append_223) \ + $(am__append_230) $(am__append_237) $(am__append_244) \ + $(am__append_251) $(am__append_258) $(am__append_265) \ + $(am__append_272) $(am__append_279) $(am__append_286) \ + $(am__append_293) $(am__append_300) $(am__append_307) \ + $(am__append_314) $(am__append_321) $(am__append_328) \ + $(am__append_335) $(am__append_342) $(am__append_349) \ + $(am__append_356) $(am__append_363) $(am__append_370) \ + $(am__append_377) $(am__append_384) $(am__append_391) \ + $(am__append_398) $(am__append_405) $(am__append_412) \ + $(am__append_419) $(am__append_426) $(am__append_433) \ + $(am__append_440) $(am__append_447) $(am__append_454) \ + $(am__append_461) $(am__append_468) $(am__append_475) \ + $(am__append_482) $(am__append_489) $(am__append_496) \ + $(am__append_503) $(am__append_510) $(am__append_517) \ + $(am__append_524) $(am__append_531) $(am__append_538) \ + $(am__append_545) $(am__append_552) $(am__append_559) \ + $(am__append_566) $(am__append_573) $(am__append_580) \ + $(am__append_587) $(am__append_594) $(am__append_601) \ + $(am__append_608) $(am__append_615) $(am__append_622) \ + $(am__append_629) $(am__append_636) $(am__append_643) \ + $(am__append_650) $(am__append_657) $(am__append_664) \ + $(am__append_671) $(am__append_678) $(am__append_685) \ + $(am__append_692) $(am__append_699) $(am__append_706) \ + $(am__append_713) $(am__append_720) $(am__append_727) \ + $(am__append_734) $(am__append_741) $(am__append_748) \ + $(am__append_755) $(am__append_762) $(am__append_769) \ + $(am__append_776) $(am__append_783) $(am__append_790) \ + $(am__append_797) $(am__append_804) $(am__append_811) \ + $(am__append_818) $(am__append_825) $(am__append_832) \ + $(am__append_839) $(am__append_846) $(am__append_853) \ + $(am__append_860) $(am__append_867) $(am__append_874) \ + $(am__append_881) $(am__append_888) $(am__append_895) \ + $(am__append_902) $(am__append_909) $(am__append_916) \ + $(am__append_923) $(am__append_930) $(am__append_937) \ + $(am__append_944) $(am__append_951) $(am__append_958) \ + $(am__append_965) $(am__append_972) $(am__append_979) \ + $(am__append_986) $(nodist_regexp_module_SOURCES) \ + $(am__append_993) $(am__append_1000) $(am__append_1007) \ + $(am__append_1014) $(am__append_1021) $(am__append_1028) \ + $(am__append_1035) $(am__append_1042) $(am__append_1049) \ + $(am__append_1056) $(am__append_1063) $(am__append_1070) \ + $(am__append_1077) $(am__append_1084) $(am__append_1091) \ + $(am__append_1098) $(am__append_1105) $(am__append_1112) \ + $(am__append_1119) $(am__append_1126) $(am__append_1133) \ + $(am__append_1140) $(am__append_1147) $(am__append_1154) \ + $(am__append_1161) $(am__append_1168) $(am__append_1175) \ + $(am__append_1182) $(am__append_1189) $(am__append_1196) \ + $(am__append_1203) $(am__append_1210) $(am__append_1217) \ + $(am__append_1224) $(am__append_1231) $(am__append_1238) \ + $(am__append_1245) $(am__append_1252) $(am__append_1259) \ + $(am__append_1266) $(am__append_1273) \ + $(nodist_blocklist_module_SOURCES) $(am__append_1280) \ + $(am__append_1287) $(am__append_1294) $(am__append_1301) \ + $(am__append_1308) $(am__append_1315) $(am__append_1322) \ + $(am__append_1329) $(am__append_1336) $(am__append_1343) \ + $(am__append_1350) $(am__append_1357) $(am__append_1364) \ + $(am__append_1371) $(am__append_1378) \ + $(nodist_cat_module_SOURCES) $(nodist_cmp_module_SOURCES) \ + $(nodist_configfile_module_SOURCES) $(am__append_1385) \ + $(am__append_1392) $(am__append_1399) $(am__append_1406) \ + $(am__append_1413) $(am__append_1420) $(am__append_1427) \ + $(am__append_1434) $(am__append_1441) \ + $(nodist_date_module_SOURCES) $(am__append_1448) \ + $(nodist_echo_module_SOURCES) $(nodist_eval_module_SOURCES) \ + $(am__append_1455) $(am__append_1462) $(am__append_1469) \ + $(am__append_1476) $(am__append_1483) $(am__append_1490) \ + $(am__append_1497) $(am__append_1504) $(am__append_1511) \ + $(am__append_1518) $(am__append_1525) \ + $(nodist_gptsync_module_SOURCES) $(am__append_1532) \ + $(am__append_1539) $(am__append_1546) $(am__append_1553) \ + $(am__append_1560) $(am__append_1567) $(am__append_1574) \ + $(am__append_1581) $(am__append_1588) $(am__append_1595) \ + $(am__append_1602) $(am__append_1609) $(am__append_1616) \ + $(am__append_1623) $(am__append_1630) $(am__append_1637) \ + $(am__append_1644) $(am__append_1651) $(am__append_1658) \ + $(am__append_1665) $(am__append_1672) $(am__append_1679) \ + $(am__append_1686) $(am__append_1693) $(am__append_1700) \ + $(am__append_1707) $(am__append_1714) $(am__append_1721) \ + $(am__append_1728) $(am__append_1735) $(am__append_1742) \ + $(am__append_1749) $(am__append_1756) $(am__append_1763) \ + $(am__append_1770) $(am__append_1777) $(am__append_1784) \ + $(am__append_1791) $(nodist_hashsum_module_SOURCES) \ + $(nodist_verify_module_SOURCES) $(am__append_1798) \ + $(am__append_1805) $(am__append_1812) $(am__append_1819) \ + $(am__append_1826) $(am__append_1833) $(am__append_1840) \ + $(am__append_1847) $(am__append_1854) \ + $(nodist_help_module_SOURCES) $(nodist_hexdump_module_SOURCES) \ + $(nodist_keystatus_module_SOURCES) $(am__append_1861) \ + $(am__append_1868) $(nodist_loadenv_module_SOURCES) \ + $(nodist_ls_module_SOURCES) $(nodist_lsmmap_module_SOURCES) \ + $(am__append_1875) $(am__append_1882) $(am__append_1889) \ + $(am__append_1896) $(am__append_1903) $(am__append_1910) \ + $(am__append_1917) $(am__append_1924) \ + $(nodist_memrw_module_SOURCES) \ + $(nodist_minicmd_module_SOURCES) \ + $(nodist_parttool_module_SOURCES) \ + $(nodist_password_module_SOURCES) \ + $(nodist_password_pbkdf2_module_SOURCES) $(am__append_1931) \ + $(am__append_1938) $(am__append_1945) $(am__append_1952) \ + $(am__append_1959) $(am__append_1966) $(am__append_1973) \ + $(am__append_1980) $(am__append_1987) $(am__append_1994) \ + $(am__append_2001) $(am__append_2008) $(am__append_2015) \ + $(am__append_2022) $(am__append_2029) $(am__append_2036) \ + $(am__append_2043) $(am__append_2050) $(am__append_2057) \ + $(am__append_2064) $(am__append_2071) \ + $(nodist_probe_module_SOURCES) $(nodist_read_module_SOURCES) \ + $(nodist_search_module_SOURCES) \ + $(nodist_search_fs_file_module_SOURCES) \ + $(nodist_search_fs_uuid_module_SOURCES) \ + $(nodist_search_label_module_SOURCES) $(am__append_2078) \ + $(am__append_2085) $(am__append_2092) $(am__append_2099) \ + $(am__append_2106) $(am__append_2113) $(am__append_2120) \ + $(am__append_2127) $(am__append_2134) $(am__append_2141) \ + $(am__append_2148) $(am__append_2155) $(am__append_2162) \ + $(am__append_2169) $(am__append_2176) $(am__append_2183) \ + $(nodist_sleep_module_SOURCES) $(am__append_2190) \ + $(am__append_2197) $(nodist_terminal_module_SOURCES) \ + $(nodist_test_module_SOURCES) $(nodist_true_module_SOURCES) \ + $(am__append_2204) $(am__append_2211) $(am__append_2218) \ + $(am__append_2225) $(am__append_2232) $(am__append_2239) \ + $(am__append_2246) $(am__append_2253) \ + $(nodist_videoinfo_module_SOURCES) \ + $(nodist_videotest_module_SOURCES) \ + $(nodist_xnu_uuid_module_SOURCES) \ + $(nodist_dm_nv_module_SOURCES) \ + $(nodist_loopback_module_SOURCES) \ + $(nodist_cryptodisk_module_SOURCES) \ + $(nodist_luks_module_SOURCES) $(nodist_geli_module_SOURCES) \ + $(nodist_lvm_module_SOURCES) $(nodist_ldm_module_SOURCES) \ + $(nodist_mdraid09_module_SOURCES) \ + $(nodist_mdraid09_be_module_SOURCES) \ + $(nodist_mdraid1x_module_SOURCES) \ + $(nodist_diskfilter_module_SOURCES) \ + $(nodist_raid5rec_module_SOURCES) \ + $(nodist_raid6rec_module_SOURCES) \ + $(nodist_scsi_module_SOURCES) $(nodist_memdisk_module_SOURCES) \ + $(am__append_2260) $(am__append_2267) $(am__append_2274) \ + $(am__append_2281) $(am__append_2288) $(am__append_2295) \ + $(am__append_2302) $(am__append_2309) $(am__append_2316) \ + $(am__append_2323) $(am__append_2330) $(am__append_2337) \ + $(am__append_2344) $(am__append_2351) $(am__append_2358) \ + $(am__append_2365) $(am__append_2372) $(am__append_2379) \ + $(am__append_2386) $(am__append_2393) $(am__append_2400) \ + $(am__append_2407) $(am__append_2414) $(am__append_2421) \ + $(am__append_2428) $(am__append_2435) $(am__append_2442) \ + $(am__append_2449) $(am__append_2456) $(am__append_2463) \ + $(am__append_2470) $(am__append_2477) $(am__append_2484) \ + $(am__append_2491) $(am__append_2498) $(am__append_2505) \ + $(am__append_2512) $(am__append_2519) $(am__append_2526) \ + $(am__append_2533) $(am__append_2540) $(am__append_2547) \ + $(am__append_2554) $(am__append_2561) $(am__append_2568) \ + $(am__append_2575) $(am__append_2582) $(am__append_2589) \ + $(am__append_2596) $(am__append_2603) $(am__append_2610) \ + $(am__append_2617) $(am__append_2624) $(am__append_2631) \ + $(am__append_2638) $(am__append_2645) $(am__append_2652) \ + $(nodist_procfs_module_SOURCES) $(nodist_affs_module_SOURCES) \ + $(nodist_afs_module_SOURCES) $(nodist_bfs_module_SOURCES) \ + $(nodist_btrfs_module_SOURCES) \ + $(nodist_archelp_module_SOURCES) $(nodist_cbfs_module_SOURCES) \ + $(nodist_cpio_module_SOURCES) $(nodist_cpio_be_module_SOURCES) \ + $(nodist_newc_module_SOURCES) $(nodist_odc_module_SOURCES) \ + $(nodist_ext2_module_SOURCES) $(nodist_fat_module_SOURCES) \ + $(nodist_exfat_module_SOURCES) $(nodist_fshelp_module_SOURCES) \ + $(nodist_hfs_module_SOURCES) $(nodist_hfsplus_module_SOURCES) \ + $(nodist_hfspluscomp_module_SOURCES) \ + $(nodist_iso9660_module_SOURCES) $(nodist_jfs_module_SOURCES) \ + $(nodist_minix_module_SOURCES) $(nodist_minix2_module_SOURCES) \ + $(nodist_minix3_module_SOURCES) \ + $(nodist_minix_be_module_SOURCES) \ + $(nodist_minix2_be_module_SOURCES) \ + $(nodist_minix3_be_module_SOURCES) \ + $(nodist_nilfs2_module_SOURCES) $(nodist_ntfs_module_SOURCES) \ + $(nodist_ntfscomp_module_SOURCES) \ + $(nodist_reiserfs_module_SOURCES) \ + $(nodist_romfs_module_SOURCES) $(nodist_sfs_module_SOURCES) \ + $(nodist_squash4_module_SOURCES) $(nodist_tar_module_SOURCES) \ + $(nodist_udf_module_SOURCES) $(nodist_ufs1_module_SOURCES) \ + $(nodist_ufs1_be_module_SOURCES) $(nodist_ufs2_module_SOURCES) \ + $(nodist_xfs_module_SOURCES) $(nodist_zfs_module_SOURCES) \ + $(nodist_zfscrypt_module_SOURCES) \ + $(nodist_zfsinfo_module_SOURCES) \ + $(nodist_macbless_module_SOURCES) $(am__append_2659) \ + $(nodist_gettext_module_SOURCES) \ + $(nodist_gfxmenu_module_SOURCES) \ + $(nodist_hello_module_SOURCES) $(nodist_gzio_module_SOURCES) \ + $(nodist_offsetio_module_SOURCES) $(am__append_2666) \ + $(am__append_2673) $(am__append_2680) $(am__append_2687) \ + $(am__append_2694) $(am__append_2701) $(am__append_2708) \ + $(am__append_2715) $(am__append_2722) $(am__append_2729) \ + $(am__append_2736) $(am__append_2743) $(am__append_2750) \ + $(am__append_2757) $(am__append_2764) $(am__append_2771) \ + $(am__append_2778) $(nodist_elf_module_SOURCES) \ + $(nodist_crypto_module_SOURCES) \ + $(nodist_pbkdf2_module_SOURCES) $(am__append_2785) \ + $(am__append_2792) $(am__append_2799) $(am__append_2806) \ + $(am__append_2813) $(am__append_2820) $(am__append_2827) \ + $(am__append_2834) $(am__append_2841) $(am__append_2848) \ + $(am__append_2855) $(am__append_2862) $(am__append_2869) \ + $(am__append_2876) $(am__append_2883) $(am__append_2890) \ + $(am__append_2897) $(am__append_2904) $(am__append_2911) \ + $(am__append_2918) $(am__append_2925) $(am__append_2932) \ + $(am__append_2939) $(am__append_2946) $(am__append_2953) \ + $(am__append_2960) $(am__append_2967) $(am__append_2974) \ + $(am__append_2981) $(am__append_2988) $(am__append_2995) \ + $(nodist_setjmp_module_SOURCES) $(am__append_3002) \ + $(am__append_3009) $(am__append_3016) $(am__append_3023) \ + $(am__append_3030) $(am__append_3037) $(am__append_3044) \ + $(am__append_3051) $(am__append_3058) $(am__append_3065) \ + $(am__append_3072) $(am__append_3079) $(am__append_3086) \ + $(am__append_3093) $(am__append_3100) $(am__append_3107) \ + $(am__append_3114) $(am__append_3121) $(am__append_3128) \ + $(am__append_3135) $(am__append_3142) $(am__append_3149) \ + $(am__append_3156) $(am__append_3163) $(am__append_3170) \ + $(am__append_3177) $(am__append_3184) $(am__append_3191) \ + $(am__append_3198) $(am__append_3205) $(am__append_3212) \ + $(am__append_3219) $(am__append_3226) $(am__append_3233) \ + $(am__append_3240) $(am__append_3247) $(am__append_3254) \ + $(am__append_3261) $(am__append_3268) $(am__append_3275) \ + $(am__append_3282) $(am__append_3289) $(am__append_3296) \ + $(am__append_3303) $(am__append_3310) $(am__append_3317) \ + $(am__append_3324) $(am__append_3331) $(am__append_3338) \ + $(am__append_3345) $(am__append_3352) $(am__append_3359) \ + $(am__append_3366) $(am__append_3373) $(am__append_3380) \ + $(am__append_3387) $(am__append_3394) $(am__append_3401) \ + $(am__append_3408) $(am__append_3415) $(am__append_3422) \ + $(am__append_3429) $(am__append_3436) $(am__append_3443) \ + $(am__append_3450) $(am__append_3457) $(am__append_3464) \ + $(am__append_3471) $(am__append_3478) $(am__append_3485) \ + $(nodist_macho_module_SOURCES) $(am__append_3492) \ + $(am__append_3499) $(am__append_3506) $(am__append_3513) \ + $(am__append_3520) $(am__append_3527) $(am__append_3534) \ + $(am__append_3541) $(am__append_3548) $(am__append_3555) \ + $(am__append_3562) $(am__append_3569) $(am__append_3576) \ + $(am__append_3583) $(am__append_3590) $(am__append_3597) \ + $(am__append_3604) $(am__append_3611) $(am__append_3618) \ + $(am__append_3625) $(am__append_3632) $(am__append_3639) \ + $(nodist_normal_module_SOURCES) \ + $(nodist_part_acorn_module_SOURCES) \ + $(nodist_part_amiga_module_SOURCES) \ + $(nodist_part_apple_module_SOURCES) \ + $(nodist_part_gpt_module_SOURCES) \ + $(nodist_part_msdos_module_SOURCES) \ + $(nodist_part_sun_module_SOURCES) \ + $(nodist_part_plan_module_SOURCES) \ + $(nodist_part_dvh_module_SOURCES) \ + $(nodist_part_bsd_module_SOURCES) \ + $(nodist_part_sunpc_module_SOURCES) \ + $(nodist_part_dfly_module_SOURCES) \ + $(nodist_msdospart_module_SOURCES) $(am__append_3646) \ + $(am__append_3653) $(am__append_3660) $(am__append_3667) \ + $(am__append_3674) $(am__append_3681) $(am__append_3688) \ + $(am__append_3695) $(am__append_3702) $(am__append_3709) \ + $(am__append_3716) $(am__append_3723) $(am__append_3730) \ + $(am__append_3737) $(am__append_3744) $(am__append_3751) \ + $(am__append_3758) $(am__append_3765) $(am__append_3772) \ + $(am__append_3779) $(am__append_3786) $(am__append_3793) \ + $(am__append_3800) $(am__append_3807) \ + $(nodist_gfxterm_background_module_SOURCES) $(am__append_3814) \ + $(am__append_3821) $(am__append_3828) $(am__append_3835) \ + $(am__append_3842) $(am__append_3849) $(am__append_3856) \ + $(am__append_3863) $(am__append_3870) $(am__append_3877) \ + $(am__append_3884) $(am__append_3891) $(am__append_3898) \ + $(am__append_3905) $(am__append_3912) $(am__append_3919) \ + $(am__append_3926) $(am__append_3933) $(am__append_3940) \ + $(am__append_3947) $(am__append_3954) $(am__append_3961) \ + $(am__append_3968) $(am__append_3975) $(am__append_3982) \ + $(am__append_3989) $(am__append_3996) $(am__append_4003) \ + $(am__append_4010) $(am__append_4017) $(am__append_4024) \ + $(am__append_4031) $(am__append_4038) $(am__append_4045) \ + $(am__append_4052) $(am__append_4059) $(am__append_4066) \ + $(am__append_4073) $(am__append_4080) $(am__append_4087) \ + $(am__append_4094) $(am__append_4101) $(am__append_4108) \ + $(am__append_4115) $(am__append_4122) $(am__append_4129) \ + $(am__append_4136) $(am__append_4143) \ + $(nodist_functional_test_module_SOURCES) \ + $(nodist_exfctest_module_SOURCES) \ + $(nodist_setjmp_test_module_SOURCES) \ + $(nodist_signature_test_module_SOURCES) \ + $(nodist_sleep_test_module_SOURCES) \ + $(nodist_xnu_uuid_test_module_SOURCES) \ + $(nodist_pbkdf2_test_module_SOURCES) $(am__append_4150) \ + $(am__append_4157) $(am__append_4164) $(am__append_4171) \ + $(am__append_4178) $(am__append_4185) $(am__append_4192) \ + $(am__append_4199) $(am__append_4206) $(am__append_4213) \ + $(am__append_4220) $(am__append_4227) $(am__append_4234) \ + $(am__append_4241) $(am__append_4248) $(am__append_4255) \ + $(am__append_4262) $(am__append_4269) $(am__append_4276) \ + $(am__append_4283) $(am__append_4290) $(am__append_4297) \ + $(nodist_div_test_module_SOURCES) \ + $(nodist_mul_test_module_SOURCES) \ + $(nodist_shift_test_module_SOURCES) \ + $(nodist_cmp_test_module_SOURCES) \ + $(nodist_ctz_test_module_SOURCES) \ + $(nodist_bswap_test_module_SOURCES) \ + $(nodist_videotest_checksum_module_SOURCES) \ + $(nodist_gfxterm_menu_module_SOURCES) \ + $(nodist_cmdline_cat_test_module_SOURCES) \ + $(nodist_bitmap_module_SOURCES) \ + $(nodist_bitmap_scale_module_SOURCES) $(am__append_4304) \ + $(am__append_4311) $(am__append_4318) $(am__append_4325) \ + $(am__append_4332) $(am__append_4339) $(am__append_4346) \ + $(nodist_jpeg_module_SOURCES) $(nodist_png_module_SOURCES) \ + $(nodist_tga_module_SOURCES) $(am__append_4353) \ + $(am__append_4360) $(am__append_4367) $(am__append_4374) \ + $(am__append_4381) $(am__append_4388) $(am__append_4395) \ + $(am__append_4402) $(am__append_4409) $(am__append_4416) \ + $(am__append_4423) $(am__append_4430) $(am__append_4437) \ + $(am__append_4444) $(am__append_4451) $(am__append_4458) \ + $(am__append_4465) $(am__append_4472) $(am__append_4479) \ + $(am__append_4486) $(am__append_4493) $(am__append_4500) \ + $(am__append_4507) $(am__append_4514) $(am__append_4521) \ + $(am__append_4528) $(am__append_4535) $(am__append_4542) \ + $(am__append_4549) $(am__append_4556) $(am__append_4563) \ + $(am__append_4570) $(am__append_4577) $(am__append_4584) \ + $(am__append_4591) $(nodist_video_colors_module_SOURCES) \ + $(am__append_4598) $(am__append_4605) \ + $(nodist_datehook_module_SOURCES) $(nodist_net_module_SOURCES) \ + $(nodist_tftp_module_SOURCES) $(nodist_http_module_SOURCES) \ + $(am__append_4612) $(am__append_4619) $(am__append_4626) \ + $(am__append_4633) $(am__append_4640) $(am__append_4647) \ + $(am__append_4654) $(am__append_4661) $(am__append_4668) \ + $(am__append_4675) $(am__append_4682) $(am__append_4689) \ + $(am__append_4696) $(am__append_4703) $(am__append_4710) \ + $(nodist_syslinuxcfg_module_SOURCES) \ + $(nodist_test_blockarg_module_SOURCES) \ + $(nodist_xzio_module_SOURCES) $(nodist_lzopio_module_SOURCES) \ + $(nodist_testload_module_SOURCES) $(am__append_4717) \ + $(am__append_4724) $(am__append_4731) $(am__append_4738) \ + $(am__append_4745) $(am__append_4752) $(am__append_4759) \ + $(am__append_4766) $(am__append_4773) $(am__append_4780) \ + $(am__append_4787) $(am__append_4794) $(am__append_4801) \ + $(am__append_4808) $(am__append_4815) $(am__append_4822) \ + $(nodist_priority_queue_module_SOURCES) \ + $(nodist_time_module_SOURCES) $(am__append_4829) \ + $(am__append_4836) $(nodist_adler32_module_SOURCES) \ + $(nodist_crc64_module_SOURCES) $(nodist_mpi_module_SOURCES) \ + $(nodist_all_video_module_SOURCES) $(am__append_4843) \ + $(am__append_4850) $(am__append_4857) $(am__append_4864) \ + $(am__append_4871) $(am__append_4878) \ + $(nodist_testspeed_module_SOURCES) $(nodist_tr_module_SOURCES) \ + $(nodist_progress_module_SOURCES) \ + $(nodist_file_module_SOURCES) \ + $(nodist_gcry_arcfour_module_SOURCES) \ + $(nodist_gcry_blowfish_module_SOURCES) \ + $(nodist_gcry_camellia_module_SOURCES) \ + $(nodist_gcry_cast5_module_SOURCES) \ + $(nodist_gcry_crc_module_SOURCES) \ + $(nodist_gcry_des_module_SOURCES) \ + $(nodist_gcry_dsa_module_SOURCES) \ + $(nodist_gcry_idea_module_SOURCES) \ + $(nodist_gcry_md4_module_SOURCES) \ + $(nodist_gcry_md5_module_SOURCES) \ + $(nodist_gcry_rfc2268_module_SOURCES) \ + $(nodist_gcry_rijndael_module_SOURCES) \ + $(nodist_gcry_rmd160_module_SOURCES) \ + $(nodist_gcry_rsa_module_SOURCES) \ + $(nodist_gcry_seed_module_SOURCES) \ + $(nodist_gcry_serpent_module_SOURCES) \ + $(nodist_gcry_sha1_module_SOURCES) \ + $(nodist_gcry_sha256_module_SOURCES) \ + $(nodist_gcry_sha512_module_SOURCES) \ + $(nodist_gcry_tiger_module_SOURCES) \ + $(nodist_gcry_twofish_module_SOURCES) \ + $(nodist_gcry_whirlpool_module_SOURCES) $(am__append_4884) \ + $(am__append_4889) $(am__append_4894) $(am__append_4899) \ + $(am__append_4904) $(am__append_4909) $(am__append_4914) \ + $(am__append_4919) $(am__append_4924) $(am__append_4929) \ + $(am__append_4934) $(am__append_4939) $(am__append_4944) \ + $(am__append_4949) $(am__append_4954) $(am__append_4959) \ + $(am__append_4964) $(am__append_4969) $(am__append_4974) \ + $(am__append_4979) $(am__append_4984) $(am__append_4989) \ + $(am__append_4994) $(am__append_4999) $(am__append_5004) \ + $(am__append_5009) $(am__append_5014) $(am__append_5019) \ + $(am__append_5024) $(am__append_5029) $(am__append_5034) \ + $(am__append_5039) $(am__append_5044) $(am__append_5049) \ + $(am__append_5054) $(am__append_5061) symlist.h symlist.c +MACHO2IMG = $(top_builddir)/grub-macho2img +AM_CFLAGS = $(TARGET_CFLAGS) +AM_LDFLAGS = $(TARGET_LDFLAGS) +AM_CPPFLAGS = $(TARGET_CPPFLAGS) $(CPPFLAGS_DEFAULT) +AM_CCASFLAGS = $(TARGET_CCASFLAGS) $(CCASFLAGS_DEFAULT) +disk_module_SOURCES = lib/disk.c ## platform sources +nodist_disk_module_SOURCES = ## platform nodist sources +disk_module_LDADD = +disk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +disk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +disk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +disk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +disk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +trig_module_SOURCES = ## platform sources +nodist_trig_module_SOURCES = trigtables.c ## platform nodist sources +trig_module_LDADD = +trig_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +trig_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +trig_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +trig_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +trig_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@cs5536_module_SOURCES = bus/cs5536.c ## platform sources +@COND_i386_efi_TRUE@cs5536_module_SOURCES = bus/cs5536.c ## platform sources +@COND_i386_ieee1275_TRUE@cs5536_module_SOURCES = bus/cs5536.c ## platform sources +@COND_i386_multiboot_TRUE@cs5536_module_SOURCES = bus/cs5536.c ## platform sources +@COND_i386_pc_TRUE@cs5536_module_SOURCES = bus/cs5536.c ## platform sources +@COND_i386_qemu_TRUE@cs5536_module_SOURCES = bus/cs5536.c ## platform sources +@COND_x86_64_efi_TRUE@cs5536_module_SOURCES = bus/cs5536.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_cs5536_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_cs5536_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cs5536_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cs5536_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cs5536_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cs5536_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_cs5536_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@cs5536_module_LDADD = +@COND_i386_efi_TRUE@cs5536_module_LDADD = +@COND_i386_ieee1275_TRUE@cs5536_module_LDADD = +@COND_i386_multiboot_TRUE@cs5536_module_LDADD = +@COND_i386_pc_TRUE@cs5536_module_LDADD = +@COND_i386_qemu_TRUE@cs5536_module_LDADD = +@COND_x86_64_efi_TRUE@cs5536_module_LDADD = +@COND_i386_coreboot_TRUE@cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cs5536_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cs5536_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cs5536_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cs5536_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@cs5536_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@lsspd_module_SOURCES = commands/mips/loongson/lsspd.c ## platform sources +@COND_mips_loongson_TRUE@nodist_lsspd_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@lsspd_module_LDADD = +@COND_mips_loongson_TRUE@lsspd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@lsspd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@lsspd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@lsspd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@lsspd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_i386_efi_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_i386_ieee1275_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_i386_multiboot_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_i386_pc_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_i386_qemu_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_mips_loongson_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_x86_64_efi_TRUE@usb_module_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usb_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usb_module_LDADD = +@COND_i386_efi_TRUE@usb_module_LDADD = +@COND_i386_ieee1275_TRUE@usb_module_LDADD = +@COND_i386_multiboot_TRUE@usb_module_LDADD = +@COND_i386_pc_TRUE@usb_module_LDADD = +@COND_i386_qemu_TRUE@usb_module_LDADD = +@COND_mips_loongson_TRUE@usb_module_LDADD = +@COND_x86_64_efi_TRUE@usb_module_LDADD = +@COND_i386_coreboot_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_i386_efi_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_i386_ieee1275_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_i386_multiboot_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_i386_pc_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_i386_qemu_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_mips_loongson_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_x86_64_efi_TRUE@usbserial_common_module_SOURCES = bus/usb/serial/common.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usbserial_common_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usbserial_common_module_LDADD = +@COND_i386_efi_TRUE@usbserial_common_module_LDADD = +@COND_i386_ieee1275_TRUE@usbserial_common_module_LDADD = +@COND_i386_multiboot_TRUE@usbserial_common_module_LDADD = +@COND_i386_pc_TRUE@usbserial_common_module_LDADD = +@COND_i386_qemu_TRUE@usbserial_common_module_LDADD = +@COND_mips_loongson_TRUE@usbserial_common_module_LDADD = +@COND_x86_64_efi_TRUE@usbserial_common_module_LDADD = +@COND_i386_coreboot_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_common_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_common_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_common_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_common_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usbserial_common_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_i386_efi_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_i386_ieee1275_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_i386_multiboot_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_i386_pc_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_i386_qemu_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_mips_loongson_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_x86_64_efi_TRUE@usbserial_pl2303_module_SOURCES = bus/usb/serial/pl2303.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usbserial_pl2303_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usbserial_pl2303_module_LDADD = +@COND_i386_efi_TRUE@usbserial_pl2303_module_LDADD = +@COND_i386_ieee1275_TRUE@usbserial_pl2303_module_LDADD = +@COND_i386_multiboot_TRUE@usbserial_pl2303_module_LDADD = +@COND_i386_pc_TRUE@usbserial_pl2303_module_LDADD = +@COND_i386_qemu_TRUE@usbserial_pl2303_module_LDADD = +@COND_mips_loongson_TRUE@usbserial_pl2303_module_LDADD = +@COND_x86_64_efi_TRUE@usbserial_pl2303_module_LDADD = +@COND_i386_coreboot_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_pl2303_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_pl2303_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_pl2303_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_pl2303_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usbserial_pl2303_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_i386_efi_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_i386_ieee1275_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_i386_multiboot_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_i386_pc_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_i386_qemu_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_mips_loongson_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_x86_64_efi_TRUE@usbserial_ftdi_module_SOURCES = bus/usb/serial/ftdi.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usbserial_ftdi_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usbserial_ftdi_module_LDADD = +@COND_i386_efi_TRUE@usbserial_ftdi_module_LDADD = +@COND_i386_ieee1275_TRUE@usbserial_ftdi_module_LDADD = +@COND_i386_multiboot_TRUE@usbserial_ftdi_module_LDADD = +@COND_i386_pc_TRUE@usbserial_ftdi_module_LDADD = +@COND_i386_qemu_TRUE@usbserial_ftdi_module_LDADD = +@COND_mips_loongson_TRUE@usbserial_ftdi_module_LDADD = +@COND_x86_64_efi_TRUE@usbserial_ftdi_module_LDADD = +@COND_i386_coreboot_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_ftdi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_ftdi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_ftdi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_ftdi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usbserial_ftdi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_i386_efi_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_i386_ieee1275_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_i386_multiboot_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_i386_pc_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_i386_qemu_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_mips_loongson_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_x86_64_efi_TRUE@usbserial_usbdebug_module_SOURCES = bus/usb/serial/usbdebug_late.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usbserial_usbdebug_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usbserial_usbdebug_module_LDADD = +@COND_i386_efi_TRUE@usbserial_usbdebug_module_LDADD = +@COND_i386_ieee1275_TRUE@usbserial_usbdebug_module_LDADD = +@COND_i386_multiboot_TRUE@usbserial_usbdebug_module_LDADD = +@COND_i386_pc_TRUE@usbserial_usbdebug_module_LDADD = +@COND_i386_qemu_TRUE@usbserial_usbdebug_module_LDADD = +@COND_mips_loongson_TRUE@usbserial_usbdebug_module_LDADD = +@COND_x86_64_efi_TRUE@usbserial_usbdebug_module_LDADD = +@COND_i386_coreboot_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_usbdebug_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_usbdebug_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_usbdebug_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbserial_usbdebug_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usbserial_usbdebug_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_i386_efi_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_i386_ieee1275_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_i386_multiboot_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_i386_pc_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_i386_qemu_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_mips_loongson_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_x86_64_efi_TRUE@uhci_module_SOURCES = bus/usb/uhci.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_uhci_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@uhci_module_LDADD = +@COND_i386_efi_TRUE@uhci_module_LDADD = +@COND_i386_ieee1275_TRUE@uhci_module_LDADD = +@COND_i386_multiboot_TRUE@uhci_module_LDADD = +@COND_i386_pc_TRUE@uhci_module_LDADD = +@COND_i386_qemu_TRUE@uhci_module_LDADD = +@COND_mips_loongson_TRUE@uhci_module_LDADD = +@COND_x86_64_efi_TRUE@uhci_module_LDADD = +@COND_i386_coreboot_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@uhci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@uhci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@uhci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@uhci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@uhci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_i386_efi_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_i386_ieee1275_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_i386_multiboot_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_i386_pc_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_i386_qemu_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_mips_loongson_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_x86_64_efi_TRUE@ohci_module_SOURCES = bus/usb/ohci.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_ohci_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@ohci_module_LDADD = +@COND_i386_efi_TRUE@ohci_module_LDADD = +@COND_i386_ieee1275_TRUE@ohci_module_LDADD = +@COND_i386_multiboot_TRUE@ohci_module_LDADD = +@COND_i386_pc_TRUE@ohci_module_LDADD = +@COND_i386_qemu_TRUE@ohci_module_LDADD = +@COND_mips_loongson_TRUE@ohci_module_LDADD = +@COND_x86_64_efi_TRUE@ohci_module_LDADD = +@COND_i386_coreboot_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ohci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ohci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ohci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ohci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@ohci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_i386_efi_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_i386_ieee1275_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_i386_multiboot_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_i386_pc_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_i386_qemu_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_mips_loongson_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_x86_64_efi_TRUE@ehci_module_SOURCES = bus/usb/ehci.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_ehci_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@ehci_module_LDADD = +@COND_i386_efi_TRUE@ehci_module_LDADD = +@COND_i386_ieee1275_TRUE@ehci_module_LDADD = +@COND_i386_multiboot_TRUE@ehci_module_LDADD = +@COND_i386_pc_TRUE@ehci_module_LDADD = +@COND_i386_qemu_TRUE@ehci_module_LDADD = +@COND_mips_loongson_TRUE@ehci_module_LDADD = +@COND_x86_64_efi_TRUE@ehci_module_LDADD = +@COND_i386_coreboot_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ehci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ehci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ehci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ehci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@ehci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@pci_module_SOURCES = bus/pci.c ## platform sources +@COND_i386_ieee1275_TRUE@pci_module_SOURCES = bus/i386/ieee1275/pci.c bus/pci.c ## platform sources +@COND_i386_multiboot_TRUE@pci_module_SOURCES = bus/pci.c ## platform sources +@COND_i386_pc_TRUE@pci_module_SOURCES = bus/pci.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_pci_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_pci_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_pci_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_pci_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@pci_module_LDADD = +@COND_i386_ieee1275_TRUE@pci_module_LDADD = +@COND_i386_multiboot_TRUE@pci_module_LDADD = +@COND_i386_pc_TRUE@pci_module_LDADD = +@COND_i386_coreboot_TRUE@pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@pci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@pci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@pci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@pci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@pci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_i386_efi_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_i386_ieee1275_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_i386_multiboot_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_i386_pc_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_i386_qemu_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_mips_loongson_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_mips_qemu_mips_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_x86_64_efi_TRUE@nativedisk_module_SOURCES = commands/nativedisk.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_nativedisk_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nativedisk_module_LDADD = +@COND_i386_efi_TRUE@nativedisk_module_LDADD = +@COND_i386_ieee1275_TRUE@nativedisk_module_LDADD = +@COND_i386_multiboot_TRUE@nativedisk_module_LDADD = +@COND_i386_pc_TRUE@nativedisk_module_LDADD = +@COND_i386_qemu_TRUE@nativedisk_module_LDADD = +@COND_mips_loongson_TRUE@nativedisk_module_LDADD = +@COND_mips_qemu_mips_TRUE@nativedisk_module_LDADD = +@COND_x86_64_efi_TRUE@nativedisk_module_LDADD = +@COND_i386_coreboot_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@nativedisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@nativedisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@nativedisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@nativedisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@nativedisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci_module_SOURCES = bus/emu/pci.c commands/lspci.c ## platform sources +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@nodist_emupci_module_SOURCES = ## platform nodist sources +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci_module_LDADD = +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@lsdev_module_SOURCES = commands/arc/lsdev.c ## platform sources +@COND_mips_arc_TRUE@nodist_lsdev_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@lsdev_module_LDADD = +@COND_mips_arc_TRUE@lsdev_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@lsdev_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@lsdev_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@lsdev_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@lsdev_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@lsxen_module_SOURCES = commands/xen/lsxen.c ## platform sources +@COND_x86_64_xen_TRUE@lsxen_module_SOURCES = commands/xen/lsxen.c ## platform sources +@COND_i386_xen_TRUE@nodist_lsxen_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_lsxen_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@lsxen_module_LDADD = +@COND_x86_64_xen_TRUE@lsxen_module_LDADD = +@COND_i386_xen_TRUE@lsxen_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@lsxen_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@lsxen_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@lsxen_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@lsxen_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@lsxen_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@lsxen_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@lsxen_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@lsxen_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@lsxen_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_i386_ieee1275_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_i386_multiboot_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_i386_pc_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_i386_qemu_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_mips_loongson_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_mips_qemu_mips_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_powerpc_ieee1275_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_sparc64_ieee1275_TRUE@cmostest_module_SOURCES = commands/i386/cmostest.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_cmostest_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@cmostest_module_LDADD = +@COND_i386_ieee1275_TRUE@cmostest_module_LDADD = +@COND_i386_multiboot_TRUE@cmostest_module_LDADD = +@COND_i386_pc_TRUE@cmostest_module_LDADD = +@COND_i386_qemu_TRUE@cmostest_module_LDADD = +@COND_mips_loongson_TRUE@cmostest_module_LDADD = +@COND_mips_qemu_mips_TRUE@cmostest_module_LDADD = +@COND_powerpc_ieee1275_TRUE@cmostest_module_LDADD = +@COND_sparc64_ieee1275_TRUE@cmostest_module_LDADD = +@COND_i386_coreboot_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmostest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmostest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmostest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmostest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@cmostest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_i386_ieee1275_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_i386_multiboot_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_i386_pc_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_i386_qemu_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_mips_loongson_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_mips_qemu_mips_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_powerpc_ieee1275_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_sparc64_ieee1275_TRUE@cmosdump_module_SOURCES = commands/i386/cmosdump.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_cmosdump_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@cmosdump_module_LDADD = +@COND_i386_ieee1275_TRUE@cmosdump_module_LDADD = +@COND_i386_multiboot_TRUE@cmosdump_module_LDADD = +@COND_i386_pc_TRUE@cmosdump_module_LDADD = +@COND_i386_qemu_TRUE@cmosdump_module_LDADD = +@COND_mips_loongson_TRUE@cmosdump_module_LDADD = +@COND_mips_qemu_mips_TRUE@cmosdump_module_LDADD = +@COND_powerpc_ieee1275_TRUE@cmosdump_module_LDADD = +@COND_sparc64_ieee1275_TRUE@cmosdump_module_LDADD = +@COND_i386_coreboot_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmosdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmosdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmosdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@cmosdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@cmosdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@iorw_module_SOURCES = commands/iorw.c ## platform sources +@COND_i386_efi_TRUE@iorw_module_SOURCES = commands/iorw.c ## platform sources +@COND_i386_ieee1275_TRUE@iorw_module_SOURCES = commands/iorw.c ## platform sources +@COND_i386_multiboot_TRUE@iorw_module_SOURCES = commands/iorw.c ## platform sources +@COND_i386_pc_TRUE@iorw_module_SOURCES = commands/iorw.c ## platform sources +@COND_i386_qemu_TRUE@iorw_module_SOURCES = commands/iorw.c ## platform sources +@COND_x86_64_efi_TRUE@iorw_module_SOURCES = commands/iorw.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_iorw_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_iorw_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_iorw_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_iorw_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_iorw_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_iorw_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_iorw_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@iorw_module_LDADD = +@COND_i386_efi_TRUE@iorw_module_LDADD = +@COND_i386_ieee1275_TRUE@iorw_module_LDADD = +@COND_i386_multiboot_TRUE@iorw_module_LDADD = +@COND_i386_pc_TRUE@iorw_module_LDADD = +@COND_i386_qemu_TRUE@iorw_module_LDADD = +@COND_x86_64_efi_TRUE@iorw_module_LDADD = +@COND_i386_coreboot_TRUE@iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@iorw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@iorw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@iorw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@iorw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@iorw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +@COND_i386_ieee1275_TRUE@cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +@COND_i386_multiboot_TRUE@cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +@COND_i386_pc_TRUE@cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +@COND_i386_qemu_TRUE@cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +@COND_x86_64_efi_TRUE@cbtable_module_SOURCES = kern/i386/coreboot/cbtable.c ## platform sources +@COND_i386_efi_TRUE@nodist_cbtable_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cbtable_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cbtable_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cbtable_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cbtable_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_cbtable_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@cbtable_module_LDADD = +@COND_i386_ieee1275_TRUE@cbtable_module_LDADD = +@COND_i386_multiboot_TRUE@cbtable_module_LDADD = +@COND_i386_pc_TRUE@cbtable_module_LDADD = +@COND_i386_qemu_TRUE@cbtable_module_LDADD = +@COND_x86_64_efi_TRUE@cbtable_module_LDADD = +@COND_i386_efi_TRUE@cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtable_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtable_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtable_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtable_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@cbtable_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +@COND_i386_efi_TRUE@cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +@COND_i386_ieee1275_TRUE@cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +@COND_i386_multiboot_TRUE@cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +@COND_i386_pc_TRUE@cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +@COND_i386_qemu_TRUE@cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +@COND_x86_64_efi_TRUE@cbtime_module_SOURCES = commands/i386/coreboot/cb_timestamps.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_cbtime_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_cbtime_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cbtime_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cbtime_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cbtime_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cbtime_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_cbtime_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@cbtime_module_LDADD = +@COND_i386_efi_TRUE@cbtime_module_LDADD = +@COND_i386_ieee1275_TRUE@cbtime_module_LDADD = +@COND_i386_multiboot_TRUE@cbtime_module_LDADD = +@COND_i386_pc_TRUE@cbtime_module_LDADD = +@COND_i386_qemu_TRUE@cbtime_module_LDADD = +@COND_x86_64_efi_TRUE@cbtime_module_LDADD = +@COND_i386_coreboot_TRUE@cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbtime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@cbtime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +@COND_i386_efi_TRUE@cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +@COND_i386_ieee1275_TRUE@cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +@COND_i386_multiboot_TRUE@cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +@COND_i386_pc_TRUE@cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +@COND_i386_qemu_TRUE@cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +@COND_x86_64_efi_TRUE@cbls_module_SOURCES = commands/i386/coreboot/cbls.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_cbls_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_cbls_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cbls_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cbls_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cbls_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cbls_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_cbls_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@cbls_module_LDADD = +@COND_i386_efi_TRUE@cbls_module_LDADD = +@COND_i386_ieee1275_TRUE@cbls_module_LDADD = +@COND_i386_multiboot_TRUE@cbls_module_LDADD = +@COND_i386_pc_TRUE@cbls_module_LDADD = +@COND_i386_qemu_TRUE@cbls_module_LDADD = +@COND_x86_64_efi_TRUE@cbls_module_LDADD = +@COND_i386_coreboot_TRUE@cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@cbls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +@COND_i386_efi_TRUE@cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +@COND_i386_ieee1275_TRUE@cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +@COND_i386_multiboot_TRUE@cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +@COND_i386_pc_TRUE@cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +@COND_i386_qemu_TRUE@cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +@COND_x86_64_efi_TRUE@cbmemc_module_SOURCES = term/i386/coreboot/cbmemc.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_cbmemc_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_cbmemc_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cbmemc_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cbmemc_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cbmemc_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cbmemc_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_cbmemc_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@cbmemc_module_LDADD = +@COND_i386_efi_TRUE@cbmemc_module_LDADD = +@COND_i386_ieee1275_TRUE@cbmemc_module_LDADD = +@COND_i386_multiboot_TRUE@cbmemc_module_LDADD = +@COND_i386_pc_TRUE@cbmemc_module_LDADD = +@COND_i386_qemu_TRUE@cbmemc_module_LDADD = +@COND_x86_64_efi_TRUE@cbmemc_module_LDADD = +@COND_i386_coreboot_TRUE@cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbmemc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbmemc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbmemc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cbmemc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@cbmemc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +regexp_module_SOURCES = commands/regexp.c commands/wildcard.c gnulib/regex.c ## platform sources +nodist_regexp_module_SOURCES = ## platform nodist sources +regexp_module_LDADD = +regexp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) $(CFLAGS_GNULIB) +regexp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +regexp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB) +regexp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +regexp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@acpi_module_SOURCES = commands/acpi.c ## platform sources +@COND_arm_efi_TRUE@acpi_module_SOURCES = commands/acpi.c ## platform sources +@COND_i386_coreboot_TRUE@acpi_module_SOURCES = commands/acpi.c ## platform sources +@COND_i386_efi_TRUE@acpi_module_SOURCES = commands/acpi.c ## platform sources +@COND_i386_multiboot_TRUE@acpi_module_SOURCES = commands/acpi.c ## platform sources +@COND_i386_pc_TRUE@acpi_module_SOURCES = kern/acpi.c kern/i386/pc/acpi.c commands/acpi.c ## platform sources +@COND_ia64_efi_TRUE@acpi_module_SOURCES = commands/acpi.c ## platform sources +@COND_x86_64_efi_TRUE@acpi_module_SOURCES = commands/acpi.c ## platform sources +@COND_arm64_efi_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_acpi_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@acpi_module_LDADD = +@COND_arm_efi_TRUE@acpi_module_LDADD = +@COND_i386_coreboot_TRUE@acpi_module_LDADD = +@COND_i386_efi_TRUE@acpi_module_LDADD = +@COND_i386_multiboot_TRUE@acpi_module_LDADD = +@COND_i386_pc_TRUE@acpi_module_LDADD = +@COND_ia64_efi_TRUE@acpi_module_LDADD = +@COND_x86_64_efi_TRUE@acpi_module_LDADD = +@COND_arm64_efi_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@acpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@acpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@acpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@acpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@acpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_arm_efi_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_i386_coreboot_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_i386_efi_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_i386_multiboot_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_i386_pc_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_ia64_efi_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_x86_64_efi_TRUE@lsacpi_module_SOURCES = commands/lsacpi.c ## platform sources +@COND_arm64_efi_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_lsacpi_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@lsacpi_module_LDADD = +@COND_arm_efi_TRUE@lsacpi_module_LDADD = +@COND_i386_coreboot_TRUE@lsacpi_module_LDADD = +@COND_i386_efi_TRUE@lsacpi_module_LDADD = +@COND_i386_multiboot_TRUE@lsacpi_module_LDADD = +@COND_i386_pc_TRUE@lsacpi_module_LDADD = +@COND_ia64_efi_TRUE@lsacpi_module_LDADD = +@COND_x86_64_efi_TRUE@lsacpi_module_LDADD = +@COND_arm64_efi_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsacpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsacpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsacpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsacpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@lsacpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +@COND_arm_efi_TRUE@lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +@COND_i386_efi_TRUE@lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +@COND_ia64_efi_TRUE@lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +@COND_x86_64_efi_TRUE@lsefisystab_module_SOURCES = commands/efi/lsefisystab.c ## platform sources +@COND_arm64_efi_TRUE@nodist_lsefisystab_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_lsefisystab_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_lsefisystab_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_lsefisystab_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_lsefisystab_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@lsefisystab_module_LDADD = +@COND_arm_efi_TRUE@lsefisystab_module_LDADD = +@COND_i386_efi_TRUE@lsefisystab_module_LDADD = +@COND_ia64_efi_TRUE@lsefisystab_module_LDADD = +@COND_x86_64_efi_TRUE@lsefisystab_module_LDADD = +@COND_arm64_efi_TRUE@lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefisystab_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefisystab_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefisystab_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefisystab_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@lsefisystab_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +@COND_arm_efi_TRUE@lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +@COND_i386_efi_TRUE@lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +@COND_ia64_efi_TRUE@lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +@COND_x86_64_efi_TRUE@lssal_module_SOURCES = commands/efi/lssal.c ## platform sources +@COND_arm64_efi_TRUE@nodist_lssal_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_lssal_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_lssal_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_lssal_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_lssal_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@lssal_module_LDADD = +@COND_arm_efi_TRUE@lssal_module_LDADD = +@COND_i386_efi_TRUE@lssal_module_LDADD = +@COND_ia64_efi_TRUE@lssal_module_LDADD = +@COND_x86_64_efi_TRUE@lssal_module_LDADD = +@COND_arm64_efi_TRUE@lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lssal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lssal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lssal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lssal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@lssal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +@COND_arm_efi_TRUE@lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +@COND_i386_efi_TRUE@lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +@COND_ia64_efi_TRUE@lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +@COND_x86_64_efi_TRUE@lsefimmap_module_SOURCES = commands/efi/lsefimmap.c ## platform sources +@COND_arm64_efi_TRUE@nodist_lsefimmap_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_lsefimmap_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_lsefimmap_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_lsefimmap_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_lsefimmap_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@lsefimmap_module_LDADD = +@COND_arm_efi_TRUE@lsefimmap_module_LDADD = +@COND_i386_efi_TRUE@lsefimmap_module_LDADD = +@COND_ia64_efi_TRUE@lsefimmap_module_LDADD = +@COND_x86_64_efi_TRUE@lsefimmap_module_LDADD = +@COND_arm64_efi_TRUE@lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefimmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefimmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefimmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefimmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@lsefimmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +@COND_arm_efi_TRUE@lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +@COND_i386_efi_TRUE@lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +@COND_ia64_efi_TRUE@lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +@COND_x86_64_efi_TRUE@lsefi_module_SOURCES = commands/efi/lsefi.c ## platform sources +@COND_arm64_efi_TRUE@nodist_lsefi_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_lsefi_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_lsefi_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_lsefi_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_lsefi_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@lsefi_module_LDADD = +@COND_arm_efi_TRUE@lsefi_module_LDADD = +@COND_i386_efi_TRUE@lsefi_module_LDADD = +@COND_ia64_efi_TRUE@lsefi_module_LDADD = +@COND_x86_64_efi_TRUE@lsefi_module_LDADD = +@COND_arm64_efi_TRUE@lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lsefi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@lsefi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +@COND_arm_efi_TRUE@efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +@COND_i386_efi_TRUE@efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +@COND_ia64_efi_TRUE@efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +@COND_x86_64_efi_TRUE@efifwsetup_module_SOURCES = commands/efi/efifwsetup.c ## platform sources +@COND_arm64_efi_TRUE@nodist_efifwsetup_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_efifwsetup_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_efifwsetup_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_efifwsetup_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_efifwsetup_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@efifwsetup_module_LDADD = +@COND_arm_efi_TRUE@efifwsetup_module_LDADD = +@COND_i386_efi_TRUE@efifwsetup_module_LDADD = +@COND_ia64_efi_TRUE@efifwsetup_module_LDADD = +@COND_x86_64_efi_TRUE@efifwsetup_module_LDADD = +@COND_arm64_efi_TRUE@efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efifwsetup_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efifwsetup_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efifwsetup_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efifwsetup_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@efifwsetup_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +blocklist_module_SOURCES = commands/blocklist.c ## platform sources +nodist_blocklist_module_SOURCES = ## platform nodist sources +blocklist_module_LDADD = +blocklist_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +blocklist_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +blocklist_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +blocklist_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +blocklist_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_arm_efi_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_arm_uboot_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_emu_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_i386_coreboot_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_i386_efi_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_i386_ieee1275_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_i386_multiboot_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_i386_pc_TRUE@boot_module_SOURCES = lib/i386/pc/biosnum.c commands/boot.c ## platform sources +@COND_i386_qemu_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_ia64_efi_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_mips_arc_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_powerpc_ieee1275_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_sparc64_ieee1275_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_x86_64_efi_TRUE@boot_module_SOURCES = commands/boot.c ## platform sources +@COND_arm64_efi_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_boot_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@boot_module_LDADD = +@COND_arm_efi_TRUE@boot_module_LDADD = +@COND_arm_uboot_TRUE@boot_module_LDADD = +@COND_emu_TRUE@boot_module_LDADD = +@COND_i386_coreboot_TRUE@boot_module_LDADD = +@COND_i386_efi_TRUE@boot_module_LDADD = +@COND_i386_ieee1275_TRUE@boot_module_LDADD = +@COND_i386_multiboot_TRUE@boot_module_LDADD = +@COND_i386_pc_TRUE@boot_module_LDADD = +@COND_i386_qemu_TRUE@boot_module_LDADD = +@COND_ia64_efi_TRUE@boot_module_LDADD = +@COND_mips_arc_TRUE@boot_module_LDADD = +@COND_powerpc_ieee1275_TRUE@boot_module_LDADD = +@COND_sparc64_ieee1275_TRUE@boot_module_LDADD = +@COND_x86_64_efi_TRUE@boot_module_LDADD = +@COND_arm64_efi_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cat_module_SOURCES = commands/cat.c ## platform sources +nodist_cat_module_SOURCES = ## platform nodist sources +cat_module_LDADD = +cat_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cat_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cat_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cat_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cat_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cmp_module_SOURCES = commands/cmp.c ## platform sources +nodist_cmp_module_SOURCES = ## platform nodist sources +cmp_module_LDADD = +cmp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +configfile_module_SOURCES = commands/configfile.c ## platform sources +nodist_configfile_module_SOURCES = ## platform nodist sources +configfile_module_LDADD = +configfile_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +configfile_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +configfile_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +configfile_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +configfile_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_i386_efi_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_i386_ieee1275_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_i386_multiboot_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_i386_pc_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_i386_qemu_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_i386_xen_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_x86_64_efi_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_x86_64_xen_TRUE@cpuid_module_SOURCES = commands/i386/cpuid.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_cpuid_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@cpuid_module_LDADD = +@COND_i386_efi_TRUE@cpuid_module_LDADD = +@COND_i386_ieee1275_TRUE@cpuid_module_LDADD = +@COND_i386_multiboot_TRUE@cpuid_module_LDADD = +@COND_i386_pc_TRUE@cpuid_module_LDADD = +@COND_i386_qemu_TRUE@cpuid_module_LDADD = +@COND_i386_xen_TRUE@cpuid_module_LDADD = +@COND_x86_64_efi_TRUE@cpuid_module_LDADD = +@COND_x86_64_xen_TRUE@cpuid_module_LDADD = +@COND_i386_coreboot_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@cpuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@cpuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@cpuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@cpuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@cpuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +date_module_SOURCES = commands/date.c ## platform sources +nodist_date_module_SOURCES = ## platform nodist sources +date_module_LDADD = +date_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +date_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +date_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +date_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +date_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@drivemap_module_SOURCES = commands/i386/pc/drivemap.c commands/i386/pc/drivemap_int13h.S ## platform sources +@COND_i386_pc_TRUE@nodist_drivemap_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@drivemap_module_LDADD = +@COND_i386_pc_TRUE@drivemap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@drivemap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@drivemap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@drivemap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@drivemap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +echo_module_SOURCES = commands/echo.c ## platform sources +nodist_echo_module_SOURCES = ## platform nodist sources +echo_module_LDADD = +echo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +echo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +echo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +echo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +echo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +eval_module_SOURCES = commands/eval.c ## platform sources +nodist_eval_module_SOURCES = ## platform nodist sources +eval_module_LDADD = +eval_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +eval_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +eval_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +eval_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +eval_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_arm_efi_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_i386_coreboot_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_i386_efi_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_i386_multiboot_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_i386_pc_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_i386_qemu_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_ia64_efi_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_x86_64_efi_TRUE@extcmd_module_SOURCES = commands/extcmd.c lib/arg.c ## platform sources +@COND_arm64_efi_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_extcmd_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@extcmd_module_LDADD = +@COND_arm_efi_TRUE@extcmd_module_LDADD = +@COND_i386_coreboot_TRUE@extcmd_module_LDADD = +@COND_i386_efi_TRUE@extcmd_module_LDADD = +@COND_i386_multiboot_TRUE@extcmd_module_LDADD = +@COND_i386_pc_TRUE@extcmd_module_LDADD = +@COND_i386_qemu_TRUE@extcmd_module_LDADD = +@COND_ia64_efi_TRUE@extcmd_module_LDADD = +@COND_x86_64_efi_TRUE@extcmd_module_LDADD = +@COND_arm64_efi_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@extcmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@extcmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@extcmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@extcmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@extcmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@fixvideo_module_SOURCES = commands/efi/fixvideo.c ## platform sources +@COND_x86_64_efi_TRUE@fixvideo_module_SOURCES = commands/efi/fixvideo.c ## platform sources +@COND_i386_efi_TRUE@nodist_fixvideo_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_fixvideo_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@fixvideo_module_LDADD = +@COND_x86_64_efi_TRUE@fixvideo_module_LDADD = +@COND_i386_efi_TRUE@fixvideo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@fixvideo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@fixvideo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@fixvideo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@fixvideo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@fixvideo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@fixvideo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@fixvideo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@fixvideo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@fixvideo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gptsync_module_SOURCES = commands/gptsync.c ## platform sources +nodist_gptsync_module_SOURCES = ## platform nodist sources +gptsync_module_LDADD = +gptsync_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gptsync_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gptsync_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gptsync_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gptsync_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@halt_module_SOURCES = lib/efi/halt.c commands/halt.c ## platform sources +@COND_arm_efi_TRUE@halt_module_SOURCES = lib/efi/halt.c commands/halt.c ## platform sources +@COND_arm_uboot_TRUE@halt_module_SOURCES = lib/uboot/halt.c commands/halt.c ## platform sources +@COND_emu_TRUE@halt_module_SOURCES = lib/emu/halt.c commands/halt.c ## platform sources +@COND_i386_coreboot_TRUE@halt_module_SOURCES = commands/acpihalt.c lib/i386/halt.c commands/halt.c ## platform sources +@COND_i386_efi_TRUE@halt_module_SOURCES = commands/acpihalt.c lib/efi/halt.c commands/halt.c ## platform sources +@COND_i386_ieee1275_TRUE@halt_module_SOURCES = lib/ieee1275/halt.c commands/halt.c ## platform sources +@COND_i386_multiboot_TRUE@halt_module_SOURCES = commands/acpihalt.c lib/i386/halt.c commands/halt.c ## platform sources +@COND_i386_pc_TRUE@halt_module_SOURCES = commands/i386/pc/halt.c commands/acpihalt.c ## platform sources +@COND_i386_qemu_TRUE@halt_module_SOURCES = lib/i386/halt.c commands/halt.c ## platform sources +@COND_i386_xen_TRUE@halt_module_SOURCES = lib/xen/halt.c commands/halt.c ## platform sources +@COND_ia64_efi_TRUE@halt_module_SOURCES = lib/efi/halt.c commands/halt.c ## platform sources +@COND_mips_arc_TRUE@halt_module_SOURCES = commands/halt.c ## platform sources +@COND_mips_loongson_TRUE@halt_module_SOURCES = commands/halt.c ## platform sources +@COND_mips_qemu_mips_TRUE@halt_module_SOURCES = commands/halt.c ## platform sources +@COND_powerpc_ieee1275_TRUE@halt_module_SOURCES = lib/ieee1275/halt.c commands/halt.c ## platform sources +@COND_sparc64_ieee1275_TRUE@halt_module_SOURCES = lib/ieee1275/halt.c commands/halt.c ## platform sources +@COND_x86_64_efi_TRUE@halt_module_SOURCES = commands/acpihalt.c lib/efi/halt.c commands/halt.c ## platform sources +@COND_x86_64_xen_TRUE@halt_module_SOURCES = lib/xen/halt.c commands/halt.c ## platform sources +@COND_arm64_efi_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_halt_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@halt_module_LDADD = +@COND_arm_efi_TRUE@halt_module_LDADD = +@COND_arm_uboot_TRUE@halt_module_LDADD = +@COND_emu_TRUE@halt_module_LDADD = +@COND_i386_coreboot_TRUE@halt_module_LDADD = +@COND_i386_efi_TRUE@halt_module_LDADD = +@COND_i386_ieee1275_TRUE@halt_module_LDADD = +@COND_i386_multiboot_TRUE@halt_module_LDADD = +@COND_i386_pc_TRUE@halt_module_LDADD = +@COND_i386_qemu_TRUE@halt_module_LDADD = +@COND_i386_xen_TRUE@halt_module_LDADD = +@COND_ia64_efi_TRUE@halt_module_LDADD = +@COND_mips_arc_TRUE@halt_module_LDADD = +@COND_mips_loongson_TRUE@halt_module_LDADD = +@COND_mips_qemu_mips_TRUE@halt_module_LDADD = +@COND_powerpc_ieee1275_TRUE@halt_module_LDADD = +@COND_sparc64_ieee1275_TRUE@halt_module_LDADD = +@COND_x86_64_efi_TRUE@halt_module_LDADD = +@COND_x86_64_xen_TRUE@halt_module_LDADD = +@COND_arm64_efi_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@halt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@halt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@halt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@halt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@halt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +@COND_arm_efi_TRUE@reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +@COND_arm_uboot_TRUE@reboot_module_SOURCES = lib/uboot/reboot.c commands/reboot.c ## platform sources +@COND_emu_TRUE@reboot_module_SOURCES = commands/reboot.c ## platform sources +@COND_i386_coreboot_TRUE@reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +@COND_i386_efi_TRUE@reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +@COND_i386_ieee1275_TRUE@reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +@COND_i386_multiboot_TRUE@reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +@COND_i386_pc_TRUE@reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +@COND_i386_qemu_TRUE@reboot_module_SOURCES = lib/i386/reboot.c lib/i386/reboot_trampoline.S commands/reboot.c ## platform sources +@COND_i386_xen_TRUE@reboot_module_SOURCES = lib/xen/reboot.c commands/reboot.c ## platform sources +@COND_ia64_efi_TRUE@reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +@COND_mips_arc_TRUE@reboot_module_SOURCES = lib/mips/arc/reboot.c commands/reboot.c ## platform sources +@COND_mips_loongson_TRUE@reboot_module_SOURCES = lib/mips/loongson/reboot.c commands/reboot.c ## platform sources +@COND_mips_qemu_mips_TRUE@reboot_module_SOURCES = lib/mips/qemu_mips/reboot.c commands/reboot.c ## platform sources +@COND_powerpc_ieee1275_TRUE@reboot_module_SOURCES = lib/ieee1275/reboot.c commands/reboot.c ## platform sources +@COND_sparc64_ieee1275_TRUE@reboot_module_SOURCES = lib/ieee1275/reboot.c commands/reboot.c ## platform sources +@COND_x86_64_efi_TRUE@reboot_module_SOURCES = lib/efi/reboot.c commands/reboot.c ## platform sources +@COND_x86_64_xen_TRUE@reboot_module_SOURCES = lib/xen/reboot.c commands/reboot.c ## platform sources +@COND_arm64_efi_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_reboot_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@reboot_module_LDADD = +@COND_arm_efi_TRUE@reboot_module_LDADD = +@COND_arm_uboot_TRUE@reboot_module_LDADD = +@COND_emu_TRUE@reboot_module_LDADD = +@COND_i386_coreboot_TRUE@reboot_module_LDADD = +@COND_i386_efi_TRUE@reboot_module_LDADD = +@COND_i386_ieee1275_TRUE@reboot_module_LDADD = +@COND_i386_multiboot_TRUE@reboot_module_LDADD = +@COND_i386_pc_TRUE@reboot_module_LDADD = +@COND_i386_qemu_TRUE@reboot_module_LDADD = +@COND_i386_xen_TRUE@reboot_module_LDADD = +@COND_ia64_efi_TRUE@reboot_module_LDADD = +@COND_mips_arc_TRUE@reboot_module_LDADD = +@COND_mips_loongson_TRUE@reboot_module_LDADD = +@COND_mips_qemu_mips_TRUE@reboot_module_LDADD = +@COND_powerpc_ieee1275_TRUE@reboot_module_LDADD = +@COND_sparc64_ieee1275_TRUE@reboot_module_LDADD = +@COND_x86_64_efi_TRUE@reboot_module_LDADD = +@COND_x86_64_xen_TRUE@reboot_module_LDADD = +@COND_arm64_efi_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@reboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@reboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@reboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@reboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@reboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +hashsum_module_SOURCES = commands/hashsum.c ## platform sources +nodist_hashsum_module_SOURCES = ## platform nodist sources +hashsum_module_LDADD = +hashsum_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hashsum_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hashsum_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hashsum_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hashsum_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +verify_module_SOURCES = commands/verify.c ## platform sources +nodist_verify_module_SOURCES = ## platform nodist sources +verify_module_LDADD = +verify_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) +verify_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +verify_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap +verify_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +verify_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_i386_efi_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_i386_ieee1275_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_i386_multiboot_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_i386_pc_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_i386_qemu_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_mips_loongson_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_mips_qemu_mips_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_x86_64_efi_TRUE@hdparm_module_SOURCES = commands/hdparm.c lib/hexdump.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_hdparm_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@hdparm_module_LDADD = +@COND_i386_efi_TRUE@hdparm_module_LDADD = +@COND_i386_ieee1275_TRUE@hdparm_module_LDADD = +@COND_i386_multiboot_TRUE@hdparm_module_LDADD = +@COND_i386_pc_TRUE@hdparm_module_LDADD = +@COND_i386_qemu_TRUE@hdparm_module_LDADD = +@COND_mips_loongson_TRUE@hdparm_module_LDADD = +@COND_mips_qemu_mips_TRUE@hdparm_module_LDADD = +@COND_x86_64_efi_TRUE@hdparm_module_LDADD = +@COND_i386_coreboot_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@hdparm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@hdparm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@hdparm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@hdparm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@hdparm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +help_module_SOURCES = commands/help.c ## platform sources +nodist_help_module_SOURCES = ## platform nodist sources +help_module_LDADD = +help_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +help_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +help_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +help_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +help_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +hexdump_module_SOURCES = commands/hexdump.c lib/hexdump.c ## platform sources +nodist_hexdump_module_SOURCES = ## platform nodist sources +hexdump_module_LDADD = +hexdump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hexdump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hexdump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hexdump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hexdump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +keystatus_module_SOURCES = commands/keystatus.c ## platform sources +nodist_keystatus_module_SOURCES = ## platform nodist sources +keystatus_module_LDADD = +keystatus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +keystatus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +keystatus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +keystatus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +keystatus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@loadbios_module_SOURCES = commands/efi/loadbios.c ## platform sources +@COND_x86_64_efi_TRUE@loadbios_module_SOURCES = commands/efi/loadbios.c ## platform sources +@COND_i386_efi_TRUE@nodist_loadbios_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_loadbios_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@loadbios_module_LDADD = +@COND_x86_64_efi_TRUE@loadbios_module_LDADD = +@COND_i386_efi_TRUE@loadbios_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@loadbios_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@loadbios_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@loadbios_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@loadbios_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@loadbios_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@loadbios_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@loadbios_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@loadbios_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@loadbios_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +loadenv_module_SOURCES = commands/loadenv.c lib/envblk.c ## platform sources +nodist_loadenv_module_SOURCES = ## platform nodist sources +loadenv_module_LDADD = +loadenv_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +loadenv_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +loadenv_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +loadenv_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +loadenv_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ls_module_SOURCES = commands/ls.c ## platform sources +nodist_ls_module_SOURCES = ## platform nodist sources +ls_module_LDADD = +ls_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ls_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ls_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ls_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ls_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +lsmmap_module_SOURCES = commands/lsmmap.c ## platform sources +nodist_lsmmap_module_SOURCES = ## platform nodist sources +lsmmap_module_LDADD = +lsmmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lsmmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lsmmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lsmmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lsmmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_i386_efi_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_i386_ieee1275_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_i386_multiboot_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_i386_pc_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_i386_qemu_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_mips_loongson_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_x86_64_efi_TRUE@lspci_module_SOURCES = commands/lspci.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_lspci_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@lspci_module_LDADD = +@COND_i386_efi_TRUE@lspci_module_LDADD = +@COND_i386_ieee1275_TRUE@lspci_module_LDADD = +@COND_i386_multiboot_TRUE@lspci_module_LDADD = +@COND_i386_pc_TRUE@lspci_module_LDADD = +@COND_i386_qemu_TRUE@lspci_module_LDADD = +@COND_mips_loongson_TRUE@lspci_module_LDADD = +@COND_x86_64_efi_TRUE@lspci_module_LDADD = +@COND_i386_coreboot_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lspci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lspci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lspci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@lspci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@lspci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +memrw_module_SOURCES = commands/memrw.c ## platform sources +nodist_memrw_module_SOURCES = ## platform nodist sources +memrw_module_LDADD = +memrw_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +memrw_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +memrw_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +memrw_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +memrw_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +minicmd_module_SOURCES = commands/minicmd.c ## platform sources +nodist_minicmd_module_SOURCES = ## platform nodist sources +minicmd_module_LDADD = +minicmd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minicmd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minicmd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minicmd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minicmd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +parttool_module_SOURCES = commands/parttool.c ## platform sources +nodist_parttool_module_SOURCES = ## platform nodist sources +parttool_module_LDADD = +parttool_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +parttool_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +parttool_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +parttool_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +parttool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +password_module_SOURCES = commands/password.c ## platform sources +nodist_password_module_SOURCES = ## platform nodist sources +password_module_LDADD = +password_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +password_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +password_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +password_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +password_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +password_pbkdf2_module_SOURCES = commands/password_pbkdf2.c ## platform sources +nodist_password_pbkdf2_module_SOURCES = ## platform nodist sources +password_pbkdf2_module_LDADD = +password_pbkdf2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +password_pbkdf2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +password_pbkdf2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +password_pbkdf2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +password_pbkdf2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@play_module_SOURCES = commands/i386/pc/play.c ## platform sources +@COND_i386_efi_TRUE@play_module_SOURCES = commands/i386/pc/play.c ## platform sources +@COND_i386_ieee1275_TRUE@play_module_SOURCES = commands/i386/pc/play.c ## platform sources +@COND_i386_multiboot_TRUE@play_module_SOURCES = commands/i386/pc/play.c ## platform sources +@COND_i386_pc_TRUE@play_module_SOURCES = commands/i386/pc/play.c ## platform sources +@COND_i386_qemu_TRUE@play_module_SOURCES = commands/i386/pc/play.c ## platform sources +@COND_x86_64_efi_TRUE@play_module_SOURCES = commands/i386/pc/play.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_play_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_play_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_play_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_play_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_play_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_play_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_play_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@play_module_LDADD = +@COND_i386_efi_TRUE@play_module_LDADD = +@COND_i386_ieee1275_TRUE@play_module_LDADD = +@COND_i386_multiboot_TRUE@play_module_LDADD = +@COND_i386_pc_TRUE@play_module_LDADD = +@COND_i386_qemu_TRUE@play_module_LDADD = +@COND_x86_64_efi_TRUE@play_module_LDADD = +@COND_i386_coreboot_TRUE@play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@play_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@play_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@play_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@play_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@play_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +@COND_i386_efi_TRUE@spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +@COND_i386_ieee1275_TRUE@spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +@COND_i386_multiboot_TRUE@spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +@COND_i386_pc_TRUE@spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +@COND_i386_qemu_TRUE@spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +@COND_x86_64_efi_TRUE@spkmodem_module_SOURCES = term/spkmodem.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_spkmodem_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_spkmodem_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_spkmodem_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_spkmodem_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_spkmodem_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_spkmodem_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_spkmodem_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@spkmodem_module_LDADD = +@COND_i386_efi_TRUE@spkmodem_module_LDADD = +@COND_i386_ieee1275_TRUE@spkmodem_module_LDADD = +@COND_i386_multiboot_TRUE@spkmodem_module_LDADD = +@COND_i386_pc_TRUE@spkmodem_module_LDADD = +@COND_i386_qemu_TRUE@spkmodem_module_LDADD = +@COND_x86_64_efi_TRUE@spkmodem_module_LDADD = +@COND_i386_coreboot_TRUE@spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@spkmodem_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@spkmodem_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@spkmodem_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@spkmodem_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@spkmodem_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@morse_module_SOURCES = term/morse.c ## platform sources +@COND_i386_efi_TRUE@morse_module_SOURCES = term/morse.c ## platform sources +@COND_i386_ieee1275_TRUE@morse_module_SOURCES = term/morse.c ## platform sources +@COND_i386_multiboot_TRUE@morse_module_SOURCES = term/morse.c ## platform sources +@COND_i386_pc_TRUE@morse_module_SOURCES = term/morse.c ## platform sources +@COND_i386_qemu_TRUE@morse_module_SOURCES = term/morse.c ## platform sources +@COND_x86_64_efi_TRUE@morse_module_SOURCES = term/morse.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_morse_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_morse_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_morse_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_morse_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_morse_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_morse_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_morse_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@morse_module_LDADD = +@COND_i386_efi_TRUE@morse_module_LDADD = +@COND_i386_ieee1275_TRUE@morse_module_LDADD = +@COND_i386_multiboot_TRUE@morse_module_LDADD = +@COND_i386_pc_TRUE@morse_module_LDADD = +@COND_i386_qemu_TRUE@morse_module_LDADD = +@COND_x86_64_efi_TRUE@morse_module_LDADD = +@COND_i386_coreboot_TRUE@morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@morse_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@morse_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@morse_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@morse_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@morse_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +probe_module_SOURCES = commands/probe.c ## platform sources +nodist_probe_module_SOURCES = ## platform nodist sources +probe_module_LDADD = +probe_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +probe_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +probe_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +probe_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +probe_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +read_module_SOURCES = commands/read.c ## platform sources +nodist_read_module_SOURCES = ## platform nodist sources +read_module_LDADD = +read_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +read_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +read_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +read_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +read_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +search_module_SOURCES = commands/search_wrap.c ## platform sources +nodist_search_module_SOURCES = ## platform nodist sources +search_module_LDADD = +search_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +search_fs_file_module_SOURCES = commands/search_file.c ## platform sources +nodist_search_fs_file_module_SOURCES = ## platform nodist sources +search_fs_file_module_LDADD = +search_fs_file_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_fs_file_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_fs_file_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_fs_file_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_fs_file_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +search_fs_uuid_module_SOURCES = commands/search_uuid.c ## platform sources +nodist_search_fs_uuid_module_SOURCES = ## platform nodist sources +search_fs_uuid_module_LDADD = +search_fs_uuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_fs_uuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_fs_uuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_fs_uuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_fs_uuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +search_label_module_SOURCES = commands/search_label.c ## platform sources +nodist_search_label_module_SOURCES = ## platform nodist sources +search_label_module_LDADD = +search_label_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +search_label_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +search_label_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +search_label_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +search_label_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_i386_efi_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_i386_ieee1275_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_i386_multiboot_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_i386_pc_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_i386_qemu_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_mips_loongson_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_x86_64_efi_TRUE@setpci_module_SOURCES = commands/setpci.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_setpci_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@setpci_module_LDADD = +@COND_i386_efi_TRUE@setpci_module_LDADD = +@COND_i386_ieee1275_TRUE@setpci_module_LDADD = +@COND_i386_multiboot_TRUE@setpci_module_LDADD = +@COND_i386_pc_TRUE@setpci_module_LDADD = +@COND_i386_qemu_TRUE@setpci_module_LDADD = +@COND_mips_loongson_TRUE@setpci_module_LDADD = +@COND_x86_64_efi_TRUE@setpci_module_LDADD = +@COND_i386_coreboot_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@setpci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@setpci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@setpci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@setpci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@setpci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_i386_efi_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_i386_ieee1275_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_i386_multiboot_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_i386_pc_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_i386_qemu_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_mips_loongson_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_x86_64_efi_TRUE@pcidump_module_SOURCES = commands/pcidump.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_pcidump_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@pcidump_module_LDADD = +@COND_i386_efi_TRUE@pcidump_module_LDADD = +@COND_i386_ieee1275_TRUE@pcidump_module_LDADD = +@COND_i386_multiboot_TRUE@pcidump_module_LDADD = +@COND_i386_pc_TRUE@pcidump_module_LDADD = +@COND_i386_qemu_TRUE@pcidump_module_LDADD = +@COND_mips_loongson_TRUE@pcidump_module_LDADD = +@COND_x86_64_efi_TRUE@pcidump_module_LDADD = +@COND_i386_coreboot_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pcidump_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pcidump_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pcidump_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pcidump_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@pcidump_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +sleep_module_SOURCES = commands/sleep.c ## platform sources +nodist_sleep_module_SOURCES = ## platform nodist sources +sleep_module_LDADD = +sleep_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sleep_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sleep_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sleep_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sleep_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@suspend_module_SOURCES = commands/ieee1275/suspend.c ## platform sources +@COND_powerpc_ieee1275_TRUE@suspend_module_SOURCES = commands/ieee1275/suspend.c ## platform sources +@COND_i386_ieee1275_TRUE@nodist_suspend_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_suspend_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@suspend_module_LDADD = +@COND_powerpc_ieee1275_TRUE@suspend_module_LDADD = +@COND_i386_ieee1275_TRUE@suspend_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@suspend_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@suspend_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@suspend_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@suspend_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@suspend_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@suspend_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@suspend_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@suspend_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@suspend_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@escc_module_SOURCES = term/ieee1275/escc.c ## platform sources +@COND_powerpc_ieee1275_TRUE@nodist_escc_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@escc_module_LDADD = +@COND_powerpc_ieee1275_TRUE@escc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@escc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@escc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@escc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@escc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +terminal_module_SOURCES = commands/terminal.c ## platform sources +nodist_terminal_module_SOURCES = ## platform nodist sources +terminal_module_LDADD = +terminal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +terminal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +terminal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +terminal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +terminal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +test_module_SOURCES = commands/test.c ## platform sources +nodist_test_module_SOURCES = ## platform nodist sources +test_module_LDADD = +test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +true_module_SOURCES = commands/true.c ## platform sources +nodist_true_module_SOURCES = ## platform nodist sources +true_module_LDADD = +true_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +true_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +true_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +true_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +true_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_i386_efi_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_i386_ieee1275_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_i386_multiboot_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_i386_pc_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_i386_qemu_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_mips_loongson_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_x86_64_efi_TRUE@usbtest_module_SOURCES = commands/usbtest.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usbtest_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usbtest_module_LDADD = +@COND_i386_efi_TRUE@usbtest_module_LDADD = +@COND_i386_ieee1275_TRUE@usbtest_module_LDADD = +@COND_i386_multiboot_TRUE@usbtest_module_LDADD = +@COND_i386_pc_TRUE@usbtest_module_LDADD = +@COND_i386_qemu_TRUE@usbtest_module_LDADD = +@COND_mips_loongson_TRUE@usbtest_module_LDADD = +@COND_x86_64_efi_TRUE@usbtest_module_LDADD = +@COND_i386_coreboot_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbtest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbtest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbtest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbtest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usbtest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +videoinfo_module_SOURCES = commands/videoinfo.c ## platform sources +nodist_videoinfo_module_SOURCES = ## platform nodist sources +videoinfo_module_LDADD = +videoinfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +videoinfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +videoinfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +videoinfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +videoinfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +videotest_module_SOURCES = commands/videotest.c ## platform sources +nodist_videotest_module_SOURCES = ## platform nodist sources +videotest_module_LDADD = +videotest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +videotest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +videotest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +videotest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +videotest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +xnu_uuid_module_SOURCES = commands/xnu_uuid.c ## platform sources +nodist_xnu_uuid_module_SOURCES = ## platform nodist sources +xnu_uuid_module_LDADD = +xnu_uuid_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_uuid_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_uuid_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_uuid_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_uuid_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +dm_nv_module_SOURCES = disk/dmraid_nvidia.c ## platform sources +nodist_dm_nv_module_SOURCES = ## platform nodist sources +dm_nv_module_LDADD = +dm_nv_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +dm_nv_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +dm_nv_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +dm_nv_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +dm_nv_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +loopback_module_SOURCES = disk/loopback.c ## platform sources +nodist_loopback_module_SOURCES = ## platform nodist sources +loopback_module_LDADD = +loopback_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +loopback_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +loopback_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +loopback_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +loopback_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cryptodisk_module_SOURCES = disk/cryptodisk.c ## platform sources +nodist_cryptodisk_module_SOURCES = ## platform nodist sources +cryptodisk_module_LDADD = +cryptodisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cryptodisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cryptodisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cryptodisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cryptodisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +luks_module_SOURCES = disk/luks.c disk/AFSplitter.c ## platform sources +nodist_luks_module_SOURCES = ## platform nodist sources +luks_module_LDADD = +luks_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +luks_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +luks_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +luks_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +luks_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +geli_module_SOURCES = disk/geli.c ## platform sources +nodist_geli_module_SOURCES = ## platform nodist sources +geli_module_LDADD = +geli_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +geli_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +geli_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +geli_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +geli_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +lvm_module_SOURCES = disk/lvm.c ## platform sources +nodist_lvm_module_SOURCES = ## platform nodist sources +lvm_module_LDADD = +lvm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +lvm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lvm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +lvm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lvm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ldm_module_SOURCES = disk/ldm.c ## platform sources +nodist_ldm_module_SOURCES = ## platform nodist sources +ldm_module_LDADD = +ldm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ldm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ldm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ldm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ldm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +mdraid09_module_SOURCES = disk/mdraid_linux.c ## platform sources +nodist_mdraid09_module_SOURCES = ## platform nodist sources +mdraid09_module_LDADD = +mdraid09_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mdraid09_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mdraid09_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mdraid09_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mdraid09_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +mdraid09_be_module_SOURCES = disk/mdraid_linux_be.c ## platform sources +nodist_mdraid09_be_module_SOURCES = ## platform nodist sources +mdraid09_be_module_LDADD = +mdraid09_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mdraid09_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mdraid09_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mdraid09_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mdraid09_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +mdraid1x_module_SOURCES = disk/mdraid1x_linux.c ## platform sources +nodist_mdraid1x_module_SOURCES = ## platform nodist sources +mdraid1x_module_LDADD = +mdraid1x_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mdraid1x_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mdraid1x_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mdraid1x_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mdraid1x_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +diskfilter_module_SOURCES = disk/diskfilter.c ## platform sources +nodist_diskfilter_module_SOURCES = ## platform nodist sources +diskfilter_module_LDADD = +diskfilter_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +diskfilter_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +diskfilter_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +diskfilter_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +diskfilter_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +raid5rec_module_SOURCES = disk/raid5_recover.c ## platform sources +nodist_raid5rec_module_SOURCES = ## platform nodist sources +raid5rec_module_LDADD = +raid5rec_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +raid5rec_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +raid5rec_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +raid5rec_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +raid5rec_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +raid6rec_module_SOURCES = disk/raid6_recover.c ## platform sources +nodist_raid6rec_module_SOURCES = ## platform nodist sources +raid6rec_module_LDADD = +raid6rec_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +raid6rec_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +raid6rec_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +raid6rec_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +raid6rec_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +scsi_module_SOURCES = disk/scsi.c ## platform sources +nodist_scsi_module_SOURCES = ## platform nodist sources +scsi_module_LDADD = +scsi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +scsi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +scsi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +scsi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +scsi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +memdisk_module_SOURCES = disk/memdisk.c ## platform sources +nodist_memdisk_module_SOURCES = ## platform nodist sources +memdisk_module_LDADD = +memdisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +memdisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +memdisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +memdisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +memdisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_i386_efi_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_i386_ieee1275_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_i386_multiboot_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_i386_pc_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_i386_qemu_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_mips_loongson_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_mips_qemu_mips_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_x86_64_efi_TRUE@ata_module_SOURCES = disk/ata.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_ata_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@ata_module_LDADD = +@COND_i386_efi_TRUE@ata_module_LDADD = +@COND_i386_ieee1275_TRUE@ata_module_LDADD = +@COND_i386_multiboot_TRUE@ata_module_LDADD = +@COND_i386_pc_TRUE@ata_module_LDADD = +@COND_i386_qemu_TRUE@ata_module_LDADD = +@COND_mips_loongson_TRUE@ata_module_LDADD = +@COND_mips_qemu_mips_TRUE@ata_module_LDADD = +@COND_x86_64_efi_TRUE@ata_module_LDADD = +@COND_i386_coreboot_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@ata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_i386_efi_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_i386_ieee1275_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_i386_multiboot_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_i386_pc_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_i386_qemu_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_mips_loongson_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_x86_64_efi_TRUE@ahci_module_SOURCES = disk/ahci.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_ahci_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@ahci_module_LDADD = +@COND_i386_efi_TRUE@ahci_module_LDADD = +@COND_i386_ieee1275_TRUE@ahci_module_LDADD = +@COND_i386_multiboot_TRUE@ahci_module_LDADD = +@COND_i386_pc_TRUE@ahci_module_LDADD = +@COND_i386_qemu_TRUE@ahci_module_LDADD = +@COND_mips_loongson_TRUE@ahci_module_LDADD = +@COND_x86_64_efi_TRUE@ahci_module_LDADD = +@COND_i386_coreboot_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ahci_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ahci_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ahci_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@ahci_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@ahci_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_i386_efi_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_i386_ieee1275_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_i386_multiboot_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_i386_pc_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_i386_qemu_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_mips_loongson_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_mips_qemu_mips_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_x86_64_efi_TRUE@pata_module_SOURCES = disk/pata.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_pata_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@pata_module_LDADD = +@COND_i386_efi_TRUE@pata_module_LDADD = +@COND_i386_ieee1275_TRUE@pata_module_LDADD = +@COND_i386_multiboot_TRUE@pata_module_LDADD = +@COND_i386_pc_TRUE@pata_module_LDADD = +@COND_i386_qemu_TRUE@pata_module_LDADD = +@COND_mips_loongson_TRUE@pata_module_LDADD = +@COND_mips_qemu_mips_TRUE@pata_module_LDADD = +@COND_x86_64_efi_TRUE@pata_module_LDADD = +@COND_i386_coreboot_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pata_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pata_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pata_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@pata_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@pata_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@biosdisk_module_SOURCES = disk/i386/pc/biosdisk.c ## platform sources +@COND_i386_pc_TRUE@nodist_biosdisk_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@biosdisk_module_LDADD = +@COND_i386_pc_TRUE@biosdisk_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@biosdisk_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@biosdisk_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@biosdisk_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@biosdisk_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_i386_efi_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_i386_ieee1275_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_i386_multiboot_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_i386_pc_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_i386_qemu_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_mips_loongson_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_x86_64_efi_TRUE@usbms_module_SOURCES = disk/usbms.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usbms_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usbms_module_LDADD = +@COND_i386_efi_TRUE@usbms_module_LDADD = +@COND_i386_ieee1275_TRUE@usbms_module_LDADD = +@COND_i386_multiboot_TRUE@usbms_module_LDADD = +@COND_i386_pc_TRUE@usbms_module_LDADD = +@COND_i386_qemu_TRUE@usbms_module_LDADD = +@COND_mips_loongson_TRUE@usbms_module_LDADD = +@COND_x86_64_efi_TRUE@usbms_module_LDADD = +@COND_i386_coreboot_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbms_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbms_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbms_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usbms_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usbms_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@nand_module_SOURCES = disk/ieee1275/nand.c ## platform sources +@COND_i386_ieee1275_TRUE@nodist_nand_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nand_module_LDADD = +@COND_i386_ieee1275_TRUE@nand_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nand_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nand_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nand_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@nand_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@efiemu_module_SOURCES = efiemu/i386/pc/cfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +@COND_i386_ieee1275_TRUE@efiemu_module_SOURCES = efiemu/i386/nocfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +@COND_i386_multiboot_TRUE@efiemu_module_SOURCES = efiemu/i386/pc/cfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +@COND_i386_pc_TRUE@efiemu_module_SOURCES = efiemu/i386/pc/cfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +@COND_i386_qemu_TRUE@efiemu_module_SOURCES = efiemu/i386/nocfgtables.c efiemu/main.c efiemu/i386/loadcore32.c efiemu/i386/loadcore64.c efiemu/mm.c efiemu/loadcore_common.c efiemu/symbols.c efiemu/loadcore32.c efiemu/loadcore64.c efiemu/prepare32.c efiemu/prepare64.c efiemu/pnvram.c efiemu/i386/coredetect.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_efiemu_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_efiemu_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_efiemu_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_efiemu_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_efiemu_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@efiemu_module_LDADD = +@COND_i386_ieee1275_TRUE@efiemu_module_LDADD = +@COND_i386_multiboot_TRUE@efiemu_module_LDADD = +@COND_i386_pc_TRUE@efiemu_module_LDADD = +@COND_i386_qemu_TRUE@efiemu_module_LDADD = +@COND_i386_coreboot_TRUE@efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@efiemu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@efiemu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@efiemu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@efiemu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@efiemu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_arm_efi_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_arm_uboot_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_emu_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_i386_efi_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_i386_ieee1275_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_i386_multiboot_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_i386_pc_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_i386_qemu_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_i386_xen_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_ia64_efi_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_mips_arc_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_mips_qemu_mips_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_powerpc_ieee1275_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_sparc64_ieee1275_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_x86_64_efi_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_x86_64_xen_TRUE@font_module_SOURCES = font/font.c font/font_cmd.c ## platform sources +@COND_arm64_efi_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_font_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@font_module_LDADD = +@COND_arm_efi_TRUE@font_module_LDADD = +@COND_arm_uboot_TRUE@font_module_LDADD = +@COND_emu_TRUE@font_module_LDADD = +@COND_i386_efi_TRUE@font_module_LDADD = +@COND_i386_ieee1275_TRUE@font_module_LDADD = +@COND_i386_multiboot_TRUE@font_module_LDADD = +@COND_i386_pc_TRUE@font_module_LDADD = +@COND_i386_qemu_TRUE@font_module_LDADD = +@COND_i386_xen_TRUE@font_module_LDADD = +@COND_ia64_efi_TRUE@font_module_LDADD = +@COND_mips_arc_TRUE@font_module_LDADD = +@COND_mips_qemu_mips_TRUE@font_module_LDADD = +@COND_powerpc_ieee1275_TRUE@font_module_LDADD = +@COND_sparc64_ieee1275_TRUE@font_module_LDADD = +@COND_x86_64_efi_TRUE@font_module_LDADD = +@COND_x86_64_xen_TRUE@font_module_LDADD = +@COND_arm64_efi_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@font_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@font_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@font_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@font_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@font_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +procfs_module_SOURCES = fs/proc.c ## platform sources +nodist_procfs_module_SOURCES = ## platform nodist sources +procfs_module_LDADD = +procfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +procfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +procfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +procfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +procfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +affs_module_SOURCES = fs/affs.c ## platform sources +nodist_affs_module_SOURCES = ## platform nodist sources +affs_module_LDADD = +affs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +affs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +affs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +affs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +affs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +afs_module_SOURCES = fs/afs.c ## platform sources +nodist_afs_module_SOURCES = ## platform nodist sources +afs_module_LDADD = +afs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +afs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +afs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +afs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +afs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +bfs_module_SOURCES = fs/bfs.c ## platform sources +nodist_bfs_module_SOURCES = ## platform nodist sources +bfs_module_LDADD = +bfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +btrfs_module_SOURCES = fs/btrfs.c lib/crc.c ## platform sources +nodist_btrfs_module_SOURCES = ## platform nodist sources +btrfs_module_LDADD = +btrfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-undef +btrfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +btrfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H +btrfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +btrfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +archelp_module_SOURCES = fs/archelp.c ## platform sources +nodist_archelp_module_SOURCES = ## platform nodist sources +archelp_module_LDADD = +archelp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +archelp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +archelp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +archelp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +archelp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cbfs_module_SOURCES = fs/cbfs.c ## platform sources +nodist_cbfs_module_SOURCES = ## platform nodist sources +cbfs_module_LDADD = +cbfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cbfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cbfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cbfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cbfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cpio_module_SOURCES = fs/cpio.c ## platform sources +nodist_cpio_module_SOURCES = ## platform nodist sources +cpio_module_LDADD = +cpio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cpio_be_module_SOURCES = fs/cpio_be.c ## platform sources +nodist_cpio_be_module_SOURCES = ## platform nodist sources +cpio_be_module_LDADD = +cpio_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cpio_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cpio_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cpio_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cpio_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +newc_module_SOURCES = fs/newc.c ## platform sources +nodist_newc_module_SOURCES = ## platform nodist sources +newc_module_LDADD = +newc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +newc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +newc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +newc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +newc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +odc_module_SOURCES = fs/odc.c ## platform sources +nodist_odc_module_SOURCES = ## platform nodist sources +odc_module_LDADD = +odc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +odc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +odc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +odc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +odc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ext2_module_SOURCES = fs/ext2.c ## platform sources +nodist_ext2_module_SOURCES = ## platform nodist sources +ext2_module_LDADD = +ext2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ext2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ext2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ext2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ext2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +fat_module_SOURCES = fs/fat.c ## platform sources +nodist_fat_module_SOURCES = ## platform nodist sources +fat_module_LDADD = +fat_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fat_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fat_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fat_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fat_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +exfat_module_SOURCES = fs/exfat.c ## platform sources +nodist_exfat_module_SOURCES = ## platform nodist sources +exfat_module_LDADD = +exfat_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +exfat_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +exfat_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +exfat_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +exfat_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +fshelp_module_SOURCES = fs/fshelp.c ## platform sources +nodist_fshelp_module_SOURCES = ## platform nodist sources +fshelp_module_LDADD = +fshelp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +fshelp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +fshelp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +fshelp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +fshelp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +hfs_module_SOURCES = fs/hfs.c ## platform sources +nodist_hfs_module_SOURCES = ## platform nodist sources +hfs_module_LDADD = +hfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +hfsplus_module_SOURCES = fs/hfsplus.c ## platform sources +nodist_hfsplus_module_SOURCES = ## platform nodist sources +hfsplus_module_LDADD = +hfsplus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hfsplus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hfsplus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hfsplus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hfsplus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +hfspluscomp_module_SOURCES = fs/hfspluscomp.c ## platform sources +nodist_hfspluscomp_module_SOURCES = ## platform nodist sources +hfspluscomp_module_LDADD = +hfspluscomp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hfspluscomp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hfspluscomp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hfspluscomp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hfspluscomp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +iso9660_module_SOURCES = fs/iso9660.c ## platform sources +nodist_iso9660_module_SOURCES = ## platform nodist sources +iso9660_module_LDADD = +iso9660_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +iso9660_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +iso9660_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +iso9660_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +iso9660_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +jfs_module_SOURCES = fs/jfs.c ## platform sources +nodist_jfs_module_SOURCES = ## platform nodist sources +jfs_module_LDADD = +jfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +jfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +jfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +jfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +jfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +minix_module_SOURCES = fs/minix.c ## platform sources +nodist_minix_module_SOURCES = ## platform nodist sources +minix_module_LDADD = +minix_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +minix2_module_SOURCES = fs/minix2.c ## platform sources +nodist_minix2_module_SOURCES = ## platform nodist sources +minix2_module_LDADD = +minix2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +minix3_module_SOURCES = fs/minix3.c ## platform sources +nodist_minix3_module_SOURCES = ## platform nodist sources +minix3_module_LDADD = +minix3_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix3_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix3_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix3_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix3_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +minix_be_module_SOURCES = fs/minix_be.c ## platform sources +nodist_minix_be_module_SOURCES = ## platform nodist sources +minix_be_module_LDADD = +minix_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +minix2_be_module_SOURCES = fs/minix2_be.c ## platform sources +nodist_minix2_be_module_SOURCES = ## platform nodist sources +minix2_be_module_LDADD = +minix2_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix2_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix2_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix2_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix2_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +minix3_be_module_SOURCES = fs/minix3_be.c ## platform sources +nodist_minix3_be_module_SOURCES = ## platform nodist sources +minix3_be_module_LDADD = +minix3_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +minix3_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +minix3_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +minix3_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +minix3_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +nilfs2_module_SOURCES = fs/nilfs2.c ## platform sources +nodist_nilfs2_module_SOURCES = ## platform nodist sources +nilfs2_module_LDADD = +nilfs2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +nilfs2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +nilfs2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +nilfs2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +nilfs2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ntfs_module_SOURCES = fs/ntfs.c ## platform sources +nodist_ntfs_module_SOURCES = ## platform nodist sources +ntfs_module_LDADD = +ntfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ntfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ntfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ntfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ntfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ntfscomp_module_SOURCES = fs/ntfscomp.c ## platform sources +nodist_ntfscomp_module_SOURCES = ## platform nodist sources +ntfscomp_module_LDADD = +ntfscomp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ntfscomp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ntfscomp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ntfscomp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ntfscomp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +reiserfs_module_SOURCES = fs/reiserfs.c ## platform sources +nodist_reiserfs_module_SOURCES = ## platform nodist sources +reiserfs_module_LDADD = +reiserfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +reiserfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +reiserfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +reiserfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +reiserfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +romfs_module_SOURCES = fs/romfs.c ## platform sources +nodist_romfs_module_SOURCES = ## platform nodist sources +romfs_module_LDADD = +romfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +romfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +romfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +romfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +romfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +sfs_module_SOURCES = fs/sfs.c ## platform sources +nodist_sfs_module_SOURCES = ## platform nodist sources +sfs_module_LDADD = +sfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +squash4_module_SOURCES = fs/squash4.c ## platform sources +nodist_squash4_module_SOURCES = ## platform nodist sources +squash4_module_LDADD = +squash4_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-undef +squash4_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +squash4_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H +squash4_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +squash4_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +tar_module_SOURCES = fs/tar.c ## platform sources +nodist_tar_module_SOURCES = ## platform nodist sources +tar_module_LDADD = +tar_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tar_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tar_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tar_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tar_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +udf_module_SOURCES = fs/udf.c ## platform sources +nodist_udf_module_SOURCES = ## platform nodist sources +udf_module_LDADD = +udf_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +udf_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +udf_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +udf_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +udf_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ufs1_module_SOURCES = fs/ufs.c ## platform sources +nodist_ufs1_module_SOURCES = ## platform nodist sources +ufs1_module_LDADD = +ufs1_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ufs1_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ufs1_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ufs1_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ufs1_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ufs1_be_module_SOURCES = fs/ufs_be.c ## platform sources +nodist_ufs1_be_module_SOURCES = ## platform nodist sources +ufs1_be_module_LDADD = +ufs1_be_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ufs1_be_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ufs1_be_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ufs1_be_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ufs1_be_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ufs2_module_SOURCES = fs/ufs2.c ## platform sources +nodist_ufs2_module_SOURCES = ## platform nodist sources +ufs2_module_LDADD = +ufs2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ufs2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ufs2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ufs2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ufs2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +xfs_module_SOURCES = fs/xfs.c ## platform sources +nodist_xfs_module_SOURCES = ## platform nodist sources +xfs_module_LDADD = +xfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +zfs_module_SOURCES = fs/zfs/zfs.c fs/zfs/zfs_lzjb.c fs/zfs/zfs_lz4.c fs/zfs/zfs_sha256.c fs/zfs/zfs_fletcher.c ## platform sources +nodist_zfs_module_SOURCES = ## platform nodist sources +zfs_module_LDADD = +zfs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +zfs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +zfs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +zfs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +zfs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +zfscrypt_module_SOURCES = fs/zfs/zfscrypt.c ## platform sources +nodist_zfscrypt_module_SOURCES = ## platform nodist sources +zfscrypt_module_LDADD = +zfscrypt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +zfscrypt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +zfscrypt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +zfscrypt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +zfscrypt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +zfsinfo_module_SOURCES = fs/zfs/zfsinfo.c ## platform sources +nodist_zfsinfo_module_SOURCES = ## platform nodist sources +zfsinfo_module_LDADD = +zfsinfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +zfsinfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +zfsinfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +zfsinfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +zfsinfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +macbless_module_SOURCES = commands/macbless.c ## platform sources +nodist_macbless_module_SOURCES = ## platform nodist sources +macbless_module_LDADD = +macbless_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +macbless_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +macbless_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +macbless_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +macbless_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@pxe_module_SOURCES = net/drivers/i386/pc/pxe.c ## platform sources +@COND_i386_pc_TRUE@nodist_pxe_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@pxe_module_LDADD = +@COND_i386_pc_TRUE@pxe_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@pxe_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@pxe_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@pxe_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@pxe_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gettext_module_SOURCES = gettext/gettext.c ## platform sources +nodist_gettext_module_SOURCES = ## platform nodist sources +gettext_module_LDADD = +gettext_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gettext_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gettext_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gettext_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gettext_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gfxmenu_module_SOURCES = gfxmenu/gfxmenu.c gfxmenu/view.c gfxmenu/font.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 ## platform sources +nodist_gfxmenu_module_SOURCES = ## platform nodist sources +gfxmenu_module_LDADD = +gfxmenu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxmenu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxmenu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxmenu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxmenu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +hello_module_SOURCES = hello/hello.c ## platform sources +nodist_hello_module_SOURCES = ## platform nodist sources +hello_module_LDADD = +hello_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +hello_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +hello_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +hello_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +hello_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gzio_module_SOURCES = io/gzio.c ## platform sources +nodist_gzio_module_SOURCES = ## platform nodist sources +gzio_module_LDADD = +gzio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gzio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gzio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gzio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gzio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +offsetio_module_SOURCES = io/offset.c ## platform sources +nodist_offsetio_module_SOURCES = ## platform nodist sources +offsetio_module_LDADD = +offsetio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +offsetio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +offsetio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +offsetio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +offsetio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_arm_efi_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_arm_uboot_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_emu_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_i386_efi_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_i386_ieee1275_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_i386_multiboot_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_i386_pc_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_i386_qemu_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_i386_xen_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_ia64_efi_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_mips_arc_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_mips_qemu_mips_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_powerpc_ieee1275_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_sparc64_ieee1275_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_x86_64_efi_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_x86_64_xen_TRUE@bufio_module_SOURCES = io/bufio.c ## platform sources +@COND_arm64_efi_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_bufio_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@bufio_module_LDADD = +@COND_arm_efi_TRUE@bufio_module_LDADD = +@COND_arm_uboot_TRUE@bufio_module_LDADD = +@COND_emu_TRUE@bufio_module_LDADD = +@COND_i386_efi_TRUE@bufio_module_LDADD = +@COND_i386_ieee1275_TRUE@bufio_module_LDADD = +@COND_i386_multiboot_TRUE@bufio_module_LDADD = +@COND_i386_pc_TRUE@bufio_module_LDADD = +@COND_i386_qemu_TRUE@bufio_module_LDADD = +@COND_i386_xen_TRUE@bufio_module_LDADD = +@COND_ia64_efi_TRUE@bufio_module_LDADD = +@COND_mips_arc_TRUE@bufio_module_LDADD = +@COND_mips_qemu_mips_TRUE@bufio_module_LDADD = +@COND_powerpc_ieee1275_TRUE@bufio_module_LDADD = +@COND_sparc64_ieee1275_TRUE@bufio_module_LDADD = +@COND_x86_64_efi_TRUE@bufio_module_LDADD = +@COND_x86_64_xen_TRUE@bufio_module_LDADD = +@COND_arm64_efi_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@bufio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@bufio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@bufio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@bufio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@bufio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +elf_module_SOURCES = kern/elf.c ## platform sources +nodist_elf_module_SOURCES = ## platform nodist sources +elf_module_LDADD = +elf_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +elf_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +elf_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +elf_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +elf_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +crypto_module_SOURCES = lib/crypto.c ## platform sources +nodist_crypto_module_SOURCES = ## platform nodist sources +crypto_module_LDADD = +crypto_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +crypto_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +crypto_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +crypto_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +crypto_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +pbkdf2_module_SOURCES = lib/pbkdf2.c ## platform sources +nodist_pbkdf2_module_SOURCES = ## platform nodist sources +pbkdf2_module_LDADD = +pbkdf2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pbkdf2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pbkdf2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pbkdf2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pbkdf2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_i386_efi_TRUE@relocator_module_SOURCES = lib/efi/relocator.c lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_i386_ieee1275_TRUE@relocator_module_SOURCES = lib/ieee1275/relocator.c lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_i386_multiboot_TRUE@relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_i386_pc_TRUE@relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_i386_qemu_TRUE@relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_i386_xen_TRUE@relocator_module_SOURCES = lib/i386/relocator_asm.S lib/i386/xen/relocator.S lib/xen/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_mips_arc_TRUE@relocator_module_SOURCES = lib/mips/relocator_asm.S lib/mips/relocator.c lib/relocator.c ## platform sources +@COND_mips_loongson_TRUE@relocator_module_SOURCES = lib/mips/relocator_asm.S lib/mips/relocator.c lib/relocator.c ## platform sources +@COND_mips_qemu_mips_TRUE@relocator_module_SOURCES = lib/mips/relocator_asm.S lib/mips/relocator.c lib/relocator.c ## platform sources +@COND_powerpc_ieee1275_TRUE@relocator_module_SOURCES = lib/powerpc/relocator_asm.S lib/powerpc/relocator.c lib/ieee1275/relocator.c lib/relocator.c ## platform sources +@COND_x86_64_efi_TRUE@relocator_module_SOURCES = lib/x86_64/efi/relocator.c lib/x86_64/relocator_asm.S lib/efi/relocator.c lib/i386/relocator16.S lib/i386/relocator32.S lib/i386/relocator64.S lib/i386/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_x86_64_xen_TRUE@relocator_module_SOURCES = lib/x86_64/relocator_asm.S lib/x86_64/xen/relocator.S lib/xen/relocator.c lib/i386/relocator_common_c.c lib/relocator.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_relocator_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@relocator_module_LDADD = +@COND_i386_efi_TRUE@relocator_module_LDADD = +@COND_i386_ieee1275_TRUE@relocator_module_LDADD = +@COND_i386_multiboot_TRUE@relocator_module_LDADD = +@COND_i386_pc_TRUE@relocator_module_LDADD = +@COND_i386_qemu_TRUE@relocator_module_LDADD = +@COND_i386_xen_TRUE@relocator_module_LDADD = +@COND_mips_arc_TRUE@relocator_module_LDADD = +@COND_mips_loongson_TRUE@relocator_module_LDADD = +@COND_mips_qemu_mips_TRUE@relocator_module_LDADD = +@COND_powerpc_ieee1275_TRUE@relocator_module_LDADD = +@COND_x86_64_efi_TRUE@relocator_module_LDADD = +@COND_x86_64_xen_TRUE@relocator_module_LDADD = +@COND_i386_coreboot_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@relocator_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@relocator_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@relocator_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@relocator_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@relocator_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +@COND_arm_efi_TRUE@datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +@COND_arm_uboot_TRUE@datetime_module_SOURCES = lib/uboot/datetime.c ## platform sources +@COND_i386_coreboot_TRUE@datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +@COND_i386_efi_TRUE@datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +@COND_i386_ieee1275_TRUE@datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +@COND_i386_multiboot_TRUE@datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +@COND_i386_pc_TRUE@datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +@COND_i386_qemu_TRUE@datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +@COND_i386_xen_TRUE@datetime_module_SOURCES = lib/xen/datetime.c ## platform sources +@COND_ia64_efi_TRUE@datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +@COND_mips_arc_TRUE@datetime_module_SOURCES = lib/arc/datetime.c ## platform sources +@COND_mips_loongson_TRUE@datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +@COND_mips_qemu_mips_TRUE@datetime_module_SOURCES = lib/cmos_datetime.c ## platform sources +@COND_powerpc_ieee1275_TRUE@datetime_module_SOURCES = lib/ieee1275/datetime.c lib/ieee1275/cmos.c lib/cmos_datetime.c ## platform sources +@COND_sparc64_ieee1275_TRUE@datetime_module_SOURCES = lib/ieee1275/datetime.c lib/ieee1275/cmos.c lib/cmos_datetime.c ## platform sources +@COND_x86_64_efi_TRUE@datetime_module_SOURCES = lib/efi/datetime.c ## platform sources +@COND_x86_64_xen_TRUE@datetime_module_SOURCES = lib/xen/datetime.c ## platform sources +@COND_arm64_efi_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_datetime_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@datetime_module_LDADD = +@COND_arm_efi_TRUE@datetime_module_LDADD = +@COND_arm_uboot_TRUE@datetime_module_LDADD = +@COND_i386_coreboot_TRUE@datetime_module_LDADD = +@COND_i386_efi_TRUE@datetime_module_LDADD = +@COND_i386_ieee1275_TRUE@datetime_module_LDADD = +@COND_i386_multiboot_TRUE@datetime_module_LDADD = +@COND_i386_pc_TRUE@datetime_module_LDADD = +@COND_i386_qemu_TRUE@datetime_module_LDADD = +@COND_i386_xen_TRUE@datetime_module_LDADD = +@COND_ia64_efi_TRUE@datetime_module_LDADD = +@COND_mips_arc_TRUE@datetime_module_LDADD = +@COND_mips_loongson_TRUE@datetime_module_LDADD = +@COND_mips_qemu_mips_TRUE@datetime_module_LDADD = +@COND_powerpc_ieee1275_TRUE@datetime_module_LDADD = +@COND_sparc64_ieee1275_TRUE@datetime_module_LDADD = +@COND_x86_64_efi_TRUE@datetime_module_LDADD = +@COND_x86_64_xen_TRUE@datetime_module_LDADD = +@COND_arm64_efi_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@datetime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@datetime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@datetime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@datetime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@datetime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +setjmp_module_SOURCES = lib/setjmp.S ## platform sources +nodist_setjmp_module_SOURCES = ## platform nodist sources +setjmp_module_LDADD = +setjmp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setjmp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setjmp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setjmp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setjmp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@aout_module_SOURCES = loader/aout.c ## platform sources +@COND_i386_efi_TRUE@aout_module_SOURCES = loader/aout.c ## platform sources +@COND_i386_ieee1275_TRUE@aout_module_SOURCES = loader/aout.c ## platform sources +@COND_i386_multiboot_TRUE@aout_module_SOURCES = loader/aout.c ## platform sources +@COND_i386_pc_TRUE@aout_module_SOURCES = loader/aout.c ## platform sources +@COND_i386_qemu_TRUE@aout_module_SOURCES = loader/aout.c ## platform sources +@COND_x86_64_efi_TRUE@aout_module_SOURCES = loader/aout.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_aout_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_aout_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_aout_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_aout_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_aout_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_aout_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_aout_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@aout_module_LDADD = +@COND_i386_efi_TRUE@aout_module_LDADD = +@COND_i386_ieee1275_TRUE@aout_module_LDADD = +@COND_i386_multiboot_TRUE@aout_module_LDADD = +@COND_i386_pc_TRUE@aout_module_LDADD = +@COND_i386_qemu_TRUE@aout_module_LDADD = +@COND_x86_64_efi_TRUE@aout_module_LDADD = +@COND_i386_coreboot_TRUE@aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@aout_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@aout_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@aout_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@aout_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@aout_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +@COND_i386_efi_TRUE@bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +@COND_i386_ieee1275_TRUE@bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +@COND_i386_multiboot_TRUE@bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +@COND_i386_pc_TRUE@bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +@COND_i386_qemu_TRUE@bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +@COND_x86_64_efi_TRUE@bsd_module_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_bsd_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_bsd_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_bsd_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_bsd_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_bsd_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_bsd_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_bsd_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@bsd_module_LDADD = +@COND_i386_efi_TRUE@bsd_module_LDADD = +@COND_i386_ieee1275_TRUE@bsd_module_LDADD = +@COND_i386_multiboot_TRUE@bsd_module_LDADD = +@COND_i386_pc_TRUE@bsd_module_LDADD = +@COND_i386_qemu_TRUE@bsd_module_LDADD = +@COND_x86_64_efi_TRUE@bsd_module_LDADD = +@COND_i386_coreboot_TRUE@bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@plan9_module_SOURCES = loader/i386/pc/plan9.c ## platform sources +@COND_i386_pc_TRUE@nodist_plan9_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@plan9_module_LDADD = +@COND_i386_pc_TRUE@plan9_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@plan9_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@plan9_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@plan9_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@plan9_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_efi_TRUE@linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_ieee1275_TRUE@linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_multiboot_TRUE@linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_pc_TRUE@linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_qemu_TRUE@linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_x86_64_efi_TRUE@linux16_module_SOURCES = loader/i386/pc/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_linux16_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_linux16_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_linux16_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_linux16_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_linux16_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_linux16_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_linux16_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@linux16_module_LDADD = +@COND_i386_efi_TRUE@linux16_module_LDADD = +@COND_i386_ieee1275_TRUE@linux16_module_LDADD = +@COND_i386_multiboot_TRUE@linux16_module_LDADD = +@COND_i386_pc_TRUE@linux16_module_LDADD = +@COND_i386_qemu_TRUE@linux16_module_LDADD = +@COND_x86_64_efi_TRUE@linux16_module_LDADD = +@COND_i386_coreboot_TRUE@linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux16_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux16_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux16_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux16_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@linux16_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@ntldr_module_SOURCES = loader/i386/pc/ntldr.c ## platform sources +@COND_i386_pc_TRUE@nodist_ntldr_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@ntldr_module_LDADD = +@COND_i386_pc_TRUE@ntldr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@ntldr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@ntldr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@ntldr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@ntldr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@truecrypt_module_SOURCES = loader/i386/pc/truecrypt.c ## platform sources +@COND_i386_pc_TRUE@nodist_truecrypt_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@truecrypt_module_LDADD = +@COND_i386_pc_TRUE@truecrypt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@truecrypt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@truecrypt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@truecrypt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@truecrypt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@freedos_module_SOURCES = loader/i386/pc/freedos.c ## platform sources +@COND_i386_pc_TRUE@nodist_freedos_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@freedos_module_LDADD = +@COND_i386_pc_TRUE@freedos_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@freedos_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@freedos_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@freedos_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@freedos_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@pxechain_module_SOURCES = loader/i386/pc/pxechainloader.c ## platform sources +@COND_i386_pc_TRUE@nodist_pxechain_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@pxechain_module_LDADD = +@COND_i386_pc_TRUE@pxechain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@pxechain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@pxechain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@pxechain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@pxechain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_i386_efi_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_i386_ieee1275_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_i386_multiboot_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_i386_pc_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_i386_qemu_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_mips_arc_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_mips_loongson_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_mips_qemu_mips_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_x86_64_efi_TRUE@multiboot2_module_SOURCES = loader/multiboot.c lib/cmdline.c loader/multiboot_mbi2.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_multiboot2_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@multiboot2_module_LDADD = +@COND_i386_efi_TRUE@multiboot2_module_LDADD = +@COND_i386_ieee1275_TRUE@multiboot2_module_LDADD = +@COND_i386_multiboot_TRUE@multiboot2_module_LDADD = +@COND_i386_pc_TRUE@multiboot2_module_LDADD = +@COND_i386_qemu_TRUE@multiboot2_module_LDADD = +@COND_mips_arc_TRUE@multiboot2_module_LDADD = +@COND_mips_loongson_TRUE@multiboot2_module_LDADD = +@COND_mips_qemu_mips_TRUE@multiboot2_module_LDADD = +@COND_x86_64_efi_TRUE@multiboot2_module_LDADD = +@COND_i386_coreboot_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@multiboot2_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@multiboot2_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_i386_efi_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_i386_ieee1275_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_i386_multiboot_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_i386_pc_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_i386_qemu_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_mips_arc_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_mips_loongson_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_mips_qemu_mips_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_x86_64_efi_TRUE@multiboot2_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -DGRUB_USE_MULTIBOOT2 +@COND_i386_coreboot_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@multiboot2_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@multiboot2_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +@COND_i386_efi_TRUE@multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +@COND_i386_ieee1275_TRUE@multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +@COND_i386_multiboot_TRUE@multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +@COND_i386_pc_TRUE@multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +@COND_i386_qemu_TRUE@multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +@COND_x86_64_efi_TRUE@multiboot_module_SOURCES = loader/i386/multiboot_mbi.c loader/multiboot.c lib/cmdline.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_multiboot_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_multiboot_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_multiboot_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_multiboot_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_multiboot_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_multiboot_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_multiboot_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@multiboot_module_LDADD = +@COND_i386_efi_TRUE@multiboot_module_LDADD = +@COND_i386_ieee1275_TRUE@multiboot_module_LDADD = +@COND_i386_multiboot_TRUE@multiboot_module_LDADD = +@COND_i386_pc_TRUE@multiboot_module_LDADD = +@COND_i386_qemu_TRUE@multiboot_module_LDADD = +@COND_x86_64_efi_TRUE@multiboot_module_LDADD = +@COND_i386_coreboot_TRUE@multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@multiboot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@multiboot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@multiboot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@multiboot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@multiboot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@xen_boot_module_SOURCES = loader/arm64/xen_boot.c lib/cmdline.c ## platform sources +@COND_arm64_efi_TRUE@nodist_xen_boot_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@xen_boot_module_LDADD = +@COND_arm64_efi_TRUE@xen_boot_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@xen_boot_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@xen_boot_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@xen_boot_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@xen_boot_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@linux_module_SOURCES = loader/arm64/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_arm_efi_TRUE@linux_module_SOURCES = loader/arm/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_arm_uboot_TRUE@linux_module_SOURCES = loader/arm/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_coreboot_TRUE@linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_efi_TRUE@linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_ieee1275_TRUE@linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_multiboot_TRUE@linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_pc_TRUE@linux_module_SOURCES = lib/i386/pc/vesa_modes_table.c loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_qemu_TRUE@linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_i386_xen_TRUE@linux_module_SOURCES = loader/i386/xen.c loader/linux.c lib/cmdline.c ## platform sources +@COND_ia64_efi_TRUE@linux_module_SOURCES = loader/ia64/efi/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_mips_arc_TRUE@linux_module_SOURCES = loader/mips/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_mips_loongson_TRUE@linux_module_SOURCES = loader/mips/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_mips_qemu_mips_TRUE@linux_module_SOURCES = loader/mips/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_powerpc_ieee1275_TRUE@linux_module_SOURCES = loader/powerpc/ieee1275/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_sparc64_ieee1275_TRUE@linux_module_SOURCES = loader/sparc64/ieee1275/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_x86_64_efi_TRUE@linux_module_SOURCES = loader/i386/linux.c loader/linux.c lib/cmdline.c ## platform sources +@COND_x86_64_xen_TRUE@linux_module_SOURCES = loader/i386/xen.c loader/linux.c lib/cmdline.c ## platform sources +@COND_arm64_efi_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_linux_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@linux_module_LDADD = +@COND_arm_efi_TRUE@linux_module_LDADD = +@COND_arm_uboot_TRUE@linux_module_LDADD = +@COND_i386_coreboot_TRUE@linux_module_LDADD = +@COND_i386_efi_TRUE@linux_module_LDADD = +@COND_i386_ieee1275_TRUE@linux_module_LDADD = +@COND_i386_multiboot_TRUE@linux_module_LDADD = +@COND_i386_pc_TRUE@linux_module_LDADD = +@COND_i386_qemu_TRUE@linux_module_LDADD = +@COND_i386_xen_TRUE@linux_module_LDADD = +@COND_ia64_efi_TRUE@linux_module_LDADD = +@COND_mips_arc_TRUE@linux_module_LDADD = +@COND_mips_loongson_TRUE@linux_module_LDADD = +@COND_mips_qemu_mips_TRUE@linux_module_LDADD = +@COND_powerpc_ieee1275_TRUE@linux_module_LDADD = +@COND_sparc64_ieee1275_TRUE@linux_module_LDADD = +@COND_x86_64_efi_TRUE@linux_module_LDADD = +@COND_x86_64_xen_TRUE@linux_module_LDADD = +@COND_arm64_efi_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@linux_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@linux_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@linux_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@linux_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@linux_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@fdt_module_SOURCES = loader/arm64/fdt.c lib/fdt.c ## platform sources +@COND_arm_efi_TRUE@fdt_module_SOURCES = lib/fdt.c ## platform sources +@COND_arm_uboot_TRUE@fdt_module_SOURCES = lib/fdt.c ## platform sources +@COND_arm64_efi_TRUE@nodist_fdt_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_fdt_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_fdt_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@fdt_module_LDADD = +@COND_arm_efi_TRUE@fdt_module_LDADD = +@COND_arm_uboot_TRUE@fdt_module_LDADD = +@COND_arm64_efi_TRUE@fdt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@fdt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@fdt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@fdt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@fdt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@fdt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@fdt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@fdt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@fdt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@fdt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@fdt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@fdt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@fdt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@fdt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@fdt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +@COND_i386_efi_TRUE@xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +@COND_i386_multiboot_TRUE@xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +@COND_i386_pc_TRUE@xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +@COND_x86_64_efi_TRUE@xnu_module_SOURCES = loader/xnu_resume.c loader/i386/xnu.c loader/xnu.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_xnu_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_xnu_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_xnu_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_xnu_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_xnu_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@xnu_module_LDADD = +@COND_i386_efi_TRUE@xnu_module_LDADD = +@COND_i386_multiboot_TRUE@xnu_module_LDADD = +@COND_i386_pc_TRUE@xnu_module_LDADD = +@COND_x86_64_efi_TRUE@xnu_module_LDADD = +@COND_i386_coreboot_TRUE@xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@xnu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@xnu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@xnu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@xnu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@xnu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@random_module_SOURCES = kern/i386/tsc_pmtimer.c lib/i386/random.c lib/random.c ## platform sources +@COND_i386_efi_TRUE@random_module_SOURCES = lib/i386/random.c lib/random.c ## platform sources +@COND_i386_multiboot_TRUE@random_module_SOURCES = kern/i386/tsc_pmtimer.c lib/i386/random.c lib/random.c ## platform sources +@COND_i386_pc_TRUE@random_module_SOURCES = kern/i386/tsc_pmtimer.c lib/i386/random.c lib/random.c ## platform sources +@COND_x86_64_efi_TRUE@random_module_SOURCES = lib/i386/random.c lib/random.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_random_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_random_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_random_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_random_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_random_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@random_module_LDADD = +@COND_i386_efi_TRUE@random_module_LDADD = +@COND_i386_multiboot_TRUE@random_module_LDADD = +@COND_i386_pc_TRUE@random_module_LDADD = +@COND_x86_64_efi_TRUE@random_module_LDADD = +@COND_i386_coreboot_TRUE@random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@random_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@random_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@random_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@random_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@random_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +macho_module_SOURCES = loader/macho.c loader/macho32.c loader/macho64.c loader/lzss.c ## platform sources +nodist_macho_module_SOURCES = ## platform nodist sources +macho_module_LDADD = +macho_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +macho_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +macho_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +macho_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +macho_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@appleldr_module_SOURCES = loader/efi/appleloader.c ## platform sources +@COND_x86_64_efi_TRUE@appleldr_module_SOURCES = loader/efi/appleloader.c ## platform sources +@COND_i386_efi_TRUE@nodist_appleldr_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_appleldr_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@appleldr_module_LDADD = +@COND_x86_64_efi_TRUE@appleldr_module_LDADD = +@COND_i386_efi_TRUE@appleldr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@appleldr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@appleldr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@appleldr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@appleldr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@appleldr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@appleldr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@appleldr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@appleldr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@appleldr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +@COND_arm_efi_TRUE@chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +@COND_i386_coreboot_TRUE@chain_module_SOURCES = loader/i386/coreboot/chainloader.c lib/LzmaDec.c ## platform sources +@COND_i386_efi_TRUE@chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +@COND_i386_pc_TRUE@chain_module_SOURCES = loader/i386/pc/chainloader.c ## platform sources +@COND_ia64_efi_TRUE@chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +@COND_x86_64_efi_TRUE@chain_module_SOURCES = loader/efi/chainloader.c ## platform sources +@COND_arm64_efi_TRUE@nodist_chain_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_chain_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_chain_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_chain_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_chain_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_chain_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_chain_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@chain_module_LDADD = +@COND_arm_efi_TRUE@chain_module_LDADD = +@COND_i386_coreboot_TRUE@chain_module_LDADD = +@COND_i386_efi_TRUE@chain_module_LDADD = +@COND_i386_pc_TRUE@chain_module_LDADD = +@COND_ia64_efi_TRUE@chain_module_LDADD = +@COND_x86_64_efi_TRUE@chain_module_LDADD = +@COND_arm64_efi_TRUE@chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@chain_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@chain_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@chain_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@chain_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@chain_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@mmap_module_SOURCES = mmap/efi/mmap.c mmap/mmap.c ## platform sources +@COND_arm_efi_TRUE@mmap_module_SOURCES = mmap/efi/mmap.c mmap/mmap.c ## platform sources +@COND_i386_coreboot_TRUE@mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +@COND_i386_efi_TRUE@mmap_module_SOURCES = mmap/efi/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +@COND_i386_ieee1275_TRUE@mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +@COND_i386_multiboot_TRUE@mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +@COND_i386_pc_TRUE@mmap_module_SOURCES = mmap/i386/pc/mmap.c mmap/i386/pc/mmap_helper.S mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +@COND_i386_qemu_TRUE@mmap_module_SOURCES = mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +@COND_ia64_efi_TRUE@mmap_module_SOURCES = mmap/efi/mmap.c mmap/mmap.c ## platform sources +@COND_mips_arc_TRUE@mmap_module_SOURCES = mmap/mips/uppermem.c mmap/mmap.c ## platform sources +@COND_mips_loongson_TRUE@mmap_module_SOURCES = mmap/mips/uppermem.c mmap/mmap.c ## platform sources +@COND_mips_qemu_mips_TRUE@mmap_module_SOURCES = mmap/mips/uppermem.c mmap/mmap.c ## platform sources +@COND_x86_64_efi_TRUE@mmap_module_SOURCES = mmap/efi/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c mmap/mmap.c ## platform sources +@COND_arm64_efi_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_mmap_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@mmap_module_LDADD = +@COND_arm_efi_TRUE@mmap_module_LDADD = +@COND_i386_coreboot_TRUE@mmap_module_LDADD = +@COND_i386_efi_TRUE@mmap_module_LDADD = +@COND_i386_ieee1275_TRUE@mmap_module_LDADD = +@COND_i386_multiboot_TRUE@mmap_module_LDADD = +@COND_i386_pc_TRUE@mmap_module_LDADD = +@COND_i386_qemu_TRUE@mmap_module_LDADD = +@COND_ia64_efi_TRUE@mmap_module_LDADD = +@COND_mips_arc_TRUE@mmap_module_LDADD = +@COND_mips_loongson_TRUE@mmap_module_LDADD = +@COND_mips_qemu_mips_TRUE@mmap_module_LDADD = +@COND_x86_64_efi_TRUE@mmap_module_LDADD = +@COND_arm64_efi_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@mmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@mmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@mmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@mmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@mmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +normal_module_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c normal/auth.c normal/autofs.c normal/color.c normal/completion.c normal/datetime.c normal/menu.c normal/menu_entry.c normal/menu_text.c normal/misc.c normal/crypto.c normal/term.c normal/context.c normal/charset.c lib/getline.c script/main.c script/script.c script/execute.c script/function.c script/lexer.c script/argv.c commands/menuentry.c unidata.c ## platform sources +nodist_normal_module_SOURCES = grub_script.tab.c grub_script.yy.c grub_script.tab.h grub_script.yy.h ## platform nodist sources +normal_module_LDADD = +normal_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-redundant-decls +normal_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +normal_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_POSIX) +normal_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +normal_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_acorn_module_SOURCES = partmap/acorn.c ## platform sources +nodist_part_acorn_module_SOURCES = ## platform nodist sources +part_acorn_module_LDADD = +part_acorn_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_acorn_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_acorn_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_acorn_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_acorn_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_amiga_module_SOURCES = partmap/amiga.c ## platform sources +nodist_part_amiga_module_SOURCES = ## platform nodist sources +part_amiga_module_LDADD = +part_amiga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_amiga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_amiga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_amiga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_amiga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_apple_module_SOURCES = partmap/apple.c ## platform sources +nodist_part_apple_module_SOURCES = ## platform nodist sources +part_apple_module_LDADD = +part_apple_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_apple_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_apple_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_apple_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_apple_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_gpt_module_SOURCES = partmap/gpt.c ## platform sources +nodist_part_gpt_module_SOURCES = ## platform nodist sources +part_gpt_module_LDADD = +part_gpt_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_gpt_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_gpt_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_gpt_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_gpt_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_msdos_module_SOURCES = partmap/msdos.c ## platform sources +nodist_part_msdos_module_SOURCES = ## platform nodist sources +part_msdos_module_LDADD = +part_msdos_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_msdos_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_msdos_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_msdos_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_msdos_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_sun_module_SOURCES = partmap/sun.c ## platform sources +nodist_part_sun_module_SOURCES = ## platform nodist sources +part_sun_module_LDADD = +part_sun_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_sun_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_sun_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_sun_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_sun_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_plan_module_SOURCES = partmap/plan.c ## platform sources +nodist_part_plan_module_SOURCES = ## platform nodist sources +part_plan_module_LDADD = +part_plan_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_plan_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_plan_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_plan_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_plan_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_dvh_module_SOURCES = partmap/dvh.c ## platform sources +nodist_part_dvh_module_SOURCES = ## platform nodist sources +part_dvh_module_LDADD = +part_dvh_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_dvh_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_dvh_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_dvh_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_dvh_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_bsd_module_SOURCES = partmap/bsdlabel.c ## platform sources +nodist_part_bsd_module_SOURCES = ## platform nodist sources +part_bsd_module_LDADD = +part_bsd_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_bsd_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_bsd_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_bsd_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_bsd_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_sunpc_module_SOURCES = partmap/sunpc.c ## platform sources +nodist_part_sunpc_module_SOURCES = ## platform nodist sources +part_sunpc_module_LDADD = +part_sunpc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_sunpc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_sunpc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_sunpc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_sunpc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +part_dfly_module_SOURCES = partmap/dfly.c ## platform sources +nodist_part_dfly_module_SOURCES = ## platform nodist sources +part_dfly_module_LDADD = +part_dfly_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +part_dfly_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +part_dfly_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +part_dfly_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +part_dfly_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +msdospart_module_SOURCES = parttool/msdospart.c ## platform sources +nodist_msdospart_module_SOURCES = ## platform nodist sources +msdospart_module_LDADD = +msdospart_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +msdospart_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +msdospart_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +msdospart_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +msdospart_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +@COND_i386_efi_TRUE@at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +@COND_i386_ieee1275_TRUE@at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +@COND_i386_multiboot_TRUE@at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +@COND_i386_pc_TRUE@at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +@COND_i386_qemu_TRUE@at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +@COND_x86_64_efi_TRUE@at_keyboard_module_SOURCES = term/at_keyboard.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_at_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_at_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_at_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_at_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_at_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_at_keyboard_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_at_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@at_keyboard_module_LDADD = +@COND_i386_efi_TRUE@at_keyboard_module_LDADD = +@COND_i386_ieee1275_TRUE@at_keyboard_module_LDADD = +@COND_i386_multiboot_TRUE@at_keyboard_module_LDADD = +@COND_i386_pc_TRUE@at_keyboard_module_LDADD = +@COND_i386_qemu_TRUE@at_keyboard_module_LDADD = +@COND_x86_64_efi_TRUE@at_keyboard_module_LDADD = +@COND_i386_coreboot_TRUE@at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@at_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@at_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@at_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@at_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@at_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_arm_efi_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_arm_uboot_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_emu_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_i386_efi_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_i386_ieee1275_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_i386_multiboot_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_i386_pc_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_i386_qemu_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_i386_xen_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_ia64_efi_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_mips_arc_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_mips_qemu_mips_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_powerpc_ieee1275_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_sparc64_ieee1275_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_x86_64_efi_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_x86_64_xen_TRUE@gfxterm_module_SOURCES = term/gfxterm.c ## platform sources +@COND_arm64_efi_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_gfxterm_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@gfxterm_module_LDADD = +@COND_arm_efi_TRUE@gfxterm_module_LDADD = +@COND_arm_uboot_TRUE@gfxterm_module_LDADD = +@COND_emu_TRUE@gfxterm_module_LDADD = +@COND_i386_efi_TRUE@gfxterm_module_LDADD = +@COND_i386_ieee1275_TRUE@gfxterm_module_LDADD = +@COND_i386_multiboot_TRUE@gfxterm_module_LDADD = +@COND_i386_pc_TRUE@gfxterm_module_LDADD = +@COND_i386_qemu_TRUE@gfxterm_module_LDADD = +@COND_i386_xen_TRUE@gfxterm_module_LDADD = +@COND_ia64_efi_TRUE@gfxterm_module_LDADD = +@COND_mips_arc_TRUE@gfxterm_module_LDADD = +@COND_mips_qemu_mips_TRUE@gfxterm_module_LDADD = +@COND_powerpc_ieee1275_TRUE@gfxterm_module_LDADD = +@COND_sparc64_ieee1275_TRUE@gfxterm_module_LDADD = +@COND_x86_64_efi_TRUE@gfxterm_module_LDADD = +@COND_x86_64_xen_TRUE@gfxterm_module_LDADD = +@COND_arm64_efi_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@gfxterm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@gfxterm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@gfxterm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@gfxterm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@gfxterm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gfxterm_background_module_SOURCES = term/gfxterm_background.c ## platform sources +nodist_gfxterm_background_module_SOURCES = ## platform nodist sources +gfxterm_background_module_LDADD = +gfxterm_background_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_background_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_background_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_background_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_background_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@serial_module_SOURCES = term/efi/serial.c term/serial.c ## platform sources +@COND_arm_efi_TRUE@serial_module_SOURCES = term/efi/serial.c term/serial.c ## platform sources +@COND_i386_coreboot_TRUE@serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +@COND_i386_efi_TRUE@serial_module_SOURCES = term/efi/serial.c term/ns8250.c term/serial.c ## platform sources +@COND_i386_ieee1275_TRUE@serial_module_SOURCES = term/ieee1275/serial.c term/ns8250.c term/serial.c ## platform sources +@COND_i386_multiboot_TRUE@serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +@COND_i386_pc_TRUE@serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +@COND_i386_qemu_TRUE@serial_module_SOURCES = term/ns8250.c term/serial.c ## platform sources +@COND_ia64_efi_TRUE@serial_module_SOURCES = term/efi/serial.c term/serial.c ## platform sources +@COND_mips_arc_TRUE@serial_module_SOURCES = term/arc/serial.c term/serial.c ## platform sources +@COND_powerpc_ieee1275_TRUE@serial_module_SOURCES = term/ieee1275/serial.c term/serial.c ## platform sources +@COND_sparc64_ieee1275_TRUE@serial_module_SOURCES = term/ieee1275/serial.c term/serial.c ## platform sources +@COND_x86_64_efi_TRUE@serial_module_SOURCES = term/efi/serial.c term/ns8250.c term/serial.c ## platform sources +@COND_arm64_efi_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_serial_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@serial_module_LDADD = +@COND_arm_efi_TRUE@serial_module_LDADD = +@COND_i386_coreboot_TRUE@serial_module_LDADD = +@COND_i386_efi_TRUE@serial_module_LDADD = +@COND_i386_ieee1275_TRUE@serial_module_LDADD = +@COND_i386_multiboot_TRUE@serial_module_LDADD = +@COND_i386_pc_TRUE@serial_module_LDADD = +@COND_i386_qemu_TRUE@serial_module_LDADD = +@COND_ia64_efi_TRUE@serial_module_LDADD = +@COND_mips_arc_TRUE@serial_module_LDADD = +@COND_powerpc_ieee1275_TRUE@serial_module_LDADD = +@COND_sparc64_ieee1275_TRUE@serial_module_LDADD = +@COND_x86_64_efi_TRUE@serial_module_LDADD = +@COND_arm64_efi_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@serial_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@serial_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@serial_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@serial_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@serial_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@sendkey_module_SOURCES = commands/i386/pc/sendkey.c ## platform sources +@COND_i386_pc_TRUE@nodist_sendkey_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@sendkey_module_LDADD = +@COND_i386_pc_TRUE@sendkey_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@sendkey_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@sendkey_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@sendkey_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@sendkey_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_arm_efi_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_i386_coreboot_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_i386_efi_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_i386_multiboot_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_i386_pc_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_i386_qemu_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_ia64_efi_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_x86_64_efi_TRUE@terminfo_module_SOURCES = term/terminfo.c term/tparm.c ## platform sources +@COND_arm64_efi_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_terminfo_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@terminfo_module_LDADD = +@COND_arm_efi_TRUE@terminfo_module_LDADD = +@COND_i386_coreboot_TRUE@terminfo_module_LDADD = +@COND_i386_efi_TRUE@terminfo_module_LDADD = +@COND_i386_multiboot_TRUE@terminfo_module_LDADD = +@COND_i386_pc_TRUE@terminfo_module_LDADD = +@COND_i386_qemu_TRUE@terminfo_module_LDADD = +@COND_ia64_efi_TRUE@terminfo_module_LDADD = +@COND_x86_64_efi_TRUE@terminfo_module_LDADD = +@COND_arm64_efi_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@terminfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@terminfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@terminfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@terminfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@terminfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_i386_efi_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_i386_ieee1275_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_i386_multiboot_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_i386_pc_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_i386_qemu_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_mips_loongson_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_x86_64_efi_TRUE@usb_keyboard_module_SOURCES = term/usb_keyboard.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_usb_keyboard_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@usb_keyboard_module_LDADD = +@COND_i386_efi_TRUE@usb_keyboard_module_LDADD = +@COND_i386_ieee1275_TRUE@usb_keyboard_module_LDADD = +@COND_i386_multiboot_TRUE@usb_keyboard_module_LDADD = +@COND_i386_pc_TRUE@usb_keyboard_module_LDADD = +@COND_i386_qemu_TRUE@usb_keyboard_module_LDADD = +@COND_mips_loongson_TRUE@usb_keyboard_module_LDADD = +@COND_x86_64_efi_TRUE@usb_keyboard_module_LDADD = +@COND_i386_coreboot_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_keyboard_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_keyboard_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_keyboard_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@usb_keyboard_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@usb_keyboard_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@vga_module_SOURCES = video/i386/pc/vga.c ## platform sources +@COND_i386_pc_TRUE@nodist_vga_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@vga_module_LDADD = +@COND_i386_pc_TRUE@vga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@vga_text_module_SOURCES = term/i386/pc/vga_text.c ## platform sources +@COND_i386_pc_TRUE@nodist_vga_text_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@vga_text_module_LDADD = +@COND_i386_pc_TRUE@vga_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@vga_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +@COND_i386_multiboot_TRUE@mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +@COND_i386_pc_TRUE@mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +@COND_i386_qemu_TRUE@mda_text_module_SOURCES = term/i386/pc/mda_text.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_mda_text_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_mda_text_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_mda_text_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_mda_text_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@mda_text_module_LDADD = +@COND_i386_multiboot_TRUE@mda_text_module_LDADD = +@COND_i386_pc_TRUE@mda_text_module_LDADD = +@COND_i386_qemu_TRUE@mda_text_module_LDADD = +@COND_i386_coreboot_TRUE@mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@mda_text_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@mda_text_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@mda_text_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@mda_text_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@mda_text_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +@COND_i386_efi_TRUE@video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +@COND_i386_ieee1275_TRUE@video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +@COND_i386_multiboot_TRUE@video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +@COND_i386_pc_TRUE@video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +@COND_i386_qemu_TRUE@video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +@COND_x86_64_efi_TRUE@video_cirrus_module_SOURCES = video/cirrus.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_video_cirrus_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_video_cirrus_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_video_cirrus_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_video_cirrus_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_video_cirrus_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_video_cirrus_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_video_cirrus_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@video_cirrus_module_LDADD = +@COND_i386_efi_TRUE@video_cirrus_module_LDADD = +@COND_i386_ieee1275_TRUE@video_cirrus_module_LDADD = +@COND_i386_multiboot_TRUE@video_cirrus_module_LDADD = +@COND_i386_pc_TRUE@video_cirrus_module_LDADD = +@COND_i386_qemu_TRUE@video_cirrus_module_LDADD = +@COND_x86_64_efi_TRUE@video_cirrus_module_LDADD = +@COND_i386_coreboot_TRUE@video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_cirrus_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_cirrus_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_cirrus_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_cirrus_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@video_cirrus_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@video_bochs_module_SOURCES = video/bochs.c ## platform sources +@COND_i386_efi_TRUE@video_bochs_module_SOURCES = video/bochs.c ## platform sources +@COND_i386_ieee1275_TRUE@video_bochs_module_SOURCES = video/bochs.c ## platform sources +@COND_i386_multiboot_TRUE@video_bochs_module_SOURCES = video/bochs.c ## platform sources +@COND_i386_pc_TRUE@video_bochs_module_SOURCES = video/bochs.c ## platform sources +@COND_i386_qemu_TRUE@video_bochs_module_SOURCES = video/bochs.c ## platform sources +@COND_x86_64_efi_TRUE@video_bochs_module_SOURCES = video/bochs.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_video_bochs_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_video_bochs_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_video_bochs_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_video_bochs_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_video_bochs_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_video_bochs_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_video_bochs_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@video_bochs_module_LDADD = +@COND_i386_efi_TRUE@video_bochs_module_LDADD = +@COND_i386_ieee1275_TRUE@video_bochs_module_LDADD = +@COND_i386_multiboot_TRUE@video_bochs_module_LDADD = +@COND_i386_pc_TRUE@video_bochs_module_LDADD = +@COND_i386_qemu_TRUE@video_bochs_module_LDADD = +@COND_x86_64_efi_TRUE@video_bochs_module_LDADD = +@COND_i386_coreboot_TRUE@video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_bochs_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_bochs_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_bochs_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_bochs_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@video_bochs_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +functional_test_module_SOURCES = tests/lib/functional_test.c tests/lib/test.c tests/checksums.h tests/video_checksum.c tests/fake_input.c video/capture.c ## platform sources +nodist_functional_test_module_SOURCES = ## platform nodist sources +functional_test_module_LDADD = +functional_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +functional_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +functional_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +functional_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +functional_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +exfctest_module_SOURCES = tests/example_functional_test.c ## platform sources +nodist_exfctest_module_SOURCES = ## platform nodist sources +exfctest_module_LDADD = +exfctest_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +exfctest_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +exfctest_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +exfctest_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +exfctest_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +setjmp_test_module_SOURCES = tests/setjmp_test.c ## platform sources +nodist_setjmp_test_module_SOURCES = ## platform nodist sources +setjmp_test_module_LDADD = +setjmp_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +setjmp_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +setjmp_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +setjmp_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +setjmp_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +signature_test_module_SOURCES = tests/signature_test.c tests/signatures.h ## platform sources +nodist_signature_test_module_SOURCES = ## platform nodist sources +signature_test_module_LDADD = +signature_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +signature_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +signature_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +signature_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +signature_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +sleep_test_module_SOURCES = tests/sleep_test.c ## platform sources +nodist_sleep_test_module_SOURCES = ## platform nodist sources +sleep_test_module_LDADD = +sleep_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +sleep_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +sleep_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +sleep_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +sleep_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +xnu_uuid_test_module_SOURCES = tests/xnu_uuid_test.c ## platform sources +nodist_xnu_uuid_test_module_SOURCES = ## platform nodist sources +xnu_uuid_test_module_LDADD = +xnu_uuid_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +xnu_uuid_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xnu_uuid_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +xnu_uuid_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xnu_uuid_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +pbkdf2_test_module_SOURCES = tests/pbkdf2_test.c ## platform sources +nodist_pbkdf2_test_module_SOURCES = ## platform nodist sources +pbkdf2_test_module_LDADD = +pbkdf2_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +pbkdf2_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +pbkdf2_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +pbkdf2_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +pbkdf2_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +@COND_i386_efi_TRUE@legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +@COND_i386_pc_TRUE@legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +@COND_i386_xen_TRUE@legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +@COND_x86_64_efi_TRUE@legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +@COND_x86_64_xen_TRUE@legacy_password_test_module_SOURCES = tests/legacy_password_test.c ## platform sources +@COND_emu_TRUE@nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_legacy_password_test_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@legacy_password_test_module_LDADD = +@COND_i386_efi_TRUE@legacy_password_test_module_LDADD = +@COND_i386_pc_TRUE@legacy_password_test_module_LDADD = +@COND_i386_xen_TRUE@legacy_password_test_module_LDADD = +@COND_x86_64_efi_TRUE@legacy_password_test_module_LDADD = +@COND_x86_64_xen_TRUE@legacy_password_test_module_LDADD = +@COND_emu_TRUE@legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacy_password_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacy_password_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacy_password_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacy_password_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@legacy_password_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_emu_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_i386_coreboot_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_i386_efi_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_i386_ieee1275_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_i386_multiboot_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_i386_pc_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_i386_qemu_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_i386_xen_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_mips_arc_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_mips_loongson_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_mips_qemu_mips_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_powerpc_ieee1275_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_sparc64_ieee1275_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_x86_64_efi_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_x86_64_xen_TRUE@div_module_SOURCES = lib/division.c ## platform sources +@COND_arm64_efi_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_div_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@div_module_LDADD = +@COND_emu_TRUE@div_module_LDADD = +@COND_i386_coreboot_TRUE@div_module_LDADD = +@COND_i386_efi_TRUE@div_module_LDADD = +@COND_i386_ieee1275_TRUE@div_module_LDADD = +@COND_i386_multiboot_TRUE@div_module_LDADD = +@COND_i386_pc_TRUE@div_module_LDADD = +@COND_i386_qemu_TRUE@div_module_LDADD = +@COND_i386_xen_TRUE@div_module_LDADD = +@COND_mips_arc_TRUE@div_module_LDADD = +@COND_mips_loongson_TRUE@div_module_LDADD = +@COND_mips_qemu_mips_TRUE@div_module_LDADD = +@COND_powerpc_ieee1275_TRUE@div_module_LDADD = +@COND_sparc64_ieee1275_TRUE@div_module_LDADD = +@COND_x86_64_efi_TRUE@div_module_LDADD = +@COND_x86_64_xen_TRUE@div_module_LDADD = +@COND_arm64_efi_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_loongson_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@div_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_loongson_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@div_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_loongson_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@div_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_loongson_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@div_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@div_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +div_test_module_SOURCES = tests/div_test.c ## platform sources +nodist_div_test_module_SOURCES = ## platform nodist sources +div_test_module_LDADD = +div_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +div_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +div_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +div_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +div_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +mul_test_module_SOURCES = tests/mul_test.c ## platform sources +nodist_mul_test_module_SOURCES = ## platform nodist sources +mul_test_module_LDADD = +mul_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +mul_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mul_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +mul_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mul_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +shift_test_module_SOURCES = tests/shift_test.c ## platform sources +nodist_shift_test_module_SOURCES = ## platform nodist sources +shift_test_module_LDADD = +shift_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +shift_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +shift_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +shift_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +shift_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cmp_test_module_SOURCES = tests/cmp_test.c ## platform sources +nodist_cmp_test_module_SOURCES = ## platform nodist sources +cmp_test_module_LDADD = +cmp_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmp_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmp_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmp_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmp_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +ctz_test_module_SOURCES = tests/ctz_test.c ## platform sources +nodist_ctz_test_module_SOURCES = ## platform nodist sources +ctz_test_module_LDADD = +ctz_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +ctz_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +ctz_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +ctz_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +ctz_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +bswap_test_module_SOURCES = tests/bswap_test.c ## platform sources +nodist_bswap_test_module_SOURCES = ## platform nodist sources +bswap_test_module_LDADD = +bswap_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bswap_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bswap_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bswap_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bswap_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +videotest_checksum_module_SOURCES = tests/videotest_checksum.c ## platform sources +nodist_videotest_checksum_module_SOURCES = ## platform nodist sources +videotest_checksum_module_LDADD = +videotest_checksum_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +videotest_checksum_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +videotest_checksum_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +videotest_checksum_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +videotest_checksum_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gfxterm_menu_module_SOURCES = tests/gfxterm_menu.c ## platform sources +nodist_gfxterm_menu_module_SOURCES = ## platform nodist sources +gfxterm_menu_module_LDADD = +gfxterm_menu_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +gfxterm_menu_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gfxterm_menu_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +gfxterm_menu_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gfxterm_menu_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +cmdline_cat_test_module_SOURCES = tests/cmdline_cat_test.c ## platform sources +nodist_cmdline_cat_test_module_SOURCES = ## platform nodist sources +cmdline_cat_test_module_LDADD = +cmdline_cat_test_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +cmdline_cat_test_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +cmdline_cat_test_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +cmdline_cat_test_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +cmdline_cat_test_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +bitmap_module_SOURCES = video/bitmap.c ## platform sources +nodist_bitmap_module_SOURCES = ## platform nodist sources +bitmap_module_LDADD = +bitmap_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bitmap_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bitmap_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bitmap_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bitmap_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +bitmap_scale_module_SOURCES = video/bitmap_scale.c ## platform sources +nodist_bitmap_scale_module_SOURCES = ## platform nodist sources +bitmap_scale_module_LDADD = +bitmap_scale_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +bitmap_scale_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +bitmap_scale_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +bitmap_scale_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +bitmap_scale_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +@COND_arm_efi_TRUE@efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +@COND_i386_efi_TRUE@efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +@COND_ia64_efi_TRUE@efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +@COND_x86_64_efi_TRUE@efi_gop_module_SOURCES = video/efi_gop.c ## platform sources +@COND_arm64_efi_TRUE@nodist_efi_gop_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_efi_gop_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_efi_gop_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_efi_gop_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_efi_gop_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@efi_gop_module_LDADD = +@COND_arm_efi_TRUE@efi_gop_module_LDADD = +@COND_i386_efi_TRUE@efi_gop_module_LDADD = +@COND_ia64_efi_TRUE@efi_gop_module_LDADD = +@COND_x86_64_efi_TRUE@efi_gop_module_LDADD = +@COND_arm64_efi_TRUE@efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_gop_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_gop_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_gop_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_gop_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@efi_gop_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@efi_uga_module_SOURCES = video/efi_uga.c ## platform sources +@COND_x86_64_efi_TRUE@efi_uga_module_SOURCES = video/efi_uga.c ## platform sources +@COND_i386_efi_TRUE@nodist_efi_uga_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_efi_uga_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@efi_uga_module_LDADD = +@COND_x86_64_efi_TRUE@efi_uga_module_LDADD = +@COND_i386_efi_TRUE@efi_uga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_uga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_uga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_uga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_uga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_uga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_uga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efi_uga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@efi_uga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@efi_uga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +jpeg_module_SOURCES = video/readers/jpeg.c ## platform sources +nodist_jpeg_module_SOURCES = ## platform nodist sources +jpeg_module_LDADD = +jpeg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +jpeg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +jpeg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +jpeg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +jpeg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +png_module_SOURCES = video/readers/png.c ## platform sources +nodist_png_module_SOURCES = ## platform nodist sources +png_module_LDADD = +png_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +png_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +png_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +png_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +png_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +tga_module_SOURCES = video/readers/tga.c ## platform sources +nodist_tga_module_SOURCES = ## platform nodist sources +tga_module_LDADD = +tga_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tga_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tga_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tga_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tga_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@vbe_module_SOURCES = video/i386/pc/vbe.c ## platform sources +@COND_i386_pc_TRUE@nodist_vbe_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@vbe_module_LDADD = +@COND_i386_pc_TRUE@vbe_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@vbe_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@vbe_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@vbe_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@vbe_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_arm_efi_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_arm_uboot_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_emu_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_i386_efi_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_i386_ieee1275_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_i386_multiboot_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_i386_pc_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_i386_qemu_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_i386_xen_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_ia64_efi_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_mips_arc_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_mips_qemu_mips_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_powerpc_ieee1275_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_sparc64_ieee1275_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_x86_64_efi_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_x86_64_xen_TRUE@video_fb_module_SOURCES = video/fb/video_fb.c video/fb/fbblit.c video/fb/fbfill.c video/fb/fbutil.c ## platform sources +@COND_arm64_efi_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_video_fb_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@video_fb_module_LDADD = +@COND_arm_efi_TRUE@video_fb_module_LDADD = +@COND_arm_uboot_TRUE@video_fb_module_LDADD = +@COND_emu_TRUE@video_fb_module_LDADD = +@COND_i386_efi_TRUE@video_fb_module_LDADD = +@COND_i386_ieee1275_TRUE@video_fb_module_LDADD = +@COND_i386_multiboot_TRUE@video_fb_module_LDADD = +@COND_i386_pc_TRUE@video_fb_module_LDADD = +@COND_i386_qemu_TRUE@video_fb_module_LDADD = +@COND_i386_xen_TRUE@video_fb_module_LDADD = +@COND_ia64_efi_TRUE@video_fb_module_LDADD = +@COND_mips_arc_TRUE@video_fb_module_LDADD = +@COND_mips_qemu_mips_TRUE@video_fb_module_LDADD = +@COND_powerpc_ieee1275_TRUE@video_fb_module_LDADD = +@COND_sparc64_ieee1275_TRUE@video_fb_module_LDADD = +@COND_x86_64_efi_TRUE@video_fb_module_LDADD = +@COND_x86_64_xen_TRUE@video_fb_module_LDADD = +@COND_arm64_efi_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@video_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_arm_efi_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_arm_uboot_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_emu_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_i386_efi_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_i386_ieee1275_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_i386_multiboot_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_i386_pc_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_i386_qemu_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_i386_xen_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_ia64_efi_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_mips_arc_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_mips_qemu_mips_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_powerpc_ieee1275_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_sparc64_ieee1275_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_x86_64_efi_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_x86_64_xen_TRUE@video_module_SOURCES = video/video.c ## platform sources +@COND_arm64_efi_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_video_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@video_module_LDADD = +@COND_arm_efi_TRUE@video_module_LDADD = +@COND_arm_uboot_TRUE@video_module_LDADD = +@COND_emu_TRUE@video_module_LDADD = +@COND_i386_efi_TRUE@video_module_LDADD = +@COND_i386_ieee1275_TRUE@video_module_LDADD = +@COND_i386_multiboot_TRUE@video_module_LDADD = +@COND_i386_pc_TRUE@video_module_LDADD = +@COND_i386_qemu_TRUE@video_module_LDADD = +@COND_i386_xen_TRUE@video_module_LDADD = +@COND_ia64_efi_TRUE@video_module_LDADD = +@COND_mips_arc_TRUE@video_module_LDADD = +@COND_mips_qemu_mips_TRUE@video_module_LDADD = +@COND_powerpc_ieee1275_TRUE@video_module_LDADD = +@COND_sparc64_ieee1275_TRUE@video_module_LDADD = +@COND_x86_64_efi_TRUE@video_module_LDADD = +@COND_x86_64_xen_TRUE@video_module_LDADD = +@COND_arm64_efi_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_arc_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_arc_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_arc_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_arc_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_mips_qemu_mips_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +video_colors_module_SOURCES = video/colors.c ## platform sources +nodist_video_colors_module_SOURCES = ## platform nodist sources +video_colors_module_LDADD = +video_colors_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +video_colors_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +video_colors_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +video_colors_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +video_colors_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@ieee1275_fb_module_SOURCES = video/ieee1275.c ## platform sources +@COND_powerpc_ieee1275_TRUE@nodist_ieee1275_fb_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@ieee1275_fb_module_LDADD = +@COND_powerpc_ieee1275_TRUE@ieee1275_fb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ieee1275_fb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ieee1275_fb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ieee1275_fb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ieee1275_fb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl_module_SOURCES = video/emu/sdl.c ## platform sources +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@nodist_sdl_module_SOURCES = ## platform nodist sources +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl_module_LDADD = +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +datehook_module_SOURCES = hook/datehook.c ## platform sources +nodist_datehook_module_SOURCES = ## platform nodist sources +datehook_module_LDADD = +datehook_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +datehook_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +datehook_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +datehook_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +datehook_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +net_module_SOURCES = net/net.c net/dns.c net/bootp.c net/ip.c net/udp.c net/tcp.c net/icmp.c net/icmp6.c net/ethernet.c net/arp.c net/netbuff.c ## platform sources +nodist_net_module_SOURCES = ## platform nodist sources +net_module_LDADD = +net_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +net_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +net_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +net_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +net_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +tftp_module_SOURCES = net/tftp.c ## platform sources +nodist_tftp_module_SOURCES = ## platform nodist sources +tftp_module_LDADD = +tftp_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tftp_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tftp_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tftp_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tftp_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +http_module_SOURCES = net/http.c ## platform sources +nodist_http_module_SOURCES = ## platform nodist sources +http_module_LDADD = +http_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +http_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +http_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +http_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +http_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@ofnet_module_SOURCES = net/drivers/ieee1275/ofnet.c ## platform sources +@COND_powerpc_ieee1275_TRUE@ofnet_module_SOURCES = net/drivers/ieee1275/ofnet.c ## platform sources +@COND_sparc64_ieee1275_TRUE@ofnet_module_SOURCES = net/drivers/ieee1275/ofnet.c ## platform sources +@COND_i386_ieee1275_TRUE@nodist_ofnet_module_SOURCES = ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_ofnet_module_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_ofnet_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@ofnet_module_LDADD = +@COND_powerpc_ieee1275_TRUE@ofnet_module_LDADD = +@COND_sparc64_ieee1275_TRUE@ofnet_module_LDADD = +@COND_i386_ieee1275_TRUE@ofnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ofnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@ofnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ofnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ofnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@ofnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ofnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ofnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@ofnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ofnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_powerpc_ieee1275_TRUE@ofnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_sparc64_ieee1275_TRUE@ofnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@ofnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@ofnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@ofnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@ubootnet_module_SOURCES = net/drivers/uboot/ubootnet.c ## platform sources +@COND_arm_uboot_TRUE@nodist_ubootnet_module_SOURCES = ## platform nodist sources +@COND_arm_uboot_TRUE@ubootnet_module_LDADD = +@COND_arm_uboot_TRUE@ubootnet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_uboot_TRUE@ubootnet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_uboot_TRUE@ubootnet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_uboot_TRUE@ubootnet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_uboot_TRUE@ubootnet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +@COND_arm_efi_TRUE@efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +@COND_i386_efi_TRUE@efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +@COND_ia64_efi_TRUE@efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +@COND_x86_64_efi_TRUE@efinet_module_SOURCES = net/drivers/efi/efinet.c ## platform sources +@COND_arm64_efi_TRUE@nodist_efinet_module_SOURCES = ## platform nodist sources +@COND_arm_efi_TRUE@nodist_efinet_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_efinet_module_SOURCES = ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_efinet_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_efinet_module_SOURCES = ## platform nodist sources +@COND_arm64_efi_TRUE@efinet_module_LDADD = +@COND_arm_efi_TRUE@efinet_module_LDADD = +@COND_i386_efi_TRUE@efinet_module_LDADD = +@COND_ia64_efi_TRUE@efinet_module_LDADD = +@COND_x86_64_efi_TRUE@efinet_module_LDADD = +@COND_arm64_efi_TRUE@efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm_efi_TRUE@efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ia64_efi_TRUE@efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efinet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_arm64_efi_TRUE@efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm_efi_TRUE@efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ia64_efi_TRUE@efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efinet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_arm64_efi_TRUE@efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm_efi_TRUE@efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ia64_efi_TRUE@efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efinet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_arm64_efi_TRUE@efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm_efi_TRUE@efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ia64_efi_TRUE@efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@efinet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_arm64_efi_TRUE@efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@efinet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@emunet_module_SOURCES = net/drivers/emu/emunet.c ## platform sources +@COND_emu_TRUE@nodist_emunet_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@emunet_module_LDADD = +@COND_emu_TRUE@emunet_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@emunet_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@emunet_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@emunet_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@emunet_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +@COND_i386_efi_TRUE@legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +@COND_i386_pc_TRUE@legacycfg_module_SOURCES = commands/legacycfg.c lib/legacy_parse.c ## platform sources +@COND_i386_xen_TRUE@legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +@COND_x86_64_efi_TRUE@legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +@COND_x86_64_xen_TRUE@legacycfg_module_SOURCES = lib/i386/pc/vesa_modes_table.c commands/legacycfg.c lib/legacy_parse.c ## platform sources +@COND_emu_TRUE@nodist_legacycfg_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_legacycfg_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_legacycfg_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_legacycfg_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_legacycfg_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_legacycfg_module_SOURCES = ## platform nodist sources +@COND_emu_TRUE@legacycfg_module_LDADD = +@COND_i386_efi_TRUE@legacycfg_module_LDADD = +@COND_i386_pc_TRUE@legacycfg_module_LDADD = +@COND_i386_xen_TRUE@legacycfg_module_LDADD = +@COND_x86_64_efi_TRUE@legacycfg_module_LDADD = +@COND_x86_64_xen_TRUE@legacycfg_module_LDADD = +@COND_emu_TRUE@legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacycfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_emu_TRUE@legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacycfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_emu_TRUE@legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacycfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_emu_TRUE@legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@legacycfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_emu_TRUE@legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@legacycfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +syslinuxcfg_module_SOURCES = lib/syslinux_parse.c commands/syslinuxcfg.c ## platform sources +nodist_syslinuxcfg_module_SOURCES = ## platform nodist sources +syslinuxcfg_module_LDADD = +syslinuxcfg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +syslinuxcfg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +syslinuxcfg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +syslinuxcfg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +syslinuxcfg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +test_blockarg_module_SOURCES = tests/test_blockarg.c ## platform sources +nodist_test_blockarg_module_SOURCES = ## platform nodist sources +test_blockarg_module_LDADD = +test_blockarg_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +test_blockarg_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +test_blockarg_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +test_blockarg_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +test_blockarg_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +xzio_module_SOURCES = io/xzio.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c ## platform sources +nodist_xzio_module_SOURCES = ## platform nodist sources +xzio_module_LDADD = +xzio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) -Wno-unreachable-code +xzio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +xzio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed +xzio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +xzio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +lzopio_module_SOURCES = io/lzopio.c lib/minilzo/minilzo.c ## platform sources +nodist_lzopio_module_SOURCES = ## platform nodist sources +lzopio_module_LDADD = +lzopio_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_POSIX) -Wno-undef -Wno-redundant-decls -Wno-error +lzopio_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +lzopio_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H +lzopio_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +lzopio_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +testload_module_SOURCES = commands/testload.c ## platform sources +nodist_testload_module_SOURCES = ## platform nodist sources +testload_module_LDADD = +testload_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +testload_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +testload_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +testload_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +testload_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_i386_efi_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_i386_ieee1275_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_i386_multiboot_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_i386_pc_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_i386_qemu_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_i386_xen_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_x86_64_efi_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_x86_64_xen_TRUE@backtrace_module_SOURCES = lib/i386/backtrace.c lib/backtrace.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_i386_xen_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_backtrace_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@backtrace_module_LDADD = +@COND_i386_efi_TRUE@backtrace_module_LDADD = +@COND_i386_ieee1275_TRUE@backtrace_module_LDADD = +@COND_i386_multiboot_TRUE@backtrace_module_LDADD = +@COND_i386_pc_TRUE@backtrace_module_LDADD = +@COND_i386_qemu_TRUE@backtrace_module_LDADD = +@COND_i386_xen_TRUE@backtrace_module_LDADD = +@COND_x86_64_efi_TRUE@backtrace_module_LDADD = +@COND_x86_64_xen_TRUE@backtrace_module_LDADD = +@COND_i386_coreboot_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_xen_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_xen_TRUE@backtrace_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_xen_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_xen_TRUE@backtrace_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_xen_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_xen_TRUE@backtrace_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_xen_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_xen_TRUE@backtrace_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@backtrace_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@lsapm_module_SOURCES = commands/i386/pc/lsapm.c ## platform sources +@COND_i386_pc_TRUE@nodist_lsapm_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@lsapm_module_LDADD = +@COND_i386_pc_TRUE@lsapm_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@lsapm_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@lsapm_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@lsapm_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@lsapm_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +@COND_i386_efi_TRUE@keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +@COND_i386_ieee1275_TRUE@keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +@COND_i386_multiboot_TRUE@keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +@COND_i386_pc_TRUE@keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +@COND_i386_qemu_TRUE@keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +@COND_x86_64_efi_TRUE@keylayouts_module_SOURCES = commands/keylayouts.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_keylayouts_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_keylayouts_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_keylayouts_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_keylayouts_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_keylayouts_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_keylayouts_module_SOURCES = ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_keylayouts_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@keylayouts_module_LDADD = +@COND_i386_efi_TRUE@keylayouts_module_LDADD = +@COND_i386_ieee1275_TRUE@keylayouts_module_LDADD = +@COND_i386_multiboot_TRUE@keylayouts_module_LDADD = +@COND_i386_pc_TRUE@keylayouts_module_LDADD = +@COND_i386_qemu_TRUE@keylayouts_module_LDADD = +@COND_x86_64_efi_TRUE@keylayouts_module_LDADD = +@COND_i386_coreboot_TRUE@keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_x86_64_efi_TRUE@keylayouts_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_x86_64_efi_TRUE@keylayouts_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_x86_64_efi_TRUE@keylayouts_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_x86_64_efi_TRUE@keylayouts_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@keylayouts_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +priority_queue_module_SOURCES = lib/priority_queue.c ## platform sources +nodist_priority_queue_module_SOURCES = ## platform nodist sources +priority_queue_module_LDADD = +priority_queue_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +priority_queue_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +priority_queue_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +priority_queue_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +priority_queue_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +time_module_SOURCES = commands/time.c ## platform sources +nodist_time_module_SOURCES = ## platform nodist sources +time_module_LDADD = +time_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +time_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +time_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +time_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +time_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo_module_SOURCES = commands/cacheinfo.c ## platform sources +@COND_ENABLE_CACHE_STATS_TRUE@nodist_cacheinfo_module_SOURCES = ## platform nodist sources +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo_module_LDADD = +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime_module_SOURCES = commands/boottime.c ## platform sources +@COND_ENABLE_BOOT_TIME_STATS_TRUE@nodist_boottime_module_SOURCES = ## platform nodist sources +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime_module_LDADD = +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +adler32_module_SOURCES = lib/adler32.c ## platform sources +nodist_adler32_module_SOURCES = ## platform nodist sources +adler32_module_LDADD = +adler32_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +adler32_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +adler32_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +adler32_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +adler32_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +crc64_module_SOURCES = lib/crc64.c ## platform sources +nodist_crc64_module_SOURCES = ## platform nodist sources +crc64_module_LDADD = +crc64_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +crc64_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +crc64_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +crc64_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +crc64_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +mpi_module_SOURCES = lib/libgcrypt-grub/mpi/mpiutil.c lib/libgcrypt-grub/mpi/mpi-bit.c lib/libgcrypt-grub/mpi/mpi-add.c lib/libgcrypt-grub/mpi/mpi-mul.c lib/libgcrypt-grub/mpi/mpi-mod.c lib/libgcrypt-grub/mpi/mpi-gcd.c lib/libgcrypt-grub/mpi/mpi-div.c lib/libgcrypt-grub/mpi/mpi-cmp.c lib/libgcrypt-grub/mpi/mpi-inv.c lib/libgcrypt-grub/mpi/mpi-pow.c lib/libgcrypt-grub/mpi/mpi-mpow.c lib/libgcrypt-grub/mpi/mpih-lshift.c lib/libgcrypt-grub/mpi/mpih-mul.c lib/libgcrypt-grub/mpi/mpih-mul1.c lib/libgcrypt-grub/mpi/mpih-mul2.c lib/libgcrypt-grub/mpi/mpih-mul3.c lib/libgcrypt-grub/mpi/mpih-add1.c lib/libgcrypt-grub/mpi/mpih-sub1.c lib/libgcrypt-grub/mpi/mpih-div.c lib/libgcrypt-grub/mpi/mpicoder.c lib/libgcrypt-grub/mpi/mpih-rshift.c lib/libgcrypt-grub/mpi/mpi-inline.c lib/libgcrypt_wrap/mem.c ## platform sources +nodist_mpi_module_SOURCES = ## platform nodist sources +mpi_module_LDADD = +mpi_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-redundant-decls -Wno-sign-compare +mpi_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +mpi_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +mpi_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +mpi_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +all_video_module_SOURCES = lib/fake_module.c ## platform sources +nodist_all_video_module_SOURCES = ## platform nodist sources +all_video_module_LDADD = +all_video_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +all_video_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +all_video_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +all_video_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +all_video_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +@COND_i386_efi_TRUE@gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +@COND_i386_ieee1275_TRUE@gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +@COND_i386_multiboot_TRUE@gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +@COND_i386_pc_TRUE@gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +@COND_i386_qemu_TRUE@gdb_module_SOURCES = gdb/i386/idt.c gdb/i386/machdep.S gdb/i386/signal.c gdb/cstub.c gdb/gdb.c ## platform sources +@COND_i386_coreboot_TRUE@nodist_gdb_module_SOURCES = ## platform nodist sources +@COND_i386_efi_TRUE@nodist_gdb_module_SOURCES = ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_gdb_module_SOURCES = ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_gdb_module_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@nodist_gdb_module_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_gdb_module_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@gdb_module_LDADD = +@COND_i386_efi_TRUE@gdb_module_LDADD = +@COND_i386_ieee1275_TRUE@gdb_module_LDADD = +@COND_i386_multiboot_TRUE@gdb_module_LDADD = +@COND_i386_pc_TRUE@gdb_module_LDADD = +@COND_i386_qemu_TRUE@gdb_module_LDADD = +@COND_i386_coreboot_TRUE@gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_efi_TRUE@gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_pc_TRUE@gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_qemu_TRUE@gdb_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +@COND_i386_coreboot_TRUE@gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_efi_TRUE@gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_pc_TRUE@gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_qemu_TRUE@gdb_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +@COND_i386_coreboot_TRUE@gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_efi_TRUE@gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_pc_TRUE@gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_qemu_TRUE@gdb_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +@COND_i386_coreboot_TRUE@gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_efi_TRUE@gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_ieee1275_TRUE@gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_multiboot_TRUE@gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_pc_TRUE@gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_qemu_TRUE@gdb_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +@COND_i386_coreboot_TRUE@gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@gdb_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +testspeed_module_SOURCES = commands/testspeed.c ## platform sources +nodist_testspeed_module_SOURCES = ## platform nodist sources +testspeed_module_LDADD = +testspeed_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +testspeed_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +testspeed_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +testspeed_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +testspeed_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +tr_module_SOURCES = commands/tr.c ## platform sources +nodist_tr_module_SOURCES = ## platform nodist sources +tr_module_LDADD = +tr_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +tr_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +tr_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +tr_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +tr_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +progress_module_SOURCES = lib/progress.c ## platform sources +nodist_progress_module_SOURCES = ## platform nodist sources +progress_module_LDADD = +progress_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +progress_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +progress_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +progress_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +progress_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +file_module_SOURCES = commands/file.c commands/file32.c commands/file64.c loader/i386/xen_file.c loader/i386/xen_file32.c loader/i386/xen_file64.c ## platform sources +nodist_file_module_SOURCES = ## platform nodist sources +file_module_LDADD = +file_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) +file_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +file_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) +file_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +file_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_arcfour_module_SOURCES = lib/libgcrypt-grub/cipher/arcfour.c ## platform sources +nodist_gcry_arcfour_module_SOURCES = ## platform nodist sources +gcry_arcfour_module_LDADD = +gcry_arcfour_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_arcfour_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_arcfour_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_arcfour_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_arcfour_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_blowfish_module_SOURCES = lib/libgcrypt-grub/cipher/blowfish.c ## platform sources +nodist_gcry_blowfish_module_SOURCES = ## platform nodist sources +gcry_blowfish_module_LDADD = +gcry_blowfish_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_blowfish_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_blowfish_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_blowfish_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_blowfish_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_camellia_module_SOURCES = lib/libgcrypt-grub/cipher/camellia-glue.c lib/libgcrypt-grub/cipher/camellia.c ## platform sources +nodist_gcry_camellia_module_SOURCES = ## platform nodist sources +gcry_camellia_module_LDADD = +gcry_camellia_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_camellia_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_camellia_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_camellia_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_camellia_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_cast5_module_SOURCES = lib/libgcrypt-grub/cipher/cast5.c ## platform sources +nodist_gcry_cast5_module_SOURCES = ## platform nodist sources +gcry_cast5_module_LDADD = +gcry_cast5_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_cast5_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_cast5_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_cast5_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_cast5_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_crc_module_SOURCES = lib/libgcrypt-grub/cipher/crc.c ## platform sources +nodist_gcry_crc_module_SOURCES = ## platform nodist sources +gcry_crc_module_LDADD = +gcry_crc_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_crc_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_crc_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_crc_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_crc_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_des_module_SOURCES = lib/libgcrypt-grub/cipher/des.c ## platform sources +nodist_gcry_des_module_SOURCES = ## platform nodist sources +gcry_des_module_LDADD = +gcry_des_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_des_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_des_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_des_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_des_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_dsa_module_SOURCES = lib/libgcrypt-grub/cipher/dsa.c ## platform sources +nodist_gcry_dsa_module_SOURCES = ## platform nodist sources +gcry_dsa_module_LDADD = +gcry_dsa_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_dsa_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_dsa_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_dsa_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_dsa_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_idea_module_SOURCES = lib/libgcrypt-grub/cipher/idea.c ## platform sources +nodist_gcry_idea_module_SOURCES = ## platform nodist sources +gcry_idea_module_LDADD = +gcry_idea_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_idea_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_idea_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_idea_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_idea_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_md4_module_SOURCES = lib/libgcrypt-grub/cipher/md4.c ## platform sources +nodist_gcry_md4_module_SOURCES = ## platform nodist sources +gcry_md4_module_LDADD = +gcry_md4_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_md4_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_md4_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_md4_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_md4_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_md5_module_SOURCES = lib/libgcrypt-grub/cipher/md5.c ## platform sources +nodist_gcry_md5_module_SOURCES = ## platform nodist sources +gcry_md5_module_LDADD = +gcry_md5_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_md5_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_md5_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_md5_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_md5_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_rfc2268_module_SOURCES = lib/libgcrypt-grub/cipher/rfc2268.c ## platform sources +nodist_gcry_rfc2268_module_SOURCES = ## platform nodist sources +gcry_rfc2268_module_LDADD = +gcry_rfc2268_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_rfc2268_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rfc2268_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rfc2268_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rfc2268_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_rijndael_module_SOURCES = lib/libgcrypt-grub/cipher/rijndael.c ## platform sources +nodist_gcry_rijndael_module_SOURCES = ## platform nodist sources +gcry_rijndael_module_LDADD = +gcry_rijndael_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_rijndael_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rijndael_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rijndael_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rijndael_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_rmd160_module_SOURCES = lib/libgcrypt-grub/cipher/rmd160.c ## platform sources +nodist_gcry_rmd160_module_SOURCES = ## platform nodist sources +gcry_rmd160_module_LDADD = +gcry_rmd160_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_rmd160_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rmd160_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rmd160_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rmd160_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_rsa_module_SOURCES = lib/libgcrypt-grub/cipher/rsa.c ## platform sources +nodist_gcry_rsa_module_SOURCES = ## platform nodist sources +gcry_rsa_module_LDADD = +gcry_rsa_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_rsa_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_rsa_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_rsa_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_rsa_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_seed_module_SOURCES = lib/libgcrypt-grub/cipher/seed.c ## platform sources +nodist_gcry_seed_module_SOURCES = ## platform nodist sources +gcry_seed_module_LDADD = +gcry_seed_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_seed_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_seed_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_seed_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_seed_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_serpent_module_SOURCES = lib/libgcrypt-grub/cipher/serpent.c ## platform sources +nodist_gcry_serpent_module_SOURCES = ## platform nodist sources +gcry_serpent_module_LDADD = +gcry_serpent_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_serpent_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_serpent_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_serpent_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_serpent_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_sha1_module_SOURCES = lib/libgcrypt-grub/cipher/sha1.c ## platform sources +nodist_gcry_sha1_module_SOURCES = ## platform nodist sources +gcry_sha1_module_LDADD = +gcry_sha1_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_sha1_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_sha1_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_sha1_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_sha1_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_sha256_module_SOURCES = lib/libgcrypt-grub/cipher/sha256.c ## platform sources +nodist_gcry_sha256_module_SOURCES = ## platform nodist sources +gcry_sha256_module_LDADD = +gcry_sha256_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_sha256_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_sha256_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_sha256_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_sha256_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_sha512_module_SOURCES = lib/libgcrypt-grub/cipher/sha512.c ## platform sources +nodist_gcry_sha512_module_SOURCES = ## platform nodist sources +gcry_sha512_module_LDADD = +gcry_sha512_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_sha512_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_sha512_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_sha512_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_sha512_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_tiger_module_SOURCES = lib/libgcrypt-grub/cipher/tiger.c ## platform sources +nodist_gcry_tiger_module_SOURCES = ## platform nodist sources +gcry_tiger_module_LDADD = +gcry_tiger_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) -Wno-cast-align +gcry_tiger_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_tiger_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_tiger_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_tiger_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_twofish_module_SOURCES = lib/libgcrypt-grub/cipher/twofish.c ## platform sources +nodist_gcry_twofish_module_SOURCES = ## platform nodist sources +gcry_twofish_module_LDADD = +gcry_twofish_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_twofish_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_twofish_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_twofish_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_twofish_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +gcry_whirlpool_module_SOURCES = lib/libgcrypt-grub/cipher/whirlpool.c ## platform sources +nodist_gcry_whirlpool_module_SOURCES = ## platform nodist sources +gcry_whirlpool_module_LDADD = +gcry_whirlpool_module_CFLAGS = $(AM_CFLAGS) $(CFLAGS_MODULE) $(CFLAGS_GCRY) +gcry_whirlpool_module_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MODULE) +gcry_whirlpool_module_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_MODULE) $(CPPFLAGS_GCRY) +gcry_whirlpool_module_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_MODULE) +gcry_whirlpool_module_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm64_efi_TRUE@kernel_exec_SOURCES = kern/arm64/efi/startup.S \ +@COND_arm64_efi_TRUE@ kern/arm64/efi/init.c kern/efi/fdt.c \ +@COND_arm64_efi_TRUE@ kern/arm64/cache.c \ +@COND_arm64_efi_TRUE@ kern/arm64/cache_flush.S kern/arm64/dl.c \ +@COND_arm64_efi_TRUE@ kern/arm64/dl_helper.c disk/efi/efidisk.c \ +@COND_arm64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ +@COND_arm64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ +@COND_arm64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ +@COND_arm64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_arm64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_arm64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_arm64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_arm64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_arm64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_arm64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_arm64_efi_TRUE@ kern/rescue_reader.c kern/term.c +@COND_arm_efi_TRUE@kernel_exec_SOURCES = kern/arm/efi/startup.S \ +@COND_arm_efi_TRUE@ kern/arm/efi/init.c kern/arm/efi/misc.c \ +@COND_arm_efi_TRUE@ kern/efi/fdt.c kern/arm/dl.c \ +@COND_arm_efi_TRUE@ kern/arm/dl_helper.c kern/arm/cache_armv6.S \ +@COND_arm_efi_TRUE@ kern/arm/cache_armv7.S kern/arm/cache.c \ +@COND_arm_efi_TRUE@ kern/arm/compiler-rt.S lib/division.c \ +@COND_arm_efi_TRUE@ disk/efi/efidisk.c kern/efi/efi.c \ +@COND_arm_efi_TRUE@ kern/efi/init.c kern/efi/mm.c \ +@COND_arm_efi_TRUE@ term/efi/console.c kern/acpi.c \ +@COND_arm_efi_TRUE@ kern/efi/acpi.c kern/compiler-rt.c \ +@COND_arm_efi_TRUE@ kern/mm.c kern/time.c \ +@COND_arm_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_arm_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_arm_efi_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +@COND_arm_efi_TRUE@ kern/fs.c kern/list.c kern/main.c \ +@COND_arm_efi_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ +@COND_arm_efi_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +@COND_arm_efi_TRUE@ kern/term.c +@COND_arm_uboot_TRUE@kernel_exec_SOURCES = kern/arm/uboot/startup.S \ +@COND_arm_uboot_TRUE@ disk/uboot/ubootdisk.c kern/uboot/uboot.c \ +@COND_arm_uboot_TRUE@ kern/uboot/init.c kern/uboot/hw.c \ +@COND_arm_uboot_TRUE@ term/uboot/console.c kern/arm/dl.c \ +@COND_arm_uboot_TRUE@ kern/arm/dl_helper.c \ +@COND_arm_uboot_TRUE@ kern/arm/cache_armv6.S \ +@COND_arm_uboot_TRUE@ kern/arm/cache_armv7.S kern/arm/cache.c \ +@COND_arm_uboot_TRUE@ kern/arm/compiler-rt.S lib/division.c \ +@COND_arm_uboot_TRUE@ term/terminfo.c term/tparm.c \ +@COND_arm_uboot_TRUE@ commands/extcmd.c lib/arg.c \ +@COND_arm_uboot_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_arm_uboot_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_arm_uboot_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_arm_uboot_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_arm_uboot_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_arm_uboot_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_arm_uboot_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_arm_uboot_TRUE@ kern/rescue_reader.c kern/term.c +@COND_emu_TRUE@kernel_exec_SOURCES = disk/host.c kern/emu/cache_s.S \ +@COND_emu_TRUE@ kern/emu/hostdisk.c osdep/unix/hostdisk.c \ +@COND_emu_TRUE@ osdep/exec.c osdep/devmapper/hostdisk.c \ +@COND_emu_TRUE@ osdep/hostdisk.c kern/emu/hostfs.c \ +@COND_emu_TRUE@ kern/emu/main.c kern/emu/argp_common.c \ +@COND_emu_TRUE@ kern/emu/misc.c kern/emu/mm.c kern/emu/time.c \ +@COND_emu_TRUE@ kern/emu/cache.c osdep/emuconsole.c osdep/dl.c \ +@COND_emu_TRUE@ osdep/sleep.c osdep/init.c osdep/emunet.c \ +@COND_emu_TRUE@ osdep/cputime.c term/terminfo.c term/tparm.c \ +@COND_emu_TRUE@ commands/extcmd.c lib/arg.c kern/command.c \ +@COND_emu_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_emu_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +@COND_emu_TRUE@ kern/fs.c kern/list.c kern/main.c kern/misc.c \ +@COND_emu_TRUE@ kern/parser.c kern/partition.c \ +@COND_emu_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +@COND_emu_TRUE@ kern/term.c +@COND_i386_coreboot_TRUE@kernel_exec_SOURCES = \ +@COND_i386_coreboot_TRUE@ kern/i386/coreboot/startup.S \ +@COND_i386_coreboot_TRUE@ kern/i386/coreboot/init.c \ +@COND_i386_coreboot_TRUE@ video/i386/coreboot/cbfb.c \ +@COND_i386_coreboot_TRUE@ kern/i386/pc/acpi.c kern/acpi.c \ +@COND_i386_coreboot_TRUE@ kern/i386/tsc_pmtimer.c \ +@COND_i386_coreboot_TRUE@ kern/i386/coreboot/mmap.c \ +@COND_i386_coreboot_TRUE@ kern/i386/coreboot/cbtable.c \ +@COND_i386_coreboot_TRUE@ term/gfxterm.c font/font.c \ +@COND_i386_coreboot_TRUE@ font/font_cmd.c io/bufio.c \ +@COND_i386_coreboot_TRUE@ video/fb/fbblit.c video/fb/fbfill.c \ +@COND_i386_coreboot_TRUE@ video/fb/fbutil.c video/fb/video_fb.c \ +@COND_i386_coreboot_TRUE@ video/video.c term/i386/pc/vga_text.c \ +@COND_i386_coreboot_TRUE@ kern/i386/dl.c kern/i386/tsc.c \ +@COND_i386_coreboot_TRUE@ kern/i386/tsc_pit.c \ +@COND_i386_coreboot_TRUE@ kern/compiler-rt.c kern/mm.c \ +@COND_i386_coreboot_TRUE@ kern/time.c kern/generic/millisleep.c \ +@COND_i386_coreboot_TRUE@ kern/command.c kern/corecmd.c \ +@COND_i386_coreboot_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +@COND_i386_coreboot_TRUE@ kern/env.c kern/err.c kern/file.c \ +@COND_i386_coreboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ +@COND_i386_coreboot_TRUE@ kern/misc.c kern/parser.c \ +@COND_i386_coreboot_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_i386_coreboot_TRUE@ kern/rescue_reader.c kern/term.c +@COND_i386_efi_TRUE@kernel_exec_SOURCES = kern/i386/efi/startup.S \ +@COND_i386_efi_TRUE@ kern/i386/efi/tsc.c \ +@COND_i386_efi_TRUE@ kern/i386/tsc_pmtimer.c \ +@COND_i386_efi_TRUE@ kern/i386/efi/init.c bus/pci.c \ +@COND_i386_efi_TRUE@ disk/efi/efidisk.c kern/efi/efi.c \ +@COND_i386_efi_TRUE@ kern/efi/init.c kern/efi/mm.c \ +@COND_i386_efi_TRUE@ term/efi/console.c kern/acpi.c \ +@COND_i386_efi_TRUE@ kern/efi/acpi.c kern/i386/dl.c \ +@COND_i386_efi_TRUE@ kern/i386/tsc.c kern/i386/tsc_pit.c \ +@COND_i386_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_i386_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_i386_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_i386_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_i386_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_i386_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_i386_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_i386_efi_TRUE@ kern/rescue_reader.c kern/term.c +@COND_i386_ieee1275_TRUE@kernel_exec_SOURCES = \ +@COND_i386_ieee1275_TRUE@ kern/i386/ieee1275/startup.S \ +@COND_i386_ieee1275_TRUE@ disk/ieee1275/ofdisk.c \ +@COND_i386_ieee1275_TRUE@ kern/ieee1275/cmain.c \ +@COND_i386_ieee1275_TRUE@ kern/ieee1275/ieee1275.c \ +@COND_i386_ieee1275_TRUE@ kern/ieee1275/mmap.c \ +@COND_i386_ieee1275_TRUE@ kern/ieee1275/openfw.c \ +@COND_i386_ieee1275_TRUE@ term/ieee1275/console.c \ +@COND_i386_ieee1275_TRUE@ kern/ieee1275/init.c kern/i386/dl.c \ +@COND_i386_ieee1275_TRUE@ kern/i386/tsc.c kern/i386/tsc_pit.c \ +@COND_i386_ieee1275_TRUE@ term/terminfo.c term/tparm.c \ +@COND_i386_ieee1275_TRUE@ commands/extcmd.c lib/arg.c \ +@COND_i386_ieee1275_TRUE@ kern/compiler-rt.c kern/mm.c \ +@COND_i386_ieee1275_TRUE@ kern/time.c kern/generic/millisleep.c \ +@COND_i386_ieee1275_TRUE@ kern/command.c kern/corecmd.c \ +@COND_i386_ieee1275_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +@COND_i386_ieee1275_TRUE@ kern/env.c kern/err.c kern/file.c \ +@COND_i386_ieee1275_TRUE@ kern/fs.c kern/list.c kern/main.c \ +@COND_i386_ieee1275_TRUE@ kern/misc.c kern/parser.c \ +@COND_i386_ieee1275_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_i386_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c +@COND_i386_multiboot_TRUE@kernel_exec_SOURCES = \ +@COND_i386_multiboot_TRUE@ kern/i386/coreboot/startup.S \ +@COND_i386_multiboot_TRUE@ kern/i386/coreboot/init.c \ +@COND_i386_multiboot_TRUE@ kern/i386/pc/acpi.c kern/acpi.c \ +@COND_i386_multiboot_TRUE@ kern/i386/multiboot_mmap.c \ +@COND_i386_multiboot_TRUE@ term/i386/pc/vga_text.c \ +@COND_i386_multiboot_TRUE@ kern/i386/dl.c kern/i386/tsc.c \ +@COND_i386_multiboot_TRUE@ kern/i386/tsc_pit.c \ +@COND_i386_multiboot_TRUE@ kern/compiler-rt.c kern/mm.c \ +@COND_i386_multiboot_TRUE@ kern/time.c \ +@COND_i386_multiboot_TRUE@ kern/generic/millisleep.c \ +@COND_i386_multiboot_TRUE@ kern/command.c kern/corecmd.c \ +@COND_i386_multiboot_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +@COND_i386_multiboot_TRUE@ kern/env.c kern/err.c kern/file.c \ +@COND_i386_multiboot_TRUE@ kern/fs.c kern/list.c kern/main.c \ +@COND_i386_multiboot_TRUE@ kern/misc.c kern/parser.c \ +@COND_i386_multiboot_TRUE@ kern/partition.c \ +@COND_i386_multiboot_TRUE@ kern/rescue_parser.c \ +@COND_i386_multiboot_TRUE@ kern/rescue_reader.c kern/term.c +@COND_i386_pc_TRUE@kernel_exec_SOURCES = kern/i386/pc/startup.S \ +@COND_i386_pc_TRUE@ kern/i386/pc/init.c kern/i386/pc/mmap.c \ +@COND_i386_pc_TRUE@ term/i386/pc/console.c kern/i386/dl.c \ +@COND_i386_pc_TRUE@ kern/i386/tsc.c kern/i386/tsc_pit.c \ +@COND_i386_pc_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_i386_pc_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_i386_pc_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_i386_pc_TRUE@ kern/dl.c kern/env.c kern/err.c kern/file.c \ +@COND_i386_pc_TRUE@ kern/fs.c kern/list.c kern/main.c \ +@COND_i386_pc_TRUE@ kern/misc.c kern/parser.c kern/partition.c \ +@COND_i386_pc_TRUE@ kern/rescue_parser.c kern/rescue_reader.c \ +@COND_i386_pc_TRUE@ kern/term.c +@COND_i386_qemu_TRUE@kernel_exec_SOURCES = kern/i386/qemu/startup.S \ +@COND_i386_qemu_TRUE@ kern/i386/qemu/init.c bus/pci.c \ +@COND_i386_qemu_TRUE@ kern/vga_init.c kern/i386/qemu/mmap.c \ +@COND_i386_qemu_TRUE@ term/i386/pc/vga_text.c kern/i386/dl.c \ +@COND_i386_qemu_TRUE@ kern/i386/tsc.c kern/i386/tsc_pit.c \ +@COND_i386_qemu_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_i386_qemu_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_i386_qemu_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_i386_qemu_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_i386_qemu_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_i386_qemu_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_i386_qemu_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_i386_qemu_TRUE@ kern/rescue_reader.c kern/term.c +@COND_i386_xen_TRUE@kernel_exec_SOURCES = kern/i386/xen/startup.S \ +@COND_i386_xen_TRUE@ kern/i386/dl.c kern/i386/xen/hypercall.S \ +@COND_i386_xen_TRUE@ kern/i386/tsc.c kern/i386/xen/tsc.c \ +@COND_i386_xen_TRUE@ kern/xen/init.c term/xen/console.c \ +@COND_i386_xen_TRUE@ disk/xen/xendisk.c commands/boot.c \ +@COND_i386_xen_TRUE@ term/terminfo.c term/tparm.c \ +@COND_i386_xen_TRUE@ commands/extcmd.c lib/arg.c \ +@COND_i386_xen_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_i386_xen_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_i386_xen_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_i386_xen_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_i386_xen_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_i386_xen_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_i386_xen_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_i386_xen_TRUE@ kern/rescue_reader.c kern/term.c +@COND_ia64_efi_TRUE@kernel_exec_SOURCES = kern/ia64/efi/startup.S \ +@COND_ia64_efi_TRUE@ kern/ia64/efi/init.c kern/ia64/dl.c \ +@COND_ia64_efi_TRUE@ kern/ia64/dl_helper.c kern/ia64/cache.c \ +@COND_ia64_efi_TRUE@ lib/division.c disk/efi/efidisk.c \ +@COND_ia64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ +@COND_ia64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ +@COND_ia64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ +@COND_ia64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_ia64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_ia64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_ia64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_ia64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_ia64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_ia64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_ia64_efi_TRUE@ kern/rescue_reader.c kern/term.c +@COND_mips_arc_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ +@COND_mips_arc_TRUE@ kern/mips/arc/init.c term/arc/console.c \ +@COND_mips_arc_TRUE@ disk/arc/arcdisk.c \ +@COND_mips_arc_TRUE@ kern/generic/rtc_get_time_ms.c \ +@COND_mips_arc_TRUE@ kern/mips/cache.S kern/mips/dl.c \ +@COND_mips_arc_TRUE@ kern/mips/init.c term/terminfo.c \ +@COND_mips_arc_TRUE@ term/tparm.c commands/extcmd.c lib/arg.c \ +@COND_mips_arc_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_mips_arc_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_mips_arc_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_mips_arc_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_mips_arc_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_mips_arc_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_mips_arc_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_mips_arc_TRUE@ kern/rescue_reader.c kern/term.c +@COND_mips_loongson_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ +@COND_mips_loongson_TRUE@ term/ns8250.c bus/bonito.c \ +@COND_mips_loongson_TRUE@ bus/cs5536.c bus/pci.c \ +@COND_mips_loongson_TRUE@ kern/mips/loongson/init.c \ +@COND_mips_loongson_TRUE@ term/at_keyboard.c commands/boot.c \ +@COND_mips_loongson_TRUE@ term/serial.c video/sm712.c \ +@COND_mips_loongson_TRUE@ video/sis315pro.c \ +@COND_mips_loongson_TRUE@ video/radeon_fuloong2e.c \ +@COND_mips_loongson_TRUE@ video/radeon_yeeloong3a.c \ +@COND_mips_loongson_TRUE@ commands/keylayouts.c term/gfxterm.c \ +@COND_mips_loongson_TRUE@ font/font.c font/font_cmd.c \ +@COND_mips_loongson_TRUE@ io/bufio.c video/fb/fbblit.c \ +@COND_mips_loongson_TRUE@ video/fb/fbfill.c video/fb/fbutil.c \ +@COND_mips_loongson_TRUE@ video/fb/video_fb.c video/video.c \ +@COND_mips_loongson_TRUE@ kern/generic/rtc_get_time_ms.c \ +@COND_mips_loongson_TRUE@ kern/mips/cache.S kern/mips/dl.c \ +@COND_mips_loongson_TRUE@ kern/mips/init.c term/terminfo.c \ +@COND_mips_loongson_TRUE@ term/tparm.c commands/extcmd.c \ +@COND_mips_loongson_TRUE@ lib/arg.c kern/compiler-rt.c \ +@COND_mips_loongson_TRUE@ kern/mm.c kern/time.c \ +@COND_mips_loongson_TRUE@ kern/generic/millisleep.c \ +@COND_mips_loongson_TRUE@ kern/command.c kern/corecmd.c \ +@COND_mips_loongson_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +@COND_mips_loongson_TRUE@ kern/env.c kern/err.c kern/file.c \ +@COND_mips_loongson_TRUE@ kern/fs.c kern/list.c kern/main.c \ +@COND_mips_loongson_TRUE@ kern/misc.c kern/parser.c \ +@COND_mips_loongson_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_mips_loongson_TRUE@ kern/rescue_reader.c kern/term.c +@COND_mips_qemu_mips_TRUE@kernel_exec_SOURCES = kern/mips/startup.S \ +@COND_mips_qemu_mips_TRUE@ kern/mips/qemu_mips/init.c \ +@COND_mips_qemu_mips_TRUE@ term/ns8250.c term/serial.c \ +@COND_mips_qemu_mips_TRUE@ term/at_keyboard.c commands/boot.c \ +@COND_mips_qemu_mips_TRUE@ commands/keylayouts.c \ +@COND_mips_qemu_mips_TRUE@ term/i386/pc/vga_text.c \ +@COND_mips_qemu_mips_TRUE@ kern/vga_init.c \ +@COND_mips_qemu_mips_TRUE@ kern/generic/rtc_get_time_ms.c \ +@COND_mips_qemu_mips_TRUE@ kern/mips/cache.S kern/mips/dl.c \ +@COND_mips_qemu_mips_TRUE@ kern/mips/init.c term/terminfo.c \ +@COND_mips_qemu_mips_TRUE@ term/tparm.c commands/extcmd.c \ +@COND_mips_qemu_mips_TRUE@ lib/arg.c kern/compiler-rt.c \ +@COND_mips_qemu_mips_TRUE@ kern/mm.c kern/time.c \ +@COND_mips_qemu_mips_TRUE@ kern/generic/millisleep.c \ +@COND_mips_qemu_mips_TRUE@ kern/command.c kern/corecmd.c \ +@COND_mips_qemu_mips_TRUE@ kern/device.c kern/disk.c kern/dl.c \ +@COND_mips_qemu_mips_TRUE@ kern/env.c kern/err.c kern/file.c \ +@COND_mips_qemu_mips_TRUE@ kern/fs.c kern/list.c kern/main.c \ +@COND_mips_qemu_mips_TRUE@ kern/misc.c kern/parser.c \ +@COND_mips_qemu_mips_TRUE@ kern/partition.c \ +@COND_mips_qemu_mips_TRUE@ kern/rescue_parser.c \ +@COND_mips_qemu_mips_TRUE@ kern/rescue_reader.c kern/term.c +@COND_powerpc_ieee1275_TRUE@kernel_exec_SOURCES = \ +@COND_powerpc_ieee1275_TRUE@ kern/powerpc/ieee1275/startup.S \ +@COND_powerpc_ieee1275_TRUE@ kern/powerpc/cache.S \ +@COND_powerpc_ieee1275_TRUE@ kern/powerpc/dl.c \ +@COND_powerpc_ieee1275_TRUE@ kern/powerpc/compiler-rt.S \ +@COND_powerpc_ieee1275_TRUE@ disk/ieee1275/ofdisk.c \ +@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/cmain.c \ +@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/ieee1275.c \ +@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/mmap.c \ +@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/openfw.c \ +@COND_powerpc_ieee1275_TRUE@ term/ieee1275/console.c \ +@COND_powerpc_ieee1275_TRUE@ kern/ieee1275/init.c \ +@COND_powerpc_ieee1275_TRUE@ term/terminfo.c term/tparm.c \ +@COND_powerpc_ieee1275_TRUE@ commands/extcmd.c lib/arg.c \ +@COND_powerpc_ieee1275_TRUE@ kern/compiler-rt.c kern/mm.c \ +@COND_powerpc_ieee1275_TRUE@ kern/time.c \ +@COND_powerpc_ieee1275_TRUE@ kern/generic/millisleep.c \ +@COND_powerpc_ieee1275_TRUE@ kern/command.c kern/corecmd.c \ +@COND_powerpc_ieee1275_TRUE@ kern/device.c kern/disk.c \ +@COND_powerpc_ieee1275_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_powerpc_ieee1275_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_powerpc_ieee1275_TRUE@ kern/main.c kern/misc.c \ +@COND_powerpc_ieee1275_TRUE@ kern/parser.c kern/partition.c \ +@COND_powerpc_ieee1275_TRUE@ kern/rescue_parser.c \ +@COND_powerpc_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c +@COND_sparc64_ieee1275_TRUE@kernel_exec_SOURCES = \ +@COND_sparc64_ieee1275_TRUE@ kern/sparc64/ieee1275/crt0.S \ +@COND_sparc64_ieee1275_TRUE@ kern/sparc64/cache.S \ +@COND_sparc64_ieee1275_TRUE@ kern/sparc64/dl.c \ +@COND_sparc64_ieee1275_TRUE@ kern/sparc64/ieee1275/ieee1275.c \ +@COND_sparc64_ieee1275_TRUE@ disk/ieee1275/ofdisk.c \ +@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/cmain.c \ +@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/ieee1275.c \ +@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/mmap.c \ +@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/openfw.c \ +@COND_sparc64_ieee1275_TRUE@ term/ieee1275/console.c \ +@COND_sparc64_ieee1275_TRUE@ kern/ieee1275/init.c \ +@COND_sparc64_ieee1275_TRUE@ term/terminfo.c term/tparm.c \ +@COND_sparc64_ieee1275_TRUE@ commands/extcmd.c lib/arg.c \ +@COND_sparc64_ieee1275_TRUE@ kern/compiler-rt.c kern/mm.c \ +@COND_sparc64_ieee1275_TRUE@ kern/time.c \ +@COND_sparc64_ieee1275_TRUE@ kern/generic/millisleep.c \ +@COND_sparc64_ieee1275_TRUE@ kern/command.c kern/corecmd.c \ +@COND_sparc64_ieee1275_TRUE@ kern/device.c kern/disk.c \ +@COND_sparc64_ieee1275_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_sparc64_ieee1275_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_sparc64_ieee1275_TRUE@ kern/main.c kern/misc.c \ +@COND_sparc64_ieee1275_TRUE@ kern/parser.c kern/partition.c \ +@COND_sparc64_ieee1275_TRUE@ kern/rescue_parser.c \ +@COND_sparc64_ieee1275_TRUE@ kern/rescue_reader.c kern/term.c +@COND_x86_64_efi_TRUE@kernel_exec_SOURCES = kern/x86_64/efi/startup.S \ +@COND_x86_64_efi_TRUE@ kern/i386/efi/tsc.c \ +@COND_x86_64_efi_TRUE@ kern/i386/tsc_pmtimer.c \ +@COND_x86_64_efi_TRUE@ kern/x86_64/efi/callwrap.S \ +@COND_x86_64_efi_TRUE@ kern/i386/efi/init.c bus/pci.c \ +@COND_x86_64_efi_TRUE@ kern/x86_64/dl.c disk/efi/efidisk.c \ +@COND_x86_64_efi_TRUE@ kern/efi/efi.c kern/efi/init.c \ +@COND_x86_64_efi_TRUE@ kern/efi/mm.c term/efi/console.c \ +@COND_x86_64_efi_TRUE@ kern/acpi.c kern/efi/acpi.c \ +@COND_x86_64_efi_TRUE@ kern/i386/tsc.c kern/i386/tsc_pit.c \ +@COND_x86_64_efi_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_x86_64_efi_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_x86_64_efi_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_x86_64_efi_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_x86_64_efi_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_x86_64_efi_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_x86_64_efi_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_x86_64_efi_TRUE@ kern/rescue_reader.c kern/term.c +@COND_x86_64_xen_TRUE@kernel_exec_SOURCES = kern/x86_64/xen/startup.S \ +@COND_x86_64_xen_TRUE@ kern/x86_64/dl.c \ +@COND_x86_64_xen_TRUE@ kern/x86_64/xen/hypercall.S \ +@COND_x86_64_xen_TRUE@ kern/i386/tsc.c kern/i386/xen/tsc.c \ +@COND_x86_64_xen_TRUE@ kern/xen/init.c term/xen/console.c \ +@COND_x86_64_xen_TRUE@ disk/xen/xendisk.c commands/boot.c \ +@COND_x86_64_xen_TRUE@ term/terminfo.c term/tparm.c \ +@COND_x86_64_xen_TRUE@ commands/extcmd.c lib/arg.c \ +@COND_x86_64_xen_TRUE@ kern/compiler-rt.c kern/mm.c kern/time.c \ +@COND_x86_64_xen_TRUE@ kern/generic/millisleep.c kern/command.c \ +@COND_x86_64_xen_TRUE@ kern/corecmd.c kern/device.c kern/disk.c \ +@COND_x86_64_xen_TRUE@ kern/dl.c kern/env.c kern/err.c \ +@COND_x86_64_xen_TRUE@ kern/file.c kern/fs.c kern/list.c \ +@COND_x86_64_xen_TRUE@ kern/main.c kern/misc.c kern/parser.c \ +@COND_x86_64_xen_TRUE@ kern/partition.c kern/rescue_parser.c \ +@COND_x86_64_xen_TRUE@ kern/rescue_reader.c kern/term.c +@COND_arm64_efi_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_arm_efi_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_arm_uboot_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_emu_TRUE@nodist_kernel_exec_SOURCES = ## platform nodist sources +@COND_i386_coreboot_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_i386_efi_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_i386_ieee1275_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_i386_multiboot_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_i386_pc_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_i386_xen_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_ia64_efi_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_mips_arc_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_powerpc_ieee1275_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_x86_64_efi_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_x86_64_xen_TRUE@nodist_kernel_exec_SOURCES = symlist.c ## platform nodist sources +@COND_arm64_efi_TRUE@kernel_exec_LDADD = +@COND_arm_efi_TRUE@kernel_exec_LDADD = +@COND_arm_uboot_TRUE@kernel_exec_LDADD = +@COND_emu_TRUE@kernel_exec_LDADD = +@COND_i386_coreboot_TRUE@kernel_exec_LDADD = +@COND_i386_efi_TRUE@kernel_exec_LDADD = +@COND_i386_ieee1275_TRUE@kernel_exec_LDADD = +@COND_i386_multiboot_TRUE@kernel_exec_LDADD = +@COND_i386_pc_TRUE@kernel_exec_LDADD = +@COND_i386_qemu_TRUE@kernel_exec_LDADD = +@COND_i386_xen_TRUE@kernel_exec_LDADD = +@COND_ia64_efi_TRUE@kernel_exec_LDADD = +@COND_mips_arc_TRUE@kernel_exec_LDADD = +@COND_mips_loongson_TRUE@kernel_exec_LDADD = +@COND_mips_qemu_mips_TRUE@kernel_exec_LDADD = +@COND_powerpc_ieee1275_TRUE@kernel_exec_LDADD = +@COND_sparc64_ieee1275_TRUE@kernel_exec_LDADD = +@COND_x86_64_efi_TRUE@kernel_exec_LDADD = +@COND_x86_64_xen_TRUE@kernel_exec_LDADD = +@COND_arm64_efi_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_arm_efi_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_arm_uboot_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_emu_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) $(CFLAGS_GNULIB) +@COND_i386_coreboot_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_i386_efi_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_i386_ieee1275_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_i386_multiboot_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_i386_pc_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_i386_qemu_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_i386_xen_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_ia64_efi_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) -fno-builtin -fpic -minline-int-divide-max-throughput +@COND_mips_arc_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_mips_loongson_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_mips_qemu_mips_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_powerpc_ieee1275_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_sparc64_ieee1275_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_x86_64_efi_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_x86_64_xen_TRUE@kernel_exec_CFLAGS = $(AM_CFLAGS) $(CFLAGS_KERNEL) +@COND_arm64_efi_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +@COND_arm_efi_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +@COND_arm_uboot_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +@COND_emu_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +@COND_i386_coreboot_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +@COND_i386_efi_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +@COND_i386_ieee1275_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x10000 +@COND_i386_multiboot_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +@COND_i386_pc_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x9000 +@COND_i386_qemu_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +@COND_i386_xen_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0 +@COND_ia64_efi_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +@COND_mips_arc_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,$(TARGET_LINK_ADDR) +@COND_mips_loongson_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x80200000 +@COND_mips_qemu_mips_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x80200000 +@COND_powerpc_ieee1275_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x200000 +@COND_sparc64_ieee1275_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-Ttext,0x4400 +@COND_x86_64_efi_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) -Wl,-r,-d +@COND_x86_64_xen_TRUE@kernel_exec_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_KERNEL) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0 +@COND_arm64_efi_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_arm_efi_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_arm_uboot_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_emu_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS_GNULIB) +@COND_i386_coreboot_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_i386_efi_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_i386_ieee1275_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_i386_multiboot_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_i386_pc_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_i386_qemu_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) +@COND_i386_xen_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_ia64_efi_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_mips_arc_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) -DGRUB_DECOMPRESSOR_LINK_ADDR=$(TARGET_DECOMPRESSOR_LINK_ADDR) +@COND_mips_loongson_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_mips_qemu_mips_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_powerpc_ieee1275_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_sparc64_ieee1275_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_x86_64_efi_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_x86_64_xen_TRUE@kernel_exec_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) +@COND_arm64_efi_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_arm_efi_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_arm_uboot_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_emu_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_i386_coreboot_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_i386_efi_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_i386_ieee1275_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_i386_multiboot_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_i386_pc_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_i386_qemu_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_i386_xen_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_ia64_efi_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_mips_arc_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_mips_loongson_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_mips_qemu_mips_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_powerpc_ieee1275_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_sparc64_ieee1275_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_x86_64_efi_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_x86_64_xen_TRUE@kernel_exec_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) +@COND_arm64_efi_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame +@COND_arm_efi_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +@COND_arm_uboot_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +@COND_emu_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_i386_coreboot_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_i386_efi_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +@COND_i386_ieee1275_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_i386_multiboot_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_i386_pc_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_i386_qemu_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_i386_xen_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_ia64_efi_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +@COND_mips_arc_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_mips_loongson_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_mips_qemu_mips_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_powerpc_ieee1275_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_sparc64_ieee1275_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_x86_64_efi_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) --strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version +@COND_x86_64_xen_TRUE@kernel_exec_STRIPFLAGS = $(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) +@COND_arm64_efi_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_efi_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_arm_uboot_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_emu_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_coreboot_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_efi_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_ieee1275_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_multiboot_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_qemu_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_xen_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_ia64_efi_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_arc_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_loongson_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_mips_qemu_mips_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_powerpc_ieee1275_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_sparc64_ieee1275_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_efi_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_x86_64_xen_TRUE@kernel_exec_DEPENDENCIES = $(TARGET_OBJ2ELF) +@COND_i386_pc_TRUE@boot_image_SOURCES = boot/i386/pc/boot.S +@COND_i386_qemu_TRUE@boot_image_SOURCES = boot/i386/qemu/boot.S +@COND_sparc64_ieee1275_TRUE@boot_image_SOURCES = boot/sparc64/ieee1275/boot.S +@COND_i386_pc_TRUE@nodist_boot_image_SOURCES = ## platform nodist sources +@COND_i386_qemu_TRUE@nodist_boot_image_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_boot_image_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@boot_image_LDADD = +@COND_i386_qemu_TRUE@boot_image_LDADD = +@COND_sparc64_ieee1275_TRUE@boot_image_LDADD = +@COND_i386_pc_TRUE@boot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_qemu_TRUE@boot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@boot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_pc_TRUE@boot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +@COND_i386_qemu_TRUE@boot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR) +@COND_sparc64_ieee1275_TRUE@boot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext=0x4000 +@COND_i386_pc_TRUE@boot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_i386_qemu_TRUE@boot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@boot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_i386_pc_TRUE@boot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_qemu_TRUE@boot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) +@COND_sparc64_ieee1275_TRUE@boot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_pc_TRUE@boot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_i386_qemu_TRUE@boot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_sparc64_ieee1275_TRUE@boot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O a.out-sunos-big +@COND_i386_pc_TRUE@boot_hybrid_image_SOURCES = boot/i386/pc/boot.S +@COND_i386_pc_TRUE@nodist_boot_hybrid_image_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@boot_hybrid_image_LDADD = +@COND_i386_pc_TRUE@boot_hybrid_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_pc_TRUE@boot_hybrid_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +@COND_i386_pc_TRUE@boot_hybrid_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DHYBRID_BOOT=1 +@COND_i386_pc_TRUE@boot_hybrid_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_pc_TRUE@boot_hybrid_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_i386_pc_TRUE@cdboot_image_SOURCES = boot/i386/pc/cdboot.S +@COND_sparc64_ieee1275_TRUE@cdboot_image_SOURCES = boot/sparc64/ieee1275/boot.S +@COND_i386_pc_TRUE@nodist_cdboot_image_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_cdboot_image_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@cdboot_image_LDADD = +@COND_sparc64_ieee1275_TRUE@cdboot_image_LDADD = +@COND_i386_pc_TRUE@cdboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@cdboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_pc_TRUE@cdboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +@COND_sparc64_ieee1275_TRUE@cdboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext=0x4000 +@COND_i386_pc_TRUE@cdboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@cdboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DCDBOOT=1 +@COND_i386_pc_TRUE@cdboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@cdboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_pc_TRUE@cdboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_sparc64_ieee1275_TRUE@cdboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O a.out-sunos-big +@COND_i386_pc_TRUE@pxeboot_image_SOURCES = boot/i386/pc/pxeboot.S +@COND_i386_pc_TRUE@nodist_pxeboot_image_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@pxeboot_image_LDADD = +@COND_i386_pc_TRUE@pxeboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_pc_TRUE@pxeboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x7C00 +@COND_i386_pc_TRUE@pxeboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_i386_pc_TRUE@pxeboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_pc_TRUE@pxeboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_i386_pc_TRUE@diskboot_image_SOURCES = boot/i386/pc/diskboot.S +@COND_sparc64_ieee1275_TRUE@diskboot_image_SOURCES = boot/sparc64/ieee1275/diskboot.S +@COND_i386_pc_TRUE@nodist_diskboot_image_SOURCES = ## platform nodist sources +@COND_sparc64_ieee1275_TRUE@nodist_diskboot_image_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@diskboot_image_LDADD = +@COND_sparc64_ieee1275_TRUE@diskboot_image_LDADD = +@COND_i386_pc_TRUE@diskboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@diskboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_pc_TRUE@diskboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8000 +@COND_sparc64_ieee1275_TRUE@diskboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext=0x4200 +@COND_i386_pc_TRUE@diskboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@diskboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_i386_pc_TRUE@diskboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_sparc64_ieee1275_TRUE@diskboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_pc_TRUE@diskboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_sparc64_ieee1275_TRUE@diskboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_i386_pc_TRUE@lnxboot_image_SOURCES = boot/i386/pc/lnxboot.S +@COND_i386_pc_TRUE@nodist_lnxboot_image_SOURCES = ## platform nodist sources +@COND_i386_pc_TRUE@lnxboot_image_LDADD = +@COND_i386_pc_TRUE@lnxboot_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_pc_TRUE@lnxboot_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x6000 +@COND_i386_pc_TRUE@lnxboot_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_i386_pc_TRUE@lnxboot_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_pc_TRUE@lnxboot_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_arc_TRUE@xz_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/minilib.c boot/decompressor/xz.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c kern/compiler-rt.c +@COND_mips_loongson_TRUE@xz_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/minilib.c boot/decompressor/xz.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c kern/compiler-rt.c +@COND_mips_qemu_mips_TRUE@xz_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/minilib.c boot/decompressor/xz.c lib/xzembed/xz_dec_bcj.c lib/xzembed/xz_dec_lzma2.c lib/xzembed/xz_dec_stream.c kern/compiler-rt.c +@COND_mips_arc_TRUE@nodist_xz_decompress_image_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_xz_decompress_image_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_xz_decompress_image_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@xz_decompress_image_LDADD = +@COND_mips_loongson_TRUE@xz_decompress_image_LDADD = +@COND_mips_qemu_mips_TRUE@xz_decompress_image_LDADD = +@COND_mips_arc_TRUE@xz_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) -Wno-unreachable-code +@COND_mips_loongson_TRUE@xz_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) -Wno-unreachable-code +@COND_mips_qemu_mips_TRUE@xz_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) -Wno-unreachable-code +@COND_mips_arc_TRUE@xz_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +@COND_mips_loongson_TRUE@xz_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +@COND_mips_qemu_mips_TRUE@xz_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +@COND_mips_arc_TRUE@xz_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1 +@COND_mips_loongson_TRUE@xz_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1 +@COND_mips_qemu_mips_TRUE@xz_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1 +@COND_mips_arc_TRUE@xz_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_loongson_TRUE@xz_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_qemu_mips_TRUE@xz_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_arc_TRUE@xz_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_loongson_TRUE@xz_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_qemu_mips_TRUE@xz_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_arc_TRUE@none_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/none.c +@COND_mips_loongson_TRUE@none_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/none.c +@COND_mips_qemu_mips_TRUE@none_decompress_image_SOURCES = boot/mips/startup_raw.S boot/decompressor/none.c +@COND_mips_arc_TRUE@nodist_none_decompress_image_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@nodist_none_decompress_image_SOURCES = ## platform nodist sources +@COND_mips_qemu_mips_TRUE@nodist_none_decompress_image_SOURCES = ## platform nodist sources +@COND_mips_arc_TRUE@none_decompress_image_LDADD = +@COND_mips_loongson_TRUE@none_decompress_image_LDADD = +@COND_mips_qemu_mips_TRUE@none_decompress_image_LDADD = +@COND_mips_arc_TRUE@none_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_mips_loongson_TRUE@none_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_mips_qemu_mips_TRUE@none_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_mips_arc_TRUE@none_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +@COND_mips_loongson_TRUE@none_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +@COND_mips_qemu_mips_TRUE@none_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR) +@COND_mips_arc_TRUE@none_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DGRUB_EMBED_DECOMPRESSOR=1 +@COND_mips_loongson_TRUE@none_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DGRUB_EMBED_DECOMPRESSOR=1 +@COND_mips_qemu_mips_TRUE@none_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) -DGRUB_EMBED_DECOMPRESSOR=1 +@COND_mips_arc_TRUE@none_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_loongson_TRUE@none_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_qemu_mips_TRUE@none_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_arc_TRUE@none_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_loongson_TRUE@none_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_qemu_mips_TRUE@none_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_i386_pc_TRUE@lzma_decompress_image_SOURCES = boot/i386/pc/startup_raw.S +@COND_i386_pc_TRUE@nodist_lzma_decompress_image_SOURCES = rs_decoder.h ## platform nodist sources +@COND_i386_pc_TRUE@lzma_decompress_image_LDADD = +@COND_i386_pc_TRUE@lzma_decompress_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_i386_pc_TRUE@lzma_decompress_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) $(TARGET_IMG_LDFLAGS) $(TARGET_IMG_BASE_LDOPT),0x8200 +@COND_i386_pc_TRUE@lzma_decompress_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_i386_pc_TRUE@lzma_decompress_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_i386_pc_TRUE@lzma_decompress_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_loongson_TRUE@fwstart_image_SOURCES = boot/mips/loongson/fwstart.S +@COND_mips_loongson_TRUE@nodist_fwstart_image_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@fwstart_image_LDADD = +@COND_mips_loongson_TRUE@fwstart_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_mips_loongson_TRUE@fwstart_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic +@COND_mips_loongson_TRUE@fwstart_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_mips_loongson_TRUE@fwstart_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_loongson_TRUE@fwstart_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_mips_loongson_TRUE@fwstart_fuloong2f_image_SOURCES = boot/mips/loongson/fuloong2f.S +@COND_mips_loongson_TRUE@nodist_fwstart_fuloong2f_image_SOURCES = ## platform nodist sources +@COND_mips_loongson_TRUE@fwstart_fuloong2f_image_LDADD = +@COND_mips_loongson_TRUE@fwstart_fuloong2f_image_CFLAGS = $(AM_CFLAGS) $(CFLAGS_IMAGE) +@COND_mips_loongson_TRUE@fwstart_fuloong2f_image_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_IMAGE) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic +@COND_mips_loongson_TRUE@fwstart_fuloong2f_image_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) +@COND_mips_loongson_TRUE@fwstart_fuloong2f_image_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) +@COND_mips_loongson_TRUE@fwstart_fuloong2f_image_OBJCOPYFLAGS = $(OBJCOPYFLAGS_IMAGE) -O binary +@COND_emu_TRUE@grub_emu_SOURCES = kern/emu/full.c +@COND_emu_TRUE@nodist_grub_emu_SOURCES = grub_emu_init.c +@COND_emu_TRUE@grub_emu_LDADD = kernel.exec$(EXEEXT) $(MODULE_FILES) gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +@COND_emu_TRUE@grub_emu_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +@COND_emu_TRUE@grub_emu_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +@COND_emu_TRUE@grub_emu_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +@COND_emu_TRUE@grub_emu_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +@COND_emu_TRUE@grub_emu_lite_SOURCES = kern/emu/lite.c +@COND_emu_TRUE@nodist_grub_emu_lite_SOURCES = symlist.c +@COND_emu_TRUE@grub_emu_lite_LDADD = kernel.exec$(EXEEXT) gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) +@COND_emu_TRUE@grub_emu_lite_CFLAGS = $(AM_CFLAGS) $(CFLAGS_PROGRAM) +@COND_emu_TRUE@grub_emu_lite_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_PROGRAM) +@COND_emu_TRUE@grub_emu_lite_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) +@COND_emu_TRUE@grub_emu_lite_CCASFLAGS = $(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) +@COND_HAVE_ASM_USCORE_FALSE@ASM_PREFIX = +@COND_HAVE_ASM_USCORE_TRUE@ASM_PREFIX = _ +windowsdir = $(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .S .c .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/conf/Makefile.common $(srcdir)/Makefile.core.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grub-core/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu grub-core/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(top_srcdir)/conf/Makefile.common $(srcdir)/Makefile.core.am $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +install-platformPROGRAMS: $(platform_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(platform_PROGRAMS)'; test -n "$(platformdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(platformdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(platformdir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(platformdir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(platformdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-platformPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(platform_PROGRAMS)'; test -n "$(platformdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(platformdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(platformdir)" && rm -f $$files + +clean-platformPROGRAMS: + -test -z "$(platform_PROGRAMS)" || rm -f $(platform_PROGRAMS) +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) +commands/$(am__dirstamp): + @$(MKDIR_P) commands + @: > commands/$(am__dirstamp) +commands/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/$(DEPDIR) + @: > commands/$(DEPDIR)/$(am__dirstamp) +commands/acpi_module-acpi.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +kern/$(am__dirstamp): + @$(MKDIR_P) kern + @: > kern/$(am__dirstamp) +kern/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/$(DEPDIR) + @: > kern/$(DEPDIR)/$(am__dirstamp) +kern/acpi_module-acpi.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/i386/pc/$(am__dirstamp): + @$(MKDIR_P) kern/i386/pc + @: > kern/i386/pc/$(am__dirstamp) +kern/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/i386/pc/$(DEPDIR) + @: > kern/i386/pc/$(DEPDIR)/$(am__dirstamp) +kern/i386/pc/acpi_module-acpi.$(OBJEXT): kern/i386/pc/$(am__dirstamp) \ + kern/i386/pc/$(DEPDIR)/$(am__dirstamp) + +acpi.module$(EXEEXT): $(acpi_module_OBJECTS) $(acpi_module_DEPENDENCIES) $(EXTRA_acpi_module_DEPENDENCIES) + @rm -f acpi.module$(EXEEXT) + $(AM_V_CCLD)$(acpi_module_LINK) $(acpi_module_OBJECTS) $(acpi_module_LDADD) $(LIBS) +lib/$(am__dirstamp): + @$(MKDIR_P) lib + @: > lib/$(am__dirstamp) +lib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/$(DEPDIR) + @: > lib/$(DEPDIR)/$(am__dirstamp) +lib/adler32_module-adler32.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +adler32.module$(EXEEXT): $(adler32_module_OBJECTS) $(adler32_module_DEPENDENCIES) $(EXTRA_adler32_module_DEPENDENCIES) + @rm -f adler32.module$(EXEEXT) + $(AM_V_CCLD)$(adler32_module_LINK) $(adler32_module_OBJECTS) $(adler32_module_LDADD) $(LIBS) +fs/$(am__dirstamp): + @$(MKDIR_P) fs + @: > fs/$(am__dirstamp) +fs/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) fs/$(DEPDIR) + @: > fs/$(DEPDIR)/$(am__dirstamp) +fs/affs_module-affs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +affs.module$(EXEEXT): $(affs_module_OBJECTS) $(affs_module_DEPENDENCIES) $(EXTRA_affs_module_DEPENDENCIES) + @rm -f affs.module$(EXEEXT) + $(AM_V_CCLD)$(affs_module_LINK) $(affs_module_OBJECTS) $(affs_module_LDADD) $(LIBS) +fs/afs_module-afs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +afs.module$(EXEEXT): $(afs_module_OBJECTS) $(afs_module_DEPENDENCIES) $(EXTRA_afs_module_DEPENDENCIES) + @rm -f afs.module$(EXEEXT) + $(AM_V_CCLD)$(afs_module_LINK) $(afs_module_OBJECTS) $(afs_module_LDADD) $(LIBS) +disk/$(am__dirstamp): + @$(MKDIR_P) disk + @: > disk/$(am__dirstamp) +disk/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) disk/$(DEPDIR) + @: > disk/$(DEPDIR)/$(am__dirstamp) +disk/ahci_module-ahci.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +ahci.module$(EXEEXT): $(ahci_module_OBJECTS) $(ahci_module_DEPENDENCIES) $(EXTRA_ahci_module_DEPENDENCIES) + @rm -f ahci.module$(EXEEXT) + $(AM_V_CCLD)$(ahci_module_LINK) $(ahci_module_OBJECTS) $(ahci_module_LDADD) $(LIBS) +lib/all_video_module-fake_module.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +all_video.module$(EXEEXT): $(all_video_module_OBJECTS) $(all_video_module_DEPENDENCIES) $(EXTRA_all_video_module_DEPENDENCIES) + @rm -f all_video.module$(EXEEXT) + $(AM_V_CCLD)$(all_video_module_LINK) $(all_video_module_OBJECTS) $(all_video_module_LDADD) $(LIBS) +loader/$(am__dirstamp): + @$(MKDIR_P) loader + @: > loader/$(am__dirstamp) +loader/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/$(DEPDIR) + @: > loader/$(DEPDIR)/$(am__dirstamp) +loader/aout_module-aout.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) + +aout.module$(EXEEXT): $(aout_module_OBJECTS) $(aout_module_DEPENDENCIES) $(EXTRA_aout_module_DEPENDENCIES) + @rm -f aout.module$(EXEEXT) + $(AM_V_CCLD)$(aout_module_LINK) $(aout_module_OBJECTS) $(aout_module_LDADD) $(LIBS) +loader/efi/$(am__dirstamp): + @$(MKDIR_P) loader/efi + @: > loader/efi/$(am__dirstamp) +loader/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/efi/$(DEPDIR) + @: > loader/efi/$(DEPDIR)/$(am__dirstamp) +loader/efi/appleldr_module-appleloader.$(OBJEXT): \ + loader/efi/$(am__dirstamp) \ + loader/efi/$(DEPDIR)/$(am__dirstamp) + +appleldr.module$(EXEEXT): $(appleldr_module_OBJECTS) $(appleldr_module_DEPENDENCIES) $(EXTRA_appleldr_module_DEPENDENCIES) + @rm -f appleldr.module$(EXEEXT) + $(AM_V_CCLD)$(appleldr_module_LINK) $(appleldr_module_OBJECTS) $(appleldr_module_LDADD) $(LIBS) +fs/archelp_module-archelp.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +archelp.module$(EXEEXT): $(archelp_module_OBJECTS) $(archelp_module_DEPENDENCIES) $(EXTRA_archelp_module_DEPENDENCIES) + @rm -f archelp.module$(EXEEXT) + $(AM_V_CCLD)$(archelp_module_LINK) $(archelp_module_OBJECTS) $(archelp_module_LDADD) $(LIBS) +term/$(am__dirstamp): + @$(MKDIR_P) term + @: > term/$(am__dirstamp) +term/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/$(DEPDIR) + @: > term/$(DEPDIR)/$(am__dirstamp) +term/at_keyboard_module-at_keyboard.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) + +at_keyboard.module$(EXEEXT): $(at_keyboard_module_OBJECTS) $(at_keyboard_module_DEPENDENCIES) $(EXTRA_at_keyboard_module_DEPENDENCIES) + @rm -f at_keyboard.module$(EXEEXT) + $(AM_V_CCLD)$(at_keyboard_module_LINK) $(at_keyboard_module_OBJECTS) $(at_keyboard_module_LDADD) $(LIBS) +disk/ata_module-ata.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +ata.module$(EXEEXT): $(ata_module_OBJECTS) $(ata_module_DEPENDENCIES) $(EXTRA_ata_module_DEPENDENCIES) + @rm -f ata.module$(EXEEXT) + $(AM_V_CCLD)$(ata_module_LINK) $(ata_module_OBJECTS) $(ata_module_LDADD) $(LIBS) +lib/i386/$(am__dirstamp): + @$(MKDIR_P) lib/i386 + @: > lib/i386/$(am__dirstamp) +lib/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/i386/$(DEPDIR) + @: > lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/backtrace_module-backtrace.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/backtrace_module-backtrace.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +backtrace.module$(EXEEXT): $(backtrace_module_OBJECTS) $(backtrace_module_DEPENDENCIES) $(EXTRA_backtrace_module_DEPENDENCIES) + @rm -f backtrace.module$(EXEEXT) + $(AM_V_CCLD)$(backtrace_module_LINK) $(backtrace_module_OBJECTS) $(backtrace_module_LDADD) $(LIBS) +fs/bfs_module-bfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +bfs.module$(EXEEXT): $(bfs_module_OBJECTS) $(bfs_module_DEPENDENCIES) $(EXTRA_bfs_module_DEPENDENCIES) + @rm -f bfs.module$(EXEEXT) + $(AM_V_CCLD)$(bfs_module_LINK) $(bfs_module_OBJECTS) $(bfs_module_LDADD) $(LIBS) +disk/i386/pc/$(am__dirstamp): + @$(MKDIR_P) disk/i386/pc + @: > disk/i386/pc/$(am__dirstamp) +disk/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) disk/i386/pc/$(DEPDIR) + @: > disk/i386/pc/$(DEPDIR)/$(am__dirstamp) +disk/i386/pc/biosdisk_module-biosdisk.$(OBJEXT): \ + disk/i386/pc/$(am__dirstamp) \ + disk/i386/pc/$(DEPDIR)/$(am__dirstamp) + +biosdisk.module$(EXEEXT): $(biosdisk_module_OBJECTS) $(biosdisk_module_DEPENDENCIES) $(EXTRA_biosdisk_module_DEPENDENCIES) + @rm -f biosdisk.module$(EXEEXT) + $(AM_V_CCLD)$(biosdisk_module_LINK) $(biosdisk_module_OBJECTS) $(biosdisk_module_LDADD) $(LIBS) +video/$(am__dirstamp): + @$(MKDIR_P) video + @: > video/$(am__dirstamp) +video/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) video/$(DEPDIR) + @: > video/$(DEPDIR)/$(am__dirstamp) +video/bitmap_module-bitmap.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +bitmap.module$(EXEEXT): $(bitmap_module_OBJECTS) $(bitmap_module_DEPENDENCIES) $(EXTRA_bitmap_module_DEPENDENCIES) + @rm -f bitmap.module$(EXEEXT) + $(AM_V_CCLD)$(bitmap_module_LINK) $(bitmap_module_OBJECTS) $(bitmap_module_LDADD) $(LIBS) +video/bitmap_scale_module-bitmap_scale.$(OBJEXT): \ + video/$(am__dirstamp) video/$(DEPDIR)/$(am__dirstamp) + +bitmap_scale.module$(EXEEXT): $(bitmap_scale_module_OBJECTS) $(bitmap_scale_module_DEPENDENCIES) $(EXTRA_bitmap_scale_module_DEPENDENCIES) + @rm -f bitmap_scale.module$(EXEEXT) + $(AM_V_CCLD)$(bitmap_scale_module_LINK) $(bitmap_scale_module_OBJECTS) $(bitmap_scale_module_LDADD) $(LIBS) +commands/blocklist_module-blocklist.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +blocklist.module$(EXEEXT): $(blocklist_module_OBJECTS) $(blocklist_module_DEPENDENCIES) $(EXTRA_blocklist_module_DEPENDENCIES) + @rm -f blocklist.module$(EXEEXT) + $(AM_V_CCLD)$(blocklist_module_LINK) $(blocklist_module_OBJECTS) $(blocklist_module_LDADD) $(LIBS) +boot/i386/pc/$(am__dirstamp): + @$(MKDIR_P) boot/i386/pc + @: > boot/i386/pc/$(am__dirstamp) +boot/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) boot/i386/pc/$(DEPDIR) + @: > boot/i386/pc/$(DEPDIR)/$(am__dirstamp) +boot/i386/pc/boot_image-boot.$(OBJEXT): boot/i386/pc/$(am__dirstamp) \ + boot/i386/pc/$(DEPDIR)/$(am__dirstamp) +boot/i386/qemu/$(am__dirstamp): + @$(MKDIR_P) boot/i386/qemu + @: > boot/i386/qemu/$(am__dirstamp) +boot/i386/qemu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) boot/i386/qemu/$(DEPDIR) + @: > boot/i386/qemu/$(DEPDIR)/$(am__dirstamp) +boot/i386/qemu/boot_image-boot.$(OBJEXT): \ + boot/i386/qemu/$(am__dirstamp) \ + boot/i386/qemu/$(DEPDIR)/$(am__dirstamp) +boot/sparc64/ieee1275/$(am__dirstamp): + @$(MKDIR_P) boot/sparc64/ieee1275 + @: > boot/sparc64/ieee1275/$(am__dirstamp) +boot/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) boot/sparc64/ieee1275/$(DEPDIR) + @: > boot/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) +boot/sparc64/ieee1275/boot_image-boot.$(OBJEXT): \ + boot/sparc64/ieee1275/$(am__dirstamp) \ + boot/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) + +boot.image$(EXEEXT): $(boot_image_OBJECTS) $(boot_image_DEPENDENCIES) $(EXTRA_boot_image_DEPENDENCIES) + @rm -f boot.image$(EXEEXT) + $(AM_V_CCLD)$(boot_image_LINK) $(boot_image_OBJECTS) $(boot_image_LDADD) $(LIBS) +commands/boot_module-boot.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/i386/pc/$(am__dirstamp): + @$(MKDIR_P) lib/i386/pc + @: > lib/i386/pc/$(am__dirstamp) +lib/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/i386/pc/$(DEPDIR) + @: > lib/i386/pc/$(DEPDIR)/$(am__dirstamp) +lib/i386/pc/boot_module-biosnum.$(OBJEXT): \ + lib/i386/pc/$(am__dirstamp) \ + lib/i386/pc/$(DEPDIR)/$(am__dirstamp) + +boot.module$(EXEEXT): $(boot_module_OBJECTS) $(boot_module_DEPENDENCIES) $(EXTRA_boot_module_DEPENDENCIES) + @rm -f boot.module$(EXEEXT) + $(AM_V_CCLD)$(boot_module_LINK) $(boot_module_OBJECTS) $(boot_module_LDADD) $(LIBS) +boot/i386/pc/boot_hybrid_image-boot.$(OBJEXT): \ + boot/i386/pc/$(am__dirstamp) \ + boot/i386/pc/$(DEPDIR)/$(am__dirstamp) + +boot_hybrid.image$(EXEEXT): $(boot_hybrid_image_OBJECTS) $(boot_hybrid_image_DEPENDENCIES) $(EXTRA_boot_hybrid_image_DEPENDENCIES) + @rm -f boot_hybrid.image$(EXEEXT) + $(AM_V_CCLD)$(boot_hybrid_image_LINK) $(boot_hybrid_image_OBJECTS) $(boot_hybrid_image_LDADD) $(LIBS) +commands/boottime_module-boottime.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +boottime.module$(EXEEXT): $(boottime_module_OBJECTS) $(boottime_module_DEPENDENCIES) $(EXTRA_boottime_module_DEPENDENCIES) + @rm -f boottime.module$(EXEEXT) + $(AM_V_CCLD)$(boottime_module_LINK) $(boottime_module_OBJECTS) $(boottime_module_LDADD) $(LIBS) +loader/i386/$(am__dirstamp): + @$(MKDIR_P) loader/i386 + @: > loader/i386/$(am__dirstamp) +loader/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/i386/$(DEPDIR) + @: > loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/i386/bsd_module-bsd.$(OBJEXT): loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/i386/bsd_module-bsd32.$(OBJEXT): loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/i386/bsd_module-bsd64.$(OBJEXT): loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) + +bsd.module$(EXEEXT): $(bsd_module_OBJECTS) $(bsd_module_DEPENDENCIES) $(EXTRA_bsd_module_DEPENDENCIES) + @rm -f bsd.module$(EXEEXT) + $(AM_V_CCLD)$(bsd_module_LINK) $(bsd_module_OBJECTS) $(bsd_module_LDADD) $(LIBS) +tests/$(am__dirstamp): + @$(MKDIR_P) tests + @: > tests/$(am__dirstamp) +tests/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tests/$(DEPDIR) + @: > tests/$(DEPDIR)/$(am__dirstamp) +tests/bswap_test_module-bswap_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +bswap_test.module$(EXEEXT): $(bswap_test_module_OBJECTS) $(bswap_test_module_DEPENDENCIES) $(EXTRA_bswap_test_module_DEPENDENCIES) + @rm -f bswap_test.module$(EXEEXT) + $(AM_V_CCLD)$(bswap_test_module_LINK) $(bswap_test_module_OBJECTS) $(bswap_test_module_LDADD) $(LIBS) +fs/btrfs_module-btrfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) +lib/btrfs_module-crc.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +btrfs.module$(EXEEXT): $(btrfs_module_OBJECTS) $(btrfs_module_DEPENDENCIES) $(EXTRA_btrfs_module_DEPENDENCIES) + @rm -f btrfs.module$(EXEEXT) + $(AM_V_CCLD)$(btrfs_module_LINK) $(btrfs_module_OBJECTS) $(btrfs_module_LDADD) $(LIBS) +io/$(am__dirstamp): + @$(MKDIR_P) io + @: > io/$(am__dirstamp) +io/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) io/$(DEPDIR) + @: > io/$(DEPDIR)/$(am__dirstamp) +io/bufio_module-bufio.$(OBJEXT): io/$(am__dirstamp) \ + io/$(DEPDIR)/$(am__dirstamp) + +bufio.module$(EXEEXT): $(bufio_module_OBJECTS) $(bufio_module_DEPENDENCIES) $(EXTRA_bufio_module_DEPENDENCIES) + @rm -f bufio.module$(EXEEXT) + $(AM_V_CCLD)$(bufio_module_LINK) $(bufio_module_OBJECTS) $(bufio_module_LDADD) $(LIBS) +commands/cacheinfo_module-cacheinfo.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +cacheinfo.module$(EXEEXT): $(cacheinfo_module_OBJECTS) $(cacheinfo_module_DEPENDENCIES) $(EXTRA_cacheinfo_module_DEPENDENCIES) + @rm -f cacheinfo.module$(EXEEXT) + $(AM_V_CCLD)$(cacheinfo_module_LINK) $(cacheinfo_module_OBJECTS) $(cacheinfo_module_LDADD) $(LIBS) +commands/cat_module-cat.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +cat.module$(EXEEXT): $(cat_module_OBJECTS) $(cat_module_DEPENDENCIES) $(EXTRA_cat_module_DEPENDENCIES) + @rm -f cat.module$(EXEEXT) + $(AM_V_CCLD)$(cat_module_LINK) $(cat_module_OBJECTS) $(cat_module_LDADD) $(LIBS) +fs/cbfs_module-cbfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +cbfs.module$(EXEEXT): $(cbfs_module_OBJECTS) $(cbfs_module_DEPENDENCIES) $(EXTRA_cbfs_module_DEPENDENCIES) + @rm -f cbfs.module$(EXEEXT) + $(AM_V_CCLD)$(cbfs_module_LINK) $(cbfs_module_OBJECTS) $(cbfs_module_LDADD) $(LIBS) +commands/i386/coreboot/$(am__dirstamp): + @$(MKDIR_P) commands/i386/coreboot + @: > commands/i386/coreboot/$(am__dirstamp) +commands/i386/coreboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/i386/coreboot/$(DEPDIR) + @: > commands/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +commands/i386/coreboot/cbls_module-cbls.$(OBJEXT): \ + commands/i386/coreboot/$(am__dirstamp) \ + commands/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + +cbls.module$(EXEEXT): $(cbls_module_OBJECTS) $(cbls_module_DEPENDENCIES) $(EXTRA_cbls_module_DEPENDENCIES) + @rm -f cbls.module$(EXEEXT) + $(AM_V_CCLD)$(cbls_module_LINK) $(cbls_module_OBJECTS) $(cbls_module_LDADD) $(LIBS) +term/i386/coreboot/$(am__dirstamp): + @$(MKDIR_P) term/i386/coreboot + @: > term/i386/coreboot/$(am__dirstamp) +term/i386/coreboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/i386/coreboot/$(DEPDIR) + @: > term/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +term/i386/coreboot/cbmemc_module-cbmemc.$(OBJEXT): \ + term/i386/coreboot/$(am__dirstamp) \ + term/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + +cbmemc.module$(EXEEXT): $(cbmemc_module_OBJECTS) $(cbmemc_module_DEPENDENCIES) $(EXTRA_cbmemc_module_DEPENDENCIES) + @rm -f cbmemc.module$(EXEEXT) + $(AM_V_CCLD)$(cbmemc_module_LINK) $(cbmemc_module_OBJECTS) $(cbmemc_module_LDADD) $(LIBS) +kern/i386/coreboot/$(am__dirstamp): + @$(MKDIR_P) kern/i386/coreboot + @: > kern/i386/coreboot/$(am__dirstamp) +kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/i386/coreboot/$(DEPDIR) + @: > kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +kern/i386/coreboot/cbtable_module-cbtable.$(OBJEXT): \ + kern/i386/coreboot/$(am__dirstamp) \ + kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + +cbtable.module$(EXEEXT): $(cbtable_module_OBJECTS) $(cbtable_module_DEPENDENCIES) $(EXTRA_cbtable_module_DEPENDENCIES) + @rm -f cbtable.module$(EXEEXT) + $(AM_V_CCLD)$(cbtable_module_LINK) $(cbtable_module_OBJECTS) $(cbtable_module_LDADD) $(LIBS) +commands/i386/coreboot/cbtime_module-cb_timestamps.$(OBJEXT): \ + commands/i386/coreboot/$(am__dirstamp) \ + commands/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + +cbtime.module$(EXEEXT): $(cbtime_module_OBJECTS) $(cbtime_module_DEPENDENCIES) $(EXTRA_cbtime_module_DEPENDENCIES) + @rm -f cbtime.module$(EXEEXT) + $(AM_V_CCLD)$(cbtime_module_LINK) $(cbtime_module_OBJECTS) $(cbtime_module_LDADD) $(LIBS) +boot/i386/pc/cdboot_image-cdboot.$(OBJEXT): \ + boot/i386/pc/$(am__dirstamp) \ + boot/i386/pc/$(DEPDIR)/$(am__dirstamp) +boot/sparc64/ieee1275/cdboot_image-boot.$(OBJEXT): \ + boot/sparc64/ieee1275/$(am__dirstamp) \ + boot/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) + +cdboot.image$(EXEEXT): $(cdboot_image_OBJECTS) $(cdboot_image_DEPENDENCIES) $(EXTRA_cdboot_image_DEPENDENCIES) + @rm -f cdboot.image$(EXEEXT) + $(AM_V_CCLD)$(cdboot_image_LINK) $(cdboot_image_OBJECTS) $(cdboot_image_LDADD) $(LIBS) +loader/efi/chain_module-chainloader.$(OBJEXT): \ + loader/efi/$(am__dirstamp) \ + loader/efi/$(DEPDIR)/$(am__dirstamp) +loader/i386/coreboot/$(am__dirstamp): + @$(MKDIR_P) loader/i386/coreboot + @: > loader/i386/coreboot/$(am__dirstamp) +loader/i386/coreboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/i386/coreboot/$(DEPDIR) + @: > loader/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +loader/i386/coreboot/chain_module-chainloader.$(OBJEXT): \ + loader/i386/coreboot/$(am__dirstamp) \ + loader/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +lib/chain_module-LzmaDec.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +loader/i386/pc/$(am__dirstamp): + @$(MKDIR_P) loader/i386/pc + @: > loader/i386/pc/$(am__dirstamp) +loader/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/i386/pc/$(DEPDIR) + @: > loader/i386/pc/$(DEPDIR)/$(am__dirstamp) +loader/i386/pc/chain_module-chainloader.$(OBJEXT): \ + loader/i386/pc/$(am__dirstamp) \ + loader/i386/pc/$(DEPDIR)/$(am__dirstamp) + +chain.module$(EXEEXT): $(chain_module_OBJECTS) $(chain_module_DEPENDENCIES) $(EXTRA_chain_module_DEPENDENCIES) + @rm -f chain.module$(EXEEXT) + $(AM_V_CCLD)$(chain_module_LINK) $(chain_module_OBJECTS) $(chain_module_LDADD) $(LIBS) +tests/cmdline_cat_test_module-cmdline_cat_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +cmdline_cat_test.module$(EXEEXT): $(cmdline_cat_test_module_OBJECTS) $(cmdline_cat_test_module_DEPENDENCIES) $(EXTRA_cmdline_cat_test_module_DEPENDENCIES) + @rm -f cmdline_cat_test.module$(EXEEXT) + $(AM_V_CCLD)$(cmdline_cat_test_module_LINK) $(cmdline_cat_test_module_OBJECTS) $(cmdline_cat_test_module_LDADD) $(LIBS) +commands/i386/$(am__dirstamp): + @$(MKDIR_P) commands/i386 + @: > commands/i386/$(am__dirstamp) +commands/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/i386/$(DEPDIR) + @: > commands/i386/$(DEPDIR)/$(am__dirstamp) +commands/i386/cmosdump_module-cmosdump.$(OBJEXT): \ + commands/i386/$(am__dirstamp) \ + commands/i386/$(DEPDIR)/$(am__dirstamp) + +cmosdump.module$(EXEEXT): $(cmosdump_module_OBJECTS) $(cmosdump_module_DEPENDENCIES) $(EXTRA_cmosdump_module_DEPENDENCIES) + @rm -f cmosdump.module$(EXEEXT) + $(AM_V_CCLD)$(cmosdump_module_LINK) $(cmosdump_module_OBJECTS) $(cmosdump_module_LDADD) $(LIBS) +commands/i386/cmostest_module-cmostest.$(OBJEXT): \ + commands/i386/$(am__dirstamp) \ + commands/i386/$(DEPDIR)/$(am__dirstamp) + +cmostest.module$(EXEEXT): $(cmostest_module_OBJECTS) $(cmostest_module_DEPENDENCIES) $(EXTRA_cmostest_module_DEPENDENCIES) + @rm -f cmostest.module$(EXEEXT) + $(AM_V_CCLD)$(cmostest_module_LINK) $(cmostest_module_OBJECTS) $(cmostest_module_LDADD) $(LIBS) +commands/cmp_module-cmp.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +cmp.module$(EXEEXT): $(cmp_module_OBJECTS) $(cmp_module_DEPENDENCIES) $(EXTRA_cmp_module_DEPENDENCIES) + @rm -f cmp.module$(EXEEXT) + $(AM_V_CCLD)$(cmp_module_LINK) $(cmp_module_OBJECTS) $(cmp_module_LDADD) $(LIBS) +tests/cmp_test_module-cmp_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +cmp_test.module$(EXEEXT): $(cmp_test_module_OBJECTS) $(cmp_test_module_DEPENDENCIES) $(EXTRA_cmp_test_module_DEPENDENCIES) + @rm -f cmp_test.module$(EXEEXT) + $(AM_V_CCLD)$(cmp_test_module_LINK) $(cmp_test_module_OBJECTS) $(cmp_test_module_LDADD) $(LIBS) +commands/configfile_module-configfile.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +configfile.module$(EXEEXT): $(configfile_module_OBJECTS) $(configfile_module_DEPENDENCIES) $(EXTRA_configfile_module_DEPENDENCIES) + @rm -f configfile.module$(EXEEXT) + $(AM_V_CCLD)$(configfile_module_LINK) $(configfile_module_OBJECTS) $(configfile_module_LDADD) $(LIBS) +fs/cpio_module-cpio.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +cpio.module$(EXEEXT): $(cpio_module_OBJECTS) $(cpio_module_DEPENDENCIES) $(EXTRA_cpio_module_DEPENDENCIES) + @rm -f cpio.module$(EXEEXT) + $(AM_V_CCLD)$(cpio_module_LINK) $(cpio_module_OBJECTS) $(cpio_module_LDADD) $(LIBS) +fs/cpio_be_module-cpio_be.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +cpio_be.module$(EXEEXT): $(cpio_be_module_OBJECTS) $(cpio_be_module_DEPENDENCIES) $(EXTRA_cpio_be_module_DEPENDENCIES) + @rm -f cpio_be.module$(EXEEXT) + $(AM_V_CCLD)$(cpio_be_module_LINK) $(cpio_be_module_OBJECTS) $(cpio_be_module_LDADD) $(LIBS) +commands/i386/cpuid_module-cpuid.$(OBJEXT): \ + commands/i386/$(am__dirstamp) \ + commands/i386/$(DEPDIR)/$(am__dirstamp) + +cpuid.module$(EXEEXT): $(cpuid_module_OBJECTS) $(cpuid_module_DEPENDENCIES) $(EXTRA_cpuid_module_DEPENDENCIES) + @rm -f cpuid.module$(EXEEXT) + $(AM_V_CCLD)$(cpuid_module_LINK) $(cpuid_module_OBJECTS) $(cpuid_module_LDADD) $(LIBS) +lib/crc64_module-crc64.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +crc64.module$(EXEEXT): $(crc64_module_OBJECTS) $(crc64_module_DEPENDENCIES) $(EXTRA_crc64_module_DEPENDENCIES) + @rm -f crc64.module$(EXEEXT) + $(AM_V_CCLD)$(crc64_module_LINK) $(crc64_module_OBJECTS) $(crc64_module_LDADD) $(LIBS) +lib/crypto_module-crypto.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +crypto.module$(EXEEXT): $(crypto_module_OBJECTS) $(crypto_module_DEPENDENCIES) $(EXTRA_crypto_module_DEPENDENCIES) + @rm -f crypto.module$(EXEEXT) + $(AM_V_CCLD)$(crypto_module_LINK) $(crypto_module_OBJECTS) $(crypto_module_LDADD) $(LIBS) +disk/cryptodisk_module-cryptodisk.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +cryptodisk.module$(EXEEXT): $(cryptodisk_module_OBJECTS) $(cryptodisk_module_DEPENDENCIES) $(EXTRA_cryptodisk_module_DEPENDENCIES) + @rm -f cryptodisk.module$(EXEEXT) + $(AM_V_CCLD)$(cryptodisk_module_LINK) $(cryptodisk_module_OBJECTS) $(cryptodisk_module_LDADD) $(LIBS) +bus/$(am__dirstamp): + @$(MKDIR_P) bus + @: > bus/$(am__dirstamp) +bus/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) bus/$(DEPDIR) + @: > bus/$(DEPDIR)/$(am__dirstamp) +bus/cs5536_module-cs5536.$(OBJEXT): bus/$(am__dirstamp) \ + bus/$(DEPDIR)/$(am__dirstamp) + +cs5536.module$(EXEEXT): $(cs5536_module_OBJECTS) $(cs5536_module_DEPENDENCIES) $(EXTRA_cs5536_module_DEPENDENCIES) + @rm -f cs5536.module$(EXEEXT) + $(AM_V_CCLD)$(cs5536_module_LINK) $(cs5536_module_OBJECTS) $(cs5536_module_LDADD) $(LIBS) +tests/ctz_test_module-ctz_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +ctz_test.module$(EXEEXT): $(ctz_test_module_OBJECTS) $(ctz_test_module_DEPENDENCIES) $(EXTRA_ctz_test_module_DEPENDENCIES) + @rm -f ctz_test.module$(EXEEXT) + $(AM_V_CCLD)$(ctz_test_module_LINK) $(ctz_test_module_OBJECTS) $(ctz_test_module_LDADD) $(LIBS) +commands/date_module-date.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +date.module$(EXEEXT): $(date_module_OBJECTS) $(date_module_DEPENDENCIES) $(EXTRA_date_module_DEPENDENCIES) + @rm -f date.module$(EXEEXT) + $(AM_V_CCLD)$(date_module_LINK) $(date_module_OBJECTS) $(date_module_LDADD) $(LIBS) +hook/$(am__dirstamp): + @$(MKDIR_P) hook + @: > hook/$(am__dirstamp) +hook/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) hook/$(DEPDIR) + @: > hook/$(DEPDIR)/$(am__dirstamp) +hook/datehook_module-datehook.$(OBJEXT): hook/$(am__dirstamp) \ + hook/$(DEPDIR)/$(am__dirstamp) + +datehook.module$(EXEEXT): $(datehook_module_OBJECTS) $(datehook_module_DEPENDENCIES) $(EXTRA_datehook_module_DEPENDENCIES) + @rm -f datehook.module$(EXEEXT) + $(AM_V_CCLD)$(datehook_module_LINK) $(datehook_module_OBJECTS) $(datehook_module_LDADD) $(LIBS) +lib/efi/$(am__dirstamp): + @$(MKDIR_P) lib/efi + @: > lib/efi/$(am__dirstamp) +lib/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/efi/$(DEPDIR) + @: > lib/efi/$(DEPDIR)/$(am__dirstamp) +lib/efi/datetime_module-datetime.$(OBJEXT): lib/efi/$(am__dirstamp) \ + lib/efi/$(DEPDIR)/$(am__dirstamp) +lib/uboot/$(am__dirstamp): + @$(MKDIR_P) lib/uboot + @: > lib/uboot/$(am__dirstamp) +lib/uboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/uboot/$(DEPDIR) + @: > lib/uboot/$(DEPDIR)/$(am__dirstamp) +lib/uboot/datetime_module-datetime.$(OBJEXT): \ + lib/uboot/$(am__dirstamp) lib/uboot/$(DEPDIR)/$(am__dirstamp) +lib/datetime_module-cmos_datetime.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/xen/$(am__dirstamp): + @$(MKDIR_P) lib/xen + @: > lib/xen/$(am__dirstamp) +lib/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/xen/$(DEPDIR) + @: > lib/xen/$(DEPDIR)/$(am__dirstamp) +lib/xen/datetime_module-datetime.$(OBJEXT): lib/xen/$(am__dirstamp) \ + lib/xen/$(DEPDIR)/$(am__dirstamp) +lib/arc/$(am__dirstamp): + @$(MKDIR_P) lib/arc + @: > lib/arc/$(am__dirstamp) +lib/arc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/arc/$(DEPDIR) + @: > lib/arc/$(DEPDIR)/$(am__dirstamp) +lib/arc/datetime_module-datetime.$(OBJEXT): lib/arc/$(am__dirstamp) \ + lib/arc/$(DEPDIR)/$(am__dirstamp) +lib/ieee1275/$(am__dirstamp): + @$(MKDIR_P) lib/ieee1275 + @: > lib/ieee1275/$(am__dirstamp) +lib/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/ieee1275/$(DEPDIR) + @: > lib/ieee1275/$(DEPDIR)/$(am__dirstamp) +lib/ieee1275/datetime_module-datetime.$(OBJEXT): \ + lib/ieee1275/$(am__dirstamp) \ + lib/ieee1275/$(DEPDIR)/$(am__dirstamp) +lib/ieee1275/datetime_module-cmos.$(OBJEXT): \ + lib/ieee1275/$(am__dirstamp) \ + lib/ieee1275/$(DEPDIR)/$(am__dirstamp) + +datetime.module$(EXEEXT): $(datetime_module_OBJECTS) $(datetime_module_DEPENDENCIES) $(EXTRA_datetime_module_DEPENDENCIES) + @rm -f datetime.module$(EXEEXT) + $(AM_V_CCLD)$(datetime_module_LINK) $(datetime_module_OBJECTS) $(datetime_module_LDADD) $(LIBS) +lib/disk_module-disk.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +disk.module$(EXEEXT): $(disk_module_OBJECTS) $(disk_module_DEPENDENCIES) $(EXTRA_disk_module_DEPENDENCIES) + @rm -f disk.module$(EXEEXT) + $(AM_V_CCLD)$(disk_module_LINK) $(disk_module_OBJECTS) $(disk_module_LDADD) $(LIBS) +boot/i386/pc/diskboot_image-diskboot.$(OBJEXT): \ + boot/i386/pc/$(am__dirstamp) \ + boot/i386/pc/$(DEPDIR)/$(am__dirstamp) +boot/sparc64/ieee1275/diskboot_image-diskboot.$(OBJEXT): \ + boot/sparc64/ieee1275/$(am__dirstamp) \ + boot/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) + +diskboot.image$(EXEEXT): $(diskboot_image_OBJECTS) $(diskboot_image_DEPENDENCIES) $(EXTRA_diskboot_image_DEPENDENCIES) + @rm -f diskboot.image$(EXEEXT) + $(AM_V_CCLD)$(diskboot_image_LINK) $(diskboot_image_OBJECTS) $(diskboot_image_LDADD) $(LIBS) +disk/diskfilter_module-diskfilter.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +diskfilter.module$(EXEEXT): $(diskfilter_module_OBJECTS) $(diskfilter_module_DEPENDENCIES) $(EXTRA_diskfilter_module_DEPENDENCIES) + @rm -f diskfilter.module$(EXEEXT) + $(AM_V_CCLD)$(diskfilter_module_LINK) $(diskfilter_module_OBJECTS) $(diskfilter_module_LDADD) $(LIBS) +lib/div_module-division.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +div.module$(EXEEXT): $(div_module_OBJECTS) $(div_module_DEPENDENCIES) $(EXTRA_div_module_DEPENDENCIES) + @rm -f div.module$(EXEEXT) + $(AM_V_CCLD)$(div_module_LINK) $(div_module_OBJECTS) $(div_module_LDADD) $(LIBS) +tests/div_test_module-div_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +div_test.module$(EXEEXT): $(div_test_module_OBJECTS) $(div_test_module_DEPENDENCIES) $(EXTRA_div_test_module_DEPENDENCIES) + @rm -f div_test.module$(EXEEXT) + $(AM_V_CCLD)$(div_test_module_LINK) $(div_test_module_OBJECTS) $(div_test_module_LDADD) $(LIBS) +disk/dm_nv_module-dmraid_nvidia.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +dm_nv.module$(EXEEXT): $(dm_nv_module_OBJECTS) $(dm_nv_module_DEPENDENCIES) $(EXTRA_dm_nv_module_DEPENDENCIES) + @rm -f dm_nv.module$(EXEEXT) + $(AM_V_CCLD)$(dm_nv_module_LINK) $(dm_nv_module_OBJECTS) $(dm_nv_module_LDADD) $(LIBS) +commands/i386/pc/$(am__dirstamp): + @$(MKDIR_P) commands/i386/pc + @: > commands/i386/pc/$(am__dirstamp) +commands/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/i386/pc/$(DEPDIR) + @: > commands/i386/pc/$(DEPDIR)/$(am__dirstamp) +commands/i386/pc/drivemap_module-drivemap.$(OBJEXT): \ + commands/i386/pc/$(am__dirstamp) \ + commands/i386/pc/$(DEPDIR)/$(am__dirstamp) +commands/i386/pc/drivemap_module-drivemap_int13h.$(OBJEXT): \ + commands/i386/pc/$(am__dirstamp) \ + commands/i386/pc/$(DEPDIR)/$(am__dirstamp) + +drivemap.module$(EXEEXT): $(drivemap_module_OBJECTS) $(drivemap_module_DEPENDENCIES) $(EXTRA_drivemap_module_DEPENDENCIES) + @rm -f drivemap.module$(EXEEXT) + $(AM_V_CCLD)$(drivemap_module_LINK) $(drivemap_module_OBJECTS) $(drivemap_module_LDADD) $(LIBS) +commands/echo_module-echo.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +echo.module$(EXEEXT): $(echo_module_OBJECTS) $(echo_module_DEPENDENCIES) $(EXTRA_echo_module_DEPENDENCIES) + @rm -f echo.module$(EXEEXT) + $(AM_V_CCLD)$(echo_module_LINK) $(echo_module_OBJECTS) $(echo_module_LDADD) $(LIBS) +video/efi_gop_module-efi_gop.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +efi_gop.module$(EXEEXT): $(efi_gop_module_OBJECTS) $(efi_gop_module_DEPENDENCIES) $(EXTRA_efi_gop_module_DEPENDENCIES) + @rm -f efi_gop.module$(EXEEXT) + $(AM_V_CCLD)$(efi_gop_module_LINK) $(efi_gop_module_OBJECTS) $(efi_gop_module_LDADD) $(LIBS) +video/efi_uga_module-efi_uga.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +efi_uga.module$(EXEEXT): $(efi_uga_module_OBJECTS) $(efi_uga_module_DEPENDENCIES) $(EXTRA_efi_uga_module_DEPENDENCIES) + @rm -f efi_uga.module$(EXEEXT) + $(AM_V_CCLD)$(efi_uga_module_LINK) $(efi_uga_module_OBJECTS) $(efi_uga_module_LDADD) $(LIBS) +efiemu/i386/pc/$(am__dirstamp): + @$(MKDIR_P) efiemu/i386/pc + @: > efiemu/i386/pc/$(am__dirstamp) +efiemu/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) efiemu/i386/pc/$(DEPDIR) + @: > efiemu/i386/pc/$(DEPDIR)/$(am__dirstamp) +efiemu/i386/pc/efiemu_module-cfgtables.$(OBJEXT): \ + efiemu/i386/pc/$(am__dirstamp) \ + efiemu/i386/pc/$(DEPDIR)/$(am__dirstamp) +efiemu/$(am__dirstamp): + @$(MKDIR_P) efiemu + @: > efiemu/$(am__dirstamp) +efiemu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) efiemu/$(DEPDIR) + @: > efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-main.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/i386/$(am__dirstamp): + @$(MKDIR_P) efiemu/i386 + @: > efiemu/i386/$(am__dirstamp) +efiemu/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) efiemu/i386/$(DEPDIR) + @: > efiemu/i386/$(DEPDIR)/$(am__dirstamp) +efiemu/i386/efiemu_module-loadcore32.$(OBJEXT): \ + efiemu/i386/$(am__dirstamp) \ + efiemu/i386/$(DEPDIR)/$(am__dirstamp) +efiemu/i386/efiemu_module-loadcore64.$(OBJEXT): \ + efiemu/i386/$(am__dirstamp) \ + efiemu/i386/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-mm.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-loadcore_common.$(OBJEXT): \ + efiemu/$(am__dirstamp) efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-symbols.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-loadcore32.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-loadcore64.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-prepare32.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-prepare64.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/efiemu_module-pnvram.$(OBJEXT): efiemu/$(am__dirstamp) \ + efiemu/$(DEPDIR)/$(am__dirstamp) +efiemu/i386/efiemu_module-coredetect.$(OBJEXT): \ + efiemu/i386/$(am__dirstamp) \ + efiemu/i386/$(DEPDIR)/$(am__dirstamp) +efiemu/i386/efiemu_module-nocfgtables.$(OBJEXT): \ + efiemu/i386/$(am__dirstamp) \ + efiemu/i386/$(DEPDIR)/$(am__dirstamp) + +efiemu.module$(EXEEXT): $(efiemu_module_OBJECTS) $(efiemu_module_DEPENDENCIES) $(EXTRA_efiemu_module_DEPENDENCIES) + @rm -f efiemu.module$(EXEEXT) + $(AM_V_CCLD)$(efiemu_module_LINK) $(efiemu_module_OBJECTS) $(efiemu_module_LDADD) $(LIBS) +commands/efi/$(am__dirstamp): + @$(MKDIR_P) commands/efi + @: > commands/efi/$(am__dirstamp) +commands/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/efi/$(DEPDIR) + @: > commands/efi/$(DEPDIR)/$(am__dirstamp) +commands/efi/efifwsetup_module-efifwsetup.$(OBJEXT): \ + commands/efi/$(am__dirstamp) \ + commands/efi/$(DEPDIR)/$(am__dirstamp) + +efifwsetup.module$(EXEEXT): $(efifwsetup_module_OBJECTS) $(efifwsetup_module_DEPENDENCIES) $(EXTRA_efifwsetup_module_DEPENDENCIES) + @rm -f efifwsetup.module$(EXEEXT) + $(AM_V_CCLD)$(efifwsetup_module_LINK) $(efifwsetup_module_OBJECTS) $(efifwsetup_module_LDADD) $(LIBS) +net/drivers/efi/$(am__dirstamp): + @$(MKDIR_P) net/drivers/efi + @: > net/drivers/efi/$(am__dirstamp) +net/drivers/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) net/drivers/efi/$(DEPDIR) + @: > net/drivers/efi/$(DEPDIR)/$(am__dirstamp) +net/drivers/efi/efinet_module-efinet.$(OBJEXT): \ + net/drivers/efi/$(am__dirstamp) \ + net/drivers/efi/$(DEPDIR)/$(am__dirstamp) + +efinet.module$(EXEEXT): $(efinet_module_OBJECTS) $(efinet_module_DEPENDENCIES) $(EXTRA_efinet_module_DEPENDENCIES) + @rm -f efinet.module$(EXEEXT) + $(AM_V_CCLD)$(efinet_module_LINK) $(efinet_module_OBJECTS) $(efinet_module_LDADD) $(LIBS) +bus/usb/$(am__dirstamp): + @$(MKDIR_P) bus/usb + @: > bus/usb/$(am__dirstamp) +bus/usb/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) bus/usb/$(DEPDIR) + @: > bus/usb/$(DEPDIR)/$(am__dirstamp) +bus/usb/ehci_module-ehci.$(OBJEXT): bus/usb/$(am__dirstamp) \ + bus/usb/$(DEPDIR)/$(am__dirstamp) + +ehci.module$(EXEEXT): $(ehci_module_OBJECTS) $(ehci_module_DEPENDENCIES) $(EXTRA_ehci_module_DEPENDENCIES) + @rm -f ehci.module$(EXEEXT) + $(AM_V_CCLD)$(ehci_module_LINK) $(ehci_module_OBJECTS) $(ehci_module_LDADD) $(LIBS) +kern/elf_module-elf.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) + +elf.module$(EXEEXT): $(elf_module_OBJECTS) $(elf_module_DEPENDENCIES) $(EXTRA_elf_module_DEPENDENCIES) + @rm -f elf.module$(EXEEXT) + $(AM_V_CCLD)$(elf_module_LINK) $(elf_module_OBJECTS) $(elf_module_LDADD) $(LIBS) +net/drivers/emu/$(am__dirstamp): + @$(MKDIR_P) net/drivers/emu + @: > net/drivers/emu/$(am__dirstamp) +net/drivers/emu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) net/drivers/emu/$(DEPDIR) + @: > net/drivers/emu/$(DEPDIR)/$(am__dirstamp) +net/drivers/emu/emunet_module-emunet.$(OBJEXT): \ + net/drivers/emu/$(am__dirstamp) \ + net/drivers/emu/$(DEPDIR)/$(am__dirstamp) + +emunet.module$(EXEEXT): $(emunet_module_OBJECTS) $(emunet_module_DEPENDENCIES) $(EXTRA_emunet_module_DEPENDENCIES) + @rm -f emunet.module$(EXEEXT) + $(AM_V_CCLD)$(emunet_module_LINK) $(emunet_module_OBJECTS) $(emunet_module_LDADD) $(LIBS) +bus/emu/$(am__dirstamp): + @$(MKDIR_P) bus/emu + @: > bus/emu/$(am__dirstamp) +bus/emu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) bus/emu/$(DEPDIR) + @: > bus/emu/$(DEPDIR)/$(am__dirstamp) +bus/emu/emupci_module-pci.$(OBJEXT): bus/emu/$(am__dirstamp) \ + bus/emu/$(DEPDIR)/$(am__dirstamp) +commands/emupci_module-lspci.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +emupci.module$(EXEEXT): $(emupci_module_OBJECTS) $(emupci_module_DEPENDENCIES) $(EXTRA_emupci_module_DEPENDENCIES) + @rm -f emupci.module$(EXEEXT) + $(AM_V_CCLD)$(emupci_module_LINK) $(emupci_module_OBJECTS) $(emupci_module_LDADD) $(LIBS) +term/ieee1275/$(am__dirstamp): + @$(MKDIR_P) term/ieee1275 + @: > term/ieee1275/$(am__dirstamp) +term/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/ieee1275/$(DEPDIR) + @: > term/ieee1275/$(DEPDIR)/$(am__dirstamp) +term/ieee1275/escc_module-escc.$(OBJEXT): \ + term/ieee1275/$(am__dirstamp) \ + term/ieee1275/$(DEPDIR)/$(am__dirstamp) + +escc.module$(EXEEXT): $(escc_module_OBJECTS) $(escc_module_DEPENDENCIES) $(EXTRA_escc_module_DEPENDENCIES) + @rm -f escc.module$(EXEEXT) + $(AM_V_CCLD)$(escc_module_LINK) $(escc_module_OBJECTS) $(escc_module_LDADD) $(LIBS) +commands/eval_module-eval.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +eval.module$(EXEEXT): $(eval_module_OBJECTS) $(eval_module_DEPENDENCIES) $(EXTRA_eval_module_DEPENDENCIES) + @rm -f eval.module$(EXEEXT) + $(AM_V_CCLD)$(eval_module_LINK) $(eval_module_OBJECTS) $(eval_module_LDADD) $(LIBS) +fs/exfat_module-exfat.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +exfat.module$(EXEEXT): $(exfat_module_OBJECTS) $(exfat_module_DEPENDENCIES) $(EXTRA_exfat_module_DEPENDENCIES) + @rm -f exfat.module$(EXEEXT) + $(AM_V_CCLD)$(exfat_module_LINK) $(exfat_module_OBJECTS) $(exfat_module_LDADD) $(LIBS) +tests/exfctest_module-example_functional_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +exfctest.module$(EXEEXT): $(exfctest_module_OBJECTS) $(exfctest_module_DEPENDENCIES) $(EXTRA_exfctest_module_DEPENDENCIES) + @rm -f exfctest.module$(EXEEXT) + $(AM_V_CCLD)$(exfctest_module_LINK) $(exfctest_module_OBJECTS) $(exfctest_module_LDADD) $(LIBS) +fs/ext2_module-ext2.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +ext2.module$(EXEEXT): $(ext2_module_OBJECTS) $(ext2_module_DEPENDENCIES) $(EXTRA_ext2_module_DEPENDENCIES) + @rm -f ext2.module$(EXEEXT) + $(AM_V_CCLD)$(ext2_module_LINK) $(ext2_module_OBJECTS) $(ext2_module_LDADD) $(LIBS) +commands/extcmd_module-extcmd.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/extcmd_module-arg.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +extcmd.module$(EXEEXT): $(extcmd_module_OBJECTS) $(extcmd_module_DEPENDENCIES) $(EXTRA_extcmd_module_DEPENDENCIES) + @rm -f extcmd.module$(EXEEXT) + $(AM_V_CCLD)$(extcmd_module_LINK) $(extcmd_module_OBJECTS) $(extcmd_module_LDADD) $(LIBS) +fs/fat_module-fat.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +fat.module$(EXEEXT): $(fat_module_OBJECTS) $(fat_module_DEPENDENCIES) $(EXTRA_fat_module_DEPENDENCIES) + @rm -f fat.module$(EXEEXT) + $(AM_V_CCLD)$(fat_module_LINK) $(fat_module_OBJECTS) $(fat_module_LDADD) $(LIBS) +loader/arm64/$(am__dirstamp): + @$(MKDIR_P) loader/arm64 + @: > loader/arm64/$(am__dirstamp) +loader/arm64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/arm64/$(DEPDIR) + @: > loader/arm64/$(DEPDIR)/$(am__dirstamp) +loader/arm64/fdt_module-fdt.$(OBJEXT): loader/arm64/$(am__dirstamp) \ + loader/arm64/$(DEPDIR)/$(am__dirstamp) +lib/fdt_module-fdt.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +fdt.module$(EXEEXT): $(fdt_module_OBJECTS) $(fdt_module_DEPENDENCIES) $(EXTRA_fdt_module_DEPENDENCIES) + @rm -f fdt.module$(EXEEXT) + $(AM_V_CCLD)$(fdt_module_LINK) $(fdt_module_OBJECTS) $(fdt_module_LDADD) $(LIBS) +commands/file_module-file.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +commands/file_module-file32.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +commands/file_module-file64.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +loader/i386/file_module-xen_file.$(OBJEXT): \ + loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/i386/file_module-xen_file32.$(OBJEXT): \ + loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/i386/file_module-xen_file64.$(OBJEXT): \ + loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) + +file.module$(EXEEXT): $(file_module_OBJECTS) $(file_module_DEPENDENCIES) $(EXTRA_file_module_DEPENDENCIES) + @rm -f file.module$(EXEEXT) + $(AM_V_CCLD)$(file_module_LINK) $(file_module_OBJECTS) $(file_module_LDADD) $(LIBS) +commands/efi/fixvideo_module-fixvideo.$(OBJEXT): \ + commands/efi/$(am__dirstamp) \ + commands/efi/$(DEPDIR)/$(am__dirstamp) + +fixvideo.module$(EXEEXT): $(fixvideo_module_OBJECTS) $(fixvideo_module_DEPENDENCIES) $(EXTRA_fixvideo_module_DEPENDENCIES) + @rm -f fixvideo.module$(EXEEXT) + $(AM_V_CCLD)$(fixvideo_module_LINK) $(fixvideo_module_OBJECTS) $(fixvideo_module_LDADD) $(LIBS) +font/$(am__dirstamp): + @$(MKDIR_P) font + @: > font/$(am__dirstamp) +font/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) font/$(DEPDIR) + @: > font/$(DEPDIR)/$(am__dirstamp) +font/font_module-font.$(OBJEXT): font/$(am__dirstamp) \ + font/$(DEPDIR)/$(am__dirstamp) +font/font_module-font_cmd.$(OBJEXT): font/$(am__dirstamp) \ + font/$(DEPDIR)/$(am__dirstamp) + +font.module$(EXEEXT): $(font_module_OBJECTS) $(font_module_DEPENDENCIES) $(EXTRA_font_module_DEPENDENCIES) + @rm -f font.module$(EXEEXT) + $(AM_V_CCLD)$(font_module_LINK) $(font_module_OBJECTS) $(font_module_LDADD) $(LIBS) +loader/i386/pc/freedos_module-freedos.$(OBJEXT): \ + loader/i386/pc/$(am__dirstamp) \ + loader/i386/pc/$(DEPDIR)/$(am__dirstamp) + +freedos.module$(EXEEXT): $(freedos_module_OBJECTS) $(freedos_module_DEPENDENCIES) $(EXTRA_freedos_module_DEPENDENCIES) + @rm -f freedos.module$(EXEEXT) + $(AM_V_CCLD)$(freedos_module_LINK) $(freedos_module_OBJECTS) $(freedos_module_LDADD) $(LIBS) +fs/fshelp_module-fshelp.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +fshelp.module$(EXEEXT): $(fshelp_module_OBJECTS) $(fshelp_module_DEPENDENCIES) $(EXTRA_fshelp_module_DEPENDENCIES) + @rm -f fshelp.module$(EXEEXT) + $(AM_V_CCLD)$(fshelp_module_LINK) $(fshelp_module_OBJECTS) $(fshelp_module_LDADD) $(LIBS) +tests/lib/$(am__dirstamp): + @$(MKDIR_P) tests/lib + @: > tests/lib/$(am__dirstamp) +tests/lib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tests/lib/$(DEPDIR) + @: > tests/lib/$(DEPDIR)/$(am__dirstamp) +tests/lib/functional_test_module-functional_test.$(OBJEXT): \ + tests/lib/$(am__dirstamp) tests/lib/$(DEPDIR)/$(am__dirstamp) +tests/lib/functional_test_module-test.$(OBJEXT): \ + tests/lib/$(am__dirstamp) tests/lib/$(DEPDIR)/$(am__dirstamp) +tests/functional_test_module-video_checksum.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) +tests/functional_test_module-fake_input.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) +video/functional_test_module-capture.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +functional_test.module$(EXEEXT): $(functional_test_module_OBJECTS) $(functional_test_module_DEPENDENCIES) $(EXTRA_functional_test_module_DEPENDENCIES) + @rm -f functional_test.module$(EXEEXT) + $(AM_V_CCLD)$(functional_test_module_LINK) $(functional_test_module_OBJECTS) $(functional_test_module_LDADD) $(LIBS) +boot/mips/loongson/$(am__dirstamp): + @$(MKDIR_P) boot/mips/loongson + @: > boot/mips/loongson/$(am__dirstamp) +boot/mips/loongson/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) boot/mips/loongson/$(DEPDIR) + @: > boot/mips/loongson/$(DEPDIR)/$(am__dirstamp) +boot/mips/loongson/fwstart_image-fwstart.$(OBJEXT): \ + boot/mips/loongson/$(am__dirstamp) \ + boot/mips/loongson/$(DEPDIR)/$(am__dirstamp) + +fwstart.image$(EXEEXT): $(fwstart_image_OBJECTS) $(fwstart_image_DEPENDENCIES) $(EXTRA_fwstart_image_DEPENDENCIES) + @rm -f fwstart.image$(EXEEXT) + $(AM_V_CCLD)$(fwstart_image_LINK) $(fwstart_image_OBJECTS) $(fwstart_image_LDADD) $(LIBS) +boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.$(OBJEXT): \ + boot/mips/loongson/$(am__dirstamp) \ + boot/mips/loongson/$(DEPDIR)/$(am__dirstamp) + +fwstart_fuloong2f.image$(EXEEXT): $(fwstart_fuloong2f_image_OBJECTS) $(fwstart_fuloong2f_image_DEPENDENCIES) $(EXTRA_fwstart_fuloong2f_image_DEPENDENCIES) + @rm -f fwstart_fuloong2f.image$(EXEEXT) + $(AM_V_CCLD)$(fwstart_fuloong2f_image_LINK) $(fwstart_fuloong2f_image_OBJECTS) $(fwstart_fuloong2f_image_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/$(am__dirstamp): + @$(MKDIR_P) lib/libgcrypt-grub/cipher + @: > lib/libgcrypt-grub/cipher/$(am__dirstamp) +lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/libgcrypt-grub/cipher/$(DEPDIR) + @: > lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_arcfour.module$(EXEEXT): $(gcry_arcfour_module_OBJECTS) $(gcry_arcfour_module_DEPENDENCIES) $(EXTRA_gcry_arcfour_module_DEPENDENCIES) + @rm -f gcry_arcfour.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_arcfour_module_LINK) $(gcry_arcfour_module_OBJECTS) $(gcry_arcfour_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_blowfish.module$(EXEEXT): $(gcry_blowfish_module_OBJECTS) $(gcry_blowfish_module_DEPENDENCIES) $(EXTRA_gcry_blowfish_module_DEPENDENCIES) + @rm -f gcry_blowfish.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_blowfish_module_LINK) $(gcry_blowfish_module_OBJECTS) $(gcry_blowfish_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_camellia.module$(EXEEXT): $(gcry_camellia_module_OBJECTS) $(gcry_camellia_module_DEPENDENCIES) $(EXTRA_gcry_camellia_module_DEPENDENCIES) + @rm -f gcry_camellia.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_camellia_module_LINK) $(gcry_camellia_module_OBJECTS) $(gcry_camellia_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_cast5.module$(EXEEXT): $(gcry_cast5_module_OBJECTS) $(gcry_cast5_module_DEPENDENCIES) $(EXTRA_gcry_cast5_module_DEPENDENCIES) + @rm -f gcry_cast5.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_cast5_module_LINK) $(gcry_cast5_module_OBJECTS) $(gcry_cast5_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_crc_module-crc.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_crc.module$(EXEEXT): $(gcry_crc_module_OBJECTS) $(gcry_crc_module_DEPENDENCIES) $(EXTRA_gcry_crc_module_DEPENDENCIES) + @rm -f gcry_crc.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_crc_module_LINK) $(gcry_crc_module_OBJECTS) $(gcry_crc_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_des_module-des.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_des.module$(EXEEXT): $(gcry_des_module_OBJECTS) $(gcry_des_module_DEPENDENCIES) $(EXTRA_gcry_des_module_DEPENDENCIES) + @rm -f gcry_des.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_des_module_LINK) $(gcry_des_module_OBJECTS) $(gcry_des_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_dsa.module$(EXEEXT): $(gcry_dsa_module_OBJECTS) $(gcry_dsa_module_DEPENDENCIES) $(EXTRA_gcry_dsa_module_DEPENDENCIES) + @rm -f gcry_dsa.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_dsa_module_LINK) $(gcry_dsa_module_OBJECTS) $(gcry_dsa_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_idea_module-idea.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_idea.module$(EXEEXT): $(gcry_idea_module_OBJECTS) $(gcry_idea_module_DEPENDENCIES) $(EXTRA_gcry_idea_module_DEPENDENCIES) + @rm -f gcry_idea.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_idea_module_LINK) $(gcry_idea_module_OBJECTS) $(gcry_idea_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_md4_module-md4.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_md4.module$(EXEEXT): $(gcry_md4_module_OBJECTS) $(gcry_md4_module_DEPENDENCIES) $(EXTRA_gcry_md4_module_DEPENDENCIES) + @rm -f gcry_md4.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_md4_module_LINK) $(gcry_md4_module_OBJECTS) $(gcry_md4_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_md5_module-md5.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_md5.module$(EXEEXT): $(gcry_md5_module_OBJECTS) $(gcry_md5_module_DEPENDENCIES) $(EXTRA_gcry_md5_module_DEPENDENCIES) + @rm -f gcry_md5.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_md5_module_LINK) $(gcry_md5_module_OBJECTS) $(gcry_md5_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_rfc2268.module$(EXEEXT): $(gcry_rfc2268_module_OBJECTS) $(gcry_rfc2268_module_DEPENDENCIES) $(EXTRA_gcry_rfc2268_module_DEPENDENCIES) + @rm -f gcry_rfc2268.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_rfc2268_module_LINK) $(gcry_rfc2268_module_OBJECTS) $(gcry_rfc2268_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_rijndael.module$(EXEEXT): $(gcry_rijndael_module_OBJECTS) $(gcry_rijndael_module_DEPENDENCIES) $(EXTRA_gcry_rijndael_module_DEPENDENCIES) + @rm -f gcry_rijndael.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_rijndael_module_LINK) $(gcry_rijndael_module_OBJECTS) $(gcry_rijndael_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_rmd160.module$(EXEEXT): $(gcry_rmd160_module_OBJECTS) $(gcry_rmd160_module_DEPENDENCIES) $(EXTRA_gcry_rmd160_module_DEPENDENCIES) + @rm -f gcry_rmd160.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_rmd160_module_LINK) $(gcry_rmd160_module_OBJECTS) $(gcry_rmd160_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_rsa.module$(EXEEXT): $(gcry_rsa_module_OBJECTS) $(gcry_rsa_module_DEPENDENCIES) $(EXTRA_gcry_rsa_module_DEPENDENCIES) + @rm -f gcry_rsa.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_rsa_module_LINK) $(gcry_rsa_module_OBJECTS) $(gcry_rsa_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_seed_module-seed.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_seed.module$(EXEEXT): $(gcry_seed_module_OBJECTS) $(gcry_seed_module_DEPENDENCIES) $(EXTRA_gcry_seed_module_DEPENDENCIES) + @rm -f gcry_seed.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_seed_module_LINK) $(gcry_seed_module_OBJECTS) $(gcry_seed_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_serpent.module$(EXEEXT): $(gcry_serpent_module_OBJECTS) $(gcry_serpent_module_DEPENDENCIES) $(EXTRA_gcry_serpent_module_DEPENDENCIES) + @rm -f gcry_serpent.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_serpent_module_LINK) $(gcry_serpent_module_OBJECTS) $(gcry_serpent_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_sha1.module$(EXEEXT): $(gcry_sha1_module_OBJECTS) $(gcry_sha1_module_DEPENDENCIES) $(EXTRA_gcry_sha1_module_DEPENDENCIES) + @rm -f gcry_sha1.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_sha1_module_LINK) $(gcry_sha1_module_OBJECTS) $(gcry_sha1_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_sha256.module$(EXEEXT): $(gcry_sha256_module_OBJECTS) $(gcry_sha256_module_DEPENDENCIES) $(EXTRA_gcry_sha256_module_DEPENDENCIES) + @rm -f gcry_sha256.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_sha256_module_LINK) $(gcry_sha256_module_OBJECTS) $(gcry_sha256_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_sha512.module$(EXEEXT): $(gcry_sha512_module_OBJECTS) $(gcry_sha512_module_DEPENDENCIES) $(EXTRA_gcry_sha512_module_DEPENDENCIES) + @rm -f gcry_sha512.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_sha512_module_LINK) $(gcry_sha512_module_OBJECTS) $(gcry_sha512_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_tiger.module$(EXEEXT): $(gcry_tiger_module_OBJECTS) $(gcry_tiger_module_DEPENDENCIES) $(EXTRA_gcry_tiger_module_DEPENDENCIES) + @rm -f gcry_tiger.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_tiger_module_LINK) $(gcry_tiger_module_OBJECTS) $(gcry_tiger_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_twofish.module$(EXEEXT): $(gcry_twofish_module_OBJECTS) $(gcry_twofish_module_DEPENDENCIES) $(EXTRA_gcry_twofish_module_DEPENDENCIES) + @rm -f gcry_twofish.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_twofish_module_LINK) $(gcry_twofish_module_OBJECTS) $(gcry_twofish_module_LDADD) $(LIBS) +lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.$(OBJEXT): \ + lib/libgcrypt-grub/cipher/$(am__dirstamp) \ + lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + +gcry_whirlpool.module$(EXEEXT): $(gcry_whirlpool_module_OBJECTS) $(gcry_whirlpool_module_DEPENDENCIES) $(EXTRA_gcry_whirlpool_module_DEPENDENCIES) + @rm -f gcry_whirlpool.module$(EXEEXT) + $(AM_V_CCLD)$(gcry_whirlpool_module_LINK) $(gcry_whirlpool_module_OBJECTS) $(gcry_whirlpool_module_LDADD) $(LIBS) +gdb/i386/$(am__dirstamp): + @$(MKDIR_P) gdb/i386 + @: > gdb/i386/$(am__dirstamp) +gdb/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) gdb/i386/$(DEPDIR) + @: > gdb/i386/$(DEPDIR)/$(am__dirstamp) +gdb/i386/gdb_module-idt.$(OBJEXT): gdb/i386/$(am__dirstamp) \ + gdb/i386/$(DEPDIR)/$(am__dirstamp) +gdb/i386/gdb_module-machdep.$(OBJEXT): gdb/i386/$(am__dirstamp) \ + gdb/i386/$(DEPDIR)/$(am__dirstamp) +gdb/i386/gdb_module-signal.$(OBJEXT): gdb/i386/$(am__dirstamp) \ + gdb/i386/$(DEPDIR)/$(am__dirstamp) +gdb/$(am__dirstamp): + @$(MKDIR_P) gdb + @: > gdb/$(am__dirstamp) +gdb/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) gdb/$(DEPDIR) + @: > gdb/$(DEPDIR)/$(am__dirstamp) +gdb/gdb_module-cstub.$(OBJEXT): gdb/$(am__dirstamp) \ + gdb/$(DEPDIR)/$(am__dirstamp) +gdb/gdb_module-gdb.$(OBJEXT): gdb/$(am__dirstamp) \ + gdb/$(DEPDIR)/$(am__dirstamp) + +gdb.module$(EXEEXT): $(gdb_module_OBJECTS) $(gdb_module_DEPENDENCIES) $(EXTRA_gdb_module_DEPENDENCIES) + @rm -f gdb.module$(EXEEXT) + $(AM_V_CCLD)$(gdb_module_LINK) $(gdb_module_OBJECTS) $(gdb_module_LDADD) $(LIBS) +disk/geli_module-geli.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +geli.module$(EXEEXT): $(geli_module_OBJECTS) $(geli_module_DEPENDENCIES) $(EXTRA_geli_module_DEPENDENCIES) + @rm -f geli.module$(EXEEXT) + $(AM_V_CCLD)$(geli_module_LINK) $(geli_module_OBJECTS) $(geli_module_LDADD) $(LIBS) +gettext/$(am__dirstamp): + @$(MKDIR_P) gettext + @: > gettext/$(am__dirstamp) +gettext/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) gettext/$(DEPDIR) + @: > gettext/$(DEPDIR)/$(am__dirstamp) +gettext/gettext_module-gettext.$(OBJEXT): gettext/$(am__dirstamp) \ + gettext/$(DEPDIR)/$(am__dirstamp) + +gettext.module$(EXEEXT): $(gettext_module_OBJECTS) $(gettext_module_DEPENDENCIES) $(EXTRA_gettext_module_DEPENDENCIES) + @rm -f gettext.module$(EXEEXT) + $(AM_V_CCLD)$(gettext_module_LINK) $(gettext_module_OBJECTS) $(gettext_module_LDADD) $(LIBS) +gfxmenu/$(am__dirstamp): + @$(MKDIR_P) gfxmenu + @: > gfxmenu/$(am__dirstamp) +gfxmenu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) gfxmenu/$(DEPDIR) + @: > gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gfxmenu.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-view.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-font.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-icon_manager.$(OBJEXT): \ + gfxmenu/$(am__dirstamp) gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-theme_loader.$(OBJEXT): \ + gfxmenu/$(am__dirstamp) gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-widget-box.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_canvas.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_circular_progress.$(OBJEXT): \ + gfxmenu/$(am__dirstamp) gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_box.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_label.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_list.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_image.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_progress_bar.$(OBJEXT): \ + gfxmenu/$(am__dirstamp) gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_util.$(OBJEXT): gfxmenu/$(am__dirstamp) \ + gfxmenu/$(DEPDIR)/$(am__dirstamp) +gfxmenu/gfxmenu_module-gui_string_util.$(OBJEXT): \ + gfxmenu/$(am__dirstamp) gfxmenu/$(DEPDIR)/$(am__dirstamp) + +gfxmenu.module$(EXEEXT): $(gfxmenu_module_OBJECTS) $(gfxmenu_module_DEPENDENCIES) $(EXTRA_gfxmenu_module_DEPENDENCIES) + @rm -f gfxmenu.module$(EXEEXT) + $(AM_V_CCLD)$(gfxmenu_module_LINK) $(gfxmenu_module_OBJECTS) $(gfxmenu_module_LDADD) $(LIBS) +term/gfxterm_module-gfxterm.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) + +gfxterm.module$(EXEEXT): $(gfxterm_module_OBJECTS) $(gfxterm_module_DEPENDENCIES) $(EXTRA_gfxterm_module_DEPENDENCIES) + @rm -f gfxterm.module$(EXEEXT) + $(AM_V_CCLD)$(gfxterm_module_LINK) $(gfxterm_module_OBJECTS) $(gfxterm_module_LDADD) $(LIBS) +term/gfxterm_background_module-gfxterm_background.$(OBJEXT): \ + term/$(am__dirstamp) term/$(DEPDIR)/$(am__dirstamp) + +gfxterm_background.module$(EXEEXT): $(gfxterm_background_module_OBJECTS) $(gfxterm_background_module_DEPENDENCIES) $(EXTRA_gfxterm_background_module_DEPENDENCIES) + @rm -f gfxterm_background.module$(EXEEXT) + $(AM_V_CCLD)$(gfxterm_background_module_LINK) $(gfxterm_background_module_OBJECTS) $(gfxterm_background_module_LDADD) $(LIBS) +tests/gfxterm_menu_module-gfxterm_menu.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +gfxterm_menu.module$(EXEEXT): $(gfxterm_menu_module_OBJECTS) $(gfxterm_menu_module_DEPENDENCIES) $(EXTRA_gfxterm_menu_module_DEPENDENCIES) + @rm -f gfxterm_menu.module$(EXEEXT) + $(AM_V_CCLD)$(gfxterm_menu_module_LINK) $(gfxterm_menu_module_OBJECTS) $(gfxterm_menu_module_LDADD) $(LIBS) +commands/gptsync_module-gptsync.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +gptsync.module$(EXEEXT): $(gptsync_module_OBJECTS) $(gptsync_module_DEPENDENCIES) $(EXTRA_gptsync_module_DEPENDENCIES) + @rm -f gptsync.module$(EXEEXT) + $(AM_V_CCLD)$(gptsync_module_LINK) $(gptsync_module_OBJECTS) $(gptsync_module_LDADD) $(LIBS) +kern/emu/$(am__dirstamp): + @$(MKDIR_P) kern/emu + @: > kern/emu/$(am__dirstamp) +kern/emu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/emu/$(DEPDIR) + @: > kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/grub_emu-full.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) + +grub-emu$(EXEEXT): $(grub_emu_OBJECTS) $(grub_emu_DEPENDENCIES) $(EXTRA_grub_emu_DEPENDENCIES) + @rm -f grub-emu$(EXEEXT) + $(AM_V_CCLD)$(grub_emu_LINK) $(grub_emu_OBJECTS) $(grub_emu_LDADD) $(LIBS) +kern/emu/grub_emu_lite-lite.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) + +grub-emu-lite$(EXEEXT): $(grub_emu_lite_OBJECTS) $(grub_emu_lite_DEPENDENCIES) $(EXTRA_grub_emu_lite_DEPENDENCIES) + @rm -f grub-emu-lite$(EXEEXT) + $(AM_V_CCLD)$(grub_emu_lite_LINK) $(grub_emu_lite_OBJECTS) $(grub_emu_lite_LDADD) $(LIBS) +io/gzio_module-gzio.$(OBJEXT): io/$(am__dirstamp) \ + io/$(DEPDIR)/$(am__dirstamp) + +gzio.module$(EXEEXT): $(gzio_module_OBJECTS) $(gzio_module_DEPENDENCIES) $(EXTRA_gzio_module_DEPENDENCIES) + @rm -f gzio.module$(EXEEXT) + $(AM_V_CCLD)$(gzio_module_LINK) $(gzio_module_OBJECTS) $(gzio_module_LDADD) $(LIBS) +lib/efi/halt_module-halt.$(OBJEXT): lib/efi/$(am__dirstamp) \ + lib/efi/$(DEPDIR)/$(am__dirstamp) +commands/halt_module-halt.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/uboot/halt_module-halt.$(OBJEXT): lib/uboot/$(am__dirstamp) \ + lib/uboot/$(DEPDIR)/$(am__dirstamp) +lib/emu/$(am__dirstamp): + @$(MKDIR_P) lib/emu + @: > lib/emu/$(am__dirstamp) +lib/emu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/emu/$(DEPDIR) + @: > lib/emu/$(DEPDIR)/$(am__dirstamp) +lib/emu/halt_module-halt.$(OBJEXT): lib/emu/$(am__dirstamp) \ + lib/emu/$(DEPDIR)/$(am__dirstamp) +commands/halt_module-acpihalt.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/i386/halt_module-halt.$(OBJEXT): lib/i386/$(am__dirstamp) \ + lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/ieee1275/halt_module-halt.$(OBJEXT): lib/ieee1275/$(am__dirstamp) \ + lib/ieee1275/$(DEPDIR)/$(am__dirstamp) +commands/i386/pc/halt_module-halt.$(OBJEXT): \ + commands/i386/pc/$(am__dirstamp) \ + commands/i386/pc/$(DEPDIR)/$(am__dirstamp) +lib/xen/halt_module-halt.$(OBJEXT): lib/xen/$(am__dirstamp) \ + lib/xen/$(DEPDIR)/$(am__dirstamp) + +halt.module$(EXEEXT): $(halt_module_OBJECTS) $(halt_module_DEPENDENCIES) $(EXTRA_halt_module_DEPENDENCIES) + @rm -f halt.module$(EXEEXT) + $(AM_V_CCLD)$(halt_module_LINK) $(halt_module_OBJECTS) $(halt_module_LDADD) $(LIBS) +commands/hashsum_module-hashsum.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +hashsum.module$(EXEEXT): $(hashsum_module_OBJECTS) $(hashsum_module_DEPENDENCIES) $(EXTRA_hashsum_module_DEPENDENCIES) + @rm -f hashsum.module$(EXEEXT) + $(AM_V_CCLD)$(hashsum_module_LINK) $(hashsum_module_OBJECTS) $(hashsum_module_LDADD) $(LIBS) +commands/hdparm_module-hdparm.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/hdparm_module-hexdump.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +hdparm.module$(EXEEXT): $(hdparm_module_OBJECTS) $(hdparm_module_DEPENDENCIES) $(EXTRA_hdparm_module_DEPENDENCIES) + @rm -f hdparm.module$(EXEEXT) + $(AM_V_CCLD)$(hdparm_module_LINK) $(hdparm_module_OBJECTS) $(hdparm_module_LDADD) $(LIBS) +hello/$(am__dirstamp): + @$(MKDIR_P) hello + @: > hello/$(am__dirstamp) +hello/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) hello/$(DEPDIR) + @: > hello/$(DEPDIR)/$(am__dirstamp) +hello/hello_module-hello.$(OBJEXT): hello/$(am__dirstamp) \ + hello/$(DEPDIR)/$(am__dirstamp) + +hello.module$(EXEEXT): $(hello_module_OBJECTS) $(hello_module_DEPENDENCIES) $(EXTRA_hello_module_DEPENDENCIES) + @rm -f hello.module$(EXEEXT) + $(AM_V_CCLD)$(hello_module_LINK) $(hello_module_OBJECTS) $(hello_module_LDADD) $(LIBS) +commands/help_module-help.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +help.module$(EXEEXT): $(help_module_OBJECTS) $(help_module_DEPENDENCIES) $(EXTRA_help_module_DEPENDENCIES) + @rm -f help.module$(EXEEXT) + $(AM_V_CCLD)$(help_module_LINK) $(help_module_OBJECTS) $(help_module_LDADD) $(LIBS) +commands/hexdump_module-hexdump.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/hexdump_module-hexdump.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +hexdump.module$(EXEEXT): $(hexdump_module_OBJECTS) $(hexdump_module_DEPENDENCIES) $(EXTRA_hexdump_module_DEPENDENCIES) + @rm -f hexdump.module$(EXEEXT) + $(AM_V_CCLD)$(hexdump_module_LINK) $(hexdump_module_OBJECTS) $(hexdump_module_LDADD) $(LIBS) +fs/hfs_module-hfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +hfs.module$(EXEEXT): $(hfs_module_OBJECTS) $(hfs_module_DEPENDENCIES) $(EXTRA_hfs_module_DEPENDENCIES) + @rm -f hfs.module$(EXEEXT) + $(AM_V_CCLD)$(hfs_module_LINK) $(hfs_module_OBJECTS) $(hfs_module_LDADD) $(LIBS) +fs/hfsplus_module-hfsplus.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +hfsplus.module$(EXEEXT): $(hfsplus_module_OBJECTS) $(hfsplus_module_DEPENDENCIES) $(EXTRA_hfsplus_module_DEPENDENCIES) + @rm -f hfsplus.module$(EXEEXT) + $(AM_V_CCLD)$(hfsplus_module_LINK) $(hfsplus_module_OBJECTS) $(hfsplus_module_LDADD) $(LIBS) +fs/hfspluscomp_module-hfspluscomp.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +hfspluscomp.module$(EXEEXT): $(hfspluscomp_module_OBJECTS) $(hfspluscomp_module_DEPENDENCIES) $(EXTRA_hfspluscomp_module_DEPENDENCIES) + @rm -f hfspluscomp.module$(EXEEXT) + $(AM_V_CCLD)$(hfspluscomp_module_LINK) $(hfspluscomp_module_OBJECTS) $(hfspluscomp_module_LDADD) $(LIBS) +net/$(am__dirstamp): + @$(MKDIR_P) net + @: > net/$(am__dirstamp) +net/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) net/$(DEPDIR) + @: > net/$(DEPDIR)/$(am__dirstamp) +net/http_module-http.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) + +http.module$(EXEEXT): $(http_module_OBJECTS) $(http_module_DEPENDENCIES) $(EXTRA_http_module_DEPENDENCIES) + @rm -f http.module$(EXEEXT) + $(AM_V_CCLD)$(http_module_LINK) $(http_module_OBJECTS) $(http_module_LDADD) $(LIBS) +video/ieee1275_fb_module-ieee1275.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +ieee1275_fb.module$(EXEEXT): $(ieee1275_fb_module_OBJECTS) $(ieee1275_fb_module_DEPENDENCIES) $(EXTRA_ieee1275_fb_module_DEPENDENCIES) + @rm -f ieee1275_fb.module$(EXEEXT) + $(AM_V_CCLD)$(ieee1275_fb_module_LINK) $(ieee1275_fb_module_OBJECTS) $(ieee1275_fb_module_LDADD) $(LIBS) +commands/iorw_module-iorw.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +iorw.module$(EXEEXT): $(iorw_module_OBJECTS) $(iorw_module_DEPENDENCIES) $(EXTRA_iorw_module_DEPENDENCIES) + @rm -f iorw.module$(EXEEXT) + $(AM_V_CCLD)$(iorw_module_LINK) $(iorw_module_OBJECTS) $(iorw_module_LDADD) $(LIBS) +fs/iso9660_module-iso9660.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +iso9660.module$(EXEEXT): $(iso9660_module_OBJECTS) $(iso9660_module_DEPENDENCIES) $(EXTRA_iso9660_module_DEPENDENCIES) + @rm -f iso9660.module$(EXEEXT) + $(AM_V_CCLD)$(iso9660_module_LINK) $(iso9660_module_OBJECTS) $(iso9660_module_LDADD) $(LIBS) +fs/jfs_module-jfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +jfs.module$(EXEEXT): $(jfs_module_OBJECTS) $(jfs_module_DEPENDENCIES) $(EXTRA_jfs_module_DEPENDENCIES) + @rm -f jfs.module$(EXEEXT) + $(AM_V_CCLD)$(jfs_module_LINK) $(jfs_module_OBJECTS) $(jfs_module_LDADD) $(LIBS) +video/readers/$(am__dirstamp): + @$(MKDIR_P) video/readers + @: > video/readers/$(am__dirstamp) +video/readers/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) video/readers/$(DEPDIR) + @: > video/readers/$(DEPDIR)/$(am__dirstamp) +video/readers/jpeg_module-jpeg.$(OBJEXT): \ + video/readers/$(am__dirstamp) \ + video/readers/$(DEPDIR)/$(am__dirstamp) + +jpeg.module$(EXEEXT): $(jpeg_module_OBJECTS) $(jpeg_module_DEPENDENCIES) $(EXTRA_jpeg_module_DEPENDENCIES) + @rm -f jpeg.module$(EXEEXT) + $(AM_V_CCLD)$(jpeg_module_LINK) $(jpeg_module_OBJECTS) $(jpeg_module_LDADD) $(LIBS) +kern/arm64/efi/$(am__dirstamp): + @$(MKDIR_P) kern/arm64/efi + @: > kern/arm64/efi/$(am__dirstamp) +kern/arm64/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/arm64/efi/$(DEPDIR) + @: > kern/arm64/efi/$(DEPDIR)/$(am__dirstamp) +kern/arm64/efi/kernel_exec-startup.$(OBJEXT): \ + kern/arm64/efi/$(am__dirstamp) \ + kern/arm64/efi/$(DEPDIR)/$(am__dirstamp) +kern/arm64/efi/kernel_exec-init.$(OBJEXT): \ + kern/arm64/efi/$(am__dirstamp) \ + kern/arm64/efi/$(DEPDIR)/$(am__dirstamp) +kern/efi/$(am__dirstamp): + @$(MKDIR_P) kern/efi + @: > kern/efi/$(am__dirstamp) +kern/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/efi/$(DEPDIR) + @: > kern/efi/$(DEPDIR)/$(am__dirstamp) +kern/efi/kernel_exec-fdt.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) +kern/arm64/$(am__dirstamp): + @$(MKDIR_P) kern/arm64 + @: > kern/arm64/$(am__dirstamp) +kern/arm64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/arm64/$(DEPDIR) + @: > kern/arm64/$(DEPDIR)/$(am__dirstamp) +kern/arm64/kernel_exec-cache.$(OBJEXT): kern/arm64/$(am__dirstamp) \ + kern/arm64/$(DEPDIR)/$(am__dirstamp) +kern/arm64/kernel_exec-cache_flush.$(OBJEXT): \ + kern/arm64/$(am__dirstamp) \ + kern/arm64/$(DEPDIR)/$(am__dirstamp) +kern/arm64/kernel_exec-dl.$(OBJEXT): kern/arm64/$(am__dirstamp) \ + kern/arm64/$(DEPDIR)/$(am__dirstamp) +kern/arm64/kernel_exec-dl_helper.$(OBJEXT): \ + kern/arm64/$(am__dirstamp) \ + kern/arm64/$(DEPDIR)/$(am__dirstamp) +disk/efi/$(am__dirstamp): + @$(MKDIR_P) disk/efi + @: > disk/efi/$(am__dirstamp) +disk/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) disk/efi/$(DEPDIR) + @: > disk/efi/$(DEPDIR)/$(am__dirstamp) +disk/efi/kernel_exec-efidisk.$(OBJEXT): disk/efi/$(am__dirstamp) \ + disk/efi/$(DEPDIR)/$(am__dirstamp) +kern/efi/kernel_exec-efi.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) +kern/efi/kernel_exec-init.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) +kern/efi/kernel_exec-mm.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) +term/efi/$(am__dirstamp): + @$(MKDIR_P) term/efi + @: > term/efi/$(am__dirstamp) +term/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/efi/$(DEPDIR) + @: > term/efi/$(DEPDIR)/$(am__dirstamp) +term/efi/kernel_exec-console.$(OBJEXT): term/efi/$(am__dirstamp) \ + term/efi/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-acpi.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/efi/kernel_exec-acpi.$(OBJEXT): kern/efi/$(am__dirstamp) \ + kern/efi/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-compiler-rt.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-mm.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-time.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/generic/$(am__dirstamp): + @$(MKDIR_P) kern/generic + @: > kern/generic/$(am__dirstamp) +kern/generic/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/generic/$(DEPDIR) + @: > kern/generic/$(DEPDIR)/$(am__dirstamp) +kern/generic/kernel_exec-millisleep.$(OBJEXT): \ + kern/generic/$(am__dirstamp) \ + kern/generic/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-command.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-corecmd.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-device.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-disk.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-dl.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-env.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-err.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-file.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-fs.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-list.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-main.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-misc.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-parser.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-partition.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-rescue_parser.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-rescue_reader.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-term.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/arm/efi/$(am__dirstamp): + @$(MKDIR_P) kern/arm/efi + @: > kern/arm/efi/$(am__dirstamp) +kern/arm/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/arm/efi/$(DEPDIR) + @: > kern/arm/efi/$(DEPDIR)/$(am__dirstamp) +kern/arm/efi/kernel_exec-startup.$(OBJEXT): \ + kern/arm/efi/$(am__dirstamp) \ + kern/arm/efi/$(DEPDIR)/$(am__dirstamp) +kern/arm/efi/kernel_exec-init.$(OBJEXT): kern/arm/efi/$(am__dirstamp) \ + kern/arm/efi/$(DEPDIR)/$(am__dirstamp) +kern/arm/efi/kernel_exec-misc.$(OBJEXT): kern/arm/efi/$(am__dirstamp) \ + kern/arm/efi/$(DEPDIR)/$(am__dirstamp) +kern/arm/$(am__dirstamp): + @$(MKDIR_P) kern/arm + @: > kern/arm/$(am__dirstamp) +kern/arm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/arm/$(DEPDIR) + @: > kern/arm/$(DEPDIR)/$(am__dirstamp) +kern/arm/kernel_exec-dl.$(OBJEXT): kern/arm/$(am__dirstamp) \ + kern/arm/$(DEPDIR)/$(am__dirstamp) +kern/arm/kernel_exec-dl_helper.$(OBJEXT): kern/arm/$(am__dirstamp) \ + kern/arm/$(DEPDIR)/$(am__dirstamp) +kern/arm/kernel_exec-cache_armv6.$(OBJEXT): kern/arm/$(am__dirstamp) \ + kern/arm/$(DEPDIR)/$(am__dirstamp) +kern/arm/kernel_exec-cache_armv7.$(OBJEXT): kern/arm/$(am__dirstamp) \ + kern/arm/$(DEPDIR)/$(am__dirstamp) +kern/arm/kernel_exec-cache.$(OBJEXT): kern/arm/$(am__dirstamp) \ + kern/arm/$(DEPDIR)/$(am__dirstamp) +kern/arm/kernel_exec-compiler-rt.$(OBJEXT): kern/arm/$(am__dirstamp) \ + kern/arm/$(DEPDIR)/$(am__dirstamp) +lib/kernel_exec-division.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +kern/arm/uboot/$(am__dirstamp): + @$(MKDIR_P) kern/arm/uboot + @: > kern/arm/uboot/$(am__dirstamp) +kern/arm/uboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/arm/uboot/$(DEPDIR) + @: > kern/arm/uboot/$(DEPDIR)/$(am__dirstamp) +kern/arm/uboot/kernel_exec-startup.$(OBJEXT): \ + kern/arm/uboot/$(am__dirstamp) \ + kern/arm/uboot/$(DEPDIR)/$(am__dirstamp) +disk/uboot/$(am__dirstamp): + @$(MKDIR_P) disk/uboot + @: > disk/uboot/$(am__dirstamp) +disk/uboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) disk/uboot/$(DEPDIR) + @: > disk/uboot/$(DEPDIR)/$(am__dirstamp) +disk/uboot/kernel_exec-ubootdisk.$(OBJEXT): \ + disk/uboot/$(am__dirstamp) \ + disk/uboot/$(DEPDIR)/$(am__dirstamp) +kern/uboot/$(am__dirstamp): + @$(MKDIR_P) kern/uboot + @: > kern/uboot/$(am__dirstamp) +kern/uboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/uboot/$(DEPDIR) + @: > kern/uboot/$(DEPDIR)/$(am__dirstamp) +kern/uboot/kernel_exec-uboot.$(OBJEXT): kern/uboot/$(am__dirstamp) \ + kern/uboot/$(DEPDIR)/$(am__dirstamp) +kern/uboot/kernel_exec-init.$(OBJEXT): kern/uboot/$(am__dirstamp) \ + kern/uboot/$(DEPDIR)/$(am__dirstamp) +kern/uboot/kernel_exec-hw.$(OBJEXT): kern/uboot/$(am__dirstamp) \ + kern/uboot/$(DEPDIR)/$(am__dirstamp) +term/uboot/$(am__dirstamp): + @$(MKDIR_P) term/uboot + @: > term/uboot/$(am__dirstamp) +term/uboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/uboot/$(DEPDIR) + @: > term/uboot/$(DEPDIR)/$(am__dirstamp) +term/uboot/kernel_exec-console.$(OBJEXT): term/uboot/$(am__dirstamp) \ + term/uboot/$(DEPDIR)/$(am__dirstamp) +term/kernel_exec-terminfo.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +term/kernel_exec-tparm.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +commands/kernel_exec-extcmd.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/kernel_exec-arg.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +disk/kernel_exec-host.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-cache_s.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-hostdisk.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +osdep/unix/$(am__dirstamp): + @$(MKDIR_P) osdep/unix + @: > osdep/unix/$(am__dirstamp) +osdep/unix/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) osdep/unix/$(DEPDIR) + @: > osdep/unix/$(DEPDIR)/$(am__dirstamp) +osdep/unix/kernel_exec-hostdisk.$(OBJEXT): osdep/unix/$(am__dirstamp) \ + osdep/unix/$(DEPDIR)/$(am__dirstamp) +osdep/$(am__dirstamp): + @$(MKDIR_P) osdep + @: > osdep/$(am__dirstamp) +osdep/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) osdep/$(DEPDIR) + @: > osdep/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-exec.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +osdep/devmapper/$(am__dirstamp): + @$(MKDIR_P) osdep/devmapper + @: > osdep/devmapper/$(am__dirstamp) +osdep/devmapper/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) osdep/devmapper/$(DEPDIR) + @: > osdep/devmapper/$(DEPDIR)/$(am__dirstamp) +osdep/devmapper/kernel_exec-hostdisk.$(OBJEXT): \ + osdep/devmapper/$(am__dirstamp) \ + osdep/devmapper/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-hostdisk.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-hostfs.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-main.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-argp_common.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-misc.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-mm.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-time.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +kern/emu/kernel_exec-cache.$(OBJEXT): kern/emu/$(am__dirstamp) \ + kern/emu/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-emuconsole.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-dl.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-sleep.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-init.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-emunet.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +osdep/kernel_exec-cputime.$(OBJEXT): osdep/$(am__dirstamp) \ + osdep/$(DEPDIR)/$(am__dirstamp) +kern/i386/coreboot/kernel_exec-startup.$(OBJEXT): \ + kern/i386/coreboot/$(am__dirstamp) \ + kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +kern/i386/coreboot/kernel_exec-init.$(OBJEXT): \ + kern/i386/coreboot/$(am__dirstamp) \ + kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +video/i386/coreboot/$(am__dirstamp): + @$(MKDIR_P) video/i386/coreboot + @: > video/i386/coreboot/$(am__dirstamp) +video/i386/coreboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) video/i386/coreboot/$(DEPDIR) + @: > video/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +video/i386/coreboot/kernel_exec-cbfb.$(OBJEXT): \ + video/i386/coreboot/$(am__dirstamp) \ + video/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +kern/i386/pc/kernel_exec-acpi.$(OBJEXT): kern/i386/pc/$(am__dirstamp) \ + kern/i386/pc/$(DEPDIR)/$(am__dirstamp) +kern/i386/$(am__dirstamp): + @$(MKDIR_P) kern/i386 + @: > kern/i386/$(am__dirstamp) +kern/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/i386/$(DEPDIR) + @: > kern/i386/$(DEPDIR)/$(am__dirstamp) +kern/i386/kernel_exec-tsc_pmtimer.$(OBJEXT): \ + kern/i386/$(am__dirstamp) kern/i386/$(DEPDIR)/$(am__dirstamp) +kern/i386/coreboot/kernel_exec-mmap.$(OBJEXT): \ + kern/i386/coreboot/$(am__dirstamp) \ + kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +kern/i386/coreboot/kernel_exec-cbtable.$(OBJEXT): \ + kern/i386/coreboot/$(am__dirstamp) \ + kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp) +term/kernel_exec-gfxterm.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +font/kernel_exec-font.$(OBJEXT): font/$(am__dirstamp) \ + font/$(DEPDIR)/$(am__dirstamp) +font/kernel_exec-font_cmd.$(OBJEXT): font/$(am__dirstamp) \ + font/$(DEPDIR)/$(am__dirstamp) +io/kernel_exec-bufio.$(OBJEXT): io/$(am__dirstamp) \ + io/$(DEPDIR)/$(am__dirstamp) +video/fb/$(am__dirstamp): + @$(MKDIR_P) video/fb + @: > video/fb/$(am__dirstamp) +video/fb/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) video/fb/$(DEPDIR) + @: > video/fb/$(DEPDIR)/$(am__dirstamp) +video/fb/kernel_exec-fbblit.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) +video/fb/kernel_exec-fbfill.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) +video/fb/kernel_exec-fbutil.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) +video/fb/kernel_exec-video_fb.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) +video/kernel_exec-video.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) +term/i386/pc/$(am__dirstamp): + @$(MKDIR_P) term/i386/pc + @: > term/i386/pc/$(am__dirstamp) +term/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/i386/pc/$(DEPDIR) + @: > term/i386/pc/$(DEPDIR)/$(am__dirstamp) +term/i386/pc/kernel_exec-vga_text.$(OBJEXT): \ + term/i386/pc/$(am__dirstamp) \ + term/i386/pc/$(DEPDIR)/$(am__dirstamp) +kern/i386/kernel_exec-dl.$(OBJEXT): kern/i386/$(am__dirstamp) \ + kern/i386/$(DEPDIR)/$(am__dirstamp) +kern/i386/kernel_exec-tsc.$(OBJEXT): kern/i386/$(am__dirstamp) \ + kern/i386/$(DEPDIR)/$(am__dirstamp) +kern/i386/kernel_exec-tsc_pit.$(OBJEXT): kern/i386/$(am__dirstamp) \ + kern/i386/$(DEPDIR)/$(am__dirstamp) +kern/i386/efi/$(am__dirstamp): + @$(MKDIR_P) kern/i386/efi + @: > kern/i386/efi/$(am__dirstamp) +kern/i386/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/i386/efi/$(DEPDIR) + @: > kern/i386/efi/$(DEPDIR)/$(am__dirstamp) +kern/i386/efi/kernel_exec-startup.$(OBJEXT): \ + kern/i386/efi/$(am__dirstamp) \ + kern/i386/efi/$(DEPDIR)/$(am__dirstamp) +kern/i386/efi/kernel_exec-tsc.$(OBJEXT): \ + kern/i386/efi/$(am__dirstamp) \ + kern/i386/efi/$(DEPDIR)/$(am__dirstamp) +kern/i386/efi/kernel_exec-init.$(OBJEXT): \ + kern/i386/efi/$(am__dirstamp) \ + kern/i386/efi/$(DEPDIR)/$(am__dirstamp) +bus/kernel_exec-pci.$(OBJEXT): bus/$(am__dirstamp) \ + bus/$(DEPDIR)/$(am__dirstamp) +kern/i386/ieee1275/$(am__dirstamp): + @$(MKDIR_P) kern/i386/ieee1275 + @: > kern/i386/ieee1275/$(am__dirstamp) +kern/i386/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/i386/ieee1275/$(DEPDIR) + @: > kern/i386/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/i386/ieee1275/kernel_exec-startup.$(OBJEXT): \ + kern/i386/ieee1275/$(am__dirstamp) \ + kern/i386/ieee1275/$(DEPDIR)/$(am__dirstamp) +disk/ieee1275/$(am__dirstamp): + @$(MKDIR_P) disk/ieee1275 + @: > disk/ieee1275/$(am__dirstamp) +disk/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) disk/ieee1275/$(DEPDIR) + @: > disk/ieee1275/$(DEPDIR)/$(am__dirstamp) +disk/ieee1275/kernel_exec-ofdisk.$(OBJEXT): \ + disk/ieee1275/$(am__dirstamp) \ + disk/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/ieee1275/$(am__dirstamp): + @$(MKDIR_P) kern/ieee1275 + @: > kern/ieee1275/$(am__dirstamp) +kern/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/ieee1275/$(DEPDIR) + @: > kern/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/ieee1275/kernel_exec-cmain.$(OBJEXT): \ + kern/ieee1275/$(am__dirstamp) \ + kern/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/ieee1275/kernel_exec-ieee1275.$(OBJEXT): \ + kern/ieee1275/$(am__dirstamp) \ + kern/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/ieee1275/kernel_exec-mmap.$(OBJEXT): \ + kern/ieee1275/$(am__dirstamp) \ + kern/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/ieee1275/kernel_exec-openfw.$(OBJEXT): \ + kern/ieee1275/$(am__dirstamp) \ + kern/ieee1275/$(DEPDIR)/$(am__dirstamp) +term/ieee1275/kernel_exec-console.$(OBJEXT): \ + term/ieee1275/$(am__dirstamp) \ + term/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/ieee1275/kernel_exec-init.$(OBJEXT): \ + kern/ieee1275/$(am__dirstamp) \ + kern/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/i386/kernel_exec-multiboot_mmap.$(OBJEXT): \ + kern/i386/$(am__dirstamp) kern/i386/$(DEPDIR)/$(am__dirstamp) +kern/i386/pc/kernel_exec-startup.$(OBJEXT): \ + kern/i386/pc/$(am__dirstamp) \ + kern/i386/pc/$(DEPDIR)/$(am__dirstamp) +kern/i386/pc/kernel_exec-init.$(OBJEXT): kern/i386/pc/$(am__dirstamp) \ + kern/i386/pc/$(DEPDIR)/$(am__dirstamp) +kern/i386/pc/kernel_exec-mmap.$(OBJEXT): kern/i386/pc/$(am__dirstamp) \ + kern/i386/pc/$(DEPDIR)/$(am__dirstamp) +term/i386/pc/kernel_exec-console.$(OBJEXT): \ + term/i386/pc/$(am__dirstamp) \ + term/i386/pc/$(DEPDIR)/$(am__dirstamp) +kern/i386/qemu/$(am__dirstamp): + @$(MKDIR_P) kern/i386/qemu + @: > kern/i386/qemu/$(am__dirstamp) +kern/i386/qemu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/i386/qemu/$(DEPDIR) + @: > kern/i386/qemu/$(DEPDIR)/$(am__dirstamp) +kern/i386/qemu/kernel_exec-startup.$(OBJEXT): \ + kern/i386/qemu/$(am__dirstamp) \ + kern/i386/qemu/$(DEPDIR)/$(am__dirstamp) +kern/i386/qemu/kernel_exec-init.$(OBJEXT): \ + kern/i386/qemu/$(am__dirstamp) \ + kern/i386/qemu/$(DEPDIR)/$(am__dirstamp) +kern/kernel_exec-vga_init.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) +kern/i386/qemu/kernel_exec-mmap.$(OBJEXT): \ + kern/i386/qemu/$(am__dirstamp) \ + kern/i386/qemu/$(DEPDIR)/$(am__dirstamp) +kern/i386/xen/$(am__dirstamp): + @$(MKDIR_P) kern/i386/xen + @: > kern/i386/xen/$(am__dirstamp) +kern/i386/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/i386/xen/$(DEPDIR) + @: > kern/i386/xen/$(DEPDIR)/$(am__dirstamp) +kern/i386/xen/kernel_exec-startup.$(OBJEXT): \ + kern/i386/xen/$(am__dirstamp) \ + kern/i386/xen/$(DEPDIR)/$(am__dirstamp) +kern/i386/xen/kernel_exec-hypercall.$(OBJEXT): \ + kern/i386/xen/$(am__dirstamp) \ + kern/i386/xen/$(DEPDIR)/$(am__dirstamp) +kern/i386/xen/kernel_exec-tsc.$(OBJEXT): \ + kern/i386/xen/$(am__dirstamp) \ + kern/i386/xen/$(DEPDIR)/$(am__dirstamp) +kern/xen/$(am__dirstamp): + @$(MKDIR_P) kern/xen + @: > kern/xen/$(am__dirstamp) +kern/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/xen/$(DEPDIR) + @: > kern/xen/$(DEPDIR)/$(am__dirstamp) +kern/xen/kernel_exec-init.$(OBJEXT): kern/xen/$(am__dirstamp) \ + kern/xen/$(DEPDIR)/$(am__dirstamp) +term/xen/$(am__dirstamp): + @$(MKDIR_P) term/xen + @: > term/xen/$(am__dirstamp) +term/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/xen/$(DEPDIR) + @: > term/xen/$(DEPDIR)/$(am__dirstamp) +term/xen/kernel_exec-console.$(OBJEXT): term/xen/$(am__dirstamp) \ + term/xen/$(DEPDIR)/$(am__dirstamp) +disk/xen/$(am__dirstamp): + @$(MKDIR_P) disk/xen + @: > disk/xen/$(am__dirstamp) +disk/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) disk/xen/$(DEPDIR) + @: > disk/xen/$(DEPDIR)/$(am__dirstamp) +disk/xen/kernel_exec-xendisk.$(OBJEXT): disk/xen/$(am__dirstamp) \ + disk/xen/$(DEPDIR)/$(am__dirstamp) +commands/kernel_exec-boot.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +kern/ia64/efi/$(am__dirstamp): + @$(MKDIR_P) kern/ia64/efi + @: > kern/ia64/efi/$(am__dirstamp) +kern/ia64/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/ia64/efi/$(DEPDIR) + @: > kern/ia64/efi/$(DEPDIR)/$(am__dirstamp) +kern/ia64/efi/kernel_exec-startup.$(OBJEXT): \ + kern/ia64/efi/$(am__dirstamp) \ + kern/ia64/efi/$(DEPDIR)/$(am__dirstamp) +kern/ia64/efi/kernel_exec-init.$(OBJEXT): \ + kern/ia64/efi/$(am__dirstamp) \ + kern/ia64/efi/$(DEPDIR)/$(am__dirstamp) +kern/ia64/$(am__dirstamp): + @$(MKDIR_P) kern/ia64 + @: > kern/ia64/$(am__dirstamp) +kern/ia64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/ia64/$(DEPDIR) + @: > kern/ia64/$(DEPDIR)/$(am__dirstamp) +kern/ia64/kernel_exec-dl.$(OBJEXT): kern/ia64/$(am__dirstamp) \ + kern/ia64/$(DEPDIR)/$(am__dirstamp) +kern/ia64/kernel_exec-dl_helper.$(OBJEXT): kern/ia64/$(am__dirstamp) \ + kern/ia64/$(DEPDIR)/$(am__dirstamp) +kern/ia64/kernel_exec-cache.$(OBJEXT): kern/ia64/$(am__dirstamp) \ + kern/ia64/$(DEPDIR)/$(am__dirstamp) +kern/mips/$(am__dirstamp): + @$(MKDIR_P) kern/mips + @: > kern/mips/$(am__dirstamp) +kern/mips/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/mips/$(DEPDIR) + @: > kern/mips/$(DEPDIR)/$(am__dirstamp) +kern/mips/kernel_exec-startup.$(OBJEXT): kern/mips/$(am__dirstamp) \ + kern/mips/$(DEPDIR)/$(am__dirstamp) +kern/mips/arc/$(am__dirstamp): + @$(MKDIR_P) kern/mips/arc + @: > kern/mips/arc/$(am__dirstamp) +kern/mips/arc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/mips/arc/$(DEPDIR) + @: > kern/mips/arc/$(DEPDIR)/$(am__dirstamp) +kern/mips/arc/kernel_exec-init.$(OBJEXT): \ + kern/mips/arc/$(am__dirstamp) \ + kern/mips/arc/$(DEPDIR)/$(am__dirstamp) +term/arc/$(am__dirstamp): + @$(MKDIR_P) term/arc + @: > term/arc/$(am__dirstamp) +term/arc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) term/arc/$(DEPDIR) + @: > term/arc/$(DEPDIR)/$(am__dirstamp) +term/arc/kernel_exec-console.$(OBJEXT): term/arc/$(am__dirstamp) \ + term/arc/$(DEPDIR)/$(am__dirstamp) +disk/arc/$(am__dirstamp): + @$(MKDIR_P) disk/arc + @: > disk/arc/$(am__dirstamp) +disk/arc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) disk/arc/$(DEPDIR) + @: > disk/arc/$(DEPDIR)/$(am__dirstamp) +disk/arc/kernel_exec-arcdisk.$(OBJEXT): disk/arc/$(am__dirstamp) \ + disk/arc/$(DEPDIR)/$(am__dirstamp) +kern/generic/kernel_exec-rtc_get_time_ms.$(OBJEXT): \ + kern/generic/$(am__dirstamp) \ + kern/generic/$(DEPDIR)/$(am__dirstamp) +kern/mips/kernel_exec-cache.$(OBJEXT): kern/mips/$(am__dirstamp) \ + kern/mips/$(DEPDIR)/$(am__dirstamp) +kern/mips/kernel_exec-dl.$(OBJEXT): kern/mips/$(am__dirstamp) \ + kern/mips/$(DEPDIR)/$(am__dirstamp) +kern/mips/kernel_exec-init.$(OBJEXT): kern/mips/$(am__dirstamp) \ + kern/mips/$(DEPDIR)/$(am__dirstamp) +term/kernel_exec-ns8250.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +bus/kernel_exec-bonito.$(OBJEXT): bus/$(am__dirstamp) \ + bus/$(DEPDIR)/$(am__dirstamp) +bus/kernel_exec-cs5536.$(OBJEXT): bus/$(am__dirstamp) \ + bus/$(DEPDIR)/$(am__dirstamp) +kern/mips/loongson/$(am__dirstamp): + @$(MKDIR_P) kern/mips/loongson + @: > kern/mips/loongson/$(am__dirstamp) +kern/mips/loongson/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/mips/loongson/$(DEPDIR) + @: > kern/mips/loongson/$(DEPDIR)/$(am__dirstamp) +kern/mips/loongson/kernel_exec-init.$(OBJEXT): \ + kern/mips/loongson/$(am__dirstamp) \ + kern/mips/loongson/$(DEPDIR)/$(am__dirstamp) +term/kernel_exec-at_keyboard.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +term/kernel_exec-serial.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +video/kernel_exec-sm712.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) +video/kernel_exec-sis315pro.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) +video/kernel_exec-radeon_fuloong2e.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) +video/kernel_exec-radeon_yeeloong3a.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) +commands/kernel_exec-keylayouts.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +kern/mips/qemu_mips/$(am__dirstamp): + @$(MKDIR_P) kern/mips/qemu_mips + @: > kern/mips/qemu_mips/$(am__dirstamp) +kern/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/mips/qemu_mips/$(DEPDIR) + @: > kern/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp) +kern/mips/qemu_mips/kernel_exec-init.$(OBJEXT): \ + kern/mips/qemu_mips/$(am__dirstamp) \ + kern/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp) +kern/powerpc/ieee1275/$(am__dirstamp): + @$(MKDIR_P) kern/powerpc/ieee1275 + @: > kern/powerpc/ieee1275/$(am__dirstamp) +kern/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/powerpc/ieee1275/$(DEPDIR) + @: > kern/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/powerpc/ieee1275/kernel_exec-startup.$(OBJEXT): \ + kern/powerpc/ieee1275/$(am__dirstamp) \ + kern/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/powerpc/$(am__dirstamp): + @$(MKDIR_P) kern/powerpc + @: > kern/powerpc/$(am__dirstamp) +kern/powerpc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/powerpc/$(DEPDIR) + @: > kern/powerpc/$(DEPDIR)/$(am__dirstamp) +kern/powerpc/kernel_exec-cache.$(OBJEXT): \ + kern/powerpc/$(am__dirstamp) \ + kern/powerpc/$(DEPDIR)/$(am__dirstamp) +kern/powerpc/kernel_exec-dl.$(OBJEXT): kern/powerpc/$(am__dirstamp) \ + kern/powerpc/$(DEPDIR)/$(am__dirstamp) +kern/powerpc/kernel_exec-compiler-rt.$(OBJEXT): \ + kern/powerpc/$(am__dirstamp) \ + kern/powerpc/$(DEPDIR)/$(am__dirstamp) +kern/sparc64/ieee1275/$(am__dirstamp): + @$(MKDIR_P) kern/sparc64/ieee1275 + @: > kern/sparc64/ieee1275/$(am__dirstamp) +kern/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/sparc64/ieee1275/$(DEPDIR) + @: > kern/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/sparc64/ieee1275/kernel_exec-crt0.$(OBJEXT): \ + kern/sparc64/ieee1275/$(am__dirstamp) \ + kern/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/sparc64/$(am__dirstamp): + @$(MKDIR_P) kern/sparc64 + @: > kern/sparc64/$(am__dirstamp) +kern/sparc64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/sparc64/$(DEPDIR) + @: > kern/sparc64/$(DEPDIR)/$(am__dirstamp) +kern/sparc64/kernel_exec-cache.$(OBJEXT): \ + kern/sparc64/$(am__dirstamp) \ + kern/sparc64/$(DEPDIR)/$(am__dirstamp) +kern/sparc64/kernel_exec-dl.$(OBJEXT): kern/sparc64/$(am__dirstamp) \ + kern/sparc64/$(DEPDIR)/$(am__dirstamp) +kern/sparc64/ieee1275/kernel_exec-ieee1275.$(OBJEXT): \ + kern/sparc64/ieee1275/$(am__dirstamp) \ + kern/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/efi/$(am__dirstamp): + @$(MKDIR_P) kern/x86_64/efi + @: > kern/x86_64/efi/$(am__dirstamp) +kern/x86_64/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/x86_64/efi/$(DEPDIR) + @: > kern/x86_64/efi/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/efi/kernel_exec-startup.$(OBJEXT): \ + kern/x86_64/efi/$(am__dirstamp) \ + kern/x86_64/efi/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/efi/kernel_exec-callwrap.$(OBJEXT): \ + kern/x86_64/efi/$(am__dirstamp) \ + kern/x86_64/efi/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/$(am__dirstamp): + @$(MKDIR_P) kern/x86_64 + @: > kern/x86_64/$(am__dirstamp) +kern/x86_64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/x86_64/$(DEPDIR) + @: > kern/x86_64/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/kernel_exec-dl.$(OBJEXT): kern/x86_64/$(am__dirstamp) \ + kern/x86_64/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/xen/$(am__dirstamp): + @$(MKDIR_P) kern/x86_64/xen + @: > kern/x86_64/xen/$(am__dirstamp) +kern/x86_64/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) kern/x86_64/xen/$(DEPDIR) + @: > kern/x86_64/xen/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/xen/kernel_exec-startup.$(OBJEXT): \ + kern/x86_64/xen/$(am__dirstamp) \ + kern/x86_64/xen/$(DEPDIR)/$(am__dirstamp) +kern/x86_64/xen/kernel_exec-hypercall.$(OBJEXT): \ + kern/x86_64/xen/$(am__dirstamp) \ + kern/x86_64/xen/$(DEPDIR)/$(am__dirstamp) + +kernel.exec$(EXEEXT): $(kernel_exec_OBJECTS) $(kernel_exec_DEPENDENCIES) $(EXTRA_kernel_exec_DEPENDENCIES) + @rm -f kernel.exec$(EXEEXT) + $(AM_V_CCLD)$(kernel_exec_LINK) $(kernel_exec_OBJECTS) $(kernel_exec_LDADD) $(LIBS) +commands/keylayouts_module-keylayouts.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +keylayouts.module$(EXEEXT): $(keylayouts_module_OBJECTS) $(keylayouts_module_DEPENDENCIES) $(EXTRA_keylayouts_module_DEPENDENCIES) + @rm -f keylayouts.module$(EXEEXT) + $(AM_V_CCLD)$(keylayouts_module_LINK) $(keylayouts_module_OBJECTS) $(keylayouts_module_LDADD) $(LIBS) +commands/keystatus_module-keystatus.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +keystatus.module$(EXEEXT): $(keystatus_module_OBJECTS) $(keystatus_module_DEPENDENCIES) $(EXTRA_keystatus_module_DEPENDENCIES) + @rm -f keystatus.module$(EXEEXT) + $(AM_V_CCLD)$(keystatus_module_LINK) $(keystatus_module_OBJECTS) $(keystatus_module_LDADD) $(LIBS) +disk/ldm_module-ldm.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +ldm.module$(EXEEXT): $(ldm_module_OBJECTS) $(ldm_module_DEPENDENCIES) $(EXTRA_ldm_module_DEPENDENCIES) + @rm -f ldm.module$(EXEEXT) + $(AM_V_CCLD)$(ldm_module_LINK) $(ldm_module_OBJECTS) $(ldm_module_LDADD) $(LIBS) +tests/legacy_password_test_module-legacy_password_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +legacy_password_test.module$(EXEEXT): $(legacy_password_test_module_OBJECTS) $(legacy_password_test_module_DEPENDENCIES) $(EXTRA_legacy_password_test_module_DEPENDENCIES) + @rm -f legacy_password_test.module$(EXEEXT) + $(AM_V_CCLD)$(legacy_password_test_module_LINK) $(legacy_password_test_module_OBJECTS) $(legacy_password_test_module_LDADD) $(LIBS) +lib/i386/pc/legacycfg_module-vesa_modes_table.$(OBJEXT): \ + lib/i386/pc/$(am__dirstamp) \ + lib/i386/pc/$(DEPDIR)/$(am__dirstamp) +commands/legacycfg_module-legacycfg.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) +lib/legacycfg_module-legacy_parse.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +legacycfg.module$(EXEEXT): $(legacycfg_module_OBJECTS) $(legacycfg_module_DEPENDENCIES) $(EXTRA_legacycfg_module_DEPENDENCIES) + @rm -f legacycfg.module$(EXEEXT) + $(AM_V_CCLD)$(legacycfg_module_LINK) $(legacycfg_module_OBJECTS) $(legacycfg_module_LDADD) $(LIBS) +loader/arm64/linux_module-linux.$(OBJEXT): \ + loader/arm64/$(am__dirstamp) \ + loader/arm64/$(DEPDIR)/$(am__dirstamp) +loader/linux_module-linux.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +lib/linux_module-cmdline.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +loader/arm/$(am__dirstamp): + @$(MKDIR_P) loader/arm + @: > loader/arm/$(am__dirstamp) +loader/arm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/arm/$(DEPDIR) + @: > loader/arm/$(DEPDIR)/$(am__dirstamp) +loader/arm/linux_module-linux.$(OBJEXT): loader/arm/$(am__dirstamp) \ + loader/arm/$(DEPDIR)/$(am__dirstamp) +loader/i386/linux_module-linux.$(OBJEXT): loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/pc/linux_module-vesa_modes_table.$(OBJEXT): \ + lib/i386/pc/$(am__dirstamp) \ + lib/i386/pc/$(DEPDIR)/$(am__dirstamp) +loader/i386/linux_module-xen.$(OBJEXT): loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/ia64/efi/$(am__dirstamp): + @$(MKDIR_P) loader/ia64/efi + @: > loader/ia64/efi/$(am__dirstamp) +loader/ia64/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/ia64/efi/$(DEPDIR) + @: > loader/ia64/efi/$(DEPDIR)/$(am__dirstamp) +loader/ia64/efi/linux_module-linux.$(OBJEXT): \ + loader/ia64/efi/$(am__dirstamp) \ + loader/ia64/efi/$(DEPDIR)/$(am__dirstamp) +loader/mips/$(am__dirstamp): + @$(MKDIR_P) loader/mips + @: > loader/mips/$(am__dirstamp) +loader/mips/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/mips/$(DEPDIR) + @: > loader/mips/$(DEPDIR)/$(am__dirstamp) +loader/mips/linux_module-linux.$(OBJEXT): loader/mips/$(am__dirstamp) \ + loader/mips/$(DEPDIR)/$(am__dirstamp) +loader/powerpc/ieee1275/$(am__dirstamp): + @$(MKDIR_P) loader/powerpc/ieee1275 + @: > loader/powerpc/ieee1275/$(am__dirstamp) +loader/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/powerpc/ieee1275/$(DEPDIR) + @: > loader/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp) +loader/powerpc/ieee1275/linux_module-linux.$(OBJEXT): \ + loader/powerpc/ieee1275/$(am__dirstamp) \ + loader/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp) +loader/sparc64/ieee1275/$(am__dirstamp): + @$(MKDIR_P) loader/sparc64/ieee1275 + @: > loader/sparc64/ieee1275/$(am__dirstamp) +loader/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) loader/sparc64/ieee1275/$(DEPDIR) + @: > loader/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) +loader/sparc64/ieee1275/linux_module-linux.$(OBJEXT): \ + loader/sparc64/ieee1275/$(am__dirstamp) \ + loader/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) + +linux.module$(EXEEXT): $(linux_module_OBJECTS) $(linux_module_DEPENDENCIES) $(EXTRA_linux_module_DEPENDENCIES) + @rm -f linux.module$(EXEEXT) + $(AM_V_CCLD)$(linux_module_LINK) $(linux_module_OBJECTS) $(linux_module_LDADD) $(LIBS) +loader/i386/pc/linux16_module-linux.$(OBJEXT): \ + loader/i386/pc/$(am__dirstamp) \ + loader/i386/pc/$(DEPDIR)/$(am__dirstamp) +loader/linux16_module-linux.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +lib/linux16_module-cmdline.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +linux16.module$(EXEEXT): $(linux16_module_OBJECTS) $(linux16_module_DEPENDENCIES) $(EXTRA_linux16_module_DEPENDENCIES) + @rm -f linux16.module$(EXEEXT) + $(AM_V_CCLD)$(linux16_module_LINK) $(linux16_module_OBJECTS) $(linux16_module_LDADD) $(LIBS) +boot/i386/pc/lnxboot_image-lnxboot.$(OBJEXT): \ + boot/i386/pc/$(am__dirstamp) \ + boot/i386/pc/$(DEPDIR)/$(am__dirstamp) + +lnxboot.image$(EXEEXT): $(lnxboot_image_OBJECTS) $(lnxboot_image_DEPENDENCIES) $(EXTRA_lnxboot_image_DEPENDENCIES) + @rm -f lnxboot.image$(EXEEXT) + $(AM_V_CCLD)$(lnxboot_image_LINK) $(lnxboot_image_OBJECTS) $(lnxboot_image_LDADD) $(LIBS) +commands/efi/loadbios_module-loadbios.$(OBJEXT): \ + commands/efi/$(am__dirstamp) \ + commands/efi/$(DEPDIR)/$(am__dirstamp) + +loadbios.module$(EXEEXT): $(loadbios_module_OBJECTS) $(loadbios_module_DEPENDENCIES) $(EXTRA_loadbios_module_DEPENDENCIES) + @rm -f loadbios.module$(EXEEXT) + $(AM_V_CCLD)$(loadbios_module_LINK) $(loadbios_module_OBJECTS) $(loadbios_module_LDADD) $(LIBS) +commands/loadenv_module-loadenv.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/loadenv_module-envblk.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +loadenv.module$(EXEEXT): $(loadenv_module_OBJECTS) $(loadenv_module_DEPENDENCIES) $(EXTRA_loadenv_module_DEPENDENCIES) + @rm -f loadenv.module$(EXEEXT) + $(AM_V_CCLD)$(loadenv_module_LINK) $(loadenv_module_OBJECTS) $(loadenv_module_LDADD) $(LIBS) +disk/loopback_module-loopback.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +loopback.module$(EXEEXT): $(loopback_module_OBJECTS) $(loopback_module_DEPENDENCIES) $(EXTRA_loopback_module_DEPENDENCIES) + @rm -f loopback.module$(EXEEXT) + $(AM_V_CCLD)$(loopback_module_LINK) $(loopback_module_OBJECTS) $(loopback_module_LDADD) $(LIBS) +commands/ls_module-ls.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +ls.module$(EXEEXT): $(ls_module_OBJECTS) $(ls_module_DEPENDENCIES) $(EXTRA_ls_module_DEPENDENCIES) + @rm -f ls.module$(EXEEXT) + $(AM_V_CCLD)$(ls_module_LINK) $(ls_module_OBJECTS) $(ls_module_LDADD) $(LIBS) +commands/lsacpi_module-lsacpi.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +lsacpi.module$(EXEEXT): $(lsacpi_module_OBJECTS) $(lsacpi_module_DEPENDENCIES) $(EXTRA_lsacpi_module_DEPENDENCIES) + @rm -f lsacpi.module$(EXEEXT) + $(AM_V_CCLD)$(lsacpi_module_LINK) $(lsacpi_module_OBJECTS) $(lsacpi_module_LDADD) $(LIBS) +commands/i386/pc/lsapm_module-lsapm.$(OBJEXT): \ + commands/i386/pc/$(am__dirstamp) \ + commands/i386/pc/$(DEPDIR)/$(am__dirstamp) + +lsapm.module$(EXEEXT): $(lsapm_module_OBJECTS) $(lsapm_module_DEPENDENCIES) $(EXTRA_lsapm_module_DEPENDENCIES) + @rm -f lsapm.module$(EXEEXT) + $(AM_V_CCLD)$(lsapm_module_LINK) $(lsapm_module_OBJECTS) $(lsapm_module_LDADD) $(LIBS) +commands/arc/$(am__dirstamp): + @$(MKDIR_P) commands/arc + @: > commands/arc/$(am__dirstamp) +commands/arc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/arc/$(DEPDIR) + @: > commands/arc/$(DEPDIR)/$(am__dirstamp) +commands/arc/lsdev_module-lsdev.$(OBJEXT): \ + commands/arc/$(am__dirstamp) \ + commands/arc/$(DEPDIR)/$(am__dirstamp) + +lsdev.module$(EXEEXT): $(lsdev_module_OBJECTS) $(lsdev_module_DEPENDENCIES) $(EXTRA_lsdev_module_DEPENDENCIES) + @rm -f lsdev.module$(EXEEXT) + $(AM_V_CCLD)$(lsdev_module_LINK) $(lsdev_module_OBJECTS) $(lsdev_module_LDADD) $(LIBS) +commands/efi/lsefi_module-lsefi.$(OBJEXT): \ + commands/efi/$(am__dirstamp) \ + commands/efi/$(DEPDIR)/$(am__dirstamp) + +lsefi.module$(EXEEXT): $(lsefi_module_OBJECTS) $(lsefi_module_DEPENDENCIES) $(EXTRA_lsefi_module_DEPENDENCIES) + @rm -f lsefi.module$(EXEEXT) + $(AM_V_CCLD)$(lsefi_module_LINK) $(lsefi_module_OBJECTS) $(lsefi_module_LDADD) $(LIBS) +commands/efi/lsefimmap_module-lsefimmap.$(OBJEXT): \ + commands/efi/$(am__dirstamp) \ + commands/efi/$(DEPDIR)/$(am__dirstamp) + +lsefimmap.module$(EXEEXT): $(lsefimmap_module_OBJECTS) $(lsefimmap_module_DEPENDENCIES) $(EXTRA_lsefimmap_module_DEPENDENCIES) + @rm -f lsefimmap.module$(EXEEXT) + $(AM_V_CCLD)$(lsefimmap_module_LINK) $(lsefimmap_module_OBJECTS) $(lsefimmap_module_LDADD) $(LIBS) +commands/efi/lsefisystab_module-lsefisystab.$(OBJEXT): \ + commands/efi/$(am__dirstamp) \ + commands/efi/$(DEPDIR)/$(am__dirstamp) + +lsefisystab.module$(EXEEXT): $(lsefisystab_module_OBJECTS) $(lsefisystab_module_DEPENDENCIES) $(EXTRA_lsefisystab_module_DEPENDENCIES) + @rm -f lsefisystab.module$(EXEEXT) + $(AM_V_CCLD)$(lsefisystab_module_LINK) $(lsefisystab_module_OBJECTS) $(lsefisystab_module_LDADD) $(LIBS) +commands/lsmmap_module-lsmmap.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +lsmmap.module$(EXEEXT): $(lsmmap_module_OBJECTS) $(lsmmap_module_DEPENDENCIES) $(EXTRA_lsmmap_module_DEPENDENCIES) + @rm -f lsmmap.module$(EXEEXT) + $(AM_V_CCLD)$(lsmmap_module_LINK) $(lsmmap_module_OBJECTS) $(lsmmap_module_LDADD) $(LIBS) +commands/lspci_module-lspci.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +lspci.module$(EXEEXT): $(lspci_module_OBJECTS) $(lspci_module_DEPENDENCIES) $(EXTRA_lspci_module_DEPENDENCIES) + @rm -f lspci.module$(EXEEXT) + $(AM_V_CCLD)$(lspci_module_LINK) $(lspci_module_OBJECTS) $(lspci_module_LDADD) $(LIBS) +commands/efi/lssal_module-lssal.$(OBJEXT): \ + commands/efi/$(am__dirstamp) \ + commands/efi/$(DEPDIR)/$(am__dirstamp) + +lssal.module$(EXEEXT): $(lssal_module_OBJECTS) $(lssal_module_DEPENDENCIES) $(EXTRA_lssal_module_DEPENDENCIES) + @rm -f lssal.module$(EXEEXT) + $(AM_V_CCLD)$(lssal_module_LINK) $(lssal_module_OBJECTS) $(lssal_module_LDADD) $(LIBS) +commands/mips/loongson/$(am__dirstamp): + @$(MKDIR_P) commands/mips/loongson + @: > commands/mips/loongson/$(am__dirstamp) +commands/mips/loongson/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/mips/loongson/$(DEPDIR) + @: > commands/mips/loongson/$(DEPDIR)/$(am__dirstamp) +commands/mips/loongson/lsspd_module-lsspd.$(OBJEXT): \ + commands/mips/loongson/$(am__dirstamp) \ + commands/mips/loongson/$(DEPDIR)/$(am__dirstamp) + +lsspd.module$(EXEEXT): $(lsspd_module_OBJECTS) $(lsspd_module_DEPENDENCIES) $(EXTRA_lsspd_module_DEPENDENCIES) + @rm -f lsspd.module$(EXEEXT) + $(AM_V_CCLD)$(lsspd_module_LINK) $(lsspd_module_OBJECTS) $(lsspd_module_LDADD) $(LIBS) +commands/xen/$(am__dirstamp): + @$(MKDIR_P) commands/xen + @: > commands/xen/$(am__dirstamp) +commands/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/xen/$(DEPDIR) + @: > commands/xen/$(DEPDIR)/$(am__dirstamp) +commands/xen/lsxen_module-lsxen.$(OBJEXT): \ + commands/xen/$(am__dirstamp) \ + commands/xen/$(DEPDIR)/$(am__dirstamp) + +lsxen.module$(EXEEXT): $(lsxen_module_OBJECTS) $(lsxen_module_DEPENDENCIES) $(EXTRA_lsxen_module_DEPENDENCIES) + @rm -f lsxen.module$(EXEEXT) + $(AM_V_CCLD)$(lsxen_module_LINK) $(lsxen_module_OBJECTS) $(lsxen_module_LDADD) $(LIBS) +disk/luks_module-luks.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) +disk/luks_module-AFSplitter.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +luks.module$(EXEEXT): $(luks_module_OBJECTS) $(luks_module_DEPENDENCIES) $(EXTRA_luks_module_DEPENDENCIES) + @rm -f luks.module$(EXEEXT) + $(AM_V_CCLD)$(luks_module_LINK) $(luks_module_OBJECTS) $(luks_module_LDADD) $(LIBS) +disk/lvm_module-lvm.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +lvm.module$(EXEEXT): $(lvm_module_OBJECTS) $(lvm_module_DEPENDENCIES) $(EXTRA_lvm_module_DEPENDENCIES) + @rm -f lvm.module$(EXEEXT) + $(AM_V_CCLD)$(lvm_module_LINK) $(lvm_module_OBJECTS) $(lvm_module_LDADD) $(LIBS) +boot/i386/pc/lzma_decompress_image-startup_raw.$(OBJEXT): \ + boot/i386/pc/$(am__dirstamp) \ + boot/i386/pc/$(DEPDIR)/$(am__dirstamp) + +lzma_decompress.image$(EXEEXT): $(lzma_decompress_image_OBJECTS) $(lzma_decompress_image_DEPENDENCIES) $(EXTRA_lzma_decompress_image_DEPENDENCIES) + @rm -f lzma_decompress.image$(EXEEXT) + $(AM_V_CCLD)$(lzma_decompress_image_LINK) $(lzma_decompress_image_OBJECTS) $(lzma_decompress_image_LDADD) $(LIBS) +io/lzopio_module-lzopio.$(OBJEXT): io/$(am__dirstamp) \ + io/$(DEPDIR)/$(am__dirstamp) +lib/minilzo/$(am__dirstamp): + @$(MKDIR_P) lib/minilzo + @: > lib/minilzo/$(am__dirstamp) +lib/minilzo/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/minilzo/$(DEPDIR) + @: > lib/minilzo/$(DEPDIR)/$(am__dirstamp) +lib/minilzo/lzopio_module-minilzo.$(OBJEXT): \ + lib/minilzo/$(am__dirstamp) \ + lib/minilzo/$(DEPDIR)/$(am__dirstamp) + +lzopio.module$(EXEEXT): $(lzopio_module_OBJECTS) $(lzopio_module_DEPENDENCIES) $(EXTRA_lzopio_module_DEPENDENCIES) + @rm -f lzopio.module$(EXEEXT) + $(AM_V_CCLD)$(lzopio_module_LINK) $(lzopio_module_OBJECTS) $(lzopio_module_LDADD) $(LIBS) +commands/macbless_module-macbless.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +macbless.module$(EXEEXT): $(macbless_module_OBJECTS) $(macbless_module_DEPENDENCIES) $(EXTRA_macbless_module_DEPENDENCIES) + @rm -f macbless.module$(EXEEXT) + $(AM_V_CCLD)$(macbless_module_LINK) $(macbless_module_OBJECTS) $(macbless_module_LDADD) $(LIBS) +loader/macho_module-macho.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +loader/macho_module-macho32.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +loader/macho_module-macho64.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +loader/macho_module-lzss.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) + +macho.module$(EXEEXT): $(macho_module_OBJECTS) $(macho_module_DEPENDENCIES) $(EXTRA_macho_module_DEPENDENCIES) + @rm -f macho.module$(EXEEXT) + $(AM_V_CCLD)$(macho_module_LINK) $(macho_module_OBJECTS) $(macho_module_LDADD) $(LIBS) +term/i386/pc/mda_text_module-mda_text.$(OBJEXT): \ + term/i386/pc/$(am__dirstamp) \ + term/i386/pc/$(DEPDIR)/$(am__dirstamp) + +mda_text.module$(EXEEXT): $(mda_text_module_OBJECTS) $(mda_text_module_DEPENDENCIES) $(EXTRA_mda_text_module_DEPENDENCIES) + @rm -f mda_text.module$(EXEEXT) + $(AM_V_CCLD)$(mda_text_module_LINK) $(mda_text_module_OBJECTS) $(mda_text_module_LDADD) $(LIBS) +disk/mdraid09_module-mdraid_linux.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +mdraid09.module$(EXEEXT): $(mdraid09_module_OBJECTS) $(mdraid09_module_DEPENDENCIES) $(EXTRA_mdraid09_module_DEPENDENCIES) + @rm -f mdraid09.module$(EXEEXT) + $(AM_V_CCLD)$(mdraid09_module_LINK) $(mdraid09_module_OBJECTS) $(mdraid09_module_LDADD) $(LIBS) +disk/mdraid09_be_module-mdraid_linux_be.$(OBJEXT): \ + disk/$(am__dirstamp) disk/$(DEPDIR)/$(am__dirstamp) + +mdraid09_be.module$(EXEEXT): $(mdraid09_be_module_OBJECTS) $(mdraid09_be_module_DEPENDENCIES) $(EXTRA_mdraid09_be_module_DEPENDENCIES) + @rm -f mdraid09_be.module$(EXEEXT) + $(AM_V_CCLD)$(mdraid09_be_module_LINK) $(mdraid09_be_module_OBJECTS) $(mdraid09_be_module_LDADD) $(LIBS) +disk/mdraid1x_module-mdraid1x_linux.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +mdraid1x.module$(EXEEXT): $(mdraid1x_module_OBJECTS) $(mdraid1x_module_DEPENDENCIES) $(EXTRA_mdraid1x_module_DEPENDENCIES) + @rm -f mdraid1x.module$(EXEEXT) + $(AM_V_CCLD)$(mdraid1x_module_LINK) $(mdraid1x_module_OBJECTS) $(mdraid1x_module_LDADD) $(LIBS) +disk/memdisk_module-memdisk.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +memdisk.module$(EXEEXT): $(memdisk_module_OBJECTS) $(memdisk_module_DEPENDENCIES) $(EXTRA_memdisk_module_DEPENDENCIES) + @rm -f memdisk.module$(EXEEXT) + $(AM_V_CCLD)$(memdisk_module_LINK) $(memdisk_module_OBJECTS) $(memdisk_module_LDADD) $(LIBS) +commands/memrw_module-memrw.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +memrw.module$(EXEEXT): $(memrw_module_OBJECTS) $(memrw_module_DEPENDENCIES) $(EXTRA_memrw_module_DEPENDENCIES) + @rm -f memrw.module$(EXEEXT) + $(AM_V_CCLD)$(memrw_module_LINK) $(memrw_module_OBJECTS) $(memrw_module_LDADD) $(LIBS) +commands/minicmd_module-minicmd.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +minicmd.module$(EXEEXT): $(minicmd_module_OBJECTS) $(minicmd_module_DEPENDENCIES) $(EXTRA_minicmd_module_DEPENDENCIES) + @rm -f minicmd.module$(EXEEXT) + $(AM_V_CCLD)$(minicmd_module_LINK) $(minicmd_module_OBJECTS) $(minicmd_module_LDADD) $(LIBS) +fs/minix_module-minix.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +minix.module$(EXEEXT): $(minix_module_OBJECTS) $(minix_module_DEPENDENCIES) $(EXTRA_minix_module_DEPENDENCIES) + @rm -f minix.module$(EXEEXT) + $(AM_V_CCLD)$(minix_module_LINK) $(minix_module_OBJECTS) $(minix_module_LDADD) $(LIBS) +fs/minix2_module-minix2.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +minix2.module$(EXEEXT): $(minix2_module_OBJECTS) $(minix2_module_DEPENDENCIES) $(EXTRA_minix2_module_DEPENDENCIES) + @rm -f minix2.module$(EXEEXT) + $(AM_V_CCLD)$(minix2_module_LINK) $(minix2_module_OBJECTS) $(minix2_module_LDADD) $(LIBS) +fs/minix2_be_module-minix2_be.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +minix2_be.module$(EXEEXT): $(minix2_be_module_OBJECTS) $(minix2_be_module_DEPENDENCIES) $(EXTRA_minix2_be_module_DEPENDENCIES) + @rm -f minix2_be.module$(EXEEXT) + $(AM_V_CCLD)$(minix2_be_module_LINK) $(minix2_be_module_OBJECTS) $(minix2_be_module_LDADD) $(LIBS) +fs/minix3_module-minix3.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +minix3.module$(EXEEXT): $(minix3_module_OBJECTS) $(minix3_module_DEPENDENCIES) $(EXTRA_minix3_module_DEPENDENCIES) + @rm -f minix3.module$(EXEEXT) + $(AM_V_CCLD)$(minix3_module_LINK) $(minix3_module_OBJECTS) $(minix3_module_LDADD) $(LIBS) +fs/minix3_be_module-minix3_be.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +minix3_be.module$(EXEEXT): $(minix3_be_module_OBJECTS) $(minix3_be_module_DEPENDENCIES) $(EXTRA_minix3_be_module_DEPENDENCIES) + @rm -f minix3_be.module$(EXEEXT) + $(AM_V_CCLD)$(minix3_be_module_LINK) $(minix3_be_module_OBJECTS) $(minix3_be_module_LDADD) $(LIBS) +fs/minix_be_module-minix_be.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +minix_be.module$(EXEEXT): $(minix_be_module_OBJECTS) $(minix_be_module_DEPENDENCIES) $(EXTRA_minix_be_module_DEPENDENCIES) + @rm -f minix_be.module$(EXEEXT) + $(AM_V_CCLD)$(minix_be_module_LINK) $(minix_be_module_OBJECTS) $(minix_be_module_LDADD) $(LIBS) +mmap/efi/$(am__dirstamp): + @$(MKDIR_P) mmap/efi + @: > mmap/efi/$(am__dirstamp) +mmap/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mmap/efi/$(DEPDIR) + @: > mmap/efi/$(DEPDIR)/$(am__dirstamp) +mmap/efi/mmap_module-mmap.$(OBJEXT): mmap/efi/$(am__dirstamp) \ + mmap/efi/$(DEPDIR)/$(am__dirstamp) +mmap/$(am__dirstamp): + @$(MKDIR_P) mmap + @: > mmap/$(am__dirstamp) +mmap/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mmap/$(DEPDIR) + @: > mmap/$(DEPDIR)/$(am__dirstamp) +mmap/mmap_module-mmap.$(OBJEXT): mmap/$(am__dirstamp) \ + mmap/$(DEPDIR)/$(am__dirstamp) +mmap/i386/$(am__dirstamp): + @$(MKDIR_P) mmap/i386 + @: > mmap/i386/$(am__dirstamp) +mmap/i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mmap/i386/$(DEPDIR) + @: > mmap/i386/$(DEPDIR)/$(am__dirstamp) +mmap/i386/mmap_module-uppermem.$(OBJEXT): mmap/i386/$(am__dirstamp) \ + mmap/i386/$(DEPDIR)/$(am__dirstamp) +mmap/i386/mmap_module-mmap.$(OBJEXT): mmap/i386/$(am__dirstamp) \ + mmap/i386/$(DEPDIR)/$(am__dirstamp) +mmap/i386/pc/$(am__dirstamp): + @$(MKDIR_P) mmap/i386/pc + @: > mmap/i386/pc/$(am__dirstamp) +mmap/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mmap/i386/pc/$(DEPDIR) + @: > mmap/i386/pc/$(DEPDIR)/$(am__dirstamp) +mmap/i386/pc/mmap_module-mmap.$(OBJEXT): mmap/i386/pc/$(am__dirstamp) \ + mmap/i386/pc/$(DEPDIR)/$(am__dirstamp) +mmap/i386/pc/mmap_module-mmap_helper.$(OBJEXT): \ + mmap/i386/pc/$(am__dirstamp) \ + mmap/i386/pc/$(DEPDIR)/$(am__dirstamp) +mmap/mips/$(am__dirstamp): + @$(MKDIR_P) mmap/mips + @: > mmap/mips/$(am__dirstamp) +mmap/mips/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mmap/mips/$(DEPDIR) + @: > mmap/mips/$(DEPDIR)/$(am__dirstamp) +mmap/mips/mmap_module-uppermem.$(OBJEXT): mmap/mips/$(am__dirstamp) \ + mmap/mips/$(DEPDIR)/$(am__dirstamp) + +mmap.module$(EXEEXT): $(mmap_module_OBJECTS) $(mmap_module_DEPENDENCIES) $(EXTRA_mmap_module_DEPENDENCIES) + @rm -f mmap.module$(EXEEXT) + $(AM_V_CCLD)$(mmap_module_LINK) $(mmap_module_OBJECTS) $(mmap_module_LDADD) $(LIBS) +term/morse_module-morse.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) + +morse.module$(EXEEXT): $(morse_module_OBJECTS) $(morse_module_DEPENDENCIES) $(EXTRA_morse_module_DEPENDENCIES) + @rm -f morse.module$(EXEEXT) + $(AM_V_CCLD)$(morse_module_LINK) $(morse_module_OBJECTS) $(morse_module_LDADD) $(LIBS) +lib/libgcrypt-grub/mpi/$(am__dirstamp): + @$(MKDIR_P) lib/libgcrypt-grub/mpi + @: > lib/libgcrypt-grub/mpi/$(am__dirstamp) +lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/libgcrypt-grub/mpi/$(DEPDIR) + @: > lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpiutil.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-add.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-div.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-div.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpicoder.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.$(OBJEXT): \ + lib/libgcrypt-grub/mpi/$(am__dirstamp) \ + lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt_wrap/$(am__dirstamp): + @$(MKDIR_P) lib/libgcrypt_wrap + @: > lib/libgcrypt_wrap/$(am__dirstamp) +lib/libgcrypt_wrap/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/libgcrypt_wrap/$(DEPDIR) + @: > lib/libgcrypt_wrap/$(DEPDIR)/$(am__dirstamp) +lib/libgcrypt_wrap/mpi_module-mem.$(OBJEXT): \ + lib/libgcrypt_wrap/$(am__dirstamp) \ + lib/libgcrypt_wrap/$(DEPDIR)/$(am__dirstamp) + +mpi.module$(EXEEXT): $(mpi_module_OBJECTS) $(mpi_module_DEPENDENCIES) $(EXTRA_mpi_module_DEPENDENCIES) + @rm -f mpi.module$(EXEEXT) + $(AM_V_CCLD)$(mpi_module_LINK) $(mpi_module_OBJECTS) $(mpi_module_LDADD) $(LIBS) +parttool/$(am__dirstamp): + @$(MKDIR_P) parttool + @: > parttool/$(am__dirstamp) +parttool/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) parttool/$(DEPDIR) + @: > parttool/$(DEPDIR)/$(am__dirstamp) +parttool/msdospart_module-msdospart.$(OBJEXT): \ + parttool/$(am__dirstamp) parttool/$(DEPDIR)/$(am__dirstamp) + +msdospart.module$(EXEEXT): $(msdospart_module_OBJECTS) $(msdospart_module_DEPENDENCIES) $(EXTRA_msdospart_module_DEPENDENCIES) + @rm -f msdospart.module$(EXEEXT) + $(AM_V_CCLD)$(msdospart_module_LINK) $(msdospart_module_OBJECTS) $(msdospart_module_LDADD) $(LIBS) +tests/mul_test_module-mul_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +mul_test.module$(EXEEXT): $(mul_test_module_OBJECTS) $(mul_test_module_DEPENDENCIES) $(EXTRA_mul_test_module_DEPENDENCIES) + @rm -f mul_test.module$(EXEEXT) + $(AM_V_CCLD)$(mul_test_module_LINK) $(mul_test_module_OBJECTS) $(mul_test_module_LDADD) $(LIBS) +loader/i386/multiboot_module-multiboot_mbi.$(OBJEXT): \ + loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/multiboot_module-multiboot.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +lib/multiboot_module-cmdline.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +multiboot.module$(EXEEXT): $(multiboot_module_OBJECTS) $(multiboot_module_DEPENDENCIES) $(EXTRA_multiboot_module_DEPENDENCIES) + @rm -f multiboot.module$(EXEEXT) + $(AM_V_CCLD)$(multiboot_module_LINK) $(multiboot_module_OBJECTS) $(multiboot_module_LDADD) $(LIBS) +loader/multiboot2_module-multiboot.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +lib/multiboot2_module-cmdline.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +loader/multiboot2_module-multiboot_mbi2.$(OBJEXT): \ + loader/$(am__dirstamp) loader/$(DEPDIR)/$(am__dirstamp) + +multiboot2.module$(EXEEXT): $(multiboot2_module_OBJECTS) $(multiboot2_module_DEPENDENCIES) $(EXTRA_multiboot2_module_DEPENDENCIES) + @rm -f multiboot2.module$(EXEEXT) + $(AM_V_CCLD)$(multiboot2_module_LINK) $(multiboot2_module_OBJECTS) $(multiboot2_module_LDADD) $(LIBS) +disk/ieee1275/nand_module-nand.$(OBJEXT): \ + disk/ieee1275/$(am__dirstamp) \ + disk/ieee1275/$(DEPDIR)/$(am__dirstamp) + +nand.module$(EXEEXT): $(nand_module_OBJECTS) $(nand_module_DEPENDENCIES) $(EXTRA_nand_module_DEPENDENCIES) + @rm -f nand.module$(EXEEXT) + $(AM_V_CCLD)$(nand_module_LINK) $(nand_module_OBJECTS) $(nand_module_LDADD) $(LIBS) +commands/nativedisk_module-nativedisk.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +nativedisk.module$(EXEEXT): $(nativedisk_module_OBJECTS) $(nativedisk_module_DEPENDENCIES) $(EXTRA_nativedisk_module_DEPENDENCIES) + @rm -f nativedisk.module$(EXEEXT) + $(AM_V_CCLD)$(nativedisk_module_LINK) $(nativedisk_module_OBJECTS) $(nativedisk_module_LDADD) $(LIBS) +net/net_module-net.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-dns.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-bootp.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-ip.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-udp.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-tcp.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-icmp.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-icmp6.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-ethernet.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-arp.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) +net/net_module-netbuff.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) + +net.module$(EXEEXT): $(net_module_OBJECTS) $(net_module_DEPENDENCIES) $(EXTRA_net_module_DEPENDENCIES) + @rm -f net.module$(EXEEXT) + $(AM_V_CCLD)$(net_module_LINK) $(net_module_OBJECTS) $(net_module_LDADD) $(LIBS) +fs/newc_module-newc.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +newc.module$(EXEEXT): $(newc_module_OBJECTS) $(newc_module_DEPENDENCIES) $(EXTRA_newc_module_DEPENDENCIES) + @rm -f newc.module$(EXEEXT) + $(AM_V_CCLD)$(newc_module_LINK) $(newc_module_OBJECTS) $(newc_module_LDADD) $(LIBS) +fs/nilfs2_module-nilfs2.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +nilfs2.module$(EXEEXT): $(nilfs2_module_OBJECTS) $(nilfs2_module_DEPENDENCIES) $(EXTRA_nilfs2_module_DEPENDENCIES) + @rm -f nilfs2.module$(EXEEXT) + $(AM_V_CCLD)$(nilfs2_module_LINK) $(nilfs2_module_OBJECTS) $(nilfs2_module_LDADD) $(LIBS) +boot/mips/$(am__dirstamp): + @$(MKDIR_P) boot/mips + @: > boot/mips/$(am__dirstamp) +boot/mips/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) boot/mips/$(DEPDIR) + @: > boot/mips/$(DEPDIR)/$(am__dirstamp) +boot/mips/none_decompress_image-startup_raw.$(OBJEXT): \ + boot/mips/$(am__dirstamp) boot/mips/$(DEPDIR)/$(am__dirstamp) +boot/decompressor/$(am__dirstamp): + @$(MKDIR_P) boot/decompressor + @: > boot/decompressor/$(am__dirstamp) +boot/decompressor/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) boot/decompressor/$(DEPDIR) + @: > boot/decompressor/$(DEPDIR)/$(am__dirstamp) +boot/decompressor/none_decompress_image-none.$(OBJEXT): \ + boot/decompressor/$(am__dirstamp) \ + boot/decompressor/$(DEPDIR)/$(am__dirstamp) + +none_decompress.image$(EXEEXT): $(none_decompress_image_OBJECTS) $(none_decompress_image_DEPENDENCIES) $(EXTRA_none_decompress_image_DEPENDENCIES) + @rm -f none_decompress.image$(EXEEXT) + $(AM_V_CCLD)$(none_decompress_image_LINK) $(none_decompress_image_OBJECTS) $(none_decompress_image_LDADD) $(LIBS) +normal/$(am__dirstamp): + @$(MKDIR_P) normal + @: > normal/$(am__dirstamp) +normal/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) normal/$(DEPDIR) + @: > normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-main.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-cmdline.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-dyncmd.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-auth.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-autofs.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-color.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-completion.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-datetime.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-menu.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-menu_entry.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-menu_text.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-misc.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-crypto.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-term.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-context.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +normal/normal_module-charset.$(OBJEXT): normal/$(am__dirstamp) \ + normal/$(DEPDIR)/$(am__dirstamp) +lib/normal_module-getline.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +script/$(am__dirstamp): + @$(MKDIR_P) script + @: > script/$(am__dirstamp) +script/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) script/$(DEPDIR) + @: > script/$(DEPDIR)/$(am__dirstamp) +script/normal_module-main.$(OBJEXT): script/$(am__dirstamp) \ + script/$(DEPDIR)/$(am__dirstamp) +script/normal_module-script.$(OBJEXT): script/$(am__dirstamp) \ + script/$(DEPDIR)/$(am__dirstamp) +script/normal_module-execute.$(OBJEXT): script/$(am__dirstamp) \ + script/$(DEPDIR)/$(am__dirstamp) +script/normal_module-function.$(OBJEXT): script/$(am__dirstamp) \ + script/$(DEPDIR)/$(am__dirstamp) +script/normal_module-lexer.$(OBJEXT): script/$(am__dirstamp) \ + script/$(DEPDIR)/$(am__dirstamp) +script/normal_module-argv.$(OBJEXT): script/$(am__dirstamp) \ + script/$(DEPDIR)/$(am__dirstamp) +commands/normal_module-menuentry.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +normal.module$(EXEEXT): $(normal_module_OBJECTS) $(normal_module_DEPENDENCIES) $(EXTRA_normal_module_DEPENDENCIES) + @rm -f normal.module$(EXEEXT) + $(AM_V_CCLD)$(normal_module_LINK) $(normal_module_OBJECTS) $(normal_module_LDADD) $(LIBS) +fs/ntfs_module-ntfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +ntfs.module$(EXEEXT): $(ntfs_module_OBJECTS) $(ntfs_module_DEPENDENCIES) $(EXTRA_ntfs_module_DEPENDENCIES) + @rm -f ntfs.module$(EXEEXT) + $(AM_V_CCLD)$(ntfs_module_LINK) $(ntfs_module_OBJECTS) $(ntfs_module_LDADD) $(LIBS) +fs/ntfscomp_module-ntfscomp.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +ntfscomp.module$(EXEEXT): $(ntfscomp_module_OBJECTS) $(ntfscomp_module_DEPENDENCIES) $(EXTRA_ntfscomp_module_DEPENDENCIES) + @rm -f ntfscomp.module$(EXEEXT) + $(AM_V_CCLD)$(ntfscomp_module_LINK) $(ntfscomp_module_OBJECTS) $(ntfscomp_module_LDADD) $(LIBS) +loader/i386/pc/ntldr_module-ntldr.$(OBJEXT): \ + loader/i386/pc/$(am__dirstamp) \ + loader/i386/pc/$(DEPDIR)/$(am__dirstamp) + +ntldr.module$(EXEEXT): $(ntldr_module_OBJECTS) $(ntldr_module_DEPENDENCIES) $(EXTRA_ntldr_module_DEPENDENCIES) + @rm -f ntldr.module$(EXEEXT) + $(AM_V_CCLD)$(ntldr_module_LINK) $(ntldr_module_OBJECTS) $(ntldr_module_LDADD) $(LIBS) +fs/odc_module-odc.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +odc.module$(EXEEXT): $(odc_module_OBJECTS) $(odc_module_DEPENDENCIES) $(EXTRA_odc_module_DEPENDENCIES) + @rm -f odc.module$(EXEEXT) + $(AM_V_CCLD)$(odc_module_LINK) $(odc_module_OBJECTS) $(odc_module_LDADD) $(LIBS) +io/offsetio_module-offset.$(OBJEXT): io/$(am__dirstamp) \ + io/$(DEPDIR)/$(am__dirstamp) + +offsetio.module$(EXEEXT): $(offsetio_module_OBJECTS) $(offsetio_module_DEPENDENCIES) $(EXTRA_offsetio_module_DEPENDENCIES) + @rm -f offsetio.module$(EXEEXT) + $(AM_V_CCLD)$(offsetio_module_LINK) $(offsetio_module_OBJECTS) $(offsetio_module_LDADD) $(LIBS) +net/drivers/ieee1275/$(am__dirstamp): + @$(MKDIR_P) net/drivers/ieee1275 + @: > net/drivers/ieee1275/$(am__dirstamp) +net/drivers/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) net/drivers/ieee1275/$(DEPDIR) + @: > net/drivers/ieee1275/$(DEPDIR)/$(am__dirstamp) +net/drivers/ieee1275/ofnet_module-ofnet.$(OBJEXT): \ + net/drivers/ieee1275/$(am__dirstamp) \ + net/drivers/ieee1275/$(DEPDIR)/$(am__dirstamp) + +ofnet.module$(EXEEXT): $(ofnet_module_OBJECTS) $(ofnet_module_DEPENDENCIES) $(EXTRA_ofnet_module_DEPENDENCIES) + @rm -f ofnet.module$(EXEEXT) + $(AM_V_CCLD)$(ofnet_module_LINK) $(ofnet_module_OBJECTS) $(ofnet_module_LDADD) $(LIBS) +bus/usb/ohci_module-ohci.$(OBJEXT): bus/usb/$(am__dirstamp) \ + bus/usb/$(DEPDIR)/$(am__dirstamp) + +ohci.module$(EXEEXT): $(ohci_module_OBJECTS) $(ohci_module_DEPENDENCIES) $(EXTRA_ohci_module_DEPENDENCIES) + @rm -f ohci.module$(EXEEXT) + $(AM_V_CCLD)$(ohci_module_LINK) $(ohci_module_OBJECTS) $(ohci_module_LDADD) $(LIBS) +partmap/$(am__dirstamp): + @$(MKDIR_P) partmap + @: > partmap/$(am__dirstamp) +partmap/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) partmap/$(DEPDIR) + @: > partmap/$(DEPDIR)/$(am__dirstamp) +partmap/part_acorn_module-acorn.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_acorn.module$(EXEEXT): $(part_acorn_module_OBJECTS) $(part_acorn_module_DEPENDENCIES) $(EXTRA_part_acorn_module_DEPENDENCIES) + @rm -f part_acorn.module$(EXEEXT) + $(AM_V_CCLD)$(part_acorn_module_LINK) $(part_acorn_module_OBJECTS) $(part_acorn_module_LDADD) $(LIBS) +partmap/part_amiga_module-amiga.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_amiga.module$(EXEEXT): $(part_amiga_module_OBJECTS) $(part_amiga_module_DEPENDENCIES) $(EXTRA_part_amiga_module_DEPENDENCIES) + @rm -f part_amiga.module$(EXEEXT) + $(AM_V_CCLD)$(part_amiga_module_LINK) $(part_amiga_module_OBJECTS) $(part_amiga_module_LDADD) $(LIBS) +partmap/part_apple_module-apple.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_apple.module$(EXEEXT): $(part_apple_module_OBJECTS) $(part_apple_module_DEPENDENCIES) $(EXTRA_part_apple_module_DEPENDENCIES) + @rm -f part_apple.module$(EXEEXT) + $(AM_V_CCLD)$(part_apple_module_LINK) $(part_apple_module_OBJECTS) $(part_apple_module_LDADD) $(LIBS) +partmap/part_bsd_module-bsdlabel.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_bsd.module$(EXEEXT): $(part_bsd_module_OBJECTS) $(part_bsd_module_DEPENDENCIES) $(EXTRA_part_bsd_module_DEPENDENCIES) + @rm -f part_bsd.module$(EXEEXT) + $(AM_V_CCLD)$(part_bsd_module_LINK) $(part_bsd_module_OBJECTS) $(part_bsd_module_LDADD) $(LIBS) +partmap/part_dfly_module-dfly.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_dfly.module$(EXEEXT): $(part_dfly_module_OBJECTS) $(part_dfly_module_DEPENDENCIES) $(EXTRA_part_dfly_module_DEPENDENCIES) + @rm -f part_dfly.module$(EXEEXT) + $(AM_V_CCLD)$(part_dfly_module_LINK) $(part_dfly_module_OBJECTS) $(part_dfly_module_LDADD) $(LIBS) +partmap/part_dvh_module-dvh.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_dvh.module$(EXEEXT): $(part_dvh_module_OBJECTS) $(part_dvh_module_DEPENDENCIES) $(EXTRA_part_dvh_module_DEPENDENCIES) + @rm -f part_dvh.module$(EXEEXT) + $(AM_V_CCLD)$(part_dvh_module_LINK) $(part_dvh_module_OBJECTS) $(part_dvh_module_LDADD) $(LIBS) +partmap/part_gpt_module-gpt.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_gpt.module$(EXEEXT): $(part_gpt_module_OBJECTS) $(part_gpt_module_DEPENDENCIES) $(EXTRA_part_gpt_module_DEPENDENCIES) + @rm -f part_gpt.module$(EXEEXT) + $(AM_V_CCLD)$(part_gpt_module_LINK) $(part_gpt_module_OBJECTS) $(part_gpt_module_LDADD) $(LIBS) +partmap/part_msdos_module-msdos.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_msdos.module$(EXEEXT): $(part_msdos_module_OBJECTS) $(part_msdos_module_DEPENDENCIES) $(EXTRA_part_msdos_module_DEPENDENCIES) + @rm -f part_msdos.module$(EXEEXT) + $(AM_V_CCLD)$(part_msdos_module_LINK) $(part_msdos_module_OBJECTS) $(part_msdos_module_LDADD) $(LIBS) +partmap/part_plan_module-plan.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_plan.module$(EXEEXT): $(part_plan_module_OBJECTS) $(part_plan_module_DEPENDENCIES) $(EXTRA_part_plan_module_DEPENDENCIES) + @rm -f part_plan.module$(EXEEXT) + $(AM_V_CCLD)$(part_plan_module_LINK) $(part_plan_module_OBJECTS) $(part_plan_module_LDADD) $(LIBS) +partmap/part_sun_module-sun.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_sun.module$(EXEEXT): $(part_sun_module_OBJECTS) $(part_sun_module_DEPENDENCIES) $(EXTRA_part_sun_module_DEPENDENCIES) + @rm -f part_sun.module$(EXEEXT) + $(AM_V_CCLD)$(part_sun_module_LINK) $(part_sun_module_OBJECTS) $(part_sun_module_LDADD) $(LIBS) +partmap/part_sunpc_module-sunpc.$(OBJEXT): partmap/$(am__dirstamp) \ + partmap/$(DEPDIR)/$(am__dirstamp) + +part_sunpc.module$(EXEEXT): $(part_sunpc_module_OBJECTS) $(part_sunpc_module_DEPENDENCIES) $(EXTRA_part_sunpc_module_DEPENDENCIES) + @rm -f part_sunpc.module$(EXEEXT) + $(AM_V_CCLD)$(part_sunpc_module_LINK) $(part_sunpc_module_OBJECTS) $(part_sunpc_module_LDADD) $(LIBS) +commands/parttool_module-parttool.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +parttool.module$(EXEEXT): $(parttool_module_OBJECTS) $(parttool_module_DEPENDENCIES) $(EXTRA_parttool_module_DEPENDENCIES) + @rm -f parttool.module$(EXEEXT) + $(AM_V_CCLD)$(parttool_module_LINK) $(parttool_module_OBJECTS) $(parttool_module_LDADD) $(LIBS) +commands/password_module-password.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +password.module$(EXEEXT): $(password_module_OBJECTS) $(password_module_DEPENDENCIES) $(EXTRA_password_module_DEPENDENCIES) + @rm -f password.module$(EXEEXT) + $(AM_V_CCLD)$(password_module_LINK) $(password_module_OBJECTS) $(password_module_LDADD) $(LIBS) +commands/password_pbkdf2_module-password_pbkdf2.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +password_pbkdf2.module$(EXEEXT): $(password_pbkdf2_module_OBJECTS) $(password_pbkdf2_module_DEPENDENCIES) $(EXTRA_password_pbkdf2_module_DEPENDENCIES) + @rm -f password_pbkdf2.module$(EXEEXT) + $(AM_V_CCLD)$(password_pbkdf2_module_LINK) $(password_pbkdf2_module_OBJECTS) $(password_pbkdf2_module_LDADD) $(LIBS) +disk/pata_module-pata.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +pata.module$(EXEEXT): $(pata_module_OBJECTS) $(pata_module_DEPENDENCIES) $(EXTRA_pata_module_DEPENDENCIES) + @rm -f pata.module$(EXEEXT) + $(AM_V_CCLD)$(pata_module_LINK) $(pata_module_OBJECTS) $(pata_module_LDADD) $(LIBS) +lib/pbkdf2_module-pbkdf2.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +pbkdf2.module$(EXEEXT): $(pbkdf2_module_OBJECTS) $(pbkdf2_module_DEPENDENCIES) $(EXTRA_pbkdf2_module_DEPENDENCIES) + @rm -f pbkdf2.module$(EXEEXT) + $(AM_V_CCLD)$(pbkdf2_module_LINK) $(pbkdf2_module_OBJECTS) $(pbkdf2_module_LDADD) $(LIBS) +tests/pbkdf2_test_module-pbkdf2_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +pbkdf2_test.module$(EXEEXT): $(pbkdf2_test_module_OBJECTS) $(pbkdf2_test_module_DEPENDENCIES) $(EXTRA_pbkdf2_test_module_DEPENDENCIES) + @rm -f pbkdf2_test.module$(EXEEXT) + $(AM_V_CCLD)$(pbkdf2_test_module_LINK) $(pbkdf2_test_module_OBJECTS) $(pbkdf2_test_module_LDADD) $(LIBS) +bus/pci_module-pci.$(OBJEXT): bus/$(am__dirstamp) \ + bus/$(DEPDIR)/$(am__dirstamp) +bus/i386/ieee1275/$(am__dirstamp): + @$(MKDIR_P) bus/i386/ieee1275 + @: > bus/i386/ieee1275/$(am__dirstamp) +bus/i386/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) bus/i386/ieee1275/$(DEPDIR) + @: > bus/i386/ieee1275/$(DEPDIR)/$(am__dirstamp) +bus/i386/ieee1275/pci_module-pci.$(OBJEXT): \ + bus/i386/ieee1275/$(am__dirstamp) \ + bus/i386/ieee1275/$(DEPDIR)/$(am__dirstamp) + +pci.module$(EXEEXT): $(pci_module_OBJECTS) $(pci_module_DEPENDENCIES) $(EXTRA_pci_module_DEPENDENCIES) + @rm -f pci.module$(EXEEXT) + $(AM_V_CCLD)$(pci_module_LINK) $(pci_module_OBJECTS) $(pci_module_LDADD) $(LIBS) +commands/pcidump_module-pcidump.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +pcidump.module$(EXEEXT): $(pcidump_module_OBJECTS) $(pcidump_module_DEPENDENCIES) $(EXTRA_pcidump_module_DEPENDENCIES) + @rm -f pcidump.module$(EXEEXT) + $(AM_V_CCLD)$(pcidump_module_LINK) $(pcidump_module_OBJECTS) $(pcidump_module_LDADD) $(LIBS) +loader/i386/pc/plan9_module-plan9.$(OBJEXT): \ + loader/i386/pc/$(am__dirstamp) \ + loader/i386/pc/$(DEPDIR)/$(am__dirstamp) + +plan9.module$(EXEEXT): $(plan9_module_OBJECTS) $(plan9_module_DEPENDENCIES) $(EXTRA_plan9_module_DEPENDENCIES) + @rm -f plan9.module$(EXEEXT) + $(AM_V_CCLD)$(plan9_module_LINK) $(plan9_module_OBJECTS) $(plan9_module_LDADD) $(LIBS) +commands/i386/pc/play_module-play.$(OBJEXT): \ + commands/i386/pc/$(am__dirstamp) \ + commands/i386/pc/$(DEPDIR)/$(am__dirstamp) + +play.module$(EXEEXT): $(play_module_OBJECTS) $(play_module_DEPENDENCIES) $(EXTRA_play_module_DEPENDENCIES) + @rm -f play.module$(EXEEXT) + $(AM_V_CCLD)$(play_module_LINK) $(play_module_OBJECTS) $(play_module_LDADD) $(LIBS) +video/readers/png_module-png.$(OBJEXT): video/readers/$(am__dirstamp) \ + video/readers/$(DEPDIR)/$(am__dirstamp) + +png.module$(EXEEXT): $(png_module_OBJECTS) $(png_module_DEPENDENCIES) $(EXTRA_png_module_DEPENDENCIES) + @rm -f png.module$(EXEEXT) + $(AM_V_CCLD)$(png_module_LINK) $(png_module_OBJECTS) $(png_module_LDADD) $(LIBS) +lib/priority_queue_module-priority_queue.$(OBJEXT): \ + lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp) + +priority_queue.module$(EXEEXT): $(priority_queue_module_OBJECTS) $(priority_queue_module_DEPENDENCIES) $(EXTRA_priority_queue_module_DEPENDENCIES) + @rm -f priority_queue.module$(EXEEXT) + $(AM_V_CCLD)$(priority_queue_module_LINK) $(priority_queue_module_OBJECTS) $(priority_queue_module_LDADD) $(LIBS) +commands/probe_module-probe.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +probe.module$(EXEEXT): $(probe_module_OBJECTS) $(probe_module_DEPENDENCIES) $(EXTRA_probe_module_DEPENDENCIES) + @rm -f probe.module$(EXEEXT) + $(AM_V_CCLD)$(probe_module_LINK) $(probe_module_OBJECTS) $(probe_module_LDADD) $(LIBS) +fs/procfs_module-proc.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +procfs.module$(EXEEXT): $(procfs_module_OBJECTS) $(procfs_module_DEPENDENCIES) $(EXTRA_procfs_module_DEPENDENCIES) + @rm -f procfs.module$(EXEEXT) + $(AM_V_CCLD)$(procfs_module_LINK) $(procfs_module_OBJECTS) $(procfs_module_LDADD) $(LIBS) +lib/progress_module-progress.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +progress.module$(EXEEXT): $(progress_module_OBJECTS) $(progress_module_DEPENDENCIES) $(EXTRA_progress_module_DEPENDENCIES) + @rm -f progress.module$(EXEEXT) + $(AM_V_CCLD)$(progress_module_LINK) $(progress_module_OBJECTS) $(progress_module_LDADD) $(LIBS) +net/drivers/i386/pc/$(am__dirstamp): + @$(MKDIR_P) net/drivers/i386/pc + @: > net/drivers/i386/pc/$(am__dirstamp) +net/drivers/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) net/drivers/i386/pc/$(DEPDIR) + @: > net/drivers/i386/pc/$(DEPDIR)/$(am__dirstamp) +net/drivers/i386/pc/pxe_module-pxe.$(OBJEXT): \ + net/drivers/i386/pc/$(am__dirstamp) \ + net/drivers/i386/pc/$(DEPDIR)/$(am__dirstamp) + +pxe.module$(EXEEXT): $(pxe_module_OBJECTS) $(pxe_module_DEPENDENCIES) $(EXTRA_pxe_module_DEPENDENCIES) + @rm -f pxe.module$(EXEEXT) + $(AM_V_CCLD)$(pxe_module_LINK) $(pxe_module_OBJECTS) $(pxe_module_LDADD) $(LIBS) +boot/i386/pc/pxeboot_image-pxeboot.$(OBJEXT): \ + boot/i386/pc/$(am__dirstamp) \ + boot/i386/pc/$(DEPDIR)/$(am__dirstamp) + +pxeboot.image$(EXEEXT): $(pxeboot_image_OBJECTS) $(pxeboot_image_DEPENDENCIES) $(EXTRA_pxeboot_image_DEPENDENCIES) + @rm -f pxeboot.image$(EXEEXT) + $(AM_V_CCLD)$(pxeboot_image_LINK) $(pxeboot_image_OBJECTS) $(pxeboot_image_LDADD) $(LIBS) +loader/i386/pc/pxechain_module-pxechainloader.$(OBJEXT): \ + loader/i386/pc/$(am__dirstamp) \ + loader/i386/pc/$(DEPDIR)/$(am__dirstamp) + +pxechain.module$(EXEEXT): $(pxechain_module_OBJECTS) $(pxechain_module_DEPENDENCIES) $(EXTRA_pxechain_module_DEPENDENCIES) + @rm -f pxechain.module$(EXEEXT) + $(AM_V_CCLD)$(pxechain_module_LINK) $(pxechain_module_OBJECTS) $(pxechain_module_LDADD) $(LIBS) +disk/raid5rec_module-raid5_recover.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +raid5rec.module$(EXEEXT): $(raid5rec_module_OBJECTS) $(raid5rec_module_DEPENDENCIES) $(EXTRA_raid5rec_module_DEPENDENCIES) + @rm -f raid5rec.module$(EXEEXT) + $(AM_V_CCLD)$(raid5rec_module_LINK) $(raid5rec_module_OBJECTS) $(raid5rec_module_LDADD) $(LIBS) +disk/raid6rec_module-raid6_recover.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +raid6rec.module$(EXEEXT): $(raid6rec_module_OBJECTS) $(raid6rec_module_DEPENDENCIES) $(EXTRA_raid6rec_module_DEPENDENCIES) + @rm -f raid6rec.module$(EXEEXT) + $(AM_V_CCLD)$(raid6rec_module_LINK) $(raid6rec_module_OBJECTS) $(raid6rec_module_LDADD) $(LIBS) +kern/i386/random_module-tsc_pmtimer.$(OBJEXT): \ + kern/i386/$(am__dirstamp) kern/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/random_module-random.$(OBJEXT): lib/i386/$(am__dirstamp) \ + lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/random_module-random.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +random.module$(EXEEXT): $(random_module_OBJECTS) $(random_module_DEPENDENCIES) $(EXTRA_random_module_DEPENDENCIES) + @rm -f random.module$(EXEEXT) + $(AM_V_CCLD)$(random_module_LINK) $(random_module_OBJECTS) $(random_module_LDADD) $(LIBS) +commands/read_module-read.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +read.module$(EXEEXT): $(read_module_OBJECTS) $(read_module_DEPENDENCIES) $(EXTRA_read_module_DEPENDENCIES) + @rm -f read.module$(EXEEXT) + $(AM_V_CCLD)$(read_module_LINK) $(read_module_OBJECTS) $(read_module_LDADD) $(LIBS) +lib/efi/reboot_module-reboot.$(OBJEXT): lib/efi/$(am__dirstamp) \ + lib/efi/$(DEPDIR)/$(am__dirstamp) +commands/reboot_module-reboot.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +lib/uboot/reboot_module-reboot.$(OBJEXT): lib/uboot/$(am__dirstamp) \ + lib/uboot/$(DEPDIR)/$(am__dirstamp) +lib/i386/reboot_module-reboot.$(OBJEXT): lib/i386/$(am__dirstamp) \ + lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/reboot_module-reboot_trampoline.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/xen/reboot_module-reboot.$(OBJEXT): lib/xen/$(am__dirstamp) \ + lib/xen/$(DEPDIR)/$(am__dirstamp) +lib/mips/arc/$(am__dirstamp): + @$(MKDIR_P) lib/mips/arc + @: > lib/mips/arc/$(am__dirstamp) +lib/mips/arc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/mips/arc/$(DEPDIR) + @: > lib/mips/arc/$(DEPDIR)/$(am__dirstamp) +lib/mips/arc/reboot_module-reboot.$(OBJEXT): \ + lib/mips/arc/$(am__dirstamp) \ + lib/mips/arc/$(DEPDIR)/$(am__dirstamp) +lib/mips/loongson/$(am__dirstamp): + @$(MKDIR_P) lib/mips/loongson + @: > lib/mips/loongson/$(am__dirstamp) +lib/mips/loongson/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/mips/loongson/$(DEPDIR) + @: > lib/mips/loongson/$(DEPDIR)/$(am__dirstamp) +lib/mips/loongson/reboot_module-reboot.$(OBJEXT): \ + lib/mips/loongson/$(am__dirstamp) \ + lib/mips/loongson/$(DEPDIR)/$(am__dirstamp) +lib/mips/qemu_mips/$(am__dirstamp): + @$(MKDIR_P) lib/mips/qemu_mips + @: > lib/mips/qemu_mips/$(am__dirstamp) +lib/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/mips/qemu_mips/$(DEPDIR) + @: > lib/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp) +lib/mips/qemu_mips/reboot_module-reboot.$(OBJEXT): \ + lib/mips/qemu_mips/$(am__dirstamp) \ + lib/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp) +lib/ieee1275/reboot_module-reboot.$(OBJEXT): \ + lib/ieee1275/$(am__dirstamp) \ + lib/ieee1275/$(DEPDIR)/$(am__dirstamp) + +reboot.module$(EXEEXT): $(reboot_module_OBJECTS) $(reboot_module_DEPENDENCIES) $(EXTRA_reboot_module_DEPENDENCIES) + @rm -f reboot.module$(EXEEXT) + $(AM_V_CCLD)$(reboot_module_LINK) $(reboot_module_OBJECTS) $(reboot_module_LDADD) $(LIBS) +commands/regexp_module-regexp.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +commands/regexp_module-wildcard.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) +gnulib/$(am__dirstamp): + @$(MKDIR_P) gnulib + @: > gnulib/$(am__dirstamp) +gnulib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) gnulib/$(DEPDIR) + @: > gnulib/$(DEPDIR)/$(am__dirstamp) +gnulib/regexp_module-regex.$(OBJEXT): gnulib/$(am__dirstamp) \ + gnulib/$(DEPDIR)/$(am__dirstamp) + +regexp.module$(EXEEXT): $(regexp_module_OBJECTS) $(regexp_module_DEPENDENCIES) $(EXTRA_regexp_module_DEPENDENCIES) + @rm -f regexp.module$(EXEEXT) + $(AM_V_CCLD)$(regexp_module_LINK) $(regexp_module_OBJECTS) $(regexp_module_LDADD) $(LIBS) +fs/reiserfs_module-reiserfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +reiserfs.module$(EXEEXT): $(reiserfs_module_OBJECTS) $(reiserfs_module_DEPENDENCIES) $(EXTRA_reiserfs_module_DEPENDENCIES) + @rm -f reiserfs.module$(EXEEXT) + $(AM_V_CCLD)$(reiserfs_module_LINK) $(reiserfs_module_OBJECTS) $(reiserfs_module_LDADD) $(LIBS) +lib/i386/relocator_module-relocator_asm.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/relocator_module-relocator16.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/relocator_module-relocator32.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/relocator_module-relocator64.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/relocator_module-relocator.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/i386/relocator_module-relocator_common_c.$(OBJEXT): \ + lib/i386/$(am__dirstamp) lib/i386/$(DEPDIR)/$(am__dirstamp) +lib/relocator_module-relocator.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +lib/efi/relocator_module-relocator.$(OBJEXT): lib/efi/$(am__dirstamp) \ + lib/efi/$(DEPDIR)/$(am__dirstamp) +lib/ieee1275/relocator_module-relocator.$(OBJEXT): \ + lib/ieee1275/$(am__dirstamp) \ + lib/ieee1275/$(DEPDIR)/$(am__dirstamp) +lib/i386/xen/$(am__dirstamp): + @$(MKDIR_P) lib/i386/xen + @: > lib/i386/xen/$(am__dirstamp) +lib/i386/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/i386/xen/$(DEPDIR) + @: > lib/i386/xen/$(DEPDIR)/$(am__dirstamp) +lib/i386/xen/relocator_module-relocator.$(OBJEXT): \ + lib/i386/xen/$(am__dirstamp) \ + lib/i386/xen/$(DEPDIR)/$(am__dirstamp) +lib/xen/relocator_module-relocator.$(OBJEXT): lib/xen/$(am__dirstamp) \ + lib/xen/$(DEPDIR)/$(am__dirstamp) +lib/mips/$(am__dirstamp): + @$(MKDIR_P) lib/mips + @: > lib/mips/$(am__dirstamp) +lib/mips/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/mips/$(DEPDIR) + @: > lib/mips/$(DEPDIR)/$(am__dirstamp) +lib/mips/relocator_module-relocator_asm.$(OBJEXT): \ + lib/mips/$(am__dirstamp) lib/mips/$(DEPDIR)/$(am__dirstamp) +lib/mips/relocator_module-relocator.$(OBJEXT): \ + lib/mips/$(am__dirstamp) lib/mips/$(DEPDIR)/$(am__dirstamp) +lib/powerpc/$(am__dirstamp): + @$(MKDIR_P) lib/powerpc + @: > lib/powerpc/$(am__dirstamp) +lib/powerpc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/powerpc/$(DEPDIR) + @: > lib/powerpc/$(DEPDIR)/$(am__dirstamp) +lib/powerpc/relocator_module-relocator_asm.$(OBJEXT): \ + lib/powerpc/$(am__dirstamp) \ + lib/powerpc/$(DEPDIR)/$(am__dirstamp) +lib/powerpc/relocator_module-relocator.$(OBJEXT): \ + lib/powerpc/$(am__dirstamp) \ + lib/powerpc/$(DEPDIR)/$(am__dirstamp) +lib/x86_64/efi/$(am__dirstamp): + @$(MKDIR_P) lib/x86_64/efi + @: > lib/x86_64/efi/$(am__dirstamp) +lib/x86_64/efi/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/x86_64/efi/$(DEPDIR) + @: > lib/x86_64/efi/$(DEPDIR)/$(am__dirstamp) +lib/x86_64/efi/relocator_module-relocator.$(OBJEXT): \ + lib/x86_64/efi/$(am__dirstamp) \ + lib/x86_64/efi/$(DEPDIR)/$(am__dirstamp) +lib/x86_64/$(am__dirstamp): + @$(MKDIR_P) lib/x86_64 + @: > lib/x86_64/$(am__dirstamp) +lib/x86_64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/x86_64/$(DEPDIR) + @: > lib/x86_64/$(DEPDIR)/$(am__dirstamp) +lib/x86_64/relocator_module-relocator_asm.$(OBJEXT): \ + lib/x86_64/$(am__dirstamp) \ + lib/x86_64/$(DEPDIR)/$(am__dirstamp) +lib/x86_64/xen/$(am__dirstamp): + @$(MKDIR_P) lib/x86_64/xen + @: > lib/x86_64/xen/$(am__dirstamp) +lib/x86_64/xen/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/x86_64/xen/$(DEPDIR) + @: > lib/x86_64/xen/$(DEPDIR)/$(am__dirstamp) +lib/x86_64/xen/relocator_module-relocator.$(OBJEXT): \ + lib/x86_64/xen/$(am__dirstamp) \ + lib/x86_64/xen/$(DEPDIR)/$(am__dirstamp) + +relocator.module$(EXEEXT): $(relocator_module_OBJECTS) $(relocator_module_DEPENDENCIES) $(EXTRA_relocator_module_DEPENDENCIES) + @rm -f relocator.module$(EXEEXT) + $(AM_V_CCLD)$(relocator_module_LINK) $(relocator_module_OBJECTS) $(relocator_module_LDADD) $(LIBS) +fs/romfs_module-romfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +romfs.module$(EXEEXT): $(romfs_module_OBJECTS) $(romfs_module_DEPENDENCIES) $(EXTRA_romfs_module_DEPENDENCIES) + @rm -f romfs.module$(EXEEXT) + $(AM_V_CCLD)$(romfs_module_LINK) $(romfs_module_OBJECTS) $(romfs_module_LDADD) $(LIBS) +disk/scsi_module-scsi.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +scsi.module$(EXEEXT): $(scsi_module_OBJECTS) $(scsi_module_DEPENDENCIES) $(EXTRA_scsi_module_DEPENDENCIES) + @rm -f scsi.module$(EXEEXT) + $(AM_V_CCLD)$(scsi_module_LINK) $(scsi_module_OBJECTS) $(scsi_module_LDADD) $(LIBS) +video/emu/$(am__dirstamp): + @$(MKDIR_P) video/emu + @: > video/emu/$(am__dirstamp) +video/emu/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) video/emu/$(DEPDIR) + @: > video/emu/$(DEPDIR)/$(am__dirstamp) +video/emu/sdl_module-sdl.$(OBJEXT): video/emu/$(am__dirstamp) \ + video/emu/$(DEPDIR)/$(am__dirstamp) + +sdl.module$(EXEEXT): $(sdl_module_OBJECTS) $(sdl_module_DEPENDENCIES) $(EXTRA_sdl_module_DEPENDENCIES) + @rm -f sdl.module$(EXEEXT) + $(AM_V_CCLD)$(sdl_module_LINK) $(sdl_module_OBJECTS) $(sdl_module_LDADD) $(LIBS) +commands/search_module-search_wrap.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +search.module$(EXEEXT): $(search_module_OBJECTS) $(search_module_DEPENDENCIES) $(EXTRA_search_module_DEPENDENCIES) + @rm -f search.module$(EXEEXT) + $(AM_V_CCLD)$(search_module_LINK) $(search_module_OBJECTS) $(search_module_LDADD) $(LIBS) +commands/search_fs_file_module-search_file.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +search_fs_file.module$(EXEEXT): $(search_fs_file_module_OBJECTS) $(search_fs_file_module_DEPENDENCIES) $(EXTRA_search_fs_file_module_DEPENDENCIES) + @rm -f search_fs_file.module$(EXEEXT) + $(AM_V_CCLD)$(search_fs_file_module_LINK) $(search_fs_file_module_OBJECTS) $(search_fs_file_module_LDADD) $(LIBS) +commands/search_fs_uuid_module-search_uuid.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +search_fs_uuid.module$(EXEEXT): $(search_fs_uuid_module_OBJECTS) $(search_fs_uuid_module_DEPENDENCIES) $(EXTRA_search_fs_uuid_module_DEPENDENCIES) + @rm -f search_fs_uuid.module$(EXEEXT) + $(AM_V_CCLD)$(search_fs_uuid_module_LINK) $(search_fs_uuid_module_OBJECTS) $(search_fs_uuid_module_LDADD) $(LIBS) +commands/search_label_module-search_label.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +search_label.module$(EXEEXT): $(search_label_module_OBJECTS) $(search_label_module_DEPENDENCIES) $(EXTRA_search_label_module_DEPENDENCIES) + @rm -f search_label.module$(EXEEXT) + $(AM_V_CCLD)$(search_label_module_LINK) $(search_label_module_OBJECTS) $(search_label_module_LDADD) $(LIBS) +commands/i386/pc/sendkey_module-sendkey.$(OBJEXT): \ + commands/i386/pc/$(am__dirstamp) \ + commands/i386/pc/$(DEPDIR)/$(am__dirstamp) + +sendkey.module$(EXEEXT): $(sendkey_module_OBJECTS) $(sendkey_module_DEPENDENCIES) $(EXTRA_sendkey_module_DEPENDENCIES) + @rm -f sendkey.module$(EXEEXT) + $(AM_V_CCLD)$(sendkey_module_LINK) $(sendkey_module_OBJECTS) $(sendkey_module_LDADD) $(LIBS) +term/efi/serial_module-serial.$(OBJEXT): term/efi/$(am__dirstamp) \ + term/efi/$(DEPDIR)/$(am__dirstamp) +term/serial_module-serial.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +term/serial_module-ns8250.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +term/ieee1275/serial_module-serial.$(OBJEXT): \ + term/ieee1275/$(am__dirstamp) \ + term/ieee1275/$(DEPDIR)/$(am__dirstamp) +term/arc/serial_module-serial.$(OBJEXT): term/arc/$(am__dirstamp) \ + term/arc/$(DEPDIR)/$(am__dirstamp) + +serial.module$(EXEEXT): $(serial_module_OBJECTS) $(serial_module_DEPENDENCIES) $(EXTRA_serial_module_DEPENDENCIES) + @rm -f serial.module$(EXEEXT) + $(AM_V_CCLD)$(serial_module_LINK) $(serial_module_OBJECTS) $(serial_module_LDADD) $(LIBS) +lib/setjmp_module-setjmp.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +setjmp.module$(EXEEXT): $(setjmp_module_OBJECTS) $(setjmp_module_DEPENDENCIES) $(EXTRA_setjmp_module_DEPENDENCIES) + @rm -f setjmp.module$(EXEEXT) + $(AM_V_CCLD)$(setjmp_module_LINK) $(setjmp_module_OBJECTS) $(setjmp_module_LDADD) $(LIBS) +tests/setjmp_test_module-setjmp_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +setjmp_test.module$(EXEEXT): $(setjmp_test_module_OBJECTS) $(setjmp_test_module_DEPENDENCIES) $(EXTRA_setjmp_test_module_DEPENDENCIES) + @rm -f setjmp_test.module$(EXEEXT) + $(AM_V_CCLD)$(setjmp_test_module_LINK) $(setjmp_test_module_OBJECTS) $(setjmp_test_module_LDADD) $(LIBS) +commands/setpci_module-setpci.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +setpci.module$(EXEEXT): $(setpci_module_OBJECTS) $(setpci_module_DEPENDENCIES) $(EXTRA_setpci_module_DEPENDENCIES) + @rm -f setpci.module$(EXEEXT) + $(AM_V_CCLD)$(setpci_module_LINK) $(setpci_module_OBJECTS) $(setpci_module_LDADD) $(LIBS) +fs/sfs_module-sfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +sfs.module$(EXEEXT): $(sfs_module_OBJECTS) $(sfs_module_DEPENDENCIES) $(EXTRA_sfs_module_DEPENDENCIES) + @rm -f sfs.module$(EXEEXT) + $(AM_V_CCLD)$(sfs_module_LINK) $(sfs_module_OBJECTS) $(sfs_module_LDADD) $(LIBS) +tests/shift_test_module-shift_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +shift_test.module$(EXEEXT): $(shift_test_module_OBJECTS) $(shift_test_module_DEPENDENCIES) $(EXTRA_shift_test_module_DEPENDENCIES) + @rm -f shift_test.module$(EXEEXT) + $(AM_V_CCLD)$(shift_test_module_LINK) $(shift_test_module_OBJECTS) $(shift_test_module_LDADD) $(LIBS) +tests/signature_test_module-signature_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +signature_test.module$(EXEEXT): $(signature_test_module_OBJECTS) $(signature_test_module_DEPENDENCIES) $(EXTRA_signature_test_module_DEPENDENCIES) + @rm -f signature_test.module$(EXEEXT) + $(AM_V_CCLD)$(signature_test_module_LINK) $(signature_test_module_OBJECTS) $(signature_test_module_LDADD) $(LIBS) +commands/sleep_module-sleep.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +sleep.module$(EXEEXT): $(sleep_module_OBJECTS) $(sleep_module_DEPENDENCIES) $(EXTRA_sleep_module_DEPENDENCIES) + @rm -f sleep.module$(EXEEXT) + $(AM_V_CCLD)$(sleep_module_LINK) $(sleep_module_OBJECTS) $(sleep_module_LDADD) $(LIBS) +tests/sleep_test_module-sleep_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +sleep_test.module$(EXEEXT): $(sleep_test_module_OBJECTS) $(sleep_test_module_DEPENDENCIES) $(EXTRA_sleep_test_module_DEPENDENCIES) + @rm -f sleep_test.module$(EXEEXT) + $(AM_V_CCLD)$(sleep_test_module_LINK) $(sleep_test_module_OBJECTS) $(sleep_test_module_LDADD) $(LIBS) +term/spkmodem_module-spkmodem.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) + +spkmodem.module$(EXEEXT): $(spkmodem_module_OBJECTS) $(spkmodem_module_DEPENDENCIES) $(EXTRA_spkmodem_module_DEPENDENCIES) + @rm -f spkmodem.module$(EXEEXT) + $(AM_V_CCLD)$(spkmodem_module_LINK) $(spkmodem_module_OBJECTS) $(spkmodem_module_LDADD) $(LIBS) +fs/squash4_module-squash4.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +squash4.module$(EXEEXT): $(squash4_module_OBJECTS) $(squash4_module_DEPENDENCIES) $(EXTRA_squash4_module_DEPENDENCIES) + @rm -f squash4.module$(EXEEXT) + $(AM_V_CCLD)$(squash4_module_LINK) $(squash4_module_OBJECTS) $(squash4_module_LDADD) $(LIBS) +commands/ieee1275/$(am__dirstamp): + @$(MKDIR_P) commands/ieee1275 + @: > commands/ieee1275/$(am__dirstamp) +commands/ieee1275/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) commands/ieee1275/$(DEPDIR) + @: > commands/ieee1275/$(DEPDIR)/$(am__dirstamp) +commands/ieee1275/suspend_module-suspend.$(OBJEXT): \ + commands/ieee1275/$(am__dirstamp) \ + commands/ieee1275/$(DEPDIR)/$(am__dirstamp) + +suspend.module$(EXEEXT): $(suspend_module_OBJECTS) $(suspend_module_DEPENDENCIES) $(EXTRA_suspend_module_DEPENDENCIES) + @rm -f suspend.module$(EXEEXT) + $(AM_V_CCLD)$(suspend_module_LINK) $(suspend_module_OBJECTS) $(suspend_module_LDADD) $(LIBS) +lib/syslinuxcfg_module-syslinux_parse.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) +commands/syslinuxcfg_module-syslinuxcfg.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +syslinuxcfg.module$(EXEEXT): $(syslinuxcfg_module_OBJECTS) $(syslinuxcfg_module_DEPENDENCIES) $(EXTRA_syslinuxcfg_module_DEPENDENCIES) + @rm -f syslinuxcfg.module$(EXEEXT) + $(AM_V_CCLD)$(syslinuxcfg_module_LINK) $(syslinuxcfg_module_OBJECTS) $(syslinuxcfg_module_LDADD) $(LIBS) +fs/tar_module-tar.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +tar.module$(EXEEXT): $(tar_module_OBJECTS) $(tar_module_DEPENDENCIES) $(EXTRA_tar_module_DEPENDENCIES) + @rm -f tar.module$(EXEEXT) + $(AM_V_CCLD)$(tar_module_LINK) $(tar_module_OBJECTS) $(tar_module_LDADD) $(LIBS) +commands/terminal_module-terminal.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +terminal.module$(EXEEXT): $(terminal_module_OBJECTS) $(terminal_module_DEPENDENCIES) $(EXTRA_terminal_module_DEPENDENCIES) + @rm -f terminal.module$(EXEEXT) + $(AM_V_CCLD)$(terminal_module_LINK) $(terminal_module_OBJECTS) $(terminal_module_LDADD) $(LIBS) +term/terminfo_module-terminfo.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) +term/terminfo_module-tparm.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) + +terminfo.module$(EXEEXT): $(terminfo_module_OBJECTS) $(terminfo_module_DEPENDENCIES) $(EXTRA_terminfo_module_DEPENDENCIES) + @rm -f terminfo.module$(EXEEXT) + $(AM_V_CCLD)$(terminfo_module_LINK) $(terminfo_module_OBJECTS) $(terminfo_module_LDADD) $(LIBS) +commands/test_module-test.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +test.module$(EXEEXT): $(test_module_OBJECTS) $(test_module_DEPENDENCIES) $(EXTRA_test_module_DEPENDENCIES) + @rm -f test.module$(EXEEXT) + $(AM_V_CCLD)$(test_module_LINK) $(test_module_OBJECTS) $(test_module_LDADD) $(LIBS) +tests/test_blockarg_module-test_blockarg.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +test_blockarg.module$(EXEEXT): $(test_blockarg_module_OBJECTS) $(test_blockarg_module_DEPENDENCIES) $(EXTRA_test_blockarg_module_DEPENDENCIES) + @rm -f test_blockarg.module$(EXEEXT) + $(AM_V_CCLD)$(test_blockarg_module_LINK) $(test_blockarg_module_OBJECTS) $(test_blockarg_module_LDADD) $(LIBS) +commands/testload_module-testload.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +testload.module$(EXEEXT): $(testload_module_OBJECTS) $(testload_module_DEPENDENCIES) $(EXTRA_testload_module_DEPENDENCIES) + @rm -f testload.module$(EXEEXT) + $(AM_V_CCLD)$(testload_module_LINK) $(testload_module_OBJECTS) $(testload_module_LDADD) $(LIBS) +commands/testspeed_module-testspeed.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +testspeed.module$(EXEEXT): $(testspeed_module_OBJECTS) $(testspeed_module_DEPENDENCIES) $(EXTRA_testspeed_module_DEPENDENCIES) + @rm -f testspeed.module$(EXEEXT) + $(AM_V_CCLD)$(testspeed_module_LINK) $(testspeed_module_OBJECTS) $(testspeed_module_LDADD) $(LIBS) +net/tftp_module-tftp.$(OBJEXT): net/$(am__dirstamp) \ + net/$(DEPDIR)/$(am__dirstamp) + +tftp.module$(EXEEXT): $(tftp_module_OBJECTS) $(tftp_module_DEPENDENCIES) $(EXTRA_tftp_module_DEPENDENCIES) + @rm -f tftp.module$(EXEEXT) + $(AM_V_CCLD)$(tftp_module_LINK) $(tftp_module_OBJECTS) $(tftp_module_LDADD) $(LIBS) +video/readers/tga_module-tga.$(OBJEXT): video/readers/$(am__dirstamp) \ + video/readers/$(DEPDIR)/$(am__dirstamp) + +tga.module$(EXEEXT): $(tga_module_OBJECTS) $(tga_module_DEPENDENCIES) $(EXTRA_tga_module_DEPENDENCIES) + @rm -f tga.module$(EXEEXT) + $(AM_V_CCLD)$(tga_module_LINK) $(tga_module_OBJECTS) $(tga_module_LDADD) $(LIBS) +commands/time_module-time.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +time.module$(EXEEXT): $(time_module_OBJECTS) $(time_module_DEPENDENCIES) $(EXTRA_time_module_DEPENDENCIES) + @rm -f time.module$(EXEEXT) + $(AM_V_CCLD)$(time_module_LINK) $(time_module_OBJECTS) $(time_module_LDADD) $(LIBS) +commands/tr_module-tr.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +tr.module$(EXEEXT): $(tr_module_OBJECTS) $(tr_module_DEPENDENCIES) $(EXTRA_tr_module_DEPENDENCIES) + @rm -f tr.module$(EXEEXT) + $(AM_V_CCLD)$(tr_module_LINK) $(tr_module_OBJECTS) $(tr_module_LDADD) $(LIBS) + +trig.module$(EXEEXT): $(trig_module_OBJECTS) $(trig_module_DEPENDENCIES) $(EXTRA_trig_module_DEPENDENCIES) + @rm -f trig.module$(EXEEXT) + $(AM_V_CCLD)$(trig_module_LINK) $(trig_module_OBJECTS) $(trig_module_LDADD) $(LIBS) +commands/true_module-true.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +true.module$(EXEEXT): $(true_module_OBJECTS) $(true_module_DEPENDENCIES) $(EXTRA_true_module_DEPENDENCIES) + @rm -f true.module$(EXEEXT) + $(AM_V_CCLD)$(true_module_LINK) $(true_module_OBJECTS) $(true_module_LDADD) $(LIBS) +loader/i386/pc/truecrypt_module-truecrypt.$(OBJEXT): \ + loader/i386/pc/$(am__dirstamp) \ + loader/i386/pc/$(DEPDIR)/$(am__dirstamp) + +truecrypt.module$(EXEEXT): $(truecrypt_module_OBJECTS) $(truecrypt_module_DEPENDENCIES) $(EXTRA_truecrypt_module_DEPENDENCIES) + @rm -f truecrypt.module$(EXEEXT) + $(AM_V_CCLD)$(truecrypt_module_LINK) $(truecrypt_module_OBJECTS) $(truecrypt_module_LDADD) $(LIBS) +net/drivers/uboot/$(am__dirstamp): + @$(MKDIR_P) net/drivers/uboot + @: > net/drivers/uboot/$(am__dirstamp) +net/drivers/uboot/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) net/drivers/uboot/$(DEPDIR) + @: > net/drivers/uboot/$(DEPDIR)/$(am__dirstamp) +net/drivers/uboot/ubootnet_module-ubootnet.$(OBJEXT): \ + net/drivers/uboot/$(am__dirstamp) \ + net/drivers/uboot/$(DEPDIR)/$(am__dirstamp) + +ubootnet.module$(EXEEXT): $(ubootnet_module_OBJECTS) $(ubootnet_module_DEPENDENCIES) $(EXTRA_ubootnet_module_DEPENDENCIES) + @rm -f ubootnet.module$(EXEEXT) + $(AM_V_CCLD)$(ubootnet_module_LINK) $(ubootnet_module_OBJECTS) $(ubootnet_module_LDADD) $(LIBS) +fs/udf_module-udf.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +udf.module$(EXEEXT): $(udf_module_OBJECTS) $(udf_module_DEPENDENCIES) $(EXTRA_udf_module_DEPENDENCIES) + @rm -f udf.module$(EXEEXT) + $(AM_V_CCLD)$(udf_module_LINK) $(udf_module_OBJECTS) $(udf_module_LDADD) $(LIBS) +fs/ufs1_module-ufs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +ufs1.module$(EXEEXT): $(ufs1_module_OBJECTS) $(ufs1_module_DEPENDENCIES) $(EXTRA_ufs1_module_DEPENDENCIES) + @rm -f ufs1.module$(EXEEXT) + $(AM_V_CCLD)$(ufs1_module_LINK) $(ufs1_module_OBJECTS) $(ufs1_module_LDADD) $(LIBS) +fs/ufs1_be_module-ufs_be.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +ufs1_be.module$(EXEEXT): $(ufs1_be_module_OBJECTS) $(ufs1_be_module_DEPENDENCIES) $(EXTRA_ufs1_be_module_DEPENDENCIES) + @rm -f ufs1_be.module$(EXEEXT) + $(AM_V_CCLD)$(ufs1_be_module_LINK) $(ufs1_be_module_OBJECTS) $(ufs1_be_module_LDADD) $(LIBS) +fs/ufs2_module-ufs2.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +ufs2.module$(EXEEXT): $(ufs2_module_OBJECTS) $(ufs2_module_DEPENDENCIES) $(EXTRA_ufs2_module_DEPENDENCIES) + @rm -f ufs2.module$(EXEEXT) + $(AM_V_CCLD)$(ufs2_module_LINK) $(ufs2_module_OBJECTS) $(ufs2_module_LDADD) $(LIBS) +bus/usb/uhci_module-uhci.$(OBJEXT): bus/usb/$(am__dirstamp) \ + bus/usb/$(DEPDIR)/$(am__dirstamp) + +uhci.module$(EXEEXT): $(uhci_module_OBJECTS) $(uhci_module_DEPENDENCIES) $(EXTRA_uhci_module_DEPENDENCIES) + @rm -f uhci.module$(EXEEXT) + $(AM_V_CCLD)$(uhci_module_LINK) $(uhci_module_OBJECTS) $(uhci_module_LDADD) $(LIBS) +bus/usb/usb_module-usb.$(OBJEXT): bus/usb/$(am__dirstamp) \ + bus/usb/$(DEPDIR)/$(am__dirstamp) +bus/usb/usb_module-usbtrans.$(OBJEXT): bus/usb/$(am__dirstamp) \ + bus/usb/$(DEPDIR)/$(am__dirstamp) +bus/usb/usb_module-usbhub.$(OBJEXT): bus/usb/$(am__dirstamp) \ + bus/usb/$(DEPDIR)/$(am__dirstamp) + +usb.module$(EXEEXT): $(usb_module_OBJECTS) $(usb_module_DEPENDENCIES) $(EXTRA_usb_module_DEPENDENCIES) + @rm -f usb.module$(EXEEXT) + $(AM_V_CCLD)$(usb_module_LINK) $(usb_module_OBJECTS) $(usb_module_LDADD) $(LIBS) +term/usb_keyboard_module-usb_keyboard.$(OBJEXT): term/$(am__dirstamp) \ + term/$(DEPDIR)/$(am__dirstamp) + +usb_keyboard.module$(EXEEXT): $(usb_keyboard_module_OBJECTS) $(usb_keyboard_module_DEPENDENCIES) $(EXTRA_usb_keyboard_module_DEPENDENCIES) + @rm -f usb_keyboard.module$(EXEEXT) + $(AM_V_CCLD)$(usb_keyboard_module_LINK) $(usb_keyboard_module_OBJECTS) $(usb_keyboard_module_LDADD) $(LIBS) +disk/usbms_module-usbms.$(OBJEXT): disk/$(am__dirstamp) \ + disk/$(DEPDIR)/$(am__dirstamp) + +usbms.module$(EXEEXT): $(usbms_module_OBJECTS) $(usbms_module_DEPENDENCIES) $(EXTRA_usbms_module_DEPENDENCIES) + @rm -f usbms.module$(EXEEXT) + $(AM_V_CCLD)$(usbms_module_LINK) $(usbms_module_OBJECTS) $(usbms_module_LDADD) $(LIBS) +bus/usb/serial/$(am__dirstamp): + @$(MKDIR_P) bus/usb/serial + @: > bus/usb/serial/$(am__dirstamp) +bus/usb/serial/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) bus/usb/serial/$(DEPDIR) + @: > bus/usb/serial/$(DEPDIR)/$(am__dirstamp) +bus/usb/serial/usbserial_common_module-common.$(OBJEXT): \ + bus/usb/serial/$(am__dirstamp) \ + bus/usb/serial/$(DEPDIR)/$(am__dirstamp) + +usbserial_common.module$(EXEEXT): $(usbserial_common_module_OBJECTS) $(usbserial_common_module_DEPENDENCIES) $(EXTRA_usbserial_common_module_DEPENDENCIES) + @rm -f usbserial_common.module$(EXEEXT) + $(AM_V_CCLD)$(usbserial_common_module_LINK) $(usbserial_common_module_OBJECTS) $(usbserial_common_module_LDADD) $(LIBS) +bus/usb/serial/usbserial_ftdi_module-ftdi.$(OBJEXT): \ + bus/usb/serial/$(am__dirstamp) \ + bus/usb/serial/$(DEPDIR)/$(am__dirstamp) + +usbserial_ftdi.module$(EXEEXT): $(usbserial_ftdi_module_OBJECTS) $(usbserial_ftdi_module_DEPENDENCIES) $(EXTRA_usbserial_ftdi_module_DEPENDENCIES) + @rm -f usbserial_ftdi.module$(EXEEXT) + $(AM_V_CCLD)$(usbserial_ftdi_module_LINK) $(usbserial_ftdi_module_OBJECTS) $(usbserial_ftdi_module_LDADD) $(LIBS) +bus/usb/serial/usbserial_pl2303_module-pl2303.$(OBJEXT): \ + bus/usb/serial/$(am__dirstamp) \ + bus/usb/serial/$(DEPDIR)/$(am__dirstamp) + +usbserial_pl2303.module$(EXEEXT): $(usbserial_pl2303_module_OBJECTS) $(usbserial_pl2303_module_DEPENDENCIES) $(EXTRA_usbserial_pl2303_module_DEPENDENCIES) + @rm -f usbserial_pl2303.module$(EXEEXT) + $(AM_V_CCLD)$(usbserial_pl2303_module_LINK) $(usbserial_pl2303_module_OBJECTS) $(usbserial_pl2303_module_LDADD) $(LIBS) +bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.$(OBJEXT): \ + bus/usb/serial/$(am__dirstamp) \ + bus/usb/serial/$(DEPDIR)/$(am__dirstamp) + +usbserial_usbdebug.module$(EXEEXT): $(usbserial_usbdebug_module_OBJECTS) $(usbserial_usbdebug_module_DEPENDENCIES) $(EXTRA_usbserial_usbdebug_module_DEPENDENCIES) + @rm -f usbserial_usbdebug.module$(EXEEXT) + $(AM_V_CCLD)$(usbserial_usbdebug_module_LINK) $(usbserial_usbdebug_module_OBJECTS) $(usbserial_usbdebug_module_LDADD) $(LIBS) +commands/usbtest_module-usbtest.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +usbtest.module$(EXEEXT): $(usbtest_module_OBJECTS) $(usbtest_module_DEPENDENCIES) $(EXTRA_usbtest_module_DEPENDENCIES) + @rm -f usbtest.module$(EXEEXT) + $(AM_V_CCLD)$(usbtest_module_LINK) $(usbtest_module_OBJECTS) $(usbtest_module_LDADD) $(LIBS) +video/i386/pc/$(am__dirstamp): + @$(MKDIR_P) video/i386/pc + @: > video/i386/pc/$(am__dirstamp) +video/i386/pc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) video/i386/pc/$(DEPDIR) + @: > video/i386/pc/$(DEPDIR)/$(am__dirstamp) +video/i386/pc/vbe_module-vbe.$(OBJEXT): video/i386/pc/$(am__dirstamp) \ + video/i386/pc/$(DEPDIR)/$(am__dirstamp) + +vbe.module$(EXEEXT): $(vbe_module_OBJECTS) $(vbe_module_DEPENDENCIES) $(EXTRA_vbe_module_DEPENDENCIES) + @rm -f vbe.module$(EXEEXT) + $(AM_V_CCLD)$(vbe_module_LINK) $(vbe_module_OBJECTS) $(vbe_module_LDADD) $(LIBS) +commands/verify_module-verify.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +verify.module$(EXEEXT): $(verify_module_OBJECTS) $(verify_module_DEPENDENCIES) $(EXTRA_verify_module_DEPENDENCIES) + @rm -f verify.module$(EXEEXT) + $(AM_V_CCLD)$(verify_module_LINK) $(verify_module_OBJECTS) $(verify_module_LDADD) $(LIBS) +video/i386/pc/vga_module-vga.$(OBJEXT): video/i386/pc/$(am__dirstamp) \ + video/i386/pc/$(DEPDIR)/$(am__dirstamp) + +vga.module$(EXEEXT): $(vga_module_OBJECTS) $(vga_module_DEPENDENCIES) $(EXTRA_vga_module_DEPENDENCIES) + @rm -f vga.module$(EXEEXT) + $(AM_V_CCLD)$(vga_module_LINK) $(vga_module_OBJECTS) $(vga_module_LDADD) $(LIBS) +term/i386/pc/vga_text_module-vga_text.$(OBJEXT): \ + term/i386/pc/$(am__dirstamp) \ + term/i386/pc/$(DEPDIR)/$(am__dirstamp) + +vga_text.module$(EXEEXT): $(vga_text_module_OBJECTS) $(vga_text_module_DEPENDENCIES) $(EXTRA_vga_text_module_DEPENDENCIES) + @rm -f vga_text.module$(EXEEXT) + $(AM_V_CCLD)$(vga_text_module_LINK) $(vga_text_module_OBJECTS) $(vga_text_module_LDADD) $(LIBS) +video/video_module-video.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +video.module$(EXEEXT): $(video_module_OBJECTS) $(video_module_DEPENDENCIES) $(EXTRA_video_module_DEPENDENCIES) + @rm -f video.module$(EXEEXT) + $(AM_V_CCLD)$(video_module_LINK) $(video_module_OBJECTS) $(video_module_LDADD) $(LIBS) +video/video_bochs_module-bochs.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +video_bochs.module$(EXEEXT): $(video_bochs_module_OBJECTS) $(video_bochs_module_DEPENDENCIES) $(EXTRA_video_bochs_module_DEPENDENCIES) + @rm -f video_bochs.module$(EXEEXT) + $(AM_V_CCLD)$(video_bochs_module_LINK) $(video_bochs_module_OBJECTS) $(video_bochs_module_LDADD) $(LIBS) +video/video_cirrus_module-cirrus.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +video_cirrus.module$(EXEEXT): $(video_cirrus_module_OBJECTS) $(video_cirrus_module_DEPENDENCIES) $(EXTRA_video_cirrus_module_DEPENDENCIES) + @rm -f video_cirrus.module$(EXEEXT) + $(AM_V_CCLD)$(video_cirrus_module_LINK) $(video_cirrus_module_OBJECTS) $(video_cirrus_module_LDADD) $(LIBS) +video/video_colors_module-colors.$(OBJEXT): video/$(am__dirstamp) \ + video/$(DEPDIR)/$(am__dirstamp) + +video_colors.module$(EXEEXT): $(video_colors_module_OBJECTS) $(video_colors_module_DEPENDENCIES) $(EXTRA_video_colors_module_DEPENDENCIES) + @rm -f video_colors.module$(EXEEXT) + $(AM_V_CCLD)$(video_colors_module_LINK) $(video_colors_module_OBJECTS) $(video_colors_module_LDADD) $(LIBS) +video/fb/video_fb_module-video_fb.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) +video/fb/video_fb_module-fbblit.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) +video/fb/video_fb_module-fbfill.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) +video/fb/video_fb_module-fbutil.$(OBJEXT): video/fb/$(am__dirstamp) \ + video/fb/$(DEPDIR)/$(am__dirstamp) + +video_fb.module$(EXEEXT): $(video_fb_module_OBJECTS) $(video_fb_module_DEPENDENCIES) $(EXTRA_video_fb_module_DEPENDENCIES) + @rm -f video_fb.module$(EXEEXT) + $(AM_V_CCLD)$(video_fb_module_LINK) $(video_fb_module_OBJECTS) $(video_fb_module_LDADD) $(LIBS) +commands/videoinfo_module-videoinfo.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +videoinfo.module$(EXEEXT): $(videoinfo_module_OBJECTS) $(videoinfo_module_DEPENDENCIES) $(EXTRA_videoinfo_module_DEPENDENCIES) + @rm -f videoinfo.module$(EXEEXT) + $(AM_V_CCLD)$(videoinfo_module_LINK) $(videoinfo_module_OBJECTS) $(videoinfo_module_LDADD) $(LIBS) +commands/videotest_module-videotest.$(OBJEXT): \ + commands/$(am__dirstamp) commands/$(DEPDIR)/$(am__dirstamp) + +videotest.module$(EXEEXT): $(videotest_module_OBJECTS) $(videotest_module_DEPENDENCIES) $(EXTRA_videotest_module_DEPENDENCIES) + @rm -f videotest.module$(EXEEXT) + $(AM_V_CCLD)$(videotest_module_LINK) $(videotest_module_OBJECTS) $(videotest_module_LDADD) $(LIBS) +tests/videotest_checksum_module-videotest_checksum.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +videotest_checksum.module$(EXEEXT): $(videotest_checksum_module_OBJECTS) $(videotest_checksum_module_DEPENDENCIES) $(EXTRA_videotest_checksum_module_DEPENDENCIES) + @rm -f videotest_checksum.module$(EXEEXT) + $(AM_V_CCLD)$(videotest_checksum_module_LINK) $(videotest_checksum_module_OBJECTS) $(videotest_checksum_module_LDADD) $(LIBS) +loader/arm64/xen_boot_module-xen_boot.$(OBJEXT): \ + loader/arm64/$(am__dirstamp) \ + loader/arm64/$(DEPDIR)/$(am__dirstamp) +lib/xen_boot_module-cmdline.$(OBJEXT): lib/$(am__dirstamp) \ + lib/$(DEPDIR)/$(am__dirstamp) + +xen_boot.module$(EXEEXT): $(xen_boot_module_OBJECTS) $(xen_boot_module_DEPENDENCIES) $(EXTRA_xen_boot_module_DEPENDENCIES) + @rm -f xen_boot.module$(EXEEXT) + $(AM_V_CCLD)$(xen_boot_module_LINK) $(xen_boot_module_OBJECTS) $(xen_boot_module_LDADD) $(LIBS) +fs/xfs_module-xfs.$(OBJEXT): fs/$(am__dirstamp) \ + fs/$(DEPDIR)/$(am__dirstamp) + +xfs.module$(EXEEXT): $(xfs_module_OBJECTS) $(xfs_module_DEPENDENCIES) $(EXTRA_xfs_module_DEPENDENCIES) + @rm -f xfs.module$(EXEEXT) + $(AM_V_CCLD)$(xfs_module_LINK) $(xfs_module_OBJECTS) $(xfs_module_LDADD) $(LIBS) +loader/xnu_module-xnu_resume.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) +loader/i386/xnu_module-xnu.$(OBJEXT): loader/i386/$(am__dirstamp) \ + loader/i386/$(DEPDIR)/$(am__dirstamp) +loader/xnu_module-xnu.$(OBJEXT): loader/$(am__dirstamp) \ + loader/$(DEPDIR)/$(am__dirstamp) + +xnu.module$(EXEEXT): $(xnu_module_OBJECTS) $(xnu_module_DEPENDENCIES) $(EXTRA_xnu_module_DEPENDENCIES) + @rm -f xnu.module$(EXEEXT) + $(AM_V_CCLD)$(xnu_module_LINK) $(xnu_module_OBJECTS) $(xnu_module_LDADD) $(LIBS) +commands/xnu_uuid_module-xnu_uuid.$(OBJEXT): commands/$(am__dirstamp) \ + commands/$(DEPDIR)/$(am__dirstamp) + +xnu_uuid.module$(EXEEXT): $(xnu_uuid_module_OBJECTS) $(xnu_uuid_module_DEPENDENCIES) $(EXTRA_xnu_uuid_module_DEPENDENCIES) + @rm -f xnu_uuid.module$(EXEEXT) + $(AM_V_CCLD)$(xnu_uuid_module_LINK) $(xnu_uuid_module_OBJECTS) $(xnu_uuid_module_LDADD) $(LIBS) +tests/xnu_uuid_test_module-xnu_uuid_test.$(OBJEXT): \ + tests/$(am__dirstamp) tests/$(DEPDIR)/$(am__dirstamp) + +xnu_uuid_test.module$(EXEEXT): $(xnu_uuid_test_module_OBJECTS) $(xnu_uuid_test_module_DEPENDENCIES) $(EXTRA_xnu_uuid_test_module_DEPENDENCIES) + @rm -f xnu_uuid_test.module$(EXEEXT) + $(AM_V_CCLD)$(xnu_uuid_test_module_LINK) $(xnu_uuid_test_module_OBJECTS) $(xnu_uuid_test_module_LDADD) $(LIBS) +boot/mips/xz_decompress_image-startup_raw.$(OBJEXT): \ + boot/mips/$(am__dirstamp) boot/mips/$(DEPDIR)/$(am__dirstamp) +boot/decompressor/xz_decompress_image-minilib.$(OBJEXT): \ + boot/decompressor/$(am__dirstamp) \ + boot/decompressor/$(DEPDIR)/$(am__dirstamp) +boot/decompressor/xz_decompress_image-xz.$(OBJEXT): \ + boot/decompressor/$(am__dirstamp) \ + boot/decompressor/$(DEPDIR)/$(am__dirstamp) +lib/xzembed/$(am__dirstamp): + @$(MKDIR_P) lib/xzembed + @: > lib/xzembed/$(am__dirstamp) +lib/xzembed/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) lib/xzembed/$(DEPDIR) + @: > lib/xzembed/$(DEPDIR)/$(am__dirstamp) +lib/xzembed/xz_decompress_image-xz_dec_bcj.$(OBJEXT): \ + lib/xzembed/$(am__dirstamp) \ + lib/xzembed/$(DEPDIR)/$(am__dirstamp) +lib/xzembed/xz_decompress_image-xz_dec_lzma2.$(OBJEXT): \ + lib/xzembed/$(am__dirstamp) \ + lib/xzembed/$(DEPDIR)/$(am__dirstamp) +lib/xzembed/xz_decompress_image-xz_dec_stream.$(OBJEXT): \ + lib/xzembed/$(am__dirstamp) \ + lib/xzembed/$(DEPDIR)/$(am__dirstamp) +kern/xz_decompress_image-compiler-rt.$(OBJEXT): kern/$(am__dirstamp) \ + kern/$(DEPDIR)/$(am__dirstamp) + +xz_decompress.image$(EXEEXT): $(xz_decompress_image_OBJECTS) $(xz_decompress_image_DEPENDENCIES) $(EXTRA_xz_decompress_image_DEPENDENCIES) + @rm -f xz_decompress.image$(EXEEXT) + $(AM_V_CCLD)$(xz_decompress_image_LINK) $(xz_decompress_image_OBJECTS) $(xz_decompress_image_LDADD) $(LIBS) +io/xzio_module-xzio.$(OBJEXT): io/$(am__dirstamp) \ + io/$(DEPDIR)/$(am__dirstamp) +lib/xzembed/xzio_module-xz_dec_bcj.$(OBJEXT): \ + lib/xzembed/$(am__dirstamp) \ + lib/xzembed/$(DEPDIR)/$(am__dirstamp) +lib/xzembed/xzio_module-xz_dec_lzma2.$(OBJEXT): \ + lib/xzembed/$(am__dirstamp) \ + lib/xzembed/$(DEPDIR)/$(am__dirstamp) +lib/xzembed/xzio_module-xz_dec_stream.$(OBJEXT): \ + lib/xzembed/$(am__dirstamp) \ + lib/xzembed/$(DEPDIR)/$(am__dirstamp) + +xzio.module$(EXEEXT): $(xzio_module_OBJECTS) $(xzio_module_DEPENDENCIES) $(EXTRA_xzio_module_DEPENDENCIES) + @rm -f xzio.module$(EXEEXT) + $(AM_V_CCLD)$(xzio_module_LINK) $(xzio_module_OBJECTS) $(xzio_module_LDADD) $(LIBS) +fs/zfs/$(am__dirstamp): + @$(MKDIR_P) fs/zfs + @: > fs/zfs/$(am__dirstamp) +fs/zfs/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) fs/zfs/$(DEPDIR) + @: > fs/zfs/$(DEPDIR)/$(am__dirstamp) +fs/zfs/zfs_module-zfs.$(OBJEXT): fs/zfs/$(am__dirstamp) \ + fs/zfs/$(DEPDIR)/$(am__dirstamp) +fs/zfs/zfs_module-zfs_lzjb.$(OBJEXT): fs/zfs/$(am__dirstamp) \ + fs/zfs/$(DEPDIR)/$(am__dirstamp) +fs/zfs/zfs_module-zfs_lz4.$(OBJEXT): fs/zfs/$(am__dirstamp) \ + fs/zfs/$(DEPDIR)/$(am__dirstamp) +fs/zfs/zfs_module-zfs_sha256.$(OBJEXT): fs/zfs/$(am__dirstamp) \ + fs/zfs/$(DEPDIR)/$(am__dirstamp) +fs/zfs/zfs_module-zfs_fletcher.$(OBJEXT): fs/zfs/$(am__dirstamp) \ + fs/zfs/$(DEPDIR)/$(am__dirstamp) + +zfs.module$(EXEEXT): $(zfs_module_OBJECTS) $(zfs_module_DEPENDENCIES) $(EXTRA_zfs_module_DEPENDENCIES) + @rm -f zfs.module$(EXEEXT) + $(AM_V_CCLD)$(zfs_module_LINK) $(zfs_module_OBJECTS) $(zfs_module_LDADD) $(LIBS) +fs/zfs/zfscrypt_module-zfscrypt.$(OBJEXT): fs/zfs/$(am__dirstamp) \ + fs/zfs/$(DEPDIR)/$(am__dirstamp) + +zfscrypt.module$(EXEEXT): $(zfscrypt_module_OBJECTS) $(zfscrypt_module_DEPENDENCIES) $(EXTRA_zfscrypt_module_DEPENDENCIES) + @rm -f zfscrypt.module$(EXEEXT) + $(AM_V_CCLD)$(zfscrypt_module_LINK) $(zfscrypt_module_OBJECTS) $(zfscrypt_module_LDADD) $(LIBS) +fs/zfs/zfsinfo_module-zfsinfo.$(OBJEXT): fs/zfs/$(am__dirstamp) \ + fs/zfs/$(DEPDIR)/$(am__dirstamp) + +zfsinfo.module$(EXEEXT): $(zfsinfo_module_OBJECTS) $(zfsinfo_module_DEPENDENCIES) $(EXTRA_zfsinfo_module_DEPENDENCIES) + @rm -f zfsinfo.module$(EXEEXT) + $(AM_V_CCLD)$(zfsinfo_module_LINK) $(zfsinfo_module_OBJECTS) $(zfsinfo_module_LDADD) $(LIBS) +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) +install-grubconfSCRIPTS: $(grubconf_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(grubconf_SCRIPTS)'; test -n "$(grubconfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(grubconfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(grubconfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(grubconfdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(grubconfdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-grubconfSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(grubconf_SCRIPTS)'; test -n "$(grubconfdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(grubconfdir)'; $(am__uninstall_files_from_dir) +install-platformSCRIPTS: $(platform_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(platform_SCRIPTS)'; test -n "$(platformdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(platformdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(platformdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(platformdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(platformdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-platformSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(platform_SCRIPTS)'; test -n "$(platformdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(platformdir)'; $(am__uninstall_files_from_dir) +install-sbinSCRIPTS: $(sbin_SCRIPTS) + @$(NORMAL_INSTALL) + @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(sbindir)'; $(am__uninstall_files_from_dir) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f boot/decompressor/*.$(OBJEXT) + -rm -f boot/i386/pc/*.$(OBJEXT) + -rm -f boot/i386/qemu/*.$(OBJEXT) + -rm -f boot/mips/*.$(OBJEXT) + -rm -f boot/mips/loongson/*.$(OBJEXT) + -rm -f boot/sparc64/ieee1275/*.$(OBJEXT) + -rm -f bus/*.$(OBJEXT) + -rm -f bus/emu/*.$(OBJEXT) + -rm -f bus/i386/ieee1275/*.$(OBJEXT) + -rm -f bus/usb/*.$(OBJEXT) + -rm -f bus/usb/serial/*.$(OBJEXT) + -rm -f commands/*.$(OBJEXT) + -rm -f commands/arc/*.$(OBJEXT) + -rm -f commands/efi/*.$(OBJEXT) + -rm -f commands/i386/*.$(OBJEXT) + -rm -f commands/i386/coreboot/*.$(OBJEXT) + -rm -f commands/i386/pc/*.$(OBJEXT) + -rm -f commands/ieee1275/*.$(OBJEXT) + -rm -f commands/mips/loongson/*.$(OBJEXT) + -rm -f commands/xen/*.$(OBJEXT) + -rm -f disk/*.$(OBJEXT) + -rm -f disk/arc/*.$(OBJEXT) + -rm -f disk/efi/*.$(OBJEXT) + -rm -f disk/i386/pc/*.$(OBJEXT) + -rm -f disk/ieee1275/*.$(OBJEXT) + -rm -f disk/uboot/*.$(OBJEXT) + -rm -f disk/xen/*.$(OBJEXT) + -rm -f efiemu/*.$(OBJEXT) + -rm -f efiemu/i386/*.$(OBJEXT) + -rm -f efiemu/i386/pc/*.$(OBJEXT) + -rm -f font/*.$(OBJEXT) + -rm -f fs/*.$(OBJEXT) + -rm -f fs/zfs/*.$(OBJEXT) + -rm -f gdb/*.$(OBJEXT) + -rm -f gdb/i386/*.$(OBJEXT) + -rm -f gettext/*.$(OBJEXT) + -rm -f gfxmenu/*.$(OBJEXT) + -rm -f gnulib/*.$(OBJEXT) + -rm -f hello/*.$(OBJEXT) + -rm -f hook/*.$(OBJEXT) + -rm -f io/*.$(OBJEXT) + -rm -f kern/*.$(OBJEXT) + -rm -f kern/arm/*.$(OBJEXT) + -rm -f kern/arm/efi/*.$(OBJEXT) + -rm -f kern/arm/uboot/*.$(OBJEXT) + -rm -f kern/arm64/*.$(OBJEXT) + -rm -f kern/arm64/efi/*.$(OBJEXT) + -rm -f kern/efi/*.$(OBJEXT) + -rm -f kern/emu/*.$(OBJEXT) + -rm -f kern/generic/*.$(OBJEXT) + -rm -f kern/i386/*.$(OBJEXT) + -rm -f kern/i386/coreboot/*.$(OBJEXT) + -rm -f kern/i386/efi/*.$(OBJEXT) + -rm -f kern/i386/ieee1275/*.$(OBJEXT) + -rm -f kern/i386/pc/*.$(OBJEXT) + -rm -f kern/i386/qemu/*.$(OBJEXT) + -rm -f kern/i386/xen/*.$(OBJEXT) + -rm -f kern/ia64/*.$(OBJEXT) + -rm -f kern/ia64/efi/*.$(OBJEXT) + -rm -f kern/ieee1275/*.$(OBJEXT) + -rm -f kern/mips/*.$(OBJEXT) + -rm -f kern/mips/arc/*.$(OBJEXT) + -rm -f kern/mips/loongson/*.$(OBJEXT) + -rm -f kern/mips/qemu_mips/*.$(OBJEXT) + -rm -f kern/powerpc/*.$(OBJEXT) + -rm -f kern/powerpc/ieee1275/*.$(OBJEXT) + -rm -f kern/sparc64/*.$(OBJEXT) + -rm -f kern/sparc64/ieee1275/*.$(OBJEXT) + -rm -f kern/uboot/*.$(OBJEXT) + -rm -f kern/x86_64/*.$(OBJEXT) + -rm -f kern/x86_64/efi/*.$(OBJEXT) + -rm -f kern/x86_64/xen/*.$(OBJEXT) + -rm -f kern/xen/*.$(OBJEXT) + -rm -f lib/*.$(OBJEXT) + -rm -f lib/arc/*.$(OBJEXT) + -rm -f lib/efi/*.$(OBJEXT) + -rm -f lib/emu/*.$(OBJEXT) + -rm -f lib/i386/*.$(OBJEXT) + -rm -f lib/i386/pc/*.$(OBJEXT) + -rm -f lib/i386/xen/*.$(OBJEXT) + -rm -f lib/ieee1275/*.$(OBJEXT) + -rm -f lib/libgcrypt-grub/cipher/*.$(OBJEXT) + -rm -f lib/libgcrypt-grub/mpi/*.$(OBJEXT) + -rm -f lib/libgcrypt_wrap/*.$(OBJEXT) + -rm -f lib/minilzo/*.$(OBJEXT) + -rm -f lib/mips/*.$(OBJEXT) + -rm -f lib/mips/arc/*.$(OBJEXT) + -rm -f lib/mips/loongson/*.$(OBJEXT) + -rm -f lib/mips/qemu_mips/*.$(OBJEXT) + -rm -f lib/powerpc/*.$(OBJEXT) + -rm -f lib/uboot/*.$(OBJEXT) + -rm -f lib/x86_64/*.$(OBJEXT) + -rm -f lib/x86_64/efi/*.$(OBJEXT) + -rm -f lib/x86_64/xen/*.$(OBJEXT) + -rm -f lib/xen/*.$(OBJEXT) + -rm -f lib/xzembed/*.$(OBJEXT) + -rm -f loader/*.$(OBJEXT) + -rm -f loader/arm/*.$(OBJEXT) + -rm -f loader/arm64/*.$(OBJEXT) + -rm -f loader/efi/*.$(OBJEXT) + -rm -f loader/i386/*.$(OBJEXT) + -rm -f loader/i386/coreboot/*.$(OBJEXT) + -rm -f loader/i386/pc/*.$(OBJEXT) + -rm -f loader/ia64/efi/*.$(OBJEXT) + -rm -f loader/mips/*.$(OBJEXT) + -rm -f loader/powerpc/ieee1275/*.$(OBJEXT) + -rm -f loader/sparc64/ieee1275/*.$(OBJEXT) + -rm -f mmap/*.$(OBJEXT) + -rm -f mmap/efi/*.$(OBJEXT) + -rm -f mmap/i386/*.$(OBJEXT) + -rm -f mmap/i386/pc/*.$(OBJEXT) + -rm -f mmap/mips/*.$(OBJEXT) + -rm -f net/*.$(OBJEXT) + -rm -f net/drivers/efi/*.$(OBJEXT) + -rm -f net/drivers/emu/*.$(OBJEXT) + -rm -f net/drivers/i386/pc/*.$(OBJEXT) + -rm -f net/drivers/ieee1275/*.$(OBJEXT) + -rm -f net/drivers/uboot/*.$(OBJEXT) + -rm -f normal/*.$(OBJEXT) + -rm -f osdep/*.$(OBJEXT) + -rm -f osdep/devmapper/*.$(OBJEXT) + -rm -f osdep/unix/*.$(OBJEXT) + -rm -f partmap/*.$(OBJEXT) + -rm -f parttool/*.$(OBJEXT) + -rm -f script/*.$(OBJEXT) + -rm -f term/*.$(OBJEXT) + -rm -f term/arc/*.$(OBJEXT) + -rm -f term/efi/*.$(OBJEXT) + -rm -f term/i386/coreboot/*.$(OBJEXT) + -rm -f term/i386/pc/*.$(OBJEXT) + -rm -f term/ieee1275/*.$(OBJEXT) + -rm -f term/uboot/*.$(OBJEXT) + -rm -f term/xen/*.$(OBJEXT) + -rm -f tests/*.$(OBJEXT) + -rm -f tests/lib/*.$(OBJEXT) + -rm -f video/*.$(OBJEXT) + -rm -f video/emu/*.$(OBJEXT) + -rm -f video/fb/*.$(OBJEXT) + -rm -f video/i386/coreboot/*.$(OBJEXT) + -rm -f video/i386/pc/*.$(OBJEXT) + -rm -f video/readers/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grub_emu-grub_emu_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grub_emu_lite-symlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel_exec-symlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal_module-grub_script.tab.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal_module-grub_script.yy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal_module-unidata.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trig_module-trigtables.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/decompressor/$(DEPDIR)/none_decompress_image-none.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/decompressor/$(DEPDIR)/xz_decompress_image-minilib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/decompressor/$(DEPDIR)/xz_decompress_image-xz.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/pc/$(DEPDIR)/boot_hybrid_image-boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/pc/$(DEPDIR)/boot_image-boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/pc/$(DEPDIR)/cdboot_image-cdboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/pc/$(DEPDIR)/diskboot_image-diskboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/pc/$(DEPDIR)/lnxboot_image-lnxboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/pc/$(DEPDIR)/lzma_decompress_image-startup_raw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/pc/$(DEPDIR)/pxeboot_image-pxeboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/i386/qemu/$(DEPDIR)/boot_image-boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/mips/$(DEPDIR)/none_decompress_image-startup_raw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/mips/$(DEPDIR)/xz_decompress_image-startup_raw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/mips/loongson/$(DEPDIR)/fwstart_fuloong2f_image-fuloong2f.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/mips/loongson/$(DEPDIR)/fwstart_image-fwstart.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/sparc64/ieee1275/$(DEPDIR)/boot_image-boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/sparc64/ieee1275/$(DEPDIR)/cdboot_image-boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@boot/sparc64/ieee1275/$(DEPDIR)/diskboot_image-diskboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/$(DEPDIR)/cs5536_module-cs5536.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/$(DEPDIR)/kernel_exec-bonito.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/$(DEPDIR)/kernel_exec-cs5536.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/$(DEPDIR)/kernel_exec-pci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/$(DEPDIR)/pci_module-pci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/emu/$(DEPDIR)/emupci_module-pci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/i386/ieee1275/$(DEPDIR)/pci_module-pci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/$(DEPDIR)/ehci_module-ehci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/$(DEPDIR)/ohci_module-ohci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/$(DEPDIR)/uhci_module-uhci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/$(DEPDIR)/usb_module-usb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/$(DEPDIR)/usb_module-usbhub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/$(DEPDIR)/usb_module-usbtrans.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/serial/$(DEPDIR)/usbserial_common_module-common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/serial/$(DEPDIR)/usbserial_ftdi_module-ftdi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/serial/$(DEPDIR)/usbserial_pl2303_module-pl2303.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@bus/usb/serial/$(DEPDIR)/usbserial_usbdebug_module-usbdebug_late.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/acpi_module-acpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/blocklist_module-blocklist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/boot_module-boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/boottime_module-boottime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/cacheinfo_module-cacheinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/cat_module-cat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/cmp_module-cmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/configfile_module-configfile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/date_module-date.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/echo_module-echo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/emupci_module-lspci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/eval_module-eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/extcmd_module-extcmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/file_module-file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/file_module-file32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/file_module-file64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/gptsync_module-gptsync.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/halt_module-acpihalt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/hashsum_module-hashsum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/hdparm_module-hdparm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/help_module-help.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/hexdump_module-hexdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/iorw_module-iorw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/kernel_exec-boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/kernel_exec-extcmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/kernel_exec-keylayouts.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/keylayouts_module-keylayouts.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/keystatus_module-keystatus.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/legacycfg_module-legacycfg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/loadenv_module-loadenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/ls_module-ls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/lsacpi_module-lsacpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/lsmmap_module-lsmmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/lspci_module-lspci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/macbless_module-macbless.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/memrw_module-memrw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/minicmd_module-minicmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/nativedisk_module-nativedisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/normal_module-menuentry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/parttool_module-parttool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/password_module-password.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/password_pbkdf2_module-password_pbkdf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/pcidump_module-pcidump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/probe_module-probe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/read_module-read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/regexp_module-regexp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/regexp_module-wildcard.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/search_fs_file_module-search_file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/search_fs_uuid_module-search_uuid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/search_label_module-search_label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/search_module-search_wrap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/setpci_module-setpci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/sleep_module-sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/syslinuxcfg_module-syslinuxcfg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/terminal_module-terminal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/test_module-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/testload_module-testload.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/testspeed_module-testspeed.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/time_module-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/tr_module-tr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/true_module-true.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/usbtest_module-usbtest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/verify_module-verify.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/videoinfo_module-videoinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/videotest_module-videotest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/arc/$(DEPDIR)/lsdev_module-lsdev.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/efifwsetup_module-efifwsetup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/fixvideo_module-fixvideo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/loadbios_module-loadbios.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/lsefi_module-lsefi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/efi/$(DEPDIR)/lssal_module-lssal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/$(DEPDIR)/cmostest_module-cmostest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/$(DEPDIR)/cpuid_module-cpuid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/coreboot/$(DEPDIR)/cbls_module-cbls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/coreboot/$(DEPDIR)/cbtime_module-cb_timestamps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap_int13h.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/pc/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/pc/$(DEPDIR)/lsapm_module-lsapm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/pc/$(DEPDIR)/play_module-play.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/i386/pc/$(DEPDIR)/sendkey_module-sendkey.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/ieee1275/$(DEPDIR)/suspend_module-suspend.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/mips/loongson/$(DEPDIR)/lsspd_module-lsspd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@commands/xen/$(DEPDIR)/lsxen_module-lsxen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/ahci_module-ahci.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/ata_module-ata.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/cryptodisk_module-cryptodisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/diskfilter_module-diskfilter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/dm_nv_module-dmraid_nvidia.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/geli_module-geli.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/kernel_exec-host.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/ldm_module-ldm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/loopback_module-loopback.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/luks_module-AFSplitter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/luks_module-luks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/lvm_module-lvm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/mdraid09_be_module-mdraid_linux_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/mdraid09_module-mdraid_linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/mdraid1x_module-mdraid1x_linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/memdisk_module-memdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/pata_module-pata.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/raid5rec_module-raid5_recover.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/raid6rec_module-raid6_recover.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/scsi_module-scsi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/$(DEPDIR)/usbms_module-usbms.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/arc/$(DEPDIR)/kernel_exec-arcdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/efi/$(DEPDIR)/kernel_exec-efidisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/i386/pc/$(DEPDIR)/biosdisk_module-biosdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/ieee1275/$(DEPDIR)/kernel_exec-ofdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/ieee1275/$(DEPDIR)/nand_module-nand.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/uboot/$(DEPDIR)/kernel_exec-ubootdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@disk/xen/$(DEPDIR)/kernel_exec-xendisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-loadcore32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-loadcore64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-loadcore_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-mm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-pnvram.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-prepare32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-prepare64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/$(DEPDIR)/efiemu_module-symbols.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/i386/$(DEPDIR)/efiemu_module-coredetect.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/i386/$(DEPDIR)/efiemu_module-loadcore32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/i386/$(DEPDIR)/efiemu_module-loadcore64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/i386/$(DEPDIR)/efiemu_module-nocfgtables.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@efiemu/i386/pc/$(DEPDIR)/efiemu_module-cfgtables.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@font/$(DEPDIR)/font_module-font.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@font/$(DEPDIR)/font_module-font_cmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@font/$(DEPDIR)/kernel_exec-font.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@font/$(DEPDIR)/kernel_exec-font_cmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/affs_module-affs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/afs_module-afs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/archelp_module-archelp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/bfs_module-bfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/btrfs_module-btrfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/cbfs_module-cbfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/cpio_be_module-cpio_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/cpio_module-cpio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/exfat_module-exfat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/ext2_module-ext2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/fat_module-fat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/fshelp_module-fshelp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/hfs_module-hfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/hfsplus_module-hfsplus.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/hfspluscomp_module-hfspluscomp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/iso9660_module-iso9660.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/jfs_module-jfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/minix2_be_module-minix2_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/minix2_module-minix2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/minix3_be_module-minix3_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/minix3_module-minix3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/minix_be_module-minix_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/minix_module-minix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/newc_module-newc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/nilfs2_module-nilfs2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/ntfs_module-ntfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/ntfscomp_module-ntfscomp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/odc_module-odc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/procfs_module-proc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/reiserfs_module-reiserfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/romfs_module-romfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/sfs_module-sfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/squash4_module-squash4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/tar_module-tar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/udf_module-udf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/ufs1_be_module-ufs_be.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/ufs1_module-ufs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/ufs2_module-ufs2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/$(DEPDIR)/xfs_module-xfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/zfs/$(DEPDIR)/zfs_module-zfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/zfs/$(DEPDIR)/zfs_module-zfs_fletcher.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/zfs/$(DEPDIR)/zfs_module-zfs_lz4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/zfs/$(DEPDIR)/zfs_module-zfs_lzjb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/zfs/$(DEPDIR)/zfs_module-zfs_sha256.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/zfs/$(DEPDIR)/zfscrypt_module-zfscrypt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fs/zfs/$(DEPDIR)/zfsinfo_module-zfsinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gdb/$(DEPDIR)/gdb_module-cstub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gdb/$(DEPDIR)/gdb_module-gdb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gdb/i386/$(DEPDIR)/gdb_module-idt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gdb/i386/$(DEPDIR)/gdb_module-machdep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gdb/i386/$(DEPDIR)/gdb_module-signal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gettext/$(DEPDIR)/gettext_module-gettext.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-font.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gfxmenu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_box.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_canvas.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_circular_progress.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_image.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_label.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_progress_bar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_string_util.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-gui_util.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-icon_manager.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-theme_loader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-view.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gfxmenu/$(DEPDIR)/gfxmenu_module-widget-box.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@gnulib/$(DEPDIR)/regexp_module-regex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@hello/$(DEPDIR)/hello_module-hello.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@hook/$(DEPDIR)/datehook_module-datehook.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@io/$(DEPDIR)/bufio_module-bufio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@io/$(DEPDIR)/gzio_module-gzio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@io/$(DEPDIR)/kernel_exec-bufio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@io/$(DEPDIR)/lzopio_module-lzopio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@io/$(DEPDIR)/offsetio_module-offset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@io/$(DEPDIR)/xzio_module-xzio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/acpi_module-acpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/elf_module-elf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-acpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-command.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-compiler-rt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-corecmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-device.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-disk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-env.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-err.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-fs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-mm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-partition.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-rescue_parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-rescue_reader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-term.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/kernel_exec-vga_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/$(DEPDIR)/kernel_exec-cache_armv6.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/$(DEPDIR)/kernel_exec-cache_armv7.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/$(DEPDIR)/kernel_exec-compiler-rt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/$(DEPDIR)/kernel_exec-dl_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/efi/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/efi/$(DEPDIR)/kernel_exec-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/efi/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm/uboot/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm64/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm64/$(DEPDIR)/kernel_exec-cache_flush.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm64/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm64/$(DEPDIR)/kernel_exec-dl_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm64/efi/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/arm64/efi/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-acpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-efi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-fdt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/efi/$(DEPDIR)/kernel_exec-mm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/grub_emu-full.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/grub_emu_lite-lite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-argp_common.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-cache_s.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-hostfs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-mm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/emu/$(DEPDIR)/kernel_exec-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/generic/$(DEPDIR)/kernel_exec-millisleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/generic/$(DEPDIR)/kernel_exec-rtc_get_time_ms.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/$(DEPDIR)/kernel_exec-multiboot_mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/$(DEPDIR)/kernel_exec-tsc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/$(DEPDIR)/kernel_exec-tsc_pit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/$(DEPDIR)/kernel_exec-tsc_pmtimer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/$(DEPDIR)/random_module-tsc_pmtimer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/coreboot/$(DEPDIR)/cbtable_module-cbtable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/coreboot/$(DEPDIR)/kernel_exec-cbtable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/coreboot/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/coreboot/$(DEPDIR)/kernel_exec-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/coreboot/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/efi/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/efi/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/efi/$(DEPDIR)/kernel_exec-tsc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/ieee1275/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/pc/$(DEPDIR)/acpi_module-acpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/pc/$(DEPDIR)/kernel_exec-acpi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/pc/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/pc/$(DEPDIR)/kernel_exec-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/pc/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/qemu/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/qemu/$(DEPDIR)/kernel_exec-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/qemu/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/xen/$(DEPDIR)/kernel_exec-hypercall.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/xen/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/i386/xen/$(DEPDIR)/kernel_exec-tsc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ia64/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ia64/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ia64/$(DEPDIR)/kernel_exec-dl_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ia64/efi/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ia64/efi/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ieee1275/$(DEPDIR)/kernel_exec-cmain.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ieee1275/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ieee1275/$(DEPDIR)/kernel_exec-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/ieee1275/$(DEPDIR)/kernel_exec-openfw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/mips/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/mips/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/mips/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/mips/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/mips/arc/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/mips/loongson/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/mips/qemu_mips/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/powerpc/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/powerpc/$(DEPDIR)/kernel_exec-compiler-rt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/powerpc/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/powerpc/ieee1275/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/sparc64/$(DEPDIR)/kernel_exec-cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/sparc64/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/uboot/$(DEPDIR)/kernel_exec-hw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/uboot/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/uboot/$(DEPDIR)/kernel_exec-uboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/x86_64/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/x86_64/efi/$(DEPDIR)/kernel_exec-callwrap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/x86_64/efi/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/x86_64/xen/$(DEPDIR)/kernel_exec-hypercall.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/x86_64/xen/$(DEPDIR)/kernel_exec-startup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@kern/xen/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/adler32_module-adler32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/all_video_module-fake_module.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/backtrace_module-backtrace.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/btrfs_module-crc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/chain_module-LzmaDec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/crc64_module-crc64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/crypto_module-crypto.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/datetime_module-cmos_datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/disk_module-disk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/div_module-division.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/extcmd_module-arg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/fdt_module-fdt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/hdparm_module-hexdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/hexdump_module-hexdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/kernel_exec-arg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/kernel_exec-division.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/legacycfg_module-legacy_parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/linux16_module-cmdline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/linux_module-cmdline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/loadenv_module-envblk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/multiboot2_module-cmdline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/multiboot_module-cmdline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/normal_module-getline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/pbkdf2_module-pbkdf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/priority_queue_module-priority_queue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/progress_module-progress.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/random_module-random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/setjmp_module-setjmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/syslinuxcfg_module-syslinux_parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/xen_boot_module-cmdline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/arc/$(DEPDIR)/datetime_module-datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/efi/$(DEPDIR)/datetime_module-datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/efi/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/efi/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/efi/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/emu/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/backtrace_module-backtrace.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/random_module-random.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/reboot_module-reboot_trampoline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/relocator_module-relocator16.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/relocator_module-relocator32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/relocator_module-relocator64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/relocator_module-relocator_asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/$(DEPDIR)/relocator_module-relocator_common_c.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/pc/$(DEPDIR)/boot_module-biosnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/pc/$(DEPDIR)/legacycfg_module-vesa_modes_table.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/pc/$(DEPDIR)/linux_module-vesa_modes_table.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/i386/xen/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ieee1275/$(DEPDIR)/datetime_module-cmos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ieee1275/$(DEPDIR)/datetime_module-datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ieee1275/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ieee1275/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/ieee1275/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_arcfour_module-arcfour.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_blowfish_module-blowfish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia-glue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_cast5_module-cast5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_crc_module-crc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_des_module-des.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_dsa_module-dsa.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_idea_module-idea.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md4_module-md4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md5_module-md5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rfc2268_module-rfc2268.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rijndael_module-rijndael.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rmd160_module-rmd160.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rsa_module-rsa.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_seed_module-seed.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_serpent_module-serpent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha1_module-sha1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha256_module-sha256.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha512_module-sha512.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_tiger_module-tiger.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_twofish_module-twofish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_whirlpool_module-whirlpool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-add.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-bit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-cmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-div.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-gcd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mpow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-pow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpicoder.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-add1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-div.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-lshift.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-rshift.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-sub1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpiutil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/libgcrypt_wrap/$(DEPDIR)/mpi_module-mem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/minilzo/$(DEPDIR)/lzopio_module-minilzo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/mips/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/mips/$(DEPDIR)/relocator_module-relocator_asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/mips/arc/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/mips/loongson/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/mips/qemu_mips/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/powerpc/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/powerpc/$(DEPDIR)/relocator_module-relocator_asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/uboot/$(DEPDIR)/datetime_module-datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/uboot/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/uboot/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/x86_64/$(DEPDIR)/relocator_module-relocator_asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/x86_64/efi/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/x86_64/xen/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xen/$(DEPDIR)/datetime_module-datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xen/$(DEPDIR)/halt_module-halt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xen/$(DEPDIR)/reboot_module-reboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xen/$(DEPDIR)/relocator_module-relocator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_bcj.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_lzma2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_stream.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_bcj.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_lzma2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_stream.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/aout_module-aout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/linux16_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/macho_module-lzss.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/macho_module-macho.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/macho_module-macho32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/macho_module-macho64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/multiboot2_module-multiboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/multiboot2_module-multiboot_mbi2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/multiboot_module-multiboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/xnu_module-xnu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/$(DEPDIR)/xnu_module-xnu_resume.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/arm/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/arm64/$(DEPDIR)/fdt_module-fdt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/arm64/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/arm64/$(DEPDIR)/xen_boot_module-xen_boot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/efi/$(DEPDIR)/appleldr_module-appleloader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/efi/$(DEPDIR)/chain_module-chainloader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/bsd_module-bsd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/bsd_module-bsd32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/bsd_module-bsd64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/file_module-xen_file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/file_module-xen_file32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/file_module-xen_file64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/linux_module-xen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/multiboot_module-multiboot_mbi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/$(DEPDIR)/xnu_module-xnu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/coreboot/$(DEPDIR)/chain_module-chainloader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/pc/$(DEPDIR)/chain_module-chainloader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/pc/$(DEPDIR)/freedos_module-freedos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/pc/$(DEPDIR)/linux16_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/pc/$(DEPDIR)/ntldr_module-ntldr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/pc/$(DEPDIR)/plan9_module-plan9.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/pc/$(DEPDIR)/pxechain_module-pxechainloader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/i386/pc/$(DEPDIR)/truecrypt_module-truecrypt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/ia64/efi/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/mips/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/powerpc/ieee1275/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@loader/sparc64/ieee1275/$(DEPDIR)/linux_module-linux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mmap/$(DEPDIR)/mmap_module-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mmap/efi/$(DEPDIR)/mmap_module-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mmap/i386/$(DEPDIR)/mmap_module-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mmap/i386/$(DEPDIR)/mmap_module-uppermem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mmap/i386/pc/$(DEPDIR)/mmap_module-mmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mmap/i386/pc/$(DEPDIR)/mmap_module-mmap_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mmap/mips/$(DEPDIR)/mmap_module-uppermem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/http_module-http.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-arp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-bootp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-dns.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-ethernet.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-icmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-icmp6.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-ip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-net.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-netbuff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-tcp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/net_module-udp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/$(DEPDIR)/tftp_module-tftp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/drivers/efi/$(DEPDIR)/efinet_module-efinet.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/drivers/emu/$(DEPDIR)/emunet_module-emunet.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/drivers/i386/pc/$(DEPDIR)/pxe_module-pxe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/drivers/ieee1275/$(DEPDIR)/ofnet_module-ofnet.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@net/drivers/uboot/$(DEPDIR)/ubootnet_module-ubootnet.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-auth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-autofs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-charset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-cmdline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-color.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-completion.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-context.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-crypto.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-datetime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-dyncmd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-menu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-menu_entry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-menu_text.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-misc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@normal/$(DEPDIR)/normal_module-term.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-cputime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-dl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-emuconsole.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-emunet.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-exec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/$(DEPDIR)/kernel_exec-sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/devmapper/$(DEPDIR)/kernel_exec-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@osdep/unix/$(DEPDIR)/kernel_exec-hostdisk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_acorn_module-acorn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_amiga_module-amiga.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_apple_module-apple.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_bsd_module-bsdlabel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_dfly_module-dfly.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_dvh_module-dvh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_gpt_module-gpt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_msdos_module-msdos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_plan_module-plan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_sun_module-sun.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@partmap/$(DEPDIR)/part_sunpc_module-sunpc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@parttool/$(DEPDIR)/msdospart_module-msdospart.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@script/$(DEPDIR)/normal_module-argv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@script/$(DEPDIR)/normal_module-execute.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@script/$(DEPDIR)/normal_module-function.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@script/$(DEPDIR)/normal_module-lexer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@script/$(DEPDIR)/normal_module-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@script/$(DEPDIR)/normal_module-script.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/at_keyboard_module-at_keyboard.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/gfxterm_background_module-gfxterm_background.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/gfxterm_module-gfxterm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/kernel_exec-at_keyboard.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/kernel_exec-gfxterm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/kernel_exec-ns8250.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/kernel_exec-serial.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/kernel_exec-terminfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/kernel_exec-tparm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/morse_module-morse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/serial_module-ns8250.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/serial_module-serial.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/spkmodem_module-spkmodem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/terminfo_module-terminfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/terminfo_module-tparm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/$(DEPDIR)/usb_keyboard_module-usb_keyboard.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/arc/$(DEPDIR)/kernel_exec-console.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/arc/$(DEPDIR)/serial_module-serial.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/efi/$(DEPDIR)/kernel_exec-console.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/efi/$(DEPDIR)/serial_module-serial.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/i386/coreboot/$(DEPDIR)/cbmemc_module-cbmemc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/i386/pc/$(DEPDIR)/kernel_exec-console.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/i386/pc/$(DEPDIR)/kernel_exec-vga_text.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/i386/pc/$(DEPDIR)/mda_text_module-mda_text.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/i386/pc/$(DEPDIR)/vga_text_module-vga_text.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/ieee1275/$(DEPDIR)/escc_module-escc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/ieee1275/$(DEPDIR)/kernel_exec-console.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/ieee1275/$(DEPDIR)/serial_module-serial.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/uboot/$(DEPDIR)/kernel_exec-console.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@term/xen/$(DEPDIR)/kernel_exec-console.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/bswap_test_module-bswap_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/cmdline_cat_test_module-cmdline_cat_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/cmp_test_module-cmp_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/ctz_test_module-ctz_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/div_test_module-div_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/exfctest_module-example_functional_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/functional_test_module-fake_input.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/functional_test_module-video_checksum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/gfxterm_menu_module-gfxterm_menu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/legacy_password_test_module-legacy_password_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/mul_test_module-mul_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/pbkdf2_test_module-pbkdf2_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/setjmp_test_module-setjmp_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/shift_test_module-shift_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/signature_test_module-signature_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/sleep_test_module-sleep_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/test_blockarg_module-test_blockarg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/videotest_checksum_module-videotest_checksum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/xnu_uuid_test_module-xnu_uuid_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/lib/$(DEPDIR)/functional_test_module-functional_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/lib/$(DEPDIR)/functional_test_module-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/bitmap_module-bitmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/bitmap_scale_module-bitmap_scale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/efi_gop_module-efi_gop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/efi_uga_module-efi_uga.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/functional_test_module-capture.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/ieee1275_fb_module-ieee1275.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/kernel_exec-radeon_fuloong2e.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/kernel_exec-radeon_yeeloong3a.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/kernel_exec-sis315pro.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/kernel_exec-sm712.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/kernel_exec-video.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video_bochs_module-bochs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video_cirrus_module-cirrus.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video_colors_module-colors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/$(DEPDIR)/video_module-video.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/emu/$(DEPDIR)/sdl_module-sdl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/kernel_exec-fbblit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/kernel_exec-fbfill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/kernel_exec-fbutil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/kernel_exec-video_fb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/video_fb_module-fbblit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/video_fb_module-fbfill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/video_fb_module-fbutil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/fb/$(DEPDIR)/video_fb_module-video_fb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/i386/coreboot/$(DEPDIR)/kernel_exec-cbfb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/i386/pc/$(DEPDIR)/vbe_module-vbe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/i386/pc/$(DEPDIR)/vga_module-vga.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/readers/$(DEPDIR)/jpeg_module-jpeg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/readers/$(DEPDIR)/png_module-png.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@video/readers/$(DEPDIR)/tga_module-tga.Po@am__quote@ + +.S.o: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $< + +.S.obj: +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCCAS_TRUE@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCCAS_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +boot/i386/pc/boot_image-boot.o: boot/i386/pc/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/boot_image-boot.o -MD -MP -MF boot/i386/pc/$(DEPDIR)/boot_image-boot.Tpo -c -o boot/i386/pc/boot_image-boot.o `test -f 'boot/i386/pc/boot.S' || echo '$(srcdir)/'`boot/i386/pc/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/boot_image-boot.Tpo boot/i386/pc/$(DEPDIR)/boot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/boot.S' object='boot/i386/pc/boot_image-boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/boot_image-boot.o `test -f 'boot/i386/pc/boot.S' || echo '$(srcdir)/'`boot/i386/pc/boot.S + +boot/i386/pc/boot_image-boot.obj: boot/i386/pc/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/boot_image-boot.obj -MD -MP -MF boot/i386/pc/$(DEPDIR)/boot_image-boot.Tpo -c -o boot/i386/pc/boot_image-boot.obj `if test -f 'boot/i386/pc/boot.S'; then $(CYGPATH_W) 'boot/i386/pc/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/boot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/boot_image-boot.Tpo boot/i386/pc/$(DEPDIR)/boot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/boot.S' object='boot/i386/pc/boot_image-boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/boot_image-boot.obj `if test -f 'boot/i386/pc/boot.S'; then $(CYGPATH_W) 'boot/i386/pc/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/boot.S'; fi` + +boot/i386/qemu/boot_image-boot.o: boot/i386/qemu/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/qemu/boot_image-boot.o -MD -MP -MF boot/i386/qemu/$(DEPDIR)/boot_image-boot.Tpo -c -o boot/i386/qemu/boot_image-boot.o `test -f 'boot/i386/qemu/boot.S' || echo '$(srcdir)/'`boot/i386/qemu/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/qemu/$(DEPDIR)/boot_image-boot.Tpo boot/i386/qemu/$(DEPDIR)/boot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/qemu/boot.S' object='boot/i386/qemu/boot_image-boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/qemu/boot_image-boot.o `test -f 'boot/i386/qemu/boot.S' || echo '$(srcdir)/'`boot/i386/qemu/boot.S + +boot/i386/qemu/boot_image-boot.obj: boot/i386/qemu/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/qemu/boot_image-boot.obj -MD -MP -MF boot/i386/qemu/$(DEPDIR)/boot_image-boot.Tpo -c -o boot/i386/qemu/boot_image-boot.obj `if test -f 'boot/i386/qemu/boot.S'; then $(CYGPATH_W) 'boot/i386/qemu/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/qemu/boot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/qemu/$(DEPDIR)/boot_image-boot.Tpo boot/i386/qemu/$(DEPDIR)/boot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/qemu/boot.S' object='boot/i386/qemu/boot_image-boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/qemu/boot_image-boot.obj `if test -f 'boot/i386/qemu/boot.S'; then $(CYGPATH_W) 'boot/i386/qemu/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/qemu/boot.S'; fi` + +boot/sparc64/ieee1275/boot_image-boot.o: boot/sparc64/ieee1275/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/sparc64/ieee1275/boot_image-boot.o -MD -MP -MF boot/sparc64/ieee1275/$(DEPDIR)/boot_image-boot.Tpo -c -o boot/sparc64/ieee1275/boot_image-boot.o `test -f 'boot/sparc64/ieee1275/boot.S' || echo '$(srcdir)/'`boot/sparc64/ieee1275/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/sparc64/ieee1275/$(DEPDIR)/boot_image-boot.Tpo boot/sparc64/ieee1275/$(DEPDIR)/boot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/sparc64/ieee1275/boot.S' object='boot/sparc64/ieee1275/boot_image-boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/sparc64/ieee1275/boot_image-boot.o `test -f 'boot/sparc64/ieee1275/boot.S' || echo '$(srcdir)/'`boot/sparc64/ieee1275/boot.S + +boot/sparc64/ieee1275/boot_image-boot.obj: boot/sparc64/ieee1275/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/sparc64/ieee1275/boot_image-boot.obj -MD -MP -MF boot/sparc64/ieee1275/$(DEPDIR)/boot_image-boot.Tpo -c -o boot/sparc64/ieee1275/boot_image-boot.obj `if test -f 'boot/sparc64/ieee1275/boot.S'; then $(CYGPATH_W) 'boot/sparc64/ieee1275/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/sparc64/ieee1275/boot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/sparc64/ieee1275/$(DEPDIR)/boot_image-boot.Tpo boot/sparc64/ieee1275/$(DEPDIR)/boot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/sparc64/ieee1275/boot.S' object='boot/sparc64/ieee1275/boot_image-boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_image_CPPFLAGS) $(CPPFLAGS) $(boot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/sparc64/ieee1275/boot_image-boot.obj `if test -f 'boot/sparc64/ieee1275/boot.S'; then $(CYGPATH_W) 'boot/sparc64/ieee1275/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/sparc64/ieee1275/boot.S'; fi` + +boot/i386/pc/boot_hybrid_image-boot.o: boot/i386/pc/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_hybrid_image_CPPFLAGS) $(CPPFLAGS) $(boot_hybrid_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/boot_hybrid_image-boot.o -MD -MP -MF boot/i386/pc/$(DEPDIR)/boot_hybrid_image-boot.Tpo -c -o boot/i386/pc/boot_hybrid_image-boot.o `test -f 'boot/i386/pc/boot.S' || echo '$(srcdir)/'`boot/i386/pc/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/boot_hybrid_image-boot.Tpo boot/i386/pc/$(DEPDIR)/boot_hybrid_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/boot.S' object='boot/i386/pc/boot_hybrid_image-boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_hybrid_image_CPPFLAGS) $(CPPFLAGS) $(boot_hybrid_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/boot_hybrid_image-boot.o `test -f 'boot/i386/pc/boot.S' || echo '$(srcdir)/'`boot/i386/pc/boot.S + +boot/i386/pc/boot_hybrid_image-boot.obj: boot/i386/pc/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_hybrid_image_CPPFLAGS) $(CPPFLAGS) $(boot_hybrid_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/boot_hybrid_image-boot.obj -MD -MP -MF boot/i386/pc/$(DEPDIR)/boot_hybrid_image-boot.Tpo -c -o boot/i386/pc/boot_hybrid_image-boot.obj `if test -f 'boot/i386/pc/boot.S'; then $(CYGPATH_W) 'boot/i386/pc/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/boot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/boot_hybrid_image-boot.Tpo boot/i386/pc/$(DEPDIR)/boot_hybrid_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/boot.S' object='boot/i386/pc/boot_hybrid_image-boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_hybrid_image_CPPFLAGS) $(CPPFLAGS) $(boot_hybrid_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/boot_hybrid_image-boot.obj `if test -f 'boot/i386/pc/boot.S'; then $(CYGPATH_W) 'boot/i386/pc/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/boot.S'; fi` + +boot/i386/pc/cdboot_image-cdboot.o: boot/i386/pc/cdboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/cdboot_image-cdboot.o -MD -MP -MF boot/i386/pc/$(DEPDIR)/cdboot_image-cdboot.Tpo -c -o boot/i386/pc/cdboot_image-cdboot.o `test -f 'boot/i386/pc/cdboot.S' || echo '$(srcdir)/'`boot/i386/pc/cdboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/cdboot_image-cdboot.Tpo boot/i386/pc/$(DEPDIR)/cdboot_image-cdboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/cdboot.S' object='boot/i386/pc/cdboot_image-cdboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/cdboot_image-cdboot.o `test -f 'boot/i386/pc/cdboot.S' || echo '$(srcdir)/'`boot/i386/pc/cdboot.S + +boot/i386/pc/cdboot_image-cdboot.obj: boot/i386/pc/cdboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/cdboot_image-cdboot.obj -MD -MP -MF boot/i386/pc/$(DEPDIR)/cdboot_image-cdboot.Tpo -c -o boot/i386/pc/cdboot_image-cdboot.obj `if test -f 'boot/i386/pc/cdboot.S'; then $(CYGPATH_W) 'boot/i386/pc/cdboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/cdboot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/cdboot_image-cdboot.Tpo boot/i386/pc/$(DEPDIR)/cdboot_image-cdboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/cdboot.S' object='boot/i386/pc/cdboot_image-cdboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/cdboot_image-cdboot.obj `if test -f 'boot/i386/pc/cdboot.S'; then $(CYGPATH_W) 'boot/i386/pc/cdboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/cdboot.S'; fi` + +boot/sparc64/ieee1275/cdboot_image-boot.o: boot/sparc64/ieee1275/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/sparc64/ieee1275/cdboot_image-boot.o -MD -MP -MF boot/sparc64/ieee1275/$(DEPDIR)/cdboot_image-boot.Tpo -c -o boot/sparc64/ieee1275/cdboot_image-boot.o `test -f 'boot/sparc64/ieee1275/boot.S' || echo '$(srcdir)/'`boot/sparc64/ieee1275/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/sparc64/ieee1275/$(DEPDIR)/cdboot_image-boot.Tpo boot/sparc64/ieee1275/$(DEPDIR)/cdboot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/sparc64/ieee1275/boot.S' object='boot/sparc64/ieee1275/cdboot_image-boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/sparc64/ieee1275/cdboot_image-boot.o `test -f 'boot/sparc64/ieee1275/boot.S' || echo '$(srcdir)/'`boot/sparc64/ieee1275/boot.S + +boot/sparc64/ieee1275/cdboot_image-boot.obj: boot/sparc64/ieee1275/boot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/sparc64/ieee1275/cdboot_image-boot.obj -MD -MP -MF boot/sparc64/ieee1275/$(DEPDIR)/cdboot_image-boot.Tpo -c -o boot/sparc64/ieee1275/cdboot_image-boot.obj `if test -f 'boot/sparc64/ieee1275/boot.S'; then $(CYGPATH_W) 'boot/sparc64/ieee1275/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/sparc64/ieee1275/boot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/sparc64/ieee1275/$(DEPDIR)/cdboot_image-boot.Tpo boot/sparc64/ieee1275/$(DEPDIR)/cdboot_image-boot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/sparc64/ieee1275/boot.S' object='boot/sparc64/ieee1275/cdboot_image-boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cdboot_image_CPPFLAGS) $(CPPFLAGS) $(cdboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/sparc64/ieee1275/cdboot_image-boot.obj `if test -f 'boot/sparc64/ieee1275/boot.S'; then $(CYGPATH_W) 'boot/sparc64/ieee1275/boot.S'; else $(CYGPATH_W) '$(srcdir)/boot/sparc64/ieee1275/boot.S'; fi` + +boot/i386/pc/diskboot_image-diskboot.o: boot/i386/pc/diskboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/diskboot_image-diskboot.o -MD -MP -MF boot/i386/pc/$(DEPDIR)/diskboot_image-diskboot.Tpo -c -o boot/i386/pc/diskboot_image-diskboot.o `test -f 'boot/i386/pc/diskboot.S' || echo '$(srcdir)/'`boot/i386/pc/diskboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/diskboot_image-diskboot.Tpo boot/i386/pc/$(DEPDIR)/diskboot_image-diskboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/diskboot.S' object='boot/i386/pc/diskboot_image-diskboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/diskboot_image-diskboot.o `test -f 'boot/i386/pc/diskboot.S' || echo '$(srcdir)/'`boot/i386/pc/diskboot.S + +boot/i386/pc/diskboot_image-diskboot.obj: boot/i386/pc/diskboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/diskboot_image-diskboot.obj -MD -MP -MF boot/i386/pc/$(DEPDIR)/diskboot_image-diskboot.Tpo -c -o boot/i386/pc/diskboot_image-diskboot.obj `if test -f 'boot/i386/pc/diskboot.S'; then $(CYGPATH_W) 'boot/i386/pc/diskboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/diskboot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/diskboot_image-diskboot.Tpo boot/i386/pc/$(DEPDIR)/diskboot_image-diskboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/diskboot.S' object='boot/i386/pc/diskboot_image-diskboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/diskboot_image-diskboot.obj `if test -f 'boot/i386/pc/diskboot.S'; then $(CYGPATH_W) 'boot/i386/pc/diskboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/diskboot.S'; fi` + +boot/sparc64/ieee1275/diskboot_image-diskboot.o: boot/sparc64/ieee1275/diskboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/sparc64/ieee1275/diskboot_image-diskboot.o -MD -MP -MF boot/sparc64/ieee1275/$(DEPDIR)/diskboot_image-diskboot.Tpo -c -o boot/sparc64/ieee1275/diskboot_image-diskboot.o `test -f 'boot/sparc64/ieee1275/diskboot.S' || echo '$(srcdir)/'`boot/sparc64/ieee1275/diskboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/sparc64/ieee1275/$(DEPDIR)/diskboot_image-diskboot.Tpo boot/sparc64/ieee1275/$(DEPDIR)/diskboot_image-diskboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/sparc64/ieee1275/diskboot.S' object='boot/sparc64/ieee1275/diskboot_image-diskboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/sparc64/ieee1275/diskboot_image-diskboot.o `test -f 'boot/sparc64/ieee1275/diskboot.S' || echo '$(srcdir)/'`boot/sparc64/ieee1275/diskboot.S + +boot/sparc64/ieee1275/diskboot_image-diskboot.obj: boot/sparc64/ieee1275/diskboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/sparc64/ieee1275/diskboot_image-diskboot.obj -MD -MP -MF boot/sparc64/ieee1275/$(DEPDIR)/diskboot_image-diskboot.Tpo -c -o boot/sparc64/ieee1275/diskboot_image-diskboot.obj `if test -f 'boot/sparc64/ieee1275/diskboot.S'; then $(CYGPATH_W) 'boot/sparc64/ieee1275/diskboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/sparc64/ieee1275/diskboot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/sparc64/ieee1275/$(DEPDIR)/diskboot_image-diskboot.Tpo boot/sparc64/ieee1275/$(DEPDIR)/diskboot_image-diskboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/sparc64/ieee1275/diskboot.S' object='boot/sparc64/ieee1275/diskboot_image-diskboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskboot_image_CPPFLAGS) $(CPPFLAGS) $(diskboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/sparc64/ieee1275/diskboot_image-diskboot.obj `if test -f 'boot/sparc64/ieee1275/diskboot.S'; then $(CYGPATH_W) 'boot/sparc64/ieee1275/diskboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/sparc64/ieee1275/diskboot.S'; fi` + +commands/i386/pc/drivemap_module-drivemap_int13h.o: commands/i386/pc/drivemap_int13h.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CCASFLAGS) $(CCASFLAGS) -MT commands/i386/pc/drivemap_module-drivemap_int13h.o -MD -MP -MF commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap_int13h.Tpo -c -o commands/i386/pc/drivemap_module-drivemap_int13h.o `test -f 'commands/i386/pc/drivemap_int13h.S' || echo '$(srcdir)/'`commands/i386/pc/drivemap_int13h.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap_int13h.Tpo commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap_int13h.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='commands/i386/pc/drivemap_int13h.S' object='commands/i386/pc/drivemap_module-drivemap_int13h.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CCASFLAGS) $(CCASFLAGS) -c -o commands/i386/pc/drivemap_module-drivemap_int13h.o `test -f 'commands/i386/pc/drivemap_int13h.S' || echo '$(srcdir)/'`commands/i386/pc/drivemap_int13h.S + +commands/i386/pc/drivemap_module-drivemap_int13h.obj: commands/i386/pc/drivemap_int13h.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CCASFLAGS) $(CCASFLAGS) -MT commands/i386/pc/drivemap_module-drivemap_int13h.obj -MD -MP -MF commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap_int13h.Tpo -c -o commands/i386/pc/drivemap_module-drivemap_int13h.obj `if test -f 'commands/i386/pc/drivemap_int13h.S'; then $(CYGPATH_W) 'commands/i386/pc/drivemap_int13h.S'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/drivemap_int13h.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap_int13h.Tpo commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap_int13h.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='commands/i386/pc/drivemap_int13h.S' object='commands/i386/pc/drivemap_module-drivemap_int13h.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CCASFLAGS) $(CCASFLAGS) -c -o commands/i386/pc/drivemap_module-drivemap_int13h.obj `if test -f 'commands/i386/pc/drivemap_int13h.S'; then $(CYGPATH_W) 'commands/i386/pc/drivemap_int13h.S'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/drivemap_int13h.S'; fi` + +boot/mips/loongson/fwstart_image-fwstart.o: boot/mips/loongson/fwstart.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/loongson/fwstart_image-fwstart.o -MD -MP -MF boot/mips/loongson/$(DEPDIR)/fwstart_image-fwstart.Tpo -c -o boot/mips/loongson/fwstart_image-fwstart.o `test -f 'boot/mips/loongson/fwstart.S' || echo '$(srcdir)/'`boot/mips/loongson/fwstart.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/loongson/$(DEPDIR)/fwstart_image-fwstart.Tpo boot/mips/loongson/$(DEPDIR)/fwstart_image-fwstart.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/loongson/fwstart.S' object='boot/mips/loongson/fwstart_image-fwstart.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/loongson/fwstart_image-fwstart.o `test -f 'boot/mips/loongson/fwstart.S' || echo '$(srcdir)/'`boot/mips/loongson/fwstart.S + +boot/mips/loongson/fwstart_image-fwstart.obj: boot/mips/loongson/fwstart.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/loongson/fwstart_image-fwstart.obj -MD -MP -MF boot/mips/loongson/$(DEPDIR)/fwstart_image-fwstart.Tpo -c -o boot/mips/loongson/fwstart_image-fwstart.obj `if test -f 'boot/mips/loongson/fwstart.S'; then $(CYGPATH_W) 'boot/mips/loongson/fwstart.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/loongson/fwstart.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/loongson/$(DEPDIR)/fwstart_image-fwstart.Tpo boot/mips/loongson/$(DEPDIR)/fwstart_image-fwstart.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/loongson/fwstart.S' object='boot/mips/loongson/fwstart_image-fwstart.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/loongson/fwstart_image-fwstart.obj `if test -f 'boot/mips/loongson/fwstart.S'; then $(CYGPATH_W) 'boot/mips/loongson/fwstart.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/loongson/fwstart.S'; fi` + +boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.o: boot/mips/loongson/fuloong2f.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_fuloong2f_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_fuloong2f_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.o -MD -MP -MF boot/mips/loongson/$(DEPDIR)/fwstart_fuloong2f_image-fuloong2f.Tpo -c -o boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.o `test -f 'boot/mips/loongson/fuloong2f.S' || echo '$(srcdir)/'`boot/mips/loongson/fuloong2f.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/loongson/$(DEPDIR)/fwstart_fuloong2f_image-fuloong2f.Tpo boot/mips/loongson/$(DEPDIR)/fwstart_fuloong2f_image-fuloong2f.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/loongson/fuloong2f.S' object='boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_fuloong2f_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_fuloong2f_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.o `test -f 'boot/mips/loongson/fuloong2f.S' || echo '$(srcdir)/'`boot/mips/loongson/fuloong2f.S + +boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.obj: boot/mips/loongson/fuloong2f.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_fuloong2f_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_fuloong2f_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.obj -MD -MP -MF boot/mips/loongson/$(DEPDIR)/fwstart_fuloong2f_image-fuloong2f.Tpo -c -o boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.obj `if test -f 'boot/mips/loongson/fuloong2f.S'; then $(CYGPATH_W) 'boot/mips/loongson/fuloong2f.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/loongson/fuloong2f.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/loongson/$(DEPDIR)/fwstart_fuloong2f_image-fuloong2f.Tpo boot/mips/loongson/$(DEPDIR)/fwstart_fuloong2f_image-fuloong2f.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/loongson/fuloong2f.S' object='boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fwstart_fuloong2f_image_CPPFLAGS) $(CPPFLAGS) $(fwstart_fuloong2f_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/loongson/fwstart_fuloong2f_image-fuloong2f.obj `if test -f 'boot/mips/loongson/fuloong2f.S'; then $(CYGPATH_W) 'boot/mips/loongson/fuloong2f.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/loongson/fuloong2f.S'; fi` + +gdb/i386/gdb_module-machdep.o: gdb/i386/machdep.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CCASFLAGS) $(CCASFLAGS) -MT gdb/i386/gdb_module-machdep.o -MD -MP -MF gdb/i386/$(DEPDIR)/gdb_module-machdep.Tpo -c -o gdb/i386/gdb_module-machdep.o `test -f 'gdb/i386/machdep.S' || echo '$(srcdir)/'`gdb/i386/machdep.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) gdb/i386/$(DEPDIR)/gdb_module-machdep.Tpo gdb/i386/$(DEPDIR)/gdb_module-machdep.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='gdb/i386/machdep.S' object='gdb/i386/gdb_module-machdep.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CCASFLAGS) $(CCASFLAGS) -c -o gdb/i386/gdb_module-machdep.o `test -f 'gdb/i386/machdep.S' || echo '$(srcdir)/'`gdb/i386/machdep.S + +gdb/i386/gdb_module-machdep.obj: gdb/i386/machdep.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CCASFLAGS) $(CCASFLAGS) -MT gdb/i386/gdb_module-machdep.obj -MD -MP -MF gdb/i386/$(DEPDIR)/gdb_module-machdep.Tpo -c -o gdb/i386/gdb_module-machdep.obj `if test -f 'gdb/i386/machdep.S'; then $(CYGPATH_W) 'gdb/i386/machdep.S'; else $(CYGPATH_W) '$(srcdir)/gdb/i386/machdep.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) gdb/i386/$(DEPDIR)/gdb_module-machdep.Tpo gdb/i386/$(DEPDIR)/gdb_module-machdep.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='gdb/i386/machdep.S' object='gdb/i386/gdb_module-machdep.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CCASFLAGS) $(CCASFLAGS) -c -o gdb/i386/gdb_module-machdep.obj `if test -f 'gdb/i386/machdep.S'; then $(CYGPATH_W) 'gdb/i386/machdep.S'; else $(CYGPATH_W) '$(srcdir)/gdb/i386/machdep.S'; fi` + +kern/arm64/efi/kernel_exec-startup.o: kern/arm64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm64/efi/kernel_exec-startup.o -MD -MP -MF kern/arm64/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/arm64/efi/kernel_exec-startup.o `test -f 'kern/arm64/efi/startup.S' || echo '$(srcdir)/'`kern/arm64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/arm64/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm64/efi/startup.S' object='kern/arm64/efi/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm64/efi/kernel_exec-startup.o `test -f 'kern/arm64/efi/startup.S' || echo '$(srcdir)/'`kern/arm64/efi/startup.S + +kern/arm64/efi/kernel_exec-startup.obj: kern/arm64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm64/efi/kernel_exec-startup.obj -MD -MP -MF kern/arm64/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/arm64/efi/kernel_exec-startup.obj `if test -f 'kern/arm64/efi/startup.S'; then $(CYGPATH_W) 'kern/arm64/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/efi/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/arm64/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm64/efi/startup.S' object='kern/arm64/efi/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm64/efi/kernel_exec-startup.obj `if test -f 'kern/arm64/efi/startup.S'; then $(CYGPATH_W) 'kern/arm64/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/efi/startup.S'; fi` + +kern/arm64/kernel_exec-cache_flush.o: kern/arm64/cache_flush.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm64/kernel_exec-cache_flush.o -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-cache_flush.Tpo -c -o kern/arm64/kernel_exec-cache_flush.o `test -f 'kern/arm64/cache_flush.S' || echo '$(srcdir)/'`kern/arm64/cache_flush.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-cache_flush.Tpo kern/arm64/$(DEPDIR)/kernel_exec-cache_flush.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm64/cache_flush.S' object='kern/arm64/kernel_exec-cache_flush.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm64/kernel_exec-cache_flush.o `test -f 'kern/arm64/cache_flush.S' || echo '$(srcdir)/'`kern/arm64/cache_flush.S + +kern/arm64/kernel_exec-cache_flush.obj: kern/arm64/cache_flush.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm64/kernel_exec-cache_flush.obj -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-cache_flush.Tpo -c -o kern/arm64/kernel_exec-cache_flush.obj `if test -f 'kern/arm64/cache_flush.S'; then $(CYGPATH_W) 'kern/arm64/cache_flush.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/cache_flush.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-cache_flush.Tpo kern/arm64/$(DEPDIR)/kernel_exec-cache_flush.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm64/cache_flush.S' object='kern/arm64/kernel_exec-cache_flush.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm64/kernel_exec-cache_flush.obj `if test -f 'kern/arm64/cache_flush.S'; then $(CYGPATH_W) 'kern/arm64/cache_flush.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/cache_flush.S'; fi` + +kern/arm/efi/kernel_exec-startup.o: kern/arm/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/efi/kernel_exec-startup.o -MD -MP -MF kern/arm/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/arm/efi/kernel_exec-startup.o `test -f 'kern/arm/efi/startup.S' || echo '$(srcdir)/'`kern/arm/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/arm/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/efi/startup.S' object='kern/arm/efi/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/efi/kernel_exec-startup.o `test -f 'kern/arm/efi/startup.S' || echo '$(srcdir)/'`kern/arm/efi/startup.S + +kern/arm/efi/kernel_exec-startup.obj: kern/arm/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/efi/kernel_exec-startup.obj -MD -MP -MF kern/arm/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/arm/efi/kernel_exec-startup.obj `if test -f 'kern/arm/efi/startup.S'; then $(CYGPATH_W) 'kern/arm/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/efi/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/arm/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/efi/startup.S' object='kern/arm/efi/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/efi/kernel_exec-startup.obj `if test -f 'kern/arm/efi/startup.S'; then $(CYGPATH_W) 'kern/arm/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/efi/startup.S'; fi` + +kern/arm/kernel_exec-cache_armv6.o: kern/arm/cache_armv6.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/kernel_exec-cache_armv6.o -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-cache_armv6.Tpo -c -o kern/arm/kernel_exec-cache_armv6.o `test -f 'kern/arm/cache_armv6.S' || echo '$(srcdir)/'`kern/arm/cache_armv6.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-cache_armv6.Tpo kern/arm/$(DEPDIR)/kernel_exec-cache_armv6.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/cache_armv6.S' object='kern/arm/kernel_exec-cache_armv6.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/kernel_exec-cache_armv6.o `test -f 'kern/arm/cache_armv6.S' || echo '$(srcdir)/'`kern/arm/cache_armv6.S + +kern/arm/kernel_exec-cache_armv6.obj: kern/arm/cache_armv6.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/kernel_exec-cache_armv6.obj -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-cache_armv6.Tpo -c -o kern/arm/kernel_exec-cache_armv6.obj `if test -f 'kern/arm/cache_armv6.S'; then $(CYGPATH_W) 'kern/arm/cache_armv6.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/cache_armv6.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-cache_armv6.Tpo kern/arm/$(DEPDIR)/kernel_exec-cache_armv6.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/cache_armv6.S' object='kern/arm/kernel_exec-cache_armv6.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/kernel_exec-cache_armv6.obj `if test -f 'kern/arm/cache_armv6.S'; then $(CYGPATH_W) 'kern/arm/cache_armv6.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/cache_armv6.S'; fi` + +kern/arm/kernel_exec-cache_armv7.o: kern/arm/cache_armv7.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/kernel_exec-cache_armv7.o -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-cache_armv7.Tpo -c -o kern/arm/kernel_exec-cache_armv7.o `test -f 'kern/arm/cache_armv7.S' || echo '$(srcdir)/'`kern/arm/cache_armv7.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-cache_armv7.Tpo kern/arm/$(DEPDIR)/kernel_exec-cache_armv7.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/cache_armv7.S' object='kern/arm/kernel_exec-cache_armv7.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/kernel_exec-cache_armv7.o `test -f 'kern/arm/cache_armv7.S' || echo '$(srcdir)/'`kern/arm/cache_armv7.S + +kern/arm/kernel_exec-cache_armv7.obj: kern/arm/cache_armv7.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/kernel_exec-cache_armv7.obj -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-cache_armv7.Tpo -c -o kern/arm/kernel_exec-cache_armv7.obj `if test -f 'kern/arm/cache_armv7.S'; then $(CYGPATH_W) 'kern/arm/cache_armv7.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/cache_armv7.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-cache_armv7.Tpo kern/arm/$(DEPDIR)/kernel_exec-cache_armv7.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/cache_armv7.S' object='kern/arm/kernel_exec-cache_armv7.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/kernel_exec-cache_armv7.obj `if test -f 'kern/arm/cache_armv7.S'; then $(CYGPATH_W) 'kern/arm/cache_armv7.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/cache_armv7.S'; fi` + +kern/arm/kernel_exec-compiler-rt.o: kern/arm/compiler-rt.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/kernel_exec-compiler-rt.o -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/arm/kernel_exec-compiler-rt.o `test -f 'kern/arm/compiler-rt.S' || echo '$(srcdir)/'`kern/arm/compiler-rt.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/arm/$(DEPDIR)/kernel_exec-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/compiler-rt.S' object='kern/arm/kernel_exec-compiler-rt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/kernel_exec-compiler-rt.o `test -f 'kern/arm/compiler-rt.S' || echo '$(srcdir)/'`kern/arm/compiler-rt.S + +kern/arm/kernel_exec-compiler-rt.obj: kern/arm/compiler-rt.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/kernel_exec-compiler-rt.obj -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/arm/kernel_exec-compiler-rt.obj `if test -f 'kern/arm/compiler-rt.S'; then $(CYGPATH_W) 'kern/arm/compiler-rt.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/compiler-rt.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/arm/$(DEPDIR)/kernel_exec-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/compiler-rt.S' object='kern/arm/kernel_exec-compiler-rt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/kernel_exec-compiler-rt.obj `if test -f 'kern/arm/compiler-rt.S'; then $(CYGPATH_W) 'kern/arm/compiler-rt.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/compiler-rt.S'; fi` + +kern/arm/uboot/kernel_exec-startup.o: kern/arm/uboot/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/uboot/kernel_exec-startup.o -MD -MP -MF kern/arm/uboot/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/arm/uboot/kernel_exec-startup.o `test -f 'kern/arm/uboot/startup.S' || echo '$(srcdir)/'`kern/arm/uboot/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/uboot/$(DEPDIR)/kernel_exec-startup.Tpo kern/arm/uboot/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/uboot/startup.S' object='kern/arm/uboot/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/uboot/kernel_exec-startup.o `test -f 'kern/arm/uboot/startup.S' || echo '$(srcdir)/'`kern/arm/uboot/startup.S + +kern/arm/uboot/kernel_exec-startup.obj: kern/arm/uboot/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/arm/uboot/kernel_exec-startup.obj -MD -MP -MF kern/arm/uboot/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/arm/uboot/kernel_exec-startup.obj `if test -f 'kern/arm/uboot/startup.S'; then $(CYGPATH_W) 'kern/arm/uboot/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/uboot/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/arm/uboot/$(DEPDIR)/kernel_exec-startup.Tpo kern/arm/uboot/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/arm/uboot/startup.S' object='kern/arm/uboot/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/arm/uboot/kernel_exec-startup.obj `if test -f 'kern/arm/uboot/startup.S'; then $(CYGPATH_W) 'kern/arm/uboot/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/arm/uboot/startup.S'; fi` + +kern/emu/kernel_exec-cache_s.o: kern/emu/cache_s.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/emu/kernel_exec-cache_s.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-cache_s.Tpo -c -o kern/emu/kernel_exec-cache_s.o `test -f 'kern/emu/cache_s.S' || echo '$(srcdir)/'`kern/emu/cache_s.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-cache_s.Tpo kern/emu/$(DEPDIR)/kernel_exec-cache_s.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/emu/cache_s.S' object='kern/emu/kernel_exec-cache_s.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/emu/kernel_exec-cache_s.o `test -f 'kern/emu/cache_s.S' || echo '$(srcdir)/'`kern/emu/cache_s.S + +kern/emu/kernel_exec-cache_s.obj: kern/emu/cache_s.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/emu/kernel_exec-cache_s.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-cache_s.Tpo -c -o kern/emu/kernel_exec-cache_s.obj `if test -f 'kern/emu/cache_s.S'; then $(CYGPATH_W) 'kern/emu/cache_s.S'; else $(CYGPATH_W) '$(srcdir)/kern/emu/cache_s.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-cache_s.Tpo kern/emu/$(DEPDIR)/kernel_exec-cache_s.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/emu/cache_s.S' object='kern/emu/kernel_exec-cache_s.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/emu/kernel_exec-cache_s.obj `if test -f 'kern/emu/cache_s.S'; then $(CYGPATH_W) 'kern/emu/cache_s.S'; else $(CYGPATH_W) '$(srcdir)/kern/emu/cache_s.S'; fi` + +kern/i386/coreboot/kernel_exec-startup.o: kern/i386/coreboot/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/coreboot/kernel_exec-startup.o -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/coreboot/kernel_exec-startup.o `test -f 'kern/i386/coreboot/startup.S' || echo '$(srcdir)/'`kern/i386/coreboot/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/coreboot/startup.S' object='kern/i386/coreboot/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/coreboot/kernel_exec-startup.o `test -f 'kern/i386/coreboot/startup.S' || echo '$(srcdir)/'`kern/i386/coreboot/startup.S + +kern/i386/coreboot/kernel_exec-startup.obj: kern/i386/coreboot/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/coreboot/kernel_exec-startup.obj -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/coreboot/kernel_exec-startup.obj `if test -f 'kern/i386/coreboot/startup.S'; then $(CYGPATH_W) 'kern/i386/coreboot/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/coreboot/startup.S' object='kern/i386/coreboot/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/coreboot/kernel_exec-startup.obj `if test -f 'kern/i386/coreboot/startup.S'; then $(CYGPATH_W) 'kern/i386/coreboot/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/startup.S'; fi` + +kern/i386/efi/kernel_exec-startup.o: kern/i386/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/efi/kernel_exec-startup.o -MD -MP -MF kern/i386/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/efi/kernel_exec-startup.o `test -f 'kern/i386/efi/startup.S' || echo '$(srcdir)/'`kern/i386/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/efi/startup.S' object='kern/i386/efi/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/efi/kernel_exec-startup.o `test -f 'kern/i386/efi/startup.S' || echo '$(srcdir)/'`kern/i386/efi/startup.S + +kern/i386/efi/kernel_exec-startup.obj: kern/i386/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/efi/kernel_exec-startup.obj -MD -MP -MF kern/i386/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/efi/kernel_exec-startup.obj `if test -f 'kern/i386/efi/startup.S'; then $(CYGPATH_W) 'kern/i386/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/efi/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/efi/startup.S' object='kern/i386/efi/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/efi/kernel_exec-startup.obj `if test -f 'kern/i386/efi/startup.S'; then $(CYGPATH_W) 'kern/i386/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/efi/startup.S'; fi` + +kern/i386/ieee1275/kernel_exec-startup.o: kern/i386/ieee1275/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/ieee1275/kernel_exec-startup.o -MD -MP -MF kern/i386/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/ieee1275/kernel_exec-startup.o `test -f 'kern/i386/ieee1275/startup.S' || echo '$(srcdir)/'`kern/i386/ieee1275/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/ieee1275/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/ieee1275/startup.S' object='kern/i386/ieee1275/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/ieee1275/kernel_exec-startup.o `test -f 'kern/i386/ieee1275/startup.S' || echo '$(srcdir)/'`kern/i386/ieee1275/startup.S + +kern/i386/ieee1275/kernel_exec-startup.obj: kern/i386/ieee1275/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/ieee1275/kernel_exec-startup.obj -MD -MP -MF kern/i386/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/ieee1275/kernel_exec-startup.obj `if test -f 'kern/i386/ieee1275/startup.S'; then $(CYGPATH_W) 'kern/i386/ieee1275/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/ieee1275/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/ieee1275/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/ieee1275/startup.S' object='kern/i386/ieee1275/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/ieee1275/kernel_exec-startup.obj `if test -f 'kern/i386/ieee1275/startup.S'; then $(CYGPATH_W) 'kern/i386/ieee1275/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/ieee1275/startup.S'; fi` + +kern/i386/pc/kernel_exec-startup.o: kern/i386/pc/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/pc/kernel_exec-startup.o -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/pc/kernel_exec-startup.o `test -f 'kern/i386/pc/startup.S' || echo '$(srcdir)/'`kern/i386/pc/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/pc/startup.S' object='kern/i386/pc/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/pc/kernel_exec-startup.o `test -f 'kern/i386/pc/startup.S' || echo '$(srcdir)/'`kern/i386/pc/startup.S + +kern/i386/pc/kernel_exec-startup.obj: kern/i386/pc/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/pc/kernel_exec-startup.obj -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/pc/kernel_exec-startup.obj `if test -f 'kern/i386/pc/startup.S'; then $(CYGPATH_W) 'kern/i386/pc/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/pc/startup.S' object='kern/i386/pc/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/pc/kernel_exec-startup.obj `if test -f 'kern/i386/pc/startup.S'; then $(CYGPATH_W) 'kern/i386/pc/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/startup.S'; fi` + +kern/i386/qemu/kernel_exec-startup.o: kern/i386/qemu/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/qemu/kernel_exec-startup.o -MD -MP -MF kern/i386/qemu/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/qemu/kernel_exec-startup.o `test -f 'kern/i386/qemu/startup.S' || echo '$(srcdir)/'`kern/i386/qemu/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/qemu/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/qemu/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/qemu/startup.S' object='kern/i386/qemu/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/qemu/kernel_exec-startup.o `test -f 'kern/i386/qemu/startup.S' || echo '$(srcdir)/'`kern/i386/qemu/startup.S + +kern/i386/qemu/kernel_exec-startup.obj: kern/i386/qemu/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/qemu/kernel_exec-startup.obj -MD -MP -MF kern/i386/qemu/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/qemu/kernel_exec-startup.obj `if test -f 'kern/i386/qemu/startup.S'; then $(CYGPATH_W) 'kern/i386/qemu/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/qemu/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/qemu/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/qemu/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/qemu/startup.S' object='kern/i386/qemu/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/qemu/kernel_exec-startup.obj `if test -f 'kern/i386/qemu/startup.S'; then $(CYGPATH_W) 'kern/i386/qemu/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/qemu/startup.S'; fi` + +kern/i386/xen/kernel_exec-startup.o: kern/i386/xen/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/xen/kernel_exec-startup.o -MD -MP -MF kern/i386/xen/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/xen/kernel_exec-startup.o `test -f 'kern/i386/xen/startup.S' || echo '$(srcdir)/'`kern/i386/xen/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/xen/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/xen/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/xen/startup.S' object='kern/i386/xen/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/xen/kernel_exec-startup.o `test -f 'kern/i386/xen/startup.S' || echo '$(srcdir)/'`kern/i386/xen/startup.S + +kern/i386/xen/kernel_exec-startup.obj: kern/i386/xen/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/xen/kernel_exec-startup.obj -MD -MP -MF kern/i386/xen/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/i386/xen/kernel_exec-startup.obj `if test -f 'kern/i386/xen/startup.S'; then $(CYGPATH_W) 'kern/i386/xen/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/xen/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/xen/$(DEPDIR)/kernel_exec-startup.Tpo kern/i386/xen/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/xen/startup.S' object='kern/i386/xen/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/xen/kernel_exec-startup.obj `if test -f 'kern/i386/xen/startup.S'; then $(CYGPATH_W) 'kern/i386/xen/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/xen/startup.S'; fi` + +kern/i386/xen/kernel_exec-hypercall.o: kern/i386/xen/hypercall.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/xen/kernel_exec-hypercall.o -MD -MP -MF kern/i386/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo -c -o kern/i386/xen/kernel_exec-hypercall.o `test -f 'kern/i386/xen/hypercall.S' || echo '$(srcdir)/'`kern/i386/xen/hypercall.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo kern/i386/xen/$(DEPDIR)/kernel_exec-hypercall.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/xen/hypercall.S' object='kern/i386/xen/kernel_exec-hypercall.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/xen/kernel_exec-hypercall.o `test -f 'kern/i386/xen/hypercall.S' || echo '$(srcdir)/'`kern/i386/xen/hypercall.S + +kern/i386/xen/kernel_exec-hypercall.obj: kern/i386/xen/hypercall.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/i386/xen/kernel_exec-hypercall.obj -MD -MP -MF kern/i386/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo -c -o kern/i386/xen/kernel_exec-hypercall.obj `if test -f 'kern/i386/xen/hypercall.S'; then $(CYGPATH_W) 'kern/i386/xen/hypercall.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/xen/hypercall.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/i386/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo kern/i386/xen/$(DEPDIR)/kernel_exec-hypercall.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/i386/xen/hypercall.S' object='kern/i386/xen/kernel_exec-hypercall.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/i386/xen/kernel_exec-hypercall.obj `if test -f 'kern/i386/xen/hypercall.S'; then $(CYGPATH_W) 'kern/i386/xen/hypercall.S'; else $(CYGPATH_W) '$(srcdir)/kern/i386/xen/hypercall.S'; fi` + +kern/ia64/efi/kernel_exec-startup.o: kern/ia64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/ia64/efi/kernel_exec-startup.o -MD -MP -MF kern/ia64/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/ia64/efi/kernel_exec-startup.o `test -f 'kern/ia64/efi/startup.S' || echo '$(srcdir)/'`kern/ia64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/ia64/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/ia64/efi/startup.S' object='kern/ia64/efi/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/ia64/efi/kernel_exec-startup.o `test -f 'kern/ia64/efi/startup.S' || echo '$(srcdir)/'`kern/ia64/efi/startup.S + +kern/ia64/efi/kernel_exec-startup.obj: kern/ia64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/ia64/efi/kernel_exec-startup.obj -MD -MP -MF kern/ia64/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/ia64/efi/kernel_exec-startup.obj `if test -f 'kern/ia64/efi/startup.S'; then $(CYGPATH_W) 'kern/ia64/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/efi/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/ia64/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/ia64/efi/startup.S' object='kern/ia64/efi/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/ia64/efi/kernel_exec-startup.obj `if test -f 'kern/ia64/efi/startup.S'; then $(CYGPATH_W) 'kern/ia64/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/efi/startup.S'; fi` + +kern/mips/kernel_exec-startup.o: kern/mips/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/mips/kernel_exec-startup.o -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/mips/kernel_exec-startup.o `test -f 'kern/mips/startup.S' || echo '$(srcdir)/'`kern/mips/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-startup.Tpo kern/mips/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/mips/startup.S' object='kern/mips/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/mips/kernel_exec-startup.o `test -f 'kern/mips/startup.S' || echo '$(srcdir)/'`kern/mips/startup.S + +kern/mips/kernel_exec-startup.obj: kern/mips/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/mips/kernel_exec-startup.obj -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/mips/kernel_exec-startup.obj `if test -f 'kern/mips/startup.S'; then $(CYGPATH_W) 'kern/mips/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/mips/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-startup.Tpo kern/mips/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/mips/startup.S' object='kern/mips/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/mips/kernel_exec-startup.obj `if test -f 'kern/mips/startup.S'; then $(CYGPATH_W) 'kern/mips/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/mips/startup.S'; fi` + +kern/mips/kernel_exec-cache.o: kern/mips/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/mips/kernel_exec-cache.o -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/mips/kernel_exec-cache.o `test -f 'kern/mips/cache.S' || echo '$(srcdir)/'`kern/mips/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-cache.Tpo kern/mips/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/mips/cache.S' object='kern/mips/kernel_exec-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/mips/kernel_exec-cache.o `test -f 'kern/mips/cache.S' || echo '$(srcdir)/'`kern/mips/cache.S + +kern/mips/kernel_exec-cache.obj: kern/mips/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/mips/kernel_exec-cache.obj -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/mips/kernel_exec-cache.obj `if test -f 'kern/mips/cache.S'; then $(CYGPATH_W) 'kern/mips/cache.S'; else $(CYGPATH_W) '$(srcdir)/kern/mips/cache.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-cache.Tpo kern/mips/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/mips/cache.S' object='kern/mips/kernel_exec-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/mips/kernel_exec-cache.obj `if test -f 'kern/mips/cache.S'; then $(CYGPATH_W) 'kern/mips/cache.S'; else $(CYGPATH_W) '$(srcdir)/kern/mips/cache.S'; fi` + +kern/powerpc/ieee1275/kernel_exec-startup.o: kern/powerpc/ieee1275/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/powerpc/ieee1275/kernel_exec-startup.o -MD -MP -MF kern/powerpc/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/powerpc/ieee1275/kernel_exec-startup.o `test -f 'kern/powerpc/ieee1275/startup.S' || echo '$(srcdir)/'`kern/powerpc/ieee1275/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo kern/powerpc/ieee1275/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/powerpc/ieee1275/startup.S' object='kern/powerpc/ieee1275/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/powerpc/ieee1275/kernel_exec-startup.o `test -f 'kern/powerpc/ieee1275/startup.S' || echo '$(srcdir)/'`kern/powerpc/ieee1275/startup.S + +kern/powerpc/ieee1275/kernel_exec-startup.obj: kern/powerpc/ieee1275/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/powerpc/ieee1275/kernel_exec-startup.obj -MD -MP -MF kern/powerpc/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/powerpc/ieee1275/kernel_exec-startup.obj `if test -f 'kern/powerpc/ieee1275/startup.S'; then $(CYGPATH_W) 'kern/powerpc/ieee1275/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/ieee1275/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/ieee1275/$(DEPDIR)/kernel_exec-startup.Tpo kern/powerpc/ieee1275/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/powerpc/ieee1275/startup.S' object='kern/powerpc/ieee1275/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/powerpc/ieee1275/kernel_exec-startup.obj `if test -f 'kern/powerpc/ieee1275/startup.S'; then $(CYGPATH_W) 'kern/powerpc/ieee1275/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/ieee1275/startup.S'; fi` + +kern/powerpc/kernel_exec-cache.o: kern/powerpc/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/powerpc/kernel_exec-cache.o -MD -MP -MF kern/powerpc/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/powerpc/kernel_exec-cache.o `test -f 'kern/powerpc/cache.S' || echo '$(srcdir)/'`kern/powerpc/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/$(DEPDIR)/kernel_exec-cache.Tpo kern/powerpc/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/powerpc/cache.S' object='kern/powerpc/kernel_exec-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/powerpc/kernel_exec-cache.o `test -f 'kern/powerpc/cache.S' || echo '$(srcdir)/'`kern/powerpc/cache.S + +kern/powerpc/kernel_exec-cache.obj: kern/powerpc/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/powerpc/kernel_exec-cache.obj -MD -MP -MF kern/powerpc/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/powerpc/kernel_exec-cache.obj `if test -f 'kern/powerpc/cache.S'; then $(CYGPATH_W) 'kern/powerpc/cache.S'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/cache.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/$(DEPDIR)/kernel_exec-cache.Tpo kern/powerpc/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/powerpc/cache.S' object='kern/powerpc/kernel_exec-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/powerpc/kernel_exec-cache.obj `if test -f 'kern/powerpc/cache.S'; then $(CYGPATH_W) 'kern/powerpc/cache.S'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/cache.S'; fi` + +kern/powerpc/kernel_exec-compiler-rt.o: kern/powerpc/compiler-rt.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/powerpc/kernel_exec-compiler-rt.o -MD -MP -MF kern/powerpc/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/powerpc/kernel_exec-compiler-rt.o `test -f 'kern/powerpc/compiler-rt.S' || echo '$(srcdir)/'`kern/powerpc/compiler-rt.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/powerpc/$(DEPDIR)/kernel_exec-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/powerpc/compiler-rt.S' object='kern/powerpc/kernel_exec-compiler-rt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/powerpc/kernel_exec-compiler-rt.o `test -f 'kern/powerpc/compiler-rt.S' || echo '$(srcdir)/'`kern/powerpc/compiler-rt.S + +kern/powerpc/kernel_exec-compiler-rt.obj: kern/powerpc/compiler-rt.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/powerpc/kernel_exec-compiler-rt.obj -MD -MP -MF kern/powerpc/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/powerpc/kernel_exec-compiler-rt.obj `if test -f 'kern/powerpc/compiler-rt.S'; then $(CYGPATH_W) 'kern/powerpc/compiler-rt.S'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/compiler-rt.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/powerpc/$(DEPDIR)/kernel_exec-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/powerpc/compiler-rt.S' object='kern/powerpc/kernel_exec-compiler-rt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/powerpc/kernel_exec-compiler-rt.obj `if test -f 'kern/powerpc/compiler-rt.S'; then $(CYGPATH_W) 'kern/powerpc/compiler-rt.S'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/compiler-rt.S'; fi` + +kern/sparc64/ieee1275/kernel_exec-crt0.o: kern/sparc64/ieee1275/crt0.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/sparc64/ieee1275/kernel_exec-crt0.o -MD -MP -MF kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-crt0.Tpo -c -o kern/sparc64/ieee1275/kernel_exec-crt0.o `test -f 'kern/sparc64/ieee1275/crt0.S' || echo '$(srcdir)/'`kern/sparc64/ieee1275/crt0.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-crt0.Tpo kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-crt0.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/sparc64/ieee1275/crt0.S' object='kern/sparc64/ieee1275/kernel_exec-crt0.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/sparc64/ieee1275/kernel_exec-crt0.o `test -f 'kern/sparc64/ieee1275/crt0.S' || echo '$(srcdir)/'`kern/sparc64/ieee1275/crt0.S + +kern/sparc64/ieee1275/kernel_exec-crt0.obj: kern/sparc64/ieee1275/crt0.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/sparc64/ieee1275/kernel_exec-crt0.obj -MD -MP -MF kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-crt0.Tpo -c -o kern/sparc64/ieee1275/kernel_exec-crt0.obj `if test -f 'kern/sparc64/ieee1275/crt0.S'; then $(CYGPATH_W) 'kern/sparc64/ieee1275/crt0.S'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/ieee1275/crt0.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-crt0.Tpo kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-crt0.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/sparc64/ieee1275/crt0.S' object='kern/sparc64/ieee1275/kernel_exec-crt0.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/sparc64/ieee1275/kernel_exec-crt0.obj `if test -f 'kern/sparc64/ieee1275/crt0.S'; then $(CYGPATH_W) 'kern/sparc64/ieee1275/crt0.S'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/ieee1275/crt0.S'; fi` + +kern/sparc64/kernel_exec-cache.o: kern/sparc64/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/sparc64/kernel_exec-cache.o -MD -MP -MF kern/sparc64/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/sparc64/kernel_exec-cache.o `test -f 'kern/sparc64/cache.S' || echo '$(srcdir)/'`kern/sparc64/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/$(DEPDIR)/kernel_exec-cache.Tpo kern/sparc64/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/sparc64/cache.S' object='kern/sparc64/kernel_exec-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/sparc64/kernel_exec-cache.o `test -f 'kern/sparc64/cache.S' || echo '$(srcdir)/'`kern/sparc64/cache.S + +kern/sparc64/kernel_exec-cache.obj: kern/sparc64/cache.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/sparc64/kernel_exec-cache.obj -MD -MP -MF kern/sparc64/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/sparc64/kernel_exec-cache.obj `if test -f 'kern/sparc64/cache.S'; then $(CYGPATH_W) 'kern/sparc64/cache.S'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/cache.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/$(DEPDIR)/kernel_exec-cache.Tpo kern/sparc64/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/sparc64/cache.S' object='kern/sparc64/kernel_exec-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/sparc64/kernel_exec-cache.obj `if test -f 'kern/sparc64/cache.S'; then $(CYGPATH_W) 'kern/sparc64/cache.S'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/cache.S'; fi` + +kern/x86_64/efi/kernel_exec-startup.o: kern/x86_64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/efi/kernel_exec-startup.o -MD -MP -MF kern/x86_64/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/x86_64/efi/kernel_exec-startup.o `test -f 'kern/x86_64/efi/startup.S' || echo '$(srcdir)/'`kern/x86_64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/x86_64/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/efi/startup.S' object='kern/x86_64/efi/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/efi/kernel_exec-startup.o `test -f 'kern/x86_64/efi/startup.S' || echo '$(srcdir)/'`kern/x86_64/efi/startup.S + +kern/x86_64/efi/kernel_exec-startup.obj: kern/x86_64/efi/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/efi/kernel_exec-startup.obj -MD -MP -MF kern/x86_64/efi/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/x86_64/efi/kernel_exec-startup.obj `if test -f 'kern/x86_64/efi/startup.S'; then $(CYGPATH_W) 'kern/x86_64/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/efi/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/efi/$(DEPDIR)/kernel_exec-startup.Tpo kern/x86_64/efi/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/efi/startup.S' object='kern/x86_64/efi/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/efi/kernel_exec-startup.obj `if test -f 'kern/x86_64/efi/startup.S'; then $(CYGPATH_W) 'kern/x86_64/efi/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/efi/startup.S'; fi` + +kern/x86_64/efi/kernel_exec-callwrap.o: kern/x86_64/efi/callwrap.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/efi/kernel_exec-callwrap.o -MD -MP -MF kern/x86_64/efi/$(DEPDIR)/kernel_exec-callwrap.Tpo -c -o kern/x86_64/efi/kernel_exec-callwrap.o `test -f 'kern/x86_64/efi/callwrap.S' || echo '$(srcdir)/'`kern/x86_64/efi/callwrap.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/efi/$(DEPDIR)/kernel_exec-callwrap.Tpo kern/x86_64/efi/$(DEPDIR)/kernel_exec-callwrap.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/efi/callwrap.S' object='kern/x86_64/efi/kernel_exec-callwrap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/efi/kernel_exec-callwrap.o `test -f 'kern/x86_64/efi/callwrap.S' || echo '$(srcdir)/'`kern/x86_64/efi/callwrap.S + +kern/x86_64/efi/kernel_exec-callwrap.obj: kern/x86_64/efi/callwrap.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/efi/kernel_exec-callwrap.obj -MD -MP -MF kern/x86_64/efi/$(DEPDIR)/kernel_exec-callwrap.Tpo -c -o kern/x86_64/efi/kernel_exec-callwrap.obj `if test -f 'kern/x86_64/efi/callwrap.S'; then $(CYGPATH_W) 'kern/x86_64/efi/callwrap.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/efi/callwrap.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/efi/$(DEPDIR)/kernel_exec-callwrap.Tpo kern/x86_64/efi/$(DEPDIR)/kernel_exec-callwrap.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/efi/callwrap.S' object='kern/x86_64/efi/kernel_exec-callwrap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/efi/kernel_exec-callwrap.obj `if test -f 'kern/x86_64/efi/callwrap.S'; then $(CYGPATH_W) 'kern/x86_64/efi/callwrap.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/efi/callwrap.S'; fi` + +kern/x86_64/xen/kernel_exec-startup.o: kern/x86_64/xen/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/xen/kernel_exec-startup.o -MD -MP -MF kern/x86_64/xen/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/x86_64/xen/kernel_exec-startup.o `test -f 'kern/x86_64/xen/startup.S' || echo '$(srcdir)/'`kern/x86_64/xen/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/xen/$(DEPDIR)/kernel_exec-startup.Tpo kern/x86_64/xen/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/xen/startup.S' object='kern/x86_64/xen/kernel_exec-startup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/xen/kernel_exec-startup.o `test -f 'kern/x86_64/xen/startup.S' || echo '$(srcdir)/'`kern/x86_64/xen/startup.S + +kern/x86_64/xen/kernel_exec-startup.obj: kern/x86_64/xen/startup.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/xen/kernel_exec-startup.obj -MD -MP -MF kern/x86_64/xen/$(DEPDIR)/kernel_exec-startup.Tpo -c -o kern/x86_64/xen/kernel_exec-startup.obj `if test -f 'kern/x86_64/xen/startup.S'; then $(CYGPATH_W) 'kern/x86_64/xen/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/xen/startup.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/xen/$(DEPDIR)/kernel_exec-startup.Tpo kern/x86_64/xen/$(DEPDIR)/kernel_exec-startup.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/xen/startup.S' object='kern/x86_64/xen/kernel_exec-startup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/xen/kernel_exec-startup.obj `if test -f 'kern/x86_64/xen/startup.S'; then $(CYGPATH_W) 'kern/x86_64/xen/startup.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/xen/startup.S'; fi` + +kern/x86_64/xen/kernel_exec-hypercall.o: kern/x86_64/xen/hypercall.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/xen/kernel_exec-hypercall.o -MD -MP -MF kern/x86_64/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo -c -o kern/x86_64/xen/kernel_exec-hypercall.o `test -f 'kern/x86_64/xen/hypercall.S' || echo '$(srcdir)/'`kern/x86_64/xen/hypercall.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo kern/x86_64/xen/$(DEPDIR)/kernel_exec-hypercall.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/xen/hypercall.S' object='kern/x86_64/xen/kernel_exec-hypercall.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/xen/kernel_exec-hypercall.o `test -f 'kern/x86_64/xen/hypercall.S' || echo '$(srcdir)/'`kern/x86_64/xen/hypercall.S + +kern/x86_64/xen/kernel_exec-hypercall.obj: kern/x86_64/xen/hypercall.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -MT kern/x86_64/xen/kernel_exec-hypercall.obj -MD -MP -MF kern/x86_64/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo -c -o kern/x86_64/xen/kernel_exec-hypercall.obj `if test -f 'kern/x86_64/xen/hypercall.S'; then $(CYGPATH_W) 'kern/x86_64/xen/hypercall.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/xen/hypercall.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/xen/$(DEPDIR)/kernel_exec-hypercall.Tpo kern/x86_64/xen/$(DEPDIR)/kernel_exec-hypercall.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='kern/x86_64/xen/hypercall.S' object='kern/x86_64/xen/kernel_exec-hypercall.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CCASFLAGS) $(CCASFLAGS) -c -o kern/x86_64/xen/kernel_exec-hypercall.obj `if test -f 'kern/x86_64/xen/hypercall.S'; then $(CYGPATH_W) 'kern/x86_64/xen/hypercall.S'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/xen/hypercall.S'; fi` + +boot/i386/pc/lnxboot_image-lnxboot.o: boot/i386/pc/lnxboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lnxboot_image_CPPFLAGS) $(CPPFLAGS) $(lnxboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/lnxboot_image-lnxboot.o -MD -MP -MF boot/i386/pc/$(DEPDIR)/lnxboot_image-lnxboot.Tpo -c -o boot/i386/pc/lnxboot_image-lnxboot.o `test -f 'boot/i386/pc/lnxboot.S' || echo '$(srcdir)/'`boot/i386/pc/lnxboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/lnxboot_image-lnxboot.Tpo boot/i386/pc/$(DEPDIR)/lnxboot_image-lnxboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/lnxboot.S' object='boot/i386/pc/lnxboot_image-lnxboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lnxboot_image_CPPFLAGS) $(CPPFLAGS) $(lnxboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/lnxboot_image-lnxboot.o `test -f 'boot/i386/pc/lnxboot.S' || echo '$(srcdir)/'`boot/i386/pc/lnxboot.S + +boot/i386/pc/lnxboot_image-lnxboot.obj: boot/i386/pc/lnxboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lnxboot_image_CPPFLAGS) $(CPPFLAGS) $(lnxboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/lnxboot_image-lnxboot.obj -MD -MP -MF boot/i386/pc/$(DEPDIR)/lnxboot_image-lnxboot.Tpo -c -o boot/i386/pc/lnxboot_image-lnxboot.obj `if test -f 'boot/i386/pc/lnxboot.S'; then $(CYGPATH_W) 'boot/i386/pc/lnxboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/lnxboot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/lnxboot_image-lnxboot.Tpo boot/i386/pc/$(DEPDIR)/lnxboot_image-lnxboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/lnxboot.S' object='boot/i386/pc/lnxboot_image-lnxboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lnxboot_image_CPPFLAGS) $(CPPFLAGS) $(lnxboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/lnxboot_image-lnxboot.obj `if test -f 'boot/i386/pc/lnxboot.S'; then $(CYGPATH_W) 'boot/i386/pc/lnxboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/lnxboot.S'; fi` + +boot/i386/pc/lzma_decompress_image-startup_raw.o: boot/i386/pc/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzma_decompress_image_CPPFLAGS) $(CPPFLAGS) $(lzma_decompress_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/lzma_decompress_image-startup_raw.o -MD -MP -MF boot/i386/pc/$(DEPDIR)/lzma_decompress_image-startup_raw.Tpo -c -o boot/i386/pc/lzma_decompress_image-startup_raw.o `test -f 'boot/i386/pc/startup_raw.S' || echo '$(srcdir)/'`boot/i386/pc/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/lzma_decompress_image-startup_raw.Tpo boot/i386/pc/$(DEPDIR)/lzma_decompress_image-startup_raw.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/startup_raw.S' object='boot/i386/pc/lzma_decompress_image-startup_raw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzma_decompress_image_CPPFLAGS) $(CPPFLAGS) $(lzma_decompress_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/lzma_decompress_image-startup_raw.o `test -f 'boot/i386/pc/startup_raw.S' || echo '$(srcdir)/'`boot/i386/pc/startup_raw.S + +boot/i386/pc/lzma_decompress_image-startup_raw.obj: boot/i386/pc/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzma_decompress_image_CPPFLAGS) $(CPPFLAGS) $(lzma_decompress_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/lzma_decompress_image-startup_raw.obj -MD -MP -MF boot/i386/pc/$(DEPDIR)/lzma_decompress_image-startup_raw.Tpo -c -o boot/i386/pc/lzma_decompress_image-startup_raw.obj `if test -f 'boot/i386/pc/startup_raw.S'; then $(CYGPATH_W) 'boot/i386/pc/startup_raw.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/startup_raw.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/lzma_decompress_image-startup_raw.Tpo boot/i386/pc/$(DEPDIR)/lzma_decompress_image-startup_raw.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/startup_raw.S' object='boot/i386/pc/lzma_decompress_image-startup_raw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzma_decompress_image_CPPFLAGS) $(CPPFLAGS) $(lzma_decompress_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/lzma_decompress_image-startup_raw.obj `if test -f 'boot/i386/pc/startup_raw.S'; then $(CYGPATH_W) 'boot/i386/pc/startup_raw.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/startup_raw.S'; fi` + +mmap/i386/pc/mmap_module-mmap_helper.o: mmap/i386/pc/mmap_helper.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CCASFLAGS) $(CCASFLAGS) -MT mmap/i386/pc/mmap_module-mmap_helper.o -MD -MP -MF mmap/i386/pc/$(DEPDIR)/mmap_module-mmap_helper.Tpo -c -o mmap/i386/pc/mmap_module-mmap_helper.o `test -f 'mmap/i386/pc/mmap_helper.S' || echo '$(srcdir)/'`mmap/i386/pc/mmap_helper.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/pc/$(DEPDIR)/mmap_module-mmap_helper.Tpo mmap/i386/pc/$(DEPDIR)/mmap_module-mmap_helper.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='mmap/i386/pc/mmap_helper.S' object='mmap/i386/pc/mmap_module-mmap_helper.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CCASFLAGS) $(CCASFLAGS) -c -o mmap/i386/pc/mmap_module-mmap_helper.o `test -f 'mmap/i386/pc/mmap_helper.S' || echo '$(srcdir)/'`mmap/i386/pc/mmap_helper.S + +mmap/i386/pc/mmap_module-mmap_helper.obj: mmap/i386/pc/mmap_helper.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CCASFLAGS) $(CCASFLAGS) -MT mmap/i386/pc/mmap_module-mmap_helper.obj -MD -MP -MF mmap/i386/pc/$(DEPDIR)/mmap_module-mmap_helper.Tpo -c -o mmap/i386/pc/mmap_module-mmap_helper.obj `if test -f 'mmap/i386/pc/mmap_helper.S'; then $(CYGPATH_W) 'mmap/i386/pc/mmap_helper.S'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/pc/mmap_helper.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/pc/$(DEPDIR)/mmap_module-mmap_helper.Tpo mmap/i386/pc/$(DEPDIR)/mmap_module-mmap_helper.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='mmap/i386/pc/mmap_helper.S' object='mmap/i386/pc/mmap_module-mmap_helper.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CCASFLAGS) $(CCASFLAGS) -c -o mmap/i386/pc/mmap_module-mmap_helper.obj `if test -f 'mmap/i386/pc/mmap_helper.S'; then $(CYGPATH_W) 'mmap/i386/pc/mmap_helper.S'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/pc/mmap_helper.S'; fi` + +boot/mips/none_decompress_image-startup_raw.o: boot/mips/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/none_decompress_image-startup_raw.o -MD -MP -MF boot/mips/$(DEPDIR)/none_decompress_image-startup_raw.Tpo -c -o boot/mips/none_decompress_image-startup_raw.o `test -f 'boot/mips/startup_raw.S' || echo '$(srcdir)/'`boot/mips/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/$(DEPDIR)/none_decompress_image-startup_raw.Tpo boot/mips/$(DEPDIR)/none_decompress_image-startup_raw.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/startup_raw.S' object='boot/mips/none_decompress_image-startup_raw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/none_decompress_image-startup_raw.o `test -f 'boot/mips/startup_raw.S' || echo '$(srcdir)/'`boot/mips/startup_raw.S + +boot/mips/none_decompress_image-startup_raw.obj: boot/mips/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/none_decompress_image-startup_raw.obj -MD -MP -MF boot/mips/$(DEPDIR)/none_decompress_image-startup_raw.Tpo -c -o boot/mips/none_decompress_image-startup_raw.obj `if test -f 'boot/mips/startup_raw.S'; then $(CYGPATH_W) 'boot/mips/startup_raw.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/startup_raw.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/$(DEPDIR)/none_decompress_image-startup_raw.Tpo boot/mips/$(DEPDIR)/none_decompress_image-startup_raw.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/startup_raw.S' object='boot/mips/none_decompress_image-startup_raw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/none_decompress_image-startup_raw.obj `if test -f 'boot/mips/startup_raw.S'; then $(CYGPATH_W) 'boot/mips/startup_raw.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/startup_raw.S'; fi` + +boot/i386/pc/pxeboot_image-pxeboot.o: boot/i386/pc/pxeboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxeboot_image_CPPFLAGS) $(CPPFLAGS) $(pxeboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/pxeboot_image-pxeboot.o -MD -MP -MF boot/i386/pc/$(DEPDIR)/pxeboot_image-pxeboot.Tpo -c -o boot/i386/pc/pxeboot_image-pxeboot.o `test -f 'boot/i386/pc/pxeboot.S' || echo '$(srcdir)/'`boot/i386/pc/pxeboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/pxeboot_image-pxeboot.Tpo boot/i386/pc/$(DEPDIR)/pxeboot_image-pxeboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/pxeboot.S' object='boot/i386/pc/pxeboot_image-pxeboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxeboot_image_CPPFLAGS) $(CPPFLAGS) $(pxeboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/pxeboot_image-pxeboot.o `test -f 'boot/i386/pc/pxeboot.S' || echo '$(srcdir)/'`boot/i386/pc/pxeboot.S + +boot/i386/pc/pxeboot_image-pxeboot.obj: boot/i386/pc/pxeboot.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxeboot_image_CPPFLAGS) $(CPPFLAGS) $(pxeboot_image_CCASFLAGS) $(CCASFLAGS) -MT boot/i386/pc/pxeboot_image-pxeboot.obj -MD -MP -MF boot/i386/pc/$(DEPDIR)/pxeboot_image-pxeboot.Tpo -c -o boot/i386/pc/pxeboot_image-pxeboot.obj `if test -f 'boot/i386/pc/pxeboot.S'; then $(CYGPATH_W) 'boot/i386/pc/pxeboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/pxeboot.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/i386/pc/$(DEPDIR)/pxeboot_image-pxeboot.Tpo boot/i386/pc/$(DEPDIR)/pxeboot_image-pxeboot.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/i386/pc/pxeboot.S' object='boot/i386/pc/pxeboot_image-pxeboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxeboot_image_CPPFLAGS) $(CPPFLAGS) $(pxeboot_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/i386/pc/pxeboot_image-pxeboot.obj `if test -f 'boot/i386/pc/pxeboot.S'; then $(CYGPATH_W) 'boot/i386/pc/pxeboot.S'; else $(CYGPATH_W) '$(srcdir)/boot/i386/pc/pxeboot.S'; fi` + +lib/i386/reboot_module-reboot_trampoline.o: lib/i386/reboot_trampoline.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/reboot_module-reboot_trampoline.o -MD -MP -MF lib/i386/$(DEPDIR)/reboot_module-reboot_trampoline.Tpo -c -o lib/i386/reboot_module-reboot_trampoline.o `test -f 'lib/i386/reboot_trampoline.S' || echo '$(srcdir)/'`lib/i386/reboot_trampoline.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/reboot_module-reboot_trampoline.Tpo lib/i386/$(DEPDIR)/reboot_module-reboot_trampoline.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/reboot_trampoline.S' object='lib/i386/reboot_module-reboot_trampoline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/reboot_module-reboot_trampoline.o `test -f 'lib/i386/reboot_trampoline.S' || echo '$(srcdir)/'`lib/i386/reboot_trampoline.S + +lib/i386/reboot_module-reboot_trampoline.obj: lib/i386/reboot_trampoline.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/reboot_module-reboot_trampoline.obj -MD -MP -MF lib/i386/$(DEPDIR)/reboot_module-reboot_trampoline.Tpo -c -o lib/i386/reboot_module-reboot_trampoline.obj `if test -f 'lib/i386/reboot_trampoline.S'; then $(CYGPATH_W) 'lib/i386/reboot_trampoline.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/reboot_trampoline.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/reboot_module-reboot_trampoline.Tpo lib/i386/$(DEPDIR)/reboot_module-reboot_trampoline.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/reboot_trampoline.S' object='lib/i386/reboot_module-reboot_trampoline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/reboot_module-reboot_trampoline.obj `if test -f 'lib/i386/reboot_trampoline.S'; then $(CYGPATH_W) 'lib/i386/reboot_trampoline.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/reboot_trampoline.S'; fi` + +lib/i386/relocator_module-relocator_asm.o: lib/i386/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator_asm.o -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/i386/relocator_module-relocator_asm.o `test -f 'lib/i386/relocator_asm.S' || echo '$(srcdir)/'`lib/i386/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator_asm.S' object='lib/i386/relocator_module-relocator_asm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator_asm.o `test -f 'lib/i386/relocator_asm.S' || echo '$(srcdir)/'`lib/i386/relocator_asm.S + +lib/i386/relocator_module-relocator_asm.obj: lib/i386/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator_asm.obj -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/i386/relocator_module-relocator_asm.obj `if test -f 'lib/i386/relocator_asm.S'; then $(CYGPATH_W) 'lib/i386/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator_asm.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator_asm.S' object='lib/i386/relocator_module-relocator_asm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator_asm.obj `if test -f 'lib/i386/relocator_asm.S'; then $(CYGPATH_W) 'lib/i386/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator_asm.S'; fi` + +lib/i386/relocator_module-relocator16.o: lib/i386/relocator16.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator16.o -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator16.Tpo -c -o lib/i386/relocator_module-relocator16.o `test -f 'lib/i386/relocator16.S' || echo '$(srcdir)/'`lib/i386/relocator16.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator16.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator16.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator16.S' object='lib/i386/relocator_module-relocator16.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator16.o `test -f 'lib/i386/relocator16.S' || echo '$(srcdir)/'`lib/i386/relocator16.S + +lib/i386/relocator_module-relocator16.obj: lib/i386/relocator16.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator16.obj -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator16.Tpo -c -o lib/i386/relocator_module-relocator16.obj `if test -f 'lib/i386/relocator16.S'; then $(CYGPATH_W) 'lib/i386/relocator16.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator16.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator16.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator16.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator16.S' object='lib/i386/relocator_module-relocator16.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator16.obj `if test -f 'lib/i386/relocator16.S'; then $(CYGPATH_W) 'lib/i386/relocator16.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator16.S'; fi` + +lib/i386/relocator_module-relocator32.o: lib/i386/relocator32.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator32.o -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator32.Tpo -c -o lib/i386/relocator_module-relocator32.o `test -f 'lib/i386/relocator32.S' || echo '$(srcdir)/'`lib/i386/relocator32.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator32.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator32.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator32.S' object='lib/i386/relocator_module-relocator32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator32.o `test -f 'lib/i386/relocator32.S' || echo '$(srcdir)/'`lib/i386/relocator32.S + +lib/i386/relocator_module-relocator32.obj: lib/i386/relocator32.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator32.obj -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator32.Tpo -c -o lib/i386/relocator_module-relocator32.obj `if test -f 'lib/i386/relocator32.S'; then $(CYGPATH_W) 'lib/i386/relocator32.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator32.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator32.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator32.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator32.S' object='lib/i386/relocator_module-relocator32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator32.obj `if test -f 'lib/i386/relocator32.S'; then $(CYGPATH_W) 'lib/i386/relocator32.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator32.S'; fi` + +lib/i386/relocator_module-relocator64.o: lib/i386/relocator64.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator64.o -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator64.Tpo -c -o lib/i386/relocator_module-relocator64.o `test -f 'lib/i386/relocator64.S' || echo '$(srcdir)/'`lib/i386/relocator64.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator64.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator64.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator64.S' object='lib/i386/relocator_module-relocator64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator64.o `test -f 'lib/i386/relocator64.S' || echo '$(srcdir)/'`lib/i386/relocator64.S + +lib/i386/relocator_module-relocator64.obj: lib/i386/relocator64.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/relocator_module-relocator64.obj -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator64.Tpo -c -o lib/i386/relocator_module-relocator64.obj `if test -f 'lib/i386/relocator64.S'; then $(CYGPATH_W) 'lib/i386/relocator64.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator64.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator64.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator64.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/relocator64.S' object='lib/i386/relocator_module-relocator64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/relocator_module-relocator64.obj `if test -f 'lib/i386/relocator64.S'; then $(CYGPATH_W) 'lib/i386/relocator64.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator64.S'; fi` + +lib/i386/xen/relocator_module-relocator.o: lib/i386/xen/relocator.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/xen/relocator_module-relocator.o -MD -MP -MF lib/i386/xen/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/i386/xen/relocator_module-relocator.o `test -f 'lib/i386/xen/relocator.S' || echo '$(srcdir)/'`lib/i386/xen/relocator.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/xen/$(DEPDIR)/relocator_module-relocator.Tpo lib/i386/xen/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/xen/relocator.S' object='lib/i386/xen/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/xen/relocator_module-relocator.o `test -f 'lib/i386/xen/relocator.S' || echo '$(srcdir)/'`lib/i386/xen/relocator.S + +lib/i386/xen/relocator_module-relocator.obj: lib/i386/xen/relocator.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/i386/xen/relocator_module-relocator.obj -MD -MP -MF lib/i386/xen/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/i386/xen/relocator_module-relocator.obj `if test -f 'lib/i386/xen/relocator.S'; then $(CYGPATH_W) 'lib/i386/xen/relocator.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/xen/relocator.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/i386/xen/$(DEPDIR)/relocator_module-relocator.Tpo lib/i386/xen/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/i386/xen/relocator.S' object='lib/i386/xen/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/i386/xen/relocator_module-relocator.obj `if test -f 'lib/i386/xen/relocator.S'; then $(CYGPATH_W) 'lib/i386/xen/relocator.S'; else $(CYGPATH_W) '$(srcdir)/lib/i386/xen/relocator.S'; fi` + +lib/mips/relocator_module-relocator_asm.o: lib/mips/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/mips/relocator_module-relocator_asm.o -MD -MP -MF lib/mips/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/mips/relocator_module-relocator_asm.o `test -f 'lib/mips/relocator_asm.S' || echo '$(srcdir)/'`lib/mips/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/mips/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/mips/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/mips/relocator_asm.S' object='lib/mips/relocator_module-relocator_asm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/mips/relocator_module-relocator_asm.o `test -f 'lib/mips/relocator_asm.S' || echo '$(srcdir)/'`lib/mips/relocator_asm.S + +lib/mips/relocator_module-relocator_asm.obj: lib/mips/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/mips/relocator_module-relocator_asm.obj -MD -MP -MF lib/mips/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/mips/relocator_module-relocator_asm.obj `if test -f 'lib/mips/relocator_asm.S'; then $(CYGPATH_W) 'lib/mips/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/mips/relocator_asm.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/mips/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/mips/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/mips/relocator_asm.S' object='lib/mips/relocator_module-relocator_asm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/mips/relocator_module-relocator_asm.obj `if test -f 'lib/mips/relocator_asm.S'; then $(CYGPATH_W) 'lib/mips/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/mips/relocator_asm.S'; fi` + +lib/powerpc/relocator_module-relocator_asm.o: lib/powerpc/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/powerpc/relocator_module-relocator_asm.o -MD -MP -MF lib/powerpc/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/powerpc/relocator_module-relocator_asm.o `test -f 'lib/powerpc/relocator_asm.S' || echo '$(srcdir)/'`lib/powerpc/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/powerpc/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/powerpc/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/powerpc/relocator_asm.S' object='lib/powerpc/relocator_module-relocator_asm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/powerpc/relocator_module-relocator_asm.o `test -f 'lib/powerpc/relocator_asm.S' || echo '$(srcdir)/'`lib/powerpc/relocator_asm.S + +lib/powerpc/relocator_module-relocator_asm.obj: lib/powerpc/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/powerpc/relocator_module-relocator_asm.obj -MD -MP -MF lib/powerpc/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/powerpc/relocator_module-relocator_asm.obj `if test -f 'lib/powerpc/relocator_asm.S'; then $(CYGPATH_W) 'lib/powerpc/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/powerpc/relocator_asm.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/powerpc/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/powerpc/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/powerpc/relocator_asm.S' object='lib/powerpc/relocator_module-relocator_asm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/powerpc/relocator_module-relocator_asm.obj `if test -f 'lib/powerpc/relocator_asm.S'; then $(CYGPATH_W) 'lib/powerpc/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/powerpc/relocator_asm.S'; fi` + +lib/x86_64/relocator_module-relocator_asm.o: lib/x86_64/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/x86_64/relocator_module-relocator_asm.o -MD -MP -MF lib/x86_64/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/x86_64/relocator_module-relocator_asm.o `test -f 'lib/x86_64/relocator_asm.S' || echo '$(srcdir)/'`lib/x86_64/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/x86_64/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/x86_64/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/x86_64/relocator_asm.S' object='lib/x86_64/relocator_module-relocator_asm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/x86_64/relocator_module-relocator_asm.o `test -f 'lib/x86_64/relocator_asm.S' || echo '$(srcdir)/'`lib/x86_64/relocator_asm.S + +lib/x86_64/relocator_module-relocator_asm.obj: lib/x86_64/relocator_asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/x86_64/relocator_module-relocator_asm.obj -MD -MP -MF lib/x86_64/$(DEPDIR)/relocator_module-relocator_asm.Tpo -c -o lib/x86_64/relocator_module-relocator_asm.obj `if test -f 'lib/x86_64/relocator_asm.S'; then $(CYGPATH_W) 'lib/x86_64/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/x86_64/relocator_asm.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/x86_64/$(DEPDIR)/relocator_module-relocator_asm.Tpo lib/x86_64/$(DEPDIR)/relocator_module-relocator_asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/x86_64/relocator_asm.S' object='lib/x86_64/relocator_module-relocator_asm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/x86_64/relocator_module-relocator_asm.obj `if test -f 'lib/x86_64/relocator_asm.S'; then $(CYGPATH_W) 'lib/x86_64/relocator_asm.S'; else $(CYGPATH_W) '$(srcdir)/lib/x86_64/relocator_asm.S'; fi` + +lib/x86_64/xen/relocator_module-relocator.o: lib/x86_64/xen/relocator.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/x86_64/xen/relocator_module-relocator.o -MD -MP -MF lib/x86_64/xen/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/x86_64/xen/relocator_module-relocator.o `test -f 'lib/x86_64/xen/relocator.S' || echo '$(srcdir)/'`lib/x86_64/xen/relocator.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/x86_64/xen/$(DEPDIR)/relocator_module-relocator.Tpo lib/x86_64/xen/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/x86_64/xen/relocator.S' object='lib/x86_64/xen/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/x86_64/xen/relocator_module-relocator.o `test -f 'lib/x86_64/xen/relocator.S' || echo '$(srcdir)/'`lib/x86_64/xen/relocator.S + +lib/x86_64/xen/relocator_module-relocator.obj: lib/x86_64/xen/relocator.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -MT lib/x86_64/xen/relocator_module-relocator.obj -MD -MP -MF lib/x86_64/xen/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/x86_64/xen/relocator_module-relocator.obj `if test -f 'lib/x86_64/xen/relocator.S'; then $(CYGPATH_W) 'lib/x86_64/xen/relocator.S'; else $(CYGPATH_W) '$(srcdir)/lib/x86_64/xen/relocator.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/x86_64/xen/$(DEPDIR)/relocator_module-relocator.Tpo lib/x86_64/xen/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/x86_64/xen/relocator.S' object='lib/x86_64/xen/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/x86_64/xen/relocator_module-relocator.obj `if test -f 'lib/x86_64/xen/relocator.S'; then $(CYGPATH_W) 'lib/x86_64/xen/relocator.S'; else $(CYGPATH_W) '$(srcdir)/lib/x86_64/xen/relocator.S'; fi` + +lib/setjmp_module-setjmp.o: lib/setjmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_module_CCASFLAGS) $(CCASFLAGS) -MT lib/setjmp_module-setjmp.o -MD -MP -MF lib/$(DEPDIR)/setjmp_module-setjmp.Tpo -c -o lib/setjmp_module-setjmp.o `test -f 'lib/setjmp.S' || echo '$(srcdir)/'`lib/setjmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/setjmp_module-setjmp.Tpo lib/$(DEPDIR)/setjmp_module-setjmp.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/setjmp.S' object='lib/setjmp_module-setjmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/setjmp_module-setjmp.o `test -f 'lib/setjmp.S' || echo '$(srcdir)/'`lib/setjmp.S + +lib/setjmp_module-setjmp.obj: lib/setjmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_module_CCASFLAGS) $(CCASFLAGS) -MT lib/setjmp_module-setjmp.obj -MD -MP -MF lib/$(DEPDIR)/setjmp_module-setjmp.Tpo -c -o lib/setjmp_module-setjmp.obj `if test -f 'lib/setjmp.S'; then $(CYGPATH_W) 'lib/setjmp.S'; else $(CYGPATH_W) '$(srcdir)/lib/setjmp.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/setjmp_module-setjmp.Tpo lib/$(DEPDIR)/setjmp_module-setjmp.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='lib/setjmp.S' object='lib/setjmp_module-setjmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_module_CCASFLAGS) $(CCASFLAGS) -c -o lib/setjmp_module-setjmp.obj `if test -f 'lib/setjmp.S'; then $(CYGPATH_W) 'lib/setjmp.S'; else $(CYGPATH_W) '$(srcdir)/lib/setjmp.S'; fi` + +boot/mips/xz_decompress_image-startup_raw.o: boot/mips/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/xz_decompress_image-startup_raw.o -MD -MP -MF boot/mips/$(DEPDIR)/xz_decompress_image-startup_raw.Tpo -c -o boot/mips/xz_decompress_image-startup_raw.o `test -f 'boot/mips/startup_raw.S' || echo '$(srcdir)/'`boot/mips/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/$(DEPDIR)/xz_decompress_image-startup_raw.Tpo boot/mips/$(DEPDIR)/xz_decompress_image-startup_raw.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/startup_raw.S' object='boot/mips/xz_decompress_image-startup_raw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/xz_decompress_image-startup_raw.o `test -f 'boot/mips/startup_raw.S' || echo '$(srcdir)/'`boot/mips/startup_raw.S + +boot/mips/xz_decompress_image-startup_raw.obj: boot/mips/startup_raw.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CCASFLAGS) $(CCASFLAGS) -MT boot/mips/xz_decompress_image-startup_raw.obj -MD -MP -MF boot/mips/$(DEPDIR)/xz_decompress_image-startup_raw.Tpo -c -o boot/mips/xz_decompress_image-startup_raw.obj `if test -f 'boot/mips/startup_raw.S'; then $(CYGPATH_W) 'boot/mips/startup_raw.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/startup_raw.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) boot/mips/$(DEPDIR)/xz_decompress_image-startup_raw.Tpo boot/mips/$(DEPDIR)/xz_decompress_image-startup_raw.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='boot/mips/startup_raw.S' object='boot/mips/xz_decompress_image-startup_raw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CCASFLAGS) $(CCASFLAGS) -c -o boot/mips/xz_decompress_image-startup_raw.obj `if test -f 'boot/mips/startup_raw.S'; then $(CYGPATH_W) 'boot/mips/startup_raw.S'; else $(CYGPATH_W) '$(srcdir)/boot/mips/startup_raw.S'; fi` + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +commands/acpi_module-acpi.o: commands/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -MT commands/acpi_module-acpi.o -MD -MP -MF commands/$(DEPDIR)/acpi_module-acpi.Tpo -c -o commands/acpi_module-acpi.o `test -f 'commands/acpi.c' || echo '$(srcdir)/'`commands/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/acpi_module-acpi.Tpo commands/$(DEPDIR)/acpi_module-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/acpi.c' object='commands/acpi_module-acpi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -c -o commands/acpi_module-acpi.o `test -f 'commands/acpi.c' || echo '$(srcdir)/'`commands/acpi.c + +commands/acpi_module-acpi.obj: commands/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -MT commands/acpi_module-acpi.obj -MD -MP -MF commands/$(DEPDIR)/acpi_module-acpi.Tpo -c -o commands/acpi_module-acpi.obj `if test -f 'commands/acpi.c'; then $(CYGPATH_W) 'commands/acpi.c'; else $(CYGPATH_W) '$(srcdir)/commands/acpi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/acpi_module-acpi.Tpo commands/$(DEPDIR)/acpi_module-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/acpi.c' object='commands/acpi_module-acpi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -c -o commands/acpi_module-acpi.obj `if test -f 'commands/acpi.c'; then $(CYGPATH_W) 'commands/acpi.c'; else $(CYGPATH_W) '$(srcdir)/commands/acpi.c'; fi` + +kern/acpi_module-acpi.o: kern/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -MT kern/acpi_module-acpi.o -MD -MP -MF kern/$(DEPDIR)/acpi_module-acpi.Tpo -c -o kern/acpi_module-acpi.o `test -f 'kern/acpi.c' || echo '$(srcdir)/'`kern/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/acpi_module-acpi.Tpo kern/$(DEPDIR)/acpi_module-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/acpi.c' object='kern/acpi_module-acpi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -c -o kern/acpi_module-acpi.o `test -f 'kern/acpi.c' || echo '$(srcdir)/'`kern/acpi.c + +kern/acpi_module-acpi.obj: kern/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -MT kern/acpi_module-acpi.obj -MD -MP -MF kern/$(DEPDIR)/acpi_module-acpi.Tpo -c -o kern/acpi_module-acpi.obj `if test -f 'kern/acpi.c'; then $(CYGPATH_W) 'kern/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/acpi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/acpi_module-acpi.Tpo kern/$(DEPDIR)/acpi_module-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/acpi.c' object='kern/acpi_module-acpi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -c -o kern/acpi_module-acpi.obj `if test -f 'kern/acpi.c'; then $(CYGPATH_W) 'kern/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/acpi.c'; fi` + +kern/i386/pc/acpi_module-acpi.o: kern/i386/pc/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -MT kern/i386/pc/acpi_module-acpi.o -MD -MP -MF kern/i386/pc/$(DEPDIR)/acpi_module-acpi.Tpo -c -o kern/i386/pc/acpi_module-acpi.o `test -f 'kern/i386/pc/acpi.c' || echo '$(srcdir)/'`kern/i386/pc/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/acpi_module-acpi.Tpo kern/i386/pc/$(DEPDIR)/acpi_module-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/acpi.c' object='kern/i386/pc/acpi_module-acpi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/acpi_module-acpi.o `test -f 'kern/i386/pc/acpi.c' || echo '$(srcdir)/'`kern/i386/pc/acpi.c + +kern/i386/pc/acpi_module-acpi.obj: kern/i386/pc/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -MT kern/i386/pc/acpi_module-acpi.obj -MD -MP -MF kern/i386/pc/$(DEPDIR)/acpi_module-acpi.Tpo -c -o kern/i386/pc/acpi_module-acpi.obj `if test -f 'kern/i386/pc/acpi.c'; then $(CYGPATH_W) 'kern/i386/pc/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/acpi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/acpi_module-acpi.Tpo kern/i386/pc/$(DEPDIR)/acpi_module-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/acpi.c' object='kern/i386/pc/acpi_module-acpi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $(acpi_module_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/acpi_module-acpi.obj `if test -f 'kern/i386/pc/acpi.c'; then $(CYGPATH_W) 'kern/i386/pc/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/acpi.c'; fi` + +lib/adler32_module-adler32.o: lib/adler32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adler32_module_CPPFLAGS) $(CPPFLAGS) $(adler32_module_CFLAGS) $(CFLAGS) -MT lib/adler32_module-adler32.o -MD -MP -MF lib/$(DEPDIR)/adler32_module-adler32.Tpo -c -o lib/adler32_module-adler32.o `test -f 'lib/adler32.c' || echo '$(srcdir)/'`lib/adler32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/adler32_module-adler32.Tpo lib/$(DEPDIR)/adler32_module-adler32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/adler32.c' object='lib/adler32_module-adler32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adler32_module_CPPFLAGS) $(CPPFLAGS) $(adler32_module_CFLAGS) $(CFLAGS) -c -o lib/adler32_module-adler32.o `test -f 'lib/adler32.c' || echo '$(srcdir)/'`lib/adler32.c + +lib/adler32_module-adler32.obj: lib/adler32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adler32_module_CPPFLAGS) $(CPPFLAGS) $(adler32_module_CFLAGS) $(CFLAGS) -MT lib/adler32_module-adler32.obj -MD -MP -MF lib/$(DEPDIR)/adler32_module-adler32.Tpo -c -o lib/adler32_module-adler32.obj `if test -f 'lib/adler32.c'; then $(CYGPATH_W) 'lib/adler32.c'; else $(CYGPATH_W) '$(srcdir)/lib/adler32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/adler32_module-adler32.Tpo lib/$(DEPDIR)/adler32_module-adler32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/adler32.c' object='lib/adler32_module-adler32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adler32_module_CPPFLAGS) $(CPPFLAGS) $(adler32_module_CFLAGS) $(CFLAGS) -c -o lib/adler32_module-adler32.obj `if test -f 'lib/adler32.c'; then $(CYGPATH_W) 'lib/adler32.c'; else $(CYGPATH_W) '$(srcdir)/lib/adler32.c'; fi` + +fs/affs_module-affs.o: fs/affs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(affs_module_CPPFLAGS) $(CPPFLAGS) $(affs_module_CFLAGS) $(CFLAGS) -MT fs/affs_module-affs.o -MD -MP -MF fs/$(DEPDIR)/affs_module-affs.Tpo -c -o fs/affs_module-affs.o `test -f 'fs/affs.c' || echo '$(srcdir)/'`fs/affs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/affs_module-affs.Tpo fs/$(DEPDIR)/affs_module-affs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/affs.c' object='fs/affs_module-affs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(affs_module_CPPFLAGS) $(CPPFLAGS) $(affs_module_CFLAGS) $(CFLAGS) -c -o fs/affs_module-affs.o `test -f 'fs/affs.c' || echo '$(srcdir)/'`fs/affs.c + +fs/affs_module-affs.obj: fs/affs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(affs_module_CPPFLAGS) $(CPPFLAGS) $(affs_module_CFLAGS) $(CFLAGS) -MT fs/affs_module-affs.obj -MD -MP -MF fs/$(DEPDIR)/affs_module-affs.Tpo -c -o fs/affs_module-affs.obj `if test -f 'fs/affs.c'; then $(CYGPATH_W) 'fs/affs.c'; else $(CYGPATH_W) '$(srcdir)/fs/affs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/affs_module-affs.Tpo fs/$(DEPDIR)/affs_module-affs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/affs.c' object='fs/affs_module-affs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(affs_module_CPPFLAGS) $(CPPFLAGS) $(affs_module_CFLAGS) $(CFLAGS) -c -o fs/affs_module-affs.obj `if test -f 'fs/affs.c'; then $(CYGPATH_W) 'fs/affs.c'; else $(CYGPATH_W) '$(srcdir)/fs/affs.c'; fi` + +fs/afs_module-afs.o: fs/afs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(afs_module_CPPFLAGS) $(CPPFLAGS) $(afs_module_CFLAGS) $(CFLAGS) -MT fs/afs_module-afs.o -MD -MP -MF fs/$(DEPDIR)/afs_module-afs.Tpo -c -o fs/afs_module-afs.o `test -f 'fs/afs.c' || echo '$(srcdir)/'`fs/afs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/afs_module-afs.Tpo fs/$(DEPDIR)/afs_module-afs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/afs.c' object='fs/afs_module-afs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(afs_module_CPPFLAGS) $(CPPFLAGS) $(afs_module_CFLAGS) $(CFLAGS) -c -o fs/afs_module-afs.o `test -f 'fs/afs.c' || echo '$(srcdir)/'`fs/afs.c + +fs/afs_module-afs.obj: fs/afs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(afs_module_CPPFLAGS) $(CPPFLAGS) $(afs_module_CFLAGS) $(CFLAGS) -MT fs/afs_module-afs.obj -MD -MP -MF fs/$(DEPDIR)/afs_module-afs.Tpo -c -o fs/afs_module-afs.obj `if test -f 'fs/afs.c'; then $(CYGPATH_W) 'fs/afs.c'; else $(CYGPATH_W) '$(srcdir)/fs/afs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/afs_module-afs.Tpo fs/$(DEPDIR)/afs_module-afs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/afs.c' object='fs/afs_module-afs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(afs_module_CPPFLAGS) $(CPPFLAGS) $(afs_module_CFLAGS) $(CFLAGS) -c -o fs/afs_module-afs.obj `if test -f 'fs/afs.c'; then $(CYGPATH_W) 'fs/afs.c'; else $(CYGPATH_W) '$(srcdir)/fs/afs.c'; fi` + +disk/ahci_module-ahci.o: disk/ahci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $(ahci_module_CFLAGS) $(CFLAGS) -MT disk/ahci_module-ahci.o -MD -MP -MF disk/$(DEPDIR)/ahci_module-ahci.Tpo -c -o disk/ahci_module-ahci.o `test -f 'disk/ahci.c' || echo '$(srcdir)/'`disk/ahci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/ahci_module-ahci.Tpo disk/$(DEPDIR)/ahci_module-ahci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ahci.c' object='disk/ahci_module-ahci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $(ahci_module_CFLAGS) $(CFLAGS) -c -o disk/ahci_module-ahci.o `test -f 'disk/ahci.c' || echo '$(srcdir)/'`disk/ahci.c + +disk/ahci_module-ahci.obj: disk/ahci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $(ahci_module_CFLAGS) $(CFLAGS) -MT disk/ahci_module-ahci.obj -MD -MP -MF disk/$(DEPDIR)/ahci_module-ahci.Tpo -c -o disk/ahci_module-ahci.obj `if test -f 'disk/ahci.c'; then $(CYGPATH_W) 'disk/ahci.c'; else $(CYGPATH_W) '$(srcdir)/disk/ahci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/ahci_module-ahci.Tpo disk/$(DEPDIR)/ahci_module-ahci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ahci.c' object='disk/ahci_module-ahci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $(ahci_module_CFLAGS) $(CFLAGS) -c -o disk/ahci_module-ahci.obj `if test -f 'disk/ahci.c'; then $(CYGPATH_W) 'disk/ahci.c'; else $(CYGPATH_W) '$(srcdir)/disk/ahci.c'; fi` + +lib/all_video_module-fake_module.o: lib/fake_module.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(all_video_module_CPPFLAGS) $(CPPFLAGS) $(all_video_module_CFLAGS) $(CFLAGS) -MT lib/all_video_module-fake_module.o -MD -MP -MF lib/$(DEPDIR)/all_video_module-fake_module.Tpo -c -o lib/all_video_module-fake_module.o `test -f 'lib/fake_module.c' || echo '$(srcdir)/'`lib/fake_module.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/all_video_module-fake_module.Tpo lib/$(DEPDIR)/all_video_module-fake_module.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/fake_module.c' object='lib/all_video_module-fake_module.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(all_video_module_CPPFLAGS) $(CPPFLAGS) $(all_video_module_CFLAGS) $(CFLAGS) -c -o lib/all_video_module-fake_module.o `test -f 'lib/fake_module.c' || echo '$(srcdir)/'`lib/fake_module.c + +lib/all_video_module-fake_module.obj: lib/fake_module.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(all_video_module_CPPFLAGS) $(CPPFLAGS) $(all_video_module_CFLAGS) $(CFLAGS) -MT lib/all_video_module-fake_module.obj -MD -MP -MF lib/$(DEPDIR)/all_video_module-fake_module.Tpo -c -o lib/all_video_module-fake_module.obj `if test -f 'lib/fake_module.c'; then $(CYGPATH_W) 'lib/fake_module.c'; else $(CYGPATH_W) '$(srcdir)/lib/fake_module.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/all_video_module-fake_module.Tpo lib/$(DEPDIR)/all_video_module-fake_module.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/fake_module.c' object='lib/all_video_module-fake_module.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(all_video_module_CPPFLAGS) $(CPPFLAGS) $(all_video_module_CFLAGS) $(CFLAGS) -c -o lib/all_video_module-fake_module.obj `if test -f 'lib/fake_module.c'; then $(CYGPATH_W) 'lib/fake_module.c'; else $(CYGPATH_W) '$(srcdir)/lib/fake_module.c'; fi` + +loader/aout_module-aout.o: loader/aout.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $(aout_module_CFLAGS) $(CFLAGS) -MT loader/aout_module-aout.o -MD -MP -MF loader/$(DEPDIR)/aout_module-aout.Tpo -c -o loader/aout_module-aout.o `test -f 'loader/aout.c' || echo '$(srcdir)/'`loader/aout.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/aout_module-aout.Tpo loader/$(DEPDIR)/aout_module-aout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/aout.c' object='loader/aout_module-aout.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $(aout_module_CFLAGS) $(CFLAGS) -c -o loader/aout_module-aout.o `test -f 'loader/aout.c' || echo '$(srcdir)/'`loader/aout.c + +loader/aout_module-aout.obj: loader/aout.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $(aout_module_CFLAGS) $(CFLAGS) -MT loader/aout_module-aout.obj -MD -MP -MF loader/$(DEPDIR)/aout_module-aout.Tpo -c -o loader/aout_module-aout.obj `if test -f 'loader/aout.c'; then $(CYGPATH_W) 'loader/aout.c'; else $(CYGPATH_W) '$(srcdir)/loader/aout.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/aout_module-aout.Tpo loader/$(DEPDIR)/aout_module-aout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/aout.c' object='loader/aout_module-aout.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $(aout_module_CFLAGS) $(CFLAGS) -c -o loader/aout_module-aout.obj `if test -f 'loader/aout.c'; then $(CYGPATH_W) 'loader/aout.c'; else $(CYGPATH_W) '$(srcdir)/loader/aout.c'; fi` + +loader/efi/appleldr_module-appleloader.o: loader/efi/appleloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $(appleldr_module_CFLAGS) $(CFLAGS) -MT loader/efi/appleldr_module-appleloader.o -MD -MP -MF loader/efi/$(DEPDIR)/appleldr_module-appleloader.Tpo -c -o loader/efi/appleldr_module-appleloader.o `test -f 'loader/efi/appleloader.c' || echo '$(srcdir)/'`loader/efi/appleloader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/efi/$(DEPDIR)/appleldr_module-appleloader.Tpo loader/efi/$(DEPDIR)/appleldr_module-appleloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/efi/appleloader.c' object='loader/efi/appleldr_module-appleloader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $(appleldr_module_CFLAGS) $(CFLAGS) -c -o loader/efi/appleldr_module-appleloader.o `test -f 'loader/efi/appleloader.c' || echo '$(srcdir)/'`loader/efi/appleloader.c + +loader/efi/appleldr_module-appleloader.obj: loader/efi/appleloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $(appleldr_module_CFLAGS) $(CFLAGS) -MT loader/efi/appleldr_module-appleloader.obj -MD -MP -MF loader/efi/$(DEPDIR)/appleldr_module-appleloader.Tpo -c -o loader/efi/appleldr_module-appleloader.obj `if test -f 'loader/efi/appleloader.c'; then $(CYGPATH_W) 'loader/efi/appleloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/efi/appleloader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/efi/$(DEPDIR)/appleldr_module-appleloader.Tpo loader/efi/$(DEPDIR)/appleldr_module-appleloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/efi/appleloader.c' object='loader/efi/appleldr_module-appleloader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $(appleldr_module_CFLAGS) $(CFLAGS) -c -o loader/efi/appleldr_module-appleloader.obj `if test -f 'loader/efi/appleloader.c'; then $(CYGPATH_W) 'loader/efi/appleloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/efi/appleloader.c'; fi` + +fs/archelp_module-archelp.o: fs/archelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(archelp_module_CPPFLAGS) $(CPPFLAGS) $(archelp_module_CFLAGS) $(CFLAGS) -MT fs/archelp_module-archelp.o -MD -MP -MF fs/$(DEPDIR)/archelp_module-archelp.Tpo -c -o fs/archelp_module-archelp.o `test -f 'fs/archelp.c' || echo '$(srcdir)/'`fs/archelp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/archelp_module-archelp.Tpo fs/$(DEPDIR)/archelp_module-archelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/archelp.c' object='fs/archelp_module-archelp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(archelp_module_CPPFLAGS) $(CPPFLAGS) $(archelp_module_CFLAGS) $(CFLAGS) -c -o fs/archelp_module-archelp.o `test -f 'fs/archelp.c' || echo '$(srcdir)/'`fs/archelp.c + +fs/archelp_module-archelp.obj: fs/archelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(archelp_module_CPPFLAGS) $(CPPFLAGS) $(archelp_module_CFLAGS) $(CFLAGS) -MT fs/archelp_module-archelp.obj -MD -MP -MF fs/$(DEPDIR)/archelp_module-archelp.Tpo -c -o fs/archelp_module-archelp.obj `if test -f 'fs/archelp.c'; then $(CYGPATH_W) 'fs/archelp.c'; else $(CYGPATH_W) '$(srcdir)/fs/archelp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/archelp_module-archelp.Tpo fs/$(DEPDIR)/archelp_module-archelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/archelp.c' object='fs/archelp_module-archelp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(archelp_module_CPPFLAGS) $(CPPFLAGS) $(archelp_module_CFLAGS) $(CFLAGS) -c -o fs/archelp_module-archelp.obj `if test -f 'fs/archelp.c'; then $(CYGPATH_W) 'fs/archelp.c'; else $(CYGPATH_W) '$(srcdir)/fs/archelp.c'; fi` + +term/at_keyboard_module-at_keyboard.o: term/at_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(at_keyboard_module_CFLAGS) $(CFLAGS) -MT term/at_keyboard_module-at_keyboard.o -MD -MP -MF term/$(DEPDIR)/at_keyboard_module-at_keyboard.Tpo -c -o term/at_keyboard_module-at_keyboard.o `test -f 'term/at_keyboard.c' || echo '$(srcdir)/'`term/at_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/at_keyboard_module-at_keyboard.Tpo term/$(DEPDIR)/at_keyboard_module-at_keyboard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/at_keyboard.c' object='term/at_keyboard_module-at_keyboard.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(at_keyboard_module_CFLAGS) $(CFLAGS) -c -o term/at_keyboard_module-at_keyboard.o `test -f 'term/at_keyboard.c' || echo '$(srcdir)/'`term/at_keyboard.c + +term/at_keyboard_module-at_keyboard.obj: term/at_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(at_keyboard_module_CFLAGS) $(CFLAGS) -MT term/at_keyboard_module-at_keyboard.obj -MD -MP -MF term/$(DEPDIR)/at_keyboard_module-at_keyboard.Tpo -c -o term/at_keyboard_module-at_keyboard.obj `if test -f 'term/at_keyboard.c'; then $(CYGPATH_W) 'term/at_keyboard.c'; else $(CYGPATH_W) '$(srcdir)/term/at_keyboard.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/at_keyboard_module-at_keyboard.Tpo term/$(DEPDIR)/at_keyboard_module-at_keyboard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/at_keyboard.c' object='term/at_keyboard_module-at_keyboard.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(at_keyboard_module_CFLAGS) $(CFLAGS) -c -o term/at_keyboard_module-at_keyboard.obj `if test -f 'term/at_keyboard.c'; then $(CYGPATH_W) 'term/at_keyboard.c'; else $(CYGPATH_W) '$(srcdir)/term/at_keyboard.c'; fi` + +disk/ata_module-ata.o: disk/ata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $(ata_module_CFLAGS) $(CFLAGS) -MT disk/ata_module-ata.o -MD -MP -MF disk/$(DEPDIR)/ata_module-ata.Tpo -c -o disk/ata_module-ata.o `test -f 'disk/ata.c' || echo '$(srcdir)/'`disk/ata.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/ata_module-ata.Tpo disk/$(DEPDIR)/ata_module-ata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ata.c' object='disk/ata_module-ata.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $(ata_module_CFLAGS) $(CFLAGS) -c -o disk/ata_module-ata.o `test -f 'disk/ata.c' || echo '$(srcdir)/'`disk/ata.c + +disk/ata_module-ata.obj: disk/ata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $(ata_module_CFLAGS) $(CFLAGS) -MT disk/ata_module-ata.obj -MD -MP -MF disk/$(DEPDIR)/ata_module-ata.Tpo -c -o disk/ata_module-ata.obj `if test -f 'disk/ata.c'; then $(CYGPATH_W) 'disk/ata.c'; else $(CYGPATH_W) '$(srcdir)/disk/ata.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/ata_module-ata.Tpo disk/$(DEPDIR)/ata_module-ata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ata.c' object='disk/ata_module-ata.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $(ata_module_CFLAGS) $(CFLAGS) -c -o disk/ata_module-ata.obj `if test -f 'disk/ata.c'; then $(CYGPATH_W) 'disk/ata.c'; else $(CYGPATH_W) '$(srcdir)/disk/ata.c'; fi` + +lib/i386/backtrace_module-backtrace.o: lib/i386/backtrace.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -MT lib/i386/backtrace_module-backtrace.o -MD -MP -MF lib/i386/$(DEPDIR)/backtrace_module-backtrace.Tpo -c -o lib/i386/backtrace_module-backtrace.o `test -f 'lib/i386/backtrace.c' || echo '$(srcdir)/'`lib/i386/backtrace.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/backtrace_module-backtrace.Tpo lib/i386/$(DEPDIR)/backtrace_module-backtrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/backtrace.c' object='lib/i386/backtrace_module-backtrace.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -c -o lib/i386/backtrace_module-backtrace.o `test -f 'lib/i386/backtrace.c' || echo '$(srcdir)/'`lib/i386/backtrace.c + +lib/i386/backtrace_module-backtrace.obj: lib/i386/backtrace.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -MT lib/i386/backtrace_module-backtrace.obj -MD -MP -MF lib/i386/$(DEPDIR)/backtrace_module-backtrace.Tpo -c -o lib/i386/backtrace_module-backtrace.obj `if test -f 'lib/i386/backtrace.c'; then $(CYGPATH_W) 'lib/i386/backtrace.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/backtrace.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/backtrace_module-backtrace.Tpo lib/i386/$(DEPDIR)/backtrace_module-backtrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/backtrace.c' object='lib/i386/backtrace_module-backtrace.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -c -o lib/i386/backtrace_module-backtrace.obj `if test -f 'lib/i386/backtrace.c'; then $(CYGPATH_W) 'lib/i386/backtrace.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/backtrace.c'; fi` + +lib/backtrace_module-backtrace.o: lib/backtrace.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -MT lib/backtrace_module-backtrace.o -MD -MP -MF lib/$(DEPDIR)/backtrace_module-backtrace.Tpo -c -o lib/backtrace_module-backtrace.o `test -f 'lib/backtrace.c' || echo '$(srcdir)/'`lib/backtrace.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/backtrace_module-backtrace.Tpo lib/$(DEPDIR)/backtrace_module-backtrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/backtrace.c' object='lib/backtrace_module-backtrace.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -c -o lib/backtrace_module-backtrace.o `test -f 'lib/backtrace.c' || echo '$(srcdir)/'`lib/backtrace.c + +lib/backtrace_module-backtrace.obj: lib/backtrace.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -MT lib/backtrace_module-backtrace.obj -MD -MP -MF lib/$(DEPDIR)/backtrace_module-backtrace.Tpo -c -o lib/backtrace_module-backtrace.obj `if test -f 'lib/backtrace.c'; then $(CYGPATH_W) 'lib/backtrace.c'; else $(CYGPATH_W) '$(srcdir)/lib/backtrace.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/backtrace_module-backtrace.Tpo lib/$(DEPDIR)/backtrace_module-backtrace.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/backtrace.c' object='lib/backtrace_module-backtrace.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $(backtrace_module_CFLAGS) $(CFLAGS) -c -o lib/backtrace_module-backtrace.obj `if test -f 'lib/backtrace.c'; then $(CYGPATH_W) 'lib/backtrace.c'; else $(CYGPATH_W) '$(srcdir)/lib/backtrace.c'; fi` + +fs/bfs_module-bfs.o: fs/bfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfs_module_CPPFLAGS) $(CPPFLAGS) $(bfs_module_CFLAGS) $(CFLAGS) -MT fs/bfs_module-bfs.o -MD -MP -MF fs/$(DEPDIR)/bfs_module-bfs.Tpo -c -o fs/bfs_module-bfs.o `test -f 'fs/bfs.c' || echo '$(srcdir)/'`fs/bfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/bfs_module-bfs.Tpo fs/$(DEPDIR)/bfs_module-bfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/bfs.c' object='fs/bfs_module-bfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfs_module_CPPFLAGS) $(CPPFLAGS) $(bfs_module_CFLAGS) $(CFLAGS) -c -o fs/bfs_module-bfs.o `test -f 'fs/bfs.c' || echo '$(srcdir)/'`fs/bfs.c + +fs/bfs_module-bfs.obj: fs/bfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfs_module_CPPFLAGS) $(CPPFLAGS) $(bfs_module_CFLAGS) $(CFLAGS) -MT fs/bfs_module-bfs.obj -MD -MP -MF fs/$(DEPDIR)/bfs_module-bfs.Tpo -c -o fs/bfs_module-bfs.obj `if test -f 'fs/bfs.c'; then $(CYGPATH_W) 'fs/bfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/bfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/bfs_module-bfs.Tpo fs/$(DEPDIR)/bfs_module-bfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/bfs.c' object='fs/bfs_module-bfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfs_module_CPPFLAGS) $(CPPFLAGS) $(bfs_module_CFLAGS) $(CFLAGS) -c -o fs/bfs_module-bfs.obj `if test -f 'fs/bfs.c'; then $(CYGPATH_W) 'fs/bfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/bfs.c'; fi` + +disk/i386/pc/biosdisk_module-biosdisk.o: disk/i386/pc/biosdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(biosdisk_module_CPPFLAGS) $(CPPFLAGS) $(biosdisk_module_CFLAGS) $(CFLAGS) -MT disk/i386/pc/biosdisk_module-biosdisk.o -MD -MP -MF disk/i386/pc/$(DEPDIR)/biosdisk_module-biosdisk.Tpo -c -o disk/i386/pc/biosdisk_module-biosdisk.o `test -f 'disk/i386/pc/biosdisk.c' || echo '$(srcdir)/'`disk/i386/pc/biosdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/i386/pc/$(DEPDIR)/biosdisk_module-biosdisk.Tpo disk/i386/pc/$(DEPDIR)/biosdisk_module-biosdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/i386/pc/biosdisk.c' object='disk/i386/pc/biosdisk_module-biosdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(biosdisk_module_CPPFLAGS) $(CPPFLAGS) $(biosdisk_module_CFLAGS) $(CFLAGS) -c -o disk/i386/pc/biosdisk_module-biosdisk.o `test -f 'disk/i386/pc/biosdisk.c' || echo '$(srcdir)/'`disk/i386/pc/biosdisk.c + +disk/i386/pc/biosdisk_module-biosdisk.obj: disk/i386/pc/biosdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(biosdisk_module_CPPFLAGS) $(CPPFLAGS) $(biosdisk_module_CFLAGS) $(CFLAGS) -MT disk/i386/pc/biosdisk_module-biosdisk.obj -MD -MP -MF disk/i386/pc/$(DEPDIR)/biosdisk_module-biosdisk.Tpo -c -o disk/i386/pc/biosdisk_module-biosdisk.obj `if test -f 'disk/i386/pc/biosdisk.c'; then $(CYGPATH_W) 'disk/i386/pc/biosdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/i386/pc/biosdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/i386/pc/$(DEPDIR)/biosdisk_module-biosdisk.Tpo disk/i386/pc/$(DEPDIR)/biosdisk_module-biosdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/i386/pc/biosdisk.c' object='disk/i386/pc/biosdisk_module-biosdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(biosdisk_module_CPPFLAGS) $(CPPFLAGS) $(biosdisk_module_CFLAGS) $(CFLAGS) -c -o disk/i386/pc/biosdisk_module-biosdisk.obj `if test -f 'disk/i386/pc/biosdisk.c'; then $(CYGPATH_W) 'disk/i386/pc/biosdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/i386/pc/biosdisk.c'; fi` + +video/bitmap_module-bitmap.o: video/bitmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_module_CFLAGS) $(CFLAGS) -MT video/bitmap_module-bitmap.o -MD -MP -MF video/$(DEPDIR)/bitmap_module-bitmap.Tpo -c -o video/bitmap_module-bitmap.o `test -f 'video/bitmap.c' || echo '$(srcdir)/'`video/bitmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/bitmap_module-bitmap.Tpo video/$(DEPDIR)/bitmap_module-bitmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/bitmap.c' object='video/bitmap_module-bitmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_module_CFLAGS) $(CFLAGS) -c -o video/bitmap_module-bitmap.o `test -f 'video/bitmap.c' || echo '$(srcdir)/'`video/bitmap.c + +video/bitmap_module-bitmap.obj: video/bitmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_module_CFLAGS) $(CFLAGS) -MT video/bitmap_module-bitmap.obj -MD -MP -MF video/$(DEPDIR)/bitmap_module-bitmap.Tpo -c -o video/bitmap_module-bitmap.obj `if test -f 'video/bitmap.c'; then $(CYGPATH_W) 'video/bitmap.c'; else $(CYGPATH_W) '$(srcdir)/video/bitmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/bitmap_module-bitmap.Tpo video/$(DEPDIR)/bitmap_module-bitmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/bitmap.c' object='video/bitmap_module-bitmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_module_CFLAGS) $(CFLAGS) -c -o video/bitmap_module-bitmap.obj `if test -f 'video/bitmap.c'; then $(CYGPATH_W) 'video/bitmap.c'; else $(CYGPATH_W) '$(srcdir)/video/bitmap.c'; fi` + +video/bitmap_scale_module-bitmap_scale.o: video/bitmap_scale.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_scale_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_scale_module_CFLAGS) $(CFLAGS) -MT video/bitmap_scale_module-bitmap_scale.o -MD -MP -MF video/$(DEPDIR)/bitmap_scale_module-bitmap_scale.Tpo -c -o video/bitmap_scale_module-bitmap_scale.o `test -f 'video/bitmap_scale.c' || echo '$(srcdir)/'`video/bitmap_scale.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/bitmap_scale_module-bitmap_scale.Tpo video/$(DEPDIR)/bitmap_scale_module-bitmap_scale.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/bitmap_scale.c' object='video/bitmap_scale_module-bitmap_scale.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_scale_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_scale_module_CFLAGS) $(CFLAGS) -c -o video/bitmap_scale_module-bitmap_scale.o `test -f 'video/bitmap_scale.c' || echo '$(srcdir)/'`video/bitmap_scale.c + +video/bitmap_scale_module-bitmap_scale.obj: video/bitmap_scale.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_scale_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_scale_module_CFLAGS) $(CFLAGS) -MT video/bitmap_scale_module-bitmap_scale.obj -MD -MP -MF video/$(DEPDIR)/bitmap_scale_module-bitmap_scale.Tpo -c -o video/bitmap_scale_module-bitmap_scale.obj `if test -f 'video/bitmap_scale.c'; then $(CYGPATH_W) 'video/bitmap_scale.c'; else $(CYGPATH_W) '$(srcdir)/video/bitmap_scale.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/bitmap_scale_module-bitmap_scale.Tpo video/$(DEPDIR)/bitmap_scale_module-bitmap_scale.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/bitmap_scale.c' object='video/bitmap_scale_module-bitmap_scale.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_scale_module_CPPFLAGS) $(CPPFLAGS) $(bitmap_scale_module_CFLAGS) $(CFLAGS) -c -o video/bitmap_scale_module-bitmap_scale.obj `if test -f 'video/bitmap_scale.c'; then $(CYGPATH_W) 'video/bitmap_scale.c'; else $(CYGPATH_W) '$(srcdir)/video/bitmap_scale.c'; fi` + +commands/blocklist_module-blocklist.o: commands/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blocklist_module_CPPFLAGS) $(CPPFLAGS) $(blocklist_module_CFLAGS) $(CFLAGS) -MT commands/blocklist_module-blocklist.o -MD -MP -MF commands/$(DEPDIR)/blocklist_module-blocklist.Tpo -c -o commands/blocklist_module-blocklist.o `test -f 'commands/blocklist.c' || echo '$(srcdir)/'`commands/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/blocklist_module-blocklist.Tpo commands/$(DEPDIR)/blocklist_module-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/blocklist.c' object='commands/blocklist_module-blocklist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blocklist_module_CPPFLAGS) $(CPPFLAGS) $(blocklist_module_CFLAGS) $(CFLAGS) -c -o commands/blocklist_module-blocklist.o `test -f 'commands/blocklist.c' || echo '$(srcdir)/'`commands/blocklist.c + +commands/blocklist_module-blocklist.obj: commands/blocklist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blocklist_module_CPPFLAGS) $(CPPFLAGS) $(blocklist_module_CFLAGS) $(CFLAGS) -MT commands/blocklist_module-blocklist.obj -MD -MP -MF commands/$(DEPDIR)/blocklist_module-blocklist.Tpo -c -o commands/blocklist_module-blocklist.obj `if test -f 'commands/blocklist.c'; then $(CYGPATH_W) 'commands/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/commands/blocklist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/blocklist_module-blocklist.Tpo commands/$(DEPDIR)/blocklist_module-blocklist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/blocklist.c' object='commands/blocklist_module-blocklist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blocklist_module_CPPFLAGS) $(CPPFLAGS) $(blocklist_module_CFLAGS) $(CFLAGS) -c -o commands/blocklist_module-blocklist.obj `if test -f 'commands/blocklist.c'; then $(CYGPATH_W) 'commands/blocklist.c'; else $(CYGPATH_W) '$(srcdir)/commands/blocklist.c'; fi` + +commands/boot_module-boot.o: commands/boot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -MT commands/boot_module-boot.o -MD -MP -MF commands/$(DEPDIR)/boot_module-boot.Tpo -c -o commands/boot_module-boot.o `test -f 'commands/boot.c' || echo '$(srcdir)/'`commands/boot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/boot_module-boot.Tpo commands/$(DEPDIR)/boot_module-boot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/boot.c' object='commands/boot_module-boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -c -o commands/boot_module-boot.o `test -f 'commands/boot.c' || echo '$(srcdir)/'`commands/boot.c + +commands/boot_module-boot.obj: commands/boot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -MT commands/boot_module-boot.obj -MD -MP -MF commands/$(DEPDIR)/boot_module-boot.Tpo -c -o commands/boot_module-boot.obj `if test -f 'commands/boot.c'; then $(CYGPATH_W) 'commands/boot.c'; else $(CYGPATH_W) '$(srcdir)/commands/boot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/boot_module-boot.Tpo commands/$(DEPDIR)/boot_module-boot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/boot.c' object='commands/boot_module-boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -c -o commands/boot_module-boot.obj `if test -f 'commands/boot.c'; then $(CYGPATH_W) 'commands/boot.c'; else $(CYGPATH_W) '$(srcdir)/commands/boot.c'; fi` + +lib/i386/pc/boot_module-biosnum.o: lib/i386/pc/biosnum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -MT lib/i386/pc/boot_module-biosnum.o -MD -MP -MF lib/i386/pc/$(DEPDIR)/boot_module-biosnum.Tpo -c -o lib/i386/pc/boot_module-biosnum.o `test -f 'lib/i386/pc/biosnum.c' || echo '$(srcdir)/'`lib/i386/pc/biosnum.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/pc/$(DEPDIR)/boot_module-biosnum.Tpo lib/i386/pc/$(DEPDIR)/boot_module-biosnum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/pc/biosnum.c' object='lib/i386/pc/boot_module-biosnum.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -c -o lib/i386/pc/boot_module-biosnum.o `test -f 'lib/i386/pc/biosnum.c' || echo '$(srcdir)/'`lib/i386/pc/biosnum.c + +lib/i386/pc/boot_module-biosnum.obj: lib/i386/pc/biosnum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -MT lib/i386/pc/boot_module-biosnum.obj -MD -MP -MF lib/i386/pc/$(DEPDIR)/boot_module-biosnum.Tpo -c -o lib/i386/pc/boot_module-biosnum.obj `if test -f 'lib/i386/pc/biosnum.c'; then $(CYGPATH_W) 'lib/i386/pc/biosnum.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/pc/biosnum.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/pc/$(DEPDIR)/boot_module-biosnum.Tpo lib/i386/pc/$(DEPDIR)/boot_module-biosnum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/pc/biosnum.c' object='lib/i386/pc/boot_module-biosnum.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $(boot_module_CFLAGS) $(CFLAGS) -c -o lib/i386/pc/boot_module-biosnum.obj `if test -f 'lib/i386/pc/biosnum.c'; then $(CYGPATH_W) 'lib/i386/pc/biosnum.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/pc/biosnum.c'; fi` + +commands/boottime_module-boottime.o: commands/boottime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boottime_module_CPPFLAGS) $(CPPFLAGS) $(boottime_module_CFLAGS) $(CFLAGS) -MT commands/boottime_module-boottime.o -MD -MP -MF commands/$(DEPDIR)/boottime_module-boottime.Tpo -c -o commands/boottime_module-boottime.o `test -f 'commands/boottime.c' || echo '$(srcdir)/'`commands/boottime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/boottime_module-boottime.Tpo commands/$(DEPDIR)/boottime_module-boottime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/boottime.c' object='commands/boottime_module-boottime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boottime_module_CPPFLAGS) $(CPPFLAGS) $(boottime_module_CFLAGS) $(CFLAGS) -c -o commands/boottime_module-boottime.o `test -f 'commands/boottime.c' || echo '$(srcdir)/'`commands/boottime.c + +commands/boottime_module-boottime.obj: commands/boottime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boottime_module_CPPFLAGS) $(CPPFLAGS) $(boottime_module_CFLAGS) $(CFLAGS) -MT commands/boottime_module-boottime.obj -MD -MP -MF commands/$(DEPDIR)/boottime_module-boottime.Tpo -c -o commands/boottime_module-boottime.obj `if test -f 'commands/boottime.c'; then $(CYGPATH_W) 'commands/boottime.c'; else $(CYGPATH_W) '$(srcdir)/commands/boottime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/boottime_module-boottime.Tpo commands/$(DEPDIR)/boottime_module-boottime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/boottime.c' object='commands/boottime_module-boottime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boottime_module_CPPFLAGS) $(CPPFLAGS) $(boottime_module_CFLAGS) $(CFLAGS) -c -o commands/boottime_module-boottime.obj `if test -f 'commands/boottime.c'; then $(CYGPATH_W) 'commands/boottime.c'; else $(CYGPATH_W) '$(srcdir)/commands/boottime.c'; fi` + +loader/i386/bsd_module-bsd.o: loader/i386/bsd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -MT loader/i386/bsd_module-bsd.o -MD -MP -MF loader/i386/$(DEPDIR)/bsd_module-bsd.Tpo -c -o loader/i386/bsd_module-bsd.o `test -f 'loader/i386/bsd.c' || echo '$(srcdir)/'`loader/i386/bsd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/bsd_module-bsd.Tpo loader/i386/$(DEPDIR)/bsd_module-bsd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/bsd.c' object='loader/i386/bsd_module-bsd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -c -o loader/i386/bsd_module-bsd.o `test -f 'loader/i386/bsd.c' || echo '$(srcdir)/'`loader/i386/bsd.c + +loader/i386/bsd_module-bsd.obj: loader/i386/bsd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -MT loader/i386/bsd_module-bsd.obj -MD -MP -MF loader/i386/$(DEPDIR)/bsd_module-bsd.Tpo -c -o loader/i386/bsd_module-bsd.obj `if test -f 'loader/i386/bsd.c'; then $(CYGPATH_W) 'loader/i386/bsd.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/bsd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/bsd_module-bsd.Tpo loader/i386/$(DEPDIR)/bsd_module-bsd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/bsd.c' object='loader/i386/bsd_module-bsd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -c -o loader/i386/bsd_module-bsd.obj `if test -f 'loader/i386/bsd.c'; then $(CYGPATH_W) 'loader/i386/bsd.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/bsd.c'; fi` + +loader/i386/bsd_module-bsd32.o: loader/i386/bsd32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -MT loader/i386/bsd_module-bsd32.o -MD -MP -MF loader/i386/$(DEPDIR)/bsd_module-bsd32.Tpo -c -o loader/i386/bsd_module-bsd32.o `test -f 'loader/i386/bsd32.c' || echo '$(srcdir)/'`loader/i386/bsd32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/bsd_module-bsd32.Tpo loader/i386/$(DEPDIR)/bsd_module-bsd32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/bsd32.c' object='loader/i386/bsd_module-bsd32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -c -o loader/i386/bsd_module-bsd32.o `test -f 'loader/i386/bsd32.c' || echo '$(srcdir)/'`loader/i386/bsd32.c + +loader/i386/bsd_module-bsd32.obj: loader/i386/bsd32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -MT loader/i386/bsd_module-bsd32.obj -MD -MP -MF loader/i386/$(DEPDIR)/bsd_module-bsd32.Tpo -c -o loader/i386/bsd_module-bsd32.obj `if test -f 'loader/i386/bsd32.c'; then $(CYGPATH_W) 'loader/i386/bsd32.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/bsd32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/bsd_module-bsd32.Tpo loader/i386/$(DEPDIR)/bsd_module-bsd32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/bsd32.c' object='loader/i386/bsd_module-bsd32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -c -o loader/i386/bsd_module-bsd32.obj `if test -f 'loader/i386/bsd32.c'; then $(CYGPATH_W) 'loader/i386/bsd32.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/bsd32.c'; fi` + +loader/i386/bsd_module-bsd64.o: loader/i386/bsd64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -MT loader/i386/bsd_module-bsd64.o -MD -MP -MF loader/i386/$(DEPDIR)/bsd_module-bsd64.Tpo -c -o loader/i386/bsd_module-bsd64.o `test -f 'loader/i386/bsd64.c' || echo '$(srcdir)/'`loader/i386/bsd64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/bsd_module-bsd64.Tpo loader/i386/$(DEPDIR)/bsd_module-bsd64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/bsd64.c' object='loader/i386/bsd_module-bsd64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -c -o loader/i386/bsd_module-bsd64.o `test -f 'loader/i386/bsd64.c' || echo '$(srcdir)/'`loader/i386/bsd64.c + +loader/i386/bsd_module-bsd64.obj: loader/i386/bsd64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -MT loader/i386/bsd_module-bsd64.obj -MD -MP -MF loader/i386/$(DEPDIR)/bsd_module-bsd64.Tpo -c -o loader/i386/bsd_module-bsd64.obj `if test -f 'loader/i386/bsd64.c'; then $(CYGPATH_W) 'loader/i386/bsd64.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/bsd64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/bsd_module-bsd64.Tpo loader/i386/$(DEPDIR)/bsd_module-bsd64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/bsd64.c' object='loader/i386/bsd_module-bsd64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $(bsd_module_CFLAGS) $(CFLAGS) -c -o loader/i386/bsd_module-bsd64.obj `if test -f 'loader/i386/bsd64.c'; then $(CYGPATH_W) 'loader/i386/bsd64.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/bsd64.c'; fi` + +tests/bswap_test_module-bswap_test.o: tests/bswap_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bswap_test_module_CPPFLAGS) $(CPPFLAGS) $(bswap_test_module_CFLAGS) $(CFLAGS) -MT tests/bswap_test_module-bswap_test.o -MD -MP -MF tests/$(DEPDIR)/bswap_test_module-bswap_test.Tpo -c -o tests/bswap_test_module-bswap_test.o `test -f 'tests/bswap_test.c' || echo '$(srcdir)/'`tests/bswap_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/bswap_test_module-bswap_test.Tpo tests/$(DEPDIR)/bswap_test_module-bswap_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/bswap_test.c' object='tests/bswap_test_module-bswap_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bswap_test_module_CPPFLAGS) $(CPPFLAGS) $(bswap_test_module_CFLAGS) $(CFLAGS) -c -o tests/bswap_test_module-bswap_test.o `test -f 'tests/bswap_test.c' || echo '$(srcdir)/'`tests/bswap_test.c + +tests/bswap_test_module-bswap_test.obj: tests/bswap_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bswap_test_module_CPPFLAGS) $(CPPFLAGS) $(bswap_test_module_CFLAGS) $(CFLAGS) -MT tests/bswap_test_module-bswap_test.obj -MD -MP -MF tests/$(DEPDIR)/bswap_test_module-bswap_test.Tpo -c -o tests/bswap_test_module-bswap_test.obj `if test -f 'tests/bswap_test.c'; then $(CYGPATH_W) 'tests/bswap_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/bswap_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/bswap_test_module-bswap_test.Tpo tests/$(DEPDIR)/bswap_test_module-bswap_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/bswap_test.c' object='tests/bswap_test_module-bswap_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bswap_test_module_CPPFLAGS) $(CPPFLAGS) $(bswap_test_module_CFLAGS) $(CFLAGS) -c -o tests/bswap_test_module-bswap_test.obj `if test -f 'tests/bswap_test.c'; then $(CYGPATH_W) 'tests/bswap_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/bswap_test.c'; fi` + +fs/btrfs_module-btrfs.o: fs/btrfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -MT fs/btrfs_module-btrfs.o -MD -MP -MF fs/$(DEPDIR)/btrfs_module-btrfs.Tpo -c -o fs/btrfs_module-btrfs.o `test -f 'fs/btrfs.c' || echo '$(srcdir)/'`fs/btrfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/btrfs_module-btrfs.Tpo fs/$(DEPDIR)/btrfs_module-btrfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/btrfs.c' object='fs/btrfs_module-btrfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -c -o fs/btrfs_module-btrfs.o `test -f 'fs/btrfs.c' || echo '$(srcdir)/'`fs/btrfs.c + +fs/btrfs_module-btrfs.obj: fs/btrfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -MT fs/btrfs_module-btrfs.obj -MD -MP -MF fs/$(DEPDIR)/btrfs_module-btrfs.Tpo -c -o fs/btrfs_module-btrfs.obj `if test -f 'fs/btrfs.c'; then $(CYGPATH_W) 'fs/btrfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/btrfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/btrfs_module-btrfs.Tpo fs/$(DEPDIR)/btrfs_module-btrfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/btrfs.c' object='fs/btrfs_module-btrfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -c -o fs/btrfs_module-btrfs.obj `if test -f 'fs/btrfs.c'; then $(CYGPATH_W) 'fs/btrfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/btrfs.c'; fi` + +lib/btrfs_module-crc.o: lib/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -MT lib/btrfs_module-crc.o -MD -MP -MF lib/$(DEPDIR)/btrfs_module-crc.Tpo -c -o lib/btrfs_module-crc.o `test -f 'lib/crc.c' || echo '$(srcdir)/'`lib/crc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/btrfs_module-crc.Tpo lib/$(DEPDIR)/btrfs_module-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crc.c' object='lib/btrfs_module-crc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -c -o lib/btrfs_module-crc.o `test -f 'lib/crc.c' || echo '$(srcdir)/'`lib/crc.c + +lib/btrfs_module-crc.obj: lib/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -MT lib/btrfs_module-crc.obj -MD -MP -MF lib/$(DEPDIR)/btrfs_module-crc.Tpo -c -o lib/btrfs_module-crc.obj `if test -f 'lib/crc.c'; then $(CYGPATH_W) 'lib/crc.c'; else $(CYGPATH_W) '$(srcdir)/lib/crc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/btrfs_module-crc.Tpo lib/$(DEPDIR)/btrfs_module-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crc.c' object='lib/btrfs_module-crc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $(btrfs_module_CFLAGS) $(CFLAGS) -c -o lib/btrfs_module-crc.obj `if test -f 'lib/crc.c'; then $(CYGPATH_W) 'lib/crc.c'; else $(CYGPATH_W) '$(srcdir)/lib/crc.c'; fi` + +io/bufio_module-bufio.o: io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $(bufio_module_CFLAGS) $(CFLAGS) -MT io/bufio_module-bufio.o -MD -MP -MF io/$(DEPDIR)/bufio_module-bufio.Tpo -c -o io/bufio_module-bufio.o `test -f 'io/bufio.c' || echo '$(srcdir)/'`io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/bufio_module-bufio.Tpo io/$(DEPDIR)/bufio_module-bufio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/bufio.c' object='io/bufio_module-bufio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $(bufio_module_CFLAGS) $(CFLAGS) -c -o io/bufio_module-bufio.o `test -f 'io/bufio.c' || echo '$(srcdir)/'`io/bufio.c + +io/bufio_module-bufio.obj: io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $(bufio_module_CFLAGS) $(CFLAGS) -MT io/bufio_module-bufio.obj -MD -MP -MF io/$(DEPDIR)/bufio_module-bufio.Tpo -c -o io/bufio_module-bufio.obj `if test -f 'io/bufio.c'; then $(CYGPATH_W) 'io/bufio.c'; else $(CYGPATH_W) '$(srcdir)/io/bufio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/bufio_module-bufio.Tpo io/$(DEPDIR)/bufio_module-bufio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/bufio.c' object='io/bufio_module-bufio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $(bufio_module_CFLAGS) $(CFLAGS) -c -o io/bufio_module-bufio.obj `if test -f 'io/bufio.c'; then $(CYGPATH_W) 'io/bufio.c'; else $(CYGPATH_W) '$(srcdir)/io/bufio.c'; fi` + +commands/cacheinfo_module-cacheinfo.o: commands/cacheinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cacheinfo_module_CPPFLAGS) $(CPPFLAGS) $(cacheinfo_module_CFLAGS) $(CFLAGS) -MT commands/cacheinfo_module-cacheinfo.o -MD -MP -MF commands/$(DEPDIR)/cacheinfo_module-cacheinfo.Tpo -c -o commands/cacheinfo_module-cacheinfo.o `test -f 'commands/cacheinfo.c' || echo '$(srcdir)/'`commands/cacheinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/cacheinfo_module-cacheinfo.Tpo commands/$(DEPDIR)/cacheinfo_module-cacheinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/cacheinfo.c' object='commands/cacheinfo_module-cacheinfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cacheinfo_module_CPPFLAGS) $(CPPFLAGS) $(cacheinfo_module_CFLAGS) $(CFLAGS) -c -o commands/cacheinfo_module-cacheinfo.o `test -f 'commands/cacheinfo.c' || echo '$(srcdir)/'`commands/cacheinfo.c + +commands/cacheinfo_module-cacheinfo.obj: commands/cacheinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cacheinfo_module_CPPFLAGS) $(CPPFLAGS) $(cacheinfo_module_CFLAGS) $(CFLAGS) -MT commands/cacheinfo_module-cacheinfo.obj -MD -MP -MF commands/$(DEPDIR)/cacheinfo_module-cacheinfo.Tpo -c -o commands/cacheinfo_module-cacheinfo.obj `if test -f 'commands/cacheinfo.c'; then $(CYGPATH_W) 'commands/cacheinfo.c'; else $(CYGPATH_W) '$(srcdir)/commands/cacheinfo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/cacheinfo_module-cacheinfo.Tpo commands/$(DEPDIR)/cacheinfo_module-cacheinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/cacheinfo.c' object='commands/cacheinfo_module-cacheinfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cacheinfo_module_CPPFLAGS) $(CPPFLAGS) $(cacheinfo_module_CFLAGS) $(CFLAGS) -c -o commands/cacheinfo_module-cacheinfo.obj `if test -f 'commands/cacheinfo.c'; then $(CYGPATH_W) 'commands/cacheinfo.c'; else $(CYGPATH_W) '$(srcdir)/commands/cacheinfo.c'; fi` + +commands/cat_module-cat.o: commands/cat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cat_module_CPPFLAGS) $(CPPFLAGS) $(cat_module_CFLAGS) $(CFLAGS) -MT commands/cat_module-cat.o -MD -MP -MF commands/$(DEPDIR)/cat_module-cat.Tpo -c -o commands/cat_module-cat.o `test -f 'commands/cat.c' || echo '$(srcdir)/'`commands/cat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/cat_module-cat.Tpo commands/$(DEPDIR)/cat_module-cat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/cat.c' object='commands/cat_module-cat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cat_module_CPPFLAGS) $(CPPFLAGS) $(cat_module_CFLAGS) $(CFLAGS) -c -o commands/cat_module-cat.o `test -f 'commands/cat.c' || echo '$(srcdir)/'`commands/cat.c + +commands/cat_module-cat.obj: commands/cat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cat_module_CPPFLAGS) $(CPPFLAGS) $(cat_module_CFLAGS) $(CFLAGS) -MT commands/cat_module-cat.obj -MD -MP -MF commands/$(DEPDIR)/cat_module-cat.Tpo -c -o commands/cat_module-cat.obj `if test -f 'commands/cat.c'; then $(CYGPATH_W) 'commands/cat.c'; else $(CYGPATH_W) '$(srcdir)/commands/cat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/cat_module-cat.Tpo commands/$(DEPDIR)/cat_module-cat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/cat.c' object='commands/cat_module-cat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cat_module_CPPFLAGS) $(CPPFLAGS) $(cat_module_CFLAGS) $(CFLAGS) -c -o commands/cat_module-cat.obj `if test -f 'commands/cat.c'; then $(CYGPATH_W) 'commands/cat.c'; else $(CYGPATH_W) '$(srcdir)/commands/cat.c'; fi` + +fs/cbfs_module-cbfs.o: fs/cbfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbfs_module_CPPFLAGS) $(CPPFLAGS) $(cbfs_module_CFLAGS) $(CFLAGS) -MT fs/cbfs_module-cbfs.o -MD -MP -MF fs/$(DEPDIR)/cbfs_module-cbfs.Tpo -c -o fs/cbfs_module-cbfs.o `test -f 'fs/cbfs.c' || echo '$(srcdir)/'`fs/cbfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/cbfs_module-cbfs.Tpo fs/$(DEPDIR)/cbfs_module-cbfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/cbfs.c' object='fs/cbfs_module-cbfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbfs_module_CPPFLAGS) $(CPPFLAGS) $(cbfs_module_CFLAGS) $(CFLAGS) -c -o fs/cbfs_module-cbfs.o `test -f 'fs/cbfs.c' || echo '$(srcdir)/'`fs/cbfs.c + +fs/cbfs_module-cbfs.obj: fs/cbfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbfs_module_CPPFLAGS) $(CPPFLAGS) $(cbfs_module_CFLAGS) $(CFLAGS) -MT fs/cbfs_module-cbfs.obj -MD -MP -MF fs/$(DEPDIR)/cbfs_module-cbfs.Tpo -c -o fs/cbfs_module-cbfs.obj `if test -f 'fs/cbfs.c'; then $(CYGPATH_W) 'fs/cbfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/cbfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/cbfs_module-cbfs.Tpo fs/$(DEPDIR)/cbfs_module-cbfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/cbfs.c' object='fs/cbfs_module-cbfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbfs_module_CPPFLAGS) $(CPPFLAGS) $(cbfs_module_CFLAGS) $(CFLAGS) -c -o fs/cbfs_module-cbfs.obj `if test -f 'fs/cbfs.c'; then $(CYGPATH_W) 'fs/cbfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/cbfs.c'; fi` + +commands/i386/coreboot/cbls_module-cbls.o: commands/i386/coreboot/cbls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $(cbls_module_CFLAGS) $(CFLAGS) -MT commands/i386/coreboot/cbls_module-cbls.o -MD -MP -MF commands/i386/coreboot/$(DEPDIR)/cbls_module-cbls.Tpo -c -o commands/i386/coreboot/cbls_module-cbls.o `test -f 'commands/i386/coreboot/cbls.c' || echo '$(srcdir)/'`commands/i386/coreboot/cbls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/coreboot/$(DEPDIR)/cbls_module-cbls.Tpo commands/i386/coreboot/$(DEPDIR)/cbls_module-cbls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/coreboot/cbls.c' object='commands/i386/coreboot/cbls_module-cbls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $(cbls_module_CFLAGS) $(CFLAGS) -c -o commands/i386/coreboot/cbls_module-cbls.o `test -f 'commands/i386/coreboot/cbls.c' || echo '$(srcdir)/'`commands/i386/coreboot/cbls.c + +commands/i386/coreboot/cbls_module-cbls.obj: commands/i386/coreboot/cbls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $(cbls_module_CFLAGS) $(CFLAGS) -MT commands/i386/coreboot/cbls_module-cbls.obj -MD -MP -MF commands/i386/coreboot/$(DEPDIR)/cbls_module-cbls.Tpo -c -o commands/i386/coreboot/cbls_module-cbls.obj `if test -f 'commands/i386/coreboot/cbls.c'; then $(CYGPATH_W) 'commands/i386/coreboot/cbls.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/coreboot/cbls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/coreboot/$(DEPDIR)/cbls_module-cbls.Tpo commands/i386/coreboot/$(DEPDIR)/cbls_module-cbls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/coreboot/cbls.c' object='commands/i386/coreboot/cbls_module-cbls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $(cbls_module_CFLAGS) $(CFLAGS) -c -o commands/i386/coreboot/cbls_module-cbls.obj `if test -f 'commands/i386/coreboot/cbls.c'; then $(CYGPATH_W) 'commands/i386/coreboot/cbls.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/coreboot/cbls.c'; fi` + +term/i386/coreboot/cbmemc_module-cbmemc.o: term/i386/coreboot/cbmemc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $(cbmemc_module_CFLAGS) $(CFLAGS) -MT term/i386/coreboot/cbmemc_module-cbmemc.o -MD -MP -MF term/i386/coreboot/$(DEPDIR)/cbmemc_module-cbmemc.Tpo -c -o term/i386/coreboot/cbmemc_module-cbmemc.o `test -f 'term/i386/coreboot/cbmemc.c' || echo '$(srcdir)/'`term/i386/coreboot/cbmemc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/coreboot/$(DEPDIR)/cbmemc_module-cbmemc.Tpo term/i386/coreboot/$(DEPDIR)/cbmemc_module-cbmemc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/coreboot/cbmemc.c' object='term/i386/coreboot/cbmemc_module-cbmemc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $(cbmemc_module_CFLAGS) $(CFLAGS) -c -o term/i386/coreboot/cbmemc_module-cbmemc.o `test -f 'term/i386/coreboot/cbmemc.c' || echo '$(srcdir)/'`term/i386/coreboot/cbmemc.c + +term/i386/coreboot/cbmemc_module-cbmemc.obj: term/i386/coreboot/cbmemc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $(cbmemc_module_CFLAGS) $(CFLAGS) -MT term/i386/coreboot/cbmemc_module-cbmemc.obj -MD -MP -MF term/i386/coreboot/$(DEPDIR)/cbmemc_module-cbmemc.Tpo -c -o term/i386/coreboot/cbmemc_module-cbmemc.obj `if test -f 'term/i386/coreboot/cbmemc.c'; then $(CYGPATH_W) 'term/i386/coreboot/cbmemc.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/coreboot/cbmemc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/coreboot/$(DEPDIR)/cbmemc_module-cbmemc.Tpo term/i386/coreboot/$(DEPDIR)/cbmemc_module-cbmemc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/coreboot/cbmemc.c' object='term/i386/coreboot/cbmemc_module-cbmemc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $(cbmemc_module_CFLAGS) $(CFLAGS) -c -o term/i386/coreboot/cbmemc_module-cbmemc.obj `if test -f 'term/i386/coreboot/cbmemc.c'; then $(CYGPATH_W) 'term/i386/coreboot/cbmemc.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/coreboot/cbmemc.c'; fi` + +kern/i386/coreboot/cbtable_module-cbtable.o: kern/i386/coreboot/cbtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $(cbtable_module_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/cbtable_module-cbtable.o -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/cbtable_module-cbtable.Tpo -c -o kern/i386/coreboot/cbtable_module-cbtable.o `test -f 'kern/i386/coreboot/cbtable.c' || echo '$(srcdir)/'`kern/i386/coreboot/cbtable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/cbtable_module-cbtable.Tpo kern/i386/coreboot/$(DEPDIR)/cbtable_module-cbtable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/cbtable.c' object='kern/i386/coreboot/cbtable_module-cbtable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $(cbtable_module_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/cbtable_module-cbtable.o `test -f 'kern/i386/coreboot/cbtable.c' || echo '$(srcdir)/'`kern/i386/coreboot/cbtable.c + +kern/i386/coreboot/cbtable_module-cbtable.obj: kern/i386/coreboot/cbtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $(cbtable_module_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/cbtable_module-cbtable.obj -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/cbtable_module-cbtable.Tpo -c -o kern/i386/coreboot/cbtable_module-cbtable.obj `if test -f 'kern/i386/coreboot/cbtable.c'; then $(CYGPATH_W) 'kern/i386/coreboot/cbtable.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/cbtable.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/cbtable_module-cbtable.Tpo kern/i386/coreboot/$(DEPDIR)/cbtable_module-cbtable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/cbtable.c' object='kern/i386/coreboot/cbtable_module-cbtable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $(cbtable_module_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/cbtable_module-cbtable.obj `if test -f 'kern/i386/coreboot/cbtable.c'; then $(CYGPATH_W) 'kern/i386/coreboot/cbtable.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/cbtable.c'; fi` + +commands/i386/coreboot/cbtime_module-cb_timestamps.o: commands/i386/coreboot/cb_timestamps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $(cbtime_module_CFLAGS) $(CFLAGS) -MT commands/i386/coreboot/cbtime_module-cb_timestamps.o -MD -MP -MF commands/i386/coreboot/$(DEPDIR)/cbtime_module-cb_timestamps.Tpo -c -o commands/i386/coreboot/cbtime_module-cb_timestamps.o `test -f 'commands/i386/coreboot/cb_timestamps.c' || echo '$(srcdir)/'`commands/i386/coreboot/cb_timestamps.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/coreboot/$(DEPDIR)/cbtime_module-cb_timestamps.Tpo commands/i386/coreboot/$(DEPDIR)/cbtime_module-cb_timestamps.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/coreboot/cb_timestamps.c' object='commands/i386/coreboot/cbtime_module-cb_timestamps.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $(cbtime_module_CFLAGS) $(CFLAGS) -c -o commands/i386/coreboot/cbtime_module-cb_timestamps.o `test -f 'commands/i386/coreboot/cb_timestamps.c' || echo '$(srcdir)/'`commands/i386/coreboot/cb_timestamps.c + +commands/i386/coreboot/cbtime_module-cb_timestamps.obj: commands/i386/coreboot/cb_timestamps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $(cbtime_module_CFLAGS) $(CFLAGS) -MT commands/i386/coreboot/cbtime_module-cb_timestamps.obj -MD -MP -MF commands/i386/coreboot/$(DEPDIR)/cbtime_module-cb_timestamps.Tpo -c -o commands/i386/coreboot/cbtime_module-cb_timestamps.obj `if test -f 'commands/i386/coreboot/cb_timestamps.c'; then $(CYGPATH_W) 'commands/i386/coreboot/cb_timestamps.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/coreboot/cb_timestamps.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/coreboot/$(DEPDIR)/cbtime_module-cb_timestamps.Tpo commands/i386/coreboot/$(DEPDIR)/cbtime_module-cb_timestamps.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/coreboot/cb_timestamps.c' object='commands/i386/coreboot/cbtime_module-cb_timestamps.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $(cbtime_module_CFLAGS) $(CFLAGS) -c -o commands/i386/coreboot/cbtime_module-cb_timestamps.obj `if test -f 'commands/i386/coreboot/cb_timestamps.c'; then $(CYGPATH_W) 'commands/i386/coreboot/cb_timestamps.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/coreboot/cb_timestamps.c'; fi` + +loader/efi/chain_module-chainloader.o: loader/efi/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT loader/efi/chain_module-chainloader.o -MD -MP -MF loader/efi/$(DEPDIR)/chain_module-chainloader.Tpo -c -o loader/efi/chain_module-chainloader.o `test -f 'loader/efi/chainloader.c' || echo '$(srcdir)/'`loader/efi/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/efi/$(DEPDIR)/chain_module-chainloader.Tpo loader/efi/$(DEPDIR)/chain_module-chainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/efi/chainloader.c' object='loader/efi/chain_module-chainloader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o loader/efi/chain_module-chainloader.o `test -f 'loader/efi/chainloader.c' || echo '$(srcdir)/'`loader/efi/chainloader.c + +loader/efi/chain_module-chainloader.obj: loader/efi/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT loader/efi/chain_module-chainloader.obj -MD -MP -MF loader/efi/$(DEPDIR)/chain_module-chainloader.Tpo -c -o loader/efi/chain_module-chainloader.obj `if test -f 'loader/efi/chainloader.c'; then $(CYGPATH_W) 'loader/efi/chainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/efi/chainloader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/efi/$(DEPDIR)/chain_module-chainloader.Tpo loader/efi/$(DEPDIR)/chain_module-chainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/efi/chainloader.c' object='loader/efi/chain_module-chainloader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o loader/efi/chain_module-chainloader.obj `if test -f 'loader/efi/chainloader.c'; then $(CYGPATH_W) 'loader/efi/chainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/efi/chainloader.c'; fi` + +loader/i386/coreboot/chain_module-chainloader.o: loader/i386/coreboot/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT loader/i386/coreboot/chain_module-chainloader.o -MD -MP -MF loader/i386/coreboot/$(DEPDIR)/chain_module-chainloader.Tpo -c -o loader/i386/coreboot/chain_module-chainloader.o `test -f 'loader/i386/coreboot/chainloader.c' || echo '$(srcdir)/'`loader/i386/coreboot/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/coreboot/$(DEPDIR)/chain_module-chainloader.Tpo loader/i386/coreboot/$(DEPDIR)/chain_module-chainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/coreboot/chainloader.c' object='loader/i386/coreboot/chain_module-chainloader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o loader/i386/coreboot/chain_module-chainloader.o `test -f 'loader/i386/coreboot/chainloader.c' || echo '$(srcdir)/'`loader/i386/coreboot/chainloader.c + +loader/i386/coreboot/chain_module-chainloader.obj: loader/i386/coreboot/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT loader/i386/coreboot/chain_module-chainloader.obj -MD -MP -MF loader/i386/coreboot/$(DEPDIR)/chain_module-chainloader.Tpo -c -o loader/i386/coreboot/chain_module-chainloader.obj `if test -f 'loader/i386/coreboot/chainloader.c'; then $(CYGPATH_W) 'loader/i386/coreboot/chainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/coreboot/chainloader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/coreboot/$(DEPDIR)/chain_module-chainloader.Tpo loader/i386/coreboot/$(DEPDIR)/chain_module-chainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/coreboot/chainloader.c' object='loader/i386/coreboot/chain_module-chainloader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o loader/i386/coreboot/chain_module-chainloader.obj `if test -f 'loader/i386/coreboot/chainloader.c'; then $(CYGPATH_W) 'loader/i386/coreboot/chainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/coreboot/chainloader.c'; fi` + +lib/chain_module-LzmaDec.o: lib/LzmaDec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT lib/chain_module-LzmaDec.o -MD -MP -MF lib/$(DEPDIR)/chain_module-LzmaDec.Tpo -c -o lib/chain_module-LzmaDec.o `test -f 'lib/LzmaDec.c' || echo '$(srcdir)/'`lib/LzmaDec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/chain_module-LzmaDec.Tpo lib/$(DEPDIR)/chain_module-LzmaDec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/LzmaDec.c' object='lib/chain_module-LzmaDec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o lib/chain_module-LzmaDec.o `test -f 'lib/LzmaDec.c' || echo '$(srcdir)/'`lib/LzmaDec.c + +lib/chain_module-LzmaDec.obj: lib/LzmaDec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT lib/chain_module-LzmaDec.obj -MD -MP -MF lib/$(DEPDIR)/chain_module-LzmaDec.Tpo -c -o lib/chain_module-LzmaDec.obj `if test -f 'lib/LzmaDec.c'; then $(CYGPATH_W) 'lib/LzmaDec.c'; else $(CYGPATH_W) '$(srcdir)/lib/LzmaDec.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/chain_module-LzmaDec.Tpo lib/$(DEPDIR)/chain_module-LzmaDec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/LzmaDec.c' object='lib/chain_module-LzmaDec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o lib/chain_module-LzmaDec.obj `if test -f 'lib/LzmaDec.c'; then $(CYGPATH_W) 'lib/LzmaDec.c'; else $(CYGPATH_W) '$(srcdir)/lib/LzmaDec.c'; fi` + +loader/i386/pc/chain_module-chainloader.o: loader/i386/pc/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/chain_module-chainloader.o -MD -MP -MF loader/i386/pc/$(DEPDIR)/chain_module-chainloader.Tpo -c -o loader/i386/pc/chain_module-chainloader.o `test -f 'loader/i386/pc/chainloader.c' || echo '$(srcdir)/'`loader/i386/pc/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/chain_module-chainloader.Tpo loader/i386/pc/$(DEPDIR)/chain_module-chainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/chainloader.c' object='loader/i386/pc/chain_module-chainloader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/chain_module-chainloader.o `test -f 'loader/i386/pc/chainloader.c' || echo '$(srcdir)/'`loader/i386/pc/chainloader.c + +loader/i386/pc/chain_module-chainloader.obj: loader/i386/pc/chainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/chain_module-chainloader.obj -MD -MP -MF loader/i386/pc/$(DEPDIR)/chain_module-chainloader.Tpo -c -o loader/i386/pc/chain_module-chainloader.obj `if test -f 'loader/i386/pc/chainloader.c'; then $(CYGPATH_W) 'loader/i386/pc/chainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/chainloader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/chain_module-chainloader.Tpo loader/i386/pc/$(DEPDIR)/chain_module-chainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/chainloader.c' object='loader/i386/pc/chain_module-chainloader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $(chain_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/chain_module-chainloader.obj `if test -f 'loader/i386/pc/chainloader.c'; then $(CYGPATH_W) 'loader/i386/pc/chainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/chainloader.c'; fi` + +tests/cmdline_cat_test_module-cmdline_cat_test.o: tests/cmdline_cat_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmdline_cat_test_module_CPPFLAGS) $(CPPFLAGS) $(cmdline_cat_test_module_CFLAGS) $(CFLAGS) -MT tests/cmdline_cat_test_module-cmdline_cat_test.o -MD -MP -MF tests/$(DEPDIR)/cmdline_cat_test_module-cmdline_cat_test.Tpo -c -o tests/cmdline_cat_test_module-cmdline_cat_test.o `test -f 'tests/cmdline_cat_test.c' || echo '$(srcdir)/'`tests/cmdline_cat_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/cmdline_cat_test_module-cmdline_cat_test.Tpo tests/$(DEPDIR)/cmdline_cat_test_module-cmdline_cat_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/cmdline_cat_test.c' object='tests/cmdline_cat_test_module-cmdline_cat_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmdline_cat_test_module_CPPFLAGS) $(CPPFLAGS) $(cmdline_cat_test_module_CFLAGS) $(CFLAGS) -c -o tests/cmdline_cat_test_module-cmdline_cat_test.o `test -f 'tests/cmdline_cat_test.c' || echo '$(srcdir)/'`tests/cmdline_cat_test.c + +tests/cmdline_cat_test_module-cmdline_cat_test.obj: tests/cmdline_cat_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmdline_cat_test_module_CPPFLAGS) $(CPPFLAGS) $(cmdline_cat_test_module_CFLAGS) $(CFLAGS) -MT tests/cmdline_cat_test_module-cmdline_cat_test.obj -MD -MP -MF tests/$(DEPDIR)/cmdline_cat_test_module-cmdline_cat_test.Tpo -c -o tests/cmdline_cat_test_module-cmdline_cat_test.obj `if test -f 'tests/cmdline_cat_test.c'; then $(CYGPATH_W) 'tests/cmdline_cat_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/cmdline_cat_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/cmdline_cat_test_module-cmdline_cat_test.Tpo tests/$(DEPDIR)/cmdline_cat_test_module-cmdline_cat_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/cmdline_cat_test.c' object='tests/cmdline_cat_test_module-cmdline_cat_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmdline_cat_test_module_CPPFLAGS) $(CPPFLAGS) $(cmdline_cat_test_module_CFLAGS) $(CFLAGS) -c -o tests/cmdline_cat_test_module-cmdline_cat_test.obj `if test -f 'tests/cmdline_cat_test.c'; then $(CYGPATH_W) 'tests/cmdline_cat_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/cmdline_cat_test.c'; fi` + +commands/i386/cmosdump_module-cmosdump.o: commands/i386/cmosdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $(cmosdump_module_CFLAGS) $(CFLAGS) -MT commands/i386/cmosdump_module-cmosdump.o -MD -MP -MF commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Tpo -c -o commands/i386/cmosdump_module-cmosdump.o `test -f 'commands/i386/cmosdump.c' || echo '$(srcdir)/'`commands/i386/cmosdump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Tpo commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/cmosdump.c' object='commands/i386/cmosdump_module-cmosdump.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $(cmosdump_module_CFLAGS) $(CFLAGS) -c -o commands/i386/cmosdump_module-cmosdump.o `test -f 'commands/i386/cmosdump.c' || echo '$(srcdir)/'`commands/i386/cmosdump.c + +commands/i386/cmosdump_module-cmosdump.obj: commands/i386/cmosdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $(cmosdump_module_CFLAGS) $(CFLAGS) -MT commands/i386/cmosdump_module-cmosdump.obj -MD -MP -MF commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Tpo -c -o commands/i386/cmosdump_module-cmosdump.obj `if test -f 'commands/i386/cmosdump.c'; then $(CYGPATH_W) 'commands/i386/cmosdump.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/cmosdump.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Tpo commands/i386/$(DEPDIR)/cmosdump_module-cmosdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/cmosdump.c' object='commands/i386/cmosdump_module-cmosdump.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $(cmosdump_module_CFLAGS) $(CFLAGS) -c -o commands/i386/cmosdump_module-cmosdump.obj `if test -f 'commands/i386/cmosdump.c'; then $(CYGPATH_W) 'commands/i386/cmosdump.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/cmosdump.c'; fi` + +commands/i386/cmostest_module-cmostest.o: commands/i386/cmostest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $(cmostest_module_CFLAGS) $(CFLAGS) -MT commands/i386/cmostest_module-cmostest.o -MD -MP -MF commands/i386/$(DEPDIR)/cmostest_module-cmostest.Tpo -c -o commands/i386/cmostest_module-cmostest.o `test -f 'commands/i386/cmostest.c' || echo '$(srcdir)/'`commands/i386/cmostest.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/$(DEPDIR)/cmostest_module-cmostest.Tpo commands/i386/$(DEPDIR)/cmostest_module-cmostest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/cmostest.c' object='commands/i386/cmostest_module-cmostest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $(cmostest_module_CFLAGS) $(CFLAGS) -c -o commands/i386/cmostest_module-cmostest.o `test -f 'commands/i386/cmostest.c' || echo '$(srcdir)/'`commands/i386/cmostest.c + +commands/i386/cmostest_module-cmostest.obj: commands/i386/cmostest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $(cmostest_module_CFLAGS) $(CFLAGS) -MT commands/i386/cmostest_module-cmostest.obj -MD -MP -MF commands/i386/$(DEPDIR)/cmostest_module-cmostest.Tpo -c -o commands/i386/cmostest_module-cmostest.obj `if test -f 'commands/i386/cmostest.c'; then $(CYGPATH_W) 'commands/i386/cmostest.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/cmostest.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/$(DEPDIR)/cmostest_module-cmostest.Tpo commands/i386/$(DEPDIR)/cmostest_module-cmostest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/cmostest.c' object='commands/i386/cmostest_module-cmostest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $(cmostest_module_CFLAGS) $(CFLAGS) -c -o commands/i386/cmostest_module-cmostest.obj `if test -f 'commands/i386/cmostest.c'; then $(CYGPATH_W) 'commands/i386/cmostest.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/cmostest.c'; fi` + +commands/cmp_module-cmp.o: commands/cmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_module_CPPFLAGS) $(CPPFLAGS) $(cmp_module_CFLAGS) $(CFLAGS) -MT commands/cmp_module-cmp.o -MD -MP -MF commands/$(DEPDIR)/cmp_module-cmp.Tpo -c -o commands/cmp_module-cmp.o `test -f 'commands/cmp.c' || echo '$(srcdir)/'`commands/cmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/cmp_module-cmp.Tpo commands/$(DEPDIR)/cmp_module-cmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/cmp.c' object='commands/cmp_module-cmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_module_CPPFLAGS) $(CPPFLAGS) $(cmp_module_CFLAGS) $(CFLAGS) -c -o commands/cmp_module-cmp.o `test -f 'commands/cmp.c' || echo '$(srcdir)/'`commands/cmp.c + +commands/cmp_module-cmp.obj: commands/cmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_module_CPPFLAGS) $(CPPFLAGS) $(cmp_module_CFLAGS) $(CFLAGS) -MT commands/cmp_module-cmp.obj -MD -MP -MF commands/$(DEPDIR)/cmp_module-cmp.Tpo -c -o commands/cmp_module-cmp.obj `if test -f 'commands/cmp.c'; then $(CYGPATH_W) 'commands/cmp.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/cmp_module-cmp.Tpo commands/$(DEPDIR)/cmp_module-cmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/cmp.c' object='commands/cmp_module-cmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_module_CPPFLAGS) $(CPPFLAGS) $(cmp_module_CFLAGS) $(CFLAGS) -c -o commands/cmp_module-cmp.obj `if test -f 'commands/cmp.c'; then $(CYGPATH_W) 'commands/cmp.c'; else $(CYGPATH_W) '$(srcdir)/commands/cmp.c'; fi` + +tests/cmp_test_module-cmp_test.o: tests/cmp_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_module_CPPFLAGS) $(CPPFLAGS) $(cmp_test_module_CFLAGS) $(CFLAGS) -MT tests/cmp_test_module-cmp_test.o -MD -MP -MF tests/$(DEPDIR)/cmp_test_module-cmp_test.Tpo -c -o tests/cmp_test_module-cmp_test.o `test -f 'tests/cmp_test.c' || echo '$(srcdir)/'`tests/cmp_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/cmp_test_module-cmp_test.Tpo tests/$(DEPDIR)/cmp_test_module-cmp_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/cmp_test.c' object='tests/cmp_test_module-cmp_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_module_CPPFLAGS) $(CPPFLAGS) $(cmp_test_module_CFLAGS) $(CFLAGS) -c -o tests/cmp_test_module-cmp_test.o `test -f 'tests/cmp_test.c' || echo '$(srcdir)/'`tests/cmp_test.c + +tests/cmp_test_module-cmp_test.obj: tests/cmp_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_module_CPPFLAGS) $(CPPFLAGS) $(cmp_test_module_CFLAGS) $(CFLAGS) -MT tests/cmp_test_module-cmp_test.obj -MD -MP -MF tests/$(DEPDIR)/cmp_test_module-cmp_test.Tpo -c -o tests/cmp_test_module-cmp_test.obj `if test -f 'tests/cmp_test.c'; then $(CYGPATH_W) 'tests/cmp_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/cmp_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/cmp_test_module-cmp_test.Tpo tests/$(DEPDIR)/cmp_test_module-cmp_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/cmp_test.c' object='tests/cmp_test_module-cmp_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_module_CPPFLAGS) $(CPPFLAGS) $(cmp_test_module_CFLAGS) $(CFLAGS) -c -o tests/cmp_test_module-cmp_test.obj `if test -f 'tests/cmp_test.c'; then $(CYGPATH_W) 'tests/cmp_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/cmp_test.c'; fi` + +commands/configfile_module-configfile.o: commands/configfile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(configfile_module_CPPFLAGS) $(CPPFLAGS) $(configfile_module_CFLAGS) $(CFLAGS) -MT commands/configfile_module-configfile.o -MD -MP -MF commands/$(DEPDIR)/configfile_module-configfile.Tpo -c -o commands/configfile_module-configfile.o `test -f 'commands/configfile.c' || echo '$(srcdir)/'`commands/configfile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/configfile_module-configfile.Tpo commands/$(DEPDIR)/configfile_module-configfile.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/configfile.c' object='commands/configfile_module-configfile.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(configfile_module_CPPFLAGS) $(CPPFLAGS) $(configfile_module_CFLAGS) $(CFLAGS) -c -o commands/configfile_module-configfile.o `test -f 'commands/configfile.c' || echo '$(srcdir)/'`commands/configfile.c + +commands/configfile_module-configfile.obj: commands/configfile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(configfile_module_CPPFLAGS) $(CPPFLAGS) $(configfile_module_CFLAGS) $(CFLAGS) -MT commands/configfile_module-configfile.obj -MD -MP -MF commands/$(DEPDIR)/configfile_module-configfile.Tpo -c -o commands/configfile_module-configfile.obj `if test -f 'commands/configfile.c'; then $(CYGPATH_W) 'commands/configfile.c'; else $(CYGPATH_W) '$(srcdir)/commands/configfile.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/configfile_module-configfile.Tpo commands/$(DEPDIR)/configfile_module-configfile.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/configfile.c' object='commands/configfile_module-configfile.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(configfile_module_CPPFLAGS) $(CPPFLAGS) $(configfile_module_CFLAGS) $(CFLAGS) -c -o commands/configfile_module-configfile.obj `if test -f 'commands/configfile.c'; then $(CYGPATH_W) 'commands/configfile.c'; else $(CYGPATH_W) '$(srcdir)/commands/configfile.c'; fi` + +fs/cpio_module-cpio.o: fs/cpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_module_CPPFLAGS) $(CPPFLAGS) $(cpio_module_CFLAGS) $(CFLAGS) -MT fs/cpio_module-cpio.o -MD -MP -MF fs/$(DEPDIR)/cpio_module-cpio.Tpo -c -o fs/cpio_module-cpio.o `test -f 'fs/cpio.c' || echo '$(srcdir)/'`fs/cpio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/cpio_module-cpio.Tpo fs/$(DEPDIR)/cpio_module-cpio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/cpio.c' object='fs/cpio_module-cpio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_module_CPPFLAGS) $(CPPFLAGS) $(cpio_module_CFLAGS) $(CFLAGS) -c -o fs/cpio_module-cpio.o `test -f 'fs/cpio.c' || echo '$(srcdir)/'`fs/cpio.c + +fs/cpio_module-cpio.obj: fs/cpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_module_CPPFLAGS) $(CPPFLAGS) $(cpio_module_CFLAGS) $(CFLAGS) -MT fs/cpio_module-cpio.obj -MD -MP -MF fs/$(DEPDIR)/cpio_module-cpio.Tpo -c -o fs/cpio_module-cpio.obj `if test -f 'fs/cpio.c'; then $(CYGPATH_W) 'fs/cpio.c'; else $(CYGPATH_W) '$(srcdir)/fs/cpio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/cpio_module-cpio.Tpo fs/$(DEPDIR)/cpio_module-cpio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/cpio.c' object='fs/cpio_module-cpio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_module_CPPFLAGS) $(CPPFLAGS) $(cpio_module_CFLAGS) $(CFLAGS) -c -o fs/cpio_module-cpio.obj `if test -f 'fs/cpio.c'; then $(CYGPATH_W) 'fs/cpio.c'; else $(CYGPATH_W) '$(srcdir)/fs/cpio.c'; fi` + +fs/cpio_be_module-cpio_be.o: fs/cpio_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_be_module_CPPFLAGS) $(CPPFLAGS) $(cpio_be_module_CFLAGS) $(CFLAGS) -MT fs/cpio_be_module-cpio_be.o -MD -MP -MF fs/$(DEPDIR)/cpio_be_module-cpio_be.Tpo -c -o fs/cpio_be_module-cpio_be.o `test -f 'fs/cpio_be.c' || echo '$(srcdir)/'`fs/cpio_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/cpio_be_module-cpio_be.Tpo fs/$(DEPDIR)/cpio_be_module-cpio_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/cpio_be.c' object='fs/cpio_be_module-cpio_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_be_module_CPPFLAGS) $(CPPFLAGS) $(cpio_be_module_CFLAGS) $(CFLAGS) -c -o fs/cpio_be_module-cpio_be.o `test -f 'fs/cpio_be.c' || echo '$(srcdir)/'`fs/cpio_be.c + +fs/cpio_be_module-cpio_be.obj: fs/cpio_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_be_module_CPPFLAGS) $(CPPFLAGS) $(cpio_be_module_CFLAGS) $(CFLAGS) -MT fs/cpio_be_module-cpio_be.obj -MD -MP -MF fs/$(DEPDIR)/cpio_be_module-cpio_be.Tpo -c -o fs/cpio_be_module-cpio_be.obj `if test -f 'fs/cpio_be.c'; then $(CYGPATH_W) 'fs/cpio_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/cpio_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/cpio_be_module-cpio_be.Tpo fs/$(DEPDIR)/cpio_be_module-cpio_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/cpio_be.c' object='fs/cpio_be_module-cpio_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_be_module_CPPFLAGS) $(CPPFLAGS) $(cpio_be_module_CFLAGS) $(CFLAGS) -c -o fs/cpio_be_module-cpio_be.obj `if test -f 'fs/cpio_be.c'; then $(CYGPATH_W) 'fs/cpio_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/cpio_be.c'; fi` + +commands/i386/cpuid_module-cpuid.o: commands/i386/cpuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $(cpuid_module_CFLAGS) $(CFLAGS) -MT commands/i386/cpuid_module-cpuid.o -MD -MP -MF commands/i386/$(DEPDIR)/cpuid_module-cpuid.Tpo -c -o commands/i386/cpuid_module-cpuid.o `test -f 'commands/i386/cpuid.c' || echo '$(srcdir)/'`commands/i386/cpuid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/$(DEPDIR)/cpuid_module-cpuid.Tpo commands/i386/$(DEPDIR)/cpuid_module-cpuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/cpuid.c' object='commands/i386/cpuid_module-cpuid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $(cpuid_module_CFLAGS) $(CFLAGS) -c -o commands/i386/cpuid_module-cpuid.o `test -f 'commands/i386/cpuid.c' || echo '$(srcdir)/'`commands/i386/cpuid.c + +commands/i386/cpuid_module-cpuid.obj: commands/i386/cpuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $(cpuid_module_CFLAGS) $(CFLAGS) -MT commands/i386/cpuid_module-cpuid.obj -MD -MP -MF commands/i386/$(DEPDIR)/cpuid_module-cpuid.Tpo -c -o commands/i386/cpuid_module-cpuid.obj `if test -f 'commands/i386/cpuid.c'; then $(CYGPATH_W) 'commands/i386/cpuid.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/cpuid.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/$(DEPDIR)/cpuid_module-cpuid.Tpo commands/i386/$(DEPDIR)/cpuid_module-cpuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/cpuid.c' object='commands/i386/cpuid_module-cpuid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $(cpuid_module_CFLAGS) $(CFLAGS) -c -o commands/i386/cpuid_module-cpuid.obj `if test -f 'commands/i386/cpuid.c'; then $(CYGPATH_W) 'commands/i386/cpuid.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/cpuid.c'; fi` + +lib/crc64_module-crc64.o: lib/crc64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crc64_module_CPPFLAGS) $(CPPFLAGS) $(crc64_module_CFLAGS) $(CFLAGS) -MT lib/crc64_module-crc64.o -MD -MP -MF lib/$(DEPDIR)/crc64_module-crc64.Tpo -c -o lib/crc64_module-crc64.o `test -f 'lib/crc64.c' || echo '$(srcdir)/'`lib/crc64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/crc64_module-crc64.Tpo lib/$(DEPDIR)/crc64_module-crc64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crc64.c' object='lib/crc64_module-crc64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crc64_module_CPPFLAGS) $(CPPFLAGS) $(crc64_module_CFLAGS) $(CFLAGS) -c -o lib/crc64_module-crc64.o `test -f 'lib/crc64.c' || echo '$(srcdir)/'`lib/crc64.c + +lib/crc64_module-crc64.obj: lib/crc64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crc64_module_CPPFLAGS) $(CPPFLAGS) $(crc64_module_CFLAGS) $(CFLAGS) -MT lib/crc64_module-crc64.obj -MD -MP -MF lib/$(DEPDIR)/crc64_module-crc64.Tpo -c -o lib/crc64_module-crc64.obj `if test -f 'lib/crc64.c'; then $(CYGPATH_W) 'lib/crc64.c'; else $(CYGPATH_W) '$(srcdir)/lib/crc64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/crc64_module-crc64.Tpo lib/$(DEPDIR)/crc64_module-crc64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crc64.c' object='lib/crc64_module-crc64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crc64_module_CPPFLAGS) $(CPPFLAGS) $(crc64_module_CFLAGS) $(CFLAGS) -c -o lib/crc64_module-crc64.obj `if test -f 'lib/crc64.c'; then $(CYGPATH_W) 'lib/crc64.c'; else $(CYGPATH_W) '$(srcdir)/lib/crc64.c'; fi` + +lib/crypto_module-crypto.o: lib/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crypto_module_CPPFLAGS) $(CPPFLAGS) $(crypto_module_CFLAGS) $(CFLAGS) -MT lib/crypto_module-crypto.o -MD -MP -MF lib/$(DEPDIR)/crypto_module-crypto.Tpo -c -o lib/crypto_module-crypto.o `test -f 'lib/crypto.c' || echo '$(srcdir)/'`lib/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/crypto_module-crypto.Tpo lib/$(DEPDIR)/crypto_module-crypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto.c' object='lib/crypto_module-crypto.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crypto_module_CPPFLAGS) $(CPPFLAGS) $(crypto_module_CFLAGS) $(CFLAGS) -c -o lib/crypto_module-crypto.o `test -f 'lib/crypto.c' || echo '$(srcdir)/'`lib/crypto.c + +lib/crypto_module-crypto.obj: lib/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crypto_module_CPPFLAGS) $(CPPFLAGS) $(crypto_module_CFLAGS) $(CFLAGS) -MT lib/crypto_module-crypto.obj -MD -MP -MF lib/$(DEPDIR)/crypto_module-crypto.Tpo -c -o lib/crypto_module-crypto.obj `if test -f 'lib/crypto.c'; then $(CYGPATH_W) 'lib/crypto.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/crypto_module-crypto.Tpo lib/$(DEPDIR)/crypto_module-crypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/crypto.c' object='lib/crypto_module-crypto.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crypto_module_CPPFLAGS) $(CPPFLAGS) $(crypto_module_CFLAGS) $(CFLAGS) -c -o lib/crypto_module-crypto.obj `if test -f 'lib/crypto.c'; then $(CYGPATH_W) 'lib/crypto.c'; else $(CYGPATH_W) '$(srcdir)/lib/crypto.c'; fi` + +disk/cryptodisk_module-cryptodisk.o: disk/cryptodisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cryptodisk_module_CPPFLAGS) $(CPPFLAGS) $(cryptodisk_module_CFLAGS) $(CFLAGS) -MT disk/cryptodisk_module-cryptodisk.o -MD -MP -MF disk/$(DEPDIR)/cryptodisk_module-cryptodisk.Tpo -c -o disk/cryptodisk_module-cryptodisk.o `test -f 'disk/cryptodisk.c' || echo '$(srcdir)/'`disk/cryptodisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/cryptodisk_module-cryptodisk.Tpo disk/$(DEPDIR)/cryptodisk_module-cryptodisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/cryptodisk.c' object='disk/cryptodisk_module-cryptodisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cryptodisk_module_CPPFLAGS) $(CPPFLAGS) $(cryptodisk_module_CFLAGS) $(CFLAGS) -c -o disk/cryptodisk_module-cryptodisk.o `test -f 'disk/cryptodisk.c' || echo '$(srcdir)/'`disk/cryptodisk.c + +disk/cryptodisk_module-cryptodisk.obj: disk/cryptodisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cryptodisk_module_CPPFLAGS) $(CPPFLAGS) $(cryptodisk_module_CFLAGS) $(CFLAGS) -MT disk/cryptodisk_module-cryptodisk.obj -MD -MP -MF disk/$(DEPDIR)/cryptodisk_module-cryptodisk.Tpo -c -o disk/cryptodisk_module-cryptodisk.obj `if test -f 'disk/cryptodisk.c'; then $(CYGPATH_W) 'disk/cryptodisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/cryptodisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/cryptodisk_module-cryptodisk.Tpo disk/$(DEPDIR)/cryptodisk_module-cryptodisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/cryptodisk.c' object='disk/cryptodisk_module-cryptodisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cryptodisk_module_CPPFLAGS) $(CPPFLAGS) $(cryptodisk_module_CFLAGS) $(CFLAGS) -c -o disk/cryptodisk_module-cryptodisk.obj `if test -f 'disk/cryptodisk.c'; then $(CYGPATH_W) 'disk/cryptodisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/cryptodisk.c'; fi` + +bus/cs5536_module-cs5536.o: bus/cs5536.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $(cs5536_module_CFLAGS) $(CFLAGS) -MT bus/cs5536_module-cs5536.o -MD -MP -MF bus/$(DEPDIR)/cs5536_module-cs5536.Tpo -c -o bus/cs5536_module-cs5536.o `test -f 'bus/cs5536.c' || echo '$(srcdir)/'`bus/cs5536.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/cs5536_module-cs5536.Tpo bus/$(DEPDIR)/cs5536_module-cs5536.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/cs5536.c' object='bus/cs5536_module-cs5536.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $(cs5536_module_CFLAGS) $(CFLAGS) -c -o bus/cs5536_module-cs5536.o `test -f 'bus/cs5536.c' || echo '$(srcdir)/'`bus/cs5536.c + +bus/cs5536_module-cs5536.obj: bus/cs5536.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $(cs5536_module_CFLAGS) $(CFLAGS) -MT bus/cs5536_module-cs5536.obj -MD -MP -MF bus/$(DEPDIR)/cs5536_module-cs5536.Tpo -c -o bus/cs5536_module-cs5536.obj `if test -f 'bus/cs5536.c'; then $(CYGPATH_W) 'bus/cs5536.c'; else $(CYGPATH_W) '$(srcdir)/bus/cs5536.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/cs5536_module-cs5536.Tpo bus/$(DEPDIR)/cs5536_module-cs5536.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/cs5536.c' object='bus/cs5536_module-cs5536.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $(cs5536_module_CFLAGS) $(CFLAGS) -c -o bus/cs5536_module-cs5536.obj `if test -f 'bus/cs5536.c'; then $(CYGPATH_W) 'bus/cs5536.c'; else $(CYGPATH_W) '$(srcdir)/bus/cs5536.c'; fi` + +tests/ctz_test_module-ctz_test.o: tests/ctz_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ctz_test_module_CPPFLAGS) $(CPPFLAGS) $(ctz_test_module_CFLAGS) $(CFLAGS) -MT tests/ctz_test_module-ctz_test.o -MD -MP -MF tests/$(DEPDIR)/ctz_test_module-ctz_test.Tpo -c -o tests/ctz_test_module-ctz_test.o `test -f 'tests/ctz_test.c' || echo '$(srcdir)/'`tests/ctz_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/ctz_test_module-ctz_test.Tpo tests/$(DEPDIR)/ctz_test_module-ctz_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/ctz_test.c' object='tests/ctz_test_module-ctz_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ctz_test_module_CPPFLAGS) $(CPPFLAGS) $(ctz_test_module_CFLAGS) $(CFLAGS) -c -o tests/ctz_test_module-ctz_test.o `test -f 'tests/ctz_test.c' || echo '$(srcdir)/'`tests/ctz_test.c + +tests/ctz_test_module-ctz_test.obj: tests/ctz_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ctz_test_module_CPPFLAGS) $(CPPFLAGS) $(ctz_test_module_CFLAGS) $(CFLAGS) -MT tests/ctz_test_module-ctz_test.obj -MD -MP -MF tests/$(DEPDIR)/ctz_test_module-ctz_test.Tpo -c -o tests/ctz_test_module-ctz_test.obj `if test -f 'tests/ctz_test.c'; then $(CYGPATH_W) 'tests/ctz_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/ctz_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/ctz_test_module-ctz_test.Tpo tests/$(DEPDIR)/ctz_test_module-ctz_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/ctz_test.c' object='tests/ctz_test_module-ctz_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ctz_test_module_CPPFLAGS) $(CPPFLAGS) $(ctz_test_module_CFLAGS) $(CFLAGS) -c -o tests/ctz_test_module-ctz_test.obj `if test -f 'tests/ctz_test.c'; then $(CYGPATH_W) 'tests/ctz_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/ctz_test.c'; fi` + +commands/date_module-date.o: commands/date.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_module_CPPFLAGS) $(CPPFLAGS) $(date_module_CFLAGS) $(CFLAGS) -MT commands/date_module-date.o -MD -MP -MF commands/$(DEPDIR)/date_module-date.Tpo -c -o commands/date_module-date.o `test -f 'commands/date.c' || echo '$(srcdir)/'`commands/date.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/date_module-date.Tpo commands/$(DEPDIR)/date_module-date.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/date.c' object='commands/date_module-date.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_module_CPPFLAGS) $(CPPFLAGS) $(date_module_CFLAGS) $(CFLAGS) -c -o commands/date_module-date.o `test -f 'commands/date.c' || echo '$(srcdir)/'`commands/date.c + +commands/date_module-date.obj: commands/date.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_module_CPPFLAGS) $(CPPFLAGS) $(date_module_CFLAGS) $(CFLAGS) -MT commands/date_module-date.obj -MD -MP -MF commands/$(DEPDIR)/date_module-date.Tpo -c -o commands/date_module-date.obj `if test -f 'commands/date.c'; then $(CYGPATH_W) 'commands/date.c'; else $(CYGPATH_W) '$(srcdir)/commands/date.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/date_module-date.Tpo commands/$(DEPDIR)/date_module-date.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/date.c' object='commands/date_module-date.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_module_CPPFLAGS) $(CPPFLAGS) $(date_module_CFLAGS) $(CFLAGS) -c -o commands/date_module-date.obj `if test -f 'commands/date.c'; then $(CYGPATH_W) 'commands/date.c'; else $(CYGPATH_W) '$(srcdir)/commands/date.c'; fi` + +hook/datehook_module-datehook.o: hook/datehook.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datehook_module_CPPFLAGS) $(CPPFLAGS) $(datehook_module_CFLAGS) $(CFLAGS) -MT hook/datehook_module-datehook.o -MD -MP -MF hook/$(DEPDIR)/datehook_module-datehook.Tpo -c -o hook/datehook_module-datehook.o `test -f 'hook/datehook.c' || echo '$(srcdir)/'`hook/datehook.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) hook/$(DEPDIR)/datehook_module-datehook.Tpo hook/$(DEPDIR)/datehook_module-datehook.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hook/datehook.c' object='hook/datehook_module-datehook.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datehook_module_CPPFLAGS) $(CPPFLAGS) $(datehook_module_CFLAGS) $(CFLAGS) -c -o hook/datehook_module-datehook.o `test -f 'hook/datehook.c' || echo '$(srcdir)/'`hook/datehook.c + +hook/datehook_module-datehook.obj: hook/datehook.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datehook_module_CPPFLAGS) $(CPPFLAGS) $(datehook_module_CFLAGS) $(CFLAGS) -MT hook/datehook_module-datehook.obj -MD -MP -MF hook/$(DEPDIR)/datehook_module-datehook.Tpo -c -o hook/datehook_module-datehook.obj `if test -f 'hook/datehook.c'; then $(CYGPATH_W) 'hook/datehook.c'; else $(CYGPATH_W) '$(srcdir)/hook/datehook.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) hook/$(DEPDIR)/datehook_module-datehook.Tpo hook/$(DEPDIR)/datehook_module-datehook.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hook/datehook.c' object='hook/datehook_module-datehook.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datehook_module_CPPFLAGS) $(CPPFLAGS) $(datehook_module_CFLAGS) $(CFLAGS) -c -o hook/datehook_module-datehook.obj `if test -f 'hook/datehook.c'; then $(CYGPATH_W) 'hook/datehook.c'; else $(CYGPATH_W) '$(srcdir)/hook/datehook.c'; fi` + +lib/efi/datetime_module-datetime.o: lib/efi/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/efi/datetime_module-datetime.o -MD -MP -MF lib/efi/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/efi/datetime_module-datetime.o `test -f 'lib/efi/datetime.c' || echo '$(srcdir)/'`lib/efi/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/datetime_module-datetime.Tpo lib/efi/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/datetime.c' object='lib/efi/datetime_module-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/efi/datetime_module-datetime.o `test -f 'lib/efi/datetime.c' || echo '$(srcdir)/'`lib/efi/datetime.c + +lib/efi/datetime_module-datetime.obj: lib/efi/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/efi/datetime_module-datetime.obj -MD -MP -MF lib/efi/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/efi/datetime_module-datetime.obj `if test -f 'lib/efi/datetime.c'; then $(CYGPATH_W) 'lib/efi/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/datetime_module-datetime.Tpo lib/efi/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/datetime.c' object='lib/efi/datetime_module-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/efi/datetime_module-datetime.obj `if test -f 'lib/efi/datetime.c'; then $(CYGPATH_W) 'lib/efi/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/datetime.c'; fi` + +lib/uboot/datetime_module-datetime.o: lib/uboot/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/uboot/datetime_module-datetime.o -MD -MP -MF lib/uboot/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/uboot/datetime_module-datetime.o `test -f 'lib/uboot/datetime.c' || echo '$(srcdir)/'`lib/uboot/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/uboot/$(DEPDIR)/datetime_module-datetime.Tpo lib/uboot/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/uboot/datetime.c' object='lib/uboot/datetime_module-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/uboot/datetime_module-datetime.o `test -f 'lib/uboot/datetime.c' || echo '$(srcdir)/'`lib/uboot/datetime.c + +lib/uboot/datetime_module-datetime.obj: lib/uboot/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/uboot/datetime_module-datetime.obj -MD -MP -MF lib/uboot/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/uboot/datetime_module-datetime.obj `if test -f 'lib/uboot/datetime.c'; then $(CYGPATH_W) 'lib/uboot/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/uboot/datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/uboot/$(DEPDIR)/datetime_module-datetime.Tpo lib/uboot/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/uboot/datetime.c' object='lib/uboot/datetime_module-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/uboot/datetime_module-datetime.obj `if test -f 'lib/uboot/datetime.c'; then $(CYGPATH_W) 'lib/uboot/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/uboot/datetime.c'; fi` + +lib/datetime_module-cmos_datetime.o: lib/cmos_datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/datetime_module-cmos_datetime.o -MD -MP -MF lib/$(DEPDIR)/datetime_module-cmos_datetime.Tpo -c -o lib/datetime_module-cmos_datetime.o `test -f 'lib/cmos_datetime.c' || echo '$(srcdir)/'`lib/cmos_datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/datetime_module-cmos_datetime.Tpo lib/$(DEPDIR)/datetime_module-cmos_datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmos_datetime.c' object='lib/datetime_module-cmos_datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/datetime_module-cmos_datetime.o `test -f 'lib/cmos_datetime.c' || echo '$(srcdir)/'`lib/cmos_datetime.c + +lib/datetime_module-cmos_datetime.obj: lib/cmos_datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/datetime_module-cmos_datetime.obj -MD -MP -MF lib/$(DEPDIR)/datetime_module-cmos_datetime.Tpo -c -o lib/datetime_module-cmos_datetime.obj `if test -f 'lib/cmos_datetime.c'; then $(CYGPATH_W) 'lib/cmos_datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmos_datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/datetime_module-cmos_datetime.Tpo lib/$(DEPDIR)/datetime_module-cmos_datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmos_datetime.c' object='lib/datetime_module-cmos_datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/datetime_module-cmos_datetime.obj `if test -f 'lib/cmos_datetime.c'; then $(CYGPATH_W) 'lib/cmos_datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmos_datetime.c'; fi` + +lib/xen/datetime_module-datetime.o: lib/xen/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/xen/datetime_module-datetime.o -MD -MP -MF lib/xen/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/xen/datetime_module-datetime.o `test -f 'lib/xen/datetime.c' || echo '$(srcdir)/'`lib/xen/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/datetime_module-datetime.Tpo lib/xen/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/datetime.c' object='lib/xen/datetime_module-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/xen/datetime_module-datetime.o `test -f 'lib/xen/datetime.c' || echo '$(srcdir)/'`lib/xen/datetime.c + +lib/xen/datetime_module-datetime.obj: lib/xen/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/xen/datetime_module-datetime.obj -MD -MP -MF lib/xen/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/xen/datetime_module-datetime.obj `if test -f 'lib/xen/datetime.c'; then $(CYGPATH_W) 'lib/xen/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/datetime_module-datetime.Tpo lib/xen/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/datetime.c' object='lib/xen/datetime_module-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/xen/datetime_module-datetime.obj `if test -f 'lib/xen/datetime.c'; then $(CYGPATH_W) 'lib/xen/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/datetime.c'; fi` + +lib/arc/datetime_module-datetime.o: lib/arc/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/arc/datetime_module-datetime.o -MD -MP -MF lib/arc/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/arc/datetime_module-datetime.o `test -f 'lib/arc/datetime.c' || echo '$(srcdir)/'`lib/arc/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/arc/$(DEPDIR)/datetime_module-datetime.Tpo lib/arc/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/arc/datetime.c' object='lib/arc/datetime_module-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/arc/datetime_module-datetime.o `test -f 'lib/arc/datetime.c' || echo '$(srcdir)/'`lib/arc/datetime.c + +lib/arc/datetime_module-datetime.obj: lib/arc/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/arc/datetime_module-datetime.obj -MD -MP -MF lib/arc/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/arc/datetime_module-datetime.obj `if test -f 'lib/arc/datetime.c'; then $(CYGPATH_W) 'lib/arc/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/arc/datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/arc/$(DEPDIR)/datetime_module-datetime.Tpo lib/arc/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/arc/datetime.c' object='lib/arc/datetime_module-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/arc/datetime_module-datetime.obj `if test -f 'lib/arc/datetime.c'; then $(CYGPATH_W) 'lib/arc/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/arc/datetime.c'; fi` + +lib/ieee1275/datetime_module-datetime.o: lib/ieee1275/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/datetime_module-datetime.o -MD -MP -MF lib/ieee1275/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/ieee1275/datetime_module-datetime.o `test -f 'lib/ieee1275/datetime.c' || echo '$(srcdir)/'`lib/ieee1275/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/datetime_module-datetime.Tpo lib/ieee1275/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/datetime.c' object='lib/ieee1275/datetime_module-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/datetime_module-datetime.o `test -f 'lib/ieee1275/datetime.c' || echo '$(srcdir)/'`lib/ieee1275/datetime.c + +lib/ieee1275/datetime_module-datetime.obj: lib/ieee1275/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/datetime_module-datetime.obj -MD -MP -MF lib/ieee1275/$(DEPDIR)/datetime_module-datetime.Tpo -c -o lib/ieee1275/datetime_module-datetime.obj `if test -f 'lib/ieee1275/datetime.c'; then $(CYGPATH_W) 'lib/ieee1275/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/datetime_module-datetime.Tpo lib/ieee1275/$(DEPDIR)/datetime_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/datetime.c' object='lib/ieee1275/datetime_module-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/datetime_module-datetime.obj `if test -f 'lib/ieee1275/datetime.c'; then $(CYGPATH_W) 'lib/ieee1275/datetime.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/datetime.c'; fi` + +lib/ieee1275/datetime_module-cmos.o: lib/ieee1275/cmos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/datetime_module-cmos.o -MD -MP -MF lib/ieee1275/$(DEPDIR)/datetime_module-cmos.Tpo -c -o lib/ieee1275/datetime_module-cmos.o `test -f 'lib/ieee1275/cmos.c' || echo '$(srcdir)/'`lib/ieee1275/cmos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/datetime_module-cmos.Tpo lib/ieee1275/$(DEPDIR)/datetime_module-cmos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/cmos.c' object='lib/ieee1275/datetime_module-cmos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/datetime_module-cmos.o `test -f 'lib/ieee1275/cmos.c' || echo '$(srcdir)/'`lib/ieee1275/cmos.c + +lib/ieee1275/datetime_module-cmos.obj: lib/ieee1275/cmos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/datetime_module-cmos.obj -MD -MP -MF lib/ieee1275/$(DEPDIR)/datetime_module-cmos.Tpo -c -o lib/ieee1275/datetime_module-cmos.obj `if test -f 'lib/ieee1275/cmos.c'; then $(CYGPATH_W) 'lib/ieee1275/cmos.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/cmos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/datetime_module-cmos.Tpo lib/ieee1275/$(DEPDIR)/datetime_module-cmos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/cmos.c' object='lib/ieee1275/datetime_module-cmos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $(datetime_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/datetime_module-cmos.obj `if test -f 'lib/ieee1275/cmos.c'; then $(CYGPATH_W) 'lib/ieee1275/cmos.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/cmos.c'; fi` + +lib/disk_module-disk.o: lib/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(disk_module_CPPFLAGS) $(CPPFLAGS) $(disk_module_CFLAGS) $(CFLAGS) -MT lib/disk_module-disk.o -MD -MP -MF lib/$(DEPDIR)/disk_module-disk.Tpo -c -o lib/disk_module-disk.o `test -f 'lib/disk.c' || echo '$(srcdir)/'`lib/disk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/disk_module-disk.Tpo lib/$(DEPDIR)/disk_module-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/disk.c' object='lib/disk_module-disk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(disk_module_CPPFLAGS) $(CPPFLAGS) $(disk_module_CFLAGS) $(CFLAGS) -c -o lib/disk_module-disk.o `test -f 'lib/disk.c' || echo '$(srcdir)/'`lib/disk.c + +lib/disk_module-disk.obj: lib/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(disk_module_CPPFLAGS) $(CPPFLAGS) $(disk_module_CFLAGS) $(CFLAGS) -MT lib/disk_module-disk.obj -MD -MP -MF lib/$(DEPDIR)/disk_module-disk.Tpo -c -o lib/disk_module-disk.obj `if test -f 'lib/disk.c'; then $(CYGPATH_W) 'lib/disk.c'; else $(CYGPATH_W) '$(srcdir)/lib/disk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/disk_module-disk.Tpo lib/$(DEPDIR)/disk_module-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/disk.c' object='lib/disk_module-disk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(disk_module_CPPFLAGS) $(CPPFLAGS) $(disk_module_CFLAGS) $(CFLAGS) -c -o lib/disk_module-disk.obj `if test -f 'lib/disk.c'; then $(CYGPATH_W) 'lib/disk.c'; else $(CYGPATH_W) '$(srcdir)/lib/disk.c'; fi` + +disk/diskfilter_module-diskfilter.o: disk/diskfilter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskfilter_module_CPPFLAGS) $(CPPFLAGS) $(diskfilter_module_CFLAGS) $(CFLAGS) -MT disk/diskfilter_module-diskfilter.o -MD -MP -MF disk/$(DEPDIR)/diskfilter_module-diskfilter.Tpo -c -o disk/diskfilter_module-diskfilter.o `test -f 'disk/diskfilter.c' || echo '$(srcdir)/'`disk/diskfilter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/diskfilter_module-diskfilter.Tpo disk/$(DEPDIR)/diskfilter_module-diskfilter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/diskfilter.c' object='disk/diskfilter_module-diskfilter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskfilter_module_CPPFLAGS) $(CPPFLAGS) $(diskfilter_module_CFLAGS) $(CFLAGS) -c -o disk/diskfilter_module-diskfilter.o `test -f 'disk/diskfilter.c' || echo '$(srcdir)/'`disk/diskfilter.c + +disk/diskfilter_module-diskfilter.obj: disk/diskfilter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskfilter_module_CPPFLAGS) $(CPPFLAGS) $(diskfilter_module_CFLAGS) $(CFLAGS) -MT disk/diskfilter_module-diskfilter.obj -MD -MP -MF disk/$(DEPDIR)/diskfilter_module-diskfilter.Tpo -c -o disk/diskfilter_module-diskfilter.obj `if test -f 'disk/diskfilter.c'; then $(CYGPATH_W) 'disk/diskfilter.c'; else $(CYGPATH_W) '$(srcdir)/disk/diskfilter.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/diskfilter_module-diskfilter.Tpo disk/$(DEPDIR)/diskfilter_module-diskfilter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/diskfilter.c' object='disk/diskfilter_module-diskfilter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskfilter_module_CPPFLAGS) $(CPPFLAGS) $(diskfilter_module_CFLAGS) $(CFLAGS) -c -o disk/diskfilter_module-diskfilter.obj `if test -f 'disk/diskfilter.c'; then $(CYGPATH_W) 'disk/diskfilter.c'; else $(CYGPATH_W) '$(srcdir)/disk/diskfilter.c'; fi` + +lib/div_module-division.o: lib/division.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $(div_module_CFLAGS) $(CFLAGS) -MT lib/div_module-division.o -MD -MP -MF lib/$(DEPDIR)/div_module-division.Tpo -c -o lib/div_module-division.o `test -f 'lib/division.c' || echo '$(srcdir)/'`lib/division.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/div_module-division.Tpo lib/$(DEPDIR)/div_module-division.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/division.c' object='lib/div_module-division.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $(div_module_CFLAGS) $(CFLAGS) -c -o lib/div_module-division.o `test -f 'lib/division.c' || echo '$(srcdir)/'`lib/division.c + +lib/div_module-division.obj: lib/division.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $(div_module_CFLAGS) $(CFLAGS) -MT lib/div_module-division.obj -MD -MP -MF lib/$(DEPDIR)/div_module-division.Tpo -c -o lib/div_module-division.obj `if test -f 'lib/division.c'; then $(CYGPATH_W) 'lib/division.c'; else $(CYGPATH_W) '$(srcdir)/lib/division.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/div_module-division.Tpo lib/$(DEPDIR)/div_module-division.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/division.c' object='lib/div_module-division.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $(div_module_CFLAGS) $(CFLAGS) -c -o lib/div_module-division.obj `if test -f 'lib/division.c'; then $(CYGPATH_W) 'lib/division.c'; else $(CYGPATH_W) '$(srcdir)/lib/division.c'; fi` + +tests/div_test_module-div_test.o: tests/div_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_test_module_CPPFLAGS) $(CPPFLAGS) $(div_test_module_CFLAGS) $(CFLAGS) -MT tests/div_test_module-div_test.o -MD -MP -MF tests/$(DEPDIR)/div_test_module-div_test.Tpo -c -o tests/div_test_module-div_test.o `test -f 'tests/div_test.c' || echo '$(srcdir)/'`tests/div_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/div_test_module-div_test.Tpo tests/$(DEPDIR)/div_test_module-div_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/div_test.c' object='tests/div_test_module-div_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_test_module_CPPFLAGS) $(CPPFLAGS) $(div_test_module_CFLAGS) $(CFLAGS) -c -o tests/div_test_module-div_test.o `test -f 'tests/div_test.c' || echo '$(srcdir)/'`tests/div_test.c + +tests/div_test_module-div_test.obj: tests/div_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_test_module_CPPFLAGS) $(CPPFLAGS) $(div_test_module_CFLAGS) $(CFLAGS) -MT tests/div_test_module-div_test.obj -MD -MP -MF tests/$(DEPDIR)/div_test_module-div_test.Tpo -c -o tests/div_test_module-div_test.obj `if test -f 'tests/div_test.c'; then $(CYGPATH_W) 'tests/div_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/div_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/div_test_module-div_test.Tpo tests/$(DEPDIR)/div_test_module-div_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/div_test.c' object='tests/div_test_module-div_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_test_module_CPPFLAGS) $(CPPFLAGS) $(div_test_module_CFLAGS) $(CFLAGS) -c -o tests/div_test_module-div_test.obj `if test -f 'tests/div_test.c'; then $(CYGPATH_W) 'tests/div_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/div_test.c'; fi` + +disk/dm_nv_module-dmraid_nvidia.o: disk/dmraid_nvidia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dm_nv_module_CPPFLAGS) $(CPPFLAGS) $(dm_nv_module_CFLAGS) $(CFLAGS) -MT disk/dm_nv_module-dmraid_nvidia.o -MD -MP -MF disk/$(DEPDIR)/dm_nv_module-dmraid_nvidia.Tpo -c -o disk/dm_nv_module-dmraid_nvidia.o `test -f 'disk/dmraid_nvidia.c' || echo '$(srcdir)/'`disk/dmraid_nvidia.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/dm_nv_module-dmraid_nvidia.Tpo disk/$(DEPDIR)/dm_nv_module-dmraid_nvidia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/dmraid_nvidia.c' object='disk/dm_nv_module-dmraid_nvidia.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dm_nv_module_CPPFLAGS) $(CPPFLAGS) $(dm_nv_module_CFLAGS) $(CFLAGS) -c -o disk/dm_nv_module-dmraid_nvidia.o `test -f 'disk/dmraid_nvidia.c' || echo '$(srcdir)/'`disk/dmraid_nvidia.c + +disk/dm_nv_module-dmraid_nvidia.obj: disk/dmraid_nvidia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dm_nv_module_CPPFLAGS) $(CPPFLAGS) $(dm_nv_module_CFLAGS) $(CFLAGS) -MT disk/dm_nv_module-dmraid_nvidia.obj -MD -MP -MF disk/$(DEPDIR)/dm_nv_module-dmraid_nvidia.Tpo -c -o disk/dm_nv_module-dmraid_nvidia.obj `if test -f 'disk/dmraid_nvidia.c'; then $(CYGPATH_W) 'disk/dmraid_nvidia.c'; else $(CYGPATH_W) '$(srcdir)/disk/dmraid_nvidia.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/dm_nv_module-dmraid_nvidia.Tpo disk/$(DEPDIR)/dm_nv_module-dmraid_nvidia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/dmraid_nvidia.c' object='disk/dm_nv_module-dmraid_nvidia.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dm_nv_module_CPPFLAGS) $(CPPFLAGS) $(dm_nv_module_CFLAGS) $(CFLAGS) -c -o disk/dm_nv_module-dmraid_nvidia.obj `if test -f 'disk/dmraid_nvidia.c'; then $(CYGPATH_W) 'disk/dmraid_nvidia.c'; else $(CYGPATH_W) '$(srcdir)/disk/dmraid_nvidia.c'; fi` + +commands/i386/pc/drivemap_module-drivemap.o: commands/i386/pc/drivemap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/drivemap_module-drivemap.o -MD -MP -MF commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap.Tpo -c -o commands/i386/pc/drivemap_module-drivemap.o `test -f 'commands/i386/pc/drivemap.c' || echo '$(srcdir)/'`commands/i386/pc/drivemap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap.Tpo commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/drivemap.c' object='commands/i386/pc/drivemap_module-drivemap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/drivemap_module-drivemap.o `test -f 'commands/i386/pc/drivemap.c' || echo '$(srcdir)/'`commands/i386/pc/drivemap.c + +commands/i386/pc/drivemap_module-drivemap.obj: commands/i386/pc/drivemap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/drivemap_module-drivemap.obj -MD -MP -MF commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap.Tpo -c -o commands/i386/pc/drivemap_module-drivemap.obj `if test -f 'commands/i386/pc/drivemap.c'; then $(CYGPATH_W) 'commands/i386/pc/drivemap.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/drivemap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap.Tpo commands/i386/pc/$(DEPDIR)/drivemap_module-drivemap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/drivemap.c' object='commands/i386/pc/drivemap_module-drivemap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $(drivemap_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/drivemap_module-drivemap.obj `if test -f 'commands/i386/pc/drivemap.c'; then $(CYGPATH_W) 'commands/i386/pc/drivemap.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/drivemap.c'; fi` + +commands/echo_module-echo.o: commands/echo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(echo_module_CPPFLAGS) $(CPPFLAGS) $(echo_module_CFLAGS) $(CFLAGS) -MT commands/echo_module-echo.o -MD -MP -MF commands/$(DEPDIR)/echo_module-echo.Tpo -c -o commands/echo_module-echo.o `test -f 'commands/echo.c' || echo '$(srcdir)/'`commands/echo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/echo_module-echo.Tpo commands/$(DEPDIR)/echo_module-echo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/echo.c' object='commands/echo_module-echo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(echo_module_CPPFLAGS) $(CPPFLAGS) $(echo_module_CFLAGS) $(CFLAGS) -c -o commands/echo_module-echo.o `test -f 'commands/echo.c' || echo '$(srcdir)/'`commands/echo.c + +commands/echo_module-echo.obj: commands/echo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(echo_module_CPPFLAGS) $(CPPFLAGS) $(echo_module_CFLAGS) $(CFLAGS) -MT commands/echo_module-echo.obj -MD -MP -MF commands/$(DEPDIR)/echo_module-echo.Tpo -c -o commands/echo_module-echo.obj `if test -f 'commands/echo.c'; then $(CYGPATH_W) 'commands/echo.c'; else $(CYGPATH_W) '$(srcdir)/commands/echo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/echo_module-echo.Tpo commands/$(DEPDIR)/echo_module-echo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/echo.c' object='commands/echo_module-echo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(echo_module_CPPFLAGS) $(CPPFLAGS) $(echo_module_CFLAGS) $(CFLAGS) -c -o commands/echo_module-echo.obj `if test -f 'commands/echo.c'; then $(CYGPATH_W) 'commands/echo.c'; else $(CYGPATH_W) '$(srcdir)/commands/echo.c'; fi` + +video/efi_gop_module-efi_gop.o: video/efi_gop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $(efi_gop_module_CFLAGS) $(CFLAGS) -MT video/efi_gop_module-efi_gop.o -MD -MP -MF video/$(DEPDIR)/efi_gop_module-efi_gop.Tpo -c -o video/efi_gop_module-efi_gop.o `test -f 'video/efi_gop.c' || echo '$(srcdir)/'`video/efi_gop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/efi_gop_module-efi_gop.Tpo video/$(DEPDIR)/efi_gop_module-efi_gop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/efi_gop.c' object='video/efi_gop_module-efi_gop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $(efi_gop_module_CFLAGS) $(CFLAGS) -c -o video/efi_gop_module-efi_gop.o `test -f 'video/efi_gop.c' || echo '$(srcdir)/'`video/efi_gop.c + +video/efi_gop_module-efi_gop.obj: video/efi_gop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $(efi_gop_module_CFLAGS) $(CFLAGS) -MT video/efi_gop_module-efi_gop.obj -MD -MP -MF video/$(DEPDIR)/efi_gop_module-efi_gop.Tpo -c -o video/efi_gop_module-efi_gop.obj `if test -f 'video/efi_gop.c'; then $(CYGPATH_W) 'video/efi_gop.c'; else $(CYGPATH_W) '$(srcdir)/video/efi_gop.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/efi_gop_module-efi_gop.Tpo video/$(DEPDIR)/efi_gop_module-efi_gop.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/efi_gop.c' object='video/efi_gop_module-efi_gop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $(efi_gop_module_CFLAGS) $(CFLAGS) -c -o video/efi_gop_module-efi_gop.obj `if test -f 'video/efi_gop.c'; then $(CYGPATH_W) 'video/efi_gop.c'; else $(CYGPATH_W) '$(srcdir)/video/efi_gop.c'; fi` + +video/efi_uga_module-efi_uga.o: video/efi_uga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $(efi_uga_module_CFLAGS) $(CFLAGS) -MT video/efi_uga_module-efi_uga.o -MD -MP -MF video/$(DEPDIR)/efi_uga_module-efi_uga.Tpo -c -o video/efi_uga_module-efi_uga.o `test -f 'video/efi_uga.c' || echo '$(srcdir)/'`video/efi_uga.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/efi_uga_module-efi_uga.Tpo video/$(DEPDIR)/efi_uga_module-efi_uga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/efi_uga.c' object='video/efi_uga_module-efi_uga.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $(efi_uga_module_CFLAGS) $(CFLAGS) -c -o video/efi_uga_module-efi_uga.o `test -f 'video/efi_uga.c' || echo '$(srcdir)/'`video/efi_uga.c + +video/efi_uga_module-efi_uga.obj: video/efi_uga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $(efi_uga_module_CFLAGS) $(CFLAGS) -MT video/efi_uga_module-efi_uga.obj -MD -MP -MF video/$(DEPDIR)/efi_uga_module-efi_uga.Tpo -c -o video/efi_uga_module-efi_uga.obj `if test -f 'video/efi_uga.c'; then $(CYGPATH_W) 'video/efi_uga.c'; else $(CYGPATH_W) '$(srcdir)/video/efi_uga.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/efi_uga_module-efi_uga.Tpo video/$(DEPDIR)/efi_uga_module-efi_uga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/efi_uga.c' object='video/efi_uga_module-efi_uga.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $(efi_uga_module_CFLAGS) $(CFLAGS) -c -o video/efi_uga_module-efi_uga.obj `if test -f 'video/efi_uga.c'; then $(CYGPATH_W) 'video/efi_uga.c'; else $(CYGPATH_W) '$(srcdir)/video/efi_uga.c'; fi` + +efiemu/i386/pc/efiemu_module-cfgtables.o: efiemu/i386/pc/cfgtables.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/pc/efiemu_module-cfgtables.o -MD -MP -MF efiemu/i386/pc/$(DEPDIR)/efiemu_module-cfgtables.Tpo -c -o efiemu/i386/pc/efiemu_module-cfgtables.o `test -f 'efiemu/i386/pc/cfgtables.c' || echo '$(srcdir)/'`efiemu/i386/pc/cfgtables.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/pc/$(DEPDIR)/efiemu_module-cfgtables.Tpo efiemu/i386/pc/$(DEPDIR)/efiemu_module-cfgtables.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/pc/cfgtables.c' object='efiemu/i386/pc/efiemu_module-cfgtables.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/pc/efiemu_module-cfgtables.o `test -f 'efiemu/i386/pc/cfgtables.c' || echo '$(srcdir)/'`efiemu/i386/pc/cfgtables.c + +efiemu/i386/pc/efiemu_module-cfgtables.obj: efiemu/i386/pc/cfgtables.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/pc/efiemu_module-cfgtables.obj -MD -MP -MF efiemu/i386/pc/$(DEPDIR)/efiemu_module-cfgtables.Tpo -c -o efiemu/i386/pc/efiemu_module-cfgtables.obj `if test -f 'efiemu/i386/pc/cfgtables.c'; then $(CYGPATH_W) 'efiemu/i386/pc/cfgtables.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/pc/cfgtables.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/pc/$(DEPDIR)/efiemu_module-cfgtables.Tpo efiemu/i386/pc/$(DEPDIR)/efiemu_module-cfgtables.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/pc/cfgtables.c' object='efiemu/i386/pc/efiemu_module-cfgtables.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/pc/efiemu_module-cfgtables.obj `if test -f 'efiemu/i386/pc/cfgtables.c'; then $(CYGPATH_W) 'efiemu/i386/pc/cfgtables.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/pc/cfgtables.c'; fi` + +efiemu/efiemu_module-main.o: efiemu/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-main.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-main.Tpo -c -o efiemu/efiemu_module-main.o `test -f 'efiemu/main.c' || echo '$(srcdir)/'`efiemu/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-main.Tpo efiemu/$(DEPDIR)/efiemu_module-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/main.c' object='efiemu/efiemu_module-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-main.o `test -f 'efiemu/main.c' || echo '$(srcdir)/'`efiemu/main.c + +efiemu/efiemu_module-main.obj: efiemu/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-main.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-main.Tpo -c -o efiemu/efiemu_module-main.obj `if test -f 'efiemu/main.c'; then $(CYGPATH_W) 'efiemu/main.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-main.Tpo efiemu/$(DEPDIR)/efiemu_module-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/main.c' object='efiemu/efiemu_module-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-main.obj `if test -f 'efiemu/main.c'; then $(CYGPATH_W) 'efiemu/main.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/main.c'; fi` + +efiemu/i386/efiemu_module-loadcore32.o: efiemu/i386/loadcore32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-loadcore32.o -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-loadcore32.Tpo -c -o efiemu/i386/efiemu_module-loadcore32.o `test -f 'efiemu/i386/loadcore32.c' || echo '$(srcdir)/'`efiemu/i386/loadcore32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-loadcore32.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-loadcore32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/loadcore32.c' object='efiemu/i386/efiemu_module-loadcore32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-loadcore32.o `test -f 'efiemu/i386/loadcore32.c' || echo '$(srcdir)/'`efiemu/i386/loadcore32.c + +efiemu/i386/efiemu_module-loadcore32.obj: efiemu/i386/loadcore32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-loadcore32.obj -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-loadcore32.Tpo -c -o efiemu/i386/efiemu_module-loadcore32.obj `if test -f 'efiemu/i386/loadcore32.c'; then $(CYGPATH_W) 'efiemu/i386/loadcore32.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/loadcore32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-loadcore32.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-loadcore32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/loadcore32.c' object='efiemu/i386/efiemu_module-loadcore32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-loadcore32.obj `if test -f 'efiemu/i386/loadcore32.c'; then $(CYGPATH_W) 'efiemu/i386/loadcore32.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/loadcore32.c'; fi` + +efiemu/i386/efiemu_module-loadcore64.o: efiemu/i386/loadcore64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-loadcore64.o -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-loadcore64.Tpo -c -o efiemu/i386/efiemu_module-loadcore64.o `test -f 'efiemu/i386/loadcore64.c' || echo '$(srcdir)/'`efiemu/i386/loadcore64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-loadcore64.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-loadcore64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/loadcore64.c' object='efiemu/i386/efiemu_module-loadcore64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-loadcore64.o `test -f 'efiemu/i386/loadcore64.c' || echo '$(srcdir)/'`efiemu/i386/loadcore64.c + +efiemu/i386/efiemu_module-loadcore64.obj: efiemu/i386/loadcore64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-loadcore64.obj -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-loadcore64.Tpo -c -o efiemu/i386/efiemu_module-loadcore64.obj `if test -f 'efiemu/i386/loadcore64.c'; then $(CYGPATH_W) 'efiemu/i386/loadcore64.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/loadcore64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-loadcore64.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-loadcore64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/loadcore64.c' object='efiemu/i386/efiemu_module-loadcore64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-loadcore64.obj `if test -f 'efiemu/i386/loadcore64.c'; then $(CYGPATH_W) 'efiemu/i386/loadcore64.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/loadcore64.c'; fi` + +efiemu/efiemu_module-mm.o: efiemu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-mm.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-mm.Tpo -c -o efiemu/efiemu_module-mm.o `test -f 'efiemu/mm.c' || echo '$(srcdir)/'`efiemu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-mm.Tpo efiemu/$(DEPDIR)/efiemu_module-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/mm.c' object='efiemu/efiemu_module-mm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-mm.o `test -f 'efiemu/mm.c' || echo '$(srcdir)/'`efiemu/mm.c + +efiemu/efiemu_module-mm.obj: efiemu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-mm.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-mm.Tpo -c -o efiemu/efiemu_module-mm.obj `if test -f 'efiemu/mm.c'; then $(CYGPATH_W) 'efiemu/mm.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/mm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-mm.Tpo efiemu/$(DEPDIR)/efiemu_module-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/mm.c' object='efiemu/efiemu_module-mm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-mm.obj `if test -f 'efiemu/mm.c'; then $(CYGPATH_W) 'efiemu/mm.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/mm.c'; fi` + +efiemu/efiemu_module-loadcore_common.o: efiemu/loadcore_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-loadcore_common.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-loadcore_common.Tpo -c -o efiemu/efiemu_module-loadcore_common.o `test -f 'efiemu/loadcore_common.c' || echo '$(srcdir)/'`efiemu/loadcore_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-loadcore_common.Tpo efiemu/$(DEPDIR)/efiemu_module-loadcore_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/loadcore_common.c' object='efiemu/efiemu_module-loadcore_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-loadcore_common.o `test -f 'efiemu/loadcore_common.c' || echo '$(srcdir)/'`efiemu/loadcore_common.c + +efiemu/efiemu_module-loadcore_common.obj: efiemu/loadcore_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-loadcore_common.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-loadcore_common.Tpo -c -o efiemu/efiemu_module-loadcore_common.obj `if test -f 'efiemu/loadcore_common.c'; then $(CYGPATH_W) 'efiemu/loadcore_common.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/loadcore_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-loadcore_common.Tpo efiemu/$(DEPDIR)/efiemu_module-loadcore_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/loadcore_common.c' object='efiemu/efiemu_module-loadcore_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-loadcore_common.obj `if test -f 'efiemu/loadcore_common.c'; then $(CYGPATH_W) 'efiemu/loadcore_common.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/loadcore_common.c'; fi` + +efiemu/efiemu_module-symbols.o: efiemu/symbols.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-symbols.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-symbols.Tpo -c -o efiemu/efiemu_module-symbols.o `test -f 'efiemu/symbols.c' || echo '$(srcdir)/'`efiemu/symbols.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-symbols.Tpo efiemu/$(DEPDIR)/efiemu_module-symbols.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/symbols.c' object='efiemu/efiemu_module-symbols.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-symbols.o `test -f 'efiemu/symbols.c' || echo '$(srcdir)/'`efiemu/symbols.c + +efiemu/efiemu_module-symbols.obj: efiemu/symbols.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-symbols.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-symbols.Tpo -c -o efiemu/efiemu_module-symbols.obj `if test -f 'efiemu/symbols.c'; then $(CYGPATH_W) 'efiemu/symbols.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/symbols.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-symbols.Tpo efiemu/$(DEPDIR)/efiemu_module-symbols.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/symbols.c' object='efiemu/efiemu_module-symbols.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-symbols.obj `if test -f 'efiemu/symbols.c'; then $(CYGPATH_W) 'efiemu/symbols.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/symbols.c'; fi` + +efiemu/efiemu_module-loadcore32.o: efiemu/loadcore32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-loadcore32.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-loadcore32.Tpo -c -o efiemu/efiemu_module-loadcore32.o `test -f 'efiemu/loadcore32.c' || echo '$(srcdir)/'`efiemu/loadcore32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-loadcore32.Tpo efiemu/$(DEPDIR)/efiemu_module-loadcore32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/loadcore32.c' object='efiemu/efiemu_module-loadcore32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-loadcore32.o `test -f 'efiemu/loadcore32.c' || echo '$(srcdir)/'`efiemu/loadcore32.c + +efiemu/efiemu_module-loadcore32.obj: efiemu/loadcore32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-loadcore32.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-loadcore32.Tpo -c -o efiemu/efiemu_module-loadcore32.obj `if test -f 'efiemu/loadcore32.c'; then $(CYGPATH_W) 'efiemu/loadcore32.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/loadcore32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-loadcore32.Tpo efiemu/$(DEPDIR)/efiemu_module-loadcore32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/loadcore32.c' object='efiemu/efiemu_module-loadcore32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-loadcore32.obj `if test -f 'efiemu/loadcore32.c'; then $(CYGPATH_W) 'efiemu/loadcore32.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/loadcore32.c'; fi` + +efiemu/efiemu_module-loadcore64.o: efiemu/loadcore64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-loadcore64.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-loadcore64.Tpo -c -o efiemu/efiemu_module-loadcore64.o `test -f 'efiemu/loadcore64.c' || echo '$(srcdir)/'`efiemu/loadcore64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-loadcore64.Tpo efiemu/$(DEPDIR)/efiemu_module-loadcore64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/loadcore64.c' object='efiemu/efiemu_module-loadcore64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-loadcore64.o `test -f 'efiemu/loadcore64.c' || echo '$(srcdir)/'`efiemu/loadcore64.c + +efiemu/efiemu_module-loadcore64.obj: efiemu/loadcore64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-loadcore64.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-loadcore64.Tpo -c -o efiemu/efiemu_module-loadcore64.obj `if test -f 'efiemu/loadcore64.c'; then $(CYGPATH_W) 'efiemu/loadcore64.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/loadcore64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-loadcore64.Tpo efiemu/$(DEPDIR)/efiemu_module-loadcore64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/loadcore64.c' object='efiemu/efiemu_module-loadcore64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-loadcore64.obj `if test -f 'efiemu/loadcore64.c'; then $(CYGPATH_W) 'efiemu/loadcore64.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/loadcore64.c'; fi` + +efiemu/efiemu_module-prepare32.o: efiemu/prepare32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-prepare32.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-prepare32.Tpo -c -o efiemu/efiemu_module-prepare32.o `test -f 'efiemu/prepare32.c' || echo '$(srcdir)/'`efiemu/prepare32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-prepare32.Tpo efiemu/$(DEPDIR)/efiemu_module-prepare32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/prepare32.c' object='efiemu/efiemu_module-prepare32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-prepare32.o `test -f 'efiemu/prepare32.c' || echo '$(srcdir)/'`efiemu/prepare32.c + +efiemu/efiemu_module-prepare32.obj: efiemu/prepare32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-prepare32.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-prepare32.Tpo -c -o efiemu/efiemu_module-prepare32.obj `if test -f 'efiemu/prepare32.c'; then $(CYGPATH_W) 'efiemu/prepare32.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/prepare32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-prepare32.Tpo efiemu/$(DEPDIR)/efiemu_module-prepare32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/prepare32.c' object='efiemu/efiemu_module-prepare32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-prepare32.obj `if test -f 'efiemu/prepare32.c'; then $(CYGPATH_W) 'efiemu/prepare32.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/prepare32.c'; fi` + +efiemu/efiemu_module-prepare64.o: efiemu/prepare64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-prepare64.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-prepare64.Tpo -c -o efiemu/efiemu_module-prepare64.o `test -f 'efiemu/prepare64.c' || echo '$(srcdir)/'`efiemu/prepare64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-prepare64.Tpo efiemu/$(DEPDIR)/efiemu_module-prepare64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/prepare64.c' object='efiemu/efiemu_module-prepare64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-prepare64.o `test -f 'efiemu/prepare64.c' || echo '$(srcdir)/'`efiemu/prepare64.c + +efiemu/efiemu_module-prepare64.obj: efiemu/prepare64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-prepare64.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-prepare64.Tpo -c -o efiemu/efiemu_module-prepare64.obj `if test -f 'efiemu/prepare64.c'; then $(CYGPATH_W) 'efiemu/prepare64.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/prepare64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-prepare64.Tpo efiemu/$(DEPDIR)/efiemu_module-prepare64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/prepare64.c' object='efiemu/efiemu_module-prepare64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-prepare64.obj `if test -f 'efiemu/prepare64.c'; then $(CYGPATH_W) 'efiemu/prepare64.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/prepare64.c'; fi` + +efiemu/efiemu_module-pnvram.o: efiemu/pnvram.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-pnvram.o -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-pnvram.Tpo -c -o efiemu/efiemu_module-pnvram.o `test -f 'efiemu/pnvram.c' || echo '$(srcdir)/'`efiemu/pnvram.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-pnvram.Tpo efiemu/$(DEPDIR)/efiemu_module-pnvram.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/pnvram.c' object='efiemu/efiemu_module-pnvram.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-pnvram.o `test -f 'efiemu/pnvram.c' || echo '$(srcdir)/'`efiemu/pnvram.c + +efiemu/efiemu_module-pnvram.obj: efiemu/pnvram.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/efiemu_module-pnvram.obj -MD -MP -MF efiemu/$(DEPDIR)/efiemu_module-pnvram.Tpo -c -o efiemu/efiemu_module-pnvram.obj `if test -f 'efiemu/pnvram.c'; then $(CYGPATH_W) 'efiemu/pnvram.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/pnvram.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/$(DEPDIR)/efiemu_module-pnvram.Tpo efiemu/$(DEPDIR)/efiemu_module-pnvram.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/pnvram.c' object='efiemu/efiemu_module-pnvram.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/efiemu_module-pnvram.obj `if test -f 'efiemu/pnvram.c'; then $(CYGPATH_W) 'efiemu/pnvram.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/pnvram.c'; fi` + +efiemu/i386/efiemu_module-coredetect.o: efiemu/i386/coredetect.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-coredetect.o -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-coredetect.Tpo -c -o efiemu/i386/efiemu_module-coredetect.o `test -f 'efiemu/i386/coredetect.c' || echo '$(srcdir)/'`efiemu/i386/coredetect.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-coredetect.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-coredetect.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/coredetect.c' object='efiemu/i386/efiemu_module-coredetect.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-coredetect.o `test -f 'efiemu/i386/coredetect.c' || echo '$(srcdir)/'`efiemu/i386/coredetect.c + +efiemu/i386/efiemu_module-coredetect.obj: efiemu/i386/coredetect.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-coredetect.obj -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-coredetect.Tpo -c -o efiemu/i386/efiemu_module-coredetect.obj `if test -f 'efiemu/i386/coredetect.c'; then $(CYGPATH_W) 'efiemu/i386/coredetect.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/coredetect.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-coredetect.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-coredetect.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/coredetect.c' object='efiemu/i386/efiemu_module-coredetect.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-coredetect.obj `if test -f 'efiemu/i386/coredetect.c'; then $(CYGPATH_W) 'efiemu/i386/coredetect.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/coredetect.c'; fi` + +efiemu/i386/efiemu_module-nocfgtables.o: efiemu/i386/nocfgtables.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-nocfgtables.o -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-nocfgtables.Tpo -c -o efiemu/i386/efiemu_module-nocfgtables.o `test -f 'efiemu/i386/nocfgtables.c' || echo '$(srcdir)/'`efiemu/i386/nocfgtables.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-nocfgtables.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-nocfgtables.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/nocfgtables.c' object='efiemu/i386/efiemu_module-nocfgtables.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-nocfgtables.o `test -f 'efiemu/i386/nocfgtables.c' || echo '$(srcdir)/'`efiemu/i386/nocfgtables.c + +efiemu/i386/efiemu_module-nocfgtables.obj: efiemu/i386/nocfgtables.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -MT efiemu/i386/efiemu_module-nocfgtables.obj -MD -MP -MF efiemu/i386/$(DEPDIR)/efiemu_module-nocfgtables.Tpo -c -o efiemu/i386/efiemu_module-nocfgtables.obj `if test -f 'efiemu/i386/nocfgtables.c'; then $(CYGPATH_W) 'efiemu/i386/nocfgtables.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/nocfgtables.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) efiemu/i386/$(DEPDIR)/efiemu_module-nocfgtables.Tpo efiemu/i386/$(DEPDIR)/efiemu_module-nocfgtables.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='efiemu/i386/nocfgtables.c' object='efiemu/i386/efiemu_module-nocfgtables.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $(efiemu_module_CFLAGS) $(CFLAGS) -c -o efiemu/i386/efiemu_module-nocfgtables.obj `if test -f 'efiemu/i386/nocfgtables.c'; then $(CYGPATH_W) 'efiemu/i386/nocfgtables.c'; else $(CYGPATH_W) '$(srcdir)/efiemu/i386/nocfgtables.c'; fi` + +commands/efi/efifwsetup_module-efifwsetup.o: commands/efi/efifwsetup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $(efifwsetup_module_CFLAGS) $(CFLAGS) -MT commands/efi/efifwsetup_module-efifwsetup.o -MD -MP -MF commands/efi/$(DEPDIR)/efifwsetup_module-efifwsetup.Tpo -c -o commands/efi/efifwsetup_module-efifwsetup.o `test -f 'commands/efi/efifwsetup.c' || echo '$(srcdir)/'`commands/efi/efifwsetup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/efifwsetup_module-efifwsetup.Tpo commands/efi/$(DEPDIR)/efifwsetup_module-efifwsetup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/efifwsetup.c' object='commands/efi/efifwsetup_module-efifwsetup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $(efifwsetup_module_CFLAGS) $(CFLAGS) -c -o commands/efi/efifwsetup_module-efifwsetup.o `test -f 'commands/efi/efifwsetup.c' || echo '$(srcdir)/'`commands/efi/efifwsetup.c + +commands/efi/efifwsetup_module-efifwsetup.obj: commands/efi/efifwsetup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $(efifwsetup_module_CFLAGS) $(CFLAGS) -MT commands/efi/efifwsetup_module-efifwsetup.obj -MD -MP -MF commands/efi/$(DEPDIR)/efifwsetup_module-efifwsetup.Tpo -c -o commands/efi/efifwsetup_module-efifwsetup.obj `if test -f 'commands/efi/efifwsetup.c'; then $(CYGPATH_W) 'commands/efi/efifwsetup.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/efifwsetup.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/efifwsetup_module-efifwsetup.Tpo commands/efi/$(DEPDIR)/efifwsetup_module-efifwsetup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/efifwsetup.c' object='commands/efi/efifwsetup_module-efifwsetup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $(efifwsetup_module_CFLAGS) $(CFLAGS) -c -o commands/efi/efifwsetup_module-efifwsetup.obj `if test -f 'commands/efi/efifwsetup.c'; then $(CYGPATH_W) 'commands/efi/efifwsetup.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/efifwsetup.c'; fi` + +net/drivers/efi/efinet_module-efinet.o: net/drivers/efi/efinet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $(efinet_module_CFLAGS) $(CFLAGS) -MT net/drivers/efi/efinet_module-efinet.o -MD -MP -MF net/drivers/efi/$(DEPDIR)/efinet_module-efinet.Tpo -c -o net/drivers/efi/efinet_module-efinet.o `test -f 'net/drivers/efi/efinet.c' || echo '$(srcdir)/'`net/drivers/efi/efinet.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/efi/$(DEPDIR)/efinet_module-efinet.Tpo net/drivers/efi/$(DEPDIR)/efinet_module-efinet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/efi/efinet.c' object='net/drivers/efi/efinet_module-efinet.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $(efinet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/efi/efinet_module-efinet.o `test -f 'net/drivers/efi/efinet.c' || echo '$(srcdir)/'`net/drivers/efi/efinet.c + +net/drivers/efi/efinet_module-efinet.obj: net/drivers/efi/efinet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $(efinet_module_CFLAGS) $(CFLAGS) -MT net/drivers/efi/efinet_module-efinet.obj -MD -MP -MF net/drivers/efi/$(DEPDIR)/efinet_module-efinet.Tpo -c -o net/drivers/efi/efinet_module-efinet.obj `if test -f 'net/drivers/efi/efinet.c'; then $(CYGPATH_W) 'net/drivers/efi/efinet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/efi/efinet.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/efi/$(DEPDIR)/efinet_module-efinet.Tpo net/drivers/efi/$(DEPDIR)/efinet_module-efinet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/efi/efinet.c' object='net/drivers/efi/efinet_module-efinet.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $(efinet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/efi/efinet_module-efinet.obj `if test -f 'net/drivers/efi/efinet.c'; then $(CYGPATH_W) 'net/drivers/efi/efinet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/efi/efinet.c'; fi` + +bus/usb/ehci_module-ehci.o: bus/usb/ehci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $(ehci_module_CFLAGS) $(CFLAGS) -MT bus/usb/ehci_module-ehci.o -MD -MP -MF bus/usb/$(DEPDIR)/ehci_module-ehci.Tpo -c -o bus/usb/ehci_module-ehci.o `test -f 'bus/usb/ehci.c' || echo '$(srcdir)/'`bus/usb/ehci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/ehci_module-ehci.Tpo bus/usb/$(DEPDIR)/ehci_module-ehci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/ehci.c' object='bus/usb/ehci_module-ehci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $(ehci_module_CFLAGS) $(CFLAGS) -c -o bus/usb/ehci_module-ehci.o `test -f 'bus/usb/ehci.c' || echo '$(srcdir)/'`bus/usb/ehci.c + +bus/usb/ehci_module-ehci.obj: bus/usb/ehci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $(ehci_module_CFLAGS) $(CFLAGS) -MT bus/usb/ehci_module-ehci.obj -MD -MP -MF bus/usb/$(DEPDIR)/ehci_module-ehci.Tpo -c -o bus/usb/ehci_module-ehci.obj `if test -f 'bus/usb/ehci.c'; then $(CYGPATH_W) 'bus/usb/ehci.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/ehci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/ehci_module-ehci.Tpo bus/usb/$(DEPDIR)/ehci_module-ehci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/ehci.c' object='bus/usb/ehci_module-ehci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $(ehci_module_CFLAGS) $(CFLAGS) -c -o bus/usb/ehci_module-ehci.obj `if test -f 'bus/usb/ehci.c'; then $(CYGPATH_W) 'bus/usb/ehci.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/ehci.c'; fi` + +kern/elf_module-elf.o: kern/elf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(elf_module_CPPFLAGS) $(CPPFLAGS) $(elf_module_CFLAGS) $(CFLAGS) -MT kern/elf_module-elf.o -MD -MP -MF kern/$(DEPDIR)/elf_module-elf.Tpo -c -o kern/elf_module-elf.o `test -f 'kern/elf.c' || echo '$(srcdir)/'`kern/elf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/elf_module-elf.Tpo kern/$(DEPDIR)/elf_module-elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/elf.c' object='kern/elf_module-elf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(elf_module_CPPFLAGS) $(CPPFLAGS) $(elf_module_CFLAGS) $(CFLAGS) -c -o kern/elf_module-elf.o `test -f 'kern/elf.c' || echo '$(srcdir)/'`kern/elf.c + +kern/elf_module-elf.obj: kern/elf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(elf_module_CPPFLAGS) $(CPPFLAGS) $(elf_module_CFLAGS) $(CFLAGS) -MT kern/elf_module-elf.obj -MD -MP -MF kern/$(DEPDIR)/elf_module-elf.Tpo -c -o kern/elf_module-elf.obj `if test -f 'kern/elf.c'; then $(CYGPATH_W) 'kern/elf.c'; else $(CYGPATH_W) '$(srcdir)/kern/elf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/elf_module-elf.Tpo kern/$(DEPDIR)/elf_module-elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/elf.c' object='kern/elf_module-elf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(elf_module_CPPFLAGS) $(CPPFLAGS) $(elf_module_CFLAGS) $(CFLAGS) -c -o kern/elf_module-elf.obj `if test -f 'kern/elf.c'; then $(CYGPATH_W) 'kern/elf.c'; else $(CYGPATH_W) '$(srcdir)/kern/elf.c'; fi` + +net/drivers/emu/emunet_module-emunet.o: net/drivers/emu/emunet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emunet_module_CPPFLAGS) $(CPPFLAGS) $(emunet_module_CFLAGS) $(CFLAGS) -MT net/drivers/emu/emunet_module-emunet.o -MD -MP -MF net/drivers/emu/$(DEPDIR)/emunet_module-emunet.Tpo -c -o net/drivers/emu/emunet_module-emunet.o `test -f 'net/drivers/emu/emunet.c' || echo '$(srcdir)/'`net/drivers/emu/emunet.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/emu/$(DEPDIR)/emunet_module-emunet.Tpo net/drivers/emu/$(DEPDIR)/emunet_module-emunet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/emu/emunet.c' object='net/drivers/emu/emunet_module-emunet.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emunet_module_CPPFLAGS) $(CPPFLAGS) $(emunet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/emu/emunet_module-emunet.o `test -f 'net/drivers/emu/emunet.c' || echo '$(srcdir)/'`net/drivers/emu/emunet.c + +net/drivers/emu/emunet_module-emunet.obj: net/drivers/emu/emunet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emunet_module_CPPFLAGS) $(CPPFLAGS) $(emunet_module_CFLAGS) $(CFLAGS) -MT net/drivers/emu/emunet_module-emunet.obj -MD -MP -MF net/drivers/emu/$(DEPDIR)/emunet_module-emunet.Tpo -c -o net/drivers/emu/emunet_module-emunet.obj `if test -f 'net/drivers/emu/emunet.c'; then $(CYGPATH_W) 'net/drivers/emu/emunet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/emu/emunet.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/emu/$(DEPDIR)/emunet_module-emunet.Tpo net/drivers/emu/$(DEPDIR)/emunet_module-emunet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/emu/emunet.c' object='net/drivers/emu/emunet_module-emunet.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emunet_module_CPPFLAGS) $(CPPFLAGS) $(emunet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/emu/emunet_module-emunet.obj `if test -f 'net/drivers/emu/emunet.c'; then $(CYGPATH_W) 'net/drivers/emu/emunet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/emu/emunet.c'; fi` + +bus/emu/emupci_module-pci.o: bus/emu/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -MT bus/emu/emupci_module-pci.o -MD -MP -MF bus/emu/$(DEPDIR)/emupci_module-pci.Tpo -c -o bus/emu/emupci_module-pci.o `test -f 'bus/emu/pci.c' || echo '$(srcdir)/'`bus/emu/pci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/emu/$(DEPDIR)/emupci_module-pci.Tpo bus/emu/$(DEPDIR)/emupci_module-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/emu/pci.c' object='bus/emu/emupci_module-pci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -c -o bus/emu/emupci_module-pci.o `test -f 'bus/emu/pci.c' || echo '$(srcdir)/'`bus/emu/pci.c + +bus/emu/emupci_module-pci.obj: bus/emu/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -MT bus/emu/emupci_module-pci.obj -MD -MP -MF bus/emu/$(DEPDIR)/emupci_module-pci.Tpo -c -o bus/emu/emupci_module-pci.obj `if test -f 'bus/emu/pci.c'; then $(CYGPATH_W) 'bus/emu/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/emu/pci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/emu/$(DEPDIR)/emupci_module-pci.Tpo bus/emu/$(DEPDIR)/emupci_module-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/emu/pci.c' object='bus/emu/emupci_module-pci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -c -o bus/emu/emupci_module-pci.obj `if test -f 'bus/emu/pci.c'; then $(CYGPATH_W) 'bus/emu/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/emu/pci.c'; fi` + +commands/emupci_module-lspci.o: commands/lspci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -MT commands/emupci_module-lspci.o -MD -MP -MF commands/$(DEPDIR)/emupci_module-lspci.Tpo -c -o commands/emupci_module-lspci.o `test -f 'commands/lspci.c' || echo '$(srcdir)/'`commands/lspci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/emupci_module-lspci.Tpo commands/$(DEPDIR)/emupci_module-lspci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lspci.c' object='commands/emupci_module-lspci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -c -o commands/emupci_module-lspci.o `test -f 'commands/lspci.c' || echo '$(srcdir)/'`commands/lspci.c + +commands/emupci_module-lspci.obj: commands/lspci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -MT commands/emupci_module-lspci.obj -MD -MP -MF commands/$(DEPDIR)/emupci_module-lspci.Tpo -c -o commands/emupci_module-lspci.obj `if test -f 'commands/lspci.c'; then $(CYGPATH_W) 'commands/lspci.c'; else $(CYGPATH_W) '$(srcdir)/commands/lspci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/emupci_module-lspci.Tpo commands/$(DEPDIR)/emupci_module-lspci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lspci.c' object='commands/emupci_module-lspci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $(emupci_module_CFLAGS) $(CFLAGS) -c -o commands/emupci_module-lspci.obj `if test -f 'commands/lspci.c'; then $(CYGPATH_W) 'commands/lspci.c'; else $(CYGPATH_W) '$(srcdir)/commands/lspci.c'; fi` + +term/ieee1275/escc_module-escc.o: term/ieee1275/escc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(escc_module_CPPFLAGS) $(CPPFLAGS) $(escc_module_CFLAGS) $(CFLAGS) -MT term/ieee1275/escc_module-escc.o -MD -MP -MF term/ieee1275/$(DEPDIR)/escc_module-escc.Tpo -c -o term/ieee1275/escc_module-escc.o `test -f 'term/ieee1275/escc.c' || echo '$(srcdir)/'`term/ieee1275/escc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/ieee1275/$(DEPDIR)/escc_module-escc.Tpo term/ieee1275/$(DEPDIR)/escc_module-escc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ieee1275/escc.c' object='term/ieee1275/escc_module-escc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(escc_module_CPPFLAGS) $(CPPFLAGS) $(escc_module_CFLAGS) $(CFLAGS) -c -o term/ieee1275/escc_module-escc.o `test -f 'term/ieee1275/escc.c' || echo '$(srcdir)/'`term/ieee1275/escc.c + +term/ieee1275/escc_module-escc.obj: term/ieee1275/escc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(escc_module_CPPFLAGS) $(CPPFLAGS) $(escc_module_CFLAGS) $(CFLAGS) -MT term/ieee1275/escc_module-escc.obj -MD -MP -MF term/ieee1275/$(DEPDIR)/escc_module-escc.Tpo -c -o term/ieee1275/escc_module-escc.obj `if test -f 'term/ieee1275/escc.c'; then $(CYGPATH_W) 'term/ieee1275/escc.c'; else $(CYGPATH_W) '$(srcdir)/term/ieee1275/escc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/ieee1275/$(DEPDIR)/escc_module-escc.Tpo term/ieee1275/$(DEPDIR)/escc_module-escc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ieee1275/escc.c' object='term/ieee1275/escc_module-escc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(escc_module_CPPFLAGS) $(CPPFLAGS) $(escc_module_CFLAGS) $(CFLAGS) -c -o term/ieee1275/escc_module-escc.obj `if test -f 'term/ieee1275/escc.c'; then $(CYGPATH_W) 'term/ieee1275/escc.c'; else $(CYGPATH_W) '$(srcdir)/term/ieee1275/escc.c'; fi` + +commands/eval_module-eval.o: commands/eval.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eval_module_CPPFLAGS) $(CPPFLAGS) $(eval_module_CFLAGS) $(CFLAGS) -MT commands/eval_module-eval.o -MD -MP -MF commands/$(DEPDIR)/eval_module-eval.Tpo -c -o commands/eval_module-eval.o `test -f 'commands/eval.c' || echo '$(srcdir)/'`commands/eval.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/eval_module-eval.Tpo commands/$(DEPDIR)/eval_module-eval.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/eval.c' object='commands/eval_module-eval.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eval_module_CPPFLAGS) $(CPPFLAGS) $(eval_module_CFLAGS) $(CFLAGS) -c -o commands/eval_module-eval.o `test -f 'commands/eval.c' || echo '$(srcdir)/'`commands/eval.c + +commands/eval_module-eval.obj: commands/eval.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eval_module_CPPFLAGS) $(CPPFLAGS) $(eval_module_CFLAGS) $(CFLAGS) -MT commands/eval_module-eval.obj -MD -MP -MF commands/$(DEPDIR)/eval_module-eval.Tpo -c -o commands/eval_module-eval.obj `if test -f 'commands/eval.c'; then $(CYGPATH_W) 'commands/eval.c'; else $(CYGPATH_W) '$(srcdir)/commands/eval.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/eval_module-eval.Tpo commands/$(DEPDIR)/eval_module-eval.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/eval.c' object='commands/eval_module-eval.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eval_module_CPPFLAGS) $(CPPFLAGS) $(eval_module_CFLAGS) $(CFLAGS) -c -o commands/eval_module-eval.obj `if test -f 'commands/eval.c'; then $(CYGPATH_W) 'commands/eval.c'; else $(CYGPATH_W) '$(srcdir)/commands/eval.c'; fi` + +fs/exfat_module-exfat.o: fs/exfat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfat_module_CPPFLAGS) $(CPPFLAGS) $(exfat_module_CFLAGS) $(CFLAGS) -MT fs/exfat_module-exfat.o -MD -MP -MF fs/$(DEPDIR)/exfat_module-exfat.Tpo -c -o fs/exfat_module-exfat.o `test -f 'fs/exfat.c' || echo '$(srcdir)/'`fs/exfat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/exfat_module-exfat.Tpo fs/$(DEPDIR)/exfat_module-exfat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/exfat.c' object='fs/exfat_module-exfat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfat_module_CPPFLAGS) $(CPPFLAGS) $(exfat_module_CFLAGS) $(CFLAGS) -c -o fs/exfat_module-exfat.o `test -f 'fs/exfat.c' || echo '$(srcdir)/'`fs/exfat.c + +fs/exfat_module-exfat.obj: fs/exfat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfat_module_CPPFLAGS) $(CPPFLAGS) $(exfat_module_CFLAGS) $(CFLAGS) -MT fs/exfat_module-exfat.obj -MD -MP -MF fs/$(DEPDIR)/exfat_module-exfat.Tpo -c -o fs/exfat_module-exfat.obj `if test -f 'fs/exfat.c'; then $(CYGPATH_W) 'fs/exfat.c'; else $(CYGPATH_W) '$(srcdir)/fs/exfat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/exfat_module-exfat.Tpo fs/$(DEPDIR)/exfat_module-exfat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/exfat.c' object='fs/exfat_module-exfat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfat_module_CPPFLAGS) $(CPPFLAGS) $(exfat_module_CFLAGS) $(CFLAGS) -c -o fs/exfat_module-exfat.obj `if test -f 'fs/exfat.c'; then $(CYGPATH_W) 'fs/exfat.c'; else $(CYGPATH_W) '$(srcdir)/fs/exfat.c'; fi` + +tests/exfctest_module-example_functional_test.o: tests/example_functional_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfctest_module_CPPFLAGS) $(CPPFLAGS) $(exfctest_module_CFLAGS) $(CFLAGS) -MT tests/exfctest_module-example_functional_test.o -MD -MP -MF tests/$(DEPDIR)/exfctest_module-example_functional_test.Tpo -c -o tests/exfctest_module-example_functional_test.o `test -f 'tests/example_functional_test.c' || echo '$(srcdir)/'`tests/example_functional_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/exfctest_module-example_functional_test.Tpo tests/$(DEPDIR)/exfctest_module-example_functional_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/example_functional_test.c' object='tests/exfctest_module-example_functional_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfctest_module_CPPFLAGS) $(CPPFLAGS) $(exfctest_module_CFLAGS) $(CFLAGS) -c -o tests/exfctest_module-example_functional_test.o `test -f 'tests/example_functional_test.c' || echo '$(srcdir)/'`tests/example_functional_test.c + +tests/exfctest_module-example_functional_test.obj: tests/example_functional_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfctest_module_CPPFLAGS) $(CPPFLAGS) $(exfctest_module_CFLAGS) $(CFLAGS) -MT tests/exfctest_module-example_functional_test.obj -MD -MP -MF tests/$(DEPDIR)/exfctest_module-example_functional_test.Tpo -c -o tests/exfctest_module-example_functional_test.obj `if test -f 'tests/example_functional_test.c'; then $(CYGPATH_W) 'tests/example_functional_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/example_functional_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/exfctest_module-example_functional_test.Tpo tests/$(DEPDIR)/exfctest_module-example_functional_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/example_functional_test.c' object='tests/exfctest_module-example_functional_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfctest_module_CPPFLAGS) $(CPPFLAGS) $(exfctest_module_CFLAGS) $(CFLAGS) -c -o tests/exfctest_module-example_functional_test.obj `if test -f 'tests/example_functional_test.c'; then $(CYGPATH_W) 'tests/example_functional_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/example_functional_test.c'; fi` + +fs/ext2_module-ext2.o: fs/ext2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ext2_module_CPPFLAGS) $(CPPFLAGS) $(ext2_module_CFLAGS) $(CFLAGS) -MT fs/ext2_module-ext2.o -MD -MP -MF fs/$(DEPDIR)/ext2_module-ext2.Tpo -c -o fs/ext2_module-ext2.o `test -f 'fs/ext2.c' || echo '$(srcdir)/'`fs/ext2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ext2_module-ext2.Tpo fs/$(DEPDIR)/ext2_module-ext2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ext2.c' object='fs/ext2_module-ext2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ext2_module_CPPFLAGS) $(CPPFLAGS) $(ext2_module_CFLAGS) $(CFLAGS) -c -o fs/ext2_module-ext2.o `test -f 'fs/ext2.c' || echo '$(srcdir)/'`fs/ext2.c + +fs/ext2_module-ext2.obj: fs/ext2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ext2_module_CPPFLAGS) $(CPPFLAGS) $(ext2_module_CFLAGS) $(CFLAGS) -MT fs/ext2_module-ext2.obj -MD -MP -MF fs/$(DEPDIR)/ext2_module-ext2.Tpo -c -o fs/ext2_module-ext2.obj `if test -f 'fs/ext2.c'; then $(CYGPATH_W) 'fs/ext2.c'; else $(CYGPATH_W) '$(srcdir)/fs/ext2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ext2_module-ext2.Tpo fs/$(DEPDIR)/ext2_module-ext2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ext2.c' object='fs/ext2_module-ext2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ext2_module_CPPFLAGS) $(CPPFLAGS) $(ext2_module_CFLAGS) $(CFLAGS) -c -o fs/ext2_module-ext2.obj `if test -f 'fs/ext2.c'; then $(CYGPATH_W) 'fs/ext2.c'; else $(CYGPATH_W) '$(srcdir)/fs/ext2.c'; fi` + +commands/extcmd_module-extcmd.o: commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -MT commands/extcmd_module-extcmd.o -MD -MP -MF commands/$(DEPDIR)/extcmd_module-extcmd.Tpo -c -o commands/extcmd_module-extcmd.o `test -f 'commands/extcmd.c' || echo '$(srcdir)/'`commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/extcmd_module-extcmd.Tpo commands/$(DEPDIR)/extcmd_module-extcmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/extcmd.c' object='commands/extcmd_module-extcmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -c -o commands/extcmd_module-extcmd.o `test -f 'commands/extcmd.c' || echo '$(srcdir)/'`commands/extcmd.c + +commands/extcmd_module-extcmd.obj: commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -MT commands/extcmd_module-extcmd.obj -MD -MP -MF commands/$(DEPDIR)/extcmd_module-extcmd.Tpo -c -o commands/extcmd_module-extcmd.obj `if test -f 'commands/extcmd.c'; then $(CYGPATH_W) 'commands/extcmd.c'; else $(CYGPATH_W) '$(srcdir)/commands/extcmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/extcmd_module-extcmd.Tpo commands/$(DEPDIR)/extcmd_module-extcmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/extcmd.c' object='commands/extcmd_module-extcmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -c -o commands/extcmd_module-extcmd.obj `if test -f 'commands/extcmd.c'; then $(CYGPATH_W) 'commands/extcmd.c'; else $(CYGPATH_W) '$(srcdir)/commands/extcmd.c'; fi` + +lib/extcmd_module-arg.o: lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -MT lib/extcmd_module-arg.o -MD -MP -MF lib/$(DEPDIR)/extcmd_module-arg.Tpo -c -o lib/extcmd_module-arg.o `test -f 'lib/arg.c' || echo '$(srcdir)/'`lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/extcmd_module-arg.Tpo lib/$(DEPDIR)/extcmd_module-arg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/arg.c' object='lib/extcmd_module-arg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -c -o lib/extcmd_module-arg.o `test -f 'lib/arg.c' || echo '$(srcdir)/'`lib/arg.c + +lib/extcmd_module-arg.obj: lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -MT lib/extcmd_module-arg.obj -MD -MP -MF lib/$(DEPDIR)/extcmd_module-arg.Tpo -c -o lib/extcmd_module-arg.obj `if test -f 'lib/arg.c'; then $(CYGPATH_W) 'lib/arg.c'; else $(CYGPATH_W) '$(srcdir)/lib/arg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/extcmd_module-arg.Tpo lib/$(DEPDIR)/extcmd_module-arg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/arg.c' object='lib/extcmd_module-arg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $(extcmd_module_CFLAGS) $(CFLAGS) -c -o lib/extcmd_module-arg.obj `if test -f 'lib/arg.c'; then $(CYGPATH_W) 'lib/arg.c'; else $(CYGPATH_W) '$(srcdir)/lib/arg.c'; fi` + +fs/fat_module-fat.o: fs/fat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fat_module_CPPFLAGS) $(CPPFLAGS) $(fat_module_CFLAGS) $(CFLAGS) -MT fs/fat_module-fat.o -MD -MP -MF fs/$(DEPDIR)/fat_module-fat.Tpo -c -o fs/fat_module-fat.o `test -f 'fs/fat.c' || echo '$(srcdir)/'`fs/fat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/fat_module-fat.Tpo fs/$(DEPDIR)/fat_module-fat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/fat.c' object='fs/fat_module-fat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fat_module_CPPFLAGS) $(CPPFLAGS) $(fat_module_CFLAGS) $(CFLAGS) -c -o fs/fat_module-fat.o `test -f 'fs/fat.c' || echo '$(srcdir)/'`fs/fat.c + +fs/fat_module-fat.obj: fs/fat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fat_module_CPPFLAGS) $(CPPFLAGS) $(fat_module_CFLAGS) $(CFLAGS) -MT fs/fat_module-fat.obj -MD -MP -MF fs/$(DEPDIR)/fat_module-fat.Tpo -c -o fs/fat_module-fat.obj `if test -f 'fs/fat.c'; then $(CYGPATH_W) 'fs/fat.c'; else $(CYGPATH_W) '$(srcdir)/fs/fat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/fat_module-fat.Tpo fs/$(DEPDIR)/fat_module-fat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/fat.c' object='fs/fat_module-fat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fat_module_CPPFLAGS) $(CPPFLAGS) $(fat_module_CFLAGS) $(CFLAGS) -c -o fs/fat_module-fat.obj `if test -f 'fs/fat.c'; then $(CYGPATH_W) 'fs/fat.c'; else $(CYGPATH_W) '$(srcdir)/fs/fat.c'; fi` + +loader/arm64/fdt_module-fdt.o: loader/arm64/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -MT loader/arm64/fdt_module-fdt.o -MD -MP -MF loader/arm64/$(DEPDIR)/fdt_module-fdt.Tpo -c -o loader/arm64/fdt_module-fdt.o `test -f 'loader/arm64/fdt.c' || echo '$(srcdir)/'`loader/arm64/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm64/$(DEPDIR)/fdt_module-fdt.Tpo loader/arm64/$(DEPDIR)/fdt_module-fdt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm64/fdt.c' object='loader/arm64/fdt_module-fdt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -c -o loader/arm64/fdt_module-fdt.o `test -f 'loader/arm64/fdt.c' || echo '$(srcdir)/'`loader/arm64/fdt.c + +loader/arm64/fdt_module-fdt.obj: loader/arm64/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -MT loader/arm64/fdt_module-fdt.obj -MD -MP -MF loader/arm64/$(DEPDIR)/fdt_module-fdt.Tpo -c -o loader/arm64/fdt_module-fdt.obj `if test -f 'loader/arm64/fdt.c'; then $(CYGPATH_W) 'loader/arm64/fdt.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm64/fdt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm64/$(DEPDIR)/fdt_module-fdt.Tpo loader/arm64/$(DEPDIR)/fdt_module-fdt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm64/fdt.c' object='loader/arm64/fdt_module-fdt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -c -o loader/arm64/fdt_module-fdt.obj `if test -f 'loader/arm64/fdt.c'; then $(CYGPATH_W) 'loader/arm64/fdt.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm64/fdt.c'; fi` + +lib/fdt_module-fdt.o: lib/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -MT lib/fdt_module-fdt.o -MD -MP -MF lib/$(DEPDIR)/fdt_module-fdt.Tpo -c -o lib/fdt_module-fdt.o `test -f 'lib/fdt.c' || echo '$(srcdir)/'`lib/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/fdt_module-fdt.Tpo lib/$(DEPDIR)/fdt_module-fdt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/fdt.c' object='lib/fdt_module-fdt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -c -o lib/fdt_module-fdt.o `test -f 'lib/fdt.c' || echo '$(srcdir)/'`lib/fdt.c + +lib/fdt_module-fdt.obj: lib/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -MT lib/fdt_module-fdt.obj -MD -MP -MF lib/$(DEPDIR)/fdt_module-fdt.Tpo -c -o lib/fdt_module-fdt.obj `if test -f 'lib/fdt.c'; then $(CYGPATH_W) 'lib/fdt.c'; else $(CYGPATH_W) '$(srcdir)/lib/fdt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/fdt_module-fdt.Tpo lib/$(DEPDIR)/fdt_module-fdt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/fdt.c' object='lib/fdt_module-fdt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $(fdt_module_CFLAGS) $(CFLAGS) -c -o lib/fdt_module-fdt.obj `if test -f 'lib/fdt.c'; then $(CYGPATH_W) 'lib/fdt.c'; else $(CYGPATH_W) '$(srcdir)/lib/fdt.c'; fi` + +commands/file_module-file.o: commands/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT commands/file_module-file.o -MD -MP -MF commands/$(DEPDIR)/file_module-file.Tpo -c -o commands/file_module-file.o `test -f 'commands/file.c' || echo '$(srcdir)/'`commands/file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/file_module-file.Tpo commands/$(DEPDIR)/file_module-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/file.c' object='commands/file_module-file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o commands/file_module-file.o `test -f 'commands/file.c' || echo '$(srcdir)/'`commands/file.c + +commands/file_module-file.obj: commands/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT commands/file_module-file.obj -MD -MP -MF commands/$(DEPDIR)/file_module-file.Tpo -c -o commands/file_module-file.obj `if test -f 'commands/file.c'; then $(CYGPATH_W) 'commands/file.c'; else $(CYGPATH_W) '$(srcdir)/commands/file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/file_module-file.Tpo commands/$(DEPDIR)/file_module-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/file.c' object='commands/file_module-file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o commands/file_module-file.obj `if test -f 'commands/file.c'; then $(CYGPATH_W) 'commands/file.c'; else $(CYGPATH_W) '$(srcdir)/commands/file.c'; fi` + +commands/file_module-file32.o: commands/file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT commands/file_module-file32.o -MD -MP -MF commands/$(DEPDIR)/file_module-file32.Tpo -c -o commands/file_module-file32.o `test -f 'commands/file32.c' || echo '$(srcdir)/'`commands/file32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/file_module-file32.Tpo commands/$(DEPDIR)/file_module-file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/file32.c' object='commands/file_module-file32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o commands/file_module-file32.o `test -f 'commands/file32.c' || echo '$(srcdir)/'`commands/file32.c + +commands/file_module-file32.obj: commands/file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT commands/file_module-file32.obj -MD -MP -MF commands/$(DEPDIR)/file_module-file32.Tpo -c -o commands/file_module-file32.obj `if test -f 'commands/file32.c'; then $(CYGPATH_W) 'commands/file32.c'; else $(CYGPATH_W) '$(srcdir)/commands/file32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/file_module-file32.Tpo commands/$(DEPDIR)/file_module-file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/file32.c' object='commands/file_module-file32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o commands/file_module-file32.obj `if test -f 'commands/file32.c'; then $(CYGPATH_W) 'commands/file32.c'; else $(CYGPATH_W) '$(srcdir)/commands/file32.c'; fi` + +commands/file_module-file64.o: commands/file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT commands/file_module-file64.o -MD -MP -MF commands/$(DEPDIR)/file_module-file64.Tpo -c -o commands/file_module-file64.o `test -f 'commands/file64.c' || echo '$(srcdir)/'`commands/file64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/file_module-file64.Tpo commands/$(DEPDIR)/file_module-file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/file64.c' object='commands/file_module-file64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o commands/file_module-file64.o `test -f 'commands/file64.c' || echo '$(srcdir)/'`commands/file64.c + +commands/file_module-file64.obj: commands/file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT commands/file_module-file64.obj -MD -MP -MF commands/$(DEPDIR)/file_module-file64.Tpo -c -o commands/file_module-file64.obj `if test -f 'commands/file64.c'; then $(CYGPATH_W) 'commands/file64.c'; else $(CYGPATH_W) '$(srcdir)/commands/file64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/file_module-file64.Tpo commands/$(DEPDIR)/file_module-file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/file64.c' object='commands/file_module-file64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o commands/file_module-file64.obj `if test -f 'commands/file64.c'; then $(CYGPATH_W) 'commands/file64.c'; else $(CYGPATH_W) '$(srcdir)/commands/file64.c'; fi` + +loader/i386/file_module-xen_file.o: loader/i386/xen_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT loader/i386/file_module-xen_file.o -MD -MP -MF loader/i386/$(DEPDIR)/file_module-xen_file.Tpo -c -o loader/i386/file_module-xen_file.o `test -f 'loader/i386/xen_file.c' || echo '$(srcdir)/'`loader/i386/xen_file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/file_module-xen_file.Tpo loader/i386/$(DEPDIR)/file_module-xen_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen_file.c' object='loader/i386/file_module-xen_file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o loader/i386/file_module-xen_file.o `test -f 'loader/i386/xen_file.c' || echo '$(srcdir)/'`loader/i386/xen_file.c + +loader/i386/file_module-xen_file.obj: loader/i386/xen_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT loader/i386/file_module-xen_file.obj -MD -MP -MF loader/i386/$(DEPDIR)/file_module-xen_file.Tpo -c -o loader/i386/file_module-xen_file.obj `if test -f 'loader/i386/xen_file.c'; then $(CYGPATH_W) 'loader/i386/xen_file.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen_file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/file_module-xen_file.Tpo loader/i386/$(DEPDIR)/file_module-xen_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen_file.c' object='loader/i386/file_module-xen_file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o loader/i386/file_module-xen_file.obj `if test -f 'loader/i386/xen_file.c'; then $(CYGPATH_W) 'loader/i386/xen_file.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen_file.c'; fi` + +loader/i386/file_module-xen_file32.o: loader/i386/xen_file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT loader/i386/file_module-xen_file32.o -MD -MP -MF loader/i386/$(DEPDIR)/file_module-xen_file32.Tpo -c -o loader/i386/file_module-xen_file32.o `test -f 'loader/i386/xen_file32.c' || echo '$(srcdir)/'`loader/i386/xen_file32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/file_module-xen_file32.Tpo loader/i386/$(DEPDIR)/file_module-xen_file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen_file32.c' object='loader/i386/file_module-xen_file32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o loader/i386/file_module-xen_file32.o `test -f 'loader/i386/xen_file32.c' || echo '$(srcdir)/'`loader/i386/xen_file32.c + +loader/i386/file_module-xen_file32.obj: loader/i386/xen_file32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT loader/i386/file_module-xen_file32.obj -MD -MP -MF loader/i386/$(DEPDIR)/file_module-xen_file32.Tpo -c -o loader/i386/file_module-xen_file32.obj `if test -f 'loader/i386/xen_file32.c'; then $(CYGPATH_W) 'loader/i386/xen_file32.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen_file32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/file_module-xen_file32.Tpo loader/i386/$(DEPDIR)/file_module-xen_file32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen_file32.c' object='loader/i386/file_module-xen_file32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o loader/i386/file_module-xen_file32.obj `if test -f 'loader/i386/xen_file32.c'; then $(CYGPATH_W) 'loader/i386/xen_file32.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen_file32.c'; fi` + +loader/i386/file_module-xen_file64.o: loader/i386/xen_file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT loader/i386/file_module-xen_file64.o -MD -MP -MF loader/i386/$(DEPDIR)/file_module-xen_file64.Tpo -c -o loader/i386/file_module-xen_file64.o `test -f 'loader/i386/xen_file64.c' || echo '$(srcdir)/'`loader/i386/xen_file64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/file_module-xen_file64.Tpo loader/i386/$(DEPDIR)/file_module-xen_file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen_file64.c' object='loader/i386/file_module-xen_file64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o loader/i386/file_module-xen_file64.o `test -f 'loader/i386/xen_file64.c' || echo '$(srcdir)/'`loader/i386/xen_file64.c + +loader/i386/file_module-xen_file64.obj: loader/i386/xen_file64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -MT loader/i386/file_module-xen_file64.obj -MD -MP -MF loader/i386/$(DEPDIR)/file_module-xen_file64.Tpo -c -o loader/i386/file_module-xen_file64.obj `if test -f 'loader/i386/xen_file64.c'; then $(CYGPATH_W) 'loader/i386/xen_file64.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen_file64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/file_module-xen_file64.Tpo loader/i386/$(DEPDIR)/file_module-xen_file64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen_file64.c' object='loader/i386/file_module-xen_file64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $(file_module_CFLAGS) $(CFLAGS) -c -o loader/i386/file_module-xen_file64.obj `if test -f 'loader/i386/xen_file64.c'; then $(CYGPATH_W) 'loader/i386/xen_file64.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen_file64.c'; fi` + +commands/efi/fixvideo_module-fixvideo.o: commands/efi/fixvideo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $(fixvideo_module_CFLAGS) $(CFLAGS) -MT commands/efi/fixvideo_module-fixvideo.o -MD -MP -MF commands/efi/$(DEPDIR)/fixvideo_module-fixvideo.Tpo -c -o commands/efi/fixvideo_module-fixvideo.o `test -f 'commands/efi/fixvideo.c' || echo '$(srcdir)/'`commands/efi/fixvideo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/fixvideo_module-fixvideo.Tpo commands/efi/$(DEPDIR)/fixvideo_module-fixvideo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/fixvideo.c' object='commands/efi/fixvideo_module-fixvideo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $(fixvideo_module_CFLAGS) $(CFLAGS) -c -o commands/efi/fixvideo_module-fixvideo.o `test -f 'commands/efi/fixvideo.c' || echo '$(srcdir)/'`commands/efi/fixvideo.c + +commands/efi/fixvideo_module-fixvideo.obj: commands/efi/fixvideo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $(fixvideo_module_CFLAGS) $(CFLAGS) -MT commands/efi/fixvideo_module-fixvideo.obj -MD -MP -MF commands/efi/$(DEPDIR)/fixvideo_module-fixvideo.Tpo -c -o commands/efi/fixvideo_module-fixvideo.obj `if test -f 'commands/efi/fixvideo.c'; then $(CYGPATH_W) 'commands/efi/fixvideo.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/fixvideo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/fixvideo_module-fixvideo.Tpo commands/efi/$(DEPDIR)/fixvideo_module-fixvideo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/fixvideo.c' object='commands/efi/fixvideo_module-fixvideo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $(fixvideo_module_CFLAGS) $(CFLAGS) -c -o commands/efi/fixvideo_module-fixvideo.obj `if test -f 'commands/efi/fixvideo.c'; then $(CYGPATH_W) 'commands/efi/fixvideo.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/fixvideo.c'; fi` + +font/font_module-font.o: font/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -MT font/font_module-font.o -MD -MP -MF font/$(DEPDIR)/font_module-font.Tpo -c -o font/font_module-font.o `test -f 'font/font.c' || echo '$(srcdir)/'`font/font.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/font_module-font.Tpo font/$(DEPDIR)/font_module-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font.c' object='font/font_module-font.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -c -o font/font_module-font.o `test -f 'font/font.c' || echo '$(srcdir)/'`font/font.c + +font/font_module-font.obj: font/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -MT font/font_module-font.obj -MD -MP -MF font/$(DEPDIR)/font_module-font.Tpo -c -o font/font_module-font.obj `if test -f 'font/font.c'; then $(CYGPATH_W) 'font/font.c'; else $(CYGPATH_W) '$(srcdir)/font/font.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/font_module-font.Tpo font/$(DEPDIR)/font_module-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font.c' object='font/font_module-font.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -c -o font/font_module-font.obj `if test -f 'font/font.c'; then $(CYGPATH_W) 'font/font.c'; else $(CYGPATH_W) '$(srcdir)/font/font.c'; fi` + +font/font_module-font_cmd.o: font/font_cmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -MT font/font_module-font_cmd.o -MD -MP -MF font/$(DEPDIR)/font_module-font_cmd.Tpo -c -o font/font_module-font_cmd.o `test -f 'font/font_cmd.c' || echo '$(srcdir)/'`font/font_cmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/font_module-font_cmd.Tpo font/$(DEPDIR)/font_module-font_cmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font_cmd.c' object='font/font_module-font_cmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -c -o font/font_module-font_cmd.o `test -f 'font/font_cmd.c' || echo '$(srcdir)/'`font/font_cmd.c + +font/font_module-font_cmd.obj: font/font_cmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -MT font/font_module-font_cmd.obj -MD -MP -MF font/$(DEPDIR)/font_module-font_cmd.Tpo -c -o font/font_module-font_cmd.obj `if test -f 'font/font_cmd.c'; then $(CYGPATH_W) 'font/font_cmd.c'; else $(CYGPATH_W) '$(srcdir)/font/font_cmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/font_module-font_cmd.Tpo font/$(DEPDIR)/font_module-font_cmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font_cmd.c' object='font/font_module-font_cmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $(font_module_CFLAGS) $(CFLAGS) -c -o font/font_module-font_cmd.obj `if test -f 'font/font_cmd.c'; then $(CYGPATH_W) 'font/font_cmd.c'; else $(CYGPATH_W) '$(srcdir)/font/font_cmd.c'; fi` + +loader/i386/pc/freedos_module-freedos.o: loader/i386/pc/freedos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedos_module_CPPFLAGS) $(CPPFLAGS) $(freedos_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/freedos_module-freedos.o -MD -MP -MF loader/i386/pc/$(DEPDIR)/freedos_module-freedos.Tpo -c -o loader/i386/pc/freedos_module-freedos.o `test -f 'loader/i386/pc/freedos.c' || echo '$(srcdir)/'`loader/i386/pc/freedos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/freedos_module-freedos.Tpo loader/i386/pc/$(DEPDIR)/freedos_module-freedos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/freedos.c' object='loader/i386/pc/freedos_module-freedos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedos_module_CPPFLAGS) $(CPPFLAGS) $(freedos_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/freedos_module-freedos.o `test -f 'loader/i386/pc/freedos.c' || echo '$(srcdir)/'`loader/i386/pc/freedos.c + +loader/i386/pc/freedos_module-freedos.obj: loader/i386/pc/freedos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedos_module_CPPFLAGS) $(CPPFLAGS) $(freedos_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/freedos_module-freedos.obj -MD -MP -MF loader/i386/pc/$(DEPDIR)/freedos_module-freedos.Tpo -c -o loader/i386/pc/freedos_module-freedos.obj `if test -f 'loader/i386/pc/freedos.c'; then $(CYGPATH_W) 'loader/i386/pc/freedos.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/freedos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/freedos_module-freedos.Tpo loader/i386/pc/$(DEPDIR)/freedos_module-freedos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/freedos.c' object='loader/i386/pc/freedos_module-freedos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedos_module_CPPFLAGS) $(CPPFLAGS) $(freedos_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/freedos_module-freedos.obj `if test -f 'loader/i386/pc/freedos.c'; then $(CYGPATH_W) 'loader/i386/pc/freedos.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/freedos.c'; fi` + +fs/fshelp_module-fshelp.o: fs/fshelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fshelp_module_CPPFLAGS) $(CPPFLAGS) $(fshelp_module_CFLAGS) $(CFLAGS) -MT fs/fshelp_module-fshelp.o -MD -MP -MF fs/$(DEPDIR)/fshelp_module-fshelp.Tpo -c -o fs/fshelp_module-fshelp.o `test -f 'fs/fshelp.c' || echo '$(srcdir)/'`fs/fshelp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/fshelp_module-fshelp.Tpo fs/$(DEPDIR)/fshelp_module-fshelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/fshelp.c' object='fs/fshelp_module-fshelp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fshelp_module_CPPFLAGS) $(CPPFLAGS) $(fshelp_module_CFLAGS) $(CFLAGS) -c -o fs/fshelp_module-fshelp.o `test -f 'fs/fshelp.c' || echo '$(srcdir)/'`fs/fshelp.c + +fs/fshelp_module-fshelp.obj: fs/fshelp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fshelp_module_CPPFLAGS) $(CPPFLAGS) $(fshelp_module_CFLAGS) $(CFLAGS) -MT fs/fshelp_module-fshelp.obj -MD -MP -MF fs/$(DEPDIR)/fshelp_module-fshelp.Tpo -c -o fs/fshelp_module-fshelp.obj `if test -f 'fs/fshelp.c'; then $(CYGPATH_W) 'fs/fshelp.c'; else $(CYGPATH_W) '$(srcdir)/fs/fshelp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/fshelp_module-fshelp.Tpo fs/$(DEPDIR)/fshelp_module-fshelp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/fshelp.c' object='fs/fshelp_module-fshelp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fshelp_module_CPPFLAGS) $(CPPFLAGS) $(fshelp_module_CFLAGS) $(CFLAGS) -c -o fs/fshelp_module-fshelp.obj `if test -f 'fs/fshelp.c'; then $(CYGPATH_W) 'fs/fshelp.c'; else $(CYGPATH_W) '$(srcdir)/fs/fshelp.c'; fi` + +tests/lib/functional_test_module-functional_test.o: tests/lib/functional_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/lib/functional_test_module-functional_test.o -MD -MP -MF tests/lib/$(DEPDIR)/functional_test_module-functional_test.Tpo -c -o tests/lib/functional_test_module-functional_test.o `test -f 'tests/lib/functional_test.c' || echo '$(srcdir)/'`tests/lib/functional_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/functional_test_module-functional_test.Tpo tests/lib/$(DEPDIR)/functional_test_module-functional_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/functional_test.c' object='tests/lib/functional_test_module-functional_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/lib/functional_test_module-functional_test.o `test -f 'tests/lib/functional_test.c' || echo '$(srcdir)/'`tests/lib/functional_test.c + +tests/lib/functional_test_module-functional_test.obj: tests/lib/functional_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/lib/functional_test_module-functional_test.obj -MD -MP -MF tests/lib/$(DEPDIR)/functional_test_module-functional_test.Tpo -c -o tests/lib/functional_test_module-functional_test.obj `if test -f 'tests/lib/functional_test.c'; then $(CYGPATH_W) 'tests/lib/functional_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/functional_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/functional_test_module-functional_test.Tpo tests/lib/$(DEPDIR)/functional_test_module-functional_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/functional_test.c' object='tests/lib/functional_test_module-functional_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/lib/functional_test_module-functional_test.obj `if test -f 'tests/lib/functional_test.c'; then $(CYGPATH_W) 'tests/lib/functional_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/functional_test.c'; fi` + +tests/lib/functional_test_module-test.o: tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/lib/functional_test_module-test.o -MD -MP -MF tests/lib/$(DEPDIR)/functional_test_module-test.Tpo -c -o tests/lib/functional_test_module-test.o `test -f 'tests/lib/test.c' || echo '$(srcdir)/'`tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/functional_test_module-test.Tpo tests/lib/$(DEPDIR)/functional_test_module-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/test.c' object='tests/lib/functional_test_module-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/lib/functional_test_module-test.o `test -f 'tests/lib/test.c' || echo '$(srcdir)/'`tests/lib/test.c + +tests/lib/functional_test_module-test.obj: tests/lib/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/lib/functional_test_module-test.obj -MD -MP -MF tests/lib/$(DEPDIR)/functional_test_module-test.Tpo -c -o tests/lib/functional_test_module-test.obj `if test -f 'tests/lib/test.c'; then $(CYGPATH_W) 'tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/lib/$(DEPDIR)/functional_test_module-test.Tpo tests/lib/$(DEPDIR)/functional_test_module-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/lib/test.c' object='tests/lib/functional_test_module-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/lib/functional_test_module-test.obj `if test -f 'tests/lib/test.c'; then $(CYGPATH_W) 'tests/lib/test.c'; else $(CYGPATH_W) '$(srcdir)/tests/lib/test.c'; fi` + +tests/functional_test_module-video_checksum.o: tests/video_checksum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/functional_test_module-video_checksum.o -MD -MP -MF tests/$(DEPDIR)/functional_test_module-video_checksum.Tpo -c -o tests/functional_test_module-video_checksum.o `test -f 'tests/video_checksum.c' || echo '$(srcdir)/'`tests/video_checksum.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/functional_test_module-video_checksum.Tpo tests/$(DEPDIR)/functional_test_module-video_checksum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/video_checksum.c' object='tests/functional_test_module-video_checksum.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/functional_test_module-video_checksum.o `test -f 'tests/video_checksum.c' || echo '$(srcdir)/'`tests/video_checksum.c + +tests/functional_test_module-video_checksum.obj: tests/video_checksum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/functional_test_module-video_checksum.obj -MD -MP -MF tests/$(DEPDIR)/functional_test_module-video_checksum.Tpo -c -o tests/functional_test_module-video_checksum.obj `if test -f 'tests/video_checksum.c'; then $(CYGPATH_W) 'tests/video_checksum.c'; else $(CYGPATH_W) '$(srcdir)/tests/video_checksum.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/functional_test_module-video_checksum.Tpo tests/$(DEPDIR)/functional_test_module-video_checksum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/video_checksum.c' object='tests/functional_test_module-video_checksum.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/functional_test_module-video_checksum.obj `if test -f 'tests/video_checksum.c'; then $(CYGPATH_W) 'tests/video_checksum.c'; else $(CYGPATH_W) '$(srcdir)/tests/video_checksum.c'; fi` + +tests/functional_test_module-fake_input.o: tests/fake_input.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/functional_test_module-fake_input.o -MD -MP -MF tests/$(DEPDIR)/functional_test_module-fake_input.Tpo -c -o tests/functional_test_module-fake_input.o `test -f 'tests/fake_input.c' || echo '$(srcdir)/'`tests/fake_input.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/functional_test_module-fake_input.Tpo tests/$(DEPDIR)/functional_test_module-fake_input.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/fake_input.c' object='tests/functional_test_module-fake_input.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/functional_test_module-fake_input.o `test -f 'tests/fake_input.c' || echo '$(srcdir)/'`tests/fake_input.c + +tests/functional_test_module-fake_input.obj: tests/fake_input.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT tests/functional_test_module-fake_input.obj -MD -MP -MF tests/$(DEPDIR)/functional_test_module-fake_input.Tpo -c -o tests/functional_test_module-fake_input.obj `if test -f 'tests/fake_input.c'; then $(CYGPATH_W) 'tests/fake_input.c'; else $(CYGPATH_W) '$(srcdir)/tests/fake_input.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/functional_test_module-fake_input.Tpo tests/$(DEPDIR)/functional_test_module-fake_input.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/fake_input.c' object='tests/functional_test_module-fake_input.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o tests/functional_test_module-fake_input.obj `if test -f 'tests/fake_input.c'; then $(CYGPATH_W) 'tests/fake_input.c'; else $(CYGPATH_W) '$(srcdir)/tests/fake_input.c'; fi` + +video/functional_test_module-capture.o: video/capture.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT video/functional_test_module-capture.o -MD -MP -MF video/$(DEPDIR)/functional_test_module-capture.Tpo -c -o video/functional_test_module-capture.o `test -f 'video/capture.c' || echo '$(srcdir)/'`video/capture.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/functional_test_module-capture.Tpo video/$(DEPDIR)/functional_test_module-capture.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/capture.c' object='video/functional_test_module-capture.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o video/functional_test_module-capture.o `test -f 'video/capture.c' || echo '$(srcdir)/'`video/capture.c + +video/functional_test_module-capture.obj: video/capture.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -MT video/functional_test_module-capture.obj -MD -MP -MF video/$(DEPDIR)/functional_test_module-capture.Tpo -c -o video/functional_test_module-capture.obj `if test -f 'video/capture.c'; then $(CYGPATH_W) 'video/capture.c'; else $(CYGPATH_W) '$(srcdir)/video/capture.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/functional_test_module-capture.Tpo video/$(DEPDIR)/functional_test_module-capture.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/capture.c' object='video/functional_test_module-capture.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $(functional_test_module_CFLAGS) $(CFLAGS) -c -o video/functional_test_module-capture.obj `if test -f 'video/capture.c'; then $(CYGPATH_W) 'video/capture.c'; else $(CYGPATH_W) '$(srcdir)/video/capture.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.o: lib/libgcrypt-grub/cipher/arcfour.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_arcfour_module_CPPFLAGS) $(CPPFLAGS) $(gcry_arcfour_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_arcfour_module-arcfour.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.o `test -f 'lib/libgcrypt-grub/cipher/arcfour.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/arcfour.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_arcfour_module-arcfour.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_arcfour_module-arcfour.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/arcfour.c' object='lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_arcfour_module_CPPFLAGS) $(CPPFLAGS) $(gcry_arcfour_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.o `test -f 'lib/libgcrypt-grub/cipher/arcfour.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/arcfour.c + +lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.obj: lib/libgcrypt-grub/cipher/arcfour.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_arcfour_module_CPPFLAGS) $(CPPFLAGS) $(gcry_arcfour_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_arcfour_module-arcfour.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.obj `if test -f 'lib/libgcrypt-grub/cipher/arcfour.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/arcfour.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/arcfour.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_arcfour_module-arcfour.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_arcfour_module-arcfour.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/arcfour.c' object='lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_arcfour_module_CPPFLAGS) $(CPPFLAGS) $(gcry_arcfour_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_arcfour_module-arcfour.obj `if test -f 'lib/libgcrypt-grub/cipher/arcfour.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/arcfour.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/arcfour.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.o: lib/libgcrypt-grub/cipher/blowfish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_blowfish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_blowfish_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_blowfish_module-blowfish.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.o `test -f 'lib/libgcrypt-grub/cipher/blowfish.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/blowfish.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_blowfish_module-blowfish.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_blowfish_module-blowfish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/blowfish.c' object='lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_blowfish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_blowfish_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.o `test -f 'lib/libgcrypt-grub/cipher/blowfish.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/blowfish.c + +lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.obj: lib/libgcrypt-grub/cipher/blowfish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_blowfish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_blowfish_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_blowfish_module-blowfish.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.obj `if test -f 'lib/libgcrypt-grub/cipher/blowfish.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/blowfish.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/blowfish.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_blowfish_module-blowfish.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_blowfish_module-blowfish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/blowfish.c' object='lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_blowfish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_blowfish_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_blowfish_module-blowfish.obj `if test -f 'lib/libgcrypt-grub/cipher/blowfish.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/blowfish.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/blowfish.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.o: lib/libgcrypt-grub/cipher/camellia-glue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia-glue.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.o `test -f 'lib/libgcrypt-grub/cipher/camellia-glue.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/camellia-glue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia-glue.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia-glue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/camellia-glue.c' object='lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.o `test -f 'lib/libgcrypt-grub/cipher/camellia-glue.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/camellia-glue.c + +lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.obj: lib/libgcrypt-grub/cipher/camellia-glue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia-glue.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.obj `if test -f 'lib/libgcrypt-grub/cipher/camellia-glue.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/camellia-glue.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/camellia-glue.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia-glue.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia-glue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/camellia-glue.c' object='lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia-glue.obj `if test -f 'lib/libgcrypt-grub/cipher/camellia-glue.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/camellia-glue.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/camellia-glue.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.o: lib/libgcrypt-grub/cipher/camellia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.o `test -f 'lib/libgcrypt-grub/cipher/camellia.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/camellia.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/camellia.c' object='lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.o `test -f 'lib/libgcrypt-grub/cipher/camellia.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/camellia.c + +lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.obj: lib/libgcrypt-grub/cipher/camellia.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.obj `if test -f 'lib/libgcrypt-grub/cipher/camellia.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/camellia.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/camellia.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_camellia_module-camellia.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/camellia.c' object='lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $(gcry_camellia_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_camellia_module-camellia.obj `if test -f 'lib/libgcrypt-grub/cipher/camellia.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/camellia.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/camellia.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.o: lib/libgcrypt-grub/cipher/cast5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_cast5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_cast5_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_cast5_module-cast5.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.o `test -f 'lib/libgcrypt-grub/cipher/cast5.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/cast5.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_cast5_module-cast5.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_cast5_module-cast5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/cast5.c' object='lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_cast5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_cast5_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.o `test -f 'lib/libgcrypt-grub/cipher/cast5.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/cast5.c + +lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.obj: lib/libgcrypt-grub/cipher/cast5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_cast5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_cast5_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_cast5_module-cast5.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.obj `if test -f 'lib/libgcrypt-grub/cipher/cast5.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/cast5.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/cast5.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_cast5_module-cast5.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_cast5_module-cast5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/cast5.c' object='lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_cast5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_cast5_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_cast5_module-cast5.obj `if test -f 'lib/libgcrypt-grub/cipher/cast5.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/cast5.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/cast5.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_crc_module-crc.o: lib/libgcrypt-grub/cipher/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_crc_module_CPPFLAGS) $(CPPFLAGS) $(gcry_crc_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_crc_module-crc.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_crc_module-crc.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_crc_module-crc.o `test -f 'lib/libgcrypt-grub/cipher/crc.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/crc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_crc_module-crc.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_crc_module-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/crc.c' object='lib/libgcrypt-grub/cipher/gcry_crc_module-crc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_crc_module_CPPFLAGS) $(CPPFLAGS) $(gcry_crc_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_crc_module-crc.o `test -f 'lib/libgcrypt-grub/cipher/crc.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/crc.c + +lib/libgcrypt-grub/cipher/gcry_crc_module-crc.obj: lib/libgcrypt-grub/cipher/crc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_crc_module_CPPFLAGS) $(CPPFLAGS) $(gcry_crc_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_crc_module-crc.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_crc_module-crc.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_crc_module-crc.obj `if test -f 'lib/libgcrypt-grub/cipher/crc.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/crc.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/crc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_crc_module-crc.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_crc_module-crc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/crc.c' object='lib/libgcrypt-grub/cipher/gcry_crc_module-crc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_crc_module_CPPFLAGS) $(CPPFLAGS) $(gcry_crc_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_crc_module-crc.obj `if test -f 'lib/libgcrypt-grub/cipher/crc.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/crc.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/crc.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_des_module-des.o: lib/libgcrypt-grub/cipher/des.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_des_module_CPPFLAGS) $(CPPFLAGS) $(gcry_des_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_des_module-des.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_des_module-des.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_des_module-des.o `test -f 'lib/libgcrypt-grub/cipher/des.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/des.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_des_module-des.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_des_module-des.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/des.c' object='lib/libgcrypt-grub/cipher/gcry_des_module-des.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_des_module_CPPFLAGS) $(CPPFLAGS) $(gcry_des_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_des_module-des.o `test -f 'lib/libgcrypt-grub/cipher/des.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/des.c + +lib/libgcrypt-grub/cipher/gcry_des_module-des.obj: lib/libgcrypt-grub/cipher/des.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_des_module_CPPFLAGS) $(CPPFLAGS) $(gcry_des_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_des_module-des.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_des_module-des.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_des_module-des.obj `if test -f 'lib/libgcrypt-grub/cipher/des.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/des.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/des.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_des_module-des.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_des_module-des.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/des.c' object='lib/libgcrypt-grub/cipher/gcry_des_module-des.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_des_module_CPPFLAGS) $(CPPFLAGS) $(gcry_des_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_des_module-des.obj `if test -f 'lib/libgcrypt-grub/cipher/des.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/des.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/des.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.o: lib/libgcrypt-grub/cipher/dsa.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_dsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_dsa_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_dsa_module-dsa.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.o `test -f 'lib/libgcrypt-grub/cipher/dsa.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/dsa.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_dsa_module-dsa.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_dsa_module-dsa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/dsa.c' object='lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_dsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_dsa_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.o `test -f 'lib/libgcrypt-grub/cipher/dsa.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/dsa.c + +lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.obj: lib/libgcrypt-grub/cipher/dsa.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_dsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_dsa_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_dsa_module-dsa.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.obj `if test -f 'lib/libgcrypt-grub/cipher/dsa.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/dsa.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/dsa.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_dsa_module-dsa.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_dsa_module-dsa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/dsa.c' object='lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_dsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_dsa_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_dsa_module-dsa.obj `if test -f 'lib/libgcrypt-grub/cipher/dsa.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/dsa.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/dsa.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_idea_module-idea.o: lib/libgcrypt-grub/cipher/idea.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_idea_module_CPPFLAGS) $(CPPFLAGS) $(gcry_idea_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_idea_module-idea.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_idea_module-idea.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_idea_module-idea.o `test -f 'lib/libgcrypt-grub/cipher/idea.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/idea.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_idea_module-idea.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_idea_module-idea.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/idea.c' object='lib/libgcrypt-grub/cipher/gcry_idea_module-idea.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_idea_module_CPPFLAGS) $(CPPFLAGS) $(gcry_idea_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_idea_module-idea.o `test -f 'lib/libgcrypt-grub/cipher/idea.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/idea.c + +lib/libgcrypt-grub/cipher/gcry_idea_module-idea.obj: lib/libgcrypt-grub/cipher/idea.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_idea_module_CPPFLAGS) $(CPPFLAGS) $(gcry_idea_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_idea_module-idea.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_idea_module-idea.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_idea_module-idea.obj `if test -f 'lib/libgcrypt-grub/cipher/idea.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/idea.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/idea.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_idea_module-idea.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_idea_module-idea.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/idea.c' object='lib/libgcrypt-grub/cipher/gcry_idea_module-idea.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_idea_module_CPPFLAGS) $(CPPFLAGS) $(gcry_idea_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_idea_module-idea.obj `if test -f 'lib/libgcrypt-grub/cipher/idea.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/idea.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/idea.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_md4_module-md4.o: lib/libgcrypt-grub/cipher/md4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md4_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md4_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_md4_module-md4.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md4_module-md4.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_md4_module-md4.o `test -f 'lib/libgcrypt-grub/cipher/md4.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/md4.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md4_module-md4.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md4_module-md4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/md4.c' object='lib/libgcrypt-grub/cipher/gcry_md4_module-md4.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md4_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md4_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_md4_module-md4.o `test -f 'lib/libgcrypt-grub/cipher/md4.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/md4.c + +lib/libgcrypt-grub/cipher/gcry_md4_module-md4.obj: lib/libgcrypt-grub/cipher/md4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md4_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md4_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_md4_module-md4.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md4_module-md4.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_md4_module-md4.obj `if test -f 'lib/libgcrypt-grub/cipher/md4.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/md4.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/md4.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md4_module-md4.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md4_module-md4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/md4.c' object='lib/libgcrypt-grub/cipher/gcry_md4_module-md4.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md4_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md4_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_md4_module-md4.obj `if test -f 'lib/libgcrypt-grub/cipher/md4.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/md4.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/md4.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_md5_module-md5.o: lib/libgcrypt-grub/cipher/md5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md5_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_md5_module-md5.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md5_module-md5.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_md5_module-md5.o `test -f 'lib/libgcrypt-grub/cipher/md5.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/md5.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md5_module-md5.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md5_module-md5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/md5.c' object='lib/libgcrypt-grub/cipher/gcry_md5_module-md5.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md5_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_md5_module-md5.o `test -f 'lib/libgcrypt-grub/cipher/md5.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/md5.c + +lib/libgcrypt-grub/cipher/gcry_md5_module-md5.obj: lib/libgcrypt-grub/cipher/md5.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md5_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_md5_module-md5.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md5_module-md5.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_md5_module-md5.obj `if test -f 'lib/libgcrypt-grub/cipher/md5.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/md5.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/md5.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md5_module-md5.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_md5_module-md5.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/md5.c' object='lib/libgcrypt-grub/cipher/gcry_md5_module-md5.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md5_module_CPPFLAGS) $(CPPFLAGS) $(gcry_md5_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_md5_module-md5.obj `if test -f 'lib/libgcrypt-grub/cipher/md5.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/md5.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/md5.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.o: lib/libgcrypt-grub/cipher/rfc2268.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rfc2268_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rfc2268_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rfc2268_module-rfc2268.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.o `test -f 'lib/libgcrypt-grub/cipher/rfc2268.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rfc2268.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rfc2268_module-rfc2268.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rfc2268_module-rfc2268.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rfc2268.c' object='lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rfc2268_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rfc2268_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.o `test -f 'lib/libgcrypt-grub/cipher/rfc2268.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rfc2268.c + +lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.obj: lib/libgcrypt-grub/cipher/rfc2268.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rfc2268_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rfc2268_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rfc2268_module-rfc2268.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.obj `if test -f 'lib/libgcrypt-grub/cipher/rfc2268.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rfc2268.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rfc2268.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rfc2268_module-rfc2268.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rfc2268_module-rfc2268.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rfc2268.c' object='lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rfc2268_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rfc2268_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rfc2268_module-rfc2268.obj `if test -f 'lib/libgcrypt-grub/cipher/rfc2268.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rfc2268.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rfc2268.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.o: lib/libgcrypt-grub/cipher/rijndael.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rijndael_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rijndael_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rijndael_module-rijndael.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.o `test -f 'lib/libgcrypt-grub/cipher/rijndael.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rijndael.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rijndael_module-rijndael.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rijndael_module-rijndael.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rijndael.c' object='lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rijndael_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rijndael_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.o `test -f 'lib/libgcrypt-grub/cipher/rijndael.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rijndael.c + +lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.obj: lib/libgcrypt-grub/cipher/rijndael.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rijndael_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rijndael_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rijndael_module-rijndael.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.obj `if test -f 'lib/libgcrypt-grub/cipher/rijndael.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rijndael.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rijndael.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rijndael_module-rijndael.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rijndael_module-rijndael.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rijndael.c' object='lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rijndael_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rijndael_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rijndael_module-rijndael.obj `if test -f 'lib/libgcrypt-grub/cipher/rijndael.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rijndael.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rijndael.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.o: lib/libgcrypt-grub/cipher/rmd160.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rmd160_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rmd160_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rmd160_module-rmd160.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.o `test -f 'lib/libgcrypt-grub/cipher/rmd160.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rmd160.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rmd160_module-rmd160.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rmd160_module-rmd160.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rmd160.c' object='lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rmd160_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rmd160_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.o `test -f 'lib/libgcrypt-grub/cipher/rmd160.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rmd160.c + +lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.obj: lib/libgcrypt-grub/cipher/rmd160.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rmd160_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rmd160_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rmd160_module-rmd160.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.obj `if test -f 'lib/libgcrypt-grub/cipher/rmd160.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rmd160.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rmd160.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rmd160_module-rmd160.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rmd160_module-rmd160.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rmd160.c' object='lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rmd160_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rmd160_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rmd160_module-rmd160.obj `if test -f 'lib/libgcrypt-grub/cipher/rmd160.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rmd160.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rmd160.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.o: lib/libgcrypt-grub/cipher/rsa.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rsa_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rsa_module-rsa.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.o `test -f 'lib/libgcrypt-grub/cipher/rsa.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rsa.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rsa_module-rsa.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rsa_module-rsa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rsa.c' object='lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rsa_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.o `test -f 'lib/libgcrypt-grub/cipher/rsa.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/rsa.c + +lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.obj: lib/libgcrypt-grub/cipher/rsa.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rsa_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rsa_module-rsa.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.obj `if test -f 'lib/libgcrypt-grub/cipher/rsa.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rsa.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rsa.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rsa_module-rsa.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_rsa_module-rsa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/rsa.c' object='lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rsa_module_CPPFLAGS) $(CPPFLAGS) $(gcry_rsa_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_rsa_module-rsa.obj `if test -f 'lib/libgcrypt-grub/cipher/rsa.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/rsa.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/rsa.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_seed_module-seed.o: lib/libgcrypt-grub/cipher/seed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_seed_module_CPPFLAGS) $(CPPFLAGS) $(gcry_seed_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_seed_module-seed.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_seed_module-seed.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_seed_module-seed.o `test -f 'lib/libgcrypt-grub/cipher/seed.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/seed.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_seed_module-seed.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_seed_module-seed.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/seed.c' object='lib/libgcrypt-grub/cipher/gcry_seed_module-seed.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_seed_module_CPPFLAGS) $(CPPFLAGS) $(gcry_seed_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_seed_module-seed.o `test -f 'lib/libgcrypt-grub/cipher/seed.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/seed.c + +lib/libgcrypt-grub/cipher/gcry_seed_module-seed.obj: lib/libgcrypt-grub/cipher/seed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_seed_module_CPPFLAGS) $(CPPFLAGS) $(gcry_seed_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_seed_module-seed.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_seed_module-seed.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_seed_module-seed.obj `if test -f 'lib/libgcrypt-grub/cipher/seed.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/seed.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/seed.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_seed_module-seed.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_seed_module-seed.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/seed.c' object='lib/libgcrypt-grub/cipher/gcry_seed_module-seed.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_seed_module_CPPFLAGS) $(CPPFLAGS) $(gcry_seed_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_seed_module-seed.obj `if test -f 'lib/libgcrypt-grub/cipher/seed.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/seed.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/seed.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.o: lib/libgcrypt-grub/cipher/serpent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_serpent_module_CPPFLAGS) $(CPPFLAGS) $(gcry_serpent_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_serpent_module-serpent.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.o `test -f 'lib/libgcrypt-grub/cipher/serpent.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/serpent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_serpent_module-serpent.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_serpent_module-serpent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/serpent.c' object='lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_serpent_module_CPPFLAGS) $(CPPFLAGS) $(gcry_serpent_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.o `test -f 'lib/libgcrypt-grub/cipher/serpent.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/serpent.c + +lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.obj: lib/libgcrypt-grub/cipher/serpent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_serpent_module_CPPFLAGS) $(CPPFLAGS) $(gcry_serpent_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_serpent_module-serpent.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.obj `if test -f 'lib/libgcrypt-grub/cipher/serpent.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/serpent.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/serpent.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_serpent_module-serpent.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_serpent_module-serpent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/serpent.c' object='lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_serpent_module_CPPFLAGS) $(CPPFLAGS) $(gcry_serpent_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_serpent_module-serpent.obj `if test -f 'lib/libgcrypt-grub/cipher/serpent.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/serpent.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/serpent.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.o: lib/libgcrypt-grub/cipher/sha1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha1_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha1_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha1_module-sha1.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.o `test -f 'lib/libgcrypt-grub/cipher/sha1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/sha1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha1_module-sha1.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha1_module-sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/sha1.c' object='lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha1_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha1_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.o `test -f 'lib/libgcrypt-grub/cipher/sha1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/sha1.c + +lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.obj: lib/libgcrypt-grub/cipher/sha1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha1_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha1_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha1_module-sha1.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.obj `if test -f 'lib/libgcrypt-grub/cipher/sha1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/sha1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/sha1.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha1_module-sha1.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha1_module-sha1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/sha1.c' object='lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha1_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha1_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_sha1_module-sha1.obj `if test -f 'lib/libgcrypt-grub/cipher/sha1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/sha1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/sha1.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.o: lib/libgcrypt-grub/cipher/sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha256_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha256_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha256_module-sha256.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.o `test -f 'lib/libgcrypt-grub/cipher/sha256.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/sha256.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha256_module-sha256.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha256_module-sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/sha256.c' object='lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha256_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha256_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.o `test -f 'lib/libgcrypt-grub/cipher/sha256.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/sha256.c + +lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.obj: lib/libgcrypt-grub/cipher/sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha256_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha256_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha256_module-sha256.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.obj `if test -f 'lib/libgcrypt-grub/cipher/sha256.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/sha256.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/sha256.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha256_module-sha256.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha256_module-sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/sha256.c' object='lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha256_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha256_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_sha256_module-sha256.obj `if test -f 'lib/libgcrypt-grub/cipher/sha256.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/sha256.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/sha256.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.o: lib/libgcrypt-grub/cipher/sha512.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha512_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha512_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha512_module-sha512.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.o `test -f 'lib/libgcrypt-grub/cipher/sha512.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/sha512.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha512_module-sha512.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha512_module-sha512.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/sha512.c' object='lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha512_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha512_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.o `test -f 'lib/libgcrypt-grub/cipher/sha512.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/sha512.c + +lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.obj: lib/libgcrypt-grub/cipher/sha512.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha512_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha512_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha512_module-sha512.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.obj `if test -f 'lib/libgcrypt-grub/cipher/sha512.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/sha512.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/sha512.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha512_module-sha512.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_sha512_module-sha512.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/sha512.c' object='lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha512_module_CPPFLAGS) $(CPPFLAGS) $(gcry_sha512_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_sha512_module-sha512.obj `if test -f 'lib/libgcrypt-grub/cipher/sha512.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/sha512.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/sha512.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.o: lib/libgcrypt-grub/cipher/tiger.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_tiger_module_CPPFLAGS) $(CPPFLAGS) $(gcry_tiger_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_tiger_module-tiger.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.o `test -f 'lib/libgcrypt-grub/cipher/tiger.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/tiger.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_tiger_module-tiger.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_tiger_module-tiger.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/tiger.c' object='lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_tiger_module_CPPFLAGS) $(CPPFLAGS) $(gcry_tiger_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.o `test -f 'lib/libgcrypt-grub/cipher/tiger.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/tiger.c + +lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.obj: lib/libgcrypt-grub/cipher/tiger.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_tiger_module_CPPFLAGS) $(CPPFLAGS) $(gcry_tiger_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_tiger_module-tiger.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.obj `if test -f 'lib/libgcrypt-grub/cipher/tiger.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/tiger.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/tiger.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_tiger_module-tiger.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_tiger_module-tiger.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/tiger.c' object='lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_tiger_module_CPPFLAGS) $(CPPFLAGS) $(gcry_tiger_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_tiger_module-tiger.obj `if test -f 'lib/libgcrypt-grub/cipher/tiger.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/tiger.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/tiger.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.o: lib/libgcrypt-grub/cipher/twofish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_twofish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_twofish_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_twofish_module-twofish.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.o `test -f 'lib/libgcrypt-grub/cipher/twofish.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/twofish.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_twofish_module-twofish.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_twofish_module-twofish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/twofish.c' object='lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_twofish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_twofish_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.o `test -f 'lib/libgcrypt-grub/cipher/twofish.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/twofish.c + +lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.obj: lib/libgcrypt-grub/cipher/twofish.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_twofish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_twofish_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_twofish_module-twofish.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.obj `if test -f 'lib/libgcrypt-grub/cipher/twofish.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/twofish.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/twofish.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_twofish_module-twofish.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_twofish_module-twofish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/twofish.c' object='lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_twofish_module_CPPFLAGS) $(CPPFLAGS) $(gcry_twofish_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_twofish_module-twofish.obj `if test -f 'lib/libgcrypt-grub/cipher/twofish.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/twofish.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/twofish.c'; fi` + +lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.o: lib/libgcrypt-grub/cipher/whirlpool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_whirlpool_module_CPPFLAGS) $(CPPFLAGS) $(gcry_whirlpool_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.o -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_whirlpool_module-whirlpool.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.o `test -f 'lib/libgcrypt-grub/cipher/whirlpool.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/whirlpool.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_whirlpool_module-whirlpool.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_whirlpool_module-whirlpool.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/whirlpool.c' object='lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_whirlpool_module_CPPFLAGS) $(CPPFLAGS) $(gcry_whirlpool_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.o `test -f 'lib/libgcrypt-grub/cipher/whirlpool.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/cipher/whirlpool.c + +lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.obj: lib/libgcrypt-grub/cipher/whirlpool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_whirlpool_module_CPPFLAGS) $(CPPFLAGS) $(gcry_whirlpool_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.obj -MD -MP -MF lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_whirlpool_module-whirlpool.Tpo -c -o lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.obj `if test -f 'lib/libgcrypt-grub/cipher/whirlpool.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/whirlpool.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/whirlpool.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_whirlpool_module-whirlpool.Tpo lib/libgcrypt-grub/cipher/$(DEPDIR)/gcry_whirlpool_module-whirlpool.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/cipher/whirlpool.c' object='lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_whirlpool_module_CPPFLAGS) $(CPPFLAGS) $(gcry_whirlpool_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/cipher/gcry_whirlpool_module-whirlpool.obj `if test -f 'lib/libgcrypt-grub/cipher/whirlpool.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/cipher/whirlpool.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/cipher/whirlpool.c'; fi` + +gdb/i386/gdb_module-idt.o: gdb/i386/idt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/i386/gdb_module-idt.o -MD -MP -MF gdb/i386/$(DEPDIR)/gdb_module-idt.Tpo -c -o gdb/i386/gdb_module-idt.o `test -f 'gdb/i386/idt.c' || echo '$(srcdir)/'`gdb/i386/idt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/i386/$(DEPDIR)/gdb_module-idt.Tpo gdb/i386/$(DEPDIR)/gdb_module-idt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/i386/idt.c' object='gdb/i386/gdb_module-idt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/i386/gdb_module-idt.o `test -f 'gdb/i386/idt.c' || echo '$(srcdir)/'`gdb/i386/idt.c + +gdb/i386/gdb_module-idt.obj: gdb/i386/idt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/i386/gdb_module-idt.obj -MD -MP -MF gdb/i386/$(DEPDIR)/gdb_module-idt.Tpo -c -o gdb/i386/gdb_module-idt.obj `if test -f 'gdb/i386/idt.c'; then $(CYGPATH_W) 'gdb/i386/idt.c'; else $(CYGPATH_W) '$(srcdir)/gdb/i386/idt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/i386/$(DEPDIR)/gdb_module-idt.Tpo gdb/i386/$(DEPDIR)/gdb_module-idt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/i386/idt.c' object='gdb/i386/gdb_module-idt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/i386/gdb_module-idt.obj `if test -f 'gdb/i386/idt.c'; then $(CYGPATH_W) 'gdb/i386/idt.c'; else $(CYGPATH_W) '$(srcdir)/gdb/i386/idt.c'; fi` + +gdb/i386/gdb_module-signal.o: gdb/i386/signal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/i386/gdb_module-signal.o -MD -MP -MF gdb/i386/$(DEPDIR)/gdb_module-signal.Tpo -c -o gdb/i386/gdb_module-signal.o `test -f 'gdb/i386/signal.c' || echo '$(srcdir)/'`gdb/i386/signal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/i386/$(DEPDIR)/gdb_module-signal.Tpo gdb/i386/$(DEPDIR)/gdb_module-signal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/i386/signal.c' object='gdb/i386/gdb_module-signal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/i386/gdb_module-signal.o `test -f 'gdb/i386/signal.c' || echo '$(srcdir)/'`gdb/i386/signal.c + +gdb/i386/gdb_module-signal.obj: gdb/i386/signal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/i386/gdb_module-signal.obj -MD -MP -MF gdb/i386/$(DEPDIR)/gdb_module-signal.Tpo -c -o gdb/i386/gdb_module-signal.obj `if test -f 'gdb/i386/signal.c'; then $(CYGPATH_W) 'gdb/i386/signal.c'; else $(CYGPATH_W) '$(srcdir)/gdb/i386/signal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/i386/$(DEPDIR)/gdb_module-signal.Tpo gdb/i386/$(DEPDIR)/gdb_module-signal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/i386/signal.c' object='gdb/i386/gdb_module-signal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/i386/gdb_module-signal.obj `if test -f 'gdb/i386/signal.c'; then $(CYGPATH_W) 'gdb/i386/signal.c'; else $(CYGPATH_W) '$(srcdir)/gdb/i386/signal.c'; fi` + +gdb/gdb_module-cstub.o: gdb/cstub.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/gdb_module-cstub.o -MD -MP -MF gdb/$(DEPDIR)/gdb_module-cstub.Tpo -c -o gdb/gdb_module-cstub.o `test -f 'gdb/cstub.c' || echo '$(srcdir)/'`gdb/cstub.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/$(DEPDIR)/gdb_module-cstub.Tpo gdb/$(DEPDIR)/gdb_module-cstub.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/cstub.c' object='gdb/gdb_module-cstub.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/gdb_module-cstub.o `test -f 'gdb/cstub.c' || echo '$(srcdir)/'`gdb/cstub.c + +gdb/gdb_module-cstub.obj: gdb/cstub.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/gdb_module-cstub.obj -MD -MP -MF gdb/$(DEPDIR)/gdb_module-cstub.Tpo -c -o gdb/gdb_module-cstub.obj `if test -f 'gdb/cstub.c'; then $(CYGPATH_W) 'gdb/cstub.c'; else $(CYGPATH_W) '$(srcdir)/gdb/cstub.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/$(DEPDIR)/gdb_module-cstub.Tpo gdb/$(DEPDIR)/gdb_module-cstub.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/cstub.c' object='gdb/gdb_module-cstub.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/gdb_module-cstub.obj `if test -f 'gdb/cstub.c'; then $(CYGPATH_W) 'gdb/cstub.c'; else $(CYGPATH_W) '$(srcdir)/gdb/cstub.c'; fi` + +gdb/gdb_module-gdb.o: gdb/gdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/gdb_module-gdb.o -MD -MP -MF gdb/$(DEPDIR)/gdb_module-gdb.Tpo -c -o gdb/gdb_module-gdb.o `test -f 'gdb/gdb.c' || echo '$(srcdir)/'`gdb/gdb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/$(DEPDIR)/gdb_module-gdb.Tpo gdb/$(DEPDIR)/gdb_module-gdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/gdb.c' object='gdb/gdb_module-gdb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/gdb_module-gdb.o `test -f 'gdb/gdb.c' || echo '$(srcdir)/'`gdb/gdb.c + +gdb/gdb_module-gdb.obj: gdb/gdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -MT gdb/gdb_module-gdb.obj -MD -MP -MF gdb/$(DEPDIR)/gdb_module-gdb.Tpo -c -o gdb/gdb_module-gdb.obj `if test -f 'gdb/gdb.c'; then $(CYGPATH_W) 'gdb/gdb.c'; else $(CYGPATH_W) '$(srcdir)/gdb/gdb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gdb/$(DEPDIR)/gdb_module-gdb.Tpo gdb/$(DEPDIR)/gdb_module-gdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdb/gdb.c' object='gdb/gdb_module-gdb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $(gdb_module_CFLAGS) $(CFLAGS) -c -o gdb/gdb_module-gdb.obj `if test -f 'gdb/gdb.c'; then $(CYGPATH_W) 'gdb/gdb.c'; else $(CYGPATH_W) '$(srcdir)/gdb/gdb.c'; fi` + +disk/geli_module-geli.o: disk/geli.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geli_module_CPPFLAGS) $(CPPFLAGS) $(geli_module_CFLAGS) $(CFLAGS) -MT disk/geli_module-geli.o -MD -MP -MF disk/$(DEPDIR)/geli_module-geli.Tpo -c -o disk/geli_module-geli.o `test -f 'disk/geli.c' || echo '$(srcdir)/'`disk/geli.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/geli_module-geli.Tpo disk/$(DEPDIR)/geli_module-geli.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/geli.c' object='disk/geli_module-geli.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geli_module_CPPFLAGS) $(CPPFLAGS) $(geli_module_CFLAGS) $(CFLAGS) -c -o disk/geli_module-geli.o `test -f 'disk/geli.c' || echo '$(srcdir)/'`disk/geli.c + +disk/geli_module-geli.obj: disk/geli.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geli_module_CPPFLAGS) $(CPPFLAGS) $(geli_module_CFLAGS) $(CFLAGS) -MT disk/geli_module-geli.obj -MD -MP -MF disk/$(DEPDIR)/geli_module-geli.Tpo -c -o disk/geli_module-geli.obj `if test -f 'disk/geli.c'; then $(CYGPATH_W) 'disk/geli.c'; else $(CYGPATH_W) '$(srcdir)/disk/geli.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/geli_module-geli.Tpo disk/$(DEPDIR)/geli_module-geli.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/geli.c' object='disk/geli_module-geli.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geli_module_CPPFLAGS) $(CPPFLAGS) $(geli_module_CFLAGS) $(CFLAGS) -c -o disk/geli_module-geli.obj `if test -f 'disk/geli.c'; then $(CYGPATH_W) 'disk/geli.c'; else $(CYGPATH_W) '$(srcdir)/disk/geli.c'; fi` + +gettext/gettext_module-gettext.o: gettext/gettext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gettext_module_CPPFLAGS) $(CPPFLAGS) $(gettext_module_CFLAGS) $(CFLAGS) -MT gettext/gettext_module-gettext.o -MD -MP -MF gettext/$(DEPDIR)/gettext_module-gettext.Tpo -c -o gettext/gettext_module-gettext.o `test -f 'gettext/gettext.c' || echo '$(srcdir)/'`gettext/gettext.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gettext/$(DEPDIR)/gettext_module-gettext.Tpo gettext/$(DEPDIR)/gettext_module-gettext.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gettext/gettext.c' object='gettext/gettext_module-gettext.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gettext_module_CPPFLAGS) $(CPPFLAGS) $(gettext_module_CFLAGS) $(CFLAGS) -c -o gettext/gettext_module-gettext.o `test -f 'gettext/gettext.c' || echo '$(srcdir)/'`gettext/gettext.c + +gettext/gettext_module-gettext.obj: gettext/gettext.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gettext_module_CPPFLAGS) $(CPPFLAGS) $(gettext_module_CFLAGS) $(CFLAGS) -MT gettext/gettext_module-gettext.obj -MD -MP -MF gettext/$(DEPDIR)/gettext_module-gettext.Tpo -c -o gettext/gettext_module-gettext.obj `if test -f 'gettext/gettext.c'; then $(CYGPATH_W) 'gettext/gettext.c'; else $(CYGPATH_W) '$(srcdir)/gettext/gettext.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gettext/$(DEPDIR)/gettext_module-gettext.Tpo gettext/$(DEPDIR)/gettext_module-gettext.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gettext/gettext.c' object='gettext/gettext_module-gettext.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gettext_module_CPPFLAGS) $(CPPFLAGS) $(gettext_module_CFLAGS) $(CFLAGS) -c -o gettext/gettext_module-gettext.obj `if test -f 'gettext/gettext.c'; then $(CYGPATH_W) 'gettext/gettext.c'; else $(CYGPATH_W) '$(srcdir)/gettext/gettext.c'; fi` + +gfxmenu/gfxmenu_module-gfxmenu.o: gfxmenu/gfxmenu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gfxmenu.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gfxmenu.Tpo -c -o gfxmenu/gfxmenu_module-gfxmenu.o `test -f 'gfxmenu/gfxmenu.c' || echo '$(srcdir)/'`gfxmenu/gfxmenu.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gfxmenu.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gfxmenu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gfxmenu.c' object='gfxmenu/gfxmenu_module-gfxmenu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gfxmenu.o `test -f 'gfxmenu/gfxmenu.c' || echo '$(srcdir)/'`gfxmenu/gfxmenu.c + +gfxmenu/gfxmenu_module-gfxmenu.obj: gfxmenu/gfxmenu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gfxmenu.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gfxmenu.Tpo -c -o gfxmenu/gfxmenu_module-gfxmenu.obj `if test -f 'gfxmenu/gfxmenu.c'; then $(CYGPATH_W) 'gfxmenu/gfxmenu.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gfxmenu.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gfxmenu.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gfxmenu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gfxmenu.c' object='gfxmenu/gfxmenu_module-gfxmenu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gfxmenu.obj `if test -f 'gfxmenu/gfxmenu.c'; then $(CYGPATH_W) 'gfxmenu/gfxmenu.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gfxmenu.c'; fi` + +gfxmenu/gfxmenu_module-view.o: gfxmenu/view.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-view.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-view.Tpo -c -o gfxmenu/gfxmenu_module-view.o `test -f 'gfxmenu/view.c' || echo '$(srcdir)/'`gfxmenu/view.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-view.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-view.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/view.c' object='gfxmenu/gfxmenu_module-view.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-view.o `test -f 'gfxmenu/view.c' || echo '$(srcdir)/'`gfxmenu/view.c + +gfxmenu/gfxmenu_module-view.obj: gfxmenu/view.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-view.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-view.Tpo -c -o gfxmenu/gfxmenu_module-view.obj `if test -f 'gfxmenu/view.c'; then $(CYGPATH_W) 'gfxmenu/view.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/view.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-view.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-view.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/view.c' object='gfxmenu/gfxmenu_module-view.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-view.obj `if test -f 'gfxmenu/view.c'; then $(CYGPATH_W) 'gfxmenu/view.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/view.c'; fi` + +gfxmenu/gfxmenu_module-font.o: gfxmenu/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-font.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-font.Tpo -c -o gfxmenu/gfxmenu_module-font.o `test -f 'gfxmenu/font.c' || echo '$(srcdir)/'`gfxmenu/font.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-font.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/font.c' object='gfxmenu/gfxmenu_module-font.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-font.o `test -f 'gfxmenu/font.c' || echo '$(srcdir)/'`gfxmenu/font.c + +gfxmenu/gfxmenu_module-font.obj: gfxmenu/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-font.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-font.Tpo -c -o gfxmenu/gfxmenu_module-font.obj `if test -f 'gfxmenu/font.c'; then $(CYGPATH_W) 'gfxmenu/font.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/font.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-font.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/font.c' object='gfxmenu/gfxmenu_module-font.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-font.obj `if test -f 'gfxmenu/font.c'; then $(CYGPATH_W) 'gfxmenu/font.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/font.c'; fi` + +gfxmenu/gfxmenu_module-icon_manager.o: gfxmenu/icon_manager.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-icon_manager.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-icon_manager.Tpo -c -o gfxmenu/gfxmenu_module-icon_manager.o `test -f 'gfxmenu/icon_manager.c' || echo '$(srcdir)/'`gfxmenu/icon_manager.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-icon_manager.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-icon_manager.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/icon_manager.c' object='gfxmenu/gfxmenu_module-icon_manager.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-icon_manager.o `test -f 'gfxmenu/icon_manager.c' || echo '$(srcdir)/'`gfxmenu/icon_manager.c + +gfxmenu/gfxmenu_module-icon_manager.obj: gfxmenu/icon_manager.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-icon_manager.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-icon_manager.Tpo -c -o gfxmenu/gfxmenu_module-icon_manager.obj `if test -f 'gfxmenu/icon_manager.c'; then $(CYGPATH_W) 'gfxmenu/icon_manager.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/icon_manager.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-icon_manager.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-icon_manager.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/icon_manager.c' object='gfxmenu/gfxmenu_module-icon_manager.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-icon_manager.obj `if test -f 'gfxmenu/icon_manager.c'; then $(CYGPATH_W) 'gfxmenu/icon_manager.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/icon_manager.c'; fi` + +gfxmenu/gfxmenu_module-theme_loader.o: gfxmenu/theme_loader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-theme_loader.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-theme_loader.Tpo -c -o gfxmenu/gfxmenu_module-theme_loader.o `test -f 'gfxmenu/theme_loader.c' || echo '$(srcdir)/'`gfxmenu/theme_loader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-theme_loader.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-theme_loader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/theme_loader.c' object='gfxmenu/gfxmenu_module-theme_loader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-theme_loader.o `test -f 'gfxmenu/theme_loader.c' || echo '$(srcdir)/'`gfxmenu/theme_loader.c + +gfxmenu/gfxmenu_module-theme_loader.obj: gfxmenu/theme_loader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-theme_loader.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-theme_loader.Tpo -c -o gfxmenu/gfxmenu_module-theme_loader.obj `if test -f 'gfxmenu/theme_loader.c'; then $(CYGPATH_W) 'gfxmenu/theme_loader.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/theme_loader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-theme_loader.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-theme_loader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/theme_loader.c' object='gfxmenu/gfxmenu_module-theme_loader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-theme_loader.obj `if test -f 'gfxmenu/theme_loader.c'; then $(CYGPATH_W) 'gfxmenu/theme_loader.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/theme_loader.c'; fi` + +gfxmenu/gfxmenu_module-widget-box.o: gfxmenu/widget-box.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-widget-box.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-widget-box.Tpo -c -o gfxmenu/gfxmenu_module-widget-box.o `test -f 'gfxmenu/widget-box.c' || echo '$(srcdir)/'`gfxmenu/widget-box.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-widget-box.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-widget-box.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/widget-box.c' object='gfxmenu/gfxmenu_module-widget-box.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-widget-box.o `test -f 'gfxmenu/widget-box.c' || echo '$(srcdir)/'`gfxmenu/widget-box.c + +gfxmenu/gfxmenu_module-widget-box.obj: gfxmenu/widget-box.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-widget-box.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-widget-box.Tpo -c -o gfxmenu/gfxmenu_module-widget-box.obj `if test -f 'gfxmenu/widget-box.c'; then $(CYGPATH_W) 'gfxmenu/widget-box.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/widget-box.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-widget-box.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-widget-box.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/widget-box.c' object='gfxmenu/gfxmenu_module-widget-box.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-widget-box.obj `if test -f 'gfxmenu/widget-box.c'; then $(CYGPATH_W) 'gfxmenu/widget-box.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/widget-box.c'; fi` + +gfxmenu/gfxmenu_module-gui_canvas.o: gfxmenu/gui_canvas.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_canvas.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_canvas.Tpo -c -o gfxmenu/gfxmenu_module-gui_canvas.o `test -f 'gfxmenu/gui_canvas.c' || echo '$(srcdir)/'`gfxmenu/gui_canvas.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_canvas.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_canvas.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_canvas.c' object='gfxmenu/gfxmenu_module-gui_canvas.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_canvas.o `test -f 'gfxmenu/gui_canvas.c' || echo '$(srcdir)/'`gfxmenu/gui_canvas.c + +gfxmenu/gfxmenu_module-gui_canvas.obj: gfxmenu/gui_canvas.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_canvas.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_canvas.Tpo -c -o gfxmenu/gfxmenu_module-gui_canvas.obj `if test -f 'gfxmenu/gui_canvas.c'; then $(CYGPATH_W) 'gfxmenu/gui_canvas.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_canvas.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_canvas.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_canvas.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_canvas.c' object='gfxmenu/gfxmenu_module-gui_canvas.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_canvas.obj `if test -f 'gfxmenu/gui_canvas.c'; then $(CYGPATH_W) 'gfxmenu/gui_canvas.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_canvas.c'; fi` + +gfxmenu/gfxmenu_module-gui_circular_progress.o: gfxmenu/gui_circular_progress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_circular_progress.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_circular_progress.Tpo -c -o gfxmenu/gfxmenu_module-gui_circular_progress.o `test -f 'gfxmenu/gui_circular_progress.c' || echo '$(srcdir)/'`gfxmenu/gui_circular_progress.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_circular_progress.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_circular_progress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_circular_progress.c' object='gfxmenu/gfxmenu_module-gui_circular_progress.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_circular_progress.o `test -f 'gfxmenu/gui_circular_progress.c' || echo '$(srcdir)/'`gfxmenu/gui_circular_progress.c + +gfxmenu/gfxmenu_module-gui_circular_progress.obj: gfxmenu/gui_circular_progress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_circular_progress.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_circular_progress.Tpo -c -o gfxmenu/gfxmenu_module-gui_circular_progress.obj `if test -f 'gfxmenu/gui_circular_progress.c'; then $(CYGPATH_W) 'gfxmenu/gui_circular_progress.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_circular_progress.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_circular_progress.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_circular_progress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_circular_progress.c' object='gfxmenu/gfxmenu_module-gui_circular_progress.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_circular_progress.obj `if test -f 'gfxmenu/gui_circular_progress.c'; then $(CYGPATH_W) 'gfxmenu/gui_circular_progress.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_circular_progress.c'; fi` + +gfxmenu/gfxmenu_module-gui_box.o: gfxmenu/gui_box.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_box.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_box.Tpo -c -o gfxmenu/gfxmenu_module-gui_box.o `test -f 'gfxmenu/gui_box.c' || echo '$(srcdir)/'`gfxmenu/gui_box.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_box.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_box.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_box.c' object='gfxmenu/gfxmenu_module-gui_box.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_box.o `test -f 'gfxmenu/gui_box.c' || echo '$(srcdir)/'`gfxmenu/gui_box.c + +gfxmenu/gfxmenu_module-gui_box.obj: gfxmenu/gui_box.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_box.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_box.Tpo -c -o gfxmenu/gfxmenu_module-gui_box.obj `if test -f 'gfxmenu/gui_box.c'; then $(CYGPATH_W) 'gfxmenu/gui_box.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_box.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_box.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_box.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_box.c' object='gfxmenu/gfxmenu_module-gui_box.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_box.obj `if test -f 'gfxmenu/gui_box.c'; then $(CYGPATH_W) 'gfxmenu/gui_box.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_box.c'; fi` + +gfxmenu/gfxmenu_module-gui_label.o: gfxmenu/gui_label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_label.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_label.Tpo -c -o gfxmenu/gfxmenu_module-gui_label.o `test -f 'gfxmenu/gui_label.c' || echo '$(srcdir)/'`gfxmenu/gui_label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_label.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_label.c' object='gfxmenu/gfxmenu_module-gui_label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_label.o `test -f 'gfxmenu/gui_label.c' || echo '$(srcdir)/'`gfxmenu/gui_label.c + +gfxmenu/gfxmenu_module-gui_label.obj: gfxmenu/gui_label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_label.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_label.Tpo -c -o gfxmenu/gfxmenu_module-gui_label.obj `if test -f 'gfxmenu/gui_label.c'; then $(CYGPATH_W) 'gfxmenu/gui_label.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_label.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_label.c' object='gfxmenu/gfxmenu_module-gui_label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_label.obj `if test -f 'gfxmenu/gui_label.c'; then $(CYGPATH_W) 'gfxmenu/gui_label.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_label.c'; fi` + +gfxmenu/gfxmenu_module-gui_list.o: gfxmenu/gui_list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_list.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_list.Tpo -c -o gfxmenu/gfxmenu_module-gui_list.o `test -f 'gfxmenu/gui_list.c' || echo '$(srcdir)/'`gfxmenu/gui_list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_list.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_list.c' object='gfxmenu/gfxmenu_module-gui_list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_list.o `test -f 'gfxmenu/gui_list.c' || echo '$(srcdir)/'`gfxmenu/gui_list.c + +gfxmenu/gfxmenu_module-gui_list.obj: gfxmenu/gui_list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_list.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_list.Tpo -c -o gfxmenu/gfxmenu_module-gui_list.obj `if test -f 'gfxmenu/gui_list.c'; then $(CYGPATH_W) 'gfxmenu/gui_list.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_list.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_list.c' object='gfxmenu/gfxmenu_module-gui_list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_list.obj `if test -f 'gfxmenu/gui_list.c'; then $(CYGPATH_W) 'gfxmenu/gui_list.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_list.c'; fi` + +gfxmenu/gfxmenu_module-gui_image.o: gfxmenu/gui_image.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_image.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_image.Tpo -c -o gfxmenu/gfxmenu_module-gui_image.o `test -f 'gfxmenu/gui_image.c' || echo '$(srcdir)/'`gfxmenu/gui_image.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_image.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_image.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_image.c' object='gfxmenu/gfxmenu_module-gui_image.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_image.o `test -f 'gfxmenu/gui_image.c' || echo '$(srcdir)/'`gfxmenu/gui_image.c + +gfxmenu/gfxmenu_module-gui_image.obj: gfxmenu/gui_image.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_image.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_image.Tpo -c -o gfxmenu/gfxmenu_module-gui_image.obj `if test -f 'gfxmenu/gui_image.c'; then $(CYGPATH_W) 'gfxmenu/gui_image.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_image.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_image.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_image.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_image.c' object='gfxmenu/gfxmenu_module-gui_image.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_image.obj `if test -f 'gfxmenu/gui_image.c'; then $(CYGPATH_W) 'gfxmenu/gui_image.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_image.c'; fi` + +gfxmenu/gfxmenu_module-gui_progress_bar.o: gfxmenu/gui_progress_bar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_progress_bar.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_progress_bar.Tpo -c -o gfxmenu/gfxmenu_module-gui_progress_bar.o `test -f 'gfxmenu/gui_progress_bar.c' || echo '$(srcdir)/'`gfxmenu/gui_progress_bar.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_progress_bar.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_progress_bar.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_progress_bar.c' object='gfxmenu/gfxmenu_module-gui_progress_bar.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_progress_bar.o `test -f 'gfxmenu/gui_progress_bar.c' || echo '$(srcdir)/'`gfxmenu/gui_progress_bar.c + +gfxmenu/gfxmenu_module-gui_progress_bar.obj: gfxmenu/gui_progress_bar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_progress_bar.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_progress_bar.Tpo -c -o gfxmenu/gfxmenu_module-gui_progress_bar.obj `if test -f 'gfxmenu/gui_progress_bar.c'; then $(CYGPATH_W) 'gfxmenu/gui_progress_bar.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_progress_bar.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_progress_bar.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_progress_bar.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_progress_bar.c' object='gfxmenu/gfxmenu_module-gui_progress_bar.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_progress_bar.obj `if test -f 'gfxmenu/gui_progress_bar.c'; then $(CYGPATH_W) 'gfxmenu/gui_progress_bar.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_progress_bar.c'; fi` + +gfxmenu/gfxmenu_module-gui_util.o: gfxmenu/gui_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_util.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_util.Tpo -c -o gfxmenu/gfxmenu_module-gui_util.o `test -f 'gfxmenu/gui_util.c' || echo '$(srcdir)/'`gfxmenu/gui_util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_util.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_util.c' object='gfxmenu/gfxmenu_module-gui_util.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_util.o `test -f 'gfxmenu/gui_util.c' || echo '$(srcdir)/'`gfxmenu/gui_util.c + +gfxmenu/gfxmenu_module-gui_util.obj: gfxmenu/gui_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_util.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_util.Tpo -c -o gfxmenu/gfxmenu_module-gui_util.obj `if test -f 'gfxmenu/gui_util.c'; then $(CYGPATH_W) 'gfxmenu/gui_util.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_util.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_util.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_util.c' object='gfxmenu/gfxmenu_module-gui_util.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_util.obj `if test -f 'gfxmenu/gui_util.c'; then $(CYGPATH_W) 'gfxmenu/gui_util.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_util.c'; fi` + +gfxmenu/gfxmenu_module-gui_string_util.o: gfxmenu/gui_string_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_string_util.o -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_string_util.Tpo -c -o gfxmenu/gfxmenu_module-gui_string_util.o `test -f 'gfxmenu/gui_string_util.c' || echo '$(srcdir)/'`gfxmenu/gui_string_util.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_string_util.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_string_util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_string_util.c' object='gfxmenu/gfxmenu_module-gui_string_util.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_string_util.o `test -f 'gfxmenu/gui_string_util.c' || echo '$(srcdir)/'`gfxmenu/gui_string_util.c + +gfxmenu/gfxmenu_module-gui_string_util.obj: gfxmenu/gui_string_util.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -MT gfxmenu/gfxmenu_module-gui_string_util.obj -MD -MP -MF gfxmenu/$(DEPDIR)/gfxmenu_module-gui_string_util.Tpo -c -o gfxmenu/gfxmenu_module-gui_string_util.obj `if test -f 'gfxmenu/gui_string_util.c'; then $(CYGPATH_W) 'gfxmenu/gui_string_util.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_string_util.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gfxmenu/$(DEPDIR)/gfxmenu_module-gui_string_util.Tpo gfxmenu/$(DEPDIR)/gfxmenu_module-gui_string_util.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfxmenu/gui_string_util.c' object='gfxmenu/gfxmenu_module-gui_string_util.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $(gfxmenu_module_CFLAGS) $(CFLAGS) -c -o gfxmenu/gfxmenu_module-gui_string_util.obj `if test -f 'gfxmenu/gui_string_util.c'; then $(CYGPATH_W) 'gfxmenu/gui_string_util.c'; else $(CYGPATH_W) '$(srcdir)/gfxmenu/gui_string_util.c'; fi` + +term/gfxterm_module-gfxterm.o: term/gfxterm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_module_CFLAGS) $(CFLAGS) -MT term/gfxterm_module-gfxterm.o -MD -MP -MF term/$(DEPDIR)/gfxterm_module-gfxterm.Tpo -c -o term/gfxterm_module-gfxterm.o `test -f 'term/gfxterm.c' || echo '$(srcdir)/'`term/gfxterm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/gfxterm_module-gfxterm.Tpo term/$(DEPDIR)/gfxterm_module-gfxterm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/gfxterm.c' object='term/gfxterm_module-gfxterm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_module_CFLAGS) $(CFLAGS) -c -o term/gfxterm_module-gfxterm.o `test -f 'term/gfxterm.c' || echo '$(srcdir)/'`term/gfxterm.c + +term/gfxterm_module-gfxterm.obj: term/gfxterm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_module_CFLAGS) $(CFLAGS) -MT term/gfxterm_module-gfxterm.obj -MD -MP -MF term/$(DEPDIR)/gfxterm_module-gfxterm.Tpo -c -o term/gfxterm_module-gfxterm.obj `if test -f 'term/gfxterm.c'; then $(CYGPATH_W) 'term/gfxterm.c'; else $(CYGPATH_W) '$(srcdir)/term/gfxterm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/gfxterm_module-gfxterm.Tpo term/$(DEPDIR)/gfxterm_module-gfxterm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/gfxterm.c' object='term/gfxterm_module-gfxterm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_module_CFLAGS) $(CFLAGS) -c -o term/gfxterm_module-gfxterm.obj `if test -f 'term/gfxterm.c'; then $(CYGPATH_W) 'term/gfxterm.c'; else $(CYGPATH_W) '$(srcdir)/term/gfxterm.c'; fi` + +term/gfxterm_background_module-gfxterm_background.o: term/gfxterm_background.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_background_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_background_module_CFLAGS) $(CFLAGS) -MT term/gfxterm_background_module-gfxterm_background.o -MD -MP -MF term/$(DEPDIR)/gfxterm_background_module-gfxterm_background.Tpo -c -o term/gfxterm_background_module-gfxterm_background.o `test -f 'term/gfxterm_background.c' || echo '$(srcdir)/'`term/gfxterm_background.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/gfxterm_background_module-gfxterm_background.Tpo term/$(DEPDIR)/gfxterm_background_module-gfxterm_background.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/gfxterm_background.c' object='term/gfxterm_background_module-gfxterm_background.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_background_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_background_module_CFLAGS) $(CFLAGS) -c -o term/gfxterm_background_module-gfxterm_background.o `test -f 'term/gfxterm_background.c' || echo '$(srcdir)/'`term/gfxterm_background.c + +term/gfxterm_background_module-gfxterm_background.obj: term/gfxterm_background.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_background_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_background_module_CFLAGS) $(CFLAGS) -MT term/gfxterm_background_module-gfxterm_background.obj -MD -MP -MF term/$(DEPDIR)/gfxterm_background_module-gfxterm_background.Tpo -c -o term/gfxterm_background_module-gfxterm_background.obj `if test -f 'term/gfxterm_background.c'; then $(CYGPATH_W) 'term/gfxterm_background.c'; else $(CYGPATH_W) '$(srcdir)/term/gfxterm_background.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/gfxterm_background_module-gfxterm_background.Tpo term/$(DEPDIR)/gfxterm_background_module-gfxterm_background.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/gfxterm_background.c' object='term/gfxterm_background_module-gfxterm_background.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_background_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_background_module_CFLAGS) $(CFLAGS) -c -o term/gfxterm_background_module-gfxterm_background.obj `if test -f 'term/gfxterm_background.c'; then $(CYGPATH_W) 'term/gfxterm_background.c'; else $(CYGPATH_W) '$(srcdir)/term/gfxterm_background.c'; fi` + +tests/gfxterm_menu_module-gfxterm_menu.o: tests/gfxterm_menu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_menu_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_menu_module_CFLAGS) $(CFLAGS) -MT tests/gfxterm_menu_module-gfxterm_menu.o -MD -MP -MF tests/$(DEPDIR)/gfxterm_menu_module-gfxterm_menu.Tpo -c -o tests/gfxterm_menu_module-gfxterm_menu.o `test -f 'tests/gfxterm_menu.c' || echo '$(srcdir)/'`tests/gfxterm_menu.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/gfxterm_menu_module-gfxterm_menu.Tpo tests/$(DEPDIR)/gfxterm_menu_module-gfxterm_menu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/gfxterm_menu.c' object='tests/gfxterm_menu_module-gfxterm_menu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_menu_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_menu_module_CFLAGS) $(CFLAGS) -c -o tests/gfxterm_menu_module-gfxterm_menu.o `test -f 'tests/gfxterm_menu.c' || echo '$(srcdir)/'`tests/gfxterm_menu.c + +tests/gfxterm_menu_module-gfxterm_menu.obj: tests/gfxterm_menu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_menu_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_menu_module_CFLAGS) $(CFLAGS) -MT tests/gfxterm_menu_module-gfxterm_menu.obj -MD -MP -MF tests/$(DEPDIR)/gfxterm_menu_module-gfxterm_menu.Tpo -c -o tests/gfxterm_menu_module-gfxterm_menu.obj `if test -f 'tests/gfxterm_menu.c'; then $(CYGPATH_W) 'tests/gfxterm_menu.c'; else $(CYGPATH_W) '$(srcdir)/tests/gfxterm_menu.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/gfxterm_menu_module-gfxterm_menu.Tpo tests/$(DEPDIR)/gfxterm_menu_module-gfxterm_menu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/gfxterm_menu.c' object='tests/gfxterm_menu_module-gfxterm_menu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_menu_module_CPPFLAGS) $(CPPFLAGS) $(gfxterm_menu_module_CFLAGS) $(CFLAGS) -c -o tests/gfxterm_menu_module-gfxterm_menu.obj `if test -f 'tests/gfxterm_menu.c'; then $(CYGPATH_W) 'tests/gfxterm_menu.c'; else $(CYGPATH_W) '$(srcdir)/tests/gfxterm_menu.c'; fi` + +commands/gptsync_module-gptsync.o: commands/gptsync.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gptsync_module_CPPFLAGS) $(CPPFLAGS) $(gptsync_module_CFLAGS) $(CFLAGS) -MT commands/gptsync_module-gptsync.o -MD -MP -MF commands/$(DEPDIR)/gptsync_module-gptsync.Tpo -c -o commands/gptsync_module-gptsync.o `test -f 'commands/gptsync.c' || echo '$(srcdir)/'`commands/gptsync.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/gptsync_module-gptsync.Tpo commands/$(DEPDIR)/gptsync_module-gptsync.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/gptsync.c' object='commands/gptsync_module-gptsync.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gptsync_module_CPPFLAGS) $(CPPFLAGS) $(gptsync_module_CFLAGS) $(CFLAGS) -c -o commands/gptsync_module-gptsync.o `test -f 'commands/gptsync.c' || echo '$(srcdir)/'`commands/gptsync.c + +commands/gptsync_module-gptsync.obj: commands/gptsync.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gptsync_module_CPPFLAGS) $(CPPFLAGS) $(gptsync_module_CFLAGS) $(CFLAGS) -MT commands/gptsync_module-gptsync.obj -MD -MP -MF commands/$(DEPDIR)/gptsync_module-gptsync.Tpo -c -o commands/gptsync_module-gptsync.obj `if test -f 'commands/gptsync.c'; then $(CYGPATH_W) 'commands/gptsync.c'; else $(CYGPATH_W) '$(srcdir)/commands/gptsync.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/gptsync_module-gptsync.Tpo commands/$(DEPDIR)/gptsync_module-gptsync.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/gptsync.c' object='commands/gptsync_module-gptsync.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gptsync_module_CPPFLAGS) $(CPPFLAGS) $(gptsync_module_CFLAGS) $(CFLAGS) -c -o commands/gptsync_module-gptsync.obj `if test -f 'commands/gptsync.c'; then $(CYGPATH_W) 'commands/gptsync.c'; else $(CYGPATH_W) '$(srcdir)/commands/gptsync.c'; fi` + +kern/emu/grub_emu-full.o: kern/emu/full.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -MT kern/emu/grub_emu-full.o -MD -MP -MF kern/emu/$(DEPDIR)/grub_emu-full.Tpo -c -o kern/emu/grub_emu-full.o `test -f 'kern/emu/full.c' || echo '$(srcdir)/'`kern/emu/full.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/grub_emu-full.Tpo kern/emu/$(DEPDIR)/grub_emu-full.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/full.c' object='kern/emu/grub_emu-full.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -c -o kern/emu/grub_emu-full.o `test -f 'kern/emu/full.c' || echo '$(srcdir)/'`kern/emu/full.c + +kern/emu/grub_emu-full.obj: kern/emu/full.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -MT kern/emu/grub_emu-full.obj -MD -MP -MF kern/emu/$(DEPDIR)/grub_emu-full.Tpo -c -o kern/emu/grub_emu-full.obj `if test -f 'kern/emu/full.c'; then $(CYGPATH_W) 'kern/emu/full.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/full.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/grub_emu-full.Tpo kern/emu/$(DEPDIR)/grub_emu-full.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/full.c' object='kern/emu/grub_emu-full.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -c -o kern/emu/grub_emu-full.obj `if test -f 'kern/emu/full.c'; then $(CYGPATH_W) 'kern/emu/full.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/full.c'; fi` + +grub_emu-grub_emu_init.o: grub_emu_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -MT grub_emu-grub_emu_init.o -MD -MP -MF $(DEPDIR)/grub_emu-grub_emu_init.Tpo -c -o grub_emu-grub_emu_init.o `test -f 'grub_emu_init.c' || echo '$(srcdir)/'`grub_emu_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_emu-grub_emu_init.Tpo $(DEPDIR)/grub_emu-grub_emu_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_emu_init.c' object='grub_emu-grub_emu_init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -c -o grub_emu-grub_emu_init.o `test -f 'grub_emu_init.c' || echo '$(srcdir)/'`grub_emu_init.c + +grub_emu-grub_emu_init.obj: grub_emu_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -MT grub_emu-grub_emu_init.obj -MD -MP -MF $(DEPDIR)/grub_emu-grub_emu_init.Tpo -c -o grub_emu-grub_emu_init.obj `if test -f 'grub_emu_init.c'; then $(CYGPATH_W) 'grub_emu_init.c'; else $(CYGPATH_W) '$(srcdir)/grub_emu_init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_emu-grub_emu_init.Tpo $(DEPDIR)/grub_emu-grub_emu_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_emu_init.c' object='grub_emu-grub_emu_init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_CPPFLAGS) $(CPPFLAGS) $(grub_emu_CFLAGS) $(CFLAGS) -c -o grub_emu-grub_emu_init.obj `if test -f 'grub_emu_init.c'; then $(CYGPATH_W) 'grub_emu_init.c'; else $(CYGPATH_W) '$(srcdir)/grub_emu_init.c'; fi` + +kern/emu/grub_emu_lite-lite.o: kern/emu/lite.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -MT kern/emu/grub_emu_lite-lite.o -MD -MP -MF kern/emu/$(DEPDIR)/grub_emu_lite-lite.Tpo -c -o kern/emu/grub_emu_lite-lite.o `test -f 'kern/emu/lite.c' || echo '$(srcdir)/'`kern/emu/lite.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/grub_emu_lite-lite.Tpo kern/emu/$(DEPDIR)/grub_emu_lite-lite.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/lite.c' object='kern/emu/grub_emu_lite-lite.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -c -o kern/emu/grub_emu_lite-lite.o `test -f 'kern/emu/lite.c' || echo '$(srcdir)/'`kern/emu/lite.c + +kern/emu/grub_emu_lite-lite.obj: kern/emu/lite.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -MT kern/emu/grub_emu_lite-lite.obj -MD -MP -MF kern/emu/$(DEPDIR)/grub_emu_lite-lite.Tpo -c -o kern/emu/grub_emu_lite-lite.obj `if test -f 'kern/emu/lite.c'; then $(CYGPATH_W) 'kern/emu/lite.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/lite.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/grub_emu_lite-lite.Tpo kern/emu/$(DEPDIR)/grub_emu_lite-lite.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/lite.c' object='kern/emu/grub_emu_lite-lite.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -c -o kern/emu/grub_emu_lite-lite.obj `if test -f 'kern/emu/lite.c'; then $(CYGPATH_W) 'kern/emu/lite.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/lite.c'; fi` + +grub_emu_lite-symlist.o: symlist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -MT grub_emu_lite-symlist.o -MD -MP -MF $(DEPDIR)/grub_emu_lite-symlist.Tpo -c -o grub_emu_lite-symlist.o `test -f 'symlist.c' || echo '$(srcdir)/'`symlist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_emu_lite-symlist.Tpo $(DEPDIR)/grub_emu_lite-symlist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symlist.c' object='grub_emu_lite-symlist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -c -o grub_emu_lite-symlist.o `test -f 'symlist.c' || echo '$(srcdir)/'`symlist.c + +grub_emu_lite-symlist.obj: symlist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -MT grub_emu_lite-symlist.obj -MD -MP -MF $(DEPDIR)/grub_emu_lite-symlist.Tpo -c -o grub_emu_lite-symlist.obj `if test -f 'symlist.c'; then $(CYGPATH_W) 'symlist.c'; else $(CYGPATH_W) '$(srcdir)/symlist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/grub_emu_lite-symlist.Tpo $(DEPDIR)/grub_emu_lite-symlist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symlist.c' object='grub_emu_lite-symlist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_emu_lite_CPPFLAGS) $(CPPFLAGS) $(grub_emu_lite_CFLAGS) $(CFLAGS) -c -o grub_emu_lite-symlist.obj `if test -f 'symlist.c'; then $(CYGPATH_W) 'symlist.c'; else $(CYGPATH_W) '$(srcdir)/symlist.c'; fi` + +io/gzio_module-gzio.o: io/gzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gzio_module_CPPFLAGS) $(CPPFLAGS) $(gzio_module_CFLAGS) $(CFLAGS) -MT io/gzio_module-gzio.o -MD -MP -MF io/$(DEPDIR)/gzio_module-gzio.Tpo -c -o io/gzio_module-gzio.o `test -f 'io/gzio.c' || echo '$(srcdir)/'`io/gzio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/gzio_module-gzio.Tpo io/$(DEPDIR)/gzio_module-gzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/gzio.c' object='io/gzio_module-gzio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gzio_module_CPPFLAGS) $(CPPFLAGS) $(gzio_module_CFLAGS) $(CFLAGS) -c -o io/gzio_module-gzio.o `test -f 'io/gzio.c' || echo '$(srcdir)/'`io/gzio.c + +io/gzio_module-gzio.obj: io/gzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gzio_module_CPPFLAGS) $(CPPFLAGS) $(gzio_module_CFLAGS) $(CFLAGS) -MT io/gzio_module-gzio.obj -MD -MP -MF io/$(DEPDIR)/gzio_module-gzio.Tpo -c -o io/gzio_module-gzio.obj `if test -f 'io/gzio.c'; then $(CYGPATH_W) 'io/gzio.c'; else $(CYGPATH_W) '$(srcdir)/io/gzio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/gzio_module-gzio.Tpo io/$(DEPDIR)/gzio_module-gzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/gzio.c' object='io/gzio_module-gzio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gzio_module_CPPFLAGS) $(CPPFLAGS) $(gzio_module_CFLAGS) $(CFLAGS) -c -o io/gzio_module-gzio.obj `if test -f 'io/gzio.c'; then $(CYGPATH_W) 'io/gzio.c'; else $(CYGPATH_W) '$(srcdir)/io/gzio.c'; fi` + +lib/efi/halt_module-halt.o: lib/efi/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/efi/halt_module-halt.o -MD -MP -MF lib/efi/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/efi/halt_module-halt.o `test -f 'lib/efi/halt.c' || echo '$(srcdir)/'`lib/efi/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/halt_module-halt.Tpo lib/efi/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/halt.c' object='lib/efi/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/efi/halt_module-halt.o `test -f 'lib/efi/halt.c' || echo '$(srcdir)/'`lib/efi/halt.c + +lib/efi/halt_module-halt.obj: lib/efi/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/efi/halt_module-halt.obj -MD -MP -MF lib/efi/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/efi/halt_module-halt.obj `if test -f 'lib/efi/halt.c'; then $(CYGPATH_W) 'lib/efi/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/halt_module-halt.Tpo lib/efi/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/halt.c' object='lib/efi/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/efi/halt_module-halt.obj `if test -f 'lib/efi/halt.c'; then $(CYGPATH_W) 'lib/efi/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/halt.c'; fi` + +commands/halt_module-halt.o: commands/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT commands/halt_module-halt.o -MD -MP -MF commands/$(DEPDIR)/halt_module-halt.Tpo -c -o commands/halt_module-halt.o `test -f 'commands/halt.c' || echo '$(srcdir)/'`commands/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/halt_module-halt.Tpo commands/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/halt.c' object='commands/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o commands/halt_module-halt.o `test -f 'commands/halt.c' || echo '$(srcdir)/'`commands/halt.c + +commands/halt_module-halt.obj: commands/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT commands/halt_module-halt.obj -MD -MP -MF commands/$(DEPDIR)/halt_module-halt.Tpo -c -o commands/halt_module-halt.obj `if test -f 'commands/halt.c'; then $(CYGPATH_W) 'commands/halt.c'; else $(CYGPATH_W) '$(srcdir)/commands/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/halt_module-halt.Tpo commands/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/halt.c' object='commands/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o commands/halt_module-halt.obj `if test -f 'commands/halt.c'; then $(CYGPATH_W) 'commands/halt.c'; else $(CYGPATH_W) '$(srcdir)/commands/halt.c'; fi` + +lib/uboot/halt_module-halt.o: lib/uboot/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/uboot/halt_module-halt.o -MD -MP -MF lib/uboot/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/uboot/halt_module-halt.o `test -f 'lib/uboot/halt.c' || echo '$(srcdir)/'`lib/uboot/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/uboot/$(DEPDIR)/halt_module-halt.Tpo lib/uboot/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/uboot/halt.c' object='lib/uboot/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/uboot/halt_module-halt.o `test -f 'lib/uboot/halt.c' || echo '$(srcdir)/'`lib/uboot/halt.c + +lib/uboot/halt_module-halt.obj: lib/uboot/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/uboot/halt_module-halt.obj -MD -MP -MF lib/uboot/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/uboot/halt_module-halt.obj `if test -f 'lib/uboot/halt.c'; then $(CYGPATH_W) 'lib/uboot/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/uboot/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/uboot/$(DEPDIR)/halt_module-halt.Tpo lib/uboot/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/uboot/halt.c' object='lib/uboot/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/uboot/halt_module-halt.obj `if test -f 'lib/uboot/halt.c'; then $(CYGPATH_W) 'lib/uboot/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/uboot/halt.c'; fi` + +lib/emu/halt_module-halt.o: lib/emu/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/emu/halt_module-halt.o -MD -MP -MF lib/emu/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/emu/halt_module-halt.o `test -f 'lib/emu/halt.c' || echo '$(srcdir)/'`lib/emu/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/emu/$(DEPDIR)/halt_module-halt.Tpo lib/emu/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/emu/halt.c' object='lib/emu/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/emu/halt_module-halt.o `test -f 'lib/emu/halt.c' || echo '$(srcdir)/'`lib/emu/halt.c + +lib/emu/halt_module-halt.obj: lib/emu/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/emu/halt_module-halt.obj -MD -MP -MF lib/emu/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/emu/halt_module-halt.obj `if test -f 'lib/emu/halt.c'; then $(CYGPATH_W) 'lib/emu/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/emu/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/emu/$(DEPDIR)/halt_module-halt.Tpo lib/emu/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/emu/halt.c' object='lib/emu/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/emu/halt_module-halt.obj `if test -f 'lib/emu/halt.c'; then $(CYGPATH_W) 'lib/emu/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/emu/halt.c'; fi` + +commands/halt_module-acpihalt.o: commands/acpihalt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT commands/halt_module-acpihalt.o -MD -MP -MF commands/$(DEPDIR)/halt_module-acpihalt.Tpo -c -o commands/halt_module-acpihalt.o `test -f 'commands/acpihalt.c' || echo '$(srcdir)/'`commands/acpihalt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/halt_module-acpihalt.Tpo commands/$(DEPDIR)/halt_module-acpihalt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/acpihalt.c' object='commands/halt_module-acpihalt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o commands/halt_module-acpihalt.o `test -f 'commands/acpihalt.c' || echo '$(srcdir)/'`commands/acpihalt.c + +commands/halt_module-acpihalt.obj: commands/acpihalt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT commands/halt_module-acpihalt.obj -MD -MP -MF commands/$(DEPDIR)/halt_module-acpihalt.Tpo -c -o commands/halt_module-acpihalt.obj `if test -f 'commands/acpihalt.c'; then $(CYGPATH_W) 'commands/acpihalt.c'; else $(CYGPATH_W) '$(srcdir)/commands/acpihalt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/halt_module-acpihalt.Tpo commands/$(DEPDIR)/halt_module-acpihalt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/acpihalt.c' object='commands/halt_module-acpihalt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o commands/halt_module-acpihalt.obj `if test -f 'commands/acpihalt.c'; then $(CYGPATH_W) 'commands/acpihalt.c'; else $(CYGPATH_W) '$(srcdir)/commands/acpihalt.c'; fi` + +lib/i386/halt_module-halt.o: lib/i386/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/i386/halt_module-halt.o -MD -MP -MF lib/i386/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/i386/halt_module-halt.o `test -f 'lib/i386/halt.c' || echo '$(srcdir)/'`lib/i386/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/halt_module-halt.Tpo lib/i386/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/halt.c' object='lib/i386/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/i386/halt_module-halt.o `test -f 'lib/i386/halt.c' || echo '$(srcdir)/'`lib/i386/halt.c + +lib/i386/halt_module-halt.obj: lib/i386/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/i386/halt_module-halt.obj -MD -MP -MF lib/i386/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/i386/halt_module-halt.obj `if test -f 'lib/i386/halt.c'; then $(CYGPATH_W) 'lib/i386/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/halt_module-halt.Tpo lib/i386/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/halt.c' object='lib/i386/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/i386/halt_module-halt.obj `if test -f 'lib/i386/halt.c'; then $(CYGPATH_W) 'lib/i386/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/halt.c'; fi` + +lib/ieee1275/halt_module-halt.o: lib/ieee1275/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/halt_module-halt.o -MD -MP -MF lib/ieee1275/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/ieee1275/halt_module-halt.o `test -f 'lib/ieee1275/halt.c' || echo '$(srcdir)/'`lib/ieee1275/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/halt_module-halt.Tpo lib/ieee1275/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/halt.c' object='lib/ieee1275/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/halt_module-halt.o `test -f 'lib/ieee1275/halt.c' || echo '$(srcdir)/'`lib/ieee1275/halt.c + +lib/ieee1275/halt_module-halt.obj: lib/ieee1275/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/halt_module-halt.obj -MD -MP -MF lib/ieee1275/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/ieee1275/halt_module-halt.obj `if test -f 'lib/ieee1275/halt.c'; then $(CYGPATH_W) 'lib/ieee1275/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/halt_module-halt.Tpo lib/ieee1275/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/halt.c' object='lib/ieee1275/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/halt_module-halt.obj `if test -f 'lib/ieee1275/halt.c'; then $(CYGPATH_W) 'lib/ieee1275/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/halt.c'; fi` + +commands/i386/pc/halt_module-halt.o: commands/i386/pc/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/halt_module-halt.o -MD -MP -MF commands/i386/pc/$(DEPDIR)/halt_module-halt.Tpo -c -o commands/i386/pc/halt_module-halt.o `test -f 'commands/i386/pc/halt.c' || echo '$(srcdir)/'`commands/i386/pc/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/halt_module-halt.Tpo commands/i386/pc/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/halt.c' object='commands/i386/pc/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/halt_module-halt.o `test -f 'commands/i386/pc/halt.c' || echo '$(srcdir)/'`commands/i386/pc/halt.c + +commands/i386/pc/halt_module-halt.obj: commands/i386/pc/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/halt_module-halt.obj -MD -MP -MF commands/i386/pc/$(DEPDIR)/halt_module-halt.Tpo -c -o commands/i386/pc/halt_module-halt.obj `if test -f 'commands/i386/pc/halt.c'; then $(CYGPATH_W) 'commands/i386/pc/halt.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/halt_module-halt.Tpo commands/i386/pc/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/halt.c' object='commands/i386/pc/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/halt_module-halt.obj `if test -f 'commands/i386/pc/halt.c'; then $(CYGPATH_W) 'commands/i386/pc/halt.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/halt.c'; fi` + +lib/xen/halt_module-halt.o: lib/xen/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/xen/halt_module-halt.o -MD -MP -MF lib/xen/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/xen/halt_module-halt.o `test -f 'lib/xen/halt.c' || echo '$(srcdir)/'`lib/xen/halt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/halt_module-halt.Tpo lib/xen/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/halt.c' object='lib/xen/halt_module-halt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/xen/halt_module-halt.o `test -f 'lib/xen/halt.c' || echo '$(srcdir)/'`lib/xen/halt.c + +lib/xen/halt_module-halt.obj: lib/xen/halt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -MT lib/xen/halt_module-halt.obj -MD -MP -MF lib/xen/$(DEPDIR)/halt_module-halt.Tpo -c -o lib/xen/halt_module-halt.obj `if test -f 'lib/xen/halt.c'; then $(CYGPATH_W) 'lib/xen/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/halt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/halt_module-halt.Tpo lib/xen/$(DEPDIR)/halt_module-halt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/halt.c' object='lib/xen/halt_module-halt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $(halt_module_CFLAGS) $(CFLAGS) -c -o lib/xen/halt_module-halt.obj `if test -f 'lib/xen/halt.c'; then $(CYGPATH_W) 'lib/xen/halt.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/halt.c'; fi` + +commands/hashsum_module-hashsum.o: commands/hashsum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashsum_module_CPPFLAGS) $(CPPFLAGS) $(hashsum_module_CFLAGS) $(CFLAGS) -MT commands/hashsum_module-hashsum.o -MD -MP -MF commands/$(DEPDIR)/hashsum_module-hashsum.Tpo -c -o commands/hashsum_module-hashsum.o `test -f 'commands/hashsum.c' || echo '$(srcdir)/'`commands/hashsum.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/hashsum_module-hashsum.Tpo commands/$(DEPDIR)/hashsum_module-hashsum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/hashsum.c' object='commands/hashsum_module-hashsum.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashsum_module_CPPFLAGS) $(CPPFLAGS) $(hashsum_module_CFLAGS) $(CFLAGS) -c -o commands/hashsum_module-hashsum.o `test -f 'commands/hashsum.c' || echo '$(srcdir)/'`commands/hashsum.c + +commands/hashsum_module-hashsum.obj: commands/hashsum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashsum_module_CPPFLAGS) $(CPPFLAGS) $(hashsum_module_CFLAGS) $(CFLAGS) -MT commands/hashsum_module-hashsum.obj -MD -MP -MF commands/$(DEPDIR)/hashsum_module-hashsum.Tpo -c -o commands/hashsum_module-hashsum.obj `if test -f 'commands/hashsum.c'; then $(CYGPATH_W) 'commands/hashsum.c'; else $(CYGPATH_W) '$(srcdir)/commands/hashsum.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/hashsum_module-hashsum.Tpo commands/$(DEPDIR)/hashsum_module-hashsum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/hashsum.c' object='commands/hashsum_module-hashsum.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashsum_module_CPPFLAGS) $(CPPFLAGS) $(hashsum_module_CFLAGS) $(CFLAGS) -c -o commands/hashsum_module-hashsum.obj `if test -f 'commands/hashsum.c'; then $(CYGPATH_W) 'commands/hashsum.c'; else $(CYGPATH_W) '$(srcdir)/commands/hashsum.c'; fi` + +commands/hdparm_module-hdparm.o: commands/hdparm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -MT commands/hdparm_module-hdparm.o -MD -MP -MF commands/$(DEPDIR)/hdparm_module-hdparm.Tpo -c -o commands/hdparm_module-hdparm.o `test -f 'commands/hdparm.c' || echo '$(srcdir)/'`commands/hdparm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/hdparm_module-hdparm.Tpo commands/$(DEPDIR)/hdparm_module-hdparm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/hdparm.c' object='commands/hdparm_module-hdparm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -c -o commands/hdparm_module-hdparm.o `test -f 'commands/hdparm.c' || echo '$(srcdir)/'`commands/hdparm.c + +commands/hdparm_module-hdparm.obj: commands/hdparm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -MT commands/hdparm_module-hdparm.obj -MD -MP -MF commands/$(DEPDIR)/hdparm_module-hdparm.Tpo -c -o commands/hdparm_module-hdparm.obj `if test -f 'commands/hdparm.c'; then $(CYGPATH_W) 'commands/hdparm.c'; else $(CYGPATH_W) '$(srcdir)/commands/hdparm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/hdparm_module-hdparm.Tpo commands/$(DEPDIR)/hdparm_module-hdparm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/hdparm.c' object='commands/hdparm_module-hdparm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -c -o commands/hdparm_module-hdparm.obj `if test -f 'commands/hdparm.c'; then $(CYGPATH_W) 'commands/hdparm.c'; else $(CYGPATH_W) '$(srcdir)/commands/hdparm.c'; fi` + +lib/hdparm_module-hexdump.o: lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -MT lib/hdparm_module-hexdump.o -MD -MP -MF lib/$(DEPDIR)/hdparm_module-hexdump.Tpo -c -o lib/hdparm_module-hexdump.o `test -f 'lib/hexdump.c' || echo '$(srcdir)/'`lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/hdparm_module-hexdump.Tpo lib/$(DEPDIR)/hdparm_module-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/hexdump.c' object='lib/hdparm_module-hexdump.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -c -o lib/hdparm_module-hexdump.o `test -f 'lib/hexdump.c' || echo '$(srcdir)/'`lib/hexdump.c + +lib/hdparm_module-hexdump.obj: lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -MT lib/hdparm_module-hexdump.obj -MD -MP -MF lib/$(DEPDIR)/hdparm_module-hexdump.Tpo -c -o lib/hdparm_module-hexdump.obj `if test -f 'lib/hexdump.c'; then $(CYGPATH_W) 'lib/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/lib/hexdump.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/hdparm_module-hexdump.Tpo lib/$(DEPDIR)/hdparm_module-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/hexdump.c' object='lib/hdparm_module-hexdump.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $(hdparm_module_CFLAGS) $(CFLAGS) -c -o lib/hdparm_module-hexdump.obj `if test -f 'lib/hexdump.c'; then $(CYGPATH_W) 'lib/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/lib/hexdump.c'; fi` + +hello/hello_module-hello.o: hello/hello.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hello_module_CPPFLAGS) $(CPPFLAGS) $(hello_module_CFLAGS) $(CFLAGS) -MT hello/hello_module-hello.o -MD -MP -MF hello/$(DEPDIR)/hello_module-hello.Tpo -c -o hello/hello_module-hello.o `test -f 'hello/hello.c' || echo '$(srcdir)/'`hello/hello.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) hello/$(DEPDIR)/hello_module-hello.Tpo hello/$(DEPDIR)/hello_module-hello.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hello/hello.c' object='hello/hello_module-hello.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hello_module_CPPFLAGS) $(CPPFLAGS) $(hello_module_CFLAGS) $(CFLAGS) -c -o hello/hello_module-hello.o `test -f 'hello/hello.c' || echo '$(srcdir)/'`hello/hello.c + +hello/hello_module-hello.obj: hello/hello.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hello_module_CPPFLAGS) $(CPPFLAGS) $(hello_module_CFLAGS) $(CFLAGS) -MT hello/hello_module-hello.obj -MD -MP -MF hello/$(DEPDIR)/hello_module-hello.Tpo -c -o hello/hello_module-hello.obj `if test -f 'hello/hello.c'; then $(CYGPATH_W) 'hello/hello.c'; else $(CYGPATH_W) '$(srcdir)/hello/hello.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) hello/$(DEPDIR)/hello_module-hello.Tpo hello/$(DEPDIR)/hello_module-hello.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hello/hello.c' object='hello/hello_module-hello.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hello_module_CPPFLAGS) $(CPPFLAGS) $(hello_module_CFLAGS) $(CFLAGS) -c -o hello/hello_module-hello.obj `if test -f 'hello/hello.c'; then $(CYGPATH_W) 'hello/hello.c'; else $(CYGPATH_W) '$(srcdir)/hello/hello.c'; fi` + +commands/help_module-help.o: commands/help.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(help_module_CPPFLAGS) $(CPPFLAGS) $(help_module_CFLAGS) $(CFLAGS) -MT commands/help_module-help.o -MD -MP -MF commands/$(DEPDIR)/help_module-help.Tpo -c -o commands/help_module-help.o `test -f 'commands/help.c' || echo '$(srcdir)/'`commands/help.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/help_module-help.Tpo commands/$(DEPDIR)/help_module-help.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/help.c' object='commands/help_module-help.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(help_module_CPPFLAGS) $(CPPFLAGS) $(help_module_CFLAGS) $(CFLAGS) -c -o commands/help_module-help.o `test -f 'commands/help.c' || echo '$(srcdir)/'`commands/help.c + +commands/help_module-help.obj: commands/help.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(help_module_CPPFLAGS) $(CPPFLAGS) $(help_module_CFLAGS) $(CFLAGS) -MT commands/help_module-help.obj -MD -MP -MF commands/$(DEPDIR)/help_module-help.Tpo -c -o commands/help_module-help.obj `if test -f 'commands/help.c'; then $(CYGPATH_W) 'commands/help.c'; else $(CYGPATH_W) '$(srcdir)/commands/help.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/help_module-help.Tpo commands/$(DEPDIR)/help_module-help.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/help.c' object='commands/help_module-help.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(help_module_CPPFLAGS) $(CPPFLAGS) $(help_module_CFLAGS) $(CFLAGS) -c -o commands/help_module-help.obj `if test -f 'commands/help.c'; then $(CYGPATH_W) 'commands/help.c'; else $(CYGPATH_W) '$(srcdir)/commands/help.c'; fi` + +commands/hexdump_module-hexdump.o: commands/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -MT commands/hexdump_module-hexdump.o -MD -MP -MF commands/$(DEPDIR)/hexdump_module-hexdump.Tpo -c -o commands/hexdump_module-hexdump.o `test -f 'commands/hexdump.c' || echo '$(srcdir)/'`commands/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/hexdump_module-hexdump.Tpo commands/$(DEPDIR)/hexdump_module-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/hexdump.c' object='commands/hexdump_module-hexdump.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -c -o commands/hexdump_module-hexdump.o `test -f 'commands/hexdump.c' || echo '$(srcdir)/'`commands/hexdump.c + +commands/hexdump_module-hexdump.obj: commands/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -MT commands/hexdump_module-hexdump.obj -MD -MP -MF commands/$(DEPDIR)/hexdump_module-hexdump.Tpo -c -o commands/hexdump_module-hexdump.obj `if test -f 'commands/hexdump.c'; then $(CYGPATH_W) 'commands/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/commands/hexdump.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/hexdump_module-hexdump.Tpo commands/$(DEPDIR)/hexdump_module-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/hexdump.c' object='commands/hexdump_module-hexdump.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -c -o commands/hexdump_module-hexdump.obj `if test -f 'commands/hexdump.c'; then $(CYGPATH_W) 'commands/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/commands/hexdump.c'; fi` + +lib/hexdump_module-hexdump.o: lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -MT lib/hexdump_module-hexdump.o -MD -MP -MF lib/$(DEPDIR)/hexdump_module-hexdump.Tpo -c -o lib/hexdump_module-hexdump.o `test -f 'lib/hexdump.c' || echo '$(srcdir)/'`lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/hexdump_module-hexdump.Tpo lib/$(DEPDIR)/hexdump_module-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/hexdump.c' object='lib/hexdump_module-hexdump.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -c -o lib/hexdump_module-hexdump.o `test -f 'lib/hexdump.c' || echo '$(srcdir)/'`lib/hexdump.c + +lib/hexdump_module-hexdump.obj: lib/hexdump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -MT lib/hexdump_module-hexdump.obj -MD -MP -MF lib/$(DEPDIR)/hexdump_module-hexdump.Tpo -c -o lib/hexdump_module-hexdump.obj `if test -f 'lib/hexdump.c'; then $(CYGPATH_W) 'lib/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/lib/hexdump.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/hexdump_module-hexdump.Tpo lib/$(DEPDIR)/hexdump_module-hexdump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/hexdump.c' object='lib/hexdump_module-hexdump.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $(hexdump_module_CFLAGS) $(CFLAGS) -c -o lib/hexdump_module-hexdump.obj `if test -f 'lib/hexdump.c'; then $(CYGPATH_W) 'lib/hexdump.c'; else $(CYGPATH_W) '$(srcdir)/lib/hexdump.c'; fi` + +fs/hfs_module-hfs.o: fs/hfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfs_module_CPPFLAGS) $(CPPFLAGS) $(hfs_module_CFLAGS) $(CFLAGS) -MT fs/hfs_module-hfs.o -MD -MP -MF fs/$(DEPDIR)/hfs_module-hfs.Tpo -c -o fs/hfs_module-hfs.o `test -f 'fs/hfs.c' || echo '$(srcdir)/'`fs/hfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/hfs_module-hfs.Tpo fs/$(DEPDIR)/hfs_module-hfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/hfs.c' object='fs/hfs_module-hfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfs_module_CPPFLAGS) $(CPPFLAGS) $(hfs_module_CFLAGS) $(CFLAGS) -c -o fs/hfs_module-hfs.o `test -f 'fs/hfs.c' || echo '$(srcdir)/'`fs/hfs.c + +fs/hfs_module-hfs.obj: fs/hfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfs_module_CPPFLAGS) $(CPPFLAGS) $(hfs_module_CFLAGS) $(CFLAGS) -MT fs/hfs_module-hfs.obj -MD -MP -MF fs/$(DEPDIR)/hfs_module-hfs.Tpo -c -o fs/hfs_module-hfs.obj `if test -f 'fs/hfs.c'; then $(CYGPATH_W) 'fs/hfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/hfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/hfs_module-hfs.Tpo fs/$(DEPDIR)/hfs_module-hfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/hfs.c' object='fs/hfs_module-hfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfs_module_CPPFLAGS) $(CPPFLAGS) $(hfs_module_CFLAGS) $(CFLAGS) -c -o fs/hfs_module-hfs.obj `if test -f 'fs/hfs.c'; then $(CYGPATH_W) 'fs/hfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/hfs.c'; fi` + +fs/hfsplus_module-hfsplus.o: fs/hfsplus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfsplus_module_CPPFLAGS) $(CPPFLAGS) $(hfsplus_module_CFLAGS) $(CFLAGS) -MT fs/hfsplus_module-hfsplus.o -MD -MP -MF fs/$(DEPDIR)/hfsplus_module-hfsplus.Tpo -c -o fs/hfsplus_module-hfsplus.o `test -f 'fs/hfsplus.c' || echo '$(srcdir)/'`fs/hfsplus.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/hfsplus_module-hfsplus.Tpo fs/$(DEPDIR)/hfsplus_module-hfsplus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/hfsplus.c' object='fs/hfsplus_module-hfsplus.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfsplus_module_CPPFLAGS) $(CPPFLAGS) $(hfsplus_module_CFLAGS) $(CFLAGS) -c -o fs/hfsplus_module-hfsplus.o `test -f 'fs/hfsplus.c' || echo '$(srcdir)/'`fs/hfsplus.c + +fs/hfsplus_module-hfsplus.obj: fs/hfsplus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfsplus_module_CPPFLAGS) $(CPPFLAGS) $(hfsplus_module_CFLAGS) $(CFLAGS) -MT fs/hfsplus_module-hfsplus.obj -MD -MP -MF fs/$(DEPDIR)/hfsplus_module-hfsplus.Tpo -c -o fs/hfsplus_module-hfsplus.obj `if test -f 'fs/hfsplus.c'; then $(CYGPATH_W) 'fs/hfsplus.c'; else $(CYGPATH_W) '$(srcdir)/fs/hfsplus.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/hfsplus_module-hfsplus.Tpo fs/$(DEPDIR)/hfsplus_module-hfsplus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/hfsplus.c' object='fs/hfsplus_module-hfsplus.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfsplus_module_CPPFLAGS) $(CPPFLAGS) $(hfsplus_module_CFLAGS) $(CFLAGS) -c -o fs/hfsplus_module-hfsplus.obj `if test -f 'fs/hfsplus.c'; then $(CYGPATH_W) 'fs/hfsplus.c'; else $(CYGPATH_W) '$(srcdir)/fs/hfsplus.c'; fi` + +fs/hfspluscomp_module-hfspluscomp.o: fs/hfspluscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfspluscomp_module_CPPFLAGS) $(CPPFLAGS) $(hfspluscomp_module_CFLAGS) $(CFLAGS) -MT fs/hfspluscomp_module-hfspluscomp.o -MD -MP -MF fs/$(DEPDIR)/hfspluscomp_module-hfspluscomp.Tpo -c -o fs/hfspluscomp_module-hfspluscomp.o `test -f 'fs/hfspluscomp.c' || echo '$(srcdir)/'`fs/hfspluscomp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/hfspluscomp_module-hfspluscomp.Tpo fs/$(DEPDIR)/hfspluscomp_module-hfspluscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/hfspluscomp.c' object='fs/hfspluscomp_module-hfspluscomp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfspluscomp_module_CPPFLAGS) $(CPPFLAGS) $(hfspluscomp_module_CFLAGS) $(CFLAGS) -c -o fs/hfspluscomp_module-hfspluscomp.o `test -f 'fs/hfspluscomp.c' || echo '$(srcdir)/'`fs/hfspluscomp.c + +fs/hfspluscomp_module-hfspluscomp.obj: fs/hfspluscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfspluscomp_module_CPPFLAGS) $(CPPFLAGS) $(hfspluscomp_module_CFLAGS) $(CFLAGS) -MT fs/hfspluscomp_module-hfspluscomp.obj -MD -MP -MF fs/$(DEPDIR)/hfspluscomp_module-hfspluscomp.Tpo -c -o fs/hfspluscomp_module-hfspluscomp.obj `if test -f 'fs/hfspluscomp.c'; then $(CYGPATH_W) 'fs/hfspluscomp.c'; else $(CYGPATH_W) '$(srcdir)/fs/hfspluscomp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/hfspluscomp_module-hfspluscomp.Tpo fs/$(DEPDIR)/hfspluscomp_module-hfspluscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/hfspluscomp.c' object='fs/hfspluscomp_module-hfspluscomp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfspluscomp_module_CPPFLAGS) $(CPPFLAGS) $(hfspluscomp_module_CFLAGS) $(CFLAGS) -c -o fs/hfspluscomp_module-hfspluscomp.obj `if test -f 'fs/hfspluscomp.c'; then $(CYGPATH_W) 'fs/hfspluscomp.c'; else $(CYGPATH_W) '$(srcdir)/fs/hfspluscomp.c'; fi` + +net/http_module-http.o: net/http.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(http_module_CPPFLAGS) $(CPPFLAGS) $(http_module_CFLAGS) $(CFLAGS) -MT net/http_module-http.o -MD -MP -MF net/$(DEPDIR)/http_module-http.Tpo -c -o net/http_module-http.o `test -f 'net/http.c' || echo '$(srcdir)/'`net/http.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/http_module-http.Tpo net/$(DEPDIR)/http_module-http.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/http.c' object='net/http_module-http.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(http_module_CPPFLAGS) $(CPPFLAGS) $(http_module_CFLAGS) $(CFLAGS) -c -o net/http_module-http.o `test -f 'net/http.c' || echo '$(srcdir)/'`net/http.c + +net/http_module-http.obj: net/http.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(http_module_CPPFLAGS) $(CPPFLAGS) $(http_module_CFLAGS) $(CFLAGS) -MT net/http_module-http.obj -MD -MP -MF net/$(DEPDIR)/http_module-http.Tpo -c -o net/http_module-http.obj `if test -f 'net/http.c'; then $(CYGPATH_W) 'net/http.c'; else $(CYGPATH_W) '$(srcdir)/net/http.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/http_module-http.Tpo net/$(DEPDIR)/http_module-http.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/http.c' object='net/http_module-http.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(http_module_CPPFLAGS) $(CPPFLAGS) $(http_module_CFLAGS) $(CFLAGS) -c -o net/http_module-http.obj `if test -f 'net/http.c'; then $(CYGPATH_W) 'net/http.c'; else $(CYGPATH_W) '$(srcdir)/net/http.c'; fi` + +video/ieee1275_fb_module-ieee1275.o: video/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ieee1275_fb_module_CPPFLAGS) $(CPPFLAGS) $(ieee1275_fb_module_CFLAGS) $(CFLAGS) -MT video/ieee1275_fb_module-ieee1275.o -MD -MP -MF video/$(DEPDIR)/ieee1275_fb_module-ieee1275.Tpo -c -o video/ieee1275_fb_module-ieee1275.o `test -f 'video/ieee1275.c' || echo '$(srcdir)/'`video/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/ieee1275_fb_module-ieee1275.Tpo video/$(DEPDIR)/ieee1275_fb_module-ieee1275.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/ieee1275.c' object='video/ieee1275_fb_module-ieee1275.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ieee1275_fb_module_CPPFLAGS) $(CPPFLAGS) $(ieee1275_fb_module_CFLAGS) $(CFLAGS) -c -o video/ieee1275_fb_module-ieee1275.o `test -f 'video/ieee1275.c' || echo '$(srcdir)/'`video/ieee1275.c + +video/ieee1275_fb_module-ieee1275.obj: video/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ieee1275_fb_module_CPPFLAGS) $(CPPFLAGS) $(ieee1275_fb_module_CFLAGS) $(CFLAGS) -MT video/ieee1275_fb_module-ieee1275.obj -MD -MP -MF video/$(DEPDIR)/ieee1275_fb_module-ieee1275.Tpo -c -o video/ieee1275_fb_module-ieee1275.obj `if test -f 'video/ieee1275.c'; then $(CYGPATH_W) 'video/ieee1275.c'; else $(CYGPATH_W) '$(srcdir)/video/ieee1275.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/ieee1275_fb_module-ieee1275.Tpo video/$(DEPDIR)/ieee1275_fb_module-ieee1275.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/ieee1275.c' object='video/ieee1275_fb_module-ieee1275.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ieee1275_fb_module_CPPFLAGS) $(CPPFLAGS) $(ieee1275_fb_module_CFLAGS) $(CFLAGS) -c -o video/ieee1275_fb_module-ieee1275.obj `if test -f 'video/ieee1275.c'; then $(CYGPATH_W) 'video/ieee1275.c'; else $(CYGPATH_W) '$(srcdir)/video/ieee1275.c'; fi` + +commands/iorw_module-iorw.o: commands/iorw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $(iorw_module_CFLAGS) $(CFLAGS) -MT commands/iorw_module-iorw.o -MD -MP -MF commands/$(DEPDIR)/iorw_module-iorw.Tpo -c -o commands/iorw_module-iorw.o `test -f 'commands/iorw.c' || echo '$(srcdir)/'`commands/iorw.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/iorw_module-iorw.Tpo commands/$(DEPDIR)/iorw_module-iorw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/iorw.c' object='commands/iorw_module-iorw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $(iorw_module_CFLAGS) $(CFLAGS) -c -o commands/iorw_module-iorw.o `test -f 'commands/iorw.c' || echo '$(srcdir)/'`commands/iorw.c + +commands/iorw_module-iorw.obj: commands/iorw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $(iorw_module_CFLAGS) $(CFLAGS) -MT commands/iorw_module-iorw.obj -MD -MP -MF commands/$(DEPDIR)/iorw_module-iorw.Tpo -c -o commands/iorw_module-iorw.obj `if test -f 'commands/iorw.c'; then $(CYGPATH_W) 'commands/iorw.c'; else $(CYGPATH_W) '$(srcdir)/commands/iorw.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/iorw_module-iorw.Tpo commands/$(DEPDIR)/iorw_module-iorw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/iorw.c' object='commands/iorw_module-iorw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $(iorw_module_CFLAGS) $(CFLAGS) -c -o commands/iorw_module-iorw.obj `if test -f 'commands/iorw.c'; then $(CYGPATH_W) 'commands/iorw.c'; else $(CYGPATH_W) '$(srcdir)/commands/iorw.c'; fi` + +fs/iso9660_module-iso9660.o: fs/iso9660.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iso9660_module_CPPFLAGS) $(CPPFLAGS) $(iso9660_module_CFLAGS) $(CFLAGS) -MT fs/iso9660_module-iso9660.o -MD -MP -MF fs/$(DEPDIR)/iso9660_module-iso9660.Tpo -c -o fs/iso9660_module-iso9660.o `test -f 'fs/iso9660.c' || echo '$(srcdir)/'`fs/iso9660.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/iso9660_module-iso9660.Tpo fs/$(DEPDIR)/iso9660_module-iso9660.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/iso9660.c' object='fs/iso9660_module-iso9660.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iso9660_module_CPPFLAGS) $(CPPFLAGS) $(iso9660_module_CFLAGS) $(CFLAGS) -c -o fs/iso9660_module-iso9660.o `test -f 'fs/iso9660.c' || echo '$(srcdir)/'`fs/iso9660.c + +fs/iso9660_module-iso9660.obj: fs/iso9660.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iso9660_module_CPPFLAGS) $(CPPFLAGS) $(iso9660_module_CFLAGS) $(CFLAGS) -MT fs/iso9660_module-iso9660.obj -MD -MP -MF fs/$(DEPDIR)/iso9660_module-iso9660.Tpo -c -o fs/iso9660_module-iso9660.obj `if test -f 'fs/iso9660.c'; then $(CYGPATH_W) 'fs/iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fs/iso9660.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/iso9660_module-iso9660.Tpo fs/$(DEPDIR)/iso9660_module-iso9660.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/iso9660.c' object='fs/iso9660_module-iso9660.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iso9660_module_CPPFLAGS) $(CPPFLAGS) $(iso9660_module_CFLAGS) $(CFLAGS) -c -o fs/iso9660_module-iso9660.obj `if test -f 'fs/iso9660.c'; then $(CYGPATH_W) 'fs/iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fs/iso9660.c'; fi` + +fs/jfs_module-jfs.o: fs/jfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jfs_module_CPPFLAGS) $(CPPFLAGS) $(jfs_module_CFLAGS) $(CFLAGS) -MT fs/jfs_module-jfs.o -MD -MP -MF fs/$(DEPDIR)/jfs_module-jfs.Tpo -c -o fs/jfs_module-jfs.o `test -f 'fs/jfs.c' || echo '$(srcdir)/'`fs/jfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/jfs_module-jfs.Tpo fs/$(DEPDIR)/jfs_module-jfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/jfs.c' object='fs/jfs_module-jfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jfs_module_CPPFLAGS) $(CPPFLAGS) $(jfs_module_CFLAGS) $(CFLAGS) -c -o fs/jfs_module-jfs.o `test -f 'fs/jfs.c' || echo '$(srcdir)/'`fs/jfs.c + +fs/jfs_module-jfs.obj: fs/jfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jfs_module_CPPFLAGS) $(CPPFLAGS) $(jfs_module_CFLAGS) $(CFLAGS) -MT fs/jfs_module-jfs.obj -MD -MP -MF fs/$(DEPDIR)/jfs_module-jfs.Tpo -c -o fs/jfs_module-jfs.obj `if test -f 'fs/jfs.c'; then $(CYGPATH_W) 'fs/jfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/jfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/jfs_module-jfs.Tpo fs/$(DEPDIR)/jfs_module-jfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/jfs.c' object='fs/jfs_module-jfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jfs_module_CPPFLAGS) $(CPPFLAGS) $(jfs_module_CFLAGS) $(CFLAGS) -c -o fs/jfs_module-jfs.obj `if test -f 'fs/jfs.c'; then $(CYGPATH_W) 'fs/jfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/jfs.c'; fi` + +video/readers/jpeg_module-jpeg.o: video/readers/jpeg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jpeg_module_CPPFLAGS) $(CPPFLAGS) $(jpeg_module_CFLAGS) $(CFLAGS) -MT video/readers/jpeg_module-jpeg.o -MD -MP -MF video/readers/$(DEPDIR)/jpeg_module-jpeg.Tpo -c -o video/readers/jpeg_module-jpeg.o `test -f 'video/readers/jpeg.c' || echo '$(srcdir)/'`video/readers/jpeg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/readers/$(DEPDIR)/jpeg_module-jpeg.Tpo video/readers/$(DEPDIR)/jpeg_module-jpeg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/readers/jpeg.c' object='video/readers/jpeg_module-jpeg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jpeg_module_CPPFLAGS) $(CPPFLAGS) $(jpeg_module_CFLAGS) $(CFLAGS) -c -o video/readers/jpeg_module-jpeg.o `test -f 'video/readers/jpeg.c' || echo '$(srcdir)/'`video/readers/jpeg.c + +video/readers/jpeg_module-jpeg.obj: video/readers/jpeg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jpeg_module_CPPFLAGS) $(CPPFLAGS) $(jpeg_module_CFLAGS) $(CFLAGS) -MT video/readers/jpeg_module-jpeg.obj -MD -MP -MF video/readers/$(DEPDIR)/jpeg_module-jpeg.Tpo -c -o video/readers/jpeg_module-jpeg.obj `if test -f 'video/readers/jpeg.c'; then $(CYGPATH_W) 'video/readers/jpeg.c'; else $(CYGPATH_W) '$(srcdir)/video/readers/jpeg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/readers/$(DEPDIR)/jpeg_module-jpeg.Tpo video/readers/$(DEPDIR)/jpeg_module-jpeg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/readers/jpeg.c' object='video/readers/jpeg_module-jpeg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jpeg_module_CPPFLAGS) $(CPPFLAGS) $(jpeg_module_CFLAGS) $(CFLAGS) -c -o video/readers/jpeg_module-jpeg.obj `if test -f 'video/readers/jpeg.c'; then $(CYGPATH_W) 'video/readers/jpeg.c'; else $(CYGPATH_W) '$(srcdir)/video/readers/jpeg.c'; fi` + +kern/arm64/efi/kernel_exec-init.o: kern/arm64/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/efi/kernel_exec-init.o -MD -MP -MF kern/arm64/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/arm64/efi/kernel_exec-init.o `test -f 'kern/arm64/efi/init.c' || echo '$(srcdir)/'`kern/arm64/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/arm64/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/efi/init.c' object='kern/arm64/efi/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/efi/kernel_exec-init.o `test -f 'kern/arm64/efi/init.c' || echo '$(srcdir)/'`kern/arm64/efi/init.c + +kern/arm64/efi/kernel_exec-init.obj: kern/arm64/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/efi/kernel_exec-init.obj -MD -MP -MF kern/arm64/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/arm64/efi/kernel_exec-init.obj `if test -f 'kern/arm64/efi/init.c'; then $(CYGPATH_W) 'kern/arm64/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/efi/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/arm64/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/efi/init.c' object='kern/arm64/efi/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/efi/kernel_exec-init.obj `if test -f 'kern/arm64/efi/init.c'; then $(CYGPATH_W) 'kern/arm64/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/efi/init.c'; fi` + +kern/efi/kernel_exec-fdt.o: kern/efi/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-fdt.o -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-fdt.Tpo -c -o kern/efi/kernel_exec-fdt.o `test -f 'kern/efi/fdt.c' || echo '$(srcdir)/'`kern/efi/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-fdt.Tpo kern/efi/$(DEPDIR)/kernel_exec-fdt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/fdt.c' object='kern/efi/kernel_exec-fdt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-fdt.o `test -f 'kern/efi/fdt.c' || echo '$(srcdir)/'`kern/efi/fdt.c + +kern/efi/kernel_exec-fdt.obj: kern/efi/fdt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-fdt.obj -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-fdt.Tpo -c -o kern/efi/kernel_exec-fdt.obj `if test -f 'kern/efi/fdt.c'; then $(CYGPATH_W) 'kern/efi/fdt.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/fdt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-fdt.Tpo kern/efi/$(DEPDIR)/kernel_exec-fdt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/fdt.c' object='kern/efi/kernel_exec-fdt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-fdt.obj `if test -f 'kern/efi/fdt.c'; then $(CYGPATH_W) 'kern/efi/fdt.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/fdt.c'; fi` + +kern/arm64/kernel_exec-cache.o: kern/arm64/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/kernel_exec-cache.o -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/arm64/kernel_exec-cache.o `test -f 'kern/arm64/cache.c' || echo '$(srcdir)/'`kern/arm64/cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-cache.Tpo kern/arm64/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/cache.c' object='kern/arm64/kernel_exec-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/kernel_exec-cache.o `test -f 'kern/arm64/cache.c' || echo '$(srcdir)/'`kern/arm64/cache.c + +kern/arm64/kernel_exec-cache.obj: kern/arm64/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/kernel_exec-cache.obj -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/arm64/kernel_exec-cache.obj `if test -f 'kern/arm64/cache.c'; then $(CYGPATH_W) 'kern/arm64/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/cache.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-cache.Tpo kern/arm64/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/cache.c' object='kern/arm64/kernel_exec-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/kernel_exec-cache.obj `if test -f 'kern/arm64/cache.c'; then $(CYGPATH_W) 'kern/arm64/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/cache.c'; fi` + +kern/arm64/kernel_exec-dl.o: kern/arm64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/kernel_exec-dl.o -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/arm64/kernel_exec-dl.o `test -f 'kern/arm64/dl.c' || echo '$(srcdir)/'`kern/arm64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-dl.Tpo kern/arm64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/dl.c' object='kern/arm64/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/kernel_exec-dl.o `test -f 'kern/arm64/dl.c' || echo '$(srcdir)/'`kern/arm64/dl.c + +kern/arm64/kernel_exec-dl.obj: kern/arm64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/kernel_exec-dl.obj -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/arm64/kernel_exec-dl.obj `if test -f 'kern/arm64/dl.c'; then $(CYGPATH_W) 'kern/arm64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-dl.Tpo kern/arm64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/dl.c' object='kern/arm64/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/kernel_exec-dl.obj `if test -f 'kern/arm64/dl.c'; then $(CYGPATH_W) 'kern/arm64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/dl.c'; fi` + +kern/arm64/kernel_exec-dl_helper.o: kern/arm64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/kernel_exec-dl_helper.o -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-dl_helper.Tpo -c -o kern/arm64/kernel_exec-dl_helper.o `test -f 'kern/arm64/dl_helper.c' || echo '$(srcdir)/'`kern/arm64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-dl_helper.Tpo kern/arm64/$(DEPDIR)/kernel_exec-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/dl_helper.c' object='kern/arm64/kernel_exec-dl_helper.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/kernel_exec-dl_helper.o `test -f 'kern/arm64/dl_helper.c' || echo '$(srcdir)/'`kern/arm64/dl_helper.c + +kern/arm64/kernel_exec-dl_helper.obj: kern/arm64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm64/kernel_exec-dl_helper.obj -MD -MP -MF kern/arm64/$(DEPDIR)/kernel_exec-dl_helper.Tpo -c -o kern/arm64/kernel_exec-dl_helper.obj `if test -f 'kern/arm64/dl_helper.c'; then $(CYGPATH_W) 'kern/arm64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/dl_helper.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm64/$(DEPDIR)/kernel_exec-dl_helper.Tpo kern/arm64/$(DEPDIR)/kernel_exec-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm64/dl_helper.c' object='kern/arm64/kernel_exec-dl_helper.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm64/kernel_exec-dl_helper.obj `if test -f 'kern/arm64/dl_helper.c'; then $(CYGPATH_W) 'kern/arm64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm64/dl_helper.c'; fi` + +disk/efi/kernel_exec-efidisk.o: disk/efi/efidisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/efi/kernel_exec-efidisk.o -MD -MP -MF disk/efi/$(DEPDIR)/kernel_exec-efidisk.Tpo -c -o disk/efi/kernel_exec-efidisk.o `test -f 'disk/efi/efidisk.c' || echo '$(srcdir)/'`disk/efi/efidisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/efi/$(DEPDIR)/kernel_exec-efidisk.Tpo disk/efi/$(DEPDIR)/kernel_exec-efidisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/efi/efidisk.c' object='disk/efi/kernel_exec-efidisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/efi/kernel_exec-efidisk.o `test -f 'disk/efi/efidisk.c' || echo '$(srcdir)/'`disk/efi/efidisk.c + +disk/efi/kernel_exec-efidisk.obj: disk/efi/efidisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/efi/kernel_exec-efidisk.obj -MD -MP -MF disk/efi/$(DEPDIR)/kernel_exec-efidisk.Tpo -c -o disk/efi/kernel_exec-efidisk.obj `if test -f 'disk/efi/efidisk.c'; then $(CYGPATH_W) 'disk/efi/efidisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/efi/efidisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/efi/$(DEPDIR)/kernel_exec-efidisk.Tpo disk/efi/$(DEPDIR)/kernel_exec-efidisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/efi/efidisk.c' object='disk/efi/kernel_exec-efidisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/efi/kernel_exec-efidisk.obj `if test -f 'disk/efi/efidisk.c'; then $(CYGPATH_W) 'disk/efi/efidisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/efi/efidisk.c'; fi` + +kern/efi/kernel_exec-efi.o: kern/efi/efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-efi.o -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-efi.Tpo -c -o kern/efi/kernel_exec-efi.o `test -f 'kern/efi/efi.c' || echo '$(srcdir)/'`kern/efi/efi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-efi.Tpo kern/efi/$(DEPDIR)/kernel_exec-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/efi.c' object='kern/efi/kernel_exec-efi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-efi.o `test -f 'kern/efi/efi.c' || echo '$(srcdir)/'`kern/efi/efi.c + +kern/efi/kernel_exec-efi.obj: kern/efi/efi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-efi.obj -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-efi.Tpo -c -o kern/efi/kernel_exec-efi.obj `if test -f 'kern/efi/efi.c'; then $(CYGPATH_W) 'kern/efi/efi.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/efi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-efi.Tpo kern/efi/$(DEPDIR)/kernel_exec-efi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/efi.c' object='kern/efi/kernel_exec-efi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-efi.obj `if test -f 'kern/efi/efi.c'; then $(CYGPATH_W) 'kern/efi/efi.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/efi.c'; fi` + +kern/efi/kernel_exec-init.o: kern/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-init.o -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/efi/kernel_exec-init.o `test -f 'kern/efi/init.c' || echo '$(srcdir)/'`kern/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/init.c' object='kern/efi/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-init.o `test -f 'kern/efi/init.c' || echo '$(srcdir)/'`kern/efi/init.c + +kern/efi/kernel_exec-init.obj: kern/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-init.obj -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/efi/kernel_exec-init.obj `if test -f 'kern/efi/init.c'; then $(CYGPATH_W) 'kern/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/init.c' object='kern/efi/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-init.obj `if test -f 'kern/efi/init.c'; then $(CYGPATH_W) 'kern/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/init.c'; fi` + +kern/efi/kernel_exec-mm.o: kern/efi/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-mm.o -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-mm.Tpo -c -o kern/efi/kernel_exec-mm.o `test -f 'kern/efi/mm.c' || echo '$(srcdir)/'`kern/efi/mm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-mm.Tpo kern/efi/$(DEPDIR)/kernel_exec-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/mm.c' object='kern/efi/kernel_exec-mm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-mm.o `test -f 'kern/efi/mm.c' || echo '$(srcdir)/'`kern/efi/mm.c + +kern/efi/kernel_exec-mm.obj: kern/efi/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-mm.obj -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-mm.Tpo -c -o kern/efi/kernel_exec-mm.obj `if test -f 'kern/efi/mm.c'; then $(CYGPATH_W) 'kern/efi/mm.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/mm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-mm.Tpo kern/efi/$(DEPDIR)/kernel_exec-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/mm.c' object='kern/efi/kernel_exec-mm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-mm.obj `if test -f 'kern/efi/mm.c'; then $(CYGPATH_W) 'kern/efi/mm.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/mm.c'; fi` + +term/efi/kernel_exec-console.o: term/efi/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/efi/kernel_exec-console.o -MD -MP -MF term/efi/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/efi/kernel_exec-console.o `test -f 'term/efi/console.c' || echo '$(srcdir)/'`term/efi/console.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/efi/$(DEPDIR)/kernel_exec-console.Tpo term/efi/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/efi/console.c' object='term/efi/kernel_exec-console.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/efi/kernel_exec-console.o `test -f 'term/efi/console.c' || echo '$(srcdir)/'`term/efi/console.c + +term/efi/kernel_exec-console.obj: term/efi/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/efi/kernel_exec-console.obj -MD -MP -MF term/efi/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/efi/kernel_exec-console.obj `if test -f 'term/efi/console.c'; then $(CYGPATH_W) 'term/efi/console.c'; else $(CYGPATH_W) '$(srcdir)/term/efi/console.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/efi/$(DEPDIR)/kernel_exec-console.Tpo term/efi/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/efi/console.c' object='term/efi/kernel_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/efi/kernel_exec-console.obj `if test -f 'term/efi/console.c'; then $(CYGPATH_W) 'term/efi/console.c'; else $(CYGPATH_W) '$(srcdir)/term/efi/console.c'; fi` + +kern/kernel_exec-acpi.o: kern/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-acpi.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-acpi.Tpo -c -o kern/kernel_exec-acpi.o `test -f 'kern/acpi.c' || echo '$(srcdir)/'`kern/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-acpi.Tpo kern/$(DEPDIR)/kernel_exec-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/acpi.c' object='kern/kernel_exec-acpi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-acpi.o `test -f 'kern/acpi.c' || echo '$(srcdir)/'`kern/acpi.c + +kern/kernel_exec-acpi.obj: kern/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-acpi.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-acpi.Tpo -c -o kern/kernel_exec-acpi.obj `if test -f 'kern/acpi.c'; then $(CYGPATH_W) 'kern/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/acpi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-acpi.Tpo kern/$(DEPDIR)/kernel_exec-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/acpi.c' object='kern/kernel_exec-acpi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-acpi.obj `if test -f 'kern/acpi.c'; then $(CYGPATH_W) 'kern/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/acpi.c'; fi` + +kern/efi/kernel_exec-acpi.o: kern/efi/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-acpi.o -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-acpi.Tpo -c -o kern/efi/kernel_exec-acpi.o `test -f 'kern/efi/acpi.c' || echo '$(srcdir)/'`kern/efi/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-acpi.Tpo kern/efi/$(DEPDIR)/kernel_exec-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/acpi.c' object='kern/efi/kernel_exec-acpi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-acpi.o `test -f 'kern/efi/acpi.c' || echo '$(srcdir)/'`kern/efi/acpi.c + +kern/efi/kernel_exec-acpi.obj: kern/efi/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/efi/kernel_exec-acpi.obj -MD -MP -MF kern/efi/$(DEPDIR)/kernel_exec-acpi.Tpo -c -o kern/efi/kernel_exec-acpi.obj `if test -f 'kern/efi/acpi.c'; then $(CYGPATH_W) 'kern/efi/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/acpi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/efi/$(DEPDIR)/kernel_exec-acpi.Tpo kern/efi/$(DEPDIR)/kernel_exec-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/efi/acpi.c' object='kern/efi/kernel_exec-acpi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/efi/kernel_exec-acpi.obj `if test -f 'kern/efi/acpi.c'; then $(CYGPATH_W) 'kern/efi/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/efi/acpi.c'; fi` + +kern/kernel_exec-compiler-rt.o: kern/compiler-rt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-compiler-rt.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/kernel_exec-compiler-rt.o `test -f 'kern/compiler-rt.c' || echo '$(srcdir)/'`kern/compiler-rt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/$(DEPDIR)/kernel_exec-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/compiler-rt.c' object='kern/kernel_exec-compiler-rt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-compiler-rt.o `test -f 'kern/compiler-rt.c' || echo '$(srcdir)/'`kern/compiler-rt.c + +kern/kernel_exec-compiler-rt.obj: kern/compiler-rt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-compiler-rt.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo -c -o kern/kernel_exec-compiler-rt.obj `if test -f 'kern/compiler-rt.c'; then $(CYGPATH_W) 'kern/compiler-rt.c'; else $(CYGPATH_W) '$(srcdir)/kern/compiler-rt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-compiler-rt.Tpo kern/$(DEPDIR)/kernel_exec-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/compiler-rt.c' object='kern/kernel_exec-compiler-rt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-compiler-rt.obj `if test -f 'kern/compiler-rt.c'; then $(CYGPATH_W) 'kern/compiler-rt.c'; else $(CYGPATH_W) '$(srcdir)/kern/compiler-rt.c'; fi` + +kern/kernel_exec-mm.o: kern/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-mm.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-mm.Tpo -c -o kern/kernel_exec-mm.o `test -f 'kern/mm.c' || echo '$(srcdir)/'`kern/mm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-mm.Tpo kern/$(DEPDIR)/kernel_exec-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mm.c' object='kern/kernel_exec-mm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-mm.o `test -f 'kern/mm.c' || echo '$(srcdir)/'`kern/mm.c + +kern/kernel_exec-mm.obj: kern/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-mm.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-mm.Tpo -c -o kern/kernel_exec-mm.obj `if test -f 'kern/mm.c'; then $(CYGPATH_W) 'kern/mm.c'; else $(CYGPATH_W) '$(srcdir)/kern/mm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-mm.Tpo kern/$(DEPDIR)/kernel_exec-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mm.c' object='kern/kernel_exec-mm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-mm.obj `if test -f 'kern/mm.c'; then $(CYGPATH_W) 'kern/mm.c'; else $(CYGPATH_W) '$(srcdir)/kern/mm.c'; fi` + +kern/kernel_exec-time.o: kern/time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-time.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-time.Tpo -c -o kern/kernel_exec-time.o `test -f 'kern/time.c' || echo '$(srcdir)/'`kern/time.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-time.Tpo kern/$(DEPDIR)/kernel_exec-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/time.c' object='kern/kernel_exec-time.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-time.o `test -f 'kern/time.c' || echo '$(srcdir)/'`kern/time.c + +kern/kernel_exec-time.obj: kern/time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-time.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-time.Tpo -c -o kern/kernel_exec-time.obj `if test -f 'kern/time.c'; then $(CYGPATH_W) 'kern/time.c'; else $(CYGPATH_W) '$(srcdir)/kern/time.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-time.Tpo kern/$(DEPDIR)/kernel_exec-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/time.c' object='kern/kernel_exec-time.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-time.obj `if test -f 'kern/time.c'; then $(CYGPATH_W) 'kern/time.c'; else $(CYGPATH_W) '$(srcdir)/kern/time.c'; fi` + +kern/generic/kernel_exec-millisleep.o: kern/generic/millisleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/generic/kernel_exec-millisleep.o -MD -MP -MF kern/generic/$(DEPDIR)/kernel_exec-millisleep.Tpo -c -o kern/generic/kernel_exec-millisleep.o `test -f 'kern/generic/millisleep.c' || echo '$(srcdir)/'`kern/generic/millisleep.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/generic/$(DEPDIR)/kernel_exec-millisleep.Tpo kern/generic/$(DEPDIR)/kernel_exec-millisleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/generic/millisleep.c' object='kern/generic/kernel_exec-millisleep.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/generic/kernel_exec-millisleep.o `test -f 'kern/generic/millisleep.c' || echo '$(srcdir)/'`kern/generic/millisleep.c + +kern/generic/kernel_exec-millisleep.obj: kern/generic/millisleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/generic/kernel_exec-millisleep.obj -MD -MP -MF kern/generic/$(DEPDIR)/kernel_exec-millisleep.Tpo -c -o kern/generic/kernel_exec-millisleep.obj `if test -f 'kern/generic/millisleep.c'; then $(CYGPATH_W) 'kern/generic/millisleep.c'; else $(CYGPATH_W) '$(srcdir)/kern/generic/millisleep.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/generic/$(DEPDIR)/kernel_exec-millisleep.Tpo kern/generic/$(DEPDIR)/kernel_exec-millisleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/generic/millisleep.c' object='kern/generic/kernel_exec-millisleep.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/generic/kernel_exec-millisleep.obj `if test -f 'kern/generic/millisleep.c'; then $(CYGPATH_W) 'kern/generic/millisleep.c'; else $(CYGPATH_W) '$(srcdir)/kern/generic/millisleep.c'; fi` + +kern/kernel_exec-command.o: kern/command.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-command.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-command.Tpo -c -o kern/kernel_exec-command.o `test -f 'kern/command.c' || echo '$(srcdir)/'`kern/command.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-command.Tpo kern/$(DEPDIR)/kernel_exec-command.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/command.c' object='kern/kernel_exec-command.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-command.o `test -f 'kern/command.c' || echo '$(srcdir)/'`kern/command.c + +kern/kernel_exec-command.obj: kern/command.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-command.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-command.Tpo -c -o kern/kernel_exec-command.obj `if test -f 'kern/command.c'; then $(CYGPATH_W) 'kern/command.c'; else $(CYGPATH_W) '$(srcdir)/kern/command.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-command.Tpo kern/$(DEPDIR)/kernel_exec-command.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/command.c' object='kern/kernel_exec-command.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-command.obj `if test -f 'kern/command.c'; then $(CYGPATH_W) 'kern/command.c'; else $(CYGPATH_W) '$(srcdir)/kern/command.c'; fi` + +kern/kernel_exec-corecmd.o: kern/corecmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-corecmd.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-corecmd.Tpo -c -o kern/kernel_exec-corecmd.o `test -f 'kern/corecmd.c' || echo '$(srcdir)/'`kern/corecmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-corecmd.Tpo kern/$(DEPDIR)/kernel_exec-corecmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/corecmd.c' object='kern/kernel_exec-corecmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-corecmd.o `test -f 'kern/corecmd.c' || echo '$(srcdir)/'`kern/corecmd.c + +kern/kernel_exec-corecmd.obj: kern/corecmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-corecmd.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-corecmd.Tpo -c -o kern/kernel_exec-corecmd.obj `if test -f 'kern/corecmd.c'; then $(CYGPATH_W) 'kern/corecmd.c'; else $(CYGPATH_W) '$(srcdir)/kern/corecmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-corecmd.Tpo kern/$(DEPDIR)/kernel_exec-corecmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/corecmd.c' object='kern/kernel_exec-corecmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-corecmd.obj `if test -f 'kern/corecmd.c'; then $(CYGPATH_W) 'kern/corecmd.c'; else $(CYGPATH_W) '$(srcdir)/kern/corecmd.c'; fi` + +kern/kernel_exec-device.o: kern/device.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-device.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-device.Tpo -c -o kern/kernel_exec-device.o `test -f 'kern/device.c' || echo '$(srcdir)/'`kern/device.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-device.Tpo kern/$(DEPDIR)/kernel_exec-device.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/device.c' object='kern/kernel_exec-device.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-device.o `test -f 'kern/device.c' || echo '$(srcdir)/'`kern/device.c + +kern/kernel_exec-device.obj: kern/device.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-device.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-device.Tpo -c -o kern/kernel_exec-device.obj `if test -f 'kern/device.c'; then $(CYGPATH_W) 'kern/device.c'; else $(CYGPATH_W) '$(srcdir)/kern/device.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-device.Tpo kern/$(DEPDIR)/kernel_exec-device.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/device.c' object='kern/kernel_exec-device.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-device.obj `if test -f 'kern/device.c'; then $(CYGPATH_W) 'kern/device.c'; else $(CYGPATH_W) '$(srcdir)/kern/device.c'; fi` + +kern/kernel_exec-disk.o: kern/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-disk.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-disk.Tpo -c -o kern/kernel_exec-disk.o `test -f 'kern/disk.c' || echo '$(srcdir)/'`kern/disk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-disk.Tpo kern/$(DEPDIR)/kernel_exec-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/disk.c' object='kern/kernel_exec-disk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-disk.o `test -f 'kern/disk.c' || echo '$(srcdir)/'`kern/disk.c + +kern/kernel_exec-disk.obj: kern/disk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-disk.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-disk.Tpo -c -o kern/kernel_exec-disk.obj `if test -f 'kern/disk.c'; then $(CYGPATH_W) 'kern/disk.c'; else $(CYGPATH_W) '$(srcdir)/kern/disk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-disk.Tpo kern/$(DEPDIR)/kernel_exec-disk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/disk.c' object='kern/kernel_exec-disk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-disk.obj `if test -f 'kern/disk.c'; then $(CYGPATH_W) 'kern/disk.c'; else $(CYGPATH_W) '$(srcdir)/kern/disk.c'; fi` + +kern/kernel_exec-dl.o: kern/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-dl.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/kernel_exec-dl.o `test -f 'kern/dl.c' || echo '$(srcdir)/'`kern/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-dl.Tpo kern/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/dl.c' object='kern/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-dl.o `test -f 'kern/dl.c' || echo '$(srcdir)/'`kern/dl.c + +kern/kernel_exec-dl.obj: kern/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-dl.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/kernel_exec-dl.obj `if test -f 'kern/dl.c'; then $(CYGPATH_W) 'kern/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-dl.Tpo kern/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/dl.c' object='kern/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-dl.obj `if test -f 'kern/dl.c'; then $(CYGPATH_W) 'kern/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/dl.c'; fi` + +kern/kernel_exec-env.o: kern/env.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-env.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-env.Tpo -c -o kern/kernel_exec-env.o `test -f 'kern/env.c' || echo '$(srcdir)/'`kern/env.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-env.Tpo kern/$(DEPDIR)/kernel_exec-env.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/env.c' object='kern/kernel_exec-env.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-env.o `test -f 'kern/env.c' || echo '$(srcdir)/'`kern/env.c + +kern/kernel_exec-env.obj: kern/env.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-env.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-env.Tpo -c -o kern/kernel_exec-env.obj `if test -f 'kern/env.c'; then $(CYGPATH_W) 'kern/env.c'; else $(CYGPATH_W) '$(srcdir)/kern/env.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-env.Tpo kern/$(DEPDIR)/kernel_exec-env.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/env.c' object='kern/kernel_exec-env.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-env.obj `if test -f 'kern/env.c'; then $(CYGPATH_W) 'kern/env.c'; else $(CYGPATH_W) '$(srcdir)/kern/env.c'; fi` + +kern/kernel_exec-err.o: kern/err.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-err.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-err.Tpo -c -o kern/kernel_exec-err.o `test -f 'kern/err.c' || echo '$(srcdir)/'`kern/err.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-err.Tpo kern/$(DEPDIR)/kernel_exec-err.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/err.c' object='kern/kernel_exec-err.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-err.o `test -f 'kern/err.c' || echo '$(srcdir)/'`kern/err.c + +kern/kernel_exec-err.obj: kern/err.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-err.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-err.Tpo -c -o kern/kernel_exec-err.obj `if test -f 'kern/err.c'; then $(CYGPATH_W) 'kern/err.c'; else $(CYGPATH_W) '$(srcdir)/kern/err.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-err.Tpo kern/$(DEPDIR)/kernel_exec-err.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/err.c' object='kern/kernel_exec-err.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-err.obj `if test -f 'kern/err.c'; then $(CYGPATH_W) 'kern/err.c'; else $(CYGPATH_W) '$(srcdir)/kern/err.c'; fi` + +kern/kernel_exec-file.o: kern/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-file.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-file.Tpo -c -o kern/kernel_exec-file.o `test -f 'kern/file.c' || echo '$(srcdir)/'`kern/file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-file.Tpo kern/$(DEPDIR)/kernel_exec-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/file.c' object='kern/kernel_exec-file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-file.o `test -f 'kern/file.c' || echo '$(srcdir)/'`kern/file.c + +kern/kernel_exec-file.obj: kern/file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-file.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-file.Tpo -c -o kern/kernel_exec-file.obj `if test -f 'kern/file.c'; then $(CYGPATH_W) 'kern/file.c'; else $(CYGPATH_W) '$(srcdir)/kern/file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-file.Tpo kern/$(DEPDIR)/kernel_exec-file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/file.c' object='kern/kernel_exec-file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-file.obj `if test -f 'kern/file.c'; then $(CYGPATH_W) 'kern/file.c'; else $(CYGPATH_W) '$(srcdir)/kern/file.c'; fi` + +kern/kernel_exec-fs.o: kern/fs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-fs.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-fs.Tpo -c -o kern/kernel_exec-fs.o `test -f 'kern/fs.c' || echo '$(srcdir)/'`kern/fs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-fs.Tpo kern/$(DEPDIR)/kernel_exec-fs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/fs.c' object='kern/kernel_exec-fs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-fs.o `test -f 'kern/fs.c' || echo '$(srcdir)/'`kern/fs.c + +kern/kernel_exec-fs.obj: kern/fs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-fs.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-fs.Tpo -c -o kern/kernel_exec-fs.obj `if test -f 'kern/fs.c'; then $(CYGPATH_W) 'kern/fs.c'; else $(CYGPATH_W) '$(srcdir)/kern/fs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-fs.Tpo kern/$(DEPDIR)/kernel_exec-fs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/fs.c' object='kern/kernel_exec-fs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-fs.obj `if test -f 'kern/fs.c'; then $(CYGPATH_W) 'kern/fs.c'; else $(CYGPATH_W) '$(srcdir)/kern/fs.c'; fi` + +kern/kernel_exec-list.o: kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-list.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-list.Tpo -c -o kern/kernel_exec-list.o `test -f 'kern/list.c' || echo '$(srcdir)/'`kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-list.Tpo kern/$(DEPDIR)/kernel_exec-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/list.c' object='kern/kernel_exec-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-list.o `test -f 'kern/list.c' || echo '$(srcdir)/'`kern/list.c + +kern/kernel_exec-list.obj: kern/list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-list.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-list.Tpo -c -o kern/kernel_exec-list.obj `if test -f 'kern/list.c'; then $(CYGPATH_W) 'kern/list.c'; else $(CYGPATH_W) '$(srcdir)/kern/list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-list.Tpo kern/$(DEPDIR)/kernel_exec-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/list.c' object='kern/kernel_exec-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-list.obj `if test -f 'kern/list.c'; then $(CYGPATH_W) 'kern/list.c'; else $(CYGPATH_W) '$(srcdir)/kern/list.c'; fi` + +kern/kernel_exec-main.o: kern/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-main.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-main.Tpo -c -o kern/kernel_exec-main.o `test -f 'kern/main.c' || echo '$(srcdir)/'`kern/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-main.Tpo kern/$(DEPDIR)/kernel_exec-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/main.c' object='kern/kernel_exec-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-main.o `test -f 'kern/main.c' || echo '$(srcdir)/'`kern/main.c + +kern/kernel_exec-main.obj: kern/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-main.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-main.Tpo -c -o kern/kernel_exec-main.obj `if test -f 'kern/main.c'; then $(CYGPATH_W) 'kern/main.c'; else $(CYGPATH_W) '$(srcdir)/kern/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-main.Tpo kern/$(DEPDIR)/kernel_exec-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/main.c' object='kern/kernel_exec-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-main.obj `if test -f 'kern/main.c'; then $(CYGPATH_W) 'kern/main.c'; else $(CYGPATH_W) '$(srcdir)/kern/main.c'; fi` + +kern/kernel_exec-misc.o: kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-misc.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-misc.Tpo -c -o kern/kernel_exec-misc.o `test -f 'kern/misc.c' || echo '$(srcdir)/'`kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-misc.Tpo kern/$(DEPDIR)/kernel_exec-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/misc.c' object='kern/kernel_exec-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-misc.o `test -f 'kern/misc.c' || echo '$(srcdir)/'`kern/misc.c + +kern/kernel_exec-misc.obj: kern/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-misc.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-misc.Tpo -c -o kern/kernel_exec-misc.obj `if test -f 'kern/misc.c'; then $(CYGPATH_W) 'kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/kern/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-misc.Tpo kern/$(DEPDIR)/kernel_exec-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/misc.c' object='kern/kernel_exec-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-misc.obj `if test -f 'kern/misc.c'; then $(CYGPATH_W) 'kern/misc.c'; else $(CYGPATH_W) '$(srcdir)/kern/misc.c'; fi` + +kern/kernel_exec-parser.o: kern/parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-parser.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-parser.Tpo -c -o kern/kernel_exec-parser.o `test -f 'kern/parser.c' || echo '$(srcdir)/'`kern/parser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-parser.Tpo kern/$(DEPDIR)/kernel_exec-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/parser.c' object='kern/kernel_exec-parser.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-parser.o `test -f 'kern/parser.c' || echo '$(srcdir)/'`kern/parser.c + +kern/kernel_exec-parser.obj: kern/parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-parser.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-parser.Tpo -c -o kern/kernel_exec-parser.obj `if test -f 'kern/parser.c'; then $(CYGPATH_W) 'kern/parser.c'; else $(CYGPATH_W) '$(srcdir)/kern/parser.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-parser.Tpo kern/$(DEPDIR)/kernel_exec-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/parser.c' object='kern/kernel_exec-parser.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-parser.obj `if test -f 'kern/parser.c'; then $(CYGPATH_W) 'kern/parser.c'; else $(CYGPATH_W) '$(srcdir)/kern/parser.c'; fi` + +kern/kernel_exec-partition.o: kern/partition.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-partition.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-partition.Tpo -c -o kern/kernel_exec-partition.o `test -f 'kern/partition.c' || echo '$(srcdir)/'`kern/partition.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-partition.Tpo kern/$(DEPDIR)/kernel_exec-partition.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/partition.c' object='kern/kernel_exec-partition.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-partition.o `test -f 'kern/partition.c' || echo '$(srcdir)/'`kern/partition.c + +kern/kernel_exec-partition.obj: kern/partition.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-partition.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-partition.Tpo -c -o kern/kernel_exec-partition.obj `if test -f 'kern/partition.c'; then $(CYGPATH_W) 'kern/partition.c'; else $(CYGPATH_W) '$(srcdir)/kern/partition.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-partition.Tpo kern/$(DEPDIR)/kernel_exec-partition.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/partition.c' object='kern/kernel_exec-partition.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-partition.obj `if test -f 'kern/partition.c'; then $(CYGPATH_W) 'kern/partition.c'; else $(CYGPATH_W) '$(srcdir)/kern/partition.c'; fi` + +kern/kernel_exec-rescue_parser.o: kern/rescue_parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-rescue_parser.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-rescue_parser.Tpo -c -o kern/kernel_exec-rescue_parser.o `test -f 'kern/rescue_parser.c' || echo '$(srcdir)/'`kern/rescue_parser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-rescue_parser.Tpo kern/$(DEPDIR)/kernel_exec-rescue_parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/rescue_parser.c' object='kern/kernel_exec-rescue_parser.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-rescue_parser.o `test -f 'kern/rescue_parser.c' || echo '$(srcdir)/'`kern/rescue_parser.c + +kern/kernel_exec-rescue_parser.obj: kern/rescue_parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-rescue_parser.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-rescue_parser.Tpo -c -o kern/kernel_exec-rescue_parser.obj `if test -f 'kern/rescue_parser.c'; then $(CYGPATH_W) 'kern/rescue_parser.c'; else $(CYGPATH_W) '$(srcdir)/kern/rescue_parser.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-rescue_parser.Tpo kern/$(DEPDIR)/kernel_exec-rescue_parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/rescue_parser.c' object='kern/kernel_exec-rescue_parser.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-rescue_parser.obj `if test -f 'kern/rescue_parser.c'; then $(CYGPATH_W) 'kern/rescue_parser.c'; else $(CYGPATH_W) '$(srcdir)/kern/rescue_parser.c'; fi` + +kern/kernel_exec-rescue_reader.o: kern/rescue_reader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-rescue_reader.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-rescue_reader.Tpo -c -o kern/kernel_exec-rescue_reader.o `test -f 'kern/rescue_reader.c' || echo '$(srcdir)/'`kern/rescue_reader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-rescue_reader.Tpo kern/$(DEPDIR)/kernel_exec-rescue_reader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/rescue_reader.c' object='kern/kernel_exec-rescue_reader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-rescue_reader.o `test -f 'kern/rescue_reader.c' || echo '$(srcdir)/'`kern/rescue_reader.c + +kern/kernel_exec-rescue_reader.obj: kern/rescue_reader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-rescue_reader.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-rescue_reader.Tpo -c -o kern/kernel_exec-rescue_reader.obj `if test -f 'kern/rescue_reader.c'; then $(CYGPATH_W) 'kern/rescue_reader.c'; else $(CYGPATH_W) '$(srcdir)/kern/rescue_reader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-rescue_reader.Tpo kern/$(DEPDIR)/kernel_exec-rescue_reader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/rescue_reader.c' object='kern/kernel_exec-rescue_reader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-rescue_reader.obj `if test -f 'kern/rescue_reader.c'; then $(CYGPATH_W) 'kern/rescue_reader.c'; else $(CYGPATH_W) '$(srcdir)/kern/rescue_reader.c'; fi` + +kern/kernel_exec-term.o: kern/term.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-term.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-term.Tpo -c -o kern/kernel_exec-term.o `test -f 'kern/term.c' || echo '$(srcdir)/'`kern/term.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-term.Tpo kern/$(DEPDIR)/kernel_exec-term.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/term.c' object='kern/kernel_exec-term.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-term.o `test -f 'kern/term.c' || echo '$(srcdir)/'`kern/term.c + +kern/kernel_exec-term.obj: kern/term.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-term.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-term.Tpo -c -o kern/kernel_exec-term.obj `if test -f 'kern/term.c'; then $(CYGPATH_W) 'kern/term.c'; else $(CYGPATH_W) '$(srcdir)/kern/term.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-term.Tpo kern/$(DEPDIR)/kernel_exec-term.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/term.c' object='kern/kernel_exec-term.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-term.obj `if test -f 'kern/term.c'; then $(CYGPATH_W) 'kern/term.c'; else $(CYGPATH_W) '$(srcdir)/kern/term.c'; fi` + +kern/arm/efi/kernel_exec-init.o: kern/arm/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/efi/kernel_exec-init.o -MD -MP -MF kern/arm/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/arm/efi/kernel_exec-init.o `test -f 'kern/arm/efi/init.c' || echo '$(srcdir)/'`kern/arm/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/arm/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/efi/init.c' object='kern/arm/efi/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/efi/kernel_exec-init.o `test -f 'kern/arm/efi/init.c' || echo '$(srcdir)/'`kern/arm/efi/init.c + +kern/arm/efi/kernel_exec-init.obj: kern/arm/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/efi/kernel_exec-init.obj -MD -MP -MF kern/arm/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/arm/efi/kernel_exec-init.obj `if test -f 'kern/arm/efi/init.c'; then $(CYGPATH_W) 'kern/arm/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/efi/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/arm/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/efi/init.c' object='kern/arm/efi/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/efi/kernel_exec-init.obj `if test -f 'kern/arm/efi/init.c'; then $(CYGPATH_W) 'kern/arm/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/efi/init.c'; fi` + +kern/arm/efi/kernel_exec-misc.o: kern/arm/efi/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/efi/kernel_exec-misc.o -MD -MP -MF kern/arm/efi/$(DEPDIR)/kernel_exec-misc.Tpo -c -o kern/arm/efi/kernel_exec-misc.o `test -f 'kern/arm/efi/misc.c' || echo '$(srcdir)/'`kern/arm/efi/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/efi/$(DEPDIR)/kernel_exec-misc.Tpo kern/arm/efi/$(DEPDIR)/kernel_exec-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/efi/misc.c' object='kern/arm/efi/kernel_exec-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/efi/kernel_exec-misc.o `test -f 'kern/arm/efi/misc.c' || echo '$(srcdir)/'`kern/arm/efi/misc.c + +kern/arm/efi/kernel_exec-misc.obj: kern/arm/efi/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/efi/kernel_exec-misc.obj -MD -MP -MF kern/arm/efi/$(DEPDIR)/kernel_exec-misc.Tpo -c -o kern/arm/efi/kernel_exec-misc.obj `if test -f 'kern/arm/efi/misc.c'; then $(CYGPATH_W) 'kern/arm/efi/misc.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/efi/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/efi/$(DEPDIR)/kernel_exec-misc.Tpo kern/arm/efi/$(DEPDIR)/kernel_exec-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/efi/misc.c' object='kern/arm/efi/kernel_exec-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/efi/kernel_exec-misc.obj `if test -f 'kern/arm/efi/misc.c'; then $(CYGPATH_W) 'kern/arm/efi/misc.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/efi/misc.c'; fi` + +kern/arm/kernel_exec-dl.o: kern/arm/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/kernel_exec-dl.o -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/arm/kernel_exec-dl.o `test -f 'kern/arm/dl.c' || echo '$(srcdir)/'`kern/arm/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-dl.Tpo kern/arm/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/dl.c' object='kern/arm/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/kernel_exec-dl.o `test -f 'kern/arm/dl.c' || echo '$(srcdir)/'`kern/arm/dl.c + +kern/arm/kernel_exec-dl.obj: kern/arm/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/kernel_exec-dl.obj -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/arm/kernel_exec-dl.obj `if test -f 'kern/arm/dl.c'; then $(CYGPATH_W) 'kern/arm/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-dl.Tpo kern/arm/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/dl.c' object='kern/arm/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/kernel_exec-dl.obj `if test -f 'kern/arm/dl.c'; then $(CYGPATH_W) 'kern/arm/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/dl.c'; fi` + +kern/arm/kernel_exec-dl_helper.o: kern/arm/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/kernel_exec-dl_helper.o -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-dl_helper.Tpo -c -o kern/arm/kernel_exec-dl_helper.o `test -f 'kern/arm/dl_helper.c' || echo '$(srcdir)/'`kern/arm/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-dl_helper.Tpo kern/arm/$(DEPDIR)/kernel_exec-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/dl_helper.c' object='kern/arm/kernel_exec-dl_helper.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/kernel_exec-dl_helper.o `test -f 'kern/arm/dl_helper.c' || echo '$(srcdir)/'`kern/arm/dl_helper.c + +kern/arm/kernel_exec-dl_helper.obj: kern/arm/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/kernel_exec-dl_helper.obj -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-dl_helper.Tpo -c -o kern/arm/kernel_exec-dl_helper.obj `if test -f 'kern/arm/dl_helper.c'; then $(CYGPATH_W) 'kern/arm/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/dl_helper.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-dl_helper.Tpo kern/arm/$(DEPDIR)/kernel_exec-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/dl_helper.c' object='kern/arm/kernel_exec-dl_helper.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/kernel_exec-dl_helper.obj `if test -f 'kern/arm/dl_helper.c'; then $(CYGPATH_W) 'kern/arm/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/dl_helper.c'; fi` + +kern/arm/kernel_exec-cache.o: kern/arm/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/kernel_exec-cache.o -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/arm/kernel_exec-cache.o `test -f 'kern/arm/cache.c' || echo '$(srcdir)/'`kern/arm/cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-cache.Tpo kern/arm/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/cache.c' object='kern/arm/kernel_exec-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/kernel_exec-cache.o `test -f 'kern/arm/cache.c' || echo '$(srcdir)/'`kern/arm/cache.c + +kern/arm/kernel_exec-cache.obj: kern/arm/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/arm/kernel_exec-cache.obj -MD -MP -MF kern/arm/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/arm/kernel_exec-cache.obj `if test -f 'kern/arm/cache.c'; then $(CYGPATH_W) 'kern/arm/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/cache.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/arm/$(DEPDIR)/kernel_exec-cache.Tpo kern/arm/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/arm/cache.c' object='kern/arm/kernel_exec-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/arm/kernel_exec-cache.obj `if test -f 'kern/arm/cache.c'; then $(CYGPATH_W) 'kern/arm/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/arm/cache.c'; fi` + +lib/kernel_exec-division.o: lib/division.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT lib/kernel_exec-division.o -MD -MP -MF lib/$(DEPDIR)/kernel_exec-division.Tpo -c -o lib/kernel_exec-division.o `test -f 'lib/division.c' || echo '$(srcdir)/'`lib/division.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/kernel_exec-division.Tpo lib/$(DEPDIR)/kernel_exec-division.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/division.c' object='lib/kernel_exec-division.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o lib/kernel_exec-division.o `test -f 'lib/division.c' || echo '$(srcdir)/'`lib/division.c + +lib/kernel_exec-division.obj: lib/division.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT lib/kernel_exec-division.obj -MD -MP -MF lib/$(DEPDIR)/kernel_exec-division.Tpo -c -o lib/kernel_exec-division.obj `if test -f 'lib/division.c'; then $(CYGPATH_W) 'lib/division.c'; else $(CYGPATH_W) '$(srcdir)/lib/division.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/kernel_exec-division.Tpo lib/$(DEPDIR)/kernel_exec-division.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/division.c' object='lib/kernel_exec-division.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o lib/kernel_exec-division.obj `if test -f 'lib/division.c'; then $(CYGPATH_W) 'lib/division.c'; else $(CYGPATH_W) '$(srcdir)/lib/division.c'; fi` + +disk/uboot/kernel_exec-ubootdisk.o: disk/uboot/ubootdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/uboot/kernel_exec-ubootdisk.o -MD -MP -MF disk/uboot/$(DEPDIR)/kernel_exec-ubootdisk.Tpo -c -o disk/uboot/kernel_exec-ubootdisk.o `test -f 'disk/uboot/ubootdisk.c' || echo '$(srcdir)/'`disk/uboot/ubootdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/uboot/$(DEPDIR)/kernel_exec-ubootdisk.Tpo disk/uboot/$(DEPDIR)/kernel_exec-ubootdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/uboot/ubootdisk.c' object='disk/uboot/kernel_exec-ubootdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/uboot/kernel_exec-ubootdisk.o `test -f 'disk/uboot/ubootdisk.c' || echo '$(srcdir)/'`disk/uboot/ubootdisk.c + +disk/uboot/kernel_exec-ubootdisk.obj: disk/uboot/ubootdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/uboot/kernel_exec-ubootdisk.obj -MD -MP -MF disk/uboot/$(DEPDIR)/kernel_exec-ubootdisk.Tpo -c -o disk/uboot/kernel_exec-ubootdisk.obj `if test -f 'disk/uboot/ubootdisk.c'; then $(CYGPATH_W) 'disk/uboot/ubootdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/uboot/ubootdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/uboot/$(DEPDIR)/kernel_exec-ubootdisk.Tpo disk/uboot/$(DEPDIR)/kernel_exec-ubootdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/uboot/ubootdisk.c' object='disk/uboot/kernel_exec-ubootdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/uboot/kernel_exec-ubootdisk.obj `if test -f 'disk/uboot/ubootdisk.c'; then $(CYGPATH_W) 'disk/uboot/ubootdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/uboot/ubootdisk.c'; fi` + +kern/uboot/kernel_exec-uboot.o: kern/uboot/uboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/uboot/kernel_exec-uboot.o -MD -MP -MF kern/uboot/$(DEPDIR)/kernel_exec-uboot.Tpo -c -o kern/uboot/kernel_exec-uboot.o `test -f 'kern/uboot/uboot.c' || echo '$(srcdir)/'`kern/uboot/uboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/uboot/$(DEPDIR)/kernel_exec-uboot.Tpo kern/uboot/$(DEPDIR)/kernel_exec-uboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/uboot/uboot.c' object='kern/uboot/kernel_exec-uboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/uboot/kernel_exec-uboot.o `test -f 'kern/uboot/uboot.c' || echo '$(srcdir)/'`kern/uboot/uboot.c + +kern/uboot/kernel_exec-uboot.obj: kern/uboot/uboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/uboot/kernel_exec-uboot.obj -MD -MP -MF kern/uboot/$(DEPDIR)/kernel_exec-uboot.Tpo -c -o kern/uboot/kernel_exec-uboot.obj `if test -f 'kern/uboot/uboot.c'; then $(CYGPATH_W) 'kern/uboot/uboot.c'; else $(CYGPATH_W) '$(srcdir)/kern/uboot/uboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/uboot/$(DEPDIR)/kernel_exec-uboot.Tpo kern/uboot/$(DEPDIR)/kernel_exec-uboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/uboot/uboot.c' object='kern/uboot/kernel_exec-uboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/uboot/kernel_exec-uboot.obj `if test -f 'kern/uboot/uboot.c'; then $(CYGPATH_W) 'kern/uboot/uboot.c'; else $(CYGPATH_W) '$(srcdir)/kern/uboot/uboot.c'; fi` + +kern/uboot/kernel_exec-init.o: kern/uboot/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/uboot/kernel_exec-init.o -MD -MP -MF kern/uboot/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/uboot/kernel_exec-init.o `test -f 'kern/uboot/init.c' || echo '$(srcdir)/'`kern/uboot/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/uboot/$(DEPDIR)/kernel_exec-init.Tpo kern/uboot/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/uboot/init.c' object='kern/uboot/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/uboot/kernel_exec-init.o `test -f 'kern/uboot/init.c' || echo '$(srcdir)/'`kern/uboot/init.c + +kern/uboot/kernel_exec-init.obj: kern/uboot/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/uboot/kernel_exec-init.obj -MD -MP -MF kern/uboot/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/uboot/kernel_exec-init.obj `if test -f 'kern/uboot/init.c'; then $(CYGPATH_W) 'kern/uboot/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/uboot/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/uboot/$(DEPDIR)/kernel_exec-init.Tpo kern/uboot/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/uboot/init.c' object='kern/uboot/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/uboot/kernel_exec-init.obj `if test -f 'kern/uboot/init.c'; then $(CYGPATH_W) 'kern/uboot/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/uboot/init.c'; fi` + +kern/uboot/kernel_exec-hw.o: kern/uboot/hw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/uboot/kernel_exec-hw.o -MD -MP -MF kern/uboot/$(DEPDIR)/kernel_exec-hw.Tpo -c -o kern/uboot/kernel_exec-hw.o `test -f 'kern/uboot/hw.c' || echo '$(srcdir)/'`kern/uboot/hw.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/uboot/$(DEPDIR)/kernel_exec-hw.Tpo kern/uboot/$(DEPDIR)/kernel_exec-hw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/uboot/hw.c' object='kern/uboot/kernel_exec-hw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/uboot/kernel_exec-hw.o `test -f 'kern/uboot/hw.c' || echo '$(srcdir)/'`kern/uboot/hw.c + +kern/uboot/kernel_exec-hw.obj: kern/uboot/hw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/uboot/kernel_exec-hw.obj -MD -MP -MF kern/uboot/$(DEPDIR)/kernel_exec-hw.Tpo -c -o kern/uboot/kernel_exec-hw.obj `if test -f 'kern/uboot/hw.c'; then $(CYGPATH_W) 'kern/uboot/hw.c'; else $(CYGPATH_W) '$(srcdir)/kern/uboot/hw.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/uboot/$(DEPDIR)/kernel_exec-hw.Tpo kern/uboot/$(DEPDIR)/kernel_exec-hw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/uboot/hw.c' object='kern/uboot/kernel_exec-hw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/uboot/kernel_exec-hw.obj `if test -f 'kern/uboot/hw.c'; then $(CYGPATH_W) 'kern/uboot/hw.c'; else $(CYGPATH_W) '$(srcdir)/kern/uboot/hw.c'; fi` + +term/uboot/kernel_exec-console.o: term/uboot/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/uboot/kernel_exec-console.o -MD -MP -MF term/uboot/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/uboot/kernel_exec-console.o `test -f 'term/uboot/console.c' || echo '$(srcdir)/'`term/uboot/console.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/uboot/$(DEPDIR)/kernel_exec-console.Tpo term/uboot/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/uboot/console.c' object='term/uboot/kernel_exec-console.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/uboot/kernel_exec-console.o `test -f 'term/uboot/console.c' || echo '$(srcdir)/'`term/uboot/console.c + +term/uboot/kernel_exec-console.obj: term/uboot/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/uboot/kernel_exec-console.obj -MD -MP -MF term/uboot/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/uboot/kernel_exec-console.obj `if test -f 'term/uboot/console.c'; then $(CYGPATH_W) 'term/uboot/console.c'; else $(CYGPATH_W) '$(srcdir)/term/uboot/console.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/uboot/$(DEPDIR)/kernel_exec-console.Tpo term/uboot/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/uboot/console.c' object='term/uboot/kernel_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/uboot/kernel_exec-console.obj `if test -f 'term/uboot/console.c'; then $(CYGPATH_W) 'term/uboot/console.c'; else $(CYGPATH_W) '$(srcdir)/term/uboot/console.c'; fi` + +term/kernel_exec-terminfo.o: term/terminfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-terminfo.o -MD -MP -MF term/$(DEPDIR)/kernel_exec-terminfo.Tpo -c -o term/kernel_exec-terminfo.o `test -f 'term/terminfo.c' || echo '$(srcdir)/'`term/terminfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-terminfo.Tpo term/$(DEPDIR)/kernel_exec-terminfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/terminfo.c' object='term/kernel_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-terminfo.o `test -f 'term/terminfo.c' || echo '$(srcdir)/'`term/terminfo.c + +term/kernel_exec-terminfo.obj: term/terminfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-terminfo.obj -MD -MP -MF term/$(DEPDIR)/kernel_exec-terminfo.Tpo -c -o term/kernel_exec-terminfo.obj `if test -f 'term/terminfo.c'; then $(CYGPATH_W) 'term/terminfo.c'; else $(CYGPATH_W) '$(srcdir)/term/terminfo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-terminfo.Tpo term/$(DEPDIR)/kernel_exec-terminfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/terminfo.c' object='term/kernel_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-terminfo.obj `if test -f 'term/terminfo.c'; then $(CYGPATH_W) 'term/terminfo.c'; else $(CYGPATH_W) '$(srcdir)/term/terminfo.c'; fi` + +term/kernel_exec-tparm.o: term/tparm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-tparm.o -MD -MP -MF term/$(DEPDIR)/kernel_exec-tparm.Tpo -c -o term/kernel_exec-tparm.o `test -f 'term/tparm.c' || echo '$(srcdir)/'`term/tparm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-tparm.Tpo term/$(DEPDIR)/kernel_exec-tparm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/tparm.c' object='term/kernel_exec-tparm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-tparm.o `test -f 'term/tparm.c' || echo '$(srcdir)/'`term/tparm.c + +term/kernel_exec-tparm.obj: term/tparm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-tparm.obj -MD -MP -MF term/$(DEPDIR)/kernel_exec-tparm.Tpo -c -o term/kernel_exec-tparm.obj `if test -f 'term/tparm.c'; then $(CYGPATH_W) 'term/tparm.c'; else $(CYGPATH_W) '$(srcdir)/term/tparm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-tparm.Tpo term/$(DEPDIR)/kernel_exec-tparm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/tparm.c' object='term/kernel_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-tparm.obj `if test -f 'term/tparm.c'; then $(CYGPATH_W) 'term/tparm.c'; else $(CYGPATH_W) '$(srcdir)/term/tparm.c'; fi` + +commands/kernel_exec-extcmd.o: commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT commands/kernel_exec-extcmd.o -MD -MP -MF commands/$(DEPDIR)/kernel_exec-extcmd.Tpo -c -o commands/kernel_exec-extcmd.o `test -f 'commands/extcmd.c' || echo '$(srcdir)/'`commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/kernel_exec-extcmd.Tpo commands/$(DEPDIR)/kernel_exec-extcmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/extcmd.c' object='commands/kernel_exec-extcmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o commands/kernel_exec-extcmd.o `test -f 'commands/extcmd.c' || echo '$(srcdir)/'`commands/extcmd.c + +commands/kernel_exec-extcmd.obj: commands/extcmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT commands/kernel_exec-extcmd.obj -MD -MP -MF commands/$(DEPDIR)/kernel_exec-extcmd.Tpo -c -o commands/kernel_exec-extcmd.obj `if test -f 'commands/extcmd.c'; then $(CYGPATH_W) 'commands/extcmd.c'; else $(CYGPATH_W) '$(srcdir)/commands/extcmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/kernel_exec-extcmd.Tpo commands/$(DEPDIR)/kernel_exec-extcmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/extcmd.c' object='commands/kernel_exec-extcmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o commands/kernel_exec-extcmd.obj `if test -f 'commands/extcmd.c'; then $(CYGPATH_W) 'commands/extcmd.c'; else $(CYGPATH_W) '$(srcdir)/commands/extcmd.c'; fi` + +lib/kernel_exec-arg.o: lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT lib/kernel_exec-arg.o -MD -MP -MF lib/$(DEPDIR)/kernel_exec-arg.Tpo -c -o lib/kernel_exec-arg.o `test -f 'lib/arg.c' || echo '$(srcdir)/'`lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/kernel_exec-arg.Tpo lib/$(DEPDIR)/kernel_exec-arg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/arg.c' object='lib/kernel_exec-arg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o lib/kernel_exec-arg.o `test -f 'lib/arg.c' || echo '$(srcdir)/'`lib/arg.c + +lib/kernel_exec-arg.obj: lib/arg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT lib/kernel_exec-arg.obj -MD -MP -MF lib/$(DEPDIR)/kernel_exec-arg.Tpo -c -o lib/kernel_exec-arg.obj `if test -f 'lib/arg.c'; then $(CYGPATH_W) 'lib/arg.c'; else $(CYGPATH_W) '$(srcdir)/lib/arg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/kernel_exec-arg.Tpo lib/$(DEPDIR)/kernel_exec-arg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/arg.c' object='lib/kernel_exec-arg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o lib/kernel_exec-arg.obj `if test -f 'lib/arg.c'; then $(CYGPATH_W) 'lib/arg.c'; else $(CYGPATH_W) '$(srcdir)/lib/arg.c'; fi` + +disk/kernel_exec-host.o: disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/kernel_exec-host.o -MD -MP -MF disk/$(DEPDIR)/kernel_exec-host.Tpo -c -o disk/kernel_exec-host.o `test -f 'disk/host.c' || echo '$(srcdir)/'`disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/kernel_exec-host.Tpo disk/$(DEPDIR)/kernel_exec-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/host.c' object='disk/kernel_exec-host.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/kernel_exec-host.o `test -f 'disk/host.c' || echo '$(srcdir)/'`disk/host.c + +disk/kernel_exec-host.obj: disk/host.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/kernel_exec-host.obj -MD -MP -MF disk/$(DEPDIR)/kernel_exec-host.Tpo -c -o disk/kernel_exec-host.obj `if test -f 'disk/host.c'; then $(CYGPATH_W) 'disk/host.c'; else $(CYGPATH_W) '$(srcdir)/disk/host.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/kernel_exec-host.Tpo disk/$(DEPDIR)/kernel_exec-host.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/host.c' object='disk/kernel_exec-host.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/kernel_exec-host.obj `if test -f 'disk/host.c'; then $(CYGPATH_W) 'disk/host.c'; else $(CYGPATH_W) '$(srcdir)/disk/host.c'; fi` + +kern/emu/kernel_exec-hostdisk.o: kern/emu/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-hostdisk.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o kern/emu/kernel_exec-hostdisk.o `test -f 'kern/emu/hostdisk.c' || echo '$(srcdir)/'`kern/emu/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-hostdisk.Tpo kern/emu/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/hostdisk.c' object='kern/emu/kernel_exec-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-hostdisk.o `test -f 'kern/emu/hostdisk.c' || echo '$(srcdir)/'`kern/emu/hostdisk.c + +kern/emu/kernel_exec-hostdisk.obj: kern/emu/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-hostdisk.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o kern/emu/kernel_exec-hostdisk.obj `if test -f 'kern/emu/hostdisk.c'; then $(CYGPATH_W) 'kern/emu/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-hostdisk.Tpo kern/emu/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/hostdisk.c' object='kern/emu/kernel_exec-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-hostdisk.obj `if test -f 'kern/emu/hostdisk.c'; then $(CYGPATH_W) 'kern/emu/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/hostdisk.c'; fi` + +osdep/unix/kernel_exec-hostdisk.o: osdep/unix/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/unix/kernel_exec-hostdisk.o -MD -MP -MF osdep/unix/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o osdep/unix/kernel_exec-hostdisk.o `test -f 'osdep/unix/hostdisk.c' || echo '$(srcdir)/'`osdep/unix/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/unix/$(DEPDIR)/kernel_exec-hostdisk.Tpo osdep/unix/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/unix/hostdisk.c' object='osdep/unix/kernel_exec-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/unix/kernel_exec-hostdisk.o `test -f 'osdep/unix/hostdisk.c' || echo '$(srcdir)/'`osdep/unix/hostdisk.c + +osdep/unix/kernel_exec-hostdisk.obj: osdep/unix/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/unix/kernel_exec-hostdisk.obj -MD -MP -MF osdep/unix/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o osdep/unix/kernel_exec-hostdisk.obj `if test -f 'osdep/unix/hostdisk.c'; then $(CYGPATH_W) 'osdep/unix/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/osdep/unix/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/unix/$(DEPDIR)/kernel_exec-hostdisk.Tpo osdep/unix/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/unix/hostdisk.c' object='osdep/unix/kernel_exec-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/unix/kernel_exec-hostdisk.obj `if test -f 'osdep/unix/hostdisk.c'; then $(CYGPATH_W) 'osdep/unix/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/osdep/unix/hostdisk.c'; fi` + +osdep/kernel_exec-exec.o: osdep/exec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-exec.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-exec.Tpo -c -o osdep/kernel_exec-exec.o `test -f 'osdep/exec.c' || echo '$(srcdir)/'`osdep/exec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-exec.Tpo osdep/$(DEPDIR)/kernel_exec-exec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/exec.c' object='osdep/kernel_exec-exec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-exec.o `test -f 'osdep/exec.c' || echo '$(srcdir)/'`osdep/exec.c + +osdep/kernel_exec-exec.obj: osdep/exec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-exec.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-exec.Tpo -c -o osdep/kernel_exec-exec.obj `if test -f 'osdep/exec.c'; then $(CYGPATH_W) 'osdep/exec.c'; else $(CYGPATH_W) '$(srcdir)/osdep/exec.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-exec.Tpo osdep/$(DEPDIR)/kernel_exec-exec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/exec.c' object='osdep/kernel_exec-exec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-exec.obj `if test -f 'osdep/exec.c'; then $(CYGPATH_W) 'osdep/exec.c'; else $(CYGPATH_W) '$(srcdir)/osdep/exec.c'; fi` + +osdep/devmapper/kernel_exec-hostdisk.o: osdep/devmapper/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/devmapper/kernel_exec-hostdisk.o -MD -MP -MF osdep/devmapper/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o osdep/devmapper/kernel_exec-hostdisk.o `test -f 'osdep/devmapper/hostdisk.c' || echo '$(srcdir)/'`osdep/devmapper/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/devmapper/$(DEPDIR)/kernel_exec-hostdisk.Tpo osdep/devmapper/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/devmapper/hostdisk.c' object='osdep/devmapper/kernel_exec-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/devmapper/kernel_exec-hostdisk.o `test -f 'osdep/devmapper/hostdisk.c' || echo '$(srcdir)/'`osdep/devmapper/hostdisk.c + +osdep/devmapper/kernel_exec-hostdisk.obj: osdep/devmapper/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/devmapper/kernel_exec-hostdisk.obj -MD -MP -MF osdep/devmapper/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o osdep/devmapper/kernel_exec-hostdisk.obj `if test -f 'osdep/devmapper/hostdisk.c'; then $(CYGPATH_W) 'osdep/devmapper/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/osdep/devmapper/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/devmapper/$(DEPDIR)/kernel_exec-hostdisk.Tpo osdep/devmapper/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/devmapper/hostdisk.c' object='osdep/devmapper/kernel_exec-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/devmapper/kernel_exec-hostdisk.obj `if test -f 'osdep/devmapper/hostdisk.c'; then $(CYGPATH_W) 'osdep/devmapper/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/osdep/devmapper/hostdisk.c'; fi` + +osdep/kernel_exec-hostdisk.o: osdep/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-hostdisk.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o osdep/kernel_exec-hostdisk.o `test -f 'osdep/hostdisk.c' || echo '$(srcdir)/'`osdep/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-hostdisk.Tpo osdep/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/hostdisk.c' object='osdep/kernel_exec-hostdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-hostdisk.o `test -f 'osdep/hostdisk.c' || echo '$(srcdir)/'`osdep/hostdisk.c + +osdep/kernel_exec-hostdisk.obj: osdep/hostdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-hostdisk.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-hostdisk.Tpo -c -o osdep/kernel_exec-hostdisk.obj `if test -f 'osdep/hostdisk.c'; then $(CYGPATH_W) 'osdep/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/osdep/hostdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-hostdisk.Tpo osdep/$(DEPDIR)/kernel_exec-hostdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/hostdisk.c' object='osdep/kernel_exec-hostdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-hostdisk.obj `if test -f 'osdep/hostdisk.c'; then $(CYGPATH_W) 'osdep/hostdisk.c'; else $(CYGPATH_W) '$(srcdir)/osdep/hostdisk.c'; fi` + +kern/emu/kernel_exec-hostfs.o: kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-hostfs.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-hostfs.Tpo -c -o kern/emu/kernel_exec-hostfs.o `test -f 'kern/emu/hostfs.c' || echo '$(srcdir)/'`kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-hostfs.Tpo kern/emu/$(DEPDIR)/kernel_exec-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/hostfs.c' object='kern/emu/kernel_exec-hostfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-hostfs.o `test -f 'kern/emu/hostfs.c' || echo '$(srcdir)/'`kern/emu/hostfs.c + +kern/emu/kernel_exec-hostfs.obj: kern/emu/hostfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-hostfs.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-hostfs.Tpo -c -o kern/emu/kernel_exec-hostfs.obj `if test -f 'kern/emu/hostfs.c'; then $(CYGPATH_W) 'kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/hostfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-hostfs.Tpo kern/emu/$(DEPDIR)/kernel_exec-hostfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/hostfs.c' object='kern/emu/kernel_exec-hostfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-hostfs.obj `if test -f 'kern/emu/hostfs.c'; then $(CYGPATH_W) 'kern/emu/hostfs.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/hostfs.c'; fi` + +kern/emu/kernel_exec-main.o: kern/emu/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-main.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-main.Tpo -c -o kern/emu/kernel_exec-main.o `test -f 'kern/emu/main.c' || echo '$(srcdir)/'`kern/emu/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-main.Tpo kern/emu/$(DEPDIR)/kernel_exec-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/main.c' object='kern/emu/kernel_exec-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-main.o `test -f 'kern/emu/main.c' || echo '$(srcdir)/'`kern/emu/main.c + +kern/emu/kernel_exec-main.obj: kern/emu/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-main.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-main.Tpo -c -o kern/emu/kernel_exec-main.obj `if test -f 'kern/emu/main.c'; then $(CYGPATH_W) 'kern/emu/main.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-main.Tpo kern/emu/$(DEPDIR)/kernel_exec-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/main.c' object='kern/emu/kernel_exec-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-main.obj `if test -f 'kern/emu/main.c'; then $(CYGPATH_W) 'kern/emu/main.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/main.c'; fi` + +kern/emu/kernel_exec-argp_common.o: kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-argp_common.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-argp_common.Tpo -c -o kern/emu/kernel_exec-argp_common.o `test -f 'kern/emu/argp_common.c' || echo '$(srcdir)/'`kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-argp_common.Tpo kern/emu/$(DEPDIR)/kernel_exec-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/argp_common.c' object='kern/emu/kernel_exec-argp_common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-argp_common.o `test -f 'kern/emu/argp_common.c' || echo '$(srcdir)/'`kern/emu/argp_common.c + +kern/emu/kernel_exec-argp_common.obj: kern/emu/argp_common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-argp_common.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-argp_common.Tpo -c -o kern/emu/kernel_exec-argp_common.obj `if test -f 'kern/emu/argp_common.c'; then $(CYGPATH_W) 'kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/argp_common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-argp_common.Tpo kern/emu/$(DEPDIR)/kernel_exec-argp_common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/argp_common.c' object='kern/emu/kernel_exec-argp_common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-argp_common.obj `if test -f 'kern/emu/argp_common.c'; then $(CYGPATH_W) 'kern/emu/argp_common.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/argp_common.c'; fi` + +kern/emu/kernel_exec-misc.o: kern/emu/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-misc.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-misc.Tpo -c -o kern/emu/kernel_exec-misc.o `test -f 'kern/emu/misc.c' || echo '$(srcdir)/'`kern/emu/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-misc.Tpo kern/emu/$(DEPDIR)/kernel_exec-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/misc.c' object='kern/emu/kernel_exec-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-misc.o `test -f 'kern/emu/misc.c' || echo '$(srcdir)/'`kern/emu/misc.c + +kern/emu/kernel_exec-misc.obj: kern/emu/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-misc.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-misc.Tpo -c -o kern/emu/kernel_exec-misc.obj `if test -f 'kern/emu/misc.c'; then $(CYGPATH_W) 'kern/emu/misc.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-misc.Tpo kern/emu/$(DEPDIR)/kernel_exec-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/misc.c' object='kern/emu/kernel_exec-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-misc.obj `if test -f 'kern/emu/misc.c'; then $(CYGPATH_W) 'kern/emu/misc.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/misc.c'; fi` + +kern/emu/kernel_exec-mm.o: kern/emu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-mm.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-mm.Tpo -c -o kern/emu/kernel_exec-mm.o `test -f 'kern/emu/mm.c' || echo '$(srcdir)/'`kern/emu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-mm.Tpo kern/emu/$(DEPDIR)/kernel_exec-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/mm.c' object='kern/emu/kernel_exec-mm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-mm.o `test -f 'kern/emu/mm.c' || echo '$(srcdir)/'`kern/emu/mm.c + +kern/emu/kernel_exec-mm.obj: kern/emu/mm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-mm.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-mm.Tpo -c -o kern/emu/kernel_exec-mm.obj `if test -f 'kern/emu/mm.c'; then $(CYGPATH_W) 'kern/emu/mm.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/mm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-mm.Tpo kern/emu/$(DEPDIR)/kernel_exec-mm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/mm.c' object='kern/emu/kernel_exec-mm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-mm.obj `if test -f 'kern/emu/mm.c'; then $(CYGPATH_W) 'kern/emu/mm.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/mm.c'; fi` + +kern/emu/kernel_exec-time.o: kern/emu/time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-time.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-time.Tpo -c -o kern/emu/kernel_exec-time.o `test -f 'kern/emu/time.c' || echo '$(srcdir)/'`kern/emu/time.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-time.Tpo kern/emu/$(DEPDIR)/kernel_exec-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/time.c' object='kern/emu/kernel_exec-time.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-time.o `test -f 'kern/emu/time.c' || echo '$(srcdir)/'`kern/emu/time.c + +kern/emu/kernel_exec-time.obj: kern/emu/time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-time.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-time.Tpo -c -o kern/emu/kernel_exec-time.obj `if test -f 'kern/emu/time.c'; then $(CYGPATH_W) 'kern/emu/time.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/time.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-time.Tpo kern/emu/$(DEPDIR)/kernel_exec-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/time.c' object='kern/emu/kernel_exec-time.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-time.obj `if test -f 'kern/emu/time.c'; then $(CYGPATH_W) 'kern/emu/time.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/time.c'; fi` + +kern/emu/kernel_exec-cache.o: kern/emu/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-cache.o -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/emu/kernel_exec-cache.o `test -f 'kern/emu/cache.c' || echo '$(srcdir)/'`kern/emu/cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-cache.Tpo kern/emu/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/cache.c' object='kern/emu/kernel_exec-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-cache.o `test -f 'kern/emu/cache.c' || echo '$(srcdir)/'`kern/emu/cache.c + +kern/emu/kernel_exec-cache.obj: kern/emu/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/emu/kernel_exec-cache.obj -MD -MP -MF kern/emu/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/emu/kernel_exec-cache.obj `if test -f 'kern/emu/cache.c'; then $(CYGPATH_W) 'kern/emu/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/cache.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/emu/$(DEPDIR)/kernel_exec-cache.Tpo kern/emu/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/emu/cache.c' object='kern/emu/kernel_exec-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/emu/kernel_exec-cache.obj `if test -f 'kern/emu/cache.c'; then $(CYGPATH_W) 'kern/emu/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/emu/cache.c'; fi` + +osdep/kernel_exec-emuconsole.o: osdep/emuconsole.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-emuconsole.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-emuconsole.Tpo -c -o osdep/kernel_exec-emuconsole.o `test -f 'osdep/emuconsole.c' || echo '$(srcdir)/'`osdep/emuconsole.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-emuconsole.Tpo osdep/$(DEPDIR)/kernel_exec-emuconsole.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/emuconsole.c' object='osdep/kernel_exec-emuconsole.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-emuconsole.o `test -f 'osdep/emuconsole.c' || echo '$(srcdir)/'`osdep/emuconsole.c + +osdep/kernel_exec-emuconsole.obj: osdep/emuconsole.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-emuconsole.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-emuconsole.Tpo -c -o osdep/kernel_exec-emuconsole.obj `if test -f 'osdep/emuconsole.c'; then $(CYGPATH_W) 'osdep/emuconsole.c'; else $(CYGPATH_W) '$(srcdir)/osdep/emuconsole.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-emuconsole.Tpo osdep/$(DEPDIR)/kernel_exec-emuconsole.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/emuconsole.c' object='osdep/kernel_exec-emuconsole.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-emuconsole.obj `if test -f 'osdep/emuconsole.c'; then $(CYGPATH_W) 'osdep/emuconsole.c'; else $(CYGPATH_W) '$(srcdir)/osdep/emuconsole.c'; fi` + +osdep/kernel_exec-dl.o: osdep/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-dl.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-dl.Tpo -c -o osdep/kernel_exec-dl.o `test -f 'osdep/dl.c' || echo '$(srcdir)/'`osdep/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-dl.Tpo osdep/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/dl.c' object='osdep/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-dl.o `test -f 'osdep/dl.c' || echo '$(srcdir)/'`osdep/dl.c + +osdep/kernel_exec-dl.obj: osdep/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-dl.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-dl.Tpo -c -o osdep/kernel_exec-dl.obj `if test -f 'osdep/dl.c'; then $(CYGPATH_W) 'osdep/dl.c'; else $(CYGPATH_W) '$(srcdir)/osdep/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-dl.Tpo osdep/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/dl.c' object='osdep/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-dl.obj `if test -f 'osdep/dl.c'; then $(CYGPATH_W) 'osdep/dl.c'; else $(CYGPATH_W) '$(srcdir)/osdep/dl.c'; fi` + +osdep/kernel_exec-sleep.o: osdep/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-sleep.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-sleep.Tpo -c -o osdep/kernel_exec-sleep.o `test -f 'osdep/sleep.c' || echo '$(srcdir)/'`osdep/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-sleep.Tpo osdep/$(DEPDIR)/kernel_exec-sleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/sleep.c' object='osdep/kernel_exec-sleep.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-sleep.o `test -f 'osdep/sleep.c' || echo '$(srcdir)/'`osdep/sleep.c + +osdep/kernel_exec-sleep.obj: osdep/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-sleep.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-sleep.Tpo -c -o osdep/kernel_exec-sleep.obj `if test -f 'osdep/sleep.c'; then $(CYGPATH_W) 'osdep/sleep.c'; else $(CYGPATH_W) '$(srcdir)/osdep/sleep.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-sleep.Tpo osdep/$(DEPDIR)/kernel_exec-sleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/sleep.c' object='osdep/kernel_exec-sleep.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-sleep.obj `if test -f 'osdep/sleep.c'; then $(CYGPATH_W) 'osdep/sleep.c'; else $(CYGPATH_W) '$(srcdir)/osdep/sleep.c'; fi` + +osdep/kernel_exec-init.o: osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-init.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-init.Tpo -c -o osdep/kernel_exec-init.o `test -f 'osdep/init.c' || echo '$(srcdir)/'`osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-init.Tpo osdep/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/init.c' object='osdep/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-init.o `test -f 'osdep/init.c' || echo '$(srcdir)/'`osdep/init.c + +osdep/kernel_exec-init.obj: osdep/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-init.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-init.Tpo -c -o osdep/kernel_exec-init.obj `if test -f 'osdep/init.c'; then $(CYGPATH_W) 'osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/osdep/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-init.Tpo osdep/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/init.c' object='osdep/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-init.obj `if test -f 'osdep/init.c'; then $(CYGPATH_W) 'osdep/init.c'; else $(CYGPATH_W) '$(srcdir)/osdep/init.c'; fi` + +osdep/kernel_exec-emunet.o: osdep/emunet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-emunet.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-emunet.Tpo -c -o osdep/kernel_exec-emunet.o `test -f 'osdep/emunet.c' || echo '$(srcdir)/'`osdep/emunet.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-emunet.Tpo osdep/$(DEPDIR)/kernel_exec-emunet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/emunet.c' object='osdep/kernel_exec-emunet.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-emunet.o `test -f 'osdep/emunet.c' || echo '$(srcdir)/'`osdep/emunet.c + +osdep/kernel_exec-emunet.obj: osdep/emunet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-emunet.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-emunet.Tpo -c -o osdep/kernel_exec-emunet.obj `if test -f 'osdep/emunet.c'; then $(CYGPATH_W) 'osdep/emunet.c'; else $(CYGPATH_W) '$(srcdir)/osdep/emunet.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-emunet.Tpo osdep/$(DEPDIR)/kernel_exec-emunet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/emunet.c' object='osdep/kernel_exec-emunet.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-emunet.obj `if test -f 'osdep/emunet.c'; then $(CYGPATH_W) 'osdep/emunet.c'; else $(CYGPATH_W) '$(srcdir)/osdep/emunet.c'; fi` + +osdep/kernel_exec-cputime.o: osdep/cputime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-cputime.o -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-cputime.Tpo -c -o osdep/kernel_exec-cputime.o `test -f 'osdep/cputime.c' || echo '$(srcdir)/'`osdep/cputime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-cputime.Tpo osdep/$(DEPDIR)/kernel_exec-cputime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/cputime.c' object='osdep/kernel_exec-cputime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-cputime.o `test -f 'osdep/cputime.c' || echo '$(srcdir)/'`osdep/cputime.c + +osdep/kernel_exec-cputime.obj: osdep/cputime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT osdep/kernel_exec-cputime.obj -MD -MP -MF osdep/$(DEPDIR)/kernel_exec-cputime.Tpo -c -o osdep/kernel_exec-cputime.obj `if test -f 'osdep/cputime.c'; then $(CYGPATH_W) 'osdep/cputime.c'; else $(CYGPATH_W) '$(srcdir)/osdep/cputime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) osdep/$(DEPDIR)/kernel_exec-cputime.Tpo osdep/$(DEPDIR)/kernel_exec-cputime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='osdep/cputime.c' object='osdep/kernel_exec-cputime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o osdep/kernel_exec-cputime.obj `if test -f 'osdep/cputime.c'; then $(CYGPATH_W) 'osdep/cputime.c'; else $(CYGPATH_W) '$(srcdir)/osdep/cputime.c'; fi` + +kern/i386/coreboot/kernel_exec-init.o: kern/i386/coreboot/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/kernel_exec-init.o -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/coreboot/kernel_exec-init.o `test -f 'kern/i386/coreboot/init.c' || echo '$(srcdir)/'`kern/i386/coreboot/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/init.c' object='kern/i386/coreboot/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/kernel_exec-init.o `test -f 'kern/i386/coreboot/init.c' || echo '$(srcdir)/'`kern/i386/coreboot/init.c + +kern/i386/coreboot/kernel_exec-init.obj: kern/i386/coreboot/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/kernel_exec-init.obj -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/coreboot/kernel_exec-init.obj `if test -f 'kern/i386/coreboot/init.c'; then $(CYGPATH_W) 'kern/i386/coreboot/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/init.c' object='kern/i386/coreboot/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/kernel_exec-init.obj `if test -f 'kern/i386/coreboot/init.c'; then $(CYGPATH_W) 'kern/i386/coreboot/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/init.c'; fi` + +video/i386/coreboot/kernel_exec-cbfb.o: video/i386/coreboot/cbfb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/i386/coreboot/kernel_exec-cbfb.o -MD -MP -MF video/i386/coreboot/$(DEPDIR)/kernel_exec-cbfb.Tpo -c -o video/i386/coreboot/kernel_exec-cbfb.o `test -f 'video/i386/coreboot/cbfb.c' || echo '$(srcdir)/'`video/i386/coreboot/cbfb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/i386/coreboot/$(DEPDIR)/kernel_exec-cbfb.Tpo video/i386/coreboot/$(DEPDIR)/kernel_exec-cbfb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/i386/coreboot/cbfb.c' object='video/i386/coreboot/kernel_exec-cbfb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/i386/coreboot/kernel_exec-cbfb.o `test -f 'video/i386/coreboot/cbfb.c' || echo '$(srcdir)/'`video/i386/coreboot/cbfb.c + +video/i386/coreboot/kernel_exec-cbfb.obj: video/i386/coreboot/cbfb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/i386/coreboot/kernel_exec-cbfb.obj -MD -MP -MF video/i386/coreboot/$(DEPDIR)/kernel_exec-cbfb.Tpo -c -o video/i386/coreboot/kernel_exec-cbfb.obj `if test -f 'video/i386/coreboot/cbfb.c'; then $(CYGPATH_W) 'video/i386/coreboot/cbfb.c'; else $(CYGPATH_W) '$(srcdir)/video/i386/coreboot/cbfb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/i386/coreboot/$(DEPDIR)/kernel_exec-cbfb.Tpo video/i386/coreboot/$(DEPDIR)/kernel_exec-cbfb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/i386/coreboot/cbfb.c' object='video/i386/coreboot/kernel_exec-cbfb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/i386/coreboot/kernel_exec-cbfb.obj `if test -f 'video/i386/coreboot/cbfb.c'; then $(CYGPATH_W) 'video/i386/coreboot/cbfb.c'; else $(CYGPATH_W) '$(srcdir)/video/i386/coreboot/cbfb.c'; fi` + +kern/i386/pc/kernel_exec-acpi.o: kern/i386/pc/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/pc/kernel_exec-acpi.o -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-acpi.Tpo -c -o kern/i386/pc/kernel_exec-acpi.o `test -f 'kern/i386/pc/acpi.c' || echo '$(srcdir)/'`kern/i386/pc/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-acpi.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/acpi.c' object='kern/i386/pc/kernel_exec-acpi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/kernel_exec-acpi.o `test -f 'kern/i386/pc/acpi.c' || echo '$(srcdir)/'`kern/i386/pc/acpi.c + +kern/i386/pc/kernel_exec-acpi.obj: kern/i386/pc/acpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/pc/kernel_exec-acpi.obj -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-acpi.Tpo -c -o kern/i386/pc/kernel_exec-acpi.obj `if test -f 'kern/i386/pc/acpi.c'; then $(CYGPATH_W) 'kern/i386/pc/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/acpi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-acpi.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-acpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/acpi.c' object='kern/i386/pc/kernel_exec-acpi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/kernel_exec-acpi.obj `if test -f 'kern/i386/pc/acpi.c'; then $(CYGPATH_W) 'kern/i386/pc/acpi.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/acpi.c'; fi` + +kern/i386/kernel_exec-tsc_pmtimer.o: kern/i386/tsc_pmtimer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-tsc_pmtimer.o -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-tsc_pmtimer.Tpo -c -o kern/i386/kernel_exec-tsc_pmtimer.o `test -f 'kern/i386/tsc_pmtimer.c' || echo '$(srcdir)/'`kern/i386/tsc_pmtimer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-tsc_pmtimer.Tpo kern/i386/$(DEPDIR)/kernel_exec-tsc_pmtimer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc_pmtimer.c' object='kern/i386/kernel_exec-tsc_pmtimer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-tsc_pmtimer.o `test -f 'kern/i386/tsc_pmtimer.c' || echo '$(srcdir)/'`kern/i386/tsc_pmtimer.c + +kern/i386/kernel_exec-tsc_pmtimer.obj: kern/i386/tsc_pmtimer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-tsc_pmtimer.obj -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-tsc_pmtimer.Tpo -c -o kern/i386/kernel_exec-tsc_pmtimer.obj `if test -f 'kern/i386/tsc_pmtimer.c'; then $(CYGPATH_W) 'kern/i386/tsc_pmtimer.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc_pmtimer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-tsc_pmtimer.Tpo kern/i386/$(DEPDIR)/kernel_exec-tsc_pmtimer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc_pmtimer.c' object='kern/i386/kernel_exec-tsc_pmtimer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-tsc_pmtimer.obj `if test -f 'kern/i386/tsc_pmtimer.c'; then $(CYGPATH_W) 'kern/i386/tsc_pmtimer.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc_pmtimer.c'; fi` + +kern/i386/coreboot/kernel_exec-mmap.o: kern/i386/coreboot/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/kernel_exec-mmap.o -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/i386/coreboot/kernel_exec-mmap.o `test -f 'kern/i386/coreboot/mmap.c' || echo '$(srcdir)/'`kern/i386/coreboot/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-mmap.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/mmap.c' object='kern/i386/coreboot/kernel_exec-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/kernel_exec-mmap.o `test -f 'kern/i386/coreboot/mmap.c' || echo '$(srcdir)/'`kern/i386/coreboot/mmap.c + +kern/i386/coreboot/kernel_exec-mmap.obj: kern/i386/coreboot/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/kernel_exec-mmap.obj -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/i386/coreboot/kernel_exec-mmap.obj `if test -f 'kern/i386/coreboot/mmap.c'; then $(CYGPATH_W) 'kern/i386/coreboot/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-mmap.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/mmap.c' object='kern/i386/coreboot/kernel_exec-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/kernel_exec-mmap.obj `if test -f 'kern/i386/coreboot/mmap.c'; then $(CYGPATH_W) 'kern/i386/coreboot/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/mmap.c'; fi` + +kern/i386/coreboot/kernel_exec-cbtable.o: kern/i386/coreboot/cbtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/kernel_exec-cbtable.o -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-cbtable.Tpo -c -o kern/i386/coreboot/kernel_exec-cbtable.o `test -f 'kern/i386/coreboot/cbtable.c' || echo '$(srcdir)/'`kern/i386/coreboot/cbtable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-cbtable.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-cbtable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/cbtable.c' object='kern/i386/coreboot/kernel_exec-cbtable.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/kernel_exec-cbtable.o `test -f 'kern/i386/coreboot/cbtable.c' || echo '$(srcdir)/'`kern/i386/coreboot/cbtable.c + +kern/i386/coreboot/kernel_exec-cbtable.obj: kern/i386/coreboot/cbtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/coreboot/kernel_exec-cbtable.obj -MD -MP -MF kern/i386/coreboot/$(DEPDIR)/kernel_exec-cbtable.Tpo -c -o kern/i386/coreboot/kernel_exec-cbtable.obj `if test -f 'kern/i386/coreboot/cbtable.c'; then $(CYGPATH_W) 'kern/i386/coreboot/cbtable.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/cbtable.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/coreboot/$(DEPDIR)/kernel_exec-cbtable.Tpo kern/i386/coreboot/$(DEPDIR)/kernel_exec-cbtable.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/coreboot/cbtable.c' object='kern/i386/coreboot/kernel_exec-cbtable.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/coreboot/kernel_exec-cbtable.obj `if test -f 'kern/i386/coreboot/cbtable.c'; then $(CYGPATH_W) 'kern/i386/coreboot/cbtable.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/coreboot/cbtable.c'; fi` + +term/kernel_exec-gfxterm.o: term/gfxterm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-gfxterm.o -MD -MP -MF term/$(DEPDIR)/kernel_exec-gfxterm.Tpo -c -o term/kernel_exec-gfxterm.o `test -f 'term/gfxterm.c' || echo '$(srcdir)/'`term/gfxterm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-gfxterm.Tpo term/$(DEPDIR)/kernel_exec-gfxterm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/gfxterm.c' object='term/kernel_exec-gfxterm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-gfxterm.o `test -f 'term/gfxterm.c' || echo '$(srcdir)/'`term/gfxterm.c + +term/kernel_exec-gfxterm.obj: term/gfxterm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-gfxterm.obj -MD -MP -MF term/$(DEPDIR)/kernel_exec-gfxterm.Tpo -c -o term/kernel_exec-gfxterm.obj `if test -f 'term/gfxterm.c'; then $(CYGPATH_W) 'term/gfxterm.c'; else $(CYGPATH_W) '$(srcdir)/term/gfxterm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-gfxterm.Tpo term/$(DEPDIR)/kernel_exec-gfxterm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/gfxterm.c' object='term/kernel_exec-gfxterm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-gfxterm.obj `if test -f 'term/gfxterm.c'; then $(CYGPATH_W) 'term/gfxterm.c'; else $(CYGPATH_W) '$(srcdir)/term/gfxterm.c'; fi` + +font/kernel_exec-font.o: font/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT font/kernel_exec-font.o -MD -MP -MF font/$(DEPDIR)/kernel_exec-font.Tpo -c -o font/kernel_exec-font.o `test -f 'font/font.c' || echo '$(srcdir)/'`font/font.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/kernel_exec-font.Tpo font/$(DEPDIR)/kernel_exec-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font.c' object='font/kernel_exec-font.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o font/kernel_exec-font.o `test -f 'font/font.c' || echo '$(srcdir)/'`font/font.c + +font/kernel_exec-font.obj: font/font.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT font/kernel_exec-font.obj -MD -MP -MF font/$(DEPDIR)/kernel_exec-font.Tpo -c -o font/kernel_exec-font.obj `if test -f 'font/font.c'; then $(CYGPATH_W) 'font/font.c'; else $(CYGPATH_W) '$(srcdir)/font/font.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/kernel_exec-font.Tpo font/$(DEPDIR)/kernel_exec-font.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font.c' object='font/kernel_exec-font.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o font/kernel_exec-font.obj `if test -f 'font/font.c'; then $(CYGPATH_W) 'font/font.c'; else $(CYGPATH_W) '$(srcdir)/font/font.c'; fi` + +font/kernel_exec-font_cmd.o: font/font_cmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT font/kernel_exec-font_cmd.o -MD -MP -MF font/$(DEPDIR)/kernel_exec-font_cmd.Tpo -c -o font/kernel_exec-font_cmd.o `test -f 'font/font_cmd.c' || echo '$(srcdir)/'`font/font_cmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/kernel_exec-font_cmd.Tpo font/$(DEPDIR)/kernel_exec-font_cmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font_cmd.c' object='font/kernel_exec-font_cmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o font/kernel_exec-font_cmd.o `test -f 'font/font_cmd.c' || echo '$(srcdir)/'`font/font_cmd.c + +font/kernel_exec-font_cmd.obj: font/font_cmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT font/kernel_exec-font_cmd.obj -MD -MP -MF font/$(DEPDIR)/kernel_exec-font_cmd.Tpo -c -o font/kernel_exec-font_cmd.obj `if test -f 'font/font_cmd.c'; then $(CYGPATH_W) 'font/font_cmd.c'; else $(CYGPATH_W) '$(srcdir)/font/font_cmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) font/$(DEPDIR)/kernel_exec-font_cmd.Tpo font/$(DEPDIR)/kernel_exec-font_cmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='font/font_cmd.c' object='font/kernel_exec-font_cmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o font/kernel_exec-font_cmd.obj `if test -f 'font/font_cmd.c'; then $(CYGPATH_W) 'font/font_cmd.c'; else $(CYGPATH_W) '$(srcdir)/font/font_cmd.c'; fi` + +io/kernel_exec-bufio.o: io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT io/kernel_exec-bufio.o -MD -MP -MF io/$(DEPDIR)/kernel_exec-bufio.Tpo -c -o io/kernel_exec-bufio.o `test -f 'io/bufio.c' || echo '$(srcdir)/'`io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/kernel_exec-bufio.Tpo io/$(DEPDIR)/kernel_exec-bufio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/bufio.c' object='io/kernel_exec-bufio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o io/kernel_exec-bufio.o `test -f 'io/bufio.c' || echo '$(srcdir)/'`io/bufio.c + +io/kernel_exec-bufio.obj: io/bufio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT io/kernel_exec-bufio.obj -MD -MP -MF io/$(DEPDIR)/kernel_exec-bufio.Tpo -c -o io/kernel_exec-bufio.obj `if test -f 'io/bufio.c'; then $(CYGPATH_W) 'io/bufio.c'; else $(CYGPATH_W) '$(srcdir)/io/bufio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/kernel_exec-bufio.Tpo io/$(DEPDIR)/kernel_exec-bufio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/bufio.c' object='io/kernel_exec-bufio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o io/kernel_exec-bufio.obj `if test -f 'io/bufio.c'; then $(CYGPATH_W) 'io/bufio.c'; else $(CYGPATH_W) '$(srcdir)/io/bufio.c'; fi` + +video/fb/kernel_exec-fbblit.o: video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-fbblit.o -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-fbblit.Tpo -c -o video/fb/kernel_exec-fbblit.o `test -f 'video/fb/fbblit.c' || echo '$(srcdir)/'`video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-fbblit.Tpo video/fb/$(DEPDIR)/kernel_exec-fbblit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbblit.c' object='video/fb/kernel_exec-fbblit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-fbblit.o `test -f 'video/fb/fbblit.c' || echo '$(srcdir)/'`video/fb/fbblit.c + +video/fb/kernel_exec-fbblit.obj: video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-fbblit.obj -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-fbblit.Tpo -c -o video/fb/kernel_exec-fbblit.obj `if test -f 'video/fb/fbblit.c'; then $(CYGPATH_W) 'video/fb/fbblit.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbblit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-fbblit.Tpo video/fb/$(DEPDIR)/kernel_exec-fbblit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbblit.c' object='video/fb/kernel_exec-fbblit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-fbblit.obj `if test -f 'video/fb/fbblit.c'; then $(CYGPATH_W) 'video/fb/fbblit.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbblit.c'; fi` + +video/fb/kernel_exec-fbfill.o: video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-fbfill.o -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-fbfill.Tpo -c -o video/fb/kernel_exec-fbfill.o `test -f 'video/fb/fbfill.c' || echo '$(srcdir)/'`video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-fbfill.Tpo video/fb/$(DEPDIR)/kernel_exec-fbfill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbfill.c' object='video/fb/kernel_exec-fbfill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-fbfill.o `test -f 'video/fb/fbfill.c' || echo '$(srcdir)/'`video/fb/fbfill.c + +video/fb/kernel_exec-fbfill.obj: video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-fbfill.obj -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-fbfill.Tpo -c -o video/fb/kernel_exec-fbfill.obj `if test -f 'video/fb/fbfill.c'; then $(CYGPATH_W) 'video/fb/fbfill.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbfill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-fbfill.Tpo video/fb/$(DEPDIR)/kernel_exec-fbfill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbfill.c' object='video/fb/kernel_exec-fbfill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-fbfill.obj `if test -f 'video/fb/fbfill.c'; then $(CYGPATH_W) 'video/fb/fbfill.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbfill.c'; fi` + +video/fb/kernel_exec-fbutil.o: video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-fbutil.o -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-fbutil.Tpo -c -o video/fb/kernel_exec-fbutil.o `test -f 'video/fb/fbutil.c' || echo '$(srcdir)/'`video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-fbutil.Tpo video/fb/$(DEPDIR)/kernel_exec-fbutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbutil.c' object='video/fb/kernel_exec-fbutil.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-fbutil.o `test -f 'video/fb/fbutil.c' || echo '$(srcdir)/'`video/fb/fbutil.c + +video/fb/kernel_exec-fbutil.obj: video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-fbutil.obj -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-fbutil.Tpo -c -o video/fb/kernel_exec-fbutil.obj `if test -f 'video/fb/fbutil.c'; then $(CYGPATH_W) 'video/fb/fbutil.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbutil.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-fbutil.Tpo video/fb/$(DEPDIR)/kernel_exec-fbutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbutil.c' object='video/fb/kernel_exec-fbutil.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-fbutil.obj `if test -f 'video/fb/fbutil.c'; then $(CYGPATH_W) 'video/fb/fbutil.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbutil.c'; fi` + +video/fb/kernel_exec-video_fb.o: video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-video_fb.o -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-video_fb.Tpo -c -o video/fb/kernel_exec-video_fb.o `test -f 'video/fb/video_fb.c' || echo '$(srcdir)/'`video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-video_fb.Tpo video/fb/$(DEPDIR)/kernel_exec-video_fb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/video_fb.c' object='video/fb/kernel_exec-video_fb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-video_fb.o `test -f 'video/fb/video_fb.c' || echo '$(srcdir)/'`video/fb/video_fb.c + +video/fb/kernel_exec-video_fb.obj: video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/fb/kernel_exec-video_fb.obj -MD -MP -MF video/fb/$(DEPDIR)/kernel_exec-video_fb.Tpo -c -o video/fb/kernel_exec-video_fb.obj `if test -f 'video/fb/video_fb.c'; then $(CYGPATH_W) 'video/fb/video_fb.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/video_fb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/kernel_exec-video_fb.Tpo video/fb/$(DEPDIR)/kernel_exec-video_fb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/video_fb.c' object='video/fb/kernel_exec-video_fb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/fb/kernel_exec-video_fb.obj `if test -f 'video/fb/video_fb.c'; then $(CYGPATH_W) 'video/fb/video_fb.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/video_fb.c'; fi` + +video/kernel_exec-video.o: video/video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-video.o -MD -MP -MF video/$(DEPDIR)/kernel_exec-video.Tpo -c -o video/kernel_exec-video.o `test -f 'video/video.c' || echo '$(srcdir)/'`video/video.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-video.Tpo video/$(DEPDIR)/kernel_exec-video.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/video.c' object='video/kernel_exec-video.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-video.o `test -f 'video/video.c' || echo '$(srcdir)/'`video/video.c + +video/kernel_exec-video.obj: video/video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-video.obj -MD -MP -MF video/$(DEPDIR)/kernel_exec-video.Tpo -c -o video/kernel_exec-video.obj `if test -f 'video/video.c'; then $(CYGPATH_W) 'video/video.c'; else $(CYGPATH_W) '$(srcdir)/video/video.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-video.Tpo video/$(DEPDIR)/kernel_exec-video.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/video.c' object='video/kernel_exec-video.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-video.obj `if test -f 'video/video.c'; then $(CYGPATH_W) 'video/video.c'; else $(CYGPATH_W) '$(srcdir)/video/video.c'; fi` + +term/i386/pc/kernel_exec-vga_text.o: term/i386/pc/vga_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/i386/pc/kernel_exec-vga_text.o -MD -MP -MF term/i386/pc/$(DEPDIR)/kernel_exec-vga_text.Tpo -c -o term/i386/pc/kernel_exec-vga_text.o `test -f 'term/i386/pc/vga_text.c' || echo '$(srcdir)/'`term/i386/pc/vga_text.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/kernel_exec-vga_text.Tpo term/i386/pc/$(DEPDIR)/kernel_exec-vga_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/vga_text.c' object='term/i386/pc/kernel_exec-vga_text.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/i386/pc/kernel_exec-vga_text.o `test -f 'term/i386/pc/vga_text.c' || echo '$(srcdir)/'`term/i386/pc/vga_text.c + +term/i386/pc/kernel_exec-vga_text.obj: term/i386/pc/vga_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/i386/pc/kernel_exec-vga_text.obj -MD -MP -MF term/i386/pc/$(DEPDIR)/kernel_exec-vga_text.Tpo -c -o term/i386/pc/kernel_exec-vga_text.obj `if test -f 'term/i386/pc/vga_text.c'; then $(CYGPATH_W) 'term/i386/pc/vga_text.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/vga_text.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/kernel_exec-vga_text.Tpo term/i386/pc/$(DEPDIR)/kernel_exec-vga_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/vga_text.c' object='term/i386/pc/kernel_exec-vga_text.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/i386/pc/kernel_exec-vga_text.obj `if test -f 'term/i386/pc/vga_text.c'; then $(CYGPATH_W) 'term/i386/pc/vga_text.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/vga_text.c'; fi` + +kern/i386/kernel_exec-dl.o: kern/i386/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-dl.o -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/i386/kernel_exec-dl.o `test -f 'kern/i386/dl.c' || echo '$(srcdir)/'`kern/i386/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-dl.Tpo kern/i386/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/dl.c' object='kern/i386/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-dl.o `test -f 'kern/i386/dl.c' || echo '$(srcdir)/'`kern/i386/dl.c + +kern/i386/kernel_exec-dl.obj: kern/i386/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-dl.obj -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/i386/kernel_exec-dl.obj `if test -f 'kern/i386/dl.c'; then $(CYGPATH_W) 'kern/i386/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-dl.Tpo kern/i386/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/dl.c' object='kern/i386/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-dl.obj `if test -f 'kern/i386/dl.c'; then $(CYGPATH_W) 'kern/i386/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/dl.c'; fi` + +kern/i386/kernel_exec-tsc.o: kern/i386/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-tsc.o -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-tsc.Tpo -c -o kern/i386/kernel_exec-tsc.o `test -f 'kern/i386/tsc.c' || echo '$(srcdir)/'`kern/i386/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-tsc.Tpo kern/i386/$(DEPDIR)/kernel_exec-tsc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc.c' object='kern/i386/kernel_exec-tsc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-tsc.o `test -f 'kern/i386/tsc.c' || echo '$(srcdir)/'`kern/i386/tsc.c + +kern/i386/kernel_exec-tsc.obj: kern/i386/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-tsc.obj -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-tsc.Tpo -c -o kern/i386/kernel_exec-tsc.obj `if test -f 'kern/i386/tsc.c'; then $(CYGPATH_W) 'kern/i386/tsc.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-tsc.Tpo kern/i386/$(DEPDIR)/kernel_exec-tsc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc.c' object='kern/i386/kernel_exec-tsc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-tsc.obj `if test -f 'kern/i386/tsc.c'; then $(CYGPATH_W) 'kern/i386/tsc.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc.c'; fi` + +kern/i386/kernel_exec-tsc_pit.o: kern/i386/tsc_pit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-tsc_pit.o -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-tsc_pit.Tpo -c -o kern/i386/kernel_exec-tsc_pit.o `test -f 'kern/i386/tsc_pit.c' || echo '$(srcdir)/'`kern/i386/tsc_pit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-tsc_pit.Tpo kern/i386/$(DEPDIR)/kernel_exec-tsc_pit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc_pit.c' object='kern/i386/kernel_exec-tsc_pit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-tsc_pit.o `test -f 'kern/i386/tsc_pit.c' || echo '$(srcdir)/'`kern/i386/tsc_pit.c + +kern/i386/kernel_exec-tsc_pit.obj: kern/i386/tsc_pit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-tsc_pit.obj -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-tsc_pit.Tpo -c -o kern/i386/kernel_exec-tsc_pit.obj `if test -f 'kern/i386/tsc_pit.c'; then $(CYGPATH_W) 'kern/i386/tsc_pit.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc_pit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-tsc_pit.Tpo kern/i386/$(DEPDIR)/kernel_exec-tsc_pit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc_pit.c' object='kern/i386/kernel_exec-tsc_pit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-tsc_pit.obj `if test -f 'kern/i386/tsc_pit.c'; then $(CYGPATH_W) 'kern/i386/tsc_pit.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc_pit.c'; fi` + +kern/i386/efi/kernel_exec-tsc.o: kern/i386/efi/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/efi/kernel_exec-tsc.o -MD -MP -MF kern/i386/efi/$(DEPDIR)/kernel_exec-tsc.Tpo -c -o kern/i386/efi/kernel_exec-tsc.o `test -f 'kern/i386/efi/tsc.c' || echo '$(srcdir)/'`kern/i386/efi/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/efi/$(DEPDIR)/kernel_exec-tsc.Tpo kern/i386/efi/$(DEPDIR)/kernel_exec-tsc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/efi/tsc.c' object='kern/i386/efi/kernel_exec-tsc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/efi/kernel_exec-tsc.o `test -f 'kern/i386/efi/tsc.c' || echo '$(srcdir)/'`kern/i386/efi/tsc.c + +kern/i386/efi/kernel_exec-tsc.obj: kern/i386/efi/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/efi/kernel_exec-tsc.obj -MD -MP -MF kern/i386/efi/$(DEPDIR)/kernel_exec-tsc.Tpo -c -o kern/i386/efi/kernel_exec-tsc.obj `if test -f 'kern/i386/efi/tsc.c'; then $(CYGPATH_W) 'kern/i386/efi/tsc.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/efi/tsc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/efi/$(DEPDIR)/kernel_exec-tsc.Tpo kern/i386/efi/$(DEPDIR)/kernel_exec-tsc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/efi/tsc.c' object='kern/i386/efi/kernel_exec-tsc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/efi/kernel_exec-tsc.obj `if test -f 'kern/i386/efi/tsc.c'; then $(CYGPATH_W) 'kern/i386/efi/tsc.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/efi/tsc.c'; fi` + +kern/i386/efi/kernel_exec-init.o: kern/i386/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/efi/kernel_exec-init.o -MD -MP -MF kern/i386/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/efi/kernel_exec-init.o `test -f 'kern/i386/efi/init.c' || echo '$(srcdir)/'`kern/i386/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/efi/init.c' object='kern/i386/efi/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/efi/kernel_exec-init.o `test -f 'kern/i386/efi/init.c' || echo '$(srcdir)/'`kern/i386/efi/init.c + +kern/i386/efi/kernel_exec-init.obj: kern/i386/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/efi/kernel_exec-init.obj -MD -MP -MF kern/i386/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/efi/kernel_exec-init.obj `if test -f 'kern/i386/efi/init.c'; then $(CYGPATH_W) 'kern/i386/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/efi/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/efi/init.c' object='kern/i386/efi/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/efi/kernel_exec-init.obj `if test -f 'kern/i386/efi/init.c'; then $(CYGPATH_W) 'kern/i386/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/efi/init.c'; fi` + +bus/kernel_exec-pci.o: bus/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT bus/kernel_exec-pci.o -MD -MP -MF bus/$(DEPDIR)/kernel_exec-pci.Tpo -c -o bus/kernel_exec-pci.o `test -f 'bus/pci.c' || echo '$(srcdir)/'`bus/pci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/kernel_exec-pci.Tpo bus/$(DEPDIR)/kernel_exec-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/pci.c' object='bus/kernel_exec-pci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o bus/kernel_exec-pci.o `test -f 'bus/pci.c' || echo '$(srcdir)/'`bus/pci.c + +bus/kernel_exec-pci.obj: bus/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT bus/kernel_exec-pci.obj -MD -MP -MF bus/$(DEPDIR)/kernel_exec-pci.Tpo -c -o bus/kernel_exec-pci.obj `if test -f 'bus/pci.c'; then $(CYGPATH_W) 'bus/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/pci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/kernel_exec-pci.Tpo bus/$(DEPDIR)/kernel_exec-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/pci.c' object='bus/kernel_exec-pci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o bus/kernel_exec-pci.obj `if test -f 'bus/pci.c'; then $(CYGPATH_W) 'bus/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/pci.c'; fi` + +disk/ieee1275/kernel_exec-ofdisk.o: disk/ieee1275/ofdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/ieee1275/kernel_exec-ofdisk.o -MD -MP -MF disk/ieee1275/$(DEPDIR)/kernel_exec-ofdisk.Tpo -c -o disk/ieee1275/kernel_exec-ofdisk.o `test -f 'disk/ieee1275/ofdisk.c' || echo '$(srcdir)/'`disk/ieee1275/ofdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/ieee1275/$(DEPDIR)/kernel_exec-ofdisk.Tpo disk/ieee1275/$(DEPDIR)/kernel_exec-ofdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ieee1275/ofdisk.c' object='disk/ieee1275/kernel_exec-ofdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/ieee1275/kernel_exec-ofdisk.o `test -f 'disk/ieee1275/ofdisk.c' || echo '$(srcdir)/'`disk/ieee1275/ofdisk.c + +disk/ieee1275/kernel_exec-ofdisk.obj: disk/ieee1275/ofdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/ieee1275/kernel_exec-ofdisk.obj -MD -MP -MF disk/ieee1275/$(DEPDIR)/kernel_exec-ofdisk.Tpo -c -o disk/ieee1275/kernel_exec-ofdisk.obj `if test -f 'disk/ieee1275/ofdisk.c'; then $(CYGPATH_W) 'disk/ieee1275/ofdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/ieee1275/ofdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/ieee1275/$(DEPDIR)/kernel_exec-ofdisk.Tpo disk/ieee1275/$(DEPDIR)/kernel_exec-ofdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ieee1275/ofdisk.c' object='disk/ieee1275/kernel_exec-ofdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/ieee1275/kernel_exec-ofdisk.obj `if test -f 'disk/ieee1275/ofdisk.c'; then $(CYGPATH_W) 'disk/ieee1275/ofdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/ieee1275/ofdisk.c'; fi` + +kern/ieee1275/kernel_exec-cmain.o: kern/ieee1275/cmain.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-cmain.o -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-cmain.Tpo -c -o kern/ieee1275/kernel_exec-cmain.o `test -f 'kern/ieee1275/cmain.c' || echo '$(srcdir)/'`kern/ieee1275/cmain.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-cmain.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-cmain.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/cmain.c' object='kern/ieee1275/kernel_exec-cmain.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-cmain.o `test -f 'kern/ieee1275/cmain.c' || echo '$(srcdir)/'`kern/ieee1275/cmain.c + +kern/ieee1275/kernel_exec-cmain.obj: kern/ieee1275/cmain.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-cmain.obj -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-cmain.Tpo -c -o kern/ieee1275/kernel_exec-cmain.obj `if test -f 'kern/ieee1275/cmain.c'; then $(CYGPATH_W) 'kern/ieee1275/cmain.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/cmain.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-cmain.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-cmain.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/cmain.c' object='kern/ieee1275/kernel_exec-cmain.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-cmain.obj `if test -f 'kern/ieee1275/cmain.c'; then $(CYGPATH_W) 'kern/ieee1275/cmain.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/cmain.c'; fi` + +kern/ieee1275/kernel_exec-ieee1275.o: kern/ieee1275/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-ieee1275.o -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo -c -o kern/ieee1275/kernel_exec-ieee1275.o `test -f 'kern/ieee1275/ieee1275.c' || echo '$(srcdir)/'`kern/ieee1275/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/ieee1275.c' object='kern/ieee1275/kernel_exec-ieee1275.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-ieee1275.o `test -f 'kern/ieee1275/ieee1275.c' || echo '$(srcdir)/'`kern/ieee1275/ieee1275.c + +kern/ieee1275/kernel_exec-ieee1275.obj: kern/ieee1275/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-ieee1275.obj -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo -c -o kern/ieee1275/kernel_exec-ieee1275.obj `if test -f 'kern/ieee1275/ieee1275.c'; then $(CYGPATH_W) 'kern/ieee1275/ieee1275.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/ieee1275.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/ieee1275.c' object='kern/ieee1275/kernel_exec-ieee1275.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-ieee1275.obj `if test -f 'kern/ieee1275/ieee1275.c'; then $(CYGPATH_W) 'kern/ieee1275/ieee1275.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/ieee1275.c'; fi` + +kern/ieee1275/kernel_exec-mmap.o: kern/ieee1275/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-mmap.o -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/ieee1275/kernel_exec-mmap.o `test -f 'kern/ieee1275/mmap.c' || echo '$(srcdir)/'`kern/ieee1275/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-mmap.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/mmap.c' object='kern/ieee1275/kernel_exec-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-mmap.o `test -f 'kern/ieee1275/mmap.c' || echo '$(srcdir)/'`kern/ieee1275/mmap.c + +kern/ieee1275/kernel_exec-mmap.obj: kern/ieee1275/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-mmap.obj -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/ieee1275/kernel_exec-mmap.obj `if test -f 'kern/ieee1275/mmap.c'; then $(CYGPATH_W) 'kern/ieee1275/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-mmap.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/mmap.c' object='kern/ieee1275/kernel_exec-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-mmap.obj `if test -f 'kern/ieee1275/mmap.c'; then $(CYGPATH_W) 'kern/ieee1275/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/mmap.c'; fi` + +kern/ieee1275/kernel_exec-openfw.o: kern/ieee1275/openfw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-openfw.o -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-openfw.Tpo -c -o kern/ieee1275/kernel_exec-openfw.o `test -f 'kern/ieee1275/openfw.c' || echo '$(srcdir)/'`kern/ieee1275/openfw.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-openfw.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-openfw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/openfw.c' object='kern/ieee1275/kernel_exec-openfw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-openfw.o `test -f 'kern/ieee1275/openfw.c' || echo '$(srcdir)/'`kern/ieee1275/openfw.c + +kern/ieee1275/kernel_exec-openfw.obj: kern/ieee1275/openfw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-openfw.obj -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-openfw.Tpo -c -o kern/ieee1275/kernel_exec-openfw.obj `if test -f 'kern/ieee1275/openfw.c'; then $(CYGPATH_W) 'kern/ieee1275/openfw.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/openfw.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-openfw.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-openfw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/openfw.c' object='kern/ieee1275/kernel_exec-openfw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-openfw.obj `if test -f 'kern/ieee1275/openfw.c'; then $(CYGPATH_W) 'kern/ieee1275/openfw.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/openfw.c'; fi` + +term/ieee1275/kernel_exec-console.o: term/ieee1275/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/ieee1275/kernel_exec-console.o -MD -MP -MF term/ieee1275/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/ieee1275/kernel_exec-console.o `test -f 'term/ieee1275/console.c' || echo '$(srcdir)/'`term/ieee1275/console.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/ieee1275/$(DEPDIR)/kernel_exec-console.Tpo term/ieee1275/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ieee1275/console.c' object='term/ieee1275/kernel_exec-console.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/ieee1275/kernel_exec-console.o `test -f 'term/ieee1275/console.c' || echo '$(srcdir)/'`term/ieee1275/console.c + +term/ieee1275/kernel_exec-console.obj: term/ieee1275/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/ieee1275/kernel_exec-console.obj -MD -MP -MF term/ieee1275/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/ieee1275/kernel_exec-console.obj `if test -f 'term/ieee1275/console.c'; then $(CYGPATH_W) 'term/ieee1275/console.c'; else $(CYGPATH_W) '$(srcdir)/term/ieee1275/console.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/ieee1275/$(DEPDIR)/kernel_exec-console.Tpo term/ieee1275/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ieee1275/console.c' object='term/ieee1275/kernel_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/ieee1275/kernel_exec-console.obj `if test -f 'term/ieee1275/console.c'; then $(CYGPATH_W) 'term/ieee1275/console.c'; else $(CYGPATH_W) '$(srcdir)/term/ieee1275/console.c'; fi` + +kern/ieee1275/kernel_exec-init.o: kern/ieee1275/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-init.o -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/ieee1275/kernel_exec-init.o `test -f 'kern/ieee1275/init.c' || echo '$(srcdir)/'`kern/ieee1275/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-init.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/init.c' object='kern/ieee1275/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-init.o `test -f 'kern/ieee1275/init.c' || echo '$(srcdir)/'`kern/ieee1275/init.c + +kern/ieee1275/kernel_exec-init.obj: kern/ieee1275/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ieee1275/kernel_exec-init.obj -MD -MP -MF kern/ieee1275/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/ieee1275/kernel_exec-init.obj `if test -f 'kern/ieee1275/init.c'; then $(CYGPATH_W) 'kern/ieee1275/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ieee1275/$(DEPDIR)/kernel_exec-init.Tpo kern/ieee1275/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ieee1275/init.c' object='kern/ieee1275/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ieee1275/kernel_exec-init.obj `if test -f 'kern/ieee1275/init.c'; then $(CYGPATH_W) 'kern/ieee1275/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/ieee1275/init.c'; fi` + +kern/i386/kernel_exec-multiboot_mmap.o: kern/i386/multiboot_mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-multiboot_mmap.o -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-multiboot_mmap.Tpo -c -o kern/i386/kernel_exec-multiboot_mmap.o `test -f 'kern/i386/multiboot_mmap.c' || echo '$(srcdir)/'`kern/i386/multiboot_mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-multiboot_mmap.Tpo kern/i386/$(DEPDIR)/kernel_exec-multiboot_mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/multiboot_mmap.c' object='kern/i386/kernel_exec-multiboot_mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-multiboot_mmap.o `test -f 'kern/i386/multiboot_mmap.c' || echo '$(srcdir)/'`kern/i386/multiboot_mmap.c + +kern/i386/kernel_exec-multiboot_mmap.obj: kern/i386/multiboot_mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/kernel_exec-multiboot_mmap.obj -MD -MP -MF kern/i386/$(DEPDIR)/kernel_exec-multiboot_mmap.Tpo -c -o kern/i386/kernel_exec-multiboot_mmap.obj `if test -f 'kern/i386/multiboot_mmap.c'; then $(CYGPATH_W) 'kern/i386/multiboot_mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/multiboot_mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/kernel_exec-multiboot_mmap.Tpo kern/i386/$(DEPDIR)/kernel_exec-multiboot_mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/multiboot_mmap.c' object='kern/i386/kernel_exec-multiboot_mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/kernel_exec-multiboot_mmap.obj `if test -f 'kern/i386/multiboot_mmap.c'; then $(CYGPATH_W) 'kern/i386/multiboot_mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/multiboot_mmap.c'; fi` + +kern/i386/pc/kernel_exec-init.o: kern/i386/pc/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/pc/kernel_exec-init.o -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/pc/kernel_exec-init.o `test -f 'kern/i386/pc/init.c' || echo '$(srcdir)/'`kern/i386/pc/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/init.c' object='kern/i386/pc/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/kernel_exec-init.o `test -f 'kern/i386/pc/init.c' || echo '$(srcdir)/'`kern/i386/pc/init.c + +kern/i386/pc/kernel_exec-init.obj: kern/i386/pc/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/pc/kernel_exec-init.obj -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/pc/kernel_exec-init.obj `if test -f 'kern/i386/pc/init.c'; then $(CYGPATH_W) 'kern/i386/pc/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/init.c' object='kern/i386/pc/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/kernel_exec-init.obj `if test -f 'kern/i386/pc/init.c'; then $(CYGPATH_W) 'kern/i386/pc/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/init.c'; fi` + +kern/i386/pc/kernel_exec-mmap.o: kern/i386/pc/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/pc/kernel_exec-mmap.o -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/i386/pc/kernel_exec-mmap.o `test -f 'kern/i386/pc/mmap.c' || echo '$(srcdir)/'`kern/i386/pc/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-mmap.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/mmap.c' object='kern/i386/pc/kernel_exec-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/kernel_exec-mmap.o `test -f 'kern/i386/pc/mmap.c' || echo '$(srcdir)/'`kern/i386/pc/mmap.c + +kern/i386/pc/kernel_exec-mmap.obj: kern/i386/pc/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/pc/kernel_exec-mmap.obj -MD -MP -MF kern/i386/pc/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/i386/pc/kernel_exec-mmap.obj `if test -f 'kern/i386/pc/mmap.c'; then $(CYGPATH_W) 'kern/i386/pc/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/pc/$(DEPDIR)/kernel_exec-mmap.Tpo kern/i386/pc/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/pc/mmap.c' object='kern/i386/pc/kernel_exec-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/pc/kernel_exec-mmap.obj `if test -f 'kern/i386/pc/mmap.c'; then $(CYGPATH_W) 'kern/i386/pc/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/pc/mmap.c'; fi` + +term/i386/pc/kernel_exec-console.o: term/i386/pc/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/i386/pc/kernel_exec-console.o -MD -MP -MF term/i386/pc/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/i386/pc/kernel_exec-console.o `test -f 'term/i386/pc/console.c' || echo '$(srcdir)/'`term/i386/pc/console.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/kernel_exec-console.Tpo term/i386/pc/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/console.c' object='term/i386/pc/kernel_exec-console.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/i386/pc/kernel_exec-console.o `test -f 'term/i386/pc/console.c' || echo '$(srcdir)/'`term/i386/pc/console.c + +term/i386/pc/kernel_exec-console.obj: term/i386/pc/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/i386/pc/kernel_exec-console.obj -MD -MP -MF term/i386/pc/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/i386/pc/kernel_exec-console.obj `if test -f 'term/i386/pc/console.c'; then $(CYGPATH_W) 'term/i386/pc/console.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/console.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/kernel_exec-console.Tpo term/i386/pc/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/console.c' object='term/i386/pc/kernel_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/i386/pc/kernel_exec-console.obj `if test -f 'term/i386/pc/console.c'; then $(CYGPATH_W) 'term/i386/pc/console.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/console.c'; fi` + +kern/i386/qemu/kernel_exec-init.o: kern/i386/qemu/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/qemu/kernel_exec-init.o -MD -MP -MF kern/i386/qemu/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/qemu/kernel_exec-init.o `test -f 'kern/i386/qemu/init.c' || echo '$(srcdir)/'`kern/i386/qemu/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/qemu/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/qemu/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/qemu/init.c' object='kern/i386/qemu/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/qemu/kernel_exec-init.o `test -f 'kern/i386/qemu/init.c' || echo '$(srcdir)/'`kern/i386/qemu/init.c + +kern/i386/qemu/kernel_exec-init.obj: kern/i386/qemu/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/qemu/kernel_exec-init.obj -MD -MP -MF kern/i386/qemu/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/i386/qemu/kernel_exec-init.obj `if test -f 'kern/i386/qemu/init.c'; then $(CYGPATH_W) 'kern/i386/qemu/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/qemu/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/qemu/$(DEPDIR)/kernel_exec-init.Tpo kern/i386/qemu/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/qemu/init.c' object='kern/i386/qemu/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/qemu/kernel_exec-init.obj `if test -f 'kern/i386/qemu/init.c'; then $(CYGPATH_W) 'kern/i386/qemu/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/qemu/init.c'; fi` + +kern/kernel_exec-vga_init.o: kern/vga_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-vga_init.o -MD -MP -MF kern/$(DEPDIR)/kernel_exec-vga_init.Tpo -c -o kern/kernel_exec-vga_init.o `test -f 'kern/vga_init.c' || echo '$(srcdir)/'`kern/vga_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-vga_init.Tpo kern/$(DEPDIR)/kernel_exec-vga_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/vga_init.c' object='kern/kernel_exec-vga_init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-vga_init.o `test -f 'kern/vga_init.c' || echo '$(srcdir)/'`kern/vga_init.c + +kern/kernel_exec-vga_init.obj: kern/vga_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/kernel_exec-vga_init.obj -MD -MP -MF kern/$(DEPDIR)/kernel_exec-vga_init.Tpo -c -o kern/kernel_exec-vga_init.obj `if test -f 'kern/vga_init.c'; then $(CYGPATH_W) 'kern/vga_init.c'; else $(CYGPATH_W) '$(srcdir)/kern/vga_init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/kernel_exec-vga_init.Tpo kern/$(DEPDIR)/kernel_exec-vga_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/vga_init.c' object='kern/kernel_exec-vga_init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/kernel_exec-vga_init.obj `if test -f 'kern/vga_init.c'; then $(CYGPATH_W) 'kern/vga_init.c'; else $(CYGPATH_W) '$(srcdir)/kern/vga_init.c'; fi` + +kern/i386/qemu/kernel_exec-mmap.o: kern/i386/qemu/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/qemu/kernel_exec-mmap.o -MD -MP -MF kern/i386/qemu/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/i386/qemu/kernel_exec-mmap.o `test -f 'kern/i386/qemu/mmap.c' || echo '$(srcdir)/'`kern/i386/qemu/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/qemu/$(DEPDIR)/kernel_exec-mmap.Tpo kern/i386/qemu/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/qemu/mmap.c' object='kern/i386/qemu/kernel_exec-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/qemu/kernel_exec-mmap.o `test -f 'kern/i386/qemu/mmap.c' || echo '$(srcdir)/'`kern/i386/qemu/mmap.c + +kern/i386/qemu/kernel_exec-mmap.obj: kern/i386/qemu/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/qemu/kernel_exec-mmap.obj -MD -MP -MF kern/i386/qemu/$(DEPDIR)/kernel_exec-mmap.Tpo -c -o kern/i386/qemu/kernel_exec-mmap.obj `if test -f 'kern/i386/qemu/mmap.c'; then $(CYGPATH_W) 'kern/i386/qemu/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/qemu/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/qemu/$(DEPDIR)/kernel_exec-mmap.Tpo kern/i386/qemu/$(DEPDIR)/kernel_exec-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/qemu/mmap.c' object='kern/i386/qemu/kernel_exec-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/qemu/kernel_exec-mmap.obj `if test -f 'kern/i386/qemu/mmap.c'; then $(CYGPATH_W) 'kern/i386/qemu/mmap.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/qemu/mmap.c'; fi` + +kern/i386/xen/kernel_exec-tsc.o: kern/i386/xen/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/xen/kernel_exec-tsc.o -MD -MP -MF kern/i386/xen/$(DEPDIR)/kernel_exec-tsc.Tpo -c -o kern/i386/xen/kernel_exec-tsc.o `test -f 'kern/i386/xen/tsc.c' || echo '$(srcdir)/'`kern/i386/xen/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/xen/$(DEPDIR)/kernel_exec-tsc.Tpo kern/i386/xen/$(DEPDIR)/kernel_exec-tsc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/xen/tsc.c' object='kern/i386/xen/kernel_exec-tsc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/xen/kernel_exec-tsc.o `test -f 'kern/i386/xen/tsc.c' || echo '$(srcdir)/'`kern/i386/xen/tsc.c + +kern/i386/xen/kernel_exec-tsc.obj: kern/i386/xen/tsc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/i386/xen/kernel_exec-tsc.obj -MD -MP -MF kern/i386/xen/$(DEPDIR)/kernel_exec-tsc.Tpo -c -o kern/i386/xen/kernel_exec-tsc.obj `if test -f 'kern/i386/xen/tsc.c'; then $(CYGPATH_W) 'kern/i386/xen/tsc.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/xen/tsc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/xen/$(DEPDIR)/kernel_exec-tsc.Tpo kern/i386/xen/$(DEPDIR)/kernel_exec-tsc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/xen/tsc.c' object='kern/i386/xen/kernel_exec-tsc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/i386/xen/kernel_exec-tsc.obj `if test -f 'kern/i386/xen/tsc.c'; then $(CYGPATH_W) 'kern/i386/xen/tsc.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/xen/tsc.c'; fi` + +kern/xen/kernel_exec-init.o: kern/xen/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/xen/kernel_exec-init.o -MD -MP -MF kern/xen/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/xen/kernel_exec-init.o `test -f 'kern/xen/init.c' || echo '$(srcdir)/'`kern/xen/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/xen/$(DEPDIR)/kernel_exec-init.Tpo kern/xen/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/xen/init.c' object='kern/xen/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/xen/kernel_exec-init.o `test -f 'kern/xen/init.c' || echo '$(srcdir)/'`kern/xen/init.c + +kern/xen/kernel_exec-init.obj: kern/xen/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/xen/kernel_exec-init.obj -MD -MP -MF kern/xen/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/xen/kernel_exec-init.obj `if test -f 'kern/xen/init.c'; then $(CYGPATH_W) 'kern/xen/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/xen/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/xen/$(DEPDIR)/kernel_exec-init.Tpo kern/xen/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/xen/init.c' object='kern/xen/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/xen/kernel_exec-init.obj `if test -f 'kern/xen/init.c'; then $(CYGPATH_W) 'kern/xen/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/xen/init.c'; fi` + +term/xen/kernel_exec-console.o: term/xen/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/xen/kernel_exec-console.o -MD -MP -MF term/xen/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/xen/kernel_exec-console.o `test -f 'term/xen/console.c' || echo '$(srcdir)/'`term/xen/console.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/xen/$(DEPDIR)/kernel_exec-console.Tpo term/xen/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/xen/console.c' object='term/xen/kernel_exec-console.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/xen/kernel_exec-console.o `test -f 'term/xen/console.c' || echo '$(srcdir)/'`term/xen/console.c + +term/xen/kernel_exec-console.obj: term/xen/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/xen/kernel_exec-console.obj -MD -MP -MF term/xen/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/xen/kernel_exec-console.obj `if test -f 'term/xen/console.c'; then $(CYGPATH_W) 'term/xen/console.c'; else $(CYGPATH_W) '$(srcdir)/term/xen/console.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/xen/$(DEPDIR)/kernel_exec-console.Tpo term/xen/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/xen/console.c' object='term/xen/kernel_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/xen/kernel_exec-console.obj `if test -f 'term/xen/console.c'; then $(CYGPATH_W) 'term/xen/console.c'; else $(CYGPATH_W) '$(srcdir)/term/xen/console.c'; fi` + +disk/xen/kernel_exec-xendisk.o: disk/xen/xendisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/xen/kernel_exec-xendisk.o -MD -MP -MF disk/xen/$(DEPDIR)/kernel_exec-xendisk.Tpo -c -o disk/xen/kernel_exec-xendisk.o `test -f 'disk/xen/xendisk.c' || echo '$(srcdir)/'`disk/xen/xendisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/xen/$(DEPDIR)/kernel_exec-xendisk.Tpo disk/xen/$(DEPDIR)/kernel_exec-xendisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/xen/xendisk.c' object='disk/xen/kernel_exec-xendisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/xen/kernel_exec-xendisk.o `test -f 'disk/xen/xendisk.c' || echo '$(srcdir)/'`disk/xen/xendisk.c + +disk/xen/kernel_exec-xendisk.obj: disk/xen/xendisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/xen/kernel_exec-xendisk.obj -MD -MP -MF disk/xen/$(DEPDIR)/kernel_exec-xendisk.Tpo -c -o disk/xen/kernel_exec-xendisk.obj `if test -f 'disk/xen/xendisk.c'; then $(CYGPATH_W) 'disk/xen/xendisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/xen/xendisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/xen/$(DEPDIR)/kernel_exec-xendisk.Tpo disk/xen/$(DEPDIR)/kernel_exec-xendisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/xen/xendisk.c' object='disk/xen/kernel_exec-xendisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/xen/kernel_exec-xendisk.obj `if test -f 'disk/xen/xendisk.c'; then $(CYGPATH_W) 'disk/xen/xendisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/xen/xendisk.c'; fi` + +commands/kernel_exec-boot.o: commands/boot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT commands/kernel_exec-boot.o -MD -MP -MF commands/$(DEPDIR)/kernel_exec-boot.Tpo -c -o commands/kernel_exec-boot.o `test -f 'commands/boot.c' || echo '$(srcdir)/'`commands/boot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/kernel_exec-boot.Tpo commands/$(DEPDIR)/kernel_exec-boot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/boot.c' object='commands/kernel_exec-boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o commands/kernel_exec-boot.o `test -f 'commands/boot.c' || echo '$(srcdir)/'`commands/boot.c + +commands/kernel_exec-boot.obj: commands/boot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT commands/kernel_exec-boot.obj -MD -MP -MF commands/$(DEPDIR)/kernel_exec-boot.Tpo -c -o commands/kernel_exec-boot.obj `if test -f 'commands/boot.c'; then $(CYGPATH_W) 'commands/boot.c'; else $(CYGPATH_W) '$(srcdir)/commands/boot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/kernel_exec-boot.Tpo commands/$(DEPDIR)/kernel_exec-boot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/boot.c' object='commands/kernel_exec-boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o commands/kernel_exec-boot.obj `if test -f 'commands/boot.c'; then $(CYGPATH_W) 'commands/boot.c'; else $(CYGPATH_W) '$(srcdir)/commands/boot.c'; fi` + +kern/ia64/efi/kernel_exec-init.o: kern/ia64/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/efi/kernel_exec-init.o -MD -MP -MF kern/ia64/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/ia64/efi/kernel_exec-init.o `test -f 'kern/ia64/efi/init.c' || echo '$(srcdir)/'`kern/ia64/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/ia64/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/efi/init.c' object='kern/ia64/efi/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/efi/kernel_exec-init.o `test -f 'kern/ia64/efi/init.c' || echo '$(srcdir)/'`kern/ia64/efi/init.c + +kern/ia64/efi/kernel_exec-init.obj: kern/ia64/efi/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/efi/kernel_exec-init.obj -MD -MP -MF kern/ia64/efi/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/ia64/efi/kernel_exec-init.obj `if test -f 'kern/ia64/efi/init.c'; then $(CYGPATH_W) 'kern/ia64/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/efi/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/efi/$(DEPDIR)/kernel_exec-init.Tpo kern/ia64/efi/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/efi/init.c' object='kern/ia64/efi/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/efi/kernel_exec-init.obj `if test -f 'kern/ia64/efi/init.c'; then $(CYGPATH_W) 'kern/ia64/efi/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/efi/init.c'; fi` + +kern/ia64/kernel_exec-dl.o: kern/ia64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/kernel_exec-dl.o -MD -MP -MF kern/ia64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/ia64/kernel_exec-dl.o `test -f 'kern/ia64/dl.c' || echo '$(srcdir)/'`kern/ia64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/$(DEPDIR)/kernel_exec-dl.Tpo kern/ia64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/dl.c' object='kern/ia64/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/kernel_exec-dl.o `test -f 'kern/ia64/dl.c' || echo '$(srcdir)/'`kern/ia64/dl.c + +kern/ia64/kernel_exec-dl.obj: kern/ia64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/kernel_exec-dl.obj -MD -MP -MF kern/ia64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/ia64/kernel_exec-dl.obj `if test -f 'kern/ia64/dl.c'; then $(CYGPATH_W) 'kern/ia64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/$(DEPDIR)/kernel_exec-dl.Tpo kern/ia64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/dl.c' object='kern/ia64/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/kernel_exec-dl.obj `if test -f 'kern/ia64/dl.c'; then $(CYGPATH_W) 'kern/ia64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/dl.c'; fi` + +kern/ia64/kernel_exec-dl_helper.o: kern/ia64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/kernel_exec-dl_helper.o -MD -MP -MF kern/ia64/$(DEPDIR)/kernel_exec-dl_helper.Tpo -c -o kern/ia64/kernel_exec-dl_helper.o `test -f 'kern/ia64/dl_helper.c' || echo '$(srcdir)/'`kern/ia64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/$(DEPDIR)/kernel_exec-dl_helper.Tpo kern/ia64/$(DEPDIR)/kernel_exec-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/dl_helper.c' object='kern/ia64/kernel_exec-dl_helper.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/kernel_exec-dl_helper.o `test -f 'kern/ia64/dl_helper.c' || echo '$(srcdir)/'`kern/ia64/dl_helper.c + +kern/ia64/kernel_exec-dl_helper.obj: kern/ia64/dl_helper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/kernel_exec-dl_helper.obj -MD -MP -MF kern/ia64/$(DEPDIR)/kernel_exec-dl_helper.Tpo -c -o kern/ia64/kernel_exec-dl_helper.obj `if test -f 'kern/ia64/dl_helper.c'; then $(CYGPATH_W) 'kern/ia64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/dl_helper.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/$(DEPDIR)/kernel_exec-dl_helper.Tpo kern/ia64/$(DEPDIR)/kernel_exec-dl_helper.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/dl_helper.c' object='kern/ia64/kernel_exec-dl_helper.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/kernel_exec-dl_helper.obj `if test -f 'kern/ia64/dl_helper.c'; then $(CYGPATH_W) 'kern/ia64/dl_helper.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/dl_helper.c'; fi` + +kern/ia64/kernel_exec-cache.o: kern/ia64/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/kernel_exec-cache.o -MD -MP -MF kern/ia64/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/ia64/kernel_exec-cache.o `test -f 'kern/ia64/cache.c' || echo '$(srcdir)/'`kern/ia64/cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/$(DEPDIR)/kernel_exec-cache.Tpo kern/ia64/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/cache.c' object='kern/ia64/kernel_exec-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/kernel_exec-cache.o `test -f 'kern/ia64/cache.c' || echo '$(srcdir)/'`kern/ia64/cache.c + +kern/ia64/kernel_exec-cache.obj: kern/ia64/cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/ia64/kernel_exec-cache.obj -MD -MP -MF kern/ia64/$(DEPDIR)/kernel_exec-cache.Tpo -c -o kern/ia64/kernel_exec-cache.obj `if test -f 'kern/ia64/cache.c'; then $(CYGPATH_W) 'kern/ia64/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/cache.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/ia64/$(DEPDIR)/kernel_exec-cache.Tpo kern/ia64/$(DEPDIR)/kernel_exec-cache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/ia64/cache.c' object='kern/ia64/kernel_exec-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/ia64/kernel_exec-cache.obj `if test -f 'kern/ia64/cache.c'; then $(CYGPATH_W) 'kern/ia64/cache.c'; else $(CYGPATH_W) '$(srcdir)/kern/ia64/cache.c'; fi` + +kern/mips/arc/kernel_exec-init.o: kern/mips/arc/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/arc/kernel_exec-init.o -MD -MP -MF kern/mips/arc/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/arc/kernel_exec-init.o `test -f 'kern/mips/arc/init.c' || echo '$(srcdir)/'`kern/mips/arc/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/arc/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/arc/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/arc/init.c' object='kern/mips/arc/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/arc/kernel_exec-init.o `test -f 'kern/mips/arc/init.c' || echo '$(srcdir)/'`kern/mips/arc/init.c + +kern/mips/arc/kernel_exec-init.obj: kern/mips/arc/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/arc/kernel_exec-init.obj -MD -MP -MF kern/mips/arc/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/arc/kernel_exec-init.obj `if test -f 'kern/mips/arc/init.c'; then $(CYGPATH_W) 'kern/mips/arc/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/arc/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/arc/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/arc/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/arc/init.c' object='kern/mips/arc/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/arc/kernel_exec-init.obj `if test -f 'kern/mips/arc/init.c'; then $(CYGPATH_W) 'kern/mips/arc/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/arc/init.c'; fi` + +term/arc/kernel_exec-console.o: term/arc/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/arc/kernel_exec-console.o -MD -MP -MF term/arc/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/arc/kernel_exec-console.o `test -f 'term/arc/console.c' || echo '$(srcdir)/'`term/arc/console.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/arc/$(DEPDIR)/kernel_exec-console.Tpo term/arc/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/arc/console.c' object='term/arc/kernel_exec-console.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/arc/kernel_exec-console.o `test -f 'term/arc/console.c' || echo '$(srcdir)/'`term/arc/console.c + +term/arc/kernel_exec-console.obj: term/arc/console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/arc/kernel_exec-console.obj -MD -MP -MF term/arc/$(DEPDIR)/kernel_exec-console.Tpo -c -o term/arc/kernel_exec-console.obj `if test -f 'term/arc/console.c'; then $(CYGPATH_W) 'term/arc/console.c'; else $(CYGPATH_W) '$(srcdir)/term/arc/console.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/arc/$(DEPDIR)/kernel_exec-console.Tpo term/arc/$(DEPDIR)/kernel_exec-console.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/arc/console.c' object='term/arc/kernel_exec-console.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/arc/kernel_exec-console.obj `if test -f 'term/arc/console.c'; then $(CYGPATH_W) 'term/arc/console.c'; else $(CYGPATH_W) '$(srcdir)/term/arc/console.c'; fi` + +disk/arc/kernel_exec-arcdisk.o: disk/arc/arcdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/arc/kernel_exec-arcdisk.o -MD -MP -MF disk/arc/$(DEPDIR)/kernel_exec-arcdisk.Tpo -c -o disk/arc/kernel_exec-arcdisk.o `test -f 'disk/arc/arcdisk.c' || echo '$(srcdir)/'`disk/arc/arcdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/arc/$(DEPDIR)/kernel_exec-arcdisk.Tpo disk/arc/$(DEPDIR)/kernel_exec-arcdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/arc/arcdisk.c' object='disk/arc/kernel_exec-arcdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/arc/kernel_exec-arcdisk.o `test -f 'disk/arc/arcdisk.c' || echo '$(srcdir)/'`disk/arc/arcdisk.c + +disk/arc/kernel_exec-arcdisk.obj: disk/arc/arcdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT disk/arc/kernel_exec-arcdisk.obj -MD -MP -MF disk/arc/$(DEPDIR)/kernel_exec-arcdisk.Tpo -c -o disk/arc/kernel_exec-arcdisk.obj `if test -f 'disk/arc/arcdisk.c'; then $(CYGPATH_W) 'disk/arc/arcdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/arc/arcdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/arc/$(DEPDIR)/kernel_exec-arcdisk.Tpo disk/arc/$(DEPDIR)/kernel_exec-arcdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/arc/arcdisk.c' object='disk/arc/kernel_exec-arcdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o disk/arc/kernel_exec-arcdisk.obj `if test -f 'disk/arc/arcdisk.c'; then $(CYGPATH_W) 'disk/arc/arcdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/arc/arcdisk.c'; fi` + +kern/generic/kernel_exec-rtc_get_time_ms.o: kern/generic/rtc_get_time_ms.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/generic/kernel_exec-rtc_get_time_ms.o -MD -MP -MF kern/generic/$(DEPDIR)/kernel_exec-rtc_get_time_ms.Tpo -c -o kern/generic/kernel_exec-rtc_get_time_ms.o `test -f 'kern/generic/rtc_get_time_ms.c' || echo '$(srcdir)/'`kern/generic/rtc_get_time_ms.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/generic/$(DEPDIR)/kernel_exec-rtc_get_time_ms.Tpo kern/generic/$(DEPDIR)/kernel_exec-rtc_get_time_ms.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/generic/rtc_get_time_ms.c' object='kern/generic/kernel_exec-rtc_get_time_ms.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/generic/kernel_exec-rtc_get_time_ms.o `test -f 'kern/generic/rtc_get_time_ms.c' || echo '$(srcdir)/'`kern/generic/rtc_get_time_ms.c + +kern/generic/kernel_exec-rtc_get_time_ms.obj: kern/generic/rtc_get_time_ms.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/generic/kernel_exec-rtc_get_time_ms.obj -MD -MP -MF kern/generic/$(DEPDIR)/kernel_exec-rtc_get_time_ms.Tpo -c -o kern/generic/kernel_exec-rtc_get_time_ms.obj `if test -f 'kern/generic/rtc_get_time_ms.c'; then $(CYGPATH_W) 'kern/generic/rtc_get_time_ms.c'; else $(CYGPATH_W) '$(srcdir)/kern/generic/rtc_get_time_ms.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/generic/$(DEPDIR)/kernel_exec-rtc_get_time_ms.Tpo kern/generic/$(DEPDIR)/kernel_exec-rtc_get_time_ms.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/generic/rtc_get_time_ms.c' object='kern/generic/kernel_exec-rtc_get_time_ms.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/generic/kernel_exec-rtc_get_time_ms.obj `if test -f 'kern/generic/rtc_get_time_ms.c'; then $(CYGPATH_W) 'kern/generic/rtc_get_time_ms.c'; else $(CYGPATH_W) '$(srcdir)/kern/generic/rtc_get_time_ms.c'; fi` + +kern/mips/kernel_exec-dl.o: kern/mips/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/kernel_exec-dl.o -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/mips/kernel_exec-dl.o `test -f 'kern/mips/dl.c' || echo '$(srcdir)/'`kern/mips/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-dl.Tpo kern/mips/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/dl.c' object='kern/mips/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/kernel_exec-dl.o `test -f 'kern/mips/dl.c' || echo '$(srcdir)/'`kern/mips/dl.c + +kern/mips/kernel_exec-dl.obj: kern/mips/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/kernel_exec-dl.obj -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/mips/kernel_exec-dl.obj `if test -f 'kern/mips/dl.c'; then $(CYGPATH_W) 'kern/mips/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-dl.Tpo kern/mips/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/dl.c' object='kern/mips/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/kernel_exec-dl.obj `if test -f 'kern/mips/dl.c'; then $(CYGPATH_W) 'kern/mips/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/dl.c'; fi` + +kern/mips/kernel_exec-init.o: kern/mips/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/kernel_exec-init.o -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/kernel_exec-init.o `test -f 'kern/mips/init.c' || echo '$(srcdir)/'`kern/mips/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/init.c' object='kern/mips/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/kernel_exec-init.o `test -f 'kern/mips/init.c' || echo '$(srcdir)/'`kern/mips/init.c + +kern/mips/kernel_exec-init.obj: kern/mips/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/kernel_exec-init.obj -MD -MP -MF kern/mips/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/kernel_exec-init.obj `if test -f 'kern/mips/init.c'; then $(CYGPATH_W) 'kern/mips/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/init.c' object='kern/mips/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/kernel_exec-init.obj `if test -f 'kern/mips/init.c'; then $(CYGPATH_W) 'kern/mips/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/init.c'; fi` + +term/kernel_exec-ns8250.o: term/ns8250.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-ns8250.o -MD -MP -MF term/$(DEPDIR)/kernel_exec-ns8250.Tpo -c -o term/kernel_exec-ns8250.o `test -f 'term/ns8250.c' || echo '$(srcdir)/'`term/ns8250.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-ns8250.Tpo term/$(DEPDIR)/kernel_exec-ns8250.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ns8250.c' object='term/kernel_exec-ns8250.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-ns8250.o `test -f 'term/ns8250.c' || echo '$(srcdir)/'`term/ns8250.c + +term/kernel_exec-ns8250.obj: term/ns8250.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-ns8250.obj -MD -MP -MF term/$(DEPDIR)/kernel_exec-ns8250.Tpo -c -o term/kernel_exec-ns8250.obj `if test -f 'term/ns8250.c'; then $(CYGPATH_W) 'term/ns8250.c'; else $(CYGPATH_W) '$(srcdir)/term/ns8250.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-ns8250.Tpo term/$(DEPDIR)/kernel_exec-ns8250.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ns8250.c' object='term/kernel_exec-ns8250.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-ns8250.obj `if test -f 'term/ns8250.c'; then $(CYGPATH_W) 'term/ns8250.c'; else $(CYGPATH_W) '$(srcdir)/term/ns8250.c'; fi` + +bus/kernel_exec-bonito.o: bus/bonito.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT bus/kernel_exec-bonito.o -MD -MP -MF bus/$(DEPDIR)/kernel_exec-bonito.Tpo -c -o bus/kernel_exec-bonito.o `test -f 'bus/bonito.c' || echo '$(srcdir)/'`bus/bonito.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/kernel_exec-bonito.Tpo bus/$(DEPDIR)/kernel_exec-bonito.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/bonito.c' object='bus/kernel_exec-bonito.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o bus/kernel_exec-bonito.o `test -f 'bus/bonito.c' || echo '$(srcdir)/'`bus/bonito.c + +bus/kernel_exec-bonito.obj: bus/bonito.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT bus/kernel_exec-bonito.obj -MD -MP -MF bus/$(DEPDIR)/kernel_exec-bonito.Tpo -c -o bus/kernel_exec-bonito.obj `if test -f 'bus/bonito.c'; then $(CYGPATH_W) 'bus/bonito.c'; else $(CYGPATH_W) '$(srcdir)/bus/bonito.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/kernel_exec-bonito.Tpo bus/$(DEPDIR)/kernel_exec-bonito.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/bonito.c' object='bus/kernel_exec-bonito.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o bus/kernel_exec-bonito.obj `if test -f 'bus/bonito.c'; then $(CYGPATH_W) 'bus/bonito.c'; else $(CYGPATH_W) '$(srcdir)/bus/bonito.c'; fi` + +bus/kernel_exec-cs5536.o: bus/cs5536.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT bus/kernel_exec-cs5536.o -MD -MP -MF bus/$(DEPDIR)/kernel_exec-cs5536.Tpo -c -o bus/kernel_exec-cs5536.o `test -f 'bus/cs5536.c' || echo '$(srcdir)/'`bus/cs5536.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/kernel_exec-cs5536.Tpo bus/$(DEPDIR)/kernel_exec-cs5536.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/cs5536.c' object='bus/kernel_exec-cs5536.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o bus/kernel_exec-cs5536.o `test -f 'bus/cs5536.c' || echo '$(srcdir)/'`bus/cs5536.c + +bus/kernel_exec-cs5536.obj: bus/cs5536.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT bus/kernel_exec-cs5536.obj -MD -MP -MF bus/$(DEPDIR)/kernel_exec-cs5536.Tpo -c -o bus/kernel_exec-cs5536.obj `if test -f 'bus/cs5536.c'; then $(CYGPATH_W) 'bus/cs5536.c'; else $(CYGPATH_W) '$(srcdir)/bus/cs5536.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/kernel_exec-cs5536.Tpo bus/$(DEPDIR)/kernel_exec-cs5536.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/cs5536.c' object='bus/kernel_exec-cs5536.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o bus/kernel_exec-cs5536.obj `if test -f 'bus/cs5536.c'; then $(CYGPATH_W) 'bus/cs5536.c'; else $(CYGPATH_W) '$(srcdir)/bus/cs5536.c'; fi` + +kern/mips/loongson/kernel_exec-init.o: kern/mips/loongson/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/loongson/kernel_exec-init.o -MD -MP -MF kern/mips/loongson/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/loongson/kernel_exec-init.o `test -f 'kern/mips/loongson/init.c' || echo '$(srcdir)/'`kern/mips/loongson/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/loongson/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/loongson/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/loongson/init.c' object='kern/mips/loongson/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/loongson/kernel_exec-init.o `test -f 'kern/mips/loongson/init.c' || echo '$(srcdir)/'`kern/mips/loongson/init.c + +kern/mips/loongson/kernel_exec-init.obj: kern/mips/loongson/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/loongson/kernel_exec-init.obj -MD -MP -MF kern/mips/loongson/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/loongson/kernel_exec-init.obj `if test -f 'kern/mips/loongson/init.c'; then $(CYGPATH_W) 'kern/mips/loongson/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/loongson/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/loongson/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/loongson/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/loongson/init.c' object='kern/mips/loongson/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/loongson/kernel_exec-init.obj `if test -f 'kern/mips/loongson/init.c'; then $(CYGPATH_W) 'kern/mips/loongson/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/loongson/init.c'; fi` + +term/kernel_exec-at_keyboard.o: term/at_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-at_keyboard.o -MD -MP -MF term/$(DEPDIR)/kernel_exec-at_keyboard.Tpo -c -o term/kernel_exec-at_keyboard.o `test -f 'term/at_keyboard.c' || echo '$(srcdir)/'`term/at_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-at_keyboard.Tpo term/$(DEPDIR)/kernel_exec-at_keyboard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/at_keyboard.c' object='term/kernel_exec-at_keyboard.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-at_keyboard.o `test -f 'term/at_keyboard.c' || echo '$(srcdir)/'`term/at_keyboard.c + +term/kernel_exec-at_keyboard.obj: term/at_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-at_keyboard.obj -MD -MP -MF term/$(DEPDIR)/kernel_exec-at_keyboard.Tpo -c -o term/kernel_exec-at_keyboard.obj `if test -f 'term/at_keyboard.c'; then $(CYGPATH_W) 'term/at_keyboard.c'; else $(CYGPATH_W) '$(srcdir)/term/at_keyboard.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-at_keyboard.Tpo term/$(DEPDIR)/kernel_exec-at_keyboard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/at_keyboard.c' object='term/kernel_exec-at_keyboard.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-at_keyboard.obj `if test -f 'term/at_keyboard.c'; then $(CYGPATH_W) 'term/at_keyboard.c'; else $(CYGPATH_W) '$(srcdir)/term/at_keyboard.c'; fi` + +term/kernel_exec-serial.o: term/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-serial.o -MD -MP -MF term/$(DEPDIR)/kernel_exec-serial.Tpo -c -o term/kernel_exec-serial.o `test -f 'term/serial.c' || echo '$(srcdir)/'`term/serial.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-serial.Tpo term/$(DEPDIR)/kernel_exec-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/serial.c' object='term/kernel_exec-serial.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-serial.o `test -f 'term/serial.c' || echo '$(srcdir)/'`term/serial.c + +term/kernel_exec-serial.obj: term/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT term/kernel_exec-serial.obj -MD -MP -MF term/$(DEPDIR)/kernel_exec-serial.Tpo -c -o term/kernel_exec-serial.obj `if test -f 'term/serial.c'; then $(CYGPATH_W) 'term/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/serial.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/kernel_exec-serial.Tpo term/$(DEPDIR)/kernel_exec-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/serial.c' object='term/kernel_exec-serial.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o term/kernel_exec-serial.obj `if test -f 'term/serial.c'; then $(CYGPATH_W) 'term/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/serial.c'; fi` + +video/kernel_exec-sm712.o: video/sm712.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-sm712.o -MD -MP -MF video/$(DEPDIR)/kernel_exec-sm712.Tpo -c -o video/kernel_exec-sm712.o `test -f 'video/sm712.c' || echo '$(srcdir)/'`video/sm712.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-sm712.Tpo video/$(DEPDIR)/kernel_exec-sm712.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/sm712.c' object='video/kernel_exec-sm712.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-sm712.o `test -f 'video/sm712.c' || echo '$(srcdir)/'`video/sm712.c + +video/kernel_exec-sm712.obj: video/sm712.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-sm712.obj -MD -MP -MF video/$(DEPDIR)/kernel_exec-sm712.Tpo -c -o video/kernel_exec-sm712.obj `if test -f 'video/sm712.c'; then $(CYGPATH_W) 'video/sm712.c'; else $(CYGPATH_W) '$(srcdir)/video/sm712.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-sm712.Tpo video/$(DEPDIR)/kernel_exec-sm712.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/sm712.c' object='video/kernel_exec-sm712.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-sm712.obj `if test -f 'video/sm712.c'; then $(CYGPATH_W) 'video/sm712.c'; else $(CYGPATH_W) '$(srcdir)/video/sm712.c'; fi` + +video/kernel_exec-sis315pro.o: video/sis315pro.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-sis315pro.o -MD -MP -MF video/$(DEPDIR)/kernel_exec-sis315pro.Tpo -c -o video/kernel_exec-sis315pro.o `test -f 'video/sis315pro.c' || echo '$(srcdir)/'`video/sis315pro.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-sis315pro.Tpo video/$(DEPDIR)/kernel_exec-sis315pro.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/sis315pro.c' object='video/kernel_exec-sis315pro.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-sis315pro.o `test -f 'video/sis315pro.c' || echo '$(srcdir)/'`video/sis315pro.c + +video/kernel_exec-sis315pro.obj: video/sis315pro.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-sis315pro.obj -MD -MP -MF video/$(DEPDIR)/kernel_exec-sis315pro.Tpo -c -o video/kernel_exec-sis315pro.obj `if test -f 'video/sis315pro.c'; then $(CYGPATH_W) 'video/sis315pro.c'; else $(CYGPATH_W) '$(srcdir)/video/sis315pro.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-sis315pro.Tpo video/$(DEPDIR)/kernel_exec-sis315pro.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/sis315pro.c' object='video/kernel_exec-sis315pro.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-sis315pro.obj `if test -f 'video/sis315pro.c'; then $(CYGPATH_W) 'video/sis315pro.c'; else $(CYGPATH_W) '$(srcdir)/video/sis315pro.c'; fi` + +video/kernel_exec-radeon_fuloong2e.o: video/radeon_fuloong2e.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-radeon_fuloong2e.o -MD -MP -MF video/$(DEPDIR)/kernel_exec-radeon_fuloong2e.Tpo -c -o video/kernel_exec-radeon_fuloong2e.o `test -f 'video/radeon_fuloong2e.c' || echo '$(srcdir)/'`video/radeon_fuloong2e.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-radeon_fuloong2e.Tpo video/$(DEPDIR)/kernel_exec-radeon_fuloong2e.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/radeon_fuloong2e.c' object='video/kernel_exec-radeon_fuloong2e.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-radeon_fuloong2e.o `test -f 'video/radeon_fuloong2e.c' || echo '$(srcdir)/'`video/radeon_fuloong2e.c + +video/kernel_exec-radeon_fuloong2e.obj: video/radeon_fuloong2e.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-radeon_fuloong2e.obj -MD -MP -MF video/$(DEPDIR)/kernel_exec-radeon_fuloong2e.Tpo -c -o video/kernel_exec-radeon_fuloong2e.obj `if test -f 'video/radeon_fuloong2e.c'; then $(CYGPATH_W) 'video/radeon_fuloong2e.c'; else $(CYGPATH_W) '$(srcdir)/video/radeon_fuloong2e.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-radeon_fuloong2e.Tpo video/$(DEPDIR)/kernel_exec-radeon_fuloong2e.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/radeon_fuloong2e.c' object='video/kernel_exec-radeon_fuloong2e.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-radeon_fuloong2e.obj `if test -f 'video/radeon_fuloong2e.c'; then $(CYGPATH_W) 'video/radeon_fuloong2e.c'; else $(CYGPATH_W) '$(srcdir)/video/radeon_fuloong2e.c'; fi` + +video/kernel_exec-radeon_yeeloong3a.o: video/radeon_yeeloong3a.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-radeon_yeeloong3a.o -MD -MP -MF video/$(DEPDIR)/kernel_exec-radeon_yeeloong3a.Tpo -c -o video/kernel_exec-radeon_yeeloong3a.o `test -f 'video/radeon_yeeloong3a.c' || echo '$(srcdir)/'`video/radeon_yeeloong3a.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-radeon_yeeloong3a.Tpo video/$(DEPDIR)/kernel_exec-radeon_yeeloong3a.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/radeon_yeeloong3a.c' object='video/kernel_exec-radeon_yeeloong3a.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-radeon_yeeloong3a.o `test -f 'video/radeon_yeeloong3a.c' || echo '$(srcdir)/'`video/radeon_yeeloong3a.c + +video/kernel_exec-radeon_yeeloong3a.obj: video/radeon_yeeloong3a.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT video/kernel_exec-radeon_yeeloong3a.obj -MD -MP -MF video/$(DEPDIR)/kernel_exec-radeon_yeeloong3a.Tpo -c -o video/kernel_exec-radeon_yeeloong3a.obj `if test -f 'video/radeon_yeeloong3a.c'; then $(CYGPATH_W) 'video/radeon_yeeloong3a.c'; else $(CYGPATH_W) '$(srcdir)/video/radeon_yeeloong3a.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/kernel_exec-radeon_yeeloong3a.Tpo video/$(DEPDIR)/kernel_exec-radeon_yeeloong3a.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/radeon_yeeloong3a.c' object='video/kernel_exec-radeon_yeeloong3a.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o video/kernel_exec-radeon_yeeloong3a.obj `if test -f 'video/radeon_yeeloong3a.c'; then $(CYGPATH_W) 'video/radeon_yeeloong3a.c'; else $(CYGPATH_W) '$(srcdir)/video/radeon_yeeloong3a.c'; fi` + +commands/kernel_exec-keylayouts.o: commands/keylayouts.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT commands/kernel_exec-keylayouts.o -MD -MP -MF commands/$(DEPDIR)/kernel_exec-keylayouts.Tpo -c -o commands/kernel_exec-keylayouts.o `test -f 'commands/keylayouts.c' || echo '$(srcdir)/'`commands/keylayouts.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/kernel_exec-keylayouts.Tpo commands/$(DEPDIR)/kernel_exec-keylayouts.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/keylayouts.c' object='commands/kernel_exec-keylayouts.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o commands/kernel_exec-keylayouts.o `test -f 'commands/keylayouts.c' || echo '$(srcdir)/'`commands/keylayouts.c + +commands/kernel_exec-keylayouts.obj: commands/keylayouts.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT commands/kernel_exec-keylayouts.obj -MD -MP -MF commands/$(DEPDIR)/kernel_exec-keylayouts.Tpo -c -o commands/kernel_exec-keylayouts.obj `if test -f 'commands/keylayouts.c'; then $(CYGPATH_W) 'commands/keylayouts.c'; else $(CYGPATH_W) '$(srcdir)/commands/keylayouts.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/kernel_exec-keylayouts.Tpo commands/$(DEPDIR)/kernel_exec-keylayouts.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/keylayouts.c' object='commands/kernel_exec-keylayouts.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o commands/kernel_exec-keylayouts.obj `if test -f 'commands/keylayouts.c'; then $(CYGPATH_W) 'commands/keylayouts.c'; else $(CYGPATH_W) '$(srcdir)/commands/keylayouts.c'; fi` + +kern/mips/qemu_mips/kernel_exec-init.o: kern/mips/qemu_mips/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/qemu_mips/kernel_exec-init.o -MD -MP -MF kern/mips/qemu_mips/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/qemu_mips/kernel_exec-init.o `test -f 'kern/mips/qemu_mips/init.c' || echo '$(srcdir)/'`kern/mips/qemu_mips/init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/qemu_mips/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/qemu_mips/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/qemu_mips/init.c' object='kern/mips/qemu_mips/kernel_exec-init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/qemu_mips/kernel_exec-init.o `test -f 'kern/mips/qemu_mips/init.c' || echo '$(srcdir)/'`kern/mips/qemu_mips/init.c + +kern/mips/qemu_mips/kernel_exec-init.obj: kern/mips/qemu_mips/init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/mips/qemu_mips/kernel_exec-init.obj -MD -MP -MF kern/mips/qemu_mips/$(DEPDIR)/kernel_exec-init.Tpo -c -o kern/mips/qemu_mips/kernel_exec-init.obj `if test -f 'kern/mips/qemu_mips/init.c'; then $(CYGPATH_W) 'kern/mips/qemu_mips/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/qemu_mips/init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/mips/qemu_mips/$(DEPDIR)/kernel_exec-init.Tpo kern/mips/qemu_mips/$(DEPDIR)/kernel_exec-init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/mips/qemu_mips/init.c' object='kern/mips/qemu_mips/kernel_exec-init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/mips/qemu_mips/kernel_exec-init.obj `if test -f 'kern/mips/qemu_mips/init.c'; then $(CYGPATH_W) 'kern/mips/qemu_mips/init.c'; else $(CYGPATH_W) '$(srcdir)/kern/mips/qemu_mips/init.c'; fi` + +kern/powerpc/kernel_exec-dl.o: kern/powerpc/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/powerpc/kernel_exec-dl.o -MD -MP -MF kern/powerpc/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/powerpc/kernel_exec-dl.o `test -f 'kern/powerpc/dl.c' || echo '$(srcdir)/'`kern/powerpc/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/$(DEPDIR)/kernel_exec-dl.Tpo kern/powerpc/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/powerpc/dl.c' object='kern/powerpc/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/powerpc/kernel_exec-dl.o `test -f 'kern/powerpc/dl.c' || echo '$(srcdir)/'`kern/powerpc/dl.c + +kern/powerpc/kernel_exec-dl.obj: kern/powerpc/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/powerpc/kernel_exec-dl.obj -MD -MP -MF kern/powerpc/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/powerpc/kernel_exec-dl.obj `if test -f 'kern/powerpc/dl.c'; then $(CYGPATH_W) 'kern/powerpc/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/powerpc/$(DEPDIR)/kernel_exec-dl.Tpo kern/powerpc/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/powerpc/dl.c' object='kern/powerpc/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/powerpc/kernel_exec-dl.obj `if test -f 'kern/powerpc/dl.c'; then $(CYGPATH_W) 'kern/powerpc/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/powerpc/dl.c'; fi` + +kern/sparc64/kernel_exec-dl.o: kern/sparc64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/sparc64/kernel_exec-dl.o -MD -MP -MF kern/sparc64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/sparc64/kernel_exec-dl.o `test -f 'kern/sparc64/dl.c' || echo '$(srcdir)/'`kern/sparc64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/$(DEPDIR)/kernel_exec-dl.Tpo kern/sparc64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/sparc64/dl.c' object='kern/sparc64/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/sparc64/kernel_exec-dl.o `test -f 'kern/sparc64/dl.c' || echo '$(srcdir)/'`kern/sparc64/dl.c + +kern/sparc64/kernel_exec-dl.obj: kern/sparc64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/sparc64/kernel_exec-dl.obj -MD -MP -MF kern/sparc64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/sparc64/kernel_exec-dl.obj `if test -f 'kern/sparc64/dl.c'; then $(CYGPATH_W) 'kern/sparc64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/$(DEPDIR)/kernel_exec-dl.Tpo kern/sparc64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/sparc64/dl.c' object='kern/sparc64/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/sparc64/kernel_exec-dl.obj `if test -f 'kern/sparc64/dl.c'; then $(CYGPATH_W) 'kern/sparc64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/dl.c'; fi` + +kern/sparc64/ieee1275/kernel_exec-ieee1275.o: kern/sparc64/ieee1275/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/sparc64/ieee1275/kernel_exec-ieee1275.o -MD -MP -MF kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo -c -o kern/sparc64/ieee1275/kernel_exec-ieee1275.o `test -f 'kern/sparc64/ieee1275/ieee1275.c' || echo '$(srcdir)/'`kern/sparc64/ieee1275/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/sparc64/ieee1275/ieee1275.c' object='kern/sparc64/ieee1275/kernel_exec-ieee1275.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/sparc64/ieee1275/kernel_exec-ieee1275.o `test -f 'kern/sparc64/ieee1275/ieee1275.c' || echo '$(srcdir)/'`kern/sparc64/ieee1275/ieee1275.c + +kern/sparc64/ieee1275/kernel_exec-ieee1275.obj: kern/sparc64/ieee1275/ieee1275.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/sparc64/ieee1275/kernel_exec-ieee1275.obj -MD -MP -MF kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo -c -o kern/sparc64/ieee1275/kernel_exec-ieee1275.obj `if test -f 'kern/sparc64/ieee1275/ieee1275.c'; then $(CYGPATH_W) 'kern/sparc64/ieee1275/ieee1275.c'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/ieee1275/ieee1275.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Tpo kern/sparc64/ieee1275/$(DEPDIR)/kernel_exec-ieee1275.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/sparc64/ieee1275/ieee1275.c' object='kern/sparc64/ieee1275/kernel_exec-ieee1275.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/sparc64/ieee1275/kernel_exec-ieee1275.obj `if test -f 'kern/sparc64/ieee1275/ieee1275.c'; then $(CYGPATH_W) 'kern/sparc64/ieee1275/ieee1275.c'; else $(CYGPATH_W) '$(srcdir)/kern/sparc64/ieee1275/ieee1275.c'; fi` + +kern/x86_64/kernel_exec-dl.o: kern/x86_64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/x86_64/kernel_exec-dl.o -MD -MP -MF kern/x86_64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/x86_64/kernel_exec-dl.o `test -f 'kern/x86_64/dl.c' || echo '$(srcdir)/'`kern/x86_64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/$(DEPDIR)/kernel_exec-dl.Tpo kern/x86_64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/x86_64/dl.c' object='kern/x86_64/kernel_exec-dl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/x86_64/kernel_exec-dl.o `test -f 'kern/x86_64/dl.c' || echo '$(srcdir)/'`kern/x86_64/dl.c + +kern/x86_64/kernel_exec-dl.obj: kern/x86_64/dl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kern/x86_64/kernel_exec-dl.obj -MD -MP -MF kern/x86_64/$(DEPDIR)/kernel_exec-dl.Tpo -c -o kern/x86_64/kernel_exec-dl.obj `if test -f 'kern/x86_64/dl.c'; then $(CYGPATH_W) 'kern/x86_64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/dl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/x86_64/$(DEPDIR)/kernel_exec-dl.Tpo kern/x86_64/$(DEPDIR)/kernel_exec-dl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/x86_64/dl.c' object='kern/x86_64/kernel_exec-dl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kern/x86_64/kernel_exec-dl.obj `if test -f 'kern/x86_64/dl.c'; then $(CYGPATH_W) 'kern/x86_64/dl.c'; else $(CYGPATH_W) '$(srcdir)/kern/x86_64/dl.c'; fi` + +kernel_exec-symlist.o: symlist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kernel_exec-symlist.o -MD -MP -MF $(DEPDIR)/kernel_exec-symlist.Tpo -c -o kernel_exec-symlist.o `test -f 'symlist.c' || echo '$(srcdir)/'`symlist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/kernel_exec-symlist.Tpo $(DEPDIR)/kernel_exec-symlist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symlist.c' object='kernel_exec-symlist.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kernel_exec-symlist.o `test -f 'symlist.c' || echo '$(srcdir)/'`symlist.c + +kernel_exec-symlist.obj: symlist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -MT kernel_exec-symlist.obj -MD -MP -MF $(DEPDIR)/kernel_exec-symlist.Tpo -c -o kernel_exec-symlist.obj `if test -f 'symlist.c'; then $(CYGPATH_W) 'symlist.c'; else $(CYGPATH_W) '$(srcdir)/symlist.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/kernel_exec-symlist.Tpo $(DEPDIR)/kernel_exec-symlist.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symlist.c' object='kernel_exec-symlist.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(kernel_exec_CPPFLAGS) $(CPPFLAGS) $(kernel_exec_CFLAGS) $(CFLAGS) -c -o kernel_exec-symlist.obj `if test -f 'symlist.c'; then $(CYGPATH_W) 'symlist.c'; else $(CYGPATH_W) '$(srcdir)/symlist.c'; fi` + +commands/keylayouts_module-keylayouts.o: commands/keylayouts.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $(keylayouts_module_CFLAGS) $(CFLAGS) -MT commands/keylayouts_module-keylayouts.o -MD -MP -MF commands/$(DEPDIR)/keylayouts_module-keylayouts.Tpo -c -o commands/keylayouts_module-keylayouts.o `test -f 'commands/keylayouts.c' || echo '$(srcdir)/'`commands/keylayouts.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/keylayouts_module-keylayouts.Tpo commands/$(DEPDIR)/keylayouts_module-keylayouts.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/keylayouts.c' object='commands/keylayouts_module-keylayouts.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $(keylayouts_module_CFLAGS) $(CFLAGS) -c -o commands/keylayouts_module-keylayouts.o `test -f 'commands/keylayouts.c' || echo '$(srcdir)/'`commands/keylayouts.c + +commands/keylayouts_module-keylayouts.obj: commands/keylayouts.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $(keylayouts_module_CFLAGS) $(CFLAGS) -MT commands/keylayouts_module-keylayouts.obj -MD -MP -MF commands/$(DEPDIR)/keylayouts_module-keylayouts.Tpo -c -o commands/keylayouts_module-keylayouts.obj `if test -f 'commands/keylayouts.c'; then $(CYGPATH_W) 'commands/keylayouts.c'; else $(CYGPATH_W) '$(srcdir)/commands/keylayouts.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/keylayouts_module-keylayouts.Tpo commands/$(DEPDIR)/keylayouts_module-keylayouts.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/keylayouts.c' object='commands/keylayouts_module-keylayouts.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $(keylayouts_module_CFLAGS) $(CFLAGS) -c -o commands/keylayouts_module-keylayouts.obj `if test -f 'commands/keylayouts.c'; then $(CYGPATH_W) 'commands/keylayouts.c'; else $(CYGPATH_W) '$(srcdir)/commands/keylayouts.c'; fi` + +commands/keystatus_module-keystatus.o: commands/keystatus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keystatus_module_CPPFLAGS) $(CPPFLAGS) $(keystatus_module_CFLAGS) $(CFLAGS) -MT commands/keystatus_module-keystatus.o -MD -MP -MF commands/$(DEPDIR)/keystatus_module-keystatus.Tpo -c -o commands/keystatus_module-keystatus.o `test -f 'commands/keystatus.c' || echo '$(srcdir)/'`commands/keystatus.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/keystatus_module-keystatus.Tpo commands/$(DEPDIR)/keystatus_module-keystatus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/keystatus.c' object='commands/keystatus_module-keystatus.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keystatus_module_CPPFLAGS) $(CPPFLAGS) $(keystatus_module_CFLAGS) $(CFLAGS) -c -o commands/keystatus_module-keystatus.o `test -f 'commands/keystatus.c' || echo '$(srcdir)/'`commands/keystatus.c + +commands/keystatus_module-keystatus.obj: commands/keystatus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keystatus_module_CPPFLAGS) $(CPPFLAGS) $(keystatus_module_CFLAGS) $(CFLAGS) -MT commands/keystatus_module-keystatus.obj -MD -MP -MF commands/$(DEPDIR)/keystatus_module-keystatus.Tpo -c -o commands/keystatus_module-keystatus.obj `if test -f 'commands/keystatus.c'; then $(CYGPATH_W) 'commands/keystatus.c'; else $(CYGPATH_W) '$(srcdir)/commands/keystatus.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/keystatus_module-keystatus.Tpo commands/$(DEPDIR)/keystatus_module-keystatus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/keystatus.c' object='commands/keystatus_module-keystatus.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keystatus_module_CPPFLAGS) $(CPPFLAGS) $(keystatus_module_CFLAGS) $(CFLAGS) -c -o commands/keystatus_module-keystatus.obj `if test -f 'commands/keystatus.c'; then $(CYGPATH_W) 'commands/keystatus.c'; else $(CYGPATH_W) '$(srcdir)/commands/keystatus.c'; fi` + +disk/ldm_module-ldm.o: disk/ldm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldm_module_CPPFLAGS) $(CPPFLAGS) $(ldm_module_CFLAGS) $(CFLAGS) -MT disk/ldm_module-ldm.o -MD -MP -MF disk/$(DEPDIR)/ldm_module-ldm.Tpo -c -o disk/ldm_module-ldm.o `test -f 'disk/ldm.c' || echo '$(srcdir)/'`disk/ldm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/ldm_module-ldm.Tpo disk/$(DEPDIR)/ldm_module-ldm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ldm.c' object='disk/ldm_module-ldm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldm_module_CPPFLAGS) $(CPPFLAGS) $(ldm_module_CFLAGS) $(CFLAGS) -c -o disk/ldm_module-ldm.o `test -f 'disk/ldm.c' || echo '$(srcdir)/'`disk/ldm.c + +disk/ldm_module-ldm.obj: disk/ldm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldm_module_CPPFLAGS) $(CPPFLAGS) $(ldm_module_CFLAGS) $(CFLAGS) -MT disk/ldm_module-ldm.obj -MD -MP -MF disk/$(DEPDIR)/ldm_module-ldm.Tpo -c -o disk/ldm_module-ldm.obj `if test -f 'disk/ldm.c'; then $(CYGPATH_W) 'disk/ldm.c'; else $(CYGPATH_W) '$(srcdir)/disk/ldm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/ldm_module-ldm.Tpo disk/$(DEPDIR)/ldm_module-ldm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ldm.c' object='disk/ldm_module-ldm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldm_module_CPPFLAGS) $(CPPFLAGS) $(ldm_module_CFLAGS) $(CFLAGS) -c -o disk/ldm_module-ldm.obj `if test -f 'disk/ldm.c'; then $(CYGPATH_W) 'disk/ldm.c'; else $(CYGPATH_W) '$(srcdir)/disk/ldm.c'; fi` + +tests/legacy_password_test_module-legacy_password_test.o: tests/legacy_password_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $(legacy_password_test_module_CFLAGS) $(CFLAGS) -MT tests/legacy_password_test_module-legacy_password_test.o -MD -MP -MF tests/$(DEPDIR)/legacy_password_test_module-legacy_password_test.Tpo -c -o tests/legacy_password_test_module-legacy_password_test.o `test -f 'tests/legacy_password_test.c' || echo '$(srcdir)/'`tests/legacy_password_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/legacy_password_test_module-legacy_password_test.Tpo tests/$(DEPDIR)/legacy_password_test_module-legacy_password_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/legacy_password_test.c' object='tests/legacy_password_test_module-legacy_password_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $(legacy_password_test_module_CFLAGS) $(CFLAGS) -c -o tests/legacy_password_test_module-legacy_password_test.o `test -f 'tests/legacy_password_test.c' || echo '$(srcdir)/'`tests/legacy_password_test.c + +tests/legacy_password_test_module-legacy_password_test.obj: tests/legacy_password_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $(legacy_password_test_module_CFLAGS) $(CFLAGS) -MT tests/legacy_password_test_module-legacy_password_test.obj -MD -MP -MF tests/$(DEPDIR)/legacy_password_test_module-legacy_password_test.Tpo -c -o tests/legacy_password_test_module-legacy_password_test.obj `if test -f 'tests/legacy_password_test.c'; then $(CYGPATH_W) 'tests/legacy_password_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/legacy_password_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/legacy_password_test_module-legacy_password_test.Tpo tests/$(DEPDIR)/legacy_password_test_module-legacy_password_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/legacy_password_test.c' object='tests/legacy_password_test_module-legacy_password_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $(legacy_password_test_module_CFLAGS) $(CFLAGS) -c -o tests/legacy_password_test_module-legacy_password_test.obj `if test -f 'tests/legacy_password_test.c'; then $(CYGPATH_W) 'tests/legacy_password_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/legacy_password_test.c'; fi` + +lib/i386/pc/legacycfg_module-vesa_modes_table.o: lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -MT lib/i386/pc/legacycfg_module-vesa_modes_table.o -MD -MP -MF lib/i386/pc/$(DEPDIR)/legacycfg_module-vesa_modes_table.Tpo -c -o lib/i386/pc/legacycfg_module-vesa_modes_table.o `test -f 'lib/i386/pc/vesa_modes_table.c' || echo '$(srcdir)/'`lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/pc/$(DEPDIR)/legacycfg_module-vesa_modes_table.Tpo lib/i386/pc/$(DEPDIR)/legacycfg_module-vesa_modes_table.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/pc/vesa_modes_table.c' object='lib/i386/pc/legacycfg_module-vesa_modes_table.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -c -o lib/i386/pc/legacycfg_module-vesa_modes_table.o `test -f 'lib/i386/pc/vesa_modes_table.c' || echo '$(srcdir)/'`lib/i386/pc/vesa_modes_table.c + +lib/i386/pc/legacycfg_module-vesa_modes_table.obj: lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -MT lib/i386/pc/legacycfg_module-vesa_modes_table.obj -MD -MP -MF lib/i386/pc/$(DEPDIR)/legacycfg_module-vesa_modes_table.Tpo -c -o lib/i386/pc/legacycfg_module-vesa_modes_table.obj `if test -f 'lib/i386/pc/vesa_modes_table.c'; then $(CYGPATH_W) 'lib/i386/pc/vesa_modes_table.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/pc/vesa_modes_table.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/pc/$(DEPDIR)/legacycfg_module-vesa_modes_table.Tpo lib/i386/pc/$(DEPDIR)/legacycfg_module-vesa_modes_table.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/pc/vesa_modes_table.c' object='lib/i386/pc/legacycfg_module-vesa_modes_table.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -c -o lib/i386/pc/legacycfg_module-vesa_modes_table.obj `if test -f 'lib/i386/pc/vesa_modes_table.c'; then $(CYGPATH_W) 'lib/i386/pc/vesa_modes_table.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/pc/vesa_modes_table.c'; fi` + +commands/legacycfg_module-legacycfg.o: commands/legacycfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -MT commands/legacycfg_module-legacycfg.o -MD -MP -MF commands/$(DEPDIR)/legacycfg_module-legacycfg.Tpo -c -o commands/legacycfg_module-legacycfg.o `test -f 'commands/legacycfg.c' || echo '$(srcdir)/'`commands/legacycfg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/legacycfg_module-legacycfg.Tpo commands/$(DEPDIR)/legacycfg_module-legacycfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/legacycfg.c' object='commands/legacycfg_module-legacycfg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -c -o commands/legacycfg_module-legacycfg.o `test -f 'commands/legacycfg.c' || echo '$(srcdir)/'`commands/legacycfg.c + +commands/legacycfg_module-legacycfg.obj: commands/legacycfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -MT commands/legacycfg_module-legacycfg.obj -MD -MP -MF commands/$(DEPDIR)/legacycfg_module-legacycfg.Tpo -c -o commands/legacycfg_module-legacycfg.obj `if test -f 'commands/legacycfg.c'; then $(CYGPATH_W) 'commands/legacycfg.c'; else $(CYGPATH_W) '$(srcdir)/commands/legacycfg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/legacycfg_module-legacycfg.Tpo commands/$(DEPDIR)/legacycfg_module-legacycfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/legacycfg.c' object='commands/legacycfg_module-legacycfg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -c -o commands/legacycfg_module-legacycfg.obj `if test -f 'commands/legacycfg.c'; then $(CYGPATH_W) 'commands/legacycfg.c'; else $(CYGPATH_W) '$(srcdir)/commands/legacycfg.c'; fi` + +lib/legacycfg_module-legacy_parse.o: lib/legacy_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -MT lib/legacycfg_module-legacy_parse.o -MD -MP -MF lib/$(DEPDIR)/legacycfg_module-legacy_parse.Tpo -c -o lib/legacycfg_module-legacy_parse.o `test -f 'lib/legacy_parse.c' || echo '$(srcdir)/'`lib/legacy_parse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/legacycfg_module-legacy_parse.Tpo lib/$(DEPDIR)/legacycfg_module-legacy_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/legacy_parse.c' object='lib/legacycfg_module-legacy_parse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -c -o lib/legacycfg_module-legacy_parse.o `test -f 'lib/legacy_parse.c' || echo '$(srcdir)/'`lib/legacy_parse.c + +lib/legacycfg_module-legacy_parse.obj: lib/legacy_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -MT lib/legacycfg_module-legacy_parse.obj -MD -MP -MF lib/$(DEPDIR)/legacycfg_module-legacy_parse.Tpo -c -o lib/legacycfg_module-legacy_parse.obj `if test -f 'lib/legacy_parse.c'; then $(CYGPATH_W) 'lib/legacy_parse.c'; else $(CYGPATH_W) '$(srcdir)/lib/legacy_parse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/legacycfg_module-legacy_parse.Tpo lib/$(DEPDIR)/legacycfg_module-legacy_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/legacy_parse.c' object='lib/legacycfg_module-legacy_parse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $(legacycfg_module_CFLAGS) $(CFLAGS) -c -o lib/legacycfg_module-legacy_parse.obj `if test -f 'lib/legacy_parse.c'; then $(CYGPATH_W) 'lib/legacy_parse.c'; else $(CYGPATH_W) '$(srcdir)/lib/legacy_parse.c'; fi` + +loader/arm64/linux_module-linux.o: loader/arm64/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/arm64/linux_module-linux.o -MD -MP -MF loader/arm64/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/arm64/linux_module-linux.o `test -f 'loader/arm64/linux.c' || echo '$(srcdir)/'`loader/arm64/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm64/$(DEPDIR)/linux_module-linux.Tpo loader/arm64/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm64/linux.c' object='loader/arm64/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/arm64/linux_module-linux.o `test -f 'loader/arm64/linux.c' || echo '$(srcdir)/'`loader/arm64/linux.c + +loader/arm64/linux_module-linux.obj: loader/arm64/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/arm64/linux_module-linux.obj -MD -MP -MF loader/arm64/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/arm64/linux_module-linux.obj `if test -f 'loader/arm64/linux.c'; then $(CYGPATH_W) 'loader/arm64/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm64/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm64/$(DEPDIR)/linux_module-linux.Tpo loader/arm64/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm64/linux.c' object='loader/arm64/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/arm64/linux_module-linux.obj `if test -f 'loader/arm64/linux.c'; then $(CYGPATH_W) 'loader/arm64/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm64/linux.c'; fi` + +loader/linux_module-linux.o: loader/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/linux_module-linux.o -MD -MP -MF loader/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/linux_module-linux.o `test -f 'loader/linux.c' || echo '$(srcdir)/'`loader/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/linux_module-linux.Tpo loader/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/linux.c' object='loader/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/linux_module-linux.o `test -f 'loader/linux.c' || echo '$(srcdir)/'`loader/linux.c + +loader/linux_module-linux.obj: loader/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/linux_module-linux.obj -MD -MP -MF loader/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/linux_module-linux.obj `if test -f 'loader/linux.c'; then $(CYGPATH_W) 'loader/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/linux_module-linux.Tpo loader/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/linux.c' object='loader/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/linux_module-linux.obj `if test -f 'loader/linux.c'; then $(CYGPATH_W) 'loader/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/linux.c'; fi` + +lib/linux_module-cmdline.o: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT lib/linux_module-cmdline.o -MD -MP -MF lib/$(DEPDIR)/linux_module-cmdline.Tpo -c -o lib/linux_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/linux_module-cmdline.Tpo lib/$(DEPDIR)/linux_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/linux_module-cmdline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o lib/linux_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c + +lib/linux_module-cmdline.obj: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT lib/linux_module-cmdline.obj -MD -MP -MF lib/$(DEPDIR)/linux_module-cmdline.Tpo -c -o lib/linux_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/linux_module-cmdline.Tpo lib/$(DEPDIR)/linux_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/linux_module-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o lib/linux_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` + +loader/arm/linux_module-linux.o: loader/arm/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/arm/linux_module-linux.o -MD -MP -MF loader/arm/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/arm/linux_module-linux.o `test -f 'loader/arm/linux.c' || echo '$(srcdir)/'`loader/arm/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm/$(DEPDIR)/linux_module-linux.Tpo loader/arm/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm/linux.c' object='loader/arm/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/arm/linux_module-linux.o `test -f 'loader/arm/linux.c' || echo '$(srcdir)/'`loader/arm/linux.c + +loader/arm/linux_module-linux.obj: loader/arm/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/arm/linux_module-linux.obj -MD -MP -MF loader/arm/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/arm/linux_module-linux.obj `if test -f 'loader/arm/linux.c'; then $(CYGPATH_W) 'loader/arm/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm/$(DEPDIR)/linux_module-linux.Tpo loader/arm/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm/linux.c' object='loader/arm/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/arm/linux_module-linux.obj `if test -f 'loader/arm/linux.c'; then $(CYGPATH_W) 'loader/arm/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm/linux.c'; fi` + +loader/i386/linux_module-linux.o: loader/i386/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/i386/linux_module-linux.o -MD -MP -MF loader/i386/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/i386/linux_module-linux.o `test -f 'loader/i386/linux.c' || echo '$(srcdir)/'`loader/i386/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/linux_module-linux.Tpo loader/i386/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/linux.c' object='loader/i386/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/i386/linux_module-linux.o `test -f 'loader/i386/linux.c' || echo '$(srcdir)/'`loader/i386/linux.c + +loader/i386/linux_module-linux.obj: loader/i386/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/i386/linux_module-linux.obj -MD -MP -MF loader/i386/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/i386/linux_module-linux.obj `if test -f 'loader/i386/linux.c'; then $(CYGPATH_W) 'loader/i386/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/linux_module-linux.Tpo loader/i386/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/linux.c' object='loader/i386/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/i386/linux_module-linux.obj `if test -f 'loader/i386/linux.c'; then $(CYGPATH_W) 'loader/i386/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/linux.c'; fi` + +lib/i386/pc/linux_module-vesa_modes_table.o: lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT lib/i386/pc/linux_module-vesa_modes_table.o -MD -MP -MF lib/i386/pc/$(DEPDIR)/linux_module-vesa_modes_table.Tpo -c -o lib/i386/pc/linux_module-vesa_modes_table.o `test -f 'lib/i386/pc/vesa_modes_table.c' || echo '$(srcdir)/'`lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/pc/$(DEPDIR)/linux_module-vesa_modes_table.Tpo lib/i386/pc/$(DEPDIR)/linux_module-vesa_modes_table.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/pc/vesa_modes_table.c' object='lib/i386/pc/linux_module-vesa_modes_table.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o lib/i386/pc/linux_module-vesa_modes_table.o `test -f 'lib/i386/pc/vesa_modes_table.c' || echo '$(srcdir)/'`lib/i386/pc/vesa_modes_table.c + +lib/i386/pc/linux_module-vesa_modes_table.obj: lib/i386/pc/vesa_modes_table.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT lib/i386/pc/linux_module-vesa_modes_table.obj -MD -MP -MF lib/i386/pc/$(DEPDIR)/linux_module-vesa_modes_table.Tpo -c -o lib/i386/pc/linux_module-vesa_modes_table.obj `if test -f 'lib/i386/pc/vesa_modes_table.c'; then $(CYGPATH_W) 'lib/i386/pc/vesa_modes_table.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/pc/vesa_modes_table.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/pc/$(DEPDIR)/linux_module-vesa_modes_table.Tpo lib/i386/pc/$(DEPDIR)/linux_module-vesa_modes_table.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/pc/vesa_modes_table.c' object='lib/i386/pc/linux_module-vesa_modes_table.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o lib/i386/pc/linux_module-vesa_modes_table.obj `if test -f 'lib/i386/pc/vesa_modes_table.c'; then $(CYGPATH_W) 'lib/i386/pc/vesa_modes_table.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/pc/vesa_modes_table.c'; fi` + +loader/i386/linux_module-xen.o: loader/i386/xen.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/i386/linux_module-xen.o -MD -MP -MF loader/i386/$(DEPDIR)/linux_module-xen.Tpo -c -o loader/i386/linux_module-xen.o `test -f 'loader/i386/xen.c' || echo '$(srcdir)/'`loader/i386/xen.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/linux_module-xen.Tpo loader/i386/$(DEPDIR)/linux_module-xen.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen.c' object='loader/i386/linux_module-xen.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/i386/linux_module-xen.o `test -f 'loader/i386/xen.c' || echo '$(srcdir)/'`loader/i386/xen.c + +loader/i386/linux_module-xen.obj: loader/i386/xen.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/i386/linux_module-xen.obj -MD -MP -MF loader/i386/$(DEPDIR)/linux_module-xen.Tpo -c -o loader/i386/linux_module-xen.obj `if test -f 'loader/i386/xen.c'; then $(CYGPATH_W) 'loader/i386/xen.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/linux_module-xen.Tpo loader/i386/$(DEPDIR)/linux_module-xen.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xen.c' object='loader/i386/linux_module-xen.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/i386/linux_module-xen.obj `if test -f 'loader/i386/xen.c'; then $(CYGPATH_W) 'loader/i386/xen.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xen.c'; fi` + +loader/ia64/efi/linux_module-linux.o: loader/ia64/efi/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/ia64/efi/linux_module-linux.o -MD -MP -MF loader/ia64/efi/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/ia64/efi/linux_module-linux.o `test -f 'loader/ia64/efi/linux.c' || echo '$(srcdir)/'`loader/ia64/efi/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/ia64/efi/$(DEPDIR)/linux_module-linux.Tpo loader/ia64/efi/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/ia64/efi/linux.c' object='loader/ia64/efi/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/ia64/efi/linux_module-linux.o `test -f 'loader/ia64/efi/linux.c' || echo '$(srcdir)/'`loader/ia64/efi/linux.c + +loader/ia64/efi/linux_module-linux.obj: loader/ia64/efi/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/ia64/efi/linux_module-linux.obj -MD -MP -MF loader/ia64/efi/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/ia64/efi/linux_module-linux.obj `if test -f 'loader/ia64/efi/linux.c'; then $(CYGPATH_W) 'loader/ia64/efi/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/ia64/efi/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/ia64/efi/$(DEPDIR)/linux_module-linux.Tpo loader/ia64/efi/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/ia64/efi/linux.c' object='loader/ia64/efi/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/ia64/efi/linux_module-linux.obj `if test -f 'loader/ia64/efi/linux.c'; then $(CYGPATH_W) 'loader/ia64/efi/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/ia64/efi/linux.c'; fi` + +loader/mips/linux_module-linux.o: loader/mips/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/mips/linux_module-linux.o -MD -MP -MF loader/mips/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/mips/linux_module-linux.o `test -f 'loader/mips/linux.c' || echo '$(srcdir)/'`loader/mips/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/mips/$(DEPDIR)/linux_module-linux.Tpo loader/mips/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/mips/linux.c' object='loader/mips/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/mips/linux_module-linux.o `test -f 'loader/mips/linux.c' || echo '$(srcdir)/'`loader/mips/linux.c + +loader/mips/linux_module-linux.obj: loader/mips/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/mips/linux_module-linux.obj -MD -MP -MF loader/mips/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/mips/linux_module-linux.obj `if test -f 'loader/mips/linux.c'; then $(CYGPATH_W) 'loader/mips/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/mips/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/mips/$(DEPDIR)/linux_module-linux.Tpo loader/mips/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/mips/linux.c' object='loader/mips/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/mips/linux_module-linux.obj `if test -f 'loader/mips/linux.c'; then $(CYGPATH_W) 'loader/mips/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/mips/linux.c'; fi` + +loader/powerpc/ieee1275/linux_module-linux.o: loader/powerpc/ieee1275/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/powerpc/ieee1275/linux_module-linux.o -MD -MP -MF loader/powerpc/ieee1275/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/powerpc/ieee1275/linux_module-linux.o `test -f 'loader/powerpc/ieee1275/linux.c' || echo '$(srcdir)/'`loader/powerpc/ieee1275/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/powerpc/ieee1275/$(DEPDIR)/linux_module-linux.Tpo loader/powerpc/ieee1275/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/powerpc/ieee1275/linux.c' object='loader/powerpc/ieee1275/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/powerpc/ieee1275/linux_module-linux.o `test -f 'loader/powerpc/ieee1275/linux.c' || echo '$(srcdir)/'`loader/powerpc/ieee1275/linux.c + +loader/powerpc/ieee1275/linux_module-linux.obj: loader/powerpc/ieee1275/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/powerpc/ieee1275/linux_module-linux.obj -MD -MP -MF loader/powerpc/ieee1275/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/powerpc/ieee1275/linux_module-linux.obj `if test -f 'loader/powerpc/ieee1275/linux.c'; then $(CYGPATH_W) 'loader/powerpc/ieee1275/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/powerpc/ieee1275/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/powerpc/ieee1275/$(DEPDIR)/linux_module-linux.Tpo loader/powerpc/ieee1275/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/powerpc/ieee1275/linux.c' object='loader/powerpc/ieee1275/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/powerpc/ieee1275/linux_module-linux.obj `if test -f 'loader/powerpc/ieee1275/linux.c'; then $(CYGPATH_W) 'loader/powerpc/ieee1275/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/powerpc/ieee1275/linux.c'; fi` + +loader/sparc64/ieee1275/linux_module-linux.o: loader/sparc64/ieee1275/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/sparc64/ieee1275/linux_module-linux.o -MD -MP -MF loader/sparc64/ieee1275/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/sparc64/ieee1275/linux_module-linux.o `test -f 'loader/sparc64/ieee1275/linux.c' || echo '$(srcdir)/'`loader/sparc64/ieee1275/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/sparc64/ieee1275/$(DEPDIR)/linux_module-linux.Tpo loader/sparc64/ieee1275/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/sparc64/ieee1275/linux.c' object='loader/sparc64/ieee1275/linux_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/sparc64/ieee1275/linux_module-linux.o `test -f 'loader/sparc64/ieee1275/linux.c' || echo '$(srcdir)/'`loader/sparc64/ieee1275/linux.c + +loader/sparc64/ieee1275/linux_module-linux.obj: loader/sparc64/ieee1275/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -MT loader/sparc64/ieee1275/linux_module-linux.obj -MD -MP -MF loader/sparc64/ieee1275/$(DEPDIR)/linux_module-linux.Tpo -c -o loader/sparc64/ieee1275/linux_module-linux.obj `if test -f 'loader/sparc64/ieee1275/linux.c'; then $(CYGPATH_W) 'loader/sparc64/ieee1275/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/sparc64/ieee1275/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/sparc64/ieee1275/$(DEPDIR)/linux_module-linux.Tpo loader/sparc64/ieee1275/$(DEPDIR)/linux_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/sparc64/ieee1275/linux.c' object='loader/sparc64/ieee1275/linux_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $(linux_module_CFLAGS) $(CFLAGS) -c -o loader/sparc64/ieee1275/linux_module-linux.obj `if test -f 'loader/sparc64/ieee1275/linux.c'; then $(CYGPATH_W) 'loader/sparc64/ieee1275/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/sparc64/ieee1275/linux.c'; fi` + +loader/i386/pc/linux16_module-linux.o: loader/i386/pc/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/linux16_module-linux.o -MD -MP -MF loader/i386/pc/$(DEPDIR)/linux16_module-linux.Tpo -c -o loader/i386/pc/linux16_module-linux.o `test -f 'loader/i386/pc/linux.c' || echo '$(srcdir)/'`loader/i386/pc/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/linux16_module-linux.Tpo loader/i386/pc/$(DEPDIR)/linux16_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/linux.c' object='loader/i386/pc/linux16_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/linux16_module-linux.o `test -f 'loader/i386/pc/linux.c' || echo '$(srcdir)/'`loader/i386/pc/linux.c + +loader/i386/pc/linux16_module-linux.obj: loader/i386/pc/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/linux16_module-linux.obj -MD -MP -MF loader/i386/pc/$(DEPDIR)/linux16_module-linux.Tpo -c -o loader/i386/pc/linux16_module-linux.obj `if test -f 'loader/i386/pc/linux.c'; then $(CYGPATH_W) 'loader/i386/pc/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/linux16_module-linux.Tpo loader/i386/pc/$(DEPDIR)/linux16_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/linux.c' object='loader/i386/pc/linux16_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/linux16_module-linux.obj `if test -f 'loader/i386/pc/linux.c'; then $(CYGPATH_W) 'loader/i386/pc/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/linux.c'; fi` + +loader/linux16_module-linux.o: loader/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -MT loader/linux16_module-linux.o -MD -MP -MF loader/$(DEPDIR)/linux16_module-linux.Tpo -c -o loader/linux16_module-linux.o `test -f 'loader/linux.c' || echo '$(srcdir)/'`loader/linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/linux16_module-linux.Tpo loader/$(DEPDIR)/linux16_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/linux.c' object='loader/linux16_module-linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -c -o loader/linux16_module-linux.o `test -f 'loader/linux.c' || echo '$(srcdir)/'`loader/linux.c + +loader/linux16_module-linux.obj: loader/linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -MT loader/linux16_module-linux.obj -MD -MP -MF loader/$(DEPDIR)/linux16_module-linux.Tpo -c -o loader/linux16_module-linux.obj `if test -f 'loader/linux.c'; then $(CYGPATH_W) 'loader/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/linux16_module-linux.Tpo loader/$(DEPDIR)/linux16_module-linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/linux.c' object='loader/linux16_module-linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -c -o loader/linux16_module-linux.obj `if test -f 'loader/linux.c'; then $(CYGPATH_W) 'loader/linux.c'; else $(CYGPATH_W) '$(srcdir)/loader/linux.c'; fi` + +lib/linux16_module-cmdline.o: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -MT lib/linux16_module-cmdline.o -MD -MP -MF lib/$(DEPDIR)/linux16_module-cmdline.Tpo -c -o lib/linux16_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/linux16_module-cmdline.Tpo lib/$(DEPDIR)/linux16_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/linux16_module-cmdline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -c -o lib/linux16_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c + +lib/linux16_module-cmdline.obj: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -MT lib/linux16_module-cmdline.obj -MD -MP -MF lib/$(DEPDIR)/linux16_module-cmdline.Tpo -c -o lib/linux16_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/linux16_module-cmdline.Tpo lib/$(DEPDIR)/linux16_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/linux16_module-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $(linux16_module_CFLAGS) $(CFLAGS) -c -o lib/linux16_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` + +commands/efi/loadbios_module-loadbios.o: commands/efi/loadbios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $(loadbios_module_CFLAGS) $(CFLAGS) -MT commands/efi/loadbios_module-loadbios.o -MD -MP -MF commands/efi/$(DEPDIR)/loadbios_module-loadbios.Tpo -c -o commands/efi/loadbios_module-loadbios.o `test -f 'commands/efi/loadbios.c' || echo '$(srcdir)/'`commands/efi/loadbios.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/loadbios_module-loadbios.Tpo commands/efi/$(DEPDIR)/loadbios_module-loadbios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/loadbios.c' object='commands/efi/loadbios_module-loadbios.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $(loadbios_module_CFLAGS) $(CFLAGS) -c -o commands/efi/loadbios_module-loadbios.o `test -f 'commands/efi/loadbios.c' || echo '$(srcdir)/'`commands/efi/loadbios.c + +commands/efi/loadbios_module-loadbios.obj: commands/efi/loadbios.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $(loadbios_module_CFLAGS) $(CFLAGS) -MT commands/efi/loadbios_module-loadbios.obj -MD -MP -MF commands/efi/$(DEPDIR)/loadbios_module-loadbios.Tpo -c -o commands/efi/loadbios_module-loadbios.obj `if test -f 'commands/efi/loadbios.c'; then $(CYGPATH_W) 'commands/efi/loadbios.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/loadbios.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/loadbios_module-loadbios.Tpo commands/efi/$(DEPDIR)/loadbios_module-loadbios.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/loadbios.c' object='commands/efi/loadbios_module-loadbios.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $(loadbios_module_CFLAGS) $(CFLAGS) -c -o commands/efi/loadbios_module-loadbios.obj `if test -f 'commands/efi/loadbios.c'; then $(CYGPATH_W) 'commands/efi/loadbios.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/loadbios.c'; fi` + +commands/loadenv_module-loadenv.o: commands/loadenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -MT commands/loadenv_module-loadenv.o -MD -MP -MF commands/$(DEPDIR)/loadenv_module-loadenv.Tpo -c -o commands/loadenv_module-loadenv.o `test -f 'commands/loadenv.c' || echo '$(srcdir)/'`commands/loadenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/loadenv_module-loadenv.Tpo commands/$(DEPDIR)/loadenv_module-loadenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/loadenv.c' object='commands/loadenv_module-loadenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -c -o commands/loadenv_module-loadenv.o `test -f 'commands/loadenv.c' || echo '$(srcdir)/'`commands/loadenv.c + +commands/loadenv_module-loadenv.obj: commands/loadenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -MT commands/loadenv_module-loadenv.obj -MD -MP -MF commands/$(DEPDIR)/loadenv_module-loadenv.Tpo -c -o commands/loadenv_module-loadenv.obj `if test -f 'commands/loadenv.c'; then $(CYGPATH_W) 'commands/loadenv.c'; else $(CYGPATH_W) '$(srcdir)/commands/loadenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/loadenv_module-loadenv.Tpo commands/$(DEPDIR)/loadenv_module-loadenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/loadenv.c' object='commands/loadenv_module-loadenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -c -o commands/loadenv_module-loadenv.obj `if test -f 'commands/loadenv.c'; then $(CYGPATH_W) 'commands/loadenv.c'; else $(CYGPATH_W) '$(srcdir)/commands/loadenv.c'; fi` + +lib/loadenv_module-envblk.o: lib/envblk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -MT lib/loadenv_module-envblk.o -MD -MP -MF lib/$(DEPDIR)/loadenv_module-envblk.Tpo -c -o lib/loadenv_module-envblk.o `test -f 'lib/envblk.c' || echo '$(srcdir)/'`lib/envblk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/loadenv_module-envblk.Tpo lib/$(DEPDIR)/loadenv_module-envblk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/envblk.c' object='lib/loadenv_module-envblk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -c -o lib/loadenv_module-envblk.o `test -f 'lib/envblk.c' || echo '$(srcdir)/'`lib/envblk.c + +lib/loadenv_module-envblk.obj: lib/envblk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -MT lib/loadenv_module-envblk.obj -MD -MP -MF lib/$(DEPDIR)/loadenv_module-envblk.Tpo -c -o lib/loadenv_module-envblk.obj `if test -f 'lib/envblk.c'; then $(CYGPATH_W) 'lib/envblk.c'; else $(CYGPATH_W) '$(srcdir)/lib/envblk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/loadenv_module-envblk.Tpo lib/$(DEPDIR)/loadenv_module-envblk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/envblk.c' object='lib/loadenv_module-envblk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $(loadenv_module_CFLAGS) $(CFLAGS) -c -o lib/loadenv_module-envblk.obj `if test -f 'lib/envblk.c'; then $(CYGPATH_W) 'lib/envblk.c'; else $(CYGPATH_W) '$(srcdir)/lib/envblk.c'; fi` + +disk/loopback_module-loopback.o: disk/loopback.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loopback_module_CPPFLAGS) $(CPPFLAGS) $(loopback_module_CFLAGS) $(CFLAGS) -MT disk/loopback_module-loopback.o -MD -MP -MF disk/$(DEPDIR)/loopback_module-loopback.Tpo -c -o disk/loopback_module-loopback.o `test -f 'disk/loopback.c' || echo '$(srcdir)/'`disk/loopback.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/loopback_module-loopback.Tpo disk/$(DEPDIR)/loopback_module-loopback.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/loopback.c' object='disk/loopback_module-loopback.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loopback_module_CPPFLAGS) $(CPPFLAGS) $(loopback_module_CFLAGS) $(CFLAGS) -c -o disk/loopback_module-loopback.o `test -f 'disk/loopback.c' || echo '$(srcdir)/'`disk/loopback.c + +disk/loopback_module-loopback.obj: disk/loopback.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loopback_module_CPPFLAGS) $(CPPFLAGS) $(loopback_module_CFLAGS) $(CFLAGS) -MT disk/loopback_module-loopback.obj -MD -MP -MF disk/$(DEPDIR)/loopback_module-loopback.Tpo -c -o disk/loopback_module-loopback.obj `if test -f 'disk/loopback.c'; then $(CYGPATH_W) 'disk/loopback.c'; else $(CYGPATH_W) '$(srcdir)/disk/loopback.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/loopback_module-loopback.Tpo disk/$(DEPDIR)/loopback_module-loopback.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/loopback.c' object='disk/loopback_module-loopback.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loopback_module_CPPFLAGS) $(CPPFLAGS) $(loopback_module_CFLAGS) $(CFLAGS) -c -o disk/loopback_module-loopback.obj `if test -f 'disk/loopback.c'; then $(CYGPATH_W) 'disk/loopback.c'; else $(CYGPATH_W) '$(srcdir)/disk/loopback.c'; fi` + +commands/ls_module-ls.o: commands/ls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ls_module_CPPFLAGS) $(CPPFLAGS) $(ls_module_CFLAGS) $(CFLAGS) -MT commands/ls_module-ls.o -MD -MP -MF commands/$(DEPDIR)/ls_module-ls.Tpo -c -o commands/ls_module-ls.o `test -f 'commands/ls.c' || echo '$(srcdir)/'`commands/ls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/ls_module-ls.Tpo commands/$(DEPDIR)/ls_module-ls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/ls.c' object='commands/ls_module-ls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ls_module_CPPFLAGS) $(CPPFLAGS) $(ls_module_CFLAGS) $(CFLAGS) -c -o commands/ls_module-ls.o `test -f 'commands/ls.c' || echo '$(srcdir)/'`commands/ls.c + +commands/ls_module-ls.obj: commands/ls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ls_module_CPPFLAGS) $(CPPFLAGS) $(ls_module_CFLAGS) $(CFLAGS) -MT commands/ls_module-ls.obj -MD -MP -MF commands/$(DEPDIR)/ls_module-ls.Tpo -c -o commands/ls_module-ls.obj `if test -f 'commands/ls.c'; then $(CYGPATH_W) 'commands/ls.c'; else $(CYGPATH_W) '$(srcdir)/commands/ls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/ls_module-ls.Tpo commands/$(DEPDIR)/ls_module-ls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/ls.c' object='commands/ls_module-ls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ls_module_CPPFLAGS) $(CPPFLAGS) $(ls_module_CFLAGS) $(CFLAGS) -c -o commands/ls_module-ls.obj `if test -f 'commands/ls.c'; then $(CYGPATH_W) 'commands/ls.c'; else $(CYGPATH_W) '$(srcdir)/commands/ls.c'; fi` + +commands/lsacpi_module-lsacpi.o: commands/lsacpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $(lsacpi_module_CFLAGS) $(CFLAGS) -MT commands/lsacpi_module-lsacpi.o -MD -MP -MF commands/$(DEPDIR)/lsacpi_module-lsacpi.Tpo -c -o commands/lsacpi_module-lsacpi.o `test -f 'commands/lsacpi.c' || echo '$(srcdir)/'`commands/lsacpi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/lsacpi_module-lsacpi.Tpo commands/$(DEPDIR)/lsacpi_module-lsacpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lsacpi.c' object='commands/lsacpi_module-lsacpi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $(lsacpi_module_CFLAGS) $(CFLAGS) -c -o commands/lsacpi_module-lsacpi.o `test -f 'commands/lsacpi.c' || echo '$(srcdir)/'`commands/lsacpi.c + +commands/lsacpi_module-lsacpi.obj: commands/lsacpi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $(lsacpi_module_CFLAGS) $(CFLAGS) -MT commands/lsacpi_module-lsacpi.obj -MD -MP -MF commands/$(DEPDIR)/lsacpi_module-lsacpi.Tpo -c -o commands/lsacpi_module-lsacpi.obj `if test -f 'commands/lsacpi.c'; then $(CYGPATH_W) 'commands/lsacpi.c'; else $(CYGPATH_W) '$(srcdir)/commands/lsacpi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/lsacpi_module-lsacpi.Tpo commands/$(DEPDIR)/lsacpi_module-lsacpi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lsacpi.c' object='commands/lsacpi_module-lsacpi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $(lsacpi_module_CFLAGS) $(CFLAGS) -c -o commands/lsacpi_module-lsacpi.obj `if test -f 'commands/lsacpi.c'; then $(CYGPATH_W) 'commands/lsacpi.c'; else $(CYGPATH_W) '$(srcdir)/commands/lsacpi.c'; fi` + +commands/i386/pc/lsapm_module-lsapm.o: commands/i386/pc/lsapm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsapm_module_CPPFLAGS) $(CPPFLAGS) $(lsapm_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/lsapm_module-lsapm.o -MD -MP -MF commands/i386/pc/$(DEPDIR)/lsapm_module-lsapm.Tpo -c -o commands/i386/pc/lsapm_module-lsapm.o `test -f 'commands/i386/pc/lsapm.c' || echo '$(srcdir)/'`commands/i386/pc/lsapm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/lsapm_module-lsapm.Tpo commands/i386/pc/$(DEPDIR)/lsapm_module-lsapm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/lsapm.c' object='commands/i386/pc/lsapm_module-lsapm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsapm_module_CPPFLAGS) $(CPPFLAGS) $(lsapm_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/lsapm_module-lsapm.o `test -f 'commands/i386/pc/lsapm.c' || echo '$(srcdir)/'`commands/i386/pc/lsapm.c + +commands/i386/pc/lsapm_module-lsapm.obj: commands/i386/pc/lsapm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsapm_module_CPPFLAGS) $(CPPFLAGS) $(lsapm_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/lsapm_module-lsapm.obj -MD -MP -MF commands/i386/pc/$(DEPDIR)/lsapm_module-lsapm.Tpo -c -o commands/i386/pc/lsapm_module-lsapm.obj `if test -f 'commands/i386/pc/lsapm.c'; then $(CYGPATH_W) 'commands/i386/pc/lsapm.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/lsapm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/lsapm_module-lsapm.Tpo commands/i386/pc/$(DEPDIR)/lsapm_module-lsapm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/lsapm.c' object='commands/i386/pc/lsapm_module-lsapm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsapm_module_CPPFLAGS) $(CPPFLAGS) $(lsapm_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/lsapm_module-lsapm.obj `if test -f 'commands/i386/pc/lsapm.c'; then $(CYGPATH_W) 'commands/i386/pc/lsapm.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/lsapm.c'; fi` + +commands/arc/lsdev_module-lsdev.o: commands/arc/lsdev.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsdev_module_CPPFLAGS) $(CPPFLAGS) $(lsdev_module_CFLAGS) $(CFLAGS) -MT commands/arc/lsdev_module-lsdev.o -MD -MP -MF commands/arc/$(DEPDIR)/lsdev_module-lsdev.Tpo -c -o commands/arc/lsdev_module-lsdev.o `test -f 'commands/arc/lsdev.c' || echo '$(srcdir)/'`commands/arc/lsdev.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/arc/$(DEPDIR)/lsdev_module-lsdev.Tpo commands/arc/$(DEPDIR)/lsdev_module-lsdev.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/arc/lsdev.c' object='commands/arc/lsdev_module-lsdev.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsdev_module_CPPFLAGS) $(CPPFLAGS) $(lsdev_module_CFLAGS) $(CFLAGS) -c -o commands/arc/lsdev_module-lsdev.o `test -f 'commands/arc/lsdev.c' || echo '$(srcdir)/'`commands/arc/lsdev.c + +commands/arc/lsdev_module-lsdev.obj: commands/arc/lsdev.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsdev_module_CPPFLAGS) $(CPPFLAGS) $(lsdev_module_CFLAGS) $(CFLAGS) -MT commands/arc/lsdev_module-lsdev.obj -MD -MP -MF commands/arc/$(DEPDIR)/lsdev_module-lsdev.Tpo -c -o commands/arc/lsdev_module-lsdev.obj `if test -f 'commands/arc/lsdev.c'; then $(CYGPATH_W) 'commands/arc/lsdev.c'; else $(CYGPATH_W) '$(srcdir)/commands/arc/lsdev.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/arc/$(DEPDIR)/lsdev_module-lsdev.Tpo commands/arc/$(DEPDIR)/lsdev_module-lsdev.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/arc/lsdev.c' object='commands/arc/lsdev_module-lsdev.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsdev_module_CPPFLAGS) $(CPPFLAGS) $(lsdev_module_CFLAGS) $(CFLAGS) -c -o commands/arc/lsdev_module-lsdev.obj `if test -f 'commands/arc/lsdev.c'; then $(CYGPATH_W) 'commands/arc/lsdev.c'; else $(CYGPATH_W) '$(srcdir)/commands/arc/lsdev.c'; fi` + +commands/efi/lsefi_module-lsefi.o: commands/efi/lsefi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $(lsefi_module_CFLAGS) $(CFLAGS) -MT commands/efi/lsefi_module-lsefi.o -MD -MP -MF commands/efi/$(DEPDIR)/lsefi_module-lsefi.Tpo -c -o commands/efi/lsefi_module-lsefi.o `test -f 'commands/efi/lsefi.c' || echo '$(srcdir)/'`commands/efi/lsefi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lsefi_module-lsefi.Tpo commands/efi/$(DEPDIR)/lsefi_module-lsefi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lsefi.c' object='commands/efi/lsefi_module-lsefi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $(lsefi_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lsefi_module-lsefi.o `test -f 'commands/efi/lsefi.c' || echo '$(srcdir)/'`commands/efi/lsefi.c + +commands/efi/lsefi_module-lsefi.obj: commands/efi/lsefi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $(lsefi_module_CFLAGS) $(CFLAGS) -MT commands/efi/lsefi_module-lsefi.obj -MD -MP -MF commands/efi/$(DEPDIR)/lsefi_module-lsefi.Tpo -c -o commands/efi/lsefi_module-lsefi.obj `if test -f 'commands/efi/lsefi.c'; then $(CYGPATH_W) 'commands/efi/lsefi.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lsefi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lsefi_module-lsefi.Tpo commands/efi/$(DEPDIR)/lsefi_module-lsefi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lsefi.c' object='commands/efi/lsefi_module-lsefi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $(lsefi_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lsefi_module-lsefi.obj `if test -f 'commands/efi/lsefi.c'; then $(CYGPATH_W) 'commands/efi/lsefi.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lsefi.c'; fi` + +commands/efi/lsefimmap_module-lsefimmap.o: commands/efi/lsefimmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $(lsefimmap_module_CFLAGS) $(CFLAGS) -MT commands/efi/lsefimmap_module-lsefimmap.o -MD -MP -MF commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Tpo -c -o commands/efi/lsefimmap_module-lsefimmap.o `test -f 'commands/efi/lsefimmap.c' || echo '$(srcdir)/'`commands/efi/lsefimmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Tpo commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lsefimmap.c' object='commands/efi/lsefimmap_module-lsefimmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $(lsefimmap_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lsefimmap_module-lsefimmap.o `test -f 'commands/efi/lsefimmap.c' || echo '$(srcdir)/'`commands/efi/lsefimmap.c + +commands/efi/lsefimmap_module-lsefimmap.obj: commands/efi/lsefimmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $(lsefimmap_module_CFLAGS) $(CFLAGS) -MT commands/efi/lsefimmap_module-lsefimmap.obj -MD -MP -MF commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Tpo -c -o commands/efi/lsefimmap_module-lsefimmap.obj `if test -f 'commands/efi/lsefimmap.c'; then $(CYGPATH_W) 'commands/efi/lsefimmap.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lsefimmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Tpo commands/efi/$(DEPDIR)/lsefimmap_module-lsefimmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lsefimmap.c' object='commands/efi/lsefimmap_module-lsefimmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $(lsefimmap_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lsefimmap_module-lsefimmap.obj `if test -f 'commands/efi/lsefimmap.c'; then $(CYGPATH_W) 'commands/efi/lsefimmap.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lsefimmap.c'; fi` + +commands/efi/lsefisystab_module-lsefisystab.o: commands/efi/lsefisystab.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $(lsefisystab_module_CFLAGS) $(CFLAGS) -MT commands/efi/lsefisystab_module-lsefisystab.o -MD -MP -MF commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Tpo -c -o commands/efi/lsefisystab_module-lsefisystab.o `test -f 'commands/efi/lsefisystab.c' || echo '$(srcdir)/'`commands/efi/lsefisystab.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Tpo commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lsefisystab.c' object='commands/efi/lsefisystab_module-lsefisystab.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $(lsefisystab_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lsefisystab_module-lsefisystab.o `test -f 'commands/efi/lsefisystab.c' || echo '$(srcdir)/'`commands/efi/lsefisystab.c + +commands/efi/lsefisystab_module-lsefisystab.obj: commands/efi/lsefisystab.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $(lsefisystab_module_CFLAGS) $(CFLAGS) -MT commands/efi/lsefisystab_module-lsefisystab.obj -MD -MP -MF commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Tpo -c -o commands/efi/lsefisystab_module-lsefisystab.obj `if test -f 'commands/efi/lsefisystab.c'; then $(CYGPATH_W) 'commands/efi/lsefisystab.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lsefisystab.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Tpo commands/efi/$(DEPDIR)/lsefisystab_module-lsefisystab.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lsefisystab.c' object='commands/efi/lsefisystab_module-lsefisystab.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $(lsefisystab_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lsefisystab_module-lsefisystab.obj `if test -f 'commands/efi/lsefisystab.c'; then $(CYGPATH_W) 'commands/efi/lsefisystab.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lsefisystab.c'; fi` + +commands/lsmmap_module-lsmmap.o: commands/lsmmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsmmap_module_CPPFLAGS) $(CPPFLAGS) $(lsmmap_module_CFLAGS) $(CFLAGS) -MT commands/lsmmap_module-lsmmap.o -MD -MP -MF commands/$(DEPDIR)/lsmmap_module-lsmmap.Tpo -c -o commands/lsmmap_module-lsmmap.o `test -f 'commands/lsmmap.c' || echo '$(srcdir)/'`commands/lsmmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/lsmmap_module-lsmmap.Tpo commands/$(DEPDIR)/lsmmap_module-lsmmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lsmmap.c' object='commands/lsmmap_module-lsmmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsmmap_module_CPPFLAGS) $(CPPFLAGS) $(lsmmap_module_CFLAGS) $(CFLAGS) -c -o commands/lsmmap_module-lsmmap.o `test -f 'commands/lsmmap.c' || echo '$(srcdir)/'`commands/lsmmap.c + +commands/lsmmap_module-lsmmap.obj: commands/lsmmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsmmap_module_CPPFLAGS) $(CPPFLAGS) $(lsmmap_module_CFLAGS) $(CFLAGS) -MT commands/lsmmap_module-lsmmap.obj -MD -MP -MF commands/$(DEPDIR)/lsmmap_module-lsmmap.Tpo -c -o commands/lsmmap_module-lsmmap.obj `if test -f 'commands/lsmmap.c'; then $(CYGPATH_W) 'commands/lsmmap.c'; else $(CYGPATH_W) '$(srcdir)/commands/lsmmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/lsmmap_module-lsmmap.Tpo commands/$(DEPDIR)/lsmmap_module-lsmmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lsmmap.c' object='commands/lsmmap_module-lsmmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsmmap_module_CPPFLAGS) $(CPPFLAGS) $(lsmmap_module_CFLAGS) $(CFLAGS) -c -o commands/lsmmap_module-lsmmap.obj `if test -f 'commands/lsmmap.c'; then $(CYGPATH_W) 'commands/lsmmap.c'; else $(CYGPATH_W) '$(srcdir)/commands/lsmmap.c'; fi` + +commands/lspci_module-lspci.o: commands/lspci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $(lspci_module_CFLAGS) $(CFLAGS) -MT commands/lspci_module-lspci.o -MD -MP -MF commands/$(DEPDIR)/lspci_module-lspci.Tpo -c -o commands/lspci_module-lspci.o `test -f 'commands/lspci.c' || echo '$(srcdir)/'`commands/lspci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/lspci_module-lspci.Tpo commands/$(DEPDIR)/lspci_module-lspci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lspci.c' object='commands/lspci_module-lspci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $(lspci_module_CFLAGS) $(CFLAGS) -c -o commands/lspci_module-lspci.o `test -f 'commands/lspci.c' || echo '$(srcdir)/'`commands/lspci.c + +commands/lspci_module-lspci.obj: commands/lspci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $(lspci_module_CFLAGS) $(CFLAGS) -MT commands/lspci_module-lspci.obj -MD -MP -MF commands/$(DEPDIR)/lspci_module-lspci.Tpo -c -o commands/lspci_module-lspci.obj `if test -f 'commands/lspci.c'; then $(CYGPATH_W) 'commands/lspci.c'; else $(CYGPATH_W) '$(srcdir)/commands/lspci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/lspci_module-lspci.Tpo commands/$(DEPDIR)/lspci_module-lspci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/lspci.c' object='commands/lspci_module-lspci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $(lspci_module_CFLAGS) $(CFLAGS) -c -o commands/lspci_module-lspci.obj `if test -f 'commands/lspci.c'; then $(CYGPATH_W) 'commands/lspci.c'; else $(CYGPATH_W) '$(srcdir)/commands/lspci.c'; fi` + +commands/efi/lssal_module-lssal.o: commands/efi/lssal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $(lssal_module_CFLAGS) $(CFLAGS) -MT commands/efi/lssal_module-lssal.o -MD -MP -MF commands/efi/$(DEPDIR)/lssal_module-lssal.Tpo -c -o commands/efi/lssal_module-lssal.o `test -f 'commands/efi/lssal.c' || echo '$(srcdir)/'`commands/efi/lssal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lssal_module-lssal.Tpo commands/efi/$(DEPDIR)/lssal_module-lssal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lssal.c' object='commands/efi/lssal_module-lssal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $(lssal_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lssal_module-lssal.o `test -f 'commands/efi/lssal.c' || echo '$(srcdir)/'`commands/efi/lssal.c + +commands/efi/lssal_module-lssal.obj: commands/efi/lssal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $(lssal_module_CFLAGS) $(CFLAGS) -MT commands/efi/lssal_module-lssal.obj -MD -MP -MF commands/efi/$(DEPDIR)/lssal_module-lssal.Tpo -c -o commands/efi/lssal_module-lssal.obj `if test -f 'commands/efi/lssal.c'; then $(CYGPATH_W) 'commands/efi/lssal.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lssal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/efi/$(DEPDIR)/lssal_module-lssal.Tpo commands/efi/$(DEPDIR)/lssal_module-lssal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/efi/lssal.c' object='commands/efi/lssal_module-lssal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $(lssal_module_CFLAGS) $(CFLAGS) -c -o commands/efi/lssal_module-lssal.obj `if test -f 'commands/efi/lssal.c'; then $(CYGPATH_W) 'commands/efi/lssal.c'; else $(CYGPATH_W) '$(srcdir)/commands/efi/lssal.c'; fi` + +commands/mips/loongson/lsspd_module-lsspd.o: commands/mips/loongson/lsspd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsspd_module_CPPFLAGS) $(CPPFLAGS) $(lsspd_module_CFLAGS) $(CFLAGS) -MT commands/mips/loongson/lsspd_module-lsspd.o -MD -MP -MF commands/mips/loongson/$(DEPDIR)/lsspd_module-lsspd.Tpo -c -o commands/mips/loongson/lsspd_module-lsspd.o `test -f 'commands/mips/loongson/lsspd.c' || echo '$(srcdir)/'`commands/mips/loongson/lsspd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/mips/loongson/$(DEPDIR)/lsspd_module-lsspd.Tpo commands/mips/loongson/$(DEPDIR)/lsspd_module-lsspd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/mips/loongson/lsspd.c' object='commands/mips/loongson/lsspd_module-lsspd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsspd_module_CPPFLAGS) $(CPPFLAGS) $(lsspd_module_CFLAGS) $(CFLAGS) -c -o commands/mips/loongson/lsspd_module-lsspd.o `test -f 'commands/mips/loongson/lsspd.c' || echo '$(srcdir)/'`commands/mips/loongson/lsspd.c + +commands/mips/loongson/lsspd_module-lsspd.obj: commands/mips/loongson/lsspd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsspd_module_CPPFLAGS) $(CPPFLAGS) $(lsspd_module_CFLAGS) $(CFLAGS) -MT commands/mips/loongson/lsspd_module-lsspd.obj -MD -MP -MF commands/mips/loongson/$(DEPDIR)/lsspd_module-lsspd.Tpo -c -o commands/mips/loongson/lsspd_module-lsspd.obj `if test -f 'commands/mips/loongson/lsspd.c'; then $(CYGPATH_W) 'commands/mips/loongson/lsspd.c'; else $(CYGPATH_W) '$(srcdir)/commands/mips/loongson/lsspd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/mips/loongson/$(DEPDIR)/lsspd_module-lsspd.Tpo commands/mips/loongson/$(DEPDIR)/lsspd_module-lsspd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/mips/loongson/lsspd.c' object='commands/mips/loongson/lsspd_module-lsspd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsspd_module_CPPFLAGS) $(CPPFLAGS) $(lsspd_module_CFLAGS) $(CFLAGS) -c -o commands/mips/loongson/lsspd_module-lsspd.obj `if test -f 'commands/mips/loongson/lsspd.c'; then $(CYGPATH_W) 'commands/mips/loongson/lsspd.c'; else $(CYGPATH_W) '$(srcdir)/commands/mips/loongson/lsspd.c'; fi` + +commands/xen/lsxen_module-lsxen.o: commands/xen/lsxen.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $(lsxen_module_CFLAGS) $(CFLAGS) -MT commands/xen/lsxen_module-lsxen.o -MD -MP -MF commands/xen/$(DEPDIR)/lsxen_module-lsxen.Tpo -c -o commands/xen/lsxen_module-lsxen.o `test -f 'commands/xen/lsxen.c' || echo '$(srcdir)/'`commands/xen/lsxen.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/xen/$(DEPDIR)/lsxen_module-lsxen.Tpo commands/xen/$(DEPDIR)/lsxen_module-lsxen.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/xen/lsxen.c' object='commands/xen/lsxen_module-lsxen.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $(lsxen_module_CFLAGS) $(CFLAGS) -c -o commands/xen/lsxen_module-lsxen.o `test -f 'commands/xen/lsxen.c' || echo '$(srcdir)/'`commands/xen/lsxen.c + +commands/xen/lsxen_module-lsxen.obj: commands/xen/lsxen.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $(lsxen_module_CFLAGS) $(CFLAGS) -MT commands/xen/lsxen_module-lsxen.obj -MD -MP -MF commands/xen/$(DEPDIR)/lsxen_module-lsxen.Tpo -c -o commands/xen/lsxen_module-lsxen.obj `if test -f 'commands/xen/lsxen.c'; then $(CYGPATH_W) 'commands/xen/lsxen.c'; else $(CYGPATH_W) '$(srcdir)/commands/xen/lsxen.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/xen/$(DEPDIR)/lsxen_module-lsxen.Tpo commands/xen/$(DEPDIR)/lsxen_module-lsxen.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/xen/lsxen.c' object='commands/xen/lsxen_module-lsxen.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $(lsxen_module_CFLAGS) $(CFLAGS) -c -o commands/xen/lsxen_module-lsxen.obj `if test -f 'commands/xen/lsxen.c'; then $(CYGPATH_W) 'commands/xen/lsxen.c'; else $(CYGPATH_W) '$(srcdir)/commands/xen/lsxen.c'; fi` + +disk/luks_module-luks.o: disk/luks.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -MT disk/luks_module-luks.o -MD -MP -MF disk/$(DEPDIR)/luks_module-luks.Tpo -c -o disk/luks_module-luks.o `test -f 'disk/luks.c' || echo '$(srcdir)/'`disk/luks.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/luks_module-luks.Tpo disk/$(DEPDIR)/luks_module-luks.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/luks.c' object='disk/luks_module-luks.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -c -o disk/luks_module-luks.o `test -f 'disk/luks.c' || echo '$(srcdir)/'`disk/luks.c + +disk/luks_module-luks.obj: disk/luks.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -MT disk/luks_module-luks.obj -MD -MP -MF disk/$(DEPDIR)/luks_module-luks.Tpo -c -o disk/luks_module-luks.obj `if test -f 'disk/luks.c'; then $(CYGPATH_W) 'disk/luks.c'; else $(CYGPATH_W) '$(srcdir)/disk/luks.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/luks_module-luks.Tpo disk/$(DEPDIR)/luks_module-luks.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/luks.c' object='disk/luks_module-luks.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -c -o disk/luks_module-luks.obj `if test -f 'disk/luks.c'; then $(CYGPATH_W) 'disk/luks.c'; else $(CYGPATH_W) '$(srcdir)/disk/luks.c'; fi` + +disk/luks_module-AFSplitter.o: disk/AFSplitter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -MT disk/luks_module-AFSplitter.o -MD -MP -MF disk/$(DEPDIR)/luks_module-AFSplitter.Tpo -c -o disk/luks_module-AFSplitter.o `test -f 'disk/AFSplitter.c' || echo '$(srcdir)/'`disk/AFSplitter.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/luks_module-AFSplitter.Tpo disk/$(DEPDIR)/luks_module-AFSplitter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/AFSplitter.c' object='disk/luks_module-AFSplitter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -c -o disk/luks_module-AFSplitter.o `test -f 'disk/AFSplitter.c' || echo '$(srcdir)/'`disk/AFSplitter.c + +disk/luks_module-AFSplitter.obj: disk/AFSplitter.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -MT disk/luks_module-AFSplitter.obj -MD -MP -MF disk/$(DEPDIR)/luks_module-AFSplitter.Tpo -c -o disk/luks_module-AFSplitter.obj `if test -f 'disk/AFSplitter.c'; then $(CYGPATH_W) 'disk/AFSplitter.c'; else $(CYGPATH_W) '$(srcdir)/disk/AFSplitter.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/luks_module-AFSplitter.Tpo disk/$(DEPDIR)/luks_module-AFSplitter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/AFSplitter.c' object='disk/luks_module-AFSplitter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $(luks_module_CFLAGS) $(CFLAGS) -c -o disk/luks_module-AFSplitter.obj `if test -f 'disk/AFSplitter.c'; then $(CYGPATH_W) 'disk/AFSplitter.c'; else $(CYGPATH_W) '$(srcdir)/disk/AFSplitter.c'; fi` + +disk/lvm_module-lvm.o: disk/lvm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lvm_module_CPPFLAGS) $(CPPFLAGS) $(lvm_module_CFLAGS) $(CFLAGS) -MT disk/lvm_module-lvm.o -MD -MP -MF disk/$(DEPDIR)/lvm_module-lvm.Tpo -c -o disk/lvm_module-lvm.o `test -f 'disk/lvm.c' || echo '$(srcdir)/'`disk/lvm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/lvm_module-lvm.Tpo disk/$(DEPDIR)/lvm_module-lvm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/lvm.c' object='disk/lvm_module-lvm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lvm_module_CPPFLAGS) $(CPPFLAGS) $(lvm_module_CFLAGS) $(CFLAGS) -c -o disk/lvm_module-lvm.o `test -f 'disk/lvm.c' || echo '$(srcdir)/'`disk/lvm.c + +disk/lvm_module-lvm.obj: disk/lvm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lvm_module_CPPFLAGS) $(CPPFLAGS) $(lvm_module_CFLAGS) $(CFLAGS) -MT disk/lvm_module-lvm.obj -MD -MP -MF disk/$(DEPDIR)/lvm_module-lvm.Tpo -c -o disk/lvm_module-lvm.obj `if test -f 'disk/lvm.c'; then $(CYGPATH_W) 'disk/lvm.c'; else $(CYGPATH_W) '$(srcdir)/disk/lvm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/lvm_module-lvm.Tpo disk/$(DEPDIR)/lvm_module-lvm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/lvm.c' object='disk/lvm_module-lvm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lvm_module_CPPFLAGS) $(CPPFLAGS) $(lvm_module_CFLAGS) $(CFLAGS) -c -o disk/lvm_module-lvm.obj `if test -f 'disk/lvm.c'; then $(CYGPATH_W) 'disk/lvm.c'; else $(CYGPATH_W) '$(srcdir)/disk/lvm.c'; fi` + +io/lzopio_module-lzopio.o: io/lzopio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -MT io/lzopio_module-lzopio.o -MD -MP -MF io/$(DEPDIR)/lzopio_module-lzopio.Tpo -c -o io/lzopio_module-lzopio.o `test -f 'io/lzopio.c' || echo '$(srcdir)/'`io/lzopio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/lzopio_module-lzopio.Tpo io/$(DEPDIR)/lzopio_module-lzopio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/lzopio.c' object='io/lzopio_module-lzopio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -c -o io/lzopio_module-lzopio.o `test -f 'io/lzopio.c' || echo '$(srcdir)/'`io/lzopio.c + +io/lzopio_module-lzopio.obj: io/lzopio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -MT io/lzopio_module-lzopio.obj -MD -MP -MF io/$(DEPDIR)/lzopio_module-lzopio.Tpo -c -o io/lzopio_module-lzopio.obj `if test -f 'io/lzopio.c'; then $(CYGPATH_W) 'io/lzopio.c'; else $(CYGPATH_W) '$(srcdir)/io/lzopio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/lzopio_module-lzopio.Tpo io/$(DEPDIR)/lzopio_module-lzopio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/lzopio.c' object='io/lzopio_module-lzopio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -c -o io/lzopio_module-lzopio.obj `if test -f 'io/lzopio.c'; then $(CYGPATH_W) 'io/lzopio.c'; else $(CYGPATH_W) '$(srcdir)/io/lzopio.c'; fi` + +lib/minilzo/lzopio_module-minilzo.o: lib/minilzo/minilzo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -MT lib/minilzo/lzopio_module-minilzo.o -MD -MP -MF lib/minilzo/$(DEPDIR)/lzopio_module-minilzo.Tpo -c -o lib/minilzo/lzopio_module-minilzo.o `test -f 'lib/minilzo/minilzo.c' || echo '$(srcdir)/'`lib/minilzo/minilzo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/minilzo/$(DEPDIR)/lzopio_module-minilzo.Tpo lib/minilzo/$(DEPDIR)/lzopio_module-minilzo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/minilzo/minilzo.c' object='lib/minilzo/lzopio_module-minilzo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -c -o lib/minilzo/lzopio_module-minilzo.o `test -f 'lib/minilzo/minilzo.c' || echo '$(srcdir)/'`lib/minilzo/minilzo.c + +lib/minilzo/lzopio_module-minilzo.obj: lib/minilzo/minilzo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -MT lib/minilzo/lzopio_module-minilzo.obj -MD -MP -MF lib/minilzo/$(DEPDIR)/lzopio_module-minilzo.Tpo -c -o lib/minilzo/lzopio_module-minilzo.obj `if test -f 'lib/minilzo/minilzo.c'; then $(CYGPATH_W) 'lib/minilzo/minilzo.c'; else $(CYGPATH_W) '$(srcdir)/lib/minilzo/minilzo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/minilzo/$(DEPDIR)/lzopio_module-minilzo.Tpo lib/minilzo/$(DEPDIR)/lzopio_module-minilzo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/minilzo/minilzo.c' object='lib/minilzo/lzopio_module-minilzo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $(lzopio_module_CFLAGS) $(CFLAGS) -c -o lib/minilzo/lzopio_module-minilzo.obj `if test -f 'lib/minilzo/minilzo.c'; then $(CYGPATH_W) 'lib/minilzo/minilzo.c'; else $(CYGPATH_W) '$(srcdir)/lib/minilzo/minilzo.c'; fi` + +commands/macbless_module-macbless.o: commands/macbless.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macbless_module_CPPFLAGS) $(CPPFLAGS) $(macbless_module_CFLAGS) $(CFLAGS) -MT commands/macbless_module-macbless.o -MD -MP -MF commands/$(DEPDIR)/macbless_module-macbless.Tpo -c -o commands/macbless_module-macbless.o `test -f 'commands/macbless.c' || echo '$(srcdir)/'`commands/macbless.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/macbless_module-macbless.Tpo commands/$(DEPDIR)/macbless_module-macbless.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/macbless.c' object='commands/macbless_module-macbless.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macbless_module_CPPFLAGS) $(CPPFLAGS) $(macbless_module_CFLAGS) $(CFLAGS) -c -o commands/macbless_module-macbless.o `test -f 'commands/macbless.c' || echo '$(srcdir)/'`commands/macbless.c + +commands/macbless_module-macbless.obj: commands/macbless.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macbless_module_CPPFLAGS) $(CPPFLAGS) $(macbless_module_CFLAGS) $(CFLAGS) -MT commands/macbless_module-macbless.obj -MD -MP -MF commands/$(DEPDIR)/macbless_module-macbless.Tpo -c -o commands/macbless_module-macbless.obj `if test -f 'commands/macbless.c'; then $(CYGPATH_W) 'commands/macbless.c'; else $(CYGPATH_W) '$(srcdir)/commands/macbless.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/macbless_module-macbless.Tpo commands/$(DEPDIR)/macbless_module-macbless.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/macbless.c' object='commands/macbless_module-macbless.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macbless_module_CPPFLAGS) $(CPPFLAGS) $(macbless_module_CFLAGS) $(CFLAGS) -c -o commands/macbless_module-macbless.obj `if test -f 'commands/macbless.c'; then $(CYGPATH_W) 'commands/macbless.c'; else $(CYGPATH_W) '$(srcdir)/commands/macbless.c'; fi` + +loader/macho_module-macho.o: loader/macho.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-macho.o -MD -MP -MF loader/$(DEPDIR)/macho_module-macho.Tpo -c -o loader/macho_module-macho.o `test -f 'loader/macho.c' || echo '$(srcdir)/'`loader/macho.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-macho.Tpo loader/$(DEPDIR)/macho_module-macho.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/macho.c' object='loader/macho_module-macho.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-macho.o `test -f 'loader/macho.c' || echo '$(srcdir)/'`loader/macho.c + +loader/macho_module-macho.obj: loader/macho.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-macho.obj -MD -MP -MF loader/$(DEPDIR)/macho_module-macho.Tpo -c -o loader/macho_module-macho.obj `if test -f 'loader/macho.c'; then $(CYGPATH_W) 'loader/macho.c'; else $(CYGPATH_W) '$(srcdir)/loader/macho.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-macho.Tpo loader/$(DEPDIR)/macho_module-macho.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/macho.c' object='loader/macho_module-macho.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-macho.obj `if test -f 'loader/macho.c'; then $(CYGPATH_W) 'loader/macho.c'; else $(CYGPATH_W) '$(srcdir)/loader/macho.c'; fi` + +loader/macho_module-macho32.o: loader/macho32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-macho32.o -MD -MP -MF loader/$(DEPDIR)/macho_module-macho32.Tpo -c -o loader/macho_module-macho32.o `test -f 'loader/macho32.c' || echo '$(srcdir)/'`loader/macho32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-macho32.Tpo loader/$(DEPDIR)/macho_module-macho32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/macho32.c' object='loader/macho_module-macho32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-macho32.o `test -f 'loader/macho32.c' || echo '$(srcdir)/'`loader/macho32.c + +loader/macho_module-macho32.obj: loader/macho32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-macho32.obj -MD -MP -MF loader/$(DEPDIR)/macho_module-macho32.Tpo -c -o loader/macho_module-macho32.obj `if test -f 'loader/macho32.c'; then $(CYGPATH_W) 'loader/macho32.c'; else $(CYGPATH_W) '$(srcdir)/loader/macho32.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-macho32.Tpo loader/$(DEPDIR)/macho_module-macho32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/macho32.c' object='loader/macho_module-macho32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-macho32.obj `if test -f 'loader/macho32.c'; then $(CYGPATH_W) 'loader/macho32.c'; else $(CYGPATH_W) '$(srcdir)/loader/macho32.c'; fi` + +loader/macho_module-macho64.o: loader/macho64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-macho64.o -MD -MP -MF loader/$(DEPDIR)/macho_module-macho64.Tpo -c -o loader/macho_module-macho64.o `test -f 'loader/macho64.c' || echo '$(srcdir)/'`loader/macho64.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-macho64.Tpo loader/$(DEPDIR)/macho_module-macho64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/macho64.c' object='loader/macho_module-macho64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-macho64.o `test -f 'loader/macho64.c' || echo '$(srcdir)/'`loader/macho64.c + +loader/macho_module-macho64.obj: loader/macho64.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-macho64.obj -MD -MP -MF loader/$(DEPDIR)/macho_module-macho64.Tpo -c -o loader/macho_module-macho64.obj `if test -f 'loader/macho64.c'; then $(CYGPATH_W) 'loader/macho64.c'; else $(CYGPATH_W) '$(srcdir)/loader/macho64.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-macho64.Tpo loader/$(DEPDIR)/macho_module-macho64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/macho64.c' object='loader/macho_module-macho64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-macho64.obj `if test -f 'loader/macho64.c'; then $(CYGPATH_W) 'loader/macho64.c'; else $(CYGPATH_W) '$(srcdir)/loader/macho64.c'; fi` + +loader/macho_module-lzss.o: loader/lzss.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-lzss.o -MD -MP -MF loader/$(DEPDIR)/macho_module-lzss.Tpo -c -o loader/macho_module-lzss.o `test -f 'loader/lzss.c' || echo '$(srcdir)/'`loader/lzss.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-lzss.Tpo loader/$(DEPDIR)/macho_module-lzss.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/lzss.c' object='loader/macho_module-lzss.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-lzss.o `test -f 'loader/lzss.c' || echo '$(srcdir)/'`loader/lzss.c + +loader/macho_module-lzss.obj: loader/lzss.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -MT loader/macho_module-lzss.obj -MD -MP -MF loader/$(DEPDIR)/macho_module-lzss.Tpo -c -o loader/macho_module-lzss.obj `if test -f 'loader/lzss.c'; then $(CYGPATH_W) 'loader/lzss.c'; else $(CYGPATH_W) '$(srcdir)/loader/lzss.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/macho_module-lzss.Tpo loader/$(DEPDIR)/macho_module-lzss.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/lzss.c' object='loader/macho_module-lzss.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $(macho_module_CFLAGS) $(CFLAGS) -c -o loader/macho_module-lzss.obj `if test -f 'loader/lzss.c'; then $(CYGPATH_W) 'loader/lzss.c'; else $(CYGPATH_W) '$(srcdir)/loader/lzss.c'; fi` + +term/i386/pc/mda_text_module-mda_text.o: term/i386/pc/mda_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $(mda_text_module_CFLAGS) $(CFLAGS) -MT term/i386/pc/mda_text_module-mda_text.o -MD -MP -MF term/i386/pc/$(DEPDIR)/mda_text_module-mda_text.Tpo -c -o term/i386/pc/mda_text_module-mda_text.o `test -f 'term/i386/pc/mda_text.c' || echo '$(srcdir)/'`term/i386/pc/mda_text.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/mda_text_module-mda_text.Tpo term/i386/pc/$(DEPDIR)/mda_text_module-mda_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/mda_text.c' object='term/i386/pc/mda_text_module-mda_text.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $(mda_text_module_CFLAGS) $(CFLAGS) -c -o term/i386/pc/mda_text_module-mda_text.o `test -f 'term/i386/pc/mda_text.c' || echo '$(srcdir)/'`term/i386/pc/mda_text.c + +term/i386/pc/mda_text_module-mda_text.obj: term/i386/pc/mda_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $(mda_text_module_CFLAGS) $(CFLAGS) -MT term/i386/pc/mda_text_module-mda_text.obj -MD -MP -MF term/i386/pc/$(DEPDIR)/mda_text_module-mda_text.Tpo -c -o term/i386/pc/mda_text_module-mda_text.obj `if test -f 'term/i386/pc/mda_text.c'; then $(CYGPATH_W) 'term/i386/pc/mda_text.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/mda_text.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/mda_text_module-mda_text.Tpo term/i386/pc/$(DEPDIR)/mda_text_module-mda_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/mda_text.c' object='term/i386/pc/mda_text_module-mda_text.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $(mda_text_module_CFLAGS) $(CFLAGS) -c -o term/i386/pc/mda_text_module-mda_text.obj `if test -f 'term/i386/pc/mda_text.c'; then $(CYGPATH_W) 'term/i386/pc/mda_text.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/mda_text.c'; fi` + +disk/mdraid09_module-mdraid_linux.o: disk/mdraid_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_module_CFLAGS) $(CFLAGS) -MT disk/mdraid09_module-mdraid_linux.o -MD -MP -MF disk/$(DEPDIR)/mdraid09_module-mdraid_linux.Tpo -c -o disk/mdraid09_module-mdraid_linux.o `test -f 'disk/mdraid_linux.c' || echo '$(srcdir)/'`disk/mdraid_linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/mdraid09_module-mdraid_linux.Tpo disk/$(DEPDIR)/mdraid09_module-mdraid_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/mdraid_linux.c' object='disk/mdraid09_module-mdraid_linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_module_CFLAGS) $(CFLAGS) -c -o disk/mdraid09_module-mdraid_linux.o `test -f 'disk/mdraid_linux.c' || echo '$(srcdir)/'`disk/mdraid_linux.c + +disk/mdraid09_module-mdraid_linux.obj: disk/mdraid_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_module_CFLAGS) $(CFLAGS) -MT disk/mdraid09_module-mdraid_linux.obj -MD -MP -MF disk/$(DEPDIR)/mdraid09_module-mdraid_linux.Tpo -c -o disk/mdraid09_module-mdraid_linux.obj `if test -f 'disk/mdraid_linux.c'; then $(CYGPATH_W) 'disk/mdraid_linux.c'; else $(CYGPATH_W) '$(srcdir)/disk/mdraid_linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/mdraid09_module-mdraid_linux.Tpo disk/$(DEPDIR)/mdraid09_module-mdraid_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/mdraid_linux.c' object='disk/mdraid09_module-mdraid_linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_module_CFLAGS) $(CFLAGS) -c -o disk/mdraid09_module-mdraid_linux.obj `if test -f 'disk/mdraid_linux.c'; then $(CYGPATH_W) 'disk/mdraid_linux.c'; else $(CYGPATH_W) '$(srcdir)/disk/mdraid_linux.c'; fi` + +disk/mdraid09_be_module-mdraid_linux_be.o: disk/mdraid_linux_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_be_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_be_module_CFLAGS) $(CFLAGS) -MT disk/mdraid09_be_module-mdraid_linux_be.o -MD -MP -MF disk/$(DEPDIR)/mdraid09_be_module-mdraid_linux_be.Tpo -c -o disk/mdraid09_be_module-mdraid_linux_be.o `test -f 'disk/mdraid_linux_be.c' || echo '$(srcdir)/'`disk/mdraid_linux_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/mdraid09_be_module-mdraid_linux_be.Tpo disk/$(DEPDIR)/mdraid09_be_module-mdraid_linux_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/mdraid_linux_be.c' object='disk/mdraid09_be_module-mdraid_linux_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_be_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_be_module_CFLAGS) $(CFLAGS) -c -o disk/mdraid09_be_module-mdraid_linux_be.o `test -f 'disk/mdraid_linux_be.c' || echo '$(srcdir)/'`disk/mdraid_linux_be.c + +disk/mdraid09_be_module-mdraid_linux_be.obj: disk/mdraid_linux_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_be_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_be_module_CFLAGS) $(CFLAGS) -MT disk/mdraid09_be_module-mdraid_linux_be.obj -MD -MP -MF disk/$(DEPDIR)/mdraid09_be_module-mdraid_linux_be.Tpo -c -o disk/mdraid09_be_module-mdraid_linux_be.obj `if test -f 'disk/mdraid_linux_be.c'; then $(CYGPATH_W) 'disk/mdraid_linux_be.c'; else $(CYGPATH_W) '$(srcdir)/disk/mdraid_linux_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/mdraid09_be_module-mdraid_linux_be.Tpo disk/$(DEPDIR)/mdraid09_be_module-mdraid_linux_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/mdraid_linux_be.c' object='disk/mdraid09_be_module-mdraid_linux_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_be_module_CPPFLAGS) $(CPPFLAGS) $(mdraid09_be_module_CFLAGS) $(CFLAGS) -c -o disk/mdraid09_be_module-mdraid_linux_be.obj `if test -f 'disk/mdraid_linux_be.c'; then $(CYGPATH_W) 'disk/mdraid_linux_be.c'; else $(CYGPATH_W) '$(srcdir)/disk/mdraid_linux_be.c'; fi` + +disk/mdraid1x_module-mdraid1x_linux.o: disk/mdraid1x_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid1x_module_CPPFLAGS) $(CPPFLAGS) $(mdraid1x_module_CFLAGS) $(CFLAGS) -MT disk/mdraid1x_module-mdraid1x_linux.o -MD -MP -MF disk/$(DEPDIR)/mdraid1x_module-mdraid1x_linux.Tpo -c -o disk/mdraid1x_module-mdraid1x_linux.o `test -f 'disk/mdraid1x_linux.c' || echo '$(srcdir)/'`disk/mdraid1x_linux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/mdraid1x_module-mdraid1x_linux.Tpo disk/$(DEPDIR)/mdraid1x_module-mdraid1x_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/mdraid1x_linux.c' object='disk/mdraid1x_module-mdraid1x_linux.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid1x_module_CPPFLAGS) $(CPPFLAGS) $(mdraid1x_module_CFLAGS) $(CFLAGS) -c -o disk/mdraid1x_module-mdraid1x_linux.o `test -f 'disk/mdraid1x_linux.c' || echo '$(srcdir)/'`disk/mdraid1x_linux.c + +disk/mdraid1x_module-mdraid1x_linux.obj: disk/mdraid1x_linux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid1x_module_CPPFLAGS) $(CPPFLAGS) $(mdraid1x_module_CFLAGS) $(CFLAGS) -MT disk/mdraid1x_module-mdraid1x_linux.obj -MD -MP -MF disk/$(DEPDIR)/mdraid1x_module-mdraid1x_linux.Tpo -c -o disk/mdraid1x_module-mdraid1x_linux.obj `if test -f 'disk/mdraid1x_linux.c'; then $(CYGPATH_W) 'disk/mdraid1x_linux.c'; else $(CYGPATH_W) '$(srcdir)/disk/mdraid1x_linux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/mdraid1x_module-mdraid1x_linux.Tpo disk/$(DEPDIR)/mdraid1x_module-mdraid1x_linux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/mdraid1x_linux.c' object='disk/mdraid1x_module-mdraid1x_linux.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid1x_module_CPPFLAGS) $(CPPFLAGS) $(mdraid1x_module_CFLAGS) $(CFLAGS) -c -o disk/mdraid1x_module-mdraid1x_linux.obj `if test -f 'disk/mdraid1x_linux.c'; then $(CYGPATH_W) 'disk/mdraid1x_linux.c'; else $(CYGPATH_W) '$(srcdir)/disk/mdraid1x_linux.c'; fi` + +disk/memdisk_module-memdisk.o: disk/memdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memdisk_module_CPPFLAGS) $(CPPFLAGS) $(memdisk_module_CFLAGS) $(CFLAGS) -MT disk/memdisk_module-memdisk.o -MD -MP -MF disk/$(DEPDIR)/memdisk_module-memdisk.Tpo -c -o disk/memdisk_module-memdisk.o `test -f 'disk/memdisk.c' || echo '$(srcdir)/'`disk/memdisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/memdisk_module-memdisk.Tpo disk/$(DEPDIR)/memdisk_module-memdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/memdisk.c' object='disk/memdisk_module-memdisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memdisk_module_CPPFLAGS) $(CPPFLAGS) $(memdisk_module_CFLAGS) $(CFLAGS) -c -o disk/memdisk_module-memdisk.o `test -f 'disk/memdisk.c' || echo '$(srcdir)/'`disk/memdisk.c + +disk/memdisk_module-memdisk.obj: disk/memdisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memdisk_module_CPPFLAGS) $(CPPFLAGS) $(memdisk_module_CFLAGS) $(CFLAGS) -MT disk/memdisk_module-memdisk.obj -MD -MP -MF disk/$(DEPDIR)/memdisk_module-memdisk.Tpo -c -o disk/memdisk_module-memdisk.obj `if test -f 'disk/memdisk.c'; then $(CYGPATH_W) 'disk/memdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/memdisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/memdisk_module-memdisk.Tpo disk/$(DEPDIR)/memdisk_module-memdisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/memdisk.c' object='disk/memdisk_module-memdisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memdisk_module_CPPFLAGS) $(CPPFLAGS) $(memdisk_module_CFLAGS) $(CFLAGS) -c -o disk/memdisk_module-memdisk.obj `if test -f 'disk/memdisk.c'; then $(CYGPATH_W) 'disk/memdisk.c'; else $(CYGPATH_W) '$(srcdir)/disk/memdisk.c'; fi` + +commands/memrw_module-memrw.o: commands/memrw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memrw_module_CPPFLAGS) $(CPPFLAGS) $(memrw_module_CFLAGS) $(CFLAGS) -MT commands/memrw_module-memrw.o -MD -MP -MF commands/$(DEPDIR)/memrw_module-memrw.Tpo -c -o commands/memrw_module-memrw.o `test -f 'commands/memrw.c' || echo '$(srcdir)/'`commands/memrw.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/memrw_module-memrw.Tpo commands/$(DEPDIR)/memrw_module-memrw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/memrw.c' object='commands/memrw_module-memrw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memrw_module_CPPFLAGS) $(CPPFLAGS) $(memrw_module_CFLAGS) $(CFLAGS) -c -o commands/memrw_module-memrw.o `test -f 'commands/memrw.c' || echo '$(srcdir)/'`commands/memrw.c + +commands/memrw_module-memrw.obj: commands/memrw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memrw_module_CPPFLAGS) $(CPPFLAGS) $(memrw_module_CFLAGS) $(CFLAGS) -MT commands/memrw_module-memrw.obj -MD -MP -MF commands/$(DEPDIR)/memrw_module-memrw.Tpo -c -o commands/memrw_module-memrw.obj `if test -f 'commands/memrw.c'; then $(CYGPATH_W) 'commands/memrw.c'; else $(CYGPATH_W) '$(srcdir)/commands/memrw.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/memrw_module-memrw.Tpo commands/$(DEPDIR)/memrw_module-memrw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/memrw.c' object='commands/memrw_module-memrw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memrw_module_CPPFLAGS) $(CPPFLAGS) $(memrw_module_CFLAGS) $(CFLAGS) -c -o commands/memrw_module-memrw.obj `if test -f 'commands/memrw.c'; then $(CYGPATH_W) 'commands/memrw.c'; else $(CYGPATH_W) '$(srcdir)/commands/memrw.c'; fi` + +commands/minicmd_module-minicmd.o: commands/minicmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minicmd_module_CPPFLAGS) $(CPPFLAGS) $(minicmd_module_CFLAGS) $(CFLAGS) -MT commands/minicmd_module-minicmd.o -MD -MP -MF commands/$(DEPDIR)/minicmd_module-minicmd.Tpo -c -o commands/minicmd_module-minicmd.o `test -f 'commands/minicmd.c' || echo '$(srcdir)/'`commands/minicmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/minicmd_module-minicmd.Tpo commands/$(DEPDIR)/minicmd_module-minicmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/minicmd.c' object='commands/minicmd_module-minicmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minicmd_module_CPPFLAGS) $(CPPFLAGS) $(minicmd_module_CFLAGS) $(CFLAGS) -c -o commands/minicmd_module-minicmd.o `test -f 'commands/minicmd.c' || echo '$(srcdir)/'`commands/minicmd.c + +commands/minicmd_module-minicmd.obj: commands/minicmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minicmd_module_CPPFLAGS) $(CPPFLAGS) $(minicmd_module_CFLAGS) $(CFLAGS) -MT commands/minicmd_module-minicmd.obj -MD -MP -MF commands/$(DEPDIR)/minicmd_module-minicmd.Tpo -c -o commands/minicmd_module-minicmd.obj `if test -f 'commands/minicmd.c'; then $(CYGPATH_W) 'commands/minicmd.c'; else $(CYGPATH_W) '$(srcdir)/commands/minicmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/minicmd_module-minicmd.Tpo commands/$(DEPDIR)/minicmd_module-minicmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/minicmd.c' object='commands/minicmd_module-minicmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minicmd_module_CPPFLAGS) $(CPPFLAGS) $(minicmd_module_CFLAGS) $(CFLAGS) -c -o commands/minicmd_module-minicmd.obj `if test -f 'commands/minicmd.c'; then $(CYGPATH_W) 'commands/minicmd.c'; else $(CYGPATH_W) '$(srcdir)/commands/minicmd.c'; fi` + +fs/minix_module-minix.o: fs/minix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_module_CPPFLAGS) $(CPPFLAGS) $(minix_module_CFLAGS) $(CFLAGS) -MT fs/minix_module-minix.o -MD -MP -MF fs/$(DEPDIR)/minix_module-minix.Tpo -c -o fs/minix_module-minix.o `test -f 'fs/minix.c' || echo '$(srcdir)/'`fs/minix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix_module-minix.Tpo fs/$(DEPDIR)/minix_module-minix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix.c' object='fs/minix_module-minix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_module_CPPFLAGS) $(CPPFLAGS) $(minix_module_CFLAGS) $(CFLAGS) -c -o fs/minix_module-minix.o `test -f 'fs/minix.c' || echo '$(srcdir)/'`fs/minix.c + +fs/minix_module-minix.obj: fs/minix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_module_CPPFLAGS) $(CPPFLAGS) $(minix_module_CFLAGS) $(CFLAGS) -MT fs/minix_module-minix.obj -MD -MP -MF fs/$(DEPDIR)/minix_module-minix.Tpo -c -o fs/minix_module-minix.obj `if test -f 'fs/minix.c'; then $(CYGPATH_W) 'fs/minix.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix_module-minix.Tpo fs/$(DEPDIR)/minix_module-minix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix.c' object='fs/minix_module-minix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_module_CPPFLAGS) $(CPPFLAGS) $(minix_module_CFLAGS) $(CFLAGS) -c -o fs/minix_module-minix.obj `if test -f 'fs/minix.c'; then $(CYGPATH_W) 'fs/minix.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix.c'; fi` + +fs/minix2_module-minix2.o: fs/minix2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_module_CPPFLAGS) $(CPPFLAGS) $(minix2_module_CFLAGS) $(CFLAGS) -MT fs/minix2_module-minix2.o -MD -MP -MF fs/$(DEPDIR)/minix2_module-minix2.Tpo -c -o fs/minix2_module-minix2.o `test -f 'fs/minix2.c' || echo '$(srcdir)/'`fs/minix2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix2_module-minix2.Tpo fs/$(DEPDIR)/minix2_module-minix2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix2.c' object='fs/minix2_module-minix2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_module_CPPFLAGS) $(CPPFLAGS) $(minix2_module_CFLAGS) $(CFLAGS) -c -o fs/minix2_module-minix2.o `test -f 'fs/minix2.c' || echo '$(srcdir)/'`fs/minix2.c + +fs/minix2_module-minix2.obj: fs/minix2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_module_CPPFLAGS) $(CPPFLAGS) $(minix2_module_CFLAGS) $(CFLAGS) -MT fs/minix2_module-minix2.obj -MD -MP -MF fs/$(DEPDIR)/minix2_module-minix2.Tpo -c -o fs/minix2_module-minix2.obj `if test -f 'fs/minix2.c'; then $(CYGPATH_W) 'fs/minix2.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix2_module-minix2.Tpo fs/$(DEPDIR)/minix2_module-minix2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix2.c' object='fs/minix2_module-minix2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_module_CPPFLAGS) $(CPPFLAGS) $(minix2_module_CFLAGS) $(CFLAGS) -c -o fs/minix2_module-minix2.obj `if test -f 'fs/minix2.c'; then $(CYGPATH_W) 'fs/minix2.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix2.c'; fi` + +fs/minix2_be_module-minix2_be.o: fs/minix2_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_be_module_CPPFLAGS) $(CPPFLAGS) $(minix2_be_module_CFLAGS) $(CFLAGS) -MT fs/minix2_be_module-minix2_be.o -MD -MP -MF fs/$(DEPDIR)/minix2_be_module-minix2_be.Tpo -c -o fs/minix2_be_module-minix2_be.o `test -f 'fs/minix2_be.c' || echo '$(srcdir)/'`fs/minix2_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix2_be_module-minix2_be.Tpo fs/$(DEPDIR)/minix2_be_module-minix2_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix2_be.c' object='fs/minix2_be_module-minix2_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_be_module_CPPFLAGS) $(CPPFLAGS) $(minix2_be_module_CFLAGS) $(CFLAGS) -c -o fs/minix2_be_module-minix2_be.o `test -f 'fs/minix2_be.c' || echo '$(srcdir)/'`fs/minix2_be.c + +fs/minix2_be_module-minix2_be.obj: fs/minix2_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_be_module_CPPFLAGS) $(CPPFLAGS) $(minix2_be_module_CFLAGS) $(CFLAGS) -MT fs/minix2_be_module-minix2_be.obj -MD -MP -MF fs/$(DEPDIR)/minix2_be_module-minix2_be.Tpo -c -o fs/minix2_be_module-minix2_be.obj `if test -f 'fs/minix2_be.c'; then $(CYGPATH_W) 'fs/minix2_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix2_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix2_be_module-minix2_be.Tpo fs/$(DEPDIR)/minix2_be_module-minix2_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix2_be.c' object='fs/minix2_be_module-minix2_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_be_module_CPPFLAGS) $(CPPFLAGS) $(minix2_be_module_CFLAGS) $(CFLAGS) -c -o fs/minix2_be_module-minix2_be.obj `if test -f 'fs/minix2_be.c'; then $(CYGPATH_W) 'fs/minix2_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix2_be.c'; fi` + +fs/minix3_module-minix3.o: fs/minix3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_module_CPPFLAGS) $(CPPFLAGS) $(minix3_module_CFLAGS) $(CFLAGS) -MT fs/minix3_module-minix3.o -MD -MP -MF fs/$(DEPDIR)/minix3_module-minix3.Tpo -c -o fs/minix3_module-minix3.o `test -f 'fs/minix3.c' || echo '$(srcdir)/'`fs/minix3.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix3_module-minix3.Tpo fs/$(DEPDIR)/minix3_module-minix3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix3.c' object='fs/minix3_module-minix3.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_module_CPPFLAGS) $(CPPFLAGS) $(minix3_module_CFLAGS) $(CFLAGS) -c -o fs/minix3_module-minix3.o `test -f 'fs/minix3.c' || echo '$(srcdir)/'`fs/minix3.c + +fs/minix3_module-minix3.obj: fs/minix3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_module_CPPFLAGS) $(CPPFLAGS) $(minix3_module_CFLAGS) $(CFLAGS) -MT fs/minix3_module-minix3.obj -MD -MP -MF fs/$(DEPDIR)/minix3_module-minix3.Tpo -c -o fs/minix3_module-minix3.obj `if test -f 'fs/minix3.c'; then $(CYGPATH_W) 'fs/minix3.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix3.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix3_module-minix3.Tpo fs/$(DEPDIR)/minix3_module-minix3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix3.c' object='fs/minix3_module-minix3.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_module_CPPFLAGS) $(CPPFLAGS) $(minix3_module_CFLAGS) $(CFLAGS) -c -o fs/minix3_module-minix3.obj `if test -f 'fs/minix3.c'; then $(CYGPATH_W) 'fs/minix3.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix3.c'; fi` + +fs/minix3_be_module-minix3_be.o: fs/minix3_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_be_module_CPPFLAGS) $(CPPFLAGS) $(minix3_be_module_CFLAGS) $(CFLAGS) -MT fs/minix3_be_module-minix3_be.o -MD -MP -MF fs/$(DEPDIR)/minix3_be_module-minix3_be.Tpo -c -o fs/minix3_be_module-minix3_be.o `test -f 'fs/minix3_be.c' || echo '$(srcdir)/'`fs/minix3_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix3_be_module-minix3_be.Tpo fs/$(DEPDIR)/minix3_be_module-minix3_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix3_be.c' object='fs/minix3_be_module-minix3_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_be_module_CPPFLAGS) $(CPPFLAGS) $(minix3_be_module_CFLAGS) $(CFLAGS) -c -o fs/minix3_be_module-minix3_be.o `test -f 'fs/minix3_be.c' || echo '$(srcdir)/'`fs/minix3_be.c + +fs/minix3_be_module-minix3_be.obj: fs/minix3_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_be_module_CPPFLAGS) $(CPPFLAGS) $(minix3_be_module_CFLAGS) $(CFLAGS) -MT fs/minix3_be_module-minix3_be.obj -MD -MP -MF fs/$(DEPDIR)/minix3_be_module-minix3_be.Tpo -c -o fs/minix3_be_module-minix3_be.obj `if test -f 'fs/minix3_be.c'; then $(CYGPATH_W) 'fs/minix3_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix3_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix3_be_module-minix3_be.Tpo fs/$(DEPDIR)/minix3_be_module-minix3_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix3_be.c' object='fs/minix3_be_module-minix3_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_be_module_CPPFLAGS) $(CPPFLAGS) $(minix3_be_module_CFLAGS) $(CFLAGS) -c -o fs/minix3_be_module-minix3_be.obj `if test -f 'fs/minix3_be.c'; then $(CYGPATH_W) 'fs/minix3_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix3_be.c'; fi` + +fs/minix_be_module-minix_be.o: fs/minix_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_be_module_CPPFLAGS) $(CPPFLAGS) $(minix_be_module_CFLAGS) $(CFLAGS) -MT fs/minix_be_module-minix_be.o -MD -MP -MF fs/$(DEPDIR)/minix_be_module-minix_be.Tpo -c -o fs/minix_be_module-minix_be.o `test -f 'fs/minix_be.c' || echo '$(srcdir)/'`fs/minix_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix_be_module-minix_be.Tpo fs/$(DEPDIR)/minix_be_module-minix_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix_be.c' object='fs/minix_be_module-minix_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_be_module_CPPFLAGS) $(CPPFLAGS) $(minix_be_module_CFLAGS) $(CFLAGS) -c -o fs/minix_be_module-minix_be.o `test -f 'fs/minix_be.c' || echo '$(srcdir)/'`fs/minix_be.c + +fs/minix_be_module-minix_be.obj: fs/minix_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_be_module_CPPFLAGS) $(CPPFLAGS) $(minix_be_module_CFLAGS) $(CFLAGS) -MT fs/minix_be_module-minix_be.obj -MD -MP -MF fs/$(DEPDIR)/minix_be_module-minix_be.Tpo -c -o fs/minix_be_module-minix_be.obj `if test -f 'fs/minix_be.c'; then $(CYGPATH_W) 'fs/minix_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/minix_be_module-minix_be.Tpo fs/$(DEPDIR)/minix_be_module-minix_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/minix_be.c' object='fs/minix_be_module-minix_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_be_module_CPPFLAGS) $(CPPFLAGS) $(minix_be_module_CFLAGS) $(CFLAGS) -c -o fs/minix_be_module-minix_be.obj `if test -f 'fs/minix_be.c'; then $(CYGPATH_W) 'fs/minix_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/minix_be.c'; fi` + +mmap/efi/mmap_module-mmap.o: mmap/efi/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/efi/mmap_module-mmap.o -MD -MP -MF mmap/efi/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/efi/mmap_module-mmap.o `test -f 'mmap/efi/mmap.c' || echo '$(srcdir)/'`mmap/efi/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/efi/$(DEPDIR)/mmap_module-mmap.Tpo mmap/efi/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/efi/mmap.c' object='mmap/efi/mmap_module-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/efi/mmap_module-mmap.o `test -f 'mmap/efi/mmap.c' || echo '$(srcdir)/'`mmap/efi/mmap.c + +mmap/efi/mmap_module-mmap.obj: mmap/efi/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/efi/mmap_module-mmap.obj -MD -MP -MF mmap/efi/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/efi/mmap_module-mmap.obj `if test -f 'mmap/efi/mmap.c'; then $(CYGPATH_W) 'mmap/efi/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/efi/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/efi/$(DEPDIR)/mmap_module-mmap.Tpo mmap/efi/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/efi/mmap.c' object='mmap/efi/mmap_module-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/efi/mmap_module-mmap.obj `if test -f 'mmap/efi/mmap.c'; then $(CYGPATH_W) 'mmap/efi/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/efi/mmap.c'; fi` + +mmap/mmap_module-mmap.o: mmap/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/mmap_module-mmap.o -MD -MP -MF mmap/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/mmap_module-mmap.o `test -f 'mmap/mmap.c' || echo '$(srcdir)/'`mmap/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/$(DEPDIR)/mmap_module-mmap.Tpo mmap/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/mmap.c' object='mmap/mmap_module-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/mmap_module-mmap.o `test -f 'mmap/mmap.c' || echo '$(srcdir)/'`mmap/mmap.c + +mmap/mmap_module-mmap.obj: mmap/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/mmap_module-mmap.obj -MD -MP -MF mmap/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/mmap_module-mmap.obj `if test -f 'mmap/mmap.c'; then $(CYGPATH_W) 'mmap/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/$(DEPDIR)/mmap_module-mmap.Tpo mmap/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/mmap.c' object='mmap/mmap_module-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/mmap_module-mmap.obj `if test -f 'mmap/mmap.c'; then $(CYGPATH_W) 'mmap/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/mmap.c'; fi` + +mmap/i386/mmap_module-uppermem.o: mmap/i386/uppermem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/i386/mmap_module-uppermem.o -MD -MP -MF mmap/i386/$(DEPDIR)/mmap_module-uppermem.Tpo -c -o mmap/i386/mmap_module-uppermem.o `test -f 'mmap/i386/uppermem.c' || echo '$(srcdir)/'`mmap/i386/uppermem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/$(DEPDIR)/mmap_module-uppermem.Tpo mmap/i386/$(DEPDIR)/mmap_module-uppermem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/i386/uppermem.c' object='mmap/i386/mmap_module-uppermem.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/i386/mmap_module-uppermem.o `test -f 'mmap/i386/uppermem.c' || echo '$(srcdir)/'`mmap/i386/uppermem.c + +mmap/i386/mmap_module-uppermem.obj: mmap/i386/uppermem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/i386/mmap_module-uppermem.obj -MD -MP -MF mmap/i386/$(DEPDIR)/mmap_module-uppermem.Tpo -c -o mmap/i386/mmap_module-uppermem.obj `if test -f 'mmap/i386/uppermem.c'; then $(CYGPATH_W) 'mmap/i386/uppermem.c'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/uppermem.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/$(DEPDIR)/mmap_module-uppermem.Tpo mmap/i386/$(DEPDIR)/mmap_module-uppermem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/i386/uppermem.c' object='mmap/i386/mmap_module-uppermem.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/i386/mmap_module-uppermem.obj `if test -f 'mmap/i386/uppermem.c'; then $(CYGPATH_W) 'mmap/i386/uppermem.c'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/uppermem.c'; fi` + +mmap/i386/mmap_module-mmap.o: mmap/i386/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/i386/mmap_module-mmap.o -MD -MP -MF mmap/i386/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/i386/mmap_module-mmap.o `test -f 'mmap/i386/mmap.c' || echo '$(srcdir)/'`mmap/i386/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/$(DEPDIR)/mmap_module-mmap.Tpo mmap/i386/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/i386/mmap.c' object='mmap/i386/mmap_module-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/i386/mmap_module-mmap.o `test -f 'mmap/i386/mmap.c' || echo '$(srcdir)/'`mmap/i386/mmap.c + +mmap/i386/mmap_module-mmap.obj: mmap/i386/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/i386/mmap_module-mmap.obj -MD -MP -MF mmap/i386/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/i386/mmap_module-mmap.obj `if test -f 'mmap/i386/mmap.c'; then $(CYGPATH_W) 'mmap/i386/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/$(DEPDIR)/mmap_module-mmap.Tpo mmap/i386/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/i386/mmap.c' object='mmap/i386/mmap_module-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/i386/mmap_module-mmap.obj `if test -f 'mmap/i386/mmap.c'; then $(CYGPATH_W) 'mmap/i386/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/mmap.c'; fi` + +mmap/i386/pc/mmap_module-mmap.o: mmap/i386/pc/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/i386/pc/mmap_module-mmap.o -MD -MP -MF mmap/i386/pc/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/i386/pc/mmap_module-mmap.o `test -f 'mmap/i386/pc/mmap.c' || echo '$(srcdir)/'`mmap/i386/pc/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/pc/$(DEPDIR)/mmap_module-mmap.Tpo mmap/i386/pc/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/i386/pc/mmap.c' object='mmap/i386/pc/mmap_module-mmap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/i386/pc/mmap_module-mmap.o `test -f 'mmap/i386/pc/mmap.c' || echo '$(srcdir)/'`mmap/i386/pc/mmap.c + +mmap/i386/pc/mmap_module-mmap.obj: mmap/i386/pc/mmap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/i386/pc/mmap_module-mmap.obj -MD -MP -MF mmap/i386/pc/$(DEPDIR)/mmap_module-mmap.Tpo -c -o mmap/i386/pc/mmap_module-mmap.obj `if test -f 'mmap/i386/pc/mmap.c'; then $(CYGPATH_W) 'mmap/i386/pc/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/pc/mmap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/i386/pc/$(DEPDIR)/mmap_module-mmap.Tpo mmap/i386/pc/$(DEPDIR)/mmap_module-mmap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/i386/pc/mmap.c' object='mmap/i386/pc/mmap_module-mmap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/i386/pc/mmap_module-mmap.obj `if test -f 'mmap/i386/pc/mmap.c'; then $(CYGPATH_W) 'mmap/i386/pc/mmap.c'; else $(CYGPATH_W) '$(srcdir)/mmap/i386/pc/mmap.c'; fi` + +mmap/mips/mmap_module-uppermem.o: mmap/mips/uppermem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/mips/mmap_module-uppermem.o -MD -MP -MF mmap/mips/$(DEPDIR)/mmap_module-uppermem.Tpo -c -o mmap/mips/mmap_module-uppermem.o `test -f 'mmap/mips/uppermem.c' || echo '$(srcdir)/'`mmap/mips/uppermem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/mips/$(DEPDIR)/mmap_module-uppermem.Tpo mmap/mips/$(DEPDIR)/mmap_module-uppermem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/mips/uppermem.c' object='mmap/mips/mmap_module-uppermem.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/mips/mmap_module-uppermem.o `test -f 'mmap/mips/uppermem.c' || echo '$(srcdir)/'`mmap/mips/uppermem.c + +mmap/mips/mmap_module-uppermem.obj: mmap/mips/uppermem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -MT mmap/mips/mmap_module-uppermem.obj -MD -MP -MF mmap/mips/$(DEPDIR)/mmap_module-uppermem.Tpo -c -o mmap/mips/mmap_module-uppermem.obj `if test -f 'mmap/mips/uppermem.c'; then $(CYGPATH_W) 'mmap/mips/uppermem.c'; else $(CYGPATH_W) '$(srcdir)/mmap/mips/uppermem.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) mmap/mips/$(DEPDIR)/mmap_module-uppermem.Tpo mmap/mips/$(DEPDIR)/mmap_module-uppermem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mmap/mips/uppermem.c' object='mmap/mips/mmap_module-uppermem.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $(mmap_module_CFLAGS) $(CFLAGS) -c -o mmap/mips/mmap_module-uppermem.obj `if test -f 'mmap/mips/uppermem.c'; then $(CYGPATH_W) 'mmap/mips/uppermem.c'; else $(CYGPATH_W) '$(srcdir)/mmap/mips/uppermem.c'; fi` + +term/morse_module-morse.o: term/morse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $(morse_module_CFLAGS) $(CFLAGS) -MT term/morse_module-morse.o -MD -MP -MF term/$(DEPDIR)/morse_module-morse.Tpo -c -o term/morse_module-morse.o `test -f 'term/morse.c' || echo '$(srcdir)/'`term/morse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/morse_module-morse.Tpo term/$(DEPDIR)/morse_module-morse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/morse.c' object='term/morse_module-morse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $(morse_module_CFLAGS) $(CFLAGS) -c -o term/morse_module-morse.o `test -f 'term/morse.c' || echo '$(srcdir)/'`term/morse.c + +term/morse_module-morse.obj: term/morse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $(morse_module_CFLAGS) $(CFLAGS) -MT term/morse_module-morse.obj -MD -MP -MF term/$(DEPDIR)/morse_module-morse.Tpo -c -o term/morse_module-morse.obj `if test -f 'term/morse.c'; then $(CYGPATH_W) 'term/morse.c'; else $(CYGPATH_W) '$(srcdir)/term/morse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/morse_module-morse.Tpo term/$(DEPDIR)/morse_module-morse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/morse.c' object='term/morse_module-morse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $(morse_module_CFLAGS) $(CFLAGS) -c -o term/morse_module-morse.obj `if test -f 'term/morse.c'; then $(CYGPATH_W) 'term/morse.c'; else $(CYGPATH_W) '$(srcdir)/term/morse.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpiutil.o: lib/libgcrypt-grub/mpi/mpiutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpiutil.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpiutil.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpiutil.o `test -f 'lib/libgcrypt-grub/mpi/mpiutil.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpiutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpiutil.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpiutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpiutil.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpiutil.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpiutil.o `test -f 'lib/libgcrypt-grub/mpi/mpiutil.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpiutil.c + +lib/libgcrypt-grub/mpi/mpi_module-mpiutil.obj: lib/libgcrypt-grub/mpi/mpiutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpiutil.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpiutil.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpiutil.obj `if test -f 'lib/libgcrypt-grub/mpi/mpiutil.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpiutil.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpiutil.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpiutil.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpiutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpiutil.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpiutil.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpiutil.obj `if test -f 'lib/libgcrypt-grub/mpi/mpiutil.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpiutil.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpiutil.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.o: lib/libgcrypt-grub/mpi/mpi-bit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-bit.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.o `test -f 'lib/libgcrypt-grub/mpi/mpi-bit.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-bit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-bit.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-bit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-bit.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.o `test -f 'lib/libgcrypt-grub/mpi/mpi-bit.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-bit.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.obj: lib/libgcrypt-grub/mpi/mpi-bit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-bit.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-bit.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-bit.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-bit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-bit.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-bit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-bit.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-bit.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-bit.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-bit.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-bit.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-add.o: lib/libgcrypt-grub/mpi/mpi-add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-add.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-add.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-add.o `test -f 'lib/libgcrypt-grub/mpi/mpi-add.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-add.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-add.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-add.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-add.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-add.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-add.o `test -f 'lib/libgcrypt-grub/mpi/mpi-add.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-add.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-add.obj: lib/libgcrypt-grub/mpi/mpi-add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-add.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-add.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-add.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-add.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-add.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-add.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-add.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-add.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-add.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-add.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-add.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-add.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-add.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-add.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.o: lib/libgcrypt-grub/mpi/mpi-mul.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mul.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.o `test -f 'lib/libgcrypt-grub/mpi/mpi-mul.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-mul.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mul.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mul.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-mul.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.o `test -f 'lib/libgcrypt-grub/mpi/mpi-mul.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-mul.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.obj: lib/libgcrypt-grub/mpi/mpi-mul.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mul.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-mul.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-mul.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-mul.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mul.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mul.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-mul.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mul.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-mul.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-mul.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-mul.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.o: lib/libgcrypt-grub/mpi/mpi-mod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mod.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.o `test -f 'lib/libgcrypt-grub/mpi/mpi-mod.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-mod.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mod.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-mod.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.o `test -f 'lib/libgcrypt-grub/mpi/mpi-mod.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-mod.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.obj: lib/libgcrypt-grub/mpi/mpi-mod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mod.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-mod.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-mod.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-mod.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mod.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-mod.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mod.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-mod.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-mod.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-mod.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.o: lib/libgcrypt-grub/mpi/mpi-gcd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-gcd.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.o `test -f 'lib/libgcrypt-grub/mpi/mpi-gcd.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-gcd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-gcd.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-gcd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-gcd.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.o `test -f 'lib/libgcrypt-grub/mpi/mpi-gcd.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-gcd.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.obj: lib/libgcrypt-grub/mpi/mpi-gcd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-gcd.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-gcd.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-gcd.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-gcd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-gcd.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-gcd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-gcd.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-gcd.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-gcd.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-gcd.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-gcd.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-div.o: lib/libgcrypt-grub/mpi/mpi-div.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-div.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-div.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-div.o `test -f 'lib/libgcrypt-grub/mpi/mpi-div.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-div.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-div.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-div.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-div.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-div.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-div.o `test -f 'lib/libgcrypt-grub/mpi/mpi-div.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-div.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-div.obj: lib/libgcrypt-grub/mpi/mpi-div.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-div.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-div.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-div.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-div.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-div.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-div.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-div.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-div.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-div.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-div.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-div.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-div.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-div.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-div.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.o: lib/libgcrypt-grub/mpi/mpi-cmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-cmp.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.o `test -f 'lib/libgcrypt-grub/mpi/mpi-cmp.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-cmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-cmp.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-cmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-cmp.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.o `test -f 'lib/libgcrypt-grub/mpi/mpi-cmp.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-cmp.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.obj: lib/libgcrypt-grub/mpi/mpi-cmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-cmp.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-cmp.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-cmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-cmp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-cmp.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-cmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-cmp.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-cmp.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-cmp.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-cmp.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-cmp.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.o: lib/libgcrypt-grub/mpi/mpi-inv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inv.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.o `test -f 'lib/libgcrypt-grub/mpi/mpi-inv.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-inv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inv.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-inv.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.o `test -f 'lib/libgcrypt-grub/mpi/mpi-inv.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-inv.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.obj: lib/libgcrypt-grub/mpi/mpi-inv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inv.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-inv.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-inv.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-inv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inv.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-inv.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inv.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-inv.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-inv.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-inv.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.o: lib/libgcrypt-grub/mpi/mpi-pow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-pow.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.o `test -f 'lib/libgcrypt-grub/mpi/mpi-pow.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-pow.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-pow.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-pow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-pow.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.o `test -f 'lib/libgcrypt-grub/mpi/mpi-pow.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-pow.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.obj: lib/libgcrypt-grub/mpi/mpi-pow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-pow.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-pow.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-pow.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-pow.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-pow.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-pow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-pow.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-pow.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-pow.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-pow.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-pow.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.o: lib/libgcrypt-grub/mpi/mpi-mpow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mpow.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.o `test -f 'lib/libgcrypt-grub/mpi/mpi-mpow.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-mpow.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mpow.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mpow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-mpow.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.o `test -f 'lib/libgcrypt-grub/mpi/mpi-mpow.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-mpow.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.obj: lib/libgcrypt-grub/mpi/mpi-mpow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mpow.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-mpow.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-mpow.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-mpow.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mpow.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-mpow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-mpow.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-mpow.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-mpow.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-mpow.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-mpow.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.o: lib/libgcrypt-grub/mpi/mpih-lshift.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-lshift.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.o `test -f 'lib/libgcrypt-grub/mpi/mpih-lshift.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-lshift.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-lshift.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-lshift.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-lshift.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.o `test -f 'lib/libgcrypt-grub/mpi/mpih-lshift.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-lshift.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.obj: lib/libgcrypt-grub/mpi/mpih-lshift.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-lshift.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-lshift.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-lshift.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-lshift.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-lshift.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-lshift.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-lshift.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-lshift.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-lshift.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-lshift.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-lshift.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.o: lib/libgcrypt-grub/mpi/mpih-mul.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.obj: lib/libgcrypt-grub/mpi/mpih-mul.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.o: lib/libgcrypt-grub/mpi/mpih-mul1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul1.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul1.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul1.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul1.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.obj: lib/libgcrypt-grub/mpi/mpih-mul1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul1.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul1.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul1.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul1.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul1.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul1.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.o: lib/libgcrypt-grub/mpi/mpih-mul2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul2.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul2.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul2.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul2.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul2.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul2.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.obj: lib/libgcrypt-grub/mpi/mpih-mul2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul2.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul2.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul2.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul2.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul2.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul2.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul2.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul2.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul2.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.o: lib/libgcrypt-grub/mpi/mpih-mul3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul3.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul3.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul3.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul3.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul3.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.o `test -f 'lib/libgcrypt-grub/mpi/mpih-mul3.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-mul3.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.obj: lib/libgcrypt-grub/mpi/mpih-mul3.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul3.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul3.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul3.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul3.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul3.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-mul3.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-mul3.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-mul3.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-mul3.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-mul3.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-mul3.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.o: lib/libgcrypt-grub/mpi/mpih-add1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-add1.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.o `test -f 'lib/libgcrypt-grub/mpi/mpih-add1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-add1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-add1.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-add1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-add1.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.o `test -f 'lib/libgcrypt-grub/mpi/mpih-add1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-add1.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.obj: lib/libgcrypt-grub/mpi/mpih-add1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-add1.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-add1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-add1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-add1.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-add1.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-add1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-add1.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-add1.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-add1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-add1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-add1.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.o: lib/libgcrypt-grub/mpi/mpih-sub1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-sub1.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.o `test -f 'lib/libgcrypt-grub/mpi/mpih-sub1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-sub1.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-sub1.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-sub1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-sub1.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.o `test -f 'lib/libgcrypt-grub/mpi/mpih-sub1.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-sub1.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.obj: lib/libgcrypt-grub/mpi/mpih-sub1.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-sub1.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-sub1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-sub1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-sub1.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-sub1.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-sub1.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-sub1.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-sub1.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-sub1.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-sub1.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-sub1.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-div.o: lib/libgcrypt-grub/mpi/mpih-div.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-div.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-div.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-div.o `test -f 'lib/libgcrypt-grub/mpi/mpih-div.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-div.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-div.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-div.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-div.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-div.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-div.o `test -f 'lib/libgcrypt-grub/mpi/mpih-div.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-div.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-div.obj: lib/libgcrypt-grub/mpi/mpih-div.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-div.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-div.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-div.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-div.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-div.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-div.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-div.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-div.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-div.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-div.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-div.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-div.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-div.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-div.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpicoder.o: lib/libgcrypt-grub/mpi/mpicoder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpicoder.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpicoder.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpicoder.o `test -f 'lib/libgcrypt-grub/mpi/mpicoder.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpicoder.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpicoder.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpicoder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpicoder.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpicoder.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpicoder.o `test -f 'lib/libgcrypt-grub/mpi/mpicoder.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpicoder.c + +lib/libgcrypt-grub/mpi/mpi_module-mpicoder.obj: lib/libgcrypt-grub/mpi/mpicoder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpicoder.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpicoder.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpicoder.obj `if test -f 'lib/libgcrypt-grub/mpi/mpicoder.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpicoder.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpicoder.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpicoder.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpicoder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpicoder.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpicoder.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpicoder.obj `if test -f 'lib/libgcrypt-grub/mpi/mpicoder.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpicoder.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpicoder.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.o: lib/libgcrypt-grub/mpi/mpih-rshift.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-rshift.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.o `test -f 'lib/libgcrypt-grub/mpi/mpih-rshift.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-rshift.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-rshift.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-rshift.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-rshift.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.o `test -f 'lib/libgcrypt-grub/mpi/mpih-rshift.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpih-rshift.c + +lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.obj: lib/libgcrypt-grub/mpi/mpih-rshift.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-rshift.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-rshift.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-rshift.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-rshift.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-rshift.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpih-rshift.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpih-rshift.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpih-rshift.obj `if test -f 'lib/libgcrypt-grub/mpi/mpih-rshift.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpih-rshift.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpih-rshift.c'; fi` + +lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.o: lib/libgcrypt-grub/mpi/mpi-inline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.o -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inline.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.o `test -f 'lib/libgcrypt-grub/mpi/mpi-inline.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-inline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inline.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-inline.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.o `test -f 'lib/libgcrypt-grub/mpi/mpi-inline.c' || echo '$(srcdir)/'`lib/libgcrypt-grub/mpi/mpi-inline.c + +lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.obj: lib/libgcrypt-grub/mpi/mpi-inline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.obj -MD -MP -MF lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inline.Tpo -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-inline.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-inline.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-inline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inline.Tpo lib/libgcrypt-grub/mpi/$(DEPDIR)/mpi_module-mpi-inline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt-grub/mpi/mpi-inline.c' object='lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt-grub/mpi/mpi_module-mpi-inline.obj `if test -f 'lib/libgcrypt-grub/mpi/mpi-inline.c'; then $(CYGPATH_W) 'lib/libgcrypt-grub/mpi/mpi-inline.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt-grub/mpi/mpi-inline.c'; fi` + +lib/libgcrypt_wrap/mpi_module-mem.o: lib/libgcrypt_wrap/mem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt_wrap/mpi_module-mem.o -MD -MP -MF lib/libgcrypt_wrap/$(DEPDIR)/mpi_module-mem.Tpo -c -o lib/libgcrypt_wrap/mpi_module-mem.o `test -f 'lib/libgcrypt_wrap/mem.c' || echo '$(srcdir)/'`lib/libgcrypt_wrap/mem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt_wrap/$(DEPDIR)/mpi_module-mem.Tpo lib/libgcrypt_wrap/$(DEPDIR)/mpi_module-mem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt_wrap/mem.c' object='lib/libgcrypt_wrap/mpi_module-mem.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt_wrap/mpi_module-mem.o `test -f 'lib/libgcrypt_wrap/mem.c' || echo '$(srcdir)/'`lib/libgcrypt_wrap/mem.c + +lib/libgcrypt_wrap/mpi_module-mem.obj: lib/libgcrypt_wrap/mem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -MT lib/libgcrypt_wrap/mpi_module-mem.obj -MD -MP -MF lib/libgcrypt_wrap/$(DEPDIR)/mpi_module-mem.Tpo -c -o lib/libgcrypt_wrap/mpi_module-mem.obj `if test -f 'lib/libgcrypt_wrap/mem.c'; then $(CYGPATH_W) 'lib/libgcrypt_wrap/mem.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt_wrap/mem.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/libgcrypt_wrap/$(DEPDIR)/mpi_module-mem.Tpo lib/libgcrypt_wrap/$(DEPDIR)/mpi_module-mem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/libgcrypt_wrap/mem.c' object='lib/libgcrypt_wrap/mpi_module-mem.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $(mpi_module_CFLAGS) $(CFLAGS) -c -o lib/libgcrypt_wrap/mpi_module-mem.obj `if test -f 'lib/libgcrypt_wrap/mem.c'; then $(CYGPATH_W) 'lib/libgcrypt_wrap/mem.c'; else $(CYGPATH_W) '$(srcdir)/lib/libgcrypt_wrap/mem.c'; fi` + +parttool/msdospart_module-msdospart.o: parttool/msdospart.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(msdospart_module_CPPFLAGS) $(CPPFLAGS) $(msdospart_module_CFLAGS) $(CFLAGS) -MT parttool/msdospart_module-msdospart.o -MD -MP -MF parttool/$(DEPDIR)/msdospart_module-msdospart.Tpo -c -o parttool/msdospart_module-msdospart.o `test -f 'parttool/msdospart.c' || echo '$(srcdir)/'`parttool/msdospart.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) parttool/$(DEPDIR)/msdospart_module-msdospart.Tpo parttool/$(DEPDIR)/msdospart_module-msdospart.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parttool/msdospart.c' object='parttool/msdospart_module-msdospart.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(msdospart_module_CPPFLAGS) $(CPPFLAGS) $(msdospart_module_CFLAGS) $(CFLAGS) -c -o parttool/msdospart_module-msdospart.o `test -f 'parttool/msdospart.c' || echo '$(srcdir)/'`parttool/msdospart.c + +parttool/msdospart_module-msdospart.obj: parttool/msdospart.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(msdospart_module_CPPFLAGS) $(CPPFLAGS) $(msdospart_module_CFLAGS) $(CFLAGS) -MT parttool/msdospart_module-msdospart.obj -MD -MP -MF parttool/$(DEPDIR)/msdospart_module-msdospart.Tpo -c -o parttool/msdospart_module-msdospart.obj `if test -f 'parttool/msdospart.c'; then $(CYGPATH_W) 'parttool/msdospart.c'; else $(CYGPATH_W) '$(srcdir)/parttool/msdospart.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) parttool/$(DEPDIR)/msdospart_module-msdospart.Tpo parttool/$(DEPDIR)/msdospart_module-msdospart.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parttool/msdospart.c' object='parttool/msdospart_module-msdospart.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(msdospart_module_CPPFLAGS) $(CPPFLAGS) $(msdospart_module_CFLAGS) $(CFLAGS) -c -o parttool/msdospart_module-msdospart.obj `if test -f 'parttool/msdospart.c'; then $(CYGPATH_W) 'parttool/msdospart.c'; else $(CYGPATH_W) '$(srcdir)/parttool/msdospart.c'; fi` + +tests/mul_test_module-mul_test.o: tests/mul_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mul_test_module_CPPFLAGS) $(CPPFLAGS) $(mul_test_module_CFLAGS) $(CFLAGS) -MT tests/mul_test_module-mul_test.o -MD -MP -MF tests/$(DEPDIR)/mul_test_module-mul_test.Tpo -c -o tests/mul_test_module-mul_test.o `test -f 'tests/mul_test.c' || echo '$(srcdir)/'`tests/mul_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/mul_test_module-mul_test.Tpo tests/$(DEPDIR)/mul_test_module-mul_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/mul_test.c' object='tests/mul_test_module-mul_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mul_test_module_CPPFLAGS) $(CPPFLAGS) $(mul_test_module_CFLAGS) $(CFLAGS) -c -o tests/mul_test_module-mul_test.o `test -f 'tests/mul_test.c' || echo '$(srcdir)/'`tests/mul_test.c + +tests/mul_test_module-mul_test.obj: tests/mul_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mul_test_module_CPPFLAGS) $(CPPFLAGS) $(mul_test_module_CFLAGS) $(CFLAGS) -MT tests/mul_test_module-mul_test.obj -MD -MP -MF tests/$(DEPDIR)/mul_test_module-mul_test.Tpo -c -o tests/mul_test_module-mul_test.obj `if test -f 'tests/mul_test.c'; then $(CYGPATH_W) 'tests/mul_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/mul_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/mul_test_module-mul_test.Tpo tests/$(DEPDIR)/mul_test_module-mul_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/mul_test.c' object='tests/mul_test_module-mul_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mul_test_module_CPPFLAGS) $(CPPFLAGS) $(mul_test_module_CFLAGS) $(CFLAGS) -c -o tests/mul_test_module-mul_test.obj `if test -f 'tests/mul_test.c'; then $(CYGPATH_W) 'tests/mul_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/mul_test.c'; fi` + +loader/i386/multiboot_module-multiboot_mbi.o: loader/i386/multiboot_mbi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -MT loader/i386/multiboot_module-multiboot_mbi.o -MD -MP -MF loader/i386/$(DEPDIR)/multiboot_module-multiboot_mbi.Tpo -c -o loader/i386/multiboot_module-multiboot_mbi.o `test -f 'loader/i386/multiboot_mbi.c' || echo '$(srcdir)/'`loader/i386/multiboot_mbi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/multiboot_module-multiboot_mbi.Tpo loader/i386/$(DEPDIR)/multiboot_module-multiboot_mbi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/multiboot_mbi.c' object='loader/i386/multiboot_module-multiboot_mbi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -c -o loader/i386/multiboot_module-multiboot_mbi.o `test -f 'loader/i386/multiboot_mbi.c' || echo '$(srcdir)/'`loader/i386/multiboot_mbi.c + +loader/i386/multiboot_module-multiboot_mbi.obj: loader/i386/multiboot_mbi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -MT loader/i386/multiboot_module-multiboot_mbi.obj -MD -MP -MF loader/i386/$(DEPDIR)/multiboot_module-multiboot_mbi.Tpo -c -o loader/i386/multiboot_module-multiboot_mbi.obj `if test -f 'loader/i386/multiboot_mbi.c'; then $(CYGPATH_W) 'loader/i386/multiboot_mbi.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/multiboot_mbi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/multiboot_module-multiboot_mbi.Tpo loader/i386/$(DEPDIR)/multiboot_module-multiboot_mbi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/multiboot_mbi.c' object='loader/i386/multiboot_module-multiboot_mbi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -c -o loader/i386/multiboot_module-multiboot_mbi.obj `if test -f 'loader/i386/multiboot_mbi.c'; then $(CYGPATH_W) 'loader/i386/multiboot_mbi.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/multiboot_mbi.c'; fi` + +loader/multiboot_module-multiboot.o: loader/multiboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -MT loader/multiboot_module-multiboot.o -MD -MP -MF loader/$(DEPDIR)/multiboot_module-multiboot.Tpo -c -o loader/multiboot_module-multiboot.o `test -f 'loader/multiboot.c' || echo '$(srcdir)/'`loader/multiboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/multiboot_module-multiboot.Tpo loader/$(DEPDIR)/multiboot_module-multiboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/multiboot.c' object='loader/multiboot_module-multiboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -c -o loader/multiboot_module-multiboot.o `test -f 'loader/multiboot.c' || echo '$(srcdir)/'`loader/multiboot.c + +loader/multiboot_module-multiboot.obj: loader/multiboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -MT loader/multiboot_module-multiboot.obj -MD -MP -MF loader/$(DEPDIR)/multiboot_module-multiboot.Tpo -c -o loader/multiboot_module-multiboot.obj `if test -f 'loader/multiboot.c'; then $(CYGPATH_W) 'loader/multiboot.c'; else $(CYGPATH_W) '$(srcdir)/loader/multiboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/multiboot_module-multiboot.Tpo loader/$(DEPDIR)/multiboot_module-multiboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/multiboot.c' object='loader/multiboot_module-multiboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -c -o loader/multiboot_module-multiboot.obj `if test -f 'loader/multiboot.c'; then $(CYGPATH_W) 'loader/multiboot.c'; else $(CYGPATH_W) '$(srcdir)/loader/multiboot.c'; fi` + +lib/multiboot_module-cmdline.o: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -MT lib/multiboot_module-cmdline.o -MD -MP -MF lib/$(DEPDIR)/multiboot_module-cmdline.Tpo -c -o lib/multiboot_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/multiboot_module-cmdline.Tpo lib/$(DEPDIR)/multiboot_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/multiboot_module-cmdline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -c -o lib/multiboot_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c + +lib/multiboot_module-cmdline.obj: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -MT lib/multiboot_module-cmdline.obj -MD -MP -MF lib/$(DEPDIR)/multiboot_module-cmdline.Tpo -c -o lib/multiboot_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/multiboot_module-cmdline.Tpo lib/$(DEPDIR)/multiboot_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/multiboot_module-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $(multiboot_module_CFLAGS) $(CFLAGS) -c -o lib/multiboot_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` + +loader/multiboot2_module-multiboot.o: loader/multiboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -MT loader/multiboot2_module-multiboot.o -MD -MP -MF loader/$(DEPDIR)/multiboot2_module-multiboot.Tpo -c -o loader/multiboot2_module-multiboot.o `test -f 'loader/multiboot.c' || echo '$(srcdir)/'`loader/multiboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/multiboot2_module-multiboot.Tpo loader/$(DEPDIR)/multiboot2_module-multiboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/multiboot.c' object='loader/multiboot2_module-multiboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -c -o loader/multiboot2_module-multiboot.o `test -f 'loader/multiboot.c' || echo '$(srcdir)/'`loader/multiboot.c + +loader/multiboot2_module-multiboot.obj: loader/multiboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -MT loader/multiboot2_module-multiboot.obj -MD -MP -MF loader/$(DEPDIR)/multiboot2_module-multiboot.Tpo -c -o loader/multiboot2_module-multiboot.obj `if test -f 'loader/multiboot.c'; then $(CYGPATH_W) 'loader/multiboot.c'; else $(CYGPATH_W) '$(srcdir)/loader/multiboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/multiboot2_module-multiboot.Tpo loader/$(DEPDIR)/multiboot2_module-multiboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/multiboot.c' object='loader/multiboot2_module-multiboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -c -o loader/multiboot2_module-multiboot.obj `if test -f 'loader/multiboot.c'; then $(CYGPATH_W) 'loader/multiboot.c'; else $(CYGPATH_W) '$(srcdir)/loader/multiboot.c'; fi` + +lib/multiboot2_module-cmdline.o: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -MT lib/multiboot2_module-cmdline.o -MD -MP -MF lib/$(DEPDIR)/multiboot2_module-cmdline.Tpo -c -o lib/multiboot2_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/multiboot2_module-cmdline.Tpo lib/$(DEPDIR)/multiboot2_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/multiboot2_module-cmdline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -c -o lib/multiboot2_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c + +lib/multiboot2_module-cmdline.obj: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -MT lib/multiboot2_module-cmdline.obj -MD -MP -MF lib/$(DEPDIR)/multiboot2_module-cmdline.Tpo -c -o lib/multiboot2_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/multiboot2_module-cmdline.Tpo lib/$(DEPDIR)/multiboot2_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/multiboot2_module-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -c -o lib/multiboot2_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` + +loader/multiboot2_module-multiboot_mbi2.o: loader/multiboot_mbi2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -MT loader/multiboot2_module-multiboot_mbi2.o -MD -MP -MF loader/$(DEPDIR)/multiboot2_module-multiboot_mbi2.Tpo -c -o loader/multiboot2_module-multiboot_mbi2.o `test -f 'loader/multiboot_mbi2.c' || echo '$(srcdir)/'`loader/multiboot_mbi2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/multiboot2_module-multiboot_mbi2.Tpo loader/$(DEPDIR)/multiboot2_module-multiboot_mbi2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/multiboot_mbi2.c' object='loader/multiboot2_module-multiboot_mbi2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -c -o loader/multiboot2_module-multiboot_mbi2.o `test -f 'loader/multiboot_mbi2.c' || echo '$(srcdir)/'`loader/multiboot_mbi2.c + +loader/multiboot2_module-multiboot_mbi2.obj: loader/multiboot_mbi2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -MT loader/multiboot2_module-multiboot_mbi2.obj -MD -MP -MF loader/$(DEPDIR)/multiboot2_module-multiboot_mbi2.Tpo -c -o loader/multiboot2_module-multiboot_mbi2.obj `if test -f 'loader/multiboot_mbi2.c'; then $(CYGPATH_W) 'loader/multiboot_mbi2.c'; else $(CYGPATH_W) '$(srcdir)/loader/multiboot_mbi2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/multiboot2_module-multiboot_mbi2.Tpo loader/$(DEPDIR)/multiboot2_module-multiboot_mbi2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/multiboot_mbi2.c' object='loader/multiboot2_module-multiboot_mbi2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $(multiboot2_module_CFLAGS) $(CFLAGS) -c -o loader/multiboot2_module-multiboot_mbi2.obj `if test -f 'loader/multiboot_mbi2.c'; then $(CYGPATH_W) 'loader/multiboot_mbi2.c'; else $(CYGPATH_W) '$(srcdir)/loader/multiboot_mbi2.c'; fi` + +disk/ieee1275/nand_module-nand.o: disk/ieee1275/nand.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nand_module_CPPFLAGS) $(CPPFLAGS) $(nand_module_CFLAGS) $(CFLAGS) -MT disk/ieee1275/nand_module-nand.o -MD -MP -MF disk/ieee1275/$(DEPDIR)/nand_module-nand.Tpo -c -o disk/ieee1275/nand_module-nand.o `test -f 'disk/ieee1275/nand.c' || echo '$(srcdir)/'`disk/ieee1275/nand.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/ieee1275/$(DEPDIR)/nand_module-nand.Tpo disk/ieee1275/$(DEPDIR)/nand_module-nand.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ieee1275/nand.c' object='disk/ieee1275/nand_module-nand.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nand_module_CPPFLAGS) $(CPPFLAGS) $(nand_module_CFLAGS) $(CFLAGS) -c -o disk/ieee1275/nand_module-nand.o `test -f 'disk/ieee1275/nand.c' || echo '$(srcdir)/'`disk/ieee1275/nand.c + +disk/ieee1275/nand_module-nand.obj: disk/ieee1275/nand.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nand_module_CPPFLAGS) $(CPPFLAGS) $(nand_module_CFLAGS) $(CFLAGS) -MT disk/ieee1275/nand_module-nand.obj -MD -MP -MF disk/ieee1275/$(DEPDIR)/nand_module-nand.Tpo -c -o disk/ieee1275/nand_module-nand.obj `if test -f 'disk/ieee1275/nand.c'; then $(CYGPATH_W) 'disk/ieee1275/nand.c'; else $(CYGPATH_W) '$(srcdir)/disk/ieee1275/nand.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/ieee1275/$(DEPDIR)/nand_module-nand.Tpo disk/ieee1275/$(DEPDIR)/nand_module-nand.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/ieee1275/nand.c' object='disk/ieee1275/nand_module-nand.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nand_module_CPPFLAGS) $(CPPFLAGS) $(nand_module_CFLAGS) $(CFLAGS) -c -o disk/ieee1275/nand_module-nand.obj `if test -f 'disk/ieee1275/nand.c'; then $(CYGPATH_W) 'disk/ieee1275/nand.c'; else $(CYGPATH_W) '$(srcdir)/disk/ieee1275/nand.c'; fi` + +commands/nativedisk_module-nativedisk.o: commands/nativedisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $(nativedisk_module_CFLAGS) $(CFLAGS) -MT commands/nativedisk_module-nativedisk.o -MD -MP -MF commands/$(DEPDIR)/nativedisk_module-nativedisk.Tpo -c -o commands/nativedisk_module-nativedisk.o `test -f 'commands/nativedisk.c' || echo '$(srcdir)/'`commands/nativedisk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/nativedisk_module-nativedisk.Tpo commands/$(DEPDIR)/nativedisk_module-nativedisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/nativedisk.c' object='commands/nativedisk_module-nativedisk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $(nativedisk_module_CFLAGS) $(CFLAGS) -c -o commands/nativedisk_module-nativedisk.o `test -f 'commands/nativedisk.c' || echo '$(srcdir)/'`commands/nativedisk.c + +commands/nativedisk_module-nativedisk.obj: commands/nativedisk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $(nativedisk_module_CFLAGS) $(CFLAGS) -MT commands/nativedisk_module-nativedisk.obj -MD -MP -MF commands/$(DEPDIR)/nativedisk_module-nativedisk.Tpo -c -o commands/nativedisk_module-nativedisk.obj `if test -f 'commands/nativedisk.c'; then $(CYGPATH_W) 'commands/nativedisk.c'; else $(CYGPATH_W) '$(srcdir)/commands/nativedisk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/nativedisk_module-nativedisk.Tpo commands/$(DEPDIR)/nativedisk_module-nativedisk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/nativedisk.c' object='commands/nativedisk_module-nativedisk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $(nativedisk_module_CFLAGS) $(CFLAGS) -c -o commands/nativedisk_module-nativedisk.obj `if test -f 'commands/nativedisk.c'; then $(CYGPATH_W) 'commands/nativedisk.c'; else $(CYGPATH_W) '$(srcdir)/commands/nativedisk.c'; fi` + +net/net_module-net.o: net/net.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-net.o -MD -MP -MF net/$(DEPDIR)/net_module-net.Tpo -c -o net/net_module-net.o `test -f 'net/net.c' || echo '$(srcdir)/'`net/net.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-net.Tpo net/$(DEPDIR)/net_module-net.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/net.c' object='net/net_module-net.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-net.o `test -f 'net/net.c' || echo '$(srcdir)/'`net/net.c + +net/net_module-net.obj: net/net.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-net.obj -MD -MP -MF net/$(DEPDIR)/net_module-net.Tpo -c -o net/net_module-net.obj `if test -f 'net/net.c'; then $(CYGPATH_W) 'net/net.c'; else $(CYGPATH_W) '$(srcdir)/net/net.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-net.Tpo net/$(DEPDIR)/net_module-net.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/net.c' object='net/net_module-net.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-net.obj `if test -f 'net/net.c'; then $(CYGPATH_W) 'net/net.c'; else $(CYGPATH_W) '$(srcdir)/net/net.c'; fi` + +net/net_module-dns.o: net/dns.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-dns.o -MD -MP -MF net/$(DEPDIR)/net_module-dns.Tpo -c -o net/net_module-dns.o `test -f 'net/dns.c' || echo '$(srcdir)/'`net/dns.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-dns.Tpo net/$(DEPDIR)/net_module-dns.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/dns.c' object='net/net_module-dns.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-dns.o `test -f 'net/dns.c' || echo '$(srcdir)/'`net/dns.c + +net/net_module-dns.obj: net/dns.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-dns.obj -MD -MP -MF net/$(DEPDIR)/net_module-dns.Tpo -c -o net/net_module-dns.obj `if test -f 'net/dns.c'; then $(CYGPATH_W) 'net/dns.c'; else $(CYGPATH_W) '$(srcdir)/net/dns.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-dns.Tpo net/$(DEPDIR)/net_module-dns.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/dns.c' object='net/net_module-dns.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-dns.obj `if test -f 'net/dns.c'; then $(CYGPATH_W) 'net/dns.c'; else $(CYGPATH_W) '$(srcdir)/net/dns.c'; fi` + +net/net_module-bootp.o: net/bootp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-bootp.o -MD -MP -MF net/$(DEPDIR)/net_module-bootp.Tpo -c -o net/net_module-bootp.o `test -f 'net/bootp.c' || echo '$(srcdir)/'`net/bootp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-bootp.Tpo net/$(DEPDIR)/net_module-bootp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/bootp.c' object='net/net_module-bootp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-bootp.o `test -f 'net/bootp.c' || echo '$(srcdir)/'`net/bootp.c + +net/net_module-bootp.obj: net/bootp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-bootp.obj -MD -MP -MF net/$(DEPDIR)/net_module-bootp.Tpo -c -o net/net_module-bootp.obj `if test -f 'net/bootp.c'; then $(CYGPATH_W) 'net/bootp.c'; else $(CYGPATH_W) '$(srcdir)/net/bootp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-bootp.Tpo net/$(DEPDIR)/net_module-bootp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/bootp.c' object='net/net_module-bootp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-bootp.obj `if test -f 'net/bootp.c'; then $(CYGPATH_W) 'net/bootp.c'; else $(CYGPATH_W) '$(srcdir)/net/bootp.c'; fi` + +net/net_module-ip.o: net/ip.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-ip.o -MD -MP -MF net/$(DEPDIR)/net_module-ip.Tpo -c -o net/net_module-ip.o `test -f 'net/ip.c' || echo '$(srcdir)/'`net/ip.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-ip.Tpo net/$(DEPDIR)/net_module-ip.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/ip.c' object='net/net_module-ip.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-ip.o `test -f 'net/ip.c' || echo '$(srcdir)/'`net/ip.c + +net/net_module-ip.obj: net/ip.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-ip.obj -MD -MP -MF net/$(DEPDIR)/net_module-ip.Tpo -c -o net/net_module-ip.obj `if test -f 'net/ip.c'; then $(CYGPATH_W) 'net/ip.c'; else $(CYGPATH_W) '$(srcdir)/net/ip.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-ip.Tpo net/$(DEPDIR)/net_module-ip.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/ip.c' object='net/net_module-ip.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-ip.obj `if test -f 'net/ip.c'; then $(CYGPATH_W) 'net/ip.c'; else $(CYGPATH_W) '$(srcdir)/net/ip.c'; fi` + +net/net_module-udp.o: net/udp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-udp.o -MD -MP -MF net/$(DEPDIR)/net_module-udp.Tpo -c -o net/net_module-udp.o `test -f 'net/udp.c' || echo '$(srcdir)/'`net/udp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-udp.Tpo net/$(DEPDIR)/net_module-udp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/udp.c' object='net/net_module-udp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-udp.o `test -f 'net/udp.c' || echo '$(srcdir)/'`net/udp.c + +net/net_module-udp.obj: net/udp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-udp.obj -MD -MP -MF net/$(DEPDIR)/net_module-udp.Tpo -c -o net/net_module-udp.obj `if test -f 'net/udp.c'; then $(CYGPATH_W) 'net/udp.c'; else $(CYGPATH_W) '$(srcdir)/net/udp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-udp.Tpo net/$(DEPDIR)/net_module-udp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/udp.c' object='net/net_module-udp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-udp.obj `if test -f 'net/udp.c'; then $(CYGPATH_W) 'net/udp.c'; else $(CYGPATH_W) '$(srcdir)/net/udp.c'; fi` + +net/net_module-tcp.o: net/tcp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-tcp.o -MD -MP -MF net/$(DEPDIR)/net_module-tcp.Tpo -c -o net/net_module-tcp.o `test -f 'net/tcp.c' || echo '$(srcdir)/'`net/tcp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-tcp.Tpo net/$(DEPDIR)/net_module-tcp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/tcp.c' object='net/net_module-tcp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-tcp.o `test -f 'net/tcp.c' || echo '$(srcdir)/'`net/tcp.c + +net/net_module-tcp.obj: net/tcp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-tcp.obj -MD -MP -MF net/$(DEPDIR)/net_module-tcp.Tpo -c -o net/net_module-tcp.obj `if test -f 'net/tcp.c'; then $(CYGPATH_W) 'net/tcp.c'; else $(CYGPATH_W) '$(srcdir)/net/tcp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-tcp.Tpo net/$(DEPDIR)/net_module-tcp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/tcp.c' object='net/net_module-tcp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-tcp.obj `if test -f 'net/tcp.c'; then $(CYGPATH_W) 'net/tcp.c'; else $(CYGPATH_W) '$(srcdir)/net/tcp.c'; fi` + +net/net_module-icmp.o: net/icmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-icmp.o -MD -MP -MF net/$(DEPDIR)/net_module-icmp.Tpo -c -o net/net_module-icmp.o `test -f 'net/icmp.c' || echo '$(srcdir)/'`net/icmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-icmp.Tpo net/$(DEPDIR)/net_module-icmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/icmp.c' object='net/net_module-icmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-icmp.o `test -f 'net/icmp.c' || echo '$(srcdir)/'`net/icmp.c + +net/net_module-icmp.obj: net/icmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-icmp.obj -MD -MP -MF net/$(DEPDIR)/net_module-icmp.Tpo -c -o net/net_module-icmp.obj `if test -f 'net/icmp.c'; then $(CYGPATH_W) 'net/icmp.c'; else $(CYGPATH_W) '$(srcdir)/net/icmp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-icmp.Tpo net/$(DEPDIR)/net_module-icmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/icmp.c' object='net/net_module-icmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-icmp.obj `if test -f 'net/icmp.c'; then $(CYGPATH_W) 'net/icmp.c'; else $(CYGPATH_W) '$(srcdir)/net/icmp.c'; fi` + +net/net_module-icmp6.o: net/icmp6.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-icmp6.o -MD -MP -MF net/$(DEPDIR)/net_module-icmp6.Tpo -c -o net/net_module-icmp6.o `test -f 'net/icmp6.c' || echo '$(srcdir)/'`net/icmp6.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-icmp6.Tpo net/$(DEPDIR)/net_module-icmp6.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/icmp6.c' object='net/net_module-icmp6.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-icmp6.o `test -f 'net/icmp6.c' || echo '$(srcdir)/'`net/icmp6.c + +net/net_module-icmp6.obj: net/icmp6.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-icmp6.obj -MD -MP -MF net/$(DEPDIR)/net_module-icmp6.Tpo -c -o net/net_module-icmp6.obj `if test -f 'net/icmp6.c'; then $(CYGPATH_W) 'net/icmp6.c'; else $(CYGPATH_W) '$(srcdir)/net/icmp6.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-icmp6.Tpo net/$(DEPDIR)/net_module-icmp6.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/icmp6.c' object='net/net_module-icmp6.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-icmp6.obj `if test -f 'net/icmp6.c'; then $(CYGPATH_W) 'net/icmp6.c'; else $(CYGPATH_W) '$(srcdir)/net/icmp6.c'; fi` + +net/net_module-ethernet.o: net/ethernet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-ethernet.o -MD -MP -MF net/$(DEPDIR)/net_module-ethernet.Tpo -c -o net/net_module-ethernet.o `test -f 'net/ethernet.c' || echo '$(srcdir)/'`net/ethernet.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-ethernet.Tpo net/$(DEPDIR)/net_module-ethernet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/ethernet.c' object='net/net_module-ethernet.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-ethernet.o `test -f 'net/ethernet.c' || echo '$(srcdir)/'`net/ethernet.c + +net/net_module-ethernet.obj: net/ethernet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-ethernet.obj -MD -MP -MF net/$(DEPDIR)/net_module-ethernet.Tpo -c -o net/net_module-ethernet.obj `if test -f 'net/ethernet.c'; then $(CYGPATH_W) 'net/ethernet.c'; else $(CYGPATH_W) '$(srcdir)/net/ethernet.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-ethernet.Tpo net/$(DEPDIR)/net_module-ethernet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/ethernet.c' object='net/net_module-ethernet.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-ethernet.obj `if test -f 'net/ethernet.c'; then $(CYGPATH_W) 'net/ethernet.c'; else $(CYGPATH_W) '$(srcdir)/net/ethernet.c'; fi` + +net/net_module-arp.o: net/arp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-arp.o -MD -MP -MF net/$(DEPDIR)/net_module-arp.Tpo -c -o net/net_module-arp.o `test -f 'net/arp.c' || echo '$(srcdir)/'`net/arp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-arp.Tpo net/$(DEPDIR)/net_module-arp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/arp.c' object='net/net_module-arp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-arp.o `test -f 'net/arp.c' || echo '$(srcdir)/'`net/arp.c + +net/net_module-arp.obj: net/arp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-arp.obj -MD -MP -MF net/$(DEPDIR)/net_module-arp.Tpo -c -o net/net_module-arp.obj `if test -f 'net/arp.c'; then $(CYGPATH_W) 'net/arp.c'; else $(CYGPATH_W) '$(srcdir)/net/arp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-arp.Tpo net/$(DEPDIR)/net_module-arp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/arp.c' object='net/net_module-arp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-arp.obj `if test -f 'net/arp.c'; then $(CYGPATH_W) 'net/arp.c'; else $(CYGPATH_W) '$(srcdir)/net/arp.c'; fi` + +net/net_module-netbuff.o: net/netbuff.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-netbuff.o -MD -MP -MF net/$(DEPDIR)/net_module-netbuff.Tpo -c -o net/net_module-netbuff.o `test -f 'net/netbuff.c' || echo '$(srcdir)/'`net/netbuff.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-netbuff.Tpo net/$(DEPDIR)/net_module-netbuff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/netbuff.c' object='net/net_module-netbuff.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-netbuff.o `test -f 'net/netbuff.c' || echo '$(srcdir)/'`net/netbuff.c + +net/net_module-netbuff.obj: net/netbuff.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -MT net/net_module-netbuff.obj -MD -MP -MF net/$(DEPDIR)/net_module-netbuff.Tpo -c -o net/net_module-netbuff.obj `if test -f 'net/netbuff.c'; then $(CYGPATH_W) 'net/netbuff.c'; else $(CYGPATH_W) '$(srcdir)/net/netbuff.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/net_module-netbuff.Tpo net/$(DEPDIR)/net_module-netbuff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/netbuff.c' object='net/net_module-netbuff.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $(net_module_CFLAGS) $(CFLAGS) -c -o net/net_module-netbuff.obj `if test -f 'net/netbuff.c'; then $(CYGPATH_W) 'net/netbuff.c'; else $(CYGPATH_W) '$(srcdir)/net/netbuff.c'; fi` + +fs/newc_module-newc.o: fs/newc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newc_module_CPPFLAGS) $(CPPFLAGS) $(newc_module_CFLAGS) $(CFLAGS) -MT fs/newc_module-newc.o -MD -MP -MF fs/$(DEPDIR)/newc_module-newc.Tpo -c -o fs/newc_module-newc.o `test -f 'fs/newc.c' || echo '$(srcdir)/'`fs/newc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/newc_module-newc.Tpo fs/$(DEPDIR)/newc_module-newc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/newc.c' object='fs/newc_module-newc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newc_module_CPPFLAGS) $(CPPFLAGS) $(newc_module_CFLAGS) $(CFLAGS) -c -o fs/newc_module-newc.o `test -f 'fs/newc.c' || echo '$(srcdir)/'`fs/newc.c + +fs/newc_module-newc.obj: fs/newc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newc_module_CPPFLAGS) $(CPPFLAGS) $(newc_module_CFLAGS) $(CFLAGS) -MT fs/newc_module-newc.obj -MD -MP -MF fs/$(DEPDIR)/newc_module-newc.Tpo -c -o fs/newc_module-newc.obj `if test -f 'fs/newc.c'; then $(CYGPATH_W) 'fs/newc.c'; else $(CYGPATH_W) '$(srcdir)/fs/newc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/newc_module-newc.Tpo fs/$(DEPDIR)/newc_module-newc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/newc.c' object='fs/newc_module-newc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newc_module_CPPFLAGS) $(CPPFLAGS) $(newc_module_CFLAGS) $(CFLAGS) -c -o fs/newc_module-newc.obj `if test -f 'fs/newc.c'; then $(CYGPATH_W) 'fs/newc.c'; else $(CYGPATH_W) '$(srcdir)/fs/newc.c'; fi` + +fs/nilfs2_module-nilfs2.o: fs/nilfs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nilfs2_module_CPPFLAGS) $(CPPFLAGS) $(nilfs2_module_CFLAGS) $(CFLAGS) -MT fs/nilfs2_module-nilfs2.o -MD -MP -MF fs/$(DEPDIR)/nilfs2_module-nilfs2.Tpo -c -o fs/nilfs2_module-nilfs2.o `test -f 'fs/nilfs2.c' || echo '$(srcdir)/'`fs/nilfs2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/nilfs2_module-nilfs2.Tpo fs/$(DEPDIR)/nilfs2_module-nilfs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/nilfs2.c' object='fs/nilfs2_module-nilfs2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nilfs2_module_CPPFLAGS) $(CPPFLAGS) $(nilfs2_module_CFLAGS) $(CFLAGS) -c -o fs/nilfs2_module-nilfs2.o `test -f 'fs/nilfs2.c' || echo '$(srcdir)/'`fs/nilfs2.c + +fs/nilfs2_module-nilfs2.obj: fs/nilfs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nilfs2_module_CPPFLAGS) $(CPPFLAGS) $(nilfs2_module_CFLAGS) $(CFLAGS) -MT fs/nilfs2_module-nilfs2.obj -MD -MP -MF fs/$(DEPDIR)/nilfs2_module-nilfs2.Tpo -c -o fs/nilfs2_module-nilfs2.obj `if test -f 'fs/nilfs2.c'; then $(CYGPATH_W) 'fs/nilfs2.c'; else $(CYGPATH_W) '$(srcdir)/fs/nilfs2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/nilfs2_module-nilfs2.Tpo fs/$(DEPDIR)/nilfs2_module-nilfs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/nilfs2.c' object='fs/nilfs2_module-nilfs2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nilfs2_module_CPPFLAGS) $(CPPFLAGS) $(nilfs2_module_CFLAGS) $(CFLAGS) -c -o fs/nilfs2_module-nilfs2.obj `if test -f 'fs/nilfs2.c'; then $(CYGPATH_W) 'fs/nilfs2.c'; else $(CYGPATH_W) '$(srcdir)/fs/nilfs2.c'; fi` + +boot/decompressor/none_decompress_image-none.o: boot/decompressor/none.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CFLAGS) $(CFLAGS) -MT boot/decompressor/none_decompress_image-none.o -MD -MP -MF boot/decompressor/$(DEPDIR)/none_decompress_image-none.Tpo -c -o boot/decompressor/none_decompress_image-none.o `test -f 'boot/decompressor/none.c' || echo '$(srcdir)/'`boot/decompressor/none.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) boot/decompressor/$(DEPDIR)/none_decompress_image-none.Tpo boot/decompressor/$(DEPDIR)/none_decompress_image-none.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boot/decompressor/none.c' object='boot/decompressor/none_decompress_image-none.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CFLAGS) $(CFLAGS) -c -o boot/decompressor/none_decompress_image-none.o `test -f 'boot/decompressor/none.c' || echo '$(srcdir)/'`boot/decompressor/none.c + +boot/decompressor/none_decompress_image-none.obj: boot/decompressor/none.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CFLAGS) $(CFLAGS) -MT boot/decompressor/none_decompress_image-none.obj -MD -MP -MF boot/decompressor/$(DEPDIR)/none_decompress_image-none.Tpo -c -o boot/decompressor/none_decompress_image-none.obj `if test -f 'boot/decompressor/none.c'; then $(CYGPATH_W) 'boot/decompressor/none.c'; else $(CYGPATH_W) '$(srcdir)/boot/decompressor/none.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) boot/decompressor/$(DEPDIR)/none_decompress_image-none.Tpo boot/decompressor/$(DEPDIR)/none_decompress_image-none.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boot/decompressor/none.c' object='boot/decompressor/none_decompress_image-none.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(none_decompress_image_CPPFLAGS) $(CPPFLAGS) $(none_decompress_image_CFLAGS) $(CFLAGS) -c -o boot/decompressor/none_decompress_image-none.obj `if test -f 'boot/decompressor/none.c'; then $(CYGPATH_W) 'boot/decompressor/none.c'; else $(CYGPATH_W) '$(srcdir)/boot/decompressor/none.c'; fi` + +normal/normal_module-main.o: normal/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-main.o -MD -MP -MF normal/$(DEPDIR)/normal_module-main.Tpo -c -o normal/normal_module-main.o `test -f 'normal/main.c' || echo '$(srcdir)/'`normal/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-main.Tpo normal/$(DEPDIR)/normal_module-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/main.c' object='normal/normal_module-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-main.o `test -f 'normal/main.c' || echo '$(srcdir)/'`normal/main.c + +normal/normal_module-main.obj: normal/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-main.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-main.Tpo -c -o normal/normal_module-main.obj `if test -f 'normal/main.c'; then $(CYGPATH_W) 'normal/main.c'; else $(CYGPATH_W) '$(srcdir)/normal/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-main.Tpo normal/$(DEPDIR)/normal_module-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/main.c' object='normal/normal_module-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-main.obj `if test -f 'normal/main.c'; then $(CYGPATH_W) 'normal/main.c'; else $(CYGPATH_W) '$(srcdir)/normal/main.c'; fi` + +normal/normal_module-cmdline.o: normal/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-cmdline.o -MD -MP -MF normal/$(DEPDIR)/normal_module-cmdline.Tpo -c -o normal/normal_module-cmdline.o `test -f 'normal/cmdline.c' || echo '$(srcdir)/'`normal/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-cmdline.Tpo normal/$(DEPDIR)/normal_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/cmdline.c' object='normal/normal_module-cmdline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-cmdline.o `test -f 'normal/cmdline.c' || echo '$(srcdir)/'`normal/cmdline.c + +normal/normal_module-cmdline.obj: normal/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-cmdline.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-cmdline.Tpo -c -o normal/normal_module-cmdline.obj `if test -f 'normal/cmdline.c'; then $(CYGPATH_W) 'normal/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/normal/cmdline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-cmdline.Tpo normal/$(DEPDIR)/normal_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/cmdline.c' object='normal/normal_module-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-cmdline.obj `if test -f 'normal/cmdline.c'; then $(CYGPATH_W) 'normal/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/normal/cmdline.c'; fi` + +normal/normal_module-dyncmd.o: normal/dyncmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-dyncmd.o -MD -MP -MF normal/$(DEPDIR)/normal_module-dyncmd.Tpo -c -o normal/normal_module-dyncmd.o `test -f 'normal/dyncmd.c' || echo '$(srcdir)/'`normal/dyncmd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-dyncmd.Tpo normal/$(DEPDIR)/normal_module-dyncmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/dyncmd.c' object='normal/normal_module-dyncmd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-dyncmd.o `test -f 'normal/dyncmd.c' || echo '$(srcdir)/'`normal/dyncmd.c + +normal/normal_module-dyncmd.obj: normal/dyncmd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-dyncmd.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-dyncmd.Tpo -c -o normal/normal_module-dyncmd.obj `if test -f 'normal/dyncmd.c'; then $(CYGPATH_W) 'normal/dyncmd.c'; else $(CYGPATH_W) '$(srcdir)/normal/dyncmd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-dyncmd.Tpo normal/$(DEPDIR)/normal_module-dyncmd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/dyncmd.c' object='normal/normal_module-dyncmd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-dyncmd.obj `if test -f 'normal/dyncmd.c'; then $(CYGPATH_W) 'normal/dyncmd.c'; else $(CYGPATH_W) '$(srcdir)/normal/dyncmd.c'; fi` + +normal/normal_module-auth.o: normal/auth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-auth.o -MD -MP -MF normal/$(DEPDIR)/normal_module-auth.Tpo -c -o normal/normal_module-auth.o `test -f 'normal/auth.c' || echo '$(srcdir)/'`normal/auth.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-auth.Tpo normal/$(DEPDIR)/normal_module-auth.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/auth.c' object='normal/normal_module-auth.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-auth.o `test -f 'normal/auth.c' || echo '$(srcdir)/'`normal/auth.c + +normal/normal_module-auth.obj: normal/auth.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-auth.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-auth.Tpo -c -o normal/normal_module-auth.obj `if test -f 'normal/auth.c'; then $(CYGPATH_W) 'normal/auth.c'; else $(CYGPATH_W) '$(srcdir)/normal/auth.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-auth.Tpo normal/$(DEPDIR)/normal_module-auth.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/auth.c' object='normal/normal_module-auth.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-auth.obj `if test -f 'normal/auth.c'; then $(CYGPATH_W) 'normal/auth.c'; else $(CYGPATH_W) '$(srcdir)/normal/auth.c'; fi` + +normal/normal_module-autofs.o: normal/autofs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-autofs.o -MD -MP -MF normal/$(DEPDIR)/normal_module-autofs.Tpo -c -o normal/normal_module-autofs.o `test -f 'normal/autofs.c' || echo '$(srcdir)/'`normal/autofs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-autofs.Tpo normal/$(DEPDIR)/normal_module-autofs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/autofs.c' object='normal/normal_module-autofs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-autofs.o `test -f 'normal/autofs.c' || echo '$(srcdir)/'`normal/autofs.c + +normal/normal_module-autofs.obj: normal/autofs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-autofs.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-autofs.Tpo -c -o normal/normal_module-autofs.obj `if test -f 'normal/autofs.c'; then $(CYGPATH_W) 'normal/autofs.c'; else $(CYGPATH_W) '$(srcdir)/normal/autofs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-autofs.Tpo normal/$(DEPDIR)/normal_module-autofs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/autofs.c' object='normal/normal_module-autofs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-autofs.obj `if test -f 'normal/autofs.c'; then $(CYGPATH_W) 'normal/autofs.c'; else $(CYGPATH_W) '$(srcdir)/normal/autofs.c'; fi` + +normal/normal_module-color.o: normal/color.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-color.o -MD -MP -MF normal/$(DEPDIR)/normal_module-color.Tpo -c -o normal/normal_module-color.o `test -f 'normal/color.c' || echo '$(srcdir)/'`normal/color.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-color.Tpo normal/$(DEPDIR)/normal_module-color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/color.c' object='normal/normal_module-color.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-color.o `test -f 'normal/color.c' || echo '$(srcdir)/'`normal/color.c + +normal/normal_module-color.obj: normal/color.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-color.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-color.Tpo -c -o normal/normal_module-color.obj `if test -f 'normal/color.c'; then $(CYGPATH_W) 'normal/color.c'; else $(CYGPATH_W) '$(srcdir)/normal/color.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-color.Tpo normal/$(DEPDIR)/normal_module-color.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/color.c' object='normal/normal_module-color.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-color.obj `if test -f 'normal/color.c'; then $(CYGPATH_W) 'normal/color.c'; else $(CYGPATH_W) '$(srcdir)/normal/color.c'; fi` + +normal/normal_module-completion.o: normal/completion.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-completion.o -MD -MP -MF normal/$(DEPDIR)/normal_module-completion.Tpo -c -o normal/normal_module-completion.o `test -f 'normal/completion.c' || echo '$(srcdir)/'`normal/completion.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-completion.Tpo normal/$(DEPDIR)/normal_module-completion.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/completion.c' object='normal/normal_module-completion.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-completion.o `test -f 'normal/completion.c' || echo '$(srcdir)/'`normal/completion.c + +normal/normal_module-completion.obj: normal/completion.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-completion.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-completion.Tpo -c -o normal/normal_module-completion.obj `if test -f 'normal/completion.c'; then $(CYGPATH_W) 'normal/completion.c'; else $(CYGPATH_W) '$(srcdir)/normal/completion.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-completion.Tpo normal/$(DEPDIR)/normal_module-completion.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/completion.c' object='normal/normal_module-completion.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-completion.obj `if test -f 'normal/completion.c'; then $(CYGPATH_W) 'normal/completion.c'; else $(CYGPATH_W) '$(srcdir)/normal/completion.c'; fi` + +normal/normal_module-datetime.o: normal/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-datetime.o -MD -MP -MF normal/$(DEPDIR)/normal_module-datetime.Tpo -c -o normal/normal_module-datetime.o `test -f 'normal/datetime.c' || echo '$(srcdir)/'`normal/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-datetime.Tpo normal/$(DEPDIR)/normal_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/datetime.c' object='normal/normal_module-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-datetime.o `test -f 'normal/datetime.c' || echo '$(srcdir)/'`normal/datetime.c + +normal/normal_module-datetime.obj: normal/datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-datetime.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-datetime.Tpo -c -o normal/normal_module-datetime.obj `if test -f 'normal/datetime.c'; then $(CYGPATH_W) 'normal/datetime.c'; else $(CYGPATH_W) '$(srcdir)/normal/datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-datetime.Tpo normal/$(DEPDIR)/normal_module-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/datetime.c' object='normal/normal_module-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-datetime.obj `if test -f 'normal/datetime.c'; then $(CYGPATH_W) 'normal/datetime.c'; else $(CYGPATH_W) '$(srcdir)/normal/datetime.c'; fi` + +normal/normal_module-menu.o: normal/menu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-menu.o -MD -MP -MF normal/$(DEPDIR)/normal_module-menu.Tpo -c -o normal/normal_module-menu.o `test -f 'normal/menu.c' || echo '$(srcdir)/'`normal/menu.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-menu.Tpo normal/$(DEPDIR)/normal_module-menu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/menu.c' object='normal/normal_module-menu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-menu.o `test -f 'normal/menu.c' || echo '$(srcdir)/'`normal/menu.c + +normal/normal_module-menu.obj: normal/menu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-menu.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-menu.Tpo -c -o normal/normal_module-menu.obj `if test -f 'normal/menu.c'; then $(CYGPATH_W) 'normal/menu.c'; else $(CYGPATH_W) '$(srcdir)/normal/menu.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-menu.Tpo normal/$(DEPDIR)/normal_module-menu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/menu.c' object='normal/normal_module-menu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-menu.obj `if test -f 'normal/menu.c'; then $(CYGPATH_W) 'normal/menu.c'; else $(CYGPATH_W) '$(srcdir)/normal/menu.c'; fi` + +normal/normal_module-menu_entry.o: normal/menu_entry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-menu_entry.o -MD -MP -MF normal/$(DEPDIR)/normal_module-menu_entry.Tpo -c -o normal/normal_module-menu_entry.o `test -f 'normal/menu_entry.c' || echo '$(srcdir)/'`normal/menu_entry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-menu_entry.Tpo normal/$(DEPDIR)/normal_module-menu_entry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/menu_entry.c' object='normal/normal_module-menu_entry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-menu_entry.o `test -f 'normal/menu_entry.c' || echo '$(srcdir)/'`normal/menu_entry.c + +normal/normal_module-menu_entry.obj: normal/menu_entry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-menu_entry.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-menu_entry.Tpo -c -o normal/normal_module-menu_entry.obj `if test -f 'normal/menu_entry.c'; then $(CYGPATH_W) 'normal/menu_entry.c'; else $(CYGPATH_W) '$(srcdir)/normal/menu_entry.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-menu_entry.Tpo normal/$(DEPDIR)/normal_module-menu_entry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/menu_entry.c' object='normal/normal_module-menu_entry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-menu_entry.obj `if test -f 'normal/menu_entry.c'; then $(CYGPATH_W) 'normal/menu_entry.c'; else $(CYGPATH_W) '$(srcdir)/normal/menu_entry.c'; fi` + +normal/normal_module-menu_text.o: normal/menu_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-menu_text.o -MD -MP -MF normal/$(DEPDIR)/normal_module-menu_text.Tpo -c -o normal/normal_module-menu_text.o `test -f 'normal/menu_text.c' || echo '$(srcdir)/'`normal/menu_text.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-menu_text.Tpo normal/$(DEPDIR)/normal_module-menu_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/menu_text.c' object='normal/normal_module-menu_text.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-menu_text.o `test -f 'normal/menu_text.c' || echo '$(srcdir)/'`normal/menu_text.c + +normal/normal_module-menu_text.obj: normal/menu_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-menu_text.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-menu_text.Tpo -c -o normal/normal_module-menu_text.obj `if test -f 'normal/menu_text.c'; then $(CYGPATH_W) 'normal/menu_text.c'; else $(CYGPATH_W) '$(srcdir)/normal/menu_text.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-menu_text.Tpo normal/$(DEPDIR)/normal_module-menu_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/menu_text.c' object='normal/normal_module-menu_text.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-menu_text.obj `if test -f 'normal/menu_text.c'; then $(CYGPATH_W) 'normal/menu_text.c'; else $(CYGPATH_W) '$(srcdir)/normal/menu_text.c'; fi` + +normal/normal_module-misc.o: normal/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-misc.o -MD -MP -MF normal/$(DEPDIR)/normal_module-misc.Tpo -c -o normal/normal_module-misc.o `test -f 'normal/misc.c' || echo '$(srcdir)/'`normal/misc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-misc.Tpo normal/$(DEPDIR)/normal_module-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/misc.c' object='normal/normal_module-misc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-misc.o `test -f 'normal/misc.c' || echo '$(srcdir)/'`normal/misc.c + +normal/normal_module-misc.obj: normal/misc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-misc.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-misc.Tpo -c -o normal/normal_module-misc.obj `if test -f 'normal/misc.c'; then $(CYGPATH_W) 'normal/misc.c'; else $(CYGPATH_W) '$(srcdir)/normal/misc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-misc.Tpo normal/$(DEPDIR)/normal_module-misc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/misc.c' object='normal/normal_module-misc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-misc.obj `if test -f 'normal/misc.c'; then $(CYGPATH_W) 'normal/misc.c'; else $(CYGPATH_W) '$(srcdir)/normal/misc.c'; fi` + +normal/normal_module-crypto.o: normal/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-crypto.o -MD -MP -MF normal/$(DEPDIR)/normal_module-crypto.Tpo -c -o normal/normal_module-crypto.o `test -f 'normal/crypto.c' || echo '$(srcdir)/'`normal/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-crypto.Tpo normal/$(DEPDIR)/normal_module-crypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/crypto.c' object='normal/normal_module-crypto.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-crypto.o `test -f 'normal/crypto.c' || echo '$(srcdir)/'`normal/crypto.c + +normal/normal_module-crypto.obj: normal/crypto.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-crypto.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-crypto.Tpo -c -o normal/normal_module-crypto.obj `if test -f 'normal/crypto.c'; then $(CYGPATH_W) 'normal/crypto.c'; else $(CYGPATH_W) '$(srcdir)/normal/crypto.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-crypto.Tpo normal/$(DEPDIR)/normal_module-crypto.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/crypto.c' object='normal/normal_module-crypto.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-crypto.obj `if test -f 'normal/crypto.c'; then $(CYGPATH_W) 'normal/crypto.c'; else $(CYGPATH_W) '$(srcdir)/normal/crypto.c'; fi` + +normal/normal_module-term.o: normal/term.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-term.o -MD -MP -MF normal/$(DEPDIR)/normal_module-term.Tpo -c -o normal/normal_module-term.o `test -f 'normal/term.c' || echo '$(srcdir)/'`normal/term.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-term.Tpo normal/$(DEPDIR)/normal_module-term.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/term.c' object='normal/normal_module-term.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-term.o `test -f 'normal/term.c' || echo '$(srcdir)/'`normal/term.c + +normal/normal_module-term.obj: normal/term.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-term.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-term.Tpo -c -o normal/normal_module-term.obj `if test -f 'normal/term.c'; then $(CYGPATH_W) 'normal/term.c'; else $(CYGPATH_W) '$(srcdir)/normal/term.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-term.Tpo normal/$(DEPDIR)/normal_module-term.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/term.c' object='normal/normal_module-term.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-term.obj `if test -f 'normal/term.c'; then $(CYGPATH_W) 'normal/term.c'; else $(CYGPATH_W) '$(srcdir)/normal/term.c'; fi` + +normal/normal_module-context.o: normal/context.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-context.o -MD -MP -MF normal/$(DEPDIR)/normal_module-context.Tpo -c -o normal/normal_module-context.o `test -f 'normal/context.c' || echo '$(srcdir)/'`normal/context.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-context.Tpo normal/$(DEPDIR)/normal_module-context.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/context.c' object='normal/normal_module-context.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-context.o `test -f 'normal/context.c' || echo '$(srcdir)/'`normal/context.c + +normal/normal_module-context.obj: normal/context.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-context.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-context.Tpo -c -o normal/normal_module-context.obj `if test -f 'normal/context.c'; then $(CYGPATH_W) 'normal/context.c'; else $(CYGPATH_W) '$(srcdir)/normal/context.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-context.Tpo normal/$(DEPDIR)/normal_module-context.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/context.c' object='normal/normal_module-context.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-context.obj `if test -f 'normal/context.c'; then $(CYGPATH_W) 'normal/context.c'; else $(CYGPATH_W) '$(srcdir)/normal/context.c'; fi` + +normal/normal_module-charset.o: normal/charset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-charset.o -MD -MP -MF normal/$(DEPDIR)/normal_module-charset.Tpo -c -o normal/normal_module-charset.o `test -f 'normal/charset.c' || echo '$(srcdir)/'`normal/charset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-charset.Tpo normal/$(DEPDIR)/normal_module-charset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/charset.c' object='normal/normal_module-charset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-charset.o `test -f 'normal/charset.c' || echo '$(srcdir)/'`normal/charset.c + +normal/normal_module-charset.obj: normal/charset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal/normal_module-charset.obj -MD -MP -MF normal/$(DEPDIR)/normal_module-charset.Tpo -c -o normal/normal_module-charset.obj `if test -f 'normal/charset.c'; then $(CYGPATH_W) 'normal/charset.c'; else $(CYGPATH_W) '$(srcdir)/normal/charset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) normal/$(DEPDIR)/normal_module-charset.Tpo normal/$(DEPDIR)/normal_module-charset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='normal/charset.c' object='normal/normal_module-charset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal/normal_module-charset.obj `if test -f 'normal/charset.c'; then $(CYGPATH_W) 'normal/charset.c'; else $(CYGPATH_W) '$(srcdir)/normal/charset.c'; fi` + +lib/normal_module-getline.o: lib/getline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT lib/normal_module-getline.o -MD -MP -MF lib/$(DEPDIR)/normal_module-getline.Tpo -c -o lib/normal_module-getline.o `test -f 'lib/getline.c' || echo '$(srcdir)/'`lib/getline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/normal_module-getline.Tpo lib/$(DEPDIR)/normal_module-getline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/getline.c' object='lib/normal_module-getline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o lib/normal_module-getline.o `test -f 'lib/getline.c' || echo '$(srcdir)/'`lib/getline.c + +lib/normal_module-getline.obj: lib/getline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT lib/normal_module-getline.obj -MD -MP -MF lib/$(DEPDIR)/normal_module-getline.Tpo -c -o lib/normal_module-getline.obj `if test -f 'lib/getline.c'; then $(CYGPATH_W) 'lib/getline.c'; else $(CYGPATH_W) '$(srcdir)/lib/getline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/normal_module-getline.Tpo lib/$(DEPDIR)/normal_module-getline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/getline.c' object='lib/normal_module-getline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o lib/normal_module-getline.obj `if test -f 'lib/getline.c'; then $(CYGPATH_W) 'lib/getline.c'; else $(CYGPATH_W) '$(srcdir)/lib/getline.c'; fi` + +script/normal_module-main.o: script/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-main.o -MD -MP -MF script/$(DEPDIR)/normal_module-main.Tpo -c -o script/normal_module-main.o `test -f 'script/main.c' || echo '$(srcdir)/'`script/main.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-main.Tpo script/$(DEPDIR)/normal_module-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/main.c' object='script/normal_module-main.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-main.o `test -f 'script/main.c' || echo '$(srcdir)/'`script/main.c + +script/normal_module-main.obj: script/main.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-main.obj -MD -MP -MF script/$(DEPDIR)/normal_module-main.Tpo -c -o script/normal_module-main.obj `if test -f 'script/main.c'; then $(CYGPATH_W) 'script/main.c'; else $(CYGPATH_W) '$(srcdir)/script/main.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-main.Tpo script/$(DEPDIR)/normal_module-main.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/main.c' object='script/normal_module-main.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-main.obj `if test -f 'script/main.c'; then $(CYGPATH_W) 'script/main.c'; else $(CYGPATH_W) '$(srcdir)/script/main.c'; fi` + +script/normal_module-script.o: script/script.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-script.o -MD -MP -MF script/$(DEPDIR)/normal_module-script.Tpo -c -o script/normal_module-script.o `test -f 'script/script.c' || echo '$(srcdir)/'`script/script.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-script.Tpo script/$(DEPDIR)/normal_module-script.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/script.c' object='script/normal_module-script.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-script.o `test -f 'script/script.c' || echo '$(srcdir)/'`script/script.c + +script/normal_module-script.obj: script/script.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-script.obj -MD -MP -MF script/$(DEPDIR)/normal_module-script.Tpo -c -o script/normal_module-script.obj `if test -f 'script/script.c'; then $(CYGPATH_W) 'script/script.c'; else $(CYGPATH_W) '$(srcdir)/script/script.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-script.Tpo script/$(DEPDIR)/normal_module-script.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/script.c' object='script/normal_module-script.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-script.obj `if test -f 'script/script.c'; then $(CYGPATH_W) 'script/script.c'; else $(CYGPATH_W) '$(srcdir)/script/script.c'; fi` + +script/normal_module-execute.o: script/execute.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-execute.o -MD -MP -MF script/$(DEPDIR)/normal_module-execute.Tpo -c -o script/normal_module-execute.o `test -f 'script/execute.c' || echo '$(srcdir)/'`script/execute.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-execute.Tpo script/$(DEPDIR)/normal_module-execute.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/execute.c' object='script/normal_module-execute.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-execute.o `test -f 'script/execute.c' || echo '$(srcdir)/'`script/execute.c + +script/normal_module-execute.obj: script/execute.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-execute.obj -MD -MP -MF script/$(DEPDIR)/normal_module-execute.Tpo -c -o script/normal_module-execute.obj `if test -f 'script/execute.c'; then $(CYGPATH_W) 'script/execute.c'; else $(CYGPATH_W) '$(srcdir)/script/execute.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-execute.Tpo script/$(DEPDIR)/normal_module-execute.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/execute.c' object='script/normal_module-execute.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-execute.obj `if test -f 'script/execute.c'; then $(CYGPATH_W) 'script/execute.c'; else $(CYGPATH_W) '$(srcdir)/script/execute.c'; fi` + +script/normal_module-function.o: script/function.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-function.o -MD -MP -MF script/$(DEPDIR)/normal_module-function.Tpo -c -o script/normal_module-function.o `test -f 'script/function.c' || echo '$(srcdir)/'`script/function.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-function.Tpo script/$(DEPDIR)/normal_module-function.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/function.c' object='script/normal_module-function.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-function.o `test -f 'script/function.c' || echo '$(srcdir)/'`script/function.c + +script/normal_module-function.obj: script/function.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-function.obj -MD -MP -MF script/$(DEPDIR)/normal_module-function.Tpo -c -o script/normal_module-function.obj `if test -f 'script/function.c'; then $(CYGPATH_W) 'script/function.c'; else $(CYGPATH_W) '$(srcdir)/script/function.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-function.Tpo script/$(DEPDIR)/normal_module-function.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/function.c' object='script/normal_module-function.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-function.obj `if test -f 'script/function.c'; then $(CYGPATH_W) 'script/function.c'; else $(CYGPATH_W) '$(srcdir)/script/function.c'; fi` + +script/normal_module-lexer.o: script/lexer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-lexer.o -MD -MP -MF script/$(DEPDIR)/normal_module-lexer.Tpo -c -o script/normal_module-lexer.o `test -f 'script/lexer.c' || echo '$(srcdir)/'`script/lexer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-lexer.Tpo script/$(DEPDIR)/normal_module-lexer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/lexer.c' object='script/normal_module-lexer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-lexer.o `test -f 'script/lexer.c' || echo '$(srcdir)/'`script/lexer.c + +script/normal_module-lexer.obj: script/lexer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-lexer.obj -MD -MP -MF script/$(DEPDIR)/normal_module-lexer.Tpo -c -o script/normal_module-lexer.obj `if test -f 'script/lexer.c'; then $(CYGPATH_W) 'script/lexer.c'; else $(CYGPATH_W) '$(srcdir)/script/lexer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-lexer.Tpo script/$(DEPDIR)/normal_module-lexer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/lexer.c' object='script/normal_module-lexer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-lexer.obj `if test -f 'script/lexer.c'; then $(CYGPATH_W) 'script/lexer.c'; else $(CYGPATH_W) '$(srcdir)/script/lexer.c'; fi` + +script/normal_module-argv.o: script/argv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-argv.o -MD -MP -MF script/$(DEPDIR)/normal_module-argv.Tpo -c -o script/normal_module-argv.o `test -f 'script/argv.c' || echo '$(srcdir)/'`script/argv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-argv.Tpo script/$(DEPDIR)/normal_module-argv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/argv.c' object='script/normal_module-argv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-argv.o `test -f 'script/argv.c' || echo '$(srcdir)/'`script/argv.c + +script/normal_module-argv.obj: script/argv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT script/normal_module-argv.obj -MD -MP -MF script/$(DEPDIR)/normal_module-argv.Tpo -c -o script/normal_module-argv.obj `if test -f 'script/argv.c'; then $(CYGPATH_W) 'script/argv.c'; else $(CYGPATH_W) '$(srcdir)/script/argv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) script/$(DEPDIR)/normal_module-argv.Tpo script/$(DEPDIR)/normal_module-argv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='script/argv.c' object='script/normal_module-argv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o script/normal_module-argv.obj `if test -f 'script/argv.c'; then $(CYGPATH_W) 'script/argv.c'; else $(CYGPATH_W) '$(srcdir)/script/argv.c'; fi` + +commands/normal_module-menuentry.o: commands/menuentry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT commands/normal_module-menuentry.o -MD -MP -MF commands/$(DEPDIR)/normal_module-menuentry.Tpo -c -o commands/normal_module-menuentry.o `test -f 'commands/menuentry.c' || echo '$(srcdir)/'`commands/menuentry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/normal_module-menuentry.Tpo commands/$(DEPDIR)/normal_module-menuentry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/menuentry.c' object='commands/normal_module-menuentry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o commands/normal_module-menuentry.o `test -f 'commands/menuentry.c' || echo '$(srcdir)/'`commands/menuentry.c + +commands/normal_module-menuentry.obj: commands/menuentry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT commands/normal_module-menuentry.obj -MD -MP -MF commands/$(DEPDIR)/normal_module-menuentry.Tpo -c -o commands/normal_module-menuentry.obj `if test -f 'commands/menuentry.c'; then $(CYGPATH_W) 'commands/menuentry.c'; else $(CYGPATH_W) '$(srcdir)/commands/menuentry.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/normal_module-menuentry.Tpo commands/$(DEPDIR)/normal_module-menuentry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/menuentry.c' object='commands/normal_module-menuentry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o commands/normal_module-menuentry.obj `if test -f 'commands/menuentry.c'; then $(CYGPATH_W) 'commands/menuentry.c'; else $(CYGPATH_W) '$(srcdir)/commands/menuentry.c'; fi` + +normal_module-unidata.o: unidata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal_module-unidata.o -MD -MP -MF $(DEPDIR)/normal_module-unidata.Tpo -c -o normal_module-unidata.o `test -f 'unidata.c' || echo '$(srcdir)/'`unidata.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normal_module-unidata.Tpo $(DEPDIR)/normal_module-unidata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unidata.c' object='normal_module-unidata.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal_module-unidata.o `test -f 'unidata.c' || echo '$(srcdir)/'`unidata.c + +normal_module-unidata.obj: unidata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal_module-unidata.obj -MD -MP -MF $(DEPDIR)/normal_module-unidata.Tpo -c -o normal_module-unidata.obj `if test -f 'unidata.c'; then $(CYGPATH_W) 'unidata.c'; else $(CYGPATH_W) '$(srcdir)/unidata.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normal_module-unidata.Tpo $(DEPDIR)/normal_module-unidata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unidata.c' object='normal_module-unidata.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal_module-unidata.obj `if test -f 'unidata.c'; then $(CYGPATH_W) 'unidata.c'; else $(CYGPATH_W) '$(srcdir)/unidata.c'; fi` + +normal_module-grub_script.tab.o: grub_script.tab.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal_module-grub_script.tab.o -MD -MP -MF $(DEPDIR)/normal_module-grub_script.tab.Tpo -c -o normal_module-grub_script.tab.o `test -f 'grub_script.tab.c' || echo '$(srcdir)/'`grub_script.tab.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normal_module-grub_script.tab.Tpo $(DEPDIR)/normal_module-grub_script.tab.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.tab.c' object='normal_module-grub_script.tab.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal_module-grub_script.tab.o `test -f 'grub_script.tab.c' || echo '$(srcdir)/'`grub_script.tab.c + +normal_module-grub_script.tab.obj: grub_script.tab.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal_module-grub_script.tab.obj -MD -MP -MF $(DEPDIR)/normal_module-grub_script.tab.Tpo -c -o normal_module-grub_script.tab.obj `if test -f 'grub_script.tab.c'; then $(CYGPATH_W) 'grub_script.tab.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.tab.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normal_module-grub_script.tab.Tpo $(DEPDIR)/normal_module-grub_script.tab.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.tab.c' object='normal_module-grub_script.tab.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal_module-grub_script.tab.obj `if test -f 'grub_script.tab.c'; then $(CYGPATH_W) 'grub_script.tab.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.tab.c'; fi` + +normal_module-grub_script.yy.o: grub_script.yy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal_module-grub_script.yy.o -MD -MP -MF $(DEPDIR)/normal_module-grub_script.yy.Tpo -c -o normal_module-grub_script.yy.o `test -f 'grub_script.yy.c' || echo '$(srcdir)/'`grub_script.yy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normal_module-grub_script.yy.Tpo $(DEPDIR)/normal_module-grub_script.yy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.yy.c' object='normal_module-grub_script.yy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal_module-grub_script.yy.o `test -f 'grub_script.yy.c' || echo '$(srcdir)/'`grub_script.yy.c + +normal_module-grub_script.yy.obj: grub_script.yy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -MT normal_module-grub_script.yy.obj -MD -MP -MF $(DEPDIR)/normal_module-grub_script.yy.Tpo -c -o normal_module-grub_script.yy.obj `if test -f 'grub_script.yy.c'; then $(CYGPATH_W) 'grub_script.yy.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.yy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normal_module-grub_script.yy.Tpo $(DEPDIR)/normal_module-grub_script.yy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='grub_script.yy.c' object='normal_module-grub_script.yy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $(normal_module_CFLAGS) $(CFLAGS) -c -o normal_module-grub_script.yy.obj `if test -f 'grub_script.yy.c'; then $(CYGPATH_W) 'grub_script.yy.c'; else $(CYGPATH_W) '$(srcdir)/grub_script.yy.c'; fi` + +fs/ntfs_module-ntfs.o: fs/ntfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfs_module_CPPFLAGS) $(CPPFLAGS) $(ntfs_module_CFLAGS) $(CFLAGS) -MT fs/ntfs_module-ntfs.o -MD -MP -MF fs/$(DEPDIR)/ntfs_module-ntfs.Tpo -c -o fs/ntfs_module-ntfs.o `test -f 'fs/ntfs.c' || echo '$(srcdir)/'`fs/ntfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ntfs_module-ntfs.Tpo fs/$(DEPDIR)/ntfs_module-ntfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ntfs.c' object='fs/ntfs_module-ntfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfs_module_CPPFLAGS) $(CPPFLAGS) $(ntfs_module_CFLAGS) $(CFLAGS) -c -o fs/ntfs_module-ntfs.o `test -f 'fs/ntfs.c' || echo '$(srcdir)/'`fs/ntfs.c + +fs/ntfs_module-ntfs.obj: fs/ntfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfs_module_CPPFLAGS) $(CPPFLAGS) $(ntfs_module_CFLAGS) $(CFLAGS) -MT fs/ntfs_module-ntfs.obj -MD -MP -MF fs/$(DEPDIR)/ntfs_module-ntfs.Tpo -c -o fs/ntfs_module-ntfs.obj `if test -f 'fs/ntfs.c'; then $(CYGPATH_W) 'fs/ntfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/ntfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ntfs_module-ntfs.Tpo fs/$(DEPDIR)/ntfs_module-ntfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ntfs.c' object='fs/ntfs_module-ntfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfs_module_CPPFLAGS) $(CPPFLAGS) $(ntfs_module_CFLAGS) $(CFLAGS) -c -o fs/ntfs_module-ntfs.obj `if test -f 'fs/ntfs.c'; then $(CYGPATH_W) 'fs/ntfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/ntfs.c'; fi` + +fs/ntfscomp_module-ntfscomp.o: fs/ntfscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfscomp_module_CPPFLAGS) $(CPPFLAGS) $(ntfscomp_module_CFLAGS) $(CFLAGS) -MT fs/ntfscomp_module-ntfscomp.o -MD -MP -MF fs/$(DEPDIR)/ntfscomp_module-ntfscomp.Tpo -c -o fs/ntfscomp_module-ntfscomp.o `test -f 'fs/ntfscomp.c' || echo '$(srcdir)/'`fs/ntfscomp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ntfscomp_module-ntfscomp.Tpo fs/$(DEPDIR)/ntfscomp_module-ntfscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ntfscomp.c' object='fs/ntfscomp_module-ntfscomp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfscomp_module_CPPFLAGS) $(CPPFLAGS) $(ntfscomp_module_CFLAGS) $(CFLAGS) -c -o fs/ntfscomp_module-ntfscomp.o `test -f 'fs/ntfscomp.c' || echo '$(srcdir)/'`fs/ntfscomp.c + +fs/ntfscomp_module-ntfscomp.obj: fs/ntfscomp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfscomp_module_CPPFLAGS) $(CPPFLAGS) $(ntfscomp_module_CFLAGS) $(CFLAGS) -MT fs/ntfscomp_module-ntfscomp.obj -MD -MP -MF fs/$(DEPDIR)/ntfscomp_module-ntfscomp.Tpo -c -o fs/ntfscomp_module-ntfscomp.obj `if test -f 'fs/ntfscomp.c'; then $(CYGPATH_W) 'fs/ntfscomp.c'; else $(CYGPATH_W) '$(srcdir)/fs/ntfscomp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ntfscomp_module-ntfscomp.Tpo fs/$(DEPDIR)/ntfscomp_module-ntfscomp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ntfscomp.c' object='fs/ntfscomp_module-ntfscomp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfscomp_module_CPPFLAGS) $(CPPFLAGS) $(ntfscomp_module_CFLAGS) $(CFLAGS) -c -o fs/ntfscomp_module-ntfscomp.obj `if test -f 'fs/ntfscomp.c'; then $(CYGPATH_W) 'fs/ntfscomp.c'; else $(CYGPATH_W) '$(srcdir)/fs/ntfscomp.c'; fi` + +loader/i386/pc/ntldr_module-ntldr.o: loader/i386/pc/ntldr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntldr_module_CPPFLAGS) $(CPPFLAGS) $(ntldr_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/ntldr_module-ntldr.o -MD -MP -MF loader/i386/pc/$(DEPDIR)/ntldr_module-ntldr.Tpo -c -o loader/i386/pc/ntldr_module-ntldr.o `test -f 'loader/i386/pc/ntldr.c' || echo '$(srcdir)/'`loader/i386/pc/ntldr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/ntldr_module-ntldr.Tpo loader/i386/pc/$(DEPDIR)/ntldr_module-ntldr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/ntldr.c' object='loader/i386/pc/ntldr_module-ntldr.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntldr_module_CPPFLAGS) $(CPPFLAGS) $(ntldr_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/ntldr_module-ntldr.o `test -f 'loader/i386/pc/ntldr.c' || echo '$(srcdir)/'`loader/i386/pc/ntldr.c + +loader/i386/pc/ntldr_module-ntldr.obj: loader/i386/pc/ntldr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntldr_module_CPPFLAGS) $(CPPFLAGS) $(ntldr_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/ntldr_module-ntldr.obj -MD -MP -MF loader/i386/pc/$(DEPDIR)/ntldr_module-ntldr.Tpo -c -o loader/i386/pc/ntldr_module-ntldr.obj `if test -f 'loader/i386/pc/ntldr.c'; then $(CYGPATH_W) 'loader/i386/pc/ntldr.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/ntldr.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/ntldr_module-ntldr.Tpo loader/i386/pc/$(DEPDIR)/ntldr_module-ntldr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/ntldr.c' object='loader/i386/pc/ntldr_module-ntldr.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntldr_module_CPPFLAGS) $(CPPFLAGS) $(ntldr_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/ntldr_module-ntldr.obj `if test -f 'loader/i386/pc/ntldr.c'; then $(CYGPATH_W) 'loader/i386/pc/ntldr.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/ntldr.c'; fi` + +fs/odc_module-odc.o: fs/odc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(odc_module_CPPFLAGS) $(CPPFLAGS) $(odc_module_CFLAGS) $(CFLAGS) -MT fs/odc_module-odc.o -MD -MP -MF fs/$(DEPDIR)/odc_module-odc.Tpo -c -o fs/odc_module-odc.o `test -f 'fs/odc.c' || echo '$(srcdir)/'`fs/odc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/odc_module-odc.Tpo fs/$(DEPDIR)/odc_module-odc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/odc.c' object='fs/odc_module-odc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(odc_module_CPPFLAGS) $(CPPFLAGS) $(odc_module_CFLAGS) $(CFLAGS) -c -o fs/odc_module-odc.o `test -f 'fs/odc.c' || echo '$(srcdir)/'`fs/odc.c + +fs/odc_module-odc.obj: fs/odc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(odc_module_CPPFLAGS) $(CPPFLAGS) $(odc_module_CFLAGS) $(CFLAGS) -MT fs/odc_module-odc.obj -MD -MP -MF fs/$(DEPDIR)/odc_module-odc.Tpo -c -o fs/odc_module-odc.obj `if test -f 'fs/odc.c'; then $(CYGPATH_W) 'fs/odc.c'; else $(CYGPATH_W) '$(srcdir)/fs/odc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/odc_module-odc.Tpo fs/$(DEPDIR)/odc_module-odc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/odc.c' object='fs/odc_module-odc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(odc_module_CPPFLAGS) $(CPPFLAGS) $(odc_module_CFLAGS) $(CFLAGS) -c -o fs/odc_module-odc.obj `if test -f 'fs/odc.c'; then $(CYGPATH_W) 'fs/odc.c'; else $(CYGPATH_W) '$(srcdir)/fs/odc.c'; fi` + +io/offsetio_module-offset.o: io/offset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(offsetio_module_CPPFLAGS) $(CPPFLAGS) $(offsetio_module_CFLAGS) $(CFLAGS) -MT io/offsetio_module-offset.o -MD -MP -MF io/$(DEPDIR)/offsetio_module-offset.Tpo -c -o io/offsetio_module-offset.o `test -f 'io/offset.c' || echo '$(srcdir)/'`io/offset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/offsetio_module-offset.Tpo io/$(DEPDIR)/offsetio_module-offset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/offset.c' object='io/offsetio_module-offset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(offsetio_module_CPPFLAGS) $(CPPFLAGS) $(offsetio_module_CFLAGS) $(CFLAGS) -c -o io/offsetio_module-offset.o `test -f 'io/offset.c' || echo '$(srcdir)/'`io/offset.c + +io/offsetio_module-offset.obj: io/offset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(offsetio_module_CPPFLAGS) $(CPPFLAGS) $(offsetio_module_CFLAGS) $(CFLAGS) -MT io/offsetio_module-offset.obj -MD -MP -MF io/$(DEPDIR)/offsetio_module-offset.Tpo -c -o io/offsetio_module-offset.obj `if test -f 'io/offset.c'; then $(CYGPATH_W) 'io/offset.c'; else $(CYGPATH_W) '$(srcdir)/io/offset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/offsetio_module-offset.Tpo io/$(DEPDIR)/offsetio_module-offset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/offset.c' object='io/offsetio_module-offset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(offsetio_module_CPPFLAGS) $(CPPFLAGS) $(offsetio_module_CFLAGS) $(CFLAGS) -c -o io/offsetio_module-offset.obj `if test -f 'io/offset.c'; then $(CYGPATH_W) 'io/offset.c'; else $(CYGPATH_W) '$(srcdir)/io/offset.c'; fi` + +net/drivers/ieee1275/ofnet_module-ofnet.o: net/drivers/ieee1275/ofnet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $(ofnet_module_CFLAGS) $(CFLAGS) -MT net/drivers/ieee1275/ofnet_module-ofnet.o -MD -MP -MF net/drivers/ieee1275/$(DEPDIR)/ofnet_module-ofnet.Tpo -c -o net/drivers/ieee1275/ofnet_module-ofnet.o `test -f 'net/drivers/ieee1275/ofnet.c' || echo '$(srcdir)/'`net/drivers/ieee1275/ofnet.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/ieee1275/$(DEPDIR)/ofnet_module-ofnet.Tpo net/drivers/ieee1275/$(DEPDIR)/ofnet_module-ofnet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/ieee1275/ofnet.c' object='net/drivers/ieee1275/ofnet_module-ofnet.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $(ofnet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/ieee1275/ofnet_module-ofnet.o `test -f 'net/drivers/ieee1275/ofnet.c' || echo '$(srcdir)/'`net/drivers/ieee1275/ofnet.c + +net/drivers/ieee1275/ofnet_module-ofnet.obj: net/drivers/ieee1275/ofnet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $(ofnet_module_CFLAGS) $(CFLAGS) -MT net/drivers/ieee1275/ofnet_module-ofnet.obj -MD -MP -MF net/drivers/ieee1275/$(DEPDIR)/ofnet_module-ofnet.Tpo -c -o net/drivers/ieee1275/ofnet_module-ofnet.obj `if test -f 'net/drivers/ieee1275/ofnet.c'; then $(CYGPATH_W) 'net/drivers/ieee1275/ofnet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/ieee1275/ofnet.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/ieee1275/$(DEPDIR)/ofnet_module-ofnet.Tpo net/drivers/ieee1275/$(DEPDIR)/ofnet_module-ofnet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/ieee1275/ofnet.c' object='net/drivers/ieee1275/ofnet_module-ofnet.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $(ofnet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/ieee1275/ofnet_module-ofnet.obj `if test -f 'net/drivers/ieee1275/ofnet.c'; then $(CYGPATH_W) 'net/drivers/ieee1275/ofnet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/ieee1275/ofnet.c'; fi` + +bus/usb/ohci_module-ohci.o: bus/usb/ohci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $(ohci_module_CFLAGS) $(CFLAGS) -MT bus/usb/ohci_module-ohci.o -MD -MP -MF bus/usb/$(DEPDIR)/ohci_module-ohci.Tpo -c -o bus/usb/ohci_module-ohci.o `test -f 'bus/usb/ohci.c' || echo '$(srcdir)/'`bus/usb/ohci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/ohci_module-ohci.Tpo bus/usb/$(DEPDIR)/ohci_module-ohci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/ohci.c' object='bus/usb/ohci_module-ohci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $(ohci_module_CFLAGS) $(CFLAGS) -c -o bus/usb/ohci_module-ohci.o `test -f 'bus/usb/ohci.c' || echo '$(srcdir)/'`bus/usb/ohci.c + +bus/usb/ohci_module-ohci.obj: bus/usb/ohci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $(ohci_module_CFLAGS) $(CFLAGS) -MT bus/usb/ohci_module-ohci.obj -MD -MP -MF bus/usb/$(DEPDIR)/ohci_module-ohci.Tpo -c -o bus/usb/ohci_module-ohci.obj `if test -f 'bus/usb/ohci.c'; then $(CYGPATH_W) 'bus/usb/ohci.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/ohci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/ohci_module-ohci.Tpo bus/usb/$(DEPDIR)/ohci_module-ohci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/ohci.c' object='bus/usb/ohci_module-ohci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $(ohci_module_CFLAGS) $(CFLAGS) -c -o bus/usb/ohci_module-ohci.obj `if test -f 'bus/usb/ohci.c'; then $(CYGPATH_W) 'bus/usb/ohci.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/ohci.c'; fi` + +partmap/part_acorn_module-acorn.o: partmap/acorn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_acorn_module_CPPFLAGS) $(CPPFLAGS) $(part_acorn_module_CFLAGS) $(CFLAGS) -MT partmap/part_acorn_module-acorn.o -MD -MP -MF partmap/$(DEPDIR)/part_acorn_module-acorn.Tpo -c -o partmap/part_acorn_module-acorn.o `test -f 'partmap/acorn.c' || echo '$(srcdir)/'`partmap/acorn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_acorn_module-acorn.Tpo partmap/$(DEPDIR)/part_acorn_module-acorn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/acorn.c' object='partmap/part_acorn_module-acorn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_acorn_module_CPPFLAGS) $(CPPFLAGS) $(part_acorn_module_CFLAGS) $(CFLAGS) -c -o partmap/part_acorn_module-acorn.o `test -f 'partmap/acorn.c' || echo '$(srcdir)/'`partmap/acorn.c + +partmap/part_acorn_module-acorn.obj: partmap/acorn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_acorn_module_CPPFLAGS) $(CPPFLAGS) $(part_acorn_module_CFLAGS) $(CFLAGS) -MT partmap/part_acorn_module-acorn.obj -MD -MP -MF partmap/$(DEPDIR)/part_acorn_module-acorn.Tpo -c -o partmap/part_acorn_module-acorn.obj `if test -f 'partmap/acorn.c'; then $(CYGPATH_W) 'partmap/acorn.c'; else $(CYGPATH_W) '$(srcdir)/partmap/acorn.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_acorn_module-acorn.Tpo partmap/$(DEPDIR)/part_acorn_module-acorn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/acorn.c' object='partmap/part_acorn_module-acorn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_acorn_module_CPPFLAGS) $(CPPFLAGS) $(part_acorn_module_CFLAGS) $(CFLAGS) -c -o partmap/part_acorn_module-acorn.obj `if test -f 'partmap/acorn.c'; then $(CYGPATH_W) 'partmap/acorn.c'; else $(CYGPATH_W) '$(srcdir)/partmap/acorn.c'; fi` + +partmap/part_amiga_module-amiga.o: partmap/amiga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_amiga_module_CPPFLAGS) $(CPPFLAGS) $(part_amiga_module_CFLAGS) $(CFLAGS) -MT partmap/part_amiga_module-amiga.o -MD -MP -MF partmap/$(DEPDIR)/part_amiga_module-amiga.Tpo -c -o partmap/part_amiga_module-amiga.o `test -f 'partmap/amiga.c' || echo '$(srcdir)/'`partmap/amiga.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_amiga_module-amiga.Tpo partmap/$(DEPDIR)/part_amiga_module-amiga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/amiga.c' object='partmap/part_amiga_module-amiga.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_amiga_module_CPPFLAGS) $(CPPFLAGS) $(part_amiga_module_CFLAGS) $(CFLAGS) -c -o partmap/part_amiga_module-amiga.o `test -f 'partmap/amiga.c' || echo '$(srcdir)/'`partmap/amiga.c + +partmap/part_amiga_module-amiga.obj: partmap/amiga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_amiga_module_CPPFLAGS) $(CPPFLAGS) $(part_amiga_module_CFLAGS) $(CFLAGS) -MT partmap/part_amiga_module-amiga.obj -MD -MP -MF partmap/$(DEPDIR)/part_amiga_module-amiga.Tpo -c -o partmap/part_amiga_module-amiga.obj `if test -f 'partmap/amiga.c'; then $(CYGPATH_W) 'partmap/amiga.c'; else $(CYGPATH_W) '$(srcdir)/partmap/amiga.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_amiga_module-amiga.Tpo partmap/$(DEPDIR)/part_amiga_module-amiga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/amiga.c' object='partmap/part_amiga_module-amiga.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_amiga_module_CPPFLAGS) $(CPPFLAGS) $(part_amiga_module_CFLAGS) $(CFLAGS) -c -o partmap/part_amiga_module-amiga.obj `if test -f 'partmap/amiga.c'; then $(CYGPATH_W) 'partmap/amiga.c'; else $(CYGPATH_W) '$(srcdir)/partmap/amiga.c'; fi` + +partmap/part_apple_module-apple.o: partmap/apple.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_apple_module_CPPFLAGS) $(CPPFLAGS) $(part_apple_module_CFLAGS) $(CFLAGS) -MT partmap/part_apple_module-apple.o -MD -MP -MF partmap/$(DEPDIR)/part_apple_module-apple.Tpo -c -o partmap/part_apple_module-apple.o `test -f 'partmap/apple.c' || echo '$(srcdir)/'`partmap/apple.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_apple_module-apple.Tpo partmap/$(DEPDIR)/part_apple_module-apple.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/apple.c' object='partmap/part_apple_module-apple.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_apple_module_CPPFLAGS) $(CPPFLAGS) $(part_apple_module_CFLAGS) $(CFLAGS) -c -o partmap/part_apple_module-apple.o `test -f 'partmap/apple.c' || echo '$(srcdir)/'`partmap/apple.c + +partmap/part_apple_module-apple.obj: partmap/apple.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_apple_module_CPPFLAGS) $(CPPFLAGS) $(part_apple_module_CFLAGS) $(CFLAGS) -MT partmap/part_apple_module-apple.obj -MD -MP -MF partmap/$(DEPDIR)/part_apple_module-apple.Tpo -c -o partmap/part_apple_module-apple.obj `if test -f 'partmap/apple.c'; then $(CYGPATH_W) 'partmap/apple.c'; else $(CYGPATH_W) '$(srcdir)/partmap/apple.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_apple_module-apple.Tpo partmap/$(DEPDIR)/part_apple_module-apple.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/apple.c' object='partmap/part_apple_module-apple.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_apple_module_CPPFLAGS) $(CPPFLAGS) $(part_apple_module_CFLAGS) $(CFLAGS) -c -o partmap/part_apple_module-apple.obj `if test -f 'partmap/apple.c'; then $(CYGPATH_W) 'partmap/apple.c'; else $(CYGPATH_W) '$(srcdir)/partmap/apple.c'; fi` + +partmap/part_bsd_module-bsdlabel.o: partmap/bsdlabel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_bsd_module_CPPFLAGS) $(CPPFLAGS) $(part_bsd_module_CFLAGS) $(CFLAGS) -MT partmap/part_bsd_module-bsdlabel.o -MD -MP -MF partmap/$(DEPDIR)/part_bsd_module-bsdlabel.Tpo -c -o partmap/part_bsd_module-bsdlabel.o `test -f 'partmap/bsdlabel.c' || echo '$(srcdir)/'`partmap/bsdlabel.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_bsd_module-bsdlabel.Tpo partmap/$(DEPDIR)/part_bsd_module-bsdlabel.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/bsdlabel.c' object='partmap/part_bsd_module-bsdlabel.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_bsd_module_CPPFLAGS) $(CPPFLAGS) $(part_bsd_module_CFLAGS) $(CFLAGS) -c -o partmap/part_bsd_module-bsdlabel.o `test -f 'partmap/bsdlabel.c' || echo '$(srcdir)/'`partmap/bsdlabel.c + +partmap/part_bsd_module-bsdlabel.obj: partmap/bsdlabel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_bsd_module_CPPFLAGS) $(CPPFLAGS) $(part_bsd_module_CFLAGS) $(CFLAGS) -MT partmap/part_bsd_module-bsdlabel.obj -MD -MP -MF partmap/$(DEPDIR)/part_bsd_module-bsdlabel.Tpo -c -o partmap/part_bsd_module-bsdlabel.obj `if test -f 'partmap/bsdlabel.c'; then $(CYGPATH_W) 'partmap/bsdlabel.c'; else $(CYGPATH_W) '$(srcdir)/partmap/bsdlabel.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_bsd_module-bsdlabel.Tpo partmap/$(DEPDIR)/part_bsd_module-bsdlabel.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/bsdlabel.c' object='partmap/part_bsd_module-bsdlabel.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_bsd_module_CPPFLAGS) $(CPPFLAGS) $(part_bsd_module_CFLAGS) $(CFLAGS) -c -o partmap/part_bsd_module-bsdlabel.obj `if test -f 'partmap/bsdlabel.c'; then $(CYGPATH_W) 'partmap/bsdlabel.c'; else $(CYGPATH_W) '$(srcdir)/partmap/bsdlabel.c'; fi` + +partmap/part_dfly_module-dfly.o: partmap/dfly.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dfly_module_CPPFLAGS) $(CPPFLAGS) $(part_dfly_module_CFLAGS) $(CFLAGS) -MT partmap/part_dfly_module-dfly.o -MD -MP -MF partmap/$(DEPDIR)/part_dfly_module-dfly.Tpo -c -o partmap/part_dfly_module-dfly.o `test -f 'partmap/dfly.c' || echo '$(srcdir)/'`partmap/dfly.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_dfly_module-dfly.Tpo partmap/$(DEPDIR)/part_dfly_module-dfly.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/dfly.c' object='partmap/part_dfly_module-dfly.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dfly_module_CPPFLAGS) $(CPPFLAGS) $(part_dfly_module_CFLAGS) $(CFLAGS) -c -o partmap/part_dfly_module-dfly.o `test -f 'partmap/dfly.c' || echo '$(srcdir)/'`partmap/dfly.c + +partmap/part_dfly_module-dfly.obj: partmap/dfly.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dfly_module_CPPFLAGS) $(CPPFLAGS) $(part_dfly_module_CFLAGS) $(CFLAGS) -MT partmap/part_dfly_module-dfly.obj -MD -MP -MF partmap/$(DEPDIR)/part_dfly_module-dfly.Tpo -c -o partmap/part_dfly_module-dfly.obj `if test -f 'partmap/dfly.c'; then $(CYGPATH_W) 'partmap/dfly.c'; else $(CYGPATH_W) '$(srcdir)/partmap/dfly.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_dfly_module-dfly.Tpo partmap/$(DEPDIR)/part_dfly_module-dfly.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/dfly.c' object='partmap/part_dfly_module-dfly.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dfly_module_CPPFLAGS) $(CPPFLAGS) $(part_dfly_module_CFLAGS) $(CFLAGS) -c -o partmap/part_dfly_module-dfly.obj `if test -f 'partmap/dfly.c'; then $(CYGPATH_W) 'partmap/dfly.c'; else $(CYGPATH_W) '$(srcdir)/partmap/dfly.c'; fi` + +partmap/part_dvh_module-dvh.o: partmap/dvh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dvh_module_CPPFLAGS) $(CPPFLAGS) $(part_dvh_module_CFLAGS) $(CFLAGS) -MT partmap/part_dvh_module-dvh.o -MD -MP -MF partmap/$(DEPDIR)/part_dvh_module-dvh.Tpo -c -o partmap/part_dvh_module-dvh.o `test -f 'partmap/dvh.c' || echo '$(srcdir)/'`partmap/dvh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_dvh_module-dvh.Tpo partmap/$(DEPDIR)/part_dvh_module-dvh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/dvh.c' object='partmap/part_dvh_module-dvh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dvh_module_CPPFLAGS) $(CPPFLAGS) $(part_dvh_module_CFLAGS) $(CFLAGS) -c -o partmap/part_dvh_module-dvh.o `test -f 'partmap/dvh.c' || echo '$(srcdir)/'`partmap/dvh.c + +partmap/part_dvh_module-dvh.obj: partmap/dvh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dvh_module_CPPFLAGS) $(CPPFLAGS) $(part_dvh_module_CFLAGS) $(CFLAGS) -MT partmap/part_dvh_module-dvh.obj -MD -MP -MF partmap/$(DEPDIR)/part_dvh_module-dvh.Tpo -c -o partmap/part_dvh_module-dvh.obj `if test -f 'partmap/dvh.c'; then $(CYGPATH_W) 'partmap/dvh.c'; else $(CYGPATH_W) '$(srcdir)/partmap/dvh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_dvh_module-dvh.Tpo partmap/$(DEPDIR)/part_dvh_module-dvh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/dvh.c' object='partmap/part_dvh_module-dvh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dvh_module_CPPFLAGS) $(CPPFLAGS) $(part_dvh_module_CFLAGS) $(CFLAGS) -c -o partmap/part_dvh_module-dvh.obj `if test -f 'partmap/dvh.c'; then $(CYGPATH_W) 'partmap/dvh.c'; else $(CYGPATH_W) '$(srcdir)/partmap/dvh.c'; fi` + +partmap/part_gpt_module-gpt.o: partmap/gpt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_gpt_module_CPPFLAGS) $(CPPFLAGS) $(part_gpt_module_CFLAGS) $(CFLAGS) -MT partmap/part_gpt_module-gpt.o -MD -MP -MF partmap/$(DEPDIR)/part_gpt_module-gpt.Tpo -c -o partmap/part_gpt_module-gpt.o `test -f 'partmap/gpt.c' || echo '$(srcdir)/'`partmap/gpt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_gpt_module-gpt.Tpo partmap/$(DEPDIR)/part_gpt_module-gpt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/gpt.c' object='partmap/part_gpt_module-gpt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_gpt_module_CPPFLAGS) $(CPPFLAGS) $(part_gpt_module_CFLAGS) $(CFLAGS) -c -o partmap/part_gpt_module-gpt.o `test -f 'partmap/gpt.c' || echo '$(srcdir)/'`partmap/gpt.c + +partmap/part_gpt_module-gpt.obj: partmap/gpt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_gpt_module_CPPFLAGS) $(CPPFLAGS) $(part_gpt_module_CFLAGS) $(CFLAGS) -MT partmap/part_gpt_module-gpt.obj -MD -MP -MF partmap/$(DEPDIR)/part_gpt_module-gpt.Tpo -c -o partmap/part_gpt_module-gpt.obj `if test -f 'partmap/gpt.c'; then $(CYGPATH_W) 'partmap/gpt.c'; else $(CYGPATH_W) '$(srcdir)/partmap/gpt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_gpt_module-gpt.Tpo partmap/$(DEPDIR)/part_gpt_module-gpt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/gpt.c' object='partmap/part_gpt_module-gpt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_gpt_module_CPPFLAGS) $(CPPFLAGS) $(part_gpt_module_CFLAGS) $(CFLAGS) -c -o partmap/part_gpt_module-gpt.obj `if test -f 'partmap/gpt.c'; then $(CYGPATH_W) 'partmap/gpt.c'; else $(CYGPATH_W) '$(srcdir)/partmap/gpt.c'; fi` + +partmap/part_msdos_module-msdos.o: partmap/msdos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_msdos_module_CPPFLAGS) $(CPPFLAGS) $(part_msdos_module_CFLAGS) $(CFLAGS) -MT partmap/part_msdos_module-msdos.o -MD -MP -MF partmap/$(DEPDIR)/part_msdos_module-msdos.Tpo -c -o partmap/part_msdos_module-msdos.o `test -f 'partmap/msdos.c' || echo '$(srcdir)/'`partmap/msdos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_msdos_module-msdos.Tpo partmap/$(DEPDIR)/part_msdos_module-msdos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/msdos.c' object='partmap/part_msdos_module-msdos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_msdos_module_CPPFLAGS) $(CPPFLAGS) $(part_msdos_module_CFLAGS) $(CFLAGS) -c -o partmap/part_msdos_module-msdos.o `test -f 'partmap/msdos.c' || echo '$(srcdir)/'`partmap/msdos.c + +partmap/part_msdos_module-msdos.obj: partmap/msdos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_msdos_module_CPPFLAGS) $(CPPFLAGS) $(part_msdos_module_CFLAGS) $(CFLAGS) -MT partmap/part_msdos_module-msdos.obj -MD -MP -MF partmap/$(DEPDIR)/part_msdos_module-msdos.Tpo -c -o partmap/part_msdos_module-msdos.obj `if test -f 'partmap/msdos.c'; then $(CYGPATH_W) 'partmap/msdos.c'; else $(CYGPATH_W) '$(srcdir)/partmap/msdos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_msdos_module-msdos.Tpo partmap/$(DEPDIR)/part_msdos_module-msdos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/msdos.c' object='partmap/part_msdos_module-msdos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_msdos_module_CPPFLAGS) $(CPPFLAGS) $(part_msdos_module_CFLAGS) $(CFLAGS) -c -o partmap/part_msdos_module-msdos.obj `if test -f 'partmap/msdos.c'; then $(CYGPATH_W) 'partmap/msdos.c'; else $(CYGPATH_W) '$(srcdir)/partmap/msdos.c'; fi` + +partmap/part_plan_module-plan.o: partmap/plan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_plan_module_CPPFLAGS) $(CPPFLAGS) $(part_plan_module_CFLAGS) $(CFLAGS) -MT partmap/part_plan_module-plan.o -MD -MP -MF partmap/$(DEPDIR)/part_plan_module-plan.Tpo -c -o partmap/part_plan_module-plan.o `test -f 'partmap/plan.c' || echo '$(srcdir)/'`partmap/plan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_plan_module-plan.Tpo partmap/$(DEPDIR)/part_plan_module-plan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/plan.c' object='partmap/part_plan_module-plan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_plan_module_CPPFLAGS) $(CPPFLAGS) $(part_plan_module_CFLAGS) $(CFLAGS) -c -o partmap/part_plan_module-plan.o `test -f 'partmap/plan.c' || echo '$(srcdir)/'`partmap/plan.c + +partmap/part_plan_module-plan.obj: partmap/plan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_plan_module_CPPFLAGS) $(CPPFLAGS) $(part_plan_module_CFLAGS) $(CFLAGS) -MT partmap/part_plan_module-plan.obj -MD -MP -MF partmap/$(DEPDIR)/part_plan_module-plan.Tpo -c -o partmap/part_plan_module-plan.obj `if test -f 'partmap/plan.c'; then $(CYGPATH_W) 'partmap/plan.c'; else $(CYGPATH_W) '$(srcdir)/partmap/plan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_plan_module-plan.Tpo partmap/$(DEPDIR)/part_plan_module-plan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/plan.c' object='partmap/part_plan_module-plan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_plan_module_CPPFLAGS) $(CPPFLAGS) $(part_plan_module_CFLAGS) $(CFLAGS) -c -o partmap/part_plan_module-plan.obj `if test -f 'partmap/plan.c'; then $(CYGPATH_W) 'partmap/plan.c'; else $(CYGPATH_W) '$(srcdir)/partmap/plan.c'; fi` + +partmap/part_sun_module-sun.o: partmap/sun.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sun_module_CPPFLAGS) $(CPPFLAGS) $(part_sun_module_CFLAGS) $(CFLAGS) -MT partmap/part_sun_module-sun.o -MD -MP -MF partmap/$(DEPDIR)/part_sun_module-sun.Tpo -c -o partmap/part_sun_module-sun.o `test -f 'partmap/sun.c' || echo '$(srcdir)/'`partmap/sun.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_sun_module-sun.Tpo partmap/$(DEPDIR)/part_sun_module-sun.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/sun.c' object='partmap/part_sun_module-sun.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sun_module_CPPFLAGS) $(CPPFLAGS) $(part_sun_module_CFLAGS) $(CFLAGS) -c -o partmap/part_sun_module-sun.o `test -f 'partmap/sun.c' || echo '$(srcdir)/'`partmap/sun.c + +partmap/part_sun_module-sun.obj: partmap/sun.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sun_module_CPPFLAGS) $(CPPFLAGS) $(part_sun_module_CFLAGS) $(CFLAGS) -MT partmap/part_sun_module-sun.obj -MD -MP -MF partmap/$(DEPDIR)/part_sun_module-sun.Tpo -c -o partmap/part_sun_module-sun.obj `if test -f 'partmap/sun.c'; then $(CYGPATH_W) 'partmap/sun.c'; else $(CYGPATH_W) '$(srcdir)/partmap/sun.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_sun_module-sun.Tpo partmap/$(DEPDIR)/part_sun_module-sun.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/sun.c' object='partmap/part_sun_module-sun.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sun_module_CPPFLAGS) $(CPPFLAGS) $(part_sun_module_CFLAGS) $(CFLAGS) -c -o partmap/part_sun_module-sun.obj `if test -f 'partmap/sun.c'; then $(CYGPATH_W) 'partmap/sun.c'; else $(CYGPATH_W) '$(srcdir)/partmap/sun.c'; fi` + +partmap/part_sunpc_module-sunpc.o: partmap/sunpc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sunpc_module_CPPFLAGS) $(CPPFLAGS) $(part_sunpc_module_CFLAGS) $(CFLAGS) -MT partmap/part_sunpc_module-sunpc.o -MD -MP -MF partmap/$(DEPDIR)/part_sunpc_module-sunpc.Tpo -c -o partmap/part_sunpc_module-sunpc.o `test -f 'partmap/sunpc.c' || echo '$(srcdir)/'`partmap/sunpc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_sunpc_module-sunpc.Tpo partmap/$(DEPDIR)/part_sunpc_module-sunpc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/sunpc.c' object='partmap/part_sunpc_module-sunpc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sunpc_module_CPPFLAGS) $(CPPFLAGS) $(part_sunpc_module_CFLAGS) $(CFLAGS) -c -o partmap/part_sunpc_module-sunpc.o `test -f 'partmap/sunpc.c' || echo '$(srcdir)/'`partmap/sunpc.c + +partmap/part_sunpc_module-sunpc.obj: partmap/sunpc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sunpc_module_CPPFLAGS) $(CPPFLAGS) $(part_sunpc_module_CFLAGS) $(CFLAGS) -MT partmap/part_sunpc_module-sunpc.obj -MD -MP -MF partmap/$(DEPDIR)/part_sunpc_module-sunpc.Tpo -c -o partmap/part_sunpc_module-sunpc.obj `if test -f 'partmap/sunpc.c'; then $(CYGPATH_W) 'partmap/sunpc.c'; else $(CYGPATH_W) '$(srcdir)/partmap/sunpc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) partmap/$(DEPDIR)/part_sunpc_module-sunpc.Tpo partmap/$(DEPDIR)/part_sunpc_module-sunpc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='partmap/sunpc.c' object='partmap/part_sunpc_module-sunpc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sunpc_module_CPPFLAGS) $(CPPFLAGS) $(part_sunpc_module_CFLAGS) $(CFLAGS) -c -o partmap/part_sunpc_module-sunpc.obj `if test -f 'partmap/sunpc.c'; then $(CYGPATH_W) 'partmap/sunpc.c'; else $(CYGPATH_W) '$(srcdir)/partmap/sunpc.c'; fi` + +commands/parttool_module-parttool.o: commands/parttool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(parttool_module_CPPFLAGS) $(CPPFLAGS) $(parttool_module_CFLAGS) $(CFLAGS) -MT commands/parttool_module-parttool.o -MD -MP -MF commands/$(DEPDIR)/parttool_module-parttool.Tpo -c -o commands/parttool_module-parttool.o `test -f 'commands/parttool.c' || echo '$(srcdir)/'`commands/parttool.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/parttool_module-parttool.Tpo commands/$(DEPDIR)/parttool_module-parttool.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/parttool.c' object='commands/parttool_module-parttool.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(parttool_module_CPPFLAGS) $(CPPFLAGS) $(parttool_module_CFLAGS) $(CFLAGS) -c -o commands/parttool_module-parttool.o `test -f 'commands/parttool.c' || echo '$(srcdir)/'`commands/parttool.c + +commands/parttool_module-parttool.obj: commands/parttool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(parttool_module_CPPFLAGS) $(CPPFLAGS) $(parttool_module_CFLAGS) $(CFLAGS) -MT commands/parttool_module-parttool.obj -MD -MP -MF commands/$(DEPDIR)/parttool_module-parttool.Tpo -c -o commands/parttool_module-parttool.obj `if test -f 'commands/parttool.c'; then $(CYGPATH_W) 'commands/parttool.c'; else $(CYGPATH_W) '$(srcdir)/commands/parttool.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/parttool_module-parttool.Tpo commands/$(DEPDIR)/parttool_module-parttool.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/parttool.c' object='commands/parttool_module-parttool.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(parttool_module_CPPFLAGS) $(CPPFLAGS) $(parttool_module_CFLAGS) $(CFLAGS) -c -o commands/parttool_module-parttool.obj `if test -f 'commands/parttool.c'; then $(CYGPATH_W) 'commands/parttool.c'; else $(CYGPATH_W) '$(srcdir)/commands/parttool.c'; fi` + +commands/password_module-password.o: commands/password.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_module_CPPFLAGS) $(CPPFLAGS) $(password_module_CFLAGS) $(CFLAGS) -MT commands/password_module-password.o -MD -MP -MF commands/$(DEPDIR)/password_module-password.Tpo -c -o commands/password_module-password.o `test -f 'commands/password.c' || echo '$(srcdir)/'`commands/password.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/password_module-password.Tpo commands/$(DEPDIR)/password_module-password.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/password.c' object='commands/password_module-password.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_module_CPPFLAGS) $(CPPFLAGS) $(password_module_CFLAGS) $(CFLAGS) -c -o commands/password_module-password.o `test -f 'commands/password.c' || echo '$(srcdir)/'`commands/password.c + +commands/password_module-password.obj: commands/password.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_module_CPPFLAGS) $(CPPFLAGS) $(password_module_CFLAGS) $(CFLAGS) -MT commands/password_module-password.obj -MD -MP -MF commands/$(DEPDIR)/password_module-password.Tpo -c -o commands/password_module-password.obj `if test -f 'commands/password.c'; then $(CYGPATH_W) 'commands/password.c'; else $(CYGPATH_W) '$(srcdir)/commands/password.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/password_module-password.Tpo commands/$(DEPDIR)/password_module-password.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/password.c' object='commands/password_module-password.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_module_CPPFLAGS) $(CPPFLAGS) $(password_module_CFLAGS) $(CFLAGS) -c -o commands/password_module-password.obj `if test -f 'commands/password.c'; then $(CYGPATH_W) 'commands/password.c'; else $(CYGPATH_W) '$(srcdir)/commands/password.c'; fi` + +commands/password_pbkdf2_module-password_pbkdf2.o: commands/password_pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(password_pbkdf2_module_CFLAGS) $(CFLAGS) -MT commands/password_pbkdf2_module-password_pbkdf2.o -MD -MP -MF commands/$(DEPDIR)/password_pbkdf2_module-password_pbkdf2.Tpo -c -o commands/password_pbkdf2_module-password_pbkdf2.o `test -f 'commands/password_pbkdf2.c' || echo '$(srcdir)/'`commands/password_pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/password_pbkdf2_module-password_pbkdf2.Tpo commands/$(DEPDIR)/password_pbkdf2_module-password_pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/password_pbkdf2.c' object='commands/password_pbkdf2_module-password_pbkdf2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(password_pbkdf2_module_CFLAGS) $(CFLAGS) -c -o commands/password_pbkdf2_module-password_pbkdf2.o `test -f 'commands/password_pbkdf2.c' || echo '$(srcdir)/'`commands/password_pbkdf2.c + +commands/password_pbkdf2_module-password_pbkdf2.obj: commands/password_pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(password_pbkdf2_module_CFLAGS) $(CFLAGS) -MT commands/password_pbkdf2_module-password_pbkdf2.obj -MD -MP -MF commands/$(DEPDIR)/password_pbkdf2_module-password_pbkdf2.Tpo -c -o commands/password_pbkdf2_module-password_pbkdf2.obj `if test -f 'commands/password_pbkdf2.c'; then $(CYGPATH_W) 'commands/password_pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/commands/password_pbkdf2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/password_pbkdf2_module-password_pbkdf2.Tpo commands/$(DEPDIR)/password_pbkdf2_module-password_pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/password_pbkdf2.c' object='commands/password_pbkdf2_module-password_pbkdf2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(password_pbkdf2_module_CFLAGS) $(CFLAGS) -c -o commands/password_pbkdf2_module-password_pbkdf2.obj `if test -f 'commands/password_pbkdf2.c'; then $(CYGPATH_W) 'commands/password_pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/commands/password_pbkdf2.c'; fi` + +disk/pata_module-pata.o: disk/pata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $(pata_module_CFLAGS) $(CFLAGS) -MT disk/pata_module-pata.o -MD -MP -MF disk/$(DEPDIR)/pata_module-pata.Tpo -c -o disk/pata_module-pata.o `test -f 'disk/pata.c' || echo '$(srcdir)/'`disk/pata.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/pata_module-pata.Tpo disk/$(DEPDIR)/pata_module-pata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/pata.c' object='disk/pata_module-pata.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $(pata_module_CFLAGS) $(CFLAGS) -c -o disk/pata_module-pata.o `test -f 'disk/pata.c' || echo '$(srcdir)/'`disk/pata.c + +disk/pata_module-pata.obj: disk/pata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $(pata_module_CFLAGS) $(CFLAGS) -MT disk/pata_module-pata.obj -MD -MP -MF disk/$(DEPDIR)/pata_module-pata.Tpo -c -o disk/pata_module-pata.obj `if test -f 'disk/pata.c'; then $(CYGPATH_W) 'disk/pata.c'; else $(CYGPATH_W) '$(srcdir)/disk/pata.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/pata_module-pata.Tpo disk/$(DEPDIR)/pata_module-pata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/pata.c' object='disk/pata_module-pata.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $(pata_module_CFLAGS) $(CFLAGS) -c -o disk/pata_module-pata.obj `if test -f 'disk/pata.c'; then $(CYGPATH_W) 'disk/pata.c'; else $(CYGPATH_W) '$(srcdir)/disk/pata.c'; fi` + +lib/pbkdf2_module-pbkdf2.o: lib/pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_module_CFLAGS) $(CFLAGS) -MT lib/pbkdf2_module-pbkdf2.o -MD -MP -MF lib/$(DEPDIR)/pbkdf2_module-pbkdf2.Tpo -c -o lib/pbkdf2_module-pbkdf2.o `test -f 'lib/pbkdf2.c' || echo '$(srcdir)/'`lib/pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/pbkdf2_module-pbkdf2.Tpo lib/$(DEPDIR)/pbkdf2_module-pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/pbkdf2.c' object='lib/pbkdf2_module-pbkdf2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_module_CFLAGS) $(CFLAGS) -c -o lib/pbkdf2_module-pbkdf2.o `test -f 'lib/pbkdf2.c' || echo '$(srcdir)/'`lib/pbkdf2.c + +lib/pbkdf2_module-pbkdf2.obj: lib/pbkdf2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_module_CFLAGS) $(CFLAGS) -MT lib/pbkdf2_module-pbkdf2.obj -MD -MP -MF lib/$(DEPDIR)/pbkdf2_module-pbkdf2.Tpo -c -o lib/pbkdf2_module-pbkdf2.obj `if test -f 'lib/pbkdf2.c'; then $(CYGPATH_W) 'lib/pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/lib/pbkdf2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/pbkdf2_module-pbkdf2.Tpo lib/$(DEPDIR)/pbkdf2_module-pbkdf2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/pbkdf2.c' object='lib/pbkdf2_module-pbkdf2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_module_CFLAGS) $(CFLAGS) -c -o lib/pbkdf2_module-pbkdf2.obj `if test -f 'lib/pbkdf2.c'; then $(CYGPATH_W) 'lib/pbkdf2.c'; else $(CYGPATH_W) '$(srcdir)/lib/pbkdf2.c'; fi` + +tests/pbkdf2_test_module-pbkdf2_test.o: tests/pbkdf2_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_test_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_test_module_CFLAGS) $(CFLAGS) -MT tests/pbkdf2_test_module-pbkdf2_test.o -MD -MP -MF tests/$(DEPDIR)/pbkdf2_test_module-pbkdf2_test.Tpo -c -o tests/pbkdf2_test_module-pbkdf2_test.o `test -f 'tests/pbkdf2_test.c' || echo '$(srcdir)/'`tests/pbkdf2_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/pbkdf2_test_module-pbkdf2_test.Tpo tests/$(DEPDIR)/pbkdf2_test_module-pbkdf2_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/pbkdf2_test.c' object='tests/pbkdf2_test_module-pbkdf2_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_test_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_test_module_CFLAGS) $(CFLAGS) -c -o tests/pbkdf2_test_module-pbkdf2_test.o `test -f 'tests/pbkdf2_test.c' || echo '$(srcdir)/'`tests/pbkdf2_test.c + +tests/pbkdf2_test_module-pbkdf2_test.obj: tests/pbkdf2_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_test_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_test_module_CFLAGS) $(CFLAGS) -MT tests/pbkdf2_test_module-pbkdf2_test.obj -MD -MP -MF tests/$(DEPDIR)/pbkdf2_test_module-pbkdf2_test.Tpo -c -o tests/pbkdf2_test_module-pbkdf2_test.obj `if test -f 'tests/pbkdf2_test.c'; then $(CYGPATH_W) 'tests/pbkdf2_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/pbkdf2_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/pbkdf2_test_module-pbkdf2_test.Tpo tests/$(DEPDIR)/pbkdf2_test_module-pbkdf2_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/pbkdf2_test.c' object='tests/pbkdf2_test_module-pbkdf2_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_test_module_CPPFLAGS) $(CPPFLAGS) $(pbkdf2_test_module_CFLAGS) $(CFLAGS) -c -o tests/pbkdf2_test_module-pbkdf2_test.obj `if test -f 'tests/pbkdf2_test.c'; then $(CYGPATH_W) 'tests/pbkdf2_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/pbkdf2_test.c'; fi` + +bus/pci_module-pci.o: bus/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -MT bus/pci_module-pci.o -MD -MP -MF bus/$(DEPDIR)/pci_module-pci.Tpo -c -o bus/pci_module-pci.o `test -f 'bus/pci.c' || echo '$(srcdir)/'`bus/pci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/pci_module-pci.Tpo bus/$(DEPDIR)/pci_module-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/pci.c' object='bus/pci_module-pci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -c -o bus/pci_module-pci.o `test -f 'bus/pci.c' || echo '$(srcdir)/'`bus/pci.c + +bus/pci_module-pci.obj: bus/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -MT bus/pci_module-pci.obj -MD -MP -MF bus/$(DEPDIR)/pci_module-pci.Tpo -c -o bus/pci_module-pci.obj `if test -f 'bus/pci.c'; then $(CYGPATH_W) 'bus/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/pci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/$(DEPDIR)/pci_module-pci.Tpo bus/$(DEPDIR)/pci_module-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/pci.c' object='bus/pci_module-pci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -c -o bus/pci_module-pci.obj `if test -f 'bus/pci.c'; then $(CYGPATH_W) 'bus/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/pci.c'; fi` + +bus/i386/ieee1275/pci_module-pci.o: bus/i386/ieee1275/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -MT bus/i386/ieee1275/pci_module-pci.o -MD -MP -MF bus/i386/ieee1275/$(DEPDIR)/pci_module-pci.Tpo -c -o bus/i386/ieee1275/pci_module-pci.o `test -f 'bus/i386/ieee1275/pci.c' || echo '$(srcdir)/'`bus/i386/ieee1275/pci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/i386/ieee1275/$(DEPDIR)/pci_module-pci.Tpo bus/i386/ieee1275/$(DEPDIR)/pci_module-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/i386/ieee1275/pci.c' object='bus/i386/ieee1275/pci_module-pci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -c -o bus/i386/ieee1275/pci_module-pci.o `test -f 'bus/i386/ieee1275/pci.c' || echo '$(srcdir)/'`bus/i386/ieee1275/pci.c + +bus/i386/ieee1275/pci_module-pci.obj: bus/i386/ieee1275/pci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -MT bus/i386/ieee1275/pci_module-pci.obj -MD -MP -MF bus/i386/ieee1275/$(DEPDIR)/pci_module-pci.Tpo -c -o bus/i386/ieee1275/pci_module-pci.obj `if test -f 'bus/i386/ieee1275/pci.c'; then $(CYGPATH_W) 'bus/i386/ieee1275/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/i386/ieee1275/pci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/i386/ieee1275/$(DEPDIR)/pci_module-pci.Tpo bus/i386/ieee1275/$(DEPDIR)/pci_module-pci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/i386/ieee1275/pci.c' object='bus/i386/ieee1275/pci_module-pci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $(pci_module_CFLAGS) $(CFLAGS) -c -o bus/i386/ieee1275/pci_module-pci.obj `if test -f 'bus/i386/ieee1275/pci.c'; then $(CYGPATH_W) 'bus/i386/ieee1275/pci.c'; else $(CYGPATH_W) '$(srcdir)/bus/i386/ieee1275/pci.c'; fi` + +commands/pcidump_module-pcidump.o: commands/pcidump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $(pcidump_module_CFLAGS) $(CFLAGS) -MT commands/pcidump_module-pcidump.o -MD -MP -MF commands/$(DEPDIR)/pcidump_module-pcidump.Tpo -c -o commands/pcidump_module-pcidump.o `test -f 'commands/pcidump.c' || echo '$(srcdir)/'`commands/pcidump.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/pcidump_module-pcidump.Tpo commands/$(DEPDIR)/pcidump_module-pcidump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/pcidump.c' object='commands/pcidump_module-pcidump.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $(pcidump_module_CFLAGS) $(CFLAGS) -c -o commands/pcidump_module-pcidump.o `test -f 'commands/pcidump.c' || echo '$(srcdir)/'`commands/pcidump.c + +commands/pcidump_module-pcidump.obj: commands/pcidump.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $(pcidump_module_CFLAGS) $(CFLAGS) -MT commands/pcidump_module-pcidump.obj -MD -MP -MF commands/$(DEPDIR)/pcidump_module-pcidump.Tpo -c -o commands/pcidump_module-pcidump.obj `if test -f 'commands/pcidump.c'; then $(CYGPATH_W) 'commands/pcidump.c'; else $(CYGPATH_W) '$(srcdir)/commands/pcidump.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/pcidump_module-pcidump.Tpo commands/$(DEPDIR)/pcidump_module-pcidump.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/pcidump.c' object='commands/pcidump_module-pcidump.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $(pcidump_module_CFLAGS) $(CFLAGS) -c -o commands/pcidump_module-pcidump.obj `if test -f 'commands/pcidump.c'; then $(CYGPATH_W) 'commands/pcidump.c'; else $(CYGPATH_W) '$(srcdir)/commands/pcidump.c'; fi` + +loader/i386/pc/plan9_module-plan9.o: loader/i386/pc/plan9.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(plan9_module_CPPFLAGS) $(CPPFLAGS) $(plan9_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/plan9_module-plan9.o -MD -MP -MF loader/i386/pc/$(DEPDIR)/plan9_module-plan9.Tpo -c -o loader/i386/pc/plan9_module-plan9.o `test -f 'loader/i386/pc/plan9.c' || echo '$(srcdir)/'`loader/i386/pc/plan9.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/plan9_module-plan9.Tpo loader/i386/pc/$(DEPDIR)/plan9_module-plan9.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/plan9.c' object='loader/i386/pc/plan9_module-plan9.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(plan9_module_CPPFLAGS) $(CPPFLAGS) $(plan9_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/plan9_module-plan9.o `test -f 'loader/i386/pc/plan9.c' || echo '$(srcdir)/'`loader/i386/pc/plan9.c + +loader/i386/pc/plan9_module-plan9.obj: loader/i386/pc/plan9.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(plan9_module_CPPFLAGS) $(CPPFLAGS) $(plan9_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/plan9_module-plan9.obj -MD -MP -MF loader/i386/pc/$(DEPDIR)/plan9_module-plan9.Tpo -c -o loader/i386/pc/plan9_module-plan9.obj `if test -f 'loader/i386/pc/plan9.c'; then $(CYGPATH_W) 'loader/i386/pc/plan9.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/plan9.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/plan9_module-plan9.Tpo loader/i386/pc/$(DEPDIR)/plan9_module-plan9.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/plan9.c' object='loader/i386/pc/plan9_module-plan9.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(plan9_module_CPPFLAGS) $(CPPFLAGS) $(plan9_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/plan9_module-plan9.obj `if test -f 'loader/i386/pc/plan9.c'; then $(CYGPATH_W) 'loader/i386/pc/plan9.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/plan9.c'; fi` + +commands/i386/pc/play_module-play.o: commands/i386/pc/play.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $(play_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/play_module-play.o -MD -MP -MF commands/i386/pc/$(DEPDIR)/play_module-play.Tpo -c -o commands/i386/pc/play_module-play.o `test -f 'commands/i386/pc/play.c' || echo '$(srcdir)/'`commands/i386/pc/play.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/play_module-play.Tpo commands/i386/pc/$(DEPDIR)/play_module-play.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/play.c' object='commands/i386/pc/play_module-play.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $(play_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/play_module-play.o `test -f 'commands/i386/pc/play.c' || echo '$(srcdir)/'`commands/i386/pc/play.c + +commands/i386/pc/play_module-play.obj: commands/i386/pc/play.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $(play_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/play_module-play.obj -MD -MP -MF commands/i386/pc/$(DEPDIR)/play_module-play.Tpo -c -o commands/i386/pc/play_module-play.obj `if test -f 'commands/i386/pc/play.c'; then $(CYGPATH_W) 'commands/i386/pc/play.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/play.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/play_module-play.Tpo commands/i386/pc/$(DEPDIR)/play_module-play.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/play.c' object='commands/i386/pc/play_module-play.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $(play_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/play_module-play.obj `if test -f 'commands/i386/pc/play.c'; then $(CYGPATH_W) 'commands/i386/pc/play.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/play.c'; fi` + +video/readers/png_module-png.o: video/readers/png.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(png_module_CPPFLAGS) $(CPPFLAGS) $(png_module_CFLAGS) $(CFLAGS) -MT video/readers/png_module-png.o -MD -MP -MF video/readers/$(DEPDIR)/png_module-png.Tpo -c -o video/readers/png_module-png.o `test -f 'video/readers/png.c' || echo '$(srcdir)/'`video/readers/png.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/readers/$(DEPDIR)/png_module-png.Tpo video/readers/$(DEPDIR)/png_module-png.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/readers/png.c' object='video/readers/png_module-png.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(png_module_CPPFLAGS) $(CPPFLAGS) $(png_module_CFLAGS) $(CFLAGS) -c -o video/readers/png_module-png.o `test -f 'video/readers/png.c' || echo '$(srcdir)/'`video/readers/png.c + +video/readers/png_module-png.obj: video/readers/png.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(png_module_CPPFLAGS) $(CPPFLAGS) $(png_module_CFLAGS) $(CFLAGS) -MT video/readers/png_module-png.obj -MD -MP -MF video/readers/$(DEPDIR)/png_module-png.Tpo -c -o video/readers/png_module-png.obj `if test -f 'video/readers/png.c'; then $(CYGPATH_W) 'video/readers/png.c'; else $(CYGPATH_W) '$(srcdir)/video/readers/png.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/readers/$(DEPDIR)/png_module-png.Tpo video/readers/$(DEPDIR)/png_module-png.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/readers/png.c' object='video/readers/png_module-png.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(png_module_CPPFLAGS) $(CPPFLAGS) $(png_module_CFLAGS) $(CFLAGS) -c -o video/readers/png_module-png.obj `if test -f 'video/readers/png.c'; then $(CYGPATH_W) 'video/readers/png.c'; else $(CYGPATH_W) '$(srcdir)/video/readers/png.c'; fi` + +lib/priority_queue_module-priority_queue.o: lib/priority_queue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_module_CPPFLAGS) $(CPPFLAGS) $(priority_queue_module_CFLAGS) $(CFLAGS) -MT lib/priority_queue_module-priority_queue.o -MD -MP -MF lib/$(DEPDIR)/priority_queue_module-priority_queue.Tpo -c -o lib/priority_queue_module-priority_queue.o `test -f 'lib/priority_queue.c' || echo '$(srcdir)/'`lib/priority_queue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/priority_queue_module-priority_queue.Tpo lib/$(DEPDIR)/priority_queue_module-priority_queue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/priority_queue.c' object='lib/priority_queue_module-priority_queue.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_module_CPPFLAGS) $(CPPFLAGS) $(priority_queue_module_CFLAGS) $(CFLAGS) -c -o lib/priority_queue_module-priority_queue.o `test -f 'lib/priority_queue.c' || echo '$(srcdir)/'`lib/priority_queue.c + +lib/priority_queue_module-priority_queue.obj: lib/priority_queue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_module_CPPFLAGS) $(CPPFLAGS) $(priority_queue_module_CFLAGS) $(CFLAGS) -MT lib/priority_queue_module-priority_queue.obj -MD -MP -MF lib/$(DEPDIR)/priority_queue_module-priority_queue.Tpo -c -o lib/priority_queue_module-priority_queue.obj `if test -f 'lib/priority_queue.c'; then $(CYGPATH_W) 'lib/priority_queue.c'; else $(CYGPATH_W) '$(srcdir)/lib/priority_queue.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/priority_queue_module-priority_queue.Tpo lib/$(DEPDIR)/priority_queue_module-priority_queue.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/priority_queue.c' object='lib/priority_queue_module-priority_queue.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_module_CPPFLAGS) $(CPPFLAGS) $(priority_queue_module_CFLAGS) $(CFLAGS) -c -o lib/priority_queue_module-priority_queue.obj `if test -f 'lib/priority_queue.c'; then $(CYGPATH_W) 'lib/priority_queue.c'; else $(CYGPATH_W) '$(srcdir)/lib/priority_queue.c'; fi` + +commands/probe_module-probe.o: commands/probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(probe_module_CPPFLAGS) $(CPPFLAGS) $(probe_module_CFLAGS) $(CFLAGS) -MT commands/probe_module-probe.o -MD -MP -MF commands/$(DEPDIR)/probe_module-probe.Tpo -c -o commands/probe_module-probe.o `test -f 'commands/probe.c' || echo '$(srcdir)/'`commands/probe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/probe_module-probe.Tpo commands/$(DEPDIR)/probe_module-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/probe.c' object='commands/probe_module-probe.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(probe_module_CPPFLAGS) $(CPPFLAGS) $(probe_module_CFLAGS) $(CFLAGS) -c -o commands/probe_module-probe.o `test -f 'commands/probe.c' || echo '$(srcdir)/'`commands/probe.c + +commands/probe_module-probe.obj: commands/probe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(probe_module_CPPFLAGS) $(CPPFLAGS) $(probe_module_CFLAGS) $(CFLAGS) -MT commands/probe_module-probe.obj -MD -MP -MF commands/$(DEPDIR)/probe_module-probe.Tpo -c -o commands/probe_module-probe.obj `if test -f 'commands/probe.c'; then $(CYGPATH_W) 'commands/probe.c'; else $(CYGPATH_W) '$(srcdir)/commands/probe.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/probe_module-probe.Tpo commands/$(DEPDIR)/probe_module-probe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/probe.c' object='commands/probe_module-probe.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(probe_module_CPPFLAGS) $(CPPFLAGS) $(probe_module_CFLAGS) $(CFLAGS) -c -o commands/probe_module-probe.obj `if test -f 'commands/probe.c'; then $(CYGPATH_W) 'commands/probe.c'; else $(CYGPATH_W) '$(srcdir)/commands/probe.c'; fi` + +fs/procfs_module-proc.o: fs/proc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(procfs_module_CPPFLAGS) $(CPPFLAGS) $(procfs_module_CFLAGS) $(CFLAGS) -MT fs/procfs_module-proc.o -MD -MP -MF fs/$(DEPDIR)/procfs_module-proc.Tpo -c -o fs/procfs_module-proc.o `test -f 'fs/proc.c' || echo '$(srcdir)/'`fs/proc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/procfs_module-proc.Tpo fs/$(DEPDIR)/procfs_module-proc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/proc.c' object='fs/procfs_module-proc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(procfs_module_CPPFLAGS) $(CPPFLAGS) $(procfs_module_CFLAGS) $(CFLAGS) -c -o fs/procfs_module-proc.o `test -f 'fs/proc.c' || echo '$(srcdir)/'`fs/proc.c + +fs/procfs_module-proc.obj: fs/proc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(procfs_module_CPPFLAGS) $(CPPFLAGS) $(procfs_module_CFLAGS) $(CFLAGS) -MT fs/procfs_module-proc.obj -MD -MP -MF fs/$(DEPDIR)/procfs_module-proc.Tpo -c -o fs/procfs_module-proc.obj `if test -f 'fs/proc.c'; then $(CYGPATH_W) 'fs/proc.c'; else $(CYGPATH_W) '$(srcdir)/fs/proc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/procfs_module-proc.Tpo fs/$(DEPDIR)/procfs_module-proc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/proc.c' object='fs/procfs_module-proc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(procfs_module_CPPFLAGS) $(CPPFLAGS) $(procfs_module_CFLAGS) $(CFLAGS) -c -o fs/procfs_module-proc.obj `if test -f 'fs/proc.c'; then $(CYGPATH_W) 'fs/proc.c'; else $(CYGPATH_W) '$(srcdir)/fs/proc.c'; fi` + +lib/progress_module-progress.o: lib/progress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(progress_module_CPPFLAGS) $(CPPFLAGS) $(progress_module_CFLAGS) $(CFLAGS) -MT lib/progress_module-progress.o -MD -MP -MF lib/$(DEPDIR)/progress_module-progress.Tpo -c -o lib/progress_module-progress.o `test -f 'lib/progress.c' || echo '$(srcdir)/'`lib/progress.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/progress_module-progress.Tpo lib/$(DEPDIR)/progress_module-progress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/progress.c' object='lib/progress_module-progress.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(progress_module_CPPFLAGS) $(CPPFLAGS) $(progress_module_CFLAGS) $(CFLAGS) -c -o lib/progress_module-progress.o `test -f 'lib/progress.c' || echo '$(srcdir)/'`lib/progress.c + +lib/progress_module-progress.obj: lib/progress.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(progress_module_CPPFLAGS) $(CPPFLAGS) $(progress_module_CFLAGS) $(CFLAGS) -MT lib/progress_module-progress.obj -MD -MP -MF lib/$(DEPDIR)/progress_module-progress.Tpo -c -o lib/progress_module-progress.obj `if test -f 'lib/progress.c'; then $(CYGPATH_W) 'lib/progress.c'; else $(CYGPATH_W) '$(srcdir)/lib/progress.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/progress_module-progress.Tpo lib/$(DEPDIR)/progress_module-progress.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/progress.c' object='lib/progress_module-progress.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(progress_module_CPPFLAGS) $(CPPFLAGS) $(progress_module_CFLAGS) $(CFLAGS) -c -o lib/progress_module-progress.obj `if test -f 'lib/progress.c'; then $(CYGPATH_W) 'lib/progress.c'; else $(CYGPATH_W) '$(srcdir)/lib/progress.c'; fi` + +net/drivers/i386/pc/pxe_module-pxe.o: net/drivers/i386/pc/pxe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxe_module_CPPFLAGS) $(CPPFLAGS) $(pxe_module_CFLAGS) $(CFLAGS) -MT net/drivers/i386/pc/pxe_module-pxe.o -MD -MP -MF net/drivers/i386/pc/$(DEPDIR)/pxe_module-pxe.Tpo -c -o net/drivers/i386/pc/pxe_module-pxe.o `test -f 'net/drivers/i386/pc/pxe.c' || echo '$(srcdir)/'`net/drivers/i386/pc/pxe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/i386/pc/$(DEPDIR)/pxe_module-pxe.Tpo net/drivers/i386/pc/$(DEPDIR)/pxe_module-pxe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/i386/pc/pxe.c' object='net/drivers/i386/pc/pxe_module-pxe.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxe_module_CPPFLAGS) $(CPPFLAGS) $(pxe_module_CFLAGS) $(CFLAGS) -c -o net/drivers/i386/pc/pxe_module-pxe.o `test -f 'net/drivers/i386/pc/pxe.c' || echo '$(srcdir)/'`net/drivers/i386/pc/pxe.c + +net/drivers/i386/pc/pxe_module-pxe.obj: net/drivers/i386/pc/pxe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxe_module_CPPFLAGS) $(CPPFLAGS) $(pxe_module_CFLAGS) $(CFLAGS) -MT net/drivers/i386/pc/pxe_module-pxe.obj -MD -MP -MF net/drivers/i386/pc/$(DEPDIR)/pxe_module-pxe.Tpo -c -o net/drivers/i386/pc/pxe_module-pxe.obj `if test -f 'net/drivers/i386/pc/pxe.c'; then $(CYGPATH_W) 'net/drivers/i386/pc/pxe.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/i386/pc/pxe.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/i386/pc/$(DEPDIR)/pxe_module-pxe.Tpo net/drivers/i386/pc/$(DEPDIR)/pxe_module-pxe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/i386/pc/pxe.c' object='net/drivers/i386/pc/pxe_module-pxe.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxe_module_CPPFLAGS) $(CPPFLAGS) $(pxe_module_CFLAGS) $(CFLAGS) -c -o net/drivers/i386/pc/pxe_module-pxe.obj `if test -f 'net/drivers/i386/pc/pxe.c'; then $(CYGPATH_W) 'net/drivers/i386/pc/pxe.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/i386/pc/pxe.c'; fi` + +loader/i386/pc/pxechain_module-pxechainloader.o: loader/i386/pc/pxechainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxechain_module_CPPFLAGS) $(CPPFLAGS) $(pxechain_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/pxechain_module-pxechainloader.o -MD -MP -MF loader/i386/pc/$(DEPDIR)/pxechain_module-pxechainloader.Tpo -c -o loader/i386/pc/pxechain_module-pxechainloader.o `test -f 'loader/i386/pc/pxechainloader.c' || echo '$(srcdir)/'`loader/i386/pc/pxechainloader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/pxechain_module-pxechainloader.Tpo loader/i386/pc/$(DEPDIR)/pxechain_module-pxechainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/pxechainloader.c' object='loader/i386/pc/pxechain_module-pxechainloader.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxechain_module_CPPFLAGS) $(CPPFLAGS) $(pxechain_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/pxechain_module-pxechainloader.o `test -f 'loader/i386/pc/pxechainloader.c' || echo '$(srcdir)/'`loader/i386/pc/pxechainloader.c + +loader/i386/pc/pxechain_module-pxechainloader.obj: loader/i386/pc/pxechainloader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxechain_module_CPPFLAGS) $(CPPFLAGS) $(pxechain_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/pxechain_module-pxechainloader.obj -MD -MP -MF loader/i386/pc/$(DEPDIR)/pxechain_module-pxechainloader.Tpo -c -o loader/i386/pc/pxechain_module-pxechainloader.obj `if test -f 'loader/i386/pc/pxechainloader.c'; then $(CYGPATH_W) 'loader/i386/pc/pxechainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/pxechainloader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/pxechain_module-pxechainloader.Tpo loader/i386/pc/$(DEPDIR)/pxechain_module-pxechainloader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/pxechainloader.c' object='loader/i386/pc/pxechain_module-pxechainloader.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxechain_module_CPPFLAGS) $(CPPFLAGS) $(pxechain_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/pxechain_module-pxechainloader.obj `if test -f 'loader/i386/pc/pxechainloader.c'; then $(CYGPATH_W) 'loader/i386/pc/pxechainloader.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/pxechainloader.c'; fi` + +disk/raid5rec_module-raid5_recover.o: disk/raid5_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid5rec_module_CPPFLAGS) $(CPPFLAGS) $(raid5rec_module_CFLAGS) $(CFLAGS) -MT disk/raid5rec_module-raid5_recover.o -MD -MP -MF disk/$(DEPDIR)/raid5rec_module-raid5_recover.Tpo -c -o disk/raid5rec_module-raid5_recover.o `test -f 'disk/raid5_recover.c' || echo '$(srcdir)/'`disk/raid5_recover.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/raid5rec_module-raid5_recover.Tpo disk/$(DEPDIR)/raid5rec_module-raid5_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/raid5_recover.c' object='disk/raid5rec_module-raid5_recover.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid5rec_module_CPPFLAGS) $(CPPFLAGS) $(raid5rec_module_CFLAGS) $(CFLAGS) -c -o disk/raid5rec_module-raid5_recover.o `test -f 'disk/raid5_recover.c' || echo '$(srcdir)/'`disk/raid5_recover.c + +disk/raid5rec_module-raid5_recover.obj: disk/raid5_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid5rec_module_CPPFLAGS) $(CPPFLAGS) $(raid5rec_module_CFLAGS) $(CFLAGS) -MT disk/raid5rec_module-raid5_recover.obj -MD -MP -MF disk/$(DEPDIR)/raid5rec_module-raid5_recover.Tpo -c -o disk/raid5rec_module-raid5_recover.obj `if test -f 'disk/raid5_recover.c'; then $(CYGPATH_W) 'disk/raid5_recover.c'; else $(CYGPATH_W) '$(srcdir)/disk/raid5_recover.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/raid5rec_module-raid5_recover.Tpo disk/$(DEPDIR)/raid5rec_module-raid5_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/raid5_recover.c' object='disk/raid5rec_module-raid5_recover.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid5rec_module_CPPFLAGS) $(CPPFLAGS) $(raid5rec_module_CFLAGS) $(CFLAGS) -c -o disk/raid5rec_module-raid5_recover.obj `if test -f 'disk/raid5_recover.c'; then $(CYGPATH_W) 'disk/raid5_recover.c'; else $(CYGPATH_W) '$(srcdir)/disk/raid5_recover.c'; fi` + +disk/raid6rec_module-raid6_recover.o: disk/raid6_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid6rec_module_CPPFLAGS) $(CPPFLAGS) $(raid6rec_module_CFLAGS) $(CFLAGS) -MT disk/raid6rec_module-raid6_recover.o -MD -MP -MF disk/$(DEPDIR)/raid6rec_module-raid6_recover.Tpo -c -o disk/raid6rec_module-raid6_recover.o `test -f 'disk/raid6_recover.c' || echo '$(srcdir)/'`disk/raid6_recover.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/raid6rec_module-raid6_recover.Tpo disk/$(DEPDIR)/raid6rec_module-raid6_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/raid6_recover.c' object='disk/raid6rec_module-raid6_recover.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid6rec_module_CPPFLAGS) $(CPPFLAGS) $(raid6rec_module_CFLAGS) $(CFLAGS) -c -o disk/raid6rec_module-raid6_recover.o `test -f 'disk/raid6_recover.c' || echo '$(srcdir)/'`disk/raid6_recover.c + +disk/raid6rec_module-raid6_recover.obj: disk/raid6_recover.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid6rec_module_CPPFLAGS) $(CPPFLAGS) $(raid6rec_module_CFLAGS) $(CFLAGS) -MT disk/raid6rec_module-raid6_recover.obj -MD -MP -MF disk/$(DEPDIR)/raid6rec_module-raid6_recover.Tpo -c -o disk/raid6rec_module-raid6_recover.obj `if test -f 'disk/raid6_recover.c'; then $(CYGPATH_W) 'disk/raid6_recover.c'; else $(CYGPATH_W) '$(srcdir)/disk/raid6_recover.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/raid6rec_module-raid6_recover.Tpo disk/$(DEPDIR)/raid6rec_module-raid6_recover.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/raid6_recover.c' object='disk/raid6rec_module-raid6_recover.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid6rec_module_CPPFLAGS) $(CPPFLAGS) $(raid6rec_module_CFLAGS) $(CFLAGS) -c -o disk/raid6rec_module-raid6_recover.obj `if test -f 'disk/raid6_recover.c'; then $(CYGPATH_W) 'disk/raid6_recover.c'; else $(CYGPATH_W) '$(srcdir)/disk/raid6_recover.c'; fi` + +kern/i386/random_module-tsc_pmtimer.o: kern/i386/tsc_pmtimer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -MT kern/i386/random_module-tsc_pmtimer.o -MD -MP -MF kern/i386/$(DEPDIR)/random_module-tsc_pmtimer.Tpo -c -o kern/i386/random_module-tsc_pmtimer.o `test -f 'kern/i386/tsc_pmtimer.c' || echo '$(srcdir)/'`kern/i386/tsc_pmtimer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/random_module-tsc_pmtimer.Tpo kern/i386/$(DEPDIR)/random_module-tsc_pmtimer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc_pmtimer.c' object='kern/i386/random_module-tsc_pmtimer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -c -o kern/i386/random_module-tsc_pmtimer.o `test -f 'kern/i386/tsc_pmtimer.c' || echo '$(srcdir)/'`kern/i386/tsc_pmtimer.c + +kern/i386/random_module-tsc_pmtimer.obj: kern/i386/tsc_pmtimer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -MT kern/i386/random_module-tsc_pmtimer.obj -MD -MP -MF kern/i386/$(DEPDIR)/random_module-tsc_pmtimer.Tpo -c -o kern/i386/random_module-tsc_pmtimer.obj `if test -f 'kern/i386/tsc_pmtimer.c'; then $(CYGPATH_W) 'kern/i386/tsc_pmtimer.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc_pmtimer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/i386/$(DEPDIR)/random_module-tsc_pmtimer.Tpo kern/i386/$(DEPDIR)/random_module-tsc_pmtimer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/i386/tsc_pmtimer.c' object='kern/i386/random_module-tsc_pmtimer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -c -o kern/i386/random_module-tsc_pmtimer.obj `if test -f 'kern/i386/tsc_pmtimer.c'; then $(CYGPATH_W) 'kern/i386/tsc_pmtimer.c'; else $(CYGPATH_W) '$(srcdir)/kern/i386/tsc_pmtimer.c'; fi` + +lib/i386/random_module-random.o: lib/i386/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -MT lib/i386/random_module-random.o -MD -MP -MF lib/i386/$(DEPDIR)/random_module-random.Tpo -c -o lib/i386/random_module-random.o `test -f 'lib/i386/random.c' || echo '$(srcdir)/'`lib/i386/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/random_module-random.Tpo lib/i386/$(DEPDIR)/random_module-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/random.c' object='lib/i386/random_module-random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -c -o lib/i386/random_module-random.o `test -f 'lib/i386/random.c' || echo '$(srcdir)/'`lib/i386/random.c + +lib/i386/random_module-random.obj: lib/i386/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -MT lib/i386/random_module-random.obj -MD -MP -MF lib/i386/$(DEPDIR)/random_module-random.Tpo -c -o lib/i386/random_module-random.obj `if test -f 'lib/i386/random.c'; then $(CYGPATH_W) 'lib/i386/random.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/random.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/random_module-random.Tpo lib/i386/$(DEPDIR)/random_module-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/random.c' object='lib/i386/random_module-random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -c -o lib/i386/random_module-random.obj `if test -f 'lib/i386/random.c'; then $(CYGPATH_W) 'lib/i386/random.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/random.c'; fi` + +lib/random_module-random.o: lib/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -MT lib/random_module-random.o -MD -MP -MF lib/$(DEPDIR)/random_module-random.Tpo -c -o lib/random_module-random.o `test -f 'lib/random.c' || echo '$(srcdir)/'`lib/random.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/random_module-random.Tpo lib/$(DEPDIR)/random_module-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/random.c' object='lib/random_module-random.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -c -o lib/random_module-random.o `test -f 'lib/random.c' || echo '$(srcdir)/'`lib/random.c + +lib/random_module-random.obj: lib/random.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -MT lib/random_module-random.obj -MD -MP -MF lib/$(DEPDIR)/random_module-random.Tpo -c -o lib/random_module-random.obj `if test -f 'lib/random.c'; then $(CYGPATH_W) 'lib/random.c'; else $(CYGPATH_W) '$(srcdir)/lib/random.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/random_module-random.Tpo lib/$(DEPDIR)/random_module-random.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/random.c' object='lib/random_module-random.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $(random_module_CFLAGS) $(CFLAGS) -c -o lib/random_module-random.obj `if test -f 'lib/random.c'; then $(CYGPATH_W) 'lib/random.c'; else $(CYGPATH_W) '$(srcdir)/lib/random.c'; fi` + +commands/read_module-read.o: commands/read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_module_CPPFLAGS) $(CPPFLAGS) $(read_module_CFLAGS) $(CFLAGS) -MT commands/read_module-read.o -MD -MP -MF commands/$(DEPDIR)/read_module-read.Tpo -c -o commands/read_module-read.o `test -f 'commands/read.c' || echo '$(srcdir)/'`commands/read.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/read_module-read.Tpo commands/$(DEPDIR)/read_module-read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/read.c' object='commands/read_module-read.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_module_CPPFLAGS) $(CPPFLAGS) $(read_module_CFLAGS) $(CFLAGS) -c -o commands/read_module-read.o `test -f 'commands/read.c' || echo '$(srcdir)/'`commands/read.c + +commands/read_module-read.obj: commands/read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_module_CPPFLAGS) $(CPPFLAGS) $(read_module_CFLAGS) $(CFLAGS) -MT commands/read_module-read.obj -MD -MP -MF commands/$(DEPDIR)/read_module-read.Tpo -c -o commands/read_module-read.obj `if test -f 'commands/read.c'; then $(CYGPATH_W) 'commands/read.c'; else $(CYGPATH_W) '$(srcdir)/commands/read.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/read_module-read.Tpo commands/$(DEPDIR)/read_module-read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/read.c' object='commands/read_module-read.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_module_CPPFLAGS) $(CPPFLAGS) $(read_module_CFLAGS) $(CFLAGS) -c -o commands/read_module-read.obj `if test -f 'commands/read.c'; then $(CYGPATH_W) 'commands/read.c'; else $(CYGPATH_W) '$(srcdir)/commands/read.c'; fi` + +lib/efi/reboot_module-reboot.o: lib/efi/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/efi/reboot_module-reboot.o -MD -MP -MF lib/efi/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/efi/reboot_module-reboot.o `test -f 'lib/efi/reboot.c' || echo '$(srcdir)/'`lib/efi/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/reboot_module-reboot.Tpo lib/efi/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/reboot.c' object='lib/efi/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/efi/reboot_module-reboot.o `test -f 'lib/efi/reboot.c' || echo '$(srcdir)/'`lib/efi/reboot.c + +lib/efi/reboot_module-reboot.obj: lib/efi/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/efi/reboot_module-reboot.obj -MD -MP -MF lib/efi/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/efi/reboot_module-reboot.obj `if test -f 'lib/efi/reboot.c'; then $(CYGPATH_W) 'lib/efi/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/reboot_module-reboot.Tpo lib/efi/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/reboot.c' object='lib/efi/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/efi/reboot_module-reboot.obj `if test -f 'lib/efi/reboot.c'; then $(CYGPATH_W) 'lib/efi/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/reboot.c'; fi` + +commands/reboot_module-reboot.o: commands/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT commands/reboot_module-reboot.o -MD -MP -MF commands/$(DEPDIR)/reboot_module-reboot.Tpo -c -o commands/reboot_module-reboot.o `test -f 'commands/reboot.c' || echo '$(srcdir)/'`commands/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/reboot_module-reboot.Tpo commands/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/reboot.c' object='commands/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o commands/reboot_module-reboot.o `test -f 'commands/reboot.c' || echo '$(srcdir)/'`commands/reboot.c + +commands/reboot_module-reboot.obj: commands/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT commands/reboot_module-reboot.obj -MD -MP -MF commands/$(DEPDIR)/reboot_module-reboot.Tpo -c -o commands/reboot_module-reboot.obj `if test -f 'commands/reboot.c'; then $(CYGPATH_W) 'commands/reboot.c'; else $(CYGPATH_W) '$(srcdir)/commands/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/reboot_module-reboot.Tpo commands/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/reboot.c' object='commands/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o commands/reboot_module-reboot.obj `if test -f 'commands/reboot.c'; then $(CYGPATH_W) 'commands/reboot.c'; else $(CYGPATH_W) '$(srcdir)/commands/reboot.c'; fi` + +lib/uboot/reboot_module-reboot.o: lib/uboot/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/uboot/reboot_module-reboot.o -MD -MP -MF lib/uboot/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/uboot/reboot_module-reboot.o `test -f 'lib/uboot/reboot.c' || echo '$(srcdir)/'`lib/uboot/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/uboot/$(DEPDIR)/reboot_module-reboot.Tpo lib/uboot/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/uboot/reboot.c' object='lib/uboot/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/uboot/reboot_module-reboot.o `test -f 'lib/uboot/reboot.c' || echo '$(srcdir)/'`lib/uboot/reboot.c + +lib/uboot/reboot_module-reboot.obj: lib/uboot/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/uboot/reboot_module-reboot.obj -MD -MP -MF lib/uboot/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/uboot/reboot_module-reboot.obj `if test -f 'lib/uboot/reboot.c'; then $(CYGPATH_W) 'lib/uboot/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/uboot/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/uboot/$(DEPDIR)/reboot_module-reboot.Tpo lib/uboot/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/uboot/reboot.c' object='lib/uboot/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/uboot/reboot_module-reboot.obj `if test -f 'lib/uboot/reboot.c'; then $(CYGPATH_W) 'lib/uboot/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/uboot/reboot.c'; fi` + +lib/i386/reboot_module-reboot.o: lib/i386/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/i386/reboot_module-reboot.o -MD -MP -MF lib/i386/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/i386/reboot_module-reboot.o `test -f 'lib/i386/reboot.c' || echo '$(srcdir)/'`lib/i386/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/reboot_module-reboot.Tpo lib/i386/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/reboot.c' object='lib/i386/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/i386/reboot_module-reboot.o `test -f 'lib/i386/reboot.c' || echo '$(srcdir)/'`lib/i386/reboot.c + +lib/i386/reboot_module-reboot.obj: lib/i386/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/i386/reboot_module-reboot.obj -MD -MP -MF lib/i386/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/i386/reboot_module-reboot.obj `if test -f 'lib/i386/reboot.c'; then $(CYGPATH_W) 'lib/i386/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/reboot_module-reboot.Tpo lib/i386/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/reboot.c' object='lib/i386/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/i386/reboot_module-reboot.obj `if test -f 'lib/i386/reboot.c'; then $(CYGPATH_W) 'lib/i386/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/reboot.c'; fi` + +lib/xen/reboot_module-reboot.o: lib/xen/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/xen/reboot_module-reboot.o -MD -MP -MF lib/xen/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/xen/reboot_module-reboot.o `test -f 'lib/xen/reboot.c' || echo '$(srcdir)/'`lib/xen/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/reboot_module-reboot.Tpo lib/xen/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/reboot.c' object='lib/xen/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/xen/reboot_module-reboot.o `test -f 'lib/xen/reboot.c' || echo '$(srcdir)/'`lib/xen/reboot.c + +lib/xen/reboot_module-reboot.obj: lib/xen/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/xen/reboot_module-reboot.obj -MD -MP -MF lib/xen/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/xen/reboot_module-reboot.obj `if test -f 'lib/xen/reboot.c'; then $(CYGPATH_W) 'lib/xen/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/reboot_module-reboot.Tpo lib/xen/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/reboot.c' object='lib/xen/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/xen/reboot_module-reboot.obj `if test -f 'lib/xen/reboot.c'; then $(CYGPATH_W) 'lib/xen/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/reboot.c'; fi` + +lib/mips/arc/reboot_module-reboot.o: lib/mips/arc/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/mips/arc/reboot_module-reboot.o -MD -MP -MF lib/mips/arc/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/mips/arc/reboot_module-reboot.o `test -f 'lib/mips/arc/reboot.c' || echo '$(srcdir)/'`lib/mips/arc/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/arc/$(DEPDIR)/reboot_module-reboot.Tpo lib/mips/arc/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/arc/reboot.c' object='lib/mips/arc/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/mips/arc/reboot_module-reboot.o `test -f 'lib/mips/arc/reboot.c' || echo '$(srcdir)/'`lib/mips/arc/reboot.c + +lib/mips/arc/reboot_module-reboot.obj: lib/mips/arc/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/mips/arc/reboot_module-reboot.obj -MD -MP -MF lib/mips/arc/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/mips/arc/reboot_module-reboot.obj `if test -f 'lib/mips/arc/reboot.c'; then $(CYGPATH_W) 'lib/mips/arc/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/arc/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/arc/$(DEPDIR)/reboot_module-reboot.Tpo lib/mips/arc/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/arc/reboot.c' object='lib/mips/arc/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/mips/arc/reboot_module-reboot.obj `if test -f 'lib/mips/arc/reboot.c'; then $(CYGPATH_W) 'lib/mips/arc/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/arc/reboot.c'; fi` + +lib/mips/loongson/reboot_module-reboot.o: lib/mips/loongson/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/mips/loongson/reboot_module-reboot.o -MD -MP -MF lib/mips/loongson/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/mips/loongson/reboot_module-reboot.o `test -f 'lib/mips/loongson/reboot.c' || echo '$(srcdir)/'`lib/mips/loongson/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/loongson/$(DEPDIR)/reboot_module-reboot.Tpo lib/mips/loongson/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/loongson/reboot.c' object='lib/mips/loongson/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/mips/loongson/reboot_module-reboot.o `test -f 'lib/mips/loongson/reboot.c' || echo '$(srcdir)/'`lib/mips/loongson/reboot.c + +lib/mips/loongson/reboot_module-reboot.obj: lib/mips/loongson/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/mips/loongson/reboot_module-reboot.obj -MD -MP -MF lib/mips/loongson/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/mips/loongson/reboot_module-reboot.obj `if test -f 'lib/mips/loongson/reboot.c'; then $(CYGPATH_W) 'lib/mips/loongson/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/loongson/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/loongson/$(DEPDIR)/reboot_module-reboot.Tpo lib/mips/loongson/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/loongson/reboot.c' object='lib/mips/loongson/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/mips/loongson/reboot_module-reboot.obj `if test -f 'lib/mips/loongson/reboot.c'; then $(CYGPATH_W) 'lib/mips/loongson/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/loongson/reboot.c'; fi` + +lib/mips/qemu_mips/reboot_module-reboot.o: lib/mips/qemu_mips/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/mips/qemu_mips/reboot_module-reboot.o -MD -MP -MF lib/mips/qemu_mips/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/mips/qemu_mips/reboot_module-reboot.o `test -f 'lib/mips/qemu_mips/reboot.c' || echo '$(srcdir)/'`lib/mips/qemu_mips/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/qemu_mips/$(DEPDIR)/reboot_module-reboot.Tpo lib/mips/qemu_mips/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/qemu_mips/reboot.c' object='lib/mips/qemu_mips/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/mips/qemu_mips/reboot_module-reboot.o `test -f 'lib/mips/qemu_mips/reboot.c' || echo '$(srcdir)/'`lib/mips/qemu_mips/reboot.c + +lib/mips/qemu_mips/reboot_module-reboot.obj: lib/mips/qemu_mips/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/mips/qemu_mips/reboot_module-reboot.obj -MD -MP -MF lib/mips/qemu_mips/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/mips/qemu_mips/reboot_module-reboot.obj `if test -f 'lib/mips/qemu_mips/reboot.c'; then $(CYGPATH_W) 'lib/mips/qemu_mips/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/qemu_mips/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/qemu_mips/$(DEPDIR)/reboot_module-reboot.Tpo lib/mips/qemu_mips/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/qemu_mips/reboot.c' object='lib/mips/qemu_mips/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/mips/qemu_mips/reboot_module-reboot.obj `if test -f 'lib/mips/qemu_mips/reboot.c'; then $(CYGPATH_W) 'lib/mips/qemu_mips/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/qemu_mips/reboot.c'; fi` + +lib/ieee1275/reboot_module-reboot.o: lib/ieee1275/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/reboot_module-reboot.o -MD -MP -MF lib/ieee1275/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/ieee1275/reboot_module-reboot.o `test -f 'lib/ieee1275/reboot.c' || echo '$(srcdir)/'`lib/ieee1275/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/reboot_module-reboot.Tpo lib/ieee1275/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/reboot.c' object='lib/ieee1275/reboot_module-reboot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/reboot_module-reboot.o `test -f 'lib/ieee1275/reboot.c' || echo '$(srcdir)/'`lib/ieee1275/reboot.c + +lib/ieee1275/reboot_module-reboot.obj: lib/ieee1275/reboot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/reboot_module-reboot.obj -MD -MP -MF lib/ieee1275/$(DEPDIR)/reboot_module-reboot.Tpo -c -o lib/ieee1275/reboot_module-reboot.obj `if test -f 'lib/ieee1275/reboot.c'; then $(CYGPATH_W) 'lib/ieee1275/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/reboot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/reboot_module-reboot.Tpo lib/ieee1275/$(DEPDIR)/reboot_module-reboot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/reboot.c' object='lib/ieee1275/reboot_module-reboot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $(reboot_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/reboot_module-reboot.obj `if test -f 'lib/ieee1275/reboot.c'; then $(CYGPATH_W) 'lib/ieee1275/reboot.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/reboot.c'; fi` + +commands/regexp_module-regexp.o: commands/regexp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -MT commands/regexp_module-regexp.o -MD -MP -MF commands/$(DEPDIR)/regexp_module-regexp.Tpo -c -o commands/regexp_module-regexp.o `test -f 'commands/regexp.c' || echo '$(srcdir)/'`commands/regexp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/regexp_module-regexp.Tpo commands/$(DEPDIR)/regexp_module-regexp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/regexp.c' object='commands/regexp_module-regexp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -c -o commands/regexp_module-regexp.o `test -f 'commands/regexp.c' || echo '$(srcdir)/'`commands/regexp.c + +commands/regexp_module-regexp.obj: commands/regexp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -MT commands/regexp_module-regexp.obj -MD -MP -MF commands/$(DEPDIR)/regexp_module-regexp.Tpo -c -o commands/regexp_module-regexp.obj `if test -f 'commands/regexp.c'; then $(CYGPATH_W) 'commands/regexp.c'; else $(CYGPATH_W) '$(srcdir)/commands/regexp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/regexp_module-regexp.Tpo commands/$(DEPDIR)/regexp_module-regexp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/regexp.c' object='commands/regexp_module-regexp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -c -o commands/regexp_module-regexp.obj `if test -f 'commands/regexp.c'; then $(CYGPATH_W) 'commands/regexp.c'; else $(CYGPATH_W) '$(srcdir)/commands/regexp.c'; fi` + +commands/regexp_module-wildcard.o: commands/wildcard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -MT commands/regexp_module-wildcard.o -MD -MP -MF commands/$(DEPDIR)/regexp_module-wildcard.Tpo -c -o commands/regexp_module-wildcard.o `test -f 'commands/wildcard.c' || echo '$(srcdir)/'`commands/wildcard.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/regexp_module-wildcard.Tpo commands/$(DEPDIR)/regexp_module-wildcard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/wildcard.c' object='commands/regexp_module-wildcard.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -c -o commands/regexp_module-wildcard.o `test -f 'commands/wildcard.c' || echo '$(srcdir)/'`commands/wildcard.c + +commands/regexp_module-wildcard.obj: commands/wildcard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -MT commands/regexp_module-wildcard.obj -MD -MP -MF commands/$(DEPDIR)/regexp_module-wildcard.Tpo -c -o commands/regexp_module-wildcard.obj `if test -f 'commands/wildcard.c'; then $(CYGPATH_W) 'commands/wildcard.c'; else $(CYGPATH_W) '$(srcdir)/commands/wildcard.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/regexp_module-wildcard.Tpo commands/$(DEPDIR)/regexp_module-wildcard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/wildcard.c' object='commands/regexp_module-wildcard.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -c -o commands/regexp_module-wildcard.obj `if test -f 'commands/wildcard.c'; then $(CYGPATH_W) 'commands/wildcard.c'; else $(CYGPATH_W) '$(srcdir)/commands/wildcard.c'; fi` + +gnulib/regexp_module-regex.o: gnulib/regex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -MT gnulib/regexp_module-regex.o -MD -MP -MF gnulib/$(DEPDIR)/regexp_module-regex.Tpo -c -o gnulib/regexp_module-regex.o `test -f 'gnulib/regex.c' || echo '$(srcdir)/'`gnulib/regex.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gnulib/$(DEPDIR)/regexp_module-regex.Tpo gnulib/$(DEPDIR)/regexp_module-regex.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gnulib/regex.c' object='gnulib/regexp_module-regex.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -c -o gnulib/regexp_module-regex.o `test -f 'gnulib/regex.c' || echo '$(srcdir)/'`gnulib/regex.c + +gnulib/regexp_module-regex.obj: gnulib/regex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -MT gnulib/regexp_module-regex.obj -MD -MP -MF gnulib/$(DEPDIR)/regexp_module-regex.Tpo -c -o gnulib/regexp_module-regex.obj `if test -f 'gnulib/regex.c'; then $(CYGPATH_W) 'gnulib/regex.c'; else $(CYGPATH_W) '$(srcdir)/gnulib/regex.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) gnulib/$(DEPDIR)/regexp_module-regex.Tpo gnulib/$(DEPDIR)/regexp_module-regex.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gnulib/regex.c' object='gnulib/regexp_module-regex.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $(regexp_module_CFLAGS) $(CFLAGS) -c -o gnulib/regexp_module-regex.obj `if test -f 'gnulib/regex.c'; then $(CYGPATH_W) 'gnulib/regex.c'; else $(CYGPATH_W) '$(srcdir)/gnulib/regex.c'; fi` + +fs/reiserfs_module-reiserfs.o: fs/reiserfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reiserfs_module_CPPFLAGS) $(CPPFLAGS) $(reiserfs_module_CFLAGS) $(CFLAGS) -MT fs/reiserfs_module-reiserfs.o -MD -MP -MF fs/$(DEPDIR)/reiserfs_module-reiserfs.Tpo -c -o fs/reiserfs_module-reiserfs.o `test -f 'fs/reiserfs.c' || echo '$(srcdir)/'`fs/reiserfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/reiserfs_module-reiserfs.Tpo fs/$(DEPDIR)/reiserfs_module-reiserfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/reiserfs.c' object='fs/reiserfs_module-reiserfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reiserfs_module_CPPFLAGS) $(CPPFLAGS) $(reiserfs_module_CFLAGS) $(CFLAGS) -c -o fs/reiserfs_module-reiserfs.o `test -f 'fs/reiserfs.c' || echo '$(srcdir)/'`fs/reiserfs.c + +fs/reiserfs_module-reiserfs.obj: fs/reiserfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reiserfs_module_CPPFLAGS) $(CPPFLAGS) $(reiserfs_module_CFLAGS) $(CFLAGS) -MT fs/reiserfs_module-reiserfs.obj -MD -MP -MF fs/$(DEPDIR)/reiserfs_module-reiserfs.Tpo -c -o fs/reiserfs_module-reiserfs.obj `if test -f 'fs/reiserfs.c'; then $(CYGPATH_W) 'fs/reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/reiserfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/reiserfs_module-reiserfs.Tpo fs/$(DEPDIR)/reiserfs_module-reiserfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/reiserfs.c' object='fs/reiserfs_module-reiserfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reiserfs_module_CPPFLAGS) $(CPPFLAGS) $(reiserfs_module_CFLAGS) $(CFLAGS) -c -o fs/reiserfs_module-reiserfs.obj `if test -f 'fs/reiserfs.c'; then $(CYGPATH_W) 'fs/reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/reiserfs.c'; fi` + +lib/i386/relocator_module-relocator.o: lib/i386/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/i386/relocator_module-relocator.o -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/i386/relocator_module-relocator.o `test -f 'lib/i386/relocator.c' || echo '$(srcdir)/'`lib/i386/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/relocator.c' object='lib/i386/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/i386/relocator_module-relocator.o `test -f 'lib/i386/relocator.c' || echo '$(srcdir)/'`lib/i386/relocator.c + +lib/i386/relocator_module-relocator.obj: lib/i386/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/i386/relocator_module-relocator.obj -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/i386/relocator_module-relocator.obj `if test -f 'lib/i386/relocator.c'; then $(CYGPATH_W) 'lib/i386/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/relocator.c' object='lib/i386/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/i386/relocator_module-relocator.obj `if test -f 'lib/i386/relocator.c'; then $(CYGPATH_W) 'lib/i386/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator.c'; fi` + +lib/i386/relocator_module-relocator_common_c.o: lib/i386/relocator_common_c.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/i386/relocator_module-relocator_common_c.o -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator_common_c.Tpo -c -o lib/i386/relocator_module-relocator_common_c.o `test -f 'lib/i386/relocator_common_c.c' || echo '$(srcdir)/'`lib/i386/relocator_common_c.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator_common_c.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator_common_c.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/relocator_common_c.c' object='lib/i386/relocator_module-relocator_common_c.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/i386/relocator_module-relocator_common_c.o `test -f 'lib/i386/relocator_common_c.c' || echo '$(srcdir)/'`lib/i386/relocator_common_c.c + +lib/i386/relocator_module-relocator_common_c.obj: lib/i386/relocator_common_c.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/i386/relocator_module-relocator_common_c.obj -MD -MP -MF lib/i386/$(DEPDIR)/relocator_module-relocator_common_c.Tpo -c -o lib/i386/relocator_module-relocator_common_c.obj `if test -f 'lib/i386/relocator_common_c.c'; then $(CYGPATH_W) 'lib/i386/relocator_common_c.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator_common_c.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/i386/$(DEPDIR)/relocator_module-relocator_common_c.Tpo lib/i386/$(DEPDIR)/relocator_module-relocator_common_c.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/i386/relocator_common_c.c' object='lib/i386/relocator_module-relocator_common_c.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/i386/relocator_module-relocator_common_c.obj `if test -f 'lib/i386/relocator_common_c.c'; then $(CYGPATH_W) 'lib/i386/relocator_common_c.c'; else $(CYGPATH_W) '$(srcdir)/lib/i386/relocator_common_c.c'; fi` + +lib/relocator_module-relocator.o: lib/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/relocator_module-relocator.o -MD -MP -MF lib/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/relocator_module-relocator.o `test -f 'lib/relocator.c' || echo '$(srcdir)/'`lib/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/relocator_module-relocator.Tpo lib/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/relocator.c' object='lib/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/relocator_module-relocator.o `test -f 'lib/relocator.c' || echo '$(srcdir)/'`lib/relocator.c + +lib/relocator_module-relocator.obj: lib/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/relocator_module-relocator.obj -MD -MP -MF lib/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/relocator_module-relocator.obj `if test -f 'lib/relocator.c'; then $(CYGPATH_W) 'lib/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/relocator_module-relocator.Tpo lib/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/relocator.c' object='lib/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/relocator_module-relocator.obj `if test -f 'lib/relocator.c'; then $(CYGPATH_W) 'lib/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/relocator.c'; fi` + +lib/efi/relocator_module-relocator.o: lib/efi/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/efi/relocator_module-relocator.o -MD -MP -MF lib/efi/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/efi/relocator_module-relocator.o `test -f 'lib/efi/relocator.c' || echo '$(srcdir)/'`lib/efi/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/relocator_module-relocator.Tpo lib/efi/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/relocator.c' object='lib/efi/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/efi/relocator_module-relocator.o `test -f 'lib/efi/relocator.c' || echo '$(srcdir)/'`lib/efi/relocator.c + +lib/efi/relocator_module-relocator.obj: lib/efi/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/efi/relocator_module-relocator.obj -MD -MP -MF lib/efi/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/efi/relocator_module-relocator.obj `if test -f 'lib/efi/relocator.c'; then $(CYGPATH_W) 'lib/efi/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/efi/$(DEPDIR)/relocator_module-relocator.Tpo lib/efi/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/efi/relocator.c' object='lib/efi/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/efi/relocator_module-relocator.obj `if test -f 'lib/efi/relocator.c'; then $(CYGPATH_W) 'lib/efi/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/efi/relocator.c'; fi` + +lib/ieee1275/relocator_module-relocator.o: lib/ieee1275/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/relocator_module-relocator.o -MD -MP -MF lib/ieee1275/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/ieee1275/relocator_module-relocator.o `test -f 'lib/ieee1275/relocator.c' || echo '$(srcdir)/'`lib/ieee1275/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/relocator_module-relocator.Tpo lib/ieee1275/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/relocator.c' object='lib/ieee1275/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/relocator_module-relocator.o `test -f 'lib/ieee1275/relocator.c' || echo '$(srcdir)/'`lib/ieee1275/relocator.c + +lib/ieee1275/relocator_module-relocator.obj: lib/ieee1275/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/ieee1275/relocator_module-relocator.obj -MD -MP -MF lib/ieee1275/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/ieee1275/relocator_module-relocator.obj `if test -f 'lib/ieee1275/relocator.c'; then $(CYGPATH_W) 'lib/ieee1275/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/ieee1275/$(DEPDIR)/relocator_module-relocator.Tpo lib/ieee1275/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/ieee1275/relocator.c' object='lib/ieee1275/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/ieee1275/relocator_module-relocator.obj `if test -f 'lib/ieee1275/relocator.c'; then $(CYGPATH_W) 'lib/ieee1275/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/ieee1275/relocator.c'; fi` + +lib/xen/relocator_module-relocator.o: lib/xen/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/xen/relocator_module-relocator.o -MD -MP -MF lib/xen/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/xen/relocator_module-relocator.o `test -f 'lib/xen/relocator.c' || echo '$(srcdir)/'`lib/xen/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/relocator_module-relocator.Tpo lib/xen/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/relocator.c' object='lib/xen/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/xen/relocator_module-relocator.o `test -f 'lib/xen/relocator.c' || echo '$(srcdir)/'`lib/xen/relocator.c + +lib/xen/relocator_module-relocator.obj: lib/xen/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/xen/relocator_module-relocator.obj -MD -MP -MF lib/xen/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/xen/relocator_module-relocator.obj `if test -f 'lib/xen/relocator.c'; then $(CYGPATH_W) 'lib/xen/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xen/$(DEPDIR)/relocator_module-relocator.Tpo lib/xen/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xen/relocator.c' object='lib/xen/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/xen/relocator_module-relocator.obj `if test -f 'lib/xen/relocator.c'; then $(CYGPATH_W) 'lib/xen/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/xen/relocator.c'; fi` + +lib/mips/relocator_module-relocator.o: lib/mips/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/mips/relocator_module-relocator.o -MD -MP -MF lib/mips/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/mips/relocator_module-relocator.o `test -f 'lib/mips/relocator.c' || echo '$(srcdir)/'`lib/mips/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/$(DEPDIR)/relocator_module-relocator.Tpo lib/mips/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/relocator.c' object='lib/mips/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/mips/relocator_module-relocator.o `test -f 'lib/mips/relocator.c' || echo '$(srcdir)/'`lib/mips/relocator.c + +lib/mips/relocator_module-relocator.obj: lib/mips/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/mips/relocator_module-relocator.obj -MD -MP -MF lib/mips/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/mips/relocator_module-relocator.obj `if test -f 'lib/mips/relocator.c'; then $(CYGPATH_W) 'lib/mips/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/mips/$(DEPDIR)/relocator_module-relocator.Tpo lib/mips/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/mips/relocator.c' object='lib/mips/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/mips/relocator_module-relocator.obj `if test -f 'lib/mips/relocator.c'; then $(CYGPATH_W) 'lib/mips/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/mips/relocator.c'; fi` + +lib/powerpc/relocator_module-relocator.o: lib/powerpc/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/powerpc/relocator_module-relocator.o -MD -MP -MF lib/powerpc/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/powerpc/relocator_module-relocator.o `test -f 'lib/powerpc/relocator.c' || echo '$(srcdir)/'`lib/powerpc/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/powerpc/$(DEPDIR)/relocator_module-relocator.Tpo lib/powerpc/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/powerpc/relocator.c' object='lib/powerpc/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/powerpc/relocator_module-relocator.o `test -f 'lib/powerpc/relocator.c' || echo '$(srcdir)/'`lib/powerpc/relocator.c + +lib/powerpc/relocator_module-relocator.obj: lib/powerpc/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/powerpc/relocator_module-relocator.obj -MD -MP -MF lib/powerpc/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/powerpc/relocator_module-relocator.obj `if test -f 'lib/powerpc/relocator.c'; then $(CYGPATH_W) 'lib/powerpc/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/powerpc/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/powerpc/$(DEPDIR)/relocator_module-relocator.Tpo lib/powerpc/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/powerpc/relocator.c' object='lib/powerpc/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/powerpc/relocator_module-relocator.obj `if test -f 'lib/powerpc/relocator.c'; then $(CYGPATH_W) 'lib/powerpc/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/powerpc/relocator.c'; fi` + +lib/x86_64/efi/relocator_module-relocator.o: lib/x86_64/efi/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/x86_64/efi/relocator_module-relocator.o -MD -MP -MF lib/x86_64/efi/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/x86_64/efi/relocator_module-relocator.o `test -f 'lib/x86_64/efi/relocator.c' || echo '$(srcdir)/'`lib/x86_64/efi/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/x86_64/efi/$(DEPDIR)/relocator_module-relocator.Tpo lib/x86_64/efi/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/x86_64/efi/relocator.c' object='lib/x86_64/efi/relocator_module-relocator.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/x86_64/efi/relocator_module-relocator.o `test -f 'lib/x86_64/efi/relocator.c' || echo '$(srcdir)/'`lib/x86_64/efi/relocator.c + +lib/x86_64/efi/relocator_module-relocator.obj: lib/x86_64/efi/relocator.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -MT lib/x86_64/efi/relocator_module-relocator.obj -MD -MP -MF lib/x86_64/efi/$(DEPDIR)/relocator_module-relocator.Tpo -c -o lib/x86_64/efi/relocator_module-relocator.obj `if test -f 'lib/x86_64/efi/relocator.c'; then $(CYGPATH_W) 'lib/x86_64/efi/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/x86_64/efi/relocator.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/x86_64/efi/$(DEPDIR)/relocator_module-relocator.Tpo lib/x86_64/efi/$(DEPDIR)/relocator_module-relocator.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/x86_64/efi/relocator.c' object='lib/x86_64/efi/relocator_module-relocator.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $(relocator_module_CFLAGS) $(CFLAGS) -c -o lib/x86_64/efi/relocator_module-relocator.obj `if test -f 'lib/x86_64/efi/relocator.c'; then $(CYGPATH_W) 'lib/x86_64/efi/relocator.c'; else $(CYGPATH_W) '$(srcdir)/lib/x86_64/efi/relocator.c'; fi` + +fs/romfs_module-romfs.o: fs/romfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(romfs_module_CPPFLAGS) $(CPPFLAGS) $(romfs_module_CFLAGS) $(CFLAGS) -MT fs/romfs_module-romfs.o -MD -MP -MF fs/$(DEPDIR)/romfs_module-romfs.Tpo -c -o fs/romfs_module-romfs.o `test -f 'fs/romfs.c' || echo '$(srcdir)/'`fs/romfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/romfs_module-romfs.Tpo fs/$(DEPDIR)/romfs_module-romfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/romfs.c' object='fs/romfs_module-romfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(romfs_module_CPPFLAGS) $(CPPFLAGS) $(romfs_module_CFLAGS) $(CFLAGS) -c -o fs/romfs_module-romfs.o `test -f 'fs/romfs.c' || echo '$(srcdir)/'`fs/romfs.c + +fs/romfs_module-romfs.obj: fs/romfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(romfs_module_CPPFLAGS) $(CPPFLAGS) $(romfs_module_CFLAGS) $(CFLAGS) -MT fs/romfs_module-romfs.obj -MD -MP -MF fs/$(DEPDIR)/romfs_module-romfs.Tpo -c -o fs/romfs_module-romfs.obj `if test -f 'fs/romfs.c'; then $(CYGPATH_W) 'fs/romfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/romfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/romfs_module-romfs.Tpo fs/$(DEPDIR)/romfs_module-romfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/romfs.c' object='fs/romfs_module-romfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(romfs_module_CPPFLAGS) $(CPPFLAGS) $(romfs_module_CFLAGS) $(CFLAGS) -c -o fs/romfs_module-romfs.obj `if test -f 'fs/romfs.c'; then $(CYGPATH_W) 'fs/romfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/romfs.c'; fi` + +disk/scsi_module-scsi.o: disk/scsi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(scsi_module_CPPFLAGS) $(CPPFLAGS) $(scsi_module_CFLAGS) $(CFLAGS) -MT disk/scsi_module-scsi.o -MD -MP -MF disk/$(DEPDIR)/scsi_module-scsi.Tpo -c -o disk/scsi_module-scsi.o `test -f 'disk/scsi.c' || echo '$(srcdir)/'`disk/scsi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/scsi_module-scsi.Tpo disk/$(DEPDIR)/scsi_module-scsi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/scsi.c' object='disk/scsi_module-scsi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(scsi_module_CPPFLAGS) $(CPPFLAGS) $(scsi_module_CFLAGS) $(CFLAGS) -c -o disk/scsi_module-scsi.o `test -f 'disk/scsi.c' || echo '$(srcdir)/'`disk/scsi.c + +disk/scsi_module-scsi.obj: disk/scsi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(scsi_module_CPPFLAGS) $(CPPFLAGS) $(scsi_module_CFLAGS) $(CFLAGS) -MT disk/scsi_module-scsi.obj -MD -MP -MF disk/$(DEPDIR)/scsi_module-scsi.Tpo -c -o disk/scsi_module-scsi.obj `if test -f 'disk/scsi.c'; then $(CYGPATH_W) 'disk/scsi.c'; else $(CYGPATH_W) '$(srcdir)/disk/scsi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/scsi_module-scsi.Tpo disk/$(DEPDIR)/scsi_module-scsi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/scsi.c' object='disk/scsi_module-scsi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(scsi_module_CPPFLAGS) $(CPPFLAGS) $(scsi_module_CFLAGS) $(CFLAGS) -c -o disk/scsi_module-scsi.obj `if test -f 'disk/scsi.c'; then $(CYGPATH_W) 'disk/scsi.c'; else $(CYGPATH_W) '$(srcdir)/disk/scsi.c'; fi` + +video/emu/sdl_module-sdl.o: video/emu/sdl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sdl_module_CPPFLAGS) $(CPPFLAGS) $(sdl_module_CFLAGS) $(CFLAGS) -MT video/emu/sdl_module-sdl.o -MD -MP -MF video/emu/$(DEPDIR)/sdl_module-sdl.Tpo -c -o video/emu/sdl_module-sdl.o `test -f 'video/emu/sdl.c' || echo '$(srcdir)/'`video/emu/sdl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/emu/$(DEPDIR)/sdl_module-sdl.Tpo video/emu/$(DEPDIR)/sdl_module-sdl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/emu/sdl.c' object='video/emu/sdl_module-sdl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sdl_module_CPPFLAGS) $(CPPFLAGS) $(sdl_module_CFLAGS) $(CFLAGS) -c -o video/emu/sdl_module-sdl.o `test -f 'video/emu/sdl.c' || echo '$(srcdir)/'`video/emu/sdl.c + +video/emu/sdl_module-sdl.obj: video/emu/sdl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sdl_module_CPPFLAGS) $(CPPFLAGS) $(sdl_module_CFLAGS) $(CFLAGS) -MT video/emu/sdl_module-sdl.obj -MD -MP -MF video/emu/$(DEPDIR)/sdl_module-sdl.Tpo -c -o video/emu/sdl_module-sdl.obj `if test -f 'video/emu/sdl.c'; then $(CYGPATH_W) 'video/emu/sdl.c'; else $(CYGPATH_W) '$(srcdir)/video/emu/sdl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/emu/$(DEPDIR)/sdl_module-sdl.Tpo video/emu/$(DEPDIR)/sdl_module-sdl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/emu/sdl.c' object='video/emu/sdl_module-sdl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sdl_module_CPPFLAGS) $(CPPFLAGS) $(sdl_module_CFLAGS) $(CFLAGS) -c -o video/emu/sdl_module-sdl.obj `if test -f 'video/emu/sdl.c'; then $(CYGPATH_W) 'video/emu/sdl.c'; else $(CYGPATH_W) '$(srcdir)/video/emu/sdl.c'; fi` + +commands/search_module-search_wrap.o: commands/search_wrap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_module_CPPFLAGS) $(CPPFLAGS) $(search_module_CFLAGS) $(CFLAGS) -MT commands/search_module-search_wrap.o -MD -MP -MF commands/$(DEPDIR)/search_module-search_wrap.Tpo -c -o commands/search_module-search_wrap.o `test -f 'commands/search_wrap.c' || echo '$(srcdir)/'`commands/search_wrap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_module-search_wrap.Tpo commands/$(DEPDIR)/search_module-search_wrap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_wrap.c' object='commands/search_module-search_wrap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_module_CPPFLAGS) $(CPPFLAGS) $(search_module_CFLAGS) $(CFLAGS) -c -o commands/search_module-search_wrap.o `test -f 'commands/search_wrap.c' || echo '$(srcdir)/'`commands/search_wrap.c + +commands/search_module-search_wrap.obj: commands/search_wrap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_module_CPPFLAGS) $(CPPFLAGS) $(search_module_CFLAGS) $(CFLAGS) -MT commands/search_module-search_wrap.obj -MD -MP -MF commands/$(DEPDIR)/search_module-search_wrap.Tpo -c -o commands/search_module-search_wrap.obj `if test -f 'commands/search_wrap.c'; then $(CYGPATH_W) 'commands/search_wrap.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_wrap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_module-search_wrap.Tpo commands/$(DEPDIR)/search_module-search_wrap.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_wrap.c' object='commands/search_module-search_wrap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_module_CPPFLAGS) $(CPPFLAGS) $(search_module_CFLAGS) $(CFLAGS) -c -o commands/search_module-search_wrap.obj `if test -f 'commands/search_wrap.c'; then $(CYGPATH_W) 'commands/search_wrap.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_wrap.c'; fi` + +commands/search_fs_file_module-search_file.o: commands/search_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_file_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_file_module_CFLAGS) $(CFLAGS) -MT commands/search_fs_file_module-search_file.o -MD -MP -MF commands/$(DEPDIR)/search_fs_file_module-search_file.Tpo -c -o commands/search_fs_file_module-search_file.o `test -f 'commands/search_file.c' || echo '$(srcdir)/'`commands/search_file.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_fs_file_module-search_file.Tpo commands/$(DEPDIR)/search_fs_file_module-search_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_file.c' object='commands/search_fs_file_module-search_file.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_file_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_file_module_CFLAGS) $(CFLAGS) -c -o commands/search_fs_file_module-search_file.o `test -f 'commands/search_file.c' || echo '$(srcdir)/'`commands/search_file.c + +commands/search_fs_file_module-search_file.obj: commands/search_file.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_file_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_file_module_CFLAGS) $(CFLAGS) -MT commands/search_fs_file_module-search_file.obj -MD -MP -MF commands/$(DEPDIR)/search_fs_file_module-search_file.Tpo -c -o commands/search_fs_file_module-search_file.obj `if test -f 'commands/search_file.c'; then $(CYGPATH_W) 'commands/search_file.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_file.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_fs_file_module-search_file.Tpo commands/$(DEPDIR)/search_fs_file_module-search_file.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_file.c' object='commands/search_fs_file_module-search_file.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_file_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_file_module_CFLAGS) $(CFLAGS) -c -o commands/search_fs_file_module-search_file.obj `if test -f 'commands/search_file.c'; then $(CYGPATH_W) 'commands/search_file.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_file.c'; fi` + +commands/search_fs_uuid_module-search_uuid.o: commands/search_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_uuid_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_uuid_module_CFLAGS) $(CFLAGS) -MT commands/search_fs_uuid_module-search_uuid.o -MD -MP -MF commands/$(DEPDIR)/search_fs_uuid_module-search_uuid.Tpo -c -o commands/search_fs_uuid_module-search_uuid.o `test -f 'commands/search_uuid.c' || echo '$(srcdir)/'`commands/search_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_fs_uuid_module-search_uuid.Tpo commands/$(DEPDIR)/search_fs_uuid_module-search_uuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_uuid.c' object='commands/search_fs_uuid_module-search_uuid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_uuid_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_uuid_module_CFLAGS) $(CFLAGS) -c -o commands/search_fs_uuid_module-search_uuid.o `test -f 'commands/search_uuid.c' || echo '$(srcdir)/'`commands/search_uuid.c + +commands/search_fs_uuid_module-search_uuid.obj: commands/search_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_uuid_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_uuid_module_CFLAGS) $(CFLAGS) -MT commands/search_fs_uuid_module-search_uuid.obj -MD -MP -MF commands/$(DEPDIR)/search_fs_uuid_module-search_uuid.Tpo -c -o commands/search_fs_uuid_module-search_uuid.obj `if test -f 'commands/search_uuid.c'; then $(CYGPATH_W) 'commands/search_uuid.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_uuid.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_fs_uuid_module-search_uuid.Tpo commands/$(DEPDIR)/search_fs_uuid_module-search_uuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_uuid.c' object='commands/search_fs_uuid_module-search_uuid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_uuid_module_CPPFLAGS) $(CPPFLAGS) $(search_fs_uuid_module_CFLAGS) $(CFLAGS) -c -o commands/search_fs_uuid_module-search_uuid.obj `if test -f 'commands/search_uuid.c'; then $(CYGPATH_W) 'commands/search_uuid.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_uuid.c'; fi` + +commands/search_label_module-search_label.o: commands/search_label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_label_module_CPPFLAGS) $(CPPFLAGS) $(search_label_module_CFLAGS) $(CFLAGS) -MT commands/search_label_module-search_label.o -MD -MP -MF commands/$(DEPDIR)/search_label_module-search_label.Tpo -c -o commands/search_label_module-search_label.o `test -f 'commands/search_label.c' || echo '$(srcdir)/'`commands/search_label.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_label_module-search_label.Tpo commands/$(DEPDIR)/search_label_module-search_label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_label.c' object='commands/search_label_module-search_label.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_label_module_CPPFLAGS) $(CPPFLAGS) $(search_label_module_CFLAGS) $(CFLAGS) -c -o commands/search_label_module-search_label.o `test -f 'commands/search_label.c' || echo '$(srcdir)/'`commands/search_label.c + +commands/search_label_module-search_label.obj: commands/search_label.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_label_module_CPPFLAGS) $(CPPFLAGS) $(search_label_module_CFLAGS) $(CFLAGS) -MT commands/search_label_module-search_label.obj -MD -MP -MF commands/$(DEPDIR)/search_label_module-search_label.Tpo -c -o commands/search_label_module-search_label.obj `if test -f 'commands/search_label.c'; then $(CYGPATH_W) 'commands/search_label.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_label.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/search_label_module-search_label.Tpo commands/$(DEPDIR)/search_label_module-search_label.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/search_label.c' object='commands/search_label_module-search_label.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_label_module_CPPFLAGS) $(CPPFLAGS) $(search_label_module_CFLAGS) $(CFLAGS) -c -o commands/search_label_module-search_label.obj `if test -f 'commands/search_label.c'; then $(CYGPATH_W) 'commands/search_label.c'; else $(CYGPATH_W) '$(srcdir)/commands/search_label.c'; fi` + +commands/i386/pc/sendkey_module-sendkey.o: commands/i386/pc/sendkey.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sendkey_module_CPPFLAGS) $(CPPFLAGS) $(sendkey_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/sendkey_module-sendkey.o -MD -MP -MF commands/i386/pc/$(DEPDIR)/sendkey_module-sendkey.Tpo -c -o commands/i386/pc/sendkey_module-sendkey.o `test -f 'commands/i386/pc/sendkey.c' || echo '$(srcdir)/'`commands/i386/pc/sendkey.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/sendkey_module-sendkey.Tpo commands/i386/pc/$(DEPDIR)/sendkey_module-sendkey.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/sendkey.c' object='commands/i386/pc/sendkey_module-sendkey.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sendkey_module_CPPFLAGS) $(CPPFLAGS) $(sendkey_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/sendkey_module-sendkey.o `test -f 'commands/i386/pc/sendkey.c' || echo '$(srcdir)/'`commands/i386/pc/sendkey.c + +commands/i386/pc/sendkey_module-sendkey.obj: commands/i386/pc/sendkey.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sendkey_module_CPPFLAGS) $(CPPFLAGS) $(sendkey_module_CFLAGS) $(CFLAGS) -MT commands/i386/pc/sendkey_module-sendkey.obj -MD -MP -MF commands/i386/pc/$(DEPDIR)/sendkey_module-sendkey.Tpo -c -o commands/i386/pc/sendkey_module-sendkey.obj `if test -f 'commands/i386/pc/sendkey.c'; then $(CYGPATH_W) 'commands/i386/pc/sendkey.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/sendkey.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/i386/pc/$(DEPDIR)/sendkey_module-sendkey.Tpo commands/i386/pc/$(DEPDIR)/sendkey_module-sendkey.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/i386/pc/sendkey.c' object='commands/i386/pc/sendkey_module-sendkey.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sendkey_module_CPPFLAGS) $(CPPFLAGS) $(sendkey_module_CFLAGS) $(CFLAGS) -c -o commands/i386/pc/sendkey_module-sendkey.obj `if test -f 'commands/i386/pc/sendkey.c'; then $(CYGPATH_W) 'commands/i386/pc/sendkey.c'; else $(CYGPATH_W) '$(srcdir)/commands/i386/pc/sendkey.c'; fi` + +term/efi/serial_module-serial.o: term/efi/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/efi/serial_module-serial.o -MD -MP -MF term/efi/$(DEPDIR)/serial_module-serial.Tpo -c -o term/efi/serial_module-serial.o `test -f 'term/efi/serial.c' || echo '$(srcdir)/'`term/efi/serial.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/efi/$(DEPDIR)/serial_module-serial.Tpo term/efi/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/efi/serial.c' object='term/efi/serial_module-serial.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/efi/serial_module-serial.o `test -f 'term/efi/serial.c' || echo '$(srcdir)/'`term/efi/serial.c + +term/efi/serial_module-serial.obj: term/efi/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/efi/serial_module-serial.obj -MD -MP -MF term/efi/$(DEPDIR)/serial_module-serial.Tpo -c -o term/efi/serial_module-serial.obj `if test -f 'term/efi/serial.c'; then $(CYGPATH_W) 'term/efi/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/efi/serial.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/efi/$(DEPDIR)/serial_module-serial.Tpo term/efi/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/efi/serial.c' object='term/efi/serial_module-serial.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/efi/serial_module-serial.obj `if test -f 'term/efi/serial.c'; then $(CYGPATH_W) 'term/efi/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/efi/serial.c'; fi` + +term/serial_module-serial.o: term/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/serial_module-serial.o -MD -MP -MF term/$(DEPDIR)/serial_module-serial.Tpo -c -o term/serial_module-serial.o `test -f 'term/serial.c' || echo '$(srcdir)/'`term/serial.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/serial_module-serial.Tpo term/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/serial.c' object='term/serial_module-serial.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/serial_module-serial.o `test -f 'term/serial.c' || echo '$(srcdir)/'`term/serial.c + +term/serial_module-serial.obj: term/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/serial_module-serial.obj -MD -MP -MF term/$(DEPDIR)/serial_module-serial.Tpo -c -o term/serial_module-serial.obj `if test -f 'term/serial.c'; then $(CYGPATH_W) 'term/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/serial.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/serial_module-serial.Tpo term/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/serial.c' object='term/serial_module-serial.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/serial_module-serial.obj `if test -f 'term/serial.c'; then $(CYGPATH_W) 'term/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/serial.c'; fi` + +term/serial_module-ns8250.o: term/ns8250.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/serial_module-ns8250.o -MD -MP -MF term/$(DEPDIR)/serial_module-ns8250.Tpo -c -o term/serial_module-ns8250.o `test -f 'term/ns8250.c' || echo '$(srcdir)/'`term/ns8250.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/serial_module-ns8250.Tpo term/$(DEPDIR)/serial_module-ns8250.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ns8250.c' object='term/serial_module-ns8250.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/serial_module-ns8250.o `test -f 'term/ns8250.c' || echo '$(srcdir)/'`term/ns8250.c + +term/serial_module-ns8250.obj: term/ns8250.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/serial_module-ns8250.obj -MD -MP -MF term/$(DEPDIR)/serial_module-ns8250.Tpo -c -o term/serial_module-ns8250.obj `if test -f 'term/ns8250.c'; then $(CYGPATH_W) 'term/ns8250.c'; else $(CYGPATH_W) '$(srcdir)/term/ns8250.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/serial_module-ns8250.Tpo term/$(DEPDIR)/serial_module-ns8250.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ns8250.c' object='term/serial_module-ns8250.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/serial_module-ns8250.obj `if test -f 'term/ns8250.c'; then $(CYGPATH_W) 'term/ns8250.c'; else $(CYGPATH_W) '$(srcdir)/term/ns8250.c'; fi` + +term/ieee1275/serial_module-serial.o: term/ieee1275/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/ieee1275/serial_module-serial.o -MD -MP -MF term/ieee1275/$(DEPDIR)/serial_module-serial.Tpo -c -o term/ieee1275/serial_module-serial.o `test -f 'term/ieee1275/serial.c' || echo '$(srcdir)/'`term/ieee1275/serial.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/ieee1275/$(DEPDIR)/serial_module-serial.Tpo term/ieee1275/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ieee1275/serial.c' object='term/ieee1275/serial_module-serial.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/ieee1275/serial_module-serial.o `test -f 'term/ieee1275/serial.c' || echo '$(srcdir)/'`term/ieee1275/serial.c + +term/ieee1275/serial_module-serial.obj: term/ieee1275/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/ieee1275/serial_module-serial.obj -MD -MP -MF term/ieee1275/$(DEPDIR)/serial_module-serial.Tpo -c -o term/ieee1275/serial_module-serial.obj `if test -f 'term/ieee1275/serial.c'; then $(CYGPATH_W) 'term/ieee1275/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/ieee1275/serial.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/ieee1275/$(DEPDIR)/serial_module-serial.Tpo term/ieee1275/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/ieee1275/serial.c' object='term/ieee1275/serial_module-serial.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/ieee1275/serial_module-serial.obj `if test -f 'term/ieee1275/serial.c'; then $(CYGPATH_W) 'term/ieee1275/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/ieee1275/serial.c'; fi` + +term/arc/serial_module-serial.o: term/arc/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/arc/serial_module-serial.o -MD -MP -MF term/arc/$(DEPDIR)/serial_module-serial.Tpo -c -o term/arc/serial_module-serial.o `test -f 'term/arc/serial.c' || echo '$(srcdir)/'`term/arc/serial.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/arc/$(DEPDIR)/serial_module-serial.Tpo term/arc/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/arc/serial.c' object='term/arc/serial_module-serial.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/arc/serial_module-serial.o `test -f 'term/arc/serial.c' || echo '$(srcdir)/'`term/arc/serial.c + +term/arc/serial_module-serial.obj: term/arc/serial.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -MT term/arc/serial_module-serial.obj -MD -MP -MF term/arc/$(DEPDIR)/serial_module-serial.Tpo -c -o term/arc/serial_module-serial.obj `if test -f 'term/arc/serial.c'; then $(CYGPATH_W) 'term/arc/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/arc/serial.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/arc/$(DEPDIR)/serial_module-serial.Tpo term/arc/$(DEPDIR)/serial_module-serial.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/arc/serial.c' object='term/arc/serial_module-serial.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $(serial_module_CFLAGS) $(CFLAGS) -c -o term/arc/serial_module-serial.obj `if test -f 'term/arc/serial.c'; then $(CYGPATH_W) 'term/arc/serial.c'; else $(CYGPATH_W) '$(srcdir)/term/arc/serial.c'; fi` + +tests/setjmp_test_module-setjmp_test.o: tests/setjmp_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_test_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_test_module_CFLAGS) $(CFLAGS) -MT tests/setjmp_test_module-setjmp_test.o -MD -MP -MF tests/$(DEPDIR)/setjmp_test_module-setjmp_test.Tpo -c -o tests/setjmp_test_module-setjmp_test.o `test -f 'tests/setjmp_test.c' || echo '$(srcdir)/'`tests/setjmp_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/setjmp_test_module-setjmp_test.Tpo tests/$(DEPDIR)/setjmp_test_module-setjmp_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/setjmp_test.c' object='tests/setjmp_test_module-setjmp_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_test_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_test_module_CFLAGS) $(CFLAGS) -c -o tests/setjmp_test_module-setjmp_test.o `test -f 'tests/setjmp_test.c' || echo '$(srcdir)/'`tests/setjmp_test.c + +tests/setjmp_test_module-setjmp_test.obj: tests/setjmp_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_test_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_test_module_CFLAGS) $(CFLAGS) -MT tests/setjmp_test_module-setjmp_test.obj -MD -MP -MF tests/$(DEPDIR)/setjmp_test_module-setjmp_test.Tpo -c -o tests/setjmp_test_module-setjmp_test.obj `if test -f 'tests/setjmp_test.c'; then $(CYGPATH_W) 'tests/setjmp_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/setjmp_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/setjmp_test_module-setjmp_test.Tpo tests/$(DEPDIR)/setjmp_test_module-setjmp_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/setjmp_test.c' object='tests/setjmp_test_module-setjmp_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_test_module_CPPFLAGS) $(CPPFLAGS) $(setjmp_test_module_CFLAGS) $(CFLAGS) -c -o tests/setjmp_test_module-setjmp_test.obj `if test -f 'tests/setjmp_test.c'; then $(CYGPATH_W) 'tests/setjmp_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/setjmp_test.c'; fi` + +commands/setpci_module-setpci.o: commands/setpci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $(setpci_module_CFLAGS) $(CFLAGS) -MT commands/setpci_module-setpci.o -MD -MP -MF commands/$(DEPDIR)/setpci_module-setpci.Tpo -c -o commands/setpci_module-setpci.o `test -f 'commands/setpci.c' || echo '$(srcdir)/'`commands/setpci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/setpci_module-setpci.Tpo commands/$(DEPDIR)/setpci_module-setpci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/setpci.c' object='commands/setpci_module-setpci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $(setpci_module_CFLAGS) $(CFLAGS) -c -o commands/setpci_module-setpci.o `test -f 'commands/setpci.c' || echo '$(srcdir)/'`commands/setpci.c + +commands/setpci_module-setpci.obj: commands/setpci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $(setpci_module_CFLAGS) $(CFLAGS) -MT commands/setpci_module-setpci.obj -MD -MP -MF commands/$(DEPDIR)/setpci_module-setpci.Tpo -c -o commands/setpci_module-setpci.obj `if test -f 'commands/setpci.c'; then $(CYGPATH_W) 'commands/setpci.c'; else $(CYGPATH_W) '$(srcdir)/commands/setpci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/setpci_module-setpci.Tpo commands/$(DEPDIR)/setpci_module-setpci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/setpci.c' object='commands/setpci_module-setpci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $(setpci_module_CFLAGS) $(CFLAGS) -c -o commands/setpci_module-setpci.obj `if test -f 'commands/setpci.c'; then $(CYGPATH_W) 'commands/setpci.c'; else $(CYGPATH_W) '$(srcdir)/commands/setpci.c'; fi` + +fs/sfs_module-sfs.o: fs/sfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sfs_module_CPPFLAGS) $(CPPFLAGS) $(sfs_module_CFLAGS) $(CFLAGS) -MT fs/sfs_module-sfs.o -MD -MP -MF fs/$(DEPDIR)/sfs_module-sfs.Tpo -c -o fs/sfs_module-sfs.o `test -f 'fs/sfs.c' || echo '$(srcdir)/'`fs/sfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/sfs_module-sfs.Tpo fs/$(DEPDIR)/sfs_module-sfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/sfs.c' object='fs/sfs_module-sfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sfs_module_CPPFLAGS) $(CPPFLAGS) $(sfs_module_CFLAGS) $(CFLAGS) -c -o fs/sfs_module-sfs.o `test -f 'fs/sfs.c' || echo '$(srcdir)/'`fs/sfs.c + +fs/sfs_module-sfs.obj: fs/sfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sfs_module_CPPFLAGS) $(CPPFLAGS) $(sfs_module_CFLAGS) $(CFLAGS) -MT fs/sfs_module-sfs.obj -MD -MP -MF fs/$(DEPDIR)/sfs_module-sfs.Tpo -c -o fs/sfs_module-sfs.obj `if test -f 'fs/sfs.c'; then $(CYGPATH_W) 'fs/sfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/sfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/sfs_module-sfs.Tpo fs/$(DEPDIR)/sfs_module-sfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/sfs.c' object='fs/sfs_module-sfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sfs_module_CPPFLAGS) $(CPPFLAGS) $(sfs_module_CFLAGS) $(CFLAGS) -c -o fs/sfs_module-sfs.obj `if test -f 'fs/sfs.c'; then $(CYGPATH_W) 'fs/sfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/sfs.c'; fi` + +tests/shift_test_module-shift_test.o: tests/shift_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shift_test_module_CPPFLAGS) $(CPPFLAGS) $(shift_test_module_CFLAGS) $(CFLAGS) -MT tests/shift_test_module-shift_test.o -MD -MP -MF tests/$(DEPDIR)/shift_test_module-shift_test.Tpo -c -o tests/shift_test_module-shift_test.o `test -f 'tests/shift_test.c' || echo '$(srcdir)/'`tests/shift_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/shift_test_module-shift_test.Tpo tests/$(DEPDIR)/shift_test_module-shift_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/shift_test.c' object='tests/shift_test_module-shift_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shift_test_module_CPPFLAGS) $(CPPFLAGS) $(shift_test_module_CFLAGS) $(CFLAGS) -c -o tests/shift_test_module-shift_test.o `test -f 'tests/shift_test.c' || echo '$(srcdir)/'`tests/shift_test.c + +tests/shift_test_module-shift_test.obj: tests/shift_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shift_test_module_CPPFLAGS) $(CPPFLAGS) $(shift_test_module_CFLAGS) $(CFLAGS) -MT tests/shift_test_module-shift_test.obj -MD -MP -MF tests/$(DEPDIR)/shift_test_module-shift_test.Tpo -c -o tests/shift_test_module-shift_test.obj `if test -f 'tests/shift_test.c'; then $(CYGPATH_W) 'tests/shift_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/shift_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/shift_test_module-shift_test.Tpo tests/$(DEPDIR)/shift_test_module-shift_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/shift_test.c' object='tests/shift_test_module-shift_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shift_test_module_CPPFLAGS) $(CPPFLAGS) $(shift_test_module_CFLAGS) $(CFLAGS) -c -o tests/shift_test_module-shift_test.obj `if test -f 'tests/shift_test.c'; then $(CYGPATH_W) 'tests/shift_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/shift_test.c'; fi` + +tests/signature_test_module-signature_test.o: tests/signature_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(signature_test_module_CPPFLAGS) $(CPPFLAGS) $(signature_test_module_CFLAGS) $(CFLAGS) -MT tests/signature_test_module-signature_test.o -MD -MP -MF tests/$(DEPDIR)/signature_test_module-signature_test.Tpo -c -o tests/signature_test_module-signature_test.o `test -f 'tests/signature_test.c' || echo '$(srcdir)/'`tests/signature_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/signature_test_module-signature_test.Tpo tests/$(DEPDIR)/signature_test_module-signature_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/signature_test.c' object='tests/signature_test_module-signature_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(signature_test_module_CPPFLAGS) $(CPPFLAGS) $(signature_test_module_CFLAGS) $(CFLAGS) -c -o tests/signature_test_module-signature_test.o `test -f 'tests/signature_test.c' || echo '$(srcdir)/'`tests/signature_test.c + +tests/signature_test_module-signature_test.obj: tests/signature_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(signature_test_module_CPPFLAGS) $(CPPFLAGS) $(signature_test_module_CFLAGS) $(CFLAGS) -MT tests/signature_test_module-signature_test.obj -MD -MP -MF tests/$(DEPDIR)/signature_test_module-signature_test.Tpo -c -o tests/signature_test_module-signature_test.obj `if test -f 'tests/signature_test.c'; then $(CYGPATH_W) 'tests/signature_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/signature_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/signature_test_module-signature_test.Tpo tests/$(DEPDIR)/signature_test_module-signature_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/signature_test.c' object='tests/signature_test_module-signature_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(signature_test_module_CPPFLAGS) $(CPPFLAGS) $(signature_test_module_CFLAGS) $(CFLAGS) -c -o tests/signature_test_module-signature_test.obj `if test -f 'tests/signature_test.c'; then $(CYGPATH_W) 'tests/signature_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/signature_test.c'; fi` + +commands/sleep_module-sleep.o: commands/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_module_CPPFLAGS) $(CPPFLAGS) $(sleep_module_CFLAGS) $(CFLAGS) -MT commands/sleep_module-sleep.o -MD -MP -MF commands/$(DEPDIR)/sleep_module-sleep.Tpo -c -o commands/sleep_module-sleep.o `test -f 'commands/sleep.c' || echo '$(srcdir)/'`commands/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/sleep_module-sleep.Tpo commands/$(DEPDIR)/sleep_module-sleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/sleep.c' object='commands/sleep_module-sleep.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_module_CPPFLAGS) $(CPPFLAGS) $(sleep_module_CFLAGS) $(CFLAGS) -c -o commands/sleep_module-sleep.o `test -f 'commands/sleep.c' || echo '$(srcdir)/'`commands/sleep.c + +commands/sleep_module-sleep.obj: commands/sleep.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_module_CPPFLAGS) $(CPPFLAGS) $(sleep_module_CFLAGS) $(CFLAGS) -MT commands/sleep_module-sleep.obj -MD -MP -MF commands/$(DEPDIR)/sleep_module-sleep.Tpo -c -o commands/sleep_module-sleep.obj `if test -f 'commands/sleep.c'; then $(CYGPATH_W) 'commands/sleep.c'; else $(CYGPATH_W) '$(srcdir)/commands/sleep.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/sleep_module-sleep.Tpo commands/$(DEPDIR)/sleep_module-sleep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/sleep.c' object='commands/sleep_module-sleep.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_module_CPPFLAGS) $(CPPFLAGS) $(sleep_module_CFLAGS) $(CFLAGS) -c -o commands/sleep_module-sleep.obj `if test -f 'commands/sleep.c'; then $(CYGPATH_W) 'commands/sleep.c'; else $(CYGPATH_W) '$(srcdir)/commands/sleep.c'; fi` + +tests/sleep_test_module-sleep_test.o: tests/sleep_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_test_module_CPPFLAGS) $(CPPFLAGS) $(sleep_test_module_CFLAGS) $(CFLAGS) -MT tests/sleep_test_module-sleep_test.o -MD -MP -MF tests/$(DEPDIR)/sleep_test_module-sleep_test.Tpo -c -o tests/sleep_test_module-sleep_test.o `test -f 'tests/sleep_test.c' || echo '$(srcdir)/'`tests/sleep_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/sleep_test_module-sleep_test.Tpo tests/$(DEPDIR)/sleep_test_module-sleep_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/sleep_test.c' object='tests/sleep_test_module-sleep_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_test_module_CPPFLAGS) $(CPPFLAGS) $(sleep_test_module_CFLAGS) $(CFLAGS) -c -o tests/sleep_test_module-sleep_test.o `test -f 'tests/sleep_test.c' || echo '$(srcdir)/'`tests/sleep_test.c + +tests/sleep_test_module-sleep_test.obj: tests/sleep_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_test_module_CPPFLAGS) $(CPPFLAGS) $(sleep_test_module_CFLAGS) $(CFLAGS) -MT tests/sleep_test_module-sleep_test.obj -MD -MP -MF tests/$(DEPDIR)/sleep_test_module-sleep_test.Tpo -c -o tests/sleep_test_module-sleep_test.obj `if test -f 'tests/sleep_test.c'; then $(CYGPATH_W) 'tests/sleep_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/sleep_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/sleep_test_module-sleep_test.Tpo tests/$(DEPDIR)/sleep_test_module-sleep_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/sleep_test.c' object='tests/sleep_test_module-sleep_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_test_module_CPPFLAGS) $(CPPFLAGS) $(sleep_test_module_CFLAGS) $(CFLAGS) -c -o tests/sleep_test_module-sleep_test.obj `if test -f 'tests/sleep_test.c'; then $(CYGPATH_W) 'tests/sleep_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/sleep_test.c'; fi` + +term/spkmodem_module-spkmodem.o: term/spkmodem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $(spkmodem_module_CFLAGS) $(CFLAGS) -MT term/spkmodem_module-spkmodem.o -MD -MP -MF term/$(DEPDIR)/spkmodem_module-spkmodem.Tpo -c -o term/spkmodem_module-spkmodem.o `test -f 'term/spkmodem.c' || echo '$(srcdir)/'`term/spkmodem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/spkmodem_module-spkmodem.Tpo term/$(DEPDIR)/spkmodem_module-spkmodem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/spkmodem.c' object='term/spkmodem_module-spkmodem.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $(spkmodem_module_CFLAGS) $(CFLAGS) -c -o term/spkmodem_module-spkmodem.o `test -f 'term/spkmodem.c' || echo '$(srcdir)/'`term/spkmodem.c + +term/spkmodem_module-spkmodem.obj: term/spkmodem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $(spkmodem_module_CFLAGS) $(CFLAGS) -MT term/spkmodem_module-spkmodem.obj -MD -MP -MF term/$(DEPDIR)/spkmodem_module-spkmodem.Tpo -c -o term/spkmodem_module-spkmodem.obj `if test -f 'term/spkmodem.c'; then $(CYGPATH_W) 'term/spkmodem.c'; else $(CYGPATH_W) '$(srcdir)/term/spkmodem.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/spkmodem_module-spkmodem.Tpo term/$(DEPDIR)/spkmodem_module-spkmodem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/spkmodem.c' object='term/spkmodem_module-spkmodem.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $(spkmodem_module_CFLAGS) $(CFLAGS) -c -o term/spkmodem_module-spkmodem.obj `if test -f 'term/spkmodem.c'; then $(CYGPATH_W) 'term/spkmodem.c'; else $(CYGPATH_W) '$(srcdir)/term/spkmodem.c'; fi` + +fs/squash4_module-squash4.o: fs/squash4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(squash4_module_CPPFLAGS) $(CPPFLAGS) $(squash4_module_CFLAGS) $(CFLAGS) -MT fs/squash4_module-squash4.o -MD -MP -MF fs/$(DEPDIR)/squash4_module-squash4.Tpo -c -o fs/squash4_module-squash4.o `test -f 'fs/squash4.c' || echo '$(srcdir)/'`fs/squash4.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/squash4_module-squash4.Tpo fs/$(DEPDIR)/squash4_module-squash4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/squash4.c' object='fs/squash4_module-squash4.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(squash4_module_CPPFLAGS) $(CPPFLAGS) $(squash4_module_CFLAGS) $(CFLAGS) -c -o fs/squash4_module-squash4.o `test -f 'fs/squash4.c' || echo '$(srcdir)/'`fs/squash4.c + +fs/squash4_module-squash4.obj: fs/squash4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(squash4_module_CPPFLAGS) $(CPPFLAGS) $(squash4_module_CFLAGS) $(CFLAGS) -MT fs/squash4_module-squash4.obj -MD -MP -MF fs/$(DEPDIR)/squash4_module-squash4.Tpo -c -o fs/squash4_module-squash4.obj `if test -f 'fs/squash4.c'; then $(CYGPATH_W) 'fs/squash4.c'; else $(CYGPATH_W) '$(srcdir)/fs/squash4.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/squash4_module-squash4.Tpo fs/$(DEPDIR)/squash4_module-squash4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/squash4.c' object='fs/squash4_module-squash4.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(squash4_module_CPPFLAGS) $(CPPFLAGS) $(squash4_module_CFLAGS) $(CFLAGS) -c -o fs/squash4_module-squash4.obj `if test -f 'fs/squash4.c'; then $(CYGPATH_W) 'fs/squash4.c'; else $(CYGPATH_W) '$(srcdir)/fs/squash4.c'; fi` + +commands/ieee1275/suspend_module-suspend.o: commands/ieee1275/suspend.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $(suspend_module_CFLAGS) $(CFLAGS) -MT commands/ieee1275/suspend_module-suspend.o -MD -MP -MF commands/ieee1275/$(DEPDIR)/suspend_module-suspend.Tpo -c -o commands/ieee1275/suspend_module-suspend.o `test -f 'commands/ieee1275/suspend.c' || echo '$(srcdir)/'`commands/ieee1275/suspend.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/ieee1275/$(DEPDIR)/suspend_module-suspend.Tpo commands/ieee1275/$(DEPDIR)/suspend_module-suspend.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/ieee1275/suspend.c' object='commands/ieee1275/suspend_module-suspend.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $(suspend_module_CFLAGS) $(CFLAGS) -c -o commands/ieee1275/suspend_module-suspend.o `test -f 'commands/ieee1275/suspend.c' || echo '$(srcdir)/'`commands/ieee1275/suspend.c + +commands/ieee1275/suspend_module-suspend.obj: commands/ieee1275/suspend.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $(suspend_module_CFLAGS) $(CFLAGS) -MT commands/ieee1275/suspend_module-suspend.obj -MD -MP -MF commands/ieee1275/$(DEPDIR)/suspend_module-suspend.Tpo -c -o commands/ieee1275/suspend_module-suspend.obj `if test -f 'commands/ieee1275/suspend.c'; then $(CYGPATH_W) 'commands/ieee1275/suspend.c'; else $(CYGPATH_W) '$(srcdir)/commands/ieee1275/suspend.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/ieee1275/$(DEPDIR)/suspend_module-suspend.Tpo commands/ieee1275/$(DEPDIR)/suspend_module-suspend.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/ieee1275/suspend.c' object='commands/ieee1275/suspend_module-suspend.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $(suspend_module_CFLAGS) $(CFLAGS) -c -o commands/ieee1275/suspend_module-suspend.obj `if test -f 'commands/ieee1275/suspend.c'; then $(CYGPATH_W) 'commands/ieee1275/suspend.c'; else $(CYGPATH_W) '$(srcdir)/commands/ieee1275/suspend.c'; fi` + +lib/syslinuxcfg_module-syslinux_parse.o: lib/syslinux_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -MT lib/syslinuxcfg_module-syslinux_parse.o -MD -MP -MF lib/$(DEPDIR)/syslinuxcfg_module-syslinux_parse.Tpo -c -o lib/syslinuxcfg_module-syslinux_parse.o `test -f 'lib/syslinux_parse.c' || echo '$(srcdir)/'`lib/syslinux_parse.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/syslinuxcfg_module-syslinux_parse.Tpo lib/$(DEPDIR)/syslinuxcfg_module-syslinux_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/syslinux_parse.c' object='lib/syslinuxcfg_module-syslinux_parse.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -c -o lib/syslinuxcfg_module-syslinux_parse.o `test -f 'lib/syslinux_parse.c' || echo '$(srcdir)/'`lib/syslinux_parse.c + +lib/syslinuxcfg_module-syslinux_parse.obj: lib/syslinux_parse.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -MT lib/syslinuxcfg_module-syslinux_parse.obj -MD -MP -MF lib/$(DEPDIR)/syslinuxcfg_module-syslinux_parse.Tpo -c -o lib/syslinuxcfg_module-syslinux_parse.obj `if test -f 'lib/syslinux_parse.c'; then $(CYGPATH_W) 'lib/syslinux_parse.c'; else $(CYGPATH_W) '$(srcdir)/lib/syslinux_parse.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/syslinuxcfg_module-syslinux_parse.Tpo lib/$(DEPDIR)/syslinuxcfg_module-syslinux_parse.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/syslinux_parse.c' object='lib/syslinuxcfg_module-syslinux_parse.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -c -o lib/syslinuxcfg_module-syslinux_parse.obj `if test -f 'lib/syslinux_parse.c'; then $(CYGPATH_W) 'lib/syslinux_parse.c'; else $(CYGPATH_W) '$(srcdir)/lib/syslinux_parse.c'; fi` + +commands/syslinuxcfg_module-syslinuxcfg.o: commands/syslinuxcfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -MT commands/syslinuxcfg_module-syslinuxcfg.o -MD -MP -MF commands/$(DEPDIR)/syslinuxcfg_module-syslinuxcfg.Tpo -c -o commands/syslinuxcfg_module-syslinuxcfg.o `test -f 'commands/syslinuxcfg.c' || echo '$(srcdir)/'`commands/syslinuxcfg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/syslinuxcfg_module-syslinuxcfg.Tpo commands/$(DEPDIR)/syslinuxcfg_module-syslinuxcfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/syslinuxcfg.c' object='commands/syslinuxcfg_module-syslinuxcfg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -c -o commands/syslinuxcfg_module-syslinuxcfg.o `test -f 'commands/syslinuxcfg.c' || echo '$(srcdir)/'`commands/syslinuxcfg.c + +commands/syslinuxcfg_module-syslinuxcfg.obj: commands/syslinuxcfg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -MT commands/syslinuxcfg_module-syslinuxcfg.obj -MD -MP -MF commands/$(DEPDIR)/syslinuxcfg_module-syslinuxcfg.Tpo -c -o commands/syslinuxcfg_module-syslinuxcfg.obj `if test -f 'commands/syslinuxcfg.c'; then $(CYGPATH_W) 'commands/syslinuxcfg.c'; else $(CYGPATH_W) '$(srcdir)/commands/syslinuxcfg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/syslinuxcfg_module-syslinuxcfg.Tpo commands/$(DEPDIR)/syslinuxcfg_module-syslinuxcfg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/syslinuxcfg.c' object='commands/syslinuxcfg_module-syslinuxcfg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $(syslinuxcfg_module_CFLAGS) $(CFLAGS) -c -o commands/syslinuxcfg_module-syslinuxcfg.obj `if test -f 'commands/syslinuxcfg.c'; then $(CYGPATH_W) 'commands/syslinuxcfg.c'; else $(CYGPATH_W) '$(srcdir)/commands/syslinuxcfg.c'; fi` + +fs/tar_module-tar.o: fs/tar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tar_module_CPPFLAGS) $(CPPFLAGS) $(tar_module_CFLAGS) $(CFLAGS) -MT fs/tar_module-tar.o -MD -MP -MF fs/$(DEPDIR)/tar_module-tar.Tpo -c -o fs/tar_module-tar.o `test -f 'fs/tar.c' || echo '$(srcdir)/'`fs/tar.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/tar_module-tar.Tpo fs/$(DEPDIR)/tar_module-tar.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/tar.c' object='fs/tar_module-tar.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tar_module_CPPFLAGS) $(CPPFLAGS) $(tar_module_CFLAGS) $(CFLAGS) -c -o fs/tar_module-tar.o `test -f 'fs/tar.c' || echo '$(srcdir)/'`fs/tar.c + +fs/tar_module-tar.obj: fs/tar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tar_module_CPPFLAGS) $(CPPFLAGS) $(tar_module_CFLAGS) $(CFLAGS) -MT fs/tar_module-tar.obj -MD -MP -MF fs/$(DEPDIR)/tar_module-tar.Tpo -c -o fs/tar_module-tar.obj `if test -f 'fs/tar.c'; then $(CYGPATH_W) 'fs/tar.c'; else $(CYGPATH_W) '$(srcdir)/fs/tar.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/tar_module-tar.Tpo fs/$(DEPDIR)/tar_module-tar.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/tar.c' object='fs/tar_module-tar.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tar_module_CPPFLAGS) $(CPPFLAGS) $(tar_module_CFLAGS) $(CFLAGS) -c -o fs/tar_module-tar.obj `if test -f 'fs/tar.c'; then $(CYGPATH_W) 'fs/tar.c'; else $(CYGPATH_W) '$(srcdir)/fs/tar.c'; fi` + +commands/terminal_module-terminal.o: commands/terminal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminal_module_CPPFLAGS) $(CPPFLAGS) $(terminal_module_CFLAGS) $(CFLAGS) -MT commands/terminal_module-terminal.o -MD -MP -MF commands/$(DEPDIR)/terminal_module-terminal.Tpo -c -o commands/terminal_module-terminal.o `test -f 'commands/terminal.c' || echo '$(srcdir)/'`commands/terminal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/terminal_module-terminal.Tpo commands/$(DEPDIR)/terminal_module-terminal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/terminal.c' object='commands/terminal_module-terminal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminal_module_CPPFLAGS) $(CPPFLAGS) $(terminal_module_CFLAGS) $(CFLAGS) -c -o commands/terminal_module-terminal.o `test -f 'commands/terminal.c' || echo '$(srcdir)/'`commands/terminal.c + +commands/terminal_module-terminal.obj: commands/terminal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminal_module_CPPFLAGS) $(CPPFLAGS) $(terminal_module_CFLAGS) $(CFLAGS) -MT commands/terminal_module-terminal.obj -MD -MP -MF commands/$(DEPDIR)/terminal_module-terminal.Tpo -c -o commands/terminal_module-terminal.obj `if test -f 'commands/terminal.c'; then $(CYGPATH_W) 'commands/terminal.c'; else $(CYGPATH_W) '$(srcdir)/commands/terminal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/terminal_module-terminal.Tpo commands/$(DEPDIR)/terminal_module-terminal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/terminal.c' object='commands/terminal_module-terminal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminal_module_CPPFLAGS) $(CPPFLAGS) $(terminal_module_CFLAGS) $(CFLAGS) -c -o commands/terminal_module-terminal.obj `if test -f 'commands/terminal.c'; then $(CYGPATH_W) 'commands/terminal.c'; else $(CYGPATH_W) '$(srcdir)/commands/terminal.c'; fi` + +term/terminfo_module-terminfo.o: term/terminfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -MT term/terminfo_module-terminfo.o -MD -MP -MF term/$(DEPDIR)/terminfo_module-terminfo.Tpo -c -o term/terminfo_module-terminfo.o `test -f 'term/terminfo.c' || echo '$(srcdir)/'`term/terminfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/terminfo_module-terminfo.Tpo term/$(DEPDIR)/terminfo_module-terminfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/terminfo.c' object='term/terminfo_module-terminfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -c -o term/terminfo_module-terminfo.o `test -f 'term/terminfo.c' || echo '$(srcdir)/'`term/terminfo.c + +term/terminfo_module-terminfo.obj: term/terminfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -MT term/terminfo_module-terminfo.obj -MD -MP -MF term/$(DEPDIR)/terminfo_module-terminfo.Tpo -c -o term/terminfo_module-terminfo.obj `if test -f 'term/terminfo.c'; then $(CYGPATH_W) 'term/terminfo.c'; else $(CYGPATH_W) '$(srcdir)/term/terminfo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/terminfo_module-terminfo.Tpo term/$(DEPDIR)/terminfo_module-terminfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/terminfo.c' object='term/terminfo_module-terminfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -c -o term/terminfo_module-terminfo.obj `if test -f 'term/terminfo.c'; then $(CYGPATH_W) 'term/terminfo.c'; else $(CYGPATH_W) '$(srcdir)/term/terminfo.c'; fi` + +term/terminfo_module-tparm.o: term/tparm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -MT term/terminfo_module-tparm.o -MD -MP -MF term/$(DEPDIR)/terminfo_module-tparm.Tpo -c -o term/terminfo_module-tparm.o `test -f 'term/tparm.c' || echo '$(srcdir)/'`term/tparm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/terminfo_module-tparm.Tpo term/$(DEPDIR)/terminfo_module-tparm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/tparm.c' object='term/terminfo_module-tparm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -c -o term/terminfo_module-tparm.o `test -f 'term/tparm.c' || echo '$(srcdir)/'`term/tparm.c + +term/terminfo_module-tparm.obj: term/tparm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -MT term/terminfo_module-tparm.obj -MD -MP -MF term/$(DEPDIR)/terminfo_module-tparm.Tpo -c -o term/terminfo_module-tparm.obj `if test -f 'term/tparm.c'; then $(CYGPATH_W) 'term/tparm.c'; else $(CYGPATH_W) '$(srcdir)/term/tparm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/terminfo_module-tparm.Tpo term/$(DEPDIR)/terminfo_module-tparm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/tparm.c' object='term/terminfo_module-tparm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $(terminfo_module_CFLAGS) $(CFLAGS) -c -o term/terminfo_module-tparm.obj `if test -f 'term/tparm.c'; then $(CYGPATH_W) 'term/tparm.c'; else $(CYGPATH_W) '$(srcdir)/term/tparm.c'; fi` + +commands/test_module-test.o: commands/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_module_CPPFLAGS) $(CPPFLAGS) $(test_module_CFLAGS) $(CFLAGS) -MT commands/test_module-test.o -MD -MP -MF commands/$(DEPDIR)/test_module-test.Tpo -c -o commands/test_module-test.o `test -f 'commands/test.c' || echo '$(srcdir)/'`commands/test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/test_module-test.Tpo commands/$(DEPDIR)/test_module-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/test.c' object='commands/test_module-test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_module_CPPFLAGS) $(CPPFLAGS) $(test_module_CFLAGS) $(CFLAGS) -c -o commands/test_module-test.o `test -f 'commands/test.c' || echo '$(srcdir)/'`commands/test.c + +commands/test_module-test.obj: commands/test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_module_CPPFLAGS) $(CPPFLAGS) $(test_module_CFLAGS) $(CFLAGS) -MT commands/test_module-test.obj -MD -MP -MF commands/$(DEPDIR)/test_module-test.Tpo -c -o commands/test_module-test.obj `if test -f 'commands/test.c'; then $(CYGPATH_W) 'commands/test.c'; else $(CYGPATH_W) '$(srcdir)/commands/test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/test_module-test.Tpo commands/$(DEPDIR)/test_module-test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/test.c' object='commands/test_module-test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_module_CPPFLAGS) $(CPPFLAGS) $(test_module_CFLAGS) $(CFLAGS) -c -o commands/test_module-test.obj `if test -f 'commands/test.c'; then $(CYGPATH_W) 'commands/test.c'; else $(CYGPATH_W) '$(srcdir)/commands/test.c'; fi` + +tests/test_blockarg_module-test_blockarg.o: tests/test_blockarg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_blockarg_module_CPPFLAGS) $(CPPFLAGS) $(test_blockarg_module_CFLAGS) $(CFLAGS) -MT tests/test_blockarg_module-test_blockarg.o -MD -MP -MF tests/$(DEPDIR)/test_blockarg_module-test_blockarg.Tpo -c -o tests/test_blockarg_module-test_blockarg.o `test -f 'tests/test_blockarg.c' || echo '$(srcdir)/'`tests/test_blockarg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/test_blockarg_module-test_blockarg.Tpo tests/$(DEPDIR)/test_blockarg_module-test_blockarg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/test_blockarg.c' object='tests/test_blockarg_module-test_blockarg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_blockarg_module_CPPFLAGS) $(CPPFLAGS) $(test_blockarg_module_CFLAGS) $(CFLAGS) -c -o tests/test_blockarg_module-test_blockarg.o `test -f 'tests/test_blockarg.c' || echo '$(srcdir)/'`tests/test_blockarg.c + +tests/test_blockarg_module-test_blockarg.obj: tests/test_blockarg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_blockarg_module_CPPFLAGS) $(CPPFLAGS) $(test_blockarg_module_CFLAGS) $(CFLAGS) -MT tests/test_blockarg_module-test_blockarg.obj -MD -MP -MF tests/$(DEPDIR)/test_blockarg_module-test_blockarg.Tpo -c -o tests/test_blockarg_module-test_blockarg.obj `if test -f 'tests/test_blockarg.c'; then $(CYGPATH_W) 'tests/test_blockarg.c'; else $(CYGPATH_W) '$(srcdir)/tests/test_blockarg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/test_blockarg_module-test_blockarg.Tpo tests/$(DEPDIR)/test_blockarg_module-test_blockarg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/test_blockarg.c' object='tests/test_blockarg_module-test_blockarg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_blockarg_module_CPPFLAGS) $(CPPFLAGS) $(test_blockarg_module_CFLAGS) $(CFLAGS) -c -o tests/test_blockarg_module-test_blockarg.obj `if test -f 'tests/test_blockarg.c'; then $(CYGPATH_W) 'tests/test_blockarg.c'; else $(CYGPATH_W) '$(srcdir)/tests/test_blockarg.c'; fi` + +commands/testload_module-testload.o: commands/testload.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testload_module_CPPFLAGS) $(CPPFLAGS) $(testload_module_CFLAGS) $(CFLAGS) -MT commands/testload_module-testload.o -MD -MP -MF commands/$(DEPDIR)/testload_module-testload.Tpo -c -o commands/testload_module-testload.o `test -f 'commands/testload.c' || echo '$(srcdir)/'`commands/testload.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/testload_module-testload.Tpo commands/$(DEPDIR)/testload_module-testload.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/testload.c' object='commands/testload_module-testload.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testload_module_CPPFLAGS) $(CPPFLAGS) $(testload_module_CFLAGS) $(CFLAGS) -c -o commands/testload_module-testload.o `test -f 'commands/testload.c' || echo '$(srcdir)/'`commands/testload.c + +commands/testload_module-testload.obj: commands/testload.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testload_module_CPPFLAGS) $(CPPFLAGS) $(testload_module_CFLAGS) $(CFLAGS) -MT commands/testload_module-testload.obj -MD -MP -MF commands/$(DEPDIR)/testload_module-testload.Tpo -c -o commands/testload_module-testload.obj `if test -f 'commands/testload.c'; then $(CYGPATH_W) 'commands/testload.c'; else $(CYGPATH_W) '$(srcdir)/commands/testload.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/testload_module-testload.Tpo commands/$(DEPDIR)/testload_module-testload.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/testload.c' object='commands/testload_module-testload.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testload_module_CPPFLAGS) $(CPPFLAGS) $(testload_module_CFLAGS) $(CFLAGS) -c -o commands/testload_module-testload.obj `if test -f 'commands/testload.c'; then $(CYGPATH_W) 'commands/testload.c'; else $(CYGPATH_W) '$(srcdir)/commands/testload.c'; fi` + +commands/testspeed_module-testspeed.o: commands/testspeed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testspeed_module_CPPFLAGS) $(CPPFLAGS) $(testspeed_module_CFLAGS) $(CFLAGS) -MT commands/testspeed_module-testspeed.o -MD -MP -MF commands/$(DEPDIR)/testspeed_module-testspeed.Tpo -c -o commands/testspeed_module-testspeed.o `test -f 'commands/testspeed.c' || echo '$(srcdir)/'`commands/testspeed.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/testspeed_module-testspeed.Tpo commands/$(DEPDIR)/testspeed_module-testspeed.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/testspeed.c' object='commands/testspeed_module-testspeed.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testspeed_module_CPPFLAGS) $(CPPFLAGS) $(testspeed_module_CFLAGS) $(CFLAGS) -c -o commands/testspeed_module-testspeed.o `test -f 'commands/testspeed.c' || echo '$(srcdir)/'`commands/testspeed.c + +commands/testspeed_module-testspeed.obj: commands/testspeed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testspeed_module_CPPFLAGS) $(CPPFLAGS) $(testspeed_module_CFLAGS) $(CFLAGS) -MT commands/testspeed_module-testspeed.obj -MD -MP -MF commands/$(DEPDIR)/testspeed_module-testspeed.Tpo -c -o commands/testspeed_module-testspeed.obj `if test -f 'commands/testspeed.c'; then $(CYGPATH_W) 'commands/testspeed.c'; else $(CYGPATH_W) '$(srcdir)/commands/testspeed.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/testspeed_module-testspeed.Tpo commands/$(DEPDIR)/testspeed_module-testspeed.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/testspeed.c' object='commands/testspeed_module-testspeed.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testspeed_module_CPPFLAGS) $(CPPFLAGS) $(testspeed_module_CFLAGS) $(CFLAGS) -c -o commands/testspeed_module-testspeed.obj `if test -f 'commands/testspeed.c'; then $(CYGPATH_W) 'commands/testspeed.c'; else $(CYGPATH_W) '$(srcdir)/commands/testspeed.c'; fi` + +net/tftp_module-tftp.o: net/tftp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tftp_module_CPPFLAGS) $(CPPFLAGS) $(tftp_module_CFLAGS) $(CFLAGS) -MT net/tftp_module-tftp.o -MD -MP -MF net/$(DEPDIR)/tftp_module-tftp.Tpo -c -o net/tftp_module-tftp.o `test -f 'net/tftp.c' || echo '$(srcdir)/'`net/tftp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/tftp_module-tftp.Tpo net/$(DEPDIR)/tftp_module-tftp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/tftp.c' object='net/tftp_module-tftp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tftp_module_CPPFLAGS) $(CPPFLAGS) $(tftp_module_CFLAGS) $(CFLAGS) -c -o net/tftp_module-tftp.o `test -f 'net/tftp.c' || echo '$(srcdir)/'`net/tftp.c + +net/tftp_module-tftp.obj: net/tftp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tftp_module_CPPFLAGS) $(CPPFLAGS) $(tftp_module_CFLAGS) $(CFLAGS) -MT net/tftp_module-tftp.obj -MD -MP -MF net/$(DEPDIR)/tftp_module-tftp.Tpo -c -o net/tftp_module-tftp.obj `if test -f 'net/tftp.c'; then $(CYGPATH_W) 'net/tftp.c'; else $(CYGPATH_W) '$(srcdir)/net/tftp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/$(DEPDIR)/tftp_module-tftp.Tpo net/$(DEPDIR)/tftp_module-tftp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/tftp.c' object='net/tftp_module-tftp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tftp_module_CPPFLAGS) $(CPPFLAGS) $(tftp_module_CFLAGS) $(CFLAGS) -c -o net/tftp_module-tftp.obj `if test -f 'net/tftp.c'; then $(CYGPATH_W) 'net/tftp.c'; else $(CYGPATH_W) '$(srcdir)/net/tftp.c'; fi` + +video/readers/tga_module-tga.o: video/readers/tga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tga_module_CPPFLAGS) $(CPPFLAGS) $(tga_module_CFLAGS) $(CFLAGS) -MT video/readers/tga_module-tga.o -MD -MP -MF video/readers/$(DEPDIR)/tga_module-tga.Tpo -c -o video/readers/tga_module-tga.o `test -f 'video/readers/tga.c' || echo '$(srcdir)/'`video/readers/tga.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/readers/$(DEPDIR)/tga_module-tga.Tpo video/readers/$(DEPDIR)/tga_module-tga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/readers/tga.c' object='video/readers/tga_module-tga.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tga_module_CPPFLAGS) $(CPPFLAGS) $(tga_module_CFLAGS) $(CFLAGS) -c -o video/readers/tga_module-tga.o `test -f 'video/readers/tga.c' || echo '$(srcdir)/'`video/readers/tga.c + +video/readers/tga_module-tga.obj: video/readers/tga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tga_module_CPPFLAGS) $(CPPFLAGS) $(tga_module_CFLAGS) $(CFLAGS) -MT video/readers/tga_module-tga.obj -MD -MP -MF video/readers/$(DEPDIR)/tga_module-tga.Tpo -c -o video/readers/tga_module-tga.obj `if test -f 'video/readers/tga.c'; then $(CYGPATH_W) 'video/readers/tga.c'; else $(CYGPATH_W) '$(srcdir)/video/readers/tga.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/readers/$(DEPDIR)/tga_module-tga.Tpo video/readers/$(DEPDIR)/tga_module-tga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/readers/tga.c' object='video/readers/tga_module-tga.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tga_module_CPPFLAGS) $(CPPFLAGS) $(tga_module_CFLAGS) $(CFLAGS) -c -o video/readers/tga_module-tga.obj `if test -f 'video/readers/tga.c'; then $(CYGPATH_W) 'video/readers/tga.c'; else $(CYGPATH_W) '$(srcdir)/video/readers/tga.c'; fi` + +commands/time_module-time.o: commands/time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(time_module_CPPFLAGS) $(CPPFLAGS) $(time_module_CFLAGS) $(CFLAGS) -MT commands/time_module-time.o -MD -MP -MF commands/$(DEPDIR)/time_module-time.Tpo -c -o commands/time_module-time.o `test -f 'commands/time.c' || echo '$(srcdir)/'`commands/time.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/time_module-time.Tpo commands/$(DEPDIR)/time_module-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/time.c' object='commands/time_module-time.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(time_module_CPPFLAGS) $(CPPFLAGS) $(time_module_CFLAGS) $(CFLAGS) -c -o commands/time_module-time.o `test -f 'commands/time.c' || echo '$(srcdir)/'`commands/time.c + +commands/time_module-time.obj: commands/time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(time_module_CPPFLAGS) $(CPPFLAGS) $(time_module_CFLAGS) $(CFLAGS) -MT commands/time_module-time.obj -MD -MP -MF commands/$(DEPDIR)/time_module-time.Tpo -c -o commands/time_module-time.obj `if test -f 'commands/time.c'; then $(CYGPATH_W) 'commands/time.c'; else $(CYGPATH_W) '$(srcdir)/commands/time.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/time_module-time.Tpo commands/$(DEPDIR)/time_module-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/time.c' object='commands/time_module-time.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(time_module_CPPFLAGS) $(CPPFLAGS) $(time_module_CFLAGS) $(CFLAGS) -c -o commands/time_module-time.obj `if test -f 'commands/time.c'; then $(CYGPATH_W) 'commands/time.c'; else $(CYGPATH_W) '$(srcdir)/commands/time.c'; fi` + +commands/tr_module-tr.o: commands/tr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tr_module_CPPFLAGS) $(CPPFLAGS) $(tr_module_CFLAGS) $(CFLAGS) -MT commands/tr_module-tr.o -MD -MP -MF commands/$(DEPDIR)/tr_module-tr.Tpo -c -o commands/tr_module-tr.o `test -f 'commands/tr.c' || echo '$(srcdir)/'`commands/tr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/tr_module-tr.Tpo commands/$(DEPDIR)/tr_module-tr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/tr.c' object='commands/tr_module-tr.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tr_module_CPPFLAGS) $(CPPFLAGS) $(tr_module_CFLAGS) $(CFLAGS) -c -o commands/tr_module-tr.o `test -f 'commands/tr.c' || echo '$(srcdir)/'`commands/tr.c + +commands/tr_module-tr.obj: commands/tr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tr_module_CPPFLAGS) $(CPPFLAGS) $(tr_module_CFLAGS) $(CFLAGS) -MT commands/tr_module-tr.obj -MD -MP -MF commands/$(DEPDIR)/tr_module-tr.Tpo -c -o commands/tr_module-tr.obj `if test -f 'commands/tr.c'; then $(CYGPATH_W) 'commands/tr.c'; else $(CYGPATH_W) '$(srcdir)/commands/tr.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/tr_module-tr.Tpo commands/$(DEPDIR)/tr_module-tr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/tr.c' object='commands/tr_module-tr.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tr_module_CPPFLAGS) $(CPPFLAGS) $(tr_module_CFLAGS) $(CFLAGS) -c -o commands/tr_module-tr.obj `if test -f 'commands/tr.c'; then $(CYGPATH_W) 'commands/tr.c'; else $(CYGPATH_W) '$(srcdir)/commands/tr.c'; fi` + +trig_module-trigtables.o: trigtables.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(trig_module_CPPFLAGS) $(CPPFLAGS) $(trig_module_CFLAGS) $(CFLAGS) -MT trig_module-trigtables.o -MD -MP -MF $(DEPDIR)/trig_module-trigtables.Tpo -c -o trig_module-trigtables.o `test -f 'trigtables.c' || echo '$(srcdir)/'`trigtables.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/trig_module-trigtables.Tpo $(DEPDIR)/trig_module-trigtables.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='trigtables.c' object='trig_module-trigtables.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(trig_module_CPPFLAGS) $(CPPFLAGS) $(trig_module_CFLAGS) $(CFLAGS) -c -o trig_module-trigtables.o `test -f 'trigtables.c' || echo '$(srcdir)/'`trigtables.c + +trig_module-trigtables.obj: trigtables.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(trig_module_CPPFLAGS) $(CPPFLAGS) $(trig_module_CFLAGS) $(CFLAGS) -MT trig_module-trigtables.obj -MD -MP -MF $(DEPDIR)/trig_module-trigtables.Tpo -c -o trig_module-trigtables.obj `if test -f 'trigtables.c'; then $(CYGPATH_W) 'trigtables.c'; else $(CYGPATH_W) '$(srcdir)/trigtables.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/trig_module-trigtables.Tpo $(DEPDIR)/trig_module-trigtables.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='trigtables.c' object='trig_module-trigtables.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(trig_module_CPPFLAGS) $(CPPFLAGS) $(trig_module_CFLAGS) $(CFLAGS) -c -o trig_module-trigtables.obj `if test -f 'trigtables.c'; then $(CYGPATH_W) 'trigtables.c'; else $(CYGPATH_W) '$(srcdir)/trigtables.c'; fi` + +commands/true_module-true.o: commands/true.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(true_module_CPPFLAGS) $(CPPFLAGS) $(true_module_CFLAGS) $(CFLAGS) -MT commands/true_module-true.o -MD -MP -MF commands/$(DEPDIR)/true_module-true.Tpo -c -o commands/true_module-true.o `test -f 'commands/true.c' || echo '$(srcdir)/'`commands/true.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/true_module-true.Tpo commands/$(DEPDIR)/true_module-true.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/true.c' object='commands/true_module-true.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(true_module_CPPFLAGS) $(CPPFLAGS) $(true_module_CFLAGS) $(CFLAGS) -c -o commands/true_module-true.o `test -f 'commands/true.c' || echo '$(srcdir)/'`commands/true.c + +commands/true_module-true.obj: commands/true.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(true_module_CPPFLAGS) $(CPPFLAGS) $(true_module_CFLAGS) $(CFLAGS) -MT commands/true_module-true.obj -MD -MP -MF commands/$(DEPDIR)/true_module-true.Tpo -c -o commands/true_module-true.obj `if test -f 'commands/true.c'; then $(CYGPATH_W) 'commands/true.c'; else $(CYGPATH_W) '$(srcdir)/commands/true.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/true_module-true.Tpo commands/$(DEPDIR)/true_module-true.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/true.c' object='commands/true_module-true.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(true_module_CPPFLAGS) $(CPPFLAGS) $(true_module_CFLAGS) $(CFLAGS) -c -o commands/true_module-true.obj `if test -f 'commands/true.c'; then $(CYGPATH_W) 'commands/true.c'; else $(CYGPATH_W) '$(srcdir)/commands/true.c'; fi` + +loader/i386/pc/truecrypt_module-truecrypt.o: loader/i386/pc/truecrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(truecrypt_module_CPPFLAGS) $(CPPFLAGS) $(truecrypt_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/truecrypt_module-truecrypt.o -MD -MP -MF loader/i386/pc/$(DEPDIR)/truecrypt_module-truecrypt.Tpo -c -o loader/i386/pc/truecrypt_module-truecrypt.o `test -f 'loader/i386/pc/truecrypt.c' || echo '$(srcdir)/'`loader/i386/pc/truecrypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/truecrypt_module-truecrypt.Tpo loader/i386/pc/$(DEPDIR)/truecrypt_module-truecrypt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/truecrypt.c' object='loader/i386/pc/truecrypt_module-truecrypt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(truecrypt_module_CPPFLAGS) $(CPPFLAGS) $(truecrypt_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/truecrypt_module-truecrypt.o `test -f 'loader/i386/pc/truecrypt.c' || echo '$(srcdir)/'`loader/i386/pc/truecrypt.c + +loader/i386/pc/truecrypt_module-truecrypt.obj: loader/i386/pc/truecrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(truecrypt_module_CPPFLAGS) $(CPPFLAGS) $(truecrypt_module_CFLAGS) $(CFLAGS) -MT loader/i386/pc/truecrypt_module-truecrypt.obj -MD -MP -MF loader/i386/pc/$(DEPDIR)/truecrypt_module-truecrypt.Tpo -c -o loader/i386/pc/truecrypt_module-truecrypt.obj `if test -f 'loader/i386/pc/truecrypt.c'; then $(CYGPATH_W) 'loader/i386/pc/truecrypt.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/truecrypt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/pc/$(DEPDIR)/truecrypt_module-truecrypt.Tpo loader/i386/pc/$(DEPDIR)/truecrypt_module-truecrypt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/pc/truecrypt.c' object='loader/i386/pc/truecrypt_module-truecrypt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(truecrypt_module_CPPFLAGS) $(CPPFLAGS) $(truecrypt_module_CFLAGS) $(CFLAGS) -c -o loader/i386/pc/truecrypt_module-truecrypt.obj `if test -f 'loader/i386/pc/truecrypt.c'; then $(CYGPATH_W) 'loader/i386/pc/truecrypt.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/pc/truecrypt.c'; fi` + +net/drivers/uboot/ubootnet_module-ubootnet.o: net/drivers/uboot/ubootnet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ubootnet_module_CPPFLAGS) $(CPPFLAGS) $(ubootnet_module_CFLAGS) $(CFLAGS) -MT net/drivers/uboot/ubootnet_module-ubootnet.o -MD -MP -MF net/drivers/uboot/$(DEPDIR)/ubootnet_module-ubootnet.Tpo -c -o net/drivers/uboot/ubootnet_module-ubootnet.o `test -f 'net/drivers/uboot/ubootnet.c' || echo '$(srcdir)/'`net/drivers/uboot/ubootnet.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/uboot/$(DEPDIR)/ubootnet_module-ubootnet.Tpo net/drivers/uboot/$(DEPDIR)/ubootnet_module-ubootnet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/uboot/ubootnet.c' object='net/drivers/uboot/ubootnet_module-ubootnet.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ubootnet_module_CPPFLAGS) $(CPPFLAGS) $(ubootnet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/uboot/ubootnet_module-ubootnet.o `test -f 'net/drivers/uboot/ubootnet.c' || echo '$(srcdir)/'`net/drivers/uboot/ubootnet.c + +net/drivers/uboot/ubootnet_module-ubootnet.obj: net/drivers/uboot/ubootnet.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ubootnet_module_CPPFLAGS) $(CPPFLAGS) $(ubootnet_module_CFLAGS) $(CFLAGS) -MT net/drivers/uboot/ubootnet_module-ubootnet.obj -MD -MP -MF net/drivers/uboot/$(DEPDIR)/ubootnet_module-ubootnet.Tpo -c -o net/drivers/uboot/ubootnet_module-ubootnet.obj `if test -f 'net/drivers/uboot/ubootnet.c'; then $(CYGPATH_W) 'net/drivers/uboot/ubootnet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/uboot/ubootnet.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) net/drivers/uboot/$(DEPDIR)/ubootnet_module-ubootnet.Tpo net/drivers/uboot/$(DEPDIR)/ubootnet_module-ubootnet.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='net/drivers/uboot/ubootnet.c' object='net/drivers/uboot/ubootnet_module-ubootnet.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ubootnet_module_CPPFLAGS) $(CPPFLAGS) $(ubootnet_module_CFLAGS) $(CFLAGS) -c -o net/drivers/uboot/ubootnet_module-ubootnet.obj `if test -f 'net/drivers/uboot/ubootnet.c'; then $(CYGPATH_W) 'net/drivers/uboot/ubootnet.c'; else $(CYGPATH_W) '$(srcdir)/net/drivers/uboot/ubootnet.c'; fi` + +fs/udf_module-udf.o: fs/udf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udf_module_CPPFLAGS) $(CPPFLAGS) $(udf_module_CFLAGS) $(CFLAGS) -MT fs/udf_module-udf.o -MD -MP -MF fs/$(DEPDIR)/udf_module-udf.Tpo -c -o fs/udf_module-udf.o `test -f 'fs/udf.c' || echo '$(srcdir)/'`fs/udf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/udf_module-udf.Tpo fs/$(DEPDIR)/udf_module-udf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/udf.c' object='fs/udf_module-udf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udf_module_CPPFLAGS) $(CPPFLAGS) $(udf_module_CFLAGS) $(CFLAGS) -c -o fs/udf_module-udf.o `test -f 'fs/udf.c' || echo '$(srcdir)/'`fs/udf.c + +fs/udf_module-udf.obj: fs/udf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udf_module_CPPFLAGS) $(CPPFLAGS) $(udf_module_CFLAGS) $(CFLAGS) -MT fs/udf_module-udf.obj -MD -MP -MF fs/$(DEPDIR)/udf_module-udf.Tpo -c -o fs/udf_module-udf.obj `if test -f 'fs/udf.c'; then $(CYGPATH_W) 'fs/udf.c'; else $(CYGPATH_W) '$(srcdir)/fs/udf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/udf_module-udf.Tpo fs/$(DEPDIR)/udf_module-udf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/udf.c' object='fs/udf_module-udf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udf_module_CPPFLAGS) $(CPPFLAGS) $(udf_module_CFLAGS) $(CFLAGS) -c -o fs/udf_module-udf.obj `if test -f 'fs/udf.c'; then $(CYGPATH_W) 'fs/udf.c'; else $(CYGPATH_W) '$(srcdir)/fs/udf.c'; fi` + +fs/ufs1_module-ufs.o: fs/ufs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_module_CFLAGS) $(CFLAGS) -MT fs/ufs1_module-ufs.o -MD -MP -MF fs/$(DEPDIR)/ufs1_module-ufs.Tpo -c -o fs/ufs1_module-ufs.o `test -f 'fs/ufs.c' || echo '$(srcdir)/'`fs/ufs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ufs1_module-ufs.Tpo fs/$(DEPDIR)/ufs1_module-ufs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ufs.c' object='fs/ufs1_module-ufs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_module_CFLAGS) $(CFLAGS) -c -o fs/ufs1_module-ufs.o `test -f 'fs/ufs.c' || echo '$(srcdir)/'`fs/ufs.c + +fs/ufs1_module-ufs.obj: fs/ufs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_module_CFLAGS) $(CFLAGS) -MT fs/ufs1_module-ufs.obj -MD -MP -MF fs/$(DEPDIR)/ufs1_module-ufs.Tpo -c -o fs/ufs1_module-ufs.obj `if test -f 'fs/ufs.c'; then $(CYGPATH_W) 'fs/ufs.c'; else $(CYGPATH_W) '$(srcdir)/fs/ufs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ufs1_module-ufs.Tpo fs/$(DEPDIR)/ufs1_module-ufs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ufs.c' object='fs/ufs1_module-ufs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_module_CFLAGS) $(CFLAGS) -c -o fs/ufs1_module-ufs.obj `if test -f 'fs/ufs.c'; then $(CYGPATH_W) 'fs/ufs.c'; else $(CYGPATH_W) '$(srcdir)/fs/ufs.c'; fi` + +fs/ufs1_be_module-ufs_be.o: fs/ufs_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_be_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_be_module_CFLAGS) $(CFLAGS) -MT fs/ufs1_be_module-ufs_be.o -MD -MP -MF fs/$(DEPDIR)/ufs1_be_module-ufs_be.Tpo -c -o fs/ufs1_be_module-ufs_be.o `test -f 'fs/ufs_be.c' || echo '$(srcdir)/'`fs/ufs_be.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ufs1_be_module-ufs_be.Tpo fs/$(DEPDIR)/ufs1_be_module-ufs_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ufs_be.c' object='fs/ufs1_be_module-ufs_be.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_be_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_be_module_CFLAGS) $(CFLAGS) -c -o fs/ufs1_be_module-ufs_be.o `test -f 'fs/ufs_be.c' || echo '$(srcdir)/'`fs/ufs_be.c + +fs/ufs1_be_module-ufs_be.obj: fs/ufs_be.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_be_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_be_module_CFLAGS) $(CFLAGS) -MT fs/ufs1_be_module-ufs_be.obj -MD -MP -MF fs/$(DEPDIR)/ufs1_be_module-ufs_be.Tpo -c -o fs/ufs1_be_module-ufs_be.obj `if test -f 'fs/ufs_be.c'; then $(CYGPATH_W) 'fs/ufs_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/ufs_be.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ufs1_be_module-ufs_be.Tpo fs/$(DEPDIR)/ufs1_be_module-ufs_be.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ufs_be.c' object='fs/ufs1_be_module-ufs_be.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_be_module_CPPFLAGS) $(CPPFLAGS) $(ufs1_be_module_CFLAGS) $(CFLAGS) -c -o fs/ufs1_be_module-ufs_be.obj `if test -f 'fs/ufs_be.c'; then $(CYGPATH_W) 'fs/ufs_be.c'; else $(CYGPATH_W) '$(srcdir)/fs/ufs_be.c'; fi` + +fs/ufs2_module-ufs2.o: fs/ufs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs2_module_CPPFLAGS) $(CPPFLAGS) $(ufs2_module_CFLAGS) $(CFLAGS) -MT fs/ufs2_module-ufs2.o -MD -MP -MF fs/$(DEPDIR)/ufs2_module-ufs2.Tpo -c -o fs/ufs2_module-ufs2.o `test -f 'fs/ufs2.c' || echo '$(srcdir)/'`fs/ufs2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ufs2_module-ufs2.Tpo fs/$(DEPDIR)/ufs2_module-ufs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ufs2.c' object='fs/ufs2_module-ufs2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs2_module_CPPFLAGS) $(CPPFLAGS) $(ufs2_module_CFLAGS) $(CFLAGS) -c -o fs/ufs2_module-ufs2.o `test -f 'fs/ufs2.c' || echo '$(srcdir)/'`fs/ufs2.c + +fs/ufs2_module-ufs2.obj: fs/ufs2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs2_module_CPPFLAGS) $(CPPFLAGS) $(ufs2_module_CFLAGS) $(CFLAGS) -MT fs/ufs2_module-ufs2.obj -MD -MP -MF fs/$(DEPDIR)/ufs2_module-ufs2.Tpo -c -o fs/ufs2_module-ufs2.obj `if test -f 'fs/ufs2.c'; then $(CYGPATH_W) 'fs/ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fs/ufs2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/ufs2_module-ufs2.Tpo fs/$(DEPDIR)/ufs2_module-ufs2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/ufs2.c' object='fs/ufs2_module-ufs2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs2_module_CPPFLAGS) $(CPPFLAGS) $(ufs2_module_CFLAGS) $(CFLAGS) -c -o fs/ufs2_module-ufs2.obj `if test -f 'fs/ufs2.c'; then $(CYGPATH_W) 'fs/ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fs/ufs2.c'; fi` + +bus/usb/uhci_module-uhci.o: bus/usb/uhci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $(uhci_module_CFLAGS) $(CFLAGS) -MT bus/usb/uhci_module-uhci.o -MD -MP -MF bus/usb/$(DEPDIR)/uhci_module-uhci.Tpo -c -o bus/usb/uhci_module-uhci.o `test -f 'bus/usb/uhci.c' || echo '$(srcdir)/'`bus/usb/uhci.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/uhci_module-uhci.Tpo bus/usb/$(DEPDIR)/uhci_module-uhci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/uhci.c' object='bus/usb/uhci_module-uhci.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $(uhci_module_CFLAGS) $(CFLAGS) -c -o bus/usb/uhci_module-uhci.o `test -f 'bus/usb/uhci.c' || echo '$(srcdir)/'`bus/usb/uhci.c + +bus/usb/uhci_module-uhci.obj: bus/usb/uhci.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $(uhci_module_CFLAGS) $(CFLAGS) -MT bus/usb/uhci_module-uhci.obj -MD -MP -MF bus/usb/$(DEPDIR)/uhci_module-uhci.Tpo -c -o bus/usb/uhci_module-uhci.obj `if test -f 'bus/usb/uhci.c'; then $(CYGPATH_W) 'bus/usb/uhci.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/uhci.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/uhci_module-uhci.Tpo bus/usb/$(DEPDIR)/uhci_module-uhci.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/uhci.c' object='bus/usb/uhci_module-uhci.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $(uhci_module_CFLAGS) $(CFLAGS) -c -o bus/usb/uhci_module-uhci.obj `if test -f 'bus/usb/uhci.c'; then $(CYGPATH_W) 'bus/usb/uhci.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/uhci.c'; fi` + +bus/usb/usb_module-usb.o: bus/usb/usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -MT bus/usb/usb_module-usb.o -MD -MP -MF bus/usb/$(DEPDIR)/usb_module-usb.Tpo -c -o bus/usb/usb_module-usb.o `test -f 'bus/usb/usb.c' || echo '$(srcdir)/'`bus/usb/usb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/usb_module-usb.Tpo bus/usb/$(DEPDIR)/usb_module-usb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/usb.c' object='bus/usb/usb_module-usb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -c -o bus/usb/usb_module-usb.o `test -f 'bus/usb/usb.c' || echo '$(srcdir)/'`bus/usb/usb.c + +bus/usb/usb_module-usb.obj: bus/usb/usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -MT bus/usb/usb_module-usb.obj -MD -MP -MF bus/usb/$(DEPDIR)/usb_module-usb.Tpo -c -o bus/usb/usb_module-usb.obj `if test -f 'bus/usb/usb.c'; then $(CYGPATH_W) 'bus/usb/usb.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/usb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/usb_module-usb.Tpo bus/usb/$(DEPDIR)/usb_module-usb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/usb.c' object='bus/usb/usb_module-usb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -c -o bus/usb/usb_module-usb.obj `if test -f 'bus/usb/usb.c'; then $(CYGPATH_W) 'bus/usb/usb.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/usb.c'; fi` + +bus/usb/usb_module-usbtrans.o: bus/usb/usbtrans.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -MT bus/usb/usb_module-usbtrans.o -MD -MP -MF bus/usb/$(DEPDIR)/usb_module-usbtrans.Tpo -c -o bus/usb/usb_module-usbtrans.o `test -f 'bus/usb/usbtrans.c' || echo '$(srcdir)/'`bus/usb/usbtrans.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/usb_module-usbtrans.Tpo bus/usb/$(DEPDIR)/usb_module-usbtrans.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/usbtrans.c' object='bus/usb/usb_module-usbtrans.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -c -o bus/usb/usb_module-usbtrans.o `test -f 'bus/usb/usbtrans.c' || echo '$(srcdir)/'`bus/usb/usbtrans.c + +bus/usb/usb_module-usbtrans.obj: bus/usb/usbtrans.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -MT bus/usb/usb_module-usbtrans.obj -MD -MP -MF bus/usb/$(DEPDIR)/usb_module-usbtrans.Tpo -c -o bus/usb/usb_module-usbtrans.obj `if test -f 'bus/usb/usbtrans.c'; then $(CYGPATH_W) 'bus/usb/usbtrans.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/usbtrans.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/usb_module-usbtrans.Tpo bus/usb/$(DEPDIR)/usb_module-usbtrans.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/usbtrans.c' object='bus/usb/usb_module-usbtrans.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -c -o bus/usb/usb_module-usbtrans.obj `if test -f 'bus/usb/usbtrans.c'; then $(CYGPATH_W) 'bus/usb/usbtrans.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/usbtrans.c'; fi` + +bus/usb/usb_module-usbhub.o: bus/usb/usbhub.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -MT bus/usb/usb_module-usbhub.o -MD -MP -MF bus/usb/$(DEPDIR)/usb_module-usbhub.Tpo -c -o bus/usb/usb_module-usbhub.o `test -f 'bus/usb/usbhub.c' || echo '$(srcdir)/'`bus/usb/usbhub.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/usb_module-usbhub.Tpo bus/usb/$(DEPDIR)/usb_module-usbhub.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/usbhub.c' object='bus/usb/usb_module-usbhub.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -c -o bus/usb/usb_module-usbhub.o `test -f 'bus/usb/usbhub.c' || echo '$(srcdir)/'`bus/usb/usbhub.c + +bus/usb/usb_module-usbhub.obj: bus/usb/usbhub.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -MT bus/usb/usb_module-usbhub.obj -MD -MP -MF bus/usb/$(DEPDIR)/usb_module-usbhub.Tpo -c -o bus/usb/usb_module-usbhub.obj `if test -f 'bus/usb/usbhub.c'; then $(CYGPATH_W) 'bus/usb/usbhub.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/usbhub.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/$(DEPDIR)/usb_module-usbhub.Tpo bus/usb/$(DEPDIR)/usb_module-usbhub.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/usbhub.c' object='bus/usb/usb_module-usbhub.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $(usb_module_CFLAGS) $(CFLAGS) -c -o bus/usb/usb_module-usbhub.obj `if test -f 'bus/usb/usbhub.c'; then $(CYGPATH_W) 'bus/usb/usbhub.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/usbhub.c'; fi` + +term/usb_keyboard_module-usb_keyboard.o: term/usb_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(usb_keyboard_module_CFLAGS) $(CFLAGS) -MT term/usb_keyboard_module-usb_keyboard.o -MD -MP -MF term/$(DEPDIR)/usb_keyboard_module-usb_keyboard.Tpo -c -o term/usb_keyboard_module-usb_keyboard.o `test -f 'term/usb_keyboard.c' || echo '$(srcdir)/'`term/usb_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/usb_keyboard_module-usb_keyboard.Tpo term/$(DEPDIR)/usb_keyboard_module-usb_keyboard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/usb_keyboard.c' object='term/usb_keyboard_module-usb_keyboard.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(usb_keyboard_module_CFLAGS) $(CFLAGS) -c -o term/usb_keyboard_module-usb_keyboard.o `test -f 'term/usb_keyboard.c' || echo '$(srcdir)/'`term/usb_keyboard.c + +term/usb_keyboard_module-usb_keyboard.obj: term/usb_keyboard.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(usb_keyboard_module_CFLAGS) $(CFLAGS) -MT term/usb_keyboard_module-usb_keyboard.obj -MD -MP -MF term/$(DEPDIR)/usb_keyboard_module-usb_keyboard.Tpo -c -o term/usb_keyboard_module-usb_keyboard.obj `if test -f 'term/usb_keyboard.c'; then $(CYGPATH_W) 'term/usb_keyboard.c'; else $(CYGPATH_W) '$(srcdir)/term/usb_keyboard.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/$(DEPDIR)/usb_keyboard_module-usb_keyboard.Tpo term/$(DEPDIR)/usb_keyboard_module-usb_keyboard.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/usb_keyboard.c' object='term/usb_keyboard_module-usb_keyboard.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $(usb_keyboard_module_CFLAGS) $(CFLAGS) -c -o term/usb_keyboard_module-usb_keyboard.obj `if test -f 'term/usb_keyboard.c'; then $(CYGPATH_W) 'term/usb_keyboard.c'; else $(CYGPATH_W) '$(srcdir)/term/usb_keyboard.c'; fi` + +disk/usbms_module-usbms.o: disk/usbms.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $(usbms_module_CFLAGS) $(CFLAGS) -MT disk/usbms_module-usbms.o -MD -MP -MF disk/$(DEPDIR)/usbms_module-usbms.Tpo -c -o disk/usbms_module-usbms.o `test -f 'disk/usbms.c' || echo '$(srcdir)/'`disk/usbms.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/usbms_module-usbms.Tpo disk/$(DEPDIR)/usbms_module-usbms.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/usbms.c' object='disk/usbms_module-usbms.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $(usbms_module_CFLAGS) $(CFLAGS) -c -o disk/usbms_module-usbms.o `test -f 'disk/usbms.c' || echo '$(srcdir)/'`disk/usbms.c + +disk/usbms_module-usbms.obj: disk/usbms.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $(usbms_module_CFLAGS) $(CFLAGS) -MT disk/usbms_module-usbms.obj -MD -MP -MF disk/$(DEPDIR)/usbms_module-usbms.Tpo -c -o disk/usbms_module-usbms.obj `if test -f 'disk/usbms.c'; then $(CYGPATH_W) 'disk/usbms.c'; else $(CYGPATH_W) '$(srcdir)/disk/usbms.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) disk/$(DEPDIR)/usbms_module-usbms.Tpo disk/$(DEPDIR)/usbms_module-usbms.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='disk/usbms.c' object='disk/usbms_module-usbms.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $(usbms_module_CFLAGS) $(CFLAGS) -c -o disk/usbms_module-usbms.obj `if test -f 'disk/usbms.c'; then $(CYGPATH_W) 'disk/usbms.c'; else $(CYGPATH_W) '$(srcdir)/disk/usbms.c'; fi` + +bus/usb/serial/usbserial_common_module-common.o: bus/usb/serial/common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_common_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_common_module-common.o -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_common_module-common.Tpo -c -o bus/usb/serial/usbserial_common_module-common.o `test -f 'bus/usb/serial/common.c' || echo '$(srcdir)/'`bus/usb/serial/common.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_common_module-common.Tpo bus/usb/serial/$(DEPDIR)/usbserial_common_module-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/common.c' object='bus/usb/serial/usbserial_common_module-common.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_common_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_common_module-common.o `test -f 'bus/usb/serial/common.c' || echo '$(srcdir)/'`bus/usb/serial/common.c + +bus/usb/serial/usbserial_common_module-common.obj: bus/usb/serial/common.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_common_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_common_module-common.obj -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_common_module-common.Tpo -c -o bus/usb/serial/usbserial_common_module-common.obj `if test -f 'bus/usb/serial/common.c'; then $(CYGPATH_W) 'bus/usb/serial/common.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/common.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_common_module-common.Tpo bus/usb/serial/$(DEPDIR)/usbserial_common_module-common.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/common.c' object='bus/usb/serial/usbserial_common_module-common.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_common_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_common_module-common.obj `if test -f 'bus/usb/serial/common.c'; then $(CYGPATH_W) 'bus/usb/serial/common.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/common.c'; fi` + +bus/usb/serial/usbserial_ftdi_module-ftdi.o: bus/usb/serial/ftdi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_ftdi_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_ftdi_module-ftdi.o -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_ftdi_module-ftdi.Tpo -c -o bus/usb/serial/usbserial_ftdi_module-ftdi.o `test -f 'bus/usb/serial/ftdi.c' || echo '$(srcdir)/'`bus/usb/serial/ftdi.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_ftdi_module-ftdi.Tpo bus/usb/serial/$(DEPDIR)/usbserial_ftdi_module-ftdi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/ftdi.c' object='bus/usb/serial/usbserial_ftdi_module-ftdi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_ftdi_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_ftdi_module-ftdi.o `test -f 'bus/usb/serial/ftdi.c' || echo '$(srcdir)/'`bus/usb/serial/ftdi.c + +bus/usb/serial/usbserial_ftdi_module-ftdi.obj: bus/usb/serial/ftdi.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_ftdi_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_ftdi_module-ftdi.obj -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_ftdi_module-ftdi.Tpo -c -o bus/usb/serial/usbserial_ftdi_module-ftdi.obj `if test -f 'bus/usb/serial/ftdi.c'; then $(CYGPATH_W) 'bus/usb/serial/ftdi.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/ftdi.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_ftdi_module-ftdi.Tpo bus/usb/serial/$(DEPDIR)/usbserial_ftdi_module-ftdi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/ftdi.c' object='bus/usb/serial/usbserial_ftdi_module-ftdi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_ftdi_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_ftdi_module-ftdi.obj `if test -f 'bus/usb/serial/ftdi.c'; then $(CYGPATH_W) 'bus/usb/serial/ftdi.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/ftdi.c'; fi` + +bus/usb/serial/usbserial_pl2303_module-pl2303.o: bus/usb/serial/pl2303.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_pl2303_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_pl2303_module-pl2303.o -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_pl2303_module-pl2303.Tpo -c -o bus/usb/serial/usbserial_pl2303_module-pl2303.o `test -f 'bus/usb/serial/pl2303.c' || echo '$(srcdir)/'`bus/usb/serial/pl2303.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_pl2303_module-pl2303.Tpo bus/usb/serial/$(DEPDIR)/usbserial_pl2303_module-pl2303.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/pl2303.c' object='bus/usb/serial/usbserial_pl2303_module-pl2303.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_pl2303_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_pl2303_module-pl2303.o `test -f 'bus/usb/serial/pl2303.c' || echo '$(srcdir)/'`bus/usb/serial/pl2303.c + +bus/usb/serial/usbserial_pl2303_module-pl2303.obj: bus/usb/serial/pl2303.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_pl2303_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_pl2303_module-pl2303.obj -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_pl2303_module-pl2303.Tpo -c -o bus/usb/serial/usbserial_pl2303_module-pl2303.obj `if test -f 'bus/usb/serial/pl2303.c'; then $(CYGPATH_W) 'bus/usb/serial/pl2303.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/pl2303.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_pl2303_module-pl2303.Tpo bus/usb/serial/$(DEPDIR)/usbserial_pl2303_module-pl2303.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/pl2303.c' object='bus/usb/serial/usbserial_pl2303_module-pl2303.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_pl2303_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_pl2303_module-pl2303.obj `if test -f 'bus/usb/serial/pl2303.c'; then $(CYGPATH_W) 'bus/usb/serial/pl2303.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/pl2303.c'; fi` + +bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.o: bus/usb/serial/usbdebug_late.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_usbdebug_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.o -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_usbdebug_module-usbdebug_late.Tpo -c -o bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.o `test -f 'bus/usb/serial/usbdebug_late.c' || echo '$(srcdir)/'`bus/usb/serial/usbdebug_late.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_usbdebug_module-usbdebug_late.Tpo bus/usb/serial/$(DEPDIR)/usbserial_usbdebug_module-usbdebug_late.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/usbdebug_late.c' object='bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_usbdebug_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.o `test -f 'bus/usb/serial/usbdebug_late.c' || echo '$(srcdir)/'`bus/usb/serial/usbdebug_late.c + +bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.obj: bus/usb/serial/usbdebug_late.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_usbdebug_module_CFLAGS) $(CFLAGS) -MT bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.obj -MD -MP -MF bus/usb/serial/$(DEPDIR)/usbserial_usbdebug_module-usbdebug_late.Tpo -c -o bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.obj `if test -f 'bus/usb/serial/usbdebug_late.c'; then $(CYGPATH_W) 'bus/usb/serial/usbdebug_late.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/usbdebug_late.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bus/usb/serial/$(DEPDIR)/usbserial_usbdebug_module-usbdebug_late.Tpo bus/usb/serial/$(DEPDIR)/usbserial_usbdebug_module-usbdebug_late.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bus/usb/serial/usbdebug_late.c' object='bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $(usbserial_usbdebug_module_CFLAGS) $(CFLAGS) -c -o bus/usb/serial/usbserial_usbdebug_module-usbdebug_late.obj `if test -f 'bus/usb/serial/usbdebug_late.c'; then $(CYGPATH_W) 'bus/usb/serial/usbdebug_late.c'; else $(CYGPATH_W) '$(srcdir)/bus/usb/serial/usbdebug_late.c'; fi` + +commands/usbtest_module-usbtest.o: commands/usbtest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $(usbtest_module_CFLAGS) $(CFLAGS) -MT commands/usbtest_module-usbtest.o -MD -MP -MF commands/$(DEPDIR)/usbtest_module-usbtest.Tpo -c -o commands/usbtest_module-usbtest.o `test -f 'commands/usbtest.c' || echo '$(srcdir)/'`commands/usbtest.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/usbtest_module-usbtest.Tpo commands/$(DEPDIR)/usbtest_module-usbtest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/usbtest.c' object='commands/usbtest_module-usbtest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $(usbtest_module_CFLAGS) $(CFLAGS) -c -o commands/usbtest_module-usbtest.o `test -f 'commands/usbtest.c' || echo '$(srcdir)/'`commands/usbtest.c + +commands/usbtest_module-usbtest.obj: commands/usbtest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $(usbtest_module_CFLAGS) $(CFLAGS) -MT commands/usbtest_module-usbtest.obj -MD -MP -MF commands/$(DEPDIR)/usbtest_module-usbtest.Tpo -c -o commands/usbtest_module-usbtest.obj `if test -f 'commands/usbtest.c'; then $(CYGPATH_W) 'commands/usbtest.c'; else $(CYGPATH_W) '$(srcdir)/commands/usbtest.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/usbtest_module-usbtest.Tpo commands/$(DEPDIR)/usbtest_module-usbtest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/usbtest.c' object='commands/usbtest_module-usbtest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $(usbtest_module_CFLAGS) $(CFLAGS) -c -o commands/usbtest_module-usbtest.obj `if test -f 'commands/usbtest.c'; then $(CYGPATH_W) 'commands/usbtest.c'; else $(CYGPATH_W) '$(srcdir)/commands/usbtest.c'; fi` + +video/i386/pc/vbe_module-vbe.o: video/i386/pc/vbe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vbe_module_CPPFLAGS) $(CPPFLAGS) $(vbe_module_CFLAGS) $(CFLAGS) -MT video/i386/pc/vbe_module-vbe.o -MD -MP -MF video/i386/pc/$(DEPDIR)/vbe_module-vbe.Tpo -c -o video/i386/pc/vbe_module-vbe.o `test -f 'video/i386/pc/vbe.c' || echo '$(srcdir)/'`video/i386/pc/vbe.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/i386/pc/$(DEPDIR)/vbe_module-vbe.Tpo video/i386/pc/$(DEPDIR)/vbe_module-vbe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/i386/pc/vbe.c' object='video/i386/pc/vbe_module-vbe.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vbe_module_CPPFLAGS) $(CPPFLAGS) $(vbe_module_CFLAGS) $(CFLAGS) -c -o video/i386/pc/vbe_module-vbe.o `test -f 'video/i386/pc/vbe.c' || echo '$(srcdir)/'`video/i386/pc/vbe.c + +video/i386/pc/vbe_module-vbe.obj: video/i386/pc/vbe.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vbe_module_CPPFLAGS) $(CPPFLAGS) $(vbe_module_CFLAGS) $(CFLAGS) -MT video/i386/pc/vbe_module-vbe.obj -MD -MP -MF video/i386/pc/$(DEPDIR)/vbe_module-vbe.Tpo -c -o video/i386/pc/vbe_module-vbe.obj `if test -f 'video/i386/pc/vbe.c'; then $(CYGPATH_W) 'video/i386/pc/vbe.c'; else $(CYGPATH_W) '$(srcdir)/video/i386/pc/vbe.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/i386/pc/$(DEPDIR)/vbe_module-vbe.Tpo video/i386/pc/$(DEPDIR)/vbe_module-vbe.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/i386/pc/vbe.c' object='video/i386/pc/vbe_module-vbe.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vbe_module_CPPFLAGS) $(CPPFLAGS) $(vbe_module_CFLAGS) $(CFLAGS) -c -o video/i386/pc/vbe_module-vbe.obj `if test -f 'video/i386/pc/vbe.c'; then $(CYGPATH_W) 'video/i386/pc/vbe.c'; else $(CYGPATH_W) '$(srcdir)/video/i386/pc/vbe.c'; fi` + +commands/verify_module-verify.o: commands/verify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verify_module_CPPFLAGS) $(CPPFLAGS) $(verify_module_CFLAGS) $(CFLAGS) -MT commands/verify_module-verify.o -MD -MP -MF commands/$(DEPDIR)/verify_module-verify.Tpo -c -o commands/verify_module-verify.o `test -f 'commands/verify.c' || echo '$(srcdir)/'`commands/verify.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/verify_module-verify.Tpo commands/$(DEPDIR)/verify_module-verify.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/verify.c' object='commands/verify_module-verify.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verify_module_CPPFLAGS) $(CPPFLAGS) $(verify_module_CFLAGS) $(CFLAGS) -c -o commands/verify_module-verify.o `test -f 'commands/verify.c' || echo '$(srcdir)/'`commands/verify.c + +commands/verify_module-verify.obj: commands/verify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verify_module_CPPFLAGS) $(CPPFLAGS) $(verify_module_CFLAGS) $(CFLAGS) -MT commands/verify_module-verify.obj -MD -MP -MF commands/$(DEPDIR)/verify_module-verify.Tpo -c -o commands/verify_module-verify.obj `if test -f 'commands/verify.c'; then $(CYGPATH_W) 'commands/verify.c'; else $(CYGPATH_W) '$(srcdir)/commands/verify.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/verify_module-verify.Tpo commands/$(DEPDIR)/verify_module-verify.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/verify.c' object='commands/verify_module-verify.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verify_module_CPPFLAGS) $(CPPFLAGS) $(verify_module_CFLAGS) $(CFLAGS) -c -o commands/verify_module-verify.obj `if test -f 'commands/verify.c'; then $(CYGPATH_W) 'commands/verify.c'; else $(CYGPATH_W) '$(srcdir)/commands/verify.c'; fi` + +video/i386/pc/vga_module-vga.o: video/i386/pc/vga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_module_CPPFLAGS) $(CPPFLAGS) $(vga_module_CFLAGS) $(CFLAGS) -MT video/i386/pc/vga_module-vga.o -MD -MP -MF video/i386/pc/$(DEPDIR)/vga_module-vga.Tpo -c -o video/i386/pc/vga_module-vga.o `test -f 'video/i386/pc/vga.c' || echo '$(srcdir)/'`video/i386/pc/vga.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/i386/pc/$(DEPDIR)/vga_module-vga.Tpo video/i386/pc/$(DEPDIR)/vga_module-vga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/i386/pc/vga.c' object='video/i386/pc/vga_module-vga.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_module_CPPFLAGS) $(CPPFLAGS) $(vga_module_CFLAGS) $(CFLAGS) -c -o video/i386/pc/vga_module-vga.o `test -f 'video/i386/pc/vga.c' || echo '$(srcdir)/'`video/i386/pc/vga.c + +video/i386/pc/vga_module-vga.obj: video/i386/pc/vga.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_module_CPPFLAGS) $(CPPFLAGS) $(vga_module_CFLAGS) $(CFLAGS) -MT video/i386/pc/vga_module-vga.obj -MD -MP -MF video/i386/pc/$(DEPDIR)/vga_module-vga.Tpo -c -o video/i386/pc/vga_module-vga.obj `if test -f 'video/i386/pc/vga.c'; then $(CYGPATH_W) 'video/i386/pc/vga.c'; else $(CYGPATH_W) '$(srcdir)/video/i386/pc/vga.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/i386/pc/$(DEPDIR)/vga_module-vga.Tpo video/i386/pc/$(DEPDIR)/vga_module-vga.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/i386/pc/vga.c' object='video/i386/pc/vga_module-vga.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_module_CPPFLAGS) $(CPPFLAGS) $(vga_module_CFLAGS) $(CFLAGS) -c -o video/i386/pc/vga_module-vga.obj `if test -f 'video/i386/pc/vga.c'; then $(CYGPATH_W) 'video/i386/pc/vga.c'; else $(CYGPATH_W) '$(srcdir)/video/i386/pc/vga.c'; fi` + +term/i386/pc/vga_text_module-vga_text.o: term/i386/pc/vga_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_text_module_CPPFLAGS) $(CPPFLAGS) $(vga_text_module_CFLAGS) $(CFLAGS) -MT term/i386/pc/vga_text_module-vga_text.o -MD -MP -MF term/i386/pc/$(DEPDIR)/vga_text_module-vga_text.Tpo -c -o term/i386/pc/vga_text_module-vga_text.o `test -f 'term/i386/pc/vga_text.c' || echo '$(srcdir)/'`term/i386/pc/vga_text.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/vga_text_module-vga_text.Tpo term/i386/pc/$(DEPDIR)/vga_text_module-vga_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/vga_text.c' object='term/i386/pc/vga_text_module-vga_text.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_text_module_CPPFLAGS) $(CPPFLAGS) $(vga_text_module_CFLAGS) $(CFLAGS) -c -o term/i386/pc/vga_text_module-vga_text.o `test -f 'term/i386/pc/vga_text.c' || echo '$(srcdir)/'`term/i386/pc/vga_text.c + +term/i386/pc/vga_text_module-vga_text.obj: term/i386/pc/vga_text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_text_module_CPPFLAGS) $(CPPFLAGS) $(vga_text_module_CFLAGS) $(CFLAGS) -MT term/i386/pc/vga_text_module-vga_text.obj -MD -MP -MF term/i386/pc/$(DEPDIR)/vga_text_module-vga_text.Tpo -c -o term/i386/pc/vga_text_module-vga_text.obj `if test -f 'term/i386/pc/vga_text.c'; then $(CYGPATH_W) 'term/i386/pc/vga_text.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/vga_text.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) term/i386/pc/$(DEPDIR)/vga_text_module-vga_text.Tpo term/i386/pc/$(DEPDIR)/vga_text_module-vga_text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='term/i386/pc/vga_text.c' object='term/i386/pc/vga_text_module-vga_text.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_text_module_CPPFLAGS) $(CPPFLAGS) $(vga_text_module_CFLAGS) $(CFLAGS) -c -o term/i386/pc/vga_text_module-vga_text.obj `if test -f 'term/i386/pc/vga_text.c'; then $(CYGPATH_W) 'term/i386/pc/vga_text.c'; else $(CYGPATH_W) '$(srcdir)/term/i386/pc/vga_text.c'; fi` + +video/video_module-video.o: video/video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $(video_module_CFLAGS) $(CFLAGS) -MT video/video_module-video.o -MD -MP -MF video/$(DEPDIR)/video_module-video.Tpo -c -o video/video_module-video.o `test -f 'video/video.c' || echo '$(srcdir)/'`video/video.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_module-video.Tpo video/$(DEPDIR)/video_module-video.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/video.c' object='video/video_module-video.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $(video_module_CFLAGS) $(CFLAGS) -c -o video/video_module-video.o `test -f 'video/video.c' || echo '$(srcdir)/'`video/video.c + +video/video_module-video.obj: video/video.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $(video_module_CFLAGS) $(CFLAGS) -MT video/video_module-video.obj -MD -MP -MF video/$(DEPDIR)/video_module-video.Tpo -c -o video/video_module-video.obj `if test -f 'video/video.c'; then $(CYGPATH_W) 'video/video.c'; else $(CYGPATH_W) '$(srcdir)/video/video.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_module-video.Tpo video/$(DEPDIR)/video_module-video.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/video.c' object='video/video_module-video.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $(video_module_CFLAGS) $(CFLAGS) -c -o video/video_module-video.obj `if test -f 'video/video.c'; then $(CYGPATH_W) 'video/video.c'; else $(CYGPATH_W) '$(srcdir)/video/video.c'; fi` + +video/video_bochs_module-bochs.o: video/bochs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $(video_bochs_module_CFLAGS) $(CFLAGS) -MT video/video_bochs_module-bochs.o -MD -MP -MF video/$(DEPDIR)/video_bochs_module-bochs.Tpo -c -o video/video_bochs_module-bochs.o `test -f 'video/bochs.c' || echo '$(srcdir)/'`video/bochs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_bochs_module-bochs.Tpo video/$(DEPDIR)/video_bochs_module-bochs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/bochs.c' object='video/video_bochs_module-bochs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $(video_bochs_module_CFLAGS) $(CFLAGS) -c -o video/video_bochs_module-bochs.o `test -f 'video/bochs.c' || echo '$(srcdir)/'`video/bochs.c + +video/video_bochs_module-bochs.obj: video/bochs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $(video_bochs_module_CFLAGS) $(CFLAGS) -MT video/video_bochs_module-bochs.obj -MD -MP -MF video/$(DEPDIR)/video_bochs_module-bochs.Tpo -c -o video/video_bochs_module-bochs.obj `if test -f 'video/bochs.c'; then $(CYGPATH_W) 'video/bochs.c'; else $(CYGPATH_W) '$(srcdir)/video/bochs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_bochs_module-bochs.Tpo video/$(DEPDIR)/video_bochs_module-bochs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/bochs.c' object='video/video_bochs_module-bochs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $(video_bochs_module_CFLAGS) $(CFLAGS) -c -o video/video_bochs_module-bochs.obj `if test -f 'video/bochs.c'; then $(CYGPATH_W) 'video/bochs.c'; else $(CYGPATH_W) '$(srcdir)/video/bochs.c'; fi` + +video/video_cirrus_module-cirrus.o: video/cirrus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $(video_cirrus_module_CFLAGS) $(CFLAGS) -MT video/video_cirrus_module-cirrus.o -MD -MP -MF video/$(DEPDIR)/video_cirrus_module-cirrus.Tpo -c -o video/video_cirrus_module-cirrus.o `test -f 'video/cirrus.c' || echo '$(srcdir)/'`video/cirrus.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_cirrus_module-cirrus.Tpo video/$(DEPDIR)/video_cirrus_module-cirrus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/cirrus.c' object='video/video_cirrus_module-cirrus.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $(video_cirrus_module_CFLAGS) $(CFLAGS) -c -o video/video_cirrus_module-cirrus.o `test -f 'video/cirrus.c' || echo '$(srcdir)/'`video/cirrus.c + +video/video_cirrus_module-cirrus.obj: video/cirrus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $(video_cirrus_module_CFLAGS) $(CFLAGS) -MT video/video_cirrus_module-cirrus.obj -MD -MP -MF video/$(DEPDIR)/video_cirrus_module-cirrus.Tpo -c -o video/video_cirrus_module-cirrus.obj `if test -f 'video/cirrus.c'; then $(CYGPATH_W) 'video/cirrus.c'; else $(CYGPATH_W) '$(srcdir)/video/cirrus.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_cirrus_module-cirrus.Tpo video/$(DEPDIR)/video_cirrus_module-cirrus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/cirrus.c' object='video/video_cirrus_module-cirrus.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $(video_cirrus_module_CFLAGS) $(CFLAGS) -c -o video/video_cirrus_module-cirrus.obj `if test -f 'video/cirrus.c'; then $(CYGPATH_W) 'video/cirrus.c'; else $(CYGPATH_W) '$(srcdir)/video/cirrus.c'; fi` + +video/video_colors_module-colors.o: video/colors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_colors_module_CPPFLAGS) $(CPPFLAGS) $(video_colors_module_CFLAGS) $(CFLAGS) -MT video/video_colors_module-colors.o -MD -MP -MF video/$(DEPDIR)/video_colors_module-colors.Tpo -c -o video/video_colors_module-colors.o `test -f 'video/colors.c' || echo '$(srcdir)/'`video/colors.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_colors_module-colors.Tpo video/$(DEPDIR)/video_colors_module-colors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/colors.c' object='video/video_colors_module-colors.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_colors_module_CPPFLAGS) $(CPPFLAGS) $(video_colors_module_CFLAGS) $(CFLAGS) -c -o video/video_colors_module-colors.o `test -f 'video/colors.c' || echo '$(srcdir)/'`video/colors.c + +video/video_colors_module-colors.obj: video/colors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_colors_module_CPPFLAGS) $(CPPFLAGS) $(video_colors_module_CFLAGS) $(CFLAGS) -MT video/video_colors_module-colors.obj -MD -MP -MF video/$(DEPDIR)/video_colors_module-colors.Tpo -c -o video/video_colors_module-colors.obj `if test -f 'video/colors.c'; then $(CYGPATH_W) 'video/colors.c'; else $(CYGPATH_W) '$(srcdir)/video/colors.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/$(DEPDIR)/video_colors_module-colors.Tpo video/$(DEPDIR)/video_colors_module-colors.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/colors.c' object='video/video_colors_module-colors.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_colors_module_CPPFLAGS) $(CPPFLAGS) $(video_colors_module_CFLAGS) $(CFLAGS) -c -o video/video_colors_module-colors.obj `if test -f 'video/colors.c'; then $(CYGPATH_W) 'video/colors.c'; else $(CYGPATH_W) '$(srcdir)/video/colors.c'; fi` + +video/fb/video_fb_module-video_fb.o: video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-video_fb.o -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-video_fb.Tpo -c -o video/fb/video_fb_module-video_fb.o `test -f 'video/fb/video_fb.c' || echo '$(srcdir)/'`video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-video_fb.Tpo video/fb/$(DEPDIR)/video_fb_module-video_fb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/video_fb.c' object='video/fb/video_fb_module-video_fb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-video_fb.o `test -f 'video/fb/video_fb.c' || echo '$(srcdir)/'`video/fb/video_fb.c + +video/fb/video_fb_module-video_fb.obj: video/fb/video_fb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-video_fb.obj -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-video_fb.Tpo -c -o video/fb/video_fb_module-video_fb.obj `if test -f 'video/fb/video_fb.c'; then $(CYGPATH_W) 'video/fb/video_fb.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/video_fb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-video_fb.Tpo video/fb/$(DEPDIR)/video_fb_module-video_fb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/video_fb.c' object='video/fb/video_fb_module-video_fb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-video_fb.obj `if test -f 'video/fb/video_fb.c'; then $(CYGPATH_W) 'video/fb/video_fb.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/video_fb.c'; fi` + +video/fb/video_fb_module-fbblit.o: video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-fbblit.o -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-fbblit.Tpo -c -o video/fb/video_fb_module-fbblit.o `test -f 'video/fb/fbblit.c' || echo '$(srcdir)/'`video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-fbblit.Tpo video/fb/$(DEPDIR)/video_fb_module-fbblit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbblit.c' object='video/fb/video_fb_module-fbblit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-fbblit.o `test -f 'video/fb/fbblit.c' || echo '$(srcdir)/'`video/fb/fbblit.c + +video/fb/video_fb_module-fbblit.obj: video/fb/fbblit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-fbblit.obj -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-fbblit.Tpo -c -o video/fb/video_fb_module-fbblit.obj `if test -f 'video/fb/fbblit.c'; then $(CYGPATH_W) 'video/fb/fbblit.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbblit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-fbblit.Tpo video/fb/$(DEPDIR)/video_fb_module-fbblit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbblit.c' object='video/fb/video_fb_module-fbblit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-fbblit.obj `if test -f 'video/fb/fbblit.c'; then $(CYGPATH_W) 'video/fb/fbblit.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbblit.c'; fi` + +video/fb/video_fb_module-fbfill.o: video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-fbfill.o -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-fbfill.Tpo -c -o video/fb/video_fb_module-fbfill.o `test -f 'video/fb/fbfill.c' || echo '$(srcdir)/'`video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-fbfill.Tpo video/fb/$(DEPDIR)/video_fb_module-fbfill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbfill.c' object='video/fb/video_fb_module-fbfill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-fbfill.o `test -f 'video/fb/fbfill.c' || echo '$(srcdir)/'`video/fb/fbfill.c + +video/fb/video_fb_module-fbfill.obj: video/fb/fbfill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-fbfill.obj -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-fbfill.Tpo -c -o video/fb/video_fb_module-fbfill.obj `if test -f 'video/fb/fbfill.c'; then $(CYGPATH_W) 'video/fb/fbfill.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbfill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-fbfill.Tpo video/fb/$(DEPDIR)/video_fb_module-fbfill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbfill.c' object='video/fb/video_fb_module-fbfill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-fbfill.obj `if test -f 'video/fb/fbfill.c'; then $(CYGPATH_W) 'video/fb/fbfill.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbfill.c'; fi` + +video/fb/video_fb_module-fbutil.o: video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-fbutil.o -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-fbutil.Tpo -c -o video/fb/video_fb_module-fbutil.o `test -f 'video/fb/fbutil.c' || echo '$(srcdir)/'`video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-fbutil.Tpo video/fb/$(DEPDIR)/video_fb_module-fbutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbutil.c' object='video/fb/video_fb_module-fbutil.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-fbutil.o `test -f 'video/fb/fbutil.c' || echo '$(srcdir)/'`video/fb/fbutil.c + +video/fb/video_fb_module-fbutil.obj: video/fb/fbutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -MT video/fb/video_fb_module-fbutil.obj -MD -MP -MF video/fb/$(DEPDIR)/video_fb_module-fbutil.Tpo -c -o video/fb/video_fb_module-fbutil.obj `if test -f 'video/fb/fbutil.c'; then $(CYGPATH_W) 'video/fb/fbutil.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbutil.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) video/fb/$(DEPDIR)/video_fb_module-fbutil.Tpo video/fb/$(DEPDIR)/video_fb_module-fbutil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video/fb/fbutil.c' object='video/fb/video_fb_module-fbutil.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $(video_fb_module_CFLAGS) $(CFLAGS) -c -o video/fb/video_fb_module-fbutil.obj `if test -f 'video/fb/fbutil.c'; then $(CYGPATH_W) 'video/fb/fbutil.c'; else $(CYGPATH_W) '$(srcdir)/video/fb/fbutil.c'; fi` + +commands/videoinfo_module-videoinfo.o: commands/videoinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videoinfo_module_CPPFLAGS) $(CPPFLAGS) $(videoinfo_module_CFLAGS) $(CFLAGS) -MT commands/videoinfo_module-videoinfo.o -MD -MP -MF commands/$(DEPDIR)/videoinfo_module-videoinfo.Tpo -c -o commands/videoinfo_module-videoinfo.o `test -f 'commands/videoinfo.c' || echo '$(srcdir)/'`commands/videoinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/videoinfo_module-videoinfo.Tpo commands/$(DEPDIR)/videoinfo_module-videoinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/videoinfo.c' object='commands/videoinfo_module-videoinfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videoinfo_module_CPPFLAGS) $(CPPFLAGS) $(videoinfo_module_CFLAGS) $(CFLAGS) -c -o commands/videoinfo_module-videoinfo.o `test -f 'commands/videoinfo.c' || echo '$(srcdir)/'`commands/videoinfo.c + +commands/videoinfo_module-videoinfo.obj: commands/videoinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videoinfo_module_CPPFLAGS) $(CPPFLAGS) $(videoinfo_module_CFLAGS) $(CFLAGS) -MT commands/videoinfo_module-videoinfo.obj -MD -MP -MF commands/$(DEPDIR)/videoinfo_module-videoinfo.Tpo -c -o commands/videoinfo_module-videoinfo.obj `if test -f 'commands/videoinfo.c'; then $(CYGPATH_W) 'commands/videoinfo.c'; else $(CYGPATH_W) '$(srcdir)/commands/videoinfo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/videoinfo_module-videoinfo.Tpo commands/$(DEPDIR)/videoinfo_module-videoinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/videoinfo.c' object='commands/videoinfo_module-videoinfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videoinfo_module_CPPFLAGS) $(CPPFLAGS) $(videoinfo_module_CFLAGS) $(CFLAGS) -c -o commands/videoinfo_module-videoinfo.obj `if test -f 'commands/videoinfo.c'; then $(CYGPATH_W) 'commands/videoinfo.c'; else $(CYGPATH_W) '$(srcdir)/commands/videoinfo.c'; fi` + +commands/videotest_module-videotest.o: commands/videotest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_module_CPPFLAGS) $(CPPFLAGS) $(videotest_module_CFLAGS) $(CFLAGS) -MT commands/videotest_module-videotest.o -MD -MP -MF commands/$(DEPDIR)/videotest_module-videotest.Tpo -c -o commands/videotest_module-videotest.o `test -f 'commands/videotest.c' || echo '$(srcdir)/'`commands/videotest.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/videotest_module-videotest.Tpo commands/$(DEPDIR)/videotest_module-videotest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/videotest.c' object='commands/videotest_module-videotest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_module_CPPFLAGS) $(CPPFLAGS) $(videotest_module_CFLAGS) $(CFLAGS) -c -o commands/videotest_module-videotest.o `test -f 'commands/videotest.c' || echo '$(srcdir)/'`commands/videotest.c + +commands/videotest_module-videotest.obj: commands/videotest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_module_CPPFLAGS) $(CPPFLAGS) $(videotest_module_CFLAGS) $(CFLAGS) -MT commands/videotest_module-videotest.obj -MD -MP -MF commands/$(DEPDIR)/videotest_module-videotest.Tpo -c -o commands/videotest_module-videotest.obj `if test -f 'commands/videotest.c'; then $(CYGPATH_W) 'commands/videotest.c'; else $(CYGPATH_W) '$(srcdir)/commands/videotest.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/videotest_module-videotest.Tpo commands/$(DEPDIR)/videotest_module-videotest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/videotest.c' object='commands/videotest_module-videotest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_module_CPPFLAGS) $(CPPFLAGS) $(videotest_module_CFLAGS) $(CFLAGS) -c -o commands/videotest_module-videotest.obj `if test -f 'commands/videotest.c'; then $(CYGPATH_W) 'commands/videotest.c'; else $(CYGPATH_W) '$(srcdir)/commands/videotest.c'; fi` + +tests/videotest_checksum_module-videotest_checksum.o: tests/videotest_checksum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_checksum_module_CPPFLAGS) $(CPPFLAGS) $(videotest_checksum_module_CFLAGS) $(CFLAGS) -MT tests/videotest_checksum_module-videotest_checksum.o -MD -MP -MF tests/$(DEPDIR)/videotest_checksum_module-videotest_checksum.Tpo -c -o tests/videotest_checksum_module-videotest_checksum.o `test -f 'tests/videotest_checksum.c' || echo '$(srcdir)/'`tests/videotest_checksum.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/videotest_checksum_module-videotest_checksum.Tpo tests/$(DEPDIR)/videotest_checksum_module-videotest_checksum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/videotest_checksum.c' object='tests/videotest_checksum_module-videotest_checksum.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_checksum_module_CPPFLAGS) $(CPPFLAGS) $(videotest_checksum_module_CFLAGS) $(CFLAGS) -c -o tests/videotest_checksum_module-videotest_checksum.o `test -f 'tests/videotest_checksum.c' || echo '$(srcdir)/'`tests/videotest_checksum.c + +tests/videotest_checksum_module-videotest_checksum.obj: tests/videotest_checksum.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_checksum_module_CPPFLAGS) $(CPPFLAGS) $(videotest_checksum_module_CFLAGS) $(CFLAGS) -MT tests/videotest_checksum_module-videotest_checksum.obj -MD -MP -MF tests/$(DEPDIR)/videotest_checksum_module-videotest_checksum.Tpo -c -o tests/videotest_checksum_module-videotest_checksum.obj `if test -f 'tests/videotest_checksum.c'; then $(CYGPATH_W) 'tests/videotest_checksum.c'; else $(CYGPATH_W) '$(srcdir)/tests/videotest_checksum.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/videotest_checksum_module-videotest_checksum.Tpo tests/$(DEPDIR)/videotest_checksum_module-videotest_checksum.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/videotest_checksum.c' object='tests/videotest_checksum_module-videotest_checksum.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_checksum_module_CPPFLAGS) $(CPPFLAGS) $(videotest_checksum_module_CFLAGS) $(CFLAGS) -c -o tests/videotest_checksum_module-videotest_checksum.obj `if test -f 'tests/videotest_checksum.c'; then $(CYGPATH_W) 'tests/videotest_checksum.c'; else $(CYGPATH_W) '$(srcdir)/tests/videotest_checksum.c'; fi` + +loader/arm64/xen_boot_module-xen_boot.o: loader/arm64/xen_boot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -MT loader/arm64/xen_boot_module-xen_boot.o -MD -MP -MF loader/arm64/$(DEPDIR)/xen_boot_module-xen_boot.Tpo -c -o loader/arm64/xen_boot_module-xen_boot.o `test -f 'loader/arm64/xen_boot.c' || echo '$(srcdir)/'`loader/arm64/xen_boot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm64/$(DEPDIR)/xen_boot_module-xen_boot.Tpo loader/arm64/$(DEPDIR)/xen_boot_module-xen_boot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm64/xen_boot.c' object='loader/arm64/xen_boot_module-xen_boot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -c -o loader/arm64/xen_boot_module-xen_boot.o `test -f 'loader/arm64/xen_boot.c' || echo '$(srcdir)/'`loader/arm64/xen_boot.c + +loader/arm64/xen_boot_module-xen_boot.obj: loader/arm64/xen_boot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -MT loader/arm64/xen_boot_module-xen_boot.obj -MD -MP -MF loader/arm64/$(DEPDIR)/xen_boot_module-xen_boot.Tpo -c -o loader/arm64/xen_boot_module-xen_boot.obj `if test -f 'loader/arm64/xen_boot.c'; then $(CYGPATH_W) 'loader/arm64/xen_boot.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm64/xen_boot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/arm64/$(DEPDIR)/xen_boot_module-xen_boot.Tpo loader/arm64/$(DEPDIR)/xen_boot_module-xen_boot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/arm64/xen_boot.c' object='loader/arm64/xen_boot_module-xen_boot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -c -o loader/arm64/xen_boot_module-xen_boot.obj `if test -f 'loader/arm64/xen_boot.c'; then $(CYGPATH_W) 'loader/arm64/xen_boot.c'; else $(CYGPATH_W) '$(srcdir)/loader/arm64/xen_boot.c'; fi` + +lib/xen_boot_module-cmdline.o: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -MT lib/xen_boot_module-cmdline.o -MD -MP -MF lib/$(DEPDIR)/xen_boot_module-cmdline.Tpo -c -o lib/xen_boot_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/xen_boot_module-cmdline.Tpo lib/$(DEPDIR)/xen_boot_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/xen_boot_module-cmdline.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -c -o lib/xen_boot_module-cmdline.o `test -f 'lib/cmdline.c' || echo '$(srcdir)/'`lib/cmdline.c + +lib/xen_boot_module-cmdline.obj: lib/cmdline.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -MT lib/xen_boot_module-cmdline.obj -MD -MP -MF lib/$(DEPDIR)/xen_boot_module-cmdline.Tpo -c -o lib/xen_boot_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/xen_boot_module-cmdline.Tpo lib/$(DEPDIR)/xen_boot_module-cmdline.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/cmdline.c' object='lib/xen_boot_module-cmdline.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $(xen_boot_module_CFLAGS) $(CFLAGS) -c -o lib/xen_boot_module-cmdline.obj `if test -f 'lib/cmdline.c'; then $(CYGPATH_W) 'lib/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/lib/cmdline.c'; fi` + +fs/xfs_module-xfs.o: fs/xfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xfs_module_CPPFLAGS) $(CPPFLAGS) $(xfs_module_CFLAGS) $(CFLAGS) -MT fs/xfs_module-xfs.o -MD -MP -MF fs/$(DEPDIR)/xfs_module-xfs.Tpo -c -o fs/xfs_module-xfs.o `test -f 'fs/xfs.c' || echo '$(srcdir)/'`fs/xfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/xfs_module-xfs.Tpo fs/$(DEPDIR)/xfs_module-xfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/xfs.c' object='fs/xfs_module-xfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xfs_module_CPPFLAGS) $(CPPFLAGS) $(xfs_module_CFLAGS) $(CFLAGS) -c -o fs/xfs_module-xfs.o `test -f 'fs/xfs.c' || echo '$(srcdir)/'`fs/xfs.c + +fs/xfs_module-xfs.obj: fs/xfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xfs_module_CPPFLAGS) $(CPPFLAGS) $(xfs_module_CFLAGS) $(CFLAGS) -MT fs/xfs_module-xfs.obj -MD -MP -MF fs/$(DEPDIR)/xfs_module-xfs.Tpo -c -o fs/xfs_module-xfs.obj `if test -f 'fs/xfs.c'; then $(CYGPATH_W) 'fs/xfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/xfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/$(DEPDIR)/xfs_module-xfs.Tpo fs/$(DEPDIR)/xfs_module-xfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/xfs.c' object='fs/xfs_module-xfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xfs_module_CPPFLAGS) $(CPPFLAGS) $(xfs_module_CFLAGS) $(CFLAGS) -c -o fs/xfs_module-xfs.obj `if test -f 'fs/xfs.c'; then $(CYGPATH_W) 'fs/xfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/xfs.c'; fi` + +loader/xnu_module-xnu_resume.o: loader/xnu_resume.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -MT loader/xnu_module-xnu_resume.o -MD -MP -MF loader/$(DEPDIR)/xnu_module-xnu_resume.Tpo -c -o loader/xnu_module-xnu_resume.o `test -f 'loader/xnu_resume.c' || echo '$(srcdir)/'`loader/xnu_resume.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/xnu_module-xnu_resume.Tpo loader/$(DEPDIR)/xnu_module-xnu_resume.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/xnu_resume.c' object='loader/xnu_module-xnu_resume.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -c -o loader/xnu_module-xnu_resume.o `test -f 'loader/xnu_resume.c' || echo '$(srcdir)/'`loader/xnu_resume.c + +loader/xnu_module-xnu_resume.obj: loader/xnu_resume.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -MT loader/xnu_module-xnu_resume.obj -MD -MP -MF loader/$(DEPDIR)/xnu_module-xnu_resume.Tpo -c -o loader/xnu_module-xnu_resume.obj `if test -f 'loader/xnu_resume.c'; then $(CYGPATH_W) 'loader/xnu_resume.c'; else $(CYGPATH_W) '$(srcdir)/loader/xnu_resume.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/xnu_module-xnu_resume.Tpo loader/$(DEPDIR)/xnu_module-xnu_resume.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/xnu_resume.c' object='loader/xnu_module-xnu_resume.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -c -o loader/xnu_module-xnu_resume.obj `if test -f 'loader/xnu_resume.c'; then $(CYGPATH_W) 'loader/xnu_resume.c'; else $(CYGPATH_W) '$(srcdir)/loader/xnu_resume.c'; fi` + +loader/i386/xnu_module-xnu.o: loader/i386/xnu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -MT loader/i386/xnu_module-xnu.o -MD -MP -MF loader/i386/$(DEPDIR)/xnu_module-xnu.Tpo -c -o loader/i386/xnu_module-xnu.o `test -f 'loader/i386/xnu.c' || echo '$(srcdir)/'`loader/i386/xnu.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/xnu_module-xnu.Tpo loader/i386/$(DEPDIR)/xnu_module-xnu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xnu.c' object='loader/i386/xnu_module-xnu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -c -o loader/i386/xnu_module-xnu.o `test -f 'loader/i386/xnu.c' || echo '$(srcdir)/'`loader/i386/xnu.c + +loader/i386/xnu_module-xnu.obj: loader/i386/xnu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -MT loader/i386/xnu_module-xnu.obj -MD -MP -MF loader/i386/$(DEPDIR)/xnu_module-xnu.Tpo -c -o loader/i386/xnu_module-xnu.obj `if test -f 'loader/i386/xnu.c'; then $(CYGPATH_W) 'loader/i386/xnu.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xnu.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/i386/$(DEPDIR)/xnu_module-xnu.Tpo loader/i386/$(DEPDIR)/xnu_module-xnu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/i386/xnu.c' object='loader/i386/xnu_module-xnu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -c -o loader/i386/xnu_module-xnu.obj `if test -f 'loader/i386/xnu.c'; then $(CYGPATH_W) 'loader/i386/xnu.c'; else $(CYGPATH_W) '$(srcdir)/loader/i386/xnu.c'; fi` + +loader/xnu_module-xnu.o: loader/xnu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -MT loader/xnu_module-xnu.o -MD -MP -MF loader/$(DEPDIR)/xnu_module-xnu.Tpo -c -o loader/xnu_module-xnu.o `test -f 'loader/xnu.c' || echo '$(srcdir)/'`loader/xnu.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/xnu_module-xnu.Tpo loader/$(DEPDIR)/xnu_module-xnu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/xnu.c' object='loader/xnu_module-xnu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -c -o loader/xnu_module-xnu.o `test -f 'loader/xnu.c' || echo '$(srcdir)/'`loader/xnu.c + +loader/xnu_module-xnu.obj: loader/xnu.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -MT loader/xnu_module-xnu.obj -MD -MP -MF loader/$(DEPDIR)/xnu_module-xnu.Tpo -c -o loader/xnu_module-xnu.obj `if test -f 'loader/xnu.c'; then $(CYGPATH_W) 'loader/xnu.c'; else $(CYGPATH_W) '$(srcdir)/loader/xnu.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) loader/$(DEPDIR)/xnu_module-xnu.Tpo loader/$(DEPDIR)/xnu_module-xnu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='loader/xnu.c' object='loader/xnu_module-xnu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $(xnu_module_CFLAGS) $(CFLAGS) -c -o loader/xnu_module-xnu.obj `if test -f 'loader/xnu.c'; then $(CYGPATH_W) 'loader/xnu.c'; else $(CYGPATH_W) '$(srcdir)/loader/xnu.c'; fi` + +commands/xnu_uuid_module-xnu_uuid.o: commands/xnu_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_module_CFLAGS) $(CFLAGS) -MT commands/xnu_uuid_module-xnu_uuid.o -MD -MP -MF commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Tpo -c -o commands/xnu_uuid_module-xnu_uuid.o `test -f 'commands/xnu_uuid.c' || echo '$(srcdir)/'`commands/xnu_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Tpo commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/xnu_uuid.c' object='commands/xnu_uuid_module-xnu_uuid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_module_CFLAGS) $(CFLAGS) -c -o commands/xnu_uuid_module-xnu_uuid.o `test -f 'commands/xnu_uuid.c' || echo '$(srcdir)/'`commands/xnu_uuid.c + +commands/xnu_uuid_module-xnu_uuid.obj: commands/xnu_uuid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_module_CFLAGS) $(CFLAGS) -MT commands/xnu_uuid_module-xnu_uuid.obj -MD -MP -MF commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Tpo -c -o commands/xnu_uuid_module-xnu_uuid.obj `if test -f 'commands/xnu_uuid.c'; then $(CYGPATH_W) 'commands/xnu_uuid.c'; else $(CYGPATH_W) '$(srcdir)/commands/xnu_uuid.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Tpo commands/$(DEPDIR)/xnu_uuid_module-xnu_uuid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='commands/xnu_uuid.c' object='commands/xnu_uuid_module-xnu_uuid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_module_CFLAGS) $(CFLAGS) -c -o commands/xnu_uuid_module-xnu_uuid.obj `if test -f 'commands/xnu_uuid.c'; then $(CYGPATH_W) 'commands/xnu_uuid.c'; else $(CYGPATH_W) '$(srcdir)/commands/xnu_uuid.c'; fi` + +tests/xnu_uuid_test_module-xnu_uuid_test.o: tests/xnu_uuid_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_test_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_test_module_CFLAGS) $(CFLAGS) -MT tests/xnu_uuid_test_module-xnu_uuid_test.o -MD -MP -MF tests/$(DEPDIR)/xnu_uuid_test_module-xnu_uuid_test.Tpo -c -o tests/xnu_uuid_test_module-xnu_uuid_test.o `test -f 'tests/xnu_uuid_test.c' || echo '$(srcdir)/'`tests/xnu_uuid_test.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/xnu_uuid_test_module-xnu_uuid_test.Tpo tests/$(DEPDIR)/xnu_uuid_test_module-xnu_uuid_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/xnu_uuid_test.c' object='tests/xnu_uuid_test_module-xnu_uuid_test.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_test_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_test_module_CFLAGS) $(CFLAGS) -c -o tests/xnu_uuid_test_module-xnu_uuid_test.o `test -f 'tests/xnu_uuid_test.c' || echo '$(srcdir)/'`tests/xnu_uuid_test.c + +tests/xnu_uuid_test_module-xnu_uuid_test.obj: tests/xnu_uuid_test.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_test_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_test_module_CFLAGS) $(CFLAGS) -MT tests/xnu_uuid_test_module-xnu_uuid_test.obj -MD -MP -MF tests/$(DEPDIR)/xnu_uuid_test_module-xnu_uuid_test.Tpo -c -o tests/xnu_uuid_test_module-xnu_uuid_test.obj `if test -f 'tests/xnu_uuid_test.c'; then $(CYGPATH_W) 'tests/xnu_uuid_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/xnu_uuid_test.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/xnu_uuid_test_module-xnu_uuid_test.Tpo tests/$(DEPDIR)/xnu_uuid_test_module-xnu_uuid_test.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/xnu_uuid_test.c' object='tests/xnu_uuid_test_module-xnu_uuid_test.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_test_module_CPPFLAGS) $(CPPFLAGS) $(xnu_uuid_test_module_CFLAGS) $(CFLAGS) -c -o tests/xnu_uuid_test_module-xnu_uuid_test.obj `if test -f 'tests/xnu_uuid_test.c'; then $(CYGPATH_W) 'tests/xnu_uuid_test.c'; else $(CYGPATH_W) '$(srcdir)/tests/xnu_uuid_test.c'; fi` + +boot/decompressor/xz_decompress_image-minilib.o: boot/decompressor/minilib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT boot/decompressor/xz_decompress_image-minilib.o -MD -MP -MF boot/decompressor/$(DEPDIR)/xz_decompress_image-minilib.Tpo -c -o boot/decompressor/xz_decompress_image-minilib.o `test -f 'boot/decompressor/minilib.c' || echo '$(srcdir)/'`boot/decompressor/minilib.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) boot/decompressor/$(DEPDIR)/xz_decompress_image-minilib.Tpo boot/decompressor/$(DEPDIR)/xz_decompress_image-minilib.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boot/decompressor/minilib.c' object='boot/decompressor/xz_decompress_image-minilib.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o boot/decompressor/xz_decompress_image-minilib.o `test -f 'boot/decompressor/minilib.c' || echo '$(srcdir)/'`boot/decompressor/minilib.c + +boot/decompressor/xz_decompress_image-minilib.obj: boot/decompressor/minilib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT boot/decompressor/xz_decompress_image-minilib.obj -MD -MP -MF boot/decompressor/$(DEPDIR)/xz_decompress_image-minilib.Tpo -c -o boot/decompressor/xz_decompress_image-minilib.obj `if test -f 'boot/decompressor/minilib.c'; then $(CYGPATH_W) 'boot/decompressor/minilib.c'; else $(CYGPATH_W) '$(srcdir)/boot/decompressor/minilib.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) boot/decompressor/$(DEPDIR)/xz_decompress_image-minilib.Tpo boot/decompressor/$(DEPDIR)/xz_decompress_image-minilib.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boot/decompressor/minilib.c' object='boot/decompressor/xz_decompress_image-minilib.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o boot/decompressor/xz_decompress_image-minilib.obj `if test -f 'boot/decompressor/minilib.c'; then $(CYGPATH_W) 'boot/decompressor/minilib.c'; else $(CYGPATH_W) '$(srcdir)/boot/decompressor/minilib.c'; fi` + +boot/decompressor/xz_decompress_image-xz.o: boot/decompressor/xz.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT boot/decompressor/xz_decompress_image-xz.o -MD -MP -MF boot/decompressor/$(DEPDIR)/xz_decompress_image-xz.Tpo -c -o boot/decompressor/xz_decompress_image-xz.o `test -f 'boot/decompressor/xz.c' || echo '$(srcdir)/'`boot/decompressor/xz.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) boot/decompressor/$(DEPDIR)/xz_decompress_image-xz.Tpo boot/decompressor/$(DEPDIR)/xz_decompress_image-xz.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boot/decompressor/xz.c' object='boot/decompressor/xz_decompress_image-xz.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o boot/decompressor/xz_decompress_image-xz.o `test -f 'boot/decompressor/xz.c' || echo '$(srcdir)/'`boot/decompressor/xz.c + +boot/decompressor/xz_decompress_image-xz.obj: boot/decompressor/xz.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT boot/decompressor/xz_decompress_image-xz.obj -MD -MP -MF boot/decompressor/$(DEPDIR)/xz_decompress_image-xz.Tpo -c -o boot/decompressor/xz_decompress_image-xz.obj `if test -f 'boot/decompressor/xz.c'; then $(CYGPATH_W) 'boot/decompressor/xz.c'; else $(CYGPATH_W) '$(srcdir)/boot/decompressor/xz.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) boot/decompressor/$(DEPDIR)/xz_decompress_image-xz.Tpo boot/decompressor/$(DEPDIR)/xz_decompress_image-xz.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boot/decompressor/xz.c' object='boot/decompressor/xz_decompress_image-xz.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o boot/decompressor/xz_decompress_image-xz.obj `if test -f 'boot/decompressor/xz.c'; then $(CYGPATH_W) 'boot/decompressor/xz.c'; else $(CYGPATH_W) '$(srcdir)/boot/decompressor/xz.c'; fi` + +lib/xzembed/xz_decompress_image-xz_dec_bcj.o: lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT lib/xzembed/xz_decompress_image-xz_dec_bcj.o -MD -MP -MF lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_bcj.Tpo -c -o lib/xzembed/xz_decompress_image-xz_dec_bcj.o `test -f 'lib/xzembed/xz_dec_bcj.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_bcj.Tpo lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_bcj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_bcj.c' object='lib/xzembed/xz_decompress_image-xz_dec_bcj.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xz_decompress_image-xz_dec_bcj.o `test -f 'lib/xzembed/xz_dec_bcj.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_bcj.c + +lib/xzembed/xz_decompress_image-xz_dec_bcj.obj: lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT lib/xzembed/xz_decompress_image-xz_dec_bcj.obj -MD -MP -MF lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_bcj.Tpo -c -o lib/xzembed/xz_decompress_image-xz_dec_bcj.obj `if test -f 'lib/xzembed/xz_dec_bcj.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_bcj.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_bcj.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_bcj.Tpo lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_bcj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_bcj.c' object='lib/xzembed/xz_decompress_image-xz_dec_bcj.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xz_decompress_image-xz_dec_bcj.obj `if test -f 'lib/xzembed/xz_dec_bcj.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_bcj.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_bcj.c'; fi` + +lib/xzembed/xz_decompress_image-xz_dec_lzma2.o: lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT lib/xzembed/xz_decompress_image-xz_dec_lzma2.o -MD -MP -MF lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_lzma2.Tpo -c -o lib/xzembed/xz_decompress_image-xz_dec_lzma2.o `test -f 'lib/xzembed/xz_dec_lzma2.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_lzma2.Tpo lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_lzma2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_lzma2.c' object='lib/xzembed/xz_decompress_image-xz_dec_lzma2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xz_decompress_image-xz_dec_lzma2.o `test -f 'lib/xzembed/xz_dec_lzma2.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_lzma2.c + +lib/xzembed/xz_decompress_image-xz_dec_lzma2.obj: lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT lib/xzembed/xz_decompress_image-xz_dec_lzma2.obj -MD -MP -MF lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_lzma2.Tpo -c -o lib/xzembed/xz_decompress_image-xz_dec_lzma2.obj `if test -f 'lib/xzembed/xz_dec_lzma2.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_lzma2.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_lzma2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_lzma2.Tpo lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_lzma2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_lzma2.c' object='lib/xzembed/xz_decompress_image-xz_dec_lzma2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xz_decompress_image-xz_dec_lzma2.obj `if test -f 'lib/xzembed/xz_dec_lzma2.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_lzma2.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_lzma2.c'; fi` + +lib/xzembed/xz_decompress_image-xz_dec_stream.o: lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT lib/xzembed/xz_decompress_image-xz_dec_stream.o -MD -MP -MF lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_stream.Tpo -c -o lib/xzembed/xz_decompress_image-xz_dec_stream.o `test -f 'lib/xzembed/xz_dec_stream.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_stream.Tpo lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_stream.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_stream.c' object='lib/xzembed/xz_decompress_image-xz_dec_stream.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xz_decompress_image-xz_dec_stream.o `test -f 'lib/xzembed/xz_dec_stream.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_stream.c + +lib/xzembed/xz_decompress_image-xz_dec_stream.obj: lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT lib/xzembed/xz_decompress_image-xz_dec_stream.obj -MD -MP -MF lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_stream.Tpo -c -o lib/xzembed/xz_decompress_image-xz_dec_stream.obj `if test -f 'lib/xzembed/xz_dec_stream.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_stream.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_stream.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_stream.Tpo lib/xzembed/$(DEPDIR)/xz_decompress_image-xz_dec_stream.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_stream.c' object='lib/xzembed/xz_decompress_image-xz_dec_stream.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xz_decompress_image-xz_dec_stream.obj `if test -f 'lib/xzembed/xz_dec_stream.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_stream.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_stream.c'; fi` + +kern/xz_decompress_image-compiler-rt.o: kern/compiler-rt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT kern/xz_decompress_image-compiler-rt.o -MD -MP -MF kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Tpo -c -o kern/xz_decompress_image-compiler-rt.o `test -f 'kern/compiler-rt.c' || echo '$(srcdir)/'`kern/compiler-rt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Tpo kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/compiler-rt.c' object='kern/xz_decompress_image-compiler-rt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o kern/xz_decompress_image-compiler-rt.o `test -f 'kern/compiler-rt.c' || echo '$(srcdir)/'`kern/compiler-rt.c + +kern/xz_decompress_image-compiler-rt.obj: kern/compiler-rt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -MT kern/xz_decompress_image-compiler-rt.obj -MD -MP -MF kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Tpo -c -o kern/xz_decompress_image-compiler-rt.obj `if test -f 'kern/compiler-rt.c'; then $(CYGPATH_W) 'kern/compiler-rt.c'; else $(CYGPATH_W) '$(srcdir)/kern/compiler-rt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Tpo kern/$(DEPDIR)/xz_decompress_image-compiler-rt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kern/compiler-rt.c' object='kern/xz_decompress_image-compiler-rt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xz_decompress_image_CPPFLAGS) $(CPPFLAGS) $(xz_decompress_image_CFLAGS) $(CFLAGS) -c -o kern/xz_decompress_image-compiler-rt.obj `if test -f 'kern/compiler-rt.c'; then $(CYGPATH_W) 'kern/compiler-rt.c'; else $(CYGPATH_W) '$(srcdir)/kern/compiler-rt.c'; fi` + +io/xzio_module-xzio.o: io/xzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT io/xzio_module-xzio.o -MD -MP -MF io/$(DEPDIR)/xzio_module-xzio.Tpo -c -o io/xzio_module-xzio.o `test -f 'io/xzio.c' || echo '$(srcdir)/'`io/xzio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/xzio_module-xzio.Tpo io/$(DEPDIR)/xzio_module-xzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/xzio.c' object='io/xzio_module-xzio.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o io/xzio_module-xzio.o `test -f 'io/xzio.c' || echo '$(srcdir)/'`io/xzio.c + +io/xzio_module-xzio.obj: io/xzio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT io/xzio_module-xzio.obj -MD -MP -MF io/$(DEPDIR)/xzio_module-xzio.Tpo -c -o io/xzio_module-xzio.obj `if test -f 'io/xzio.c'; then $(CYGPATH_W) 'io/xzio.c'; else $(CYGPATH_W) '$(srcdir)/io/xzio.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) io/$(DEPDIR)/xzio_module-xzio.Tpo io/$(DEPDIR)/xzio_module-xzio.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='io/xzio.c' object='io/xzio_module-xzio.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o io/xzio_module-xzio.obj `if test -f 'io/xzio.c'; then $(CYGPATH_W) 'io/xzio.c'; else $(CYGPATH_W) '$(srcdir)/io/xzio.c'; fi` + +lib/xzembed/xzio_module-xz_dec_bcj.o: lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT lib/xzembed/xzio_module-xz_dec_bcj.o -MD -MP -MF lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_bcj.Tpo -c -o lib/xzembed/xzio_module-xz_dec_bcj.o `test -f 'lib/xzembed/xz_dec_bcj.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_bcj.Tpo lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_bcj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_bcj.c' object='lib/xzembed/xzio_module-xz_dec_bcj.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xzio_module-xz_dec_bcj.o `test -f 'lib/xzembed/xz_dec_bcj.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_bcj.c + +lib/xzembed/xzio_module-xz_dec_bcj.obj: lib/xzembed/xz_dec_bcj.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT lib/xzembed/xzio_module-xz_dec_bcj.obj -MD -MP -MF lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_bcj.Tpo -c -o lib/xzembed/xzio_module-xz_dec_bcj.obj `if test -f 'lib/xzembed/xz_dec_bcj.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_bcj.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_bcj.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_bcj.Tpo lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_bcj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_bcj.c' object='lib/xzembed/xzio_module-xz_dec_bcj.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xzio_module-xz_dec_bcj.obj `if test -f 'lib/xzembed/xz_dec_bcj.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_bcj.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_bcj.c'; fi` + +lib/xzembed/xzio_module-xz_dec_lzma2.o: lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT lib/xzembed/xzio_module-xz_dec_lzma2.o -MD -MP -MF lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_lzma2.Tpo -c -o lib/xzembed/xzio_module-xz_dec_lzma2.o `test -f 'lib/xzembed/xz_dec_lzma2.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_lzma2.Tpo lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_lzma2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_lzma2.c' object='lib/xzembed/xzio_module-xz_dec_lzma2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xzio_module-xz_dec_lzma2.o `test -f 'lib/xzembed/xz_dec_lzma2.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_lzma2.c + +lib/xzembed/xzio_module-xz_dec_lzma2.obj: lib/xzembed/xz_dec_lzma2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT lib/xzembed/xzio_module-xz_dec_lzma2.obj -MD -MP -MF lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_lzma2.Tpo -c -o lib/xzembed/xzio_module-xz_dec_lzma2.obj `if test -f 'lib/xzembed/xz_dec_lzma2.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_lzma2.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_lzma2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_lzma2.Tpo lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_lzma2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_lzma2.c' object='lib/xzembed/xzio_module-xz_dec_lzma2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xzio_module-xz_dec_lzma2.obj `if test -f 'lib/xzembed/xz_dec_lzma2.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_lzma2.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_lzma2.c'; fi` + +lib/xzembed/xzio_module-xz_dec_stream.o: lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT lib/xzembed/xzio_module-xz_dec_stream.o -MD -MP -MF lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_stream.Tpo -c -o lib/xzembed/xzio_module-xz_dec_stream.o `test -f 'lib/xzembed/xz_dec_stream.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_stream.Tpo lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_stream.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_stream.c' object='lib/xzembed/xzio_module-xz_dec_stream.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xzio_module-xz_dec_stream.o `test -f 'lib/xzembed/xz_dec_stream.c' || echo '$(srcdir)/'`lib/xzembed/xz_dec_stream.c + +lib/xzembed/xzio_module-xz_dec_stream.obj: lib/xzembed/xz_dec_stream.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -MT lib/xzembed/xzio_module-xz_dec_stream.obj -MD -MP -MF lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_stream.Tpo -c -o lib/xzembed/xzio_module-xz_dec_stream.obj `if test -f 'lib/xzembed/xz_dec_stream.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_stream.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_stream.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_stream.Tpo lib/xzembed/$(DEPDIR)/xzio_module-xz_dec_stream.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/xzembed/xz_dec_stream.c' object='lib/xzembed/xzio_module-xz_dec_stream.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $(xzio_module_CFLAGS) $(CFLAGS) -c -o lib/xzembed/xzio_module-xz_dec_stream.obj `if test -f 'lib/xzembed/xz_dec_stream.c'; then $(CYGPATH_W) 'lib/xzembed/xz_dec_stream.c'; else $(CYGPATH_W) '$(srcdir)/lib/xzembed/xz_dec_stream.c'; fi` + +fs/zfs/zfs_module-zfs.o: fs/zfs/zfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs.o -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs.Tpo -c -o fs/zfs/zfs_module-zfs.o `test -f 'fs/zfs/zfs.c' || echo '$(srcdir)/'`fs/zfs/zfs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs.c' object='fs/zfs/zfs_module-zfs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs.o `test -f 'fs/zfs/zfs.c' || echo '$(srcdir)/'`fs/zfs/zfs.c + +fs/zfs/zfs_module-zfs.obj: fs/zfs/zfs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs.obj -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs.Tpo -c -o fs/zfs/zfs_module-zfs.obj `if test -f 'fs/zfs/zfs.c'; then $(CYGPATH_W) 'fs/zfs/zfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs.c' object='fs/zfs/zfs_module-zfs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs.obj `if test -f 'fs/zfs/zfs.c'; then $(CYGPATH_W) 'fs/zfs/zfs.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs.c'; fi` + +fs/zfs/zfs_module-zfs_lzjb.o: fs/zfs/zfs_lzjb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_lzjb.o -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_lzjb.Tpo -c -o fs/zfs/zfs_module-zfs_lzjb.o `test -f 'fs/zfs/zfs_lzjb.c' || echo '$(srcdir)/'`fs/zfs/zfs_lzjb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_lzjb.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_lzjb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_lzjb.c' object='fs/zfs/zfs_module-zfs_lzjb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_lzjb.o `test -f 'fs/zfs/zfs_lzjb.c' || echo '$(srcdir)/'`fs/zfs/zfs_lzjb.c + +fs/zfs/zfs_module-zfs_lzjb.obj: fs/zfs/zfs_lzjb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_lzjb.obj -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_lzjb.Tpo -c -o fs/zfs/zfs_module-zfs_lzjb.obj `if test -f 'fs/zfs/zfs_lzjb.c'; then $(CYGPATH_W) 'fs/zfs/zfs_lzjb.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_lzjb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_lzjb.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_lzjb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_lzjb.c' object='fs/zfs/zfs_module-zfs_lzjb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_lzjb.obj `if test -f 'fs/zfs/zfs_lzjb.c'; then $(CYGPATH_W) 'fs/zfs/zfs_lzjb.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_lzjb.c'; fi` + +fs/zfs/zfs_module-zfs_lz4.o: fs/zfs/zfs_lz4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_lz4.o -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_lz4.Tpo -c -o fs/zfs/zfs_module-zfs_lz4.o `test -f 'fs/zfs/zfs_lz4.c' || echo '$(srcdir)/'`fs/zfs/zfs_lz4.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_lz4.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_lz4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_lz4.c' object='fs/zfs/zfs_module-zfs_lz4.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_lz4.o `test -f 'fs/zfs/zfs_lz4.c' || echo '$(srcdir)/'`fs/zfs/zfs_lz4.c + +fs/zfs/zfs_module-zfs_lz4.obj: fs/zfs/zfs_lz4.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_lz4.obj -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_lz4.Tpo -c -o fs/zfs/zfs_module-zfs_lz4.obj `if test -f 'fs/zfs/zfs_lz4.c'; then $(CYGPATH_W) 'fs/zfs/zfs_lz4.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_lz4.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_lz4.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_lz4.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_lz4.c' object='fs/zfs/zfs_module-zfs_lz4.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_lz4.obj `if test -f 'fs/zfs/zfs_lz4.c'; then $(CYGPATH_W) 'fs/zfs/zfs_lz4.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_lz4.c'; fi` + +fs/zfs/zfs_module-zfs_sha256.o: fs/zfs/zfs_sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_sha256.o -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_sha256.Tpo -c -o fs/zfs/zfs_module-zfs_sha256.o `test -f 'fs/zfs/zfs_sha256.c' || echo '$(srcdir)/'`fs/zfs/zfs_sha256.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_sha256.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_sha256.c' object='fs/zfs/zfs_module-zfs_sha256.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_sha256.o `test -f 'fs/zfs/zfs_sha256.c' || echo '$(srcdir)/'`fs/zfs/zfs_sha256.c + +fs/zfs/zfs_module-zfs_sha256.obj: fs/zfs/zfs_sha256.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_sha256.obj -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_sha256.Tpo -c -o fs/zfs/zfs_module-zfs_sha256.obj `if test -f 'fs/zfs/zfs_sha256.c'; then $(CYGPATH_W) 'fs/zfs/zfs_sha256.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_sha256.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_sha256.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_sha256.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_sha256.c' object='fs/zfs/zfs_module-zfs_sha256.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_sha256.obj `if test -f 'fs/zfs/zfs_sha256.c'; then $(CYGPATH_W) 'fs/zfs/zfs_sha256.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_sha256.c'; fi` + +fs/zfs/zfs_module-zfs_fletcher.o: fs/zfs/zfs_fletcher.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_fletcher.o -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_fletcher.Tpo -c -o fs/zfs/zfs_module-zfs_fletcher.o `test -f 'fs/zfs/zfs_fletcher.c' || echo '$(srcdir)/'`fs/zfs/zfs_fletcher.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_fletcher.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_fletcher.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_fletcher.c' object='fs/zfs/zfs_module-zfs_fletcher.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_fletcher.o `test -f 'fs/zfs/zfs_fletcher.c' || echo '$(srcdir)/'`fs/zfs/zfs_fletcher.c + +fs/zfs/zfs_module-zfs_fletcher.obj: fs/zfs/zfs_fletcher.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfs_module-zfs_fletcher.obj -MD -MP -MF fs/zfs/$(DEPDIR)/zfs_module-zfs_fletcher.Tpo -c -o fs/zfs/zfs_module-zfs_fletcher.obj `if test -f 'fs/zfs/zfs_fletcher.c'; then $(CYGPATH_W) 'fs/zfs/zfs_fletcher.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_fletcher.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfs_module-zfs_fletcher.Tpo fs/zfs/$(DEPDIR)/zfs_module-zfs_fletcher.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfs_fletcher.c' object='fs/zfs/zfs_module-zfs_fletcher.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $(zfs_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfs_module-zfs_fletcher.obj `if test -f 'fs/zfs/zfs_fletcher.c'; then $(CYGPATH_W) 'fs/zfs/zfs_fletcher.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfs_fletcher.c'; fi` + +fs/zfs/zfscrypt_module-zfscrypt.o: fs/zfs/zfscrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfscrypt_module_CPPFLAGS) $(CPPFLAGS) $(zfscrypt_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfscrypt_module-zfscrypt.o -MD -MP -MF fs/zfs/$(DEPDIR)/zfscrypt_module-zfscrypt.Tpo -c -o fs/zfs/zfscrypt_module-zfscrypt.o `test -f 'fs/zfs/zfscrypt.c' || echo '$(srcdir)/'`fs/zfs/zfscrypt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfscrypt_module-zfscrypt.Tpo fs/zfs/$(DEPDIR)/zfscrypt_module-zfscrypt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfscrypt.c' object='fs/zfs/zfscrypt_module-zfscrypt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfscrypt_module_CPPFLAGS) $(CPPFLAGS) $(zfscrypt_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfscrypt_module-zfscrypt.o `test -f 'fs/zfs/zfscrypt.c' || echo '$(srcdir)/'`fs/zfs/zfscrypt.c + +fs/zfs/zfscrypt_module-zfscrypt.obj: fs/zfs/zfscrypt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfscrypt_module_CPPFLAGS) $(CPPFLAGS) $(zfscrypt_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfscrypt_module-zfscrypt.obj -MD -MP -MF fs/zfs/$(DEPDIR)/zfscrypt_module-zfscrypt.Tpo -c -o fs/zfs/zfscrypt_module-zfscrypt.obj `if test -f 'fs/zfs/zfscrypt.c'; then $(CYGPATH_W) 'fs/zfs/zfscrypt.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfscrypt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfscrypt_module-zfscrypt.Tpo fs/zfs/$(DEPDIR)/zfscrypt_module-zfscrypt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfscrypt.c' object='fs/zfs/zfscrypt_module-zfscrypt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfscrypt_module_CPPFLAGS) $(CPPFLAGS) $(zfscrypt_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfscrypt_module-zfscrypt.obj `if test -f 'fs/zfs/zfscrypt.c'; then $(CYGPATH_W) 'fs/zfs/zfscrypt.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfscrypt.c'; fi` + +fs/zfs/zfsinfo_module-zfsinfo.o: fs/zfs/zfsinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfsinfo_module_CPPFLAGS) $(CPPFLAGS) $(zfsinfo_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfsinfo_module-zfsinfo.o -MD -MP -MF fs/zfs/$(DEPDIR)/zfsinfo_module-zfsinfo.Tpo -c -o fs/zfs/zfsinfo_module-zfsinfo.o `test -f 'fs/zfs/zfsinfo.c' || echo '$(srcdir)/'`fs/zfs/zfsinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfsinfo_module-zfsinfo.Tpo fs/zfs/$(DEPDIR)/zfsinfo_module-zfsinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfsinfo.c' object='fs/zfs/zfsinfo_module-zfsinfo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfsinfo_module_CPPFLAGS) $(CPPFLAGS) $(zfsinfo_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfsinfo_module-zfsinfo.o `test -f 'fs/zfs/zfsinfo.c' || echo '$(srcdir)/'`fs/zfs/zfsinfo.c + +fs/zfs/zfsinfo_module-zfsinfo.obj: fs/zfs/zfsinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfsinfo_module_CPPFLAGS) $(CPPFLAGS) $(zfsinfo_module_CFLAGS) $(CFLAGS) -MT fs/zfs/zfsinfo_module-zfsinfo.obj -MD -MP -MF fs/zfs/$(DEPDIR)/zfsinfo_module-zfsinfo.Tpo -c -o fs/zfs/zfsinfo_module-zfsinfo.obj `if test -f 'fs/zfs/zfsinfo.c'; then $(CYGPATH_W) 'fs/zfs/zfsinfo.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfsinfo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) fs/zfs/$(DEPDIR)/zfsinfo_module-zfsinfo.Tpo fs/zfs/$(DEPDIR)/zfsinfo_module-zfsinfo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fs/zfs/zfsinfo.c' object='fs/zfs/zfsinfo_module-zfsinfo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfsinfo_module_CPPFLAGS) $(CPPFLAGS) $(zfsinfo_module_CFLAGS) $(CFLAGS) -c -o fs/zfs/zfsinfo_module-zfsinfo.obj `if test -f 'fs/zfs/zfsinfo.c'; then $(CYGPATH_W) 'fs/zfs/zfsinfo.c'; else $(CYGPATH_W) '$(srcdir)/fs/zfs/zfsinfo.c'; fi` +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +install-dist_grubconfDATA: $(dist_grubconf_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_grubconf_DATA)'; test -n "$(grubconfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(grubconfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(grubconfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(grubconfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(grubconfdir)" || exit $$?; \ + done + +uninstall-dist_grubconfDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_grubconf_DATA)'; test -n "$(grubconfdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(grubconfdir)'; $(am__uninstall_files_from_dir) +install-pkgdataDATA: $(pkgdata_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ + done + +uninstall-pkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) +install-platformDATA: $(platform_DATA) + @$(NORMAL_INSTALL) + @list='$(platform_DATA)'; test -n "$(platformdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(platformdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(platformdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(platformdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(platformdir)" || exit $$?; \ + done + +uninstall-platformDATA: + @$(NORMAL_UNINSTALL) + @list='$(platform_DATA)'; test -n "$(platformdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(platformdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all $(check_PROGRAMS) $(check_SCRIPTS) + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(platformdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(grubconfdir)" "$(DESTDIR)$(platformdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(grubconfdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(platformdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f boot/decompressor/$(DEPDIR)/$(am__dirstamp) + -rm -f boot/decompressor/$(am__dirstamp) + -rm -f boot/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f boot/i386/pc/$(am__dirstamp) + -rm -f boot/i386/qemu/$(DEPDIR)/$(am__dirstamp) + -rm -f boot/i386/qemu/$(am__dirstamp) + -rm -f boot/mips/$(DEPDIR)/$(am__dirstamp) + -rm -f boot/mips/$(am__dirstamp) + -rm -f boot/mips/loongson/$(DEPDIR)/$(am__dirstamp) + -rm -f boot/mips/loongson/$(am__dirstamp) + -rm -f boot/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f boot/sparc64/ieee1275/$(am__dirstamp) + -rm -f bus/$(DEPDIR)/$(am__dirstamp) + -rm -f bus/$(am__dirstamp) + -rm -f bus/emu/$(DEPDIR)/$(am__dirstamp) + -rm -f bus/emu/$(am__dirstamp) + -rm -f bus/i386/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f bus/i386/ieee1275/$(am__dirstamp) + -rm -f bus/usb/$(DEPDIR)/$(am__dirstamp) + -rm -f bus/usb/$(am__dirstamp) + -rm -f bus/usb/serial/$(DEPDIR)/$(am__dirstamp) + -rm -f bus/usb/serial/$(am__dirstamp) + -rm -f commands/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/$(am__dirstamp) + -rm -f commands/arc/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/arc/$(am__dirstamp) + -rm -f commands/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/efi/$(am__dirstamp) + -rm -f commands/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/i386/$(am__dirstamp) + -rm -f commands/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/i386/coreboot/$(am__dirstamp) + -rm -f commands/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/i386/pc/$(am__dirstamp) + -rm -f commands/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/ieee1275/$(am__dirstamp) + -rm -f commands/mips/loongson/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/mips/loongson/$(am__dirstamp) + -rm -f commands/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f commands/xen/$(am__dirstamp) + -rm -f disk/$(DEPDIR)/$(am__dirstamp) + -rm -f disk/$(am__dirstamp) + -rm -f disk/arc/$(DEPDIR)/$(am__dirstamp) + -rm -f disk/arc/$(am__dirstamp) + -rm -f disk/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f disk/efi/$(am__dirstamp) + -rm -f disk/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f disk/i386/pc/$(am__dirstamp) + -rm -f disk/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f disk/ieee1275/$(am__dirstamp) + -rm -f disk/uboot/$(DEPDIR)/$(am__dirstamp) + -rm -f disk/uboot/$(am__dirstamp) + -rm -f disk/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f disk/xen/$(am__dirstamp) + -rm -f efiemu/$(DEPDIR)/$(am__dirstamp) + -rm -f efiemu/$(am__dirstamp) + -rm -f efiemu/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f efiemu/i386/$(am__dirstamp) + -rm -f efiemu/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f efiemu/i386/pc/$(am__dirstamp) + -rm -f font/$(DEPDIR)/$(am__dirstamp) + -rm -f font/$(am__dirstamp) + -rm -f fs/$(DEPDIR)/$(am__dirstamp) + -rm -f fs/$(am__dirstamp) + -rm -f fs/zfs/$(DEPDIR)/$(am__dirstamp) + -rm -f fs/zfs/$(am__dirstamp) + -rm -f gdb/$(DEPDIR)/$(am__dirstamp) + -rm -f gdb/$(am__dirstamp) + -rm -f gdb/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f gdb/i386/$(am__dirstamp) + -rm -f gettext/$(DEPDIR)/$(am__dirstamp) + -rm -f gettext/$(am__dirstamp) + -rm -f gfxmenu/$(DEPDIR)/$(am__dirstamp) + -rm -f gfxmenu/$(am__dirstamp) + -rm -f gnulib/$(DEPDIR)/$(am__dirstamp) + -rm -f gnulib/$(am__dirstamp) + -rm -f hello/$(DEPDIR)/$(am__dirstamp) + -rm -f hello/$(am__dirstamp) + -rm -f hook/$(DEPDIR)/$(am__dirstamp) + -rm -f hook/$(am__dirstamp) + -rm -f io/$(DEPDIR)/$(am__dirstamp) + -rm -f io/$(am__dirstamp) + -rm -f kern/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/$(am__dirstamp) + -rm -f kern/arm/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/arm/$(am__dirstamp) + -rm -f kern/arm/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/arm/efi/$(am__dirstamp) + -rm -f kern/arm/uboot/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/arm/uboot/$(am__dirstamp) + -rm -f kern/arm64/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/arm64/$(am__dirstamp) + -rm -f kern/arm64/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/arm64/efi/$(am__dirstamp) + -rm -f kern/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/efi/$(am__dirstamp) + -rm -f kern/emu/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/emu/$(am__dirstamp) + -rm -f kern/generic/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/generic/$(am__dirstamp) + -rm -f kern/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/i386/$(am__dirstamp) + -rm -f kern/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/i386/coreboot/$(am__dirstamp) + -rm -f kern/i386/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/i386/efi/$(am__dirstamp) + -rm -f kern/i386/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/i386/ieee1275/$(am__dirstamp) + -rm -f kern/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/i386/pc/$(am__dirstamp) + -rm -f kern/i386/qemu/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/i386/qemu/$(am__dirstamp) + -rm -f kern/i386/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/i386/xen/$(am__dirstamp) + -rm -f kern/ia64/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/ia64/$(am__dirstamp) + -rm -f kern/ia64/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/ia64/efi/$(am__dirstamp) + -rm -f kern/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/ieee1275/$(am__dirstamp) + -rm -f kern/mips/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/mips/$(am__dirstamp) + -rm -f kern/mips/arc/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/mips/arc/$(am__dirstamp) + -rm -f kern/mips/loongson/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/mips/loongson/$(am__dirstamp) + -rm -f kern/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/mips/qemu_mips/$(am__dirstamp) + -rm -f kern/powerpc/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/powerpc/$(am__dirstamp) + -rm -f kern/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/powerpc/ieee1275/$(am__dirstamp) + -rm -f kern/sparc64/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/sparc64/$(am__dirstamp) + -rm -f kern/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/sparc64/ieee1275/$(am__dirstamp) + -rm -f kern/uboot/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/uboot/$(am__dirstamp) + -rm -f kern/x86_64/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/x86_64/$(am__dirstamp) + -rm -f kern/x86_64/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/x86_64/efi/$(am__dirstamp) + -rm -f kern/x86_64/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/x86_64/xen/$(am__dirstamp) + -rm -f kern/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f kern/xen/$(am__dirstamp) + -rm -f lib/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/$(am__dirstamp) + -rm -f lib/arc/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/arc/$(am__dirstamp) + -rm -f lib/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/efi/$(am__dirstamp) + -rm -f lib/emu/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/emu/$(am__dirstamp) + -rm -f lib/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/i386/$(am__dirstamp) + -rm -f lib/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/i386/pc/$(am__dirstamp) + -rm -f lib/i386/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/i386/xen/$(am__dirstamp) + -rm -f lib/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/ieee1275/$(am__dirstamp) + -rm -f lib/libgcrypt-grub/cipher/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/libgcrypt-grub/cipher/$(am__dirstamp) + -rm -f lib/libgcrypt-grub/mpi/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/libgcrypt-grub/mpi/$(am__dirstamp) + -rm -f lib/libgcrypt_wrap/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/libgcrypt_wrap/$(am__dirstamp) + -rm -f lib/minilzo/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/minilzo/$(am__dirstamp) + -rm -f lib/mips/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/mips/$(am__dirstamp) + -rm -f lib/mips/arc/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/mips/arc/$(am__dirstamp) + -rm -f lib/mips/loongson/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/mips/loongson/$(am__dirstamp) + -rm -f lib/mips/qemu_mips/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/mips/qemu_mips/$(am__dirstamp) + -rm -f lib/powerpc/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/powerpc/$(am__dirstamp) + -rm -f lib/uboot/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/uboot/$(am__dirstamp) + -rm -f lib/x86_64/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/x86_64/$(am__dirstamp) + -rm -f lib/x86_64/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/x86_64/efi/$(am__dirstamp) + -rm -f lib/x86_64/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/x86_64/xen/$(am__dirstamp) + -rm -f lib/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/xen/$(am__dirstamp) + -rm -f lib/xzembed/$(DEPDIR)/$(am__dirstamp) + -rm -f lib/xzembed/$(am__dirstamp) + -rm -f loader/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/$(am__dirstamp) + -rm -f loader/arm/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/arm/$(am__dirstamp) + -rm -f loader/arm64/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/arm64/$(am__dirstamp) + -rm -f loader/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/efi/$(am__dirstamp) + -rm -f loader/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/i386/$(am__dirstamp) + -rm -f loader/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/i386/coreboot/$(am__dirstamp) + -rm -f loader/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/i386/pc/$(am__dirstamp) + -rm -f loader/ia64/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/ia64/efi/$(am__dirstamp) + -rm -f loader/mips/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/mips/$(am__dirstamp) + -rm -f loader/powerpc/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/powerpc/ieee1275/$(am__dirstamp) + -rm -f loader/sparc64/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f loader/sparc64/ieee1275/$(am__dirstamp) + -rm -f mmap/$(DEPDIR)/$(am__dirstamp) + -rm -f mmap/$(am__dirstamp) + -rm -f mmap/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f mmap/efi/$(am__dirstamp) + -rm -f mmap/i386/$(DEPDIR)/$(am__dirstamp) + -rm -f mmap/i386/$(am__dirstamp) + -rm -f mmap/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f mmap/i386/pc/$(am__dirstamp) + -rm -f mmap/mips/$(DEPDIR)/$(am__dirstamp) + -rm -f mmap/mips/$(am__dirstamp) + -rm -f net/$(DEPDIR)/$(am__dirstamp) + -rm -f net/$(am__dirstamp) + -rm -f net/drivers/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f net/drivers/efi/$(am__dirstamp) + -rm -f net/drivers/emu/$(DEPDIR)/$(am__dirstamp) + -rm -f net/drivers/emu/$(am__dirstamp) + -rm -f net/drivers/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f net/drivers/i386/pc/$(am__dirstamp) + -rm -f net/drivers/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f net/drivers/ieee1275/$(am__dirstamp) + -rm -f net/drivers/uboot/$(DEPDIR)/$(am__dirstamp) + -rm -f net/drivers/uboot/$(am__dirstamp) + -rm -f normal/$(DEPDIR)/$(am__dirstamp) + -rm -f normal/$(am__dirstamp) + -rm -f osdep/$(DEPDIR)/$(am__dirstamp) + -rm -f osdep/$(am__dirstamp) + -rm -f osdep/devmapper/$(DEPDIR)/$(am__dirstamp) + -rm -f osdep/devmapper/$(am__dirstamp) + -rm -f osdep/unix/$(DEPDIR)/$(am__dirstamp) + -rm -f osdep/unix/$(am__dirstamp) + -rm -f partmap/$(DEPDIR)/$(am__dirstamp) + -rm -f partmap/$(am__dirstamp) + -rm -f parttool/$(DEPDIR)/$(am__dirstamp) + -rm -f parttool/$(am__dirstamp) + -rm -f script/$(DEPDIR)/$(am__dirstamp) + -rm -f script/$(am__dirstamp) + -rm -f term/$(DEPDIR)/$(am__dirstamp) + -rm -f term/$(am__dirstamp) + -rm -f term/arc/$(DEPDIR)/$(am__dirstamp) + -rm -f term/arc/$(am__dirstamp) + -rm -f term/efi/$(DEPDIR)/$(am__dirstamp) + -rm -f term/efi/$(am__dirstamp) + -rm -f term/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + -rm -f term/i386/coreboot/$(am__dirstamp) + -rm -f term/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f term/i386/pc/$(am__dirstamp) + -rm -f term/ieee1275/$(DEPDIR)/$(am__dirstamp) + -rm -f term/ieee1275/$(am__dirstamp) + -rm -f term/uboot/$(DEPDIR)/$(am__dirstamp) + -rm -f term/uboot/$(am__dirstamp) + -rm -f term/xen/$(DEPDIR)/$(am__dirstamp) + -rm -f term/xen/$(am__dirstamp) + -rm -f tests/$(DEPDIR)/$(am__dirstamp) + -rm -f tests/$(am__dirstamp) + -rm -f tests/lib/$(DEPDIR)/$(am__dirstamp) + -rm -f tests/lib/$(am__dirstamp) + -rm -f video/$(DEPDIR)/$(am__dirstamp) + -rm -f video/$(am__dirstamp) + -rm -f video/emu/$(DEPDIR)/$(am__dirstamp) + -rm -f video/emu/$(am__dirstamp) + -rm -f video/fb/$(DEPDIR)/$(am__dirstamp) + -rm -f video/fb/$(am__dirstamp) + -rm -f video/i386/coreboot/$(DEPDIR)/$(am__dirstamp) + -rm -f video/i386/coreboot/$(am__dirstamp) + -rm -f video/i386/pc/$(DEPDIR)/$(am__dirstamp) + -rm -f video/i386/pc/$(am__dirstamp) + -rm -f video/readers/$(DEPDIR)/$(am__dirstamp) + -rm -f video/readers/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-noinstLIBRARIES clean-noinstPROGRAMS \ + clean-platformPROGRAMS clean-sbinPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) boot/decompressor/$(DEPDIR) boot/i386/pc/$(DEPDIR) boot/i386/qemu/$(DEPDIR) boot/mips/$(DEPDIR) boot/mips/loongson/$(DEPDIR) boot/sparc64/ieee1275/$(DEPDIR) bus/$(DEPDIR) bus/emu/$(DEPDIR) bus/i386/ieee1275/$(DEPDIR) bus/usb/$(DEPDIR) bus/usb/serial/$(DEPDIR) commands/$(DEPDIR) commands/arc/$(DEPDIR) commands/efi/$(DEPDIR) commands/i386/$(DEPDIR) commands/i386/coreboot/$(DEPDIR) commands/i386/pc/$(DEPDIR) commands/ieee1275/$(DEPDIR) commands/mips/loongson/$(DEPDIR) commands/xen/$(DEPDIR) disk/$(DEPDIR) disk/arc/$(DEPDIR) disk/efi/$(DEPDIR) disk/i386/pc/$(DEPDIR) disk/ieee1275/$(DEPDIR) disk/uboot/$(DEPDIR) disk/xen/$(DEPDIR) efiemu/$(DEPDIR) efiemu/i386/$(DEPDIR) efiemu/i386/pc/$(DEPDIR) font/$(DEPDIR) fs/$(DEPDIR) fs/zfs/$(DEPDIR) gdb/$(DEPDIR) gdb/i386/$(DEPDIR) gettext/$(DEPDIR) gfxmenu/$(DEPDIR) gnulib/$(DEPDIR) hello/$(DEPDIR) hook/$(DEPDIR) io/$(DEPDIR) kern/$(DEPDIR) kern/arm/$(DEPDIR) kern/arm/efi/$(DEPDIR) kern/arm/uboot/$(DEPDIR) kern/arm64/$(DEPDIR) kern/arm64/efi/$(DEPDIR) kern/efi/$(DEPDIR) kern/emu/$(DEPDIR) kern/generic/$(DEPDIR) kern/i386/$(DEPDIR) kern/i386/coreboot/$(DEPDIR) kern/i386/efi/$(DEPDIR) kern/i386/ieee1275/$(DEPDIR) kern/i386/pc/$(DEPDIR) kern/i386/qemu/$(DEPDIR) kern/i386/xen/$(DEPDIR) kern/ia64/$(DEPDIR) kern/ia64/efi/$(DEPDIR) kern/ieee1275/$(DEPDIR) kern/mips/$(DEPDIR) kern/mips/arc/$(DEPDIR) kern/mips/loongson/$(DEPDIR) kern/mips/qemu_mips/$(DEPDIR) kern/powerpc/$(DEPDIR) kern/powerpc/ieee1275/$(DEPDIR) kern/sparc64/$(DEPDIR) kern/sparc64/ieee1275/$(DEPDIR) kern/uboot/$(DEPDIR) kern/x86_64/$(DEPDIR) kern/x86_64/efi/$(DEPDIR) kern/x86_64/xen/$(DEPDIR) kern/xen/$(DEPDIR) lib/$(DEPDIR) lib/arc/$(DEPDIR) lib/efi/$(DEPDIR) lib/emu/$(DEPDIR) lib/i386/$(DEPDIR) lib/i386/pc/$(DEPDIR) lib/i386/xen/$(DEPDIR) lib/ieee1275/$(DEPDIR) lib/libgcrypt-grub/cipher/$(DEPDIR) lib/libgcrypt-grub/mpi/$(DEPDIR) lib/libgcrypt_wrap/$(DEPDIR) lib/minilzo/$(DEPDIR) lib/mips/$(DEPDIR) lib/mips/arc/$(DEPDIR) lib/mips/loongson/$(DEPDIR) lib/mips/qemu_mips/$(DEPDIR) lib/powerpc/$(DEPDIR) lib/uboot/$(DEPDIR) lib/x86_64/$(DEPDIR) lib/x86_64/efi/$(DEPDIR) lib/x86_64/xen/$(DEPDIR) lib/xen/$(DEPDIR) lib/xzembed/$(DEPDIR) loader/$(DEPDIR) loader/arm/$(DEPDIR) loader/arm64/$(DEPDIR) loader/efi/$(DEPDIR) loader/i386/$(DEPDIR) loader/i386/coreboot/$(DEPDIR) loader/i386/pc/$(DEPDIR) loader/ia64/efi/$(DEPDIR) loader/mips/$(DEPDIR) loader/powerpc/ieee1275/$(DEPDIR) loader/sparc64/ieee1275/$(DEPDIR) mmap/$(DEPDIR) mmap/efi/$(DEPDIR) mmap/i386/$(DEPDIR) mmap/i386/pc/$(DEPDIR) mmap/mips/$(DEPDIR) net/$(DEPDIR) net/drivers/efi/$(DEPDIR) net/drivers/emu/$(DEPDIR) net/drivers/i386/pc/$(DEPDIR) net/drivers/ieee1275/$(DEPDIR) net/drivers/uboot/$(DEPDIR) normal/$(DEPDIR) osdep/$(DEPDIR) osdep/devmapper/$(DEPDIR) osdep/unix/$(DEPDIR) partmap/$(DEPDIR) parttool/$(DEPDIR) script/$(DEPDIR) term/$(DEPDIR) term/arc/$(DEPDIR) term/efi/$(DEPDIR) term/i386/coreboot/$(DEPDIR) term/i386/pc/$(DEPDIR) term/ieee1275/$(DEPDIR) term/uboot/$(DEPDIR) term/xen/$(DEPDIR) tests/$(DEPDIR) tests/lib/$(DEPDIR) video/$(DEPDIR) video/emu/$(DEPDIR) video/fb/$(DEPDIR) video/i386/coreboot/$(DEPDIR) video/i386/pc/$(DEPDIR) video/readers/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_grubconfDATA install-grubconfSCRIPTS \ + install-man install-pkgdataDATA install-platformDATA \ + install-platformPROGRAMS install-platformSCRIPTS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-binSCRIPTS \ + install-sbinPROGRAMS install-sbinSCRIPTS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) boot/decompressor/$(DEPDIR) boot/i386/pc/$(DEPDIR) boot/i386/qemu/$(DEPDIR) boot/mips/$(DEPDIR) boot/mips/loongson/$(DEPDIR) boot/sparc64/ieee1275/$(DEPDIR) bus/$(DEPDIR) bus/emu/$(DEPDIR) bus/i386/ieee1275/$(DEPDIR) bus/usb/$(DEPDIR) bus/usb/serial/$(DEPDIR) commands/$(DEPDIR) commands/arc/$(DEPDIR) commands/efi/$(DEPDIR) commands/i386/$(DEPDIR) commands/i386/coreboot/$(DEPDIR) commands/i386/pc/$(DEPDIR) commands/ieee1275/$(DEPDIR) commands/mips/loongson/$(DEPDIR) commands/xen/$(DEPDIR) disk/$(DEPDIR) disk/arc/$(DEPDIR) disk/efi/$(DEPDIR) disk/i386/pc/$(DEPDIR) disk/ieee1275/$(DEPDIR) disk/uboot/$(DEPDIR) disk/xen/$(DEPDIR) efiemu/$(DEPDIR) efiemu/i386/$(DEPDIR) efiemu/i386/pc/$(DEPDIR) font/$(DEPDIR) fs/$(DEPDIR) fs/zfs/$(DEPDIR) gdb/$(DEPDIR) gdb/i386/$(DEPDIR) gettext/$(DEPDIR) gfxmenu/$(DEPDIR) gnulib/$(DEPDIR) hello/$(DEPDIR) hook/$(DEPDIR) io/$(DEPDIR) kern/$(DEPDIR) kern/arm/$(DEPDIR) kern/arm/efi/$(DEPDIR) kern/arm/uboot/$(DEPDIR) kern/arm64/$(DEPDIR) kern/arm64/efi/$(DEPDIR) kern/efi/$(DEPDIR) kern/emu/$(DEPDIR) kern/generic/$(DEPDIR) kern/i386/$(DEPDIR) kern/i386/coreboot/$(DEPDIR) kern/i386/efi/$(DEPDIR) kern/i386/ieee1275/$(DEPDIR) kern/i386/pc/$(DEPDIR) kern/i386/qemu/$(DEPDIR) kern/i386/xen/$(DEPDIR) kern/ia64/$(DEPDIR) kern/ia64/efi/$(DEPDIR) kern/ieee1275/$(DEPDIR) kern/mips/$(DEPDIR) kern/mips/arc/$(DEPDIR) kern/mips/loongson/$(DEPDIR) kern/mips/qemu_mips/$(DEPDIR) kern/powerpc/$(DEPDIR) kern/powerpc/ieee1275/$(DEPDIR) kern/sparc64/$(DEPDIR) kern/sparc64/ieee1275/$(DEPDIR) kern/uboot/$(DEPDIR) kern/x86_64/$(DEPDIR) kern/x86_64/efi/$(DEPDIR) kern/x86_64/xen/$(DEPDIR) kern/xen/$(DEPDIR) lib/$(DEPDIR) lib/arc/$(DEPDIR) lib/efi/$(DEPDIR) lib/emu/$(DEPDIR) lib/i386/$(DEPDIR) lib/i386/pc/$(DEPDIR) lib/i386/xen/$(DEPDIR) lib/ieee1275/$(DEPDIR) lib/libgcrypt-grub/cipher/$(DEPDIR) lib/libgcrypt-grub/mpi/$(DEPDIR) lib/libgcrypt_wrap/$(DEPDIR) lib/minilzo/$(DEPDIR) lib/mips/$(DEPDIR) lib/mips/arc/$(DEPDIR) lib/mips/loongson/$(DEPDIR) lib/mips/qemu_mips/$(DEPDIR) lib/powerpc/$(DEPDIR) lib/uboot/$(DEPDIR) lib/x86_64/$(DEPDIR) lib/x86_64/efi/$(DEPDIR) lib/x86_64/xen/$(DEPDIR) lib/xen/$(DEPDIR) lib/xzembed/$(DEPDIR) loader/$(DEPDIR) loader/arm/$(DEPDIR) loader/arm64/$(DEPDIR) loader/efi/$(DEPDIR) loader/i386/$(DEPDIR) loader/i386/coreboot/$(DEPDIR) loader/i386/pc/$(DEPDIR) loader/ia64/efi/$(DEPDIR) loader/mips/$(DEPDIR) loader/powerpc/ieee1275/$(DEPDIR) loader/sparc64/ieee1275/$(DEPDIR) mmap/$(DEPDIR) mmap/efi/$(DEPDIR) mmap/i386/$(DEPDIR) mmap/i386/pc/$(DEPDIR) mmap/mips/$(DEPDIR) net/$(DEPDIR) net/drivers/efi/$(DEPDIR) net/drivers/emu/$(DEPDIR) net/drivers/i386/pc/$(DEPDIR) net/drivers/ieee1275/$(DEPDIR) net/drivers/uboot/$(DEPDIR) normal/$(DEPDIR) osdep/$(DEPDIR) osdep/devmapper/$(DEPDIR) osdep/unix/$(DEPDIR) partmap/$(DEPDIR) parttool/$(DEPDIR) script/$(DEPDIR) term/$(DEPDIR) term/arc/$(DEPDIR) term/efi/$(DEPDIR) term/i386/coreboot/$(DEPDIR) term/i386/pc/$(DEPDIR) term/ieee1275/$(DEPDIR) term/uboot/$(DEPDIR) term/xen/$(DEPDIR) tests/$(DEPDIR) tests/lib/$(DEPDIR) video/$(DEPDIR) video/emu/$(DEPDIR) video/fb/$(DEPDIR) video/i386/coreboot/$(DEPDIR) video/i386/pc/$(DEPDIR) video/readers/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ + uninstall-dist_grubconfDATA uninstall-grubconfSCRIPTS \ + uninstall-man uninstall-pkgdataDATA uninstall-platformDATA \ + uninstall-platformPROGRAMS uninstall-platformSCRIPTS \ + uninstall-sbinPROGRAMS uninstall-sbinSCRIPTS + +uninstall-man: uninstall-man1 + +.MAKE: all check check-am install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-noinstLIBRARIES clean-noinstPROGRAMS \ + clean-platformPROGRAMS clean-sbinPROGRAMS cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-binSCRIPTS \ + install-data install-data-am install-dist_grubconfDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-grubconfSCRIPTS install-html install-html-am \ + install-info install-info-am install-man install-man1 \ + install-pdf install-pdf-am install-pkgdataDATA \ + install-platformDATA install-platformPROGRAMS \ + install-platformSCRIPTS install-ps install-ps-am \ + install-sbinPROGRAMS install-sbinSCRIPTS install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am recheck tags tags-am \ + uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-binSCRIPTS uninstall-dist_grubconfDATA \ + uninstall-grubconfSCRIPTS uninstall-man uninstall-man1 \ + uninstall-pkgdataDATA uninstall-platformDATA \ + uninstall-platformPROGRAMS uninstall-platformSCRIPTS \ + uninstall-sbinPROGRAMS uninstall-sbinSCRIPTS + +.PRECIOUS: Makefile + + +export LC_COLLATE := C +unexport LC_ALL + +# Rules for Automake input + +.PRECIOUS: $(top_srcdir)/Makefile.util.am +$(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def + python $^ > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am +$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def + if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./autogen.sh manually." >&2; exit 1; fi + python $^ > $@.new || (rm -f $@.new; exit 1) + mv $@.new $@ + +build-grub-pep2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^ + +build-grub-pe2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ + +# gentrigtables +gentrigtables$(BUILD_EXEEXT): gentrigtables.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM) + +build-grub-module-verifier$(BUILD_EXEEXT): $(top_srcdir)/util/grub-module-verifier.c $(top_srcdir)/util/grub-module-verifier32.c $(top_srcdir)/util/grub-module-verifier64.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-module-verifier\" $^ + +# trigtables.c +trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac + ./gentrigtables$(BUILD_EXEEXT) > $@ + +# XXX Use Automake's LEX & YACC support +grub_script.tab.h: script/parser.y + $(YACC) -d -p grub_script_yy -b grub_script $< +grub_script.tab.c: grub_script.tab.h + +# For the lexer. +grub_script.yy.h: script/yylex.l + $(LEX) -o grub_script.yy.c --header-file=grub_script.yy.h $< +grub_script.yy.c: grub_script.yy.h + +rs_decoder.h: $(srcdir)/lib/reed_solomon.c + $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Os -I$(top_builddir) -S -DSTANDALONE -o $@ $< -g0 -mregparm=3 -ffreestanding + +disk.marker: $(disk_module_SOURCES) $(nodist_disk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(disk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +trig.marker: $(trig_module_SOURCES) $(nodist_trig_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(trig_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@cs5536.marker: $(cs5536_module_SOURCES) $(nodist_cs5536_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cs5536_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@lsspd.marker: $(lsspd_module_SOURCES) $(nodist_lsspd_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsspd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usb.marker: $(usb_module_SOURCES) $(nodist_usb_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usbserial_common.marker: $(usbserial_common_module_SOURCES) $(nodist_usbserial_common_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_common_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usbserial_pl2303.marker: $(usbserial_pl2303_module_SOURCES) $(nodist_usbserial_pl2303_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_pl2303_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usbserial_ftdi.marker: $(usbserial_ftdi_module_SOURCES) $(nodist_usbserial_ftdi_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_ftdi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usbserial_usbdebug.marker: $(usbserial_usbdebug_module_SOURCES) $(nodist_usbserial_usbdebug_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbserial_usbdebug_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@uhci.marker: $(uhci_module_SOURCES) $(nodist_uhci_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(uhci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@ohci.marker: $(ohci_module_SOURCES) $(nodist_ohci_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ohci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@ehci.marker: $(ehci_module_SOURCES) $(nodist_ehci_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ehci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@pci.marker: $(pci_module_SOURCES) $(nodist_pci_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@nativedisk.marker: $(nativedisk_module_SOURCES) $(nodist_nativedisk_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nativedisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@emupci.marker: $(emupci_module_SOURCES) $(nodist_emupci_module_SOURCES) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emupci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_GRUB_EMU_PCI_TRUE@@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@lsdev.marker: $(lsdev_module_SOURCES) $(nodist_lsdev_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsdev_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@lsxen.marker: $(lsxen_module_SOURCES) $(nodist_lsxen_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@lsxen.marker: $(lsxen_module_SOURCES) $(nodist_lsxen_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsxen_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@cmostest.marker: $(cmostest_module_SOURCES) $(nodist_cmostest_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmostest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@cmosdump.marker: $(cmosdump_module_SOURCES) $(nodist_cmosdump_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmosdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@iorw.marker: $(iorw_module_SOURCES) $(nodist_iorw_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iorw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@cbtable.marker: $(cbtable_module_SOURCES) $(nodist_cbtable_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtable_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@cbtime.marker: $(cbtime_module_SOURCES) $(nodist_cbtime_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbtime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@cbls.marker: $(cbls_module_SOURCES) $(nodist_cbls_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@cbmemc.marker: $(cbmemc_module_SOURCES) $(nodist_cbmemc_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbmemc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +regexp.marker: $(regexp_module_SOURCES) $(nodist_regexp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(regexp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@acpi.marker: $(acpi_module_SOURCES) $(nodist_acpi_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@lsacpi.marker: $(lsacpi_module_SOURCES) $(nodist_lsacpi_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsacpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@lsefisystab.marker: $(lsefisystab_module_SOURCES) $(nodist_lsefisystab_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefisystab_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@lssal.marker: $(lssal_module_SOURCES) $(nodist_lssal_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lssal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@lsefimmap.marker: $(lsefimmap_module_SOURCES) $(nodist_lsefimmap_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefimmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@lsefi.marker: $(lsefi_module_SOURCES) $(nodist_lsefi_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsefi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@efifwsetup.marker: $(efifwsetup_module_SOURCES) $(nodist_efifwsetup_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efifwsetup_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +blocklist.marker: $(blocklist_module_SOURCES) $(nodist_blocklist_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blocklist_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@boot.marker: $(boot_module_SOURCES) $(nodist_boot_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +cat.marker: $(cat_module_SOURCES) $(nodist_cat_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cat_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +cmp.marker: $(cmp_module_SOURCES) $(nodist_cmp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +configfile.marker: $(configfile_module_SOURCES) $(nodist_configfile_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(configfile_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@cpuid.marker: $(cpuid_module_SOURCES) $(nodist_cpuid_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +date.marker: $(date_module_SOURCES) $(nodist_date_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(date_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@drivemap.marker: $(drivemap_module_SOURCES) $(nodist_drivemap_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(drivemap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +echo.marker: $(echo_module_SOURCES) $(nodist_echo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(echo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +eval.marker: $(eval_module_SOURCES) $(nodist_eval_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eval_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@extcmd.marker: $(extcmd_module_SOURCES) $(nodist_extcmd_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(extcmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@fixvideo.marker: $(fixvideo_module_SOURCES) $(nodist_fixvideo_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@fixvideo.marker: $(fixvideo_module_SOURCES) $(nodist_fixvideo_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fixvideo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +gptsync.marker: $(gptsync_module_SOURCES) $(nodist_gptsync_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gptsync_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@halt.marker: $(halt_module_SOURCES) $(nodist_halt_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(halt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@reboot.marker: $(reboot_module_SOURCES) $(nodist_reboot_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +hashsum.marker: $(hashsum_module_SOURCES) $(nodist_hashsum_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hashsum_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +verify.marker: $(verify_module_SOURCES) $(nodist_verify_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(verify_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@hdparm.marker: $(hdparm_module_SOURCES) $(nodist_hdparm_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hdparm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +help.marker: $(help_module_SOURCES) $(nodist_help_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(help_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +hexdump.marker: $(hexdump_module_SOURCES) $(nodist_hexdump_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hexdump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +keystatus.marker: $(keystatus_module_SOURCES) $(nodist_keystatus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keystatus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@loadbios.marker: $(loadbios_module_SOURCES) $(nodist_loadbios_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@loadbios.marker: $(loadbios_module_SOURCES) $(nodist_loadbios_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadbios_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +loadenv.marker: $(loadenv_module_SOURCES) $(nodist_loadenv_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loadenv_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ls.marker: $(ls_module_SOURCES) $(nodist_ls_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ls_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +lsmmap.marker: $(lsmmap_module_SOURCES) $(nodist_lsmmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsmmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@lspci.marker: $(lspci_module_SOURCES) $(nodist_lspci_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lspci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +memrw.marker: $(memrw_module_SOURCES) $(nodist_memrw_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memrw_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +minicmd.marker: $(minicmd_module_SOURCES) $(nodist_minicmd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minicmd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +parttool.marker: $(parttool_module_SOURCES) $(nodist_parttool_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(parttool_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +password.marker: $(password_module_SOURCES) $(nodist_password_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +password_pbkdf2.marker: $(password_pbkdf2_module_SOURCES) $(nodist_password_pbkdf2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(password_pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@play.marker: $(play_module_SOURCES) $(nodist_play_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(play_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@spkmodem.marker: $(spkmodem_module_SOURCES) $(nodist_spkmodem_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(spkmodem_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@morse.marker: $(morse_module_SOURCES) $(nodist_morse_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(morse_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +probe.marker: $(probe_module_SOURCES) $(nodist_probe_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(probe_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +read.marker: $(read_module_SOURCES) $(nodist_read_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(read_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +search.marker: $(search_module_SOURCES) $(nodist_search_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +search_fs_file.marker: $(search_fs_file_module_SOURCES) $(nodist_search_fs_file_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_file_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +search_fs_uuid.marker: $(search_fs_uuid_module_SOURCES) $(nodist_search_fs_uuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_fs_uuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +search_label.marker: $(search_label_module_SOURCES) $(nodist_search_label_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(search_label_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@setpci.marker: $(setpci_module_SOURCES) $(nodist_setpci_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setpci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@pcidump.marker: $(pcidump_module_SOURCES) $(nodist_pcidump_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pcidump_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +sleep.marker: $(sleep_module_SOURCES) $(nodist_sleep_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@suspend.marker: $(suspend_module_SOURCES) $(nodist_suspend_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@suspend.marker: $(suspend_module_SOURCES) $(nodist_suspend_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(suspend_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@escc.marker: $(escc_module_SOURCES) $(nodist_escc_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(escc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +terminal.marker: $(terminal_module_SOURCES) $(nodist_terminal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +test.marker: $(test_module_SOURCES) $(nodist_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +true.marker: $(true_module_SOURCES) $(nodist_true_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(true_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usbtest.marker: $(usbtest_module_SOURCES) $(nodist_usbtest_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbtest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +videoinfo.marker: $(videoinfo_module_SOURCES) $(nodist_videoinfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videoinfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +videotest.marker: $(videotest_module_SOURCES) $(nodist_videotest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +xnu_uuid.marker: $(xnu_uuid_module_SOURCES) $(nodist_xnu_uuid_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +dm_nv.marker: $(dm_nv_module_SOURCES) $(nodist_dm_nv_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(dm_nv_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +loopback.marker: $(loopback_module_SOURCES) $(nodist_loopback_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(loopback_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +cryptodisk.marker: $(cryptodisk_module_SOURCES) $(nodist_cryptodisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cryptodisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +luks.marker: $(luks_module_SOURCES) $(nodist_luks_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(luks_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +geli.marker: $(geli_module_SOURCES) $(nodist_geli_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(geli_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +lvm.marker: $(lvm_module_SOURCES) $(nodist_lvm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lvm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ldm.marker: $(ldm_module_SOURCES) $(nodist_ldm_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ldm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +mdraid09.marker: $(mdraid09_module_SOURCES) $(nodist_mdraid09_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +mdraid09_be.marker: $(mdraid09_be_module_SOURCES) $(nodist_mdraid09_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid09_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +mdraid1x.marker: $(mdraid1x_module_SOURCES) $(nodist_mdraid1x_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mdraid1x_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +diskfilter.marker: $(diskfilter_module_SOURCES) $(nodist_diskfilter_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(diskfilter_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +raid5rec.marker: $(raid5rec_module_SOURCES) $(nodist_raid5rec_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid5rec_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +raid6rec.marker: $(raid6rec_module_SOURCES) $(nodist_raid6rec_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(raid6rec_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +scsi.marker: $(scsi_module_SOURCES) $(nodist_scsi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(scsi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +memdisk.marker: $(memdisk_module_SOURCES) $(nodist_memdisk_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(memdisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@ata.marker: $(ata_module_SOURCES) $(nodist_ata_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@ahci.marker: $(ahci_module_SOURCES) $(nodist_ahci_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahci_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@pata.marker: $(pata_module_SOURCES) $(nodist_pata_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pata_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@biosdisk.marker: $(biosdisk_module_SOURCES) $(nodist_biosdisk_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(biosdisk_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usbms.marker: $(usbms_module_SOURCES) $(nodist_usbms_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usbms_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@nand.marker: $(nand_module_SOURCES) $(nodist_nand_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nand_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@efiemu.marker: $(efiemu_module_SOURCES) $(nodist_efiemu_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efiemu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@font.marker: $(font_module_SOURCES) $(nodist_font_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(font_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +procfs.marker: $(procfs_module_SOURCES) $(nodist_procfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(procfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +affs.marker: $(affs_module_SOURCES) $(nodist_affs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(affs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +afs.marker: $(afs_module_SOURCES) $(nodist_afs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(afs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +bfs.marker: $(bfs_module_SOURCES) $(nodist_bfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +btrfs.marker: $(btrfs_module_SOURCES) $(nodist_btrfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(btrfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +archelp.marker: $(archelp_module_SOURCES) $(nodist_archelp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(archelp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +cbfs.marker: $(cbfs_module_SOURCES) $(nodist_cbfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cbfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +cpio.marker: $(cpio_module_SOURCES) $(nodist_cpio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +cpio_be.marker: $(cpio_be_module_SOURCES) $(nodist_cpio_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cpio_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +newc.marker: $(newc_module_SOURCES) $(nodist_newc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(newc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +odc.marker: $(odc_module_SOURCES) $(nodist_odc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(odc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ext2.marker: $(ext2_module_SOURCES) $(nodist_ext2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ext2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +fat.marker: $(fat_module_SOURCES) $(nodist_fat_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fat_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +exfat.marker: $(exfat_module_SOURCES) $(nodist_exfat_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfat_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +fshelp.marker: $(fshelp_module_SOURCES) $(nodist_fshelp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fshelp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +hfs.marker: $(hfs_module_SOURCES) $(nodist_hfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +hfsplus.marker: $(hfsplus_module_SOURCES) $(nodist_hfsplus_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfsplus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +hfspluscomp.marker: $(hfspluscomp_module_SOURCES) $(nodist_hfspluscomp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hfspluscomp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +iso9660.marker: $(iso9660_module_SOURCES) $(nodist_iso9660_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(iso9660_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +jfs.marker: $(jfs_module_SOURCES) $(nodist_jfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +minix.marker: $(minix_module_SOURCES) $(nodist_minix_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +minix2.marker: $(minix2_module_SOURCES) $(nodist_minix2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +minix3.marker: $(minix3_module_SOURCES) $(nodist_minix3_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +minix_be.marker: $(minix_be_module_SOURCES) $(nodist_minix_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +minix2_be.marker: $(minix2_be_module_SOURCES) $(nodist_minix2_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix2_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +minix3_be.marker: $(minix3_be_module_SOURCES) $(nodist_minix3_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(minix3_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +nilfs2.marker: $(nilfs2_module_SOURCES) $(nodist_nilfs2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nilfs2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ntfs.marker: $(ntfs_module_SOURCES) $(nodist_ntfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ntfscomp.marker: $(ntfscomp_module_SOURCES) $(nodist_ntfscomp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntfscomp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +reiserfs.marker: $(reiserfs_module_SOURCES) $(nodist_reiserfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(reiserfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +romfs.marker: $(romfs_module_SOURCES) $(nodist_romfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(romfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +sfs.marker: $(sfs_module_SOURCES) $(nodist_sfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +squash4.marker: $(squash4_module_SOURCES) $(nodist_squash4_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(squash4_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +tar.marker: $(tar_module_SOURCES) $(nodist_tar_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tar_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +udf.marker: $(udf_module_SOURCES) $(nodist_udf_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(udf_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ufs1.marker: $(ufs1_module_SOURCES) $(nodist_ufs1_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ufs1_be.marker: $(ufs1_be_module_SOURCES) $(nodist_ufs1_be_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs1_be_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ufs2.marker: $(ufs2_module_SOURCES) $(nodist_ufs2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ufs2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +xfs.marker: $(xfs_module_SOURCES) $(nodist_xfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +zfs.marker: $(zfs_module_SOURCES) $(nodist_zfs_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +zfscrypt.marker: $(zfscrypt_module_SOURCES) $(nodist_zfscrypt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfscrypt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +zfsinfo.marker: $(zfsinfo_module_SOURCES) $(nodist_zfsinfo_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zfsinfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +macbless.marker: $(macbless_module_SOURCES) $(nodist_macbless_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macbless_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@pxe.marker: $(pxe_module_SOURCES) $(nodist_pxe_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxe_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +gettext.marker: $(gettext_module_SOURCES) $(nodist_gettext_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gettext_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gfxmenu.marker: $(gfxmenu_module_SOURCES) $(nodist_gfxmenu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxmenu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +hello.marker: $(hello_module_SOURCES) $(nodist_hello_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(hello_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gzio.marker: $(gzio_module_SOURCES) $(nodist_gzio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gzio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +offsetio.marker: $(offsetio_module_SOURCES) $(nodist_offsetio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(offsetio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@bufio.marker: $(bufio_module_SOURCES) $(nodist_bufio_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bufio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +elf.marker: $(elf_module_SOURCES) $(nodist_elf_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(elf_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +crypto.marker: $(crypto_module_SOURCES) $(nodist_crypto_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crypto_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +pbkdf2.marker: $(pbkdf2_module_SOURCES) $(nodist_pbkdf2_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@relocator.marker: $(relocator_module_SOURCES) $(nodist_relocator_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(relocator_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@datetime.marker: $(datetime_module_SOURCES) $(nodist_datetime_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datetime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +setjmp.marker: $(setjmp_module_SOURCES) $(nodist_setjmp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@aout.marker: $(aout_module_SOURCES) $(nodist_aout_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aout_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@bsd.marker: $(bsd_module_SOURCES) $(nodist_bsd_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@plan9.marker: $(plan9_module_SOURCES) $(nodist_plan9_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(plan9_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@linux16.marker: $(linux16_module_SOURCES) $(nodist_linux16_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux16_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@ntldr.marker: $(ntldr_module_SOURCES) $(nodist_ntldr_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ntldr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@truecrypt.marker: $(truecrypt_module_SOURCES) $(nodist_truecrypt_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(truecrypt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@freedos.marker: $(freedos_module_SOURCES) $(nodist_freedos_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(freedos_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@pxechain.marker: $(pxechain_module_SOURCES) $(nodist_pxechain_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pxechain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@multiboot2.marker: $(multiboot2_module_SOURCES) $(nodist_multiboot2_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot2_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@multiboot.marker: $(multiboot_module_SOURCES) $(nodist_multiboot_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(multiboot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@xen_boot.marker: $(xen_boot_module_SOURCES) $(nodist_xen_boot_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xen_boot_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@linux.marker: $(linux_module_SOURCES) $(nodist_linux_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(linux_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@fdt.marker: $(fdt_module_SOURCES) $(nodist_fdt_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@fdt.marker: $(fdt_module_SOURCES) $(nodist_fdt_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@fdt.marker: $(fdt_module_SOURCES) $(nodist_fdt_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(fdt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@xnu.marker: $(xnu_module_SOURCES) $(nodist_xnu_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@random.marker: $(random_module_SOURCES) $(nodist_random_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(random_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +macho.marker: $(macho_module_SOURCES) $(nodist_macho_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(macho_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@appleldr.marker: $(appleldr_module_SOURCES) $(nodist_appleldr_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@appleldr.marker: $(appleldr_module_SOURCES) $(nodist_appleldr_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(appleldr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@chain.marker: $(chain_module_SOURCES) $(nodist_chain_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chain_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@mmap.marker: $(mmap_module_SOURCES) $(nodist_mmap_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +normal.marker: $(normal_module_SOURCES) $(nodist_normal_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normal_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_acorn.marker: $(part_acorn_module_SOURCES) $(nodist_part_acorn_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_acorn_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_amiga.marker: $(part_amiga_module_SOURCES) $(nodist_part_amiga_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_amiga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_apple.marker: $(part_apple_module_SOURCES) $(nodist_part_apple_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_apple_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_gpt.marker: $(part_gpt_module_SOURCES) $(nodist_part_gpt_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_gpt_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_msdos.marker: $(part_msdos_module_SOURCES) $(nodist_part_msdos_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_msdos_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_sun.marker: $(part_sun_module_SOURCES) $(nodist_part_sun_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sun_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_plan.marker: $(part_plan_module_SOURCES) $(nodist_part_plan_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_plan_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_dvh.marker: $(part_dvh_module_SOURCES) $(nodist_part_dvh_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dvh_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_bsd.marker: $(part_bsd_module_SOURCES) $(nodist_part_bsd_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_bsd_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_sunpc.marker: $(part_sunpc_module_SOURCES) $(nodist_part_sunpc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_sunpc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +part_dfly.marker: $(part_dfly_module_SOURCES) $(nodist_part_dfly_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(part_dfly_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +msdospart.marker: $(msdospart_module_SOURCES) $(nodist_msdospart_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(msdospart_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@at_keyboard.marker: $(at_keyboard_module_SOURCES) $(nodist_at_keyboard_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(at_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@gfxterm.marker: $(gfxterm_module_SOURCES) $(nodist_gfxterm_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +gfxterm_background.marker: $(gfxterm_background_module_SOURCES) $(nodist_gfxterm_background_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_background_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@serial.marker: $(serial_module_SOURCES) $(nodist_serial_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(serial_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@sendkey.marker: $(sendkey_module_SOURCES) $(nodist_sendkey_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sendkey_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@terminfo.marker: $(terminfo_module_SOURCES) $(nodist_terminfo_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(terminfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@usb_keyboard.marker: $(usb_keyboard_module_SOURCES) $(nodist_usb_keyboard_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(usb_keyboard_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@vga.marker: $(vga_module_SOURCES) $(nodist_vga_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@vga_text.marker: $(vga_text_module_SOURCES) $(nodist_vga_text_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vga_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@mda_text.marker: $(mda_text_module_SOURCES) $(nodist_mda_text_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mda_text_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@video_cirrus.marker: $(video_cirrus_module_SOURCES) $(nodist_video_cirrus_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_cirrus_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@video_bochs.marker: $(video_bochs_module_SOURCES) $(nodist_video_bochs_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_bochs_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +functional_test.marker: $(functional_test_module_SOURCES) $(nodist_functional_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(functional_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +exfctest.marker: $(exfctest_module_SOURCES) $(nodist_exfctest_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(exfctest_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +setjmp_test.marker: $(setjmp_test_module_SOURCES) $(nodist_setjmp_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setjmp_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +signature_test.marker: $(signature_test_module_SOURCES) $(nodist_signature_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(signature_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +sleep_test.marker: $(sleep_test_module_SOURCES) $(nodist_sleep_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sleep_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +xnu_uuid_test.marker: $(xnu_uuid_test_module_SOURCES) $(nodist_xnu_uuid_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xnu_uuid_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +pbkdf2_test.marker: $(pbkdf2_test_module_SOURCES) $(nodist_pbkdf2_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pbkdf2_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@legacy_password_test.marker: $(legacy_password_test_module_SOURCES) $(nodist_legacy_password_test_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacy_password_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_loongson_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_mips_loongson_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_loongson_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@div.marker: $(div_module_SOURCES) $(nodist_div_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +div_test.marker: $(div_test_module_SOURCES) $(nodist_div_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(div_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +mul_test.marker: $(mul_test_module_SOURCES) $(nodist_mul_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mul_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +shift_test.marker: $(shift_test_module_SOURCES) $(nodist_shift_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(shift_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +cmp_test.marker: $(cmp_test_module_SOURCES) $(nodist_cmp_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmp_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +ctz_test.marker: $(ctz_test_module_SOURCES) $(nodist_ctz_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ctz_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +bswap_test.marker: $(bswap_test_module_SOURCES) $(nodist_bswap_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bswap_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +videotest_checksum.marker: $(videotest_checksum_module_SOURCES) $(nodist_videotest_checksum_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(videotest_checksum_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gfxterm_menu.marker: $(gfxterm_menu_module_SOURCES) $(nodist_gfxterm_menu_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gfxterm_menu_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +cmdline_cat_test.marker: $(cmdline_cat_test_module_SOURCES) $(nodist_cmdline_cat_test_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cmdline_cat_test_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +bitmap.marker: $(bitmap_module_SOURCES) $(nodist_bitmap_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +bitmap_scale.marker: $(bitmap_scale_module_SOURCES) $(nodist_bitmap_scale_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bitmap_scale_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@efi_gop.marker: $(efi_gop_module_SOURCES) $(nodist_efi_gop_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_gop_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@efi_uga.marker: $(efi_uga_module_SOURCES) $(nodist_efi_uga_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@efi_uga.marker: $(efi_uga_module_SOURCES) $(nodist_efi_uga_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efi_uga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +jpeg.marker: $(jpeg_module_SOURCES) $(nodist_jpeg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(jpeg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +png.marker: $(png_module_SOURCES) $(nodist_png_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(png_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +tga.marker: $(tga_module_SOURCES) $(nodist_tga_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tga_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@vbe.marker: $(vbe_module_SOURCES) $(nodist_vbe_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(vbe_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@video_fb.marker: $(video_fb_module_SOURCES) $(nodist_video_fb_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_arc_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_mips_arc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_arc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_mips_qemu_mips_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_mips_qemu_mips_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_mips_qemu_mips_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@video.marker: $(video_module_SOURCES) $(nodist_video_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +video_colors.marker: $(video_colors_module_SOURCES) $(nodist_video_colors_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(video_colors_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@ieee1275_fb.marker: $(ieee1275_fb_module_SOURCES) $(nodist_ieee1275_fb_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ieee1275_fb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@sdl.marker: $(sdl_module_SOURCES) $(nodist_sdl_module_SOURCES) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(sdl_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_GRUB_EMU_SDL_TRUE@@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +datehook.marker: $(datehook_module_SOURCES) $(nodist_datehook_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(datehook_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +net.marker: $(net_module_SOURCES) $(nodist_net_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(net_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +tftp.marker: $(tftp_module_SOURCES) $(nodist_tftp_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tftp_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +http.marker: $(http_module_SOURCES) $(nodist_http_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(http_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@ofnet.marker: $(ofnet_module_SOURCES) $(nodist_ofnet_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_sparc64_ieee1275_TRUE@ofnet.marker: $(ofnet_module_SOURCES) $(nodist_ofnet_module_SOURCES) +@COND_sparc64_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_sparc64_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_powerpc_ieee1275_TRUE@ofnet.marker: $(ofnet_module_SOURCES) $(nodist_ofnet_module_SOURCES) +@COND_powerpc_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ofnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_powerpc_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_uboot_TRUE@ubootnet.marker: $(ubootnet_module_SOURCES) $(nodist_ubootnet_module_SOURCES) +@COND_arm_uboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ubootnet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_uboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ia64_efi_TRUE@efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) +@COND_ia64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ia64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm_efi_TRUE@efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) +@COND_arm_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_arm64_efi_TRUE@efinet.marker: $(efinet_module_SOURCES) $(nodist_efinet_module_SOURCES) +@COND_arm64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(efinet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_arm64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@emunet.marker: $(emunet_module_SOURCES) $(nodist_emunet_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(emunet_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) +@COND_emu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_emu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@legacycfg.marker: $(legacycfg_module_SOURCES) $(nodist_legacycfg_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(legacycfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +syslinuxcfg.marker: $(syslinuxcfg_module_SOURCES) $(nodist_syslinuxcfg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(syslinuxcfg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +test_blockarg.marker: $(test_blockarg_module_SOURCES) $(nodist_test_blockarg_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_blockarg_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +xzio.marker: $(xzio_module_SOURCES) $(nodist_xzio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xzio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +lzopio.marker: $(lzopio_module_SOURCES) $(nodist_lzopio_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lzopio_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +testload.marker: $(testload_module_SOURCES) $(nodist_testload_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testload_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_xen_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_i386_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_xen_TRUE@backtrace.marker: $(backtrace_module_SOURCES) $(nodist_backtrace_module_SOURCES) +@COND_x86_64_xen_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(backtrace_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_xen_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@lsapm.marker: $(lsapm_module_SOURCES) $(nodist_lsapm_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lsapm_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_x86_64_efi_TRUE@keylayouts.marker: $(keylayouts_module_SOURCES) $(nodist_keylayouts_module_SOURCES) +@COND_x86_64_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(keylayouts_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_x86_64_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +priority_queue.marker: $(priority_queue_module_SOURCES) $(nodist_priority_queue_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(priority_queue_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +time.marker: $(time_module_SOURCES) $(nodist_time_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(time_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ENABLE_CACHE_STATS_TRUE@cacheinfo.marker: $(cacheinfo_module_SOURCES) $(nodist_cacheinfo_module_SOURCES) +@COND_ENABLE_CACHE_STATS_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cacheinfo_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ENABLE_CACHE_STATS_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_ENABLE_BOOT_TIME_STATS_TRUE@boottime.marker: $(boottime_module_SOURCES) $(nodist_boottime_module_SOURCES) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(boottime_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_ENABLE_BOOT_TIME_STATS_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +adler32.marker: $(adler32_module_SOURCES) $(nodist_adler32_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adler32_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +crc64.marker: $(crc64_module_SOURCES) $(nodist_crc64_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(crc64_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +mpi.marker: $(mpi_module_SOURCES) $(nodist_mpi_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mpi_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +all_video.marker: $(all_video_module_SOURCES) $(nodist_all_video_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(all_video_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_pc_TRUE@gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) +@COND_i386_pc_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_pc_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_efi_TRUE@gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) +@COND_i386_efi_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_efi_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_qemu_TRUE@gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) +@COND_i386_qemu_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_qemu_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_coreboot_TRUE@gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) +@COND_i386_coreboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_coreboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_multiboot_TRUE@gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) +@COND_i386_multiboot_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_multiboot_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_i386_ieee1275_TRUE@gdb.marker: $(gdb_module_SOURCES) $(nodist_gdb_module_SOURCES) +@COND_i386_ieee1275_TRUE@ $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gdb_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) +@COND_i386_ieee1275_TRUE@ grep 'MARKER' $@.new > $@; rm -f $@.new + +testspeed.marker: $(testspeed_module_SOURCES) $(nodist_testspeed_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testspeed_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +tr.marker: $(tr_module_SOURCES) $(nodist_tr_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(tr_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +progress.marker: $(progress_module_SOURCES) $(nodist_progress_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(progress_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +file.marker: $(file_module_SOURCES) $(nodist_file_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(file_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_arcfour.marker: $(gcry_arcfour_module_SOURCES) $(nodist_gcry_arcfour_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_arcfour_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_blowfish.marker: $(gcry_blowfish_module_SOURCES) $(nodist_gcry_blowfish_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_blowfish_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_camellia.marker: $(gcry_camellia_module_SOURCES) $(nodist_gcry_camellia_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_camellia_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_cast5.marker: $(gcry_cast5_module_SOURCES) $(nodist_gcry_cast5_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_cast5_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_crc.marker: $(gcry_crc_module_SOURCES) $(nodist_gcry_crc_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_crc_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_des.marker: $(gcry_des_module_SOURCES) $(nodist_gcry_des_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_des_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_dsa.marker: $(gcry_dsa_module_SOURCES) $(nodist_gcry_dsa_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_dsa_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_idea.marker: $(gcry_idea_module_SOURCES) $(nodist_gcry_idea_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_idea_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_md4.marker: $(gcry_md4_module_SOURCES) $(nodist_gcry_md4_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md4_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_md5.marker: $(gcry_md5_module_SOURCES) $(nodist_gcry_md5_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_md5_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_rfc2268.marker: $(gcry_rfc2268_module_SOURCES) $(nodist_gcry_rfc2268_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rfc2268_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_rijndael.marker: $(gcry_rijndael_module_SOURCES) $(nodist_gcry_rijndael_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rijndael_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_rmd160.marker: $(gcry_rmd160_module_SOURCES) $(nodist_gcry_rmd160_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rmd160_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_rsa.marker: $(gcry_rsa_module_SOURCES) $(nodist_gcry_rsa_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_rsa_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_seed.marker: $(gcry_seed_module_SOURCES) $(nodist_gcry_seed_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_seed_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_serpent.marker: $(gcry_serpent_module_SOURCES) $(nodist_gcry_serpent_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_serpent_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_sha1.marker: $(gcry_sha1_module_SOURCES) $(nodist_gcry_sha1_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha1_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_sha256.marker: $(gcry_sha256_module_SOURCES) $(nodist_gcry_sha256_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha256_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_sha512.marker: $(gcry_sha512_module_SOURCES) $(nodist_gcry_sha512_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_sha512_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_tiger.marker: $(gcry_tiger_module_SOURCES) $(nodist_gcry_tiger_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_tiger_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_twofish.marker: $(gcry_twofish_module_SOURCES) $(nodist_gcry_twofish_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_twofish_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +gcry_whirlpool.marker: $(gcry_whirlpool_module_SOURCES) $(nodist_gcry_whirlpool_module_SOURCES) + $(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gcry_whirlpool_module_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1) + grep 'MARKER' $@.new > $@; rm -f $@.new + +@COND_emu_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_emu_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_OBJ2ELF) $< $@ || (rm -f $@; exit 1); else cp $< $@; fi + +@COND_i386_pc_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_i386_efi_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_i386_efi_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_i386_qemu_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_i386_qemu_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_i386_coreboot_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_i386_coreboot_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_i386_multiboot_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_i386_multiboot_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_i386_ieee1275_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_i386_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_x86_64_efi_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_x86_64_efi_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_i386_xen_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_i386_xen_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_x86_64_xen_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_x86_64_xen_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_mips_loongson_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_sparc64_ieee1275_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_powerpc_ieee1275_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_powerpc_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_mips_arc_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_mips_arc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_ia64_efi_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_ia64_efi_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_mips_qemu_mips_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_mips_qemu_mips_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_arm_uboot_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_arm_uboot_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_arm_efi_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_arm_efi_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_arm64_efi_TRUE@kernel.img: kernel.exec$(EXEEXT) +@COND_arm64_efi_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(TARGET_STRIP) -S -x $(kernel_exec) -o $@.bin $<; $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; rm -f $@.bin; elif test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@.bin $< && $(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); rm -f $@.bin; else $(TARGET_STRIP) $(kernel_exec_STRIPFLAGS) -o $@ $<; fi + +@COND_i386_pc_TRUE@boot.img: boot.image$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_i386_qemu_TRUE@boot.img: boot.image$(EXEEXT) +@COND_i386_qemu_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_sparc64_ieee1275_TRUE@boot.img: boot.image$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_i386_pc_TRUE@boot_hybrid.img: boot_hybrid.image$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(boot_hybrid_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_i386_pc_TRUE@cdboot.img: cdboot.image$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_sparc64_ieee1275_TRUE@cdboot.img: cdboot.image$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(cdboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_i386_pc_TRUE@pxeboot.img: pxeboot.image$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(pxeboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_i386_pc_TRUE@diskboot.img: diskboot.image$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_sparc64_ieee1275_TRUE@diskboot.img: diskboot.image$(EXEEXT) +@COND_sparc64_ieee1275_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(diskboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_i386_pc_TRUE@lnxboot.img: lnxboot.image$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lnxboot_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_loongson_TRUE@xz_decompress.img: xz_decompress.image$(EXEEXT) +@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_arc_TRUE@xz_decompress.img: xz_decompress.image$(EXEEXT) +@COND_mips_arc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_qemu_mips_TRUE@xz_decompress.img: xz_decompress.image$(EXEEXT) +@COND_mips_qemu_mips_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(xz_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_loongson_TRUE@none_decompress.img: none_decompress.image$(EXEEXT) +@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_arc_TRUE@none_decompress.img: none_decompress.image$(EXEEXT) +@COND_mips_arc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_qemu_mips_TRUE@none_decompress.img: none_decompress.image$(EXEEXT) +@COND_mips_qemu_mips_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(none_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_i386_pc_TRUE@lzma_decompress.img: lzma_decompress.image$(EXEEXT) +@COND_i386_pc_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(lzma_decompress_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_loongson_TRUE@fwstart.img: fwstart.image$(EXEEXT) +@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_mips_loongson_TRUE@fwstart_fuloong2f.img: fwstart_fuloong2f.image$(EXEEXT) +@COND_mips_loongson_TRUE@ if test x$(TARGET_APPLE_LINKER) = x1; then $(MACHO2IMG) $< $@; else $(TARGET_OBJCOPY) $(fwstart_fuloong2f_image_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; fi + +@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@grub-emu.1: grub-emu +@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@ chmod a+x grub-emu +@COND_MAN_PAGES_TRUE@@COND_emu_TRUE@ PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=1 -i $(top_srcdir)/docs/man/grub-emu.h2m -o $@ grub-emu + +gensyminfo.sh: $(top_builddir)/config.status gensyminfo.sh.in + (for x in gensyminfo.sh.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gensyminfo.sh + +genmod.sh: $(top_builddir)/config.status genmod.sh.in + (for x in genmod.sh.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x genmod.sh + +modinfo.sh: $(top_builddir)/config.status modinfo.sh.in + (for x in modinfo.sh.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x modinfo.sh + +gmodule.pl: $(top_builddir)/config.status gmodule.pl.in + (for x in gmodule.pl.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gmodule.pl + +gdb_grub: $(top_builddir)/config.status gdb_grub.in + (for x in gdb_grub.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- + chmod a+x gdb_grub + +@COND_powerpc_ieee1275_TRUE@grub.chrp: $(top_builddir)/config.status boot/powerpc/grub.chrp.in +@COND_powerpc_ieee1275_TRUE@ (for x in boot/powerpc/grub.chrp.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_powerpc_ieee1275_TRUE@ chmod a+x grub.chrp + +@COND_powerpc_ieee1275_TRUE@bootinfo.txt: $(top_builddir)/config.status boot/powerpc/bootinfo.txt.in +@COND_powerpc_ieee1275_TRUE@ (for x in boot/powerpc/bootinfo.txt.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:- +@COND_powerpc_ieee1275_TRUE@ chmod a+x bootinfo.txt + +symlist.h: $(top_builddir)/config.h $(KERNEL_HEADER_FILES) + @list='$^'; \ + for p in $$list; do \ + echo "#include <$$p>" >> $@ || (rm -f $@; exit 1); \ + done + +symlist.c: symlist.h gensymlist.sh + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1) + cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1) + rm -f symlist.p + +kernel_syms.lst: $(KERNEL_HEADER_FILES) $(top_builddir)/config.h + $(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) $(CFLAGS) -DGRUB_SYMBOL_GENERATOR=1 $^ >kernel_syms.input + cat kernel_syms.input | grep -v '^#' | sed -n \ + -e '/EXPORT_FUNC *([a-zA-Z0-9_]*)/{s/.*EXPORT_FUNC *(\([a-zA-Z0-9_]*\)).*/defined kernel '"$(ASM_PREFIX)"'\1/;p;}' \ + -e '/EXPORT_VAR *([a-zA-Z0-9_]*)/{s/.*EXPORT_VAR *(\([a-zA-Z0-9_]*\)).*/defined kernel '"$(ASM_PREFIX)"'\1/;p;}' \ + | sort -u >$@ + rm -f kernel_syms.input + +@COND_emu_TRUE@kern/emu/grub_emu-main.$(OBJEXT):grub_emu_init.h +@COND_emu_TRUE@grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h +@COND_emu_TRUE@kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h +@COND_emu_TRUE@grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h + +@COND_emu_TRUE@grub_emu_init.h: genemuinitheader.sh $(MODULE_FILES) +@COND_emu_TRUE@ rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@ + +@COND_emu_TRUE@grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MODULE_FILES) +@COND_emu_TRUE@ rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@ + +# List files + +fs.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + if grep 'FS_LIST_MARKER' $$pp >/dev/null 2>&1; then \ + echo $$b; \ + fi; \ + done) | sort -u > $@ + +command.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + sed -n \ + -e "/EXTCOMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ + -e "/P1COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \ + -e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ + +partmap.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + if grep 'PARTMAP_LIST_MARKER' $$pp >/dev/null 2>&1; then \ + echo $$b; \ + fi; \ + done) | sort -u > $@ + +terminal.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + sed -n \ + -e "/INPUT_TERMINAL_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/i\1: $$b/;p;}" \ + -e "/OUTPUT_TERMINAL_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/o\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ + +parttool.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + sed -n \ + -e "/PARTTOOL_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \ + done) | sort -u > $@ + +video.lst: $(MARKER_FILES) + (for pp in $^; do \ + b=`basename $$pp .marker`; \ + if grep 'VIDEO_LIST_MARKER' $$pp >/dev/null 2>&1; then \ + echo $$b; \ + fi; \ + done) | sort -u > $@ + +# but, crypto.lst is simply copied +crypto.lst: $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst + cp $^ $@ + +syminfo.lst: gensyminfo.sh kernel_syms.lst $(MODULE_FILES) + cat kernel_syms.lst > $@.new + for m in $(MODULE_FILES); do \ + sh $< $$m >> $@.new || exit 1; \ + done + mv $@.new $@ + +# generate global module dependencies list +moddep.lst: syminfo.lst genmoddep.awk video.lst + cat $< | sort | $(AWK) -f $(srcdir)/genmoddep.awk > $@ || (rm -f $@; exit 1) + +$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT) build-grub-module-verifier$(BUILD_EXEEXT) + TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@ + +@COND_ENABLE_EFIEMU_TRUE@efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) +@COND_ENABLE_EFIEMU_TRUE@ -rm -f $@ +@COND_ENABLE_EFIEMU_TRUE@ -rm -f $@.bin +@COND_ENABLE_EFIEMU_TRUE@ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -static -O2 -c -o $@.bin $< +@COND_ENABLE_EFIEMU_TRUE@ if test "x$(TARGET_APPLE_LINKER)" = x1; then \ +@COND_ENABLE_EFIEMU_TRUE@ $(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \ +@COND_ENABLE_EFIEMU_TRUE@ rm -f $@.bin ; \ +@COND_ENABLE_EFIEMU_TRUE@ elif test ! -z "$(TARGET_OBJ2ELF)"; then \ +@COND_ENABLE_EFIEMU_TRUE@ $(TARGET_OBJ2ELF) $@.bin || (rm -f $@.bin; exit 1); \ +@COND_ENABLE_EFIEMU_TRUE@ mv $@.bin $@ ; \ +@COND_ENABLE_EFIEMU_TRUE@ else \ +@COND_ENABLE_EFIEMU_TRUE@ mv $@.bin $@ ; \ +@COND_ENABLE_EFIEMU_TRUE@ fi + +# Link format -arch,x86_64 means Apple linker +@COND_ENABLE_EFIEMU_TRUE@efiemu64_c.o: efiemu/runtime/efiemu.c +@COND_ENABLE_EFIEMU_TRUE@ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $< + +@COND_ENABLE_EFIEMU_TRUE@efiemu64_s.o: efiemu/runtime/efiemu.S +@COND_ENABLE_EFIEMU_TRUE@ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $< + +@COND_ENABLE_EFIEMU_TRUE@efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF) +@COND_ENABLE_EFIEMU_TRUE@ -rm -f $@ +@COND_ENABLE_EFIEMU_TRUE@ -rm -f $@.bin +@COND_ENABLE_EFIEMU_TRUE@ $(TARGET_CC) -m64 $(EFIEMU64_LINK_FORMAT) -nostdlib -static -Wl,-r -o $@.bin $^ +@COND_ENABLE_EFIEMU_TRUE@ if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \ +@COND_ENABLE_EFIEMU_TRUE@ $(TARGET_OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \ +@COND_ENABLE_EFIEMU_TRUE@ rm -f $@.bin; \ +@COND_ENABLE_EFIEMU_TRUE@ else \ +@COND_ENABLE_EFIEMU_TRUE@ mv $@.bin $@ ; \ +@COND_ENABLE_EFIEMU_TRUE@ fi +windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA) + test -d $(windowsdir)/$(target_cpu)-$(platform) || mkdir $(windowsdir)/$(target_cpu)-$(platform) + for x in $(platform_DATA); do \ + cp -fp $$x $(windowsdir)/$(target_cpu)-$(platform)/$$x; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grub-core/boot/decompressor/minilib.c b/grub-core/boot/decompressor/minilib.c new file mode 100644 index 000000000..fc46ee07b --- /dev/null +++ b/grub-core/boot/decompressor/minilib.c @@ -0,0 +1,93 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +void * +grub_memset (void *s, int c, grub_size_t len) +{ + grub_uint8_t *ptr; + for (ptr = s; len; ptr++, len--) + *ptr = c; + return s; +} + +void * +grub_memmove (void *dest, const void *src, grub_size_t n) +{ + char *d = (char *) dest; + const char *s = (const char *) src; + + if (d < s) + while (n--) + *d++ = *s++; + else + { + d += n; + s += n; + + while (n--) + *--d = *--s; + } + + return dest; +} + +int +grub_memcmp (const void *s1, const void *s2, grub_size_t n) +{ + const unsigned char *t1 = s1; + const unsigned char *t2 = s2; + + while (n--) + { + if (*t1 != *t2) + return (int) *t1 - (int) *t2; + + t1++; + t2++; + } + + return 0; +} + +void *grub_decompressor_scratch; + +void +find_scratch (void *src, void *dst, unsigned long srcsize, + unsigned long dstsize) +{ +#ifdef _mips + /* Decoding from ROM. */ + if (((grub_addr_t) src & 0x10000000)) + { + grub_decompressor_scratch = (void *) ALIGN_UP((grub_addr_t) dst + dstsize, + 256); + return; + } +#endif + if ((char *) src + srcsize > (char *) dst + dstsize) + grub_decompressor_scratch = (void *) ALIGN_UP ((grub_addr_t) src + srcsize, + 256); + else + grub_decompressor_scratch = (void *) ALIGN_UP ((grub_addr_t) dst + dstsize, + 256); + return; +} diff --git a/grub-core/boot/decompressor/none.c b/grub-core/boot/decompressor/none.c new file mode 100644 index 000000000..911e861e3 --- /dev/null +++ b/grub-core/boot/decompressor/none.c @@ -0,0 +1,42 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +void +grub_decompress_core (void *src, void *dest, unsigned long n, + unsigned long dstsize __attribute__ ((unused))) +{ + char *d = (char *) dest; + const char *s = (const char *) src; + + if (d == s) + return; + + if (d < s) + while (n--) + *d++ = *s++; + else + { + d += n; + s += n; + + while (n--) + *--d = *--s; + } +} diff --git a/grub-core/boot/decompressor/xz.c b/grub-core/boot/decompressor/xz.c new file mode 100644 index 000000000..2279118e1 --- /dev/null +++ b/grub-core/boot/decompressor/xz.c @@ -0,0 +1,60 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +#include "xz.h" +#include "xz_stream.h" + +void +grub_decompress_core (void *src, void *dst, unsigned long srcsize, + unsigned long dstsize) +{ + struct xz_dec *dec; + struct xz_buf buf; + + find_scratch (src, dst, srcsize, dstsize); + + dec = xz_dec_init (GRUB_DECOMPRESSOR_DICT_SIZE); + + buf.in = src; + buf.in_pos = 0; + buf.in_size = srcsize; + buf.out = dst; + buf.out_pos = 0; + buf.out_size = dstsize; + + while (buf.in_pos != buf.in_size) + { + enum xz_ret xzret; + xzret = xz_dec_run (dec, &buf); + switch (xzret) + { + case XZ_MEMLIMIT_ERROR: + case XZ_FORMAT_ERROR: + case XZ_OPTIONS_ERROR: + case XZ_DATA_ERROR: + case XZ_BUF_ERROR: + return; + default: + break; + } + } +} diff --git a/grub-core/boot/i386/pc/boot.S b/grub-core/boot/i386/pc/boot.S new file mode 100644 index 000000000..2bd0b2d28 --- /dev/null +++ b/grub-core/boot/i386/pc/boot.S @@ -0,0 +1,542 @@ +/* -*-Asm-*- */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +/* + * defines for the code go here + */ + + /* Print message string */ +#define MSG(x) movw $x, %si; call LOCAL(message) +#define ERR(x) movw $x, %si; jmp LOCAL(error_message) + + .macro floppy +part_start: + +LOCAL(probe_values): + .byte 36, 18, 15, 9, 0 + +LOCAL(floppy_probe): + pushw %dx +/* + * Perform floppy probe. + */ +#ifdef __APPLE__ + LOCAL(probe_values_minus_one) = LOCAL(probe_values) - 1 + movw MACRO_DOLLAR(LOCAL(probe_values_minus_one)), %si +#else + movw MACRO_DOLLAR(LOCAL(probe_values)) - 1, %si +#endif + +LOCAL(probe_loop): + /* reset floppy controller INT 13h AH=0 */ + xorw %ax, %ax + int MACRO_DOLLAR(0x13) + + incw %si + movb (%si), %cl + + /* if number of sectors is 0, display error and die */ + testb %cl, %cl + jnz 1f + +/* + * Floppy disk probe failure. + */ + MSG(fd_probe_error_string) + jmp LOCAL(general_error) + +/* "Floppy" */ +fd_probe_error_string: .asciz "Floppy" + +1: + /* perform read */ + movw MACRO_DOLLAR(GRUB_BOOT_MACHINE_BUFFER_SEG), %bx + movw %bx, %es + xorw %bx, %bx + movw MACRO_DOLLAR(0x201), %ax + movb MACRO_DOLLAR(0), %ch + movb MACRO_DOLLAR(0), %dh + int MACRO_DOLLAR(0x13) + + /* if error, jump to "LOCAL(probe_loop)" */ + jc LOCAL(probe_loop) + + /* %cl is already the correct value! */ + movb MACRO_DOLLAR(1), %dh + movb MACRO_DOLLAR(79), %ch + + jmp LOCAL(final_init) + .endm + + .macro scratch + + /* scratch space */ +mode: + .byte 0 +disk_address_packet: +sectors: + .long 0 +heads: + .long 0 +cylinders: + .word 0 +sector_start: + .byte 0 +head_start: + .byte 0 +cylinder_start: + .word 0 + /* more space... */ + .endm + + .file "boot.S" + + .text + + /* Tell GAS to generate 16-bit instructions so that this code works + in real mode. */ + .code16 + +.globl _start, start; +_start: +start: + /* + * _start is loaded at 0x7c00 and is jumped to with CS:IP 0:0x7c00 + */ + + /* + * Beginning of the sector is compatible with the FAT/HPFS BIOS + * parameter block. + */ + + jmp LOCAL(after_BPB) + nop /* do I care about this ??? */ + +#ifdef HYBRID_BOOT + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + + nop + nop + nop + nop + nop + nop + nop + nop + + nop + nop + jmp LOCAL(after_BPB) +#else + /* + * This space is for the BIOS parameter block!!!! Don't change + * the first jump, nor start the code anywhere but right after + * this area. + */ + + .org GRUB_BOOT_MACHINE_BPB_START + .org 4 +#endif +#ifdef HYBRID_BOOT + floppy +#else + scratch +#endif + + .org GRUB_BOOT_MACHINE_BPB_END + /* + * End of BIOS parameter block. + */ + +LOCAL(kernel_address): + .word GRUB_BOOT_MACHINE_KERNEL_ADDR + +#ifndef HYBRID_BOOT + .org GRUB_BOOT_MACHINE_KERNEL_SECTOR +LOCAL(kernel_sector): + .long 1 +LOCAL(kernel_sector_high): + .long 0 +#endif + + .org GRUB_BOOT_MACHINE_BOOT_DRIVE +boot_drive: + .byte 0xff /* the disk to load kernel from */ + /* 0xff means use the boot drive */ + +LOCAL(after_BPB): + +/* general setup */ + cli /* we're not safe here! */ + + /* + * This is a workaround for buggy BIOSes which don't pass boot + * drive correctly. If GRUB is installed into a HDD, check if + * DL is masked correctly. If not, assume that the BIOS passed + * a bogus value and set DL to 0x80, since this is the only + * possible boot drive. If GRUB is installed into a floppy, + * this does nothing (only jump). + */ + .org GRUB_BOOT_MACHINE_DRIVE_CHECK +boot_drive_check: + jmp 3f /* grub-setup may overwrite this jump */ + testb $0x80, %dl + jz 2f +3: + /* Ignore %dl different from 0-0x0f and 0x80-0x8f. */ + testb $0x70, %dl + jz 1f +2: + movb $0x80, %dl +1: + /* + * ljmp to the next instruction because some bogus BIOSes + * jump to 07C0:0000 instead of 0000:7C00. + */ + ljmp $0, $real_start + +real_start: + + /* set up %ds and %ss as offset from 0 */ + xorw %ax, %ax + movw %ax, %ds + movw %ax, %ss + + /* set up the REAL stack */ + movw $GRUB_BOOT_MACHINE_STACK_SEG, %sp + + sti /* we're safe again */ + + /* + * Check if we have a forced disk reference here + */ + movb boot_drive, %al + cmpb $0xff, %al + je 1f + movb %al, %dl +1: + /* save drive reference first thing! */ + pushw %dx + + /* print a notification message on the screen */ + MSG(notification_string) + + /* set %si to the disk address packet */ + movw $disk_address_packet, %si + + /* check if LBA is supported */ + movb $0x41, %ah + movw $0x55aa, %bx + int $0x13 + + /* + * %dl may have been clobbered by INT 13, AH=41H. + * This happens, for example, with AST BIOS 1.04. + */ + popw %dx + pushw %dx + + /* use CHS if fails */ + jc LOCAL(chs_mode) + cmpw $0xaa55, %bx + jne LOCAL(chs_mode) + + andw $1, %cx + jz LOCAL(chs_mode) + +LOCAL(lba_mode): + xorw %ax, %ax + movw %ax, 4(%si) + + incw %ax + /* set the mode to non-zero */ + movb %al, -1(%si) + + /* the blocks */ + movw %ax, 2(%si) + + /* the size and the reserved byte */ + movw $0x0010, (%si) + + /* the absolute address */ + movl LOCAL(kernel_sector), %ebx + movl %ebx, 8(%si) + movl LOCAL(kernel_sector_high), %ebx + movl %ebx, 12(%si) + + /* the segment of buffer address */ + movw $GRUB_BOOT_MACHINE_BUFFER_SEG, 6(%si) + +/* + * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory + * Call with %ah = 0x42 + * %dl = drive number + * %ds:%si = segment:offset of disk address packet + * Return: + * %al = 0x0 on success; err code on failure + */ + + movb $0x42, %ah + int $0x13 + + /* LBA read is not supported, so fallback to CHS. */ + jc LOCAL(chs_mode) + + movw $GRUB_BOOT_MACHINE_BUFFER_SEG, %bx + jmp LOCAL(copy_buffer) + +LOCAL(chs_mode): + /* + * Determine the hard disk geometry from the BIOS! + * We do this first, so that LS-120 IDE floppies work correctly. + */ + movb $8, %ah + int $0x13 + jnc LOCAL(final_init) + + popw %dx + /* + * The call failed, so maybe use the floppy probe instead. + */ + testb %dl, %dl + jnb LOCAL(floppy_probe) + + /* Nope, we definitely have a hard disk, and we're screwed. */ + ERR(hd_probe_error_string) + +LOCAL(final_init): + /* set the mode to zero */ + movzbl %dh, %eax + movb %ah, -1(%si) + + /* save number of heads */ + incw %ax + movl %eax, 4(%si) + + movzbw %cl, %dx + shlw $2, %dx + movb %ch, %al + movb %dh, %ah + + /* save number of cylinders */ + incw %ax + movw %ax, 8(%si) + + movzbw %dl, %ax + shrb $2, %al + + /* save number of sectors */ + movl %eax, (%si) + +setup_sectors: + /* load logical sector start (top half) */ + movl LOCAL(kernel_sector_high), %eax + + orl %eax, %eax + jnz LOCAL(geometry_error) + + /* load logical sector start (bottom half) */ + movl LOCAL(kernel_sector), %eax + + /* zero %edx */ + xorl %edx, %edx + + /* divide by number of sectors */ + divl (%si) + + /* save sector start */ + movb %dl, %cl + + xorw %dx, %dx /* zero %edx */ + divl 4(%si) /* divide by number of heads */ + + /* do we need too many cylinders? */ + cmpw 8(%si), %ax + jge LOCAL(geometry_error) + + /* normalize sector start (1-based) */ + incb %cl + + /* low bits of cylinder start */ + movb %al, %ch + + /* high bits of cylinder start */ + xorb %al, %al + shrw $2, %ax + orb %al, %cl + + /* save head start */ + movb %dl, %al + + /* restore %dl */ + popw %dx + + /* head start */ + movb %al, %dh + +/* + * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory + * Call with %ah = 0x2 + * %al = number of sectors + * %ch = cylinder + * %cl = sector (bits 6-7 are high bits of "cylinder") + * %dh = head + * %dl = drive (0x80 for hard disk, 0x0 for floppy disk) + * %es:%bx = segment:offset of buffer + * Return: + * %al = 0x0 on success; err code on failure + */ + + movw $GRUB_BOOT_MACHINE_BUFFER_SEG, %bx + movw %bx, %es /* load %es segment with disk buffer */ + + xorw %bx, %bx /* %bx = 0, put it at 0 in the segment */ + movw $0x0201, %ax /* function 2 */ + int $0x13 + + jc LOCAL(read_error) + + movw %es, %bx + +LOCAL(copy_buffer): + /* + * We need to save %cx and %si because the startup code in + * kernel uses them without initializing them. + */ + pusha + pushw %ds + + movw $0x100, %cx + movw %bx, %ds + xorw %si, %si + movw $GRUB_BOOT_MACHINE_KERNEL_ADDR, %di + movw %si, %es + + cld + + rep + movsw + + popw %ds + popa + + /* boot kernel */ + jmp *(LOCAL(kernel_address)) + +/* END OF MAIN LOOP */ + +/* + * BIOS Geometry translation error (past the end of the disk geometry!). + */ +LOCAL(geometry_error): + ERR(geometry_error_string) + +/* + * Read error on the disk. + */ +LOCAL(read_error): + movw $read_error_string, %si +LOCAL(error_message): + call LOCAL(message) +LOCAL(general_error): + MSG(general_error_string) + +/* go here when you need to stop the machine hard after an error condition */ + /* tell the BIOS a boot failure, which may result in no effect */ + int $0x18 +LOCAL(stop): + jmp LOCAL(stop) + +notification_string: .asciz "GRUB " +geometry_error_string: .asciz "Geom" +hd_probe_error_string: .asciz "Hard Disk" +read_error_string: .asciz "Read" +general_error_string: .asciz " Error\r\n" + +/* + * message: write the string pointed to by %si + * + * WARNING: trashes %si, %ax, and %bx + */ + + /* + * Use BIOS "int 10H Function 0Eh" to write character in teletype mode + * %ah = 0xe %al = character + * %bh = page %bl = foreground color (graphics modes) + */ +1: + movw $0x0001, %bx + movb $0xe, %ah + int $0x10 /* display a byte */ +LOCAL(message): + lodsb + cmpb $0, %al + jne 1b /* if not end of string, jmp to display */ + ret + + /* + * Windows NT breaks compatibility by embedding a magic + * number here. + */ + +#ifdef HYBRID_BOOT + .org 0x1b0 +LOCAL(kernel_sector): + .long 1 +LOCAL(kernel_sector_high): + .long 0 +#endif + .org GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC +nt_magic: + .long 0 + .word 0 + + /* + * This is where an MBR would go if on a hard disk. The code + * here isn't even referenced unless we're on a floppy. Kinda + * sneaky, huh? + */ + + .org GRUB_BOOT_MACHINE_PART_START + +#ifndef HYBRID_BOOT + floppy +#else + scratch +#endif + + .org GRUB_BOOT_MACHINE_PART_END + +/* the last 2 bytes in the sector 0 contain the signature */ + .word GRUB_BOOT_MACHINE_SIGNATURE diff --git a/grub-core/boot/i386/pc/cdboot.S b/grub-core/boot/i386/pc/cdboot.S new file mode 100644 index 000000000..de4f80929 --- /dev/null +++ b/grub-core/boot/i386/pc/cdboot.S @@ -0,0 +1,173 @@ +/* -*-Asm-*- */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + + .file "cdboot.S" + +#define CODE_ADDR 0x6000 +#define DATA_ADDR ((GRUB_BOOT_MACHINE_KERNEL_ADDR) + 0x200) + +#define CDSEC_SHIFT 11 +#define CDBLK_LENG 16 + + .text + + .code16 + + .globl start, _start + +start: +_start: + call LOCAL(next) + +LOCAL(next): + jmp 1f + + .org 8 + +bi_pvd: + .long 0 /* LBA of primary volume descriptor. */ +bi_file: + .long 0 /* LBA of boot file. */ +bi_length: + .long 0 /* Length of boot file. */ +bi_csum: + .long 0 /* Checksum of boot file */ +bi_reserved: + .space (10*4) /* Reserved */ + +1: + popw %bx + + /* Boot from CDROM. */ + + xorw %ax, %ax + movw %ax, %ss + movw $(CODE_ADDR), %sp + movw %ax, %ds + movw %ax, %es + + movw $(0x7C00 + err_noboot_msg - start), %si + movl %cs: bi_length - LOCAL(next)(%bx), %ecx + orl %ecx, %ecx + jz LOCAL(fail) + + addl $((1 << CDSEC_SHIFT) - 1), %ecx + shrl $CDSEC_SHIFT, %ecx + + movl %cs: bi_file - LOCAL(next)(%bx), %esi + + call LOCAL(read_cdrom) + + ljmp $(DATA_ADDR >> 4), $0 + +/* + * Parameters: + * esi: start sector + * ecx: number of sectors + */ +LOCAL(read_cdrom): + xorl %eax, %eax + + /* Number of blocks to read. */ + pushw $CDBLK_LENG + + /* Block number. */ + incl %esi + pushl %eax + pushl %esi + + /* Buffer address. */ + pushw $((DATA_ADDR - 0x200)>> 4) + pushl %eax + pushw $0x10 + + xorl %edi, %edi + movw %sp, %si + +1: + movw 0x10(%si), %di + cmpl %ecx, %edi + jbe 2f + movl %ecx, %edi + +2: + mov %di, 2(%si) + + pushl %ecx + + movb $0x42, %ah + int $0x13 + + jnc 3f + + movb $0x42, %ah /* Try again. */ + int $0x13 + + jnc 3f + +2: + shrw $1, %di /* Reduce transfer size. */ + jz LOCAL(cdrom_fail) + movw %di, 0x10(%si) + movw %di, 2(%si) + movb $0x42, %ah + int $0x13 + jc 2b + +3: + + movw %di, %ax + shlw $(CDSEC_SHIFT - 4), %ax + addw %ax, 6(%si) + addl %edi, 8(%si) + + popl %ecx + subl %edi, %ecx + jnz 1b + + addw $0x12, %sp + ret + +LOCAL(cdrom_fail): + movw $(0x7C00 + err_cdfail_msg - start), %si + +LOCAL(fail): + movb $0x0e, %ah + xorw %bx, %bx +1: + lodsb (%si), %al + int $0x10 + cmpb $0, %al + jne 1b +1: jmp 1b + +err_noboot_msg: + .ascii "no boot info\0" + +err_cdfail_msg: + .ascii "cdrom read fails\0" + + .org 0x7FF + + .byte 0 diff --git a/grub-core/boot/i386/pc/diskboot.S b/grub-core/boot/i386/pc/diskboot.S new file mode 100644 index 000000000..1ee4cf5b2 --- /dev/null +++ b/grub-core/boot/i386/pc/diskboot.S @@ -0,0 +1,378 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2006,2007,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +/* + * defines for the code go here + */ + +#define MSG(x) movw $x, %si; call LOCAL(message) + + .file "diskboot.S" + + .text + + /* Tell GAS to generate 16-bit instructions so that this code works + in real mode. */ + .code16 + + .globl start, _start +start: +_start: + /* + * _start is loaded at 0x2000 and is jumped to with + * CS:IP 0:0x2000 in kernel. + */ + + /* + * we continue to use the stack for boot.img and assume that + * some registers are set to correct values. See boot.S + * for more information. + */ + + /* save drive reference first thing! */ + pushw %dx + + /* print a notification message on the screen */ + pushw %si + MSG(notification_string) + popw %si + + /* this sets up for the first run through "bootloop" */ + movw $LOCAL(firstlist), %di + + /* save the sector number of the second sector in %ebp */ + movl (%di), %ebp + + /* this is the loop for reading the rest of the kernel in */ +LOCAL(bootloop): + + /* check the number of sectors to read */ + cmpw $0, 8(%di) + + /* if zero, go to the start function */ + je LOCAL(bootit) + +LOCAL(setup_sectors): + /* check if we use LBA or CHS */ + cmpb $0, -1(%si) + + /* use CHS if zero, LBA otherwise */ + je LOCAL(chs_mode) + + /* load logical sector start */ + movl (%di), %ebx + movl 4(%di), %ecx + + /* the maximum is limited to 0x7f because of Phoenix EDD */ + xorl %eax, %eax + movb $0x7f, %al + + /* how many do we really want to read? */ + cmpw %ax, 8(%di) /* compare against total number of sectors */ + + /* which is greater? */ + jg 1f + + /* if less than, set to total */ + movw 8(%di), %ax + +1: + /* subtract from total */ + subw %ax, 8(%di) + + /* add into logical sector start */ + addl %eax, (%di) + adcl $0, 4(%di) + + /* set up disk address packet */ + + /* the size and the reserved byte */ + movw $0x0010, (%si) + + /* the number of sectors */ + movw %ax, 2(%si) + + /* the absolute address */ + movl %ebx, 8(%si) + movl %ecx, 12(%si) + + /* the segment of buffer address */ + movw $GRUB_BOOT_MACHINE_BUFFER_SEG, 6(%si) + + /* save %ax from destruction! */ + pushw %ax + + /* the offset of buffer address */ + movw $0, 4(%si) + +/* + * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory + * Call with %ah = 0x42 + * %dl = drive number + * %ds:%si = segment:offset of disk address packet + * Return: + * %al = 0x0 on success; err code on failure + */ + + movb $0x42, %ah + int $0x13 + + jc LOCAL(read_error) + + movw $GRUB_BOOT_MACHINE_BUFFER_SEG, %bx + jmp LOCAL(copy_buffer) + +LOCAL(chs_mode): + /* load logical sector start (top half) */ + movl 4(%di), %eax + orl %eax, %eax + jnz LOCAL(geometry_error) + + /* load logical sector start (bottom half) */ + movl (%di), %eax + + /* zero %edx */ + xorl %edx, %edx + + /* divide by number of sectors */ + divl (%si) + + /* save sector start */ + movb %dl, 10(%si) + + xorl %edx, %edx /* zero %edx */ + divl 4(%si) /* divide by number of heads */ + + /* save head start */ + movb %dl, 11(%si) + + /* save cylinder start */ + movw %ax, 12(%si) + + /* do we need too many cylinders? */ + cmpw 8(%si), %ax + jge LOCAL(geometry_error) + + /* determine the maximum sector length of this read */ + movw (%si), %ax /* get number of sectors per track/head */ + + /* subtract sector start */ + subb 10(%si), %al + + /* how many do we really want to read? */ + cmpw %ax, 8(%di) /* compare against total number of sectors */ + + + /* which is greater? */ + jg 2f + + /* if less than, set to total */ + movw 8(%di), %ax + +2: + /* subtract from total */ + subw %ax, 8(%di) + + /* add into logical sector start */ + addl %eax, (%di) + adcl $0, 4(%di) + +/* + * This is the loop for taking care of BIOS geometry translation (ugh!) + */ + + /* get high bits of cylinder */ + movb 13(%si), %dl + + shlb $6, %dl /* shift left by 6 bits */ + movb 10(%si), %cl /* get sector */ + + incb %cl /* normalize sector (sectors go + from 1-N, not 0-(N-1) ) */ + orb %dl, %cl /* composite together */ + movb 12(%si), %ch /* sector+hcyl in cl, cylinder in ch */ + + /* restore %dx */ + popw %dx + pushw %dx + + /* head number */ + movb 11(%si), %dh + + pushw %ax /* save %ax from destruction! */ + +/* + * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory + * Call with %ah = 0x2 + * %al = number of sectors + * %ch = cylinder + * %cl = sector (bits 6-7 are high bits of "cylinder") + * %dh = head + * %dl = drive (0x80 for hard disk, 0x0 for floppy disk) + * %es:%bx = segment:offset of buffer + * Return: + * %al = 0x0 on success; err code on failure + */ + + movw $GRUB_BOOT_MACHINE_BUFFER_SEG, %bx + movw %bx, %es /* load %es segment with disk buffer */ + + xorw %bx, %bx /* %bx = 0, put it at 0 in the segment */ + movb $0x2, %ah /* function 2 */ + int $0x13 + + jc LOCAL(read_error) + + /* save source segment */ + movw %es, %bx + +LOCAL(copy_buffer): + + /* load addresses for copy from disk buffer to destination */ + movw 10(%di), %es /* load destination segment */ + + /* restore %ax */ + popw %ax + + /* determine the next possible destination address (presuming + 512 byte sectors!) */ + shlw $5, %ax /* shift %ax five bits to the left */ + addw %ax, 10(%di) /* add the corrected value to the destination + address for next time */ + + /* save addressing regs */ + pusha + pushw %ds + + /* get the copy length */ + shlw $3, %ax + movw %ax, %cx + + xorw %di, %di /* zero offset of destination addresses */ + xorw %si, %si /* zero offset of source addresses */ + movw %bx, %ds /* restore the source segment */ + + cld /* sets the copy direction to forward */ + + /* perform copy */ + rep /* sets a repeat */ + movsw /* this runs the actual copy */ + + /* restore addressing regs and print a dot with correct DS + (MSG modifies SI, which is saved, and unused AX and BX) */ + popw %ds + MSG(notification_step) + popa + + /* check if finished with this dataset */ + cmpw $0, 8(%di) + jne LOCAL(setup_sectors) + + /* update position to load from */ + subw $GRUB_BOOT_MACHINE_LIST_SIZE, %di + + /* jump to bootloop */ + jmp LOCAL(bootloop) + +/* END OF MAIN LOOP */ + +LOCAL(bootit): + /* print a newline */ + MSG(notification_done) + popw %dx /* this makes sure %dl is our "boot" drive */ + ljmp $0, $(GRUB_BOOT_MACHINE_KERNEL_ADDR + 0x200) + + +/* + * BIOS Geometry translation error (past the end of the disk geometry!). + */ +LOCAL(geometry_error): + MSG(geometry_error_string) + jmp LOCAL(general_error) + +/* + * Read error on the disk. + */ +LOCAL(read_error): + MSG(read_error_string) + +LOCAL(general_error): + MSG(general_error_string) + +/* go here when you need to stop the machine hard after an error condition */ +LOCAL(stop): jmp LOCAL(stop) + +notification_string: .asciz "loading" + +notification_step: .asciz "." +notification_done: .asciz "\r\n" + +geometry_error_string: .asciz "Geom" +read_error_string: .asciz "Read" +general_error_string: .asciz " Error" + +/* + * message: write the string pointed to by %si + * + * WARNING: trashes %si, %ax, and %bx + */ + + /* + * Use BIOS "int 10H Function 0Eh" to write character in teletype mode + * %ah = 0xe %al = character + * %bh = page %bl = foreground color (graphics modes) + */ +1: + movw $0x0001, %bx + movb $0xe, %ah + int $0x10 /* display a byte */ + + incw %si +LOCAL(message): + movb (%si), %al + cmpb $0, %al + jne 1b /* if not end of string, jmp to display */ + ret + +/* + * This area is an empty space between the main body of code below which + * grows up (fixed after compilation, but between releases it may change + * in size easily), and the lists of sectors to read, which grows down + * from a fixed top location. + */ + + .word 0 + .word 0 + + .org 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE +LOCAL(firstlist): /* this label has to be before the first list entry!!! */ + /* fill the first data listing with the default */ +blocklist_default_start: + /* this is the sector start parameter, in logical sectors from + the start of the disk, sector 0 */ + .long 2, 0 +blocklist_default_len: + /* this is the number of sectors to read. grub-mkimage + will fill this up */ + .word 0 +blocklist_default_seg: + /* this is the segment of the starting address to load the data into */ + .word (GRUB_BOOT_MACHINE_KERNEL_SEG + 0x20) diff --git a/grub-core/boot/i386/pc/lnxboot.S b/grub-core/boot/i386/pc/lnxboot.S new file mode 100644 index 000000000..2dda0e06b --- /dev/null +++ b/grub-core/boot/i386/pc/lnxboot.S @@ -0,0 +1,295 @@ +/* -*-Asm-*- */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + + .file "lnxboot.S" + +#define CODE_ADDR 0x6000 +#define CODE_SECTORS 1 +#define DATA_ADDR ((GRUB_BOOT_MACHINE_KERNEL_ADDR) + 0x200) + +#define BLCK_LENG 0x4000 + + .text + + .code16 + + .globl start, _start + +data_start: + xorl %ebp, %ebp + jmp LOCAL(linux_next) + + .org 0x1F1 + +setup_sects: + .byte CODE_SECTORS +root_flags: + .word 0 +syssize: + .word 0 +swap_dev: + .word 0 +ram_size: + .word 0 +vid_mode: + .word 0 +root_dev: + .word 0 +boot_flag: + .word 0xAA55 + +start: +_start: + + jmp LOCAL(linux_init) + + .ascii "HdrS" /* Header signature. */ + .word 0x0203 /* Header version number. */ + +realmode_swtch: + .word 0, 0 /* default_switch, SETUPSEG. */ +start_sys_seg: + .word 0x1000 /* Obsolete. */ +version_ptr: + .word 0 /* Version string ptr. */ +type_of_loader: + .byte 0 /* Filled in by boot loader. */ +loadflags: + .byte 1 /* Please load high. */ +setup_move_size: + .word 0 /* Unused. */ +code32_start: + .long 0x100000 /* 32-bit start address. */ +ramdisk_image: + .long 0 /* Loaded ramdisk image address. */ +ramdisk_size: + .long 0 /* Size of loaded ramdisk. */ +bootsect_kludge: + .word 0, 0 +heap_end_ptr: + .word 0 +pad1: + .word 0 +cmd_line_ptr: + .long 0 /* Command line. */ +ramdisk_max: + .long 0xffffffff /* Highest allowed ramdisk address. */ + +gdt: + .long 0, 0, 0, 0 /* Must be zero. */ + .word 0xffff /* 64 K segment size. */ +gdt_src1: + .byte 0, 0 ,0 /* Low 24 bits of source address. */ + .byte 0x93 /* Access rights. */ + .byte 0 /* Extended access rights. */ +gdt_src2: + .byte 0 /* High 8 bits of source address. */ + .word 0xffff /* 64 K segment size. */ +gdt_dst1: + .byte 0, 0, 0 /* Low 24 bits of target address. */ + .byte 0x93 /* Access rights. */ + .byte 0 /* Extended access rights. */ +gdt_dst2: + .byte 0 /* High 8 bits of source address. */ + .long 0, 0, 0, 0 /* More space for the BIOS. */ + +reg_edx: + .byte 0x80, 0, 0xFF, 0xFF + +data_leng: + .long 0 + +LOCAL(linux_init): + movw %cs:(reg_edx - start), %dx + movl %cs:(code32_start - start), %ebp + +LOCAL(linux_next): + + call LOCAL(normalize) + +LOCAL(normalize): + popw %bx + subw $(LOCAL(normalize) - start), %bx + shrw $4, %bx + movw %cs, %ax + addw %bx, %ax + pushw %ax + pushw $(real_code - start) + lret /* Jump to real_code. */ + +real_code: + subw $0x20, %ax + movw %ax, %ds + movw (setup_sects - data_start), %cx + shlw $7, %cx + + /* Setup stack. */ + + xorw %si, %si + movw %si, %ss + movw $(CODE_ADDR), %sp + + /* Move itself to 0:CODE_ADDR. */ + + cld + movw %cs, %ax + movw %ax, %ds + movw $(CODE_ADDR >> 4), %ax + movw %ax, %es + movw %si, %di + + rep + movsl + ljmp $(CODE_ADDR >> 4), $(real_code_2 - start) + +real_code_2: + + xchgl %ebp, %esi + orl %esi, %esi + jnz 1f + movw %ds, %si + shll $4, %esi + addl %ebp, %esi +1: + + pushw %es + popw %ds + + movl $0x1000, %ecx + addl $0x200, %esi + movl $DATA_ADDR, %edi + + call LOCAL(move_memory) + + /* Check for multiboot signature. */ + movl $DATA_ADDR, %edi +3: + movl %ss:(%edi), %eax + cmpl $MULTIBOOT_HEADER_MAGIC, %eax + jz 1f + addl $4, %edi + cmpl $(DATA_ADDR + 0x1000), %edi + jne 3b + + movl (ramdisk_image - start), %esi + movl (ramdisk_size - start), %ecx + movl $(DATA_ADDR - 0x200), %edi + jmp 2f + +1: + + movl $(DATA_ADDR + 0x1000), %edi + movl %ss:(DATA_ADDR + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE), %ecx + addl $GRUB_DECOMPRESSOR_I386_PC_MAX_DECOMPRESSOR_SIZE, %ecx + +2: + call LOCAL(move_memory) + + movb %dh, %ss:(DATA_ADDR + GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE + 2) + movb (reg_edx + 2 - start), %dh + movb %dh, %ss:(DATA_ADDR + GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE + 1) + + movb $0xFF, %dh + + ljmp $(DATA_ADDR >> 4), $0 + +/* + * Parameters: + * esi: source address + * edi: target address + * ecx: number of bytes + */ + +LOCAL(move_memory): + incl %ecx + andb $0xFE, %cl + pushw %dx +1: + pushl %esi + pushl %edi + pushl %ecx + cmpl $BLCK_LENG, %ecx + jbe 2f + movl $BLCK_LENG, %ecx +2: + pushl %ecx + + movl %esi, %eax + movw %si, (gdt_src1 - start) + shrl $16, %eax + movb %al, (gdt_src1 + 2 - start) + movb %ah, (gdt_src2 - start) + + movl %edi, %eax + movw %di, (gdt_dst1 - start) + shrl $16, %eax + movb %al, (gdt_dst1 + 2 - start) + movb %ah, (gdt_dst2 - start) + + movw $(gdt - start), %si + movb $0x87, %ah + shrw $1, %cx + + int $0x15 + + popl %eax + popl %ecx + popl %edi + popl %esi + + jnc 2f + movw $(err_int15_msg - start), %si + jmp LOCAL(fail) + +2: + + addl %eax, %esi + addl %eax, %edi + subl %eax, %ecx + jnz 1b + + + popw %dx + ret + +/* + * Parameters: + * si: message + */ + +LOCAL(fail): + movb $0x0e, %ah + xorw %bx, %bx +1: + lodsb (%si), %al + int $0x10 + cmpb $0, %al + jne 1b +1: jmp 1b + +err_int15_msg: + .ascii "move memory fails\0" + + .org (CODE_SECTORS * 512 + 512) diff --git a/grub-core/boot/i386/pc/lzma_decode.S b/grub-core/boot/i386/pc/lzma_decode.S new file mode 100644 index 000000000..88c668d5e --- /dev/null +++ b/grub-core/boot/i386/pc/lzma_decode.S @@ -0,0 +1,614 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define FIXED_PROPS + +#define LZMA_BASE_SIZE 1846 +#define LZMA_LIT_SIZE 768 + +#define LZMA_PROPERTIES_SIZE 5 + +#define kNumTopBits 24 +#define kTopValue (1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + + +#define kNumStates 12 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#define out_size 8(%ebp) + +#define now_pos -4(%ebp) +#define prev_byte -8(%ebp) +#define range -12(%ebp) +#define code -16(%ebp) +#define state -20(%ebp) +#define rep0 -24(%ebp) +#define rep1 -28(%ebp) +#define rep2 -32(%ebp) +#define rep3 -36(%ebp) + +#ifdef FIXED_PROPS + +#define FIXED_LC 3 +#define FIXED_LP 0 +#define FIXED_PB 2 + +#define POS_STATE_MASK ((1 << (FIXED_PB)) - 1) +#define LIT_POS_MASK ((1 << (FIXED_LP)) - 1) + +#define LOCAL_SIZE 36 + +#else + +#define lc (%ebx) +#define lp 4(%ebx) +#define pb 8(%ebx) +#define probs 12(%ebx) + +#define pos_state_mask -40(%ebp) +#define lit_pos_mask -44(%ebp) + +#define LOCAL_SIZE 44 + +#endif + +RangeDecoderBitDecode: +#ifdef FIXED_PROPS + leal (%ebx, %eax, 4), %eax +#else + shll $2, %eax + addl probs, %eax +#endif + + movl %eax, %ecx + movl (%ecx), %eax + + movl range, %edx + shrl $kNumBitModelTotalBits, %edx + mull %edx + + cmpl code, %eax + jbe 1f + + movl %eax, range + movl $kBitModelTotal, %edx + subl (%ecx), %edx + shrl $kNumMoveBits, %edx + addl %edx, (%ecx) + clc +3: + pushf + cmpl $kTopValue, range + jnc 2f + shll $8, code + lodsb + movb %al, code + shll $8, range +2: + popf + ret +1: + subl %eax, range + subl %eax, code + movl (%ecx), %edx + shrl $kNumMoveBits, %edx + subl %edx, (%ecx) + stc + jmp 3b + +RangeDecoderBitTreeDecode: +RangeDecoderReverseBitTreeDecode: + movzbl %cl, %ecx + xorl %edx, %edx + pushl %edx + incl %edx + pushl %edx + +1: + pushl %eax + pushl %ecx + pushl %edx + + addl %edx, %eax + call RangeDecoderBitDecode + + popl %edx + popl %ecx + + jnc 2f + movl 4(%esp), %eax + orl %eax, 8(%esp) + stc + +2: + adcl %edx, %edx + popl %eax + + shll $1, (%esp) + loop 1b + + popl %ecx + subl %ecx, %edx /* RangeDecoderBitTreeDecode */ + popl %ecx /* RangeDecoderReverseBitTreeDecode */ + ret + +LzmaLenDecode: + pushl %eax + addl $LenChoice, %eax + call RangeDecoderBitDecode + popl %eax + jc 1f + pushl $0 + movb $kLenNumLowBits, %cl + addl $LenLow, %eax +2: + movl 12(%esp), %edx + shll %cl, %edx + addl %edx, %eax +3: + + call RangeDecoderBitTreeDecode + popl %eax + addl %eax, %edx + ret + +1: + pushl %eax + addl $LenChoice2, %eax + call RangeDecoderBitDecode + popl %eax + jc 1f + pushl $kLenNumLowSymbols + movb $kLenNumMidBits, %cl + addl $LenMid, %eax + jmp 2b + +1: + pushl $(kLenNumLowSymbols + kLenNumMidSymbols) + addl $LenHigh, %eax + movb $kLenNumHighBits, %cl + jmp 3b + +WriteByte: + movb %al, prev_byte + stosb + incl now_pos + ret + +/* + * int LzmaDecode(CLzmaDecoderState *vs, + * const unsigned char *inStream, + * unsigned char *outStream, + * SizeT outSize); + */ + +_LzmaDecodeA: + + pushl %ebp + movl %esp, %ebp + subl $LOCAL_SIZE, %esp + +#ifndef ASM_FILE + pushl %esi + pushl %edi + pushl %ebx + + movl %eax, %ebx + movl %edx, %esi + pushl %ecx +#else + pushl %edi +#endif + + cld + +#ifdef FIXED_PROPS + movl %ebx, %edi + movl $(Literal + (LZMA_LIT_SIZE << (FIXED_LC + FIXED_LP))), %ecx +#else + movl $LZMA_LIT_SIZE, %eax + movb lc, %cl + addb lp, %cl + shll %cl, %eax + addl $Literal, %eax + movl %eax, %ecx + movl probs, %edi +#endif + + movl $(kBitModelTotal >> 1), %eax + + rep + stosl + + popl %edi + + xorl %eax, %eax + movl %eax, now_pos + movl %eax, prev_byte + movl %eax, state + + incl %eax + movl %eax, rep0 + movl %eax, rep1 + movl %eax, rep2 + movl %eax, rep3 + +#ifndef FIXED_PROPS + movl %eax, %edx + movb pb, %cl + shll %cl, %edx + decl %edx + movl %edx, pos_state_mask + + movl %eax, %edx + movb lp, %cl + shll %cl, %edx + decl %edx + movl %edx, lit_pos_mask; +#endif + + /* RangeDecoderInit */ + negl %eax + movl %eax, range + + incl %eax + movb $5, %cl + +1: + shll $8, %eax + lodsb + loop 1b + + movl %eax, code + +lzma_decode_loop: + movl now_pos, %eax + cmpl out_size, %eax + + jb 1f + +#ifndef ASM_FILE + xorl %eax, %eax + + popl %ebx + popl %edi + popl %esi +#endif + + movl %ebp, %esp + popl %ebp + ret + +1: +#ifdef FIXED_PROPS + andl $POS_STATE_MASK, %eax +#else + andl pos_state_mask, %eax +#endif + pushl %eax /* posState */ + movl state, %edx + shll $kNumPosBitsMax, %edx + addl %edx, %eax + pushl %eax /* (state << kNumPosBitsMax) + posState */ + + call RangeDecoderBitDecode + jc 1f + + movl now_pos, %eax + +#ifdef FIXED_PROPS + andl $LIT_POS_MASK, %eax + shll $FIXED_LC, %eax + movl prev_byte, %edx + shrl $(8 - FIXED_LC), %edx +#else + andl lit_pos_mask, %eax + movb lc, %cl + shll %cl, %eax + negb %cl + addb $8, %cl + movl prev_byte, %edx + shrl %cl, %edx +#endif + + addl %edx, %eax + movl $LZMA_LIT_SIZE, %edx + mull %edx + addl $Literal, %eax + pushl %eax + + incl %edx /* edx = 1 */ + + movl rep0, %eax + negl %eax + pushl (%edi, %eax) /* matchByte */ + + cmpb $kNumLitStates, state + jb 5f + + /* LzmaLiteralDecodeMatch */ + +3: + cmpl $0x100, %edx + jae 4f + + xorl %eax, %eax + shlb $1, (%esp) + adcl %eax, %eax + + pushl %eax + pushl %edx + + shll $8, %eax + leal 0x100(%edx, %eax), %eax + addl 12(%esp), %eax + call RangeDecoderBitDecode + + setc %al + popl %edx + adcl %edx, %edx + + popl %ecx + cmpb %cl, %al + jz 3b + +5: + + /* LzmaLiteralDecode */ + + cmpl $0x100, %edx + jae 4f + + pushl %edx + movl %edx, %eax + addl 8(%esp), %eax + call RangeDecoderBitDecode + popl %edx + adcl %edx, %edx + jmp 5b + +4: + addl $16, %esp + + movb %dl, %al + call WriteByte + + movb state, %al + cmpb $4, %al + jae 2f + xorb %al, %al + jmp 3f +2: + subb $3, %al + cmpb $7, %al + jb 3f + subb $3, %al +3: + movb %al, state + jmp lzma_decode_loop + +1: + movl state, %eax + addl $IsRep, %eax + call RangeDecoderBitDecode + jnc 1f + + movl state, %eax + addl $IsRepG0, %eax + call RangeDecoderBitDecode + jc 10f + + movl (%esp), %eax + addl $IsRep0Long, %eax + call RangeDecoderBitDecode + jc 20f + + cmpb $7, state + movb $9, state + jb 100f + addb $2, state +100: + + movl $1, %ecx + +3: + movl rep0, %edx + negl %edx + +4: + movb (%edi, %edx), %al + call WriteByte + loop 4b + + popl %eax + popl %eax + jmp lzma_decode_loop + +10: + movl state, %eax + addl $IsRepG1, %eax + call RangeDecoderBitDecode + movl rep1, %edx + jnc 100f + + movl state, %eax + addl $IsRepG2, %eax + call RangeDecoderBitDecode + movl rep2, %edx + jnc 1000f + movl rep2, %edx + xchgl rep3, %edx +1000: + pushl rep1 + popl rep2 +100: + xchg rep0, %edx + movl %edx, rep1 +20: + + movl $RepLenCoder, %eax + call LzmaLenDecode + + cmpb $7, state + movb $8, state + jb 100f + addb $3, state +100: + jmp 2f + +1: + movl rep0, %eax + xchgl rep1, %eax + xchgl rep2, %eax + movl %eax, rep3 + + cmpb $7, state + movb $7, state + jb 10f + addb $3, state +10: + + movl $LenCoder, %eax + call LzmaLenDecode + pushl %edx + + movl $(kNumLenToPosStates - 1), %eax + cmpl %eax, %edx + jbe 100f + movl %eax, %edx +100: + movb $kNumPosSlotBits, %cl + shll %cl, %edx + leal PosSlot(%edx), %eax + call RangeDecoderBitTreeDecode + + movl %edx, rep0 + cmpl $kStartPosModelIndex, %edx + jb 100f + + movl %edx, %ecx + shrl $1, %ecx + decl %ecx + + movzbl %dl, %eax + andb $1, %al + orb $2, %al + shll %cl, %eax + movl %eax, rep0 + + cmpl $kEndPosModelIndex, %edx + jae 200f + movl rep0, %eax + addl $(SpecPos - 1), %eax + subl %edx, %eax + jmp 300f +200: + + subb $kNumAlignBits, %cl + + /* RangeDecoderDecodeDirectBits */ + xorl %edx, %edx + +1000: + shrl $1, range + shll $1, %edx + + movl range, %eax + cmpl %eax, code + jb 2000f + subl %eax, code + orb $1, %dl +2000: + + cmpl $kTopValue, %eax + jae 3000f + shll $8, range + shll $8, code + lodsb + movb %al, code + +3000: + loop 1000b + + movb $kNumAlignBits, %cl + shll %cl, %edx + addl %edx, rep0 + + movl $Align, %eax + +300: + call RangeDecoderReverseBitTreeDecode + addl %ecx, rep0 + +100: + incl rep0 + popl %edx + +2: + + addl $kMatchMinLen, %edx + movl %edx, %ecx + + jmp 3b diff --git a/grub-core/boot/i386/pc/pxeboot.S b/grub-core/boot/i386/pc/pxeboot.S new file mode 100644 index 000000000..b695b24d0 --- /dev/null +++ b/grub-core/boot/i386/pc/pxeboot.S @@ -0,0 +1,42 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2005,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .file "pxeboot.S" + .text + + /* Start with the prehistoric environment... */ + .code16 + + /* Let's go */ +.globl start, _start; +_start: +start: + + /* Use drive number 0x7F for PXE */ + movb $GRUB_BOOT_MACHINE_PXE_DL, %dl + + /* Jump to the real world */ + ljmp $0, $0x8200 + + /* This region is a junk. Do you say that this is wasteful? + But I like that the memory layout of the body is consistent + among different kernels rather than scamping just for 1.5KB. */ + .org 0x8200 - 0x7C00 - 0x200 - 1 + .byte 0 diff --git a/grub-core/boot/i386/pc/startup_raw.S b/grub-core/boot/i386/pc/startup_raw.S new file mode 100644 index 000000000..8bce7985c --- /dev/null +++ b/grub-core/boot/i386/pc/startup_raw.S @@ -0,0 +1,360 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008,2009,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#define ABS(x) ((x) - LOCAL (base) + GRUB_BOOT_MACHINE_KERNEL_ADDR + 0x200) + + .file "startup_raw.S" + + .text + + /* Tell GAS to generate 16-bit instructions so that this code works + in real mode. */ + .code16 + + .globl start, _start +start: +_start: +LOCAL (base): + /* + * Guarantee that "main" is loaded at 0x0:0x8200. + */ +#ifdef __APPLE__ + ljmp $0, $(ABS(LOCAL (codestart)) - 0x10000) +#else + ljmp $0, $ABS(LOCAL (codestart)) +#endif + + /* + * This is a special data area. + */ + + .org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE +LOCAL(compressed_size): + .long 0 + .org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE +LOCAL(uncompressed_size): + .long 0 + + .org GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY +reed_solomon_redundancy: + .long 0 + .org GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH + .short (LOCAL(reed_solomon_part) - _start) + +/* + * This is the area for all of the special variables. + */ + .org GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE +LOCAL(boot_dev): + .byte 0xFF, 0xFF, 0xFF +LOCAL(boot_drive): + .byte 0x00 + +/* the real mode code continues... */ +LOCAL (codestart): + cli /* we're not safe here! */ + + /* set up %ds, %ss, and %es */ + xorw %ax, %ax + movw %ax, %ds + movw %ax, %ss + movw %ax, %es + + /* set up the real mode/BIOS stack */ + movl $GRUB_MEMORY_MACHINE_REAL_STACK, %ebp + movl %ebp, %esp + + sti /* we're safe again */ + + /* save the boot drive */ + movb %dl, LOCAL(boot_drive) + + /* reset disk system (%ah = 0) */ + int $0x13 + + /* transition to protected mode */ + calll real_to_prot + + /* The ".code32" directive takes GAS out of 16-bit mode. */ + .code32 + + cld + call grub_gate_a20 + + movl LOCAL(compressed_size), %edx +#ifdef __APPLE__ + addl $decompressor_end, %edx + subl $(LOCAL(reed_solomon_part)), %edx +#else + addl $(LOCAL(decompressor_end) - LOCAL(reed_solomon_part)), %edx +#endif + movl reed_solomon_redundancy, %ecx + leal LOCAL(reed_solomon_part), %eax + cld + call EXT_C (grub_reed_solomon_recover) + jmp post_reed_solomon + +#include "../../../kern/i386/realmode.S" + +#include + + .text + +/* + * grub_gate_a20(void) + * + * Gate address-line 20 for high memory. + * + * This routine is probably overconservative in what it does, but so what? + * + * It also eats any keystrokes in the keyboard buffer. :-( + */ + +grub_gate_a20: +gate_a20_test_current_state: + /* first of all, test if already in a good state */ + call gate_a20_check_state + testb %al, %al + jnz gate_a20_try_bios + ret + +gate_a20_try_bios: + /* second, try a BIOS call */ + pushl %ebp + call prot_to_real + + .code16 + movw $0x2401, %ax + int $0x15 + + calll real_to_prot + .code32 + + popl %ebp + call gate_a20_check_state + testb %al, %al + jnz gate_a20_try_system_control_port_a + ret + +gate_a20_try_system_control_port_a: + /* + * In macbook, the keyboard test would hang the machine, so we move + * this forward. + */ + /* fourth, try the system control port A */ + inb $0x92 + andb $(~0x03), %al + orb $0x02, %al + outb $0x92 + + call gate_a20_check_state + testb %al, %al + jnz gate_a20_try_keyboard_controller + ret + +gate_a20_flush_keyboard_buffer: + inb $0x64 + andb $0x02, %al + jnz gate_a20_flush_keyboard_buffer +2: + inb $0x64 + andb $0x01, %al + jz 3f + inb $0x60 + jmp 2b +3: + ret + +gate_a20_try_keyboard_controller: + /* third, try the keyboard controller */ + call gate_a20_flush_keyboard_buffer + + movb $0xd1, %al + outb $0x64 +4: + inb $0x64 + andb $0x02, %al + jnz 4b + + movb $0xdf, %al + outb $0x60 + call gate_a20_flush_keyboard_buffer + + /* output a dummy command (USB keyboard hack) */ + movb $0xff, %al + outb $0x64 + call gate_a20_flush_keyboard_buffer + + call gate_a20_check_state + testb %al, %al + /* everything failed, so restart from the beginning */ + jnz gate_a20_try_bios + ret + +gate_a20_check_state: + /* iterate the checking for a while */ + movl $100, %ecx +1: + call 3f + testb %al, %al + jz 2f + loop 1b +2: + ret +3: + pushl %ebx + pushl %ecx + xorl %eax, %eax + /* compare the byte at 0x8000 with that at 0x108000 */ + movl $GRUB_BOOT_MACHINE_KERNEL_ADDR, %ebx + pushl %ebx + /* save the original byte in CL */ + movb (%ebx), %cl + /* store the value at 0x108000 in AL */ + addl $0x100000, %ebx + movb (%ebx), %al + /* try to set one less value at 0x8000 */ + popl %ebx + movb %al, %ch + decb %ch + movb %ch, (%ebx) + /* serialize */ + outb %al, $0x80 + outb %al, $0x80 + /* obtain the value at 0x108000 in CH */ + pushl %ebx + addl $0x100000, %ebx + movb (%ebx), %ch + /* this result is 0 if A20 is on or 1 if it is off */ + subb %ch, %al + /* restore the original */ + popl %ebx + movb %cl, (%ebx) + popl %ecx + popl %ebx + ret + +LOCAL(reed_solomon_part): + +/* + * Support for booting GRUB from a Multiboot boot loader (e.g. GRUB itself). + * This uses the a.out kludge to load raw binary to the area starting at 1MB, + * and relocates itself after loaded. + */ + .p2align 2 /* force 4-byte alignment */ +multiboot_header: + /* magic */ + .long 0x1BADB002 + /* flags */ + .long (1 << 16) + /* checksum */ + .long -0x1BADB002 - (1 << 16) + /* header addr */ + .long multiboot_header - _start + 0x100000 + 0x200 + /* load addr */ + .long 0x100000 + /* load end addr */ + .long 0 + /* bss end addr */ + .long 0 + /* entry addr */ + .long multiboot_entry - _start + 0x100000 + 0x200 + +multiboot_entry: + .code32 + /* obtain the boot device */ + movl 12(%ebx), %edx + + movl $GRUB_MEMORY_MACHINE_PROT_STACK, %ebp + movl %ebp, %esp + + /* relocate the code */ +#ifdef __APPLE__ + LOCAL(compressed_size_offset) = LOCAL(compressed_size) - LOCAL(base) + movl $0x200, %ecx + addl $decompressor_end, %ecx + subl $LOCAL(base), %ecx + addl LOCAL(compressed_size_offset) + 0x100000 + 0x200, %ecx +#else + movl $(LOCAL(decompressor_end) - _start + 0x200), %ecx + addl LOCAL(compressed_size) - _start + 0x100000 + 0x200, %ecx +#endif + movl $0x100000, %esi + movl $GRUB_BOOT_MACHINE_KERNEL_ADDR, %edi + cld + rep + movsb + /* jump to the real address */ + movl $multiboot_trampoline, %eax + jmp *%eax + +multiboot_trampoline: + /* fill the boot information */ + movl %edx, LOCAL(boot_dev) + shrl $24, %edx + /* enter the usual booting */ + call prot_to_real + .code16 + jmp LOCAL (codestart) + .code32 + +post_reed_solomon: + +#ifdef ENABLE_LZMA + movl $GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR, %edi +#ifdef __APPLE__ + movl $decompressor_end, %esi +#else + movl $LOCAL(decompressor_end), %esi +#endif + pushl %edi + movl LOCAL (uncompressed_size), %ecx + leal (%edi, %ecx), %ebx + /* Don't remove this push: it's an argument. */ + push %ecx + call _LzmaDecodeA + pop %ecx + /* _LzmaDecodeA clears DF, so no need to run cld */ + popl %esi +#endif + + movl LOCAL(boot_dev), %edx + movl $prot_to_real, %edi + movl $real_to_prot, %ecx + movl $LOCAL(realidt), %eax + jmp *%esi + +#ifdef ENABLE_LZMA +#include "lzma_decode.S" +#endif + + .p2align 4 + +#ifdef __APPLE__ + .zerofill __DATA, __aa_before_bss, decompressor_end, 10, 0 +#else + .bss +LOCAL(decompressor_end): +#endif diff --git a/grub-core/boot/i386/qemu/boot.S b/grub-core/boot/i386/qemu/boot.S new file mode 100644 index 000000000..8c3a1db71 --- /dev/null +++ b/grub-core/boot/i386/qemu/boot.S @@ -0,0 +1,74 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + + .text + .code16 + .globl _start +_start: + /* Disable interrupts. */ + cli + + jmp 1f + + .org GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR +VARIABLE(grub_core_entry_addr) + .long 0 +1: + + /* Set up %ds, %ss, and %es. */ + xorw %ax, %ax + movw %ax, %ds + movw %ax, %ss + movw %ax, %es + + /* Set up the real mode stack. */ + movl $GRUB_MEMORY_MACHINE_REAL_STACK, %esp + + /* Transition to protected mode. We use pushl to force generation + of a flat return address. */ + pushl $1f + jmp real_to_prot + .code32 +1: + /* Ensure A20 is enabled. We're in qemu, so control port A works + and there is no need to wait since there is no real logic, it's + all emulated. */ + inb $0x92 + andb $(~0x03), %al + orb $0x02, %al + outb $0x92 + movl EXT_C(grub_core_entry_addr), %edx + jmp *%edx + +#include "../../../kern/i386/realmode.S" + + /* Intel, in its infinite wisdom, decided to put the i8086 entry point + *right here* and this is why we need this kludge. */ + + .org GRUB_BOOT_MACHINE_SIZE - 16 + + .code16 + + jmp _start + .org GRUB_BOOT_MACHINE_SIZE diff --git a/grub-core/boot/mips/loongson/fuloong2f.S b/grub-core/boot/mips/loongson/fuloong2f.S new file mode 100644 index 000000000..a88c81efe --- /dev/null +++ b/grub-core/boot/mips/loongson/fuloong2f.S @@ -0,0 +1,2 @@ +#define FULOONG2F 1 +#include "fwstart.S" diff --git a/grub-core/boot/mips/loongson/fwstart.S b/grub-core/boot/mips/loongson/fwstart.S new file mode 100644 index 000000000..28c634614 --- /dev/null +++ b/grub-core/boot/mips/loongson/fwstart.S @@ -0,0 +1,756 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef FULOONG2F +#include +#define GRUB_SM712_REG_BASE 0x700000 +#define GRUB_SM712_PCIID 0x0712126f +#endif + +#ifdef FULOONG2F +#define GRUB_MACHINE_SERIAL_PORT GRUB_MACHINE_SERIAL_PORT2 +#define GRUB_MACHINE_SERIAL_DIVISOR_115200 GRUB_MACHINE_SERIAL_PORT2_DIVISOR_115200 +#else +#define GRUB_MACHINE_SERIAL_PORT GRUB_MACHINE_SERIAL_PORT0 +#define GRUB_MACHINE_SERIAL_DIVISOR_115200 GRUB_MACHINE_SERIAL_PORT0_DIVISOR_115200 +#endif + + .set noreorder + .set noat + .set nomacro + .set mips3 + + .global start,_start,__start +start: +_start: +__start: + /* Put serial init as soon as possible. But on Fuloong2f serial is past + Geode, so on Fuloong2f we need Geode first. + */ +#ifndef FULOONG2F + bal serial_hw_init + nop +#endif + + /* Find CS5536 controller. */ + /* $t4 chooses device in priority encoding. */ + /* Resulting value is kept in GRUB_MACHINE_PCI_CONF_CTRL_REG. + This way we don't need to sacrifice a register for it. */ +retry_cs5536: + /* We have only one bus (0). Function is 0. */ + lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F) + lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F) + lui $t3, %hi(GRUB_CS5536_PCIID) + addiu $t3, $t3, %lo(GRUB_CS5536_PCIID) + ori $t4, $zero, 1 +1: + andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES_2F) - 1) + /* In case of failure try again. CS5536 may be slow to come up. */ + beql $t4, $zero, retry_cs5536 + nop + sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F) ($t0) + lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_PCI_REG_PCI_ID) ($t1) + bnel $t2, $t3, 1b + sll $t4, $t4, 1 + +#ifndef FULOONG2F + lui $a0, %hi(cs5536_found) + bal message + addiu $a0, $a0, %lo(cs5536_found) + bal printhex + move $a0, $t4 +#endif + + lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F) + li $t1, GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED + sw $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0) + + /* Set GPIO LBAR. */ + lui $a0, %hi(GRUB_CS5536_MSR_GPIO_BAR) + addiu $a0, $a0, %lo(GRUB_CS5536_MSR_GPIO_BAR) + ori $a1, $zero, GRUB_CS5536_LBAR_GPIO + /* Set mask to 0xf and enabled bit to 1. */ + bal wrmsr + ori $a2, $zero, ((GRUB_CS5536_LBAR_MASK_MASK \ + | GRUB_CS5536_LBAR_ENABLE) >> 32) + + bal gpio_init + nop + +#ifdef FULOONG2F + bal serial_hw_init + nop +#endif + + /* Initialise SMBus controller. */ + /* Set SMBUS LBAR. */ + lui $a0, %hi(GRUB_CS5536_MSR_SMB_BAR) + addiu $a0, $a0, %lo(GRUB_CS5536_MSR_SMB_BAR) + ori $a1, $zero, GRUB_CS5536_LBAR_SMBUS + /* Set mask to 0xf and enabled bit to 1. */ + bal wrmsr + ori $a2, $zero, ((GRUB_CS5536_LBAR_MASK_MASK \ + | GRUB_CS5536_LBAR_ENABLE) >> 32) + + lui $a0, %hi(smbus_enabled) + bal message + addiu $a0, $a0, %lo(smbus_enabled) + + lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS) + + /* Disable SMB. */ + sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) + + /* Disable interrupts. */ + sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1) ($t0) + + /* Set as master. */ + sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_ADDR) ($t0) + + /* Launch SMBus controller at slowest speed possible. */ + ori $t1, $zero, 0xff + sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0) + sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) + + /* Yeeloong and Fuloong2f have only one memory slot. */ + /* Output first byte on serial for debugging. */ + ori $a1, $zero, GRUB_SMB_RAM_START_ADDR + bal read_spd + move $a0, $zero + bal printhex + move $a0, $v0 + + bal read_spd + ori $a0, $zero, GRUB_SMBUS_SPD_MEMORY_TYPE_ADDR + ori $t0, $zero, GRUB_SMBUS_SPD_MEMORY_TYPE_DDR2 + lui $a0, %hi(unimplemented_memory_type) + bne $t0, $v0, fatal + addiu $a0, $a0, %lo(unimplemented_memory_type) + + /* And here is our goal: DDR2 controller initialisation. */ + lui $t0, %hi(GRUB_CPU_LOONGSON_CORECFG) + ld $t1, %lo(GRUB_CPU_LOONGSON_CORECFG) ($t0) + /* Use addiu for sign-extension. */ + addiu $t2, $zero, ~(GRUB_CPU_LOONGSON_CORECFG_DISABLE_DDR2_SPACE|GRUB_CPU_LOONGSON_CORECFG_BUFFER_CPU) + and $t1, $t1, $t2 + sd $t1, %lo (GRUB_CPU_LOONGSON_CORECFG) ($t0) + + b continue + + .org GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START +tlb_refill: + mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC + mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR + move $s3, $ra + lui $a0, %hi(epc) + bal message + addiu $a0, $a0, %lo(epc) + + bal printhex + move $a0, $s1 + + lui $a0, %hi(badvaddr) + bal message + addiu $a0, $a0, %lo(badvaddr) + + bal printhex + move $a0, $s2 + + lui $a0, %hi(return_msg) + bal message + addiu $a0, $a0, %lo(return_msg) + + bal printhex + move $a0, $s3 + + lui $a0, %hi(newline) + bal message + addiu $a0, $a0, %lo(newline) + + lui $a0, %hi(unhandled_tlb_refill) + b fatal + addiu $a0, $a0, %lo(unhandled_tlb_refill) + + .org GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START +cache_error: + lui $a0, %hi(unhandled_cache_error) + b fatal + addiu $a0, $a0, %lo(unhandled_cache_error) + + .org GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START +other_exception: + mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE + mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC + mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR + lui $a0, %hi(cause) + bal message + addiu $a0, $a0, %lo(cause) + + bal printhex + move $a0, $s0 + + lui $a0, %hi(epc) + bal message + addiu $a0, $a0, %lo(epc) + + bal printhex + move $a0, $s1 + + lui $a0, %hi(badvaddr) + bal message + addiu $a0, $a0, %lo(badvaddr) + + bal printhex + move $a0, $s2 + + lui $a0, %hi(newline) + bal message + addiu $a0, $a0, %lo(newline) + + lui $a0, %hi(unhandled_exception) + b fatal + addiu $a0, $a0, %lo(unhandled_exception) + +gpio_init: + lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO) + addiu $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO) + lui $t1, %hi (gpio_dump) + addiu $t1, $t1, %lo (gpio_dump) + +1: + lw $t2, 0($t1) + sw $t2, 0($t0) + addiu $t0, $t0, 4 + addiu $t1, $t1, 4 + lui $t2, %hi (gpio_dump_end) + addiu $t2, $t2, %lo (gpio_dump_end) + bne $t1, $t2, 1b + nop + jr $ra + nop + + /* Same as similarly named C function but in asm since + we need it early. */ + /* In: none. Out: none. Clobbered: $t0, $t1, $t2, $a0, $a1, $a2. */ +serial_hw_init: + move $t2, $ra +#ifdef FULOONG2F + lui $a0, %hi(GRUB_CS5536_MSR_DIVIL_LEG_IO) + addiu $a0, $a0, %lo(GRUB_CS5536_MSR_DIVIL_LEG_IO) + lui $a1, %hi (GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3 \ + | GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP \ + | GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86 \ + | GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1) + ori $a1, $a1, (GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0 \ + | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1) + bal wrmsr + move $a2, $zero + + lui $a0, %hi(GRUB_CS5536_MSR_DIVIL_UART1_CONF) + addiu $a0, $a0, %lo(GRUB_CS5536_MSR_DIVIL_UART1_CONF) + li $a1, 2 + bal wrmsr + move $a2, $zero + + lui $a0, %hi(GRUB_CS5536_MSR_DIVIL_UART2_CONF) + addiu $a0, $a0, %lo(GRUB_CS5536_MSR_DIVIL_UART2_CONF) + li $a1, 2 + bal wrmsr + move $a2, $zero +#endif + + lui $t0, %hi (GRUB_MACHINE_SERIAL_PORT) + + /* Turn off the interrupt. */ + sb $zero, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_IER)($t0) + + /* Set DLAB. */ + ori $t1, $zero, UART_DLAB + sb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_LCR)($t0) + + /* Set the baud rate 115200. */ + ori $t1, $zero, GRUB_MACHINE_SERIAL_DIVISOR_115200 + sb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_DLL)($t0) + sb $zero, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_DLH)($t0) + + /* Set the line status. */ + ori $t1, $zero, (UART_NO_PARITY | UART_8BITS_WORD | UART_1_STOP_BIT) + sb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_LCR)($t0) + + /* Enable the FIFO. */ + ori $t1, $zero, UART_ENABLE_FIFO_TRIGGER1 + sb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_FCR)($t0) + + /* Turn on DTR and RTS. */ + ori $t1, $zero, UART_ENABLE_DTRRTS + sb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_MCR)($t0) + + /* Let message return to original caller. */ + lui $a0, %hi(notification_string) + addiu $a0, $a0, %lo(notification_string) + move $ra, $t2 + + /* Print message on serial console. */ + /* In: $a0 = asciiz message. Out: none. Clobbered: $t0, $t1, $a0. */ +message: + lui $t0, %hi (GRUB_MACHINE_SERIAL_PORT) +1: + lb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_LSR)($t0) + andi $t1, $t1, UART_EMPTY_TRANSMITTER + beq $t1, $zero, 1b + nop + lb $t1, 0($a0) + sb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_TX)($t0) + bne $t1, $zero, 1b + addiu $a0, $a0, 1 + jr $ra + nop + + /* Print 32-bit hexadecimal on serial. + In: $a0. Out: None. Clobbered: $a0, $t0, $t1, $t2 + */ +printhex: + lui $t0, %hi (GRUB_MACHINE_SERIAL_PORT) + ori $t2, $zero, 8 +1: + lb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_LSR)($t0) + andi $t1, $t1, UART_EMPTY_TRANSMITTER + beq $t1, $zero, 1b + nop + srl $t1, $a0, 28 + addiu $t1, $t1, -10 + bltz $t1, 2f + sll $a0, $a0, 4 + addiu $t1, $t1, 'A'-10-'0' +2: addiu $t1, $t1, '0'+10 + sb $t1, (%lo (GRUB_MACHINE_SERIAL_PORT) + UART_TX)($t0) + addiu $t2, $t2, -1 + bne $t2, $zero, 1b + nop + jr $ra + nop + +fatal: + bal message + nop +self: + b self + nop + + /* Write CS5536 MSR. + In: $a0 address, $a1 lower word, $a2 upper word. + Out: None + Clobbered: $t0 + */ +wrmsr: + lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F) + sw $a0, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_ADDR) ($t0) + sw $a1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA0) ($t0) + jr $ra + sw $a2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA1) ($t0) + + /* Wait for SMBus data or empty transmitter. */ + /* In: $a0 = exception handler. Out: none. Clobbered: $t0, $t1 */ +smbus_wait: +1: + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + andi $t1, $t0, GRUB_CS5536_SMB_REG_STATUS_SDAST + bne $t1, $zero, return + nop + andi $t1, $t0, (GRUB_CS5536_SMB_REG_STATUS_BER | GRUB_CS5536_SMB_REG_STATUS_NACK) + beq $t1, $zero, 1b + nop + jr $a0 + nop +return: + jr $ra + nop + + /* Read SPD byte. In: $a0 byte, $a1 device. Out: $v0 read byte (0x100 on failure). + Clobbered: $t0, $t1, $t2, $t3, $a0. */ +read_spd: + move $t2, $a0 + move $t3, $ra + lui $a0, %hi(read_spd_fail) + addiu $a0, $a0, %lo(read_spd_fail) + + /* Send START. */ + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START + bal smbus_wait + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + + /* Send device address. */ + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) + sll $t1, $a1, 1 + bal smbus_wait + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + + /* Send ACK. */ + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_ACK + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + + /* Send byte address. */ + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) + bal smbus_wait + sb $t2, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + + /* Send START. */ + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START + bal smbus_wait + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + + /* Send device address. */ + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) + sll $t1, $a1, 1 + ori $t1, $t1, 1 + bal smbus_wait + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + + /* Send STOP. */ + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_STOP + bal smbus_wait + sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + + lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) + lb $v0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0) + jr $t3 + andi $v0, $v0, 0xff +read_spd_fail: + jr $t3 + ori $v0, $v0, 0x100 + +notification_string: .asciz "GRUB " +cs5536_found: .asciz "CS5536 at " +sm_failed: .asciz "SM transaction failed.\n\r" +unhandled_tlb_refill: .asciz "Unhandled TLB refill.\n\r" +unhandled_cache_error: .asciz "Unhandled cache error.\n\r" +unhandled_exception: .asciz "Unhandled exception.\n\r" +smbus_enabled: .asciz "SMBus controller enabled.\n\r" +unimplemented_memory_type: .asciz "non-DDR2 memory isn't supported.\n\r" +no_cas_latency: .asciz "Couldn't determine CAS latency.\n\r" +cause: .asciz "Cause: " +epc: .asciz "\n\rEPC: " +badvaddr: .asciz "\n\rBadVaddr: " +newline: .asciz "\n\r" +return_msg: .asciz "\n\rReturn address: " +caches_enabled: .asciz "Caches enabled\n\r" + + .p2align 3 + +regdump: + .quad 0x0100010000000101 /* 0 */ + .quad 0x0100010100000000 /* 2 */ + .quad 0x0101000001000000 /* 3 */ + .quad 0x0100020200010101 /* 4 */ + .quad 0x0a04030603050203 /* 6 */ + .quad 0x0f0e040000010a0b /* 7 */ +#ifdef FULOONG2F + .quad 0x0000000100000001 /* 8 */ +#else + .quad 0x0000010200000102 /* 8 */ +#endif + .quad 0x0000060c00000000 /* 9 */ + .quad 0x2323233f3f1f0200 /* a */ + .quad 0x5f7f232323232323 /* b */ + .quad 0x002a3c0615000000 /* c */ + .quad 0x002a002a002a002a /* d */ + .quad 0x002a002a002a002a /* e */ +#ifdef FULOONG2F + .quad 0x00b40020005b0004 /* f */ +#else + .quad 0x00b40020006d0004 /* f */ +#endif + .quad 0x070007ff00000087 /* 10 */ + .quad 0x000000000016101f /* 11 */ + .quad 0x001c000000000000 /* 12 */ + .quad 0x28e1000200c8006b /* 13 */ + .quad 0x0000204200c8002f /* 14 */ + .quad 0x0000000000030d40 /* 15 */ + .quad 0 /* 16 */ + .quad 0 /* 17 */ + .quad 0 /* 18 */ + .quad 0 /* 19 */ + .quad 0 /* 1a */ + .quad 0 /* 1b */ + .quad 0 /* 1c */ + +/* Dump of GPIO connections. FIXME: Remove useless and macroify. */ +gpio_dump: +#ifdef FULOONG2F + .long 0xffff0000, 0x2eefd110, 0xffff0000, 0xffff0000 + .long 0x2eefd110, 0xffff0000, 0x1000efff, 0xefff1000 + .long 0x3df3c20c, 0xffff0000, 0xffff0000, 0xffff0000 + .long 0x7df3820c, 0x3df3c20c, 0xffff0000, 0x00000000 + .long 0xffff0000, 0xffff0000, 0x3de3c21c, 0x3d83c27c + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0xffff0000, 0xffff0000, 0xffff0000, 0xffff0000 + .long 0xffff0000, 0xffff0000, 0x0000ffff, 0xffff0000 + .long 0xefff1000, 0xffff0000, 0xffff0000, 0xffff0000 + .long 0xefff1000, 0xefff1000, 0xffff0000, 0x00000000 + .long 0xffff0000, 0xffff0000, 0xefff1000, 0xefff1000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 +#else + .long 0xffff0000, 0x2ffdd002, 0xffff0000, 0xffff0000 + .long 0x2fffd000, 0xffff0000, 0x1000efff, 0xefff1000 + .long 0x3ffbc004, 0xffff0000, 0xffff0000, 0xffff0000 + .long 0x3ffbc004, 0x3ffbc004, 0xffff0000, 0x00000000 + .long 0xffff0000, 0xffff0000, 0x3ffbc004, 0x3f9bc064 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0xffff0000, 0xffff0000, 0xffff0000, 0xffff0000 + .long 0xffff0000, 0xffff0000, 0x0000ffff, 0xffff0000 + .long 0xefff1000, 0xffff0000, 0xffff0000, 0xffff0000 + .long 0xefff1000, 0xefff1000, 0xffff0000, 0x00000000 + .long 0xffff0000, 0xffff0000, 0xefff1000, 0xffff0000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x00000000, 0x00000000, 0x00000000 + .long 0x00000000, 0x50000000, 0x00000000, 0x00000000 +#endif +gpio_dump_end: + + .p2align 3 + +write_dumpreg: + ld $t2, 0($t6) + sd $t2, 0($t4) + addiu $t4, $t4, GRUB_CPU_LOONGSON_DDR2_REG_STEP + jr $ra + addiu $t6, $t6, GRUB_CPU_LOONGSON_DDR2_REG_SIZE + +continue: + lui $t4, %hi(GRUB_CPU_LOONGSON_DDR2_BASE) + addiu $t4, $t4, %lo(GRUB_CPU_LOONGSON_DDR2_BASE) + lui $t6, %hi(regdump) + + /* 0 */ + bal write_dumpreg + addiu $t6, $t6, %lo(regdump) + + /* 1 */ + ori $a1, $a1, GRUB_SMB_RAM_START_ADDR + move $t8, $zero + lui $t5, 0x0001 + bal read_spd + ori $a0, $zero, GRUB_SMBUS_SPD_MEMORY_NUM_BANKS_ADDR + ori $t7, $zero, 8 + bne $v0, $t7, 1f + ori $t5, $t5, 0x0001 + ori $t8, $t8, GRUB_CPU_LOONGSON_DDR2_REG1_HI_8BANKS +1: + dsll $t8, $t8, 32 + or $t5, $t5, $t8 + sd $t5, 0 ($t4) + addiu $t4, $t4, GRUB_CPU_LOONGSON_DDR2_REG_STEP + + /* 2 */ + bal write_dumpreg + nop + + /* 3 */ + bal write_dumpreg + nop + + /* 4 */ + bal write_dumpreg + nop + + /* 5 */ + /* FIXME: figure termination resistance. */ + ori $t5, $zero, 0x2 + bal read_spd + ori $a0, $zero, GRUB_SMBUS_SPD_MEMORY_NUM_ROWS_ADDR + /* $v0 = 15 - $v0. */ + xori $v0, $v0, 0xf + andi $v0, $v0, 0x7 + sll $v0, $v0, 8 + or $t5, $t5, $v0 + + /* Find the fastest supported CAS latency. */ + bal read_spd + ori $a0, $zero, GRUB_SMBUS_SPD_MEMORY_CAS_LATENCY_ADDR + ori $t0, $zero, GRUB_SMBUS_SPD_MEMORY_CAS_LATENCY_MIN_VALUE + ori $t1, $zero, (1 << GRUB_SMBUS_SPD_MEMORY_CAS_LATENCY_MIN_VALUE) +2: + and $t2, $t1, $v0 + bne $t2, $zero, 1f + ori $t3, $zero, 8 + lui $a0, %hi(no_cas_latency) + beq $t0, $t3, fatal + addiu $a0, $a0, %lo(no_cas_latency) + addiu $t0, $t0, 1 + b 2b + sll $t1, $t1, 1 +1: + sll $t0, $t0, 16 + or $t5, $t5, $t0 + + bal read_spd + ori $a0, $zero, GRUB_SMBUS_SPD_MEMORY_NUM_COLUMNS_ADDR + /* $v0 = 15 - ($v0 + 1) = 14 - $v0. */ + addiu $v0, $v0, 1 + xori $v0, $v0, 0xf + andi $v0, $v0, 0x7 + sll $v0, 24 + or $t5, $t5, $v0 + sd $t5, 0 ($t4) + + addiu $t4, $t4, GRUB_CPU_LOONGSON_DDR2_REG_STEP + + ori $t7, $zero, 0x16 + +1: + ld $t2, 0($t6) + sd $t2, 0($t4) + addiu $t4, $t4, GRUB_CPU_LOONGSON_DDR2_REG_STEP + addiu $t7, $t7, -1 + bne $t7, $zero, 1b + addiu $t6, $t6, GRUB_CPU_LOONGSON_DDR2_REG_SIZE + + lui $t4, %hi(GRUB_CPU_LOONGSON_DDR2_BASE) + ld $t5, (%lo(GRUB_CPU_LOONGSON_DDR2_BASE) + 0x30) ($t4) + ori $t0, $zero, 1 + dsll $t0, $t0, 40 + or $t5, $t5, $t0 + sd $t5, (%lo(GRUB_CPU_LOONGSON_DDR2_BASE) + 0x30) ($t4) + + /* Desactivate DDR2 registers. */ + lui $t0, %hi (GRUB_CPU_LOONGSON_CORECFG) + ld $t1, %lo (GRUB_CPU_LOONGSON_CORECFG) ($t0) + ori $t1, $t1, GRUB_CPU_LOONGSON_CORECFG_DISABLE_DDR2_SPACE + sd $t1, %lo (GRUB_CPU_LOONGSON_CORECFG) ($t0) + + /* Enable cache. */ + mfc0 $t0, GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG + addiu $t1, $zero, ~GRUB_CPU_LOONGSON_CACHE_TYPE_MASK + and $t0, $t1, $t1 + /* Set line size to 32 bytes and disabled cache. */ + ori $t0, $t0, (GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG_ILINESIZE \ + | GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG_DLINESIZE \ + | GRUB_CPU_LOONGSON_CACHE_ACCELERATED) + mtc0 $t0, GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG + + /* Invalidate all I-cache entries. */ + srl $t1, $t0, GRUB_CPU_LOONGSON_COP0_CACHE_ISIZE_SHIFT + andi $t1, $t1, GRUB_CPU_LOONGSON_COP0_CACHE_SIZE_MASK + ori $t2, $zero, (1 << (GRUB_CPU_LOONGSON_COP0_CACHE_SIZE_OFFSET \ + - GRUB_CPU_LOONGSON_CACHE_LINE_SIZE_LOG_BIG \ + - GRUB_CPU_LOONGSON_I_CACHE_LOG_WAYS)) + sll $t1, $t2, $t1 + lui $t2, 0x8000 + +1: + cache GRUB_CPU_LOONGSON_COP0_I_INDEX_INVALIDATE, 0($t2) + addiu $t1, $t1, -1 + bne $t1, $zero, 1b + addiu $t2, $t2, (1 << GRUB_CPU_LOONGSON_COP0_I_INDEX_BIT_OFFSET) + + /* Invalidate all D-cache entries. */ + srl $t1, $t0, GRUB_CPU_LOONGSON_COP0_CACHE_DSIZE_SHIFT + andi $t1, $t1, GRUB_CPU_LOONGSON_COP0_CACHE_SIZE_MASK + ori $t2, $zero, (1 << (GRUB_CPU_LOONGSON_COP0_CACHE_SIZE_OFFSET \ + - GRUB_CPU_LOONGSON_CACHE_LINE_SIZE_LOG_BIG \ + - GRUB_CPU_LOONGSON_D_CACHE_LOG_WAYS)) + sll $t1, $t2, $t1 + lui $t2, 0x8000 + mtc0 $zero, GRUB_CPU_LOONGSON_COP0_CACHE_TAGLO + mtc0 $zero, GRUB_CPU_LOONGSON_COP0_CACHE_TAGHI +1: + /* All four ways. */ + cache GRUB_CPU_LOONGSON_COP0_D_INDEX_TAG_STORE, 0($t2) + cache GRUB_CPU_LOONGSON_COP0_D_INDEX_TAG_STORE, 1($t2) + cache GRUB_CPU_LOONGSON_COP0_D_INDEX_TAG_STORE, 2($t2) + cache GRUB_CPU_LOONGSON_COP0_D_INDEX_TAG_STORE, 3($t2) + addiu $t1, $t1, -1 + bne $t1, $zero, 1b + addiu $t2, $t2, (1 << GRUB_CPU_LOONGSON_COP0_D_INDEX_BIT_OFFSET) + + /* Invalidate all S-cache entries. */ + ori $t1, $zero, (1 << (GRUB_CPU_LOONGSON_SECONDARY_CACHE_LOG_SIZE \ + - GRUB_CPU_LOONGSON_CACHE_LINE_SIZE_LOG_BIG \ + - GRUB_CPU_LOONGSON_S_CACHE_LOG_WAYS)) + lui $t2, 0x8000 + mtc0 $zero, GRUB_CPU_LOONGSON_COP0_CACHE_TAGLO + mtc0 $zero, GRUB_CPU_LOONGSON_COP0_CACHE_TAGHI +1: + /* All four ways. */ + cache GRUB_CPU_LOONGSON_COP0_S_INDEX_TAG_STORE, 0($t2) + cache GRUB_CPU_LOONGSON_COP0_S_INDEX_TAG_STORE, 1($t2) + cache GRUB_CPU_LOONGSON_COP0_S_INDEX_TAG_STORE, 2($t2) + cache GRUB_CPU_LOONGSON_COP0_S_INDEX_TAG_STORE, 3($t2) + addiu $t1, $t1, -1 + bne $t1, $zero, 1b + addiu $t2, $t2, (1 << GRUB_CPU_LOONGSON_COP0_D_INDEX_BIT_OFFSET) + + /* Finally enable cache. */ + mfc0 $t0, GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG + addiu $t1, $zero, ~GRUB_CPU_LOONGSON_CACHE_TYPE_MASK + and $t0, $t1, $t1 + ori $t0, $t0, GRUB_CPU_LOONGSON_CACHE_CACHED + mtc0 $t0, GRUB_CPU_LOONGSON_COP0_CACHE_CONFIG + + lui $a0, %hi(caches_enabled) + bal message + addiu $a0, $a0, %lo(caches_enabled) + + /* Set ROM delay cycles to 1. */ + lui $t0, %hi(GRUB_CPU_LOONGSON_LIOCFG) + lw $t1, %lo(GRUB_CPU_LOONGSON_LIOCFG) ($t0) + addiu $t2, $zero, ~(GRUB_CPU_LOONGSON_ROM_DELAY_MASK \ + << GRUB_CPU_LOONGSON_ROM_DELAY_OFFSET) + and $t1, $t1, $t2 + ori $t1, $t1, (1 << GRUB_CPU_LOONGSON_ROM_DELAY_OFFSET) + sw $t1, %lo(GRUB_CPU_LOONGSON_LIOCFG) ($t0) + + addiu $a0, $zero, -1 + addiu $a1, $zero, -1 + + /* Take advantage of cache. */ + lui $t0, %hi(cached_continue - 0x20000000) + addiu $t0, $t0, %lo(cached_continue - 0x20000000) + jr $t0 +#ifdef FULOONG2F + addiu $a2, $zero, -(1 + GRUB_ARCH_MACHINE_FULOONG2F) +#else + addiu $a2, $zero, -(1 + GRUB_ARCH_MACHINE_YEELOONG) +#endif + +cached_continue: diff --git a/grub-core/boot/mips/startup_raw.S b/grub-core/boot/mips/startup_raw.S new file mode 100644 index 000000000..6a81b3733 --- /dev/null +++ b/grub-core/boot/mips/startup_raw.S @@ -0,0 +1,300 @@ +/* startup.S - Startup code for the MIPS. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#define BASE_ADDR 8 + +.extern __bss_start +.extern _end +.extern _edata + + .globl __start, _start, start + .set noreorder + .set nomacro +__start: +_start: +start: + + bal codestart + nop +base: + .org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE +compressed_size: + .long 0 + .org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE +uncompressed_size: + .long 0 + .org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR +uncompressed_addr: + .long 0 +codestart: + /* Save our base. */ + move $s0, $ra + + /* Parse arguments. Has to be done before relocation. + So need to do it in asm. */ +#ifdef GRUB_MACHINE_MIPS_QEMU_MIPS + lui $t0, %hi (((16 << 20) - 264 + 4) | 0x80000000) + lw $t1, %lo (((16 << 20) - 264 + 4) | 0x80000000) ($t0) + + lui $t2, 0x1234 + ori $t2, 0x5678 + + bne $t1, $t2, 1f + nop + + lui $t0, %hi (((16 << 20) - 264) | 0x80000000) + b 2f + lw $s4, %lo (((16 << 20) - 264) | 0x80000000) ($t0) + +1: + li $s4, 0 +2: +#endif + +#ifdef GRUB_MACHINE_MIPS_LOONGSON + move $s2, $zero + move $s3, $zero + move $s4, $zero + move $s5, $zero + move $s7, $zero + + /* $a2 has the environment. */ + addiu $t0, $zero, -0x10 + and $t1, $a2, $t0 + beq $t0, $t1, argfw + nop + move $t0, $a2 +argcont: + lw $t1, 0($t0) + beq $t1, $zero, argdone + nop +#define DO_PARSE(str, reg) \ + addiu $t2, $s0, (str-base);\ + bal parsestr;\ + nop ;\ + beq $v0, $zero, 1f;\ + nop ;\ + b 2f;\ + move reg, $v0; \ +1: +#define DO_CHECKT1(str, val) \ + move $t6, $t1 ;\ + addiu $t7, $s0, (str - base);\ + bal do_check ;\ + li $t2, val + + DO_PARSE (busclockstr, $s2) + DO_PARSE (cpuclockstr, $s3) + DO_PARSE (memsizestr, $s4) + DO_PARSE (highmemsizestr, $s5) + DO_CHECKT1 (pmon_yeeloong_verstr, GRUB_ARCH_MACHINE_YEELOONG) + DO_CHECKT1 (pmon_fuloong2f_verstr, GRUB_ARCH_MACHINE_FULOONG2F) +2: + b argcont + addiu $t0, $t0, 4 +parsestr: + move $v0, $zero + move $t3, $t1 +3: + lb GRUB_ASM_T4, 0($t2) + lb GRUB_ASM_T5, 0($t3) + addiu $t2, $t2, 1 + addiu $t3, $t3, 1 + beq GRUB_ASM_T5, $zero, 1f + nop + beq GRUB_ASM_T5, GRUB_ASM_T4, 3b + nop + bne GRUB_ASM_T4, $zero, 1f + nop + + addiu $t3, $t3, 0xffff +digcont: + lb GRUB_ASM_T5, 0($t3) + /* Substract '0' from digit. */ + addiu GRUB_ASM_T5, GRUB_ASM_T5, 0xffd0 + bltz GRUB_ASM_T5, 1f + nop + addiu GRUB_ASM_T4, GRUB_ASM_T5, 0xfff7 + bgtz GRUB_ASM_T4, 1f + nop + /* Multiply $v0 by 10 with bitshifts. */ + sll $v0, $v0, 1 + sll GRUB_ASM_T4, $v0, 2 + addu $v0, $v0, GRUB_ASM_T4 + addu $v0, $v0, GRUB_ASM_T5 + addiu $t3, $t3, 1 + b digcont + nop +1: + jr $ra + nop +busclockstr: .asciz "busclock=" +cpuclockstr: .asciz "cpuclock=" +memsizestr: .asciz "memsize=" +highmemsizestr: .asciz "highmemsize=" +machtype_yeeloong_str1: .asciz "machtype=8.9" +machtype_yeeloong_str2: .asciz "machtype=lemote-yeeloong-" +machtype_fuloong2f_str: .asciz "machtype=lemote-fuloong-2f" +machtype_fuloong2e_str: .asciz "machtype=lemote-fuloong-2e" +pmon_yeeloong_str: .asciz "PMON_VER=LM8" +pmon_fuloong2f_str: .asciz "PMON_VER=LM6" +pmon_yeeloong_verstr: .asciz "Version=LM8" +pmon_fuloong2f_verstr: .asciz "Version=LM6" + .p2align 2 + +argdone: + beq $a0, $zero, cmdlinedone + nop +#define DO_CHECKA1(str, val) \ + lw $t6, 0($a1) ;\ + addiu $t7, $s0, (str - base);\ + bal do_check ;\ + li $t2, val + DO_CHECKA1 (machtype_yeeloong_str1, GRUB_ARCH_MACHINE_YEELOONG) + DO_CHECKA1 (machtype_yeeloong_str2, GRUB_ARCH_MACHINE_YEELOONG) + DO_CHECKA1 (pmon_yeeloong_str, GRUB_ARCH_MACHINE_YEELOONG) + DO_CHECKA1 (machtype_fuloong2f_str, GRUB_ARCH_MACHINE_FULOONG2F) + DO_CHECKA1 (machtype_fuloong2e_str, GRUB_ARCH_MACHINE_FULOONG2E) + DO_CHECKA1 (pmon_fuloong2f_str, GRUB_ARCH_MACHINE_FULOONG2F) + addiu $a0, $a0, -1 + b argdone + addiu $a1, $a1, 4 +do_check: + lb GRUB_ASM_T4, 0($t7) + beq GRUB_ASM_T4, $zero, 1f + lb $t3, 0($t6) + bne $t3, GRUB_ASM_T4, 2f + addiu $t6, $t6, 1 + b do_check + addiu $t7, $t7, 1 +1: + move $s7, $t2 +2: + jr $ra + nop +argfw: + not $s7, $a2 +cmdlinedone: +#endif +#ifdef GRUB_MACHINE_ARC + lui $t0, %hi(_start - 256) + addiu $t0, $t0, %lo(_start - 256) + addiu $t3, $t0, 255 + lw $t1, 0($a1) +1: + bne $t0, $t3, 2f + lb $t2, 0($t1) + move $t2, $zero +2: + sb $t2, 0($t0) + addiu $t0, $t0, 1 + bnez $t2, 1b + addiu $t1, $t1, 1 +#endif + /* Copy the decompressor. */ + lui $t1, %hi(base) + addiu $t1, $t1, %lo(base) + lui $t3, %hi(__bss_start) + addiu $t3, $t3, %lo(__bss_start) + move $t2, $s0 + +1: + beq $t1, $t3, 2f + lb GRUB_ASM_T4, 0($t2) + sb GRUB_ASM_T4, 0($t1) + addiu $t1, $t1, 1 + b 1b + addiu $t2, $t2, 1 +2: + /* Clean out its BSS. */ + lui $t1, %hi(__bss_start) + addiu $t1, $t1, %lo(__bss_start) + lui $t2, %hi(_end) + addiu $t2, $t2, %lo(_end) +1: + beq $t1, $t2, 2f + nop + sb $zero, 0($t1) + b 1b + addiu $t1, $t1, 1 +2: + lui $a0, %hi(base) + addiu $a0, $a0, %lo(base) + lui $a1, %hi(_end) + addiu $a1, %lo(_end) + subu $a1,$a1,$a0 + +#include "../../kern/mips/cache_flush.S" + + /* Decompress the payload. */ + lui $a0, %hi(_edata) + addiu $a0, $a0, %lo(_edata) + + lui $t0, %hi(base) + addiu $t0, $t0, %lo(base) + subu $a0, $a0, $t0 + addu $a0, $a0, $s0 + + lw $a1, (GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR - BASE_ADDR)($s0) + lw $a2, (GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE - BASE_ADDR)($s0) + lw $a3, (GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE - BASE_ADDR)($s0) + move $s1, $a1 + + /* $a0 contains source compressed address, $a1 is destination, + $a2 is compressed size, $a3 is uncompressed size. + */ + move $s6, $a3 + + lui $t9, %hi(EXT_C(grub_decompress_core)) + addiu $t9, $t9, %lo(EXT_C(grub_decompress_core)) + +#ifdef GRUB_MACHINE_ARC + lui $sp, %hi(_start - 512) + jalr $t9 + addiu $sp, $sp, %lo(_start - 512) +#else + lui $sp, %hi(_start - 256) + jalr $t9 + addiu $sp, $sp, %lo(_start - 256) +#endif + move $a0, $s1 + move $a1, $s6 + +#include "../../kern/mips/cache_flush.S" + + lui $t1, %hi(GRUB_MACHINE_LINK_ADDR) + addiu $t1, %lo(GRUB_MACHINE_LINK_ADDR) + + jr $t1 + nop + /* Ensure that .data section is created. In code we suppose that _edata + is first location not in decompressor image. Strictly speaking it's + _edata only when .data is present and _etext otherwise. But checking + for .data presence would cost more in code than it is to ensure that + .data is created. + */ + .data + .long 0 diff --git a/grub-core/boot/powerpc/bootinfo.txt.in b/grub-core/boot/powerpc/bootinfo.txt.in new file mode 100644 index 000000000..bc831daa9 --- /dev/null +++ b/grub-core/boot/powerpc/bootinfo.txt.in @@ -0,0 +1,73 @@ + +@PACKAGE@ @VERSION@ +@PACKAGE@ @VERSION@ +boot &device;:\boot\grub\powerpc.elf + + +FF FF FF FF FF FF FF FF FF FF 92 6D 6D 6D 6D 6D 6D 6D 6D 6D DB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF B6 92 6D 92 92 92 DB FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF DB 6D 92 DB FF FF FF FF FF DB B6 FF FF 92 6D FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 92 DB FF FF FF FF FF B6 6D 92 DB FF FF FF FF FF FF FF +FF FF FF FF FF FF 49 92 FF FF B6 B6 24 00 24 00 00 00 00 49 6D DB 6D 92 DB B6 DB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF B6 6D DB 92 6D 24 49 92 6D 6D FF FF FF 92 6D FF FF FF FF FF FF +FF FF FF FF B6 49 DB FF FF 24 00 00 00 92 92 B6 FF DB DB FF DB B6 FF DB 92 49 DB FF FF FF FF FF FF FF FF FF FF FF FF FF DB 49 6D B6 FF 6D B6 6D 6D 92 24 24 00 00 24 6D FF FF 49 DB FF FF FF FF +FF FF FF B6 49 FF DB 49 24 00 49 6D B6 FF B6 92 6D 6D 6D 92 DB DB DB B6 6D 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6D DB FF FF FF FF DB B6 B6 B6 FF DB 24 00 00 92 B6 FF 49 FF FF FF FF +FF FF DB 49 FF FF 49 00 00 24 FF FF 6D 49 92 DB FF FF FF DB 92 92 92 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 92 92 6D 6D B6 DB DB B6 6D 6D FF FF 24 00 00 DB FF 49 FF FF FF +FF FF 49 FF FF 49 00 00 6D DB DB 49 DB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 B6 B6 24 00 24 DB DB 6D FF FF +FF B6 92 FF B6 00 00 24 FF DB 6D FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 B6 FF 00 00 49 FF 92 B6 FF +FF 6D FF FF 92 00 00 49 FF 6D FF FF FF FF FF FF FF FF FF FF FF FF FF B6 92 92 6D 6D 6D 6D DB FF FF FF FF FF FF B6 92 92 92 92 92 FF FF FF FF FF FF FF FF FF FF FF FF 6D FF 24 00 24 FF FF 6D FF +DB 92 FF DB 00 00 49 FF 92 DB FF FF FF FF FF FF FF FF FF FF FF DB 6D B6 FF FF FF FF FF FF 92 6D FF FF FF FF 6D B6 FF FF FF FF FF B6 B6 FF FF FF FF FF FF FF FF FF FF FF 92 DB 00 00 92 FF 92 DB +92 FF FF B6 00 00 6D FF 6D FF FF FF FF FF FF FF FF FF FF FF DB 6D FF FF FF 92 49 49 49 92 FF FF 49 DB DB 24 DB FF B6 49 49 92 FF FF DB 92 FF FF FF FF FF FF FF FF FF FF 92 FF 00 00 6D FF DB 92 +6D FF FF FF 00 00 49 92 DB FF FF FF FF FF FF FF FF FF FF DB 6D FF FF 6D 00 00 00 00 00 00 00 B6 FF 49 00 24 24 49 24 00 00 00 00 6D FF DB 92 FF FF FF FF FF FF FF FF FF DB B6 00 00 92 FF FF 6D +6D FF FF 24 00 00 DB 6D FF FF FF FF FF FF FF FF FF FF DB 6D FF DB 00 00 00 00 00 00 00 00 00 00 B6 FF DB B6 49 92 24 24 00 00 00 00 24 FF DB 92 FF FF FF FF FF FF FF FF FF 92 6D 00 00 DB FF 6D +6D FF FF 24 00 00 FF 6D FF FF FF FF FF FF FF FF FF FF 49 FF B6 00 00 00 00 00 00 00 00 00 00 00 00 92 FF FF 92 DB DB 24 24 00 00 00 00 24 FF 92 DB FF FF FF FF FF FF FF FF 92 92 00 00 FF FF 6D +6D FF FF B6 00 00 92 6D FF FF FF FF FF FF FF FF FF 49 FF DB 00 00 00 00 00 00 00 00 00 00 00 00 00 92 FF FF B6 B6 FF 92 24 00 00 00 00 00 49 FF 6D FF FF FF FF FF FF FF FF 92 24 00 49 FF FF 6D +6D FF FF 00 00 00 DB 6D FF FF FF FF FF FF FF FF 6D DB DB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 92 FF FF DB B6 FF B6 49 00 00 00 00 00 00 6D FF 6D FF FF FF FF FF FF FF 92 92 00 00 DB FF 6D +6D FF FF DB 00 00 B6 6D FF FF FF FF FF FF FF 6D B6 FF 24 00 00 00 00 00 00 00 00 00 00 00 24 B6 DB 6D FF FF FF FF FF 6D 49 24 00 00 00 00 00 00 B6 DB B6 FF FF FF FF FF B6 DB 24 00 92 FF FF 6D +6D FF FF 6D 00 00 24 DB 92 FF FF FF FF FF 92 92 FF 49 00 00 00 00 00 49 B6 FF FF DB B6 DB FF FF FF B6 92 FF FF DB 92 FF FF FF 49 6D 92 24 00 00 00 DB B6 DB FF FF FF FF 6D FF 00 00 00 DB FF 6D +6D FF FF 92 24 00 49 FF 6D B6 FF FF FF 6D 92 FF 49 00 00 49 DB FF FF FF FF FF FF B6 FF FF FF FF FF FF B6 6D 92 92 FF FF FF FF 6D FF FF FF DB 24 00 24 FF 92 B6 FF FF 92 B6 FF 00 00 B6 FF FF 6D +92 FF FF FF 00 00 24 92 FF 92 6D 92 49 B6 DB 24 00 24 DB FF FF FF FF FF DB 92 24 00 FF FF FF FF 6D 6D FF FF FF 6D 6D FF FF B6 DB 6D FF FF FF FF 00 00 24 DB B6 6D 6D B6 DB 00 00 00 6D FF FF 6D +DB 92 FF DB 49 00 00 00 B6 FF FF DB FF 6D 00 00 6D FF FF FF FF FF FF FF 24 92 00 49 FF FF FF FF FF 6D B6 FF FF 6D 6D FF 6D 00 DB DB 92 FF FF FF DB 00 00 00 6D FF FF DB 6D 00 00 24 FF FF 92 DB +FF 49 FF FF 6D 00 00 00 24 49 B6 FF 24 00 00 6D FF FF FF FF FF FF FF 49 92 B6 00 DB FF FF DB DB FF FF B6 FF FF FF FF FF 00 49 DB FF 92 FF FF FF FF 92 00 00 00 24 6D 00 00 00 00 24 DB FF 49 FF +FF 92 B6 FF 92 49 00 00 00 00 00 24 00 00 00 FF FF FF FF FF FF FF 92 6D FF B6 DB FF DB B6 DB B6 B6 FF FF B6 FF FF FF DB 00 B6 DB FF 92 FF FF FF FF FF 24 00 00 00 00 00 00 00 00 B6 FF 92 B6 FF +FF FF 49 FF FF 49 24 00 00 00 00 00 00 00 B6 FF FF FF FF FF FF FF B6 FF FF FF FF FF FF FF FF FF 6D FF FF 6D FF FF FF DB 24 FF FF FF 92 FF FF FF FF FF 6D 00 00 00 00 00 00 00 DB FF FF 6D FF FF +FF FF DB 6D FF FF 6D 49 00 00 00 00 00 24 FF FF FF FF FF FF FF FF FF FF FF FF FF DB 6D 49 24 24 24 FF FF DB FF FF FF FF 24 24 00 00 92 FF FF FF FF FF DB 00 00 00 00 00 00 FF DB FF 6D FF FF FF +FF FF FF 92 B6 FF FF DB 49 24 00 00 00 92 FF FF FF FF FF FF FF FF FF DB FF FF FF 49 49 24 00 24 FF FF FF FF FF FF FF FF 49 6D 00 24 49 FF FF FF FF FF FF 49 00 24 6D 6D B6 FF FF 6D B6 FF FF FF +FF FF FF FF 6D B6 FF FF DB 92 B6 49 00 FF FF FF FF FF FF FF FF FF FF B6 FF FF FF 92 DB 92 00 24 FF FF FF FF FF FF FF FF FF 00 00 6D FF FF FF FF FF FF FF DB 00 6D DB FF FF FF 6D B6 FF FF FF FF +FF FF FF FF FF 92 6D FF FF FF FF B6 49 FF FF FF FF FF FF FF FF FF FF 6D FF FF FF FF B6 92 92 B6 B6 DB FF FF FF FF FF FF FF B6 6D 49 6D FF FF FF FF FF FF FF 92 24 FF FF B6 6D DB FF FF FF FF FF +FF FF FF FF FF FF DB 49 6D B6 FF 6D 92 FF FF FF FF FF FF FF FF FF DB 6D FF FF FF FF FF FF FF FF FF 92 FF FF FF FF FF FF FF FF 6D DB 92 FF FF FF FF FF FF FF FF 6D 49 6D DB FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF DB 92 49 00 FF FF FF FF FF FF FF FF FF FF 6D 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 92 6D FF FF FF FF FF FF FF DB 92 FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF 49 FF FF FF FF FF FF FF FF FF DB 00 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 B6 92 6D B6 FF FF FF FF FF FF 49 DB FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF 24 FF FF FF FF FF FF FF FF FF 49 DB 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6D 6D FF 92 49 92 FF FF FF FF DB 49 DB FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF B6 49 FF FF FF FF FF FF FF FF 6D 92 FF 92 FF FF FF FF FF FF FF FF FF FF B6 6D 49 6D DB FF FF FF FF FF 6D 49 FF FF FF DB 6D 6D 92 92 6D 49 FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF 24 FF FF FF FF FF FF FF FF 6D 92 FF FF FF DB FF FF FF FF FF FF FF FF 6D 6D FF FF FF 92 6D FF FF FF FF FF 49 92 B6 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF DB 6D FF FF FF FF FF FF DB 24 92 FF FF FF FF FF FF FF FF FF FF FF FF FF 49 49 6D DB FF FF DB 6D B6 FF FF FF FF B6 B6 DB 49 FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF 24 B6 FF FF FF FF B6 49 49 24 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF 00 49 FF DB DB FF FF FF B6 92 FF FF FF FF FF FF 92 DB FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF 24 B6 FF FF B6 24 00 6D DB FF 6D 92 FF FF FF FF FF FF FF FF FF FF FF FF FF 6D DB DB 00 00 24 FF FF FF FF B6 FF FF FF FF FF B6 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF B6 B6 DB B6 6D 49 49 92 FF FF FF B6 6D FF FF FF FF FF FF FF 92 92 FF FF FF FF FF FF FF 49 92 DB 49 FF FF FF FF FF FF FF FF FF 92 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF 92 24 49 49 6D FF 6D 92 FF FF FF B6 6D FF FF FF FF FF FF FF FF FF FF DB FF FF FF FF FF FF FF FF B6 FF FF FF FF FF FF FF FF FF 49 FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF 6D 92 FF FF FF B6 6D FF FF FF FF FF FF FF FF FF FF B6 DB DB FF FF FF FF FF FF FF DB FF FF FF FF FF FF FF 6D 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF 6D 92 FF FF FF FF 24 92 FF FF FF FF FF FF FF FF FF FF 6D B6 FF FF FF FF FF FF FF FF FF FF FF FF FF DB 49 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF 6D B6 FF FF FF FF B6 6D FF FF FF FF FF FF FF FF FF FF B6 92 FF FF FF FF FF FF FF FF FF FF FF DB 6D 00 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF 6D 92 FF FF FF FF DB 49 FF FF FF FF FF FF FF FF FF FF FF 49 FF FF FF FF FF FF FF FF FF FF FF FF FF DB 49 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF 92 6D FF FF FF FF FF 00 24 DB FF FF FF FF FF FF FF FF FF DB 6D FF FF FF FF FF FF FF FF FF FF FF FF FF FF 49 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF B6 49 FF FF FF FF FF FF 92 6D FF FF FF FF FF FF FF FF FF FF 6D B6 FF FF FF FF FF FF FF FF FF FF FF FF B6 49 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF 49 00 DB FF FF FF FF FF FF FF FF FF 6D 6D B6 DB DB DB 92 49 00 00 00 00 00 49 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF 49 DB FF FF FF FF FF FF FF 24 FF FF FF FF FF FF FF FF FF FF FF DB 6D 49 49 6D B6 DB FF FF FF B6 6D FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 92 FF FF FF FF FF FF B6 6D FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6D FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 24 FF FF FF FF FF FF DB 00 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DB 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 B6 FF FF FF FF FF FF DB 6D 00 49 FF FF FF FF FF FF FF FF FF FF FF FF DB B6 92 6D 6D 6D 49 DB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 49 FF FF FF FF FF FF FF FF 49 00 92 FF FF FF FF FF FF FF FF 49 00 00 00 00 00 49 B6 DB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DB 6D FF FF FF FF FF FF FF FF 6D 6D FF B6 B6 FF FF FF FF FF FF 92 92 FF FF 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 B6 FF FF FF FF FF FF DB 00 DB 6D 00 B6 FF FF FF FF FF FF FF FF FF FF 24 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 DB FF FF FF FF FF 92 00 FF 24 00 00 49 FF FF FF FF FF FF FF FF FF B6 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 FF FF FF FF FF FF 49 24 24 00 00 6D FF FF FF FF FF FF FF DB FF DB 6D FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF B6 FF FF FF FF FF FF 6D 00 24 24 24 FF FF FF FF FF FF DB B6 DB 49 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF B6 00 B6 00 49 DB FF FF FF DB 24 6D 24 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 B6 6D 00 00 DB FF 6D 00 00 00 DB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DB 00 6D FF FF 00 00 DB 49 00 00 00 00 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 92 DB FF FF 6D 00 00 92 24 00 00 00 00 00 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF B6 FF FF 00 6D 00 00 24 00 00 00 00 00 00 24 92 DB FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 6D DB 00 00 00 00 00 00 00 00 00 00 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DB 00 24 00 00 6D 00 00 00 B6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DB 49 92 6D 6D DB B6 92 92 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF + + + diff --git a/grub-core/boot/powerpc/grub.chrp.in b/grub-core/boot/powerpc/grub.chrp.in new file mode 100644 index 000000000..9b2218352 --- /dev/null +++ b/grub-core/boot/powerpc/grub.chrp.in @@ -0,0 +1,172 @@ + + +MacRISC MacRISC3 MacRISC4 + + +@PACKAGE@ @VERSION@ + + +3434 +00000000000000F781FB8181818181FBFAF500000000000000000000000000000000000000F6FAFAFAFA81F9F600000000000000 +0000000000F8FBF9F500F95656FCFB5656FBF800000000000000000000000000000000F5FAF9F5F7F600F6F6F9FAF70000000000 +000000F5FBFA0056FDFEFEFDFDFAAC81FB56568181560000000000000000000000F9F9F9F7FCFDFEFEFEFFFC81F656FA00000000 +0000F5AC2BF7FBFEFEFD2BF6568181F9F7F6F6F8FBF50000000000000000000000FAF700F600F5F7F7F6F7FEFFACF82BFB000000 +0000FC2BF5FEFFFFF5F7FC81F70000F7F9FAFAF8000000000000000000000000000056F9F9FAF9F7F7FA812BF7FFFF56F7FA0000 +005656F5FEFFAC2BF9FA000000000000000000000000000000000000000000000000000000000000000000FA56FAFEFEF8F9F700 +00FB00F7FFFF56F9F800000000000000000000F656FAFA56F50000000000F5F8F9F8F5000000000000000000F9F7FCFFFB00FB00 +F8F800ACFFACF6FA000000000000000000F6FA562BF5F5F781FA000000F9FA2B00F556F9F5000000000000000081F8FFFEF6562B +810000FFFFF9FAF500000000000000002B8100F5F9FCACFBF82BFBF6FCFAF6FAFC81F600FA2B000000000000002BF8FEFFF8F5FA +FA00F5FEFFFA8100000000000000002B8100F9FEFFFFFFFFFFFBF6FDFEACFDFEFFFFFFFBF581F600000000000000F9FEFFF700FA +FA00FBFFFEF6F900000000000000F6FB00FCFFFFFFFFFFFFFFFFFCF600FCF7ACFEFFFFFFFDF6810000000000000056F9FFAC00FA +FA00F6FFFFF856000000000000F5FBF5ACFFFFFFFFFFFFFFFFFFFF2B002BF8F5ACFFFFFFFFFDF6FA000000000000F9FCFF560081 +FA0081FFFFF8F9000000000000FBF6FBFFFFFFFFFFFFFFFFFFFFFFF800F55600FCFFFFFFFFFF81F8F80000000000F981FFAC0081 +FA0000FEFEF8FB0000000000812BFAFFFFFFFFFFFFFEFFFFFDF92BFA0000F6F981ACFEFFFFFFFF56F9F600000000F9FDFF2B0081 +FA00FAFFFF81812B000000FAF8F9FFFFFEACFBF80000F500000000F9F900562B0000FCF7F9ACFFFF2BF9F50000F9F6FEFFFB0081 +810000FCFFFBF6FB56F7FBF8F9FFFE5600000000F5FAAC000000F82BF6FAFBF800F556F80000F9FFFE2BFAFAFAF8FAFFFEF60081 +FAF6F5ACFFFFAC00F856F7ACFFFCF500000000FAFCFFFC00000056AC00F581F92BFEF9FAF6000081FFFFFBF6F62BFFFFACF6F6FA +F6FA00FAFFFFFFACFA56FFFFAC0000000000F6FD2BFEF6F5565600F5F800F60081FEF7F656000000FDFFFFFDFDFFFFFFAC0081F5 +0081F52BFDFFFFFFFFFFFFFFF60000000000FBF6F6F5F656F52BF900FA000000FCFAF5F656000000F7FFFFFFFFFFFFFDF7F68100 +00F6FB00F8FDFFFFFFFFFF810000000000F6F5000000F52B56F9FC00F7F70000FCF881FCF500000000FEFFFFFFFFAC5600FBF500 +000056F900F8ACFDFFFFFFF5000000000000002B0000FDFEFFFE560000F60000F9ACFFFE810000000081FFFEFDFAF800FAF70000 +000000FAF9002B56FAFDFC0000000000000000F80000FBF5FEFEF5000000000000ACFFFA2B0000000000FEFB2BF5008156000000 +00000000F9FBF600F6FBF800000000000000F7F8000000F9F9F9F82B0000000000F6ACACF70000000000F7FD2BFA812B00000000 +0000000000F681FCFBFD0000000000000000FBF6000000000000F52B000000000000F92B810000000000008181F6000000000000 +0000000000000000F6FC00000000000000F6FF0000000000000000000000000000000081FBFB2B00000000F7F900000000000000 +000000000000000000FC00000000000000FCFAF600000000000000000000000000000056ACF581FBF700000081FB000000000000 +0000000000000000FAF90000000000008156F5F8000000000000002BFBFCFBF800000000FD2B000056FB8181FBF8000000000000 +0000000000000000AC0000000000F5FBF90000F6000000000000F5AC56F6005681F50000F6ACFCFBF70000000000000000000000 +00000000000000F881000000F5FAFDFD00000000000000000000F7FEFA2B0000F581F70000000000810000000000000000000000 +000000000000F9FCF500FAFDACFAF5FD00000000000000000000F5ACF5FDFEFA0000F82B00000000810000000000000000000000 +000000000000FCF8F9AC81FD000000FD000000000000FAF7000000F50081F9FAF800000000000000FB0000000000000000000000 +000000000000FC81F956F5FD000000FD0000000000000000F800F5000000000056000000000000F7FB0000000000000000000000 +00000000000000000000F5AC000000ACF800000000000000F5FAF80000000000F50000000000F8ACF50000000000000000000000 +00000000000000000000F5AC000000F5AC000000000000000056F9000000000000000000F7ACFCF5000000000000000000000000 +00000000000000000000F5FD00000000AC000000000000000000FB0000000000000000F5F6F5FCF6000000000000000000000000 +0000000000000000000000FD00000000FBFDF600000000000000F8F900000000000000000000F5FB000000000000000000000000 +0000000000000000000000FDF500000000F9ACF800000000000000815600000000F656818181AC56000000000000000000000000 +000000000000000000000081F80000000000F9FC0000000000000000F9ACACACFCFBFAFA81FD2B00000000000000000000000000 +0000000000000000000000F7FB0000000000FBF70000000000000000000000000000000000FB0000000000000000000000000000 +000000000000000000000000ACF500000000F9FD56F5000000000000000000000000000000FB0000000000000000000000000000 +000000000000000000000000F8FA0000000000F6FEFEF5000000000000F55681FCACFDACFC560000000000000000000000000000 +00000000000000000000000000FBF600000000002BFCFA00F700000000F9FDFDFAFEF90000000000000000000000000000000000 +00000000000000000000000000F5FB0000000000F5FEF7ACAC0000000000000000FCF50000000000000000000000000000000000 +0000000000000000000000000000F6FA000000002BFF2BFFFFAC00000000000000F7FA0000000000000000000000000000000000 +000000000000000000000000000000F65600000000FAFEFFFFAC0000000000F800F6810000000000000000000000000000000000 +00000000000000000000000000000000F52B00000000F8FEFBFF5600000000FCFAACF60000000000000000000000000000000000 +0000000000000000000000000000000000000000000000F9FCFCFFFB00F8FEFFFDF5000000000000000000000000000000000000 +00000000000000000000000000000000000000000000F9FDF7F5FFFD56FFFFFFFD00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000810000FBFFFFFBFFFFFFFFACF9F5F5000000000000000000000000000000 +0000000000000000000000000000000000000000000000F600FC81FFFEFFFFFFFFFFFE8100000000000000000000000000000000 +00000000000000000000000000000000000000000000000000F7F6FDFFFFFFFEFFFFACF500000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000F5FC81FC81FAFBF9F500000000000000000000000000000000 + +00000000000000F781FB8181818181FBFAF500000000000000000000000000000000000000F6FAFAFAFA81F9F600000000000000 +0000000000F8FBF9F500F95656FCFB5656FBF800000000000000000000000000000000F5FAF9F5F7F600F6F6F9FAF70000000000 +000000F5FBFA0056FDFEFEFDFDFAAC81FB56568181560000000000000000000000F9F9F9F7FCFDFEFEFEFFFC81F656FA00000000 +0000F5AC2BF7FBFEFEFD2BF6568181F9F7F6F6F8FBF50000000000000000000000FAF700F600F5F7F7F6F7FEFFACF82BFB000000 +0000FC2BF5FEFFFFF5F7FC81F70000F7F9FAFAF8000000000000000000000000000056F9F9FAF9F7F7FA812BF7FFFF56F7FA0000 +005656F5FEFFAC2BF9FA000000000000000000000000000000000000000000000000000000000000000000FA56FAFEFEF8F9F700 +00FB00F7FFFF56F9F800000000000000000000F656FAFA56F50000000000F5F8F9F8F5000000000000000000F9F7FCFFFB00FB00 +F8F800ACFFACF6FA000000000000000000F6FA562BF5F5F781FA000000F9FA2B00F556F9F5000000000000000081F8FFFEF6562B +810000FFFFF9FAF500000000000000002B8100F5F9FCACFBF82BFBF6FCFAF6FAFC81F600FA2B000000000000002BF8FEFFF8F5FA +FA00F5FEFFFA8100000000000000002B8100F9FEFFFFFFFFFFFBF6FDFEACFDFEFFFFFFFBF581F600000000000000F9FEFFF700FA +FA00FBFFFEF6F900000000000000F6FB00FCFFFFFFFFFFFFFFFFFCF600FCF7ACFEFFFFFFFDF6810000000000000056F9FFAC00FA +FA00F6FFFFF856000000000000F5FBF5ACFFFFFFFFFFFFFFFFFFFF2B002BF8F5ACFFFFFFFFFDF6FA000000000000F9FCFF560081 +FA0081FFFFF8F9000000000000FBF6FBFFFFFFFFFFFFFFFFFFFFFFF800F55600FCFFFFFFFFFF81F8F80000000000F981FFAC0081 +FA0000FEFEF8FB0000000000812BFAFFFFFFFFFFFFFEFFFFFDF92BFA0000F6F981ACFEFFFFFFFF56F9F600000000F9FDFF2B0081 +FA00FAFFFF81812B000000FAF8F9FFFFFEACFBF80000F500000000F9F900562B0000FCF7F9ACFFFF2BF9F50000F9F6FEFFFB0081 +810000FCFFFBF6FB56F7FBF8F9FFFE5600000000F5FAAC000000F82BF6FAFBF800F556F80000F9FFFE2BFAFAFAF8FAFFFEF60081 +FAF6F5ACFFFFAC00F856F7ACFFFCF500000000FAFCFFFC00000056AC00F581F92BFEF9FAF6000081FFFFFBF6F62BFFFFACF6F6FA +F6FA00FAFFFFFFACFA56FFFFAC0000000000F6FD2BFEF6F5565600F5F800F60081FEF7F656000000FDFFFFFDFDFFFFFFAC0081F5 +0081F52BFDFFFFFFFFFFFFFFF60000000000FBF6F6F5F656F52BF900FA000000FCFAF5F656000000F7FFFFFFFFFFFFFDF7F68100 +00F6FB00F8FDFFFFFFFFFF810000000000F6F5000000F52B56F9FC00F7F70000FCF881FCF500000000FEFFFFFFFFAC5600FBF500 +000056F900F8ACFDFFFFFFF5000000000000002B0000FDFEFFFE560000F60000F9ACFFFE810000000081FFFEFDFAF800FAF70000 +000000FAF9002B56FAFDFC0000000000000000F80000FBF5FEFEF5000000000000ACFFFA2B0000000000FEFB2BF5008156000000 +00000000F9FBF600F6FBF800000000000000F7F8000000F9F9F9F82B0000000000F6ACACF70000000000F7FD2BFA812B00000000 +0000000000F681FCFBFD0000000000000000FBF6000000000000F52B000000000000F92B810000000000008181F6000000000000 +0000000000000000F6FC00000000000000F6FF0000000000000000000000000000000081FBFB2B00000000F7F900000000000000 +000000000000000000FC00000000000000FCFAF600000000000000000000000000000056ACF581FBF700000081FB000000000000 +0000000000000000FAF90000000000008156F5F8000000000000002BFBFCFBF800000000FD2B000056FB8181FBF8000000000000 +0000000000000000AC0000000000F5FBF90000F6000000000000F5AC56F6005681F50000F6ACFCFBF70000000000000000000000 +00000000000000F881000000F5FAFDFD00000000000000000000F7FEFA2B0000F581F70000000000810000000000000000000000 +000000000000F9FCF500FAFDACFAF5FD00000000000000000000F5ACF5FDFEFA0000F82B00000000810000000000000000000000 +000000000000FCF8F9AC81FD000000FD000000000000FAF7000000F50081F9FAF800000000000000FB0000000000000000000000 +000000000000FC81F956F5FD000000FD0000000000000000F800F5000000000056000000000000F7FB0000000000000000000000 +00000000000000000000F5AC000000ACF800000000000000F5FAF80000000000F50000000000F8ACF50000000000000000000000 +00000000000000000000F5AC000000F5AC000000000000000056F9000000000000000000F7ACFCF5000000000000000000000000 +00000000000000000000F5FD00000000AC000000000000000000FB0000000000000000F5F6F5FCF6000000000000000000000000 +0000000000000000000000FD00000000FBFDF600000000000000F8F900000000000000000000F5FB000000000000000000000000 +0000000000000000000000FDF500000000F9ACF800000000000000815600000000F656818181AC56000000000000000000000000 +000000000000000000000081F80000000000F9FC0000000000000000F9ACACACFCFBFAFA81FD2B00000000000000000000000000 +0000000000000000000000F7FB0000000000FBF70000000000000000000000000000000000FB0000000000000000000000000000 +000000000000000000000000ACF500000000F9FD56F5000000000000000000000000000000FB0000000000000000000000000000 +000000000000000000000000F8FA0000000000F6FEFEF5000000000000F55681FCACFDACFC560000000000000000000000000000 +00000000000000000000000000FBF600000000002BFCFA00F700000000F9FDFDFAFEF90000000000000000000000000000000000 +00000000000000000000000000F5FB0000000000F5FEF7ACAC0000000000000000FCF50000000000000000000000000000000000 +0000000000000000000000000000F6FA000000002BFF2BFFFFAC00000000000000F7FA0000000000000000000000000000000000 +000000000000000000000000000000F65600000000FAFEFFFFAC0000000000F800F6810000000000000000000000000000000000 +00000000000000000000000000000000F52B00000000F8FEFBFF5600000000FCFAACF60000000000000000000000000000000000 +0000000000000000000000000000000000000000000000F9FCFCFFFB00F8FEFFFDF5000000000000000000000000000000000000 +00000000000000000000000000000000000000000000F9FDF7F5FFFD56FFFFFFFD00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000810000FBFFFFFBFFFFFFFFACF9F5F5000000000000000000000000000000 +0000000000000000000000000000000000000000000000F600FC81FFFEFFFFFFFFFFFE8100000000000000000000000000000000 +00000000000000000000000000000000000000000000000000F7F6FDFFFFFFFEFFFFACF500000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000F5FC81FC81FAFBF9F500000000000000000000000000000000 + +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + + +boot &device;:&partition;,\System\Library\CoreServices\grub.elf + + diff --git a/grub-core/boot/sparc64/ieee1275/boot.S b/grub-core/boot/sparc64/ieee1275/boot.S new file mode 100644 index 000000000..586efb401 --- /dev/null +++ b/grub-core/boot/sparc64/ieee1275/boot.S @@ -0,0 +1,230 @@ +/* -*-Asm-*- */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .text + .align 4 + .globl _start +_start: + /* OF CIF entry point arrives in %o4 */ +pic_base: + call boot_continue + mov %o4, CIF_REG + +#ifndef CDBOOT + /* The offsets to these locations are defined by the + * GRUB_BOOT_MACHINE_foo macros in include/grub/sparc/ieee1275/boot.h, + * and grub-setup uses this to patch these next three values as needed. + * + * The boot_path will be the OF device path of the partition where the + * rest of the GRUB kernel image resides. kernel_sector will be set to + * the location of the first block of the GRUB kernel, and + * kernel_address is the location where we should load that first block. + * + * After loading in that block we will execute it by jumping to the + * load address plus the size of the prepended A.OUT header (32 bytes). + */ + .org GRUB_BOOT_MACHINE_BOOT_DEVPATH +boot_path: + .org GRUB_BOOT_MACHINE_KERNEL_BYTE +boot_path_end: +kernel_byte: .xword (2 << 9) +kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR +#else +#define boot_path (_start + 512 + SCRATCH_PAD_BOOT_SIZE) +#define boot_path_end (_start + 1024) +#include + + .org 8 +kernel_byte: .xword (2 << 9) +kernel_size: .word 512 +kernel_address: .word GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS +#endif + +prom_finddev_name: .asciz "finddevice" +prom_chosen_path: .asciz "/chosen" +prom_getprop_name: .asciz "getprop" +prom_stdout_name: .asciz "stdout" +prom_write_name: .asciz "write" +prom_bootpath_name: .asciz "bootpath" +prom_open_name: .asciz "open" +prom_seek_name: .asciz "seek" +prom_read_name: .asciz "read" +prom_exit_name: .asciz "exit" +grub_name: .asciz "GRUB " +#define GRUB_NAME_LEN 5 + + .align 4 + +prom_open_error: + GET_ABS(prom_open_name, %o2) + call console_write + mov 4, %o3 + /* fallthru */ + +prom_error: + GET_ABS(prom_exit_name, %o0) + /* fallthru */ + + /* %o0: OF call name + * %o1: input arg 1 + */ +prom_call_1_1_o2: + clr %o2 + ba prom_call_x_1 + mov 1, %g1 + +prom_call_getprop: + mov 4, %g1 + stx %g1, [%l1 + 256] + mov CHOSEN_NODE_REG, %o1 + ba prom_call_x_1 + GET_ABS(prom_getprop_name, %o0) + +prom_call_3_1_o1: + ba prom_call_3_1 + mov BOOTDEV_REG, %o1 + + + /* %o2: message string + * %o3: message length + */ +console_write: + GET_ABS(prom_write_name, %o0) + mov STDOUT_NODE_REG, %o1 + /* fallthru */ + + /* %o0: OF call name + * %o1: input arg 1 + * %o2: input arg 2 + * %o3: input arg 3 + */ +prom_call_3_1: + mov 3, %g1 +prom_call_x_1: + mov 1, %o5 + /* fallthru */ + + /* %o0: OF call name + * %g1: num inputs + * %o5: num outputs + * %o1-%o4: inputs + */ +prom_call: + stx %o0, [%l1 + 0x00] + stx %g1, [%l1 + 0x08] + stx %o5, [%l1 + 0x10] + stx %o1, [%l1 + 0x18] + stx %o2, [%l1 + 0x20] + stx %o3, [%l1 + 0x28] + stx %o4, [%l1 + 0x30] + jmpl CIF_REG, %g0 + mov %l1, %o0 + +boot_continue: + mov %o7, PIC_REG /* PIC base */ +#ifndef CDBOOT + sethi %hi(SCRATCH_PAD_BOOT), %l1 /* OF argument slots */ +#else + GET_ABS(_start + 512, %l1) /* OF argument slots */ +#endif + + /* Find the /chosen node so we can fetch the stdout handle, + * and thus perform console output. + * + * chosen_node = prom_finddevice("/chosen") + */ + GET_ABS(prom_finddev_name, %o0) + call prom_call_1_1_o2 + GET_ABS(prom_chosen_path, %o1) + + ldx [%l1 + 0x20], CHOSEN_NODE_REG + brz CHOSEN_NODE_REG, prom_error + + /* getprop(chosen_node, "stdout", &buffer, buffer_size) */ + GET_ABS(prom_stdout_name, %o2) + add %l1, 256, %o3 + call prom_call_getprop + mov 1024, %o4 + + lduw [%l1 + 256], STDOUT_NODE_REG + brz,pn STDOUT_NODE_REG, prom_error + + /* write(stdout_node, "GRUB ", strlen("GRUB ")) */ + GET_ABS(grub_name, %o2) + call console_write + mov GRUB_NAME_LEN, %o3 + + GET_ABS(boot_path, %o3) +#ifndef CDBOOT + ldub [%o3], %o1 + brnz,pn %o1, bootpath_known +#endif + + /* getprop(chosen_node, "bootpath", &buffer, buffer_size) */ + GET_ABS(prom_bootpath_name, %o2) + call prom_call_getprop + mov (boot_path_end - boot_path), %o4 + +bootpath_known: + + /* Open up the boot_path, and use that handle to read the + * first block of the GRUB kernel image. + * + * bootdev_handle = open(boot_path) + */ + GET_ABS(prom_open_name, %o0) + call prom_call_1_1_o2 + GET_ABS(boot_path, %o1) + + ldx [%l1 + 0x20], BOOTDEV_REG + brz,pn BOOTDEV_REG, prom_open_error + + /* Since we have 64-bit cells, the high cell of the seek offset + * is zero and the low cell is the entire value. + * + * seek(bootdev, 0, *kernel_byte) + */ + GET_ABS(prom_seek_name, %o0) + clr %o2 + call prom_call_3_1_o1 + LDX_ABS(kernel_byte, 0x00, %o3) + + /* read(bootdev, *kernel_address, 512) */ + GET_ABS(prom_read_name, %o0) + LDUW_ABS(kernel_address, 0x00, %o2) + call prom_call_3_1_o1 +#ifdef CDBOOT + LDUW_ABS(kernel_size, 0x00, %o3) +#else + mov 512, %o3 +#endif + + LDUW_ABS(kernel_address, 0x00, %o2) + jmpl %o2, %o7 +#ifdef CDBOOT + mov CIF_REG, %o4 +#else + nop +#endif + .org GRUB_BOOT_MACHINE_CODE_END + +/* the last 4 bytes in the sector 0 contain the signature */ + .word GRUB_BOOT_MACHINE_SIGNATURE diff --git a/grub-core/boot/sparc64/ieee1275/diskboot.S b/grub-core/boot/sparc64/ieee1275/diskboot.S new file mode 100644 index 000000000..35e02c1b6 --- /dev/null +++ b/grub-core/boot/sparc64/ieee1275/diskboot.S @@ -0,0 +1,145 @@ +/* -*-Asm-*- */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .text + .align 4 + .globl _start +_start: + /* First stage boot block jumps to us here. */ +pic_base: + call after_info_block + mov %o7, PIC_REG + +prom_write_name: .asciz "write" +prom_seek_name: .asciz "seek" +prom_read_name: .asciz "read" +prom_close_name: .asciz "close" + +notification_string: .asciz "Loading kernel" +#define NOTIFICATION_STRING_LEN 14 + +notification_step: .asciz "." +#define NOTIFICATION_STEP_LEN 1 + +notification_done: .asciz "\r\n" +#define NOTIFICATION_DONE_LEN 2 + + .align 4 + + /* %o2: message string + * %o3: message length + */ +console_write: + GET_ABS(prom_write_name, %o0) + mov STDOUT_NODE_REG, %o1 + /* fallthru */ + + /* %o0: OF call name + * %o1: input arg 1 + * %o2: input arg 2 + * %o3: input arg 3 + */ +prom_call_3_1: + mov 3, %g1 + mov 1, %o5 + /* fallthru */ + + /* %o0: OF call name + * %g1: num inputs + * %o5: num outputs + * %o1-%o4: inputs + */ +prom_call: + stx %o0, [%l1 + 0x00] + stx %g1, [%l1 + 0x08] + stx %o5, [%l1 + 0x10] + stx %o1, [%l1 + 0x18] + stx %o2, [%l1 + 0x20] + stx %o3, [%l1 + 0x28] + stx %o4, [%l1 + 0x30] + jmpl CIF_REG, %g0 + mov %l1, %o0 + + +after_info_block: + sethi %hi(SCRATCH_PAD_DISKBOOT), %l1 /* OF argument slots */ + + GET_ABS(notification_string, %o2) + call console_write + mov NOTIFICATION_STRING_LEN, %o3 + + GET_ABS(firstlist - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE, %l2) + set GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS, %l3 +bootloop: + lduw [%l2 + 0x08], %o0 + brz %o0, bootit + lduw [%l2 + 0x00], %o3 + sllx %o3, 32, %o3 + lduw [%l2 + 0x04], %o4 + or %o3, %o4, %o3 + GET_ABS(prom_seek_name, %o0) + mov BOOTDEV_REG, %o1 + clr %o2 + call prom_call_3_1 + sllx %o3, 9, %o3 + + GET_ABS(prom_read_name, %o0) + mov BOOTDEV_REG, %o1 + lduw [%l2 + 0x08], %o3 + sllx %o3, 9, %o3 + mov %l3, %o2 + call prom_call_3_1 + add %l3, %o3, %l3 + + GET_ABS(notification_step, %o2) + call console_write + mov NOTIFICATION_STEP_LEN, %o3 + + ba bootloop + sub %l2, GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE, %l2 + +bootit: + GET_ABS(prom_close_name, %o0) + mov 1, %g1 + mov 0, %o5 + call prom_call + mov BOOTDEV_REG, %o1 + + GET_ABS(notification_done, %o2) + call console_write + mov NOTIFICATION_DONE_LEN, %o3 + sethi %hi(GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS), %o2 + jmpl %o2 + %lo(GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS), %o7 + mov CIF_REG, %o4 +1: ba,a 1b + +lastlist: + .word 0 + .word 0 + + .org (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE) +blocklist_default_start: + .word 0 + .word 2 +blocklist_default_len: + .word 0 +firstlist: diff --git a/grub-core/bus/bonito.c b/grub-core/bus/bonito.c new file mode 100644 index 000000000..9a63f073c --- /dev/null +++ b/grub-core/bus/bonito.c @@ -0,0 +1,176 @@ +/* bonito.c - PCI bonito interface. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +static grub_uint32_t base_win[GRUB_MACHINE_PCI_NUM_WIN]; +static const grub_size_t sizes_win[GRUB_MACHINE_PCI_NUM_WIN] = + {GRUB_MACHINE_PCI_WIN1_SIZE, GRUB_MACHINE_PCI_WIN_SIZE, + GRUB_MACHINE_PCI_WIN_SIZE}; +/* Usage counters. */ +static int usage_win[GRUB_MACHINE_PCI_NUM_WIN]; +static grub_addr_t addr_win[GRUB_MACHINE_PCI_NUM_WIN] = + {GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR, + GRUB_MACHINE_PCI_WIN3_ADDR}; + +grub_bonito_type_t grub_bonito_type; + +static volatile void * +config_addr (grub_pci_address_t addr) +{ + if (grub_bonito_type == GRUB_BONITO_2F) + { + GRUB_MACHINE_PCI_CONF_CTRL_REG_2F = 1 << ((addr >> 11) & 0xf); + return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_2F + | (addr & 0x07ff)); + } + else + { + + if (addr >> 16) + return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A_EXT | addr); + else + return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A | addr); + } +} + +grub_uint32_t +grub_pci_read (grub_pci_address_t addr) +{ + return *(volatile grub_uint32_t *) config_addr (addr); +} + +grub_uint16_t +grub_pci_read_word (grub_pci_address_t addr) +{ + return *(volatile grub_uint16_t *) config_addr (addr); +} + +grub_uint8_t +grub_pci_read_byte (grub_pci_address_t addr) +{ + return *(volatile grub_uint8_t *) config_addr (addr); +} + +void +grub_pci_write (grub_pci_address_t addr, grub_uint32_t data) +{ + *(volatile grub_uint32_t *) config_addr (addr) = data; +} + +void +grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data) +{ + *(volatile grub_uint16_t *) config_addr (addr) = data; +} + +void +grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data) +{ + *(volatile grub_uint8_t *) config_addr (addr) = data; +} + + +static inline void +write_bases_2f (void) +{ + int i; + grub_uint32_t reg = 0; + for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) + reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT) + & GRUB_MACHINE_PCI_WIN_MASK) + << (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE)); + GRUB_MACHINE_PCI_IO_CTRL_REG_2F = reg; +} + +volatile void * +grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)), + grub_addr_t base, grub_size_t size) +{ + if (grub_bonito_type == GRUB_BONITO_2F) + { + int i; + grub_addr_t newbase; + + /* First try already used registers. */ + for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) + if (usage_win[i] && base_win[i] <= base + && base_win[i] + sizes_win[i] > base + size) + { + usage_win[i]++; + return (void *) + (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); + } + /* Map new register. */ + newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK; + for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) + if (!usage_win[i] && newbase <= base + && newbase + sizes_win[i] > base + size) + { + usage_win[i]++; + base_win[i] = newbase; + write_bases_2f (); + return (void *) + (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); + } + grub_fatal ("Out of PCI windows."); + } + else + { + int region = 0; + if (base >= 0x10000000 + && base + size <= 0x18000000) + region = 1; + if (base >= 0x1c000000 + && base + size <= 0x1f000000) + region = 2; + if (region == 0) + grub_fatal ("Attempt to map out of regions"); + return (void *) (0xa0000000 | base); + } +} + +void * +grub_pci_device_map_range_cached (grub_pci_device_t dev, + grub_addr_t base, grub_size_t size) +{ + return (void *) (((grub_addr_t) grub_pci_device_map_range (dev, base, size)) + & ~0x20000000); +} + +void +grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)), + volatile void *mem, + grub_size_t size __attribute__ ((unused))) +{ + if (grub_bonito_type == GRUB_BONITO_2F) + { + int i; + for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) + if (usage_win[i] && addr_win[i] + == (((grub_addr_t) mem | 0x20000000) + & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK)) + { + usage_win[i]--; + return; + } + grub_fatal ("Tried to unmap not mapped region"); + } +} diff --git a/grub-core/bus/cs5536.c b/grub-core/bus/cs5536.c new file mode 100644 index 000000000..bb9aa27e5 --- /dev/null +++ b/grub-core/bus/cs5536.c @@ -0,0 +1,381 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#ifdef GRUB_MACHINE_MIPS_LOONGSON +#include +#endif + +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Context for grub_cs5536_find. */ +struct grub_cs5536_find_ctx +{ + grub_pci_device_t *devp; + int found; +}; + +/* Helper for grub_cs5536_find. */ +static int +grub_cs5536_find_iter (grub_pci_device_t dev, grub_pci_id_t pciid, void *data) +{ + struct grub_cs5536_find_ctx *ctx = data; + + if (pciid == GRUB_CS5536_PCIID) + { + *ctx->devp = dev; + ctx->found = 1; + return 1; + } + return 0; +} + +int +grub_cs5536_find (grub_pci_device_t *devp) +{ + struct grub_cs5536_find_ctx ctx = { + .devp = devp, + .found = 0 + }; + + grub_pci_iterate (grub_cs5536_find_iter, &ctx); + + return ctx.found; +} + +grub_uint64_t +grub_cs5536_read_msr (grub_pci_device_t dev, grub_uint32_t addr) +{ + grub_uint64_t ret = 0; + grub_pci_write (grub_pci_make_address (dev, GRUB_CS5536_MSR_MAILBOX_ADDR), + addr); + ret = (grub_uint64_t) + grub_pci_read (grub_pci_make_address (dev, GRUB_CS5536_MSR_MAILBOX_DATA0)); + ret |= (((grub_uint64_t) + grub_pci_read (grub_pci_make_address (dev, + GRUB_CS5536_MSR_MAILBOX_DATA1))) + << 32); + return ret; +} + +void +grub_cs5536_write_msr (grub_pci_device_t dev, grub_uint32_t addr, + grub_uint64_t val) +{ + grub_pci_write (grub_pci_make_address (dev, GRUB_CS5536_MSR_MAILBOX_ADDR), + addr); + grub_pci_write (grub_pci_make_address (dev, GRUB_CS5536_MSR_MAILBOX_DATA0), + val & 0xffffffff); + grub_pci_write (grub_pci_make_address (dev, GRUB_CS5536_MSR_MAILBOX_DATA1), + val >> 32); +} + +grub_err_t +grub_cs5536_smbus_wait (grub_port_t smbbase) +{ + grub_uint64_t start = grub_get_time_ms (); + while (1) + { + grub_uint8_t status; + status = grub_inb (smbbase + GRUB_CS5536_SMB_REG_STATUS); + if (status & GRUB_CS5536_SMB_REG_STATUS_SDAST) + return GRUB_ERR_NONE; + if (status & GRUB_CS5536_SMB_REG_STATUS_BER) + return grub_error (GRUB_ERR_IO, "SM bus error"); + if (status & GRUB_CS5536_SMB_REG_STATUS_NACK) + return grub_error (GRUB_ERR_IO, "NACK received"); + if (grub_get_time_ms () > start + 40) + return grub_error (GRUB_ERR_IO, "SM stalled"); + } +} + +grub_err_t +grub_cs5536_read_spd_byte (grub_port_t smbbase, grub_uint8_t dev, + grub_uint8_t addr, grub_uint8_t *res) +{ + grub_err_t err; + + /* Send START. */ + grub_outb (grub_inb (smbbase + GRUB_CS5536_SMB_REG_CTRL1) + | GRUB_CS5536_SMB_REG_CTRL1_START, + smbbase + GRUB_CS5536_SMB_REG_CTRL1); + + /* Send device address. */ + err = grub_cs5536_smbus_wait (smbbase); + if (err) + return err; + grub_outb (dev << 1, smbbase + GRUB_CS5536_SMB_REG_DATA); + + /* Send ACK. */ + err = grub_cs5536_smbus_wait (smbbase); + if (err) + return err; + grub_outb (grub_inb (smbbase + GRUB_CS5536_SMB_REG_CTRL1) + | GRUB_CS5536_SMB_REG_CTRL1_ACK, + smbbase + GRUB_CS5536_SMB_REG_CTRL1); + + /* Send byte address. */ + grub_outb (addr, smbbase + GRUB_CS5536_SMB_REG_DATA); + + /* Send START. */ + err = grub_cs5536_smbus_wait (smbbase); + if (err) + return err; + grub_outb (grub_inb (smbbase + GRUB_CS5536_SMB_REG_CTRL1) + | GRUB_CS5536_SMB_REG_CTRL1_START, + smbbase + GRUB_CS5536_SMB_REG_CTRL1); + + /* Send device address. */ + err = grub_cs5536_smbus_wait (smbbase); + if (err) + return err; + grub_outb ((dev << 1) | 1, smbbase + GRUB_CS5536_SMB_REG_DATA); + + /* Send STOP. */ + err = grub_cs5536_smbus_wait (smbbase); + if (err) + return err; + grub_outb (grub_inb (smbbase + GRUB_CS5536_SMB_REG_CTRL1) + | GRUB_CS5536_SMB_REG_CTRL1_STOP, + smbbase + GRUB_CS5536_SMB_REG_CTRL1); + + err = grub_cs5536_smbus_wait (smbbase); + if (err) + return err; + *res = grub_inb (smbbase + GRUB_CS5536_SMB_REG_DATA); + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_cs5536_init_smbus (grub_pci_device_t dev, grub_uint16_t divisor, + grub_port_t *smbbase) +{ + grub_uint64_t smbbar; + + smbbar = grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_SMB_BAR); + + /* FIXME */ + if (!(smbbar & GRUB_CS5536_LBAR_ENABLE)) + return grub_error(GRUB_ERR_IO, "SMB controller not enabled\n"); + *smbbase = (smbbar & GRUB_CS5536_LBAR_ADDR_MASK) + GRUB_MACHINE_PCI_IO_BASE; + + if (divisor < 8) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid divisor"); + + /* Disable SMB. */ + grub_outb (0, *smbbase + GRUB_CS5536_SMB_REG_CTRL2); + + /* Disable interrupts. */ + grub_outb (0, *smbbase + GRUB_CS5536_SMB_REG_CTRL1); + + /* Set as master. */ + grub_outb (GRUB_CS5536_SMB_REG_ADDR_MASTER, + *smbbase + GRUB_CS5536_SMB_REG_ADDR); + + /* Launch. */ + grub_outb (((divisor >> 7) & 0xff), *smbbase + GRUB_CS5536_SMB_REG_CTRL3); + grub_outb (((divisor << 1) & 0xfe) | GRUB_CS5536_SMB_REG_CTRL2_ENABLE, + *smbbase + GRUB_CS5536_SMB_REG_CTRL2); + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_cs5536_read_spd (grub_port_t smbbase, grub_uint8_t dev, + struct grub_smbus_spd *res) +{ + grub_err_t err; + grub_size_t size; + grub_uint8_t b; + grub_size_t ptr; + + err = grub_cs5536_read_spd_byte (smbbase, dev, 0, &b); + if (err) + return err; + if (b == 0) + return grub_error (GRUB_ERR_IO, "no SPD found"); + size = b; + + ((grub_uint8_t *) res)[0] = b; + for (ptr = 1; ptr < size; ptr++) + { + err = grub_cs5536_read_spd_byte (smbbase, dev, ptr, + &((grub_uint8_t *) res)[ptr]); + if (err) + return err; + } + return GRUB_ERR_NONE; +} + +static inline void +set_io_space (grub_pci_device_t dev, int num, grub_uint16_t start, + grub_uint16_t len) +{ + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_GL_REGIONS_START + num, + ((((grub_uint64_t) start + len - 4) + << GRUB_CS5536_MSR_GL_REGION_IO_TOP_SHIFT) + & GRUB_CS5536_MSR_GL_REGION_TOP_MASK) + | (((grub_uint64_t) start + << GRUB_CS5536_MSR_GL_REGION_IO_BASE_SHIFT) + & GRUB_CS5536_MSR_GL_REGION_BASE_MASK) + | GRUB_CS5536_MSR_GL_REGION_IO + | GRUB_CS5536_MSR_GL_REGION_ENABLE); +} + +static inline void +set_iod (grub_pci_device_t dev, int num, int dest, int start, int mask) +{ + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_GL_IOD_START + num, + ((grub_uint64_t) dest << GRUB_CS5536_IOD_DEST_SHIFT) + | (((grub_uint64_t) start & GRUB_CS5536_IOD_ADDR_MASK) + << GRUB_CS5536_IOD_BASE_SHIFT) + | ((mask & GRUB_CS5536_IOD_ADDR_MASK) + << GRUB_CS5536_IOD_MASK_SHIFT)); +} + +static inline void +set_p2d (grub_pci_device_t dev, int num, int dest, grub_uint32_t start) +{ + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_GL_P2D_START + num, + (((grub_uint64_t) dest) << GRUB_CS5536_P2D_DEST_SHIFT) + | ((grub_uint64_t) (start >> GRUB_CS5536_P2D_LOG_ALIGN) + << GRUB_CS5536_P2D_BASE_SHIFT) + | (((1 << (32 - GRUB_CS5536_P2D_LOG_ALIGN)) - 1) + << GRUB_CS5536_P2D_MASK_SHIFT)); +} + +void +grub_cs5536_init_geode (grub_pci_device_t dev) +{ + /* Enable more BARs. */ + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_IRQ_MAP_BAR, + GRUB_CS5536_LBAR_TURN_ON | GRUB_CS5536_LBAR_IRQ_MAP); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_MFGPT_BAR, + GRUB_CS5536_LBAR_TURN_ON | GRUB_CS5536_LBAR_MFGPT); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_ACPI_BAR, + GRUB_CS5536_LBAR_TURN_ON | GRUB_CS5536_LBAR_ACPI); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_PM_BAR, + GRUB_CS5536_LBAR_TURN_ON | GRUB_CS5536_LBAR_PM); + + /* Setup DIVIL. */ +#ifdef GRUB_MACHINE_MIPS_LOONGSON + switch (grub_arch_machine) + { + case GRUB_ARCH_MACHINE_YEELOONG: + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LEG_IO, + GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86 + | GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP + | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0 + | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1); + break; + case GRUB_ARCH_MACHINE_FULOONG2F: + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LEG_IO, + GRUB_CS5536_MSR_DIVIL_LEG_IO_UART2_COM3 + | GRUB_CS5536_MSR_DIVIL_LEG_IO_UART1_COM1 + | GRUB_CS5536_MSR_DIVIL_LEG_IO_MODE_X86 + | GRUB_CS5536_MSR_DIVIL_LEG_IO_F_REMAP + | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE0 + | GRUB_CS5536_MSR_DIVIL_LEG_IO_RTC_ENABLE1); + break; + } +#endif + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_PRIMARY_MASK, + (~GRUB_CS5536_DIVIL_LPC_INTERRUPTS) & 0xffff); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_IRQ_MAPPER_LPC_MASK, + GRUB_CS5536_DIVIL_LPC_INTERRUPTS); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_DIVIL_LPC_SERIAL_IRQ_CONTROL, + GRUB_CS5536_MSR_DIVIL_LPC_SERIAL_IRQ_CONTROL_ENABLE); + + /* Initialise USB controller. */ + /* FIXME: assign adresses dynamically. */ + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_OHCI_BASE, + GRUB_CS5536_MSR_USB_BASE_BUS_MASTER + | GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE + | 0x05024000); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE, + GRUB_CS5536_MSR_USB_BASE_BUS_MASTER + | GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE + | (0x20ULL << GRUB_CS5536_MSR_USB_EHCI_BASE_FLDJ_SHIFT) + | 0x05023000); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_CONTROLLER_BASE, + GRUB_CS5536_MSR_USB_BASE_BUS_MASTER + | GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE | 0x05020000); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_OPTION_CONTROLLER_BASE, + GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE | 0x05022000); + set_p2d (dev, 0, GRUB_CS5536_DESTINATION_USB, 0x05020000); + set_p2d (dev, 1, GRUB_CS5536_DESTINATION_USB, 0x05022000); + set_p2d (dev, 5, GRUB_CS5536_DESTINATION_USB, 0x05024000); + set_p2d (dev, 6, GRUB_CS5536_DESTINATION_USB, 0x05023000); + + { + volatile grub_uint32_t *oc; + oc = grub_pci_device_map_range (dev, 0x05022000, + GRUB_CS5536_USB_OPTION_REGS_SIZE); + + oc[GRUB_CS5536_USB_OPTION_REG_UOCMUX] = + (oc[GRUB_CS5536_USB_OPTION_REG_UOCMUX] + & ~GRUB_CS5536_USB_OPTION_REG_UOCMUX_PMUX_MASK) + | GRUB_CS5536_USB_OPTION_REG_UOCMUX_PMUX_HC; + grub_pci_device_unmap_range (dev, oc, GRUB_CS5536_USB_OPTION_REGS_SIZE); + } + + /* Setup IDE controller. */ + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_IDE_IO_BAR, + GRUB_CS5536_LBAR_IDE + | GRUB_CS5536_MSR_IDE_IO_BAR_UNITS); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_IDE_CFG, + GRUB_CS5536_MSR_IDE_CFG_CHANNEL_ENABLE); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_IDE_TIMING, + (GRUB_CS5536_MSR_IDE_TIMING_PIO0 + << GRUB_CS5536_MSR_IDE_TIMING_DRIVE0_SHIFT) + | (GRUB_CS5536_MSR_IDE_TIMING_PIO0 + << GRUB_CS5536_MSR_IDE_TIMING_DRIVE1_SHIFT)); + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_IDE_CAS_TIMING, + (GRUB_CS5536_MSR_IDE_CAS_TIMING_CMD_PIO0 + << GRUB_CS5536_MSR_IDE_CAS_TIMING_CMD_SHIFT) + | (GRUB_CS5536_MSR_IDE_CAS_TIMING_PIO0 + << GRUB_CS5536_MSR_IDE_CAS_TIMING_DRIVE0_SHIFT) + | (GRUB_CS5536_MSR_IDE_CAS_TIMING_PIO0 + << GRUB_CS5536_MSR_IDE_CAS_TIMING_DRIVE1_SHIFT)); + + /* Setup Geodelink PCI. */ + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_GL_PCI_CTRL, + (4ULL << GRUB_CS5536_MSR_GL_PCI_CTRL_OUT_THR_SHIFT) + | (4ULL << GRUB_CS5536_MSR_GL_PCI_CTRL_IN_THR_SHIFT) + | (8ULL << GRUB_CS5536_MSR_GL_PCI_CTRL_LATENCY_SHIFT) + | GRUB_CS5536_MSR_GL_PCI_CTRL_IO_ENABLE + | GRUB_CS5536_MSR_GL_PCI_CTRL_MEMORY_ENABLE); + + /* Setup windows. */ + set_io_space (dev, 0, GRUB_CS5536_LBAR_SMBUS, GRUB_CS5536_SMBUS_REGS_SIZE); + set_io_space (dev, 1, GRUB_CS5536_LBAR_GPIO, GRUB_CS5536_GPIO_REGS_SIZE); + set_io_space (dev, 2, GRUB_CS5536_LBAR_MFGPT, GRUB_CS5536_MFGPT_REGS_SIZE); + set_io_space (dev, 3, GRUB_CS5536_LBAR_IRQ_MAP, GRUB_CS5536_IRQ_MAP_REGS_SIZE); + set_io_space (dev, 4, GRUB_CS5536_LBAR_PM, GRUB_CS5536_PM_REGS_SIZE); + set_io_space (dev, 5, GRUB_CS5536_LBAR_ACPI, GRUB_CS5536_ACPI_REGS_SIZE); + set_iod (dev, 0, GRUB_CS5536_DESTINATION_IDE, GRUB_ATA_CH0_PORT1, 0xffff8); + set_iod (dev, 1, GRUB_CS5536_DESTINATION_ACC, GRUB_CS5536_LBAR_ACC, 0xfff80); + set_iod (dev, 2, GRUB_CS5536_DESTINATION_IDE, GRUB_CS5536_LBAR_IDE, 0xffff0); +} diff --git a/grub-core/bus/emu/pci.c b/grub-core/bus/emu/pci.c new file mode 100644 index 000000000..267f2622d --- /dev/null +++ b/grub-core/bus/emu/pci.c @@ -0,0 +1,78 @@ +/* pci.c - Generic PCI interfaces. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +grub_pci_address_t +grub_pci_make_address (grub_pci_device_t dev, int reg) +{ + grub_pci_address_t ret; + ret.dev = dev; + ret.pos = reg; + return ret; +} + +void +grub_pci_iterate (grub_pci_iteratefunc_t hook, void *hook_data) +{ + struct pci_device_iterator *iter; + struct pci_slot_match slot; + struct pci_device *dev; + slot.domain = PCI_MATCH_ANY; + slot.bus = PCI_MATCH_ANY; + slot.dev = PCI_MATCH_ANY; + slot.func = PCI_MATCH_ANY; + iter = pci_slot_match_iterator_create (&slot); + while ((dev = pci_device_next (iter))) + hook (dev, dev->vendor_id | (dev->device_id << 16), hook_data); + pci_iterator_destroy (iter); +} + +void * +grub_pci_device_map_range (grub_pci_device_t dev, grub_addr_t base, + grub_size_t size) +{ + void *addr; + int err; + err = pci_device_map_range (dev, base, size, PCI_DEV_MAP_FLAG_WRITABLE, &addr); + if (err) + grub_util_error ("mapping 0x%llx failed (error %d)", + (unsigned long long) base, err); + return addr; +} + +void +grub_pci_device_unmap_range (grub_pci_device_t dev, void *mem, + grub_size_t size) +{ + pci_device_unmap_range (dev, mem, size); +} + +GRUB_MOD_INIT (emupci) +{ + pci_system_init (); +} + +GRUB_MOD_FINI (emupci) +{ + pci_system_cleanup (); +} diff --git a/grub-core/bus/i386/ieee1275/pci.c b/grub-core/bus/i386/ieee1275/pci.c new file mode 100644 index 000000000..1fd3b5610 --- /dev/null +++ b/grub-core/bus/i386/ieee1275/pci.c @@ -0,0 +1,42 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +volatile void * +grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)), + grub_addr_t base, + grub_size_t size) +{ + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_REAL_MODE)) + return (volatile void *) base; + if (grub_ieee1275_map (base, base, size, 7)) + grub_fatal ("couldn't map 0x%lx", base); + return (volatile void *) base; +} + +void +grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)), + volatile void *mem __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused))) +{ +} diff --git a/grub-core/bus/pci.c b/grub-core/bus/pci.c new file mode 100644 index 000000000..b388ce5c8 --- /dev/null +++ b/grub-core/bus/pci.c @@ -0,0 +1,173 @@ +/* pci.c - Generic PCI interfaces. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* FIXME: correctly support 64-bit architectures. */ +/* #if GRUB_TARGET_SIZEOF_VOID_P == 4 */ +struct grub_pci_dma_chunk * +grub_memalign_dma32 (grub_size_t align, grub_size_t size) +{ + void *ret; + if (align < 64) + align = 64; + size = ALIGN_UP (size, align); + ret = grub_memalign (align, size); +#if GRUB_CPU_SIZEOF_VOID_P == 8 + if ((grub_addr_t) ret >> 32) + { + /* Shouldn't happend since the only platform in this case is + x86_64-efi and it skips any regions > 4GiB because + of EFI bugs anyway. */ + grub_error (GRUB_ERR_BUG, "allocation outside 32-bit range"); + return 0; + } +#endif + if (!ret) + return 0; + grub_arch_sync_dma_caches (ret, size); + return ret; +} + +/* FIXME: evil. */ +void +grub_dma_free (struct grub_pci_dma_chunk *ch) +{ + grub_size_t size = (((struct grub_mm_header *) ch) - 1)->size * GRUB_MM_ALIGN; + grub_arch_sync_dma_caches (ch, size); + grub_free (ch); +} +/* #endif */ + +#ifdef GRUB_MACHINE_MIPS_LOONGSON +volatile void * +grub_dma_get_virt (struct grub_pci_dma_chunk *ch) +{ + return (void *) ((((grub_uint32_t) ch) & 0x1fffffff) | 0xa0000000); +} + +grub_uint32_t +grub_dma_get_phys (struct grub_pci_dma_chunk *ch) +{ + return (((grub_uint32_t) ch) & 0x1fffffff) | 0x80000000; +} +#else + +volatile void * +grub_dma_get_virt (struct grub_pci_dma_chunk *ch) +{ + return (void *) ch; +} + +grub_uint32_t +grub_dma_get_phys (struct grub_pci_dma_chunk *ch) +{ + return (grub_uint32_t) (grub_addr_t) ch; +} + +#endif + +grub_pci_address_t +grub_pci_make_address (grub_pci_device_t dev, int reg) +{ + return (1 << 31) | (dev.bus << 16) | (dev.device << 11) + | (dev.function << 8) | reg; +} + +void +grub_pci_iterate (grub_pci_iteratefunc_t hook, void *hook_data) +{ + grub_pci_device_t dev; + grub_pci_address_t addr; + grub_pci_id_t id; + grub_uint32_t hdr; + + for (dev.bus = 0; dev.bus < GRUB_PCI_NUM_BUS; dev.bus++) + { + for (dev.device = 0; dev.device < GRUB_PCI_NUM_DEVICES; dev.device++) + { + for (dev.function = 0; dev.function < 8; dev.function++) + { + addr = grub_pci_make_address (dev, GRUB_PCI_REG_PCI_ID); + id = grub_pci_read (addr); + + /* Check if there is a device present. */ + if (id >> 16 == 0xFFFF) + { + if (dev.function == 0) + /* Devices are required to implement function 0, so if + it's missing then there is no device here. */ + break; + else + continue; + } + + if (hook (dev, id, hook_data)) + return; + + /* Probe only func = 0 if the device if not multifunction */ + if (dev.function == 0) + { + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CACHELINE); + hdr = grub_pci_read (addr); + if (!(hdr & 0x800000)) + break; + } + } + } + } +} + +grub_uint8_t +grub_pci_find_capability (grub_pci_device_t dev, grub_uint8_t cap) +{ + grub_uint8_t pos = 0x34; + int ttl = 48; + + while (ttl--) + { + grub_uint8_t id; + grub_pci_address_t addr; + + addr = grub_pci_make_address (dev, pos); + pos = grub_pci_read_byte (addr); + if (pos < 0x40) + break; + + pos &= ~3; + + addr = grub_pci_make_address (dev, pos); + id = grub_pci_read_byte (addr); + + if (id == 0xff) + break; + + if (id == cap) + return pos; + pos++; + } + return 0; +} diff --git a/grub-core/bus/usb/ehci.c b/grub-core/bus/usb/ehci.c new file mode 100644 index 000000000..5f4297bb2 --- /dev/null +++ b/grub-core/bus/usb/ehci.c @@ -0,0 +1,2012 @@ +/* ehci.c - EHCI Support. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* This simple GRUB implementation of EHCI driver: + * - assumes no IRQ + * - is not supporting isochronous transfers (iTD, siTD) + * - is not supporting interrupt transfers + */ + +#define GRUB_EHCI_PCI_SBRN_REG 0x60 + +/* Capability registers offsets */ +enum +{ + GRUB_EHCI_EHCC_CAPLEN = 0x00, /* byte */ + GRUB_EHCI_EHCC_VERSION = 0x02, /* word */ + GRUB_EHCI_EHCC_SPARAMS = 0x04, /* dword */ + GRUB_EHCI_EHCC_CPARAMS = 0x08, /* dword */ + GRUB_EHCI_EHCC_PROUTE = 0x0c, /* 60 bits */ +}; + +#define GRUB_EHCI_EECP_MASK (0xff << 8) +#define GRUB_EHCI_EECP_SHIFT 8 + +#define GRUB_EHCI_ADDR_MEM_MASK (~0xff) +#define GRUB_EHCI_POINTER_MASK (~0x1f) + +/* Capability register SPARAMS bits */ +enum +{ + GRUB_EHCI_SPARAMS_N_PORTS = (0xf << 0), + GRUB_EHCI_SPARAMS_PPC = (1 << 4), /* Power port control */ + GRUB_EHCI_SPARAMS_PRR = (1 << 7), /* Port routing rules */ + GRUB_EHCI_SPARAMS_N_PCC = (0xf << 8), /* No of ports per comp. */ + GRUB_EHCI_SPARAMS_NCC = (0xf << 12), /* No of com. controllers */ + GRUB_EHCI_SPARAMS_P_IND = (1 << 16), /* Port indicators present */ + GRUB_EHCI_SPARAMS_DEBUG_P = (0xf << 20) /* Debug port */ +}; + +#define GRUB_EHCI_MAX_N_PORTS 15 /* Max. number of ports */ + +/* Capability register CPARAMS bits */ +enum +{ + GRUB_EHCI_CPARAMS_64BIT = (1 << 0), + GRUB_EHCI_CPARAMS_PROG_FRAMELIST = (1 << 1), + GRUB_EHCI_CPARAMS_PARK_CAP = (1 << 2) +}; + +#define GRUB_EHCI_N_FRAMELIST 1024 +#define GRUB_EHCI_N_QH 256 +#define GRUB_EHCI_N_TD 640 + +#define GRUB_EHCI_QH_EMPTY 1 + +/* USBLEGSUP bits and related OS OWNED byte offset */ +enum +{ + GRUB_EHCI_BIOS_OWNED = (1 << 16), + GRUB_EHCI_OS_OWNED = (1 << 24) +}; + +/* Operational registers offsets */ +enum +{ + GRUB_EHCI_COMMAND = 0x00, + GRUB_EHCI_STATUS = 0x04, + GRUB_EHCI_INTERRUPT = 0x08, + GRUB_EHCI_FRAME_INDEX = 0x0c, + GRUB_EHCI_64BIT_SEL = 0x10, + GRUB_EHCI_FL_BASE = 0x14, + GRUB_EHCI_CUR_AL_ADDR = 0x18, + GRUB_EHCI_CONFIG_FLAG = 0x40, + GRUB_EHCI_PORT_STAT_CMD = 0x44 +}; + +/* Operational register COMMAND bits */ +enum +{ + GRUB_EHCI_CMD_RUNSTOP = (1 << 0), + GRUB_EHCI_CMD_HC_RESET = (1 << 1), + GRUB_EHCI_CMD_FL_SIZE = (3 << 2), + GRUB_EHCI_CMD_PS_ENABL = (1 << 4), + GRUB_EHCI_CMD_AS_ENABL = (1 << 5), + GRUB_EHCI_CMD_AS_ADV_D = (1 << 6), + GRUB_EHCI_CMD_L_HC_RES = (1 << 7), + GRUB_EHCI_CMD_AS_PARKM = (3 << 8), + GRUB_EHCI_CMD_AS_PARKE = (1 << 11), + GRUB_EHCI_CMD_INT_THRS = (0xff << 16) +}; + +/* Operational register STATUS bits */ +enum +{ + GRUB_EHCI_ST_INTERRUPT = (1 << 0), + GRUB_EHCI_ST_ERROR_INT = (1 << 1), + GRUB_EHCI_ST_PORT_CHG = (1 << 2), + GRUB_EHCI_ST_FL_ROLLOVR = (1 << 3), + GRUB_EHCI_ST_HS_ERROR = (1 << 4), + GRUB_EHCI_ST_AS_ADVANCE = (1 << 5), + GRUB_EHCI_ST_HC_HALTED = (1 << 12), + GRUB_EHCI_ST_RECLAM = (1 << 13), + GRUB_EHCI_ST_PS_STATUS = (1 << 14), + GRUB_EHCI_ST_AS_STATUS = (1 << 15) +}; + +/* Operational register PORT_STAT_CMD bits */ +enum +{ + GRUB_EHCI_PORT_CONNECT = (1 << 0), + GRUB_EHCI_PORT_CONNECT_CH = (1 << 1), + GRUB_EHCI_PORT_ENABLED = (1 << 2), + GRUB_EHCI_PORT_ENABLED_CH = (1 << 3), + GRUB_EHCI_PORT_OVERCUR = (1 << 4), + GRUB_EHCI_PORT_OVERCUR_CH = (1 << 5), + GRUB_EHCI_PORT_RESUME = (1 << 6), + GRUB_EHCI_PORT_SUSPEND = (1 << 7), + GRUB_EHCI_PORT_RESET = (1 << 8), + GRUB_EHCI_PORT_LINE_STAT = (3 << 10), + GRUB_EHCI_PORT_POWER = (1 << 12), + GRUB_EHCI_PORT_OWNER = (1 << 13), + GRUB_EHCI_PORT_INDICATOR = (3 << 14), + GRUB_EHCI_PORT_TEST = (0xf << 16), + GRUB_EHCI_PORT_WON_CONN_E = (1 << 20), + GRUB_EHCI_PORT_WON_DISC_E = (1 << 21), + GRUB_EHCI_PORT_WON_OVER_E = (1 << 22), + + GRUB_EHCI_PORT_LINE_SE0 = (0 << 10), + GRUB_EHCI_PORT_LINE_K = (1 << 10), + GRUB_EHCI_PORT_LINE_J = (2 << 10), + GRUB_EHCI_PORT_LINE_UNDEF = (3 << 10), + GRUB_EHCI_PORT_LINE_LOWSP = GRUB_EHCI_PORT_LINE_K, /* K state means low speed */ + GRUB_EHCI_PORT_WMASK = ~(GRUB_EHCI_PORT_CONNECT_CH + | GRUB_EHCI_PORT_ENABLED_CH + | GRUB_EHCI_PORT_OVERCUR_CH) +}; + +/* Operational register CONFIGFLAGS bits */ +enum +{ + GRUB_EHCI_CF_EHCI_OWNER = (1 << 0) +}; + +/* Queue Head & Transfer Descriptor constants */ +#define GRUB_EHCI_HPTR_OFF 5 /* Horiz. pointer bit offset */ +enum +{ + GRUB_EHCI_HPTR_TYPE_MASK = (3 << 1), + GRUB_EHCI_HPTR_TYPE_ITD = (0 << 1), + GRUB_EHCI_HPTR_TYPE_QH = (1 << 1), + GRUB_EHCI_HPTR_TYPE_SITD = (2 << 1), + GRUB_EHCI_HPTR_TYPE_FSTN = (3 << 1) +}; + +enum +{ + GRUB_EHCI_C = (1 << 27), + GRUB_EHCI_MAXPLEN_MASK = (0x7ff << 16), + GRUB_EHCI_H = (1 << 15), + GRUB_EHCI_DTC = (1 << 14), + GRUB_EHCI_SPEED_MASK = (3 << 12), + GRUB_EHCI_SPEED_FULL = (0 << 12), + GRUB_EHCI_SPEED_LOW = (1 << 12), + GRUB_EHCI_SPEED_HIGH = (2 << 12), + GRUB_EHCI_SPEED_RESERVED = (3 << 12), + GRUB_EHCI_EP_NUM_MASK = (0xf << 8), + GRUB_EHCI_DEVADDR_MASK = 0x7f, + GRUB_EHCI_TARGET_MASK = (GRUB_EHCI_EP_NUM_MASK | GRUB_EHCI_DEVADDR_MASK) +}; + +enum +{ + GRUB_EHCI_MAXPLEN_OFF = 16, + GRUB_EHCI_SPEED_OFF = 12, + GRUB_EHCI_EP_NUM_OFF = 8 +}; + +enum +{ + GRUB_EHCI_MULT_MASK = (3 << 30), + GRUB_EHCI_MULT_RESERVED = (0 << 30), + GRUB_EHCI_MULT_ONE = (1 << 30), + GRUB_EHCI_MULT_TWO = (2 << 30), + GRUB_EHCI_MULT_THREE = (3 << 30), + GRUB_EHCI_DEVPORT_MASK = (0x7f << 23), + GRUB_EHCI_HUBADDR_MASK = (0x7f << 16), + GRUB_EHCI_CMASK_MASK = (0xff << 8), + GRUB_EHCI_SMASK_MASK = (0xff << 0), +}; + +enum +{ + GRUB_EHCI_MULT_OFF = 30, + GRUB_EHCI_DEVPORT_OFF = 23, + GRUB_EHCI_HUBADDR_OFF = 16, + GRUB_EHCI_CMASK_OFF = 8, + GRUB_EHCI_SMASK_OFF = 0, +}; + +#define GRUB_EHCI_TERMINATE (1<<0) + +#define GRUB_EHCI_TOGGLE (1<<31) + +enum +{ + GRUB_EHCI_TOTAL_MASK = (0x7fff << 16), + GRUB_EHCI_CERR_MASK = (3 << 10), + GRUB_EHCI_CERR_0 = (0 << 10), + GRUB_EHCI_CERR_1 = (1 << 10), + GRUB_EHCI_CERR_2 = (2 << 10), + GRUB_EHCI_CERR_3 = (3 << 10), + GRUB_EHCI_PIDCODE_OUT = (0 << 8), + GRUB_EHCI_PIDCODE_IN = (1 << 8), + GRUB_EHCI_PIDCODE_SETUP = (2 << 8), + GRUB_EHCI_STATUS_MASK = 0xff, + GRUB_EHCI_STATUS_ACTIVE = (1 << 7), + GRUB_EHCI_STATUS_HALTED = (1 << 6), + GRUB_EHCI_STATUS_BUFERR = (1 << 5), + GRUB_EHCI_STATUS_BABBLE = (1 << 4), + GRUB_EHCI_STATUS_TRANERR = (1 << 3), + GRUB_EHCI_STATUS_MISSDMF = (1 << 2), + GRUB_EHCI_STATUS_SPLITST = (1 << 1), + GRUB_EHCI_STATUS_PINGERR = (1 << 0) +}; + +enum +{ + GRUB_EHCI_TOTAL_OFF = 16, + GRUB_EHCI_CERR_OFF = 10 +}; + +#define GRUB_EHCI_BUFPTR_MASK (0xfffff<<12) +#define GRUB_EHCI_QHTDPTR_MASK 0xffffffe0 + +#define GRUB_EHCI_TD_BUF_PAGES 5 + +#define GRUB_EHCI_BUFPAGELEN 0x1000 +#define GRUB_EHCI_MAXBUFLEN 0x5000 + +struct grub_ehci_td; +struct grub_ehci_qh; +typedef volatile struct grub_ehci_td *grub_ehci_td_t; +typedef volatile struct grub_ehci_qh *grub_ehci_qh_t; + +/* EHCI Isochronous Transfer Descriptor */ +/* Currently not supported */ + +/* EHCI Split Transaction Isochronous Transfer Descriptor */ +/* Currently not supported */ + +/* EHCI Queue Element Transfer Descriptor (qTD) */ +/* Align to 32-byte boundaries */ +struct grub_ehci_td +{ + /* EHCI HW part */ + grub_uint32_t next_td; /* Pointer to next qTD */ + grub_uint32_t alt_next_td; /* Pointer to alternate next qTD */ + grub_uint32_t token; /* Toggle, Len, Interrupt, Page, Error, PID, Status */ + grub_uint32_t buffer_page[GRUB_EHCI_TD_BUF_PAGES]; /* Buffer pointer (+ cur. offset in page 0 */ + /* 64-bits part */ + grub_uint32_t buffer_page_high[GRUB_EHCI_TD_BUF_PAGES]; + /* EHCI driver part */ + grub_uint32_t link_td; /* pointer to next free/chained TD */ + grub_uint32_t size; + grub_uint32_t pad[1]; /* padding to some multiple of 32 bytes */ +}; + +/* EHCI Queue Head */ +/* Align to 32-byte boundaries */ +/* QH allocation is made in the similar/same way as in OHCI driver, + * because unlninking QH from the Asynchronous list is not so + * trivial as on UHCI (at least it is time consuming) */ +struct grub_ehci_qh +{ + /* EHCI HW part */ + grub_uint32_t qh_hptr; /* Horiz. pointer & Terminate */ + grub_uint32_t ep_char; /* EP characteristics */ + grub_uint32_t ep_cap; /* EP capabilities */ + grub_uint32_t td_current; /* current TD link pointer */ + struct grub_ehci_td td_overlay; /* TD overlay area = 64 bytes */ + /* EHCI driver part */ + grub_uint32_t pad[4]; /* padding to some multiple of 32 bytes */ +}; + +/* EHCI Periodic Frame Span Traversal Node */ +/* Currently not supported */ + +struct grub_ehci +{ + volatile grub_uint32_t *iobase_ehcc; /* Capability registers */ + volatile grub_uint32_t *iobase; /* Operational registers */ + struct grub_pci_dma_chunk *framelist_chunk; /* Currently not used */ + volatile grub_uint32_t *framelist_virt; + grub_uint32_t framelist_phys; + struct grub_pci_dma_chunk *qh_chunk; /* GRUB_EHCI_N_QH Queue Heads */ + grub_ehci_qh_t qh_virt; + grub_uint32_t qh_phys; + struct grub_pci_dma_chunk *td_chunk; /* GRUB_EHCI_N_TD Transfer Descriptors */ + grub_ehci_td_t td_virt; + grub_uint32_t td_phys; + grub_ehci_td_t tdfree_virt; /* Free Transfer Descriptors */ + int flag64; + grub_uint32_t reset; /* bits 1-15 are flags if port was reset from connected time or not */ + struct grub_ehci *next; +}; + +static struct grub_ehci *ehci; + +static void +sync_all_caches (struct grub_ehci *e) +{ + if (!e) + return; + if (e->td_virt) + grub_arch_sync_dma_caches (e->td_virt, sizeof (struct grub_ehci_td) * + GRUB_EHCI_N_TD); + if (e->qh_virt) + grub_arch_sync_dma_caches (e->qh_virt, sizeof (struct grub_ehci_qh) * + GRUB_EHCI_N_QH); + if (e->framelist_virt) + grub_arch_sync_dma_caches (e->framelist_virt, 4096); +} + +/* EHCC registers access functions */ +static inline grub_uint32_t +grub_ehci_ehcc_read32 (struct grub_ehci *e, grub_uint32_t addr) +{ + return + grub_le_to_cpu32 (*((volatile grub_uint32_t *) e->iobase_ehcc + + (addr / sizeof (grub_uint32_t)))); +} + +static inline grub_uint16_t +grub_ehci_ehcc_read16 (struct grub_ehci *e, grub_uint32_t addr) +{ + return + grub_le_to_cpu16 (*((volatile grub_uint16_t *) e->iobase_ehcc + + (addr / sizeof (grub_uint16_t)))); +} + +static inline grub_uint8_t +grub_ehci_ehcc_read8 (struct grub_ehci *e, grub_uint32_t addr) +{ + return *((volatile grub_uint8_t *) e->iobase_ehcc + addr); +} + +/* Operational registers access functions */ +static inline grub_uint32_t +grub_ehci_oper_read32 (struct grub_ehci *e, grub_uint32_t addr) +{ + return + grub_le_to_cpu32 (* + ((volatile grub_uint32_t *) e->iobase + + (addr / sizeof (grub_uint32_t)))); +} + +static inline void +grub_ehci_oper_write32 (struct grub_ehci *e, grub_uint32_t addr, + grub_uint32_t value) +{ + *((volatile grub_uint32_t *) e->iobase + (addr / sizeof (grub_uint32_t))) = + grub_cpu_to_le32 (value); +} + +static inline grub_uint32_t +grub_ehci_port_read (struct grub_ehci *e, grub_uint32_t port) +{ + return grub_ehci_oper_read32 (e, GRUB_EHCI_PORT_STAT_CMD + port * 4); +} + +static inline void +grub_ehci_port_resbits (struct grub_ehci *e, grub_uint32_t port, + grub_uint32_t bits) +{ + grub_ehci_oper_write32 (e, GRUB_EHCI_PORT_STAT_CMD + port * 4, + grub_ehci_port_read (e, + port) & GRUB_EHCI_PORT_WMASK & + ~(bits)); + grub_ehci_port_read (e, port); +} + +static inline void +grub_ehci_port_setbits (struct grub_ehci *e, grub_uint32_t port, + grub_uint32_t bits) +{ + grub_ehci_oper_write32 (e, GRUB_EHCI_PORT_STAT_CMD + port * 4, + (grub_ehci_port_read (e, port) & + GRUB_EHCI_PORT_WMASK) | bits); + grub_ehci_port_read (e, port); +} + +/* Halt if EHCI HC not halted */ +static grub_usb_err_t +grub_ehci_halt (struct grub_ehci *e) +{ + grub_uint64_t maxtime; + + if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) & GRUB_EHCI_ST_HC_HALTED) == 0) /* EHCI is not halted */ + { + /* Halt EHCI */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + ~GRUB_EHCI_CMD_RUNSTOP + & grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + /* Ensure command is written */ + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND); + maxtime = grub_get_time_ms () + 1000; /* Fix: Should be 2ms ! */ + while (((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) + & GRUB_EHCI_ST_HC_HALTED) == 0) + && (grub_get_time_ms () < maxtime)); + if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) + & GRUB_EHCI_ST_HC_HALTED) == 0) + return GRUB_USB_ERR_TIMEOUT; + } + + return GRUB_USB_ERR_NONE; +} + +/* EHCI HC reset */ +static grub_usb_err_t +grub_ehci_reset (struct grub_ehci *e) +{ + grub_uint64_t maxtime; + + sync_all_caches (e); + + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + GRUB_EHCI_CMD_HC_RESET + | grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + /* Ensure command is written */ + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND); + /* XXX: How long time could take reset of HC ? */ + maxtime = grub_get_time_ms () + 1000; + while (((grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND) + & GRUB_EHCI_CMD_HC_RESET) != 0) + && (grub_get_time_ms () < maxtime)); + if ((grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND) + & GRUB_EHCI_CMD_HC_RESET) != 0) + return GRUB_USB_ERR_TIMEOUT; + + return GRUB_USB_ERR_NONE; +} + +/* PCI iteration function... */ +static int +grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_uint8_t release; + grub_uint32_t class_code; + grub_uint32_t interf; + grub_uint32_t subclass; + grub_uint32_t class; + grub_uint32_t base, base_h; + struct grub_ehci *e; + grub_uint32_t eecp_offset; + grub_uint32_t fp; + int i; + grub_uint32_t usblegsup = 0; + grub_uint64_t maxtime; + grub_uint32_t n_ports; + grub_uint8_t caplen; + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: begin\n"); + + if (pciid == GRUB_CS5536_PCIID) + { + grub_uint64_t basereg; + + basereg = grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE); + if (!(basereg & GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE)) + { + /* Shouldn't happen. */ + grub_dprintf ("ehci", "No EHCI address is assigned\n"); + return 0; + } + base = (basereg & GRUB_CS5536_MSR_USB_BASE_ADDR_MASK); + basereg |= GRUB_CS5536_MSR_USB_BASE_BUS_MASTER; + basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_ENABLED; + basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_STATUS; + basereg &= ~GRUB_CS5536_MSR_USB_BASE_SMI_ENABLE; + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE, basereg); + } + else + { + grub_pci_address_t addr; + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + class_code = grub_pci_read (addr) >> 8; + interf = class_code & 0xFF; + subclass = (class_code >> 8) & 0xFF; + class = class_code >> 16; + + /* If this is not an EHCI controller, just return. */ + if (class != 0x0c || subclass != 0x03 || interf != 0x20) + return 0; + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: class OK\n"); + + /* Check Serial Bus Release Number */ + addr = grub_pci_make_address (dev, GRUB_EHCI_PCI_SBRN_REG); + release = grub_pci_read_byte (addr); + if (release != 0x20) + { + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: Wrong SBRN: %0x\n", + release); + return 0; + } + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: bus rev. num. OK\n"); + + /* Determine EHCI EHCC registers base address. */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0); + base = grub_pci_read (addr); + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG1); + base_h = grub_pci_read (addr); + /* Stop if registers are mapped above 4G - GRUB does not currently + * work with registers mapped above 4G */ + if (((base & GRUB_PCI_ADDR_MEM_TYPE_MASK) != GRUB_PCI_ADDR_MEM_TYPE_32) + && (base_h != 0)) + { + grub_dprintf ("ehci", + "EHCI grub_ehci_pci_iter: registers above 4G are not supported\n"); + return 0; + } + base &= GRUB_PCI_ADDR_MEM_MASK; + if (!base) + { + grub_dprintf ("ehci", + "EHCI: EHCI is not mapped\n"); + return 0; + } + + /* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word(addr, + GRUB_PCI_COMMAND_MEM_ENABLED + | GRUB_PCI_COMMAND_BUS_MASTER + | grub_pci_read_word(addr)); + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK\n"); + } + + /* Allocate memory for the controller and fill basic values. */ + e = grub_zalloc (sizeof (*e)); + if (!e) + return 1; + e->framelist_chunk = NULL; + e->td_chunk = NULL; + e->qh_chunk = NULL; + e->iobase_ehcc = grub_pci_device_map_range (dev, + (base & GRUB_EHCI_ADDR_MEM_MASK), + 0x100); + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: iobase of EHCC: %08x\n", + (base & GRUB_EHCI_ADDR_MEM_MASK)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CAPLEN: %02x\n", + grub_ehci_ehcc_read8 (e, GRUB_EHCI_EHCC_CAPLEN)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: VERSION: %04x\n", + grub_ehci_ehcc_read16 (e, GRUB_EHCI_EHCC_VERSION)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: SPARAMS: %08x\n", + grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_SPARAMS)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CPARAMS: %08x\n", + grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_CPARAMS)); + + /* Determine base address of EHCI operational registers */ + caplen = grub_ehci_ehcc_read8 (e, GRUB_EHCI_EHCC_CAPLEN); +#ifndef GRUB_HAVE_UNALIGNED_ACCESS + if (caplen & (sizeof (grub_uint32_t) - 1)) + { + grub_dprintf ("ehci", "Unaligned caplen\n"); + return 0; + } + e->iobase = ((volatile grub_uint32_t *) e->iobase_ehcc + + (caplen / sizeof (grub_uint32_t))); +#else + e->iobase = (volatile grub_uint32_t *) + ((grub_uint8_t *) e->iobase_ehcc + caplen); +#endif + + grub_dprintf ("ehci", + "EHCI grub_ehci_pci_iter: iobase of oper. regs: %08x\n", + (base & GRUB_EHCI_ADDR_MEM_MASK) + caplen); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: INTERRUPT: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_INTERRUPT)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: FRAME_INDEX: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_FRAME_INDEX)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: FL_BASE: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_FL_BASE)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CUR_AL_ADDR: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_CUR_AL_ADDR)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG)); + + /* Is there EECP ? */ + eecp_offset = (grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_CPARAMS) + & GRUB_EHCI_EECP_MASK) >> GRUB_EHCI_EECP_SHIFT; + + /* Check format of data structures requested by EHCI */ + /* XXX: In fact it is not used at any place, it is prepared for future + * This implementation uses 32-bits pointers only */ + e->flag64 = ((grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_CPARAMS) + & GRUB_EHCI_CPARAMS_64BIT) != 0); + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: flag64=%d\n", e->flag64); + + /* Reserve a page for the frame list - it is accurate for max. + * possible size of framelist. But currently it is not used. */ + e->framelist_chunk = grub_memalign_dma32 (4096, 4096); + if (!e->framelist_chunk) + goto fail; + e->framelist_virt = grub_dma_get_virt (e->framelist_chunk); + e->framelist_phys = grub_dma_get_phys (e->framelist_chunk); + grub_memset ((void *) e->framelist_virt, 0, 4096); + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: framelist mem=%p. OK\n", + e->framelist_virt); + + /* Allocate memory for the QHs and register it in "e". */ + e->qh_chunk = grub_memalign_dma32 (4096, + sizeof (struct grub_ehci_qh) * + GRUB_EHCI_N_QH); + if (!e->qh_chunk) + goto fail; + e->qh_virt = (grub_ehci_qh_t) grub_dma_get_virt (e->qh_chunk); + e->qh_phys = grub_dma_get_phys (e->qh_chunk); + grub_memset ((void *) e->qh_virt, 0, + sizeof (struct grub_ehci_qh) * GRUB_EHCI_N_QH); + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: QH mem=%p. OK\n", + e->qh_virt); + + /* Allocate memory for the TDs and register it in "e". */ + e->td_chunk = grub_memalign_dma32 (4096, + sizeof (struct grub_ehci_td) * + GRUB_EHCI_N_TD); + if (!e->td_chunk) + goto fail; + e->td_virt = (grub_ehci_td_t) grub_dma_get_virt (e->td_chunk); + e->td_phys = grub_dma_get_phys (e->td_chunk); + grub_memset ((void *) e->td_virt, 0, + sizeof (struct grub_ehci_td) * GRUB_EHCI_N_TD); + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: TD mem=%p. OK\n", + e->td_virt); + + /* Setup all frame list pointers. Since no isochronous transfers + are supported, they all point to the (same!) queue + head with index 0. */ + fp = grub_cpu_to_le32 ((e->qh_phys & GRUB_EHCI_POINTER_MASK) + | GRUB_EHCI_HPTR_TYPE_QH); + for (i = 0; i < GRUB_EHCI_N_FRAMELIST; i++) + e->framelist_virt[i] = fp; + /* Prepare chain of all TDs and set Terminate in all TDs */ + for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++) + { + e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td); + e->td_virt[i].next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + e->td_virt[i].alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + } + e->td_virt[GRUB_EHCI_N_TD - 1].next_td = + grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td = + grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + e->tdfree_virt = e->td_virt; + /* Set Terminate in first QH, which is used in framelist */ + e->qh_virt[0].qh_hptr = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH); + e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + e->qh_virt[0].td_overlay.alt_next_td = + grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + /* Also set Halted bit in token */ + e->qh_virt[0].td_overlay.token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED); + /* Set the H bit in first QH used for AL */ + e->qh_virt[1].ep_char = grub_cpu_to_le32_compile_time (GRUB_EHCI_H); + /* Set Terminate into TD in rest of QHs and set horizontal link + * pointer to itself - these QHs will be used for asynchronous + * schedule and they should have valid value in horiz. link */ + for (i = 1; i < GRUB_EHCI_N_QH; i++) + { + e->qh_virt[i].qh_hptr = + grub_cpu_to_le32 ((grub_dma_virt2phys (&e->qh_virt[i], + e->qh_chunk) & + GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH); + e->qh_virt[i].td_overlay.next_td = + grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + e->qh_virt[i].td_overlay.alt_next_td = + grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + /* Also set Halted bit in token */ + e->qh_virt[i].td_overlay.token = + grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED); + } + + /* Note: QH 0 and QH 1 are reserved and must not be used anywhere. + * QH 0 is used as empty QH for framelist + * QH 1 is used as starting empty QH for asynchronous schedule + * QH 1 must exist at any time because at least one QH linked to + * itself must exist in asynchronous schedule + * QH 1 has the H flag set to one */ + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: QH/TD init. OK\n"); + + /* Determine and change ownership. */ + /* EECP offset valid in HCCPARAMS */ + /* Ownership can be changed via EECP only */ + if (pciid != GRUB_CS5536_PCIID && eecp_offset >= 0x40) + { + grub_pci_address_t pciaddr_eecp; + pciaddr_eecp = grub_pci_make_address (dev, eecp_offset); + + usblegsup = grub_pci_read (pciaddr_eecp); + if (usblegsup & GRUB_EHCI_BIOS_OWNED) + { + grub_boot_time ("Taking ownership of EHCI controller"); + grub_dprintf ("ehci", + "EHCI grub_ehci_pci_iter: EHCI owned by: BIOS\n"); + /* Ownership change - set OS_OWNED bit */ + grub_pci_write (pciaddr_eecp, usblegsup | GRUB_EHCI_OS_OWNED); + /* Ensure PCI register is written */ + grub_pci_read (pciaddr_eecp); + + /* Wait for finish of ownership change, EHCI specification + * doesn't say how long it can take... */ + maxtime = grub_get_time_ms () + 1000; + while ((grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED) + && (grub_get_time_ms () < maxtime)); + if (grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED) + { + grub_dprintf ("ehci", + "EHCI grub_ehci_pci_iter: EHCI change ownership timeout"); + /* Change ownership in "hard way" - reset BIOS ownership */ + grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED); + /* Ensure PCI register is written */ + grub_pci_read (pciaddr_eecp); + } + } + else if (usblegsup & GRUB_EHCI_OS_OWNED) + /* XXX: What to do in this case - nothing ? Can it happen ? */ + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: EHCI owned by: OS\n"); + else + { + grub_dprintf ("ehci", + "EHCI grub_ehci_pci_iter: EHCI owned by: NONE\n"); + /* XXX: What to do in this case ? Can it happen ? + * Is code below correct ? */ + /* Ownership change - set OS_OWNED bit */ + grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED); + /* Ensure PCI register is written */ + grub_pci_read (pciaddr_eecp); + } + + /* Disable SMI, just to be sure. */ + pciaddr_eecp = grub_pci_make_address (dev, eecp_offset + 4); + grub_pci_write (pciaddr_eecp, 0); + /* Ensure PCI register is written */ + grub_pci_read (pciaddr_eecp); + + } + + grub_dprintf ("ehci", "inithw: EHCI grub_ehci_pci_iter: ownership OK\n"); + + /* Now we can setup EHCI (maybe...) */ + + /* Check if EHCI is halted and halt it if not */ + if (grub_ehci_halt (e) != GRUB_USB_ERR_NONE) + { + grub_error (GRUB_ERR_TIMEOUT, + "EHCI grub_ehci_pci_iter: EHCI halt timeout"); + goto fail; + } + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: halted OK\n"); + + /* Reset EHCI */ + if (grub_ehci_reset (e) != GRUB_USB_ERR_NONE) + { + grub_error (GRUB_ERR_TIMEOUT, + "EHCI grub_ehci_pci_iter: EHCI reset timeout"); + goto fail; + } + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: reset OK\n"); + + /* Setup list address registers */ + grub_ehci_oper_write32 (e, GRUB_EHCI_FL_BASE, e->framelist_phys); + grub_ehci_oper_write32 (e, GRUB_EHCI_CUR_AL_ADDR, + grub_dma_virt2phys (&e->qh_virt[1], + e->qh_chunk)); + + /* Set ownership of root hub ports to EHCI */ + grub_ehci_oper_write32 (e, GRUB_EHCI_CONFIG_FLAG, GRUB_EHCI_CF_EHCI_OWNER); + + /* Enable both lists */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + GRUB_EHCI_CMD_AS_ENABL + | GRUB_EHCI_CMD_PS_ENABL + | grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + + /* Now should be possible to power-up and enumerate ports etc. */ + if ((grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_SPARAMS) + & GRUB_EHCI_SPARAMS_PPC) != 0) + { /* EHCI has port powering control */ + /* Power on all ports */ + n_ports = grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_SPARAMS) + & GRUB_EHCI_SPARAMS_N_PORTS; + for (i = 0; i < (int) n_ports; i++) + grub_ehci_oper_write32 (e, GRUB_EHCI_PORT_STAT_CMD + i * 4, + GRUB_EHCI_PORT_POWER + | grub_ehci_oper_read32 (e, + GRUB_EHCI_PORT_STAT_CMD + + i * 4)); + } + + /* Ensure all commands are written */ + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND); + + /* Enable EHCI */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + GRUB_EHCI_CMD_RUNSTOP + | grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + + /* Ensure command is written */ + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND); + + /* Link to ehci now that initialisation is successful. */ + e->next = ehci; + ehci = e; + + sync_all_caches (e); + + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n"); + + grub_dprintf ("ehci", + "EHCI grub_ehci_pci_iter: iobase of oper. regs: %08x\n", + (base & GRUB_EHCI_ADDR_MEM_MASK)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: INTERRUPT: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_INTERRUPT)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: FRAME_INDEX: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_FRAME_INDEX)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: FL_BASE: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_FL_BASE)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CUR_AL_ADDR: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_CUR_AL_ADDR)); + grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG)); + + return 0; + +fail: + if (e) + { + if (e->td_chunk) + grub_dma_free ((void *) e->td_chunk); + if (e->qh_chunk) + grub_dma_free ((void *) e->qh_chunk); + if (e->framelist_chunk) + grub_dma_free (e->framelist_chunk); + } + grub_free (e); + + return 0; +} + +static int +grub_ehci_iterate (grub_usb_controller_iterate_hook_t hook, void *hook_data) +{ + struct grub_ehci *e; + struct grub_usb_controller dev; + + for (e = ehci; e; e = e->next) + { + dev.data = e; + if (hook (&dev, hook_data)) + return 1; + } + + return 0; +} + +static void +grub_ehci_setup_qh (grub_ehci_qh_t qh, grub_usb_transfer_t transfer) +{ + grub_uint32_t ep_char = 0; + grub_uint32_t ep_cap = 0; + + /* Note: Another part of code is responsible to this QH is + * Halted ! But it can be linked in AL, so we cannot erase or + * change qh_hptr ! */ + /* We will not change any TD field because they should/must be + * in safe state from previous use. */ + + /* EP characteristic setup */ + /* Currently not used NAK counter (RL=0), + * C bit set if EP is not HIGH speed and is control, + * Max Packet Length is taken from transfer structure, + * H bit = 0 (because QH[1] has this bit set), + * DTC bit set to 1 because we are using our own toggle bit control, + * SPEED is selected according to value from transfer structure, + * EP number is taken from transfer structure + * "I" bit must not be set, + * Device Address is taken from transfer structure + * */ + if ((transfer->dev->speed != GRUB_USB_SPEED_HIGH) + && (transfer->type == GRUB_USB_TRANSACTION_TYPE_CONTROL)) + ep_char |= GRUB_EHCI_C; + ep_char |= (transfer->max << GRUB_EHCI_MAXPLEN_OFF) + & GRUB_EHCI_MAXPLEN_MASK; + ep_char |= GRUB_EHCI_DTC; + switch (transfer->dev->speed) + { + case GRUB_USB_SPEED_LOW: + ep_char |= GRUB_EHCI_SPEED_LOW; + break; + case GRUB_USB_SPEED_FULL: + ep_char |= GRUB_EHCI_SPEED_FULL; + break; + case GRUB_USB_SPEED_HIGH: + default: + ep_char |= GRUB_EHCI_SPEED_HIGH; + /* XXX: How we will handle unknown value of speed? */ + } + ep_char |= (transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) + & GRUB_EHCI_EP_NUM_MASK; + ep_char |= transfer->devaddr & GRUB_EHCI_DEVADDR_MASK; + qh->ep_char = grub_cpu_to_le32 (ep_char); + /* EP capabilities setup */ + /* MULT field - we try to use max. number + * PortNumber - included now in device structure referenced + * inside transfer structure + * HubAddress - included now in device structure referenced + * inside transfer structure + * SplitCompletionMask - AFAIK it is ignored in asynchronous list, + * InterruptScheduleMask - AFAIK it should be zero in async. list */ + ep_cap |= GRUB_EHCI_MULT_THREE; + ep_cap |= (transfer->dev->split_hubport << GRUB_EHCI_DEVPORT_OFF) + & GRUB_EHCI_DEVPORT_MASK; + ep_cap |= (transfer->dev->split_hubaddr << GRUB_EHCI_HUBADDR_OFF) + & GRUB_EHCI_HUBADDR_MASK; + if (transfer->dev->speed == GRUB_USB_SPEED_LOW + && transfer->type != GRUB_USB_TRANSACTION_TYPE_CONTROL) + { + ep_cap |= (1<<0) << GRUB_EHCI_SMASK_OFF; + ep_cap |= (7<<2) << GRUB_EHCI_CMASK_OFF; + } + qh->ep_cap = grub_cpu_to_le32 (ep_cap); + + grub_dprintf ("ehci", "setup_qh: qh=%p, not changed: qh_hptr=%08x\n", + qh, grub_le_to_cpu32 (qh->qh_hptr)); + grub_dprintf ("ehci", "setup_qh: ep_char=%08x, ep_cap=%08x\n", + ep_char, ep_cap); + grub_dprintf ("ehci", "setup_qh: end\n"); + grub_dprintf ("ehci", "setup_qh: not changed: td_current=%08x\n", + grub_le_to_cpu32 (qh->td_current)); + grub_dprintf ("ehci", "setup_qh: not changed: next_td=%08x\n", + grub_le_to_cpu32 (qh->td_overlay.next_td)); + grub_dprintf ("ehci", "setup_qh: not changed: alt_next_td=%08x\n", + grub_le_to_cpu32 (qh->td_overlay.alt_next_td)); + grub_dprintf ("ehci", "setup_qh: not changed: token=%08x\n", + grub_le_to_cpu32 (qh->td_overlay.token)); +} + +static grub_ehci_qh_t +grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer) +{ + grub_uint32_t target, mask; + int i; + grub_ehci_qh_t qh = e->qh_virt; + grub_ehci_qh_t head; + grub_uint32_t qh_phys; + grub_uint32_t qh_terminate = + GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH; + grub_ehci_qh_t qh_iter; + + /* Prepare part of EP Characteristic to find existing QH */ + target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) | + transfer->devaddr) & GRUB_EHCI_TARGET_MASK; + target = grub_cpu_to_le32 (target); + mask = grub_cpu_to_le32_compile_time (GRUB_EHCI_TARGET_MASK); + + /* low speed interrupt transfers are linked to the periodic */ + /* schedule, everything else to the asynchronous schedule */ + if (transfer->dev->speed == GRUB_USB_SPEED_LOW + && transfer->type != GRUB_USB_TRANSACTION_TYPE_CONTROL) + head = &qh[0]; + else + head = &qh[1]; + + /* First try to find existing QH with proper target in proper list */ + qh_phys = grub_le_to_cpu32( head->qh_hptr ); + if (qh_phys != qh_terminate) + qh_iter = grub_dma_phys2virt ( qh_phys & GRUB_EHCI_QHTDPTR_MASK, + e->qh_chunk ); + else + qh_iter = NULL; + + for ( + i = 0; + (qh_phys != qh_terminate) && (qh_iter != NULL) && + (qh_iter != head) && (i < GRUB_EHCI_N_QH); + i++ ) + { + if (target == (qh_iter->ep_char & mask)) + { + /* Found proper existing (and linked) QH, do setup of QH */ + grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter); + grub_ehci_setup_qh (qh_iter, transfer); + sync_all_caches (e); + return qh_iter; + } + + qh_phys = grub_le_to_cpu32( qh_iter->qh_hptr ); + if (qh_phys != qh_terminate) + qh_iter = grub_dma_phys2virt ( qh_phys & GRUB_EHCI_QHTDPTR_MASK, + e->qh_chunk ); + else + qh_iter = NULL; + } + + /* variable "i" should be never equal to GRUB_EHCI_N_QH here */ + if (i >= GRUB_EHCI_N_QH) + { /* Something very bad happened in QH list(s) ! */ + grub_dprintf ("ehci", "find_qh: Mismatch in QH list! head=%p\n", + head); + } + + /* QH with target_addr does not exist, we have to find and add it */ + for (i = 2; i < GRUB_EHCI_N_QH; i++) /* We ignore zero and first QH */ + { + if (!qh[i].ep_char) + break; /* Found first not-allocated QH, finish */ + } + + /* Have we any free QH in array ? */ + if (i >= GRUB_EHCI_N_QH) /* No. */ + { + grub_dprintf ("ehci", "find_qh: end - no free QH\n"); + return NULL; + } + grub_dprintf ("ehci", "find_qh: new, i=%d, QH=%p\n", + i, &qh[i]); + /* Currently we simply take next (current) QH in array, no allocation + * function is used. It should be no problem until we will need to + * de-allocate QHs of unplugged devices. */ + /* We should preset new QH and link it into AL */ + grub_ehci_setup_qh (&qh[i], transfer); + + /* Linking - this new (last) QH will copy the QH from the head QH */ + qh[i].qh_hptr = head->qh_hptr; + /* Linking - the head QH will point to this new QH */ + head->qh_hptr = grub_cpu_to_le32 (GRUB_EHCI_HPTR_TYPE_QH + | grub_dma_virt2phys (&qh[i], + e->qh_chunk)); + + return &qh[i]; +} + +static grub_ehci_td_t +grub_ehci_alloc_td (struct grub_ehci *e) +{ + grub_ehci_td_t ret; + + /* Check if there is a Transfer Descriptor available. */ + if (!e->tdfree_virt) + { + grub_dprintf ("ehci", "alloc_td: end - no free TD\n"); + return NULL; + } + + ret = e->tdfree_virt; /* Take current free TD */ + /* Advance to next free TD in chain */ + if (ret->link_td) + e->tdfree_virt = grub_dma_phys2virt (ret->link_td, e->td_chunk); + else + e->tdfree_virt = NULL; + ret->link_td = 0; /* Reset link_td in allocated TD */ + return ret; +} + +static void +grub_ehci_free_td (struct grub_ehci *e, grub_ehci_td_t td) +{ + /* Chain new free TD & rest */ + if (e->tdfree_virt) + td->link_td = grub_dma_virt2phys (e->tdfree_virt, e->td_chunk); + else + td->link_td = 0; + e->tdfree_virt = td; /* Change address of first free TD */ +} + +static void +grub_ehci_free_tds (struct grub_ehci *e, grub_ehci_td_t td, + grub_usb_transfer_t transfer, grub_size_t * actual) +{ + int i; /* Index of TD in transfer */ + grub_uint32_t token, to_transfer; + + /* Note: Another part of code is responsible to this QH is + * INACTIVE ! */ + *actual = 0; + + /* Free the TDs in this queue and set last_trans. */ + for (i = 0; td; i++) + { + grub_ehci_td_t tdprev; + + token = grub_le_to_cpu32 (td->token); + to_transfer = (token & GRUB_EHCI_TOTAL_MASK) >> GRUB_EHCI_TOTAL_OFF; + + /* Check state of TD - if it did not transfer + * whole data then set last_trans - it should be last executed TD + * in case when something went wrong. */ + if (transfer && (td->size != to_transfer)) + transfer->last_trans = i; + + *actual += td->size - to_transfer; + + /* Unlink the TD */ + tdprev = td; + if (td->link_td) + td = grub_dma_phys2virt (td->link_td, e->td_chunk); + else + td = NULL; + + /* Free the TD. */ + grub_ehci_free_td (e, tdprev); + } + + /* Check if last_trans was set. If not and something was + * transferred (it should be all data in this case), set it + * to index of last TD, i.e. i-1 */ + if (transfer && (transfer->last_trans < 0) && (*actual != 0)) + transfer->last_trans = i - 1; + + /* XXX: Fix it: last_trans may be set to bad index. + * Probably we should test more error flags to distinguish + * if TD was at least partialy executed or not at all. + * Generaly, we still could have problem with toggling because + * EHCI can probably split transactions into smaller parts then + * we defined in transaction even if we did not exceed MaxFrame + * length - it probably could happen at the end of microframe (?) + * and if the buffer is crossing page boundary (?). */ +} + +static grub_ehci_td_t +grub_ehci_transaction (struct grub_ehci *e, + grub_transfer_type_t type, + unsigned int toggle, grub_size_t size, + grub_uint32_t data, grub_ehci_td_t td_alt) +{ + grub_ehci_td_t td; + grub_uint32_t token; + grub_uint32_t bufadr; + int i; + + /* Test of transfer size, it can be: + * <= GRUB_EHCI_MAXBUFLEN if data aligned to page boundary + * <= GRUB_EHCI_MAXBUFLEN - GRUB_EHCI_BUFPAGELEN if not aligned + * (worst case) + */ + if ((((data % GRUB_EHCI_BUFPAGELEN) == 0) + && (size > GRUB_EHCI_MAXBUFLEN)) + || + (((data % GRUB_EHCI_BUFPAGELEN) != 0) + && (size > (GRUB_EHCI_MAXBUFLEN - GRUB_EHCI_BUFPAGELEN)))) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, + "too long data buffer for EHCI transaction"); + return 0; + } + + /* Grab a free Transfer Descriptor and initialize it. */ + td = grub_ehci_alloc_td (e); + if (!td) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, + "no transfer descriptors available for EHCI transfer"); + return 0; + } + + grub_dprintf ("ehci", + "transaction: type=%d, toggle=%d, size=%lu data=0x%x td=%p\n", + type, toggle, (unsigned long) size, data, td); + + /* Fill whole TD by zeros */ + grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td)); + + /* Don't point to any TD yet, just terminate. */ + td->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + /* Set alternate pointer. When short packet occurs, alternate TD + * will not be really fetched because it is not active. But don't + * forget, EHCI will try to fetch alternate TD every scan of AL + * until QH is halted. */ + td->alt_next_td = grub_cpu_to_le32 (grub_dma_virt2phys (td_alt, + e->td_chunk)); + /* token: + * TOGGLE - according to toggle + * TOTAL SIZE = size + * Interrupt On Complete = FALSE, we don't need IRQ + * Current Page = 0 + * Error Counter = max. value = 3 + * PID Code - according to type + * STATUS: + * ACTIVE bit should be set to one + * SPLIT TRANS. STATE bit should be zero. It is ignored + * in HIGH speed transaction, and should be zero for LOW/FULL + * speed to indicate state Do Split Transaction */ + token = toggle ? GRUB_EHCI_TOGGLE : 0; + token |= (size << GRUB_EHCI_TOTAL_OFF) & GRUB_EHCI_TOTAL_MASK; + token |= GRUB_EHCI_CERR_3; + switch (type) + { + case GRUB_USB_TRANSFER_TYPE_IN: + token |= GRUB_EHCI_PIDCODE_IN; + break; + case GRUB_USB_TRANSFER_TYPE_OUT: + token |= GRUB_EHCI_PIDCODE_OUT; + break; + case GRUB_USB_TRANSFER_TYPE_SETUP: + token |= GRUB_EHCI_PIDCODE_SETUP; + break; + default: /* XXX: Should not happen, but what to do if it does ? */ + break; + } + token |= GRUB_EHCI_STATUS_ACTIVE; + td->token = grub_cpu_to_le32 (token); + + /* Fill buffer pointers according to size */ + bufadr = data; + td->buffer_page[0] = grub_cpu_to_le32 (bufadr); + bufadr = ((bufadr / GRUB_EHCI_BUFPAGELEN) + 1) * GRUB_EHCI_BUFPAGELEN; + for (i = 1; ((bufadr - data) < size) && (i < GRUB_EHCI_TD_BUF_PAGES); i++) + { + td->buffer_page[i] = grub_cpu_to_le32 (bufadr & GRUB_EHCI_BUFPTR_MASK); + bufadr = ((bufadr / GRUB_EHCI_BUFPAGELEN) + 1) * GRUB_EHCI_BUFPAGELEN; + } + + /* Remember data size for future use... */ + td->size = (grub_uint32_t) size; + + grub_dprintf ("ehci", "td=%p\n", td); + grub_dprintf ("ehci", "HW: next_td=%08x, alt_next_td=%08x\n", + grub_le_to_cpu32 (td->next_td), + grub_le_to_cpu32 (td->alt_next_td)); + grub_dprintf ("ehci", "HW: token=%08x, buffer[0]=%08x\n", + grub_le_to_cpu32 (td->token), + grub_le_to_cpu32 (td->buffer_page[0])); + grub_dprintf ("ehci", "HW: buffer[1]=%08x, buffer[2]=%08x\n", + grub_le_to_cpu32 (td->buffer_page[1]), + grub_le_to_cpu32 (td->buffer_page[2])); + grub_dprintf ("ehci", "HW: buffer[3]=%08x, buffer[4]=%08x\n", + grub_le_to_cpu32 (td->buffer_page[3]), + grub_le_to_cpu32 (td->buffer_page[4])); + grub_dprintf ("ehci", "link_td=%08x, size=%08x\n", + td->link_td, td->size); + + return td; +} + +struct grub_ehci_transfer_controller_data +{ + grub_ehci_qh_t qh_virt; + grub_ehci_td_t td_first_virt; + grub_ehci_td_t td_alt_virt; + grub_ehci_td_t td_last_virt; + grub_uint32_t td_last_phys; +}; + +static grub_usb_err_t +grub_ehci_setup_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_ehci *e = (struct grub_ehci *) dev->data; + grub_ehci_td_t td = NULL; + grub_ehci_td_t td_prev = NULL; + int i; + struct grub_ehci_transfer_controller_data *cdata; + grub_uint32_t status; + + sync_all_caches (e); + + /* Check if EHCI is running and AL is enabled */ + status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS); + if ((status & GRUB_EHCI_ST_HC_HALTED) != 0) + /* XXX: Fix it: Currently we don't do anything to restart EHCI */ + { + grub_dprintf ("ehci", "setup_transfer: halted, status = 0x%x\n", + status); + return GRUB_USB_ERR_INTERNAL; + } + status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS); + if ((status + & (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0) + /* XXX: Fix it: Currently we don't do anything to restart EHCI */ + { + grub_dprintf ("ehci", "setup_transfer: no AS/PS, status = 0x%x\n", + status); + return GRUB_USB_ERR_INTERNAL; + } + + /* Allocate memory for controller transfer data. */ + cdata = grub_malloc (sizeof (*cdata)); + if (!cdata) + return GRUB_USB_ERR_INTERNAL; + cdata->td_first_virt = NULL; + + /* Allocate a queue head for the transfer queue. */ + cdata->qh_virt = grub_ehci_find_qh (e, transfer); + if (!cdata->qh_virt) + { + grub_dprintf ("ehci", "setup_transfer: no QH\n"); + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + + /* To detect short packet we need some additional "alternate" TD, + * allocate it first. */ + cdata->td_alt_virt = grub_ehci_alloc_td (e); + if (!cdata->td_alt_virt) + { + grub_dprintf ("ehci", "setup_transfer: no TDs\n"); + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + /* Fill whole alternate TD by zeros (= inactive) and set + * Terminate bits and Halt bit */ + grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td)); + cdata->td_alt_virt->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + cdata->td_alt_virt->token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED); + + /* Allocate appropriate number of TDs and set */ + for (i = 0; i < transfer->transcnt; i++) + { + grub_usb_transaction_t tr = &transfer->transactions[i]; + + td = grub_ehci_transaction (e, tr->pid, tr->toggle, tr->size, + tr->data, cdata->td_alt_virt); + + if (!td) /* de-allocate and free all */ + { + grub_size_t actual = 0; + + if (cdata->td_first_virt) + grub_ehci_free_tds (e, cdata->td_first_virt, NULL, &actual); + + grub_free (cdata); + grub_dprintf ("ehci", "setup_transfer: no TD\n"); + return GRUB_USB_ERR_INTERNAL; + } + + /* Register new TD in cdata or previous TD */ + if (!cdata->td_first_virt) + cdata->td_first_virt = td; + else + { + td_prev->link_td = grub_dma_virt2phys (td, e->td_chunk); + td_prev->next_td = + grub_cpu_to_le32 (grub_dma_virt2phys (td, e->td_chunk)); + } + td_prev = td; + } + + /* Remember last TD */ + cdata->td_last_virt = td; + cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk); + /* Last TD should not have set alternate TD */ + cdata->td_last_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + + grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n", + cdata,cdata->qh_virt); + grub_dprintf ("ehci", "setup_transfer: td_first=%p, td_alt=%p\n", + cdata->td_first_virt, + cdata->td_alt_virt); + grub_dprintf ("ehci", "setup_transfer: td_last=%p\n", + cdata->td_last_virt); + + /* Start transfer: */ + /* Unlink possible alternate pointer in QH */ + cdata->qh_virt->td_overlay.alt_next_td = + grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE); + /* Link new TDs with QH via next_td */ + cdata->qh_virt->td_overlay.next_td = + grub_cpu_to_le32 (grub_dma_virt2phys + (cdata->td_first_virt, e->td_chunk)); + /* Reset Active and Halted bits in QH to activate Advance Queue, + * i.e. reset token */ + cdata->qh_virt->td_overlay.token = grub_cpu_to_le32_compile_time (0); + + sync_all_caches (e); + + /* Finito */ + transfer->controller_data = cdata; + + return GRUB_USB_ERR_NONE; +} + +/* This function expects QH is not active. + * Function set Halt bit in QH TD overlay and possibly prints + * necessary debug information. */ +static void +grub_ehci_pre_finish_transfer (grub_usb_transfer_t transfer) +{ + struct grub_ehci_transfer_controller_data *cdata = + transfer->controller_data; + + /* Collect debug data here if necessary */ + + /* Set Halt bit in not active QH. AL will not attempt to do + * Advance Queue on QH with Halt bit set, i.e., we can then + * safely manipulate with QH TD part. */ + cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token + | + grub_cpu_to_le32_compile_time + (GRUB_EHCI_STATUS_HALTED)) & + grub_cpu_to_le32_compile_time (~GRUB_EHCI_STATUS_ACTIVE); + + /* Print debug data here if necessary */ + +} + +static grub_usb_err_t +grub_ehci_parse_notrun (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, grub_size_t * actual) +{ + struct grub_ehci *e = dev->data; + struct grub_ehci_transfer_controller_data *cdata = + transfer->controller_data; + + grub_dprintf ("ehci", "parse_notrun: info\n"); + + /* QH can be in any state in this case. */ + /* But EHCI or AL is not running, so QH is surely not active + * even if it has Active bit set... */ + grub_ehci_pre_finish_transfer (transfer); + grub_ehci_free_tds (e, cdata->td_first_virt, transfer, actual); + grub_ehci_free_td (e, cdata->td_alt_virt); + grub_free (cdata); + + sync_all_caches (e); + + /* Additionally, do something with EHCI to make it running (what?) */ + /* Try enable EHCI and AL */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + GRUB_EHCI_CMD_RUNSTOP | GRUB_EHCI_CMD_AS_ENABL + | GRUB_EHCI_CMD_PS_ENABL + | grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + /* Ensure command is written */ + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND); + + return GRUB_USB_ERR_UNRECOVERABLE; +} + +static grub_usb_err_t +grub_ehci_parse_halt (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, grub_size_t * actual) +{ + struct grub_ehci *e = dev->data; + struct grub_ehci_transfer_controller_data *cdata = + transfer->controller_data; + grub_uint32_t token; + grub_usb_err_t err = GRUB_USB_ERR_NAK; + + /* QH should be halted and not active in this case. */ + + grub_dprintf ("ehci", "parse_halt: info\n"); + + /* Remember token before call pre-finish function */ + token = grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token); + + /* Do things like in normal finish */ + grub_ehci_pre_finish_transfer (transfer); + grub_ehci_free_tds (e, cdata->td_first_virt, transfer, actual); + grub_ehci_free_td (e, cdata->td_alt_virt); + grub_free (cdata); + + sync_all_caches (e); + + /* Evaluation of error code - currently we don't have GRUB USB error + * codes for some EHCI states, GRUB_USB_ERR_DATA is used for them. + * Order of evaluation is critical, specially bubble/stall. */ + if ((token & GRUB_EHCI_STATUS_BABBLE) != 0) + err = GRUB_USB_ERR_BABBLE; + else if ((token & GRUB_EHCI_CERR_MASK) != 0) + err = GRUB_USB_ERR_STALL; + else if ((token & GRUB_EHCI_STATUS_TRANERR) != 0) + err = GRUB_USB_ERR_DATA; + else if ((token & GRUB_EHCI_STATUS_BUFERR) != 0) + err = GRUB_USB_ERR_DATA; + else if ((token & GRUB_EHCI_STATUS_MISSDMF) != 0) + err = GRUB_USB_ERR_DATA; + + return err; +} + +static grub_usb_err_t +grub_ehci_parse_success (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, grub_size_t * actual) +{ + struct grub_ehci *e = dev->data; + struct grub_ehci_transfer_controller_data *cdata = + transfer->controller_data; + + grub_dprintf ("ehci", "parse_success: info\n"); + + /* QH should be not active in this case, but it is not halted. */ + grub_ehci_pre_finish_transfer (transfer); + grub_ehci_free_tds (e, cdata->td_first_virt, transfer, actual); + grub_ehci_free_td (e, cdata->td_alt_virt); + grub_free (cdata); + + sync_all_caches (e); + + return GRUB_USB_ERR_NONE; +} + + +static grub_usb_err_t +grub_ehci_check_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, grub_size_t * actual) +{ + struct grub_ehci *e = dev->data; + struct grub_ehci_transfer_controller_data *cdata = + transfer->controller_data; + grub_uint32_t token, token_ftd; + + sync_all_caches (e); + + grub_dprintf ("ehci", + "check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS), + cdata, cdata->qh_virt); + grub_dprintf ("ehci", "check_transfer: qh_hptr=%08x, ep_char=%08x\n", + grub_le_to_cpu32 (cdata->qh_virt->qh_hptr), + grub_le_to_cpu32 (cdata->qh_virt->ep_char)); + grub_dprintf ("ehci", "check_transfer: ep_cap=%08x, td_current=%08x\n", + grub_le_to_cpu32 (cdata->qh_virt->ep_cap), + grub_le_to_cpu32 (cdata->qh_virt->td_current)); + grub_dprintf ("ehci", "check_transfer: next_td=%08x, alt_next_td=%08x\n", + grub_le_to_cpu32 (cdata->qh_virt->td_overlay.next_td), + grub_le_to_cpu32 (cdata->qh_virt->td_overlay.alt_next_td)); + grub_dprintf ("ehci", "check_transfer: token=%08x, buffer[0]=%08x\n", + grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token), + grub_le_to_cpu32 (cdata->qh_virt->td_overlay.buffer_page[0])); + + /* Check if EHCI is running and AL is enabled */ + if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) + & GRUB_EHCI_ST_HC_HALTED) != 0) + return grub_ehci_parse_notrun (dev, transfer, actual); + if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) + & (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0) + return grub_ehci_parse_notrun (dev, transfer, actual); + + token = grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token); + /* If the transfer consist from only one TD, we should check */ + /* if the TD was really executed and deactivated - to prevent */ + /* false detection of transfer finish. */ + token_ftd = grub_le_to_cpu32 (cdata->td_first_virt->token); + + /* Detect QH halted */ + if ((token & GRUB_EHCI_STATUS_HALTED) != 0) + return grub_ehci_parse_halt (dev, transfer, actual); + + /* Detect QH not active - QH is not active and no next TD */ + if (token && ((token & GRUB_EHCI_STATUS_ACTIVE) == 0) + && ((token_ftd & GRUB_EHCI_STATUS_ACTIVE) == 0)) + { + /* It could be finish at all or short packet condition */ + if ((grub_le_to_cpu32 (cdata->qh_virt->td_overlay.next_td) + & GRUB_EHCI_TERMINATE) && + ((grub_le_to_cpu32 (cdata->qh_virt->td_current) + & GRUB_EHCI_QHTDPTR_MASK) == cdata->td_last_phys)) + /* Normal finish */ + return grub_ehci_parse_success (dev, transfer, actual); + else if ((token & GRUB_EHCI_TOTAL_MASK) != 0) + /* Short packet condition */ + /* But currently we don't handle it - higher level will do it */ + return grub_ehci_parse_success (dev, transfer, actual); + } + + return GRUB_USB_ERR_WAIT; +} + +static grub_usb_err_t +grub_ehci_cancel_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_ehci *e = dev->data; + struct grub_ehci_transfer_controller_data *cdata = + transfer->controller_data; + grub_size_t actual; + int i; + grub_uint64_t maxtime; + grub_uint32_t qh_phys; + + sync_all_caches (e); + + grub_uint32_t interrupt = + cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK; + + /* QH can be active and should be de-activated and halted */ + + grub_dprintf ("ehci", "cancel_transfer: begin\n"); + + /* First check if EHCI is running - if not, there is no problem */ + /* to cancel any transfer. Or, if transfer is asynchronous, check */ + /* if AL is enabled - if not, transfer can be canceled also. */ + if (((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) & + GRUB_EHCI_ST_HC_HALTED) != 0) || + (!interrupt && ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) & + (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0))) + { + grub_ehci_pre_finish_transfer (transfer); + grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual); + grub_ehci_free_td (e, cdata->td_alt_virt); + grub_free (cdata); + sync_all_caches (e); + grub_dprintf ("ehci", "cancel_transfer: end - EHCI not running\n"); + return GRUB_USB_ERR_NONE; + } + + /* EHCI and (AL or SL) are running. What to do? */ + /* Try to Halt QH via de-scheduling QH. */ + /* Find index of previous QH */ + qh_phys = grub_dma_virt2phys(cdata->qh_virt, e->qh_chunk); + for (i = 0; i < GRUB_EHCI_N_QH; i++) + { + if ((grub_le_to_cpu32(e->qh_virt[i].qh_hptr) + & GRUB_EHCI_QHTDPTR_MASK) == qh_phys) + break; + } + if (i == GRUB_EHCI_N_QH) + { + grub_printf ("%s: prev not found, queues are corrupt\n", __func__); + return GRUB_USB_ERR_UNRECOVERABLE; + } + /* Unlink QH from AL */ + e->qh_virt[i].qh_hptr = cdata->qh_virt->qh_hptr; + + sync_all_caches (e); + + /* If this is an interrupt transfer, we just wait for the periodic + * schedule to advance a few times and then assume that the EHCI + * controller has read the updated QH. */ + if (cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK) + { + grub_millisleep(20); + } + else + { + /* For the asynchronous schedule we use the advance doorbell to find + * out when the EHCI controller has read the updated QH. */ + + /* Ring the doorbell */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + GRUB_EHCI_CMD_AS_ADV_D + | grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + /* Ensure command is written */ + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND); + /* Wait answer with timeout */ + maxtime = grub_get_time_ms () + 2; + while (((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS) + & GRUB_EHCI_ST_AS_ADVANCE) == 0) + && (grub_get_time_ms () < maxtime)); + + /* We do not detect the timeout because if timeout occurs, it most + * probably means something wrong with EHCI - maybe stopped etc. */ + + /* Shut up the doorbell */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + ~GRUB_EHCI_CMD_AS_ADV_D + & grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + grub_ehci_oper_write32 (e, GRUB_EHCI_STATUS, + GRUB_EHCI_ST_AS_ADVANCE + | grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)); + /* Ensure command is written */ + grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS); + } + + /* Now is QH out of AL and we can do anything with it... */ + grub_ehci_pre_finish_transfer (transfer); + grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual); + grub_ehci_free_td (e, cdata->td_alt_virt); + + /* "Free" the QH - link it to itself */ + cdata->qh_virt->ep_char = 0; + cdata->qh_virt->qh_hptr = + grub_cpu_to_le32 ((grub_dma_virt2phys (cdata->qh_virt, + e->qh_chunk) + & GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH); + + grub_free (cdata); + + grub_dprintf ("ehci", "cancel_transfer: end\n"); + + sync_all_caches (e); + + return GRUB_USB_ERR_NONE; +} + +static int +grub_ehci_hubports (grub_usb_controller_t dev) +{ + struct grub_ehci *e = (struct grub_ehci *) dev->data; + grub_uint32_t portinfo; + + portinfo = grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_SPARAMS) + & GRUB_EHCI_SPARAMS_N_PORTS; + grub_dprintf ("ehci", "root hub ports=%d\n", portinfo); + return portinfo; +} + +static grub_usb_err_t +grub_ehci_portstatus (grub_usb_controller_t dev, + unsigned int port, unsigned int enable) +{ + struct grub_ehci *e = (struct grub_ehci *) dev->data; + grub_uint64_t endtime; + + grub_dprintf ("ehci", "portstatus: EHCI STATUS: %08x\n", + grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)); + grub_dprintf ("ehci", + "portstatus: begin, iobase=%p, port=%d, status=0x%02x\n", + e->iobase, port, grub_ehci_port_read (e, port)); + + /* In any case we need to disable port: + * - if enable==false - we should disable port + * - if enable==true we will do the reset and the specification says + * PortEnable should be FALSE in such case */ + /* Disable the port and wait for it. */ + grub_ehci_port_resbits (e, port, GRUB_EHCI_PORT_ENABLED); + endtime = grub_get_time_ms () + 1000; + while (grub_ehci_port_read (e, port) & GRUB_EHCI_PORT_ENABLED) + if (grub_get_time_ms () > endtime) + return GRUB_USB_ERR_TIMEOUT; + + if (!enable) /* We don't need reset port */ + { + grub_dprintf ("ehci", "portstatus: Disabled.\n"); + grub_dprintf ("ehci", "portstatus: end, status=0x%02x\n", + grub_ehci_port_read (e, port)); + return GRUB_USB_ERR_NONE; + } + + grub_dprintf ("ehci", "portstatus: enable\n"); + + grub_boot_time ("Resetting port %d", port); + + /* Now we will do reset - if HIGH speed device connected, it will + * result in Enabled state, otherwise port remains disabled. */ + /* Set RESET bit for 50ms */ + grub_ehci_port_setbits (e, port, GRUB_EHCI_PORT_RESET); + grub_millisleep (50); + + /* Reset RESET bit and wait for the end of reset */ + grub_ehci_port_resbits (e, port, GRUB_EHCI_PORT_RESET); + endtime = grub_get_time_ms () + 1000; + while (grub_ehci_port_read (e, port) & GRUB_EHCI_PORT_RESET) + if (grub_get_time_ms () > endtime) + return GRUB_USB_ERR_TIMEOUT; + grub_boot_time ("Port %d reset", port); + /* Remember "we did the reset" - needed by detect_dev */ + e->reset |= (1 << port); + /* Test if port enabled, i.e. HIGH speed device connected */ + if ((grub_ehci_port_read (e, port) & GRUB_EHCI_PORT_ENABLED) != 0) /* yes! */ + { + grub_dprintf ("ehci", "portstatus: Enabled!\n"); + /* "Reset recovery time" (USB spec.) */ + grub_millisleep (10); + } + else /* no... */ + { + /* FULL speed device connected - change port ownership. + * It results in disconnected state of this EHCI port. */ + grub_ehci_port_setbits (e, port, GRUB_EHCI_PORT_OWNER); + return GRUB_USB_ERR_BADDEVICE; + } + + /* XXX: Fix it! There is possible problem - we can say to calling + * function that we lost device if it is FULL speed onlu via + * return value <> GRUB_ERR_NONE. It (maybe) displays also error + * message on screen - but this situation is not error, it is normal + * state! */ + + grub_dprintf ("ehci", "portstatus: end, status=0x%02x\n", + grub_ehci_port_read (e, port)); + + return GRUB_USB_ERR_NONE; +} + +static grub_usb_speed_t +grub_ehci_detect_dev (grub_usb_controller_t dev, int port, int *changed) +{ + struct grub_ehci *e = (struct grub_ehci *) dev->data; + grub_uint32_t status, line_state; + + status = grub_ehci_port_read (e, port); + + /* Connect Status Change bit - it detects change of connection */ + if (status & GRUB_EHCI_PORT_CONNECT_CH) + { + *changed = 1; + /* Reset bit Connect Status Change */ + grub_ehci_port_setbits (e, port, GRUB_EHCI_PORT_CONNECT_CH); + } + else + *changed = 0; + + if (!(status & GRUB_EHCI_PORT_CONNECT)) + { /* We should reset related "reset" flag in not connected state */ + e->reset &= ~(1 << port); + return GRUB_USB_SPEED_NONE; + } + /* Detected connected state, so we should return speed. + * But we can detect only LOW speed device and only at connection + * time when PortEnabled=FALSE. FULL / HIGH speed detection is made + * later by EHCI-specific reset procedure. + * Another thing - if detected speed is LOW at connection time, + * we should change port ownership to companion controller. + * So: + * 1. If we detect connected and enabled and EHCI-owned port, + * we can say it is HIGH speed. + * 2. If we detect connected and not EHCI-owned port, we can say + * NONE speed, because such devices are not handled by EHCI. + * 3. If we detect connected, not enabled but reset port, we can say + * NONE speed, because it means FULL device connected to port and + * such devices are not handled by EHCI. + * 4. If we detect connected, not enabled and not reset port, which + * has line state != "K", we will say HIGH - it could be FULL or HIGH + * device, we will see it later after end of EHCI-specific reset + * procedure. + * 5. If we detect connected, not enabled and not reset port, which + * has line state == "K", we can say NONE speed, because LOW speed + * device is connected and we should change port ownership. */ + if ((status & GRUB_EHCI_PORT_ENABLED) != 0) /* Port already enabled, return high speed. */ + return GRUB_USB_SPEED_HIGH; + if ((status & GRUB_EHCI_PORT_OWNER) != 0) /* EHCI is not port owner */ + return GRUB_USB_SPEED_NONE; /* EHCI driver is ignoring this port. */ + if ((e->reset & (1 << port)) != 0) /* Port reset was done = FULL speed */ + return GRUB_USB_SPEED_NONE; /* EHCI driver is ignoring this port. */ + else /* Port connected but not enabled - test port speed. */ + { + line_state = status & GRUB_EHCI_PORT_LINE_STAT; + if (line_state != GRUB_EHCI_PORT_LINE_LOWSP) + return GRUB_USB_SPEED_HIGH; + /* Detected LOW speed device, we should change + * port ownership. + * XXX: Fix it!: There should be test if related companion + * controler is available ! And what to do if it does not exist ? */ + grub_ehci_port_setbits (e, port, GRUB_EHCI_PORT_OWNER); + return GRUB_USB_SPEED_NONE; /* Ignore this port */ + /* Note: Reset of PORT_OWNER bit is done by EHCI HW when + * device is really disconnected from port. + * Don't do PORT_OWNER bit reset by SW when not connected signal + * is detected in port register ! */ + } +} + +static void +grub_ehci_inithw (void) +{ + grub_pci_iterate (grub_ehci_pci_iter, NULL); +} + +static grub_err_t +grub_ehci_restore_hw (void) +{ + struct grub_ehci *e; + grub_uint32_t n_ports; + int i; + + /* We should re-enable all EHCI HW similarly as on inithw */ + for (e = ehci; e; e = e->next) + { + /* Check if EHCI is halted and halt it if not */ + if (grub_ehci_halt (e) != GRUB_USB_ERR_NONE) + grub_error (GRUB_ERR_TIMEOUT, "restore_hw: EHCI halt timeout"); + + /* Reset EHCI */ + if (grub_ehci_reset (e) != GRUB_USB_ERR_NONE) + grub_error (GRUB_ERR_TIMEOUT, "restore_hw: EHCI reset timeout"); + + /* Setup some EHCI registers and enable EHCI */ + grub_ehci_oper_write32 (e, GRUB_EHCI_FL_BASE, e->framelist_phys); + grub_ehci_oper_write32 (e, GRUB_EHCI_CUR_AL_ADDR, + grub_dma_virt2phys (&e->qh_virt[1], + e->qh_chunk)); + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + GRUB_EHCI_CMD_RUNSTOP | + grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + + /* Set ownership of root hub ports to EHCI */ + grub_ehci_oper_write32 (e, GRUB_EHCI_CONFIG_FLAG, + GRUB_EHCI_CF_EHCI_OWNER); + + /* Enable asynchronous list */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + GRUB_EHCI_CMD_AS_ENABL + | GRUB_EHCI_CMD_PS_ENABL + | grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + + /* Now should be possible to power-up and enumerate ports etc. */ + if ((grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_SPARAMS) + & GRUB_EHCI_SPARAMS_PPC) != 0) + { /* EHCI has port powering control */ + /* Power on all ports */ + n_ports = grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_SPARAMS) + & GRUB_EHCI_SPARAMS_N_PORTS; + for (i = 0; i < (int) n_ports; i++) + grub_ehci_oper_write32 (e, GRUB_EHCI_PORT_STAT_CMD + i * 4, + GRUB_EHCI_PORT_POWER + | grub_ehci_oper_read32 (e, + GRUB_EHCI_PORT_STAT_CMD + + i * 4)); + } + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_ehci_fini_hw (int noreturn __attribute__ ((unused))) +{ + struct grub_ehci *e; + + /* We should disable all EHCI HW to prevent any DMA access etc. */ + for (e = ehci; e; e = e->next) + { + /* Disable both lists */ + grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND, + ~(GRUB_EHCI_CMD_AS_ENABL | GRUB_EHCI_CMD_PS_ENABL) + & grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND)); + + /* Check if EHCI is halted and halt it if not */ + grub_ehci_halt (e); + + /* Reset EHCI */ + grub_ehci_reset (e); + } + + return GRUB_ERR_NONE; +} + +static struct grub_usb_controller_dev usb_controller = { + .name = "ehci", + .iterate = grub_ehci_iterate, + .setup_transfer = grub_ehci_setup_transfer, + .check_transfer = grub_ehci_check_transfer, + .cancel_transfer = grub_ehci_cancel_transfer, + .hubports = grub_ehci_hubports, + .portstatus = grub_ehci_portstatus, + .detect_dev = grub_ehci_detect_dev, + /* estimated max. count of TDs for one bulk transfer */ + .max_bulk_tds = GRUB_EHCI_N_TD * 3 / 4 +}; + +GRUB_MOD_INIT (ehci) +{ + COMPILE_TIME_ASSERT (sizeof (struct grub_ehci_td) == 64); + COMPILE_TIME_ASSERT (sizeof (struct grub_ehci_qh) == 96); + + grub_stop_disk_firmware (); + + grub_boot_time ("Initing EHCI hardware"); + grub_ehci_inithw (); + grub_boot_time ("Registering EHCI driver"); + grub_usb_controller_dev_register (&usb_controller); + grub_boot_time ("EHCI driver registered"); + grub_loader_register_preboot_hook (grub_ehci_fini_hw, grub_ehci_restore_hw, + GRUB_LOADER_PREBOOT_HOOK_PRIO_DISK); +} + +GRUB_MOD_FINI (ehci) +{ + grub_ehci_fini_hw (0); + grub_usb_controller_dev_unregister (&usb_controller); +} diff --git a/grub-core/bus/usb/ohci.c b/grub-core/bus/usb/ohci.c new file mode 100644 index 000000000..f0be533d4 --- /dev/null +++ b/grub-core/bus/usb/ohci.c @@ -0,0 +1,1468 @@ +/* ohci.c - OHCI Support. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_ohci_hcca +{ + /* Pointers to Interrupt Endpoint Descriptors. Not used by + GRUB. */ + grub_uint32_t inttable[32]; + + /* Current frame number. */ + grub_uint16_t framenumber; + + grub_uint16_t pad; + + /* List of completed TDs. */ + grub_uint32_t donehead; + + grub_uint8_t reserved[116]; +} GRUB_PACKED; + +/* OHCI General Transfer Descriptor */ +struct grub_ohci_td +{ + /* Information used to construct the TOKEN packet. */ + grub_uint32_t token; + grub_uint32_t buffer; /* LittleEndian physical address */ + grub_uint32_t next_td; /* LittleEndian physical address */ + grub_uint32_t buffer_end; /* LittleEndian physical address */ + /* next values are not for OHCI HW */ + volatile struct grub_ohci_td *link_td; /* pointer to next free/chained TD + * pointer as uint32 */ + grub_uint32_t prev_td_phys; /* we need it to find previous TD + * physical address in CPU endian */ + grub_uint32_t tr_index; /* index of TD in transfer */ + grub_uint8_t pad[8 - sizeof (volatile struct grub_ohci_td *)]; /* padding to 32 bytes */ +} GRUB_PACKED; + +/* OHCI Endpoint Descriptor. */ +struct grub_ohci_ed +{ + grub_uint32_t target; + grub_uint32_t td_tail; + grub_uint32_t td_head; + grub_uint32_t next_ed; +} GRUB_PACKED; + +typedef volatile struct grub_ohci_td *grub_ohci_td_t; +typedef volatile struct grub_ohci_ed *grub_ohci_ed_t; + +/* Experimental change of ED/TD allocation */ +/* Little bit similar as in UHCI */ +/* Implementation assumes: + * 32-bits architecture - XXX: fix for 64-bits + * memory allocated by grub_memalign_dma32 must be continuous + * in virtual and also in physical memory */ +struct grub_ohci +{ + volatile grub_uint32_t *iobase; + volatile struct grub_ohci_hcca *hcca; + grub_uint32_t hcca_addr; + struct grub_pci_dma_chunk *hcca_chunk; + grub_ohci_ed_t ed_ctrl; /* EDs for CONTROL */ + grub_uint32_t ed_ctrl_addr; + struct grub_pci_dma_chunk *ed_ctrl_chunk; + grub_ohci_ed_t ed_bulk; /* EDs for BULK */ + grub_uint32_t ed_bulk_addr; + struct grub_pci_dma_chunk *ed_bulk_chunk; + grub_ohci_td_t td; /* TDs */ + grub_uint32_t td_addr; + struct grub_pci_dma_chunk *td_chunk; + struct grub_ohci *next; + grub_ohci_td_t td_free; /* Pointer to first free TD */ +}; + +static struct grub_ohci *ohci; + +typedef enum +{ + GRUB_OHCI_REG_REVISION = 0x00, + GRUB_OHCI_REG_CONTROL, + GRUB_OHCI_REG_CMDSTATUS, + GRUB_OHCI_REG_INTSTATUS, + GRUB_OHCI_REG_INTENA, + GRUB_OHCI_REG_INTDIS, + GRUB_OHCI_REG_HCCA, + GRUB_OHCI_REG_PERIODIC, + GRUB_OHCI_REG_CONTROLHEAD, + GRUB_OHCI_REG_CONTROLCURR, + GRUB_OHCI_REG_BULKHEAD, + GRUB_OHCI_REG_BULKCURR, + GRUB_OHCI_REG_DONEHEAD, + GRUB_OHCI_REG_FRAME_INTERVAL, + GRUB_OHCI_REG_PERIODIC_START = 16, + GRUB_OHCI_REG_RHUBA = 18, + GRUB_OHCI_REG_RHUBPORT = 21, + GRUB_OHCI_REG_LEGACY_CONTROL = 0x100, + GRUB_OHCI_REG_LEGACY_INPUT = 0x104, + GRUB_OHCI_REG_LEGACY_OUTPUT = 0x108, + GRUB_OHCI_REG_LEGACY_STATUS = 0x10c +} grub_ohci_reg_t; + +#define GRUB_OHCI_RHUB_PORT_POWER_MASK 0x300 +#define GRUB_OHCI_RHUB_PORT_ALL_POWERED 0x200 + +#define GRUB_OHCI_REG_FRAME_INTERVAL_FSMPS_MASK 0x8fff0000 +#define GRUB_OHCI_REG_FRAME_INTERVAL_FSMPS_SHIFT 16 +#define GRUB_OHCI_REG_FRAME_INTERVAL_FI_SHIFT 0 + +/* XXX: Is this choice of timings sane? */ +#define GRUB_OHCI_FSMPS 0x2778 +#define GRUB_OHCI_PERIODIC_START 0x257f +#define GRUB_OHCI_FRAME_INTERVAL 0x2edf + +#define GRUB_OHCI_SET_PORT_ENABLE (1 << 1) +#define GRUB_OHCI_CLEAR_PORT_ENABLE (1 << 0) +#define GRUB_OHCI_SET_PORT_RESET (1 << 4) +#define GRUB_OHCI_SET_PORT_RESET_STATUS_CHANGE (1 << 20) + +#define GRUB_OHCI_REG_CONTROL_BULK_ENABLE (1 << 5) +#define GRUB_OHCI_REG_CONTROL_CONTROL_ENABLE (1 << 4) + +#define GRUB_OHCI_RESET_CONNECT_CHANGE (1 << 16) +#define GRUB_OHCI_CTRL_EDS 256 +#define GRUB_OHCI_BULK_EDS 510 +#define GRUB_OHCI_TDS 640 + +#define GRUB_OHCI_ED_ADDR_MASK 0x7ff + +static inline grub_ohci_ed_t +grub_ohci_ed_phys2virt (struct grub_ohci *o, int bulk, grub_uint32_t x) +{ + if (!x) + return NULL; + if (bulk) + return (grub_ohci_ed_t) (x - o->ed_bulk_addr + + (grub_uint8_t *) o->ed_bulk); + return (grub_ohci_ed_t) (x - o->ed_ctrl_addr + + (grub_uint8_t *) o->ed_ctrl); +} + +static grub_uint32_t +grub_ohci_virt_to_phys (struct grub_ohci *o, int bulk, grub_ohci_ed_t x) +{ + if (!x) + return 0; + + if (bulk) + return (grub_uint8_t *) x - (grub_uint8_t *) o->ed_bulk + o->ed_bulk_addr; + return (grub_uint8_t *) x - (grub_uint8_t *) o->ed_ctrl + o->ed_ctrl_addr; +} + +static inline grub_ohci_td_t +grub_ohci_td_phys2virt (struct grub_ohci *o, grub_uint32_t x) +{ + if (!x) + return NULL; + return (grub_ohci_td_t) (x - o->td_addr + (grub_uint8_t *) o->td); +} + +static grub_uint32_t +grub_ohci_td_virt2phys (struct grub_ohci *o, grub_ohci_td_t x) +{ + if (!x) + return 0; + return (grub_uint8_t *)x - (grub_uint8_t *)o->td + o->td_addr; +} + + +static grub_uint32_t +grub_ohci_readreg32 (struct grub_ohci *o, grub_ohci_reg_t reg) +{ + return grub_le_to_cpu32 (*(o->iobase + reg)); +} + +static void +grub_ohci_writereg32 (struct grub_ohci *o, + grub_ohci_reg_t reg, grub_uint32_t val) +{ + *(o->iobase + reg) = grub_cpu_to_le32 (val); +} + + + +/* Iterate over all PCI devices. Determine if a device is an OHCI + controller. If this is the case, initialize it. */ +static int +grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_uint32_t interf; + grub_uint32_t base; + grub_pci_address_t addr; + struct grub_ohci *o; + grub_uint32_t revision; + int j; + + /* Determine IO base address. */ + grub_dprintf ("ohci", "pciid = %x\n", pciid); + + if (pciid == GRUB_CS5536_PCIID) + { + grub_uint64_t basereg; + + basereg = grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_USB_OHCI_BASE); + if (!(basereg & GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE)) + { + /* Shouldn't happen. */ + grub_dprintf ("ohci", "No OHCI address is assigned\n"); + return 0; + } + base = (basereg & GRUB_CS5536_MSR_USB_BASE_ADDR_MASK); + basereg |= GRUB_CS5536_MSR_USB_BASE_BUS_MASTER; + basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_ENABLED; + basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_STATUS; + grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_OHCI_BASE, basereg); + } + else + { + grub_uint32_t class_code; + grub_uint32_t class; + grub_uint32_t subclass; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + class_code = grub_pci_read (addr) >> 8; + + interf = class_code & 0xFF; + subclass = (class_code >> 8) & 0xFF; + class = class_code >> 16; + + /* If this is not an OHCI controller, just return. */ + if (class != 0x0c || subclass != 0x03 || interf != 0x10) + return 0; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0); + base = grub_pci_read (addr); + + base &= GRUB_PCI_ADDR_MEM_MASK; + if (!base) + { + grub_dprintf ("ehci", + "EHCI: EHCI is not mapper\n"); + return 0; + } + + /* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word(addr, + GRUB_PCI_COMMAND_MEM_ENABLED + | GRUB_PCI_COMMAND_BUS_MASTER + | grub_pci_read_word(addr)); + + grub_dprintf ("ohci", "class=0x%02x 0x%02x interface 0x%02x\n", + class, subclass, interf); + } + + /* Allocate memory for the controller and register it. */ + o = grub_malloc (sizeof (*o)); + if (! o) + return 1; + grub_memset ((void*)o, 0, sizeof (*o)); + o->iobase = grub_pci_device_map_range (dev, base, 0x800); + + grub_dprintf ("ohci", "base=%p\n", o->iobase); + + /* Reserve memory for the HCCA. */ + o->hcca_chunk = grub_memalign_dma32 (256, 256); + if (! o->hcca_chunk) + goto fail; + o->hcca = grub_dma_get_virt (o->hcca_chunk); + o->hcca_addr = grub_dma_get_phys (o->hcca_chunk); + grub_memset ((void*)o->hcca, 0, sizeof(*o->hcca)); + grub_dprintf ("ohci", "hcca: chunk=%p, virt=%p, phys=0x%02x\n", + o->hcca_chunk, o->hcca, o->hcca_addr); + + /* Reserve memory for ctrl EDs. */ + o->ed_ctrl_chunk = grub_memalign_dma32 (16, sizeof(struct grub_ohci_ed) + * GRUB_OHCI_CTRL_EDS); + if (! o->ed_ctrl_chunk) + goto fail; + o->ed_ctrl = grub_dma_get_virt (o->ed_ctrl_chunk); + o->ed_ctrl_addr = grub_dma_get_phys (o->ed_ctrl_chunk); + /* Preset EDs */ + grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed) + * GRUB_OHCI_CTRL_EDS); + for (j=0; j < GRUB_OHCI_CTRL_EDS; j++) + o->ed_ctrl[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */ + + grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n", + o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr); + + /* Reserve memory for bulk EDs. */ + o->ed_bulk_chunk = grub_memalign_dma32 (16, sizeof (struct grub_ohci_ed) + * GRUB_OHCI_BULK_EDS); + if (! o->ed_bulk_chunk) + goto fail; + o->ed_bulk = grub_dma_get_virt (o->ed_bulk_chunk); + o->ed_bulk_addr = grub_dma_get_phys (o->ed_bulk_chunk); + /* Preset EDs */ + grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS); + for (j=0; j < GRUB_OHCI_BULK_EDS; j++) + o->ed_bulk[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */ + + grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n", + o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr); + + /* Reserve memory for TDs. */ + o->td_chunk = grub_memalign_dma32 (32, sizeof(struct grub_ohci_td)*GRUB_OHCI_TDS); + /* Why is it aligned on 32 boundary if spec. says 16 ? + * We have structure 32 bytes long and we don't want cross + * 4K boundary inside structure. */ + if (! o->td_chunk) + goto fail; + o->td_free = o->td = grub_dma_get_virt (o->td_chunk); + o->td_addr = grub_dma_get_phys (o->td_chunk); + /* Preset free TDs chain in TDs */ + grub_memset ((void*)o->td, 0, sizeof(struct grub_ohci_td) * GRUB_OHCI_TDS); + for (j=0; j < (GRUB_OHCI_TDS-1); j++) + o->td[j].link_td = &o->td[j+1]; + + grub_dprintf ("ohci", "TDs: chunk=%p, virt=%p, phys=0x%02x\n", + o->td_chunk, o->td, o->td_addr); + + /* Check if the OHCI revision is actually 1.0 as supported. */ + revision = grub_ohci_readreg32 (o, GRUB_OHCI_REG_REVISION); + grub_dprintf ("ohci", "OHCI revision=0x%02x\n", revision & 0xFF); + if ((revision & 0xFF) != 0x10) + goto fail; + + { + grub_uint32_t control; + /* Check SMM/BIOS ownership of OHCI (SMM = USB Legacy Support driver for BIOS) */ + control = grub_ohci_readreg32 (o, GRUB_OHCI_REG_CONTROL); + if ((control & 0x100) != 0) + { + unsigned i; + grub_dprintf("ohci", "OHCI is owned by SMM\n"); + /* Do change of ownership */ + /* Ownership change request */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, (1<<3)); /* XXX: Magic. */ + /* Waiting for SMM deactivation */ + for (i=0; i < 10; i++) + { + if ((grub_ohci_readreg32 (o, GRUB_OHCI_REG_CONTROL) & 0x100) == 0) + { + grub_dprintf("ohci", "Ownership changed normally.\n"); + break; + } + grub_millisleep (100); + } + if (i >= 10) + { + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROL, + grub_ohci_readreg32 (o, GRUB_OHCI_REG_CONTROL) & ~0x100); + grub_dprintf("ohci", "Ownership changing timeout, change forced !\n"); + } + } + else if (((control & 0x100) == 0) && + ((control & 0xc0) != 0)) /* Not owned by SMM nor reset */ + { + grub_dprintf("ohci", "OHCI is owned by BIOS\n"); + /* Do change of ownership - not implemented yet... */ + /* In fact we probably need to do nothing ...? */ + } + else + { + grub_dprintf("ohci", "OHCI is not owned by SMM nor BIOS\n"); + /* We can setup OHCI. */ + } + } + + /* Suspend the OHCI by issuing a reset. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, 1); /* XXX: Magic. */ + grub_millisleep (1); + grub_dprintf ("ohci", "OHCI reset\n"); + + grub_ohci_writereg32 (o, GRUB_OHCI_REG_FRAME_INTERVAL, + (GRUB_OHCI_FSMPS + << GRUB_OHCI_REG_FRAME_INTERVAL_FSMPS_SHIFT) + | (GRUB_OHCI_FRAME_INTERVAL + << GRUB_OHCI_REG_FRAME_INTERVAL_FI_SHIFT)); + + grub_ohci_writereg32 (o, GRUB_OHCI_REG_PERIODIC_START, + GRUB_OHCI_PERIODIC_START); + + /* Setup the HCCA. */ + o->hcca->donehead = 0; + grub_ohci_writereg32 (o, GRUB_OHCI_REG_HCCA, o->hcca_addr); + grub_dprintf ("ohci", "OHCI HCCA\n"); + + /* Misc. pre-sets. */ + o->hcca->donehead = 0; + grub_ohci_writereg32 (o, GRUB_OHCI_REG_INTSTATUS, 0x7f); /* Clears everything */ + /* We don't want modify CONTROL/BULK HEAD registers. + * So we assign to HEAD registers zero ED from related array + * and we will not use this ED, it will be always skipped. + * It should not produce notable performance penalty (I hope). */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD, o->ed_ctrl_addr); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLCURR, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKHEAD, o->ed_bulk_addr); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKCURR, 0); + + /* Check OHCI Legacy Support */ + if ((revision & 0x100) != 0) + { + grub_dprintf ("ohci", "Legacy Support registers detected\n"); + grub_dprintf ("ohci", "Current state of legacy control reg.: 0x%04x\n", + grub_ohci_readreg32 (o, GRUB_OHCI_REG_LEGACY_CONTROL)); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_LEGACY_CONTROL, + (grub_ohci_readreg32 (o, GRUB_OHCI_REG_LEGACY_CONTROL)) & ~1); + grub_dprintf ("ohci", "OHCI Legacy Support disabled.\n"); + } + + /* Enable the OHCI + enable CONTROL and BULK LIST. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROL, + (2 << 6) + | GRUB_OHCI_REG_CONTROL_CONTROL_ENABLE + | GRUB_OHCI_REG_CONTROL_BULK_ENABLE ); + grub_dprintf ("ohci", "OHCI enable: 0x%02x\n", + (grub_ohci_readreg32 (o, GRUB_OHCI_REG_CONTROL) >> 6) & 3); + + /* Power on all ports */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBA, + (grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBA) + & ~GRUB_OHCI_RHUB_PORT_POWER_MASK) + | GRUB_OHCI_RHUB_PORT_ALL_POWERED); +#if 0 /* We don't need it at all, handled via hotplugging */ + /* Now we have hot-plugging, we need to wait for stable power only */ + grub_millisleep (100); +#endif + + /* Link to ohci now that initialisation is successful. */ + o->next = ohci; + ohci = o; + + return 0; + + fail: + if (o) + { + grub_dma_free (o->td_chunk); + grub_dma_free (o->ed_bulk_chunk); + grub_dma_free (o->ed_ctrl_chunk); + grub_dma_free (o->hcca_chunk); + } + grub_free (o); + + return 0; +} + + +static void +grub_ohci_inithw (void) +{ + grub_pci_iterate (grub_ohci_pci_iter, NULL); +} + + + +static int +grub_ohci_iterate (grub_usb_controller_iterate_hook_t hook, void *hook_data) +{ + struct grub_ohci *o; + struct grub_usb_controller dev; + + for (o = ohci; o; o = o->next) + { + dev.data = o; + if (hook (&dev, hook_data)) + return 1; + } + + return 0; +} + +static grub_ohci_ed_t +grub_ohci_find_ed (struct grub_ohci *o, int bulk, grub_uint32_t target) +{ + grub_ohci_ed_t ed, ed_next; + grub_uint32_t target_addr = target & GRUB_OHCI_ED_ADDR_MASK; + int count; + int i; + + /* Use proper values and structures. */ + if (bulk) + { + count = GRUB_OHCI_BULK_EDS; + ed = o->ed_bulk; + ed_next = grub_ohci_ed_phys2virt(o, bulk, + grub_le_to_cpu32 (ed->next_ed) ); + } + else + { + count = GRUB_OHCI_CTRL_EDS; + ed = o->ed_ctrl; + ed_next = grub_ohci_ed_phys2virt(o, bulk, + grub_le_to_cpu32 (ed->next_ed) ); + } + + /* First try to find existing ED with proper target address */ + for (i = 0; ; ) + { + if (i && /* We ignore zero ED */ + ((ed->target & GRUB_OHCI_ED_ADDR_MASK) == target_addr)) + return ed; /* Found proper existing ED */ + i++; + if (ed_next && (i < count)) + { + ed = ed_next; + ed_next = grub_ohci_ed_phys2virt(o, bulk, + grub_le_to_cpu32 (ed->next_ed) ); + continue; + } + break; + } + /* ED with target_addr does not exist, we have to add it */ + /* Have we any free ED in array ? */ + if (i >= count) /* No. */ + return NULL; + /* Currently we simply take next ED in array, no allocation + * function is used. It should be no problem until hot-plugging + * will be implemented, i.e. until we will need to de-allocate EDs + * of unplugged devices. */ + /* We can link new ED to previous ED safely as the new ED should + * still have set skip bit. */ + ed->next_ed = grub_cpu_to_le32 ( grub_ohci_virt_to_phys (o, + bulk, &ed[1])); + return &ed[1]; +} + +static grub_ohci_td_t +grub_ohci_alloc_td (struct grub_ohci *o) +{ + grub_ohci_td_t ret; + + /* Check if there is a Transfer Descriptor available. */ + if (! o->td_free) + return NULL; + + ret = o->td_free; /* Take current free TD */ + o->td_free = (grub_ohci_td_t)ret->link_td; /* Advance to next free TD in chain */ + ret->link_td = 0; /* Reset link_td in allocated TD */ + return ret; +} + +static void +grub_ohci_free_td (struct grub_ohci *o, grub_ohci_td_t td) +{ + grub_memset ( (void*)td, 0, sizeof(struct grub_ohci_td) ); + td->link_td = o->td_free; /* Cahin new free TD & rest */ + o->td_free = td; /* Change address of first free TD */ +} + +static void +grub_ohci_free_tds (struct grub_ohci *o, grub_ohci_td_t td) +{ + if (!td) + return; + + /* Unchain first TD from previous TD if it is chained */ + if (td->prev_td_phys) + { + grub_ohci_td_t td_prev_virt = grub_ohci_td_phys2virt(o, + td->prev_td_phys); + + if (td == (grub_ohci_td_t) td_prev_virt->link_td) + td_prev_virt->link_td = 0; + } + + /* Free all TDs from td (chained by link_td) */ + while (td) + { + grub_ohci_td_t tdprev; + + /* Unlink the queue. */ + tdprev = td; + td = (grub_ohci_td_t) td->link_td; + + /* Free the TD. */ + grub_ohci_free_td (o, tdprev); + } +} + +static void +grub_ohci_transaction (grub_ohci_td_t td, + grub_transfer_type_t type, unsigned int toggle, + grub_size_t size, grub_uint32_t data) +{ + grub_uint32_t token; + grub_uint32_t buffer; + grub_uint32_t buffer_end; + + grub_dprintf ("ohci", "OHCI transaction td=%p type=%d, toggle=%d, size=%lu\n", + td, type, toggle, (unsigned long) size); + + switch (type) + { + case GRUB_USB_TRANSFER_TYPE_SETUP: + token = 0 << 19; + break; + case GRUB_USB_TRANSFER_TYPE_IN: + token = 2 << 19; + break; + case GRUB_USB_TRANSFER_TYPE_OUT: + token = 1 << 19; + break; + default: + token = 0; + break; + } + + /* Set the token */ + token |= ( 7 << 21); /* Never generate interrupt */ + token |= toggle << 24; + token |= 1 << 25; + + /* Set "Not accessed" error code */ + token |= 15 << 28; + + buffer = data; + buffer_end = buffer + size - 1; + + /* Set correct buffer values in TD if zero transfer occurs */ + if (size) + { + buffer = (grub_uint32_t) data; + buffer_end = buffer + size - 1; + td->buffer = grub_cpu_to_le32 (buffer); + td->buffer_end = grub_cpu_to_le32 (buffer_end); + } + else + { + td->buffer = 0; + td->buffer_end = 0; + } + + /* Set the rest of TD */ + td->token = grub_cpu_to_le32 (token); + td->next_td = 0; +} + +struct grub_ohci_transfer_controller_data +{ + grub_uint32_t tderr_phys; + grub_uint32_t td_last_phys; + grub_ohci_ed_t ed_virt; + grub_ohci_td_t td_current_virt; + grub_ohci_td_t td_head_virt; +}; + +static grub_usb_err_t +grub_ohci_setup_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_ohci *o = (struct grub_ohci *) dev->data; + int bulk = 0; + grub_ohci_td_t td_next_virt; + grub_uint32_t target; + grub_uint32_t td_head_phys; + grub_uint32_t td_tail_phys; + int i; + struct grub_ohci_transfer_controller_data *cdata; + + cdata = grub_zalloc (sizeof (*cdata)); + if (!cdata) + return GRUB_USB_ERR_INTERNAL; + + /* Pre-set target for ED - we need it to find proper ED */ + /* Set the device address. */ + target = transfer->devaddr; + /* Set the endpoint. It should be masked, we need 4 bits only. */ + target |= (transfer->endpoint & 15) << 7; + /* Set the device speed. */ + target |= (transfer->dev->speed == GRUB_USB_SPEED_LOW) << 13; + /* Set the maximum packet size. */ + target |= transfer->max << 16; + + /* Determine if transfer type is bulk - we need to select proper ED */ + switch (transfer->type) + { + case GRUB_USB_TRANSACTION_TYPE_BULK: + bulk = 1; + break; + + case GRUB_USB_TRANSACTION_TYPE_CONTROL: + break; + + default: + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + + /* Find proper ED or add new ED */ + cdata->ed_virt = grub_ohci_find_ed (o, bulk, target); + if (!cdata->ed_virt) + { + grub_dprintf ("ohci","Fatal: No free ED !\n"); + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + + /* Take pointer to first TD from ED */ + td_head_phys = grub_le_to_cpu32 (cdata->ed_virt->td_head) & ~0xf; + td_tail_phys = grub_le_to_cpu32 (cdata->ed_virt->td_tail) & ~0xf; + + /* Sanity check - td_head should be equal to td_tail */ + if (td_head_phys != td_tail_phys) /* Should never happen ! */ + { + grub_dprintf ("ohci", "Fatal: HEAD is not equal to TAIL !\n"); + grub_dprintf ("ohci", "HEAD = 0x%02x, TAIL = 0x%02x\n", + td_head_phys, td_tail_phys); + /* XXX: Fix: What to do ? */ + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + + /* Now we should handle first TD. If ED is newly allocated, + * we must allocate the first TD. */ + if (!td_head_phys) + { + cdata->td_head_virt = grub_ohci_alloc_td (o); + if (!cdata->td_head_virt) + { + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; /* We don't need de-allocate ED */ + } + /* We can set td_head only when ED is not active, i.e. + * when it is newly allocated. */ + cdata->ed_virt->td_head + = grub_cpu_to_le32 (grub_ohci_td_virt2phys (o, cdata->td_head_virt)); + cdata->ed_virt->td_tail = cdata->ed_virt->td_head; + } + else + cdata->td_head_virt = grub_ohci_td_phys2virt ( o, td_head_phys ); + + /* Set TDs */ + cdata->td_last_phys = td_head_phys; /* initial value to make compiler happy... */ + for (i = 0, cdata->td_current_virt = cdata->td_head_virt; + i < transfer->transcnt; i++) + { + grub_usb_transaction_t tr = &transfer->transactions[i]; + + grub_ohci_transaction (cdata->td_current_virt, tr->pid, tr->toggle, + tr->size, tr->data); + + /* Set index of TD in transfer */ + cdata->td_current_virt->tr_index = (grub_uint32_t) i; + + /* Remember last used (processed) TD phys. addr. */ + cdata->td_last_phys = grub_ohci_td_virt2phys (o, cdata->td_current_virt); + + /* Allocate next TD */ + td_next_virt = grub_ohci_alloc_td (o); + if (!td_next_virt) /* No free TD, cancel transfer and free TDs except head TD */ + { + if (i) /* if i==0 we have nothing to free... */ + grub_ohci_free_tds (o, grub_ohci_td_phys2virt(o, + grub_le_to_cpu32 (cdata->td_head_virt->next_td))); + /* Reset head TD */ + grub_memset ( (void*)cdata->td_head_virt, 0, + sizeof(struct grub_ohci_td) ); + grub_dprintf ("ohci", "Fatal: No free TD !"); + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + + /* Chain TDs */ + + cdata->td_current_virt->link_td = td_next_virt; + cdata->td_current_virt->next_td = grub_cpu_to_le32 ( + grub_ohci_td_virt2phys (o, + td_next_virt) ); + td_next_virt->prev_td_phys = grub_ohci_td_virt2phys (o, + cdata->td_current_virt); + cdata->td_current_virt = td_next_virt; + } + + grub_dprintf ("ohci", "Tail TD (not processed) = %p\n", + cdata->td_current_virt); + + /* Setup the Endpoint Descriptor for transfer. */ + /* First set necessary fields in TARGET but keep (or set) skip bit */ + /* Note: It could be simpler if speed, format and max. packet + * size never change after first allocation of ED. + * But unfortunately max. packet size may change during initial + * setup sequence and we must handle it. */ + cdata->ed_virt->target = grub_cpu_to_le32 (target | (1 << 14)); + /* Set td_tail */ + cdata->ed_virt->td_tail + = grub_cpu_to_le32 (grub_ohci_td_virt2phys (o, cdata->td_current_virt)); + /* Now reset skip bit */ + cdata->ed_virt->target = grub_cpu_to_le32 (target); + /* ed_virt->td_head = grub_cpu_to_le32 (td_head); Must not be changed, it is maintained by OHCI */ + /* ed_virt->next_ed = grub_cpu_to_le32 (0); Handled by grub_ohci_find_ed, do not change ! */ + + grub_dprintf ("ohci", "program OHCI\n"); + + /* Program the OHCI to actually transfer. */ + switch (transfer->type) + { + case GRUB_USB_TRANSACTION_TYPE_BULK: + { + grub_dprintf ("ohci", "BULK list filled\n"); + /* Set BulkListFilled. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, 1 << 2); + /* Read back of register should ensure it is really written */ + grub_ohci_readreg32 (o, GRUB_OHCI_REG_CMDSTATUS); + break; + } + + case GRUB_USB_TRANSACTION_TYPE_CONTROL: + { + grub_dprintf ("ohci", "CONTROL list filled\n"); + /* Set ControlListFilled. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, 1 << 1); + /* Read back of register should ensure it is really written */ + grub_ohci_readreg32 (o, GRUB_OHCI_REG_CMDSTATUS); + break; + } + } + + transfer->controller_data = cdata; + + return GRUB_USB_ERR_NONE; +} + +static void +pre_finish_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_ohci *o = dev->data; + struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data; + grub_uint32_t target; + grub_uint32_t status; + grub_uint32_t control; + grub_uint32_t intstatus; + + /* There are many ways how the loop above can finish: + * - normally without any error via INTSTATUS WDH bit + * : tderr_phys == td_last_phys, td_head == td_tail + * - normally with error via HALT bit in ED TD HEAD + * : td_head = next TD after TD with error + * : tderr_phys = last processed and retired TD with error, + * i.e. should be != 0 + * : if bad_OHCI == TRUE, tderr_phys will be probably invalid + * - unrecoverable error - I never seen it but it could be + * : err_unrec == TRUE, other values can contain anything... + * - timeout, it can be caused by: + * -- bad USB device - some devices have some bugs, see Linux source + * and related links + * -- bad OHCI controller - e.g. lost interrupts or does not set + * proper bits in INTSTATUS when real IRQ not enabled etc., + * see Linux source and related links + * One known bug is handled - if transfer finished + * successfully (i.e. HEAD==TAIL, last transfer TD is retired, + * HALT bit is not set) and WDH bit is not set in INTSTATUS - in + * this case we set o->bad_OHCI=TRUE and do alternate loop + * and error handling - but there is problem how to find retired + * TD with error code if HALT occurs and if DONEHEAD is not + * working - we need to find TD previous to current ED HEAD + * -- bad code of this driver or some unknown reasons - :-( + * it can be e.g. bad handling of EDs/TDs/toggle bit... + */ + + /* Remember target for debug and set skip flag in ED */ + /* It should be normaly not necessary but we need it at least + * in case of timeout */ + target = grub_le_to_cpu32 ( cdata->ed_virt->target ); + cdata->ed_virt->target = grub_cpu_to_le32 (target | (1 << 14)); + /* Read registers for debug - they should be read now because + * debug prints case unwanted delays, so something can happen + * in the meantime... */ + control = grub_ohci_readreg32 (o, GRUB_OHCI_REG_CONTROL); + status = grub_ohci_readreg32 (o, GRUB_OHCI_REG_CMDSTATUS); + intstatus = grub_ohci_readreg32 (o, GRUB_OHCI_REG_INTSTATUS); + /* Now print debug values - to have full info what happened */ + grub_dprintf ("ohci", "loop finished: control=0x%02x status=0x%02x\n", + control, status); + grub_dprintf ("ohci", "intstatus=0x%02x, td_last_phys=0x%02x\n", + intstatus, cdata->td_last_phys); + grub_dprintf ("ohci", "TARGET=0x%02x, HEAD=0x%02x, TAIL=0x%02x\n", + target, + grub_le_to_cpu32 (cdata->ed_virt->td_head), + grub_le_to_cpu32 (cdata->ed_virt->td_tail) ); + +} + +static void +finish_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_ohci *o = dev->data; + struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data; + + /* Set empty ED - set HEAD = TAIL = last (not processed) TD */ + cdata->ed_virt->td_head = grub_cpu_to_le32 (grub_le_to_cpu32 (cdata->ed_virt->td_tail) & ~0xf); + + /* At this point always should be: + * ED has skip bit set and halted or empty or after next SOF, + * i.e. it is safe to free all TDs except last not processed + * ED HEAD == TAIL == phys. addr. of td_current_virt */ + + /* Un-chainig of last TD */ + if (cdata->td_current_virt->prev_td_phys) + { + grub_ohci_td_t td_prev_virt + = grub_ohci_td_phys2virt (o, cdata->td_current_virt->prev_td_phys); + + if (cdata->td_current_virt == (grub_ohci_td_t) td_prev_virt->link_td) + td_prev_virt->link_td = 0; + + cdata->td_current_virt->prev_td_phys = 0; + } + + grub_dprintf ("ohci", "OHCI finished, freeing\n"); + grub_ohci_free_tds (o, cdata->td_head_virt); + grub_free (cdata); +} + +static grub_usb_err_t +parse_halt (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, + grub_size_t *actual) +{ + struct grub_ohci *o = dev->data; + struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data; + grub_uint8_t errcode = 0; + grub_usb_err_t err = GRUB_USB_ERR_NAK; + grub_ohci_td_t tderr_virt = NULL; + + *actual = 0; + + pre_finish_transfer (dev, transfer); + + /* First we must get proper tderr_phys value */ + /* Retired TD with error should be previous TD to ED->td_head */ + cdata->tderr_phys = grub_ohci_td_phys2virt (o, + grub_le_to_cpu32 (cdata->ed_virt->td_head) & ~0xf ) + ->prev_td_phys; + + /* Prepare pointer to last processed TD and get error code */ + tderr_virt = grub_ohci_td_phys2virt (o, cdata->tderr_phys); + /* Set index of last processed TD */ + if (tderr_virt) + { + errcode = grub_le_to_cpu32 (tderr_virt->token) >> 28; + transfer->last_trans = tderr_virt->tr_index; + } + else + transfer->last_trans = -1; + + /* Evaluation of error code */ + grub_dprintf ("ohci", "OHCI tderr_phys=0x%02x, errcode=0x%02x\n", + cdata->tderr_phys, errcode); + switch (errcode) + { + case 0: + /* XXX: Should not happen! */ + grub_error (GRUB_ERR_IO, "OHCI failed without reporting the reason"); + err = GRUB_USB_ERR_INTERNAL; + break; + + case 1: + /* XXX: CRC error. */ + err = GRUB_USB_ERR_TIMEOUT; + break; + + case 2: + err = GRUB_USB_ERR_BITSTUFF; + break; + + case 3: + /* XXX: Data Toggle error. */ + err = GRUB_USB_ERR_DATA; + break; + + case 4: + err = GRUB_USB_ERR_STALL; + break; + + case 5: + /* XXX: Not responding. */ + err = GRUB_USB_ERR_TIMEOUT; + break; + + case 6: + /* XXX: PID Check bits failed. */ + err = GRUB_USB_ERR_BABBLE; + break; + + case 7: + /* XXX: PID unexpected failed. */ + err = GRUB_USB_ERR_BABBLE; + break; + + case 8: + /* XXX: Data overrun error. */ + err = GRUB_USB_ERR_DATA; + grub_dprintf ("ohci", "Overrun, failed TD address: %p, index: %d\n", + tderr_virt, tderr_virt->tr_index); + break; + + case 9: + /* XXX: Data underrun error. */ + grub_dprintf ("ohci", "Underrun, failed TD address: %p, index: %d\n", + tderr_virt, tderr_virt->tr_index); + if (transfer->last_trans == -1) + break; + *actual = transfer->transactions[transfer->last_trans].size + - (grub_le_to_cpu32 (tderr_virt->buffer_end) + - grub_le_to_cpu32 (tderr_virt->buffer)) + + transfer->transactions[transfer->last_trans].preceding; + err = GRUB_USB_ERR_NONE; + break; + + case 10: + /* XXX: Reserved. */ + err = GRUB_USB_ERR_NAK; + break; + + case 11: + /* XXX: Reserved. */ + err = GRUB_USB_ERR_NAK; + break; + + case 12: + /* XXX: Buffer overrun. */ + err = GRUB_USB_ERR_DATA; + break; + + case 13: + /* XXX: Buffer underrun. */ + err = GRUB_USB_ERR_DATA; + break; + + default: + err = GRUB_USB_ERR_NAK; + break; + } + + finish_transfer (dev, transfer); + + return err; +} + +static grub_usb_err_t +parse_success (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, + grub_size_t *actual) +{ + struct grub_ohci *o = dev->data; + struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data; + grub_ohci_td_t tderr_virt = NULL; + + pre_finish_transfer (dev, transfer); + + /* I hope we can do it as transfer (most probably) finished OK */ + cdata->tderr_phys = cdata->td_last_phys; + + /* Prepare pointer to last processed TD */ + tderr_virt = grub_ohci_td_phys2virt (o, cdata->tderr_phys); + + /* Set index of last processed TD */ + if (tderr_virt) + transfer->last_trans = tderr_virt->tr_index; + else + transfer->last_trans = -1; + *actual = transfer->size + 1; + + finish_transfer (dev, transfer); + + return GRUB_USB_ERR_NONE; +} + +static grub_usb_err_t +parse_unrec (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, + grub_size_t *actual) +{ + struct grub_ohci *o = dev->data; + + *actual = 0; + + pre_finish_transfer (dev, transfer); + + /* Don't try to get error code and last processed TD for proper + * toggle bit value - anything can be invalid */ + grub_dprintf("ohci", "Unrecoverable error!"); + + /* Do OHCI reset in case of unrecoverable error - maybe we will need + * do more - re-enumerate bus etc. (?) */ + + /* Suspend the OHCI by issuing a reset. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, 1); /* XXX: Magic. */ + /* Read back of register should ensure it is really written */ + grub_ohci_readreg32 (o, GRUB_OHCI_REG_CMDSTATUS); + grub_millisleep (1); + grub_dprintf ("ohci", "Unrecoverable error - OHCI reset\n"); + + /* Misc. resets. */ + o->hcca->donehead = 0; + grub_ohci_writereg32 (o, GRUB_OHCI_REG_INTSTATUS, 0x7f); /* Clears everything */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD, o->ed_ctrl_addr); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLCURR, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKHEAD, o->ed_bulk_addr); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKCURR, 0); + /* Read back of register should ensure it is really written */ + grub_ohci_readreg32 (o, GRUB_OHCI_REG_INTSTATUS); + + /* Enable the OHCI. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROL, + (2 << 6) + | GRUB_OHCI_REG_CONTROL_CONTROL_ENABLE + | GRUB_OHCI_REG_CONTROL_BULK_ENABLE ); + finish_transfer (dev, transfer); + + return GRUB_USB_ERR_UNRECOVERABLE; +} + +static grub_usb_err_t +grub_ohci_check_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, + grub_size_t *actual) +{ + struct grub_ohci *o = dev->data; + struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data; + grub_uint32_t intstatus; + + /* Check transfer status */ + intstatus = grub_ohci_readreg32 (o, GRUB_OHCI_REG_INTSTATUS); + + if ((intstatus & 0x10) != 0) + /* Unrecoverable error - only reset can help...! */ + return parse_unrec (dev, transfer, actual); + + /* Detected a HALT. */ + if ((grub_le_to_cpu32 (cdata->ed_virt->td_head) & 1)) + return parse_halt (dev, transfer, actual); + + /* Finished ED detection */ + if ( (grub_le_to_cpu32 (cdata->ed_virt->td_head) & ~0xfU) == + (grub_le_to_cpu32 (cdata->ed_virt->td_tail) & ~0xfU) ) /* Empty ED */ + { + /* Check the HALT bit */ + /* It looks like nonsense - it was tested previously... + * but it can change because OHCI is working + * simultaneously via DMA... */ + if (grub_le_to_cpu32 (cdata->ed_virt->td_head) & 1) + return parse_halt (dev, transfer, actual); + else + return parse_success (dev, transfer, actual); + } + + return GRUB_USB_ERR_WAIT; +} + +static grub_usb_err_t +grub_ohci_cancel_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_ohci *o = dev->data; + struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data; + grub_ohci_td_t tderr_virt = NULL; + + pre_finish_transfer (dev, transfer); + + grub_dprintf("ohci", "Timeout !\n"); + + /* We should wait for next SOF to be sure that ED is unaccessed + * by OHCI */ + /* SF bit reset. (SF bit indicates Start Of Frame (SOF) packet) */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_INTSTATUS, (1<<2)); + /* Wait for new SOF */ + while ((grub_ohci_readreg32 (o, GRUB_OHCI_REG_INTSTATUS) & 0x4) == 0); + + /* Possible retired TD with error should be previous TD to ED->td_head */ + cdata->tderr_phys + = grub_ohci_td_phys2virt (o, grub_le_to_cpu32 (cdata->ed_virt->td_head) + & ~0xf)->prev_td_phys; + + tderr_virt = grub_ohci_td_phys2virt (o,cdata-> tderr_phys); + + grub_dprintf ("ohci", "Cancel: tderr_phys=0x%x, tderr_virt=%p\n", + cdata->tderr_phys, tderr_virt); + + if (tderr_virt) + transfer->last_trans = tderr_virt->tr_index; + else + transfer->last_trans = -1; + + finish_transfer (dev, transfer); + + return GRUB_USB_ERR_NONE; +} + +static grub_usb_err_t +grub_ohci_portstatus (grub_usb_controller_t dev, + unsigned int port, unsigned int enable) +{ + struct grub_ohci *o = (struct grub_ohci *) dev->data; + grub_uint64_t endtime; + int i; + + grub_dprintf ("ohci", "begin of portstatus=0x%02x\n", + grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)); + + if (!enable) /* We don't need reset port */ + { + /* Disable the port and wait for it. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, + GRUB_OHCI_CLEAR_PORT_ENABLE); + endtime = grub_get_time_ms () + 1000; + while ((grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port) + & (1 << 1))) + if (grub_get_time_ms () > endtime) + return GRUB_USB_ERR_TIMEOUT; + + grub_dprintf ("ohci", "end of portstatus=0x%02x\n", + grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)); + return GRUB_USB_ERR_NONE; + } + + /* OHCI does one reset signal 10ms long but USB spec. + * requests 50ms for root hub (no need to be continuous). + * So, we do reset 5 times... */ + for (i = 0; i < 5; i++) + { + /* Reset the port - timing of reset is done by OHCI */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, + GRUB_OHCI_SET_PORT_RESET); + + /* Wait for reset completion */ + endtime = grub_get_time_ms () + 1000; + while (! (grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port) + & GRUB_OHCI_SET_PORT_RESET_STATUS_CHANGE)) + if (grub_get_time_ms () > endtime) + return GRUB_USB_ERR_TIMEOUT; + + /* End the reset signaling - reset the reset status change */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, + GRUB_OHCI_SET_PORT_RESET_STATUS_CHANGE); + grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port); + } + + /* Enable port */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, + GRUB_OHCI_SET_PORT_ENABLE); + grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port); + + /* Wait for signal enabled */ + endtime = grub_get_time_ms () + 1000; + while (! (grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port) + & (1 << 1))) + if (grub_get_time_ms () > endtime) + return GRUB_USB_ERR_TIMEOUT; + + /* Reset bit Connect Status Change */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, + GRUB_OHCI_RESET_CONNECT_CHANGE); + + /* "Reset recovery time" (USB spec.) */ + grub_millisleep (10); + + grub_dprintf ("ohci", "end of portstatus=0x%02x\n", + grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)); + + return GRUB_USB_ERR_NONE; +} + +static grub_usb_speed_t +grub_ohci_detect_dev (grub_usb_controller_t dev, int port, int *changed) +{ + struct grub_ohci *o = (struct grub_ohci *) dev->data; + grub_uint32_t status; + + status = grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port); + + grub_dprintf ("ohci", "detect_dev status=0x%02x\n", status); + + /* Connect Status Change bit - it detects change of connection */ + if (status & GRUB_OHCI_RESET_CONNECT_CHANGE) + { + *changed = 1; + /* Reset bit Connect Status Change */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port, + GRUB_OHCI_RESET_CONNECT_CHANGE); + } + else + *changed = 0; + + if (! (status & 1)) + return GRUB_USB_SPEED_NONE; + else if (status & (1 << 9)) + return GRUB_USB_SPEED_LOW; + else + return GRUB_USB_SPEED_FULL; +} + +static int +grub_ohci_hubports (grub_usb_controller_t dev) +{ + struct grub_ohci *o = (struct grub_ohci *) dev->data; + grub_uint32_t portinfo; + + portinfo = grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBA); + + grub_dprintf ("ohci", "root hub ports=%d\n", portinfo & 0xFF); + + return portinfo & 0xFF; +} + +static grub_err_t +grub_ohci_fini_hw (int noreturn __attribute__ ((unused))) +{ + struct grub_ohci *o; + + for (o = ohci; o; o = o->next) + { + int i, nports = grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBA) & 0xff; + grub_uint64_t maxtime; + + /* Set skip in all EDs */ + if (o->ed_bulk) + for (i=0; i < GRUB_OHCI_BULK_EDS; i++) + o->ed_bulk[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */ + if (o->ed_ctrl) + for (i=0; i < GRUB_OHCI_CTRL_EDS; i++) + o->ed_ctrl[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */ + + /* We should wait for next SOF to be sure that all EDs are + * unaccessed by OHCI. But OHCI can be non-functional, so + * more than 1ms timeout have to be applied. */ + /* SF bit reset. (SF bit indicates Start Of Frame (SOF) packet) */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_INTSTATUS, (1<<2)); + maxtime = grub_get_time_ms () + 2; + /* Wait for new SOF or timeout */ + while ( ((grub_ohci_readreg32 (o, GRUB_OHCI_REG_INTSTATUS) & 0x4) + == 0) || (grub_get_time_ms () >= maxtime) ); + + for (i = 0; i < nports; i++) + grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + i, + GRUB_OHCI_CLEAR_PORT_ENABLE); + + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, 1); + grub_millisleep (1); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_HCCA, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLCURR, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKHEAD, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKCURR, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_DONEHEAD, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROL, 0); + /* Read back of register should ensure it is really written */ + grub_ohci_readreg32 (o, GRUB_OHCI_REG_INTSTATUS); + +#if 0 /* Is this necessary before booting? Probably not .(?) + * But it must be done if module is removed ! (Or not ?) + * How to do it ? - Probably grub_ohci_restore_hw should be more + * complicated. (?) + * (If we do it, we need to reallocate EDs and TDs in function + * grub_ohci_restore_hw ! */ + + /* Free allocated EDs and TDs */ + grub_dma_free (o->td_chunk); + grub_dma_free (o->ed_bulk_chunk); + grub_dma_free (o->ed_ctrl_chunk); + grub_dma_free (o->hcca_chunk); +#endif + } + grub_millisleep (10); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_ohci_restore_hw (void) +{ + struct grub_ohci *o; + + for (o = ohci; o; o = o->next) + { + grub_ohci_writereg32 (o, GRUB_OHCI_REG_HCCA, o->hcca_addr); + o->hcca->donehead = 0; + grub_ohci_writereg32 (o, GRUB_OHCI_REG_INTSTATUS, 0x7f); /* Clears everything */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD, o->ed_ctrl_addr); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLCURR, 0); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKHEAD, o->ed_bulk_addr); + grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKCURR, 0); + /* Read back of register should ensure it is really written */ + grub_ohci_readreg32 (o, GRUB_OHCI_REG_INTSTATUS); + + /* Enable the OHCI. */ + grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROL, + (2 << 6) + | GRUB_OHCI_REG_CONTROL_CONTROL_ENABLE + | GRUB_OHCI_REG_CONTROL_BULK_ENABLE ); + } + + return GRUB_ERR_NONE; +} + + +static struct grub_usb_controller_dev usb_controller = +{ + .name = "ohci", + .iterate = grub_ohci_iterate, + .setup_transfer = grub_ohci_setup_transfer, + .check_transfer = grub_ohci_check_transfer, + .cancel_transfer = grub_ohci_cancel_transfer, + .hubports = grub_ohci_hubports, + .portstatus = grub_ohci_portstatus, + .detect_dev = grub_ohci_detect_dev, + /* estimated max. count of TDs for one bulk transfer */ + .max_bulk_tds = GRUB_OHCI_TDS * 3 / 4 +}; + +static struct grub_preboot *fini_hnd; + +GRUB_MOD_INIT(ohci) +{ + COMPILE_TIME_ASSERT (sizeof (struct grub_ohci_td) == 32); + COMPILE_TIME_ASSERT (sizeof (struct grub_ohci_ed) == 16); + + grub_stop_disk_firmware (); + + grub_ohci_inithw (); + grub_usb_controller_dev_register (&usb_controller); + fini_hnd = grub_loader_register_preboot_hook (grub_ohci_fini_hw, + grub_ohci_restore_hw, + GRUB_LOADER_PREBOOT_HOOK_PRIO_DISK); +} + +GRUB_MOD_FINI(ohci) +{ + grub_ohci_fini_hw (0); + grub_loader_unregister_preboot_hook (fini_hnd); + grub_usb_controller_dev_unregister (&usb_controller); +} diff --git a/grub-core/bus/usb/serial/common.c b/grub-core/bus/usb/serial/common.c new file mode 100644 index 000000000..8e94c7dc0 --- /dev/null +++ b/grub-core/bus/usb/serial/common.c @@ -0,0 +1,139 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +void +grub_usbserial_fini (struct grub_serial_port *port) +{ + port->usbdev->config[port->configno].interf[port->interfno].detach_hook = 0; + port->usbdev->config[port->configno].interf[port->interfno].attached = 0; +} + +void +grub_usbserial_detach (grub_usb_device_t usbdev, int configno, int interfno) +{ + static struct grub_serial_port *port; + port = usbdev->config[configno].interf[interfno].detach_data; + + grub_serial_unregister (port); +} + +static int usbnum = 0; + +int +grub_usbserial_attach (grub_usb_device_t usbdev, int configno, int interfno, + struct grub_serial_driver *driver, int in_endp, + int out_endp) +{ + struct grub_serial_port *port; + int j; + struct grub_usb_desc_if *interf; + grub_usb_err_t err = GRUB_USB_ERR_NONE; + + interf = usbdev->config[configno].interf[interfno].descif; + + port = grub_zalloc (sizeof (*port)); + if (!port) + { + grub_print_error (); + return 0; + } + + port->name = grub_xasprintf ("usb%d", usbnum++); + if (!port->name) + { + grub_free (port); + grub_print_error (); + return 0; + } + + port->usbdev = usbdev; + port->driver = driver; + for (j = 0; j < interf->endpointcnt; j++) + { + struct grub_usb_desc_endp *endp; + endp = &usbdev->config[0].interf[interfno].descendp[j]; + + if ((endp->endp_addr & 128) && (endp->attrib & 3) == 2 + && (in_endp == GRUB_USB_SERIAL_ENDPOINT_LAST_MATCHING + || in_endp == endp->endp_addr)) + { + /* Bulk IN endpoint. */ + port->in_endp = endp; + } + else if (!(endp->endp_addr & 128) && (endp->attrib & 3) == 2 + && (out_endp == GRUB_USB_SERIAL_ENDPOINT_LAST_MATCHING + || out_endp == endp->endp_addr)) + { + /* Bulk OUT endpoint. */ + port->out_endp = endp; + } + } + + /* Configure device */ + if (port->out_endp && port->in_endp) + err = grub_usb_set_configuration (usbdev, configno + 1); + + if (!port->out_endp || !port->in_endp || err) + { + grub_free (port->name); + grub_free (port); + return 0; + } + + port->configno = configno; + port->interfno = interfno; + + grub_serial_config_defaults (port); + grub_serial_register (port); + + port->usbdev->config[port->configno].interf[port->interfno].detach_hook + = grub_usbserial_detach; + port->usbdev->config[port->configno].interf[port->interfno].detach_data + = port; + + return 1; +} + +int +grub_usbserial_fetch (struct grub_serial_port *port, grub_size_t header_size) +{ + grub_usb_err_t err; + grub_size_t actual; + + if (port->bufstart < port->bufend) + return port->buf[port->bufstart++]; + + err = grub_usb_bulk_read_extended (port->usbdev, port->in_endp, + sizeof (port->buf), port->buf, 10, + &actual); + if (err != GRUB_USB_ERR_NONE) + return -1; + + port->bufstart = header_size; + port->bufend = actual; + if (port->bufstart >= port->bufend) + return -1; + + return port->buf[port->bufstart++]; +} diff --git a/grub-core/bus/usb/serial/ftdi.c b/grub-core/bus/usb/serial/ftdi.c new file mode 100644 index 000000000..1a99cba17 --- /dev/null +++ b/grub-core/bus/usb/serial/ftdi.c @@ -0,0 +1,218 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +enum + { + GRUB_FTDI_MODEM_CTRL = 0x01, + GRUB_FTDI_FLOW_CTRL = 0x02, + GRUB_FTDI_SPEED_CTRL = 0x03, + GRUB_FTDI_DATA_CTRL = 0x04 + }; + +#define GRUB_FTDI_MODEM_CTRL_DTRRTS 3 +#define GRUB_FTDI_FLOW_CTRL_DTRRTS 3 + +/* Convert speed to divisor. */ +static grub_uint32_t +get_divisor (unsigned int speed) +{ + unsigned int i; + + /* The structure for speed vs. divisor. */ + struct divisor + { + unsigned int speed; + grub_uint32_t div; + }; + + /* The table which lists common configurations. */ + /* Computed with a division formula with 3MHz as base frequency. */ + static struct divisor divisor_tab[] = + { + { 2400, 0x04e2 }, + { 4800, 0x0271 }, + { 9600, 0x4138 }, + { 19200, 0x809c }, + { 38400, 0xc04e }, + { 57600, 0xc034 }, + { 115200, 0x001a } + }; + + /* Set the baud rate. */ + for (i = 0; i < ARRAY_SIZE (divisor_tab); i++) + if (divisor_tab[i].speed == speed) + return divisor_tab[i].div; + return 0; +} + +static void +real_config (struct grub_serial_port *port) +{ + grub_uint32_t divisor; + const grub_uint16_t parities[] = { + [GRUB_SERIAL_PARITY_NONE] = 0x0000, + [GRUB_SERIAL_PARITY_ODD] = 0x0100, + [GRUB_SERIAL_PARITY_EVEN] = 0x0200 + }; + const grub_uint16_t stop_bits[] = { + [GRUB_SERIAL_STOP_BITS_1] = 0x0000, + [GRUB_SERIAL_STOP_BITS_1_5] = 0x0800, + [GRUB_SERIAL_STOP_BITS_2] = 0x1000, + }; + + if (port->configured) + return; + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + GRUB_FTDI_MODEM_CTRL, + port->config.rtscts ? GRUB_FTDI_MODEM_CTRL_DTRRTS : 0, + 0, 0, 0); + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + GRUB_FTDI_FLOW_CTRL, + port->config.rtscts ? GRUB_FTDI_FLOW_CTRL_DTRRTS : 0, + 0, 0, 0); + + divisor = get_divisor (port->config.speed); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + GRUB_FTDI_SPEED_CTRL, + divisor & 0xffff, divisor >> 16, 0, 0); + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + GRUB_FTDI_DATA_CTRL, + parities[port->config.parity] + | stop_bits[port->config.stop_bits] + | port->config.word_len, 0, 0, 0); + + port->configured = 1; +} + +/* Fetch a key. */ +static int +ftdi_hw_fetch (struct grub_serial_port *port) +{ + real_config (port); + + return grub_usbserial_fetch (port, 2); +} + +/* Put a character. */ +static void +ftdi_hw_put (struct grub_serial_port *port, const int c) +{ + char cc = c; + + real_config (port); + + grub_usb_bulk_write (port->usbdev, port->out_endp, 1, &cc); +} + +static grub_err_t +ftdi_hw_configure (struct grub_serial_port *port, + struct grub_serial_config *config) +{ + grub_uint16_t divisor; + + divisor = get_divisor (config->speed); + if (divisor == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port speed")); + + if (config->parity != GRUB_SERIAL_PARITY_NONE + && config->parity != GRUB_SERIAL_PARITY_ODD + && config->parity != GRUB_SERIAL_PARITY_EVEN) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port parity")); + + if (config->stop_bits != GRUB_SERIAL_STOP_BITS_1 + && config->stop_bits != GRUB_SERIAL_STOP_BITS_1_5 + && config->stop_bits != GRUB_SERIAL_STOP_BITS_2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port stop bits number")); + + if (config->word_len < 5 || config->word_len > 8) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port word length")); + + port->config = *config; + port->configured = 0; + + return GRUB_ERR_NONE; +} + +static struct grub_serial_driver grub_ftdi_driver = + { + .configure = ftdi_hw_configure, + .fetch = ftdi_hw_fetch, + .put = ftdi_hw_put, + .fini = grub_usbserial_fini + }; + +static const struct +{ + grub_uint16_t vendor, product; +} products[] = + { + {0x0403, 0x6001} /* QEMU virtual USBserial. */ + }; + +static int +grub_ftdi_attach (grub_usb_device_t usbdev, int configno, int interfno) +{ + unsigned j; + + for (j = 0; j < ARRAY_SIZE (products); j++) + if (usbdev->descdev.vendorid == products[j].vendor + && usbdev->descdev.prodid == products[j].product) + break; + if (j == ARRAY_SIZE (products)) + return 0; + + return grub_usbserial_attach (usbdev, configno, interfno, + &grub_ftdi_driver, + GRUB_USB_SERIAL_ENDPOINT_LAST_MATCHING, + GRUB_USB_SERIAL_ENDPOINT_LAST_MATCHING); +} + +static struct grub_usb_attach_desc attach_hook = +{ + .class = 0xff, + .hook = grub_ftdi_attach +}; + +GRUB_MOD_INIT(usbserial_ftdi) +{ + grub_usb_register_attach_hook_class (&attach_hook); +} + +GRUB_MOD_FINI(usbserial_ftdi) +{ + grub_serial_unregister_driver (&grub_ftdi_driver); + grub_usb_unregister_attach_hook_class (&attach_hook); +} diff --git a/grub-core/bus/usb/serial/pl2303.c b/grub-core/bus/usb/serial/pl2303.c new file mode 100644 index 000000000..d1945a2cb --- /dev/null +++ b/grub-core/bus/usb/serial/pl2303.c @@ -0,0 +1,231 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Convert speed to divisor. */ +static grub_uint32_t +is_speed_supported (unsigned int speed) +{ + unsigned int i; + unsigned int supported[] = { 2400, 4800, 9600, 19200, 38400, 57600, 115200}; + + for (i = 0; i < ARRAY_SIZE (supported); i++) + if (supported[i] == speed) + return 1; + return 0; +} + +#define GRUB_PL2303_REQUEST_SET_CONFIG 0x20 +#define GRUB_PL2303_STOP_BITS_1 0x0 +#define GRUB_PL2303_STOP_BITS_1_5 0x1 +#define GRUB_PL2303_STOP_BITS_2 0x2 + +#define GRUB_PL2303_PARITY_NONE 0 +#define GRUB_PL2303_PARITY_ODD 1 +#define GRUB_PL2303_PARITY_EVEN 2 + +struct grub_pl2303_config +{ + grub_uint32_t speed; + grub_uint8_t stop_bits; + grub_uint8_t parity; + grub_uint8_t word_len; +} GRUB_PACKED; + +static void +real_config (struct grub_serial_port *port) +{ + struct grub_pl2303_config config_pl2303; + char xx; + + if (port->configured) + return; + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_IN, + 1, 0x8484, 0, 1, &xx); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 0x0404, 0, 0, 0); + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_IN, + 1, 0x8484, 0, 1, &xx); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_IN, + 1, 0x8383, 0, 1, &xx); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_IN, + 1, 0x8484, 0, 1, &xx); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 0x0404, 1, 0, 0); + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_IN, + 1, 0x8484, 0, 1, &xx); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_IN, + 1, 0x8383, 0, 1, &xx); + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 0, 1, 0, 0); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 1, 0, 0, 0); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 2, 0x44, 0, 0); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 8, 0, 0, 0); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 9, 0, 0, 0); + + if (port->config.stop_bits == GRUB_SERIAL_STOP_BITS_2) + config_pl2303.stop_bits = GRUB_PL2303_STOP_BITS_2; + else if (port->config.stop_bits == GRUB_SERIAL_STOP_BITS_1_5) + config_pl2303.stop_bits = GRUB_PL2303_STOP_BITS_1_5; + else + config_pl2303.stop_bits = GRUB_PL2303_STOP_BITS_1; + + switch (port->config.parity) + { + case GRUB_SERIAL_PARITY_NONE: + config_pl2303.parity = GRUB_PL2303_PARITY_NONE; + break; + case GRUB_SERIAL_PARITY_ODD: + config_pl2303.parity = GRUB_PL2303_PARITY_ODD; + break; + case GRUB_SERIAL_PARITY_EVEN: + config_pl2303.parity = GRUB_PL2303_PARITY_EVEN; + break; + } + + config_pl2303.word_len = port->config.word_len; + config_pl2303.speed = port->config.speed; + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_CLASS_INTERFACE_OUT, + GRUB_PL2303_REQUEST_SET_CONFIG, 0, 0, + sizeof (config_pl2303), (char *) &config_pl2303); + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_CLASS_INTERFACE_OUT, + 0x22, 3, 0, 0, 0); + + grub_usb_control_msg (port->usbdev, GRUB_USB_REQTYPE_VENDOR_OUT, + 1, 0, port->config.rtscts ? 0x61 : 0, 0, 0); + port->configured = 1; +} + +/* Fetch a key. */ +static int +pl2303_hw_fetch (struct grub_serial_port *port) +{ + real_config (port); + + return grub_usbserial_fetch (port, 0); +} + +/* Put a character. */ +static void +pl2303_hw_put (struct grub_serial_port *port, const int c) +{ + char cc = c; + + real_config (port); + + grub_usb_bulk_write (port->usbdev, port->out_endp, 1, &cc); +} + +static grub_err_t +pl2303_hw_configure (struct grub_serial_port *port, + struct grub_serial_config *config) +{ + if (!is_speed_supported (config->speed)) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port speed")); + + if (config->parity != GRUB_SERIAL_PARITY_NONE + && config->parity != GRUB_SERIAL_PARITY_ODD + && config->parity != GRUB_SERIAL_PARITY_EVEN) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port parity")); + + if (config->stop_bits != GRUB_SERIAL_STOP_BITS_1 + && config->stop_bits != GRUB_SERIAL_STOP_BITS_1_5 + && config->stop_bits != GRUB_SERIAL_STOP_BITS_2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port stop bits number")); + + if (config->word_len < 5 || config->word_len > 8) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unsupported serial port word length")); + + port->config = *config; + port->configured = 0; + + return GRUB_ERR_NONE; +} + +static struct grub_serial_driver grub_pl2303_driver = + { + .configure = pl2303_hw_configure, + .fetch = pl2303_hw_fetch, + .put = pl2303_hw_put, + .fini = grub_usbserial_fini + }; + +static const struct +{ + grub_uint16_t vendor, product; +} products[] = + { + {0x067b, 0x2303} + }; + +static int +grub_pl2303_attach (grub_usb_device_t usbdev, int configno, int interfno) +{ + unsigned j; + + for (j = 0; j < ARRAY_SIZE (products); j++) + if (usbdev->descdev.vendorid == products[j].vendor + && usbdev->descdev.prodid == products[j].product) + break; + if (j == ARRAY_SIZE (products)) + return 0; + + return grub_usbserial_attach (usbdev, configno, interfno, + &grub_pl2303_driver, + GRUB_USB_SERIAL_ENDPOINT_LAST_MATCHING, + GRUB_USB_SERIAL_ENDPOINT_LAST_MATCHING); +} + +static struct grub_usb_attach_desc attach_hook = +{ + .class = 0xff, + .hook = grub_pl2303_attach +}; + +GRUB_MOD_INIT(usbserial_pl2303) +{ + grub_usb_register_attach_hook_class (&attach_hook); +} + +GRUB_MOD_FINI(usbserial_pl2303) +{ + grub_serial_unregister_driver (&grub_pl2303_driver); + grub_usb_unregister_attach_hook_class (&attach_hook); +} diff --git a/grub-core/bus/usb/serial/usbdebug_late.c b/grub-core/bus/usb/serial/usbdebug_late.c new file mode 100644 index 000000000..e88ba130e --- /dev/null +++ b/grub-core/bus/usb/serial/usbdebug_late.c @@ -0,0 +1,93 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009,2010,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + + +/* Fetch a key. */ +static int +usbdebug_late_hw_fetch (struct grub_serial_port *port) +{ + return grub_usbserial_fetch (port, 0); +} + +/* Put a character. */ +static void +usbdebug_late_hw_put (struct grub_serial_port *port, const int c) +{ + char cc = c; + + grub_usb_bulk_write (port->usbdev, port->out_endp, 1, &cc); +} + +static grub_err_t +usbdebug_late_hw_configure (struct grub_serial_port *port __attribute__ ((unused)), + struct grub_serial_config *config __attribute__ ((unused))) +{ + return GRUB_ERR_NONE; +} + +static struct grub_serial_driver grub_usbdebug_late_driver = + { + .configure = usbdebug_late_hw_configure, + .fetch = usbdebug_late_hw_fetch, + .put = usbdebug_late_hw_put, + .fini = grub_usbserial_fini + }; + +static int +grub_usbdebug_late_attach (grub_usb_device_t usbdev, int configno, int interfno) +{ + grub_usb_err_t err; + struct grub_usb_desc_debug debugdesc; + + err = grub_usb_get_descriptor (usbdev, GRUB_USB_DESCRIPTOR_DEBUG, configno, + sizeof (debugdesc), (char *) &debugdesc); + if (err) + return 0; + + return grub_usbserial_attach (usbdev, configno, interfno, + &grub_usbdebug_late_driver, + debugdesc.in_endp, debugdesc.out_endp); +} + +static struct grub_usb_attach_desc attach_hook = +{ + .class = 0xff, + .hook = grub_usbdebug_late_attach +}; + +GRUB_MOD_INIT(usbserial_usbdebug_late) +{ + grub_usb_register_attach_hook_class (&attach_hook); +} + +GRUB_MOD_FINI(usbserial_usbdebug_late) +{ + grub_serial_unregister_driver (&grub_usbdebug_late_driver); + grub_usb_unregister_attach_hook_class (&attach_hook); +} diff --git a/grub-core/bus/usb/uhci.c b/grub-core/bus/usb/uhci.c new file mode 100644 index 000000000..7c5811fd6 --- /dev/null +++ b/grub-core/bus/usb/uhci.c @@ -0,0 +1,871 @@ +/* uhci.c - UHCI Support. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_UHCI_IOMASK (0x7FF << 5) + +#define N_QH 256 +#define N_TD 640 + +typedef enum + { + GRUB_UHCI_REG_USBCMD = 0x00, + GRUB_UHCI_REG_USBINTR = 0x04, + GRUB_UHCI_REG_FLBASEADD = 0x08, + GRUB_UHCI_REG_PORTSC1 = 0x10, + GRUB_UHCI_REG_PORTSC2 = 0x12, + GRUB_UHCI_REG_USBLEGSUP = 0xc0 + } grub_uhci_reg_t; + +enum + { + GRUB_UHCI_DETECT_CHANGED = (1 << 1), + GRUB_UHCI_DETECT_HAVE_DEVICE = 1, + GRUB_UHCI_DETECT_LOW_SPEED = (1 << 8) + }; + +/* R/WC legacy support bits */ +enum + { + GRUB_UHCI_LEGSUP_END_A20GATE = (1 << 15), + GRUB_UHCI_TRAP_BY_64H_WSTAT = (1 << 11), + GRUB_UHCI_TRAP_BY_64H_RSTAT = (1 << 10), + GRUB_UHCI_TRAP_BY_60H_WSTAT = (1 << 9), + GRUB_UHCI_TRAP_BY_60H_RSTAT = (1 << 8) + }; + +/* Reset all legacy support - clear all R/WC bits and all R/W bits */ +#define GRUB_UHCI_RESET_LEGSUP_SMI ( GRUB_UHCI_LEGSUP_END_A20GATE \ + | GRUB_UHCI_TRAP_BY_64H_WSTAT \ + | GRUB_UHCI_TRAP_BY_64H_RSTAT \ + | GRUB_UHCI_TRAP_BY_60H_WSTAT \ + | GRUB_UHCI_TRAP_BY_60H_RSTAT ) + +/* Some UHCI commands */ +#define GRUB_UHCI_CMD_RUN_STOP (1 << 0) +#define GRUB_UHCI_CMD_HCRESET (1 << 1) +#define GRUB_UHCI_CMD_MAXP (1 << 7) + +/* Important bits in structures */ +#define GRUB_UHCI_LINK_TERMINATE 1 +#define GRUB_UHCI_LINK_QUEUE_HEAD 2 + +enum + { + GRUB_UHCI_REG_PORTSC_CONNECT_CHANGED = 0x0002, + GRUB_UHCI_REG_PORTSC_PORT_ENABLED = 0x0004, + GRUB_UHCI_REG_PORTSC_RESUME = 0x0040, + GRUB_UHCI_REG_PORTSC_RESET = 0x0200, + GRUB_UHCI_REG_PORTSC_SUSPEND = 0x1000, + GRUB_UHCI_REG_PORTSC_RW = GRUB_UHCI_REG_PORTSC_PORT_ENABLED + | GRUB_UHCI_REG_PORTSC_RESUME | GRUB_UHCI_REG_PORTSC_RESET + | GRUB_UHCI_REG_PORTSC_SUSPEND, + /* These bits should not be written as 1 unless we really need it */ + GRUB_UHCI_PORTSC_RWC = ((1 << 1) | (1 << 3) | (1 << 11) | (3 << 13)) + }; + +/* UHCI Queue Head. */ +struct grub_uhci_qh +{ + /* Queue head link pointer which points to the next queue head. */ + grub_uint32_t linkptr; + + /* Queue element link pointer which points to the first data object + within the queue. */ + grub_uint32_t elinkptr; + + /* Queue heads are aligned on 16 bytes, pad so a queue head is 16 + bytes so we can store many in a 4K page. */ + grub_uint8_t pad[8]; +} GRUB_PACKED; + +/* UHCI Transfer Descriptor. */ +struct grub_uhci_td +{ + /* Pointer to the next TD in the list. */ + grub_uint32_t linkptr; + + /* Control and status bits. */ + grub_uint32_t ctrl_status; + + /* All information required to transfer the Token packet. */ + grub_uint32_t token; + + /* A pointer to the data buffer, UHCI requires this pointer to be 32 + bits. */ + grub_uint32_t buffer; + + /* Another linkptr that is not overwritten by the Host Controller. + This is GRUB specific. */ + grub_uint32_t linkptr2; + + /* 3 additional 32 bits words reserved for the Host Controller Driver. */ + grub_uint32_t data[3]; +} GRUB_PACKED; + +typedef volatile struct grub_uhci_td *grub_uhci_td_t; +typedef volatile struct grub_uhci_qh *grub_uhci_qh_t; + +struct grub_uhci +{ + grub_port_t iobase; + volatile grub_uint32_t *framelist_virt; + grub_uint32_t framelist_phys; + struct grub_pci_dma_chunk *framelist_chunk; + + /* N_QH Queue Heads. */ + struct grub_pci_dma_chunk *qh_chunk; + volatile grub_uhci_qh_t qh_virt; + grub_uint32_t qh_phys; + + /* N_TD Transfer Descriptors. */ + struct grub_pci_dma_chunk *td_chunk; + volatile grub_uhci_td_t td_virt; + grub_uint32_t td_phys; + + /* Free Transfer Descriptors. */ + grub_uhci_td_t tdfree; + + int qh_busy[N_QH]; + + struct grub_uhci *next; +}; + +static struct grub_uhci *uhci; + +static grub_uint16_t +grub_uhci_readreg16 (struct grub_uhci *u, grub_uhci_reg_t reg) +{ + return grub_inw (u->iobase + reg); +} + +#if 0 +static grub_uint32_t +grub_uhci_readreg32 (struct grub_uhci *u, grub_uhci_reg_t reg) +{ + return grub_inl (u->iobase + reg); +} +#endif + +static void +grub_uhci_writereg16 (struct grub_uhci *u, + grub_uhci_reg_t reg, grub_uint16_t val) +{ + grub_outw (val, u->iobase + reg); +} + +static void +grub_uhci_writereg32 (struct grub_uhci *u, + grub_uhci_reg_t reg, grub_uint32_t val) +{ + grub_outl (val, u->iobase + reg); +} + +/* Iterate over all PCI devices. Determine if a device is an UHCI + controller. If this is the case, initialize it. */ +static int +grub_uhci_pci_iter (grub_pci_device_t dev, + grub_pci_id_t pciid __attribute__((unused)), + void *data __attribute__ ((unused))) +{ + grub_uint32_t class_code; + grub_uint32_t class; + grub_uint32_t subclass; + grub_uint32_t interf; + grub_uint32_t base; + grub_uint32_t fp; + grub_pci_address_t addr; + struct grub_uhci *u; + int i; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + class_code = grub_pci_read (addr) >> 8; + + interf = class_code & 0xFF; + subclass = (class_code >> 8) & 0xFF; + class = class_code >> 16; + + /* If this is not an UHCI controller, just return. */ + if (class != 0x0c || subclass != 0x03 || interf != 0x00) + return 0; + + /* Determine IO base address. */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG4); + base = grub_pci_read (addr); + /* Stop if there is no IO space base address defined. */ + if ((base & GRUB_PCI_ADDR_SPACE_MASK) != GRUB_PCI_ADDR_SPACE_IO) + return 0; + + if ((base & GRUB_UHCI_IOMASK) == 0) + return 0; + + /* Set bus master - needed for coreboot or broken BIOSes */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word(addr, GRUB_PCI_COMMAND_IO_ENABLED + | GRUB_PCI_COMMAND_BUS_MASTER + | GRUB_PCI_COMMAND_MEM_ENABLED + | grub_pci_read_word (addr)); + + grub_dprintf ("uhci", "base = %x\n", base); + + /* Allocate memory for the controller and register it. */ + u = grub_zalloc (sizeof (*u)); + if (! u) + return 1; + + u->iobase = (base & GRUB_UHCI_IOMASK) + GRUB_MACHINE_PCI_IO_BASE; + + /* Reset PIRQ and SMI */ + addr = grub_pci_make_address (dev, GRUB_UHCI_REG_USBLEGSUP); + grub_pci_write_word(addr, GRUB_UHCI_RESET_LEGSUP_SMI); + /* Reset the HC */ + grub_uhci_writereg16(u, GRUB_UHCI_REG_USBCMD, GRUB_UHCI_CMD_HCRESET); + grub_millisleep(5); + /* Disable interrupts and commands (just to be safe) */ + grub_uhci_writereg16(u, GRUB_UHCI_REG_USBINTR, 0); + /* Finish HC reset, HC remains disabled */ + grub_uhci_writereg16(u, GRUB_UHCI_REG_USBCMD, 0); + /* Read back to be sure PCI write is done */ + grub_uhci_readreg16(u, GRUB_UHCI_REG_USBCMD); + + /* Reserve a page for the frame list. */ + u->framelist_chunk = grub_memalign_dma32 (4096, 4096); + if (! u->framelist_chunk) + goto fail; + u->framelist_virt = grub_dma_get_virt (u->framelist_chunk); + u->framelist_phys = grub_dma_get_phys (u->framelist_chunk); + + grub_dprintf ("uhci", + "class=0x%02x 0x%02x interface 0x%02x base=0x%x framelist=%p\n", + class, subclass, interf, u->iobase, u->framelist_virt); + + /* The QH pointer of UHCI is only 32 bits, make sure this + code works on on 64 bits architectures. */ + u->qh_chunk = grub_memalign_dma32 (4096, sizeof(struct grub_uhci_qh) * N_QH); + if (! u->qh_chunk) + goto fail; + u->qh_virt = grub_dma_get_virt (u->qh_chunk); + u->qh_phys = grub_dma_get_phys (u->qh_chunk); + + /* The TD pointer of UHCI is only 32 bits, make sure this + code works on on 64 bits architectures. */ + u->td_chunk = grub_memalign_dma32 (4096, sizeof(struct grub_uhci_td) * N_TD); + if (! u->td_chunk) + goto fail; + u->td_virt = grub_dma_get_virt (u->td_chunk); + u->td_phys = grub_dma_get_phys (u->td_chunk); + + grub_dprintf ("uhci", "QH=%p, TD=%p\n", + u->qh_virt, u->td_virt); + + /* Link all Transfer Descriptors in a list of available Transfer + Descriptors. */ + for (i = 0; i < N_TD; i++) + u->td_virt[i].linkptr = u->td_phys + (i + 1) * sizeof(struct grub_uhci_td); + u->td_virt[N_TD - 2].linkptr = 0; + u->tdfree = u->td_virt; + + /* Setup the frame list pointers. Since no isochronous transfers + are and will be supported, they all point to the (same!) queue + head. */ + fp = u->qh_phys & (~15); + /* Mark this as a queue head. */ + fp |= 2; + for (i = 0; i < 1024; i++) + u->framelist_virt[i] = fp; + /* Program the framelist address into the UHCI controller. */ + grub_uhci_writereg32 (u, GRUB_UHCI_REG_FLBASEADD, u->framelist_phys); + + /* Make the Queue Heads point to each other. */ + for (i = 0; i < N_QH; i++) + { + /* Point to the next QH. */ + u->qh_virt[i].linkptr = ((u->qh_phys + + (i + 1) * sizeof(struct grub_uhci_qh)) + & (~15)); + + /* This is a QH. */ + u->qh_virt[i].linkptr |= GRUB_UHCI_LINK_QUEUE_HEAD; + + /* For the moment, do not point to a Transfer Descriptor. These + are set at transfer time, so just terminate it. */ + u->qh_virt[i].elinkptr = 1; + } + + /* The last Queue Head should terminate. */ + u->qh_virt[N_QH - 1].linkptr = 1; + + /* Enable UHCI again. */ + grub_uhci_writereg16 (u, GRUB_UHCI_REG_USBCMD, + GRUB_UHCI_CMD_RUN_STOP | GRUB_UHCI_CMD_MAXP); + + /* UHCI is initialized and ready for transfers. */ + grub_dprintf ("uhci", "UHCI initialized\n"); + + +#if 0 + { + int i; + for (i = 0; i < 10; i++) + { + grub_uint16_t frnum; + + frnum = grub_uhci_readreg16 (u, 6); + grub_dprintf ("uhci", "Framenum=%d\n", frnum); + grub_millisleep (100); + } + } +#endif + + /* Link to uhci now that initialisation is successful. */ + u->next = uhci; + uhci = u; + + return 0; + + fail: + if (u) + { + grub_dma_free (u->qh_chunk); + grub_dma_free (u->framelist_chunk); + } + grub_free (u); + + return 1; +} + +static void +grub_uhci_inithw (void) +{ + grub_pci_iterate (grub_uhci_pci_iter, NULL); +} + +static grub_uhci_td_t +grub_alloc_td (struct grub_uhci *u) +{ + grub_uhci_td_t ret; + + /* Check if there is a Transfer Descriptor available. */ + if (! u->tdfree) + return NULL; + + ret = u->tdfree; + u->tdfree = grub_dma_phys2virt (u->tdfree->linkptr, u->td_chunk); + + return ret; +} + +static void +grub_free_td (struct grub_uhci *u, grub_uhci_td_t td) +{ + td->linkptr = grub_dma_virt2phys (u->tdfree, u->td_chunk); + u->tdfree = td; +} + +static void +grub_free_queue (struct grub_uhci *u, grub_uhci_qh_t qh, grub_uhci_td_t td, + grub_usb_transfer_t transfer, grub_size_t *actual) +{ + int i; /* Index of TD in transfer */ + + u->qh_busy[qh - u->qh_virt] = 0; + + *actual = 0; + + /* Free the TDs in this queue and set last_trans. */ + for (i=0; td; i++) + { + grub_uhci_td_t tdprev; + + grub_dprintf ("uhci", "Freeing %p\n", td); + /* Check state of TD and possibly set last_trans */ + if (transfer && (td->linkptr & 1)) + transfer->last_trans = i; + + *actual += (td->ctrl_status + 1) & 0x7ff; + + /* Unlink the queue. */ + tdprev = td; + if (!td->linkptr2) + td = 0; + else + td = grub_dma_phys2virt (td->linkptr2, u->td_chunk); + + /* Free the TD. */ + grub_free_td (u, tdprev); + } +} + +static grub_uhci_qh_t +grub_alloc_qh (struct grub_uhci *u, + grub_transaction_type_t tr __attribute__((unused))) +{ + int i; + grub_uhci_qh_t qh; + + /* Look for a Queue Head for this transfer. Skip the first QH if + this is a Interrupt Transfer. */ +#if 0 + if (tr == GRUB_USB_TRANSACTION_TYPE_INTERRUPT) + i = 0; + else +#endif + i = 1; + + for (; i < N_QH; i++) + { + if (!u->qh_busy[i]) + break; + } + qh = &u->qh_virt[i]; + if (i == N_QH) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, + "no free queue heads available"); + return NULL; + } + + u->qh_busy[qh - u->qh_virt] = 1; + + return qh; +} + +static grub_uhci_td_t +grub_uhci_transaction (struct grub_uhci *u, unsigned int endp, + grub_transfer_type_t type, unsigned int addr, + unsigned int toggle, grub_size_t size, + grub_uint32_t data, grub_usb_speed_t speed) +{ + grub_uhci_td_t td; + static const unsigned int tf[] = { 0x69, 0xE1, 0x2D }; + + /* XXX: Check if data is <4GB. If it isn't, just copy stuff around. + This is only relevant for 64 bits architectures. */ + + /* Grab a free Transfer Descriptor and initialize it. */ + td = grub_alloc_td (u); + if (! td) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, + "no transfer descriptors available for UHCI transfer"); + return 0; + } + + grub_dprintf ("uhci", + "transaction: endp=%d, type=%d, addr=%d, toggle=%d, size=%lu data=0x%x td=%p\n", + endp, type, addr, toggle, (unsigned long) size, data, td); + + /* Don't point to any TD, just terminate. */ + td->linkptr = 1; + + /* Active! Only retry a transfer 3 times. */ + td->ctrl_status = (1 << 23) | (3 << 27) | + ((speed == GRUB_USB_SPEED_LOW) ? (1 << 26) : 0); + + /* If zero bytes are transmitted, size is 0x7FF. Otherwise size is + size-1. */ + if (size == 0) + size = 0x7FF; + else + size = size - 1; + + /* Setup whatever is required for the token packet. */ + td->token = ((size << 21) | (toggle << 19) | (endp << 15) + | (addr << 8) | tf[type]); + + td->buffer = data; + + return td; +} + +struct grub_uhci_transfer_controller_data +{ + grub_uhci_qh_t qh; + grub_uhci_td_t td_first; +}; + +static grub_usb_err_t +grub_uhci_setup_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_uhci *u = (struct grub_uhci *) dev->data; + grub_uhci_td_t td; + grub_uhci_td_t td_prev = NULL; + int i; + struct grub_uhci_transfer_controller_data *cdata; + + cdata = grub_malloc (sizeof (*cdata)); + if (!cdata) + return GRUB_USB_ERR_INTERNAL; + + cdata->td_first = NULL; + + /* Allocate a queue head for the transfer queue. */ + cdata->qh = grub_alloc_qh (u, GRUB_USB_TRANSACTION_TYPE_CONTROL); + if (! cdata->qh) + { + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + + grub_dprintf ("uhci", "transfer, iobase:%08x\n", u->iobase); + + for (i = 0; i < transfer->transcnt; i++) + { + grub_usb_transaction_t tr = &transfer->transactions[i]; + + td = grub_uhci_transaction (u, transfer->endpoint & 15, tr->pid, + transfer->devaddr, tr->toggle, + tr->size, tr->data, + transfer->dev->speed); + if (! td) + { + grub_size_t actual = 0; + /* Terminate and free. */ + if (td_prev) + { + td_prev->linkptr2 = 0; + td_prev->linkptr = 1; + } + + if (cdata->td_first) + grub_free_queue (u, cdata->qh, cdata->td_first, NULL, &actual); + + grub_free (cdata); + return GRUB_USB_ERR_INTERNAL; + } + + if (! cdata->td_first) + cdata->td_first = td; + else + { + td_prev->linkptr2 = grub_dma_virt2phys (td, u->td_chunk); + td_prev->linkptr = grub_dma_virt2phys (td, u->td_chunk); + td_prev->linkptr |= 4; + } + td_prev = td; + } + td_prev->linkptr2 = 0; + td_prev->linkptr = 1; + + grub_dprintf ("uhci", "setup transaction %d\n", transfer->type); + + /* Link it into the queue and terminate. Now the transaction can + take place. */ + cdata->qh->elinkptr = grub_dma_virt2phys (cdata->td_first, u->td_chunk); + + grub_dprintf ("uhci", "initiate transaction\n"); + + transfer->controller_data = cdata; + + return GRUB_USB_ERR_NONE; +} + +static grub_usb_err_t +grub_uhci_check_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer, + grub_size_t *actual) +{ + struct grub_uhci *u = (struct grub_uhci *) dev->data; + grub_uhci_td_t errtd; + struct grub_uhci_transfer_controller_data *cdata = transfer->controller_data; + + *actual = 0; + + if (cdata->qh->elinkptr & ~0x0f) + errtd = grub_dma_phys2virt (cdata->qh->elinkptr & ~0x0f, u->qh_chunk); + else + errtd = 0; + + if (errtd) + { + grub_dprintf ("uhci", ">t status=0x%02x data=0x%02x td=%p, %x\n", + errtd->ctrl_status, errtd->buffer & (~15), errtd, + cdata->qh->elinkptr); + } + + /* Check if the transaction completed. */ + if (cdata->qh->elinkptr & 1) + { + grub_dprintf ("uhci", "transaction complete\n"); + + /* Place the QH back in the free list and deallocate the associated + TDs. */ + cdata->qh->elinkptr = 1; + grub_free_queue (u, cdata->qh, cdata->td_first, transfer, actual); + grub_free (cdata); + return GRUB_USB_ERR_NONE; + } + + if (errtd && !(errtd->ctrl_status & (1 << 23))) + { + grub_usb_err_t err = GRUB_USB_ERR_NONE; + + /* Check if the endpoint is stalled. */ + if (errtd->ctrl_status & (1 << 22)) + err = GRUB_USB_ERR_STALL; + + /* Check if an error related to the data buffer occurred. */ + else if (errtd->ctrl_status & (1 << 21)) + err = GRUB_USB_ERR_DATA; + + /* Check if a babble error occurred. */ + else if (errtd->ctrl_status & (1 << 20)) + err = GRUB_USB_ERR_BABBLE; + + /* Check if a NAK occurred. */ + else if (errtd->ctrl_status & (1 << 19)) + err = GRUB_USB_ERR_NAK; + + /* Check if a timeout occurred. */ + else if (errtd->ctrl_status & (1 << 18)) + err = GRUB_USB_ERR_TIMEOUT; + + /* Check if a bitstuff error occurred. */ + else if (errtd->ctrl_status & (1 << 17)) + err = GRUB_USB_ERR_BITSTUFF; + + if (err) + { + grub_dprintf ("uhci", "transaction failed\n"); + + /* Place the QH back in the free list and deallocate the associated + TDs. */ + cdata->qh->elinkptr = 1; + grub_free_queue (u, cdata->qh, cdata->td_first, transfer, actual); + grub_free (cdata); + + return err; + } + } + + /* Fall through, no errors occurred, so the QH might be + updated. */ + grub_dprintf ("uhci", "transaction fallthrough\n"); + + return GRUB_USB_ERR_WAIT; +} + +static grub_usb_err_t +grub_uhci_cancel_transfer (grub_usb_controller_t dev, + grub_usb_transfer_t transfer) +{ + struct grub_uhci *u = (struct grub_uhci *) dev->data; + grub_size_t actual; + struct grub_uhci_transfer_controller_data *cdata = transfer->controller_data; + + grub_dprintf ("uhci", "transaction cancel\n"); + + /* Place the QH back in the free list and deallocate the associated + TDs. */ + cdata->qh->elinkptr = 1; + grub_free_queue (u, cdata->qh, cdata->td_first, transfer, &actual); + grub_free (cdata); + + return GRUB_USB_ERR_NONE; +} + +static int +grub_uhci_iterate (grub_usb_controller_iterate_hook_t hook, void *hook_data) +{ + struct grub_uhci *u; + struct grub_usb_controller dev; + + for (u = uhci; u; u = u->next) + { + dev.data = u; + if (hook (&dev, hook_data)) + return 1; + } + + return 0; +} + +static grub_usb_err_t +grub_uhci_portstatus (grub_usb_controller_t dev, + unsigned int port, unsigned int enable) +{ + struct grub_uhci *u = (struct grub_uhci *) dev->data; + int reg; + unsigned int status; + grub_uint64_t endtime; + + grub_dprintf ("uhci", "portstatus, iobase:%08x\n", u->iobase); + + grub_dprintf ("uhci", "enable=%d port=%d\n", enable, port); + + if (port == 0) + reg = GRUB_UHCI_REG_PORTSC1; + else if (port == 1) + reg = GRUB_UHCI_REG_PORTSC2; + else + return GRUB_USB_ERR_INTERNAL; + + status = grub_uhci_readreg16 (u, reg); + grub_dprintf ("uhci", "detect=0x%02x\n", status); + + if (!enable) /* We don't need reset port */ + { + /* Disable the port. */ + grub_uhci_writereg16 (u, reg, 0 << 2); + grub_dprintf ("uhci", "waiting for the port to be disabled\n"); + endtime = grub_get_time_ms () + 1000; + while ((grub_uhci_readreg16 (u, reg) & (1 << 2))) + if (grub_get_time_ms () > endtime) + return GRUB_USB_ERR_TIMEOUT; + + status = grub_uhci_readreg16 (u, reg); + grub_dprintf ("uhci", ">3detect=0x%02x\n", status); + return GRUB_USB_ERR_NONE; + } + + /* Reset the port. */ + status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC; + grub_uhci_writereg16 (u, reg, status | (1 << 9)); + grub_uhci_readreg16 (u, reg); /* Ensure it is writen... */ + + /* Wait for the reset to complete. XXX: How long exactly? */ + grub_millisleep (50); /* For root hub should be nominaly 50ms */ + status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC; + grub_uhci_writereg16 (u, reg, status & ~(1 << 9)); + grub_uhci_readreg16 (u, reg); /* Ensure it is writen... */ + + /* Note: some debug prints were removed because they affected reset/enable timing. */ + + grub_millisleep (1); /* Probably not needed at all or only few microsecs. */ + + /* Reset bits Connect & Enable Status Change */ + status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC; + grub_uhci_writereg16 (u, reg, status | (1 << 3) | GRUB_UHCI_REG_PORTSC_CONNECT_CHANGED); + grub_uhci_readreg16 (u, reg); /* Ensure it is writen... */ + + /* Enable the port. */ + status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC; + grub_uhci_writereg16 (u, reg, status | (1 << 2)); + grub_uhci_readreg16 (u, reg); /* Ensure it is writen... */ + + endtime = grub_get_time_ms () + 1000; + while (! ((status = grub_uhci_readreg16 (u, reg)) & (1 << 2))) + if (grub_get_time_ms () > endtime) + return GRUB_USB_ERR_TIMEOUT; + + /* Reset recovery time */ + grub_millisleep (10); + + /* Read final port status */ + status = grub_uhci_readreg16 (u, reg); + grub_dprintf ("uhci", ">3detect=0x%02x\n", status); + + + return GRUB_USB_ERR_NONE; +} + +static grub_usb_speed_t +grub_uhci_detect_dev (grub_usb_controller_t dev, int port, int *changed) +{ + struct grub_uhci *u = (struct grub_uhci *) dev->data; + int reg; + unsigned int status; + + grub_dprintf ("uhci", "detect_dev, iobase:%08x\n", u->iobase); + + if (port == 0) + reg = GRUB_UHCI_REG_PORTSC1; + else if (port == 1) + reg = GRUB_UHCI_REG_PORTSC2; + else + return GRUB_USB_SPEED_NONE; + + status = grub_uhci_readreg16 (u, reg); + + grub_dprintf ("uhci", "detect=0x%02x port=%d\n", status, port); + + /* Connect Status Change bit - it detects change of connection */ + if (status & GRUB_UHCI_DETECT_CHANGED) + { + *changed = 1; + /* Reset bit Connect Status Change */ + grub_uhci_writereg16 (u, reg, (status & GRUB_UHCI_REG_PORTSC_RW) + | GRUB_UHCI_REG_PORTSC_CONNECT_CHANGED); + } + else + *changed = 0; + + if (! (status & GRUB_UHCI_DETECT_HAVE_DEVICE)) + return GRUB_USB_SPEED_NONE; + else if (status & GRUB_UHCI_DETECT_LOW_SPEED) + return GRUB_USB_SPEED_LOW; + else + return GRUB_USB_SPEED_FULL; +} + +static int +grub_uhci_hubports (grub_usb_controller_t dev __attribute__((unused))) +{ + /* The root hub has exactly two ports. */ + return 2; +} + + +static struct grub_usb_controller_dev usb_controller = +{ + .name = "uhci", + .iterate = grub_uhci_iterate, + .setup_transfer = grub_uhci_setup_transfer, + .check_transfer = grub_uhci_check_transfer, + .cancel_transfer = grub_uhci_cancel_transfer, + .hubports = grub_uhci_hubports, + .portstatus = grub_uhci_portstatus, + .detect_dev = grub_uhci_detect_dev, + /* estimated max. count of TDs for one bulk transfer */ + .max_bulk_tds = N_TD * 3 / 4 +}; + +GRUB_MOD_INIT(uhci) +{ + grub_stop_disk_firmware (); + + grub_uhci_inithw (); + grub_usb_controller_dev_register (&usb_controller); + grub_dprintf ("uhci", "registered\n"); +} + +GRUB_MOD_FINI(uhci) +{ + struct grub_uhci *u; + + /* Disable all UHCI controllers. */ + for (u = uhci; u; u = u->next) + grub_uhci_writereg16 (u, GRUB_UHCI_REG_USBCMD, 0); + + /* Unregister the controller. */ + grub_usb_controller_dev_unregister (&usb_controller); +} diff --git a/grub-core/bus/usb/usb.c b/grub-core/bus/usb/usb.c new file mode 100644 index 000000000..8da5e4c74 --- /dev/null +++ b/grub-core/bus/usb/usb.c @@ -0,0 +1,337 @@ +/* usb.c - Generic USB interfaces. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static struct grub_usb_attach_desc *attach_hooks; + +#if 0 +/* Context for grub_usb_controller_iterate. */ +struct grub_usb_controller_iterate_ctx +{ + grub_usb_controller_iterate_hook_t hook; + void *hook_data; + grub_usb_controller_dev_t p; +}; + +/* Helper for grub_usb_controller_iterate. */ +static int +grub_usb_controller_iterate_iter (grub_usb_controller_t dev, void *data) +{ + struct grub_usb_controller_iterate_ctx *ctx = data; + + dev->dev = ctx->p; + if (ctx->hook (dev, ctx->hook_data)) + return 1; + return 0; +} + +int +grub_usb_controller_iterate (grub_usb_controller_iterate_hook_t hook, + void *hook_data) +{ + struct grub_usb_controller_iterate_ctx ctx = { + .hook = hook, + .hook_data = hook_data + }; + + /* Iterate over all controller drivers. */ + for (ctx.p = grub_usb_list; ctx.p; ctx.p = ctx.p->next) + { + /* Iterate over the busses of the controllers. XXX: Actually, a + hub driver should do this. */ + if (ctx.p->iterate (grub_usb_controller_iterate_iter, &ctx)) + return 1; + } + + return 0; +} +#endif + + +grub_usb_err_t +grub_usb_clear_halt (grub_usb_device_t dev, int endpoint) +{ + dev->toggle[endpoint] = 0; + return grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_STANDARD + | GRUB_USB_REQTYPE_TARGET_ENDP), + GRUB_USB_REQ_CLEAR_FEATURE, + GRUB_USB_FEATURE_ENDP_HALT, + endpoint, 0, 0); +} + +grub_usb_err_t +grub_usb_set_configuration (grub_usb_device_t dev, int configuration) +{ + grub_memset (dev->toggle, 0, sizeof (dev->toggle)); + + return grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_STANDARD + | GRUB_USB_REQTYPE_TARGET_DEV), + GRUB_USB_REQ_SET_CONFIGURATION, configuration, + 0, 0, NULL); +} + +grub_usb_err_t +grub_usb_get_descriptor (grub_usb_device_t dev, + grub_uint8_t type, grub_uint8_t index, + grub_size_t size, char *data) +{ + return grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_IN + | GRUB_USB_REQTYPE_STANDARD + | GRUB_USB_REQTYPE_TARGET_DEV), + GRUB_USB_REQ_GET_DESCRIPTOR, + (type << 8) | index, + 0, size, data); +} + +grub_usb_err_t +grub_usb_device_initialize (grub_usb_device_t dev) +{ + struct grub_usb_desc_device *descdev; + struct grub_usb_desc_config config; + grub_usb_err_t err; + int i; + + /* First we have to read first 8 bytes only and determine + * max. size of packet */ + dev->descdev.maxsize0 = 0; /* invalidating, for safety only, can be removed if it is sure it is zero here */ + err = grub_usb_get_descriptor (dev, GRUB_USB_DESCRIPTOR_DEVICE, + 0, 8, (char *) &dev->descdev); + if (err) + return err; + + /* Now we have valid value in dev->descdev.maxsize0, + * so we can read whole device descriptor */ + err = grub_usb_get_descriptor (dev, GRUB_USB_DESCRIPTOR_DEVICE, + 0, sizeof (struct grub_usb_desc_device), + (char *) &dev->descdev); + if (err) + return err; + descdev = &dev->descdev; + + for (i = 0; i < 8; i++) + dev->config[i].descconf = NULL; + + if (descdev->configcnt == 0) + { + err = GRUB_USB_ERR_BADDEVICE; + goto fail; + } + + for (i = 0; i < descdev->configcnt; i++) + { + int pos; + int currif; + char *data; + struct grub_usb_desc *desc; + + /* First just read the first 4 bytes of the configuration + descriptor, after that it is known how many bytes really have + to be read. */ + err = grub_usb_get_descriptor (dev, GRUB_USB_DESCRIPTOR_CONFIG, i, 4, + (char *) &config); + + data = grub_malloc (config.totallen); + if (! data) + { + err = GRUB_USB_ERR_INTERNAL; + goto fail; + } + + dev->config[i].descconf = (struct grub_usb_desc_config *) data; + err = grub_usb_get_descriptor (dev, GRUB_USB_DESCRIPTOR_CONFIG, i, + config.totallen, data); + if (err) + goto fail; + + /* Skip the configuration descriptor. */ + pos = dev->config[i].descconf->length; + + /* Read all interfaces. */ + for (currif = 0; currif < dev->config[i].descconf->numif; currif++) + { + while (pos < config.totallen) + { + desc = (struct grub_usb_desc *)&data[pos]; + if (desc->type == GRUB_USB_DESCRIPTOR_INTERFACE) + break; + if (!desc->length) + { + err = GRUB_USB_ERR_BADDEVICE; + goto fail; + } + pos += desc->length; + } + + dev->config[i].interf[currif].descif + = (struct grub_usb_desc_if *) &data[pos]; + pos += dev->config[i].interf[currif].descif->length; + + while (pos < config.totallen) + { + desc = (struct grub_usb_desc *)&data[pos]; + if (desc->type == GRUB_USB_DESCRIPTOR_ENDPOINT) + break; + if (!desc->length) + { + err = GRUB_USB_ERR_BADDEVICE; + goto fail; + } + pos += desc->length; + } + + /* Point to the first endpoint. */ + dev->config[i].interf[currif].descendp + = (struct grub_usb_desc_endp *) &data[pos]; + pos += (sizeof (struct grub_usb_desc_endp) + * dev->config[i].interf[currif].descif->endpointcnt); + } + } + + return GRUB_USB_ERR_NONE; + + fail: + + for (i = 0; i < 8; i++) + grub_free (dev->config[i].descconf); + + return err; +} + +void grub_usb_device_attach (grub_usb_device_t dev) +{ + int i; + + /* XXX: Just check configuration 0 for now. */ + for (i = 0; i < dev->config[0].descconf->numif; i++) + { + struct grub_usb_desc_if *interf; + struct grub_usb_attach_desc *desc; + + interf = dev->config[0].interf[i].descif; + + grub_dprintf ("usb", "iterate: interf=%d, class=%d, subclass=%d, protocol=%d\n", + i, interf->class, interf->subclass, interf->protocol); + + if (dev->config[0].interf[i].attached) + continue; + + for (desc = attach_hooks; desc; desc = desc->next) + if (interf->class == desc->class) + { + grub_boot_time ("Probing USB device driver class %x", desc->class); + if (desc->hook (dev, 0, i)) + dev->config[0].interf[i].attached = 1; + grub_boot_time ("Probed USB device driver class %x", desc->class); + } + + if (dev->config[0].interf[i].attached) + continue; + + switch (interf->class) + { + case GRUB_USB_CLASS_MASS_STORAGE: + grub_dl_load ("usbms"); + grub_print_error (); + break; + case GRUB_USB_CLASS_HID: + grub_dl_load ("usb_keyboard"); + grub_print_error (); + break; + case 0xff: + /* FIXME: don't load useless modules. */ + grub_dl_load ("usbserial_ftdi"); + grub_print_error (); + grub_dl_load ("usbserial_pl2303"); + grub_print_error (); + grub_dl_load ("usbserial_usbdebug"); + grub_print_error (); + break; + } + } +} + +/* Helper for grub_usb_register_attach_hook_class. */ +static int +grub_usb_register_attach_hook_class_iter (grub_usb_device_t usbdev, void *data) +{ + struct grub_usb_attach_desc *desc = data; + struct grub_usb_desc_device *descdev = &usbdev->descdev; + int i; + + if (descdev->class != 0 || descdev->subclass || descdev->protocol != 0 + || descdev->configcnt == 0) + return 0; + + /* XXX: Just check configuration 0 for now. */ + for (i = 0; i < usbdev->config[0].descconf->numif; i++) + { + struct grub_usb_desc_if *interf; + + interf = usbdev->config[0].interf[i].descif; + + grub_dprintf ("usb", "iterate: interf=%d, class=%d, subclass=%d, protocol=%d\n", + i, interf->class, interf->subclass, interf->protocol); + + if (usbdev->config[0].interf[i].attached) + continue; + + if (interf->class != desc->class) + continue; + if (desc->hook (usbdev, 0, i)) + usbdev->config[0].interf[i].attached = 1; + } + + return 0; +} + +void +grub_usb_register_attach_hook_class (struct grub_usb_attach_desc *desc) +{ + desc->next = attach_hooks; + attach_hooks = desc; + + grub_usb_iterate (grub_usb_register_attach_hook_class_iter, desc); +} + +void +grub_usb_unregister_attach_hook_class (struct grub_usb_attach_desc *desc) +{ + grub_list_remove (GRUB_AS_LIST (desc)); +} + + +GRUB_MOD_INIT(usb) +{ + grub_term_poll_usb = grub_usb_poll_devices; +} + +GRUB_MOD_FINI(usb) +{ + grub_term_poll_usb = NULL; +} diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c new file mode 100644 index 000000000..34a7ff1b5 --- /dev/null +++ b/grub-core/bus/usb/usbhub.c @@ -0,0 +1,756 @@ +/* usb.c - USB Hub Support. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +#define GRUB_USBHUB_MAX_DEVICES 128 + +/* USB Supports 127 devices, with device 0 as special case. */ +static struct grub_usb_device *grub_usb_devs[GRUB_USBHUB_MAX_DEVICES]; + +static int rescan = 0; +static int npending = 0; + +struct grub_usb_hub +{ + struct grub_usb_hub *next; + grub_usb_controller_t controller; + int nports; + struct grub_usb_device **devices; + struct grub_usb_hub_port *ports; + grub_usb_device_t dev; +}; + +static struct grub_usb_hub *hubs; +static grub_usb_controller_dev_t grub_usb_list; + +/* Add a device that currently has device number 0 and resides on + CONTROLLER, the Hub reported that the device speed is SPEED. */ +static grub_usb_device_t +grub_usb_hub_add_dev (grub_usb_controller_t controller, + grub_usb_speed_t speed, + int split_hubport, int split_hubaddr) +{ + grub_usb_device_t dev; + int i; + grub_usb_err_t err; + + grub_boot_time ("Attaching USB device"); + + dev = grub_zalloc (sizeof (struct grub_usb_device)); + if (! dev) + return NULL; + + dev->controller = *controller; + dev->speed = speed; + dev->split_hubport = split_hubport; + dev->split_hubaddr = split_hubaddr; + + err = grub_usb_device_initialize (dev); + if (err) + { + grub_free (dev); + return NULL; + } + + /* Assign a new address to the device. */ + for (i = 1; i < GRUB_USBHUB_MAX_DEVICES; i++) + { + if (! grub_usb_devs[i]) + break; + } + if (i == GRUB_USBHUB_MAX_DEVICES) + { + grub_error (GRUB_ERR_IO, "can't assign address to USB device"); + for (i = 0; i < 8; i++) + grub_free (dev->config[i].descconf); + grub_free (dev); + return NULL; + } + + err = grub_usb_control_msg (dev, + (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_STANDARD + | GRUB_USB_REQTYPE_TARGET_DEV), + GRUB_USB_REQ_SET_ADDRESS, + i, 0, 0, NULL); + if (err) + { + for (i = 0; i < 8; i++) + grub_free (dev->config[i].descconf); + grub_free (dev); + return NULL; + } + + dev->addr = i; + dev->initialized = 1; + grub_usb_devs[i] = dev; + + grub_dprintf ("usb", "Added new usb device: %p, addr=%d\n", + dev, i); + grub_dprintf ("usb", "speed=%d, split_hubport=%d, split_hubaddr=%d\n", + speed, split_hubport, split_hubaddr); + + /* Wait "recovery interval", spec. says 2ms */ + grub_millisleep (2); + + grub_boot_time ("Probing USB device driver"); + + grub_usb_device_attach (dev); + + grub_boot_time ("Attached USB device"); + + return dev; +} + + +static grub_usb_err_t +grub_usb_add_hub (grub_usb_device_t dev) +{ + struct grub_usb_usb_hubdesc hubdesc; + grub_usb_err_t err; + int i; + + err = grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_IN + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_DEV), + GRUB_USB_REQ_GET_DESCRIPTOR, + (GRUB_USB_DESCRIPTOR_HUB << 8) | 0, + 0, sizeof (hubdesc), (char *) &hubdesc); + if (err) + return err; + grub_dprintf ("usb", "Hub descriptor:\n\t\t len:%d, typ:0x%02x, cnt:%d, char:0x%02x, pwg:%d, curr:%d\n", + hubdesc.length, hubdesc.type, hubdesc.portcnt, + hubdesc.characteristics, hubdesc.pwdgood, + hubdesc.current); + + /* Activate the first configuration. Hubs should have only one conf. */ + grub_dprintf ("usb", "Hub set configuration\n"); + grub_usb_set_configuration (dev, 1); + + dev->nports = hubdesc.portcnt; + dev->children = grub_zalloc (hubdesc.portcnt * sizeof (dev->children[0])); + dev->ports = grub_zalloc (dev->nports * sizeof (dev->ports[0])); + if (!dev->children || !dev->ports) + { + grub_free (dev->children); + grub_free (dev->ports); + return GRUB_USB_ERR_INTERNAL; + } + + /* Power on all Hub ports. */ + for (i = 1; i <= hubdesc.portcnt; i++) + { + grub_dprintf ("usb", "Power on - port %d\n", i); + /* Power on the port and wait for possible device connect */ + grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_SET_FEATURE, + GRUB_USB_HUB_FEATURE_PORT_POWER, + i, 0, NULL); + } + + /* Rest will be done on next usb poll. */ + for (i = 0; i < dev->config[0].interf[0].descif->endpointcnt; + i++) + { + struct grub_usb_desc_endp *endp = NULL; + endp = &dev->config[0].interf[0].descendp[i]; + + if ((endp->endp_addr & 128) && grub_usb_get_ep_type(endp) + == GRUB_USB_EP_INTERRUPT) + { + grub_size_t len; + dev->hub_endpoint = endp; + len = endp->maxpacket; + if (len > sizeof (dev->statuschange)) + len = sizeof (dev->statuschange); + dev->hub_transfer + = grub_usb_bulk_read_background (dev, endp, len, + (char *) &dev->statuschange); + break; + } + } + + rescan = 1; + + return GRUB_USB_ERR_NONE; +} + +static void +attach_root_port (struct grub_usb_hub *hub, int portno, + grub_usb_speed_t speed) +{ + grub_usb_device_t dev; + grub_usb_err_t err; + + grub_boot_time ("After detect_dev"); + + /* Enable the port. */ + err = hub->controller->dev->portstatus (hub->controller, portno, 1); + if (err) + return; + hub->controller->dev->pending_reset = grub_get_time_ms () + 5000; + npending++; + + grub_millisleep (10); + + grub_boot_time ("Port enabled"); + + /* Enable the port and create a device. */ + /* High speed device needs not transaction translation + and full/low speed device cannot be connected to EHCI root hub + and full/low speed device connected to OHCI/UHCI needs not + transaction translation - e.g. hubport and hubaddr should be + always none (zero) for any device connected to any root hub. */ + dev = grub_usb_hub_add_dev (hub->controller, speed, 0, 0); + hub->controller->dev->pending_reset = 0; + npending--; + if (! dev) + return; + + hub->devices[portno] = dev; + + /* If the device is a Hub, scan it for more devices. */ + if (dev->descdev.class == 0x09) + grub_usb_add_hub (dev); + + grub_boot_time ("Attached root port"); +} + +/* Iterate over all controllers found by the driver. */ +static int +grub_usb_controller_dev_register_iter (grub_usb_controller_t controller, void *data) +{ + grub_usb_controller_dev_t usb = data; + struct grub_usb_hub *hub; + + controller->dev = usb; + + grub_boot_time ("Registering USB root hub"); + + hub = grub_malloc (sizeof (*hub)); + if (!hub) + return GRUB_USB_ERR_INTERNAL; + + hub->next = hubs; + hubs = hub; + hub->controller = grub_malloc (sizeof (*controller)); + if (!hub->controller) + { + grub_free (hub); + return GRUB_USB_ERR_INTERNAL; + } + + grub_memcpy (hub->controller, controller, sizeof (*controller)); + hub->dev = 0; + + /* Query the number of ports the root Hub has. */ + hub->nports = controller->dev->hubports (controller); + hub->devices = grub_zalloc (sizeof (hub->devices[0]) * hub->nports); + hub->ports = grub_zalloc (sizeof (hub->ports[0]) * hub->nports); + if (!hub->devices || !hub->ports) + { + grub_free (hub->devices); + grub_free (hub->ports); + grub_free (hub->controller); + grub_free (hub); + grub_print_error (); + return 0; + } + + return 0; +} + +void +grub_usb_controller_dev_unregister (grub_usb_controller_dev_t usb) +{ + grub_usb_controller_dev_t *p, q; + + for (p = &grub_usb_list, q = *p; q; p = &(q->next), q = q->next) + if (q == usb) + { + *p = q->next; + break; + } +} + +void +grub_usb_controller_dev_register (grub_usb_controller_dev_t usb) +{ + int portno; + int continue_waiting = 0; + struct grub_usb_hub *hub; + + usb->next = grub_usb_list; + grub_usb_list = usb; + + if (usb->iterate) + usb->iterate (grub_usb_controller_dev_register_iter, usb); + + grub_boot_time ("waiting for stable power on USB root\n"); + + while (1) + { + for (hub = hubs; hub; hub = hub->next) + if (hub->controller->dev == usb) + { + /* Wait for completion of insertion and stable power (USB spec.) + * Should be at least 100ms, some devices requires more... + * There is also another thing - some devices have worse contacts + * and connected signal is unstable for some time - we should handle + * it - but prevent deadlock in case when device is too faulty... */ + for (portno = 0; portno < hub->nports; portno++) + { + grub_usb_speed_t speed; + int changed = 0; + + speed = hub->controller->dev->detect_dev (hub->controller, portno, + &changed); + + if (hub->ports[portno].state == PORT_STATE_NORMAL + && speed != GRUB_USB_SPEED_NONE) + { + hub->ports[portno].soft_limit_time = grub_get_time_ms () + 250; + hub->ports[portno].hard_limit_time = hub->ports[portno].soft_limit_time + 1750; + hub->ports[portno].state = PORT_STATE_WAITING_FOR_STABLE_POWER; + grub_boot_time ("Scheduling stable power wait for port %p:%d", + usb, portno); + continue_waiting++; + continue; + } + + if (hub->ports[portno].state == PORT_STATE_WAITING_FOR_STABLE_POWER + && speed == GRUB_USB_SPEED_NONE) + { + hub->ports[portno].soft_limit_time = grub_get_time_ms () + 250; + continue; + } + if (hub->ports[portno].state == PORT_STATE_WAITING_FOR_STABLE_POWER + && grub_get_time_ms () > hub->ports[portno].soft_limit_time) + { + hub->ports[portno].state = PORT_STATE_STABLE_POWER; + grub_boot_time ("Got stable power wait for port %p:%d", + usb, portno); + continue_waiting--; + continue; + } + if (hub->ports[portno].state == PORT_STATE_WAITING_FOR_STABLE_POWER + && grub_get_time_ms () > hub->ports[portno].hard_limit_time) + { + hub->ports[portno].state = PORT_STATE_FAILED_DEVICE; + continue_waiting--; + continue; + } + } + } + if (!continue_waiting) + break; + grub_millisleep (1); + } + + grub_boot_time ("After the stable power wait on USB root"); + + for (hub = hubs; hub; hub = hub->next) + if (hub->controller->dev == usb) + for (portno = 0; portno < hub->nports; portno++) + if (hub->ports[portno].state == PORT_STATE_STABLE_POWER) + { + grub_usb_speed_t speed; + int changed = 0; + hub->ports[portno].state = PORT_STATE_NORMAL; + speed = hub->controller->dev->detect_dev (hub->controller, portno, &changed); + attach_root_port (hub, portno, speed); + } + + grub_boot_time ("USB root hub registered"); +} + +static void detach_device (grub_usb_device_t dev); + +static void +detach_device (grub_usb_device_t dev) +{ + unsigned i; + int k; + if (!dev) + return; + if (dev->descdev.class == GRUB_USB_CLASS_HUB) + { + if (dev->hub_transfer) + grub_usb_cancel_transfer (dev->hub_transfer); + + for (i = 0; i < dev->nports; i++) + detach_device (dev->children[i]); + grub_free (dev->children); + } + for (i = 0; i < ARRAY_SIZE (dev->config); i++) + if (dev->config[i].descconf) + for (k = 0; k < dev->config[i].descconf->numif; k++) + { + struct grub_usb_interface *inter = &dev->config[i].interf[k]; + if (inter && inter->detach_hook) + inter->detach_hook (dev, i, k); + } + grub_usb_devs[dev->addr] = 0; +} + +static int +wait_power_nonroot_hub (grub_usb_device_t dev) +{ + grub_usb_err_t err; + int continue_waiting = 0; + unsigned i; + + for (i = 1; i <= dev->nports; i++) + if (dev->ports[i - 1].state == PORT_STATE_WAITING_FOR_STABLE_POWER) + { + grub_uint64_t tm; + grub_uint32_t current_status = 0; + + /* Get the port status. */ + err = grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_IN + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_GET_STATUS, + 0, i, + sizeof (current_status), + (char *) ¤t_status); + if (err) + { + dev->ports[i - 1].state = PORT_STATE_FAILED_DEVICE; + continue; + } + tm = grub_get_time_ms (); + if (!(current_status & GRUB_USB_HUB_STATUS_PORT_CONNECTED)) + dev->ports[i - 1].soft_limit_time = tm + 250; + if (tm >= dev->ports[i - 1].soft_limit_time) + { + if (dev->controller.dev->pending_reset) + continue; + /* Now do reset of port. */ + grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_SET_FEATURE, + GRUB_USB_HUB_FEATURE_PORT_RESET, + i, 0, 0); + dev->ports[i - 1].state = PORT_STATE_NORMAL; + grub_boot_time ("Resetting port %p:%d", dev, i - 1); + + rescan = 1; + /* We cannot reset more than one device at the same time ! + * Resetting more devices together results in very bad + * situation: more than one device has default address 0 + * at the same time !!! + * Additionaly, we cannot perform another reset + * anywhere on the same OHCI controller until + * we will finish addressing of reseted device ! */ + dev->controller.dev->pending_reset = grub_get_time_ms () + 5000; + npending++; + continue; + } + if (tm >= dev->ports[i - 1].hard_limit_time) + { + dev->ports[i - 1].state = PORT_STATE_FAILED_DEVICE; + continue; + } + continue_waiting = 1; + } + return continue_waiting && dev->controller.dev->pending_reset == 0; +} + +static void +poll_nonroot_hub (grub_usb_device_t dev) +{ + grub_usb_err_t err; + unsigned i; + grub_uint32_t changed; + grub_size_t actual, len; + + if (!dev->hub_transfer) + return; + + err = grub_usb_check_transfer (dev->hub_transfer, &actual); + + if (err == GRUB_USB_ERR_WAIT) + return; + + changed = dev->statuschange; + + len = dev->hub_endpoint->maxpacket; + if (len > sizeof (dev->statuschange)) + len = sizeof (dev->statuschange); + dev->hub_transfer + = grub_usb_bulk_read_background (dev, dev->hub_endpoint, len, + (char *) &dev->statuschange); + + if (err || actual == 0 || changed == 0) + return; + + /* Iterate over the Hub ports. */ + for (i = 1; i <= dev->nports; i++) + { + grub_uint32_t status; + + if (!(changed & (1 << i)) + || dev->ports[i - 1].state == PORT_STATE_WAITING_FOR_STABLE_POWER) + continue; + + /* Get the port status. */ + err = grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_IN + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_GET_STATUS, + 0, i, sizeof (status), (char *) &status); + + grub_dprintf ("usb", "dev = %p, i = %d, status = %08x\n", + dev, i, status); + + if (err) + continue; + + /* FIXME: properly handle these conditions. */ + if (status & GRUB_USB_HUB_STATUS_C_PORT_ENABLED) + grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_CLEAR_FEATURE, + GRUB_USB_HUB_FEATURE_C_PORT_ENABLED, i, 0, 0); + + if (status & GRUB_USB_HUB_STATUS_C_PORT_SUSPEND) + grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_CLEAR_FEATURE, + GRUB_USB_HUB_FEATURE_C_PORT_SUSPEND, i, 0, 0); + + if (status & GRUB_USB_HUB_STATUS_C_PORT_OVERCURRENT) + grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_CLEAR_FEATURE, + GRUB_USB_HUB_FEATURE_C_PORT_OVERCURRENT, i, 0, 0); + + if (!dev->controller.dev->pending_reset && + (status & GRUB_USB_HUB_STATUS_C_PORT_CONNECTED)) + { + grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_CLEAR_FEATURE, + GRUB_USB_HUB_FEATURE_C_PORT_CONNECTED, i, 0, 0); + + detach_device (dev->children[i - 1]); + dev->children[i - 1] = NULL; + + /* Connected and status of connection changed ? */ + if (status & GRUB_USB_HUB_STATUS_PORT_CONNECTED) + { + grub_boot_time ("Before the stable power wait portno=%d", i); + /* A device is actually connected to this port. */ + /* Wait for completion of insertion and stable power (USB spec.) + * Should be at least 100ms, some devices requires more... + * There is also another thing - some devices have worse contacts + * and connected signal is unstable for some time - we should handle + * it - but prevent deadlock in case when device is too faulty... */ + dev->ports[i - 1].soft_limit_time = grub_get_time_ms () + 250; + dev->ports[i - 1].hard_limit_time = dev->ports[i - 1].soft_limit_time + 1750; + dev->ports[i - 1].state = PORT_STATE_WAITING_FOR_STABLE_POWER; + grub_boot_time ("Scheduling stable power wait for port %p:%d", + dev, i - 1); + continue; + } + } + + if (status & GRUB_USB_HUB_STATUS_C_PORT_RESET) + { + grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT + | GRUB_USB_REQTYPE_CLASS + | GRUB_USB_REQTYPE_TARGET_OTHER), + GRUB_USB_REQ_CLEAR_FEATURE, + GRUB_USB_HUB_FEATURE_C_PORT_RESET, i, 0, 0); + + grub_boot_time ("Port %d reset", i); + + if (status & GRUB_USB_HUB_STATUS_PORT_CONNECTED) + { + grub_usb_speed_t speed; + grub_usb_device_t next_dev; + int split_hubport = 0; + int split_hubaddr = 0; + + /* Determine the device speed. */ + if (status & GRUB_USB_HUB_STATUS_PORT_LOWSPEED) + speed = GRUB_USB_SPEED_LOW; + else + { + if (status & GRUB_USB_HUB_STATUS_PORT_HIGHSPEED) + speed = GRUB_USB_SPEED_HIGH; + else + speed = GRUB_USB_SPEED_FULL; + } + + /* Wait a recovery time after reset, spec. says 10ms */ + grub_millisleep (10); + + /* Find correct values for SPLIT hubport and hubaddr */ + if (speed == GRUB_USB_SPEED_HIGH) + { + /* HIGH speed device needs not transaction translation */ + split_hubport = 0; + split_hubaddr = 0; + } + else + /* FULL/LOW device needs hub port and hub address + for transaction translation (if connected to EHCI) */ + if (dev->speed == GRUB_USB_SPEED_HIGH) + { + /* This port is the first FULL/LOW speed port + in the chain from root hub. Attached device + should use its port number and hub address */ + split_hubport = i; + split_hubaddr = dev->addr; + } + else + { + /* This port is NOT the first FULL/LOW speed port + in the chain from root hub. Attached device + should use values inherited from some parent + HIGH speed hub - if any. */ + split_hubport = dev->split_hubport; + split_hubaddr = dev->split_hubaddr; + } + + /* Add the device and assign a device address to it. */ + next_dev = grub_usb_hub_add_dev (&dev->controller, speed, + split_hubport, split_hubaddr); + if (dev->controller.dev->pending_reset) + { + dev->controller.dev->pending_reset = 0; + npending--; + } + if (! next_dev) + continue; + + dev->children[i - 1] = next_dev; + + /* If the device is a Hub, scan it for more devices. */ + if (next_dev->descdev.class == 0x09) + grub_usb_add_hub (next_dev); + } + } + } +} + +void +grub_usb_poll_devices (int wait_for_completion) +{ + struct grub_usb_hub *hub; + int i; + + for (hub = hubs; hub; hub = hub->next) + { + /* Do we have to recheck number of ports? */ + /* No, it should be never changed, it should be constant. */ + for (i = 0; i < hub->nports; i++) + { + grub_usb_speed_t speed = GRUB_USB_SPEED_NONE; + int changed = 0; + + if (hub->controller->dev->pending_reset) + { + /* Check for possible timeout */ + if (grub_get_time_ms () > hub->controller->dev->pending_reset) + { + /* Something went wrong, reset device was not + * addressed properly, timeout happened */ + hub->controller->dev->pending_reset = 0; + npending--; + } + } + if (!hub->controller->dev->pending_reset) + speed = hub->controller->dev->detect_dev (hub->controller, + i, &changed); + + if (changed) + { + detach_device (hub->devices[i]); + hub->devices[i] = NULL; + if (speed != GRUB_USB_SPEED_NONE) + attach_root_port (hub, i, speed); + } + } + } + + while (1) + { + rescan = 0; + + /* We should check changes of non-root hubs too. */ + for (i = 0; i < GRUB_USBHUB_MAX_DEVICES; i++) + { + grub_usb_device_t dev = grub_usb_devs[i]; + + if (dev && dev->descdev.class == 0x09) + poll_nonroot_hub (dev); + } + + while (1) + { + int continue_waiting = 0; + for (i = 0; i < GRUB_USBHUB_MAX_DEVICES; i++) + { + grub_usb_device_t dev = grub_usb_devs[i]; + + if (dev && dev->descdev.class == 0x09) + continue_waiting = continue_waiting || wait_power_nonroot_hub (dev); + } + if (!continue_waiting) + break; + grub_millisleep (1); + } + + if (!(rescan || (npending && wait_for_completion))) + break; + grub_millisleep (25); + } +} + +int +grub_usb_iterate (grub_usb_iterate_hook_t hook, void *hook_data) +{ + int i; + + for (i = 0; i < GRUB_USBHUB_MAX_DEVICES; i++) + { + if (grub_usb_devs[i]) + { + if (hook (grub_usb_devs[i], hook_data)) + return 1; + } + } + + return 0; +} diff --git a/grub-core/bus/usb/usbtrans.c b/grub-core/bus/usb/usbtrans.c new file mode 100644 index 000000000..9266e4931 --- /dev/null +++ b/grub-core/bus/usb/usbtrans.c @@ -0,0 +1,462 @@ +/* usbtrans.c - USB Transfers and Transactions. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + + +static inline unsigned int +grub_usb_bulk_maxpacket (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint) +{ + /* Use the maximum packet size given in the endpoint descriptor. */ + if (dev->initialized && endpoint && (unsigned int) endpoint->maxpacket) + return endpoint->maxpacket; + + return 64; +} + + +static grub_usb_err_t +grub_usb_execute_and_wait_transfer (grub_usb_device_t dev, + grub_usb_transfer_t transfer, + int timeout, grub_size_t *actual) +{ + grub_usb_err_t err; + grub_uint64_t endtime; + + err = dev->controller.dev->setup_transfer (&dev->controller, transfer); + if (err) + return err; + /* endtime moved behind setup transfer to prevent false timeouts + * while debugging... */ + endtime = grub_get_time_ms () + timeout; + while (1) + { + err = dev->controller.dev->check_transfer (&dev->controller, transfer, + actual); + if (!err) + return GRUB_USB_ERR_NONE; + if (err != GRUB_USB_ERR_WAIT) + return err; + if (grub_get_time_ms () > endtime) + { + err = dev->controller.dev->cancel_transfer (&dev->controller, + transfer); + if (err) + return err; + return GRUB_USB_ERR_TIMEOUT; + } + grub_cpu_idle (); + } +} + +grub_usb_err_t +grub_usb_control_msg (grub_usb_device_t dev, + grub_uint8_t reqtype, + grub_uint8_t request, + grub_uint16_t value, + grub_uint16_t index, + grub_size_t size0, char *data_in) +{ + int i; + grub_usb_transfer_t transfer; + int datablocks; + volatile struct grub_usb_packet_setup *setupdata; + grub_uint32_t setupdata_addr; + grub_usb_err_t err; + unsigned int max; + struct grub_pci_dma_chunk *data_chunk, *setupdata_chunk; + volatile char *data; + grub_uint32_t data_addr; + grub_size_t size = size0; + grub_size_t actual; + + /* FIXME: avoid allocation any kind of buffer in a first place. */ + data_chunk = grub_memalign_dma32 (128, size ? : 16); + if (!data_chunk) + return GRUB_USB_ERR_INTERNAL; + data = grub_dma_get_virt (data_chunk); + data_addr = grub_dma_get_phys (data_chunk); + grub_memcpy ((char *) data, data_in, size); + + grub_arch_sync_dma_caches (data, size); + + grub_dprintf ("usb", + "control: reqtype=0x%02x req=0x%02x val=0x%02x idx=0x%02x size=%lu\n", + reqtype, request, value, index, (unsigned long)size); + + /* Create a transfer. */ + transfer = grub_malloc (sizeof (*transfer)); + if (! transfer) + { + grub_dma_free (data_chunk); + return GRUB_USB_ERR_INTERNAL; + } + + setupdata_chunk = grub_memalign_dma32 (32, sizeof (*setupdata)); + if (! setupdata_chunk) + { + grub_free (transfer); + grub_dma_free (data_chunk); + return GRUB_USB_ERR_INTERNAL; + } + + setupdata = grub_dma_get_virt (setupdata_chunk); + setupdata_addr = grub_dma_get_phys (setupdata_chunk); + + /* Determine the maximum packet size. */ + if (dev->descdev.maxsize0) + max = dev->descdev.maxsize0; + else + max = 64; + + grub_dprintf ("usb", "control: transfer = %p, dev = %p\n", transfer, dev); + + datablocks = (size + max - 1) / max; + + /* XXX: Discriminate between different types of control + messages. */ + transfer->transcnt = datablocks + 2; + transfer->size = size; /* XXX ? */ + transfer->endpoint = 0; + transfer->devaddr = dev->addr; + transfer->type = GRUB_USB_TRANSACTION_TYPE_CONTROL; + transfer->max = max; + transfer->dev = dev; + + /* Allocate an array of transfer data structures. */ + transfer->transactions = grub_malloc (transfer->transcnt + * sizeof (struct grub_usb_transfer)); + if (! transfer->transactions) + { + grub_free (transfer); + grub_dma_free (setupdata_chunk); + grub_dma_free (data_chunk); + return GRUB_USB_ERR_INTERNAL; + } + + /* Build a Setup packet. XXX: Endianness. */ + setupdata->reqtype = reqtype; + setupdata->request = request; + setupdata->value = value; + setupdata->index = index; + setupdata->length = size; + grub_arch_sync_dma_caches (setupdata, sizeof (*setupdata)); + + transfer->transactions[0].size = sizeof (*setupdata); + transfer->transactions[0].pid = GRUB_USB_TRANSFER_TYPE_SETUP; + transfer->transactions[0].data = setupdata_addr; + transfer->transactions[0].toggle = 0; + + /* Now the data... XXX: Is this the right way to transfer control + transfers? */ + for (i = 0; i < datablocks; i++) + { + grub_usb_transaction_t tr = &transfer->transactions[i + 1]; + + tr->size = (size > max) ? max : size; + /* Use the right most bit as the data toggle. Simple and + effective. */ + tr->toggle = !(i & 1); + if (reqtype & 128) + tr->pid = GRUB_USB_TRANSFER_TYPE_IN; + else + tr->pid = GRUB_USB_TRANSFER_TYPE_OUT; + tr->data = data_addr + i * max; + tr->preceding = i * max; + size -= max; + } + + /* End with an empty OUT transaction. */ + transfer->transactions[datablocks + 1].size = 0; + transfer->transactions[datablocks + 1].data = 0; + if ((reqtype & 128) && datablocks) + transfer->transactions[datablocks + 1].pid = GRUB_USB_TRANSFER_TYPE_OUT; + else + transfer->transactions[datablocks + 1].pid = GRUB_USB_TRANSFER_TYPE_IN; + + transfer->transactions[datablocks + 1].toggle = 1; + + err = grub_usb_execute_and_wait_transfer (dev, transfer, 1000, &actual); + + grub_dprintf ("usb", "control: err=%d\n", err); + + grub_free (transfer->transactions); + + grub_free (transfer); + grub_dma_free (setupdata_chunk); + + grub_arch_sync_dma_caches (data, size0); + grub_memcpy (data_in, (char *) data, size0); + + grub_dma_free (data_chunk); + + return err; +} + +static grub_usb_transfer_t +grub_usb_bulk_setup_readwrite (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint, + grub_size_t size0, char *data_in, + grub_transfer_type_t type) +{ + int i; + grub_usb_transfer_t transfer; + int datablocks; + unsigned int max; + volatile char *data; + grub_uint32_t data_addr; + struct grub_pci_dma_chunk *data_chunk; + grub_size_t size = size0; + int toggle = dev->toggle[endpoint->endp_addr]; + + grub_dprintf ("usb", "bulk: size=0x%02lx type=%d\n", (unsigned long) size, + type); + + /* FIXME: avoid allocation any kind of buffer in a first place. */ + data_chunk = grub_memalign_dma32 (128, size); + if (!data_chunk) + return NULL; + data = grub_dma_get_virt (data_chunk); + data_addr = grub_dma_get_phys (data_chunk); + if (type == GRUB_USB_TRANSFER_TYPE_OUT) + { + grub_memcpy ((char *) data, data_in, size); + grub_arch_sync_dma_caches (data, size); + } + + /* Create a transfer. */ + transfer = grub_malloc (sizeof (struct grub_usb_transfer)); + if (! transfer) + { + grub_dma_free (data_chunk); + return NULL; + } + + max = grub_usb_bulk_maxpacket (dev, endpoint); + + datablocks = ((size + max - 1) / max); + transfer->transcnt = datablocks; + transfer->size = size - 1; + transfer->endpoint = endpoint->endp_addr; + transfer->devaddr = dev->addr; + transfer->type = GRUB_USB_TRANSACTION_TYPE_BULK; + transfer->dir = type; + transfer->max = max; + transfer->dev = dev; + transfer->last_trans = -1; /* Reset index of last processed transaction (TD) */ + transfer->data_chunk = data_chunk; + transfer->data = data_in; + + /* Allocate an array of transfer data structures. */ + transfer->transactions = grub_malloc (transfer->transcnt + * sizeof (struct grub_usb_transfer)); + if (! transfer->transactions) + { + grub_free (transfer); + grub_dma_free (data_chunk); + return NULL; + } + + /* Set up all transfers. */ + for (i = 0; i < datablocks; i++) + { + grub_usb_transaction_t tr = &transfer->transactions[i]; + + tr->size = (size > max) ? max : size; + /* XXX: Use the right most bit as the data toggle. Simple and + effective. */ + tr->toggle = toggle; + toggle = toggle ? 0 : 1; + tr->pid = type; + tr->data = data_addr + i * max; + tr->preceding = i * max; + size -= tr->size; + } + return transfer; +} + +static void +grub_usb_bulk_finish_readwrite (grub_usb_transfer_t transfer) +{ + grub_usb_device_t dev = transfer->dev; + int toggle = dev->toggle[transfer->endpoint]; + + /* We must remember proper toggle value even if some transactions + * were not processed - correct value should be inversion of last + * processed transaction (TD). */ + if (transfer->last_trans >= 0) + toggle = transfer->transactions[transfer->last_trans].toggle ? 0 : 1; + else + toggle = dev->toggle[transfer->endpoint]; /* Nothing done, take original */ + grub_dprintf ("usb", "bulk: toggle=%d\n", toggle); + dev->toggle[transfer->endpoint] = toggle; + + if (transfer->dir == GRUB_USB_TRANSFER_TYPE_IN) + { + grub_arch_sync_dma_caches (grub_dma_get_virt (transfer->data_chunk), + transfer->size + 1); + grub_memcpy (transfer->data, (void *) + grub_dma_get_virt (transfer->data_chunk), + transfer->size + 1); + } + + grub_free (transfer->transactions); + grub_dma_free (transfer->data_chunk); + grub_free (transfer); +} + +static grub_usb_err_t +grub_usb_bulk_readwrite (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint, + grub_size_t size0, char *data_in, + grub_transfer_type_t type, int timeout, + grub_size_t *actual) +{ + grub_usb_err_t err; + grub_usb_transfer_t transfer; + + transfer = grub_usb_bulk_setup_readwrite (dev, endpoint, size0, + data_in, type); + if (!transfer) + return GRUB_USB_ERR_INTERNAL; + err = grub_usb_execute_and_wait_transfer (dev, transfer, timeout, actual); + + grub_usb_bulk_finish_readwrite (transfer); + + return err; +} + +static grub_usb_err_t +grub_usb_bulk_readwrite_packetize (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint, + grub_transfer_type_t type, + grub_size_t size, char *data) +{ + grub_size_t actual, transferred; + grub_usb_err_t err = GRUB_USB_ERR_NONE; + grub_size_t current_size, position; + grub_size_t max_bulk_transfer_len = MAX_USB_TRANSFER_LEN; + grub_size_t max; + + if (dev->controller.dev->max_bulk_tds) + { + max = grub_usb_bulk_maxpacket (dev, endpoint); + + /* Calculate max. possible length of bulk transfer */ + max_bulk_transfer_len = dev->controller.dev->max_bulk_tds * max; + } + + for (position = 0, transferred = 0; + position < size; position += max_bulk_transfer_len) + { + current_size = size - position; + if (current_size >= max_bulk_transfer_len) + current_size = max_bulk_transfer_len; + err = grub_usb_bulk_readwrite (dev, endpoint, current_size, + &data[position], type, 1000, &actual); + transferred += actual; + if (err || (current_size != actual)) break; + } + + if (!err && transferred != size) + err = GRUB_USB_ERR_DATA; + return err; +} + +grub_usb_err_t +grub_usb_bulk_write (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint, + grub_size_t size, char *data) +{ + return grub_usb_bulk_readwrite_packetize (dev, endpoint, + GRUB_USB_TRANSFER_TYPE_OUT, + size, data); +} + +grub_usb_err_t +grub_usb_bulk_read (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint, + grub_size_t size, char *data) +{ + return grub_usb_bulk_readwrite_packetize (dev, endpoint, + GRUB_USB_TRANSFER_TYPE_IN, + size, data); +} + +grub_usb_err_t +grub_usb_check_transfer (grub_usb_transfer_t transfer, grub_size_t *actual) +{ + grub_usb_err_t err; + grub_usb_device_t dev = transfer->dev; + + err = dev->controller.dev->check_transfer (&dev->controller, transfer, + actual); + if (err == GRUB_USB_ERR_WAIT) + return err; + + grub_usb_bulk_finish_readwrite (transfer); + + return err; +} + +grub_usb_transfer_t +grub_usb_bulk_read_background (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint, + grub_size_t size, void *data) +{ + grub_usb_err_t err; + grub_usb_transfer_t transfer; + + transfer = grub_usb_bulk_setup_readwrite (dev, endpoint, size, + data, GRUB_USB_TRANSFER_TYPE_IN); + if (!transfer) + return NULL; + + err = dev->controller.dev->setup_transfer (&dev->controller, transfer); + if (err) + return NULL; + + return transfer; +} + +void +grub_usb_cancel_transfer (grub_usb_transfer_t transfer) +{ + grub_usb_device_t dev = transfer->dev; + dev->controller.dev->cancel_transfer (&dev->controller, transfer); + grub_errno = GRUB_ERR_NONE; +} + +grub_usb_err_t +grub_usb_bulk_read_extended (grub_usb_device_t dev, + struct grub_usb_desc_endp *endpoint, + grub_size_t size, char *data, + int timeout, grub_size_t *actual) +{ + return grub_usb_bulk_readwrite (dev, endpoint, size, data, + GRUB_USB_TRANSFER_TYPE_IN, timeout, actual); +} diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c new file mode 100644 index 000000000..9f02f2201 --- /dev/null +++ b/grub-core/commands/acpi.c @@ -0,0 +1,790 @@ +/* acpi.c - modify acpi tables. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GRUB_MACHINE_EFI +#include +#include +#endif + +#pragma GCC diagnostic ignored "-Wcast-align" + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = { + {"exclude", 'x', 0, + N_("Don't load host tables specified by comma-separated list."), + 0, ARG_TYPE_STRING}, + {"load-only", 'n', 0, + N_("Load only tables specified by comma-separated list."), 0, ARG_TYPE_STRING}, + {"v1", '1', 0, N_("Export version 1 tables to the OS."), 0, ARG_TYPE_NONE}, + {"v2", '2', 0, N_("Export version 2 and version 3 tables to the OS."), 0, ARG_TYPE_NONE}, + {"oemid", 'o', 0, N_("Set OEMID of RSDP, XSDT and RSDT."), 0, ARG_TYPE_STRING}, + {"oemtable", 't', 0, + N_("Set OEMTABLE ID of RSDP, XSDT and RSDT."), 0, ARG_TYPE_STRING}, + {"oemtablerev", 'r', 0, + N_("Set OEMTABLE revision of RSDP, XSDT and RSDT."), 0, ARG_TYPE_INT}, + {"oemtablecreator", 'c', 0, + N_("Set creator field of RSDP, XSDT and RSDT."), 0, ARG_TYPE_STRING}, + {"oemtablecreatorrev", 'd', 0, + N_("Set creator revision of RSDP, XSDT and RSDT."), 0, ARG_TYPE_INT}, + /* TRANSLATORS: "hangs" here is a noun, not a verb. */ + {"no-ebda", 'e', 0, N_("Don't update EBDA. May fix failures or hangs on some " + "BIOSes but makes it ineffective with OS not receiving RSDP from GRUB."), + 0, ARG_TYPE_NONE}, + {0, 0, 0, 0, 0, 0} +}; + +/* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise. + rev2 contains the revision of ACPIv2+ to generate or 0 if none. */ +static int rev1, rev2; +/* OEMID of RSDP, RSDT and XSDT. */ +static char root_oemid[6]; +/* OEMTABLE of the same tables. */ +static char root_oemtable[8]; +/* OEMREVISION of the same tables. */ +static grub_uint32_t root_oemrev; +/* CreatorID of the same tables. */ +static char root_creator_id[4]; +/* CreatorRevision of the same tables. */ +static grub_uint32_t root_creator_rev; +static struct grub_acpi_rsdp_v10 *rsdpv1_new = 0; +static struct grub_acpi_rsdp_v20 *rsdpv2_new = 0; +static char *playground = 0, *playground_ptr = 0; +static int playground_size = 0; + +/* Linked list of ACPI tables. */ +struct efiemu_acpi_table +{ + void *addr; + grub_size_t size; + struct efiemu_acpi_table *next; +}; +static struct efiemu_acpi_table *acpi_tables = 0; + +/* DSDT isn't in RSDT. So treat it specially. */ +static void *table_dsdt = 0; +/* Pointer to recreated RSDT. */ +static void *rsdt_addr = 0; + +/* Allocation handles for different tables. */ +static grub_size_t dsdt_size = 0; + +/* Address of original FACS. */ +static grub_uint32_t facs_addr = 0; + +struct grub_acpi_rsdp_v20 * +grub_acpi_get_rsdpv2 (void) +{ + if (rsdpv2_new) + return rsdpv2_new; + if (rsdpv1_new) + return 0; + return grub_machine_acpi_get_rsdpv2 (); +} + +struct grub_acpi_rsdp_v10 * +grub_acpi_get_rsdpv1 (void) +{ + if (rsdpv1_new) + return rsdpv1_new; + if (rsdpv2_new) + return 0; + return grub_machine_acpi_get_rsdpv1 (); +} + +#if defined (__i386__) || defined (__x86_64__) + +static inline int +iszero (grub_uint8_t *reg, int size) +{ + int i; + for (i = 0; i < size; i++) + if (reg[i]) + return 0; + return 1; +} + +/* Context for grub_acpi_create_ebda. */ +struct grub_acpi_create_ebda_ctx { + int ebda_len; + grub_uint64_t highestlow; +}; + +/* Helper for grub_acpi_create_ebda. */ +static int +find_hook (grub_uint64_t start, grub_uint64_t size, grub_memory_type_t type, + void *data) +{ + struct grub_acpi_create_ebda_ctx *ctx = data; + grub_uint64_t end = start + size; + if (type != GRUB_MEMORY_AVAILABLE) + return 0; + if (end > 0x100000) + end = 0x100000; + if (end > start + ctx->ebda_len + && ctx->highestlow < ((end - ctx->ebda_len) & (~0xf)) ) + ctx->highestlow = (end - ctx->ebda_len) & (~0xf); + return 0; +} + +grub_err_t +grub_acpi_create_ebda (void) +{ + struct grub_acpi_create_ebda_ctx ctx = { + .highestlow = 0 + }; + int ebda_kb_len = 0; + int mmapregion = 0; + grub_uint8_t *ebda, *v1inebda = 0, *v2inebda = 0; + grub_uint8_t *targetebda, *target; + struct grub_acpi_rsdp_v10 *v1; + struct grub_acpi_rsdp_v20 *v2; + + ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4); + grub_dprintf ("acpi", "EBDA @%p\n", ebda); + if (ebda) + ebda_kb_len = *(grub_uint16_t *) ebda; + grub_dprintf ("acpi", "EBDA length 0x%x\n", ebda_kb_len); + if (ebda_kb_len > 16) + ebda_kb_len = 0; + ctx.ebda_len = (ebda_kb_len + 1) << 10; + + /* FIXME: use low-memory mm allocation once it's available. */ + grub_mmap_iterate (find_hook, &ctx); + targetebda = (grub_uint8_t *) (grub_addr_t) ctx.highestlow; + grub_dprintf ("acpi", "creating ebda @%llx\n", + (unsigned long long) ctx.highestlow); + if (! ctx.highestlow) + return grub_error (GRUB_ERR_OUT_OF_MEMORY, + "couldn't find space for the new EBDA"); + + mmapregion = grub_mmap_register ((grub_addr_t) targetebda, ctx.ebda_len, + GRUB_MEMORY_RESERVED); + if (! mmapregion) + return grub_errno; + + /* XXX: EBDA is unstandardized, so this implementation is heuristical. */ + if (ebda_kb_len) + grub_memcpy (targetebda, ebda, 0x400); + else + grub_memset (targetebda, 0, 0x400); + *((grub_uint16_t *) targetebda) = ebda_kb_len + 1; + target = targetebda; + + v1 = grub_acpi_get_rsdpv1 (); + v2 = grub_acpi_get_rsdpv2 (); + if (v2 && v2->length > 40) + v2 = 0; + + /* First try to replace already existing rsdp. */ + if (v2) + { + grub_dprintf ("acpi", "Scanning EBDA for old rsdpv2\n"); + for (; target < targetebda + 0x400 - v2->length; target += 0x10) + if (grub_memcmp (target, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0 + && grub_byte_checksum (target, + sizeof (struct grub_acpi_rsdp_v10)) == 0 + && ((struct grub_acpi_rsdp_v10 *) target)->revision != 0 + && ((struct grub_acpi_rsdp_v20 *) target)->length <= v2->length) + { + grub_memcpy (target, v2, v2->length); + grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target); + v2inebda = target; + target += v2->length; + target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16); + v2 = 0; + break; + } + } + + if (v1) + { + grub_dprintf ("acpi", "Scanning EBDA for old rsdpv1\n"); + for (; target < targetebda + 0x400 - sizeof (struct grub_acpi_rsdp_v10); + target += 0x10) + if (grub_memcmp (target, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0 + && grub_byte_checksum (target, + sizeof (struct grub_acpi_rsdp_v10)) == 0) + { + grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10)); + grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target); + v1inebda = target; + target += sizeof (struct grub_acpi_rsdp_v10); + target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16); + v1 = 0; + break; + } + } + + target = targetebda + 0x100; + + /* Try contiguous zeros. */ + if (v2) + { + grub_dprintf ("acpi", "Scanning EBDA for block of zeros\n"); + for (; target < targetebda + 0x400 - v2->length; target += 0x10) + if (iszero (target, v2->length)) + { + grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target); + grub_memcpy (target, v2, v2->length); + v2inebda = target; + target += v2->length; + target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16); + v2 = 0; + break; + } + } + + if (v1) + { + grub_dprintf ("acpi", "Scanning EBDA for block of zeros\n"); + for (; target < targetebda + 0x400 - sizeof (struct grub_acpi_rsdp_v10); + target += 0x10) + if (iszero (target, sizeof (struct grub_acpi_rsdp_v10))) + { + grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target); + grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10)); + v1inebda = target; + target += sizeof (struct grub_acpi_rsdp_v10); + target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16); + v1 = 0; + break; + } + } + + if (v1 || v2) + { + grub_mmap_unregister (mmapregion); + return grub_error (GRUB_ERR_OUT_OF_MEMORY, + "couldn't find suitable spot in EBDA"); + } + + /* Remove any other RSDT. */ + for (target = targetebda; + target < targetebda + 0x400 - sizeof (struct grub_acpi_rsdp_v10); + target += 0x10) + if (grub_memcmp (target, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0 + && grub_byte_checksum (target, + sizeof (struct grub_acpi_rsdp_v10)) == 0 + && target != v1inebda && target != v2inebda) + *target = 0; + + grub_dprintf ("acpi", "Switching EBDA\n"); + (*((grub_uint16_t *) 0x40e)) = ((grub_addr_t) targetebda) >> 4; + grub_dprintf ("acpi", "EBDA switched\n"); + + return GRUB_ERR_NONE; +} +#endif + +/* Create tables common to ACPIv1 and ACPIv2+ */ +static void +setup_common_tables (void) +{ + struct efiemu_acpi_table *cur; + struct grub_acpi_table_header *rsdt; + grub_uint32_t *rsdt_entry; + int numoftables; + + /* Treat DSDT. */ + grub_memcpy (playground_ptr, table_dsdt, dsdt_size); + grub_free (table_dsdt); + table_dsdt = playground_ptr; + playground_ptr += dsdt_size; + + /* Treat other tables. */ + for (cur = acpi_tables; cur; cur = cur->next) + { + struct grub_acpi_fadt *fadt; + + grub_memcpy (playground_ptr, cur->addr, cur->size); + grub_free (cur->addr); + cur->addr = playground_ptr; + playground_ptr += cur->size; + + /* If it's FADT correct DSDT and FACS addresses. */ + fadt = (struct grub_acpi_fadt *) cur->addr; + if (grub_memcmp (fadt->hdr.signature, GRUB_ACPI_FADT_SIGNATURE, + sizeof (fadt->hdr.signature)) == 0) + { + fadt->dsdt_addr = (grub_addr_t) table_dsdt; + fadt->facs_addr = facs_addr; + + /* Does a revision 2 exist at all? */ + if (fadt->hdr.revision >= 3) + { + fadt->dsdt_xaddr = (grub_addr_t) table_dsdt; + fadt->facs_xaddr = facs_addr; + } + + /* Recompute checksum. */ + fadt->hdr.checksum = 0; + fadt->hdr.checksum = 1 + ~grub_byte_checksum (fadt, fadt->hdr.length); + } + } + + /* Fill RSDT entries. */ + numoftables = 0; + for (cur = acpi_tables; cur; cur = cur->next) + numoftables++; + + rsdt_addr = rsdt = (struct grub_acpi_table_header *) playground_ptr; + playground_ptr += sizeof (struct grub_acpi_table_header) + sizeof (grub_uint32_t) * numoftables; + + rsdt_entry = (grub_uint32_t *) (rsdt + 1); + + /* Fill RSDT header. */ + grub_memcpy (&(rsdt->signature), "RSDT", 4); + rsdt->length = sizeof (struct grub_acpi_table_header) + sizeof (grub_uint32_t) * numoftables; + rsdt->revision = 1; + grub_memcpy (&(rsdt->oemid), root_oemid, sizeof (rsdt->oemid)); + grub_memcpy (&(rsdt->oemtable), root_oemtable, sizeof (rsdt->oemtable)); + rsdt->oemrev = root_oemrev; + grub_memcpy (&(rsdt->creator_id), root_creator_id, sizeof (rsdt->creator_id)); + rsdt->creator_rev = root_creator_rev; + + for (cur = acpi_tables; cur; cur = cur->next) + *(rsdt_entry++) = (grub_addr_t) cur->addr; + + /* Recompute checksum. */ + rsdt->checksum = 0; + rsdt->checksum = 1 + ~grub_byte_checksum (rsdt, rsdt->length); +} + +/* Regenerate ACPIv1 RSDP */ +static void +setv1table (void) +{ + /* Create RSDP. */ + rsdpv1_new = (struct grub_acpi_rsdp_v10 *) playground_ptr; + playground_ptr += sizeof (struct grub_acpi_rsdp_v10); + grub_memcpy (&(rsdpv1_new->signature), GRUB_RSDP_SIGNATURE, + sizeof (rsdpv1_new->signature)); + grub_memcpy (&(rsdpv1_new->oemid), root_oemid, sizeof (rsdpv1_new->oemid)); + rsdpv1_new->revision = 0; + rsdpv1_new->rsdt_addr = (grub_addr_t) rsdt_addr; + rsdpv1_new->checksum = 0; + rsdpv1_new->checksum = 1 + ~grub_byte_checksum (rsdpv1_new, + sizeof (*rsdpv1_new)); + grub_dprintf ("acpi", "Generated ACPIv1 tables\n"); +} + +static void +setv2table (void) +{ + struct grub_acpi_table_header *xsdt; + struct efiemu_acpi_table *cur; + grub_uint64_t *xsdt_entry; + int numoftables; + + numoftables = 0; + for (cur = acpi_tables; cur; cur = cur->next) + numoftables++; + + /* Create XSDT. */ + xsdt = (struct grub_acpi_table_header *) playground_ptr; + playground_ptr += sizeof (struct grub_acpi_table_header) + sizeof (grub_uint64_t) * numoftables; + + xsdt_entry = (grub_uint64_t *)(xsdt + 1); + for (cur = acpi_tables; cur; cur = cur->next) + *(xsdt_entry++) = (grub_addr_t) cur->addr; + grub_memcpy (&(xsdt->signature), "XSDT", 4); + xsdt->length = sizeof (struct grub_acpi_table_header) + sizeof (grub_uint64_t) * numoftables; + xsdt->revision = 1; + grub_memcpy (&(xsdt->oemid), root_oemid, sizeof (xsdt->oemid)); + grub_memcpy (&(xsdt->oemtable), root_oemtable, sizeof (xsdt->oemtable)); + xsdt->oemrev = root_oemrev; + grub_memcpy (&(xsdt->creator_id), root_creator_id, sizeof (xsdt->creator_id)); + xsdt->creator_rev = root_creator_rev; + xsdt->checksum = 0; + xsdt->checksum = 1 + ~grub_byte_checksum (xsdt, xsdt->length); + + /* Create RSDPv2. */ + rsdpv2_new = (struct grub_acpi_rsdp_v20 *) playground_ptr; + playground_ptr += sizeof (struct grub_acpi_rsdp_v20); + grub_memcpy (&(rsdpv2_new->rsdpv1.signature), GRUB_RSDP_SIGNATURE, + sizeof (rsdpv2_new->rsdpv1.signature)); + grub_memcpy (&(rsdpv2_new->rsdpv1.oemid), root_oemid, + sizeof (rsdpv2_new->rsdpv1.oemid)); + rsdpv2_new->rsdpv1.revision = rev2; + rsdpv2_new->rsdpv1.rsdt_addr = (grub_addr_t) rsdt_addr; + rsdpv2_new->rsdpv1.checksum = 0; + rsdpv2_new->rsdpv1.checksum = 1 + ~grub_byte_checksum + (&(rsdpv2_new->rsdpv1), sizeof (rsdpv2_new->rsdpv1)); + rsdpv2_new->length = sizeof (*rsdpv2_new); + rsdpv2_new->xsdt_addr = (grub_addr_t) xsdt; + rsdpv2_new->checksum = 0; + rsdpv2_new->checksum = 1 + ~grub_byte_checksum (rsdpv2_new, + rsdpv2_new->length); + grub_dprintf ("acpi", "Generated ACPIv2 tables\n"); +} + +static void +free_tables (void) +{ + struct efiemu_acpi_table *cur, *t; + if (table_dsdt) + grub_free (table_dsdt); + for (cur = acpi_tables; cur;) + { + t = cur; + grub_free (cur->addr); + cur = cur->next; + grub_free (t); + } + acpi_tables = 0; + table_dsdt = 0; +} + +static grub_err_t +grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + struct grub_acpi_rsdp_v10 *rsdp; + struct efiemu_acpi_table *cur, *t; + int i, mmapregion; + int numoftables; + + /* Default values if no RSDP is found. */ + rev1 = 1; + rev2 = 3; + + facs_addr = 0; + playground = playground_ptr = 0; + playground_size = 0; + + rsdp = (struct grub_acpi_rsdp_v10 *) grub_machine_acpi_get_rsdpv2 (); + + if (! rsdp) + rsdp = grub_machine_acpi_get_rsdpv1 (); + + grub_dprintf ("acpi", "RSDP @%p\n", rsdp); + + if (rsdp) + { + grub_uint32_t *entry_ptr; + char *exclude = 0; + char *load_only = 0; + char *ptr; + /* RSDT consists of header and an array of 32-bit pointers. */ + struct grub_acpi_table_header *rsdt; + + exclude = state[0].set ? grub_strdup (state[0].arg) : 0; + if (exclude) + { + for (ptr = exclude; *ptr; ptr++) + *ptr = grub_tolower (*ptr); + } + + load_only = state[1].set ? grub_strdup (state[1].arg) : 0; + if (load_only) + { + for (ptr = load_only; *ptr; ptr++) + *ptr = grub_tolower (*ptr); + } + + /* Set revision variables to replicate the same version as host. */ + rev1 = ! rsdp->revision; + rev2 = rsdp->revision; + rsdt = (struct grub_acpi_table_header *) (grub_addr_t) rsdp->rsdt_addr; + /* Load host tables. */ + for (entry_ptr = (grub_uint32_t *) (rsdt + 1); + entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt) + + rsdt->length); + entry_ptr++) + { + char signature[5]; + struct efiemu_acpi_table *table; + struct grub_acpi_table_header *curtable + = (struct grub_acpi_table_header *) (grub_addr_t) *entry_ptr; + signature[4] = 0; + for (i = 0; i < 4;i++) + signature[i] = grub_tolower (curtable->signature[i]); + + /* If it's FADT it contains addresses of DSDT and FACS. */ + if (grub_strcmp (signature, "facp") == 0) + { + struct grub_acpi_table_header *dsdt; + struct grub_acpi_fadt *fadt = (struct grub_acpi_fadt *) curtable; + + /* Set root header variables to the same values + as FADT by default. */ + grub_memcpy (&root_oemid, &(fadt->hdr.oemid), + sizeof (root_oemid)); + grub_memcpy (&root_oemtable, &(fadt->hdr.oemtable), + sizeof (root_oemtable)); + root_oemrev = fadt->hdr.oemrev; + grub_memcpy (&root_creator_id, &(fadt->hdr.creator_id), + sizeof (root_creator_id)); + root_creator_rev = fadt->hdr.creator_rev; + + /* Load DSDT if not excluded. */ + dsdt = (struct grub_acpi_table_header *) + (grub_addr_t) fadt->dsdt_addr; + if (dsdt && (! exclude || ! grub_strword (exclude, "dsdt")) + && (! load_only || grub_strword (load_only, "dsdt")) + && dsdt->length >= sizeof (*dsdt)) + { + dsdt_size = dsdt->length; + table_dsdt = grub_malloc (dsdt->length); + if (! table_dsdt) + { + free_tables (); + grub_free (exclude); + grub_free (load_only); + return grub_errno; + } + grub_memcpy (table_dsdt, dsdt, dsdt->length); + } + + /* Save FACS address. FACS shouldn't be overridden. */ + facs_addr = fadt->facs_addr; + } + + /* Skip excluded tables. */ + if (exclude && grub_strword (exclude, signature)) + continue; + if (load_only && ! grub_strword (load_only, signature)) + continue; + + /* Sanity check. */ + if (curtable->length < sizeof (*curtable)) + continue; + + table = (struct efiemu_acpi_table *) grub_malloc + (sizeof (struct efiemu_acpi_table)); + if (! table) + { + free_tables (); + grub_free (exclude); + grub_free (load_only); + return grub_errno; + } + table->size = curtable->length; + table->addr = grub_malloc (table->size); + playground_size += table->size; + if (! table->addr) + { + free_tables (); + grub_free (exclude); + grub_free (load_only); + grub_free (table); + return grub_errno; + } + table->next = acpi_tables; + acpi_tables = table; + grub_memcpy (table->addr, curtable, table->size); + } + grub_free (exclude); + grub_free (load_only); + } + + /* Does user specify versions to generate? */ + if (state[2].set || state[3].set) + { + rev1 = state[2].set; + if (state[3].set) + rev2 = rev2 ? : 2; + else + rev2 = 0; + } + + /* Does user override root header information? */ + if (state[4].set) + grub_strncpy (root_oemid, state[4].arg, sizeof (root_oemid)); + if (state[5].set) + grub_strncpy (root_oemtable, state[5].arg, sizeof (root_oemtable)); + if (state[6].set) + root_oemrev = grub_strtoul (state[6].arg, 0, 0); + if (state[7].set) + grub_strncpy (root_creator_id, state[7].arg, sizeof (root_creator_id)); + if (state[8].set) + root_creator_rev = grub_strtoul (state[8].arg, 0, 0); + + /* Load user tables */ + for (i = 0; i < argc; i++) + { + grub_file_t file; + grub_size_t size; + char *buf; + + file = grub_file_open (args[i]); + if (! file) + { + free_tables (); + return grub_errno; + } + + size = grub_file_size (file); + if (size < sizeof (struct grub_acpi_table_header)) + { + grub_file_close (file); + free_tables (); + return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), + args[i]); + } + + buf = (char *) grub_malloc (size); + if (! buf) + { + grub_file_close (file); + free_tables (); + return grub_errno; + } + + if (grub_file_read (file, buf, size) != (int) size) + { + grub_file_close (file); + free_tables (); + if (!grub_errno) + grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), + args[i]); + return grub_errno; + } + grub_file_close (file); + + if (grub_memcmp (((struct grub_acpi_table_header *) buf)->signature, + "DSDT", 4) == 0) + { + grub_free (table_dsdt); + table_dsdt = buf; + dsdt_size = size; + } + else + { + struct efiemu_acpi_table *table; + table = (struct efiemu_acpi_table *) grub_malloc + (sizeof (struct efiemu_acpi_table)); + if (! table) + { + free_tables (); + return grub_errno; + } + + table->size = size; + table->addr = buf; + playground_size += table->size; + + table->next = acpi_tables; + acpi_tables = table; + } + } + + numoftables = 0; + for (cur = acpi_tables; cur; cur = cur->next) + numoftables++; + + /* DSDT. */ + playground_size += dsdt_size; + /* RSDT. */ + playground_size += sizeof (struct grub_acpi_table_header) + sizeof (grub_uint32_t) * numoftables; + /* RSDPv1. */ + playground_size += sizeof (struct grub_acpi_rsdp_v10); + /* XSDT. */ + playground_size += sizeof (struct grub_acpi_table_header) + sizeof (grub_uint64_t) * numoftables; + /* RSDPv2. */ + playground_size += sizeof (struct grub_acpi_rsdp_v20); + + playground = playground_ptr + = grub_mmap_malign_and_register (1, playground_size, &mmapregion, + GRUB_MEMORY_ACPI, 0); + + if (! playground) + { + free_tables (); + return grub_error (GRUB_ERR_OUT_OF_MEMORY, + "couldn't allocate space for ACPI tables"); + } + + setup_common_tables (); + + /* Request space for RSDPv1. */ + if (rev1) + setv1table (); + + /* Request space for RSDPv2+ and XSDT. */ + if (rev2) + setv2table (); + + for (cur = acpi_tables; cur;) + { + t = cur; + cur = cur->next; + grub_free (t); + } + acpi_tables = 0; + +#if defined (__i386__) || defined (__x86_64__) + if (! state[9].set) + { + grub_err_t err; + err = grub_acpi_create_ebda (); + if (err) + { + rsdpv1_new = 0; + rsdpv2_new = 0; + grub_mmap_free_and_unregister (mmapregion); + return err; + } + } +#endif + +#ifdef GRUB_MACHINE_EFI + { + struct grub_efi_guid acpi = GRUB_EFI_ACPI_TABLE_GUID; + struct grub_efi_guid acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID; + + efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table, + &acpi20, grub_acpi_get_rsdpv2 ()); + efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table, + &acpi, grub_acpi_get_rsdpv1 ()); + } +#endif + + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(acpi) +{ + cmd = grub_register_extcmd ("acpi", grub_cmd_acpi, 0, + N_("[-1|-2] [--exclude=TABLE1,TABLE2|" + "--load-only=TABLE1,TABLE2] FILE1" + " [FILE2] [...]"), + N_("Load host ACPI tables and tables " + "specified by arguments."), + options); +} + +GRUB_MOD_FINI(acpi) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/acpihalt.c b/grub-core/commands/acpihalt.c new file mode 100644 index 000000000..9cc7f18e3 --- /dev/null +++ b/grub-core/commands/acpihalt.c @@ -0,0 +1,454 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#ifdef GRUB_DSDT_TEST +#include +#include +#include +#include +#include +#include + +#define grub_dprintf(cond, args...) printf ( args ) +#define grub_printf printf +#define grub_util_fopen fopen +#define grub_memcmp memcmp +typedef uint64_t grub_uint64_t; +typedef uint32_t grub_uint32_t; +typedef uint16_t grub_uint16_t; +typedef uint8_t grub_uint8_t; + +#endif + +#include +#ifndef GRUB_DSDT_TEST +#include +#else +#define _(x) x +#define N_(x) x +#endif + +#ifndef GRUB_DSDT_TEST +#include +#include +#include +#include +#endif + +static inline grub_uint32_t +decode_length (const grub_uint8_t *ptr, int *numlen) +{ + int num_bytes, i; + grub_uint32_t ret; + if (*ptr < 64) + { + if (numlen) + *numlen = 1; + return *ptr; + } + num_bytes = *ptr >> 6; + if (numlen) + *numlen = num_bytes + 1; + ret = *ptr & 0xf; + ptr++; + for (i = 0; i < num_bytes; i++) + { + ret |= *ptr << (8 * i + 4); + ptr++; + } + return ret; +} + +static inline grub_uint32_t +skip_name_string (const grub_uint8_t *ptr, const grub_uint8_t *end) +{ + const grub_uint8_t *ptr0 = ptr; + + while (ptr < end && (*ptr == '^' || *ptr == '\\')) + ptr++; + switch (*ptr) + { + case '.': + ptr++; + ptr += 8; + break; + case '/': + ptr++; + ptr += 1 + (*ptr) * 4; + break; + case 0: + ptr++; + break; + default: + ptr += 4; + break; + } + return ptr - ptr0; +} + +static inline grub_uint32_t +skip_data_ref_object (const grub_uint8_t *ptr, const grub_uint8_t *end) +{ + grub_dprintf ("acpi", "data type = 0x%x\n", *ptr); + switch (*ptr) + { + case GRUB_ACPI_OPCODE_PACKAGE: + case GRUB_ACPI_OPCODE_BUFFER: + return 1 + decode_length (ptr + 1, 0); + case GRUB_ACPI_OPCODE_ZERO: + case GRUB_ACPI_OPCODE_ONES: + case GRUB_ACPI_OPCODE_ONE: + return 1; + case GRUB_ACPI_OPCODE_BYTE_CONST: + return 2; + case GRUB_ACPI_OPCODE_WORD_CONST: + return 3; + case GRUB_ACPI_OPCODE_DWORD_CONST: + return 5; + case GRUB_ACPI_OPCODE_STRING_CONST: + { + const grub_uint8_t *ptr0 = ptr; + for (ptr++; ptr < end && *ptr; ptr++); + if (ptr == end) + return 0; + return ptr - ptr0 + 1; + } + default: + if (*ptr == '^' || *ptr == '\\' || *ptr == '_' + || (*ptr >= 'A' && *ptr <= 'Z')) + return skip_name_string (ptr, end); + grub_printf ("Unknown opcode 0x%x\n", *ptr); + return 0; + } +} + +static inline grub_uint32_t +skip_term (const grub_uint8_t *ptr, const grub_uint8_t *end) +{ + grub_uint32_t add; + const grub_uint8_t *ptr0 = ptr; + + switch(*ptr) + { + case GRUB_ACPI_OPCODE_ADD: + case GRUB_ACPI_OPCODE_AND: + case GRUB_ACPI_OPCODE_CONCAT: + case GRUB_ACPI_OPCODE_CONCATRES: + case GRUB_ACPI_OPCODE_DIVIDE: + case GRUB_ACPI_OPCODE_INDEX: + case GRUB_ACPI_OPCODE_LSHIFT: + case GRUB_ACPI_OPCODE_MOD: + case GRUB_ACPI_OPCODE_MULTIPLY: + case GRUB_ACPI_OPCODE_NAND: + case GRUB_ACPI_OPCODE_NOR: + case GRUB_ACPI_OPCODE_OR: + case GRUB_ACPI_OPCODE_RSHIFT: + case GRUB_ACPI_OPCODE_SUBTRACT: + case GRUB_ACPI_OPCODE_TOSTRING: + case GRUB_ACPI_OPCODE_XOR: + /* + * Parameters for these opcodes: TermArg, TermArg Target, see ACPI + * spec r5.0, page 828f. + */ + ptr++; + ptr += add = skip_term (ptr, end); + if (!add) + return 0; + ptr += add = skip_term (ptr, end); + if (!add) + return 0; + ptr += skip_name_string (ptr, end); + break; + default: + return skip_data_ref_object (ptr, end); + } + return ptr - ptr0; +} + +static inline grub_uint32_t +skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end) +{ + const grub_uint8_t *ptr0 = ptr; + int add; + grub_dprintf ("acpi", "Extended opcode: 0x%x\n", *ptr); + switch (*ptr) + { + case GRUB_ACPI_EXTOPCODE_MUTEX: + ptr++; + ptr += skip_name_string (ptr, end); + ptr++; + break; + case GRUB_ACPI_EXTOPCODE_EVENT_OP: + ptr++; + ptr += skip_name_string (ptr, end); + break; + case GRUB_ACPI_EXTOPCODE_OPERATION_REGION: + ptr++; + ptr += skip_name_string (ptr, end); + ptr++; + ptr += add = skip_term (ptr, end); + if (!add) + return 0; + ptr += add = skip_term (ptr, end); + if (!add) + return 0; + break; + case GRUB_ACPI_EXTOPCODE_FIELD_OP: + case GRUB_ACPI_EXTOPCODE_DEVICE_OP: + case GRUB_ACPI_EXTOPCODE_PROCESSOR_OP: + case GRUB_ACPI_EXTOPCODE_POWER_RES_OP: + case GRUB_ACPI_EXTOPCODE_THERMAL_ZONE_OP: + case GRUB_ACPI_EXTOPCODE_INDEX_FIELD_OP: + case GRUB_ACPI_EXTOPCODE_BANK_FIELD_OP: + ptr++; + ptr += decode_length (ptr, 0); + break; + default: + grub_printf ("Unexpected extended opcode: 0x%x\n", *ptr); + return 0; + } + return ptr - ptr0; +} + + +static int +get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end, + grub_uint8_t *scope, int scope_len) +{ + grub_uint8_t *prev = table; + + if (!ptr) + ptr = table + sizeof (struct grub_acpi_table_header); + while (ptr < end && prev < ptr) + { + int add; + prev = ptr; + grub_dprintf ("acpi", "Opcode 0x%x\n", *ptr); + grub_dprintf ("acpi", "Tell %x\n", (unsigned) (ptr - table)); + switch (*ptr) + { + case GRUB_ACPI_OPCODE_EXTOP: + ptr++; + ptr += add = skip_ext_op (ptr, end); + if (!add) + return -1; + break; + case GRUB_ACPI_OPCODE_CREATE_DWORD_FIELD: + case GRUB_ACPI_OPCODE_CREATE_WORD_FIELD: + case GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD: + { + ptr += 5; + ptr += add = skip_data_ref_object (ptr, end); + if (!add) + return -1; + ptr += 4; + break; + } + case GRUB_ACPI_OPCODE_NAME: + ptr++; + if ((!scope || grub_memcmp (scope, "\\", scope_len) == 0) && + (grub_memcmp (ptr, "_S5_", 4) == 0 || grub_memcmp (ptr, "\\_S5_", 4) == 0)) + { + int ll; + grub_uint8_t *ptr2 = ptr; + grub_dprintf ("acpi", "S5 found\n"); + ptr2 += skip_name_string (ptr, end); + if (*ptr2 != 0x12) + { + grub_printf ("Unknown opcode in _S5: 0x%x\n", *ptr2); + return -1; + } + ptr2++; + decode_length (ptr2, &ll); + ptr2 += ll; + ptr2++; + switch (*ptr2) + { + case GRUB_ACPI_OPCODE_ZERO: + return 0; + case GRUB_ACPI_OPCODE_ONE: + return 1; + case GRUB_ACPI_OPCODE_BYTE_CONST: + return ptr2[1]; + default: + grub_printf ("Unknown data type in _S5: 0x%x\n", *ptr2); + return -1; + } + } + ptr += add = skip_name_string (ptr, end); + if (!add) + return -1; + ptr += add = skip_data_ref_object (ptr, end); + if (!add) + return -1; + break; + case GRUB_ACPI_OPCODE_ALIAS: + ptr++; + /* We need to skip two name strings */ + ptr += add = skip_name_string (ptr, end); + if (!add) + return -1; + ptr += add = skip_name_string (ptr, end); + if (!add) + return -1; + break; + + case GRUB_ACPI_OPCODE_SCOPE: + { + int scope_sleep_type; + int ll; + grub_uint8_t *name; + int name_len; + + ptr++; + add = decode_length (ptr, &ll); + name = ptr + ll; + name_len = skip_name_string (name, ptr + add); + if (!name_len) + return -1; + scope_sleep_type = get_sleep_type (table, name + name_len, + ptr + add, name, name_len); + if (scope_sleep_type != -2) + return scope_sleep_type; + ptr += add; + break; + } + case GRUB_ACPI_OPCODE_IF: + case GRUB_ACPI_OPCODE_METHOD: + { + ptr++; + ptr += decode_length (ptr, 0); + break; + } + default: + grub_printf ("Unknown opcode 0x%x\n", *ptr); + return -1; + } + } + + return -2; +} + +#ifdef GRUB_DSDT_TEST +int +main (int argc, char **argv) +{ + FILE *f; + size_t len; + unsigned char *buf; + if (argc < 2) + printf ("Usage: %s FILE\n", argv[0]); + f = grub_util_fopen (argv[1], "rb"); + if (!f) + { + printf ("Couldn't open file\n"); + return 1; + } + fseek (f, 0, SEEK_END); + len = ftell (f); + fseek (f, 0, SEEK_SET); + buf = malloc (len); + if (!buf) + { + printf (_("error: %s.\n"), _("out of memory")); + fclose (f); + return 2; + } + if (fread (buf, 1, len, f) != len) + { + printf (_("cannot read `%s': %s"), argv[1], strerror (errno)); + free (buf); + fclose (f); + return 2; + } + + printf ("Sleep type = %d\n", get_sleep_type (buf, NULL, buf + len, NULL, 0)); + free (buf); + fclose (f); + return 0; +} + +#else + +void +grub_acpi_halt (void) +{ + struct grub_acpi_rsdp_v20 *rsdp2; + struct grub_acpi_rsdp_v10 *rsdp1; + struct grub_acpi_table_header *rsdt; + grub_uint32_t *entry_ptr; + grub_uint32_t port = 0; + int sleep_type = -1; + + rsdp2 = grub_acpi_get_rsdpv2 (); + if (rsdp2) + rsdp1 = &(rsdp2->rsdpv1); + else + rsdp1 = grub_acpi_get_rsdpv1 (); + grub_dprintf ("acpi", "rsdp1=%p\n", rsdp1); + if (!rsdp1) + return; + + rsdt = (struct grub_acpi_table_header *) (grub_addr_t) rsdp1->rsdt_addr; + for (entry_ptr = (grub_uint32_t *) (rsdt + 1); + entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt) + + rsdt->length); + entry_ptr++) + { + if (grub_memcmp ((void *) (grub_addr_t) *entry_ptr, "FACP", 4) == 0) + { + struct grub_acpi_fadt *fadt + = ((struct grub_acpi_fadt *) (grub_addr_t) *entry_ptr); + struct grub_acpi_table_header *dsdt + = (struct grub_acpi_table_header *) (grub_addr_t) fadt->dsdt_addr; + grub_uint8_t *buf = (grub_uint8_t *) dsdt; + + port = fadt->pm1a; + + grub_dprintf ("acpi", "PM1a port=%x\n", port); + + if (grub_memcmp (dsdt->signature, "DSDT", + sizeof (dsdt->signature)) == 0 + && sleep_type < 0) + sleep_type = get_sleep_type (buf, NULL, buf + dsdt->length, + NULL, 0); + } + else if (grub_memcmp ((void *) (grub_addr_t) *entry_ptr, "SSDT", 4) == 0 + && sleep_type < 0) + { + struct grub_acpi_table_header *ssdt + = (struct grub_acpi_table_header *) (grub_addr_t) *entry_ptr; + grub_uint8_t *buf = (grub_uint8_t *) ssdt; + + grub_dprintf ("acpi", "SSDT = %p\n", ssdt); + + sleep_type = get_sleep_type (buf, NULL, buf + ssdt->length, NULL, 0); + } + } + + grub_dprintf ("acpi", "SLP_TYP = %d, port = 0x%x\n", sleep_type, port); + if (port && sleep_type >= 0 && sleep_type < 8) + grub_outw (GRUB_ACPI_SLP_EN | (sleep_type << GRUB_ACPI_SLP_TYP_OFFSET), + port & 0xffff); + + grub_millisleep (1500); + + /* TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. */ + grub_puts_ (N_("ACPI shutdown failed")); +} +#endif diff --git a/grub-core/commands/arc/lsdev.c b/grub-core/commands/arc/lsdev.c new file mode 100644 index 000000000..27ed0a248 --- /dev/null +++ b/grub-core/commands/arc/lsdev.c @@ -0,0 +1,57 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Helper for grub_cmd_lsdev. */ +static int +grub_cmd_lsdev_iter (const char *name, + const struct grub_arc_component *comp __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + grub_printf ("%s\n", name); + return 0; +} + +static grub_err_t +grub_cmd_lsdev (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_arc_iterate_devs (grub_cmd_lsdev_iter, 0, 0); + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lsdev) +{ + cmd = grub_register_command ("lsdev", grub_cmd_lsdev, "", + N_("List devices.")); +} + +GRUB_MOD_FINI(lsdev) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/blocklist.c b/grub-core/commands/blocklist.c new file mode 100644 index 000000000..d1a47b504 --- /dev/null +++ b/grub-core/commands/blocklist.c @@ -0,0 +1,160 @@ +/* blocklist.c - print the block list of a file */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Context for grub_cmd_blocklist. */ +struct blocklist_ctx +{ + unsigned long start_sector; + unsigned num_sectors; + int num_entries; + grub_disk_addr_t part_start; +}; + +/* Helper for grub_cmd_blocklist. */ +static void +print_blocklist (grub_disk_addr_t sector, unsigned num, + unsigned offset, unsigned length, struct blocklist_ctx *ctx) +{ + if (ctx->num_entries++) + grub_printf (","); + + grub_printf ("%llu", (unsigned long long) (sector - ctx->part_start)); + if (num > 0) + grub_printf ("+%u", num); + if (offset != 0 || length != 0) + grub_printf ("[%u-%u]", offset, offset + length); +} + +/* Helper for grub_cmd_blocklist. */ +static void +read_blocklist (grub_disk_addr_t sector, unsigned offset, unsigned length, + void *data) +{ + struct blocklist_ctx *ctx = data; + + if (ctx->num_sectors > 0) + { + if (ctx->start_sector + ctx->num_sectors == sector + && offset == 0 && length >= GRUB_DISK_SECTOR_SIZE) + { + ctx->num_sectors += length >> GRUB_DISK_SECTOR_BITS; + sector += length >> GRUB_DISK_SECTOR_BITS; + length &= (GRUB_DISK_SECTOR_SIZE - 1); + } + + if (!length) + return; + print_blocklist (ctx->start_sector, ctx->num_sectors, 0, 0, ctx); + ctx->num_sectors = 0; + } + + if (offset) + { + unsigned l = length + offset; + l &= (GRUB_DISK_SECTOR_SIZE - 1); + l -= offset; + print_blocklist (sector, 0, offset, l, ctx); + length -= l; + sector++; + offset = 0; + } + + if (!length) + return; + + if (length & (GRUB_DISK_SECTOR_SIZE - 1)) + { + if (length >> GRUB_DISK_SECTOR_BITS) + { + print_blocklist (sector, length >> GRUB_DISK_SECTOR_BITS, 0, 0, ctx); + sector += length >> GRUB_DISK_SECTOR_BITS; + } + print_blocklist (sector, 0, 0, length & (GRUB_DISK_SECTOR_SIZE - 1), ctx); + } + else + { + ctx->start_sector = sector; + ctx->num_sectors = length >> GRUB_DISK_SECTOR_BITS; + } +} + +static grub_err_t +grub_cmd_blocklist (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_file_t file; + char buf[GRUB_DISK_SECTOR_SIZE]; + struct blocklist_ctx ctx = { + .start_sector = 0, + .num_sectors = 0, + .num_entries = 0, + .part_start = 0 + }; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + grub_file_filter_disable_compression (); + file = grub_file_open (args[0]); + if (! file) + return grub_errno; + + if (! file->device->disk) + return grub_error (GRUB_ERR_BAD_DEVICE, + "this command is available only for disk devices"); + + ctx.part_start = grub_partition_get_start (file->device->disk->partition); + + file->read_hook = read_blocklist; + file->read_hook_data = &ctx; + + while (grub_file_read (file, buf, sizeof (buf)) > 0) + ; + + if (ctx.num_sectors > 0) + print_blocklist (ctx.start_sector, ctx.num_sectors, 0, 0, &ctx); + + grub_file_close (file); + + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(blocklist) +{ + cmd = grub_register_command ("blocklist", grub_cmd_blocklist, + N_("FILE"), N_("Print a block list.")); +} + +GRUB_MOD_FINI(blocklist) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/boot.c b/grub-core/commands/boot.c new file mode 100644 index 000000000..bbca81e94 --- /dev/null +++ b/grub-core/commands/boot.c @@ -0,0 +1,195 @@ +/* boot.c - command to boot an operating system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t (*grub_loader_boot_func) (void); +static grub_err_t (*grub_loader_unload_func) (void); +static int grub_loader_flags; + +struct grub_preboot +{ + grub_err_t (*preboot_func) (int); + grub_err_t (*preboot_rest_func) (void); + grub_loader_preboot_hook_prio_t prio; + struct grub_preboot *next; + struct grub_preboot *prev; +}; + +static int grub_loader_loaded; +static struct grub_preboot *preboots_head = 0, + *preboots_tail = 0; + +int +grub_loader_is_loaded (void) +{ + return grub_loader_loaded; +} + +/* Register a preboot hook. */ +struct grub_preboot * +grub_loader_register_preboot_hook (grub_err_t (*preboot_func) (int flags), + grub_err_t (*preboot_rest_func) (void), + grub_loader_preboot_hook_prio_t prio) +{ + struct grub_preboot *cur, *new_preboot; + + if (! preboot_func && ! preboot_rest_func) + return 0; + + new_preboot = (struct grub_preboot *) + grub_malloc (sizeof (struct grub_preboot)); + if (! new_preboot) + return 0; + + new_preboot->preboot_func = preboot_func; + new_preboot->preboot_rest_func = preboot_rest_func; + new_preboot->prio = prio; + + for (cur = preboots_head; cur && cur->prio > prio; cur = cur->next); + + if (cur) + { + new_preboot->next = cur; + new_preboot->prev = cur->prev; + cur->prev = new_preboot; + } + else + { + new_preboot->next = 0; + new_preboot->prev = preboots_tail; + preboots_tail = new_preboot; + } + if (new_preboot->prev) + new_preboot->prev->next = new_preboot; + else + preboots_head = new_preboot; + + return new_preboot; +} + +void +grub_loader_unregister_preboot_hook (struct grub_preboot *hnd) +{ + struct grub_preboot *preb = hnd; + + if (preb->next) + preb->next->prev = preb->prev; + else + preboots_tail = preb->prev; + if (preb->prev) + preb->prev->next = preb->next; + else + preboots_head = preb->next; + + grub_free (preb); +} + +void +grub_loader_set (grub_err_t (*boot) (void), + grub_err_t (*unload) (void), + int flags) +{ + if (grub_loader_loaded && grub_loader_unload_func) + grub_loader_unload_func (); + + grub_loader_boot_func = boot; + grub_loader_unload_func = unload; + grub_loader_flags = flags; + + grub_loader_loaded = 1; +} + +void +grub_loader_unset(void) +{ + if (grub_loader_loaded && grub_loader_unload_func) + grub_loader_unload_func (); + + grub_loader_boot_func = 0; + grub_loader_unload_func = 0; + + grub_loader_loaded = 0; +} + +grub_err_t +grub_loader_boot (void) +{ + grub_err_t err = GRUB_ERR_NONE; + struct grub_preboot *cur; + + if (! grub_loader_loaded) + return grub_error (GRUB_ERR_NO_KERNEL, + N_("you need to load the kernel first")); + + grub_machine_fini (grub_loader_flags); + + for (cur = preboots_head; cur; cur = cur->next) + { + err = cur->preboot_func (grub_loader_flags); + if (err) + { + for (cur = cur->prev; cur; cur = cur->prev) + cur->preboot_rest_func (); + return err; + } + } + err = (grub_loader_boot_func) (); + + for (cur = preboots_tail; cur; cur = cur->prev) + if (! err) + err = cur->preboot_rest_func (); + else + cur->preboot_rest_func (); + + return err; +} + +/* boot */ +static grub_err_t +grub_cmd_boot (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + return grub_loader_boot (); +} + + + +static grub_command_t cmd_boot; + +GRUB_MOD_INIT(boot) +{ + cmd_boot = + grub_register_command ("boot", grub_cmd_boot, + 0, N_("Boot an operating system.")); +} + +GRUB_MOD_FINI(boot) +{ + grub_unregister_command (cmd_boot); +} diff --git a/grub-core/commands/boottime.c b/grub-core/commands/boottime.c new file mode 100644 index 000000000..dcc078c2a --- /dev/null +++ b/grub-core/commands/boottime.c @@ -0,0 +1,65 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + + +static grub_err_t +grub_cmd_boottime (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + struct grub_boot_time *cur; + grub_uint64_t last_time = 0, start_time = 0; + if (!grub_boot_time_head) + { + grub_puts_ (N_("No boot time statistics is available\n")); + return 0; + } + start_time = last_time = grub_boot_time_head->tp; + for (cur = grub_boot_time_head; cur; cur = cur->next) + { + grub_uint32_t tmabs = cur->tp - start_time; + grub_uint32_t tmrel = cur->tp - last_time; + last_time = cur->tp; + + grub_printf ("%3d.%03ds %2d.%03ds %s:%d %s\n", + tmabs / 1000, tmabs % 1000, tmrel / 1000, tmrel % 1000, cur->file, cur->line, + cur->msg); + } + return 0; +} + +static grub_command_t cmd_boottime; + +GRUB_MOD_INIT(boottime) +{ + cmd_boottime = + grub_register_command ("boottime", grub_cmd_boottime, + 0, N_("Show boot time statistics.")); +} + +GRUB_MOD_FINI(boottime) +{ + grub_unregister_command (cmd_boottime); +} diff --git a/grub-core/commands/cacheinfo.c b/grub-core/commands/cacheinfo.c new file mode 100644 index 000000000..d34a34696 --- /dev/null +++ b/grub-core/commands/cacheinfo.c @@ -0,0 +1,62 @@ +/* cacheinfo.c - disk cache statistics */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + unsigned long hits, misses; + + grub_disk_cache_get_performance (&hits, &misses); + if (hits + misses) + { + unsigned long ratio = hits * 10000 / (hits + misses); + grub_printf ("(%lu.%lu%%)\n", ratio / 100, ratio % 100); + grub_printf_ (N_("Disk cache statistics: hits = %lu (%lu.%02lu%%)," + " misses = %lu\n"), ratio / 100, ratio % 100, + hits, misses); + } + else + grub_printf ("%s\n", _("No disk cache statistics available\n")); + + return 0; +} + +static grub_command_t cmd_cacheinfo; + +GRUB_MOD_INIT(cacheinfo) +{ + cmd_cacheinfo = + grub_register_command ("cacheinfo", grub_rescue_cmd_info, + 0, N_("Get disk cache info.")); +} + +GRUB_MOD_FINI(cacheinfo) +{ + grub_unregister_command (cmd_cacheinfo); +} diff --git a/grub-core/commands/cat.c b/grub-core/commands/cat.c new file mode 100644 index 000000000..88d904436 --- /dev/null +++ b/grub-core/commands/cat.c @@ -0,0 +1,170 @@ +/* cat.c - command to show the contents of a file */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + {"dos", -1, 0, N_("Accept DOS-style CR/NL line endings."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_err_t +grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + int dos = 0; + grub_file_t file; + unsigned char buf[GRUB_DISK_SECTOR_SIZE]; + grub_ssize_t size; + int key = GRUB_TERM_NO_KEY; + grub_uint32_t code = 0; + int count = 0; + unsigned char utbuf[GRUB_MAX_UTF8_PER_CODEPOINT + 1]; + int utcount = 0; + int is_0d = 0; + int j; + + if (state[0].set) + dos = 1; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + file = grub_file_open (args[0]); + if (! file) + return grub_errno; + + while ((size = grub_file_read (file, buf, sizeof (buf))) > 0 + && key != GRUB_TERM_ESC) + { + int i; + + for (i = 0; i < size; i++) + { + utbuf[utcount++] = buf[i]; + + if (is_0d && buf[i] != '\n') + { + grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); + grub_printf ("<%x>", (int) '\r'); + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + } + + is_0d = 0; + + if (!grub_utf8_process (buf[i], &code, &count)) + { + grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); + for (j = 0; j < utcount - 1; j++) + grub_printf ("<%x>", (unsigned int) utbuf[j]); + code = 0; + count = 0; + if (utcount == 1 || !grub_utf8_process (buf[i], &code, &count)) + { + grub_printf ("<%x>", (unsigned int) buf[i]); + code = 0; + count = 0; + utcount = 0; + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + continue; + } + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + utcount = 1; + } + if (count) + continue; + + if ((code >= 0xa1 || grub_isprint (code) + || grub_isspace (code)) && code != '\r') + { + grub_printf ("%C", code); + count = 0; + code = 0; + utcount = 0; + continue; + } + + if (dos && code == '\r') + { + is_0d = 1; + count = 0; + code = 0; + utcount = 0; + continue; + } + + grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); + for (j = 0; j < utcount; j++) + grub_printf ("<%x>", (unsigned int) utbuf[j]); + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + count = 0; + code = 0; + utcount = 0; + } + + do + key = grub_getkey_noblock (); + while (key != GRUB_TERM_ESC && key != GRUB_TERM_NO_KEY); + } + + if (is_0d) + { + grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); + grub_printf ("<%x>", (unsigned int) '\r'); + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + } + + if (utcount) + { + grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); + for (j = 0; j < utcount; j++) + grub_printf ("<%x>", (unsigned int) utbuf[j]); + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + } + + grub_xputs ("\n"); + grub_refresh (); + grub_file_close (file); + + return 0; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(cat) +{ + cmd = grub_register_extcmd ("cat", grub_cmd_cat, 0, + N_("FILE"), N_("Show the contents of a file."), + options); +} + +GRUB_MOD_FINI(cat) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/cmp.c b/grub-core/commands/cmp.c new file mode 100644 index 000000000..cc23ee67e --- /dev/null +++ b/grub-core/commands/cmp.c @@ -0,0 +1,119 @@ +/* cmd.c - command to cmp an operating system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define BUFFER_SIZE 512 + +static grub_err_t +grub_cmd_cmp (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_ssize_t rd1, rd2; + grub_off_t pos; + grub_file_t file1 = 0; + grub_file_t file2 = 0; + char *buf1 = 0; + char *buf2 = 0; + + if (argc != 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + grub_printf_ (N_("Compare file `%s' with `%s':\n"), args[0], + args[1]); + + file1 = grub_file_open (args[0]); + file2 = grub_file_open (args[1]); + if (! file1 || ! file2) + goto cleanup; + + if (grub_file_size (file1) != grub_file_size (file2)) + grub_printf_ (N_("Files differ in size: %llu [%s], %llu [%s]\n"), + (unsigned long long) grub_file_size (file1), args[0], + (unsigned long long) grub_file_size (file2), args[1]); + else + { + pos = 0; + + buf1 = grub_malloc (BUFFER_SIZE); + buf2 = grub_malloc (BUFFER_SIZE); + + if (! buf1 || ! buf2) + goto cleanup; + + do + { + int i; + + rd1 = grub_file_read (file1, buf1, BUFFER_SIZE); + rd2 = grub_file_read (file2, buf2, BUFFER_SIZE); + + if (rd1 != rd2) + goto cleanup; + + for (i = 0; i < rd2; i++) + { + if (buf1[i] != buf2[i]) + { + grub_printf_ (N_("Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n"), + (unsigned long long) (i + pos), buf1[i], + args[0], buf2[i], args[1]); + goto cleanup; + } + } + pos += BUFFER_SIZE; + + } + while (rd2); + + /* TRANSLATORS: it's always exactly 2 files. */ + grub_printf_ (N_("The files are identical.\n")); + } + +cleanup: + + grub_free (buf1); + grub_free (buf2); + if (file1) + grub_file_close (file1); + if (file2) + grub_file_close (file2); + + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(cmp) +{ + cmd = grub_register_command ("cmp", grub_cmd_cmp, + N_("FILE1 FILE2"), N_("Compare two files.")); +} + +GRUB_MOD_FINI(cmp) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/configfile.c b/grub-core/commands/configfile.c new file mode 100644 index 000000000..f2d2abb5f --- /dev/null +++ b/grub-core/commands/configfile.c @@ -0,0 +1,98 @@ +/* configfile.c - command to manually load config file */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_source (grub_command_t cmd, int argc, char **args) +{ + int new_env, extractor; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + extractor = (cmd->name[0] == 'e'); + new_env = (cmd->name[extractor ? sizeof ("extract_entries_") - 1 : 0] == 'c'); + + if (new_env) + grub_cls (); + + if (new_env && !extractor) + grub_env_context_open (); + if (extractor) + grub_env_extractor_open (!new_env); + + grub_normal_execute (args[0], 1, ! new_env); + + if (new_env && !extractor) + grub_env_context_close (); + if (extractor) + grub_env_extractor_close (!new_env); + + return 0; +} + +static grub_command_t cmd_configfile, cmd_source, cmd_dot; +static grub_command_t cmd_extractor_source, cmd_extractor_configfile; + +GRUB_MOD_INIT(configfile) +{ + cmd_configfile = + grub_register_command ("configfile", grub_cmd_source, + N_("FILE"), N_("Load another config file.")); + cmd_source = + grub_register_command ("source", grub_cmd_source, + N_("FILE"), + N_("Load another config file without changing context.") + ); + + cmd_extractor_source = + grub_register_command ("extract_entries_source", grub_cmd_source, + N_("FILE"), + N_("Load another config file without changing context but take only menu entries.") + ); + + cmd_extractor_configfile = + grub_register_command ("extract_entries_configfile", grub_cmd_source, + N_("FILE"), + N_("Load another config file but take only menu entries.") + ); + + cmd_dot = + grub_register_command (".", grub_cmd_source, + N_("FILE"), + N_("Load another config file without changing context.") + ); +} + +GRUB_MOD_FINI(configfile) +{ + grub_unregister_command (cmd_configfile); + grub_unregister_command (cmd_source); + grub_unregister_command (cmd_extractor_configfile); + grub_unregister_command (cmd_extractor_source); + grub_unregister_command (cmd_dot); +} diff --git a/grub-core/commands/date.c b/grub-core/commands/date.c new file mode 100644 index 000000000..8e1f41f14 --- /dev/null +++ b/grub-core/commands/date.c @@ -0,0 +1,148 @@ +/* date.c - command to display/set current datetime. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_DATETIME_SET_YEAR 1 +#define GRUB_DATETIME_SET_MONTH 2 +#define GRUB_DATETIME_SET_DAY 4 +#define GRUB_DATETIME_SET_HOUR 8 +#define GRUB_DATETIME_SET_MINUTE 16 +#define GRUB_DATETIME_SET_SECOND 32 + +static grub_err_t +grub_cmd_date (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + struct grub_datetime datetime; + int limit[6][2] = {{1980, 2079}, {1, 12}, {1, 31}, {0, 23}, {0, 59}, {0, 59}}; + int value[6], mask; + + if (argc == 0) + { + if (grub_get_datetime (&datetime)) + return grub_errno; + + grub_printf ("%d-%02d-%02d %02d:%02d:%02d %s\n", + datetime.year, datetime.month, datetime.day, + datetime.hour, datetime.minute, datetime.second, + grub_get_weekday_name (&datetime)); + + return 0; + } + + grub_memset (&value, 0, sizeof (value)); + mask = 0; + + for (; argc; argc--, args++) + { + char *p, c; + int m1, ofs, n, cur_mask; + + p = args[0]; + m1 = grub_strtoul (p, &p, 10); + + c = *p; + if (c == '-') + ofs = 0; + else if (c == ':') + ofs = 3; + else + goto fail; + + value[ofs] = m1; + cur_mask = (1 << ofs); + mask &= ~(cur_mask * (1 + 2 + 4)); + + for (n = 1; (n < 3) && (*p); n++) + { + if (*p != c) + goto fail; + + value[ofs + n] = grub_strtoul (p + 1, &p, 10); + cur_mask |= (1 << (ofs + n)); + } + + if (*p) + goto fail; + + if ((ofs == 0) && (n == 2)) + { + value[ofs + 2] = value[ofs + 1]; + value[ofs + 1] = value[ofs]; + ofs++; + cur_mask <<= 1; + } + + for (; n; n--, ofs++) + if ((value [ofs] < limit[ofs][0]) || + (value [ofs] > limit[ofs][1])) + goto fail; + + mask |= cur_mask; + } + + if (grub_get_datetime (&datetime)) + return grub_errno; + + if (mask & GRUB_DATETIME_SET_YEAR) + datetime.year = value[0]; + + if (mask & GRUB_DATETIME_SET_MONTH) + datetime.month = value[1]; + + if (mask & GRUB_DATETIME_SET_DAY) + datetime.day = value[2]; + + if (mask & GRUB_DATETIME_SET_HOUR) + datetime.hour = value[3]; + + if (mask & GRUB_DATETIME_SET_MINUTE) + datetime.minute = value[4]; + + if (mask & GRUB_DATETIME_SET_SECOND) + datetime.second = value[5]; + + return grub_set_datetime (&datetime); + +fail: + return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid datetime"); +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(date) +{ + cmd = + grub_register_command ("date", grub_cmd_date, + N_("[[year-]month-day] [hour:minute[:second]]"), + N_("Display/set current datetime.")); +} + +GRUB_MOD_FINI(date) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/echo.c b/grub-core/commands/echo.c new file mode 100644 index 000000000..81ba50d68 --- /dev/null +++ b/grub-core/commands/echo.c @@ -0,0 +1,141 @@ +/* echo.c - Command to display a line of text */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + {0, 'n', 0, N_("Do not output the trailing newline."), 0, 0}, + {0, 'e', 0, N_("Enable interpretation of backslash escapes."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_err_t +grub_cmd_echo (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + int newline = 1; + int i; + + /* Check if `-n' was used. */ + if (state[0].set) + newline = 0; + + for (i = 0; i < argc; i++) + { + char *arg = *args; + /* Unescaping results in a string no longer than the original. */ + char *unescaped = grub_malloc (grub_strlen (arg) + 1); + char *p = unescaped; + args++; + + if (!unescaped) + return grub_errno; + + while (*arg) + { + /* In case `-e' is used, parse backslashes. */ + if (*arg == '\\' && state[1].set) + { + arg++; + if (*arg == '\0') + break; + + switch (*arg) + { + case '\\': + *p++ = '\\'; + break; + + case 'a': + *p++ = '\a'; + break; + + case 'c': + newline = 0; + break; + + case 'f': + *p++ = '\f'; + break; + + case 'n': + *p++ = '\n'; + break; + + case 'r': + *p++ = '\r'; + break; + + case 't': + *p++ = '\t'; + break; + + case 'v': + *p++ = '\v'; + break; + } + arg++; + continue; + } + + /* This was not an escaped character, or escaping is not + enabled. */ + *p++ = *arg; + arg++; + } + + *p = '\0'; + grub_xputs (unescaped); + grub_free (unescaped); + + /* If another argument follows, insert a space. */ + if (i != argc - 1) + grub_printf (" " ); + } + + if (newline) + grub_printf ("\n"); + + grub_refresh (); + + return 0; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(echo) +{ + cmd = grub_register_extcmd ("echo", grub_cmd_echo, + GRUB_COMMAND_ACCEPT_DASH + | GRUB_COMMAND_OPTIONS_AT_START, + N_("[-e|-n] STRING"), N_("Display a line of text."), + options); +} + +GRUB_MOD_FINI(echo) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/efi/efifwsetup.c b/grub-core/commands/efi/efifwsetup.c new file mode 100644 index 000000000..7a137a72a --- /dev/null +++ b/grub-core/commands/efi/efifwsetup.c @@ -0,0 +1,90 @@ +/* fwsetup.c - Reboot into firmware setup menu. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_efi_uint64_t *old_os_indications; + grub_efi_uint64_t os_indications = GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI; + grub_err_t status; + grub_size_t oi_size; + grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; + + old_os_indications = grub_efi_get_variable ("OsIndications", &global, + &oi_size); + + if (old_os_indications != NULL && oi_size == sizeof (os_indications)) + os_indications |= *old_os_indications; + + status = grub_efi_set_variable ("OsIndications", &global, &os_indications, + sizeof (os_indications)); + if (status != GRUB_ERR_NONE) + return status; + + grub_reboot (); + + return GRUB_ERR_BUG; +} + +static grub_command_t cmd = NULL; + +static grub_efi_boolean_t +efifwsetup_is_supported (void) +{ + grub_efi_uint64_t *os_indications_supported = NULL; + grub_size_t oi_size = 0; + grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; + + os_indications_supported = grub_efi_get_variable ("OsIndicationsSupported", + &global, &oi_size); + + if (!os_indications_supported) + return 0; + + if (*os_indications_supported & GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI) + return 1; + + return 0; +} + +GRUB_MOD_INIT (efifwsetup) +{ + if (efifwsetup_is_supported ()) + cmd = grub_register_command ("fwsetup", grub_cmd_fwsetup, NULL, + N_("Reboot into firmware setup menu.")); + +} + +GRUB_MOD_FINI (efifwsetup) +{ + if (cmd) + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/efi/fixvideo.c b/grub-core/commands/efi/fixvideo.c new file mode 100644 index 000000000..d9d54a2e8 --- /dev/null +++ b/grub-core/commands/efi/fixvideo.c @@ -0,0 +1,114 @@ +/* fixvideo.c - fix video problem in efi */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static struct grub_video_patch +{ + const char *name; + grub_uint32_t pci_id; + grub_uint32_t mmio_bar; + grub_uint32_t mmio_reg; + grub_uint32_t mmio_old; +} video_patches[] = + { + {"Intel 945GM", 0x27a28086, 0, 0x71184, 0x1000000}, /* DSPBBASE */ + {"Intel 965GM", 0x2a028086, 0, 0x7119C, 0x1000000}, /* DSPBSURF */ + {0, 0, 0, 0, 0} + }; + +static int +scan_card (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_pci_address_t addr; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + if (grub_pci_read_byte (addr + 3) == 0x3) + { + struct grub_video_patch *p = video_patches; + + while (p->name) + { + if (p->pci_id == pciid) + { + grub_addr_t base; + + grub_dprintf ("fixvideo", "Found graphic card: %s\n", p->name); + addr += 8 + p->mmio_bar * 4; + base = grub_pci_read (addr); + if ((! base) || (base & GRUB_PCI_ADDR_SPACE_IO) || + (base & GRUB_PCI_ADDR_MEM_PREFETCH)) + grub_dprintf ("fixvideo", "Invalid MMIO bar %d\n", p->mmio_bar); + else + { + base &= GRUB_PCI_ADDR_MEM_MASK; + base += p->mmio_reg; + + if (*((volatile grub_uint32_t *) base) != p->mmio_old) + grub_dprintf ("fixvideo", "Old value doesn't match\n"); + else + { + *((volatile grub_uint32_t *) base) = 0; + if (*((volatile grub_uint32_t *) base)) + grub_dprintf ("fixvideo", "Setting MMIO fails\n"); + } + } + + return 1; + } + p++; + } + + grub_dprintf ("fixvideo", "Unknown graphic card: %x\n", pciid); + } + + return 0; +} + +static grub_err_t +grub_cmd_fixvideo (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + grub_pci_iterate (scan_card, NULL); + return 0; +} + +static grub_command_t cmd_fixvideo; + +GRUB_MOD_INIT(fixvideo) +{ + cmd_fixvideo = grub_register_command ("fix_video", grub_cmd_fixvideo, + 0, N_("Fix video problem.")); + +} + +GRUB_MOD_FINI(fixvideo) +{ + grub_unregister_command (cmd_fixvideo); +} diff --git a/grub-core/commands/efi/loadbios.c b/grub-core/commands/efi/loadbios.c new file mode 100644 index 000000000..132cadbc7 --- /dev/null +++ b/grub-core/commands/efi/loadbios.c @@ -0,0 +1,222 @@ +/* loadbios.c - command to load a bios dump */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID; +static grub_efi_guid_t acpi2_guid = GRUB_EFI_ACPI_20_TABLE_GUID; +static grub_efi_guid_t smbios_guid = GRUB_EFI_SMBIOS_TABLE_GUID; + +#define EBDA_SEG_ADDR 0x40e +#define LOW_MEM_ADDR 0x413 +#define FAKE_EBDA_SEG 0x9fc0 + +#define BLANK_MEM 0xffffffff +#define VBIOS_ADDR 0xc0000 +#define SBIOS_ADDR 0xf0000 + +static int +enable_rom_area (void) +{ + grub_pci_address_t addr; + grub_uint32_t *rom_ptr; + grub_pci_device_t dev = { .bus = 0, .device = 0, .function = 0}; + + rom_ptr = (grub_uint32_t *) VBIOS_ADDR; + if (*rom_ptr != BLANK_MEM) + { + grub_puts_ (N_("ROM image is present.")); + return 0; + } + + /* FIXME: should be macroified. */ + addr = grub_pci_make_address (dev, 144); + grub_pci_write_byte (addr++, 0x30); + grub_pci_write_byte (addr++, 0x33); + grub_pci_write_byte (addr++, 0x33); + grub_pci_write_byte (addr++, 0x33); + grub_pci_write_byte (addr++, 0x33); + grub_pci_write_byte (addr++, 0x33); + grub_pci_write_byte (addr++, 0x33); + grub_pci_write_byte (addr, 0); + + *rom_ptr = 0; + if (*rom_ptr != 0) + { + grub_puts_ (N_("Can\'t enable ROM area.")); + return 0; + } + + return 1; +} + +static void +lock_rom_area (void) +{ + grub_pci_address_t addr; + grub_pci_device_t dev = { .bus = 0, .device = 0, .function = 0}; + + /* FIXME: should be macroified. */ + addr = grub_pci_make_address (dev, 144); + grub_pci_write_byte (addr++, 0x10); + grub_pci_write_byte (addr++, 0x11); + grub_pci_write_byte (addr++, 0x11); + grub_pci_write_byte (addr++, 0x11); + grub_pci_write_byte (addr, 0x11); +} + +static void +fake_bios_data (int use_rom) +{ + unsigned i; + void *acpi, *smbios; + grub_uint16_t *ebda_seg_ptr, *low_mem_ptr; + + ebda_seg_ptr = (grub_uint16_t *) EBDA_SEG_ADDR; + low_mem_ptr = (grub_uint16_t *) LOW_MEM_ADDR; + if ((*ebda_seg_ptr) || (*low_mem_ptr)) + return; + + acpi = 0; + smbios = 0; + for (i = 0; i < grub_efi_system_table->num_table_entries; i++) + { + grub_efi_packed_guid_t *guid = + &grub_efi_system_table->configuration_table[i].vendor_guid; + + if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t))) + { + acpi = grub_efi_system_table->configuration_table[i].vendor_table; + grub_dprintf ("efi", "ACPI2: %p\n", acpi); + } + else if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_guid_t))) + { + void *t; + + t = grub_efi_system_table->configuration_table[i].vendor_table; + if (! acpi) + acpi = t; + grub_dprintf ("efi", "ACPI: %p\n", t); + } + else if (! grub_memcmp (guid, &smbios_guid, sizeof (grub_efi_guid_t))) + { + smbios = grub_efi_system_table->configuration_table[i].vendor_table; + grub_dprintf ("efi", "SMBIOS: %p\n", smbios); + } + } + + *ebda_seg_ptr = FAKE_EBDA_SEG; + *low_mem_ptr = (FAKE_EBDA_SEG >> 6); + + *((grub_uint16_t *) (FAKE_EBDA_SEG << 4)) = 640 - *low_mem_ptr; + + if (acpi) + grub_memcpy ((char *) ((FAKE_EBDA_SEG << 4) + 16), acpi, 1024 - 16); + + if ((use_rom) && (smbios)) + grub_memcpy ((char *) SBIOS_ADDR, (char *) smbios + 16, 16); +} + +static grub_err_t +grub_cmd_fakebios (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + if (enable_rom_area ()) + { + fake_bios_data (1); + lock_rom_area (); + } + else + fake_bios_data (0); + + return 0; +} + +static grub_err_t +grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_file_t file; + int size; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + if (argc > 1) + { + file = grub_file_open (argv[1]); + if (! file) + return grub_errno; + + if (file->size != 4) + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid int10 dump size"); + else + grub_file_read (file, (void *) 0x40, 4); + + grub_file_close (file); + if (grub_errno) + return grub_errno; + } + + file = grub_file_open (argv[0]); + if (! file) + return grub_errno; + + size = file->size; + if ((size < 0x10000) || (size > 0x40000)) + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid bios dump size"); + else if (enable_rom_area ()) + { + grub_file_read (file, (void *) VBIOS_ADDR, size); + fake_bios_data (size <= 0x40000); + lock_rom_area (); + } + + grub_file_close (file); + return grub_errno; +} + +static grub_command_t cmd_fakebios, cmd_loadbios; + +GRUB_MOD_INIT(loadbios) +{ + cmd_fakebios = grub_register_command ("fakebios", grub_cmd_fakebios, + 0, N_("Create BIOS-like structures for" + " backward compatibility with" + " existing OS.")); + + cmd_loadbios = grub_register_command ("loadbios", grub_cmd_loadbios, + N_("BIOS_DUMP [INT10_DUMP]"), + N_("Load BIOS dump.")); +} + +GRUB_MOD_FINI(loadbios) +{ + grub_unregister_command (cmd_fakebios); + grub_unregister_command (cmd_loadbios); +} diff --git a/grub-core/commands/efi/lsefi.c b/grub-core/commands/efi/lsefi.c new file mode 100644 index 000000000..d901c3892 --- /dev/null +++ b/grub-core/commands/efi/lsefi.c @@ -0,0 +1,153 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct known_protocol +{ + grub_efi_guid_t guid; + const char *name; +} known_protocols[] = + { + { GRUB_EFI_DISK_IO_GUID, "disk" }, + { GRUB_EFI_BLOCK_IO_GUID, "block" }, + { GRUB_EFI_SERIAL_IO_GUID, "serial" }, + { GRUB_EFI_SIMPLE_NETWORK_GUID, "network" }, + { GRUB_EFI_PXE_GUID, "pxe" }, + { GRUB_EFI_DEVICE_PATH_GUID, "device path" }, + { GRUB_EFI_PCI_IO_GUID, "PCI" }, + { GRUB_EFI_PCI_ROOT_IO_GUID, "PCI root" }, + { GRUB_EFI_EDID_ACTIVE_GUID, "active EDID" }, + { GRUB_EFI_EDID_DISCOVERED_GUID, "discovered EDID" }, + { GRUB_EFI_EDID_OVERRIDE_GUID, "override EDID" }, + { GRUB_EFI_GOP_GUID, "GOP" }, + { GRUB_EFI_UGA_DRAW_GUID, "UGA draw" }, + { GRUB_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID, "simple text output" }, + { GRUB_EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID, "simple text input" }, + { GRUB_EFI_SIMPLE_POINTER_PROTOCOL_GUID, "simple pointer" }, + { GRUB_EFI_CONSOLE_CONTROL_GUID, "console control" }, + { GRUB_EFI_ABSOLUTE_POINTER_PROTOCOL_GUID, "absolute pointer" }, + { GRUB_EFI_DRIVER_BINDING_PROTOCOL_GUID, "EFI driver binding" }, + { GRUB_EFI_LOAD_FILE_PROTOCOL_GUID, "load file" }, + { GRUB_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID, "simple FS" }, + { GRUB_EFI_TAPE_IO_PROTOCOL_GUID, "tape I/O" }, + { GRUB_EFI_UNICODE_COLLATION_PROTOCOL_GUID, "unicode collation" }, + { GRUB_EFI_SCSI_IO_PROTOCOL_GUID, "SCSI I/O" }, + { GRUB_EFI_USB2_HC_PROTOCOL_GUID, "USB host" }, + { GRUB_EFI_DEBUG_SUPPORT_PROTOCOL_GUID, "debug support" }, + { GRUB_EFI_DEBUGPORT_PROTOCOL_GUID, "debug port" }, + { GRUB_EFI_DECOMPRESS_PROTOCOL_GUID, "decompress" }, + { GRUB_EFI_LOADED_IMAGE_PROTOCOL_GUID, "loaded image" }, + { GRUB_EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID, "device path to text" }, + { GRUB_EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID, "device path utilities" }, + { GRUB_EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID, "device path from text" }, + { GRUB_EFI_HII_CONFIG_ROUTING_PROTOCOL_GUID, "HII config routing" }, + { GRUB_EFI_HII_DATABASE_PROTOCOL_GUID, "HII database" }, + { GRUB_EFI_HII_STRING_PROTOCOL_GUID, "HII string" }, + { GRUB_EFI_HII_IMAGE_PROTOCOL_GUID, "HII image" }, + { GRUB_EFI_HII_FONT_PROTOCOL_GUID, "HII font" }, + { GRUB_EFI_COMPONENT_NAME2_PROTOCOL_GUID, "component name 2" }, + { GRUB_EFI_HII_CONFIGURATION_ACCESS_PROTOCOL_GUID, + "HII configuration access" }, + { GRUB_EFI_USB_IO_PROTOCOL_GUID, "USB I/O" }, + }; + +static grub_err_t +grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_efi_handle_t *handles; + grub_efi_uintn_t num_handles; + unsigned i, j, k; + + handles = grub_efi_locate_handle (GRUB_EFI_ALL_HANDLES, + NULL, NULL, &num_handles); + + for (i = 0; i < num_handles; i++) + { + grub_efi_handle_t handle = handles[i]; + grub_efi_status_t status; + grub_efi_uintn_t num_protocols; + grub_efi_packed_guid_t **protocols; + grub_efi_device_path_t *dp; + + grub_printf ("Handle %p\n", handle); + + dp = grub_efi_get_device_path (handle); + if (dp) + { + grub_printf (" "); + grub_efi_print_device_path (dp); + } + + status = efi_call_3 (grub_efi_system_table->boot_services->protocols_per_handle, + handle, &protocols, &num_protocols); + if (status != GRUB_EFI_SUCCESS) + grub_printf ("Unable to retrieve protocols\n"); + for (j = 0; j < num_protocols; j++) + { + for (k = 0; k < ARRAY_SIZE (known_protocols); k++) + if (grub_memcmp (protocols[j], &known_protocols[k].guid, + sizeof (known_protocols[k].guid)) == 0) + break; + if (k < ARRAY_SIZE (known_protocols)) + grub_printf (" %s\n", known_protocols[k].name); + else + grub_printf (" %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n", + protocols[j]->data1, + protocols[j]->data2, + protocols[j]->data3, + (unsigned) protocols[j]->data4[0], + (unsigned) protocols[j]->data4[1], + (unsigned) protocols[j]->data4[2], + (unsigned) protocols[j]->data4[3], + (unsigned) protocols[j]->data4[4], + (unsigned) protocols[j]->data4[5], + (unsigned) protocols[j]->data4[6], + (unsigned) protocols[j]->data4[7]); + } + + } + + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lsefi) +{ + cmd = grub_register_command ("lsefi", grub_cmd_lsefi, + NULL, "Display EFI handles."); +} + +GRUB_MOD_FINI(lsefi) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/efi/lsefimmap.c b/grub-core/commands/efi/lsefimmap.c new file mode 100644 index 000000000..c85ff7f36 --- /dev/null +++ b/grub-core/commands/efi/lsefimmap.c @@ -0,0 +1,160 @@ +/* lsefimemmap.c - Display memory map. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define ADD_MEMORY_DESCRIPTOR(desc, size) \ + ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) + +static grub_err_t +grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_efi_uintn_t map_size; + grub_efi_memory_descriptor_t *memory_map; + grub_efi_memory_descriptor_t *memory_map_end; + grub_efi_memory_descriptor_t *desc; + grub_efi_uintn_t desc_size; + + map_size = 0; + if (grub_efi_get_memory_map (&map_size, NULL, NULL, &desc_size, 0) < 0) + return 0; + + memory_map = grub_malloc (map_size); + if (memory_map == NULL) + return grub_errno; + if (grub_efi_get_memory_map (&map_size, memory_map, NULL, &desc_size, 0) <= 0) + goto fail; + + grub_printf + ("Type Physical start - end #Pages " + " Size Attributes\n"); + memory_map_end = ADD_MEMORY_DESCRIPTOR (memory_map, map_size); + for (desc = memory_map; + desc < memory_map_end; + desc = ADD_MEMORY_DESCRIPTOR (desc, desc_size)) + { + grub_efi_uint64_t size; + grub_efi_uint64_t attr; + static const char types_str[][9] = + { + "reserved", + "ldr-code", + "ldr-data", + "BS-code ", + "BS-data ", + "RT-code ", + "RT-data ", + "conv-mem", + "unusable", + "ACPI-rec", + "ACPI-nvs", + "MMIO ", + "IO-ports", + "PAL-code", + "persist ", + }; + if (desc->type < ARRAY_SIZE (types_str)) + grub_printf ("%s ", types_str[desc->type]); + else + grub_printf ("Unk %02x ", desc->type); + + grub_printf (" %016" PRIxGRUB_UINT64_T "-%016" PRIxGRUB_UINT64_T + " %08" PRIxGRUB_UINT64_T, + desc->physical_start, + desc->physical_start + (desc->num_pages << 12) - 1, + desc->num_pages); + + size = desc->num_pages << 12; /* 4 KiB page size */ + /* + * Since size is a multiple of 4 KiB, no need to handle units + * of just Bytes (which would use a mask of 0x3ff). + * + * 14 characters would support the largest possible number of 4 KiB + * pages that are not a multiple of larger units (e.g., MiB): + * 17592186044415 (0xffffff_fffff000), but that uses a lot of + * whitespace for a rare case. 6 characters usually suffices; + * columns will be off if not, but this is preferable to rounding. + */ + if (size & 0xfffff) + grub_printf (" %6" PRIuGRUB_UINT64_T "KiB", size >> 10); + else if (size & 0x3fffffff) + grub_printf (" %6" PRIuGRUB_UINT64_T "MiB", size >> 20); + else if (size & 0xffffffffff) + grub_printf (" %6" PRIuGRUB_UINT64_T "GiB", size >> 30); + else if (size & 0x3ffffffffffff) + grub_printf (" %6" PRIuGRUB_UINT64_T "TiB", size >> 40); + else if (size & 0xfffffffffffffff) + grub_printf (" %6" PRIuGRUB_UINT64_T "PiB", size >> 50); + else + grub_printf (" %6" PRIuGRUB_UINT64_T "EiB", size >> 60); + + attr = desc->attribute; + if (attr & GRUB_EFI_MEMORY_RUNTIME) + grub_printf (" RT"); + if (attr & GRUB_EFI_MEMORY_UC) + grub_printf (" UC"); + if (attr & GRUB_EFI_MEMORY_WC) + grub_printf (" WC"); + if (attr & GRUB_EFI_MEMORY_WT) + grub_printf (" WT"); + if (attr & GRUB_EFI_MEMORY_WB) + grub_printf (" WB"); + if (attr & GRUB_EFI_MEMORY_UCE) + grub_printf (" UCE"); + if (attr & GRUB_EFI_MEMORY_WP) + grub_printf (" WP"); + if (attr & GRUB_EFI_MEMORY_RP) + grub_printf (" RP"); + if (attr & GRUB_EFI_MEMORY_XP) + grub_printf (" XP"); + if (attr & GRUB_EFI_MEMORY_NV) + grub_printf (" NV"); + if (attr & GRUB_EFI_MEMORY_MORE_RELIABLE) + grub_printf (" MR"); + if (attr & GRUB_EFI_MEMORY_RO) + grub_printf (" RO"); + + grub_printf ("\n"); + } + + fail: + grub_free (memory_map); + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lsefimmap) +{ + cmd = grub_register_command ("lsefimmap", grub_cmd_lsefimmap, + "", "Display EFI memory map."); +} + +GRUB_MOD_FINI(lsefimmap) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/efi/lsefisystab.c b/grub-core/commands/efi/lsefisystab.c new file mode 100644 index 000000000..df1030221 --- /dev/null +++ b/grub-core/commands/efi/lsefisystab.c @@ -0,0 +1,121 @@ +/* lsefisystab.c - Display EFI systab. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct guid_mapping +{ + grub_efi_guid_t guid; + const char *name; +}; + +static const struct guid_mapping guid_mappings[] = + { + { GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"}, + { GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"}, + { GRUB_EFI_CRC32_GUIDED_SECTION_EXTRACTION_GUID, + "CRC32 GUIDED SECTION EXTRACTION"}, + { GRUB_EFI_DEBUG_IMAGE_INFO_TABLE_GUID, "DEBUG IMAGE INFO"}, + { GRUB_EFI_DXE_SERVICES_TABLE_GUID, "DXE SERVICES"}, + { GRUB_EFI_HCDP_TABLE_GUID, "HCDP"}, + { GRUB_EFI_HOB_LIST_GUID, "HOB LIST"}, + { GRUB_EFI_LZMA_CUSTOM_DECOMPRESS_GUID, "LZMA CUSTOM DECOMPRESS"}, + { GRUB_EFI_MEMORY_TYPE_INFORMATION_GUID, "MEMORY TYPE INFO"}, + { GRUB_EFI_MPS_TABLE_GUID, "MPS"}, + { GRUB_EFI_SAL_TABLE_GUID, "SAL"}, + { GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"}, + { GRUB_EFI_SYSTEM_RESOURCE_TABLE_GUID, "SYSTEM RESOURCE TABLE"}, + { GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"}, + { GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"}, + }; + +static grub_err_t +grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + const grub_efi_system_table_t *st = grub_efi_system_table; + grub_efi_configuration_table_t *t; + unsigned int i; + + grub_printf ("Address: %p\n", st); + grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n", + st->hdr.signature, st->hdr.revision); + { + char *vendor; + grub_uint16_t *vendor_utf16; + grub_printf ("Vendor: "); + + for (vendor_utf16 = st->firmware_vendor; *vendor_utf16; vendor_utf16++); + vendor = grub_malloc (4 * (vendor_utf16 - st->firmware_vendor) + 1); + if (!vendor) + return grub_errno; + *grub_utf16_to_utf8 ((grub_uint8_t *) vendor, st->firmware_vendor, + vendor_utf16 - st->firmware_vendor) = 0; + grub_printf ("%s", vendor); + grub_free (vendor); + } + + grub_printf (", Version=%x\n", st->firmware_revision); + + grub_printf ("%lld tables:\n", (long long) st->num_table_entries); + t = st->configuration_table; + for (i = 0; i < st->num_table_entries; i++) + { + unsigned int j; + + grub_printf ("%p ", t->vendor_table); + + grub_printf ("%08x-%04x-%04x-", + t->vendor_guid.data1, t->vendor_guid.data2, + t->vendor_guid.data3); + for (j = 0; j < 8; j++) + grub_printf ("%02x", t->vendor_guid.data4[j]); + + for (j = 0; j < ARRAY_SIZE (guid_mappings); j++) + if (grub_memcmp (&guid_mappings[j].guid, &t->vendor_guid, + sizeof (grub_efi_guid_t)) == 0) + grub_printf (" %s", guid_mappings[j].name); + + grub_printf ("\n"); + t++; + } + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lsefisystab) +{ + cmd = grub_register_command ("lsefisystab", grub_cmd_lsefisystab, + "", "Display EFI system tables."); +} + +GRUB_MOD_FINI(lsefisystab) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/efi/lssal.c b/grub-core/commands/efi/lssal.c new file mode 100644 index 000000000..5084ddd8b --- /dev/null +++ b/grub-core/commands/efi/lssal.c @@ -0,0 +1,169 @@ +/* lssal.c - Display EFI SAL systab. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static void +disp_sal (void *table) +{ + struct grub_efi_sal_system_table *t = table; + void *desc; + grub_uint32_t len, l, i; + + grub_printf ("SAL rev: %02x, signature: %x, len:%x\n", + t->sal_rev, t->signature, t->total_table_len); + grub_printf ("nbr entry: %d, chksum: %02x, SAL version A: %02x B: %02x\n", + t->entry_count, t->checksum, + t->sal_a_version, t->sal_b_version); + grub_printf ("OEM-ID: %-32s\n", t->oem_id); + grub_printf ("Product-ID: %-32s\n", t->product_id); + + desc = t->entries; + len = t->total_table_len - sizeof (struct grub_efi_sal_system_table); + if (t->total_table_len <= sizeof (struct grub_efi_sal_system_table)) + return; + for (i = 0; i < t->entry_count; i++) + { + switch (*(grub_uint8_t *) desc) + { + case GRUB_EFI_SAL_SYSTEM_TABLE_TYPE_ENTRYPOINT_DESCRIPTOR: + { + struct grub_efi_sal_system_table_entrypoint_descriptor *c = desc; + l = sizeof (*c); + grub_printf (" Entry point: PAL=%016" PRIxGRUB_UINT64_T + " SAL=%016" PRIxGRUB_UINT64_T " GP=%016" + PRIxGRUB_UINT64_T "\n", + c->pal_proc_addr, c->sal_proc_addr, + c->global_data_ptr); + } + break; + case GRUB_EFI_SAL_SYSTEM_TABLE_TYPE_MEMORY_DESCRIPTOR: + { + struct grub_efi_sal_system_table_memory_descriptor *c = desc; + l = sizeof (*c); + grub_printf (" Memory descriptor entry addr=%016" PRIxGRUB_UINT64_T + " len=%" PRIuGRUB_UINT64_T "KB\n", + c->addr, c->len * 4); + grub_printf (" sal_used=%d attr=%x AR=%x attr_mask=%x " + "type=%x usage=%x\n", + c->sal_used, c->attr, c->ar, c->attr_mask, c->mem_type, + c->usage); + } + break; + case GRUB_EFI_SAL_SYSTEM_TABLE_TYPE_PLATFORM_FEATURES: + { + struct grub_efi_sal_system_table_platform_features *c = desc; + l = sizeof (*c); + grub_printf (" Platform features: %02x", c->flags); + if (c->flags & GRUB_EFI_SAL_SYSTEM_TABLE_PLATFORM_FEATURE_BUSLOCK) + grub_printf (" BusLock"); + if (c->flags & GRUB_EFI_SAL_SYSTEM_TABLE_PLATFORM_FEATURE_IRQREDIRECT) + grub_printf (" IrqRedirect"); + if (c->flags & GRUB_EFI_SAL_SYSTEM_TABLE_PLATFORM_FEATURE_IPIREDIRECT) + + grub_printf (" IPIRedirect"); + if (c->flags & GRUB_EFI_SAL_SYSTEM_TABLE_PLATFORM_FEATURE_ITCDRIFT) + + grub_printf (" ITCDrift"); + grub_printf ("\n"); + } + break; + case GRUB_EFI_SAL_SYSTEM_TABLE_TYPE_TRANSLATION_REGISTER_DESCRIPTOR: + { + struct grub_efi_sal_system_table_translation_register_descriptor *c + = desc; + l = sizeof (*c); + grub_printf (" TR type=%d num=%d va=%016" PRIxGRUB_UINT64_T + " pte=%016" PRIxGRUB_UINT64_T "\n", + c->register_type, c->register_number, + c->addr, c->page_size); + } + break; + case GRUB_EFI_SAL_SYSTEM_TABLE_TYPE_PURGE_TRANSLATION_COHERENCE: + { + struct grub_efi_sal_system_table_purge_translation_coherence *c + = desc; + l = sizeof (*c); + grub_printf (" PTC coherence nbr=%d addr=%016" PRIxGRUB_UINT64_T "\n", + c->ndomains, c->coherence); + } + break; + case GRUB_EFI_SAL_SYSTEM_TABLE_TYPE_AP_WAKEUP: + { + struct grub_efi_sal_system_table_ap_wakeup *c = desc; + l = sizeof (*c); + grub_printf (" AP wake-up: mec=%d vect=%" PRIxGRUB_UINT64_T "\n", + c->mechanism, c->vector); + } + break; + default: + grub_printf (" unknown entry 0x%x\n", *(grub_uint8_t *)desc); + return; + } + desc = (grub_uint8_t *)desc + l; + if (len <= l) + return; + len -= l; + } +} + +static grub_err_t +grub_cmd_lssal (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + const grub_efi_system_table_t *st = grub_efi_system_table; + grub_efi_configuration_table_t *t = st->configuration_table; + unsigned int i; + grub_efi_packed_guid_t guid = GRUB_EFI_SAL_TABLE_GUID; + + for (i = 0; i < st->num_table_entries; i++) + { + if (grub_memcmp (&guid, &t->vendor_guid, + sizeof (grub_efi_packed_guid_t)) == 0) + { + disp_sal (t->vendor_table); + return GRUB_ERR_NONE; + } + t++; + } + grub_printf ("SAL not found\n"); + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lssal) +{ + cmd = grub_register_command ("lssal", grub_cmd_lssal, "", + "Display SAL system table."); +} + +GRUB_MOD_FINI(lssal) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/eval.c b/grub-core/commands/eval.c new file mode 100644 index 000000000..f826a4f22 --- /dev/null +++ b/grub-core/commands/eval.c @@ -0,0 +1,71 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_eval (grub_command_t cmd __attribute__((__unused__)), + int argc, char *argv[]) +{ + int i; + grub_size_t size = argc; /* +1 for final zero */ + char *str, *p; + grub_err_t ret; + + if (argc == 0) + return GRUB_ERR_NONE; + + for (i = 0; i < argc; i++) + size += grub_strlen (argv[i]); + + str = p = grub_malloc (size); + if (!str) + return grub_errno; + + for (i = 0; i < argc; i++) + { + p = grub_stpcpy (p, argv[i]); + *p++ = ' '; + } + *--p = '\0'; + + ret = grub_script_execute_sourcecode (str); + grub_free (str); + return ret; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(eval) +{ + cmd = grub_register_command ("eval", grub_cmd_eval, N_("STRING ..."), + N_("Evaluate arguments as GRUB commands")); +} + +GRUB_MOD_FINI(eval) +{ + grub_unregister_command (cmd); +} + diff --git a/grub-core/commands/extcmd.c b/grub-core/commands/extcmd.c new file mode 100644 index 000000000..69574e2b0 --- /dev/null +++ b/grub-core/commands/extcmd.c @@ -0,0 +1,118 @@ +/* extcmd.c - support extended command */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +grub_err_t +grub_extcmd_dispatcher (struct grub_command *cmd, int argc, char **args, + struct grub_script *script) +{ + int new_argc; + char **new_args; + struct grub_arg_list *state; + struct grub_extcmd_context context; + grub_err_t ret; + grub_extcmd_t ext = cmd->data; + + context.state = 0; + context.extcmd = ext; + context.script = script; + + if (! ext->options) + { + ret = (ext->func) (&context, argc, args); + return ret; + } + + state = grub_arg_list_alloc (ext, argc, args); + if (grub_arg_parse (ext, argc, args, state, &new_args, &new_argc)) + { + context.state = state; + ret = (ext->func) (&context, new_argc, new_args); + grub_free (new_args); + grub_free (state); + return ret; + } + + grub_free (state); + return grub_errno; +} + +static grub_err_t +grub_extcmd_dispatch (struct grub_command *cmd, int argc, char **args) +{ + return grub_extcmd_dispatcher (cmd, argc, args, 0); +} + +grub_extcmd_t +grub_register_extcmd_prio (const char *name, grub_extcmd_func_t func, + grub_command_flags_t flags, const char *summary, + const char *description, + const struct grub_arg_option *parser, + int prio) +{ + grub_extcmd_t ext; + grub_command_t cmd; + + ext = (grub_extcmd_t) grub_malloc (sizeof (*ext)); + if (! ext) + return 0; + + cmd = grub_register_command_prio (name, grub_extcmd_dispatch, + summary, description, prio); + if (! cmd) + { + grub_free (ext); + return 0; + } + + cmd->flags = (flags | GRUB_COMMAND_FLAG_EXTCMD); + cmd->data = ext; + + ext->cmd = cmd; + ext->func = func; + ext->options = parser; + ext->data = 0; + + return ext; +} + +grub_extcmd_t +grub_register_extcmd (const char *name, grub_extcmd_func_t func, + grub_command_flags_t flags, const char *summary, + const char *description, + const struct grub_arg_option *parser) +{ + return grub_register_extcmd_prio (name, func, flags, + summary, description, parser, 1); +} + +void +grub_unregister_extcmd (grub_extcmd_t ext) +{ + grub_unregister_command (ext->cmd); + grub_free (ext); +} diff --git a/grub-core/commands/file.c b/grub-core/commands/file.c new file mode 100644 index 000000000..12fba99e0 --- /dev/null +++ b/grub-core/commands/file.c @@ -0,0 +1,679 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = { + {"is-i386-xen-pae-domu", 0, 0, + N_("Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel"), + 0, 0}, + {"is-x86_64-xen-domu", 0, 0, + N_("Check if FILE can be booted as x86_64 Xen unprivileged guest kernel"), 0, 0}, + {"is-x86-xen-dom0", 0, 0, + N_("Check if FILE can be used as Xen x86 privileged guest kernel"), 0, 0}, + {"is-x86-multiboot", 0, 0, + N_("Check if FILE can be used as x86 multiboot kernel"), 0, 0}, + {"is-x86-multiboot2", 0, 0, + N_("Check if FILE can be used as x86 multiboot2 kernel"), 0, 0}, + {"is-arm-linux", 0, 0, + N_("Check if FILE is ARM Linux"), 0, 0}, + {"is-arm64-linux", 0, 0, + N_("Check if FILE is ARM64 Linux"), 0, 0}, + {"is-ia64-linux", 0, 0, + N_("Check if FILE is IA64 Linux"), 0, 0}, + {"is-mips-linux", 0, 0, + N_("Check if FILE is MIPS Linux"), 0, 0}, + {"is-mipsel-linux", 0, 0, + N_("Check if FILE is MIPSEL Linux"), 0, 0}, + {"is-sparc64-linux", 0, 0, + N_("Check if FILE is SPARC64 Linux"), 0, 0}, + {"is-powerpc-linux", 0, 0, + N_("Check if FILE is POWERPC Linux"), 0, 0}, + {"is-x86-linux", 0, 0, + N_("Check if FILE is x86 Linux"), 0, 0}, + {"is-x86-linux32", 0, 0, + N_("Check if FILE is x86 Linux supporting 32-bit protocol"), 0, 0}, + {"is-x86-kfreebsd", 0, 0, + N_("Check if FILE is x86 kFreeBSD"), 0, 0}, + {"is-i386-kfreebsd", 0, 0, + N_("Check if FILE is i386 kFreeBSD"), 0, 0}, + {"is-x86_64-kfreebsd", 0, 0, + N_("Check if FILE is x86_64 kFreeBSD"), 0, 0}, + + {"is-x86-knetbsd", 0, 0, + N_("Check if FILE is x86 kNetBSD"), 0, 0}, + {"is-i386-knetbsd", 0, 0, + N_("Check if FILE is i386 kNetBSD"), 0, 0}, + {"is-x86_64-knetbsd", 0, 0, + N_("Check if FILE is x86_64 kNetBSD"), 0, 0}, + + {"is-i386-efi", 0, 0, + N_("Check if FILE is i386 EFI file"), 0, 0}, + {"is-x86_64-efi", 0, 0, + N_("Check if FILE is x86_64 EFI file"), 0, 0}, + {"is-ia64-efi", 0, 0, + N_("Check if FILE is IA64 EFI file"), 0, 0}, + {"is-arm64-efi", 0, 0, + N_("Check if FILE is ARM64 EFI file"), 0, 0}, + {"is-arm-efi", 0, 0, + N_("Check if FILE is ARM EFI file"), 0, 0}, + {"is-hibernated-hiberfil", 0, 0, + N_("Check if FILE is hiberfil.sys in hibernated state"), 0, 0}, + {"is-x86_64-xnu", 0, 0, + N_("Check if FILE is x86_64 XNU (Mac OS X kernel)"), 0, 0}, + {"is-i386-xnu", 0, 0, + N_("Check if FILE is i386 XNU (Mac OS X kernel)"), 0, 0}, + {"is-xnu-hibr", 0, 0, + N_("Check if FILE is XNU (Mac OS X kernel) hibernated image"), 0, 0}, + {"is-x86-bios-bootsector", 0, 0, + N_("Check if FILE is BIOS bootsector"), 0, 0}, + {0, 0, 0, 0, 0, 0} +}; + +enum +{ + IS_PAE_DOMU, + IS_64_DOMU, + IS_DOM0, + IS_MULTIBOOT, + IS_MULTIBOOT2, + IS_ARM_LINUX, + IS_ARM64_LINUX, + IS_IA64_LINUX, + IS_MIPS_LINUX, + IS_MIPSEL_LINUX, + IS_SPARC64_LINUX, + IS_POWERPC_LINUX, + IS_X86_LINUX, + IS_X86_LINUX32, + IS_X86_KFREEBSD, + IS_X86_KFREEBSD32, + IS_X86_KFREEBSD64, + IS_X86_KNETBSD, + IS_X86_KNETBSD32, + IS_X86_KNETBSD64, + IS_32_EFI, + IS_64_EFI, + IS_IA_EFI, + IS_ARM64_EFI, + IS_ARM_EFI, + IS_HIBERNATED, + IS_XNU64, + IS_XNU32, + IS_XNU_HIBR, + IS_BIOS_BOOTSECTOR, + OPT_TYPE_MIN = IS_PAE_DOMU, + OPT_TYPE_MAX = IS_BIOS_BOOTSECTOR +}; + + +static grub_err_t +grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args) +{ + grub_file_t file = 0; + grub_elf_t elf = 0; + grub_err_t err; + int type = -1, i; + int ret = 0; + grub_macho_t macho = 0; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + for (i = OPT_TYPE_MIN; i <= OPT_TYPE_MAX; i++) + if (ctxt->state[i].set) + { + if (type == -1) + { + type = i; + continue; + } + return grub_error (GRUB_ERR_BAD_ARGUMENT, "multiple types specified"); + } + if (type == -1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no type specified"); + + file = grub_file_open (args[0]); + if (!file) + return grub_errno; + switch (type) + { + case IS_BIOS_BOOTSECTOR: + { + grub_uint16_t sig; + if (grub_file_size (file) != 512) + break; + if (grub_file_seek (file, 510) == (grub_size_t) -1) + break; + if (grub_file_read (file, &sig, 2) != 2) + break; + if (sig != grub_cpu_to_le16_compile_time (0xaa55)) + break; + ret = 1; + break; + } + case IS_IA64_LINUX: + { + Elf64_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_CLASS] != ELFCLASS64 + || ehdr.e_ident[EI_DATA] != ELFDATA2LSB + || ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_IA_64)) + break; + + ret = 1; + + break; + } + + case IS_SPARC64_LINUX: + { + Elf64_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_CLASS] != ELFCLASS64 + || ehdr.e_ident[EI_DATA] != ELFDATA2MSB) + break; + + if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_SPARCV9) + || ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC)) + break; + + ret = 1; + + break; + } + + case IS_POWERPC_LINUX: + { + Elf32_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB + || (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_PPC) + && ehdr.e_machine != + grub_cpu_to_le16_compile_time (EM_PPC64))) + break; + + if (ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC) + && ehdr.e_type != grub_cpu_to_be16_compile_time (ET_DYN)) + break; + + ret = 1; + + break; + } + + case IS_MIPS_LINUX: + { + Elf32_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB + || ehdr.e_machine != grub_cpu_to_be16_compile_time (EM_MIPS) + || ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC)) + break; + + ret = 1; + + break; + } + + case IS_X86_KNETBSD: + case IS_X86_KNETBSD32: + case IS_X86_KNETBSD64: + { + int is32, is64; + + elf = grub_elf_file (file, file->name); + + if (elf->ehdr.ehdr32.e_type != grub_cpu_to_le16_compile_time (ET_EXEC) + || elf->ehdr.ehdr32.e_ident[EI_DATA] != ELFDATA2LSB) + break; + + is32 = grub_elf_is_elf32 (elf); + is64 = grub_elf_is_elf64 (elf); + if (!is32 && !is64) + break; + if (!is32 && type == IS_X86_KNETBSD32) + break; + if (!is64 && type == IS_X86_KNETBSD64) + break; + if (is64) + ret = grub_file_check_netbsd64 (elf); + if (is32) + ret = grub_file_check_netbsd32 (elf); + break; + } + + case IS_X86_KFREEBSD: + case IS_X86_KFREEBSD32: + case IS_X86_KFREEBSD64: + { + Elf32_Ehdr ehdr; + int is32, is64; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC) + || ehdr.e_ident[EI_DATA] != ELFDATA2LSB) + break; + + if (ehdr.e_ident[EI_OSABI] != ELFOSABI_FREEBSD) + break; + + is32 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_386) + && ehdr.e_ident[EI_CLASS] == ELFCLASS32); + is64 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_X86_64) + && ehdr.e_ident[EI_CLASS] == ELFCLASS64); + if (!is32 && !is64) + break; + if (!is32 && (type == IS_X86_KFREEBSD32 || type == IS_X86_KNETBSD32)) + break; + if (!is64 && (type == IS_X86_KFREEBSD64 || type == IS_X86_KNETBSD64)) + break; + ret = 1; + + break; + } + + + case IS_MIPSEL_LINUX: + { + Elf32_Ehdr ehdr; + + if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr)) + break; + + if (ehdr.e_ident[EI_MAG0] != ELFMAG0 + || ehdr.e_ident[EI_MAG1] != ELFMAG1 + || ehdr.e_ident[EI_MAG2] != ELFMAG2 + || ehdr.e_ident[EI_MAG3] != ELFMAG3 + || ehdr.e_ident[EI_VERSION] != EV_CURRENT + || ehdr.e_version != EV_CURRENT) + break; + + if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_MIPS) + || ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC)) + break; + + ret = 1; + + break; + } + case IS_ARM_LINUX: + { + grub_uint32_t sig, sig_pi; + if (grub_file_read (file, &sig_pi, 4) != 4) + break; + /* Raspberry pi. */ + if (sig_pi == grub_cpu_to_le32_compile_time (0xea000006)) + { + ret = 1; + break; + } + + if (grub_file_seek (file, 0x24) == (grub_size_t) -1) + break; + if (grub_file_read (file, &sig, 4) != 4) + break; + if (sig == grub_cpu_to_le32_compile_time (0x016f2818)) + { + ret = 1; + break; + } + break; + } + case IS_ARM64_LINUX: + { + grub_uint32_t sig; + + if (grub_file_seek (file, 0x38) == (grub_size_t) -1) + break; + if (grub_file_read (file, &sig, 4) != 4) + break; + if (sig == grub_cpu_to_le32_compile_time (0x644d5241)) + { + ret = 1; + break; + } + break; + } + case IS_PAE_DOMU ... IS_DOM0: + { + struct grub_xen_file_info xen_inf; + elf = grub_xen_file (file); + if (!elf) + break; + err = grub_xen_get_info (elf, &xen_inf); + if (err) + break; + /* Unfortuntely no way to check if kernel supports dom0. */ + if (type == IS_DOM0) + ret = 1; + if (type == IS_PAE_DOMU) + ret = (xen_inf.arch == GRUB_XEN_FILE_I386_PAE + || xen_inf.arch == GRUB_XEN_FILE_I386_PAE_BIMODE); + if (type == IS_64_DOMU) + ret = (xen_inf.arch == GRUB_XEN_FILE_X86_64); + break; + } + case IS_MULTIBOOT: + case IS_MULTIBOOT2: + { + grub_uint32_t *buffer; + grub_ssize_t len; + grub_size_t search_size; + grub_uint32_t *header; + grub_uint32_t magic; + grub_size_t step; + + if (type == IS_MULTIBOOT2) + { + search_size = 32768; + magic = grub_cpu_to_le32_compile_time (0xe85250d6); + step = 2; + } + else + { + search_size = 8192; + magic = grub_cpu_to_le32_compile_time (0x1BADB002); + step = 1; + } + + buffer = grub_malloc (search_size); + if (!buffer) + break; + + len = grub_file_read (file, buffer, search_size); + if (len < 32) + { + grub_free (buffer); + break; + } + + /* Look for the multiboot header in the buffer. The header should + be at least 12 bytes and aligned on a 4-byte boundary. */ + for (header = buffer; + ((char *) header <= + (char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12)); + header += step) + { + if (header[0] == magic + && !(grub_le_to_cpu32 (header[0]) + + grub_le_to_cpu32 (header[1]) + + grub_le_to_cpu32 (header[2]) + + (type == IS_MULTIBOOT2 + ? grub_le_to_cpu32 (header[3]) : 0))) + { + ret = 1; + break; + } + } + + grub_free (buffer); + break; + } + case IS_X86_LINUX32: + case IS_X86_LINUX: + { + struct linux_kernel_header lh; + if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) + break; + if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55)) + break; + + if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS) + break; + + /* FIXME: some really old kernels (< 1.3.73) will fail this. */ + if (lh.header != + grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE) + || grub_le_to_cpu16 (lh.version) < 0x0200) + break; + + if (type == IS_X86_LINUX) + { + ret = 1; + break; + } + + /* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and + still not support 32-bit boot. */ + if (lh.header != + grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE) + || grub_le_to_cpu16 (lh.version) < 0x0203) + break; + + if (!(lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) + break; + ret = 1; + break; + } + case IS_HIBERNATED: + { + grub_uint8_t hibr_file_magic[4]; + if (grub_file_read (file, &hibr_file_magic, sizeof (hibr_file_magic)) + != sizeof (hibr_file_magic)) + break; + if (grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) == + 0 + || grub_memcmp ("HIBR", hibr_file_magic, + sizeof (hibr_file_magic)) == 0) + ret = 1; + break; + } + case IS_XNU64: + case IS_XNU32: + { + macho = grub_macho_open (args[0], (type == IS_XNU64)); + if (!macho) + break; + /* FIXME: more checks? */ + ret = 1; + break; + } + case IS_XNU_HIBR: + { + struct grub_xnu_hibernate_header hibhead; + if (grub_file_read (file, &hibhead, sizeof (hibhead)) + != sizeof (hibhead)) + break; + if (hibhead.magic != + grub_cpu_to_le32_compile_time (GRUB_XNU_HIBERNATE_MAGIC)) + break; + ret = 1; + break; + } + case IS_32_EFI: + case IS_64_EFI: + case IS_IA_EFI: + case IS_ARM64_EFI: + case IS_ARM_EFI: + { + char signature[4]; + grub_uint32_t pe_offset; + struct grub_pe32_coff_header coff_head; + + if (grub_file_read (file, signature, 2) != 2) + break; + if (signature[0] != 'M' || signature[1] != 'Z') + break; + if ((grub_ssize_t) grub_file_seek (file, 0x3c) == -1) + break; + if (grub_file_read (file, &pe_offset, 4) != 4) + break; + if ((grub_ssize_t) grub_file_seek (file, grub_le_to_cpu32 (pe_offset)) + == -1) + break; + if (grub_file_read (file, signature, 4) != 4) + break; + if (signature[0] != 'P' || signature[1] != 'E' + || signature[2] != '\0' || signature[3] != '\0') + break; + + if (grub_file_read (file, &coff_head, sizeof (coff_head)) + != sizeof (coff_head)) + break; + if (type == IS_32_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_I386)) + break; + if (type == IS_64_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_X86_64)) + break; + if (type == IS_IA_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_IA64)) + break; + if (type == IS_ARM64_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARM64)) + break; + if (type == IS_ARM_EFI + && coff_head.machine != + grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARMTHUMB_MIXED)) + break; + if (type == IS_IA_EFI || type == IS_64_EFI || type == IS_ARM64_EFI) + { + struct grub_pe64_optional_header o64; + if (grub_file_read (file, &o64, sizeof (o64)) != sizeof (o64)) + break; + if (o64.magic != + grub_cpu_to_le16_compile_time (GRUB_PE32_PE64_MAGIC)) + break; + if (o64.subsystem != + grub_cpu_to_le16_compile_time + (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION)) + break; + ret = 1; + break; + } + if (type == IS_32_EFI || type == IS_ARM_EFI) + { + struct grub_pe32_optional_header o32; + if (grub_file_read (file, &o32, sizeof (o32)) != sizeof (o32)) + break; + if (o32.magic != + grub_cpu_to_le16_compile_time (GRUB_PE32_PE32_MAGIC)) + break; + if (o32.subsystem != + grub_cpu_to_le16_compile_time + (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION)) + break; + ret = 1; + break; + } + break; + } + } + + if (elf) + grub_elf_close (elf); + else if (macho) + grub_macho_close (macho); + else if (file) + grub_file_close (file); + + if (!ret && (grub_errno == GRUB_ERR_BAD_OS || grub_errno == GRUB_ERR_NONE)) + /* TRANSLATORS: it's a standalone boolean value, + opposite of "true". */ + grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); + return grub_errno; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(file) +{ + cmd = grub_register_extcmd ("file", grub_cmd_file, 0, + N_("OPTIONS FILE"), + N_("Check if FILE is of specified type."), + options); +} + +GRUB_MOD_FINI(file) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/file32.c b/grub-core/commands/file32.c new file mode 100644 index 000000000..0861c458d --- /dev/null +++ b/grub-core/commands/file32.c @@ -0,0 +1,5 @@ +#define GRUB_TARGET_WORDSIZE 32 +#define XX 32 +#define ehdrXX ehdr32 +#define grub_file_check_netbsdXX grub_file_check_netbsd32 +#include "fileXX.c" diff --git a/grub-core/commands/file64.c b/grub-core/commands/file64.c new file mode 100644 index 000000000..90890d481 --- /dev/null +++ b/grub-core/commands/file64.c @@ -0,0 +1,5 @@ +#define GRUB_TARGET_WORDSIZE 64 +#define XX 64 +#define ehdrXX ehdr64 +#define grub_file_check_netbsdXX grub_file_check_netbsd64 +#include "fileXX.c" diff --git a/grub-core/commands/fileXX.c b/grub-core/commands/fileXX.c new file mode 100644 index 000000000..c17d26ce6 --- /dev/null +++ b/grub-core/commands/fileXX.c @@ -0,0 +1,74 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wcast-align" + +int +grub_file_check_netbsdXX (grub_elf_t elf) +{ + Elf_Shdr *s, *s0; + + grub_size_t shnum = elf->ehdr.ehdrXX.e_shnum; + grub_size_t shentsize = elf->ehdr.ehdrXX.e_shentsize; + grub_size_t shsize = shnum * shentsize; + grub_off_t stroff; + + if (!shnum || !shentsize) + return 0; + + s0 = grub_malloc (shsize); + if (!s0) + return 0; + + if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1) + goto fail; + + if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize) + goto fail; + + s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize); + stroff = s->sh_offset; + + for (s = s0; s < (Elf_Shdr *) ((char *) s0 + shnum * shentsize); + s = (Elf_Shdr *) ((char *) s + shentsize)) + { + char name[sizeof(".note.netbsd.ident")]; + grub_memset (name, 0, sizeof (name)); + if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1) + goto fail; + + if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name)) + { + if (grub_errno) + goto fail; + continue; + } + if (grub_memcmp (name, ".note.netbsd.ident", + sizeof(".note.netbsd.ident")) != 0) + continue; + grub_free (s0); + return 1; + } + fail: + grub_free (s0); + return 0; +} diff --git a/grub-core/commands/gptsync.c b/grub-core/commands/gptsync.c new file mode 100644 index 000000000..444e24874 --- /dev/null +++ b/grub-core/commands/gptsync.c @@ -0,0 +1,266 @@ +/* gptsync.c - fill the mbr based on gpt entries */ +/* XXX: I don't know what to do if sector size isn't 512 bytes */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Convert a LBA address to a CHS address in the INT 13 format. */ +/* Taken from grub1. */ +/* XXX: use hardcoded geometry of C = 1024, H = 255, S = 63. + Is it a problem? +*/ +static void +lba_to_chs (grub_uint32_t lba, grub_uint8_t *cl, grub_uint8_t *ch, + grub_uint8_t *dh) +{ + grub_uint32_t cylinder, head, sector; + grub_uint32_t sectors = 63, heads = 255, cylinders = 1024; + + sector = lba % sectors + 1; + head = (lba / sectors) % heads; + cylinder = lba / (sectors * heads); + + if (cylinder >= cylinders) + { + *cl = *ch = *dh = 0xff; + return; + } + + *cl = sector | ((cylinder & 0x300) >> 2); + *ch = cylinder & 0xFF; + *dh = head; +} + +static grub_err_t +grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_device_t dev; + struct grub_msdos_partition_mbr mbr; + struct grub_partition *partition; + grub_disk_addr_t first_sector; + int numactive = 0; + int i; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required"); + if (argc > 4) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "only 3 partitions can be " + "in hybrid MBR"); + + if (args[0][0] == '(' && args[0][grub_strlen (args[0]) - 1] == ')') + { + args[0][grub_strlen (args[0]) - 1] = 0; + dev = grub_device_open (args[0] + 1); + args[0][grub_strlen (args[0])] = ')'; + } + else + dev = grub_device_open (args[0]); + + if (! dev) + return grub_errno; + + if (! dev->disk) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_ARGUMENT, "not a disk"); + } + + /* Read the protective MBR. */ + if (grub_disk_read (dev->disk, 0, 0, sizeof (mbr), &mbr)) + { + grub_device_close (dev); + return grub_errno; + } + + /* Check if it is valid. */ + if (mbr.signature != grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE)) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature"); + } + + /* Make sure the MBR is a protective MBR and not a normal MBR. */ + for (i = 0; i < 4; i++) + if (mbr.entries[i].type == GRUB_PC_PARTITION_TYPE_GPT_DISK) + break; + if (i == 4) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_PART_TABLE, "no GPT partition map found"); + } + + first_sector = dev->disk->total_sectors; + for (i = 1; i < argc; i++) + { + char *separator, csep = 0; + grub_uint8_t type; + separator = grub_strchr (args[i], '+'); + if (! separator) + separator = grub_strchr (args[i], '-'); + if (separator) + { + csep = *separator; + *separator = 0; + } + partition = grub_partition_probe (dev->disk, args[i]); + if (separator) + *separator = csep; + if (! partition) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + N_("no such partition")); + } + + if (partition->start + partition->len > 0xffffffff) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_OUT_OF_RANGE, + "only partitions residing in the first 2TB " + "can be present in hybrid MBR"); + } + + + if (first_sector > partition->start) + first_sector = partition->start; + + if (separator && *(separator + 1)) + type = grub_strtoul (separator + 1, 0, 0); + else + { + grub_fs_t fs = 0; + dev->disk->partition = partition; + fs = grub_fs_probe (dev); + + /* Unknown filesystem isn't fatal. */ + if (grub_errno == GRUB_ERR_UNKNOWN_FS) + { + fs = 0; + grub_errno = GRUB_ERR_NONE; + } + + if (fs && grub_strcmp (fs->name, "ntfs") == 0) + type = GRUB_PC_PARTITION_TYPE_NTFS; + else if (fs && grub_strcmp (fs->name, "fat") == 0) + /* FIXME: detect FAT16. */ + type = GRUB_PC_PARTITION_TYPE_FAT32_LBA; + else if (fs && (grub_strcmp (fs->name, "hfsplus") == 0 + || grub_strcmp (fs->name, "hfs") == 0)) + type = GRUB_PC_PARTITION_TYPE_HFS; + else + /* FIXME: detect more types. */ + type = GRUB_PC_PARTITION_TYPE_EXT2FS; + + dev->disk->partition = 0; + } + + mbr.entries[i].flag = (csep == '+') ? 0x80 : 0; + if (csep == '+') + { + numactive++; + if (numactive == 2) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "only one partition can be active"); + } + } + mbr.entries[i].type = type; + mbr.entries[i].start = grub_cpu_to_le32 (partition->start); + lba_to_chs (partition->start, + &(mbr.entries[i].start_sector), + &(mbr.entries[i].start_cylinder), + &(mbr.entries[i].start_head)); + lba_to_chs (partition->start + partition->len - 1, + &(mbr.entries[i].end_sector), + &(mbr.entries[i].end_cylinder), + &(mbr.entries[i].end_head)); + mbr.entries[i].length = grub_cpu_to_le32 (partition->len); + grub_free (partition); + } + for (; i < 4; i++) + grub_memset (&(mbr.entries[i]), 0, sizeof (mbr.entries[i])); + + /* The protective partition. */ + if (first_sector > 0xffffffff) + first_sector = 0xffffffff; + else + first_sector--; + mbr.entries[0].flag = 0; + mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK; + mbr.entries[0].start = grub_cpu_to_le32_compile_time (1); + lba_to_chs (1, + &(mbr.entries[0].start_sector), + &(mbr.entries[0].start_cylinder), + &(mbr.entries[0].start_head)); + lba_to_chs (first_sector, + &(mbr.entries[0].end_sector), + &(mbr.entries[0].end_cylinder), + &(mbr.entries[0].end_head)); + mbr.entries[0].length = grub_cpu_to_le32 (first_sector); + + mbr.signature = grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE); + + if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr)) + { + grub_device_close (dev); + return grub_errno; + } + + grub_device_close (dev); + + grub_printf_ (N_("New MBR is written to `%s'\n"), args[0]); + + return GRUB_ERR_NONE; +} + + +static grub_command_t cmd; + +GRUB_MOD_INIT(gptsync) +{ + (void) mod; /* To stop warning. */ + cmd = grub_register_command ("gptsync", grub_cmd_gptsync, + N_("DEVICE [PARTITION[+/-[TYPE]]] ..."), + /* TRANSLATORS: MBR type is one-byte partition + type id. */ + N_("Fill hybrid MBR of GPT drive DEVICE. " + "Specified partitions will be a part " + "of hybrid MBR. Up to 3 partitions are " + "allowed. TYPE is an MBR type. " + "+ means that partition is active. " + "Only one partition can be active.")); +} + +GRUB_MOD_FINI(gptsync) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/halt.c b/grub-core/commands/halt.c new file mode 100644 index 000000000..f8596ecdc --- /dev/null +++ b/grub-core/commands/halt.c @@ -0,0 +1,47 @@ +/* halt.c - command to halt the computer. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t __attribute__ ((noreturn)) +grub_cmd_halt (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_halt (); +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(halt) +{ + cmd = grub_register_command ("halt", grub_cmd_halt, + 0, N_("Halts the computer. This command does" + " not work on all firmware implementations.")); +} + +GRUB_MOD_FINI(halt) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/hashsum.c b/grub-core/commands/hashsum.c new file mode 100644 index 000000000..d18687351 --- /dev/null +++ b/grub-core/commands/hashsum.c @@ -0,0 +1,327 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = { + {"hash", 'h', 0, N_("Specify hash to use."), N_("HASH"), ARG_TYPE_STRING}, + {"check", 'c', 0, N_("Check hashes of files with hash list FILE."), + N_("FILE"), ARG_TYPE_STRING}, + {"prefix", 'p', 0, N_("Base directory for hash list."), N_("DIR"), + ARG_TYPE_STRING}, + {"keep-going", 'k', 0, N_("Don't stop after first error."), 0, 0}, + {"uncompress", 'u', 0, N_("Uncompress file before checksumming."), 0, 0}, + {0, 0, 0, 0, 0, 0} +}; + +static struct { const char *name; const char *hashname; } aliases[] = + { + {"sha256sum", "sha256"}, + {"sha512sum", "sha512"}, + {"sha1sum", "sha1"}, + {"md5sum", "md5"}, + {"crc", "crc32"}, + }; + +static inline int +hextoval (char c) +{ + if (c >= '0' && c <= '9') + return c - '0'; + if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + return -1; +} + +static grub_err_t +hash_file (grub_file_t file, const gcry_md_spec_t *hash, void *result) +{ + void *context; + grub_uint8_t *readbuf; +#define BUF_SIZE 4096 + readbuf = grub_malloc (BUF_SIZE); + if (!readbuf) + return grub_errno; + context = grub_zalloc (hash->contextsize); + if (!readbuf || !context) + goto fail; + + hash->init (context); + while (1) + { + grub_ssize_t r; + r = grub_file_read (file, readbuf, BUF_SIZE); + if (r < 0) + goto fail; + if (r == 0) + break; + hash->write (context, readbuf, r); + } + hash->final (context); + grub_memcpy (result, hash->read (context), hash->mdlen); + + grub_free (readbuf); + grub_free (context); + + return GRUB_ERR_NONE; + + fail: + grub_free (readbuf); + grub_free (context); + return grub_errno; +} + +static grub_err_t +check_list (const gcry_md_spec_t *hash, const char *hashfilename, + const char *prefix, int keep, int uncompress) +{ + grub_file_t hashlist, file; + char *buf = NULL; + grub_uint8_t expected[GRUB_CRYPTO_MAX_MDLEN]; + grub_uint8_t actual[GRUB_CRYPTO_MAX_MDLEN]; + grub_err_t err; + unsigned i; + unsigned unread = 0, mismatch = 0; + + if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return grub_error (GRUB_ERR_BUG, "mdlen is too long"); + + hashlist = grub_file_open (hashfilename); + if (!hashlist) + return grub_errno; + + while (grub_free (buf), (buf = grub_file_getline (hashlist))) + { + const char *p = buf; + while (grub_isspace (p[0])) + p++; + for (i = 0; i < hash->mdlen; i++) + { + int high, low; + high = hextoval (*p++); + low = hextoval (*p++); + if (high < 0 || low < 0) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list"); + expected[i] = (high << 4) | low; + } + if ((p[0] != ' ' && p[0] != '\t') || (p[1] != ' ' && p[1] != '\t')) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list"); + p += 2; + if (prefix) + { + char *filename; + + filename = grub_xasprintf ("%s/%s", prefix, p); + if (!filename) + return grub_errno; + if (!uncompress) + grub_file_filter_disable_compression (); + file = grub_file_open (filename); + grub_free (filename); + } + else + { + if (!uncompress) + grub_file_filter_disable_compression (); + file = grub_file_open (p); + } + if (!file) + { + grub_file_close (hashlist); + grub_free (buf); + return grub_errno; + } + err = hash_file (file, hash, actual); + grub_file_close (file); + if (err) + { + grub_printf_ (N_("%s: READ ERROR\n"), p); + if (!keep) + { + grub_file_close (hashlist); + grub_free (buf); + return err; + } + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + unread++; + continue; + } + if (grub_crypto_memcmp (expected, actual, hash->mdlen) != 0) + { + grub_printf_ (N_("%s: HASH MISMATCH\n"), p); + if (!keep) + { + grub_file_close (hashlist); + grub_free (buf); + return grub_error (GRUB_ERR_TEST_FAILURE, + "hash of '%s' mismatches", p); + } + mismatch++; + continue; + } + grub_printf_ (N_("%s: OK\n"), p); + } + if (mismatch || unread) + return grub_error (GRUB_ERR_TEST_FAILURE, + "%d files couldn't be read and hash " + "of %d files mismatches", unread, mismatch); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_hashsum (struct grub_extcmd_context *ctxt, + int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + const char *hashname = NULL; + const char *prefix = NULL; + const gcry_md_spec_t *hash; + unsigned i; + int keep = state[3].set; + int uncompress = state[4].set; + unsigned unread = 0; + + for (i = 0; i < ARRAY_SIZE (aliases); i++) + if (grub_strcmp (ctxt->extcmd->cmd->name, aliases[i].name) == 0) + hashname = aliases[i].hashname; + if (state[0].set) + hashname = state[0].arg; + + if (!hashname) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no hash specified"); + + hash = grub_crypto_lookup_md_by_name (hashname); + if (!hash) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "unknown hash"); + + if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return grub_error (GRUB_ERR_BUG, "mdlen is too long"); + + if (state[2].set) + prefix = state[2].arg; + + if (state[1].set) + { + if (argc != 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "--check is incompatible with file list"); + return check_list (hash, state[1].arg, prefix, keep, uncompress); + } + + for (i = 0; i < (unsigned) argc; i++) + { + GRUB_PROPERLY_ALIGNED_ARRAY (result, GRUB_CRYPTO_MAX_MDLEN); + grub_file_t file; + grub_err_t err; + unsigned j; + if (!uncompress) + grub_file_filter_disable_compression (); + file = grub_file_open (args[i]); + if (!file) + { + if (!keep) + return grub_errno; + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + unread++; + continue; + } + err = hash_file (file, hash, result); + grub_file_close (file); + if (err) + { + if (!keep) + return err; + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + unread++; + continue; + } + for (j = 0; j < hash->mdlen; j++) + grub_printf ("%02x", ((grub_uint8_t *) result)[j]); + grub_printf (" %s\n", args[i]); + } + + if (unread) + return grub_error (GRUB_ERR_TEST_FAILURE, "%d files couldn't be read", + unread); + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd, cmd_md5, cmd_sha1, cmd_sha256, cmd_sha512, cmd_crc; + +GRUB_MOD_INIT(hashsum) +{ + cmd = grub_register_extcmd ("hashsum", grub_cmd_hashsum, 0, + N_("-h HASH [-c FILE [-p PREFIX]] " + "[FILE1 [FILE2 ...]]"), + /* TRANSLATORS: "hash checksum" is just to + be a bit more precise, you can treat it as + just "hash". */ + N_("Compute or check hash checksum."), + options); + cmd_md5 = grub_register_extcmd ("md5sum", grub_cmd_hashsum, 0, + N_("[-c FILE [-p PREFIX]] " + "[FILE1 [FILE2 ...]]"), + N_("Compute or check hash checksum."), + options); + cmd_sha1 = grub_register_extcmd ("sha1sum", grub_cmd_hashsum, 0, + N_("[-c FILE [-p PREFIX]] " + "[FILE1 [FILE2 ...]]"), + N_("Compute or check hash checksum."), + options); + cmd_sha256 = grub_register_extcmd ("sha256sum", grub_cmd_hashsum, 0, + N_("[-c FILE [-p PREFIX]] " + "[FILE1 [FILE2 ...]]"), + N_("Compute or check hash checksum."), + options); + cmd_sha512 = grub_register_extcmd ("sha512sum", grub_cmd_hashsum, 0, + N_("[-c FILE [-p PREFIX]] " + "[FILE1 [FILE2 ...]]"), + N_("Compute or check hash checksum."), + options); + + cmd_crc = grub_register_extcmd ("crc", grub_cmd_hashsum, 0, + N_("[-c FILE [-p PREFIX]] " + "[FILE1 [FILE2 ...]]"), + N_("Compute or check hash checksum."), + options); +} + +GRUB_MOD_FINI(hashsum) +{ + grub_unregister_extcmd (cmd); + grub_unregister_extcmd (cmd_md5); + grub_unregister_extcmd (cmd_sha1); + grub_unregister_extcmd (cmd_sha256); + grub_unregister_extcmd (cmd_sha512); + grub_unregister_extcmd (cmd_crc); +} diff --git a/grub-core/commands/hdparm.c b/grub-core/commands/hdparm.c new file mode 100644 index 000000000..d3fa9661e --- /dev/null +++ b/grub-core/commands/hdparm.c @@ -0,0 +1,447 @@ +/* hdparm.c - command to get/set ATA disk parameters. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = { + {"apm", 'B', 0, N_("Set Advanced Power Management\n" + "(1=low, ..., 254=high, 255=off)."), + 0, ARG_TYPE_INT}, + {"power", 'C', 0, N_("Display power mode."), 0, ARG_TYPE_NONE}, + {"security-freeze", 'F', 0, N_("Freeze ATA security settings until reset."), + 0, ARG_TYPE_NONE}, + {"health", 'H', 0, N_("Display SMART health status."), 0, ARG_TYPE_NONE}, + {"aam", 'M', 0, N_("Set Automatic Acoustic Management\n" + "(0=off, 128=quiet, ..., 254=fast)."), + 0, ARG_TYPE_INT}, + {"standby-timeout", 'S', 0, N_("Set standby timeout\n" + "(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)."), + 0, ARG_TYPE_INT}, + {"standby", 'y', 0, N_("Set drive to standby mode."), 0, ARG_TYPE_NONE}, + {"sleep", 'Y', 0, N_("Set drive to sleep mode."), 0, ARG_TYPE_NONE}, + {"identify", 'i', 0, N_("Print drive identity and settings."), + 0, ARG_TYPE_NONE}, + {"dumpid", 'I', 0, N_("Show raw contents of ATA IDENTIFY sector."), + 0, ARG_TYPE_NONE}, + {"smart", -1, 0, N_("Disable/enable SMART (0/1)."), 0, ARG_TYPE_INT}, + {"quiet", 'q', 0, N_("Do not print messages."), 0, ARG_TYPE_NONE}, + {0, 0, 0, 0, 0, 0} +}; + +enum grub_ata_smart_commands + { + GRUB_ATA_FEAT_SMART_ENABLE = 0xd8, + GRUB_ATA_FEAT_SMART_DISABLE = 0xd9, + GRUB_ATA_FEAT_SMART_STATUS = 0xda, + }; + +static int quiet = 0; + +static grub_err_t +grub_hdparm_do_ata_cmd (grub_ata_t ata, grub_uint8_t cmd, + grub_uint8_t features, grub_uint8_t sectors, + void * buffer, int size) +{ + struct grub_disk_ata_pass_through_parms apt; + grub_memset (&apt, 0, sizeof (apt)); + + apt.taskfile.cmd = cmd; + apt.taskfile.features = features; + apt.taskfile.sectors = sectors; + apt.taskfile.disk = 0xE0; + + apt.buffer = buffer; + apt.size = size; + + if (ata->dev->readwrite (ata, &apt, 0)) + return grub_errno; + + return GRUB_ERR_NONE; +} + +static int +grub_hdparm_do_check_powermode_cmd (grub_ata_t ata) +{ + struct grub_disk_ata_pass_through_parms apt; + grub_memset (&apt, 0, sizeof (apt)); + + apt.taskfile.cmd = GRUB_ATA_CMD_CHECK_POWER_MODE; + apt.taskfile.disk = 0xE0; + + if (ata->dev->readwrite (ata, &apt, 0)) + return -1; + + return apt.taskfile.sectors; +} + +static int +grub_hdparm_do_smart_cmd (grub_ata_t ata, grub_uint8_t features) +{ + struct grub_disk_ata_pass_through_parms apt; + grub_memset (&apt, 0, sizeof (apt)); + + apt.taskfile.cmd = GRUB_ATA_CMD_SMART; + apt.taskfile.features = features; + apt.taskfile.lba_mid = 0x4f; + apt.taskfile.lba_high = 0xc2; + apt.taskfile.disk = 0xE0; + + if (ata->dev->readwrite (ata, &apt, 0)) + return -1; + + if (features == GRUB_ATA_FEAT_SMART_STATUS) + { + if ( apt.taskfile.lba_mid == 0x4f + && apt.taskfile.lba_high == 0xc2) + return 0; /* Good SMART status. */ + else if ( apt.taskfile.lba_mid == 0xf4 + && apt.taskfile.lba_high == 0x2c) + return 1; /* Bad SMART status. */ + else + return -1; + } + return 0; +} + +static grub_err_t +grub_hdparm_simple_cmd (const char * msg, + grub_ata_t ata, grub_uint8_t cmd) +{ + if (! quiet && msg) + grub_printf ("%s", msg); + + grub_err_t err = grub_hdparm_do_ata_cmd (ata, cmd, 0, 0, NULL, 0); + + if (! quiet && msg) + grub_printf ("%s\n", ! err ? "" : ": not supported"); + return err; +} + +static grub_err_t +grub_hdparm_set_val_cmd (const char * msg, int val, + grub_ata_t ata, grub_uint8_t cmd, + grub_uint8_t features, grub_uint8_t sectors) +{ + if (! quiet && msg && *msg) + { + if (val >= 0) + grub_printf ("Set %s to %d", msg, val); + else + grub_printf ("Disable %s", msg); + } + + grub_err_t err = grub_hdparm_do_ata_cmd (ata, cmd, features, sectors, + NULL, 0); + + if (! quiet && msg) + grub_printf ("%s\n", ! err ? "" : ": not supported"); + return err; +} + +static const char * +le16_to_char (grub_uint16_t *dest, const grub_uint16_t * src16, unsigned bytes) +{ + unsigned i; + for (i = 0; i < bytes / 2; i++) + dest[i] = grub_swap_bytes16 (src16[i]); + dest[i] = 0; + return (char *) dest; +} + +static void +grub_hdparm_print_identify (const grub_uint16_t * idw) +{ + /* Print identity strings. */ + grub_uint16_t tmp[21]; + grub_printf ("Model: \"%.40s\"\n", le16_to_char (tmp, &idw[27], 40)); + grub_printf ("Firmware: \"%.8s\"\n", le16_to_char (tmp, &idw[23], 8)); + grub_printf ("Serial: \"%.20s\"\n", le16_to_char (tmp, &idw[10], 20)); + + /* Print AAM, APM and SMART settings. */ + grub_uint16_t features1 = grub_le_to_cpu16 (idw[82]); + grub_uint16_t features2 = grub_le_to_cpu16 (idw[83]); + grub_uint16_t enabled1 = grub_le_to_cpu16 (idw[85]); + grub_uint16_t enabled2 = grub_le_to_cpu16 (idw[86]); + + grub_printf ("Automatic Acoustic Management: "); + if (features2 & 0x0200) + { + if (enabled2 & 0x0200) + { + grub_uint16_t aam = grub_le_to_cpu16 (idw[94]); + grub_printf ("%u (128=quiet, ..., 254=fast, recommended=%u)\n", + aam & 0xff, (aam >> 8) & 0xff); + } + else + grub_printf ("disabled\n"); + } + else + grub_printf ("not supported\n"); + + grub_printf ("Advanced Power Management: "); + if (features2 & 0x0008) + { + if (enabled2 & 0x0008) + grub_printf ("%u (1=low, ..., 254=high)\n", + grub_le_to_cpu16 (idw[91]) & 0xff); + else + grub_printf ("disabled\n"); + } + else + grub_printf ("not supported\n"); + + grub_printf ("SMART Feature Set: "); + if (features1 & 0x0001) + grub_printf ("%sabled\n", (enabled1 & 0x0001 ? "en" : "dis")); + else + grub_printf ("not supported\n"); + + /* Print security settings. */ + grub_uint16_t security = grub_le_to_cpu16 (idw[128]); + + grub_printf ("ATA Security: "); + if (security & 0x0001) + grub_printf ("%s, %s, %s, %s\n", + (security & 0x0002 ? "ENABLED" : "disabled"), + (security & 0x0004 ? "**LOCKED**" : "not locked"), + (security & 0x0008 ? "frozen" : "NOT FROZEN"), + (security & 0x0010 ? "COUNT EXPIRED" : "count not expired")); + else + grub_printf ("not supported\n"); +} + +static void +grub_hdparm_print_standby_tout (int timeout) +{ + if (timeout == 0) + grub_printf ("off"); + else if (timeout <= 252 || timeout == 255) + { + int h = 0, m = 0 , s = 0; + if (timeout == 255) + { + m = 21; + s = 15; + } + else if (timeout == 252) + m = 21; + else if (timeout <= 240) + { + s = timeout * 5; + m = s / 60; + s %= 60; + } + else + { + m = (timeout - 240) * 30; + h = m / 60; + m %= 60; + } + grub_printf ("%02d:%02d:%02d", h, m, s); + } + else + grub_printf ("invalid or vendor-specific"); +} + +static int get_int_arg (const struct grub_arg_list *state) +{ + return (state->set ? (int)grub_strtoul (state->arg, 0, 0) : -1); +} + +static grub_err_t +grub_cmd_hdparm (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + struct grub_ata *ata; + const char *diskname; + + /* Check command line. */ + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + if (args[0][0] == '(') + { + grub_size_t len = grub_strlen (args[0]); + if (args[0][len - 1] == ')') + args[0][len - 1] = 0; + diskname = &args[0][1]; + } + else + diskname = &args[0][0]; + + int i = 0; + int apm = get_int_arg (&state[i++]); + int power = state[i++].set; + int sec_freeze = state[i++].set; + int health = state[i++].set; + int aam = get_int_arg (&state[i++]); + int standby_tout = get_int_arg (&state[i++]); + int standby_now = state[i++].set; + int sleep_now = state[i++].set; + int ident = state[i++].set; + int dumpid = state[i++].set; + int enable_smart = get_int_arg (&state[i++]); + quiet = state[i++].set; + + /* Open disk. */ + grub_disk_t disk = grub_disk_open (diskname); + if (! disk) + return grub_errno; + + switch (disk->dev->id) + { + case GRUB_DISK_DEVICE_ATA_ID: + ata = disk->data; + break; + case GRUB_DISK_DEVICE_SCSI_ID: + if (((disk->id >> GRUB_SCSI_ID_SUBSYSTEM_SHIFT) & 0xFF) + == GRUB_SCSI_SUBSYSTEM_PATA + || (((disk->id >> GRUB_SCSI_ID_SUBSYSTEM_SHIFT) & 0xFF) + == GRUB_SCSI_SUBSYSTEM_AHCI)) + { + ata = ((struct grub_scsi *) disk->data)->data; + break; + } + /* FALLTHROUGH */ + default: + grub_disk_close (disk); + return grub_error (GRUB_ERR_IO, "not an ATA device"); + } + + + /* Change settings. */ + if (aam >= 0) + grub_hdparm_set_val_cmd ("Automatic Acoustic Management", (aam ? aam : -1), + ata, GRUB_ATA_CMD_SET_FEATURES, + (aam ? 0x42 : 0xc2), aam); + + if (apm >= 0) + grub_hdparm_set_val_cmd ("Advanced Power Management", + (apm != 255 ? apm : -1), ata, + GRUB_ATA_CMD_SET_FEATURES, + (apm != 255 ? 0x05 : 0x85), + (apm != 255 ? apm : 0)); + + if (standby_tout >= 0) + { + if (! quiet) + { + grub_printf ("Set standby timeout to %d (", standby_tout); + grub_hdparm_print_standby_tout (standby_tout); + grub_printf (")"); + } + /* The IDLE cmd sets disk to idle mode and configures standby timer. */ + grub_hdparm_set_val_cmd ("", -1, ata, GRUB_ATA_CMD_IDLE, 0, standby_tout); + } + + if (enable_smart >= 0) + { + if (! quiet) + grub_printf ("%sable SMART operations", (enable_smart ? "En" : "Dis")); + int err = grub_hdparm_do_smart_cmd (ata, (enable_smart ? + GRUB_ATA_FEAT_SMART_ENABLE : GRUB_ATA_FEAT_SMART_DISABLE)); + if (! quiet) + grub_printf ("%s\n", err ? ": not supported" : ""); + } + + if (sec_freeze) + grub_hdparm_simple_cmd ("Freeze security settings", ata, + GRUB_ATA_CMD_SECURITY_FREEZE_LOCK); + + /* Print/dump IDENTIFY. */ + if (ident || dumpid) + { + grub_uint16_t buf[GRUB_DISK_SECTOR_SIZE / 2]; + if (grub_hdparm_do_ata_cmd (ata, GRUB_ATA_CMD_IDENTIFY_DEVICE, + 0, 0, buf, sizeof (buf))) + grub_printf ("Cannot read ATA IDENTIFY data\n"); + else + { + if (ident) + grub_hdparm_print_identify (buf); + if (dumpid) + hexdump (0, (char *) buf, sizeof (buf)); + } + } + + /* Check power mode. */ + if (power) + { + grub_printf ("Disk power mode is: "); + int mode = grub_hdparm_do_check_powermode_cmd (ata); + if (mode < 0) + grub_printf ("unknown\n"); + else + grub_printf ("%s (0x%02x)\n", + (mode == 0xff ? "active/idle" : + mode == 0x80 ? "idle" : + mode == 0x00 ? "standby" : "unknown"), mode); + } + + /* Check health. */ + int status = 0; + if (health) + { + if (! quiet) + grub_printf ("SMART status is: "); + int err = grub_hdparm_do_smart_cmd (ata, GRUB_ATA_FEAT_SMART_STATUS); + if (! quiet) + grub_printf ("%s\n", (err < 0 ? "unknown" : + err == 0 ? "OK" : "*BAD*")); + status = (err > 0); + } + + /* Change power mode. */ + if (standby_now) + grub_hdparm_simple_cmd ("Set disk to standby mode", ata, + GRUB_ATA_CMD_STANDBY_IMMEDIATE); + + if (sleep_now) + grub_hdparm_simple_cmd ("Set disk to sleep mode", ata, + GRUB_ATA_CMD_SLEEP); + + grub_disk_close (disk); + + grub_errno = GRUB_ERR_NONE; + return status; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(hdparm) +{ + cmd = grub_register_extcmd ("hdparm", grub_cmd_hdparm, 0, + N_("[OPTIONS] DISK"), + N_("Get/set ATA disk parameters."), options); +} + +GRUB_MOD_FINI(hdparm) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/help.c b/grub-core/commands/help.c new file mode 100644 index 000000000..f0be89baa --- /dev/null +++ b/grub-core/commands/help.c @@ -0,0 +1,153 @@ +/* help.c - command to show a help text. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc, + char **args) +{ + int cnt = 0; + char *currarg; + + if (argc == 0) + { + grub_command_t cmd; + FOR_COMMANDS(cmd) + { + if ((cmd->prio & GRUB_COMMAND_FLAG_ACTIVE)) + { + struct grub_term_output *term; + const char *summary_translated = _(cmd->summary); + char *command_help; + grub_uint32_t *unicode_command_help; + grub_uint32_t *unicode_last_position; + + command_help = grub_xasprintf ("%s %s", cmd->name, summary_translated); + if (!command_help) + break; + + grub_utf8_to_ucs4_alloc (command_help, &unicode_command_help, + &unicode_last_position); + + FOR_ACTIVE_TERM_OUTPUTS(term) + { + unsigned stringwidth; + grub_uint32_t *unicode_last_screen_position; + + unicode_last_screen_position = unicode_command_help; + + stringwidth = 0; + + while (unicode_last_screen_position < unicode_last_position && + stringwidth < ((grub_term_width (term) / 2) - 2)) + { + struct grub_unicode_glyph glyph; + unicode_last_screen_position + += grub_unicode_aglomerate_comb (unicode_last_screen_position, + unicode_last_position + - unicode_last_screen_position, + &glyph); + + stringwidth + += grub_term_getcharwidth (term, &glyph); + } + + grub_print_ucs4 (unicode_command_help, + unicode_last_screen_position, 0, 0, term); + if (!(cnt % 2)) + grub_print_spaces (term, grub_term_width (term) / 2 + - stringwidth); + } + + if (cnt % 2) + grub_printf ("\n"); + cnt++; + + grub_free (command_help); + grub_free (unicode_command_help); + } + } + if (!(cnt % 2)) + grub_printf ("\n"); + } + else + { + int i; + grub_command_t cmd_iter, cmd, cmd_next; + + for (i = 0; i < argc; i++) + { + currarg = args[i]; + + FOR_COMMANDS_SAFE (cmd_iter, cmd_next) + { + if (!(cmd_iter->prio & GRUB_COMMAND_FLAG_ACTIVE)) + continue; + + if (grub_strncmp (cmd_iter->name, currarg, + grub_strlen (currarg)) != 0) + continue; + if (cmd_iter->flags & GRUB_COMMAND_FLAG_DYNCMD) + cmd = grub_dyncmd_get_cmd (cmd_iter); + else + cmd = cmd_iter; + if (!cmd) + { + grub_print_error (); + continue; + } + if (cnt++ > 0) + grub_printf ("\n\n"); + + if ((cmd->flags & GRUB_COMMAND_FLAG_EXTCMD) && + ! (cmd->flags & GRUB_COMMAND_FLAG_DYNCMD)) + grub_arg_show_help ((grub_extcmd_t) cmd->data); + else + grub_printf ("%s %s %s\n%s\n", _("Usage:"), cmd->name, + _(cmd->summary), _(cmd->description)); + } + } + } + + return 0; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(help) +{ + cmd = grub_register_extcmd ("help", grub_cmd_help, 0, + N_("[PATTERN ...]"), + N_("Show a help message."), 0); +} + +GRUB_MOD_FINI(help) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/hexdump.c b/grub-core/commands/hexdump.c new file mode 100644 index 000000000..4c884b3a1 --- /dev/null +++ b/grub-core/commands/hexdump.c @@ -0,0 +1,133 @@ +/* hexdump.c - command to dump the contents of a file or memory */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = { + {"skip", 's', 0, N_("Skip offset bytes from the beginning of file."), 0, + ARG_TYPE_INT}, + {"length", 'n', 0, N_("Read only LENGTH bytes."), 0, ARG_TYPE_INT}, + {0, 0, 0, 0, 0, 0} +}; + +static grub_err_t +grub_cmd_hexdump (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + char buf[GRUB_DISK_SECTOR_SIZE * 4]; + grub_ssize_t size, length; + grub_disk_addr_t skip; + int namelen; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + namelen = grub_strlen (args[0]); + skip = (state[0].set) ? grub_strtoull (state[0].arg, 0, 0) : 0; + length = (state[1].set) ? grub_strtoul (state[1].arg, 0, 0) : 256; + + if (!grub_strcmp (args[0], "(mem)")) + hexdump (skip, (char *) (grub_addr_t) skip, length); + else if ((args[0][0] == '(') && (args[0][namelen - 1] == ')')) + { + grub_disk_t disk; + grub_disk_addr_t sector; + grub_size_t ofs; + + args[0][namelen - 1] = 0; + disk = grub_disk_open (&args[0][1]); + if (! disk) + return 0; + + sector = (skip >> (GRUB_DISK_SECTOR_BITS + 2)) * 4; + ofs = skip & (GRUB_DISK_SECTOR_SIZE * 4 - 1); + while (length) + { + grub_size_t len; + + len = length; + if (len > sizeof (buf)) + len = sizeof (buf); + + if (grub_disk_read (disk, sector, ofs, len, buf)) + break; + + hexdump (skip, buf, len); + + ofs = 0; + skip += len; + length -= len; + sector += 4; + } + + grub_disk_close (disk); + } + else + { + grub_file_t file; + + file = grub_file_open (args[0]); + if (! file) + return 0; + + file->offset = skip; + + while ((size = grub_file_read (file, buf, sizeof (buf))) > 0) + { + unsigned long len; + + len = ((length) && (size > length)) ? length : size; + hexdump (skip, buf, len); + skip += len; + if (length) + { + length -= len; + if (!length) + break; + } + } + + grub_file_close (file); + } + + return 0; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT (hexdump) +{ + cmd = grub_register_extcmd ("hexdump", grub_cmd_hexdump, 0, + N_("[OPTIONS] FILE_OR_DEVICE"), + N_("Show raw contents of a file or memory."), + options); +} + +GRUB_MOD_FINI (hexdump) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/i386/cmosdump.c b/grub-core/commands/i386/cmosdump.c new file mode 100644 index 000000000..626485ccb --- /dev/null +++ b/grub-core/commands/i386/cmosdump.c @@ -0,0 +1,64 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_cmosdump (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), char *argv[] __attribute__ ((unused))) +{ + int i; + + for (i = 0; i < 256; i++) + { + grub_err_t err; + grub_uint8_t value; + if ((i & 0xf) == 0) + grub_printf ("%02x: ", i); + + err = grub_cmos_read (i, &value); + if (err) + return err; + + grub_printf ("%02x ", value); + if ((i & 0xf) == 0xf) + grub_printf ("\n"); + } + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; + + +GRUB_MOD_INIT(cmosdump) +{ + cmd = grub_register_command ("cmosdump", grub_cmd_cmosdump, + 0, + N_("Show raw dump of the CMOS contents.")); +} + +GRUB_MOD_FINI(cmosdump) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/i386/cmostest.c b/grub-core/commands/i386/cmostest.c new file mode 100644 index 000000000..c839b704d --- /dev/null +++ b/grub-core/commands/i386/cmostest.c @@ -0,0 +1,124 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +parse_args (int argc, char *argv[], int *byte, int *bit) +{ + char *rest; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "address required"); + + *byte = grub_strtoul (argv[0], &rest, 0); + if (*rest != ':') + return grub_error (GRUB_ERR_BAD_ARGUMENT, "address required"); + + *bit = grub_strtoul (rest + 1, 0, 0); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + int byte = 0, bit = 0; + grub_err_t err; + grub_uint8_t value; + + err = parse_args (argc, argv, &byte, &bit); + if (err) + return err; + + err = grub_cmos_read (byte, &value); + if (err) + return err; + + if (value & (1 << bit)) + return GRUB_ERR_NONE; + + return grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); +} + +static grub_err_t +grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + int byte = 0, bit = 0; + grub_err_t err; + grub_uint8_t value; + + err = parse_args (argc, argv, &byte, &bit); + if (err) + return err; + err = grub_cmos_read (byte, &value); + if (err) + return err; + + return grub_cmos_write (byte, value & (~(1 << bit))); +} + +static grub_err_t +grub_cmd_cmosset (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + int byte = 0, bit = 0; + grub_err_t err; + grub_uint8_t value; + + err = parse_args (argc, argv, &byte, &bit); + if (err) + return err; + err = grub_cmos_read (byte, &value); + if (err) + return err; + + return grub_cmos_write (byte, value | (1 << bit)); +} + +static grub_command_t cmd, cmd_clean, cmd_set; + + +GRUB_MOD_INIT(cmostest) +{ + cmd = grub_register_command ("cmostest", grub_cmd_cmostest, + N_("BYTE:BIT"), + N_("Test bit at BYTE:BIT in CMOS.")); + cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean, + N_("BYTE:BIT"), + N_("Clear bit at BYTE:BIT in CMOS.")); + cmd_set = grub_register_command ("cmosset", grub_cmd_cmosset, + N_("BYTE:BIT"), + /* TRANSLATORS: A bit may be either set (1) or clear (0). */ + N_("Set bit at BYTE:BIT in CMOS.")); +} + +GRUB_MOD_FINI(cmostest) +{ + grub_unregister_command (cmd); + grub_unregister_command (cmd_clean); + grub_unregister_command (cmd_set); +} diff --git a/grub-core/commands/i386/coreboot/cb_timestamps.c b/grub-core/commands/i386/coreboot/cb_timestamps.c new file mode 100644 index 000000000..e72f38d6e --- /dev/null +++ b/grub-core/commands/i386/coreboot/cb_timestamps.c @@ -0,0 +1,126 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_uint32_t +tsc2ms (grub_uint64_t tsc) +{ + grub_uint64_t ah = tsc >> 32; + grub_uint64_t al = tsc & 0xffffffff; + + return ((al * grub_tsc_rate) >> 32) + ah * grub_tsc_rate; +} + +static const char *descs[] = { + [1] = "romstage", + [2] = "before RAM init", + [3] = "after RAM init", + [4] = "end of romstage", + [5] = "start of verified boot", + [6] = "end of verified boot", + [8] = "start of RAM copy", + [9] = "end of RAM copy", + [10] = "start of ramstage", + [11] = "start of bootblock", + [12] = "end of bootblock", + [13] = "starting to load romstage", + [14] = "finished loading romstage", + [15] = "starting LZMA decompress (ignore for x86)", + [16] = "finished LZMA decompress (ignore for x86)", + [30] = "device enumerate", + [40] = "device configure", + [50] = "device enable", + [60] = "device initialize", + [70] = "device done", + [75] = "CBMEM POST", + [80] = "writing tables", + [90] = "loading payload", + [98] = "wake jump", + [99] = "selfboot jump", +}; + +static int +iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, + void *data) +{ + int *available = data; + grub_uint64_t last_tsc = 0; + struct grub_linuxbios_timestamp_table *ts_table; + unsigned i; + + if (table_item->tag != GRUB_LINUXBIOS_MEMBER_TIMESTAMPS) + return 0; + + *available = 1; + ts_table = (struct grub_linuxbios_timestamp_table *) (grub_addr_t) + *(grub_uint64_t *) (table_item + 1); + + for (i = 0; i < ts_table->used; i++) + { + grub_uint32_t tmabs = tsc2ms (ts_table->entries[i].tsc); + grub_uint32_t tmrel = tsc2ms (ts_table->entries[i].tsc - last_tsc); + last_tsc = ts_table->entries[i].tsc; + + grub_printf ("%3d.%03ds %2d.%03ds %02d %s\n", + tmabs / 1000, tmabs % 1000, tmrel / 1000, tmrel % 1000, + ts_table->entries[i].id, + (ts_table->entries[i].id < ARRAY_SIZE (descs) + && descs[ts_table->entries[i].id]) + ? descs[ts_table->entries[i].id] : ""); + } + return 1; +} + + +static grub_err_t +grub_cmd_coreboot_boottime (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + int available = 0; + + grub_linuxbios_table_iterate (iterate_linuxbios_table, &available); + if (!available) + { + grub_puts_ (N_("No boot time statistics is available\n")); + return 0; + } + return 0; +} + +static grub_command_t cmd_boottime; + +GRUB_MOD_INIT(cbtime) +{ + cmd_boottime = + grub_register_command ("coreboot_boottime", grub_cmd_coreboot_boottime, + 0, N_("Show coreboot boot time statistics.")); +} + +GRUB_MOD_FINI(cbtime) +{ + grub_unregister_command (cmd_boottime); +} diff --git a/grub-core/commands/i386/coreboot/cbls.c b/grub-core/commands/i386/coreboot/cbls.c new file mode 100644 index 000000000..e0a10596f --- /dev/null +++ b/grub-core/commands/i386/coreboot/cbls.c @@ -0,0 +1,143 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const char *console_descs[] = { + "8250 UART", + "VGA", + "BTEXT", + "log buffer console", + "SROM", + "EHCI debug", + "memory-mapped 8250 UART" +}; + +static const char *descs[] = { + [GRUB_LINUXBIOS_MEMBER_MEMORY] = "memory map (`lsmmap' to list)", + [GRUB_LINUXBIOS_MEMBER_MAINBOARD] = "mainboard", + [4] = "version", + [5] = "extra version", + [6] = "build", + [7] = "compile time", + [8] = "compile by", + [9] = "compile host", + [0xa] = "compile domain", + [0xb] = "compiler", + [0xc] = "linker", + [0xd] = "assembler", + [0xf] = "serial", + [GRUB_LINUXBIOS_MEMBER_CONSOLE] = "console", + [GRUB_LINUXBIOS_MEMBER_FRAMEBUFFER] = "framebuffer", + [0x13] = "GPIO", + [0x15] = "VDAT", + [GRUB_LINUXBIOS_MEMBER_TIMESTAMPS] = "timestamps (`coreboot_boottime' to list)", + [GRUB_LINUXBIOS_MEMBER_CBMEMC] = "CBMEM console (`cbmemc' to list)", + [0x18] = "MRC cache", + [0x19] = "VBNV", + [0xc8] = "CMOS option table", + [0xc9] = "CMOS option", + [0xca] = "CMOS option enum", + [0xcb] = "CMOS option defaults", + [0xcc] = "CMOS checksum", +}; + +static int +iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, + void *data __attribute__ ((unused))) +{ + if (table_item->tag < ARRAY_SIZE (descs) && descs[table_item->tag]) + grub_printf ("tag=%02x size=%02x %s", + table_item->tag, table_item->size, descs[table_item->tag]); + else + grub_printf ("tag=%02x size=%02x", + table_item->tag, table_item->size); + + switch (table_item->tag) + { + case GRUB_LINUXBIOS_MEMBER_FRAMEBUFFER: + { + struct grub_linuxbios_table_framebuffer *fb; + fb = (struct grub_linuxbios_table_framebuffer *) (table_item + 1); + + grub_printf (": %dx%dx%d pitch=%d lfb=0x%llx %d/%d/%d/%d %d/%d/%d/%d", + fb->width, fb->height, + fb->bpp, fb->pitch, + (unsigned long long) fb->lfb, + fb->red_mask_size, fb->green_mask_size, + fb->blue_mask_size, fb->reserved_mask_size, + fb->red_field_pos, fb->green_field_pos, + fb->blue_field_pos, fb->reserved_field_pos); + break; + } + case GRUB_LINUXBIOS_MEMBER_MAINBOARD: + { + struct grub_linuxbios_mainboard *mb; + mb = (struct grub_linuxbios_mainboard *) (table_item + 1); + grub_printf (": vendor=`%s' part_number=`%s'", + mb->strings + mb->vendor, + mb->strings + mb->part_number); + break; + } + case 0x04 ... 0x0d: + grub_printf (": `%s'", (char *) (table_item + 1)); + break; + case GRUB_LINUXBIOS_MEMBER_CONSOLE: + { + grub_uint16_t *val = (grub_uint16_t *) (table_item + 1); + grub_printf (": id=%d", *val); + if (*val < ARRAY_SIZE (console_descs) + && console_descs[*val]) + grub_printf (" %s", console_descs[*val]); + } + } + grub_printf ("\n"); + + return 0; +} + + +static grub_err_t +grub_cmd_lscoreboot (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + grub_linuxbios_table_iterate (iterate_linuxbios_table, 0); + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(cbls) +{ + cmd = + grub_register_command ("lscoreboot", grub_cmd_lscoreboot, + 0, N_("List coreboot tables.")); +} + +GRUB_MOD_FINI(cbls) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/i386/cpuid.c b/grub-core/commands/i386/cpuid.c new file mode 100644 index 000000000..42b984154 --- /dev/null +++ b/grub-core/commands/i386/cpuid.c @@ -0,0 +1,125 @@ +/* cpuid.c - test for CPU features */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + * Based on gcc/gcc/config/i386/driver-i386.c + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + /* TRANSLATORS: "(default)" at the end means that this option is used if + no argument is specified. */ + {"long-mode", 'l', 0, N_("Check if CPU supports 64-bit (long) mode (default)."), 0, 0}, + {"pae", 'p', 0, N_("Check if CPU supports Physical Address Extension."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +enum + { + MODE_LM = 0, + MODE_PAE = 1 + }; + +enum + { + bit_PAE = (1 << 6), + }; +enum + { + bit_LM = (1 << 29) + }; + +unsigned char grub_cpuid_has_longmode = 0, grub_cpuid_has_pae = 0; + +static grub_err_t +grub_cmd_cpuid (grub_extcmd_context_t ctxt, + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + int val = 0; + if (ctxt->state[MODE_PAE].set) + val = grub_cpuid_has_pae; + else + val = grub_cpuid_has_longmode; + return val ? GRUB_ERR_NONE + /* TRANSLATORS: it's a standalone boolean value, + opposite of "true". */ + : grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(cpuid) +{ +#ifdef __x86_64__ + /* grub-emu */ + grub_cpuid_has_longmode = 1; + grub_cpuid_has_pae = 1; +#else + unsigned int eax, ebx, ecx, edx; + unsigned int max_level; + unsigned int ext_level; + + /* See if we can use cpuid. */ + asm volatile ("pushfl; pushfl; popl %0; movl %0,%1; xorl %2,%0;" + "pushl %0; popfl; pushfl; popl %0; popfl" + : "=&r" (eax), "=&r" (ebx) + : "i" (0x00200000)); + if (((eax ^ ebx) & 0x00200000) == 0) + goto done; + + /* Check the highest input value for eax. */ + grub_cpuid (0, eax, ebx, ecx, edx); + /* We only look at the first four characters. */ + max_level = eax; + if (max_level == 0) + goto done; + + if (max_level >= 1) + { + grub_cpuid (1, eax, ebx, ecx, edx); + grub_cpuid_has_pae = !!(edx & bit_PAE); + } + + grub_cpuid (0x80000000, eax, ebx, ecx, edx); + ext_level = eax; + if (ext_level < 0x80000000) + goto done; + + grub_cpuid (0x80000001, eax, ebx, ecx, edx); + grub_cpuid_has_longmode = !!(edx & bit_LM); +done: +#endif + + cmd = grub_register_extcmd ("cpuid", grub_cmd_cpuid, 0, + "[-l]", N_("Check for CPU features."), options); +} + +GRUB_MOD_FINI(cpuid) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/i386/pc/drivemap.c b/grub-core/commands/i386/pc/drivemap.c new file mode 100644 index 000000000..7f7f2d41c --- /dev/null +++ b/grub-core/commands/i386/pc/drivemap.c @@ -0,0 +1,428 @@ +/* drivemap.c - command to manage the BIOS drive mappings. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Real mode IVT slot (seg:off far pointer) for interrupt 0x13. */ +static grub_uint32_t *const int13slot = (grub_uint32_t *) (4 * 0x13); + +/* Remember to update enum opt_idxs accordingly. */ +static const struct grub_arg_option options[] = { + /* TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if + your language doesn't have an equivalent of "mapping" you can + use the word like "rerouting". + */ + {"list", 'l', 0, N_("Show the current mappings."), 0, 0}, + {"reset", 'r', 0, N_("Reset all mappings to the default values."), 0, 0}, + {"swap", 's', 0, N_("Perform both direct and reverse mappings."), 0, 0}, + {0, 0, 0, 0, 0, 0} +}; + +/* Remember to update options[] accordingly. */ +enum opt_idxs +{ + OPTIDX_LIST = 0, + OPTIDX_RESET, + OPTIDX_SWAP, +}; + +/* Realmode far ptr (2 * 16b) to the previous INT13h handler. */ +extern grub_uint32_t grub_drivemap_oldhandler; + +/* The type "void" is used for imported assembly labels, takes no storage and + serves just to take the address with &label. */ + +/* The assembly function to replace the old INT13h handler. It does not follow + any C callspecs and returns with IRET. */ +extern const void grub_drivemap_handler; + +/* Start of the drive mappings area (space reserved at runtime). */ +extern const void grub_drivemap_mapstart; + +typedef struct drivemap_node +{ + struct drivemap_node *next; + grub_uint8_t newdrive; + grub_uint8_t redirto; +} drivemap_node_t; + +typedef struct GRUB_PACKED int13map_node +{ + grub_uint8_t disknum; + grub_uint8_t mapto; +} int13map_node_t; + +#define INT13H_OFFSET(x) \ + (((grub_uint8_t *)(x)) - ((grub_uint8_t *)&grub_drivemap_handler)) + +static drivemap_node_t *map_head; +static void *drivemap_hook; +static int drivemap_mmap; + +/* Puts the specified mapping into the table, replacing an existing mapping + for newdrive or adding a new one if required. */ +static grub_err_t +drivemap_set (grub_uint8_t newdrive, grub_uint8_t redirto) +{ + drivemap_node_t *mapping = 0; + drivemap_node_t *search = map_head; + while (search) + { + if (search->newdrive == newdrive) + { + mapping = search; + break; + } + search = search->next; + } + + /* Check for pre-existing mappings to modify before creating a new one. */ + if (mapping) + mapping->redirto = redirto; + else + { + mapping = grub_malloc (sizeof (drivemap_node_t)); + if (! mapping) + return grub_errno; + mapping->newdrive = newdrive; + mapping->redirto = redirto; + mapping->next = map_head; + map_head = mapping; + } + return GRUB_ERR_NONE; +} + +/* Removes the mapping for newdrive from the table. If there is no mapping, + then this function behaves like a no-op on the map. */ +static void +drivemap_remove (grub_uint8_t newdrive) +{ + drivemap_node_t *mapping = 0; + drivemap_node_t *search = map_head; + drivemap_node_t *previous = 0; + + while (search) + { + if (search->newdrive == newdrive) + { + mapping = search; + break; + } + previous = search; + search = search->next; + } + + if (mapping) + { + if (previous) + previous->next = mapping->next; + else + map_head = mapping->next; + grub_free (mapping); + } +} + +/* Given a GRUB-like device name and a convenient location, stores the + related BIOS disk number. Accepts devices like \((f|h)dN\), with + 0 <= N < 128. */ +static grub_err_t +tryparse_diskstring (const char *str, grub_uint8_t *output) +{ + /* Skip opening paren in order to allow both (hd0) and hd0. */ + if (*str == '(') + str++; + if ((str[0] == 'f' || str[0] == 'h') && str[1] == 'd') + { + grub_uint8_t bios_num = (str[0] == 'h') ? 0x80 : 0x00; + unsigned long drivenum = grub_strtoul (str + 2, 0, 0); + if (grub_errno == GRUB_ERR_NONE && drivenum < 128) + { + bios_num |= drivenum; + if (output) + *output = bios_num; + return GRUB_ERR_NONE; + } + } + return grub_error (GRUB_ERR_BAD_ARGUMENT, "device format \"%s\" " + "invalid: must be (f|h)dN, with 0 <= N < 128", str); +} + +static grub_err_t +list_mappings (void) +{ + /* Show: list mappings. */ + if (! map_head) + { + grub_puts_ (N_("No drives have been remapped")); + return GRUB_ERR_NONE; + } + + /* TRANSLATORS: This is the header of mapping list. + On the left is how OS will see the disks and + on the right current GRUB vision. */ + grub_puts_ (N_("OS disk #num ------> GRUB/BIOS device")); + drivemap_node_t *curnode = map_head; + while (curnode) + { + grub_printf ("%cD #%-3u (0x%02x) %cd%d\n", + (curnode->newdrive & 0x80) ? 'H' : 'F', + curnode->newdrive & 0x7F, curnode->newdrive, + (curnode->redirto & 0x80) ? 'h' : 'f', + curnode->redirto & 0x7F + ); + curnode = curnode->next; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_drivemap (struct grub_extcmd_context *ctxt, int argc, char **args) +{ + if (ctxt->state[OPTIDX_LIST].set) + { + return list_mappings (); + } + else if (ctxt->state[OPTIDX_RESET].set) + { + /* Reset: just delete all mappings, freeing their memory. */ + drivemap_node_t *curnode = map_head; + drivemap_node_t *prevnode = 0; + while (curnode) + { + prevnode = curnode; + curnode = curnode->next; + grub_free (prevnode); + } + map_head = 0; + return GRUB_ERR_NONE; + } + else if (!ctxt->state[OPTIDX_SWAP].set && argc == 0) + { + /* No arguments */ + return list_mappings (); + } + + /* Neither flag: put mapping. */ + grub_uint8_t mapfrom = 0; + grub_uint8_t mapto = 0xFF; + grub_err_t err; + + if (argc != 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + err = tryparse_diskstring (args[0], &mapfrom); + if (err != GRUB_ERR_NONE) + return err; + + err = tryparse_diskstring (args[1], &mapto); + if (err != GRUB_ERR_NONE) + return err; + + if (mapto == mapfrom) + { + /* Reset to default. */ + grub_dprintf ("drivemap", "Removing mapping for %s (%02x)\n", + args[0], mapfrom); + drivemap_remove (mapfrom); + return GRUB_ERR_NONE; + } + /* Set the mapping for the disk (overwrites any existing mapping). */ + grub_dprintf ("drivemap", "%s %s (%02x) = %s (%02x)\n", + ctxt->state[OPTIDX_SWAP].set ? "Swapping" : "Mapping", + args[1], mapto, args[0], mapfrom); + err = drivemap_set (mapto, mapfrom); + /* If -s, perform the reverse mapping too (only if the first was OK). */ + if (ctxt->state[OPTIDX_SWAP].set && err == GRUB_ERR_NONE) + err = drivemap_set (mapfrom, mapto); + return err; +} + +/* Int13h handler installer - reserves conventional memory for the handler, + copies it over and sets the IVT entry for int13h. + This code rests on the assumption that GRUB does not activate any kind + of memory mapping apart from identity paging, since it accesses + realmode structures by their absolute addresses, like the IVT at 0; + and transforms a pmode pointer into a rmode seg:off far ptr. */ +static grub_err_t +install_int13_handler (int noret __attribute__ ((unused))) +{ + /* Size of the full int13 handler "bundle", including code and map. */ + grub_uint32_t total_size; + /* Base address of the space reserved for the handler bundle. */ + grub_uint8_t *handler_base = 0; + /* Address of the map within the deployed bundle. */ + int13map_node_t *handler_map; + + int i; + int entries = 0; + drivemap_node_t *curentry = map_head; + + /* Count entries to prepare a contiguous map block. */ + while (curentry) + { + entries++; + curentry = curentry->next; + } + if (entries == 0) + { + /* No need to install the int13h handler. */ + grub_dprintf ("drivemap", "No drives marked as remapped, not installing " + "our int13h handler.\n"); + return GRUB_ERR_NONE; + } + + grub_dprintf ("drivemap", "Installing our int13h handler\n"); + + /* Save the pointer to the old handler. */ + grub_drivemap_oldhandler = *int13slot; + grub_dprintf ("drivemap", "Original int13 handler: %04x:%04x\n", + (grub_drivemap_oldhandler >> 16) & 0x0ffff, + grub_drivemap_oldhandler & 0x0ffff); + + /* Find a rmode-segment-aligned zone in conventional memory big + enough to hold the handler and its data. */ + total_size = INT13H_OFFSET (&grub_drivemap_mapstart) + + (entries + 1) * sizeof (int13map_node_t); + grub_dprintf ("drivemap", "Payload is %u bytes long\n", total_size); + handler_base = grub_mmap_malign_and_register (16, ALIGN_UP (total_size, 16), + &drivemap_mmap, + GRUB_MEMORY_RESERVED, + GRUB_MMAP_MALLOC_LOW); + if (! handler_base) + return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't reserve " + "memory for the int13h handler"); + + /* Copy int13h handler bundle to reserved area. */ + grub_dprintf ("drivemap", "Reserved memory at %p, copying handler\n", + handler_base); + grub_memcpy (handler_base, &grub_drivemap_handler, + INT13H_OFFSET (&grub_drivemap_mapstart)); + + /* Copy the mappings to the reserved area. */ + curentry = map_head; + handler_map = (int13map_node_t *) (handler_base + + INT13H_OFFSET (&grub_drivemap_mapstart)); + grub_dprintf ("drivemap", "Target map at %p, copying mappings\n", handler_map); + for (i = 0; i < entries; ++i, curentry = curentry->next) + { + handler_map[i].disknum = curentry->newdrive; + handler_map[i].mapto = curentry->redirto; + grub_dprintf ("drivemap", "\t#%d: 0x%02x <- 0x%02x\n", i, + handler_map[i].disknum, handler_map[i].mapto); + } + /* Signal end-of-map. */ + handler_map[i].disknum = 0; + handler_map[i].mapto = 0; + grub_dprintf ("drivemap", "\t#%d: 0x00 <- 0x00 (end)\n", i); + + /* Install our function as the int13h handler in the IVT. */ + *int13slot = ((grub_uint32_t) handler_base) << 12; /* Segment address. */ + grub_dprintf ("drivemap", "New int13 handler: %04x:%04x\n", + (*int13slot >> 16) & 0x0ffff, *int13slot & 0x0ffff); + + return GRUB_ERR_NONE; +} + +static grub_err_t +uninstall_int13_handler (void) +{ + if (! grub_drivemap_oldhandler) + return GRUB_ERR_NONE; + + *int13slot = grub_drivemap_oldhandler; + grub_mmap_free_and_unregister (drivemap_mmap); + grub_drivemap_oldhandler = 0; + grub_dprintf ("drivemap", "Restored int13 handler: %04x:%04x\n", + (*int13slot >> 16) & 0x0ffff, *int13slot & 0x0ffff); + + return GRUB_ERR_NONE; +} + +static int +grub_get_root_biosnumber_drivemap (void) +{ + const char *biosnum; + int ret = -1; + grub_device_t dev; + + biosnum = grub_env_get ("biosnum"); + + if (biosnum) + return grub_strtoul (biosnum, 0, 0); + + dev = grub_device_open (0); + if (dev && dev->disk && dev->disk->dev + && dev->disk->dev->id == GRUB_DISK_DEVICE_BIOSDISK_ID) + { + drivemap_node_t *curnode = map_head; + ret = (int) dev->disk->id; + while (curnode) + { + if (curnode->redirto == ret) + { + ret = curnode->newdrive; + break; + } + curnode = curnode->next; + } + + } + + if (dev) + grub_device_close (dev); + + return ret; +} + +static grub_extcmd_t cmd; +static int (*grub_get_root_biosnumber_saved) (void); + +GRUB_MOD_INIT (drivemap) +{ + grub_get_root_biosnumber_saved = grub_get_root_biosnumber; + grub_get_root_biosnumber = grub_get_root_biosnumber_drivemap; + cmd = grub_register_extcmd ("drivemap", grub_cmd_drivemap, 0, + N_("-l | -r | [-s] grubdev osdisk."), + N_("Manage the BIOS drive mappings."), + options); + drivemap_hook = + grub_loader_register_preboot_hook (&install_int13_handler, + &uninstall_int13_handler, + GRUB_LOADER_PREBOOT_HOOK_PRIO_NORMAL); +} + +GRUB_MOD_FINI (drivemap) +{ + grub_get_root_biosnumber = grub_get_root_biosnumber_saved; + grub_loader_unregister_preboot_hook (drivemap_hook); + drivemap_hook = 0; + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/i386/pc/drivemap_int13h.S b/grub-core/commands/i386/pc/drivemap_int13h.S new file mode 100644 index 000000000..3c87521b6 --- /dev/null +++ b/grub-core/commands/i386/pc/drivemap_int13h.S @@ -0,0 +1,124 @@ +/* drivemap_int13h.S - interrupt handler for the BIOS drive remapper */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#define INT13H_OFFSET(x) ((x) - LOCAL (base)) + +.code16 + +/* Copy starts here. When deployed, this code must be segment-aligned. */ + +/* The replacement int13 handler. Preserve all registers. */ +FUNCTION(grub_drivemap_handler) +LOCAL (base): + /* Save %dx for future restore. */ + push %dx + /* Push flags. Used to simulate interrupt with original flags. */ + pushf + + /* Map the drive number (always in DL). */ + push %ax + push %bx +#ifdef __APPLE__ + LOCAL(mapstart_offset) = INT13H_OFFSET(LOCAL (mapstart)) + movw $LOCAL(mapstart_offset), %bx +#else + movw $INT13H_OFFSET(LOCAL (mapstart)), %bx +#endif + +more_remaining: + movw %cs:(%bx), %ax + cmpb %ah, %al + jz not_found /* DRV=DST => map end - drive not remapped, keep DL. */ + inc %bx + inc %bx + cmpb %dl, %al + jnz more_remaining /* Not found, but more remaining, loop. */ + movb %ah, %dl /* Found - drive remapped, modify DL. */ + +not_found: + pop %bx + pop %ax + + /* If the call isn't ah=0x8 or ah=0x15 we must restore %dx. */ + cmpb $0x8, %ah + jz norestore + cmpb $0x15, %ah + jz norestore + + /* Restore flags. */ + popf + pushf + +#ifdef __APPLE__ + LOCAL(oldhandler_offset) = INT13H_OFFSET (LOCAL (oldhandler)) + lcall *%cs:LOCAL(oldhandler_offset) +#else + lcall *%cs:INT13H_OFFSET (LOCAL (oldhandler)) +#endif + + push %bp + mov %sp, %bp + +tail: + /* Save new flags below %esp so the caller will recieve new flags. */ + pushf + pop %dx + mov %dx, 8(%bp) + + pop %bp + + /* Restore %dx. */ + pop %dx + iret + +norestore: + + /* Restore flags. */ + popf + pushf + +#ifdef __APPLE__ + lcall *%cs:LOCAL(oldhandler_offset) +#else + lcall *%cs:INT13H_OFFSET (LOCAL (oldhandler)) +#endif + + push %bp + mov %sp, %bp + + /* Save %dx. So it won't be restored to original value. */ + mov %dx, 2(%bp) + + jmp tail + +/* Far pointer to the old handler. Stored as a CS:IP in the style of real-mode + IVT entries (thus PI:SC in mem). */ +VARIABLE(grub_drivemap_oldhandler) +LOCAL (oldhandler): + .word 0x0, 0x0 + +/* This label MUST be at the end of the copied block, since the installer code + reserves additional space for mappings at runtime and copies them over it. */ + .align 2 + +VARIABLE(grub_drivemap_mapstart) +LOCAL (mapstart): + .byte 0 diff --git a/grub-core/commands/i386/pc/halt.c b/grub-core/commands/i386/pc/halt.c new file mode 100644 index 000000000..1e7c2c9b3 --- /dev/null +++ b/grub-core/commands/i386/pc/halt.c @@ -0,0 +1,126 @@ +/* halt.c - command to halt the computer. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + {"no-apm", 'n', 0, N_("Do not use APM to halt the computer."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static inline void __attribute__ ((noreturn)) +stop (void) +{ + while (1) + { + asm volatile ("hlt"); + } +} +/* + * Halt the system, using APM if possible. If NO_APM is true, don't use + * APM even if it is available. + */ +void __attribute__ ((noreturn)) +grub_halt (int no_apm) +{ + struct grub_bios_int_registers regs; + + grub_acpi_halt (); + + if (no_apm) + stop (); + + /* detect APM */ + regs.eax = 0x5300; + regs.ebx = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + + if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY) + stop (); + + /* disconnect APM first */ + regs.eax = 0x5304; + regs.ebx = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + + /* connect APM */ + regs.eax = 0x5301; + regs.ebx = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY) + stop (); + + /* set APM protocol level - 1.1 or bust. (this covers APM 1.2 also) */ + regs.eax = 0x530E; + regs.ebx = 0; + regs.ecx = 0x0101; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY) + stop (); + + /* set the power state to off */ + regs.eax = 0x5307; + regs.ebx = 1; + regs.ecx = 3; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + + /* shouldn't reach here */ + stop (); +} + +static grub_err_t __attribute__ ((noreturn)) +grub_cmd_halt (grub_extcmd_context_t ctxt, + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) + +{ + struct grub_arg_list *state = ctxt->state; + int no_apm = 0; + + if (state[0].set) + no_apm = 1; + grub_halt (no_apm); +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(halt) +{ + cmd = grub_register_extcmd ("halt", grub_cmd_halt, 0, "[-n]", + N_("Halt the system, if possible using APM."), + options); +} + +GRUB_MOD_FINI(halt) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/i386/pc/lsapm.c b/grub-core/commands/i386/pc/lsapm.c new file mode 100644 index 000000000..c82476df1 --- /dev/null +++ b/grub-core/commands/i386/pc/lsapm.c @@ -0,0 +1,115 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +int +grub_apm_get_info (struct grub_apm_info *info) +{ + struct grub_bios_int_registers regs; + + /* detect APM */ + regs.eax = 0x5300; + regs.ebx = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + + if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY) + return 0; + info->version = regs.eax & 0xffff; + info->flags = regs.ecx & 0xffff; + + /* disconnect APM first */ + regs.eax = 0x5304; + regs.ebx = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + + /* connect APM */ + regs.eax = 0x5303; + regs.ebx = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + + if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY) + return 0; + + info->cseg = regs.eax & 0xffff; + info->offset = regs.ebx; + info->cseg_16 = regs.ecx & 0xffff; + info->dseg = regs.edx & 0xffff; + info->cseg_len = regs.esi >> 16; + info->cseg_16_len = regs.esi & 0xffff; + info->dseg_len = regs.edi; + + return 1; +} + +static grub_err_t +grub_cmd_lsapm (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), char **args __attribute__ ((unused))) +{ + struct grub_apm_info info; + if (!grub_apm_get_info (&info)) + return grub_error (GRUB_ERR_IO, N_("no APM found")); + + grub_printf_ (N_("Version %u.%u\n" + "32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" + "16-bit CS = 0x%x, len = 0x%x\n" + "DS = 0x%x, len = 0x%x\n"), + info.version >> 8, info.version & 0xff, + info.cseg, info.cseg_len, info.offset, + info.cseg_16, info.cseg_16_len, + info.dseg, info.dseg_len); + grub_xputs (info.flags & GRUB_APM_FLAGS_16BITPROTECTED_SUPPORTED + ? _("16-bit protected interface supported\n") + : _("16-bit protected interface unsupported\n")); + grub_xputs (info.flags & GRUB_APM_FLAGS_32BITPROTECTED_SUPPORTED + ? _("32-bit protected interface supported\n") + : _("32-bit protected interface unsupported\n")); + grub_xputs (info.flags & GRUB_APM_FLAGS_CPUIDLE_SLOWS_DOWN + ? _("CPU Idle slows down processor\n") + : _("CPU Idle doesn't slow down processor\n")); + grub_xputs (info.flags & GRUB_APM_FLAGS_DISABLED + ? _("APM disabled\n") : _("APM enabled\n")); + grub_xputs (info.flags & GRUB_APM_FLAGS_DISENGAGED + ? _("APM disengaged\n") : _("APM engaged\n")); + + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lsapm) +{ + cmd = grub_register_command ("lsapm", grub_cmd_lsapm, 0, + N_("Show APM information.")); +} + +GRUB_MOD_FINI(lsapm) +{ + grub_unregister_command (cmd); +} + + diff --git a/grub-core/commands/i386/pc/play.c b/grub-core/commands/i386/pc/play.c new file mode 100644 index 000000000..7712e2a36 --- /dev/null +++ b/grub-core/commands/i386/pc/play.c @@ -0,0 +1,197 @@ +/* play.c - command to play a tune */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* Lots of this file is borrowed from GNU/Hurd generic-speaker driver. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define BASE_TEMPO (60 * 1000) + + +#define T_REST ((grub_uint16_t) 0) +#define T_FINE ((grub_uint16_t) -1) + +struct note +{ + grub_uint16_t pitch; + grub_uint16_t duration; +}; + +/* Returns whether playing should continue. */ +static int +play (unsigned tempo, struct note *note) +{ + grub_uint64_t to; + + if (note->pitch == T_FINE || grub_getkey_noblock () != GRUB_TERM_NO_KEY) + return 1; + + grub_dprintf ("play", "pitch = %d, duration = %d\n", note->pitch, + note->duration); + + switch (note->pitch) + { + case T_REST: + grub_speaker_beep_off (); + break; + + default: + grub_speaker_beep_on (note->pitch); + break; + } + + to = grub_get_time_ms () + BASE_TEMPO * note->duration / tempo; + while ((grub_get_time_ms () <= to) + && (grub_getkey_noblock () == GRUB_TERM_NO_KEY)); + + return 0; +} + +static grub_err_t +grub_cmd_play (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + /* TRANSLATORS: It's musical notes, not the notes + you take. Play command expects arguments which can + be either a filename or tempo+notes. + This error happens if none is specified. */ + N_("filename or tempo and notes expected")); + + if (argc == 1) + { + struct note buf; + grub_uint32_t tempo; + grub_file_t file; + + file = grub_file_open (args[0]); + + if (! file) + return grub_errno; + + if (grub_file_read (file, &tempo, sizeof (tempo)) != sizeof (tempo)) + { + grub_file_close (file); + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), + args[0]); + return grub_errno; + } + + if (!tempo) + { + grub_file_close (file); + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"), + args[0]); + return grub_errno; + } + + tempo = grub_le_to_cpu32 (tempo); + grub_dprintf ("play","tempo = %d\n", tempo); + + while (grub_file_read (file, &buf, + sizeof (struct note)) == sizeof (struct note)) + { + buf.pitch = grub_le_to_cpu16 (buf.pitch); + buf.duration = grub_le_to_cpu16 (buf.duration); + + if (play (tempo, &buf)) + break; + } + + grub_file_close (file); + } + else + { + char *end; + unsigned tempo; + struct note note; + int i; + + tempo = grub_strtoul (args[0], &end, 0); + + if (!tempo) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"), + args[0]); + return grub_errno; + } + + if (*end) + /* Was not a number either, assume it was supposed to be a file name. */ + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]); + + grub_dprintf ("play","tempo = %d\n", tempo); + + for (i = 1; i + 1 < argc; i += 2) + { + note.pitch = grub_strtoul (args[i], &end, 0); + if (grub_errno) + break; + if (*end) + { + grub_error (GRUB_ERR_BAD_NUMBER, N_("unrecognized number")); + break; + } + + note.duration = grub_strtoul (args[i + 1], &end, 0); + if (grub_errno) + break; + if (*end) + { + grub_error (GRUB_ERR_BAD_NUMBER, N_("unrecognized number")); + break; + } + + if (play (tempo, ¬e)) + break; + } + } + + grub_speaker_beep_off (); + + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(play) +{ + cmd = grub_register_command ("play", grub_cmd_play, + N_("FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... "), + N_("Play a tune.")); +} + +GRUB_MOD_FINI(play) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/i386/pc/sendkey.c b/grub-core/commands/i386/pc/sendkey.c new file mode 100644 index 000000000..26d9acd3d --- /dev/null +++ b/grub-core/commands/i386/pc/sendkey.c @@ -0,0 +1,387 @@ +/* sendkey.c - fake keystroke. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv2+"); + +static char sendkey[0x20]; +/* Length of sendkey. */ +static int keylen = 0; +static int noled = 0; +static const struct grub_arg_option options[] = + { + {"num", 'n', 0, N_("set numlock mode"), "[on|off]", ARG_TYPE_STRING}, + {"caps", 'c', 0, N_("set capslock mode"), "[on|off]", ARG_TYPE_STRING}, + {"scroll", 's', 0, N_("set scrolllock mode"), "[on|off]", ARG_TYPE_STRING}, + {"insert", 0, 0, N_("set insert mode"), "[on|off]", ARG_TYPE_STRING}, + {"pause", 0, 0, N_("set pause mode"), "[on|off]", ARG_TYPE_STRING}, + {"left-shift", 0, 0, N_("press left shift"), "[on|off]", ARG_TYPE_STRING}, + {"right-shift", 0, 0, N_("press right shift"), "[on|off]", ARG_TYPE_STRING}, + {"sysrq", 0, 0, N_("press SysRq"), "[on|off]", ARG_TYPE_STRING}, + {"numkey", 0, 0, N_("press NumLock key"), "[on|off]", ARG_TYPE_STRING}, + {"capskey", 0, 0, N_("press CapsLock key"), "[on|off]", ARG_TYPE_STRING}, + {"scrollkey", 0, 0, N_("press ScrollLock key"), "[on|off]", ARG_TYPE_STRING}, + {"insertkey", 0, 0, N_("press Insert key"), "[on|off]", ARG_TYPE_STRING}, + {"left-alt", 0, 0, N_("press left alt"), "[on|off]", ARG_TYPE_STRING}, + {"right-alt", 0, 0, N_("press right alt"), "[on|off]", ARG_TYPE_STRING}, + {"left-ctrl", 0, 0, N_("press left ctrl"), "[on|off]", ARG_TYPE_STRING}, + {"right-ctrl", 0, 0, N_("press right ctrl"), "[on|off]", ARG_TYPE_STRING}, + {"no-led", 0, 0, N_("don't update LED state"), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; +static int simple_flag_offsets[] += {5, 6, 4, 7, 11, 1, 0, 10, 13, 14, 12, 15, 9, 3, 8, 2}; + +static grub_uint32_t andmask = 0xffffffff, ormask = 0; + +struct +keysym +{ + const char *unshifted_name; /* the name in unshifted state */ + const char *shifted_name; /* the name in shifted state */ + unsigned char unshifted_ascii; /* the ascii code in unshifted state */ + unsigned char shifted_ascii; /* the ascii code in shifted state */ + unsigned char keycode; /* keyboard scancode */ +}; + +/* The table for key symbols. If the "shifted" member of an entry is + NULL, the entry does not have shifted state. Copied from GRUB Legacy setkey fuction */ +static struct keysym keysym_table[] = +{ + {"escape", 0, 0x1b, 0, 0x01}, + {"1", "exclam", '1', '!', 0x02}, + {"2", "at", '2', '@', 0x03}, + {"3", "numbersign", '3', '#', 0x04}, + {"4", "dollar", '4', '$', 0x05}, + {"5", "percent", '5', '%', 0x06}, + {"6", "caret", '6', '^', 0x07}, + {"7", "ampersand", '7', '&', 0x08}, + {"8", "asterisk", '8', '*', 0x09}, + {"9", "parenleft", '9', '(', 0x0a}, + {"0", "parenright", '0', ')', 0x0b}, + {"minus", "underscore", '-', '_', 0x0c}, + {"equal", "plus", '=', '+', 0x0d}, + {"backspace", 0, '\b', 0, 0x0e}, + {"tab", 0, '\t', 0, 0x0f}, + {"q", "Q", 'q', 'Q', 0x10}, + {"w", "W", 'w', 'W', 0x11}, + {"e", "E", 'e', 'E', 0x12}, + {"r", "R", 'r', 'R', 0x13}, + {"t", "T", 't', 'T', 0x14}, + {"y", "Y", 'y', 'Y', 0x15}, + {"u", "U", 'u', 'U', 0x16}, + {"i", "I", 'i', 'I', 0x17}, + {"o", "O", 'o', 'O', 0x18}, + {"p", "P", 'p', 'P', 0x19}, + {"bracketleft", "braceleft", '[', '{', 0x1a}, + {"bracketright", "braceright", ']', '}', 0x1b}, + {"enter", 0, '\r', 0, 0x1c}, + {"control", 0, 0, 0, 0x1d}, + {"a", "A", 'a', 'A', 0x1e}, + {"s", "S", 's', 'S', 0x1f}, + {"d", "D", 'd', 'D', 0x20}, + {"f", "F", 'f', 'F', 0x21}, + {"g", "G", 'g', 'G', 0x22}, + {"h", "H", 'h', 'H', 0x23}, + {"j", "J", 'j', 'J', 0x24}, + {"k", "K", 'k', 'K', 0x25}, + {"l", "L", 'l', 'L', 0x26}, + {"semicolon", "colon", ';', ':', 0x27}, + {"quote", "doublequote", '\'', '"', 0x28}, + {"backquote", "tilde", '`', '~', 0x29}, + {"shift", 0, 0, 0, 0x2a}, + {"backslash", "bar", '\\', '|', 0x2b}, + {"z", "Z", 'z', 'Z', 0x2c}, + {"x", "X", 'x', 'X', 0x2d}, + {"c", "C", 'c', 'C', 0x2e}, + {"v", "V", 'v', 'V', 0x2f}, + {"b", "B", 'b', 'B', 0x30}, + {"n", "N", 'n', 'N', 0x31}, + {"m", "M", 'm', 'M', 0x32}, + {"comma", "less", ',', '<', 0x33}, + {"period", "greater", '.', '>', 0x34}, + {"slash", "question", '/', '?', 0x35}, + {"rshift", 0, 0, 0, 0x36}, + {"numasterisk", 0, '*', 0, 0x37}, + {"alt", 0, 0, 0, 0x38}, + {"space", 0, ' ', 0, 0x39}, + {"capslock", 0, 0, 0, 0x3a}, + {"F1", 0, 0, 0, 0x3b}, + {"F2", 0, 0, 0, 0x3c}, + {"F3", 0, 0, 0, 0x3d}, + {"F4", 0, 0, 0, 0x3e}, + {"F5", 0, 0, 0, 0x3f}, + {"F6", 0, 0, 0, 0x40}, + {"F7", 0, 0, 0, 0x41}, + {"F8", 0, 0, 0, 0x42}, + {"F9", 0, 0, 0, 0x43}, + {"F10", 0, 0, 0, 0x44}, + {"num7", "numhome", '7', 0, 0x47}, + {"num8", "numup", '8', 0, 0x48}, + {"num9", "numpgup", '9', 0, 0x49}, + {"numminus", 0, '-', 0, 0x4a}, + {"num4", "numleft", '4', 0, 0x4b}, + {"num5", "numcenter", '5', 0, 0x4c}, + {"num6", "numright", '6', 0, 0x4d}, + {"numplus", 0, '-', 0, 0x4e}, + {"num1", "numend", '1', 0, 0x4f}, + {"num2", "numdown", '2', 0, 0x50}, + {"num3", "numpgdown", '3', 0, 0x51}, + {"num0", "numinsert", '0', 0, 0x52}, + {"numperiod", "numdelete", 0, 0x7f, 0x53}, + {"F11", 0, 0, 0, 0x57}, + {"F12", 0, 0, 0, 0x58}, + {"numenter", 0, '\r', 0, 0xe0}, + {"numslash", 0, '/', 0, 0xe0}, + {"delete", 0, 0x7f, 0, 0xe0}, + {"insert", 0, 0xe0, 0, 0x52}, + {"home", 0, 0xe0, 0, 0x47}, + {"end", 0, 0xe0, 0, 0x4f}, + {"pgdown", 0, 0xe0, 0, 0x51}, + {"pgup", 0, 0xe0, 0, 0x49}, + {"down", 0, 0xe0, 0, 0x50}, + {"up", 0, 0xe0, 0, 0x48}, + {"left", 0, 0xe0, 0, 0x4b}, + {"right", 0, 0xe0, 0, 0x4d} +}; + +/* Set a simple flag in flags variable + OUTOFFSET - offset of flag in FLAGS, + OP - action id +*/ +static void +grub_sendkey_set_simple_flag (int outoffset, int op) +{ + if (op == 2) + { + andmask |= (1 << outoffset); + ormask &= ~(1 << outoffset); + } + else + { + andmask &= (~(1 << outoffset)); + if (op == 1) + ormask |= (1 << outoffset); + else + ormask &= ~(1 << outoffset); + } +} + +static int +grub_sendkey_parse_op (struct grub_arg_list state) +{ + if (! state.set) + return 2; + + if (grub_strcmp (state.arg, "off") == 0 || grub_strcmp (state.arg, "0") == 0 + || grub_strcmp (state.arg, "unpress") == 0) + return 0; + + if (grub_strcmp (state.arg, "on") == 0 || grub_strcmp (state.arg, "1") == 0 + || grub_strcmp (state.arg, "press") == 0) + return 1; + + return 2; +} + +static grub_uint32_t oldflags; + +static grub_err_t +grub_sendkey_postboot (void) +{ + /* For convention: pointer to flags. */ + grub_uint32_t *flags = (grub_uint32_t *) 0x417; + + *flags = oldflags; + + *((char *) 0x41a) = 0x1e; + *((char *) 0x41c) = 0x1e; + + return GRUB_ERR_NONE; +} + +/* Set keyboard buffer to our sendkey */ +static grub_err_t +grub_sendkey_preboot (int noret __attribute__ ((unused))) +{ + /* For convention: pointer to flags. */ + grub_uint32_t *flags = (grub_uint32_t *) 0x417; + + oldflags = *flags; + + /* Set the sendkey. */ + *((char *) 0x41a) = 0x1e; + *((char *) 0x41c) = keylen + 0x1e; + grub_memcpy ((char *) 0x41e, sendkey, 0x20); + + /* Transform "any ctrl" to "right ctrl" flag. */ + if (*flags & (1 << 8)) + *flags &= ~(1 << 2); + + /* Transform "any alt" to "right alt" flag. */ + if (*flags & (1 << 9)) + *flags &= ~(1 << 3); + + *flags = (*flags & andmask) | ormask; + + /* Transform "right ctrl" to "any ctrl" flag. */ + if (*flags & (1 << 8)) + *flags |= (1 << 2); + + /* Transform "right alt" to "any alt" flag. */ + if (*flags & (1 << 9)) + *flags |= (1 << 3); + + /* Write new LED state */ + if (!noled) + { + int value = 0; + int failed; + /* Try 5 times */ + for (failed = 0; failed < 5; failed++) + { + value = 0; + /* Send command change LEDs */ + grub_outb (0xed, 0x60); + + /* Wait */ + do + value = grub_inb (0x60); + while ((value != 0xfa) && (value != 0xfe)); + + if (value == 0xfa) + { + /* Set new LEDs*/ + grub_outb ((*flags >> 4) & 7, 0x60); + break; + } + } + } + return GRUB_ERR_NONE; +} + +/* Helper for grub_cmd_sendkey. */ +static int +find_key_code (char *key) +{ + unsigned i; + + for (i = 0; i < ARRAY_SIZE(keysym_table); i++) + { + if (keysym_table[i].unshifted_name + && grub_strcmp (key, keysym_table[i].unshifted_name) == 0) + return keysym_table[i].keycode; + else if (keysym_table[i].shifted_name + && grub_strcmp (key, keysym_table[i].shifted_name) == 0) + return keysym_table[i].keycode; + } + + return 0; +} + +/* Helper for grub_cmd_sendkey. */ +static int +find_ascii_code (char *key) +{ + unsigned i; + + for (i = 0; i < ARRAY_SIZE(keysym_table); i++) + { + if (keysym_table[i].unshifted_name + && grub_strcmp (key, keysym_table[i].unshifted_name) == 0) + return keysym_table[i].unshifted_ascii; + else if (keysym_table[i].shifted_name + && grub_strcmp (key, keysym_table[i].shifted_name) == 0) + return keysym_table[i].shifted_ascii; + } + + return 0; +} + +static grub_err_t +grub_cmd_sendkey (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + + andmask = 0xffffffff; + ormask = 0; + + { + int i; + + keylen = 0; + + for (i = 0; i < argc && keylen < 0x20; i++) + { + int key_code; + + key_code = find_key_code (args[i]); + if (key_code) + { + sendkey[keylen++] = find_ascii_code (args[i]); + sendkey[keylen++] = key_code; + } + } + } + + { + unsigned i; + for (i = 0; i < ARRAY_SIZE(simple_flag_offsets); i++) + grub_sendkey_set_simple_flag (simple_flag_offsets[i], + grub_sendkey_parse_op(state[i])); + } + + /* Set noled. */ + noled = (state[ARRAY_SIZE(simple_flag_offsets)].set); + + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; +static struct grub_preboot *preboot_hook; + +GRUB_MOD_INIT (sendkey) +{ + cmd = grub_register_extcmd ("sendkey", grub_cmd_sendkey, 0, + N_("[KEYSTROKE1] [KEYSTROKE2] ..."), + /* TRANSLATORS: It can emulate multiple + keypresses. */ + N_("Emulate a keystroke sequence"), options); + + preboot_hook + = grub_loader_register_preboot_hook (grub_sendkey_preboot, + grub_sendkey_postboot, + GRUB_LOADER_PREBOOT_HOOK_PRIO_CONSOLE); +} + +GRUB_MOD_FINI (sendkey) +{ + grub_unregister_extcmd (cmd); + grub_loader_unregister_preboot_hook (preboot_hook); +} diff --git a/grub-core/commands/ieee1275/suspend.c b/grub-core/commands/ieee1275/suspend.c new file mode 100644 index 000000000..b50548574 --- /dev/null +++ b/grub-core/commands/ieee1275/suspend.c @@ -0,0 +1,51 @@ +/* suspend.c - command to suspend GRUB and return to Open Firmware */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_suspend (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_puts_ (N_("Run `go' to resume GRUB.")); + grub_ieee1275_enter (); + grub_cls (); + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(ieee1275_suspend) +{ + cmd = grub_register_command ("suspend", grub_cmd_suspend, + 0, N_("Return to IEEE1275 prompt.")); +} + +GRUB_MOD_FINI(ieee1275_suspend) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/iorw.c b/grub-core/commands/iorw.c new file mode 100644 index 000000000..a0c164e54 --- /dev/null +++ b/grub-core/commands/iorw.c @@ -0,0 +1,155 @@ +/* memrw.c - command to read / write physical memory */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_extcmd_t cmd_read_byte, cmd_read_word, cmd_read_dword; +static grub_command_t cmd_write_byte, cmd_write_word, cmd_write_dword; + +static const struct grub_arg_option options[] = + { + {0, 'v', 0, N_("Save read value into variable VARNAME."), + N_("VARNAME"), ARG_TYPE_STRING}, + {0, 0, 0, 0, 0, 0} + }; + + +static grub_err_t +grub_cmd_read (grub_extcmd_context_t ctxt, int argc, char **argv) +{ + grub_port_t addr; + grub_uint32_t value = 0; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + addr = grub_strtoul (argv[0], 0, 0); + switch (ctxt->extcmd->cmd->name[sizeof ("in") - 1]) + { + case 'l': + value = grub_inl (addr); + break; + + case 'w': + value = grub_inw (addr); + break; + + case 'b': + value = grub_inb (addr); + break; + } + + if (ctxt->state[0].set) + { + char buf[sizeof ("XXXXXXXX")]; + grub_snprintf (buf, sizeof (buf), "%x", value); + grub_env_set (ctxt->state[0].arg, buf); + } + else + grub_printf ("0x%x\n", value); + + return 0; +} + +static grub_err_t +grub_cmd_write (grub_command_t cmd, int argc, char **argv) +{ + grub_port_t addr; + grub_uint32_t value; + grub_uint32_t mask = 0xffffffff; + + if (argc != 2 && argc != 3) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + addr = grub_strtoul (argv[0], 0, 0); + value = grub_strtoul (argv[1], 0, 0); + if (argc == 3) + mask = grub_strtoul (argv[2], 0, 0); + value &= mask; + switch (cmd->name[sizeof ("out") - 1]) + { + case 'l': + if (mask != 0xffffffff) + grub_outl ((grub_inl (addr) & ~mask) | value, addr); + else + grub_outl (value, addr); + break; + + case 'w': + if ((mask & 0xffff) != 0xffff) + grub_outw ((grub_inw (addr) & ~mask) | value, addr); + else + grub_outw (value, addr); + break; + + case 'b': + if ((mask & 0xff) != 0xff) + grub_outb ((grub_inb (addr) & ~mask) | value, addr); + else + grub_outb (value, addr); + break; + } + + return 0; +} + +GRUB_MOD_INIT(memrw) +{ + cmd_read_byte = + grub_register_extcmd ("inb", grub_cmd_read, 0, + N_("PORT"), N_("Read 8-bit value from PORT."), + options); + cmd_read_word = + grub_register_extcmd ("inw", grub_cmd_read, 0, + N_("PORT"), N_("Read 16-bit value from PORT."), + options); + cmd_read_dword = + grub_register_extcmd ("inl", grub_cmd_read, 0, + N_("PORT"), N_("Read 32-bit value from PORT."), + options); + cmd_write_byte = + grub_register_command ("outb", grub_cmd_write, + N_("PORT VALUE [MASK]"), + N_("Write 8-bit VALUE to PORT.")); + cmd_write_word = + grub_register_command ("outw", grub_cmd_write, + N_("PORT VALUE [MASK]"), + N_("Write 16-bit VALUE to PORT.")); + cmd_write_dword = + grub_register_command ("outl", grub_cmd_write, + N_("ADDR VALUE [MASK]"), + N_("Write 32-bit VALUE to PORT.")); +} + +GRUB_MOD_FINI(memrw) +{ + grub_unregister_extcmd (cmd_read_byte); + grub_unregister_extcmd (cmd_read_word); + grub_unregister_extcmd (cmd_read_dword); + grub_unregister_command (cmd_write_byte); + grub_unregister_command (cmd_write_word); + grub_unregister_command (cmd_write_dword); +} diff --git a/grub-core/commands/keylayouts.c b/grub-core/commands/keylayouts.c new file mode 100644 index 000000000..f4b773020 --- /dev/null +++ b/grub-core/commands/keylayouts.c @@ -0,0 +1,307 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static struct grub_keyboard_layout layout_us = { + .keyboard_map = { + /* Keyboard errors. Handled by driver. */ + /* 0x00 */ 0, 0, 0, 0, + + /* 0x04 */ 'a', 'b', 'c', 'd', + /* 0x08 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + /* 0x10 */ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', + /* 0x18 */ 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', + /* 0x20 */ '3', '4', '5', '6', '7', '8', '9', '0', + /* 0x28 */ '\n', '\e', '\b', '\t', ' ', '-', '=', '[', + /* According to usage table 0x31 should be mapped to '/' + but testing with real keyboard shows that 0x32 is remapped to '/'. + Map 0x31 to 0. + */ + /* 0x30 */ ']', 0, '\\', ';', '\'', '`', ',', '.', + /* 0x39 is CapsLock. Handled by driver. */ + /* 0x38 */ '/', 0, GRUB_TERM_KEY_F1, GRUB_TERM_KEY_F2, + /* 0x3c */ GRUB_TERM_KEY_F3, GRUB_TERM_KEY_F4, + /* 0x3e */ GRUB_TERM_KEY_F5, GRUB_TERM_KEY_F6, + /* 0x40 */ GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8, + /* 0x42 */ GRUB_TERM_KEY_F9, GRUB_TERM_KEY_F10, + /* 0x44 */ GRUB_TERM_KEY_F11, GRUB_TERM_KEY_F12, + /* PrtScr and ScrollLock. Not handled yet. */ + /* 0x46 */ 0, 0, + /* 0x48 is Pause. Not handled yet. */ + /* 0x48 */ 0, GRUB_TERM_KEY_INSERT, + /* 0x4a */ GRUB_TERM_KEY_HOME, GRUB_TERM_KEY_PPAGE, + /* 0x4c */ GRUB_TERM_KEY_DC, GRUB_TERM_KEY_END, + /* 0x4e */ GRUB_TERM_KEY_NPAGE, GRUB_TERM_KEY_RIGHT, + /* 0x50 */ GRUB_TERM_KEY_LEFT, GRUB_TERM_KEY_DOWN, + /* 0x53 is NumLock. Handled by driver. */ + /* 0x52 */ GRUB_TERM_KEY_UP, 0, + /* 0x54 */ '/', '*', + /* 0x56 */ '-', '+', + /* 0x58 */ '\n', GRUB_TERM_KEY_END, + /* 0x5a */ GRUB_TERM_KEY_DOWN, GRUB_TERM_KEY_NPAGE, + /* 0x5c */ GRUB_TERM_KEY_LEFT, GRUB_TERM_KEY_CENTER, + /* 0x5e */ GRUB_TERM_KEY_RIGHT, GRUB_TERM_KEY_HOME, + /* 0x60 */ GRUB_TERM_KEY_UP, GRUB_TERM_KEY_PPAGE, + /* 0x62 */ GRUB_TERM_KEY_INSERT, GRUB_TERM_KEY_DC, + /* 0x64 */ '\\' + }, + .keyboard_map_shift = { + /* Keyboard errors. Handled by driver. */ + /* 0x00 */ 0, 0, 0, 0, + + /* 0x04 */ 'A', 'B', 'C', 'D', + /* 0x08 */ 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', + /* 0x10 */ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', + /* 0x18 */ 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@', + /* 0x20 */ '#', '$', '%', '^', '&', '*', '(', ')', + /* 0x28 */ '\n' | GRUB_TERM_SHIFT, '\e' | GRUB_TERM_SHIFT, + /* 0x2a */ '\b' | GRUB_TERM_SHIFT, '\t' | GRUB_TERM_SHIFT, + /* 0x2c */ ' ' | GRUB_TERM_SHIFT, '_', '+', '{', + /* According to usage table 0x31 should be mapped to '/' + but testing with real keyboard shows that 0x32 is remapped to '/'. + Map 0x31 to 0. + */ + /* 0x30 */ '}', 0, '|', ':', '"', '~', '<', '>', + /* 0x39 is CapsLock. Handled by driver. */ + /* 0x38 */ '?', 0, + /* 0x3a */ GRUB_TERM_KEY_F1 | GRUB_TERM_SHIFT, + /* 0x3b */ GRUB_TERM_KEY_F2 | GRUB_TERM_SHIFT, + /* 0x3c */ GRUB_TERM_KEY_F3 | GRUB_TERM_SHIFT, + /* 0x3d */ GRUB_TERM_KEY_F4 | GRUB_TERM_SHIFT, + /* 0x3e */ GRUB_TERM_KEY_F5 | GRUB_TERM_SHIFT, + /* 0x3f */ GRUB_TERM_KEY_F6 | GRUB_TERM_SHIFT, + /* 0x40 */ GRUB_TERM_KEY_F7 | GRUB_TERM_SHIFT, + /* 0x41 */ GRUB_TERM_KEY_F8 | GRUB_TERM_SHIFT, + /* 0x42 */ GRUB_TERM_KEY_F9 | GRUB_TERM_SHIFT, + /* 0x43 */ GRUB_TERM_KEY_F10 | GRUB_TERM_SHIFT, + /* 0x44 */ GRUB_TERM_KEY_F11 | GRUB_TERM_SHIFT, + /* 0x45 */ GRUB_TERM_KEY_F12 | GRUB_TERM_SHIFT, + /* PrtScr and ScrollLock. Not handled yet. */ + /* 0x46 */ 0, 0, + /* 0x48 is Pause. Not handled yet. */ + /* 0x48 */ 0, GRUB_TERM_KEY_INSERT | GRUB_TERM_SHIFT, + /* 0x4a */ GRUB_TERM_KEY_HOME | GRUB_TERM_SHIFT, + /* 0x4b */ GRUB_TERM_KEY_PPAGE | GRUB_TERM_SHIFT, + /* 0x4c */ GRUB_TERM_KEY_DC | GRUB_TERM_SHIFT, + /* 0x4d */ GRUB_TERM_KEY_END | GRUB_TERM_SHIFT, + /* 0x4e */ GRUB_TERM_KEY_NPAGE | GRUB_TERM_SHIFT, + /* 0x4f */ GRUB_TERM_KEY_RIGHT | GRUB_TERM_SHIFT, + /* 0x50 */ GRUB_TERM_KEY_LEFT | GRUB_TERM_SHIFT, + /* 0x51 */ GRUB_TERM_KEY_DOWN | GRUB_TERM_SHIFT, + /* 0x53 is NumLock. Handled by driver. */ + /* 0x52 */ GRUB_TERM_KEY_UP | GRUB_TERM_SHIFT, 0, + /* 0x54 */ '/', '*', + /* 0x56 */ '-', '+', + /* 0x58 */ '\n' | GRUB_TERM_SHIFT, '1', '2', '3', '4', '5','6', '7', + /* 0x60 */ '8', '9', '0', '.', '|' + } +}; + +static struct grub_keyboard_layout *grub_current_layout = &layout_us; + +static int +map_key_core (int code, int status, int *alt_gr_consumed) +{ + *alt_gr_consumed = 0; + + if (code >= GRUB_KEYBOARD_LAYOUTS_ARRAY_SIZE) + return 0; + + if (status & GRUB_TERM_STATUS_RALT) + { + if (status & (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT)) + { + if (grub_current_layout->keyboard_map_shift_l3[code]) + { + *alt_gr_consumed = 1; + return grub_current_layout->keyboard_map_shift_l3[code]; + } + } + else if (grub_current_layout->keyboard_map_l3[code]) + { + *alt_gr_consumed = 1; + return grub_current_layout->keyboard_map_l3[code]; + } + } + if (status & (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT)) + return grub_current_layout->keyboard_map_shift[code]; + else + return grub_current_layout->keyboard_map[code]; +} + +unsigned +grub_term_map_key (grub_keyboard_key_t code, int status) +{ + int alt_gr_consumed = 0; + int key; + + if (code >= 0x59 && code <= 0x63 && (status & GRUB_TERM_STATUS_NUM)) + { + if (status & (GRUB_TERM_STATUS_RSHIFT | GRUB_TERM_STATUS_LSHIFT)) + status &= ~(GRUB_TERM_STATUS_RSHIFT | GRUB_TERM_STATUS_LSHIFT); + else + status |= GRUB_TERM_STATUS_RSHIFT; + } + + key = map_key_core (code, status, &alt_gr_consumed); + + if (key == 0 || key == GRUB_TERM_SHIFT) { + grub_printf ("Unknown key 0x%x detected\n", code); + return GRUB_TERM_NO_KEY; + } + + if (status & GRUB_TERM_STATUS_CAPS) + { + if ((key >= 'a') && (key <= 'z')) + key += 'A' - 'a'; + else if ((key >= 'A') && (key <= 'Z')) + key += 'a' - 'A'; + } + + if ((status & GRUB_TERM_STATUS_LALT) || + ((status & GRUB_TERM_STATUS_RALT) && !alt_gr_consumed)) + key |= GRUB_TERM_ALT; + if (status & (GRUB_TERM_STATUS_LCTRL | GRUB_TERM_STATUS_RCTRL)) + key |= GRUB_TERM_CTRL; + + return key; +} + +static grub_err_t +grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + char *filename; + grub_file_t file; + grub_uint32_t version; + grub_uint8_t magic[GRUB_KEYBOARD_LAYOUTS_FILEMAGIC_SIZE]; + struct grub_keyboard_layout *newmap = NULL; + unsigned i; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "file or layout name required"); + if (argv[0][0] != '(' && argv[0][0] != '/' && argv[0][0] != '+') + { + const char *prefix = grub_env_get ("prefix"); + if (!prefix) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("variable `%s' isn't set"), "prefix"); + filename = grub_xasprintf ("%s/layouts/%s.gkb", prefix, argv[0]); + if (!filename) + return grub_errno; + } + else + filename = argv[0]; + + file = grub_file_open (filename); + if (! file) + goto fail; + + if (grub_file_read (file, magic, sizeof (magic)) != sizeof (magic)) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("premature end of file %s"), + filename); + goto fail; + } + + if (grub_memcmp (magic, GRUB_KEYBOARD_LAYOUTS_FILEMAGIC, + GRUB_KEYBOARD_LAYOUTS_FILEMAGIC_SIZE) != 0) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid magic"); + goto fail; + } + + if (grub_file_read (file, &version, sizeof (version)) != sizeof (version)) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("premature end of file %s"), + filename); + goto fail; + } + + if (version != grub_cpu_to_le32_compile_time (GRUB_KEYBOARD_LAYOUTS_VERSION)) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid version"); + goto fail; + } + + newmap = grub_malloc (sizeof (*newmap)); + if (!newmap) + goto fail; + + if (grub_file_read (file, newmap, sizeof (*newmap)) != sizeof (*newmap)) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("premature end of file %s"), + filename); + goto fail; + } + + for (i = 0; i < ARRAY_SIZE (newmap->keyboard_map); i++) + newmap->keyboard_map[i] = grub_le_to_cpu32(newmap->keyboard_map[i]); + + for (i = 0; i < ARRAY_SIZE (newmap->keyboard_map_shift); i++) + newmap->keyboard_map_shift[i] + = grub_le_to_cpu32(newmap->keyboard_map_shift[i]); + + for (i = 0; i < ARRAY_SIZE (newmap->keyboard_map_l3); i++) + newmap->keyboard_map_l3[i] + = grub_le_to_cpu32(newmap->keyboard_map_l3[i]); + + for (i = 0; i < ARRAY_SIZE (newmap->keyboard_map_shift_l3); i++) + newmap->keyboard_map_shift_l3[i] + = grub_le_to_cpu32(newmap->keyboard_map_shift_l3[i]); + + grub_current_layout = newmap; + + return GRUB_ERR_NONE; + + fail: + if (filename != argv[0]) + grub_free (filename); + grub_free (newmap); + if (file) + grub_file_close (file); + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(keylayouts) +{ + cmd = grub_register_command ("keymap", grub_cmd_keymap, + 0, N_("Load a keyboard layout.")); +} + +GRUB_MOD_FINI(keylayouts) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/keystatus.c b/grub-core/commands/keystatus.c new file mode 100644 index 000000000..460cf4e7e --- /dev/null +++ b/grub-core/commands/keystatus.c @@ -0,0 +1,113 @@ +/* keystatus.c - Command to check key modifier status. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + /* TRANSLATORS: "Check" in a sense that if this key is pressed then + "true" is returned, otherwise "false". */ + {"shift", 's', 0, N_("Check Shift key."), 0, 0}, + {"ctrl", 'c', 0, N_("Check Control key."), 0, 0}, + {"alt", 'a', 0, N_("Check Alt key."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static int +grub_getkeystatus (void) +{ + int status = 0; + grub_term_input_t term; + + if (grub_term_poll_usb) + grub_term_poll_usb (0); + + FOR_ACTIVE_TERM_INPUTS(term) + { + if (term->getkeystatus) + status |= term->getkeystatus (term); + } + + return status; +} + +static grub_err_t +grub_cmd_keystatus (grub_extcmd_context_t ctxt, + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + struct grub_arg_list *state = ctxt->state; + int expect_mods = 0; + int mods; + + if (state[0].set) + expect_mods |= (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT); + if (state[1].set) + expect_mods |= (GRUB_TERM_STATUS_LCTRL | GRUB_TERM_STATUS_RCTRL); + if (state[2].set) + expect_mods |= (GRUB_TERM_STATUS_LALT | GRUB_TERM_STATUS_RALT); + + grub_dprintf ("keystatus", "expect_mods: %d\n", expect_mods); + + /* Without arguments, just check whether getkeystatus is supported at + all. */ + if (expect_mods == 0) + { + grub_term_input_t term; + int nterms = 0; + + FOR_ACTIVE_TERM_INPUTS (term) + if (!term->getkeystatus) + return grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); + else + nterms++; + if (!nterms) + return grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); + return 0; + } + + mods = grub_getkeystatus (); + grub_dprintf ("keystatus", "mods: %d\n", mods); + if (mods >= 0 && (mods & expect_mods) != 0) + return 0; + else + return grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(keystatus) +{ + cmd = grub_register_extcmd ("keystatus", grub_cmd_keystatus, 0, + "[--shift] [--ctrl] [--alt]", + /* TRANSLATORS: there are 3 modifiers. */ + N_("Check key modifier status."), + options); +} + +GRUB_MOD_FINI(keystatus) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c new file mode 100644 index 000000000..b32f3c74c --- /dev/null +++ b/grub-core/commands/legacycfg.c @@ -0,0 +1,893 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000, 2001, 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Helper for legacy_file. */ +static grub_err_t +legacy_file_getline (char **line, int cont __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + *line = 0; + return GRUB_ERR_NONE; +} + +static grub_err_t +legacy_file (const char *filename) +{ + grub_file_t file; + char *entryname = NULL, *entrysrc = NULL; + grub_menu_t menu; + char *suffix = grub_strdup (""); + + if (!suffix) + return grub_errno; + + file = grub_file_open (filename); + if (! file) + { + grub_free (suffix); + return grub_errno; + } + + menu = grub_env_get_menu (); + if (! menu) + { + menu = grub_zalloc (sizeof (*menu)); + if (! menu) + { + grub_free (suffix); + return grub_errno; + } + + grub_env_set_menu (menu); + } + + while (1) + { + char *buf = grub_file_getline (file); + char *parsed = NULL; + + if (!buf && grub_errno) + { + grub_file_close (file); + grub_free (suffix); + return grub_errno; + } + + if (!buf) + break; + + { + char *oldname = NULL; + char *newsuffix; + char *ptr; + + for (ptr = buf; *ptr && grub_isspace (*ptr); ptr++); + + oldname = entryname; + parsed = grub_legacy_parse (ptr, &entryname, &newsuffix); + grub_free (buf); + buf = NULL; + if (newsuffix) + { + char *t; + + t = suffix; + suffix = grub_realloc (suffix, grub_strlen (suffix) + + grub_strlen (newsuffix) + 1); + if (!suffix) + { + grub_free (t); + grub_free (entrysrc); + grub_free (parsed); + grub_free (newsuffix); + grub_free (suffix); + return grub_errno; + } + grub_memcpy (suffix + grub_strlen (suffix), newsuffix, + grub_strlen (newsuffix) + 1); + grub_free (newsuffix); + newsuffix = NULL; + } + if (oldname != entryname && oldname) + { + const char **args = grub_malloc (sizeof (args[0])); + if (!args) + { + grub_file_close (file); + return grub_errno; + } + args[0] = oldname; + grub_normal_add_menu_entry (1, args, NULL, NULL, "legacy", + NULL, NULL, + entrysrc, 0); + grub_free (args); + entrysrc[0] = 0; + grub_free (oldname); + } + } + + if (parsed && !entryname) + { + grub_normal_parse_line (parsed, legacy_file_getline, NULL); + grub_print_error (); + grub_free (parsed); + parsed = NULL; + } + else if (parsed) + { + if (!entrysrc) + entrysrc = parsed; + else + { + char *t; + + t = entrysrc; + entrysrc = grub_realloc (entrysrc, grub_strlen (entrysrc) + + grub_strlen (parsed) + 1); + if (!entrysrc) + { + grub_free (t); + grub_free (parsed); + grub_free (suffix); + return grub_errno; + } + grub_memcpy (entrysrc + grub_strlen (entrysrc), parsed, + grub_strlen (parsed) + 1); + grub_free (parsed); + parsed = NULL; + } + } + } + grub_file_close (file); + + if (entryname) + { + const char **args = grub_malloc (sizeof (args[0])); + if (!args) + { + grub_file_close (file); + grub_free (suffix); + grub_free (entrysrc); + return grub_errno; + } + args[0] = entryname; + grub_normal_add_menu_entry (1, args, NULL, NULL, NULL, + NULL, NULL, entrysrc, 0); + grub_free (args); + } + + grub_normal_parse_line (suffix, legacy_file_getline, NULL); + grub_print_error (); + grub_free (suffix); + grub_free (entrysrc); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_legacy_source (struct grub_command *cmd, + int argc, char **args) +{ + int new_env, extractor; + grub_err_t ret; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + extractor = (cmd->name[0] == 'e'); + new_env = (cmd->name[extractor ? (sizeof ("extract_legacy_entries_") - 1) + : (sizeof ("legacy_") - 1)] == 'c'); + + if (new_env) + grub_cls (); + + if (new_env && !extractor) + grub_env_context_open (); + if (extractor) + grub_env_extractor_open (!new_env); + + ret = legacy_file (args[0]); + + if (new_env) + { + grub_menu_t menu; + menu = grub_env_get_menu (); + if (menu && menu->size) + grub_show_menu (menu, 1, 0); + if (!extractor) + grub_env_context_close (); + } + if (extractor) + grub_env_extractor_close (!new_env); + + return ret; +} + +static enum + { + GUESS_IT, LINUX, MULTIBOOT, KFREEBSD, KNETBSD, KOPENBSD + } kernel_type; + +static grub_err_t +grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)), + int argc, char **args) +{ + int i; +#ifdef TODO + int no_mem_option = 0; +#endif + struct grub_command *cmd; + char **cutargs; + int cutargc; + grub_err_t err = GRUB_ERR_NONE; + + for (i = 0; i < 2; i++) + { + /* FIXME: really support this. */ + if (argc >= 1 && grub_strcmp (args[0], "--no-mem-option") == 0) + { +#ifdef TODO + no_mem_option = 1; +#endif + argc--; + args++; + continue; + } + + /* linux16 handles both zImages and bzImages. */ + if (argc >= 1 && (grub_strcmp (args[0], "--type=linux") == 0 + || grub_strcmp (args[0], "--type=biglinux") == 0)) + { + kernel_type = LINUX; + argc--; + args++; + continue; + } + + if (argc >= 1 && grub_strcmp (args[0], "--type=multiboot") == 0) + { + kernel_type = MULTIBOOT; + argc--; + args++; + continue; + } + + if (argc >= 1 && grub_strcmp (args[0], "--type=freebsd") == 0) + { + kernel_type = KFREEBSD; + argc--; + args++; + continue; + } + + if (argc >= 1 && grub_strcmp (args[0], "--type=openbsd") == 0) + { + kernel_type = KOPENBSD; + argc--; + args++; + continue; + } + + if (argc >= 1 && grub_strcmp (args[0], "--type=netbsd") == 0) + { + kernel_type = KNETBSD; + argc--; + args++; + continue; + } + } + + if (argc < 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1)); + if (!cutargs) + return grub_errno; + cutargc = argc - 1; + grub_memcpy (cutargs + 1, args + 2, sizeof (cutargs[0]) * (argc - 2)); + cutargs[0] = args[0]; + + do + { + /* First try Linux. */ + if (kernel_type == GUESS_IT || kernel_type == LINUX) + { +#ifdef GRUB_MACHINE_PCBIOS + cmd = grub_command_find ("linux16"); +#else + cmd = grub_command_find ("linux"); +#endif + if (cmd) + { + if (!(cmd->func) (cmd, cutargc, cutargs)) + { + kernel_type = LINUX; + goto out; + } + } + grub_errno = GRUB_ERR_NONE; + } + + /* Then multiboot. */ + if (kernel_type == GUESS_IT || kernel_type == MULTIBOOT) + { + cmd = grub_command_find ("multiboot"); + if (cmd) + { + if (!(cmd->func) (cmd, argc, args)) + { + kernel_type = MULTIBOOT; + goto out; + } + } + grub_errno = GRUB_ERR_NONE; + } + + { + int bsd_device = -1; + int bsd_slice = -1; + int bsd_part = -1; + { + grub_device_t dev; + const char *hdbiasstr; + int hdbias = 0; + hdbiasstr = grub_env_get ("legacy_hdbias"); + if (hdbiasstr) + { + hdbias = grub_strtoul (hdbiasstr, 0, 0); + grub_errno = GRUB_ERR_NONE; + } + dev = grub_device_open (0); + if (dev && dev->disk + && dev->disk->dev->id == GRUB_DISK_DEVICE_BIOSDISK_ID + && dev->disk->id >= 0x80 && dev->disk->id <= 0x90) + { + struct grub_partition *part = dev->disk->partition; + bsd_device = dev->disk->id - 0x80 - hdbias; + if (part && (grub_strcmp (part->partmap->name, "netbsd") == 0 + || grub_strcmp (part->partmap->name, "openbsd") == 0 + || grub_strcmp (part->partmap->name, "bsd") == 0)) + { + bsd_part = part->number; + part = part->parent; + } + if (part && grub_strcmp (part->partmap->name, "msdos") == 0) + bsd_slice = part->number; + } + if (dev) + grub_device_close (dev); + } + + /* k*BSD didn't really work well with grub-legacy. */ + if (kernel_type == GUESS_IT || kernel_type == KFREEBSD) + { + char buf[sizeof("adXXXXXXXXXXXXsXXXXXXXXXXXXYYY")]; + if (bsd_device != -1) + { + if (bsd_slice != -1 && bsd_part != -1) + grub_snprintf(buf, sizeof(buf), "ad%ds%d%c", bsd_device, + bsd_slice, 'a' + bsd_part); + else if (bsd_slice != -1) + grub_snprintf(buf, sizeof(buf), "ad%ds%d", bsd_device, + bsd_slice); + else + grub_snprintf(buf, sizeof(buf), "ad%d", bsd_device); + grub_env_set ("kFreeBSD.vfs.root.mountfrom", buf); + } + else + grub_env_unset ("kFreeBSD.vfs.root.mountfrom"); + cmd = grub_command_find ("kfreebsd"); + if (cmd) + { + if (!(cmd->func) (cmd, cutargc, cutargs)) + { + kernel_type = KFREEBSD; + goto out; + } + } + grub_errno = GRUB_ERR_NONE; + } + { + char **bsdargs; + int bsdargc; + char bsddevname[sizeof ("wdXXXXXXXXXXXXY")]; + int found = 0; + + if (bsd_device == -1) + { + bsdargs = cutargs; + bsdargc = cutargc; + } + else + { + char rbuf[3] = "-r"; + bsdargc = cutargc + 2; + bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc); + if (!bsdargs) + { + err = grub_errno; + goto out; + } + grub_memcpy (bsdargs, args, argc * sizeof (bsdargs[0])); + bsdargs[argc] = rbuf; + bsdargs[argc + 1] = bsddevname; + grub_snprintf (bsddevname, sizeof (bsddevname), + "wd%d%c", bsd_device, + bsd_part != -1 ? bsd_part + 'a' : 'c'); + } + if (kernel_type == GUESS_IT || kernel_type == KNETBSD) + { + cmd = grub_command_find ("knetbsd"); + if (cmd) + { + if (!(cmd->func) (cmd, bsdargc, bsdargs)) + { + kernel_type = KNETBSD; + found = 1; + goto free_bsdargs; + } + } + grub_errno = GRUB_ERR_NONE; + } + if (kernel_type == GUESS_IT || kernel_type == KOPENBSD) + { + cmd = grub_command_find ("kopenbsd"); + if (cmd) + { + if (!(cmd->func) (cmd, bsdargc, bsdargs)) + { + kernel_type = KOPENBSD; + found = 1; + goto free_bsdargs; + } + } + grub_errno = GRUB_ERR_NONE; + } + +free_bsdargs: + if (bsdargs != cutargs) + grub_free (bsdargs); + if (found) + goto out; + } + } + } + while (0); + + err = grub_error (GRUB_ERR_BAD_OS, "couldn't load file %s", + args[0]); +out: + grub_free (cutargs); + return err; +} + +static grub_err_t +grub_cmd_legacy_initrd (struct grub_command *mycmd __attribute__ ((unused)), + int argc, char **args) +{ + struct grub_command *cmd; + + if (kernel_type == LINUX) + { +#ifdef GRUB_MACHINE_PCBIOS + cmd = grub_command_find ("initrd16"); +#else + cmd = grub_command_find ("initrd"); +#endif + if (!cmd) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"), +#ifdef GRUB_MACHINE_PCBIOS + "initrd16" +#else + "initrd" +#endif + ); + + return cmd->func (cmd, argc ? 1 : 0, args); + } + if (kernel_type == MULTIBOOT) + { + cmd = grub_command_find ("module"); + if (!cmd) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"), + "module"); + + return cmd->func (cmd, argc, args); + } + + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("you need to load the kernel first")); +} + +static grub_err_t +grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused)), + int argc, char **args) +{ + struct grub_command *cmd; + + if (kernel_type == LINUX) + { + cmd = grub_command_find ("initrd16"); + if (!cmd) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"), + "initrd16"); + + return cmd->func (cmd, argc, args); + } + if (kernel_type == MULTIBOOT) + { + char **newargs; + grub_err_t err; + char nounzipbuf[10] = "--nounzip"; + + cmd = grub_command_find ("module"); + if (!cmd) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"), + "module"); + + newargs = grub_malloc ((argc + 1) * sizeof (newargs[0])); + if (!newargs) + return grub_errno; + grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0])); + newargs[0] = nounzipbuf; + + err = cmd->func (cmd, argc + 1, newargs); + grub_free (newargs); + return err; + } + + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("you need to load the kernel first")); +} + +static grub_err_t +check_password_deny (const char *user __attribute__ ((unused)), + const char *entered __attribute__ ((unused)), + void *password __attribute__ ((unused))) +{ + return GRUB_ACCESS_DENIED; +} + +#define MD5_HASHLEN 16 + +struct legacy_md5_password +{ + grub_uint8_t *salt; + int saltlen; + grub_uint8_t hash[MD5_HASHLEN]; +}; + +static int +check_password_md5_real (const char *entered, + struct legacy_md5_password *pw) +{ + grub_size_t enteredlen = grub_strlen (entered); + unsigned char alt_result[MD5_HASHLEN]; + unsigned char *digest; + grub_uint8_t *ctx; + grub_size_t i; + int ret; + + ctx = grub_zalloc (GRUB_MD_MD5->contextsize); + if (!ctx) + return 0; + + GRUB_MD_MD5->init (ctx); + GRUB_MD_MD5->write (ctx, entered, enteredlen); + GRUB_MD_MD5->write (ctx, pw->salt + 3, pw->saltlen - 3); + GRUB_MD_MD5->write (ctx, entered, enteredlen); + digest = GRUB_MD_MD5->read (ctx); + GRUB_MD_MD5->final (ctx); + grub_memcpy (alt_result, digest, MD5_HASHLEN); + + GRUB_MD_MD5->init (ctx); + GRUB_MD_MD5->write (ctx, entered, enteredlen); + GRUB_MD_MD5->write (ctx, pw->salt, pw->saltlen); /* include the $1$ header */ + for (i = enteredlen; i > 16; i -= 16) + GRUB_MD_MD5->write (ctx, alt_result, 16); + GRUB_MD_MD5->write (ctx, alt_result, i); + + for (i = enteredlen; i > 0; i >>= 1) + GRUB_MD_MD5->write (ctx, entered + ((i & 1) ? enteredlen : 0), 1); + digest = GRUB_MD_MD5->read (ctx); + GRUB_MD_MD5->final (ctx); + + for (i = 0; i < 1000; i++) + { + grub_memcpy (alt_result, digest, 16); + + GRUB_MD_MD5->init (ctx); + if ((i & 1) != 0) + GRUB_MD_MD5->write (ctx, entered, enteredlen); + else + GRUB_MD_MD5->write (ctx, alt_result, 16); + + if (i % 3 != 0) + GRUB_MD_MD5->write (ctx, pw->salt + 3, pw->saltlen - 3); + + if (i % 7 != 0) + GRUB_MD_MD5->write (ctx, entered, enteredlen); + + if ((i & 1) != 0) + GRUB_MD_MD5->write (ctx, alt_result, 16); + else + GRUB_MD_MD5->write (ctx, entered, enteredlen); + digest = GRUB_MD_MD5->read (ctx); + GRUB_MD_MD5->final (ctx); + } + + ret = (grub_crypto_memcmp (digest, pw->hash, MD5_HASHLEN) == 0); + grub_free (ctx); + return ret; +} + +static grub_err_t +check_password_md5 (const char *user, + const char *entered, + void *password) +{ + if (!check_password_md5_real (entered, password)) + return GRUB_ACCESS_DENIED; + + grub_auth_authenticate (user); + + return GRUB_ERR_NONE; +} + +static inline int +ib64t (char c) +{ + if (c == '.') + return 0; + if (c == '/') + return 1; + if (c >= '0' && c <= '9') + return c - '0' + 2; + if (c >= 'A' && c <= 'Z') + return c - 'A' + 12; + if (c >= 'a' && c <= 'z') + return c - 'a' + 38; + return -1; +} + +static struct legacy_md5_password * +parse_legacy_md5 (int argc, char **args) +{ + const char *salt, *saltend; + struct legacy_md5_password *pw = NULL; + int i; + const char *p; + + if (grub_memcmp (args[0], "--md5", sizeof ("--md5")) != 0) + goto fail; + if (argc == 1) + goto fail; + if (grub_strlen(args[1]) <= 3) + goto fail; + salt = args[1]; + saltend = grub_strchr (salt + 3, '$'); + if (!saltend) + goto fail; + pw = grub_malloc (sizeof (*pw)); + if (!pw) + goto fail; + + p = saltend + 1; + for (i = 0; i < 5; i++) + { + int n; + grub_uint32_t w = 0; + + for (n = 0; n < 4; n++) + { + int ww = ib64t(*p++); + if (ww == -1) + goto fail; + w |= ww << (n * 6); + } + pw->hash[i == 4 ? 5 : 12+i] = w & 0xff; + pw->hash[6+i] = (w >> 8) & 0xff; + pw->hash[i] = (w >> 16) & 0xff; + } + { + int n; + grub_uint32_t w = 0; + for (n = 0; n < 2; n++) + { + int ww = ib64t(*p++); + if (ww == -1) + goto fail; + w |= ww << (6 * n); + } + if (w >= 0x100) + goto fail; + pw->hash[11] = w; + } + + pw->saltlen = saltend - salt; + pw->salt = (grub_uint8_t *) grub_strndup (salt, pw->saltlen); + if (!pw->salt) + goto fail; + + return pw; + + fail: + grub_free (pw); + return NULL; +} + +static grub_err_t +grub_cmd_legacy_password (struct grub_command *mycmd __attribute__ ((unused)), + int argc, char **args) +{ + struct legacy_md5_password *pw = NULL; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + if (args[0][0] != '-' || args[0][1] != '-') + return grub_normal_set_password ("legacy", args[0]); + + pw = parse_legacy_md5 (argc, args); + + if (pw) + return grub_auth_register_authentication ("legacy", check_password_md5, pw); + else + /* This is to imitate minor difference between grub-legacy in GRUB2. + If 2 password commands are executed in a row and second one fails + on GRUB2 the password of first one is used, whereas in grub-legacy + authenthication is denied. In case of no password command was executed + early both versions deny any access. */ + return grub_auth_register_authentication ("legacy", check_password_deny, + NULL); +} + +int +grub_legacy_check_md5_password (int argc, char **args, + char *entered) +{ + struct legacy_md5_password *pw = NULL; + int ret; + + if (args[0][0] != '-' || args[0][1] != '-') + { + char correct[GRUB_AUTH_MAX_PASSLEN]; + + grub_memset (correct, 0, sizeof (correct)); + grub_strncpy (correct, args[0], sizeof (correct)); + + return grub_crypto_memcmp (entered, correct, GRUB_AUTH_MAX_PASSLEN) == 0; + } + + pw = parse_legacy_md5 (argc, args); + + if (!pw) + return 0; + + ret = check_password_md5_real (entered, pw); + grub_free (pw); + return ret; +} + +static grub_err_t +grub_cmd_legacy_check_password (struct grub_command *mycmd __attribute__ ((unused)), + int argc, char **args) +{ + char entered[GRUB_AUTH_MAX_PASSLEN]; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + grub_puts_ (N_("Enter password: ")); + if (!grub_password_get (entered, GRUB_AUTH_MAX_PASSLEN)) + return GRUB_ACCESS_DENIED; + + if (!grub_legacy_check_md5_password (argc, args, + entered)) + return GRUB_ACCESS_DENIED; + + return GRUB_ERR_NONE; +} + +static grub_command_t cmd_source, cmd_configfile; +static grub_command_t cmd_source_extract, cmd_configfile_extract; +static grub_command_t cmd_kernel, cmd_initrd, cmd_initrdnounzip; +static grub_command_t cmd_password, cmd_check_password; + +GRUB_MOD_INIT(legacycfg) +{ + cmd_source + = grub_register_command ("legacy_source", + grub_cmd_legacy_source, + N_("FILE"), + /* TRANSLATORS: "legacy config" means + "config as used by grub-legacy". */ + N_("Parse legacy config in same context")); + cmd_configfile + = grub_register_command ("legacy_configfile", + grub_cmd_legacy_source, + N_("FILE"), + N_("Parse legacy config in new context")); + cmd_source_extract + = grub_register_command ("extract_legacy_entries_source", + grub_cmd_legacy_source, + N_("FILE"), + N_("Parse legacy config in same context taking only menu entries")); + cmd_configfile_extract + = grub_register_command ("extract_legacy_entries_configfile", + grub_cmd_legacy_source, + N_("FILE"), + N_("Parse legacy config in new context taking only menu entries")); + + cmd_kernel = grub_register_command ("legacy_kernel", + grub_cmd_legacy_kernel, + N_("[--no-mem-option] [--type=TYPE] FILE [ARG ...]"), + N_("Simulate grub-legacy `kernel' command")); + + cmd_initrd = grub_register_command ("legacy_initrd", + grub_cmd_legacy_initrd, + N_("FILE [ARG ...]"), + N_("Simulate grub-legacy `initrd' command")); + cmd_initrdnounzip = grub_register_command ("legacy_initrd_nounzip", + grub_cmd_legacy_initrdnounzip, + N_("FILE [ARG ...]"), + N_("Simulate grub-legacy `modulenounzip' command")); + + cmd_password = grub_register_command ("legacy_password", + grub_cmd_legacy_password, + N_("[--md5] PASSWD [FILE]"), + N_("Simulate grub-legacy `password' command")); + + cmd_check_password = grub_register_command ("legacy_check_password", + grub_cmd_legacy_check_password, + N_("[--md5] PASSWD [FILE]"), + N_("Simulate grub-legacy `password' command in menu entry mode")); + +} + +GRUB_MOD_FINI(legacycfg) +{ + grub_unregister_command (cmd_source); + grub_unregister_command (cmd_configfile); + grub_unregister_command (cmd_source_extract); + grub_unregister_command (cmd_configfile_extract); + + grub_unregister_command (cmd_kernel); + grub_unregister_command (cmd_initrd); + grub_unregister_command (cmd_initrdnounzip); + + grub_unregister_command (cmd_password); + grub_unregister_command (cmd_check_password); +} diff --git a/grub-core/commands/loadenv.c b/grub-core/commands/loadenv.c new file mode 100644 index 000000000..acd93d123 --- /dev/null +++ b/grub-core/commands/loadenv.c @@ -0,0 +1,468 @@ +/* loadenv.c - command to load/save environment variable. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + /* TRANSLATORS: This option is used to override default filename + for loading and storing environment. */ + {"file", 'f', 0, N_("Specify filename."), 0, ARG_TYPE_PATHNAME}, + {"skip-sig", 's', 0, + N_("Skip signature-checking of the environment file."), 0, ARG_TYPE_NONE}, + {0, 0, 0, 0, 0, 0} + }; + +/* Opens 'filename' with compression filters disabled. Optionally disables the + PUBKEY filter (that insists upon properly signed files) as well. PUBKEY + filter is restored before the function returns. */ +static grub_file_t +open_envblk_file (char *filename, int untrusted) +{ + grub_file_t file; + char *buf = 0; + + if (! filename) + { + const char *prefix; + int len; + + prefix = grub_env_get ("prefix"); + if (! prefix) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix"); + return 0; + } + + len = grub_strlen (prefix); + buf = grub_malloc (len + 1 + sizeof (GRUB_ENVBLK_DEFCFG)); + if (! buf) + return 0; + filename = buf; + + grub_strcpy (filename, prefix); + filename[len] = '/'; + grub_strcpy (filename + len + 1, GRUB_ENVBLK_DEFCFG); + } + + /* The filters that are disabled will be re-enabled by the call to + grub_file_open() after this particular file is opened. */ + grub_file_filter_disable_compression (); + if (untrusted) + grub_file_filter_disable_pubkey (); + + file = grub_file_open (filename); + + grub_free (buf); + return file; +} + +static grub_envblk_t +read_envblk_file (grub_file_t file) +{ + grub_off_t offset = 0; + char *buf; + grub_size_t size = grub_file_size (file); + grub_envblk_t envblk; + + buf = grub_malloc (size); + if (! buf) + return 0; + + while (size > 0) + { + grub_ssize_t ret; + + ret = grub_file_read (file, buf + offset, size); + if (ret <= 0) + { + grub_free (buf); + return 0; + } + + size -= ret; + offset += ret; + } + + envblk = grub_envblk_open (buf, offset); + if (! envblk) + { + grub_free (buf); + grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid environment block"); + return 0; + } + + return envblk; +} + +struct grub_env_whitelist +{ + grub_size_t len; + char **list; +}; +typedef struct grub_env_whitelist grub_env_whitelist_t; + +static int +test_whitelist_membership (const char* name, + const grub_env_whitelist_t* whitelist) +{ + grub_size_t i; + + for (i = 0; i < whitelist->len; i++) + if (grub_strcmp (name, whitelist->list[i]) == 0) + return 1; /* found it */ + + return 0; /* not found */ +} + +/* Helper for grub_cmd_load_env. */ +static int +set_var (const char *name, const char *value, void *whitelist) +{ + if (! whitelist) + { + grub_env_set (name, value); + return 0; + } + + if (test_whitelist_membership (name, + (const grub_env_whitelist_t *) whitelist)) + grub_env_set (name, value); + + return 0; +} + +static grub_err_t +grub_cmd_load_env (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + grub_file_t file; + grub_envblk_t envblk; + grub_env_whitelist_t whitelist; + + whitelist.len = argc; + whitelist.list = args; + + /* state[0] is the -f flag; state[1] is the --skip-sig flag */ + file = open_envblk_file ((state[0].set) ? state[0].arg : 0, state[1].set); + if (! file) + return grub_errno; + + envblk = read_envblk_file (file); + if (! envblk) + goto fail; + + /* argc > 0 indicates caller provided a whitelist of variables to read. */ + grub_envblk_iterate (envblk, argc > 0 ? &whitelist : 0, set_var); + grub_envblk_close (envblk); + + fail: + grub_file_close (file); + return grub_errno; +} + +/* Print all variables in current context. */ +static int +print_var (const char *name, const char *value, + void *hook_data __attribute__ ((unused))) +{ + grub_printf ("%s=%s\n", name, value); + return 0; +} + +static grub_err_t +grub_cmd_list_env (grub_extcmd_context_t ctxt, + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + struct grub_arg_list *state = ctxt->state; + grub_file_t file; + grub_envblk_t envblk; + + file = open_envblk_file ((state[0].set) ? state[0].arg : 0, 0); + if (! file) + return grub_errno; + + envblk = read_envblk_file (file); + if (! envblk) + goto fail; + + grub_envblk_iterate (envblk, NULL, print_var); + grub_envblk_close (envblk); + + fail: + grub_file_close (file); + return grub_errno; +} + +/* Used to maintain a variable length of blocklists internally. */ +struct blocklist +{ + grub_disk_addr_t sector; + unsigned offset; + unsigned length; + struct blocklist *next; +}; + +static void +free_blocklists (struct blocklist *p) +{ + struct blocklist *q; + + for (; p; p = q) + { + q = p->next; + grub_free (p); + } +} + +static grub_err_t +check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists, + grub_file_t file) +{ + grub_size_t total_length; + grub_size_t index; + grub_disk_t disk; + grub_disk_addr_t part_start; + struct blocklist *p; + char *buf; + + /* Sanity checks. */ + total_length = 0; + for (p = blocklists; p; p = p->next) + { + struct blocklist *q; + /* Check if any pair of blocks overlap. */ + for (q = p->next; q; q = q->next) + { + grub_disk_addr_t s1, s2; + grub_disk_addr_t e1, e2; + + s1 = p->sector; + e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); + + s2 = q->sector; + e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); + + if (s1 < e2 && s2 < e1) + { + /* This might be actually valid, but it is unbelievable that + any filesystem makes such a silly allocation. */ + return grub_error (GRUB_ERR_BAD_FS, "malformed file"); + } + } + + total_length += p->length; + } + + if (total_length != grub_file_size (file)) + { + /* Maybe sparse, unallocated sectors. No way in GRUB. */ + return grub_error (GRUB_ERR_BAD_FILE_TYPE, "sparse file not allowed"); + } + + /* One more sanity check. Re-read all sectors by blocklists, and compare + those with the data read via a file. */ + disk = file->device->disk; + + part_start = grub_partition_get_start (disk->partition); + + buf = grub_envblk_buffer (envblk); + char *blockbuf = NULL; + grub_size_t blockbuf_len = 0; + for (p = blocklists, index = 0; p; index += p->length, p = p->next) + { + if (p->length > blockbuf_len) + { + grub_free (blockbuf); + blockbuf_len = 2 * p->length; + blockbuf = grub_malloc (blockbuf_len); + if (!blockbuf) + return grub_errno; + } + + if (grub_disk_read (disk, p->sector - part_start, + p->offset, p->length, blockbuf)) + return grub_errno; + + if (grub_memcmp (buf + index, blockbuf, p->length) != 0) + return grub_error (GRUB_ERR_FILE_READ_ERROR, "invalid blocklist"); + } + + return GRUB_ERR_NONE; +} + +static int +write_blocklists (grub_envblk_t envblk, struct blocklist *blocklists, + grub_file_t file) +{ + char *buf; + grub_disk_t disk; + grub_disk_addr_t part_start; + struct blocklist *p; + grub_size_t index; + + buf = grub_envblk_buffer (envblk); + disk = file->device->disk; + part_start = grub_partition_get_start (disk->partition); + + index = 0; + for (p = blocklists; p; index += p->length, p = p->next) + { + if (grub_disk_write (disk, p->sector - part_start, + p->offset, p->length, buf + index)) + return 0; + } + + return 1; +} + +/* Context for grub_cmd_save_env. */ +struct grub_cmd_save_env_ctx +{ + struct blocklist *head, *tail; +}; + +/* Store blocklists in a linked list. */ +static void +save_env_read_hook (grub_disk_addr_t sector, unsigned offset, unsigned length, + void *data) +{ + struct grub_cmd_save_env_ctx *ctx = data; + struct blocklist *block; + + block = grub_malloc (sizeof (*block)); + if (! block) + return; + + block->sector = sector; + block->offset = offset; + block->length = length; + + /* Slightly complicated, because the list should be FIFO. */ + block->next = 0; + if (ctx->tail) + ctx->tail->next = block; + ctx->tail = block; + if (! ctx->head) + ctx->head = block; +} + +static grub_err_t +grub_cmd_save_env (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + grub_file_t file; + grub_envblk_t envblk; + struct grub_cmd_save_env_ctx ctx = { + .head = 0, + .tail = 0 + }; + + if (! argc) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no variable is specified"); + + file = open_envblk_file ((state[0].set) ? state[0].arg : 0, + 1 /* allow untrusted */); + if (! file) + return grub_errno; + + if (! file->device->disk) + { + grub_file_close (file); + return grub_error (GRUB_ERR_BAD_DEVICE, "disk device required"); + } + + file->read_hook = save_env_read_hook; + file->read_hook_data = &ctx; + envblk = read_envblk_file (file); + file->read_hook = 0; + if (! envblk) + goto fail; + + if (check_blocklists (envblk, ctx.head, file)) + goto fail; + + while (argc) + { + const char *value; + + value = grub_env_get (args[0]); + if (value) + { + if (! grub_envblk_set (envblk, args[0], value)) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "environment block too small"); + goto fail; + } + } + else + grub_envblk_delete (envblk, args[0]); + + argc--; + args++; + } + + write_blocklists (envblk, ctx.head, file); + + fail: + if (envblk) + grub_envblk_close (envblk); + free_blocklists (ctx.head); + grub_file_close (file); + return grub_errno; +} + +static grub_extcmd_t cmd_load, cmd_list, cmd_save; + +GRUB_MOD_INIT(loadenv) +{ + cmd_load = + grub_register_extcmd ("load_env", grub_cmd_load_env, 0, + N_("[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]"), + N_("Load variables from environment block file."), + options); + cmd_list = + grub_register_extcmd ("list_env", grub_cmd_list_env, 0, N_("[-f FILE]"), + N_("List variables from environment block file."), + options); + cmd_save = + grub_register_extcmd ("save_env", grub_cmd_save_env, 0, + N_("[-f FILE] variable_name [...]"), + N_("Save variables to environment block file."), + options); +} + +GRUB_MOD_FINI(loadenv) +{ + grub_unregister_extcmd (cmd_load); + grub_unregister_extcmd (cmd_list); + grub_unregister_extcmd (cmd_save); +} diff --git a/grub-core/commands/ls.c b/grub-core/commands/ls.c new file mode 100644 index 000000000..0eaf83652 --- /dev/null +++ b/grub-core/commands/ls.c @@ -0,0 +1,293 @@ +/* ls.c - command to list files and devices */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + {"long", 'l', 0, N_("Show a long list with more detailed information."), 0, 0}, + {"human-readable", 'h', 0, N_("Print sizes in a human readable format."), 0, 0}, + {"all", 'a', 0, N_("List all files."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +/* Helper for grub_ls_list_devices. */ +static int +grub_ls_print_devices (const char *name, void *data) +{ + int *longlist = data; + + if (*longlist) + grub_normal_print_device_info (name); + else + grub_printf ("(%s) ", name); + + return 0; +} + +static grub_err_t +grub_ls_list_devices (int longlist) +{ + grub_device_iterate (grub_ls_print_devices, &longlist); + grub_xputs ("\n"); + +#if 0 + { + grub_net_app_level_t proto; + int first = 1; + FOR_NET_APP_LEVEL (proto) + { + if (first) + grub_puts_ (N_ ("Network protocols:")); + first = 0; + grub_printf ("%s ", proto->name); + } + grub_xputs ("\n"); + } +#endif + + grub_refresh (); + + return 0; +} + +/* Context for grub_ls_list_files. */ +struct grub_ls_list_files_ctx +{ + char *dirname; + int all; + int human; +}; + +/* Helper for grub_ls_list_files. */ +static int +print_files (const char *filename, const struct grub_dirhook_info *info, + void *data) +{ + struct grub_ls_list_files_ctx *ctx = data; + + if (ctx->all || filename[0] != '.') + grub_printf ("%s%s ", filename, info->dir ? "/" : ""); + + return 0; +} + +/* Helper for grub_ls_list_files. */ +static int +print_files_long (const char *filename, const struct grub_dirhook_info *info, + void *data) +{ + struct grub_ls_list_files_ctx *ctx = data; + + if ((! ctx->all) && (filename[0] == '.')) + return 0; + + if (! info->dir) + { + grub_file_t file; + char *pathname; + + if (ctx->dirname[grub_strlen (ctx->dirname) - 1] == '/') + pathname = grub_xasprintf ("%s%s", ctx->dirname, filename); + else + pathname = grub_xasprintf ("%s/%s", ctx->dirname, filename); + + if (!pathname) + return 1; + + /* XXX: For ext2fs symlinks are detected as files while they + should be reported as directories. */ + grub_file_filter_disable_compression (); + file = grub_file_open (pathname); + if (! file) + { + grub_errno = 0; + grub_free (pathname); + return 0; + } + + if (! ctx->human) + grub_printf ("%-12llu", (unsigned long long) file->size); + else + grub_printf ("%-12s", grub_get_human_size (file->size, + GRUB_HUMAN_SIZE_SHORT)); + grub_file_close (file); + grub_free (pathname); + } + else + grub_printf ("%-12s", _("DIR")); + + if (info->mtimeset) + { + struct grub_datetime datetime; + grub_unixtime2datetime (info->mtime, &datetime); + if (ctx->human) + grub_printf (" %d-%02d-%02d %02d:%02d:%02d %-11s ", + datetime.year, datetime.month, datetime.day, + datetime.hour, datetime.minute, + datetime.second, + grub_get_weekday_name (&datetime)); + else + grub_printf (" %04d%02d%02d%02d%02d%02d ", + datetime.year, datetime.month, + datetime.day, datetime.hour, + datetime.minute, datetime.second); + } + grub_printf ("%s%s\n", filename, info->dir ? "/" : ""); + + return 0; +} + +static grub_err_t +grub_ls_list_files (char *dirname, int longlist, int all, int human) +{ + char *device_name; + grub_fs_t fs; + const char *path; + grub_device_t dev; + + device_name = grub_file_get_device_name (dirname); + dev = grub_device_open (device_name); + if (! dev) + goto fail; + + fs = grub_fs_probe (dev); + path = grub_strchr (dirname, ')'); + if (! path) + path = dirname; + else + path++; + + if (! path && ! device_name) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument"); + goto fail; + } + + if (! *path) + { + if (grub_errno == GRUB_ERR_UNKNOWN_FS) + grub_errno = GRUB_ERR_NONE; + + grub_normal_print_device_info (device_name); + } + else if (fs) + { + struct grub_ls_list_files_ctx ctx = { + .dirname = dirname, + .all = all, + .human = human + }; + + if (longlist) + (fs->dir) (dev, path, print_files_long, &ctx); + else + (fs->dir) (dev, path, print_files, &ctx); + + if (grub_errno == GRUB_ERR_BAD_FILE_TYPE + && path[grub_strlen (path) - 1] != '/') + { + /* PATH might be a regular file. */ + char *p; + grub_file_t file; + struct grub_dirhook_info info; + grub_errno = 0; + + grub_file_filter_disable_compression (); + file = grub_file_open (dirname); + if (! file) + goto fail; + + grub_file_close (file); + + p = grub_strrchr (dirname, '/') + 1; + dirname = grub_strndup (dirname, p - dirname); + if (! dirname) + goto fail; + + all = 1; + grub_memset (&info, 0, sizeof (info)); + if (longlist) + print_files_long (p, &info, &ctx); + else + print_files (p, &info, &ctx); + + grub_free (dirname); + } + + if (grub_errno == GRUB_ERR_NONE) + grub_xputs ("\n"); + + grub_refresh (); + } + + fail: + if (dev) + grub_device_close (dev); + + grub_free (device_name); + + return 0; +} + +static grub_err_t +grub_cmd_ls (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + int i; + + if (argc == 0) + grub_ls_list_devices (state[0].set); + else + for (i = 0; i < argc; i++) + grub_ls_list_files (args[i], state[0].set, state[2].set, + state[1].set); + + return 0; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(ls) +{ + cmd = grub_register_extcmd ("ls", grub_cmd_ls, 0, + N_("[-l|-h|-a] [FILE ...]"), + N_("List devices and files."), options); +} + +GRUB_MOD_FINI(ls) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/lsacpi.c b/grub-core/commands/lsacpi.c new file mode 100644 index 000000000..082491405 --- /dev/null +++ b/grub-core/commands/lsacpi.c @@ -0,0 +1,314 @@ +/* acpi.c - Display acpi tables. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wcast-align" + +GRUB_MOD_LICENSE ("GPLv3+"); + +static void +print_strn (grub_uint8_t *str, grub_size_t len) +{ + for (; *str && len; str++, len--) + grub_printf ("%c", *str); + for (len++; len; len--) + grub_printf (" "); +} + +#define print_field(x) print_strn(x, sizeof (x)) + +static void +disp_acpi_table (struct grub_acpi_table_header *t) +{ + print_field (t->signature); + grub_printf ("%4" PRIuGRUB_UINT32_T "B rev=%u chksum=0x%02x (%s) OEM=", t->length, t->revision, t->checksum, + grub_byte_checksum (t, t->length) == 0 ? "valid" : "invalid"); + print_field (t->oemid); + print_field (t->oemtable); + grub_printf ("OEMrev=%08" PRIxGRUB_UINT32_T " ", t->oemrev); + print_field (t->creator_id); + grub_printf (" %08" PRIxGRUB_UINT32_T "\n", t->creator_rev); +} + +static void +disp_madt_table (struct grub_acpi_madt *t) +{ + struct grub_acpi_madt_entry_header *d; + grub_uint32_t len; + + disp_acpi_table (&t->hdr); + grub_printf ("Local APIC=%08" PRIxGRUB_UINT32_T " Flags=%08" + PRIxGRUB_UINT32_T "\n", + t->lapic_addr, t->flags); + len = t->hdr.length - sizeof (struct grub_acpi_madt); + d = t->entries; + for (;len > 0; len -= d->len, d = (void *) ((grub_uint8_t *) d + d->len)) + { + switch (d->type) + { + case GRUB_ACPI_MADT_ENTRY_TYPE_LAPIC: + { + struct grub_acpi_madt_entry_lapic *dt = (void *) d; + grub_printf (" LAPIC ACPI_ID=%02x APIC_ID=%02x Flags=%08x\n", + dt->acpiid, dt->apicid, dt->flags); + if (dt->hdr.len != sizeof (*dt)) + grub_printf (" table size mismatch %d != %d\n", dt->hdr.len, + (int) sizeof (*dt)); + break; + } + + case GRUB_ACPI_MADT_ENTRY_TYPE_IOAPIC: + { + struct grub_acpi_madt_entry_ioapic *dt = (void *) d; + grub_printf (" IOAPIC ID=%02x address=%08x GSI=%08x\n", + dt->id, dt->address, dt->global_sys_interrupt); + if (dt->hdr.len != sizeof (*dt)) + grub_printf (" table size mismatch %d != %d\n", dt->hdr.len, + (int) sizeof (*dt)); + if (dt->pad) + grub_printf (" non-zero pad: %02x\n", dt->pad); + break; + } + + case GRUB_ACPI_MADT_ENTRY_TYPE_INTERRUPT_OVERRIDE: + { + struct grub_acpi_madt_entry_interrupt_override *dt = (void *) d; + grub_printf (" Int Override bus=%x src=%x GSI=%08x Flags=%04x\n", + dt->bus, dt->source, dt->global_sys_interrupt, + dt->flags); + if (dt->hdr.len != sizeof (*dt)) + grub_printf (" table size mismatch %d != %d\n", dt->hdr.len, + (int) sizeof (*dt)); + } + break; + + case GRUB_ACPI_MADT_ENTRY_TYPE_LAPIC_NMI: + { + struct grub_acpi_madt_entry_lapic_nmi *dt = (void *) d; + grub_printf (" LAPIC_NMI ACPI_ID=%02x Flags=%04x lint=%02x\n", + dt->acpiid, dt->flags, dt->lint); + if (dt->hdr.len != sizeof (*dt)) + grub_printf (" table size mismatch %d != %d\n", dt->hdr.len, + (int) sizeof (*dt)); + break; + } + + case GRUB_ACPI_MADT_ENTRY_TYPE_SAPIC: + { + struct grub_acpi_madt_entry_sapic *dt = (void *) d; + grub_printf (" IOSAPIC Id=%02x GSI=%08x Addr=%016" PRIxGRUB_UINT64_T + "\n", + dt->id, dt->global_sys_interrupt_base, + dt->addr); + if (dt->hdr.len != sizeof (*dt)) + grub_printf (" table size mismatch %d != %d\n", dt->hdr.len, + (int) sizeof (*dt)); + if (dt->pad) + grub_printf (" non-zero pad: %02x\n", dt->pad); + + } + break; + case GRUB_ACPI_MADT_ENTRY_TYPE_LSAPIC: + { + struct grub_acpi_madt_entry_lsapic *dt = (void *) d; + grub_printf (" LSAPIC ProcId=%02x ID=%02x EID=%02x Flags=%x", + dt->cpu_id, dt->id, dt->eid, dt->flags); + if (dt->flags & GRUB_ACPI_MADT_ENTRY_SAPIC_FLAGS_ENABLED) + grub_printf (" Enabled\n"); + else + grub_printf (" Disabled\n"); + if (d->len > sizeof (struct grub_acpi_madt_entry_sapic)) + grub_printf (" UID val=%08x, Str=%s\n", dt->cpu_uid, + dt->cpu_uid_str); + if (dt->hdr.len != sizeof (*dt) + grub_strlen ((char *) dt->cpu_uid_str) + 1) + grub_printf (" table size mismatch %d != %d\n", dt->hdr.len, + (int) sizeof (*dt)); + if (dt->pad[0] || dt->pad[1] || dt->pad[2]) + grub_printf (" non-zero pad: %02x%02x%02x\n", dt->pad[0], dt->pad[1], dt->pad[2]); + } + break; + case GRUB_ACPI_MADT_ENTRY_TYPE_PLATFORM_INT_SOURCE: + { + struct grub_acpi_madt_entry_platform_int_source *dt = (void *) d; + static const char * const platint_type[] = + {"Nul", "PMI", "INIT", "CPEI"}; + + grub_printf (" Platform INT flags=%04x type=%02x (%s)" + " ID=%02x EID=%02x\n", + dt->flags, dt->inttype, + (dt->inttype < ARRAY_SIZE (platint_type)) + ? platint_type[dt->inttype] : "??", dt->cpu_id, + dt->cpu_eid); + grub_printf (" IOSAPIC Vec=%02x GSI=%08x source flags=%08x\n", + dt->sapic_vector, dt->global_sys_int, dt->src_flags); + } + break; + default: + grub_printf (" type=%x l=%u ", d->type, d->len); + grub_printf (" ??\n"); + } + } +} + +static void +disp_acpi_xsdt_table (struct grub_acpi_table_header *t) +{ + grub_uint32_t len; + grub_uint64_t *desc; + + disp_acpi_table (t); + len = t->length - sizeof (*t); + desc = (grub_uint64_t *) (t + 1); + for (; len >= sizeof (*desc); desc++, len -= sizeof (*desc)) + { +#if GRUB_CPU_SIZEOF_VOID_P == 4 + if (*desc >= (1ULL << 32)) + { + grub_printf ("Unreachable table\n"); + continue; + } +#endif + t = (struct grub_acpi_table_header *) (grub_addr_t) *desc; + + if (t == NULL) + continue; + + if (grub_memcmp (t->signature, GRUB_ACPI_MADT_SIGNATURE, + sizeof (t->signature)) == 0) + disp_madt_table ((struct grub_acpi_madt *) t); + else + disp_acpi_table (t); + } +} + +static void +disp_acpi_rsdt_table (struct grub_acpi_table_header *t) +{ + grub_uint32_t len; + grub_uint32_t *desc; + + disp_acpi_table (t); + len = t->length - sizeof (*t); + desc = (grub_uint32_t *) (t + 1); + for (; len >= sizeof (*desc); desc++, len -= sizeof (*desc)) + { + t = (struct grub_acpi_table_header *) (grub_addr_t) *desc; + + if (t == NULL) + continue; + + if (grub_memcmp (t->signature, GRUB_ACPI_MADT_SIGNATURE, + sizeof (t->signature)) == 0) + disp_madt_table ((struct grub_acpi_madt *) t); + else + disp_acpi_table (t); + } +} + +static void +disp_acpi_rsdpv1 (struct grub_acpi_rsdp_v10 *rsdp) +{ + print_field (rsdp->signature); + grub_printf ("chksum:%02x (%s), OEM-ID: ", rsdp->checksum, grub_byte_checksum (rsdp, sizeof (*rsdp)) == 0 ? "valid" : "invalid"); + print_field (rsdp->oemid); + grub_printf ("rev=%d\n", rsdp->revision); + grub_printf ("RSDT=%08" PRIxGRUB_UINT32_T "\n", rsdp->rsdt_addr); +} + +static void +disp_acpi_rsdpv2 (struct grub_acpi_rsdp_v20 *rsdp) +{ + disp_acpi_rsdpv1 (&rsdp->rsdpv1); + grub_printf ("len=%d chksum=%02x (%s) XSDT=%016" PRIxGRUB_UINT64_T "\n", rsdp->length, rsdp->checksum, grub_byte_checksum (rsdp, rsdp->length) == 0 ? "valid" : "invalid", + rsdp->xsdt_addr); + if (rsdp->length != sizeof (*rsdp)) + grub_printf (" length mismatch %d != %d\n", rsdp->length, + (int) sizeof (*rsdp)); + if (rsdp->reserved[0] || rsdp->reserved[1] || rsdp->reserved[2]) + grub_printf (" non-zero reserved %02x%02x%02x\n", rsdp->reserved[0], rsdp->reserved[1], rsdp->reserved[2]); +} + +static const struct grub_arg_option options[] = { + {"v1", '1', 0, N_("Show version 1 tables only."), 0, ARG_TYPE_NONE}, + {"v2", '2', 0, N_("Show version 2 and version 3 tables only."), 0, ARG_TYPE_NONE}, + {0, 0, 0, 0, 0, 0} +}; + +static grub_err_t +grub_cmd_lsacpi (struct grub_extcmd_context *ctxt, + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + if (!ctxt->state[1].set) + { + struct grub_acpi_rsdp_v10 *rsdp1 = grub_acpi_get_rsdpv1 (); + if (!rsdp1) + grub_printf ("No RSDPv1\n"); + else + { + grub_printf ("RSDPv1 signature:"); + disp_acpi_rsdpv1 (rsdp1); + disp_acpi_rsdt_table ((void *) (grub_addr_t) rsdp1->rsdt_addr); + } + } + + if (!ctxt->state[0].set) + { + struct grub_acpi_rsdp_v20 *rsdp2 = grub_acpi_get_rsdpv2 (); + if (!rsdp2) + grub_printf ("No RSDPv2\n"); + else + { +#if GRUB_CPU_SIZEOF_VOID_P == 4 + if (rsdp2->xsdt_addr >= (1ULL << 32)) + grub_printf ("Unreachable RSDPv2\n"); + else +#endif + { + grub_printf ("RSDPv2 signature:"); + disp_acpi_rsdpv2 (rsdp2); + disp_acpi_xsdt_table ((void *) (grub_addr_t) rsdp2->xsdt_addr); + grub_printf ("\n"); + } + } + } + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(lsapi) +{ + cmd = grub_register_extcmd ("lsacpi", grub_cmd_lsacpi, 0, "[-1|-2]", + N_("Show ACPI information."), options); +} + +GRUB_MOD_FINI(lsacpi) +{ + grub_unregister_extcmd (cmd); +} + + diff --git a/grub-core/commands/lsmmap.c b/grub-core/commands/lsmmap.c new file mode 100644 index 000000000..816ee47d1 --- /dev/null +++ b/grub-core/commands/lsmmap.c @@ -0,0 +1,85 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#ifndef GRUB_MACHINE_EMU +static const char *names[] = + { + [GRUB_MEMORY_AVAILABLE] = N_("available RAM"), + [GRUB_MEMORY_RESERVED] = N_("reserved RAM"), + /* TRANSLATORS: this refers to memory where ACPI tables are stored + and which can be used by OS once it loads ACPI tables. */ + [GRUB_MEMORY_ACPI] = N_("ACPI reclaimable RAM"), + /* TRANSLATORS: this refers to memory which ACPI-compliant OS + is required to save accross hibernations. */ + [GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"), + [GRUB_MEMORY_BADRAM] = N_("faulty RAM (BadRAM)"), + [GRUB_MEMORY_PERSISTENT] = N_("persistent RAM"), + [GRUB_MEMORY_PERSISTENT_LEGACY] = N_("persistent RAM (legacy)"), + [GRUB_MEMORY_COREBOOT_TABLES] = N_("RAM holding coreboot tables"), + [GRUB_MEMORY_CODE] = N_("RAM holding firmware code") + }; + +/* Helper for grub_cmd_lsmmap. */ +static int +lsmmap_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type, + void *data __attribute__ ((unused))) +{ + if (type < (int) ARRAY_SIZE (names) && type >= 0 && names[type]) + grub_printf_ (N_("base_addr = 0x%llx, length = 0x%llx, %s\n"), + (long long) addr, (long long) size, _(names[type])); + else + grub_printf_ (N_("base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n"), + (long long) addr, (long long) size, type); + return 0; +} +#endif + +static grub_err_t +grub_cmd_lsmmap (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) + +{ +#ifndef GRUB_MACHINE_EMU + grub_machine_mmap_iterate (lsmmap_hook, NULL); +#endif + + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lsmmap) +{ + cmd = grub_register_command ("lsmmap", grub_cmd_lsmmap, + 0, N_("List memory map provided by firmware.")); +} + +GRUB_MOD_FINI(lsmmap) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/lspci.c b/grub-core/commands/lspci.c new file mode 100644 index 000000000..65213a372 --- /dev/null +++ b/grub-core/commands/lspci.c @@ -0,0 +1,238 @@ +/* lspci.c - List PCI devices. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_pci_classname +{ + int class; + int subclass; + const char *desc; +}; + +static const struct grub_pci_classname grub_pci_classes[] = + { + { 0, 0, "" }, + { 1, 0, "SCSI Controller" }, + { 1, 1, "IDE Controller" }, + { 1, 2, "Floppy Controller" }, + { 1, 3, "IPI Controller" }, + { 1, 4, "RAID Controller" }, + { 1, 6, "SATA Controller" }, + { 1, 0x80, "Mass storage Controller" }, + { 2, 0, "Ethernet Controller" }, + { 2, 1, "Token Ring Controller" }, + { 2, 2, "FDDI Controller" }, + { 2, 3, "ATM Controller" }, + { 2, 4, "ISDN Controller" }, + { 2, 0x80, "Network controller" }, + { 3, 0, "VGA Controller" }, + { 3, 1, "XGA Controller" }, + { 3, 2, "3D Controller" }, + { 3, 0x80, "Display Controller" }, + { 4, 0, "Multimedia Video Device" }, + { 4, 1, "Multimedia Audio Device" }, + { 4, 2, "Multimedia Telephony Device" }, + { 4, 0x80, "Multimedia device" }, + { 5, 0, "RAM Controller" }, + { 5, 1, "Flash Memory Controller" }, + { 5, 0x80, "Memory Controller" }, + { 6, 0, "Host Bridge" }, + { 6, 1, "ISA Bridge" }, + { 6, 2, "EISA Bride" }, + { 6, 3, "MCA Bridge" }, + { 6, 4, "PCI-PCI Bridge" }, + { 6, 5, "PCMCIA Bridge" }, + { 6, 6, "NuBus Bridge" }, + { 6, 7, "CardBus Bridge" }, + { 6, 8, "Raceway Bridge" }, + { 6, 0x80, "Unknown Bridge" }, + { 7, 0x80, "Communication controller" }, + { 8, 0x80, "System hardware" }, + { 9, 0, "Keyboard Controller" }, + { 9, 1, "Digitizer" }, + { 9, 2, "Mouse Controller" }, + { 9, 3, "Scanner Controller" }, + { 9, 4, "Gameport Controller" }, + { 9, 0x80, "Unknown Input Device" }, + { 10, 0, "Generic Docking Station" }, + { 10, 0x80, "Unknown Docking Station" }, + { 11, 0, "80386 Processor" }, + { 11, 1, "80486 Processor" }, + { 11, 2, "Pentium Processor" }, + { 11, 0x10, "Alpha Processor" }, + { 11, 0x20, "PowerPC Processor" }, + { 11, 0x30, "MIPS Processor" }, + { 11, 0x40, "Co-Processor" }, + { 11, 0x80, "Unknown Processor" }, + { 12, 3, "USB Controller" }, + { 12, 0x80, "Serial Bus Controller" }, + { 13, 0x80, "Wireless Controller" }, + { 14, 0, "I2O" }, + { 15, 0, "IrDA Controller" }, + { 15, 1, "Consumer IR" }, + { 15, 0x10, "RF-Controller" }, + { 15, 0x80, "Satellite Communication Controller" }, + { 16, 0, "Network Decryption" }, + { 16, 1, "Entertainment Decryption" }, + { 16, 0x80, "Unknown Decryption Controller" }, + { 17, 0, "Digital IO Module" }, + { 17, 0x80, "Unknown Data Input System" }, + { 0, 0, 0 }, + }; + +static const char * +grub_pci_get_class (int class, int subclass) +{ + const struct grub_pci_classname *curr = grub_pci_classes; + + while (curr->desc) + { + if (curr->class == class && curr->subclass == subclass) + return curr->desc; + curr++; + } + + return 0; +} + +static const struct grub_arg_option options[] = + { + {"iospace", 'i', 0, "show I/O spaces", 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static int iospace; + +static int +grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_uint32_t class; + const char *sclass; + grub_pci_address_t addr; + int reg; + + grub_printf ("%02x:%02x.%x %04x:%04x", grub_pci_get_bus (dev), + grub_pci_get_device (dev), grub_pci_get_function (dev), + pciid & 0xFFFF, pciid >> 16); + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + class = grub_pci_read (addr); + + /* Lookup the class name, if there isn't a specific one, + retry with 0x80 to get the generic class name. */ + sclass = grub_pci_get_class (class >> 24, (class >> 16) & 0xFF); + if (! sclass) + sclass = grub_pci_get_class (class >> 24, 0x80); + if (! sclass) + sclass = ""; + + grub_printf (" [%04x] %s", (class >> 16) & 0xffff, sclass); + + grub_uint8_t pi = (class >> 8) & 0xff; + if (pi) + grub_printf (" [PI %02x]", pi); + + grub_printf ("\n"); + + if (iospace) + { + reg = GRUB_PCI_REG_ADDRESSES; + while (reg < GRUB_PCI_REG_CIS_POINTER) + { + grub_uint64_t space; + addr = grub_pci_make_address (dev, reg); + space = grub_pci_read (addr); + + reg += sizeof (grub_uint32_t); + + if (space == 0) + continue; + + switch (space & GRUB_PCI_ADDR_SPACE_MASK) + { + case GRUB_PCI_ADDR_SPACE_IO: + grub_printf ("\tIO space %d at 0x%llx\n", + (unsigned) ((reg - GRUB_PCI_REG_ADDRESSES) + / sizeof (grub_uint32_t)) - 1, + (unsigned long long) + (space & GRUB_PCI_ADDR_IO_MASK)); + break; + case GRUB_PCI_ADDR_SPACE_MEMORY: + if ((space & GRUB_PCI_ADDR_MEM_TYPE_MASK) + == GRUB_PCI_ADDR_MEM_TYPE_64) + { + addr = grub_pci_make_address (dev, reg); + space |= ((grub_uint64_t) grub_pci_read (addr)) << 32; + reg += sizeof (grub_uint32_t); + grub_printf ("\t64-bit memory space %d at 0x%016llx [%s]\n", + (unsigned) ((reg - GRUB_PCI_REG_ADDRESSES) + / sizeof (grub_uint32_t)) - 2, + (unsigned long long) + (space & GRUB_PCI_ADDR_MEM_MASK), + space & GRUB_PCI_ADDR_MEM_PREFETCH + ? "prefetchable" : "non-prefetchable"); + + } + else + grub_printf ("\t32-bit memory space %d at 0x%016llx [%s]\n", + (unsigned) ((reg - GRUB_PCI_REG_ADDRESSES) + / sizeof (grub_uint32_t)) - 1, + (unsigned long long) + (space & GRUB_PCI_ADDR_MEM_MASK), + space & GRUB_PCI_ADDR_MEM_PREFETCH + ? "prefetchable" : "non-prefetchable"); + break; + } + } + } + + + return 0; +} + +static grub_err_t +grub_cmd_lspci (grub_extcmd_context_t ctxt, + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + iospace = ctxt->state[0].set; + grub_pci_iterate (grub_lspci_iter, NULL); + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(lspci) +{ + cmd = grub_register_extcmd ("lspci", grub_cmd_lspci, 0, "[-i]", + N_("List PCI devices."), options); +} + +GRUB_MOD_FINI(lspci) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/macbless.c b/grub-core/commands/macbless.c new file mode 100644 index 000000000..18efa1a84 --- /dev/null +++ b/grub-core/commands/macbless.c @@ -0,0 +1,235 @@ +/* hfspbless.c - set the hfs+ boot directory. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2007,2008,2009,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct find_node_context +{ + grub_uint64_t inode_found; + char *dirname; + enum + { FOUND_NONE, FOUND_FILE, FOUND_DIR } found; +}; + +static int +find_inode (const char *filename, + const struct grub_dirhook_info *info, void *data) +{ + struct find_node_context *ctx = data; + if (!info->inodeset) + return 0; + + if ((grub_strcmp (ctx->dirname, filename) == 0 + || (info->case_insensitive + && grub_strcasecmp (ctx->dirname, filename) == 0))) + { + ctx->inode_found = info->inode; + ctx->found = info->dir ? FOUND_DIR : FOUND_FILE; + } + return 0; +} + +grub_err_t +grub_mac_bless_inode (grub_device_t dev, grub_uint32_t inode, int is_dir, + int intel) +{ + grub_err_t err; + union + { + struct grub_hfs_sblock hfs; + struct grub_hfsplus_volheader hfsplus; + } volheader; + grub_disk_addr_t embedded_offset; + + if (intel && is_dir) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "can't bless a directory for mactel"); + if (!intel && !is_dir) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "can't bless a file for mac PPC"); + + /* Read the bootblock. */ + err = grub_disk_read (dev->disk, GRUB_HFSPLUS_SBLOCK, 0, sizeof (volheader), + (char *) &volheader); + if (err) + return err; + + embedded_offset = 0; + if (grub_be_to_cpu16 (volheader.hfs.magic) == GRUB_HFS_MAGIC) + { + int extent_start; + int ablk_size; + int ablk_start; + + /* See if there's an embedded HFS+ filesystem. */ + if (grub_be_to_cpu16 (volheader.hfs.embed_sig) != GRUB_HFSPLUS_MAGIC) + { + if (intel) + volheader.hfs.intel_bootfile = grub_be_to_cpu32 (inode); + else + volheader.hfs.ppc_bootdir = grub_be_to_cpu32 (inode); + return GRUB_ERR_NONE; + } + + /* Calculate the offset needed to translate HFS+ sector numbers. */ + extent_start = + grub_be_to_cpu16 (volheader.hfs.embed_extent.first_block); + ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz); + ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block); + embedded_offset = (ablk_start + + ((grub_uint64_t) extent_start) + * (ablk_size >> GRUB_DISK_SECTOR_BITS)); + + err = + grub_disk_read (dev->disk, embedded_offset + GRUB_HFSPLUS_SBLOCK, 0, + sizeof (volheader), (char *) &volheader); + if (err) + return err; + } + + if ((grub_be_to_cpu16 (volheader.hfsplus.magic) != GRUB_HFSPLUS_MAGIC) + && (grub_be_to_cpu16 (volheader.hfsplus.magic) != GRUB_HFSPLUSX_MAGIC)) + return grub_error (GRUB_ERR_BAD_FS, "not a HFS+ filesystem"); + if (intel) + volheader.hfsplus.intel_bootfile = grub_be_to_cpu32 (inode); + else + volheader.hfsplus.ppc_bootdir = grub_be_to_cpu32 (inode); + + return grub_disk_write (dev->disk, embedded_offset + GRUB_HFSPLUS_SBLOCK, 0, + sizeof (volheader), (char *) &volheader); +} + +grub_err_t +grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel) +{ + grub_fs_t fs; + + char *path, *tail; + struct find_node_context ctx; + + fs = grub_fs_probe (dev); + if (!fs || (grub_strcmp (fs->name, "hfsplus") != 0 + && grub_strcmp (fs->name, "hfs") != 0)) + return grub_error (GRUB_ERR_BAD_FS, "no suitable FS found"); + + path = grub_strdup (path_in); + if (!path) + return grub_errno; + + tail = path + grub_strlen (path) - 1; + + /* Remove trailing '/'. */ + while (tail != path && *tail == '/') + *(tail--) = 0; + + tail = grub_strrchr (path, '/'); + ctx.found = 0; + + if (tail) + { + *tail = 0; + ctx.dirname = tail + 1; + + (fs->dir) (dev, *path == 0 ? "/" : path, find_inode, &ctx); + } + else + { + ctx.dirname = path + 1; + (fs->dir) (dev, "/", find_inode, &ctx); + } + if (!ctx.found) + { + grub_free (path); + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), + path_in); + } + grub_free (path); + + return grub_mac_bless_inode (dev, (grub_uint32_t) ctx.inode_found, + (ctx.found == FOUND_DIR), intel); +} + +static grub_err_t +grub_cmd_macbless (grub_command_t cmd, int argc, char **args) +{ + char *device_name; + char *path = 0; + grub_device_t dev = 0; + grub_err_t err; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + device_name = grub_file_get_device_name (args[0]); + dev = grub_device_open (device_name); + + path = grub_strchr (args[0], ')'); + if (!path) + path = args[0]; + else + path = path + 1; + + if (!path || *path == 0 || !dev) + { + if (dev) + grub_device_close (dev); + + grub_free (device_name); + + return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument"); + } + + err = grub_mac_bless_file (dev, path, cmd->name[3] == 't'); + + grub_device_close (dev); + grub_free (device_name); + return err; +} + +static grub_command_t cmd, cmd_ppc; + +GRUB_MOD_INIT(macbless) +{ + cmd = grub_register_command ("mactelbless", grub_cmd_macbless, + N_("FILE"), + N_ + ("Bless FILE of HFS or HFS+ partition for intel macs.")); + cmd_ppc = + grub_register_command ("macppcbless", grub_cmd_macbless, N_("DIR"), + N_ + ("Bless DIR of HFS or HFS+ partition for PPC macs.")); +} + +GRUB_MOD_FINI(macbless) +{ + grub_unregister_command (cmd); + grub_unregister_command (cmd_ppc); +} diff --git a/grub-core/commands/memrw.c b/grub-core/commands/memrw.c new file mode 100644 index 000000000..98769eadb --- /dev/null +++ b/grub-core/commands/memrw.c @@ -0,0 +1,157 @@ +/* memrw.c - command to read / write physical memory */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_extcmd_t cmd_read_byte, cmd_read_word, cmd_read_dword; +static grub_command_t cmd_write_byte, cmd_write_word, cmd_write_dword; + +static const struct grub_arg_option options[] = + { + {0, 'v', 0, N_("Save read value into variable VARNAME."), + N_("VARNAME"), ARG_TYPE_STRING}, + {0, 0, 0, 0, 0, 0} + }; + + +static grub_err_t +grub_cmd_read (grub_extcmd_context_t ctxt, int argc, char **argv) +{ + grub_addr_t addr; + grub_uint32_t value = 0; + char buf[sizeof ("XXXXXXXX")]; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + addr = grub_strtoul (argv[0], 0, 0); + switch (ctxt->extcmd->cmd->name[sizeof ("read_") - 1]) + { + case 'd': + value = *((volatile grub_uint32_t *) addr); + break; + + case 'w': + value = *((volatile grub_uint16_t *) addr); + break; + + case 'b': + value = *((volatile grub_uint8_t *) addr); + break; + } + + if (ctxt->state[0].set) + { + grub_snprintf (buf, sizeof (buf), "%x", value); + grub_env_set (ctxt->state[0].arg, buf); + } + else + grub_printf ("0x%x\n", value); + + return 0; +} + +static grub_err_t +grub_cmd_write (grub_command_t cmd, int argc, char **argv) +{ + grub_addr_t addr; + grub_uint32_t value; + grub_uint32_t mask = 0xffffffff; + + if (argc != 2 && argc != 3) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + addr = grub_strtoul (argv[0], 0, 0); + value = grub_strtoul (argv[1], 0, 0); + if (argc == 3) + mask = grub_strtoul (argv[2], 0, 0); + value &= mask; + switch (cmd->name[sizeof ("write_") - 1]) + { + case 'd': + if (mask != 0xffffffff) + *((volatile grub_uint32_t *) addr) + = (*((volatile grub_uint32_t *) addr) & ~mask) | value; + else + *((volatile grub_uint32_t *) addr) = value; + break; + + case 'w': + if ((mask & 0xffff) != 0xffff) + *((volatile grub_uint16_t *) addr) + = (*((volatile grub_uint16_t *) addr) & ~mask) | value; + else + *((volatile grub_uint16_t *) addr) = value; + break; + + case 'b': + if ((mask & 0xff) != 0xff) + *((volatile grub_uint8_t *) addr) + = (*((volatile grub_uint8_t *) addr) & ~mask) | value; + else + *((volatile grub_uint8_t *) addr) = value; + break; + } + + return 0; +} + +GRUB_MOD_INIT(memrw) +{ + cmd_read_byte = + grub_register_extcmd ("read_byte", grub_cmd_read, 0, + N_("ADDR"), N_("Read 8-bit value from ADDR."), + options); + cmd_read_word = + grub_register_extcmd ("read_word", grub_cmd_read, 0, + N_("ADDR"), N_("Read 16-bit value from ADDR."), + options); + cmd_read_dword = + grub_register_extcmd ("read_dword", grub_cmd_read, 0, + N_("ADDR"), N_("Read 32-bit value from ADDR."), + options); + cmd_write_byte = + grub_register_command ("write_byte", grub_cmd_write, + N_("ADDR VALUE [MASK]"), + N_("Write 8-bit VALUE to ADDR.")); + cmd_write_word = + grub_register_command ("write_word", grub_cmd_write, + N_("ADDR VALUE [MASK]"), + N_("Write 16-bit VALUE to ADDR.")); + cmd_write_dword = + grub_register_command ("write_dword", grub_cmd_write, + N_("ADDR VALUE [MASK]"), + N_("Write 32-bit VALUE to ADDR.")); +} + +GRUB_MOD_FINI(memrw) +{ + grub_unregister_extcmd (cmd_read_byte); + grub_unregister_extcmd (cmd_read_word); + grub_unregister_extcmd (cmd_read_dword); + grub_unregister_command (cmd_write_byte); + grub_unregister_command (cmd_write_word); + grub_unregister_command (cmd_write_dword); +} diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c new file mode 100644 index 000000000..58d4dadf6 --- /dev/null +++ b/grub-core/commands/menuentry.c @@ -0,0 +1,337 @@ +/* menuentry.c - menuentry command */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +static const struct grub_arg_option options[] = + { + {"class", 1, GRUB_ARG_OPTION_REPEATABLE, + N_("Menu entry type."), N_("STRING"), ARG_TYPE_STRING}, + {"users", 2, 0, + N_("List of users allowed to boot this entry."), N_("USERNAME[,USERNAME]"), + ARG_TYPE_STRING}, + {"hotkey", 3, 0, + N_("Keyboard key to quickly boot this entry."), N_("KEYBOARD_KEY"), ARG_TYPE_STRING}, + {"source", 4, 0, + N_("Use STRING as menu entry body."), N_("STRING"), ARG_TYPE_STRING}, + {"id", 0, 0, N_("Menu entry identifier."), N_("STRING"), ARG_TYPE_STRING}, + /* TRANSLATORS: menu entry can either be bootable by anyone or only by + handful of users. By default when security is active only superusers can + boot a given menu entry. With --unrestricted (this option) + anyone can boot it. */ + {"unrestricted", 0, 0, N_("This entry can be booted by any user."), + 0, ARG_TYPE_NONE}, + {0, 0, 0, 0, 0, 0} + }; + +static struct +{ + const char *name; + int key; +} hotkey_aliases[] = + { + {"backspace", '\b'}, + {"tab", '\t'}, + {"delete", GRUB_TERM_KEY_DC}, + {"insert", GRUB_TERM_KEY_INSERT}, + {"f1", GRUB_TERM_KEY_F1}, + {"f2", GRUB_TERM_KEY_F2}, + {"f3", GRUB_TERM_KEY_F3}, + {"f4", GRUB_TERM_KEY_F4}, + {"f5", GRUB_TERM_KEY_F5}, + {"f6", GRUB_TERM_KEY_F6}, + {"f7", GRUB_TERM_KEY_F7}, + {"f8", GRUB_TERM_KEY_F8}, + {"f9", GRUB_TERM_KEY_F9}, + {"f10", GRUB_TERM_KEY_F10}, + {"f11", GRUB_TERM_KEY_F11}, + {"f12", GRUB_TERM_KEY_F12}, + }; + +/* Add a menu entry to the current menu context (as given by the environment + variable data slot `menu'). As the configuration file is read, the script + parser calls this when a menu entry is to be created. */ +grub_err_t +grub_normal_add_menu_entry (int argc, const char **args, + char **classes, const char *id, + const char *users, const char *hotkey, + const char *prefix, const char *sourcecode, + int submenu) +{ + int menu_hotkey = 0; + char **menu_args = NULL; + char *menu_users = NULL; + char *menu_title = NULL; + char *menu_sourcecode = NULL; + char *menu_id = NULL; + struct grub_menu_entry_class *menu_classes = NULL; + + grub_menu_t menu; + grub_menu_entry_t *last; + + menu = grub_env_get_menu (); + if (! menu) + return grub_error (GRUB_ERR_MENU, "no menu context"); + + last = &menu->entry_list; + + menu_sourcecode = grub_xasprintf ("%s%s", prefix ?: "", sourcecode); + if (! menu_sourcecode) + return grub_errno; + + if (classes && classes[0]) + { + int i; + for (i = 0; classes[i]; i++); /* count # of menuentry classes */ + menu_classes = grub_zalloc (sizeof (struct grub_menu_entry_class) + * (i + 1)); + if (! menu_classes) + goto fail; + + for (i = 0; classes[i]; i++) + { + menu_classes[i].name = grub_strdup (classes[i]); + if (! menu_classes[i].name) + goto fail; + menu_classes[i].next = classes[i + 1] ? &menu_classes[i + 1] : NULL; + } + } + + if (users) + { + menu_users = grub_strdup (users); + if (! menu_users) + goto fail; + } + + if (hotkey) + { + unsigned i; + for (i = 0; i < ARRAY_SIZE (hotkey_aliases); i++) + if (grub_strcmp (hotkey, hotkey_aliases[i].name) == 0) + { + menu_hotkey = hotkey_aliases[i].key; + break; + } + if (i == ARRAY_SIZE (hotkey_aliases)) + menu_hotkey = hotkey[0]; + } + + if (! argc) + { + grub_error (GRUB_ERR_MENU, "menuentry is missing title"); + goto fail; + } + + menu_title = grub_strdup (args[0]); + if (! menu_title) + goto fail; + + menu_id = grub_strdup (id ? : menu_title); + if (! menu_id) + goto fail; + + /* Save argc, args to pass as parameters to block arg later. */ + menu_args = grub_malloc (sizeof (char*) * (argc + 1)); + if (! menu_args) + goto fail; + + { + int i; + for (i = 0; i < argc; i++) + { + menu_args[i] = grub_strdup (args[i]); + if (! menu_args[i]) + goto fail; + } + menu_args[argc] = NULL; + } + + /* Add the menu entry at the end of the list. */ + while (*last) + last = &(*last)->next; + + *last = grub_zalloc (sizeof (**last)); + if (! *last) + goto fail; + + (*last)->title = menu_title; + (*last)->id = menu_id; + (*last)->hotkey = menu_hotkey; + (*last)->classes = menu_classes; + if (menu_users) + (*last)->restricted = 1; + (*last)->users = menu_users; + (*last)->argc = argc; + (*last)->args = menu_args; + (*last)->sourcecode = menu_sourcecode; + (*last)->submenu = submenu; + + menu->size++; + return GRUB_ERR_NONE; + + fail: + + grub_free (menu_sourcecode); + { + int i; + for (i = 0; menu_classes && menu_classes[i].name; i++) + grub_free (menu_classes[i].name); + grub_free (menu_classes); + } + + { + int i; + for (i = 0; menu_args && menu_args[i]; i++) + grub_free (menu_args[i]); + grub_free (menu_args); + } + + grub_free (menu_users); + grub_free (menu_title); + grub_free (menu_id); + return grub_errno; +} + +static char * +setparams_prefix (int argc, char **args) +{ + int i; + int j; + char *p; + char *result; + grub_size_t len = 10; + + /* Count resulting string length */ + for (i = 0; i < argc; i++) + { + len += 3; /* 3 = 1 space + 2 quotes */ + p = args[i]; + while (*p) + len += (*p++ == '\'' ? 3 : 1); + } + + result = grub_malloc (len + 2); + if (! result) + return 0; + + grub_strcpy (result, "setparams"); + p = result + 9; + + for (j = 0; j < argc; j++) + { + *p++ = ' '; + *p++ = '\''; + p = grub_strchrsub (p, args[j], '\'', "'\\''"); + *p++ = '\''; + } + *p++ = '\n'; + *p = '\0'; + return result; +} + +static grub_err_t +grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args) +{ + char ch; + char *src; + char *prefix; + unsigned len; + grub_err_t r; + const char *users; + + if (! argc) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing arguments"); + + if (ctxt->state[3].set && ctxt->script) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "multiple menuentry definitions"); + + if (! ctxt->state[3].set && ! ctxt->script) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no menuentry definition"); + + if (ctxt->state[1].set) + users = ctxt->state[1].arg; + else if (ctxt->state[5].set) + users = NULL; + else + users = ""; + + if (! ctxt->script) + return grub_normal_add_menu_entry (argc, (const char **) args, + (ctxt->state[0].set ? ctxt->state[0].args + : NULL), + ctxt->state[4].arg, + users, + ctxt->state[2].arg, 0, + ctxt->state[3].arg, + ctxt->extcmd->cmd->name[0] == 's'); + + src = args[argc - 1]; + args[argc - 1] = NULL; + + len = grub_strlen(src); + ch = src[len - 1]; + src[len - 1] = '\0'; + + prefix = setparams_prefix (argc - 1, args); + if (! prefix) + return grub_errno; + + r = grub_normal_add_menu_entry (argc - 1, (const char **) args, + ctxt->state[0].args, ctxt->state[4].arg, + users, + ctxt->state[2].arg, prefix, src + 1, + ctxt->extcmd->cmd->name[0] == 's'); + + src[len - 1] = ch; + args[argc - 1] = src; + grub_free (prefix); + return r; +} + +static grub_extcmd_t cmd, cmd_sub; + +void +grub_menu_init (void) +{ + cmd = grub_register_extcmd ("menuentry", grub_cmd_menuentry, + GRUB_COMMAND_FLAG_BLOCKS + | GRUB_COMMAND_ACCEPT_DASH + | GRUB_COMMAND_FLAG_EXTRACTOR, + N_("BLOCK"), N_("Define a menu entry."), options); + cmd_sub = grub_register_extcmd ("submenu", grub_cmd_menuentry, + GRUB_COMMAND_FLAG_BLOCKS + | GRUB_COMMAND_ACCEPT_DASH + | GRUB_COMMAND_FLAG_EXTRACTOR, + N_("BLOCK"), N_("Define a submenu."), + options); +} + +void +grub_menu_fini (void) +{ + grub_unregister_extcmd (cmd); + grub_unregister_extcmd (cmd_sub); +} diff --git a/grub-core/commands/minicmd.c b/grub-core/commands/minicmd.c new file mode 100644 index 000000000..a3a118241 --- /dev/null +++ b/grub-core/commands/minicmd.c @@ -0,0 +1,221 @@ +/* minicmd.c - commands for the rescue mode */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* cat FILE */ +static grub_err_t +grub_mini_cmd_cat (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_file_t file; + char buf[GRUB_DISK_SECTOR_SIZE]; + grub_ssize_t size; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + file = grub_file_open (argv[0]); + if (! file) + return grub_errno; + + while ((size = grub_file_read (file, buf, sizeof (buf))) > 0) + { + int i; + + for (i = 0; i < size; i++) + { + unsigned char c = buf[i]; + + if ((grub_isprint (c) || grub_isspace (c)) && c != '\r') + grub_printf ("%c", c); + else + { + grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); + grub_printf ("<%x>", (int) c); + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + } + } + } + + grub_xputs ("\n"); + grub_refresh (); + grub_file_close (file); + + return 0; +} + +/* help */ +static grub_err_t +grub_mini_cmd_help (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + grub_command_t p; + + for (p = grub_command_list; p; p = p->next) + grub_printf ("%s (%d%c)\t%s\n", p->name, + p->prio & GRUB_COMMAND_PRIO_MASK, + (p->prio & GRUB_COMMAND_FLAG_ACTIVE) ? '+' : '-', + p->description); + + return 0; +} + +/* dump ADDRESS [SIZE] */ +static grub_err_t +grub_mini_cmd_dump (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_uint8_t *addr; + grub_size_t size = 4; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no address specified"); + +#if GRUB_CPU_SIZEOF_VOID_P == GRUB_CPU_SIZEOF_LONG +#define grub_strtoaddr grub_strtoul +#else +#define grub_strtoaddr grub_strtoull +#endif + + addr = (grub_uint8_t *) grub_strtoaddr (argv[0], 0, 0); + if (grub_errno) + return grub_errno; + + if (argc > 1) + size = (grub_size_t) grub_strtoaddr (argv[1], 0, 0); + + while (size--) + { + grub_printf ("%x%x ", *addr >> 4, *addr & 0xf); + addr++; + } + + return 0; +} + +/* rmmod MODULE */ +static grub_err_t +grub_mini_cmd_rmmod (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_dl_t mod; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no module specified"); + + mod = grub_dl_get (argv[0]); + if (! mod) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no such module"); + + if (grub_dl_unref (mod) <= 0) + grub_dl_unload (mod); + + return 0; +} + +/* lsmod */ +static grub_err_t +grub_mini_cmd_lsmod (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + grub_dl_t mod; + + /* TRANSLATORS: this is module list header. Name + is module name, Ref Count is a reference counter + (how many modules or open descriptors use it). + Dependencies are the other modules it uses. + */ + grub_printf_ (N_("Name\tRef Count\tDependencies\n")); + FOR_DL_MODULES (mod) + { + grub_dl_dep_t dep; + + grub_printf ("%s\t%d\t\t", mod->name, mod->ref_count); + for (dep = mod->dep; dep; dep = dep->next) + { + if (dep != mod->dep) + grub_xputs (","); + + grub_printf ("%s", dep->mod->name); + } + grub_xputs ("\n"); + } + + return 0; +} + +/* exit */ +static grub_err_t __attribute__ ((noreturn)) +grub_mini_cmd_exit (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + grub_exit (); + /* Not reached. */ +} + +static grub_command_t cmd_cat, cmd_help; +static grub_command_t cmd_dump, cmd_rmmod, cmd_lsmod, cmd_exit; + +GRUB_MOD_INIT(minicmd) +{ + cmd_cat = + grub_register_command ("cat", grub_mini_cmd_cat, + N_("FILE"), N_("Show the contents of a file.")); + cmd_help = + grub_register_command ("help", grub_mini_cmd_help, + 0, N_("Show this message.")); + cmd_dump = + grub_register_command ("dump", grub_mini_cmd_dump, + N_("ADDR [SIZE]"), N_("Show memory contents.")); + cmd_rmmod = + grub_register_command ("rmmod", grub_mini_cmd_rmmod, + N_("MODULE"), N_("Remove a module.")); + cmd_lsmod = + grub_register_command ("lsmod", grub_mini_cmd_lsmod, + 0, N_("Show loaded modules.")); + cmd_exit = + grub_register_command ("exit", grub_mini_cmd_exit, + 0, N_("Exit from GRUB.")); +} + +GRUB_MOD_FINI(minicmd) +{ + grub_unregister_command (cmd_cat); + grub_unregister_command (cmd_help); + grub_unregister_command (cmd_dump); + grub_unregister_command (cmd_rmmod); + grub_unregister_command (cmd_lsmod); + grub_unregister_command (cmd_exit); +} diff --git a/grub-core/commands/mips/loongson/lsspd.c b/grub-core/commands/mips/loongson/lsspd.c new file mode 100644 index 000000000..a88ab87ac --- /dev/null +++ b/grub-core/commands/mips/loongson/lsspd.c @@ -0,0 +1,103 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_lsspd (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_pci_device_t dev; + grub_port_t smbbase; + int i; + grub_err_t err; + + if (!grub_cs5536_find (&dev)) + { + grub_puts_ (N_("No CS5536 found")); + return GRUB_ERR_NONE; + } + grub_printf_ (N_("CS5536 at %d:%d.%d\n"), grub_pci_get_bus (dev), + grub_pci_get_device (dev), grub_pci_get_function (dev)); + + err = grub_cs5536_init_smbus (dev, 0x7fff, &smbbase); + if (err) + return err; + + /* TRANSLATORS: System management bus is often used to access components like + RAM (info only, not data) or batteries. I/O space is where in memory + its ports are. */ + grub_printf_ (N_("System management bus controller I/O space is at 0x%x\n"), + smbbase); + + for (i = GRUB_SMB_RAM_START_ADDR; + i < GRUB_SMB_RAM_START_ADDR + GRUB_SMB_RAM_NUM_MAX; i++) + { + struct grub_smbus_spd spd; + grub_memset (&spd, 0, sizeof (spd)); + /* TRANSLATORS: it's shown in a report in a way + like number 1: ... number 2: ... + */ + grub_printf_ (N_("RAM slot number %d\n"), i); + err = grub_cs5536_read_spd (smbbase, i, &spd); + if (err) + { + grub_print_error (); + continue; + } + grub_printf_ (N_("Written SPD bytes: %d B.\n"), spd.written_size); + grub_printf_ (N_("Total flash size: %d B.\n"), + 1 << spd.log_total_flash_size); + if (spd.memory_type == GRUB_SMBUS_SPD_MEMORY_TYPE_DDR2) + { + char str[sizeof (spd.ddr2.part_number) + 1]; + grub_puts_ (N_("Memory type: DDR2.")); + grub_memcpy (str, spd.ddr2.part_number, + sizeof (spd.ddr2.part_number)); + str[sizeof (spd.ddr2.part_number)] = 0; + grub_printf_ (N_("Part no: %s.\n"), str); + } + else + grub_puts_ (N_("Memory type: Unknown.")); + } + + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(lsspd) +{ + cmd = grub_register_command ("lsspd", grub_cmd_lsspd, 0, + N_("Print Memory information.")); +} + +GRUB_MOD_FINI(lsspd) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c new file mode 100644 index 000000000..2f56a870e --- /dev/null +++ b/grub-core/commands/nativedisk.c @@ -0,0 +1,330 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const char *modnames_def[] = { + /* FIXME: autogenerate this. */ +#if defined (__i386__) || defined (__x86_64__) || defined (GRUB_MACHINE_MIPS_LOONGSON) + "pata", "ahci", "usbms", "ohci", "uhci", "ehci" +#elif defined (GRUB_MACHINE_MIPS_QEMU_MIPS) + "pata" +#else +#error "Fill this" +#endif + }; + +static grub_err_t +get_uuid (const char *name, char **uuid, int getnative) +{ + grub_device_t dev; + grub_fs_t fs = 0; + + *uuid = 0; + + dev = grub_device_open (name); + if (!dev) + return grub_errno; + + if (!dev->disk) + { + grub_dprintf ("nativedisk", "Skipping non-disk\n"); + grub_device_close (dev); + return 0; + } + + switch (dev->disk->dev->id) + { + /* Firmware disks. */ + case GRUB_DISK_DEVICE_BIOSDISK_ID: + case GRUB_DISK_DEVICE_OFDISK_ID: + case GRUB_DISK_DEVICE_EFIDISK_ID: + case GRUB_DISK_DEVICE_NAND_ID: + case GRUB_DISK_DEVICE_ARCDISK_ID: + case GRUB_DISK_DEVICE_HOSTDISK_ID: + case GRUB_DISK_DEVICE_UBOOTDISK_ID: + break; + + /* Native disks. */ + case GRUB_DISK_DEVICE_ATA_ID: + case GRUB_DISK_DEVICE_SCSI_ID: + case GRUB_DISK_DEVICE_XEN: + if (getnative) + break; + /* FALLTHROUGH */ + + /* Virtual disks. */ + /* GRUB dynamically generated files. */ + case GRUB_DISK_DEVICE_PROCFS_ID: + /* To access through host OS routines (grub-emu only). */ + case GRUB_DISK_DEVICE_HOST_ID: + /* To access coreboot roms. */ + case GRUB_DISK_DEVICE_CBFSDISK_ID: + /* GRUB-only memdisk. Can't match any of firmware devices. */ + case GRUB_DISK_DEVICE_MEMDISK_ID: + grub_dprintf ("nativedisk", "Skipping native disk %s\n", + dev->disk->name); + grub_device_close (dev); + return 0; + + /* FIXME: those probably need special handling. */ + case GRUB_DISK_DEVICE_LOOPBACK_ID: + case GRUB_DISK_DEVICE_DISKFILTER_ID: + case GRUB_DISK_DEVICE_CRYPTODISK_ID: + break; + } + if (dev) + fs = grub_fs_probe (dev); + if (!fs) + { + grub_device_close (dev); + return grub_errno; + } + if (!fs->uuid || fs->uuid (dev, uuid) || !*uuid) + { + grub_device_close (dev); + + if (!grub_errno) + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("%s does not support UUIDs"), fs->name); + + return grub_errno; + } + grub_device_close (dev); + return GRUB_ERR_NONE; +} + +struct search_ctx +{ + char *root_uuid; + char *prefix_uuid; + const char *prefix_path; + int prefix_found, root_found; +}; + +static int +iterate_device (const char *name, void *data) +{ + struct search_ctx *ctx = data; + char *cur_uuid; + + if (get_uuid (name, &cur_uuid, 1)) + { + if (grub_errno == GRUB_ERR_UNKNOWN_FS) + grub_errno = 0; + grub_print_error (); + return 0; + } + + grub_dprintf ("nativedisk", "checking %s: %s\n", name, + cur_uuid); + if (ctx->prefix_uuid && grub_strcasecmp (cur_uuid, ctx->prefix_uuid) == 0) + { + char *prefix; + prefix = grub_xasprintf ("(%s)/%s", name, ctx->prefix_path); + grub_env_set ("prefix", prefix); + grub_free (prefix); + ctx->prefix_found = 1; + } + if (ctx->root_uuid && grub_strcasecmp (cur_uuid, ctx->root_uuid) == 0) + { + grub_env_set ("root", name); + ctx->root_found = 1; + } + return ctx->prefix_found && ctx->root_found; +} + +static grub_err_t +grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args_in) +{ + char *uuid_root = 0, *uuid_prefix, *prefdev = 0; + const char *prefix = 0; + const char *path_prefix = 0; + int mods_loaded = 0; + grub_dl_t *mods; + const char **args; + int i; + + if (argc == 0) + { + argc = ARRAY_SIZE (modnames_def); + args = modnames_def; + } + else + args = (const char **) args_in; + + prefix = grub_env_get ("prefix"); + + if (! prefix) + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix"); + + if (prefix) + path_prefix = (prefix[0] == '(') ? grub_strchr (prefix, ')') : NULL; + if (path_prefix) + path_prefix++; + else + path_prefix = prefix; + + mods = grub_malloc (argc * sizeof (mods[0])); + if (!mods) + return grub_errno; + + if (get_uuid (NULL, &uuid_root, 0)) + { + grub_free (mods); + return grub_errno; + } + + prefdev = grub_file_get_device_name (prefix); + if (grub_errno) + { + grub_print_error (); + prefdev = 0; + } + + if (get_uuid (prefdev, &uuid_prefix, 0)) + { + grub_free (uuid_root); + grub_free (prefdev); + grub_free (mods); + return grub_errno; + } + + grub_dprintf ("nativedisk", "uuid_prefix = %s, uuid_root = %s\n", + uuid_prefix, uuid_root); + + for (mods_loaded = 0; mods_loaded < argc; mods_loaded++) + { + char *filename; + grub_dl_t mod; + grub_file_t file = NULL; + grub_ssize_t size; + void *core = 0; + + mod = grub_dl_get (args[mods_loaded]); + if (mod) + { + mods[mods_loaded] = 0; + continue; + } + + filename = grub_xasprintf ("%s/" GRUB_TARGET_CPU "-" GRUB_PLATFORM "/%s.mod", + prefix, args[mods_loaded]); + if (! filename) + goto fail; + + file = grub_file_open (filename); + grub_free (filename); + if (! file) + goto fail; + + size = grub_file_size (file); + core = grub_malloc (size); + if (! core) + { + grub_file_close (file); + goto fail; + } + + if (grub_file_read (file, core, size) != (grub_ssize_t) size) + { + grub_file_close (file); + grub_free (core); + goto fail; + } + + grub_file_close (file); + + mods[mods_loaded] = grub_dl_load_core_noinit (core, size); + if (! mods[mods_loaded]) + goto fail; + } + + for (i = 0; i < argc; i++) + if (mods[i]) + grub_dl_init (mods[i]); + + if (uuid_prefix || uuid_root) + { + struct search_ctx ctx; + grub_fs_autoload_hook_t saved_autoload; + + /* No need to autoload FS since obviously we already have the necessary fs modules. */ + saved_autoload = grub_fs_autoload_hook; + grub_fs_autoload_hook = 0; + + ctx.root_uuid = uuid_root; + ctx.prefix_uuid = uuid_prefix; + ctx.prefix_path = path_prefix; + ctx.prefix_found = !uuid_prefix; + ctx.root_found = !uuid_root; + + /* FIXME: try to guess the correct values. */ + grub_device_iterate (iterate_device, &ctx); + + grub_fs_autoload_hook = saved_autoload; + } + grub_free (uuid_root); + grub_free (uuid_prefix); + grub_free (prefdev); + grub_free (mods); + + return GRUB_ERR_NONE; + + fail: + grub_free (uuid_root); + grub_free (uuid_prefix); + grub_free (prefdev); + + for (i = 0; i < mods_loaded; i++) + if (mods[i]) + { + mods[i]->fini = 0; + grub_dl_unload (mods[i]); + } + grub_free (mods); + + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(nativedisk) +{ + cmd = grub_register_command ("nativedisk", grub_cmd_nativedisk, N_("[MODULE1 MODULE2 ...]"), + N_("Switch to native disk drivers. If no modules are specified default set (pata,ahci,usbms,ohci,uhci,ehci) is used")); +} + +GRUB_MOD_FINI(nativedisk) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/parttool.c b/grub-core/commands/parttool.c new file mode 100644 index 000000000..693e2cb42 --- /dev/null +++ b/grub-core/commands/parttool.c @@ -0,0 +1,351 @@ +/* parttool.c - common dispatcher and parser for partition operations */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv2+"); + +static struct grub_parttool *parts = 0; +static int curhandle = 0; +static grub_dl_t mymod; +static char helpmsg[] = + N_("Perform COMMANDS on partition.\n" + "Use `parttool PARTITION help' for the list " + "of available commands."); + +int +grub_parttool_register(const char *part_name, + const grub_parttool_function_t func, + const struct grub_parttool_argdesc *args) +{ + struct grub_parttool *cur; + int nargs = 0; + + if (! parts) + grub_dl_ref (mymod); + + cur = (struct grub_parttool *) grub_malloc (sizeof (struct grub_parttool)); + cur->next = parts; + cur->name = grub_strdup (part_name); + cur->handle = curhandle++; + for (nargs = 0; args[nargs].name != 0; nargs++); + cur->nargs = nargs; + cur->args = (struct grub_parttool_argdesc *) + grub_malloc ((nargs + 1) * sizeof (struct grub_parttool_argdesc)); + grub_memcpy (cur->args, args, + (nargs + 1) * sizeof (struct grub_parttool_argdesc)); + + cur->func = func; + parts = cur; + return cur->handle; +} + +void +grub_parttool_unregister (int handle) +{ + struct grub_parttool *prev = 0, *cur, *t; + for (cur = parts; cur; ) + if (cur->handle == handle) + { + grub_free (cur->args); + grub_free (cur->name); + if (prev) + prev->next = cur->next; + else + parts = cur->next; + t = cur; + cur = cur->next; + grub_free (t); + } + else + { + prev = cur; + cur = cur->next; + } + if (! parts) + grub_dl_unref (mymod); +} + +static grub_err_t +show_help (grub_device_t dev) +{ + int found = 0; + struct grub_parttool *cur; + + for (cur = parts; cur; cur = cur->next) + if (grub_strcmp (dev->disk->partition->partmap->name, cur->name) == 0) + { + struct grub_parttool_argdesc *curarg; + found = 1; + for (curarg = cur->args; curarg->name; curarg++) + { + int spacing = 20; + + spacing -= grub_strlen (curarg->name); + grub_printf ("%s", curarg->name); + + switch (curarg->type) + { + case GRUB_PARTTOOL_ARG_BOOL: + grub_printf ("+/-"); + spacing -= 3; + break; + + case GRUB_PARTTOOL_ARG_VAL: + grub_xputs (_("=VAL")); + spacing -= 4; + break; + + case GRUB_PARTTOOL_ARG_END: + break; + } + while (spacing-- > 0) + grub_printf (" "); + grub_puts_ (curarg->desc); + } + } + if (! found) + grub_printf_ (N_("Sorry, no parttool is available for %s\n"), + dev->disk->partition->partmap->name); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_device_t dev; + struct grub_parttool *cur, *ptool; + int *parsed; + int i, j; + grub_err_t err = GRUB_ERR_NONE; + + if (argc < 1) + { + grub_puts_ (helpmsg); + return grub_error (GRUB_ERR_BAD_ARGUMENT, "too few arguments"); + } + + if (args[0][0] == '(' && args[0][grub_strlen (args[0]) - 1] == ')') + { + args[0][grub_strlen (args[0]) - 1] = 0; + dev = grub_device_open (args[0] + 1); + args[0][grub_strlen (args[0]) - 1] = ')'; + } + else + dev = grub_device_open (args[0]); + + if (! dev) + return grub_errno; + + if (! dev->disk) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_ARGUMENT, "not a disk"); + } + + if (! dev->disk->partition) + { + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_ARGUMENT, "not a partition"); + } + + /* Load modules. */ + if (! grub_no_modules) + { + const char *prefix; + prefix = grub_env_get ("prefix"); + if (prefix) + { + char *filename; + + filename = grub_xasprintf ("%s/" GRUB_TARGET_CPU "-" GRUB_PLATFORM + "/parttool.lst", prefix); + if (filename) + { + grub_file_t file; + + file = grub_file_open (filename); + if (file) + { + char *buf = 0; + for (;; grub_free(buf)) + { + char *p, *name; + + buf = grub_file_getline (file); + + if (! buf) + break; + + name = buf; + while (grub_isspace (name[0])) + name++; + + if (! grub_isgraph (name[0])) + continue; + + p = grub_strchr (name, ':'); + if (! p) + continue; + + *p = '\0'; + p++; + while (*p == ' ' || *p == '\t') + p++; + + if (! grub_isgraph (*p)) + continue; + + if (grub_strcmp (name, dev->disk->partition->partmap->name) + != 0) + continue; + + grub_dl_load (p); + } + + grub_file_close (file); + } + + grub_free (filename); + } + } + /* Ignore errors. */ + grub_errno = GRUB_ERR_NONE; + } + + if (argc == 1) + { + err = show_help (dev); + grub_device_close (dev); + return err; + } + + for (i = 1; i < argc; i++) + if (grub_strcmp (args[i], "help") == 0) + { + err = show_help (dev); + grub_device_close (dev); + return err; + } + + parsed = (int *) grub_zalloc (argc * sizeof (int)); + + for (i = 1; i < argc; i++) + if (! parsed[i]) + { + struct grub_parttool_argdesc *curarg; + struct grub_parttool_args *pargs; + for (cur = parts; cur; cur = cur->next) + if (grub_strcmp (dev->disk->partition->partmap->name, cur->name) == 0) + { + for (curarg = cur->args; curarg->name; curarg++) + if (grub_strncmp (curarg->name, args[i], + grub_strlen (curarg->name)) == 0 + && ((curarg->type == GRUB_PARTTOOL_ARG_BOOL + && (args[i][grub_strlen (curarg->name)] == '+' + || args[i][grub_strlen (curarg->name)] == '-' + || args[i][grub_strlen (curarg->name)] == 0)) + || (curarg->type == GRUB_PARTTOOL_ARG_VAL + && args[i][grub_strlen (curarg->name)] == '='))) + + break; + if (curarg->name) + break; + } + if (! cur) + { + grub_free (parsed); + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("unknown argument `%s'"), + args[i]); + } + ptool = cur; + pargs = (struct grub_parttool_args *) + grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args)); + for (j = i; j < argc; j++) + if (! parsed[j]) + { + for (curarg = ptool->args; curarg->name; curarg++) + if (grub_strncmp (curarg->name, args[j], + grub_strlen (curarg->name)) == 0 + && ((curarg->type == GRUB_PARTTOOL_ARG_BOOL + && (args[j][grub_strlen (curarg->name)] == '+' + || args[j][grub_strlen (curarg->name)] == '-' + || args[j][grub_strlen (curarg->name)] == 0)) + || (curarg->type == GRUB_PARTTOOL_ARG_VAL + && args[j][grub_strlen (curarg->name)] == '='))) + { + parsed[j] = 1; + pargs[curarg - ptool->args].set = 1; + switch (curarg->type) + { + case GRUB_PARTTOOL_ARG_BOOL: + pargs[curarg - ptool->args].bool + = (args[j][grub_strlen (curarg->name)] != '-'); + break; + + case GRUB_PARTTOOL_ARG_VAL: + pargs[curarg - ptool->args].str + = (args[j] + grub_strlen (curarg->name) + 1); + break; + + case GRUB_PARTTOOL_ARG_END: + break; + } + } + } + + err = ptool->func (dev, pargs); + grub_free (pargs); + if (err) + break; + } + + grub_free (parsed); + grub_device_close (dev); + return err; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(parttool) +{ + mymod = mod; + cmd = grub_register_command ("parttool", grub_cmd_parttool, + N_("PARTITION COMMANDS"), + helpmsg); +} + +GRUB_MOD_FINI(parttool) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/password.c b/grub-core/commands/password.c new file mode 100644 index 000000000..6d42c9b02 --- /dev/null +++ b/grub-core/commands/password.c @@ -0,0 +1,93 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_dl_t my_mod; + +static grub_err_t +check_password (const char *user, const char *entered, + void *password) +{ + if (grub_crypto_memcmp (entered, password, GRUB_AUTH_MAX_PASSLEN) != 0) + return GRUB_ACCESS_DENIED; + + grub_auth_authenticate (user); + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_normal_set_password (const char *user, const char *password) +{ + grub_err_t err; + char *pass; + int copylen; + + pass = grub_zalloc (GRUB_AUTH_MAX_PASSLEN); + if (!pass) + return grub_errno; + copylen = grub_strlen (password); + if (copylen >= GRUB_AUTH_MAX_PASSLEN) + copylen = GRUB_AUTH_MAX_PASSLEN - 1; + grub_memcpy (pass, password, copylen); + + err = grub_auth_register_authentication (user, check_password, pass); + if (err) + { + grub_free (pass); + return err; + } + grub_dl_ref (my_mod); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_password (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + if (argc != 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + return grub_normal_set_password (args[0], args[1]); +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(password) +{ + my_mod = mod; + cmd = grub_register_command ("password", grub_cmd_password, + N_("USER PASSWORD"), + N_("Set user password (plaintext). " + "Unrecommended and insecure.")); +} + +GRUB_MOD_FINI(password) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/password_pbkdf2.c b/grub-core/commands/password_pbkdf2.c new file mode 100644 index 000000000..da636e621 --- /dev/null +++ b/grub-core/commands/password_pbkdf2.c @@ -0,0 +1,209 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_dl_t my_mod; + +struct pbkdf2_password +{ + grub_uint8_t *salt; + grub_size_t saltlen; + unsigned int c; + grub_uint8_t *expected; + grub_size_t buflen; +}; + +static grub_err_t +check_password (const char *user, const char *entered, void *pin) +{ + grub_uint8_t *buf; + struct pbkdf2_password *pass = pin; + gcry_err_code_t err; + grub_err_t ret; + + buf = grub_malloc (pass->buflen); + if (!buf) + return grub_crypto_gcry_error (GPG_ERR_OUT_OF_MEMORY); + + err = grub_crypto_pbkdf2 (GRUB_MD_SHA512, (grub_uint8_t *) entered, + grub_strlen (entered), + pass->salt, pass->saltlen, pass->c, + buf, pass->buflen); + if (err) + ret = grub_crypto_gcry_error (err); + else if (grub_crypto_memcmp (buf, pass->expected, pass->buflen) != 0) + ret = GRUB_ACCESS_DENIED; + else + { + grub_auth_authenticate (user); + ret = GRUB_ERR_NONE; + } + + grub_free (buf); + return ret; +} + +static inline int +hex2val (char hex) +{ + if ('0' <= hex && hex <= '9') + return hex - '0'; + if ('a' <= hex && hex <= 'f') + return hex - 'a' + 10; + if ('A' <= hex && hex <= 'F') + return hex - 'A' + 10; + return -1; +} + +static grub_err_t +grub_cmd_password (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_err_t err; + char *ptr, *ptr2; + grub_uint8_t *ptro; + struct pbkdf2_password *pass; + + if (argc != 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + if (grub_memcmp (args[1], "grub.pbkdf2.sha512.", + sizeof ("grub.pbkdf2.sha512.") - 1) != 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid PBKDF2 password")); + + ptr = args[1] + sizeof ("grub.pbkdf2.sha512.") - 1; + + pass = grub_malloc (sizeof (*pass)); + if (!pass) + return grub_errno; + + pass->c = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + { + grub_free (pass); + return grub_errno; + } + if (*ptr != '.') + { + grub_free (pass); + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid PBKDF2 password")); + } + ptr++; + + ptr2 = grub_strchr (ptr, '.'); + if (!ptr2 || ((ptr2 - ptr) & 1) || grub_strlen (ptr2 + 1) & 1) + { + grub_free (pass); + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid PBKDF2 password")); + } + + pass->saltlen = (ptr2 - ptr) >> 1; + pass->buflen = grub_strlen (ptr2 + 1) >> 1; + ptro = pass->salt = grub_malloc (pass->saltlen); + if (!ptro) + { + grub_free (pass); + return grub_errno; + } + while (ptr < ptr2) + { + int hex1, hex2; + hex1 = hex2val (*ptr); + ptr++; + hex2 = hex2val (*ptr); + ptr++; + if (hex1 < 0 || hex2 < 0) + { + grub_free (pass->salt); + grub_free (pass); + return grub_error (GRUB_ERR_BAD_ARGUMENT, + /* TRANSLATORS: it means that the string which + was supposed to be a password hash doesn't + have a correct format, not to password + mismatch. */ + N_("invalid PBKDF2 password")); + } + + *ptro = (hex1 << 4) | hex2; + ptro++; + } + + ptro = pass->expected = grub_malloc (pass->buflen); + if (!ptro) + { + grub_free (pass->salt); + grub_free (pass); + return grub_errno; + } + ptr = ptr2 + 1; + ptr2 += grub_strlen (ptr2); + while (ptr < ptr2) + { + int hex1, hex2; + hex1 = hex2val (*ptr); + ptr++; + hex2 = hex2val (*ptr); + ptr++; + if (hex1 < 0 || hex2 < 0) + { + grub_free (pass->expected); + grub_free (pass->salt); + grub_free (pass); + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("invalid PBKDF2 password")); + } + + *ptro = (hex1 << 4) | hex2; + ptro++; + } + + err = grub_auth_register_authentication (args[0], check_password, pass); + if (err) + { + grub_free (pass); + return err; + } + grub_dl_ref (my_mod); + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(password_pbkdf2) +{ + my_mod = mod; + cmd = grub_register_command ("password_pbkdf2", grub_cmd_password, + N_("USER PBKDF2_PASSWORD"), + N_("Set user password (PBKDF2). ")); +} + +GRUB_MOD_FINI(password_pbkdf2) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/pcidump.c b/grub-core/commands/pcidump.c new file mode 100644 index 000000000..f99ad4a21 --- /dev/null +++ b/grub-core/commands/pcidump.c @@ -0,0 +1,175 @@ +/* lspci.c - List PCI devices. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct iter_cxt +{ + grub_uint32_t pciid_check_mask, pciid_check_value; + int bus, device, function; + int check_bus, check_device, check_function; +}; + +static const struct grub_arg_option options[] = + { + {0, 'd', 0, N_("Select device by vendor and device IDs."), + N_("[vendor]:[device]"), ARG_TYPE_STRING}, + {0, 's', 0, N_("Select device by its position on the bus."), + N_("[bus]:[slot][.func]"), ARG_TYPE_STRING}, + {0, 0, 0, 0, 0, 0} + }; + +static int +grub_pcidump_iter (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data) +{ + struct iter_cxt *ctx = data; + grub_pci_address_t addr; + int i; + + if ((pciid & ctx->pciid_check_mask) != ctx->pciid_check_value) + return 0; + + if (ctx->check_bus && grub_pci_get_bus (dev) != ctx->bus) + return 0; + + if (ctx->check_device && grub_pci_get_device (dev) != ctx->device) + return 0; + + if (ctx->check_function && grub_pci_get_function (dev) != ctx->function) + return 0; + + for (i = 0; i < 256; i += 4) + { + addr = grub_pci_make_address (dev, i); + grub_printf ("%08x ", grub_pci_read (addr)); + if ((i & 0xc) == 0xc) + grub_printf ("\n"); + } + + return 0; +} + +static grub_err_t +grub_cmd_pcidump (grub_extcmd_context_t ctxt, + int argc __attribute__ ((unused)), + char **argv __attribute__ ((unused))) +{ + const char *ptr; + struct iter_cxt ctx = + { + .pciid_check_value = 0, + .pciid_check_mask = 0, + .check_bus = 0, + .check_device = 0, + .check_function = 0, + .bus = 0, + .function = 0, + .device = 0 + }; + + if (ctxt->state[0].set) + { + ptr = ctxt->state[0].arg; + ctx.pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff); + if (grub_errno == GRUB_ERR_BAD_NUMBER) + { + grub_errno = GRUB_ERR_NONE; + ptr = ctxt->state[0].arg; + } + else + ctx.pciid_check_mask |= 0xffff; + if (grub_errno) + return grub_errno; + if (*ptr != ':') + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("missing `%c' symbol"), ':'); + ptr++; + ctx.pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff) + << 16; + if (grub_errno == GRUB_ERR_BAD_NUMBER) + grub_errno = GRUB_ERR_NONE; + else + ctx.pciid_check_mask |= 0xffff0000; + } + + ctx.pciid_check_value &= ctx.pciid_check_mask; + + if (ctxt->state[1].set) + { + const char *optr; + + ptr = ctxt->state[1].arg; + optr = ptr; + ctx.bus = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno == GRUB_ERR_BAD_NUMBER) + { + grub_errno = GRUB_ERR_NONE; + ptr = optr; + } + else + ctx.check_bus = 1; + if (grub_errno) + return grub_errno; + if (*ptr != ':') + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("missing `%c' symbol"), ':'); + ptr++; + optr = ptr; + ctx.device = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno == GRUB_ERR_BAD_NUMBER) + { + grub_errno = GRUB_ERR_NONE; + ptr = optr; + } + else + ctx.check_device = 1; + if (*ptr == '.') + { + ptr++; + ctx.function = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno) + return grub_errno; + ctx.check_function = 1; + } + } + + grub_pci_iterate (grub_pcidump_iter, &ctx); + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(pcidump) +{ + cmd = grub_register_extcmd ("pcidump", grub_cmd_pcidump, 0, + N_("[-s POSITION] [-d DEVICE]"), + N_("Show raw dump of the PCI configuration space."), options); +} + +GRUB_MOD_FINI(pcidump) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/probe.c b/grub-core/commands/probe.c new file mode 100644 index 000000000..cf2793e1d --- /dev/null +++ b/grub-core/commands/probe.c @@ -0,0 +1,172 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + {"set", 's', 0, + N_("Set a variable to return value."), N_("VARNAME"), ARG_TYPE_STRING}, + /* TRANSLATORS: It's a driver that is currently in use to access + the diven disk. */ + {"driver", 'd', 0, N_("Determine driver."), 0, 0}, + {"partmap", 'p', 0, N_("Determine partition map type."), 0, 0}, + {"fs", 'f', 0, N_("Determine filesystem type."), 0, 0}, + {"fs-uuid", 'u', 0, N_("Determine filesystem UUID."), 0, 0}, + {"label", 'l', 0, N_("Determine filesystem label."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_err_t +grub_cmd_probe (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + grub_device_t dev; + grub_fs_t fs; + char *ptr; + grub_err_t err; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required"); + + ptr = args[0] + grub_strlen (args[0]) - 1; + if (args[0][0] == '(' && *ptr == ')') + { + *ptr = 0; + dev = grub_device_open (args[0] + 1); + *ptr = ')'; + } + else + dev = grub_device_open (args[0]); + if (! dev) + return grub_errno; + + if (state[1].set) + { + const char *val = "none"; + if (dev->net) + val = dev->net->protocol->name; + if (dev->disk) + val = dev->disk->dev->name; + if (state[0].set) + grub_env_set (state[0].arg, val); + else + grub_printf ("%s", val); + grub_device_close (dev); + return GRUB_ERR_NONE; + } + if (state[2].set) + { + const char *val = "none"; + if (dev->disk && dev->disk->partition) + val = dev->disk->partition->partmap->name; + if (state[0].set) + grub_env_set (state[0].arg, val); + else + grub_printf ("%s", val); + grub_device_close (dev); + return GRUB_ERR_NONE; + } + fs = grub_fs_probe (dev); + if (! fs) + return grub_errno; + if (state[3].set) + { + if (state[0].set) + grub_env_set (state[0].arg, fs->name); + else + grub_printf ("%s", fs->name); + grub_device_close (dev); + return GRUB_ERR_NONE; + } + if (state[4].set) + { + char *uuid; + if (! fs->uuid) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("%s does not support UUIDs"), fs->name); + err = fs->uuid (dev, &uuid); + if (err) + return err; + if (! uuid) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("%s does not support UUIDs"), fs->name); + + if (state[0].set) + grub_env_set (state[0].arg, uuid); + else + grub_printf ("%s", uuid); + grub_free (uuid); + grub_device_close (dev); + return GRUB_ERR_NONE; + } + if (state[5].set) + { + char *label; + if (! fs->label) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("filesystem `%s' does not support labels"), + fs->name); + err = fs->label (dev, &label); + if (err) + return err; + if (! label) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("filesystem `%s' does not support labels"), + fs->name); + + if (state[0].set) + grub_env_set (state[0].arg, label); + else + grub_printf ("%s", label); + grub_free (label); + grub_device_close (dev); + return GRUB_ERR_NONE; + } + grub_device_close (dev); + return grub_error (GRUB_ERR_BAD_ARGUMENT, "unrecognised target"); +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT (probe) +{ + cmd = grub_register_extcmd ("probe", grub_cmd_probe, 0, N_("DEVICE"), + N_("Retrieve device info."), options); +} + +GRUB_MOD_FINI (probe) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/read.c b/grub-core/commands/read.c new file mode 100644 index 000000000..fe3e88b15 --- /dev/null +++ b/grub-core/commands/read.c @@ -0,0 +1,92 @@ +/* read.c - Command to read variables from user. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static char * +grub_getline (void) +{ + int i; + char *line; + char *tmp; + char c; + + i = 0; + line = grub_malloc (1 + i + sizeof('\0')); + if (! line) + return NULL; + + while (1) + { + c = grub_getkey (); + if ((c == '\n') || (c == '\r')) + break; + + line[i] = c; + if (grub_isprint (c)) + grub_printf ("%c", c); + i++; + tmp = grub_realloc (line, 1 + i + sizeof('\0')); + if (! tmp) + { + grub_free (line); + return NULL; + } + line = tmp; + } + line[i] = '\0'; + + return line; +} + +static grub_err_t +grub_cmd_read (grub_command_t cmd __attribute__ ((unused)), int argc, char **args) +{ + char *line = grub_getline (); + if (! line) + return grub_errno; + if (argc > 0) + grub_env_set (args[0], line); + + grub_free (line); + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(read) +{ + cmd = grub_register_command ("read", grub_cmd_read, + N_("[ENVVAR]"), + N_("Set variable with user input.")); +} + +GRUB_MOD_FINI(read) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/reboot.c b/grub-core/commands/reboot.c new file mode 100644 index 000000000..46d364c99 --- /dev/null +++ b/grub-core/commands/reboot.c @@ -0,0 +1,46 @@ +/* reboot.c - command to reboot the computer. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t __attribute__ ((noreturn)) +grub_cmd_reboot (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_reboot (); +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(reboot) +{ + cmd = grub_register_command ("reboot", grub_cmd_reboot, + 0, N_("Reboot the computer.")); +} + +GRUB_MOD_FINI(reboot) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/regexp.c b/grub-core/commands/regexp.c new file mode 100644 index 000000000..f00b184c8 --- /dev/null +++ b/grub-core/commands/regexp.c @@ -0,0 +1,168 @@ +/* regexp.c -- The regexp command. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + { "set", 's', GRUB_ARG_OPTION_REPEATABLE, + /* TRANSLATORS: in regexp you can mark some + groups with parentheses. These groups are + then numbered and you can save some of + them in variables. In other programs + those components aree often referenced with + back slash, e.g. \1. Compare + sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' + The whole matching component is saved in VARNAME, not its number. + */ + N_("Store matched component NUMBER in VARNAME."), + N_("[NUMBER:]VARNAME"), ARG_TYPE_STRING }, + { 0, 0, 0, 0, 0, 0 } + }; + +static grub_err_t +setvar (char *str, char *v, regmatch_t *m) +{ + char ch; + grub_err_t err; + ch = str[m->rm_eo]; + str[m->rm_eo] = '\0'; + err = grub_env_set (v, str + m->rm_so); + str[m->rm_eo] = ch; + return err; +} + +static grub_err_t +set_matches (char **varnames, char *str, grub_size_t nmatches, + regmatch_t *matches) +{ + int i; + char *p; + char *q; + grub_err_t err; + unsigned long j; + + for (i = 0; varnames && varnames[i]; i++) + { + err = GRUB_ERR_NONE; + p = grub_strchr (varnames[i], ':'); + if (! p) + { + /* varname w/o index defaults to 1 */ + if (nmatches < 2 || matches[1].rm_so == -1) + grub_env_unset (varnames[i]); + else + err = setvar (str, varnames[i], &matches[1]); + } + else + { + j = grub_strtoul (varnames[i], &q, 10); + if (q != p) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "invalid variable name format %s", varnames[i]); + + if (nmatches <= j || matches[j].rm_so == -1) + grub_env_unset (p + 1); + else + err = setvar (str, p + 1, &matches[j]); + } + + if (err != GRUB_ERR_NONE) + return err; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_regexp (grub_extcmd_context_t ctxt, int argc, char **args) +{ + regex_t regex; + int ret; + grub_size_t s; + char *comperr; + grub_err_t err; + regmatch_t *matches = 0; + + if (argc != 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + ret = regcomp (®ex, args[0], REG_EXTENDED); + if (ret) + goto fail; + + matches = grub_zalloc (sizeof (*matches) * (regex.re_nsub + 1)); + if (! matches) + goto fail; + + ret = regexec (®ex, args[1], regex.re_nsub + 1, matches, 0); + if (!ret) + { + err = set_matches (ctxt->state[0].args, args[1], + regex.re_nsub + 1, matches); + regfree (®ex); + grub_free (matches); + return err; + } + + fail: + grub_free (matches); + s = regerror (ret, ®ex, 0, 0); + comperr = grub_malloc (s); + if (!comperr) + { + regfree (®ex); + return grub_errno; + } + regerror (ret, ®ex, comperr, s); + err = grub_error (GRUB_ERR_TEST_FAILURE, "%s", comperr); + regfree (®ex); + grub_free (comperr); + return err; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(regexp) +{ + cmd = grub_register_extcmd ("regexp", grub_cmd_regexp, 0, + /* TRANSLATORS: This are two arguments. So it's + two separate units to translate and pay + attention not to reverse them. */ + N_("REGEXP STRING"), + N_("Test if REGEXP matches STRING."), options); + + /* Setup GRUB script wildcard translator. */ + grub_wildcard_translator = &grub_filename_translator; +} + +GRUB_MOD_FINI(regexp) +{ + grub_unregister_extcmd (cmd); + grub_wildcard_translator = 0; +} diff --git a/grub-core/commands/search.c b/grub-core/commands/search.c new file mode 100644 index 000000000..7dd32e445 --- /dev/null +++ b/grub-core/commands/search.c @@ -0,0 +1,337 @@ +/* search.c - search devices based on a file or a filesystem label */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct cache_entry +{ + struct cache_entry *next; + char *key; + char *value; +}; + +static struct cache_entry *cache; + +/* Context for FUNC_NAME. */ +struct search_ctx +{ + const char *key; + const char *var; + int no_floppy; + char **hints; + unsigned nhints; + int count; + int is_cache; +}; + +/* Helper for FUNC_NAME. */ +static int +iterate_device (const char *name, void *data) +{ + struct search_ctx *ctx = data; + int found = 0; + + /* Skip floppy drives when requested. */ + if (ctx->no_floppy && + name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9') + return 1; + +#ifdef DO_SEARCH_FS_UUID +#define compare_fn grub_strcasecmp +#else +#define compare_fn grub_strcmp +#endif + +#ifdef DO_SEARCH_FILE + { + char *buf; + grub_file_t file; + + buf = grub_xasprintf ("(%s)%s", name, ctx->key); + if (! buf) + return 1; + + grub_file_filter_disable_compression (); + file = grub_file_open (buf); + if (file) + { + found = 1; + grub_file_close (file); + } + grub_free (buf); + } +#else + { + /* SEARCH_FS_UUID or SEARCH_LABEL */ + grub_device_t dev; + grub_fs_t fs; + char *quid; + + dev = grub_device_open (name); + if (dev) + { + fs = grub_fs_probe (dev); + +#ifdef DO_SEARCH_FS_UUID +#define read_fn uuid +#else +#define read_fn label +#endif + + if (fs && fs->read_fn) + { + fs->read_fn (dev, &quid); + + if (grub_errno == GRUB_ERR_NONE && quid) + { + if (compare_fn (quid, ctx->key) == 0) + found = 1; + + grub_free (quid); + } + } + + grub_device_close (dev); + } + } +#endif + + if (!ctx->is_cache && found && ctx->count == 0) + { + struct cache_entry *cache_ent; + cache_ent = grub_malloc (sizeof (*cache_ent)); + if (cache_ent) + { + cache_ent->key = grub_strdup (ctx->key); + cache_ent->value = grub_strdup (name); + if (cache_ent->value && cache_ent->key) + { + cache_ent->next = cache; + cache = cache_ent; + } + else + { + grub_free (cache_ent->value); + grub_free (cache_ent->key); + grub_free (cache_ent); + grub_errno = GRUB_ERR_NONE; + } + } + else + grub_errno = GRUB_ERR_NONE; + } + + if (found) + { + ctx->count++; + if (ctx->var) + grub_env_set (ctx->var, name); + else + grub_printf (" %s", name); + } + + grub_errno = GRUB_ERR_NONE; + return (found && ctx->var); +} + +/* Helper for FUNC_NAME. */ +static int +part_hook (grub_disk_t disk, const grub_partition_t partition, void *data) +{ + struct search_ctx *ctx = data; + char *partition_name, *devname; + int ret; + + partition_name = grub_partition_get_name (partition); + if (! partition_name) + return 1; + + devname = grub_xasprintf ("%s,%s", disk->name, partition_name); + grub_free (partition_name); + if (!devname) + return 1; + ret = iterate_device (devname, ctx); + grub_free (devname); + + return ret; +} + +/* Helper for FUNC_NAME. */ +static void +try (struct search_ctx *ctx) +{ + unsigned i; + struct cache_entry **prev; + struct cache_entry *cache_ent; + + for (prev = &cache, cache_ent = *prev; cache_ent; + prev = &cache_ent->next, cache_ent = *prev) + if (compare_fn (cache_ent->key, ctx->key) == 0) + break; + if (cache_ent) + { + ctx->is_cache = 1; + if (iterate_device (cache_ent->value, ctx)) + { + ctx->is_cache = 0; + return; + } + ctx->is_cache = 0; + /* Cache entry was outdated. Remove it. */ + if (!ctx->count) + { + *prev = cache_ent->next; + grub_free (cache_ent->key); + grub_free (cache_ent->value); + grub_free (cache_ent); + } + } + + for (i = 0; i < ctx->nhints; i++) + { + char *end; + if (!ctx->hints[i][0]) + continue; + end = ctx->hints[i] + grub_strlen (ctx->hints[i]) - 1; + if (*end == ',') + *end = 0; + if (iterate_device (ctx->hints[i], ctx)) + { + if (!*end) + *end = ','; + return; + } + if (!*end) + { + grub_device_t dev; + int ret; + dev = grub_device_open (ctx->hints[i]); + if (!dev) + { + if (!*end) + *end = ','; + continue; + } + if (!dev->disk) + { + grub_device_close (dev); + if (!*end) + *end = ','; + continue; + } + ret = grub_partition_iterate (dev->disk, part_hook, ctx); + if (!*end) + *end = ','; + grub_device_close (dev); + if (ret) + return; + } + } + grub_device_iterate (iterate_device, ctx); +} + +void +FUNC_NAME (const char *key, const char *var, int no_floppy, + char **hints, unsigned nhints) +{ + struct search_ctx ctx = { + .key = key, + .var = var, + .no_floppy = no_floppy, + .hints = hints, + .nhints = nhints, + .count = 0, + .is_cache = 0 + }; + grub_fs_autoload_hook_t saved_autoload; + + /* First try without autoloading if we're setting variable. */ + if (var) + { + saved_autoload = grub_fs_autoload_hook; + grub_fs_autoload_hook = 0; + try (&ctx); + + /* Restore autoload hook. */ + grub_fs_autoload_hook = saved_autoload; + + /* Retry with autoload if nothing found. */ + if (grub_errno == GRUB_ERR_NONE && ctx.count == 0) + try (&ctx); + } + else + try (&ctx); + + if (grub_errno == GRUB_ERR_NONE && ctx.count == 0) + grub_error (GRUB_ERR_FILE_NOT_FOUND, "no such device: %s", key); +} + +static grub_err_t +grub_cmd_do_search (grub_command_t cmd __attribute__ ((unused)), int argc, + char **args) +{ + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + FUNC_NAME (args[0], argc == 1 ? 0 : args[1], 0, (args + 2), + argc > 2 ? argc - 2 : 0); + + return grub_errno; +} + +static grub_command_t cmd; + +#ifdef DO_SEARCH_FILE +GRUB_MOD_INIT(search_fs_file) +#elif defined (DO_SEARCH_FS_UUID) +GRUB_MOD_INIT(search_fs_uuid) +#else +GRUB_MOD_INIT(search_label) +#endif +{ + cmd = + grub_register_command (COMMAND_NAME, grub_cmd_do_search, + N_("NAME [VARIABLE] [HINTS]"), + HELP_MESSAGE); +} + +#ifdef DO_SEARCH_FILE +GRUB_MOD_FINI(search_fs_file) +#elif defined (DO_SEARCH_FS_UUID) +GRUB_MOD_FINI(search_fs_uuid) +#else +GRUB_MOD_FINI(search_label) +#endif +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/search_file.c b/grub-core/commands/search_file.c new file mode 100644 index 000000000..cc2a5f939 --- /dev/null +++ b/grub-core/commands/search_file.c @@ -0,0 +1,5 @@ +#define DO_SEARCH_FILE 1 +#define FUNC_NAME grub_search_fs_file +#define COMMAND_NAME "search.file" +#define HELP_MESSAGE N_("Search devices by file. If VARIABLE is specified, the first device found is set to a variable.") +#include "search.c" diff --git a/grub-core/commands/search_label.c b/grub-core/commands/search_label.c new file mode 100644 index 000000000..12e7c1831 --- /dev/null +++ b/grub-core/commands/search_label.c @@ -0,0 +1,5 @@ +#define DO_SEARCH_FS_LABEL 1 +#define FUNC_NAME grub_search_label +#define COMMAND_NAME "search.fs_label" +#define HELP_MESSAGE N_("Search devices by label. If VARIABLE is specified, the first device found is set to a variable.") +#include "search.c" diff --git a/grub-core/commands/search_uuid.c b/grub-core/commands/search_uuid.c new file mode 100644 index 000000000..541bcf54b --- /dev/null +++ b/grub-core/commands/search_uuid.c @@ -0,0 +1,5 @@ +#define DO_SEARCH_FS_UUID 1 +#define FUNC_NAME grub_search_fs_uuid +#define COMMAND_NAME "search.fs_uuid" +#define HELP_MESSAGE N_("Search devices by UUID. If VARIABLE is specified, the first device found is set to a variable.") +#include "search.c" diff --git a/grub-core/commands/search_wrap.c b/grub-core/commands/search_wrap.c new file mode 100644 index 000000000..d7fd26b94 --- /dev/null +++ b/grub-core/commands/search_wrap.c @@ -0,0 +1,220 @@ +/* search.c - search devices based on a file or a filesystem label */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + {"file", 'f', 0, N_("Search devices by a file."), 0, 0}, + {"label", 'l', 0, N_("Search devices by a filesystem label."), + 0, 0}, + {"fs-uuid", 'u', 0, N_("Search devices by a filesystem UUID."), + 0, 0}, + {"set", 's', GRUB_ARG_OPTION_OPTIONAL, + N_("Set a variable to the first device found."), N_("VARNAME"), + ARG_TYPE_STRING}, + {"no-floppy", 'n', 0, N_("Do not probe any floppy drive."), 0, 0}, + {"hint", 'h', GRUB_ARG_OPTION_REPEATABLE, + N_("First try the device HINT. If HINT ends in comma, " + "also try subpartitions"), N_("HINT"), ARG_TYPE_STRING}, + {"hint-ieee1275", 0, GRUB_ARG_OPTION_REPEATABLE, + N_("First try the device HINT if currently running on IEEE1275. " + "If HINT ends in comma, also try subpartitions"), + N_("HINT"), ARG_TYPE_STRING}, + {"hint-bios", 0, GRUB_ARG_OPTION_REPEATABLE, + N_("First try the device HINT if currently running on BIOS. " + "If HINT ends in comma, also try subpartitions"), + N_("HINT"), ARG_TYPE_STRING}, + {"hint-baremetal", 0, GRUB_ARG_OPTION_REPEATABLE, + N_("First try the device HINT if direct hardware access is supported. " + "If HINT ends in comma, also try subpartitions"), + N_("HINT"), ARG_TYPE_STRING}, + {"hint-efi", 0, GRUB_ARG_OPTION_REPEATABLE, + N_("First try the device HINT if currently running on EFI. " + "If HINT ends in comma, also try subpartitions"), + N_("HINT"), ARG_TYPE_STRING}, + {"hint-arc", 0, GRUB_ARG_OPTION_REPEATABLE, + N_("First try the device HINT if currently running on ARC." + " If HINT ends in comma, also try subpartitions"), + N_("HINT"), ARG_TYPE_STRING}, + {0, 0, 0, 0, 0, 0} + }; + +enum options + { + SEARCH_FILE, + SEARCH_LABEL, + SEARCH_FS_UUID, + SEARCH_SET, + SEARCH_NO_FLOPPY, + SEARCH_HINT, + SEARCH_HINT_IEEE1275, + SEARCH_HINT_BIOS, + SEARCH_HINT_BAREMETAL, + SEARCH_HINT_EFI, + SEARCH_HINT_ARC, + }; + +static grub_err_t +grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + const char *var = 0; + const char *id = 0; + int i = 0, j = 0, nhints = 0; + char **hints = NULL; + + if (state[SEARCH_HINT].set) + for (i = 0; state[SEARCH_HINT].args[i]; i++) + nhints++; + +#ifdef GRUB_MACHINE_IEEE1275 + if (state[SEARCH_HINT_IEEE1275].set) + for (i = 0; state[SEARCH_HINT_IEEE1275].args[i]; i++) + nhints++; +#endif + +#ifdef GRUB_MACHINE_EFI + if (state[SEARCH_HINT_EFI].set) + for (i = 0; state[SEARCH_HINT_EFI].args[i]; i++) + nhints++; +#endif + +#ifdef GRUB_MACHINE_PCBIOS + if (state[SEARCH_HINT_BIOS].set) + for (i = 0; state[SEARCH_HINT_BIOS].args[i]; i++) + nhints++; +#endif + +#ifdef GRUB_MACHINE_ARC + if (state[SEARCH_HINT_ARC].set) + for (i = 0; state[SEARCH_HINT_ARC].args[i]; i++) + nhints++; +#endif + + if (state[SEARCH_HINT_BAREMETAL].set) + for (i = 0; state[SEARCH_HINT_BAREMETAL].args[i]; i++) + nhints++; + + hints = grub_malloc (sizeof (hints[0]) * nhints); + if (!hints) + return grub_errno; + j = 0; + + if (state[SEARCH_HINT].set) + for (i = 0; state[SEARCH_HINT].args[i]; i++) + hints[j++] = state[SEARCH_HINT].args[i]; + +#ifdef GRUB_MACHINE_IEEE1275 + if (state[SEARCH_HINT_IEEE1275].set) + for (i = 0; state[SEARCH_HINT_IEEE1275].args[i]; i++) + hints[j++] = state[SEARCH_HINT_IEEE1275].args[i]; +#endif + +#ifdef GRUB_MACHINE_EFI + if (state[SEARCH_HINT_EFI].set) + for (i = 0; state[SEARCH_HINT_EFI].args[i]; i++) + hints[j++] = state[SEARCH_HINT_EFI].args[i]; +#endif + +#ifdef GRUB_MACHINE_ARC + if (state[SEARCH_HINT_ARC].set) + for (i = 0; state[SEARCH_HINT_ARC].args[i]; i++) + hints[j++] = state[SEARCH_HINT_ARC].args[i]; +#endif + +#ifdef GRUB_MACHINE_PCBIOS + if (state[SEARCH_HINT_BIOS].set) + for (i = 0; state[SEARCH_HINT_BIOS].args[i]; i++) + hints[j++] = state[SEARCH_HINT_BIOS].args[i]; +#endif + + if (state[SEARCH_HINT_BAREMETAL].set) + for (i = 0; state[SEARCH_HINT_BAREMETAL].args[i]; i++) + hints[j++] = state[SEARCH_HINT_BAREMETAL].args[i]; + + /* Skip hints for future platforms. */ + for (j = 0; j < argc; j++) + if (grub_memcmp (args[j], "--hint-", sizeof ("--hint-") - 1) != 0) + break; + + if (state[SEARCH_SET].set) + var = state[SEARCH_SET].arg ? state[SEARCH_SET].arg : "root"; + + if (argc != j) + id = args[j]; + else if (state[SEARCH_SET].set && state[SEARCH_SET].arg) + { + id = state[SEARCH_SET].arg; + var = "root"; + } + else + { + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + goto out; + } + + if (state[SEARCH_LABEL].set) + grub_search_label (id, var, state[SEARCH_NO_FLOPPY].set, + hints, nhints); + else if (state[SEARCH_FS_UUID].set) + grub_search_fs_uuid (id, var, state[SEARCH_NO_FLOPPY].set, + hints, nhints); + else if (state[SEARCH_FILE].set) + grub_search_fs_file (id, var, state[SEARCH_NO_FLOPPY].set, + hints, nhints); + else + grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type"); + +out: + grub_free (hints); + return grub_errno; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(search) +{ + cmd = + grub_register_extcmd ("search", grub_cmd_search, + GRUB_COMMAND_FLAG_EXTRACTOR | GRUB_COMMAND_ACCEPT_DASH, + N_("[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...]" + " NAME"), + N_("Search devices by file, filesystem label" + " or filesystem UUID." + " If --set is specified, the first device found is" + " set to a variable. If no variable name is" + " specified, `root' is used."), + options); +} + +GRUB_MOD_FINI(search) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/setpci.c b/grub-core/commands/setpci.c new file mode 100644 index 000000000..d5bc97d60 --- /dev/null +++ b/grub-core/commands/setpci.c @@ -0,0 +1,341 @@ +/* lspci.c - List PCI devices. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct pci_register +{ + const char *name; + grub_uint16_t addr; + unsigned size; +}; + +static struct pci_register pci_registers[] = + { + {"VENDOR_ID", GRUB_PCI_REG_VENDOR , 2}, + {"DEVICE_ID", GRUB_PCI_REG_DEVICE , 2}, + {"COMMAND", GRUB_PCI_REG_COMMAND , 2}, + {"STATUS", GRUB_PCI_REG_STATUS , 2}, + {"REVISION", GRUB_PCI_REG_REVISION , 1}, + {"CLASS_PROG", GRUB_PCI_REG_CLASS + 1 , 1}, + {"CLASS_DEVICE", GRUB_PCI_REG_CLASS + 2 , 2}, + {"CACHE_LINE_SIZE", GRUB_PCI_REG_CACHELINE , 1}, + {"LATENCY_TIMER", GRUB_PCI_REG_LAT_TIMER , 1}, + {"HEADER_TYPE", GRUB_PCI_REG_HEADER_TYPE , 1}, + {"BIST", GRUB_PCI_REG_BIST , 1}, + {"BASE_ADDRESS_0", GRUB_PCI_REG_ADDRESS_REG0, 4}, + {"BASE_ADDRESS_1", GRUB_PCI_REG_ADDRESS_REG1, 4}, + {"BASE_ADDRESS_2", GRUB_PCI_REG_ADDRESS_REG2, 4}, + {"BASE_ADDRESS_3", GRUB_PCI_REG_ADDRESS_REG3, 4}, + {"BASE_ADDRESS_4", GRUB_PCI_REG_ADDRESS_REG4, 4}, + {"BASE_ADDRESS_5", GRUB_PCI_REG_ADDRESS_REG5, 4}, + {"CARDBUS_CIS", GRUB_PCI_REG_CIS_POINTER , 4}, + {"SUBVENDOR_ID", GRUB_PCI_REG_SUBVENDOR , 2}, + {"SUBSYSTEM_ID", GRUB_PCI_REG_SUBSYSTEM , 2}, + {"ROM_ADDRESS", GRUB_PCI_REG_ROM_ADDRESS , 4}, + {"CAP_POINTER", GRUB_PCI_REG_CAP_POINTER , 1}, + {"INTERRUPT_LINE", GRUB_PCI_REG_IRQ_LINE , 1}, + {"INTERRUPT_PIN", GRUB_PCI_REG_IRQ_PIN , 1}, + {"MIN_GNT", GRUB_PCI_REG_MIN_GNT , 1}, + {"MAX_LAT", GRUB_PCI_REG_MIN_GNT , 1}, + }; + +static const struct grub_arg_option options[] = + { + {0, 'd', 0, N_("Select device by vendor and device IDs."), + N_("[vendor]:[device]"), ARG_TYPE_STRING}, + {0, 's', 0, N_("Select device by its position on the bus."), + N_("[bus]:[slot][.func]"), ARG_TYPE_STRING}, + {0, 'v', 0, N_("Save read value into variable VARNAME."), + N_("VARNAME"), ARG_TYPE_STRING}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_uint32_t pciid_check_mask, pciid_check_value; +static int bus, device, function; +static int check_bus, check_device, check_function; +static grub_uint32_t write_mask, regwrite; +static int regsize; +static grub_uint16_t regaddr; +static const char *varname; + +static int +grub_setpci_iter (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_uint32_t regval = 0; + grub_pci_address_t addr; + + if ((pciid & pciid_check_mask) != pciid_check_value) + return 0; + + if (check_bus && grub_pci_get_bus (dev) != bus) + return 0; + + if (check_device && grub_pci_get_device (dev) != device) + return 0; + + if (check_function && grub_pci_get_function (dev) != function) + return 0; + + addr = grub_pci_make_address (dev, regaddr); + + switch (regsize) + { + case 1: + regval = grub_pci_read_byte (addr); + break; + + case 2: + regval = grub_pci_read_word (addr); + break; + + case 4: + regval = grub_pci_read (addr); + break; + } + + if (varname) + { + char buf[sizeof ("XXXXXXXX")]; + grub_snprintf (buf, sizeof (buf), "%x", regval); + grub_env_set (varname, buf); + return 1; + } + + if (!write_mask) + { + grub_printf (_("Register %x of %x:%02x.%x is %x\n"), regaddr, + grub_pci_get_bus (dev), + grub_pci_get_device (dev), + grub_pci_get_function (dev), + regval); + return 0; + } + + regval = (regval & ~write_mask) | regwrite; + + switch (regsize) + { + case 1: + grub_pci_write_byte (addr, regval); + break; + + case 2: + grub_pci_write_word (addr, regval); + break; + + case 4: + grub_pci_write (addr, regval); + break; + } + + return 0; +} + +static grub_err_t +grub_cmd_setpci (grub_extcmd_context_t ctxt, int argc, char **argv) +{ + const char *ptr; + unsigned i; + + pciid_check_value = 0; + pciid_check_mask = 0; + + if (ctxt->state[0].set) + { + ptr = ctxt->state[0].arg; + pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff); + if (grub_errno == GRUB_ERR_BAD_NUMBER) + { + grub_errno = GRUB_ERR_NONE; + ptr = ctxt->state[0].arg; + } + else + pciid_check_mask |= 0xffff; + if (grub_errno) + return grub_errno; + if (*ptr != ':') + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("missing `%c' symbol"), ':'); + ptr++; + pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff) + << 16; + if (grub_errno == GRUB_ERR_BAD_NUMBER) + grub_errno = GRUB_ERR_NONE; + else + pciid_check_mask |= 0xffff0000; + } + + pciid_check_value &= pciid_check_mask; + + check_bus = check_device = check_function = 0; + + if (ctxt->state[1].set) + { + const char *optr; + + ptr = ctxt->state[1].arg; + optr = ptr; + bus = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno == GRUB_ERR_BAD_NUMBER) + { + grub_errno = GRUB_ERR_NONE; + ptr = optr; + } + else + check_bus = 1; + if (grub_errno) + return grub_errno; + if (*ptr != ':') + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("missing `%c' symbol"), ':'); + ptr++; + optr = ptr; + device = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno == GRUB_ERR_BAD_NUMBER) + { + grub_errno = GRUB_ERR_NONE; + ptr = optr; + } + else + check_device = 1; + if (*ptr == '.') + { + ptr++; + function = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno) + return grub_errno; + check_function = 1; + } + } + + if (ctxt->state[2].set) + varname = ctxt->state[2].arg; + else + varname = NULL; + + write_mask = 0; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + ptr = argv[0]; + + for (i = 0; i < ARRAY_SIZE (pci_registers); i++) + { + if (grub_strncmp (ptr, pci_registers[i].name, + grub_strlen (pci_registers[i].name)) == 0) + break; + } + if (i == ARRAY_SIZE (pci_registers)) + { + regsize = 0; + regaddr = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "unknown register"); + } + else + { + regaddr = pci_registers[i].addr; + regsize = pci_registers[i].size; + ptr += grub_strlen (pci_registers[i].name); + } + + if (grub_errno) + return grub_errno; + + if (*ptr == '+') + { + ptr++; + regaddr += grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno) + return grub_errno; + } + + if (grub_memcmp (ptr, ".L", sizeof (".L") - 1) == 0 + || grub_memcmp (ptr, ".l", sizeof (".l") - 1) == 0) + { + regsize = 4; + ptr += sizeof (".l") - 1; + } + else if (grub_memcmp (ptr, ".W", sizeof (".W") - 1) == 0 + || grub_memcmp (ptr, ".w", sizeof (".w") - 1) == 0) + { + regsize = 2; + ptr += sizeof (".w") - 1; + } + else if (grub_memcmp (ptr, ".B", sizeof (".B") - 1) == 0 + || grub_memcmp (ptr, ".b", sizeof (".b") - 1) == 0) + { + regsize = 1; + ptr += sizeof (".b") - 1; + } + + if (!regsize) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "unknown register size"); + + write_mask = 0; + if (*ptr == '=') + { + ptr++; + regwrite = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno) + return grub_errno; + write_mask = 0xffffffff; + if (*ptr == ':') + { + ptr++; + write_mask = grub_strtoul (ptr, (char **) &ptr, 16); + if (grub_errno) + return grub_errno; + write_mask = 0xffffffff; + } + regwrite &= write_mask; + } + + if (write_mask && varname) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "option -v isn't valid for writes"); + + grub_pci_iterate (grub_setpci_iter, NULL); + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(setpci) +{ + cmd = grub_register_extcmd ("setpci", grub_cmd_setpci, 0, + N_("[-s POSITION] [-d DEVICE] [-v VAR] " + "REGISTER[=VALUE[:MASK]]"), + N_("Manipulate PCI devices."), options); +} + +GRUB_MOD_FINI(setpci) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/sleep.c b/grub-core/commands/sleep.c new file mode 100644 index 000000000..e77e7900f --- /dev/null +++ b/grub-core/commands/sleep.c @@ -0,0 +1,117 @@ +/* sleep.c - Command to wait a specified number of seconds. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + {"verbose", 'v', 0, N_("Verbose countdown."), 0, 0}, + {"interruptible", 'i', 0, N_("Allow to interrupt with ESC."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static struct grub_term_coordinate *pos; + +static void +do_print (int n) +{ + grub_term_restore_pos (pos); + /* NOTE: Do not remove the trailing space characters. + They are required to clear the line. */ + grub_printf ("%d ", n); + grub_refresh (); +} + +/* Based on grub_millisleep() from kern/generic/millisleep.c. */ +static int +grub_interruptible_millisleep (grub_uint32_t ms) +{ + grub_uint64_t start; + + start = grub_get_time_ms (); + + while (grub_get_time_ms () - start < ms) + if (grub_getkey_noblock () == GRUB_TERM_ESC) + return 1; + + return 0; +} + +static grub_err_t +grub_cmd_sleep (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + int n; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + n = grub_strtoul (args[0], 0, 10); + + if (n == 0) + { + /* Either `0' or broken input. */ + return 0; + } + + grub_refresh (); + + pos = grub_term_save_pos (); + + for (; n; n--) + { + if (state[0].set) + do_print (n); + + if (state[1].set) + { + if (grub_interruptible_millisleep (1000)) + return 1; + } + else + grub_millisleep (1000); + } + if (state[0].set) + do_print (0); + + return 0; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(sleep) +{ + cmd = grub_register_extcmd ("sleep", grub_cmd_sleep, 0, + N_("NUMBER_OF_SECONDS"), + N_("Wait for a specified number of seconds."), + options); +} + +GRUB_MOD_FINI(sleep) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/syslinuxcfg.c b/grub-core/commands/syslinuxcfg.c new file mode 100644 index 000000000..7be28fada --- /dev/null +++ b/grub-core/commands/syslinuxcfg.c @@ -0,0 +1,217 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Helper for syslinux_file. */ +static grub_err_t +syslinux_file_getline (char **line, int cont __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + *line = 0; + return GRUB_ERR_NONE; +} + +static const struct grub_arg_option options[] = + { + {"root", 'r', 0, + N_("root directory of the syslinux disk [default=/]."), + N_("DIR"), ARG_TYPE_STRING}, + {"cwd", 'c', 0, + N_("current directory of syslinux [default is parent directory of input file]."), + N_("DIR"), ARG_TYPE_STRING}, + {"isolinux", 'i', 0, N_("assume input is an isolinux configuration file."), 0, 0}, + {"pxelinux", 'p', 0, N_("assume input is a pxelinux configuration file."), 0, 0}, + {"syslinux", 's', 0, N_("assume input is a syslinux configuration file."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +enum + { + OPTION_ROOT, + OPTION_CWD, + OPTION_ISOLINUX, + OPTION_PXELINUX, + OPTION_SYSLINUX + }; + +static grub_err_t +syslinux_file (grub_extcmd_context_t ctxt, const char *filename) +{ + char *result; + const char *root = ctxt->state[OPTION_ROOT].set ? ctxt->state[OPTION_ROOT].arg : "/"; + const char *cwd = ctxt->state[OPTION_CWD].set ? ctxt->state[OPTION_CWD].arg : NULL; + grub_syslinux_flavour_t flav = GRUB_SYSLINUX_UNKNOWN; + char *cwdf = NULL; + grub_menu_t menu; + + if (ctxt->state[OPTION_ISOLINUX].set) + flav = GRUB_SYSLINUX_ISOLINUX; + if (ctxt->state[OPTION_PXELINUX].set) + flav = GRUB_SYSLINUX_PXELINUX; + if (ctxt->state[OPTION_SYSLINUX].set) + flav = GRUB_SYSLINUX_SYSLINUX; + + if (!cwd) + { + char *p; + cwdf = grub_strdup (filename); + if (!cwdf) + return grub_errno; + p = grub_strrchr (cwdf, '/'); + if (!p) + { + grub_free (cwdf); + cwd = "/"; + cwdf = NULL; + } + else + { + *p = '\0'; + cwd = cwdf; + } + } + + grub_dprintf ("syslinux", + "transforming syslinux config %s, root = %s, cwd = %s\n", + filename, root, cwd); + + result = grub_syslinux_config_file (root, root, cwd, cwd, filename, flav); + if (!result) + return grub_errno; + + grub_dprintf ("syslinux", "syslinux config transformed\n"); + + menu = grub_env_get_menu (); + if (! menu) + { + menu = grub_zalloc (sizeof (*menu)); + if (! menu) + { + grub_free (result); + return grub_errno; + } + + grub_env_set_menu (menu); + } + + grub_normal_parse_line (result, syslinux_file_getline, NULL); + grub_print_error (); + grub_free (result); + grub_free (cwdf); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_syslinux_source (grub_extcmd_context_t ctxt, + int argc, char **args) +{ + int new_env, extractor; + grub_err_t ret; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + extractor = (ctxt->extcmd->cmd->name[0] == 'e'); + new_env = (ctxt->extcmd->cmd->name[extractor ? (sizeof ("extract_syslinux_entries_") - 1) + : (sizeof ("syslinux_") - 1)] == 'c'); + + if (new_env) + grub_cls (); + + if (new_env && !extractor) + grub_env_context_open (); + if (extractor) + grub_env_extractor_open (!new_env); + + ret = syslinux_file (ctxt, args[0]); + + if (new_env) + { + grub_menu_t menu; + menu = grub_env_get_menu (); + if (menu && menu->size) + grub_show_menu (menu, 1, 0); + if (!extractor) + grub_env_context_close (); + } + if (extractor) + grub_env_extractor_close (!new_env); + + return ret; +} + + +static grub_extcmd_t cmd_source, cmd_configfile; +static grub_extcmd_t cmd_source_extract, cmd_configfile_extract; + +GRUB_MOD_INIT(syslinuxcfg) +{ + cmd_source + = grub_register_extcmd ("syslinux_source", + grub_cmd_syslinux_source, 0, + N_("FILE"), + /* TRANSLATORS: "syslinux config" means + "config as used by syslinux". */ + N_("Execute syslinux config in same context"), + options); + cmd_configfile + = grub_register_extcmd ("syslinux_configfile", + grub_cmd_syslinux_source, 0, + N_("FILE"), + N_("Execute syslinux config in new context"), + options); + cmd_source_extract + = grub_register_extcmd ("extract_syslinux_entries_source", + grub_cmd_syslinux_source, 0, + N_("FILE"), + N_("Execute syslinux config in same context taking only menu entries"), + options); + cmd_configfile_extract + = grub_register_extcmd ("extract_syslinux_entries_configfile", + grub_cmd_syslinux_source, 0, + N_("FILE"), + N_("Execute syslinux config in new context taking only menu entries"), + options); +} + +GRUB_MOD_FINI(syslinuxcfg) +{ + grub_unregister_extcmd (cmd_source); + grub_unregister_extcmd (cmd_configfile); + grub_unregister_extcmd (cmd_source_extract); + grub_unregister_extcmd (cmd_configfile_extract); +} diff --git a/grub-core/commands/terminal.c b/grub-core/commands/terminal.c new file mode 100644 index 000000000..3002186d2 --- /dev/null +++ b/grub-core/commands/terminal.c @@ -0,0 +1,285 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_term_autoload *grub_term_input_autoload = NULL; +struct grub_term_autoload *grub_term_output_autoload = NULL; + +struct abstract_terminal +{ + struct abstract_terminal *next; + struct abstract_terminal *prev; + const char *name; + grub_err_t (*init) (struct abstract_terminal *term); + grub_err_t (*fini) (struct abstract_terminal *term); +}; + +static grub_err_t +handle_command (int argc, char **args, struct abstract_terminal **enabled, + struct abstract_terminal **disabled, + struct grub_term_autoload *autoloads, + const char *active_str, + const char *available_str) +{ + int i; + struct abstract_terminal *term; + struct grub_term_autoload *aut; + + if (argc == 0) + { + grub_puts_ (active_str); + for (term = *enabled; term; term = term->next) + grub_printf ("%s ", term->name); + grub_printf ("\n"); + grub_puts_ (available_str); + for (term = *disabled; term; term = term->next) + grub_printf ("%s ", term->name); + /* This is quadratic but we don't expect mode than 30 terminal + modules ever. */ + for (aut = autoloads; aut; aut = aut->next) + { + for (term = *disabled; term; term = term->next) + if (grub_strcmp (term->name, aut->name) == 0 + || (aut->name[0] && aut->name[grub_strlen (aut->name) - 1] == '*' + && grub_memcmp (term->name, aut->name, + grub_strlen (aut->name) - 1) == 0)) + break; + if (!term) + for (term = *enabled; term; term = term->next) + if (grub_strcmp (term->name, aut->name) == 0 + || (aut->name[0] && aut->name[grub_strlen (aut->name) - 1] == '*' + && grub_memcmp (term->name, aut->name, + grub_strlen (aut->name) - 1) == 0)) + break; + if (!term) + grub_printf ("%s ", aut->name); + } + grub_printf ("\n"); + return GRUB_ERR_NONE; + } + i = 0; + + if (grub_strcmp (args[0], "--append") == 0 + || grub_strcmp (args[0], "--remove") == 0) + i++; + + if (i == argc) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_ ("no terminal specified")); + + for (; i < argc; i++) + { + int again = 0; + while (1) + { + for (term = *disabled; term; term = term->next) + if (grub_strcmp (args[i], term->name) == 0 + || (grub_strcmp (args[i], "ofconsole") == 0 + && grub_strcmp ("console", term->name) == 0)) + break; + if (term == 0) + for (term = *enabled; term; term = term->next) + if (grub_strcmp (args[i], term->name) == 0 + || (grub_strcmp (args[i], "ofconsole") == 0 + && grub_strcmp ("console", term->name) == 0)) + break; + if (term) + break; + if (again) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("terminal `%s' isn't found"), + args[i]); + for (aut = autoloads; aut; aut = aut->next) + if (grub_strcmp (args[i], aut->name) == 0 + || (grub_strcmp (args[i], "ofconsole") == 0 + && grub_strcmp ("console", aut->name) == 0) + || (aut->name[0] && aut->name[grub_strlen (aut->name) - 1] == '*' + && grub_memcmp (args[i], aut->name, + grub_strlen (aut->name) - 1) == 0)) + { + grub_dl_t mod; + mod = grub_dl_load (aut->modname); + if (mod) + grub_dl_ref (mod); + grub_errno = GRUB_ERR_NONE; + break; + } + if (grub_memcmp (args[i], "serial_usb", + sizeof ("serial_usb") - 1) == 0 + && grub_term_poll_usb) + { + grub_term_poll_usb (1); + again = 1; + continue; + } + if (!aut) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("terminal `%s' isn't found"), + args[i]); + again = 1; + } + } + + if (grub_strcmp (args[0], "--append") == 0) + { + for (i = 1; i < argc; i++) + { + for (term = *disabled; term; term = term->next) + if (grub_strcmp (args[i], term->name) == 0 + || (grub_strcmp (args[i], "ofconsole") == 0 + && grub_strcmp ("console", term->name) == 0)) + break; + if (term) + { + if (term->init && term->init (term) != GRUB_ERR_NONE) + return grub_errno; + + grub_list_remove (GRUB_AS_LIST (term)); + grub_list_push (GRUB_AS_LIST_P (enabled), GRUB_AS_LIST (term)); + } + } + return GRUB_ERR_NONE; + } + + if (grub_strcmp (args[0], "--remove") == 0) + { + for (i = 1; i < argc; i++) + { + for (term = *enabled; term; term = term->next) + if (grub_strcmp (args[i], term->name) == 0 + || (grub_strcmp (args[i], "ofconsole") == 0 + && grub_strcmp ("console", term->name) == 0)) + break; + if (term) + { + if (!term->next && term == *enabled) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "can't remove the last terminal"); + grub_list_remove (GRUB_AS_LIST (term)); + if (term->fini) + term->fini (term); + grub_list_push (GRUB_AS_LIST_P (disabled), GRUB_AS_LIST (term)); + } + } + return GRUB_ERR_NONE; + } + for (i = 0; i < argc; i++) + { + for (term = *disabled; term; term = term->next) + if (grub_strcmp (args[i], term->name) == 0 + || (grub_strcmp (args[i], "ofconsole") == 0 + && grub_strcmp ("console", term->name) == 0)) + break; + if (term) + { + if (term->init && term->init (term) != GRUB_ERR_NONE) + return grub_errno; + + grub_list_remove (GRUB_AS_LIST (term)); + grub_list_push (GRUB_AS_LIST_P (enabled), GRUB_AS_LIST (term)); + } + } + + { + struct abstract_terminal *next; + for (term = *enabled; term; term = next) + { + next = term->next; + for (i = 0; i < argc; i++) + if (grub_strcmp (args[i], term->name) == 0 + || (grub_strcmp (args[i], "ofconsole") == 0 + && grub_strcmp ("console", term->name) == 0)) + break; + if (i == argc) + { + if (!term->next && term == *enabled) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "can't remove the last terminal"); + grub_list_remove (GRUB_AS_LIST (term)); + if (term->fini) + term->fini (term); + grub_list_push (GRUB_AS_LIST_P (disabled), GRUB_AS_LIST (term)); + } + } + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_terminal_input (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + (void) GRUB_FIELD_MATCH (grub_term_inputs, struct abstract_terminal *, next); + (void) GRUB_FIELD_MATCH (grub_term_inputs, struct abstract_terminal *, prev); + (void) GRUB_FIELD_MATCH (grub_term_inputs, struct abstract_terminal *, name); + (void) GRUB_FIELD_MATCH (grub_term_inputs, struct abstract_terminal *, init); + (void) GRUB_FIELD_MATCH (grub_term_inputs, struct abstract_terminal *, fini); + return handle_command (argc, args, + (struct abstract_terminal **) (void *) &grub_term_inputs, + (struct abstract_terminal **) (void *) &grub_term_inputs_disabled, + grub_term_input_autoload, + N_ ("Active input terminals:"), + N_ ("Available input terminals:")); +} + +static grub_err_t +grub_cmd_terminal_output (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + (void) GRUB_FIELD_MATCH (grub_term_outputs, struct abstract_terminal *, next); + (void) GRUB_FIELD_MATCH (grub_term_outputs, struct abstract_terminal *, prev); + (void) GRUB_FIELD_MATCH (grub_term_outputs, struct abstract_terminal *, name); + (void) GRUB_FIELD_MATCH (grub_term_outputs, struct abstract_terminal *, init); + (void) GRUB_FIELD_MATCH (grub_term_outputs, struct abstract_terminal *, fini); + return handle_command (argc, args, + (struct abstract_terminal **) (void *) &grub_term_outputs, + (struct abstract_terminal **) (void *) &grub_term_outputs_disabled, + grub_term_output_autoload, + N_ ("Active output terminals:"), + N_ ("Available output terminals:")); +} + +static grub_command_t cmd_terminal_input, cmd_terminal_output; + +GRUB_MOD_INIT(terminal) +{ + cmd_terminal_input = + grub_register_command ("terminal_input", grub_cmd_terminal_input, + N_("[--append|--remove] " + "[TERMINAL1] [TERMINAL2] ..."), + N_("List or select an input terminal.")); + cmd_terminal_output = + grub_register_command ("terminal_output", grub_cmd_terminal_output, + N_("[--append|--remove] " + "[TERMINAL1] [TERMINAL2] ..."), + N_("List or select an output terminal.")); +} + +GRUB_MOD_FINI(terminal) +{ + grub_unregister_command (cmd_terminal_input); + grub_unregister_command (cmd_terminal_output); +} diff --git a/grub-core/commands/test.c b/grub-core/commands/test.c new file mode 100644 index 000000000..5f06642f6 --- /dev/null +++ b/grub-core/commands/test.c @@ -0,0 +1,455 @@ +/* test.c -- The test command.. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* A simple implementation for signed numbers. */ +static int +grub_strtosl (char *arg, char **end, int base) +{ + if (arg[0] == '-') + return -grub_strtoul (arg + 1, end, base); + return grub_strtoul (arg, end, base); +} + +/* Context for test_parse. */ +struct test_parse_ctx +{ + int invert; + int or, and; + int file_exists; + struct grub_dirhook_info file_info; + char *filename; +}; + +/* Take care of discarding and inverting. */ +static void +update_val (int val, struct test_parse_ctx *ctx) +{ + ctx->and = ctx->and && (ctx->invert ? ! val : val); + ctx->invert = 0; +} + +/* A hook for iterating directories. */ +static int +find_file (const char *cur_filename, const struct grub_dirhook_info *info, + void *data) +{ + struct test_parse_ctx *ctx = data; + + if ((info->case_insensitive ? grub_strcasecmp (cur_filename, ctx->filename) + : grub_strcmp (cur_filename, ctx->filename)) == 0) + { + ctx->file_info = *info; + ctx->file_exists = 1; + return 1; + } + return 0; +} + +/* Check if file exists and fetch its information. */ +static void +get_fileinfo (char *path, struct test_parse_ctx *ctx) +{ + char *pathname; + char *device_name; + grub_fs_t fs; + grub_device_t dev; + + ctx->file_exists = 0; + device_name = grub_file_get_device_name (path); + dev = grub_device_open (device_name); + if (! dev) + { + grub_free (device_name); + return; + } + + fs = grub_fs_probe (dev); + if (! fs) + { + grub_free (device_name); + grub_device_close (dev); + return; + } + + pathname = grub_strchr (path, ')'); + if (! pathname) + pathname = path; + else + pathname++; + + /* Remove trailing '/'. */ + while (*pathname && pathname[grub_strlen (pathname) - 1] == '/') + pathname[grub_strlen (pathname) - 1] = 0; + + /* Split into path and filename. */ + ctx->filename = grub_strrchr (pathname, '/'); + if (! ctx->filename) + { + path = grub_strdup ("/"); + ctx->filename = pathname; + } + else + { + ctx->filename++; + path = grub_strdup (pathname); + path[ctx->filename - pathname] = 0; + } + + /* It's the whole device. */ + if (! *pathname) + { + ctx->file_exists = 1; + grub_memset (&ctx->file_info, 0, sizeof (ctx->file_info)); + /* Root is always a directory. */ + ctx->file_info.dir = 1; + + /* Fetch writing time. */ + ctx->file_info.mtimeset = 0; + if (fs->mtime) + { + if (! fs->mtime (dev, &ctx->file_info.mtime)) + ctx->file_info.mtimeset = 1; + grub_errno = GRUB_ERR_NONE; + } + } + else + (fs->dir) (dev, path, find_file, ctx); + + grub_device_close (dev); + grub_free (path); + grub_free (device_name); +} + +/* Parse a test expression starting from *argn. */ +static int +test_parse (char **args, int *argn, int argc) +{ + struct test_parse_ctx ctx = { + .and = 1, + .or = 0, + .invert = 0 + }; + + /* Here we have the real parsing. */ + while (*argn < argc) + { + /* First try 3 argument tests. */ + if (*argn + 2 < argc) + { + /* String tests. */ + if (grub_strcmp (args[*argn + 1], "=") == 0 + || grub_strcmp (args[*argn + 1], "==") == 0) + { + update_val (grub_strcmp (args[*argn], args[*argn + 2]) == 0, + &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], "!=") == 0) + { + update_val (grub_strcmp (args[*argn], args[*argn + 2]) != 0, + &ctx); + (*argn) += 3; + continue; + } + + /* GRUB extension: lexicographical sorting. */ + if (grub_strcmp (args[*argn + 1], "<") == 0) + { + update_val (grub_strcmp (args[*argn], args[*argn + 2]) < 0, + &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], "<=") == 0) + { + update_val (grub_strcmp (args[*argn], args[*argn + 2]) <= 0, + &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], ">") == 0) + { + update_val (grub_strcmp (args[*argn], args[*argn + 2]) > 0, + &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], ">=") == 0) + { + update_val (grub_strcmp (args[*argn], args[*argn + 2]) >= 0, + &ctx); + (*argn) += 3; + continue; + } + + /* Number tests. */ + if (grub_strcmp (args[*argn + 1], "-eq") == 0) + { + update_val (grub_strtosl (args[*argn], 0, 0) + == grub_strtosl (args[*argn + 2], 0, 0), &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], "-ge") == 0) + { + update_val (grub_strtosl (args[*argn], 0, 0) + >= grub_strtosl (args[*argn + 2], 0, 0), &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], "-gt") == 0) + { + update_val (grub_strtosl (args[*argn], 0, 0) + > grub_strtosl (args[*argn + 2], 0, 0), &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], "-le") == 0) + { + update_val (grub_strtosl (args[*argn], 0, 0) + <= grub_strtosl (args[*argn + 2], 0, 0), &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], "-lt") == 0) + { + update_val (grub_strtosl (args[*argn], 0, 0) + < grub_strtosl (args[*argn + 2], 0, 0), &ctx); + (*argn) += 3; + continue; + } + + if (grub_strcmp (args[*argn + 1], "-ne") == 0) + { + update_val (grub_strtosl (args[*argn], 0, 0) + != grub_strtosl (args[*argn + 2], 0, 0), &ctx); + (*argn) += 3; + continue; + } + + /* GRUB extension: compare numbers skipping prefixes. + Useful for comparing versions. E.g. vmlinuz-2 -plt vmlinuz-11. */ + if (grub_strcmp (args[*argn + 1], "-pgt") == 0 + || grub_strcmp (args[*argn + 1], "-plt") == 0) + { + int i; + /* Skip common prefix. */ + for (i = 0; args[*argn][i] == args[*argn + 2][i] + && args[*argn][i]; i++); + + /* Go the digits back. */ + i--; + while (grub_isdigit (args[*argn][i]) && i > 0) + i--; + i++; + + if (grub_strcmp (args[*argn + 1], "-pgt") == 0) + update_val (grub_strtoul (args[*argn] + i, 0, 0) + > grub_strtoul (args[*argn + 2] + i, 0, 0), &ctx); + else + update_val (grub_strtoul (args[*argn] + i, 0, 0) + < grub_strtoul (args[*argn + 2] + i, 0, 0), &ctx); + (*argn) += 3; + continue; + } + + /* -nt and -ot tests. GRUB extension: when doing -?t bias + will be added to the first mtime. */ + if (grub_memcmp (args[*argn + 1], "-nt", 3) == 0 + || grub_memcmp (args[*argn + 1], "-ot", 3) == 0) + { + struct grub_dirhook_info file1; + int file1exists; + int bias = 0; + + /* Fetch fileinfo. */ + get_fileinfo (args[*argn], &ctx); + file1 = ctx.file_info; + file1exists = ctx.file_exists; + get_fileinfo (args[*argn + 2], &ctx); + + if (args[*argn + 1][3]) + bias = grub_strtosl (args[*argn + 1] + 3, 0, 0); + + if (grub_memcmp (args[*argn + 1], "-nt", 3) == 0) + update_val ((file1exists && ! ctx.file_exists) + || (file1.mtimeset && ctx.file_info.mtimeset + && file1.mtime + bias > ctx.file_info.mtime), + &ctx); + else + update_val ((! file1exists && ctx.file_exists) + || (file1.mtimeset && ctx.file_info.mtimeset + && file1.mtime + bias < ctx.file_info.mtime), + &ctx); + (*argn) += 3; + continue; + } + } + + /* Two-argument tests. */ + if (*argn + 1 < argc) + { + /* File tests. */ + if (grub_strcmp (args[*argn], "-d") == 0) + { + get_fileinfo (args[*argn + 1], &ctx); + update_val (ctx.file_exists && ctx.file_info.dir, &ctx); + (*argn) += 2; + continue; + } + + if (grub_strcmp (args[*argn], "-e") == 0) + { + get_fileinfo (args[*argn + 1], &ctx); + update_val (ctx.file_exists, &ctx); + (*argn) += 2; + continue; + } + + if (grub_strcmp (args[*argn], "-f") == 0) + { + get_fileinfo (args[*argn + 1], &ctx); + /* FIXME: check for other types. */ + update_val (ctx.file_exists && ! ctx.file_info.dir, &ctx); + (*argn) += 2; + continue; + } + + if (grub_strcmp (args[*argn], "-s") == 0) + { + grub_file_t file; + grub_file_filter_disable_compression (); + file = grub_file_open (args[*argn + 1]); + update_val (file && (grub_file_size (file) != 0), &ctx); + if (file) + grub_file_close (file); + grub_errno = GRUB_ERR_NONE; + (*argn) += 2; + continue; + } + + /* String tests. */ + if (grub_strcmp (args[*argn], "-n") == 0) + { + update_val (args[*argn + 1][0], &ctx); + + (*argn) += 2; + continue; + } + if (grub_strcmp (args[*argn], "-z") == 0) + { + update_val (! args[*argn + 1][0], &ctx); + (*argn) += 2; + continue; + } + } + + /* Special modifiers. */ + + /* End of expression. return to parent. */ + if (grub_strcmp (args[*argn], ")") == 0) + { + (*argn)++; + return ctx.or || ctx.and; + } + /* Recursively invoke if parenthesis. */ + if (grub_strcmp (args[*argn], "(") == 0) + { + (*argn)++; + update_val (test_parse (args, argn, argc), &ctx); + continue; + } + + if (grub_strcmp (args[*argn], "!") == 0) + { + ctx.invert = ! ctx.invert; + (*argn)++; + continue; + } + if (grub_strcmp (args[*argn], "-a") == 0) + { + (*argn)++; + continue; + } + if (grub_strcmp (args[*argn], "-o") == 0) + { + ctx.or = ctx.or || ctx.and; + ctx.and = 1; + (*argn)++; + continue; + } + + /* No test found. Interpret if as just a string. */ + update_val (args[*argn][0], &ctx); + (*argn)++; + } + return ctx.or || ctx.and; +} + +static grub_err_t +grub_cmd_test (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + int argn = 0; + + if (argc >= 1 && grub_strcmp (args[argc - 1], "]") == 0) + argc--; + + return test_parse (args, &argn, argc) ? GRUB_ERR_NONE + : grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); +} + +static grub_command_t cmd_1, cmd_2; + +GRUB_MOD_INIT(test) +{ + cmd_1 = grub_register_command ("[", grub_cmd_test, + N_("EXPRESSION ]"), N_("Evaluate an expression.")); + cmd_1->flags |= GRUB_COMMAND_FLAG_EXTRACTOR; + cmd_2 = grub_register_command ("test", grub_cmd_test, + N_("EXPRESSION"), N_("Evaluate an expression.")); + cmd_2->flags |= GRUB_COMMAND_FLAG_EXTRACTOR; +} + +GRUB_MOD_FINI(test) +{ + grub_unregister_command (cmd_1); + grub_unregister_command (cmd_2); +} diff --git a/grub-core/commands/testload.c b/grub-core/commands/testload.c new file mode 100644 index 000000000..cfab6763d --- /dev/null +++ b/grub-core/commands/testload.c @@ -0,0 +1,170 @@ +/* testload.c - load the same file in multiple ways */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2006,2007,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Helper for grub_cmd_testload. */ +static void +read_progress (grub_disk_addr_t sector __attribute__ ((unused)), + unsigned offset __attribute__ ((unused)), + unsigned len, + void *data __attribute__ ((unused))) +{ + for (; len >= GRUB_DISK_SECTOR_SIZE; len -= GRUB_DISK_SECTOR_SIZE) + grub_xputs ("."); + if (len) + grub_xputs ("."); + grub_refresh (); +} + +static grub_err_t +grub_cmd_testload (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_file_t file; + char *buf; + grub_size_t size; + grub_off_t pos; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + file = grub_file_open (argv[0]); + if (! file) + return grub_errno; + + size = grub_file_size (file) & ~(GRUB_DISK_SECTOR_SIZE - 1); + if (size == 0) + { + grub_file_close (file); + return GRUB_ERR_NONE; + } + + buf = grub_malloc (size); + if (! buf) + goto fail; + + grub_printf ("Reading %s sequentially", argv[0]); + file->read_hook = read_progress; + if (grub_file_read (file, buf, size) != (grub_ssize_t) size) + goto fail; + grub_printf (" Done.\n"); + + /* Read sequentially again. */ + grub_printf ("Reading %s sequentially again", argv[0]); + grub_file_seek (file, 0); + + for (pos = 0; pos < size;) + { + char sector[GRUB_DISK_SECTOR_SIZE]; + grub_size_t curlen = GRUB_DISK_SECTOR_SIZE; + + if (curlen > size - pos) + curlen = size - pos; + + if (grub_file_read (file, sector, curlen) + != (grub_ssize_t) curlen) + goto fail; + + if (grub_memcmp (sector, buf + pos, curlen) != 0) + { + grub_printf ("\nDiffers in %lld\n", (unsigned long long) pos); + goto fail; + } + pos += curlen; + } + grub_printf (" Done.\n"); + + /* Read backwards and compare. */ + grub_printf ("Reading %s backwards", argv[0]); + pos = size; + while (pos > 0) + { + char sector[GRUB_DISK_SECTOR_SIZE]; + + if (pos >= GRUB_DISK_SECTOR_SIZE) + pos -= GRUB_DISK_SECTOR_SIZE; + else + pos = 0; + + grub_file_seek (file, pos); + + if (grub_file_read (file, sector, GRUB_DISK_SECTOR_SIZE) + != GRUB_DISK_SECTOR_SIZE) + goto fail; + + if (grub_memcmp (sector, buf + pos, GRUB_DISK_SECTOR_SIZE) != 0) + { + int i; + + grub_printf ("\nDiffers in %lld\n", (unsigned long long) pos); + + for (i = 0; i < GRUB_DISK_SECTOR_SIZE; i++) + { + grub_printf ("%02x ", buf[pos + i]); + if ((i & 15) == 15) + grub_printf ("\n"); + } + + if (i) + grub_refresh (); + + goto fail; + } + } + grub_printf (" Done.\n"); + + return GRUB_ERR_NONE; + + fail: + + grub_file_close (file); + grub_free (buf); + + if (!grub_errno) + grub_error (GRUB_ERR_IO, "bad read"); + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(testload) +{ + cmd = + grub_register_command ("testload", grub_cmd_testload, + N_("FILE"), + N_("Load the same file in multiple ways.")); +} + +GRUB_MOD_FINI(testload) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/testspeed.c b/grub-core/commands/testspeed.c new file mode 100644 index 000000000..042645f8d --- /dev/null +++ b/grub-core/commands/testspeed.c @@ -0,0 +1,115 @@ +/* testspeed.c - Command to test file read speed */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define DEFAULT_BLOCK_SIZE 65536 + +static const struct grub_arg_option options[] = + { + {"size", 's', 0, N_("Specify size for each read operation"), 0, ARG_TYPE_INT}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_err_t +grub_cmd_testspeed (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + grub_uint64_t start; + grub_uint64_t end; + grub_ssize_t block_size; + grub_disk_addr_t total_size; + char *buffer; + grub_file_t file; + grub_uint64_t whole, fraction; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + block_size = (state[0].set) ? + grub_strtoul (state[0].arg, 0, 0) : DEFAULT_BLOCK_SIZE; + + if (block_size <= 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid block size")); + + buffer = grub_malloc (block_size); + if (buffer == NULL) + return grub_errno; + + file = grub_file_open (args[0]); + if (file == NULL) + goto quit; + + total_size = 0; + start = grub_get_time_ms (); + while (1) + { + grub_ssize_t size = grub_file_read (file, buffer, block_size); + if (size <= 0) + break; + total_size += size; + } + end = grub_get_time_ms (); + grub_file_close (file); + + grub_printf_ (N_("File size: %s\n"), + grub_get_human_size (total_size, GRUB_HUMAN_SIZE_NORMAL)); + whole = grub_divmod64 (end - start, 1000, &fraction); + grub_printf_ (N_("Elapsed time: %d.%03d s \n"), + (unsigned) whole, + (unsigned) fraction); + + if (end != start) + { + grub_uint64_t speed = + grub_divmod64 (total_size * 100ULL * 1000ULL, end - start, 0); + + grub_printf_ (N_("Speed: %s \n"), + grub_get_human_size (speed, + GRUB_HUMAN_SIZE_SPEED)); + } + + quit: + grub_free (buffer); + + return grub_errno; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(testspeed) +{ + cmd = grub_register_extcmd ("testspeed", grub_cmd_testspeed, 0, N_("[-s SIZE] FILENAME"), + N_("Test file read speed."), + options); +} + +GRUB_MOD_FINI(testspeed) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/time.c b/grub-core/commands/time.c new file mode 100644 index 000000000..40d496e7b --- /dev/null +++ b/grub-core/commands/time.c @@ -0,0 +1,68 @@ +/* echo.c - Command to display a line of text */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + + +static grub_err_t +grub_cmd_time (grub_command_t ctxt __attribute__ ((unused)), + int argc, char **args) +{ + grub_command_t cmd; + grub_uint32_t start; + grub_uint32_t end; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("no command is specified")); + + cmd = grub_command_find (args[0]); + + if (!cmd) + return grub_error (GRUB_ERR_UNKNOWN_COMMAND, N_("can't find command `%s'"), + args[0]); + + start = grub_get_time_ms (); + (cmd->func) (cmd, argc - 1, &args[1]); + end = grub_get_time_ms (); + + grub_printf_ (N_("Elapsed time: %d.%03d seconds \n"), (end - start) / 1000, + (end - start) % 1000); + + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(time) +{ + cmd = grub_register_command ("time", grub_cmd_time, + N_("COMMAND [ARGS]"), + N_("Measure time used by COMMAND")); +} + +GRUB_MOD_FINI(time) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/tr.c b/grub-core/commands/tr.c new file mode 100644 index 000000000..ef72841a2 --- /dev/null +++ b/grub-core/commands/tr.c @@ -0,0 +1,126 @@ +/* tr.c -- The tr command. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const struct grub_arg_option options[] = + { + { "set", 's', 0, N_("Set a variable to return value."), N_("VARNAME"), ARG_TYPE_STRING }, + { "upcase", 'U', 0, N_("Translate to upper case."), 0, 0 }, + { "downcase", 'D', 0, N_("Translate to lower case."), 0, 0 }, + { 0, 0, 0, 0, 0, 0 } + }; + +static const char *letters_lowercase = "abcdefghijklmnopqrstuvwxyz"; +static const char *letters_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +static grub_err_t +grub_cmd_tr (grub_extcmd_context_t ctxt, int argc, char **args) +{ + char *var = 0; + const char *input = 0; + char *output = 0, *optr; + const char *s1 = 0; + const char *s2 = 0; + const char *iptr; + + /* Select the defaults from options. */ + if (ctxt->state[0].set) { + var = ctxt->state[0].arg; + input = grub_env_get (var); + } + + if (ctxt->state[1].set) { + s1 = letters_lowercase; + s2 = letters_uppercase; + } + + if (ctxt->state[2].set) { + s1 = letters_uppercase; + s2 = letters_lowercase; + } + + /* Check for arguments and update the defaults. */ + if (argc == 1) + input = args[0]; + + else if (argc == 2) { + s1 = args[0]; + s2 = args[1]; + + } else if (argc == 3) { + s1 = args[0]; + s2 = args[1]; + input = args[2]; + + } else if (argc > 3) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "too many parameters"); + + if (!s1 || !s2 || !input) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing parameters"); + + if (grub_strlen (s1) != grub_strlen (s2)) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "set sizes did not match"); + + /* Translate input into output buffer. */ + + output = grub_malloc (grub_strlen (input) + 1); + if (! output) + return grub_errno; + + optr = output; + for (iptr = input; *iptr; iptr++) + { + char *p = grub_strchr (s1, *iptr); + if (p) + *optr++ = s2[p - s1]; + else + *optr++ = *iptr; + } + *optr = '\0'; + + if (ctxt->state[0].set) + grub_env_set (var, output); + else + grub_printf ("%s\n", output); + + grub_free (output); + return GRUB_ERR_NONE; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(tr) +{ + cmd = grub_register_extcmd ("tr", grub_cmd_tr, 0, N_("[OPTIONS] [SET1] [SET2] [STRING]"), + N_("Translate SET1 characters to SET2 in STRING."), options); +} + +GRUB_MOD_FINI(tr) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/commands/true.c b/grub-core/commands/true.c new file mode 100644 index 000000000..8cbba6583 --- /dev/null +++ b/grub-core/commands/true.c @@ -0,0 +1,61 @@ +/* true.c - true and false commands. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_true (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + return 0; +} + +static grub_err_t +grub_cmd_false (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + return grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); +} + +static grub_command_t cmd_true, cmd_false; + + +GRUB_MOD_INIT(true) +{ + cmd_true = + grub_register_command ("true", grub_cmd_true, + /* TRANSLATORS: it's a command description. */ + 0, N_("Do nothing, successfully.")); + cmd_false = + grub_register_command ("false", grub_cmd_false, + /* TRANSLATORS: it's a command description. */ + 0, N_("Do nothing, unsuccessfully.")); +} + +GRUB_MOD_FINI(true) +{ + grub_unregister_command (cmd_true); + grub_unregister_command (cmd_false); +} diff --git a/grub-core/commands/usbtest.c b/grub-core/commands/usbtest.c new file mode 100644 index 000000000..01cdca934 --- /dev/null +++ b/grub-core/commands/usbtest.c @@ -0,0 +1,218 @@ +/* usbtest.c - test module for USB */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const char *usb_classes[] = + { + "Unknown", + "Audio", + "Communication Interface", + "HID", + "Unknown", + "Physical", + "Image", + "Printer", + "Mass Storage", + "Hub", + "Data Interface", + "Smart Card", + "Content Security", + "Video" + }; + +static const char *usb_endp_type[] = + { + "Control", + "Isochronous", + "Bulk", + "Interrupt" + }; + +static const char *usb_devspeed[] = + { + "", + "Low", + "Full", + "High" + }; + +static grub_usb_err_t +grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid, + char **string) +{ + struct grub_usb_desc_str descstr; + struct grub_usb_desc_str *descstrp; + grub_usb_err_t err; + + /* Only get the length. */ + err = grub_usb_control_msg (dev, 1 << 7, + 0x06, (3 << 8) | index, + langid, 1, (char *) &descstr); + if (err) + return err; + + descstrp = grub_malloc (descstr.length); + if (! descstrp) + return GRUB_USB_ERR_INTERNAL; + err = grub_usb_control_msg (dev, 1 << 7, + 0x06, (3 << 8) | index, + langid, descstr.length, (char *) descstrp); + + if (descstrp->length == 0) + { + grub_free (descstrp); + *string = grub_strdup (""); + if (! *string) + return GRUB_USB_ERR_INTERNAL; + return GRUB_USB_ERR_NONE; + } + + *string = grub_malloc (descstr.length * 2 + 1); + if (! *string) + { + grub_free (descstrp); + return GRUB_USB_ERR_INTERNAL; + } + + *grub_utf16_to_utf8 ((grub_uint8_t *) *string, descstrp->str, + descstrp->length / 2 - 1) = 0; + grub_free (descstrp); + + return GRUB_USB_ERR_NONE; +} + +static void +usb_print_str (const char *description, grub_usb_device_t dev, int idx) +{ + char *name = NULL; + grub_usb_err_t err; + /* XXX: LANGID */ + + if (! idx) + return; + + err = grub_usb_get_string (dev, idx, 0x0409, &name); + if (err) + grub_printf ("Error %d retrieving %s\n", err, description); + else + { + grub_printf ("%s: `%s'\n", description, name); + grub_free (name); + } +} + +static int +usb_iterate (grub_usb_device_t dev, void *data __attribute__ ((unused))) +{ + struct grub_usb_desc_device *descdev; + int i; + + descdev = &dev->descdev; + + usb_print_str ("Product", dev, descdev->strprod); + usb_print_str ("Vendor", dev, descdev->strvendor); + usb_print_str ("Serial", dev, descdev->strserial); + + grub_printf ("Class: (0x%02x) %s, Subclass: 0x%02x, Protocol: 0x%02x\n", + descdev->class, descdev->class < ARRAY_SIZE (usb_classes) + ? usb_classes[descdev->class] : "Unknown", + descdev->subclass, descdev->protocol); + grub_printf ("USB version %d.%d, VendorID: 0x%02x, ProductID: 0x%02x, #conf: %d\n", + descdev->usbrel >> 8, (descdev->usbrel >> 4) & 0x0F, + descdev->vendorid, descdev->prodid, descdev->configcnt); + + grub_printf ("%s speed device\n", usb_devspeed[dev->speed]); + + for (i = 0; i < descdev->configcnt; i++) + { + struct grub_usb_desc_config *config; + + config = dev->config[i].descconf; + usb_print_str ("Configuration:", dev, config->strconfig); + } + + for (i = 0; i < dev->config[0].descconf->numif; i++) + { + int j; + struct grub_usb_desc_if *interf; + interf = dev->config[0].interf[i].descif; + + grub_printf ("Interface #%d: #Endpoints: %d ", + i, interf->endpointcnt); + grub_printf ("Class: (0x%02x) %s, Subclass: 0x%02x, Protocol: 0x%02x\n", + interf->class, interf->class < ARRAY_SIZE (usb_classes) + ? usb_classes[interf->class] : "Unknown", + interf->subclass, interf->protocol); + + usb_print_str ("Interface", dev, interf->strif); + + for (j = 0; j < interf->endpointcnt; j++) + { + struct grub_usb_desc_endp *endp; + endp = &dev->config[0].interf[i].descendp[j]; + + grub_printf ("Endpoint #%d: %s, max packed size: %d, transfer type: %s, latency: %d\n", + endp->endp_addr & 15, + (endp->endp_addr & 128) ? "IN" : "OUT", + endp->maxpacket, usb_endp_type[endp->attrib & 3], + endp->interval); + } + } + + grub_printf("\n"); + + return 0; +} + +static grub_err_t +grub_cmd_usbtest (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_usb_poll_devices (1); + + grub_printf ("USB devices:\n\n"); + grub_usb_iterate (usb_iterate, NULL); + + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(usbtest) +{ + cmd = grub_register_command ("usb", grub_cmd_usbtest, + 0, N_("Test USB support.")); +} + +GRUB_MOD_FINI(usbtest) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/commands/verify.c b/grub-core/commands/verify.c new file mode 100644 index 000000000..67cb1c785 --- /dev/null +++ b/grub-core/commands/verify.c @@ -0,0 +1,1042 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_verified +{ + grub_file_t file; + void *buf; +}; +typedef struct grub_verified *grub_verified_t; + +enum + { + OPTION_SKIP_SIG = 0 + }; + +static const struct grub_arg_option options[] = + { + {"skip-sig", 's', 0, + N_("Skip signature-checking of the public key file."), 0, ARG_TYPE_NONE}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_err_t +read_packet_header (grub_file_t sig, grub_uint8_t *out_type, grub_size_t *len) +{ + grub_uint8_t type; + grub_uint8_t l; + grub_uint16_t l16; + grub_uint32_t l32; + + /* New format. */ + switch (grub_file_read (sig, &type, sizeof (type))) + { + case 1: + break; + case 0: + { + *out_type = 0xff; + return 0; + } + default: + if (grub_errno) + return grub_errno; + /* TRANSLATORS: it's about GNUPG signatures. */ + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + } + + if (type == 0) + { + *out_type = 0xfe; + return 0; + } + + if (!(type & 0x80)) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + if (type & 0x40) + { + *out_type = (type & 0x3f); + if (grub_file_read (sig, &l, sizeof (l)) != 1) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + if (l < 192) + { + *len = l; + return 0; + } + if (l < 224) + { + *len = (l - 192) << GRUB_CHAR_BIT; + if (grub_file_read (sig, &l, sizeof (l)) != 1) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + *len |= l; + return 0; + } + if (l == 255) + { + if (grub_file_read (sig, &l32, sizeof (l32)) != sizeof (l32)) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + *len = grub_be_to_cpu32 (l32); + return 0; + } + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + } + *out_type = ((type >> 2) & 0xf); + switch (type & 0x3) + { + case 0: + if (grub_file_read (sig, &l, sizeof (l)) != sizeof (l)) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + *len = l; + return 0; + case 1: + if (grub_file_read (sig, &l16, sizeof (l16)) != sizeof (l16)) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + *len = grub_be_to_cpu16 (l16); + return 0; + case 2: + if (grub_file_read (sig, &l32, sizeof (l32)) != sizeof (l32)) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + *len = grub_be_to_cpu32 (l32); + return 0; + } + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); +} + +struct signature_v4_header +{ + grub_uint8_t type; + grub_uint8_t pkeyalgo; + grub_uint8_t hash; + grub_uint16_t hashed_sub; +} GRUB_PACKED; + +const char *hashes[] = { + [0x01] = "md5", + [0x02] = "sha1", + [0x03] = "ripemd160", + [0x08] = "sha256", + [0x09] = "sha384", + [0x0a] = "sha512", + [0x0b] = "sha224" +}; + +struct gcry_pk_spec *grub_crypto_pk_dsa; +struct gcry_pk_spec *grub_crypto_pk_ecdsa; +struct gcry_pk_spec *grub_crypto_pk_rsa; + +static int +dsa_pad (gcry_mpi_t *hmpi, grub_uint8_t *hval, + const gcry_md_spec_t *hash, struct grub_public_subkey *sk); +static int +rsa_pad (gcry_mpi_t *hmpi, grub_uint8_t *hval, + const gcry_md_spec_t *hash, struct grub_public_subkey *sk); + +struct +{ + const char *name; + grub_size_t nmpisig; + grub_size_t nmpipub; + struct gcry_pk_spec **algo; + int (*pad) (gcry_mpi_t *hmpi, grub_uint8_t *hval, + const gcry_md_spec_t *hash, struct grub_public_subkey *sk); + const char *module; +} pkalgos[] = + { + [1] = { "rsa", 1, 2, &grub_crypto_pk_rsa, rsa_pad, "gcry_rsa" }, + [3] = { "rsa", 1, 2, &grub_crypto_pk_rsa, rsa_pad, "gcry_rsa" }, + [17] = { "dsa", 2, 4, &grub_crypto_pk_dsa, dsa_pad, "gcry_dsa" }, + }; + +struct grub_public_key +{ + struct grub_public_key *next; + struct grub_public_subkey *subkeys; +}; + +struct grub_public_subkey +{ + struct grub_public_subkey *next; + grub_uint8_t type; + grub_uint32_t fingerprint[5]; + gcry_mpi_t mpis[10]; +}; + +static void +free_pk (struct grub_public_key *pk) +{ + struct grub_public_subkey *nsk, *sk; + for (sk = pk->subkeys; sk; sk = nsk) + { + grub_size_t i; + for (i = 0; i < ARRAY_SIZE (sk->mpis); i++) + if (sk->mpis[i]) + gcry_mpi_release (sk->mpis[i]); + nsk = sk->next; + grub_free (sk); + } + grub_free (pk); +} + +#define READBUF_SIZE 4096 + +struct grub_public_key * +grub_load_public_key (grub_file_t f) +{ + grub_err_t err; + struct grub_public_key *ret; + struct grub_public_subkey **last = 0; + void *fingerprint_context = NULL; + grub_uint8_t *buffer = NULL; + + ret = grub_zalloc (sizeof (*ret)); + if (!ret) + { + grub_free (fingerprint_context); + return NULL; + } + + buffer = grub_zalloc (READBUF_SIZE); + fingerprint_context = grub_zalloc (GRUB_MD_SHA1->contextsize); + + if (!buffer || !fingerprint_context) + goto fail; + + last = &ret->subkeys; + + while (1) + { + grub_uint8_t type; + grub_size_t len; + grub_uint8_t v, pk; + grub_uint32_t creation_time; + grub_off_t pend; + struct grub_public_subkey *sk; + grub_size_t i; + grub_uint16_t len_be; + + err = read_packet_header (f, &type, &len); + + if (err) + goto fail; + if (type == 0xfe) + continue; + if (type == 0xff) + { + grub_free (fingerprint_context); + grub_free (buffer); + return ret; + } + + grub_dprintf ("crypt", "len = %x\n", (int) len); + + pend = grub_file_tell (f) + len; + if (type != 6 && type != 14 + && type != 5 && type != 7) + { + grub_file_seek (f, pend); + continue; + } + + if (grub_file_read (f, &v, sizeof (v)) != sizeof (v)) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + goto fail; + } + + grub_dprintf ("crypt", "v = %x\n", v); + + if (v != 4) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + goto fail; + } + if (grub_file_read (f, &creation_time, sizeof (creation_time)) != sizeof (creation_time)) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + goto fail; + } + + grub_dprintf ("crypt", "time = %x\n", creation_time); + + if (grub_file_read (f, &pk, sizeof (pk)) != sizeof (pk)) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + goto fail; + } + + grub_dprintf ("crypt", "pk = %x\n", pk); + + if (pk >= ARRAY_SIZE (pkalgos) || pkalgos[pk].name == NULL) + { + grub_file_seek (f, pend); + continue; + } + + sk = grub_zalloc (sizeof (struct grub_public_subkey)); + if (!sk) + goto fail; + + grub_memset (fingerprint_context, 0, GRUB_MD_SHA1->contextsize); + GRUB_MD_SHA1->init (fingerprint_context); + GRUB_MD_SHA1->write (fingerprint_context, "\x99", 1); + len_be = grub_cpu_to_be16 (len); + GRUB_MD_SHA1->write (fingerprint_context, &len_be, sizeof (len_be)); + GRUB_MD_SHA1->write (fingerprint_context, &v, sizeof (v)); + GRUB_MD_SHA1->write (fingerprint_context, &creation_time, sizeof (creation_time)); + GRUB_MD_SHA1->write (fingerprint_context, &pk, sizeof (pk)); + + for (i = 0; i < pkalgos[pk].nmpipub; i++) + { + grub_uint16_t l; + grub_size_t lb; + if (grub_file_read (f, &l, sizeof (l)) != sizeof (l)) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + break; + } + + lb = (grub_be_to_cpu16 (l) + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT; + if (lb > READBUF_SIZE - sizeof (grub_uint16_t)) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + break; + } + if (grub_file_read (f, buffer + sizeof (grub_uint16_t), lb) != (grub_ssize_t) lb) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + break; + } + grub_memcpy (buffer, &l, sizeof (l)); + + GRUB_MD_SHA1->write (fingerprint_context, buffer, lb + sizeof (grub_uint16_t)); + + if (gcry_mpi_scan (&sk->mpis[i], GCRYMPI_FMT_PGP, + buffer, lb + sizeof (grub_uint16_t), 0)) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + break; + } + } + + if (i < pkalgos[pk].nmpipub) + { + grub_free (sk); + goto fail; + } + + GRUB_MD_SHA1->final (fingerprint_context); + + grub_memcpy (sk->fingerprint, GRUB_MD_SHA1->read (fingerprint_context), 20); + + *last = sk; + last = &sk->next; + + grub_dprintf ("crypt", "actual pos: %x, expected: %x\n", (int)grub_file_tell (f), (int)pend); + + grub_file_seek (f, pend); + } + fail: + free_pk (ret); + grub_free (fingerprint_context); + grub_free (buffer); + return NULL; +} + +struct grub_public_key *grub_pk_trusted; + +struct grub_public_subkey * +grub_crypto_pk_locate_subkey (grub_uint64_t keyid, struct grub_public_key *pkey) +{ + struct grub_public_subkey *sk; + for (sk = pkey->subkeys; sk; sk = sk->next) + if (grub_memcmp (sk->fingerprint + 3, &keyid, 8) == 0) + return sk; + return 0; +} + +struct grub_public_subkey * +grub_crypto_pk_locate_subkey_in_trustdb (grub_uint64_t keyid) +{ + struct grub_public_key *pkey; + struct grub_public_subkey *sk; + for (pkey = grub_pk_trusted; pkey; pkey = pkey->next) + { + sk = grub_crypto_pk_locate_subkey (keyid, pkey); + if (sk) + return sk; + } + return 0; +} + + +static int +dsa_pad (gcry_mpi_t *hmpi, grub_uint8_t *hval, + const gcry_md_spec_t *hash, struct grub_public_subkey *sk) +{ + unsigned nbits = gcry_mpi_get_nbits (sk->mpis[1]); + grub_dprintf ("crypt", "must be %u bits got %d bits\n", nbits, + (int)(8 * hash->mdlen)); + return gcry_mpi_scan (hmpi, GCRYMPI_FMT_USG, hval, + nbits / 8 < (unsigned) hash->mdlen ? nbits / 8 + : (unsigned) hash->mdlen, 0); +} + +static int +rsa_pad (gcry_mpi_t *hmpi, grub_uint8_t *hval, + const gcry_md_spec_t *hash, struct grub_public_subkey *sk) +{ + grub_size_t tlen, emlen, fflen; + grub_uint8_t *em, *emptr; + unsigned nbits = gcry_mpi_get_nbits (sk->mpis[0]); + int ret; + tlen = hash->mdlen + hash->asnlen; + emlen = (nbits + 7) / 8; + if (emlen < tlen + 11) + return 1; + + em = grub_malloc (emlen); + if (!em) + return 1; + + em[0] = 0x00; + em[1] = 0x01; + fflen = emlen - tlen - 3; + for (emptr = em + 2; emptr < em + 2 + fflen; emptr++) + *emptr = 0xff; + *emptr++ = 0x00; + grub_memcpy (emptr, hash->asnoid, hash->asnlen); + emptr += hash->asnlen; + grub_memcpy (emptr, hval, hash->mdlen); + + ret = gcry_mpi_scan (hmpi, GCRYMPI_FMT_USG, em, emlen, 0); + grub_free (em); + return ret; +} + +static grub_err_t +grub_verify_signature_real (char *buf, grub_size_t size, + grub_file_t f, grub_file_t sig, + struct grub_public_key *pkey) +{ + grub_size_t len; + grub_uint8_t v; + grub_uint8_t h; + grub_uint8_t t; + grub_uint8_t pk; + const gcry_md_spec_t *hash; + struct signature_v4_header v4; + grub_err_t err; + grub_size_t i; + gcry_mpi_t mpis[10]; + grub_uint8_t type = 0; + + err = read_packet_header (sig, &type, &len); + if (err) + return err; + + if (type != 0x2) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + + if (grub_file_read (sig, &v, sizeof (v)) != sizeof (v)) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + + if (v != 4) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + + if (grub_file_read (sig, &v4, sizeof (v4)) != sizeof (v4)) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + + h = v4.hash; + t = v4.type; + pk = v4.pkeyalgo; + + if (t != 0) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + + if (h >= ARRAY_SIZE (hashes) || hashes[h] == NULL) + return grub_error (GRUB_ERR_BAD_SIGNATURE, "unknown hash"); + + if (pk >= ARRAY_SIZE (pkalgos) || pkalgos[pk].name == NULL) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + + hash = grub_crypto_lookup_md_by_name (hashes[h]); + if (!hash) + return grub_error (GRUB_ERR_BAD_SIGNATURE, "hash `%s' not loaded", hashes[h]); + + grub_dprintf ("crypt", "alive\n"); + + { + void *context = NULL; + unsigned char *hval; + grub_ssize_t rem = grub_be_to_cpu16 (v4.hashed_sub); + grub_uint32_t headlen = grub_cpu_to_be32 (rem + 6); + grub_uint8_t s; + grub_uint16_t unhashed_sub; + grub_ssize_t r; + grub_uint8_t hash_start[2]; + gcry_mpi_t hmpi; + grub_uint64_t keyid = 0; + struct grub_public_subkey *sk; + grub_uint8_t *readbuf = NULL; + + context = grub_zalloc (hash->contextsize); + readbuf = grub_zalloc (READBUF_SIZE); + if (!context || !readbuf) + goto fail; + + hash->init (context); + if (buf) + hash->write (context, buf, size); + else + while (1) + { + r = grub_file_read (f, readbuf, READBUF_SIZE); + if (r < 0) + goto fail; + if (r == 0) + break; + hash->write (context, readbuf, r); + } + + hash->write (context, &v, sizeof (v)); + hash->write (context, &v4, sizeof (v4)); + while (rem) + { + r = grub_file_read (sig, readbuf, + rem < READBUF_SIZE ? rem : READBUF_SIZE); + if (r < 0) + goto fail; + if (r == 0) + break; + hash->write (context, readbuf, r); + rem -= r; + } + hash->write (context, &v, sizeof (v)); + s = 0xff; + hash->write (context, &s, sizeof (s)); + hash->write (context, &headlen, sizeof (headlen)); + r = grub_file_read (sig, &unhashed_sub, sizeof (unhashed_sub)); + if (r != sizeof (unhashed_sub)) + goto fail; + { + grub_uint8_t *ptr; + grub_uint32_t l; + rem = grub_be_to_cpu16 (unhashed_sub); + if (rem > READBUF_SIZE) + goto fail; + r = grub_file_read (sig, readbuf, rem); + if (r != rem) + goto fail; + for (ptr = readbuf; ptr < readbuf + rem; ptr += l) + { + if (*ptr < 192) + l = *ptr++; + else if (*ptr < 255) + { + if (ptr + 1 >= readbuf + rem) + break; + l = (((ptr[0] & ~192) << GRUB_CHAR_BIT) | ptr[1]) + 192; + ptr += 2; + } + else + { + if (ptr + 5 >= readbuf + rem) + break; + l = grub_be_to_cpu32 (grub_get_unaligned32 (ptr + 1)); + ptr += 5; + } + if (*ptr == 0x10 && l >= 8) + keyid = grub_get_unaligned64 (ptr + 1); + } + } + + hash->final (context); + + grub_dprintf ("crypt", "alive\n"); + + hval = hash->read (context); + + if (grub_file_read (sig, hash_start, sizeof (hash_start)) != sizeof (hash_start)) + goto fail; + if (grub_memcmp (hval, hash_start, sizeof (hash_start)) != 0) + goto fail; + + grub_dprintf ("crypt", "@ %x\n", (int)grub_file_tell (sig)); + + for (i = 0; i < pkalgos[pk].nmpisig; i++) + { + grub_uint16_t l; + grub_size_t lb; + grub_dprintf ("crypt", "alive\n"); + if (grub_file_read (sig, &l, sizeof (l)) != sizeof (l)) + goto fail; + grub_dprintf ("crypt", "alive\n"); + lb = (grub_be_to_cpu16 (l) + 7) / 8; + grub_dprintf ("crypt", "l = 0x%04x\n", grub_be_to_cpu16 (l)); + if (lb > READBUF_SIZE - sizeof (grub_uint16_t)) + goto fail; + grub_dprintf ("crypt", "alive\n"); + if (grub_file_read (sig, readbuf + sizeof (grub_uint16_t), lb) != (grub_ssize_t) lb) + goto fail; + grub_dprintf ("crypt", "alive\n"); + grub_memcpy (readbuf, &l, sizeof (l)); + grub_dprintf ("crypt", "alive\n"); + + if (gcry_mpi_scan (&mpis[i], GCRYMPI_FMT_PGP, + readbuf, lb + sizeof (grub_uint16_t), 0)) + goto fail; + grub_dprintf ("crypt", "alive\n"); + } + + if (pkey) + sk = grub_crypto_pk_locate_subkey (keyid, pkey); + else + sk = grub_crypto_pk_locate_subkey_in_trustdb (keyid); + if (!sk) + { + /* TRANSLATORS: %08x is 32-bit key id. */ + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("public key %08x not found"), + keyid); + goto fail; + } + + if (pkalgos[pk].pad (&hmpi, hval, hash, sk)) + goto fail; + if (!*pkalgos[pk].algo) + { + grub_dl_load (pkalgos[pk].module); + grub_errno = GRUB_ERR_NONE; + } + + if (!*pkalgos[pk].algo) + { + grub_error (GRUB_ERR_BAD_SIGNATURE, N_("module `%s' isn't loaded"), + pkalgos[pk].module); + goto fail; + } + if ((*pkalgos[pk].algo)->verify (0, hmpi, mpis, sk->mpis, 0, 0)) + goto fail; + + grub_free (context); + grub_free (readbuf); + + return GRUB_ERR_NONE; + + fail: + grub_free (context); + grub_free (readbuf); + if (!grub_errno) + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); + return grub_errno; + } +} + +grub_err_t +grub_verify_signature (grub_file_t f, grub_file_t sig, + struct grub_public_key *pkey) +{ + return grub_verify_signature_real (0, 0, f, sig, pkey); +} + +static grub_err_t +grub_cmd_trust (grub_extcmd_context_t ctxt, + int argc, char **args) +{ + grub_file_t pkf; + struct grub_public_key *pk = NULL; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + grub_file_filter_disable_compression (); + if (ctxt->state[OPTION_SKIP_SIG].set) + grub_file_filter_disable_pubkey (); + pkf = grub_file_open (args[0]); + if (!pkf) + return grub_errno; + pk = grub_load_public_key (pkf); + if (!pk) + { + grub_file_close (pkf); + return grub_errno; + } + grub_file_close (pkf); + + pk->next = grub_pk_trusted; + grub_pk_trusted = pk; + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_list (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + struct grub_public_key *pk = NULL; + struct grub_public_subkey *sk = NULL; + + for (pk = grub_pk_trusted; pk; pk = pk->next) + for (sk = pk->subkeys; sk; sk = sk->next) + { + unsigned i; + for (i = 0; i < 20; i += 2) + grub_printf ("%02x%02x ", ((grub_uint8_t *) sk->fingerprint)[i], + ((grub_uint8_t *) sk->fingerprint)[i + 1]); + grub_printf ("\n"); + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_distrust (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_uint32_t keyid, keyid_be; + struct grub_public_key **pkey; + struct grub_public_subkey *sk; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + keyid = grub_strtoull (args[0], 0, 16); + if (grub_errno) + return grub_errno; + keyid_be = grub_cpu_to_be32 (keyid); + + for (pkey = &grub_pk_trusted; *pkey; pkey = &((*pkey)->next)) + { + struct grub_public_key *next; + for (sk = (*pkey)->subkeys; sk; sk = sk->next) + if (grub_memcmp (sk->fingerprint + 4, &keyid_be, 4) == 0) + break; + if (!sk) + continue; + next = (*pkey)->next; + free_pk (*pkey); + *pkey = next; + return GRUB_ERR_NONE; + } + /* TRANSLATORS: %08x is 32-bit key id. */ + return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("public key %08x not found"), keyid); +} + +static grub_err_t +grub_cmd_verify_signature (grub_extcmd_context_t ctxt, + int argc, char **args) +{ + grub_file_t f = NULL, sig = NULL; + grub_err_t err = GRUB_ERR_NONE; + struct grub_public_key *pk = NULL; + + grub_dprintf ("crypt", "alive\n"); + + if (argc < 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + grub_dprintf ("crypt", "alive\n"); + + if (argc > 2) + { + grub_file_t pkf; + grub_file_filter_disable_compression (); + if (ctxt->state[OPTION_SKIP_SIG].set) + grub_file_filter_disable_pubkey (); + pkf = grub_file_open (args[2]); + if (!pkf) + return grub_errno; + pk = grub_load_public_key (pkf); + if (!pk) + { + grub_file_close (pkf); + return grub_errno; + } + grub_file_close (pkf); + } + + grub_file_filter_disable_all (); + f = grub_file_open (args[0]); + if (!f) + { + err = grub_errno; + goto fail; + } + + grub_file_filter_disable_all (); + sig = grub_file_open (args[1]); + if (!sig) + { + err = grub_errno; + goto fail; + } + + err = grub_verify_signature (f, sig, pk); + fail: + if (sig) + grub_file_close (sig); + if (f) + grub_file_close (f); + if (pk) + free_pk (pk); + return err; +} + +static int sec = 0; + +static void +verified_free (grub_verified_t verified) +{ + if (verified) + { + grub_free (verified->buf); + grub_free (verified); + } +} + +static grub_ssize_t +verified_read (struct grub_file *file, char *buf, grub_size_t len) +{ + grub_verified_t verified = file->data; + + grub_memcpy (buf, (char *) verified->buf + file->offset, len); + return len; +} + +static grub_err_t +verified_close (struct grub_file *file) +{ + grub_verified_t verified = file->data; + + grub_file_close (verified->file); + verified_free (verified); + file->data = 0; + + /* device and name are freed by parent */ + file->device = 0; + file->name = 0; + + return grub_errno; +} + +struct grub_fs verified_fs = +{ + .name = "verified_read", + .read = verified_read, + .close = verified_close +}; + +static grub_file_t +grub_pubkey_open (grub_file_t io, const char *filename) +{ + grub_file_t sig; + char *fsuf, *ptr; + grub_err_t err; + grub_file_filter_t curfilt[GRUB_FILE_FILTER_MAX]; + grub_file_t ret; + grub_verified_t verified; + + if (!sec) + return io; + if (io->device->disk && + (io->device->disk->dev->id == GRUB_DISK_DEVICE_MEMDISK_ID + || io->device->disk->dev->id == GRUB_DISK_DEVICE_PROCFS_ID)) + return io; + fsuf = grub_malloc (grub_strlen (filename) + sizeof (".sig")); + if (!fsuf) + return NULL; + ptr = grub_stpcpy (fsuf, filename); + grub_memcpy (ptr, ".sig", sizeof (".sig")); + + grub_memcpy (curfilt, grub_file_filters_enabled, + sizeof (curfilt)); + grub_file_filter_disable_all (); + sig = grub_file_open (fsuf); + grub_memcpy (grub_file_filters_enabled, curfilt, + sizeof (curfilt)); + grub_free (fsuf); + if (!sig) + return NULL; + + ret = grub_malloc (sizeof (*ret)); + if (!ret) + { + grub_file_close (sig); + return NULL; + } + *ret = *io; + + ret->fs = &verified_fs; + ret->not_easily_seekable = 0; + if (ret->size >> (sizeof (grub_size_t) * GRUB_CHAR_BIT - 1)) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "big file signature isn't implemented yet"); + grub_file_close (sig); + grub_free (ret); + return NULL; + } + verified = grub_malloc (sizeof (*verified)); + if (!verified) + { + grub_file_close (sig); + grub_free (ret); + return NULL; + } + verified->buf = grub_malloc (ret->size); + if (!verified->buf) + { + grub_file_close (sig); + grub_free (verified); + grub_free (ret); + return NULL; + } + if (grub_file_read (io, verified->buf, ret->size) != (grub_ssize_t) ret->size) + { + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), + filename); + grub_file_close (sig); + verified_free (verified); + grub_free (ret); + return NULL; + } + + err = grub_verify_signature_real (verified->buf, ret->size, 0, sig, NULL); + grub_file_close (sig); + if (err) + { + verified_free (verified); + grub_free (ret); + return NULL; + } + verified->file = io; + ret->data = verified; + return ret; +} + +static char * +grub_env_write_sec (struct grub_env_var *var __attribute__ ((unused)), + const char *val) +{ + sec = (*val == '1') || (*val == 'e'); + return grub_strdup (sec ? "enforce" : "no"); +} + +static grub_ssize_t +pseudo_read (struct grub_file *file, char *buf, grub_size_t len) +{ + grub_memcpy (buf, (grub_uint8_t *) file->data + file->offset, len); + return len; +} + + +/* Filesystem descriptor. */ +struct grub_fs pseudo_fs = + { + .name = "pseudo", + .read = pseudo_read +}; + + +static grub_extcmd_t cmd, cmd_trust; +static grub_command_t cmd_distrust, cmd_list; + +GRUB_MOD_INIT(verify) +{ + const char *val; + struct grub_module_header *header; + + val = grub_env_get ("check_signatures"); + if (val && (val[0] == '1' || val[0] == 'e')) + sec = 1; + else + sec = 0; + + grub_file_filter_register (GRUB_FILE_FILTER_PUBKEY, grub_pubkey_open); + + grub_register_variable_hook ("check_signatures", 0, grub_env_write_sec); + grub_env_export ("check_signatures"); + + grub_pk_trusted = 0; + FOR_MODULES (header) + { + struct grub_file pseudo_file; + struct grub_public_key *pk = NULL; + + grub_memset (&pseudo_file, 0, sizeof (pseudo_file)); + + /* Not an ELF module, skip. */ + if (header->type != OBJ_TYPE_PUBKEY) + continue; + + pseudo_file.fs = &pseudo_fs; + pseudo_file.size = (header->size - sizeof (struct grub_module_header)); + pseudo_file.data = (char *) header + sizeof (struct grub_module_header); + + pk = grub_load_public_key (&pseudo_file); + if (!pk) + grub_fatal ("error loading initial key: %s\n", grub_errmsg); + + pk->next = grub_pk_trusted; + grub_pk_trusted = pk; + } + + if (!val) + grub_env_set ("check_signatures", grub_pk_trusted ? "enforce" : "no"); + + cmd = grub_register_extcmd ("verify_detached", grub_cmd_verify_signature, 0, + N_("[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]"), + N_("Verify detached signature."), + options); + cmd_trust = grub_register_extcmd ("trust", grub_cmd_trust, 0, + N_("[-s|--skip-sig] PUBKEY_FILE"), + N_("Add PUBKEY_FILE to trusted keys."), + options); + cmd_list = grub_register_command ("list_trusted", grub_cmd_list, + 0, + N_("Show the list of trusted keys.")); + cmd_distrust = grub_register_command ("distrust", grub_cmd_distrust, + N_("PUBKEY_ID"), + N_("Remove PUBKEY_ID from trusted keys.")); +} + +GRUB_MOD_FINI(verify) +{ + grub_file_filter_unregister (GRUB_FILE_FILTER_PUBKEY); + grub_unregister_extcmd (cmd); + grub_unregister_extcmd (cmd_trust); + grub_unregister_command (cmd_list); + grub_unregister_command (cmd_distrust); +} diff --git a/grub-core/commands/videoinfo.c b/grub-core/commands/videoinfo.c new file mode 100644 index 000000000..4be8107d5 --- /dev/null +++ b/grub-core/commands/videoinfo.c @@ -0,0 +1,262 @@ +/* videoinfo.c - command to list video modes. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct hook_ctx +{ + unsigned height, width, depth; + struct grub_video_mode_info *current_mode; +}; + +static int +hook (const struct grub_video_mode_info *info, void *hook_arg) +{ + struct hook_ctx *ctx = hook_arg; + + if (ctx->height && ctx->width && (info->width != ctx->width || info->height != ctx->height)) + return 0; + + if (ctx->depth && info->bpp != ctx->depth) + return 0; + + if (info->mode_number == GRUB_VIDEO_MODE_NUMBER_INVALID) + grub_printf (" "); + else + { + if (ctx->current_mode && info->mode_number == ctx->current_mode->mode_number) + grub_printf ("*"); + else + grub_printf (" "); + grub_printf (" 0x%03x ", info->mode_number); + } + grub_printf ("%4d x %4d x %2d (%4d) ", info->width, info->height, info->bpp, + info->pitch); + + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_PURE_TEXT) + grub_xputs (_("Text-only ")); + /* Show mask and position details for direct color modes. */ + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_RGB) + /* TRANSLATORS: "Direct color" is a mode when the color components + are written dirrectly into memory. */ + grub_printf_ (N_("Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d"), + info->red_mask_size, + info->green_mask_size, + info->blue_mask_size, + info->reserved_mask_size, + info->red_field_pos, + info->green_field_pos, + info->blue_field_pos, + info->reserved_field_pos); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_INDEX_COLOR) + /* TRANSLATORS: In "paletted color" mode you write the index of the color + in the palette. Synonyms include "packed pixel". */ + grub_xputs (_("Paletted ")); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_YUV) + grub_xputs (_("YUV ")); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_PLANAR) + /* TRANSLATORS: "Planar" is the video memory where you have to write + in several different banks "plans" to control the different color + components of the same pixel. */ + grub_xputs (_("Planar ")); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_HERCULES) + grub_xputs (_("Hercules ")); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_CGA) + grub_xputs (_("CGA ")); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_NONCHAIN4) + /* TRANSLATORS: Non-chain 4 is a 256-color planar + (unchained) video memory mode. */ + grub_xputs (_("Non-chain 4 ")); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP) + grub_xputs (_("Monochrome ")); + if (info->mode_type & GRUB_VIDEO_MODE_TYPE_UNKNOWN) + grub_xputs (_("Unknown video mode ")); + + grub_xputs ("\n"); + + return 0; +} + +static void +print_edid (struct grub_video_edid_info *edid_info) +{ + unsigned int edid_width, edid_height; + + if (grub_video_edid_checksum (edid_info)) + { + grub_puts_ (N_(" EDID checksum invalid")); + grub_errno = GRUB_ERR_NONE; + return; + } + + grub_printf_ (N_(" EDID version: %u.%u\n"), + edid_info->version, edid_info->revision); + if (grub_video_edid_preferred_mode (edid_info, &edid_width, &edid_height) + == GRUB_ERR_NONE) + grub_printf_ (N_(" Preferred mode: %ux%u\n"), edid_width, edid_height); + else + { + grub_printf_ (N_(" No preferred mode available\n")); + grub_errno = GRUB_ERR_NONE; + } +} + +static grub_err_t +grub_cmd_videoinfo (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_video_adapter_t adapter; + grub_video_driver_id_t id; + struct hook_ctx ctx; + + ctx.height = ctx.width = ctx.depth = 0; + if (argc) + { + char *ptr; + ptr = args[0]; + ctx.width = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + return grub_errno; + if (*ptr != 'x') + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("invalid video mode specification `%s'"), + args[0]); + ptr++; + ctx.height = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + return grub_errno; + if (*ptr == 'x') + { + ptr++; + ctx.depth = grub_strtoul (ptr, &ptr, 0); + if (grub_errno) + return grub_errno; + } + } + +#ifdef GRUB_MACHINE_PCBIOS + if (grub_strcmp (cmd->name, "vbeinfo") == 0) + grub_dl_load ("vbe"); +#endif + + id = grub_video_get_driver_id (); + + grub_puts_ (N_("List of supported video modes:")); + grub_puts_ (N_("Legend: mask/position=red/green/blue/reserved")); + + FOR_VIDEO_ADAPTERS (adapter) + { + struct grub_video_mode_info info; + struct grub_video_edid_info edid_info; + + grub_printf_ (N_("Adapter `%s':\n"), adapter->name); + + if (!adapter->iterate) + { + grub_puts_ (N_(" No info available")); + continue; + } + + ctx.current_mode = NULL; + + if (adapter->id == id) + { + if (grub_video_get_info (&info) == GRUB_ERR_NONE) + ctx.current_mode = &info; + else + /* Don't worry about errors. */ + grub_errno = GRUB_ERR_NONE; + } + else + { + if (adapter->init ()) + { + grub_puts_ (N_(" Failed to initialize video adapter")); + grub_errno = GRUB_ERR_NONE; + continue; + } + } + + if (adapter->print_adapter_specific_info) + adapter->print_adapter_specific_info (); + + adapter->iterate (hook, &ctx); + + if (adapter->get_edid && adapter->get_edid (&edid_info) == GRUB_ERR_NONE) + print_edid (&edid_info); + else + grub_errno = GRUB_ERR_NONE; + + ctx.current_mode = NULL; + + if (adapter->id != id) + { + if (adapter->fini ()) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + } + } + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; +#ifdef GRUB_MACHINE_PCBIOS +static grub_command_t cmd_vbe; +#endif + +GRUB_MOD_INIT(videoinfo) +{ + cmd = grub_register_command ("videoinfo", grub_cmd_videoinfo, + /* TRANSLATORS: "x" has to be entered in, + like an identifier, so please don't + use better Unicode codepoints. */ + N_("[WxH[xD]]"), + N_("List available video modes. If " + "resolution is given show only modes" + " matching it.")); +#ifdef GRUB_MACHINE_PCBIOS + cmd_vbe = grub_register_command ("vbeinfo", grub_cmd_videoinfo, + /* TRANSLATORS: "x" has to be entered in, + like an identifier, so please don't + use better Unicode codepoints. */ + N_("[WxH[xD]]"), + N_("List available video modes. If " + "resolution is given show only modes" + " matching it.")); +#endif +} + +GRUB_MOD_FINI(videoinfo) +{ + grub_unregister_command (cmd); +#ifdef GRUB_MACHINE_PCBIOS + grub_unregister_command (cmd_vbe); +#endif +} + diff --git a/grub-core/commands/videotest.c b/grub-core/commands/videotest.c new file mode 100644 index 000000000..b6c181b52 --- /dev/null +++ b/grub-core/commands/videotest.c @@ -0,0 +1,241 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_err_t err; + grub_video_color_t color; + unsigned int x; + unsigned int y; + unsigned int width; + unsigned int height; + int i; + struct grub_video_render_target *text_layer; + grub_video_color_t palette[16]; + const char *mode = NULL; + +#ifdef GRUB_MACHINE_PCBIOS + if (grub_strcmp (cmd->name, "vbetest") == 0) + grub_dl_load ("vbe"); +#endif + mode = grub_env_get ("gfxmode"); + if (argc) + mode = args[0]; + if (!mode) + mode = "auto"; + + err = grub_video_set_mode (mode, GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0); + if (err) + return err; + + grub_video_get_viewport (&x, &y, &width, &height); + + { + const char *str; + int texty; + grub_font_t sansbig; + grub_font_t sans; + grub_font_t sanssmall; + grub_font_t fixed; + struct grub_font_glyph *glyph; + + if (grub_video_create_render_target (&text_layer, width, height, + GRUB_VIDEO_MODE_TYPE_RGB + | GRUB_VIDEO_MODE_TYPE_ALPHA) + || !text_layer) + goto fail; + + grub_video_set_active_render_target (text_layer); + + color = grub_video_map_rgb (0, 255, 255); + sansbig = grub_font_get ("Unknown Regular 16"); + sans = grub_font_get ("Unknown Regular 16"); + sanssmall = grub_font_get ("Unknown Regular 16"); + fixed = grub_font_get ("Fixed 20"); + if (! sansbig || ! sans || ! sanssmall || ! fixed) + return grub_error (GRUB_ERR_BAD_FONT, "no font loaded"); + + glyph = grub_font_get_glyph (fixed, '*'); + grub_font_draw_glyph (glyph, color, 200 ,0); + + color = grub_video_map_rgb (255, 255, 255); + + texty = 32; + grub_font_draw_string ("The quick brown fox jumped over the lazy dog.", + sans, color, 16, texty); + texty += grub_font_get_descent (sans) + grub_font_get_leading (sans); + + texty += grub_font_get_ascent (fixed); + grub_font_draw_string ("The quick brown fox jumped over the lazy dog.", + fixed, color, 16, texty); + texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed); + + /* To convert Unicode characters into UTF-8 for this test, the following + command is useful: + echo -ne '\x00\x00\x26\x3A' | iconv -f UTF-32BE -t UTF-8 | od -t x1 + This converts the Unicode character U+263A to UTF-8. */ + + /* Characters used: + Code point Description UTF-8 encoding + ----------- ------------------------------ -------------- + U+263A unfilled smiley face E2 98 BA + U+00A1 inverted exclamation point C2 A1 + U+00A3 British pound currency symbol C2 A3 + U+03C4 Greek tau CF 84 + U+00E4 lowercase letter a with umlaut C3 A4 + U+2124 set 'Z' symbol (integers) E2 84 A4 + U+2286 subset symbol E2 8A 86 + U+211D set 'R' symbol (real numbers) E2 84 9D */ + + str = + "Unicode test: happy\xE2\x98\xBA \xC2\xA3 5.00" + " \xC2\xA1\xCF\x84\xC3\xA4u! " + " \xE2\x84\xA4\xE2\x8A\x86\xE2\x84\x9D"; + color = grub_video_map_rgb (128, 128, 255); + + /* All characters in the string exist in the 'Fixed 20' (10x20) font. */ + texty += grub_font_get_ascent(fixed); + grub_font_draw_string (str, fixed, color, 16, texty); + texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed); + + texty += grub_font_get_ascent(sansbig); + grub_font_draw_string (str, sansbig, color, 16, texty); + texty += grub_font_get_descent (sansbig) + grub_font_get_leading (sansbig); + + texty += grub_font_get_ascent(sans); + grub_font_draw_string (str, sans, color, 16, texty); + texty += grub_font_get_descent (sans) + grub_font_get_leading (sans); + + texty += grub_font_get_ascent(sanssmall); + grub_font_draw_string (str, sanssmall, color, 16, texty); + texty += (grub_font_get_descent (sanssmall) + + grub_font_get_leading (sanssmall)); + + glyph = grub_font_get_glyph (fixed, '*'); + + for (i = 0; i < 16; i++) + { + color = grub_video_map_color (i); + palette[i] = color; + grub_font_draw_glyph (glyph, color, 16 + i * 16, 220); + } + } + + grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY); + + for (i = 0; i < 5; i++) + { + + if (i == 0 || i == 1) + { + color = grub_video_map_rgb (0, 0, 0); + grub_video_fill_rect (color, 0, 0, width, height); + + color = grub_video_map_rgb (255, 0, 0); + grub_video_fill_rect (color, 0, 0, 100, 100); + + color = grub_video_map_rgb (0, 255, 0); + grub_video_fill_rect (color, 100, 0, 100, 100); + + color = grub_video_map_rgb (0, 0, 255); + grub_video_fill_rect (color, 200, 0, 100, 100); + + color = grub_video_map_rgb (0, 255, 255); + grub_video_fill_rect (color, 0, 100, 100, 100); + + color = grub_video_map_rgb (255, 0, 255); + grub_video_fill_rect (color, 100, 100, 100, 100); + + color = grub_video_map_rgb (255, 255, 0); + grub_video_fill_rect (color, 200, 100, 100, 100); + + grub_video_set_viewport (x + 150, y + 150, + width - 150 * 2, height - 150 * 2); + color = grub_video_map_rgb (77, 33, 77); + grub_video_fill_rect (color, 0, 0, width, height); + } + + color = grub_video_map_rgb (i, 33, 77); + grub_video_fill_rect (color, 0, 0, width, height); + grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_BLEND, 0, 0, + 0, 0, width, height); + grub_video_swap_buffers (); + } + + grub_getkey (); + + grub_video_delete_render_target (text_layer); + + grub_video_restore (); + + for (i = 0; i < 16; i++) + grub_printf("color %d: %08x\n", i, palette[i]); + + grub_errno = GRUB_ERR_NONE; + return grub_errno; + + fail: + grub_video_delete_render_target (text_layer); + grub_video_restore (); + return grub_errno; +} + +static grub_command_t cmd; +#ifdef GRUB_MACHINE_PCBIOS +static grub_command_t cmd_vbe; +#endif + +GRUB_MOD_INIT(videotest) +{ + cmd = grub_register_command ("videotest", grub_cmd_videotest, + /* TRANSLATORS: "x" has to be entered in, + like an identifier, so please don't + use better Unicode codepoints. */ + N_("[WxH]"), + /* TRANSLATORS: Here, on the other hand, it's + nicer to use unicode cross instead of x. */ + N_("Test video subsystem in mode WxH.")); +#ifdef GRUB_MACHINE_PCBIOS + cmd_vbe = grub_register_command ("vbetest", grub_cmd_videotest, + 0, N_("Test video subsystem.")); +#endif +} + +GRUB_MOD_FINI(videotest) +{ + grub_unregister_command (cmd); +#ifdef GRUB_MACHINE_PCBIOS + grub_unregister_command (cmd_vbe); +#endif +} diff --git a/grub-core/commands/wildcard.c b/grub-core/commands/wildcard.c new file mode 100644 index 000000000..9b4e72766 --- /dev/null +++ b/grub-core/commands/wildcard.c @@ -0,0 +1,626 @@ +/* wildcard.c - Wildcard character expansion for GRUB script. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#include + +static inline int isregexop (char ch); +static char ** merge (char **lhs, char **rhs); +static char *make_dir (const char *prefix, const char *start, const char *end); +static int make_regex (const char *regex_start, const char *regex_end, + regex_t *regexp); +static void split_path (const char *path, const char **suffix_end, const char **regex_end); +static char ** match_devices (const regex_t *regexp, int noparts); +static char ** match_files (const char *prefix, const char *suffix_start, + const char *suffix_end, const regex_t *regexp); + +static grub_err_t wildcard_expand (const char *s, char ***strs); + +struct grub_script_wildcard_translator grub_filename_translator = { + .expand = wildcard_expand, +}; + +static char ** +merge (char **dest, char **ps) +{ + int i; + int j; + char **p; + + if (! dest) + return ps; + + if (! ps) + return dest; + + for (i = 0; dest[i]; i++) + ; + for (j = 0; ps[j]; j++) + ; + + p = grub_realloc (dest, sizeof (char*) * (i + j + 1)); + if (! p) + { + grub_free (dest); + grub_free (ps); + return 0; + } + + dest = p; + for (j = 0; ps[j]; j++) + dest[i++] = ps[j]; + dest[i] = 0; + + grub_free (ps); + return dest; +} + +static inline int +isregexop (char ch) +{ + return grub_strchr ("*.\\|+{}[]?", ch) ? 1 : 0; +} + +static char * +make_dir (const char *prefix, const char *start, const char *end) +{ + char ch; + unsigned i; + unsigned n; + char *result; + + i = grub_strlen (prefix); + n = i + end - start; + + result = grub_malloc (n + 1); + if (! result) + return 0; + + grub_strcpy (result, prefix); + while (start < end && (ch = *start++)) + if (ch == '\\' && isregexop (*start)) + result[i++] = *start++; + else + result[i++] = ch; + + result[i] = '\0'; + return result; +} + +static int +make_regex (const char *start, const char *end, regex_t *regexp) +{ + char ch; + int i = 0; + unsigned len = end - start; + char *buffer = grub_malloc (len * 2 + 2 + 1); /* worst case size. */ + + if (! buffer) + return 1; + + buffer[i++] = '^'; + while (start < end) + { + /* XXX Only * and ? expansion for now. */ + switch ((ch = *start++)) + { + case '\\': + buffer[i++] = ch; + if (*start != '\0') + buffer[i++] = *start++; + break; + + case '.': + case '(': + case ')': + case '@': + case '+': + case '|': + case '{': + case '}': + case '[': + case ']': + buffer[i++] = '\\'; + buffer[i++] = ch; + break; + + case '*': + buffer[i++] = '.'; + buffer[i++] = '*'; + break; + + case '?': + buffer[i++] = '.'; + break; + + default: + buffer[i++] = ch; + } + } + buffer[i++] = '$'; + buffer[i] = '\0'; + grub_dprintf ("expand", "Regexp is %s\n", buffer); + + if (regcomp (regexp, buffer, RE_SYNTAX_GNU_AWK)) + { + grub_free (buffer); + return 1; + } + + grub_free (buffer); + return 0; +} + +/* Split `str' into two parts: (1) dirname that is regexop free (2) + dirname that has a regexop. */ +static void +split_path (const char *str, const char **noregexop, const char **regexop) +{ + char ch = 0; + int regex = 0; + + const char *end; + const char *split; /* points till the end of dirnaname that doesn't + need expansion. */ + + split = end = str; + while ((ch = *end)) + { + if (ch == '\\' && end[1]) + end++; + + else if (ch == '*' || ch == '?') + regex = 1; + + else if (ch == '/' && ! regex) + split = end + 1; /* forward to next regexop-free dirname */ + + else if (ch == '/' && regex) + break; /* stop at the first dirname with a regexop */ + + end++; + } + + *regexop = end; + if (! regex) + *noregexop = end; + else + *noregexop = split; +} + +/* Context for match_devices. */ +struct match_devices_ctx +{ + const regex_t *regexp; + int noparts; + int ndev; + char **devs; +}; + +/* Helper for match_devices. */ +static int +match_devices_iter (const char *name, void *data) +{ + struct match_devices_ctx *ctx = data; + char **t; + char *buffer; + + /* skip partitions if asked to. */ + if (ctx->noparts && grub_strchr (name, ',')) + return 0; + + buffer = grub_xasprintf ("(%s)", name); + if (! buffer) + return 1; + + grub_dprintf ("expand", "matching: %s\n", buffer); + if (regexec (ctx->regexp, buffer, 0, 0, 0)) + { + grub_dprintf ("expand", "not matched\n"); + grub_free (buffer); + return 0; + } + + t = grub_realloc (ctx->devs, sizeof (char*) * (ctx->ndev + 2)); + if (! t) + { + grub_free (buffer); + return 1; + } + + ctx->devs = t; + ctx->devs[ctx->ndev++] = buffer; + ctx->devs[ctx->ndev] = 0; + return 0; +} + +static char ** +match_devices (const regex_t *regexp, int noparts) +{ + struct match_devices_ctx ctx = { + .regexp = regexp, + .noparts = noparts, + .ndev = 0, + .devs = 0 + }; + int i; + + if (grub_device_iterate (match_devices_iter, &ctx)) + goto fail; + + return ctx.devs; + + fail: + + for (i = 0; ctx.devs && ctx.devs[i]; i++) + grub_free (ctx.devs[i]); + + grub_free (ctx.devs); + + return 0; +} + +/* Context for match_files. */ +struct match_files_ctx +{ + const regex_t *regexp; + char **files; + unsigned nfile; + char *dir; +}; + +/* Helper for match_files. */ +static int +match_files_iter (const char *name, + const struct grub_dirhook_info *info __attribute__((unused)), + void *data) +{ + struct match_files_ctx *ctx = data; + char **t; + char *buffer; + + /* skip . and .. names */ + if (grub_strcmp(".", name) == 0 || grub_strcmp("..", name) == 0) + return 0; + + grub_dprintf ("expand", "matching: %s in %s\n", name, ctx->dir); + if (regexec (ctx->regexp, name, 0, 0, 0)) + return 0; + + grub_dprintf ("expand", "matched\n"); + + buffer = grub_xasprintf ("%s%s", ctx->dir, name); + if (! buffer) + return 1; + + t = grub_realloc (ctx->files, sizeof (char*) * (ctx->nfile + 2)); + if (! t) + { + grub_free (buffer); + return 1; + } + + ctx->files = t; + ctx->files[ctx->nfile++] = buffer; + ctx->files[ctx->nfile] = 0; + return 0; +} + +static char ** +match_files (const char *prefix, const char *suffix, const char *end, + const regex_t *regexp) +{ + struct match_files_ctx ctx = { + .regexp = regexp, + .nfile = 0, + .files = 0 + }; + int i; + const char *path; + char *device_name; + grub_fs_t fs; + grub_device_t dev; + + dev = 0; + device_name = 0; + grub_error_push (); + + ctx.dir = make_dir (prefix, suffix, end); + if (! ctx.dir) + goto fail; + + device_name = grub_file_get_device_name (ctx.dir); + dev = grub_device_open (device_name); + if (! dev) + goto fail; + + fs = grub_fs_probe (dev); + if (! fs) + goto fail; + + if (ctx.dir[0] == '(') + { + path = grub_strchr (ctx.dir, ')'); + if (!path) + goto fail; + path++; + } + else + path = ctx.dir; + + if (fs->dir (dev, path, match_files_iter, &ctx)) + goto fail; + + grub_free (ctx.dir); + grub_device_close (dev); + grub_free (device_name); + grub_error_pop (); + return ctx.files; + + fail: + + grub_free (ctx.dir); + + for (i = 0; ctx.files && ctx.files[i]; i++) + grub_free (ctx.files[i]); + + grub_free (ctx.files); + + if (dev) + grub_device_close (dev); + + grub_free (device_name); + + grub_error_pop (); + return 0; +} + +/* Context for check_file. */ +struct check_file_ctx +{ + const char *basename; + int found; +}; + +/* Helper for check_file. */ +static int +check_file_iter (const char *name, const struct grub_dirhook_info *info, + void *data) +{ + struct check_file_ctx *ctx = data; + + if (ctx->basename[0] == 0 + || (info->case_insensitive ? grub_strcasecmp (name, ctx->basename) == 0 + : grub_strcmp (name, ctx->basename) == 0)) + { + ctx->found = 1; + return 1; + } + + return 0; +} + +static int +check_file (const char *dir, const char *basename) +{ + struct check_file_ctx ctx = { + .basename = basename, + .found = 0 + }; + grub_fs_t fs; + grub_device_t dev; + const char *device_name, *path; + + device_name = grub_file_get_device_name (dir); + dev = grub_device_open (device_name); + if (! dev) + goto fail; + + fs = grub_fs_probe (dev); + if (! fs) + goto fail; + + if (dir[0] == '(') + { + path = grub_strchr (dir, ')'); + if (!path) + goto fail; + path++; + } + else + path = dir; + + fs->dir (dev, path[0] ? path : "/", check_file_iter, &ctx); + if (grub_errno == 0 && basename[0] == 0) + ctx.found = 1; + + fail: + grub_errno = 0; + + return ctx.found; +} + +static void +unescape (char *out, const char *in, const char *end) +{ + char *optr; + const char *iptr; + + for (optr = out, iptr = in; iptr < end;) + { + if (*iptr == '\\' && iptr + 1 < end) + { + *optr++ = iptr[1]; + iptr += 2; + continue; + } + if (*iptr == '\\') + break; + *optr++ = *iptr++; + } + *optr = 0; +} + +static grub_err_t +wildcard_expand (const char *s, char ***strs) +{ + const char *start; + const char *regexop; + const char *noregexop; + char **paths = 0; + int had_regexp = 0; + + unsigned i; + regex_t regexp; + + *strs = 0; + if (s[0] != '/' && s[0] != '(' && s[0] != '*') + return 0; + + start = s; + while (*start) + { + split_path (start, &noregexop, ®exop); + + if (noregexop == regexop) + { + grub_dprintf ("expand", "no expansion needed\n"); + if (paths == 0) + { + paths = grub_malloc (sizeof (char *) * 2); + if (!paths) + goto fail; + paths[0] = grub_malloc (regexop - start + 1); + if (!paths[0]) + goto fail; + unescape (paths[0], start, regexop); + paths[1] = 0; + } + else + { + int j = 0; + for (i = 0; paths[i]; i++) + { + char *o, *oend; + char *n; + char *p; + o = paths[i]; + oend = o + grub_strlen (o); + n = grub_malloc ((oend - o) + (regexop - start) + 1); + if (!n) + goto fail; + grub_memcpy (n, o, oend - o); + + unescape (n + (oend - o), start, regexop); + if (had_regexp) + p = grub_strrchr (n, '/'); + else + p = 0; + if (!p) + { + grub_free (o); + paths[j++] = n; + continue; + } + *p = 0; + if (!check_file (n, p + 1)) + { + grub_dprintf ("expand", "file <%s> in <%s> not found\n", + p + 1, n); + grub_free (o); + grub_free (n); + continue; + } + *p = '/'; + grub_free (o); + paths[j++] = n; + } + if (j == 0) + { + grub_free (paths); + paths = 0; + goto done; + } + paths[j] = 0; + } + grub_dprintf ("expand", "paths[0] = `%s'\n", paths[0]); + start = regexop; + continue; + } + + if (make_regex (noregexop, regexop, ®exp)) + goto fail; + + had_regexp = 1; + + if (paths == 0) + { + if (start == noregexop) /* device part has regexop */ + paths = match_devices (®exp, *start != '('); + + else /* device part explicit wo regexop */ + paths = match_files ("", start, noregexop, ®exp); + } + else + { + char **r = 0; + + for (i = 0; paths[i]; i++) + { + char **p; + + p = match_files (paths[i], start, noregexop, ®exp); + grub_free (paths[i]); + if (! p) + continue; + + r = merge (r, p); + if (! r) + goto fail; + } + grub_free (paths); + paths = r; + } + + regfree (®exp); + if (! paths) + goto done; + + start = regexop; + } + + done: + + *strs = paths; + return 0; + + fail: + + for (i = 0; paths && paths[i]; i++) + grub_free (paths[i]); + grub_free (paths); + regfree (®exp); + return grub_errno; +} diff --git a/grub-core/commands/xen/lsxen.c b/grub-core/commands/xen/lsxen.c new file mode 100644 index 000000000..97713102c --- /dev/null +++ b/grub-core/commands/xen/lsxen.c @@ -0,0 +1,90 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static int +hook (const char *dir, void *hook_data __attribute__ ((unused))) +{ + grub_printf ("%s\n", dir); + return 0; +} + +static grub_err_t +grub_cmd_lsxen (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + char *dir; + grub_err_t err; + char *buf; + + if (argc >= 1) + return grub_xenstore_dir (args[0], hook, NULL); + + buf = grub_xenstore_get_file ("domid", NULL); + if (!buf) + return grub_errno; + dir = grub_xasprintf ("/local/domain/%s", buf); + grub_free (buf); + err = grub_xenstore_dir (dir, hook, NULL); + grub_free (dir); + return err; +} + +static grub_err_t +grub_cmd_catxen (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + const char *dir = "domid"; + char *buf; + + if (argc >= 1) + dir = args[0]; + + buf = grub_xenstore_get_file (dir, NULL); + if (!buf) + return grub_errno; + grub_xputs (buf); + grub_xputs ("\n"); + grub_free (buf); + return GRUB_ERR_NONE; + +} + +static grub_command_t cmd_ls, cmd_cat; + +GRUB_MOD_INIT (lsxen) +{ + cmd_ls = grub_register_command ("xen_ls", grub_cmd_lsxen, N_("[DIR]"), + N_("List Xen storage.")); + cmd_cat = grub_register_command ("xen_cat", grub_cmd_catxen, N_("[DIR]"), + N_("List Xen storage.")); +} + +GRUB_MOD_FINI (lsxen) +{ + grub_unregister_command (cmd_ls); + grub_unregister_command (cmd_cat); +} diff --git a/grub-core/commands/xnu_uuid.c b/grub-core/commands/xnu_uuid.c new file mode 100644 index 000000000..ae4b3a415 --- /dev/null +++ b/grub-core/commands/xnu_uuid.c @@ -0,0 +1,119 @@ +/* xnu_uuid.c - transform 64-bit serial number + to 128-bit uuid suitable for xnu. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1995,1996,1998,1999,2001,2002, + * 2003, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* This prefix is used by xnu and boot-132 to hash + together with volume serial. */ +static grub_uint8_t hash_prefix[16] + = {0xB3, 0xE2, 0x0F, 0x39, 0xF2, 0x92, 0x11, 0xD6, + 0x97, 0xA4, 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC}; + +static grub_err_t +grub_cmd_xnu_uuid (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_uint64_t serial; + grub_uint8_t *xnu_uuid; + char uuid_string[sizeof ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]; + char *ptr; + void *ctx; + int low = 0; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "UUID required"); + + if (argc > 1 && grub_strcmp (args[0], "-l") == 0) + { + low = 1; + argc--; + args++; + } + + serial = grub_cpu_to_be64 (grub_strtoull (args[0], 0, 16)); + + ctx = grub_zalloc (GRUB_MD_MD5->contextsize); + if (!ctx) + return grub_errno; + GRUB_MD_MD5->init (ctx); + GRUB_MD_MD5->write (ctx, hash_prefix, sizeof (hash_prefix)); + GRUB_MD_MD5->write (ctx, &serial, sizeof (serial)); + GRUB_MD_MD5->final (ctx); + xnu_uuid = GRUB_MD_MD5->read (ctx); + + grub_snprintf (uuid_string, sizeof (uuid_string), + "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", + (unsigned int) xnu_uuid[0], (unsigned int) xnu_uuid[1], + (unsigned int) xnu_uuid[2], (unsigned int) xnu_uuid[3], + (unsigned int) xnu_uuid[4], (unsigned int) xnu_uuid[5], + (unsigned int) ((xnu_uuid[6] & 0xf) | 0x30), + (unsigned int) xnu_uuid[7], + (unsigned int) ((xnu_uuid[8] & 0x3f) | 0x80), + (unsigned int) xnu_uuid[9], + (unsigned int) xnu_uuid[10], (unsigned int) xnu_uuid[11], + (unsigned int) xnu_uuid[12], (unsigned int) xnu_uuid[13], + (unsigned int) xnu_uuid[14], (unsigned int) xnu_uuid[15]); + if (!low) + for (ptr = uuid_string; *ptr; ptr++) + *ptr = grub_toupper (*ptr); + if (argc == 1) + grub_printf ("%s\n", uuid_string); + if (argc > 1) + grub_env_set (args[1], uuid_string); + + grub_free (ctx); + + return GRUB_ERR_NONE; +} + +static grub_command_t cmd; + + +GRUB_MOD_INIT (xnu_uuid) +{ + cmd = grub_register_command ("xnu_uuid", grub_cmd_xnu_uuid, + /* TRANSLATORS: GRUBUUID stands for "filesystem + UUID as used in GRUB". */ + N_("[-l] GRUBUUID [VARNAME]"), + N_("Transform 64-bit UUID to format " + "suitable for XNU. If -l is given keep " + "it lowercase as done by blkid.")); +} + +GRUB_MOD_FINI (xnu_uuid) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/disk/AFSplitter.c b/grub-core/disk/AFSplitter.c new file mode 100644 index 000000000..f5a8ddc61 --- /dev/null +++ b/grub-core/disk/AFSplitter.c @@ -0,0 +1,92 @@ +/* + * AFsplitter - Anti forensic information splitter + * Copyright 2004, Clemens Fruhwirth + * + * AFsplitter diffuses information over a large stripe of data, + * therefor supporting secure data destruction. + * + * This program is grub_free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the grub_free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the grub_free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include + +gcry_err_code_t AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, + grub_uint8_t * dst, grub_size_t blocksize, + grub_size_t blocknumbers); + +static void +diffuse (const gcry_md_spec_t * hash, grub_uint8_t * src, + grub_uint8_t * dst, grub_size_t size) +{ + grub_size_t i; + grub_uint32_t IV; /* host byte order independend hash IV */ + + grub_size_t fullblocks = size / hash->mdlen; + int padding = size % hash->mdlen; + grub_uint8_t final[GRUB_CRYPTO_MAX_MDLEN]; + grub_uint8_t temp[sizeof (IV) + GRUB_CRYPTO_MAX_MDLEN]; + + /* hash block the whole data set with different IVs to produce + * more than just a single data block + */ + for (i = 0; i < fullblocks; i++) + { + IV = grub_cpu_to_be32 (i); + grub_memcpy (temp, &IV, sizeof (IV)); + grub_memcpy (temp + sizeof (IV), src + hash->mdlen * i, hash->mdlen); + grub_crypto_hash (hash, dst + hash->mdlen * i, temp, + sizeof (IV) + hash->mdlen); + } + + if (padding) + { + IV = grub_cpu_to_be32 (i); + grub_memcpy (temp, &IV, sizeof (IV)); + grub_memcpy (temp + sizeof (IV), src + hash->mdlen * i, padding); + grub_crypto_hash (hash, final, temp, sizeof (IV) + padding); + grub_memcpy (dst + hash->mdlen * i, final, padding); + } +} + +/** + * Merges the splitted master key stored on disk into the original key + */ +gcry_err_code_t +AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, grub_uint8_t * dst, + grub_size_t blocksize, grub_size_t blocknumbers) +{ + grub_size_t i; + grub_uint8_t *bufblock; + + if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN || hash->mdlen == 0) + return GPG_ERR_INV_ARG; + + bufblock = grub_zalloc (blocksize); + if (bufblock == NULL) + return GPG_ERR_OUT_OF_MEMORY; + + grub_memset (bufblock, 0, blocksize); + for (i = 0; i < blocknumbers - 1; i++) + { + grub_crypto_xor (bufblock, src + (blocksize * i), bufblock, blocksize); + diffuse (hash, bufblock, bufblock, blocksize); + } + grub_crypto_xor (dst, src + (i * blocksize), bufblock, blocksize); + + grub_free (bufblock); + return GPG_ERR_NO_ERROR; +} diff --git a/grub-core/disk/ahci.c b/grub-core/disk/ahci.c new file mode 100644 index 000000000..494a1b773 --- /dev/null +++ b/grub-core/disk/ahci.c @@ -0,0 +1,1145 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_ahci_cmd_head +{ + grub_uint32_t config; + grub_uint32_t transferred; + grub_uint64_t command_table_base; + grub_uint32_t unused[4]; +}; + +struct grub_ahci_prdt_entry +{ + grub_uint64_t data_base; + grub_uint32_t unused; + grub_uint32_t size; +}; + +struct grub_ahci_cmd_table +{ + grub_uint8_t cfis[0x40]; + grub_uint8_t command[0x10]; + grub_uint8_t reserved[0x30]; + struct grub_ahci_prdt_entry prdt[1]; +}; + +struct grub_ahci_hba_port +{ + grub_uint64_t command_list_base; + grub_uint64_t fis_base; + grub_uint32_t intstatus; + grub_uint32_t inten; + grub_uint32_t command; + grub_uint32_t unused1; + grub_uint32_t task_file_data; + grub_uint32_t sig; + grub_uint32_t status; + grub_uint32_t unused2; + grub_uint32_t sata_error; + grub_uint32_t sata_active; + grub_uint32_t command_issue; + grub_uint32_t unused3; + grub_uint32_t fbs; + grub_uint32_t unused4[15]; +}; + +enum grub_ahci_hba_port_command + { + GRUB_AHCI_HBA_PORT_CMD_ST = 0x01, + GRUB_AHCI_HBA_PORT_CMD_SPIN_UP = 0x02, + GRUB_AHCI_HBA_PORT_CMD_POWER_ON = 0x04, + GRUB_AHCI_HBA_PORT_CMD_FRE = 0x10, + GRUB_AHCI_HBA_PORT_CMD_CR = 0x8000, + GRUB_AHCI_HBA_PORT_CMD_FR = 0x4000, + }; + +struct grub_ahci_hba +{ + grub_uint32_t cap; + grub_uint32_t global_control; + grub_uint32_t intr_status; + grub_uint32_t ports_implemented; + grub_uint32_t unused1[6]; + grub_uint32_t bios_handoff; + grub_uint32_t unused2[53]; + struct grub_ahci_hba_port ports[32]; +}; + +struct grub_ahci_received_fis +{ + char raw[4096]; +}; + +enum + { + GRUB_AHCI_HBA_CAP_NPORTS_MASK = 0x1f + }; + +enum + { + GRUB_AHCI_HBA_GLOBAL_CONTROL_RESET = 0x00000001, + GRUB_AHCI_HBA_GLOBAL_CONTROL_INTR_EN = 0x00000002, + GRUB_AHCI_HBA_GLOBAL_CONTROL_AHCI_EN = 0x80000000, + }; + +enum + { + GRUB_AHCI_BIOS_HANDOFF_BIOS_OWNED = 1, + GRUB_AHCI_BIOS_HANDOFF_OS_OWNED = 2, + GRUB_AHCI_BIOS_HANDOFF_OS_OWNERSHIP_CHANGED = 8, + GRUB_AHCI_BIOS_HANDOFF_RWC = 8 + }; + + +struct grub_ahci_device +{ + struct grub_ahci_device *next; + struct grub_ahci_device **prev; + volatile struct grub_ahci_hba *hba; + int port; + int num; + struct grub_pci_dma_chunk *command_list_chunk; + volatile struct grub_ahci_cmd_head *command_list; + struct grub_pci_dma_chunk *command_table_chunk; + volatile struct grub_ahci_cmd_table *command_table; + struct grub_pci_dma_chunk *rfis; + int present; + int atapi; +}; + +static grub_err_t +grub_ahci_readwrite_real (struct grub_ahci_device *dev, + struct grub_disk_ata_pass_through_parms *parms, + int spinup, int reset); + + +enum + { + GRUB_AHCI_CONFIG_READ = 0, + GRUB_AHCI_CONFIG_CFIS_LENGTH_MASK = 0x1f, + GRUB_AHCI_CONFIG_ATAPI = 0x20, + GRUB_AHCI_CONFIG_WRITE = 0x40, + GRUB_AHCI_CONFIG_PREFETCH = 0x80, + GRUB_AHCI_CONFIG_RESET = 0x100, + GRUB_AHCI_CONFIG_BIST = 0x200, + GRUB_AHCI_CONFIG_CLEAR_R_OK = 0x400, + GRUB_AHCI_CONFIG_PMP_MASK = 0xf000, + GRUB_AHCI_CONFIG_PRDT_LENGTH_MASK = 0xffff0000, + }; +#define GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT 0 +#define GRUB_AHCI_CONFIG_PMP_SHIFT 12 +#define GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT 16 +#define GRUB_AHCI_INTERRUPT_ON_COMPLETE 0x80000000 + +#define GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH 0x200000 + +static struct grub_ahci_device *grub_ahci_devices; +static int numdevs; + +static int +grub_ahci_pciinit (grub_pci_device_t dev, + grub_pci_id_t pciid __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + grub_pci_address_t addr; + grub_uint32_t class; + grub_uint32_t bar; + unsigned i, nports; + volatile struct grub_ahci_hba *hba; + + /* Read class. */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + class = grub_pci_read (addr); + + /* Check if this class ID matches that of a PCI IDE Controller. */ + if (class >> 8 != 0x010601) + return 0; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG5); + + bar = grub_pci_read (addr); + + if ((bar & (GRUB_PCI_ADDR_SPACE_MASK | GRUB_PCI_ADDR_MEM_TYPE_MASK + | GRUB_PCI_ADDR_MEM_PREFETCH)) + != (GRUB_PCI_ADDR_SPACE_MEMORY | GRUB_PCI_ADDR_MEM_TYPE_32)) + return 0; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word (addr, grub_pci_read_word (addr) + | GRUB_PCI_COMMAND_MEM_ENABLED | GRUB_PCI_COMMAND_BUS_MASTER); + + hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK, + sizeof (*hba)); + grub_dprintf ("ahci", "dev: %x:%x.%x\n", dev.bus, dev.device, dev.function); + + grub_dprintf ("ahci", "tfd[0]: %x\n", + hba->ports[0].task_file_data); + grub_dprintf ("ahci", "cmd[0]: %x\n", + hba->ports[0].command); + grub_dprintf ("ahci", "st[0]: %x\n", + hba->ports[0].status); + grub_dprintf ("ahci", "err[0]: %x\n", + hba->ports[0].sata_error); + + grub_dprintf ("ahci", "tfd[1]: %x\n", + hba->ports[1].task_file_data); + grub_dprintf ("ahci", "cmd[1]: %x\n", + hba->ports[1].command); + grub_dprintf ("ahci", "st[1]: %x\n", + hba->ports[1].status); + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + hba->ports[1].sata_error = hba->ports[1].sata_error; + + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + grub_dprintf ("ahci", "BH:%x\n", hba->bios_handoff); + + if (! (hba->bios_handoff & GRUB_AHCI_BIOS_HANDOFF_OS_OWNED)) + { + grub_uint64_t endtime; + + grub_dprintf ("ahci", "Requesting AHCI ownership\n"); + hba->bios_handoff = (hba->bios_handoff & ~GRUB_AHCI_BIOS_HANDOFF_RWC) + | GRUB_AHCI_BIOS_HANDOFF_OS_OWNED; + grub_dprintf ("ahci", "Waiting for BIOS to give up ownership\n"); + endtime = grub_get_time_ms () + 1000; + while ((hba->bios_handoff & GRUB_AHCI_BIOS_HANDOFF_BIOS_OWNED) + && grub_get_time_ms () < endtime); + if (hba->bios_handoff & GRUB_AHCI_BIOS_HANDOFF_BIOS_OWNED) + { + grub_dprintf ("ahci", "Forcibly taking ownership\n"); + hba->bios_handoff = GRUB_AHCI_BIOS_HANDOFF_OS_OWNED; + hba->bios_handoff |= GRUB_AHCI_BIOS_HANDOFF_OS_OWNERSHIP_CHANGED; + } + else + grub_dprintf ("ahci", "AHCI ownership obtained\n"); + } + else + grub_dprintf ("ahci", "AHCI is already in OS mode\n"); + + grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); + + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + if (!(hba->global_control & GRUB_AHCI_HBA_GLOBAL_CONTROL_AHCI_EN)) + grub_dprintf ("ahci", "AHCI is in compat mode. Switching\n"); + else + grub_dprintf ("ahci", "AHCI is in AHCI mode.\n"); + + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); + + /* { + grub_uint64_t endtime; + hba->global_control |= 1; + endtime = grub_get_time_ms () + 1000; + while (hba->global_control & 1) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't reset AHCI\n"); + return 0; + } + }*/ + + grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); + + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + for (i = 0; i < 5; i++) + { + hba->global_control |= GRUB_AHCI_HBA_GLOBAL_CONTROL_AHCI_EN; + grub_millisleep (1); + if (hba->global_control & GRUB_AHCI_HBA_GLOBAL_CONTROL_AHCI_EN) + break; + } + if (i == 5) + { + grub_dprintf ("ahci", "Couldn't put AHCI in AHCI mode\n"); + return 0; + } + + grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); + + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); + + for (i = 0; i < 5; i++) + { + hba->global_control |= GRUB_AHCI_HBA_GLOBAL_CONTROL_AHCI_EN; + grub_millisleep (1); + if (hba->global_control & GRUB_AHCI_HBA_GLOBAL_CONTROL_AHCI_EN) + break; + } + if (i == 5) + { + grub_dprintf ("ahci", "Couldn't put AHCI in AHCI mode\n"); + return 0; + } + + grub_dprintf ("ahci", "err[1]: %x\n", + hba->ports[1].sata_error); + + grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); + + nports = (GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1; + + grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports, + hba->ports_implemented); + + struct grub_ahci_device *adevs[GRUB_AHCI_HBA_CAP_NPORTS_MASK + 1]; + struct grub_ahci_device *failed_adevs[GRUB_AHCI_HBA_CAP_NPORTS_MASK + 1]; + grub_uint32_t fr_running = 0; + + for (i = 0; i < nports; i++) + failed_adevs[i] = 0; + for (i = 0; i < nports; i++) + { + if (!(hba->ports_implemented & (1 << i))) + { + adevs[i] = 0; + continue; + } + + adevs[i] = grub_zalloc (sizeof (*adevs[i])); + if (!adevs[i]) + return 1; + + adevs[i]->hba = hba; + adevs[i]->port = i; + adevs[i]->present = 1; + adevs[i]->num = numdevs++; + } + + for (i = 0; i < nports; i++) + if (adevs[i]) + { + adevs[i]->hba->ports[adevs[i]->port].sata_error = adevs[i]->hba->ports[adevs[i]->port].sata_error; + grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + + adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head) * 32); + if (!adevs[i]->command_list_chunk) + { + adevs[i] = 0; + continue; + } + + adevs[i]->command_table_chunk = grub_memalign_dma32 (1024, + sizeof (struct grub_ahci_cmd_table)); + if (!adevs[i]->command_table_chunk) + { + grub_dma_free (adevs[i]->command_list_chunk); + adevs[i] = 0; + continue; + } + + adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk); + adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk); + + grub_memset ((void *) adevs[i]->command_list, 0, + sizeof (struct grub_ahci_cmd_table)); + grub_memset ((void *) adevs[i]->command_table, 0, + sizeof (struct grub_ahci_cmd_head) * 32); + + adevs[i]->command_list->command_table_base + = grub_dma_get_phys (adevs[i]->command_table_chunk); + + grub_dprintf ("ahci", "found device ahci%d (port %d), command_table = %p, command_list = %p\n", + adevs[i]->num, adevs[i]->port, grub_dma_get_virt (adevs[i]->command_table_chunk), + grub_dma_get_virt (adevs[i]->command_list_chunk)); + + adevs[i]->hba->ports[adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; + } + + grub_uint64_t endtime; + endtime = grub_get_time_ms () + 1000; + + while (grub_get_time_ms () < endtime) + { + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + break; + if (i == nports) + break; + } + + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + { + grub_dprintf ("ahci", "couldn't stop FR on port %d\n", i); + failed_adevs[i] = adevs[i]; + adevs[i] = 0; + } + + for (i = 0; i < nports; i++) + if (adevs[i]) + adevs[i]->hba->ports[adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST; + endtime = grub_get_time_ms () + 1000; + + while (grub_get_time_ms () < endtime) + { + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + break; + if (i == nports) + break; + } + + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + { + grub_dprintf ("ahci", "couldn't stop CR on port %d\n", i); + failed_adevs[i] = adevs[i]; + adevs[i] = 0; + } + for (i = 0; i < nports; i++) + if (adevs[i]) + { + adevs[i]->hba->ports[adevs[i]->port].inten = 0; + adevs[i]->hba->ports[adevs[i]->port].intstatus = ~0; + // adevs[i]->hba->ports[adevs[i]->port].fbs = 0; + + grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + + adevs[i]->rfis = grub_memalign_dma32 (4096, + sizeof (struct grub_ahci_received_fis)); + grub_memset ((char *) grub_dma_get_virt (adevs[i]->rfis), 0, + sizeof (struct grub_ahci_received_fis)); + grub_memset ((char *) grub_dma_get_virt (adevs[i]->command_list_chunk), 0, + sizeof (struct grub_ahci_cmd_head)); + grub_memset ((char *) grub_dma_get_virt (adevs[i]->command_table_chunk), 0, + sizeof (struct grub_ahci_cmd_table)); + adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis); + adevs[i]->hba->ports[adevs[i]->port].command_list_base + = grub_dma_get_phys (adevs[i]->command_list_chunk); + adevs[i]->hba->ports[adevs[i]->port].command_issue = 0; + adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE; + } + + endtime = grub_get_time_ms () + 1000; + + while (grub_get_time_ms () < endtime) + { + for (i = 0; i < nports; i++) + if (adevs[i] && !(adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + break; + if (i == nports) + break; + } + + for (i = 0; i < nports; i++) + if (adevs[i] && !(adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + { + grub_dprintf ("ahci", "couldn't start FR on port %d\n", i); + failed_adevs[i] = adevs[i]; + adevs[i] = 0; + } + + for (i = 0; i < nports; i++) + if (adevs[i]) + { + grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + fr_running |= (1 << i); + + adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_SPIN_UP; + adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_POWER_ON; + adevs[i]->hba->ports[adevs[i]->port].command |= 1 << 28; + + grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + } + + /* 10ms should actually be enough. */ + endtime = grub_get_time_ms () + 100; + + while (grub_get_time_ms () < endtime) + { + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].status & 7) != 3) + break; + if (i == nports) + break; + } + + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].status & 7) != 3) + { + grub_dprintf ("ahci", "couldn't detect device on port %d\n", i); + failed_adevs[i] = adevs[i]; + adevs[i] = 0; + } + + for (i = 0; i < nports; i++) + if (adevs[i]) + { + grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + + adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_POWER_ON; + adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_SPIN_UP; + + grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + + adevs[i]->hba->ports[adevs[i]->port].sata_error = ~0; + grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + + grub_dprintf ("ahci", "port %d, offset: %x, tfd:%x, CMD: %x\n", adevs[i]->port, + (int) ((char *) &adevs[i]->hba->ports[adevs[i]->port].task_file_data - + (char *) adevs[i]->hba), + adevs[i]->hba->ports[adevs[i]->port].task_file_data, + adevs[i]->hba->ports[adevs[i]->port].command); + + grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + } + + + for (i = 0; i < nports; i++) + if (adevs[i]) + { + grub_dprintf ("ahci", "port %d, offset: %x, tfd:%x, CMD: %x\n", adevs[i]->port, + (int) ((char *) &adevs[i]->hba->ports[adevs[i]->port].task_file_data - + (char *) adevs[i]->hba), + adevs[i]->hba->ports[adevs[i]->port].task_file_data, + adevs[i]->hba->ports[adevs[i]->port].command); + + grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port, + adevs[i]->hba->ports[adevs[i]->port].sata_error); + + adevs[i]->hba->ports[adevs[i]->port].command + = (adevs[i]->hba->ports[adevs[i]->port].command & 0x0fffffff) | (1 << 28) + | GRUB_AHCI_HBA_PORT_CMD_SPIN_UP + | GRUB_AHCI_HBA_PORT_CMD_POWER_ON; + + /* struct grub_disk_ata_pass_through_parms parms2; + grub_memset (&parms2, 0, sizeof (parms2)); + parms2.taskfile.cmd = 8; + grub_ahci_readwrite_real (dev, &parms2, 1, 1);*/ + } + + endtime = grub_get_time_ms () + 10000; + + while (grub_get_time_ms () < endtime) + { + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].task_file_data & (GRUB_ATA_STATUS_BUSY | GRUB_ATA_STATUS_DRQ))) + break; + if (i == nports) + break; + } + + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].task_file_data & (GRUB_ATA_STATUS_BUSY | GRUB_ATA_STATUS_DRQ))) + { + grub_dprintf ("ahci", "port %d is busy\n", i); + failed_adevs[i] = adevs[i]; + adevs[i] = 0; + } + + for (i = 0; i < nports; i++) + if (adevs[i]) + adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_ST; + + endtime = grub_get_time_ms () + 1000; + + while (grub_get_time_ms () < endtime) + { + for (i = 0; i < nports; i++) + if (adevs[i] && !(adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + break; + if (i == nports) + break; + } + + for (i = 0; i < nports; i++) + if (adevs[i] && !(adevs[i]->hba->ports[adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + { + grub_dprintf ("ahci", "couldn't start CR on port %d\n", i); + failed_adevs[i] = adevs[i]; + adevs[i] = 0; + } + + grub_dprintf ("ahci", "cleaning up failed devs\n"); + + for (i = 0; i < nports; i++) + if (failed_adevs[i] && (fr_running & (1 << i))) + failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; + + endtime = grub_get_time_ms () + 1000; + while (grub_get_time_ms () < endtime) + { + for (i = 0; i < nports; i++) + if (failed_adevs[i] && (fr_running & (1 << i)) && (failed_adevs[i]->hba->ports[failed_adevs[i]->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + break; + if (i == nports) + break; + } + for (i = 0; i < nports; i++) + if (failed_adevs[i]) + { + grub_dma_free (failed_adevs[i]->command_list_chunk); + grub_dma_free (failed_adevs[i]->command_table_chunk); + grub_dma_free (failed_adevs[i]->rfis); + } + + for (i = 0; i < nports; i++) + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14) + adevs[i]->atapi = 1; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word (addr, grub_pci_read_word (addr) + | GRUB_PCI_COMMAND_BUS_MASTER); + + for (i = 0; i < nports; i++) + if (adevs[i]) + { + grub_list_push (GRUB_AS_LIST_P (&grub_ahci_devices), + GRUB_AS_LIST (adevs[i])); + } + + return 0; +} + +static grub_err_t +grub_ahci_initialize (void) +{ + grub_pci_iterate (grub_ahci_pciinit, NULL); + return grub_errno; +} + +static grub_err_t +grub_ahci_fini_hw (int noreturn __attribute__ ((unused))) +{ + struct grub_ahci_device *dev; + + for (dev = grub_ahci_devices; dev; dev = dev->next) + { + grub_uint64_t endtime; + + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; + endtime = grub_get_time_ms () + 1000; + while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't stop FR\n"); + break; + } + + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST; + endtime = grub_get_time_ms () + 1000; + while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't stop CR\n"); + break; + } + grub_dma_free (dev->command_list_chunk); + grub_dma_free (dev->command_table_chunk); + grub_dma_free (dev->rfis); + dev->command_list_chunk = NULL; + dev->command_table_chunk = NULL; + dev->rfis = NULL; + } + return GRUB_ERR_NONE; +} + +static int +reinit_port (struct grub_ahci_device *dev) +{ + struct grub_pci_dma_chunk *command_list; + struct grub_pci_dma_chunk *command_table; + grub_uint64_t endtime; + + command_list = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head)); + if (!command_list) + return 1; + + command_table = grub_memalign_dma32 (1024, + sizeof (struct grub_ahci_cmd_table)); + if (!command_table) + { + grub_dma_free (command_list); + return 1; + } + + grub_dprintf ("ahci", "found device ahci%d (port %d)\n", dev->num, dev->port); + + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; + endtime = grub_get_time_ms () + 1000; + while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't stop FR\n"); + goto out; + } + + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST; + endtime = grub_get_time_ms () + 1000; + while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't stop CR\n"); + goto out; + } + + dev->hba->ports[dev->port].fbs = 2; + + dev->rfis = grub_memalign_dma32 (4096, + sizeof (struct grub_ahci_received_fis)); + grub_memset ((char *) grub_dma_get_virt (dev->rfis), 0, + sizeof (struct grub_ahci_received_fis)); + dev->hba->ports[dev->port].fis_base = grub_dma_get_phys (dev->rfis); + dev->hba->ports[dev->port].command_list_base + = grub_dma_get_phys (command_list); + dev->hba->ports[dev->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE; + while (!(dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't start FR\n"); + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; + goto out; + } + dev->hba->ports[dev->port].command |= GRUB_AHCI_HBA_PORT_CMD_ST; + while (!(dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't start CR\n"); + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_CR; + goto out_stop_fr; + } + + dev->hba->ports[dev->port].command + = (dev->hba->ports[dev->port].command & 0x0fffffff) | (1 << 28) | 2 | 4; + + dev->command_list_chunk = command_list; + dev->command_list = grub_dma_get_virt (command_list); + dev->command_table_chunk = command_table; + dev->command_table = grub_dma_get_virt (command_table); + dev->command_list->command_table_base + = grub_dma_get_phys (command_table); + + return 0; + out_stop_fr: + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; + endtime = grub_get_time_ms () + 1000; + while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_FR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't stop FR\n"); + break; + } + out: + grub_dma_free (command_list); + grub_dma_free (command_table); + grub_dma_free (dev->rfis); + return 1; +} + +static grub_err_t +grub_ahci_restore_hw (void) +{ + struct grub_ahci_device **pdev; + + for (pdev = &grub_ahci_devices; *pdev; pdev = &((*pdev)->next)) + if (reinit_port (*pdev)) + { + struct grub_ahci_device *odev; + odev = *pdev; + *pdev = (*pdev)->next; + grub_free (odev); + } + return GRUB_ERR_NONE; +} + + + + +static int +grub_ahci_iterate (grub_ata_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_ahci_device *dev; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + FOR_LIST_ELEMENTS(dev, grub_ahci_devices) + if (hook (GRUB_SCSI_SUBSYSTEM_AHCI, dev->num, hook_data)) + return 1; + + return 0; +} + +#if 0 +static int +find_free_cmd_slot (struct grub_ahci_device *dev) +{ + int i; + for (i = 0; i < 32; i++) + { + if (dev->hda->ports[dev->port].command_issue & (1 << i)) + continue; + if (dev->hda->ports[dev->port].sata_active & (1 << i)) + continue; + return i; + } + return -1; +} +#endif + +enum + { + GRUB_AHCI_FIS_REG_H2D = 0x27 + }; + +static const int register_map[11] = { 3 /* Features */, + 12 /* Sectors */, + 4 /* LBA low */, + 5 /* LBA mid */, + 6 /* LBA high */, + 7 /* Device */, + 2 /* CMD register */, + 13 /* Sectors 48 */, + 8 /* LBA48 low */, + 9 /* LBA48 mid */, + 10 /* LBA48 high */ }; + +static grub_err_t +grub_ahci_reset_port (struct grub_ahci_device *dev, int force) +{ + grub_uint64_t endtime; + + dev->hba->ports[dev->port].sata_error = dev->hba->ports[dev->port].sata_error; + + if (force || (dev->hba->ports[dev->port].command_issue & 1) + || (dev->hba->ports[dev->port].task_file_data & 0x80)) + { + struct grub_disk_ata_pass_through_parms parms2; + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST; + dev->hba->ports[dev->port].command_issue = 0; + dev->command_list[0].config = 0; + dev->command_table[0].prdt[0].unused = 0; + dev->command_table[0].prdt[0].size = 0; + dev->command_table[0].prdt[0].data_base = 0; + + endtime = grub_get_time_ms () + 1000; + while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't stop CR"); + return grub_error (GRUB_ERR_IO, "couldn't stop CR"); + } + dev->hba->ports[dev->port].command |= 8; + while (dev->hba->ports[dev->port].command & 8) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't set CLO\n"); + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; + return grub_error (GRUB_ERR_IO, "couldn't set CLO"); + } + + dev->hba->ports[dev->port].command |= GRUB_AHCI_HBA_PORT_CMD_ST; + while (!(dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "couldn't stop CR"); + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST; + return grub_error (GRUB_ERR_IO, "couldn't stop CR"); + } + dev->hba->ports[dev->port].sata_error = dev->hba->ports[dev->port].sata_error; + grub_memset (&parms2, 0, sizeof (parms2)); + parms2.taskfile.cmd = 8; + return grub_ahci_readwrite_real (dev, &parms2, 1, 1); + } + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_ahci_readwrite_real (struct grub_ahci_device *dev, + struct grub_disk_ata_pass_through_parms *parms, + int spinup, int reset) +{ + struct grub_pci_dma_chunk *bufc; + grub_uint64_t endtime; + unsigned i; + grub_err_t err = GRUB_ERR_NONE; + + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + + if (!reset) + grub_ahci_reset_port (dev, 0); + + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + dev->hba->ports[dev->port].task_file_data = 0; + dev->hba->ports[dev->port].command_issue = 0; + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + + dev->hba->ports[dev->port].sata_error = dev->hba->ports[dev->port].sata_error; + + grub_dprintf("ahci", "grub_ahci_read (size=%llu, cmdsize = %llu)\n", + (unsigned long long) parms->size, + (unsigned long long) parms->cmdsize); + + if (parms->cmdsize != 0 && parms->cmdsize != 12 && parms->cmdsize != 16) + return grub_error (GRUB_ERR_BUG, "incorrect ATAPI command size"); + + if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH) + return grub_error (GRUB_ERR_BUG, "too big data buffer"); + + if (parms->size) + bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1)); + else + bufc = grub_memalign_dma32 (1024, 512); + + grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n", + dev->hba->ports[dev->port].task_file_data, + dev->command_list); + /* FIXME: support port multipliers. */ + dev->command_list[0].config + = (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT) + // | GRUB_AHCI_CONFIG_CLEAR_R_OK + | (0 << GRUB_AHCI_CONFIG_PMP_SHIFT) + | ((parms->size ? 1 : 0) << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT) + | (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0) + | (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ) + | (parms->taskfile.cmd == 8 ? (1 << 8) : 0); + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + + dev->command_list[0].transferred = 0; + dev->command_list[0].command_table_base + = grub_dma_get_phys (dev->command_table_chunk); + + grub_memset ((char *) dev->command_list[0].unused, 0, + sizeof (dev->command_list[0].unused)); + + grub_memset ((char *) &dev->command_table[0], 0, + sizeof (dev->command_table[0])); + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + + if (parms->cmdsize) + grub_memcpy ((char *) dev->command_table[0].command, parms->cmd, + parms->cmdsize); + + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + + dev->command_table[0].cfis[0] = GRUB_AHCI_FIS_REG_H2D; + dev->command_table[0].cfis[1] = 0x80; + for (i = 0; i < sizeof (parms->taskfile.raw); i++) + dev->command_table[0].cfis[register_map[i]] = parms->taskfile.raw[i]; + + grub_dprintf ("ahci", "cfis: %02x %02x %02x %02x %02x %02x %02x %02x\n", + dev->command_table[0].cfis[0], dev->command_table[0].cfis[1], + dev->command_table[0].cfis[2], dev->command_table[0].cfis[3], + dev->command_table[0].cfis[4], dev->command_table[0].cfis[5], + dev->command_table[0].cfis[6], dev->command_table[0].cfis[7]); + grub_dprintf ("ahci", "cfis: %02x %02x %02x %02x %02x %02x %02x %02x\n", + dev->command_table[0].cfis[8], dev->command_table[0].cfis[9], + dev->command_table[0].cfis[10], dev->command_table[0].cfis[11], + dev->command_table[0].cfis[12], dev->command_table[0].cfis[13], + dev->command_table[0].cfis[14], dev->command_table[0].cfis[15]); + + dev->command_table[0].prdt[0].data_base = grub_dma_get_phys (bufc); + dev->command_table[0].prdt[0].unused = 0; + dev->command_table[0].prdt[0].size = (parms->size - 1); + + grub_dprintf ("ahci", "PRDT = %" PRIxGRUB_UINT64_T ", %x, %x (%" + PRIuGRUB_SIZE ")\n", + dev->command_table[0].prdt[0].data_base, + dev->command_table[0].prdt[0].unused, + dev->command_table[0].prdt[0].size, + (grub_size_t) ((char *) &dev->command_table[0].prdt[0] + - (char *) &dev->command_table[0])); + + if (parms->write) + grub_memcpy ((char *) grub_dma_get_virt (bufc), parms->buffer, parms->size); + + grub_dprintf ("ahci", "AHCI command scheduled\n"); + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + grub_dprintf ("ahci", "AHCI inten = %x\n", + dev->hba->ports[dev->port].inten); + grub_dprintf ("ahci", "AHCI intstatus = %x\n", + dev->hba->ports[dev->port].intstatus); + + dev->hba->ports[dev->port].inten = 0xffffffff;//(1 << 2) | (1 << 5); + dev->hba->ports[dev->port].intstatus = 0xffffffff;//(1 << 2) | (1 << 5); + grub_dprintf ("ahci", "AHCI inten = %x\n", + dev->hba->ports[dev->port].inten); + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + dev->hba->ports[dev->port].sata_active = 1; + dev->hba->ports[dev->port].command_issue = 1; + grub_dprintf ("ahci", "AHCI sig = %x\n", dev->hba->ports[dev->port].sig); + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + + endtime = grub_get_time_ms () + (spinup ? 20000 : 20000); + while ((dev->hba->ports[dev->port].command_issue & 1)) + if (grub_get_time_ms () > endtime) + { + grub_dprintf ("ahci", "AHCI status <%x %x %x %x>\n", + dev->hba->ports[dev->port].command_issue, + dev->hba->ports[dev->port].sata_active, + dev->hba->ports[dev->port].intstatus, + dev->hba->ports[dev->port].task_file_data); + dev->hba->ports[dev->port].command_issue = 0; + err = grub_error (GRUB_ERR_IO, "AHCI transfer timed out"); + if (!reset) + grub_ahci_reset_port (dev, 1); + break; + } + + grub_dprintf ("ahci", "AHCI command completed <%x %x %x %x %x, %x %x>\n", + dev->hba->ports[dev->port].command_issue, + dev->hba->ports[dev->port].intstatus, + dev->hba->ports[dev->port].task_file_data, + dev->command_list[0].transferred, + dev->hba->ports[dev->port].sata_error, + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x00], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x18]); + grub_dprintf ("ahci", + "last PIO FIS %08x %08x %08x %08x %08x %08x %08x %08x\n", + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x08], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x09], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x0a], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x0b], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x0c], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x0d], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x0e], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x0f]); + grub_dprintf ("ahci", + "last REG FIS %08x %08x %08x %08x %08x %08x %08x %08x\n", + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x10], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x11], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x12], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x13], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x14], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x15], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x16], + ((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x17]); + + if (!parms->write) + grub_memcpy (parms->buffer, (char *) grub_dma_get_virt (bufc), parms->size); + grub_dma_free (bufc); + + return err; +} + +static grub_err_t +grub_ahci_readwrite (grub_ata_t disk, + struct grub_disk_ata_pass_through_parms *parms, + int spinup) +{ + return grub_ahci_readwrite_real (disk->data, parms, spinup, 0); +} + +static grub_err_t +grub_ahci_open (int id, int devnum, struct grub_ata *ata) +{ + struct grub_ahci_device *dev; + + if (id != GRUB_SCSI_SUBSYSTEM_AHCI) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not an AHCI device"); + + FOR_LIST_ELEMENTS(dev, grub_ahci_devices) + if (dev->num == devnum) + break; + + if (! dev) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such AHCI device"); + + grub_dprintf ("ahci", "opening AHCI dev `ahci%d'\n", dev->num); + + ata->data = dev; + ata->dma = 1; + ata->atapi = dev->atapi; + ata->maxbuffer = GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH; + ata->present = &dev->present; + + return GRUB_ERR_NONE; +} + +static struct grub_ata_dev grub_ahci_dev = + { + .iterate = grub_ahci_iterate, + .open = grub_ahci_open, + .readwrite = grub_ahci_readwrite, + }; + + + +static struct grub_preboot *fini_hnd; + +GRUB_MOD_INIT(ahci) +{ + grub_stop_disk_firmware (); + + /* AHCI initialization. */ + grub_ahci_initialize (); + + /* AHCI devices are handled by scsi.mod. */ + grub_ata_dev_register (&grub_ahci_dev); + + fini_hnd = grub_loader_register_preboot_hook (grub_ahci_fini_hw, + grub_ahci_restore_hw, + GRUB_LOADER_PREBOOT_HOOK_PRIO_DISK); +} + +GRUB_MOD_FINI(ahci) +{ + grub_ahci_fini_hw (0); + grub_loader_unregister_preboot_hook (fini_hnd); + + grub_ata_dev_unregister (&grub_ahci_dev); +} diff --git a/grub-core/disk/arc/arcdisk.c b/grub-core/disk/arc/arcdisk.c new file mode 100644 index 000000000..0cc1993e5 --- /dev/null +++ b/grub-core/disk/arc/arcdisk.c @@ -0,0 +1,325 @@ +/* ofdisk.c - Open Firmware disk access. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2006,2007,2008,2009,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +static grub_arc_fileno_t last_handle = 0; +static char *last_path = NULL; +static int handle_writable = 0; + +static int lnum = 0; + +struct arcdisk_hash_ent +{ + char *devpath; + int num; + struct arcdisk_hash_ent *next; +}; + +#define ARCDISK_HASH_SZ 8 +static struct arcdisk_hash_ent *arcdisk_hash[ARCDISK_HASH_SZ]; + +static int +arcdisk_hash_fn (const char *devpath) +{ + int hash = 0; + while (*devpath) + hash ^= *devpath++; + return (hash & (ARCDISK_HASH_SZ - 1)); +} + +static struct arcdisk_hash_ent * +arcdisk_hash_find (const char *devpath) +{ + struct arcdisk_hash_ent *p = arcdisk_hash[arcdisk_hash_fn (devpath)]; + + while (p) + { + if (!grub_strcmp (p->devpath, devpath)) + break; + p = p->next; + } + return p; +} + +static struct arcdisk_hash_ent * +arcdisk_hash_add (char *devpath) +{ + struct arcdisk_hash_ent *p; + struct arcdisk_hash_ent **head = &arcdisk_hash[arcdisk_hash_fn(devpath)]; + + p = grub_malloc (sizeof (*p)); + if (!p) + return NULL; + + p->devpath = devpath; + p->next = *head; + p->num = lnum++; + *head = p; + return p; +} + + +/* Context for grub_arcdisk_iterate. */ +struct grub_arcdisk_iterate_ctx +{ + grub_disk_dev_iterate_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_arcdisk_iterate. */ +static int +grub_arcdisk_iterate_iter (const char *name, + const struct grub_arc_component *comp, void *data) +{ + struct grub_arcdisk_iterate_ctx *ctx = data; + + if (!(comp->type == GRUB_ARC_COMPONENT_TYPE_DISK + || comp->type == GRUB_ARC_COMPONENT_TYPE_FLOPPY + || comp->type == GRUB_ARC_COMPONENT_TYPE_TAPE)) + return 0; + return ctx->hook (name, ctx->hook_data); +} + +static int +grub_arcdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_arcdisk_iterate_ctx ctx = { hook, hook_data }; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + return grub_arc_iterate_devs (grub_arcdisk_iterate_iter, &ctx, 1); +} + +#ifdef GRUB_CPU_MIPSEL +#define RAW_SUFFIX "partition(0)" +#else +#define RAW_SUFFIX "partition(10)" +#endif + +static grub_err_t +reopen (const char *name, int writable) +{ + grub_arc_fileno_t handle; + + if (last_path && grub_strcmp (last_path, name) == 0 + && (!writable || handle_writable)) + { + grub_dprintf ("arcdisk", "using already opened %s\n", name); + return GRUB_ERR_NONE; + } + if (last_path) + { + GRUB_ARC_FIRMWARE_VECTOR->close (last_handle); + grub_free (last_path); + last_path = NULL; + last_handle = 0; + handle_writable = 0; + } + if (GRUB_ARC_FIRMWARE_VECTOR->open (name, + writable ? GRUB_ARC_FILE_ACCESS_OPEN_RW + : GRUB_ARC_FILE_ACCESS_OPEN_RO, &handle)) + { + grub_dprintf ("arcdisk", "couldn't open %s\n", name); + return grub_error (GRUB_ERR_IO, "couldn't open %s", name); + } + handle_writable = writable; + last_path = grub_strdup (name); + if (!last_path) + return grub_errno; + last_handle = handle; + grub_dprintf ("arcdisk", "opened %s\n", name); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_arcdisk_open (const char *name, grub_disk_t disk) +{ + char *fullname; + grub_err_t err; + grub_arc_err_t r; + struct grub_arc_fileinfo info; + struct arcdisk_hash_ent *hash; + + if (grub_memcmp (name, "arc/", 4) != 0) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not arc device"); + fullname = grub_arc_alt_name_to_norm (name, RAW_SUFFIX); + disk->data = fullname; + grub_dprintf ("arcdisk", "opening %s\n", fullname); + + hash = arcdisk_hash_find (fullname); + if (!hash) + hash = arcdisk_hash_add (fullname); + if (!hash) + return grub_errno; + + err = reopen (fullname, 0); + if (err) + return err; + + r = GRUB_ARC_FIRMWARE_VECTOR->getfileinformation (last_handle, &info); + if (r) + { + grub_uint64_t res = 0; + int i; + + grub_dprintf ("arcdisk", "couldn't retrieve size: %ld\n", r); + for (i = 40; i >= 9; i--) + { + grub_uint64_t pos = res | (1ULL << i); + char buf[512]; + long unsigned count = 0; + grub_dprintf ("arcdisk", + "seek to 0x%" PRIxGRUB_UINT64_T "\n", pos); + if (GRUB_ARC_FIRMWARE_VECTOR->seek (last_handle, &pos, 0)) + continue; + if (GRUB_ARC_FIRMWARE_VECTOR->read (last_handle, buf, + 0x200, &count)) + continue; + if (count == 0) + continue; + res |= (1ULL << i); + } + grub_dprintf ("arcdisk", + "determined disk size 0x%" PRIxGRUB_UINT64_T "\n", res); + disk->total_sectors = (res + 0x200) >> 9; + } + else + disk->total_sectors = (info.end >> 9); + + disk->id = hash->num; + return GRUB_ERR_NONE; +} + +static void +grub_arcdisk_close (grub_disk_t disk) +{ + grub_free (disk->data); +} + +static grub_err_t +grub_arcdisk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_err_t err; + grub_uint64_t pos = sector << 9; + unsigned long count; + grub_uint64_t totl = size << 9; + grub_arc_err_t r; + + err = reopen (disk->data, 0); + if (err) + return err; + r = GRUB_ARC_FIRMWARE_VECTOR->seek (last_handle, &pos, 0); + if (r) + { + grub_dprintf ("arcdisk", "seek to 0x%" PRIxGRUB_UINT64_T " failed: %ld\n", + pos, r); + return grub_error (GRUB_ERR_IO, "couldn't seek"); + } + + while (totl) + { + if (GRUB_ARC_FIRMWARE_VECTOR->read (last_handle, buf, + totl, &count)) + return grub_error (GRUB_ERR_READ_ERROR, + N_("failure reading sector 0x%llx " + "from `%s'"), + (unsigned long long) sector, + disk->name); + totl -= count; + buf += count; + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_arcdisk_write (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + grub_err_t err; + grub_uint64_t pos = sector << 9; + unsigned long count; + grub_uint64_t totl = size << 9; + grub_arc_err_t r; + + err = reopen (disk->data, 1); + if (err) + return err; + r = GRUB_ARC_FIRMWARE_VECTOR->seek (last_handle, &pos, 0); + if (r) + { + grub_dprintf ("arcdisk", "seek to 0x%" PRIxGRUB_UINT64_T " failed: %ld\n", + pos, r); + return grub_error (GRUB_ERR_IO, "couldn't seek"); + } + + while (totl) + { + if (GRUB_ARC_FIRMWARE_VECTOR->write (last_handle, buf, + totl, &count)) + return grub_error (GRUB_ERR_WRITE_ERROR, N_("failure writing sector 0x%llx " + "to `%s'"), + (unsigned long long) sector, + disk->name); + totl -= count; + buf += count; + } + + return GRUB_ERR_NONE; +} + +static struct grub_disk_dev grub_arcdisk_dev = + { + .name = "arcdisk", + .id = GRUB_DISK_DEVICE_ARCDISK_ID, + .iterate = grub_arcdisk_iterate, + .open = grub_arcdisk_open, + .close = grub_arcdisk_close, + .read = grub_arcdisk_read, + .write = grub_arcdisk_write, + .next = 0 + }; + +void +grub_arcdisk_init (void) +{ + grub_disk_dev_register (&grub_arcdisk_dev); +} + +void +grub_arcdisk_fini (void) +{ + if (last_path) + { + GRUB_ARC_FIRMWARE_VECTOR->close (last_handle); + grub_free (last_path); + last_path = NULL; + last_handle = 0; + } + + grub_disk_dev_unregister (&grub_arcdisk_dev); +} diff --git a/grub-core/disk/ata.c b/grub-core/disk/ata.c new file mode 100644 index 000000000..8ba4e5c50 --- /dev/null +++ b/grub-core/disk/ata.c @@ -0,0 +1,683 @@ +/* ata.c - ATA disk access. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_ata_dev_t grub_ata_dev_list; + +/* Byteorder has to be changed before strings can be read. */ +static void +grub_ata_strncpy (grub_uint16_t *dst16, grub_uint16_t *src16, grub_size_t len) +{ + unsigned int i; + + for (i = 0; i < len / 2; i++) + *(dst16++) = grub_swap_bytes16 (*(src16++)); + *dst16 = 0; +} + +static void +grub_ata_dumpinfo (struct grub_ata *dev, grub_uint16_t *info) +{ + grub_uint16_t text[21]; + + /* The device information was read, dump it for debugging. */ + grub_ata_strncpy (text, info + 10, 20); + grub_dprintf ("ata", "Serial: %s\n", (char *) text); + grub_ata_strncpy (text, info + 23, 8); + grub_dprintf ("ata", "Firmware: %s\n", (char *) text); + grub_ata_strncpy (text, info + 27, 40); + grub_dprintf ("ata", "Model: %s\n", (char *) text); + + if (! dev->atapi) + { + grub_dprintf ("ata", "Addressing: %d\n", dev->addr); + grub_dprintf ("ata", "Sectors: %lld\n", (unsigned long long) dev->size); + grub_dprintf ("ata", "Sector size: %u\n", 1U << dev->log_sector_size); + } +} + +static grub_err_t +grub_atapi_identify (struct grub_ata *dev) +{ + struct grub_disk_ata_pass_through_parms parms; + grub_uint16_t *info; + grub_err_t err; + + info = grub_malloc (GRUB_DISK_SECTOR_SIZE); + if (! info) + return grub_errno; + + grub_memset (&parms, 0, sizeof (parms)); + parms.taskfile.disk = 0xE0; + parms.taskfile.cmd = GRUB_ATA_CMD_IDENTIFY_PACKET_DEVICE; + parms.size = GRUB_DISK_SECTOR_SIZE; + parms.buffer = info; + + err = dev->dev->readwrite (dev, &parms, *dev->present); + if (err) + { + *dev->present = 0; + return err; + } + + if (parms.size != GRUB_DISK_SECTOR_SIZE) + { + *dev->present = 0; + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "device cannot be identified"); + } + + dev->atapi = 1; + + grub_ata_dumpinfo (dev, info); + + grub_free (info); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_ata_identify (struct grub_ata *dev) +{ + struct grub_disk_ata_pass_through_parms parms; + grub_uint64_t *info64; + grub_uint32_t *info32; + grub_uint16_t *info16; + grub_err_t err; + + if (dev->atapi) + return grub_atapi_identify (dev); + + info64 = grub_malloc (GRUB_DISK_SECTOR_SIZE); + info32 = (grub_uint32_t *) info64; + info16 = (grub_uint16_t *) info64; + if (! info16) + return grub_errno; + + grub_memset (&parms, 0, sizeof (parms)); + parms.buffer = info16; + parms.size = GRUB_DISK_SECTOR_SIZE; + parms.taskfile.disk = 0xE0; + + parms.taskfile.cmd = GRUB_ATA_CMD_IDENTIFY_DEVICE; + + err = dev->dev->readwrite (dev, &parms, *dev->present); + + if (err || parms.size != GRUB_DISK_SECTOR_SIZE) + { + grub_uint8_t sts = parms.taskfile.status; + grub_free (info16); + grub_errno = GRUB_ERR_NONE; + if ((sts & (GRUB_ATA_STATUS_BUSY | GRUB_ATA_STATUS_DRQ + | GRUB_ATA_STATUS_ERR)) == GRUB_ATA_STATUS_ERR + && (parms.taskfile.error & 0x04 /* ABRT */)) + /* Device without ATA IDENTIFY, try ATAPI. */ + return grub_atapi_identify (dev); + + else if (sts == 0x00) + { + *dev->present = 0; + /* No device, return error but don't print message. */ + return GRUB_ERR_UNKNOWN_DEVICE; + } + else + { + *dev->present = 0; + /* Other Error. */ + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "device cannot be identified"); + } + } + + /* Now it is certain that this is not an ATAPI device. */ + dev->atapi = 0; + + /* CHS is always supported. */ + dev->addr = GRUB_ATA_CHS; + + /* Check if LBA is supported. */ + if (info16[49] & grub_cpu_to_le16_compile_time ((1 << 9))) + { + /* Check if LBA48 is supported. */ + if (info16[83] & grub_cpu_to_le16_compile_time ((1 << 10))) + dev->addr = GRUB_ATA_LBA48; + else + dev->addr = GRUB_ATA_LBA; + } + + /* Determine the amount of sectors. */ + if (dev->addr != GRUB_ATA_LBA48) + dev->size = grub_le_to_cpu32 (info32[30]); + else + dev->size = grub_le_to_cpu64 (info64[25]); + + if (info16[106] & grub_cpu_to_le16_compile_time ((1 << 12))) + { + grub_uint32_t secsize; + secsize = grub_le_to_cpu32 (grub_get_unaligned32 (&info16[117])); + if (secsize & (secsize - 1) || !secsize + || secsize > 1048576) + secsize = 256; + for (dev->log_sector_size = 0; + (1U << dev->log_sector_size) < secsize; + dev->log_sector_size++); + dev->log_sector_size++; + } + else + dev->log_sector_size = 9; + + /* Read CHS information. */ + dev->cylinders = grub_le_to_cpu16 (info16[1]); + dev->heads = grub_le_to_cpu16 (info16[3]); + dev->sectors_per_track = grub_le_to_cpu16 (info16[6]); + + grub_ata_dumpinfo (dev, info16); + + grub_free (info16); + + return 0; +} + +static grub_err_t +grub_ata_setaddress (struct grub_ata *dev, + struct grub_disk_ata_pass_through_parms *parms, + grub_disk_addr_t sector, + grub_size_t size, + grub_ata_addressing_t addressing) +{ + switch (addressing) + { + case GRUB_ATA_CHS: + { + unsigned int cylinder; + unsigned int head; + unsigned int sect; + + if (dev->sectors_per_track == 0 + || dev->heads == 0) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + "sector %d cannot be addressed " + "using CHS addressing", sector); + + /* Calculate the sector, cylinder and head to use. */ + sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1; + cylinder = (((grub_uint32_t) sector / dev->sectors_per_track) + / dev->heads); + head = ((grub_uint32_t) sector / dev->sectors_per_track) % dev->heads; + + if (sect > dev->sectors_per_track + || cylinder > dev->cylinders + || head > dev->heads) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + "sector %d cannot be addressed " + "using CHS addressing", sector); + + parms->taskfile.disk = 0xE0 | head; + parms->taskfile.sectnum = sect; + parms->taskfile.cyllsb = cylinder & 0xFF; + parms->taskfile.cylmsb = cylinder >> 8; + + break; + } + + case GRUB_ATA_LBA: + if (size == 256) + size = 0; + parms->taskfile.disk = 0xE0 | ((sector >> 24) & 0x0F); + + parms->taskfile.sectors = size; + parms->taskfile.lba_low = sector & 0xFF; + parms->taskfile.lba_mid = (sector >> 8) & 0xFF; + parms->taskfile.lba_high = (sector >> 16) & 0xFF; + break; + + case GRUB_ATA_LBA48: + if (size == 65536) + size = 0; + + parms->taskfile.disk = 0xE0; + + /* Set "Previous". */ + parms->taskfile.sectors = size & 0xFF; + parms->taskfile.lba_low = sector & 0xFF; + parms->taskfile.lba_mid = (sector >> 8) & 0xFF; + parms->taskfile.lba_high = (sector >> 16) & 0xFF; + + /* Set "Current". */ + parms->taskfile.sectors48 = (size >> 8) & 0xFF; + parms->taskfile.lba48_low = (sector >> 24) & 0xFF; + parms->taskfile.lba48_mid = (sector >> 32) & 0xFF; + parms->taskfile.lba48_high = (sector >> 40) & 0xFF; + + break; + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_ata_readwrite (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf, int rw) +{ + struct grub_ata *ata = disk->data; + + grub_ata_addressing_t addressing = ata->addr; + grub_size_t batch; + int cmd, cmd_write; + grub_size_t nsectors = 0; + + grub_dprintf("ata", "grub_ata_readwrite (size=%llu, rw=%d)\n", + (unsigned long long) size, rw); + + if (addressing == GRUB_ATA_LBA48 && ((sector + size) >> 28) != 0) + { + if (ata->dma) + { + cmd = GRUB_ATA_CMD_READ_SECTORS_DMA_EXT; + cmd_write = GRUB_ATA_CMD_WRITE_SECTORS_DMA_EXT; + } + else + { + cmd = GRUB_ATA_CMD_READ_SECTORS_EXT; + cmd_write = GRUB_ATA_CMD_WRITE_SECTORS_EXT; + } + } + else + { + if (addressing == GRUB_ATA_LBA48) + addressing = GRUB_ATA_LBA; + if (ata->dma) + { + cmd = GRUB_ATA_CMD_READ_SECTORS_DMA; + cmd_write = GRUB_ATA_CMD_WRITE_SECTORS_DMA; + } + else + { + cmd = GRUB_ATA_CMD_READ_SECTORS; + cmd_write = GRUB_ATA_CMD_WRITE_SECTORS; + } + } + + if (addressing != GRUB_ATA_CHS) + batch = 256; + else + batch = 1; + + while (nsectors < size) + { + struct grub_disk_ata_pass_through_parms parms; + grub_err_t err; + + if (size - nsectors < batch) + batch = size - nsectors; + + grub_dprintf("ata", "rw=%d, sector=%llu, batch=%llu\n", rw, (unsigned long long) sector, (unsigned long long) batch); + grub_memset (&parms, 0, sizeof (parms)); + grub_ata_setaddress (ata, &parms, sector, batch, addressing); + parms.taskfile.cmd = (! rw ? cmd : cmd_write); + parms.buffer = buf; + parms.size = batch << ata->log_sector_size; + parms.write = rw; + if (ata->dma) + parms.dma = 1; + + err = ata->dev->readwrite (ata, &parms, 0); + if (err) + return err; + if (parms.size != batch << ata->log_sector_size) + return grub_error (GRUB_ERR_READ_ERROR, "incomplete read"); + buf += batch << ata->log_sector_size; + sector += batch; + nsectors += batch; + } + + return GRUB_ERR_NONE; +} + + + +static inline void +grub_ata_real_close (struct grub_ata *ata) +{ + if (ata->dev->close) + ata->dev->close (ata); +} + +static struct grub_ata * +grub_ata_real_open (int id, int bus) +{ + struct grub_ata *ata; + grub_ata_dev_t p; + + ata = grub_zalloc (sizeof (*ata)); + if (!ata) + return NULL; + for (p = grub_ata_dev_list; p; p = p->next) + { + grub_err_t err; + if (p->open (id, bus, ata)) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + ata->dev = p; + /* Use the IDENTIFY DEVICE command to query the device. */ + err = grub_ata_identify (ata); + if (err) + { + if (!grub_errno) + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such ATA device"); + grub_free (ata); + return NULL; + } + return ata; + } + grub_free (ata); + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such ATA device"); + return NULL; +} + +/* Context for grub_ata_iterate. */ +struct grub_ata_iterate_ctx +{ + grub_disk_dev_iterate_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_ata_iterate. */ +static int +grub_ata_iterate_iter (int id, int bus, void *data) +{ + struct grub_ata_iterate_ctx *ctx = data; + struct grub_ata *ata; + int ret; + char devname[40]; + + ata = grub_ata_real_open (id, bus); + + if (!ata) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + if (ata->atapi) + { + grub_ata_real_close (ata); + return 0; + } + grub_snprintf (devname, sizeof (devname), + "%s%d", grub_scsi_names[id], bus); + ret = ctx->hook (devname, ctx->hook_data); + grub_ata_real_close (ata); + return ret; +} + +static int +grub_ata_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_ata_iterate_ctx ctx = { hook, hook_data }; + grub_ata_dev_t p; + + for (p = grub_ata_dev_list; p; p = p->next) + if (p->iterate && p->iterate (grub_ata_iterate_iter, &ctx, pull)) + return 1; + return 0; +} + +static grub_err_t +grub_ata_open (const char *name, grub_disk_t disk) +{ + unsigned id, bus; + struct grub_ata *ata; + + for (id = 0; id < GRUB_SCSI_NUM_SUBSYSTEMS; id++) + if (grub_strncmp (grub_scsi_names[id], name, + grub_strlen (grub_scsi_names[id])) == 0 + && grub_isdigit (name[grub_strlen (grub_scsi_names[id])])) + break; + if (id == GRUB_SCSI_NUM_SUBSYSTEMS) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not an ATA harddisk"); + bus = grub_strtoul (name + grub_strlen (grub_scsi_names[id]), 0, 0); + ata = grub_ata_real_open (id, bus); + if (!ata) + return grub_errno; + + if (ata->atapi) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not an ATA harddisk"); + + disk->total_sectors = ata->size; + disk->max_agglomerate = (ata->maxbuffer >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS)); + if (disk->max_agglomerate > (256U >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS - ata->log_sector_size))) + disk->max_agglomerate = (256U >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS - ata->log_sector_size)); + + disk->log_sector_size = ata->log_sector_size; + + disk->id = grub_make_scsi_id (id, bus, 0); + + disk->data = ata; + + return 0; +} + +static void +grub_ata_close (grub_disk_t disk) +{ + struct grub_ata *ata = disk->data; + grub_ata_real_close (ata); +} + +static grub_err_t +grub_ata_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + return grub_ata_readwrite (disk, sector, size, buf, 0); +} + +static grub_err_t +grub_ata_write (grub_disk_t disk, + grub_disk_addr_t sector, + grub_size_t size, + const char *buf) +{ + return grub_ata_readwrite (disk, sector, size, (char *) buf, 1); +} + +static struct grub_disk_dev grub_atadisk_dev = + { + .name = "ATA", + .id = GRUB_DISK_DEVICE_ATA_ID, + .iterate = grub_ata_iterate, + .open = grub_ata_open, + .close = grub_ata_close, + .read = grub_ata_read, + .write = grub_ata_write, + .next = 0 + }; + + + +/* ATAPI code. */ + +static grub_err_t +grub_atapi_read (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, + grub_size_t size, char *buf) +{ + struct grub_ata *dev = scsi->data; + struct grub_disk_ata_pass_through_parms parms; + grub_err_t err; + + grub_dprintf("ata", "grub_atapi_read (size=%llu)\n", (unsigned long long) size); + grub_memset (&parms, 0, sizeof (parms)); + + parms.taskfile.disk = 0; + parms.taskfile.features = 0; + parms.taskfile.atapi_ireason = 0; + parms.taskfile.atapi_cnthigh = size >> 8; + parms.taskfile.atapi_cntlow = size & 0xff; + parms.taskfile.cmd = GRUB_ATA_CMD_PACKET; + parms.cmd = cmd; + parms.cmdsize = cmdsize; + + parms.size = size; + parms.buffer = buf; + + err = dev->dev->readwrite (dev, &parms, 0); + if (err) + return err; + + if (parms.size != size) + return grub_error (GRUB_ERR_READ_ERROR, "incomplete ATAPI read"); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_atapi_write (struct grub_scsi *scsi __attribute__((unused)), + grub_size_t cmdsize __attribute__((unused)), + char *cmd __attribute__((unused)), + grub_size_t size __attribute__((unused)), + const char *buf __attribute__((unused))) +{ + // XXX: scsi.mod does not use write yet. + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "ATAPI write not implemented"); +} + +static grub_err_t +grub_atapi_open (int id, int bus, struct grub_scsi *scsi) +{ + struct grub_ata *ata; + + ata = grub_ata_real_open (id, bus); + if (!ata) + return grub_errno; + + if (! ata->atapi) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such ATAPI device"); + + scsi->data = ata; + scsi->luns = 1; + + return GRUB_ERR_NONE; +} + +/* Context for grub_atapi_iterate. */ +struct grub_atapi_iterate_ctx +{ + grub_scsi_dev_iterate_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_atapi_iterate. */ +static int +grub_atapi_iterate_iter (int id, int bus, void *data) +{ + struct grub_atapi_iterate_ctx *ctx = data; + struct grub_ata *ata; + int ret; + + ata = grub_ata_real_open (id, bus); + + if (!ata) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + if (!ata->atapi) + { + grub_ata_real_close (ata); + return 0; + } + ret = ctx->hook (id, bus, 1, ctx->hook_data); + grub_ata_real_close (ata); + return ret; +} + +static int +grub_atapi_iterate (grub_scsi_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_atapi_iterate_ctx ctx = { hook, hook_data }; + grub_ata_dev_t p; + + for (p = grub_ata_dev_list; p; p = p->next) + if (p->iterate && p->iterate (grub_atapi_iterate_iter, &ctx, pull)) + return 1; + return 0; +} + +static void +grub_atapi_close (grub_scsi_t disk) +{ + struct grub_ata *ata = disk->data; + grub_ata_real_close (ata); +} + + +void +grub_ata_dev_register (grub_ata_dev_t dev) +{ + dev->next = grub_ata_dev_list; + grub_ata_dev_list = dev; +} + +void +grub_ata_dev_unregister (grub_ata_dev_t dev) +{ + grub_ata_dev_t *p, q; + + for (p = &grub_ata_dev_list, q = *p; q; p = &(q->next), q = q->next) + if (q == dev) + { + *p = q->next; + break; + } +} + +static struct grub_scsi_dev grub_atapi_dev = + { + .iterate = grub_atapi_iterate, + .open = grub_atapi_open, + .close = grub_atapi_close, + .read = grub_atapi_read, + .write = grub_atapi_write, + .next = 0 + }; + + + +GRUB_MOD_INIT(ata) +{ + grub_disk_dev_register (&grub_atadisk_dev); + + /* ATAPI devices are handled by scsi.mod. */ + grub_scsi_dev_register (&grub_atapi_dev); +} + +GRUB_MOD_FINI(ata) +{ + grub_scsi_dev_unregister (&grub_atapi_dev); + grub_disk_dev_unregister (&grub_atadisk_dev); +} diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c new file mode 100644 index 000000000..bd60a66b3 --- /dev/null +++ b/grub-core/disk/cryptodisk.c @@ -0,0 +1,1154 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2007,2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GRUB_UTIL +#include +#endif + +GRUB_MOD_LICENSE ("GPLv3+"); + +grub_cryptodisk_dev_t grub_cryptodisk_list; + +static const struct grub_arg_option options[] = + { + {"uuid", 'u', 0, N_("Mount by UUID."), 0, 0}, + /* TRANSLATORS: It's still restricted to cryptodisks only. */ + {"all", 'a', 0, N_("Mount all."), 0, 0}, + {"boot", 'b', 0, N_("Mount all volumes with `boot' flag set."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +/* Our irreducible polynom is x^128+x^7+x^2+x+1. Lowest byte of it is: */ +#define GF_POLYNOM 0x87 +static inline int GF_PER_SECTOR (const struct grub_cryptodisk *dev) +{ + return 1U << (dev->log_sector_size - GRUB_CRYPTODISK_GF_LOG_BYTES); +} + +static grub_cryptodisk_t cryptodisk_list = NULL; +static grub_uint8_t last_cryptodisk_id = 0; + +static void +gf_mul_x (grub_uint8_t *g) +{ + int over = 0, over2 = 0; + unsigned j; + + for (j = 0; j < GRUB_CRYPTODISK_GF_BYTES; j++) + { + over2 = !!(g[j] & 0x80); + g[j] <<= 1; + g[j] |= over; + over = over2; + } + if (over) + g[0] ^= GF_POLYNOM; +} + + +static void +gf_mul_x_be (grub_uint8_t *g) +{ + int over = 0, over2 = 0; + int j; + + for (j = (int) GRUB_CRYPTODISK_GF_BYTES - 1; j >= 0; j--) + { + over2 = !!(g[j] & 0x80); + g[j] <<= 1; + g[j] |= over; + over = over2; + } + if (over) + g[GRUB_CRYPTODISK_GF_BYTES - 1] ^= GF_POLYNOM; +} + +static void +gf_mul_be (grub_uint8_t *o, const grub_uint8_t *a, const grub_uint8_t *b) +{ + unsigned i; + grub_uint8_t t[GRUB_CRYPTODISK_GF_BYTES]; + grub_memset (o, 0, GRUB_CRYPTODISK_GF_BYTES); + grub_memcpy (t, b, GRUB_CRYPTODISK_GF_BYTES); + for (i = 0; i < GRUB_CRYPTODISK_GF_SIZE; i++) + { + if (((a[GRUB_CRYPTODISK_GF_BYTES - i / GRUB_CHAR_BIT - 1] >> (i % GRUB_CHAR_BIT))) & 1) + grub_crypto_xor (o, o, t, GRUB_CRYPTODISK_GF_BYTES); + gf_mul_x_be (t); + } +} + +static gcry_err_code_t +grub_crypto_pcbc_decrypt (grub_crypto_cipher_handle_t cipher, + void *out, void *in, grub_size_t size, + void *iv) +{ + grub_uint8_t *inptr, *outptr, *end; + grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE]; + grub_size_t blocksize; + if (!cipher->cipher->decrypt) + return GPG_ERR_NOT_SUPPORTED; + blocksize = cipher->cipher->blocksize; + if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0) + || ((size & (blocksize - 1)) != 0)) + return GPG_ERR_INV_ARG; + if (blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE) + return GPG_ERR_INV_ARG; + end = (grub_uint8_t *) in + size; + for (inptr = in, outptr = out; inptr < end; + inptr += blocksize, outptr += blocksize) + { + grub_memcpy (ivt, inptr, blocksize); + cipher->cipher->decrypt (cipher->ctx, outptr, inptr); + grub_crypto_xor (outptr, outptr, iv, blocksize); + grub_crypto_xor (iv, ivt, outptr, blocksize); + } + return GPG_ERR_NO_ERROR; +} + +static gcry_err_code_t +grub_crypto_pcbc_encrypt (grub_crypto_cipher_handle_t cipher, + void *out, void *in, grub_size_t size, + void *iv) +{ + grub_uint8_t *inptr, *outptr, *end; + grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE]; + grub_size_t blocksize; + if (!cipher->cipher->encrypt) + return GPG_ERR_NOT_SUPPORTED; + blocksize = cipher->cipher->blocksize; + if (blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE) + return GPG_ERR_INV_ARG; + if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0) + || ((size & (blocksize - 1)) != 0)) + return GPG_ERR_INV_ARG; + end = (grub_uint8_t *) in + size; + for (inptr = in, outptr = out; inptr < end; + inptr += blocksize, outptr += blocksize) + { + grub_memcpy (ivt, inptr, blocksize); + grub_crypto_xor (outptr, outptr, iv, blocksize); + cipher->cipher->encrypt (cipher->ctx, outptr, inptr); + grub_crypto_xor (iv, ivt, outptr, blocksize); + } + return GPG_ERR_NO_ERROR; +} + +struct lrw_sector +{ + grub_uint8_t low[GRUB_CRYPTODISK_GF_BYTES]; + grub_uint8_t high[GRUB_CRYPTODISK_GF_BYTES]; + grub_uint8_t low_byte, low_byte_c; +}; + +static void +generate_lrw_sector (struct lrw_sector *sec, + const struct grub_cryptodisk *dev, + const grub_uint8_t *iv) +{ + grub_uint8_t idx[GRUB_CRYPTODISK_GF_BYTES]; + grub_uint16_t c; + int j; + grub_memcpy (idx, iv, GRUB_CRYPTODISK_GF_BYTES); + sec->low_byte = (idx[GRUB_CRYPTODISK_GF_BYTES - 1] + & (GF_PER_SECTOR (dev) - 1)); + sec->low_byte_c = (((GF_PER_SECTOR (dev) - 1) & ~sec->low_byte) + 1); + idx[GRUB_CRYPTODISK_GF_BYTES - 1] &= ~(GF_PER_SECTOR (dev) - 1); + gf_mul_be (sec->low, dev->lrw_key, idx); + if (!sec->low_byte) + return; + + c = idx[GRUB_CRYPTODISK_GF_BYTES - 1] + GF_PER_SECTOR (dev); + if (c & 0x100) + { + for (j = GRUB_CRYPTODISK_GF_BYTES - 2; j >= 0; j--) + { + idx[j]++; + if (idx[j] != 0) + break; + } + } + idx[GRUB_CRYPTODISK_GF_BYTES - 1] = c; + gf_mul_be (sec->high, dev->lrw_key, idx); +} + +static void __attribute__ ((unused)) +lrw_xor (const struct lrw_sector *sec, + const struct grub_cryptodisk *dev, + grub_uint8_t *b) +{ + unsigned i; + + for (i = 0; i < sec->low_byte_c * GRUB_CRYPTODISK_GF_BYTES; + i += GRUB_CRYPTODISK_GF_BYTES) + grub_crypto_xor (b + i, b + i, sec->low, GRUB_CRYPTODISK_GF_BYTES); + grub_crypto_xor (b, b, dev->lrw_precalc + GRUB_CRYPTODISK_GF_BYTES * sec->low_byte, + sec->low_byte_c * GRUB_CRYPTODISK_GF_BYTES); + if (!sec->low_byte) + return; + + for (i = sec->low_byte_c * GRUB_CRYPTODISK_GF_BYTES; + i < (1U << dev->log_sector_size); i += GRUB_CRYPTODISK_GF_BYTES) + grub_crypto_xor (b + i, b + i, sec->high, GRUB_CRYPTODISK_GF_BYTES); + grub_crypto_xor (b + sec->low_byte_c * GRUB_CRYPTODISK_GF_BYTES, + b + sec->low_byte_c * GRUB_CRYPTODISK_GF_BYTES, + dev->lrw_precalc, sec->low_byte * GRUB_CRYPTODISK_GF_BYTES); +} + +static gcry_err_code_t +grub_cryptodisk_endecrypt (struct grub_cryptodisk *dev, + grub_uint8_t * data, grub_size_t len, + grub_disk_addr_t sector, int do_encrypt) +{ + grub_size_t i; + gcry_err_code_t err; + + if (dev->cipher->cipher->blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE) + return GPG_ERR_INV_ARG; + + /* The only mode without IV. */ + if (dev->mode == GRUB_CRYPTODISK_MODE_ECB && !dev->rekey) + return (do_encrypt ? grub_crypto_ecb_encrypt (dev->cipher, data, data, len) + : grub_crypto_ecb_decrypt (dev->cipher, data, data, len)); + + for (i = 0; i < len; i += (1U << dev->log_sector_size)) + { + grub_size_t sz = ((dev->cipher->cipher->blocksize + + sizeof (grub_uint32_t) - 1) + / sizeof (grub_uint32_t)); + grub_uint32_t iv[(GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE + 3) / 4]; + + if (dev->rekey) + { + grub_uint64_t zone = sector >> dev->rekey_shift; + if (zone != dev->last_rekey) + { + err = dev->rekey (dev, zone); + if (err) + return err; + dev->last_rekey = zone; + } + } + + grub_memset (iv, 0, sizeof (iv)); + switch (dev->mode_iv) + { + case GRUB_CRYPTODISK_MODE_IV_NULL: + break; + case GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64_HASH: + { + grub_uint64_t tmp; + void *ctx; + + ctx = grub_zalloc (dev->iv_hash->contextsize); + if (!ctx) + return GPG_ERR_OUT_OF_MEMORY; + + tmp = grub_cpu_to_le64 (sector << dev->log_sector_size); + dev->iv_hash->init (ctx); + dev->iv_hash->write (ctx, dev->iv_prefix, dev->iv_prefix_len); + dev->iv_hash->write (ctx, &tmp, sizeof (tmp)); + dev->iv_hash->final (ctx); + + grub_memcpy (iv, dev->iv_hash->read (ctx), sizeof (iv)); + grub_free (ctx); + } + break; + case GRUB_CRYPTODISK_MODE_IV_PLAIN64: + iv[1] = grub_cpu_to_le32 (sector >> 32); + /* FALLTHROUGH */ + case GRUB_CRYPTODISK_MODE_IV_PLAIN: + iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF); + break; + case GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64: + iv[1] = grub_cpu_to_le32 (sector >> (32 - dev->log_sector_size)); + iv[0] = grub_cpu_to_le32 ((sector << dev->log_sector_size) + & 0xFFFFFFFF); + break; + case GRUB_CRYPTODISK_MODE_IV_BENBI: + { + grub_uint64_t num = (sector << dev->benbi_log) + 1; + iv[sz - 2] = grub_cpu_to_be32 (num >> 32); + iv[sz - 1] = grub_cpu_to_be32 (num & 0xFFFFFFFF); + } + break; + case GRUB_CRYPTODISK_MODE_IV_ESSIV: + iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF); + err = grub_crypto_ecb_encrypt (dev->essiv_cipher, iv, iv, + dev->cipher->cipher->blocksize); + if (err) + return err; + } + + switch (dev->mode) + { + case GRUB_CRYPTODISK_MODE_CBC: + if (do_encrypt) + err = grub_crypto_cbc_encrypt (dev->cipher, data + i, data + i, + (1U << dev->log_sector_size), iv); + else + err = grub_crypto_cbc_decrypt (dev->cipher, data + i, data + i, + (1U << dev->log_sector_size), iv); + if (err) + return err; + break; + + case GRUB_CRYPTODISK_MODE_PCBC: + if (do_encrypt) + err = grub_crypto_pcbc_encrypt (dev->cipher, data + i, data + i, + (1U << dev->log_sector_size), iv); + else + err = grub_crypto_pcbc_decrypt (dev->cipher, data + i, data + i, + (1U << dev->log_sector_size), iv); + if (err) + return err; + break; + case GRUB_CRYPTODISK_MODE_XTS: + { + unsigned j; + err = grub_crypto_ecb_encrypt (dev->secondary_cipher, iv, iv, + dev->cipher->cipher->blocksize); + if (err) + return err; + + for (j = 0; j < (1U << dev->log_sector_size); + j += dev->cipher->cipher->blocksize) + { + grub_crypto_xor (data + i + j, data + i + j, iv, + dev->cipher->cipher->blocksize); + if (do_encrypt) + err = grub_crypto_ecb_encrypt (dev->cipher, data + i + j, + data + i + j, + dev->cipher->cipher->blocksize); + else + err = grub_crypto_ecb_decrypt (dev->cipher, data + i + j, + data + i + j, + dev->cipher->cipher->blocksize); + if (err) + return err; + grub_crypto_xor (data + i + j, data + i + j, iv, + dev->cipher->cipher->blocksize); + gf_mul_x ((grub_uint8_t *) iv); + } + } + break; + case GRUB_CRYPTODISK_MODE_LRW: + { + struct lrw_sector sec; + + generate_lrw_sector (&sec, dev, (grub_uint8_t *) iv); + lrw_xor (&sec, dev, data + i); + + if (do_encrypt) + err = grub_crypto_ecb_encrypt (dev->cipher, data + i, + data + i, + (1U << dev->log_sector_size)); + else + err = grub_crypto_ecb_decrypt (dev->cipher, data + i, + data + i, + (1U << dev->log_sector_size)); + if (err) + return err; + lrw_xor (&sec, dev, data + i); + } + break; + case GRUB_CRYPTODISK_MODE_ECB: + if (do_encrypt) + err = grub_crypto_ecb_encrypt (dev->cipher, data + i, data + i, + (1U << dev->log_sector_size)); + else + err = grub_crypto_ecb_decrypt (dev->cipher, data + i, data + i, + (1U << dev->log_sector_size)); + if (err) + return err; + break; + default: + return GPG_ERR_NOT_IMPLEMENTED; + } + sector++; + } + return GPG_ERR_NO_ERROR; +} + +gcry_err_code_t +grub_cryptodisk_decrypt (struct grub_cryptodisk *dev, + grub_uint8_t * data, grub_size_t len, + grub_disk_addr_t sector) +{ + return grub_cryptodisk_endecrypt (dev, data, len, sector, 0); +} + +gcry_err_code_t +grub_cryptodisk_setkey (grub_cryptodisk_t dev, grub_uint8_t *key, grub_size_t keysize) +{ + gcry_err_code_t err; + int real_keysize; + + real_keysize = keysize; + if (dev->mode == GRUB_CRYPTODISK_MODE_XTS) + real_keysize /= 2; + if (dev->mode == GRUB_CRYPTODISK_MODE_LRW) + real_keysize -= dev->cipher->cipher->blocksize; + + /* Set the PBKDF2 output as the cipher key. */ + err = grub_crypto_cipher_set_key (dev->cipher, key, real_keysize); + if (err) + return err; + grub_memcpy (dev->key, key, keysize); + dev->keysize = keysize; + + /* Configure ESSIV if necessary. */ + if (dev->mode_iv == GRUB_CRYPTODISK_MODE_IV_ESSIV) + { + grub_size_t essiv_keysize = dev->essiv_hash->mdlen; + grub_uint8_t hashed_key[GRUB_CRYPTO_MAX_MDLEN]; + if (essiv_keysize > GRUB_CRYPTO_MAX_MDLEN) + return GPG_ERR_INV_ARG; + + grub_crypto_hash (dev->essiv_hash, hashed_key, key, keysize); + err = grub_crypto_cipher_set_key (dev->essiv_cipher, + hashed_key, essiv_keysize); + if (err) + return err; + } + if (dev->mode == GRUB_CRYPTODISK_MODE_XTS) + { + err = grub_crypto_cipher_set_key (dev->secondary_cipher, + key + real_keysize, + keysize / 2); + if (err) + return err; + } + + if (dev->mode == GRUB_CRYPTODISK_MODE_LRW) + { + unsigned i; + grub_uint8_t idx[GRUB_CRYPTODISK_GF_BYTES]; + + grub_free (dev->lrw_precalc); + grub_memcpy (dev->lrw_key, key + real_keysize, + dev->cipher->cipher->blocksize); + dev->lrw_precalc = grub_malloc ((1U << dev->log_sector_size)); + if (!dev->lrw_precalc) + return GPG_ERR_OUT_OF_MEMORY; + grub_memset (idx, 0, GRUB_CRYPTODISK_GF_BYTES); + for (i = 0; i < (1U << dev->log_sector_size); + i += GRUB_CRYPTODISK_GF_BYTES) + { + idx[GRUB_CRYPTODISK_GF_BYTES - 1] = i / GRUB_CRYPTODISK_GF_BYTES; + gf_mul_be (dev->lrw_precalc + i, idx, dev->lrw_key); + } + } + return GPG_ERR_NO_ERROR; +} + +static int +grub_cryptodisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + grub_cryptodisk_t i; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + for (i = cryptodisk_list; i != NULL; i = i->next) + { + char buf[30]; + grub_snprintf (buf, sizeof (buf), "crypto%lu", i->id); + if (hook (buf, hook_data)) + return 1; + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cryptodisk_open (const char *name, grub_disk_t disk) +{ + grub_cryptodisk_t dev; + + if (grub_memcmp (name, "crypto", sizeof ("crypto") - 1) != 0) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "No such device"); + + if (grub_memcmp (name, "cryptouuid/", sizeof ("cryptouuid/") - 1) == 0) + { + for (dev = cryptodisk_list; dev != NULL; dev = dev->next) + if (grub_strcasecmp (name + sizeof ("cryptouuid/") - 1, dev->uuid) == 0) + break; + } + else + { + unsigned long id = grub_strtoul (name + sizeof ("crypto") - 1, 0, 0); + if (grub_errno) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "No such device"); + /* Search for requested device in the list of CRYPTODISK devices. */ + for (dev = cryptodisk_list; dev != NULL; dev = dev->next) + if (dev->id == id) + break; + } + if (!dev) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "No such device"); + + disk->log_sector_size = dev->log_sector_size; + +#ifdef GRUB_UTIL + if (dev->cheat) + { + if (!GRUB_UTIL_FD_IS_VALID (dev->cheat_fd)) + dev->cheat_fd = grub_util_fd_open (dev->cheat, GRUB_UTIL_FD_O_RDONLY); + if (!GRUB_UTIL_FD_IS_VALID (dev->cheat_fd)) + return grub_error (GRUB_ERR_IO, N_("cannot open `%s': %s"), + dev->cheat, grub_util_fd_strerror ()); + } +#endif + + if (!dev->source_disk) + { + grub_dprintf ("cryptodisk", "Opening device %s\n", name); + /* Try to open the source disk and populate the requested disk. */ + dev->source_disk = grub_disk_open (dev->source); + if (!dev->source_disk) + return grub_errno; + } + + disk->data = dev; + disk->total_sectors = dev->total_length; + disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; + disk->id = dev->id; + dev->ref++; + return GRUB_ERR_NONE; +} + +static void +grub_cryptodisk_close (grub_disk_t disk) +{ + grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data; + grub_dprintf ("cryptodisk", "Closing disk\n"); + + dev->ref--; + + if (dev->ref != 0) + return; +#ifdef GRUB_UTIL + if (dev->cheat) + { + grub_util_fd_close (dev->cheat_fd); + dev->cheat_fd = GRUB_UTIL_FD_INVALID; + } +#endif + grub_disk_close (dev->source_disk); + dev->source_disk = NULL; +} + +static grub_err_t +grub_cryptodisk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data; + grub_err_t err; + gcry_err_code_t gcry_err; + +#ifdef GRUB_UTIL + if (dev->cheat) + { + int r; + r = grub_util_fd_seek (dev->cheat_fd, sector << disk->log_sector_size); + if (r) + return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"), + dev->cheat, grub_util_fd_strerror ()); + if (grub_util_fd_read (dev->cheat_fd, buf, size << disk->log_sector_size) + != (ssize_t) (size << disk->log_sector_size)) + return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"), + dev->cheat, grub_util_fd_strerror ()); + return GRUB_ERR_NONE; + } +#endif + + grub_dprintf ("cryptodisk", + "Reading %" PRIuGRUB_SIZE " sectors from sector 0x%" + PRIxGRUB_UINT64_T " with offset of %" PRIuGRUB_UINT64_T "\n", + size, sector, dev->offset); + + err = grub_disk_read (dev->source_disk, + (sector << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)) + dev->offset, 0, + size << disk->log_sector_size, buf); + if (err) + { + grub_dprintf ("cryptodisk", "grub_disk_read failed with error %d\n", err); + return err; + } + gcry_err = grub_cryptodisk_endecrypt (dev, (grub_uint8_t *) buf, + size << disk->log_sector_size, + sector, 0); + return grub_crypto_gcry_error (gcry_err); +} + +static grub_err_t +grub_cryptodisk_write (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data; + gcry_err_code_t gcry_err; + char *tmp; + grub_err_t err; + +#ifdef GRUB_UTIL + if (dev->cheat) + { + int r; + r = grub_util_fd_seek (dev->cheat_fd, sector << disk->log_sector_size); + if (r) + return grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"), + dev->cheat, grub_util_fd_strerror ()); + if (grub_util_fd_write (dev->cheat_fd, buf, size << disk->log_sector_size) + != (ssize_t) (size << disk->log_sector_size)) + return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"), + dev->cheat, grub_util_fd_strerror ()); + return GRUB_ERR_NONE; + } +#endif + + tmp = grub_malloc (size << disk->log_sector_size); + if (!tmp) + return grub_errno; + grub_memcpy (tmp, buf, size << disk->log_sector_size); + + grub_dprintf ("cryptodisk", + "Writing %" PRIuGRUB_SIZE " sectors to sector 0x%" + PRIxGRUB_UINT64_T " with offset of %" PRIuGRUB_UINT64_T "\n", + size, sector, dev->offset); + + gcry_err = grub_cryptodisk_endecrypt (dev, (grub_uint8_t *) tmp, + size << disk->log_sector_size, + sector, 1); + if (gcry_err) + { + grub_free (tmp); + return grub_crypto_gcry_error (gcry_err); + } + + /* Since ->write was called so disk.mod is loaded but be paranoid */ + + if (grub_disk_write_weak) + err = grub_disk_write_weak (dev->source_disk, + (sector << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)) + + dev->offset, + 0, size << disk->log_sector_size, tmp); + else + err = grub_error (GRUB_ERR_BUG, "disk.mod not loaded"); + grub_free (tmp); + return err; +} + +#ifdef GRUB_UTIL +static grub_disk_memberlist_t +grub_cryptodisk_memberlist (grub_disk_t disk) +{ + grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data; + grub_disk_memberlist_t list = NULL; + + list = grub_malloc (sizeof (*list)); + if (list) + { + list->disk = dev->source_disk; + list->next = NULL; + } + + return list; +} +#endif + +static void +cryptodisk_cleanup (void) +{ +#if 0 + grub_cryptodisk_t dev = cryptodisk_list; + grub_cryptodisk_t tmp; + + while (dev != NULL) + { + grub_free (dev->source); + grub_free (dev->cipher); + grub_free (dev->secondary_cipher); + grub_free (dev->essiv_cipher); + tmp = dev->next; + grub_free (dev); + dev = tmp; + } +#endif +} + +grub_err_t +grub_cryptodisk_insert (grub_cryptodisk_t newdev, const char *name, + grub_disk_t source) +{ + newdev->source = grub_strdup (name); + if (!newdev->source) + { + grub_free (newdev); + return grub_errno; + } + + newdev->id = last_cryptodisk_id++; + newdev->source_id = source->id; + newdev->source_dev_id = source->dev->id; + newdev->partition_start = grub_partition_get_start (source->partition); + newdev->next = cryptodisk_list; + cryptodisk_list = newdev; + + return GRUB_ERR_NONE; +} + +grub_cryptodisk_t +grub_cryptodisk_get_by_uuid (const char *uuid) +{ + grub_cryptodisk_t dev; + for (dev = cryptodisk_list; dev != NULL; dev = dev->next) + if (grub_strcasecmp (dev->uuid, uuid) == 0) + return dev; + return NULL; +} + +grub_cryptodisk_t +grub_cryptodisk_get_by_source_disk (grub_disk_t disk) +{ + grub_cryptodisk_t dev; + for (dev = cryptodisk_list; dev != NULL; dev = dev->next) + if (dev->source_id == disk->id && dev->source_dev_id == disk->dev->id) + if ((disk->partition && grub_partition_get_start (disk->partition) == dev->partition_start) || + (!disk->partition && dev->partition_start == 0)) + return dev; + return NULL; +} + +#ifdef GRUB_UTIL +grub_err_t +grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name, + grub_disk_t source, const char *cheat) +{ + newdev->cheat = grub_strdup (cheat); + newdev->source = grub_strdup (name); + if (!newdev->source || !newdev->cheat) + { + grub_free (newdev->source); + grub_free (newdev->cheat); + return grub_errno; + } + + newdev->cheat_fd = GRUB_UTIL_FD_INVALID; + newdev->source_id = source->id; + newdev->source_dev_id = source->dev->id; + newdev->partition_start = grub_partition_get_start (source->partition); + newdev->id = last_cryptodisk_id++; + newdev->next = cryptodisk_list; + cryptodisk_list = newdev; + + return GRUB_ERR_NONE; +} + +void +grub_util_cryptodisk_get_abstraction (grub_disk_t disk, + void (*cb) (const char *val, void *data), + void *data) +{ + grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data; + + cb ("cryptodisk", data); + cb (dev->modname, data); + + if (dev->cipher) + cb (dev->cipher->cipher->modname, data); + if (dev->secondary_cipher) + cb (dev->secondary_cipher->cipher->modname, data); + if (dev->essiv_cipher) + cb (dev->essiv_cipher->cipher->modname, data); + if (dev->hash) + cb (dev->hash->modname, data); + if (dev->essiv_hash) + cb (dev->essiv_hash->modname, data); + if (dev->iv_hash) + cb (dev->iv_hash->modname, data); +} + +const char * +grub_util_cryptodisk_get_uuid (grub_disk_t disk) +{ + grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data; + return dev->uuid; +} + +#endif + +static int check_boot, have_it; +static char *search_uuid; + +static void +cryptodisk_close (grub_cryptodisk_t dev) +{ + grub_crypto_cipher_close (dev->cipher); + grub_crypto_cipher_close (dev->secondary_cipher); + grub_crypto_cipher_close (dev->essiv_cipher); + grub_free (dev); +} + +static grub_err_t +grub_cryptodisk_scan_device_real (const char *name, grub_disk_t source) +{ + grub_err_t err; + grub_cryptodisk_t dev; + grub_cryptodisk_dev_t cr; + + dev = grub_cryptodisk_get_by_source_disk (source); + + if (dev) + return GRUB_ERR_NONE; + + FOR_CRYPTODISK_DEVS (cr) + { + dev = cr->scan (source, search_uuid, check_boot); + if (grub_errno) + return grub_errno; + if (!dev) + continue; + + err = cr->recover_key (source, dev); + if (err) + { + cryptodisk_close (dev); + return err; + } + + grub_cryptodisk_insert (dev, name, source); + + have_it = 1; + + return GRUB_ERR_NONE; + } + return GRUB_ERR_NONE; +} + +#ifdef GRUB_UTIL +#include +grub_err_t +grub_cryptodisk_cheat_mount (const char *sourcedev, const char *cheat) +{ + grub_err_t err; + grub_cryptodisk_t dev; + grub_cryptodisk_dev_t cr; + grub_disk_t source; + + /* Try to open disk. */ + source = grub_disk_open (sourcedev); + if (!source) + return grub_errno; + + dev = grub_cryptodisk_get_by_source_disk (source); + + if (dev) + { + grub_disk_close (source); + return GRUB_ERR_NONE; + } + + FOR_CRYPTODISK_DEVS (cr) + { + dev = cr->scan (source, search_uuid, check_boot); + if (grub_errno) + return grub_errno; + if (!dev) + continue; + + grub_util_info ("cheatmounted %s (%s) at %s", sourcedev, dev->modname, + cheat); + err = grub_cryptodisk_cheat_insert (dev, sourcedev, source, cheat); + grub_disk_close (source); + if (err) + grub_free (dev); + + return GRUB_ERR_NONE; + } + + grub_disk_close (source); + + return GRUB_ERR_NONE; +} +#endif + +static int +grub_cryptodisk_scan_device (const char *name, + void *data __attribute__ ((unused))) +{ + grub_err_t err; + grub_disk_t source; + + /* Try to open disk. */ + source = grub_disk_open (name); + if (!source) + { + grub_print_error (); + return 0; + } + + err = grub_cryptodisk_scan_device_real (name, source); + + grub_disk_close (source); + + if (err) + grub_print_error (); + return have_it && search_uuid ? 1 : 0; +} + +static grub_err_t +grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + + if (argc < 1 && !state[1].set && !state[2].set) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required"); + + have_it = 0; + if (state[0].set) + { + grub_cryptodisk_t dev; + + dev = grub_cryptodisk_get_by_uuid (args[0]); + if (dev) + { + grub_dprintf ("cryptodisk", + "already mounted as crypto%lu\n", dev->id); + return GRUB_ERR_NONE; + } + + check_boot = state[2].set; + search_uuid = args[0]; + grub_device_iterate (&grub_cryptodisk_scan_device, NULL); + search_uuid = NULL; + + if (!have_it) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "no such cryptodisk found"); + return GRUB_ERR_NONE; + } + else if (state[1].set || (argc == 0 && state[2].set)) + { + search_uuid = NULL; + check_boot = state[2].set; + grub_device_iterate (&grub_cryptodisk_scan_device, NULL); + search_uuid = NULL; + return GRUB_ERR_NONE; + } + else + { + grub_err_t err; + grub_disk_t disk; + grub_cryptodisk_t dev; + char *diskname; + char *disklast = NULL; + grub_size_t len; + + search_uuid = NULL; + check_boot = state[2].set; + diskname = args[0]; + len = grub_strlen (diskname); + if (len && diskname[0] == '(' && diskname[len - 1] == ')') + { + disklast = &diskname[len - 1]; + *disklast = '\0'; + diskname++; + } + + disk = grub_disk_open (diskname); + if (!disk) + { + if (disklast) + *disklast = ')'; + return grub_errno; + } + + dev = grub_cryptodisk_get_by_source_disk (disk); + if (dev) + { + grub_dprintf ("cryptodisk", "already mounted as crypto%lu\n", dev->id); + grub_disk_close (disk); + if (disklast) + *disklast = ')'; + return GRUB_ERR_NONE; + } + + err = grub_cryptodisk_scan_device_real (diskname, disk); + + grub_disk_close (disk); + if (disklast) + *disklast = ')'; + + return err; + } +} + +static struct grub_disk_dev grub_cryptodisk_dev = { + .name = "cryptodisk", + .id = GRUB_DISK_DEVICE_CRYPTODISK_ID, + .iterate = grub_cryptodisk_iterate, + .open = grub_cryptodisk_open, + .close = grub_cryptodisk_close, + .read = grub_cryptodisk_read, + .write = grub_cryptodisk_write, +#ifdef GRUB_UTIL + .memberlist = grub_cryptodisk_memberlist, +#endif + .next = 0 +}; + +static char +hex (grub_uint8_t val) +{ + if (val < 10) + return '0' + val; + return 'a' + val - 10; +} + +/* Open a file named NAME and initialize FILE. */ +static char * +luks_script_get (grub_size_t *sz) +{ + grub_cryptodisk_t i; + grub_size_t size = 0; + char *ptr, *ret; + + *sz = 0; + + for (i = cryptodisk_list; i != NULL; i = i->next) + if (grub_strcmp (i->modname, "luks") == 0) + { + size += sizeof ("luks_mount "); + size += grub_strlen (i->uuid); + size += grub_strlen (i->cipher->cipher->name); + size += 54; + if (i->essiv_hash) + size += grub_strlen (i->essiv_hash->name); + size += i->keysize * 2; + } + + ret = grub_malloc (size + 1); + if (!ret) + return 0; + + ptr = ret; + + for (i = cryptodisk_list; i != NULL; i = i->next) + if (grub_strcmp (i->modname, "luks") == 0) + { + unsigned j; + const char *iptr; + ptr = grub_stpcpy (ptr, "luks_mount "); + ptr = grub_stpcpy (ptr, i->uuid); + *ptr++ = ' '; + grub_snprintf (ptr, 21, "%" PRIuGRUB_UINT64_T " ", i->offset); + while (*ptr) + ptr++; + for (iptr = i->cipher->cipher->name; *iptr; iptr++) + *ptr++ = grub_tolower (*iptr); + switch (i->mode) + { + case GRUB_CRYPTODISK_MODE_ECB: + ptr = grub_stpcpy (ptr, "-ecb"); + break; + case GRUB_CRYPTODISK_MODE_CBC: + ptr = grub_stpcpy (ptr, "-cbc"); + break; + case GRUB_CRYPTODISK_MODE_PCBC: + ptr = grub_stpcpy (ptr, "-pcbc"); + break; + case GRUB_CRYPTODISK_MODE_XTS: + ptr = grub_stpcpy (ptr, "-xts"); + break; + case GRUB_CRYPTODISK_MODE_LRW: + ptr = grub_stpcpy (ptr, "-lrw"); + break; + } + + switch (i->mode_iv) + { + case GRUB_CRYPTODISK_MODE_IV_NULL: + ptr = grub_stpcpy (ptr, "-null"); + break; + case GRUB_CRYPTODISK_MODE_IV_PLAIN: + ptr = grub_stpcpy (ptr, "-plain"); + break; + case GRUB_CRYPTODISK_MODE_IV_PLAIN64: + ptr = grub_stpcpy (ptr, "-plain64"); + break; + case GRUB_CRYPTODISK_MODE_IV_BENBI: + ptr = grub_stpcpy (ptr, "-benbi"); + break; + case GRUB_CRYPTODISK_MODE_IV_ESSIV: + ptr = grub_stpcpy (ptr, "-essiv:"); + ptr = grub_stpcpy (ptr, i->essiv_hash->name); + break; + case GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64: + case GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64_HASH: + break; + } + *ptr++ = ' '; + for (j = 0; j < i->keysize; j++) + { + *ptr++ = hex (i->key[j] >> 4); + *ptr++ = hex (i->key[j] & 0xf); + } + *ptr++ = '\n'; + } + *ptr = '\0'; + *sz = ptr - ret; + return ret; +} + +struct grub_procfs_entry luks_script = +{ + .name = "luks_script", + .get_contents = luks_script_get +}; + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT (cryptodisk) +{ + grub_disk_dev_register (&grub_cryptodisk_dev); + cmd = grub_register_extcmd ("cryptomount", grub_cmd_cryptomount, 0, + N_("SOURCE|-u UUID|-a|-b"), + N_("Mount a crypto device."), options); + grub_procfs_register ("luks_script", &luks_script); +} + +GRUB_MOD_FINI (cryptodisk) +{ + grub_disk_dev_unregister (&grub_cryptodisk_dev); + cryptodisk_cleanup (); + grub_procfs_unregister (&luks_script); +} diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c new file mode 100644 index 000000000..6f901c0ad --- /dev/null +++ b/grub-core/disk/diskfilter.c @@ -0,0 +1,1350 @@ +/* diskfilter.c - module to read RAID arrays. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#ifdef GRUB_UTIL +#include +#include +#endif + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Linked list of DISKFILTER arrays. */ +static struct grub_diskfilter_vg *array_list; +grub_raid5_recover_func_t grub_raid5_recover_func; +grub_raid6_recover_func_t grub_raid6_recover_func; +grub_diskfilter_t grub_diskfilter_list; +static int inscnt = 0; +static int lv_num = 0; + +static struct grub_diskfilter_lv * +find_lv (const char *name); +static int is_lv_readable (struct grub_diskfilter_lv *lv, int easily); + + + +static grub_err_t +is_node_readable (const struct grub_diskfilter_node *node, int easily) +{ + /* Check whether we actually know the physical volume we want to + read from. */ + if (node->pv) + return !!(node->pv->disk); + if (node->lv) + return is_lv_readable (node->lv, easily); + return 0; +} + +static int +is_lv_readable (struct grub_diskfilter_lv *lv, int easily) +{ + unsigned i, j; + if (!lv) + return 0; + for (i = 0; i < lv->segment_count; i++) + { + int need = lv->segments[i].node_count, have = 0; + switch (lv->segments[i].type) + { + case GRUB_DISKFILTER_RAID6: + if (!easily) + need--; + /* Fallthrough. */ + case GRUB_DISKFILTER_RAID4: + case GRUB_DISKFILTER_RAID5: + if (!easily) + need--; + /* Fallthrough. */ + case GRUB_DISKFILTER_STRIPED: + break; + + case GRUB_DISKFILTER_MIRROR: + need = 1; + break; + + case GRUB_DISKFILTER_RAID10: + { + unsigned int n; + n = lv->segments[i].layout & 0xFF; + if (n == 1) + n = (lv->segments[i].layout >> 8) & 0xFF; + need = lv->segments[i].node_count - n + 1; + } + break; + } + for (j = 0; j < lv->segments[i].node_count; j++) + { + if (is_node_readable (lv->segments[i].nodes + j, easily)) + have++; + if (have >= need) + break; + } + if (have < need) + return 0; + } + + return 1; +} + +static grub_err_t +insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id, + struct grub_diskfilter_vg *array, + grub_disk_addr_t start_sector, + grub_diskfilter_t diskfilter __attribute__ ((unused))); + +static int +is_valid_diskfilter_name (const char *name) +{ + return (grub_memcmp (name, "md", sizeof ("md") - 1) == 0 + || grub_memcmp (name, "lvm/", sizeof ("lvm/") - 1) == 0 + || grub_memcmp (name, "lvmid/", sizeof ("lvmid/") - 1) == 0 + || grub_memcmp (name, "ldm/", sizeof ("ldm/") - 1) == 0); +} + +/* Helper for scan_disk. */ +static int +scan_disk_partition_iter (grub_disk_t disk, grub_partition_t p, void *data) +{ + const char *name = data; + struct grub_diskfilter_vg *arr; + grub_disk_addr_t start_sector; + struct grub_diskfilter_pv_id id; + grub_diskfilter_t diskfilter; + + grub_dprintf ("diskfilter", "Scanning for DISKFILTER devices on disk %s\n", + name); +#ifdef GRUB_UTIL + grub_util_info ("Scanning for DISKFILTER devices on disk %s", name); +#endif + + disk->partition = p; + + for (arr = array_list; arr != NULL; arr = arr->next) + { + struct grub_diskfilter_pv *m; + for (m = arr->pvs; m; m = m->next) + if (m->disk && m->disk->id == disk->id + && m->disk->dev->id == disk->dev->id + && m->part_start == grub_partition_get_start (disk->partition) + && m->part_size == grub_disk_get_size (disk)) + return 0; + } + + for (diskfilter = grub_diskfilter_list; diskfilter; diskfilter = diskfilter->next) + { +#ifdef GRUB_UTIL + grub_util_info ("Scanning for %s devices on disk %s", + diskfilter->name, name); +#endif + id.uuid = 0; + id.uuidlen = 0; + arr = diskfilter->detect (disk, &id, &start_sector); + if (arr && + (! insert_array (disk, &id, arr, start_sector, diskfilter))) + { + if (id.uuidlen) + grub_free (id.uuid); + return 0; + } + if (arr && id.uuidlen) + grub_free (id.uuid); + + /* This error usually means it's not diskfilter, no need to display + it. */ + if (grub_errno != GRUB_ERR_OUT_OF_RANGE) + grub_print_error (); + + grub_errno = GRUB_ERR_NONE; + } + + return 0; +} + +static int +scan_disk (const char *name, int accept_diskfilter) +{ + grub_disk_t disk; + static int scan_depth = 0; + + if (!accept_diskfilter && is_valid_diskfilter_name (name)) + return 0; + + if (scan_depth > 100) + return 0; + + scan_depth++; + disk = grub_disk_open (name); + if (!disk) + { + grub_errno = GRUB_ERR_NONE; + scan_depth--; + return 0; + } + scan_disk_partition_iter (disk, 0, (void *) name); + grub_partition_iterate (disk, scan_disk_partition_iter, (void *) name); + grub_disk_close (disk); + scan_depth--; + return 0; +} + +static int +scan_disk_hook (const char *name, void *data __attribute__ ((unused))) +{ + return scan_disk (name, 0); +} + +static void +scan_devices (const char *arname) +{ + grub_disk_dev_t p; + grub_disk_pull_t pull; + struct grub_diskfilter_vg *vg; + struct grub_diskfilter_lv *lv = NULL; + int scan_depth; + int need_rescan; + + for (pull = 0; pull < GRUB_DISK_PULL_MAX; pull++) + for (p = grub_disk_dev_list; p; p = p->next) + if (p->id != GRUB_DISK_DEVICE_DISKFILTER_ID + && p->iterate) + { + if ((p->iterate) (scan_disk_hook, NULL, pull)) + return; + if (arname && is_lv_readable (find_lv (arname), 1)) + return; + } + + scan_depth = 0; + need_rescan = 1; + while (need_rescan && scan_depth++ < 100) + { + need_rescan = 0; + for (vg = array_list; vg; vg = vg->next) + { + if (vg->lvs) + for (lv = vg->lvs; lv; lv = lv->next) + if (!lv->scanned && lv->fullname && lv->became_readable_at) + { + scan_disk (lv->fullname, 1); + lv->scanned = 1; + need_rescan = 1; + } + } + } + + if (need_rescan) + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "DISKFILTER scan depth exceeded"); +} + +static int +grub_diskfilter_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_diskfilter_vg *array; + int islcnt = 0; + + if (pull == GRUB_DISK_PULL_RESCAN) + { + islcnt = inscnt + 1; + scan_devices (NULL); + } + + if (pull != GRUB_DISK_PULL_NONE && pull != GRUB_DISK_PULL_RESCAN) + return 0; + + for (array = array_list; array; array = array->next) + { + struct grub_diskfilter_lv *lv; + if (array->lvs) + for (lv = array->lvs; lv; lv = lv->next) + if (lv->visible && lv->fullname && lv->became_readable_at >= islcnt) + { + if (hook (lv->fullname, hook_data)) + return 1; + } + } + + return 0; +} + +#ifdef GRUB_UTIL +static grub_disk_memberlist_t +grub_diskfilter_memberlist (grub_disk_t disk) +{ + struct grub_diskfilter_lv *lv = disk->data; + grub_disk_memberlist_t list = NULL, tmp; + struct grub_diskfilter_pv *pv; + grub_disk_pull_t pull; + grub_disk_dev_t p; + struct grub_diskfilter_vg *vg; + struct grub_diskfilter_lv *lv2 = NULL; + + if (!lv->vg->pvs) + return NULL; + + pv = lv->vg->pvs; + while (pv && pv->disk) + pv = pv->next; + + for (pull = 0; pv && pull < GRUB_DISK_PULL_MAX; pull++) + for (p = grub_disk_dev_list; pv && p; p = p->next) + if (p->id != GRUB_DISK_DEVICE_DISKFILTER_ID + && p->iterate) + { + (p->iterate) (scan_disk_hook, NULL, pull); + while (pv && pv->disk) + pv = pv->next; + } + + for (vg = array_list; pv && vg; vg = vg->next) + { + if (vg->lvs) + for (lv2 = vg->lvs; pv && lv2; lv2 = lv2->next) + if (!lv2->scanned && lv2->fullname && lv2->became_readable_at) + { + scan_disk (lv2->fullname, 1); + lv2->scanned = 1; + while (pv && pv->disk) + pv = pv->next; + } + } + + for (pv = lv->vg->pvs; pv; pv = pv->next) + { + if (!pv->disk) + { + /* TRANSLATORS: This message kicks in during the detection of + which modules needs to be included in core image. This happens + in the case of degraded RAID and means that autodetection may + fail to include some of modules. It's an installation time + message, not runtime message. */ + grub_util_warn (_("Couldn't find physical volume `%s'." + " Some modules may be missing from core image."), + pv->name); + continue; + } + tmp = grub_malloc (sizeof (*tmp)); + tmp->disk = pv->disk; + tmp->next = list; + list = tmp; + } + + return list; +} + +void +grub_diskfilter_get_partmap (grub_disk_t disk, + void (*cb) (const char *pm, void *data), + void *data) +{ + struct grub_diskfilter_lv *lv = disk->data; + struct grub_diskfilter_pv *pv; + + if (lv->vg->pvs) + for (pv = lv->vg->pvs; pv; pv = pv->next) + { + grub_size_t s; + if (!pv->disk) + { + /* TRANSLATORS: This message kicks in during the detection of + which modules needs to be included in core image. This happens + in the case of degraded RAID and means that autodetection may + fail to include some of modules. It's an installation time + message, not runtime message. */ + grub_util_warn (_("Couldn't find physical volume `%s'." + " Some modules may be missing from core image."), + pv->name); + continue; + } + for (s = 0; pv->partmaps[s]; s++) + cb (pv->partmaps[s], data); + } +} + +static const char * +grub_diskfilter_getname (struct grub_disk *disk) +{ + struct grub_diskfilter_lv *array = disk->data; + + return array->vg->driver->name; +} +#endif + +static inline char +hex2ascii (int c) +{ + if (c >= 10) + return 'a' + c - 10; + return c + '0'; +} + +static struct grub_diskfilter_lv * +find_lv (const char *name) +{ + struct grub_diskfilter_vg *vg; + struct grub_diskfilter_lv *lv = NULL; + + for (vg = array_list; vg; vg = vg->next) + { + if (vg->lvs) + for (lv = vg->lvs; lv; lv = lv->next) + if (((lv->fullname && grub_strcmp (lv->fullname, name) == 0) + || (lv->idname && grub_strcmp (lv->idname, name) == 0)) + && is_lv_readable (lv, 0)) + return lv; + } + return NULL; +} + +static grub_err_t +grub_diskfilter_open (const char *name, grub_disk_t disk) +{ + struct grub_diskfilter_lv *lv; + + if (!is_valid_diskfilter_name (name)) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown DISKFILTER device %s", + name); + + lv = find_lv (name); + + if (! lv) + { + scan_devices (name); + if (grub_errno) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + } + lv = find_lv (name); + } + + if (!lv) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown DISKFILTER device %s", + name); + + disk->id = lv->number; + disk->data = lv; + + disk->total_sectors = lv->size; + disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; + return 0; +} + +static void +grub_diskfilter_close (grub_disk_t disk __attribute ((unused))) +{ + return; +} + +static grub_err_t +read_lv (struct grub_diskfilter_lv *lv, grub_disk_addr_t sector, + grub_size_t size, char *buf); + +grub_err_t +grub_diskfilter_read_node (const struct grub_diskfilter_node *node, + grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + /* Check whether we actually know the physical volume we want to + read from. */ + if (node->pv) + { + if (node->pv->disk) + return grub_disk_read (node->pv->disk, sector + node->start + + node->pv->start_sector, + 0, size << GRUB_DISK_SECTOR_BITS, buf); + else + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + N_("physical volume %s not found"), node->pv->name); + + } + if (node->lv) + return read_lv (node->lv, sector + node->start, size, buf); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name); +} + + +static grub_err_t +validate_segment (struct grub_diskfilter_segment *seg); + +static grub_err_t +validate_lv (struct grub_diskfilter_lv *lv) +{ + unsigned int i; + if (!lv) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown volume"); + + if (!lv->vg || lv->vg->extent_size == 0) + return grub_error (GRUB_ERR_READ_ERROR, "invalid volume"); + + for (i = 0; i < lv->segment_count; i++) + { + grub_err_t err; + err = validate_segment (&lv->segments[i]); + if (err) + return err; + } + return GRUB_ERR_NONE; +} + + +static grub_err_t +validate_node (const struct grub_diskfilter_node *node) +{ + /* Check whether we actually know the physical volume we want to + read from. */ + if (node->pv) + return GRUB_ERR_NONE; + if (node->lv) + return validate_lv (node->lv); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name); +} + +static grub_err_t +validate_segment (struct grub_diskfilter_segment *seg) +{ + grub_err_t err; + + if (seg->stripe_size == 0 || seg->node_count == 0) + return grub_error(GRUB_ERR_BAD_FS, "invalid segment"); + + switch (seg->type) + { + case GRUB_DISKFILTER_RAID10: + { + grub_uint8_t near, far; + near = seg->layout & 0xFF; + far = (seg->layout >> 8) & 0xFF; + if ((seg->layout >> 16) == 0 && far == 0) + return grub_error(GRUB_ERR_BAD_FS, "invalid segment"); + if (near > seg->node_count) + return grub_error(GRUB_ERR_BAD_FS, "invalid segment"); + break; + } + + case GRUB_DISKFILTER_STRIPED: + case GRUB_DISKFILTER_MIRROR: + break; + + case GRUB_DISKFILTER_RAID4: + case GRUB_DISKFILTER_RAID5: + if (seg->node_count <= 1) + return grub_error(GRUB_ERR_BAD_FS, "invalid segment"); + break; + + case GRUB_DISKFILTER_RAID6: + if (seg->node_count <= 2) + return grub_error(GRUB_ERR_BAD_FS, "invalid segment"); + break; + + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported RAID level %d", seg->type); + } + + unsigned i; + for (i = 0; i < seg->node_count; i++) + { + err = validate_node (&seg->nodes[i]); + if (err) + return err; + } + return GRUB_ERR_NONE; + +} + +static grub_err_t +read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_err_t err; + switch (seg->type) + { + case GRUB_DISKFILTER_STRIPED: + if (seg->node_count == 1) + return grub_diskfilter_read_node (&seg->nodes[0], + sector, size, buf); + /* Fallthrough. */ + case GRUB_DISKFILTER_MIRROR: + case GRUB_DISKFILTER_RAID10: + { + grub_disk_addr_t read_sector, far_ofs; + grub_uint64_t disknr, b, near, far, ofs; + unsigned int i, j; + + read_sector = grub_divmod64 (sector, seg->stripe_size, &b); + far = ofs = near = 1; + far_ofs = 0; + + if (seg->type == 1) + near = seg->node_count; + else if (seg->type == 10) + { + near = seg->layout & 0xFF; + far = (seg->layout >> 8) & 0xFF; + if (seg->layout >> 16) + { + ofs = far; + far_ofs = 1; + } + else + far_ofs = grub_divmod64 (seg->raid_member_size, + far * seg->stripe_size, 0); + + far_ofs *= seg->stripe_size; + } + + read_sector = grub_divmod64 (read_sector * near, + seg->node_count, + &disknr); + + ofs *= seg->stripe_size; + read_sector *= ofs; + + while (1) + { + grub_size_t read_size; + + read_size = seg->stripe_size - b; + if (read_size > size) + read_size = size; + + err = 0; + for (i = 0; i < near; i++) + { + unsigned int k; + + k = disknr; + err = 0; + for (j = 0; j < far; j++) + { + if (grub_errno == GRUB_ERR_READ_ERROR + || grub_errno == GRUB_ERR_UNKNOWN_DEVICE) + grub_errno = GRUB_ERR_NONE; + + err = grub_diskfilter_read_node (&seg->nodes[k], + read_sector + + j * far_ofs + b, + read_size, + buf); + if (! err) + break; + else if (err != GRUB_ERR_READ_ERROR + && err != GRUB_ERR_UNKNOWN_DEVICE) + return err; + k++; + if (k == seg->node_count) + k = 0; + } + + if (! err) + break; + + disknr++; + if (disknr == seg->node_count) + { + disknr = 0; + read_sector += ofs; + } + } + + if (err) + return err; + + buf += read_size << GRUB_DISK_SECTOR_BITS; + size -= read_size; + if (! size) + return GRUB_ERR_NONE; + + b = 0; + disknr += (near - i); + while (disknr >= seg->node_count) + { + disknr -= seg->node_count; + read_sector += ofs; + } + } + } + + case GRUB_DISKFILTER_RAID4: + case GRUB_DISKFILTER_RAID5: + case GRUB_DISKFILTER_RAID6: + { + grub_disk_addr_t read_sector; + grub_uint64_t b, p, n, disknr, e; + + /* n = 1 for level 4 and 5, 2 for level 6. */ + n = seg->type / 3; + + /* Find the first sector to read. */ + read_sector = grub_divmod64 (sector, seg->stripe_size, &b); + read_sector = grub_divmod64 (read_sector, seg->node_count - n, + &disknr); + if (seg->type >= 5) + { + grub_divmod64 (read_sector, seg->node_count, &p); + + if (! (seg->layout & GRUB_RAID_LAYOUT_RIGHT_MASK)) + p = seg->node_count - 1 - p; + + if (seg->layout & GRUB_RAID_LAYOUT_SYMMETRIC_MASK) + { + disknr += p + n; + } + else + { + grub_uint32_t q; + + q = p + (n - 1); + if (q >= seg->node_count) + q -= seg->node_count; + + if (disknr >= p) + disknr += n; + else if (disknr >= q) + disknr += q + 1; + } + + if (disknr >= seg->node_count) + disknr -= seg->node_count; + } + else + p = seg->node_count - n; + read_sector *= seg->stripe_size; + + while (1) + { + grub_size_t read_size; + int next_level; + + read_size = seg->stripe_size - b; + if (read_size > size) + read_size = size; + + e = 0; + /* Reset read error. */ + if (grub_errno == GRUB_ERR_READ_ERROR + || grub_errno == GRUB_ERR_UNKNOWN_DEVICE) + grub_errno = GRUB_ERR_NONE; + + err = grub_diskfilter_read_node (&seg->nodes[disknr], + read_sector + b, + read_size, + buf); + + if ((err) && (err != GRUB_ERR_READ_ERROR + && err != GRUB_ERR_UNKNOWN_DEVICE)) + return err; + e++; + + if (err) + { + grub_errno = GRUB_ERR_NONE; + if (seg->type == GRUB_DISKFILTER_RAID6) + { + err = ((grub_raid6_recover_func) ? + (*grub_raid6_recover_func) (seg, disknr, p, + buf, read_sector + b, + read_size) : + grub_error (GRUB_ERR_BAD_DEVICE, + N_("module `%s' isn't loaded"), + "raid6rec")); + } + else + { + err = ((grub_raid5_recover_func) ? + (*grub_raid5_recover_func) (seg, disknr, + buf, read_sector + b, + read_size) : + grub_error (GRUB_ERR_BAD_DEVICE, + N_("module `%s' isn't loaded"), + "raid5rec")); + } + + if (err) + return err; + } + + buf += read_size << GRUB_DISK_SECTOR_BITS; + size -= read_size; + sector += read_size; + if (! size) + break; + + b = 0; + disknr++; + + if (seg->layout & GRUB_RAID_LAYOUT_SYMMETRIC_MASK) + { + if (disknr == seg->node_count) + disknr = 0; + + next_level = (disknr == p); + } + else + { + if (disknr == p) + disknr += n; + + next_level = (disknr >= seg->node_count); + } + + if (next_level) + { + read_sector += seg->stripe_size; + + if (seg->type >= 5) + { + if (seg->layout & GRUB_RAID_LAYOUT_RIGHT_MASK) + p = (p == seg->node_count - 1) ? 0 : p + 1; + else + p = (p == 0) ? seg->node_count - 1 : p - 1; + + if (seg->layout & GRUB_RAID_LAYOUT_SYMMETRIC_MASK) + { + disknr = p + n; + if (disknr >= seg->node_count) + disknr -= seg->node_count; + } + else + { + disknr -= seg->node_count; + if ((disknr >= p && disknr < p + n) + || (disknr + seg->node_count >= p + && disknr + seg->node_count < p + n)) + disknr = p + n; + if (disknr >= seg->node_count) + disknr -= seg->node_count; + } + } + else + disknr = 0; + } + } + } + return GRUB_ERR_NONE; + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported RAID level %d", seg->type); + } +} + +static grub_err_t +read_lv (struct grub_diskfilter_lv *lv, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + if (!lv) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown volume"); + + while (size) + { + grub_err_t err = 0; + struct grub_diskfilter_vg *vg = lv->vg; + struct grub_diskfilter_segment *seg = lv->segments; + grub_uint64_t extent; + grub_uint64_t to_read; + + extent = grub_divmod64 (sector, vg->extent_size, NULL); + + /* Find the right segment. */ + { + unsigned int i; + for (i = 0; i < lv->segment_count; i++) + { + if ((seg->start_extent <= extent) + && ((seg->start_extent + seg->extent_count) > extent)) + break; + seg++; + } + if (i == lv->segment_count) + return grub_error (GRUB_ERR_READ_ERROR, "incorrect segment"); + } + to_read = ((seg->start_extent + seg->extent_count) + * vg->extent_size) - sector; + if (to_read > size) + to_read = size; + + err = read_segment (seg, sector - seg->start_extent * vg->extent_size, + to_read, buf); + if (err) + return err; + + size -= to_read; + sector += to_read; + buf += to_read << GRUB_DISK_SECTOR_BITS; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_diskfilter_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + return read_lv (disk->data, sector, size, buf); +} + +static grub_err_t +grub_diskfilter_write (grub_disk_t disk __attribute ((unused)), + grub_disk_addr_t sector __attribute ((unused)), + grub_size_t size __attribute ((unused)), + const char *buf __attribute ((unused))) +{ + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "diskfilter writes are not supported"); +} + +struct grub_diskfilter_vg * +grub_diskfilter_get_vg_by_uuid (grub_size_t uuidlen, char *uuid) +{ + struct grub_diskfilter_vg *p; + + for (p = array_list; p != NULL; p = p->next) + if ((p->uuid_len == uuidlen) && + (! grub_memcmp (p->uuid, uuid, p->uuid_len))) + return p; + return NULL; +} + +grub_err_t +grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg) +{ + struct grub_diskfilter_lv *lv, *p; + struct grub_diskfilter_vg *vgp; + unsigned i; + + grub_dprintf ("diskfilter", "Found array %s\n", vg->name); +#ifdef GRUB_UTIL + grub_util_info ("Found array %s", vg->name); +#endif + + for (lv = vg->lvs; lv; lv = lv->next) + { + grub_err_t err; + + /* RAID 1 and single-disk RAID 0 don't use a chunksize but code + assumes one so set one. */ + for (i = 0; i < lv->segment_count; i++) + { + if (lv->segments[i].type == 1) + lv->segments[i].stripe_size = 64; + if (lv->segments[i].type == GRUB_DISKFILTER_STRIPED + && lv->segments[i].node_count == 1 + && lv->segments[i].stripe_size == 0) + lv->segments[i].stripe_size = 64; + } + + err = validate_lv(lv); + if (err) + return err; + lv->number = lv_num++; + + if (lv->fullname) + { + grub_size_t len; + int max_used_number = 0, need_new_name = 0; + len = grub_strlen (lv->fullname); + for (vgp = array_list; vgp; vgp = vgp->next) + for (p = vgp->lvs; p; p = p->next) + { + int cur_num; + char *num, *end; + if (!p->fullname) + continue; + if (grub_strncmp (p->fullname, lv->fullname, len) != 0) + continue; + if (p->fullname[len] == 0) + { + need_new_name = 1; + continue; + } + num = p->fullname + len + 1; + if (!grub_isdigit (num[0])) + continue; + cur_num = grub_strtoul (num, &end, 10); + if (end[0]) + continue; + if (cur_num > max_used_number) + max_used_number = cur_num; + } + if (need_new_name) + { + char *tmp; + tmp = grub_xasprintf ("%s_%d", lv->fullname, max_used_number + 1); + if (!tmp) + return grub_errno; + grub_free (lv->fullname); + lv->fullname = tmp; + } + } + } + /* Add our new array to the list. */ + vg->next = array_list; + array_list = vg; + return GRUB_ERR_NONE; +} + +struct grub_diskfilter_vg * +grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb, + const char *name, grub_uint64_t disk_size, + grub_uint64_t stripe_size, + int layout, int level) +{ + struct grub_diskfilter_vg *array; + int i; + grub_size_t j; + grub_uint64_t totsize; + struct grub_diskfilter_pv *pv; + grub_err_t err; + + switch (level) + { + case 1: + totsize = disk_size; + break; + + case 10: + { + int n; + n = layout & 0xFF; + if (n == 1) + n = (layout >> 8) & 0xFF; + if (n == 0) + { + grub_free (uuid); + return NULL; + } + + totsize = grub_divmod64 (nmemb * disk_size, n, 0); + } + break; + + case 0: + case 4: + case 5: + case 6: + totsize = (nmemb - ((unsigned) level / 3U)) * disk_size; + break; + + default: + grub_free (uuid); + return NULL; + } + + array = grub_diskfilter_get_vg_by_uuid (uuidlen, uuid); + if (array) + { + if (array->lvs && array->lvs->size < totsize) + { + array->lvs->size = totsize; + if (array->lvs->segments) + array->lvs->segments->extent_count = totsize; + } + + if (array->lvs && array->lvs->segments + && array->lvs->segments->raid_member_size > disk_size) + array->lvs->segments->raid_member_size = disk_size; + + grub_free (uuid); + return array; + } + array = grub_zalloc (sizeof (*array)); + if (!array) + { + grub_free (uuid); + return NULL; + } + array->uuid = uuid; + array->uuid_len = uuidlen; + if (name) + { + /* Strip off the homehost if present. */ + char *colon = grub_strchr (name, ':'); + char *new_name = grub_xasprintf ("md/%s", + colon ? colon + 1 : name); + + if (! new_name) + goto fail; + + array->name = new_name; + } + + array->extent_size = 1; + array->lvs = grub_zalloc (sizeof (*array->lvs)); + if (!array->lvs) + goto fail; + array->lvs->segment_count = 1; + array->lvs->visible = 1; + if (array->name) + { + array->lvs->name = grub_strdup (array->name); + if (!array->lvs->name) + goto fail; + array->lvs->fullname = grub_strdup (array->name); + if (!array->lvs->fullname) + goto fail; + } + array->lvs->vg = array; + + array->lvs->idname = grub_malloc (sizeof ("mduuid/") + 2 * uuidlen); + if (!array->lvs->idname) + goto fail; + + grub_memcpy (array->lvs->idname, "mduuid/", sizeof ("mduuid/") - 1); + for (j = 0; j < uuidlen; j++) + { + array->lvs->idname[sizeof ("mduuid/") - 1 + 2 * j] + = hex2ascii (((unsigned char) uuid[j] >> 4)); + array->lvs->idname[sizeof ("mduuid/") - 1 + 2 * j + 1] + = hex2ascii (((unsigned char) uuid[j] & 0xf)); + } + array->lvs->idname[sizeof ("mduuid/") - 1 + 2 * uuidlen] = '\0'; + + array->lvs->size = totsize; + + array->lvs->segments = grub_zalloc (sizeof (*array->lvs->segments)); + if (!array->lvs->segments) + goto fail; + array->lvs->segments->stripe_size = stripe_size; + array->lvs->segments->layout = layout; + array->lvs->segments->start_extent = 0; + array->lvs->segments->extent_count = totsize; + array->lvs->segments->type = level; + array->lvs->segments->node_count = nmemb; + array->lvs->segments->raid_member_size = disk_size; + array->lvs->segments->nodes + = grub_zalloc (nmemb * sizeof (array->lvs->segments->nodes[0])); + array->lvs->segments->stripe_size = stripe_size; + for (i = 0; i < nmemb; i++) + { + pv = grub_zalloc (sizeof (*pv)); + if (!pv) + goto fail; + pv->id.uuidlen = 0; + pv->id.id = i; + pv->next = array->pvs; + array->pvs = pv; + array->lvs->segments->nodes[i].pv = pv; + } + + err = grub_diskfilter_vg_register (array); + if (err) + goto fail; + + return array; + + fail: + if (array->lvs) + { + grub_free (array->lvs->name); + grub_free (array->lvs->fullname); + grub_free (array->lvs->idname); + if (array->lvs->segments) + { + grub_free (array->lvs->segments->nodes); + grub_free (array->lvs->segments); + } + grub_free (array->lvs); + } + while (array->pvs) + { + pv = array->pvs->next; + grub_free (array->pvs); + array->pvs = pv; + } + grub_free (array->name); + grub_free (array->uuid); + grub_free (array); + return NULL; +} + +static grub_err_t +insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id, + struct grub_diskfilter_vg *array, + grub_disk_addr_t start_sector, + grub_diskfilter_t diskfilter __attribute__ ((unused))) +{ + struct grub_diskfilter_pv *pv; + + grub_dprintf ("diskfilter", "Inserting %s (+%lld,%lld) into %s (%s)\n", disk->name, + (unsigned long long) grub_partition_get_start (disk->partition), + (unsigned long long) grub_disk_get_size (disk), + array->name, diskfilter->name); +#ifdef GRUB_UTIL + grub_util_info ("Inserting %s (+%" GRUB_HOST_PRIuLONG_LONG ",%" + GRUB_HOST_PRIuLONG_LONG ") into %s (%s)\n", disk->name, + (unsigned long long) grub_partition_get_start (disk->partition), + (unsigned long long) grub_disk_get_size (disk), + array->name, diskfilter->name); + array->driver = diskfilter; +#endif + + for (pv = array->pvs; pv; pv = pv->next) + if (id->uuidlen == pv->id.uuidlen + && id->uuidlen + ? (grub_memcmp (pv->id.uuid, id->uuid, id->uuidlen) == 0) + : (pv->id.id == id->id)) + { + struct grub_diskfilter_lv *lv; + /* FIXME: Check whether the update time of the superblocks are + the same. */ + if (pv->disk && grub_disk_get_size (disk) >= pv->part_size) + return GRUB_ERR_NONE; + pv->disk = grub_disk_open (disk->name); + if (!pv->disk) + return grub_errno; + /* This could happen to LVM on RAID, pv->disk points to the + raid device, we shouldn't change it. */ + pv->start_sector -= pv->part_start; + pv->part_start = grub_partition_get_start (disk->partition); + pv->part_size = grub_disk_get_size (disk); + +#ifdef GRUB_UTIL + { + grub_size_t s = 1; + grub_partition_t p; + for (p = disk->partition; p; p = p->parent) + s++; + pv->partmaps = xmalloc (s * sizeof (pv->partmaps[0])); + s = 0; + for (p = disk->partition; p; p = p->parent) + pv->partmaps[s++] = xstrdup (p->partmap->name); + pv->partmaps[s++] = 0; + } +#endif + if (start_sector != (grub_uint64_t)-1) + pv->start_sector = start_sector; + pv->start_sector += pv->part_start; + /* Add the device to the array. */ + for (lv = array->lvs; lv; lv = lv->next) + if (!lv->became_readable_at && lv->fullname && is_lv_readable (lv, 0)) + lv->became_readable_at = ++inscnt; + break; + } + + return 0; +} + +static void +free_array (void) +{ + while (array_list) + { + struct grub_diskfilter_vg *vg; + struct grub_diskfilter_pv *pv; + struct grub_diskfilter_lv *lv; + + vg = array_list; + array_list = array_list->next; + + while ((pv = vg->pvs)) + { + vg->pvs = pv->next; + grub_free (pv->name); + if (pv->disk) + grub_disk_close (pv->disk); + if (pv->id.uuidlen) + grub_free (pv->id.uuid); +#ifdef GRUB_UTIL + grub_free (pv->partmaps); +#endif + grub_free (pv->internal_id); + grub_free (pv); + } + + while ((lv = vg->lvs)) + { + unsigned i; + vg->lvs = lv->next; + grub_free (lv->fullname); + grub_free (lv->name); + grub_free (lv->idname); + for (i = 0; i < lv->segment_count; i++) + grub_free (lv->segments[i].nodes); + grub_free (lv->segments); + grub_free (lv->internal_id); + grub_free (lv); + } + + grub_free (vg->uuid); + grub_free (vg->name); + grub_free (vg); + } + + array_list = 0; +} + +#ifdef GRUB_UTIL +struct grub_diskfilter_pv * +grub_diskfilter_get_pv_from_disk (grub_disk_t disk, + struct grub_diskfilter_vg **vg_out) +{ + struct grub_diskfilter_pv *pv; + struct grub_diskfilter_vg *vg; + + scan_disk (disk->name, 1); + for (vg = array_list; vg; vg = vg->next) + for (pv = vg->pvs; pv; pv = pv->next) + { + if (pv->disk && pv->disk->id == disk->id + && pv->disk->dev->id == disk->dev->id + && pv->part_start == grub_partition_get_start (disk->partition) + && pv->part_size == grub_disk_get_size (disk)) + { + if (vg_out) + *vg_out = vg; + return pv; + } + } + return NULL; +} +#endif + +static struct grub_disk_dev grub_diskfilter_dev = + { + .name = "diskfilter", + .id = GRUB_DISK_DEVICE_DISKFILTER_ID, + .iterate = grub_diskfilter_iterate, + .open = grub_diskfilter_open, + .close = grub_diskfilter_close, + .read = grub_diskfilter_read, + .write = grub_diskfilter_write, +#ifdef GRUB_UTIL + .memberlist = grub_diskfilter_memberlist, + .raidname = grub_diskfilter_getname, +#endif + .next = 0 + }; + + +GRUB_MOD_INIT(diskfilter) +{ + grub_disk_dev_register (&grub_diskfilter_dev); +} + +GRUB_MOD_FINI(diskfilter) +{ + grub_disk_dev_unregister (&grub_diskfilter_dev); + free_array (); +} diff --git a/grub-core/disk/dmraid_nvidia.c b/grub-core/disk/dmraid_nvidia.c new file mode 100644 index 000000000..060279124 --- /dev/null +++ b/grub-core/disk/dmraid_nvidia.c @@ -0,0 +1,196 @@ +/* dmraid_nvidia.c - module to handle Nvidia fakeraid. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define NV_SIGNATURES 4 + +#define NV_IDLE 0 +#define NV_SCDB_INIT_RAID 2 +#define NV_SCDB_REBUILD_RAID 3 +#define NV_SCDB_UPGRADE_RAID 4 +#define NV_SCDB_SYNC_RAID 5 + +#define NV_LEVEL_UNKNOWN 0x00 +#define NV_LEVEL_JBOD 0xFF +#define NV_LEVEL_0 0x80 +#define NV_LEVEL_1 0x81 +#define NV_LEVEL_3 0x83 +#define NV_LEVEL_5 0x85 +#define NV_LEVEL_10 0x8a +#define NV_LEVEL_1_0 0x8180 + +#define NV_ARRAY_FLAG_BOOT 1 /* BIOS use only. */ +#define NV_ARRAY_FLAG_ERROR 2 /* Degraded or offline. */ +#define NV_ARRAY_FLAG_PARITY_VALID 4 /* RAID-3/5 parity valid. */ + +struct grub_nv_array +{ + grub_uint32_t version; + grub_uint32_t signature[NV_SIGNATURES]; + grub_uint8_t raid_job_code; + grub_uint8_t stripe_width; + grub_uint8_t total_volumes; + grub_uint8_t original_width; + grub_uint32_t raid_level; + grub_uint32_t stripe_block_size; + grub_uint32_t stripe_block_size_bytes; + grub_uint32_t stripe_block_size_log2; + grub_uint32_t stripe_mask; + grub_uint32_t stripe_size; + grub_uint32_t stripe_size_bytes; + grub_uint32_t raid_job_mask; + grub_uint32_t original_capacity; + grub_uint32_t flags; +}; + +#define NV_ID_LEN 8 +#define NV_ID_STRING "NVIDIA" +#define NV_VERSION 100 + +#define NV_PRODID_LEN 16 +#define NV_PRODREV_LEN 4 + +struct grub_nv_super +{ + char vendor[NV_ID_LEN]; /* 0x00 - 0x07 ID string. */ + grub_uint32_t size; /* 0x08 - 0x0B Size of metadata in dwords. */ + grub_uint32_t chksum; /* 0x0C - 0x0F Checksum of this struct. */ + grub_uint16_t version; /* 0x10 - 0x11 NV version. */ + grub_uint8_t unit_number; /* 0x12 Disk index in array. */ + grub_uint8_t reserved; /* 0x13. */ + grub_uint32_t capacity; /* 0x14 - 0x17 Array capacity in sectors. */ + grub_uint32_t sector_size; /* 0x18 - 0x1B Sector size. */ + char prodid[NV_PRODID_LEN]; /* 0x1C - 0x2B Array product ID. */ + char prodrev[NV_PRODREV_LEN]; /* 0x2C - 0x2F Array product revision */ + grub_uint32_t unit_flags; /* 0x30 - 0x33 Flags for this disk */ + struct grub_nv_array array; /* Array information */ +} GRUB_PACKED; + +static struct grub_diskfilter_vg * +grub_dmraid_nv_detect (grub_disk_t disk, + struct grub_diskfilter_pv_id *id, + grub_disk_addr_t *start_sector) +{ + grub_disk_addr_t sector; + struct grub_nv_super sb; + int level; + grub_uint64_t disk_size; + grub_uint32_t capacity; + grub_uint8_t total_volumes; + char *uuid; + + if (disk->partition) + /* Skip partition. */ + return NULL; + + sector = grub_disk_get_size (disk); + if (sector == GRUB_DISK_SIZE_UNKNOWN) + /* Not raid. */ + return NULL; + sector -= 2; + if (grub_disk_read (disk, sector, 0, sizeof (sb), &sb)) + return NULL; + + if (grub_memcmp (sb.vendor, NV_ID_STRING, 6)) + /* Not raid. */ + return NULL; + + if (sb.version != NV_VERSION) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unknown version: %d.%d", sb.version); + return NULL; + } + + capacity = grub_le_to_cpu32 (sb.capacity); + total_volumes = sb.array.total_volumes; + + switch (sb.array.raid_level) + { + case NV_LEVEL_0: + level = 0; + if (total_volumes == 0) + /* Not RAID. */ + return NULL; + disk_size = capacity / total_volumes; + break; + + case NV_LEVEL_1: + level = 1; + disk_size = sb.capacity; + break; + + case NV_LEVEL_5: + level = 5; + if (total_volumes == 0 || total_volumes == 1) + /* Not RAID. */ + return NULL; + disk_size = capacity / (total_volumes - 1); + break; + + default: + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported RAID level: %d", sb.array.raid_level); + return NULL; + } + + uuid = grub_malloc (sizeof (sb.array.signature)); + if (! uuid) + return NULL; + + grub_memcpy (uuid, (char *) &sb.array.signature, + sizeof (sb.array.signature)); + + id->uuidlen = 0; + id->id = sb.unit_number; + + *start_sector = 0; + + return grub_diskfilter_make_raid (sizeof (sb.array.signature), + uuid, sb.array.total_volumes, + "nv", disk_size, + sb.array.stripe_block_size, + GRUB_RAID_LAYOUT_LEFT_ASYMMETRIC, + level); +} + +static struct grub_diskfilter grub_dmraid_nv_dev = +{ + .name = "dmraid_nv", + .detect = grub_dmraid_nv_detect, + .next = 0 +}; + +GRUB_MOD_INIT(dm_nv) +{ + grub_diskfilter_register_front (&grub_dmraid_nv_dev); +} + +GRUB_MOD_FINI(dm_nv) +{ + grub_diskfilter_unregister (&grub_dmraid_nv_dev); +} diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c new file mode 100644 index 000000000..5d2400f66 --- /dev/null +++ b/grub-core/disk/efi/efidisk.c @@ -0,0 +1,893 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct grub_efidisk_data +{ + grub_efi_handle_t handle; + grub_efi_device_path_t *device_path; + grub_efi_device_path_t *last_device_path; + grub_efi_block_io_t *block_io; + struct grub_efidisk_data *next; +}; + +/* GUID. */ +static grub_efi_guid_t block_io_guid = GRUB_EFI_BLOCK_IO_GUID; + +static struct grub_efidisk_data *fd_devices; +static struct grub_efidisk_data *hd_devices; +static struct grub_efidisk_data *cd_devices; + +static struct grub_efidisk_data * +make_devices (void) +{ + grub_efi_uintn_t num_handles; + grub_efi_handle_t *handles; + grub_efi_handle_t *handle; + struct grub_efidisk_data *devices = 0; + + /* Find handles which support the disk io interface. */ + handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &block_io_guid, + 0, &num_handles); + if (! handles) + return 0; + + /* Make a linked list of devices. */ + for (handle = handles; num_handles--; handle++) + { + grub_efi_device_path_t *dp; + grub_efi_device_path_t *ldp; + struct grub_efidisk_data *d; + grub_efi_block_io_t *bio; + + dp = grub_efi_get_device_path (*handle); + if (! dp) + continue; + + ldp = grub_efi_find_last_device_path (dp); + if (! ldp) + /* This is empty. Why? */ + continue; + + bio = grub_efi_open_protocol (*handle, &block_io_guid, + GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); + if (! bio) + /* This should not happen... Why? */ + continue; + + /* iPXE adds stub Block IO protocol to loaded image device handle. It is + completely non-functional and simply returns an error for every method. + So attempt to detect and skip it. Magic number is literal "iPXE" and + check block size as well */ + /* FIXME: shoud we close it? We do not do it elsewhere */ + if (bio->media && bio->media->media_id == 0x69505845U && + bio->media->block_size == 1) + continue; + + d = grub_malloc (sizeof (*d)); + if (! d) + { + /* Uggh. */ + grub_free (handles); + while (devices) + { + d = devices->next; + grub_free (devices); + devices = d; + } + return 0; + } + + d->handle = *handle; + d->device_path = dp; + d->last_device_path = ldp; + d->block_io = bio; + d->next = devices; + devices = d; + } + + grub_free (handles); + + return devices; +} + +/* Find the parent device. */ +static struct grub_efidisk_data * +find_parent_device (struct grub_efidisk_data *devices, + struct grub_efidisk_data *d) +{ + grub_efi_device_path_t *dp, *ldp; + struct grub_efidisk_data *parent; + + dp = grub_efi_duplicate_device_path (d->device_path); + if (! dp) + return 0; + + ldp = grub_efi_find_last_device_path (dp); + ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; + ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; + ldp->length = sizeof (*ldp); + + for (parent = devices; parent; parent = parent->next) + { + /* Ignore itself. */ + if (parent == d) + continue; + + if (grub_efi_compare_device_paths (parent->device_path, dp) == 0) + break; + } + + grub_free (dp); + return parent; +} + +static int +is_child (struct grub_efidisk_data *child, + struct grub_efidisk_data *parent) +{ + grub_efi_device_path_t *dp, *ldp; + int ret; + + dp = grub_efi_duplicate_device_path (child->device_path); + if (! dp) + return 0; + + ldp = grub_efi_find_last_device_path (dp); + ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; + ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; + ldp->length = sizeof (*ldp); + + ret = (grub_efi_compare_device_paths (dp, parent->device_path) == 0); + grub_free (dp); + return ret; +} + +#define FOR_CHILDREN(p, dev) for (p = dev; p; p = p->next) if (is_child (p, d)) + +/* Add a device into a list of devices in an ascending order. */ +static void +add_device (struct grub_efidisk_data **devices, struct grub_efidisk_data *d) +{ + struct grub_efidisk_data **p; + struct grub_efidisk_data *n; + + for (p = devices; *p; p = &((*p)->next)) + { + int ret; + + ret = grub_efi_compare_device_paths (grub_efi_find_last_device_path ((*p)->device_path), + grub_efi_find_last_device_path (d->device_path)); + if (ret == 0) + ret = grub_efi_compare_device_paths ((*p)->device_path, + d->device_path); + if (ret == 0) + return; + else if (ret > 0) + break; + } + + n = grub_malloc (sizeof (*n)); + if (! n) + return; + + grub_memcpy (n, d, sizeof (*n)); + n->next = (*p); + (*p) = n; +} + +/* Name the devices. */ +static void +name_devices (struct grub_efidisk_data *devices) +{ + struct grub_efidisk_data *d; + + /* First, identify devices by media device paths. */ + for (d = devices; d; d = d->next) + { + grub_efi_device_path_t *dp; + + dp = d->last_device_path; + if (! dp) + continue; + + if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) + { + int is_hard_drive = 0; + + switch (GRUB_EFI_DEVICE_PATH_SUBTYPE (dp)) + { + case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE: + is_hard_drive = 1; + /* Intentionally fall through. */ + case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE: + { + struct grub_efidisk_data *parent, *parent2; + + parent = find_parent_device (devices, d); + if (!parent) + { +#ifdef DEBUG_NAMES + grub_printf ("skipping orphaned partition: "); + grub_efi_print_device_path (d->device_path); +#endif + break; + } + parent2 = find_parent_device (devices, parent); + if (parent2) + { +#ifdef DEBUG_NAMES + grub_printf ("skipping subpartition: "); + grub_efi_print_device_path (d->device_path); +#endif + /* Mark itself as used. */ + d->last_device_path = 0; + break; + } + if (!parent->last_device_path) + { + d->last_device_path = 0; + break; + } + if (is_hard_drive) + { +#ifdef DEBUG_NAMES + grub_printf ("adding a hard drive by a partition: "); + grub_efi_print_device_path (parent->device_path); +#endif + add_device (&hd_devices, parent); + } + else + { +#ifdef DEBUG_NAMES + grub_printf ("adding a cdrom by a partition: "); + grub_efi_print_device_path (parent->device_path); +#endif + add_device (&cd_devices, parent); + } + + /* Mark the parent as used. */ + parent->last_device_path = 0; + } + /* Mark itself as used. */ + d->last_device_path = 0; + break; + + default: +#ifdef DEBUG_NAMES + grub_printf ("skipping other type: "); + grub_efi_print_device_path (d->device_path); +#endif + /* For now, ignore the others. */ + break; + } + } + else + { +#ifdef DEBUG_NAMES + grub_printf ("skipping non-media: "); + grub_efi_print_device_path (d->device_path); +#endif + } + } + + /* Let's see what can be added more. */ + for (d = devices; d; d = d->next) + { + grub_efi_device_path_t *dp; + grub_efi_block_io_media_t *m; + int is_floppy = 0; + + dp = d->last_device_path; + if (! dp) + continue; + + /* Ghosts proudly presented by Apple. */ + if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE + && GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) + == GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE) + { + grub_efi_vendor_device_path_t *vendor = (grub_efi_vendor_device_path_t *) dp; + const struct grub_efi_guid apple = GRUB_EFI_VENDOR_APPLE_GUID; + + if (vendor->header.length == sizeof (*vendor) + && grub_memcmp (&vendor->vendor_guid, &apple, + sizeof (vendor->vendor_guid)) == 0 + && find_parent_device (devices, d)) + continue; + } + + m = d->block_io->media; + if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE + && GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) + == GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE) + { + grub_efi_acpi_device_path_t *acpi + = (grub_efi_acpi_device_path_t *) dp; + /* Floppy EISA ID. */ + if (acpi->hid == 0x60441d0 || acpi->hid == 0x70041d0 + || acpi->hid == 0x70141d1) + is_floppy = 1; + } + if (is_floppy) + { +#ifdef DEBUG_NAMES + grub_printf ("adding a floppy: "); + grub_efi_print_device_path (d->device_path); +#endif + add_device (&fd_devices, d); + } + else if (m->read_only && m->block_size > GRUB_DISK_SECTOR_SIZE) + { + /* This check is too heuristic, but assume that this is a + CDROM drive. */ +#ifdef DEBUG_NAMES + grub_printf ("adding a cdrom by guessing: "); + grub_efi_print_device_path (d->device_path); +#endif + add_device (&cd_devices, d); + } + else + { + /* The default is a hard drive. */ +#ifdef DEBUG_NAMES + grub_printf ("adding a hard drive by guessing: "); + grub_efi_print_device_path (d->device_path); +#endif + add_device (&hd_devices, d); + } + } +} + +static void +free_devices (struct grub_efidisk_data *devices) +{ + struct grub_efidisk_data *p, *q; + + for (p = devices; p; p = q) + { + q = p->next; + grub_free (p); + } +} + +/* Enumerate all disks to name devices. */ +static void +enumerate_disks (void) +{ + struct grub_efidisk_data *devices; + + devices = make_devices (); + if (! devices) + return; + + name_devices (devices); + free_devices (devices); +} + +static int +grub_efidisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_efidisk_data *d; + char buf[16]; + int count; + + switch (pull) + { + case GRUB_DISK_PULL_NONE: + for (d = hd_devices, count = 0; d; d = d->next, count++) + { + grub_snprintf (buf, sizeof (buf), "hd%d", count); + grub_dprintf ("efidisk", "iterating %s\n", buf); + if (hook (buf, hook_data)) + return 1; + } + break; + case GRUB_DISK_PULL_REMOVABLE: + for (d = fd_devices, count = 0; d; d = d->next, count++) + { + grub_snprintf (buf, sizeof (buf), "fd%d", count); + grub_dprintf ("efidisk", "iterating %s\n", buf); + if (hook (buf, hook_data)) + return 1; + } + + for (d = cd_devices, count = 0; d; d = d->next, count++) + { + grub_snprintf (buf, sizeof (buf), "cd%d", count); + grub_dprintf ("efidisk", "iterating %s\n", buf); + if (hook (buf, hook_data)) + return 1; + } + break; + default: + return 0; + } + + return 0; +} + +static int +get_drive_number (const char *name) +{ + unsigned long drive; + + if ((name[0] != 'f' && name[0] != 'h' && name[0] != 'c') || name[1] != 'd') + goto fail; + + drive = grub_strtoul (name + 2, 0, 10); + if (grub_errno != GRUB_ERR_NONE) + goto fail; + + return (int) drive ; + + fail: + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a efidisk"); + return -1; +} + +static struct grub_efidisk_data * +get_device (struct grub_efidisk_data *devices, int num) +{ + struct grub_efidisk_data *d; + + for (d = devices; d && num; d = d->next, num--) + ; + + if (num == 0) + return d; + + return 0; +} + +static grub_err_t +grub_efidisk_open (const char *name, struct grub_disk *disk) +{ + int num; + struct grub_efidisk_data *d = 0; + grub_efi_block_io_media_t *m; + + grub_dprintf ("efidisk", "opening %s\n", name); + + num = get_drive_number (name); + if (num < 0) + return grub_errno; + + switch (name[0]) + { + case 'f': + d = get_device (fd_devices, num); + break; + case 'c': + d = get_device (cd_devices, num); + break; + case 'h': + d = get_device (hd_devices, num); + break; + default: + /* Never reach here. */ + break; + } + + if (! d) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such device"); + + disk->id = ((num << GRUB_CHAR_BIT) | name[0]); + m = d->block_io->media; + /* FIXME: Probably it is better to store the block size in the disk, + and total sectors should be replaced with total blocks. */ + grub_dprintf ("efidisk", + "m = %p, last block = %llx, block size = %x, io align = %x\n", + m, (unsigned long long) m->last_block, m->block_size, + m->io_align); + + /* Ensure required buffer alignment is a power of two (or is zero). */ + if (m->io_align & (m->io_align - 1)) + return grub_error (GRUB_ERR_IO, "invalid buffer alignment %d", m->io_align); + + disk->total_sectors = m->last_block + 1; + /* Don't increase this value due to bug in some EFI. */ + disk->max_agglomerate = 0xa0000 >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS); + if (m->block_size & (m->block_size - 1) || !m->block_size) + return grub_error (GRUB_ERR_IO, "invalid sector size %d", + m->block_size); + for (disk->log_sector_size = 0; + (1U << disk->log_sector_size) < m->block_size; + disk->log_sector_size++); + disk->data = d; + + grub_dprintf ("efidisk", "opening %s succeeded\n", name); + + return GRUB_ERR_NONE; +} + +static void +grub_efidisk_close (struct grub_disk *disk __attribute__ ((unused))) +{ + /* EFI disks do not allocate extra memory, so nothing to do here. */ + grub_dprintf ("efidisk", "closing %s\n", disk->name); +} + +static grub_efi_status_t +grub_efidisk_readwrite (struct grub_disk *disk, grub_disk_addr_t sector, + grub_size_t size, char *buf, int wr) +{ + struct grub_efidisk_data *d; + grub_efi_block_io_t *bio; + grub_efi_status_t status; + grub_size_t io_align, num_bytes; + char *aligned_buf; + + d = disk->data; + bio = d->block_io; + + /* Set alignment to 1 if 0 specified */ + io_align = bio->media->io_align ? bio->media->io_align : 1; + num_bytes = size << disk->log_sector_size; + + if ((grub_addr_t) buf & (io_align - 1)) + { + aligned_buf = grub_memalign (io_align, num_bytes); + if (! aligned_buf) + return GRUB_EFI_OUT_OF_RESOURCES; + if (wr) + grub_memcpy (aligned_buf, buf, num_bytes); + } + else + { + aligned_buf = buf; + } + + status = efi_call_5 ((wr ? bio->write_blocks : bio->read_blocks), bio, + bio->media->media_id, (grub_efi_uint64_t) sector, + (grub_efi_uintn_t) num_bytes, aligned_buf); + + if ((grub_addr_t) buf & (io_align - 1)) + { + if (!wr) + grub_memcpy (buf, aligned_buf, num_bytes); + grub_free (aligned_buf); + } + + return status; +} + +static grub_err_t +grub_efidisk_read (struct grub_disk *disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_efi_status_t status; + + grub_dprintf ("efidisk", + "reading 0x%lx sectors at the sector 0x%llx from %s\n", + (unsigned long) size, (unsigned long long) sector, disk->name); + + status = grub_efidisk_readwrite (disk, sector, size, buf, 0); + + if (status == GRUB_EFI_NO_MEDIA) + return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name); + else if (status != GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_READ_ERROR, + N_("failure reading sector 0x%llx from `%s'"), + (unsigned long long) sector, + disk->name); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_efidisk_write (struct grub_disk *disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + grub_efi_status_t status; + + grub_dprintf ("efidisk", + "writing 0x%lx sectors at the sector 0x%llx to %s\n", + (unsigned long) size, (unsigned long long) sector, disk->name); + + status = grub_efidisk_readwrite (disk, sector, size, (char *) buf, 1); + + if (status == GRUB_EFI_NO_MEDIA) + return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name); + else if (status != GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_WRITE_ERROR, + N_("failure writing sector 0x%llx to `%s'"), + (unsigned long long) sector, disk->name); + + return GRUB_ERR_NONE; +} + +static struct grub_disk_dev grub_efidisk_dev = + { + .name = "efidisk", + .id = GRUB_DISK_DEVICE_EFIDISK_ID, + .iterate = grub_efidisk_iterate, + .open = grub_efidisk_open, + .close = grub_efidisk_close, + .read = grub_efidisk_read, + .write = grub_efidisk_write, + .next = 0 + }; + +void +grub_efidisk_fini (void) +{ + free_devices (fd_devices); + free_devices (hd_devices); + free_devices (cd_devices); + fd_devices = 0; + hd_devices = 0; + cd_devices = 0; + grub_disk_dev_unregister (&grub_efidisk_dev); +} + +void +grub_efidisk_init (void) +{ + grub_disk_firmware_fini = grub_efidisk_fini; + + enumerate_disks (); + grub_disk_dev_register (&grub_efidisk_dev); +} + +/* Some utility functions to map GRUB devices with EFI devices. */ +grub_efi_handle_t +grub_efidisk_get_device_handle (grub_disk_t disk) +{ + struct grub_efidisk_data *d; + char type; + + if (disk->dev->id != GRUB_DISK_DEVICE_EFIDISK_ID) + return 0; + + d = disk->data; + type = disk->name[0]; + + switch (type) + { + case 'f': + /* This is the simplest case. */ + return d->handle; + + case 'c': + /* FIXME: probably this is not correct. */ + return d->handle; + + case 'h': + /* If this is the whole disk, just return its own data. */ + if (! disk->partition) + return d->handle; + + /* Otherwise, we must query the corresponding device to the firmware. */ + { + struct grub_efidisk_data *devices; + grub_efi_handle_t handle = 0; + struct grub_efidisk_data *c; + + devices = make_devices (); + FOR_CHILDREN (c, devices) + { + grub_efi_hard_drive_device_path_t *hd; + + hd = (grub_efi_hard_drive_device_path_t *) c->last_device_path; + + if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path) + == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) + && (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path) + == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE) + && (grub_partition_get_start (disk->partition) + == (hd->partition_start << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS))) + && (grub_partition_get_len (disk->partition) + == (hd->partition_size << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)))) + { + handle = c->handle; + break; + } + } + + free_devices (devices); + + if (handle != 0) + return handle; + } + break; + + default: + break; + } + + return 0; +} + +#define NEEDED_BUFLEN sizeof ("XdXXXXXXXXXX") +static inline int +get_diskname_from_path_real (const grub_efi_device_path_t *path, + struct grub_efidisk_data *head, + char *buf) +{ + int count = 0; + struct grub_efidisk_data *d; + for (d = head, count = 0; d; d = d->next, count++) + if (grub_efi_compare_device_paths (d->device_path, path) == 0) + { + grub_snprintf (buf, NEEDED_BUFLEN - 1, "d%d", count); + return 1; + } + return 0; +} + +static inline int +get_diskname_from_path (const grub_efi_device_path_t *path, + char *buf) +{ + if (get_diskname_from_path_real (path, hd_devices, buf + 1)) + { + buf[0] = 'h'; + return 1; + } + + if (get_diskname_from_path_real (path, fd_devices, buf + 1)) + { + buf[0] = 'f'; + return 1; + } + + if (get_diskname_from_path_real (path, cd_devices, buf + 1)) + { + buf[0] = 'c'; + return 1; + } + return 0; +} + +/* Context for grub_efidisk_get_device_name. */ +struct grub_efidisk_get_device_name_ctx +{ + char *partition_name; + grub_efi_hard_drive_device_path_t *hd; +}; + +/* Helper for grub_efidisk_get_device_name. + Find the identical partition. */ +static int +grub_efidisk_get_device_name_iter (grub_disk_t disk, + const grub_partition_t part, void *data) +{ + struct grub_efidisk_get_device_name_ctx *ctx = data; + + if (grub_partition_get_start (part) + == (ctx->hd->partition_start << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)) + && grub_partition_get_len (part) + == (ctx->hd->partition_size << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS))) + { + ctx->partition_name = grub_partition_get_name (part); + return 1; + } + + return 0; +} + +char * +grub_efidisk_get_device_name (grub_efi_handle_t *handle) +{ + grub_efi_device_path_t *dp, *ldp; + char device_name[NEEDED_BUFLEN]; + + dp = grub_efi_get_device_path (handle); + if (! dp) + return 0; + + ldp = grub_efi_find_last_device_path (dp); + if (! ldp) + return 0; + + if (GRUB_EFI_DEVICE_PATH_TYPE (ldp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE + && (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE + || GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)) + { + struct grub_efidisk_get_device_name_ctx ctx; + char *dev_name; + grub_efi_device_path_t *dup_dp; + grub_disk_t parent = 0; + + /* It is necessary to duplicate the device path so that GRUB + can overwrite it. */ + dup_dp = grub_efi_duplicate_device_path (dp); + if (! dup_dp) + return 0; + + while (1) + { + grub_efi_device_path_t *dup_ldp; + dup_ldp = grub_efi_find_last_device_path (dup_dp); + if (!(GRUB_EFI_DEVICE_PATH_TYPE (dup_ldp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE + && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE + || GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE))) + break; + + dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; + dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; + dup_ldp->length = sizeof (*dup_ldp); + } + + if (!get_diskname_from_path (dup_dp, device_name)) + { + grub_free (dup_dp); + return 0; + } + + parent = grub_disk_open (device_name); + grub_free (dup_dp); + + if (! parent) + return 0; + + /* Find a partition which matches the hard drive device path. */ + ctx.partition_name = NULL; + ctx.hd = (grub_efi_hard_drive_device_path_t *) ldp; + if (ctx.hd->partition_start == 0 + && (ctx.hd->partition_size << (parent->log_sector_size + - GRUB_DISK_SECTOR_BITS)) + == grub_disk_get_size (parent)) + { + dev_name = grub_strdup (parent->name); + } + else + { + grub_partition_iterate (parent, grub_efidisk_get_device_name_iter, + &ctx); + + if (! ctx.partition_name) + { + /* No partition found. In most cases partition is embed in + the root path anyway, so this is not critical. + This happens only if partition is on partmap that GRUB + doesn't need to access root. + */ + grub_disk_close (parent); + return grub_strdup (device_name); + } + + dev_name = grub_xasprintf ("%s,%s", parent->name, + ctx.partition_name); + grub_free (ctx.partition_name); + } + grub_disk_close (parent); + + return dev_name; + } + /* This may be guessed device - floppy, cdrom or entire disk. */ + if (!get_diskname_from_path (dp, device_name)) + return 0; + return grub_strdup (device_name); +} diff --git a/grub-core/disk/geli.c b/grub-core/disk/geli.c new file mode 100644 index 000000000..e9d23299a --- /dev/null +++ b/grub-core/disk/geli.c @@ -0,0 +1,595 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2007,2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* This file is loosely based on FreeBSD geli implementation + (but no code was directly copied). FreeBSD geli is distributed under + following terms: */ +/*- + * Copyright (c) 2005-2006 Pawel Jakub Dawidek + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Dirty trick to solve circular dependency. */ +#ifdef GRUB_UTIL + +#include + +#undef GRUB_MD_SHA256 +#undef GRUB_MD_SHA512 + +static const gcry_md_spec_t * +grub_md_sha256_real (void) +{ + const gcry_md_spec_t *ret; + ret = grub_crypto_lookup_md_by_name ("sha256"); + if (!ret) + grub_util_error ("%s", _("Couldn't load sha256")); + return ret; +} + +static const gcry_md_spec_t * +grub_md_sha512_real (void) +{ + const gcry_md_spec_t *ret; + ret = grub_crypto_lookup_md_by_name ("sha512"); + if (!ret) + grub_util_error ("%s", _("Couldn't load sha512")); + return ret; +} + +#define GRUB_MD_SHA256 grub_md_sha256_real() +#define GRUB_MD_SHA512 grub_md_sha512_real() +#endif + +struct grub_geli_key +{ + grub_uint8_t iv_key[64]; + grub_uint8_t cipher_key[64]; + grub_uint8_t hmac[64]; +} GRUB_PACKED; + +struct grub_geli_phdr +{ + grub_uint8_t magic[16]; +#define GELI_MAGIC "GEOM::ELI" + grub_uint32_t version; + grub_uint32_t flags; + grub_uint16_t alg; + grub_uint16_t keylen; + grub_uint16_t unused3[5]; + grub_uint32_t sector_size; + grub_uint8_t keys_used; + grub_uint32_t niter; + grub_uint8_t salt[64]; + struct grub_geli_key keys[2]; +} GRUB_PACKED; + +enum + { + GRUB_GELI_FLAGS_ONETIME = 1, + GRUB_GELI_FLAGS_BOOT = 2, + }; + +/* FIXME: support version 0. */ +/* FIXME: support big-endian pre-version-4 volumes. */ +/* FIXME: support for keyfiles. */ +/* FIXME: support for HMAC. */ +const char *algorithms[] = { + [0x01] = "des", + [0x02] = "3des", + [0x03] = "blowfish", + [0x04] = "cast5", + /* FIXME: 0x05 is skipjack, but we don't have it. */ + [0x0b] = "aes", + /* FIXME: 0x10 is null. */ + [0x15] = "camellia128", + [0x16] = "aes" +}; + +#define MAX_PASSPHRASE 256 + +static gcry_err_code_t +geli_rekey (struct grub_cryptodisk *dev, grub_uint64_t zoneno) +{ + gcry_err_code_t gcry_err; + const struct { + char magic[4]; + grub_uint64_t zone; + } GRUB_PACKED tohash + = { {'e', 'k', 'e', 'y'}, grub_cpu_to_le64 (zoneno) }; + GRUB_PROPERLY_ALIGNED_ARRAY (key, GRUB_CRYPTO_MAX_MDLEN); + + if (dev->hash->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return GPG_ERR_INV_ARG; + + grub_dprintf ("geli", "rekeying %" PRIuGRUB_UINT64_T " keysize=%d\n", + zoneno, dev->rekey_derived_size); + gcry_err = grub_crypto_hmac_buffer (dev->hash, dev->rekey_key, 64, + &tohash, sizeof (tohash), key); + if (gcry_err) + return gcry_err; + + return grub_cryptodisk_setkey (dev, (grub_uint8_t *) key, + dev->rekey_derived_size); +} + +static inline gcry_err_code_t +make_uuid (const struct grub_geli_phdr *header, + char *uuid) +{ + grub_uint8_t uuidbin[GRUB_CRYPTODISK_MAX_UUID_LENGTH]; + gcry_err_code_t err; + grub_uint8_t *iptr; + char *optr; + + if (2 * GRUB_MD_SHA256->mdlen + 1 > GRUB_CRYPTODISK_MAX_UUID_LENGTH) + return GPG_ERR_TOO_LARGE; + err = grub_crypto_hmac_buffer (GRUB_MD_SHA256, + header->salt, sizeof (header->salt), + "uuid", sizeof ("uuid") - 1, uuidbin); + if (err) + return err; + + optr = uuid; + for (iptr = uuidbin; iptr < &uuidbin[GRUB_MD_SHA256->mdlen]; iptr++) + { + grub_snprintf (optr, 3, "%02x", *iptr); + optr += 2; + } + *optr = 0; + return GPG_ERR_NO_ERROR; +} + +#ifdef GRUB_UTIL + +#include +#include + +char * +grub_util_get_geli_uuid (const char *dev) +{ + grub_util_fd_t fd; + grub_uint64_t s; + unsigned log_secsize; + grub_uint8_t hdr[512]; + struct grub_geli_phdr *header; + char *uuid; + gcry_err_code_t err; + + fd = grub_util_fd_open (dev, GRUB_UTIL_FD_O_RDONLY); + + if (!GRUB_UTIL_FD_IS_VALID (fd)) + return NULL; + + s = grub_util_get_fd_size (fd, dev, &log_secsize); + s >>= log_secsize; + if (grub_util_fd_seek (fd, (s << log_secsize) - 512) < 0) + grub_util_error ("%s", _("couldn't read ELI metadata")); + + uuid = xmalloc (GRUB_MD_SHA256->mdlen * 2 + 1); + if (grub_util_fd_read (fd, (void *) &hdr, 512) < 0) + grub_util_error ("%s", _("couldn't read ELI metadata")); + + grub_util_fd_close (fd); + + COMPILE_TIME_ASSERT (sizeof (header) <= 512); + header = (void *) &hdr; + + /* Look for GELI magic sequence. */ + if (grub_memcmp (header->magic, GELI_MAGIC, sizeof (GELI_MAGIC)) + || grub_le_to_cpu32 (header->version) > 7 + || grub_le_to_cpu32 (header->version) < 1) + grub_util_error ("%s", _("wrong ELI magic or version")); + + err = make_uuid ((void *) &hdr, uuid); + if (err) + { + grub_free (uuid); + return NULL; + } + + return uuid; +} +#endif + +static grub_cryptodisk_t +configure_ciphers (grub_disk_t disk, const char *check_uuid, + int boot_only) +{ + grub_cryptodisk_t newdev; + struct grub_geli_phdr header; + grub_crypto_cipher_handle_t cipher = NULL, secondary_cipher = NULL; + const struct gcry_cipher_spec *ciph; + const char *ciphername = NULL; + gcry_err_code_t gcry_err; + char uuid[GRUB_CRYPTODISK_MAX_UUID_LENGTH]; + grub_disk_addr_t sector; + grub_err_t err; + + if (2 * GRUB_MD_SHA256->mdlen + 1 > GRUB_CRYPTODISK_MAX_UUID_LENGTH) + return NULL; + + sector = grub_disk_get_size (disk); + if (sector == GRUB_DISK_SIZE_UNKNOWN || sector == 0) + return NULL; + + /* Read the GELI header. */ + err = grub_disk_read (disk, sector - 1, 0, sizeof (header), &header); + if (err) + return NULL; + + /* Look for GELI magic sequence. */ + if (grub_memcmp (header.magic, GELI_MAGIC, sizeof (GELI_MAGIC)) + || grub_le_to_cpu32 (header.version) > 7 + || grub_le_to_cpu32 (header.version) < 1) + { + grub_dprintf ("geli", "wrong magic %02x\n", header.magic[0]); + return NULL; + } + + if ((grub_le_to_cpu32 (header.sector_size) + & (grub_le_to_cpu32 (header.sector_size) - 1)) + || grub_le_to_cpu32 (header.sector_size) == 0) + { + grub_dprintf ("geli", "incorrect sector size %d\n", + grub_le_to_cpu32 (header.sector_size)); + return NULL; + } + + if (grub_le_to_cpu32 (header.flags) & GRUB_GELI_FLAGS_ONETIME) + { + grub_dprintf ("geli", "skipping one-time volume\n"); + return NULL; + } + + if (boot_only && !(grub_le_to_cpu32 (header.flags) & GRUB_GELI_FLAGS_BOOT)) + { + grub_dprintf ("geli", "not a boot volume\n"); + return NULL; + } + + gcry_err = make_uuid (&header, uuid); + if (gcry_err) + { + grub_crypto_gcry_error (gcry_err); + return NULL; + } + + if (check_uuid && grub_strcasecmp (check_uuid, uuid) != 0) + { + grub_dprintf ("geli", "%s != %s\n", uuid, check_uuid); + return NULL; + } + + if (grub_le_to_cpu16 (header.alg) >= ARRAY_SIZE (algorithms) + || algorithms[grub_le_to_cpu16 (header.alg)] == NULL) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, "Cipher 0x%x unknown", + grub_le_to_cpu16 (header.alg)); + return NULL; + } + + ciphername = algorithms[grub_le_to_cpu16 (header.alg)]; + ciph = grub_crypto_lookup_cipher_by_name (ciphername); + if (!ciph) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, "Cipher %s isn't available", + ciphername); + return NULL; + } + + /* Configure the cipher used for the bulk data. */ + cipher = grub_crypto_cipher_open (ciph); + if (!cipher) + return NULL; + + if (grub_le_to_cpu16 (header.alg) == 0x16) + { + secondary_cipher = grub_crypto_cipher_open (ciph); + if (!secondary_cipher) + { + grub_crypto_cipher_close (cipher); + return NULL; + } + + } + + if (grub_le_to_cpu16 (header.keylen) > 1024) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d", + grub_le_to_cpu16 (header.keylen)); + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (secondary_cipher); + return NULL; + } + + newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); + if (!newdev) + { + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (secondary_cipher); + return NULL; + } + newdev->cipher = cipher; + newdev->secondary_cipher = secondary_cipher; + newdev->offset = 0; + newdev->source_disk = NULL; + newdev->benbi_log = 0; + if (grub_le_to_cpu16 (header.alg) == 0x16) + { + newdev->mode = GRUB_CRYPTODISK_MODE_XTS; + newdev->mode_iv = GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64; + } + else + { + newdev->mode = GRUB_CRYPTODISK_MODE_CBC; + newdev->mode_iv = GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64_HASH; + } + newdev->essiv_cipher = NULL; + newdev->essiv_hash = NULL; + newdev->hash = GRUB_MD_SHA512; + newdev->iv_hash = GRUB_MD_SHA256; + + for (newdev->log_sector_size = 0; + (1U << newdev->log_sector_size) < grub_le_to_cpu32 (header.sector_size); + newdev->log_sector_size++); + + if (grub_le_to_cpu32 (header.version) >= 5) + { + newdev->rekey = geli_rekey; + newdev->rekey_shift = 20; + } + + newdev->modname = "geli"; + + newdev->total_length = grub_disk_get_size (disk) - 1; + grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); + COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= 32 * 2 + 1); + return newdev; +} + +static grub_err_t +recover_key (grub_disk_t source, grub_cryptodisk_t dev) +{ + grub_size_t keysize; + grub_uint8_t digest[GRUB_CRYPTO_MAX_MDLEN]; + grub_uint8_t geomkey[GRUB_CRYPTO_MAX_MDLEN]; + grub_uint8_t verify_key[GRUB_CRYPTO_MAX_MDLEN]; + grub_uint8_t zero[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE]; + grub_uint8_t geli_cipher_key[64]; + char passphrase[MAX_PASSPHRASE] = ""; + unsigned i; + gcry_err_code_t gcry_err; + struct grub_geli_phdr header; + char *tmp; + grub_disk_addr_t sector; + grub_err_t err; + + if (dev->cipher->cipher->blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE) + return grub_error (GRUB_ERR_BUG, "cipher block is too long"); + + if (dev->hash->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return grub_error (GRUB_ERR_BUG, "mdlen is too long"); + + sector = grub_disk_get_size (source); + if (sector == GRUB_DISK_SIZE_UNKNOWN || sector == 0) + return grub_error (GRUB_ERR_BUG, "not a geli"); + + /* Read the GELI header. */ + err = grub_disk_read (source, sector - 1, 0, sizeof (header), &header); + if (err) + return err; + + keysize = grub_le_to_cpu16 (header.keylen) / GRUB_CHAR_BIT; + grub_memset (zero, 0, sizeof (zero)); + + grub_puts_ (N_("Attempting to decrypt master key...")); + + /* Get the passphrase from the user. */ + tmp = NULL; + if (source->partition) + tmp = grub_partition_get_name (source->partition); + grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, + source->partition ? "," : "", tmp ? : "", + dev->uuid); + grub_free (tmp); + if (!grub_password_get (passphrase, MAX_PASSPHRASE)) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); + + /* Calculate the PBKDF2 of the user supplied passphrase. */ + if (grub_le_to_cpu32 (header.niter) != 0) + { + grub_uint8_t pbkdf_key[64]; + gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, + grub_strlen (passphrase), + header.salt, + sizeof (header.salt), + grub_le_to_cpu32 (header.niter), + pbkdf_key, sizeof (pbkdf_key)); + + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + + gcry_err = grub_crypto_hmac_buffer (dev->hash, NULL, 0, pbkdf_key, + sizeof (pbkdf_key), geomkey); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + } + else + { + struct grub_crypto_hmac_handle *hnd; + + hnd = grub_crypto_hmac_init (dev->hash, NULL, 0); + if (!hnd) + return grub_crypto_gcry_error (GPG_ERR_OUT_OF_MEMORY); + + grub_crypto_hmac_write (hnd, header.salt, sizeof (header.salt)); + grub_crypto_hmac_write (hnd, passphrase, grub_strlen (passphrase)); + + gcry_err = grub_crypto_hmac_fini (hnd, geomkey); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + } + + gcry_err = grub_crypto_hmac_buffer (dev->hash, geomkey, + dev->hash->mdlen, "\1", 1, digest); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + + gcry_err = grub_crypto_hmac_buffer (dev->hash, geomkey, + dev->hash->mdlen, "\0", 1, verify_key); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + + grub_dprintf ("geli", "keylen = %" PRIuGRUB_SIZE "\n", keysize); + + /* Try to recover master key from each active keyslot. */ + for (i = 0; i < ARRAY_SIZE (header.keys); i++) + { + struct grub_geli_key candidate_key; + grub_uint8_t key_hmac[GRUB_CRYPTO_MAX_MDLEN]; + + /* Check if keyslot is enabled. */ + if (! (header.keys_used & (1 << i))) + continue; + + grub_dprintf ("geli", "Trying keyslot %d\n", i); + + gcry_err = grub_crypto_cipher_set_key (dev->cipher, + digest, keysize); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + + gcry_err = grub_crypto_cbc_decrypt (dev->cipher, &candidate_key, + &header.keys[i], + sizeof (candidate_key), + zero); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + + gcry_err = grub_crypto_hmac_buffer (dev->hash, verify_key, + dev->hash->mdlen, + &candidate_key, + (sizeof (candidate_key) + - sizeof (candidate_key.hmac)), + key_hmac); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + + if (grub_memcmp (candidate_key.hmac, key_hmac, dev->hash->mdlen) != 0) + continue; + grub_printf_ (N_("Slot %d opened\n"), i); + + if (grub_le_to_cpu32 (header.version) >= 7) + { + /* GELI >=7 uses the cipher_key */ + grub_memcpy (geli_cipher_key, candidate_key.cipher_key, + sizeof (candidate_key.cipher_key)); + } + else + { + /* GELI <=6 uses the iv_key */ + grub_memcpy (geli_cipher_key, candidate_key.iv_key, + sizeof (candidate_key.iv_key)); + } + + /* Set the master key. */ + if (!dev->rekey) + { + grub_size_t real_keysize = keysize; + if (grub_le_to_cpu16 (header.alg) == 0x16) + real_keysize *= 2; + gcry_err = grub_cryptodisk_setkey (dev, candidate_key.cipher_key, + real_keysize); + if (gcry_err) + return grub_crypto_gcry_error (gcry_err); + } + else + { + grub_size_t real_keysize = keysize; + if (grub_le_to_cpu16 (header.alg) == 0x16) + real_keysize *= 2; + + grub_memcpy (dev->rekey_key, geli_cipher_key, + sizeof (geli_cipher_key)); + dev->rekey_derived_size = real_keysize; + dev->last_rekey = -1; + COMPILE_TIME_ASSERT (sizeof (dev->rekey_key) + >= sizeof (geli_cipher_key)); + } + + dev->iv_prefix_len = sizeof (candidate_key.iv_key); + grub_memcpy (dev->iv_prefix, candidate_key.iv_key, + sizeof (candidate_key.iv_key)); + + COMPILE_TIME_ASSERT (sizeof (dev->iv_prefix) >= sizeof (candidate_key.iv_key)); + + return GRUB_ERR_NONE; + } + + return GRUB_ACCESS_DENIED; +} + +struct grub_cryptodisk_dev geli_crypto = { + .scan = configure_ciphers, + .recover_key = recover_key +}; + +GRUB_MOD_INIT (geli) +{ + grub_cryptodisk_dev_register (&geli_crypto); +} + +GRUB_MOD_FINI (geli) +{ + grub_cryptodisk_dev_unregister (&geli_crypto); +} diff --git a/grub-core/disk/host.c b/grub-core/disk/host.c new file mode 100644 index 000000000..76ef1afb8 --- /dev/null +++ b/grub-core/disk/host.c @@ -0,0 +1,103 @@ +/* host.c - Dummy disk driver to provide access to the hosts filesystem */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* When using the disk, make a reference to this module. Otherwise + the user will end up with a useless module :-). */ + +#include +#include + +#include +#include +#include +#include + +int grub_disk_host_i_want_a_reference; + +static int +grub_host_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + if (hook ("host", hook_data)) + return 1; + return 0; +} + +static grub_err_t +grub_host_open (const char *name, grub_disk_t disk) +{ + if (grub_strcmp (name, "host")) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a host disk"); + + disk->total_sectors = 0; + disk->id = 0; + + disk->data = 0; + + return GRUB_ERR_NONE; +} + +static void +grub_host_close (grub_disk_t disk __attribute((unused))) +{ +} + +static grub_err_t +grub_host_read (grub_disk_t disk __attribute((unused)), + grub_disk_addr_t sector __attribute((unused)), + grub_size_t size __attribute((unused)), + char *buf __attribute((unused))) +{ + return GRUB_ERR_OUT_OF_RANGE; +} + +static grub_err_t +grub_host_write (grub_disk_t disk __attribute ((unused)), + grub_disk_addr_t sector __attribute ((unused)), + grub_size_t size __attribute ((unused)), + const char *buf __attribute ((unused))) +{ + return GRUB_ERR_OUT_OF_RANGE; +} + +static struct grub_disk_dev grub_host_dev = + { + /* The only important line in this file :-) */ + .name = "host", + .id = GRUB_DISK_DEVICE_HOST_ID, + .iterate = grub_host_iterate, + .open = grub_host_open, + .close = grub_host_close, + .read = grub_host_read, + .write = grub_host_write, + .next = 0 + }; + +GRUB_MOD_INIT(host) +{ + grub_disk_dev_register (&grub_host_dev); +} + +GRUB_MOD_FINI(host) +{ + grub_disk_dev_unregister (&grub_host_dev); +} diff --git a/grub-core/disk/i386/pc/biosdisk.c b/grub-core/disk/i386/pc/biosdisk.c new file mode 100644 index 000000000..f0aadd111 --- /dev/null +++ b/grub-core/disk/i386/pc/biosdisk.c @@ -0,0 +1,688 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static int cd_drive = 0; +static int grub_biosdisk_rw_int13_extensions (int ah, int drive, void *dap); + +static int grub_biosdisk_get_num_floppies (void) +{ + struct grub_bios_int_registers regs; + int drive; + + /* reset the disk system first */ + regs.eax = 0; + regs.edx = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + + grub_bios_interrupt (0x13, ®s); + + for (drive = 0; drive < 2; drive++) + { + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT | GRUB_CPU_INT_FLAGS_CARRY; + regs.edx = drive; + + /* call GET DISK TYPE */ + regs.eax = 0x1500; + grub_bios_interrupt (0x13, ®s); + if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY) + break; + + /* check if this drive exists */ + if (!(regs.eax & 0x300)) + break; + } + + return drive; +} + +/* + * Call IBM/MS INT13 Extensions (int 13 %ah=AH) for DRIVE. DAP + * is passed for disk address packet. If an error occurs, return + * non-zero, otherwise zero. + */ + +static int +grub_biosdisk_rw_int13_extensions (int ah, int drive, void *dap) +{ + struct grub_bios_int_registers regs; + regs.eax = ah << 8; + /* compute the address of disk_address_packet */ + regs.ds = (((grub_addr_t) dap) & 0xffff0000) >> 4; + regs.esi = (((grub_addr_t) dap) & 0xffff); + regs.edx = drive; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + + grub_bios_interrupt (0x13, ®s); + return (regs.eax >> 8) & 0xff; +} + +/* + * Call standard and old INT13 (int 13 %ah=AH) for DRIVE. Read/write + * NSEC sectors from COFF/HOFF/SOFF into SEGMENT. If an error occurs, + * return non-zero, otherwise zero. + */ +static int +grub_biosdisk_rw_standard (int ah, int drive, int coff, int hoff, + int soff, int nsec, int segment) +{ + int ret, i; + + /* Try 3 times. */ + for (i = 0; i < 3; i++) + { + struct grub_bios_int_registers regs; + + /* set up CHS information */ + /* set %ch to low eight bits of cylinder */ + regs.ecx = (coff << 8) & 0xff00; + /* set bits 6-7 of %cl to high two bits of cylinder */ + regs.ecx |= (coff >> 2) & 0xc0; + /* set bits 0-5 of %cl to sector */ + regs.ecx |= soff & 0x3f; + + /* set %dh to head and %dl to drive */ + regs.edx = (drive & 0xff) | ((hoff << 8) & 0xff00); + /* set %ah to AH */ + regs.eax = (ah << 8) & 0xff00; + /* set %al to NSEC */ + regs.eax |= nsec & 0xff; + + regs.ebx = 0; + regs.es = segment; + + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + + grub_bios_interrupt (0x13, ®s); + /* check if successful */ + if (!(regs.flags & GRUB_CPU_INT_FLAGS_CARRY)) + return 0; + + /* save return value */ + ret = regs.eax >> 8; + + /* if fail, reset the disk system */ + regs.eax = 0; + regs.edx = (drive & 0xff); + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x13, ®s); + } + return ret; +} + +/* + * Check if LBA is supported for DRIVE. If it is supported, then return + * the major version of extensions, otherwise zero. + */ +static int +grub_biosdisk_check_int13_extensions (int drive) +{ + struct grub_bios_int_registers regs; + + regs.edx = drive & 0xff; + regs.eax = 0x4100; + regs.ebx = 0x55aa; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x13, ®s); + + if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY) + return 0; + + if ((regs.ebx & 0xffff) != 0xaa55) + return 0; + + /* check if AH=0x42 is supported */ + if (!(regs.ecx & 1)) + return 0; + + return (regs.eax >> 8) & 0xff; +} + +/* + * Return the geometry of DRIVE in CYLINDERS, HEADS and SECTORS. If an + * error occurs, then return non-zero, otherwise zero. + */ +static int +grub_biosdisk_get_diskinfo_standard (int drive, + unsigned long *cylinders, + unsigned long *heads, + unsigned long *sectors) +{ + struct grub_bios_int_registers regs; + + regs.eax = 0x0800; + regs.edx = drive & 0xff; + + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x13, ®s); + + /* Check if unsuccessful. Ignore return value if carry isn't set to + workaround some buggy BIOSes. */ + if ((regs.flags & GRUB_CPU_INT_FLAGS_CARRY) && ((regs.eax & 0xff00) != 0)) + return (regs.eax & 0xff00) >> 8; + + /* bogus BIOSes may not return an error number */ + /* 0 sectors means no disk */ + if (!(regs.ecx & 0x3f)) + /* XXX 0x60 is one of the unused error numbers */ + return 0x60; + + /* the number of heads is counted from zero */ + *heads = ((regs.edx >> 8) & 0xff) + 1; + *cylinders = (((regs.ecx >> 8) & 0xff) | ((regs.ecx << 2) & 0x0300)) + 1; + *sectors = regs.ecx & 0x3f; + return 0; +} + +static int +grub_biosdisk_get_diskinfo_real (int drive, void *drp, grub_uint16_t ax) +{ + struct grub_bios_int_registers regs; + + regs.eax = ax; + + /* compute the address of drive parameters */ + regs.esi = ((grub_addr_t) drp) & 0xf; + regs.ds = ((grub_addr_t) drp) >> 4; + regs.edx = drive & 0xff; + + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x13, ®s); + + /* Check if unsuccessful. Ignore return value if carry isn't set to + workaround some buggy BIOSes. */ + if ((regs.flags & GRUB_CPU_INT_FLAGS_CARRY) && ((regs.eax & 0xff00) != 0)) + return (regs.eax & 0xff00) >> 8; + + return 0; +} + +/* + * Return the cdrom information of DRIVE in CDRP. If an error occurs, + * then return non-zero, otherwise zero. + */ +static int +grub_biosdisk_get_cdinfo_int13_extensions (int drive, void *cdrp) +{ + return grub_biosdisk_get_diskinfo_real (drive, cdrp, 0x4b01); +} + +/* + * Return the geometry of DRIVE in a drive parameters, DRP. If an error + * occurs, then return non-zero, otherwise zero. + */ +static int +grub_biosdisk_get_diskinfo_int13_extensions (int drive, void *drp) +{ + return grub_biosdisk_get_diskinfo_real (drive, drp, 0x4800); +} + +static int +grub_biosdisk_get_drive (const char *name) +{ + unsigned long drive; + + if (name[0] == 'c' && name[1] == 'd' && name[2] == 0 && cd_drive) + return cd_drive; + + if ((name[0] != 'f' && name[0] != 'h') || name[1] != 'd') + goto fail; + + drive = grub_strtoul (name + 2, 0, 10); + if (grub_errno != GRUB_ERR_NONE) + goto fail; + + if (name[0] == 'h') + drive += 0x80; + + return (int) drive ; + + fail: + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a biosdisk"); + return -1; +} + +static int +grub_biosdisk_call_hook (grub_disk_dev_iterate_hook_t hook, void *hook_data, + int drive) +{ + char name[10]; + + if (cd_drive && drive == cd_drive) + return hook ("cd", hook_data); + + grub_snprintf (name, sizeof (name), + (drive & 0x80) ? "hd%d" : "fd%d", drive & (~0x80)); + return hook (name, hook_data); +} + +static int +grub_biosdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + int num_floppies; + int drive; + + /* For hard disks, attempt to read the MBR. */ + switch (pull) + { + case GRUB_DISK_PULL_NONE: + for (drive = 0x80; drive < 0x90; drive++) + { + if (grub_biosdisk_rw_standard (0x02, drive, 0, 0, 1, 1, + GRUB_MEMORY_MACHINE_SCRATCH_SEG) != 0) + { + grub_dprintf ("disk", "Read error when probing drive 0x%2x\n", drive); + break; + } + + if (grub_biosdisk_call_hook (hook, hook_data, drive)) + return 1; + } + return 0; + + case GRUB_DISK_PULL_REMOVABLE: + if (cd_drive) + { + if (grub_biosdisk_call_hook (hook, hook_data, cd_drive)) + return 1; + } + + /* For floppy disks, we can get the number safely. */ + num_floppies = grub_biosdisk_get_num_floppies (); + for (drive = 0; drive < num_floppies; drive++) + if (grub_biosdisk_call_hook (hook, hook_data, drive)) + return 1; + return 0; + default: + return 0; + } + return 0; +} + +static grub_err_t +grub_biosdisk_open (const char *name, grub_disk_t disk) +{ + grub_uint64_t total_sectors = 0; + int drive; + struct grub_biosdisk_data *data; + + drive = grub_biosdisk_get_drive (name); + if (drive < 0) + return grub_errno; + + disk->id = drive; + + data = (struct grub_biosdisk_data *) grub_zalloc (sizeof (*data)); + if (! data) + return grub_errno; + + data->drive = drive; + + if ((cd_drive) && (drive == cd_drive)) + { + data->flags = GRUB_BIOSDISK_FLAG_LBA | GRUB_BIOSDISK_FLAG_CDROM; + data->sectors = 8; + disk->log_sector_size = 11; + /* TODO: get the correct size. */ + total_sectors = GRUB_DISK_SIZE_UNKNOWN; + } + else + { + /* HDD */ + int version; + + disk->log_sector_size = 9; + + version = grub_biosdisk_check_int13_extensions (drive); + if (version) + { + struct grub_biosdisk_drp *drp + = (struct grub_biosdisk_drp *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR; + + /* Clear out the DRP. */ + grub_memset (drp, 0, sizeof (*drp)); + drp->size = sizeof (*drp); + if (! grub_biosdisk_get_diskinfo_int13_extensions (drive, drp)) + { + data->flags = GRUB_BIOSDISK_FLAG_LBA; + + if (drp->total_sectors) + total_sectors = drp->total_sectors; + else + /* Some buggy BIOSes doesn't return the total sectors + correctly but returns zero. So if it is zero, compute + it by C/H/S returned by the LBA BIOS call. */ + total_sectors = ((grub_uint64_t) drp->cylinders) + * drp->heads * drp->sectors; + if (drp->bytes_per_sector + && !(drp->bytes_per_sector & (drp->bytes_per_sector - 1)) + && drp->bytes_per_sector >= 512 + && drp->bytes_per_sector <= 16384) + { + for (disk->log_sector_size = 0; + (1 << disk->log_sector_size) < drp->bytes_per_sector; + disk->log_sector_size++); + } + } + } + } + + if (! (data->flags & GRUB_BIOSDISK_FLAG_CDROM)) + { + if (grub_biosdisk_get_diskinfo_standard (drive, + &data->cylinders, + &data->heads, + &data->sectors) != 0) + { + if (total_sectors && (data->flags & GRUB_BIOSDISK_FLAG_LBA)) + { + data->sectors = 63; + data->heads = 255; + data->cylinders + = grub_divmod64 (total_sectors + + data->heads * data->sectors - 1, + data->heads * data->sectors, 0); + } + else + { + grub_free (data); + return grub_error (GRUB_ERR_BAD_DEVICE, "%s cannot get C/H/S values", disk->name); + } + } + + if (data->sectors == 0) + data->sectors = 63; + if (data->heads == 0) + data->heads = 255; + + if (! total_sectors) + total_sectors = ((grub_uint64_t) data->cylinders) + * data->heads * data->sectors; + } + + disk->total_sectors = total_sectors; + /* Limit the max to 0x7f because of Phoenix EDD. */ + disk->max_agglomerate = 0x7f >> GRUB_DISK_CACHE_BITS; + COMPILE_TIME_ASSERT ((0x7f >> GRUB_DISK_CACHE_BITS + << (GRUB_DISK_SECTOR_BITS + GRUB_DISK_CACHE_BITS)) + + sizeof (struct grub_biosdisk_dap) + < GRUB_MEMORY_MACHINE_SCRATCH_SIZE); + + disk->data = data; + + return GRUB_ERR_NONE; +} + +static void +grub_biosdisk_close (grub_disk_t disk) +{ + grub_free (disk->data); +} + +/* For readability. */ +#define GRUB_BIOSDISK_READ 0 +#define GRUB_BIOSDISK_WRITE 1 + +#define GRUB_BIOSDISK_CDROM_RETRY_COUNT 3 + +static grub_err_t +grub_biosdisk_rw (int cmd, grub_disk_t disk, + grub_disk_addr_t sector, grub_size_t size, + unsigned segment) +{ + struct grub_biosdisk_data *data = disk->data; + + /* VirtualBox fails with sectors above 2T on CDs. + Since even BD-ROMS are never that big anyway, return error. */ + if ((data->flags & GRUB_BIOSDISK_FLAG_CDROM) + && (sector >> 32)) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read or write outside of disk `%s'"), + disk->name); + + if (data->flags & GRUB_BIOSDISK_FLAG_LBA) + { + struct grub_biosdisk_dap *dap; + + dap = (struct grub_biosdisk_dap *) (GRUB_MEMORY_MACHINE_SCRATCH_ADDR + + (data->sectors + << disk->log_sector_size)); + dap->length = sizeof (*dap); + dap->reserved = 0; + dap->blocks = size; + dap->buffer = segment << 16; /* The format SEGMENT:ADDRESS. */ + dap->block = sector; + + if (data->flags & GRUB_BIOSDISK_FLAG_CDROM) + { + int i; + + if (cmd) + return grub_error (GRUB_ERR_WRITE_ERROR, N_("cannot write to CD-ROM")); + + for (i = 0; i < GRUB_BIOSDISK_CDROM_RETRY_COUNT; i++) + if (! grub_biosdisk_rw_int13_extensions (0x42, data->drive, dap)) + break; + + if (i == GRUB_BIOSDISK_CDROM_RETRY_COUNT) + return grub_error (GRUB_ERR_READ_ERROR, N_("failure reading sector 0x%llx " + "from `%s'"), + (unsigned long long) sector, + disk->name); + } + else + if (grub_biosdisk_rw_int13_extensions (cmd + 0x42, data->drive, dap)) + { + /* Fall back to the CHS mode. */ + data->flags &= ~GRUB_BIOSDISK_FLAG_LBA; + disk->total_sectors = data->cylinders * data->heads * data->sectors; + return grub_biosdisk_rw (cmd, disk, sector, size, segment); + } + } + else + { + unsigned coff, hoff, soff; + unsigned head; + + /* It is impossible to reach over 8064 MiB (a bit less than LBA24) with + the traditional CHS access. */ + if (sector > + 1024 /* cylinders */ * + 256 /* heads */ * + 63 /* spt */) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read or write outside of disk `%s'"), + disk->name); + + soff = ((grub_uint32_t) sector) % data->sectors + 1; + head = ((grub_uint32_t) sector) / data->sectors; + hoff = head % data->heads; + coff = head / data->heads; + + if (coff >= data->cylinders) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read or write outside of disk `%s'"), + disk->name); + + if (grub_biosdisk_rw_standard (cmd + 0x02, data->drive, + coff, hoff, soff, size, segment)) + { + switch (cmd) + { + case GRUB_BIOSDISK_READ: + return grub_error (GRUB_ERR_READ_ERROR, N_("failure reading sector 0x%llx " + "from `%s'"), + (unsigned long long) sector, + disk->name); + case GRUB_BIOSDISK_WRITE: + return grub_error (GRUB_ERR_WRITE_ERROR, N_("failure writing sector 0x%llx " + "to `%s'"), + (unsigned long long) sector, + disk->name); + } + } + } + + return GRUB_ERR_NONE; +} + +/* Return the number of sectors which can be read safely at a time. */ +static grub_size_t +get_safe_sectors (grub_disk_t disk, grub_disk_addr_t sector) +{ + grub_size_t size; + grub_uint64_t offset; + struct grub_biosdisk_data *data = disk->data; + grub_uint32_t sectors = data->sectors; + + /* OFFSET = SECTOR % SECTORS */ + grub_divmod64 (sector, sectors, &offset); + + size = sectors - offset; + + return size; +} + +static grub_err_t +grub_biosdisk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + while (size) + { + grub_size_t len; + + len = get_safe_sectors (disk, sector); + + if (len > size) + len = size; + + if (grub_biosdisk_rw (GRUB_BIOSDISK_READ, disk, sector, len, + GRUB_MEMORY_MACHINE_SCRATCH_SEG)) + return grub_errno; + + grub_memcpy (buf, (void *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR, + len << disk->log_sector_size); + + buf += len << disk->log_sector_size; + sector += len; + size -= len; + } + + return grub_errno; +} + +static grub_err_t +grub_biosdisk_write (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + struct grub_biosdisk_data *data = disk->data; + + if (data->flags & GRUB_BIOSDISK_FLAG_CDROM) + return grub_error (GRUB_ERR_IO, N_("cannot write to CD-ROM")); + + while (size) + { + grub_size_t len; + + len = get_safe_sectors (disk, sector); + if (len > size) + len = size; + + grub_memcpy ((void *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR, buf, + len << disk->log_sector_size); + + if (grub_biosdisk_rw (GRUB_BIOSDISK_WRITE, disk, sector, len, + GRUB_MEMORY_MACHINE_SCRATCH_SEG)) + return grub_errno; + + buf += len << disk->log_sector_size; + sector += len; + size -= len; + } + + return grub_errno; +} + +static struct grub_disk_dev grub_biosdisk_dev = + { + .name = "biosdisk", + .id = GRUB_DISK_DEVICE_BIOSDISK_ID, + .iterate = grub_biosdisk_iterate, + .open = grub_biosdisk_open, + .close = grub_biosdisk_close, + .read = grub_biosdisk_read, + .write = grub_biosdisk_write, + .next = 0 + }; + +static void +grub_disk_biosdisk_fini (void) +{ + grub_disk_dev_unregister (&grub_biosdisk_dev); +} + +GRUB_MOD_INIT(biosdisk) +{ + struct grub_biosdisk_cdrp *cdrp + = (struct grub_biosdisk_cdrp *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR; + grub_uint8_t boot_drive; + + if (grub_disk_firmware_is_tainted) + { + grub_puts_ (N_("Native disk drivers are in use. " + "Refusing to use firmware disk interface.")); + return; + } + grub_disk_firmware_fini = grub_disk_biosdisk_fini; + + grub_memset (cdrp, 0, sizeof (*cdrp)); + cdrp->size = sizeof (*cdrp); + cdrp->media_type = 0xFF; + boot_drive = (grub_boot_device >> 24); + if ((! grub_biosdisk_get_cdinfo_int13_extensions (boot_drive, cdrp)) + && ((cdrp->media_type & GRUB_BIOSDISK_CDTYPE_MASK) + == GRUB_BIOSDISK_CDTYPE_NO_EMUL)) + cd_drive = cdrp->drive_no; + /* Since diskboot.S rejects devices over 0x90 it must be a CD booted with + cdboot.S + */ + if (boot_drive >= 0x90) + cd_drive = boot_drive; + + grub_disk_dev_register (&grub_biosdisk_dev); +} + +GRUB_MOD_FINI(biosdisk) +{ + grub_disk_biosdisk_fini (); +} diff --git a/grub-core/disk/ieee1275/nand.c b/grub-core/disk/ieee1275/nand.c new file mode 100644 index 000000000..feffa8c4c --- /dev/null +++ b/grub-core/disk/ieee1275/nand.c @@ -0,0 +1,242 @@ +/* nand.c - NAND flash disk access. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_nand_data +{ + grub_ieee1275_ihandle_t handle; + grub_uint32_t block_size; +}; + +static int +grub_nand_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + static int have_nand = -1; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + if (have_nand == -1) + { + struct grub_ieee1275_devalias alias; + + have_nand = 0; + FOR_IEEE1275_DEVALIASES(alias) + if (grub_strcmp (alias.name, "nand") == 0) + { + have_nand = 1; + break; + } + grub_ieee1275_devalias_free (&alias); + } + + if (have_nand) + return hook ("nand", hook_data); + + return 0; +} + +static grub_err_t +grub_nand_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf); + +static grub_err_t +grub_nand_open (const char *name, grub_disk_t disk) +{ + grub_ieee1275_ihandle_t dev_ihandle = 0; + struct grub_nand_data *data = 0; + const char *devname; + struct size_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t result; + grub_ieee1275_cell_t size1; + grub_ieee1275_cell_t size2; + } args; + + if (grub_memcmp (name, "nand/", sizeof ("nand/") - 1) == 0) + devname = name + sizeof ("nand/") - 1; + else if (grub_strcmp (name, "nand") == 0) + devname = name; + else + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a NAND device"); + + data = grub_malloc (sizeof (*data)); + if (! data) + goto fail; + + grub_ieee1275_open (devname, &dev_ihandle); + if (! dev_ihandle) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device"); + goto fail; + } + + data->handle = dev_ihandle; + + INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 2); + args.method = (grub_ieee1275_cell_t) "block-size"; + args.ihandle = dev_ihandle; + args.result = 1; + + if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result)) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't get block size"); + goto fail; + } + + data->block_size = (args.size1 >> GRUB_DISK_SECTOR_BITS); + if (!data->block_size) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "invalid block size"); + goto fail; + } + + INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3); + args.method = (grub_ieee1275_cell_t) "size"; + args.ihandle = dev_ihandle; + args.result = 1; + + if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result)) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't get disk size"); + goto fail; + } + + disk->total_sectors = args.size1; + disk->total_sectors <<= 32; + disk->total_sectors += args.size2; + disk->total_sectors >>= GRUB_DISK_SECTOR_BITS; + + disk->id = dev_ihandle; + + disk->data = data; + + return 0; + +fail: + if (dev_ihandle) + grub_ieee1275_close (dev_ihandle); + grub_free (data); + return grub_errno; +} + +static void +grub_nand_close (grub_disk_t disk) +{ + grub_ieee1275_close (((struct grub_nand_data *) disk->data)->handle); + grub_free (disk->data); +} + +static grub_err_t +grub_nand_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + struct grub_nand_data *data = disk->data; + grub_size_t bsize, ofs; + + struct read_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t ofs; + grub_ieee1275_cell_t page; + grub_ieee1275_cell_t len; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t result; + } args; + + INIT_IEEE1275_COMMON (&args.common, "call-method", 6, 1); + args.method = (grub_ieee1275_cell_t) "pio-read"; + args.ihandle = data->handle; + args.buf = (grub_ieee1275_cell_t) buf; + args.page = (grub_ieee1275_cell_t) ((grub_size_t) sector / data->block_size); + + ofs = ((grub_size_t) sector % data->block_size) << GRUB_DISK_SECTOR_BITS; + size <<= GRUB_DISK_SECTOR_BITS; + bsize = (data->block_size << GRUB_DISK_SECTOR_BITS); + + do + { + grub_size_t len; + + len = (ofs + size > bsize) ? (bsize - ofs) : size; + + args.len = (grub_ieee1275_cell_t) len; + args.ofs = (grub_ieee1275_cell_t) ofs; + args.result = 1; + + if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result)) + return grub_error (GRUB_ERR_READ_ERROR, N_("failure reading sector 0x%llx " + "from `%s'"), + (unsigned long long) sector, + disk->name); + + ofs = 0; + size -= len; + args.buf += len; + args.page++; + } while (size); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_nand_write (grub_disk_t disk __attribute ((unused)), + grub_disk_addr_t sector __attribute ((unused)), + grub_size_t size __attribute ((unused)), + const char *buf __attribute ((unused))) +{ + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "nand write is not supported"); +} + +static struct grub_disk_dev grub_nand_dev = + { + .name = "nand", + .id = GRUB_DISK_DEVICE_NAND_ID, + .iterate = grub_nand_iterate, + .open = grub_nand_open, + .close = grub_nand_close, + .read = grub_nand_read, + .write = grub_nand_write, + .next = 0 + }; + +GRUB_MOD_INIT(nand) +{ + grub_disk_dev_register (&grub_nand_dev); +} + +GRUB_MOD_FINI(nand) +{ + grub_disk_dev_unregister (&grub_nand_dev); +} diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c new file mode 100644 index 000000000..235c0fe2c --- /dev/null +++ b/grub-core/disk/ieee1275/ofdisk.c @@ -0,0 +1,741 @@ +/* ofdisk.c - Open Firmware disk access. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +static char *last_devpath; +static grub_ieee1275_ihandle_t last_ihandle; + +struct ofdisk_hash_ent +{ + char *devpath; + char *open_path; + char *grub_devpath; + int is_boot; + int is_removable; + int block_size_fails; + /* Pointer to shortest available name on nodes representing canonical names, + otherwise NULL. */ + const char *shortest; + const char *grub_shortest; + struct ofdisk_hash_ent *next; +}; + +static grub_err_t +grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size, + struct ofdisk_hash_ent *op); + +#define OFDISK_HASH_SZ 8 +static struct ofdisk_hash_ent *ofdisk_hash[OFDISK_HASH_SZ]; + +static int +ofdisk_hash_fn (const char *devpath) +{ + int hash = 0; + while (*devpath) + hash ^= *devpath++; + return (hash & (OFDISK_HASH_SZ - 1)); +} + +static struct ofdisk_hash_ent * +ofdisk_hash_find (const char *devpath) +{ + struct ofdisk_hash_ent *p = ofdisk_hash[ofdisk_hash_fn(devpath)]; + + while (p) + { + if (!grub_strcmp (p->devpath, devpath)) + break; + p = p->next; + } + return p; +} + +static struct ofdisk_hash_ent * +ofdisk_hash_add_real (char *devpath) +{ + struct ofdisk_hash_ent *p; + struct ofdisk_hash_ent **head = &ofdisk_hash[ofdisk_hash_fn(devpath)]; + const char *iptr; + char *optr; + + p = grub_zalloc (sizeof (*p)); + if (!p) + return NULL; + + p->devpath = devpath; + + p->grub_devpath = grub_malloc (sizeof ("ieee1275/") + + 2 * grub_strlen (p->devpath)); + + if (!p->grub_devpath) + { + grub_free (p); + return NULL; + } + + if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PARTITION_0)) + { + p->open_path = grub_malloc (grub_strlen (p->devpath) + 3); + if (!p->open_path) + { + grub_free (p->grub_devpath); + grub_free (p); + return NULL; + } + optr = grub_stpcpy (p->open_path, p->devpath); + *optr++ = ':'; + *optr++ = '0'; + *optr = '\0'; + } + else + p->open_path = p->devpath; + + optr = grub_stpcpy (p->grub_devpath, "ieee1275/"); + for (iptr = p->devpath; *iptr; ) + { + if (*iptr == ',') + *optr++ = '\\'; + *optr++ = *iptr++; + } + *optr = 0; + + p->next = *head; + *head = p; + return p; +} + +static int +check_string_removable (const char *str) +{ + const char *ptr = grub_strrchr (str, '/'); + + if (ptr) + ptr++; + else + ptr = str; + return (grub_strncmp (ptr, "cdrom", 5) == 0 || grub_strncmp (ptr, "fd", 2) == 0); +} + +static struct ofdisk_hash_ent * +ofdisk_hash_add (char *devpath, char *curcan) +{ + struct ofdisk_hash_ent *p, *pcan; + + p = ofdisk_hash_add_real (devpath); + + grub_dprintf ("disk", "devpath = %s, canonical = %s\n", devpath, curcan); + + if (!curcan) + { + p->shortest = p->devpath; + p->grub_shortest = p->grub_devpath; + if (check_string_removable (devpath)) + p->is_removable = 1; + return p; + } + + pcan = ofdisk_hash_find (curcan); + if (!pcan) + pcan = ofdisk_hash_add_real (curcan); + else + grub_free (curcan); + + if (check_string_removable (devpath) || check_string_removable (curcan)) + pcan->is_removable = 1; + + if (!pcan) + grub_errno = GRUB_ERR_NONE; + else + { + if (!pcan->shortest + || grub_strlen (pcan->shortest) > grub_strlen (devpath)) + { + pcan->shortest = p->devpath; + pcan->grub_shortest = p->grub_devpath; + } + } + + return p; +} + +static void +dev_iterate_real (const char *name, const char *path) +{ + struct ofdisk_hash_ent *op; + + grub_dprintf ("disk", "disk name = %s, path = %s\n", name, + path); + + op = ofdisk_hash_find (path); + if (!op) + { + char *name_dup = grub_strdup (name); + char *can = grub_strdup (path); + if (!name_dup || !can) + { + grub_errno = GRUB_ERR_NONE; + grub_free (name_dup); + grub_free (can); + return; + } + op = ofdisk_hash_add (name_dup, can); + } + return; +} + +static void +dev_iterate (const struct grub_ieee1275_devalias *alias) +{ + if (grub_strcmp (alias->type, "vscsi") == 0) + { + static grub_ieee1275_ihandle_t ihandle; + struct set_color_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t catch_result; + grub_ieee1275_cell_t nentries; + grub_ieee1275_cell_t table; + } + args; + char *buf, *bufptr; + unsigned i; + + if (grub_ieee1275_open (alias->path, &ihandle)) + return; + + /* This method doesn't need memory allocation for the table. Open + firmware takes care of all memory management and the result table + stays in memory and is never freed. */ + INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3); + args.method = (grub_ieee1275_cell_t) "vscsi-report-luns"; + args.ihandle = ihandle; + args.table = 0; + args.nentries = 0; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1 || args.catch_result) + { + grub_ieee1275_close (ihandle); + return; + } + + buf = grub_malloc (grub_strlen (alias->path) + 32); + if (!buf) + return; + bufptr = grub_stpcpy (buf, alias->path); + + for (i = 0; i < args.nentries; i++) + { + grub_uint64_t *ptr; + + ptr = *(grub_uint64_t **) (args.table + 4 + 8 * i); + while (*ptr) + { + grub_snprintf (bufptr, 32, "/disk@%" PRIxGRUB_UINT64_T, *ptr++); + dev_iterate_real (buf, buf); + } + } + grub_ieee1275_close (ihandle); + grub_free (buf); + return; + } + else if (grub_strcmp (alias->type, "sas_ioa") == 0) + { + /* The method returns the number of disks and a table where + * each ID is 64-bit long. Example of sas paths: + * /pci@80000002000001f/pci1014,034A@0/sas/disk@c05db70800 + * /pci@80000002000001f/pci1014,034A@0/sas/disk@a05db70800 + * /pci@80000002000001f/pci1014,034A@0/sas/disk@805db70800 */ + + struct sas_children + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t max; + grub_ieee1275_cell_t table; + grub_ieee1275_cell_t catch_result; + grub_ieee1275_cell_t nentries; + } + args; + char *buf, *bufptr; + unsigned i; + grub_uint64_t *table; + grub_uint16_t table_size; + grub_ieee1275_ihandle_t ihandle; + + buf = grub_malloc (grub_strlen (alias->path) + + sizeof ("/disk@7766554433221100")); + if (!buf) + return; + bufptr = grub_stpcpy (buf, alias->path); + + /* Power machines documentation specify 672 as maximum SAS disks in + one system. Using a slightly larger value to be safe. */ + table_size = 768; + table = grub_malloc (table_size * sizeof (grub_uint64_t)); + + if (!table) + { + grub_free (buf); + return; + } + + if (grub_ieee1275_open (alias->path, &ihandle)) + { + grub_free (buf); + grub_free (table); + return; + } + + INIT_IEEE1275_COMMON (&args.common, "call-method", 4, 2); + args.method = (grub_ieee1275_cell_t) "get-sas-children"; + args.ihandle = ihandle; + args.max = table_size; + args.table = (grub_ieee1275_cell_t) table; + args.catch_result = 0; + args.nentries = 0; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + { + grub_ieee1275_close (ihandle); + grub_free (table); + grub_free (buf); + return; + } + + for (i = 0; i < args.nentries; i++) + { + grub_snprintf (bufptr, sizeof ("/disk@7766554433221100"), + "/disk@%" PRIxGRUB_UINT64_T, table[i]); + dev_iterate_real (buf, buf); + } + + grub_ieee1275_close (ihandle); + grub_free (table); + grub_free (buf); + } + + if (!grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS) + && grub_strcmp (alias->type, "block") == 0) + { + dev_iterate_real (alias->path, alias->path); + return; + } + + { + struct grub_ieee1275_devalias child; + + FOR_IEEE1275_DEVCHILDREN(alias->path, child) + dev_iterate (&child); + } +} + +static void +scan (void) +{ + struct grub_ieee1275_devalias alias; + FOR_IEEE1275_DEVALIASES(alias) + { + if (grub_strcmp (alias.type, "block") != 0) + continue; + dev_iterate_real (alias.name, alias.path); + } + + FOR_IEEE1275_DEVCHILDREN("/", alias) + dev_iterate (&alias); +} + +static int +grub_ofdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + unsigned i; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + scan (); + + for (i = 0; i < ARRAY_SIZE (ofdisk_hash); i++) + { + static struct ofdisk_hash_ent *ent; + for (ent = ofdisk_hash[i]; ent; ent = ent->next) + { + if (!ent->shortest) + continue; + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_OFDISK_SDCARD_ONLY)) + { + grub_ieee1275_phandle_t dev; + char tmp[8]; + + if (grub_ieee1275_finddevice (ent->devpath, &dev)) + { + grub_dprintf ("disk", "finddevice (%s) failed\n", + ent->devpath); + continue; + } + + if (grub_ieee1275_get_property (dev, "iconname", tmp, + sizeof tmp, 0)) + { + grub_dprintf ("disk", "get iconname failed\n"); + continue; + } + + if (grub_strcmp (tmp, "sdmmc") != 0) + { + grub_dprintf ("disk", "device is not an SD card\n"); + continue; + } + } + + if (!ent->is_boot && ent->is_removable) + continue; + + if (hook (ent->grub_shortest, hook_data)) + return 1; + } + } + return 0; +} + +static char * +compute_dev_path (const char *name) +{ + char *devpath = grub_malloc (grub_strlen (name) + 3); + char *p, c; + + if (!devpath) + return NULL; + + /* Un-escape commas. */ + p = devpath; + while ((c = *name++) != '\0') + { + if (c == '\\' && *name == ',') + { + *p++ = ','; + name++; + } + else + *p++ = c; + } + + *p++ = '\0'; + + return devpath; +} + +static grub_err_t +grub_ofdisk_open (const char *name, grub_disk_t disk) +{ + grub_ieee1275_phandle_t dev; + char *devpath; + /* XXX: This should be large enough for any possible case. */ + char prop[64]; + grub_ssize_t actual; + grub_uint32_t block_size = 0; + grub_err_t err; + + if (grub_strncmp (name, "ieee1275/", sizeof ("ieee1275/") - 1) != 0) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "not IEEE1275 device"); + devpath = compute_dev_path (name + sizeof ("ieee1275/") - 1); + if (! devpath) + return grub_errno; + + grub_dprintf ("disk", "Opening `%s'.\n", devpath); + + if (grub_ieee1275_finddevice (devpath, &dev)) + { + grub_free (devpath); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "can't read device properties"); + } + + if (grub_ieee1275_get_property (dev, "device_type", prop, sizeof (prop), + &actual)) + { + grub_free (devpath); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't read the device type"); + } + + if (grub_strcmp (prop, "block")) + { + grub_free (devpath); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a block device"); + } + + /* XXX: There is no property to read the number of blocks. There + should be a property `#blocks', but it is not there. Perhaps it + is possible to use seek for this. */ + disk->total_sectors = GRUB_DISK_SIZE_UNKNOWN; + + { + struct ofdisk_hash_ent *op; + op = ofdisk_hash_find (devpath); + if (!op) + op = ofdisk_hash_add (devpath, NULL); + if (!op) + { + grub_free (devpath); + return grub_errno; + } + disk->id = (unsigned long) op; + disk->data = op->open_path; + + err = grub_ofdisk_get_block_size (devpath, &block_size, op); + if (err) + { + grub_free (devpath); + return err; + } + if (block_size != 0) + { + for (disk->log_sector_size = 0; + (1U << disk->log_sector_size) < block_size; + disk->log_sector_size++); + } + else + disk->log_sector_size = 9; + } + + grub_free (devpath); + return 0; +} + +static void +grub_ofdisk_close (grub_disk_t disk) +{ + if (disk->data == last_devpath) + { + if (last_ihandle) + grub_ieee1275_close (last_ihandle); + last_ihandle = 0; + last_devpath = NULL; + } + disk->data = 0; +} + +static grub_err_t +grub_ofdisk_prepare (grub_disk_t disk, grub_disk_addr_t sector) +{ + grub_ssize_t status; + unsigned long long pos; + + if (disk->data != last_devpath) + { + if (last_ihandle) + grub_ieee1275_close (last_ihandle); + last_ihandle = 0; + last_devpath = NULL; + + grub_ieee1275_open (disk->data, &last_ihandle); + if (! last_ihandle) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device"); + last_devpath = disk->data; + } + + pos = sector << disk->log_sector_size; + + grub_ieee1275_seek (last_ihandle, pos, &status); + if (status < 0) + return grub_error (GRUB_ERR_READ_ERROR, + "seek error, can't seek block %llu", + (long long) sector); + return 0; +} + +static grub_err_t +grub_ofdisk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_err_t err; + grub_ssize_t actual; + err = grub_ofdisk_prepare (disk, sector); + if (err) + return err; + grub_ieee1275_read (last_ihandle, buf, size << disk->log_sector_size, + &actual); + if (actual != (grub_ssize_t) (size << disk->log_sector_size)) + return grub_error (GRUB_ERR_READ_ERROR, N_("failure reading sector 0x%llx " + "from `%s'"), + (unsigned long long) sector, + disk->name); + + return 0; +} + +static grub_err_t +grub_ofdisk_write (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + grub_err_t err; + grub_ssize_t actual; + err = grub_ofdisk_prepare (disk, sector); + if (err) + return err; + grub_ieee1275_write (last_ihandle, buf, size << disk->log_sector_size, + &actual); + if (actual != (grub_ssize_t) (size << disk->log_sector_size)) + return grub_error (GRUB_ERR_WRITE_ERROR, N_("failure writing sector 0x%llx " + "to `%s'"), + (unsigned long long) sector, + disk->name); + + return 0; +} + +static struct grub_disk_dev grub_ofdisk_dev = + { + .name = "ofdisk", + .id = GRUB_DISK_DEVICE_OFDISK_ID, + .iterate = grub_ofdisk_iterate, + .open = grub_ofdisk_open, + .close = grub_ofdisk_close, + .read = grub_ofdisk_read, + .write = grub_ofdisk_write, + .next = 0 + }; + +static void +insert_bootpath (void) +{ + char *bootpath; + grub_ssize_t bootpath_size; + char *type; + + if (grub_ieee1275_get_property_length (grub_ieee1275_chosen, "bootpath", + &bootpath_size) + || bootpath_size <= 0) + { + /* Should never happen. */ + grub_printf ("/chosen/bootpath property missing!\n"); + return; + } + + bootpath = (char *) grub_malloc ((grub_size_t) bootpath_size + 64); + if (! bootpath) + { + grub_print_error (); + return; + } + grub_ieee1275_get_property (grub_ieee1275_chosen, "bootpath", bootpath, + (grub_size_t) bootpath_size + 1, 0); + bootpath[bootpath_size] = '\0'; + + /* Transform an OF device path to a GRUB path. */ + + type = grub_ieee1275_get_device_type (bootpath); + if (!(type && grub_strcmp (type, "network") == 0)) + { + struct ofdisk_hash_ent *op; + char *device = grub_ieee1275_get_devname (bootpath); + op = ofdisk_hash_add (device, NULL); + op->is_boot = 1; + } + grub_free (type); + grub_free (bootpath); +} + +void +grub_ofdisk_fini (void) +{ + if (last_ihandle) + grub_ieee1275_close (last_ihandle); + last_ihandle = 0; + last_devpath = NULL; + + grub_disk_dev_unregister (&grub_ofdisk_dev); +} + +void +grub_ofdisk_init (void) +{ + grub_disk_firmware_fini = grub_ofdisk_fini; + + insert_bootpath (); + + grub_disk_dev_register (&grub_ofdisk_dev); +} + +static grub_err_t +grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size, + struct ofdisk_hash_ent *op) +{ + struct size_args_ieee1275 + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t result; + grub_ieee1275_cell_t size1; + grub_ieee1275_cell_t size2; + } args_ieee1275; + + if (last_ihandle) + grub_ieee1275_close (last_ihandle); + + last_ihandle = 0; + last_devpath = NULL; + + grub_ieee1275_open (device, &last_ihandle); + if (! last_ihandle) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device"); + + *block_size = 0; + + if (op->block_size_fails >= 2) + return GRUB_ERR_NONE; + + INIT_IEEE1275_COMMON (&args_ieee1275.common, "call-method", 2, 2); + args_ieee1275.method = (grub_ieee1275_cell_t) "block-size"; + args_ieee1275.ihandle = last_ihandle; + args_ieee1275.result = 1; + + if (IEEE1275_CALL_ENTRY_FN (&args_ieee1275) == -1) + { + grub_dprintf ("disk", "can't get block size: failed call-method\n"); + op->block_size_fails++; + } + else if (args_ieee1275.result) + { + grub_dprintf ("disk", "can't get block size: %lld\n", + (long long) args_ieee1275.result); + op->block_size_fails++; + } + else if (args_ieee1275.size1 + && !(args_ieee1275.size1 & (args_ieee1275.size1 - 1)) + && args_ieee1275.size1 >= 512 && args_ieee1275.size1 <= 16384) + { + op->block_size_fails = 0; + *block_size = args_ieee1275.size1; + } + + return 0; +} diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c new file mode 100644 index 000000000..0f978ad05 --- /dev/null +++ b/grub-core/disk/ldm.c @@ -0,0 +1,1052 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GRUB_UTIL +#include +#include +#endif + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define LDM_GUID_STRLEN 64 +#define LDM_NAME_STRLEN 32 + +typedef grub_uint8_t *grub_ldm_id_t; + +enum { STRIPE = 1, SPANNED = 2, RAID5 = 3 }; + +#define LDM_LABEL_SECTOR 6 +struct grub_ldm_vblk { + char magic[4]; + grub_uint8_t unused1[12]; + grub_uint16_t update_status; + grub_uint8_t flags; + grub_uint8_t type; + grub_uint32_t unused2; + grub_uint8_t dynamic[104]; +} GRUB_PACKED; +#define LDM_VBLK_MAGIC "VBLK" + +enum + { + STATUS_CONSISTENT = 0, + STATUS_STILL_ACTIVE = 1, + STATUS_NOT_ACTIVE_YET = 2 + }; + +enum + { + ENTRY_COMPONENT = 0x32, + ENTRY_PARTITION = 0x33, + ENTRY_DISK = 0x34, + ENTRY_VOLUME = 0x51, + }; + +struct grub_ldm_label +{ + char magic[8]; + grub_uint32_t unused1; + grub_uint16_t ver_major; + grub_uint16_t ver_minor; + grub_uint8_t unused2[32]; + char disk_guid[LDM_GUID_STRLEN]; + char host_guid[LDM_GUID_STRLEN]; + char group_guid[LDM_GUID_STRLEN]; + char group_name[LDM_NAME_STRLEN]; + grub_uint8_t unused3[11]; + grub_uint64_t pv_start; + grub_uint64_t pv_size; + grub_uint64_t config_start; + grub_uint64_t config_size; +} GRUB_PACKED; + + +#define LDM_MAGIC "PRIVHEAD" + + + +static inline grub_uint64_t +read_int (grub_uint8_t *in, grub_size_t s) +{ + grub_uint8_t *ptr2; + grub_uint64_t ret; + ret = 0; + for (ptr2 = in; ptr2 < in + s; ptr2++) + { + ret <<= 8; + ret |= *ptr2; + } + return ret; +} + +static int +check_ldm_partition (grub_disk_t disk __attribute__ ((unused)), const grub_partition_t p, void *data) +{ + int *has_ldm = data; + + if (p->number >= 4) + return 1; + if (p->msdostype == GRUB_PC_PARTITION_TYPE_LDM) + { + *has_ldm = 1; + return 1; + } + return 0; +} + +static int +msdos_has_ldm_partition (grub_disk_t dsk) +{ + grub_err_t err; + int has_ldm = 0; + + err = grub_partition_msdos_iterate (dsk, check_ldm_partition, &has_ldm); + if (err) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + + return has_ldm; +} + +static const grub_gpt_part_type_t ldm_type = GRUB_GPT_PARTITION_TYPE_LDM; + +/* Helper for gpt_ldm_sector. */ +static int +gpt_ldm_sector_iter (grub_disk_t disk, const grub_partition_t p, void *data) +{ + grub_disk_addr_t *sector = data; + struct grub_gpt_partentry gptdata; + grub_partition_t p2; + + p2 = disk->partition; + disk->partition = p->parent; + if (grub_disk_read (disk, p->offset, p->index, + sizeof (gptdata), &gptdata)) + { + disk->partition = p2; + return 0; + } + disk->partition = p2; + + if (! grub_memcmp (&gptdata.type, &ldm_type, 16)) + { + *sector = p->start + p->len - 1; + return 1; + } + return 0; +} + +static grub_disk_addr_t +gpt_ldm_sector (grub_disk_t dsk) +{ + grub_disk_addr_t sector = 0; + grub_err_t err; + + err = grub_gpt_partition_map_iterate (dsk, gpt_ldm_sector_iter, §or); + if (err) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + return sector; +} + +static struct grub_diskfilter_vg * +make_vg (grub_disk_t disk, + const struct grub_ldm_label *label) +{ + grub_disk_addr_t startsec, endsec, cursec; + struct grub_diskfilter_vg *vg; + grub_err_t err; + + /* First time we see this volume group. We've to create the + whole volume group structure. */ + vg = grub_malloc (sizeof (*vg)); + if (! vg) + return NULL; + vg->extent_size = 1; + vg->name = grub_malloc (LDM_NAME_STRLEN + 1); + vg->uuid = grub_malloc (LDM_GUID_STRLEN + 1); + if (! vg->uuid || !vg->name) + { + grub_free (vg->uuid); + grub_free (vg->name); + return NULL; + } + grub_memcpy (vg->uuid, label->group_guid, LDM_GUID_STRLEN); + grub_memcpy (vg->name, label->group_name, LDM_NAME_STRLEN); + vg->name[LDM_NAME_STRLEN] = 0; + vg->uuid[LDM_GUID_STRLEN] = 0; + vg->uuid_len = grub_strlen (vg->uuid); + + vg->lvs = NULL; + vg->pvs = NULL; + + startsec = grub_be_to_cpu64 (label->config_start); + endsec = startsec + grub_be_to_cpu64 (label->config_size); + + /* First find disks. */ + for (cursec = startsec + 0x12; cursec < endsec; cursec++) + { + struct grub_ldm_vblk vblk[GRUB_DISK_SECTOR_SIZE + / sizeof (struct grub_ldm_vblk)]; + unsigned i; + err = grub_disk_read (disk, cursec, 0, + sizeof(vblk), &vblk); + if (err) + goto fail2; + + for (i = 0; i < ARRAY_SIZE (vblk); i++) + { + struct grub_diskfilter_pv *pv; + grub_uint8_t *ptr; + if (grub_memcmp (vblk[i].magic, LDM_VBLK_MAGIC, + sizeof (vblk[i].magic)) != 0) + continue; + if (grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_CONSISTENT + && grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_STILL_ACTIVE) + continue; + if (vblk[i].type != ENTRY_DISK) + continue; + pv = grub_zalloc (sizeof (*pv)); + if (!pv) + goto fail2; + + pv->disk = 0; + ptr = vblk[i].dynamic; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (pv); + goto fail2; + } + pv->internal_id = grub_malloc (ptr[0] + 2); + if (!pv->internal_id) + { + grub_free (pv); + goto fail2; + } + grub_memcpy (pv->internal_id, ptr, (grub_size_t) ptr[0] + 1); + pv->internal_id[(grub_size_t) ptr[0] + 1] = 0; + + ptr += *ptr + 1; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (pv); + goto fail2; + } + /* ptr = name. */ + ptr += *ptr + 1; + if (ptr + *ptr + 1 + >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (pv); + goto fail2; + } + pv->id.uuidlen = *ptr; + pv->id.uuid = grub_malloc (pv->id.uuidlen + 1); + grub_memcpy (pv->id.uuid, ptr + 1, pv->id.uuidlen); + pv->id.uuid[pv->id.uuidlen] = 0; + + pv->next = vg->pvs; + vg->pvs = pv; + } + } + + /* Then find LVs. */ + for (cursec = startsec + 0x12; cursec < endsec; cursec++) + { + struct grub_ldm_vblk vblk[GRUB_DISK_SECTOR_SIZE + / sizeof (struct grub_ldm_vblk)]; + unsigned i; + err = grub_disk_read (disk, cursec, 0, + sizeof(vblk), &vblk); + if (err) + goto fail2; + + for (i = 0; i < ARRAY_SIZE (vblk); i++) + { + struct grub_diskfilter_lv *lv; + grub_uint8_t *ptr; + if (grub_memcmp (vblk[i].magic, LDM_VBLK_MAGIC, + sizeof (vblk[i].magic)) != 0) + continue; + if (grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_CONSISTENT + && grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_STILL_ACTIVE) + continue; + if (vblk[i].type != ENTRY_VOLUME) + continue; + lv = grub_zalloc (sizeof (*lv)); + if (!lv) + goto fail2; + + lv->vg = vg; + lv->segment_count = 1; + lv->segment_alloc = 1; + lv->visible = 1; + lv->segments = grub_zalloc (sizeof (*lv->segments)); + if (!lv->segments) + goto fail2; + lv->segments->start_extent = 0; + lv->segments->type = GRUB_DISKFILTER_MIRROR; + lv->segments->node_count = 0; + lv->segments->node_alloc = 8; + lv->segments->nodes = grub_zalloc (sizeof (*lv->segments->nodes) + * lv->segments->node_alloc); + if (!lv->segments->nodes) + goto fail2; + ptr = vblk[i].dynamic; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (lv); + goto fail2; + } + lv->internal_id = grub_malloc ((grub_size_t) ptr[0] + 2); + if (!lv->internal_id) + { + grub_free (lv); + goto fail2; + } + grub_memcpy (lv->internal_id, ptr, ptr[0] + 1); + lv->internal_id[ptr[0] + 1] = 0; + + ptr += *ptr + 1; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (lv); + goto fail2; + } + lv->name = grub_malloc (*ptr + 1); + if (!lv->name) + { + grub_free (lv->internal_id); + grub_free (lv); + goto fail2; + } + grub_memcpy (lv->name, ptr + 1, *ptr); + lv->name[*ptr] = 0; + lv->fullname = grub_xasprintf ("ldm/%s/%s", + vg->uuid, lv->name); + if (!lv->fullname) + { + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv); + goto fail2; + } + ptr += *ptr + 1; + if (ptr + *ptr + 1 + >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv); + goto fail2; + } + /* ptr = volume type. */ + ptr += *ptr + 1; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv); + goto fail2; + } + /* ptr = flags. */ + ptr += *ptr + 1; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv); + goto fail2; + } + + /* Skip state, type, unknown, volume number, zeros, flags. */ + ptr += 14 + 1 + 1 + 1 + 3 + 1; + /* ptr = number of children. */ + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv); + goto fail2; + } + ptr += *ptr + 1; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv); + goto fail2; + } + + /* Skip 2 more fields. */ + ptr += 8 + 8; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic) + || ptr + *ptr + 1>= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv); + goto fail2; + } + lv->size = read_int (ptr + 1, *ptr); + lv->segments->extent_count = lv->size; + + lv->next = vg->lvs; + vg->lvs = lv; + } + } + + /* Now the components. */ + for (cursec = startsec + 0x12; cursec < endsec; cursec++) + { + struct grub_ldm_vblk vblk[GRUB_DISK_SECTOR_SIZE + / sizeof (struct grub_ldm_vblk)]; + unsigned i; + err = grub_disk_read (disk, cursec, 0, + sizeof(vblk), &vblk); + if (err) + goto fail2; + + for (i = 0; i < ARRAY_SIZE (vblk); i++) + { + struct grub_diskfilter_lv *comp; + struct grub_diskfilter_lv *lv; + grub_uint8_t type; + + grub_uint8_t *ptr; + if (grub_memcmp (vblk[i].magic, LDM_VBLK_MAGIC, + sizeof (vblk[i].magic)) != 0) + continue; + if (grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_CONSISTENT + && grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_STILL_ACTIVE) + continue; + if (vblk[i].type != ENTRY_COMPONENT) + continue; + comp = grub_zalloc (sizeof (*comp)); + if (!comp) + goto fail2; + comp->visible = 0; + comp->name = 0; + comp->fullname = 0; + + ptr = vblk[i].dynamic; + if (ptr + *ptr + 1 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + comp->internal_id = grub_malloc ((grub_size_t) ptr[0] + 2); + if (!comp->internal_id) + { + grub_free (comp); + goto fail2; + } + grub_memcpy (comp->internal_id, ptr, ptr[0] + 1); + comp->internal_id[ptr[0] + 1] = 0; + + ptr += *ptr + 1; + if (ptr + *ptr + 1 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; + } + /* ptr = name. */ + ptr += *ptr + 1; + if (ptr + *ptr + 1 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; + } + /* ptr = state. */ + ptr += *ptr + 1; + type = *ptr++; + /* skip zeros. */ + ptr += 4; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; + } + + /* ptr = number of children. */ + ptr += *ptr + 1; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; + } + ptr += 8 + 8; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; + } + for (lv = vg->lvs; lv; lv = lv->next) + { + if (lv->internal_id[0] == ptr[0] + && grub_memcmp (lv->internal_id + 1, ptr + 1, ptr[0]) == 0) + break; + } + if (!lv) + { + grub_free (comp->internal_id); + grub_free (comp); + continue; + } + comp->size = lv->size; + if (type == SPANNED) + { + comp->segment_alloc = 8; + comp->segment_count = 0; + comp->segments = grub_malloc (sizeof (*comp->segments) + * comp->segment_alloc); + if (!comp->segments) + goto fail2; + } + else + { + comp->segment_alloc = 1; + comp->segment_count = 1; + comp->segments = grub_malloc (sizeof (*comp->segments)); + if (!comp->segments) + goto fail2; + comp->segments->start_extent = 0; + comp->segments->extent_count = lv->size; + comp->segments->layout = 0; + if (type == STRIPE) + comp->segments->type = GRUB_DISKFILTER_STRIPED; + else if (type == RAID5) + { + comp->segments->type = GRUB_DISKFILTER_RAID5; + comp->segments->layout = GRUB_RAID_LAYOUT_SYMMETRIC_MASK; + } + else + goto fail2; + ptr += *ptr + 1; + ptr++; + if (!(vblk[i].flags & 0x10)) + goto fail2; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic) + || ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; + } + comp->segments->stripe_size = read_int (ptr + 1, *ptr); + ptr += *ptr + 1; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + grub_free (comp->internal_id); + grub_free (comp); + goto fail2; + } + comp->segments->node_count = read_int (ptr + 1, *ptr); + comp->segments->node_alloc = comp->segments->node_count; + comp->segments->nodes = grub_zalloc (sizeof (*comp->segments->nodes) + * comp->segments->node_alloc); + if (!lv->segments->nodes) + goto fail2; + } + + if (lv->segments->node_alloc == lv->segments->node_count) + { + void *t; + lv->segments->node_alloc *= 2; + t = grub_realloc (lv->segments->nodes, + sizeof (*lv->segments->nodes) + * lv->segments->node_alloc); + if (!t) + goto fail2; + lv->segments->nodes = t; + } + lv->segments->nodes[lv->segments->node_count].pv = 0; + lv->segments->nodes[lv->segments->node_count].start = 0; + lv->segments->nodes[lv->segments->node_count++].lv = comp; + comp->next = vg->lvs; + vg->lvs = comp; + } + } + /* Partitions. */ + for (cursec = startsec + 0x12; cursec < endsec; cursec++) + { + struct grub_ldm_vblk vblk[GRUB_DISK_SECTOR_SIZE + / sizeof (struct grub_ldm_vblk)]; + unsigned i; + err = grub_disk_read (disk, cursec, 0, + sizeof(vblk), &vblk); + if (err) + goto fail2; + + for (i = 0; i < ARRAY_SIZE (vblk); i++) + { + struct grub_diskfilter_lv *comp; + struct grub_diskfilter_node part; + grub_disk_addr_t start, size; + + grub_uint8_t *ptr; + part.name = 0; + if (grub_memcmp (vblk[i].magic, LDM_VBLK_MAGIC, + sizeof (vblk[i].magic)) != 0) + continue; + if (grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_CONSISTENT + && grub_be_to_cpu16 (vblk[i].update_status) + != STATUS_STILL_ACTIVE) + continue; + if (vblk[i].type != ENTRY_PARTITION) + continue; + part.lv = 0; + part.pv = 0; + + ptr = vblk[i].dynamic; + if (ptr + *ptr + 1 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + /* ID */ + ptr += *ptr + 1; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + /* ptr = name. */ + ptr += *ptr + 1; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + + /* skip zeros and logcommit id. */ + ptr += 4 + 8; + if (ptr + 16 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + part.start = read_int (ptr, 8); + start = read_int (ptr + 8, 8); + ptr += 16; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic) + || ptr + *ptr + 1 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + size = read_int (ptr + 1, *ptr); + ptr += *ptr + 1; + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic) + || ptr + *ptr + 1 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + + for (comp = vg->lvs; comp; comp = comp->next) + if (comp->internal_id[0] == ptr[0] + && grub_memcmp (ptr + 1, comp->internal_id + 1, + comp->internal_id[0]) == 0) + goto out; + continue; + out: + if (ptr >= vblk[i].dynamic + sizeof (vblk[i].dynamic) + || ptr + *ptr + 1 >= vblk[i].dynamic + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + ptr += *ptr + 1; + struct grub_diskfilter_pv *pv; + for (pv = vg->pvs; pv; pv = pv->next) + if (pv->internal_id[0] == ptr[0] + && grub_memcmp (pv->internal_id + 1, ptr + 1, ptr[0]) == 0) + part.pv = pv; + + if (comp->segment_alloc == 1) + { + unsigned node_index; + ptr += *ptr + 1; + if (ptr + *ptr + 1 >= vblk[i].dynamic + + sizeof (vblk[i].dynamic)) + { + goto fail2; + } + node_index = read_int (ptr + 1, *ptr); + if (node_index < comp->segments->node_count) + comp->segments->nodes[node_index] = part; + } + else + { + if (comp->segment_alloc == comp->segment_count) + { + void *t; + comp->segment_alloc *= 2; + t = grub_realloc (comp->segments, + comp->segment_alloc + * sizeof (*comp->segments)); + if (!t) + goto fail2; + comp->segments = t; + } + comp->segments[comp->segment_count].start_extent = start; + comp->segments[comp->segment_count].extent_count = size; + comp->segments[comp->segment_count].type = GRUB_DISKFILTER_STRIPED; + comp->segments[comp->segment_count].node_count = 1; + comp->segments[comp->segment_count].node_alloc = 1; + comp->segments[comp->segment_count].nodes + = grub_malloc (sizeof (*comp->segments[comp->segment_count].nodes)); + if (!comp->segments[comp->segment_count].nodes) + goto fail2; + comp->segments[comp->segment_count].nodes[0] = part; + comp->segment_count++; + } + } + } + if (grub_diskfilter_vg_register (vg)) + goto fail2; + return vg; + fail2: + { + struct grub_diskfilter_lv *lv, *next_lv; + struct grub_diskfilter_pv *pv, *next_pv; + for (lv = vg->lvs; lv; lv = next_lv) + { + unsigned i; + for (i = 0; i < lv->segment_count; i++) + grub_free (lv->segments[i].nodes); + + next_lv = lv->next; + grub_free (lv->segments); + grub_free (lv->internal_id); + grub_free (lv->name); + grub_free (lv->fullname); + grub_free (lv); + } + for (pv = vg->pvs; pv; pv = next_pv) + { + next_pv = pv->next; + grub_free (pv->id.uuid); + grub_free (pv); + } + } + grub_free (vg->uuid); + grub_free (vg); + return NULL; +} + +static struct grub_diskfilter_vg * +grub_ldm_detect (grub_disk_t disk, + struct grub_diskfilter_pv_id *id, + grub_disk_addr_t *start_sector) +{ + grub_err_t err; + struct grub_ldm_label label; + struct grub_diskfilter_vg *vg; + +#ifdef GRUB_UTIL + grub_util_info ("scanning %s for LDM", disk->name); +#endif + + { + int i; + int has_ldm = msdos_has_ldm_partition (disk); + for (i = 0; i < 3; i++) + { + grub_disk_addr_t sector = LDM_LABEL_SECTOR; + switch (i) + { + case 0: + if (!has_ldm) + continue; + sector = LDM_LABEL_SECTOR; + break; + case 1: + /* LDM is never inside a partition. */ + if (!has_ldm || disk->partition) + continue; + sector = grub_disk_get_size (disk); + if (sector == GRUB_DISK_SIZE_UNKNOWN) + continue; + sector--; + break; + /* FIXME: try the third copy. */ + case 2: + sector = gpt_ldm_sector (disk); + if (!sector) + continue; + break; + } + err = grub_disk_read (disk, sector, 0, + sizeof(label), &label); + if (err) + return NULL; + if (grub_memcmp (label.magic, LDM_MAGIC, sizeof (label.magic)) == 0 + && grub_be_to_cpu16 (label.ver_major) == 0x02 + && grub_be_to_cpu16 (label.ver_minor) >= 0x0b + && grub_be_to_cpu16 (label.ver_minor) <= 0x0c) + break; + } + + /* Return if we didn't find a label. */ + if (i == 3) + { +#ifdef GRUB_UTIL + grub_util_info ("no LDM signature found"); +#endif + return NULL; + } + } + + id->uuid = grub_malloc (LDM_GUID_STRLEN + 1); + if (!id->uuid) + return NULL; + grub_memcpy (id->uuid, label.disk_guid, LDM_GUID_STRLEN); + id->uuid[LDM_GUID_STRLEN] = 0; + id->uuidlen = grub_strlen ((char *) id->uuid); + *start_sector = grub_be_to_cpu64 (label.pv_start); + + { + grub_size_t s; + for (s = 0; s < LDM_GUID_STRLEN && label.group_guid[s]; s++); + vg = grub_diskfilter_get_vg_by_uuid (s, label.group_guid); + if (! vg) + vg = make_vg (disk, &label); + } + + if (!vg) + { + grub_free (id->uuid); + return NULL; + } + return vg; +} + +#ifdef GRUB_UTIL + +char * +grub_util_get_ldm (grub_disk_t disk, grub_disk_addr_t start) +{ + struct grub_diskfilter_pv *pv = NULL; + struct grub_diskfilter_vg *vg = NULL; + struct grub_diskfilter_lv *res = 0, *lv, *res_lv = 0; + + pv = grub_diskfilter_get_pv_from_disk (disk, &vg); + + if (!pv) + return NULL; + + for (lv = vg->lvs; lv; lv = lv->next) + if (lv->segment_count == 1 && lv->segments->node_count == 1 + && lv->segments->type == GRUB_DISKFILTER_STRIPED + && lv->segments->nodes->pv == pv + && lv->segments->nodes->start + pv->start_sector == start) + { + res_lv = lv; + break; + } + if (!res_lv) + return NULL; + for (lv = vg->lvs; lv; lv = lv->next) + if (lv->segment_count == 1 && lv->segments->node_count == 1 + && lv->segments->type == GRUB_DISKFILTER_MIRROR + && lv->segments->nodes->lv == res_lv) + { + res = lv; + break; + } + if (res && res->fullname) + return grub_strdup (res->fullname); + return NULL; +} + +int +grub_util_is_ldm (grub_disk_t disk) +{ + int i; + int has_ldm = msdos_has_ldm_partition (disk); + for (i = 0; i < 3; i++) + { + grub_disk_addr_t sector = LDM_LABEL_SECTOR; + grub_err_t err; + struct grub_ldm_label label; + + switch (i) + { + case 0: + if (!has_ldm) + continue; + sector = LDM_LABEL_SECTOR; + break; + case 1: + /* LDM is never inside a partition. */ + if (!has_ldm || disk->partition) + continue; + sector = grub_disk_get_size (disk); + if (sector == GRUB_DISK_SIZE_UNKNOWN) + continue; + sector--; + break; + /* FIXME: try the third copy. */ + case 2: + sector = gpt_ldm_sector (disk); + if (!sector) + continue; + break; + } + err = grub_disk_read (disk, sector, 0, sizeof(label), &label); + if (err) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + /* This check is more relaxed on purpose. */ + if (grub_memcmp (label.magic, LDM_MAGIC, sizeof (label.magic)) == 0) + return 1; + } + + return 0; +} + +grub_err_t +grub_util_ldm_embed (struct grub_disk *disk, unsigned int *nsectors, + unsigned int max_nsectors, + grub_embed_type_t embed_type, + grub_disk_addr_t **sectors) +{ + struct grub_diskfilter_pv *pv = NULL; + struct grub_diskfilter_vg *vg; + struct grub_diskfilter_lv *lv; + unsigned i; + + if (embed_type != GRUB_EMBED_PCBIOS) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "LDM currently supports only PC-BIOS embedding"); + if (disk->partition) + return grub_error (GRUB_ERR_BUG, "disk isn't LDM"); + pv = grub_diskfilter_get_pv_from_disk (disk, &vg); + if (!pv) + return grub_error (GRUB_ERR_BUG, "disk isn't LDM"); + for (lv = vg->lvs; lv; lv = lv->next) + { + struct grub_diskfilter_lv *comp; + + if (!lv->visible || !lv->fullname) + continue; + + if (lv->segment_count != 1) + continue; + if (lv->segments->type != GRUB_DISKFILTER_MIRROR + || lv->segments->node_count != 1 + || lv->segments->start_extent != 0 + || lv->segments->extent_count != lv->size) + continue; + + comp = lv->segments->nodes->lv; + if (!comp) + continue; + + if (comp->segment_count != 1 || comp->size != lv->size) + continue; + if (comp->segments->type != GRUB_DISKFILTER_STRIPED + || comp->segments->node_count != 1 + || comp->segments->start_extent != 0 + || comp->segments->extent_count != lv->size) + continue; + + /* How to implement proper check is to be discussed. */ +#if 1 + if (1) + continue; +#else + if (grub_strcmp (lv->name, "Volume5") != 0) + continue; +#endif + if (lv->size < *nsectors) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + /* TRANSLATORS: it's a partition for embedding, + not a partition embed into something. GRUB + install tools put core.img into a place + usable for bootloaders (called generically + "embedding zone") and this operation is + called "embedding". */ + N_("your LDM Embedding Partition is too small;" + " embedding won't be possible")); + *nsectors = lv->size; + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; + *sectors = grub_malloc (*nsectors * sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) + (*sectors)[i] = (lv->segments->nodes->start + + comp->segments->nodes->start + + comp->segments->nodes->pv->start_sector + i); + return GRUB_ERR_NONE; + } + + return grub_error (GRUB_ERR_FILE_NOT_FOUND, + /* TRANSLATORS: it's a partition for embedding, + not a partition embed into something. */ + N_("this LDM has no Embedding Partition;" + " embedding won't be possible")); +} +#endif + +static struct grub_diskfilter grub_ldm_dev = { + .name = "ldm", + .detect = grub_ldm_detect, + .next = 0 +}; + +GRUB_MOD_INIT (ldm) +{ + grub_diskfilter_register_back (&grub_ldm_dev); +} + +GRUB_MOD_FINI (ldm) +{ + grub_diskfilter_unregister (&grub_ldm_dev); +} diff --git a/grub-core/disk/loopback.c b/grub-core/disk/loopback.c new file mode 100644 index 000000000..2d8deaeaf --- /dev/null +++ b/grub-core/disk/loopback.c @@ -0,0 +1,247 @@ +/* loopback.c - command to add loopback devices. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_loopback +{ + char *devname; + grub_file_t file; + struct grub_loopback *next; + unsigned long id; +}; + +static struct grub_loopback *loopback_list; +static unsigned long last_id = 0; + +static const struct grub_arg_option options[] = + { + /* TRANSLATORS: The disk is simply removed from the list of available ones, + not wiped, avoid to scare user. */ + {"delete", 'd', 0, N_("Delete the specified loopback drive."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +/* Delete the loopback device NAME. */ +static grub_err_t +delete_loopback (const char *name) +{ + struct grub_loopback *dev; + struct grub_loopback **prev; + + /* Search for the device. */ + for (dev = loopback_list, prev = &loopback_list; + dev; + prev = &dev->next, dev = dev->next) + if (grub_strcmp (dev->devname, name) == 0) + break; + + if (! dev) + return grub_error (GRUB_ERR_BAD_DEVICE, "device not found"); + + /* Remove the device from the list. */ + *prev = dev->next; + + grub_free (dev->devname); + grub_file_close (dev->file); + grub_free (dev); + + return 0; +} + +/* The command to add and remove loopback devices. */ +static grub_err_t +grub_cmd_loopback (grub_extcmd_context_t ctxt, int argc, char **args) +{ + struct grub_arg_list *state = ctxt->state; + grub_file_t file; + struct grub_loopback *newdev; + grub_err_t ret; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required"); + + /* Check if `-d' was used. */ + if (state[0].set) + return delete_loopback (args[0]); + + if (argc < 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + file = grub_file_open (args[1]); + if (! file) + return grub_errno; + + /* First try to replace the old device. */ + for (newdev = loopback_list; newdev; newdev = newdev->next) + if (grub_strcmp (newdev->devname, args[0]) == 0) + break; + + if (newdev) + { + grub_file_close (newdev->file); + newdev->file = file; + + return 0; + } + + /* Unable to replace it, make a new entry. */ + newdev = grub_malloc (sizeof (struct grub_loopback)); + if (! newdev) + goto fail; + + newdev->devname = grub_strdup (args[0]); + if (! newdev->devname) + { + grub_free (newdev); + goto fail; + } + + newdev->file = file; + newdev->id = last_id++; + + /* Add the new entry to the list. */ + newdev->next = loopback_list; + loopback_list = newdev; + + return 0; + +fail: + ret = grub_errno; + grub_file_close (file); + return ret; +} + + +static int +grub_loopback_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_loopback *d; + if (pull != GRUB_DISK_PULL_NONE) + return 0; + for (d = loopback_list; d; d = d->next) + { + if (hook (d->devname, hook_data)) + return 1; + } + return 0; +} + +static grub_err_t +grub_loopback_open (const char *name, grub_disk_t disk) +{ + struct grub_loopback *dev; + + for (dev = loopback_list; dev; dev = dev->next) + if (grub_strcmp (dev->devname, name) == 0) + break; + + if (! dev) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device"); + + /* Use the filesize for the disk size, round up to a complete sector. */ + if (dev->file->size != GRUB_FILE_SIZE_UNKNOWN) + disk->total_sectors = ((dev->file->size + GRUB_DISK_SECTOR_SIZE - 1) + / GRUB_DISK_SECTOR_SIZE); + else + disk->total_sectors = GRUB_DISK_SIZE_UNKNOWN; + /* Avoid reading more than 512M. */ + disk->max_agglomerate = 1 << (29 - GRUB_DISK_SECTOR_BITS + - GRUB_DISK_CACHE_BITS); + + disk->id = dev->id; + + disk->data = dev; + + return 0; +} + +static grub_err_t +grub_loopback_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_file_t file = ((struct grub_loopback *) disk->data)->file; + grub_off_t pos; + + grub_file_seek (file, sector << GRUB_DISK_SECTOR_BITS); + + grub_file_read (file, buf, size << GRUB_DISK_SECTOR_BITS); + if (grub_errno) + return grub_errno; + + /* In case there is more data read than there is available, in case + of files that are not a multiple of GRUB_DISK_SECTOR_SIZE, fill + the rest with zeros. */ + pos = (sector + size) << GRUB_DISK_SECTOR_BITS; + if (pos > file->size) + { + grub_size_t amount = pos - file->size; + grub_memset (buf + (size << GRUB_DISK_SECTOR_BITS) - amount, 0, amount); + } + + return 0; +} + +static grub_err_t +grub_loopback_write (grub_disk_t disk __attribute ((unused)), + grub_disk_addr_t sector __attribute ((unused)), + grub_size_t size __attribute ((unused)), + const char *buf __attribute ((unused))) +{ + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "loopback write is not supported"); +} + +static struct grub_disk_dev grub_loopback_dev = + { + .name = "loopback", + .id = GRUB_DISK_DEVICE_LOOPBACK_ID, + .iterate = grub_loopback_iterate, + .open = grub_loopback_open, + .read = grub_loopback_read, + .write = grub_loopback_write, + .next = 0 + }; + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(loopback) +{ + cmd = grub_register_extcmd ("loopback", grub_cmd_loopback, 0, + N_("[-d] DEVICENAME FILE."), + /* TRANSLATORS: The file itself is not destroyed + or transformed into drive. */ + N_("Make a virtual drive from a file."), options); + grub_disk_dev_register (&grub_loopback_dev); +} + +GRUB_MOD_FINI(loopback) +{ + grub_unregister_extcmd (cmd); + grub_disk_dev_unregister (&grub_loopback_dev); +} diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c new file mode 100644 index 000000000..86c50c612 --- /dev/null +++ b/grub-core/disk/luks.c @@ -0,0 +1,485 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2007,2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define MAX_PASSPHRASE 256 + +#define LUKS_KEY_ENABLED 0x00AC71F3 + +/* On disk LUKS header */ +struct grub_luks_phdr +{ + grub_uint8_t magic[6]; +#define LUKS_MAGIC "LUKS\xBA\xBE" + grub_uint16_t version; + char cipherName[32]; + char cipherMode[32]; + char hashSpec[32]; + grub_uint32_t payloadOffset; + grub_uint32_t keyBytes; + grub_uint8_t mkDigest[20]; + grub_uint8_t mkDigestSalt[32]; + grub_uint32_t mkDigestIterations; + char uuid[40]; + struct + { + grub_uint32_t active; + grub_uint32_t passwordIterations; + grub_uint8_t passwordSalt[32]; + grub_uint32_t keyMaterialOffset; + grub_uint32_t stripes; + } keyblock[8]; +} GRUB_PACKED; + +typedef struct grub_luks_phdr *grub_luks_phdr_t; + +gcry_err_code_t AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, + grub_uint8_t * dst, grub_size_t blocksize, + grub_size_t blocknumbers); + +static grub_cryptodisk_t +configure_ciphers (grub_disk_t disk, const char *check_uuid, + int check_boot) +{ + grub_cryptodisk_t newdev; + const char *iptr; + struct grub_luks_phdr header; + char *optr; + char uuid[sizeof (header.uuid) + 1]; + char ciphername[sizeof (header.cipherName) + 1]; + char ciphermode[sizeof (header.cipherMode) + 1]; + char *cipheriv = NULL; + char hashspec[sizeof (header.hashSpec) + 1]; + grub_crypto_cipher_handle_t cipher = NULL, secondary_cipher = NULL; + grub_crypto_cipher_handle_t essiv_cipher = NULL; + const gcry_md_spec_t *hash = NULL, *essiv_hash = NULL; + const struct gcry_cipher_spec *ciph; + grub_cryptodisk_mode_t mode; + grub_cryptodisk_mode_iv_t mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; + int benbi_log = 0; + grub_err_t err; + + if (check_boot) + return NULL; + + /* Read the LUKS header. */ + err = grub_disk_read (disk, 0, 0, sizeof (header), &header); + if (err) + { + if (err == GRUB_ERR_OUT_OF_RANGE) + grub_errno = GRUB_ERR_NONE; + return NULL; + } + + /* Look for LUKS magic sequence. */ + if (grub_memcmp (header.magic, LUKS_MAGIC, sizeof (header.magic)) + || grub_be_to_cpu16 (header.version) != 1) + return NULL; + + optr = uuid; + for (iptr = header.uuid; iptr < &header.uuid[ARRAY_SIZE (header.uuid)]; + iptr++) + { + if (*iptr != '-') + *optr++ = *iptr; + } + *optr = 0; + + if (check_uuid && grub_strcasecmp (check_uuid, uuid) != 0) + { + grub_dprintf ("luks", "%s != %s\n", uuid, check_uuid); + return NULL; + } + + /* Make sure that strings are null terminated. */ + grub_memcpy (ciphername, header.cipherName, sizeof (header.cipherName)); + ciphername[sizeof (header.cipherName)] = 0; + grub_memcpy (ciphermode, header.cipherMode, sizeof (header.cipherMode)); + ciphermode[sizeof (header.cipherMode)] = 0; + grub_memcpy (hashspec, header.hashSpec, sizeof (header.hashSpec)); + hashspec[sizeof (header.hashSpec)] = 0; + + ciph = grub_crypto_lookup_cipher_by_name (ciphername); + if (!ciph) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, "Cipher %s isn't available", + ciphername); + return NULL; + } + + /* Configure the cipher used for the bulk data. */ + cipher = grub_crypto_cipher_open (ciph); + if (!cipher) + return NULL; + + if (grub_be_to_cpu32 (header.keyBytes) > 1024) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d", + grub_be_to_cpu32 (header.keyBytes)); + grub_crypto_cipher_close (cipher); + return NULL; + } + + /* Configure the cipher mode. */ + if (grub_strcmp (ciphermode, "ecb") == 0) + { + mode = GRUB_CRYPTODISK_MODE_ECB; + mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; + cipheriv = NULL; + } + else if (grub_strcmp (ciphermode, "plain") == 0) + { + mode = GRUB_CRYPTODISK_MODE_CBC; + mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; + cipheriv = NULL; + } + else if (grub_memcmp (ciphermode, "cbc-", sizeof ("cbc-") - 1) == 0) + { + mode = GRUB_CRYPTODISK_MODE_CBC; + cipheriv = ciphermode + sizeof ("cbc-") - 1; + } + else if (grub_memcmp (ciphermode, "pcbc-", sizeof ("pcbc-") - 1) == 0) + { + mode = GRUB_CRYPTODISK_MODE_PCBC; + cipheriv = ciphermode + sizeof ("pcbc-") - 1; + } + else if (grub_memcmp (ciphermode, "xts-", sizeof ("xts-") - 1) == 0) + { + mode = GRUB_CRYPTODISK_MODE_XTS; + cipheriv = ciphermode + sizeof ("xts-") - 1; + secondary_cipher = grub_crypto_cipher_open (ciph); + if (!secondary_cipher) + { + grub_crypto_cipher_close (cipher); + return NULL; + } + if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", + cipher->cipher->blocksize); + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (secondary_cipher); + return NULL; + } + if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) + { + grub_crypto_cipher_close (cipher); + grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", + secondary_cipher->cipher->blocksize); + grub_crypto_cipher_close (secondary_cipher); + return NULL; + } + } + else if (grub_memcmp (ciphermode, "lrw-", sizeof ("lrw-") - 1) == 0) + { + mode = GRUB_CRYPTODISK_MODE_LRW; + cipheriv = ciphermode + sizeof ("lrw-") - 1; + if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d", + cipher->cipher->blocksize); + grub_crypto_cipher_close (cipher); + return NULL; + } + } + else + { + grub_crypto_cipher_close (cipher); + grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown cipher mode: %s", + ciphermode); + return NULL; + } + + if (cipheriv == NULL); + else if (grub_memcmp (cipheriv, "plain", sizeof ("plain") - 1) == 0) + mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN; + else if (grub_memcmp (cipheriv, "plain64", sizeof ("plain64") - 1) == 0) + mode_iv = GRUB_CRYPTODISK_MODE_IV_PLAIN64; + else if (grub_memcmp (cipheriv, "benbi", sizeof ("benbi") - 1) == 0) + { + if (cipher->cipher->blocksize & (cipher->cipher->blocksize - 1) + || cipher->cipher->blocksize == 0) + grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d", + cipher->cipher->blocksize); + /* FIXME should we return an error here? */ + for (benbi_log = 0; + (cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE; + benbi_log++); + mode_iv = GRUB_CRYPTODISK_MODE_IV_BENBI; + } + else if (grub_memcmp (cipheriv, "null", sizeof ("null") - 1) == 0) + mode_iv = GRUB_CRYPTODISK_MODE_IV_NULL; + else if (grub_memcmp (cipheriv, "essiv:", sizeof ("essiv:") - 1) == 0) + { + char *hash_str = cipheriv + 6; + + mode_iv = GRUB_CRYPTODISK_MODE_IV_ESSIV; + + /* Configure the hash and cipher used for ESSIV. */ + essiv_hash = grub_crypto_lookup_md_by_name (hash_str); + if (!essiv_hash) + { + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (secondary_cipher); + grub_error (GRUB_ERR_FILE_NOT_FOUND, + "Couldn't load %s hash", hash_str); + return NULL; + } + essiv_cipher = grub_crypto_cipher_open (ciph); + if (!essiv_cipher) + { + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (secondary_cipher); + return NULL; + } + } + else + { + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (secondary_cipher); + grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s", + cipheriv); + return NULL; + } + + /* Configure the hash used for the AF splitter and HMAC. */ + hash = grub_crypto_lookup_md_by_name (hashspec); + if (!hash) + { + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (essiv_cipher); + grub_crypto_cipher_close (secondary_cipher); + grub_error (GRUB_ERR_FILE_NOT_FOUND, "Couldn't load %s hash", + hashspec); + return NULL; + } + + newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); + if (!newdev) + { + grub_crypto_cipher_close (cipher); + grub_crypto_cipher_close (essiv_cipher); + grub_crypto_cipher_close (secondary_cipher); + return NULL; + } + newdev->cipher = cipher; + newdev->offset = grub_be_to_cpu32 (header.payloadOffset); + newdev->source_disk = NULL; + newdev->benbi_log = benbi_log; + newdev->mode = mode; + newdev->mode_iv = mode_iv; + newdev->secondary_cipher = secondary_cipher; + newdev->essiv_cipher = essiv_cipher; + newdev->essiv_hash = essiv_hash; + newdev->hash = hash; + newdev->log_sector_size = 9; + newdev->total_length = grub_disk_get_size (disk) - newdev->offset; + grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid)); + newdev->modname = "luks"; + COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid)); + return newdev; +} + +static grub_err_t +luks_recover_key (grub_disk_t source, + grub_cryptodisk_t dev) +{ + struct grub_luks_phdr header; + grub_size_t keysize; + grub_uint8_t *split_key = NULL; + char passphrase[MAX_PASSPHRASE] = ""; + grub_uint8_t candidate_digest[sizeof (header.mkDigest)]; + unsigned i; + grub_size_t length; + grub_err_t err; + grub_size_t max_stripes = 1; + char *tmp; + + err = grub_disk_read (source, 0, 0, sizeof (header), &header); + if (err) + return err; + + grub_puts_ (N_("Attempting to decrypt master key...")); + keysize = grub_be_to_cpu32 (header.keyBytes); + if (keysize > GRUB_CRYPTODISK_MAX_KEYLEN) + return grub_error (GRUB_ERR_BAD_FS, "key is too long"); + + for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) + if (grub_be_to_cpu32 (header.keyblock[i].active) == LUKS_KEY_ENABLED + && grub_be_to_cpu32 (header.keyblock[i].stripes) > max_stripes) + max_stripes = grub_be_to_cpu32 (header.keyblock[i].stripes); + + split_key = grub_malloc (keysize * max_stripes); + if (!split_key) + return grub_errno; + + /* Get the passphrase from the user. */ + tmp = NULL; + if (source->partition) + tmp = grub_partition_get_name (source->partition); + grub_printf_ (N_("Enter passphrase for %s%s%s (%s): "), source->name, + source->partition ? "," : "", tmp ? : "", + dev->uuid); + grub_free (tmp); + if (!grub_password_get (passphrase, MAX_PASSPHRASE)) + { + grub_free (split_key); + return grub_error (GRUB_ERR_BAD_ARGUMENT, "Passphrase not supplied"); + } + + /* Try to recover master key from each active keyslot. */ + for (i = 0; i < ARRAY_SIZE (header.keyblock); i++) + { + gcry_err_code_t gcry_err; + grub_uint8_t candidate_key[GRUB_CRYPTODISK_MAX_KEYLEN]; + grub_uint8_t digest[GRUB_CRYPTODISK_MAX_KEYLEN]; + + /* Check if keyslot is enabled. */ + if (grub_be_to_cpu32 (header.keyblock[i].active) != LUKS_KEY_ENABLED) + continue; + + grub_dprintf ("luks", "Trying keyslot %d\n", i); + + /* Calculate the PBKDF2 of the user supplied passphrase. */ + gcry_err = grub_crypto_pbkdf2 (dev->hash, (grub_uint8_t *) passphrase, + grub_strlen (passphrase), + header.keyblock[i].passwordSalt, + sizeof (header.keyblock[i].passwordSalt), + grub_be_to_cpu32 (header.keyblock[i]. + passwordIterations), + digest, keysize); + + if (gcry_err) + { + grub_free (split_key); + return grub_crypto_gcry_error (gcry_err); + } + + grub_dprintf ("luks", "PBKDF2 done\n"); + + gcry_err = grub_cryptodisk_setkey (dev, digest, keysize); + if (gcry_err) + { + grub_free (split_key); + return grub_crypto_gcry_error (gcry_err); + } + + length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes)); + + /* Read and decrypt the key material from the disk. */ + err = grub_disk_read (source, + grub_be_to_cpu32 (header.keyblock + [i].keyMaterialOffset), 0, + length, split_key); + if (err) + { + grub_free (split_key); + return err; + } + + gcry_err = grub_cryptodisk_decrypt (dev, split_key, length, 0); + if (gcry_err) + { + grub_free (split_key); + return grub_crypto_gcry_error (gcry_err); + } + + /* Merge the decrypted key material to get the candidate master key. */ + gcry_err = AF_merge (dev->hash, split_key, candidate_key, keysize, + grub_be_to_cpu32 (header.keyblock[i].stripes)); + if (gcry_err) + { + grub_free (split_key); + return grub_crypto_gcry_error (gcry_err); + } + + grub_dprintf ("luks", "candidate key recovered\n"); + + /* Calculate the PBKDF2 of the candidate master key. */ + gcry_err = grub_crypto_pbkdf2 (dev->hash, candidate_key, + grub_be_to_cpu32 (header.keyBytes), + header.mkDigestSalt, + sizeof (header.mkDigestSalt), + grub_be_to_cpu32 + (header.mkDigestIterations), + candidate_digest, + sizeof (candidate_digest)); + if (gcry_err) + { + grub_free (split_key); + return grub_crypto_gcry_error (gcry_err); + } + + /* Compare the calculated PBKDF2 to the digest stored + in the header to see if it's correct. */ + if (grub_memcmp (candidate_digest, header.mkDigest, + sizeof (header.mkDigest)) != 0) + { + grub_dprintf ("luks", "bad digest\n"); + continue; + } + + /* TRANSLATORS: It's a cryptographic key slot: one element of an array + where each element is either empty or holds a key. */ + grub_printf_ (N_("Slot %d opened\n"), i); + + /* Set the master key. */ + gcry_err = grub_cryptodisk_setkey (dev, candidate_key, keysize); + if (gcry_err) + { + grub_free (split_key); + return grub_crypto_gcry_error (gcry_err); + } + + grub_free (split_key); + + return GRUB_ERR_NONE; + } + + grub_free (split_key); + return GRUB_ACCESS_DENIED; +} + +struct grub_cryptodisk_dev luks_crypto = { + .scan = configure_ciphers, + .recover_key = luks_recover_key +}; + +GRUB_MOD_INIT (luks) +{ + COMPILE_TIME_ASSERT (sizeof (((struct grub_luks_phdr *) 0)->uuid) + < GRUB_CRYPTODISK_MAX_UUID_LENGTH); + grub_cryptodisk_dev_register (&luks_crypto); +} + +GRUB_MOD_FINI (luks) +{ + grub_cryptodisk_dev_unregister (&luks_crypto); +} diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c new file mode 100644 index 000000000..7b265c780 --- /dev/null +++ b/grub-core/disk/lvm.c @@ -0,0 +1,795 @@ +/* lvm.c - module to read Logical Volumes. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GRUB_UTIL +#include +#include +#endif + +GRUB_MOD_LICENSE ("GPLv3+"); + + +/* Go the string STR and return the number after STR. *P will point + at the number. In case STR is not found, *P will be NULL and the + return value will be 0. */ +static grub_uint64_t +grub_lvm_getvalue (char **p, const char *str) +{ + *p = grub_strstr (*p, str); + if (! *p) + return 0; + *p += grub_strlen (str); + return grub_strtoull (*p, p, 10); +} + +#if 0 +static int +grub_lvm_checkvalue (char **p, char *str, char *tmpl) +{ + int tmpllen = grub_strlen (tmpl); + *p = grub_strstr (*p, str); + if (! *p) + return 0; + *p += grub_strlen (str); + if (**p != '"') + return 0; + return (grub_memcmp (*p + 1, tmpl, tmpllen) == 0 && (*p)[tmpllen + 1] == '"'); +} +#endif + +static int +grub_lvm_check_flag (char *p, const char *str, const char *flag) +{ + grub_size_t len_str = grub_strlen (str), len_flag = grub_strlen (flag); + while (1) + { + char *q; + p = grub_strstr (p, str); + if (! p) + return 0; + p += len_str; + if (grub_memcmp (p, " = [", sizeof (" = [") - 1) != 0) + continue; + q = p + sizeof (" = [") - 1; + while (1) + { + while (grub_isspace (*q)) + q++; + if (*q != '"') + return 0; + q++; + if (grub_memcmp (q, flag, len_flag) == 0 && q[len_flag] == '"') + return 1; + while (*q != '"') + q++; + q++; + if (*q == ']') + return 0; + q++; + } + } +} + +static struct grub_diskfilter_vg * +grub_lvm_detect (grub_disk_t disk, + struct grub_diskfilter_pv_id *id, + grub_disk_addr_t *start_sector) +{ + grub_err_t err; + grub_uint64_t mda_offset, mda_size; + char buf[GRUB_LVM_LABEL_SIZE]; + char vg_id[GRUB_LVM_ID_STRLEN+1]; + char pv_id[GRUB_LVM_ID_STRLEN+1]; + char *metadatabuf, *p, *q, *vgname; + struct grub_lvm_label_header *lh = (struct grub_lvm_label_header *) buf; + struct grub_lvm_pv_header *pvh; + struct grub_lvm_disk_locn *dlocn; + struct grub_lvm_mda_header *mdah; + struct grub_lvm_raw_locn *rlocn; + unsigned int i, j; + grub_size_t vgname_len; + struct grub_diskfilter_vg *vg; + struct grub_diskfilter_pv *pv; + + /* Search for label. */ + for (i = 0; i < GRUB_LVM_LABEL_SCAN_SECTORS; i++) + { + err = grub_disk_read (disk, i, 0, sizeof(buf), buf); + if (err) + goto fail; + + if ((! grub_strncmp ((char *)lh->id, GRUB_LVM_LABEL_ID, + sizeof (lh->id))) + && (! grub_strncmp ((char *)lh->type, GRUB_LVM_LVM2_LABEL, + sizeof (lh->type)))) + break; + } + + /* Return if we didn't find a label. */ + if (i == GRUB_LVM_LABEL_SCAN_SECTORS) + { +#ifdef GRUB_UTIL + grub_util_info ("no LVM signature found"); +#endif + goto fail; + } + + pvh = (struct grub_lvm_pv_header *) (buf + grub_le_to_cpu32(lh->offset_xl)); + + for (i = 0, j = 0; i < GRUB_LVM_ID_LEN; i++) + { + pv_id[j++] = pvh->pv_uuid[i]; + if ((i != 1) && (i != 29) && (i % 4 == 1)) + pv_id[j++] = '-'; + } + pv_id[j] = '\0'; + + dlocn = pvh->disk_areas_xl; + + dlocn++; + /* Is it possible to have multiple data/metadata areas? I haven't + seen devices that have it. */ + if (dlocn->offset) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "we don't support multiple LVM data areas"); + +#ifdef GRUB_UTIL + grub_util_info ("we don't support multiple LVM data areas"); +#endif + goto fail; + } + + dlocn++; + mda_offset = grub_le_to_cpu64 (dlocn->offset); + mda_size = grub_le_to_cpu64 (dlocn->size); + + /* It's possible to have multiple copies of metadata areas, we just use the + first one. */ + + /* Allocate buffer space for the circular worst-case scenario. */ + metadatabuf = grub_malloc (2 * mda_size); + if (! metadatabuf) + goto fail; + + err = grub_disk_read (disk, 0, mda_offset, mda_size, metadatabuf); + if (err) + goto fail2; + + mdah = (struct grub_lvm_mda_header *) metadatabuf; + if ((grub_strncmp ((char *)mdah->magic, GRUB_LVM_FMTT_MAGIC, + sizeof (mdah->magic))) + || (grub_le_to_cpu32 (mdah->version) != GRUB_LVM_FMTT_VERSION)) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unknown LVM metadata header"); +#ifdef GRUB_UTIL + grub_util_info ("unknown LVM metadata header"); +#endif + goto fail2; + } + + rlocn = mdah->raw_locns; + if (grub_le_to_cpu64 (rlocn->offset) + grub_le_to_cpu64 (rlocn->size) > + grub_le_to_cpu64 (mdah->size)) + { + /* Metadata is circular. Copy the wrap in place. */ + grub_memcpy (metadatabuf + mda_size, + metadatabuf + GRUB_LVM_MDA_HEADER_SIZE, + grub_le_to_cpu64 (rlocn->offset) + + grub_le_to_cpu64 (rlocn->size) - + grub_le_to_cpu64 (mdah->size)); + } + p = q = metadatabuf + grub_le_to_cpu64 (rlocn->offset); + + while (*q != ' ' && q < metadatabuf + mda_size) + q++; + + if (q == metadatabuf + mda_size) + { +#ifdef GRUB_UTIL + grub_util_info ("error parsing metadata"); +#endif + goto fail2; + } + + vgname_len = q - p; + vgname = grub_malloc (vgname_len + 1); + if (!vgname) + goto fail2; + + grub_memcpy (vgname, p, vgname_len); + vgname[vgname_len] = '\0'; + + p = grub_strstr (q, "id = \""); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("couldn't find ID"); +#endif + goto fail3; + } + p += sizeof ("id = \"") - 1; + grub_memcpy (vg_id, p, GRUB_LVM_ID_STRLEN); + vg_id[GRUB_LVM_ID_STRLEN] = '\0'; + + vg = grub_diskfilter_get_vg_by_uuid (GRUB_LVM_ID_STRLEN, vg_id); + + if (! vg) + { + /* First time we see this volume group. We've to create the + whole volume group structure. */ + vg = grub_malloc (sizeof (*vg)); + if (! vg) + goto fail3; + vg->name = vgname; + vg->uuid = grub_malloc (GRUB_LVM_ID_STRLEN); + if (! vg->uuid) + goto fail3; + grub_memcpy (vg->uuid, vg_id, GRUB_LVM_ID_STRLEN); + vg->uuid_len = GRUB_LVM_ID_STRLEN; + + vg->extent_size = grub_lvm_getvalue (&p, "extent_size = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown extent size"); +#endif + goto fail4; + } + + vg->lvs = NULL; + vg->pvs = NULL; + + p = grub_strstr (p, "physical_volumes {"); + if (p) + { + p += sizeof ("physical_volumes {") - 1; + + /* Add all the pvs to the volume group. */ + while (1) + { + grub_ssize_t s; + while (grub_isspace (*p)) + p++; + + if (*p == '}') + break; + + pv = grub_zalloc (sizeof (*pv)); + q = p; + while (*q != ' ') + q++; + + s = q - p; + pv->name = grub_malloc (s + 1); + grub_memcpy (pv->name, p, s); + pv->name[s] = '\0'; + + p = grub_strstr (p, "id = \""); + if (p == NULL) + goto pvs_fail; + p += sizeof("id = \"") - 1; + + pv->id.uuid = grub_malloc (GRUB_LVM_ID_STRLEN); + if (!pv->id.uuid) + goto pvs_fail; + grub_memcpy (pv->id.uuid, p, GRUB_LVM_ID_STRLEN); + pv->id.uuidlen = GRUB_LVM_ID_STRLEN; + + pv->start_sector = grub_lvm_getvalue (&p, "pe_start = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown pe_start"); +#endif + goto pvs_fail; + } + + p = grub_strchr (p, '}'); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("error parsing pe_start"); +#endif + goto pvs_fail; + } + p++; + + pv->disk = NULL; + pv->next = vg->pvs; + vg->pvs = pv; + + continue; + pvs_fail: + grub_free (pv->name); + grub_free (pv); + goto fail4; + } + } + + p = grub_strstr (p, "logical_volumes {"); + if (p) + { + p += sizeof ("logical_volumes {") - 1; + + /* And add all the lvs to the volume group. */ + while (1) + { + grub_ssize_t s; + int skip_lv = 0; + struct grub_diskfilter_lv *lv; + struct grub_diskfilter_segment *seg; + int is_pvmove; + + while (grub_isspace (*p)) + p++; + + if (*p == '}') + break; + + lv = grub_zalloc (sizeof (*lv)); + + q = p; + while (*q != ' ') + q++; + + s = q - p; + lv->name = grub_strndup (p, s); + if (!lv->name) + goto lvs_fail; + + { + const char *iptr; + char *optr; + lv->fullname = grub_malloc (sizeof ("lvm/") - 1 + 2 * vgname_len + + 1 + 2 * s + 1); + if (!lv->fullname) + goto lvs_fail; + + grub_memcpy (lv->fullname, "lvm/", sizeof ("lvm/") - 1); + optr = lv->fullname + sizeof ("lvm/") - 1; + for (iptr = vgname; iptr < vgname + vgname_len; iptr++) + { + *optr++ = *iptr; + if (*iptr == '-') + *optr++ = '-'; + } + *optr++ = '-'; + for (iptr = p; iptr < p + s; iptr++) + { + *optr++ = *iptr; + if (*iptr == '-') + *optr++ = '-'; + } + *optr++ = 0; + lv->idname = grub_malloc (sizeof ("lvmid/") + + 2 * GRUB_LVM_ID_STRLEN + 1); + if (!lv->idname) + goto lvs_fail; + grub_memcpy (lv->idname, "lvmid/", + sizeof ("lvmid/") - 1); + grub_memcpy (lv->idname + sizeof ("lvmid/") - 1, + vg_id, GRUB_LVM_ID_STRLEN); + lv->idname[sizeof ("lvmid/") - 1 + GRUB_LVM_ID_STRLEN] = '/'; + + p = grub_strstr (q, "id = \""); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("couldn't find ID"); +#endif + goto lvs_fail; + } + p += sizeof ("id = \"") - 1; + grub_memcpy (lv->idname + sizeof ("lvmid/") - 1 + + GRUB_LVM_ID_STRLEN + 1, + p, GRUB_LVM_ID_STRLEN); + lv->idname[sizeof ("lvmid/") - 1 + 2 * GRUB_LVM_ID_STRLEN + 1] = '\0'; + } + + lv->size = 0; + + lv->visible = grub_lvm_check_flag (p, "status", "VISIBLE"); + is_pvmove = grub_lvm_check_flag (p, "status", "PVMOVE"); + + lv->segment_count = grub_lvm_getvalue (&p, "segment_count = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown segment_count"); +#endif + goto lvs_fail; + } + lv->segments = grub_zalloc (sizeof (*seg) * lv->segment_count); + seg = lv->segments; + + for (i = 0; i < lv->segment_count; i++) + { + + p = grub_strstr (p, "segment"); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown segment"); +#endif + goto lvs_segment_fail; + } + + seg->start_extent = grub_lvm_getvalue (&p, "start_extent = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown start_extent"); +#endif + goto lvs_segment_fail; + } + seg->extent_count = grub_lvm_getvalue (&p, "extent_count = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown extent_count"); +#endif + goto lvs_segment_fail; + } + + p = grub_strstr (p, "type = \""); + if (p == NULL) + goto lvs_segment_fail; + p += sizeof("type = \"") - 1; + + lv->size += seg->extent_count * vg->extent_size; + + if (grub_memcmp (p, "striped\"", + sizeof ("striped\"") - 1) == 0) + { + struct grub_diskfilter_node *stripe; + + seg->type = GRUB_DISKFILTER_STRIPED; + seg->node_count = grub_lvm_getvalue (&p, "stripe_count = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown stripe_count"); +#endif + goto lvs_segment_fail; + } + + if (seg->node_count != 1) + seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = "); + + seg->nodes = grub_zalloc (sizeof (*stripe) + * seg->node_count); + stripe = seg->nodes; + + p = grub_strstr (p, "stripes = ["); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown stripes"); +#endif + goto lvs_segment_fail2; + } + p += sizeof("stripes = [") - 1; + + for (j = 0; j < seg->node_count; j++) + { + p = grub_strchr (p, '"'); + if (p == NULL) + continue; + q = ++p; + while (*q != '"') + q++; + + s = q - p; + + stripe->name = grub_malloc (s + 1); + if (stripe->name == NULL) + goto lvs_segment_fail2; + + grub_memcpy (stripe->name, p, s); + stripe->name[s] = '\0'; + + p = q + 1; + + stripe->start = grub_lvm_getvalue (&p, ",") + * vg->extent_size; + if (p == NULL) + continue; + + stripe++; + } + } + else if (grub_memcmp (p, "mirror\"", sizeof ("mirror\"") - 1) + == 0) + { + seg->type = GRUB_DISKFILTER_MIRROR; + seg->node_count = grub_lvm_getvalue (&p, "mirror_count = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown mirror_count"); +#endif + goto lvs_segment_fail; + } + + seg->nodes = grub_zalloc (sizeof (seg->nodes[0]) + * seg->node_count); + + p = grub_strstr (p, "mirrors = ["); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown mirrors"); +#endif + goto lvs_segment_fail2; + } + p += sizeof("mirrors = [") - 1; + + for (j = 0; j < seg->node_count; j++) + { + char *lvname; + + p = grub_strchr (p, '"'); + if (p == NULL) + continue; + q = ++p; + while (*q != '"') + q++; + + s = q - p; + + lvname = grub_malloc (s + 1); + if (lvname == NULL) + goto lvs_segment_fail2; + + grub_memcpy (lvname, p, s); + lvname[s] = '\0'; + seg->nodes[j].name = lvname; + p = q + 1; + } + /* Only first (original) is ok with in progress pvmove. */ + if (is_pvmove) + seg->node_count = 1; + } + else if (grub_memcmp (p, "raid", sizeof ("raid") - 1) == 0 + && ((p[sizeof ("raid") - 1] >= '4' + && p[sizeof ("raid") - 1] <= '6') + || p[sizeof ("raid") - 1] == '1') + && p[sizeof ("raidX") - 1] == '"') + { + switch (p[sizeof ("raid") - 1]) + { + case '1': + seg->type = GRUB_DISKFILTER_MIRROR; + break; + case '4': + seg->type = GRUB_DISKFILTER_RAID4; + seg->layout = GRUB_RAID_LAYOUT_LEFT_ASYMMETRIC; + break; + case '5': + seg->type = GRUB_DISKFILTER_RAID5; + seg->layout = GRUB_RAID_LAYOUT_LEFT_SYMMETRIC; + break; + case '6': + seg->type = GRUB_DISKFILTER_RAID6; + seg->layout = (GRUB_RAID_LAYOUT_RIGHT_ASYMMETRIC + | GRUB_RAID_LAYOUT_MUL_FROM_POS); + break; + } + seg->node_count = grub_lvm_getvalue (&p, "device_count = "); + + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown device_count"); +#endif + goto lvs_segment_fail; + } + + if (seg->type != GRUB_DISKFILTER_MIRROR) + { + seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = "); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown stripe_size"); +#endif + goto lvs_segment_fail; + } + } + + seg->nodes = grub_zalloc (sizeof (seg->nodes[0]) + * seg->node_count); + + p = grub_strstr (p, "raids = ["); + if (p == NULL) + { +#ifdef GRUB_UTIL + grub_util_info ("unknown raids"); +#endif + goto lvs_segment_fail2; + } + p += sizeof("raids = [") - 1; + + for (j = 0; j < seg->node_count; j++) + { + char *lvname; + + p = grub_strchr (p, '"'); + p = p ? grub_strchr (p + 1, '"') : 0; + p = p ? grub_strchr (p + 1, '"') : 0; + if (p == NULL) + continue; + q = ++p; + while (*q != '"') + q++; + + s = q - p; + + lvname = grub_malloc (s + 1); + if (lvname == NULL) + goto lvs_segment_fail2; + + grub_memcpy (lvname, p, s); + lvname[s] = '\0'; + seg->nodes[j].name = lvname; + p = q + 1; + } + if (seg->type == GRUB_DISKFILTER_RAID4) + { + char *tmp; + tmp = seg->nodes[0].name; + grub_memmove (seg->nodes, seg->nodes + 1, + sizeof (seg->nodes[0]) + * (seg->node_count - 1)); + seg->nodes[seg->node_count - 1].name = tmp; + } + } + else + { +#ifdef GRUB_UTIL + char *p2; + p2 = grub_strchr (p, '"'); + if (p2) + *p2 = 0; + grub_util_info ("unknown LVM type %s", p); + if (p2) + *p2 ='"'; +#endif + /* Found a non-supported type, give up and move on. */ + skip_lv = 1; + break; + } + + seg++; + + continue; + lvs_segment_fail2: + grub_free (seg->nodes); + lvs_segment_fail: + goto fail4; + } + + if (p != NULL) + p = grub_strchr (p, '}'); + if (p == NULL) + goto lvs_fail; + p += 3; + + if (skip_lv) + { + grub_free (lv->name); + grub_free (lv); + continue; + } + + lv->vg = vg; + lv->next = vg->lvs; + vg->lvs = lv; + + continue; + lvs_fail: + grub_free (lv->name); + grub_free (lv); + goto fail4; + } + } + + /* Match lvs. */ + { + struct grub_diskfilter_lv *lv1; + struct grub_diskfilter_lv *lv2; + for (lv1 = vg->lvs; lv1; lv1 = lv1->next) + for (i = 0; i < lv1->segment_count; i++) + for (j = 0; j < lv1->segments[i].node_count; j++) + { + if (vg->pvs) + for (pv = vg->pvs; pv; pv = pv->next) + { + if (! grub_strcmp (pv->name, + lv1->segments[i].nodes[j].name)) + { + lv1->segments[i].nodes[j].pv = pv; + break; + } + } + if (lv1->segments[i].nodes[j].pv == NULL) + for (lv2 = vg->lvs; lv2; lv2 = lv2->next) + if (grub_strcmp (lv2->name, + lv1->segments[i].nodes[j].name) == 0) + lv1->segments[i].nodes[j].lv = lv2; + } + + } + if (grub_diskfilter_vg_register (vg)) + goto fail4; + } + else + { + grub_free (vgname); + } + + id->uuid = grub_malloc (GRUB_LVM_ID_STRLEN); + if (!id->uuid) + goto fail4; + grub_memcpy (id->uuid, pv_id, GRUB_LVM_ID_STRLEN); + id->uuidlen = GRUB_LVM_ID_STRLEN; + grub_free (metadatabuf); + *start_sector = -1; + return vg; + + /* Failure path. */ + fail4: + grub_free (vg); + fail3: + grub_free (vgname); + + fail2: + grub_free (metadatabuf); + fail: + return NULL; +} + + + +static struct grub_diskfilter grub_lvm_dev = { + .name = "lvm", + .detect = grub_lvm_detect, + .next = 0 +}; + +GRUB_MOD_INIT (lvm) +{ + grub_diskfilter_register_back (&grub_lvm_dev); +} + +GRUB_MOD_FINI (lvm) +{ + grub_diskfilter_unregister (&grub_lvm_dev); +} diff --git a/grub-core/disk/mdraid1x_linux.c b/grub-core/disk/mdraid1x_linux.c new file mode 100644 index 000000000..7cc80d3df --- /dev/null +++ b/grub-core/disk/mdraid1x_linux.c @@ -0,0 +1,233 @@ +/* mdraid_linux.c - module to handle Linux Software RAID. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Linux RAID on disk structures and constants, + copied from include/linux/raid/md_p.h. */ + +#define SB_MAGIC 0xa92b4efc + +/* + * The version-1 superblock : + * All numeric fields are little-endian. + * + * Total size: 256 bytes plus 2 per device. + * 1K allows 384 devices. + */ + +struct grub_raid_super_1x +{ + /* Constant array information - 128 bytes. */ + grub_uint32_t magic; /* MD_SB_MAGIC: 0xa92b4efc - little endian. */ + grub_uint32_t major_version; /* 1. */ + grub_uint32_t feature_map; /* Bit 0 set if 'bitmap_offset' is meaningful. */ + grub_uint32_t pad0; /* Always set to 0 when writing. */ + + grub_uint8_t set_uuid[16]; /* User-space generated. */ + char set_name[32]; /* Set and interpreted by user-space. */ + + grub_uint64_t ctime; /* Lo 40 bits are seconds, top 24 are microseconds or 0. */ + grub_uint32_t level; /* -4 (multipath), -1 (linear), 0,1,4,5. */ + grub_uint32_t layout; /* only for raid5 and raid10 currently. */ + grub_uint64_t size; /* Used size of component devices, in 512byte sectors. */ + + grub_uint32_t chunksize; /* In 512byte sectors. */ + grub_uint32_t raid_disks; + grub_uint32_t bitmap_offset; /* Sectors after start of superblock that bitmap starts + * NOTE: signed, so bitmap can be before superblock + * only meaningful of feature_map[0] is set. + */ + + /* These are only valid with feature bit '4'. */ + grub_uint32_t new_level; /* New level we are reshaping to. */ + grub_uint64_t reshape_position; /* Next address in array-space for reshape. */ + grub_uint32_t delta_disks; /* Change in number of raid_disks. */ + grub_uint32_t new_layout; /* New layout. */ + grub_uint32_t new_chunk; /* New chunk size (512byte sectors). */ + grub_uint8_t pad1[128 - 124]; /* Set to 0 when written. */ + + /* Constant this-device information - 64 bytes. */ + grub_uint64_t data_offset; /* Sector start of data, often 0. */ + grub_uint64_t data_size; /* Sectors in this device that can be used for data. */ + grub_uint64_t super_offset; /* Sector start of this superblock. */ + grub_uint64_t recovery_offset; /* Sectors before this offset (from data_offset) have been recovered. */ + grub_uint32_t dev_number; /* Permanent identifier of this device - not role in raid. */ + grub_uint32_t cnt_corrected_read; /* Number of read errors that were corrected by re-writing. */ + grub_uint8_t device_uuid[16]; /* User-space setable, ignored by kernel. */ + grub_uint8_t devflags; /* Per-device flags. Only one defined... */ + grub_uint8_t pad2[64 - 57]; /* Set to 0 when writing. */ + + /* Array state information - 64 bytes. */ + grub_uint64_t utime; /* 40 bits second, 24 btes microseconds. */ + grub_uint64_t events; /* Incremented when superblock updated. */ + grub_uint64_t resync_offset; /* Data before this offset (from data_offset) known to be in sync. */ + grub_uint32_t sb_csum; /* Checksum upto devs[max_dev]. */ + grub_uint32_t max_dev; /* Size of devs[] array to consider. */ + grub_uint8_t pad3[64 - 32]; /* Set to 0 when writing. */ + + /* Device state information. Indexed by dev_number. + * 2 bytes per device. + * Note there are no per-device state flags. State information is rolled + * into the 'roles' value. If a device is spare or faulty, then it doesn't + * have a meaningful role. + */ + grub_uint16_t dev_roles[0]; /* Role in array, or 0xffff for a spare, or 0xfffe for faulty. */ +}; +/* Could be GRUB_PACKED, but since all members in this struct + are already appropriately aligned, we can omit this and avoid suboptimal + assembly in some cases. */ + +#define WriteMostly1 1 /* Mask for writemostly flag in above devflags. */ + +static struct grub_diskfilter_vg * +grub_mdraid_detect (grub_disk_t disk, + struct grub_diskfilter_pv_id *id, + grub_disk_addr_t *start_sector) +{ + grub_uint64_t size; + grub_uint8_t minor_version; + + size = grub_disk_get_size (disk); + + /* Check for an 1.x superblock. + * It's always aligned to a 4K boundary + * and depending on the minor version it can be: + * 0: At least 8K, but less than 12K, from end of device + * 1: At start of device + * 2: 4K from start of device. + */ + + for (minor_version = 0; minor_version < 3; ++minor_version) + { + grub_disk_addr_t sector = 0; + struct grub_raid_super_1x sb; + grub_uint16_t role; + grub_uint32_t level; + struct grub_diskfilter_vg *array; + char *uuid; + + if (size == GRUB_DISK_SIZE_UNKNOWN && minor_version == 0) + continue; + + switch (minor_version) + { + case 0: + sector = (size - 8 * 2) & ~(4 * 2 - 1); + break; + case 1: + sector = 0; + break; + case 2: + sector = 4 * 2; + break; + } + + if (grub_disk_read (disk, sector, 0, sizeof (struct grub_raid_super_1x), + &sb)) + return NULL; + + if (sb.magic != grub_cpu_to_le32_compile_time (SB_MAGIC) + || grub_le_to_cpu64 (sb.super_offset) != sector) + continue; + + if (sb.major_version != grub_cpu_to_le32_compile_time (1)) + /* Unsupported version. */ + return NULL; + + level = grub_le_to_cpu32 (sb.level); + + /* Multipath. */ + if ((int) level == -4) + level = 1; + + if (level != 0 && level != 1 && level != 4 && + level != 5 && level != 6 && level != 10) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "Unsupported RAID level: %d", sb.level); + return NULL; + } + + if (grub_le_to_cpu32 (sb.dev_number) >= + grub_le_to_cpu32 (sb.max_dev)) + /* Spares aren't implemented. */ + return NULL; + + if (grub_disk_read (disk, sector, + (char *) &sb.dev_roles[grub_le_to_cpu32 (sb.dev_number)] + - (char *) &sb, + sizeof (role), &role)) + return NULL; + + if (grub_le_to_cpu16 (role) + >= grub_le_to_cpu32 (sb.raid_disks)) + /* Spares aren't implemented. */ + return NULL; + + id->uuidlen = 0; + id->id = grub_le_to_cpu16 (role); + + uuid = grub_malloc (16); + if (!uuid) + return NULL; + + grub_memcpy (uuid, sb.set_uuid, 16); + + *start_sector = grub_le_to_cpu64 (sb.data_offset); + + array = grub_diskfilter_make_raid (16, uuid, + grub_le_to_cpu32 (sb.raid_disks), + sb.set_name, + (sb.size) + ? grub_le_to_cpu64 (sb.size) + : grub_le_to_cpu64 (sb.data_size), + grub_le_to_cpu32 (sb.chunksize), + grub_le_to_cpu32 (sb.layout), + grub_le_to_cpu32 (sb.level)); + + return array; + } + + /* not 1.x raid. */ + return NULL; +} + +static struct grub_diskfilter grub_mdraid_dev = { + .name = "mdraid1x", + .detect = grub_mdraid_detect, + .next = 0 +}; + +GRUB_MOD_INIT (mdraid1x) +{ + grub_diskfilter_register_front (&grub_mdraid_dev); +} + +GRUB_MOD_FINI (mdraid1x) +{ + grub_diskfilter_unregister (&grub_mdraid_dev); +} diff --git a/grub-core/disk/mdraid_linux.c b/grub-core/disk/mdraid_linux.c new file mode 100644 index 000000000..11024ae31 --- /dev/null +++ b/grub-core/disk/mdraid_linux.c @@ -0,0 +1,298 @@ +/* mdraid_linux.c - module to handle Linux Software RAID. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +/* Linux RAID on disk structures and constants, + copied from include/linux/raid/md_p.h. */ + +GRUB_MOD_LICENSE ("GPLv3+"); + +#ifdef MODE_BIGENDIAN +#define grub_md_to_cpu64 grub_be_to_cpu64 +#define grub_md_to_cpu32 grub_be_to_cpu32 +#define grub_md_to_cpu16 grub_be_to_cpu16 +#define grub_cpu_to_md64_compile_time grub_cpu_to_be64_compile_time +#define grub_cpu_to_md32_compile_time grub_cpu_to_be32_compile_time +#define grub_cpu_to_md16_compile_time grub_cpu_to_be16_compile_time +#else +#define grub_md_to_cpu64 grub_le_to_cpu64 +#define grub_md_to_cpu32 grub_le_to_cpu32 +#define grub_md_to_cpu16 grub_le_to_cpu16 +#define grub_cpu_to_md64_compile_time grub_cpu_to_le64_compile_time +#define grub_cpu_to_md32_compile_time grub_cpu_to_le32_compile_time +#define grub_cpu_to_md16_compile_time grub_cpu_to_le16_compile_time +#endif + +#define RESERVED_BYTES (64 * 1024) +#define RESERVED_SECTORS (RESERVED_BYTES / 512) + +#define NEW_SIZE_SECTORS(x) ((x & ~(RESERVED_SECTORS - 1)) \ + - RESERVED_SECTORS) + +#define SB_BYTES 4096 +#define SB_WORDS (SB_BYTES / 4) +#define SB_SECTORS (SB_BYTES / 512) + +/* + * The following are counted in 32-bit words + */ +#define SB_GENERIC_OFFSET 0 + +#define SB_PERSONALITY_OFFSET 64 +#define SB_DISKS_OFFSET 128 +#define SB_DESCRIPTOR_OFFSET 992 + +#define SB_GENERIC_CONSTANT_WORDS 32 +#define SB_GENERIC_STATE_WORDS 32 +#define SB_GENERIC_WORDS (SB_GENERIC_CONSTANT_WORDS + \ + SB_GENERIC_STATE_WORDS) + +#define SB_PERSONALITY_WORDS 64 +#define SB_DESCRIPTOR_WORDS 32 +#define SB_DISKS 27 +#define SB_DISKS_WORDS (SB_DISKS * SB_DESCRIPTOR_WORDS) + +#define SB_RESERVED_WORDS (1024 \ + - SB_GENERIC_WORDS \ + - SB_PERSONALITY_WORDS \ + - SB_DISKS_WORDS \ + - SB_DESCRIPTOR_WORDS) + +#define SB_EQUAL_WORDS (SB_GENERIC_WORDS \ + + SB_PERSONALITY_WORDS \ + + SB_DISKS_WORDS) + +/* + * Device "operational" state bits + */ +#define DISK_FAULTY 0 +#define DISK_ACTIVE 1 +#define DISK_SYNC 2 +#define DISK_REMOVED 3 + +#define DISK_WRITEMOSTLY 9 + +#define SB_MAGIC 0xa92b4efc + +/* + * Superblock state bits + */ +#define SB_CLEAN 0 +#define SB_ERRORS 1 + +#define SB_BITMAP_PRESENT 8 + +struct grub_raid_disk_09 +{ + grub_uint32_t number; /* Device number in the entire set. */ + grub_uint32_t major; /* Device major number. */ + grub_uint32_t minor; /* Device minor number. */ + grub_uint32_t raid_disk; /* The role of the device in the raid set. */ + grub_uint32_t state; /* Operational state. */ + grub_uint32_t reserved[SB_DESCRIPTOR_WORDS - 5]; +}; + +struct grub_raid_super_09 +{ + /* + * Constant generic information + */ + grub_uint32_t md_magic; /* MD identifier. */ + grub_uint32_t major_version; /* Major version. */ + grub_uint32_t minor_version; /* Minor version. */ + grub_uint32_t patch_version; /* Patchlevel version. */ + grub_uint32_t gvalid_words; /* Number of used words in this section. */ + grub_uint32_t set_uuid0; /* Raid set identifier. */ + grub_uint32_t ctime; /* Creation time. */ + grub_uint32_t level; /* Raid personality. */ + grub_uint32_t size; /* Apparent size of each individual disk. */ + grub_uint32_t nr_disks; /* Total disks in the raid set. */ + grub_uint32_t raid_disks; /* Disks in a fully functional raid set. */ + grub_uint32_t md_minor; /* Preferred MD minor device number. */ + grub_uint32_t not_persistent; /* Does it have a persistent superblock. */ + grub_uint32_t set_uuid1; /* Raid set identifier #2. */ + grub_uint32_t set_uuid2; /* Raid set identifier #3. */ + grub_uint32_t set_uuid3; /* Raid set identifier #4. */ + grub_uint32_t gstate_creserved[SB_GENERIC_CONSTANT_WORDS - 16]; + + /* + * Generic state information + */ + grub_uint32_t utime; /* Superblock update time. */ + grub_uint32_t state; /* State bits (clean, ...). */ + grub_uint32_t active_disks; /* Number of currently active disks. */ + grub_uint32_t working_disks; /* Number of working disks. */ + grub_uint32_t failed_disks; /* Number of failed disks. */ + grub_uint32_t spare_disks; /* Number of spare disks. */ + grub_uint32_t sb_csum; /* Checksum of the whole superblock. */ + grub_uint64_t events; /* Superblock update count. */ + grub_uint64_t cp_events; /* Checkpoint update count. */ + grub_uint32_t recovery_cp; /* Recovery checkpoint sector count. */ + grub_uint32_t gstate_sreserved[SB_GENERIC_STATE_WORDS - 12]; + + /* + * Personality information + */ + grub_uint32_t layout; /* The array's physical layout. */ + grub_uint32_t chunk_size; /* Chunk size in bytes. */ + grub_uint32_t root_pv; /* LV root PV. */ + grub_uint32_t root_block; /* LV root block. */ + grub_uint32_t pstate_reserved[SB_PERSONALITY_WORDS - 4]; + + /* + * Disks information + */ + struct grub_raid_disk_09 disks[SB_DISKS]; + + /* + * Reserved + */ + grub_uint32_t reserved[SB_RESERVED_WORDS]; + + /* + * Active descriptor + */ + struct grub_raid_disk_09 this_disk; +} GRUB_PACKED; + +static struct grub_diskfilter_vg * +grub_mdraid_detect (grub_disk_t disk, + struct grub_diskfilter_pv_id *id, + grub_disk_addr_t *start_sector) +{ + grub_disk_addr_t sector; + grub_uint64_t size; + struct grub_raid_super_09 *sb = NULL; + grub_uint32_t *uuid; + grub_uint32_t level; + struct grub_diskfilter_vg *ret; + + /* The sector where the mdraid 0.90 superblock is stored, if available. */ + size = grub_disk_get_size (disk); + if (size == GRUB_DISK_SIZE_UNKNOWN) + /* not 0.9x raid. */ + return NULL; + sector = NEW_SIZE_SECTORS (size); + + sb = grub_malloc (sizeof (*sb)); + if (!sb) + return NULL; + + if (grub_disk_read (disk, sector, 0, SB_BYTES, sb)) + goto fail; + + /* Look whether there is a mdraid 0.90 superblock. */ + if (sb->md_magic != grub_cpu_to_md32_compile_time (SB_MAGIC)) + /* not 0.9x raid. */ + goto fail; + + if (sb->major_version != grub_cpu_to_md32_compile_time (0) + || sb->minor_version != grub_cpu_to_md32_compile_time (90)) + /* Unsupported version. */ + goto fail; + + /* No need for explicit check that sb->size is 0 (unspecified) since + 0 >= non-0 is false. */ + if (((grub_disk_addr_t) grub_md_to_cpu32 (sb->size)) * 2 >= size) + goto fail; + + /* FIXME: Check the checksum. */ + + level = grub_md_to_cpu32 (sb->level); + /* Multipath. */ + if ((int) level == -4) + level = 1; + + if (level != 0 && level != 1 && level != 4 && + level != 5 && level != 6 && level != 10) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported RAID level: %d", level); + goto fail; + } + if (grub_md_to_cpu32 (sb->this_disk.number) == 0xffff + || grub_md_to_cpu32 (sb->this_disk.number) == 0xfffe) + /* Spares aren't implemented. */ + goto fail; + + uuid = grub_malloc (16); + if (!uuid) + goto fail; + + uuid[0] = grub_swap_bytes32 (sb->set_uuid0); + uuid[1] = grub_swap_bytes32 (sb->set_uuid1); + uuid[2] = grub_swap_bytes32 (sb->set_uuid2); + uuid[3] = grub_swap_bytes32 (sb->set_uuid3); + + *start_sector = 0; + + id->uuidlen = 0; + id->id = grub_md_to_cpu32 (sb->this_disk.number); + + char buf[32]; + grub_snprintf (buf, sizeof (buf), "md%d", grub_md_to_cpu32 (sb->md_minor)); + ret = grub_diskfilter_make_raid (16, (char *) uuid, + grub_md_to_cpu32 (sb->raid_disks), buf, + (sb->size) ? ((grub_disk_addr_t) + grub_md_to_cpu32 (sb->size)) * 2 + : sector, + grub_md_to_cpu32 (sb->chunk_size) >> 9, + grub_md_to_cpu32 (sb->layout), + level); + grub_free (sb); + return ret; + + fail: + grub_free (sb); + return NULL; +} + +static struct grub_diskfilter grub_mdraid_dev = { +#ifdef MODE_BIGENDIAN + .name = "mdraid09_be", +#else + .name = "mdraid09", +#endif + .detect = grub_mdraid_detect, + .next = 0 +}; + +#ifdef MODE_BIGENDIAN +GRUB_MOD_INIT (mdraid09_be) +#else +GRUB_MOD_INIT (mdraid09) +#endif +{ + grub_diskfilter_register_front (&grub_mdraid_dev); +} + +#ifdef MODE_BIGENDIAN +GRUB_MOD_FINI (mdraid09_be) +#else +GRUB_MOD_FINI (mdraid09) +#endif +{ + grub_diskfilter_unregister (&grub_mdraid_dev); +} diff --git a/grub-core/disk/mdraid_linux_be.c b/grub-core/disk/mdraid_linux_be.c new file mode 100644 index 000000000..539bcf469 --- /dev/null +++ b/grub-core/disk/mdraid_linux_be.c @@ -0,0 +1,2 @@ +#define MODE_BIGENDIAN 1 +#include "mdraid_linux.c" diff --git a/grub-core/disk/memdisk.c b/grub-core/disk/memdisk.c new file mode 100644 index 000000000..e5ffc01bf --- /dev/null +++ b/grub-core/disk/memdisk.c @@ -0,0 +1,116 @@ +/* memdisk.c - Access embedded memory disk. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static char *memdisk_addr; +static grub_off_t memdisk_size = 0; + +static int +grub_memdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + return hook ("memdisk", hook_data); +} + +static grub_err_t +grub_memdisk_open (const char *name, grub_disk_t disk) +{ + if (grub_strcmp (name, "memdisk")) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a memdisk"); + + disk->total_sectors = memdisk_size / GRUB_DISK_SECTOR_SIZE; + disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; + disk->id = 0; + + return GRUB_ERR_NONE; +} + +static void +grub_memdisk_close (grub_disk_t disk __attribute((unused))) +{ +} + +static grub_err_t +grub_memdisk_read (grub_disk_t disk __attribute((unused)), grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_memcpy (buf, memdisk_addr + (sector << GRUB_DISK_SECTOR_BITS), size << GRUB_DISK_SECTOR_BITS); + return 0; +} + +static grub_err_t +grub_memdisk_write (grub_disk_t disk __attribute((unused)), grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + grub_memcpy (memdisk_addr + (sector << GRUB_DISK_SECTOR_BITS), buf, size << GRUB_DISK_SECTOR_BITS); + return 0; +} + +static struct grub_disk_dev grub_memdisk_dev = + { + .name = "memdisk", + .id = GRUB_DISK_DEVICE_MEMDISK_ID, + .iterate = grub_memdisk_iterate, + .open = grub_memdisk_open, + .close = grub_memdisk_close, + .read = grub_memdisk_read, + .write = grub_memdisk_write, + .next = 0 + }; + +GRUB_MOD_INIT(memdisk) +{ + struct grub_module_header *header; + FOR_MODULES (header) + if (header->type == OBJ_TYPE_MEMDISK) + { + char *memdisk_orig_addr; + memdisk_orig_addr = (char *) header + sizeof (struct grub_module_header); + + grub_dprintf ("memdisk", "Found memdisk image at %p\n", memdisk_orig_addr); + + memdisk_size = header->size - sizeof (struct grub_module_header); + memdisk_addr = grub_malloc (memdisk_size); + + grub_dprintf ("memdisk", "Copying memdisk image to dynamic memory\n"); + grub_memmove (memdisk_addr, memdisk_orig_addr, memdisk_size); + + grub_disk_dev_register (&grub_memdisk_dev); + break; + } +} + +GRUB_MOD_FINI(memdisk) +{ + if (! memdisk_size) + return; + grub_free (memdisk_addr); + grub_disk_dev_unregister (&grub_memdisk_dev); +} diff --git a/grub-core/disk/pata.c b/grub-core/disk/pata.c new file mode 100644 index 000000000..23eef2be1 --- /dev/null +++ b/grub-core/disk/pata.c @@ -0,0 +1,550 @@ +/* ata_pthru.c - ATA pass through for ata.mod. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#ifndef GRUB_MACHINE_MIPS_QEMU_MIPS +#include +#include +#else +#define GRUB_MACHINE_PCI_IO_BASE 0xb4000000 +#endif +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* At the moment, only two IDE ports are supported. */ +static const grub_port_t grub_pata_ioaddress[] = { GRUB_ATA_CH0_PORT1, + GRUB_ATA_CH1_PORT1 }; + +struct grub_pata_device +{ + /* IDE port to use. */ + int port; + + /* IO addresses on which the registers for this device can be + found. */ + grub_port_t ioaddress; + + /* Two devices can be connected to a single cable. Use this field + to select device 0 (commonly known as "master") or device 1 + (commonly known as "slave"). */ + int device; + + int present; + + struct grub_pata_device *next; +}; + +static struct grub_pata_device *grub_pata_devices; + +static inline void +grub_pata_regset (struct grub_pata_device *dev, int reg, int val) +{ + grub_outb (val, dev->ioaddress + reg); +} + +static inline grub_uint8_t +grub_pata_regget (struct grub_pata_device *dev, int reg) +{ + return grub_inb (dev->ioaddress + reg); +} + +/* Wait for !BSY. */ +static grub_err_t +grub_pata_wait_not_busy (struct grub_pata_device *dev, int milliseconds) +{ + /* ATA requires 400ns (after a write to CMD register) or + 1 PIO cycle (after a DRQ block transfer) before + first check of BSY. */ + grub_millisleep (1); + + int i = 1; + grub_uint8_t sts; + while ((sts = grub_pata_regget (dev, GRUB_ATA_REG_STATUS)) + & GRUB_ATA_STATUS_BUSY) + { + if (i >= milliseconds) + { + grub_dprintf ("pata", "timeout: %dms, status=0x%x\n", + milliseconds, sts); + return grub_error (GRUB_ERR_TIMEOUT, "PATA timeout"); + } + + grub_millisleep (1); + i++; + } + + return GRUB_ERR_NONE; +} + +static inline grub_err_t +grub_pata_check_ready (struct grub_pata_device *dev, int spinup) +{ + if (grub_pata_regget (dev, GRUB_ATA_REG_STATUS) & GRUB_ATA_STATUS_BUSY) + return grub_pata_wait_not_busy (dev, spinup ? GRUB_ATA_TOUT_SPINUP + : GRUB_ATA_TOUT_STD); + + return GRUB_ERR_NONE; +} + +static inline void +grub_pata_wait (void) +{ + grub_millisleep (50); +} + +#ifdef GRUB_MACHINE_MIPS_QEMU_MIPS +#define grub_ata_to_cpu16(x) ((grub_uint16_t) (x)) +#define grub_cpu_to_ata16(x) ((grub_uint16_t) (x)) +#else +#define grub_ata_to_cpu16 grub_le_to_cpu16 +#define grub_cpu_to_ata16 grub_cpu_to_le16 +#endif + +static void +grub_pata_pio_read (struct grub_pata_device *dev, char *buf, grub_size_t size) +{ + unsigned int i; + + /* Read in the data, word by word. */ + for (i = 0; i < size / 2; i++) + grub_set_unaligned16 (buf + 2 * i, + grub_ata_to_cpu16 (grub_inw(dev->ioaddress + + GRUB_ATA_REG_DATA))); + if (size & 1) + buf[size - 1] = (char) grub_ata_to_cpu16 (grub_inw (dev->ioaddress + + GRUB_ATA_REG_DATA)); +} + +static void +grub_pata_pio_write (struct grub_pata_device *dev, char *buf, grub_size_t size) +{ + unsigned int i; + + /* Write the data, word by word. */ + for (i = 0; i < size / 2; i++) + grub_outw(grub_cpu_to_ata16 (grub_get_unaligned16 (buf + 2 * i)), dev->ioaddress + GRUB_ATA_REG_DATA); +} + +/* ATA pass through support, used by hdparm.mod. */ +static grub_err_t +grub_pata_readwrite (struct grub_ata *disk, + struct grub_disk_ata_pass_through_parms *parms, + int spinup) +{ + struct grub_pata_device *dev = (struct grub_pata_device *) disk->data; + grub_size_t nread = 0; + int i; + + if (! (parms->cmdsize == 0 || parms->cmdsize == 12)) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "ATAPI non-12 byte commands not supported"); + + grub_dprintf ("pata", "pata_pass_through: cmd=0x%x, features=0x%x, sectors=0x%x\n", + parms->taskfile.cmd, + parms->taskfile.features, + parms->taskfile.sectors); + grub_dprintf ("pata", "lba_high=0x%x, lba_mid=0x%x, lba_low=0x%x, size=%" + PRIuGRUB_SIZE "\n", + parms->taskfile.lba_high, + parms->taskfile.lba_mid, + parms->taskfile.lba_low, parms->size); + + /* Set registers. */ + grub_pata_regset (dev, GRUB_ATA_REG_DISK, (dev->device << 4) + | (parms->taskfile.disk & 0xef)); + if (grub_pata_check_ready (dev, spinup)) + return grub_errno; + + for (i = GRUB_ATA_REG_SECTORS; i <= GRUB_ATA_REG_LBAHIGH; i++) + grub_pata_regset (dev, i, + parms->taskfile.raw[7 + (i - GRUB_ATA_REG_SECTORS)]); + for (i = GRUB_ATA_REG_FEATURES; i <= GRUB_ATA_REG_LBAHIGH; i++) + grub_pata_regset (dev, i, parms->taskfile.raw[i - GRUB_ATA_REG_FEATURES]); + + /* Start command. */ + grub_pata_regset (dev, GRUB_ATA_REG_CMD, parms->taskfile.cmd); + + /* Wait for !BSY. */ + if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA)) + return grub_errno; + + /* Check status. */ + grub_int8_t sts = grub_pata_regget (dev, GRUB_ATA_REG_STATUS); + grub_dprintf ("pata", "status=0x%x\n", sts); + + if (parms->cmdsize) + { + grub_uint8_t irs; + /* Wait for !BSY. */ + if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA)) + return grub_errno; + + irs = grub_pata_regget (dev, GRUB_ATAPI_REG_IREASON); + /* OK if DRQ is asserted and interrupt reason is as expected. */ + if (!((sts & GRUB_ATA_STATUS_DRQ) + && (irs & GRUB_ATAPI_IREASON_MASK) == GRUB_ATAPI_IREASON_CMD_OUT)) + return grub_error (GRUB_ERR_READ_ERROR, "ATAPI protocol error"); + /* Write the packet. */ + grub_pata_pio_write (dev, parms->cmd, parms->cmdsize); + } + + /* Transfer data. */ + while (nread < parms->size + && (sts & (GRUB_ATA_STATUS_DRQ | GRUB_ATA_STATUS_ERR)) + == GRUB_ATA_STATUS_DRQ) + { + unsigned cnt; + + /* Wait for !BSY. */ + if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA)) + return grub_errno; + + if (parms->cmdsize) + { + if ((grub_pata_regget (dev, GRUB_ATAPI_REG_IREASON) + & GRUB_ATAPI_IREASON_MASK) != GRUB_ATAPI_IREASON_DATA_IN) + return grub_error (GRUB_ERR_READ_ERROR, "ATAPI protocol error"); + + cnt = grub_pata_regget (dev, GRUB_ATAPI_REG_CNTHIGH) << 8 + | grub_pata_regget (dev, GRUB_ATAPI_REG_CNTLOW); + grub_dprintf("pata", "DRQ count=%u\n", cnt); + + /* Count of last transfer may be uneven. */ + if (! (0 < cnt && cnt <= parms->size - nread + && (! (cnt & 1) || cnt == parms->size - nread))) + return grub_error (GRUB_ERR_READ_ERROR, + "invalid ATAPI transfer count"); + } + else + cnt = GRUB_DISK_SECTOR_SIZE; + if (cnt > parms->size - nread) + cnt = parms->size - nread; + + if (parms->write) + grub_pata_pio_write (dev, (char *) parms->buffer + nread, cnt); + else + grub_pata_pio_read (dev, (char *) parms->buffer + nread, cnt); + + nread += cnt; + } + if (parms->write) + { + /* Check for write error. */ + if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA)) + return grub_errno; + + if (grub_pata_regget (dev, GRUB_ATA_REG_STATUS) + & (GRUB_ATA_STATUS_DRQ | GRUB_ATA_STATUS_ERR)) + return grub_error (GRUB_ERR_WRITE_ERROR, "ATA write error"); + } + parms->size = nread; + + /* Wait for !BSY. */ + if (grub_pata_wait_not_busy (dev, GRUB_ATA_TOUT_DATA)) + return grub_errno; + + /* Return registers. */ + for (i = GRUB_ATA_REG_ERROR; i <= GRUB_ATA_REG_STATUS; i++) + parms->taskfile.raw[i - GRUB_ATA_REG_FEATURES] = grub_pata_regget (dev, i); + + grub_dprintf ("pata", "status=0x%x, error=0x%x, sectors=0x%x\n", + parms->taskfile.status, + parms->taskfile.error, + parms->taskfile.sectors); + + if (parms->taskfile.status + & (GRUB_ATA_STATUS_DRQ | GRUB_ATA_STATUS_ERR)) + return grub_error (GRUB_ERR_READ_ERROR, "PATA passthrough failed"); + + return GRUB_ERR_NONE; +} + +static grub_err_t +check_device (struct grub_pata_device *dev) +{ + grub_pata_regset (dev, GRUB_ATA_REG_DISK, dev->device << 4); + grub_pata_wait (); + + /* Try to detect if the port is in use by writing to it, + waiting for a while and reading it again. If the value + was preserved, there is a device connected. */ + grub_pata_regset (dev, GRUB_ATA_REG_SECTORS, 0x5A); + grub_pata_wait (); + grub_uint8_t sec = grub_pata_regget (dev, GRUB_ATA_REG_SECTORS); + grub_dprintf ("ata", "sectors=0x%x\n", sec); + if (sec != 0x5A) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no device connected"); + + /* The above test may detect a second (slave) device + connected to a SATA controller which supports only one + (master) device. It is not safe to use the status register + READY bit to check for controller channel existence. Some + ATAPI commands (RESET, DIAGNOSTIC) may clear this bit. */ + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_pata_device_initialize (int port, int device, int addr) +{ + struct grub_pata_device *dev; + struct grub_pata_device **devp; + grub_err_t err; + + grub_dprintf ("pata", "detecting device %d,%d (0x%x)\n", + port, device, addr); + + dev = grub_malloc (sizeof(*dev)); + if (! dev) + return grub_errno; + + /* Setup the device information. */ + dev->port = port; + dev->device = device; + dev->ioaddress = addr + GRUB_MACHINE_PCI_IO_BASE; + dev->present = 1; + dev->next = NULL; + + /* Register the device. */ + for (devp = &grub_pata_devices; *devp; devp = &(*devp)->next); + *devp = dev; + + err = check_device (dev); + if (err) + grub_print_error (); + + return 0; +} + +#ifndef GRUB_MACHINE_MIPS_QEMU_MIPS +static int +grub_pata_pciinit (grub_pci_device_t dev, + grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + static int compat_use[2] = { 0 }; + grub_pci_address_t addr; + grub_uint32_t class; + grub_uint32_t bar1; + grub_uint32_t bar2; + int rega; + int i; + static int controller = 0; + int cs5536 = 0; + int nports = 2; + + /* Read class. */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + class = grub_pci_read (addr); + + /* AMD CS5536 Southbridge. */ + if (pciid == GRUB_CS5536_PCIID) + { + cs5536 = 1; + nports = 1; + } + + /* Check if this class ID matches that of a PCI IDE Controller. */ + if (!cs5536 && (class >> 16 != 0x0101)) + return 0; + + for (i = 0; i < nports; i++) + { + /* Set to 0 when the channel operated in compatibility mode. */ + int compat; + + /* We don't support non-compatibility mode for CS5536. */ + if (cs5536) + compat = 0; + else + compat = (class >> (8 + 2 * i)) & 1; + + rega = 0; + + /* If the channel is in compatibility mode, just assign the + default registers. */ + if (compat == 0 && !compat_use[i]) + { + rega = grub_pata_ioaddress[i]; + compat_use[i] = 1; + } + else if (compat) + { + /* Read the BARs, which either contain a mmapped IO address + or the IO port address. */ + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESSES + + sizeof (grub_uint64_t) * i); + bar1 = grub_pci_read (addr); + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESSES + + sizeof (grub_uint64_t) * i + + sizeof (grub_uint32_t)); + bar2 = grub_pci_read (addr); + + /* Check if the BARs describe an IO region. */ + if ((bar1 & 1) && (bar2 & 1) && (bar1 & ~3)) + { + rega = bar1 & ~3; + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word (addr, grub_pci_read_word (addr) + | GRUB_PCI_COMMAND_IO_ENABLED + | GRUB_PCI_COMMAND_MEM_ENABLED + | GRUB_PCI_COMMAND_BUS_MASTER); + + } + } + + grub_dprintf ("pata", + "PCI dev (%d,%d,%d) compat=%d rega=0x%x\n", + grub_pci_get_bus (dev), grub_pci_get_device (dev), + grub_pci_get_function (dev), compat, rega); + + if (rega) + { + grub_errno = GRUB_ERR_NONE; + grub_pata_device_initialize (controller * 2 + i, 0, rega); + + /* Most errors raised by grub_ata_device_initialize() are harmless. + They just indicate this particular drive is not responding, most + likely because it doesn't exist. We might want to ignore specific + error types here, instead of printing them. */ + if (grub_errno) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + } + + grub_pata_device_initialize (controller * 2 + i, 1, rega); + + /* Likewise. */ + if (grub_errno) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + } + } + } + + controller++; + + return 0; +} + +static grub_err_t +grub_pata_initialize (void) +{ + grub_pci_iterate (grub_pata_pciinit, NULL); + return 0; +} +#else +static grub_err_t +grub_pata_initialize (void) +{ + int i; + for (i = 0; i < 2; i++) + { + grub_pata_device_initialize (i, 0, grub_pata_ioaddress[i]); + grub_pata_device_initialize (i, 1, grub_pata_ioaddress[i]); + } + return 0; +} +#endif + +static grub_err_t +grub_pata_open (int id, int devnum, struct grub_ata *ata) +{ + struct grub_pata_device *dev; + struct grub_pata_device *devfnd = 0; + grub_err_t err; + + if (id != GRUB_SCSI_SUBSYSTEM_PATA) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a PATA device"); + + for (dev = grub_pata_devices; dev; dev = dev->next) + { + if (dev->port * 2 + dev->device == devnum) + { + devfnd = dev; + break; + } + } + + grub_dprintf ("pata", "opening PATA dev `ata%d'\n", devnum); + + if (! devfnd) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such PATA device"); + + err = check_device (devfnd); + if (err) + return err; + + ata->data = devfnd; + ata->dma = 0; + ata->maxbuffer = 256 * 512; + ata->present = &devfnd->present; + + return GRUB_ERR_NONE; +} + +static int +grub_pata_iterate (grub_ata_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_pata_device *dev; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + for (dev = grub_pata_devices; dev; dev = dev->next) + if (hook (GRUB_SCSI_SUBSYSTEM_PATA, dev->port * 2 + dev->device, + hook_data)) + return 1; + + return 0; +} + + +static struct grub_ata_dev grub_pata_dev = + { + .iterate = grub_pata_iterate, + .open = grub_pata_open, + .readwrite = grub_pata_readwrite, + }; + + + + +GRUB_MOD_INIT(ata_pthru) +{ + grub_stop_disk_firmware (); + + /* ATA initialization. */ + grub_pata_initialize (); + + grub_ata_dev_register (&grub_pata_dev); +} + +GRUB_MOD_FINI(ata_pthru) +{ + grub_ata_dev_unregister (&grub_pata_dev); +} diff --git a/grub-core/disk/raid5_recover.c b/grub-core/disk/raid5_recover.c new file mode 100644 index 000000000..4ace9172e --- /dev/null +++ b/grub-core/disk/raid5_recover.c @@ -0,0 +1,76 @@ +/* raid5_recover.c - module to recover from faulty RAID4/5 arrays. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_raid5_recover (struct grub_diskfilter_segment *array, int disknr, + char *buf, grub_disk_addr_t sector, grub_size_t size) +{ + char *buf2; + int i; + + size <<= GRUB_DISK_SECTOR_BITS; + buf2 = grub_malloc (size); + if (!buf2) + return grub_errno; + + grub_memset (buf, 0, size); + + for (i = 0; i < (int) array->node_count; i++) + { + grub_err_t err; + + if (i == disknr) + continue; + + err = grub_diskfilter_read_node (&array->nodes[i], sector, + size >> GRUB_DISK_SECTOR_BITS, buf2); + + if (err) + { + grub_free (buf2); + return err; + } + + grub_crypto_xor (buf, buf, buf2, size); + } + + grub_free (buf2); + + return GRUB_ERR_NONE; +} + +GRUB_MOD_INIT(raid5rec) +{ + grub_raid5_recover_func = grub_raid5_recover; +} + +GRUB_MOD_FINI(raid5rec) +{ + grub_raid5_recover_func = 0; +} diff --git a/grub-core/disk/raid6_recover.c b/grub-core/disk/raid6_recover.c new file mode 100644 index 000000000..aa674f6ca --- /dev/null +++ b/grub-core/disk/raid6_recover.c @@ -0,0 +1,202 @@ +/* raid6_recover.c - module to recover from faulty RAID6 arrays. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* x**y. */ +static grub_uint8_t powx[255 * 2]; +/* Such an s that x**s = y */ +static unsigned powx_inv[256]; +static const grub_uint8_t poly = 0x1d; + +static void +grub_raid_block_mulx (unsigned mul, char *buf, grub_size_t size) +{ + grub_size_t i; + grub_uint8_t *p; + + p = (grub_uint8_t *) buf; + for (i = 0; i < size; i++, p++) + if (*p) + *p = powx[mul + powx_inv[*p]]; +} + +static void +grub_raid6_init_table (void) +{ + unsigned i; + + grub_uint8_t cur = 1; + for (i = 0; i < 255; i++) + { + powx[i] = cur; + powx[i + 255] = cur; + powx_inv[cur] = i; + if (cur & 0x80) + cur = (cur << 1) ^ poly; + else + cur <<= 1; + } +} + +static unsigned +mod_255 (unsigned x) +{ + while (x > 0xff) + x = (x >> 8) + (x & 0xff); + if (x == 0xff) + return 0; + return x; +} + +static grub_err_t +grub_raid6_recover (struct grub_diskfilter_segment *array, int disknr, int p, + char *buf, grub_disk_addr_t sector, grub_size_t size) +{ + int i, q, pos; + int bad1 = -1, bad2 = -1; + char *pbuf = 0, *qbuf = 0; + + size <<= GRUB_DISK_SECTOR_BITS; + pbuf = grub_zalloc (size); + if (!pbuf) + goto quit; + + qbuf = grub_zalloc (size); + if (!qbuf) + goto quit; + + q = p + 1; + if (q == (int) array->node_count) + q = 0; + + pos = q + 1; + if (pos == (int) array->node_count) + pos = 0; + + for (i = 0; i < (int) array->node_count - 2; i++) + { + int c; + if (array->layout & GRUB_RAID_LAYOUT_MUL_FROM_POS) + c = pos; + else + c = i; + if (pos == disknr) + bad1 = c; + else + { + if (! grub_diskfilter_read_node (&array->nodes[pos], sector, + size >> GRUB_DISK_SECTOR_BITS, buf)) + { + grub_crypto_xor (pbuf, pbuf, buf, size); + grub_raid_block_mulx (c, buf, size); + grub_crypto_xor (qbuf, qbuf, buf, size); + } + else + { + /* Too many bad devices */ + if (bad2 >= 0) + goto quit; + + bad2 = c; + grub_errno = GRUB_ERR_NONE; + } + } + + pos++; + if (pos == (int) array->node_count) + pos = 0; + } + + /* Invalid disknr or p */ + if (bad1 < 0) + goto quit; + + if (bad2 < 0) + { + /* One bad device */ + if ((! grub_diskfilter_read_node (&array->nodes[p], sector, + size >> GRUB_DISK_SECTOR_BITS, buf))) + { + grub_crypto_xor (buf, buf, pbuf, size); + goto quit; + } + + grub_errno = GRUB_ERR_NONE; + if (grub_diskfilter_read_node (&array->nodes[q], sector, + size >> GRUB_DISK_SECTOR_BITS, buf)) + goto quit; + + grub_crypto_xor (buf, buf, qbuf, size); + grub_raid_block_mulx (255 - bad1, buf, + size); + } + else + { + /* Two bad devices */ + unsigned c; + + if (grub_diskfilter_read_node (&array->nodes[p], sector, + size >> GRUB_DISK_SECTOR_BITS, buf)) + goto quit; + + grub_crypto_xor (pbuf, pbuf, buf, size); + + if (grub_diskfilter_read_node (&array->nodes[q], sector, + size >> GRUB_DISK_SECTOR_BITS, buf)) + goto quit; + + grub_crypto_xor (qbuf, qbuf, buf, size); + + c = mod_255((255 ^ bad1) + + (255 ^ powx_inv[(powx[bad2 + (bad1 ^ 255)] ^ 1)])); + grub_raid_block_mulx (c, qbuf, size); + + c = mod_255((unsigned) bad2 + c); + grub_raid_block_mulx (c, pbuf, size); + + grub_crypto_xor (pbuf, pbuf, qbuf, size); + grub_memcpy (buf, pbuf, size); + } + +quit: + grub_free (pbuf); + grub_free (qbuf); + + return grub_errno; +} + +GRUB_MOD_INIT(raid6rec) +{ + grub_raid6_init_table (); + grub_raid6_recover_func = grub_raid6_recover; +} + +GRUB_MOD_FINI(raid6rec) +{ + grub_raid6_recover_func = 0; +} diff --git a/grub-core/disk/scsi.c b/grub-core/disk/scsi.c new file mode 100644 index 000000000..4c6923f8b --- /dev/null +++ b/grub-core/disk/scsi.c @@ -0,0 +1,766 @@ +/* scsi.c - scsi support. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + + +static grub_scsi_dev_t grub_scsi_dev_list; + +const char grub_scsi_names[GRUB_SCSI_NUM_SUBSYSTEMS][5] = { + [GRUB_SCSI_SUBSYSTEM_USBMS] = "usb", + [GRUB_SCSI_SUBSYSTEM_PATA] = "ata", + [GRUB_SCSI_SUBSYSTEM_AHCI] = "ahci" +}; + +void +grub_scsi_dev_register (grub_scsi_dev_t dev) +{ + dev->next = grub_scsi_dev_list; + grub_scsi_dev_list = dev; +} + +void +grub_scsi_dev_unregister (grub_scsi_dev_t dev) +{ + grub_scsi_dev_t *p, q; + + for (p = &grub_scsi_dev_list, q = *p; q; p = &(q->next), q = q->next) + if (q == dev) + { + *p = q->next; + break; + } +} + + +/* Check result of previous operation. */ +static grub_err_t +grub_scsi_request_sense (grub_scsi_t scsi) +{ + struct grub_scsi_request_sense rs; + struct grub_scsi_request_sense_data rsd; + grub_err_t err; + + rs.opcode = grub_scsi_cmd_request_sense; + rs.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + rs.reserved1 = 0; + rs.reserved2 = 0; + rs.alloc_length = 0x12; /* XXX: Hardcoded for now */ + rs.control = 0; + grub_memset (rs.pad, 0, sizeof(rs.pad)); + + err = scsi->dev->read (scsi, sizeof (rs), (char *) &rs, + sizeof (rsd), (char *) &rsd); + if (err) + return err; + + return GRUB_ERR_NONE; +} +/* Self commenting... */ +static grub_err_t +grub_scsi_test_unit_ready (grub_scsi_t scsi) +{ + struct grub_scsi_test_unit_ready tur; + grub_err_t err; + grub_err_t err_sense; + + tur.opcode = grub_scsi_cmd_test_unit_ready; + tur.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + tur.reserved1 = 0; + tur.reserved2 = 0; + tur.reserved3 = 0; + tur.control = 0; + grub_memset (tur.pad, 0, sizeof(tur.pad)); + + err = scsi->dev->read (scsi, sizeof (tur), (char *) &tur, + 0, NULL); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + if (err) + return err; + + return GRUB_ERR_NONE; +} + +/* Determine if the device is removable and the type of the device + SCSI. */ +static grub_err_t +grub_scsi_inquiry (grub_scsi_t scsi) +{ + struct grub_scsi_inquiry iq; + struct grub_scsi_inquiry_data iqd; + grub_err_t err; + grub_err_t err_sense; + + iq.opcode = grub_scsi_cmd_inquiry; + iq.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + iq.page = 0; + iq.reserved = 0; + iq.alloc_length = 0x24; /* XXX: Hardcoded for now */ + iq.control = 0; + grub_memset (iq.pad, 0, sizeof(iq.pad)); + + err = scsi->dev->read (scsi, sizeof (iq), (char *) &iq, + sizeof (iqd), (char *) &iqd); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + if (err) + return err; + + scsi->devtype = iqd.devtype & GRUB_SCSI_DEVTYPE_MASK; + scsi->removable = iqd.rmb >> GRUB_SCSI_REMOVABLE_BIT; + + return GRUB_ERR_NONE; +} + +/* Read the capacity and block size of SCSI. */ +static grub_err_t +grub_scsi_read_capacity10 (grub_scsi_t scsi) +{ + struct grub_scsi_read_capacity10 rc; + struct grub_scsi_read_capacity10_data rcd; + grub_err_t err; + grub_err_t err_sense; + + rc.opcode = grub_scsi_cmd_read_capacity10; + rc.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + rc.logical_block_addr = 0; + rc.reserved1 = 0; + rc.reserved2 = 0; + rc.PMI = 0; + rc.control = 0; + rc.pad = 0; + + err = scsi->dev->read (scsi, sizeof (rc), (char *) &rc, + sizeof (rcd), (char *) &rcd); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; +/* err_sense is ignored for now and Request Sense Data also... */ + + if (err) + return err; + + scsi->last_block = grub_be_to_cpu32 (rcd.last_block); + scsi->blocksize = grub_be_to_cpu32 (rcd.blocksize); + + return GRUB_ERR_NONE; +} + +/* Read the capacity and block size of SCSI. */ +static grub_err_t +grub_scsi_read_capacity16 (grub_scsi_t scsi) +{ + struct grub_scsi_read_capacity16 rc; + struct grub_scsi_read_capacity16_data rcd; + grub_err_t err; + grub_err_t err_sense; + + rc.opcode = grub_scsi_cmd_read_capacity16; + rc.lun = (scsi->lun << GRUB_SCSI_LUN_SHIFT) | 0x10; + rc.logical_block_addr = 0; + rc.alloc_len = grub_cpu_to_be32_compile_time (sizeof (rcd)); + rc.PMI = 0; + rc.control = 0; + + err = scsi->dev->read (scsi, sizeof (rc), (char *) &rc, + sizeof (rcd), (char *) &rcd); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; +/* err_sense is ignored for now and Request Sense Data also... */ + + if (err) + return err; + + scsi->last_block = grub_be_to_cpu64 (rcd.last_block); + scsi->blocksize = grub_be_to_cpu32 (rcd.blocksize); + + return GRUB_ERR_NONE; +} + +/* Send a SCSI request for DISK: read SIZE sectors starting with + sector SECTOR to BUF. */ +static grub_err_t +grub_scsi_read10 (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_scsi_t scsi; + struct grub_scsi_read10 rd; + grub_err_t err; + grub_err_t err_sense; + + scsi = disk->data; + + rd.opcode = grub_scsi_cmd_read10; + rd.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + rd.lba = grub_cpu_to_be32 (sector); + rd.reserved = 0; + rd.size = grub_cpu_to_be16 (size); + rd.reserved2 = 0; + rd.pad = 0; + + err = scsi->dev->read (scsi, sizeof (rd), (char *) &rd, size * scsi->blocksize, buf); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + return err; +} + +/* Send a SCSI request for DISK: read SIZE sectors starting with + sector SECTOR to BUF. */ +static grub_err_t +grub_scsi_read12 (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_scsi_t scsi; + struct grub_scsi_read12 rd; + grub_err_t err; + grub_err_t err_sense; + + scsi = disk->data; + + rd.opcode = grub_scsi_cmd_read12; + rd.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + rd.lba = grub_cpu_to_be32 (sector); + rd.size = grub_cpu_to_be32 (size); + rd.reserved = 0; + rd.control = 0; + + err = scsi->dev->read (scsi, sizeof (rd), (char *) &rd, size * scsi->blocksize, buf); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + return err; +} + +/* Send a SCSI request for DISK: read SIZE sectors starting with + sector SECTOR to BUF. */ +static grub_err_t +grub_scsi_read16 (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_scsi_t scsi; + struct grub_scsi_read16 rd; + grub_err_t err; + grub_err_t err_sense; + + scsi = disk->data; + + rd.opcode = grub_scsi_cmd_read16; + rd.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + rd.lba = grub_cpu_to_be64 (sector); + rd.size = grub_cpu_to_be32 (size); + rd.reserved = 0; + rd.control = 0; + + err = scsi->dev->read (scsi, sizeof (rd), (char *) &rd, size * scsi->blocksize, buf); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + return err; +} + +/* Send a SCSI request for DISK: write the data stored in BUF to SIZE + sectors starting with SECTOR. */ +static grub_err_t +grub_scsi_write10 (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + grub_scsi_t scsi; + struct grub_scsi_write10 wr; + grub_err_t err; + grub_err_t err_sense; + + scsi = disk->data; + + wr.opcode = grub_scsi_cmd_write10; + wr.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + wr.lba = grub_cpu_to_be32 (sector); + wr.reserved = 0; + wr.size = grub_cpu_to_be16 (size); + wr.reserved2 = 0; + wr.pad = 0; + + err = scsi->dev->write (scsi, sizeof (wr), (char *) &wr, size * scsi->blocksize, buf); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + return err; +} + +#if 0 + +/* Send a SCSI request for DISK: write the data stored in BUF to SIZE + sectors starting with SECTOR. */ +static grub_err_t +grub_scsi_write12 (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_scsi_t scsi; + struct grub_scsi_write12 wr; + grub_err_t err; + grub_err_t err_sense; + + scsi = disk->data; + + wr.opcode = grub_scsi_cmd_write12; + wr.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + wr.lba = grub_cpu_to_be32 (sector); + wr.size = grub_cpu_to_be32 (size); + wr.reserved = 0; + wr.control = 0; + + err = scsi->dev->write (scsi, sizeof (wr), (char *) &wr, size * scsi->blocksize, buf); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + return err; +} +#endif + +/* Send a SCSI request for DISK: write the data stored in BUF to SIZE + sectors starting with SECTOR. */ +static grub_err_t +grub_scsi_write16 (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + grub_scsi_t scsi; + struct grub_scsi_write16 wr; + grub_err_t err; + grub_err_t err_sense; + + scsi = disk->data; + + wr.opcode = grub_scsi_cmd_write16; + wr.lun = scsi->lun << GRUB_SCSI_LUN_SHIFT; + wr.lba = grub_cpu_to_be64 (sector); + wr.size = grub_cpu_to_be32 (size); + wr.reserved = 0; + wr.control = 0; + + err = scsi->dev->write (scsi, sizeof (wr), (char *) &wr, size * scsi->blocksize, buf); + + /* Each SCSI command should be followed by Request Sense. + If not so, many devices STALLs or definitely freezes. */ + err_sense = grub_scsi_request_sense (scsi); + if (err_sense != GRUB_ERR_NONE) + grub_errno = err; + /* err_sense is ignored for now and Request Sense Data also... */ + + return err; +} + + + +/* Context for grub_scsi_iterate. */ +struct grub_scsi_iterate_ctx +{ + grub_disk_dev_iterate_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_scsi_iterate. */ +static int +scsi_iterate (int id, int bus, int luns, void *data) +{ + struct grub_scsi_iterate_ctx *ctx = data; + int i; + + /* In case of a single LUN, just return `usbX'. */ + if (luns == 1) + { + char *sname; + int ret; + sname = grub_xasprintf ("%s%d", grub_scsi_names[id], bus); + if (!sname) + return 1; + ret = ctx->hook (sname, ctx->hook_data); + grub_free (sname); + return ret; + } + + /* In case of multiple LUNs, every LUN will get a prefix to + distinguish it. */ + for (i = 0; i < luns; i++) + { + char *sname; + int ret; + sname = grub_xasprintf ("%s%d%c", grub_scsi_names[id], bus, 'a' + i); + if (!sname) + return 1; + ret = ctx->hook (sname, ctx->hook_data); + grub_free (sname); + if (ret) + return 1; + } + return 0; +} + +static int +grub_scsi_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + struct grub_scsi_iterate_ctx ctx = { hook, hook_data }; + grub_scsi_dev_t p; + + for (p = grub_scsi_dev_list; p; p = p->next) + if (p->iterate && (p->iterate) (scsi_iterate, &ctx, pull)) + return 1; + + return 0; +} + +static grub_err_t +grub_scsi_open (const char *name, grub_disk_t disk) +{ + grub_scsi_dev_t p; + grub_scsi_t scsi; + grub_err_t err; + int lun, bus; + grub_uint64_t maxtime; + const char *nameend; + unsigned id; + + nameend = name + grub_strlen (name) - 1; + /* Try to detect a LUN ('a'-'z'), otherwise just use the first + LUN. */ + if (nameend >= name && *nameend >= 'a' && *nameend <= 'z') + { + lun = *nameend - 'a'; + nameend--; + } + else + lun = 0; + + while (nameend >= name && grub_isdigit (*nameend)) + nameend--; + + if (!nameend[1] || !grub_isdigit (nameend[1])) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a SCSI disk"); + + bus = grub_strtoul (nameend + 1, 0, 0); + + scsi = grub_malloc (sizeof (*scsi)); + if (! scsi) + return grub_errno; + + for (id = 0; id < ARRAY_SIZE (grub_scsi_names); id++) + if (grub_strncmp (grub_scsi_names[id], name, nameend - name) == 0) + break; + + if (id == ARRAY_SIZE (grub_scsi_names)) + { + grub_free (scsi); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a SCSI disk"); + } + + for (p = grub_scsi_dev_list; p; p = p->next) + { + if (p->open (id, bus, scsi)) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + + disk->id = grub_make_scsi_id (id, bus, lun); + disk->data = scsi; + scsi->dev = p; + scsi->lun = lun; + scsi->bus = bus; + + grub_dprintf ("scsi", "dev opened\n"); + + err = grub_scsi_inquiry (scsi); + if (err) + { + grub_free (scsi); + grub_dprintf ("scsi", "inquiry failed\n"); + return err; + } + + grub_dprintf ("scsi", "inquiry: devtype=0x%02x removable=%d\n", + scsi->devtype, scsi->removable); + + /* Try to be conservative about the device types + supported. */ + if (scsi->devtype != grub_scsi_devtype_direct + && scsi->devtype != grub_scsi_devtype_cdrom) + { + grub_free (scsi); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "unknown SCSI device"); + } + + /* According to USB MS tests specification, issue Test Unit Ready + * until OK */ + maxtime = grub_get_time_ms () + 5000; /* It is safer value */ + do + { + /* Timeout is necessary - for example in case when we have + * universal card reader with more LUNs and we have only + * one card inserted (or none), so only one LUN (or none) + * will be ready - and we want not to hang... */ + if (grub_get_time_ms () > maxtime) + { + err = GRUB_ERR_READ_ERROR; + grub_free (scsi); + grub_dprintf ("scsi", "LUN is not ready - timeout\n"); + return err; + } + err = grub_scsi_test_unit_ready (scsi); + } + while (err == GRUB_ERR_READ_ERROR); + /* Reset grub_errno ! + * It is set to some error code in loop before... */ + grub_errno = GRUB_ERR_NONE; + + /* Read capacity of media */ + err = grub_scsi_read_capacity10 (scsi); + if (err) + { + grub_free (scsi); + grub_dprintf ("scsi", "READ CAPACITY10 failed\n"); + return err; + } + + if (scsi->last_block == 0xffffffff) + { + err = grub_scsi_read_capacity16 (scsi); + if (err) + { + grub_free (scsi); + grub_dprintf ("scsi", "READ CAPACITY16 failed\n"); + return err; + } + } + + disk->total_sectors = scsi->last_block + 1; + /* PATA doesn't support more than 32K reads. + Not sure about AHCI and USB. If it's confirmed that either of + them can do bigger reads reliably this value can be moved to 'scsi' + structure. */ + disk->max_agglomerate = 32768 >> (GRUB_DISK_SECTOR_BITS + + GRUB_DISK_CACHE_BITS); + + if (scsi->blocksize & (scsi->blocksize - 1) || !scsi->blocksize) + { + grub_error (GRUB_ERR_IO, "invalid sector size %d", + scsi->blocksize); + grub_free (scsi); + return grub_errno; + } + for (disk->log_sector_size = 0; + (1U << disk->log_sector_size) < scsi->blocksize; + disk->log_sector_size++); + + grub_dprintf ("scsi", "last_block=%" PRIuGRUB_UINT64_T ", blocksize=%u\n", + scsi->last_block, scsi->blocksize); + grub_dprintf ("scsi", "Disk total sectors = %llu\n", + (unsigned long long) disk->total_sectors); + + return GRUB_ERR_NONE; + } + + grub_free (scsi); + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a SCSI disk"); +} + +static void +grub_scsi_close (grub_disk_t disk) +{ + grub_scsi_t scsi; + + scsi = disk->data; + if (scsi->dev->close) + scsi->dev->close (scsi); + grub_free (scsi); +} + +static grub_err_t +grub_scsi_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_scsi_t scsi; + + scsi = disk->data; + + grub_err_t err; + /* Depending on the type, select a read function. */ + switch (scsi->devtype) + { + case grub_scsi_devtype_direct: + if (sector >> 32) + err = grub_scsi_read16 (disk, sector, size, buf); + else + err = grub_scsi_read10 (disk, sector, size, buf); + if (err) + return err; + break; + + case grub_scsi_devtype_cdrom: + if (sector >> 32) + err = grub_scsi_read16 (disk, sector, size, buf); + else + err = grub_scsi_read12 (disk, sector, size, buf); + if (err) + return err; + break; + } + + return GRUB_ERR_NONE; + +#if 0 /* Workaround - it works - but very slowly, from some reason + * unknown to me (specially on OHCI). Do not use it. */ + /* Split transfer requests to device sector size because */ + /* some devices are not able to transfer more than 512-1024 bytes */ + grub_err_t err = GRUB_ERR_NONE; + + for ( ; size; size--) + { + /* Depending on the type, select a read function. */ + switch (scsi->devtype) + { + case grub_scsi_devtype_direct: + err = grub_scsi_read10 (disk, sector, 1, buf); + break; + + case grub_scsi_devtype_cdrom: + err = grub_scsi_read12 (disk, sector, 1, buf); + break; + + default: /* This should not happen */ + return GRUB_ERR_READ_ERROR; + } + if (err) + return err; + sector++; + buf += scsi->blocksize; + } + + return err; +#endif +} + +static grub_err_t +grub_scsi_write (grub_disk_t disk, + grub_disk_addr_t sector, + grub_size_t size, + const char *buf) +{ + grub_scsi_t scsi; + + scsi = disk->data; + + if (scsi->devtype == grub_scsi_devtype_cdrom) + return grub_error (GRUB_ERR_IO, N_("cannot write to CD-ROM")); + + grub_err_t err; + /* Depending on the type, select a read function. */ + switch (scsi->devtype) + { + case grub_scsi_devtype_direct: + if (sector >> 32) + err = grub_scsi_write16 (disk, sector, size, buf); + else + err = grub_scsi_write10 (disk, sector, size, buf); + if (err) + return err; + break; + } + + return GRUB_ERR_NONE; +} + + +static struct grub_disk_dev grub_scsi_dev = + { + .name = "scsi", + .id = GRUB_DISK_DEVICE_SCSI_ID, + .iterate = grub_scsi_iterate, + .open = grub_scsi_open, + .close = grub_scsi_close, + .read = grub_scsi_read, + .write = grub_scsi_write, + .next = 0 + }; + +GRUB_MOD_INIT(scsi) +{ + grub_disk_dev_register (&grub_scsi_dev); +} + +GRUB_MOD_FINI(scsi) +{ + grub_disk_dev_unregister (&grub_scsi_dev); +} diff --git a/grub-core/disk/uboot/ubootdisk.c b/grub-core/disk/uboot/ubootdisk.c new file mode 100644 index 000000000..a5ce07a99 --- /dev/null +++ b/grub-core/disk/uboot/ubootdisk.c @@ -0,0 +1,297 @@ +/* ubootdisk.c - disk subsystem support for U-Boot platforms */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static struct ubootdisk_data *hd_devices; +static int hd_num; +static int hd_max; + +/* + * grub_ubootdisk_register(): + * Called for each disk device enumerated as part of U-Boot initialization + * code. + */ +grub_err_t +grub_ubootdisk_register (struct device_info *newdev) +{ + struct ubootdisk_data *d; + +#define STOR_TYPE(x) ((x) & 0x0ff0) + switch (STOR_TYPE (newdev->type)) + { + case DT_STOR_IDE: + case DT_STOR_SATA: + case DT_STOR_SCSI: + case DT_STOR_MMC: + case DT_STOR_USB: + /* hd */ + if (hd_num == hd_max) + { + int new_num; + new_num = (hd_max ? hd_max * 2 : 1); + d = grub_realloc(hd_devices, + sizeof (struct ubootdisk_data) * new_num); + if (!d) + return grub_errno; + hd_devices = d; + hd_max = new_num; + } + + d = &hd_devices[hd_num]; + hd_num++; + break; + default: + return GRUB_ERR_BAD_DEVICE; + break; + } + + d->dev = newdev; + d->cookie = newdev->cookie; + d->opencount = 0; + + return 0; +} + +/* + * uboot_disk_iterate(): + * Iterator over enumerated disk devices. + */ +static int +uboot_disk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + char buf[16]; + int count; + + switch (pull) + { + case GRUB_DISK_PULL_NONE: + /* "hd" - built-in mass-storage */ + for (count = 0 ; count < hd_num; count++) + { + grub_snprintf (buf, sizeof (buf) - 1, "hd%d", count); + grub_dprintf ("ubootdisk", "iterating %s\n", buf); + if (hook (buf, hook_data)) + return 1; + } + break; + default: + return 0; + } + + return 0; +} + +/* Helper function for uboot_disk_open. */ +static struct ubootdisk_data * +get_hd_device (int num) +{ + if (num < hd_num) + return &hd_devices[num]; + + return NULL; +} + +/* + * uboot_disk_open(): + * Opens a disk device already enumerated. + */ +static grub_err_t +uboot_disk_open (const char *name, struct grub_disk *disk) +{ + struct ubootdisk_data *d; + struct device_info *devinfo; + int num; + int retval; + + grub_dprintf ("ubootdisk", "Opening '%s'\n", name); + + num = grub_strtoul (name + 2, 0, 10); + if (grub_errno != GRUB_ERR_NONE) + { + grub_dprintf ("ubootdisk", "Opening '%s' failed, invalid number\n", + name); + goto fail; + } + + if (name[1] != 'd') + { + grub_dprintf ("ubootdisk", "Opening '%s' failed, invalid name\n", name); + goto fail; + } + + switch (name[0]) + { + case 'h': + d = get_hd_device (num); + break; + default: + goto fail; + } + + if (!d) + goto fail; + + /* + * Subsystems may call open on the same device recursively - but U-Boot + * does not deal with this. So simply keep track of number of calls and + * return success if already open. + */ + if (d->opencount > 0) + { + grub_dprintf ("ubootdisk", "(%s) already open\n", disk->name); + d->opencount++; + retval = 0; + } + else + { + retval = grub_uboot_dev_open (d->dev); + if (retval != 0) + goto fail; + d->opencount = 1; + } + + grub_dprintf ("ubootdisk", "cookie: 0x%08x\n", (grub_addr_t) d->cookie); + disk->id = (grub_addr_t) d->cookie; + + devinfo = d->dev; + + d->block_size = devinfo->di_stor.block_size; + if (d->block_size == 0) + return grub_error (GRUB_ERR_IO, "no block size"); + + for (disk->log_sector_size = 0; + (1U << disk->log_sector_size) < d->block_size; + disk->log_sector_size++); + + grub_dprintf ("ubootdisk", "(%s) blocksize=%d, log_sector_size=%d\n", + disk->name, d->block_size, disk->log_sector_size); + + if (devinfo->di_stor.block_count) + disk->total_sectors = devinfo->di_stor.block_count; + else + disk->total_sectors = GRUB_DISK_SIZE_UNKNOWN; + + disk->data = d; + + return GRUB_ERR_NONE; + +fail: + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such device"); +} + +static void +uboot_disk_close (struct grub_disk *disk) +{ + struct ubootdisk_data *d; + int retval; + + d = disk->data; + + /* + * In mirror of open function, keep track of number of calls to close and + * send on to U-Boot only when opencount would decrease to 0. + */ + if (d->opencount > 1) + { + grub_dprintf ("ubootdisk", "Closed (%s)\n", disk->name); + + d->opencount--; + } + else if (d->opencount == 1) + { + retval = grub_uboot_dev_close (d->dev); + d->opencount--; + grub_dprintf ("ubootdisk", "closed %s (%d)\n", disk->name, retval); + } + else + { + grub_dprintf ("ubootdisk", "device %s not open!\n", disk->name); + } +} + +/* + * uboot_disk_read(): + * Called from within disk subsystem to read a sequence of blocks into the + * disk cache. Maps directly on top of U-Boot API, only wrap in some error + * handling. + */ +static grub_err_t +uboot_disk_read (struct grub_disk *disk, + grub_disk_addr_t offset, grub_size_t numblocks, char *buf) +{ + struct ubootdisk_data *d; + grub_size_t real_size; + int retval; + + d = disk->data; + + retval = grub_uboot_dev_read (d->dev, buf, numblocks, offset, &real_size); + grub_dprintf ("ubootdisk", + "retval=%d, numblocks=%d, real_size=%llu, sector=%llu\n", + retval, numblocks, (grub_uint64_t) real_size, + (grub_uint64_t) offset); + if (retval != 0) + return grub_error (GRUB_ERR_IO, "U-Boot disk read error"); + + return GRUB_ERR_NONE; +} + +static grub_err_t +uboot_disk_write (struct grub_disk *disk __attribute__ ((unused)), + grub_disk_addr_t sector __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused)), + const char *buf __attribute__ ((unused))) +{ + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "attempt to write (not supported)"); +} + +static struct grub_disk_dev grub_ubootdisk_dev = { + .name = "ubootdisk", + .id = GRUB_DISK_DEVICE_UBOOTDISK_ID, + .iterate = uboot_disk_iterate, + .open = uboot_disk_open, + .close = uboot_disk_close, + .read = uboot_disk_read, + .write = uboot_disk_write, + .next = 0 +}; + +void +grub_ubootdisk_init (void) +{ + grub_disk_dev_register (&grub_ubootdisk_dev); +} + +void +grub_ubootdisk_fini (void) +{ + grub_disk_dev_unregister (&grub_ubootdisk_dev); +} diff --git a/grub-core/disk/usbms.c b/grub-core/disk/usbms.c new file mode 100644 index 000000000..380ca4c4c --- /dev/null +++ b/grub-core/disk/usbms.c @@ -0,0 +1,660 @@ +/* usbms.c - USB Mass Storage Support. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_USBMS_DIRECTION_BIT 7 + +/* Length of CBI command should be always 12 bytes */ +#define GRUB_USBMS_CBI_CMD_SIZE 12 +/* CBI class-specific USB request ADSC - it sends CBI (scsi) command to + * device in DATA stage */ +#define GRUB_USBMS_CBI_ADSC_REQ 0x00 + +/* The USB Mass Storage Command Block Wrapper. */ +struct grub_usbms_cbw +{ + grub_uint32_t signature; + grub_uint32_t tag; + grub_uint32_t transfer_length; + grub_uint8_t flags; + grub_uint8_t lun; + grub_uint8_t length; + grub_uint8_t cbwcb[16]; +} GRUB_PACKED; + +struct grub_usbms_csw +{ + grub_uint32_t signature; + grub_uint32_t tag; + grub_uint32_t residue; + grub_uint8_t status; +} GRUB_PACKED; + +struct grub_usbms_dev +{ + struct grub_usb_device *dev; + + int luns; + + int config; + int interface; + struct grub_usb_desc_endp *in; + struct grub_usb_desc_endp *out; + + int subclass; + int protocol; + struct grub_usb_desc_endp *intrpt; +}; +typedef struct grub_usbms_dev *grub_usbms_dev_t; + +/* FIXME: remove limit. */ +#define MAX_USBMS_DEVICES 128 +static grub_usbms_dev_t grub_usbms_devices[MAX_USBMS_DEVICES]; +static int first_available_slot = 0; + +static grub_usb_err_t +grub_usbms_cbi_cmd (grub_usb_device_t dev, int interface, + grub_uint8_t *cbicb) +{ + return grub_usb_control_msg (dev, + GRUB_USB_REQTYPE_CLASS_INTERFACE_OUT, + GRUB_USBMS_CBI_ADSC_REQ, 0, interface, + GRUB_USBMS_CBI_CMD_SIZE, (char*)cbicb); +} + +static grub_usb_err_t +grub_usbms_cbi_reset (grub_usb_device_t dev, int interface) +{ + /* Prepare array with Command Block Reset (=CBR) */ + /* CBI specific communication reset command should be send to device + * via CBI USB class specific request ADCS */ + struct grub_cbi_reset + { + grub_uint8_t opcode; /* 0x1d = SEND DIAGNOSTIC */ + grub_uint8_t lun; /* 7-5 LUN, 4-0 flags - for CBR always = 0x04 */ + grub_uint8_t pad[10]; + /* XXX: There is collision between CBI and UFI specifications: + * CBI says 0xff, UFI says 0x00 ... probably it does + * not matter ... (?) */ + } cbicb = { 0x1d, 0x04, + { 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff } + }; + + return grub_usbms_cbi_cmd (dev, interface, (grub_uint8_t *)&cbicb); +} + +static grub_usb_err_t +grub_usbms_bo_reset (grub_usb_device_t dev, int interface) +{ + return grub_usb_control_msg (dev, 0x21, 255, 0, interface, 0, 0); +} + +static grub_usb_err_t +grub_usbms_reset (grub_usbms_dev_t dev) +{ + if (dev->protocol == GRUB_USBMS_PROTOCOL_BULK) + return grub_usbms_bo_reset (dev->dev, dev->interface); + else + return grub_usbms_cbi_reset (dev->dev, dev->interface); +} + +static void +grub_usbms_detach (grub_usb_device_t usbdev, int config, int interface) +{ + unsigned i; + for (i = 0; i < ARRAY_SIZE (grub_usbms_devices); i++) + if (grub_usbms_devices[i] && grub_usbms_devices[i]->dev == usbdev + && grub_usbms_devices[i]->interface == interface + && grub_usbms_devices[i]->config == config) + { + grub_free (grub_usbms_devices[i]); + grub_usbms_devices[i] = 0; + } +} + +static int +grub_usbms_attach (grub_usb_device_t usbdev, int configno, int interfno) +{ + struct grub_usb_desc_if *interf + = usbdev->config[configno].interf[interfno].descif; + int j; + grub_uint8_t luns = 0; + unsigned curnum; + grub_usb_err_t err = GRUB_USB_ERR_NONE; + + grub_boot_time ("Attaching USB mass storage"); + + if (first_available_slot == ARRAY_SIZE (grub_usbms_devices)) + return 0; + + curnum = first_available_slot; + first_available_slot++; + + interf = usbdev->config[configno].interf[interfno].descif; + + if ((interf->subclass != GRUB_USBMS_SUBCLASS_BULK + /* Experimental support of RBC, MMC-2, UFI, SFF-8070i devices */ + && interf->subclass != GRUB_USBMS_SUBCLASS_RBC + && interf->subclass != GRUB_USBMS_SUBCLASS_MMC2 + && interf->subclass != GRUB_USBMS_SUBCLASS_UFI + && interf->subclass != GRUB_USBMS_SUBCLASS_SFF8070 ) + || (interf->protocol != GRUB_USBMS_PROTOCOL_BULK + && interf->protocol != GRUB_USBMS_PROTOCOL_CBI + && interf->protocol != GRUB_USBMS_PROTOCOL_CB)) + return 0; + + grub_usbms_devices[curnum] = grub_zalloc (sizeof (struct grub_usbms_dev)); + if (! grub_usbms_devices[curnum]) + return 0; + + grub_usbms_devices[curnum]->dev = usbdev; + grub_usbms_devices[curnum]->interface = interfno; + grub_usbms_devices[curnum]->subclass = interf->subclass; + grub_usbms_devices[curnum]->protocol = interf->protocol; + + grub_dprintf ("usbms", "alive\n"); + + /* Iterate over all endpoints of this interface, at least a + IN and OUT bulk endpoint are required. */ + for (j = 0; j < interf->endpointcnt; j++) + { + struct grub_usb_desc_endp *endp; + endp = &usbdev->config[0].interf[interfno].descendp[j]; + + if ((endp->endp_addr & 128) && (endp->attrib & 3) == 2) + /* Bulk IN endpoint. */ + grub_usbms_devices[curnum]->in = endp; + else if (!(endp->endp_addr & 128) && (endp->attrib & 3) == 2) + /* Bulk OUT endpoint. */ + grub_usbms_devices[curnum]->out = endp; + else if ((endp->endp_addr & 128) && (endp->attrib & 3) == 3) + /* Interrupt (IN) endpoint. */ + grub_usbms_devices[curnum]->intrpt = endp; + } + + if (!grub_usbms_devices[curnum]->in || !grub_usbms_devices[curnum]->out + || ((grub_usbms_devices[curnum]->protocol == GRUB_USBMS_PROTOCOL_CBI) + && !grub_usbms_devices[curnum]->intrpt)) + { + grub_free (grub_usbms_devices[curnum]); + grub_usbms_devices[curnum] = 0; + return 0; + } + + grub_dprintf ("usbms", "alive\n"); + + /* XXX: Activate the first configuration. */ + grub_usb_set_configuration (usbdev, 1); + + /* Query the amount of LUNs. */ + if (grub_usbms_devices[curnum]->protocol == GRUB_USBMS_PROTOCOL_BULK) + { /* Only Bulk only devices support Get Max LUN command */ + err = grub_usb_control_msg (usbdev, 0xA1, 254, 0, interfno, 1, (char *) &luns); + + if (err) + { + /* In case of a stall, clear the stall. */ + if (err == GRUB_USB_ERR_STALL) + { + grub_usb_clear_halt (usbdev, grub_usbms_devices[curnum]->in->endp_addr); + grub_usb_clear_halt (usbdev, grub_usbms_devices[curnum]->out->endp_addr); + } + /* Just set the amount of LUNs to one. */ + grub_errno = GRUB_ERR_NONE; + grub_usbms_devices[curnum]->luns = 1; + } + else + /* luns = 0 means one LUN with ID 0 present ! */ + /* We get from device not number of LUNs but highest + * LUN number. LUNs are numbered from 0, + * i.e. number of LUNs is luns+1 ! */ + grub_usbms_devices[curnum]->luns = luns + 1; + } + else + /* XXX: Does CBI devices support multiple LUNs ? + * I.e., should we detect number of device's LUNs ? (How?) */ + grub_usbms_devices[curnum]->luns = 1; + + grub_dprintf ("usbms", "alive\n"); + + usbdev->config[configno].interf[interfno].detach_hook = grub_usbms_detach; + + grub_boot_time ("Attached USB mass storage"); + +#if 0 /* All this part should be probably deleted. + * This make trouble on some devices if they are not in + * Phase Error state - and there they should be not in such state... + * Bulk only mass storage reset procedure should be used only + * on place and in time when it is really necessary. */ + /* Reset recovery procedure */ + /* Bulk-Only Mass Storage Reset, after the reset commands + will be accepted. */ + grub_usbms_reset (usbdev, i); + grub_usb_clear_halt (usbdev, usbms->in->endp_addr); + grub_usb_clear_halt (usbdev, usbms->out->endp_addr); +#endif + + return 1; +} + + + +static int +grub_usbms_iterate (grub_scsi_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + unsigned i; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + grub_usb_poll_devices (1); + + for (i = 0; i < ARRAY_SIZE (grub_usbms_devices); i++) + if (grub_usbms_devices[i]) + { + if (hook (GRUB_SCSI_SUBSYSTEM_USBMS, i, grub_usbms_devices[i]->luns, + hook_data)) + return 1; + } + + return 0; +} + +static grub_err_t +grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, + grub_size_t size, char *buf, int read_write) +{ + struct grub_usbms_cbw cbw; + grub_usbms_dev_t dev = (grub_usbms_dev_t) scsi->data; + struct grub_usbms_csw status; + static grub_uint32_t tag = 0; + grub_usb_err_t err = GRUB_USB_ERR_NONE; + grub_usb_err_t errCSW = GRUB_USB_ERR_NONE; + int retrycnt = 3 + 1; + + tag++; + + retry: + retrycnt--; + if (retrycnt == 0) + return grub_error (GRUB_ERR_IO, "USB Mass Storage stalled"); + + /* Setup the request. */ + grub_memset (&cbw, 0, sizeof (cbw)); + cbw.signature = grub_cpu_to_le32_compile_time (0x43425355); + cbw.tag = tag; + cbw.transfer_length = grub_cpu_to_le32 (size); + cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT; + cbw.lun = scsi->lun; /* In USB MS CBW are LUN bits on another place than in SCSI CDB, both should be set correctly. */ + cbw.length = cmdsize; + grub_memcpy (cbw.cbwcb, cmd, cmdsize); + + /* Debug print of CBW content. */ + grub_dprintf ("usb", "CBW: sign=0x%08x tag=0x%08x len=0x%08x\n", + cbw.signature, cbw.tag, cbw.transfer_length); + grub_dprintf ("usb", "CBW: flags=0x%02x lun=0x%02x CB_len=0x%02x\n", + cbw.flags, cbw.lun, cbw.length); + grub_dprintf ("usb", "CBW: cmd:\n %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", + cbw.cbwcb[ 0], cbw.cbwcb[ 1], cbw.cbwcb[ 2], cbw.cbwcb[ 3], + cbw.cbwcb[ 4], cbw.cbwcb[ 5], cbw.cbwcb[ 6], cbw.cbwcb[ 7], + cbw.cbwcb[ 8], cbw.cbwcb[ 9], cbw.cbwcb[10], cbw.cbwcb[11], + cbw.cbwcb[12], cbw.cbwcb[13], cbw.cbwcb[14], cbw.cbwcb[15]); + + /* Write the request. + * XXX: Error recovery is maybe still not fully correct. */ + err = grub_usb_bulk_write (dev->dev, dev->out, + sizeof (cbw), (char *) &cbw); + if (err) + { + if (err == GRUB_USB_ERR_STALL) + { + grub_usb_clear_halt (dev->dev, dev->out->endp_addr); + goto CheckCSW; + } + goto retry; + } + + /* Read/write the data, (maybe) according to specification. */ + if (size && (read_write == 0)) + { + err = grub_usb_bulk_read (dev->dev, dev->in, size, buf); + grub_dprintf ("usb", "read: %d %d\n", err, GRUB_USB_ERR_STALL); + if (err) + { + if (err == GRUB_USB_ERR_STALL) + grub_usb_clear_halt (dev->dev, dev->in->endp_addr); + goto CheckCSW; + } + /* Debug print of received data. */ + grub_dprintf ("usb", "buf:\n"); + if (size <= 64) + { + unsigned i; + for (i = 0; i < size; i++) + grub_dprintf ("usb", "0x%02x: 0x%02x\n", i, buf[i]); + } + else + grub_dprintf ("usb", "Too much data for debug print...\n"); + } + else if (size) + { + err = grub_usb_bulk_write (dev->dev, dev->out, size, buf); + grub_dprintf ("usb", "write: %d %d\n", err, GRUB_USB_ERR_STALL); + grub_dprintf ("usb", "First 16 bytes of sent data:\n %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", + buf[ 0], buf[ 1], buf[ 2], buf[ 3], + buf[ 4], buf[ 5], buf[ 6], buf[ 7], + buf[ 8], buf[ 9], buf[10], buf[11], + buf[12], buf[13], buf[14], buf[15]); + if (err) + { + if (err == GRUB_USB_ERR_STALL) + grub_usb_clear_halt (dev->dev, dev->out->endp_addr); + goto CheckCSW; + } + /* Debug print of sent data. */ + if (size <= 256) + { + unsigned i; + for (i=0; idev, dev->in, + sizeof (status), (char *) &status); + if (errCSW) + { + grub_usb_clear_halt (dev->dev, dev->in->endp_addr); + errCSW = grub_usb_bulk_read (dev->dev, dev->in, + sizeof (status), (char *) &status); + if (errCSW) + { /* Bulk-only reset device. */ + grub_dprintf ("usb", "Bulk-only reset device - errCSW\n"); + grub_usbms_reset (dev); + grub_usb_clear_halt (dev->dev, dev->in->endp_addr); + grub_usb_clear_halt (dev->dev, dev->out->endp_addr); + goto retry; + } + } + + /* Debug print of CSW content. */ + grub_dprintf ("usb", "CSW: sign=0x%08x tag=0x%08x resid=0x%08x\n", + status.signature, status.tag, status.residue); + grub_dprintf ("usb", "CSW: status=0x%02x\n", status.status); + + /* If phase error or not valid signature, do bulk-only reset device. */ + if ((status.status == 2) || + (status.signature != grub_cpu_to_le32_compile_time(0x53425355))) + { /* Bulk-only reset device. */ + grub_dprintf ("usb", "Bulk-only reset device - bad status\n"); + grub_usbms_reset (dev); + grub_usb_clear_halt (dev->dev, dev->in->endp_addr); + grub_usb_clear_halt (dev->dev, dev->out->endp_addr); + + goto retry; + } + + /* If "command failed" status or data transfer failed -> error */ + if ((status.status || err) && !read_write) + return grub_error (GRUB_ERR_READ_ERROR, + "error communication with USB Mass Storage device"); + else if ((status.status || err) && read_write) + return grub_error (GRUB_ERR_WRITE_ERROR, + "error communication with USB Mass Storage device"); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_usbms_transfer_cbi (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, + grub_size_t size, char *buf, int read_write) +{ + grub_usbms_dev_t dev = (grub_usbms_dev_t) scsi->data; + int retrycnt = 3 + 1; + grub_usb_err_t err = GRUB_USB_ERR_NONE; + grub_uint8_t cbicb[GRUB_USBMS_CBI_CMD_SIZE]; + grub_uint16_t status; + + retry: + retrycnt--; + if (retrycnt == 0) + return grub_error (GRUB_ERR_IO, "USB Mass Storage CBI failed"); + + /* Setup the request. */ + grub_memset (cbicb, 0, sizeof (cbicb)); + grub_memcpy (cbicb, cmd, + cmdsize >= GRUB_USBMS_CBI_CMD_SIZE + ? GRUB_USBMS_CBI_CMD_SIZE + : cmdsize); + + /* Debug print of CBIcb content. */ + grub_dprintf ("usb", "cbicb:\n %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", + cbicb[ 0], cbicb[ 1], cbicb[ 2], cbicb[ 3], + cbicb[ 4], cbicb[ 5], cbicb[ 6], cbicb[ 7], + cbicb[ 8], cbicb[ 9], cbicb[10], cbicb[11]); + + /* Write the request. + * XXX: Error recovery is maybe not correct. */ + err = grub_usbms_cbi_cmd (dev->dev, dev->interface, cbicb); + if (err) + { + grub_dprintf ("usb", "CBI cmdcb setup err=%d\n", err); + if (err == GRUB_USB_ERR_STALL) + { + /* Stall in this place probably means bad or unsupported + * command, so we will not try it again. */ + return grub_error (GRUB_ERR_IO, "USB Mass Storage CBI request failed"); + } + else if (dev->protocol == GRUB_USBMS_PROTOCOL_CBI) + { + /* Try to get status from interrupt pipe */ + err = grub_usb_bulk_read (dev->dev, dev->intrpt, + 2, (char*)&status); + grub_dprintf ("usb", "CBI cmdcb setup status: err=%d, status=0x%x\n", err, status); + } + /* Any other error could be transport problem, try it again */ + goto retry; + } + + /* Read/write the data, (maybe) according to specification. */ + if (size && (read_write == 0)) + { + err = grub_usb_bulk_read (dev->dev, dev->in, size, buf); + grub_dprintf ("usb", "read: %d\n", err); + if (err) + { + if (err == GRUB_USB_ERR_STALL) + grub_usb_clear_halt (dev->dev, dev->in->endp_addr); + goto retry; + } + } + else if (size) + { + err = grub_usb_bulk_write (dev->dev, dev->out, size, buf); + grub_dprintf ("usb", "write: %d\n", err); + if (err) + { + if (err == GRUB_USB_ERR_STALL) + grub_usb_clear_halt (dev->dev, dev->out->endp_addr); + goto retry; + } + } + + /* XXX: It is not clear to me yet, how to check status of CBI + * data transfer on devices without interrupt pipe. + * AFAIK there is probably no status phase to indicate possibly + * bad transported data. + * Maybe we should do check on higher level, i.e. issue RequestSense + * command (we do it already in scsi.c) and check returned values + * (we do not it yet) - ? */ + if (dev->protocol == GRUB_USBMS_PROTOCOL_CBI) + { /* Check status in interrupt pipe */ + err = grub_usb_bulk_read (dev->dev, dev->intrpt, + 2, (char*)&status); + grub_dprintf ("usb", "read status: %d\n", err); + if (err) + { + /* Try to reset device, because it is probably not standard + * situation */ + grub_usbms_reset (dev); + grub_usb_clear_halt (dev->dev, dev->in->endp_addr); + grub_usb_clear_halt (dev->dev, dev->out->endp_addr); + grub_usb_clear_halt (dev->dev, dev->intrpt->endp_addr); + goto retry; + } + if (dev->subclass == GRUB_USBMS_SUBCLASS_UFI) + { + /* These devices should return bASC and bASCQ */ + if (status != 0) + /* Some error, currently we don't care what it is... */ + goto retry; + } + else if (dev->subclass == GRUB_USBMS_SUBCLASS_RBC) + { + /* XXX: I don't understand what returns RBC subclass devices, + * so I don't check it - maybe somebody helps ? */ + } + else + { + /* Any other device should return bType = 0 and some bValue */ + if (status & 0xff) + return grub_error (GRUB_ERR_IO, "USB Mass Storage CBI status type != 0"); + status = (status & 0x0300) >> 8; + switch (status) + { + case 0 : /* OK */ + break; + case 1 : /* Fail */ + goto retry; + break; + case 2 : /* Phase error */ + case 3 : /* Persistent Failure */ + grub_dprintf ("usb", "CBI reset device - phase error or persistent failure\n"); + grub_usbms_reset (dev); + grub_usb_clear_halt (dev->dev, dev->in->endp_addr); + grub_usb_clear_halt (dev->dev, dev->out->endp_addr); + grub_usb_clear_halt (dev->dev, dev->intrpt->endp_addr); + goto retry; + break; + } + } + } + + if (err) + return grub_error (GRUB_ERR_IO, "USB error %d", err); + + return GRUB_ERR_NONE; +} + + +static grub_err_t +grub_usbms_transfer (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, + grub_size_t size, char *buf, int read_write) +{ + grub_usbms_dev_t dev = (grub_usbms_dev_t) scsi->data; + + if (dev->protocol == GRUB_USBMS_PROTOCOL_BULK) + return grub_usbms_transfer_bo (scsi, cmdsize, cmd, size, buf, + read_write); + else + return grub_usbms_transfer_cbi (scsi, cmdsize, cmd, size, buf, + read_write); +} + +static grub_err_t +grub_usbms_read (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, + grub_size_t size, char *buf) +{ + return grub_usbms_transfer (scsi, cmdsize, cmd, size, buf, 0); +} + +static grub_err_t +grub_usbms_write (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd, + grub_size_t size, const char *buf) +{ + return grub_usbms_transfer (scsi, cmdsize, cmd, size, (char *) buf, 1); +} + +static grub_err_t +grub_usbms_open (int id, int devnum, struct grub_scsi *scsi) +{ + if (id != GRUB_SCSI_SUBSYSTEM_USBMS) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "not USB Mass Storage device"); + + if (!grub_usbms_devices[devnum]) + grub_usb_poll_devices (1); + + if (!grub_usbms_devices[devnum]) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "unknown USB Mass Storage device"); + + scsi->data = grub_usbms_devices[devnum]; + scsi->luns = grub_usbms_devices[devnum]->luns; + + return GRUB_ERR_NONE; +} + +static struct grub_scsi_dev grub_usbms_dev = + { + .iterate = grub_usbms_iterate, + .open = grub_usbms_open, + .read = grub_usbms_read, + .write = grub_usbms_write + }; + +static struct grub_usb_attach_desc attach_hook = +{ + .class = GRUB_USB_CLASS_MASS_STORAGE, + .hook = grub_usbms_attach +}; + +GRUB_MOD_INIT(usbms) +{ + grub_usb_register_attach_hook_class (&attach_hook); + grub_scsi_dev_register (&grub_usbms_dev); +} + +GRUB_MOD_FINI(usbms) +{ + unsigned i; + for (i = 0; i < ARRAY_SIZE (grub_usbms_devices); i++) + { + grub_usbms_devices[i]->dev->config[grub_usbms_devices[i]->config] + .interf[grub_usbms_devices[i]->interface].detach_hook = 0; + grub_usbms_devices[i]->dev->config[grub_usbms_devices[i]->config] + .interf[grub_usbms_devices[i]->interface].attached = 0; + } + grub_usb_unregister_attach_hook_class (&attach_hook); + grub_scsi_dev_unregister (&grub_usbms_dev); +} diff --git a/grub-core/disk/xen/xendisk.c b/grub-core/disk/xen/xendisk.c new file mode 100644 index 000000000..b18a9238d --- /dev/null +++ b/grub-core/disk/xen/xendisk.c @@ -0,0 +1,485 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct virtdisk +{ + int handle; + char *fullname; + char *backend_dir; + char *frontend_dir; + struct blkif_sring *shared_page; + struct blkif_front_ring ring; + grub_xen_grant_t grant; + grub_xen_evtchn_t evtchn; + void *dma_page; + grub_xen_grant_t dma_grant; + struct virtdisk *compat_next; +}; + +#define xen_wmb() mb() +#define xen_mb() mb() + +static struct virtdisk *virtdisks; +static grub_size_t vdiskcnt; +struct virtdisk *compat_head; + +static int +grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + grub_size_t i; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + for (i = 0; i < vdiskcnt; i++) + if (hook (virtdisks[i].fullname, hook_data)) + return 1; + return 0; +} + +static grub_err_t +grub_virtdisk_open (const char *name, grub_disk_t disk) +{ + int i; + grub_uint32_t secsize; + char fdir[200]; + char *buf; + int num = -1; + struct virtdisk *vd; + + /* For compatibility with pv-grub legacy menu.lst accept hdX as disk name */ + if (name[0] == 'h' && name[1] == 'd' && name[2]) + { + num = grub_strtoul (name + 2, 0, 10); + if (grub_errno) + { + grub_errno = 0; + num = -1; + } + } + for (i = 0, vd = compat_head; vd; vd = vd->compat_next, i++) + if (i == num || grub_strcmp (name, vd->fullname) == 0) + break; + if (!vd) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a virtdisk"); + disk->data = vd; + disk->id = vd - virtdisks; + + grub_snprintf (fdir, sizeof (fdir), "%s/sectors", vd->backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + return grub_errno; + disk->total_sectors = grub_strtoull (buf, 0, 10); + if (grub_errno) + return grub_errno; + + grub_snprintf (fdir, sizeof (fdir), "%s/sector-size", vd->backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + return grub_errno; + secsize = grub_strtoull (buf, 0, 10); + if (grub_errno) + return grub_errno; + + if ((secsize & (secsize - 1)) || !secsize || secsize < 512 + || secsize > GRUB_XEN_PAGE_SIZE) + return grub_error (GRUB_ERR_IO, "unsupported sector size %d", secsize); + + for (disk->log_sector_size = 0; + (1U << disk->log_sector_size) < secsize; disk->log_sector_size++); + + disk->total_sectors >>= disk->log_sector_size - 9; + + return GRUB_ERR_NONE; +} + +static void +grub_virtdisk_close (grub_disk_t disk __attribute__ ((unused))) +{ +} + +static grub_err_t +grub_virtdisk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + struct virtdisk *data = disk->data; + + while (size) + { + grub_size_t cur; + struct blkif_request *req; + struct blkif_response *resp; + int sta = 0; + struct evtchn_send send; + cur = size; + if (cur > (unsigned) (GRUB_XEN_PAGE_SIZE >> disk->log_sector_size)) + cur = GRUB_XEN_PAGE_SIZE >> disk->log_sector_size; + while (RING_FULL (&data->ring)) + grub_xen_sched_op (SCHEDOP_yield, 0); + req = RING_GET_REQUEST (&data->ring, data->ring.req_prod_pvt); + req->operation = BLKIF_OP_READ; + req->nr_segments = 1; + req->handle = data->handle; + req->id = 0; + req->sector_number = sector << (disk->log_sector_size - 9); + req->seg[0].gref = data->dma_grant; + req->seg[0].first_sect = 0; + req->seg[0].last_sect = (cur << (disk->log_sector_size - 9)) - 1; + data->ring.req_prod_pvt++; + RING_PUSH_REQUESTS (&data->ring); + mb (); + send.port = data->evtchn; + grub_xen_event_channel_op (EVTCHNOP_send, &send); + + while (!RING_HAS_UNCONSUMED_RESPONSES (&data->ring)) + { + grub_xen_sched_op (SCHEDOP_yield, 0); + mb (); + } + while (1) + { + int wtd; + RING_FINAL_CHECK_FOR_RESPONSES (&data->ring, wtd); + if (!wtd) + break; + resp = RING_GET_RESPONSE (&data->ring, data->ring.rsp_cons); + data->ring.rsp_cons++; + if (resp->status) + sta = resp->status; + } + if (sta) + return grub_error (GRUB_ERR_IO, "read failed"); + grub_memcpy (buf, data->dma_page, cur << disk->log_sector_size); + size -= cur; + sector += cur; + buf += cur << disk->log_sector_size; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_virtdisk_write (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + struct virtdisk *data = disk->data; + + while (size) + { + grub_size_t cur; + struct blkif_request *req; + struct blkif_response *resp; + int sta = 0; + struct evtchn_send send; + cur = size; + if (cur > (unsigned) (GRUB_XEN_PAGE_SIZE >> disk->log_sector_size)) + cur = GRUB_XEN_PAGE_SIZE >> disk->log_sector_size; + + grub_memcpy (data->dma_page, buf, cur << disk->log_sector_size); + + while (RING_FULL (&data->ring)) + grub_xen_sched_op (SCHEDOP_yield, 0); + req = RING_GET_REQUEST (&data->ring, data->ring.req_prod_pvt); + req->operation = BLKIF_OP_WRITE; + req->nr_segments = 1; + req->handle = data->handle; + req->id = 0; + req->sector_number = sector << (disk->log_sector_size - 9); + req->seg[0].gref = data->dma_grant; + req->seg[0].first_sect = 0; + req->seg[0].last_sect = (cur << (disk->log_sector_size - 9)) - 1; + data->ring.req_prod_pvt++; + RING_PUSH_REQUESTS (&data->ring); + mb (); + send.port = data->evtchn; + grub_xen_event_channel_op (EVTCHNOP_send, &send); + + while (!RING_HAS_UNCONSUMED_RESPONSES (&data->ring)) + { + grub_xen_sched_op (SCHEDOP_yield, 0); + mb (); + } + while (1) + { + int wtd; + RING_FINAL_CHECK_FOR_RESPONSES (&data->ring, wtd); + if (!wtd) + break; + resp = RING_GET_RESPONSE (&data->ring, data->ring.rsp_cons); + data->ring.rsp_cons++; + if (resp->status) + sta = resp->status; + } + if (sta) + return grub_error (GRUB_ERR_IO, "write failed"); + size -= cur; + sector += cur; + buf += cur << disk->log_sector_size; + } + return GRUB_ERR_NONE; +} + +static struct grub_disk_dev grub_virtdisk_dev = { + .name = "xen", + .id = GRUB_DISK_DEVICE_XEN, + .iterate = grub_virtdisk_iterate, + .open = grub_virtdisk_open, + .close = grub_virtdisk_close, + .read = grub_virtdisk_read, + .write = grub_virtdisk_write, + .next = 0 +}; + +static int +count (const char *dir __attribute__ ((unused)), void *data) +{ + grub_size_t *ctr = data; + (*ctr)++; + + return 0; +} + +static int +fill (const char *dir, void *data) +{ + grub_size_t *ctr = data; + domid_t dom; + /* "dir" is just a number, at most 19 characters. */ + char fdir[200]; + char num[20]; + grub_err_t err; + void *buf; + struct evtchn_alloc_unbound alloc_unbound; + struct virtdisk **prev = &compat_head, *vd = compat_head; + + /* Shouldn't happen unles some hotplug happened. */ + if (vdiskcnt >= *ctr) + return 1; + virtdisks[vdiskcnt].handle = grub_strtoul (dir, 0, 10); + if (grub_errno) + { + grub_errno = 0; + return 0; + } + virtdisks[vdiskcnt].fullname = 0; + virtdisks[vdiskcnt].backend_dir = 0; + + grub_snprintf (fdir, sizeof (fdir), "device/vbd/%s/backend", dir); + virtdisks[vdiskcnt].backend_dir = grub_xenstore_get_file (fdir, NULL); + if (!virtdisks[vdiskcnt].backend_dir) + goto out_fail_1; + + grub_snprintf (fdir, sizeof (fdir), "%s/dev", + virtdisks[vdiskcnt].backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + { + grub_errno = 0; + virtdisks[vdiskcnt].fullname = grub_xasprintf ("xenid/%s", dir); + } + else + { + virtdisks[vdiskcnt].fullname = grub_xasprintf ("xen/%s", (char *) buf); + grub_free (buf); + } + if (!virtdisks[vdiskcnt].fullname) + goto out_fail_1; + + grub_snprintf (fdir, sizeof (fdir), "device/vbd/%s/backend-id", dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + goto out_fail_1; + + dom = grub_strtoul (buf, 0, 10); + grub_free (buf); + if (grub_errno) + goto out_fail_1; + + virtdisks[vdiskcnt].shared_page = + grub_xen_alloc_shared_page (dom, &virtdisks[vdiskcnt].grant); + if (!virtdisks[vdiskcnt].shared_page) + goto out_fail_1; + + virtdisks[vdiskcnt].dma_page = + grub_xen_alloc_shared_page (dom, &virtdisks[vdiskcnt].dma_grant); + if (!virtdisks[vdiskcnt].dma_page) + goto out_fail_2; + + alloc_unbound.dom = DOMID_SELF; + alloc_unbound.remote_dom = dom; + + grub_xen_event_channel_op (EVTCHNOP_alloc_unbound, &alloc_unbound); + virtdisks[vdiskcnt].evtchn = alloc_unbound.port; + + SHARED_RING_INIT (virtdisks[vdiskcnt].shared_page); + FRONT_RING_INIT (&virtdisks[vdiskcnt].ring, virtdisks[vdiskcnt].shared_page, + GRUB_XEN_PAGE_SIZE); + + grub_snprintf (fdir, sizeof (fdir), "device/vbd/%s/ring-ref", dir); + grub_snprintf (num, sizeof (num), "%u", virtdisks[vdiskcnt].grant); + err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); + if (err) + goto out_fail_3; + + grub_snprintf (fdir, sizeof (fdir), "device/vbd/%s/event-channel", dir); + grub_snprintf (num, sizeof (num), "%u", virtdisks[vdiskcnt].evtchn); + err = grub_xenstore_write_file (fdir, num, grub_strlen (num)); + if (err) + goto out_fail_3; + + grub_snprintf (fdir, sizeof (fdir), "device/vbd/%s/protocol", dir); + err = grub_xenstore_write_file (fdir, XEN_IO_PROTO_ABI_NATIVE, + grub_strlen (XEN_IO_PROTO_ABI_NATIVE)); + if (err) + goto out_fail_3; + + struct gnttab_dump_table dt; + dt.dom = DOMID_SELF; + grub_xen_grant_table_op (GNTTABOP_dump_table, (void *) &dt, 1); + + grub_snprintf (fdir, sizeof (fdir), "device/vbd/%s/state", dir); + err = grub_xenstore_write_file (fdir, "3", 1); + if (err) + goto out_fail_3; + + while (1) + { + grub_snprintf (fdir, sizeof (fdir), "%s/state", + virtdisks[vdiskcnt].backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + if (!buf) + goto out_fail_3; + if (grub_strcmp (buf, "2") != 0) + break; + grub_free (buf); + grub_xen_sched_op (SCHEDOP_yield, 0); + } + grub_dprintf ("xen", "state=%s\n", (char *) buf); + grub_free (buf); + + grub_snprintf (fdir, sizeof (fdir), "device/vbd/%s", dir); + + virtdisks[vdiskcnt].frontend_dir = grub_strdup (fdir); + + /* For compatibility with pv-grub maintain linked list sorted by handle + value in increasing order. This allows mapping of (hdX) disk names + from legacy menu.lst */ + while (vd) + { + if (vd->handle > virtdisks[vdiskcnt].handle) + break; + prev = &vd->compat_next; + vd = vd->compat_next; + } + virtdisks[vdiskcnt].compat_next = vd; + *prev = &virtdisks[vdiskcnt]; + + vdiskcnt++; + return 0; + +out_fail_3: + grub_xen_free_shared_page (virtdisks[vdiskcnt].dma_page); +out_fail_2: + grub_xen_free_shared_page (virtdisks[vdiskcnt].shared_page); +out_fail_1: + grub_free (virtdisks[vdiskcnt].backend_dir); + grub_free (virtdisks[vdiskcnt].fullname); + + grub_errno = 0; + return 0; +} + +void +grub_xendisk_init (void) +{ + grub_size_t ctr = 0; + if (grub_xenstore_dir ("device/vbd", count, &ctr)) + grub_errno = 0; + + if (!ctr) + return; + + virtdisks = grub_malloc (ctr * sizeof (virtdisks[0])); + if (!virtdisks) + return; + if (grub_xenstore_dir ("device/vbd", fill, &ctr)) + grub_errno = 0; + + grub_disk_dev_register (&grub_virtdisk_dev); +} + +void +grub_xendisk_fini (void) +{ + char fdir[200]; + unsigned i; + + for (i = 0; i < vdiskcnt; i++) + { + char *buf; + struct evtchn_close close_op = {.port = virtdisks[i].evtchn }; + + grub_snprintf (fdir, sizeof (fdir), "%s/state", + virtdisks[i].frontend_dir); + grub_xenstore_write_file (fdir, "6", 1); + + while (1) + { + grub_snprintf (fdir, sizeof (fdir), "%s/state", + virtdisks[i].backend_dir); + buf = grub_xenstore_get_file (fdir, NULL); + grub_dprintf ("xen", "state=%s\n", (char *) buf); + + if (!buf || grub_strcmp (buf, "6") == 0) + break; + grub_free (buf); + grub_xen_sched_op (SCHEDOP_yield, 0); + } + grub_free (buf); + + grub_snprintf (fdir, sizeof (fdir), "%s/ring-ref", + virtdisks[i].frontend_dir); + grub_xenstore_write_file (fdir, NULL, 0); + + grub_snprintf (fdir, sizeof (fdir), "%s/event-channel", + virtdisks[i].frontend_dir); + grub_xenstore_write_file (fdir, NULL, 0); + + grub_xen_free_shared_page (virtdisks[i].dma_page); + grub_xen_free_shared_page (virtdisks[i].shared_page); + + grub_xen_event_channel_op (EVTCHNOP_close, &close_op); + + /* Prepare for handoff. */ + grub_snprintf (fdir, sizeof (fdir), "%s/state", + virtdisks[i].frontend_dir); + grub_xenstore_write_file (fdir, "1", 1); + } +} diff --git a/grub-core/efiemu/i386/coredetect.c b/grub-core/efiemu/i386/coredetect.c new file mode 100644 index 000000000..a262b5328 --- /dev/null +++ b/grub-core/efiemu/i386/coredetect.c @@ -0,0 +1,27 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +const char * +grub_efiemu_get_default_core_name (void) +{ + return grub_cpuid_has_longmode ? "efiemu64.o" : "efiemu32.o"; +} diff --git a/grub-core/efiemu/i386/loadcore32.c b/grub-core/efiemu/i386/loadcore32.c new file mode 100644 index 000000000..e746df8df --- /dev/null +++ b/grub-core/efiemu/i386/loadcore32.c @@ -0,0 +1,121 @@ +/* i386 CPU-specific part of loadcore.c for 32-bit mode */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +/* Check if EHDR is a valid ELF header. */ +int +grub_arch_efiemu_check_header32 (void *ehdr) +{ + Elf32_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + return (e->e_ident[EI_CLASS] == ELFCLASS32 + && e->e_ident[EI_DATA] == ELFDATA2LSB + && e->e_machine == EM_386); +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_efiemu_relocate_symbols32 (grub_efiemu_segment_t segs, + struct grub_efiemu_elf_sym *elfsyms, + void *ehdr) +{ + unsigned i; + Elf32_Ehdr *e = ehdr; + Elf32_Shdr *s; + grub_err_t err; + + grub_dprintf ("efiemu", "relocating symbols %d %d\n", + e->e_shoff, e->e_shnum); + + for (i = 0, s = (Elf32_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf32_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_REL) + { + grub_efiemu_segment_t seg; + grub_dprintf ("efiemu", "shtrel\n"); + + /* Find the target segment. */ + for (seg = segs; seg; seg = seg->next) + if (seg->section == s->sh_info) + break; + + if (seg) + { + Elf32_Rel *rel, *max; + + for (rel = (Elf32_Rel *) ((char *) e + s->sh_offset), + max = rel + s->sh_size / s->sh_entsize; + rel < max; + rel++) + { + Elf32_Word *addr; + struct grub_efiemu_elf_sym sym; + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = (Elf32_Word *) + ((char *) grub_efiemu_mm_obtain_request (seg->handle) + + seg->off + rel->r_offset); + sym = elfsyms[ELF32_R_SYM (rel->r_info)]; + + switch (ELF32_R_TYPE (rel->r_info)) + { + case R_386_32: + err = grub_efiemu_write_value (addr, sym.off + *addr, + sym.handle, 0, + seg->ptv_rel_needed, + sizeof (grub_uint32_t)); + if (err) + return err; + + break; + + case R_386_PC32: + err = grub_efiemu_write_value (addr, sym.off + *addr + - rel->r_offset + - seg->off, sym.handle, + seg->handle, + seg->ptv_rel_needed, + sizeof (grub_uint32_t)); + if (err) + return err; + break; + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + } + } + + return GRUB_ERR_NONE; +} + + diff --git a/grub-core/efiemu/i386/loadcore64.c b/grub-core/efiemu/i386/loadcore64.c new file mode 100644 index 000000000..e49d0b6ff --- /dev/null +++ b/grub-core/efiemu/i386/loadcore64.c @@ -0,0 +1,132 @@ +/* i386 CPU-specific part of loadcore.c for 32-bit mode */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +/* Check if EHDR is a valid ELF header. */ +int +grub_arch_efiemu_check_header64 (void *ehdr) +{ + Elf64_Ehdr *e = ehdr; + + return (e->e_ident[EI_CLASS] == ELFCLASS64 + && e->e_ident[EI_DATA] == ELFDATA2LSB + && e->e_machine == EM_X86_64); +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_efiemu_relocate_symbols64 (grub_efiemu_segment_t segs, + struct grub_efiemu_elf_sym *elfsyms, + void *ehdr) +{ + unsigned i; + Elf64_Ehdr *e = ehdr; + Elf64_Shdr *s; + grub_err_t err; + + for (i = 0, s = (Elf64_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf64_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_RELA) + { + grub_efiemu_segment_t seg; + grub_dprintf ("efiemu", "shtrel\n"); + + /* Find the target segment. */ + for (seg = segs; seg; seg = seg->next) + if (seg->section == s->sh_info) + break; + + if (seg) + { + Elf64_Rela *rel, *max; + + for (rel = (Elf64_Rela *) ((char *) e + s->sh_offset), + max = rel + (unsigned long) s->sh_size + / (unsigned long)s->sh_entsize; + rel < max; + rel++) + { + void *addr; + grub_uint32_t *addr32; + grub_uint64_t *addr64; + struct grub_efiemu_elf_sym sym; + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = + ((char *) grub_efiemu_mm_obtain_request (seg->handle) + + seg->off + rel->r_offset); + addr32 = (grub_uint32_t *) addr; + addr64 = (grub_uint64_t *) addr; + sym = elfsyms[ELF64_R_SYM (rel->r_info)]; + + switch (ELF64_R_TYPE (rel->r_info)) + { + case R_X86_64_64: + err = grub_efiemu_write_value (addr, + *addr64 + rel->r_addend + + sym.off, sym.handle, + 0, seg->ptv_rel_needed, + sizeof (grub_uint64_t)); + if (err) + return err; + break; + + case R_X86_64_PC32: + err = grub_efiemu_write_value (addr, + *addr32 + rel->r_addend + + sym.off + - rel->r_offset - seg->off, + sym.handle, seg->handle, + seg->ptv_rel_needed, + sizeof (grub_uint32_t)); + if (err) + return err; + break; + + case R_X86_64_32: + case R_X86_64_32S: + err = grub_efiemu_write_value (addr, + *addr32 + rel->r_addend + + sym.off, sym.handle, + 0, seg->ptv_rel_needed, + sizeof (grub_uint32_t)); + if (err) + return err; + break; + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + } + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/efiemu/i386/nocfgtables.c b/grub-core/efiemu/i386/nocfgtables.c new file mode 100644 index 000000000..775f1d03a --- /dev/null +++ b/grub-core/efiemu/i386/nocfgtables.c @@ -0,0 +1,30 @@ +/* Register SMBIOS and ACPI tables. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +grub_err_t +grub_machine_efiemu_init_tables (void) +{ + return GRUB_ERR_NONE; +} diff --git a/grub-core/efiemu/i386/pc/cfgtables.c b/grub-core/efiemu/i386/pc/cfgtables.c new file mode 100644 index 000000000..492c07c46 --- /dev/null +++ b/grub-core/efiemu/i386/pc/cfgtables.c @@ -0,0 +1,76 @@ +/* Register SMBIOS and ACPI tables. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +grub_err_t +grub_machine_efiemu_init_tables (void) +{ + grub_uint8_t *ptr; + void *table; + grub_err_t err; + grub_efi_guid_t smbios = GRUB_EFI_SMBIOS_TABLE_GUID; + grub_efi_guid_t acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID; + grub_efi_guid_t acpi = GRUB_EFI_ACPI_TABLE_GUID; + + err = grub_efiemu_unregister_configuration_table (smbios); + if (err) + return err; + err = grub_efiemu_unregister_configuration_table (acpi); + if (err) + return err; + err = grub_efiemu_unregister_configuration_table (acpi20); + if (err) + return err; + + table = grub_acpi_get_rsdpv1 (); + if (table) + { + err = grub_efiemu_register_configuration_table (acpi, 0, 0, table); + if (err) + return err; + } + table = grub_acpi_get_rsdpv2 (); + if (table) + { + err = grub_efiemu_register_configuration_table (acpi20, 0, 0, table); + if (err) + return err; + } + + for (ptr = (grub_uint8_t *) 0xf0000; ptr < (grub_uint8_t *) 0x100000; + ptr += 16) + if (grub_memcmp (ptr, "_SM_", 4) == 0 + && grub_byte_checksum (ptr, *(ptr + 5)) == 0) + break; + + if (ptr < (grub_uint8_t *) 0x100000) + { + grub_dprintf ("efiemu", "Registering SMBIOS\n"); + err = grub_efiemu_register_configuration_table (smbios, 0, 0, ptr); + if (err) + return err; + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/efiemu/loadcore.c b/grub-core/efiemu/loadcore.c new file mode 100644 index 000000000..44085ef81 --- /dev/null +++ b/grub-core/efiemu/loadcore.c @@ -0,0 +1,387 @@ +/* Load runtime image of EFIemu. Functions specific to 32/64-bit mode */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +/* ELF symbols and their values */ +static struct grub_efiemu_elf_sym *grub_efiemu_elfsyms = 0; +static int grub_efiemu_nelfsyms = 0; + +/* Return the address of a section whose index is N. */ +static grub_err_t +grub_efiemu_get_section_addr (grub_efiemu_segment_t segs, unsigned n, + int *handle, grub_off_t *off) +{ + grub_efiemu_segment_t seg; + + for (seg = segs; seg; seg = seg->next) + if (seg->section == n) + { + *handle = seg->handle; + *off = seg->off; + return GRUB_ERR_NONE; + } + + return grub_error (GRUB_ERR_BAD_OS, "section %d not found", n); +} + +grub_err_t +SUFFIX (grub_efiemu_loadcore_unload) (void) +{ + grub_free (grub_efiemu_elfsyms); + grub_efiemu_elfsyms = 0; + return GRUB_ERR_NONE; +} + +/* Check if EHDR is a valid ELF header. */ +int +SUFFIX (grub_efiemu_check_header) (void *ehdr, grub_size_t size) +{ + Elf_Ehdr *e = ehdr; + + /* Check the header size. */ + if (size < sizeof (Elf_Ehdr)) + return 0; + + /* Check the magic numbers. */ + if (!SUFFIX (grub_arch_efiemu_check_header) (ehdr) + || e->e_ident[EI_MAG0] != ELFMAG0 + || e->e_ident[EI_MAG1] != ELFMAG1 + || e->e_ident[EI_MAG2] != ELFMAG2 + || e->e_ident[EI_MAG3] != ELFMAG3 + || e->e_ident[EI_VERSION] != EV_CURRENT + || e->e_version != EV_CURRENT) + return 0; + + return 1; +} + +/* Load all segments from memory specified by E. */ +static grub_err_t +grub_efiemu_load_segments (grub_efiemu_segment_t segs, const Elf_Ehdr *e) +{ + Elf_Shdr *s; + grub_efiemu_segment_t cur; + + grub_dprintf ("efiemu", "loading segments\n"); + + for (cur=segs; cur; cur = cur->next) + { + s = (Elf_Shdr *)cur->srcptr; + + if ((s->sh_flags & SHF_ALLOC) && s->sh_size) + { + void *addr; + + addr = (grub_uint8_t *) grub_efiemu_mm_obtain_request (cur->handle) + + cur->off; + + switch (s->sh_type) + { + case SHT_PROGBITS: + grub_memcpy (addr, (char *) e + s->sh_offset, s->sh_size); + break; + case SHT_NOBITS: + grub_memset (addr, 0, s->sh_size); + break; + } + } + } + + return GRUB_ERR_NONE; +} + +/* Get a string at offset OFFSET from strtab */ +static char * +grub_efiemu_get_string (unsigned offset, const Elf_Ehdr *e) +{ + unsigned i; + Elf_Shdr *s; + + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_STRTAB && offset < s->sh_size) + return (char *) e + s->sh_offset + offset; + return 0; +} + +/* Request memory for segments and fill segments info */ +static grub_err_t +grub_efiemu_init_segments (grub_efiemu_segment_t *segs, const Elf_Ehdr *e) +{ + unsigned i; + Elf_Shdr *s; + + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + { + if (s->sh_flags & SHF_ALLOC) + { + grub_efiemu_segment_t seg; + seg = (grub_efiemu_segment_t) grub_malloc (sizeof (*seg)); + if (! seg) + return grub_errno; + + if (s->sh_size) + { + seg->handle + = grub_efiemu_request_memalign + (s->sh_addralign, s->sh_size, + s->sh_flags & SHF_EXECINSTR ? GRUB_EFI_RUNTIME_SERVICES_CODE + : GRUB_EFI_RUNTIME_SERVICES_DATA); + if (seg->handle < 0) + { + grub_free (seg); + return grub_errno; + } + seg->off = 0; + } + + /* + .text-physical doesn't need to be relocated when switching to + virtual mode + */ + if (!grub_strcmp (grub_efiemu_get_string (s->sh_name, e), + ".text-physical")) + seg->ptv_rel_needed = 0; + else + seg->ptv_rel_needed = 1; + seg->size = s->sh_size; + seg->section = i; + seg->next = *segs; + seg->srcptr = s; + *segs = seg; + } + } + + return GRUB_ERR_NONE; +} + +/* Count symbols and relocators and allocate/request memory for them */ +static grub_err_t +grub_efiemu_count_symbols (const Elf_Ehdr *e) +{ + unsigned i; + Elf_Shdr *s; + int num = 0; + + /* Symbols */ + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_SYMTAB) + break; + + if (i == e->e_shnum) + return grub_error (GRUB_ERR_BAD_OS, N_("no symbol table")); + + grub_efiemu_nelfsyms = (unsigned) s->sh_size / (unsigned) s->sh_entsize; + grub_efiemu_elfsyms = (struct grub_efiemu_elf_sym *) + grub_malloc (sizeof (struct grub_efiemu_elf_sym) * grub_efiemu_nelfsyms); + + /* Relocators */ + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_REL || s->sh_type == SHT_RELA) + num += ((unsigned) s->sh_size) / ((unsigned) s->sh_entsize); + + grub_efiemu_request_symbols (num); + + return GRUB_ERR_NONE; +} + +/* Fill grub_efiemu_elfsyms with symbol values */ +static grub_err_t +grub_efiemu_resolve_symbols (grub_efiemu_segment_t segs, Elf_Ehdr *e) +{ + unsigned i; + Elf_Shdr *s; + Elf_Sym *sym; + const char *str; + Elf_Word size, entsize; + + grub_dprintf ("efiemu", "resolving symbols\n"); + + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_SYMTAB) + break; + + if (i == e->e_shnum) + return grub_error (GRUB_ERR_BAD_OS, N_("no symbol table")); + + sym = (Elf_Sym *) ((char *) e + s->sh_offset); + size = s->sh_size; + entsize = s->sh_entsize; + + s = (Elf_Shdr *) ((char *) e + e->e_shoff + e->e_shentsize * s->sh_link); + str = (char *) e + s->sh_offset; + + for (i = 0; + i < size / entsize; + i++, sym = (Elf_Sym *) ((char *) sym + entsize)) + { + unsigned char type = ELF_ST_TYPE (sym->st_info); + unsigned char bind = ELF_ST_BIND (sym->st_info); + int handle; + grub_off_t off; + grub_err_t err; + const char *name = str + sym->st_name; + grub_efiemu_elfsyms[i].section = sym->st_shndx; + switch (type) + { + case STT_NOTYPE: + /* Resolve a global symbol. */ + if (sym->st_name != 0 && sym->st_shndx == 0) + { + err = grub_efiemu_resolve_symbol (name, &handle, &off); + if (err) + return err; + grub_efiemu_elfsyms[i].handle = handle; + grub_efiemu_elfsyms[i].off = off; + } + else + sym->st_value = 0; + break; + + case STT_OBJECT: + err = grub_efiemu_get_section_addr (segs, sym->st_shndx, + &handle, &off); + if (err) + return err; + + off += sym->st_value; + if (bind != STB_LOCAL) + { + err = grub_efiemu_register_symbol (name, handle, off); + if (err) + return err; + } + grub_efiemu_elfsyms[i].handle = handle; + grub_efiemu_elfsyms[i].off = off; + break; + + case STT_FUNC: + err = grub_efiemu_get_section_addr (segs, sym->st_shndx, + &handle, &off); + if (err) + return err; + + off += sym->st_value; + if (bind != STB_LOCAL) + { + err = grub_efiemu_register_symbol (name, handle, off); + if (err) + return err; + } + grub_efiemu_elfsyms[i].handle = handle; + grub_efiemu_elfsyms[i].off = off; + break; + + case STT_SECTION: + err = grub_efiemu_get_section_addr (segs, sym->st_shndx, + &handle, &off); + if (err) + { + grub_efiemu_elfsyms[i].handle = 0; + grub_efiemu_elfsyms[i].off = 0; + grub_errno = GRUB_ERR_NONE; + break; + } + + grub_efiemu_elfsyms[i].handle = handle; + grub_efiemu_elfsyms[i].off = off; + break; + + case STT_FILE: + grub_efiemu_elfsyms[i].handle = 0; + grub_efiemu_elfsyms[i].off = 0; + break; + + default: + return grub_error (GRUB_ERR_BAD_MODULE, + "unknown symbol type `%d'", (int) type); + } + } + + return GRUB_ERR_NONE; +} + +/* Load runtime to the memory and request memory for definitive location*/ +grub_err_t +SUFFIX (grub_efiemu_loadcore_init) (void *core, const char *filename, + grub_size_t core_size, + grub_efiemu_segment_t *segments) +{ + Elf_Ehdr *e = (Elf_Ehdr *) core; + grub_err_t err; + + if (e->e_type != ET_REL) + return grub_error (GRUB_ERR_BAD_MODULE, N_("this ELF file is not of the right type")); + + /* Make sure that every section is within the core. */ + if ((grub_size_t) core_size < e->e_shoff + (grub_uint32_t) e->e_shentsize * e->e_shnum) + return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), + filename); + + err = grub_efiemu_init_segments (segments, core); + if (err) + return err; + err = grub_efiemu_count_symbols (core); + if (err) + return err; + + grub_efiemu_request_symbols (1); + return GRUB_ERR_NONE; +} + +/* Load runtime definitively */ +grub_err_t +SUFFIX (grub_efiemu_loadcore_load) (void *core, + grub_size_t core_size + __attribute__ ((unused)), + grub_efiemu_segment_t segments) +{ + grub_err_t err; + err = grub_efiemu_load_segments (segments, core); + if (err) + return err; + + err = grub_efiemu_resolve_symbols (segments, core); + if (err) + return err; + + err = SUFFIX (grub_arch_efiemu_relocate_symbols) (segments, + grub_efiemu_elfsyms, + core); + if (err) + return err; + + return GRUB_ERR_NONE; +} diff --git a/grub-core/efiemu/loadcore32.c b/grub-core/efiemu/loadcore32.c new file mode 100644 index 000000000..c1e033b78 --- /dev/null +++ b/grub-core/efiemu/loadcore32.c @@ -0,0 +1,22 @@ +/* This file contains definitions so that loadcore.c compiles for 32-bit */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define SUFFIX(x) x ## 32 +#define GRUB_TARGET_WORDSIZE 32 +#include "loadcore.c" diff --git a/grub-core/efiemu/loadcore64.c b/grub-core/efiemu/loadcore64.c new file mode 100644 index 000000000..ce7284fea --- /dev/null +++ b/grub-core/efiemu/loadcore64.c @@ -0,0 +1,22 @@ +/* This file contains definitions so that loadcore.c compiles for 64-bit */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define SUFFIX(x) x ## 64 +#define GRUB_TARGET_WORDSIZE 64 +#include "loadcore.c" diff --git a/grub-core/efiemu/loadcore_common.c b/grub-core/efiemu/loadcore_common.c new file mode 100644 index 000000000..64d79608f --- /dev/null +++ b/grub-core/efiemu/loadcore_common.c @@ -0,0 +1,196 @@ +/* Load runtime image of EFIemu. Functions common to 32/64-bit mode */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +/* Are we in 32 or 64-bit mode?*/ +static grub_efiemu_mode_t grub_efiemu_mode = GRUB_EFIEMU_NOTLOADED; +/* Runtime ELF file */ +static grub_ssize_t efiemu_core_size; +static void *efiemu_core = 0; +/* Linked list of segments */ +static grub_efiemu_segment_t efiemu_segments = 0; + +/* equivalent to sizeof (grub_efi_uintn_t) but taking the mode into account*/ +int +grub_efiemu_sizeof_uintn_t (void) +{ + if (grub_efiemu_mode == GRUB_EFIEMU32) + return 4; + if (grub_efiemu_mode == GRUB_EFIEMU64) + return 8; + return 0; +} + +/* Check the header and set mode */ +static grub_err_t +grub_efiemu_check_header (void *ehdr, grub_size_t size, + grub_efiemu_mode_t *mode) +{ + /* Check the magic numbers. */ + if ((*mode == GRUB_EFIEMU_NOTLOADED || *mode == GRUB_EFIEMU32) + && grub_efiemu_check_header32 (ehdr,size)) + { + *mode = GRUB_EFIEMU32; + return GRUB_ERR_NONE; + } + if ((*mode == GRUB_EFIEMU_NOTLOADED || *mode == GRUB_EFIEMU64) + && grub_efiemu_check_header64 (ehdr,size)) + { + *mode = GRUB_EFIEMU64; + return GRUB_ERR_NONE; + } + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF magic"); +} + +/* Unload segments */ +static int +grub_efiemu_unload_segs (grub_efiemu_segment_t seg) +{ + grub_efiemu_segment_t segn; + for (; seg; seg = segn) + { + segn = seg->next; + grub_efiemu_mm_return_request (seg->handle); + grub_free (seg); + } + return 1; +} + + +grub_err_t +grub_efiemu_loadcore_unload(void) +{ + switch (grub_efiemu_mode) + { + case GRUB_EFIEMU32: + grub_efiemu_loadcore_unload32 (); + break; + + case GRUB_EFIEMU64: + grub_efiemu_loadcore_unload64 (); + break; + + default: + break; + } + + grub_efiemu_mode = GRUB_EFIEMU_NOTLOADED; + + grub_free (efiemu_core); + efiemu_core = 0; + + grub_efiemu_unload_segs (efiemu_segments); + efiemu_segments = 0; + + grub_efiemu_free_syms (); + + return GRUB_ERR_NONE; +} + +/* Load runtime file and do some initial preparations */ +grub_err_t +grub_efiemu_loadcore_init (grub_file_t file, + const char *filename) +{ + grub_err_t err; + + efiemu_core_size = grub_file_size (file); + efiemu_core = 0; + efiemu_core = grub_malloc (efiemu_core_size); + if (! efiemu_core) + return grub_errno; + + if (grub_file_read (file, efiemu_core, efiemu_core_size) + != (int) efiemu_core_size) + { + grub_free (efiemu_core); + efiemu_core = 0; + return grub_errno; + } + + if (grub_efiemu_check_header (efiemu_core, efiemu_core_size, + &grub_efiemu_mode)) + { + grub_free (efiemu_core); + efiemu_core = 0; + return GRUB_ERR_BAD_MODULE; + } + + switch (grub_efiemu_mode) + { + case GRUB_EFIEMU32: + err = grub_efiemu_loadcore_init32 (efiemu_core, filename, + efiemu_core_size, + &efiemu_segments); + if (err) + { + grub_free (efiemu_core); + efiemu_core = 0; + grub_efiemu_mode = GRUB_EFIEMU_NOTLOADED; + return err; + } + break; + + case GRUB_EFIEMU64: + err = grub_efiemu_loadcore_init64 (efiemu_core, filename, + efiemu_core_size, + &efiemu_segments); + if (err) + { + grub_free (efiemu_core); + efiemu_core = 0; + grub_efiemu_mode = GRUB_EFIEMU_NOTLOADED; + return err; + } + break; + + default: + return grub_error (GRUB_ERR_BUG, "unknown EFI runtime"); + } + return GRUB_ERR_NONE; +} + +grub_err_t +grub_efiemu_loadcore_load (void) +{ + grub_err_t err; + switch (grub_efiemu_mode) + { + case GRUB_EFIEMU32: + err = grub_efiemu_loadcore_load32 (efiemu_core, efiemu_core_size, + efiemu_segments); + if (err) + grub_efiemu_loadcore_unload (); + return err; + case GRUB_EFIEMU64: + err = grub_efiemu_loadcore_load64 (efiemu_core, efiemu_core_size, + efiemu_segments); + if (err) + grub_efiemu_loadcore_unload (); + return err; + default: + return grub_error (GRUB_ERR_BUG, "unknown EFI runtime"); + } +} diff --git a/grub-core/efiemu/main.c b/grub-core/efiemu/main.c new file mode 100644 index 000000000..f6813b1ed --- /dev/null +++ b/grub-core/efiemu/main.c @@ -0,0 +1,328 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* This is an emulation of EFI runtime services. + This allows a more uniform boot on i386 machines. + As it emulates only runtime service it isn't able + to chainload EFI bootloader on non-EFI system. */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* System table. Two version depending on mode */ +grub_efi_system_table32_t *grub_efiemu_system_table32 = 0; +grub_efi_system_table64_t *grub_efiemu_system_table64 = 0; +/* Modules may need to execute some actions after memory allocation happens */ +static struct grub_efiemu_prepare_hook *efiemu_prepare_hooks = 0; +/* Linked list of configuration tables */ +static struct grub_efiemu_configuration_table *efiemu_config_tables = 0; +static int prepared = 0; + +/* Free all allocated space */ +grub_err_t +grub_efiemu_unload (void) +{ + struct grub_efiemu_configuration_table *cur, *d; + struct grub_efiemu_prepare_hook *curhook, *d2; + grub_efiemu_loadcore_unload (); + + grub_efiemu_mm_unload (); + + for (cur = efiemu_config_tables; cur;) + { + d = cur->next; + if (cur->unload) + cur->unload (cur->data); + grub_free (cur); + cur = d; + } + efiemu_config_tables = 0; + + for (curhook = efiemu_prepare_hooks; curhook;) + { + d2 = curhook->next; + if (curhook->unload) + curhook->unload (curhook->data); + grub_free (curhook); + curhook = d2; + } + efiemu_prepare_hooks = 0; + + prepared = 0; + + return GRUB_ERR_NONE; +} + +/* Remove previously registered table from the list */ +grub_err_t +grub_efiemu_unregister_configuration_table (grub_efi_guid_t guid) +{ + struct grub_efiemu_configuration_table *cur, *prev; + + /* Special treating if head is to remove */ + while (efiemu_config_tables + && !grub_memcmp (&(efiemu_config_tables->guid), &guid, sizeof (guid))) + { + if (efiemu_config_tables->unload) + efiemu_config_tables->unload (efiemu_config_tables->data); + cur = efiemu_config_tables->next; + grub_free (efiemu_config_tables); + efiemu_config_tables = cur; + } + if (!efiemu_config_tables) + return GRUB_ERR_NONE; + + /* Remove from chain */ + for (prev = efiemu_config_tables, cur = prev->next; cur;) + if (grub_memcmp (&(cur->guid), &guid, sizeof (guid)) == 0) + { + if (cur->unload) + cur->unload (cur->data); + prev->next = cur->next; + grub_free (cur); + cur = prev->next; + } + else + { + prev = cur; + cur = cur->next; + } + return GRUB_ERR_NONE; +} + +grub_err_t +grub_efiemu_register_prepare_hook (grub_err_t (*hook) (void *data), + void (*unload) (void *data), + void *data) +{ + struct grub_efiemu_prepare_hook *nhook; + nhook = (struct grub_efiemu_prepare_hook *) grub_malloc (sizeof (*nhook)); + if (! nhook) + return grub_errno; + nhook->hook = hook; + nhook->unload = unload; + nhook->data = data; + nhook->next = efiemu_prepare_hooks; + efiemu_prepare_hooks = nhook; + return GRUB_ERR_NONE; +} + +/* Register a configuration table either supplying the address directly + or with a hook +*/ +grub_err_t +grub_efiemu_register_configuration_table (grub_efi_guid_t guid, + void * (*get_table) (void *data), + void (*unload) (void *data), + void *data) +{ + struct grub_efiemu_configuration_table *tbl; + grub_err_t err; + + err = grub_efiemu_unregister_configuration_table (guid); + if (err) + return err; + + tbl = (struct grub_efiemu_configuration_table *) grub_malloc (sizeof (*tbl)); + if (! tbl) + return grub_errno; + + tbl->guid = guid; + tbl->get_table = get_table; + tbl->unload = unload; + tbl->data = data; + tbl->next = efiemu_config_tables; + efiemu_config_tables = tbl; + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_efiemu_unload (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *args[] __attribute__ ((unused))) +{ + return grub_efiemu_unload (); +} + +static grub_err_t +grub_cmd_efiemu_prepare (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char *args[] __attribute__ ((unused))) +{ + return grub_efiemu_prepare (); +} + + + +/* Load the runtime from the file FILENAME. */ +static grub_err_t +grub_efiemu_load_file (const char *filename) +{ + grub_file_t file; + grub_err_t err; + + file = grub_file_open (filename); + if (! file) + return grub_errno; + + err = grub_efiemu_mm_init (); + if (err) + { + grub_file_close (file); + grub_efiemu_unload (); + return err; + } + + grub_dprintf ("efiemu", "mm initialized\n"); + + err = grub_efiemu_loadcore_init (file, filename); + if (err) + { + grub_file_close (file); + grub_efiemu_unload (); + return err; + } + + grub_file_close (file); + + /* For configuration tables entry in system table. */ + grub_efiemu_request_symbols (1); + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_efiemu_autocore (void) +{ + const char *prefix; + char *filename; + const char *suffix; + grub_err_t err; + + if (grub_efiemu_sizeof_uintn_t () != 0) + return GRUB_ERR_NONE; + + prefix = grub_env_get ("prefix"); + + if (! prefix) + return grub_error (GRUB_ERR_FILE_NOT_FOUND, + N_("variable `%s' isn't set"), "prefix"); + + suffix = grub_efiemu_get_default_core_name (); + + filename = grub_xasprintf ("%s/" GRUB_TARGET_CPU "-" GRUB_PLATFORM "/%s", + prefix, suffix); + if (! filename) + return grub_errno; + + err = grub_efiemu_load_file (filename); + grub_free (filename); + if (err) + return err; +#ifndef GRUB_MACHINE_EMU + err = grub_machine_efiemu_init_tables (); + if (err) + return err; +#endif + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_efiemu_prepare (void) +{ + grub_err_t err; + + if (prepared) + return GRUB_ERR_NONE; + + err = grub_efiemu_autocore (); + if (err) + return err; + + grub_dprintf ("efiemu", "Preparing %d-bit efiemu\n", + 8 * grub_efiemu_sizeof_uintn_t ()); + + /* Create NVRAM. */ + grub_efiemu_pnvram (); + + prepared = 1; + + if (grub_efiemu_sizeof_uintn_t () == 4) + return grub_efiemu_prepare32 (efiemu_prepare_hooks, efiemu_config_tables); + else + return grub_efiemu_prepare64 (efiemu_prepare_hooks, efiemu_config_tables); +} + + +static grub_err_t +grub_cmd_efiemu_load (grub_command_t cmd __attribute__ ((unused)), + int argc, char *args[]) +{ + grub_err_t err; + + grub_efiemu_unload (); + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + err = grub_efiemu_load_file (args[0]); + if (err) + return err; +#ifndef GRUB_MACHINE_EMU + err = grub_machine_efiemu_init_tables (); + if (err) + return err; +#endif + return GRUB_ERR_NONE; +} + +static grub_command_t cmd_loadcore, cmd_prepare, cmd_unload; + +GRUB_MOD_INIT(efiemu) +{ + cmd_loadcore = grub_register_command ("efiemu_loadcore", + grub_cmd_efiemu_load, + N_("FILE"), + N_("Load and initialize EFI emulator.")); + cmd_prepare = grub_register_command ("efiemu_prepare", + grub_cmd_efiemu_prepare, + 0, + N_("Finalize loading of EFI emulator.")); + cmd_unload = grub_register_command ("efiemu_unload", grub_cmd_efiemu_unload, + 0, + N_("Unload EFI emulator.")); +} + +GRUB_MOD_FINI(efiemu) +{ + grub_unregister_command (cmd_loadcore); + grub_unregister_command (cmd_prepare); + grub_unregister_command (cmd_unload); +} diff --git a/grub-core/efiemu/mm.c b/grub-core/efiemu/mm.c new file mode 100644 index 000000000..52a032f7b --- /dev/null +++ b/grub-core/efiemu/mm.c @@ -0,0 +1,677 @@ +/* Memory management for efiemu */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +/* + To keep efiemu runtime contiguous this mm is special. + It uses deferred allocation. + In the first stage you may request memory with grub_efiemu_request_memalign + It will give you a handle with which in the second phase you can access your + memory with grub_efiemu_mm_obtain_request (handle). It's guaranteed that + subsequent calls with the same handle return the same result. You can't request any additional memory once you're in the second phase +*/ + +#include +#include +#include +#include +#include +#include + +struct grub_efiemu_memrequest +{ + struct grub_efiemu_memrequest *next; + grub_efi_memory_type_t type; + grub_size_t size; + grub_size_t align_overhead; + int handle; + void *val; +}; +/* Linked list of requested memory. */ +static struct grub_efiemu_memrequest *memrequests = 0; +/* Memory map. */ +static grub_efi_memory_descriptor_t *efiemu_mmap = 0; +/* Pointer to allocated memory */ +static void *resident_memory = 0; +/* Size of requested memory per type */ +static grub_size_t requested_memory[GRUB_EFI_MAX_MEMORY_TYPE]; +/* How many slots is allocated for memory_map and how many are already used */ +static int mmap_reserved_size = 0, mmap_num = 0; + +/* Add a memory region to map*/ +static grub_err_t +grub_efiemu_add_to_mmap (grub_uint64_t start, grub_uint64_t size, + grub_efi_memory_type_t type) +{ + grub_uint64_t page_start, npages; + + /* Extend map if necessary*/ + if (mmap_num >= mmap_reserved_size) + { + void *old; + mmap_reserved_size = 2 * (mmap_reserved_size + 1); + old = efiemu_mmap; + efiemu_mmap = (grub_efi_memory_descriptor_t *) + grub_realloc (efiemu_mmap, mmap_reserved_size + * sizeof (grub_efi_memory_descriptor_t)); + if (!efiemu_mmap) + { + grub_free (old); + return grub_errno; + } + } + + /* Fill slot*/ + page_start = start - (start % GRUB_EFIEMU_PAGESIZE); + npages = (size + (start % GRUB_EFIEMU_PAGESIZE) + GRUB_EFIEMU_PAGESIZE - 1) + / GRUB_EFIEMU_PAGESIZE; + efiemu_mmap[mmap_num].physical_start = page_start; + efiemu_mmap[mmap_num].virtual_start = page_start; + efiemu_mmap[mmap_num].num_pages = npages; + efiemu_mmap[mmap_num].type = type; + mmap_num++; + + return GRUB_ERR_NONE; +} + +/* Request a resident memory of type TYPE of size SIZE aligned at ALIGN + ALIGN must be a divisor of page size (if it's a divisor of 4096 + it should be ok on all platforms) + */ +int +grub_efiemu_request_memalign (grub_size_t align, grub_size_t size, + grub_efi_memory_type_t type) +{ + grub_size_t align_overhead; + struct grub_efiemu_memrequest *ret, *cur, *prev; + /* Check that the request is correct */ + if (type <= GRUB_EFI_LOADER_CODE || type == GRUB_EFI_PERSISTENT_MEMORY || + type >= GRUB_EFI_MAX_MEMORY_TYPE) + return -2; + + /* Add new size to requested size */ + align_overhead = align - (requested_memory[type]%align); + if (align_overhead == align) + align_overhead = 0; + requested_memory[type] += align_overhead + size; + + /* Remember the request */ + ret = grub_zalloc (sizeof (*ret)); + if (!ret) + return -1; + ret->type = type; + ret->size = size; + ret->align_overhead = align_overhead; + prev = 0; + + /* Add request to the end of the chain. + It should be at the end because otherwise alignment isn't guaranteed */ + for (cur = memrequests; cur; prev = cur, cur = cur->next); + if (prev) + { + ret->handle = prev->handle + 1; + prev->next = ret; + } + else + { + ret->handle = 1; /* Avoid 0 handle*/ + memrequests = ret; + } + return ret->handle; +} + +/* Really allocate the memory */ +static grub_err_t +efiemu_alloc_requests (void) +{ + grub_size_t align_overhead = 0; + grub_uint8_t *curptr, *typestart; + struct grub_efiemu_memrequest *cur; + grub_size_t total_alloc = 0; + unsigned i; + /* Order of memory regions */ + grub_efi_memory_type_t reqorder[] = + { + /* First come regions usable by OS*/ + GRUB_EFI_LOADER_CODE, + GRUB_EFI_LOADER_DATA, + GRUB_EFI_BOOT_SERVICES_CODE, + GRUB_EFI_BOOT_SERVICES_DATA, + GRUB_EFI_CONVENTIONAL_MEMORY, + GRUB_EFI_ACPI_RECLAIM_MEMORY, + + /* Then memory used by runtime */ + /* This way all our regions are in a single block */ + GRUB_EFI_RUNTIME_SERVICES_CODE, + GRUB_EFI_RUNTIME_SERVICES_DATA, + GRUB_EFI_ACPI_MEMORY_NVS, + + /* And then unavailable memory types. This is more for a completeness. + You should double think before allocating memory of any of these types + */ + GRUB_EFI_UNUSABLE_MEMORY, + GRUB_EFI_MEMORY_MAPPED_IO, + GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE, + GRUB_EFI_PAL_CODE + + /* + * These are not allocatable: + * GRUB_EFI_RESERVED_MEMORY_TYPE + * GRUB_EFI_PERSISTENT_MEMORY + * >= GRUB_EFI_MAX_MEMORY_TYPE + */ + }; + + /* Compute total memory needed */ + for (i = 0; i < sizeof (reqorder) / sizeof (reqorder[0]); i++) + { + align_overhead = GRUB_EFIEMU_PAGESIZE + - (requested_memory[reqorder[i]] % GRUB_EFIEMU_PAGESIZE); + if (align_overhead == GRUB_EFIEMU_PAGESIZE) + align_overhead = 0; + total_alloc += requested_memory[reqorder[i]] + align_overhead; + } + + /* Allocate the whole memory in one block */ + resident_memory = grub_memalign (GRUB_EFIEMU_PAGESIZE, total_alloc); + if (!resident_memory) + return grub_errno; + + /* Split the memory into blocks by type */ + curptr = resident_memory; + for (i = 0; i < sizeof (reqorder) / sizeof (reqorder[0]); i++) + { + if (!requested_memory[reqorder[i]]) + continue; + typestart = curptr; + + /* Write pointers to requests */ + for (cur = memrequests; cur; cur = cur->next) + if (cur->type == reqorder[i]) + { + curptr = ((grub_uint8_t *)curptr) + cur->align_overhead; + cur->val = curptr; + curptr = ((grub_uint8_t *)curptr) + cur->size; + } + + /* Ensure that the regions are page-aligned */ + align_overhead = GRUB_EFIEMU_PAGESIZE + - (requested_memory[reqorder[i]] % GRUB_EFIEMU_PAGESIZE); + if (align_overhead == GRUB_EFIEMU_PAGESIZE) + align_overhead = 0; + curptr = ((grub_uint8_t *) curptr) + align_overhead; + + /* Add the region to memory map */ + grub_efiemu_add_to_mmap ((grub_addr_t) typestart, + curptr - typestart, reqorder[i]); + } + + return GRUB_ERR_NONE; +} + +/* Get a pointer to requested memory from handle */ +void * +grub_efiemu_mm_obtain_request (int handle) +{ + struct grub_efiemu_memrequest *cur; + for (cur = memrequests; cur; cur = cur->next) + if (cur->handle == handle) + return cur->val; + return 0; +} + +/* Get type of requested memory by handle */ +grub_efi_memory_type_t +grub_efiemu_mm_get_type (int handle) +{ + struct grub_efiemu_memrequest *cur; + for (cur = memrequests; cur; cur = cur->next) + if (cur->handle == handle) + return cur->type; + return 0; +} + +/* Free a request */ +void +grub_efiemu_mm_return_request (int handle) +{ + struct grub_efiemu_memrequest *cur, *prev; + + /* Remove head if necessary */ + while (memrequests && memrequests->handle == handle) + { + cur = memrequests->next; + grub_free (memrequests); + memrequests = cur; + } + if (!memrequests) + return; + + /* Remove request from a middle of chain*/ + for (prev = memrequests, cur = prev->next; cur;) + if (cur->handle == handle) + { + prev->next = cur->next; + grub_free (cur); + cur = prev->next; + } + else + { + prev = cur; + cur = prev->next; + } +} + +/* Helper for grub_efiemu_mmap_init. */ +static int +bounds_hook (grub_uint64_t addr __attribute__ ((unused)), + grub_uint64_t size __attribute__ ((unused)), + grub_memory_type_t type __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + mmap_reserved_size++; + return 0; +} + +/* Reserve space for memory map */ +static grub_err_t +grub_efiemu_mmap_init (void) +{ + // the place for memory used by efiemu itself + mmap_reserved_size = GRUB_EFI_MAX_MEMORY_TYPE + 1; + +#ifndef GRUB_MACHINE_EMU + grub_machine_mmap_iterate (bounds_hook, NULL); +#endif + + return GRUB_ERR_NONE; +} + +/* This is a drop-in replacement of grub_efi_get_memory_map */ +/* Get the memory map as defined in the EFI spec. Return 1 if successful, + return 0 if partial, or return -1 if an error occurs. */ +int +grub_efiemu_get_memory_map (grub_efi_uintn_t *memory_map_size, + grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *descriptor_size, + grub_efi_uint32_t *descriptor_version) +{ + if (!efiemu_mmap) + { + grub_error (GRUB_ERR_INVALID_COMMAND, + "you need to first launch efiemu_prepare"); + return -1; + } + + if (*memory_map_size < mmap_num * sizeof (grub_efi_memory_descriptor_t)) + { + *memory_map_size = mmap_num * sizeof (grub_efi_memory_descriptor_t); + return 0; + } + + *memory_map_size = mmap_num * sizeof (grub_efi_memory_descriptor_t); + grub_memcpy (memory_map, efiemu_mmap, *memory_map_size); + if (descriptor_size) + *descriptor_size = sizeof (grub_efi_memory_descriptor_t); + if (descriptor_version) + *descriptor_version = 1; + if (map_key) + *map_key = 0; + + return 1; +} + +grub_err_t +grub_efiemu_finish_boot_services (grub_efi_uintn_t *memory_map_size, + grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *descriptor_size, + grub_efi_uint32_t *descriptor_version) +{ + int val = grub_efiemu_get_memory_map (memory_map_size, + memory_map, map_key, + descriptor_size, + descriptor_version); + if (val == 1) + return GRUB_ERR_NONE; + if (val == -1) + return grub_errno; + return grub_error (GRUB_ERR_IO, "memory map buffer is too small"); +} + + +/* Free everything */ +grub_err_t +grub_efiemu_mm_unload (void) +{ + struct grub_efiemu_memrequest *cur, *d; + for (cur = memrequests; cur;) + { + d = cur->next; + grub_free (cur); + cur = d; + } + memrequests = 0; + grub_memset (&requested_memory, 0, sizeof (requested_memory)); + grub_free (resident_memory); + resident_memory = 0; + grub_free (efiemu_mmap); + efiemu_mmap = 0; + mmap_reserved_size = mmap_num = 0; + return GRUB_ERR_NONE; +} + +/* This function should be called before doing any requests */ +grub_err_t +grub_efiemu_mm_init (void) +{ + grub_err_t err; + + err = grub_efiemu_mm_unload (); + if (err) + return err; + + grub_efiemu_mmap_init (); + + return GRUB_ERR_NONE; +} + +/* Helper for grub_efiemu_mmap_fill. */ +static int +fill_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type, + void *data __attribute__ ((unused))) + { + switch (type) + { + case GRUB_MEMORY_AVAILABLE: + return grub_efiemu_add_to_mmap (addr, size, + GRUB_EFI_CONVENTIONAL_MEMORY); + + case GRUB_MEMORY_ACPI: + return grub_efiemu_add_to_mmap (addr, size, + GRUB_EFI_ACPI_RECLAIM_MEMORY); + + case GRUB_MEMORY_NVS: + return grub_efiemu_add_to_mmap (addr, size, + GRUB_EFI_ACPI_MEMORY_NVS); + + case GRUB_MEMORY_PERSISTENT: + case GRUB_MEMORY_PERSISTENT_LEGACY: + return grub_efiemu_add_to_mmap (addr, size, + GRUB_EFI_PERSISTENT_MEMORY); + default: + grub_dprintf ("efiemu", + "Unknown memory type %d. Assuming unusable\n", type); + /* FALLTHROUGH */ + case GRUB_MEMORY_RESERVED: + return grub_efiemu_add_to_mmap (addr, size, + GRUB_EFI_UNUSABLE_MEMORY); + } + } + +/* Copy host memory map */ +static grub_err_t +grub_efiemu_mmap_fill (void) +{ +#ifndef GRUB_MACHINE_EMU + grub_machine_mmap_iterate (fill_hook, NULL); +#endif + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_efiemu_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + unsigned i; + + for (i = 0; i < (unsigned) mmap_num; i++) + switch (efiemu_mmap[i].type) + { + case GRUB_EFI_RUNTIME_SERVICES_CODE: + hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096, + GRUB_MEMORY_CODE, hook_data); + break; + + case GRUB_EFI_UNUSABLE_MEMORY: + hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096, + GRUB_MEMORY_BADRAM, hook_data); + break; + + case GRUB_EFI_RESERVED_MEMORY_TYPE: + case GRUB_EFI_RUNTIME_SERVICES_DATA: + case GRUB_EFI_MEMORY_MAPPED_IO: + case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE: + case GRUB_EFI_PAL_CODE: + default: + hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096, + GRUB_MEMORY_RESERVED, hook_data); + break; + + case GRUB_EFI_LOADER_CODE: + case GRUB_EFI_LOADER_DATA: + case GRUB_EFI_BOOT_SERVICES_CODE: + case GRUB_EFI_BOOT_SERVICES_DATA: + case GRUB_EFI_CONVENTIONAL_MEMORY: + hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096, + GRUB_MEMORY_AVAILABLE, hook_data); + break; + + case GRUB_EFI_ACPI_RECLAIM_MEMORY: + hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096, + GRUB_MEMORY_ACPI, hook_data); + break; + + case GRUB_EFI_ACPI_MEMORY_NVS: + hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096, + GRUB_MEMORY_NVS, hook_data); + break; + + case GRUB_EFI_PERSISTENT_MEMORY: + hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096, + GRUB_MEMORY_PERSISTENT, hook_data); + break; + + } + + return 0; +} + + +/* This function resolves overlapping regions and sorts the memory map + It uses scanline (sweeping) algorithm + */ +static grub_err_t +grub_efiemu_mmap_sort_and_uniq (void) +{ + /* If same page is used by multiple types it's resolved + according to priority + 0 - free memory + 1 - memory immediately usable after ExitBootServices + 2 - memory usable after loading ACPI tables + 3 - efiemu memory + 4 - unusable memory + */ + int priority[GRUB_EFI_MAX_MEMORY_TYPE] = + { + [GRUB_EFI_RESERVED_MEMORY_TYPE] = 4, + [GRUB_EFI_LOADER_CODE] = 1, + [GRUB_EFI_LOADER_DATA] = 1, + [GRUB_EFI_BOOT_SERVICES_CODE] = 1, + [GRUB_EFI_BOOT_SERVICES_DATA] = 1, + [GRUB_EFI_RUNTIME_SERVICES_CODE] = 3, + [GRUB_EFI_RUNTIME_SERVICES_DATA] = 3, + [GRUB_EFI_CONVENTIONAL_MEMORY] = 0, + [GRUB_EFI_UNUSABLE_MEMORY] = 4, + [GRUB_EFI_ACPI_RECLAIM_MEMORY] = 2, + [GRUB_EFI_ACPI_MEMORY_NVS] = 3, + [GRUB_EFI_MEMORY_MAPPED_IO] = 4, + [GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE] = 4, + [GRUB_EFI_PAL_CODE] = 4, + [GRUB_EFI_PERSISTENT_MEMORY] = 4 + }; + + int i, j, k, done; + + /* Scanline events */ + struct grub_efiemu_mmap_scan + { + /* At which memory address*/ + grub_uint64_t pos; + /* 0 = region starts, 1 = region ends */ + int type; + /* Which type of memory region */ + grub_efi_memory_type_t memtype; + }; + struct grub_efiemu_mmap_scan *scanline_events; + struct grub_efiemu_mmap_scan t; + + /* Previous scanline event */ + grub_uint64_t lastaddr; + int lasttype; + /* Current scanline event */ + int curtype; + /* how many regions of given type overlap at current location */ + int present[GRUB_EFI_MAX_MEMORY_TYPE]; + /* Here is stored the resulting memory map*/ + grub_efi_memory_descriptor_t *result; + + /* Initialize variables*/ + grub_memset (present, 0, sizeof (int) * GRUB_EFI_MAX_MEMORY_TYPE); + scanline_events = (struct grub_efiemu_mmap_scan *) + grub_malloc (sizeof (struct grub_efiemu_mmap_scan) * 2 * mmap_num); + + /* Number of chunks can't increase more than by factor of 2 */ + result = (grub_efi_memory_descriptor_t *) + grub_malloc (sizeof (grub_efi_memory_descriptor_t) * 2 * mmap_num); + if (!result || !scanline_events) + { + grub_free (result); + grub_free (scanline_events); + return grub_errno; + } + + /* Register scanline events */ + for (i = 0; i < mmap_num; i++) + { + scanline_events[2 * i].pos = efiemu_mmap[i].physical_start; + scanline_events[2 * i].type = 0; + scanline_events[2 * i].memtype = efiemu_mmap[i].type; + scanline_events[2 * i + 1].pos = efiemu_mmap[i].physical_start + + efiemu_mmap[i].num_pages * GRUB_EFIEMU_PAGESIZE; + scanline_events[2 * i + 1].type = 1; + scanline_events[2 * i + 1].memtype = efiemu_mmap[i].type; + } + + /* Primitive bubble sort. It has complexity O(n^2) but since we're + unlikely to have more than 100 chunks it's probably one of the + fastest for one purpose */ + done = 1; + while (done) + { + done = 0; + for (i = 0; i < 2 * mmap_num - 1; i++) + if (scanline_events[i + 1].pos < scanline_events[i].pos) + { + t = scanline_events[i + 1]; + scanline_events[i + 1] = scanline_events[i]; + scanline_events[i] = t; + done = 1; + } + } + + /* Pointer in resulting memory map */ + j = 0; + lastaddr = scanline_events[0].pos; + lasttype = scanline_events[0].memtype; + for (i = 0; i < 2 * mmap_num; i++) + { + /* Process event */ + if (scanline_events[i].type) + present[scanline_events[i].memtype]--; + else + present[scanline_events[i].memtype]++; + + /* Determine current region type */ + curtype = -1; + for (k = 0; k < GRUB_EFI_MAX_MEMORY_TYPE; k++) + if (present[k] && (curtype == -1 || priority[k] > priority[curtype])) + curtype = k; + + /* Add memory region to resulting map if necessary */ + if ((curtype == -1 || curtype != lasttype) + && lastaddr != scanline_events[i].pos + && lasttype != -1) + { + result[j].virtual_start = result[j].physical_start = lastaddr; + result[j].num_pages = (scanline_events[i].pos - lastaddr) + / GRUB_EFIEMU_PAGESIZE; + result[j].type = lasttype; + + /* We set runtime attribute on pages we need to be mapped */ + result[j].attribute + = (lasttype == GRUB_EFI_RUNTIME_SERVICES_CODE + || lasttype == GRUB_EFI_RUNTIME_SERVICES_DATA) + ? GRUB_EFI_MEMORY_RUNTIME : 0; + grub_dprintf ("efiemu", + "mmap entry: type %d start 0x%llx 0x%llx pages\n", + result[j].type, + result[j].physical_start, result[j].num_pages); + j++; + } + + /* Update last values if necessary */ + if (curtype == -1 || curtype != lasttype) + { + lasttype = curtype; + lastaddr = scanline_events[i].pos; + } + } + + grub_free (scanline_events); + + /* Shrink resulting memory map to really used size and replace efiemu_mmap + by new value */ + grub_free (efiemu_mmap); + efiemu_mmap = grub_realloc (result, j * sizeof (*result)); + return GRUB_ERR_NONE; +} + +/* This function is called to switch from first to second phase */ +grub_err_t +grub_efiemu_mm_do_alloc (void) +{ + grub_err_t err; + + /* Preallocate mmap */ + efiemu_mmap = (grub_efi_memory_descriptor_t *) + grub_malloc (mmap_reserved_size * sizeof (grub_efi_memory_descriptor_t)); + if (!efiemu_mmap) + { + grub_efiemu_unload (); + return grub_errno; + } + + err = efiemu_alloc_requests (); + if (err) + return err; + err = grub_efiemu_mmap_fill (); + if (err) + return err; + return grub_efiemu_mmap_sort_and_uniq (); +} diff --git a/grub-core/efiemu/pnvram.c b/grub-core/efiemu/pnvram.c new file mode 100644 index 000000000..c5c3d4bd3 --- /dev/null +++ b/grub-core/efiemu/pnvram.c @@ -0,0 +1,268 @@ +/* Export pnvram and some variables for runtime */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Place for final location of variables */ +static int nvram_handle = 0; +static int nvramsize_handle = 0; +static int high_monotonic_count_handle = 0; +static int timezone_handle = 0; +static int accuracy_handle = 0; +static int daylight_handle = 0; + +static grub_size_t nvramsize; + +/* Parse signed value */ +static int +grub_strtosl (const char *arg, char **end, int base) +{ + if (arg[0] == '-') + return -grub_strtoul (arg + 1, end, base); + return grub_strtoul (arg, end, base); +} + +static inline int +hextoval (char c) +{ + if (c >= '0' && c <= '9') + return c - '0'; + if (c >= 'a' && c <= 'z') + return c - 'a' + 10; + if (c >= 'A' && c <= 'Z') + return c - 'A' + 10; + return 0; +} + +static inline grub_err_t +unescape (char *in, char *out, char *outmax, int *len) +{ + char *ptr, *dptr; + dptr = out; + for (ptr = in; *ptr && dptr < outmax; ) + if (*ptr == '%' && ptr[1] && ptr[2]) + { + *dptr = (hextoval (ptr[1]) << 4) | (hextoval (ptr[2])); + ptr += 3; + dptr++; + } + else + { + *dptr = *ptr; + ptr++; + dptr++; + } + if (dptr == outmax) + return grub_error (GRUB_ERR_OUT_OF_MEMORY, + "too many NVRAM variables for reserved variable space." + " Try increasing EfiEmu.pnvram.size"); + *len = dptr - out; + return 0; +} + +/* Export stuff for efiemu */ +static grub_err_t +nvram_set (void * data __attribute__ ((unused))) +{ + const char *env; + /* Take definitive pointers */ + char *nvram = grub_efiemu_mm_obtain_request (nvram_handle); + grub_uint32_t *nvramsize_def + = grub_efiemu_mm_obtain_request (nvramsize_handle); + grub_uint32_t *high_monotonic_count + = grub_efiemu_mm_obtain_request (high_monotonic_count_handle); + grub_int16_t *timezone + = grub_efiemu_mm_obtain_request (timezone_handle); + grub_uint8_t *daylight + = grub_efiemu_mm_obtain_request (daylight_handle); + grub_uint32_t *accuracy + = grub_efiemu_mm_obtain_request (accuracy_handle); + char *nvramptr; + struct grub_env_var *var; + + /* Copy to definitive loaction */ + grub_dprintf ("efiemu", "preparing pnvram\n"); + + env = grub_env_get ("EfiEmu.pnvram.high_monotonic_count"); + *high_monotonic_count = env ? grub_strtoul (env, 0, 0) : 1; + env = grub_env_get ("EfiEmu.pnvram.timezone"); + *timezone = env ? grub_strtosl (env, 0, 0) : GRUB_EFI_UNSPECIFIED_TIMEZONE; + env = grub_env_get ("EfiEmu.pnvram.accuracy"); + *accuracy = env ? grub_strtoul (env, 0, 0) : 50000000; + env = grub_env_get ("EfiEmu.pnvram.daylight"); + *daylight = env ? grub_strtoul (env, 0, 0) : 0; + + nvramptr = nvram; + grub_memset (nvram, 0, nvramsize); + FOR_SORTED_ENV (var) + { + char *guid, *attr, *name, *varname; + struct efi_variable *efivar; + int len = 0; + int i; + grub_uint64_t guidcomp; + + if (grub_memcmp (var->name, "EfiEmu.pnvram.", + sizeof ("EfiEmu.pnvram.") - 1) != 0) + continue; + + guid = var->name + sizeof ("EfiEmu.pnvram.") - 1; + + attr = grub_strchr (guid, '.'); + if (!attr) + continue; + attr++; + + name = grub_strchr (attr, '.'); + if (!name) + continue; + name++; + + efivar = (struct efi_variable *) nvramptr; + if (nvramptr - nvram + sizeof (struct efi_variable) > nvramsize) + return grub_error (GRUB_ERR_OUT_OF_MEMORY, + "too many NVRAM variables for reserved variable space." + " Try increasing EfiEmu.pnvram.size"); + + nvramptr += sizeof (struct efi_variable); + + efivar->guid.data1 = grub_cpu_to_le32 (grub_strtoul (guid, &guid, 16)); + if (*guid != '-') + continue; + guid++; + + efivar->guid.data2 = grub_cpu_to_le16 (grub_strtoul (guid, &guid, 16)); + if (*guid != '-') + continue; + guid++; + + efivar->guid.data3 = grub_cpu_to_le16 (grub_strtoul (guid, &guid, 16)); + if (*guid != '-') + continue; + guid++; + + guidcomp = grub_strtoull (guid, 0, 16); + for (i = 0; i < 8; i++) + efivar->guid.data4[i] = (guidcomp >> (56 - 8 * i)) & 0xff; + + efivar->attributes = grub_strtoull (attr, 0, 16); + + varname = grub_malloc (grub_strlen (name) + 1); + if (! varname) + return grub_errno; + + if (unescape (name, varname, varname + grub_strlen (name) + 1, &len)) + break; + + len = grub_utf8_to_utf16 ((grub_uint16_t *) nvramptr, + (nvramsize - (nvramptr - nvram)) / 2, + (grub_uint8_t *) varname, len, NULL); + + nvramptr += 2 * len; + *((grub_uint16_t *) nvramptr) = 0; + nvramptr += 2; + efivar->namelen = 2 * len + 2; + + if (unescape (var->value, nvramptr, nvram + nvramsize, &len)) + { + efivar->namelen = 0; + break; + } + + nvramptr += len; + + efivar->size = len; + } + if (grub_errno) + return grub_errno; + + *nvramsize_def = nvramsize; + + /* Register symbols */ + grub_efiemu_register_symbol ("efiemu_variables", nvram_handle, 0); + grub_efiemu_register_symbol ("efiemu_varsize", nvramsize_handle, 0); + grub_efiemu_register_symbol ("efiemu_high_monotonic_count", + high_monotonic_count_handle, 0); + grub_efiemu_register_symbol ("efiemu_time_zone", timezone_handle, 0); + grub_efiemu_register_symbol ("efiemu_time_daylight", daylight_handle, 0); + grub_efiemu_register_symbol ("efiemu_time_accuracy", + accuracy_handle, 0); + + return GRUB_ERR_NONE; +} + +static void +nvram_unload (void * data __attribute__ ((unused))) +{ + grub_efiemu_mm_return_request (nvram_handle); + grub_efiemu_mm_return_request (nvramsize_handle); + grub_efiemu_mm_return_request (high_monotonic_count_handle); + grub_efiemu_mm_return_request (timezone_handle); + grub_efiemu_mm_return_request (accuracy_handle); + grub_efiemu_mm_return_request (daylight_handle); +} + +grub_err_t +grub_efiemu_pnvram (void) +{ + const char *size; + grub_err_t err; + + nvramsize = 0; + + size = grub_env_get ("EfiEmu.pnvram.size"); + if (size) + nvramsize = grub_strtoul (size, 0, 0); + + if (!nvramsize) + nvramsize = 2048; + + err = grub_efiemu_register_prepare_hook (nvram_set, nvram_unload, 0); + if (err) + return err; + + nvram_handle + = grub_efiemu_request_memalign (1, nvramsize, + GRUB_EFI_RUNTIME_SERVICES_DATA); + nvramsize_handle + = grub_efiemu_request_memalign (1, sizeof (grub_uint32_t), + GRUB_EFI_RUNTIME_SERVICES_DATA); + high_monotonic_count_handle + = grub_efiemu_request_memalign (1, sizeof (grub_uint32_t), + GRUB_EFI_RUNTIME_SERVICES_DATA); + timezone_handle + = grub_efiemu_request_memalign (1, sizeof (grub_uint16_t), + GRUB_EFI_RUNTIME_SERVICES_DATA); + daylight_handle + = grub_efiemu_request_memalign (1, sizeof (grub_uint8_t), + GRUB_EFI_RUNTIME_SERVICES_DATA); + accuracy_handle + = grub_efiemu_request_memalign (1, sizeof (grub_uint32_t), + GRUB_EFI_RUNTIME_SERVICES_DATA); + + return GRUB_ERR_NONE; +} diff --git a/grub-core/efiemu/prepare.c b/grub-core/efiemu/prepare.c new file mode 100644 index 000000000..99ddb5abb --- /dev/null +++ b/grub-core/efiemu/prepare.c @@ -0,0 +1,169 @@ +/* Prepare efiemu. E.g. allocate memory, load the runtime + to appropriate place, etc */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +grub_err_t +SUFFIX (grub_efiemu_prepare) (struct grub_efiemu_prepare_hook *prepare_hooks, + struct grub_efiemu_configuration_table + *config_tables) +{ + grub_err_t err; + int conftable_handle; + struct grub_efiemu_configuration_table *cur; + struct grub_efiemu_prepare_hook *curhook; + + int cntconftables = 0; + struct SUFFIX (grub_efiemu_configuration_table) *conftables = 0; + int i; + int handle; + grub_off_t off; + + grub_dprintf ("efiemu", "Preparing EfiEmu\n"); + + /* Request space for the list of configuration tables */ + for (cur = config_tables; cur; cur = cur->next) + cntconftables++; + conftable_handle + = grub_efiemu_request_memalign (GRUB_EFIEMU_PAGESIZE, + cntconftables * sizeof (*conftables), + GRUB_EFI_RUNTIME_SERVICES_DATA); + + /* Switch from phase 1 (counting) to phase 2 (real job) */ + grub_efiemu_alloc_syms (); + grub_efiemu_mm_do_alloc (); + grub_efiemu_write_sym_markers (); + + grub_efiemu_system_table32 = 0; + grub_efiemu_system_table64 = 0; + + /* Execute hooks */ + for (curhook = prepare_hooks; curhook; curhook = curhook->next) + curhook->hook (curhook->data); + + /* Move runtime to its due place */ + err = grub_efiemu_loadcore_load (); + if (err) + { + grub_efiemu_unload (); + return err; + } + + err = grub_efiemu_resolve_symbol ("efiemu_system_table", &handle, &off); + if (err) + { + grub_efiemu_unload (); + return err; + } + + SUFFIX (grub_efiemu_system_table) + = (struct SUFFIX (grub_efi_system_table) *) + ((grub_uint8_t *) grub_efiemu_mm_obtain_request (handle) + off); + + /* Put pointer to the list of configuration tables in system table */ + err = grub_efiemu_write_value + (&(SUFFIX (grub_efiemu_system_table)->configuration_table), 0, + conftable_handle, 0, 1, + sizeof (SUFFIX (grub_efiemu_system_table)->configuration_table)); + if (err) + { + grub_efiemu_unload (); + return err; + } + + SUFFIX(grub_efiemu_system_table)->num_table_entries = cntconftables; + + /* Fill the list of configuration tables */ + conftables = (struct SUFFIX (grub_efiemu_configuration_table) *) + grub_efiemu_mm_obtain_request (conftable_handle); + i = 0; + for (cur = config_tables; cur; cur = cur->next, i++) + { + grub_memcpy (&(conftables[i].vendor_guid), &(cur->guid), + sizeof (cur->guid)); + if (cur->get_table) + conftables[i].vendor_table = (grub_addr_t) cur->get_table (cur->data); + else + conftables[i].vendor_table = (grub_addr_t) cur->data; + } + + err = SUFFIX (grub_efiemu_crc) (); + if (err) + { + grub_efiemu_unload (); + return err; + } + + grub_dprintf ("efiemu","system_table = %p, conftables = %p (%d entries)\n", + SUFFIX (grub_efiemu_system_table), conftables, cntconftables); + + return GRUB_ERR_NONE; +} + +grub_err_t +SUFFIX (grub_efiemu_crc) (void) +{ + grub_err_t err; + int handle; + grub_off_t off; + struct SUFFIX (grub_efiemu_runtime_services) *runtime_services; + grub_uint32_t crc32_val; + + if (GRUB_MD_CRC32->mdlen != 4) + return grub_error (GRUB_ERR_BUG, "incorrect mdlen"); + + /* compute CRC32 of runtime_services */ + err = grub_efiemu_resolve_symbol ("efiemu_runtime_services", + &handle, &off); + if (err) + return err; + + runtime_services = (struct SUFFIX (grub_efiemu_runtime_services) *) + ((grub_uint8_t *) grub_efiemu_mm_obtain_request (handle) + off); + + runtime_services->hdr.crc32 = 0; + + grub_crypto_hash (GRUB_MD_CRC32, &crc32_val, + runtime_services, runtime_services->hdr.header_size); + runtime_services->hdr.crc32 = + grub_be_to_cpu32(crc32_val); + + err = grub_efiemu_resolve_symbol ("efiemu_system_table", &handle, &off); + if (err) + return err; + + /* compute CRC32 of system table */ + SUFFIX (grub_efiemu_system_table)->hdr.crc32 = 0; + grub_crypto_hash (GRUB_MD_CRC32, &crc32_val, + SUFFIX (grub_efiemu_system_table), + SUFFIX (grub_efiemu_system_table)->hdr.header_size); + SUFFIX (grub_efiemu_system_table)->hdr.crc32 = + grub_be_to_cpu32(crc32_val); + + grub_dprintf ("efiemu","system_table = %p, runtime_services = %p\n", + SUFFIX (grub_efiemu_system_table), runtime_services); + + return GRUB_ERR_NONE; +} diff --git a/grub-core/efiemu/prepare32.c b/grub-core/efiemu/prepare32.c new file mode 100644 index 000000000..fd6109ea3 --- /dev/null +++ b/grub-core/efiemu/prepare32.c @@ -0,0 +1,22 @@ +/* This file contains definitions so that prepare.c compiles for 32-bit */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define SUFFIX(x) x ## 32 + +#include "prepare.c" diff --git a/grub-core/efiemu/prepare64.c b/grub-core/efiemu/prepare64.c new file mode 100644 index 000000000..811f55896 --- /dev/null +++ b/grub-core/efiemu/prepare64.c @@ -0,0 +1,22 @@ +/* This file contains definitions so that prepare.c compiles for 64-bit */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define SUFFIX(x) x ## 64 + +#include "prepare.c" diff --git a/grub-core/efiemu/runtime/config.h b/grub-core/efiemu/runtime/config.h new file mode 100644 index 000000000..c9fe02716 --- /dev/null +++ b/grub-core/efiemu/runtime/config.h @@ -0,0 +1,36 @@ +/* This is a pseudo config.h so that types.h compiles nicely */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define GRUB_TYPES_CPU_HEADER 1 + +#ifdef __i386__ +# define SIZEOF_VOID_P 4 +# define SIZEOF_LONG 4 +# define GRUB_TARGET_SIZEOF_VOID_P 4 +# define GRUB_TARGET_SIZEOF_LONG 4 +# define EFI_FUNC(x) x +#elif defined (__x86_64__) +# define SIZEOF_VOID_P 8 +# define SIZEOF_LONG 8 +# define GRUB_TARGET_SIZEOF_VOID_P 8 +# define GRUB_TARGET_SIZEOF_LONG 8 +# define EFI_FUNC(x) x ## _real +#else +#error "Unknown architecture" +#endif diff --git a/grub-core/efiemu/runtime/efiemu.S b/grub-core/efiemu/runtime/efiemu.S new file mode 100644 index 000000000..b502314ee --- /dev/null +++ b/grub-core/efiemu/runtime/efiemu.S @@ -0,0 +1,159 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +/* + * x86_64 uses registry to pass parameters. Unfortunately, gcc and efi use + * different call conversion, so we need to do some conversion. + * + * gcc: + * %rdi, %rsi, %rdx, %rcx, %r8, %r9, 8(%rsp), 16(%rsp), ... + * + * efi: + * %rcx, %rdx, %r8, %r9, 32(%rsp), 40(%rsp), 48(%rsp), ... + * + */ + + .file "efiemu.S" + .text + +FUNCTION (efiemu_get_time) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + call efiemu_get_time_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_set_time) + push %rdi + push %rsi + mov %rcx, %rdi + call efiemu_set_time_real + pop %rsi + pop %rdi + ret + + +FUNCTION (efiemu_get_wakeup_time) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + call efiemu_get_wakeup_time_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_set_wakeup_time) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + call efiemu_set_wakeup_time_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_get_variable) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + mov %r9, %rcx + mov 56(%rsp), %r8 + call efiemu_get_variable_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_get_next_variable_name) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + call efiemu_get_next_variable_name_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_set_variable) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + mov %r9, %rcx + mov 56(%rsp), %r8 + call efiemu_set_variable_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_get_next_high_monotonic_count) + push %rdi + push %rsi + mov %rcx, %rdi + call efiemu_get_next_high_monotonic_count_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_reset_system) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + mov %r9, %rcx + call efiemu_reset_system_real + pop %rsi + pop %rdi + ret + + /* The following functions are always called in physical mode */ + .section ".text-physical", "ax" + +FUNCTION (efiemu_set_virtual_address_map) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + mov %r8, %rdx + mov %r9, %rcx + call efiemu_set_virtual_address_map_real + pop %rsi + pop %rdi + ret + +FUNCTION (efiemu_convert_pointer) + push %rdi + push %rsi + mov %rcx, %rdi + mov %rdx, %rsi + call efiemu_convert_pointer_real + pop %rsi + pop %rdi + ret + diff --git a/grub-core/efiemu/runtime/efiemu.c b/grub-core/efiemu/runtime/efiemu.c new file mode 100644 index 000000000..d923e409f --- /dev/null +++ b/grub-core/efiemu/runtime/efiemu.c @@ -0,0 +1,636 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* This is an emulation of EFI runtime services. + This allows a more uniform boot on i386 machines. + As it emulates only runtime serviceit isn't able + to chainload EFI bootloader on non-EFI system (TODO) */ + +#ifdef __i386__ +#include +#else +#include +#endif + +#include +#include +#include +#include + +grub_efi_status_t +efiemu_get_time (grub_efi_time_t *time, + grub_efi_time_capabilities_t *capabilities); +grub_efi_status_t +efiemu_set_time (grub_efi_time_t *time); + +grub_efi_status_t +efiemu_get_wakeup_time (grub_efi_boolean_t *enabled, + grub_efi_boolean_t *pending, + grub_efi_time_t *time); +grub_efi_status_t +efiemu_set_wakeup_time (grub_efi_boolean_t enabled, + grub_efi_time_t *time); + +#ifdef __APPLE__ +#define PHYSICAL_ATTRIBUTE __attribute__ ((section("_text-physical, _text-physical"))); +#else +#define PHYSICAL_ATTRIBUTE __attribute__ ((section(".text-physical"))); +#endif + +grub_efi_status_t +efiemu_set_virtual_address_map (grub_efi_uintn_t memory_map_size, + grub_efi_uintn_t descriptor_size, + grub_efi_uint32_t descriptor_version, + grub_efi_memory_descriptor_t *virtual_map) + PHYSICAL_ATTRIBUTE; + +grub_efi_status_t +efiemu_convert_pointer (grub_efi_uintn_t debug_disposition, + void **address) + PHYSICAL_ATTRIBUTE; + +grub_efi_status_t +efiemu_get_variable (grub_efi_char16_t *variable_name, + const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t *attributes, + grub_efi_uintn_t *data_size, + void *data); + +grub_efi_status_t +efiemu_get_next_variable_name (grub_efi_uintn_t *variable_name_size, + grub_efi_char16_t *variable_name, + grub_efi_guid_t *vendor_guid); + +grub_efi_status_t +efiemu_set_variable (grub_efi_char16_t *variable_name, + const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t attributes, + grub_efi_uintn_t data_size, + void *data); +grub_efi_status_t +efiemu_get_next_high_monotonic_count (grub_efi_uint32_t *high_count); +void +efiemu_reset_system (grub_efi_reset_type_t reset_type, + grub_efi_status_t reset_status, + grub_efi_uintn_t data_size, + grub_efi_char16_t *reset_data); + +grub_efi_status_t +EFI_FUNC (efiemu_set_virtual_address_map) (grub_efi_uintn_t, + grub_efi_uintn_t, + grub_efi_uint32_t, + grub_efi_memory_descriptor_t *) + PHYSICAL_ATTRIBUTE; +grub_efi_status_t +EFI_FUNC (efiemu_convert_pointer) (grub_efi_uintn_t debug_disposition, + void **address) + PHYSICAL_ATTRIBUTE; +static grub_uint32_t +efiemu_getcrc32 (grub_uint32_t crc, void *buf, int size) + PHYSICAL_ATTRIBUTE; +static void +init_crc32_table (void) + PHYSICAL_ATTRIBUTE; +static grub_uint32_t +reflect (grub_uint32_t ref, int len) + PHYSICAL_ATTRIBUTE; + +/* + The log. It's used when examining memory dump +*/ +static grub_uint8_t loge[1000] = "EFIEMULOG"; +static int logn = 9; +#define LOG(x) { if (logn<900) loge[logn++]=x; } + +/* Interface with grub */ +extern grub_uint8_t efiemu_ptv_relocated; +struct grub_efi_runtime_services efiemu_runtime_services; +struct grub_efi_system_table efiemu_system_table; +extern struct grub_efiemu_ptv_rel efiemu_ptv_relloc[]; +extern grub_uint8_t efiemu_variables[]; +extern grub_uint32_t efiemu_varsize; +extern grub_uint32_t efiemu_high_monotonic_count; +extern grub_int16_t efiemu_time_zone; +extern grub_uint8_t efiemu_time_daylight; +extern grub_uint32_t efiemu_time_accuracy; + +/* Some standard functions because we need to be standalone */ +static void +efiemu_memcpy (void *to, const void *from, int count) +{ + int i; + for (i = 0; i < count; i++) + ((grub_uint8_t *) to)[i] = ((const grub_uint8_t *) from)[i]; +} + +static int +efiemu_str16equal (grub_uint16_t *a, grub_uint16_t *b) +{ + grub_uint16_t *ptr1, *ptr2; + for (ptr1=a,ptr2=b; *ptr1 && *ptr2 == *ptr1; ptr1++, ptr2++); + return *ptr2 == *ptr1; +} + +static grub_size_t +efiemu_str16len (grub_uint16_t *a) +{ + grub_uint16_t *ptr1; + for (ptr1 = a; *ptr1; ptr1++); + return ptr1 - a; +} + +static int +efiemu_memequal (const void *a, const void *b, grub_size_t n) +{ + grub_uint8_t *ptr1, *ptr2; + for (ptr1 = (grub_uint8_t *) a, ptr2 = (grub_uint8_t *)b; + ptr1 < (grub_uint8_t *)a + n && *ptr2 == *ptr1; ptr1++, ptr2++); + return ptr1 == a + n; +} + +static void +efiemu_memset (grub_uint8_t *a, grub_uint8_t b, grub_size_t n) +{ + grub_uint8_t *ptr1; + for (ptr1=a; ptr1 < a + n; ptr1++) + *ptr1 = b; +} + +static inline void +write_cmos (grub_uint8_t addr, grub_uint8_t val) +{ + __asm__ __volatile__ ("outb %%al,$0x70\n" + "mov %%cl, %%al\n" + "outb %%al,$0x71": :"a" (addr), "c" (val)); +} + +static inline grub_uint8_t +read_cmos (grub_uint8_t addr) +{ + grub_uint8_t ret; + __asm__ __volatile__ ("outb %%al, $0x70\n" + "inb $0x71, %%al": "=a"(ret) :"a" (addr)); + return ret; +} + +/* Needed by some gcc versions */ +int __stack_chk_fail () +{ + return 0; +} + +/* The function that implement runtime services as specified in + EFI specification */ +static inline grub_uint8_t +bcd_to_hex (grub_uint8_t in) +{ + return 10 * ((in & 0xf0) >> 4) + (in & 0x0f); +} + +grub_efi_status_t +EFI_FUNC (efiemu_get_time) (grub_efi_time_t *time, + grub_efi_time_capabilities_t *capabilities) +{ + LOG ('a'); + grub_uint8_t state; + state = read_cmos (0xb); + if (!(state & (1 << 2))) + { + time->year = 2000 + bcd_to_hex (read_cmos (0x9)); + time->month = bcd_to_hex (read_cmos (0x8)); + time->day = bcd_to_hex (read_cmos (0x7)); + time->hour = bcd_to_hex (read_cmos (0x4)); + if (time->hour >= 81) + time->hour -= 80 - 12; + if (time->hour == 24) + time->hour = 0; + time->minute = bcd_to_hex (read_cmos (0x2)); + time->second = bcd_to_hex (read_cmos (0x0)); + } + else + { + time->year = 2000 + read_cmos (0x9); + time->month = read_cmos (0x8); + time->day = read_cmos (0x7); + time->hour = read_cmos (0x4); + if (time->hour >= 0x81) + time->hour -= 0x80 - 12; + if (time->hour == 24) + time->hour = 0; + time->minute = read_cmos (0x2); + time->second = read_cmos (0x0); + } + time->nanosecond = 0; + time->pad1 = 0; + time->pad2 = 0; + time->time_zone = efiemu_time_zone; + time->daylight = efiemu_time_daylight; + capabilities->resolution = 1; + capabilities->accuracy = efiemu_time_accuracy; + capabilities->sets_to_zero = 0; + return GRUB_EFI_SUCCESS; +} + +grub_efi_status_t +EFI_FUNC (efiemu_set_time) (grub_efi_time_t *time) +{ + LOG ('b'); + grub_uint8_t state; + state = read_cmos (0xb); + write_cmos (0xb, state | 0x6); + write_cmos (0x9, time->year - 2000); + write_cmos (0x8, time->month); + write_cmos (0x7, time->day); + write_cmos (0x4, time->hour); + write_cmos (0x2, time->minute); + write_cmos (0x0, time->second); + efiemu_time_zone = time->time_zone; + efiemu_time_daylight = time->daylight; + return GRUB_EFI_SUCCESS; +} + +/* Following 2 functions are vendor specific. So announce it as unsupported */ +grub_efi_status_t +EFI_FUNC (efiemu_get_wakeup_time) (grub_efi_boolean_t *enabled, + grub_efi_boolean_t *pending, + grub_efi_time_t *time) +{ + LOG ('c'); + return GRUB_EFI_UNSUPPORTED; +} + +grub_efi_status_t +EFI_FUNC (efiemu_set_wakeup_time) (grub_efi_boolean_t enabled, + grub_efi_time_t *time) +{ + LOG ('d'); + return GRUB_EFI_UNSUPPORTED; +} + +static grub_uint32_t crc32_table [256]; + +static grub_uint32_t +reflect (grub_uint32_t ref, int len) +{ + grub_uint32_t result = 0; + int i; + + for (i = 1; i <= len; i++) + { + if (ref & 1) + result |= 1 << (len - i); + ref >>= 1; + } + + return result; +} + +static void +init_crc32_table (void) +{ + grub_uint32_t polynomial = 0x04c11db7; + int i, j; + + for(i = 0; i < 256; i++) + { + crc32_table[i] = reflect(i, 8) << 24; + for (j = 0; j < 8; j++) + crc32_table[i] = (crc32_table[i] << 1) ^ + (crc32_table[i] & (1 << 31) ? polynomial : 0); + crc32_table[i] = reflect(crc32_table[i], 32); + } +} + +static grub_uint32_t +efiemu_getcrc32 (grub_uint32_t crc, void *buf, int size) +{ + int i; + grub_uint8_t *data = buf; + + if (! crc32_table[1]) + init_crc32_table (); + + crc^= 0xffffffff; + + for (i = 0; i < size; i++) + { + crc = (crc >> 8) ^ crc32_table[(crc & 0xFF) ^ *data]; + data++; + } + + return crc ^ 0xffffffff; +} + + +grub_efi_status_t EFI_FUNC +(efiemu_set_virtual_address_map) (grub_efi_uintn_t memory_map_size, + grub_efi_uintn_t descriptor_size, + grub_efi_uint32_t descriptor_version, + grub_efi_memory_descriptor_t *virtual_map) +{ + struct grub_efiemu_ptv_rel *cur_relloc; + + LOG ('e'); + + /* Ensure that we are called only once */ + if (efiemu_ptv_relocated) + return GRUB_EFI_UNSUPPORTED; + efiemu_ptv_relocated = 1; + + /* Correct addresses using information supplied by grub */ + for (cur_relloc = efiemu_ptv_relloc; cur_relloc->size;cur_relloc++) + { + grub_int64_t corr = 0; + grub_efi_memory_descriptor_t *descptr; + + /* Compute correction */ + for (descptr = virtual_map; + ((grub_uint8_t *) descptr - (grub_uint8_t *) virtual_map) + < memory_map_size; + descptr = (grub_efi_memory_descriptor_t *) + ((grub_uint8_t *) descptr + descriptor_size)) + { + if (descptr->type == cur_relloc->plustype) + corr += descptr->virtual_start - descptr->physical_start; + if (descptr->type == cur_relloc->minustype) + corr -= descptr->virtual_start - descptr->physical_start; + } + + /* Apply correction */ + switch (cur_relloc->size) + { + case 8: + *((grub_uint64_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 4: + *((grub_uint32_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 2: + *((grub_uint16_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 1: + *((grub_uint8_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + } + } + + /* Recompute crc32 of system table and runtime services */ + efiemu_system_table.hdr.crc32 = 0; + efiemu_system_table.hdr.crc32 = efiemu_getcrc32 + (0, &efiemu_system_table, sizeof (efiemu_system_table)); + + efiemu_runtime_services.hdr.crc32 = 0; + efiemu_runtime_services.hdr.crc32 = efiemu_getcrc32 + (0, &efiemu_runtime_services, sizeof (efiemu_runtime_services)); + + return GRUB_EFI_SUCCESS; +} + +/* since efiemu_set_virtual_address_map corrects all the pointers + we don't need efiemu_convert_pointer */ +grub_efi_status_t +EFI_FUNC (efiemu_convert_pointer) (grub_efi_uintn_t debug_disposition, + void **address) +{ + LOG ('f'); + return GRUB_EFI_UNSUPPORTED; +} + +/* Next comes variable services. Because we have no vendor-independent + way to store these variables we have no non-volatility */ + +/* Find variable by name and GUID. */ +static struct efi_variable * +find_variable (const grub_efi_guid_t *vendor_guid, + grub_efi_char16_t *variable_name) +{ + grub_uint8_t *ptr; + struct efi_variable *efivar; + + for (ptr = efiemu_variables; ptr < efiemu_variables + efiemu_varsize; ) + { + efivar = (struct efi_variable *) ptr; + if (!efivar->namelen) + return 0; + if (efiemu_str16equal((grub_efi_char16_t *)(efivar + 1), variable_name) + && efiemu_memequal (&(efivar->guid), vendor_guid, + sizeof (efivar->guid))) + return efivar; + ptr += efivar->namelen + efivar->size + sizeof (*efivar); + } + return 0; +} + +grub_efi_status_t +EFI_FUNC (efiemu_get_variable) (grub_efi_char16_t *variable_name, + const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t *attributes, + grub_efi_uintn_t *data_size, + void *data) +{ + struct efi_variable *efivar; + LOG ('g'); + efivar = find_variable (vendor_guid, variable_name); + if (!efivar) + return GRUB_EFI_NOT_FOUND; + if (*data_size < efivar->size) + { + *data_size = efivar->size; + return GRUB_EFI_BUFFER_TOO_SMALL; + } + *data_size = efivar->size; + efiemu_memcpy (data, (grub_uint8_t *)(efivar + 1) + efivar->namelen, + efivar->size); + *attributes = efivar->attributes; + + return GRUB_EFI_SUCCESS; +} + +grub_efi_status_t EFI_FUNC +(efiemu_get_next_variable_name) (grub_efi_uintn_t *variable_name_size, + grub_efi_char16_t *variable_name, + grub_efi_guid_t *vendor_guid) +{ + struct efi_variable *efivar; + LOG ('l'); + + if (!variable_name_size || !variable_name || !vendor_guid) + return GRUB_EFI_INVALID_PARAMETER; + if (variable_name[0]) + { + efivar = find_variable (vendor_guid, variable_name); + if (!efivar) + return GRUB_EFI_NOT_FOUND; + efivar = (struct efi_variable *)((grub_uint8_t *)efivar + + efivar->namelen + + efivar->size + sizeof (*efivar)); + } + else + efivar = (struct efi_variable *) (efiemu_variables); + + LOG ('m'); + if ((grub_uint8_t *)efivar >= efiemu_variables + efiemu_varsize + || !efivar->namelen) + return GRUB_EFI_NOT_FOUND; + if (*variable_name_size < efivar->namelen) + { + *variable_name_size = efivar->namelen; + return GRUB_EFI_BUFFER_TOO_SMALL; + } + + efiemu_memcpy (variable_name, efivar + 1, efivar->namelen); + efiemu_memcpy (vendor_guid, &(efivar->guid), + sizeof (efivar->guid)); + + LOG('h'); + return GRUB_EFI_SUCCESS; +} + +grub_efi_status_t +EFI_FUNC (efiemu_set_variable) (grub_efi_char16_t *variable_name, + const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t attributes, + grub_efi_uintn_t data_size, + void *data) +{ + struct efi_variable *efivar; + grub_uint8_t *ptr; + LOG('i'); + if (!variable_name[0]) + return GRUB_EFI_INVALID_PARAMETER; + efivar = find_variable (vendor_guid, variable_name); + + /* Delete variable if any */ + if (efivar) + { + efiemu_memcpy (efivar, (grub_uint8_t *)(efivar + 1) + + efivar->namelen + efivar->size, + (efiemu_variables + efiemu_varsize) + - ((grub_uint8_t *)(efivar + 1) + + efivar->namelen + efivar->size)); + efiemu_memset (efiemu_variables + efiemu_varsize + - (sizeof (*efivar) + efivar->namelen + efivar->size), + 0, (sizeof (*efivar) + efivar->namelen + efivar->size)); + } + + if (!data_size) + return GRUB_EFI_SUCCESS; + + for (ptr = efiemu_variables; ptr < efiemu_variables + efiemu_varsize; ) + { + efivar = (struct efi_variable *) ptr; + ptr += efivar->namelen + efivar->size + sizeof (*efivar); + if (!efivar->namelen) + break; + } + if ((grub_uint8_t *)(efivar + 1) + data_size + + 2 * (efiemu_str16len (variable_name) + 1) + >= efiemu_variables + efiemu_varsize) + return GRUB_EFI_OUT_OF_RESOURCES; + + efiemu_memcpy (&(efivar->guid), vendor_guid, sizeof (efivar->guid)); + efivar->namelen = 2 * (efiemu_str16len (variable_name) + 1); + efivar->size = data_size; + efivar->attributes = attributes; + efiemu_memcpy (efivar + 1, variable_name, + 2 * (efiemu_str16len (variable_name) + 1)); + efiemu_memcpy ((grub_uint8_t *)(efivar + 1) + + 2 * (efiemu_str16len (variable_name) + 1), + data, data_size); + + return GRUB_EFI_SUCCESS; +} + +grub_efi_status_t EFI_FUNC +(efiemu_get_next_high_monotonic_count) (grub_efi_uint32_t *high_count) +{ + LOG ('j'); + if (!high_count) + return GRUB_EFI_INVALID_PARAMETER; + *high_count = ++efiemu_high_monotonic_count; + return GRUB_EFI_SUCCESS; +} + +/* To implement it with APM we need to go to real mode. It's too much hassle + Besides EFI specification says that this function shouldn't be used + on systems supporting ACPI + */ +void +EFI_FUNC (efiemu_reset_system) (grub_efi_reset_type_t reset_type, + grub_efi_status_t reset_status, + grub_efi_uintn_t data_size, + grub_efi_char16_t *reset_data) +{ + LOG ('k'); +} + +struct grub_efi_runtime_services efiemu_runtime_services = +{ + .hdr = + { + .signature = GRUB_EFIEMU_RUNTIME_SERVICES_SIGNATURE, + .revision = 0x0001000a, + .header_size = sizeof (struct grub_efi_runtime_services), + .crc32 = 0, /* filled later*/ + .reserved = 0 + }, + .get_time = efiemu_get_time, + .set_time = efiemu_set_time, + .get_wakeup_time = efiemu_get_wakeup_time, + .set_wakeup_time = efiemu_set_wakeup_time, + + .set_virtual_address_map = efiemu_set_virtual_address_map, + .convert_pointer = efiemu_convert_pointer, + + .get_variable = efiemu_get_variable, + .get_next_variable_name = efiemu_get_next_variable_name, + .set_variable = efiemu_set_variable, + .get_next_high_monotonic_count = efiemu_get_next_high_monotonic_count, + + .reset_system = efiemu_reset_system +}; + + +static grub_uint16_t efiemu_vendor[] = + {'G', 'R', 'U', 'B', ' ', 'E', 'F', 'I', ' ', + 'R', 'U', 'N', 'T', 'I', 'M', 'E', 0}; + +struct grub_efi_system_table efiemu_system_table = +{ + .hdr = + { + .signature = GRUB_EFIEMU_SYSTEM_TABLE_SIGNATURE, + .revision = 0x0001000a, + .header_size = sizeof (struct grub_efi_system_table), + .crc32 = 0, /* filled later*/ + .reserved = 0 + }, + .firmware_vendor = efiemu_vendor, + .firmware_revision = 0x0001000a, + .console_in_handler = 0, + .con_in = 0, + .console_out_handler = 0, + .con_out = 0, + .standard_error_handle = 0, + .std_err = 0, + .runtime_services = &efiemu_runtime_services, + .boot_services = 0, + .num_table_entries = 0, + .configuration_table = 0 +}; + diff --git a/grub-core/efiemu/symbols.c b/grub-core/efiemu/symbols.c new file mode 100644 index 000000000..cc148552d --- /dev/null +++ b/grub-core/efiemu/symbols.c @@ -0,0 +1,272 @@ +/* Code for managing symbols and pointers in efiemu */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +static int ptv_written = 0; +static int ptv_alloc = 0; +static int ptv_handle = 0; +static int relocated_handle = 0; +static int ptv_requested = 0; +static struct grub_efiemu_sym *efiemu_syms = 0; + +struct grub_efiemu_sym +{ + struct grub_efiemu_sym *next; + char *name; + int handle; + grub_off_t off; +}; + +void +grub_efiemu_free_syms (void) +{ + struct grub_efiemu_sym *cur, *d; + for (cur = efiemu_syms; cur;) + { + d = cur->next; + grub_free (cur->name); + grub_free (cur); + cur = d; + } + efiemu_syms = 0; + ptv_written = 0; + ptv_alloc = 0; + ptv_requested = 0; + grub_efiemu_mm_return_request (ptv_handle); + ptv_handle = 0; + grub_efiemu_mm_return_request (relocated_handle); + relocated_handle = 0; +} + +/* Announce that the module will need NUM allocators */ +/* Because of deferred memory allocation all the relocators have to be + announced during phase 1*/ +grub_err_t +grub_efiemu_request_symbols (int num) +{ + if (ptv_alloc) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "symbols have already been allocated"); + if (num < 0) + return grub_error (GRUB_ERR_BUG, + "can't request negative symbols"); + ptv_requested += num; + return GRUB_ERR_NONE; +} + +/* Resolve the symbol name NAME and set HANDLE and OFF accordingly */ +grub_err_t +grub_efiemu_resolve_symbol (const char *name, int *handle, grub_off_t *off) +{ + struct grub_efiemu_sym *cur; + for (cur = efiemu_syms; cur; cur = cur->next) + if (!grub_strcmp (name, cur->name)) + { + *handle = cur->handle; + *off = cur->off; + return GRUB_ERR_NONE; + } + grub_dprintf ("efiemu", "%s not found\n", name); + return grub_error (GRUB_ERR_BAD_OS, N_("symbol `%s' not found"), name); +} + +/* Register symbol named NAME in memory handle HANDLE at offset OFF */ +grub_err_t +grub_efiemu_register_symbol (const char *name, int handle, grub_off_t off) +{ + struct grub_efiemu_sym *cur; + cur = (struct grub_efiemu_sym *) grub_malloc (sizeof (*cur)); + grub_dprintf ("efiemu", "registering symbol '%s'\n", name); + if (!cur) + return grub_errno; + cur->name = grub_strdup (name); + cur->next = efiemu_syms; + cur->handle = handle; + cur->off = off; + efiemu_syms = cur; + + return 0; +} + +/* Go from phase 1 to phase 2. Must be called before similar function in mm.c */ +grub_err_t +grub_efiemu_alloc_syms (void) +{ + ptv_alloc = ptv_requested; + ptv_handle = grub_efiemu_request_memalign + (1, (ptv_requested + 1) * sizeof (struct grub_efiemu_ptv_rel), + GRUB_EFI_RUNTIME_SERVICES_DATA); + relocated_handle = grub_efiemu_request_memalign + (1, sizeof (grub_uint8_t), GRUB_EFI_RUNTIME_SERVICES_DATA); + + grub_efiemu_register_symbol ("efiemu_ptv_relocated", relocated_handle, 0); + grub_efiemu_register_symbol ("efiemu_ptv_relloc", ptv_handle, 0); + return grub_errno; +} + +grub_err_t +grub_efiemu_write_sym_markers (void) +{ + struct grub_efiemu_ptv_rel *ptv_rels + = grub_efiemu_mm_obtain_request (ptv_handle); + grub_uint8_t *relocated = grub_efiemu_mm_obtain_request (relocated_handle); + grub_memset (ptv_rels, 0, (ptv_requested + 1) + * sizeof (struct grub_efiemu_ptv_rel)); + *relocated = 0; + return GRUB_ERR_NONE; +} + +/* Write value (pointer to memory PLUS_HANDLE) + - (pointer to memory MINUS_HANDLE) + VALUE to ADDR assuming that the + size SIZE bytes. If PTV_NEEDED is 1 then announce it to runtime that this + value needs to be recomputed before going to virtual mode +*/ +grub_err_t +grub_efiemu_write_value (void *addr, grub_uint32_t value, int plus_handle, + int minus_handle, int ptv_needed, int size) +{ + /* Announce relocator to runtime */ + if (ptv_needed) + { + struct grub_efiemu_ptv_rel *ptv_rels + = grub_efiemu_mm_obtain_request (ptv_handle); + + if (ptv_needed && ptv_written >= ptv_alloc) + return grub_error (GRUB_ERR_BUG, + "your module didn't declare efiemu " + " relocators correctly"); + + if (minus_handle) + ptv_rels[ptv_written].minustype + = grub_efiemu_mm_get_type (minus_handle); + else + ptv_rels[ptv_written].minustype = 0; + + if (plus_handle) + ptv_rels[ptv_written].plustype + = grub_efiemu_mm_get_type (plus_handle); + else + ptv_rels[ptv_written].plustype = 0; + + ptv_rels[ptv_written].addr = (grub_addr_t) addr; + ptv_rels[ptv_written].size = size; + ptv_written++; + + /* memset next value to zero to mark the end */ + grub_memset (&ptv_rels[ptv_written], 0, sizeof (ptv_rels[ptv_written])); + } + + /* Compute the value */ + if (minus_handle) + value -= (grub_addr_t) grub_efiemu_mm_obtain_request (minus_handle); + + if (plus_handle) + value += (grub_addr_t) grub_efiemu_mm_obtain_request (plus_handle); + + /* Write the value */ + switch (size) + { + case 8: + *((grub_uint64_t *) addr) = value; + break; + case 4: + *((grub_uint32_t *) addr) = value; + break; + case 2: + *((grub_uint16_t *) addr) = value; + break; + case 1: + *((grub_uint8_t *) addr) = value; + break; + default: + return grub_error (GRUB_ERR_BUG, "wrong symbol size"); + } + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_efiemu_set_virtual_address_map (grub_efi_uintn_t memory_map_size, + grub_efi_uintn_t descriptor_size, + grub_efi_uint32_t descriptor_version + __attribute__ ((unused)), + grub_efi_memory_descriptor_t *virtual_map) +{ + grub_uint8_t *ptv_relocated; + struct grub_efiemu_ptv_rel *cur_relloc; + struct grub_efiemu_ptv_rel *ptv_rels; + + ptv_relocated = grub_efiemu_mm_obtain_request (relocated_handle); + ptv_rels = grub_efiemu_mm_obtain_request (ptv_handle); + + /* Ensure that we are called only once */ + if (*ptv_relocated) + return grub_error (GRUB_ERR_BUG, "EfiEmu is already relocated"); + *ptv_relocated = 1; + + /* Correct addresses using information supplied by grub */ + for (cur_relloc = ptv_rels; cur_relloc->size; cur_relloc++) + { + grub_int64_t corr = 0; + grub_efi_memory_descriptor_t *descptr; + + /* Compute correction */ + for (descptr = virtual_map; + (grub_size_t) ((grub_uint8_t *) descptr + - (grub_uint8_t *) virtual_map) < memory_map_size; + descptr = (grub_efi_memory_descriptor_t *) + ((grub_uint8_t *) descptr + descriptor_size)) + { + if (descptr->type == cur_relloc->plustype) + corr += descptr->virtual_start - descptr->physical_start; + if (descptr->type == cur_relloc->minustype) + corr -= descptr->virtual_start - descptr->physical_start; + } + + /* Apply correction */ + switch (cur_relloc->size) + { + case 8: + *((grub_uint64_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 4: + *((grub_uint32_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 2: + *((grub_uint16_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 1: + *((grub_uint8_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + } + } + + /* Recompute crc32 of system table and runtime services */ + + if (grub_efiemu_sizeof_uintn_t () == 4) + return grub_efiemu_crc32 (); + else + return grub_efiemu_crc64 (); +} diff --git a/grub-core/font/font.c b/grub-core/font/font.c new file mode 100644 index 000000000..53d76a64d --- /dev/null +++ b/grub-core/font/font.c @@ -0,0 +1,1601 @@ +/* font.c - Font API and font file loader. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#if HAVE_FONT_SOURCE +#include "ascii.h" +#endif + +#ifndef FONT_DEBUG +#define FONT_DEBUG 0 +#endif + +struct char_index_entry +{ + grub_uint32_t code; + grub_uint8_t storage_flags; + grub_uint32_t offset; + + /* Glyph if loaded, or NULL otherwise. */ + struct grub_font_glyph *glyph; +}; + +#define FONT_WEIGHT_NORMAL 100 +#define FONT_WEIGHT_BOLD 200 +#define ASCII_BITMAP_SIZE 16 + +/* Definition of font registry. */ +struct grub_font_node *grub_font_list; + +static int register_font (grub_font_t font); +static void font_init (grub_font_t font); +static void free_font (grub_font_t font); +static void remove_font (grub_font_t font); + +struct font_file_section +{ + /* The file this section is in. */ + grub_file_t file; + + /* FOURCC name of the section. */ + char name[4]; + + /* Length of the section contents. */ + grub_uint32_t length; + + /* Set by open_section() on EOF. */ + int eof; +}; + +/* Replace unknown glyphs with a rounded question mark. */ +static grub_uint8_t unknown_glyph_bitmap[] = { + /* 76543210 */ + 0x7C, /* ooooo */ + 0x82, /* o o */ + 0xBA, /* o ooo o */ + 0xAA, /* o o o o */ + 0xAA, /* o o o o */ + 0x8A, /* o o o */ + 0x9A, /* o oo o */ + 0x92, /* o o o */ + 0x92, /* o o o */ + 0x92, /* o o o */ + 0x92, /* o o o */ + 0x82, /* o o */ + 0x92, /* o o o */ + 0x82, /* o o */ + 0x7C, /* ooooo */ + 0x00 /* */ +}; + +/* The "unknown glyph" glyph, used as a last resort. */ +static struct grub_font_glyph *unknown_glyph; + +/* The font structure used when no other font is loaded. This functions + as a "Null Object" pattern, so that code everywhere does not have to + check for a NULL grub_font_t to avoid dereferencing a null pointer. */ +static struct grub_font null_font; + +/* Flag to ensure module is initialized only once. */ +static grub_uint8_t font_loader_initialized; + +#if HAVE_FONT_SOURCE +static struct grub_font_glyph *ascii_font_glyph[0x80]; +#endif + +static struct grub_font_glyph * +ascii_glyph_lookup (grub_uint32_t code) +{ +#if HAVE_FONT_SOURCE + static int ascii_failback_initialized = 0; + + if (code >= 0x80) + return NULL; + + if (ascii_failback_initialized == 0) + { + int current; + for (current = 0; current < 0x80; current++) + { + ascii_font_glyph[current] = + grub_malloc (sizeof (struct grub_font_glyph) + ASCII_BITMAP_SIZE); + + ascii_font_glyph[current]->width = 8; + ascii_font_glyph[current]->height = 16; + ascii_font_glyph[current]->offset_x = 0; + ascii_font_glyph[current]->offset_y = -2; + ascii_font_glyph[current]->device_width = 8; + ascii_font_glyph[current]->font = NULL; + + grub_memcpy (ascii_font_glyph[current]->bitmap, + &ascii_bitmaps[current * ASCII_BITMAP_SIZE], + ASCII_BITMAP_SIZE); + } + + ascii_failback_initialized = 1; + } + + return ascii_font_glyph[code]; +#else + (void) code; + return NULL; +#endif +} + +void +grub_font_loader_init (void) +{ + /* Only initialize font loader once. */ + if (font_loader_initialized) + return; + + /* Make glyph for unknown glyph. */ + unknown_glyph = grub_malloc (sizeof (struct grub_font_glyph) + + sizeof (unknown_glyph_bitmap)); + if (!unknown_glyph) + return; + + unknown_glyph->width = 8; + unknown_glyph->height = 16; + unknown_glyph->offset_x = 0; + unknown_glyph->offset_y = -3; + unknown_glyph->device_width = 8; + grub_memcpy (unknown_glyph->bitmap, + unknown_glyph_bitmap, sizeof (unknown_glyph_bitmap)); + + /* Initialize the null font. */ + font_init (&null_font); + /* FIXME: Fix this slightly improper cast. */ + null_font.name = (char *) ""; + null_font.ascent = unknown_glyph->height - 3; + null_font.descent = 3; + null_font.max_char_width = unknown_glyph->width; + null_font.max_char_height = unknown_glyph->height; + + font_loader_initialized = 1; +} + +/* Initialize the font object with initial default values. */ +static void +font_init (grub_font_t font) +{ + font->name = 0; + font->file = 0; + font->family = 0; + font->point_size = 0; + font->weight = 0; + + /* Default leading value, not in font file yet. */ + font->leading = 1; + + font->max_char_width = 0; + font->max_char_height = 0; + font->ascent = 0; + font->descent = 0; + font->num_chars = 0; + font->char_index = 0; + font->bmp_idx = 0; +} + +/* Open the next section in the file. + + On success, the section name is stored in section->name and the length in + section->length, and 0 is returned. On failure, 1 is returned and + grub_errno is set appropriately with an error message. + + If 1 is returned due to being at the end of the file, then section->eof is + set to 1; otherwise, section->eof is set to 0. */ +static int +open_section (grub_file_t file, struct font_file_section *section) +{ + grub_ssize_t retval; + grub_uint32_t raw_length; + + section->file = file; + section->eof = 0; + + /* Read the FOURCC section name. */ + retval = grub_file_read (file, section->name, 4); + if (retval >= 0 && retval < 4) + { + /* EOF encountered. */ + section->eof = 1; + return 1; + } + else if (retval < 0) + { + /* Read error. */ + return 1; + } + + /* Read the big-endian 32-bit section length. */ + retval = grub_file_read (file, &raw_length, 4); + if (retval >= 0 && retval < 4) + { + /* EOF encountered. */ + section->eof = 1; + return 1; + } + else if (retval < 0) + { + /* Read error. */ + return 1; + } + + /* Convert byte-order and store in *length. */ + section->length = grub_be_to_cpu32 (raw_length); + + return 0; +} + +/* Size in bytes of each character index (CHIX section) + entry in the font file. */ +#define FONT_CHAR_INDEX_ENTRY_SIZE (4 + 1 + 4) + +/* Load the character index (CHIX) section contents from the font file. This + presumes that the position of FILE is positioned immediately after the + section length for the CHIX section (i.e., at the start of the section + contents). Returns 0 upon success, nonzero for failure (in which case + grub_errno is set appropriately). */ +static int +load_font_index (grub_file_t file, grub_uint32_t sect_length, struct + grub_font *font) +{ + unsigned i; + grub_uint32_t last_code; + +#if FONT_DEBUG >= 2 + grub_dprintf ("font", "load_font_index(sect_length=%d)\n", sect_length); +#endif + + /* Sanity check: ensure section length is divisible by the entry size. */ + if ((sect_length % FONT_CHAR_INDEX_ENTRY_SIZE) != 0) + { + grub_error (GRUB_ERR_BAD_FONT, + "font file format error: character index length %d " + "is not a multiple of the entry size %d", + sect_length, FONT_CHAR_INDEX_ENTRY_SIZE); + return 1; + } + + /* Calculate the number of characters. */ + font->num_chars = sect_length / FONT_CHAR_INDEX_ENTRY_SIZE; + + /* Allocate the character index array. */ + font->char_index = grub_malloc (font->num_chars + * sizeof (struct char_index_entry)); + if (!font->char_index) + return 1; + font->bmp_idx = grub_malloc (0x10000 * sizeof (grub_uint16_t)); + if (!font->bmp_idx) + return 1; + grub_memset (font->bmp_idx, 0xff, 0x10000 * sizeof (grub_uint16_t)); + + +#if FONT_DEBUG >= 2 + grub_dprintf ("font", "num_chars=%d)\n", font->num_chars); +#endif + + last_code = 0; + + /* Load the character index data from the file. */ + for (i = 0; i < font->num_chars; i++) + { + struct char_index_entry *entry = &font->char_index[i]; + + /* Read code point value; convert to native byte order. */ + if (grub_file_read (file, &entry->code, 4) != 4) + return 1; + entry->code = grub_be_to_cpu32 (entry->code); + + /* Verify that characters are in ascending order. */ + if (i != 0 && entry->code <= last_code) + { + grub_error (GRUB_ERR_BAD_FONT, + "font characters not in ascending order: %u <= %u", + entry->code, last_code); + return 1; + } + + if (entry->code < 0x10000) + font->bmp_idx[entry->code] = i; + + last_code = entry->code; + + /* Read storage flags byte. */ + if (grub_file_read (file, &entry->storage_flags, 1) != 1) + return 1; + + /* Read glyph data offset; convert to native byte order. */ + if (grub_file_read (file, &entry->offset, 4) != 4) + return 1; + entry->offset = grub_be_to_cpu32 (entry->offset); + + /* No glyph loaded. Will be loaded on demand and cached thereafter. */ + entry->glyph = 0; + +#if FONT_DEBUG >= 5 + /* Print the 1st 10 characters. */ + if (i < 10) + grub_dprintf ("font", "c=%d o=%d\n", entry->code, entry->offset); +#endif + } + + return 0; +} + +/* Read the contents of the specified section as a string, which is + allocated on the heap. Returns 0 if there is an error. */ +static char * +read_section_as_string (struct font_file_section *section) +{ + char *str; + grub_ssize_t ret; + + str = grub_malloc (section->length + 1); + if (!str) + return 0; + + ret = grub_file_read (section->file, str, section->length); + if (ret < 0 || ret != (grub_ssize_t) section->length) + { + grub_free (str); + return 0; + } + + str[section->length] = '\0'; + return str; +} + +/* Read the contents of the current section as a 16-bit integer value, + which is stored into *VALUE. + Returns 0 upon success, nonzero upon failure. */ +static int +read_section_as_short (struct font_file_section *section, + grub_int16_t * value) +{ + grub_uint16_t raw_value; + + if (section->length != 2) + { + grub_error (GRUB_ERR_BAD_FONT, + "font file format error: section %c%c%c%c length " + "is %d but should be 2", + section->name[0], section->name[1], + section->name[2], section->name[3], section->length); + return 1; + } + if (grub_file_read (section->file, &raw_value, 2) != 2) + return 1; + + *value = grub_be_to_cpu16 (raw_value); + return 0; +} + +/* Load a font and add it to the beginning of the global font list. + Returns 0 upon success, nonzero upon failure. */ +grub_font_t +grub_font_load (const char *filename) +{ + grub_file_t file = 0; + struct font_file_section section; + char magic[4]; + grub_font_t font = 0; + +#if FONT_DEBUG >= 1 + grub_dprintf ("font", "add_font(%s)\n", filename); +#endif + + if (filename[0] == '(' || filename[0] == '/' || filename[0] == '+') + file = grub_buffile_open (filename, 1024); + else + { + const char *prefix = grub_env_get ("prefix"); + char *fullname, *ptr; + if (!prefix) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), + "prefix"); + goto fail; + } + fullname = grub_malloc (grub_strlen (prefix) + grub_strlen (filename) + 1 + + sizeof ("/fonts/") + sizeof (".pf2")); + if (!fullname) + goto fail; + ptr = grub_stpcpy (fullname, prefix); + ptr = grub_stpcpy (ptr, "/fonts/"); + ptr = grub_stpcpy (ptr, filename); + ptr = grub_stpcpy (ptr, ".pf2"); + *ptr = 0; + file = grub_buffile_open (fullname, 1024); + grub_free (fullname); + } + if (!file) + goto fail; + +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "file opened\n"); +#endif + + /* Read the FILE section. It indicates the file format. */ + if (open_section (file, §ion) != 0) + goto fail; + +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "opened FILE section\n"); +#endif + if (grub_memcmp (section.name, FONT_FORMAT_SECTION_NAMES_FILE, + sizeof (FONT_FORMAT_SECTION_NAMES_FILE) - 1) != 0) + { + grub_error (GRUB_ERR_BAD_FONT, + "font file format error: 1st section must be FILE"); + goto fail; + } + +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "section name ok\n"); +#endif + if (section.length != 4) + { + grub_error (GRUB_ERR_BAD_FONT, + "font file format error (file type ID length is %d " + "but should be 4)", section.length); + goto fail; + } + +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "section length ok\n"); +#endif + /* Check the file format type code. */ + if (grub_file_read (file, magic, 4) != 4) + goto fail; + +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "read magic ok\n"); +#endif + + if (grub_memcmp (magic, FONT_FORMAT_PFF2_MAGIC, 4) != 0) + { + grub_error (GRUB_ERR_BAD_FONT, "invalid font magic %x %x %x %x", + magic[0], magic[1], magic[2], magic[3]); + goto fail; + } + +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "compare magic ok\n"); +#endif + + /* Allocate the font object. */ + font = (grub_font_t) grub_zalloc (sizeof (struct grub_font)); + if (!font) + goto fail; + + font_init (font); + font->file = file; + +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "allocate font ok; loading font info\n"); +#endif + + /* Load the font information. */ + while (1) + { + if (open_section (file, §ion) != 0) + { + if (section.eof) + break; /* Done reading the font file. */ + else + goto fail; + } + +#if FONT_DEBUG >= 2 + grub_dprintf ("font", "opened section %c%c%c%c ok\n", + section.name[0], section.name[1], + section.name[2], section.name[3]); +#endif + + if (grub_memcmp (section.name, FONT_FORMAT_SECTION_NAMES_FONT_NAME, + sizeof (FONT_FORMAT_SECTION_NAMES_FONT_NAME) - 1) == 0) + { + font->name = read_section_as_string (§ion); + if (!font->name) + goto fail; + } + else if (grub_memcmp (section.name, + FONT_FORMAT_SECTION_NAMES_POINT_SIZE, + sizeof (FONT_FORMAT_SECTION_NAMES_POINT_SIZE) - + 1) == 0) + { + if (read_section_as_short (§ion, &font->point_size) != 0) + goto fail; + } + else if (grub_memcmp (section.name, FONT_FORMAT_SECTION_NAMES_WEIGHT, + sizeof (FONT_FORMAT_SECTION_NAMES_WEIGHT) - 1) + == 0) + { + char *wt; + wt = read_section_as_string (§ion); + if (!wt) + continue; + /* Convert the weight string 'normal' or 'bold' into a number. */ + if (grub_strcmp (wt, "normal") == 0) + font->weight = FONT_WEIGHT_NORMAL; + else if (grub_strcmp (wt, "bold") == 0) + font->weight = FONT_WEIGHT_BOLD; + grub_free (wt); + } + else if (grub_memcmp (section.name, + FONT_FORMAT_SECTION_NAMES_MAX_CHAR_WIDTH, + sizeof (FONT_FORMAT_SECTION_NAMES_MAX_CHAR_WIDTH) + - 1) == 0) + { + if (read_section_as_short (§ion, &font->max_char_width) != 0) + goto fail; + } + else if (grub_memcmp (section.name, + FONT_FORMAT_SECTION_NAMES_MAX_CHAR_HEIGHT, + sizeof (FONT_FORMAT_SECTION_NAMES_MAX_CHAR_HEIGHT) + - 1) == 0) + { + if (read_section_as_short (§ion, &font->max_char_height) != 0) + goto fail; + } + else if (grub_memcmp (section.name, + FONT_FORMAT_SECTION_NAMES_ASCENT, + sizeof (FONT_FORMAT_SECTION_NAMES_ASCENT) - 1) + == 0) + { + if (read_section_as_short (§ion, &font->ascent) != 0) + goto fail; + } + else if (grub_memcmp (section.name, FONT_FORMAT_SECTION_NAMES_DESCENT, + sizeof (FONT_FORMAT_SECTION_NAMES_DESCENT) - 1) + == 0) + { + if (read_section_as_short (§ion, &font->descent) != 0) + goto fail; + } + else if (grub_memcmp (section.name, + FONT_FORMAT_SECTION_NAMES_CHAR_INDEX, + sizeof (FONT_FORMAT_SECTION_NAMES_CHAR_INDEX) - + 1) == 0) + { + if (load_font_index (file, section.length, font) != 0) + goto fail; + } + else if (grub_memcmp (section.name, FONT_FORMAT_SECTION_NAMES_DATA, + sizeof (FONT_FORMAT_SECTION_NAMES_DATA) - 1) == 0) + { + /* When the DATA section marker is reached, we stop reading. */ + break; + } + else + { + /* Unhandled section type, simply skip past it. */ +#if FONT_DEBUG >= 3 + grub_dprintf ("font", "Unhandled section type, skipping.\n"); +#endif + grub_off_t section_end = grub_file_tell (file) + section.length; + if ((int) grub_file_seek (file, section_end) == -1) + goto fail; + } + } + + if (!font->name) + { + grub_dprintf ("font", "Font has no name.\n"); + font->name = grub_strdup ("Unknown"); + } + +#if FONT_DEBUG >= 1 + grub_dprintf ("font", "Loaded font `%s'.\n" + "Ascent=%d Descent=%d MaxW=%d MaxH=%d Number of characters=%d.\n", + font->name, + font->ascent, font->descent, + font->max_char_width, font->max_char_height, font->num_chars); +#endif + + if (font->max_char_width == 0 + || font->max_char_height == 0 + || font->num_chars == 0 + || font->char_index == 0 || font->ascent == 0 || font->descent == 0) + { + grub_error (GRUB_ERR_BAD_FONT, + "invalid font file: missing some required data"); + goto fail; + } + + /* Add the font to the global font registry. */ + if (register_font (font) != 0) + goto fail; + + return font; + +fail: + if (file) + grub_file_close (file); + if (font) + font->file = 0; + + free_font (font); + return 0; +} + +/* Read a 16-bit big-endian integer from FILE, convert it to native byte + order, and store it in *VALUE. + Returns 0 on success, 1 on failure. */ +static int +read_be_uint16 (grub_file_t file, grub_uint16_t * value) +{ + if (grub_file_read (file, value, 2) != 2) + return 1; + *value = grub_be_to_cpu16 (*value); + return 0; +} + +static int +read_be_int16 (grub_file_t file, grub_int16_t * value) +{ + /* For the signed integer version, use the same code as for unsigned. */ + return read_be_uint16 (file, (grub_uint16_t *) value); +} + +/* Return a pointer to the character index entry for the glyph corresponding to + the codepoint CODE in the font FONT. If not found, return zero. */ +static inline struct char_index_entry * +find_glyph (const grub_font_t font, grub_uint32_t code) +{ + struct char_index_entry *table; + grub_size_t lo; + grub_size_t hi; + grub_size_t mid; + + table = font->char_index; + + /* Use BMP index if possible. */ + if (code < 0x10000 && font->bmp_idx) + { + if (font->bmp_idx[code] == 0xffff) + return 0; + return &table[font->bmp_idx[code]]; + } + + /* Do a binary search in `char_index', which is ordered by code point. */ + lo = 0; + hi = font->num_chars - 1; + + if (!table) + return 0; + + while (lo <= hi) + { + mid = lo + (hi - lo) / 2; + if (code < table[mid].code) + hi = mid - 1; + else if (code > table[mid].code) + lo = mid + 1; + else + return &table[mid]; + } + + return 0; +} + +/* Get a glyph for the Unicode character CODE in FONT. The glyph is loaded + from the font file if has not been loaded yet. + Returns a pointer to the glyph if found, or 0 if it is not found. */ +static struct grub_font_glyph * +grub_font_get_glyph_internal (grub_font_t font, grub_uint32_t code) +{ + struct char_index_entry *index_entry; + + index_entry = find_glyph (font, code); + if (index_entry) + { + struct grub_font_glyph *glyph = 0; + grub_uint16_t width; + grub_uint16_t height; + grub_int16_t xoff; + grub_int16_t yoff; + grub_int16_t dwidth; + int len; + + if (index_entry->glyph) + /* Return cached glyph. */ + return index_entry->glyph; + + if (!font->file) + /* No open file, can't load any glyphs. */ + return 0; + + /* Make sure we can find glyphs for error messages. Push active + error message to error stack and reset error message. */ + grub_error_push (); + + grub_file_seek (font->file, index_entry->offset); + + /* Read the glyph width, height, and baseline. */ + if (read_be_uint16 (font->file, &width) != 0 + || read_be_uint16 (font->file, &height) != 0 + || read_be_int16 (font->file, &xoff) != 0 + || read_be_int16 (font->file, &yoff) != 0 + || read_be_int16 (font->file, &dwidth) != 0) + { + remove_font (font); + return 0; + } + + len = (width * height + 7) / 8; + glyph = grub_malloc (sizeof (struct grub_font_glyph) + len); + if (!glyph) + { + remove_font (font); + return 0; + } + + glyph->font = font; + glyph->width = width; + glyph->height = height; + glyph->offset_x = xoff; + glyph->offset_y = yoff; + glyph->device_width = dwidth; + + /* Don't try to read empty bitmaps (e.g., space characters). */ + if (len != 0) + { + if (grub_file_read (font->file, glyph->bitmap, len) != len) + { + remove_font (font); + grub_free (glyph); + return 0; + } + } + + /* Restore old error message. */ + grub_error_pop (); + + /* Cache the glyph. */ + index_entry->glyph = glyph; + + return glyph; + } + + return 0; +} + +/* Free the memory used by FONT. + This should not be called if the font has been made available to + users (once it is added to the global font list), since there would + be the possibility of a dangling pointer. */ +static void +free_font (grub_font_t font) +{ + if (font) + { + if (font->file) + grub_file_close (font->file); + grub_free (font->name); + grub_free (font->family); + grub_free (font->char_index); + grub_free (font->bmp_idx); + grub_free (font); + } +} + +/* Add FONT to the global font registry. + Returns 0 upon success, nonzero on failure + (the font was not registered). */ +static int +register_font (grub_font_t font) +{ + struct grub_font_node *node = 0; + + node = grub_malloc (sizeof (struct grub_font_node)); + if (!node) + return 1; + + node->value = font; + node->next = grub_font_list; + grub_font_list = node; + + return 0; +} + +/* Remove the font from the global font list. We don't actually free the + font's memory since users could be holding references to the font. */ +static void +remove_font (grub_font_t font) +{ + struct grub_font_node **nextp, *cur; + + for (nextp = &grub_font_list, cur = *nextp; + cur; nextp = &cur->next, cur = cur->next) + { + if (cur->value == font) + { + *nextp = cur->next; + + /* Free the node, but not the font itself. */ + grub_free (cur); + + return; + } + } +} + +/* Get a font from the list of loaded fonts. This function will return + another font if the requested font is not available. If no fonts are + loaded, then a special 'null font' is returned, which contains no glyphs, + but is not a null pointer so the caller may omit checks for NULL. */ +grub_font_t +grub_font_get (const char *font_name) +{ + struct grub_font_node *node; + + for (node = grub_font_list; node; node = node->next) + { + grub_font_t font = node->value; + if (grub_strcmp (font->name, font_name) == 0) + return font; + } + + /* If no font by that name is found, return the first font in the list + as a fallback. */ + if (grub_font_list && grub_font_list->value) + return grub_font_list->value; + else + /* The null_font is a last resort. */ + return &null_font; +} + +/* Get the full name of the font. */ +const char * +grub_font_get_name (grub_font_t font) +{ + return font->name; +} + +/* Get the maximum width of any character in the font in pixels. */ +int +grub_font_get_max_char_width (grub_font_t font) +{ + return font->max_char_width; +} + +/* Get the distance in pixels from the baseline to the lowest descenders + (for instance, in a lowercase 'y', 'g', etc.). */ +int +grub_font_get_descent (grub_font_t font) +{ + return font->descent; +} + +/* FIXME: not correct for all fonts. */ +int +grub_font_get_xheight (grub_font_t font) +{ + return font->ascent / 2; +} + +/* Get the *standard leading* of the font in pixel, which is the spacing + between two lines of text. Specifically, it is the space between the + descent of one line and the ascent of the next line. This is included + in the *height* metric. */ +int +grub_font_get_leading (grub_font_t font) +{ + return font->leading; +} + +/* Get the distance in pixels between baselines of adjacent lines of text. */ +int +grub_font_get_height (grub_font_t font) +{ + return font->ascent + font->descent + font->leading; +} + +/* Get the glyph for FONT corresponding to the Unicode code point CODE. + Returns the ASCII glyph for the code if no other fonts are available. + The glyphs are cached once loaded. */ +struct grub_font_glyph * +grub_font_get_glyph (grub_font_t font, grub_uint32_t code) +{ + struct grub_font_glyph *glyph = 0; + if (font) + glyph = grub_font_get_glyph_internal (font, code); + if (glyph == 0) + { + glyph = ascii_glyph_lookup (code); + } + return glyph; +} + + +/* Calculate a subject value representing "how similar" two fonts are. + This is used to prioritize the order that fonts are scanned for missing + glyphs. The object is to select glyphs from the most similar font + possible, for the best appearance. + The heuristic is crude, but it helps greatly when fonts of similar + sizes are used so that tiny 8 point glyphs are not mixed into a string + of 24 point text unless there is no other choice. */ +static int +get_font_diversity (grub_font_t a, grub_font_t b) +{ + int d; + + d = 0; + + if (a->ascent && b->ascent) + d += grub_abs (a->ascent - b->ascent) * 8; + else + /* Penalty for missing attributes. */ + d += 50; + + if (a->max_char_height && b->max_char_height) + d += grub_abs (a->max_char_height - b->max_char_height) * 8; + else + /* Penalty for missing attributes. */ + d += 50; + + /* Weight is a minor factor. */ + d += (a->weight != b->weight) ? 5 : 0; + + return d; +} + +/* Get a glyph corresponding to the codepoint CODE. If FONT contains the + specified glyph, then it is returned. Otherwise, all other loaded fonts + are searched until one is found that contains a glyph for CODE. + If no glyph is available for CODE in the loaded fonts, then a glyph + representing an unknown character is returned. + This function never returns NULL. + The returned glyph is owned by the font manager and should not be freed + by the caller. The glyphs are cached. */ +struct grub_font_glyph * +grub_font_get_glyph_with_fallback (grub_font_t font, grub_uint32_t code) +{ + struct grub_font_glyph *glyph; + struct grub_font_node *node; + /* Keep track of next node, in case there's an I/O error in + grub_font_get_glyph_internal() and the font is removed from the list. */ + struct grub_font_node *next; + /* Information on the best glyph found so far, to help find the glyph in + the best matching to the requested one. */ + int best_diversity; + struct grub_font_glyph *best_glyph; + + if (font) + { + /* First try to get the glyph from the specified font. */ + glyph = grub_font_get_glyph_internal (font, code); + if (glyph) + return glyph; + } + + /* Otherwise, search all loaded fonts for the glyph and use the one from + the font that best matches the requested font. */ + best_diversity = 10000; + best_glyph = 0; + + for (node = grub_font_list; node; node = next) + { + grub_font_t curfont; + + curfont = node->value; + next = node->next; + + glyph = grub_font_get_glyph_internal (curfont, code); + if (glyph && !font) + return glyph; + if (glyph) + { + int d; + + d = get_font_diversity (curfont, font); + if (d < best_diversity) + { + best_diversity = d; + best_glyph = glyph; + } + } + } + + return best_glyph; +} + +#if 0 +static struct grub_font_glyph * +grub_font_dup_glyph (struct grub_font_glyph *glyph) +{ + static struct grub_font_glyph *ret; + ret = grub_malloc (sizeof (*ret) + (glyph->width * glyph->height + 7) / 8); + if (!ret) + return NULL; + grub_memcpy (ret, glyph, sizeof (*ret) + + (glyph->width * glyph->height + 7) / 8); + return ret; +} +#endif + +/* FIXME: suboptimal. */ +static void +grub_font_blit_glyph (struct grub_font_glyph *target, + struct grub_font_glyph *src, unsigned dx, unsigned dy) +{ + unsigned src_bit, tgt_bit, src_byte, tgt_byte; + unsigned i, j; + for (i = 0; i < src->height; i++) + { + src_bit = (src->width * i) % 8; + src_byte = (src->width * i) / 8; + tgt_bit = (target->width * (dy + i) + dx) % 8; + tgt_byte = (target->width * (dy + i) + dx) / 8; + for (j = 0; j < src->width; j++) + { + target->bitmap[tgt_byte] |= ((src->bitmap[src_byte] << src_bit) + & 0x80) >> tgt_bit; + src_bit++; + tgt_bit++; + if (src_bit == 8) + { + src_byte++; + src_bit = 0; + } + if (tgt_bit == 8) + { + tgt_byte++; + tgt_bit = 0; + } + } + } +} + +static void +grub_font_blit_glyph_mirror (struct grub_font_glyph *target, + struct grub_font_glyph *src, + unsigned dx, unsigned dy) +{ + unsigned tgt_bit, src_byte, tgt_byte; + signed src_bit; + unsigned i, j; + for (i = 0; i < src->height; i++) + { + src_bit = (src->width * i + src->width - 1) % 8; + src_byte = (src->width * i + src->width - 1) / 8; + tgt_bit = (target->width * (dy + i) + dx) % 8; + tgt_byte = (target->width * (dy + i) + dx) / 8; + for (j = 0; j < src->width; j++) + { + target->bitmap[tgt_byte] |= ((src->bitmap[src_byte] << src_bit) + & 0x80) >> tgt_bit; + src_bit--; + tgt_bit++; + if (src_bit == -1) + { + src_byte--; + src_bit = 7; + } + if (tgt_bit == 8) + { + tgt_byte++; + tgt_bit = 0; + } + } + } +} + +/* Context for blit_comb. */ +struct blit_comb_ctx +{ + struct grub_font_glyph *glyph; + int *device_width; + struct grub_video_signed_rect bounds; +}; + +/* Helper for blit_comb. */ +static void +do_blit (struct grub_font_glyph *src, signed dx, signed dy, + struct blit_comb_ctx *ctx) +{ + if (ctx->glyph) + grub_font_blit_glyph (ctx->glyph, src, dx - ctx->glyph->offset_x, + (ctx->glyph->height + ctx->glyph->offset_y) + dy); + if (dx < ctx->bounds.x) + { + ctx->bounds.width += ctx->bounds.x - dx; + ctx->bounds.x = dx; + } + if (ctx->bounds.y > -src->height - dy) + { + ctx->bounds.height += ctx->bounds.y - (-src->height - dy); + ctx->bounds.y = (-src->height - dy); + } + if (dx + src->width - ctx->bounds.x >= (signed) ctx->bounds.width) + ctx->bounds.width = dx + src->width - ctx->bounds.x + 1; + if ((signed) ctx->bounds.height < src->height + (-src->height - dy) + - ctx->bounds.y) + ctx->bounds.height = src->height + (-src->height - dy) - ctx->bounds.y; +} + +/* Helper for blit_comb. */ +static inline void +add_device_width (int val, struct blit_comb_ctx *ctx) +{ + if (ctx->glyph) + ctx->glyph->device_width += val; + if (ctx->device_width) + *ctx->device_width += val; +} + +static void +blit_comb (const struct grub_unicode_glyph *glyph_id, + struct grub_font_glyph *glyph, + struct grub_video_signed_rect *bounds_out, + struct grub_font_glyph *main_glyph, + struct grub_font_glyph **combining_glyphs, int *device_width) +{ + struct blit_comb_ctx ctx = { + .glyph = glyph, + .device_width = device_width + }; + unsigned i; + signed above_rightx, above_righty; + signed above_leftx, above_lefty; + signed below_rightx, below_righty; + signed min_devwidth = 0; + const struct grub_unicode_combining *comb; + + if (glyph) + glyph->device_width = main_glyph->device_width; + if (device_width) + *device_width = main_glyph->device_width; + + ctx.bounds.x = main_glyph->offset_x; + ctx.bounds.y = main_glyph->offset_y; + ctx.bounds.width = main_glyph->width; + ctx.bounds.height = main_glyph->height; + + above_rightx = main_glyph->offset_x + main_glyph->width; + above_righty = ctx.bounds.y + ctx.bounds.height; + + above_leftx = main_glyph->offset_x; + above_lefty = ctx.bounds.y + ctx.bounds.height; + + below_rightx = ctx.bounds.x + ctx.bounds.width; + below_righty = ctx.bounds.y; + + comb = grub_unicode_get_comb (glyph_id); + + for (i = 0; i < glyph_id->ncomb; i++) + { + grub_int16_t space = 0; + /* Center by default. */ + grub_int16_t targetx; + + if (!combining_glyphs[i]) + continue; + targetx = (ctx.bounds.width - combining_glyphs[i]->width) / 2 + ctx.bounds.x; + /* CGJ is to avoid diacritics reordering. */ + if (comb[i].code + == GRUB_UNICODE_COMBINING_GRAPHEME_JOINER) + continue; + switch (comb[i].type) + { + case GRUB_UNICODE_COMB_OVERLAY: + do_blit (combining_glyphs[i], + targetx, + (ctx.bounds.height - combining_glyphs[i]->height) / 2 + - (ctx.bounds.height + ctx.bounds.y), &ctx); + if (min_devwidth < combining_glyphs[i]->width) + min_devwidth = combining_glyphs[i]->width; + break; + + case GRUB_UNICODE_COMB_ATTACHED_ABOVE_RIGHT: + do_blit (combining_glyphs[i], above_rightx, -above_righty, &ctx); + above_rightx += combining_glyphs[i]->width; + break; + + case GRUB_UNICODE_COMB_ABOVE_RIGHT: + do_blit (combining_glyphs[i], above_rightx, + -(above_righty + combining_glyphs[i]->height), &ctx); + above_rightx += combining_glyphs[i]->width; + break; + + case GRUB_UNICODE_COMB_ABOVE_LEFT: + above_leftx -= combining_glyphs[i]->width; + do_blit (combining_glyphs[i], above_leftx, + -(above_lefty + combining_glyphs[i]->height), &ctx); + break; + + case GRUB_UNICODE_COMB_BELOW_RIGHT: + do_blit (combining_glyphs[i], below_rightx, below_righty, &ctx); + below_rightx += combining_glyphs[i]->width; + break; + + case GRUB_UNICODE_COMB_HEBREW_HOLAM: + if (glyph_id->base != GRUB_UNICODE_HEBREW_WAW) + targetx = + main_glyph->offset_x - combining_glyphs[i]->width - + (combining_glyphs[i]->width + 3) / 4; + goto above_on_main; + + case GRUB_UNICODE_COMB_HEBREW_SIN_DOT: + targetx = main_glyph->offset_x + combining_glyphs[i]->width / 4; + goto above_on_main; + + case GRUB_UNICODE_COMB_HEBREW_SHIN_DOT: + targetx = + main_glyph->width + main_glyph->offset_x - + combining_glyphs[i]->width; + above_on_main: + space = combining_glyphs[i]->offset_y + - grub_font_get_xheight (combining_glyphs[i]->font) - 1; + if (space <= 0) + space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8; + do_blit (combining_glyphs[i], targetx, + -(main_glyph->height + main_glyph->offset_y + space + + combining_glyphs[i]->height), &ctx); + if (min_devwidth < combining_glyphs[i]->width) + min_devwidth = combining_glyphs[i]->width; + break; + + /* TODO: Put dammah, fathah and alif nearer to shadda. */ + case GRUB_UNICODE_COMB_SYRIAC_SUPERSCRIPT_ALAPH: + case GRUB_UNICODE_COMB_ARABIC_DAMMAH: + case GRUB_UNICODE_COMB_ARABIC_DAMMATAN: + case GRUB_UNICODE_COMB_ARABIC_FATHATAN: + case GRUB_UNICODE_COMB_ARABIC_FATHAH: + case GRUB_UNICODE_COMB_ARABIC_SUPERSCRIPT_ALIF: + case GRUB_UNICODE_COMB_ARABIC_SUKUN: + case GRUB_UNICODE_COMB_ARABIC_SHADDA: + case GRUB_UNICODE_COMB_HEBREW_RAFE: + case GRUB_UNICODE_STACK_ABOVE: + stacked_above: + space = combining_glyphs[i]->offset_y + - grub_font_get_xheight (combining_glyphs[i]->font) - 1; + if (space <= 0) + space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8; + /* Fallthrough. */ + case GRUB_UNICODE_STACK_ATTACHED_ABOVE: + do_blit (combining_glyphs[i], targetx, + -(ctx.bounds.height + ctx.bounds.y + space + + combining_glyphs[i]->height), &ctx); + if (min_devwidth < combining_glyphs[i]->width) + min_devwidth = combining_glyphs[i]->width; + break; + + case GRUB_UNICODE_COMB_HEBREW_DAGESH: + do_blit (combining_glyphs[i], targetx, + -(ctx.bounds.height / 2 + ctx.bounds.y + + combining_glyphs[i]->height / 2), &ctx); + if (min_devwidth < combining_glyphs[i]->width) + min_devwidth = combining_glyphs[i]->width; + break; + + case GRUB_UNICODE_COMB_HEBREW_SHEVA: + case GRUB_UNICODE_COMB_HEBREW_HIRIQ: + case GRUB_UNICODE_COMB_HEBREW_QAMATS: + case GRUB_UNICODE_COMB_HEBREW_TSERE: + case GRUB_UNICODE_COMB_HEBREW_SEGOL: + /* TODO: placement in final kaf and under reish. */ + + case GRUB_UNICODE_COMB_HEBREW_HATAF_SEGOL: + case GRUB_UNICODE_COMB_HEBREW_HATAF_PATAH: + case GRUB_UNICODE_COMB_HEBREW_HATAF_QAMATS: + case GRUB_UNICODE_COMB_HEBREW_PATAH: + case GRUB_UNICODE_COMB_HEBREW_QUBUTS: + case GRUB_UNICODE_COMB_HEBREW_METEG: + /* TODO: Put kasra and kasratan under shadda. */ + case GRUB_UNICODE_COMB_ARABIC_KASRA: + case GRUB_UNICODE_COMB_ARABIC_KASRATAN: + /* I don't know how ypogegrammeni differs from subscript. */ + case GRUB_UNICODE_COMB_YPOGEGRAMMENI: + case GRUB_UNICODE_STACK_BELOW: + stacked_below: + space = -(combining_glyphs[i]->offset_y + + combining_glyphs[i]->height); + if (space <= 0) + space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8; + /* Fallthrough. */ + + case GRUB_UNICODE_STACK_ATTACHED_BELOW: + do_blit (combining_glyphs[i], targetx, -(ctx.bounds.y - space), + &ctx); + if (min_devwidth < combining_glyphs[i]->width) + min_devwidth = combining_glyphs[i]->width; + break; + + case GRUB_UNICODE_COMB_MN: + switch (comb[i].code) + { + case GRUB_UNICODE_THAANA_ABAFILI: + case GRUB_UNICODE_THAANA_AABAAFILI: + case GRUB_UNICODE_THAANA_UBUFILI: + case GRUB_UNICODE_THAANA_OOBOOFILI: + case GRUB_UNICODE_THAANA_EBEFILI: + case GRUB_UNICODE_THAANA_EYBEYFILI: + case GRUB_UNICODE_THAANA_OBOFILI: + case GRUB_UNICODE_THAANA_OABOAFILI: + case GRUB_UNICODE_THAANA_SUKUN: + goto stacked_above; + case GRUB_UNICODE_THAANA_IBIFILI: + case GRUB_UNICODE_THAANA_EEBEEFILI: + goto stacked_below; + } + /* Fall through. */ + default: + { + /* Default handling. Just draw combining character on top + of base character. + FIXME: support more unicode types correctly. + */ + do_blit (combining_glyphs[i], + main_glyph->device_width + + combining_glyphs[i]->offset_x, + -(combining_glyphs[i]->height + + combining_glyphs[i]->offset_y), &ctx); + add_device_width (combining_glyphs[i]->device_width, &ctx); + } + } + } + add_device_width ((above_rightx > + below_rightx ? above_rightx : below_rightx) - + (main_glyph->offset_x + main_glyph->width), &ctx); + add_device_width (above_leftx - main_glyph->offset_x, &ctx); + if (glyph && glyph->device_width < min_devwidth) + glyph->device_width = min_devwidth; + if (device_width && *device_width < min_devwidth) + *device_width = min_devwidth; + + if (bounds_out) + *bounds_out = ctx.bounds; +} + +static struct grub_font_glyph * +grub_font_construct_dry_run (grub_font_t hinted_font, + const struct grub_unicode_glyph *glyph_id, + struct grub_video_signed_rect *bounds, + struct grub_font_glyph **combining_glyphs, + int *device_width) +{ + struct grub_font_glyph *main_glyph = NULL; + grub_uint32_t desired_attributes = 0; + unsigned i; + grub_uint32_t base = glyph_id->base; + const struct grub_unicode_combining *comb; + + if (glyph_id->attributes & GRUB_UNICODE_GLYPH_ATTRIBUTE_RIGHT_JOINED) + desired_attributes |= GRUB_FONT_CODE_RIGHT_JOINED; + + if (glyph_id->attributes & GRUB_UNICODE_GLYPH_ATTRIBUTE_LEFT_JOINED) + desired_attributes |= GRUB_FONT_CODE_LEFT_JOINED; + + comb = grub_unicode_get_comb (glyph_id); + + if (base == 'i' || base == 'j') + { + for (i = 0; i < glyph_id->ncomb; i++) + if (comb[i].type == GRUB_UNICODE_STACK_ABOVE) + break; + if (i < glyph_id->ncomb && base == 'i') + base = GRUB_UNICODE_DOTLESS_LOWERCASE_I; + if (i < glyph_id->ncomb && base == 'j') + base = GRUB_UNICODE_DOTLESS_LOWERCASE_J; + } + + main_glyph = grub_font_get_glyph_with_fallback (hinted_font, base + | desired_attributes); + + if (!main_glyph) + main_glyph = grub_font_get_glyph_with_fallback (hinted_font, + base); + + /* Glyph not available in any font. Use ASCII fallback. */ + if (!main_glyph) + main_glyph = ascii_glyph_lookup (base); + + /* Glyph not available in any font. Return unknown glyph. */ + if (!main_glyph) + return NULL; + + if (device_width) + *device_width = main_glyph->device_width; + + if (!glyph_id->ncomb && !glyph_id->attributes) + return main_glyph; + + if (glyph_id->ncomb && !combining_glyphs) + { + grub_errno = GRUB_ERR_NONE; + return main_glyph; + } + + for (i = 0; i < glyph_id->ncomb; i++) + combining_glyphs[i] + = grub_font_get_glyph_with_fallback (main_glyph->font, + comb[i].code); + + blit_comb (glyph_id, NULL, bounds, main_glyph, combining_glyphs, + device_width); + + return main_glyph; +} + +static struct grub_font_glyph **render_combining_glyphs = 0; +static grub_size_t render_max_comb_glyphs = 0; + +static void +ensure_comb_space (const struct grub_unicode_glyph *glyph_id) +{ + if (glyph_id->ncomb <= render_max_comb_glyphs) + return; + + render_max_comb_glyphs = 2 * glyph_id->ncomb; + if (render_max_comb_glyphs < 8) + render_max_comb_glyphs = 8; + grub_free (render_combining_glyphs); + render_combining_glyphs = grub_malloc (render_max_comb_glyphs + * sizeof (render_combining_glyphs[0])); + if (!render_combining_glyphs) + grub_errno = 0; +} + +int +grub_font_get_constructed_device_width (grub_font_t hinted_font, + const struct grub_unicode_glyph + *glyph_id) +{ + int ret; + struct grub_font_glyph *main_glyph; + + ensure_comb_space (glyph_id); + + main_glyph = grub_font_construct_dry_run (hinted_font, glyph_id, NULL, + render_combining_glyphs, &ret); + if (!main_glyph) + return unknown_glyph->device_width; + return ret; +} + +struct grub_font_glyph * +grub_font_construct_glyph (grub_font_t hinted_font, + const struct grub_unicode_glyph *glyph_id) +{ + struct grub_font_glyph *main_glyph; + struct grub_video_signed_rect bounds; + static struct grub_font_glyph *glyph = 0; + static grub_size_t max_glyph_size = 0; + + ensure_comb_space (glyph_id); + + main_glyph = grub_font_construct_dry_run (hinted_font, glyph_id, + &bounds, render_combining_glyphs, + NULL); + + if (!main_glyph) + return unknown_glyph; + + if (!render_combining_glyphs && glyph_id->ncomb) + return main_glyph; + + if (!glyph_id->ncomb && !glyph_id->attributes) + return main_glyph; + + if (max_glyph_size < sizeof (*glyph) + (bounds.width * bounds.height + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT) + { + grub_free (glyph); + max_glyph_size = (sizeof (*glyph) + (bounds.width * bounds.height + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT) * 2; + if (max_glyph_size < 8) + max_glyph_size = 8; + glyph = grub_malloc (max_glyph_size); + } + if (!glyph) + { + grub_errno = GRUB_ERR_NONE; + return main_glyph; + } + + grub_memset (glyph, 0, sizeof (*glyph) + + (bounds.width * bounds.height + + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT); + + glyph->font = main_glyph->font; + glyph->width = bounds.width; + glyph->height = bounds.height; + glyph->offset_x = bounds.x; + glyph->offset_y = bounds.y; + + if (glyph_id->attributes & GRUB_UNICODE_GLYPH_ATTRIBUTE_MIRROR) + grub_font_blit_glyph_mirror (glyph, main_glyph, + main_glyph->offset_x - glyph->offset_x, + (glyph->height + glyph->offset_y) + - (main_glyph->height + + main_glyph->offset_y)); + else + grub_font_blit_glyph (glyph, main_glyph, + main_glyph->offset_x - glyph->offset_x, + (glyph->height + glyph->offset_y) + - (main_glyph->height + main_glyph->offset_y)); + + blit_comb (glyph_id, glyph, NULL, main_glyph, render_combining_glyphs, NULL); + + return glyph; +} + +/* Draw the specified glyph at (x, y). The y coordinate designates the + baseline of the character, while the x coordinate designates the left + side location of the character. */ +grub_err_t +grub_font_draw_glyph (struct grub_font_glyph * glyph, + grub_video_color_t color, int left_x, int baseline_y) +{ + struct grub_video_bitmap glyph_bitmap; + + /* Don't try to draw empty glyphs (U+0020, etc.). */ + if (glyph->width == 0 || glyph->height == 0) + return GRUB_ERR_NONE; + + glyph_bitmap.mode_info.width = glyph->width; + glyph_bitmap.mode_info.height = glyph->height; + glyph_bitmap.mode_info.mode_type + = (1 << GRUB_VIDEO_MODE_TYPE_DEPTH_POS) | GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP; + glyph_bitmap.mode_info.blit_format = GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED; + glyph_bitmap.mode_info.bpp = 1; + + /* Really 1 bit per pixel. */ + glyph_bitmap.mode_info.bytes_per_pixel = 0; + + /* Packed densely as bits. */ + glyph_bitmap.mode_info.pitch = glyph->width; + + glyph_bitmap.mode_info.number_of_colors = 2; + glyph_bitmap.mode_info.bg_red = 0; + glyph_bitmap.mode_info.bg_green = 0; + glyph_bitmap.mode_info.bg_blue = 0; + glyph_bitmap.mode_info.bg_alpha = 0; + grub_video_unmap_color (color, + &glyph_bitmap.mode_info.fg_red, + &glyph_bitmap.mode_info.fg_green, + &glyph_bitmap.mode_info.fg_blue, + &glyph_bitmap.mode_info.fg_alpha); + glyph_bitmap.data = glyph->bitmap; + + int bitmap_left = left_x + glyph->offset_x; + int bitmap_bottom = baseline_y - glyph->offset_y; + int bitmap_top = bitmap_bottom - glyph->height; + + return grub_video_blit_bitmap (&glyph_bitmap, GRUB_VIDEO_BLIT_BLEND, + bitmap_left, bitmap_top, + 0, 0, glyph->width, glyph->height); +} diff --git a/grub-core/font/font_cmd.c b/grub-core/font/font_cmd.c new file mode 100644 index 000000000..f3b36f2d6 --- /dev/null +++ b/grub-core/font/font_cmd.c @@ -0,0 +1,92 @@ +/* font_cmd.c - Font command definition. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +static grub_err_t +loadfont_command (grub_command_t cmd __attribute__ ((unused)), + int argc, + char **args) +{ + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); + + while (argc--) + if (grub_font_load (*args++) == 0) + { + if (!grub_errno) + return grub_error (GRUB_ERR_BAD_FONT, "invalid font"); + return grub_errno; + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +lsfonts_command (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + struct grub_font_node *node; + + grub_puts_ (N_("Loaded fonts:")); + for (node = grub_font_list; node; node = node->next) + { + grub_font_t font = node->value; + grub_printf ("%s\n", grub_font_get_name (font)); + } + + return GRUB_ERR_NONE; +} + +static grub_command_t cmd_loadfont, cmd_lsfonts; + +#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COREBOOT) +void grub_font_init (void) +#else +GRUB_MOD_INIT(font) +#endif +{ + grub_font_loader_init (); + + cmd_loadfont = + grub_register_command ("loadfont", loadfont_command, + N_("FILE..."), + N_("Specify one or more font files to load.")); + cmd_lsfonts = + grub_register_command ("lsfonts", lsfonts_command, + 0, N_("List the loaded fonts.")); +} + +#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_COREBOOT) +void grub_font_fini (void) +#else +GRUB_MOD_FINI(font) +#endif +{ + /* TODO: Determine way to free allocated resources. + Warning: possible pointer references could be in use. */ + + grub_unregister_command (cmd_loadfont); + grub_unregister_command (cmd_lsfonts); +} diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c new file mode 100644 index 000000000..f673897e0 --- /dev/null +++ b/grub-core/fs/affs.c @@ -0,0 +1,711 @@ +/* affs.c - Amiga Fast FileSystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* The affs bootblock. */ +struct grub_affs_bblock +{ + grub_uint8_t type[3]; + grub_uint8_t flags; + grub_uint32_t checksum; + grub_uint32_t rootblock; +} GRUB_PACKED; + +/* Set if the filesystem is a AFFS filesystem. Otherwise this is an + OFS filesystem. */ +#define GRUB_AFFS_FLAG_FFS 1 + +/* The affs rootblock. */ +struct grub_affs_rblock +{ + grub_uint32_t type; + grub_uint8_t unused1[8]; + grub_uint32_t htsize; + grub_uint32_t unused2; + grub_uint32_t checksum; + grub_uint32_t hashtable[1]; +} GRUB_PACKED; + +struct grub_affs_time +{ + grub_int32_t day; + grub_uint32_t min; + grub_uint32_t hz; +} GRUB_PACKED; + +/* The second part of a file header block. */ +struct grub_affs_file +{ + grub_uint8_t unused1[12]; + grub_uint32_t size; + grub_uint8_t unused2[92]; + struct grub_affs_time mtime; + grub_uint8_t namelen; + grub_uint8_t name[30]; + grub_uint8_t unused3[5]; + grub_uint32_t hardlink; + grub_uint32_t unused4[6]; + grub_uint32_t next; + grub_uint32_t parent; + grub_uint32_t extension; + grub_uint32_t type; +} GRUB_PACKED; + +/* The location of `struct grub_affs_file' relative to the end of a + file header block. */ +#define GRUB_AFFS_FILE_LOCATION 200 + +/* The offset in both the rootblock and the file header block for the + hashtable, symlink and block pointers (all synonyms). */ +#define GRUB_AFFS_HASHTABLE_OFFSET 24 +#define GRUB_AFFS_BLOCKPTR_OFFSET 24 +#define GRUB_AFFS_SYMLINK_OFFSET 24 + +enum + { + GRUB_AFFS_FILETYPE_DIR = 2, + GRUB_AFFS_FILETYPE_SYMLINK = 3, + GRUB_AFFS_FILETYPE_HARDLINK = 0xfffffffc, + GRUB_AFFS_FILETYPE_REG = 0xfffffffd + }; + +#define AFFS_MAX_LOG_BLOCK_SIZE 4 +#define AFFS_MAX_SUPERBLOCK 1 + + + +struct grub_fshelp_node +{ + struct grub_affs_data *data; + grub_uint32_t block; + struct grub_fshelp_node *parent; + struct grub_affs_file di; + grub_uint32_t *block_cache; + grub_uint32_t last_block_cache; +}; + +/* Information about a "mounted" affs filesystem. */ +struct grub_affs_data +{ + struct grub_affs_bblock bblock; + struct grub_fshelp_node diropen; + grub_disk_t disk; + + /* Log blocksize in sectors. */ + int log_blocksize; + + /* The number of entries in the hashtable. */ + unsigned int htsize; +}; + +static grub_dl_t my_mod; + + +static grub_disk_addr_t +grub_affs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) +{ + grub_uint32_t target, curblock; + grub_uint32_t pos; + struct grub_affs_file file; + struct grub_affs_data *data = node->data; + grub_uint64_t mod; + + if (!node->block_cache) + { + node->block_cache = grub_malloc (((grub_be_to_cpu32 (node->di.size) + >> (9 + node->data->log_blocksize)) + / data->htsize + 2) + * sizeof (node->block_cache[0])); + if (!node->block_cache) + return -1; + node->last_block_cache = 0; + node->block_cache[0] = node->block; + } + + /* Files are at most 2G on AFFS, so no need for 64-bit division. */ + target = (grub_uint32_t) fileblock / data->htsize; + mod = (grub_uint32_t) fileblock % data->htsize; + /* Find the block that points to the fileblock we are looking up by + following the chain until the right table is reached. */ + for (curblock = node->last_block_cache + 1; curblock < target + 1; curblock++) + { + grub_disk_read (data->disk, + (((grub_uint64_t) node->block_cache[curblock - 1] + 1) + << data->log_blocksize) - 1, + GRUB_DISK_SECTOR_SIZE - GRUB_AFFS_FILE_LOCATION, + sizeof (file), &file); + if (grub_errno) + return 0; + + node->block_cache[curblock] = grub_be_to_cpu32 (file.extension); + node->last_block_cache = curblock; + } + + /* Translate the fileblock to the block within the right table. */ + grub_disk_read (data->disk, (grub_uint64_t) node->block_cache[target] + << data->log_blocksize, + GRUB_AFFS_BLOCKPTR_OFFSET + + (data->htsize - mod - 1) * sizeof (pos), + sizeof (pos), &pos); + if (grub_errno) + return 0; + + return grub_be_to_cpu32 (pos); +} + +static struct grub_affs_data * +grub_affs_mount (grub_disk_t disk) +{ + struct grub_affs_data *data; + grub_uint32_t *rootblock = 0; + struct grub_affs_rblock *rblock = 0; + int log_blocksize = 0; + int bsnum = 0; + + data = grub_zalloc (sizeof (struct grub_affs_data)); + if (!data) + return 0; + + for (bsnum = 0; bsnum < AFFS_MAX_SUPERBLOCK + 1; bsnum++) + { + /* Read the bootblock. */ + grub_disk_read (disk, bsnum, 0, sizeof (struct grub_affs_bblock), + &data->bblock); + if (grub_errno) + goto fail; + + /* Make sure this is an affs filesystem. */ + if (grub_strncmp ((char *) (data->bblock.type), "DOS", 3) != 0 + /* Test if the filesystem is a OFS filesystem. */ + || !(data->bblock.flags & GRUB_AFFS_FLAG_FFS)) + continue; + + /* No sane person uses more than 8KB for a block. At least I hope + for that person because in that case this won't work. */ + if (!rootblock) + rootblock = grub_malloc (GRUB_DISK_SECTOR_SIZE + << AFFS_MAX_LOG_BLOCK_SIZE); + if (!rootblock) + goto fail; + + rblock = (struct grub_affs_rblock *) rootblock; + + /* The filesystem blocksize is not stored anywhere in the filesystem + itself. One way to determine it is try reading blocks for the + rootblock until the checksum is correct. */ + for (log_blocksize = 0; log_blocksize <= AFFS_MAX_LOG_BLOCK_SIZE; + log_blocksize++) + { + grub_uint32_t *currblock = rootblock; + unsigned int i; + grub_uint32_t checksum = 0; + + /* Read the rootblock. */ + grub_disk_read (disk, + (grub_uint64_t) grub_be_to_cpu32 (data->bblock.rootblock) + << log_blocksize, 0, + GRUB_DISK_SECTOR_SIZE << log_blocksize, rootblock); + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + { + grub_errno = 0; + break; + } + if (grub_errno) + goto fail; + + if (rblock->type != grub_cpu_to_be32_compile_time (2) + || rblock->htsize == 0 + || currblock[(GRUB_DISK_SECTOR_SIZE << log_blocksize) + / sizeof (*currblock) - 1] + != grub_cpu_to_be32_compile_time (1)) + continue; + + for (i = 0; i < (GRUB_DISK_SECTOR_SIZE << log_blocksize) + / sizeof (*currblock); + i++) + checksum += grub_be_to_cpu32 (currblock[i]); + + if (checksum == 0) + { + data->log_blocksize = log_blocksize; + data->disk = disk; + data->htsize = grub_be_to_cpu32 (rblock->htsize); + data->diropen.data = data; + data->diropen.block = grub_be_to_cpu32 (data->bblock.rootblock); + data->diropen.parent = NULL; + grub_memcpy (&data->diropen.di, rootblock, + sizeof (data->diropen.di)); + grub_free (rootblock); + + return data; + } + } + } + + fail: + if (grub_errno == GRUB_ERR_NONE || grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not an AFFS filesystem"); + + grub_free (data); + grub_free (rootblock); + return 0; +} + + +static char * +grub_affs_read_symlink (grub_fshelp_node_t node) +{ + struct grub_affs_data *data = node->data; + grub_uint8_t *latin1, *utf8; + const grub_size_t symlink_size = ((GRUB_DISK_SECTOR_SIZE + << data->log_blocksize) - GRUB_AFFS_SYMLINK_OFFSET); + + latin1 = grub_malloc (symlink_size + 1); + if (!latin1) + return 0; + + grub_disk_read (data->disk, + (grub_uint64_t) node->block << data->log_blocksize, + GRUB_AFFS_SYMLINK_OFFSET, + symlink_size, latin1); + if (grub_errno) + { + grub_free (latin1); + return 0; + } + latin1[symlink_size] = 0; + utf8 = grub_malloc (symlink_size * GRUB_MAX_UTF8_PER_LATIN1 + 1); + if (!utf8) + { + grub_free (latin1); + return 0; + } + *grub_latin1_to_utf8 (utf8, latin1, symlink_size) = '\0'; + grub_dprintf ("affs", "Symlink: `%s'\n", utf8); + grub_free (latin1); + if (utf8[0] == ':') + utf8[0] = '/'; + return (char *) utf8; +} + + +/* Helper for grub_affs_iterate_dir. */ +static int +grub_affs_create_node (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data, + struct grub_fshelp_node **node, + grub_uint32_t **hashtable, + grub_uint32_t block, const struct grub_affs_file *fil) +{ + struct grub_affs_data *data = dir->data; + int type = GRUB_FSHELP_REG; + grub_uint8_t name_u8[sizeof (fil->name) * GRUB_MAX_UTF8_PER_LATIN1 + 1]; + grub_size_t len; + unsigned int nest; + + *node = grub_zalloc (sizeof (**node)); + if (!*node) + { + grub_free (*hashtable); + return 1; + } + + (*node)->data = data; + (*node)->block = block; + (*node)->parent = dir; + + len = fil->namelen; + if (len > sizeof (fil->name)) + len = sizeof (fil->name); + *grub_latin1_to_utf8 (name_u8, fil->name, len) = '\0'; + + (*node)->di = *fil; + for (nest = 0; nest < 8; nest++) + { + switch ((*node)->di.type) + { + case grub_cpu_to_be32_compile_time (GRUB_AFFS_FILETYPE_REG): + type = GRUB_FSHELP_REG; + break; + case grub_cpu_to_be32_compile_time (GRUB_AFFS_FILETYPE_DIR): + type = GRUB_FSHELP_DIR; + break; + case grub_cpu_to_be32_compile_time (GRUB_AFFS_FILETYPE_SYMLINK): + type = GRUB_FSHELP_SYMLINK; + break; + case grub_cpu_to_be32_compile_time (GRUB_AFFS_FILETYPE_HARDLINK): + { + grub_err_t err; + (*node)->block = grub_be_to_cpu32 ((*node)->di.hardlink); + err = grub_disk_read (data->disk, + (((grub_uint64_t) (*node)->block + 1) << data->log_blocksize) + - 1, + GRUB_DISK_SECTOR_SIZE - GRUB_AFFS_FILE_LOCATION, + sizeof ((*node)->di), (char *) &(*node)->di); + if (err) + return 1; + continue; + } + default: + return 0; + } + break; + } + + if (nest == 8) + return 0; + + type |= GRUB_FSHELP_CASE_INSENSITIVE; + + if (hook ((char *) name_u8, type, *node, hook_data)) + { + grub_free (*hashtable); + *node = 0; + return 1; + } + *node = 0; + return 0; +} + +static int +grub_affs_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + unsigned int i; + struct grub_affs_file file; + struct grub_fshelp_node *node = 0; + struct grub_affs_data *data = dir->data; + grub_uint32_t *hashtable; + + /* Create the directory entries for `.' and `..'. */ + node = grub_zalloc (sizeof (*node)); + if (!node) + return 1; + + *node = *dir; + if (hook (".", GRUB_FSHELP_DIR, node, hook_data)) + return 1; + if (dir->parent) + { + node = grub_zalloc (sizeof (*node)); + if (!node) + return 1; + *node = *dir->parent; + if (hook ("..", GRUB_FSHELP_DIR, node, hook_data)) + return 1; + } + + hashtable = grub_zalloc (data->htsize * sizeof (*hashtable)); + if (!hashtable) + return 1; + + grub_disk_read (data->disk, + (grub_uint64_t) dir->block << data->log_blocksize, + GRUB_AFFS_HASHTABLE_OFFSET, + data->htsize * sizeof (*hashtable), (char *) hashtable); + if (grub_errno) + goto fail; + + for (i = 0; i < data->htsize; i++) + { + grub_uint32_t next; + + if (!hashtable[i]) + continue; + + /* Every entry in the hashtable can be chained. Read the entire + chain. */ + next = grub_be_to_cpu32 (hashtable[i]); + + while (next) + { + grub_disk_read (data->disk, + (((grub_uint64_t) next + 1) << data->log_blocksize) + - 1, + GRUB_DISK_SECTOR_SIZE - GRUB_AFFS_FILE_LOCATION, + sizeof (file), (char *) &file); + if (grub_errno) + goto fail; + + if (grub_affs_create_node (dir, hook, hook_data, &node, &hashtable, + next, &file)) + return 1; + + next = grub_be_to_cpu32 (file.next); + } + } + + grub_free (hashtable); + return 0; + + fail: + grub_free (node); + grub_free (hashtable); + return 0; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_affs_open (struct grub_file *file, const char *name) +{ + struct grub_affs_data *data; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_affs_mount (file->device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (name, &data->diropen, &fdiro, grub_affs_iterate_dir, + grub_affs_read_symlink, GRUB_FSHELP_REG); + if (grub_errno) + goto fail; + + file->size = grub_be_to_cpu32 (fdiro->di.size); + data->diropen = *fdiro; + grub_free (fdiro); + + file->data = data; + file->offset = 0; + + return 0; + + fail: + if (data && fdiro != &data->diropen) + grub_free (fdiro); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_affs_close (grub_file_t file) +{ + struct grub_affs_data *data = + (struct grub_affs_data *) file->data; + + grub_free (data->diropen.block_cache); + grub_free (file->data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + +/* Read LEN bytes data from FILE into BUF. */ +static grub_ssize_t +grub_affs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_affs_data *data = + (struct grub_affs_data *) file->data; + + return grub_fshelp_read_file (data->diropen.data->disk, &data->diropen, + file->read_hook, file->read_hook_data, + file->offset, len, buf, grub_affs_read_block, + grub_be_to_cpu32 (data->diropen.di.size), + data->log_blocksize, 0); +} + +static grub_int32_t +aftime2ctime (const struct grub_affs_time *t) +{ + return grub_be_to_cpu32 (t->day) * 86400 + + grub_be_to_cpu32 (t->min) * 60 + + grub_be_to_cpu32 (t->hz) / 50 + + 8 * 365 * 86400 + 86400 * 2; +} + +/* Context for grub_affs_dir. */ +struct grub_affs_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_affs_dir. */ +static int +grub_affs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_affs_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + info.mtimeset = 1; + info.mtime = aftime2ctime (&node->di.mtime); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_affs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_affs_dir_ctx ctx = { hook, hook_data }; + struct grub_affs_data *data = 0; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_affs_mount (device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (path, &data->diropen, &fdiro, grub_affs_iterate_dir, + grub_affs_read_symlink, GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + grub_affs_iterate_dir (fdiro, grub_affs_dir_iter, &ctx); + + fail: + if (data && fdiro != &data->diropen) + grub_free (fdiro); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +static grub_err_t +grub_affs_label (grub_device_t device, char **label) +{ + struct grub_affs_data *data; + struct grub_affs_file file; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_affs_mount (disk); + if (data) + { + grub_size_t len; + /* The rootblock maps quite well on a file header block, it's + something we can use here. */ + grub_disk_read (data->disk, + (((grub_uint64_t) + grub_be_to_cpu32 (data->bblock.rootblock) + 1) + << data->log_blocksize) - 1, + GRUB_DISK_SECTOR_SIZE - GRUB_AFFS_FILE_LOCATION, + sizeof (file), &file); + if (grub_errno) + return grub_errno; + + len = file.namelen; + if (len > sizeof (file.name)) + len = sizeof (file.name); + *label = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1); + if (*label) + *grub_latin1_to_utf8 ((grub_uint8_t *) *label, file.name, len) = '\0'; + } + else + *label = 0; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_affs_mtime (grub_device_t device, grub_int32_t *t) +{ + struct grub_affs_data *data; + grub_disk_t disk = device->disk; + struct grub_affs_time af_time; + + *t = 0; + + grub_dl_ref (my_mod); + + data = grub_affs_mount (disk); + if (!data) + { + grub_dl_unref (my_mod); + return grub_errno; + } + + grub_disk_read (data->disk, + (((grub_uint64_t) + grub_be_to_cpu32 (data->bblock.rootblock) + 1) + << data->log_blocksize) - 1, + GRUB_DISK_SECTOR_SIZE - 40, + sizeof (af_time), &af_time); + if (grub_errno) + { + grub_dl_unref (my_mod); + grub_free (data); + return grub_errno; + } + + *t = aftime2ctime (&af_time); + grub_dl_unref (my_mod); + + grub_free (data); + + return GRUB_ERR_NONE; +} + + +static struct grub_fs grub_affs_fs = + { + .name = "affs", + .dir = grub_affs_dir, + .open = grub_affs_open, + .read = grub_affs_read, + .close = grub_affs_close, + .label = grub_affs_label, + .mtime = grub_affs_mtime, + +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(affs) +{ + grub_fs_register (&grub_affs_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(affs) +{ + grub_fs_unregister (&grub_affs_fs); +} diff --git a/grub-core/fs/afs.c b/grub-core/fs/afs.c new file mode 100644 index 000000000..00a5e3113 --- /dev/null +++ b/grub-core/fs/afs.c @@ -0,0 +1,3 @@ +#define MODE_AFS 1 +#include "bfs.c" + diff --git a/grub-core/fs/archelp.c b/grub-core/fs/archelp.c new file mode 100644 index 000000000..0cf544f6f --- /dev/null +++ b/grub-core/fs/archelp.c @@ -0,0 +1,301 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static inline void +canonicalize (char *name) +{ + char *iptr, *optr; + for (iptr = name, optr = name; *iptr; ) + { + while (*iptr == '/') + iptr++; + if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0)) + { + iptr++; + continue; + } + if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0)) + { + iptr += 2; + if (optr == name) + continue; + for (optr -= 2; optr >= name && *optr != '/'; optr--); + optr++; + continue; + } + while (*iptr && *iptr != '/') + *optr++ = *iptr++; + if (*iptr) + *optr++ = *iptr++; + } + *optr = 0; +} + +static grub_err_t +handle_symlink (struct grub_archelp_data *data, + struct grub_archelp_ops *arcops, + const char *fn, char **name, + grub_uint32_t mode, int *restart) +{ + grub_size_t flen; + char *target; + char *ptr; + char *lastslash; + grub_size_t prefixlen; + char *rest; + char *linktarget; + grub_size_t linktarget_len; + + *restart = 0; + + if ((mode & GRUB_ARCHELP_ATTR_TYPE) != GRUB_ARCHELP_ATTR_LNK + || !arcops->get_link_target) + return GRUB_ERR_NONE; + flen = grub_strlen (fn); + if (grub_memcmp (*name, fn, flen) != 0 + || ((*name)[flen] != 0 && (*name)[flen] != '/')) + return GRUB_ERR_NONE; + rest = *name + flen; + lastslash = rest; + if (*rest) + rest++; + while (lastslash >= *name && *lastslash != '/') + lastslash--; + if (lastslash >= *name) + prefixlen = lastslash - *name; + else + prefixlen = 0; + + if (prefixlen) + prefixlen++; + + linktarget = arcops->get_link_target (data); + if (!linktarget) + return grub_errno; + if (linktarget[0] == '\0') + return GRUB_ERR_NONE; + linktarget_len = grub_strlen (linktarget); + target = grub_malloc (linktarget_len + grub_strlen (*name) + 2); + if (!target) + return grub_errno; + + grub_strcpy (target + prefixlen, linktarget); + grub_free (linktarget); + if (target[prefixlen] == '/') + { + ptr = grub_stpcpy (target, target + prefixlen); + ptr = grub_stpcpy (ptr, rest); + *ptr = 0; + grub_dprintf ("archelp", "symlink redirected %s to %s\n", + *name, target); + grub_free (*name); + + canonicalize (target); + *name = target; + *restart = 1; + return GRUB_ERR_NONE; + } + if (prefixlen) + { + grub_memcpy (target, *name, prefixlen); + target[prefixlen-1] = '/'; + } + grub_strcpy (target + prefixlen + linktarget_len, rest); + grub_dprintf ("archelp", "symlink redirected %s to %s\n", + *name, target); + grub_free (*name); + canonicalize (target); + *name = target; + *restart = 1; + return GRUB_ERR_NONE; +} + +grub_err_t +grub_archelp_dir (struct grub_archelp_data *data, + struct grub_archelp_ops *arcops, + const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + char *prev, *name, *path, *ptr; + grub_size_t len; + int symlinknest = 0; + + path = grub_strdup (path_in + 1); + if (!path) + return grub_errno; + canonicalize (path); + for (ptr = path + grub_strlen (path) - 1; ptr >= path && *ptr == '/'; ptr--) + *ptr = 0; + + prev = 0; + + len = grub_strlen (path); + while (1) + { + grub_int32_t mtime; + grub_uint32_t mode; + grub_err_t err; + + if (arcops->find_file (data, &name, &mtime, &mode)) + goto fail; + + if (mode == GRUB_ARCHELP_ATTR_END) + break; + + canonicalize (name); + + if (grub_memcmp (path, name, len) == 0 + && (name[len] == 0 || name[len] == '/' || len == 0)) + { + char *p, *n; + + n = name + len; + while (*n == '/') + n++; + + p = grub_strchr (n, '/'); + if (p) + *p = 0; + + if (((!prev) || (grub_strcmp (prev, name) != 0)) && *n != 0) + { + struct grub_dirhook_info info; + grub_memset (&info, 0, sizeof (info)); + info.dir = (p != NULL) || ((mode & GRUB_ARCHELP_ATTR_TYPE) + == GRUB_ARCHELP_ATTR_DIR); + if (!(mode & GRUB_ARCHELP_ATTR_NOTIME)) + { + info.mtime = mtime; + info.mtimeset = 1; + } + if (hook (n, &info, hook_data)) + { + grub_free (name); + goto fail; + } + grub_free (prev); + prev = name; + } + else + { + int restart = 0; + err = handle_symlink (data, arcops, name, + &path, mode, &restart); + grub_free (name); + if (err) + goto fail; + if (restart) + { + len = grub_strlen (path); + if (++symlinknest == 8) + { + grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + goto fail; + } + arcops->rewind (data); + } + } + } + else + grub_free (name); + } + +fail: + + grub_free (path); + grub_free (prev); + + return grub_errno; +} + +grub_err_t +grub_archelp_open (struct grub_archelp_data *data, + struct grub_archelp_ops *arcops, + const char *name_in) +{ + char *fn; + char *name = grub_strdup (name_in + 1); + int symlinknest = 0; + + if (!name) + return grub_errno; + + canonicalize (name); + + while (1) + { + grub_uint32_t mode; + grub_int32_t mtime; + int restart; + + if (arcops->find_file (data, &fn, &mtime, &mode)) + goto fail; + + if (mode == GRUB_ARCHELP_ATTR_END) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name_in); + break; + } + + canonicalize (fn); + + if (handle_symlink (data, arcops, fn, &name, mode, &restart)) + { + grub_free (fn); + goto fail; + } + + if (restart) + { + arcops->rewind (data); + if (++symlinknest == 8) + { + grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + goto fail; + } + goto no_match; + } + + if (grub_strcmp (name, fn) != 0) + goto no_match; + + grub_free (fn); + grub_free (name); + + return GRUB_ERR_NONE; + + no_match: + + grub_free (fn); + } + +fail: + grub_free (name); + + return grub_errno; +} diff --git a/grub-core/fs/bfs.c b/grub-core/fs/bfs.c new file mode 100644 index 000000000..d2b490bce --- /dev/null +++ b/grub-core/fs/bfs.c @@ -0,0 +1,1117 @@ +/* bfs.c - The Bee File System. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +/* + Based on the book "Practical File System Design by Dominic Giampaolo + with corrections and completitions based on Haiku code. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#ifdef MODE_AFS +#define BTREE_ALIGN 4 +#define SUPERBLOCK 2 +#else +#define BTREE_ALIGN 8 +#define SUPERBLOCK 1 +#endif + +#define grub_bfs_to_cpu16 grub_le_to_cpu16 +#define grub_bfs_to_cpu32 grub_le_to_cpu32 +#define grub_bfs_to_cpu64 grub_le_to_cpu64 +#define grub_cpu_to_bfs32_compile_time grub_cpu_to_le32_compile_time + +#ifdef MODE_AFS +#define grub_bfs_to_cpu_treehead grub_bfs_to_cpu32 +#else +#define grub_bfs_to_cpu_treehead grub_bfs_to_cpu16 +#endif + +#ifdef MODE_AFS +#define SUPER_BLOCK_MAGIC1 0x41465331 +#else +#define SUPER_BLOCK_MAGIC1 0x42465331 +#endif +#define SUPER_BLOCK_MAGIC2 0xdd121031 +#define SUPER_BLOCK_MAGIC3 0x15b6830e +#define POINTER_INVALID 0xffffffffffffffffULL + +#define ATTR_TYPE 0160000 +#define ATTR_REG 0100000 +#define ATTR_DIR 0040000 +#define ATTR_LNK 0120000 + +#define DOUBLE_INDIRECT_SHIFT 2 + +#define LOG_EXTENT_SIZE 3 +struct grub_bfs_extent +{ + grub_uint32_t ag; + grub_uint16_t start; + grub_uint16_t len; +} GRUB_PACKED; + +struct grub_bfs_superblock +{ + char label[32]; + grub_uint32_t magic1; + grub_uint32_t unused1; + grub_uint32_t bsize; + grub_uint32_t log2_bsize; + grub_uint8_t unused[20]; + grub_uint32_t magic2; + grub_uint32_t unused2; + grub_uint32_t log2_ag_size; + grub_uint8_t unused3[32]; + grub_uint32_t magic3; + struct grub_bfs_extent root_dir; +} GRUB_PACKED; + +struct grub_bfs_inode +{ + grub_uint8_t unused[20]; + grub_uint32_t mode; + grub_uint32_t flags; +#ifdef MODE_AFS + grub_uint8_t unused2[12]; +#else + grub_uint8_t unused2[8]; +#endif + grub_uint64_t mtime; + grub_uint8_t unused3[8]; + struct grub_bfs_extent attr; + grub_uint8_t unused4[12]; + + union + { + struct + { + struct grub_bfs_extent direct[12]; + grub_uint64_t max_direct_range; + struct grub_bfs_extent indirect; + grub_uint64_t max_indirect_range; + struct grub_bfs_extent double_indirect; + grub_uint64_t max_double_indirect_range; + grub_uint64_t size; + grub_uint32_t pad[4]; + } GRUB_PACKED; + char inplace_link[144]; + } GRUB_PACKED; + grub_uint8_t small_data[0]; +} GRUB_PACKED; + +enum +{ + LONG_SYMLINK = 0x40 +}; + +struct grub_bfs_small_data_element_header +{ + grub_uint32_t type; + grub_uint16_t name_len; + grub_uint16_t value_len; +} GRUB_PACKED; + +struct grub_bfs_btree_header +{ + grub_uint32_t magic; +#ifdef MODE_AFS + grub_uint64_t root; + grub_uint32_t level; + grub_uint32_t node_size; + grub_uint32_t unused; +#else + grub_uint32_t node_size; + grub_uint32_t level; + grub_uint32_t unused; + grub_uint64_t root; +#endif + grub_uint32_t unused2[2]; +} GRUB_PACKED; + +struct grub_bfs_btree_node +{ + grub_uint64_t unused; + grub_uint64_t right; + grub_uint64_t overflow; +#ifdef MODE_AFS + grub_uint32_t count_keys; + grub_uint32_t total_key_len; +#else + grub_uint16_t count_keys; + grub_uint16_t total_key_len; +#endif +} GRUB_PACKED; + +struct grub_bfs_data +{ + struct grub_bfs_superblock sb; + struct grub_bfs_inode ino; +}; + +/* Context for grub_bfs_dir. */ +struct grub_bfs_dir_ctx +{ + grub_device_t device; + grub_fs_dir_hook_t hook; + void *hook_data; + struct grub_bfs_superblock sb; +}; + +static grub_err_t +read_extent (grub_disk_t disk, + const struct grub_bfs_superblock *sb, + const struct grub_bfs_extent *in, + grub_off_t off, grub_off_t byteoff, void *buf, grub_size_t len) +{ +#ifdef MODE_AFS + return grub_disk_read (disk, ((grub_bfs_to_cpu32 (in->ag) + << (grub_bfs_to_cpu32 (sb->log2_ag_size) + - GRUB_DISK_SECTOR_BITS)) + + ((grub_bfs_to_cpu16 (in->start) + off) + << (grub_bfs_to_cpu32 (sb->log2_bsize) + - GRUB_DISK_SECTOR_BITS))), + byteoff, len, buf); +#else + return grub_disk_read (disk, (((grub_bfs_to_cpu32 (in->ag) + << grub_bfs_to_cpu32 (sb->log2_ag_size)) + + grub_bfs_to_cpu16 (in->start) + off) + << (grub_bfs_to_cpu32 (sb->log2_bsize) + - GRUB_DISK_SECTOR_BITS)), + byteoff, len, buf); +#endif +} + +#ifdef MODE_AFS +#define RANGE_SHIFT grub_bfs_to_cpu32 (sb->log2_bsize) +#else +#define RANGE_SHIFT 0 +#endif + +static grub_err_t +read_bfs_file (grub_disk_t disk, + const struct grub_bfs_superblock *sb, + const struct grub_bfs_inode *ino, + grub_off_t off, void *buf, grub_size_t len, + grub_disk_read_hook_t read_hook, void *read_hook_data) +{ + if (len == 0) + return GRUB_ERR_NONE; + + if (off + len > grub_bfs_to_cpu64 (ino->size)) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read past the end of file")); + + if (off < (grub_bfs_to_cpu64 (ino->max_direct_range) << RANGE_SHIFT)) + { + unsigned i; + grub_uint64_t pos = 0; + for (i = 0; i < ARRAY_SIZE (ino->direct); i++) + { + grub_uint64_t newpos; + newpos = pos + (((grub_uint64_t) grub_bfs_to_cpu16 (ino->direct[i].len)) + << grub_bfs_to_cpu32 (sb->log2_bsize)); + if (newpos > off) + { + grub_size_t read_size; + grub_err_t err; + read_size = newpos - off; + if (read_size > len) + read_size = len; + disk->read_hook = read_hook; + disk->read_hook_data = read_hook_data; + err = read_extent (disk, sb, &ino->direct[i], 0, off - pos, + buf, read_size); + disk->read_hook = 0; + if (err) + return err; + off += read_size; + len -= read_size; + buf = (char *) buf + read_size; + if (len == 0) + return GRUB_ERR_NONE; + } + pos = newpos; + } + } + + if (off < (grub_bfs_to_cpu64 (ino->max_direct_range) << RANGE_SHIFT)) + return grub_error (GRUB_ERR_BAD_FS, "incorrect direct blocks"); + + if (off < (grub_bfs_to_cpu64 (ino->max_indirect_range) << RANGE_SHIFT)) + { + unsigned i; + struct grub_bfs_extent *entries; + grub_size_t nentries; + grub_err_t err; + grub_uint64_t pos = (grub_bfs_to_cpu64 (ino->max_direct_range) + << RANGE_SHIFT); + nentries = (((grub_size_t) grub_bfs_to_cpu16 (ino->indirect.len)) + << (grub_bfs_to_cpu32 (sb->log2_bsize) - LOG_EXTENT_SIZE)); + entries = grub_malloc (nentries << LOG_EXTENT_SIZE); + if (!entries) + return grub_errno; + err = read_extent (disk, sb, &ino->indirect, 0, 0, + entries, nentries << LOG_EXTENT_SIZE); + for (i = 0; i < nentries; i++) + { + grub_uint64_t newpos; + newpos = pos + (((grub_uint64_t) grub_bfs_to_cpu16 (entries[i].len)) + << grub_bfs_to_cpu32 (sb->log2_bsize)); + if (newpos > off) + { + grub_size_t read_size; + read_size = newpos - off; + if (read_size > len) + read_size = len; + disk->read_hook = read_hook; + disk->read_hook_data = read_hook_data; + err = read_extent (disk, sb, &entries[i], 0, off - pos, + buf, read_size); + disk->read_hook = 0; + if (err) + { + grub_free (entries); + return err; + } + off += read_size; + len -= read_size; + buf = (char *) buf + read_size; + if (len == 0) + { + grub_free (entries); + return GRUB_ERR_NONE; + } + } + pos = newpos; + } + grub_free (entries); + } + + if (off < (grub_bfs_to_cpu64 (ino->max_indirect_range) << RANGE_SHIFT)) + return grub_error (GRUB_ERR_BAD_FS, "incorrect indirect blocks"); + + { + struct grub_bfs_extent *l1_entries, *l2_entries; + grub_size_t nl1_entries, nl2_entries; + grub_off_t last_l1n = ~0ULL; + grub_err_t err; + nl1_entries = (((grub_uint64_t) grub_bfs_to_cpu16 (ino->double_indirect.len)) + << (grub_bfs_to_cpu32 (sb->log2_bsize) - LOG_EXTENT_SIZE)); + l1_entries = grub_malloc (nl1_entries << LOG_EXTENT_SIZE); + if (!l1_entries) + return grub_errno; + nl2_entries = 0; + l2_entries = grub_malloc (1 << (DOUBLE_INDIRECT_SHIFT + + grub_bfs_to_cpu32 (sb->log2_bsize))); + if (!l2_entries) + { + grub_free (l1_entries); + return grub_errno; + } + err = read_extent (disk, sb, &ino->double_indirect, 0, 0, + l1_entries, nl1_entries << LOG_EXTENT_SIZE); + if (err) + { + grub_free (l1_entries); + grub_free (l2_entries); + return err; + } + + while (len > 0) + { + grub_off_t boff, l2n, l1n; + grub_size_t read_size; + grub_off_t double_indirect_offset; + double_indirect_offset = off + - grub_bfs_to_cpu64 (ino->max_indirect_range); + boff = (double_indirect_offset + & ((1 << (grub_bfs_to_cpu32 (sb->log2_bsize) + + DOUBLE_INDIRECT_SHIFT)) - 1)); + l2n = ((double_indirect_offset >> (grub_bfs_to_cpu32 (sb->log2_bsize) + + DOUBLE_INDIRECT_SHIFT)) + & ((1 << (grub_bfs_to_cpu32 (sb->log2_bsize) - LOG_EXTENT_SIZE + + DOUBLE_INDIRECT_SHIFT)) - 1)); + l1n = + (double_indirect_offset >> + (2 * grub_bfs_to_cpu32 (sb->log2_bsize) - LOG_EXTENT_SIZE + + 2 * DOUBLE_INDIRECT_SHIFT)); + if (l1n > nl1_entries) + { + grub_free (l1_entries); + grub_free (l2_entries); + return grub_error (GRUB_ERR_BAD_FS, + "incorrect double-indirect block"); + } + if (l1n != last_l1n) + { + nl2_entries = (((grub_uint64_t) grub_bfs_to_cpu16 (l1_entries[l1n].len)) + << (grub_bfs_to_cpu32 (sb->log2_bsize) + - LOG_EXTENT_SIZE)); + if (nl2_entries > (1U << (grub_bfs_to_cpu32 (sb->log2_bsize) + - LOG_EXTENT_SIZE + + DOUBLE_INDIRECT_SHIFT))) + nl2_entries = (1 << (grub_bfs_to_cpu32 (sb->log2_bsize) + - LOG_EXTENT_SIZE + + DOUBLE_INDIRECT_SHIFT)); + err = read_extent (disk, sb, &l1_entries[l1n], 0, 0, + l2_entries, nl2_entries << LOG_EXTENT_SIZE); + if (err) + { + grub_free (l1_entries); + grub_free (l2_entries); + return err; + } + last_l1n = l1n; + } + if (l2n > nl2_entries) + { + grub_free (l1_entries); + grub_free (l2_entries); + return grub_error (GRUB_ERR_BAD_FS, + "incorrect double-indirect block"); + } + + read_size = (1 << (grub_bfs_to_cpu32 (sb->log2_bsize) + + DOUBLE_INDIRECT_SHIFT)) - boff; + if (read_size > len) + read_size = len; + disk->read_hook = read_hook; + disk->read_hook_data = read_hook_data; + err = read_extent (disk, sb, &l2_entries[l2n], 0, boff, + buf, read_size); + disk->read_hook = 0; + if (err) + { + grub_free (l1_entries); + grub_free (l2_entries); + return err; + } + off += read_size; + len -= read_size; + buf = (char *) buf + read_size; + } + return GRUB_ERR_NONE; + } +} + +static grub_err_t +read_b_node (grub_disk_t disk, + const struct grub_bfs_superblock *sb, + const struct grub_bfs_inode *ino, + grub_uint64_t node_off, + struct grub_bfs_btree_node **node, + char **key_data, grub_uint16_t **keylen_idx, + grub_unaligned_uint64_t **key_values) +{ + void *ret; + struct grub_bfs_btree_node node_head; + grub_size_t total_size; + grub_err_t err; + + *node = NULL; + *key_data = NULL; + *keylen_idx = NULL; + *key_values = NULL; + + err = read_bfs_file (disk, sb, ino, node_off, &node_head, sizeof (node_head), + 0, 0); + if (err) + return err; + + total_size = ALIGN_UP (sizeof (node_head) + + grub_bfs_to_cpu_treehead + (node_head.total_key_len), + BTREE_ALIGN) + + grub_bfs_to_cpu_treehead (node_head.count_keys) * + sizeof (grub_uint16_t) + + grub_bfs_to_cpu_treehead (node_head.count_keys) * + sizeof (grub_uint64_t); + + ret = grub_malloc (total_size); + if (!ret) + return grub_errno; + + err = read_bfs_file (disk, sb, ino, node_off, ret, total_size, 0, 0); + if (err) + { + grub_free (ret); + return err; + } + + *node = ret; + *key_data = (char *) ret + sizeof (node_head); + *keylen_idx = (grub_uint16_t *) ret + + ALIGN_UP (sizeof (node_head) + + grub_bfs_to_cpu_treehead (node_head.total_key_len), + BTREE_ALIGN) / 2; + *key_values = (grub_unaligned_uint64_t *) + (*keylen_idx + + grub_bfs_to_cpu_treehead (node_head.count_keys)); + + return GRUB_ERR_NONE; +} + +static int +iterate_in_b_tree (grub_disk_t disk, + const struct grub_bfs_superblock *sb, + const struct grub_bfs_inode *ino, + int (*hook) (const char *name, grub_uint64_t value, + struct grub_bfs_dir_ctx *ctx), + struct grub_bfs_dir_ctx *ctx) +{ + struct grub_bfs_btree_header head; + grub_err_t err; + int level; + grub_uint64_t node_off; + + err = read_bfs_file (disk, sb, ino, 0, &head, sizeof (head), 0, 0); + if (err) + return 0; + node_off = grub_bfs_to_cpu64 (head.root); + + level = grub_bfs_to_cpu32 (head.level) - 1; + while (level--) + { + struct grub_bfs_btree_node node; + grub_uint64_t key_value; + err = read_bfs_file (disk, sb, ino, node_off, &node, sizeof (node), + 0, 0); + if (err) + return 0; + err = read_bfs_file (disk, sb, ino, node_off + + ALIGN_UP (sizeof (node) + + grub_bfs_to_cpu_treehead (node. + total_key_len), + BTREE_ALIGN) + + grub_bfs_to_cpu_treehead (node.count_keys) * + sizeof (grub_uint16_t), &key_value, + sizeof (grub_uint64_t), 0, 0); + if (err) + return 0; + + node_off = grub_bfs_to_cpu64 (key_value); + } + + while (1) + { + struct grub_bfs_btree_node *node; + char *key_data; + grub_uint16_t *keylen_idx; + grub_unaligned_uint64_t *key_values; + unsigned i; + grub_uint16_t start = 0, end = 0; + + err = read_b_node (disk, sb, ino, + node_off, + &node, + &key_data, + &keylen_idx, + &key_values); + + if (err) + return 0; + + for (i = 0; i < grub_bfs_to_cpu_treehead (node->count_keys); i++) + { + char c; + start = end; + end = grub_bfs_to_cpu16 (keylen_idx[i]); + if (grub_bfs_to_cpu_treehead (node->total_key_len) <= end) + end = grub_bfs_to_cpu_treehead (node->total_key_len); + c = key_data[end]; + key_data[end] = 0; + if (hook (key_data + start, grub_bfs_to_cpu64 (key_values[i].val), + ctx)) + { + grub_free (node); + return 1; + } + key_data[end] = c; + } + node_off = grub_bfs_to_cpu64 (node->right); + grub_free (node); + if (node_off == POINTER_INVALID) + return 0; + } +} + +static int +bfs_strcmp (const char *a, const char *b, grub_size_t alen) +{ + char ac, bc; + while (*b && alen) + { + if (*a != *b) + break; + + a++; + b++; + alen--; + } + + ac = alen ? *a : 0; + bc = *b; + +#ifdef MODE_AFS + return (int) (grub_int8_t) ac - (int) (grub_int8_t) bc; +#else + return (int) (grub_uint8_t) ac - (int) (grub_uint8_t) bc; +#endif +} + +static grub_err_t +find_in_b_tree (grub_disk_t disk, + const struct grub_bfs_superblock *sb, + const struct grub_bfs_inode *ino, const char *name, + grub_uint64_t * res) +{ + struct grub_bfs_btree_header head; + grub_err_t err; + int level; + grub_uint64_t node_off; + + err = read_bfs_file (disk, sb, ino, 0, &head, sizeof (head), 0, 0); + if (err) + return err; + node_off = grub_bfs_to_cpu64 (head.root); + + level = grub_bfs_to_cpu32 (head.level) - 1; + while (1) + { + struct grub_bfs_btree_node *node; + char *key_data; + grub_uint16_t *keylen_idx; + grub_unaligned_uint64_t *key_values; + int lg, j; + unsigned i; + + err = read_b_node (disk, sb, ino, node_off, &node, &key_data, &keylen_idx, &key_values); + if (err) + return err; + + if (node->count_keys == 0) + { + grub_free (node); + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), + name); + } + + for (lg = 0; grub_bfs_to_cpu_treehead (node->count_keys) >> lg; lg++); + + i = 0; + + for (j = lg - 1; j >= 0; j--) + { + int cmp; + grub_uint16_t start = 0, end = 0; + if ((i | (1 << j)) >= grub_bfs_to_cpu_treehead (node->count_keys)) + continue; + start = grub_bfs_to_cpu16 (keylen_idx[(i | (1 << j)) - 1]); + end = grub_bfs_to_cpu16 (keylen_idx[(i | (1 << j))]); + if (grub_bfs_to_cpu_treehead (node->total_key_len) <= end) + end = grub_bfs_to_cpu_treehead (node->total_key_len); + cmp = bfs_strcmp (key_data + start, name, end - start); + if (cmp == 0 && level == 0) + { + *res = grub_bfs_to_cpu64 (key_values[i | (1 << j)].val); + grub_free (node); + return GRUB_ERR_NONE; + } +#ifdef MODE_AFS + if (cmp <= 0) +#else + if (cmp < 0) +#endif + i |= (1 << j); + } + if (i == 0) + { + grub_uint16_t end = 0; + int cmp; + end = grub_bfs_to_cpu16 (keylen_idx[0]); + if (grub_bfs_to_cpu_treehead (node->total_key_len) <= end) + end = grub_bfs_to_cpu_treehead (node->total_key_len); + cmp = bfs_strcmp (key_data, name, end); + if (cmp == 0 && level == 0) + { + *res = grub_bfs_to_cpu64 (key_values[0].val); + grub_free (node); + return GRUB_ERR_NONE; + } +#ifdef MODE_AFS + if (cmp > 0 && level != 0) +#else + if (cmp >= 0 && level != 0) +#endif + { + node_off = grub_bfs_to_cpu64 (key_values[0].val); + level--; + grub_free (node); + continue; + } + else if (level != 0 + && grub_bfs_to_cpu_treehead (node->count_keys) >= 2) + { + node_off = grub_bfs_to_cpu64 (key_values[1].val); + level--; + grub_free (node); + continue; + } + } + else if (level != 0 + && i + 1 < grub_bfs_to_cpu_treehead (node->count_keys)) + { + node_off = grub_bfs_to_cpu64 (key_values[i + 1].val); + level--; + grub_free (node); + continue; + } + if (node->overflow != POINTER_INVALID) + { + node_off = grub_bfs_to_cpu64 (node->overflow); + /* This level-- isn't specified but is needed. */ + level--; + grub_free (node); + continue; + } + grub_free (node); + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), + name); + } +} + +struct grub_fshelp_node +{ + grub_disk_t disk; + const struct grub_bfs_superblock *sb; + struct grub_bfs_inode ino; +}; + +static grub_err_t +lookup_file (grub_fshelp_node_t dir, + const char *name, + grub_fshelp_node_t *foundnode, + enum grub_fshelp_filetype *foundtype) +{ + grub_err_t err; + struct grub_bfs_inode *new_ino; + grub_uint64_t res = 0; + + err = find_in_b_tree (dir->disk, dir->sb, &dir->ino, name, &res); + if (err) + return err; + + *foundnode = grub_malloc (sizeof (struct grub_fshelp_node)); + if (!*foundnode) + return grub_errno; + + (*foundnode)->disk = dir->disk; + (*foundnode)->sb = dir->sb; + new_ino = &(*foundnode)->ino; + + if (grub_disk_read (dir->disk, res + << (grub_bfs_to_cpu32 (dir->sb->log2_bsize) + - GRUB_DISK_SECTOR_BITS), 0, + sizeof (*new_ino), (char *) new_ino)) + { + grub_free (*foundnode); + return grub_errno; + } + switch (grub_bfs_to_cpu32 (new_ino->mode) & ATTR_TYPE) + { + default: + case ATTR_REG: + *foundtype = GRUB_FSHELP_REG; + break; + case ATTR_DIR: + *foundtype = GRUB_FSHELP_DIR; + break; + case ATTR_LNK: + *foundtype = GRUB_FSHELP_SYMLINK; + break; + } + return GRUB_ERR_NONE; +} + +static char * +read_symlink (grub_fshelp_node_t node) +{ + char *alloc = NULL; + grub_err_t err; + +#ifndef MODE_AFS + if (!(grub_bfs_to_cpu32 (node->ino.flags) & LONG_SYMLINK)) + { + alloc = grub_malloc (sizeof (node->ino.inplace_link) + 1); + if (!alloc) + { + return NULL; + } + grub_memcpy (alloc, node->ino.inplace_link, + sizeof (node->ino.inplace_link)); + alloc[sizeof (node->ino.inplace_link)] = 0; + } + else +#endif + { + grub_size_t symsize = grub_bfs_to_cpu64 (node->ino.size); + alloc = grub_malloc (symsize + 1); + if (!alloc) + return NULL; + err = read_bfs_file (node->disk, node->sb, &node->ino, 0, alloc, symsize, 0, 0); + if (err) + { + grub_free (alloc); + return NULL; + } + alloc[symsize] = 0; + } + + return alloc; +} + +static grub_err_t +find_file (const char *path, grub_disk_t disk, + const struct grub_bfs_superblock *sb, struct grub_bfs_inode *ino, + enum grub_fshelp_filetype exptype) +{ + grub_err_t err; + struct grub_fshelp_node root = { + .disk = disk, + .sb = sb, + }; + struct grub_fshelp_node *found; + + err = read_extent (disk, sb, &sb->root_dir, 0, 0, &root.ino, + sizeof (root.ino)); + if (err) + return err; + err = grub_fshelp_find_file_lookup (path, &root, &found, lookup_file, read_symlink, exptype); + if (!err) + grub_memcpy (ino, &found->ino, sizeof (*ino)); + + if (&root != found) + grub_free (found); + return err; +} + +static grub_err_t +mount (grub_disk_t disk, struct grub_bfs_superblock *sb) +{ + grub_err_t err; + err = grub_disk_read (disk, SUPERBLOCK, 0, sizeof (*sb), sb); + if (err == GRUB_ERR_OUT_OF_RANGE) + return grub_error (GRUB_ERR_BAD_FS, +#ifdef MODE_AFS + "not an AFS filesystem" +#else + "not a BFS filesystem" +#endif + ); + if (err) + return err; + if (sb->magic1 != grub_cpu_to_bfs32_compile_time (SUPER_BLOCK_MAGIC1) + || sb->magic2 != grub_cpu_to_bfs32_compile_time (SUPER_BLOCK_MAGIC2) + || sb->magic3 != grub_cpu_to_bfs32_compile_time (SUPER_BLOCK_MAGIC3) + || sb->bsize == 0 + || (grub_bfs_to_cpu32 (sb->bsize) + != (1U << grub_bfs_to_cpu32 (sb->log2_bsize))) + || grub_bfs_to_cpu32 (sb->log2_bsize) < GRUB_DISK_SECTOR_BITS) + return grub_error (GRUB_ERR_BAD_FS, +#ifdef MODE_AFS + "not an AFS filesystem" +#else + "not a BFS filesystem" +#endif + ); + return GRUB_ERR_NONE; +} + +/* Helper for grub_bfs_dir. */ +static int +grub_bfs_dir_iter (const char *name, grub_uint64_t value, + struct grub_bfs_dir_ctx *ctx) +{ + grub_err_t err2; + struct grub_bfs_inode ino; + struct grub_dirhook_info info; + + err2 = grub_disk_read (ctx->device->disk, value + << (grub_bfs_to_cpu32 (ctx->sb.log2_bsize) + - GRUB_DISK_SECTOR_BITS), 0, + sizeof (ino), (char *) &ino); + if (err2) + { + grub_print_error (); + return 0; + } + + info.mtimeset = 1; +#ifdef MODE_AFS + info.mtime = + grub_divmod64 (grub_bfs_to_cpu64 (ino.mtime), 1000000, 0); +#else + info.mtime = grub_bfs_to_cpu64 (ino.mtime) >> 16; +#endif + info.dir = ((grub_bfs_to_cpu32 (ino.mode) & ATTR_TYPE) == ATTR_DIR); + return ctx->hook (name, &info, ctx->hook_data); +} + +static grub_err_t +grub_bfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_bfs_dir_ctx ctx = { + .device = device, + .hook = hook, + .hook_data = hook_data + }; + grub_err_t err; + + err = mount (device->disk, &ctx.sb); + if (err) + return err; + + { + struct grub_bfs_inode ino; + err = find_file (path, device->disk, &ctx.sb, &ino, GRUB_FSHELP_DIR); + if (err) + return err; + iterate_in_b_tree (device->disk, &ctx.sb, &ino, grub_bfs_dir_iter, + &ctx); + } + + return grub_errno; +} + +static grub_err_t +grub_bfs_open (struct grub_file *file, const char *name) +{ + struct grub_bfs_superblock sb; + grub_err_t err; + + err = mount (file->device->disk, &sb); + if (err) + return err; + + { + struct grub_bfs_inode ino; + struct grub_bfs_data *data; + err = find_file (name, file->device->disk, &sb, &ino, GRUB_FSHELP_REG); + if (err) + return err; + + data = grub_zalloc (sizeof (struct grub_bfs_data)); + if (!data) + return grub_errno; + data->sb = sb; + grub_memcpy (&data->ino, &ino, sizeof (data->ino)); + file->data = data; + file->size = grub_bfs_to_cpu64 (ino.size); + } + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_bfs_close (grub_file_t file) +{ + grub_free (file->data); + + return GRUB_ERR_NONE; +} + +static grub_ssize_t +grub_bfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + grub_err_t err; + struct grub_bfs_data *data = file->data; + + err = read_bfs_file (file->device->disk, &data->sb, + &data->ino, file->offset, buf, len, + file->read_hook, file->read_hook_data); + if (err) + return -1; + return len; +} + +static grub_err_t +grub_bfs_label (grub_device_t device, char **label) +{ + struct grub_bfs_superblock sb; + grub_err_t err; + + *label = 0; + + err = mount (device->disk, &sb); + if (err) + return err; + + *label = grub_strndup (sb.label, sizeof (sb.label)); + return GRUB_ERR_NONE; +} + +#ifndef MODE_AFS +static grub_ssize_t +read_bfs_attr (grub_disk_t disk, + const struct grub_bfs_superblock *sb, + struct grub_bfs_inode *ino, + const char *name, void *buf, grub_size_t len) +{ + grub_uint8_t *ptr = (grub_uint8_t *) ino->small_data; + grub_uint8_t *end = ((grub_uint8_t *) ino + grub_bfs_to_cpu32 (sb->bsize)); + + while (ptr + sizeof (struct grub_bfs_small_data_element_header) < end) + { + struct grub_bfs_small_data_element_header *el; + char *el_name; + grub_uint8_t *data; + el = (struct grub_bfs_small_data_element_header *) ptr; + if (el->name_len == 0) + break; + el_name = (char *) (el + 1); + data = (grub_uint8_t *) el_name + grub_bfs_to_cpu16 (el->name_len) + 3; + ptr = data + grub_bfs_to_cpu16 (el->value_len) + 1; + if (grub_memcmp (name, el_name, grub_bfs_to_cpu16 (el->name_len)) == 0 + && name[el->name_len] == 0) + { + grub_size_t copy; + copy = len; + if (grub_bfs_to_cpu16 (el->value_len) > copy) + copy = grub_bfs_to_cpu16 (el->value_len); + grub_memcpy (buf, data, copy); + return copy; + } + } + + if (ino->attr.len != 0) + { + grub_size_t read; + grub_err_t err; + grub_uint64_t res; + + err = read_extent (disk, sb, &ino->attr, 0, 0, ino, + grub_bfs_to_cpu32 (sb->bsize)); + if (err) + return -1; + + err = find_in_b_tree (disk, sb, ino, name, &res); + if (err) + return -1; + grub_disk_read (disk, res + << (grub_bfs_to_cpu32 (sb->log2_bsize) + - GRUB_DISK_SECTOR_BITS), 0, + grub_bfs_to_cpu32 (sb->bsize), (char *) ino); + read = grub_bfs_to_cpu64 (ino->size); + if (read > len) + read = len; + + err = read_bfs_file (disk, sb, ino, 0, buf, read, 0, 0); + if (err) + return -1; + return read; + } + return -1; +} + +static grub_err_t +grub_bfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_bfs_superblock sb; + grub_err_t err; + struct grub_bfs_inode *ino; + grub_uint64_t vid; + + *uuid = 0; + + err = mount (device->disk, &sb); + if (err) + return err; + + ino = grub_malloc (grub_bfs_to_cpu32 (sb.bsize)); + if (!ino) + return grub_errno; + + err = read_extent (device->disk, &sb, &sb.root_dir, 0, 0, + ino, grub_bfs_to_cpu32 (sb.bsize)); + if (err) + { + grub_free (ino); + return err; + } + if (read_bfs_attr (device->disk, &sb, ino, "be:volume_id", + &vid, sizeof (vid)) == sizeof (vid)) + *uuid = + grub_xasprintf ("%016" PRIxGRUB_UINT64_T, grub_bfs_to_cpu64 (vid)); + + grub_free (ino); + + return GRUB_ERR_NONE; +} +#endif + +static struct grub_fs grub_bfs_fs = { +#ifdef MODE_AFS + .name = "afs", +#else + .name = "bfs", +#endif + .dir = grub_bfs_dir, + .open = grub_bfs_open, + .read = grub_bfs_read, + .close = grub_bfs_close, + .label = grub_bfs_label, +#ifndef MODE_AFS + .uuid = grub_bfs_uuid, +#endif +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif +}; + +#ifdef MODE_AFS +GRUB_MOD_INIT (afs) +#else +GRUB_MOD_INIT (bfs) +#endif +{ + COMPILE_TIME_ASSERT (1 << LOG_EXTENT_SIZE == + sizeof (struct grub_bfs_extent)); + grub_fs_register (&grub_bfs_fs); +} + +#ifdef MODE_AFS +GRUB_MOD_FINI (afs) +#else +GRUB_MOD_FINI (bfs) +#endif +{ + grub_fs_unregister (&grub_bfs_fs); +} diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c new file mode 100644 index 000000000..4849c1ceb --- /dev/null +++ b/grub-core/fs/btrfs.c @@ -0,0 +1,1775 @@ +/* btrfs.c - B-tree file system. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2011,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_BTRFS_SIGNATURE "_BHRfS_M" + +/* From http://www.oberhumer.com/opensource/lzo/lzofaq.php + * LZO will expand incompressible data by a little amount. I still haven't + * computed the exact values, but I suggest using these formulas for + * a worst-case expansion calculation: + * + * output_block_size = input_block_size + (input_block_size / 16) + 64 + 3 + * */ +#define GRUB_BTRFS_LZO_BLOCK_SIZE 4096 +#define GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE (GRUB_BTRFS_LZO_BLOCK_SIZE + \ + (GRUB_BTRFS_LZO_BLOCK_SIZE / 16) + 64 + 3) + +typedef grub_uint8_t grub_btrfs_checksum_t[0x20]; +typedef grub_uint16_t grub_btrfs_uuid_t[8]; + +struct grub_btrfs_device +{ + grub_uint64_t device_id; + grub_uint64_t size; + grub_uint8_t dummy[0x62 - 0x10]; +} GRUB_PACKED; + +struct grub_btrfs_superblock +{ + grub_btrfs_checksum_t checksum; + grub_btrfs_uuid_t uuid; + grub_uint8_t dummy[0x10]; + grub_uint8_t signature[sizeof (GRUB_BTRFS_SIGNATURE) - 1]; + grub_uint64_t generation; + grub_uint64_t root_tree; + grub_uint64_t chunk_tree; + grub_uint8_t dummy2[0x20]; + grub_uint64_t root_dir_objectid; + grub_uint8_t dummy3[0x41]; + struct grub_btrfs_device this_device; + char label[0x100]; + grub_uint8_t dummy4[0x100]; + grub_uint8_t bootstrap_mapping[0x800]; +} GRUB_PACKED; + +struct btrfs_header +{ + grub_btrfs_checksum_t checksum; + grub_btrfs_uuid_t uuid; + grub_uint8_t dummy[0x30]; + grub_uint32_t nitems; + grub_uint8_t level; +} GRUB_PACKED; + +struct grub_btrfs_device_desc +{ + grub_device_t dev; + grub_uint64_t id; +}; + +struct grub_btrfs_data +{ + struct grub_btrfs_superblock sblock; + grub_uint64_t tree; + grub_uint64_t inode; + + struct grub_btrfs_device_desc *devices_attached; + unsigned n_devices_attached; + unsigned n_devices_allocated; + + /* Cached extent data. */ + grub_uint64_t extstart; + grub_uint64_t extend; + grub_uint64_t extino; + grub_uint64_t exttree; + grub_size_t extsize; + struct grub_btrfs_extent_data *extent; +}; + +struct grub_btrfs_chunk_item +{ + grub_uint64_t size; + grub_uint64_t dummy; + grub_uint64_t stripe_length; + grub_uint64_t type; +#define GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE 0x07 +#define GRUB_BTRFS_CHUNK_TYPE_SINGLE 0x00 +#define GRUB_BTRFS_CHUNK_TYPE_RAID0 0x08 +#define GRUB_BTRFS_CHUNK_TYPE_RAID1 0x10 +#define GRUB_BTRFS_CHUNK_TYPE_DUPLICATED 0x20 +#define GRUB_BTRFS_CHUNK_TYPE_RAID10 0x40 + grub_uint8_t dummy2[0xc]; + grub_uint16_t nstripes; + grub_uint16_t nsubstripes; +} GRUB_PACKED; + +struct grub_btrfs_chunk_stripe +{ + grub_uint64_t device_id; + grub_uint64_t offset; + grub_btrfs_uuid_t device_uuid; +} GRUB_PACKED; + +struct grub_btrfs_leaf_node +{ + struct grub_btrfs_key key; + grub_uint32_t offset; + grub_uint32_t size; +} GRUB_PACKED; + +struct grub_btrfs_internal_node +{ + struct grub_btrfs_key key; + grub_uint64_t addr; + grub_uint64_t dummy; +} GRUB_PACKED; + +struct grub_btrfs_dir_item +{ + struct grub_btrfs_key key; + grub_uint8_t dummy[8]; + grub_uint16_t m; + grub_uint16_t n; +#define GRUB_BTRFS_DIR_ITEM_TYPE_REGULAR 1 +#define GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY 2 +#define GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK 7 + grub_uint8_t type; + char name[0]; +} GRUB_PACKED; + +struct grub_btrfs_leaf_descriptor +{ + unsigned depth; + unsigned allocated; + struct + { + grub_disk_addr_t addr; + unsigned iter; + unsigned maxiter; + int leaf; + } *data; +}; + +struct grub_btrfs_time +{ + grub_int64_t sec; + grub_uint32_t nanosec; +} __attribute__ ((aligned (4))); + +struct grub_btrfs_inode +{ + grub_uint8_t dummy1[0x10]; + grub_uint64_t size; + grub_uint8_t dummy2[0x70]; + struct grub_btrfs_time mtime; +} GRUB_PACKED; + +struct grub_btrfs_extent_data +{ + grub_uint64_t dummy; + grub_uint64_t size; + grub_uint8_t compression; + grub_uint8_t encryption; + grub_uint16_t encoding; + grub_uint8_t type; + union + { + char inl[0]; + struct + { + grub_uint64_t laddr; + grub_uint64_t compressed_size; + grub_uint64_t offset; + grub_uint64_t filled; + }; + }; +} GRUB_PACKED; + +#define GRUB_BTRFS_EXTENT_INLINE 0 +#define GRUB_BTRFS_EXTENT_REGULAR 1 + +#define GRUB_BTRFS_COMPRESSION_NONE 0 +#define GRUB_BTRFS_COMPRESSION_ZLIB 1 +#define GRUB_BTRFS_COMPRESSION_LZO 2 + +#define GRUB_BTRFS_OBJECT_ID_CHUNK 0x100 + +static grub_disk_addr_t superblock_sectors[] = { 64 * 2, 64 * 1024 * 2, + 256 * 1048576 * 2, 1048576ULL * 1048576ULL * 2 +}; + +static grub_err_t +grub_btrfs_read_logical (struct grub_btrfs_data *data, + grub_disk_addr_t addr, void *buf, grub_size_t size, + int recursion_depth); + +static grub_err_t +read_sblock (grub_disk_t disk, struct grub_btrfs_superblock *sb) +{ + struct grub_btrfs_superblock sblock; + unsigned i; + grub_err_t err = GRUB_ERR_NONE; + for (i = 0; i < ARRAY_SIZE (superblock_sectors); i++) + { + /* Don't try additional superblocks beyond device size. */ + if (i && (grub_le_to_cpu64 (sblock.this_device.size) + >> GRUB_DISK_SECTOR_BITS) <= superblock_sectors[i]) + break; + err = grub_disk_read (disk, superblock_sectors[i], 0, + sizeof (sblock), &sblock); + if (err == GRUB_ERR_OUT_OF_RANGE) + break; + + if (grub_memcmp ((char *) sblock.signature, GRUB_BTRFS_SIGNATURE, + sizeof (GRUB_BTRFS_SIGNATURE) - 1) != 0) + break; + if (i == 0 || grub_le_to_cpu64 (sblock.generation) + > grub_le_to_cpu64 (sb->generation)) + grub_memcpy (sb, &sblock, sizeof (sblock)); + } + + if ((err == GRUB_ERR_OUT_OF_RANGE || !err) && i == 0) + return grub_error (GRUB_ERR_BAD_FS, "not a Btrfs filesystem"); + + if (err == GRUB_ERR_OUT_OF_RANGE) + grub_errno = err = GRUB_ERR_NONE; + + return err; +} + +static int +key_cmp (const struct grub_btrfs_key *a, const struct grub_btrfs_key *b) +{ + if (grub_le_to_cpu64 (a->object_id) < grub_le_to_cpu64 (b->object_id)) + return -1; + if (grub_le_to_cpu64 (a->object_id) > grub_le_to_cpu64 (b->object_id)) + return +1; + + if (a->type < b->type) + return -1; + if (a->type > b->type) + return +1; + + if (grub_le_to_cpu64 (a->offset) < grub_le_to_cpu64 (b->offset)) + return -1; + if (grub_le_to_cpu64 (a->offset) > grub_le_to_cpu64 (b->offset)) + return +1; + return 0; +} + +static void +free_iterator (struct grub_btrfs_leaf_descriptor *desc) +{ + grub_free (desc->data); +} + +static grub_err_t +save_ref (struct grub_btrfs_leaf_descriptor *desc, + grub_disk_addr_t addr, unsigned i, unsigned m, int l) +{ + desc->depth++; + if (desc->allocated < desc->depth) + { + void *newdata; + desc->allocated *= 2; + newdata = grub_realloc (desc->data, sizeof (desc->data[0]) + * desc->allocated); + if (!newdata) + return grub_errno; + desc->data = newdata; + } + desc->data[desc->depth - 1].addr = addr; + desc->data[desc->depth - 1].iter = i; + desc->data[desc->depth - 1].maxiter = m; + desc->data[desc->depth - 1].leaf = l; + return GRUB_ERR_NONE; +} + +static int +next (struct grub_btrfs_data *data, + struct grub_btrfs_leaf_descriptor *desc, + grub_disk_addr_t * outaddr, grub_size_t * outsize, + struct grub_btrfs_key *key_out) +{ + grub_err_t err; + struct grub_btrfs_leaf_node leaf; + + for (; desc->depth > 0; desc->depth--) + { + desc->data[desc->depth - 1].iter++; + if (desc->data[desc->depth - 1].iter + < desc->data[desc->depth - 1].maxiter) + break; + } + if (desc->depth == 0) + return 0; + while (!desc->data[desc->depth - 1].leaf) + { + struct grub_btrfs_internal_node node; + struct btrfs_header head; + + err = grub_btrfs_read_logical (data, desc->data[desc->depth - 1].iter + * sizeof (node) + + sizeof (struct btrfs_header) + + desc->data[desc->depth - 1].addr, + &node, sizeof (node), 0); + if (err) + return -err; + + err = grub_btrfs_read_logical (data, grub_le_to_cpu64 (node.addr), + &head, sizeof (head), 0); + if (err) + return -err; + + save_ref (desc, grub_le_to_cpu64 (node.addr), 0, + grub_le_to_cpu32 (head.nitems), !head.level); + } + err = grub_btrfs_read_logical (data, desc->data[desc->depth - 1].iter + * sizeof (leaf) + + sizeof (struct btrfs_header) + + desc->data[desc->depth - 1].addr, &leaf, + sizeof (leaf), 0); + if (err) + return -err; + *outsize = grub_le_to_cpu32 (leaf.size); + *outaddr = desc->data[desc->depth - 1].addr + sizeof (struct btrfs_header) + + grub_le_to_cpu32 (leaf.offset); + *key_out = leaf.key; + return 1; +} + +static grub_err_t +lower_bound (struct grub_btrfs_data *data, + const struct grub_btrfs_key *key_in, + struct grub_btrfs_key *key_out, + grub_uint64_t root, + grub_disk_addr_t *outaddr, grub_size_t *outsize, + struct grub_btrfs_leaf_descriptor *desc, + int recursion_depth) +{ + grub_disk_addr_t addr = grub_le_to_cpu64 (root); + int depth = -1; + + if (desc) + { + desc->allocated = 16; + desc->depth = 0; + desc->data = grub_malloc (sizeof (desc->data[0]) * desc->allocated); + if (!desc->data) + return grub_errno; + } + + /* > 2 would work as well but be robust and allow a bit more just in case. + */ + if (recursion_depth > 10) + return grub_error (GRUB_ERR_BAD_FS, "too deep btrfs virtual nesting"); + + grub_dprintf ("btrfs", + "retrieving %" PRIxGRUB_UINT64_T + " %x %" PRIxGRUB_UINT64_T "\n", + key_in->object_id, key_in->type, key_in->offset); + + while (1) + { + grub_err_t err; + struct btrfs_header head; + + reiter: + depth++; + /* FIXME: preread few nodes into buffer. */ + err = grub_btrfs_read_logical (data, addr, &head, sizeof (head), + recursion_depth + 1); + if (err) + return err; + addr += sizeof (head); + if (head.level) + { + unsigned i; + struct grub_btrfs_internal_node node, node_last; + int have_last = 0; + grub_memset (&node_last, 0, sizeof (node_last)); + for (i = 0; i < grub_le_to_cpu32 (head.nitems); i++) + { + err = grub_btrfs_read_logical (data, addr + i * sizeof (node), + &node, sizeof (node), + recursion_depth + 1); + if (err) + return err; + + grub_dprintf ("btrfs", + "internal node (depth %d) %" PRIxGRUB_UINT64_T + " %x %" PRIxGRUB_UINT64_T "\n", depth, + node.key.object_id, node.key.type, + node.key.offset); + + if (key_cmp (&node.key, key_in) == 0) + { + err = GRUB_ERR_NONE; + if (desc) + err = save_ref (desc, addr - sizeof (head), i, + grub_le_to_cpu32 (head.nitems), 0); + if (err) + return err; + addr = grub_le_to_cpu64 (node.addr); + goto reiter; + } + if (key_cmp (&node.key, key_in) > 0) + break; + node_last = node; + have_last = 1; + } + if (have_last) + { + err = GRUB_ERR_NONE; + if (desc) + err = save_ref (desc, addr - sizeof (head), i - 1, + grub_le_to_cpu32 (head.nitems), 0); + if (err) + return err; + addr = grub_le_to_cpu64 (node_last.addr); + goto reiter; + } + *outsize = 0; + *outaddr = 0; + grub_memset (key_out, 0, sizeof (*key_out)); + if (desc) + return save_ref (desc, addr - sizeof (head), -1, + grub_le_to_cpu32 (head.nitems), 0); + return GRUB_ERR_NONE; + } + { + unsigned i; + struct grub_btrfs_leaf_node leaf, leaf_last; + int have_last = 0; + for (i = 0; i < grub_le_to_cpu32 (head.nitems); i++) + { + err = grub_btrfs_read_logical (data, addr + i * sizeof (leaf), + &leaf, sizeof (leaf), + recursion_depth + 1); + if (err) + return err; + + grub_dprintf ("btrfs", + "leaf (depth %d) %" PRIxGRUB_UINT64_T + " %x %" PRIxGRUB_UINT64_T "\n", depth, + leaf.key.object_id, leaf.key.type, leaf.key.offset); + + if (key_cmp (&leaf.key, key_in) == 0) + { + grub_memcpy (key_out, &leaf.key, sizeof (*key_out)); + *outsize = grub_le_to_cpu32 (leaf.size); + *outaddr = addr + grub_le_to_cpu32 (leaf.offset); + if (desc) + return save_ref (desc, addr - sizeof (head), i, + grub_le_to_cpu32 (head.nitems), 1); + return GRUB_ERR_NONE; + } + + if (key_cmp (&leaf.key, key_in) > 0) + break; + + have_last = 1; + leaf_last = leaf; + } + + if (have_last) + { + grub_memcpy (key_out, &leaf_last.key, sizeof (*key_out)); + *outsize = grub_le_to_cpu32 (leaf_last.size); + *outaddr = addr + grub_le_to_cpu32 (leaf_last.offset); + if (desc) + return save_ref (desc, addr - sizeof (head), i - 1, + grub_le_to_cpu32 (head.nitems), 1); + return GRUB_ERR_NONE; + } + *outsize = 0; + *outaddr = 0; + grub_memset (key_out, 0, sizeof (*key_out)); + if (desc) + return save_ref (desc, addr - sizeof (head), -1, + grub_le_to_cpu32 (head.nitems), 1); + return GRUB_ERR_NONE; + } + } +} + +/* Context for find_device. */ +struct find_device_ctx +{ + struct grub_btrfs_data *data; + grub_uint64_t id; + grub_device_t dev_found; +}; + +/* Helper for find_device. */ +static int +find_device_iter (const char *name, void *data) +{ + struct find_device_ctx *ctx = data; + grub_device_t dev; + grub_err_t err; + struct grub_btrfs_superblock sb; + + dev = grub_device_open (name); + if (!dev) + return 0; + if (!dev->disk) + { + grub_device_close (dev); + return 0; + } + err = read_sblock (dev->disk, &sb); + if (err == GRUB_ERR_BAD_FS) + { + grub_device_close (dev); + grub_errno = GRUB_ERR_NONE; + return 0; + } + if (err) + { + grub_device_close (dev); + grub_print_error (); + return 0; + } + if (grub_memcmp (ctx->data->sblock.uuid, sb.uuid, sizeof (sb.uuid)) != 0 + || sb.this_device.device_id != ctx->id) + { + grub_device_close (dev); + return 0; + } + + ctx->dev_found = dev; + return 1; +} + +static grub_device_t +find_device (struct grub_btrfs_data *data, grub_uint64_t id, int do_rescan) +{ + struct find_device_ctx ctx = { + .data = data, + .id = id, + .dev_found = NULL + }; + unsigned i; + + for (i = 0; i < data->n_devices_attached; i++) + if (id == data->devices_attached[i].id) + return data->devices_attached[i].dev; + if (do_rescan) + grub_device_iterate (find_device_iter, &ctx); + if (!ctx.dev_found) + { + grub_error (GRUB_ERR_BAD_FS, + N_("couldn't find a necessary member device " + "of multi-device filesystem")); + return NULL; + } + data->n_devices_attached++; + if (data->n_devices_attached > data->n_devices_allocated) + { + void *tmp; + data->n_devices_allocated = 2 * data->n_devices_attached + 1; + data->devices_attached + = grub_realloc (tmp = data->devices_attached, + data->n_devices_allocated + * sizeof (data->devices_attached[0])); + if (!data->devices_attached) + { + grub_device_close (ctx.dev_found); + data->devices_attached = tmp; + return NULL; + } + } + data->devices_attached[data->n_devices_attached - 1].id = id; + data->devices_attached[data->n_devices_attached - 1].dev = ctx.dev_found; + return ctx.dev_found; +} + +static grub_err_t +grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr, + void *buf, grub_size_t size, int recursion_depth) +{ + while (size > 0) + { + grub_uint8_t *ptr; + struct grub_btrfs_key *key; + struct grub_btrfs_chunk_item *chunk; + grub_uint64_t csize; + grub_err_t err = 0; + struct grub_btrfs_key key_out; + int challoc = 0; + grub_device_t dev; + struct grub_btrfs_key key_in; + grub_size_t chsize; + grub_disk_addr_t chaddr; + + grub_dprintf ("btrfs", "searching for laddr %" PRIxGRUB_UINT64_T "\n", + addr); + for (ptr = data->sblock.bootstrap_mapping; + ptr < data->sblock.bootstrap_mapping + + sizeof (data->sblock.bootstrap_mapping) + - sizeof (struct grub_btrfs_key);) + { + key = (struct grub_btrfs_key *) ptr; + if (key->type != GRUB_BTRFS_ITEM_TYPE_CHUNK) + break; + chunk = (struct grub_btrfs_chunk_item *) (key + 1); + grub_dprintf ("btrfs", + "%" PRIxGRUB_UINT64_T " %" PRIxGRUB_UINT64_T " \n", + grub_le_to_cpu64 (key->offset), + grub_le_to_cpu64 (chunk->size)); + if (grub_le_to_cpu64 (key->offset) <= addr + && addr < grub_le_to_cpu64 (key->offset) + + grub_le_to_cpu64 (chunk->size)) + goto chunk_found; + ptr += sizeof (*key) + sizeof (*chunk) + + sizeof (struct grub_btrfs_chunk_stripe) + * grub_le_to_cpu16 (chunk->nstripes); + } + + key_in.object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_OBJECT_ID_CHUNK); + key_in.type = GRUB_BTRFS_ITEM_TYPE_CHUNK; + key_in.offset = grub_cpu_to_le64 (addr); + err = lower_bound (data, &key_in, &key_out, + data->sblock.chunk_tree, + &chaddr, &chsize, NULL, recursion_depth); + if (err) + return err; + key = &key_out; + if (key->type != GRUB_BTRFS_ITEM_TYPE_CHUNK + || !(grub_le_to_cpu64 (key->offset) <= addr)) + return grub_error (GRUB_ERR_BAD_FS, + "couldn't find the chunk descriptor"); + + chunk = grub_malloc (chsize); + if (!chunk) + return grub_errno; + + challoc = 1; + err = grub_btrfs_read_logical (data, chaddr, chunk, chsize, + recursion_depth); + if (err) + { + grub_free (chunk); + return err; + } + + chunk_found: + { + grub_uint64_t stripen; + grub_uint64_t stripe_offset; + grub_uint64_t off = addr - grub_le_to_cpu64 (key->offset); + grub_uint64_t chunk_stripe_length; + grub_uint16_t nstripes; + unsigned redundancy = 1; + unsigned i, j; + + if (grub_le_to_cpu64 (chunk->size) <= off) + { + grub_dprintf ("btrfs", "no chunk\n"); + return grub_error (GRUB_ERR_BAD_FS, + "couldn't find the chunk descriptor"); + } + + nstripes = grub_le_to_cpu16 (chunk->nstripes) ? : 1; + chunk_stripe_length = grub_le_to_cpu64 (chunk->stripe_length) ? : 512; + grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T + "+0x%" PRIxGRUB_UINT64_T + " (%d stripes (%d substripes) of %" + PRIxGRUB_UINT64_T ")\n", + grub_le_to_cpu64 (key->offset), + grub_le_to_cpu64 (chunk->size), + nstripes, + grub_le_to_cpu16 (chunk->nsubstripes), + chunk_stripe_length); + + switch (grub_le_to_cpu64 (chunk->type) + & ~GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE) + { + case GRUB_BTRFS_CHUNK_TYPE_SINGLE: + { + grub_uint64_t stripe_length; + grub_dprintf ("btrfs", "single\n"); + stripe_length = grub_divmod64 (grub_le_to_cpu64 (chunk->size), + nstripes, + NULL); + if (stripe_length == 0) + stripe_length = 512; + stripen = grub_divmod64 (off, stripe_length, &stripe_offset); + csize = (stripen + 1) * stripe_length - off; + break; + } + case GRUB_BTRFS_CHUNK_TYPE_DUPLICATED: + case GRUB_BTRFS_CHUNK_TYPE_RAID1: + { + grub_dprintf ("btrfs", "RAID1\n"); + stripen = 0; + stripe_offset = off; + csize = grub_le_to_cpu64 (chunk->size) - off; + redundancy = 2; + break; + } + case GRUB_BTRFS_CHUNK_TYPE_RAID0: + { + grub_uint64_t middle, high; + grub_uint64_t low; + grub_dprintf ("btrfs", "RAID0\n"); + middle = grub_divmod64 (off, + chunk_stripe_length, + &low); + + high = grub_divmod64 (middle, nstripes, + &stripen); + stripe_offset = + low + chunk_stripe_length * high; + csize = chunk_stripe_length - low; + break; + } + case GRUB_BTRFS_CHUNK_TYPE_RAID10: + { + grub_uint64_t middle, high; + grub_uint64_t low; + grub_uint16_t nsubstripes; + nsubstripes = grub_le_to_cpu16 (chunk->nsubstripes) ? : 1; + middle = grub_divmod64 (off, + chunk_stripe_length, + &low); + + high = grub_divmod64 (middle, + nstripes / nsubstripes ? : 1, + &stripen); + stripen *= nsubstripes; + redundancy = nsubstripes; + stripe_offset = low + chunk_stripe_length + * high; + csize = chunk_stripe_length - low; + break; + } + default: + grub_dprintf ("btrfs", "unsupported RAID\n"); + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported RAID flags %" PRIxGRUB_UINT64_T, + grub_le_to_cpu64 (chunk->type)); + } + if (csize == 0) + return grub_error (GRUB_ERR_BUG, + "couldn't find the chunk descriptor"); + if (csize > (grub_uint64_t) size) + csize = size; + + for (j = 0; j < 2; j++) + { + for (i = 0; i < redundancy; i++) + { + struct grub_btrfs_chunk_stripe *stripe; + grub_disk_addr_t paddr; + + stripe = (struct grub_btrfs_chunk_stripe *) (chunk + 1); + /* Right now the redundancy handling is easy. + With RAID5-like it will be more difficult. */ + stripe += stripen + i; + + paddr = grub_le_to_cpu64 (stripe->offset) + stripe_offset; + + grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T + "+0x%" PRIxGRUB_UINT64_T + " (%d stripes (%d substripes) of %" + PRIxGRUB_UINT64_T ") stripe %" PRIxGRUB_UINT64_T + " maps to 0x%" PRIxGRUB_UINT64_T "\n", + grub_le_to_cpu64 (key->offset), + grub_le_to_cpu64 (chunk->size), + grub_le_to_cpu16 (chunk->nstripes), + grub_le_to_cpu16 (chunk->nsubstripes), + grub_le_to_cpu64 (chunk->stripe_length), + stripen, stripe->offset); + grub_dprintf ("btrfs", "reading paddr 0x%" PRIxGRUB_UINT64_T + " for laddr 0x%" PRIxGRUB_UINT64_T "\n", paddr, + addr); + + dev = find_device (data, stripe->device_id, j); + if (!dev) + { + err = grub_errno; + grub_errno = GRUB_ERR_NONE; + continue; + } + + err = grub_disk_read (dev->disk, paddr >> GRUB_DISK_SECTOR_BITS, + paddr & (GRUB_DISK_SECTOR_SIZE - 1), + csize, buf); + if (!err) + break; + grub_errno = GRUB_ERR_NONE; + } + if (i != redundancy) + break; + } + if (err) + return grub_errno = err; + } + size -= csize; + buf = (grub_uint8_t *) buf + csize; + addr += csize; + if (challoc) + grub_free (chunk); + } + return GRUB_ERR_NONE; +} + +static struct grub_btrfs_data * +grub_btrfs_mount (grub_device_t dev) +{ + struct grub_btrfs_data *data; + grub_err_t err; + + if (!dev->disk) + { + grub_error (GRUB_ERR_BAD_FS, "not BtrFS"); + return NULL; + } + + data = grub_zalloc (sizeof (*data)); + if (!data) + return NULL; + + err = read_sblock (dev->disk, &data->sblock); + if (err) + { + grub_free (data); + return NULL; + } + + data->n_devices_allocated = 16; + data->devices_attached = grub_malloc (sizeof (data->devices_attached[0]) + * data->n_devices_allocated); + if (!data->devices_attached) + { + grub_free (data); + return NULL; + } + data->n_devices_attached = 1; + data->devices_attached[0].dev = dev; + data->devices_attached[0].id = data->sblock.this_device.device_id; + + return data; +} + +static void +grub_btrfs_unmount (struct grub_btrfs_data *data) +{ + unsigned i; + /* The device 0 is closed one layer upper. */ + for (i = 1; i < data->n_devices_attached; i++) + grub_device_close (data->devices_attached[i].dev); + grub_free (data->devices_attached); + grub_free (data->extent); + grub_free (data); +} + +static grub_err_t +grub_btrfs_read_inode (struct grub_btrfs_data *data, + struct grub_btrfs_inode *inode, grub_uint64_t num, + grub_uint64_t tree) +{ + struct grub_btrfs_key key_in, key_out; + grub_disk_addr_t elemaddr; + grub_size_t elemsize; + grub_err_t err; + + key_in.object_id = num; + key_in.type = GRUB_BTRFS_ITEM_TYPE_INODE_ITEM; + key_in.offset = 0; + + err = lower_bound (data, &key_in, &key_out, tree, &elemaddr, &elemsize, NULL, + 0); + if (err) + return err; + if (num != key_out.object_id + || key_out.type != GRUB_BTRFS_ITEM_TYPE_INODE_ITEM) + return grub_error (GRUB_ERR_BAD_FS, "inode not found"); + + return grub_btrfs_read_logical (data, elemaddr, inode, sizeof (*inode), 0); +} + +static grub_ssize_t +grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off, + char *obuf, grub_size_t osize) +{ + grub_uint32_t total_size, cblock_size; + grub_size_t ret = 0; + char *ibuf0 = ibuf; + + total_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); + ibuf += sizeof (total_size); + + if (isize < total_size) + return -1; + + /* Jump forward to first block with requested data. */ + while (off >= GRUB_BTRFS_LZO_BLOCK_SIZE) + { + /* Don't let following uint32_t cross the page boundary. */ + if (((ibuf - ibuf0) & 0xffc) == 0xffc) + ibuf = ((ibuf - ibuf0 + 3) & ~3) + ibuf0; + + cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); + ibuf += sizeof (cblock_size); + + if (cblock_size > GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE) + return -1; + + off -= GRUB_BTRFS_LZO_BLOCK_SIZE; + ibuf += cblock_size; + } + + while (osize > 0) + { + lzo_uint usize = GRUB_BTRFS_LZO_BLOCK_SIZE; + + /* Don't let following uint32_t cross the page boundary. */ + if (((ibuf - ibuf0) & 0xffc) == 0xffc) + ibuf = ((ibuf - ibuf0 + 3) & ~3) + ibuf0; + + cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); + ibuf += sizeof (cblock_size); + + if (cblock_size > GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE) + return -1; + + /* Block partially filled with requested data. */ + if (off > 0 || osize < GRUB_BTRFS_LZO_BLOCK_SIZE) + { + grub_size_t to_copy = GRUB_BTRFS_LZO_BLOCK_SIZE - off; + grub_uint8_t *buf; + + if (to_copy > osize) + to_copy = osize; + + buf = grub_malloc (GRUB_BTRFS_LZO_BLOCK_SIZE); + if (!buf) + return -1; + + if (lzo1x_decompress_safe ((lzo_bytep)ibuf, cblock_size, buf, &usize, + NULL) != LZO_E_OK) + { + grub_free (buf); + return -1; + } + + if (to_copy > usize) + to_copy = usize; + grub_memcpy(obuf, buf + off, to_copy); + + osize -= to_copy; + ret += to_copy; + obuf += to_copy; + ibuf += cblock_size; + off = 0; + + grub_free (buf); + continue; + } + + /* Decompress whole block directly to output buffer. */ + if (lzo1x_decompress_safe ((lzo_bytep)ibuf, cblock_size, (lzo_bytep)obuf, + &usize, NULL) != LZO_E_OK) + return -1; + + osize -= usize; + ret += usize; + obuf += usize; + ibuf += cblock_size; + } + + return ret; +} + +static grub_ssize_t +grub_btrfs_extent_read (struct grub_btrfs_data *data, + grub_uint64_t ino, grub_uint64_t tree, + grub_off_t pos0, char *buf, grub_size_t len) +{ + grub_off_t pos = pos0; + while (len) + { + grub_size_t csize; + grub_err_t err; + grub_off_t extoff; + if (!data->extent || data->extstart > pos || data->extino != ino + || data->exttree != tree || data->extend <= pos) + { + struct grub_btrfs_key key_in, key_out; + grub_disk_addr_t elemaddr; + grub_size_t elemsize; + + grub_free (data->extent); + key_in.object_id = ino; + key_in.type = GRUB_BTRFS_ITEM_TYPE_EXTENT_ITEM; + key_in.offset = grub_cpu_to_le64 (pos); + err = lower_bound (data, &key_in, &key_out, tree, + &elemaddr, &elemsize, NULL, 0); + if (err) + return -1; + if (key_out.object_id != ino + || key_out.type != GRUB_BTRFS_ITEM_TYPE_EXTENT_ITEM) + { + grub_error (GRUB_ERR_BAD_FS, "extent not found"); + return -1; + } + if ((grub_ssize_t) elemsize < ((char *) &data->extent->inl + - (char *) data->extent)) + { + grub_error (GRUB_ERR_BAD_FS, "extent descriptor is too short"); + return -1; + } + data->extstart = grub_le_to_cpu64 (key_out.offset); + data->extsize = elemsize; + data->extent = grub_malloc (elemsize); + data->extino = ino; + data->exttree = tree; + if (!data->extent) + return grub_errno; + + err = grub_btrfs_read_logical (data, elemaddr, data->extent, + elemsize, 0); + if (err) + return err; + + data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size); + if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR + && (char *) data->extent + elemsize + >= (char *) &data->extent->filled + sizeof (data->extent->filled)) + data->extend = + data->extstart + grub_le_to_cpu64 (data->extent->filled); + + grub_dprintf ("btrfs", "regular extent 0x%" PRIxGRUB_UINT64_T "+0x%" + PRIxGRUB_UINT64_T "\n", + grub_le_to_cpu64 (key_out.offset), + grub_le_to_cpu64 (data->extent->size)); + if (data->extend <= pos) + { + grub_error (GRUB_ERR_BAD_FS, "extent not found"); + return -1; + } + } + csize = data->extend - pos; + extoff = pos - data->extstart; + if (csize > len) + csize = len; + + if (data->extent->encryption) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "encryption not supported"); + return -1; + } + + if (data->extent->compression != GRUB_BTRFS_COMPRESSION_NONE + && data->extent->compression != GRUB_BTRFS_COMPRESSION_ZLIB + && data->extent->compression != GRUB_BTRFS_COMPRESSION_LZO) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "compression type 0x%x not supported", + data->extent->compression); + return -1; + } + + if (data->extent->encoding) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "encoding not supported"); + return -1; + } + + switch (data->extent->type) + { + case GRUB_BTRFS_EXTENT_INLINE: + if (data->extent->compression == GRUB_BTRFS_COMPRESSION_ZLIB) + { + if (grub_zlib_decompress (data->extent->inl, data->extsize - + ((grub_uint8_t *) data->extent->inl + - (grub_uint8_t *) data->extent), + extoff, buf, csize) + != (grub_ssize_t) csize) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return -1; + } + } + else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO) + { + if (grub_btrfs_lzo_decompress(data->extent->inl, data->extsize - + ((grub_uint8_t *) data->extent->inl + - (grub_uint8_t *) data->extent), + extoff, buf, csize) + != (grub_ssize_t) csize) + return -1; + } + else + grub_memcpy (buf, data->extent->inl + extoff, csize); + break; + case GRUB_BTRFS_EXTENT_REGULAR: + if (!data->extent->laddr) + { + grub_memset (buf, 0, csize); + break; + } + + if (data->extent->compression != GRUB_BTRFS_COMPRESSION_NONE) + { + char *tmp; + grub_uint64_t zsize; + grub_ssize_t ret; + + zsize = grub_le_to_cpu64 (data->extent->compressed_size); + tmp = grub_malloc (zsize); + if (!tmp) + return -1; + err = grub_btrfs_read_logical (data, + grub_le_to_cpu64 (data->extent->laddr), + tmp, zsize, 0); + if (err) + { + grub_free (tmp); + return -1; + } + + if (data->extent->compression == GRUB_BTRFS_COMPRESSION_ZLIB) + ret = grub_zlib_decompress (tmp, zsize, extoff + + grub_le_to_cpu64 (data->extent->offset), + buf, csize); + else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO) + ret = grub_btrfs_lzo_decompress (tmp, zsize, extoff + + grub_le_to_cpu64 (data->extent->offset), + buf, csize); + else + ret = -1; + + grub_free (tmp); + + if (ret != (grub_ssize_t) csize) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return -1; + } + + break; + } + err = grub_btrfs_read_logical (data, + grub_le_to_cpu64 (data->extent->laddr) + + grub_le_to_cpu64 (data->extent->offset) + + extoff, buf, csize, 0); + if (err) + return -1; + break; + default: + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported extent type 0x%x", data->extent->type); + return -1; + } + buf += csize; + pos += csize; + len -= csize; + } + return pos - pos0; +} + +static grub_err_t +get_root (struct grub_btrfs_data *data, struct grub_btrfs_key *key, + grub_uint64_t *tree, grub_uint8_t *type) +{ + grub_err_t err; + grub_disk_addr_t elemaddr; + grub_size_t elemsize; + struct grub_btrfs_key key_out, key_in; + struct grub_btrfs_root_item ri; + + key_in.object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_ROOT_VOL_OBJECTID); + key_in.offset = 0; + key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM; + err = lower_bound (data, &key_in, &key_out, + data->sblock.root_tree, + &elemaddr, &elemsize, NULL, 0); + if (err) + return err; + if (key_in.object_id != key_out.object_id + || key_in.type != key_out.type + || key_in.offset != key_out.offset) + return grub_error (GRUB_ERR_BAD_FS, "no root"); + err = grub_btrfs_read_logical (data, elemaddr, &ri, + sizeof (ri), 0); + if (err) + return err; + key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; + key->offset = 0; + key->object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_OBJECT_ID_CHUNK); + *tree = ri.tree; + *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY; + return GRUB_ERR_NONE; +} + +static grub_err_t +find_path (struct grub_btrfs_data *data, + const char *path, struct grub_btrfs_key *key, + grub_uint64_t *tree, grub_uint8_t *type) +{ + const char *slash = path; + grub_err_t err; + grub_disk_addr_t elemaddr; + grub_size_t elemsize; + grub_size_t allocated = 0; + struct grub_btrfs_dir_item *direl = NULL; + struct grub_btrfs_key key_out; + const char *ctoken; + grub_size_t ctokenlen; + char *path_alloc = NULL; + char *origpath = NULL; + unsigned symlinks_max = 32; + + err = get_root (data, key, tree, type); + if (err) + return err; + + origpath = grub_strdup (path); + if (!origpath) + return grub_errno; + + while (1) + { + while (path[0] == '/') + path++; + if (!path[0]) + break; + slash = grub_strchr (path, '/'); + if (!slash) + slash = path + grub_strlen (path); + ctoken = path; + ctokenlen = slash - path; + + if (*type != GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY) + { + grub_free (path_alloc); + grub_free (origpath); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + } + + if (ctokenlen == 1 && ctoken[0] == '.') + { + path = slash; + continue; + } + if (ctokenlen == 2 && ctoken[0] == '.' && ctoken[1] == '.') + { + key->type = GRUB_BTRFS_ITEM_TYPE_INODE_REF; + key->offset = -1; + + err = lower_bound (data, key, &key_out, *tree, &elemaddr, &elemsize, + NULL, 0); + if (err) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return err; + } + + if (key_out.type != key->type + || key->object_id != key_out.object_id) + { + grub_free (direl); + grub_free (path_alloc); + err = grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), origpath); + grub_free (origpath); + return err; + } + + *type = GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY; + key->object_id = key_out.offset; + + path = slash; + + continue; + } + + key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; + key->offset = grub_cpu_to_le64 (~grub_getcrc32c (1, ctoken, ctokenlen)); + + err = lower_bound (data, key, &key_out, *tree, &elemaddr, &elemsize, + NULL, 0); + if (err) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return err; + } + if (key_cmp (key, &key_out) != 0) + { + grub_free (direl); + grub_free (path_alloc); + err = grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), origpath); + grub_free (origpath); + return err; + } + + struct grub_btrfs_dir_item *cdirel; + if (elemsize > allocated) + { + allocated = 2 * elemsize; + grub_free (direl); + direl = grub_malloc (allocated + 1); + if (!direl) + { + grub_free (path_alloc); + grub_free (origpath); + return grub_errno; + } + } + + err = grub_btrfs_read_logical (data, elemaddr, direl, elemsize, 0); + if (err) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return err; + } + + for (cdirel = direl; + (grub_uint8_t *) cdirel - (grub_uint8_t *) direl + < (grub_ssize_t) elemsize; + cdirel = (void *) ((grub_uint8_t *) (direl + 1) + + grub_le_to_cpu16 (cdirel->n) + + grub_le_to_cpu16 (cdirel->m))) + { + if (ctokenlen == grub_le_to_cpu16 (cdirel->n) + && grub_memcmp (cdirel->name, ctoken, ctokenlen) == 0) + break; + } + if ((grub_uint8_t *) cdirel - (grub_uint8_t *) direl + >= (grub_ssize_t) elemsize) + { + grub_free (direl); + grub_free (path_alloc); + err = grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), origpath); + grub_free (origpath); + return err; + } + + path = slash; + if (cdirel->type == GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK) + { + struct grub_btrfs_inode inode; + char *tmp; + if (--symlinks_max == 0) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + } + + err = grub_btrfs_read_inode (data, &inode, + cdirel->key.object_id, *tree); + if (err) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return err; + } + tmp = grub_malloc (grub_le_to_cpu64 (inode.size) + + grub_strlen (path) + 1); + if (!tmp) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return grub_errno; + } + + if (grub_btrfs_extent_read (data, cdirel->key.object_id, + *tree, 0, tmp, + grub_le_to_cpu64 (inode.size)) + != (grub_ssize_t) grub_le_to_cpu64 (inode.size)) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + grub_free (tmp); + return grub_errno; + } + grub_memcpy (tmp + grub_le_to_cpu64 (inode.size), path, + grub_strlen (path) + 1); + grub_free (path_alloc); + path = path_alloc = tmp; + if (path[0] == '/') + { + err = get_root (data, key, tree, type); + if (err) + return err; + } + continue; + } + *type = cdirel->type; + + switch (cdirel->key.type) + { + case GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM: + { + struct grub_btrfs_root_item ri; + err = lower_bound (data, &cdirel->key, &key_out, + data->sblock.root_tree, + &elemaddr, &elemsize, NULL, 0); + if (err) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return err; + } + if (cdirel->key.object_id != key_out.object_id + || cdirel->key.type != key_out.type) + { + grub_free (direl); + grub_free (path_alloc); + err = grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), origpath); + grub_free (origpath); + return err; + } + err = grub_btrfs_read_logical (data, elemaddr, &ri, + sizeof (ri), 0); + if (err) + { + grub_free (direl); + grub_free (path_alloc); + grub_free (origpath); + return err; + } + key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; + key->offset = 0; + key->object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_OBJECT_ID_CHUNK); + *tree = ri.tree; + break; + } + case GRUB_BTRFS_ITEM_TYPE_INODE_ITEM: + if (*slash && *type == GRUB_BTRFS_DIR_ITEM_TYPE_REGULAR) + { + grub_free (direl); + grub_free (path_alloc); + err = grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), origpath); + grub_free (origpath); + return err; + } + *key = cdirel->key; + if (*type == GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY) + key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; + break; + default: + grub_free (path_alloc); + grub_free (origpath); + grub_free (direl); + return grub_error (GRUB_ERR_BAD_FS, "unrecognised object type 0x%x", + cdirel->key.type); + } + } + + grub_free (direl); + grub_free (origpath); + grub_free (path_alloc); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_btrfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_btrfs_data *data = grub_btrfs_mount (device); + struct grub_btrfs_key key_in, key_out; + grub_err_t err; + grub_disk_addr_t elemaddr; + grub_size_t elemsize; + grub_size_t allocated = 0; + struct grub_btrfs_dir_item *direl = NULL; + struct grub_btrfs_leaf_descriptor desc; + int r = 0; + grub_uint64_t tree; + grub_uint8_t type; + + if (!data) + return grub_errno; + + err = find_path (data, path, &key_in, &tree, &type); + if (err) + { + grub_btrfs_unmount (data); + return err; + } + if (type != GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY) + { + grub_btrfs_unmount (data); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + } + + err = lower_bound (data, &key_in, &key_out, tree, + &elemaddr, &elemsize, &desc, 0); + if (err) + { + grub_btrfs_unmount (data); + return err; + } + if (key_out.type != GRUB_BTRFS_ITEM_TYPE_DIR_ITEM + || key_out.object_id != key_in.object_id) + { + r = next (data, &desc, &elemaddr, &elemsize, &key_out); + if (r <= 0) + goto out; + } + do + { + struct grub_btrfs_dir_item *cdirel; + if (key_out.type != GRUB_BTRFS_ITEM_TYPE_DIR_ITEM + || key_out.object_id != key_in.object_id) + { + r = 0; + break; + } + if (elemsize > allocated) + { + allocated = 2 * elemsize; + grub_free (direl); + direl = grub_malloc (allocated + 1); + if (!direl) + { + r = -grub_errno; + break; + } + } + + err = grub_btrfs_read_logical (data, elemaddr, direl, elemsize, 0); + if (err) + { + r = -err; + break; + } + + for (cdirel = direl; + (grub_uint8_t *) cdirel - (grub_uint8_t *) direl + < (grub_ssize_t) elemsize; + cdirel = (void *) ((grub_uint8_t *) (direl + 1) + + grub_le_to_cpu16 (cdirel->n) + + grub_le_to_cpu16 (cdirel->m))) + { + char c; + struct grub_btrfs_inode inode; + struct grub_dirhook_info info; + err = grub_btrfs_read_inode (data, &inode, cdirel->key.object_id, + tree); + grub_memset (&info, 0, sizeof (info)); + if (err) + grub_errno = GRUB_ERR_NONE; + else + { + info.mtime = grub_le_to_cpu64 (inode.mtime.sec); + info.mtimeset = 1; + } + c = cdirel->name[grub_le_to_cpu16 (cdirel->n)]; + cdirel->name[grub_le_to_cpu16 (cdirel->n)] = 0; + info.dir = (cdirel->type == GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY); + if (hook (cdirel->name, &info, hook_data)) + goto out; + cdirel->name[grub_le_to_cpu16 (cdirel->n)] = c; + } + r = next (data, &desc, &elemaddr, &elemsize, &key_out); + } + while (r > 0); + +out: + grub_free (direl); + + free_iterator (&desc); + grub_btrfs_unmount (data); + + return -r; +} + +static grub_err_t +grub_btrfs_open (struct grub_file *file, const char *name) +{ + struct grub_btrfs_data *data = grub_btrfs_mount (file->device); + grub_err_t err; + struct grub_btrfs_inode inode; + grub_uint8_t type; + struct grub_btrfs_key key_in; + + if (!data) + return grub_errno; + + err = find_path (data, name, &key_in, &data->tree, &type); + if (err) + { + grub_btrfs_unmount (data); + return err; + } + if (type != GRUB_BTRFS_DIR_ITEM_TYPE_REGULAR) + { + grub_btrfs_unmount (data); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a regular file")); + } + + data->inode = key_in.object_id; + err = grub_btrfs_read_inode (data, &inode, data->inode, data->tree); + if (err) + { + grub_btrfs_unmount (data); + return err; + } + + file->data = data; + file->size = grub_le_to_cpu64 (inode.size); + + return err; +} + +static grub_err_t +grub_btrfs_close (grub_file_t file) +{ + grub_btrfs_unmount (file->data); + + return GRUB_ERR_NONE; +} + +static grub_ssize_t +grub_btrfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_btrfs_data *data = file->data; + + return grub_btrfs_extent_read (data, data->inode, + data->tree, file->offset, buf, len); +} + +static grub_err_t +grub_btrfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_btrfs_data *data; + + *uuid = NULL; + + data = grub_btrfs_mount (device); + if (!data) + return grub_errno; + + *uuid = grub_xasprintf ("%04x%04x-%04x-%04x-%04x-%04x%04x%04x", + grub_be_to_cpu16 (data->sblock.uuid[0]), + grub_be_to_cpu16 (data->sblock.uuid[1]), + grub_be_to_cpu16 (data->sblock.uuid[2]), + grub_be_to_cpu16 (data->sblock.uuid[3]), + grub_be_to_cpu16 (data->sblock.uuid[4]), + grub_be_to_cpu16 (data->sblock.uuid[5]), + grub_be_to_cpu16 (data->sblock.uuid[6]), + grub_be_to_cpu16 (data->sblock.uuid[7])); + + grub_btrfs_unmount (data); + + return grub_errno; +} + +static grub_err_t +grub_btrfs_label (grub_device_t device, char **label) +{ + struct grub_btrfs_data *data; + + *label = NULL; + + data = grub_btrfs_mount (device); + if (!data) + return grub_errno; + + *label = grub_strndup (data->sblock.label, sizeof (data->sblock.label)); + + grub_btrfs_unmount (data); + + return grub_errno; +} + +#ifdef GRUB_UTIL +static grub_err_t +grub_btrfs_embed (grub_device_t device __attribute__ ((unused)), + unsigned int *nsectors, + unsigned int max_nsectors, + grub_embed_type_t embed_type, + grub_disk_addr_t **sectors) +{ + unsigned i; + + if (embed_type != GRUB_EMBED_PCBIOS) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "BtrFS currently supports only PC-BIOS embedding"); + + if (64 * 2 - 1 < *nsectors) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("your core.img is unusually large. " + "It won't fit in the embedding area")); + + *nsectors = 64 * 2 - 1; + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; + *sectors = grub_malloc (*nsectors * sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) + (*sectors)[i] = i + 1; + + return GRUB_ERR_NONE; +} +#endif + +static struct grub_fs grub_btrfs_fs = { + .name = "btrfs", + .dir = grub_btrfs_dir, + .open = grub_btrfs_open, + .read = grub_btrfs_read, + .close = grub_btrfs_close, + .uuid = grub_btrfs_uuid, + .label = grub_btrfs_label, +#ifdef GRUB_UTIL + .embed = grub_btrfs_embed, + .reserved_first_sector = 1, + .blocklist_install = 0, +#endif +}; + +GRUB_MOD_INIT (btrfs) +{ + grub_fs_register (&grub_btrfs_fs); +} + +GRUB_MOD_FINI (btrfs) +{ + grub_fs_unregister (&grub_btrfs_fs); +} diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c new file mode 100644 index 000000000..0842701a6 --- /dev/null +++ b/grub-core/fs/cbfs.c @@ -0,0 +1,402 @@ +/* cbfs.c - cbfs and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + + +struct grub_archelp_data +{ + grub_disk_t disk; + grub_off_t hofs, next_hofs; + grub_off_t dofs; + grub_off_t size; + grub_off_t cbfs_start; + grub_off_t cbfs_end; + grub_off_t cbfs_align; +}; + +static grub_err_t +grub_cbfs_find_file (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, + grub_uint32_t *mode) +{ + grub_size_t offset; + for (;; + data->dofs = data->hofs + offset, + data->next_hofs = ALIGN_UP (data->dofs + data->size, data->cbfs_align)) + { + struct cbfs_file hd; + grub_size_t namesize; + + data->hofs = data->next_hofs; + + if (data->hofs >= data->cbfs_end) + { + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) + return grub_errno; + + if (grub_memcmp (hd.magic, CBFS_FILE_MAGIC, sizeof (hd.magic)) != 0) + { + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + data->size = grub_be_to_cpu32 (hd.len); + (void) mtime; + offset = grub_be_to_cpu32 (hd.offset); + + *mode = GRUB_ARCHELP_ATTR_FILE | GRUB_ARCHELP_ATTR_NOTIME; + + namesize = offset; + if (namesize >= sizeof (hd)) + namesize -= sizeof (hd); + if (namesize == 0) + continue; + *name = grub_malloc (namesize + 1); + if (*name == NULL) + return grub_errno; + + if (grub_disk_read (data->disk, 0, data->hofs + sizeof (hd), + namesize, *name)) + { + grub_free (*name); + return grub_errno; + } + + if ((*name)[0] == '\0') + { + grub_free (*name); + *name = NULL; + continue; + } + + (*name)[namesize] = 0; + + data->dofs = data->hofs + offset; + data->next_hofs = ALIGN_UP (data->dofs + data->size, data->cbfs_align); + return GRUB_ERR_NONE; + } +} + +static void +grub_cbfs_rewind (struct grub_archelp_data *data) +{ + data->next_hofs = data->cbfs_start; +} + +static struct grub_archelp_ops arcops = + { + .find_file = grub_cbfs_find_file, + .rewind = grub_cbfs_rewind + }; + +static int +validate_head (struct cbfs_header *head) +{ + return (head->magic == grub_cpu_to_be32_compile_time (CBFS_HEADER_MAGIC) + && (head->version + == grub_cpu_to_be32_compile_time (CBFS_HEADER_VERSION1) + || head->version + == grub_cpu_to_be32_compile_time (CBFS_HEADER_VERSION2)) + && (grub_be_to_cpu32 (head->bootblocksize) + < grub_be_to_cpu32 (head->romsize)) + && (grub_be_to_cpu32 (head->offset) + < grub_be_to_cpu32 (head->romsize)) + && (grub_be_to_cpu32 (head->offset) + + grub_be_to_cpu32 (head->bootblocksize) + < grub_be_to_cpu32 (head->romsize)) + && head->align != 0 + && (head->align & (head->align - 1)) == 0 + && head->romsize != 0); +} + +static struct grub_archelp_data * +grub_cbfs_mount (grub_disk_t disk) +{ + struct cbfs_file hd; + struct grub_archelp_data *data = NULL; + grub_uint32_t ptr; + grub_off_t header_off; + struct cbfs_header head; + + if (grub_disk_get_size (disk) == GRUB_DISK_SIZE_UNKNOWN) + goto fail; + + if (grub_disk_read (disk, grub_disk_get_size (disk) - 1, + GRUB_DISK_SECTOR_SIZE - sizeof (ptr), + sizeof (ptr), &ptr)) + goto fail; + + ptr = grub_cpu_to_le32 (ptr); + header_off = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS) + + (grub_int32_t) ptr; + + if (grub_disk_read (disk, 0, header_off, + sizeof (head), &head)) + goto fail; + + if (!validate_head (&head)) + goto fail; + + data = (struct grub_archelp_data *) grub_zalloc (sizeof (*data)); + if (!data) + goto fail; + + data->cbfs_start = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS) + - (grub_be_to_cpu32 (head.romsize) - grub_be_to_cpu32 (head.offset)); + data->cbfs_end = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS) + - grub_be_to_cpu32 (head.bootblocksize); + data->cbfs_align = grub_be_to_cpu32 (head.align); + + if (data->cbfs_start >= (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS)) + goto fail; + if (data->cbfs_end > (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS)) + data->cbfs_end = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS); + + data->next_hofs = data->cbfs_start; + + if (grub_disk_read (disk, 0, data->cbfs_start, sizeof (hd), &hd)) + goto fail; + + if (grub_memcmp (hd.magic, CBFS_FILE_MAGIC, sizeof (CBFS_FILE_MAGIC) - 1)) + goto fail; + + data->disk = disk; + + return data; + +fail: + grub_free (data); + grub_error (GRUB_ERR_BAD_FS, "not a cbfs filesystem"); + return 0; +} + +static grub_err_t +grub_cbfs_dir (grub_device_t device, const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cbfs_mount (device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_dir (data, &arcops, + path_in, hook, hook_data); + + grub_free (data); + + return err; +} + +static grub_err_t +grub_cbfs_open (grub_file_t file, const char *name_in) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cbfs_mount (file->device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_open (data, &arcops, name_in); + if (err) + { + grub_free (data); + } + else + { + file->data = data; + file->size = data->size; + } + return err; +} + +static grub_ssize_t +grub_cbfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_archelp_data *data; + grub_ssize_t ret; + + data = file->data; + data->disk->read_hook = file->read_hook; + data->disk->read_hook_data = file->read_hook_data; + + ret = (grub_disk_read (data->disk, 0, data->dofs + file->offset, + len, buf)) ? -1 : (grub_ssize_t) len; + data->disk->read_hook = 0; + + return ret; +} + +static grub_err_t +grub_cbfs_close (grub_file_t file) +{ + struct grub_archelp_data *data; + + data = file->data; + grub_free (data); + + return grub_errno; +} + +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) \ + && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN) + +static char *cbfsdisk_addr; +static grub_off_t cbfsdisk_size = 0; + +static int +grub_cbfsdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + return hook ("cbfsdisk", hook_data); +} + +static grub_err_t +grub_cbfsdisk_open (const char *name, grub_disk_t disk) +{ + if (grub_strcmp (name, "cbfsdisk")) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a cbfsdisk"); + + disk->total_sectors = cbfsdisk_size / GRUB_DISK_SECTOR_SIZE; + disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; + disk->id = 0; + + return GRUB_ERR_NONE; +} + +static void +grub_cbfsdisk_close (grub_disk_t disk __attribute((unused))) +{ +} + +static grub_err_t +grub_cbfsdisk_read (grub_disk_t disk __attribute((unused)), + grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + grub_memcpy (buf, cbfsdisk_addr + (sector << GRUB_DISK_SECTOR_BITS), + size << GRUB_DISK_SECTOR_BITS); + return 0; +} + +static grub_err_t +grub_cbfsdisk_write (grub_disk_t disk __attribute__ ((unused)), + grub_disk_addr_t sector __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused)), + const char *buf __attribute__ ((unused))) +{ + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "rom flashing isn't implemented yet"); +} + +static struct grub_disk_dev grub_cbfsdisk_dev = + { + .name = "cbfsdisk", + .id = GRUB_DISK_DEVICE_CBFSDISK_ID, + .iterate = grub_cbfsdisk_iterate, + .open = grub_cbfsdisk_open, + .close = grub_cbfsdisk_close, + .read = grub_cbfsdisk_read, + .write = grub_cbfsdisk_write, + .next = 0 + }; + +static void +init_cbfsdisk (void) +{ + grub_uint32_t ptr; + struct cbfs_header *head; + + ptr = *(grub_uint32_t *) 0xfffffffc; + head = (struct cbfs_header *) (grub_addr_t) ptr; + grub_dprintf ("cbfs", "head=%p\n", head); + + /* coreboot current supports only ROMs <= 16 MiB. Bigger ROMs will + have problems as RCBA is 18 MiB below end of 32-bit typically, + so either memory map would have to be rearranged or we'd need to support + reading ROMs through controller directly. + */ + if (ptr < 0xff000000 + || 0xffffffff - ptr < (grub_uint32_t) sizeof (*head) + 0xf + || !validate_head (head)) + return; + + cbfsdisk_size = ALIGN_UP (grub_be_to_cpu32 (head->romsize), + GRUB_DISK_SECTOR_SIZE); + cbfsdisk_addr = (void *) (grub_addr_t) (0x100000000ULL - cbfsdisk_size); + + grub_disk_dev_register (&grub_cbfsdisk_dev); +} + +static void +fini_cbfsdisk (void) +{ + if (! cbfsdisk_size) + return; + grub_disk_dev_unregister (&grub_cbfsdisk_dev); +} + +#endif + +static struct grub_fs grub_cbfs_fs = { + .name = "cbfs", + .dir = grub_cbfs_dir, + .open = grub_cbfs_open, + .read = grub_cbfs_read, + .close = grub_cbfs_close, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif +}; + +GRUB_MOD_INIT (cbfs) +{ +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN) + init_cbfsdisk (); +#endif + grub_fs_register (&grub_cbfs_fs); +} + +GRUB_MOD_FINI (cbfs) +{ + grub_fs_unregister (&grub_cbfs_fs); +#if (defined (__i386__) || defined (__x86_64__)) && !defined (GRUB_UTIL) && !defined (GRUB_MACHINE_EMU) && !defined (GRUB_MACHINE_XEN) + fini_cbfsdisk (); +#endif +} diff --git a/grub-core/fs/cpio.c b/grub-core/fs/cpio.c new file mode 100644 index 000000000..dab5f9898 --- /dev/null +++ b/grub-core/fs/cpio.c @@ -0,0 +1,61 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +/* cpio support */ +#define ALIGN_CPIO(x) (ALIGN_UP ((x), 2)) +#define MAGIC "\xc7\x71" +struct head +{ + grub_uint16_t magic[1]; + grub_uint16_t dev; + grub_uint16_t ino; + grub_uint16_t mode[1]; + grub_uint16_t uid; + grub_uint16_t gid; + grub_uint16_t nlink; + grub_uint16_t rdev; + grub_uint16_t mtime[2]; + grub_uint16_t namesize[1]; + grub_uint16_t filesize[2]; +} GRUB_PACKED; + +static inline unsigned long long +read_number (const grub_uint16_t *arr, grub_size_t size) +{ + long long ret = 0; + while (size--) + ret = (ret << 16) | grub_le_to_cpu16 (*arr++); + return ret; +} + +#define FSNAME "cpiofs" + +#include "cpio_common.c" + +GRUB_MOD_INIT (cpio) +{ + grub_fs_register (&grub_cpio_fs); +} + +GRUB_MOD_FINI (cpio) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/cpio_be.c b/grub-core/fs/cpio_be.c new file mode 100644 index 000000000..846548892 --- /dev/null +++ b/grub-core/fs/cpio_be.c @@ -0,0 +1,61 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#define ALIGN_CPIO(x) (ALIGN_UP ((x), 2)) +#define MAGIC "\x71\xc7" + +struct head +{ + grub_uint16_t magic[1]; + grub_uint16_t dev; + grub_uint16_t ino; + grub_uint16_t mode[1]; + grub_uint16_t uid; + grub_uint16_t gid; + grub_uint16_t nlink; + grub_uint16_t rdev; + grub_uint16_t mtime[2]; + grub_uint16_t namesize[1]; + grub_uint16_t filesize[2]; +} GRUB_PACKED; + +static inline unsigned long long +read_number (const grub_uint16_t *arr, grub_size_t size) +{ + long long ret = 0; + while (size--) + ret = (ret << 16) | grub_be_to_cpu16 (*arr++); + return ret; +} + +#define FSNAME "cpiofs_be" + +#include "cpio_common.c" + +GRUB_MOD_INIT (cpio_be) +{ + grub_fs_register (&grub_cpio_fs); +} + +GRUB_MOD_FINI (cpio_be) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/cpio_common.c b/grub-core/fs/cpio_common.c new file mode 100644 index 000000000..50fea47d1 --- /dev/null +++ b/grub-core/fs/cpio_common.c @@ -0,0 +1,244 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_archelp_data +{ + grub_disk_t disk; + grub_off_t hofs; + grub_off_t next_hofs; + grub_off_t dofs; + grub_off_t size; +}; + +static grub_err_t +grub_cpio_find_file (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, grub_uint32_t *mode) +{ + struct head hd; + grub_size_t namesize; + grub_uint32_t modeval; + + data->hofs = data->next_hofs; + + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) + return grub_errno; + + if (grub_memcmp (hd.magic, MAGIC, sizeof (hd.magic)) != 0 +#ifdef MAGIC2 + && grub_memcmp (hd.magic, MAGIC2, sizeof (hd.magic)) != 0 +#endif + ) + return grub_error (GRUB_ERR_BAD_FS, "invalid cpio archive"); + data->size = read_number (hd.filesize, ARRAY_SIZE (hd.filesize)); + if (mtime) + *mtime = read_number (hd.mtime, ARRAY_SIZE (hd.mtime)); + modeval = read_number (hd.mode, ARRAY_SIZE (hd.mode)); + namesize = read_number (hd.namesize, ARRAY_SIZE (hd.namesize)); + + /* Don't allow negative numbers. */ + if (namesize >= 0x80000000) + { + /* Probably a corruption, don't attempt to recover. */ + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + + *mode = modeval; + + *name = grub_malloc (namesize + 1); + if (*name == NULL) + return grub_errno; + + if (grub_disk_read (data->disk, 0, data->hofs + sizeof (hd), + namesize, *name)) + { + grub_free (*name); + return grub_errno; + } + (*name)[namesize] = 0; + + if (data->size == 0 && modeval == 0 && namesize == 11 + && grub_memcmp(*name, "TRAILER!!!", 11) == 0) + { + *mode = GRUB_ARCHELP_ATTR_END; + grub_free (*name); + return GRUB_ERR_NONE; + } + + data->dofs = data->hofs + ALIGN_CPIO (sizeof (hd) + namesize); + data->next_hofs = data->dofs + ALIGN_CPIO (data->size); + return GRUB_ERR_NONE; +} + +static char * +grub_cpio_get_link_target (struct grub_archelp_data *data) +{ + char *ret; + grub_err_t err; + + if (data->size == 0) + return grub_strdup (""); + ret = grub_malloc (data->size + 1); + if (!ret) + return NULL; + + err = grub_disk_read (data->disk, 0, data->dofs, data->size, + ret); + if (err) + { + grub_free (ret); + return NULL; + } + ret[data->size] = '\0'; + return ret; +} + +static void +grub_cpio_rewind (struct grub_archelp_data *data) +{ + data->next_hofs = 0; +} + +static struct grub_archelp_ops arcops = + { + .find_file = grub_cpio_find_file, + .get_link_target = grub_cpio_get_link_target, + .rewind = grub_cpio_rewind + }; + +static struct grub_archelp_data * +grub_cpio_mount (grub_disk_t disk) +{ + struct head hd; + struct grub_archelp_data *data; + + if (grub_disk_read (disk, 0, 0, sizeof (hd), &hd)) + goto fail; + + if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1) +#ifdef MAGIC2 + && grub_memcmp (hd.magic, MAGIC2, sizeof (MAGIC2) - 1) +#endif + ) + goto fail; + + data = (struct grub_archelp_data *) grub_zalloc (sizeof (*data)); + if (!data) + goto fail; + + data->disk = disk; + + return data; + +fail: + grub_error (GRUB_ERR_BAD_FS, "not a " FSNAME " filesystem"); + return 0; +} + +static grub_err_t +grub_cpio_dir (grub_device_t device, const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cpio_mount (device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_dir (data, &arcops, + path_in, hook, hook_data); + + grub_free (data); + + return err; +} + +static grub_err_t +grub_cpio_open (grub_file_t file, const char *name_in) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cpio_mount (file->device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_open (data, &arcops, name_in); + if (err) + { + grub_free (data); + } + else + { + file->data = data; + file->size = data->size; + } + return err; +} + +static grub_ssize_t +grub_cpio_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_archelp_data *data; + grub_ssize_t ret; + + data = file->data; + data->disk->read_hook = file->read_hook; + data->disk->read_hook_data = file->read_hook_data; + + ret = (grub_disk_read (data->disk, 0, data->dofs + file->offset, + len, buf)) ? -1 : (grub_ssize_t) len; + data->disk->read_hook = 0; + + return ret; +} + +static grub_err_t +grub_cpio_close (grub_file_t file) +{ + struct grub_archelp_data *data; + + data = file->data; + grub_free (data); + + return grub_errno; +} + +static struct grub_fs grub_cpio_fs = { + .name = FSNAME, + .dir = grub_cpio_dir, + .open = grub_cpio_open, + .read = grub_cpio_read, + .close = grub_cpio_close, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif +}; diff --git a/grub-core/fs/exfat.c b/grub-core/fs/exfat.c new file mode 100644 index 000000000..fe149ddd3 --- /dev/null +++ b/grub-core/fs/exfat.c @@ -0,0 +1,2 @@ +#define MODE_EXFAT 1 +#include "fat.c" diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c new file mode 100644 index 000000000..cdce63bcc --- /dev/null +++ b/grub-core/fs/ext2.c @@ -0,0 +1,1077 @@ +/* ext2.c - Second Extended filesystem */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* Magic value used to identify an ext2 filesystem. */ +#define EXT2_MAGIC 0xEF53 +/* Amount of indirect blocks in an inode. */ +#define INDIRECT_BLOCKS 12 + +/* The good old revision and the default inode size. */ +#define EXT2_GOOD_OLD_REVISION 0 +#define EXT2_GOOD_OLD_INODE_SIZE 128 + +/* Filetype used in directory entry. */ +#define FILETYPE_UNKNOWN 0 +#define FILETYPE_REG 1 +#define FILETYPE_DIRECTORY 2 +#define FILETYPE_SYMLINK 7 + +/* Filetype information as used in inodes. */ +#define FILETYPE_INO_MASK 0170000 +#define FILETYPE_INO_REG 0100000 +#define FILETYPE_INO_DIRECTORY 0040000 +#define FILETYPE_INO_SYMLINK 0120000 + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Log2 size of ext2 block in 512 blocks. */ +#define LOG2_EXT2_BLOCK_SIZE(data) \ + (grub_le_to_cpu32 (data->sblock.log2_block_size) + 1) + +/* Log2 size of ext2 block in bytes. */ +#define LOG2_BLOCK_SIZE(data) \ + (grub_le_to_cpu32 (data->sblock.log2_block_size) + 10) + +/* The size of an ext2 block in bytes. */ +#define EXT2_BLOCK_SIZE(data) (1U << LOG2_BLOCK_SIZE (data)) + +/* The revision level. */ +#define EXT2_REVISION(data) grub_le_to_cpu32 (data->sblock.revision_level) + +/* The inode size. */ +#define EXT2_INODE_SIZE(data) \ + (data->sblock.revision_level \ + == grub_cpu_to_le32_compile_time (EXT2_GOOD_OLD_REVISION) \ + ? EXT2_GOOD_OLD_INODE_SIZE \ + : grub_le_to_cpu16 (data->sblock.inode_size)) + +/* Superblock filesystem feature flags (RW compatible) + * A filesystem with any of these enabled can be read and written by a driver + * that does not understand them without causing metadata/data corruption. */ +#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001 +#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002 +#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 +#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008 +#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010 +#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020 +/* Superblock filesystem feature flags (RO compatible) + * A filesystem with any of these enabled can be safely read by a driver that + * does not understand them, but should not be written to, usually because + * additional metadata is required. */ +#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 +#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 +#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 +#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010 +#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 +#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 +/* Superblock filesystem feature flags (back-incompatible) + * A filesystem with any of these enabled should not be attempted to be read + * by a driver that does not understand them, since they usually indicate + * metadata format changes that might confuse the reader. */ +#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001 +#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 +#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */ +#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Volume is journal device */ +#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 +#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* Extents used */ +#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 +#define EXT4_FEATURE_INCOMPAT_MMP 0x0100 +#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 + +/* The set of back-incompatible features this driver DOES support. Add (OR) + * flags here as the related features are implemented into the driver. */ +#define EXT2_DRIVER_SUPPORTED_INCOMPAT ( EXT2_FEATURE_INCOMPAT_FILETYPE \ + | EXT4_FEATURE_INCOMPAT_EXTENTS \ + | EXT4_FEATURE_INCOMPAT_FLEX_BG \ + | EXT2_FEATURE_INCOMPAT_META_BG \ + | EXT4_FEATURE_INCOMPAT_64BIT) +/* List of rationales for the ignored "incompatible" features: + * needs_recovery: Not really back-incompatible - was added as such to forbid + * ext2 drivers from mounting an ext3 volume with a dirty + * journal because they will ignore the journal, but the next + * ext3 driver to mount the volume will find the journal and + * replay it, potentially corrupting the metadata written by + * the ext2 drivers. Safe to ignore for this RO driver. + * mmp: Not really back-incompatible - was added as such to + * avoid multiple read-write mounts. Safe to ignore for this + * RO driver. + */ +#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \ + | EXT4_FEATURE_INCOMPAT_MMP) + + +#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U + +#define EXT3_JOURNAL_DESCRIPTOR_BLOCK 1 +#define EXT3_JOURNAL_COMMIT_BLOCK 2 +#define EXT3_JOURNAL_SUPERBLOCK_V1 3 +#define EXT3_JOURNAL_SUPERBLOCK_V2 4 +#define EXT3_JOURNAL_REVOKE_BLOCK 5 + +#define EXT3_JOURNAL_FLAG_ESCAPE 1 +#define EXT3_JOURNAL_FLAG_SAME_UUID 2 +#define EXT3_JOURNAL_FLAG_DELETED 4 +#define EXT3_JOURNAL_FLAG_LAST_TAG 8 + +#define EXT4_EXTENTS_FLAG 0x80000 + +/* The ext2 superblock. */ +struct grub_ext2_sblock +{ + grub_uint32_t total_inodes; + grub_uint32_t total_blocks; + grub_uint32_t reserved_blocks; + grub_uint32_t free_blocks; + grub_uint32_t free_inodes; + grub_uint32_t first_data_block; + grub_uint32_t log2_block_size; + grub_uint32_t log2_fragment_size; + grub_uint32_t blocks_per_group; + grub_uint32_t fragments_per_group; + grub_uint32_t inodes_per_group; + grub_uint32_t mtime; + grub_uint32_t utime; + grub_uint16_t mnt_count; + grub_uint16_t max_mnt_count; + grub_uint16_t magic; + grub_uint16_t fs_state; + grub_uint16_t error_handling; + grub_uint16_t minor_revision_level; + grub_uint32_t lastcheck; + grub_uint32_t checkinterval; + grub_uint32_t creator_os; + grub_uint32_t revision_level; + grub_uint16_t uid_reserved; + grub_uint16_t gid_reserved; + grub_uint32_t first_inode; + grub_uint16_t inode_size; + grub_uint16_t block_group_number; + grub_uint32_t feature_compatibility; + grub_uint32_t feature_incompat; + grub_uint32_t feature_ro_compat; + grub_uint16_t uuid[8]; + char volume_name[16]; + char last_mounted_on[64]; + grub_uint32_t compression_info; + grub_uint8_t prealloc_blocks; + grub_uint8_t prealloc_dir_blocks; + grub_uint16_t reserved_gdt_blocks; + grub_uint8_t journal_uuid[16]; + grub_uint32_t journal_inum; + grub_uint32_t journal_dev; + grub_uint32_t last_orphan; + grub_uint32_t hash_seed[4]; + grub_uint8_t def_hash_version; + grub_uint8_t jnl_backup_type; + grub_uint16_t group_desc_size; + grub_uint32_t default_mount_opts; + grub_uint32_t first_meta_bg; + grub_uint32_t mkfs_time; + grub_uint32_t jnl_blocks[17]; +}; + +/* The ext2 blockgroup. */ +struct grub_ext2_block_group +{ + grub_uint32_t block_id; + grub_uint32_t inode_id; + grub_uint32_t inode_table_id; + grub_uint16_t free_blocks; + grub_uint16_t free_inodes; + grub_uint16_t used_dirs; + grub_uint16_t pad; + grub_uint32_t reserved[3]; + grub_uint32_t block_id_hi; + grub_uint32_t inode_id_hi; + grub_uint32_t inode_table_id_hi; + grub_uint16_t free_blocks_hi; + grub_uint16_t free_inodes_hi; + grub_uint16_t used_dirs_hi; + grub_uint16_t pad2; + grub_uint32_t reserved2[3]; +}; + +/* The ext2 inode. */ +struct grub_ext2_inode +{ + grub_uint16_t mode; + grub_uint16_t uid; + grub_uint32_t size; + grub_uint32_t atime; + grub_uint32_t ctime; + grub_uint32_t mtime; + grub_uint32_t dtime; + grub_uint16_t gid; + grub_uint16_t nlinks; + grub_uint32_t blockcnt; /* Blocks of 512 bytes!! */ + grub_uint32_t flags; + grub_uint32_t osd1; + union + { + struct datablocks + { + grub_uint32_t dir_blocks[INDIRECT_BLOCKS]; + grub_uint32_t indir_block; + grub_uint32_t double_indir_block; + grub_uint32_t triple_indir_block; + } blocks; + char symlink[60]; + }; + grub_uint32_t version; + grub_uint32_t acl; + grub_uint32_t size_high; + grub_uint32_t fragment_addr; + grub_uint32_t osd2[3]; +}; + +/* The header of an ext2 directory entry. */ +struct ext2_dirent +{ + grub_uint32_t inode; + grub_uint16_t direntlen; +#define MAX_NAMELEN 255 + grub_uint8_t namelen; + grub_uint8_t filetype; +}; + +struct grub_ext3_journal_header +{ + grub_uint32_t magic; + grub_uint32_t block_type; + grub_uint32_t sequence; +}; + +struct grub_ext3_journal_revoke_header +{ + struct grub_ext3_journal_header header; + grub_uint32_t count; + grub_uint32_t data[0]; +}; + +struct grub_ext3_journal_block_tag +{ + grub_uint32_t block; + grub_uint32_t flags; +}; + +struct grub_ext3_journal_sblock +{ + struct grub_ext3_journal_header header; + grub_uint32_t block_size; + grub_uint32_t maxlen; + grub_uint32_t first; + grub_uint32_t sequence; + grub_uint32_t start; +}; + +#define EXT4_EXT_MAGIC 0xf30a + +struct grub_ext4_extent_header +{ + grub_uint16_t magic; + grub_uint16_t entries; + grub_uint16_t max; + grub_uint16_t depth; + grub_uint32_t generation; +}; + +struct grub_ext4_extent +{ + grub_uint32_t block; + grub_uint16_t len; + grub_uint16_t start_hi; + grub_uint32_t start; +}; + +struct grub_ext4_extent_idx +{ + grub_uint32_t block; + grub_uint32_t leaf; + grub_uint16_t leaf_hi; + grub_uint16_t unused; +}; + +struct grub_fshelp_node +{ + struct grub_ext2_data *data; + struct grub_ext2_inode inode; + int ino; + int inode_read; +}; + +/* Information about a "mounted" ext2 filesystem. */ +struct grub_ext2_data +{ + struct grub_ext2_sblock sblock; + int log_group_desc_size; + grub_disk_t disk; + struct grub_ext2_inode *inode; + struct grub_fshelp_node diropen; +}; + +static grub_dl_t my_mod; + + + +/* Check is a = b^x for some x. */ +static inline int +is_power_of (grub_uint64_t a, grub_uint32_t b) +{ + grub_uint64_t c; + /* Prevent overflow assuming b < 8. */ + if (a >= (1LL << 60)) + return 0; + for (c = 1; c <= a; c *= b); + return (c == a); +} + + +static inline int +group_has_super_block (struct grub_ext2_data *data, grub_uint64_t group) +{ + if (!(data->sblock.feature_ro_compat + & grub_cpu_to_le32_compile_time(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER))) + return 1; + /* Algorithm looked up in Linux source. */ + if (group <= 1) + return 1; + /* Even number is never a power of odd number. */ + if (!(group & 1)) + return 0; + return (is_power_of(group, 7) || is_power_of(group, 5) || + is_power_of(group, 3)); +} + +/* Read into BLKGRP the blockgroup descriptor of blockgroup GROUP of + the mounted filesystem DATA. */ +inline static grub_err_t +grub_ext2_blockgroup (struct grub_ext2_data *data, grub_uint64_t group, + struct grub_ext2_block_group *blkgrp) +{ + grub_uint64_t full_offset = (group << data->log_group_desc_size); + grub_uint64_t block, offset; + block = (full_offset >> LOG2_BLOCK_SIZE (data)); + offset = (full_offset & ((1 << LOG2_BLOCK_SIZE (data)) - 1)); + if ((data->sblock.feature_incompat + & grub_cpu_to_le32_compile_time (EXT2_FEATURE_INCOMPAT_META_BG)) + && block >= grub_le_to_cpu32(data->sblock.first_meta_bg)) + { + grub_uint64_t first_block_group; + /* Find the first block group for which a descriptor + is stored in given block. */ + first_block_group = (block << (LOG2_BLOCK_SIZE (data) + - data->log_group_desc_size)); + + block = (first_block_group + * grub_le_to_cpu32(data->sblock.blocks_per_group)); + + if (group_has_super_block (data, first_block_group)) + block++; + } + else + /* Superblock. */ + block++; + return grub_disk_read (data->disk, + ((grub_le_to_cpu32 (data->sblock.first_data_block) + + block) + << LOG2_EXT2_BLOCK_SIZE (data)), offset, + sizeof (struct grub_ext2_block_group), blkgrp); +} + +static struct grub_ext4_extent_header * +grub_ext4_find_leaf (struct grub_ext2_data *data, + struct grub_ext4_extent_header *ext_block, + grub_uint32_t fileblock) +{ + struct grub_ext4_extent_idx *index; + void *buf = NULL; + + while (1) + { + int i; + grub_disk_addr_t block; + + index = (struct grub_ext4_extent_idx *) (ext_block + 1); + + if (ext_block->magic != grub_cpu_to_le16_compile_time (EXT4_EXT_MAGIC)) + goto fail; + + if (ext_block->depth == 0) + return ext_block; + + for (i = 0; i < grub_le_to_cpu16 (ext_block->entries); i++) + { + if (fileblock < grub_le_to_cpu32(index[i].block)) + break; + } + + if (--i < 0) + goto fail; + + block = grub_le_to_cpu16 (index[i].leaf_hi); + block = (block << 32) | grub_le_to_cpu32 (index[i].leaf); + if (!buf) + buf = grub_malloc (EXT2_BLOCK_SIZE(data)); + if (!buf) + goto fail; + if (grub_disk_read (data->disk, + block << LOG2_EXT2_BLOCK_SIZE (data), + 0, EXT2_BLOCK_SIZE(data), buf)) + goto fail; + + ext_block = buf; + } + fail: + grub_free (buf); + return 0; +} + +static grub_disk_addr_t +grub_ext2_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) +{ + struct grub_ext2_data *data = node->data; + struct grub_ext2_inode *inode = &node->inode; + unsigned int blksz = EXT2_BLOCK_SIZE (data); + grub_disk_addr_t blksz_quarter = blksz / 4; + int log2_blksz = LOG2_EXT2_BLOCK_SIZE (data); + int log_perblock = log2_blksz + 9 - 2; + grub_uint32_t indir; + int shift; + + if (inode->flags & grub_cpu_to_le32_compile_time (EXT4_EXTENTS_FLAG)) + { + struct grub_ext4_extent_header *leaf; + struct grub_ext4_extent *ext; + int i; + grub_disk_addr_t ret; + + leaf = grub_ext4_find_leaf (data, (struct grub_ext4_extent_header *) inode->blocks.dir_blocks, fileblock); + if (! leaf) + { + grub_error (GRUB_ERR_BAD_FS, "invalid extent"); + return -1; + } + + ext = (struct grub_ext4_extent *) (leaf + 1); + for (i = 0; i < grub_le_to_cpu16 (leaf->entries); i++) + { + if (fileblock < grub_le_to_cpu32 (ext[i].block)) + break; + } + + if (--i >= 0) + { + fileblock -= grub_le_to_cpu32 (ext[i].block); + if (fileblock >= grub_le_to_cpu16 (ext[i].len)) + ret = 0; + else + { + grub_disk_addr_t start; + + start = grub_le_to_cpu16 (ext[i].start_hi); + start = (start << 32) + grub_le_to_cpu32 (ext[i].start); + + ret = fileblock + start; + } + } + else + { + grub_error (GRUB_ERR_BAD_FS, "something wrong with extent"); + ret = -1; + } + + if (leaf != (struct grub_ext4_extent_header *) inode->blocks.dir_blocks) + grub_free (leaf); + + return ret; + } + + /* Direct blocks. */ + if (fileblock < INDIRECT_BLOCKS) + return grub_le_to_cpu32 (inode->blocks.dir_blocks[fileblock]); + fileblock -= INDIRECT_BLOCKS; + /* Indirect. */ + if (fileblock < blksz_quarter) + { + indir = inode->blocks.indir_block; + shift = 0; + goto indirect; + } + fileblock -= blksz_quarter; + /* Double indirect. */ + if (fileblock < blksz_quarter * blksz_quarter) + { + indir = inode->blocks.double_indir_block; + shift = 1; + goto indirect; + } + fileblock -= blksz_quarter * blksz_quarter; + /* Triple indirect. */ + if (fileblock < blksz_quarter * blksz_quarter * (blksz_quarter + 1)) + { + indir = inode->blocks.triple_indir_block; + shift = 2; + goto indirect; + } + grub_error (GRUB_ERR_BAD_FS, + "ext2fs doesn't support quadruple indirect blocks"); + return -1; + +indirect: + do { + /* If the indirect block is zero, all child blocks are absent + (i.e. filled with zeros.) */ + if (indir == 0) + return 0; + if (grub_disk_read (data->disk, + ((grub_disk_addr_t) grub_le_to_cpu32 (indir)) + << log2_blksz, + ((fileblock >> (log_perblock * shift)) + & ((1 << log_perblock) - 1)) + * sizeof (indir), + sizeof (indir), &indir)) + return -1; + } while (shift--); + + return grub_le_to_cpu32 (indir); +} + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_ext2_read_file (grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + return grub_fshelp_read_file (node->data->disk, node, + read_hook, read_hook_data, + pos, len, buf, grub_ext2_read_block, + grub_cpu_to_le32 (node->inode.size) + | (((grub_off_t) grub_cpu_to_le32 (node->inode.size_high)) << 32), + LOG2_EXT2_BLOCK_SIZE (node->data), 0); + +} + + +/* Read the inode INO for the file described by DATA into INODE. */ +static grub_err_t +grub_ext2_read_inode (struct grub_ext2_data *data, + int ino, struct grub_ext2_inode *inode) +{ + struct grub_ext2_block_group blkgrp; + struct grub_ext2_sblock *sblock = &data->sblock; + int inodes_per_block; + unsigned int blkno; + unsigned int blkoff; + grub_disk_addr_t base; + + /* It is easier to calculate if the first inode is 0. */ + ino--; + + grub_ext2_blockgroup (data, + ino / grub_le_to_cpu32 (sblock->inodes_per_group), + &blkgrp); + if (grub_errno) + return grub_errno; + + inodes_per_block = EXT2_BLOCK_SIZE (data) / EXT2_INODE_SIZE (data); + blkno = (ino % grub_le_to_cpu32 (sblock->inodes_per_group)) + / inodes_per_block; + blkoff = (ino % grub_le_to_cpu32 (sblock->inodes_per_group)) + % inodes_per_block; + + base = grub_le_to_cpu32 (blkgrp.inode_table_id); + if (data->log_group_desc_size >= 6) + base |= (((grub_disk_addr_t) grub_le_to_cpu32 (blkgrp.inode_table_id_hi)) + << 32); + + /* Read the inode. */ + if (grub_disk_read (data->disk, + ((base + blkno) << LOG2_EXT2_BLOCK_SIZE (data)), + EXT2_INODE_SIZE (data) * blkoff, + sizeof (struct grub_ext2_inode), inode)) + return grub_errno; + + return 0; +} + +static struct grub_ext2_data * +grub_ext2_mount (grub_disk_t disk) +{ + struct grub_ext2_data *data; + + data = grub_malloc (sizeof (struct grub_ext2_data)); + if (!data) + return 0; + + /* Read the superblock. */ + grub_disk_read (disk, 1 * 2, 0, sizeof (struct grub_ext2_sblock), + &data->sblock); + if (grub_errno) + goto fail; + + /* Make sure this is an ext2 filesystem. */ + if (data->sblock.magic != grub_cpu_to_le16_compile_time (EXT2_MAGIC) + || grub_le_to_cpu32 (data->sblock.log2_block_size) >= 16 + || data->sblock.inodes_per_group == 0 + /* 20 already means 1GiB blocks. We don't want to deal with blocks overflowing int32. */ + || grub_le_to_cpu32 (data->sblock.log2_block_size) > 20 + || EXT2_INODE_SIZE (data) == 0 + || EXT2_BLOCK_SIZE (data) / EXT2_INODE_SIZE (data) == 0) + { + grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem"); + goto fail; + } + + /* Check the FS doesn't have feature bits enabled that we don't support. */ + if (data->sblock.revision_level != grub_cpu_to_le32_compile_time (EXT2_GOOD_OLD_REVISION) + && (data->sblock.feature_incompat + & grub_cpu_to_le32_compile_time (~(EXT2_DRIVER_SUPPORTED_INCOMPAT + | EXT2_DRIVER_IGNORED_INCOMPAT)))) + { + grub_error (GRUB_ERR_BAD_FS, "filesystem has unsupported incompatible features"); + goto fail; + } + + if (data->sblock.revision_level != grub_cpu_to_le32_compile_time (EXT2_GOOD_OLD_REVISION) + && (data->sblock.feature_incompat + & grub_cpu_to_le32_compile_time (EXT4_FEATURE_INCOMPAT_64BIT)) + && data->sblock.group_desc_size != 0 + && ((data->sblock.group_desc_size & (data->sblock.group_desc_size - 1)) + == 0) + && (data->sblock.group_desc_size & grub_cpu_to_le16_compile_time (0x1fe0))) + { + grub_uint16_t b = grub_le_to_cpu16 (data->sblock.group_desc_size); + for (data->log_group_desc_size = 0; b != (1 << data->log_group_desc_size); + data->log_group_desc_size++); + } + else + data->log_group_desc_size = 5; + + data->disk = disk; + + data->diropen.data = data; + data->diropen.ino = 2; + data->diropen.inode_read = 1; + + data->inode = &data->diropen.inode; + + grub_ext2_read_inode (data, 2, data->inode); + if (grub_errno) + goto fail; + + return data; + + fail: + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem"); + + grub_free (data); + return 0; +} + +static char * +grub_ext2_read_symlink (grub_fshelp_node_t node) +{ + char *symlink; + struct grub_fshelp_node *diro = node; + + if (! diro->inode_read) + { + grub_ext2_read_inode (diro->data, diro->ino, &diro->inode); + if (grub_errno) + return 0; + } + + symlink = grub_malloc (grub_le_to_cpu32 (diro->inode.size) + 1); + if (! symlink) + return 0; + + /* If the filesize of the symlink is bigger than + 60 the symlink is stored in a separate block, + otherwise it is stored in the inode. */ + if (grub_le_to_cpu32 (diro->inode.size) <= sizeof (diro->inode.symlink)) + grub_memcpy (symlink, + diro->inode.symlink, + grub_le_to_cpu32 (diro->inode.size)); + else + { + grub_ext2_read_file (diro, 0, 0, 0, + grub_le_to_cpu32 (diro->inode.size), + symlink); + if (grub_errno) + { + grub_free (symlink); + return 0; + } + } + + symlink[grub_le_to_cpu32 (diro->inode.size)] = '\0'; + return symlink; +} + +static int +grub_ext2_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + unsigned int fpos = 0; + struct grub_fshelp_node *diro = (struct grub_fshelp_node *) dir; + + if (! diro->inode_read) + { + grub_ext2_read_inode (diro->data, diro->ino, &diro->inode); + if (grub_errno) + return 0; + } + + /* Search the file. */ + while (fpos < grub_le_to_cpu32 (diro->inode.size)) + { + struct ext2_dirent dirent; + + grub_ext2_read_file (diro, 0, 0, fpos, sizeof (struct ext2_dirent), + (char *) &dirent); + if (grub_errno) + return 0; + + if (dirent.direntlen == 0) + return 0; + + if (dirent.inode != 0 && dirent.namelen != 0) + { + char filename[MAX_NAMELEN + 1]; + struct grub_fshelp_node *fdiro; + enum grub_fshelp_filetype type = GRUB_FSHELP_UNKNOWN; + + grub_ext2_read_file (diro, 0, 0, fpos + sizeof (struct ext2_dirent), + dirent.namelen, filename); + if (grub_errno) + return 0; + + fdiro = grub_malloc (sizeof (struct grub_fshelp_node)); + if (! fdiro) + return 0; + + fdiro->data = diro->data; + fdiro->ino = grub_le_to_cpu32 (dirent.inode); + + filename[dirent.namelen] = '\0'; + + if (dirent.filetype != FILETYPE_UNKNOWN) + { + fdiro->inode_read = 0; + + if (dirent.filetype == FILETYPE_DIRECTORY) + type = GRUB_FSHELP_DIR; + else if (dirent.filetype == FILETYPE_SYMLINK) + type = GRUB_FSHELP_SYMLINK; + else if (dirent.filetype == FILETYPE_REG) + type = GRUB_FSHELP_REG; + } + else + { + /* The filetype can not be read from the dirent, read + the inode to get more information. */ + grub_ext2_read_inode (diro->data, + grub_le_to_cpu32 (dirent.inode), + &fdiro->inode); + if (grub_errno) + { + grub_free (fdiro); + return 0; + } + + fdiro->inode_read = 1; + + if ((grub_le_to_cpu16 (fdiro->inode.mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_DIRECTORY) + type = GRUB_FSHELP_DIR; + else if ((grub_le_to_cpu16 (fdiro->inode.mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_SYMLINK) + type = GRUB_FSHELP_SYMLINK; + else if ((grub_le_to_cpu16 (fdiro->inode.mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_REG) + type = GRUB_FSHELP_REG; + } + + if (hook (filename, type, fdiro, hook_data)) + return 1; + } + + fpos += grub_le_to_cpu16 (dirent.direntlen); + } + + return 0; +} + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_ext2_open (struct grub_file *file, const char *name) +{ + struct grub_ext2_data *data; + struct grub_fshelp_node *fdiro = 0; + grub_err_t err; + + grub_dl_ref (my_mod); + + data = grub_ext2_mount (file->device->disk); + if (! data) + { + err = grub_errno; + goto fail; + } + + err = grub_fshelp_find_file (name, &data->diropen, &fdiro, + grub_ext2_iterate_dir, + grub_ext2_read_symlink, GRUB_FSHELP_REG); + if (err) + goto fail; + + if (! fdiro->inode_read) + { + err = grub_ext2_read_inode (data, fdiro->ino, &fdiro->inode); + if (err) + goto fail; + } + + grub_memcpy (data->inode, &fdiro->inode, sizeof (struct grub_ext2_inode)); + grub_free (fdiro); + + file->size = grub_le_to_cpu32 (data->inode->size); + file->size |= ((grub_off_t) grub_le_to_cpu32 (data->inode->size_high)) << 32; + file->data = data; + file->offset = 0; + + return 0; + + fail: + if (fdiro != &data->diropen) + grub_free (fdiro); + grub_free (data); + + grub_dl_unref (my_mod); + + return err; +} + +static grub_err_t +grub_ext2_close (grub_file_t file) +{ + grub_free (file->data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + +/* Read LEN bytes data from FILE into BUF. */ +static grub_ssize_t +grub_ext2_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_ext2_data *data = (struct grub_ext2_data *) file->data; + + return grub_ext2_read_file (&data->diropen, + file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + + +/* Context for grub_ext2_dir. */ +struct grub_ext2_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; + struct grub_ext2_data *data; +}; + +/* Helper for grub_ext2_dir. */ +static int +grub_ext2_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_ext2_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + if (! node->inode_read) + { + grub_ext2_read_inode (ctx->data, node->ino, &node->inode); + if (!grub_errno) + node->inode_read = 1; + grub_errno = GRUB_ERR_NONE; + } + if (node->inode_read) + { + info.mtimeset = 1; + info.mtime = grub_le_to_cpu32 (node->inode.mtime); + } + + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_ext2_dir (grub_device_t device, const char *path, grub_fs_dir_hook_t hook, + void *hook_data) +{ + struct grub_ext2_dir_ctx ctx = { + .hook = hook, + .hook_data = hook_data + }; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + ctx.data = grub_ext2_mount (device->disk); + if (! ctx.data) + goto fail; + + grub_fshelp_find_file (path, &ctx.data->diropen, &fdiro, + grub_ext2_iterate_dir, grub_ext2_read_symlink, + GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + grub_ext2_iterate_dir (fdiro, grub_ext2_dir_iter, &ctx); + + fail: + if (fdiro != &ctx.data->diropen) + grub_free (fdiro); + grub_free (ctx.data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_ext2_label (grub_device_t device, char **label) +{ + struct grub_ext2_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_ext2_mount (disk); + if (data) + *label = grub_strndup (data->sblock.volume_name, + sizeof (data->sblock.volume_name)); + else + *label = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_ext2_uuid (grub_device_t device, char **uuid) +{ + struct grub_ext2_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_ext2_mount (disk); + if (data) + { + *uuid = grub_xasprintf ("%04x%04x-%04x-%04x-%04x-%04x%04x%04x", + grub_be_to_cpu16 (data->sblock.uuid[0]), + grub_be_to_cpu16 (data->sblock.uuid[1]), + grub_be_to_cpu16 (data->sblock.uuid[2]), + grub_be_to_cpu16 (data->sblock.uuid[3]), + grub_be_to_cpu16 (data->sblock.uuid[4]), + grub_be_to_cpu16 (data->sblock.uuid[5]), + grub_be_to_cpu16 (data->sblock.uuid[6]), + grub_be_to_cpu16 (data->sblock.uuid[7])); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +/* Get mtime. */ +static grub_err_t +grub_ext2_mtime (grub_device_t device, grub_int32_t *tm) +{ + struct grub_ext2_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_ext2_mount (disk); + if (!data) + *tm = 0; + else + *tm = grub_le_to_cpu32 (data->sblock.utime); + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; + +} + + + +static struct grub_fs grub_ext2_fs = + { + .name = "ext2", + .dir = grub_ext2_dir, + .open = grub_ext2_open, + .read = grub_ext2_read, + .close = grub_ext2_close, + .label = grub_ext2_label, + .uuid = grub_ext2_uuid, + .mtime = grub_ext2_mtime, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(ext2) +{ + grub_fs_register (&grub_ext2_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(ext2) +{ + grub_fs_unregister (&grub_ext2_fs); +} diff --git a/grub-core/fs/fat.c b/grub-core/fs/fat.c new file mode 100644 index 000000000..8d8dc35ce --- /dev/null +++ b/grub-core/fs/fat.c @@ -0,0 +1,1268 @@ +/* fat.c - FAT filesystem */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef MODE_EXFAT +#include +#else +#include +#endif +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +enum + { + GRUB_FAT_ATTR_READ_ONLY = 0x01, + GRUB_FAT_ATTR_HIDDEN = 0x02, + GRUB_FAT_ATTR_SYSTEM = 0x04, +#ifndef MODE_EXFAT + GRUB_FAT_ATTR_VOLUME_ID = 0x08, +#endif + GRUB_FAT_ATTR_DIRECTORY = 0x10, + GRUB_FAT_ATTR_ARCHIVE = 0x20, + +#ifndef MODE_EXFAT + GRUB_FAT_ATTR_LONG_NAME = (GRUB_FAT_ATTR_READ_ONLY + | GRUB_FAT_ATTR_HIDDEN + | GRUB_FAT_ATTR_SYSTEM + | GRUB_FAT_ATTR_VOLUME_ID), +#endif + GRUB_FAT_ATTR_VALID = (GRUB_FAT_ATTR_READ_ONLY + | GRUB_FAT_ATTR_HIDDEN + | GRUB_FAT_ATTR_SYSTEM + | GRUB_FAT_ATTR_DIRECTORY + | GRUB_FAT_ATTR_ARCHIVE +#ifndef MODE_EXFAT + | GRUB_FAT_ATTR_VOLUME_ID +#endif + ) + }; + +#ifdef MODE_EXFAT +typedef struct grub_exfat_bpb grub_current_fat_bpb_t; +#else +typedef struct grub_fat_bpb grub_current_fat_bpb_t; +#endif + +#ifdef MODE_EXFAT +enum + { + FLAG_CONTIGUOUS = 2 + }; +struct grub_fat_dir_entry +{ + grub_uint8_t entry_type; + union + { + grub_uint8_t placeholder[31]; + struct { + grub_uint8_t secondary_count; + grub_uint16_t checksum; + grub_uint16_t attr; + grub_uint16_t reserved1; + grub_uint32_t c_time; + grub_uint32_t m_time; + grub_uint32_t a_time; + grub_uint8_t c_time_tenth; + grub_uint8_t m_time_tenth; + grub_uint8_t a_time_tenth; + grub_uint8_t reserved2[9]; + } GRUB_PACKED file; + struct { + grub_uint8_t flags; + grub_uint8_t reserved1; + grub_uint8_t name_length; + grub_uint16_t name_hash; + grub_uint16_t reserved2; + grub_uint64_t valid_size; + grub_uint32_t reserved3; + grub_uint32_t first_cluster; + grub_uint64_t file_size; + } GRUB_PACKED stream_extension; + struct { + grub_uint8_t flags; + grub_uint16_t str[15]; + } GRUB_PACKED file_name; + struct { + grub_uint8_t character_count; + grub_uint16_t str[15]; + } GRUB_PACKED volume_label; + } GRUB_PACKED type_specific; +} GRUB_PACKED; + +struct grub_fat_dir_node +{ + grub_uint32_t attr; + grub_uint32_t first_cluster; + grub_uint64_t file_size; + grub_uint64_t valid_size; + int have_stream; + int is_contiguous; +}; + +typedef struct grub_fat_dir_node grub_fat_dir_node_t; + +#else +struct grub_fat_dir_entry +{ + grub_uint8_t name[11]; + grub_uint8_t attr; + grub_uint8_t nt_reserved; + grub_uint8_t c_time_tenth; + grub_uint16_t c_time; + grub_uint16_t c_date; + grub_uint16_t a_date; + grub_uint16_t first_cluster_high; + grub_uint16_t w_time; + grub_uint16_t w_date; + grub_uint16_t first_cluster_low; + grub_uint32_t file_size; +} GRUB_PACKED; + +struct grub_fat_long_name_entry +{ + grub_uint8_t id; + grub_uint16_t name1[5]; + grub_uint8_t attr; + grub_uint8_t reserved; + grub_uint8_t checksum; + grub_uint16_t name2[6]; + grub_uint16_t first_cluster; + grub_uint16_t name3[2]; +} GRUB_PACKED; + +typedef struct grub_fat_dir_entry grub_fat_dir_node_t; + +#endif + +struct grub_fat_data +{ + int logical_sector_bits; + grub_uint32_t num_sectors; + + grub_uint32_t fat_sector; + grub_uint32_t sectors_per_fat; + int fat_size; + + grub_uint32_t root_cluster; +#ifndef MODE_EXFAT + grub_uint32_t root_sector; + grub_uint32_t num_root_sectors; +#endif + + int cluster_bits; + grub_uint32_t cluster_eof_mark; + grub_uint32_t cluster_sector; + grub_uint32_t num_clusters; + + grub_uint32_t uuid; +}; + +struct grub_fshelp_node { + grub_disk_t disk; + struct grub_fat_data *data; + + grub_uint8_t attr; +#ifndef MODE_EXFAT + grub_uint32_t file_size; +#else + grub_uint64_t file_size; +#endif + grub_uint32_t file_cluster; + grub_uint32_t cur_cluster_num; + grub_uint32_t cur_cluster; + +#ifdef MODE_EXFAT + int is_contiguous; +#endif +}; + +static grub_dl_t my_mod; + +#ifndef MODE_EXFAT +static int +fat_log2 (unsigned x) +{ + int i; + + if (x == 0) + return -1; + + for (i = 0; (x & 1) == 0; i++) + x >>= 1; + + if (x != 1) + return -1; + + return i; +} +#endif + +static struct grub_fat_data * +grub_fat_mount (grub_disk_t disk) +{ + grub_current_fat_bpb_t bpb; + struct grub_fat_data *data = 0; + grub_uint32_t first_fat, magic; + + if (! disk) + goto fail; + + data = (struct grub_fat_data *) grub_malloc (sizeof (*data)); + if (! data) + goto fail; + + /* Read the BPB. */ + if (grub_disk_read (disk, 0, 0, sizeof (bpb), &bpb)) + goto fail; + +#ifdef MODE_EXFAT + if (grub_memcmp ((const char *) bpb.oem_name, "EXFAT ", + sizeof (bpb.oem_name)) != 0) + goto fail; +#endif + + /* Get the sizes of logical sectors and clusters. */ +#ifdef MODE_EXFAT + data->logical_sector_bits = bpb.bytes_per_sector_shift; +#else + data->logical_sector_bits = + fat_log2 (grub_le_to_cpu16 (bpb.bytes_per_sector)); +#endif + if (data->logical_sector_bits < GRUB_DISK_SECTOR_BITS + || data->logical_sector_bits >= 16) + goto fail; + data->logical_sector_bits -= GRUB_DISK_SECTOR_BITS; + +#ifdef MODE_EXFAT + data->cluster_bits = bpb.sectors_per_cluster_shift; +#else + data->cluster_bits = fat_log2 (bpb.sectors_per_cluster); +#endif + if (data->cluster_bits < 0 || data->cluster_bits > 25) + goto fail; + data->cluster_bits += data->logical_sector_bits; + + /* Get information about FATs. */ +#ifdef MODE_EXFAT + data->fat_sector = (grub_le_to_cpu32 (bpb.num_reserved_sectors) + << data->logical_sector_bits); +#else + data->fat_sector = (grub_le_to_cpu16 (bpb.num_reserved_sectors) + << data->logical_sector_bits); +#endif + if (data->fat_sector == 0) + goto fail; + +#ifdef MODE_EXFAT + data->sectors_per_fat = (grub_le_to_cpu32 (bpb.sectors_per_fat) + << data->logical_sector_bits); +#else + data->sectors_per_fat = ((bpb.sectors_per_fat_16 + ? grub_le_to_cpu16 (bpb.sectors_per_fat_16) + : grub_le_to_cpu32 (bpb.version_specific.fat32.sectors_per_fat_32)) + << data->logical_sector_bits); +#endif + if (data->sectors_per_fat == 0) + goto fail; + + /* Get the number of sectors in this volume. */ +#ifdef MODE_EXFAT + data->num_sectors = ((grub_le_to_cpu64 (bpb.num_total_sectors)) + << data->logical_sector_bits); +#else + data->num_sectors = ((bpb.num_total_sectors_16 + ? grub_le_to_cpu16 (bpb.num_total_sectors_16) + : grub_le_to_cpu32 (bpb.num_total_sectors_32)) + << data->logical_sector_bits); +#endif + if (data->num_sectors == 0) + goto fail; + + /* Get information about the root directory. */ + if (bpb.num_fats == 0) + goto fail; + +#ifndef MODE_EXFAT + data->root_sector = data->fat_sector + bpb.num_fats * data->sectors_per_fat; + data->num_root_sectors + = ((((grub_uint32_t) grub_le_to_cpu16 (bpb.num_root_entries) + * sizeof (struct grub_fat_dir_entry) + + grub_le_to_cpu16 (bpb.bytes_per_sector) - 1) + >> (data->logical_sector_bits + GRUB_DISK_SECTOR_BITS)) + << (data->logical_sector_bits)); +#endif + +#ifdef MODE_EXFAT + data->cluster_sector = (grub_le_to_cpu32 (bpb.cluster_offset) + << data->logical_sector_bits); + data->num_clusters = (grub_le_to_cpu32 (bpb.cluster_count) + << data->logical_sector_bits); +#else + data->cluster_sector = data->root_sector + data->num_root_sectors; + data->num_clusters = (((data->num_sectors - data->cluster_sector) + >> data->cluster_bits) + + 2); +#endif + + if (data->num_clusters <= 2) + goto fail; + +#ifdef MODE_EXFAT + { + /* exFAT. */ + data->root_cluster = grub_le_to_cpu32 (bpb.root_cluster); + data->fat_size = 32; + data->cluster_eof_mark = 0xffffffff; + + if ((bpb.volume_flags & grub_cpu_to_le16_compile_time (0x1)) + && bpb.num_fats > 1) + data->fat_sector += data->sectors_per_fat; + } +#else + if (! bpb.sectors_per_fat_16) + { + /* FAT32. */ + grub_uint16_t flags = grub_le_to_cpu16 (bpb.version_specific.fat32.extended_flags); + + data->root_cluster = grub_le_to_cpu32 (bpb.version_specific.fat32.root_cluster); + data->fat_size = 32; + data->cluster_eof_mark = 0x0ffffff8; + + if (flags & 0x80) + { + /* Get an active FAT. */ + unsigned active_fat = flags & 0xf; + + if (active_fat > bpb.num_fats) + goto fail; + + data->fat_sector += active_fat * data->sectors_per_fat; + } + + if (bpb.num_root_entries != 0 || bpb.version_specific.fat32.fs_version != 0) + goto fail; + } + else + { + /* FAT12 or FAT16. */ + data->root_cluster = ~0U; + + if (data->num_clusters <= 4085 + 2) + { + /* FAT12. */ + data->fat_size = 12; + data->cluster_eof_mark = 0x0ff8; + } + else + { + /* FAT16. */ + data->fat_size = 16; + data->cluster_eof_mark = 0xfff8; + } + } +#endif + + /* More sanity checks. */ + if (data->num_sectors <= data->fat_sector) + goto fail; + + if (grub_disk_read (disk, + data->fat_sector, + 0, + sizeof (first_fat), + &first_fat)) + goto fail; + + first_fat = grub_le_to_cpu32 (first_fat); + + if (data->fat_size == 32) + { + first_fat &= 0x0fffffff; + magic = 0x0fffff00; + } + else if (data->fat_size == 16) + { + first_fat &= 0x0000ffff; + magic = 0xff00; + } + else + { + first_fat &= 0x00000fff; + magic = 0x0f00; + } + + /* Serial number. */ +#ifdef MODE_EXFAT + data->uuid = grub_le_to_cpu32 (bpb.num_serial); +#else + if (bpb.sectors_per_fat_16) + data->uuid = grub_le_to_cpu32 (bpb.version_specific.fat12_or_fat16.num_serial); + else + data->uuid = grub_le_to_cpu32 (bpb.version_specific.fat32.num_serial); +#endif + +#ifndef MODE_EXFAT + /* Ignore the 3rd bit, because some BIOSes assigns 0xF0 to the media + descriptor, even if it is a so-called superfloppy (e.g. an USB key). + The check may be too strict for this kind of stupid BIOSes, as + they overwrite the media descriptor. */ + if ((first_fat | 0x8) != (magic | bpb.media | 0x8)) + goto fail; +#else + (void) magic; +#endif + + return data; + + fail: + + grub_free (data); + grub_error (GRUB_ERR_BAD_FS, "not a FAT filesystem"); + return 0; +} + +static grub_ssize_t +grub_fat_read_data (grub_disk_t disk, grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t offset, grub_size_t len, char *buf) +{ + grub_size_t size; + grub_uint32_t logical_cluster; + unsigned logical_cluster_bits; + grub_ssize_t ret = 0; + unsigned long sector; + +#ifndef MODE_EXFAT + /* This is a special case. FAT12 and FAT16 doesn't have the root directory + in clusters. */ + if (node->file_cluster == ~0U) + { + size = (node->data->num_root_sectors << GRUB_DISK_SECTOR_BITS) - offset; + if (size > len) + size = len; + + if (grub_disk_read (disk, node->data->root_sector, offset, size, buf)) + return -1; + + return size; + } +#endif + +#ifdef MODE_EXFAT + if (node->is_contiguous) + { + /* Read the data here. */ + sector = (node->data->cluster_sector + + ((node->file_cluster - 2) + << node->data->cluster_bits)); + + disk->read_hook = read_hook; + disk->read_hook_data = read_hook_data; + grub_disk_read (disk, sector + (offset >> GRUB_DISK_SECTOR_BITS), + offset & (GRUB_DISK_SECTOR_SIZE - 1), len, buf); + disk->read_hook = 0; + if (grub_errno) + return -1; + + return len; + } +#endif + + /* Calculate the logical cluster number and offset. */ + logical_cluster_bits = (node->data->cluster_bits + + GRUB_DISK_SECTOR_BITS); + logical_cluster = offset >> logical_cluster_bits; + offset &= (1ULL << logical_cluster_bits) - 1; + + if (logical_cluster < node->cur_cluster_num) + { + node->cur_cluster_num = 0; + node->cur_cluster = node->file_cluster; + } + + while (len) + { + while (logical_cluster > node->cur_cluster_num) + { + /* Find next cluster. */ + grub_uint32_t next_cluster; + grub_uint32_t fat_offset; + + switch (node->data->fat_size) + { + case 32: + fat_offset = node->cur_cluster << 2; + break; + case 16: + fat_offset = node->cur_cluster << 1; + break; + default: + /* case 12: */ + fat_offset = node->cur_cluster + (node->cur_cluster >> 1); + break; + } + + /* Read the FAT. */ + if (grub_disk_read (disk, node->data->fat_sector, fat_offset, + (node->data->fat_size + 7) >> 3, + (char *) &next_cluster)) + return -1; + + next_cluster = grub_le_to_cpu32 (next_cluster); + switch (node->data->fat_size) + { + case 16: + next_cluster &= 0xFFFF; + break; + case 12: + if (node->cur_cluster & 1) + next_cluster >>= 4; + + next_cluster &= 0x0FFF; + break; + } + + grub_dprintf ("fat", "fat_size=%d, next_cluster=%u\n", + node->data->fat_size, next_cluster); + + /* Check the end. */ + if (next_cluster >= node->data->cluster_eof_mark) + return ret; + + if (next_cluster < 2 || next_cluster >= node->data->num_clusters) + { + grub_error (GRUB_ERR_BAD_FS, "invalid cluster %u", + next_cluster); + return -1; + } + + node->cur_cluster = next_cluster; + node->cur_cluster_num++; + } + + /* Read the data here. */ + sector = (node->data->cluster_sector + + ((node->cur_cluster - 2) + << node->data->cluster_bits)); + size = (1 << logical_cluster_bits) - offset; + if (size > len) + size = len; + + disk->read_hook = read_hook; + disk->read_hook_data = read_hook_data; + grub_disk_read (disk, sector, offset, size, buf); + disk->read_hook = 0; + if (grub_errno) + return -1; + + len -= size; + buf += size; + ret += size; + logical_cluster++; + offset = 0; + } + + return ret; +} + +struct grub_fat_iterate_context +{ +#ifdef MODE_EXFAT + struct grub_fat_dir_node dir; +#else + struct grub_fat_dir_entry dir; +#endif + char *filename; + grub_uint16_t *unibuf; + grub_ssize_t offset; +}; + +static grub_err_t +grub_fat_iterate_init (struct grub_fat_iterate_context *ctxt) +{ + ctxt->offset = -sizeof (struct grub_fat_dir_entry); + +#ifndef MODE_EXFAT + /* Allocate space enough to hold a long name. */ + ctxt->filename = grub_malloc (0x40 * 13 * GRUB_MAX_UTF8_PER_UTF16 + 1); + ctxt->unibuf = (grub_uint16_t *) grub_malloc (0x40 * 13 * 2); +#else + ctxt->unibuf = grub_malloc (15 * 256 * 2); + ctxt->filename = grub_malloc (15 * 256 * GRUB_MAX_UTF8_PER_UTF16 + 1); +#endif + + if (! ctxt->filename || ! ctxt->unibuf) + { + grub_free (ctxt->filename); + grub_free (ctxt->unibuf); + return grub_errno; + } + return GRUB_ERR_NONE; +} + +static void +grub_fat_iterate_fini (struct grub_fat_iterate_context *ctxt) +{ + grub_free (ctxt->filename); + grub_free (ctxt->unibuf); +} + +#ifdef MODE_EXFAT +static grub_err_t +grub_fat_iterate_dir_next (grub_fshelp_node_t node, + struct grub_fat_iterate_context *ctxt) +{ + grub_memset (&ctxt->dir, 0, sizeof (ctxt->dir)); + while (1) + { + struct grub_fat_dir_entry dir; + + ctxt->offset += sizeof (dir); + + if (grub_fat_read_data (node->disk, node, 0, 0, ctxt->offset, sizeof (dir), + (char *) &dir) + != sizeof (dir)) + break; + + if (dir.entry_type == 0) + break; + if (!(dir.entry_type & 0x80)) + continue; + + if (dir.entry_type == 0x85) + { + unsigned i, nsec, slots = 0; + + nsec = dir.type_specific.file.secondary_count; + + ctxt->dir.attr = grub_cpu_to_le16 (dir.type_specific.file.attr); + ctxt->dir.have_stream = 0; + for (i = 0; i < nsec; i++) + { + struct grub_fat_dir_entry sec; + ctxt->offset += sizeof (sec); + if (grub_fat_read_data (node->disk, node, 0, 0, + ctxt->offset, sizeof (sec), (char *) &sec) + != sizeof (sec)) + break; + if (!(sec.entry_type & 0x80)) + continue; + if (!(sec.entry_type & 0x40)) + break; + switch (sec.entry_type) + { + case 0xc0: + ctxt->dir.first_cluster = grub_cpu_to_le32 (sec.type_specific.stream_extension.first_cluster); + ctxt->dir.valid_size + = grub_cpu_to_le64 (sec.type_specific.stream_extension.valid_size); + ctxt->dir.file_size + = grub_cpu_to_le64 (sec.type_specific.stream_extension.file_size); + ctxt->dir.have_stream = 1; + ctxt->dir.is_contiguous = !!(sec.type_specific.stream_extension.flags + & grub_cpu_to_le16_compile_time (FLAG_CONTIGUOUS)); + break; + case 0xc1: + { + int j; + for (j = 0; j < 15; j++) + ctxt->unibuf[slots * 15 + j] + = grub_le_to_cpu16 (sec.type_specific.file_name.str[j]); + slots++; + } + break; + default: + grub_dprintf ("exfat", "unknown secondary type 0x%02x\n", + sec.entry_type); + } + } + + if (i != nsec) + { + ctxt->offset -= sizeof (dir); + continue; + } + + *grub_utf16_to_utf8 ((grub_uint8_t *) ctxt->filename, ctxt->unibuf, + slots * 15) = '\0'; + + return 0; + } + /* Allocation bitmap. */ + if (dir.entry_type == 0x81) + continue; + /* Upcase table. */ + if (dir.entry_type == 0x82) + continue; + /* Volume label. */ + if (dir.entry_type == 0x83) + continue; + grub_dprintf ("exfat", "unknown primary type 0x%02x\n", + dir.entry_type); + } + return grub_errno ? : GRUB_ERR_EOF; +} + +#else + +static grub_err_t +grub_fat_iterate_dir_next (grub_fshelp_node_t node, + struct grub_fat_iterate_context *ctxt) +{ + char *filep = 0; + int checksum = -1; + int slot = -1, slots = -1; + + while (1) + { + unsigned i; + + /* Adjust the offset. */ + ctxt->offset += sizeof (ctxt->dir); + + /* Read a directory entry. */ + if (grub_fat_read_data (node->disk, node, 0, 0, + ctxt->offset, sizeof (ctxt->dir), + (char *) &ctxt->dir) + != sizeof (ctxt->dir) || ctxt->dir.name[0] == 0) + break; + + /* Handle long name entries. */ + if (ctxt->dir.attr == GRUB_FAT_ATTR_LONG_NAME) + { + struct grub_fat_long_name_entry *long_name + = (struct grub_fat_long_name_entry *) &ctxt->dir; + grub_uint8_t id = long_name->id; + + if (id & 0x40) + { + id &= 0x3f; + slots = slot = id; + checksum = long_name->checksum; + } + + if (id != slot || slot == 0 || checksum != long_name->checksum) + { + checksum = -1; + continue; + } + + slot--; + grub_memcpy (ctxt->unibuf + slot * 13, long_name->name1, 5 * 2); + grub_memcpy (ctxt->unibuf + slot * 13 + 5, long_name->name2, 6 * 2); + grub_memcpy (ctxt->unibuf + slot * 13 + 11, long_name->name3, 2 * 2); + continue; + } + + /* Check if this entry is valid. */ + if (ctxt->dir.name[0] == 0xe5 || (ctxt->dir.attr & ~GRUB_FAT_ATTR_VALID)) + continue; + + /* This is a workaround for Japanese. */ + if (ctxt->dir.name[0] == 0x05) + ctxt->dir.name[0] = 0xe5; + + if (checksum != -1 && slot == 0) + { + grub_uint8_t sum; + + for (sum = 0, i = 0; i < sizeof (ctxt->dir.name); i++) + sum = ((sum >> 1) | (sum << 7)) + ctxt->dir.name[i]; + + if (sum == checksum) + { + int u; + + for (u = 0; u < slots * 13; u++) + ctxt->unibuf[u] = grub_le_to_cpu16 (ctxt->unibuf[u]); + + *grub_utf16_to_utf8 ((grub_uint8_t *) ctxt->filename, + ctxt->unibuf, + slots * 13) = '\0'; + + return GRUB_ERR_NONE; + } + + checksum = -1; + } + + /* Convert the 8.3 file name. */ + filep = ctxt->filename; + if (ctxt->dir.attr & GRUB_FAT_ATTR_VOLUME_ID) + { + for (i = 0; i < sizeof (ctxt->dir.name) && ctxt->dir.name[i]; i++) + *filep++ = ctxt->dir.name[i]; + while (i > 0 && ctxt->dir.name[i - 1] == ' ') + { + filep--; + i--; + } + } + else + { + for (i = 0; i < 8 && ctxt->dir.name[i]; i++) + *filep++ = grub_tolower (ctxt->dir.name[i]); + while (i > 0 && ctxt->dir.name[i - 1] == ' ') + { + filep--; + i--; + } + + /* XXX should we check that dir position is 0 or 1? */ + if (i > 2 || filep[0] != '.' || (i == 2 && filep[1] != '.')) + *filep++ = '.'; + + for (i = 8; i < 11 && ctxt->dir.name[i]; i++) + *filep++ = grub_tolower (ctxt->dir.name[i]); + while (i > 8 && ctxt->dir.name[i - 1] == ' ') + { + filep--; + i--; + } + + if (i == 8) + filep--; + } + *filep = '\0'; + return GRUB_ERR_NONE; + } + + return grub_errno ? : GRUB_ERR_EOF; +} + +#endif + +static grub_err_t lookup_file (grub_fshelp_node_t node, + const char *name, + grub_fshelp_node_t *foundnode, + enum grub_fshelp_filetype *foundtype) +{ + grub_err_t err; + struct grub_fat_iterate_context ctxt; + + err = grub_fat_iterate_init (&ctxt); + if (err) + return err; + + while (!(err = grub_fat_iterate_dir_next (node, &ctxt))) + { + +#ifdef MODE_EXFAT + if (!ctxt.dir.have_stream) + continue; +#else + if (ctxt.dir.attr & GRUB_FAT_ATTR_VOLUME_ID) + continue; +#endif + + if (grub_strcasecmp (name, ctxt.filename) == 0) + { + *foundnode = grub_malloc (sizeof (struct grub_fshelp_node)); + if (!*foundnode) + return grub_errno; + (*foundnode)->attr = ctxt.dir.attr; +#ifdef MODE_EXFAT + (*foundnode)->file_size = ctxt.dir.file_size; + (*foundnode)->file_cluster = ctxt.dir.first_cluster; + (*foundnode)->is_contiguous = ctxt.dir.is_contiguous; +#else + (*foundnode)->file_size = grub_le_to_cpu32 (ctxt.dir.file_size); + (*foundnode)->file_cluster = ((grub_le_to_cpu16 (ctxt.dir.first_cluster_high) << 16) + | grub_le_to_cpu16 (ctxt.dir.first_cluster_low)); + /* If directory points to root, starting cluster is 0 */ + if (!(*foundnode)->file_cluster) + (*foundnode)->file_cluster = node->data->root_cluster; +#endif + (*foundnode)->cur_cluster_num = ~0U; + (*foundnode)->data = node->data; + (*foundnode)->disk = node->disk; + + *foundtype = ((*foundnode)->attr & GRUB_FAT_ATTR_DIRECTORY) ? GRUB_FSHELP_DIR : GRUB_FSHELP_REG; + + grub_fat_iterate_fini (&ctxt); + return GRUB_ERR_NONE; + } + } + + grub_fat_iterate_fini (&ctxt); + if (err == GRUB_ERR_EOF) + err = 0; + + return err; + +} + +static grub_err_t +grub_fat_dir (grub_device_t device, const char *path, grub_fs_dir_hook_t hook, + void *hook_data) +{ + struct grub_fat_data *data = 0; + grub_disk_t disk = device->disk; + grub_fshelp_node_t found = NULL; + grub_err_t err; + struct grub_fat_iterate_context ctxt; + + grub_dl_ref (my_mod); + + data = grub_fat_mount (disk); + if (! data) + goto fail; + + struct grub_fshelp_node root = { + .data = data, + .disk = disk, + .attr = GRUB_FAT_ATTR_DIRECTORY, + .file_size = 0, + .file_cluster = data->root_cluster, + .cur_cluster_num = ~0U, + .cur_cluster = 0, +#ifdef MODE_EXFAT + .is_contiguous = 0, +#endif + }; + + err = grub_fshelp_find_file_lookup (path, &root, &found, lookup_file, NULL, GRUB_FSHELP_DIR); + if (err) + goto fail; + + err = grub_fat_iterate_init (&ctxt); + if (err) + goto fail; + + while (!(err = grub_fat_iterate_dir_next (found, &ctxt))) + { + struct grub_dirhook_info info; + grub_memset (&info, 0, sizeof (info)); + + info.dir = !! (ctxt.dir.attr & GRUB_FAT_ATTR_DIRECTORY); + info.case_insensitive = 1; +#ifdef MODE_EXFAT + if (!ctxt.dir.have_stream) + continue; +#else + if (ctxt.dir.attr & GRUB_FAT_ATTR_VOLUME_ID) + continue; +#endif + + if (hook (ctxt.filename, &info, hook_data)) + break; + } + grub_fat_iterate_fini (&ctxt); + if (err == GRUB_ERR_EOF) + err = 0; + + fail: + if (found != &root) + grub_free (found); + + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_fat_open (grub_file_t file, const char *name) +{ + struct grub_fat_data *data = 0; + grub_fshelp_node_t found = NULL; + grub_err_t err; + grub_disk_t disk = file->device->disk; + + grub_dl_ref (my_mod); + + data = grub_fat_mount (disk); + if (! data) + goto fail; + + struct grub_fshelp_node root = { + .data = data, + .disk = disk, + .attr = GRUB_FAT_ATTR_DIRECTORY, + .file_size = 0, + .file_cluster = data->root_cluster, + .cur_cluster_num = ~0U, + .cur_cluster = 0, +#ifdef MODE_EXFAT + .is_contiguous = 0, +#endif + }; + + err = grub_fshelp_find_file_lookup (name, &root, &found, lookup_file, NULL, GRUB_FSHELP_REG); + if (err) + goto fail; + + file->data = found; + file->size = found->file_size; + + return GRUB_ERR_NONE; + + fail: + + if (found != &root) + grub_free (found); + + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_ssize_t +grub_fat_read (grub_file_t file, char *buf, grub_size_t len) +{ + return grub_fat_read_data (file->device->disk, file->data, + file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + +static grub_err_t +grub_fat_close (grub_file_t file) +{ + grub_fshelp_node_t node = file->data; + + grub_free (node->data); + grub_free (node); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +#ifdef MODE_EXFAT +static grub_err_t +grub_fat_label (grub_device_t device, char **label) +{ + struct grub_fat_dir_entry dir; + grub_ssize_t offset = -sizeof(dir); + grub_disk_t disk = device->disk; + struct grub_fshelp_node root = { + .disk = disk, + .attr = GRUB_FAT_ATTR_DIRECTORY, + .file_size = 0, + .cur_cluster_num = ~0U, + .cur_cluster = 0, + .is_contiguous = 0, + }; + + root.data = grub_fat_mount (disk); + if (! root.data) + return grub_errno; + + root.file_cluster = root.data->root_cluster; + + *label = NULL; + + while (1) + { + offset += sizeof (dir); + + if (grub_fat_read_data (disk, &root, 0, 0, + offset, sizeof (dir), (char *) &dir) + != sizeof (dir)) + break; + + if (dir.entry_type == 0) + break; + if (!(dir.entry_type & 0x80)) + continue; + + /* Volume label. */ + if (dir.entry_type == 0x83) + { + grub_size_t chc; + grub_uint16_t t[ARRAY_SIZE (dir.type_specific.volume_label.str)]; + grub_size_t i; + *label = grub_malloc (ARRAY_SIZE (dir.type_specific.volume_label.str) + * GRUB_MAX_UTF8_PER_UTF16 + 1); + if (!*label) + { + grub_free (root.data); + return grub_errno; + } + chc = dir.type_specific.volume_label.character_count; + if (chc > ARRAY_SIZE (dir.type_specific.volume_label.str)) + chc = ARRAY_SIZE (dir.type_specific.volume_label.str); + for (i = 0; i < chc; i++) + t[i] = grub_le_to_cpu16 (dir.type_specific.volume_label.str[i]); + *grub_utf16_to_utf8 ((grub_uint8_t *) *label, t, chc) = '\0'; + } + } + + grub_free (root.data); + return grub_errno; +} + +#else + +static grub_err_t +grub_fat_label (grub_device_t device, char **label) +{ + grub_disk_t disk = device->disk; + grub_err_t err; + struct grub_fat_iterate_context ctxt; + struct grub_fshelp_node root = { + .disk = disk, + .attr = GRUB_FAT_ATTR_DIRECTORY, + .file_size = 0, + .cur_cluster_num = ~0U, + .cur_cluster = 0, + }; + + *label = 0; + + grub_dl_ref (my_mod); + + root.data = grub_fat_mount (disk); + if (! root.data) + goto fail; + + root.file_cluster = root.data->root_cluster; + + err = grub_fat_iterate_init (&ctxt); + if (err) + goto fail; + + while (!(err = grub_fat_iterate_dir_next (&root, &ctxt))) + if ((ctxt.dir.attr & ~GRUB_FAT_ATTR_ARCHIVE) == GRUB_FAT_ATTR_VOLUME_ID) + { + *label = grub_strdup (ctxt.filename); + break; + } + + grub_fat_iterate_fini (&ctxt); + + fail: + + grub_dl_unref (my_mod); + + grub_free (root.data); + + return grub_errno; +} + +#endif + +static grub_err_t +grub_fat_uuid (grub_device_t device, char **uuid) +{ + struct grub_fat_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_fat_mount (disk); + if (data) + { + char *ptr; + *uuid = grub_xasprintf ("%04x-%04x", + (grub_uint16_t) (data->uuid >> 16), + (grub_uint16_t) data->uuid); + for (ptr = *uuid; ptr && *ptr; ptr++) + *ptr = grub_toupper (*ptr); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +#ifdef GRUB_UTIL +#ifndef MODE_EXFAT +grub_disk_addr_t +grub_fat_get_cluster_sector (grub_disk_t disk, grub_uint64_t *sec_per_lcn) +#else +grub_disk_addr_t + grub_exfat_get_cluster_sector (grub_disk_t disk, grub_uint64_t *sec_per_lcn) +#endif +{ + grub_disk_addr_t ret; + struct grub_fat_data *data; + data = grub_fat_mount (disk); + if (!data) + return 0; + ret = data->cluster_sector; + + *sec_per_lcn = 1ULL << data->cluster_bits; + + grub_free (data); + return ret; +} +#endif + +static struct grub_fs grub_fat_fs = + { +#ifdef MODE_EXFAT + .name = "exfat", +#else + .name = "fat", +#endif + .dir = grub_fat_dir, + .open = grub_fat_open, + .read = grub_fat_read, + .close = grub_fat_close, + .label = grub_fat_label, + .uuid = grub_fat_uuid, +#ifdef GRUB_UTIL +#ifdef MODE_EXFAT + /* ExFAT BPB is 30 larger than FAT32 one. */ + .reserved_first_sector = 0, +#else + .reserved_first_sector = 1, +#endif + .blocklist_install = 1, +#endif + .next = 0 + }; + +#ifdef MODE_EXFAT +GRUB_MOD_INIT(exfat) +#else +GRUB_MOD_INIT(fat) +#endif +{ + COMPILE_TIME_ASSERT (sizeof (struct grub_fat_dir_entry) == 32); + grub_fs_register (&grub_fat_fs); + my_mod = mod; +} +#ifdef MODE_EXFAT +GRUB_MOD_FINI(exfat) +#else +GRUB_MOD_FINI(fat) +#endif +{ + grub_fs_unregister (&grub_fat_fs); +} + diff --git a/grub-core/fs/fshelp.c b/grub-core/fs/fshelp.c new file mode 100644 index 000000000..4c902adf3 --- /dev/null +++ b/grub-core/fs/fshelp.c @@ -0,0 +1,429 @@ +/* fshelp.c -- Filesystem helper functions */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005,2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +typedef int (*iterate_dir_func) (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, + void *data); +typedef grub_err_t (*lookup_file_func) (grub_fshelp_node_t dir, + const char *name, + grub_fshelp_node_t *foundnode, + enum grub_fshelp_filetype *foundtype); +typedef char *(*read_symlink_func) (grub_fshelp_node_t node); + +struct stack_element { + struct stack_element *parent; + grub_fshelp_node_t node; + enum grub_fshelp_filetype type; +}; + +/* Context for grub_fshelp_find_file. */ +struct grub_fshelp_find_file_ctx +{ + /* Inputs. */ + const char *path; + grub_fshelp_node_t rootnode; + + /* Global options. */ + int symlinknest; + + /* Current file being traversed and its parents. */ + struct stack_element *currnode; +}; + +/* Helper for find_file_iter. */ +static void +free_node (grub_fshelp_node_t node, struct grub_fshelp_find_file_ctx *ctx) +{ + if (node != ctx->rootnode) + grub_free (node); +} + +static void +pop_element (struct grub_fshelp_find_file_ctx *ctx) +{ + struct stack_element *el; + el = ctx->currnode; + ctx->currnode = el->parent; + free_node (el->node, ctx); + grub_free (el); +} + +static void +free_stack (struct grub_fshelp_find_file_ctx *ctx) +{ + while (ctx->currnode) + pop_element (ctx); +} + +static void +go_up_a_level (struct grub_fshelp_find_file_ctx *ctx) +{ + if (!ctx->currnode->parent) + return; + pop_element (ctx); +} + +static grub_err_t +push_node (struct grub_fshelp_find_file_ctx *ctx, grub_fshelp_node_t node, enum grub_fshelp_filetype filetype) +{ + struct stack_element *nst; + nst = grub_malloc (sizeof (*nst)); + if (!nst) + return grub_errno; + nst->node = node; + nst->type = filetype & ~GRUB_FSHELP_CASE_INSENSITIVE; + nst->parent = ctx->currnode; + ctx->currnode = nst; + return GRUB_ERR_NONE; +} + +static grub_err_t +go_to_root (struct grub_fshelp_find_file_ctx *ctx) +{ + free_stack (ctx); + return push_node (ctx, ctx->rootnode, GRUB_FSHELP_DIR); +} + +struct grub_fshelp_find_file_iter_ctx +{ + const char *name; + grub_fshelp_node_t *foundnode; + enum grub_fshelp_filetype *foundtype; +}; + +/* Helper for grub_fshelp_find_file. */ +static int +find_file_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_fshelp_find_file_iter_ctx *ctx = data; + + if (filetype == GRUB_FSHELP_UNKNOWN || + ((filetype & GRUB_FSHELP_CASE_INSENSITIVE) + ? grub_strcasecmp (ctx->name, filename) + : grub_strcmp (ctx->name, filename))) + { + grub_free (node); + return 0; + } + + /* The node is found, stop iterating over the nodes. */ + *ctx->foundnode = node; + *ctx->foundtype = filetype; + return 1; +} + +static grub_err_t +directory_find_file (grub_fshelp_node_t node, const char *name, grub_fshelp_node_t *foundnode, + enum grub_fshelp_filetype *foundtype, iterate_dir_func iterate_dir) +{ + int found; + struct grub_fshelp_find_file_iter_ctx ctx = { + .foundnode = foundnode, + .foundtype = foundtype, + .name = name + }; + found = iterate_dir (node, find_file_iter, &ctx); + if (! found) + { + if (grub_errno) + return grub_errno; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +find_file (char *currpath, + iterate_dir_func iterate_dir, lookup_file_func lookup_file, + read_symlink_func read_symlink, + struct grub_fshelp_find_file_ctx *ctx) +{ + char *name, *next; + grub_err_t err; + for (name = currpath; ; name = next) + { + char c; + grub_fshelp_node_t foundnode = NULL; + enum grub_fshelp_filetype foundtype = 0; + + /* Remove all leading slashes. */ + while (*name == '/') + name++; + + /* Found the node! */ + if (! *name) + return 0; + + /* Extract the actual part from the pathname. */ + for (next = name; *next && *next != '/'; next++); + + /* At this point it is expected that the current node is a + directory, check if this is true. */ + if (ctx->currnode->type != GRUB_FSHELP_DIR) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + + /* Don't rely on fs providing actual . in the listing. */ + if (next - name == 1 && name[0] == '.') + continue; + + /* Don't rely on fs providing actual .. in the listing. */ + if (next - name == 2 && name[0] == '.' && name[1] == '.') + { + go_up_a_level (ctx); + continue; + } + + /* Iterate over the directory. */ + c = *next; + *next = '\0'; + if (lookup_file) + err = lookup_file (ctx->currnode->node, name, &foundnode, &foundtype); + else + err = directory_find_file (ctx->currnode->node, name, &foundnode, &foundtype, iterate_dir); + *next = c; + + if (err) + return err; + + if (!foundnode) + break; + + push_node (ctx, foundnode, foundtype); + + /* Read in the symlink and follow it. */ + if (ctx->currnode->type == GRUB_FSHELP_SYMLINK) + { + char *symlink; + + /* Test if the symlink does not loop. */ + if (++ctx->symlinknest == 8) + return grub_error (GRUB_ERR_SYMLINK_LOOP, + N_("too deep nesting of symlinks")); + + symlink = read_symlink (ctx->currnode->node); + + if (!symlink) + return grub_errno; + + /* The symlink is an absolute path, go back to the root inode. */ + if (symlink[0] == '/') + { + err = go_to_root (ctx); + if (err) + return err; + } + else + { + /* Get from symlink to containing directory. */ + go_up_a_level (ctx); + } + + + /* Lookup the node the symlink points to. */ + find_file (symlink, iterate_dir, lookup_file, read_symlink, ctx); + grub_free (symlink); + + if (grub_errno) + return grub_errno; + } + } + + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), + ctx->path); +} + +static grub_err_t +grub_fshelp_find_file_real (const char *path, grub_fshelp_node_t rootnode, + grub_fshelp_node_t *foundnode, + iterate_dir_func iterate_dir, + lookup_file_func lookup_file, + read_symlink_func read_symlink, + enum grub_fshelp_filetype expecttype) +{ + struct grub_fshelp_find_file_ctx ctx = { + .path = path, + .rootnode = rootnode, + .symlinknest = 0, + .currnode = 0 + }; + grub_err_t err; + enum grub_fshelp_filetype foundtype; + char *duppath; + + if (!path || path[0] != '/') + { + return grub_error (GRUB_ERR_BAD_FILENAME, N_("invalid file name `%s'"), path); + } + + err = go_to_root (&ctx); + if (err) + return err; + + duppath = grub_strdup (path); + if (!duppath) + return grub_errno; + err = find_file (duppath, iterate_dir, lookup_file, read_symlink, &ctx); + grub_free (duppath); + if (err) + { + free_stack (&ctx); + return err; + } + + *foundnode = ctx.currnode->node; + foundtype = ctx.currnode->type; + /* Avoid the node being freed. */ + ctx.currnode->node = 0; + free_stack (&ctx); + + /* Check if the node that was found was of the expected type. */ + if (expecttype == GRUB_FSHELP_REG && foundtype != expecttype) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a regular file")); + else if (expecttype == GRUB_FSHELP_DIR && foundtype != expecttype) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + + return 0; +} + +/* Lookup the node PATH. The node ROOTNODE describes the root of the + directory tree. The node found is returned in FOUNDNODE, which is + either a ROOTNODE or a new malloc'ed node. ITERATE_DIR is used to + iterate over all directory entries in the current node. + READ_SYMLINK is used to read the symlink if a node is a symlink. + EXPECTTYPE is the type node that is expected by the called, an + error is generated if the node is not of the expected type. */ +grub_err_t +grub_fshelp_find_file (const char *path, grub_fshelp_node_t rootnode, + grub_fshelp_node_t *foundnode, + iterate_dir_func iterate_dir, + read_symlink_func read_symlink, + enum grub_fshelp_filetype expecttype) +{ + return grub_fshelp_find_file_real (path, rootnode, foundnode, + iterate_dir, NULL, + read_symlink, expecttype); + +} + +grub_err_t +grub_fshelp_find_file_lookup (const char *path, grub_fshelp_node_t rootnode, + grub_fshelp_node_t *foundnode, + lookup_file_func lookup_file, + read_symlink_func read_symlink, + enum grub_fshelp_filetype expecttype) +{ + return grub_fshelp_find_file_real (path, rootnode, foundnode, + NULL, lookup_file, + read_symlink, expecttype); + +} + +/* Read LEN bytes from the file NODE on disk DISK into the buffer BUF, + beginning with the block POS. READ_HOOK should be set before + reading a block from the file. READ_HOOK_DATA is passed through as + the DATA argument to READ_HOOK. GET_BLOCK is used to translate + file blocks to disk blocks. The file is FILESIZE bytes big and the + blocks have a size of LOG2BLOCKSIZE (in log2). */ +grub_ssize_t +grub_fshelp_read_file (grub_disk_t disk, grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf, + grub_disk_addr_t (*get_block) (grub_fshelp_node_t node, + grub_disk_addr_t block), + grub_off_t filesize, int log2blocksize, + grub_disk_addr_t blocks_start) +{ + grub_disk_addr_t i, blockcnt; + int blocksize = 1 << (log2blocksize + GRUB_DISK_SECTOR_BITS); + + if (pos > filesize) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read past the end of file")); + return -1; + } + + /* Adjust LEN so it we can't read past the end of the file. */ + if (pos + len > filesize) + len = filesize - pos; + + blockcnt = ((len + pos) + blocksize - 1) >> (log2blocksize + GRUB_DISK_SECTOR_BITS); + + for (i = pos >> (log2blocksize + GRUB_DISK_SECTOR_BITS); i < blockcnt; i++) + { + grub_disk_addr_t blknr; + int blockoff = pos & (blocksize - 1); + int blockend = blocksize; + + int skipfirst = 0; + + blknr = get_block (node, i); + if (grub_errno) + return -1; + + blknr = blknr << log2blocksize; + + /* Last block. */ + if (i == blockcnt - 1) + { + blockend = (len + pos) & (blocksize - 1); + + /* The last portion is exactly blocksize. */ + if (! blockend) + blockend = blocksize; + } + + /* First block. */ + if (i == (pos >> (log2blocksize + GRUB_DISK_SECTOR_BITS))) + { + skipfirst = blockoff; + blockend -= skipfirst; + } + + /* If the block number is 0 this block is not stored on disk but + is zero filled instead. */ + if (blknr) + { + disk->read_hook = read_hook; + disk->read_hook_data = read_hook_data; + + grub_disk_read (disk, blknr + blocks_start, skipfirst, + blockend, buf); + disk->read_hook = 0; + if (grub_errno) + return -1; + } + else + grub_memset (buf, 0, blockend); + + buf += blocksize - skipfirst; + } + + return len; +} diff --git a/grub-core/fs/hfs.c b/grub-core/fs/hfs.c new file mode 100644 index 000000000..fc3683178 --- /dev/null +++ b/grub-core/fs/hfs.c @@ -0,0 +1,1443 @@ +/* hfs.c - HFS. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* HFS is documented at + http://developer.apple.com/documentation/mac/Files/Files-2.html */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_HFS_SBLOCK 2 +#define GRUB_HFS_EMBED_HFSPLUS_SIG 0x482B + +#define GRUB_HFS_BLKS (data->blksz >> 9) + +#define GRUB_HFS_NODE_LEAF 0xFF + +/* The two supported filesystems a record can have. */ +enum + { + GRUB_HFS_FILETYPE_DIR = 1, + GRUB_HFS_FILETYPE_FILE = 2 + }; + +/* Catalog node ID (CNID). */ +enum grub_hfs_cnid_type + { + GRUB_HFS_CNID_ROOT_PARENT = 1, + GRUB_HFS_CNID_ROOT = 2, + GRUB_HFS_CNID_EXT = 3, + GRUB_HFS_CNID_CAT = 4, + GRUB_HFS_CNID_BAD = 5 + }; + +/* A node descriptor. This is the header of every node. */ +struct grub_hfs_node +{ + grub_uint32_t next; + grub_uint32_t prev; + grub_uint8_t type; + grub_uint8_t level; + grub_uint16_t reccnt; + grub_uint16_t unused; +} GRUB_PACKED; + +/* The head of the B*-Tree. */ +struct grub_hfs_treeheader +{ + grub_uint16_t tree_depth; + /* The number of the first node. */ + grub_uint32_t root_node; + grub_uint32_t leaves; + grub_uint32_t first_leaf; + grub_uint32_t last_leaf; + grub_uint16_t node_size; + grub_uint16_t key_size; + grub_uint32_t nodes; + grub_uint32_t free_nodes; + grub_uint8_t unused[76]; +} GRUB_PACKED; + +/* The state of a mounted HFS filesystem. */ +struct grub_hfs_data +{ + struct grub_hfs_sblock sblock; + grub_disk_t disk; + grub_hfs_datarecord_t extents; + int fileid; + int size; + int ext_root; + int ext_size; + int cat_root; + int cat_size; + int blksz; + int log2_blksz; + int rootdir; +}; + +/* The key as used on disk in a catalog tree. This is used to lookup + file/directory nodes by parent directory ID and filename. */ +struct grub_hfs_catalog_key +{ + grub_uint8_t unused; + grub_uint32_t parent_dir; + + /* Filename length. */ + grub_uint8_t strlen; + + /* Filename. */ + grub_uint8_t str[31]; +} GRUB_PACKED; + +/* The key as used on disk in a extent overflow tree. Using this key + the extents can be looked up using a fileid and logical start block + as index. */ +struct grub_hfs_extent_key +{ + /* The kind of fork. This is used to store meta information like + icons, attributes, etc. We will only use the datafork, which is + 0. */ + grub_uint8_t forktype; + grub_uint32_t fileid; + grub_uint16_t first_block; +} GRUB_PACKED; + +/* A directory record. This is used to find out the directory ID. */ +struct grub_hfs_dirrec +{ + /* For a directory, type == 1. */ + grub_uint8_t type; + grub_uint8_t unused[5]; + grub_uint32_t dirid; + grub_uint32_t ctime; + grub_uint32_t mtime; +} GRUB_PACKED; + +/* Information about a file. */ +struct grub_hfs_filerec +{ + /* For a file, type == 2. */ + grub_uint8_t type; + grub_uint8_t unused[19]; + grub_uint32_t fileid; + grub_uint8_t unused2[2]; + grub_uint32_t size; + grub_uint8_t unused3[18]; + grub_uint32_t mtime; + grub_uint8_t unused4[22]; + + /* The first 3 extents of the file. The other extents can be found + in the extent overflow file. */ + grub_hfs_datarecord_t extents; +} GRUB_PACKED; + +/* A record descriptor, both key and data, used to pass to call back + functions. */ +struct grub_hfs_record +{ + void *key; + grub_size_t keylen; + void *data; + grub_size_t datalen; +}; + +static grub_dl_t my_mod; + +static int grub_hfs_find_node (struct grub_hfs_data *, char *, + grub_uint32_t, int, char *, grub_size_t); + +/* Find block BLOCK of the file FILE in the mounted UFS filesystem + DATA. The first 3 extents are described by DAT. If cache is set, + using caching to improve non-random reads. */ +static unsigned int +grub_hfs_block (struct grub_hfs_data *data, grub_hfs_datarecord_t dat, + int file, int block, int cache) +{ + grub_hfs_datarecord_t dr; + int pos = 0; + struct grub_hfs_extent_key key; + + int tree = 0; + static int cache_file = 0; + static int cache_pos = 0; + static grub_hfs_datarecord_t cache_dr; + + grub_memcpy (dr, dat, sizeof (dr)); + + key.forktype = 0; + key.fileid = grub_cpu_to_be32 (file); + + if (cache && cache_file == file && block > cache_pos) + { + pos = cache_pos; + key.first_block = grub_cpu_to_be16 (pos); + grub_memcpy (dr, cache_dr, sizeof (cache_dr)); + } + + for (;;) + { + int i; + + /* Try all 3 extents. */ + for (i = 0; i < 3; i++) + { + /* Check if the block is stored in this extent. */ + if (grub_be_to_cpu16 (dr[i].count) + pos > block) + { + int first = grub_be_to_cpu16 (dr[i].first_block); + + /* If the cache is enabled, store the current position + in the tree. */ + if (tree && cache) + { + cache_file = file; + cache_pos = pos; + grub_memcpy (cache_dr, dr, sizeof (cache_dr)); + } + + return (grub_be_to_cpu16 (data->sblock.first_block) + + (first + block - pos) * GRUB_HFS_BLKS); + } + + /* Try the next extent. */ + pos += grub_be_to_cpu16 (dr[i].count); + } + + /* Lookup the block in the extent overflow file. */ + key.first_block = grub_cpu_to_be16 (pos); + tree = 1; + grub_hfs_find_node (data, (char *) &key, data->ext_root, + 1, (char *) &dr, sizeof (dr)); + if (grub_errno) + return 0; + } +} + + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_hfs_read_file (struct grub_hfs_data *data, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_uint32_t pos, grub_size_t len, char *buf) +{ + grub_off_t i; + grub_off_t blockcnt; + + /* Files are at most 2G/4G - 1 bytes on hfs. Avoid 64-bit division. + Moreover len > 0 as checked in upper layer. */ + blockcnt = (len + pos - 1) / data->blksz + 1; + + for (i = pos / data->blksz; i < blockcnt; i++) + { + grub_disk_addr_t blknr; + grub_off_t blockoff; + grub_off_t blockend = data->blksz; + + int skipfirst = 0; + + blockoff = pos % data->blksz; + + blknr = grub_hfs_block (data, data->extents, data->fileid, i, 1); + if (grub_errno) + return -1; + + /* Last block. */ + if (i == blockcnt - 1) + { + blockend = (len + pos) % data->blksz; + + /* The last portion is exactly EXT2_BLOCK_SIZE (data). */ + if (! blockend) + blockend = data->blksz; + } + + /* First block. */ + if (i == pos / data->blksz) + { + skipfirst = blockoff; + blockend -= skipfirst; + } + + /* If the block number is 0 this block is not stored on disk but + is zero filled instead. */ + if (blknr) + { + data->disk->read_hook = read_hook; + data->disk->read_hook_data = read_hook_data; + grub_disk_read (data->disk, blknr, skipfirst, + blockend, buf); + data->disk->read_hook = 0; + if (grub_errno) + return -1; + } + + buf += data->blksz - skipfirst; + } + + return len; +} + + +/* Mount the filesystem on the disk DISK. */ +static struct grub_hfs_data * +grub_hfs_mount (grub_disk_t disk) +{ + struct grub_hfs_data *data; + struct grub_hfs_catalog_key key; + struct grub_hfs_dirrec dir; + int first_block; + + struct + { + struct grub_hfs_node node; + struct grub_hfs_treeheader head; + } treehead; + + data = grub_malloc (sizeof (struct grub_hfs_data)); + if (!data) + return 0; + + /* Read the superblock. */ + if (grub_disk_read (disk, GRUB_HFS_SBLOCK, 0, + sizeof (struct grub_hfs_sblock), &data->sblock)) + goto fail; + + /* Check if this is a HFS filesystem. */ + if (grub_be_to_cpu16 (data->sblock.magic) != GRUB_HFS_MAGIC + || data->sblock.blksz == 0 + || (data->sblock.blksz & grub_cpu_to_be32_compile_time (0xc00001ff))) + { + grub_error (GRUB_ERR_BAD_FS, "not an HFS filesystem"); + goto fail; + } + + /* Check if this is an embedded HFS+ filesystem. */ + if (grub_be_to_cpu16 (data->sblock.embed_sig) == GRUB_HFS_EMBED_HFSPLUS_SIG) + { + grub_error (GRUB_ERR_BAD_FS, "embedded HFS+ filesystem"); + goto fail; + } + + data->blksz = grub_be_to_cpu32 (data->sblock.blksz); + data->disk = disk; + + /* Lookup the root node of the extent overflow tree. */ + first_block = ((grub_be_to_cpu16 (data->sblock.extent_recs[0].first_block) + * GRUB_HFS_BLKS) + + grub_be_to_cpu16 (data->sblock.first_block)); + + if (grub_disk_read (data->disk, first_block, 0, + sizeof (treehead), &treehead)) + goto fail; + data->ext_root = grub_be_to_cpu32 (treehead.head.root_node); + data->ext_size = grub_be_to_cpu16 (treehead.head.node_size); + + /* Lookup the root node of the catalog tree. */ + first_block = ((grub_be_to_cpu16 (data->sblock.catalog_recs[0].first_block) + * GRUB_HFS_BLKS) + + grub_be_to_cpu16 (data->sblock.first_block)); + if (grub_disk_read (data->disk, first_block, 0, + sizeof (treehead), &treehead)) + goto fail; + data->cat_root = grub_be_to_cpu32 (treehead.head.root_node); + data->cat_size = grub_be_to_cpu16 (treehead.head.node_size); + + if (data->cat_size == 0 + || data->blksz < data->cat_size + || data->blksz < data->ext_size) + goto fail; + + /* Lookup the root directory node in the catalog tree using the + volume name. */ + key.parent_dir = grub_cpu_to_be32_compile_time (1); + key.strlen = data->sblock.volname[0]; + grub_strcpy ((char *) key.str, (char *) (data->sblock.volname + 1)); + + if (grub_hfs_find_node (data, (char *) &key, data->cat_root, + 0, (char *) &dir, sizeof (dir)) == 0) + { + grub_error (GRUB_ERR_BAD_FS, "cannot find the HFS root directory"); + goto fail; + } + + if (grub_errno) + goto fail; + + data->rootdir = grub_be_to_cpu32 (dir.dirid); + + return data; + fail: + grub_free (data); + + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not a HFS filesystem"); + + return 0; +} + +/* Compare the K1 and K2 catalog file keys using HFS character ordering. */ +static int +grub_hfs_cmp_catkeys (const struct grub_hfs_catalog_key *k1, + const struct grub_hfs_catalog_key *k2) +{ + /* Taken from hfsutils 3.2.6 and converted to a readable form */ + static const unsigned char hfs_charorder[256] = { + [0x00] = 0, + [0x01] = 1, + [0x02] = 2, + [0x03] = 3, + [0x04] = 4, + [0x05] = 5, + [0x06] = 6, + [0x07] = 7, + [0x08] = 8, + [0x09] = 9, + [0x0A] = 10, + [0x0B] = 11, + [0x0C] = 12, + [0x0D] = 13, + [0x0E] = 14, + [0x0F] = 15, + [0x10] = 16, + [0x11] = 17, + [0x12] = 18, + [0x13] = 19, + [0x14] = 20, + [0x15] = 21, + [0x16] = 22, + [0x17] = 23, + [0x18] = 24, + [0x19] = 25, + [0x1A] = 26, + [0x1B] = 27, + [0x1C] = 28, + [0x1D] = 29, + [0x1E] = 30, + [0x1F] = 31, + [' '] = 32, [0xCA] = 32, + ['!'] = 33, + ['"'] = 34, + [0xD2] = 35, + [0xD3] = 36, + [0xC7] = 37, + [0xC8] = 38, + ['#'] = 39, + ['$'] = 40, + ['%'] = 41, + ['&'] = 42, + ['\''] = 43, + [0xD4] = 44, + [0xD5] = 45, + ['('] = 46, + [')'] = 47, + ['*'] = 48, + ['+'] = 49, + [','] = 50, + ['-'] = 51, + ['.'] = 52, + ['/'] = 53, + ['0'] = 54, + ['1'] = 55, + ['2'] = 56, + ['3'] = 57, + ['4'] = 58, + ['5'] = 59, + ['6'] = 60, + ['7'] = 61, + ['8'] = 62, + ['9'] = 63, + [':'] = 64, + [';'] = 65, + ['<'] = 66, + ['='] = 67, + ['>'] = 68, + ['?'] = 69, + ['@'] = 70, + ['A'] = 71, ['a'] = 71, + [0x88] = 72, [0xCB] = 72, + [0x80] = 73, [0x8A] = 73, + [0x8B] = 74, [0xCC] = 74, + [0x81] = 75, [0x8C] = 75, + [0xAE] = 76, [0xBE] = 76, + ['`'] = 77, + [0x87] = 78, + [0x89] = 79, + [0xBB] = 80, + ['B'] = 81, ['b'] = 81, + ['C'] = 82, ['c'] = 82, + [0x82] = 83, [0x8D] = 83, + ['D'] = 84, ['d'] = 84, + ['E'] = 85, ['e'] = 85, + [0x83] = 86, [0x8E] = 86, + [0x8F] = 87, + [0x90] = 88, + [0x91] = 89, + ['F'] = 90, ['f'] = 90, + ['G'] = 91, ['g'] = 91, + ['H'] = 92, ['h'] = 92, + ['I'] = 93, ['i'] = 93, + [0x92] = 94, + [0x93] = 95, + [0x94] = 96, + [0x95] = 97, + ['J'] = 98, ['j'] = 98, + ['K'] = 99, ['k'] = 99, + ['L'] = 100, ['l'] = 100, + ['M'] = 101, ['m'] = 101, + ['N'] = 102, ['n'] = 102, + [0x84] = 103, [0x96] = 103, + ['O'] = 104, ['o'] = 104, + [0x85] = 105, [0x9A] = 105, + [0x9B] = 106, [0xCD] = 106, + [0xAF] = 107, [0xBF] = 107, + [0xCE] = 108, [0xCF] = 108, + [0x97] = 109, + [0x98] = 110, + [0x99] = 111, + [0xBC] = 112, + ['P'] = 113, ['p'] = 113, + ['Q'] = 114, ['q'] = 114, + ['R'] = 115, ['r'] = 115, + ['S'] = 116, ['s'] = 116, + [0xA7] = 117, + ['T'] = 118, ['t'] = 118, + ['U'] = 119, ['u'] = 119, + [0x86] = 120, [0x9F] = 120, + [0x9C] = 121, + [0x9D] = 122, + [0x9E] = 123, + ['V'] = 124, ['v'] = 124, + ['W'] = 125, ['w'] = 125, + ['X'] = 126, ['x'] = 126, + ['Y'] = 127, ['y'] = 127, + [0xD8] = 128, + ['Z'] = 129, ['z'] = 129, + ['['] = 130, + ['\\'] = 131, + [']'] = 132, + ['^'] = 133, + ['_'] = 134, + ['{'] = 135, + ['|'] = 136, + ['}'] = 137, + ['~'] = 138, + [0x7F] = 139, + [0xA0] = 140, + [0xA1] = 141, + [0xA2] = 142, + [0xA3] = 143, + [0xA4] = 144, + [0xA5] = 145, + [0xA6] = 146, + [0xA8] = 147, + [0xA9] = 148, + [0xAA] = 149, + [0xAB] = 150, + [0xAC] = 151, + [0xAD] = 152, + [0xB0] = 153, + [0xB1] = 154, + [0xB2] = 155, + [0xB3] = 156, + [0xB4] = 157, + [0xB5] = 158, + [0xB6] = 159, + [0xB7] = 160, + [0xB8] = 161, + [0xB9] = 162, + [0xBA] = 163, + [0xBD] = 164, + [0xC0] = 165, + [0xC1] = 166, + [0xC2] = 167, + [0xC3] = 168, + [0xC4] = 169, + [0xC5] = 170, + [0xC6] = 171, + [0xC9] = 172, + [0xD0] = 173, + [0xD1] = 174, + [0xD6] = 175, + [0xD7] = 176, + [0xD9] = 177, + [0xDA] = 178, + [0xDB] = 179, + [0xDC] = 180, + [0xDD] = 181, + [0xDE] = 182, + [0xDF] = 183, + [0xE0] = 184, + [0xE1] = 185, + [0xE2] = 186, + [0xE3] = 187, + [0xE4] = 188, + [0xE5] = 189, + [0xE6] = 190, + [0xE7] = 191, + [0xE8] = 192, + [0xE9] = 193, + [0xEA] = 194, + [0xEB] = 195, + [0xEC] = 196, + [0xED] = 197, + [0xEE] = 198, + [0xEF] = 199, + [0xF0] = 200, + [0xF1] = 201, + [0xF2] = 202, + [0xF3] = 203, + [0xF4] = 204, + [0xF5] = 205, + [0xF6] = 206, + [0xF7] = 207, + [0xF8] = 208, + [0xF9] = 209, + [0xFA] = 210, + [0xFB] = 211, + [0xFC] = 212, + [0xFD] = 213, + [0xFE] = 214, + [0xFF] = 215, + }; + int i; + int cmp; + int minlen = (k1->strlen < k2->strlen) ? k1->strlen : k2->strlen; + + cmp = (grub_be_to_cpu32 (k1->parent_dir) - grub_be_to_cpu32 (k2->parent_dir)); + if (cmp != 0) + return cmp; + + for (i = 0; i < minlen; i++) + { + cmp = (hfs_charorder[k1->str[i]] - hfs_charorder[k2->str[i]]); + if (cmp != 0) + return cmp; + } + + /* Shorter strings precede long ones. */ + return (k1->strlen - k2->strlen); +} + + +/* Compare the K1 and K2 extent overflow file keys. */ +static int +grub_hfs_cmp_extkeys (const struct grub_hfs_extent_key *k1, + const struct grub_hfs_extent_key *k2) +{ + int cmp = k1->forktype - k2->forktype; + if (cmp == 0) + cmp = grub_be_to_cpu32 (k1->fileid) - grub_be_to_cpu32 (k2->fileid); + if (cmp == 0) + cmp = (grub_be_to_cpu16 (k1->first_block) + - grub_be_to_cpu16 (k2->first_block)); + return cmp; +} + + +/* Iterate the records in the node with index IDX in the mounted HFS + filesystem DATA. This node holds data of the type TYPE (0 = + catalog node, 1 = extent overflow node). If this is set, continue + iterating to the next node. For every records, call NODE_HOOK. */ +static grub_err_t +grub_hfs_iterate_records (struct grub_hfs_data *data, int type, int idx, + int this, int (*node_hook) (struct grub_hfs_node *hnd, + struct grub_hfs_record *, + void *hook_arg), + void *hook_arg) +{ + grub_size_t nodesize = type == 0 ? data->cat_size : data->ext_size; + + union node_union + { + struct grub_hfs_node node; + char rawnode[0]; + grub_uint16_t offsets[0]; + } *node; + + if (nodesize < sizeof (struct grub_hfs_node)) + nodesize = sizeof (struct grub_hfs_node); + + node = grub_malloc (nodesize); + if (!node) + return grub_errno; + + do + { + int i; + struct grub_hfs_extent *dat; + int blk; + grub_uint16_t reccnt; + + dat = (struct grub_hfs_extent *) (type == 0 + ? (&data->sblock.catalog_recs) + : (&data->sblock.extent_recs)); + + /* Read the node into memory. */ + blk = grub_hfs_block (data, dat, + (type == 0) ? GRUB_HFS_CNID_CAT : GRUB_HFS_CNID_EXT, + idx / (data->blksz / nodesize), 0); + blk += (idx % (data->blksz / nodesize)); + + if (grub_errno || grub_disk_read (data->disk, blk, 0, + nodesize, node)) + { + grub_free (node); + return grub_errno; + } + + reccnt = grub_be_to_cpu16 (node->node.reccnt); + if (reccnt > (nodesize >> 1)) + reccnt = (nodesize >> 1); + + /* Iterate over all records in this node. */ + for (i = 0; i < reccnt; i++) + { + int pos = (nodesize >> 1) - 1 - i; + struct pointer + { + grub_uint8_t keylen; + grub_uint8_t key; + } GRUB_PACKED *pnt; + grub_uint16_t off = grub_be_to_cpu16 (node->offsets[pos]); + if (off > nodesize - sizeof(*pnt)) + continue; + pnt = (struct pointer *) (off + node->rawnode); + if (nodesize < (grub_size_t) off + pnt->keylen + 1) + continue; + + struct grub_hfs_record rec = + { + &pnt->key, + pnt->keylen, + &pnt->key + pnt->keylen +(pnt->keylen + 1) % 2, + nodesize - off - pnt->keylen - 1 + }; + + if (node_hook (&node->node, &rec, hook_arg)) + { + grub_free (node); + return 0; + } + } + + idx = grub_be_to_cpu32 (node->node.next); + } while (idx && this); + grub_free (node); + return 0; +} + +struct grub_hfs_find_node_node_found_ctx +{ + int found; + int isleaf; + int done; + int type; + const char *key; + char *datar; + grub_size_t datalen; +}; + +static int +grub_hfs_find_node_node_found (struct grub_hfs_node *hnd, struct grub_hfs_record *rec, + void *hook_arg) +{ + struct grub_hfs_find_node_node_found_ctx *ctx = hook_arg; + int cmp = 1; + + if (ctx->type == 0) + cmp = grub_hfs_cmp_catkeys (rec->key, (const void *) ctx->key); + else + cmp = grub_hfs_cmp_extkeys (rec->key, (const void *) ctx->key); + + /* If the key is smaller or equal to the current node, mark the + entry. In case of a non-leaf mode it will be used to lookup + the rest of the tree. */ + if (cmp <= 0) + ctx->found = grub_be_to_cpu32 (grub_get_unaligned32 (rec->data)); + else /* The key can not be found in the tree. */ + return 1; + + /* Check if this node is a leaf node. */ + if (hnd->type == GRUB_HFS_NODE_LEAF) + { + ctx->isleaf = 1; + + /* Found it!!!! */ + if (cmp == 0) + { + ctx->done = 1; + + grub_memcpy (ctx->datar, rec->data, + rec->datalen < ctx->datalen ? rec->datalen : ctx->datalen); + return 1; + } + } + + return 0; +} + + +/* Lookup a record in the mounted filesystem DATA using the key KEY. + The index of the node on top of the tree is IDX. The tree is of + the type TYPE (0 = catalog node, 1 = extent overflow node). Return + the data in DATAR with a maximum length of DATALEN. */ +static int +grub_hfs_find_node (struct grub_hfs_data *data, char *key, + grub_uint32_t idx, int type, char *datar, grub_size_t datalen) +{ + struct grub_hfs_find_node_node_found_ctx ctx = + { + .found = -1, + .isleaf = 0, + .done = 0, + .type = type, + .key = key, + .datar = datar, + .datalen = datalen + }; + + do + { + ctx.found = -1; + + if (grub_hfs_iterate_records (data, type, idx, 0, grub_hfs_find_node_node_found, &ctx)) + return 0; + + if (ctx.found == -1) + return 0; + + idx = ctx.found; + } while (! ctx.isleaf); + + return ctx.done; +} + +struct grub_hfs_iterate_dir_node_found_ctx +{ + grub_uint32_t dir_be; + int found; + int isleaf; + grub_uint32_t next; + int (*hook) (struct grub_hfs_record *, void *hook_arg); + void *hook_arg; +}; + +static int +grub_hfs_iterate_dir_node_found (struct grub_hfs_node *hnd, struct grub_hfs_record *rec, + void *hook_arg) +{ + struct grub_hfs_iterate_dir_node_found_ctx *ctx = hook_arg; + struct grub_hfs_catalog_key *ckey = rec->key; + + /* The lowest key possible with DIR as root directory. */ + const struct grub_hfs_catalog_key key = {0, ctx->dir_be, 0, ""}; + + if (grub_hfs_cmp_catkeys (rec->key, &key) <= 0) + ctx->found = grub_be_to_cpu32 (grub_get_unaligned32 (rec->data)); + + if (hnd->type == 0xFF && ckey->strlen > 0) + { + ctx->isleaf = 1; + ctx->next = grub_be_to_cpu32 (hnd->next); + + /* An entry was found. */ + if (ckey->parent_dir == ctx->dir_be) + return ctx->hook (rec, ctx->hook_arg); + } + + return 0; +} + +static int +grub_hfs_iterate_dir_it_dir (struct grub_hfs_node *hnd __attribute ((unused)), + struct grub_hfs_record *rec, + void *hook_arg) +{ + struct grub_hfs_catalog_key *ckey = rec->key; + struct grub_hfs_iterate_dir_node_found_ctx *ctx = hook_arg; + + /* Stop when the entries do not match anymore. */ + if (ckey->parent_dir != ctx->dir_be) + return 1; + + return ctx->hook (rec, ctx->hook_arg); +} + + +/* Iterate over the directory with the id DIR. The tree is searched + starting with the node ROOT_IDX. For every entry in this directory + call HOOK. */ +static grub_err_t +grub_hfs_iterate_dir (struct grub_hfs_data *data, grub_uint32_t root_idx, + grub_uint32_t dir, int (*hook) (struct grub_hfs_record *, void *hook_arg), + void *hook_arg) +{ + struct grub_hfs_iterate_dir_node_found_ctx ctx = + { + .dir_be = grub_cpu_to_be32 (dir), + .found = -1, + .isleaf = 0, + .next = 0, + .hook = hook, + .hook_arg = hook_arg + }; + + do + { + ctx.found = -1; + + if (grub_hfs_iterate_records (data, 0, root_idx, 0, grub_hfs_iterate_dir_node_found, &ctx)) + return grub_errno; + + if (ctx.found == -1) + return 0; + + root_idx = ctx.found; + } while (! ctx.isleaf); + + /* If there was a matching record in this leaf node, continue the + iteration until the last record was found. */ + grub_hfs_iterate_records (data, 0, ctx.next, 1, grub_hfs_iterate_dir_it_dir, &ctx); + return grub_errno; +} + +#define MAX_UTF8_PER_MAC_ROMAN 3 + +static const char macroman[0x80][MAX_UTF8_PER_MAC_ROMAN + 1] = + { + /* 80 */ "\xc3\x84", + /* 81 */ "\xc3\x85", + /* 82 */ "\xc3\x87", + /* 83 */ "\xc3\x89", + /* 84 */ "\xc3\x91", + /* 85 */ "\xc3\x96", + /* 86 */ "\xc3\x9c", + /* 87 */ "\xc3\xa1", + /* 88 */ "\xc3\xa0", + /* 89 */ "\xc3\xa2", + /* 8A */ "\xc3\xa4", + /* 8B */ "\xc3\xa3", + /* 8C */ "\xc3\xa5", + /* 8D */ "\xc3\xa7", + /* 8E */ "\xc3\xa9", + /* 8F */ "\xc3\xa8", + /* 90 */ "\xc3\xaa", + /* 91 */ "\xc3\xab", + /* 92 */ "\xc3\xad", + /* 93 */ "\xc3\xac", + /* 94 */ "\xc3\xae", + /* 95 */ "\xc3\xaf", + /* 96 */ "\xc3\xb1", + /* 97 */ "\xc3\xb3", + /* 98 */ "\xc3\xb2", + /* 99 */ "\xc3\xb4", + /* 9A */ "\xc3\xb6", + /* 9B */ "\xc3\xb5", + /* 9C */ "\xc3\xba", + /* 9D */ "\xc3\xb9", + /* 9E */ "\xc3\xbb", + /* 9F */ "\xc3\xbc", + /* A0 */ "\xe2\x80\xa0", + /* A1 */ "\xc2\xb0", + /* A2 */ "\xc2\xa2", + /* A3 */ "\xc2\xa3", + /* A4 */ "\xc2\xa7", + /* A5 */ "\xe2\x80\xa2", + /* A6 */ "\xc2\xb6", + /* A7 */ "\xc3\x9f", + /* A8 */ "\xc2\xae", + /* A9 */ "\xc2\xa9", + /* AA */ "\xe2\x84\xa2", + /* AB */ "\xc2\xb4", + /* AC */ "\xc2\xa8", + /* AD */ "\xe2\x89\xa0", + /* AE */ "\xc3\x86", + /* AF */ "\xc3\x98", + /* B0 */ "\xe2\x88\x9e", + /* B1 */ "\xc2\xb1", + /* B2 */ "\xe2\x89\xa4", + /* B3 */ "\xe2\x89\xa5", + /* B4 */ "\xc2\xa5", + /* B5 */ "\xc2\xb5", + /* B6 */ "\xe2\x88\x82", + /* B7 */ "\xe2\x88\x91", + /* B8 */ "\xe2\x88\x8f", + /* B9 */ "\xcf\x80", + /* BA */ "\xe2\x88\xab", + /* BB */ "\xc2\xaa", + /* BC */ "\xc2\xba", + /* BD */ "\xce\xa9", + /* BE */ "\xc3\xa6", + /* BF */ "\xc3\xb8", + /* C0 */ "\xc2\xbf", + /* C1 */ "\xc2\xa1", + /* C2 */ "\xc2\xac", + /* C3 */ "\xe2\x88\x9a", + /* C4 */ "\xc6\x92", + /* C5 */ "\xe2\x89\x88", + /* C6 */ "\xe2\x88\x86", + /* C7 */ "\xc2\xab", + /* C8 */ "\xc2\xbb", + /* C9 */ "\xe2\x80\xa6", + /* CA */ "\xc2\xa0", + /* CB */ "\xc3\x80", + /* CC */ "\xc3\x83", + /* CD */ "\xc3\x95", + /* CE */ "\xc5\x92", + /* CF */ "\xc5\x93", + /* D0 */ "\xe2\x80\x93", + /* D1 */ "\xe2\x80\x94", + /* D2 */ "\xe2\x80\x9c", + /* D3 */ "\xe2\x80\x9d", + /* D4 */ "\xe2\x80\x98", + /* D5 */ "\xe2\x80\x99", + /* D6 */ "\xc3\xb7", + /* D7 */ "\xe2\x97\x8a", + /* D8 */ "\xc3\xbf", + /* D9 */ "\xc5\xb8", + /* DA */ "\xe2\x81\x84", + /* DB */ "\xe2\x82\xac", + /* DC */ "\xe2\x80\xb9", + /* DD */ "\xe2\x80\xba", + /* DE */ "\xef\xac\x81", + /* DF */ "\xef\xac\x82", + /* E0 */ "\xe2\x80\xa1", + /* E1 */ "\xc2\xb7", + /* E2 */ "\xe2\x80\x9a", + /* E3 */ "\xe2\x80\x9e", + /* E4 */ "\xe2\x80\xb0", + /* E5 */ "\xc3\x82", + /* E6 */ "\xc3\x8a", + /* E7 */ "\xc3\x81", + /* E8 */ "\xc3\x8b", + /* E9 */ "\xc3\x88", + /* EA */ "\xc3\x8d", + /* EB */ "\xc3\x8e", + /* EC */ "\xc3\x8f", + /* ED */ "\xc3\x8c", + /* EE */ "\xc3\x93", + /* EF */ "\xc3\x94", + /* F0 */ "\xef\xa3\xbf", + /* F1 */ "\xc3\x92", + /* F2 */ "\xc3\x9a", + /* F3 */ "\xc3\x9b", + /* F4 */ "\xc3\x99", + /* F5 */ "\xc4\xb1", + /* F6 */ "\xcb\x86", + /* F7 */ "\xcb\x9c", + /* F8 */ "\xc2\xaf", + /* F9 */ "\xcb\x98", + /* FA */ "\xcb\x99", + /* FB */ "\xcb\x9a", + /* FC */ "\xc2\xb8", + /* FD */ "\xcb\x9d", + /* FE */ "\xcb\x9b", + /* FF */ "\xcb\x87", + }; + +static void +macroman_to_utf8 (char *to, const grub_uint8_t *from, grub_size_t len, + int translate_slash) +{ + char *optr = to; + const grub_uint8_t *iptr; + + for (iptr = from; iptr < from + len && *iptr; iptr++) + { + /* Translate '/' to ':' as per HFS spec. */ + if (*iptr == '/' && translate_slash) + { + *optr++ = ':'; + continue; + } + if (!(*iptr & 0x80)) + { + *optr++ = *iptr; + continue; + } + optr = grub_stpcpy (optr, macroman[*iptr & 0x7f]); + } + *optr = 0; +} + +static grub_ssize_t +utf8_to_macroman (grub_uint8_t *to, const char *from) +{ + grub_uint8_t *end = to + 31; + grub_uint8_t *optr = to; + const char *iptr = from; + + while (*iptr && optr < end) + { + int i, clen; + /* Translate ':' to '/' as per HFS spec. */ + if (*iptr == ':') + { + *optr++ = '/'; + iptr++; + continue; + } + if (!(*iptr & 0x80)) + { + *optr++ = *iptr++; + continue; + } + clen = 2; + if ((*iptr & 0xf0) == 0xe0) + clen++; + for (i = 0; i < 0x80; i++) + if (grub_memcmp (macroman[i], iptr, clen) == 0) + break; + if (i == 0x80) + break; + *optr++ = i | 0x80; + iptr += clen; + } + /* Too long or not encodable. */ + if (*iptr) + return -1; + return optr - to; +} + +union grub_hfs_anyrec { + struct grub_hfs_filerec frec; + struct grub_hfs_dirrec dir; +}; + +struct grub_fshelp_node +{ + struct grub_hfs_data *data; + union grub_hfs_anyrec fdrec; + grub_uint32_t inode; +}; + +static grub_err_t +lookup_file (grub_fshelp_node_t dir, + const char *name, + grub_fshelp_node_t *foundnode, + enum grub_fshelp_filetype *foundtype) +{ + struct grub_hfs_catalog_key key; + grub_ssize_t slen; + union grub_hfs_anyrec fdrec; + + key.parent_dir = grub_cpu_to_be32 (dir->inode); + slen = utf8_to_macroman (key.str, name); + if (slen < 0) + /* Not found */ + return GRUB_ERR_NONE; + key.strlen = slen; + + /* Lookup this node. */ + if (! grub_hfs_find_node (dir->data, (char *) &key, dir->data->cat_root, + 0, (char *) &fdrec.frec, sizeof (fdrec.frec))) + /* Not found */ + return GRUB_ERR_NONE; + + *foundnode = grub_malloc (sizeof (struct grub_fshelp_node)); + if (!*foundnode) + return grub_errno; + + (*foundnode)->inode = grub_be_to_cpu32 (fdrec.dir.dirid); + (*foundnode)->fdrec = fdrec; + (*foundnode)->data = dir->data; + *foundtype = (fdrec.frec.type == GRUB_HFS_FILETYPE_DIR) ? GRUB_FSHELP_DIR : GRUB_FSHELP_REG; + return GRUB_ERR_NONE; +} + +/* Find a file or directory with the pathname PATH in the filesystem + DATA. Return the file record in RETDATA when it is non-zero. + Return the directory number in RETINODE when it is non-zero. */ +static grub_err_t +grub_hfs_find_dir (struct grub_hfs_data *data, const char *path, + grub_fshelp_node_t *found, + enum grub_fshelp_filetype exptype) +{ + struct grub_fshelp_node root = { + .data = data, + .inode = data->rootdir, + .fdrec = { + .frec = { + .type = GRUB_HFS_FILETYPE_DIR + } + } + }; + grub_err_t err; + + err = grub_fshelp_find_file_lookup (path, &root, found, lookup_file, NULL, exptype); + + if (&root == *found) + { + *found = grub_malloc (sizeof (root)); + if (!*found) + return grub_errno; + grub_memcpy (*found, &root, sizeof (root)); + } + return err; +} + +struct grub_hfs_dir_hook_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +static int +grub_hfs_dir_hook (struct grub_hfs_record *rec, void *hook_arg) +{ + struct grub_hfs_dir_hook_ctx *ctx = hook_arg; + struct grub_hfs_dirrec *drec = rec->data; + struct grub_hfs_filerec *frec = rec->data; + struct grub_hfs_catalog_key *ckey = rec->key; + char fname[sizeof (ckey->str) * MAX_UTF8_PER_MAC_ROMAN + 1]; + struct grub_dirhook_info info; + grub_size_t len; + + grub_memset (fname, 0, sizeof (fname)); + + grub_memset (&info, 0, sizeof (info)); + + len = ckey->strlen; + if (len > sizeof (ckey->str)) + len = sizeof (ckey->str); + macroman_to_utf8 (fname, ckey->str, len, 1); + + info.case_insensitive = 1; + + if (drec->type == GRUB_HFS_FILETYPE_DIR) + { + info.dir = 1; + info.mtimeset = 1; + info.inodeset = 1; + info.mtime = grub_be_to_cpu32 (drec->mtime) - 2082844800; + info.inode = grub_be_to_cpu32 (drec->dirid); + return ctx->hook (fname, &info, ctx->hook_data); + } + if (frec->type == GRUB_HFS_FILETYPE_FILE) + { + info.dir = 0; + info.mtimeset = 1; + info.inodeset = 1; + info.mtime = grub_be_to_cpu32 (frec->mtime) - 2082844800; + info.inode = grub_be_to_cpu32 (frec->fileid); + return ctx->hook (fname, &info, ctx->hook_data); + } + + return 0; +} + + +static grub_err_t +grub_hfs_dir (grub_device_t device, const char *path, grub_fs_dir_hook_t hook, + void *hook_data) +{ + struct grub_hfs_data *data; + struct grub_hfs_dir_hook_ctx ctx = + { + .hook = hook, + .hook_data = hook_data + }; + grub_fshelp_node_t found = NULL; + + grub_dl_ref (my_mod); + + data = grub_hfs_mount (device->disk); + if (!data) + goto fail; + + /* First the directory ID for the directory. */ + if (grub_hfs_find_dir (data, path, &found, GRUB_FSHELP_DIR)) + goto fail; + + grub_hfs_iterate_dir (data, data->cat_root, found->inode, grub_hfs_dir_hook, &ctx); + + fail: + grub_free (found); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_hfs_open (struct grub_file *file, const char *name) +{ + struct grub_hfs_data *data; + grub_fshelp_node_t found = NULL; + + grub_dl_ref (my_mod); + + data = grub_hfs_mount (file->device->disk); + + if (!data) + { + grub_dl_unref (my_mod); + return grub_errno; + } + + if (grub_hfs_find_dir (data, name, &found, GRUB_FSHELP_REG)) + { + grub_free (data); + grub_free (found); + grub_dl_unref (my_mod); + return grub_errno; + } + + grub_memcpy (data->extents, found->fdrec.frec.extents, sizeof (grub_hfs_datarecord_t)); + file->size = grub_be_to_cpu32 (found->fdrec.frec.size); + data->size = grub_be_to_cpu32 (found->fdrec.frec.size); + data->fileid = grub_be_to_cpu32 (found->fdrec.frec.fileid); + file->offset = 0; + + file->data = data; + + grub_free (found); + + return 0; +} + +static grub_ssize_t +grub_hfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_hfs_data *data = + (struct grub_hfs_data *) file->data; + + return grub_hfs_read_file (data, file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + + +static grub_err_t +grub_hfs_close (grub_file_t file) +{ + grub_free (file->data); + + grub_dl_unref (my_mod); + + return 0; +} + + +static grub_err_t +grub_hfs_label (grub_device_t device, char **label) +{ + struct grub_hfs_data *data; + + data = grub_hfs_mount (device->disk); + + if (data) + { + grub_size_t len = data->sblock.volname[0]; + if (len > sizeof (data->sblock.volname) - 1) + len = sizeof (data->sblock.volname) - 1; + *label = grub_malloc (len * MAX_UTF8_PER_MAC_ROMAN + 1); + if (*label) + macroman_to_utf8 (*label, data->sblock.volname + 1, + len + 1, 0); + } + else + *label = 0; + + grub_free (data); + return grub_errno; +} + +static grub_err_t +grub_hfs_mtime (grub_device_t device, grub_int32_t *tm) +{ + struct grub_hfs_data *data; + + data = grub_hfs_mount (device->disk); + + if (data) + *tm = grub_be_to_cpu32 (data->sblock.mtime) - 2082844800; + else + *tm = 0; + + grub_free (data); + return grub_errno; +} + +static grub_err_t +grub_hfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_hfs_data *data; + + grub_dl_ref (my_mod); + + data = grub_hfs_mount (device->disk); + if (data && data->sblock.num_serial != 0) + { + *uuid = grub_xasprintf ("%016llx", + (unsigned long long) + grub_be_to_cpu64 (data->sblock.num_serial)); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + + +static struct grub_fs grub_hfs_fs = + { + .name = "hfs", + .dir = grub_hfs_dir, + .open = grub_hfs_open, + .read = grub_hfs_read, + .close = grub_hfs_close, + .label = grub_hfs_label, + .uuid = grub_hfs_uuid, + .mtime = grub_hfs_mtime, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(hfs) +{ + grub_fs_register (&grub_hfs_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(hfs) +{ + grub_fs_unregister (&grub_hfs_fs); +} diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c new file mode 100644 index 000000000..21159e858 --- /dev/null +++ b/grub-core/fs/hfsplus.c @@ -0,0 +1,1104 @@ +/* hfsplus.c - HFS+ Filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* HFS+ is documented at http://developer.apple.com/technotes/tn/tn1150.html */ + +#define grub_fshelp_node grub_hfsplus_file +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* The type of node. */ +enum grub_hfsplus_btnode_type + { + GRUB_HFSPLUS_BTNODE_TYPE_LEAF = -1, + GRUB_HFSPLUS_BTNODE_TYPE_INDEX = 0, + GRUB_HFSPLUS_BTNODE_TYPE_HEADER = 1, + GRUB_HFSPLUS_BTNODE_TYPE_MAP = 2, + }; + +/* The header of a HFS+ B+ Tree. */ +struct grub_hfsplus_btheader +{ + grub_uint16_t depth; + grub_uint32_t root; + grub_uint32_t leaf_records; + grub_uint32_t first_leaf_node; + grub_uint32_t last_leaf_node; + grub_uint16_t nodesize; + grub_uint16_t keysize; + grub_uint32_t total_nodes; + grub_uint32_t free_nodes; + grub_uint16_t reserved1; + grub_uint32_t clump_size; /* ignored */ + grub_uint8_t btree_type; + grub_uint8_t key_compare; + grub_uint32_t attributes; +} GRUB_PACKED; + +struct grub_hfsplus_catfile +{ + grub_uint16_t type; + grub_uint16_t flags; + grub_uint32_t parentid; /* Thread only. */ + grub_uint32_t fileid; + grub_uint8_t unused1[4]; + grub_uint32_t mtime; + grub_uint8_t unused2[22]; + grub_uint16_t mode; + grub_uint8_t unused3[44]; + struct grub_hfsplus_forkdata data; + struct grub_hfsplus_forkdata resource; +} GRUB_PACKED; + +/* Filetype information as used in inodes. */ +#define GRUB_HFSPLUS_FILEMODE_MASK 0170000 +#define GRUB_HFSPLUS_FILEMODE_REG 0100000 +#define GRUB_HFSPLUS_FILEMODE_DIRECTORY 0040000 +#define GRUB_HFSPLUS_FILEMODE_SYMLINK 0120000 + +/* Some pre-defined file IDs. */ +enum + { + GRUB_HFSPLUS_FILEID_ROOTDIR = 2, + GRUB_HFSPLUS_FILEID_OVERFLOW = 3, + GRUB_HFSPLUS_FILEID_CATALOG = 4, + GRUB_HFSPLUS_FILEID_ATTR = 8 + }; + +enum grub_hfsplus_filetype + { + GRUB_HFSPLUS_FILETYPE_DIR = 1, + GRUB_HFSPLUS_FILETYPE_REG = 2, + GRUB_HFSPLUS_FILETYPE_DIR_THREAD = 3, + GRUB_HFSPLUS_FILETYPE_REG_THREAD = 4 + }; + +#define GRUB_HFSPLUSX_BINARYCOMPARE 0xBC +#define GRUB_HFSPLUSX_CASEFOLDING 0xCF + +static grub_dl_t my_mod; + + + +grub_err_t (*grub_hfsplus_open_compressed) (struct grub_fshelp_node *node); +grub_ssize_t (*grub_hfsplus_read_compressed) (struct grub_hfsplus_file *node, + grub_off_t pos, + grub_size_t len, + char *buf); + +/* Find the extent that points to FILEBLOCK. If it is not in one of + the 8 extents described by EXTENT, return -1. In that case set + FILEBLOCK to the next block. */ +static grub_disk_addr_t +grub_hfsplus_find_block (struct grub_hfsplus_extent *extent, + grub_disk_addr_t *fileblock) +{ + int i; + grub_disk_addr_t blksleft = *fileblock; + + /* First lookup the file in the given extents. */ + for (i = 0; i < 8; i++) + { + if (blksleft < grub_be_to_cpu32 (extent[i].count)) + return grub_be_to_cpu32 (extent[i].start) + blksleft; + blksleft -= grub_be_to_cpu32 (extent[i].count); + } + + *fileblock = blksleft; + return 0xffffffffffffffffULL; +} + +static int grub_hfsplus_cmp_extkey (struct grub_hfsplus_key *keya, + struct grub_hfsplus_key_internal *keyb); + +/* Search for the block FILEBLOCK inside the file NODE. Return the + blocknumber of this block on disk. */ +static grub_disk_addr_t +grub_hfsplus_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) +{ + struct grub_hfsplus_btnode *nnode = 0; + grub_disk_addr_t blksleft = fileblock; + struct grub_hfsplus_extent *extents = node->compressed + ? &node->resource_extents[0] : &node->extents[0]; + + while (1) + { + struct grub_hfsplus_extkey *key; + struct grub_hfsplus_key_internal extoverflow; + grub_disk_addr_t blk; + grub_off_t ptr; + + /* Try to find this block in the current set of extents. */ + blk = grub_hfsplus_find_block (extents, &blksleft); + + /* The previous iteration of this loop allocated memory. The + code above used this memory, it can be freed now. */ + grub_free (nnode); + nnode = 0; + + if (blk != 0xffffffffffffffffULL) + return blk; + + /* For the extent overflow file, extra extents can't be found in + the extent overflow file. If this happens, you found a + bug... */ + if (node->fileid == GRUB_HFSPLUS_FILEID_OVERFLOW) + { + grub_error (GRUB_ERR_READ_ERROR, + "extra extents found in an extend overflow file"); + break; + } + + /* Set up the key to look for in the extent overflow file. */ + extoverflow.extkey.fileid = node->fileid; + extoverflow.extkey.type = 0; + extoverflow.extkey.start = fileblock - blksleft; + extoverflow.extkey.type = node->compressed ? 0xff : 0; + if (grub_hfsplus_btree_search (&node->data->extoverflow_tree, + &extoverflow, + grub_hfsplus_cmp_extkey, &nnode, &ptr) + || !nnode) + { + grub_error (GRUB_ERR_READ_ERROR, + "no block found for the file id 0x%x and the block offset 0x%x", + node->fileid, fileblock); + break; + } + + /* The extent overflow file has 8 extents right after the key. */ + key = (struct grub_hfsplus_extkey *) + grub_hfsplus_btree_recptr (&node->data->extoverflow_tree, nnode, ptr); + extents = (struct grub_hfsplus_extent *) (key + 1); + + /* The block wasn't found. Perhaps the next iteration will find + it. The last block we found is stored in BLKSLEFT now. */ + } + + grub_free (nnode); + + /* Too bad, you lose. */ + return -1; +} + + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +grub_ssize_t +grub_hfsplus_read_file (grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + return grub_fshelp_read_file (node->data->disk, node, + read_hook, read_hook_data, + pos, len, buf, grub_hfsplus_read_block, + node->size, + node->data->log2blksize - GRUB_DISK_SECTOR_BITS, + node->data->embedded_offset); +} + +static struct grub_hfsplus_data * +grub_hfsplus_mount (grub_disk_t disk) +{ + struct grub_hfsplus_data *data; + struct grub_hfsplus_btheader header; + struct grub_hfsplus_btnode node; + grub_uint16_t magic; + union { + struct grub_hfs_sblock hfs; + struct grub_hfsplus_volheader hfsplus; + } volheader; + + data = grub_malloc (sizeof (*data)); + if (!data) + return 0; + + data->disk = disk; + + /* Read the bootblock. */ + grub_disk_read (disk, GRUB_HFSPLUS_SBLOCK, 0, sizeof (volheader), + &volheader); + if (grub_errno) + goto fail; + + data->embedded_offset = 0; + if (grub_be_to_cpu16 (volheader.hfs.magic) == GRUB_HFS_MAGIC) + { + grub_disk_addr_t extent_start; + grub_disk_addr_t ablk_size; + grub_disk_addr_t ablk_start; + + /* See if there's an embedded HFS+ filesystem. */ + if (grub_be_to_cpu16 (volheader.hfs.embed_sig) != GRUB_HFSPLUS_MAGIC) + { + grub_error (GRUB_ERR_BAD_FS, "not a HFS+ filesystem"); + goto fail; + } + + /* Calculate the offset needed to translate HFS+ sector numbers. */ + extent_start = grub_be_to_cpu16 (volheader.hfs.embed_extent.first_block); + ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz); + ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block); + data->embedded_offset = (ablk_start + + extent_start + * (ablk_size >> GRUB_DISK_SECTOR_BITS)); + + grub_disk_read (disk, data->embedded_offset + GRUB_HFSPLUS_SBLOCK, 0, + sizeof (volheader), &volheader); + if (grub_errno) + goto fail; + } + + /* Make sure this is an HFS+ filesystem. XXX: Do we really support + HFX? */ + magic = grub_be_to_cpu16 (volheader.hfsplus.magic); + if (((magic != GRUB_HFSPLUS_MAGIC) && (magic != GRUB_HFSPLUSX_MAGIC)) + || volheader.hfsplus.blksize == 0 + || ((volheader.hfsplus.blksize & (volheader.hfsplus.blksize - 1)) != 0) + || grub_be_to_cpu32 (volheader.hfsplus.blksize) < GRUB_DISK_SECTOR_SIZE) + { + grub_error (GRUB_ERR_BAD_FS, "not a HFS+ filesystem"); + goto fail; + } + + grub_memcpy (&data->volheader, &volheader.hfsplus, + sizeof (volheader.hfsplus)); + + for (data->log2blksize = 0; + (1U << data->log2blksize) < grub_be_to_cpu32 (data->volheader.blksize); + data->log2blksize++); + + /* Make a new node for the catalog tree. */ + data->catalog_tree.file.data = data; + data->catalog_tree.file.fileid = GRUB_HFSPLUS_FILEID_CATALOG; + data->catalog_tree.file.compressed = 0; + grub_memcpy (&data->catalog_tree.file.extents, + data->volheader.catalog_file.extents, + sizeof data->volheader.catalog_file.extents); + data->catalog_tree.file.size = + grub_be_to_cpu64 (data->volheader.catalog_file.size); + + data->attr_tree.file.data = data; + data->attr_tree.file.fileid = GRUB_HFSPLUS_FILEID_ATTR; + grub_memcpy (&data->attr_tree.file.extents, + data->volheader.attr_file.extents, + sizeof data->volheader.attr_file.extents); + + data->attr_tree.file.size = + grub_be_to_cpu64 (data->volheader.attr_file.size); + data->attr_tree.file.compressed = 0; + + /* Make a new node for the extent overflow file. */ + data->extoverflow_tree.file.data = data; + data->extoverflow_tree.file.fileid = GRUB_HFSPLUS_FILEID_OVERFLOW; + data->extoverflow_tree.file.compressed = 0; + grub_memcpy (&data->extoverflow_tree.file.extents, + data->volheader.extents_file.extents, + sizeof data->volheader.catalog_file.extents); + + data->extoverflow_tree.file.size = + grub_be_to_cpu64 (data->volheader.extents_file.size); + + /* Read the essential information about the trees. */ + if (grub_hfsplus_read_file (&data->catalog_tree.file, 0, 0, + sizeof (struct grub_hfsplus_btnode), + sizeof (header), (char *) &header) <= 0) + goto fail; + + data->catalog_tree.root = grub_be_to_cpu32 (header.root); + data->catalog_tree.nodesize = grub_be_to_cpu16 (header.nodesize); + data->case_sensitive = ((magic == GRUB_HFSPLUSX_MAGIC) && + (header.key_compare == GRUB_HFSPLUSX_BINARYCOMPARE)); + + if (data->catalog_tree.nodesize < 2) + goto fail; + + if (grub_hfsplus_read_file (&data->extoverflow_tree.file, 0, 0, + sizeof (struct grub_hfsplus_btnode), + sizeof (header), (char *) &header) <= 0) + goto fail; + + data->extoverflow_tree.root = grub_be_to_cpu32 (header.root); + + if (grub_hfsplus_read_file (&data->extoverflow_tree.file, 0, 0, 0, + sizeof (node), (char *) &node) <= 0) + goto fail; + + data->extoverflow_tree.root = grub_be_to_cpu32 (header.root); + data->extoverflow_tree.nodesize = grub_be_to_cpu16 (header.nodesize); + + if (data->extoverflow_tree.nodesize < 2) + goto fail; + + if (grub_hfsplus_read_file (&data->attr_tree.file, 0, 0, + sizeof (struct grub_hfsplus_btnode), + sizeof (header), (char *) &header) <= 0) + { + grub_errno = 0; + data->attr_tree.root = 0; + data->attr_tree.nodesize = 0; + } + else + { + data->attr_tree.root = grub_be_to_cpu32 (header.root); + data->attr_tree.nodesize = grub_be_to_cpu16 (header.nodesize); + } + + data->dirroot.data = data; + data->dirroot.fileid = GRUB_HFSPLUS_FILEID_ROOTDIR; + + return data; + + fail: + + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not a HFS+ filesystem"); + + grub_free (data); + return 0; +} + +/* Compare the on disk catalog key KEYA with the catalog key we are + looking for (KEYB). */ +static int +grub_hfsplus_cmp_catkey (struct grub_hfsplus_key *keya, + struct grub_hfsplus_key_internal *keyb) +{ + struct grub_hfsplus_catkey *catkey_a = &keya->catkey; + struct grub_hfsplus_catkey_internal *catkey_b = &keyb->catkey; + int diff; + grub_size_t len; + + /* Safe unsigned comparison */ + grub_uint32_t aparent = grub_be_to_cpu32 (catkey_a->parent); + if (aparent > catkey_b->parent) + return 1; + if (aparent < catkey_b->parent) + return -1; + + len = grub_be_to_cpu16 (catkey_a->namelen); + if (len > catkey_b->namelen) + len = catkey_b->namelen; + /* Since it's big-endian memcmp gives the same result as manually comparing + uint16_t but may be faster. */ + diff = grub_memcmp (catkey_a->name, catkey_b->name, + len * sizeof (catkey_a->name[0])); + if (diff == 0) + diff = grub_be_to_cpu16 (catkey_a->namelen) - catkey_b->namelen; + + return diff; +} + +/* Compare the on disk catalog key KEYA with the catalog key we are + looking for (KEYB). */ +static int +grub_hfsplus_cmp_catkey_id (struct grub_hfsplus_key *keya, + struct grub_hfsplus_key_internal *keyb) +{ + struct grub_hfsplus_catkey *catkey_a = &keya->catkey; + struct grub_hfsplus_catkey_internal *catkey_b = &keyb->catkey; + + /* Safe unsigned comparison */ + grub_uint32_t aparent = grub_be_to_cpu32 (catkey_a->parent); + if (aparent > catkey_b->parent) + return 1; + if (aparent < catkey_b->parent) + return -1; + + return 0; +} + +/* Compare the on disk extent overflow key KEYA with the extent + overflow key we are looking for (KEYB). */ +static int +grub_hfsplus_cmp_extkey (struct grub_hfsplus_key *keya, + struct grub_hfsplus_key_internal *keyb) +{ + struct grub_hfsplus_extkey *extkey_a = &keya->extkey; + struct grub_hfsplus_extkey_internal *extkey_b = &keyb->extkey; + grub_uint32_t akey; + + /* Safe unsigned comparison */ + akey = grub_be_to_cpu32 (extkey_a->fileid); + if (akey > extkey_b->fileid) + return 1; + if (akey < extkey_b->fileid) + return -1; + + if (extkey_a->type > extkey_b->type) + return 1; + if (extkey_a->type < extkey_b->type) + return -1; + + if (extkey_a->type > extkey_b->type) + return +1; + + if (extkey_a->type < extkey_b->type) + return -1; + + akey = grub_be_to_cpu32 (extkey_a->start); + if (akey > extkey_b->start) + return 1; + if (akey < extkey_b->start) + return -1; + return 0; +} + +static char * +grub_hfsplus_read_symlink (grub_fshelp_node_t node) +{ + char *symlink; + grub_ssize_t numread; + + symlink = grub_malloc (node->size + 1); + if (!symlink) + return 0; + + numread = grub_hfsplus_read_file (node, 0, 0, 0, node->size, symlink); + if (numread != (grub_ssize_t) node->size) + { + grub_free (symlink); + return 0; + } + symlink[node->size] = '\0'; + + return symlink; +} + +static int +grub_hfsplus_btree_iterate_node (struct grub_hfsplus_btree *btree, + struct grub_hfsplus_btnode *first_node, + grub_disk_addr_t first_rec, + int (*hook) (void *record, void *hook_arg), + void *hook_arg) +{ + grub_disk_addr_t rec; + grub_uint64_t saved_node = -1; + grub_uint64_t node_count = 0; + + for (;;) + { + char *cnode = (char *) first_node; + + /* Iterate over all records in this node. */ + for (rec = first_rec; rec < grub_be_to_cpu16 (first_node->count); rec++) + { + if (hook (grub_hfsplus_btree_recptr (btree, first_node, rec), hook_arg)) + return 1; + } + + if (! first_node->next) + break; + + if (node_count && first_node->next == saved_node) + { + grub_error (GRUB_ERR_BAD_FS, "HFS+ btree loop"); + return 0; + } + if (!(node_count & (node_count - 1))) + saved_node = first_node->next; + node_count++; + + if (grub_hfsplus_read_file (&btree->file, 0, 0, + (((grub_disk_addr_t) + grub_be_to_cpu32 (first_node->next)) + * btree->nodesize), + btree->nodesize, cnode) <= 0) + return 1; + + /* Don't skip any record in the next iteration. */ + first_rec = 0; + } + + return 0; +} + +/* Lookup the node described by KEY in the B+ Tree BTREE. Compare + keys using the function COMPARE_KEYS. When a match is found, + return the node in MATCHNODE and a pointer to the data in this node + in KEYOFFSET. MATCHNODE should be freed by the caller. */ +grub_err_t +grub_hfsplus_btree_search (struct grub_hfsplus_btree *btree, + struct grub_hfsplus_key_internal *key, + int (*compare_keys) (struct grub_hfsplus_key *keya, + struct grub_hfsplus_key_internal *keyb), + struct grub_hfsplus_btnode **matchnode, + grub_off_t *keyoffset) +{ + grub_uint64_t currnode; + char *node; + struct grub_hfsplus_btnode *nodedesc; + grub_disk_addr_t rec; + grub_uint64_t save_node; + grub_uint64_t node_count = 0; + + if (!btree->nodesize) + { + *matchnode = 0; + return 0; + } + + node = grub_malloc (btree->nodesize); + if (! node) + return grub_errno; + + currnode = btree->root; + save_node = currnode - 1; + while (1) + { + int match = 0; + + if (save_node == currnode) + { + grub_free (node); + return grub_error (GRUB_ERR_BAD_FS, "HFS+ btree loop"); + } + if (!(node_count & (node_count - 1))) + save_node = currnode; + node_count++; + + /* Read a node. */ + if (grub_hfsplus_read_file (&btree->file, 0, 0, + (grub_disk_addr_t) currnode + * (grub_disk_addr_t) btree->nodesize, + btree->nodesize, (char *) node) <= 0) + { + grub_free (node); + return grub_error (GRUB_ERR_BAD_FS, "couldn't read i-node"); + } + + nodedesc = (struct grub_hfsplus_btnode *) node; + + /* Find the record in this tree. */ + for (rec = 0; rec < grub_be_to_cpu16 (nodedesc->count); rec++) + { + struct grub_hfsplus_key *currkey; + currkey = grub_hfsplus_btree_recptr (btree, nodedesc, rec); + + /* The action that has to be taken depend on the type of + record. */ + if (nodedesc->type == GRUB_HFSPLUS_BTNODE_TYPE_LEAF + && compare_keys (currkey, key) == 0) + { + /* An exact match was found! */ + + *matchnode = nodedesc; + *keyoffset = rec; + + return 0; + } + else if (nodedesc->type == GRUB_HFSPLUS_BTNODE_TYPE_INDEX) + { + void *pointer; + + /* The place where the key could have been found didn't + contain the key. This means that the previous match + is the one that should be followed. */ + if (compare_keys (currkey, key) > 0) + break; + + /* Mark the last key which is lower or equal to the key + that we are looking for. The last match that is + found will be used to locate the child which can + contain the record. */ + pointer = ((char *) currkey + + grub_be_to_cpu16 (currkey->keylen) + + 2); + currnode = grub_be_to_cpu32 (grub_get_unaligned32 (pointer)); + match = 1; + } + } + + /* No match is found, no record with this key exists in the + tree. */ + if (! match) + { + *matchnode = 0; + grub_free (node); + return 0; + } + } +} + +struct list_nodes_ctx +{ + int ret; + grub_fshelp_node_t dir; + grub_fshelp_iterate_dir_hook_t hook; + void *hook_data; +}; + +static int +list_nodes (void *record, void *hook_arg) +{ + struct grub_hfsplus_catkey *catkey; + char *filename; + int i; + struct grub_fshelp_node *node; + struct grub_hfsplus_catfile *fileinfo; + enum grub_fshelp_filetype type = GRUB_FSHELP_UNKNOWN; + struct list_nodes_ctx *ctx = hook_arg; + + catkey = (struct grub_hfsplus_catkey *) record; + + fileinfo = + (struct grub_hfsplus_catfile *) ((char *) record + + grub_be_to_cpu16 (catkey->keylen) + + 2 + (grub_be_to_cpu16(catkey->keylen) + % 2)); + + /* Stop iterating when the last directory entry is found. */ + if (grub_be_to_cpu32 (catkey->parent) != ctx->dir->fileid) + return 1; + + /* Determine the type of the node that is found. */ + switch (fileinfo->type) + { + case grub_cpu_to_be16_compile_time (GRUB_HFSPLUS_FILETYPE_REG): + { + int mode = (grub_be_to_cpu16 (fileinfo->mode) + & GRUB_HFSPLUS_FILEMODE_MASK); + + if (mode == GRUB_HFSPLUS_FILEMODE_REG) + type = GRUB_FSHELP_REG; + else if (mode == GRUB_HFSPLUS_FILEMODE_SYMLINK) + type = GRUB_FSHELP_SYMLINK; + else + type = GRUB_FSHELP_UNKNOWN; + break; + } + case grub_cpu_to_be16_compile_time (GRUB_HFSPLUS_FILETYPE_DIR): + type = GRUB_FSHELP_DIR; + break; + case grub_cpu_to_be16_compile_time (GRUB_HFSPLUS_FILETYPE_DIR_THREAD): + if (ctx->dir->fileid == 2) + return 0; + node = grub_malloc (sizeof (*node)); + if (!node) + return 1; + node->data = ctx->dir->data; + node->mtime = 0; + node->size = 0; + node->fileid = grub_be_to_cpu32 (fileinfo->parentid); + + ctx->ret = ctx->hook ("..", GRUB_FSHELP_DIR, node, ctx->hook_data); + return ctx->ret; + } + + if (type == GRUB_FSHELP_UNKNOWN) + return 0; + + filename = grub_malloc (grub_be_to_cpu16 (catkey->namelen) + * GRUB_MAX_UTF8_PER_UTF16 + 1); + if (! filename) + return 0; + + /* Make sure the byte order of the UTF16 string is correct. */ + for (i = 0; i < grub_be_to_cpu16 (catkey->namelen); i++) + { + catkey->name[i] = grub_be_to_cpu16 (catkey->name[i]); + + if (catkey->name[i] == '/') + catkey->name[i] = ':'; + + /* If the name is obviously invalid, skip this node. */ + if (catkey->name[i] == 0) + { + grub_free (filename); + return 0; + } + } + + *grub_utf16_to_utf8 ((grub_uint8_t *) filename, catkey->name, + grub_be_to_cpu16 (catkey->namelen)) = '\0'; + + /* Restore the byte order to what it was previously. */ + for (i = 0; i < grub_be_to_cpu16 (catkey->namelen); i++) + { + if (catkey->name[i] == ':') + catkey->name[i] = '/'; + catkey->name[i] = grub_be_to_cpu16 (catkey->name[i]); + } + + /* hfs+ is case insensitive. */ + if (! ctx->dir->data->case_sensitive) + type |= GRUB_FSHELP_CASE_INSENSITIVE; + + /* A valid node is found; setup the node and call the + callback function. */ + node = grub_malloc (sizeof (*node)); + if (!node) + { + grub_free (filename); + return 1; + } + node->data = ctx->dir->data; + node->compressed = 0; + node->cbuf = 0; + node->compress_index = 0; + + grub_memcpy (node->extents, fileinfo->data.extents, + sizeof (node->extents)); + grub_memcpy (node->resource_extents, fileinfo->resource.extents, + sizeof (node->resource_extents)); + node->mtime = grub_be_to_cpu32 (fileinfo->mtime) - 2082844800; + node->size = grub_be_to_cpu64 (fileinfo->data.size); + node->resource_size = grub_be_to_cpu64 (fileinfo->resource.size); + node->fileid = grub_be_to_cpu32 (fileinfo->fileid); + + ctx->ret = ctx->hook (filename, type, node, ctx->hook_data); + + grub_free (filename); + + return ctx->ret; +} + +static int +grub_hfsplus_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + struct list_nodes_ctx ctx = + { + .ret = 0, + .dir = dir, + .hook = hook, + .hook_data = hook_data + }; + + struct grub_hfsplus_key_internal intern; + struct grub_hfsplus_btnode *node = NULL; + grub_disk_addr_t ptr = 0; + + { + struct grub_fshelp_node *fsnode; + fsnode = grub_malloc (sizeof (*fsnode)); + if (!fsnode) + return 1; + *fsnode = *dir; + if (hook (".", GRUB_FSHELP_DIR, fsnode, hook_data)) + return 1; + } + + /* Create a key that points to the first entry in the directory. */ + intern.catkey.parent = dir->fileid; + intern.catkey.name = 0; + intern.catkey.namelen = 0; + + /* First lookup the first entry. */ + if (grub_hfsplus_btree_search (&dir->data->catalog_tree, &intern, + grub_hfsplus_cmp_catkey, &node, &ptr) + || !node) + return 0; + + /* Iterate over all entries in this directory. */ + grub_hfsplus_btree_iterate_node (&dir->data->catalog_tree, node, ptr, + list_nodes, &ctx); + + grub_free (node); + + return ctx.ret; +} + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_hfsplus_open (struct grub_file *file, const char *name) +{ + struct grub_hfsplus_data *data; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_hfsplus_mount (file->device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (name, &data->dirroot, &fdiro, + grub_hfsplus_iterate_dir, + grub_hfsplus_read_symlink, GRUB_FSHELP_REG); + if (grub_errno) + goto fail; + + if (grub_hfsplus_open_compressed) + { + grub_err_t err; + err = grub_hfsplus_open_compressed (fdiro); + if (err) + goto fail; + } + + file->size = fdiro->size; + data->opened_file = *fdiro; + grub_free (fdiro); + + file->data = data; + file->offset = 0; + + return 0; + + fail: + if (data && fdiro != &data->dirroot) + grub_free (fdiro); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +static grub_err_t +grub_hfsplus_close (grub_file_t file) +{ + struct grub_hfsplus_data *data = + (struct grub_hfsplus_data *) file->data; + + grub_free (data->opened_file.cbuf); + grub_free (data->opened_file.compress_index); + + grub_free (data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + +/* Read LEN bytes data from FILE into BUF. */ +static grub_ssize_t +grub_hfsplus_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_hfsplus_data *data = + (struct grub_hfsplus_data *) file->data; + + data->opened_file.file = file; + + if (grub_hfsplus_read_compressed && data->opened_file.compressed) + return grub_hfsplus_read_compressed (&data->opened_file, + file->offset, len, buf); + + return grub_hfsplus_read_file (&data->opened_file, + file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + +/* Context for grub_hfsplus_dir. */ +struct grub_hfsplus_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_hfsplus_dir. */ +static int +grub_hfsplus_dir_iter (const char *filename, + enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_hfsplus_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + info.mtimeset = 1; + info.mtime = node->mtime; + info.inodeset = 1; + info.inode = node->fileid; + info.case_insensitive = !! (filetype & GRUB_FSHELP_CASE_INSENSITIVE); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_hfsplus_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_hfsplus_dir_ctx ctx = { hook, hook_data }; + struct grub_hfsplus_data *data = 0; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_hfsplus_mount (device->disk); + if (!data) + goto fail; + + /* Find the directory that should be opened. */ + grub_fshelp_find_file (path, &data->dirroot, &fdiro, + grub_hfsplus_iterate_dir, + grub_hfsplus_read_symlink, GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + /* Iterate over all entries in this directory. */ + grub_hfsplus_iterate_dir (fdiro, grub_hfsplus_dir_iter, &ctx); + + fail: + if (data && fdiro != &data->dirroot) + grub_free (fdiro); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +static grub_err_t +grub_hfsplus_label (grub_device_t device, char **label) +{ + struct grub_hfsplus_data *data; + grub_disk_t disk = device->disk; + struct grub_hfsplus_catkey *catkey; + int i, label_len; + struct grub_hfsplus_key_internal intern; + struct grub_hfsplus_btnode *node = NULL; + grub_disk_addr_t ptr = 0; + + *label = 0; + + data = grub_hfsplus_mount (disk); + if (!data) + return grub_errno; + + /* Create a key that points to the label. */ + intern.catkey.parent = 1; + intern.catkey.name = 0; + intern.catkey.namelen = 0; + + /* First lookup the first entry. */ + if (grub_hfsplus_btree_search (&data->catalog_tree, &intern, + grub_hfsplus_cmp_catkey_id, &node, &ptr) + || !node) + { + grub_free (data); + return 0; + } + + catkey = (struct grub_hfsplus_catkey *) + grub_hfsplus_btree_recptr (&data->catalog_tree, node, ptr); + + label_len = grub_be_to_cpu16 (catkey->namelen); + for (i = 0; i < label_len; i++) + { + catkey->name[i] = grub_be_to_cpu16 (catkey->name[i]); + + /* If the name is obviously invalid, skip this node. */ + if (catkey->name[i] == 0) + return 0; + } + + *label = grub_malloc (label_len * GRUB_MAX_UTF8_PER_UTF16 + 1); + if (! *label) + return grub_errno; + + *grub_utf16_to_utf8 ((grub_uint8_t *) (*label), catkey->name, + label_len) = '\0'; + + grub_free (node); + grub_free (data); + + return GRUB_ERR_NONE; +} + +/* Get mtime. */ +static grub_err_t +grub_hfsplus_mtime (grub_device_t device, grub_int32_t *tm) +{ + struct grub_hfsplus_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_hfsplus_mount (disk); + if (!data) + *tm = 0; + else + *tm = grub_be_to_cpu32 (data->volheader.utime) - 2082844800; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; + +} + +static grub_err_t +grub_hfsplus_uuid (grub_device_t device, char **uuid) +{ + struct grub_hfsplus_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_hfsplus_mount (disk); + if (data) + { + *uuid = grub_xasprintf ("%016llx", + (unsigned long long) + grub_be_to_cpu64 (data->volheader.num_serial)); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + + +static struct grub_fs grub_hfsplus_fs = + { + .name = "hfsplus", + .dir = grub_hfsplus_dir, + .open = grub_hfsplus_open, + .read = grub_hfsplus_read, + .close = grub_hfsplus_close, + .label = grub_hfsplus_label, + .mtime = grub_hfsplus_mtime, + .uuid = grub_hfsplus_uuid, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(hfsplus) +{ + grub_fs_register (&grub_hfsplus_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(hfsplus) +{ + grub_fs_unregister (&grub_hfsplus_fs); +} diff --git a/grub-core/fs/hfspluscomp.c b/grub-core/fs/hfspluscomp.c new file mode 100644 index 000000000..d76f3f137 --- /dev/null +++ b/grub-core/fs/hfspluscomp.c @@ -0,0 +1,317 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* HFS+ is documented at http://developer.apple.com/technotes/tn/tn1150.html */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* big-endian. */ +struct grub_hfsplus_compress_header1 +{ + grub_uint32_t header_size; + grub_uint32_t end_descriptor_offset; + grub_uint32_t total_compressed_size_including_seek_blocks_and_header2; + grub_uint32_t value_0x32; + grub_uint8_t unused[0xf0]; +} GRUB_PACKED; + +/* big-endian. */ +struct grub_hfsplus_compress_header2 +{ + grub_uint32_t total_compressed_size_including_seek_blocks; +} GRUB_PACKED; + +/* little-endian. */ +struct grub_hfsplus_compress_header3 +{ + grub_uint32_t num_chunks; +} GRUB_PACKED; + +/* little-endian. */ +struct grub_hfsplus_compress_block_descriptor +{ + grub_uint32_t offset; + grub_uint32_t size; +}; + +struct grub_hfsplus_compress_end_descriptor +{ + grub_uint8_t always_the_same[50]; +} GRUB_PACKED; + +struct grub_hfsplus_attr_header +{ + grub_uint8_t unused[3]; + grub_uint8_t type; + grub_uint32_t unknown[1]; + grub_uint64_t size; +} GRUB_PACKED; + +struct grub_hfsplus_compress_attr +{ + grub_uint32_t magic; + grub_uint32_t type; + grub_uint32_t uncompressed_inline_size; + grub_uint32_t always_0; +} GRUB_PACKED; + +enum + { + HFSPLUS_COMPRESSION_INLINE = 3, + HFSPLUS_COMPRESSION_RESOURCE = 4 + }; + +static int +grub_hfsplus_cmp_attrkey (struct grub_hfsplus_key *keya, + struct grub_hfsplus_key_internal *keyb) +{ + struct grub_hfsplus_attrkey *attrkey_a = &keya->attrkey; + struct grub_hfsplus_attrkey_internal *attrkey_b = &keyb->attrkey; + grub_uint32_t aparent = grub_be_to_cpu32 (attrkey_a->cnid); + grub_size_t len; + int diff; + + if (aparent > attrkey_b->cnid) + return 1; + if (aparent < attrkey_b->cnid) + return -1; + + len = grub_be_to_cpu16 (attrkey_a->namelen); + if (len > attrkey_b->namelen) + len = attrkey_b->namelen; + /* Since it's big-endian memcmp gives the same result as manually comparing + uint16_t but may be faster. */ + diff = grub_memcmp (attrkey_a->name, attrkey_b->name, + len * sizeof (attrkey_a->name[0])); + if (diff == 0) + diff = grub_be_to_cpu16 (attrkey_a->namelen) - attrkey_b->namelen; + return diff; +} + +#define HFSPLUS_COMPRESS_BLOCK_SIZE 65536 + +static grub_ssize_t +hfsplus_read_compressed_real (struct grub_hfsplus_file *node, + grub_off_t pos, grub_size_t len, char *buf) +{ + char *tmp_buf = 0; + grub_size_t len0 = len; + + if (node->compressed == 1) + { + grub_memcpy (buf, node->cbuf + pos, len); + if (grub_file_progress_hook && node->file) + grub_file_progress_hook (0, 0, len, node->file); + return len; + } + + while (len) + { + grub_uint32_t block = pos / HFSPLUS_COMPRESS_BLOCK_SIZE; + grub_size_t curlen = HFSPLUS_COMPRESS_BLOCK_SIZE + - (pos % HFSPLUS_COMPRESS_BLOCK_SIZE); + + if (curlen > len) + curlen = len; + + if (node->cbuf_block != block) + { + grub_uint32_t sz = grub_le_to_cpu32 (node->compress_index[block].size); + grub_size_t ts; + if (!tmp_buf) + tmp_buf = grub_malloc (HFSPLUS_COMPRESS_BLOCK_SIZE); + if (!tmp_buf) + return -1; + if (grub_hfsplus_read_file (node, 0, 0, + grub_le_to_cpu32 (node->compress_index[block].start) + 0x104, + sz, tmp_buf) + != (grub_ssize_t) sz) + { + grub_free (tmp_buf); + return -1; + } + ts = HFSPLUS_COMPRESS_BLOCK_SIZE; + if (ts > node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE))) + ts = node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE)); + if (grub_zlib_decompress (tmp_buf, sz, 0, + node->cbuf, ts) != (grub_ssize_t) ts) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + + grub_free (tmp_buf); + return -1; + } + node->cbuf_block = block; + } + grub_memcpy (buf, node->cbuf + (pos % HFSPLUS_COMPRESS_BLOCK_SIZE), + curlen); + if (grub_file_progress_hook && node->file) + grub_file_progress_hook (0, 0, curlen, node->file); + buf += curlen; + pos += curlen; + len -= curlen; + } + grub_free (tmp_buf); + return len0; +} + +static grub_err_t +hfsplus_open_compressed_real (struct grub_hfsplus_file *node) +{ + grub_err_t err; + struct grub_hfsplus_btnode *attr_node; + grub_off_t attr_off; + struct grub_hfsplus_key_internal key; + struct grub_hfsplus_attr_header *attr_head; + struct grub_hfsplus_compress_attr *cmp_head; +#define c grub_cpu_to_be16_compile_time + const grub_uint16_t compress_attr_name[] = + { + c('c'), c('o'), c('m'), c('.'), c('a'), c('p'), c('p'), c('l'), c('e'), + c('.'), c('d'), c('e'), c('c'), c('m'), c('p'), c('f'), c('s') }; +#undef c + if (node->size) + return 0; + + key.attrkey.cnid = node->fileid; + key.attrkey.namelen = sizeof (compress_attr_name) / sizeof (compress_attr_name[0]); + key.attrkey.name = compress_attr_name; + + err = grub_hfsplus_btree_search (&node->data->attr_tree, &key, + grub_hfsplus_cmp_attrkey, + &attr_node, &attr_off); + if (err || !attr_node) + { + grub_errno = 0; + return 0; + } + + attr_head = (struct grub_hfsplus_attr_header *) + ((char *) grub_hfsplus_btree_recptr (&node->data->attr_tree, + attr_node, attr_off) + + sizeof (struct grub_hfsplus_attrkey) + sizeof (compress_attr_name)); + if (attr_head->type != 0x10 + || !(attr_head->size & grub_cpu_to_be64_compile_time(~0xfULL))) + { + grub_free (attr_node); + return 0; + } + cmp_head = (struct grub_hfsplus_compress_attr *) (attr_head + 1); + if (cmp_head->magic != grub_cpu_to_be32_compile_time (0x66706d63)) + { + grub_free (attr_node); + return 0; + } + node->size = grub_le_to_cpu32 (cmp_head->uncompressed_inline_size); + + if (cmp_head->type == grub_cpu_to_le32_compile_time (HFSPLUS_COMPRESSION_RESOURCE)) + { + grub_uint32_t index_size; + node->compressed = 2; + + if (grub_hfsplus_read_file (node, 0, 0, + 0x104, sizeof (index_size), + (char *) &index_size) + != 4) + { + node->compressed = 0; + grub_free (attr_node); + grub_errno = 0; + return 0; + } + node->compress_index_size = grub_le_to_cpu32 (index_size); + node->compress_index = grub_malloc (node->compress_index_size + * sizeof (node->compress_index[0])); + if (!node->compress_index) + { + node->compressed = 0; + grub_free (attr_node); + return grub_errno; + } + if (grub_hfsplus_read_file (node, 0, 0, + 0x104 + sizeof (index_size), + node->compress_index_size + * sizeof (node->compress_index[0]), + (char *) node->compress_index) + != (grub_ssize_t) (node->compress_index_size + * sizeof (node->compress_index[0]))) + { + node->compressed = 0; + grub_free (attr_node); + grub_free (node->compress_index); + grub_errno = 0; + return 0; + } + + node->cbuf_block = -1; + + node->cbuf = grub_malloc (HFSPLUS_COMPRESS_BLOCK_SIZE); + grub_free (attr_node); + if (!node->cbuf) + { + node->compressed = 0; + grub_free (node->compress_index); + return grub_errno; + } + return 0; + } + if (cmp_head->type != HFSPLUS_COMPRESSION_INLINE) + { + grub_free (attr_node); + return 0; + } + + node->cbuf = grub_malloc (node->size); + if (!node->cbuf) + return grub_errno; + + if (grub_zlib_decompress ((char *) (cmp_head + 1), + grub_cpu_to_be64 (attr_head->size) + - sizeof (*cmp_head), 0, + node->cbuf, node->size) + != (grub_ssize_t) node->size) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return grub_errno; + } + node->compressed = 1; + return 0; +} + +GRUB_MOD_INIT(hfspluscomp) +{ + grub_hfsplus_open_compressed = hfsplus_open_compressed_real; + grub_hfsplus_read_compressed = hfsplus_read_compressed_real; +} + +GRUB_MOD_FINI(hfspluscomp) +{ + grub_hfsplus_open_compressed = 0; + grub_hfsplus_read_compressed = 0; +} diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c new file mode 100644 index 000000000..c9c8374bf --- /dev/null +++ b/grub-core/fs/iso9660.c @@ -0,0 +1,1125 @@ +/* iso9660.c - iso9660 implementation with extensions: + SUSP, Rock Ridge. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_ISO9660_FSTYPE_DIR 0040000 +#define GRUB_ISO9660_FSTYPE_REG 0100000 +#define GRUB_ISO9660_FSTYPE_SYMLINK 0120000 +#define GRUB_ISO9660_FSTYPE_MASK 0170000 + +#define GRUB_ISO9660_LOG2_BLKSZ 2 +#define GRUB_ISO9660_BLKSZ 2048 + +#define GRUB_ISO9660_RR_DOT 2 +#define GRUB_ISO9660_RR_DOTDOT 4 + +#define GRUB_ISO9660_VOLDESC_BOOT 0 +#define GRUB_ISO9660_VOLDESC_PRIMARY 1 +#define GRUB_ISO9660_VOLDESC_SUPP 2 +#define GRUB_ISO9660_VOLDESC_PART 3 +#define GRUB_ISO9660_VOLDESC_END 255 + +/* The head of a volume descriptor. */ +struct grub_iso9660_voldesc +{ + grub_uint8_t type; + grub_uint8_t magic[5]; + grub_uint8_t version; +} GRUB_PACKED; + +struct grub_iso9660_date2 +{ + grub_uint8_t year; + grub_uint8_t month; + grub_uint8_t day; + grub_uint8_t hour; + grub_uint8_t minute; + grub_uint8_t second; + grub_uint8_t offset; +} GRUB_PACKED; + +/* A directory entry. */ +struct grub_iso9660_dir +{ + grub_uint8_t len; + grub_uint8_t ext_sectors; + grub_uint32_t first_sector; + grub_uint32_t first_sector_be; + grub_uint32_t size; + grub_uint32_t size_be; + struct grub_iso9660_date2 mtime; + grub_uint8_t flags; + grub_uint8_t unused2[6]; +#define MAX_NAMELEN 255 + grub_uint8_t namelen; +} GRUB_PACKED; + +struct grub_iso9660_date +{ + grub_uint8_t year[4]; + grub_uint8_t month[2]; + grub_uint8_t day[2]; + grub_uint8_t hour[2]; + grub_uint8_t minute[2]; + grub_uint8_t second[2]; + grub_uint8_t hundredth[2]; + grub_uint8_t offset; +} GRUB_PACKED; + +/* The primary volume descriptor. Only little endian is used. */ +struct grub_iso9660_primary_voldesc +{ + struct grub_iso9660_voldesc voldesc; + grub_uint8_t unused1[33]; + grub_uint8_t volname[32]; + grub_uint8_t unused2[16]; + grub_uint8_t escape[32]; + grub_uint8_t unused3[12]; + grub_uint32_t path_table_size; + grub_uint8_t unused4[4]; + grub_uint32_t path_table; + grub_uint8_t unused5[12]; + struct grub_iso9660_dir rootdir; + grub_uint8_t unused6[624]; + struct grub_iso9660_date created; + struct grub_iso9660_date modified; +} GRUB_PACKED; + +/* A single entry in the path table. */ +struct grub_iso9660_path +{ + grub_uint8_t len; + grub_uint8_t sectors; + grub_uint32_t first_sector; + grub_uint16_t parentdir; + grub_uint8_t name[0]; +} GRUB_PACKED; + +/* An entry in the System Usage area of the directory entry. */ +struct grub_iso9660_susp_entry +{ + grub_uint8_t sig[2]; + grub_uint8_t len; + grub_uint8_t version; + grub_uint8_t data[0]; +} GRUB_PACKED; + +/* The CE entry. This is used to describe the next block where data + can be found. */ +struct grub_iso9660_susp_ce +{ + struct grub_iso9660_susp_entry entry; + grub_uint32_t blk; + grub_uint32_t blk_be; + grub_uint32_t off; + grub_uint32_t off_be; + grub_uint32_t len; + grub_uint32_t len_be; +} GRUB_PACKED; + +struct grub_iso9660_data +{ + struct grub_iso9660_primary_voldesc voldesc; + grub_disk_t disk; + int rockridge; + int susp_skip; + int joliet; + struct grub_fshelp_node *node; +}; + +struct grub_fshelp_node +{ + struct grub_iso9660_data *data; + grub_size_t have_dirents, alloc_dirents; + int have_symlink; + struct grub_iso9660_dir dirents[8]; + char symlink[0]; +}; + +enum + { + FLAG_TYPE_PLAIN = 0, + FLAG_TYPE_DIR = 2, + FLAG_TYPE = 3, + FLAG_MORE_EXTENTS = 0x80 + }; + +static grub_dl_t my_mod; + + +static grub_err_t +iso9660_to_unixtime (const struct grub_iso9660_date *i, grub_int32_t *nix) +{ + struct grub_datetime datetime; + + if (! i->year[0] && ! i->year[1] + && ! i->year[2] && ! i->year[3] + && ! i->month[0] && ! i->month[1] + && ! i->day[0] && ! i->day[1] + && ! i->hour[0] && ! i->hour[1] + && ! i->minute[0] && ! i->minute[1] + && ! i->second[0] && ! i->second[1] + && ! i->hundredth[0] && ! i->hundredth[1]) + return grub_error (GRUB_ERR_BAD_NUMBER, "empty date"); + datetime.year = (i->year[0] - '0') * 1000 + (i->year[1] - '0') * 100 + + (i->year[2] - '0') * 10 + (i->year[3] - '0'); + datetime.month = (i->month[0] - '0') * 10 + (i->month[1] - '0'); + datetime.day = (i->day[0] - '0') * 10 + (i->day[1] - '0'); + datetime.hour = (i->hour[0] - '0') * 10 + (i->hour[1] - '0'); + datetime.minute = (i->minute[0] - '0') * 10 + (i->minute[1] - '0'); + datetime.second = (i->second[0] - '0') * 10 + (i->second[1] - '0'); + + if (!grub_datetime2unixtime (&datetime, nix)) + return grub_error (GRUB_ERR_BAD_NUMBER, "incorrect date"); + *nix -= i->offset * 60 * 15; + return GRUB_ERR_NONE; +} + +static int +iso9660_to_unixtime2 (const struct grub_iso9660_date2 *i, grub_int32_t *nix) +{ + struct grub_datetime datetime; + + datetime.year = i->year + 1900; + datetime.month = i->month; + datetime.day = i->day; + datetime.hour = i->hour; + datetime.minute = i->minute; + datetime.second = i->second; + + if (!grub_datetime2unixtime (&datetime, nix)) + return 0; + *nix -= i->offset * 60 * 15; + return 1; +} + +static grub_err_t +read_node (grub_fshelp_node_t node, grub_off_t off, grub_size_t len, char *buf) +{ + grub_size_t i = 0; + + while (len > 0) + { + grub_size_t toread; + grub_err_t err; + while (i < node->have_dirents + && off >= grub_le_to_cpu32 (node->dirents[i].size)) + { + off -= grub_le_to_cpu32 (node->dirents[i].size); + i++; + } + if (i == node->have_dirents) + return grub_error (GRUB_ERR_OUT_OF_RANGE, "read out of range"); + toread = grub_le_to_cpu32 (node->dirents[i].size); + if (toread > len) + toread = len; + err = grub_disk_read (node->data->disk, + ((grub_disk_addr_t) grub_le_to_cpu32 (node->dirents[i].first_sector)) << GRUB_ISO9660_LOG2_BLKSZ, + off, toread, buf); + if (err) + return err; + len -= toread; + off += toread; + buf += toread; + } + return GRUB_ERR_NONE; +} + +/* Iterate over the susp entries, starting with block SUA_BLOCK on the + offset SUA_POS with a size of SUA_SIZE bytes. Hook is called for + every entry. */ +static grub_err_t +grub_iso9660_susp_iterate (grub_fshelp_node_t node, grub_off_t off, + grub_ssize_t sua_size, + grub_err_t (*hook) + (struct grub_iso9660_susp_entry *entry, void *hook_arg), + void *hook_arg) +{ + char *sua; + struct grub_iso9660_susp_entry *entry; + grub_err_t err; + + if (sua_size <= 0) + return GRUB_ERR_NONE; + + sua = grub_malloc (sua_size); + if (!sua) + return grub_errno; + + /* Load a part of the System Usage Area. */ + err = read_node (node, off, sua_size, sua); + if (err) + return err; + + for (entry = (struct grub_iso9660_susp_entry *) sua; (char *) entry < (char *) sua + sua_size - 1 && entry->len > 0; + entry = (struct grub_iso9660_susp_entry *) + ((char *) entry + entry->len)) + { + /* The last entry. */ + if (grub_strncmp ((char *) entry->sig, "ST", 2) == 0) + break; + + /* Additional entries are stored elsewhere. */ + if (grub_strncmp ((char *) entry->sig, "CE", 2) == 0) + { + struct grub_iso9660_susp_ce *ce; + grub_disk_addr_t ce_block; + + ce = (struct grub_iso9660_susp_ce *) entry; + sua_size = grub_le_to_cpu32 (ce->len); + off = grub_le_to_cpu32 (ce->off); + ce_block = grub_le_to_cpu32 (ce->blk) << GRUB_ISO9660_LOG2_BLKSZ; + + grub_free (sua); + sua = grub_malloc (sua_size); + if (!sua) + return grub_errno; + + /* Load a part of the System Usage Area. */ + err = grub_disk_read (node->data->disk, ce_block, off, + sua_size, sua); + if (err) + return err; + + entry = (struct grub_iso9660_susp_entry *) sua; + } + + if (hook (entry, hook_arg)) + { + grub_free (sua); + return 0; + } + } + + grub_free (sua); + return 0; +} + +static char * +grub_iso9660_convert_string (grub_uint8_t *us, int len) +{ + char *p; + int i; + grub_uint16_t t[MAX_NAMELEN / 2 + 1]; + + p = grub_malloc (len * GRUB_MAX_UTF8_PER_UTF16 + 1); + if (! p) + return NULL; + + for (i=0; isig, "ER", 2) == 0) + { + data->rockridge = 1; + return 1; + } + return 0; +} + +static grub_err_t +set_rockridge (struct grub_iso9660_data *data) +{ + int sua_pos; + int sua_size; + char *sua; + struct grub_iso9660_dir rootdir; + struct grub_iso9660_susp_entry *entry; + + data->rockridge = 0; + + /* Read the system use area and test it to see if SUSP is + supported. */ + if (grub_disk_read (data->disk, + (grub_le_to_cpu32 (data->voldesc.rootdir.first_sector) + << GRUB_ISO9660_LOG2_BLKSZ), 0, + sizeof (rootdir), (char *) &rootdir)) + return grub_error (GRUB_ERR_BAD_FS, "not a ISO9660 filesystem"); + + sua_pos = (sizeof (rootdir) + rootdir.namelen + + (rootdir.namelen % 2) - 1); + sua_size = rootdir.len - sua_pos; + + if (!sua_size) + return GRUB_ERR_NONE; + + sua = grub_malloc (sua_size); + if (! sua) + return grub_errno; + + if (grub_disk_read (data->disk, + (grub_le_to_cpu32 (data->voldesc.rootdir.first_sector) + << GRUB_ISO9660_LOG2_BLKSZ), sua_pos, + sua_size, sua)) + { + grub_free (sua); + return grub_error (GRUB_ERR_BAD_FS, "not a ISO9660 filesystem"); + } + + entry = (struct grub_iso9660_susp_entry *) sua; + + /* Test if the SUSP protocol is used on this filesystem. */ + if (grub_strncmp ((char *) entry->sig, "SP", 2) == 0) + { + struct grub_fshelp_node rootnode; + + rootnode.data = data; + rootnode.alloc_dirents = ARRAY_SIZE (rootnode.dirents); + rootnode.have_dirents = 1; + rootnode.have_symlink = 0; + rootnode.dirents[0] = data->voldesc.rootdir; + + /* The 2nd data byte stored how many bytes are skipped every time + to get to the SUA (System Usage Area). */ + data->susp_skip = entry->data[2]; + entry = (struct grub_iso9660_susp_entry *) ((char *) entry + entry->len); + + /* Iterate over the entries in the SUA area to detect + extensions. */ + if (grub_iso9660_susp_iterate (&rootnode, + sua_pos, sua_size, susp_iterate_set_rockridge, + data)) + { + grub_free (sua); + return grub_errno; + } + } + grub_free (sua); + return GRUB_ERR_NONE; +} + +static struct grub_iso9660_data * +grub_iso9660_mount (grub_disk_t disk) +{ + struct grub_iso9660_data *data = 0; + struct grub_iso9660_primary_voldesc voldesc; + int block; + + data = grub_zalloc (sizeof (struct grub_iso9660_data)); + if (! data) + return 0; + + data->disk = disk; + + block = 16; + do + { + int copy_voldesc = 0; + + /* Read the superblock. */ + if (grub_disk_read (disk, block << GRUB_ISO9660_LOG2_BLKSZ, 0, + sizeof (struct grub_iso9660_primary_voldesc), + (char *) &voldesc)) + { + grub_error (GRUB_ERR_BAD_FS, "not a ISO9660 filesystem"); + goto fail; + } + + if (grub_strncmp ((char *) voldesc.voldesc.magic, "CD001", 5) != 0) + { + grub_error (GRUB_ERR_BAD_FS, "not a ISO9660 filesystem"); + goto fail; + } + + if (voldesc.voldesc.type == GRUB_ISO9660_VOLDESC_PRIMARY) + copy_voldesc = 1; + else if (!data->rockridge + && (voldesc.voldesc.type == GRUB_ISO9660_VOLDESC_SUPP) + && (voldesc.escape[0] == 0x25) && (voldesc.escape[1] == 0x2f) + && + ((voldesc.escape[2] == 0x40) || /* UCS-2 Level 1. */ + (voldesc.escape[2] == 0x43) || /* UCS-2 Level 2. */ + (voldesc.escape[2] == 0x45))) /* UCS-2 Level 3. */ + { + copy_voldesc = 1; + data->joliet = 1; + } + + if (copy_voldesc) + { + grub_memcpy((char *) &data->voldesc, (char *) &voldesc, + sizeof (struct grub_iso9660_primary_voldesc)); + if (set_rockridge (data)) + goto fail; + } + + block++; + } while (voldesc.voldesc.type != GRUB_ISO9660_VOLDESC_END); + + return data; + + fail: + grub_free (data); + return 0; +} + + +static char * +grub_iso9660_read_symlink (grub_fshelp_node_t node) +{ + return node->have_symlink + ? grub_strdup (node->symlink + + (node->have_dirents) * sizeof (node->dirents[0]) + - sizeof (node->dirents)) : grub_strdup (""); +} + +static grub_off_t +get_node_size (grub_fshelp_node_t node) +{ + grub_off_t ret = 0; + grub_size_t i; + + for (i = 0; i < node->have_dirents; i++) + ret += grub_le_to_cpu32 (node->dirents[i].size); + return ret; +} + +struct iterate_dir_ctx +{ + char *filename; + int filename_alloc; + enum grub_fshelp_filetype type; + char *symlink; + int was_continue; +}; + + /* Extend the symlink. */ +static void +add_part (struct iterate_dir_ctx *ctx, + const char *part, + int len2) +{ + int size = ctx->symlink ? grub_strlen (ctx->symlink) : 0; + + ctx->symlink = grub_realloc (ctx->symlink, size + len2 + 1); + if (! ctx->symlink) + return; + + grub_memcpy (ctx->symlink + size, part, len2); + ctx->symlink[size + len2] = 0; +} + +static grub_err_t +susp_iterate_dir (struct grub_iso9660_susp_entry *entry, + void *_ctx) +{ + struct iterate_dir_ctx *ctx = _ctx; + + /* The filename in the rock ridge entry. */ + if (grub_strncmp ("NM", (char *) entry->sig, 2) == 0) + { + /* The flags are stored at the data position 0, here the + filename type is stored. */ + /* FIXME: Fix this slightly improper cast. */ + if (entry->data[0] & GRUB_ISO9660_RR_DOT) + ctx->filename = (char *) "."; + else if (entry->data[0] & GRUB_ISO9660_RR_DOTDOT) + ctx->filename = (char *) ".."; + else if (entry->len >= 5) + { + grub_size_t off = 0, csize = 1; + char *old; + csize = entry->len - 5; + old = ctx->filename; + if (ctx->filename_alloc) + { + off = grub_strlen (ctx->filename); + ctx->filename = grub_realloc (ctx->filename, csize + off + 1); + } + else + { + off = 0; + ctx->filename = grub_zalloc (csize + 1); + } + if (!ctx->filename) + { + ctx->filename = old; + return grub_errno; + } + ctx->filename_alloc = 1; + grub_memcpy (ctx->filename + off, (char *) &entry->data[1], csize); + ctx->filename[off + csize] = '\0'; + } + } + /* The mode information (st_mode). */ + else if (grub_strncmp ((char *) entry->sig, "PX", 2) == 0) + { + /* At position 0 of the PX record the st_mode information is + stored (little-endian). */ + grub_uint32_t mode = ((entry->data[0] + (entry->data[1] << 8)) + & GRUB_ISO9660_FSTYPE_MASK); + + switch (mode) + { + case GRUB_ISO9660_FSTYPE_DIR: + ctx->type = GRUB_FSHELP_DIR; + break; + case GRUB_ISO9660_FSTYPE_REG: + ctx->type = GRUB_FSHELP_REG; + break; + case GRUB_ISO9660_FSTYPE_SYMLINK: + ctx->type = GRUB_FSHELP_SYMLINK; + break; + default: + ctx->type = GRUB_FSHELP_UNKNOWN; + } + } + else if (grub_strncmp ("SL", (char *) entry->sig, 2) == 0) + { + unsigned int pos = 1; + + /* The symlink is not stored as a POSIX symlink, translate it. */ + while (pos + sizeof (*entry) < entry->len) + { + /* The current position is the `Component Flag'. */ + switch (entry->data[pos] & 30) + { + case 0: + { + /* The data on pos + 2 is the actual data, pos + 1 + is the length. Both are part of the `Component + Record'. */ + if (ctx->symlink && !ctx->was_continue) + add_part (ctx, "/", 1); + add_part (ctx, (char *) &entry->data[pos + 2], + entry->data[pos + 1]); + ctx->was_continue = (entry->data[pos] & 1); + break; + } + + case 2: + add_part (ctx, "./", 2); + break; + + case 4: + add_part (ctx, "../", 3); + break; + + case 8: + add_part (ctx, "/", 1); + break; + } + /* In pos + 1 the length of the `Component Record' is + stored. */ + pos += entry->data[pos + 1] + 2; + } + + /* Check if `grub_realloc' failed. */ + if (grub_errno) + return grub_errno; + } + + return 0; +} + +static int +grub_iso9660_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + struct grub_iso9660_dir dirent; + grub_off_t offset = 0; + grub_off_t len; + struct iterate_dir_ctx ctx; + + len = get_node_size (dir); + + for (; offset < len; offset += dirent.len) + { + ctx.symlink = 0; + ctx.was_continue = 0; + + if (read_node (dir, offset, sizeof (dirent), (char *) &dirent)) + return 0; + + /* The end of the block, skip to the next one. */ + if (!dirent.len) + { + offset = (offset / GRUB_ISO9660_BLKSZ + 1) * GRUB_ISO9660_BLKSZ; + continue; + } + + { + char name[MAX_NAMELEN + 1]; + int nameoffset = offset + sizeof (dirent); + struct grub_fshelp_node *node; + int sua_off = (sizeof (dirent) + dirent.namelen + 1 + - (dirent.namelen % 2)); + int sua_size = dirent.len - sua_off; + + sua_off += offset + dir->data->susp_skip; + + ctx.filename = 0; + ctx.filename_alloc = 0; + ctx.type = GRUB_FSHELP_UNKNOWN; + + if (dir->data->rockridge + && grub_iso9660_susp_iterate (dir, sua_off, sua_size, + susp_iterate_dir, &ctx)) + return 0; + + /* Read the name. */ + if (read_node (dir, nameoffset, dirent.namelen, (char *) name)) + return 0; + + node = grub_malloc (sizeof (struct grub_fshelp_node)); + if (!node) + return 0; + + node->alloc_dirents = ARRAY_SIZE (node->dirents); + node->have_dirents = 1; + + /* Setup a new node. */ + node->data = dir->data; + node->have_symlink = 0; + + /* If the filetype was not stored using rockridge, use + whatever is stored in the iso9660 filesystem. */ + if (ctx.type == GRUB_FSHELP_UNKNOWN) + { + if ((dirent.flags & FLAG_TYPE) == FLAG_TYPE_DIR) + ctx.type = GRUB_FSHELP_DIR; + else + ctx.type = GRUB_FSHELP_REG; + } + + /* . and .. */ + if (!ctx.filename && dirent.namelen == 1 && name[0] == 0) + ctx.filename = (char *) "."; + + if (!ctx.filename && dirent.namelen == 1 && name[0] == 1) + ctx.filename = (char *) ".."; + + /* The filename was not stored in a rock ridge entry. Read it + from the iso9660 filesystem. */ + if (!dir->data->joliet && !ctx.filename) + { + char *ptr; + name[dirent.namelen] = '\0'; + ctx.filename = grub_strrchr (name, ';'); + if (ctx.filename) + *ctx.filename = '\0'; + /* ISO9660 names are not case-preserving. */ + ctx.type |= GRUB_FSHELP_CASE_INSENSITIVE; + for (ptr = name; *ptr; ptr++) + *ptr = grub_tolower (*ptr); + if (ptr != name && *(ptr - 1) == '.') + *(ptr - 1) = 0; + ctx.filename = name; + } + + if (dir->data->joliet && !ctx.filename) + { + char *semicolon; + + ctx.filename = grub_iso9660_convert_string + ((grub_uint8_t *) name, dirent.namelen >> 1); + + semicolon = grub_strrchr (ctx.filename, ';'); + if (semicolon) + *semicolon = '\0'; + + ctx.filename_alloc = 1; + } + + node->dirents[0] = dirent; + while (dirent.flags & FLAG_MORE_EXTENTS) + { + offset += dirent.len; + if (read_node (dir, offset, sizeof (dirent), (char *) &dirent)) + { + if (ctx.filename_alloc) + grub_free (ctx.filename); + grub_free (node); + return 0; + } + if (node->have_dirents >= node->alloc_dirents) + { + struct grub_fshelp_node *new_node; + node->alloc_dirents *= 2; + new_node = grub_realloc (node, + sizeof (struct grub_fshelp_node) + + ((node->alloc_dirents + - ARRAY_SIZE (node->dirents)) + * sizeof (node->dirents[0]))); + if (!new_node) + { + if (ctx.filename_alloc) + grub_free (ctx.filename); + grub_free (node); + return 0; + } + node = new_node; + } + node->dirents[node->have_dirents++] = dirent; + } + if (ctx.symlink) + { + if ((node->alloc_dirents - node->have_dirents) + * sizeof (node->dirents[0]) < grub_strlen (ctx.symlink) + 1) + { + struct grub_fshelp_node *new_node; + new_node = grub_realloc (node, + sizeof (struct grub_fshelp_node) + + ((node->alloc_dirents + - ARRAY_SIZE (node->dirents)) + * sizeof (node->dirents[0])) + + grub_strlen (ctx.symlink) + 1); + if (!new_node) + { + if (ctx.filename_alloc) + grub_free (ctx.filename); + grub_free (node); + return 0; + } + node = new_node; + } + node->have_symlink = 1; + grub_strcpy (node->symlink + + node->have_dirents * sizeof (node->dirents[0]) + - sizeof (node->dirents), ctx.symlink); + grub_free (ctx.symlink); + ctx.symlink = 0; + ctx.was_continue = 0; + } + if (hook (ctx.filename, ctx.type, node, hook_data)) + { + if (ctx.filename_alloc) + grub_free (ctx.filename); + return 1; + } + if (ctx.filename_alloc) + grub_free (ctx.filename); + } + } + + return 0; +} + + + +/* Context for grub_iso9660_dir. */ +struct grub_iso9660_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_iso9660_dir. */ +static int +grub_iso9660_dir_iter (const char *filename, + enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_iso9660_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + info.mtimeset = !!iso9660_to_unixtime2 (&node->dirents[0].mtime, &info.mtime); + + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_iso9660_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_iso9660_dir_ctx ctx = { hook, hook_data }; + struct grub_iso9660_data *data = 0; + struct grub_fshelp_node rootnode; + struct grub_fshelp_node *foundnode; + + grub_dl_ref (my_mod); + + data = grub_iso9660_mount (device->disk); + if (! data) + goto fail; + + rootnode.data = data; + rootnode.alloc_dirents = 0; + rootnode.have_dirents = 1; + rootnode.have_symlink = 0; + rootnode.dirents[0] = data->voldesc.rootdir; + + /* Use the fshelp function to traverse the path. */ + if (grub_fshelp_find_file (path, &rootnode, + &foundnode, + grub_iso9660_iterate_dir, + grub_iso9660_read_symlink, + GRUB_FSHELP_DIR)) + goto fail; + + /* List the files in the directory. */ + grub_iso9660_iterate_dir (foundnode, grub_iso9660_dir_iter, &ctx); + + if (foundnode != &rootnode) + grub_free (foundnode); + + fail: + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_iso9660_open (struct grub_file *file, const char *name) +{ + struct grub_iso9660_data *data; + struct grub_fshelp_node rootnode; + struct grub_fshelp_node *foundnode; + + grub_dl_ref (my_mod); + + data = grub_iso9660_mount (file->device->disk); + if (!data) + goto fail; + + rootnode.data = data; + rootnode.alloc_dirents = 0; + rootnode.have_dirents = 1; + rootnode.have_symlink = 0; + rootnode.dirents[0] = data->voldesc.rootdir; + + /* Use the fshelp function to traverse the path. */ + if (grub_fshelp_find_file (name, &rootnode, + &foundnode, + grub_iso9660_iterate_dir, + grub_iso9660_read_symlink, + GRUB_FSHELP_REG)) + goto fail; + + data->node = foundnode; + file->data = data; + file->size = get_node_size (foundnode); + file->offset = 0; + + return 0; + + fail: + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + +static grub_ssize_t +grub_iso9660_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_iso9660_data *data = + (struct grub_iso9660_data *) file->data; + grub_err_t err; + + /* XXX: The file is stored in as a single extent. */ + data->disk->read_hook = file->read_hook; + data->disk->read_hook_data = file->read_hook_data; + err = read_node (data->node, file->offset, len, buf); + data->disk->read_hook = NULL; + + if (err || grub_errno) + return -1; + + return len; +} + + +static grub_err_t +grub_iso9660_close (grub_file_t file) +{ + struct grub_iso9660_data *data = + (struct grub_iso9660_data *) file->data; + grub_free (data->node); + grub_free (data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + + +static grub_err_t +grub_iso9660_label (grub_device_t device, char **label) +{ + struct grub_iso9660_data *data; + data = grub_iso9660_mount (device->disk); + + if (data) + { + if (data->joliet) + *label = grub_iso9660_convert_string (data->voldesc.volname, 16); + else + *label = grub_strndup ((char *) data->voldesc.volname, 32); + if (*label) + { + char *ptr; + for (ptr = *label; *ptr;ptr++); + ptr--; + while (ptr >= *label && *ptr == ' ') + *ptr-- = 0; + } + + grub_free (data); + } + else + *label = 0; + + return grub_errno; +} + + +static grub_err_t +grub_iso9660_uuid (grub_device_t device, char **uuid) +{ + struct grub_iso9660_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_iso9660_mount (disk); + if (data) + { + if (! data->voldesc.modified.year[0] && ! data->voldesc.modified.year[1] + && ! data->voldesc.modified.year[2] && ! data->voldesc.modified.year[3] + && ! data->voldesc.modified.month[0] && ! data->voldesc.modified.month[1] + && ! data->voldesc.modified.day[0] && ! data->voldesc.modified.day[1] + && ! data->voldesc.modified.hour[0] && ! data->voldesc.modified.hour[1] + && ! data->voldesc.modified.minute[0] && ! data->voldesc.modified.minute[1] + && ! data->voldesc.modified.second[0] && ! data->voldesc.modified.second[1] + && ! data->voldesc.modified.hundredth[0] && ! data->voldesc.modified.hundredth[1]) + { + grub_error (GRUB_ERR_BAD_NUMBER, "no creation date in filesystem to generate UUID"); + *uuid = NULL; + } + else + { + *uuid = grub_xasprintf ("%c%c%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c", + data->voldesc.modified.year[0], + data->voldesc.modified.year[1], + data->voldesc.modified.year[2], + data->voldesc.modified.year[3], + data->voldesc.modified.month[0], + data->voldesc.modified.month[1], + data->voldesc.modified.day[0], + data->voldesc.modified.day[1], + data->voldesc.modified.hour[0], + data->voldesc.modified.hour[1], + data->voldesc.modified.minute[0], + data->voldesc.modified.minute[1], + data->voldesc.modified.second[0], + data->voldesc.modified.second[1], + data->voldesc.modified.hundredth[0], + data->voldesc.modified.hundredth[1]); + } + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +/* Get writing time of filesystem. */ +static grub_err_t +grub_iso9660_mtime (grub_device_t device, grub_int32_t *timebuf) +{ + struct grub_iso9660_data *data; + grub_disk_t disk = device->disk; + grub_err_t err; + + grub_dl_ref (my_mod); + + data = grub_iso9660_mount (disk); + if (!data) + { + grub_dl_unref (my_mod); + return grub_errno; + } + err = iso9660_to_unixtime (&data->voldesc.modified, timebuf); + + grub_dl_unref (my_mod); + + grub_free (data); + + return err; +} + + + + +static struct grub_fs grub_iso9660_fs = + { + .name = "iso9660", + .dir = grub_iso9660_dir, + .open = grub_iso9660_open, + .read = grub_iso9660_read, + .close = grub_iso9660_close, + .label = grub_iso9660_label, + .uuid = grub_iso9660_uuid, + .mtime = grub_iso9660_mtime, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(iso9660) +{ + grub_fs_register (&grub_iso9660_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(iso9660) +{ + grub_fs_unregister (&grub_iso9660_fs); +} diff --git a/grub-core/fs/jfs.c b/grub-core/fs/jfs.c new file mode 100644 index 000000000..aab3e8c7b --- /dev/null +++ b/grub-core/fs/jfs.c @@ -0,0 +1,955 @@ +/* jfs.c - JFS. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_JFS_MAX_SYMLNK_CNT 8 +#define GRUB_JFS_FILETYPE_MASK 0170000 +#define GRUB_JFS_FILETYPE_REG 0100000 +#define GRUB_JFS_FILETYPE_LNK 0120000 +#define GRUB_JFS_FILETYPE_DIR 0040000 + +#define GRUB_JFS_SBLOCK 64 +#define GRUB_JFS_AGGR_INODE 2 +#define GRUB_JFS_FS1_INODE_BLK 104 + +#define GRUB_JFS_TREE_LEAF 2 + +struct grub_jfs_sblock +{ + /* The magic for JFS. It should contain the string "JFS1". */ + grub_uint8_t magic[4]; + grub_uint32_t version; + grub_uint64_t ag_size; + + /* The size of a filesystem block in bytes. XXX: currently only + 4096 was tested. */ + grub_uint32_t blksz; + grub_uint16_t log2_blksz; + grub_uint8_t unused[14]; + grub_uint32_t flags; + grub_uint8_t unused3[61]; + char volname[11]; + grub_uint8_t unused2[24]; + grub_uint8_t uuid[16]; + char volname2[16]; +}; + +struct grub_jfs_extent +{ + /* The length of the extent in filesystem blocks. */ + grub_uint16_t length; + grub_uint8_t length2; + + /* The physical offset of the first block on the disk. */ + grub_uint8_t blk1; + grub_uint32_t blk2; +} GRUB_PACKED; + +#define GRUB_JFS_IAG_INODES_OFFSET 3072 +#define GRUB_JFS_IAG_INODES_COUNT 128 + +struct grub_jfs_iag +{ + grub_uint8_t unused[GRUB_JFS_IAG_INODES_OFFSET]; + struct grub_jfs_extent inodes[GRUB_JFS_IAG_INODES_COUNT]; +} GRUB_PACKED; + + +/* The head of the tree used to find extents. */ +struct grub_jfs_treehead +{ + grub_uint64_t next; + grub_uint64_t prev; + + grub_uint8_t flags; + grub_uint8_t unused; + + grub_uint16_t count; + grub_uint16_t max; + grub_uint8_t unused2[10]; +} GRUB_PACKED; + +/* A node in the extent tree. */ +struct grub_jfs_tree_extent +{ + grub_uint8_t flags; + grub_uint16_t unused; + + /* The offset is the key used to lookup an extent. */ + grub_uint8_t offset1; + grub_uint32_t offset2; + + struct grub_jfs_extent extent; +} GRUB_PACKED; + +/* The tree of directory entries. */ +struct grub_jfs_tree_dir +{ + /* Pointers to the previous and next tree headers of other nodes on + this level. */ + grub_uint64_t nextb; + grub_uint64_t prevb; + + grub_uint8_t flags; + + /* The amount of dirents in this node. */ + grub_uint8_t count; + grub_uint8_t freecnt; + grub_uint8_t freelist; + grub_uint8_t maxslot; + + /* The location of the sorted array of pointers to dirents. */ + grub_uint8_t sindex; + grub_uint8_t unused[10]; +} GRUB_PACKED; + +/* An internal node in the dirents tree. */ +struct grub_jfs_internal_dirent +{ + struct grub_jfs_extent ex; + grub_uint8_t next; + grub_uint8_t len; + grub_uint16_t namepart[11]; +} GRUB_PACKED; + +/* A leaf node in the dirents tree. */ +struct grub_jfs_leaf_dirent +{ + /* The inode for this dirent. */ + grub_uint32_t inode; + grub_uint8_t next; + + /* The size of the name. */ + grub_uint8_t len; + grub_uint16_t namepart[11]; + grub_uint32_t index; +} GRUB_PACKED; + +/* A leaf in the dirents tree. This one is used if the previously + dirent was not big enough to store the name. */ +struct grub_jfs_leaf_next_dirent +{ + grub_uint8_t next; + grub_uint8_t len; + grub_uint16_t namepart[15]; +} GRUB_PACKED; + +struct grub_jfs_time +{ + grub_int32_t sec; + grub_int32_t nanosec; +} GRUB_PACKED; + +struct grub_jfs_inode +{ + grub_uint32_t stamp; + grub_uint32_t fileset; + grub_uint32_t inode; + grub_uint8_t unused[12]; + grub_uint64_t size; + grub_uint8_t unused2[20]; + grub_uint32_t mode; + struct grub_jfs_time atime; + struct grub_jfs_time ctime; + struct grub_jfs_time mtime; + grub_uint8_t unused3[48]; + grub_uint8_t unused4[96]; + + union + { + /* The tree describing the extents of the file. */ + struct GRUB_PACKED + { + struct grub_jfs_treehead tree; + struct grub_jfs_tree_extent extents[16]; + } file; + union + { + /* The tree describing the dirents. */ + struct + { + grub_uint8_t unused[16]; + grub_uint8_t flags; + + /* Amount of dirents in this node. */ + grub_uint8_t count; + grub_uint8_t freecnt; + grub_uint8_t freelist; + grub_uint32_t idotdot; + grub_uint8_t sorted[8]; + } header; + struct grub_jfs_leaf_dirent dirents[8]; + } GRUB_PACKED dir; + /* Fast symlink. */ + struct + { + grub_uint8_t unused[32]; + grub_uint8_t path[256]; + } symlink; + } GRUB_PACKED; +} GRUB_PACKED; + +struct grub_jfs_data +{ + struct grub_jfs_sblock sblock; + grub_disk_t disk; + struct grub_jfs_inode fileset; + struct grub_jfs_inode currinode; + int caseins; + int pos; + int linknest; + int namecomponentlen; +} GRUB_PACKED; + +struct grub_jfs_diropen +{ + int index; + union + { + struct grub_jfs_tree_dir header; + struct grub_jfs_leaf_dirent dirent[0]; + struct grub_jfs_leaf_next_dirent next_dirent[0]; + grub_uint8_t sorted[0]; + } GRUB_PACKED *dirpage; + struct grub_jfs_data *data; + struct grub_jfs_inode *inode; + int count; + grub_uint8_t *sorted; + struct grub_jfs_leaf_dirent *leaf; + struct grub_jfs_leaf_next_dirent *next_leaf; + + /* The filename and inode of the last read dirent. */ + /* On-disk name is at most 255 UTF-16 codepoints. + Every UTF-16 codepoint is at most 4 UTF-8 bytes. + */ + char name[256 * GRUB_MAX_UTF8_PER_UTF16 + 1]; + grub_uint32_t ino; +} GRUB_PACKED; + + +static grub_dl_t my_mod; + +static grub_err_t grub_jfs_lookup_symlink (struct grub_jfs_data *data, grub_uint32_t ino); + +static grub_int64_t +getblk (struct grub_jfs_treehead *treehead, + struct grub_jfs_tree_extent *extents, + struct grub_jfs_data *data, + grub_uint64_t blk) +{ + int found = -1; + int i; + + for (i = 0; i < grub_le_to_cpu16 (treehead->count) - 2; i++) + { + if (treehead->flags & GRUB_JFS_TREE_LEAF) + { + /* Read the leafnode. */ + if (grub_le_to_cpu32 (extents[i].offset2) <= blk + && ((grub_le_to_cpu16 (extents[i].extent.length)) + + (extents[i].extent.length2 << 16) + + grub_le_to_cpu32 (extents[i].offset2)) > blk) + return (blk - grub_le_to_cpu32 (extents[i].offset2) + + grub_le_to_cpu32 (extents[i].extent.blk2)); + } + else + if (blk >= grub_le_to_cpu32 (extents[i].offset2)) + found = i; + } + + if (found != -1) + { + grub_int64_t ret = -1; + struct + { + struct grub_jfs_treehead treehead; + struct grub_jfs_tree_extent extents[254]; + } *tree; + + tree = grub_zalloc (sizeof (*tree)); + if (!tree) + return -1; + + if (!grub_disk_read (data->disk, + ((grub_disk_addr_t) grub_le_to_cpu32 (extents[found].extent.blk2)) + << (grub_le_to_cpu16 (data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS), 0, + sizeof (*tree), (char *) tree)) + ret = getblk (&tree->treehead, &tree->extents[0], data, blk); + grub_free (tree); + return ret; + } + + return -1; +} + +/* Get the block number for the block BLK in the node INODE in the + mounted filesystem DATA. */ +static grub_int64_t +grub_jfs_blkno (struct grub_jfs_data *data, struct grub_jfs_inode *inode, + grub_uint64_t blk) +{ + return getblk (&inode->file.tree, &inode->file.extents[0], data, blk); +} + + +static grub_err_t +grub_jfs_read_inode (struct grub_jfs_data *data, grub_uint32_t ino, + struct grub_jfs_inode *inode) +{ + struct grub_jfs_extent iag_inodes[GRUB_JFS_IAG_INODES_COUNT]; + grub_uint32_t iagnum = ino / 4096; + unsigned inoext = (ino % 4096) / 32; + unsigned inonum = (ino % 4096) % 32; + grub_uint64_t iagblk; + grub_uint64_t inoblk; + + iagblk = grub_jfs_blkno (data, &data->fileset, iagnum + 1); + if (grub_errno) + return grub_errno; + + /* Read in the IAG. */ + if (grub_disk_read (data->disk, + iagblk << (grub_le_to_cpu16 (data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS), + GRUB_JFS_IAG_INODES_OFFSET, + sizeof (iag_inodes), &iag_inodes)) + return grub_errno; + + inoblk = grub_le_to_cpu32 (iag_inodes[inoext].blk2); + inoblk <<= (grub_le_to_cpu16 (data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS); + inoblk += inonum; + + if (grub_disk_read (data->disk, inoblk, 0, + sizeof (struct grub_jfs_inode), inode)) + return grub_errno; + + return 0; +} + + +static struct grub_jfs_data * +grub_jfs_mount (grub_disk_t disk) +{ + struct grub_jfs_data *data = 0; + + data = grub_malloc (sizeof (struct grub_jfs_data)); + if (!data) + return 0; + + /* Read the superblock. */ + if (grub_disk_read (disk, GRUB_JFS_SBLOCK, 0, + sizeof (struct grub_jfs_sblock), &data->sblock)) + goto fail; + + if (grub_strncmp ((char *) (data->sblock.magic), "JFS1", 4)) + { + grub_error (GRUB_ERR_BAD_FS, "not a JFS filesystem"); + goto fail; + } + + if (data->sblock.blksz == 0 + || grub_le_to_cpu32 (data->sblock.blksz) + != (1U << grub_le_to_cpu16 (data->sblock.log2_blksz)) + || grub_le_to_cpu16 (data->sblock.log2_blksz) < GRUB_DISK_SECTOR_BITS) + { + grub_error (GRUB_ERR_BAD_FS, "not a JFS filesystem"); + goto fail; + } + + data->disk = disk; + data->pos = 0; + data->linknest = 0; + + /* Read the inode of the first fileset. */ + if (grub_disk_read (data->disk, GRUB_JFS_FS1_INODE_BLK, 0, + sizeof (struct grub_jfs_inode), &data->fileset)) + goto fail; + + if (data->sblock.flags & grub_cpu_to_le32_compile_time (0x00200000)) + data->namecomponentlen = 11; + else + data->namecomponentlen = 13; + + if (data->sblock.flags & grub_cpu_to_le32_compile_time (0x40000000)) + data->caseins = 1; + else + data->caseins = 0; + + return data; + + fail: + grub_free (data); + + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not a JFS filesystem"); + + return 0; +} + + +static struct grub_jfs_diropen * +grub_jfs_opendir (struct grub_jfs_data *data, struct grub_jfs_inode *inode) +{ + struct grub_jfs_internal_dirent *de; + struct grub_jfs_diropen *diro; + grub_disk_addr_t blk; + + de = (struct grub_jfs_internal_dirent *) inode->dir.dirents; + + if (!((grub_le_to_cpu32 (inode->mode) + & GRUB_JFS_FILETYPE_MASK) == GRUB_JFS_FILETYPE_DIR)) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + return 0; + } + + diro = grub_zalloc (sizeof (struct grub_jfs_diropen)); + if (!diro) + return 0; + + diro->data = data; + diro->inode = inode; + + /* Check if the entire tree is contained within the inode. */ + if (inode->file.tree.flags & GRUB_JFS_TREE_LEAF) + { + diro->leaf = inode->dir.dirents; + diro->next_leaf = (struct grub_jfs_leaf_next_dirent *) de; + diro->sorted = inode->dir.header.sorted; + diro->count = inode->dir.header.count; + + return diro; + } + + diro->dirpage = grub_malloc (grub_le_to_cpu32 (data->sblock.blksz)); + if (!diro->dirpage) + { + grub_free (diro); + return 0; + } + + blk = grub_le_to_cpu32 (de[inode->dir.header.sorted[0]].ex.blk2); + blk <<= (grub_le_to_cpu16 (data->sblock.log2_blksz) - GRUB_DISK_SECTOR_BITS); + + /* Read in the nodes until we are on the leaf node level. */ + do + { + int index; + if (grub_disk_read (data->disk, blk, 0, + grub_le_to_cpu32 (data->sblock.blksz), + diro->dirpage->sorted)) + { + grub_free (diro->dirpage); + grub_free (diro); + return 0; + } + + de = (struct grub_jfs_internal_dirent *) diro->dirpage->dirent; + index = diro->dirpage->sorted[diro->dirpage->header.sindex * 32]; + blk = (grub_le_to_cpu32 (de[index].ex.blk2) + << (grub_le_to_cpu16 (data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS)); + } while (!(diro->dirpage->header.flags & GRUB_JFS_TREE_LEAF)); + + diro->leaf = diro->dirpage->dirent; + diro->next_leaf = diro->dirpage->next_dirent; + diro->sorted = &diro->dirpage->sorted[diro->dirpage->header.sindex * 32]; + diro->count = diro->dirpage->header.count; + + return diro; +} + + +static void +grub_jfs_closedir (struct grub_jfs_diropen *diro) +{ + if (!diro) + return; + grub_free (diro->dirpage); + grub_free (diro); +} + +static void +le_to_cpu16_copy (grub_uint16_t *out, grub_uint16_t *in, grub_size_t len) +{ + while (len--) + *out++ = grub_le_to_cpu16 (*in++); +} + + +/* Read in the next dirent from the directory described by DIRO. */ +static grub_err_t +grub_jfs_getent (struct grub_jfs_diropen *diro) +{ + int strpos = 0; + struct grub_jfs_leaf_dirent *leaf; + struct grub_jfs_leaf_next_dirent *next_leaf; + int len; + int nextent; + grub_uint16_t filename[256]; + + /* The last node, read in more. */ + if (diro->index == diro->count) + { + grub_disk_addr_t next; + + /* If the inode contains the entry tree or if this was the last + node, there is nothing to read. */ + if ((diro->inode->file.tree.flags & GRUB_JFS_TREE_LEAF) + || !grub_le_to_cpu64 (diro->dirpage->header.nextb)) + return GRUB_ERR_OUT_OF_RANGE; + + next = grub_le_to_cpu64 (diro->dirpage->header.nextb); + next <<= (grub_le_to_cpu16 (diro->data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS); + + if (grub_disk_read (diro->data->disk, next, 0, + grub_le_to_cpu32 (diro->data->sblock.blksz), + diro->dirpage->sorted)) + return grub_errno; + + diro->leaf = diro->dirpage->dirent; + diro->next_leaf = diro->dirpage->next_dirent; + diro->sorted = &diro->dirpage->sorted[diro->dirpage->header.sindex * 32]; + diro->count = diro->dirpage->header.count; + diro->index = 0; + } + + leaf = &diro->leaf[diro->sorted[diro->index]]; + next_leaf = &diro->next_leaf[diro->index]; + + len = leaf->len; + if (!len) + { + diro->index++; + return grub_jfs_getent (diro); + } + + le_to_cpu16_copy (filename + strpos, leaf->namepart, len < diro->data->namecomponentlen ? len + : diro->data->namecomponentlen); + strpos += len < diro->data->namecomponentlen ? len + : diro->data->namecomponentlen; + diro->ino = grub_le_to_cpu32 (leaf->inode); + len -= diro->data->namecomponentlen; + + /* Move down to the leaf level. */ + nextent = leaf->next; + if (leaf->next != 255) + do + { + next_leaf = &diro->next_leaf[nextent]; + le_to_cpu16_copy (filename + strpos, next_leaf->namepart, len < 15 ? len : 15); + strpos += len < 15 ? len : 15; + + len -= 15; + nextent = next_leaf->next; + } while (next_leaf->next != 255 && len > 0); + + diro->index++; + + /* Convert the temporary UTF16 filename to UTF8. */ + *grub_utf16_to_utf8 ((grub_uint8_t *) (diro->name), filename, strpos) = '\0'; + + return 0; +} + + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_jfs_read_file (struct grub_jfs_data *data, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + grub_off_t i; + grub_off_t blockcnt; + + blockcnt = (len + pos + grub_le_to_cpu32 (data->sblock.blksz) - 1) + >> grub_le_to_cpu16 (data->sblock.log2_blksz); + + for (i = pos >> grub_le_to_cpu16 (data->sblock.log2_blksz); i < blockcnt; i++) + { + grub_disk_addr_t blknr; + grub_uint32_t blockoff = pos & (grub_le_to_cpu32 (data->sblock.blksz) - 1); + grub_uint32_t blockend = grub_le_to_cpu32 (data->sblock.blksz); + + grub_uint64_t skipfirst = 0; + + blknr = grub_jfs_blkno (data, &data->currinode, i); + if (grub_errno) + return -1; + + /* Last block. */ + if (i == blockcnt - 1) + { + blockend = (len + pos) & (grub_le_to_cpu32 (data->sblock.blksz) - 1); + + if (!blockend) + blockend = grub_le_to_cpu32 (data->sblock.blksz); + } + + /* First block. */ + if (i == (pos >> grub_le_to_cpu16 (data->sblock.log2_blksz))) + { + skipfirst = blockoff; + blockend -= skipfirst; + } + + data->disk->read_hook = read_hook; + data->disk->read_hook_data = read_hook_data; + grub_disk_read (data->disk, + blknr << (grub_le_to_cpu16 (data->sblock.log2_blksz) + - GRUB_DISK_SECTOR_BITS), + skipfirst, blockend, buf); + + data->disk->read_hook = 0; + if (grub_errno) + return -1; + + buf += grub_le_to_cpu32 (data->sblock.blksz) - skipfirst; + } + + return len; +} + + +/* Find the file with the pathname PATH on the filesystem described by + DATA. */ +static grub_err_t +grub_jfs_find_file (struct grub_jfs_data *data, const char *path, + grub_uint32_t start_ino) +{ + const char *name; + const char *next = path; + struct grub_jfs_diropen *diro = NULL; + + if (grub_jfs_read_inode (data, start_ino, &data->currinode)) + return grub_errno; + + while (1) + { + name = next; + while (*name == '/') + name++; + if (name[0] == 0) + return GRUB_ERR_NONE; + for (next = name; *next && *next != '/'; next++); + + if (name[0] == '.' && name + 1 == next) + continue; + + if (name[0] == '.' && name[1] == '.' && name + 2 == next) + { + grub_uint32_t ino = grub_le_to_cpu32 (data->currinode.dir.header.idotdot); + + if (grub_jfs_read_inode (data, ino, &data->currinode)) + return grub_errno; + + continue; + } + + diro = grub_jfs_opendir (data, &data->currinode); + if (!diro) + return grub_errno; + + for (;;) + { + if (grub_jfs_getent (diro) == GRUB_ERR_OUT_OF_RANGE) + { + grub_jfs_closedir (diro); + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), path); + } + + /* Check if the current direntry matches the current part of the + pathname. */ + if ((data->caseins ? grub_strncasecmp (name, diro->name, next - name) == 0 + : grub_strncmp (name, diro->name, next - name) == 0) && !diro->name[next - name]) + { + grub_uint32_t ino = diro->ino; + grub_uint32_t dirino = grub_le_to_cpu32 (data->currinode.inode); + + grub_jfs_closedir (diro); + diro = 0; + + if (grub_jfs_read_inode (data, ino, &data->currinode)) + break; + + /* Check if this is a symlink. */ + if ((grub_le_to_cpu32 (data->currinode.mode) + & GRUB_JFS_FILETYPE_MASK) == GRUB_JFS_FILETYPE_LNK) + { + grub_jfs_lookup_symlink (data, dirino); + if (grub_errno) + return grub_errno; + } + + break; + } + } + } +} + + +static grub_err_t +grub_jfs_lookup_symlink (struct grub_jfs_data *data, grub_uint32_t ino) +{ + grub_size_t size = grub_le_to_cpu64 (data->currinode.size); + char *symlink; + + if (++data->linknest > GRUB_JFS_MAX_SYMLNK_CNT) + return grub_error (GRUB_ERR_SYMLINK_LOOP, N_("too deep nesting of symlinks")); + + symlink = grub_malloc (size + 1); + if (!symlink) + return grub_errno; + if (size <= sizeof (data->currinode.symlink.path)) + grub_memcpy (symlink, (char *) (data->currinode.symlink.path), size); + else if (grub_jfs_read_file (data, 0, 0, 0, size, symlink) < 0) + { + grub_free (symlink); + return grub_errno; + } + + symlink[size] = '\0'; + + /* The symlink is an absolute path, go back to the root inode. */ + if (symlink[0] == '/') + ino = 2; + + grub_jfs_find_file (data, symlink, ino); + + grub_free (symlink); + + return grub_errno; +} + + +static grub_err_t +grub_jfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_jfs_data *data = 0; + struct grub_jfs_diropen *diro = 0; + + grub_dl_ref (my_mod); + + data = grub_jfs_mount (device->disk); + if (!data) + goto fail; + + if (grub_jfs_find_file (data, path, GRUB_JFS_AGGR_INODE)) + goto fail; + + diro = grub_jfs_opendir (data, &data->currinode); + if (!diro) + goto fail; + + /* Iterate over the dirents in the directory that was found. */ + while (grub_jfs_getent (diro) != GRUB_ERR_OUT_OF_RANGE) + { + struct grub_jfs_inode inode; + struct grub_dirhook_info info; + grub_memset (&info, 0, sizeof (info)); + + if (grub_jfs_read_inode (data, diro->ino, &inode)) + goto fail; + + info.dir = (grub_le_to_cpu32 (inode.mode) + & GRUB_JFS_FILETYPE_MASK) == GRUB_JFS_FILETYPE_DIR; + info.mtimeset = 1; + info.mtime = grub_le_to_cpu32 (inode.mtime.sec); + if (hook (diro->name, &info, hook_data)) + goto fail; + } + + /* XXX: GRUB_ERR_OUT_OF_RANGE is used for the last dirent. */ + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_errno = 0; + + fail: + grub_jfs_closedir (diro); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_jfs_open (struct grub_file *file, const char *name) +{ + struct grub_jfs_data *data; + + grub_dl_ref (my_mod); + + data = grub_jfs_mount (file->device->disk); + if (!data) + goto fail; + + grub_jfs_find_file (data, name, GRUB_JFS_AGGR_INODE); + if (grub_errno) + goto fail; + + /* It is only possible for open regular files. */ + if (! ((grub_le_to_cpu32 (data->currinode.mode) + & GRUB_JFS_FILETYPE_MASK) == GRUB_JFS_FILETYPE_REG)) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a regular file")); + goto fail; + } + + file->data = data; + file->size = grub_le_to_cpu64 (data->currinode.size); + + return 0; + + fail: + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + +static grub_ssize_t +grub_jfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_jfs_data *data = + (struct grub_jfs_data *) file->data; + + return grub_jfs_read_file (data, file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + + +static grub_err_t +grub_jfs_close (grub_file_t file) +{ + grub_free (file->data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_jfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_jfs_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_jfs_mount (disk); + if (data) + { + *uuid = grub_xasprintf ("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-" + "%02x%02x%02x%02x%02x%02x", + data->sblock.uuid[0], data->sblock.uuid[1], + data->sblock.uuid[2], data->sblock.uuid[3], + data->sblock.uuid[4], data->sblock.uuid[5], + data->sblock.uuid[6], data->sblock.uuid[7], + data->sblock.uuid[8], data->sblock.uuid[9], + data->sblock.uuid[10], data->sblock.uuid[11], + data->sblock.uuid[12], data->sblock.uuid[13], + data->sblock.uuid[14], data->sblock.uuid[15]); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_jfs_label (grub_device_t device, char **label) +{ + struct grub_jfs_data *data; + data = grub_jfs_mount (device->disk); + + if (data) + { + if (data->sblock.volname2[0] < ' ') + { + char *ptr; + ptr = data->sblock.volname + sizeof (data->sblock.volname) - 1; + while (ptr >= data->sblock.volname && *ptr == ' ') + ptr--; + *label = grub_strndup (data->sblock.volname, + ptr - data->sblock.volname + 1); + } + else + *label = grub_strndup (data->sblock.volname2, + sizeof (data->sblock.volname2)); + } + else + *label = 0; + + grub_free (data); + + return grub_errno; +} + + +static struct grub_fs grub_jfs_fs = + { + .name = "jfs", + .dir = grub_jfs_dir, + .open = grub_jfs_open, + .read = grub_jfs_read, + .close = grub_jfs_close, + .label = grub_jfs_label, + .uuid = grub_jfs_uuid, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(jfs) +{ + grub_fs_register (&grub_jfs_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(jfs) +{ + grub_fs_unregister (&grub_jfs_fs); +} diff --git a/grub-core/fs/minix.c b/grub-core/fs/minix.c new file mode 100644 index 000000000..d451b3426 --- /dev/null +++ b/grub-core/fs/minix.c @@ -0,0 +1,742 @@ +/* minix.c - The minix filesystem, version 1 and 2. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005,2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#ifdef MODE_MINIX3 +#define GRUB_MINIX_MAGIC 0x4D5A +#elif defined(MODE_MINIX2) +#define GRUB_MINIX_MAGIC 0x2468 +#define GRUB_MINIX_MAGIC_30 0x2478 +#else +#define GRUB_MINIX_MAGIC 0x137F +#define GRUB_MINIX_MAGIC_30 0x138F +#endif + +#define GRUB_MINIX_INODE_DIR_BLOCKS 7 +#define GRUB_MINIX_LOG2_BSIZE 1 +#define GRUB_MINIX_ROOT_INODE 1 +#define GRUB_MINIX_MAX_SYMLNK_CNT 8 +#define GRUB_MINIX_SBLOCK 2 + +#define GRUB_MINIX_IFDIR 0040000U +#define GRUB_MINIX_IFLNK 0120000U + +#ifdef MODE_BIGENDIAN +#define grub_cpu_to_minix16_compile_time grub_cpu_to_be16_compile_time +#define grub_minix_to_cpu16 grub_be_to_cpu16 +#define grub_minix_to_cpu32 grub_be_to_cpu32 +#else +#define grub_cpu_to_minix16_compile_time grub_cpu_to_le16_compile_time +#define grub_minix_to_cpu16 grub_le_to_cpu16 +#define grub_minix_to_cpu32 grub_le_to_cpu32 +#endif + +#if defined(MODE_MINIX2) || defined(MODE_MINIX3) +typedef grub_uint32_t grub_minix_uintn_t; +#define grub_minix_to_cpu_n grub_minix_to_cpu32 +#else +typedef grub_uint16_t grub_minix_uintn_t; +#define grub_minix_to_cpu_n grub_minix_to_cpu16 +#endif + +#ifdef MODE_MINIX3 +typedef grub_uint32_t grub_minix_ino_t; +#define grub_minix_to_cpu_ino grub_minix_to_cpu32 +#else +typedef grub_uint16_t grub_minix_ino_t; +#define grub_minix_to_cpu_ino grub_minix_to_cpu16 +#endif + +#define GRUB_MINIX_INODE_SIZE(data) (grub_minix_to_cpu32 (data->inode.size)) +#define GRUB_MINIX_INODE_MODE(data) (grub_minix_to_cpu16 (data->inode.mode)) +#define GRUB_MINIX_INODE_DIR_ZONES(data,blk) (grub_minix_to_cpu_n \ + (data->inode.dir_zones[blk])) +#define GRUB_MINIX_INODE_INDIR_ZONE(data) (grub_minix_to_cpu_n \ + (data->inode.indir_zone)) +#define GRUB_MINIX_INODE_DINDIR_ZONE(data) (grub_minix_to_cpu_n \ + (data->inode.double_indir_zone)) + + +#ifdef MODE_MINIX3 +struct grub_minix_sblock +{ + grub_uint32_t inode_cnt; + grub_uint16_t zone_cnt; + grub_uint16_t inode_bmap_size; + grub_uint16_t zone_bmap_size; + grub_uint16_t first_data_zone; + grub_uint16_t log2_zone_size; + grub_uint16_t pad; + grub_uint32_t max_file_size; + grub_uint32_t zones; + grub_uint16_t magic; + + grub_uint16_t pad2; + grub_uint16_t block_size; + grub_uint8_t disk_version; +}; +#else +struct grub_minix_sblock +{ + grub_uint16_t inode_cnt; + grub_uint16_t zone_cnt; + grub_uint16_t inode_bmap_size; + grub_uint16_t zone_bmap_size; + grub_uint16_t first_data_zone; + grub_uint16_t log2_zone_size; + grub_uint32_t max_file_size; + grub_uint16_t magic; +}; +#endif + +#if defined(MODE_MINIX3) || defined(MODE_MINIX2) +struct grub_minix_inode +{ + grub_uint16_t mode; + grub_uint16_t nlinks; + grub_uint16_t uid; + grub_uint16_t gid; + grub_uint32_t size; + grub_uint32_t atime; + grub_uint32_t mtime; + grub_uint32_t ctime; + grub_uint32_t dir_zones[7]; + grub_uint32_t indir_zone; + grub_uint32_t double_indir_zone; + grub_uint32_t triple_indir_zone; +}; +#else +struct grub_minix_inode +{ + grub_uint16_t mode; + grub_uint16_t uid; + grub_uint32_t size; + grub_uint32_t mtime; + grub_uint8_t gid; + grub_uint8_t nlinks; + grub_uint16_t dir_zones[7]; + grub_uint16_t indir_zone; + grub_uint16_t double_indir_zone; +}; + +#endif + +#if defined(MODE_MINIX3) +#define MAX_MINIX_FILENAME_SIZE 60 +#else +#define MAX_MINIX_FILENAME_SIZE 30 +#endif + +/* Information about a "mounted" minix filesystem. */ +struct grub_minix_data +{ + struct grub_minix_sblock sblock; + struct grub_minix_inode inode; + grub_uint32_t block_per_zone; + grub_minix_ino_t ino; + int linknest; + grub_disk_t disk; + int filename_size; + grub_size_t block_size; +}; + +static grub_dl_t my_mod; + +static grub_err_t grub_minix_find_file (struct grub_minix_data *data, + const char *path); + +#ifdef MODE_MINIX3 +static inline grub_disk_addr_t +grub_minix_zone2sect (struct grub_minix_data *data, grub_minix_uintn_t zone) +{ + return ((grub_disk_addr_t) zone) * data->block_size; +} +#else +static inline grub_disk_addr_t +grub_minix_zone2sect (struct grub_minix_data *data, grub_minix_uintn_t zone) +{ + int log2_zonesz = (GRUB_MINIX_LOG2_BSIZE + + grub_minix_to_cpu16 (data->sblock.log2_zone_size)); + return (((grub_disk_addr_t) zone) << log2_zonesz); +} +#endif + + + /* Read the block pointer in ZONE, on the offset NUM. */ +static grub_minix_uintn_t +grub_get_indir (struct grub_minix_data *data, + grub_minix_uintn_t zone, + grub_minix_uintn_t num) +{ + grub_minix_uintn_t indirn; + grub_disk_read (data->disk, + grub_minix_zone2sect(data, zone), + sizeof (grub_minix_uintn_t) * num, + sizeof (grub_minix_uintn_t), (char *) &indirn); + return grub_minix_to_cpu_n (indirn); +} + +static grub_minix_uintn_t +grub_minix_get_file_block (struct grub_minix_data *data, unsigned int blk) +{ + grub_minix_uintn_t indir; + + /* Direct block. */ + if (blk < GRUB_MINIX_INODE_DIR_BLOCKS) + return GRUB_MINIX_INODE_DIR_ZONES (data, blk); + + /* Indirect block. */ + blk -= GRUB_MINIX_INODE_DIR_BLOCKS; + if (blk < data->block_per_zone) + { + indir = grub_get_indir (data, GRUB_MINIX_INODE_INDIR_ZONE (data), blk); + return indir; + } + + /* Double indirect block. */ + blk -= data->block_per_zone; + if (blk < (grub_uint64_t) data->block_per_zone * (grub_uint64_t) data->block_per_zone) + { + indir = grub_get_indir (data, GRUB_MINIX_INODE_DINDIR_ZONE (data), + blk / data->block_per_zone); + + indir = grub_get_indir (data, indir, blk % data->block_per_zone); + + return indir; + } + +#if defined (MODE_MINIX3) || defined (MODE_MINIX2) + blk -= data->block_per_zone * data->block_per_zone; + if (blk < ((grub_uint64_t) data->block_per_zone * (grub_uint64_t) data->block_per_zone + * (grub_uint64_t) data->block_per_zone)) + { + indir = grub_get_indir (data, grub_minix_to_cpu_n (data->inode.triple_indir_zone), + (blk / data->block_per_zone) / data->block_per_zone); + indir = grub_get_indir (data, indir, (blk / data->block_per_zone) % data->block_per_zone); + indir = grub_get_indir (data, indir, blk % data->block_per_zone); + + return indir; + } +#endif + + /* This should never happen. */ + grub_error (GRUB_ERR_OUT_OF_RANGE, "file bigger than maximum size"); + + return 0; +} + + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_minix_read_file (struct grub_minix_data *data, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + grub_uint32_t i; + grub_uint32_t blockcnt; + grub_uint32_t posblock; + grub_uint32_t blockoff; + + if (pos > GRUB_MINIX_INODE_SIZE (data)) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read past the end of file")); + return -1; + } + + /* Adjust len so it we can't read past the end of the file. */ + if (len + pos > GRUB_MINIX_INODE_SIZE (data)) + len = GRUB_MINIX_INODE_SIZE (data) - pos; + if (len == 0) + return 0; + + /* Files are at most 2G/4G - 1 bytes on minixfs. Avoid 64-bit division. */ + blockcnt = ((grub_uint32_t) ((len + pos - 1) + >> GRUB_DISK_SECTOR_BITS)) / data->block_size + 1; + posblock = (((grub_uint32_t) pos) + / (data->block_size << GRUB_DISK_SECTOR_BITS)); + blockoff = (((grub_uint32_t) pos) + % (data->block_size << GRUB_DISK_SECTOR_BITS)); + + for (i = posblock; i < blockcnt; i++) + { + grub_minix_uintn_t blknr; + grub_uint64_t blockend = data->block_size << GRUB_DISK_SECTOR_BITS; + grub_off_t skipfirst = 0; + + blknr = grub_minix_get_file_block (data, i); + if (grub_errno) + return -1; + + /* Last block. */ + if (i == blockcnt - 1) + { + /* len + pos < 4G (checked above), so it doesn't overflow. */ + blockend = (((grub_uint32_t) (len + pos)) + % (data->block_size << GRUB_DISK_SECTOR_BITS)); + + if (!blockend) + blockend = data->block_size << GRUB_DISK_SECTOR_BITS; + } + + /* First block. */ + if (i == posblock) + { + skipfirst = blockoff; + blockend -= skipfirst; + } + + data->disk->read_hook = read_hook; + data->disk->read_hook_data = read_hook_data; + grub_disk_read (data->disk, + grub_minix_zone2sect(data, blknr), + skipfirst, blockend, buf); + data->disk->read_hook = 0; + if (grub_errno) + return -1; + + buf += (data->block_size << GRUB_DISK_SECTOR_BITS) - skipfirst; + } + + return len; +} + + +/* Read inode INO from the mounted filesystem described by DATA. This + inode is used by default now. */ +static grub_err_t +grub_minix_read_inode (struct grub_minix_data *data, grub_minix_ino_t ino) +{ + struct grub_minix_sblock *sblock = &data->sblock; + + /* Block in which the inode is stored. */ + grub_disk_addr_t block; + data->ino = ino; + + /* The first inode in minix is inode 1. */ + ino--; + block = grub_minix_zone2sect (data, + 2 + grub_minix_to_cpu16 (sblock->inode_bmap_size) + + grub_minix_to_cpu16 (sblock->zone_bmap_size)); + block += ino / (GRUB_DISK_SECTOR_SIZE / sizeof (struct grub_minix_inode)); + int offs = (ino % (GRUB_DISK_SECTOR_SIZE + / sizeof (struct grub_minix_inode)) + * sizeof (struct grub_minix_inode)); + + grub_disk_read (data->disk, block, offs, + sizeof (struct grub_minix_inode), &data->inode); + + return GRUB_ERR_NONE; +} + + +/* Lookup the symlink the current inode points to. INO is the inode + number of the directory the symlink is relative to. */ +static grub_err_t +grub_minix_lookup_symlink (struct grub_minix_data *data, grub_minix_ino_t ino) +{ + char *symlink; + grub_size_t sz = GRUB_MINIX_INODE_SIZE (data); + + if (++data->linknest > GRUB_MINIX_MAX_SYMLNK_CNT) + return grub_error (GRUB_ERR_SYMLINK_LOOP, N_("too deep nesting of symlinks")); + + symlink = grub_malloc (sz + 1); + if (!symlink) + return grub_errno; + if (grub_minix_read_file (data, 0, 0, 0, sz, symlink) < 0) + return grub_errno; + + symlink[sz] = '\0'; + + /* The symlink is an absolute path, go back to the root inode. */ + if (symlink[0] == '/') + ino = GRUB_MINIX_ROOT_INODE; + + /* Now load in the old inode. */ + if (grub_minix_read_inode (data, ino)) + return grub_errno; + + grub_minix_find_file (data, symlink); + + return grub_errno; +} + + +/* Find the file with the pathname PATH on the filesystem described by + DATA. */ +static grub_err_t +grub_minix_find_file (struct grub_minix_data *data, const char *path) +{ + const char *name; + const char *next = path; + unsigned int pos = 0; + grub_minix_ino_t dirino; + + while (1) + { + name = next; + /* Skip the first slash. */ + while (*name == '/') + name++; + if (!*name) + return GRUB_ERR_NONE; + + if ((GRUB_MINIX_INODE_MODE (data) + & GRUB_MINIX_IFDIR) != GRUB_MINIX_IFDIR) + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + + /* Extract the actual part from the pathname. */ + for (next = name; *next && *next != '/'; next++); + + for (pos = 0; ; ) + { + grub_minix_ino_t ino; + char filename[MAX_MINIX_FILENAME_SIZE + 1]; + + if (pos >= GRUB_MINIX_INODE_SIZE (data)) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), path); + return grub_errno; + } + + if (grub_minix_read_file (data, 0, 0, pos, sizeof (ino), + (char *) &ino) < 0) + return grub_errno; + if (grub_minix_read_file (data, 0, 0, pos + sizeof (ino), + data->filename_size, (char *) filename)< 0) + return grub_errno; + + pos += sizeof (ino) + data->filename_size; + + filename[data->filename_size] = '\0'; + + /* Check if the current direntry matches the current part of the + pathname. */ + if (grub_strncmp (name, filename, next - name) == 0 + && filename[next - name] == '\0') + { + dirino = data->ino; + grub_minix_read_inode (data, grub_minix_to_cpu_ino (ino)); + + /* Follow the symlink. */ + if ((GRUB_MINIX_INODE_MODE (data) + & GRUB_MINIX_IFLNK) == GRUB_MINIX_IFLNK) + { + grub_minix_lookup_symlink (data, dirino); + if (grub_errno) + return grub_errno; + } + + break; + } + } + } +} + + +/* Mount the filesystem on the disk DISK. */ +static struct grub_minix_data * +grub_minix_mount (grub_disk_t disk) +{ + struct grub_minix_data *data; + + data = grub_malloc (sizeof (struct grub_minix_data)); + if (!data) + return 0; + + /* Read the superblock. */ + grub_disk_read (disk, GRUB_MINIX_SBLOCK, 0, + sizeof (struct grub_minix_sblock),&data->sblock); + if (grub_errno) + goto fail; + + if (data->sblock.magic == grub_cpu_to_minix16_compile_time (GRUB_MINIX_MAGIC)) + { +#if !defined(MODE_MINIX3) + data->filename_size = 14; +#else + data->filename_size = 60; +#endif + } +#if !defined(MODE_MINIX3) + else if (data->sblock.magic + == grub_cpu_to_minix16_compile_time (GRUB_MINIX_MAGIC_30)) + data->filename_size = 30; +#endif + else + goto fail; + + /* 20 means 1G zones. We could support up to 31 but already 1G isn't + supported by anything else. */ + if (grub_minix_to_cpu16 (data->sblock.log2_zone_size) >= 20) + goto fail; + + data->disk = disk; + data->linknest = 0; +#ifdef MODE_MINIX3 + /* These tests are endian-independent. No need to byteswap. */ + if (data->sblock.block_size == 0xffff) + data->block_size = 2; + else + { + if ((data->sblock.block_size == grub_cpu_to_minix16_compile_time (0x200)) + || (data->sblock.block_size == 0) + || (data->sblock.block_size & grub_cpu_to_minix16_compile_time (0x1ff))) + goto fail; + data->block_size = grub_minix_to_cpu16 (data->sblock.block_size) + >> GRUB_DISK_SECTOR_BITS; + } +#else + data->block_size = 2; +#endif + + data->block_per_zone = (((grub_uint64_t) data->block_size << \ + (GRUB_DISK_SECTOR_BITS + grub_minix_to_cpu16 (data->sblock.log2_zone_size))) + / sizeof (grub_minix_uintn_t)); + if (!data->block_per_zone) + goto fail; + + return data; + + fail: + grub_free (data); +#if defined(MODE_MINIX3) + grub_error (GRUB_ERR_BAD_FS, "not a minix3 filesystem"); +#elif defined(MODE_MINIX2) + grub_error (GRUB_ERR_BAD_FS, "not a minix2 filesystem"); +#else + grub_error (GRUB_ERR_BAD_FS, "not a minix filesystem"); +#endif + return 0; +} + +static grub_err_t +grub_minix_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_minix_data *data = 0; + unsigned int pos = 0; + + data = grub_minix_mount (device->disk); + if (!data) + return grub_errno; + + grub_minix_read_inode (data, GRUB_MINIX_ROOT_INODE); + if (grub_errno) + goto fail; + + grub_minix_find_file (data, path); + if (grub_errno) + goto fail; + + if ((GRUB_MINIX_INODE_MODE (data) & GRUB_MINIX_IFDIR) != GRUB_MINIX_IFDIR) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + goto fail; + } + + while (pos < GRUB_MINIX_INODE_SIZE (data)) + { + grub_minix_ino_t ino; + char filename[MAX_MINIX_FILENAME_SIZE + 1]; + grub_minix_ino_t dirino = data->ino; + struct grub_dirhook_info info; + grub_memset (&info, 0, sizeof (info)); + + + if (grub_minix_read_file (data, 0, 0, pos, sizeof (ino), + (char *) &ino) < 0) + return grub_errno; + + if (grub_minix_read_file (data, 0, 0, pos + sizeof (ino), + data->filename_size, + (char *) filename) < 0) + return grub_errno; + filename[data->filename_size] = '\0'; + if (!ino) + { + pos += sizeof (ino) + data->filename_size; + continue; + } + + grub_minix_read_inode (data, grub_minix_to_cpu_ino (ino)); + info.dir = ((GRUB_MINIX_INODE_MODE (data) + & GRUB_MINIX_IFDIR) == GRUB_MINIX_IFDIR); + info.mtimeset = 1; + info.mtime = grub_minix_to_cpu32 (data->inode.mtime); + + if (hook (filename, &info, hook_data) ? 1 : 0) + break; + + /* Load the old inode back in. */ + grub_minix_read_inode (data, dirino); + + pos += sizeof (ino) + data->filename_size; + } + + fail: + grub_free (data); + return grub_errno; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_minix_open (struct grub_file *file, const char *name) +{ + struct grub_minix_data *data; + data = grub_minix_mount (file->device->disk); + if (!data) + return grub_errno; + + /* Open the inode op the root directory. */ + grub_minix_read_inode (data, GRUB_MINIX_ROOT_INODE); + if (grub_errno) + { + grub_free (data); + return grub_errno; + } + + if (!name || name[0] != '/') + { + grub_error (GRUB_ERR_BAD_FILENAME, N_("invalid file name `%s'"), name); + return grub_errno; + } + + /* Traverse the directory tree to the node that should be + opened. */ + grub_minix_find_file (data, name); + if (grub_errno) + { + grub_free (data); + return grub_errno; + } + + file->data = data; + file->size = GRUB_MINIX_INODE_SIZE (data); + + return GRUB_ERR_NONE; +} + + +static grub_ssize_t +grub_minix_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_minix_data *data = + (struct grub_minix_data *) file->data; + + return grub_minix_read_file (data, file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + + +static grub_err_t +grub_minix_close (grub_file_t file) +{ + grub_free (file->data); + + return GRUB_ERR_NONE; +} + + + +static struct grub_fs grub_minix_fs = + { +#ifdef MODE_BIGENDIAN +#if defined(MODE_MINIX3) + .name = "minix3_be", +#elif defined(MODE_MINIX2) + .name = "minix2_be", +#else + .name = "minix_be", +#endif +#else +#if defined(MODE_MINIX3) + .name = "minix3", +#elif defined(MODE_MINIX2) + .name = "minix2", +#else + .name = "minix", +#endif +#endif + .dir = grub_minix_dir, + .open = grub_minix_open, + .read = grub_minix_read, + .close = grub_minix_close, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 + }; + +#ifdef MODE_BIGENDIAN +#if defined(MODE_MINIX3) +GRUB_MOD_INIT(minix3_be) +#elif defined(MODE_MINIX2) +GRUB_MOD_INIT(minix2_be) +#else +GRUB_MOD_INIT(minix_be) +#endif +#else +#if defined(MODE_MINIX3) +GRUB_MOD_INIT(minix3) +#elif defined(MODE_MINIX2) +GRUB_MOD_INIT(minix2) +#else +GRUB_MOD_INIT(minix) +#endif +#endif +{ + grub_fs_register (&grub_minix_fs); + my_mod = mod; +} + +#ifdef MODE_BIGENDIAN +#if defined(MODE_MINIX3) +GRUB_MOD_FINI(minix3_be) +#elif defined(MODE_MINIX2) +GRUB_MOD_FINI(minix2_be) +#else +GRUB_MOD_FINI(minix_be) +#endif +#else +#if defined(MODE_MINIX3) +GRUB_MOD_FINI(minix3) +#elif defined(MODE_MINIX2) +GRUB_MOD_FINI(minix2) +#else +GRUB_MOD_FINI(minix) +#endif +#endif +{ + grub_fs_unregister (&grub_minix_fs); +} diff --git a/grub-core/fs/minix2.c b/grub-core/fs/minix2.c new file mode 100644 index 000000000..0fcd4b139 --- /dev/null +++ b/grub-core/fs/minix2.c @@ -0,0 +1,2 @@ +#define MODE_MINIX2 1 +#include "minix.c" diff --git a/grub-core/fs/minix2_be.c b/grub-core/fs/minix2_be.c new file mode 100644 index 000000000..cb786df1c --- /dev/null +++ b/grub-core/fs/minix2_be.c @@ -0,0 +1,3 @@ +#define MODE_MINIX2 1 +#define MODE_BIGENDIAN 1 +#include "minix.c" diff --git a/grub-core/fs/minix3.c b/grub-core/fs/minix3.c new file mode 100644 index 000000000..58a21d2b5 --- /dev/null +++ b/grub-core/fs/minix3.c @@ -0,0 +1,2 @@ +#define MODE_MINIX3 1 +#include "minix.c" diff --git a/grub-core/fs/minix3_be.c b/grub-core/fs/minix3_be.c new file mode 100644 index 000000000..d0305e4ff --- /dev/null +++ b/grub-core/fs/minix3_be.c @@ -0,0 +1,3 @@ +#define MODE_MINIX3 1 +#define MODE_BIGENDIAN 1 +#include "minix.c" diff --git a/grub-core/fs/minix_be.c b/grub-core/fs/minix_be.c new file mode 100644 index 000000000..fade347d6 --- /dev/null +++ b/grub-core/fs/minix_be.c @@ -0,0 +1,2 @@ +#define MODE_BIGENDIAN 1 +#include "minix.c" diff --git a/grub-core/fs/newc.c b/grub-core/fs/newc.c new file mode 100644 index 000000000..4fb8b2e3d --- /dev/null +++ b/grub-core/fs/newc.c @@ -0,0 +1,73 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#define ALIGN_CPIO(x) (ALIGN_UP ((x), 4)) +#define MAGIC "070701" +#define MAGIC2 "070702" +struct head +{ + char magic[6]; + char ino[8]; + char mode[8]; + char uid[8]; + char gid[8]; + char nlink[8]; + char mtime[8]; + char filesize[8]; + char devmajor[8]; + char devminor[8]; + char rdevmajor[8]; + char rdevminor[8]; + char namesize[8]; + char check[8]; +} GRUB_PACKED; + +static inline unsigned long long +read_number (const char *str, grub_size_t size) +{ + unsigned long long ret = 0; + while (size-- && grub_isxdigit (*str)) + { + char dig = *str++; + if (dig >= '0' && dig <= '9') + dig &= 0xf; + else if (dig >= 'a' && dig <= 'f') + dig -= 'a' - 10; + else + dig -= 'A' - 10; + ret = (ret << 4) | (dig); + } + return ret; +} + +#define FSNAME "newc" + +#include "cpio_common.c" + +GRUB_MOD_INIT (newc) +{ + grub_fs_register (&grub_cpio_fs); +} + +GRUB_MOD_FINI (newc) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c new file mode 100644 index 000000000..598a2a55b --- /dev/null +++ b/grub-core/fs/nilfs2.c @@ -0,0 +1,1223 @@ +/* + * nilfs2.c - New Implementation of Log filesystem + * + * Written by Jiro SEKIBA + * + * Copyright (C) 2003,2004,2005,2007,2008,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +/* Filetype information as used in inodes. */ +#define FILETYPE_INO_MASK 0170000 +#define FILETYPE_INO_REG 0100000 +#define FILETYPE_INO_DIRECTORY 0040000 +#define FILETYPE_INO_SYMLINK 0120000 + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define NILFS_INODE_BMAP_SIZE 7 + +#define NILFS_SUPORT_REV 2 + +/* Magic value used to identify an nilfs2 filesystem. */ +#define NILFS2_SUPER_MAGIC 0x3434 +/* nilfs btree node flag. */ +#define NILFS_BTREE_NODE_ROOT 0x01 + +/* nilfs btree node level. */ +#define NILFS_BTREE_LEVEL_DATA 0 +#define NILFS_BTREE_LEVEL_NODE_MIN (NILFS_BTREE_LEVEL_DATA + 1) + +/* nilfs 1st super block posission from beginning of the partition + in 512 block size */ +#define NILFS_1ST_SUPER_BLOCK 2 +/* nilfs 2nd super block posission from beginning of the partition + in 512 block size */ +#define NILFS_2ND_SUPER_BLOCK(devsize) (((devsize >> 3) - 1) << 3) + +#define LOG_INODE_SIZE 7 +struct grub_nilfs2_inode +{ + grub_uint64_t i_blocks; + grub_uint64_t i_size; + grub_uint64_t i_ctime; + grub_uint64_t i_mtime; + grub_uint32_t i_ctime_nsec; + grub_uint32_t i_mtime_nsec; + grub_uint32_t i_uid; + grub_uint32_t i_gid; + grub_uint16_t i_mode; + grub_uint16_t i_links_count; + grub_uint32_t i_flags; + grub_uint64_t i_bmap[NILFS_INODE_BMAP_SIZE]; +#define i_device_code i_bmap[0] + grub_uint64_t i_xattr; + grub_uint32_t i_generation; + grub_uint32_t i_pad; +}; + +struct grub_nilfs2_super_root +{ + grub_uint32_t sr_sum; + grub_uint16_t sr_bytes; + grub_uint16_t sr_flags; + grub_uint64_t sr_nongc_ctime; + struct grub_nilfs2_inode sr_dat; + struct grub_nilfs2_inode sr_cpfile; + struct grub_nilfs2_inode sr_sufile; +}; + +struct grub_nilfs2_super_block +{ + grub_uint32_t s_rev_level; + grub_uint16_t s_minor_rev_level; + grub_uint16_t s_magic; + grub_uint16_t s_bytes; + grub_uint16_t s_flags; + grub_uint32_t s_crc_seed; + grub_uint32_t s_sum; + grub_uint32_t s_log_block_size; + grub_uint64_t s_nsegments; + grub_uint64_t s_dev_size; + grub_uint64_t s_first_data_block; + grub_uint32_t s_blocks_per_segment; + grub_uint32_t s_r_segments_percentage; + grub_uint64_t s_last_cno; + grub_uint64_t s_last_pseg; + grub_uint64_t s_last_seq; + grub_uint64_t s_free_blocks_count; + grub_uint64_t s_ctime; + grub_uint64_t s_mtime; + grub_uint64_t s_wtime; + grub_uint16_t s_mnt_count; + grub_uint16_t s_max_mnt_count; + grub_uint16_t s_state; + grub_uint16_t s_errors; + grub_uint64_t s_lastcheck; + grub_uint32_t s_checkinterval; + grub_uint32_t s_creator_os; + grub_uint16_t s_def_resuid; + grub_uint16_t s_def_resgid; + grub_uint32_t s_first_ino; + grub_uint16_t s_inode_size; + grub_uint16_t s_dat_entry_size; + grub_uint16_t s_checkpoint_size; + grub_uint16_t s_segment_usage_size; + grub_uint8_t s_uuid[16]; + char s_volume_name[80]; + grub_uint32_t s_c_interval; + grub_uint32_t s_c_block_max; + grub_uint32_t s_reserved[192]; +}; + +struct grub_nilfs2_dir_entry +{ + grub_uint64_t inode; + grub_uint16_t rec_len; +#define MAX_NAMELEN 255 + grub_uint8_t name_len; + grub_uint8_t file_type; +#if 0 /* followed by file name. */ + char name[NILFS_NAME_LEN]; + char pad; +#endif +} GRUB_PACKED; + +enum +{ + NILFS_FT_UNKNOWN, + NILFS_FT_REG_FILE, + NILFS_FT_DIR, + NILFS_FT_CHRDEV, + NILFS_FT_BLKDEV, + NILFS_FT_FIFO, + NILFS_FT_SOCK, + NILFS_FT_SYMLINK, + NILFS_FT_MAX +}; + +struct grub_nilfs2_finfo +{ + grub_uint64_t fi_ino; + grub_uint64_t fi_cno; + grub_uint32_t fi_nblocks; + grub_uint32_t fi_ndatablk; +}; + +struct grub_nilfs2_binfo_v +{ + grub_uint64_t bi_vblocknr; + grub_uint64_t bi_blkoff; +}; + +struct grub_nilfs2_binfo_dat +{ + grub_uint64_t bi_blkoff; + grub_uint8_t bi_level; + grub_uint8_t bi_pad[7]; +}; + +union grub_nilfs2_binfo +{ + struct grub_nilfs2_binfo_v bi_v; + struct grub_nilfs2_binfo_dat bi_dat; +}; + +struct grub_nilfs2_segment_summary +{ + grub_uint32_t ss_datasum; + grub_uint32_t ss_sumsum; + grub_uint32_t ss_magic; + grub_uint16_t ss_bytes; + grub_uint16_t ss_flags; + grub_uint64_t ss_seq; + grub_uint64_t ss_create; + grub_uint64_t ss_next; + grub_uint32_t ss_nblocks; + grub_uint32_t ss_nfinfo; + grub_uint32_t ss_sumbytes; + grub_uint32_t ss_pad; +}; + +struct grub_nilfs2_btree_node +{ + grub_uint8_t bn_flags; + grub_uint8_t bn_level; + grub_uint16_t bn_nchildren; + grub_uint32_t bn_pad; + grub_uint64_t keys[0]; +}; + +struct grub_nilfs2_palloc_group_desc +{ + grub_uint32_t pg_nfrees; +}; + +#define LOG_SIZE_GROUP_DESC 2 + +#define LOG_NILFS_DAT_ENTRY_SIZE 5 +struct grub_nilfs2_dat_entry +{ + grub_uint64_t de_blocknr; + grub_uint64_t de_start; + grub_uint64_t de_end; + grub_uint64_t de_rsv; +}; + +struct grub_nilfs2_snapshot_list +{ + grub_uint64_t ssl_next; + grub_uint64_t ssl_prev; +}; + +struct grub_nilfs2_cpfile_header +{ + grub_uint64_t ch_ncheckpoints; + grub_uint64_t ch_nsnapshots; + struct grub_nilfs2_snapshot_list ch_snapshot_list; +}; + +struct grub_nilfs2_checkpoint +{ + grub_uint32_t cp_flags; + grub_uint32_t cp_checkpoints_count; + struct grub_nilfs2_snapshot_list cp_snapshot_list; + grub_uint64_t cp_cno; + grub_uint64_t cp_create; + grub_uint64_t cp_nblk_inc; + grub_uint64_t cp_inodes_count; + grub_uint64_t cp_blocks_count; + struct grub_nilfs2_inode cp_ifile_inode; +}; + + +#define NILFS_BMAP_LARGE 0x1 +#define NILFS_BMAP_SIZE (NILFS_INODE_BMAP_SIZE * sizeof(grub_uint64_t)) + +/* nilfs extra padding for nonroot btree node. */ +#define NILFS_BTREE_NODE_EXTRA_PAD_SIZE (sizeof(grub_uint64_t)) +#define NILFS_BTREE_ROOT_SIZE NILFS_BMAP_SIZE +#define NILFS_BTREE_ROOT_NCHILDREN_MAX \ + ((NILFS_BTREE_ROOT_SIZE - sizeof(struct nilfs_btree_node)) / \ + (sizeof(grub_uint64_t) + sizeof(grub_uint64_t)) ) + + +struct grub_fshelp_node +{ + struct grub_nilfs2_data *data; + struct grub_nilfs2_inode inode; + grub_uint64_t ino; + int inode_read; +}; + +struct grub_nilfs2_data +{ + struct grub_nilfs2_super_block sblock; + struct grub_nilfs2_super_root sroot; + struct grub_nilfs2_inode ifile; + grub_disk_t disk; + struct grub_nilfs2_inode *inode; + struct grub_fshelp_node diropen; +}; + +/* Log2 size of nilfs2 block in 512 blocks. */ +#define LOG2_NILFS2_BLOCK_SIZE(data) \ + (grub_le_to_cpu32 (data->sblock.s_log_block_size) + 1) + +/* Log2 size of nilfs2 block in bytes. */ +#define LOG2_BLOCK_SIZE(data) \ + (grub_le_to_cpu32 (data->sblock.s_log_block_size) + 10) + +/* The size of an nilfs2 block in bytes. */ +#define NILFS2_BLOCK_SIZE(data) (1 << LOG2_BLOCK_SIZE (data)) + +static grub_uint64_t +grub_nilfs2_dat_translate (struct grub_nilfs2_data *data, grub_uint64_t key); +static grub_dl_t my_mod; + + + +static inline unsigned long +grub_nilfs2_log_palloc_entries_per_group (struct grub_nilfs2_data *data) +{ + return LOG2_BLOCK_SIZE (data) + 3; +} + +static inline grub_uint64_t +grub_nilfs2_palloc_group (struct grub_nilfs2_data *data, + grub_uint64_t nr, grub_uint64_t * offset) +{ + *offset = nr & ((1 << grub_nilfs2_log_palloc_entries_per_group (data)) - 1); + return nr >> grub_nilfs2_log_palloc_entries_per_group (data); +} + +static inline grub_uint32_t +grub_nilfs2_palloc_log_groups_per_desc_block (struct grub_nilfs2_data *data) +{ + return LOG2_BLOCK_SIZE (data) - LOG_SIZE_GROUP_DESC; + + COMPILE_TIME_ASSERT (sizeof (struct grub_nilfs2_palloc_group_desc) + == (1 << LOG_SIZE_GROUP_DESC)); +} + +static inline grub_uint32_t +grub_nilfs2_log_entries_per_block_log (struct grub_nilfs2_data *data, + unsigned long log_entry_size) +{ + return LOG2_BLOCK_SIZE (data) - log_entry_size; +} + + +static inline grub_uint32_t +grub_nilfs2_blocks_per_group_log (struct grub_nilfs2_data *data, + unsigned long log_entry_size) +{ + return (1 << (grub_nilfs2_log_palloc_entries_per_group (data) + - grub_nilfs2_log_entries_per_block_log (data, + log_entry_size))) + 1; +} + +static inline grub_uint32_t +grub_nilfs2_blocks_per_desc_block_log (struct grub_nilfs2_data *data, + unsigned long log_entry_size) +{ + return(grub_nilfs2_blocks_per_group_log (data, log_entry_size) + << grub_nilfs2_palloc_log_groups_per_desc_block (data)) + 1; +} + +static inline grub_uint32_t +grub_nilfs2_palloc_desc_block_offset_log (struct grub_nilfs2_data *data, + unsigned long group, + unsigned long log_entry_size) +{ + grub_uint32_t desc_block = + group >> grub_nilfs2_palloc_log_groups_per_desc_block (data); + return desc_block * grub_nilfs2_blocks_per_desc_block_log (data, + log_entry_size); +} + +static inline grub_uint32_t +grub_nilfs2_palloc_bitmap_block_offset (struct grub_nilfs2_data *data, + unsigned long group, + unsigned long log_entry_size) +{ + unsigned long desc_offset = group + & ((1 << grub_nilfs2_palloc_log_groups_per_desc_block (data)) - 1); + + return grub_nilfs2_palloc_desc_block_offset_log (data, group, log_entry_size) + + 1 + + desc_offset * grub_nilfs2_blocks_per_group_log (data, log_entry_size); +} + +static inline grub_uint32_t +grub_nilfs2_palloc_entry_offset_log (struct grub_nilfs2_data *data, + grub_uint64_t nr, + unsigned long log_entry_size) +{ + unsigned long group; + grub_uint64_t group_offset; + + group = grub_nilfs2_palloc_group (data, nr, &group_offset); + + return grub_nilfs2_palloc_bitmap_block_offset (data, group, + log_entry_size) + 1 + + (group_offset >> grub_nilfs2_log_entries_per_block_log (data, + log_entry_size)); + +} + +static inline struct grub_nilfs2_btree_node * +grub_nilfs2_btree_get_root (struct grub_nilfs2_inode *inode) +{ + return (struct grub_nilfs2_btree_node *) &inode->i_bmap[0]; +} + +static inline int +grub_nilfs2_btree_get_level (struct grub_nilfs2_btree_node *node) +{ + return node->bn_level; +} + +static inline grub_uint64_t * +grub_nilfs2_btree_node_dkeys (struct grub_nilfs2_btree_node *node) +{ + return (node->keys + + ((node->bn_flags & NILFS_BTREE_NODE_ROOT) ? + 0 : (NILFS_BTREE_NODE_EXTRA_PAD_SIZE / sizeof (grub_uint64_t)))); +} + +static inline grub_uint64_t +grub_nilfs2_btree_node_get_key (struct grub_nilfs2_btree_node *node, + int index) +{ + return grub_le_to_cpu64 (*(grub_nilfs2_btree_node_dkeys (node) + index)); +} + +static inline int +grub_nilfs2_btree_node_lookup (struct grub_nilfs2_btree_node *node, + grub_uint64_t key, int *indexp) +{ + grub_uint64_t nkey; + int index, low, high, s; + + low = 0; + high = grub_le_to_cpu16 (node->bn_nchildren) - 1; + index = 0; + s = 0; + while (low <= high) + { + index = (low + high) / 2; + nkey = grub_nilfs2_btree_node_get_key (node, index); + if (nkey == key) + { + *indexp = index; + return 1; + } + else if (nkey < key) + { + low = index + 1; + s = -1; + } + else + { + high = index - 1; + s = 1; + } + } + + if (node->bn_level > NILFS_BTREE_LEVEL_NODE_MIN) + { + if (s > 0 && index > 0) + index--; + } + else if (s < 0) + index++; + + *indexp = index; + return s == 0; +} + +static inline int +grub_nilfs2_btree_node_nchildren_max (struct grub_nilfs2_data *data, + struct grub_nilfs2_btree_node *node) +{ + int node_children_max = ((NILFS2_BLOCK_SIZE (data) - + sizeof (struct grub_nilfs2_btree_node) - + NILFS_BTREE_NODE_EXTRA_PAD_SIZE) / + (sizeof (grub_uint64_t) + sizeof (grub_uint64_t))); + + return (node->bn_flags & NILFS_BTREE_NODE_ROOT) ? 3 : node_children_max; +} + +static inline grub_uint64_t * +grub_nilfs2_btree_node_dptrs (struct grub_nilfs2_data *data, + struct grub_nilfs2_btree_node *node) +{ + return (grub_uint64_t *) (grub_nilfs2_btree_node_dkeys (node) + + grub_nilfs2_btree_node_nchildren_max (data, + node)); +} + +static inline grub_uint64_t +grub_nilfs2_btree_node_get_ptr (struct grub_nilfs2_data *data, + struct grub_nilfs2_btree_node *node, + int index) +{ + return + grub_le_to_cpu64 (*(grub_nilfs2_btree_node_dptrs (data, node) + index)); +} + +static inline int +grub_nilfs2_btree_get_nonroot_node (struct grub_nilfs2_data *data, + grub_uint64_t ptr, void *block) +{ + grub_disk_t disk = data->disk; + unsigned int nilfs2_block_count = (1 << LOG2_NILFS2_BLOCK_SIZE (data)); + + return grub_disk_read (disk, ptr * nilfs2_block_count, 0, + NILFS2_BLOCK_SIZE (data), block); +} + +static grub_uint64_t +grub_nilfs2_btree_lookup (struct grub_nilfs2_data *data, + struct grub_nilfs2_inode *inode, + grub_uint64_t key, int need_translate) +{ + struct grub_nilfs2_btree_node *node; + void *block; + grub_uint64_t ptr; + int level, found = 0, index; + + block = grub_malloc (NILFS2_BLOCK_SIZE (data)); + if (!block) + return -1; + + node = grub_nilfs2_btree_get_root (inode); + level = grub_nilfs2_btree_get_level (node); + + found = grub_nilfs2_btree_node_lookup (node, key, &index); + ptr = grub_nilfs2_btree_node_get_ptr (data, node, index); + if (need_translate) + ptr = grub_nilfs2_dat_translate (data, ptr); + + for (level--; level >= NILFS_BTREE_LEVEL_NODE_MIN; level--) + { + grub_nilfs2_btree_get_nonroot_node (data, ptr, block); + if (grub_errno) + { + goto fail; + } + node = (struct grub_nilfs2_btree_node *) block; + + if (node->bn_level != level) + { + grub_error (GRUB_ERR_BAD_FS, "btree level mismatch\n"); + goto fail; + } + + if (!found) + found = grub_nilfs2_btree_node_lookup (node, key, &index); + else + index = 0; + + if (index < grub_nilfs2_btree_node_nchildren_max (data, node)) + { + ptr = grub_nilfs2_btree_node_get_ptr (data, node, index); + if (need_translate) + ptr = grub_nilfs2_dat_translate (data, ptr); + } + else + { + grub_error (GRUB_ERR_BAD_FS, "btree corruption\n"); + goto fail; + } + } + + grub_free (block); + + if (!found) + return -1; + + return ptr; + fail: + grub_free (block); + return -1; +} + +static inline grub_uint64_t +grub_nilfs2_direct_lookup (struct grub_nilfs2_inode *inode, grub_uint64_t key) +{ + return grub_le_to_cpu64 (inode->i_bmap[1 + key]); +} + +static inline grub_uint64_t +grub_nilfs2_bmap_lookup (struct grub_nilfs2_data *data, + struct grub_nilfs2_inode *inode, + grub_uint64_t key, int need_translate) +{ + struct grub_nilfs2_btree_node *root = grub_nilfs2_btree_get_root (inode); + if (root->bn_flags & NILFS_BMAP_LARGE) + return grub_nilfs2_btree_lookup (data, inode, key, need_translate); + else + { + grub_uint64_t ptr; + ptr = grub_nilfs2_direct_lookup (inode, key); + if (need_translate) + ptr = grub_nilfs2_dat_translate (data, ptr); + return ptr; + } +} + +static grub_uint64_t +grub_nilfs2_dat_translate (struct grub_nilfs2_data *data, grub_uint64_t key) +{ + struct grub_nilfs2_dat_entry entry; + grub_disk_t disk = data->disk; + grub_uint64_t pptr; + grub_uint64_t blockno, offset; + unsigned int nilfs2_block_count = (1 << LOG2_NILFS2_BLOCK_SIZE (data)); + + blockno = grub_nilfs2_palloc_entry_offset_log (data, key, + LOG_NILFS_DAT_ENTRY_SIZE); + + offset = ((key * sizeof (struct grub_nilfs2_dat_entry)) + & ((1 << LOG2_BLOCK_SIZE (data)) - 1)); + + pptr = grub_nilfs2_bmap_lookup (data, &data->sroot.sr_dat, blockno, 0); + if (pptr == (grub_uint64_t) - 1) + { + grub_error (GRUB_ERR_BAD_FS, "btree lookup failure"); + return -1; + } + + grub_disk_read (disk, pptr * nilfs2_block_count, offset, + sizeof (struct grub_nilfs2_dat_entry), &entry); + + return grub_le_to_cpu64 (entry.de_blocknr); +} + + +static grub_disk_addr_t +grub_nilfs2_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) +{ + struct grub_nilfs2_data *data = node->data; + struct grub_nilfs2_inode *inode = &node->inode; + grub_uint64_t pptr = -1; + + pptr = grub_nilfs2_bmap_lookup (data, inode, fileblock, 1); + if (pptr == (grub_uint64_t) - 1) + { + grub_error (GRUB_ERR_BAD_FS, "btree lookup failure"); + return -1; + } + + return pptr; +} + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_nilfs2_read_file (grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + return grub_fshelp_read_file (node->data->disk, node, + read_hook, read_hook_data, + pos, len, buf, grub_nilfs2_read_block, + grub_le_to_cpu64 (node->inode.i_size), + LOG2_NILFS2_BLOCK_SIZE (node->data), 0); + +} + +static grub_err_t +grub_nilfs2_read_checkpoint (struct grub_nilfs2_data *data, + grub_uint64_t cpno, + struct grub_nilfs2_checkpoint *cpp) +{ + grub_uint64_t blockno; + grub_uint64_t offset; + grub_uint64_t pptr; + grub_disk_t disk = data->disk; + unsigned int nilfs2_block_count = (1 << LOG2_NILFS2_BLOCK_SIZE (data)); + + /* Assume sizeof(struct grub_nilfs2_cpfile_header) < + sizeof(struct grub_nilfs2_checkpoint). + */ + blockno = grub_divmod64 (cpno, NILFS2_BLOCK_SIZE (data) / + sizeof (struct grub_nilfs2_checkpoint), &offset); + + pptr = grub_nilfs2_bmap_lookup (data, &data->sroot.sr_cpfile, blockno, 1); + if (pptr == (grub_uint64_t) - 1) + { + return grub_error (GRUB_ERR_BAD_FS, "btree lookup failure"); + } + + return grub_disk_read (disk, pptr * nilfs2_block_count, + offset * sizeof (struct grub_nilfs2_checkpoint), + sizeof (struct grub_nilfs2_checkpoint), cpp); +} + +static inline grub_err_t +grub_nilfs2_read_last_checkpoint (struct grub_nilfs2_data *data, + struct grub_nilfs2_checkpoint *cpp) +{ + return grub_nilfs2_read_checkpoint (data, + grub_le_to_cpu64 (data-> + sblock.s_last_cno), + cpp); +} + +/* Read the inode INO for the file described by DATA into INODE. */ +static grub_err_t +grub_nilfs2_read_inode (struct grub_nilfs2_data *data, + grub_uint64_t ino, struct grub_nilfs2_inode *inodep) +{ + grub_uint64_t blockno; + grub_uint64_t offset; + grub_uint64_t pptr; + grub_disk_t disk = data->disk; + unsigned int nilfs2_block_count = (1 << LOG2_NILFS2_BLOCK_SIZE (data)); + + blockno = grub_nilfs2_palloc_entry_offset_log (data, ino, + LOG_INODE_SIZE); + + offset = ((sizeof (struct grub_nilfs2_inode) * ino) + & ((1 << LOG2_BLOCK_SIZE (data)) - 1)); + pptr = grub_nilfs2_bmap_lookup (data, &data->ifile, blockno, 1); + if (pptr == (grub_uint64_t) - 1) + { + return grub_error (GRUB_ERR_BAD_FS, "btree lookup failure"); + } + + return grub_disk_read (disk, pptr * nilfs2_block_count, offset, + sizeof (struct grub_nilfs2_inode), inodep); +} + +static int +grub_nilfs2_valid_sb (struct grub_nilfs2_super_block *sbp) +{ + if (grub_le_to_cpu16 (sbp->s_magic) != NILFS2_SUPER_MAGIC) + return 0; + + if (grub_le_to_cpu32 (sbp->s_rev_level) != NILFS_SUPORT_REV) + return 0; + + /* 20 already means 1GiB blocks. We don't want to deal with blocks overflowing int32. */ + if (grub_le_to_cpu32 (sbp->s_log_block_size) > 20) + return 0; + + return 1; +} + +static grub_err_t +grub_nilfs2_load_sb (struct grub_nilfs2_data *data) +{ + grub_disk_t disk = data->disk; + struct grub_nilfs2_super_block sb2; + grub_uint64_t partition_size; + int valid[2]; + int swp = 0; + grub_err_t err; + + /* Read first super block. */ + err = grub_disk_read (disk, NILFS_1ST_SUPER_BLOCK, 0, + sizeof (struct grub_nilfs2_super_block), &data->sblock); + if (err) + return err; + /* Make sure if 1st super block is valid. */ + valid[0] = grub_nilfs2_valid_sb (&data->sblock); + + if (valid[0]) + partition_size = (grub_le_to_cpu64 (data->sblock.s_dev_size) + >> GRUB_DISK_SECTOR_BITS); + else + partition_size = grub_disk_get_size (disk); + if (partition_size != GRUB_DISK_SIZE_UNKNOWN) + { + /* Read second super block. */ + err = grub_disk_read (disk, NILFS_2ND_SUPER_BLOCK (partition_size), 0, + sizeof (struct grub_nilfs2_super_block), &sb2); + if (err) + { + valid[1] = 0; + grub_errno = GRUB_ERR_NONE; + } + else + /* Make sure if 2nd super block is valid. */ + valid[1] = grub_nilfs2_valid_sb (&sb2); + } + else + /* 2nd super block may not exist, so it's invalid. */ + valid[1] = 0; + + if (!valid[0] && !valid[1]) + return grub_error (GRUB_ERR_BAD_FS, "not a nilfs2 filesystem"); + + swp = valid[1] && (!valid[0] || + grub_le_to_cpu64 (data->sblock.s_last_cno) < + grub_le_to_cpu64 (sb2.s_last_cno)); + + /* swap if first super block is invalid or older than second one. */ + if (swp) + grub_memcpy (&data->sblock, &sb2, + sizeof (struct grub_nilfs2_super_block)); + + return GRUB_ERR_NONE; +} + +static struct grub_nilfs2_data * +grub_nilfs2_mount (grub_disk_t disk) +{ + struct grub_nilfs2_data *data; + struct grub_nilfs2_segment_summary ss; + struct grub_nilfs2_checkpoint last_checkpoint; + grub_uint64_t last_pseg; + grub_uint32_t nblocks; + unsigned int nilfs2_block_count; + + data = grub_malloc (sizeof (struct grub_nilfs2_data)); + if (!data) + return 0; + + data->disk = disk; + + /* Read the superblock. */ + grub_nilfs2_load_sb (data); + if (grub_errno) + goto fail; + + nilfs2_block_count = (1 << LOG2_NILFS2_BLOCK_SIZE (data)); + + /* Read the last segment summary. */ + last_pseg = grub_le_to_cpu64 (data->sblock.s_last_pseg); + grub_disk_read (disk, last_pseg * nilfs2_block_count, 0, + sizeof (struct grub_nilfs2_segment_summary), &ss); + + if (grub_errno) + goto fail; + + /* Read the super root block. */ + nblocks = grub_le_to_cpu32 (ss.ss_nblocks); + grub_disk_read (disk, (last_pseg + (nblocks - 1)) * nilfs2_block_count, 0, + sizeof (struct grub_nilfs2_super_root), &data->sroot); + + if (grub_errno) + goto fail; + + grub_nilfs2_read_last_checkpoint (data, &last_checkpoint); + + if (grub_errno) + goto fail; + + grub_memcpy (&data->ifile, &last_checkpoint.cp_ifile_inode, + sizeof (struct grub_nilfs2_inode)); + + data->diropen.data = data; + data->diropen.ino = 2; + data->diropen.inode_read = 1; + data->inode = &data->diropen.inode; + + grub_nilfs2_read_inode (data, 2, data->inode); + + return data; + +fail: + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not a nilfs2 filesystem"); + + grub_free (data); + return 0; +} + +static char * +grub_nilfs2_read_symlink (grub_fshelp_node_t node) +{ + char *symlink; + struct grub_fshelp_node *diro = node; + + if (!diro->inode_read) + { + grub_nilfs2_read_inode (diro->data, diro->ino, &diro->inode); + if (grub_errno) + return 0; + } + + symlink = grub_malloc (grub_le_to_cpu64 (diro->inode.i_size) + 1); + if (!symlink) + return 0; + + grub_nilfs2_read_file (diro, 0, 0, 0, + grub_le_to_cpu64 (diro->inode.i_size), symlink); + if (grub_errno) + { + grub_free (symlink); + return 0; + } + + symlink[grub_le_to_cpu64 (diro->inode.i_size)] = '\0'; + return symlink; +} + +static int +grub_nilfs2_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + grub_off_t fpos = 0; + struct grub_fshelp_node *diro = (struct grub_fshelp_node *) dir; + + if (!diro->inode_read) + { + grub_nilfs2_read_inode (diro->data, diro->ino, &diro->inode); + if (grub_errno) + return 0; + } + + /* Iterate files. */ + while (fpos < grub_le_to_cpu64 (diro->inode.i_size)) + { + struct grub_nilfs2_dir_entry dirent; + + grub_nilfs2_read_file (diro, 0, 0, fpos, + sizeof (struct grub_nilfs2_dir_entry), + (char *) &dirent); + if (grub_errno) + return 0; + + if (dirent.rec_len == 0) + return 0; + + if (dirent.name_len != 0) + { + char filename[MAX_NAMELEN + 1]; + struct grub_fshelp_node *fdiro; + enum grub_fshelp_filetype type = GRUB_FSHELP_UNKNOWN; + + grub_nilfs2_read_file (diro, 0, 0, + fpos + sizeof (struct grub_nilfs2_dir_entry), + dirent.name_len, filename); + if (grub_errno) + return 0; + + fdiro = grub_malloc (sizeof (struct grub_fshelp_node)); + if (!fdiro) + return 0; + + fdiro->data = diro->data; + fdiro->ino = grub_le_to_cpu64 (dirent.inode); + + filename[dirent.name_len] = '\0'; + + if (dirent.file_type != NILFS_FT_UNKNOWN) + { + fdiro->inode_read = 0; + + if (dirent.file_type == NILFS_FT_DIR) + type = GRUB_FSHELP_DIR; + else if (dirent.file_type == NILFS_FT_SYMLINK) + type = GRUB_FSHELP_SYMLINK; + else if (dirent.file_type == NILFS_FT_REG_FILE) + type = GRUB_FSHELP_REG; + } + else + { + /* The filetype can not be read from the dirent, read + the inode to get more information. */ + grub_nilfs2_read_inode (diro->data, + grub_le_to_cpu64 (dirent.inode), + &fdiro->inode); + if (grub_errno) + { + grub_free (fdiro); + return 0; + } + + fdiro->inode_read = 1; + + if ((grub_le_to_cpu16 (fdiro->inode.i_mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_DIRECTORY) + type = GRUB_FSHELP_DIR; + else if ((grub_le_to_cpu16 (fdiro->inode.i_mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_SYMLINK) + type = GRUB_FSHELP_SYMLINK; + else if ((grub_le_to_cpu16 (fdiro->inode.i_mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_REG) + type = GRUB_FSHELP_REG; + } + + if (hook (filename, type, fdiro, hook_data)) + return 1; + } + + fpos += grub_le_to_cpu16 (dirent.rec_len); + } + + return 0; +} + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_nilfs2_open (struct grub_file *file, const char *name) +{ + struct grub_nilfs2_data *data = NULL; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_nilfs2_mount (file->device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (name, &data->diropen, &fdiro, + grub_nilfs2_iterate_dir, grub_nilfs2_read_symlink, + GRUB_FSHELP_REG); + if (grub_errno) + goto fail; + + if (!fdiro->inode_read) + { + grub_nilfs2_read_inode (data, fdiro->ino, &fdiro->inode); + if (grub_errno) + goto fail; + } + + grub_memcpy (data->inode, &fdiro->inode, sizeof (struct grub_nilfs2_inode)); + grub_free (fdiro); + + file->size = grub_le_to_cpu64 (data->inode->i_size); + file->data = data; + file->offset = 0; + + return 0; + +fail: + if (fdiro != &data->diropen) + grub_free (fdiro); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_nilfs2_close (grub_file_t file) +{ + grub_free (file->data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + +/* Read LEN bytes data from FILE into BUF. */ +static grub_ssize_t +grub_nilfs2_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_nilfs2_data *data = (struct grub_nilfs2_data *) file->data; + + return grub_nilfs2_read_file (&data->diropen, + file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + +/* Context for grub_nilfs2_dir. */ +struct grub_nilfs2_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; + struct grub_nilfs2_data *data; +}; + +/* Helper for grub_nilfs2_dir. */ +static int +grub_nilfs2_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_nilfs2_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + if (!node->inode_read) + { + grub_nilfs2_read_inode (ctx->data, node->ino, &node->inode); + if (!grub_errno) + node->inode_read = 1; + grub_errno = GRUB_ERR_NONE; + } + if (node->inode_read) + { + info.mtimeset = 1; + info.mtime = grub_le_to_cpu64 (node->inode.i_mtime); + } + + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_nilfs2_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_nilfs2_dir_ctx ctx = { + .hook = hook, + .hook_data = hook_data + }; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + ctx.data = grub_nilfs2_mount (device->disk); + if (!ctx.data) + goto fail; + + grub_fshelp_find_file (path, &ctx.data->diropen, &fdiro, + grub_nilfs2_iterate_dir, grub_nilfs2_read_symlink, + GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + grub_nilfs2_iterate_dir (fdiro, grub_nilfs2_dir_iter, &ctx); + +fail: + if (fdiro != &ctx.data->diropen) + grub_free (fdiro); + grub_free (ctx.data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_nilfs2_label (grub_device_t device, char **label) +{ + struct grub_nilfs2_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_nilfs2_mount (disk); + if (data) + *label = grub_strndup (data->sblock.s_volume_name, + sizeof (data->sblock.s_volume_name)); + else + *label = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_nilfs2_uuid (grub_device_t device, char **uuid) +{ + struct grub_nilfs2_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_nilfs2_mount (disk); + if (data) + { + *uuid = + grub_xasprintf + ("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", + data->sblock.s_uuid[0], data->sblock.s_uuid[1], + data->sblock.s_uuid[2], data->sblock.s_uuid[3], + data->sblock.s_uuid[4], data->sblock.s_uuid[5], + data->sblock.s_uuid[6], data->sblock.s_uuid[7], + data->sblock.s_uuid[8], data->sblock.s_uuid[9], + data->sblock.s_uuid[10], data->sblock.s_uuid[11], + data->sblock.s_uuid[12], data->sblock.s_uuid[13], + data->sblock.s_uuid[14], data->sblock.s_uuid[15]); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +/* Get mtime. */ +static grub_err_t +grub_nilfs2_mtime (grub_device_t device, grub_int32_t * tm) +{ + struct grub_nilfs2_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_nilfs2_mount (disk); + if (!data) + *tm = 0; + else + *tm = (grub_int32_t) grub_le_to_cpu64 (data->sblock.s_wtime); + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + + +static struct grub_fs grub_nilfs2_fs = { + .name = "nilfs2", + .dir = grub_nilfs2_dir, + .open = grub_nilfs2_open, + .read = grub_nilfs2_read, + .close = grub_nilfs2_close, + .label = grub_nilfs2_label, + .uuid = grub_nilfs2_uuid, + .mtime = grub_nilfs2_mtime, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 0, +#endif + .next = 0 +}; + +GRUB_MOD_INIT (nilfs2) +{ + COMPILE_TIME_ASSERT ((1 << LOG_NILFS_DAT_ENTRY_SIZE) + == sizeof (struct + grub_nilfs2_dat_entry)); + COMPILE_TIME_ASSERT (1 << LOG_INODE_SIZE + == sizeof (struct grub_nilfs2_inode)); + grub_fs_register (&grub_nilfs2_fs); + my_mod = mod; +} + +GRUB_MOD_FINI (nilfs2) +{ + grub_fs_unregister (&grub_nilfs2_fs); +} diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c new file mode 100644 index 000000000..6f8468862 --- /dev/null +++ b/grub-core/fs/ntfs.c @@ -0,0 +1,1237 @@ +/* ntfs.c - NTFS filesystem */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define grub_fshelp_node grub_ntfs_file + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_dl_t my_mod; + +#define grub_fshelp_node grub_ntfs_file + +static inline grub_uint16_t +u16at (void *ptr, grub_size_t ofs) +{ + return grub_le_to_cpu16 (grub_get_unaligned16 ((char *) ptr + ofs)); +} + +static inline grub_uint32_t +u32at (void *ptr, grub_size_t ofs) +{ + return grub_le_to_cpu32 (grub_get_unaligned32 ((char *) ptr + ofs)); +} + +static inline grub_uint64_t +u64at (void *ptr, grub_size_t ofs) +{ + return grub_le_to_cpu64 (grub_get_unaligned64 ((char *) ptr + ofs)); +} + +grub_ntfscomp_func_t grub_ntfscomp_func; + +static grub_err_t +fixup (grub_uint8_t *buf, grub_size_t len, const grub_uint8_t *magic) +{ + grub_uint16_t ss; + grub_uint8_t *pu; + grub_uint16_t us; + + COMPILE_TIME_ASSERT ((1 << GRUB_NTFS_BLK_SHR) == GRUB_DISK_SECTOR_SIZE); + + if (grub_memcmp (buf, magic, 4)) + return grub_error (GRUB_ERR_BAD_FS, "%s label not found", magic); + + ss = u16at (buf, 6) - 1; + if (ss != len) + return grub_error (GRUB_ERR_BAD_FS, "size not match"); + pu = buf + u16at (buf, 4); + us = u16at (pu, 0); + buf -= 2; + while (ss > 0) + { + buf += GRUB_DISK_SECTOR_SIZE; + pu += 2; + if (u16at (buf, 0) != us) + return grub_error (GRUB_ERR_BAD_FS, "fixup signature not match"); + buf[0] = pu[0]; + buf[1] = pu[1]; + ss--; + } + + return 0; +} + +static grub_err_t read_mft (struct grub_ntfs_data *data, grub_uint8_t *buf, + grub_uint64_t mftno); +static grub_err_t read_attr (struct grub_ntfs_attr *at, grub_uint8_t *dest, + grub_disk_addr_t ofs, grub_size_t len, + int cached, + grub_disk_read_hook_t read_hook, + void *read_hook_data); + +static grub_err_t read_data (struct grub_ntfs_attr *at, grub_uint8_t *pa, + grub_uint8_t *dest, + grub_disk_addr_t ofs, grub_size_t len, + int cached, + grub_disk_read_hook_t read_hook, + void *read_hook_data); + +static void +init_attr (struct grub_ntfs_attr *at, struct grub_ntfs_file *mft) +{ + at->mft = mft; + at->flags = (mft == &mft->data->mmft) ? GRUB_NTFS_AF_MMFT : 0; + at->attr_nxt = mft->buf + u16at (mft->buf, 0x14); + at->attr_end = at->emft_buf = at->edat_buf = at->sbuf = NULL; +} + +static void +free_attr (struct grub_ntfs_attr *at) +{ + grub_free (at->emft_buf); + grub_free (at->edat_buf); + grub_free (at->sbuf); +} + +static grub_uint8_t * +find_attr (struct grub_ntfs_attr *at, grub_uint8_t attr) +{ + if (at->flags & GRUB_NTFS_AF_ALST) + { + retry: + while (at->attr_nxt < at->attr_end) + { + at->attr_cur = at->attr_nxt; + at->attr_nxt += u16at (at->attr_cur, 4); + if ((*at->attr_cur == attr) || (attr == 0)) + { + grub_uint8_t *new_pos; + + if (at->flags & GRUB_NTFS_AF_MMFT) + { + if ((grub_disk_read + (at->mft->data->disk, u32at (at->attr_cur, 0x10), 0, + 512, at->emft_buf)) + || + (grub_disk_read + (at->mft->data->disk, u32at (at->attr_cur, 0x14), 0, + 512, at->emft_buf + 512))) + return NULL; + + if (fixup (at->emft_buf, at->mft->data->mft_size, + (const grub_uint8_t *) "FILE")) + return NULL; + } + else + { + if (read_mft (at->mft->data, at->emft_buf, + u32at (at->attr_cur, 0x10))) + return NULL; + } + + new_pos = &at->emft_buf[u16at (at->emft_buf, 0x14)]; + while (*new_pos != 0xFF) + { + if ((*new_pos == *at->attr_cur) + && (u16at (new_pos, 0xE) == u16at (at->attr_cur, 0x18))) + { + return new_pos; + } + new_pos += u16at (new_pos, 4); + } + grub_error (GRUB_ERR_BAD_FS, + "can\'t find 0x%X in attribute list", + (unsigned char) *at->attr_cur); + return NULL; + } + } + return NULL; + } + at->attr_cur = at->attr_nxt; + while (*at->attr_cur != 0xFF) + { + at->attr_nxt += u16at (at->attr_cur, 4); + if (*at->attr_cur == GRUB_NTFS_AT_ATTRIBUTE_LIST) + at->attr_end = at->attr_cur; + if ((*at->attr_cur == attr) || (attr == 0)) + return at->attr_cur; + at->attr_cur = at->attr_nxt; + } + if (at->attr_end) + { + grub_uint8_t *pa; + + at->emft_buf = grub_malloc (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR); + if (at->emft_buf == NULL) + return NULL; + + pa = at->attr_end; + if (pa[8]) + { + grub_uint32_t n; + + n = ((u32at (pa, 0x30) + GRUB_DISK_SECTOR_SIZE - 1) + & (~(GRUB_DISK_SECTOR_SIZE - 1))); + at->attr_cur = at->attr_end; + at->edat_buf = grub_malloc (n); + if (!at->edat_buf) + return NULL; + if (read_data (at, pa, at->edat_buf, 0, n, 0, 0, 0)) + { + grub_error (GRUB_ERR_BAD_FS, + "fail to read non-resident attribute list"); + return NULL; + } + at->attr_nxt = at->edat_buf; + at->attr_end = at->edat_buf + u32at (pa, 0x30); + } + else + { + at->attr_nxt = at->attr_end + u16at (pa, 0x14); + at->attr_end = at->attr_end + u32at (pa, 4); + } + at->flags |= GRUB_NTFS_AF_ALST; + while (at->attr_nxt < at->attr_end) + { + if ((*at->attr_nxt == attr) || (attr == 0)) + break; + at->attr_nxt += u16at (at->attr_nxt, 4); + } + if (at->attr_nxt >= at->attr_end) + return NULL; + + if ((at->flags & GRUB_NTFS_AF_MMFT) && (attr == GRUB_NTFS_AT_DATA)) + { + at->flags |= GRUB_NTFS_AF_GPOS; + at->attr_cur = at->attr_nxt; + pa = at->attr_cur; + grub_set_unaligned32 ((char *) pa + 0x10, + grub_cpu_to_le32 (at->mft->data->mft_start)); + grub_set_unaligned32 ((char *) pa + 0x14, + grub_cpu_to_le32 (at->mft->data->mft_start + + 1)); + pa = at->attr_nxt + u16at (pa, 4); + while (pa < at->attr_end) + { + if (*pa != attr) + break; + if (read_attr + (at, pa + 0x10, + u32at (pa, 0x10) * (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR), + at->mft->data->mft_size << GRUB_NTFS_BLK_SHR, 0, 0, 0)) + return NULL; + pa += u16at (pa, 4); + } + at->attr_nxt = at->attr_cur; + at->flags &= ~GRUB_NTFS_AF_GPOS; + } + goto retry; + } + return NULL; +} + +static grub_uint8_t * +locate_attr (struct grub_ntfs_attr *at, struct grub_ntfs_file *mft, + grub_uint8_t attr) +{ + grub_uint8_t *pa; + + init_attr (at, mft); + pa = find_attr (at, attr); + if (pa == NULL) + return NULL; + if ((at->flags & GRUB_NTFS_AF_ALST) == 0) + { + while (1) + { + pa = find_attr (at, attr); + if (pa == NULL) + break; + if (at->flags & GRUB_NTFS_AF_ALST) + return pa; + } + grub_errno = GRUB_ERR_NONE; + free_attr (at); + init_attr (at, mft); + pa = find_attr (at, attr); + } + return pa; +} + +static grub_disk_addr_t +read_run_data (const grub_uint8_t *run, int nn, int sig) +{ + grub_uint64_t r = 0; + + if (sig && nn && (run[nn - 1] & 0x80)) + r = -1; + + grub_memcpy (&r, run, nn); + + return grub_le_to_cpu64 (r); +} + +grub_err_t +grub_ntfs_read_run_list (struct grub_ntfs_rlst * ctx) +{ + grub_uint8_t c1, c2; + grub_disk_addr_t val; + grub_uint8_t *run; + + run = ctx->cur_run; +retry: + c1 = ((*run) & 0x7); + c2 = ((*run) >> 4) & 0x7; + run++; + if (!c1) + { + if ((ctx->attr) && (ctx->attr->flags & GRUB_NTFS_AF_ALST)) + { + grub_disk_read_hook_t save_hook; + + save_hook = ctx->comp.disk->read_hook; + ctx->comp.disk->read_hook = 0; + run = find_attr (ctx->attr, *ctx->attr->attr_cur); + ctx->comp.disk->read_hook = save_hook; + if (run) + { + if (run[8] == 0) + return grub_error (GRUB_ERR_BAD_FS, + "$DATA should be non-resident"); + + run += u16at (run, 0x20); + ctx->curr_lcn = 0; + goto retry; + } + } + return grub_error (GRUB_ERR_BAD_FS, "run list overflown"); + } + ctx->curr_vcn = ctx->next_vcn; + ctx->next_vcn += read_run_data (run, c1, 0); /* length of current VCN */ + run += c1; + val = read_run_data (run, c2, 1); /* offset to previous LCN */ + run += c2; + ctx->curr_lcn += val; + if (val == 0) + ctx->flags |= GRUB_NTFS_RF_BLNK; + else + ctx->flags &= ~GRUB_NTFS_RF_BLNK; + ctx->cur_run = run; + return 0; +} + +static grub_disk_addr_t +grub_ntfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t block) +{ + struct grub_ntfs_rlst *ctx; + + ctx = (struct grub_ntfs_rlst *) node; + if (block >= ctx->next_vcn) + { + if (grub_ntfs_read_run_list (ctx)) + return -1; + return ctx->curr_lcn; + } + else + return (ctx->flags & GRUB_NTFS_RF_BLNK) ? 0 : (block - + ctx->curr_vcn + ctx->curr_lcn); +} + +static grub_err_t +read_data (struct grub_ntfs_attr *at, grub_uint8_t *pa, grub_uint8_t *dest, + grub_disk_addr_t ofs, grub_size_t len, int cached, + grub_disk_read_hook_t read_hook, void *read_hook_data) +{ + struct grub_ntfs_rlst cc, *ctx; + + if (len == 0) + return 0; + + grub_memset (&cc, 0, sizeof (cc)); + ctx = &cc; + ctx->attr = at; + ctx->comp.log_spc = at->mft->data->log_spc; + ctx->comp.disk = at->mft->data->disk; + + if (read_hook == grub_file_progress_hook) + ctx->file = read_hook_data; + + if (pa[8] == 0) + { + if (ofs + len > u32at (pa, 0x10)) + return grub_error (GRUB_ERR_BAD_FS, "read out of range"); + grub_memcpy (dest, pa + u32at (pa, 0x14) + ofs, len); + return 0; + } + + ctx->cur_run = pa + u16at (pa, 0x20); + + ctx->next_vcn = u32at (pa, 0x10); + ctx->curr_lcn = 0; + + if ((pa[0xC] & GRUB_NTFS_FLAG_COMPRESSED) + && !(at->flags & GRUB_NTFS_AF_GPOS)) + { + if (!cached) + return grub_error (GRUB_ERR_BAD_FS, "attribute can\'t be compressed"); + + return (grub_ntfscomp_func) ? grub_ntfscomp_func (dest, ofs, len, ctx) + : grub_error (GRUB_ERR_BAD_FS, N_("module `%s' isn't loaded"), + "ntfscomp"); + } + + ctx->target_vcn = ofs >> (GRUB_NTFS_BLK_SHR + ctx->comp.log_spc); + while (ctx->next_vcn <= ctx->target_vcn) + { + if (grub_ntfs_read_run_list (ctx)) + return grub_errno; + } + + if (at->flags & GRUB_NTFS_AF_GPOS) + { + grub_disk_addr_t st0, st1; + grub_uint64_t m; + + m = (ofs >> GRUB_NTFS_BLK_SHR) & ((1 << ctx->comp.log_spc) - 1); + + st0 = + ((ctx->target_vcn - ctx->curr_vcn + ctx->curr_lcn) << ctx->comp.log_spc) + m; + st1 = st0 + 1; + if (st1 == + (ctx->next_vcn - ctx->curr_vcn + ctx->curr_lcn) << ctx->comp.log_spc) + { + if (grub_ntfs_read_run_list (ctx)) + return grub_errno; + st1 = ctx->curr_lcn << ctx->comp.log_spc; + } + grub_set_unaligned32 (dest, grub_cpu_to_le32 (st0)); + grub_set_unaligned32 (dest + 4, grub_cpu_to_le32 (st1)); + return 0; + } + + grub_fshelp_read_file (ctx->comp.disk, (grub_fshelp_node_t) ctx, + read_hook, read_hook_data, ofs, len, + (char *) dest, + grub_ntfs_read_block, ofs + len, + ctx->comp.log_spc, 0); + return grub_errno; +} + +static grub_err_t +read_attr (struct grub_ntfs_attr *at, grub_uint8_t *dest, grub_disk_addr_t ofs, + grub_size_t len, int cached, + grub_disk_read_hook_t read_hook, void *read_hook_data) +{ + grub_uint8_t *save_cur; + grub_uint8_t attr; + grub_uint8_t *pp; + grub_err_t ret; + + save_cur = at->attr_cur; + at->attr_nxt = at->attr_cur; + attr = *at->attr_nxt; + if (at->flags & GRUB_NTFS_AF_ALST) + { + grub_uint8_t *pa; + grub_disk_addr_t vcn; + + /* If compression is possible make sure that we include possible + compressed block size. */ + if (GRUB_NTFS_LOG_COM_SEC >= at->mft->data->log_spc) + vcn = ((ofs >> GRUB_NTFS_COM_LOG_LEN) + << (GRUB_NTFS_LOG_COM_SEC - at->mft->data->log_spc)) & ~0xFULL; + else + vcn = ofs >> (at->mft->data->log_spc + GRUB_NTFS_BLK_SHR); + pa = at->attr_nxt + u16at (at->attr_nxt, 4); + while (pa < at->attr_end) + { + if (*pa != attr) + break; + if (u32at (pa, 8) > vcn) + break; + at->attr_nxt = pa; + pa += u16at (pa, 4); + } + } + pp = find_attr (at, attr); + if (pp) + ret = read_data (at, pp, dest, ofs, len, cached, + read_hook, read_hook_data); + else + ret = + (grub_errno) ? grub_errno : grub_error (GRUB_ERR_BAD_FS, + "attribute not found"); + at->attr_cur = save_cur; + return ret; +} + +static grub_err_t +read_mft (struct grub_ntfs_data *data, grub_uint8_t *buf, grub_uint64_t mftno) +{ + if (read_attr + (&data->mmft.attr, buf, mftno * ((grub_disk_addr_t) data->mft_size << GRUB_NTFS_BLK_SHR), + data->mft_size << GRUB_NTFS_BLK_SHR, 0, 0, 0)) + return grub_error (GRUB_ERR_BAD_FS, "read MFT 0x%llx fails", (unsigned long long) mftno); + return fixup (buf, data->mft_size, (const grub_uint8_t *) "FILE"); +} + +static grub_err_t +init_file (struct grub_ntfs_file *mft, grub_uint64_t mftno) +{ + unsigned short flag; + + mft->inode_read = 1; + + mft->buf = grub_malloc (mft->data->mft_size << GRUB_NTFS_BLK_SHR); + if (mft->buf == NULL) + return grub_errno; + + if (read_mft (mft->data, mft->buf, mftno)) + return grub_errno; + + flag = u16at (mft->buf, 0x16); + if ((flag & 1) == 0) + return grub_error (GRUB_ERR_BAD_FS, "MFT 0x%llx is not in use", + (unsigned long long) mftno); + + if ((flag & 2) == 0) + { + grub_uint8_t *pa; + + pa = locate_attr (&mft->attr, mft, GRUB_NTFS_AT_DATA); + if (pa == NULL) + return grub_error (GRUB_ERR_BAD_FS, "no $DATA in MFT 0x%llx", + (unsigned long long) mftno); + + if (!pa[8]) + mft->size = u32at (pa, 0x10); + else + mft->size = u64at (pa, 0x30); + + if ((mft->attr.flags & GRUB_NTFS_AF_ALST) == 0) + mft->attr.attr_end = 0; /* Don't jump to attribute list */ + } + else + init_attr (&mft->attr, mft); + + return 0; +} + +static void +free_file (struct grub_ntfs_file *mft) +{ + free_attr (&mft->attr); + grub_free (mft->buf); +} + +static char * +get_utf8 (grub_uint8_t *in, grub_size_t len) +{ + grub_uint8_t *buf; + grub_uint16_t *tmp; + grub_size_t i; + + buf = grub_malloc (len * GRUB_MAX_UTF8_PER_UTF16 + 1); + tmp = grub_malloc (len * sizeof (tmp[0])); + if (!buf || !tmp) + { + grub_free (buf); + grub_free (tmp); + return NULL; + } + for (i = 0; i < len; i++) + tmp[i] = grub_le_to_cpu16 (grub_get_unaligned16 (in + 2 * i)); + *grub_utf16_to_utf8 (buf, tmp, len) = '\0'; + grub_free (tmp); + return (char *) buf; +} + +static int +list_file (struct grub_ntfs_file *diro, grub_uint8_t *pos, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + grub_uint8_t *np; + int ns; + + while (1) + { + grub_uint8_t namespace; + char *ustr; + + if (pos[0xC] & 2) /* end signature */ + break; + + np = pos + 0x50; + ns = *(np++); + namespace = *(np++); + + /* + * Ignore files in DOS namespace, as they will reappear as Win32 + * names. + */ + if ((ns) && (namespace != 2)) + { + enum grub_fshelp_filetype type; + struct grub_ntfs_file *fdiro; + grub_uint32_t attr; + + attr = u32at (pos, 0x48); + if (attr & GRUB_NTFS_ATTR_REPARSE) + type = GRUB_FSHELP_SYMLINK; + else if (attr & GRUB_NTFS_ATTR_DIRECTORY) + type = GRUB_FSHELP_DIR; + else + type = GRUB_FSHELP_REG; + + fdiro = grub_zalloc (sizeof (struct grub_ntfs_file)); + if (!fdiro) + return 0; + + fdiro->data = diro->data; + fdiro->ino = u64at (pos, 0) & 0xffffffffffffULL; + fdiro->mtime = u64at (pos, 0x20); + + ustr = get_utf8 (np, ns); + if (ustr == NULL) + { + grub_free (fdiro); + return 0; + } + if (namespace) + type |= GRUB_FSHELP_CASE_INSENSITIVE; + + if (hook (ustr, type, fdiro, hook_data)) + { + grub_free (ustr); + return 1; + } + + grub_free (ustr); + } + pos += u16at (pos, 8); + } + return 0; +} + +struct symlink_descriptor +{ + grub_uint32_t type; + grub_uint32_t total_len; + grub_uint16_t off1; + grub_uint16_t len1; + grub_uint16_t off2; + grub_uint16_t len2; +} GRUB_PACKED; + +static char * +grub_ntfs_read_symlink (grub_fshelp_node_t node) +{ + struct grub_ntfs_file *mft; + struct symlink_descriptor symdesc; + grub_err_t err; + grub_uint8_t *buf16; + char *buf, *end; + grub_size_t len; + grub_uint8_t *pa; + grub_size_t off; + + mft = (struct grub_ntfs_file *) node; + + mft->buf = grub_malloc (mft->data->mft_size << GRUB_NTFS_BLK_SHR); + if (mft->buf == NULL) + return NULL; + + if (read_mft (mft->data, mft->buf, mft->ino)) + return NULL; + + pa = locate_attr (&mft->attr, mft, GRUB_NTFS_AT_SYMLINK); + if (pa == NULL) + { + grub_error (GRUB_ERR_BAD_FS, "no $SYMLINK in MFT 0x%llx", + (unsigned long long) mft->ino); + return NULL; + } + + err = read_attr (&mft->attr, (grub_uint8_t *) &symdesc, 0, + sizeof (struct symlink_descriptor), 1, 0, 0); + if (err) + return NULL; + + switch (grub_cpu_to_le32 (symdesc.type)) + { + case 0xa000000c: + off = (sizeof (struct symlink_descriptor) + 4 + + grub_cpu_to_le32 (symdesc.off1)); + len = grub_cpu_to_le32 (symdesc.len1); + break; + case 0xa0000003: + off = (sizeof (struct symlink_descriptor) + + grub_cpu_to_le32 (symdesc.off1)); + len = grub_cpu_to_le32 (symdesc.len1); + break; + default: + grub_error (GRUB_ERR_BAD_FS, "symlink type invalid (%x)", + grub_cpu_to_le32 (symdesc.type)); + return NULL; + } + + buf16 = grub_malloc (len); + if (!buf16) + return NULL; + + err = read_attr (&mft->attr, buf16, off, len, 1, 0, 0); + if (err) + return NULL; + + buf = get_utf8 (buf16, len / 2); + if (!buf) + { + grub_free (buf16); + return NULL; + } + grub_free (buf16); + + for (end = buf; *end; end++) + if (*end == '\\') + *end = '/'; + + /* Split the sequence to avoid GCC thinking that this is a trigraph. */ + if (grub_memcmp (buf, "/?" "?/", 4) == 0 && buf[5] == ':' && buf[6] == '/' + && grub_isalpha (buf[4])) + { + grub_memmove (buf, buf + 6, end - buf + 1 - 6); + end -= 6; + } + return buf; +} + +static int +grub_ntfs_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + grub_uint8_t *bitmap; + struct grub_ntfs_attr attr, *at; + grub_uint8_t *cur_pos, *indx, *bmp; + int ret = 0; + grub_size_t bitmap_len; + struct grub_ntfs_file *mft; + + mft = (struct grub_ntfs_file *) dir; + + if (!mft->inode_read) + { + if (init_file (mft, mft->ino)) + return 0; + } + + indx = NULL; + bmp = NULL; + + at = &attr; + init_attr (at, mft); + while (1) + { + cur_pos = find_attr (at, GRUB_NTFS_AT_INDEX_ROOT); + if (cur_pos == NULL) + { + grub_error (GRUB_ERR_BAD_FS, "no $INDEX_ROOT"); + goto done; + } + + /* Resident, Namelen=4, Offset=0x18, Flags=0x00, Name="$I30" */ + if ((u32at (cur_pos, 8) != 0x180400) || + (u32at (cur_pos, 0x18) != 0x490024) || + (u32at (cur_pos, 0x1C) != 0x300033)) + continue; + cur_pos += u16at (cur_pos, 0x14); + if (*cur_pos != 0x30) /* Not filename index */ + continue; + break; + } + + cur_pos += 0x10; /* Skip index root */ + ret = list_file (mft, cur_pos + u16at (cur_pos, 0), hook, hook_data); + if (ret) + goto done; + + bitmap = NULL; + bitmap_len = 0; + free_attr (at); + init_attr (at, mft); + while ((cur_pos = find_attr (at, GRUB_NTFS_AT_BITMAP)) != NULL) + { + int ofs; + + ofs = cur_pos[0xA]; + /* Namelen=4, Name="$I30" */ + if ((cur_pos[9] == 4) && + (u32at (cur_pos, ofs) == 0x490024) && + (u32at (cur_pos, ofs + 4) == 0x300033)) + { + int is_resident = (cur_pos[8] == 0); + + bitmap_len = ((is_resident) ? u32at (cur_pos, 0x10) : + u32at (cur_pos, 0x28)); + + bmp = grub_malloc (bitmap_len); + if (bmp == NULL) + goto done; + + if (is_resident) + { + grub_memcpy (bmp, cur_pos + u16at (cur_pos, 0x14), + bitmap_len); + } + else + { + if (read_data (at, cur_pos, bmp, 0, bitmap_len, 0, 0, 0)) + { + grub_error (GRUB_ERR_BAD_FS, + "fails to read non-resident $BITMAP"); + goto done; + } + bitmap_len = u32at (cur_pos, 0x30); + } + + bitmap = bmp; + break; + } + } + + free_attr (at); + cur_pos = locate_attr (at, mft, GRUB_NTFS_AT_INDEX_ALLOCATION); + while (cur_pos != NULL) + { + /* Non-resident, Namelen=4, Offset=0x40, Flags=0, Name="$I30" */ + if ((u32at (cur_pos, 8) == 0x400401) && + (u32at (cur_pos, 0x40) == 0x490024) && + (u32at (cur_pos, 0x44) == 0x300033)) + break; + cur_pos = find_attr (at, GRUB_NTFS_AT_INDEX_ALLOCATION); + } + + if ((!cur_pos) && (bitmap)) + { + grub_error (GRUB_ERR_BAD_FS, "$BITMAP without $INDEX_ALLOCATION"); + goto done; + } + + if (bitmap) + { + grub_disk_addr_t i; + grub_uint8_t v; + + indx = grub_malloc (mft->data->idx_size << GRUB_NTFS_BLK_SHR); + if (indx == NULL) + goto done; + + v = 1; + for (i = 0; i < (grub_disk_addr_t)bitmap_len * 8; i++) + { + if (*bitmap & v) + { + if ((read_attr + (at, indx, i * (mft->data->idx_size << GRUB_NTFS_BLK_SHR), + (mft->data->idx_size << GRUB_NTFS_BLK_SHR), 0, 0, 0)) + || (fixup (indx, mft->data->idx_size, + (const grub_uint8_t *) "INDX"))) + goto done; + ret = list_file (mft, &indx[0x18 + u16at (indx, 0x18)], + hook, hook_data); + if (ret) + goto done; + } + v <<= 1; + if (!v) + { + v = 1; + bitmap++; + } + } + } + +done: + free_attr (at); + grub_free (indx); + grub_free (bmp); + + return ret; +} + +static struct grub_ntfs_data * +grub_ntfs_mount (grub_disk_t disk) +{ + struct grub_ntfs_bpb bpb; + struct grub_ntfs_data *data = 0; + grub_uint32_t spc; + + if (!disk) + goto fail; + + data = (struct grub_ntfs_data *) grub_zalloc (sizeof (*data)); + if (!data) + goto fail; + + data->disk = disk; + + /* Read the BPB. */ + if (grub_disk_read (disk, 0, 0, sizeof (bpb), &bpb)) + goto fail; + + if (grub_memcmp ((char *) &bpb.oem_name, "NTFS", 4) != 0 + || bpb.sectors_per_cluster == 0 + || (bpb.sectors_per_cluster & (bpb.sectors_per_cluster - 1)) != 0 + || bpb.bytes_per_sector == 0 + || (bpb.bytes_per_sector & (bpb.bytes_per_sector - 1)) != 0) + goto fail; + + spc = (((grub_uint32_t) bpb.sectors_per_cluster + * (grub_uint32_t) grub_le_to_cpu16 (bpb.bytes_per_sector)) + >> GRUB_NTFS_BLK_SHR); + if (spc == 0) + goto fail; + + for (data->log_spc = 0; (1U << data->log_spc) < spc; data->log_spc++); + + if (bpb.clusters_per_mft > 0) + data->mft_size = ((grub_disk_addr_t) bpb.clusters_per_mft) << data->log_spc; + else if (-bpb.clusters_per_mft < GRUB_NTFS_BLK_SHR || -bpb.clusters_per_mft >= 31) + goto fail; + else + data->mft_size = 1ULL << (-bpb.clusters_per_mft - GRUB_NTFS_BLK_SHR); + + if (bpb.clusters_per_index > 0) + data->idx_size = (((grub_disk_addr_t) bpb.clusters_per_index) + << data->log_spc); + else if (-bpb.clusters_per_index < GRUB_NTFS_BLK_SHR || -bpb.clusters_per_index >= 31) + goto fail; + else + data->idx_size = 1ULL << (-bpb.clusters_per_index - GRUB_NTFS_BLK_SHR); + + data->mft_start = grub_le_to_cpu64 (bpb.mft_lcn) << data->log_spc; + + if ((data->mft_size > GRUB_NTFS_MAX_MFT) || (data->idx_size > GRUB_NTFS_MAX_IDX)) + goto fail; + + data->mmft.data = data; + data->cmft.data = data; + + data->mmft.buf = grub_malloc (data->mft_size << GRUB_NTFS_BLK_SHR); + if (!data->mmft.buf) + goto fail; + + if (grub_disk_read + (disk, data->mft_start, 0, data->mft_size << GRUB_NTFS_BLK_SHR, data->mmft.buf)) + goto fail; + + data->uuid = grub_le_to_cpu64 (bpb.num_serial); + + if (fixup (data->mmft.buf, data->mft_size, (const grub_uint8_t *) "FILE")) + goto fail; + + if (!locate_attr (&data->mmft.attr, &data->mmft, GRUB_NTFS_AT_DATA)) + goto fail; + + if (init_file (&data->cmft, GRUB_NTFS_FILE_ROOT)) + goto fail; + + return data; + +fail: + grub_error (GRUB_ERR_BAD_FS, "not an ntfs filesystem"); + + if (data) + { + free_file (&data->mmft); + free_file (&data->cmft); + grub_free (data); + } + return 0; +} + +/* Context for grub_ntfs_dir. */ +struct grub_ntfs_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_ntfs_dir. */ +static int +grub_ntfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_ntfs_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + info.mtimeset = 1; + info.mtime = grub_divmod64 (node->mtime, 10000000, 0) + - 86400ULL * 365 * (1970 - 1601) + - 86400ULL * ((1970 - 1601) / 4) + 86400ULL * ((1970 - 1601) / 100); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_ntfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_ntfs_dir_ctx ctx = { hook, hook_data }; + struct grub_ntfs_data *data = 0; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_ntfs_mount (device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (path, &data->cmft, &fdiro, grub_ntfs_iterate_dir, + grub_ntfs_read_symlink, GRUB_FSHELP_DIR); + + if (grub_errno) + goto fail; + + grub_ntfs_iterate_dir (fdiro, grub_ntfs_dir_iter, &ctx); + +fail: + if ((fdiro) && (fdiro != &data->cmft)) + { + free_file (fdiro); + grub_free (fdiro); + } + if (data) + { + free_file (&data->mmft); + free_file (&data->cmft); + grub_free (data); + } + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_ntfs_open (grub_file_t file, const char *name) +{ + struct grub_ntfs_data *data = 0; + struct grub_fshelp_node *mft = 0; + + grub_dl_ref (my_mod); + + data = grub_ntfs_mount (file->device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (name, &data->cmft, &mft, grub_ntfs_iterate_dir, + grub_ntfs_read_symlink, GRUB_FSHELP_REG); + + if (grub_errno) + goto fail; + + if (mft != &data->cmft) + { + free_file (&data->cmft); + grub_memcpy (&data->cmft, mft, sizeof (*mft)); + grub_free (mft); + if (!data->cmft.inode_read) + { + if (init_file (&data->cmft, data->cmft.ino)) + goto fail; + } + } + + file->size = data->cmft.size; + file->data = data; + file->offset = 0; + + return 0; + +fail: + if (data) + { + free_file (&data->mmft); + free_file (&data->cmft); + grub_free (data); + } + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_ssize_t +grub_ntfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_ntfs_file *mft; + + mft = &((struct grub_ntfs_data *) file->data)->cmft; + if (file->read_hook) + mft->attr.save_pos = 1; + + read_attr (&mft->attr, (grub_uint8_t *) buf, file->offset, len, 1, + file->read_hook, file->read_hook_data); + return (grub_errno) ? -1 : (grub_ssize_t) len; +} + +static grub_err_t +grub_ntfs_close (grub_file_t file) +{ + struct grub_ntfs_data *data; + + data = file->data; + + if (data) + { + free_file (&data->mmft); + free_file (&data->cmft); + grub_free (data); + } + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_ntfs_label (grub_device_t device, char **label) +{ + struct grub_ntfs_data *data = 0; + struct grub_fshelp_node *mft = 0; + grub_uint8_t *pa; + + grub_dl_ref (my_mod); + + *label = 0; + + data = grub_ntfs_mount (device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file ("/$Volume", &data->cmft, &mft, grub_ntfs_iterate_dir, + 0, GRUB_FSHELP_REG); + + if (grub_errno) + goto fail; + + if (!mft->inode_read) + { + mft->buf = grub_malloc (mft->data->mft_size << GRUB_NTFS_BLK_SHR); + if (mft->buf == NULL) + goto fail; + + if (read_mft (mft->data, mft->buf, mft->ino)) + goto fail; + } + + init_attr (&mft->attr, mft); + pa = find_attr (&mft->attr, GRUB_NTFS_AT_VOLUME_NAME); + if ((pa) && (pa[8] == 0) && (u32at (pa, 0x10))) + { + int len; + + len = u32at (pa, 0x10) / 2; + pa += u16at (pa, 0x14); + *label = get_utf8 (pa, len); + } + +fail: + if ((mft) && (mft != &data->cmft)) + { + free_file (mft); + grub_free (mft); + } + if (data) + { + free_file (&data->mmft); + free_file (&data->cmft); + grub_free (data); + } + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_ntfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_ntfs_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_ntfs_mount (disk); + if (data) + { + char *ptr; + *uuid = grub_xasprintf ("%016llx", (unsigned long long) data->uuid); + if (*uuid) + for (ptr = *uuid; *ptr; ptr++) + *ptr = grub_toupper (*ptr); + free_file (&data->mmft); + free_file (&data->cmft); + grub_free (data); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static struct grub_fs grub_ntfs_fs = + { + .name = "ntfs", + .dir = grub_ntfs_dir, + .open = grub_ntfs_open, + .read = grub_ntfs_read, + .close = grub_ntfs_close, + .label = grub_ntfs_label, + .uuid = grub_ntfs_uuid, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 +}; + +GRUB_MOD_INIT (ntfs) +{ + grub_fs_register (&grub_ntfs_fs); + my_mod = mod; +} + +GRUB_MOD_FINI (ntfs) +{ + grub_fs_unregister (&grub_ntfs_fs); +} diff --git a/grub-core/fs/ntfscomp.c b/grub-core/fs/ntfscomp.c new file mode 100644 index 000000000..3cd97d337 --- /dev/null +++ b/grub-core/fs/ntfscomp.c @@ -0,0 +1,443 @@ +/* ntfscomp.c - compression support for the NTFS filesystem */ +/* + * Copyright (C) 2007 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +decomp_nextvcn (struct grub_ntfs_comp *cc) +{ + if (cc->comp_head >= cc->comp_tail) + return grub_error (GRUB_ERR_BAD_FS, "compression block overflown"); + if (grub_disk_read + (cc->disk, + (cc->comp_table[cc->comp_head].next_lcn - + (cc->comp_table[cc->comp_head].next_vcn - cc->cbuf_vcn)) << cc->log_spc, + 0, + 1 << (cc->log_spc + GRUB_NTFS_BLK_SHR), cc->cbuf)) + return grub_errno; + cc->cbuf_vcn++; + if ((cc->cbuf_vcn >= cc->comp_table[cc->comp_head].next_vcn)) + cc->comp_head++; + cc->cbuf_ofs = 0; + return 0; +} + +static grub_err_t +decomp_getch (struct grub_ntfs_comp *cc, grub_uint8_t *res) +{ + if (cc->cbuf_ofs >= (1U << (cc->log_spc + GRUB_NTFS_BLK_SHR))) + { + if (decomp_nextvcn (cc)) + return grub_errno; + } + *res = cc->cbuf[cc->cbuf_ofs++]; + return 0; +} + +static grub_err_t +decomp_get16 (struct grub_ntfs_comp *cc, grub_uint16_t * res) +{ + grub_uint8_t c1 = 0, c2 = 0; + + if ((decomp_getch (cc, &c1)) || (decomp_getch (cc, &c2))) + return grub_errno; + *res = ((grub_uint16_t) c2) * 256 + ((grub_uint16_t) c1); + return 0; +} + +/* Decompress a block (4096 bytes) */ +static grub_err_t +decomp_block (struct grub_ntfs_comp *cc, grub_uint8_t *dest) +{ + grub_uint16_t flg, cnt; + + if (decomp_get16 (cc, &flg)) + return grub_errno; + cnt = (flg & 0xFFF) + 1; + + if (dest) + { + if (flg & 0x8000) + { + grub_uint8_t tag; + grub_uint32_t bits, copied; + + bits = copied = tag = 0; + while (cnt > 0) + { + if (copied > GRUB_NTFS_COM_LEN) + return grub_error (GRUB_ERR_BAD_FS, + "compression block too large"); + + if (!bits) + { + if (decomp_getch (cc, &tag)) + return grub_errno; + + bits = 8; + cnt--; + if (cnt <= 0) + break; + } + if (tag & 1) + { + grub_uint32_t i, len, delta, code, lmask, dshift; + grub_uint16_t word = 0; + + if (decomp_get16 (cc, &word)) + return grub_errno; + + code = word; + cnt -= 2; + + if (!copied) + { + grub_error (GRUB_ERR_BAD_FS, "nontext window empty"); + return 0; + } + + for (i = copied - 1, lmask = 0xFFF, dshift = 12; i >= 0x10; + i >>= 1) + { + lmask >>= 1; + dshift--; + } + + delta = code >> dshift; + len = (code & lmask) + 3; + + for (i = 0; i < len; i++) + { + dest[copied] = dest[copied - delta - 1]; + copied++; + } + } + else + { + grub_uint8_t ch = 0; + + if (decomp_getch (cc, &ch)) + return grub_errno; + dest[copied++] = ch; + cnt--; + } + tag >>= 1; + bits--; + } + return 0; + } + else + { + if (cnt != GRUB_NTFS_COM_LEN) + return grub_error (GRUB_ERR_BAD_FS, + "invalid compression block size"); + } + } + + while (cnt > 0) + { + int n; + + n = (1 << (cc->log_spc + GRUB_NTFS_BLK_SHR)) - cc->cbuf_ofs; + if (n > cnt) + n = cnt; + if ((dest) && (n)) + { + grub_memcpy (dest, &cc->cbuf[cc->cbuf_ofs], n); + dest += n; + } + cnt -= n; + cc->cbuf_ofs += n; + if ((cnt) && (decomp_nextvcn (cc))) + return grub_errno; + } + return 0; +} + +static grub_err_t +read_block (struct grub_ntfs_rlst *ctx, grub_uint8_t *buf, grub_size_t num) +{ + int log_cpb = GRUB_NTFS_LOG_COM_SEC - ctx->comp.log_spc; + + while (num) + { + grub_size_t nn; + + if ((ctx->target_vcn & 0xF) == 0) + { + + if (ctx->comp.comp_head != ctx->comp.comp_tail + && !(ctx->flags & GRUB_NTFS_RF_BLNK)) + return grub_error (GRUB_ERR_BAD_FS, "invalid compression block"); + ctx->comp.comp_head = ctx->comp.comp_tail = 0; + ctx->comp.cbuf_vcn = ctx->target_vcn; + ctx->comp.cbuf_ofs = (1 << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR)); + if (ctx->target_vcn >= ctx->next_vcn) + { + if (grub_ntfs_read_run_list (ctx)) + return grub_errno; + } + while (ctx->target_vcn + 16 > ctx->next_vcn) + { + if (ctx->flags & GRUB_NTFS_RF_BLNK) + break; + ctx->comp.comp_table[ctx->comp.comp_tail].next_vcn = ctx->next_vcn; + ctx->comp.comp_table[ctx->comp.comp_tail].next_lcn = + ctx->curr_lcn + ctx->next_vcn - ctx->curr_vcn; + ctx->comp.comp_tail++; + if (grub_ntfs_read_run_list (ctx)) + return grub_errno; + } + } + + nn = (16 - (unsigned) (ctx->target_vcn & 0xF)) >> log_cpb; + if (nn > num) + nn = num; + num -= nn; + + if (ctx->flags & GRUB_NTFS_RF_BLNK) + { + ctx->target_vcn += nn << log_cpb; + if (ctx->comp.comp_tail == 0) + { + if (buf) + { + grub_memset (buf, 0, nn * GRUB_NTFS_COM_LEN); + buf += nn * GRUB_NTFS_COM_LEN; + if (grub_file_progress_hook && ctx->file) + grub_file_progress_hook (0, 0, nn * GRUB_NTFS_COM_LEN, + ctx->file); + } + } + else + { + while (nn) + { + if (decomp_block (&ctx->comp, buf)) + return grub_errno; + if (buf) + buf += GRUB_NTFS_COM_LEN; + if (grub_file_progress_hook && ctx->file) + grub_file_progress_hook (0, 0, GRUB_NTFS_COM_LEN, + ctx->file); + nn--; + } + } + } + else + { + nn <<= log_cpb; + while ((ctx->comp.comp_head < ctx->comp.comp_tail) && (nn)) + { + grub_disk_addr_t tt; + + tt = + ctx->comp.comp_table[ctx->comp.comp_head].next_vcn - + ctx->target_vcn; + if (tt > nn) + tt = nn; + ctx->target_vcn += tt; + if (buf) + { + if (grub_disk_read + (ctx->comp.disk, + (ctx->comp.comp_table[ctx->comp.comp_head].next_lcn - + (ctx->comp.comp_table[ctx->comp.comp_head].next_vcn - + ctx->target_vcn)) << ctx->comp.log_spc, 0, + tt << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR), buf)) + return grub_errno; + if (grub_file_progress_hook && ctx->file) + grub_file_progress_hook (0, 0, + tt << (ctx->comp.log_spc + + GRUB_NTFS_BLK_SHR), + ctx->file); + buf += tt << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR); + } + nn -= tt; + if (ctx->target_vcn >= + ctx->comp.comp_table[ctx->comp.comp_head].next_vcn) + ctx->comp.comp_head++; + } + if (nn) + { + if (buf) + { + if (grub_disk_read + (ctx->comp.disk, + (ctx->target_vcn - ctx->curr_vcn + + ctx->curr_lcn) << ctx->comp.log_spc, 0, + nn << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR), buf)) + return grub_errno; + buf += nn << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR); + if (grub_file_progress_hook && ctx->file) + grub_file_progress_hook (0, 0, + nn << (ctx->comp.log_spc + + GRUB_NTFS_BLK_SHR), + ctx->file); + } + ctx->target_vcn += nn; + } + } + } + return 0; +} + +static grub_err_t +ntfscomp (grub_uint8_t *dest, grub_disk_addr_t ofs, + grub_size_t len, struct grub_ntfs_rlst *ctx) +{ + grub_err_t ret; + grub_disk_addr_t vcn; + + if (ctx->attr->sbuf) + { + if ((ofs & (~(GRUB_NTFS_COM_LEN - 1))) == ctx->attr->save_pos) + { + grub_disk_addr_t n; + + n = GRUB_NTFS_COM_LEN - (ofs - ctx->attr->save_pos); + if (n > len) + n = len; + + grub_memcpy (dest, ctx->attr->sbuf + ofs - ctx->attr->save_pos, n); + if (grub_file_progress_hook && ctx->file) + grub_file_progress_hook (0, 0, n, ctx->file); + if (n == len) + return 0; + + dest += n; + len -= n; + ofs += n; + } + } + else + { + ctx->attr->sbuf = grub_malloc (GRUB_NTFS_COM_LEN); + if (ctx->attr->sbuf == NULL) + return grub_errno; + ctx->attr->save_pos = 1; + } + + vcn = ctx->target_vcn = (ofs >> GRUB_NTFS_COM_LOG_LEN) * (GRUB_NTFS_COM_SEC >> ctx->comp.log_spc); + ctx->target_vcn &= ~0xFULL; + while (ctx->next_vcn <= ctx->target_vcn) + { + if (grub_ntfs_read_run_list (ctx)) + return grub_errno; + } + + ctx->comp.comp_head = ctx->comp.comp_tail = 0; + ctx->comp.cbuf = grub_malloc (1 << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR)); + if (!ctx->comp.cbuf) + return 0; + + ret = 0; + + //ctx->comp.disk->read_hook = read_hook; + //ctx->comp.disk->read_hook_data = read_hook_data; + + if ((vcn > ctx->target_vcn) && + (read_block + (ctx, NULL, (vcn - ctx->target_vcn) >> (GRUB_NTFS_LOG_COM_SEC - ctx->comp.log_spc)))) + { + ret = grub_errno; + goto quit; + } + + if (ofs % GRUB_NTFS_COM_LEN) + { + grub_uint32_t t, n, o; + void *file = ctx->file; + + ctx->file = 0; + + t = ctx->target_vcn << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR); + if (read_block (ctx, ctx->attr->sbuf, 1)) + { + ret = grub_errno; + goto quit; + } + + ctx->file = file; + + ctx->attr->save_pos = t; + + o = ofs % GRUB_NTFS_COM_LEN; + n = GRUB_NTFS_COM_LEN - o; + if (n > len) + n = len; + grub_memcpy (dest, &ctx->attr->sbuf[o], n); + if (grub_file_progress_hook && ctx->file) + grub_file_progress_hook (0, 0, n, ctx->file); + if (n == len) + goto quit; + dest += n; + len -= n; + } + + if (read_block (ctx, dest, len / GRUB_NTFS_COM_LEN)) + { + ret = grub_errno; + goto quit; + } + + dest += (len / GRUB_NTFS_COM_LEN) * GRUB_NTFS_COM_LEN; + len = len % GRUB_NTFS_COM_LEN; + if (len) + { + grub_uint32_t t; + void *file = ctx->file; + + ctx->file = 0; + t = ctx->target_vcn << (ctx->comp.log_spc + GRUB_NTFS_BLK_SHR); + if (read_block (ctx, ctx->attr->sbuf, 1)) + { + ret = grub_errno; + goto quit; + } + + ctx->attr->save_pos = t; + + grub_memcpy (dest, ctx->attr->sbuf, len); + if (grub_file_progress_hook && file) + grub_file_progress_hook (0, 0, len, file); + } + +quit: + //ctx->comp.disk->read_hook = 0; + if (ctx->comp.cbuf) + grub_free (ctx->comp.cbuf); + return ret; +} + +GRUB_MOD_INIT (ntfscomp) +{ + grub_ntfscomp_func = ntfscomp; +} + +GRUB_MOD_FINI (ntfscomp) +{ + grub_ntfscomp_func = NULL; +} diff --git a/grub-core/fs/odc.c b/grub-core/fs/odc.c new file mode 100644 index 000000000..790000622 --- /dev/null +++ b/grub-core/fs/odc.c @@ -0,0 +1,61 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#define ALIGN_CPIO(x) x + +#define MAGIC "070707" +struct head +{ + char magic[6]; + char dev[6]; + char ino[6]; + char mode[6]; + char uid[6]; + char gid[6]; + char nlink[6]; + char rdev[6]; + char mtime[11]; + char namesize[6]; + char filesize[11]; +} GRUB_PACKED; + +static inline unsigned long long +read_number (const char *str, grub_size_t size) +{ + unsigned long long ret = 0; + while (size-- && *str >= '0' && *str <= '7') + ret = (ret << 3) | (*str++ & 0xf); + return ret; +} + +#define FSNAME "odc" + +#include "cpio_common.c" + +GRUB_MOD_INIT (odc) +{ + grub_fs_register (&grub_cpio_fs); +} + +GRUB_MOD_FINI (odc) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/proc.c b/grub-core/fs/proc.c new file mode 100644 index 000000000..31f3aa9a4 --- /dev/null +++ b/grub-core/fs/proc.c @@ -0,0 +1,203 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_procfs_entry *grub_procfs_entries; + +static int +grub_procdev_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + return hook ("proc", hook_data); +} + +static grub_err_t +grub_procdev_open (const char *name, grub_disk_t disk) +{ + if (grub_strcmp (name, "proc")) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a procfs disk"); + + disk->total_sectors = 0; + disk->id = 0; + + disk->data = 0; + + return GRUB_ERR_NONE; +} + +static void +grub_procdev_close (grub_disk_t disk __attribute((unused))) +{ +} + +static grub_err_t +grub_procdev_read (grub_disk_t disk __attribute((unused)), + grub_disk_addr_t sector __attribute((unused)), + grub_size_t size __attribute((unused)), + char *buf __attribute((unused))) +{ + return GRUB_ERR_OUT_OF_RANGE; +} + +static grub_err_t +grub_procdev_write (grub_disk_t disk __attribute ((unused)), + grub_disk_addr_t sector __attribute ((unused)), + grub_size_t size __attribute ((unused)), + const char *buf __attribute ((unused))) +{ + return GRUB_ERR_OUT_OF_RANGE; +} + +struct grub_archelp_data +{ + struct grub_procfs_entry *entry, *next_entry; +}; + +static void +grub_procfs_rewind (struct grub_archelp_data *data) +{ + data->entry = NULL; + data->next_entry = grub_procfs_entries; +} + +static grub_err_t +grub_procfs_find_file (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, + grub_uint32_t *mode) +{ + data->entry = data->next_entry; + if (!data->entry) + { + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + data->next_entry = data->entry->next; + *mode = GRUB_ARCHELP_ATTR_FILE | GRUB_ARCHELP_ATTR_NOTIME; + *name = grub_strdup (data->entry->name); + *mtime = 0; + if (!*name) + return grub_errno; + return GRUB_ERR_NONE; +} + +static struct grub_archelp_ops arcops = + { + .find_file = grub_procfs_find_file, + .rewind = grub_procfs_rewind + }; + +static grub_ssize_t +grub_procfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + char *data = file->data; + + grub_memcpy (buf, data + file->offset, len); + + return len; +} + +static grub_err_t +grub_procfs_close (grub_file_t file) +{ + char *data; + + data = file->data; + grub_free (data); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_procfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_archelp_data data; + + /* Check if the disk is our dummy disk. */ + if (grub_strcmp (device->disk->name, "proc")) + return grub_error (GRUB_ERR_BAD_FS, "not a procfs"); + + grub_procfs_rewind (&data); + + return grub_archelp_dir (&data, &arcops, + path, hook, hook_data); +} + +static grub_err_t +grub_procfs_open (struct grub_file *file, const char *path) +{ + grub_err_t err; + struct grub_archelp_data data; + grub_size_t sz; + + grub_procfs_rewind (&data); + + err = grub_archelp_open (&data, &arcops, path); + if (err) + return err; + file->data = data.entry->get_contents (&sz); + if (!file->data) + return grub_errno; + file->size = sz; + return GRUB_ERR_NONE; +} + +static struct grub_disk_dev grub_procfs_dev = { + .name = "proc", + .id = GRUB_DISK_DEVICE_PROCFS_ID, + .iterate = grub_procdev_iterate, + .open = grub_procdev_open, + .close = grub_procdev_close, + .read = grub_procdev_read, + .write = grub_procdev_write, + .next = 0 +}; + +static struct grub_fs grub_procfs_fs = + { + .name = "procfs", + .dir = grub_procfs_dir, + .open = grub_procfs_open, + .read = grub_procfs_read, + .close = grub_procfs_close, + .next = 0 + }; + +GRUB_MOD_INIT (procfs) +{ + grub_disk_dev_register (&grub_procfs_dev); + grub_fs_register (&grub_procfs_fs); +} + +GRUB_MOD_FINI (procfs) +{ + grub_disk_dev_unregister (&grub_procfs_dev); + grub_fs_unregister (&grub_procfs_fs); +} diff --git a/grub-core/fs/reiserfs.c b/grub-core/fs/reiserfs.c new file mode 100644 index 000000000..39736f63c --- /dev/null +++ b/grub-core/fs/reiserfs.c @@ -0,0 +1,1427 @@ +/* reiserfs.c - ReiserFS versions up to 3.6 */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* + TODO: + implement journal handling (ram replay) + test tail packing & direct files + validate partition label position +*/ + +#if 0 +# define GRUB_REISERFS_DEBUG +# define GRUB_REISERFS_JOURNALING +# define GRUB_HEXDUMP +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define MIN(a, b) \ + ({ typeof (a) _a = (a); \ + typeof (b) _b = (b); \ + _a < _b ? _a : _b; }) + +#define MAX(a, b) \ + ({ typeof (a) _a = (a); \ + typeof (b) _b = (b); \ + _a > _b ? _a : _b; }) + +#define REISERFS_SUPER_BLOCK_OFFSET 0x10000 +#define REISERFS_MAGIC_LEN 12 +#define REISERFS_MAGIC_STRING "ReIsEr" +#define REISERFS_MAGIC_DESC_BLOCK "ReIsErLB" +/* If the 3rd bit of an item state is set, then it's visible. */ +#define GRUB_REISERFS_VISIBLE_MASK ((grub_uint16_t) 0x04) + +#define S_IFLNK 0xA000 + +static grub_dl_t my_mod; + +#define assert(boolean) real_assert (boolean, GRUB_FILE, __LINE__) +static inline void +real_assert (int boolean, const char *file, const int line) +{ + if (! boolean) + grub_printf ("Assertion failed at %s:%d\n", file, line); +} + +enum grub_reiserfs_item_type + { + GRUB_REISERFS_STAT, + GRUB_REISERFS_DIRECTORY, + GRUB_REISERFS_DIRECT, + GRUB_REISERFS_INDIRECT, + /* Matches both _DIRECT and _INDIRECT when searching. */ + GRUB_REISERFS_ANY, + GRUB_REISERFS_UNKNOWN + }; + +struct grub_reiserfs_superblock +{ + grub_uint32_t block_count; + grub_uint32_t block_free_count; + grub_uint32_t root_block; + grub_uint32_t journal_block; + grub_uint32_t journal_device; + grub_uint32_t journal_original_size; + grub_uint32_t journal_max_transaction_size; + grub_uint32_t journal_block_count; + grub_uint32_t journal_max_batch; + grub_uint32_t journal_max_commit_age; + grub_uint32_t journal_max_transaction_age; + grub_uint16_t block_size; + grub_uint16_t oid_max_size; + grub_uint16_t oid_current_size; + grub_uint16_t state; + grub_uint8_t magic_string[REISERFS_MAGIC_LEN]; + grub_uint32_t function_hash_code; + grub_uint16_t tree_height; + grub_uint16_t bitmap_number; + grub_uint16_t version; + grub_uint16_t reserved; + grub_uint32_t inode_generation; + grub_uint8_t unused[4]; + grub_uint16_t uuid[8]; + char label[16]; +} GRUB_PACKED; + +struct grub_reiserfs_journal_header +{ + grub_uint32_t last_flush_uid; + grub_uint32_t unflushed_offset; + grub_uint32_t mount_id; +} GRUB_PACKED; + +struct grub_reiserfs_description_block +{ + grub_uint32_t id; + grub_uint32_t len; + grub_uint32_t mount_id; + grub_uint32_t real_blocks[0]; +} GRUB_PACKED; + +struct grub_reiserfs_commit_block +{ + grub_uint32_t id; + grub_uint32_t len; + grub_uint32_t real_blocks[0]; +} GRUB_PACKED; + +struct grub_reiserfs_stat_item_v1 +{ + grub_uint16_t mode; + grub_uint16_t hardlink_count; + grub_uint16_t uid; + grub_uint16_t gid; + grub_uint32_t size; + grub_uint32_t atime; + grub_uint32_t mtime; + grub_uint32_t ctime; + grub_uint32_t rdev; + grub_uint32_t first_direct_byte; +} GRUB_PACKED; + +struct grub_reiserfs_stat_item_v2 +{ + grub_uint16_t mode; + grub_uint16_t reserved; + grub_uint32_t hardlink_count; + grub_uint64_t size; + grub_uint32_t uid; + grub_uint32_t gid; + grub_uint32_t atime; + grub_uint32_t mtime; + grub_uint32_t ctime; + grub_uint32_t blocks; + grub_uint32_t first_direct_byte; +} GRUB_PACKED; + +struct grub_reiserfs_key +{ + grub_uint32_t directory_id; + grub_uint32_t object_id; + union + { + struct + { + grub_uint32_t offset; + grub_uint32_t type; + } GRUB_PACKED v1; + struct + { + grub_uint64_t offset_type; + } GRUB_PACKED v2; + } u; +} GRUB_PACKED; + +struct grub_reiserfs_item_header +{ + struct grub_reiserfs_key key; + union + { + grub_uint16_t free_space; + grub_uint16_t entry_count; + } GRUB_PACKED u; + grub_uint16_t item_size; + grub_uint16_t item_location; + grub_uint16_t version; +} GRUB_PACKED; + +struct grub_reiserfs_block_header +{ + grub_uint16_t level; + grub_uint16_t item_count; + grub_uint16_t free_space; + grub_uint16_t reserved; + struct grub_reiserfs_key block_right_delimiting_key; +} GRUB_PACKED; + +struct grub_reiserfs_disk_child +{ + grub_uint32_t block_number; + grub_uint16_t size; + grub_uint16_t reserved; +} GRUB_PACKED; + +struct grub_reiserfs_directory_header +{ + grub_uint32_t offset; + grub_uint32_t directory_id; + grub_uint32_t object_id; + grub_uint16_t location; + grub_uint16_t state; +} GRUB_PACKED; + +struct grub_fshelp_node +{ + struct grub_reiserfs_data *data; + grub_uint32_t block_number; /* 0 if node is not found. */ + grub_uint16_t block_position; + grub_uint64_t next_offset; + grub_int32_t mtime; + grub_off_t size; + enum grub_reiserfs_item_type type; /* To know how to read the header. */ + struct grub_reiserfs_item_header header; +}; + +/* Returned when opening a file. */ +struct grub_reiserfs_data +{ + struct grub_reiserfs_superblock superblock; + grub_disk_t disk; +}; + +static grub_ssize_t +grub_reiserfs_read_real (struct grub_fshelp_node *node, + grub_off_t off, char *buf, grub_size_t len, + grub_disk_read_hook_t read_hook, + void *read_hook_data); + +/* Internal-only functions. Not to be used outside of this file. */ + +/* Return the type of given v2 key. */ +static enum grub_reiserfs_item_type +grub_reiserfs_get_key_v2_type (const struct grub_reiserfs_key *key) +{ + switch (grub_le_to_cpu64 (key->u.v2.offset_type) >> 60) + { + case 0: + return GRUB_REISERFS_STAT; + case 15: + return GRUB_REISERFS_ANY; + case 3: + return GRUB_REISERFS_DIRECTORY; + case 2: + return GRUB_REISERFS_DIRECT; + case 1: + return GRUB_REISERFS_INDIRECT; + } + return GRUB_REISERFS_UNKNOWN; +} + +/* Return the type of given v1 key. */ +static enum grub_reiserfs_item_type +grub_reiserfs_get_key_v1_type (const struct grub_reiserfs_key *key) +{ + switch (grub_le_to_cpu32 (key->u.v1.type)) + { + case 0: + return GRUB_REISERFS_STAT; + case 555: + return GRUB_REISERFS_ANY; + case 500: + return GRUB_REISERFS_DIRECTORY; + case 0x20000000: + case 0xFFFFFFFF: + return GRUB_REISERFS_DIRECT; + case 0x10000000: + case 0xFFFFFFFE: + return GRUB_REISERFS_INDIRECT; + } + return GRUB_REISERFS_UNKNOWN; +} + +/* Return 1 if the given key is version 1 key, 2 otherwise. */ +static int +grub_reiserfs_get_key_version (const struct grub_reiserfs_key *key) +{ + return grub_reiserfs_get_key_v1_type (key) == GRUB_REISERFS_UNKNOWN ? 2 : 1; +} + +#ifdef GRUB_HEXDUMP +static void +grub_hexdump (char *buffer, grub_size_t len) +{ + grub_size_t a; + for (a = 0; a < len; a++) + { + if (! (a & 0x0F)) + grub_printf ("\n%08x ", a); + grub_printf ("%02x ", + ((unsigned int) ((unsigned char *) buffer)[a]) & 0xFF); + } + grub_printf ("\n"); +} +#endif + +#ifdef GRUB_REISERFS_DEBUG +static grub_uint64_t +grub_reiserfs_get_key_offset (const struct grub_reiserfs_key *key); + +static enum grub_reiserfs_item_type +grub_reiserfs_get_key_type (const struct grub_reiserfs_key *key); + +static void +grub_reiserfs_print_key (const struct grub_reiserfs_key *key) +{ + unsigned int a; + char *reiserfs_type_strings[] = { + "stat ", + "directory", + "direct ", + "indirect ", + "any ", + "unknown " + }; + + for (a = 0; a < sizeof (struct grub_reiserfs_key); a++) + grub_printf ("%02x ", ((unsigned int) ((unsigned char *) key)[a]) & 0xFF); + grub_printf ("parent id = 0x%08x, self id = 0x%08x, type = %s, offset = ", + grub_le_to_cpu32 (key->directory_id), + grub_le_to_cpu32 (key->object_id), + reiserfs_type_strings [grub_reiserfs_get_key_type (key)]); + if (grub_reiserfs_get_key_version (key) == 1) + grub_printf("%08x", (unsigned int) grub_reiserfs_get_key_offset (key)); + else + grub_printf("0x%07x%08x", + (unsigned) (grub_reiserfs_get_key_offset (key) >> 32), + (unsigned) (grub_reiserfs_get_key_offset (key) & 0xFFFFFFFF)); + grub_printf ("\n"); +} +#endif + +/* Return the offset of given key. */ +static grub_uint64_t +grub_reiserfs_get_key_offset (const struct grub_reiserfs_key *key) +{ + if (grub_reiserfs_get_key_version (key) == 1) + return grub_le_to_cpu32 (key->u.v1.offset); + else + return grub_le_to_cpu64 (key->u.v2.offset_type) & (~0ULL >> 4); +} + +/* Set the offset of given key. */ +static void +grub_reiserfs_set_key_offset (struct grub_reiserfs_key *key, + grub_uint64_t value) +{ + if (grub_reiserfs_get_key_version (key) == 1) + key->u.v1.offset = grub_cpu_to_le32 (value); + else + key->u.v2.offset_type \ + = ((key->u.v2.offset_type & grub_cpu_to_le64_compile_time (15ULL << 60)) + | grub_cpu_to_le64 (value & (~0ULL >> 4))); +} + +/* Return the type of given key. */ +static enum grub_reiserfs_item_type +grub_reiserfs_get_key_type (const struct grub_reiserfs_key *key) +{ + if (grub_reiserfs_get_key_version (key) == 1) + return grub_reiserfs_get_key_v1_type (key); + else + return grub_reiserfs_get_key_v2_type (key); +} + +/* Set the type of given key, with given version number. */ +static void +grub_reiserfs_set_key_type (struct grub_reiserfs_key *key, + enum grub_reiserfs_item_type grub_type, + int version) +{ + grub_uint32_t type; + + switch (grub_type) + { + case GRUB_REISERFS_STAT: + type = 0; + break; + case GRUB_REISERFS_ANY: + type = (version == 1) ? 555 : 15; + break; + case GRUB_REISERFS_DIRECTORY: + type = (version == 1) ? 500 : 3; + break; + case GRUB_REISERFS_DIRECT: + type = (version == 1) ? 0xFFFFFFFF : 2; + break; + case GRUB_REISERFS_INDIRECT: + type = (version == 1) ? 0xFFFFFFFE : 1; + break; + default: + return; + } + + if (version == 1) + key->u.v1.type = grub_cpu_to_le32 (type); + else + key->u.v2.offset_type + = ((key->u.v2.offset_type & grub_cpu_to_le64_compile_time (~0ULL >> 4)) + | grub_cpu_to_le64 ((grub_uint64_t) type << 60)); + + assert (grub_reiserfs_get_key_type (key) == grub_type); +} + +/* -1 if key 1 if lower than key 2. + 0 if key 1 is equal to key 2. + 1 if key 1 is higher than key 2. */ +static int +grub_reiserfs_compare_keys (const struct grub_reiserfs_key *key1, + const struct grub_reiserfs_key *key2) +{ + grub_uint64_t offset1, offset2; + enum grub_reiserfs_item_type type1, type2; + grub_uint32_t id1, id2; + + if (! key1 || ! key2) + return -2; + + id1 = grub_le_to_cpu32 (key1->directory_id); + id2 = grub_le_to_cpu32 (key2->directory_id); + if (id1 < id2) + return -1; + if (id1 > id2) + return 1; + + id1 = grub_le_to_cpu32 (key1->object_id); + id2 = grub_le_to_cpu32 (key2->object_id); + if (id1 < id2) + return -1; + if (id1 > id2) + return 1; + + offset1 = grub_reiserfs_get_key_offset (key1); + offset2 = grub_reiserfs_get_key_offset (key2); + if (offset1 < offset2) + return -1; + if (offset1 > offset2) + return 1; + + type1 = grub_reiserfs_get_key_type (key1); + type2 = grub_reiserfs_get_key_type (key2); + if ((type1 == GRUB_REISERFS_ANY + && (type2 == GRUB_REISERFS_DIRECT + || type2 == GRUB_REISERFS_INDIRECT)) + || (type2 == GRUB_REISERFS_ANY + && (type1 == GRUB_REISERFS_DIRECT + || type1 == GRUB_REISERFS_INDIRECT))) + return 0; + if (type1 < type2) + return -1; + if (type1 > type2) + return 1; + + return 0; +} + +/* Find the item identified by KEY in mounted filesystem DATA, and fill ITEM + accordingly to what was found. */ +static grub_err_t +grub_reiserfs_get_item (struct grub_reiserfs_data *data, + const struct grub_reiserfs_key *key, + struct grub_fshelp_node *item, int exact) +{ + grub_uint32_t block_number; + struct grub_reiserfs_block_header *block_header = 0; + struct grub_reiserfs_key *block_key = 0; + grub_uint16_t block_size, item_count, current_level; + grub_uint16_t i; + grub_uint16_t previous_level = ~0; + struct grub_reiserfs_item_header *item_headers = 0; + +#if 0 + if (! data) + { + grub_error (GRUB_ERR_BAD_FS, "data is NULL"); + goto fail; + } + + if (! key) + { + grub_error (GRUB_ERR_BAD_FS, "key is NULL"); + goto fail; + } + + if (! item) + { + grub_error (GRUB_ERR_BAD_FS, "item is NULL"); + goto fail; + } +#endif + + block_size = grub_le_to_cpu16 (data->superblock.block_size); + block_number = grub_le_to_cpu32 (data->superblock.root_block); +#ifdef GRUB_REISERFS_DEBUG + grub_printf("Searching for "); + grub_reiserfs_print_key (key); +#endif + block_header = grub_malloc (block_size); + if (! block_header) + goto fail; + + item->next_offset = 0; + do + { + grub_disk_read (data->disk, + block_number * (block_size >> GRUB_DISK_SECTOR_BITS), + (((grub_off_t) block_number * block_size) + & (GRUB_DISK_SECTOR_SIZE - 1)), + block_size, block_header); + if (grub_errno) + goto fail; + current_level = grub_le_to_cpu16 (block_header->level); + grub_dprintf ("reiserfs_tree", " at level %d\n", current_level); + if (current_level >= previous_level) + { + grub_dprintf ("reiserfs_tree", "level loop detected, aborting\n"); + grub_error (GRUB_ERR_BAD_FS, "level loop"); + goto fail; + } + previous_level = current_level; + item_count = grub_le_to_cpu16 (block_header->item_count); + grub_dprintf ("reiserfs_tree", " number of contained items : %d\n", + item_count); + if (current_level > 1) + { + /* Internal node. Navigate to the child that should contain + the searched key. */ + struct grub_reiserfs_key *keys + = (struct grub_reiserfs_key *) (block_header + 1); + struct grub_reiserfs_disk_child *children + = ((struct grub_reiserfs_disk_child *) + (keys + item_count)); + + for (i = 0; + i < item_count + && grub_reiserfs_compare_keys (key, &(keys[i])) >= 0; + i++) + { +#ifdef GRUB_REISERFS_DEBUG + grub_printf("i %03d/%03d ", i + 1, item_count + 1); + grub_reiserfs_print_key (&(keys[i])); +#endif + } + block_number = grub_le_to_cpu32 (children[i].block_number); + if ((i < item_count) && (key->directory_id == keys[i].directory_id) + && (key->object_id == keys[i].object_id)) + item->next_offset = grub_reiserfs_get_key_offset(&(keys[i])); +#ifdef GRUB_REISERFS_DEBUG + if (i == item_count + || grub_reiserfs_compare_keys (key, &(keys[i])) == 0) + grub_printf(">"); + else + grub_printf("<"); + if (i < item_count) + { + grub_printf (" %03d/%03d ", i + 1, item_count + 1); + grub_reiserfs_print_key (&(keys[i])); + if (i + 1 < item_count) + { + grub_printf ("+ %03d/%03d ", i + 2, item_count); + grub_reiserfs_print_key (&(keys[i + 1])); + } + } + else + grub_printf ("Accessing rightmost child at block %d.\n", + block_number); +#endif + } + else + { + /* Leaf node. Check that the key is actually present. */ + item_headers + = (struct grub_reiserfs_item_header *) (block_header + 1); + for (i = 0; + i < item_count; + i++) + { + int val; + val = grub_reiserfs_compare_keys (key, &(item_headers[i].key)); + if (val == 0) + { + block_key = &(item_headers[i].key); + break; + } + if (val < 0 && exact) + break; + if (val < 0) + { + if (i == 0) + { + grub_error (GRUB_ERR_READ_ERROR, "unexpected btree node"); + goto fail; + } + i--; + block_key = &(item_headers[i].key); + break; + } + } + if (!exact && i == item_count) + { + if (i == 0) + { + grub_error (GRUB_ERR_READ_ERROR, "unexpected btree node"); + goto fail; + } + i--; + block_key = &(item_headers[i].key); + } + } + } + while (current_level > 1); + + item->data = data; + + if (!block_key) + { + item->block_number = 0; + item->block_position = 0; + item->type = GRUB_REISERFS_UNKNOWN; +#ifdef GRUB_REISERFS_DEBUG + grub_printf("Not found.\n"); +#endif + } + else + { + item->block_number = block_number; + item->block_position = i; + item->type = grub_reiserfs_get_key_type (block_key); + grub_memcpy (&(item->header), &(item_headers[i]), + sizeof (struct grub_reiserfs_item_header)); +#ifdef GRUB_REISERFS_DEBUG + grub_printf ("F %03d/%03d ", i + 1, item_count); + grub_reiserfs_print_key (block_key); +#endif + } + + assert (grub_errno == GRUB_ERR_NONE); + grub_free (block_header); + return GRUB_ERR_NONE; + + fail: + assert (grub_errno != GRUB_ERR_NONE); + grub_free (block_header); + assert (grub_errno != GRUB_ERR_NONE); + return grub_errno; +} + +/* Return the path of the file which is pointed at by symlink NODE. */ +static char * +grub_reiserfs_read_symlink (grub_fshelp_node_t node) +{ + char *symlink_buffer = 0; + grub_size_t len = node->size; + grub_ssize_t ret; + + symlink_buffer = grub_malloc (len + 1); + if (! symlink_buffer) + return 0; + + ret = grub_reiserfs_read_real (node, 0, symlink_buffer, len, 0, 0); + if (ret < 0) + { + grub_free (symlink_buffer); + return 0; + } + + symlink_buffer[ret] = 0; + return symlink_buffer; +} + +/* Fill the mounted filesystem structure and return it. */ +static struct grub_reiserfs_data * +grub_reiserfs_mount (grub_disk_t disk) +{ + struct grub_reiserfs_data *data = 0; + data = grub_malloc (sizeof (*data)); + if (! data) + goto fail; + grub_disk_read (disk, REISERFS_SUPER_BLOCK_OFFSET / GRUB_DISK_SECTOR_SIZE, + 0, sizeof (data->superblock), &(data->superblock)); + if (grub_errno) + goto fail; + if (grub_memcmp (data->superblock.magic_string, + REISERFS_MAGIC_STRING, sizeof (REISERFS_MAGIC_STRING) - 1)) + { + grub_error (GRUB_ERR_BAD_FS, "not a ReiserFS filesystem"); + goto fail; + } + data->disk = disk; + return data; + + fail: + /* Disk is too small to contain a ReiserFS. */ + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not a ReiserFS filesystem"); + + grub_free (data); + return 0; +} + +/* Call HOOK for each file in directory ITEM. */ +static int +grub_reiserfs_iterate_dir (grub_fshelp_node_t item, + grub_fshelp_iterate_dir_hook_t hook, + void *hook_data) +{ + struct grub_reiserfs_data *data = item->data; + struct grub_reiserfs_block_header *block_header = 0; + grub_uint16_t block_size, block_position; + grub_uint32_t block_number; + grub_uint64_t next_offset = item->next_offset; + int ret = 0; + + if (item->type != GRUB_REISERFS_DIRECTORY) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + goto fail; + } + block_size = grub_le_to_cpu16 (data->superblock.block_size); + block_header = grub_malloc (block_size + 1); + if (! block_header) + goto fail; + block_number = item->block_number; + block_position = item->block_position; + grub_dprintf ("reiserfs", "Iterating directory...\n"); + do + { + struct grub_reiserfs_directory_header *directory_headers; + struct grub_fshelp_node directory_item; + grub_uint16_t entry_count, entry_number; + struct grub_reiserfs_item_header *item_headers; + + grub_disk_read (data->disk, + block_number * (block_size >> GRUB_DISK_SECTOR_BITS), + (((grub_off_t) block_number * block_size) + & (GRUB_DISK_SECTOR_SIZE - 1)), + block_size, (char *) block_header); + if (grub_errno) + goto fail; + + ((char *) block_header)[block_size] = 0; + +#if 0 + if (grub_le_to_cpu16 (block_header->level) != 1) + { + grub_error (GRUB_ERR_BAD_FS, + "reiserfs: block %d is not a leaf block", + block_number); + goto fail; + } +#endif + + item_headers = (struct grub_reiserfs_item_header *) (block_header + 1); + directory_headers + = ((struct grub_reiserfs_directory_header *) + ((char *) block_header + + grub_le_to_cpu16 (item_headers[block_position].item_location))); + entry_count + = grub_le_to_cpu16 (item_headers[block_position].u.entry_count); + for (entry_number = 0; entry_number < entry_count; entry_number++) + { + struct grub_reiserfs_directory_header *directory_header + = &directory_headers[entry_number]; + grub_uint16_t entry_state + = grub_le_to_cpu16 (directory_header->state); + grub_fshelp_node_t entry_item; + struct grub_reiserfs_key entry_key; + enum grub_fshelp_filetype entry_type; + char *entry_name; + char *entry_name_end = 0; + char c; + + if (!(entry_state & GRUB_REISERFS_VISIBLE_MASK)) + continue; + + entry_name = (((char *) directory_headers) + + grub_le_to_cpu16 (directory_header->location)); + if (entry_number == 0) + { + entry_name_end = (char *) block_header + + grub_le_to_cpu16 (item_headers[block_position].item_location) + + grub_le_to_cpu16 (item_headers[block_position].item_size); + } + else + { + entry_name_end = (((char *) directory_headers) + + grub_le_to_cpu16 (directory_headers[entry_number - 1].location)); + } + if (entry_name_end < entry_name || entry_name_end > (char *) block_header + block_size) + { + entry_name_end = (char *) block_header + block_size; + } + + entry_key.directory_id = directory_header->directory_id; + entry_key.object_id = directory_header->object_id; + entry_key.u.v2.offset_type = 0; + grub_reiserfs_set_key_type (&entry_key, GRUB_REISERFS_DIRECTORY, + 2); + grub_reiserfs_set_key_offset (&entry_key, 1); + + entry_item = grub_malloc (sizeof (*entry_item)); + if (! entry_item) + goto fail; + + if (grub_reiserfs_get_item (data, &entry_key, entry_item, 1) + != GRUB_ERR_NONE) + { + grub_free (entry_item); + goto fail; + } + + if (entry_item->type == GRUB_REISERFS_DIRECTORY) + entry_type = GRUB_FSHELP_DIR; + else + { + grub_uint32_t entry_block_number; + /* Order is very important here. + First set the offset to 0 using current key version. + Then change the key type, which affects key version + detection. */ + grub_reiserfs_set_key_offset (&entry_key, 0); + grub_reiserfs_set_key_type (&entry_key, GRUB_REISERFS_STAT, + 2); + if (grub_reiserfs_get_item (data, &entry_key, entry_item, 1) + != GRUB_ERR_NONE) + { + grub_free (entry_item); + goto fail; + } + + if (entry_item->block_number != 0) + { + grub_uint16_t entry_version; + entry_version + = grub_le_to_cpu16 (entry_item->header.version); + entry_block_number = entry_item->block_number; +#if 0 + grub_dprintf ("reiserfs", + "version %04x block %08x (%08x) position %08x\n", + entry_version, entry_block_number, + ((grub_disk_addr_t) entry_block_number * block_size) / GRUB_DISK_SECTOR_SIZE, + grub_le_to_cpu16 (entry_item->header.item_location)); +#endif + if (entry_version == 0) /* Version 1 stat item. */ + { + struct grub_reiserfs_stat_item_v1 entry_v1_stat; + grub_disk_read (data->disk, + entry_block_number * (block_size >> GRUB_DISK_SECTOR_BITS), + grub_le_to_cpu16 (entry_item->header.item_location), + sizeof (entry_v1_stat), + (char *) &entry_v1_stat); + if (grub_errno) + goto fail; +#if 0 + grub_dprintf ("reiserfs", + "%04x %04x %04x %04x %08x %08x | %08x %08x %08x %08x\n", + grub_le_to_cpu16 (entry_v1_stat.mode), + grub_le_to_cpu16 (entry_v1_stat.hardlink_count), + grub_le_to_cpu16 (entry_v1_stat.uid), + grub_le_to_cpu16 (entry_v1_stat.gid), + grub_le_to_cpu32 (entry_v1_stat.size), + grub_le_to_cpu32 (entry_v1_stat.atime), + grub_le_to_cpu32 (entry_v1_stat.mtime), + grub_le_to_cpu32 (entry_v1_stat.ctime), + grub_le_to_cpu32 (entry_v1_stat.rdev), + grub_le_to_cpu32 (entry_v1_stat.first_direct_byte)); + grub_dprintf ("reiserfs", + "%04x %04x %04x %04x %08x %08x | %08x %08x %08x %08x\n", + entry_v1_stat.mode, + entry_v1_stat.hardlink_count, + entry_v1_stat.uid, + entry_v1_stat.gid, + entry_v1_stat.size, + entry_v1_stat.atime, + entry_v1_stat.mtime, + entry_v1_stat.ctime, + entry_v1_stat.rdev, + entry_v1_stat.first_direct_byte); +#endif + entry_item->mtime = grub_le_to_cpu32 (entry_v1_stat.mtime); + if ((grub_le_to_cpu16 (entry_v1_stat.mode) & S_IFLNK) + == S_IFLNK) + entry_type = GRUB_FSHELP_SYMLINK; + else + entry_type = GRUB_FSHELP_REG; + entry_item->size = (grub_off_t) grub_le_to_cpu32 (entry_v1_stat.size); + } + else + { + struct grub_reiserfs_stat_item_v2 entry_v2_stat; + grub_disk_read (data->disk, + entry_block_number * (block_size >> GRUB_DISK_SECTOR_BITS), + grub_le_to_cpu16 (entry_item->header.item_location), + sizeof (entry_v2_stat), + (char *) &entry_v2_stat); + if (grub_errno) + goto fail; +#if 0 + grub_dprintf ("reiserfs", + "%04x %04x %08x %08x%08x | %08x %08x %08x %08x | %08x %08x %08x\n", + grub_le_to_cpu16 (entry_v2_stat.mode), + grub_le_to_cpu16 (entry_v2_stat.reserved), + grub_le_to_cpu32 (entry_v2_stat.hardlink_count), + (unsigned int) (grub_le_to_cpu64 (entry_v2_stat.size) >> 32), + (unsigned int) (grub_le_to_cpu64 (entry_v2_stat.size) && 0xFFFFFFFF), + grub_le_to_cpu32 (entry_v2_stat.uid), + grub_le_to_cpu32 (entry_v2_stat.gid), + grub_le_to_cpu32 (entry_v2_stat.atime), + grub_le_to_cpu32 (entry_v2_stat.mtime), + grub_le_to_cpu32 (entry_v2_stat.ctime), + grub_le_to_cpu32 (entry_v2_stat.blocks), + grub_le_to_cpu32 (entry_v2_stat.first_direct_byte)); + grub_dprintf ("reiserfs", + "%04x %04x %08x %08x%08x | %08x %08x %08x %08x | %08x %08x %08x\n", + entry_v2_stat.mode, + entry_v2_stat.reserved, + entry_v2_stat.hardlink_count, + (unsigned int) (entry_v2_stat.size >> 32), + (unsigned int) (entry_v2_stat.size && 0xFFFFFFFF), + entry_v2_stat.uid, + entry_v2_stat.gid, + entry_v2_stat.atime, + entry_v2_stat.mtime, + entry_v2_stat.ctime, + entry_v2_stat.blocks, + entry_v2_stat.first_direct_byte); +#endif + entry_item->mtime = grub_le_to_cpu32 (entry_v2_stat.mtime); + entry_item->size = (grub_off_t) grub_le_to_cpu64 (entry_v2_stat.size); + if ((grub_le_to_cpu16 (entry_v2_stat.mode) & S_IFLNK) + == S_IFLNK) + entry_type = GRUB_FSHELP_SYMLINK; + else + entry_type = GRUB_FSHELP_REG; + } + } + else + { + /* Pseudo file ".." never has stat block. */ + if (entry_name_end == entry_name + 2 && grub_memcmp (entry_name, "..", 2) != 0) + grub_dprintf ("reiserfs", + "Warning : %s has no stat block !\n", + entry_name); + grub_free (entry_item); + goto next; + } + } + + c = *entry_name_end; + *entry_name_end = 0; + if (hook (entry_name, entry_type, entry_item, hook_data)) + { + *entry_name_end = c; + grub_dprintf ("reiserfs", "Found : %s, type=%d\n", + entry_name, entry_type); + ret = 1; + goto found; + } + *entry_name_end = c; + + next: + ; + } + + if (next_offset == 0) + break; + + grub_reiserfs_set_key_offset (&(item_headers[block_position].key), + next_offset); + if (grub_reiserfs_get_item (data, &(item_headers[block_position].key), + &directory_item, 1) != GRUB_ERR_NONE) + goto fail; + block_number = directory_item.block_number; + block_position = directory_item.block_position; + next_offset = directory_item.next_offset; + } + while (block_number); + + found: + assert (grub_errno == GRUB_ERR_NONE); + grub_free (block_header); + return ret; + fail: + assert (grub_errno != GRUB_ERR_NONE); + grub_free (block_header); + return 0; +} + +/****************************************************************************/ +/* grub api functions */ +/****************************************************************************/ + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_reiserfs_open (struct grub_file *file, const char *name) +{ + struct grub_reiserfs_data *data = 0; + struct grub_fshelp_node root, *found = 0; + struct grub_reiserfs_key key; + + grub_dl_ref (my_mod); + data = grub_reiserfs_mount (file->device->disk); + if (! data) + goto fail; + key.directory_id = grub_cpu_to_le32_compile_time (1); + key.object_id = grub_cpu_to_le32_compile_time (2); + key.u.v2.offset_type = 0; + grub_reiserfs_set_key_type (&key, GRUB_REISERFS_DIRECTORY, 2); + grub_reiserfs_set_key_offset (&key, 1); + if (grub_reiserfs_get_item (data, &key, &root, 1) != GRUB_ERR_NONE) + goto fail; + if (root.block_number == 0) + { + grub_error (GRUB_ERR_BAD_FS, "unable to find root item"); + goto fail; /* Should never happen since checked at mount. */ + } + grub_fshelp_find_file (name, &root, &found, + grub_reiserfs_iterate_dir, + grub_reiserfs_read_symlink, GRUB_FSHELP_REG); + if (grub_errno) + goto fail; + file->size = found->size; + + grub_dprintf ("reiserfs", "file size : %d (%08x%08x)\n", + (unsigned int) file->size, + (unsigned int) (file->size >> 32), (unsigned int) file->size); + file->offset = 0; + file->data = found; + return GRUB_ERR_NONE; + + fail: + assert (grub_errno != GRUB_ERR_NONE); + if (found != &root) + grub_free (found); + grub_free (data); + grub_dl_unref (my_mod); + return grub_errno; +} + +static grub_ssize_t +grub_reiserfs_read_real (struct grub_fshelp_node *node, + grub_off_t off, char *buf, grub_size_t len, + grub_disk_read_hook_t read_hook, void *read_hook_data) +{ + unsigned int indirect_block, indirect_block_count; + struct grub_reiserfs_key key; + struct grub_reiserfs_data *data = node->data; + struct grub_fshelp_node found; + grub_uint16_t block_size = grub_le_to_cpu16 (data->superblock.block_size); + grub_uint16_t item_size; + grub_uint32_t *indirect_block_ptr = 0; + grub_uint64_t current_key_offset = 1; + grub_off_t initial_position, current_position, final_position, length; + grub_disk_addr_t block; + grub_off_t offset; + + key.directory_id = node->header.key.directory_id; + key.object_id = node->header.key.object_id; + key.u.v2.offset_type = 0; + grub_reiserfs_set_key_type (&key, GRUB_REISERFS_ANY, 2); + initial_position = off; + current_position = 0; + final_position = MIN (len + initial_position, node->size); + grub_dprintf ("reiserfs", + "Reading from %lld to %lld (%lld instead of requested %ld)\n", + (unsigned long long) initial_position, + (unsigned long long) final_position, + (unsigned long long) (final_position - initial_position), + (unsigned long) len); + + grub_reiserfs_set_key_offset (&key, initial_position + 1); + + if (grub_reiserfs_get_item (data, &key, &found, 0) != GRUB_ERR_NONE) + goto fail; + + if (found.block_number == 0) + { + grub_error (GRUB_ERR_READ_ERROR, "offset %lld not found", + (unsigned long long) initial_position); + goto fail; + } + + current_key_offset = grub_reiserfs_get_key_offset (&found.header.key); + current_position = current_key_offset - 1; + + while (current_position < final_position) + { + grub_reiserfs_set_key_offset (&key, current_key_offset); + + if (grub_reiserfs_get_item (data, &key, &found, 1) != GRUB_ERR_NONE) + goto fail; + if (found.block_number == 0) + goto fail; + item_size = grub_le_to_cpu16 (found.header.item_size); + switch (found.type) + { + case GRUB_REISERFS_DIRECT: + block = ((grub_disk_addr_t) found.block_number) * (block_size >> GRUB_DISK_SECTOR_BITS); + grub_dprintf ("reiserfs_blocktype", "D: %u\n", (unsigned) block); + if (initial_position < current_position + item_size) + { + offset = MAX ((signed) (initial_position - current_position), 0); + length = (MIN (item_size, final_position - current_position) + - offset); + grub_dprintf ("reiserfs", + "Reading direct block %u from %u to %u...\n", + (unsigned) block, (unsigned) offset, + (unsigned) (offset + length)); + found.data->disk->read_hook = read_hook; + found.data->disk->read_hook_data = read_hook_data; + grub_disk_read (found.data->disk, + block, + offset + + grub_le_to_cpu16 (found.header.item_location), + length, buf); + found.data->disk->read_hook = 0; + if (grub_errno) + goto fail; + buf += length; + current_position += offset + length; + } + else + current_position += item_size; + break; + case GRUB_REISERFS_INDIRECT: + indirect_block_count = item_size / sizeof (*indirect_block_ptr); + indirect_block_ptr = grub_malloc (item_size); + if (! indirect_block_ptr) + goto fail; + grub_disk_read (found.data->disk, + found.block_number * (block_size >> GRUB_DISK_SECTOR_BITS), + grub_le_to_cpu16 (found.header.item_location), + item_size, indirect_block_ptr); + if (grub_errno) + goto fail; + found.data->disk->read_hook = read_hook; + found.data->disk->read_hook_data = read_hook_data; + for (indirect_block = 0; + indirect_block < indirect_block_count + && current_position < final_position; + indirect_block++) + { + block = grub_le_to_cpu32 (indirect_block_ptr[indirect_block]) * + (block_size >> GRUB_DISK_SECTOR_BITS); + grub_dprintf ("reiserfs_blocktype", "I: %u\n", (unsigned) block); + if (current_position + block_size >= initial_position) + { + offset = MAX ((signed) (initial_position - current_position), + 0); + length = (MIN (block_size, final_position - current_position) + - offset); + grub_dprintf ("reiserfs", + "Reading indirect block %u from %u to %u...\n", + (unsigned) block, (unsigned) offset, + (unsigned) (offset + length)); +#if 0 + grub_dprintf ("reiserfs", + "\nib=%04d/%04d, ip=%d, cp=%d, fp=%d, off=%d, l=%d, tl=%d\n", + indirect_block + 1, indirect_block_count, + initial_position, current_position, + final_position, offset, length, len); +#endif + grub_disk_read (found.data->disk, block, offset, length, buf); + if (grub_errno) + goto fail; + buf += length; + current_position += offset + length; + } + else + current_position += block_size; + } + found.data->disk->read_hook = 0; + grub_free (indirect_block_ptr); + indirect_block_ptr = 0; + break; + default: + goto fail; + } + current_key_offset = current_position + 1; + } + + grub_dprintf ("reiserfs", + "Have successfully read %lld bytes (%ld requested)\n", + (unsigned long long) (current_position - initial_position), + (unsigned long) len); + return current_position - initial_position; + +#if 0 + switch (found.type) + { + case GRUB_REISERFS_DIRECT: + read_length = MIN (len, item_size - file->offset); + grub_disk_read (found.data->disk, + (found.block_number * block_size) / GRUB_DISK_SECTOR_SIZE, + grub_le_to_cpu16 (found.header.item_location) + file->offset, + read_length, buf); + if (grub_errno) + goto fail; + break; + case GRUB_REISERFS_INDIRECT: + indirect_block_count = item_size / sizeof (*indirect_block_ptr); + indirect_block_ptr = grub_malloc (item_size); + if (!indirect_block_ptr) + goto fail; + grub_disk_read (found.data->disk, + (found.block_number * block_size) / GRUB_DISK_SECTOR_SIZE, + grub_le_to_cpu16 (found.header.item_location), + item_size, (char *) indirect_block_ptr); + if (grub_errno) + goto fail; + len = MIN (len, file->size - file->offset); + for (indirect_block = file->offset / block_size; + indirect_block < indirect_block_count && read_length < len; + indirect_block++) + { + read = MIN (block_size, len - read_length); + grub_disk_read (found.data->disk, + (grub_le_to_cpu32 (indirect_block_ptr[indirect_block]) * block_size) / GRUB_DISK_SECTOR_SIZE, + file->offset % block_size, read, + ((void *) buf) + read_length); + if (grub_errno) + goto fail; + read_length += read; + } + grub_free (indirect_block_ptr); + break; + default: + goto fail; + } + + return read_length; +#endif + + fail: + grub_free (indirect_block_ptr); + return -1; +} + +static grub_ssize_t +grub_reiserfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + return grub_reiserfs_read_real (file->data, file->offset, buf, len, + file->read_hook, file->read_hook_data); +} + +/* Close the file FILE. */ +static grub_err_t +grub_reiserfs_close (grub_file_t file) +{ + struct grub_fshelp_node *node = file->data; + struct grub_reiserfs_data *data = node->data; + + grub_free (data); + grub_free (node); + grub_dl_unref (my_mod); + return GRUB_ERR_NONE; +} + +/* Context for grub_reiserfs_dir. */ +struct grub_reiserfs_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_reiserfs_dir. */ +static int +grub_reiserfs_dir_iter (const char *filename, + enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_reiserfs_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + info.mtimeset = 1; + info.mtime = node->mtime; + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +/* Call HOOK with each file under DIR. */ +static grub_err_t +grub_reiserfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_reiserfs_dir_ctx ctx = { hook, hook_data }; + struct grub_reiserfs_data *data = 0; + struct grub_fshelp_node root, *found; + struct grub_reiserfs_key root_key; + + grub_dl_ref (my_mod); + data = grub_reiserfs_mount (device->disk); + if (! data) + goto fail; + root_key.directory_id = grub_cpu_to_le32_compile_time (1); + root_key.object_id = grub_cpu_to_le32_compile_time (2); + root_key.u.v2.offset_type = 0; + grub_reiserfs_set_key_type (&root_key, GRUB_REISERFS_DIRECTORY, 2); + grub_reiserfs_set_key_offset (&root_key, 1); + if (grub_reiserfs_get_item (data, &root_key, &root, 1) != GRUB_ERR_NONE) + goto fail; + if (root.block_number == 0) + { + grub_error(GRUB_ERR_BAD_FS, "root not found"); + goto fail; + } + grub_fshelp_find_file (path, &root, &found, grub_reiserfs_iterate_dir, + grub_reiserfs_read_symlink, GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + grub_reiserfs_iterate_dir (found, grub_reiserfs_dir_iter, &ctx); + grub_free (data); + grub_dl_unref (my_mod); + return GRUB_ERR_NONE; + + fail: + grub_free (data); + grub_dl_unref (my_mod); + return grub_errno; +} + +/* Return the label of the device DEVICE in LABEL. The label is + returned in a grub_malloc'ed buffer and should be freed by the + caller. */ +static grub_err_t +grub_reiserfs_label (grub_device_t device, char **label) +{ + struct grub_reiserfs_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_reiserfs_mount (disk); + if (data) + { + *label = grub_strndup (data->superblock.label, + sizeof (data->superblock.label)); + } + else + *label = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_reiserfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_reiserfs_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + *uuid = NULL; + data = grub_reiserfs_mount (disk); + if (data) + { + unsigned i; + for (i = 0; i < ARRAY_SIZE (data->superblock.uuid); i++) + if (data->superblock.uuid[i]) + break; + if (i < ARRAY_SIZE (data->superblock.uuid)) + *uuid = grub_xasprintf ("%04x%04x-%04x-%04x-%04x-%04x%04x%04x", + grub_be_to_cpu16 (data->superblock.uuid[0]), + grub_be_to_cpu16 (data->superblock.uuid[1]), + grub_be_to_cpu16 (data->superblock.uuid[2]), + grub_be_to_cpu16 (data->superblock.uuid[3]), + grub_be_to_cpu16 (data->superblock.uuid[4]), + grub_be_to_cpu16 (data->superblock.uuid[5]), + grub_be_to_cpu16 (data->superblock.uuid[6]), + grub_be_to_cpu16 (data->superblock.uuid[7])); + } + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static struct grub_fs grub_reiserfs_fs = + { + .name = "reiserfs", + .dir = grub_reiserfs_dir, + .open = grub_reiserfs_open, + .read = grub_reiserfs_read, + .close = grub_reiserfs_close, + .label = grub_reiserfs_label, + .uuid = grub_reiserfs_uuid, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(reiserfs) +{ + grub_fs_register (&grub_reiserfs_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(reiserfs) +{ + grub_fs_unregister (&grub_reiserfs_fs); +} diff --git a/grub-core/fs/romfs.c b/grub-core/fs/romfs.c new file mode 100644 index 000000000..2e3544408 --- /dev/null +++ b/grub-core/fs/romfs.c @@ -0,0 +1,484 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_romfs_superblock +{ + char magic[8]; +#define GRUB_ROMFS_MAGIC "-rom1fs-" + grub_uint32_t total_size; + grub_uint32_t chksum; + char label[0]; +}; + +struct grub_romfs_file_header +{ + grub_uint32_t next_file; + grub_uint32_t spec; + grub_uint32_t size; + grub_uint32_t chksum; + char name[0]; +}; + +struct grub_romfs_data +{ + grub_disk_addr_t first_file; + grub_disk_t disk; +}; + +struct grub_fshelp_node +{ + grub_disk_addr_t addr; + struct grub_romfs_data *data; + grub_disk_addr_t data_addr; + /* Not filled for root. */ + struct grub_romfs_file_header file; +}; + +#define GRUB_ROMFS_ALIGN 16 +#define GRUB_ROMFS_TYPE_MASK 7 +#define GRUB_ROMFS_TYPE_HARDLINK 0 +#define GRUB_ROMFS_TYPE_DIRECTORY 1 +#define GRUB_ROMFS_TYPE_REGULAR 2 +#define GRUB_ROMFS_TYPE_SYMLINK 3 + +static grub_err_t +do_checksum (void *in, grub_size_t insize) +{ + grub_uint32_t *a = in; + grub_size_t sz = insize / 4; + grub_uint32_t *b = a + sz; + grub_uint32_t csum = 0; + + while (a < b) + csum += grub_be_to_cpu32 (*a++); + if (csum) + return grub_error (GRUB_ERR_BAD_FS, "invalid checksum"); + return GRUB_ERR_NONE; +} + +static struct grub_romfs_data * +grub_romfs_mount (grub_device_t dev) +{ + union { + struct grub_romfs_superblock sb; + char d[512]; + } sb; + grub_err_t err; + char *ptr; + grub_disk_addr_t sec = 0; + struct grub_romfs_data *data; + if (!dev->disk) + { + grub_error (GRUB_ERR_BAD_FS, "not a disk"); + return NULL; + } + err = grub_disk_read (dev->disk, 0, 0, sizeof (sb), &sb); + if (err == GRUB_ERR_OUT_OF_RANGE) + err = grub_errno = GRUB_ERR_BAD_FS; + if (err) + return NULL; + if (grub_be_to_cpu32 (sb.sb.total_size) < sizeof (sb)) + { + grub_error (GRUB_ERR_BAD_FS, "too short filesystem"); + return NULL; + } + if (grub_memcmp (sb.sb.magic, GRUB_ROMFS_MAGIC, + sizeof (sb.sb.magic)) != 0) + { + grub_error (GRUB_ERR_BAD_FS, "not romfs"); + return NULL; + } + err = do_checksum (&sb, sizeof (sb) < grub_be_to_cpu32 (sb.sb.total_size) ? + sizeof (sb) : grub_be_to_cpu32 (sb.sb.total_size)); + if (err) + { + grub_error (GRUB_ERR_BAD_FS, "checksum incorrect"); + return NULL; + } + for (ptr = sb.sb.label; (void *) ptr < (void *) (&sb + 1) + && ptr - sb.d < (grub_ssize_t) grub_be_to_cpu32 (sb.sb.total_size); ptr++) + if (!*ptr) + break; + while ((void *) ptr == &sb + 1) + { + sec++; + err = grub_disk_read (dev->disk, sec, 0, sizeof (sb), &sb); + if (err == GRUB_ERR_OUT_OF_RANGE) + err = grub_errno = GRUB_ERR_BAD_FS; + if (err) + return NULL; + for (ptr = sb.d; (void *) ptr < (void *) (&sb + 1) + && (ptr - sb.d + (sec << GRUB_DISK_SECTOR_BITS) + < grub_be_to_cpu32 (sb.sb.total_size)); + ptr++) + if (!*ptr) + break; + } + data = grub_malloc (sizeof (*data)); + if (!data) + return NULL; + data->first_file = ALIGN_UP (ptr + 1 - sb.d, GRUB_ROMFS_ALIGN) + + (sec << GRUB_DISK_SECTOR_BITS); + data->disk = dev->disk; + return data; +} + +static char * +grub_romfs_read_symlink (grub_fshelp_node_t node) +{ + char *ret; + grub_err_t err; + ret = grub_malloc (grub_be_to_cpu32 (node->file.size) + 1); + if (!ret) + return NULL; + err = grub_disk_read (node->data->disk, + (node->data_addr) >> GRUB_DISK_SECTOR_BITS, + (node->data_addr) & (GRUB_DISK_SECTOR_SIZE - 1), + grub_be_to_cpu32 (node->file.size), ret); + if (err) + { + grub_free (ret); + return NULL; + } + ret[grub_be_to_cpu32 (node->file.size)] = 0; + return ret; +} + +static int +grub_romfs_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + grub_disk_addr_t caddr; + struct grub_romfs_file_header hdr; + unsigned nptr; + unsigned i, j; + grub_size_t a = 0; + grub_properly_aligned_t *name = NULL; + + for (caddr = dir->data_addr; caddr; + caddr = grub_be_to_cpu32 (hdr.next_file) & ~(GRUB_ROMFS_ALIGN - 1)) + { + grub_disk_addr_t naddr = caddr + sizeof (hdr); + grub_uint32_t csum = 0; + enum grub_fshelp_filetype filetype = GRUB_FSHELP_UNKNOWN; + struct grub_fshelp_node *node = NULL; + grub_err_t err; + + err = grub_disk_read (dir->data->disk, caddr >> GRUB_DISK_SECTOR_BITS, + caddr & (GRUB_DISK_SECTOR_SIZE - 1), + sizeof (hdr), &hdr); + if (err) + { + grub_free (name); + return 1; + } + for (nptr = 0; ; nptr++, naddr += 16) + { + if (a <= nptr) + { + grub_properly_aligned_t *on; + a = 2 * (nptr + 1); + on = name; + name = grub_realloc (name, a * 16); + if (!name) + { + grub_free (on); + return 1; + } + } + COMPILE_TIME_ASSERT (16 % sizeof (name[0]) == 0); + err = grub_disk_read (dir->data->disk, naddr >> GRUB_DISK_SECTOR_BITS, + naddr & (GRUB_DISK_SECTOR_SIZE - 1), + 16, name + (16 / sizeof (name[0])) * nptr); + if (err) + return 1; + for (j = 0; j < 16; j++) + if (!((char *) name)[16 * nptr + j]) + break; + if (j != 16) + break; + } + for (i = 0; i < sizeof (hdr) / sizeof (grub_uint32_t); i++) + csum += grub_be_to_cpu32 (((grub_uint32_t *) &hdr)[i]); + for (i = 0; i < (nptr + 1) * 4; i++) + csum += grub_be_to_cpu32 (((grub_uint32_t *) name)[i]); + if (csum != 0) + { + grub_error (GRUB_ERR_BAD_FS, "invalid checksum"); + grub_free (name); + return 1; + } + node = grub_malloc (sizeof (*node)); + if (!node) + return 1; + node->addr = caddr; + node->data_addr = caddr + (nptr + 1) * 16 + sizeof (hdr); + node->data = dir->data; + node->file = hdr; + switch (grub_be_to_cpu32 (hdr.next_file) & GRUB_ROMFS_TYPE_MASK) + { + case GRUB_ROMFS_TYPE_REGULAR: + filetype = GRUB_FSHELP_REG; + break; + case GRUB_ROMFS_TYPE_SYMLINK: + filetype = GRUB_FSHELP_SYMLINK; + break; + case GRUB_ROMFS_TYPE_DIRECTORY: + node->data_addr = grub_be_to_cpu32 (hdr.spec); + filetype = GRUB_FSHELP_DIR; + break; + case GRUB_ROMFS_TYPE_HARDLINK: + { + grub_disk_addr_t laddr; + node->addr = laddr = grub_be_to_cpu32 (hdr.spec); + err = grub_disk_read (dir->data->disk, + laddr >> GRUB_DISK_SECTOR_BITS, + laddr & (GRUB_DISK_SECTOR_SIZE - 1), + sizeof (node->file), &node->file); + if (err) + return 1; + if ((grub_be_to_cpu32 (node->file.next_file) & GRUB_ROMFS_TYPE_MASK) + == GRUB_ROMFS_TYPE_REGULAR + || (grub_be_to_cpu32 (node->file.next_file) + & GRUB_ROMFS_TYPE_MASK) == GRUB_ROMFS_TYPE_SYMLINK) + { + laddr += sizeof (hdr); + while (1) + { + char buf[16]; + err = grub_disk_read (dir->data->disk, + laddr >> GRUB_DISK_SECTOR_BITS, + laddr & (GRUB_DISK_SECTOR_SIZE - 1), + 16, buf); + if (err) + return 1; + for (i = 0; i < 16; i++) + if (!buf[i]) + break; + if (i != 16) + break; + laddr += 16; + } + node->data_addr = laddr + 16; + } + if ((grub_be_to_cpu32 (node->file.next_file) + & GRUB_ROMFS_TYPE_MASK) == GRUB_ROMFS_TYPE_REGULAR) + filetype = GRUB_FSHELP_REG; + if ((grub_be_to_cpu32 (node->file.next_file) + & GRUB_ROMFS_TYPE_MASK) == GRUB_ROMFS_TYPE_SYMLINK) + filetype = GRUB_FSHELP_SYMLINK; + if ((grub_be_to_cpu32 (node->file.next_file) & GRUB_ROMFS_TYPE_MASK) + == GRUB_ROMFS_TYPE_DIRECTORY) + { + node->data_addr = grub_be_to_cpu32 (node->file.spec); + filetype = GRUB_FSHELP_DIR; + } + + break; + } + } + + if (hook ((char *) name, filetype, node, hook_data)) + { + grub_free (name); + return 1; + } + } + grub_free (name); + return 0; +} + +/* Context for grub_romfs_dir. */ +struct grub_romfs_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_romfs_dir. */ +static int +grub_romfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_romfs_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_romfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_romfs_dir_ctx ctx = { hook, hook_data }; + struct grub_romfs_data *data = 0; + struct grub_fshelp_node *fdiro = 0, start; + + data = grub_romfs_mount (device); + if (! data) + goto fail; + + start.addr = data->first_file; + start.data_addr = data->first_file; + start.data = data; + grub_fshelp_find_file (path, &start, &fdiro, grub_romfs_iterate_dir, + grub_romfs_read_symlink, GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + grub_romfs_iterate_dir (fdiro, grub_romfs_dir_iter, &ctx); + + fail: + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_romfs_open (struct grub_file *file, const char *name) +{ + struct grub_romfs_data *data = 0; + struct grub_fshelp_node *fdiro = 0, start; + + data = grub_romfs_mount (file->device); + if (! data) + goto fail; + + start.addr = data->first_file; + start.data_addr = data->first_file; + start.data = data; + + grub_fshelp_find_file (name, &start, &fdiro, grub_romfs_iterate_dir, + grub_romfs_read_symlink, GRUB_FSHELP_REG); + if (grub_errno) + goto fail; + + file->size = grub_be_to_cpu32 (fdiro->file.size); + file->data = fdiro; + return GRUB_ERR_NONE; + + fail: + grub_free (data); + + return grub_errno; +} + +static grub_ssize_t +grub_romfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_fshelp_node *data = file->data; + + /* XXX: The file is stored in as a single extent. */ + data->data->disk->read_hook = file->read_hook; + data->data->disk->read_hook_data = file->read_hook_data; + grub_disk_read (data->data->disk, + (data->data_addr + file->offset) >> GRUB_DISK_SECTOR_BITS, + (data->data_addr + file->offset) & (GRUB_DISK_SECTOR_SIZE - 1), + len, buf); + data->data->disk->read_hook = NULL; + + if (grub_errno) + return -1; + + return len; +} + +static grub_err_t +grub_romfs_close (grub_file_t file) +{ + struct grub_fshelp_node *data = file->data; + + grub_free (data->data); + grub_free (data); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_romfs_label (grub_device_t device, char **label) +{ + struct grub_romfs_data *data; + grub_err_t err; + + *label = NULL; + + data = grub_romfs_mount (device); + if (!data) + return grub_errno; + *label = grub_malloc (data->first_file + 1 + - sizeof (struct grub_romfs_superblock)); + if (!*label) + { + grub_free (data); + return grub_errno; + } + err = grub_disk_read (device->disk, 0, sizeof (struct grub_romfs_superblock), + data->first_file + - sizeof (struct grub_romfs_superblock), + *label); + if (err) + { + grub_free (data); + grub_free (*label); + *label = NULL; + return err; + } + (*label)[data->first_file - sizeof (struct grub_romfs_superblock)] = 0; + grub_free (data); + return GRUB_ERR_NONE; +} + + +static struct grub_fs grub_romfs_fs = + { + .name = "romfs", + .dir = grub_romfs_dir, + .open = grub_romfs_open, + .read = grub_romfs_read, + .close = grub_romfs_close, + .label = grub_romfs_label, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(romfs) +{ + grub_fs_register (&grub_romfs_fs); +} + +GRUB_MOD_FINI(romfs) +{ + grub_fs_unregister (&grub_romfs_fs); +} diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c new file mode 100644 index 000000000..57b8d8da6 --- /dev/null +++ b/grub-core/fs/sfs.c @@ -0,0 +1,765 @@ +/* sfs.c - Amiga Smart FileSystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* The common header for a block. */ +struct grub_sfs_bheader +{ + grub_uint8_t magic[4]; + grub_uint32_t chksum; + grub_uint32_t ipointtomyself; +} GRUB_PACKED; + +/* The sfs rootblock. */ +struct grub_sfs_rblock +{ + struct grub_sfs_bheader header; + grub_uint32_t version; + grub_uint32_t createtime; + grub_uint8_t flags; + grub_uint8_t unused1[31]; + grub_uint32_t blocksize; + grub_uint8_t unused2[40]; + grub_uint8_t unused3[8]; + grub_uint32_t rootobject; + grub_uint32_t btree; +} GRUB_PACKED; + +enum + { + FLAGS_CASE_SENSITIVE = 0x80 + }; + +/* A SFS object container. */ +struct grub_sfs_obj +{ + grub_uint8_t unused1[4]; + grub_uint32_t nodeid; + grub_uint8_t unused2[4]; + union + { + struct + { + grub_uint32_t first_block; + grub_uint32_t size; + } GRUB_PACKED file; + struct + { + grub_uint32_t hashtable; + grub_uint32_t dir_objc; + } GRUB_PACKED dir; + } file_dir; + grub_uint32_t mtime; + grub_uint8_t type; + grub_uint8_t filename[1]; + grub_uint8_t comment[1]; +} GRUB_PACKED; + +#define GRUB_SFS_TYPE_DELETED 32 +#define GRUB_SFS_TYPE_SYMLINK 64 +#define GRUB_SFS_TYPE_DIR 128 + +/* A SFS object container. */ +struct grub_sfs_objc +{ + struct grub_sfs_bheader header; + grub_uint32_t parent; + grub_uint32_t next; + grub_uint32_t prev; + /* The amount of objects depends on the blocksize. */ + struct grub_sfs_obj objects[1]; +} GRUB_PACKED; + +struct grub_sfs_btree_node +{ + grub_uint32_t key; + grub_uint32_t data; +} GRUB_PACKED; + +struct grub_sfs_btree_extent +{ + grub_uint32_t key; + grub_uint32_t next; + grub_uint32_t prev; + grub_uint16_t size; +} GRUB_PACKED; + +struct grub_sfs_btree +{ + struct grub_sfs_bheader header; + grub_uint16_t nodes; + grub_uint8_t leaf; + grub_uint8_t nodesize; + /* Normally this can be kind of node, but just extents are + supported. */ + struct grub_sfs_btree_node node[1]; +} GRUB_PACKED; + + + +struct cache_entry +{ + grub_uint32_t off; + grub_uint32_t block; +}; + +struct grub_fshelp_node +{ + struct grub_sfs_data *data; + grub_uint32_t block; + grub_uint32_t size; + grub_uint32_t mtime; + grub_uint32_t cache_off; + grub_uint32_t next_extent; + grub_size_t cache_allocated; + grub_size_t cache_size; + struct cache_entry *cache; +}; + +/* Information about a "mounted" sfs filesystem. */ +struct grub_sfs_data +{ + struct grub_sfs_rblock rblock; + struct grub_fshelp_node diropen; + grub_disk_t disk; + + /* Log of blocksize in sectors. */ + int log_blocksize; + + int fshelp_flags; + + /* Label of the filesystem. */ + char *label; +}; + +static grub_dl_t my_mod; + + +/* Lookup the extent starting with BLOCK in the filesystem described + by DATA. Return the extent size in SIZE and the following extent + in NEXTEXT. */ +static grub_err_t +grub_sfs_read_extent (struct grub_sfs_data *data, unsigned int block, + grub_uint32_t *size, grub_uint32_t *nextext) +{ + char *treeblock; + struct grub_sfs_btree *tree; + int i; + grub_uint32_t next; + grub_size_t blocksize = GRUB_DISK_SECTOR_SIZE << data->log_blocksize; + + treeblock = grub_malloc (blocksize); + if (!treeblock) + return grub_errno; + + next = grub_be_to_cpu32 (data->rblock.btree); + tree = (struct grub_sfs_btree *) treeblock; + + /* Handle this level in the btree. */ + do + { + grub_uint16_t nnodes; + grub_disk_read (data->disk, + ((grub_disk_addr_t) next) << data->log_blocksize, + 0, blocksize, treeblock); + if (grub_errno) + { + grub_free (treeblock); + return grub_errno; + } + + nnodes = grub_be_to_cpu16 (tree->nodes); + if (nnodes * (grub_uint32_t) (tree)->nodesize > blocksize) + break; + + for (i = (int) nnodes - 1; i >= 0; i--) + { + +#define EXTNODE(tree, index) \ + ((struct grub_sfs_btree_node *) (((char *) &(tree)->node[0]) \ + + (index) * (tree)->nodesize)) + + /* Follow the tree down to the leaf level. */ + if ((grub_be_to_cpu32 (EXTNODE(tree, i)->key) <= block) + && !tree->leaf) + { + next = grub_be_to_cpu32 (EXTNODE (tree, i)->data); + break; + } + + /* If the leaf level is reached, just find the correct extent. */ + if (grub_be_to_cpu32 (EXTNODE (tree, i)->key) == block && tree->leaf) + { + struct grub_sfs_btree_extent *extent; + extent = (struct grub_sfs_btree_extent *) EXTNODE (tree, i); + + /* We found a correct leaf. */ + *size = grub_be_to_cpu16 (extent->size); + *nextext = grub_be_to_cpu32 (extent->next); + + grub_free (treeblock); + return 0; + } + +#undef EXTNODE + + } + } while (!tree->leaf); + + grub_free (treeblock); + + return grub_error (GRUB_ERR_FILE_READ_ERROR, "SFS extent not found"); +} + +static grub_disk_addr_t +grub_sfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) +{ + grub_uint32_t blk; + grub_uint32_t size = 0; + grub_uint32_t next = 0; + grub_disk_addr_t off; + struct grub_sfs_data *data = node->data; + + /* In case of the first block we don't have to lookup the + extent, the minimum size is always 1. */ + if (fileblock == 0) + return node->block; + + if (!node->cache) + { + grub_size_t cache_size; + /* Assume half-max extents (32768 sectors). */ + cache_size = ((node->size >> (data->log_blocksize + GRUB_DISK_SECTOR_BITS + + 15)) + + 3); + if (cache_size < 8) + cache_size = 8; + + node->cache_off = 0; + node->next_extent = node->block; + node->cache_size = 0; + + node->cache = grub_malloc (sizeof (node->cache[0]) * cache_size); + if (!node->cache) + { + grub_errno = 0; + node->cache_allocated = 0; + } + else + { + node->cache_allocated = cache_size; + node->cache[0].off = 0; + node->cache[0].block = node->block; + } + } + + if (fileblock < node->cache_off) + { + unsigned int i = 0; + int j, lg; + for (lg = 0; node->cache_size >> lg; lg++); + + for (j = lg - 1; j >= 0; j--) + if ((i | (1 << j)) < node->cache_size + && node->cache[(i | (1 << j))].off <= fileblock) + i |= (1 << j); + return node->cache[i].block + fileblock - node->cache[i].off; + } + + off = node->cache_off; + blk = node->next_extent; + + while (blk) + { + grub_err_t err; + + err = grub_sfs_read_extent (node->data, blk, &size, &next); + if (err) + return 0; + + if (node->cache && node->cache_size >= node->cache_allocated) + { + struct cache_entry *e = node->cache; + e = grub_realloc (node->cache,node->cache_allocated * 2 + * sizeof (e[0])); + if (!e) + { + grub_errno = 0; + grub_free (node->cache); + node->cache = 0; + } + else + { + node->cache_allocated *= 2; + node->cache = e; + } + } + + if (node->cache) + { + node->cache_off = off + size; + node->next_extent = next; + node->cache[node->cache_size].off = off; + node->cache[node->cache_size].block = blk; + node->cache_size++; + } + + if (fileblock - off < size) + return fileblock - off + blk; + + off += size; + + blk = next; + } + + grub_error (GRUB_ERR_FILE_READ_ERROR, + "reading a SFS block outside the extent"); + + return 0; +} + + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_sfs_read_file (grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + return grub_fshelp_read_file (node->data->disk, node, + read_hook, read_hook_data, + pos, len, buf, grub_sfs_read_block, + node->size, node->data->log_blocksize, 0); +} + + +static struct grub_sfs_data * +grub_sfs_mount (grub_disk_t disk) +{ + struct grub_sfs_data *data; + struct grub_sfs_objc *rootobjc; + char *rootobjc_data = 0; + grub_uint32_t blk; + + data = grub_malloc (sizeof (*data)); + if (!data) + return 0; + + /* Read the rootblock. */ + grub_disk_read (disk, 0, 0, sizeof (struct grub_sfs_rblock), + &data->rblock); + if (grub_errno) + goto fail; + + /* Make sure this is a sfs filesystem. */ + if (grub_strncmp ((char *) (data->rblock.header.magic), "SFS", 4) + || data->rblock.blocksize == 0 + || (data->rblock.blocksize & (data->rblock.blocksize - 1)) != 0 + || (data->rblock.blocksize & grub_cpu_to_be32_compile_time (0xf00001ff))) + { + grub_error (GRUB_ERR_BAD_FS, "not a SFS filesystem"); + goto fail; + } + + for (data->log_blocksize = 9; + (1U << data->log_blocksize) < grub_be_to_cpu32 (data->rblock.blocksize); + data->log_blocksize++); + data->log_blocksize -= GRUB_DISK_SECTOR_BITS; + if (data->rblock.flags & FLAGS_CASE_SENSITIVE) + data->fshelp_flags = 0; + else + data->fshelp_flags = GRUB_FSHELP_CASE_INSENSITIVE; + rootobjc_data = grub_malloc (GRUB_DISK_SECTOR_SIZE << data->log_blocksize); + if (! rootobjc_data) + goto fail; + + /* Read the root object container. */ + grub_disk_read (disk, ((grub_disk_addr_t) grub_be_to_cpu32 (data->rblock.rootobject)) + << data->log_blocksize, 0, + GRUB_DISK_SECTOR_SIZE << data->log_blocksize, rootobjc_data); + if (grub_errno) + goto fail; + + rootobjc = (struct grub_sfs_objc *) rootobjc_data; + + blk = grub_be_to_cpu32 (rootobjc->objects[0].file_dir.dir.dir_objc); + data->diropen.size = 0; + data->diropen.block = blk; + data->diropen.data = data; + data->diropen.cache = 0; + data->disk = disk; + data->label = grub_strdup ((char *) (rootobjc->objects[0].filename)); + + grub_free (rootobjc_data); + return data; + + fail: + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not an SFS filesystem"); + + grub_free (data); + grub_free (rootobjc_data); + return 0; +} + + +static char * +grub_sfs_read_symlink (grub_fshelp_node_t node) +{ + struct grub_sfs_data *data = node->data; + char *symlink; + char *block; + + block = grub_malloc (GRUB_DISK_SECTOR_SIZE << data->log_blocksize); + if (!block) + return 0; + + grub_disk_read (data->disk, ((grub_disk_addr_t) node->block) + << data->log_blocksize, + 0, GRUB_DISK_SECTOR_SIZE << data->log_blocksize, block); + if (grub_errno) + { + grub_free (block); + return 0; + } + + /* This is just a wild guess, but it always worked for me. How the + SLNK block looks like is not documented in the SFS docs. */ + symlink = grub_malloc (((GRUB_DISK_SECTOR_SIZE << data->log_blocksize) + - 24) * GRUB_MAX_UTF8_PER_LATIN1 + 1); + if (!symlink) + { + grub_free (block); + return 0; + } + *grub_latin1_to_utf8 ((grub_uint8_t *) symlink, (grub_uint8_t *) &block[24], + (GRUB_DISK_SECTOR_SIZE << data->log_blocksize) - 24) = '\0'; + grub_free (block); + return symlink; +} + +/* Helper for grub_sfs_iterate_dir. */ +static int +grub_sfs_create_node (struct grub_fshelp_node **node, + struct grub_sfs_data *data, + const char *name, + grub_uint32_t block, grub_uint32_t size, int type, + grub_uint32_t mtime, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + grub_size_t len = grub_strlen (name); + grub_uint8_t *name_u8; + int ret; + *node = grub_malloc (sizeof (**node)); + if (!*node) + return 1; + name_u8 = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1); + if (!name_u8) + { + grub_free (*node); + return 1; + } + + (*node)->data = data; + (*node)->size = size; + (*node)->block = block; + (*node)->mtime = mtime; + (*node)->cache = 0; + (*node)->cache_off = 0; + (*node)->next_extent = block; + (*node)->cache_size = 0; + (*node)->cache_allocated = 0; + + *grub_latin1_to_utf8 (name_u8, (const grub_uint8_t *) name, len) = '\0'; + + ret = hook ((char *) name_u8, type | data->fshelp_flags, *node, hook_data); + grub_free (name_u8); + return ret; +} + +static int +grub_sfs_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + struct grub_fshelp_node *node = 0; + struct grub_sfs_data *data = dir->data; + char *objc_data; + struct grub_sfs_objc *objc; + unsigned int next = dir->block; + grub_uint32_t pos; + + objc_data = grub_malloc (GRUB_DISK_SECTOR_SIZE << data->log_blocksize); + if (!objc_data) + goto fail; + + /* The Object container can consist of multiple blocks, iterate over + every block. */ + while (next) + { + grub_disk_read (data->disk, ((grub_disk_addr_t) next) + << data->log_blocksize, 0, + GRUB_DISK_SECTOR_SIZE << data->log_blocksize, objc_data); + if (grub_errno) + goto fail; + + objc = (struct grub_sfs_objc *) objc_data; + + pos = (char *) &objc->objects[0] - (char *) objc; + + /* Iterate over all entries in this block. */ + while (pos + sizeof (struct grub_sfs_obj) + < (1U << (GRUB_DISK_SECTOR_BITS + data->log_blocksize))) + { + struct grub_sfs_obj *obj; + obj = (struct grub_sfs_obj *) ((char *) objc + pos); + const char *filename = (const char *) obj->filename; + grub_size_t len; + enum grub_fshelp_filetype type; + grub_uint32_t block; + + /* The filename and comment dynamically increase the size of + the object. */ + len = grub_strlen (filename); + len += grub_strlen (filename + len + 1); + + pos += sizeof (*obj) + len; + /* Round up to a multiple of two bytes. */ + pos = ((pos + 1) >> 1) << 1; + + if (filename[0] == 0) + continue; + + /* First check if the file was not deleted. */ + if (obj->type & GRUB_SFS_TYPE_DELETED) + continue; + else if (obj->type & GRUB_SFS_TYPE_SYMLINK) + type = GRUB_FSHELP_SYMLINK; + else if (obj->type & GRUB_SFS_TYPE_DIR) + type = GRUB_FSHELP_DIR; + else + type = GRUB_FSHELP_REG; + + if (type == GRUB_FSHELP_DIR) + block = grub_be_to_cpu32 (obj->file_dir.dir.dir_objc); + else + block = grub_be_to_cpu32 (obj->file_dir.file.first_block); + + if (grub_sfs_create_node (&node, data, filename, block, + grub_be_to_cpu32 (obj->file_dir.file.size), + type, grub_be_to_cpu32 (obj->mtime), + hook, hook_data)) + { + grub_free (objc_data); + return 1; + } + } + + next = grub_be_to_cpu32 (objc->next); + } + + fail: + grub_free (objc_data); + return 0; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_sfs_open (struct grub_file *file, const char *name) +{ + struct grub_sfs_data *data; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_sfs_mount (file->device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (name, &data->diropen, &fdiro, grub_sfs_iterate_dir, + grub_sfs_read_symlink, GRUB_FSHELP_REG); + if (grub_errno) + goto fail; + + file->size = fdiro->size; + data->diropen = *fdiro; + grub_free (fdiro); + + file->data = data; + file->offset = 0; + + return 0; + + fail: + if (data && fdiro != &data->diropen) + grub_free (fdiro); + if (data) + grub_free (data->label); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +static grub_err_t +grub_sfs_close (grub_file_t file) +{ + struct grub_sfs_data *data = (struct grub_sfs_data *) file->data; + + grub_free (data->diropen.cache); + grub_free (data->label); + grub_free (data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + + +/* Read LEN bytes data from FILE into BUF. */ +static grub_ssize_t +grub_sfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_sfs_data *data = (struct grub_sfs_data *) file->data; + + return grub_sfs_read_file (&data->diropen, + file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + + +/* Context for grub_sfs_dir. */ +struct grub_sfs_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_sfs_dir. */ +static int +grub_sfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_sfs_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + info.mtime = node->mtime + 8 * 365 * 86400 + 86400 * 2; + info.mtimeset = 1; + grub_free (node->cache); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_sfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_sfs_dir_ctx ctx = { hook, hook_data }; + struct grub_sfs_data *data = 0; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_sfs_mount (device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file (path, &data->diropen, &fdiro, grub_sfs_iterate_dir, + grub_sfs_read_symlink, GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + grub_sfs_iterate_dir (fdiro, grub_sfs_dir_iter, &ctx); + + fail: + if (data && fdiro != &data->diropen) + grub_free (fdiro); + if (data) + grub_free (data->label); + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +static grub_err_t +grub_sfs_label (grub_device_t device, char **label) +{ + struct grub_sfs_data *data; + grub_disk_t disk = device->disk; + + data = grub_sfs_mount (disk); + if (data) + { + grub_size_t len = grub_strlen (data->label); + *label = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1); + if (*label) + *grub_latin1_to_utf8 ((grub_uint8_t *) *label, + (const grub_uint8_t *) data->label, + len) = '\0'; + grub_free (data->label); + } + grub_free (data); + + return grub_errno; +} + + +static struct grub_fs grub_sfs_fs = + { + .name = "sfs", + .dir = grub_sfs_dir, + .open = grub_sfs_open, + .read = grub_sfs_read, + .close = grub_sfs_close, + .label = grub_sfs_label, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(sfs) +{ + grub_fs_register (&grub_sfs_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(sfs) +{ + grub_fs_unregister (&grub_sfs_fs); +} diff --git a/grub-core/fs/squash4.c b/grub-core/fs/squash4.c new file mode 100644 index 000000000..2c967c65a --- /dev/null +++ b/grub-core/fs/squash4.c @@ -0,0 +1,1019 @@ +/* squash4.c - SquashFS */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xz.h" +#include "xz_stream.h" + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* + object format Pointed by + superblock RAW Fixed offset (0) + data RAW ? Fixed offset (60) + inode table Chunk superblock + dir table Chunk superblock + fragment table Chunk unk1 + unk1 RAW, Chunk superblock + unk2 RAW superblock + UID/GID Chunk exttblptr + exttblptr RAW superblock + + UID/GID table is the array ot uint32_t + unk1 contains pointer to fragment table followed by some chunk. + unk2 containts one uint64_t +*/ + +struct grub_squash_super +{ + grub_uint32_t magic; +#define SQUASH_MAGIC 0x73717368 + grub_uint32_t dummy1; + grub_uint32_t creation_time; + grub_uint32_t block_size; + grub_uint32_t dummy2; + grub_uint16_t compression; + grub_uint16_t dummy3; + grub_uint64_t dummy4; + grub_uint16_t root_ino_offset; + grub_uint32_t root_ino_chunk; + grub_uint16_t dummy5; + grub_uint64_t total_size; + grub_uint64_t exttbloffset; + grub_uint64_t dummy6; + grub_uint64_t inodeoffset; + grub_uint64_t diroffset; + grub_uint64_t unk1offset; + grub_uint64_t unk2offset; +} GRUB_PACKED; + +/* Chunk-based */ +struct grub_squash_inode +{ + /* Same values as direlem types. */ + grub_uint16_t type; + grub_uint16_t dummy[3]; + grub_uint32_t mtime; + grub_uint32_t dummy2; + union + { + struct { + grub_uint32_t chunk; + grub_uint32_t fragment; + grub_uint32_t offset; + grub_uint32_t size; + grub_uint32_t block_size[0]; + } GRUB_PACKED file; + struct { + grub_uint64_t chunk; + grub_uint64_t size; + grub_uint32_t dummy1[3]; + grub_uint32_t fragment; + grub_uint32_t offset; + grub_uint32_t dummy3; + grub_uint32_t block_size[0]; + } GRUB_PACKED long_file; + struct { + grub_uint32_t chunk; + grub_uint32_t dummy; + grub_uint16_t size; + grub_uint16_t offset; + } GRUB_PACKED dir; + struct { + grub_uint32_t dummy1; + grub_uint32_t size; + grub_uint32_t chunk; + grub_uint32_t dummy2; + grub_uint16_t dummy3; + grub_uint16_t offset; + } GRUB_PACKED long_dir; + struct { + grub_uint32_t dummy; + grub_uint32_t namelen; + char name[0]; + } GRUB_PACKED symlink; + } GRUB_PACKED; +} GRUB_PACKED; + +struct grub_squash_cache_inode +{ + struct grub_squash_inode ino; + grub_disk_addr_t ino_chunk; + grub_uint16_t ino_offset; + grub_uint32_t *block_sizes; + grub_disk_addr_t *cumulated_block_sizes; +}; + +/* Chunk-based. */ +struct grub_squash_dirent_header +{ + /* Actually the value is the number of elements - 1. */ + grub_uint32_t nelems; + grub_uint32_t ino_chunk; + grub_uint32_t dummy; +} GRUB_PACKED; + +struct grub_squash_dirent +{ + grub_uint16_t ino_offset; + grub_uint16_t dummy; + grub_uint16_t type; + /* Actually the value is the length of name - 1. */ + grub_uint16_t namelen; + char name[0]; +} GRUB_PACKED; + +enum + { + SQUASH_TYPE_DIR = 1, + SQUASH_TYPE_REGULAR = 2, + SQUASH_TYPE_SYMLINK = 3, + SQUASH_TYPE_LONG_DIR = 8, + SQUASH_TYPE_LONG_REGULAR = 9, + }; + + +struct grub_squash_frag_desc +{ + grub_uint64_t offset; + grub_uint32_t size; + grub_uint32_t dummy; +} GRUB_PACKED; + +enum + { + SQUASH_CHUNK_FLAGS = 0x8000, + SQUASH_CHUNK_UNCOMPRESSED = 0x8000 + }; + +enum + { + SQUASH_BLOCK_FLAGS = 0x1000000, + SQUASH_BLOCK_UNCOMPRESSED = 0x1000000 + }; + +enum + { + COMPRESSION_ZLIB = 1, + COMPRESSION_LZO = 3, + COMPRESSION_XZ = 4, + }; + + +#define SQUASH_CHUNK_SIZE 0x2000 +#define XZBUFSIZ 0x2000 + +struct grub_squash_data +{ + grub_disk_t disk; + struct grub_squash_super sb; + struct grub_squash_cache_inode ino; + grub_uint64_t fragments; + int log2_blksz; + grub_size_t blksz; + grub_ssize_t (*decompress) (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t outsize, + struct grub_squash_data *data); + struct xz_dec *xzdec; + char *xzbuf; +}; + +struct grub_fshelp_node +{ + struct grub_squash_data *data; + struct grub_squash_inode ino; + grub_size_t stsize; + struct + { + grub_disk_addr_t ino_chunk; + grub_uint16_t ino_offset; + } stack[1]; +}; + +static grub_err_t +read_chunk (struct grub_squash_data *data, void *buf, grub_size_t len, + grub_uint64_t chunk_start, grub_off_t offset) +{ + while (len > 0) + { + grub_uint64_t csize; + grub_uint16_t d; + grub_err_t err; + while (1) + { + err = grub_disk_read (data->disk, + chunk_start >> GRUB_DISK_SECTOR_BITS, + chunk_start & (GRUB_DISK_SECTOR_SIZE - 1), + sizeof (d), &d); + if (err) + return err; + if (offset < SQUASH_CHUNK_SIZE) + break; + offset -= SQUASH_CHUNK_SIZE; + chunk_start += 2 + (grub_le_to_cpu16 (d) & ~SQUASH_CHUNK_FLAGS); + } + + csize = SQUASH_CHUNK_SIZE - offset; + if (csize > len) + csize = len; + + if (grub_le_to_cpu16 (d) & SQUASH_CHUNK_UNCOMPRESSED) + { + grub_disk_addr_t a = chunk_start + 2 + offset; + err = grub_disk_read (data->disk, (a >> GRUB_DISK_SECTOR_BITS), + a & (GRUB_DISK_SECTOR_SIZE - 1), + csize, buf); + if (err) + return err; + } + else + { + char *tmp; + grub_size_t bsize = grub_le_to_cpu16 (d) & ~SQUASH_CHUNK_FLAGS; + grub_disk_addr_t a = chunk_start + 2; + tmp = grub_malloc (bsize); + if (!tmp) + return grub_errno; + /* FIXME: buffer uncompressed data. */ + err = grub_disk_read (data->disk, (a >> GRUB_DISK_SECTOR_BITS), + a & (GRUB_DISK_SECTOR_SIZE - 1), + bsize, tmp); + if (err) + { + grub_free (tmp); + return err; + } + + if (data->decompress (tmp, bsize, offset, + buf, csize, data) < 0) + { + grub_free (tmp); + return grub_errno; + } + grub_free (tmp); + } + len -= csize; + offset += csize; + buf = (char *) buf + csize; + } + return GRUB_ERR_NONE; +} + +static grub_ssize_t +zlib_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t outsize, + struct grub_squash_data *data __attribute__ ((unused))) +{ + return grub_zlib_decompress (inbuf, insize, off, outbuf, outsize); +} + +static grub_ssize_t +lzo_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t len, struct grub_squash_data *data) +{ + lzo_uint usize = data->blksz; + grub_uint8_t *udata; + + if (usize < 8192) + usize = 8192; + + udata = grub_malloc (usize); + if (!udata) + return -1; + + if (lzo1x_decompress_safe ((grub_uint8_t *) inbuf, + insize, udata, &usize, NULL) != LZO_E_OK) + { + grub_error (GRUB_ERR_BAD_FS, "incorrect compressed chunk"); + grub_free (udata); + return -1; + } + grub_memcpy (outbuf, udata + off, len); + grub_free (udata); + return len; +} + +static grub_ssize_t +xz_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t len, struct grub_squash_data *data) +{ + grub_size_t ret = 0; + grub_off_t pos = 0; + struct xz_buf buf; + + xz_dec_reset (data->xzdec); + buf.in = (grub_uint8_t *) inbuf; + buf.in_pos = 0; + buf.in_size = insize; + buf.out = (grub_uint8_t *) data->xzbuf; + buf.out_pos = 0; + buf.out_size = XZBUFSIZ; + + while (len) + { + enum xz_ret xzret; + + buf.out_pos = 0; + + xzret = xz_dec_run (data->xzdec, &buf); + + if (xzret != XZ_OK && xzret != XZ_STREAM_END) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "invalid xz chunk"); + return -1; + } + if (pos + buf.out_pos >= off) + { + grub_ssize_t outoff = pos - off; + grub_size_t l; + if (outoff >= 0) + { + l = buf.out_pos; + if (l > len) + l = len; + grub_memcpy (outbuf + outoff, buf.out, l); + } + else + { + outoff = -outoff; + l = buf.out_pos - outoff; + if (l > len) + l = len; + grub_memcpy (outbuf, buf.out + outoff, l); + } + ret += l; + len -= l; + } + pos += buf.out_pos; + if (xzret == XZ_STREAM_END) + break; + } + return ret; +} + +static struct grub_squash_data * +squash_mount (grub_disk_t disk) +{ + struct grub_squash_super sb; + grub_err_t err; + struct grub_squash_data *data; + grub_uint64_t frag; + + err = grub_disk_read (disk, 0, 0, sizeof (sb), &sb); + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not a squash4"); + if (err) + return NULL; + if (sb.magic != grub_cpu_to_le32_compile_time (SQUASH_MAGIC) + || sb.block_size == 0 + || ((sb.block_size - 1) & sb.block_size)) + { + grub_error (GRUB_ERR_BAD_FS, "not squash4"); + return NULL; + } + + err = grub_disk_read (disk, + grub_le_to_cpu64 (sb.unk1offset) + >> GRUB_DISK_SECTOR_BITS, + grub_le_to_cpu64 (sb.unk1offset) + & (GRUB_DISK_SECTOR_SIZE - 1), sizeof (frag), &frag); + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not a squash4"); + if (err) + return NULL; + + data = grub_zalloc (sizeof (*data)); + if (!data) + return NULL; + data->sb = sb; + data->disk = disk; + data->fragments = grub_le_to_cpu64 (frag); + + switch (sb.compression) + { + case grub_cpu_to_le16_compile_time (COMPRESSION_ZLIB): + data->decompress = zlib_decompress; + break; + case grub_cpu_to_le16_compile_time (COMPRESSION_LZO): + data->decompress = lzo_decompress; + break; + case grub_cpu_to_le16_compile_time (COMPRESSION_XZ): + data->decompress = xz_decompress; + data->xzbuf = grub_malloc (XZBUFSIZ); + if (!data->xzbuf) + { + grub_free (data); + return NULL; + } + data->xzdec = xz_dec_init (1 << 16); + if (!data->xzdec) + { + grub_free (data->xzbuf); + grub_free (data); + return NULL; + } + break; + default: + grub_free (data); + grub_error (GRUB_ERR_BAD_FS, "unsupported compression %d", + grub_le_to_cpu16 (sb.compression)); + return NULL; + } + + data->blksz = grub_le_to_cpu32 (data->sb.block_size); + for (data->log2_blksz = 0; + (1U << data->log2_blksz) < data->blksz; + data->log2_blksz++); + + return data; +} + +static char * +grub_squash_read_symlink (grub_fshelp_node_t node) +{ + char *ret; + grub_err_t err; + ret = grub_malloc (grub_le_to_cpu32 (node->ino.symlink.namelen) + 1); + + err = read_chunk (node->data, ret, + grub_le_to_cpu32 (node->ino.symlink.namelen), + grub_le_to_cpu64 (node->data->sb.inodeoffset) + + node->stack[node->stsize - 1].ino_chunk, + node->stack[node->stsize - 1].ino_offset + + (node->ino.symlink.name - (char *) &node->ino)); + if (err) + { + grub_free (ret); + return NULL; + } + ret[grub_le_to_cpu32 (node->ino.symlink.namelen)] = 0; + return ret; +} + +static int +grub_squash_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + grub_uint32_t off; + grub_uint32_t endoff; + grub_uint64_t chunk; + unsigned i; + + /* FIXME: why - 3 ? */ + switch (dir->ino.type) + { + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_DIR): + off = grub_le_to_cpu16 (dir->ino.dir.offset); + endoff = grub_le_to_cpu16 (dir->ino.dir.size) + off - 3; + chunk = grub_le_to_cpu32 (dir->ino.dir.chunk); + break; + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_DIR): + off = grub_le_to_cpu16 (dir->ino.long_dir.offset); + endoff = grub_le_to_cpu16 (dir->ino.long_dir.size) + off - 3; + chunk = grub_le_to_cpu32 (dir->ino.long_dir.chunk); + break; + default: + grub_error (GRUB_ERR_BAD_FS, "unexpected ino type 0x%x", + grub_le_to_cpu16 (dir->ino.type)); + return 0; + } + + { + grub_fshelp_node_t node; + node = grub_malloc (sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); + if (!node) + return 0; + grub_memcpy (node, dir, + sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); + if (hook (".", GRUB_FSHELP_DIR, node, hook_data)) + return 1; + + if (dir->stsize != 1) + { + grub_err_t err; + + node = grub_malloc (sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); + if (!node) + return 0; + + grub_memcpy (node, dir, + sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); + + node->stsize--; + err = read_chunk (dir->data, &node->ino, sizeof (node->ino), + grub_le_to_cpu64 (dir->data->sb.inodeoffset) + + node->stack[node->stsize - 1].ino_chunk, + node->stack[node->stsize - 1].ino_offset); + if (err) + return 0; + + if (hook ("..", GRUB_FSHELP_DIR, node, hook_data)) + return 1; + } + } + + while (off < endoff) + { + struct grub_squash_dirent_header dh; + grub_err_t err; + + err = read_chunk (dir->data, &dh, sizeof (dh), + grub_le_to_cpu64 (dir->data->sb.diroffset) + + chunk, off); + if (err) + return 0; + off += sizeof (dh); + for (i = 0; i < (unsigned) grub_le_to_cpu32 (dh.nelems) + 1; i++) + { + char *buf; + int r; + struct grub_fshelp_node *node; + enum grub_fshelp_filetype filetype = GRUB_FSHELP_REG; + struct grub_squash_dirent di; + struct grub_squash_inode ino; + + err = read_chunk (dir->data, &di, sizeof (di), + grub_le_to_cpu64 (dir->data->sb.diroffset) + + chunk, off); + if (err) + return 0; + off += sizeof (di); + + err = read_chunk (dir->data, &ino, sizeof (ino), + grub_le_to_cpu64 (dir->data->sb.inodeoffset) + + grub_le_to_cpu32 (dh.ino_chunk), + grub_cpu_to_le16 (di.ino_offset)); + if (err) + return 0; + + buf = grub_malloc (grub_le_to_cpu16 (di.namelen) + 2); + if (!buf) + return 0; + err = read_chunk (dir->data, buf, + grub_le_to_cpu16 (di.namelen) + 1, + grub_le_to_cpu64 (dir->data->sb.diroffset) + + chunk, off); + if (err) + return 0; + + off += grub_le_to_cpu16 (di.namelen) + 1; + buf[grub_le_to_cpu16 (di.namelen) + 1] = 0; + if (grub_le_to_cpu16 (di.type) == SQUASH_TYPE_DIR) + filetype = GRUB_FSHELP_DIR; + if (grub_le_to_cpu16 (di.type) == SQUASH_TYPE_SYMLINK) + filetype = GRUB_FSHELP_SYMLINK; + + node = grub_malloc (sizeof (*node) + + (dir->stsize + 1) * sizeof (dir->stack[0])); + if (! node) + return 0; + + grub_memcpy (node, dir, + sizeof (*node) + dir->stsize * sizeof (dir->stack[0])); + + node->ino = ino; + node->stack[node->stsize].ino_chunk = grub_le_to_cpu32 (dh.ino_chunk); + node->stack[node->stsize].ino_offset = grub_le_to_cpu16 (di.ino_offset); + node->stsize++; + r = hook (buf, filetype, node, hook_data); + + grub_free (buf); + if (r) + return r; + } + } + return 0; +} + +static grub_err_t +make_root_node (struct grub_squash_data *data, struct grub_fshelp_node *root) +{ + grub_memset (root, 0, sizeof (*root)); + root->data = data; + root->stsize = 1; + root->stack[0].ino_chunk = grub_le_to_cpu32 (data->sb.root_ino_chunk); + root->stack[0].ino_offset = grub_cpu_to_le16 (data->sb.root_ino_offset); + return read_chunk (data, &root->ino, sizeof (root->ino), + grub_le_to_cpu64 (data->sb.inodeoffset) + + root->stack[0].ino_chunk, + root->stack[0].ino_offset); +} + +static void +squash_unmount (struct grub_squash_data *data) +{ + if (data->xzdec) + xz_dec_end (data->xzdec); + grub_free (data->xzbuf); + grub_free (data->ino.cumulated_block_sizes); + grub_free (data->ino.block_sizes); + grub_free (data); +} + + +/* Context for grub_squash_dir. */ +struct grub_squash_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_squash_dir. */ +static int +grub_squash_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_squash_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + info.mtimeset = 1; + info.mtime = grub_le_to_cpu32 (node->ino.mtime); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_squash_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_squash_dir_ctx ctx = { hook, hook_data }; + struct grub_squash_data *data = 0; + struct grub_fshelp_node *fdiro = 0; + struct grub_fshelp_node root; + grub_err_t err; + + data = squash_mount (device->disk); + if (! data) + return grub_errno; + + err = make_root_node (data, &root); + if (err) + return err; + + grub_fshelp_find_file (path, &root, &fdiro, grub_squash_iterate_dir, + grub_squash_read_symlink, GRUB_FSHELP_DIR); + if (!grub_errno) + grub_squash_iterate_dir (fdiro, grub_squash_dir_iter, &ctx); + + squash_unmount (data); + + return grub_errno; +} + +static grub_err_t +grub_squash_open (struct grub_file *file, const char *name) +{ + struct grub_squash_data *data = 0; + struct grub_fshelp_node *fdiro = 0; + struct grub_fshelp_node root; + grub_err_t err; + + data = squash_mount (file->device->disk); + if (! data) + return grub_errno; + + err = make_root_node (data, &root); + if (err) + return err; + + grub_fshelp_find_file (name, &root, &fdiro, grub_squash_iterate_dir, + grub_squash_read_symlink, GRUB_FSHELP_REG); + if (grub_errno) + { + squash_unmount (data); + return grub_errno; + } + + file->data = data; + data->ino.ino = fdiro->ino; + data->ino.block_sizes = NULL; + data->ino.cumulated_block_sizes = NULL; + data->ino.ino_chunk = fdiro->stack[fdiro->stsize - 1].ino_chunk; + data->ino.ino_offset = fdiro->stack[fdiro->stsize - 1].ino_offset; + + switch (fdiro->ino.type) + { + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR): + file->size = grub_le_to_cpu64 (fdiro->ino.long_file.size); + break; + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR): + file->size = grub_le_to_cpu32 (fdiro->ino.file.size); + break; + default: + { + grub_uint16_t type = grub_le_to_cpu16 (fdiro->ino.type); + grub_free (fdiro); + squash_unmount (data); + return grub_error (GRUB_ERR_BAD_FS, "unexpected ino type 0x%x", type); + } + } + + grub_free (fdiro); + + return GRUB_ERR_NONE; +} + +static grub_ssize_t +direct_read (struct grub_squash_data *data, + struct grub_squash_cache_inode *ino, + grub_off_t off, char *buf, grub_size_t len) +{ + grub_err_t err; + grub_off_t cumulated_uncompressed_size = 0; + grub_uint64_t a = 0; + grub_size_t i; + grub_size_t origlen = len; + + switch (ino->ino.type) + { + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR): + a = grub_le_to_cpu64 (ino->ino.long_file.chunk); + break; + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR): + a = grub_le_to_cpu32 (ino->ino.file.chunk); + break; + } + + if (!ino->block_sizes) + { + grub_off_t total_size = 0; + grub_size_t total_blocks; + grub_size_t block_offset = 0; + switch (ino->ino.type) + { + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR): + total_size = grub_le_to_cpu64 (ino->ino.long_file.size); + block_offset = ((char *) &ino->ino.long_file.block_size + - (char *) &ino->ino); + break; + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR): + total_size = grub_le_to_cpu32 (ino->ino.file.size); + block_offset = ((char *) &ino->ino.file.block_size + - (char *) &ino->ino); + break; + } + total_blocks = ((total_size + data->blksz - 1) >> data->log2_blksz); + ino->block_sizes = grub_malloc (total_blocks + * sizeof (ino->block_sizes[0])); + ino->cumulated_block_sizes = grub_malloc (total_blocks + * sizeof (ino->cumulated_block_sizes[0])); + if (!ino->block_sizes || !ino->cumulated_block_sizes) + { + grub_free (ino->block_sizes); + grub_free (ino->cumulated_block_sizes); + ino->block_sizes = 0; + ino->cumulated_block_sizes = 0; + return -1; + } + err = read_chunk (data, ino->block_sizes, + total_blocks * sizeof (ino->block_sizes[0]), + grub_le_to_cpu64 (data->sb.inodeoffset) + + ino->ino_chunk, + ino->ino_offset + block_offset); + if (err) + { + grub_free (ino->block_sizes); + grub_free (ino->cumulated_block_sizes); + ino->block_sizes = 0; + ino->cumulated_block_sizes = 0; + return -1; + } + ino->cumulated_block_sizes[0] = 0; + for (i = 1; i < total_blocks; i++) + ino->cumulated_block_sizes[i] = ino->cumulated_block_sizes[i - 1] + + (grub_le_to_cpu32 (ino->block_sizes[i - 1]) & ~SQUASH_BLOCK_FLAGS); + } + + if (a == 0) + a = sizeof (struct grub_squash_super); + i = off >> data->log2_blksz; + cumulated_uncompressed_size = data->blksz * (grub_disk_addr_t) i; + while (cumulated_uncompressed_size < off + len) + { + grub_size_t boff, curread; + boff = off - cumulated_uncompressed_size; + curread = data->blksz - boff; + if (curread > len) + curread = len; + if (!ino->block_sizes[i]) + { + /* Sparse block */ + grub_memset (buf, '\0', curread); + } + else if (!(ino->block_sizes[i] + & grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED))) + { + char *block; + grub_size_t csize; + csize = grub_le_to_cpu32 (ino->block_sizes[i]) & ~SQUASH_BLOCK_FLAGS; + block = grub_malloc (csize); + if (!block) + return -1; + err = grub_disk_read (data->disk, + (ino->cumulated_block_sizes[i] + a) + >> GRUB_DISK_SECTOR_BITS, + (ino->cumulated_block_sizes[i] + a) + & (GRUB_DISK_SECTOR_SIZE - 1), + csize, block); + if (err) + { + grub_free (block); + return -1; + } + if (data->decompress (block, csize, boff, buf, curread, data) + != (grub_ssize_t) curread) + { + grub_free (block); + if (!grub_errno) + grub_error (GRUB_ERR_BAD_FS, "incorrect compressed chunk"); + return -1; + } + grub_free (block); + } + else + err = grub_disk_read (data->disk, + (ino->cumulated_block_sizes[i] + a + boff) + >> GRUB_DISK_SECTOR_BITS, + (ino->cumulated_block_sizes[i] + a + boff) + & (GRUB_DISK_SECTOR_SIZE - 1), + curread, buf); + if (err) + return -1; + off += curread; + len -= curread; + buf += curread; + cumulated_uncompressed_size += grub_le_to_cpu32 (data->sb.block_size); + i++; + } + return origlen; +} + + +static grub_ssize_t +grub_squash_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_squash_data *data = file->data; + struct grub_squash_cache_inode *ino = &data->ino; + grub_off_t off = file->offset; + grub_err_t err; + grub_uint64_t a, b; + grub_uint32_t fragment = 0; + int compressed = 0; + struct grub_squash_frag_desc frag; + grub_off_t direct_len; + grub_uint64_t mask = grub_le_to_cpu32 (data->sb.block_size) - 1; + grub_size_t orig_len = len; + + switch (ino->ino.type) + { + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR): + fragment = grub_le_to_cpu32 (ino->ino.long_file.fragment); + break; + case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR): + fragment = grub_le_to_cpu32 (ino->ino.file.fragment); + break; + } + + /* Squash may pack file tail as fragment. So read initial part directly and + get tail from fragments */ + direct_len = fragment == 0xffffffff ? file->size : file->size & ~mask; + if (off < direct_len) + { + grub_size_t read_len = direct_len - off; + grub_ssize_t res; + + if (read_len > len) + read_len = len; + res = direct_read (data, ino, off, buf, read_len); + if ((grub_size_t) res != read_len) + return -1; /* FIXME: is short read possible here? */ + len -= read_len; + if (!len) + return read_len; + buf += read_len; + off = 0; + } + else + off -= direct_len; + + err = read_chunk (data, &frag, sizeof (frag), + data->fragments, sizeof (frag) * fragment); + if (err) + return -1; + a = grub_le_to_cpu64 (frag.offset); + compressed = !(frag.size & grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED)); + if (ino->ino.type == grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR)) + b = grub_le_to_cpu32 (ino->ino.long_file.offset) + off; + else + b = grub_le_to_cpu32 (ino->ino.file.offset) + off; + + /* FIXME: cache uncompressed chunks. */ + if (compressed) + { + char *block; + block = grub_malloc (grub_le_to_cpu32 (frag.size)); + if (!block) + return -1; + err = grub_disk_read (data->disk, + a >> GRUB_DISK_SECTOR_BITS, + a & (GRUB_DISK_SECTOR_SIZE - 1), + grub_le_to_cpu32 (frag.size), block); + if (err) + { + grub_free (block); + return -1; + } + if (data->decompress (block, grub_le_to_cpu32 (frag.size), + b, buf, len, data) + != (grub_ssize_t) len) + { + grub_free (block); + if (!grub_errno) + grub_error (GRUB_ERR_BAD_FS, "incorrect compressed chunk"); + return -1; + } + grub_free (block); + } + else + { + err = grub_disk_read (data->disk, (a + b) >> GRUB_DISK_SECTOR_BITS, + (a + b) & (GRUB_DISK_SECTOR_SIZE - 1), len, buf); + if (err) + return -1; + } + return orig_len; +} + +static grub_err_t +grub_squash_close (grub_file_t file) +{ + squash_unmount (file->data); + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_squash_mtime (grub_device_t dev, grub_int32_t *tm) +{ + struct grub_squash_data *data = 0; + + data = squash_mount (dev->disk); + if (! data) + return grub_errno; + *tm = grub_le_to_cpu32 (data->sb.creation_time); + squash_unmount (data); + return GRUB_ERR_NONE; +} + +static struct grub_fs grub_squash_fs = + { + .name = "squash4", + .dir = grub_squash_dir, + .open = grub_squash_open, + .read = grub_squash_read, + .close = grub_squash_close, + .mtime = grub_squash_mtime, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(squash4) +{ + grub_fs_register (&grub_squash_fs); +} + +GRUB_MOD_FINI(squash4) +{ + grub_fs_unregister (&grub_squash_fs); +} + diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c new file mode 100644 index 000000000..39bf197aa --- /dev/null +++ b/grub-core/fs/tar.c @@ -0,0 +1,345 @@ +/* cpio.c - cpio and tar filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2013 Free Software Foundation, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* tar support */ +#define MAGIC "ustar" +struct head +{ + char name[100]; + char mode[8]; + char uid[8]; + char gid[8]; + char size[12]; + char mtime[12]; + char chksum[8]; + char typeflag; + char linkname[100]; + char magic[6]; + char version[2]; + char uname[32]; + char gname[32]; + char devmajor[8]; + char devminor[8]; + char prefix[155]; +} GRUB_PACKED; + +static inline unsigned long long +read_number (const char *str, grub_size_t size) +{ + unsigned long long ret = 0; + while (size-- && *str >= '0' && *str <= '7') + ret = (ret << 3) | (*str++ & 0xf); + return ret; +} + +struct grub_archelp_data +{ + grub_disk_t disk; + grub_off_t hofs, next_hofs; + grub_off_t dofs; + grub_off_t size; + char *linkname; + grub_size_t linkname_alloc; +}; + +static grub_err_t +grub_cpio_find_file (struct grub_archelp_data *data, char **name, + grub_int32_t *mtime, + grub_uint32_t *mode) +{ + struct head hd; + int reread = 0, have_longname = 0, have_longlink = 0; + + data->hofs = data->next_hofs; + + for (reread = 0; reread < 3; reread++) + { + if (grub_disk_read (data->disk, 0, data->hofs, sizeof (hd), &hd)) + return grub_errno; + + if (!hd.name[0] && !hd.prefix[0]) + { + *mode = GRUB_ARCHELP_ATTR_END; + return GRUB_ERR_NONE; + } + + if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1)) + return grub_error (GRUB_ERR_BAD_FS, "invalid tar archive"); + + if (hd.typeflag == 'L') + { + grub_err_t err; + grub_size_t namesize = read_number (hd.size, sizeof (hd.size)); + *name = grub_malloc (namesize + 1); + if (*name == NULL) + return grub_errno; + err = grub_disk_read (data->disk, 0, + data->hofs + GRUB_DISK_SECTOR_SIZE, namesize, + *name); + (*name)[namesize] = 0; + if (err) + return err; + data->hofs += GRUB_DISK_SECTOR_SIZE + + ((namesize + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + have_longname = 1; + continue; + } + + if (hd.typeflag == 'K') + { + grub_err_t err; + grub_size_t linksize = read_number (hd.size, sizeof (hd.size)); + if (data->linkname_alloc < linksize + 1) + { + char *n; + n = grub_malloc (2 * (linksize + 1)); + if (!n) + return grub_errno; + grub_free (data->linkname); + data->linkname = n; + data->linkname_alloc = 2 * (linksize + 1); + } + + err = grub_disk_read (data->disk, 0, + data->hofs + GRUB_DISK_SECTOR_SIZE, linksize, + data->linkname); + if (err) + return err; + data->linkname[linksize] = 0; + data->hofs += GRUB_DISK_SECTOR_SIZE + + ((linksize + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + have_longlink = 1; + continue; + } + + if (!have_longname) + { + grub_size_t extra_size = 0; + + while (extra_size < sizeof (hd.prefix) + && hd.prefix[extra_size]) + extra_size++; + *name = grub_malloc (sizeof (hd.name) + extra_size + 2); + if (*name == NULL) + return grub_errno; + if (hd.prefix[0]) + { + grub_memcpy (*name, hd.prefix, extra_size); + (*name)[extra_size++] = '/'; + } + grub_memcpy (*name + extra_size, hd.name, sizeof (hd.name)); + (*name)[extra_size + sizeof (hd.name)] = 0; + } + + data->size = read_number (hd.size, sizeof (hd.size)); + data->dofs = data->hofs + GRUB_DISK_SECTOR_SIZE; + data->next_hofs = data->dofs + ((data->size + GRUB_DISK_SECTOR_SIZE - 1) & + ~(GRUB_DISK_SECTOR_SIZE - 1)); + if (mtime) + *mtime = read_number (hd.mtime, sizeof (hd.mtime)); + if (mode) + { + *mode = read_number (hd.mode, sizeof (hd.mode)); + switch (hd.typeflag) + { + /* Hardlink. */ + case '1': + /* Symlink. */ + case '2': + *mode |= GRUB_ARCHELP_ATTR_LNK; + break; + case '0': + *mode |= GRUB_ARCHELP_ATTR_FILE; + break; + case '5': + *mode |= GRUB_ARCHELP_ATTR_DIR; + break; + } + } + if (!have_longlink) + { + if (data->linkname_alloc < 101) + { + char *n; + n = grub_malloc (101); + if (!n) + return grub_errno; + grub_free (data->linkname); + data->linkname = n; + data->linkname_alloc = 101; + } + grub_memcpy (data->linkname, hd.linkname, sizeof (hd.linkname)); + data->linkname[100] = 0; + } + return GRUB_ERR_NONE; + } + return GRUB_ERR_NONE; +} + +static char * +grub_cpio_get_link_target (struct grub_archelp_data *data) +{ + return grub_strdup (data->linkname); +} + +static void +grub_cpio_rewind (struct grub_archelp_data *data) +{ + data->next_hofs = 0; +} + +static struct grub_archelp_ops arcops = + { + .find_file = grub_cpio_find_file, + .get_link_target = grub_cpio_get_link_target, + .rewind = grub_cpio_rewind + }; + +static struct grub_archelp_data * +grub_cpio_mount (grub_disk_t disk) +{ + struct head hd; + struct grub_archelp_data *data; + + if (grub_disk_read (disk, 0, 0, sizeof (hd), &hd)) + goto fail; + + if (grub_memcmp (hd.magic, MAGIC, sizeof (MAGIC) - 1)) + goto fail; + + data = (struct grub_archelp_data *) grub_zalloc (sizeof (*data)); + if (!data) + goto fail; + + data->disk = disk; + + return data; + +fail: + grub_error (GRUB_ERR_BAD_FS, "not a tarfs filesystem"); + return 0; +} + +static grub_err_t +grub_cpio_dir (grub_device_t device, const char *path_in, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cpio_mount (device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_dir (data, &arcops, + path_in, hook, hook_data); + + grub_free (data->linkname); + grub_free (data); + + return err; +} + +static grub_err_t +grub_cpio_open (grub_file_t file, const char *name_in) +{ + struct grub_archelp_data *data; + grub_err_t err; + + data = grub_cpio_mount (file->device->disk); + if (!data) + return grub_errno; + + err = grub_archelp_open (data, &arcops, name_in); + if (err) + { + grub_free (data->linkname); + grub_free (data); + } + else + { + file->data = data; + file->size = data->size; + } + return err; +} + +static grub_ssize_t +grub_cpio_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_archelp_data *data; + grub_ssize_t ret; + + data = file->data; + + data->disk->read_hook = file->read_hook; + data->disk->read_hook_data = file->read_hook_data; + ret = (grub_disk_read (data->disk, 0, data->dofs + file->offset, + len, buf)) ? -1 : (grub_ssize_t) len; + data->disk->read_hook = 0; + + return ret; +} + +static grub_err_t +grub_cpio_close (grub_file_t file) +{ + struct grub_archelp_data *data; + + data = file->data; + grub_free (data->linkname); + grub_free (data); + + return grub_errno; +} + +static struct grub_fs grub_cpio_fs = { + .name = "tarfs", + .dir = grub_cpio_dir, + .open = grub_cpio_open, + .read = grub_cpio_read, + .close = grub_cpio_close, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 0, +#endif +}; + +GRUB_MOD_INIT (tar) +{ + grub_fs_register (&grub_cpio_fs); +} + +GRUB_MOD_FINI (tar) +{ + grub_fs_unregister (&grub_cpio_fs); +} diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c new file mode 100644 index 000000000..839bff889 --- /dev/null +++ b/grub-core/fs/udf.c @@ -0,0 +1,1232 @@ +/* udf.c - Universal Disk Format filesystem. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_UDF_MAX_PDS 2 +#define GRUB_UDF_MAX_PMS 6 + +#define U16 grub_le_to_cpu16 +#define U32 grub_le_to_cpu32 +#define U64 grub_le_to_cpu64 + +#define GRUB_UDF_TAG_IDENT_PVD 0x0001 +#define GRUB_UDF_TAG_IDENT_AVDP 0x0002 +#define GRUB_UDF_TAG_IDENT_VDP 0x0003 +#define GRUB_UDF_TAG_IDENT_IUVD 0x0004 +#define GRUB_UDF_TAG_IDENT_PD 0x0005 +#define GRUB_UDF_TAG_IDENT_LVD 0x0006 +#define GRUB_UDF_TAG_IDENT_USD 0x0007 +#define GRUB_UDF_TAG_IDENT_TD 0x0008 +#define GRUB_UDF_TAG_IDENT_LVID 0x0009 + +#define GRUB_UDF_TAG_IDENT_FSD 0x0100 +#define GRUB_UDF_TAG_IDENT_FID 0x0101 +#define GRUB_UDF_TAG_IDENT_AED 0x0102 +#define GRUB_UDF_TAG_IDENT_IE 0x0103 +#define GRUB_UDF_TAG_IDENT_TE 0x0104 +#define GRUB_UDF_TAG_IDENT_FE 0x0105 +#define GRUB_UDF_TAG_IDENT_EAHD 0x0106 +#define GRUB_UDF_TAG_IDENT_USE 0x0107 +#define GRUB_UDF_TAG_IDENT_SBD 0x0108 +#define GRUB_UDF_TAG_IDENT_PIE 0x0109 +#define GRUB_UDF_TAG_IDENT_EFE 0x010A + +#define GRUB_UDF_ICBTAG_TYPE_UNDEF 0x00 +#define GRUB_UDF_ICBTAG_TYPE_USE 0x01 +#define GRUB_UDF_ICBTAG_TYPE_PIE 0x02 +#define GRUB_UDF_ICBTAG_TYPE_IE 0x03 +#define GRUB_UDF_ICBTAG_TYPE_DIRECTORY 0x04 +#define GRUB_UDF_ICBTAG_TYPE_REGULAR 0x05 +#define GRUB_UDF_ICBTAG_TYPE_BLOCK 0x06 +#define GRUB_UDF_ICBTAG_TYPE_CHAR 0x07 +#define GRUB_UDF_ICBTAG_TYPE_EA 0x08 +#define GRUB_UDF_ICBTAG_TYPE_FIFO 0x09 +#define GRUB_UDF_ICBTAG_TYPE_SOCKET 0x0A +#define GRUB_UDF_ICBTAG_TYPE_TE 0x0B +#define GRUB_UDF_ICBTAG_TYPE_SYMLINK 0x0C +#define GRUB_UDF_ICBTAG_TYPE_STREAMDIR 0x0D + +#define GRUB_UDF_ICBTAG_FLAG_AD_MASK 0x0007 +#define GRUB_UDF_ICBTAG_FLAG_AD_SHORT 0x0000 +#define GRUB_UDF_ICBTAG_FLAG_AD_LONG 0x0001 +#define GRUB_UDF_ICBTAG_FLAG_AD_EXT 0x0002 +#define GRUB_UDF_ICBTAG_FLAG_AD_IN_ICB 0x0003 + +#define GRUB_UDF_EXT_NORMAL 0x00000000 +#define GRUB_UDF_EXT_NREC_ALLOC 0x40000000 +#define GRUB_UDF_EXT_NREC_NALLOC 0x80000000 +#define GRUB_UDF_EXT_MASK 0xC0000000 + +#define GRUB_UDF_FID_CHAR_HIDDEN 0x01 +#define GRUB_UDF_FID_CHAR_DIRECTORY 0x02 +#define GRUB_UDF_FID_CHAR_DELETED 0x04 +#define GRUB_UDF_FID_CHAR_PARENT 0x08 +#define GRUB_UDF_FID_CHAR_METADATA 0x10 + +#define GRUB_UDF_STD_IDENT_BEA01 "BEA01" +#define GRUB_UDF_STD_IDENT_BOOT2 "BOOT2" +#define GRUB_UDF_STD_IDENT_CD001 "CD001" +#define GRUB_UDF_STD_IDENT_CDW02 "CDW02" +#define GRUB_UDF_STD_IDENT_NSR02 "NSR02" +#define GRUB_UDF_STD_IDENT_NSR03 "NSR03" +#define GRUB_UDF_STD_IDENT_TEA01 "TEA01" + +#define GRUB_UDF_CHARSPEC_TYPE_CS0 0x00 +#define GRUB_UDF_CHARSPEC_TYPE_CS1 0x01 +#define GRUB_UDF_CHARSPEC_TYPE_CS2 0x02 +#define GRUB_UDF_CHARSPEC_TYPE_CS3 0x03 +#define GRUB_UDF_CHARSPEC_TYPE_CS4 0x04 +#define GRUB_UDF_CHARSPEC_TYPE_CS5 0x05 +#define GRUB_UDF_CHARSPEC_TYPE_CS6 0x06 +#define GRUB_UDF_CHARSPEC_TYPE_CS7 0x07 +#define GRUB_UDF_CHARSPEC_TYPE_CS8 0x08 + +#define GRUB_UDF_PARTMAP_TYPE_1 1 +#define GRUB_UDF_PARTMAP_TYPE_2 2 + +struct grub_udf_lb_addr +{ + grub_uint32_t block_num; + grub_uint16_t part_ref; +} GRUB_PACKED; + +struct grub_udf_short_ad +{ + grub_uint32_t length; + grub_uint32_t position; +} GRUB_PACKED; + +struct grub_udf_long_ad +{ + grub_uint32_t length; + struct grub_udf_lb_addr block; + grub_uint8_t imp_use[6]; +} GRUB_PACKED; + +struct grub_udf_extent_ad +{ + grub_uint32_t length; + grub_uint32_t start; +} GRUB_PACKED; + +struct grub_udf_charspec +{ + grub_uint8_t charset_type; + grub_uint8_t charset_info[63]; +} GRUB_PACKED; + +struct grub_udf_timestamp +{ + grub_uint16_t type_and_timezone; + grub_uint16_t year; + grub_uint8_t month; + grub_uint8_t day; + grub_uint8_t hour; + grub_uint8_t minute; + grub_uint8_t second; + grub_uint8_t centi_seconds; + grub_uint8_t hundreds_of_micro_seconds; + grub_uint8_t micro_seconds; +} GRUB_PACKED; + +struct grub_udf_regid +{ + grub_uint8_t flags; + grub_uint8_t ident[23]; + grub_uint8_t ident_suffix[8]; +} GRUB_PACKED; + +struct grub_udf_tag +{ + grub_uint16_t tag_ident; + grub_uint16_t desc_version; + grub_uint8_t tag_checksum; + grub_uint8_t reserved; + grub_uint16_t tag_serial_number; + grub_uint16_t desc_crc; + grub_uint16_t desc_crc_length; + grub_uint32_t tag_location; +} GRUB_PACKED; + +struct grub_udf_fileset +{ + struct grub_udf_tag tag; + struct grub_udf_timestamp datetime; + grub_uint16_t interchange_level; + grub_uint16_t max_interchange_level; + grub_uint32_t charset_list; + grub_uint32_t max_charset_list; + grub_uint32_t fileset_num; + grub_uint32_t fileset_desc_num; + struct grub_udf_charspec vol_charset; + grub_uint8_t vol_ident[128]; + struct grub_udf_charspec fileset_charset; + grub_uint8_t fileset_ident[32]; + grub_uint8_t copyright_file_ident[32]; + grub_uint8_t abstract_file_ident[32]; + struct grub_udf_long_ad root_icb; + struct grub_udf_regid domain_ident; + struct grub_udf_long_ad next_ext; + struct grub_udf_long_ad streamdir_icb; +} GRUB_PACKED; + +struct grub_udf_icbtag +{ + grub_uint32_t prior_recorded_num_direct_entries; + grub_uint16_t strategy_type; + grub_uint16_t strategy_parameter; + grub_uint16_t num_entries; + grub_uint8_t reserved; + grub_uint8_t file_type; + struct grub_udf_lb_addr parent_idb; + grub_uint16_t flags; +} GRUB_PACKED; + +struct grub_udf_file_ident +{ + struct grub_udf_tag tag; + grub_uint16_t version_num; + grub_uint8_t characteristics; +#define MAX_FILE_IDENT_LENGTH 256 + grub_uint8_t file_ident_length; + struct grub_udf_long_ad icb; + grub_uint16_t imp_use_length; +} GRUB_PACKED; + +struct grub_udf_file_entry +{ + struct grub_udf_tag tag; + struct grub_udf_icbtag icbtag; + grub_uint32_t uid; + grub_uint32_t gid; + grub_uint32_t permissions; + grub_uint16_t link_count; + grub_uint8_t record_format; + grub_uint8_t record_display_attr; + grub_uint32_t record_length; + grub_uint64_t file_size; + grub_uint64_t blocks_recorded; + struct grub_udf_timestamp access_time; + struct grub_udf_timestamp modification_time; + struct grub_udf_timestamp attr_time; + grub_uint32_t checkpoint; + struct grub_udf_long_ad extended_attr_idb; + struct grub_udf_regid imp_ident; + grub_uint64_t unique_id; + grub_uint32_t ext_attr_length; + grub_uint32_t alloc_descs_length; + grub_uint8_t ext_attr[0]; +} GRUB_PACKED; + +struct grub_udf_extended_file_entry +{ + struct grub_udf_tag tag; + struct grub_udf_icbtag icbtag; + grub_uint32_t uid; + grub_uint32_t gid; + grub_uint32_t permissions; + grub_uint16_t link_count; + grub_uint8_t record_format; + grub_uint8_t record_display_attr; + grub_uint32_t record_length; + grub_uint64_t file_size; + grub_uint64_t object_size; + grub_uint64_t blocks_recorded; + struct grub_udf_timestamp access_time; + struct grub_udf_timestamp modification_time; + struct grub_udf_timestamp create_time; + struct grub_udf_timestamp attr_time; + grub_uint32_t checkpoint; + grub_uint32_t reserved; + struct grub_udf_long_ad extended_attr_icb; + struct grub_udf_long_ad streamdir_icb; + struct grub_udf_regid imp_ident; + grub_uint64_t unique_id; + grub_uint32_t ext_attr_length; + grub_uint32_t alloc_descs_length; + grub_uint8_t ext_attr[0]; +} GRUB_PACKED; + +struct grub_udf_vrs +{ + grub_uint8_t type; + grub_uint8_t magic[5]; + grub_uint8_t version; +} GRUB_PACKED; + +struct grub_udf_avdp +{ + struct grub_udf_tag tag; + struct grub_udf_extent_ad vds; +} GRUB_PACKED; + +struct grub_udf_pd +{ + struct grub_udf_tag tag; + grub_uint32_t seq_num; + grub_uint16_t flags; + grub_uint16_t part_num; + struct grub_udf_regid contents; + grub_uint8_t contents_use[128]; + grub_uint32_t access_type; + grub_uint32_t start; + grub_uint32_t length; +} GRUB_PACKED; + +struct grub_udf_partmap +{ + grub_uint8_t type; + grub_uint8_t length; + union + { + struct + { + grub_uint16_t seq_num; + grub_uint16_t part_num; + } type1; + + struct + { + grub_uint8_t ident[62]; + } type2; + }; +} GRUB_PACKED; + +struct grub_udf_lvd +{ + struct grub_udf_tag tag; + grub_uint32_t seq_num; + struct grub_udf_charspec charset; + grub_uint8_t ident[128]; + grub_uint32_t bsize; + struct grub_udf_regid domain_ident; + struct grub_udf_long_ad root_fileset; + grub_uint32_t map_table_length; + grub_uint32_t num_part_maps; + struct grub_udf_regid imp_ident; + grub_uint8_t imp_use[128]; + struct grub_udf_extent_ad integrity_seq_ext; + grub_uint8_t part_maps[1608]; +} GRUB_PACKED; + +struct grub_udf_aed +{ + struct grub_udf_tag tag; + grub_uint32_t prev_ae; + grub_uint32_t ae_len; +} GRUB_PACKED; + +struct grub_udf_data +{ + grub_disk_t disk; + struct grub_udf_lvd lvd; + struct grub_udf_pd pds[GRUB_UDF_MAX_PDS]; + struct grub_udf_partmap *pms[GRUB_UDF_MAX_PMS]; + struct grub_udf_long_ad root_icb; + int npd, npm, lbshift; +}; + +struct grub_fshelp_node +{ + struct grub_udf_data *data; + int part_ref; + union + { + struct grub_udf_file_entry fe; + struct grub_udf_extended_file_entry efe; + char raw[0]; + } block; +}; + +static inline grub_size_t +get_fshelp_size (struct grub_udf_data *data) +{ + struct grub_fshelp_node *x = NULL; + return sizeof (*x) + + (1 << (GRUB_DISK_SECTOR_BITS + + data->lbshift)) - sizeof (x->block); +} + +static grub_dl_t my_mod; + +static grub_uint32_t +grub_udf_get_block (struct grub_udf_data *data, + grub_uint16_t part_ref, grub_uint32_t block) +{ + part_ref = U16 (part_ref); + + if (part_ref >= data->npm) + { + grub_error (GRUB_ERR_BAD_FS, "invalid part ref"); + return 0; + } + + return (U32 (data->pds[data->pms[part_ref]->type1.part_num].start) + + U32 (block)); +} + +static grub_err_t +grub_udf_read_icb (struct grub_udf_data *data, + struct grub_udf_long_ad *icb, + struct grub_fshelp_node *node) +{ + grub_uint32_t block; + + block = grub_udf_get_block (data, + icb->block.part_ref, + icb->block.block_num); + + if (grub_errno) + return grub_errno; + + if (grub_disk_read (data->disk, block << data->lbshift, 0, + 1 << (GRUB_DISK_SECTOR_BITS + + data->lbshift), + &node->block)) + return grub_errno; + + if ((U16 (node->block.fe.tag.tag_ident) != GRUB_UDF_TAG_IDENT_FE) && + (U16 (node->block.fe.tag.tag_ident) != GRUB_UDF_TAG_IDENT_EFE)) + return grub_error (GRUB_ERR_BAD_FS, "invalid fe/efe descriptor"); + + node->part_ref = icb->block.part_ref; + node->data = data; + return 0; +} + +static grub_disk_addr_t +grub_udf_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) +{ + char *buf = NULL; + char *ptr; + grub_ssize_t len; + grub_disk_addr_t filebytes; + + switch (U16 (node->block.fe.tag.tag_ident)) + { + case GRUB_UDF_TAG_IDENT_FE: + ptr = (char *) &node->block.fe.ext_attr[0] + U32 (node->block.fe.ext_attr_length); + len = U32 (node->block.fe.alloc_descs_length); + break; + + case GRUB_UDF_TAG_IDENT_EFE: + ptr = (char *) &node->block.efe.ext_attr[0] + U32 (node->block.efe.ext_attr_length); + len = U32 (node->block.efe.alloc_descs_length); + break; + + default: + grub_error (GRUB_ERR_BAD_FS, "invalid file entry"); + return 0; + } + + if ((U16 (node->block.fe.icbtag.flags) & GRUB_UDF_ICBTAG_FLAG_AD_MASK) + == GRUB_UDF_ICBTAG_FLAG_AD_SHORT) + { + struct grub_udf_short_ad *ad = (struct grub_udf_short_ad *) ptr; + + filebytes = fileblock * U32 (node->data->lvd.bsize); + while (len >= (grub_ssize_t) sizeof (struct grub_udf_short_ad)) + { + grub_uint32_t adlen = U32 (ad->length) & 0x3fffffff; + grub_uint32_t adtype = U32 (ad->length) >> 30; + if (adtype == 3) + { + struct grub_udf_aed *extension; + grub_disk_addr_t sec = grub_udf_get_block(node->data, + node->part_ref, + ad->position); + if (!buf) + { + buf = grub_malloc (U32 (node->data->lvd.bsize)); + if (!buf) + return 0; + } + if (grub_disk_read (node->data->disk, sec << node->data->lbshift, + 0, adlen, buf)) + goto fail; + + extension = (struct grub_udf_aed *) buf; + if (U16 (extension->tag.tag_ident) != GRUB_UDF_TAG_IDENT_AED) + { + grub_error (GRUB_ERR_BAD_FS, "invalid aed tag"); + goto fail; + } + + len = U32 (extension->ae_len); + ad = (struct grub_udf_short_ad *) + (buf + sizeof (struct grub_udf_aed)); + continue; + } + + if (filebytes < adlen) + { + grub_uint32_t ad_pos = ad->position; + grub_free (buf); + return ((U32 (ad_pos) & GRUB_UDF_EXT_MASK) ? 0 : + (grub_udf_get_block (node->data, node->part_ref, ad_pos) + + (filebytes >> (GRUB_DISK_SECTOR_BITS + + node->data->lbshift)))); + } + + filebytes -= adlen; + ad++; + len -= sizeof (struct grub_udf_short_ad); + } + } + else + { + struct grub_udf_long_ad *ad = (struct grub_udf_long_ad *) ptr; + + filebytes = fileblock * U32 (node->data->lvd.bsize); + while (len >= (grub_ssize_t) sizeof (struct grub_udf_long_ad)) + { + grub_uint32_t adlen = U32 (ad->length) & 0x3fffffff; + grub_uint32_t adtype = U32 (ad->length) >> 30; + if (adtype == 3) + { + struct grub_udf_aed *extension; + grub_disk_addr_t sec = grub_udf_get_block(node->data, + ad->block.part_ref, + ad->block.block_num); + if (!buf) + { + buf = grub_malloc (U32 (node->data->lvd.bsize)); + if (!buf) + return 0; + } + if (grub_disk_read (node->data->disk, sec << node->data->lbshift, + 0, adlen, buf)) + goto fail; + + extension = (struct grub_udf_aed *) buf; + if (U16 (extension->tag.tag_ident) != GRUB_UDF_TAG_IDENT_AED) + { + grub_error (GRUB_ERR_BAD_FS, "invalid aed tag"); + goto fail; + } + + len = U32 (extension->ae_len); + ad = (struct grub_udf_long_ad *) + (buf + sizeof (struct grub_udf_aed)); + continue; + } + + if (filebytes < adlen) + { + grub_uint32_t ad_block_num = ad->block.block_num; + grub_uint32_t ad_part_ref = ad->block.part_ref; + grub_free (buf); + return ((U32 (ad_block_num) & GRUB_UDF_EXT_MASK) ? 0 : + (grub_udf_get_block (node->data, ad_part_ref, + ad_block_num) + + (filebytes >> (GRUB_DISK_SECTOR_BITS + + node->data->lbshift)))); + } + + filebytes -= adlen; + ad++; + len -= sizeof (struct grub_udf_long_ad); + } + } + +fail: + grub_free (buf); + + return 0; +} + +static grub_ssize_t +grub_udf_read_file (grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + switch (U16 (node->block.fe.icbtag.flags) & GRUB_UDF_ICBTAG_FLAG_AD_MASK) + { + case GRUB_UDF_ICBTAG_FLAG_AD_IN_ICB: + { + char *ptr; + + ptr = ((U16 (node->block.fe.tag.tag_ident) == GRUB_UDF_TAG_IDENT_FE) ? + ((char *) &node->block.fe.ext_attr[0] + + U32 (node->block.fe.ext_attr_length)) : + ((char *) &node->block.efe.ext_attr[0] + + U32 (node->block.efe.ext_attr_length))); + + grub_memcpy (buf, ptr + pos, len); + + return len; + } + + case GRUB_UDF_ICBTAG_FLAG_AD_EXT: + grub_error (GRUB_ERR_BAD_FS, "invalid extent type"); + return 0; + } + + return grub_fshelp_read_file (node->data->disk, node, + read_hook, read_hook_data, + pos, len, buf, grub_udf_read_block, + U64 (node->block.fe.file_size), + node->data->lbshift, 0); +} + +static unsigned sblocklist[] = { 256, 512, 0 }; + +static struct grub_udf_data * +grub_udf_mount (grub_disk_t disk) +{ + struct grub_udf_data *data = 0; + struct grub_udf_fileset root_fs; + unsigned *sblklist; + grub_uint32_t block, vblock; + int i, lbshift; + + data = grub_malloc (sizeof (struct grub_udf_data)); + if (!data) + return 0; + + data->disk = disk; + + /* Search for Anchor Volume Descriptor Pointer (AVDP) + * and determine logical block size. */ + block = 0; + for (lbshift = 0; lbshift < 4; lbshift++) + { + for (sblklist = sblocklist; *sblklist; sblklist++) + { + struct grub_udf_avdp avdp; + + if (grub_disk_read (disk, *sblklist << lbshift, 0, + sizeof (struct grub_udf_avdp), &avdp)) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + + if (U16 (avdp.tag.tag_ident) == GRUB_UDF_TAG_IDENT_AVDP && + U32 (avdp.tag.tag_location) == *sblklist) + { + block = U32 (avdp.vds.start); + break; + } + } + + if (block) + break; + } + + if (!block) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + data->lbshift = lbshift; + + /* Search for Volume Recognition Sequence (VRS). */ + for (vblock = (32767 >> (lbshift + GRUB_DISK_SECTOR_BITS)) + 1;; + vblock += (2047 >> (lbshift + GRUB_DISK_SECTOR_BITS)) + 1) + { + struct grub_udf_vrs vrs; + + if (grub_disk_read (disk, vblock << lbshift, 0, + sizeof (struct grub_udf_vrs), &vrs)) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + + if ((!grub_memcmp (vrs.magic, GRUB_UDF_STD_IDENT_NSR03, 5)) || + (!grub_memcmp (vrs.magic, GRUB_UDF_STD_IDENT_NSR02, 5))) + break; + + if ((grub_memcmp (vrs.magic, GRUB_UDF_STD_IDENT_BEA01, 5)) && + (grub_memcmp (vrs.magic, GRUB_UDF_STD_IDENT_BOOT2, 5)) && + (grub_memcmp (vrs.magic, GRUB_UDF_STD_IDENT_CD001, 5)) && + (grub_memcmp (vrs.magic, GRUB_UDF_STD_IDENT_CDW02, 5)) && + (grub_memcmp (vrs.magic, GRUB_UDF_STD_IDENT_TEA01, 5))) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + } + + data->npd = data->npm = 0; + /* Locate Partition Descriptor (PD) and Logical Volume Descriptor (LVD). */ + while (1) + { + struct grub_udf_tag tag; + + if (grub_disk_read (disk, block << lbshift, 0, + sizeof (struct grub_udf_tag), &tag)) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + + tag.tag_ident = U16 (tag.tag_ident); + if (tag.tag_ident == GRUB_UDF_TAG_IDENT_PD) + { + if (data->npd >= GRUB_UDF_MAX_PDS) + { + grub_error (GRUB_ERR_BAD_FS, "too many PDs"); + goto fail; + } + + if (grub_disk_read (disk, block << lbshift, 0, + sizeof (struct grub_udf_pd), + &data->pds[data->npd])) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + + data->npd++; + } + else if (tag.tag_ident == GRUB_UDF_TAG_IDENT_LVD) + { + int k; + + struct grub_udf_partmap *ppm; + + if (grub_disk_read (disk, block << lbshift, 0, + sizeof (struct grub_udf_lvd), + &data->lvd)) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + + if (data->npm + U32 (data->lvd.num_part_maps) > GRUB_UDF_MAX_PMS) + { + grub_error (GRUB_ERR_BAD_FS, "too many partition maps"); + goto fail; + } + + ppm = (struct grub_udf_partmap *) &data->lvd.part_maps; + for (k = U32 (data->lvd.num_part_maps); k > 0; k--) + { + if (ppm->type != GRUB_UDF_PARTMAP_TYPE_1) + { + grub_error (GRUB_ERR_BAD_FS, "partmap type not supported"); + goto fail; + } + + data->pms[data->npm++] = ppm; + ppm = (struct grub_udf_partmap *) ((char *) ppm + + U32 (ppm->length)); + } + } + else if (tag.tag_ident > GRUB_UDF_TAG_IDENT_TD) + { + grub_error (GRUB_ERR_BAD_FS, "invalid tag ident"); + goto fail; + } + else if (tag.tag_ident == GRUB_UDF_TAG_IDENT_TD) + break; + + block++; + } + + for (i = 0; i < data->npm; i++) + { + int j; + + for (j = 0; j < data->npd; j++) + if (data->pms[i]->type1.part_num == data->pds[j].part_num) + { + data->pms[i]->type1.part_num = j; + break; + } + + if (j == data->npd) + { + grub_error (GRUB_ERR_BAD_FS, "can\'t find PD"); + goto fail; + } + } + + block = grub_udf_get_block (data, + data->lvd.root_fileset.block.part_ref, + data->lvd.root_fileset.block.block_num); + + if (grub_errno) + goto fail; + + if (grub_disk_read (disk, block << lbshift, 0, + sizeof (struct grub_udf_fileset), &root_fs)) + { + grub_error (GRUB_ERR_BAD_FS, "not an UDF filesystem"); + goto fail; + } + + if (U16 (root_fs.tag.tag_ident) != GRUB_UDF_TAG_IDENT_FSD) + { + grub_error (GRUB_ERR_BAD_FS, "invalid fileset descriptor"); + goto fail; + } + + data->root_icb = root_fs.root_icb; + + return data; + +fail: + grub_free (data); + return 0; +} + +#ifdef GRUB_UTIL +grub_disk_addr_t +grub_udf_get_cluster_sector (grub_disk_t disk, grub_uint64_t *sec_per_lcn) +{ + grub_disk_addr_t ret; + static struct grub_udf_data *data; + + data = grub_udf_mount (disk); + if (!data) + return 0; + + ret = U32 (data->pds[data->pms[0]->type1.part_num].start); + *sec_per_lcn = 1ULL << data->lbshift; + grub_free (data); + return ret; +} +#endif + +static char * +read_string (const grub_uint8_t *raw, grub_size_t sz, char *outbuf) +{ + grub_uint16_t *utf16 = NULL; + grub_size_t utf16len = 0; + + if (sz == 0) + return NULL; + + if (raw[0] != 8 && raw[0] != 16) + return NULL; + + if (raw[0] == 8) + { + unsigned i; + utf16len = sz - 1; + utf16 = grub_malloc (utf16len * sizeof (utf16[0])); + if (!utf16) + return NULL; + for (i = 0; i < utf16len; i++) + utf16[i] = raw[i + 1]; + } + if (raw[0] == 16) + { + unsigned i; + utf16len = (sz - 1) / 2; + utf16 = grub_malloc (utf16len * sizeof (utf16[0])); + if (!utf16) + return NULL; + for (i = 0; i < utf16len; i++) + utf16[i] = (raw[2 * i + 1] << 8) | raw[2*i + 2]; + } + if (!outbuf) + outbuf = grub_malloc (utf16len * GRUB_MAX_UTF8_PER_UTF16 + 1); + if (outbuf) + *grub_utf16_to_utf8 ((grub_uint8_t *) outbuf, utf16, utf16len) = '\0'; + grub_free (utf16); + return outbuf; +} + +static int +grub_udf_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + grub_fshelp_node_t child; + struct grub_udf_file_ident dirent; + grub_off_t offset = 0; + + child = grub_malloc (get_fshelp_size (dir->data)); + if (!child) + return 0; + + /* The current directory is not stored. */ + grub_memcpy (child, dir, get_fshelp_size (dir->data)); + + if (hook (".", GRUB_FSHELP_DIR, child, hook_data)) + return 1; + + while (offset < U64 (dir->block.fe.file_size)) + { + if (grub_udf_read_file (dir, 0, 0, offset, sizeof (dirent), + (char *) &dirent) != sizeof (dirent)) + return 0; + + if (U16 (dirent.tag.tag_ident) != GRUB_UDF_TAG_IDENT_FID) + { + grub_error (GRUB_ERR_BAD_FS, "invalid fid tag"); + return 0; + } + + offset += sizeof (dirent) + U16 (dirent.imp_use_length); + if (!(dirent.characteristics & GRUB_UDF_FID_CHAR_DELETED)) + { + child = grub_malloc (get_fshelp_size (dir->data)); + if (!child) + return 0; + + if (grub_udf_read_icb (dir->data, &dirent.icb, child)) + return 0; + + if (dirent.characteristics & GRUB_UDF_FID_CHAR_PARENT) + { + /* This is the parent directory. */ + if (hook ("..", GRUB_FSHELP_DIR, child, hook_data)) + return 1; + } + else + { + enum grub_fshelp_filetype type; + char *filename; + grub_uint8_t raw[MAX_FILE_IDENT_LENGTH]; + + type = ((dirent.characteristics & GRUB_UDF_FID_CHAR_DIRECTORY) ? + (GRUB_FSHELP_DIR) : (GRUB_FSHELP_REG)); + if (child->block.fe.icbtag.file_type == GRUB_UDF_ICBTAG_TYPE_SYMLINK) + type = GRUB_FSHELP_SYMLINK; + + if ((grub_udf_read_file (dir, 0, 0, offset, + dirent.file_ident_length, + (char *) raw)) + != dirent.file_ident_length) + return 0; + + filename = read_string (raw, dirent.file_ident_length, 0); + if (!filename) + grub_print_error (); + + if (filename && hook (filename, type, child, hook_data)) + { + grub_free (filename); + return 1; + } + grub_free (filename); + } + } + + /* Align to dword boundary. */ + offset = (offset + dirent.file_ident_length + 3) & (~3); + } + + return 0; +} + +static char * +grub_udf_read_symlink (grub_fshelp_node_t node) +{ + grub_size_t sz = U64 (node->block.fe.file_size); + grub_uint8_t *raw; + const grub_uint8_t *ptr; + char *out, *optr; + + if (sz < 4) + return NULL; + raw = grub_malloc (sz); + if (!raw) + return NULL; + if (grub_udf_read_file (node, NULL, NULL, 0, sz, (char *) raw) < 0) + { + grub_free (raw); + return NULL; + } + + out = grub_malloc (sz * 2 + 1); + if (!out) + { + grub_free (raw); + return NULL; + } + + optr = out; + + for (ptr = raw; ptr < raw + sz; ) + { + grub_size_t s; + if ((grub_size_t) (ptr - raw + 4) > sz) + goto fail; + if (!(ptr[2] == 0 && ptr[3] == 0)) + goto fail; + s = 4 + ptr[1]; + if ((grub_size_t) (ptr - raw + s) > sz) + goto fail; + switch (*ptr) + { + case 1: + if (ptr[1]) + goto fail; + /* Fallthrough. */ + case 2: + /* in 4 bytes. out: 1 byte. */ + optr = out; + *optr++ = '/'; + break; + case 3: + /* in 4 bytes. out: 3 bytes. */ + if (optr != out) + *optr++ = '/'; + *optr++ = '.'; + *optr++ = '.'; + break; + case 4: + /* in 4 bytes. out: 2 bytes. */ + if (optr != out) + *optr++ = '/'; + *optr++ = '.'; + break; + case 5: + /* in 4 + n bytes. out, at most: 1 + 2 * n bytes. */ + if (optr != out) + *optr++ = '/'; + if (!read_string (ptr + 4, s - 4, optr)) + goto fail; + optr += grub_strlen (optr); + break; + default: + goto fail; + } + ptr += s; + } + *optr = 0; + grub_free (raw); + return out; + + fail: + grub_free (raw); + grub_free (out); + grub_error (GRUB_ERR_BAD_FS, "invalid symlink"); + return NULL; +} + +/* Context for grub_udf_dir. */ +struct grub_udf_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_udf_dir. */ +static int +grub_udf_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_udf_dir_ctx *ctx = data; + struct grub_dirhook_info info; + const struct grub_udf_timestamp *tstamp = NULL; + + grub_memset (&info, 0, sizeof (info)); + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + if (U16 (node->block.fe.tag.tag_ident) == GRUB_UDF_TAG_IDENT_FE) + tstamp = &node->block.fe.modification_time; + else if (U16 (node->block.fe.tag.tag_ident) == GRUB_UDF_TAG_IDENT_EFE) + tstamp = &node->block.efe.modification_time; + + if (tstamp && (U16 (tstamp->type_and_timezone) & 0xf000) == 0x1000) + { + grub_int16_t tz; + struct grub_datetime datetime; + + datetime.year = U16 (tstamp->year); + datetime.month = tstamp->month; + datetime.day = tstamp->day; + datetime.hour = tstamp->hour; + datetime.minute = tstamp->minute; + datetime.second = tstamp->second; + + tz = U16 (tstamp->type_and_timezone) & 0xfff; + if (tz & 0x800) + tz |= 0xf000; + if (tz == -2047) + tz = 0; + + info.mtimeset = !!grub_datetime2unixtime (&datetime, &info.mtime); + + info.mtime -= 60 * tz; + } + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_udf_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_udf_dir_ctx ctx = { hook, hook_data }; + struct grub_udf_data *data = 0; + struct grub_fshelp_node *rootnode = 0; + struct grub_fshelp_node *foundnode = 0; + + grub_dl_ref (my_mod); + + data = grub_udf_mount (device->disk); + if (!data) + goto fail; + + rootnode = grub_malloc (get_fshelp_size (data)); + if (!rootnode) + goto fail; + + if (grub_udf_read_icb (data, &data->root_icb, rootnode)) + goto fail; + + if (grub_fshelp_find_file (path, rootnode, + &foundnode, + grub_udf_iterate_dir, grub_udf_read_symlink, + GRUB_FSHELP_DIR)) + goto fail; + + grub_udf_iterate_dir (foundnode, grub_udf_dir_iter, &ctx); + + if (foundnode != rootnode) + grub_free (foundnode); + +fail: + grub_free (rootnode); + + grub_free (data); + + grub_dl_unref (my_mod); + + return grub_errno; +} + +static grub_err_t +grub_udf_open (struct grub_file *file, const char *name) +{ + struct grub_udf_data *data; + struct grub_fshelp_node *rootnode = 0; + struct grub_fshelp_node *foundnode; + + grub_dl_ref (my_mod); + + data = grub_udf_mount (file->device->disk); + if (!data) + goto fail; + + rootnode = grub_malloc (get_fshelp_size (data)); + if (!rootnode) + goto fail; + + if (grub_udf_read_icb (data, &data->root_icb, rootnode)) + goto fail; + + if (grub_fshelp_find_file (name, rootnode, + &foundnode, + grub_udf_iterate_dir, grub_udf_read_symlink, + GRUB_FSHELP_REG)) + goto fail; + + file->data = foundnode; + file->offset = 0; + file->size = U64 (foundnode->block.fe.file_size); + + grub_free (rootnode); + + return 0; + +fail: + grub_dl_unref (my_mod); + + grub_free (data); + grub_free (rootnode); + + return grub_errno; +} + +static grub_ssize_t +grub_udf_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_fshelp_node *node = (struct grub_fshelp_node *) file->data; + + return grub_udf_read_file (node, file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + +static grub_err_t +grub_udf_close (grub_file_t file) +{ + if (file->data) + { + struct grub_fshelp_node *node = (struct grub_fshelp_node *) file->data; + + grub_free (node->data); + grub_free (node); + } + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_udf_label (grub_device_t device, char **label) +{ + struct grub_udf_data *data; + data = grub_udf_mount (device->disk); + + if (data) + { + *label = read_string (data->lvd.ident, sizeof (data->lvd.ident), 0); + grub_free (data); + } + else + *label = 0; + + return grub_errno; +} + +static struct grub_fs grub_udf_fs = { + .name = "udf", + .dir = grub_udf_dir, + .open = grub_udf_open, + .read = grub_udf_read, + .close = grub_udf_close, + .label = grub_udf_label, +#ifdef GRUB_UTIL + .reserved_first_sector = 1, + .blocklist_install = 1, +#endif + .next = 0 +}; + +GRUB_MOD_INIT (udf) +{ + grub_fs_register (&grub_udf_fs); + my_mod = mod; +} + +GRUB_MOD_FINI (udf) +{ + grub_fs_unregister (&grub_udf_fs); +} diff --git a/grub-core/fs/ufs.c b/grub-core/fs/ufs.c new file mode 100644 index 000000000..293f027aa --- /dev/null +++ b/grub-core/fs/ufs.c @@ -0,0 +1,918 @@ +/* ufs.c - Unix File System */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#ifdef MODE_UFS2 +#define GRUB_UFS_MAGIC 0x19540119 +#else +#define GRUB_UFS_MAGIC 0x11954 +#endif + +#define GRUB_UFS_INODE 2 +#define GRUB_UFS_FILETYPE_DIR 4 +#define GRUB_UFS_FILETYPE_LNK 10 +#define GRUB_UFS_MAX_SYMLNK_CNT 8 + +#define GRUB_UFS_DIRBLKS 12 +#define GRUB_UFS_INDIRBLKS 3 + +#define GRUB_UFS_ATTR_TYPE 0160000 +#define GRUB_UFS_ATTR_FILE 0100000 +#define GRUB_UFS_ATTR_DIR 0040000 +#define GRUB_UFS_ATTR_LNK 0120000 + +#define GRUB_UFS_VOLNAME_LEN 32 + +#ifdef MODE_BIGENDIAN +#define grub_ufs_to_cpu16 grub_be_to_cpu16 +#define grub_ufs_to_cpu32 grub_be_to_cpu32 +#define grub_ufs_to_cpu64 grub_be_to_cpu64 +#define grub_cpu_to_ufs32_compile_time grub_cpu_to_be32_compile_time +#else +#define grub_ufs_to_cpu16 grub_le_to_cpu16 +#define grub_ufs_to_cpu32 grub_le_to_cpu32 +#define grub_ufs_to_cpu64 grub_le_to_cpu64 +#define grub_cpu_to_ufs32_compile_time grub_cpu_to_le32_compile_time +#endif + +#ifdef MODE_UFS2 +typedef grub_uint64_t grub_ufs_blk_t; +static inline grub_disk_addr_t +grub_ufs_to_cpu_blk (grub_ufs_blk_t blk) +{ + return grub_ufs_to_cpu64 (blk); +} +#else +typedef grub_uint32_t grub_ufs_blk_t; +static inline grub_disk_addr_t +grub_ufs_to_cpu_blk (grub_ufs_blk_t blk) +{ + return grub_ufs_to_cpu32 (blk); +} +#endif + +/* Calculate in which group the inode can be found. */ +#define UFS_BLKSZ(sblock) (grub_ufs_to_cpu32 (sblock->bsize)) +#define UFS_LOG_BLKSZ(sblock) (data->log2_blksz) + +#ifdef MODE_UFS2 +#define INODE_ENDIAN(data,field,bits1,bits2) grub_ufs_to_cpu##bits2 (data->inode.field) +#else +#define INODE_ENDIAN(data,field,bits1,bits2) grub_ufs_to_cpu##bits1 (data->inode.field) +#endif + +#define INODE_SIZE(data) grub_ufs_to_cpu64 (data->inode.size) +#define INODE_MODE(data) grub_ufs_to_cpu16 (data->inode.mode) +#ifdef MODE_UFS2 +#define LOG_INODE_BLKSZ 3 +#else +#define LOG_INODE_BLKSZ 2 +#endif +#ifdef MODE_UFS2 +#define UFS_INODE_PER_BLOCK 2 +#else +#define UFS_INODE_PER_BLOCK 4 +#endif +#define INODE_DIRBLOCKS(data,blk) INODE_ENDIAN \ + (data,blocks.dir_blocks[blk],32,64) +#define INODE_INDIRBLOCKS(data,blk) INODE_ENDIAN \ + (data,blocks.indir_blocks[blk],32,64) + +/* The blocks on which the superblock can be found. */ +static int sblocklist[] = { 128, 16, 0, 512, -1 }; + +struct grub_ufs_sblock +{ + grub_uint8_t unused[16]; + /* The offset of the inodes in the cylinder group. */ + grub_uint32_t inoblk_offs; + + grub_uint8_t unused2[4]; + + /* The start of the cylinder group. */ + grub_uint32_t cylg_offset; + grub_uint32_t cylg_mask; + + grub_uint32_t mtime; + grub_uint8_t unused4[12]; + + /* The size of a block in bytes. */ + grub_int32_t bsize; + grub_uint8_t unused5[48]; + + /* The size of filesystem blocks to disk blocks. */ + grub_uint32_t log2_blksz; + grub_uint8_t unused6[40]; + grub_uint32_t uuidhi; + grub_uint32_t uuidlow; + grub_uint8_t unused7[32]; + + /* Inodes stored per cylinder group. */ + grub_uint32_t ino_per_group; + + /* The frags per cylinder group. */ + grub_uint32_t frags_per_group; + + grub_uint8_t unused8[488]; + + /* Volume name for UFS2. */ + grub_uint8_t volume_name[GRUB_UFS_VOLNAME_LEN]; + grub_uint8_t unused9[360]; + + grub_uint64_t mtime2; + grub_uint8_t unused10[292]; + + /* Magic value to check if this is really a UFS filesystem. */ + grub_uint32_t magic; +}; + +#ifdef MODE_UFS2 +/* UFS inode. */ +struct grub_ufs_inode +{ + grub_uint16_t mode; + grub_uint16_t nlinks; + grub_uint32_t uid; + grub_uint32_t gid; + grub_uint32_t blocksize; + grub_uint64_t size; + grub_int64_t nblocks; + grub_uint64_t atime; + grub_uint64_t mtime; + grub_uint64_t ctime; + grub_uint64_t create_time; + grub_uint32_t atime_usec; + grub_uint32_t mtime_usec; + grub_uint32_t ctime_usec; + grub_uint32_t create_time_sec; + grub_uint32_t gen; + grub_uint32_t kernel_flags; + grub_uint32_t flags; + grub_uint32_t extsz; + grub_uint64_t ext[2]; + union + { + struct + { + grub_uint64_t dir_blocks[GRUB_UFS_DIRBLKS]; + grub_uint64_t indir_blocks[GRUB_UFS_INDIRBLKS]; + } blocks; + grub_uint8_t symlink[(GRUB_UFS_DIRBLKS + GRUB_UFS_INDIRBLKS) * 8]; + }; + + grub_uint8_t unused[24]; +} GRUB_PACKED; +#else +/* UFS inode. */ +struct grub_ufs_inode +{ + grub_uint16_t mode; + grub_uint16_t nlinks; + grub_uint16_t uid; + grub_uint16_t gid; + grub_uint64_t size; + grub_uint32_t atime; + grub_uint32_t atime_usec; + grub_uint32_t mtime; + grub_uint32_t mtime_usec; + grub_uint32_t ctime; + grub_uint32_t ctime_usec; + union + { + struct + { + grub_uint32_t dir_blocks[GRUB_UFS_DIRBLKS]; + grub_uint32_t indir_blocks[GRUB_UFS_INDIRBLKS]; + } blocks; + grub_uint8_t symlink[(GRUB_UFS_DIRBLKS + GRUB_UFS_INDIRBLKS) * 4]; + }; + grub_uint32_t flags; + grub_uint32_t nblocks; + grub_uint32_t gen; + grub_uint32_t unused; + grub_uint8_t pad[12]; +} GRUB_PACKED; +#endif + +/* Directory entry. */ +struct grub_ufs_dirent +{ + grub_uint32_t ino; + grub_uint16_t direntlen; + union + { + grub_uint16_t namelen; + struct + { + grub_uint8_t filetype_bsd; + grub_uint8_t namelen_bsd; + }; + }; +} GRUB_PACKED; + +/* Information about a "mounted" ufs filesystem. */ +struct grub_ufs_data +{ + struct grub_ufs_sblock sblock; + grub_disk_t disk; + struct grub_ufs_inode inode; + int ino; + int linknest; + int log2_blksz; +}; + +static grub_dl_t my_mod; + +/* Forward declaration. */ +static grub_err_t grub_ufs_find_file (struct grub_ufs_data *data, + const char *path); + + +static grub_disk_addr_t +grub_ufs_get_file_block (struct grub_ufs_data *data, grub_disk_addr_t blk) +{ + unsigned long indirsz; + int log2_blksz, log_indirsz; + + /* Direct. */ + if (blk < GRUB_UFS_DIRBLKS) + return INODE_DIRBLOCKS (data, blk); + + log2_blksz = grub_ufs_to_cpu32 (data->sblock.log2_blksz); + + blk -= GRUB_UFS_DIRBLKS; + + log_indirsz = data->log2_blksz - LOG_INODE_BLKSZ; + indirsz = 1 << log_indirsz; + + /* Single indirect block. */ + if (blk < indirsz) + { + grub_ufs_blk_t indir; + grub_disk_read (data->disk, + ((grub_disk_addr_t) INODE_INDIRBLOCKS (data, 0)) + << log2_blksz, + blk * sizeof (indir), sizeof (indir), &indir); + return indir; + } + blk -= indirsz; + + /* Double indirect block. */ + if (blk < (grub_disk_addr_t) indirsz * (grub_disk_addr_t) indirsz) + { + grub_ufs_blk_t indir; + + grub_disk_read (data->disk, + ((grub_disk_addr_t) INODE_INDIRBLOCKS (data, 1)) + << log2_blksz, + (blk >> log_indirsz) * sizeof (indir), + sizeof (indir), &indir); + grub_disk_read (data->disk, + grub_ufs_to_cpu_blk (indir) << log2_blksz, + (blk & ((1 << log_indirsz) - 1)) * sizeof (indir), + sizeof (indir), &indir); + + return indir; + } + + blk -= (grub_disk_addr_t) indirsz * (grub_disk_addr_t) indirsz; + + /* Triple indirect block. */ + if (!(blk >> (3 * log_indirsz))) + { + grub_ufs_blk_t indir; + + grub_disk_read (data->disk, + ((grub_disk_addr_t) INODE_INDIRBLOCKS (data, 2)) + << log2_blksz, + (blk >> (2 * log_indirsz)) * sizeof (indir), + sizeof (indir), &indir); + grub_disk_read (data->disk, + grub_ufs_to_cpu_blk (indir) << log2_blksz, + ((blk >> log_indirsz) + & ((1 << log_indirsz) - 1)) * sizeof (indir), + sizeof (indir), &indir); + + grub_disk_read (data->disk, + grub_ufs_to_cpu_blk (indir) << log2_blksz, + (blk & ((1 << log_indirsz) - 1)) * sizeof (indir), + sizeof (indir), &indir); + + return indir; + } + + grub_error (GRUB_ERR_BAD_FS, + "ufs does not support quadruple indirect blocks"); + return 0; +} + + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_ufs_read_file (struct grub_ufs_data *data, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf) +{ + struct grub_ufs_sblock *sblock = &data->sblock; + grub_off_t i; + grub_off_t blockcnt; + + /* Adjust len so it we can't read past the end of the file. */ + if (len + pos > INODE_SIZE (data)) + len = INODE_SIZE (data) - pos; + + blockcnt = (len + pos + UFS_BLKSZ (sblock) - 1) >> UFS_LOG_BLKSZ (sblock); + + for (i = pos >> UFS_LOG_BLKSZ (sblock); i < blockcnt; i++) + { + grub_disk_addr_t blknr; + grub_off_t blockoff; + grub_off_t blockend = UFS_BLKSZ (sblock); + + int skipfirst = 0; + + blockoff = pos & (UFS_BLKSZ (sblock) - 1); + + blknr = grub_ufs_get_file_block (data, i); + if (grub_errno) + return -1; + + /* Last block. */ + if (i == blockcnt - 1) + { + blockend = (len + pos) & (UFS_BLKSZ (sblock) - 1); + + if (!blockend) + blockend = UFS_BLKSZ (sblock); + } + + /* First block. */ + if (i == (pos >> UFS_LOG_BLKSZ (sblock))) + { + skipfirst = blockoff; + blockend -= skipfirst; + } + + /* XXX: If the block number is 0 this block is not stored on + disk but is zero filled instead. */ + if (blknr) + { + data->disk->read_hook = read_hook; + data->disk->read_hook_data = read_hook_data; + grub_disk_read (data->disk, + blknr << grub_ufs_to_cpu32 (data->sblock.log2_blksz), + skipfirst, blockend, buf); + data->disk->read_hook = 0; + if (grub_errno) + return -1; + } + else + grub_memset (buf, 0, blockend); + + buf += UFS_BLKSZ (sblock) - skipfirst; + } + + return len; +} + +/* Read inode INO from the mounted filesystem described by DATA. This + inode is used by default now. */ +static grub_err_t +grub_ufs_read_inode (struct grub_ufs_data *data, int ino, char *inode) +{ + struct grub_ufs_sblock *sblock = &data->sblock; + + /* Determine the group the inode is in. */ + int group = ino / grub_ufs_to_cpu32 (sblock->ino_per_group); + + /* Determine the inode within the group. */ + int grpino = ino % grub_ufs_to_cpu32 (sblock->ino_per_group); + + /* The first block of the group. */ + int grpblk = group * (grub_ufs_to_cpu32 (sblock->frags_per_group)); + +#ifndef MODE_UFS2 + grpblk += grub_ufs_to_cpu32 (sblock->cylg_offset) + * (group & (~grub_ufs_to_cpu32 (sblock->cylg_mask))); +#endif + + if (!inode) + { + inode = (char *) &data->inode; + data->ino = ino; + } + + grub_disk_read (data->disk, + ((grub_ufs_to_cpu32 (sblock->inoblk_offs) + grpblk) + << grub_ufs_to_cpu32 (data->sblock.log2_blksz)) + + grpino / UFS_INODE_PER_BLOCK, + (grpino % UFS_INODE_PER_BLOCK) + * sizeof (struct grub_ufs_inode), + sizeof (struct grub_ufs_inode), + inode); + + return grub_errno; +} + + +/* Lookup the symlink the current inode points to. INO is the inode + number of the directory the symlink is relative to. */ +static grub_err_t +grub_ufs_lookup_symlink (struct grub_ufs_data *data, int ino) +{ + char *symlink; + grub_size_t sz = INODE_SIZE (data); + + if (++data->linknest > GRUB_UFS_MAX_SYMLNK_CNT) + return grub_error (GRUB_ERR_SYMLINK_LOOP, N_("too deep nesting of symlinks")); + + symlink = grub_malloc (sz + 1); + if (!symlink) + return grub_errno; + /* Normally we should just check that data->inode.nblocks == 0. + However old Linux doesn't maintain nblocks correctly and so it's always + 0. If size is bigger than inline space then the symlink is surely not + inline. */ + /* Check against zero is paylindromic, no need to swap. */ + if (data->inode.nblocks == 0 + && INODE_SIZE (data) <= sizeof (data->inode.symlink)) + grub_strcpy (symlink, (char *) data->inode.symlink); + else + { + if (grub_ufs_read_file (data, 0, 0, 0, sz, symlink) < 0) + { + grub_free(symlink); + return grub_errno; + } + } + symlink[sz] = '\0'; + + /* The symlink is an absolute path, go back to the root inode. */ + if (symlink[0] == '/') + ino = GRUB_UFS_INODE; + + /* Now load in the old inode. */ + if (grub_ufs_read_inode (data, ino, 0)) + { + grub_free (symlink); + return grub_errno; + } + + grub_ufs_find_file (data, symlink); + + grub_free (symlink); + + return grub_errno; +} + + +/* Find the file with the pathname PATH on the filesystem described by + DATA. */ +static grub_err_t +grub_ufs_find_file (struct grub_ufs_data *data, const char *path) +{ + const char *name; + const char *next = path; + unsigned int pos = 0; + int dirino; + char *filename; + + /* We reject filenames longer than the one we're looking + for without reading, so this allocation is enough. */ + filename = grub_malloc (grub_strlen (path) + 2); + if (!filename) + return grub_errno; + + while (1) + { + struct grub_ufs_dirent dirent; + + name = next; + /* Skip the first slash. */ + while (*name == '/') + name++; + if (*name == 0) + { + grub_free (filename); + return GRUB_ERR_NONE; + } + + if ((INODE_MODE(data) & GRUB_UFS_ATTR_TYPE) + != GRUB_UFS_ATTR_DIR) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, + N_("not a directory")); + goto fail; + } + + /* Extract the actual part from the pathname. */ + for (next = name; *next && *next != '/'; next++); + for (pos = 0; ; pos += grub_ufs_to_cpu16 (dirent.direntlen)) + { + int namelen; + + if (pos >= INODE_SIZE (data)) + { + grub_error (GRUB_ERR_FILE_NOT_FOUND, + N_("file `%s' not found"), + path); + goto fail; + } + + if (grub_ufs_read_file (data, 0, 0, pos, sizeof (dirent), + (char *) &dirent) < 0) + goto fail; + +#ifdef MODE_UFS2 + namelen = dirent.namelen_bsd; +#else + namelen = grub_ufs_to_cpu16 (dirent.namelen); +#endif + if (namelen < next - name) + continue; + + if (grub_ufs_read_file (data, 0, 0, pos + sizeof (dirent), + next - name + (namelen != next - name), + filename) < 0) + goto fail; + + if (grub_strncmp (name, filename, next - name) == 0 + && (namelen == next - name || filename[next - name] == '\0')) + { + dirino = data->ino; + grub_ufs_read_inode (data, grub_ufs_to_cpu32 (dirent.ino), 0); + + if ((INODE_MODE(data) & GRUB_UFS_ATTR_TYPE) + == GRUB_UFS_ATTR_LNK) + { + grub_ufs_lookup_symlink (data, dirino); + if (grub_errno) + goto fail; + } + + break; + } + } + } + fail: + grub_free (filename); + return grub_errno; +} + + +/* Mount the filesystem on the disk DISK. */ +static struct grub_ufs_data * +grub_ufs_mount (grub_disk_t disk) +{ + struct grub_ufs_data *data; + int *sblklist = sblocklist; + + data = grub_malloc (sizeof (struct grub_ufs_data)); + if (!data) + return 0; + + /* Find a UFS sblock. */ + while (*sblklist != -1) + { + grub_disk_read (disk, *sblklist, 0, sizeof (struct grub_ufs_sblock), + &data->sblock); + if (grub_errno) + goto fail; + + /* No need to byteswap bsize in this check. It works the same on both + endiannesses. */ + if (data->sblock.magic == grub_cpu_to_ufs32_compile_time (GRUB_UFS_MAGIC) + && data->sblock.bsize != 0 + && ((data->sblock.bsize & (data->sblock.bsize - 1)) == 0) + && data->sblock.ino_per_group != 0) + { + for (data->log2_blksz = 0; + (1U << data->log2_blksz) < grub_ufs_to_cpu32 (data->sblock.bsize); + data->log2_blksz++); + + data->disk = disk; + data->linknest = 0; + return data; + } + sblklist++; + } + + fail: + + if (grub_errno == GRUB_ERR_NONE || grub_errno == GRUB_ERR_OUT_OF_RANGE) + { +#ifdef MODE_UFS2 + grub_error (GRUB_ERR_BAD_FS, "not an ufs2 filesystem"); +#else + grub_error (GRUB_ERR_BAD_FS, "not an ufs1 filesystem"); +#endif + } + + grub_free (data); + + return 0; +} + + +static grub_err_t +grub_ufs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_ufs_data *data; + unsigned int pos = 0; + + data = grub_ufs_mount (device->disk); + if (!data) + return grub_errno; + + grub_ufs_read_inode (data, GRUB_UFS_INODE, 0); + if (grub_errno) + return grub_errno; + + if (!path || path[0] != '/') + { + grub_error (GRUB_ERR_BAD_FILENAME, N_("invalid file name `%s'"), path); + return grub_errno; + } + + grub_ufs_find_file (data, path); + if (grub_errno) + goto fail; + + if ((INODE_MODE (data) & GRUB_UFS_ATTR_TYPE) != GRUB_UFS_ATTR_DIR) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + goto fail; + } + + while (pos < INODE_SIZE (data)) + { + struct grub_ufs_dirent dirent; + int namelen; + + if (grub_ufs_read_file (data, 0, 0, pos, sizeof (dirent), + (char *) &dirent) < 0) + break; + + if (dirent.direntlen == 0) + break; + +#ifdef MODE_UFS2 + namelen = dirent.namelen_bsd; +#else + namelen = grub_ufs_to_cpu16 (dirent.namelen); +#endif + + char *filename = grub_malloc (namelen + 1); + if (!filename) + goto fail; + struct grub_dirhook_info info; + struct grub_ufs_inode inode; + + grub_memset (&info, 0, sizeof (info)); + + if (grub_ufs_read_file (data, 0, 0, pos + sizeof (dirent), + namelen, filename) < 0) + { + grub_free (filename); + break; + } + + filename[namelen] = '\0'; + grub_ufs_read_inode (data, grub_ufs_to_cpu32 (dirent.ino), + (char *) &inode); + + info.dir = ((grub_ufs_to_cpu16 (inode.mode) & GRUB_UFS_ATTR_TYPE) + == GRUB_UFS_ATTR_DIR); +#ifdef MODE_UFS2 + info.mtime = grub_ufs_to_cpu64 (inode.mtime); +#else + info.mtime = grub_ufs_to_cpu32 (inode.mtime); +#endif + info.mtimeset = 1; + + if (hook (filename, &info, hook_data)) + { + grub_free (filename); + break; + } + + grub_free (filename); + + pos += grub_ufs_to_cpu16 (dirent.direntlen); + } + + fail: + grub_free (data); + + return grub_errno; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_ufs_open (struct grub_file *file, const char *name) +{ + struct grub_ufs_data *data; + data = grub_ufs_mount (file->device->disk); + if (!data) + return grub_errno; + + grub_ufs_read_inode (data, 2, 0); + if (grub_errno) + { + grub_free (data); + return grub_errno; + } + + if (!name || name[0] != '/') + { + grub_error (GRUB_ERR_BAD_FILENAME, N_("invalid file name `%s'"), name); + return grub_errno; + } + + grub_ufs_find_file (data, name); + if (grub_errno) + { + grub_free (data); + return grub_errno; + } + + file->data = data; + file->size = INODE_SIZE (data); + + return GRUB_ERR_NONE; +} + + +static grub_ssize_t +grub_ufs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_ufs_data *data = + (struct grub_ufs_data *) file->data; + + return grub_ufs_read_file (data, file->read_hook, file->read_hook_data, + file->offset, len, buf); +} + + +static grub_err_t +grub_ufs_close (grub_file_t file) +{ + grub_free (file->data); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_ufs_label (grub_device_t device, char **label) +{ + struct grub_ufs_data *data = 0; + + grub_dl_ref (my_mod); + + *label = 0; + + data = grub_ufs_mount (device->disk); + if (data) + *label = grub_strdup ((char *) data->sblock.volume_name); + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_ufs_uuid (grub_device_t device, char **uuid) +{ + struct grub_ufs_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_ufs_mount (disk); + if (data && (data->sblock.uuidhi != 0 || data->sblock.uuidlow != 0)) + *uuid = grub_xasprintf ("%08x%08x", + (unsigned) grub_ufs_to_cpu32 (data->sblock.uuidhi), + (unsigned) grub_ufs_to_cpu32 (data->sblock.uuidlow)); + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + +/* Get mtime. */ +static grub_err_t +grub_ufs_mtime (grub_device_t device, grub_int32_t *tm) +{ + struct grub_ufs_data *data = 0; + + grub_dl_ref (my_mod); + + data = grub_ufs_mount (device->disk); + if (!data) + *tm = 0; + else + { + *tm = grub_ufs_to_cpu32 (data->sblock.mtime); +#ifdef MODE_UFS2 + if (*tm < (grub_int64_t) grub_ufs_to_cpu64 (data->sblock.mtime2)) + *tm = grub_ufs_to_cpu64 (data->sblock.mtime2); +#endif + } + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + + +static struct grub_fs grub_ufs_fs = + { +#ifdef MODE_UFS2 + .name = "ufs2", +#else +#ifdef MODE_BIGENDIAN + .name = "ufs1_be", +#else + .name = "ufs1", +#endif +#endif + .dir = grub_ufs_dir, + .open = grub_ufs_open, + .read = grub_ufs_read, + .close = grub_ufs_close, + .label = grub_ufs_label, + .uuid = grub_ufs_uuid, + .mtime = grub_ufs_mtime, + /* FIXME: set reserved_first_sector. */ +#ifdef GRUB_UTIL + .blocklist_install = 1, +#endif + .next = 0 + }; + +#ifdef MODE_UFS2 +GRUB_MOD_INIT(ufs2) +#else +#ifdef MODE_BIGENDIAN +GRUB_MOD_INIT(ufs1_be) +#else +GRUB_MOD_INIT(ufs1) +#endif +#endif +{ + grub_fs_register (&grub_ufs_fs); + my_mod = mod; +} + +#ifdef MODE_UFS2 +GRUB_MOD_FINI(ufs2) +#else +#ifdef MODE_BIGENDIAN +GRUB_MOD_FINI(ufs1_be) +#else +GRUB_MOD_FINI(ufs1) +#endif +#endif +{ + grub_fs_unregister (&grub_ufs_fs); +} + diff --git a/grub-core/fs/ufs2.c b/grub-core/fs/ufs2.c new file mode 100644 index 000000000..7f4eb95de --- /dev/null +++ b/grub-core/fs/ufs2.c @@ -0,0 +1,3 @@ +/* ufs2.c - Unix File System 2 */ +#define MODE_UFS2 1 +#include "ufs.c" diff --git a/grub-core/fs/ufs_be.c b/grub-core/fs/ufs_be.c new file mode 100644 index 000000000..a58f75a99 --- /dev/null +++ b/grub-core/fs/ufs_be.c @@ -0,0 +1,2 @@ +#define MODE_BIGENDIAN 1 +#include "ufs.c" diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c new file mode 100644 index 000000000..9f66dd6e4 --- /dev/null +++ b/grub-core/fs/xfs.c @@ -0,0 +1,1150 @@ +/* xfs.c - XFS. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define XFS_INODE_EXTENTS 9 + +#define XFS_INODE_FORMAT_INO 1 +#define XFS_INODE_FORMAT_EXT 2 +#define XFS_INODE_FORMAT_BTREE 3 + +/* Superblock version field flags */ +#define XFS_SB_VERSION_NUMBITS 0x000f +#define XFS_SB_VERSION_ATTRBIT 0x0010 +#define XFS_SB_VERSION_NLINKBIT 0x0020 +#define XFS_SB_VERSION_QUOTABIT 0x0040 +#define XFS_SB_VERSION_ALIGNBIT 0x0080 +#define XFS_SB_VERSION_DALIGNBIT 0x0100 +#define XFS_SB_VERSION_LOGV2BIT 0x0400 +#define XFS_SB_VERSION_SECTORBIT 0x0800 +#define XFS_SB_VERSION_EXTFLGBIT 0x1000 +#define XFS_SB_VERSION_DIRV2BIT 0x2000 +#define XFS_SB_VERSION_MOREBITSBIT 0x8000 +#define XFS_SB_VERSION_BITS_SUPPORTED \ + (XFS_SB_VERSION_NUMBITS | \ + XFS_SB_VERSION_ATTRBIT | \ + XFS_SB_VERSION_NLINKBIT | \ + XFS_SB_VERSION_QUOTABIT | \ + XFS_SB_VERSION_ALIGNBIT | \ + XFS_SB_VERSION_DALIGNBIT | \ + XFS_SB_VERSION_LOGV2BIT | \ + XFS_SB_VERSION_SECTORBIT | \ + XFS_SB_VERSION_EXTFLGBIT | \ + XFS_SB_VERSION_DIRV2BIT | \ + XFS_SB_VERSION_MOREBITSBIT) + +/* Recognized xfs format versions */ +#define XFS_SB_VERSION_4 4 /* Good old XFS filesystem */ +#define XFS_SB_VERSION_5 5 /* CRC enabled filesystem */ + +/* features2 field flags */ +#define XFS_SB_VERSION2_LAZYSBCOUNTBIT 0x00000002 /* Superblk counters */ +#define XFS_SB_VERSION2_ATTR2BIT 0x00000008 /* Inline attr rework */ +#define XFS_SB_VERSION2_PROJID32BIT 0x00000080 /* 32-bit project ids */ +#define XFS_SB_VERSION2_FTYPE 0x00000200 /* inode type in dir */ +#define XFS_SB_VERSION2_BITS_SUPPORTED \ + (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \ + XFS_SB_VERSION2_ATTR2BIT | \ + XFS_SB_VERSION2_PROJID32BIT | \ + XFS_SB_VERSION2_FTYPE) + +/* incompat feature flags */ +#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */ +#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */ +#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */ + +/* We do not currently verify metadata UUID so it is safe to read such filesystem */ +#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \ + (XFS_SB_FEAT_INCOMPAT_FTYPE | \ + XFS_SB_FEAT_INCOMPAT_META_UUID) + +struct grub_xfs_sblock +{ + grub_uint8_t magic[4]; + grub_uint32_t bsize; + grub_uint8_t unused1[24]; + grub_uint16_t uuid[8]; + grub_uint8_t unused2[8]; + grub_uint64_t rootino; + grub_uint8_t unused3[20]; + grub_uint32_t agsize; + grub_uint8_t unused4[12]; + grub_uint16_t version; + grub_uint8_t unused5[6]; + grub_uint8_t label[12]; + grub_uint8_t log2_bsize; + grub_uint8_t log2_sect; + grub_uint8_t log2_inode; + grub_uint8_t log2_inop; + grub_uint8_t log2_agblk; + grub_uint8_t unused6[67]; + grub_uint8_t log2_dirblk; + grub_uint8_t unused7[7]; + grub_uint32_t features2; + grub_uint8_t unused8[4]; + grub_uint32_t sb_features_compat; + grub_uint32_t sb_features_ro_compat; + grub_uint32_t sb_features_incompat; + grub_uint32_t sb_features_log_incompat; +} GRUB_PACKED; + +struct grub_xfs_dir_header +{ + grub_uint8_t count; + grub_uint8_t largeino; + union + { + grub_uint32_t i4; + grub_uint64_t i8; + } GRUB_PACKED parent; +} GRUB_PACKED; + +/* Structure for directory entry inlined in the inode */ +struct grub_xfs_dir_entry +{ + grub_uint8_t len; + grub_uint16_t offset; + char name[1]; + /* Inode number follows, 32 / 64 bits. */ +} GRUB_PACKED; + +/* Structure for directory entry in a block */ +struct grub_xfs_dir2_entry +{ + grub_uint64_t inode; + grub_uint8_t len; +} GRUB_PACKED; + +struct grub_xfs_extent +{ + /* This should be a bitfield but bietfields are unportable, so just have + a raw array and functions extracting useful info from it. + */ + grub_uint32_t raw[4]; +} GRUB_PACKED; + +struct grub_xfs_btree_node +{ + grub_uint8_t magic[4]; + grub_uint16_t level; + grub_uint16_t numrecs; + grub_uint64_t left; + grub_uint64_t right; + /* In V5 here follow crc, uuid, etc. */ + /* Then follow keys and block pointers */ +} GRUB_PACKED; + +struct grub_xfs_btree_root +{ + grub_uint16_t level; + grub_uint16_t numrecs; + grub_uint64_t keys[1]; +} GRUB_PACKED; + +struct grub_xfs_time +{ + grub_uint32_t sec; + grub_uint32_t nanosec; +} GRUB_PACKED; + +struct grub_xfs_inode +{ + grub_uint8_t magic[2]; + grub_uint16_t mode; + grub_uint8_t version; + grub_uint8_t format; + grub_uint8_t unused2[26]; + struct grub_xfs_time atime; + struct grub_xfs_time mtime; + struct grub_xfs_time ctime; + grub_uint64_t size; + grub_uint64_t nblocks; + grub_uint32_t extsize; + grub_uint32_t nextents; + grub_uint16_t unused3; + grub_uint8_t fork_offset; + grub_uint8_t unused4[17]; +} GRUB_PACKED; + +#define XFS_V2_INODE_SIZE sizeof(struct grub_xfs_inode) +#define XFS_V3_INODE_SIZE (XFS_V2_INODE_SIZE + 76) + +struct grub_xfs_dirblock_tail +{ + grub_uint32_t leaf_count; + grub_uint32_t leaf_stale; +} GRUB_PACKED; + +struct grub_fshelp_node +{ + struct grub_xfs_data *data; + grub_uint64_t ino; + int inode_read; + struct grub_xfs_inode inode; +}; + +struct grub_xfs_data +{ + struct grub_xfs_sblock sblock; + grub_disk_t disk; + int pos; + int bsize; + grub_uint32_t agsize; + unsigned int hasftype:1; + unsigned int hascrc:1; + struct grub_fshelp_node diropen; +}; + +static grub_dl_t my_mod; + + + +static int grub_xfs_sb_hascrc(struct grub_xfs_data *data) +{ + return (data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) == + grub_cpu_to_be16_compile_time(XFS_SB_VERSION_5); +} + +static int grub_xfs_sb_hasftype(struct grub_xfs_data *data) +{ + if ((data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) == + grub_cpu_to_be16_compile_time(XFS_SB_VERSION_5) && + data->sblock.sb_features_incompat & grub_cpu_to_be32_compile_time(XFS_SB_FEAT_INCOMPAT_FTYPE)) + return 1; + if (data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_MOREBITSBIT) && + data->sblock.features2 & grub_cpu_to_be32_compile_time(XFS_SB_VERSION2_FTYPE)) + return 1; + return 0; +} + +static int grub_xfs_sb_valid(struct grub_xfs_data *data) +{ + grub_dprintf("xfs", "Validating superblock\n"); + if (grub_strncmp ((char *) (data->sblock.magic), "XFSB", 4) + || data->sblock.log2_bsize < GRUB_DISK_SECTOR_BITS + || ((int) data->sblock.log2_bsize + + (int) data->sblock.log2_dirblk) >= 27) + { + grub_error (GRUB_ERR_BAD_FS, "not a XFS filesystem"); + return 0; + } + if ((data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) == + grub_cpu_to_be16_compile_time(XFS_SB_VERSION_5)) + { + grub_dprintf("xfs", "XFS v5 superblock detected\n"); + if (data->sblock.sb_features_incompat & + grub_cpu_to_be32_compile_time(~XFS_SB_FEAT_INCOMPAT_SUPPORTED)) + { + grub_error (GRUB_ERR_BAD_FS, "XFS filesystem has unsupported " + "incompatible features"); + return 0; + } + return 1; + } + else if ((data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) == + grub_cpu_to_be16_compile_time(XFS_SB_VERSION_4)) + { + grub_dprintf("xfs", "XFS v4 superblock detected\n"); + if (!(data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_DIRV2BIT))) + { + grub_error (GRUB_ERR_BAD_FS, "XFS filesystem without V2 directories " + "is unsupported"); + return 0; + } + if (data->sblock.version & grub_cpu_to_be16_compile_time(~XFS_SB_VERSION_BITS_SUPPORTED) || + (data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_MOREBITSBIT) && + data->sblock.features2 & grub_cpu_to_be16_compile_time(~XFS_SB_VERSION2_BITS_SUPPORTED))) + { + grub_error (GRUB_ERR_BAD_FS, "XFS filesystem has unsupported version " + "bits"); + return 0; + } + return 1; + } + return 0; +} + +/* Filetype information as used in inodes. */ +#define FILETYPE_INO_MASK 0170000 +#define FILETYPE_INO_REG 0100000 +#define FILETYPE_INO_DIRECTORY 0040000 +#define FILETYPE_INO_SYMLINK 0120000 + +static inline int +GRUB_XFS_INO_AGBITS(struct grub_xfs_data *data) +{ + return ((data)->sblock.log2_agblk + (data)->sblock.log2_inop); +} + +static inline grub_uint64_t +GRUB_XFS_INO_INOINAG (struct grub_xfs_data *data, + grub_uint64_t ino) +{ + return (ino & ((1LL << GRUB_XFS_INO_AGBITS (data)) - 1)); +} + +static inline grub_uint64_t +GRUB_XFS_INO_AG (struct grub_xfs_data *data, + grub_uint64_t ino) +{ + return (ino >> GRUB_XFS_INO_AGBITS (data)); +} + +static inline grub_disk_addr_t +GRUB_XFS_FSB_TO_BLOCK (struct grub_xfs_data *data, grub_disk_addr_t fsb) +{ + return ((fsb >> data->sblock.log2_agblk) * data->agsize + + (fsb & ((1LL << data->sblock.log2_agblk) - 1))); +} + +static inline grub_uint64_t +GRUB_XFS_EXTENT_OFFSET (struct grub_xfs_extent *exts, int ex) +{ + return ((grub_be_to_cpu32 (exts[ex].raw[0]) & ~(1 << 31)) << 23 + | grub_be_to_cpu32 (exts[ex].raw[1]) >> 9); +} + +static inline grub_uint64_t +GRUB_XFS_EXTENT_BLOCK (struct grub_xfs_extent *exts, int ex) +{ + return ((grub_uint64_t) (grub_be_to_cpu32 (exts[ex].raw[1]) + & (0x1ff)) << 43 + | (grub_uint64_t) grub_be_to_cpu32 (exts[ex].raw[2]) << 11 + | grub_be_to_cpu32 (exts[ex].raw[3]) >> 21); +} + +static inline grub_uint64_t +GRUB_XFS_EXTENT_SIZE (struct grub_xfs_extent *exts, int ex) +{ + return (grub_be_to_cpu32 (exts[ex].raw[3]) & ((1 << 21) - 1)); +} + + +static inline grub_uint64_t +grub_xfs_inode_block (struct grub_xfs_data *data, + grub_uint64_t ino) +{ + long long int inoinag = GRUB_XFS_INO_INOINAG (data, ino); + long long ag = GRUB_XFS_INO_AG (data, ino); + long long block; + + block = (inoinag >> data->sblock.log2_inop) + ag * data->agsize; + block <<= (data->sblock.log2_bsize - GRUB_DISK_SECTOR_BITS); + return block; +} + + +static inline int +grub_xfs_inode_offset (struct grub_xfs_data *data, + grub_uint64_t ino) +{ + int inoag = GRUB_XFS_INO_INOINAG (data, ino); + return ((inoag & ((1 << data->sblock.log2_inop) - 1)) << + data->sblock.log2_inode); +} + +static inline grub_size_t +grub_xfs_inode_size(struct grub_xfs_data *data) +{ + return (grub_size_t)1 << data->sblock.log2_inode; +} + +/* + * Returns size occupied by XFS inode stored in memory - we store struct + * grub_fshelp_node there but on disk inode size may be actually larger than + * struct grub_xfs_inode so we need to account for that so that we can read + * from disk directly into in-memory structure. + */ +static inline grub_size_t +grub_xfs_fshelp_size(struct grub_xfs_data *data) +{ + return sizeof (struct grub_fshelp_node) - sizeof (struct grub_xfs_inode) + + grub_xfs_inode_size(data); +} + +/* This should return void * but XFS code is error-prone with alignment, so + return char to retain cast-align. + */ +static char * +grub_xfs_inode_data(struct grub_xfs_inode *inode) +{ + if (inode->version <= 2) + return ((char *)inode) + XFS_V2_INODE_SIZE; + return ((char *)inode) + XFS_V3_INODE_SIZE; +} + +static struct grub_xfs_dir_entry * +grub_xfs_inline_de(struct grub_xfs_dir_header *head) +{ + /* + With small inode numbers the header is 4 bytes smaller because of + smaller parent pointer + */ + return (struct grub_xfs_dir_entry *) + (((char *) head) + sizeof(struct grub_xfs_dir_header) - + (head->largeino ? 0 : sizeof(grub_uint32_t))); +} + +static grub_uint8_t * +grub_xfs_inline_de_inopos(struct grub_xfs_data *data, + struct grub_xfs_dir_entry *de) +{ + return ((grub_uint8_t *)(de + 1)) + de->len - 1 + (data->hasftype ? 1 : 0); +} + +static struct grub_xfs_dir_entry * +grub_xfs_inline_next_de(struct grub_xfs_data *data, + struct grub_xfs_dir_header *head, + struct grub_xfs_dir_entry *de) +{ + char *p = (char *)de + sizeof(struct grub_xfs_dir_entry) - 1 + de->len; + + p += head->largeino ? sizeof(grub_uint64_t) : sizeof(grub_uint32_t); + if (data->hasftype) + p++; + + return (struct grub_xfs_dir_entry *)p; +} + +static struct grub_xfs_dirblock_tail * +grub_xfs_dir_tail(struct grub_xfs_data *data, void *dirblock) +{ + int dirblksize = 1 << (data->sblock.log2_bsize + data->sblock.log2_dirblk); + + return (struct grub_xfs_dirblock_tail *) + ((char *)dirblock + dirblksize - sizeof (struct grub_xfs_dirblock_tail)); +} + +static struct grub_xfs_dir2_entry * +grub_xfs_first_de(struct grub_xfs_data *data, void *dirblock) +{ + if (data->hascrc) + return (struct grub_xfs_dir2_entry *)((char *)dirblock + 64); + return (struct grub_xfs_dir2_entry *)((char *)dirblock + 16); +} + +static struct grub_xfs_dir2_entry * +grub_xfs_next_de(struct grub_xfs_data *data, struct grub_xfs_dir2_entry *de) +{ + int size = sizeof (struct grub_xfs_dir2_entry) + de->len + 2 /* Tag */; + + if (data->hasftype) + size++; /* File type */ + return (struct grub_xfs_dir2_entry *)(((char *)de) + ALIGN_UP(size, 8)); +} + +/* This should return void * but XFS code is error-prone with alignment, so + return char to retain cast-align. + */ +static char * +grub_xfs_btree_keys(struct grub_xfs_data *data, + struct grub_xfs_btree_node *leaf) +{ + char *keys = (char *)(leaf + 1); + + if (data->hascrc) + keys += 48; /* skip crc, uuid, ... */ + return keys; +} + +static grub_err_t +grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino, + struct grub_xfs_inode *inode) +{ + grub_uint64_t block = grub_xfs_inode_block (data, ino); + int offset = grub_xfs_inode_offset (data, ino); + + grub_dprintf("xfs", "Reading inode (%"PRIuGRUB_UINT64_T") - %"PRIuGRUB_UINT64_T", %d\n", + ino, block, offset); + /* Read the inode. */ + if (grub_disk_read (data->disk, block, offset, grub_xfs_inode_size(data), + inode)) + return grub_errno; + + if (grub_strncmp ((char *) inode->magic, "IN", 2)) + return grub_error (GRUB_ERR_BAD_FS, "not a correct XFS inode"); + + return 0; +} + +static grub_uint64_t +get_fsb (const void *keys, int idx) +{ + const char *p = (const char *) keys + sizeof(grub_uint64_t) * idx; + return grub_be_to_cpu64 (grub_get_unaligned64 (p)); +} + +static grub_disk_addr_t +grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock) +{ + struct grub_xfs_btree_node *leaf = 0; + int ex, nrec; + struct grub_xfs_extent *exts; + grub_uint64_t ret = 0; + + if (node->inode.format == XFS_INODE_FORMAT_BTREE) + { + struct grub_xfs_btree_root *root; + const char *keys; + int recoffset; + + leaf = grub_malloc (node->data->bsize); + if (leaf == 0) + return 0; + + root = (struct grub_xfs_btree_root *) grub_xfs_inode_data(&node->inode); + nrec = grub_be_to_cpu16 (root->numrecs); + keys = (char *) &root->keys[0]; + if (node->inode.fork_offset) + recoffset = (node->inode.fork_offset - 1) / 2; + else + recoffset = (grub_xfs_inode_size(node->data) + - ((char *) keys - (char *) &node->inode)) + / (2 * sizeof (grub_uint64_t)); + do + { + int i; + + for (i = 0; i < nrec; i++) + { + if (fileblock < get_fsb(keys, i)) + break; + } + + /* Sparse block. */ + if (i == 0) + { + grub_free (leaf); + return 0; + } + + if (grub_disk_read (node->data->disk, + GRUB_XFS_FSB_TO_BLOCK (node->data, get_fsb (keys, i - 1 + recoffset)) << (node->data->sblock.log2_bsize - GRUB_DISK_SECTOR_BITS), + 0, node->data->bsize, leaf)) + return 0; + + if ((!node->data->hascrc && + grub_strncmp ((char *) leaf->magic, "BMAP", 4)) || + (node->data->hascrc && + grub_strncmp ((char *) leaf->magic, "BMA3", 4))) + { + grub_free (leaf); + grub_error (GRUB_ERR_BAD_FS, "not a correct XFS BMAP node"); + return 0; + } + + nrec = grub_be_to_cpu16 (leaf->numrecs); + keys = grub_xfs_btree_keys(node->data, leaf); + recoffset = ((node->data->bsize - ((char *) keys + - (char *) leaf)) + / (2 * sizeof (grub_uint64_t))); + } + while (leaf->level); + exts = (struct grub_xfs_extent *) keys; + } + else if (node->inode.format == XFS_INODE_FORMAT_EXT) + { + nrec = grub_be_to_cpu32 (node->inode.nextents); + exts = (struct grub_xfs_extent *) grub_xfs_inode_data(&node->inode); + } + else + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "XFS does not support inode format %d yet", + node->inode.format); + return 0; + } + + /* Iterate over each extent to figure out which extent has + the block we are looking for. */ + for (ex = 0; ex < nrec; ex++) + { + grub_uint64_t start = GRUB_XFS_EXTENT_BLOCK (exts, ex); + grub_uint64_t offset = GRUB_XFS_EXTENT_OFFSET (exts, ex); + grub_uint64_t size = GRUB_XFS_EXTENT_SIZE (exts, ex); + + /* Sparse block. */ + if (fileblock < offset) + break; + else if (fileblock < offset + size) + { + ret = (fileblock - offset + start); + break; + } + } + + grub_free (leaf); + + return GRUB_XFS_FSB_TO_BLOCK(node->data, ret); +} + + +/* Read LEN bytes from the file described by DATA starting with byte + POS. Return the amount of read bytes in READ. */ +static grub_ssize_t +grub_xfs_read_file (grub_fshelp_node_t node, + grub_disk_read_hook_t read_hook, void *read_hook_data, + grub_off_t pos, grub_size_t len, char *buf, grub_uint32_t header_size) +{ + return grub_fshelp_read_file (node->data->disk, node, + read_hook, read_hook_data, + pos, len, buf, grub_xfs_read_block, + grub_be_to_cpu64 (node->inode.size) + header_size, + node->data->sblock.log2_bsize + - GRUB_DISK_SECTOR_BITS, 0); +} + + +static char * +grub_xfs_read_symlink (grub_fshelp_node_t node) +{ + grub_ssize_t size = grub_be_to_cpu64 (node->inode.size); + + if (size < 0) + { + grub_error (GRUB_ERR_BAD_FS, "invalid symlink"); + return 0; + } + + switch (node->inode.format) + { + case XFS_INODE_FORMAT_INO: + return grub_strndup (grub_xfs_inode_data(&node->inode), size); + + case XFS_INODE_FORMAT_EXT: + { + char *symlink; + grub_ssize_t numread; + int off = 0; + + if (node->data->hascrc) + off = 56; + + symlink = grub_malloc (size + 1); + if (!symlink) + return 0; + + node->inode.size = grub_be_to_cpu64 (size + off); + numread = grub_xfs_read_file (node, 0, 0, off, size, symlink, off); + if (numread != size) + { + grub_free (symlink); + return 0; + } + symlink[size] = '\0'; + return symlink; + } + } + + return 0; +} + + +static enum grub_fshelp_filetype +grub_xfs_mode_to_filetype (grub_uint16_t mode) +{ + if ((grub_be_to_cpu16 (mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_DIRECTORY) + return GRUB_FSHELP_DIR; + else if ((grub_be_to_cpu16 (mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_SYMLINK) + return GRUB_FSHELP_SYMLINK; + else if ((grub_be_to_cpu16 (mode) + & FILETYPE_INO_MASK) == FILETYPE_INO_REG) + return GRUB_FSHELP_REG; + return GRUB_FSHELP_UNKNOWN; +} + + +/* Context for grub_xfs_iterate_dir. */ +struct grub_xfs_iterate_dir_ctx +{ + grub_fshelp_iterate_dir_hook_t hook; + void *hook_data; + struct grub_fshelp_node *diro; +}; + +/* Helper for grub_xfs_iterate_dir. */ +static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename, + struct grub_xfs_iterate_dir_ctx *ctx) +{ + struct grub_fshelp_node *fdiro; + grub_err_t err; + + fdiro = grub_malloc (grub_xfs_fshelp_size(ctx->diro->data) + 1); + if (!fdiro) + { + grub_print_error (); + return 0; + } + + /* The inode should be read, otherwise the filetype can + not be determined. */ + fdiro->ino = ino; + fdiro->inode_read = 1; + fdiro->data = ctx->diro->data; + err = grub_xfs_read_inode (ctx->diro->data, ino, &fdiro->inode); + if (err) + { + grub_print_error (); + return 0; + } + + return ctx->hook (filename, grub_xfs_mode_to_filetype (fdiro->inode.mode), + fdiro, ctx->hook_data); +} + +static int +grub_xfs_iterate_dir (grub_fshelp_node_t dir, + grub_fshelp_iterate_dir_hook_t hook, void *hook_data) +{ + struct grub_fshelp_node *diro = (struct grub_fshelp_node *) dir; + struct grub_xfs_iterate_dir_ctx ctx = { + .hook = hook, + .hook_data = hook_data, + .diro = diro + }; + + switch (diro->inode.format) + { + case XFS_INODE_FORMAT_INO: + { + struct grub_xfs_dir_header *head = (struct grub_xfs_dir_header *) grub_xfs_inode_data(&diro->inode); + struct grub_xfs_dir_entry *de = grub_xfs_inline_de(head); + int smallino = !head->largeino; + int i; + grub_uint64_t parent; + + /* If small inode numbers are used to pack the direntry, the + parent inode number is small too. */ + if (smallino) + parent = grub_be_to_cpu32 (head->parent.i4); + else + parent = grub_be_to_cpu64 (head->parent.i8); + + /* Synthesize the direntries for `.' and `..'. */ + if (iterate_dir_call_hook (diro->ino, ".", &ctx)) + return 1; + + if (iterate_dir_call_hook (parent, "..", &ctx)) + return 1; + + for (i = 0; i < head->count; i++) + { + grub_uint64_t ino; + grub_uint8_t *inopos = grub_xfs_inline_de_inopos(dir->data, de); + grub_uint8_t c; + + /* inopos might be unaligned. */ + if (smallino) + ino = (((grub_uint32_t) inopos[0]) << 24) + | (((grub_uint32_t) inopos[1]) << 16) + | (((grub_uint32_t) inopos[2]) << 8) + | (((grub_uint32_t) inopos[3]) << 0); + else + ino = (((grub_uint64_t) inopos[0]) << 56) + | (((grub_uint64_t) inopos[1]) << 48) + | (((grub_uint64_t) inopos[2]) << 40) + | (((grub_uint64_t) inopos[3]) << 32) + | (((grub_uint64_t) inopos[4]) << 24) + | (((grub_uint64_t) inopos[5]) << 16) + | (((grub_uint64_t) inopos[6]) << 8) + | (((grub_uint64_t) inopos[7]) << 0); + + c = de->name[de->len]; + de->name[de->len] = '\0'; + if (iterate_dir_call_hook (ino, de->name, &ctx)) + { + de->name[de->len] = c; + return 1; + } + de->name[de->len] = c; + + de = grub_xfs_inline_next_de(dir->data, head, de); + } + break; + } + + case XFS_INODE_FORMAT_BTREE: + case XFS_INODE_FORMAT_EXT: + { + grub_ssize_t numread; + char *dirblock; + grub_uint64_t blk; + int dirblk_size, dirblk_log2; + + dirblk_log2 = (dir->data->sblock.log2_bsize + + dir->data->sblock.log2_dirblk); + dirblk_size = 1 << dirblk_log2; + + dirblock = grub_malloc (dirblk_size); + if (! dirblock) + return 0; + + /* Iterate over every block the directory has. */ + for (blk = 0; + blk < (grub_be_to_cpu64 (dir->inode.size) + >> dirblk_log2); + blk++) + { + struct grub_xfs_dir2_entry *direntry = + grub_xfs_first_de(dir->data, dirblock); + int entries; + struct grub_xfs_dirblock_tail *tail = + grub_xfs_dir_tail(dir->data, dirblock); + + numread = grub_xfs_read_file (dir, 0, 0, + blk << dirblk_log2, + dirblk_size, dirblock, 0); + if (numread != dirblk_size) + return 0; + + entries = (grub_be_to_cpu32 (tail->leaf_count) + - grub_be_to_cpu32 (tail->leaf_stale)); + + /* Iterate over all entries within this block. */ + while ((char *)direntry < (char *)tail) + { + grub_uint8_t *freetag; + char *filename; + + freetag = (grub_uint8_t *) direntry; + + if (grub_get_unaligned16 (freetag) == 0XFFFF) + { + grub_uint8_t *skip = (freetag + sizeof (grub_uint16_t)); + + /* This entry is not used, go to the next one. */ + direntry = (struct grub_xfs_dir2_entry *) + (((char *)direntry) + + grub_be_to_cpu16 (grub_get_unaligned16 (skip))); + + continue; + } + + filename = (char *)(direntry + 1); + /* The byte after the filename is for the filetype, padding, or + tag, which is not used by GRUB. So it can be overwritten. */ + filename[direntry->len] = '\0'; + + if (iterate_dir_call_hook (grub_be_to_cpu64(direntry->inode), + filename, &ctx)) + { + grub_free (dirblock); + return 1; + } + + /* Check if last direntry in this block is + reached. */ + entries--; + if (!entries) + break; + + /* Select the next directory entry. */ + direntry = grub_xfs_next_de(dir->data, direntry); + } + } + grub_free (dirblock); + break; + } + + default: + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "XFS does not support inode format %d yet", + diro->inode.format); + } + return 0; +} + + +static struct grub_xfs_data * +grub_xfs_mount (grub_disk_t disk) +{ + struct grub_xfs_data *data = 0; + + data = grub_zalloc (sizeof (struct grub_xfs_data)); + if (!data) + return 0; + + grub_dprintf("xfs", "Reading sb\n"); + /* Read the superblock. */ + if (grub_disk_read (disk, 0, 0, + sizeof (struct grub_xfs_sblock), &data->sblock)) + goto fail; + + if (!grub_xfs_sb_valid(data)) + goto fail; + + data = grub_realloc (data, + sizeof (struct grub_xfs_data) + - sizeof (struct grub_xfs_inode) + + grub_xfs_inode_size(data) + 1); + + if (! data) + goto fail; + + data->diropen.data = data; + data->diropen.ino = grub_be_to_cpu64(data->sblock.rootino); + data->diropen.inode_read = 1; + data->bsize = grub_be_to_cpu32 (data->sblock.bsize); + data->agsize = grub_be_to_cpu32 (data->sblock.agsize); + data->hasftype = grub_xfs_sb_hasftype(data); + data->hascrc = grub_xfs_sb_hascrc(data); + + data->disk = disk; + data->pos = 0; + grub_dprintf("xfs", "Reading root ino %"PRIuGRUB_UINT64_T"\n", + grub_cpu_to_be64(data->sblock.rootino)); + + grub_xfs_read_inode (data, data->diropen.ino, &data->diropen.inode); + + return data; + fail: + + if (grub_errno == GRUB_ERR_OUT_OF_RANGE) + grub_error (GRUB_ERR_BAD_FS, "not an XFS filesystem"); + + grub_free (data); + + return 0; +} + + +/* Context for grub_xfs_dir. */ +struct grub_xfs_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_xfs_dir. */ +static int +grub_xfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype, + grub_fshelp_node_t node, void *data) +{ + struct grub_xfs_dir_ctx *ctx = data; + struct grub_dirhook_info info; + + grub_memset (&info, 0, sizeof (info)); + if (node->inode_read) + { + info.mtimeset = 1; + info.mtime = grub_be_to_cpu32 (node->inode.mtime.sec); + } + info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); + grub_free (node); + return ctx->hook (filename, &info, ctx->hook_data); +} + +static grub_err_t +grub_xfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_xfs_dir_ctx ctx = { hook, hook_data }; + struct grub_xfs_data *data = 0; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_xfs_mount (device->disk); + if (!data) + goto mount_fail; + + grub_fshelp_find_file (path, &data->diropen, &fdiro, grub_xfs_iterate_dir, + grub_xfs_read_symlink, GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + grub_xfs_iterate_dir (fdiro, grub_xfs_dir_iter, &ctx); + + fail: + if (fdiro != &data->diropen) + grub_free (fdiro); + grub_free (data); + + mount_fail: + + grub_dl_unref (my_mod); + + return grub_errno; +} + + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_xfs_open (struct grub_file *file, const char *name) +{ + struct grub_xfs_data *data; + struct grub_fshelp_node *fdiro = 0; + + grub_dl_ref (my_mod); + + data = grub_xfs_mount (file->device->disk); + if (!data) + goto mount_fail; + + grub_fshelp_find_file (name, &data->diropen, &fdiro, grub_xfs_iterate_dir, + grub_xfs_read_symlink, GRUB_FSHELP_REG); + if (grub_errno) + goto fail; + + if (!fdiro->inode_read) + { + grub_xfs_read_inode (data, fdiro->ino, &fdiro->inode); + if (grub_errno) + goto fail; + } + + if (fdiro != &data->diropen) + { + grub_memcpy (&data->diropen, fdiro, grub_xfs_fshelp_size(data)); + grub_free (fdiro); + } + + file->size = grub_be_to_cpu64 (data->diropen.inode.size); + file->data = data; + file->offset = 0; + + return 0; + + fail: + if (fdiro != &data->diropen) + grub_free (fdiro); + grub_free (data); + + mount_fail: + grub_dl_unref (my_mod); + + return grub_errno; +} + + +static grub_ssize_t +grub_xfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_xfs_data *data = + (struct grub_xfs_data *) file->data; + + return grub_xfs_read_file (&data->diropen, + file->read_hook, file->read_hook_data, + file->offset, len, buf, 0); +} + + +static grub_err_t +grub_xfs_close (grub_file_t file) +{ + grub_free (file->data); + + grub_dl_unref (my_mod); + + return GRUB_ERR_NONE; +} + + +static grub_err_t +grub_xfs_label (grub_device_t device, char **label) +{ + struct grub_xfs_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_xfs_mount (disk); + if (data) + *label = grub_strndup ((char *) (data->sblock.label), 12); + else + *label = 0; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + +static grub_err_t +grub_xfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_xfs_data *data; + grub_disk_t disk = device->disk; + + grub_dl_ref (my_mod); + + data = grub_xfs_mount (disk); + if (data) + { + *uuid = grub_xasprintf ("%04x%04x-%04x-%04x-%04x-%04x%04x%04x", + grub_be_to_cpu16 (data->sblock.uuid[0]), + grub_be_to_cpu16 (data->sblock.uuid[1]), + grub_be_to_cpu16 (data->sblock.uuid[2]), + grub_be_to_cpu16 (data->sblock.uuid[3]), + grub_be_to_cpu16 (data->sblock.uuid[4]), + grub_be_to_cpu16 (data->sblock.uuid[5]), + grub_be_to_cpu16 (data->sblock.uuid[6]), + grub_be_to_cpu16 (data->sblock.uuid[7])); + } + else + *uuid = NULL; + + grub_dl_unref (my_mod); + + grub_free (data); + + return grub_errno; +} + + + +static struct grub_fs grub_xfs_fs = + { + .name = "xfs", + .dir = grub_xfs_dir, + .open = grub_xfs_open, + .read = grub_xfs_read, + .close = grub_xfs_close, + .label = grub_xfs_label, + .uuid = grub_xfs_uuid, +#ifdef GRUB_UTIL + .reserved_first_sector = 0, + .blocklist_install = 1, +#endif + .next = 0 + }; + +GRUB_MOD_INIT(xfs) +{ + grub_fs_register (&grub_xfs_fs); + my_mod = mod; +} + +GRUB_MOD_FINI(xfs) +{ + grub_fs_unregister (&grub_xfs_fs); +} diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c new file mode 100644 index 000000000..6e1fff9e9 --- /dev/null +++ b/grub-core/fs/zfs/zfs.c @@ -0,0 +1,4378 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2009,2010,2011 Free Software Foundation, Inc. + * Copyright 2010 Sun Microsystems, Inc. + * Copyright (c) 2012 by Delphix. All rights reserved. + * + * GRUB is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +/* + * The zfs plug-in routines for GRUB are: + * + * zfs_mount() - locates a valid uberblock of the root pool and reads + * in its MOS at the memory address MOS. + * + * zfs_open() - locates a plain file object by following the MOS + * and places its dnode at the memory address DNODE. + * + * zfs_read() - read in the data blocks pointed by the DNODE. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define ZPOOL_PROP_BOOTFS "bootfs" + +/* + * For nvlist manipulation. (from nvpair.h) + */ +#define NV_ENCODE_NATIVE 0 +#define NV_ENCODE_XDR 1 +#define NV_BIG_ENDIAN 0 +#define NV_LITTLE_ENDIAN 1 +#define DATA_TYPE_UINT64 8 +#define DATA_TYPE_STRING 9 +#define DATA_TYPE_NVLIST 19 +#define DATA_TYPE_NVLIST_ARRAY 20 + +#ifndef GRUB_UTIL +static grub_dl_t my_mod; +#endif + +#define P2PHASE(x, align) ((x) & ((align) - 1)) + +static inline grub_disk_addr_t +DVA_OFFSET_TO_PHYS_SECTOR (grub_disk_addr_t offset) +{ + return ((offset + VDEV_LABEL_START_SIZE) >> SPA_MINBLOCKSHIFT); +} + +/* + * FAT ZAP data structures + */ +#define ZFS_CRC64_POLY 0xC96C5795D7870F42ULL /* ECMA-182, reflected form */ +static inline grub_uint64_t +ZAP_HASH_IDX (grub_uint64_t hash, grub_uint64_t n) +{ + return (((n) == 0) ? 0 : ((hash) >> (64 - (n)))); +} + +#define CHAIN_END 0xffff /* end of the chunk chain */ + +/* + * The amount of space within the chunk available for the array is: + * chunk size - space for type (1) - space for next pointer (2) + */ +#define ZAP_LEAF_ARRAY_BYTES (ZAP_LEAF_CHUNKSIZE - 3) + +static inline int +ZAP_LEAF_HASH_SHIFT (int bs) +{ + return bs - 5; +} + +static inline int +ZAP_LEAF_HASH_NUMENTRIES (int bs) +{ + return 1 << ZAP_LEAF_HASH_SHIFT(bs); +} + +static inline grub_size_t +LEAF_HASH (int bs, grub_uint64_t h, zap_leaf_phys_t *l) +{ + return ((ZAP_LEAF_HASH_NUMENTRIES (bs)-1) + & ((h) >> (64 - ZAP_LEAF_HASH_SHIFT (bs) - l->l_hdr.lh_prefix_len))); +} + +/* + * The amount of space available for chunks is: + * block size shift - hash entry size (2) * number of hash + * entries - header space (2*chunksize) + */ +static inline int +ZAP_LEAF_NUMCHUNKS (int bs) +{ + return (((1U << bs) - 2 * ZAP_LEAF_HASH_NUMENTRIES (bs)) / + ZAP_LEAF_CHUNKSIZE - 2); +} + +/* + * The chunks start immediately after the hash table. The end of the + * hash table is at l_hash + HASH_NUMENTRIES, which we simply cast to a + * chunk_t. + */ +static inline zap_leaf_chunk_t * +ZAP_LEAF_CHUNK (zap_leaf_phys_t *l, int bs, int idx) +{ + return &((zap_leaf_chunk_t *) (l->l_entries + + (ZAP_LEAF_HASH_NUMENTRIES(bs) * 2) + / sizeof (grub_properly_aligned_t)))[idx]; +} + +static inline struct zap_leaf_entry * +ZAP_LEAF_ENTRY(zap_leaf_phys_t *l, int bs, int idx) +{ + return &ZAP_LEAF_CHUNK(l, bs, idx)->l_entry; +} + + +/* + * Decompression Entry - lzjb & lz4 + */ + +extern grub_err_t lzjb_decompress (void *, void *, grub_size_t, grub_size_t); + +extern grub_err_t lz4_decompress (void *, void *, grub_size_t, grub_size_t); + +typedef grub_err_t zfs_decomp_func_t (void *s_start, void *d_start, + grub_size_t s_len, grub_size_t d_len); +typedef struct decomp_entry +{ + const char *name; + zfs_decomp_func_t *decomp_func; +} decomp_entry_t; + +/* + * Signature for checksum functions. + */ +typedef void zio_checksum_t(const void *data, grub_uint64_t size, + grub_zfs_endian_t endian, zio_cksum_t *zcp); + +/* + * Information about each checksum function. + */ +typedef struct zio_checksum_info { + zio_checksum_t *ci_func; /* checksum function for each byteorder */ + int ci_correctable; /* number of correctable bits */ + int ci_eck; /* uses zio embedded checksum? */ + const char *ci_name; /* descriptive name */ +} zio_checksum_info_t; + +typedef struct dnode_end +{ + dnode_phys_t dn; + grub_zfs_endian_t endian; +} dnode_end_t; + +struct grub_zfs_device_desc +{ + enum { DEVICE_LEAF, DEVICE_MIRROR, DEVICE_RAIDZ } type; + grub_uint64_t id; + grub_uint64_t guid; + unsigned ashift; + unsigned max_children_ashift; + + /* Valid only for non-leafs. */ + unsigned n_children; + struct grub_zfs_device_desc *children; + + /* Valid only for RAIDZ. */ + unsigned nparity; + + /* Valid only for leaf devices. */ + grub_device_t dev; + grub_disk_addr_t vdev_phys_sector; + uberblock_t current_uberblock; + int original; +}; + +struct subvolume +{ + dnode_end_t mdn; + grub_uint64_t obj; + grub_uint64_t case_insensitive; + grub_size_t nkeys; + struct + { + grub_crypto_cipher_handle_t cipher; + grub_uint64_t txg; + grub_uint64_t algo; + } *keyring; +}; + +struct grub_zfs_data +{ + /* cache for a file block of the currently zfs_open()-ed file */ + char *file_buf; + grub_uint64_t file_start; + grub_uint64_t file_end; + + /* cache for a dnode block */ + dnode_phys_t *dnode_buf; + dnode_phys_t *dnode_mdn; + grub_uint64_t dnode_start; + grub_uint64_t dnode_end; + grub_zfs_endian_t dnode_endian; + + dnode_end_t mos; + dnode_end_t dnode; + struct subvolume subvol; + + struct grub_zfs_device_desc *devices_attached; + unsigned n_devices_attached; + unsigned n_devices_allocated; + struct grub_zfs_device_desc *device_original; + + uberblock_t current_uberblock; + + grub_uint64_t guid; +}; + +/* Context for grub_zfs_dir. */ +struct grub_zfs_dir_ctx +{ + grub_fs_dir_hook_t hook; + void *hook_data; + struct grub_zfs_data *data; +}; + +grub_err_t (*grub_zfs_decrypt) (grub_crypto_cipher_handle_t cipher, + grub_uint64_t algo, + void *nonce, + char *buf, grub_size_t size, + const grub_uint32_t *expected_mac, + grub_zfs_endian_t endian) = NULL; +grub_crypto_cipher_handle_t (*grub_zfs_load_key) (const struct grub_zfs_key *key, + grub_size_t keysize, + grub_uint64_t salt, + grub_uint64_t algo) = NULL; +/* + * List of pool features that the grub implementation of ZFS supports for + * read. Note that features that are only required for write do not need + * to be listed here since grub opens pools in read-only mode. + */ +#define MAX_SUPPORTED_FEATURE_STRLEN 50 +static const char *spa_feature_names[] = { + "org.illumos:lz4_compress", + "com.delphix:hole_birth", + "com.delphix:embedded_data", + "com.delphix:extensible_dataset", + "org.open-zfs:large_blocks", + NULL +}; + +static int +check_feature(const char *name, grub_uint64_t val, struct grub_zfs_dir_ctx *ctx); +static grub_err_t +check_mos_features(dnode_phys_t *mosmdn_phys,grub_zfs_endian_t endian,struct grub_zfs_data* data ); + +static grub_err_t +zlib_decompress (void *s, void *d, + grub_size_t slen, grub_size_t dlen) +{ + if (grub_zlib_decompress (s, slen, 0, d, dlen) == (grub_ssize_t) dlen) + return GRUB_ERR_NONE; + + if (!grub_errno) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "premature end of compressed"); + return grub_errno; +} + +static grub_err_t +zle_decompress (void *s, void *d, + grub_size_t slen, grub_size_t dlen) +{ + grub_uint8_t *iptr, *optr; + grub_size_t clen; + for (iptr = s, optr = d; iptr < (grub_uint8_t *) s + slen + && optr < (grub_uint8_t *) d + dlen;) + { + if (*iptr & 0x80) + clen = ((*iptr) & 0x7f) + 0x41; + else + clen = ((*iptr) & 0x3f) + 1; + if ((grub_ssize_t) clen > (grub_uint8_t *) d + dlen - optr) + clen = (grub_uint8_t *) d + dlen - optr; + if (*iptr & 0x40 || *iptr & 0x80) + { + grub_memset (optr, 0, clen); + iptr++; + optr += clen; + continue; + } + if ((grub_ssize_t) clen > (grub_uint8_t *) s + slen - iptr - 1) + clen = (grub_uint8_t *) s + slen - iptr - 1; + grub_memcpy (optr, iptr + 1, clen); + optr += clen; + iptr += clen + 1; + } + if (optr < (grub_uint8_t *) d + dlen) + grub_memset (optr, 0, (grub_uint8_t *) d + dlen - optr); + return GRUB_ERR_NONE; +} + +static decomp_entry_t decomp_table[ZIO_COMPRESS_FUNCTIONS] = { + {"inherit", NULL}, /* ZIO_COMPRESS_INHERIT */ + {"on", lzjb_decompress}, /* ZIO_COMPRESS_ON */ + {"off", NULL}, /* ZIO_COMPRESS_OFF */ + {"lzjb", lzjb_decompress}, /* ZIO_COMPRESS_LZJB */ + {"empty", NULL}, /* ZIO_COMPRESS_EMPTY */ + {"gzip-1", zlib_decompress}, /* ZIO_COMPRESS_GZIP1 */ + {"gzip-2", zlib_decompress}, /* ZIO_COMPRESS_GZIP2 */ + {"gzip-3", zlib_decompress}, /* ZIO_COMPRESS_GZIP3 */ + {"gzip-4", zlib_decompress}, /* ZIO_COMPRESS_GZIP4 */ + {"gzip-5", zlib_decompress}, /* ZIO_COMPRESS_GZIP5 */ + {"gzip-6", zlib_decompress}, /* ZIO_COMPRESS_GZIP6 */ + {"gzip-7", zlib_decompress}, /* ZIO_COMPRESS_GZIP7 */ + {"gzip-8", zlib_decompress}, /* ZIO_COMPRESS_GZIP8 */ + {"gzip-9", zlib_decompress}, /* ZIO_COMPRESS_GZIP9 */ + {"zle", zle_decompress}, /* ZIO_COMPRESS_ZLE */ + {"lz4", lz4_decompress}, /* ZIO_COMPRESS_LZ4 */ +}; + +static grub_err_t zio_read_data (blkptr_t * bp, grub_zfs_endian_t endian, + void *buf, struct grub_zfs_data *data); + +/* + * Our own version of log2(). Same thing as highbit()-1. + */ +static int +zfs_log2 (grub_uint64_t num) +{ + int i = 0; + + while (num > 1) + { + i++; + num = num >> 1; + } + + return i; +} + +/* Checksum Functions */ +static void +zio_checksum_off (const void *buf __attribute__ ((unused)), + grub_uint64_t size __attribute__ ((unused)), + grub_zfs_endian_t endian __attribute__ ((unused)), + zio_cksum_t * zcp) +{ + ZIO_SET_CHECKSUM (zcp, 0, 0, 0, 0); +} + +/* Checksum Table and Values */ +static zio_checksum_info_t zio_checksum_table[ZIO_CHECKSUM_FUNCTIONS] = { + {NULL, 0, 0, "inherit"}, + {NULL, 0, 0, "on"}, + {zio_checksum_off, 0, 0, "off"}, + {zio_checksum_SHA256, 1, 1, "label"}, + {zio_checksum_SHA256, 1, 1, "gang_header"}, + {NULL, 0, 0, "zilog"}, + {fletcher_2, 0, 0, "fletcher2"}, + {fletcher_4, 1, 0, "fletcher4"}, + {zio_checksum_SHA256, 1, 0, "SHA256"}, + {NULL, 0, 0, "zilog2"}, + {zio_checksum_SHA256, 1, 0, "SHA256+MAC"}, +}; + +/* + * zio_checksum_verify: Provides support for checksum verification. + * + * Fletcher2, Fletcher4, and SHA256 are supported. + * + */ +static grub_err_t +zio_checksum_verify (zio_cksum_t zc, grub_uint32_t checksum, + grub_zfs_endian_t endian, + char *buf, grub_size_t size) +{ + zio_eck_t *zec = (zio_eck_t *) (buf + size) - 1; + zio_checksum_info_t *ci = &zio_checksum_table[checksum]; + zio_cksum_t actual_cksum, expected_cksum; + + if (checksum >= ZIO_CHECKSUM_FUNCTIONS || ci->ci_func == NULL) + { + grub_dprintf ("zfs", "unknown checksum function %d\n", checksum); + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unknown checksum function %d", checksum); + } + + if (ci->ci_eck) + { + expected_cksum = zec->zec_cksum; + zec->zec_cksum = zc; + ci->ci_func (buf, size, endian, &actual_cksum); + zec->zec_cksum = expected_cksum; + zc = expected_cksum; + } + else + ci->ci_func (buf, size, endian, &actual_cksum); + + if (grub_memcmp (&actual_cksum, &zc, + checksum != ZIO_CHECKSUM_SHA256_MAC ? 32 : 20) != 0) + { + grub_dprintf ("zfs", "checksum %s verification failed\n", ci->ci_name); + grub_dprintf ("zfs", "actual checksum %016llx %016llx %016llx %016llx\n", + (unsigned long long) actual_cksum.zc_word[0], + (unsigned long long) actual_cksum.zc_word[1], + (unsigned long long) actual_cksum.zc_word[2], + (unsigned long long) actual_cksum.zc_word[3]); + grub_dprintf ("zfs", "expected checksum %016llx %016llx %016llx %016llx\n", + (unsigned long long) zc.zc_word[0], + (unsigned long long) zc.zc_word[1], + (unsigned long long) zc.zc_word[2], + (unsigned long long) zc.zc_word[3]); + return grub_error (GRUB_ERR_BAD_FS, N_("checksum verification failed")); + } + + return GRUB_ERR_NONE; +} + +/* + * vdev_uberblock_compare takes two uberblock structures and returns an integer + * indicating the more recent of the two. + * Return Value = 1 if ub2 is more recent + * Return Value = -1 if ub1 is more recent + * The most recent uberblock is determined using its transaction number and + * timestamp. The uberblock with the highest transaction number is + * considered "newer". If the transaction numbers of the two blocks match, the + * timestamps are compared to determine the "newer" of the two. + */ +static int +vdev_uberblock_compare (uberblock_t * ub1, uberblock_t * ub2) +{ + grub_zfs_endian_t ub1_endian, ub2_endian; + if (grub_zfs_to_cpu64 (ub1->ub_magic, GRUB_ZFS_LITTLE_ENDIAN) + == UBERBLOCK_MAGIC) + ub1_endian = GRUB_ZFS_LITTLE_ENDIAN; + else + ub1_endian = GRUB_ZFS_BIG_ENDIAN; + if (grub_zfs_to_cpu64 (ub2->ub_magic, GRUB_ZFS_LITTLE_ENDIAN) + == UBERBLOCK_MAGIC) + ub2_endian = GRUB_ZFS_LITTLE_ENDIAN; + else + ub2_endian = GRUB_ZFS_BIG_ENDIAN; + + if (grub_zfs_to_cpu64 (ub1->ub_txg, ub1_endian) + < grub_zfs_to_cpu64 (ub2->ub_txg, ub2_endian)) + return -1; + if (grub_zfs_to_cpu64 (ub1->ub_txg, ub1_endian) + > grub_zfs_to_cpu64 (ub2->ub_txg, ub2_endian)) + return 1; + + if (grub_zfs_to_cpu64 (ub1->ub_timestamp, ub1_endian) + < grub_zfs_to_cpu64 (ub2->ub_timestamp, ub2_endian)) + return -1; + if (grub_zfs_to_cpu64 (ub1->ub_timestamp, ub1_endian) + > grub_zfs_to_cpu64 (ub2->ub_timestamp, ub2_endian)) + return 1; + + return 0; +} + +/* + * Three pieces of information are needed to verify an uberblock: the magic + * number, the version number, and the checksum. + * + * Currently Implemented: version number, magic number, checksum + * + */ +static grub_err_t +uberblock_verify (uberblock_phys_t * ub, grub_uint64_t offset, + grub_size_t s) +{ + uberblock_t *uber = &ub->ubp_uberblock; + grub_err_t err; + grub_zfs_endian_t endian = GRUB_ZFS_UNKNOWN_ENDIAN; + zio_cksum_t zc; + + if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_LITTLE_ENDIAN) + == UBERBLOCK_MAGIC + && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_LITTLE_ENDIAN))) + endian = GRUB_ZFS_LITTLE_ENDIAN; + + if (grub_zfs_to_cpu64 (uber->ub_magic, GRUB_ZFS_BIG_ENDIAN) == UBERBLOCK_MAGIC + && SPA_VERSION_IS_SUPPORTED(grub_zfs_to_cpu64 (uber->ub_version, GRUB_ZFS_BIG_ENDIAN))) + endian = GRUB_ZFS_BIG_ENDIAN; + + if (endian == GRUB_ZFS_UNKNOWN_ENDIAN) + return grub_error (GRUB_ERR_BAD_FS, "invalid uberblock magic"); + + grub_memset (&zc, 0, sizeof (zc)); + + zc.zc_word[0] = grub_cpu_to_zfs64 (offset, endian); + err = zio_checksum_verify (zc, ZIO_CHECKSUM_LABEL, endian, + (char *) ub, s); + + return err; +} + +/* + * Find the best uberblock. + * Return: + * Success - Pointer to the best uberblock. + * Failure - NULL + */ +static uberblock_phys_t * +find_bestub (uberblock_phys_t * ub_array, + const struct grub_zfs_device_desc *desc) +{ + uberblock_phys_t *ubbest = NULL, *ubptr; + int i; + grub_disk_addr_t offset; + grub_err_t err = GRUB_ERR_NONE; + int ub_shift; + + ub_shift = desc->ashift; + if (ub_shift < VDEV_UBERBLOCK_SHIFT) + ub_shift = VDEV_UBERBLOCK_SHIFT; + + for (i = 0; i < (VDEV_UBERBLOCK_RING >> ub_shift); i++) + { + offset = (desc->vdev_phys_sector << SPA_MINBLOCKSHIFT) + VDEV_PHYS_SIZE + + (i << ub_shift); + + ubptr = (uberblock_phys_t *) ((grub_properly_aligned_t *) ub_array + + ((i << ub_shift) + / sizeof (grub_properly_aligned_t))); + err = uberblock_verify (ubptr, offset, 1 << ub_shift); + if (err) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + if (ubbest == NULL + || vdev_uberblock_compare (&(ubptr->ubp_uberblock), + &(ubbest->ubp_uberblock)) > 0) + ubbest = ubptr; + } + if (!ubbest) + grub_errno = err; + + return ubbest; +} + +static inline grub_size_t +get_psize (blkptr_t * bp, grub_zfs_endian_t endian) +{ + return ((((grub_zfs_to_cpu64 ((bp)->blk_prop, endian) >> 16) & 0xffff) + 1) + << SPA_MINBLOCKSHIFT); +} + +static grub_uint64_t +dva_get_offset (const dva_t *dva, grub_zfs_endian_t endian) +{ + grub_dprintf ("zfs", "dva=%llx, %llx\n", + (unsigned long long) dva->dva_word[0], + (unsigned long long) dva->dva_word[1]); + return grub_zfs_to_cpu64 ((dva)->dva_word[1], + endian) << SPA_MINBLOCKSHIFT; +} + +static grub_err_t +zfs_fetch_nvlist (struct grub_zfs_device_desc *diskdesc, char **nvlist) +{ + grub_err_t err; + + *nvlist = 0; + + if (!diskdesc->dev) + return grub_error (GRUB_ERR_BUG, "member drive unknown"); + + *nvlist = grub_malloc (VDEV_PHYS_SIZE); + + /* Read in the vdev name-value pair list (112K). */ + err = grub_disk_read (diskdesc->dev->disk, diskdesc->vdev_phys_sector, 0, + VDEV_PHYS_SIZE, *nvlist); + if (err) + { + grub_free (*nvlist); + *nvlist = 0; + return err; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +fill_vdev_info_real (struct grub_zfs_data *data, + const char *nvlist, + struct grub_zfs_device_desc *fill, + struct grub_zfs_device_desc *insert, + int *inserted, + unsigned ashift) +{ + char *type; + + type = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_TYPE); + + if (!type) + return grub_errno; + + if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "id", &(fill->id))) + { + grub_free (type); + return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev id"); + } + + if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "guid", &(fill->guid))) + { + grub_free (type); + return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev id"); + } + + { + grub_uint64_t par; + if (grub_zfs_nvlist_lookup_uint64 (nvlist, "ashift", &par)) + fill->ashift = par; + else if (ashift != 0xffffffff) + fill->ashift = ashift; + else + { + grub_free (type); + return grub_error (GRUB_ERR_BAD_FS, "couldn't find ashift"); + } + } + + fill->max_children_ashift = 0; + + if (grub_strcmp (type, VDEV_TYPE_DISK) == 0 + || grub_strcmp (type, VDEV_TYPE_FILE) == 0) + { + fill->type = DEVICE_LEAF; + + if (!fill->dev && fill->guid == insert->guid) + { + fill->dev = insert->dev; + fill->vdev_phys_sector = insert->vdev_phys_sector; + fill->current_uberblock = insert->current_uberblock; + fill->original = insert->original; + if (!data->device_original) + data->device_original = fill; + insert->ashift = fill->ashift; + *inserted = 1; + } + + grub_free (type); + + return GRUB_ERR_NONE; + } + + if (grub_strcmp (type, VDEV_TYPE_MIRROR) == 0 + || grub_strcmp (type, VDEV_TYPE_RAIDZ) == 0) + { + int nelm, i; + + if (grub_strcmp (type, VDEV_TYPE_MIRROR) == 0) + fill->type = DEVICE_MIRROR; + else + { + grub_uint64_t par; + fill->type = DEVICE_RAIDZ; + if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "nparity", &par)) + { + grub_free (type); + return grub_error (GRUB_ERR_BAD_FS, "couldn't find raidz parity"); + } + fill->nparity = par; + } + + nelm = grub_zfs_nvlist_lookup_nvlist_array_get_nelm (nvlist, + ZPOOL_CONFIG_CHILDREN); + + if (nelm <= 0) + { + grub_free (type); + return grub_error (GRUB_ERR_BAD_FS, "incorrect mirror VDEV"); + } + + if (!fill->children) + { + fill->n_children = nelm; + + fill->children = grub_zalloc (fill->n_children + * sizeof (fill->children[0])); + } + + for (i = 0; i < nelm; i++) + { + char *child; + grub_err_t err; + + child = grub_zfs_nvlist_lookup_nvlist_array + (nvlist, ZPOOL_CONFIG_CHILDREN, i); + + err = fill_vdev_info_real (data, child, &fill->children[i], insert, + inserted, fill->ashift); + + grub_free (child); + + if (err) + { + grub_free (type); + return err; + } + if (fill->children[i].ashift > fill->max_children_ashift) + fill->max_children_ashift = fill->children[i].ashift; + } + grub_free (type); + return GRUB_ERR_NONE; + } + + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "vdev %s isn't supported", type); + grub_free (type); + return grub_errno; +} + +static grub_err_t +fill_vdev_info (struct grub_zfs_data *data, + char *nvlist, struct grub_zfs_device_desc *diskdesc, + int *inserted) +{ + grub_uint64_t id; + unsigned i; + + *inserted = 0; + + if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "id", &id)) + return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev id"); + + for (i = 0; i < data->n_devices_attached; i++) + if (data->devices_attached[i].id == id) + return fill_vdev_info_real (data, nvlist, &data->devices_attached[i], + diskdesc, inserted, 0xffffffff); + + data->n_devices_attached++; + if (data->n_devices_attached > data->n_devices_allocated) + { + void *tmp; + data->n_devices_allocated = 2 * data->n_devices_attached + 1; + data->devices_attached + = grub_realloc (tmp = data->devices_attached, + data->n_devices_allocated + * sizeof (data->devices_attached[0])); + if (!data->devices_attached) + { + data->devices_attached = tmp; + return grub_errno; + } + } + + grub_memset (&data->devices_attached[data->n_devices_attached - 1], + 0, sizeof (data->devices_attached[data->n_devices_attached - 1])); + + return fill_vdev_info_real (data, nvlist, + &data->devices_attached[data->n_devices_attached - 1], + diskdesc, inserted, 0xffffffff); +} + +/* + * For a given XDR packed nvlist, verify the first 4 bytes and move on. + * + * An XDR packed nvlist is encoded as (comments from nvs_xdr_create) : + * + * encoding method/host endian (4 bytes) + * nvl_version (4 bytes) + * nvl_nvflag (4 bytes) + * encoded nvpairs: + * encoded size of the nvpair (4 bytes) + * decoded size of the nvpair (4 bytes) + * name string size (4 bytes) + * name string data (sizeof(NV_ALIGN4(string)) + * data type (4 bytes) + * # of elements in the nvpair (4 bytes) + * data + * 2 zero's for the last nvpair + * (end of the entire list) (8 bytes) + * + */ + +/* + * The nvlist_next_nvpair() function returns a handle to the next nvpair in the + * list following nvpair. If nvpair is NULL, the first pair is returned. If + * nvpair is the last pair in the nvlist, NULL is returned. + */ +static const char * +nvlist_next_nvpair (const char *nvl, const char *nvpair) +{ + const char *nvp; + int encode_size; + int name_len; + if (nvl == NULL) + return NULL; + + if (nvpair == NULL) + { + /* skip over header, nvl_version and nvl_nvflag */ + nvpair = nvl + 4 * 3; + } + else + { + /* skip to the next nvpair */ + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); + nvpair += encode_size; + /*If encode_size equals 0 nvlist_next_nvpair would return + * the same pair received in input, leading to an infinite loop. + * If encode_size is less than 0, this will move the pointer + * backwards, *possibly* examinining two times the same nvpair + * and potentially getting into an infinite loop. */ + if(encode_size <= 0) + { + grub_dprintf ("zfs", "nvpair with size <= 0\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } + } + /* 8 bytes of 0 marks the end of the list */ + if (grub_get_unaligned64 (nvpair) == 0) + return NULL; + /*consistency checks*/ + if (nvpair + 4 * 3 >= nvl + VDEV_PHYS_SIZE) + { + grub_dprintf ("zfs", "nvlist overflow\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvpair)); + + nvp = nvpair + 4*2; + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; + + nvp = nvp + ((name_len + 3) & ~3); // align + if (nvp + 4 >= nvl + VDEV_PHYS_SIZE + || encode_size < 0 + || nvp + 4 + encode_size > nvl + VDEV_PHYS_SIZE) + { + grub_dprintf ("zfs", "nvlist overflow\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return NULL; + } + /* end consistency checks */ + + return nvpair; +} + +/* + * This function returns 0 on success and 1 on failure. On success, a string + * containing the name of nvpair is saved in buf. + */ +static int +nvpair_name (const char *nvp, char **buf, grub_size_t *buflen) +{ + /* skip over encode/decode size */ + nvp += 4 * 2; + + *buf = (char *) (nvp + 4); + *buflen = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + + return 0; +} + +/* + * This function retrieves the value of the nvpair in the form of enumerated + * type data_type_t. + */ +static int +nvpair_type (const char *nvp) +{ + int name_len, type; + + /* skip over encode/decode size */ + nvp += 4 * 2; + + /* skip over name_len */ + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; + + /* skip over name */ + nvp = nvp + ((name_len + 3) & ~3); /* align */ + + type = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + + return type; +} + +static int +nvpair_value (const char *nvp,char **val, + grub_size_t *size_out, grub_size_t *nelm_out) +{ + int name_len,nelm,encode_size; + + /* skip over encode/decode size */ + encode_size = grub_be_to_cpu32 (grub_get_unaligned32(nvp)); + nvp += 8; + + /* skip over name_len */ + name_len = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp += 4; + + /* skip over name */ + nvp = nvp + ((name_len + 3) & ~3); /* align */ + + /* skip over type */ + nvp += 4; + nelm = grub_be_to_cpu32 (grub_get_unaligned32 (nvp)); + nvp +=4; + if (nelm < 1) + { + grub_error (GRUB_ERR_BAD_FS, "empty nvpair"); + return 0; + } + *val = (char *) nvp; + *size_out = encode_size; + if (nelm_out) + *nelm_out = nelm; + + return 1; +} + +/* + * Check the disk label information and retrieve needed vdev name-value pairs. + * + */ +static grub_err_t +check_pool_label (struct grub_zfs_data *data, + struct grub_zfs_device_desc *diskdesc, + int *inserted, int original) +{ + grub_uint64_t pool_state, txg = 0; + char *nvlist,*features; +#if 0 + char *nv; +#endif + grub_uint64_t poolguid; + grub_uint64_t version; + int found; + grub_err_t err; + grub_zfs_endian_t endian; + vdev_phys_t *phys; + zio_cksum_t emptycksum; + + *inserted = 0; + + err = zfs_fetch_nvlist (diskdesc, &nvlist); + if (err) + return err; + + phys = (vdev_phys_t*) nvlist; + if (grub_zfs_to_cpu64 (phys->vp_zbt.zec_magic, + GRUB_ZFS_LITTLE_ENDIAN) + == ZEC_MAGIC) + endian = GRUB_ZFS_LITTLE_ENDIAN; + else if (grub_zfs_to_cpu64 (phys->vp_zbt.zec_magic, + GRUB_ZFS_BIG_ENDIAN) + == ZEC_MAGIC) + endian = GRUB_ZFS_BIG_ENDIAN; + else + { + grub_free (nvlist); + return grub_error (GRUB_ERR_BAD_FS, + "bad vdev_phys_t.vp_zbt.zec_magic number"); + } + /* Now check the integrity of the vdev_phys_t structure though checksum. */ + ZIO_SET_CHECKSUM(&emptycksum, diskdesc->vdev_phys_sector << 9, 0, 0, 0); + err = zio_checksum_verify (emptycksum, ZIO_CHECKSUM_LABEL, endian, + nvlist, VDEV_PHYS_SIZE); + if (err) + return err; + + grub_dprintf ("zfs", "check 2 passed\n"); + + found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_STATE, + &pool_state); + if (! found) + { + grub_free (nvlist); + if (! grub_errno) + grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_STATE " not found"); + return grub_errno; + } + grub_dprintf ("zfs", "check 3 passed\n"); + + if (pool_state == POOL_STATE_DESTROYED) + { + grub_free (nvlist); + return grub_error (GRUB_ERR_BAD_FS, "zpool is marked as destroyed"); + } + grub_dprintf ("zfs", "check 4 passed\n"); + + found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_TXG, &txg); + if (!found) + { + grub_free (nvlist); + if (! grub_errno) + grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_TXG " not found"); + return grub_errno; + } + grub_dprintf ("zfs", "check 6 passed\n"); + + /* not an active device */ + if (txg == 0) + { + grub_free (nvlist); + return grub_error (GRUB_ERR_BAD_FS, "zpool isn't active"); + } + grub_dprintf ("zfs", "check 7 passed\n"); + + found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_VERSION, + &version); + if (! found) + { + grub_free (nvlist); + if (! grub_errno) + grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_VERSION " not found"); + return grub_errno; + } + grub_dprintf ("zfs", "check 8 passed\n"); + + if (!SPA_VERSION_IS_SUPPORTED(version)) + { + grub_free (nvlist); + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "too new version %llu > %llu", + (unsigned long long) version, + (unsigned long long) SPA_VERSION_BEFORE_FEATURES); + } + grub_dprintf ("zfs", "check 9 passed\n"); + + found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_GUID, + &(diskdesc->guid)); + if (! found) + { + grub_free (nvlist); + if (! grub_errno) + grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_GUID " not found"); + return grub_errno; + } + + found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_GUID, + &poolguid); + if (! found) + { + grub_free (nvlist); + if (! grub_errno) + grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_GUID " not found"); + return grub_errno; + } + + grub_dprintf ("zfs", "check 11 passed\n"); + + if (original) + data->guid = poolguid; + + if (data->guid != poolguid) + return grub_error (GRUB_ERR_BAD_FS, "another zpool"); + + { + char *nv; + nv = grub_zfs_nvlist_lookup_nvlist (nvlist, ZPOOL_CONFIG_VDEV_TREE); + + if (!nv) + { + grub_free (nvlist); + return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev tree"); + } + err = fill_vdev_info (data, nv, diskdesc, inserted); + if (err) + { + grub_free (nv); + grub_free (nvlist); + return err; + } + grub_free (nv); + } + grub_dprintf ("zfs", "check 10 passed\n"); + features = grub_zfs_nvlist_lookup_nvlist(nvlist, + ZPOOL_CONFIG_FEATURES_FOR_READ); + if (features) + { + const char *nvp=NULL; + char name[MAX_SUPPORTED_FEATURE_STRLEN + 1]; + char *nameptr; + grub_size_t namelen; + while ((nvp = nvlist_next_nvpair(features, nvp)) != NULL) + { + nvpair_name (nvp, &nameptr, &namelen); + if(namelen > MAX_SUPPORTED_FEATURE_STRLEN) + namelen = MAX_SUPPORTED_FEATURE_STRLEN; + grub_memcpy (name, nameptr, namelen); + name[namelen] = '\0'; + grub_dprintf("zfs","str=%s\n",name); + if (check_feature(name,1, NULL) != 0) + { + grub_dprintf("zfs","feature missing in check_pool_label:%s\n",name); + err= grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET," check_pool_label missing feature '%s' for read",name); + return err; + } + } + } + grub_dprintf ("zfs", "check 12 passed (feature flags)\n"); + grub_free (nvlist); + + return GRUB_ERR_NONE; +} + +static grub_err_t +scan_disk (grub_device_t dev, struct grub_zfs_data *data, + int original, int *inserted) +{ + int label = 0; + uberblock_phys_t *ub_array, *ubbest = NULL; + vdev_boot_header_t *bh; + grub_err_t err; + int vdevnum; + struct grub_zfs_device_desc desc; + + ub_array = grub_malloc (VDEV_UBERBLOCK_RING); + if (!ub_array) + return grub_errno; + + bh = grub_malloc (VDEV_BOOT_HEADER_SIZE); + if (!bh) + { + grub_free (ub_array); + return grub_errno; + } + + vdevnum = VDEV_LABELS; + + desc.dev = dev; + desc.original = original; + + /* Don't check back labels on CDROM. */ + if (grub_disk_get_size (dev->disk) == GRUB_DISK_SIZE_UNKNOWN) + vdevnum = VDEV_LABELS / 2; + + for (label = 0; ubbest == NULL && label < vdevnum; label++) + { + desc.vdev_phys_sector + = label * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT) + + ((VDEV_SKIP_SIZE + VDEV_BOOT_HEADER_SIZE) >> SPA_MINBLOCKSHIFT) + + (label < VDEV_LABELS / 2 ? 0 : + ALIGN_DOWN (grub_disk_get_size (dev->disk), sizeof (vdev_label_t)) + - VDEV_LABELS * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT)); + + /* Read in the uberblock ring (128K). */ + err = grub_disk_read (dev->disk, desc.vdev_phys_sector + + (VDEV_PHYS_SIZE >> SPA_MINBLOCKSHIFT), + 0, VDEV_UBERBLOCK_RING, (char *) ub_array); + if (err) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + grub_dprintf ("zfs", "label ok %d\n", label); + + err = check_pool_label (data, &desc, inserted, original); + if (err || !*inserted) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + + ubbest = find_bestub (ub_array, &desc); + if (!ubbest) + { + grub_dprintf ("zfs", "No uberblock found\n"); + grub_errno = GRUB_ERR_NONE; + continue; + } + + grub_memmove (&(desc.current_uberblock), + &ubbest->ubp_uberblock, sizeof (uberblock_t)); + if (original) + grub_memmove (&(data->current_uberblock), + &ubbest->ubp_uberblock, sizeof (uberblock_t)); + +#if 0 + if (find_best_root && + vdev_uberblock_compare (&ubbest->ubp_uberblock, + &(current_uberblock)) <= 0) + continue; +#endif + grub_free (ub_array); + grub_free (bh); + return GRUB_ERR_NONE; + } + + grub_free (ub_array); + grub_free (bh); + + return grub_error (GRUB_ERR_BAD_FS, "couldn't find a valid label"); +} + +/* Helper for scan_devices. */ +static int +scan_devices_iter (const char *name, void *hook_data) +{ + struct grub_zfs_data *data = hook_data; + grub_device_t dev; + grub_err_t err; + int inserted; + + dev = grub_device_open (name); + if (!dev) + return 0; + if (!dev->disk) + { + grub_device_close (dev); + return 0; + } + err = scan_disk (dev, data, 0, &inserted); + if (err == GRUB_ERR_BAD_FS) + { + grub_device_close (dev); + grub_errno = GRUB_ERR_NONE; + return 0; + } + if (err) + { + grub_device_close (dev); + grub_print_error (); + return 0; + } + + if (!inserted) + grub_device_close (dev); + + return 0; +} + +static grub_err_t +scan_devices (struct grub_zfs_data *data) +{ + grub_device_iterate (scan_devices_iter, data); + return GRUB_ERR_NONE; +} + +/* x**y. */ +static grub_uint8_t powx[255 * 2]; +/* Such an s that x**s = y */ +static int powx_inv[256]; +static const grub_uint8_t poly = 0x1d; + +/* perform the operation a ^= b * (x ** (known_idx * recovery_pow) ) */ +static inline void +xor_out (grub_uint8_t *a, const grub_uint8_t *b, grub_size_t s, + unsigned known_idx, unsigned recovery_pow) +{ + unsigned add; + + /* Simple xor. */ + if (known_idx == 0 || recovery_pow == 0) + { + grub_crypto_xor (a, a, b, s); + return; + } + add = (known_idx * recovery_pow) % 255; + for (;s--; b++, a++) + if (*b) + *a ^= powx[powx_inv[*b] + add]; +} + +static inline grub_uint8_t +gf_mul (grub_uint8_t a, grub_uint8_t b) +{ + if (a == 0 || b == 0) + return 0; + return powx[powx_inv[a] + powx_inv[b]]; +} + +#define MAX_NBUFS 4 + +static grub_err_t +recovery (grub_uint8_t *bufs[4], grub_size_t s, const int nbufs, + const unsigned *powers, + const unsigned *idx) +{ + grub_dprintf ("zfs", "recovering %u buffers\n", nbufs); + /* Now we have */ + /* b_i = sum (r_j* (x ** (powers[i] * idx[j])))*/ + /* Let's invert the matrix in question. */ + switch (nbufs) + { + /* Easy: r_0 = bufs[0] / (x << (powers[i] * idx[j])). */ + case 1: + { + int add; + grub_uint8_t *a; + if (powers[0] == 0 || idx[0] == 0) + return GRUB_ERR_NONE; + add = 255 - ((powers[0] * idx[0]) % 255); + for (a = bufs[0]; s--; a++) + if (*a) + *a = powx[powx_inv[*a] + add]; + return GRUB_ERR_NONE; + } + /* Case 2x2: Let's use the determinant formula. */ + case 2: + { + grub_uint8_t det, det_inv; + grub_uint8_t matrixinv[2][2]; + unsigned i; + /* The determinant is: */ + det = (powx[(powers[0] * idx[0] + powers[1] * idx[1]) % 255] + ^ powx[(powers[0] * idx[1] + powers[1] * idx[0]) % 255]); + if (det == 0) + return grub_error (GRUB_ERR_BAD_FS, "singular recovery matrix"); + det_inv = powx[255 - powx_inv[det]]; + matrixinv[0][0] = gf_mul (powx[(powers[1] * idx[1]) % 255], det_inv); + matrixinv[1][1] = gf_mul (powx[(powers[0] * idx[0]) % 255], det_inv); + matrixinv[0][1] = gf_mul (powx[(powers[0] * idx[1]) % 255], det_inv); + matrixinv[1][0] = gf_mul (powx[(powers[1] * idx[0]) % 255], det_inv); + for (i = 0; i < s; i++) + { + grub_uint8_t b0, b1; + b0 = bufs[0][i]; + b1 = bufs[1][i]; + + bufs[0][i] = (gf_mul (b0, matrixinv[0][0]) + ^ gf_mul (b1, matrixinv[0][1])); + bufs[1][i] = (gf_mul (b0, matrixinv[1][0]) + ^ gf_mul (b1, matrixinv[1][1])); + } + return GRUB_ERR_NONE; + } + /* Otherwise use Gauss. */ + case 3: + { + grub_uint8_t matrix1[MAX_NBUFS][MAX_NBUFS], matrix2[MAX_NBUFS][MAX_NBUFS]; + int i, j, k; + + for (i = 0; i < nbufs; i++) + for (j = 0; j < nbufs; j++) + matrix1[i][j] = powx[(powers[i] * idx[j]) % 255]; + for (i = 0; i < nbufs; i++) + for (j = 0; j < nbufs; j++) + matrix2[i][j] = 0; + for (i = 0; i < nbufs; i++) + matrix2[i][i] = 1; + + for (i = 0; i < nbufs; i++) + { + grub_uint8_t mul; + for (j = i; j < nbufs; j++) + if (matrix1[i][j]) + break; + if (j == nbufs) + return grub_error (GRUB_ERR_BAD_FS, "singular recovery matrix"); + if (j != i) + { + int xchng; + xchng = j; + for (j = 0; j < nbufs; j++) + { + grub_uint8_t t; + t = matrix1[xchng][j]; + matrix1[xchng][j] = matrix1[i][j]; + matrix1[i][j] = t; + } + for (j = 0; j < nbufs; j++) + { + grub_uint8_t t; + t = matrix2[xchng][j]; + matrix2[xchng][j] = matrix2[i][j]; + matrix2[i][j] = t; + } + } + mul = powx[255 - powx_inv[matrix1[i][i]]]; + for (j = 0; j < nbufs; j++) + matrix1[i][j] = gf_mul (matrix1[i][j], mul); + for (j = 0; j < nbufs; j++) + matrix2[i][j] = gf_mul (matrix2[i][j], mul); + for (j = i + 1; j < nbufs; j++) + { + mul = matrix1[j][i]; + for (k = 0; k < nbufs; k++) + matrix1[j][k] ^= gf_mul (matrix1[i][k], mul); + for (k = 0; k < nbufs; k++) + matrix2[j][k] ^= gf_mul (matrix2[i][k], mul); + } + } + for (i = nbufs - 1; i >= 0; i--) + { + for (j = 0; j < i; j++) + { + grub_uint8_t mul; + mul = matrix1[j][i]; + for (k = 0; k < nbufs; k++) + matrix1[j][k] ^= gf_mul (matrix1[i][k], mul); + for (k = 0; k < nbufs; k++) + matrix2[j][k] ^= gf_mul (matrix2[i][k], mul); + } + } + + for (i = 0; i < (int) s; i++) + { + grub_uint8_t b[MAX_NBUFS]; + for (j = 0; j < nbufs; j++) + b[j] = bufs[j][i]; + for (j = 0; j < nbufs; j++) + { + bufs[j][i] = 0; + for (k = 0; k < nbufs; k++) + bufs[j][i] ^= gf_mul (matrix2[j][k], b[k]); + } + } + return GRUB_ERR_NONE; + } + default: + return grub_error (GRUB_ERR_BUG, "too big matrix"); + } +} + +static grub_err_t +read_device (grub_uint64_t offset, struct grub_zfs_device_desc *desc, + grub_size_t len, void *buf) +{ + switch (desc->type) + { + case DEVICE_LEAF: + { + grub_uint64_t sector; + sector = DVA_OFFSET_TO_PHYS_SECTOR (offset); + if (!desc->dev) + { + return grub_error (GRUB_ERR_BAD_FS, + N_("couldn't find a necessary member device " + "of multi-device filesystem")); + } + /* read in a data block */ + return grub_disk_read (desc->dev->disk, sector, 0, len, buf); + } + case DEVICE_MIRROR: + { + grub_err_t err = GRUB_ERR_NONE; + unsigned i; + if (desc->n_children <= 0) + return grub_error (GRUB_ERR_BAD_FS, + "non-positive number of mirror children"); + for (i = 0; i < desc->n_children; i++) + { + err = read_device (offset, &desc->children[i], + len, buf); + if (!err) + break; + grub_errno = GRUB_ERR_NONE; + } + grub_errno = err; + + return err; + } + case DEVICE_RAIDZ: + { + unsigned c = 0; + grub_uint64_t high; + grub_uint64_t devn; + grub_uint64_t m; + grub_uint32_t s, orig_s; + void *orig_buf = buf; + grub_size_t orig_len = len; + grub_uint8_t *recovery_buf[4]; + grub_size_t recovery_len[4]; + unsigned recovery_idx[4]; + unsigned failed_devices = 0; + int idx, orig_idx; + + if (desc->nparity < 1 || desc->nparity > 3) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "raidz%d is not supported", desc->nparity); + + if (desc->n_children <= desc->nparity || desc->n_children < 1) + return grub_error(GRUB_ERR_BAD_FS, "too little devices for given parity"); + + orig_s = (((len + (1 << desc->ashift) - 1) >> desc->ashift) + + (desc->n_children - desc->nparity) - 1); + s = orig_s; + + high = grub_divmod64 ((offset >> desc->ashift), + desc->n_children, &m); + if (desc->nparity == 2) + c = 2; + if (desc->nparity == 3) + c = 3; + if (((len + (1 << desc->ashift) - 1) >> desc->ashift) + >= (desc->n_children - desc->nparity)) + idx = (desc->n_children - desc->nparity - 1); + else + idx = ((len + (1 << desc->ashift) - 1) >> desc->ashift) - 1; + orig_idx = idx; + while (len > 0) + { + grub_size_t csize; + grub_uint32_t bsize; + grub_err_t err; + bsize = s / (desc->n_children - desc->nparity); + + if (desc->nparity == 1 + && ((offset >> (desc->ashift + 20 - desc->max_children_ashift)) + & 1) == c) + c++; + + high = grub_divmod64 ((offset >> desc->ashift) + c, + desc->n_children, &devn); + csize = bsize << desc->ashift; + if (csize > len) + csize = len; + + grub_dprintf ("zfs", "RAIDZ mapping 0x%" PRIxGRUB_UINT64_T + "+%u (%" PRIxGRUB_SIZE ", %" PRIxGRUB_UINT32_T + ") -> (0x%" PRIxGRUB_UINT64_T ", 0x%" + PRIxGRUB_UINT64_T ")\n", + offset >> desc->ashift, c, len, bsize, high, + devn); + err = read_device ((high << desc->ashift) + | (offset & ((1 << desc->ashift) - 1)), + &desc->children[devn], + csize, buf); + if (err && failed_devices < desc->nparity) + { + recovery_buf[failed_devices] = buf; + recovery_len[failed_devices] = csize; + recovery_idx[failed_devices] = idx; + failed_devices++; + grub_errno = err = 0; + } + if (err) + return err; + + c++; + idx--; + s--; + buf = (char *) buf + csize; + len -= csize; + } + if (failed_devices) + { + unsigned redundancy_pow[4]; + unsigned cur_redundancy_pow = 0; + unsigned n_redundancy = 0; + unsigned i, j; + grub_err_t err; + + /* Compute mul. x**s has a period of 255. */ + if (powx[0] == 0) + { + grub_uint8_t cur = 1; + for (i = 0; i < 255; i++) + { + powx[i] = cur; + powx[i + 255] = cur; + powx_inv[cur] = i; + if (cur & 0x80) + cur = (cur << 1) ^ poly; + else + cur <<= 1; + } + } + + /* Read redundancy data. */ + for (n_redundancy = 0, cur_redundancy_pow = 0; + n_redundancy < failed_devices; + cur_redundancy_pow++) + { + high = grub_divmod64 ((offset >> desc->ashift) + + cur_redundancy_pow + + ((desc->nparity == 1) + && ((offset >> (desc->ashift + 20 + - desc->max_children_ashift)) + & 1)), + desc->n_children, &devn); + err = read_device ((high << desc->ashift) + | (offset & ((1 << desc->ashift) - 1)), + &desc->children[devn], + recovery_len[n_redundancy], + recovery_buf[n_redundancy]); + /* Ignore error if we may still have enough devices. */ + if (err && n_redundancy + desc->nparity - cur_redundancy_pow - 1 + >= failed_devices) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + if (err) + return err; + redundancy_pow[n_redundancy] = cur_redundancy_pow; + n_redundancy++; + } + /* Now xor-our the parts we already know. */ + buf = orig_buf; + len = orig_len; + s = orig_s; + idx = orig_idx; + + while (len > 0) + { + grub_size_t csize; + csize = ((s / (desc->n_children - desc->nparity)) + << desc->ashift); + if (csize > len) + csize = len; + + for (j = 0; j < failed_devices; j++) + if (buf == recovery_buf[j]) + break; + + if (j == failed_devices) + for (j = 0; j < failed_devices; j++) + xor_out (recovery_buf[j], buf, + csize < recovery_len[j] ? csize : recovery_len[j], + idx, redundancy_pow[j]); + + s--; + buf = (char *) buf + csize; + len -= csize; + idx--; + } + for (i = 0; i < failed_devices + && recovery_len[i] == recovery_len[0]; + i++); + /* Since the chunks have variable length handle the last block + separately. */ + if (i != failed_devices) + { + grub_uint8_t *tmp_recovery_buf[4]; + for (j = 0; j < i; j++) + tmp_recovery_buf[j] = recovery_buf[j] + recovery_len[failed_devices - 1]; + err = recovery (tmp_recovery_buf, recovery_len[0] - recovery_len[failed_devices - 1], i, redundancy_pow, + recovery_idx); + if (err) + return err; + } + err = recovery (recovery_buf, recovery_len[failed_devices - 1], + failed_devices, redundancy_pow, recovery_idx); + if (err) + return err; + } + return GRUB_ERR_NONE; + } + } + return grub_error (GRUB_ERR_BAD_FS, "unsupported device type"); +} + +static grub_err_t +read_dva (const dva_t *dva, + grub_zfs_endian_t endian, struct grub_zfs_data *data, + void *buf, grub_size_t len) +{ + grub_uint64_t offset; + unsigned i; + grub_err_t err = 0; + int try = 0; + offset = dva_get_offset (dva, endian); + + for (try = 0; try < 2; try++) + { + for (i = 0; i < data->n_devices_attached; i++) + if (data->devices_attached[i].id == DVA_GET_VDEV (dva)) + { + err = read_device (offset, &data->devices_attached[i], len, buf); + if (!err) + return GRUB_ERR_NONE; + break; + } + if (try == 1) + break; + err = scan_devices (data); + if (err) + return err; + } + if (!err) + return grub_error (GRUB_ERR_BAD_FS, "unknown device %d", + (int) DVA_GET_VDEV (dva)); + return err; +} + +/* + * Read a block of data based on the gang block address dva, + * and put its data in buf. + * + */ +static grub_err_t +zio_read_gang (blkptr_t * bp, grub_zfs_endian_t endian, dva_t * dva, void *buf, + struct grub_zfs_data *data) +{ + zio_gbh_phys_t *zio_gb; + unsigned i; + grub_err_t err; + zio_cksum_t zc; + + grub_memset (&zc, 0, sizeof (zc)); + + zio_gb = grub_malloc (SPA_GANGBLOCKSIZE); + if (!zio_gb) + return grub_errno; + grub_dprintf ("zfs", endian == GRUB_ZFS_LITTLE_ENDIAN ? "little-endian gang\n" + :"big-endian gang\n"); + + err = read_dva (dva, endian, data, zio_gb, SPA_GANGBLOCKSIZE); + if (err) + { + grub_free (zio_gb); + return err; + } + + /* XXX */ + /* self checksuming the gang block header */ + ZIO_SET_CHECKSUM (&zc, DVA_GET_VDEV (dva), + dva_get_offset (dva, endian), bp->blk_birth, 0); + err = zio_checksum_verify (zc, ZIO_CHECKSUM_GANG_HEADER, endian, + (char *) zio_gb, SPA_GANGBLOCKSIZE); + if (err) + { + grub_free (zio_gb); + return err; + } + + endian = (grub_zfs_to_cpu64 (bp->blk_prop, endian) >> 63) & 1; + + for (i = 0; i < SPA_GBH_NBLKPTRS; i++) + { + if (BP_IS_HOLE(&zio_gb->zg_blkptr[i])) + continue; + + err = zio_read_data (&zio_gb->zg_blkptr[i], endian, buf, data); + if (err) + { + grub_free (zio_gb); + return err; + } + buf = (char *) buf + get_psize (&zio_gb->zg_blkptr[i], endian); + } + grub_free (zio_gb); + return GRUB_ERR_NONE; +} + +/* + * Read in a block of raw data to buf. + */ +static grub_err_t +zio_read_data (blkptr_t * bp, grub_zfs_endian_t endian, void *buf, + struct grub_zfs_data *data) +{ + int i, psize; + grub_err_t err = GRUB_ERR_NONE; + + psize = get_psize (bp, endian); + + /* pick a good dva from the block pointer */ + for (i = 0; i < SPA_DVAS_PER_BP; i++) + { + if (bp->blk_dva[i].dva_word[0] == 0 && bp->blk_dva[i].dva_word[1] == 0) + continue; + + if ((grub_zfs_to_cpu64 (bp->blk_dva[i].dva_word[1], endian)>>63) & 1) + err = zio_read_gang (bp, endian, &bp->blk_dva[i], buf, data); + else + err = read_dva (&bp->blk_dva[i], endian, data, buf, psize); + if (!err) + return GRUB_ERR_NONE; + grub_errno = GRUB_ERR_NONE; + } + + if (!err) + err = grub_error (GRUB_ERR_BAD_FS, "couldn't find a valid DVA"); + grub_errno = err; + + return err; +} + +/* + * buf must be at least BPE_GET_PSIZE(bp) bytes long (which will never be + * more than BPE_PAYLOAD_SIZE bytes). + */ +static grub_err_t +decode_embedded_bp_compressed(const blkptr_t *bp, void *buf) +{ + grub_size_t psize, i; + grub_uint8_t *buf8 = buf; + grub_uint64_t w = 0; + const grub_uint64_t *bp64 = (const grub_uint64_t *)bp; + + psize = BPE_GET_PSIZE(bp); + + /* + * Decode the words of the block pointer into the byte array. + * Low bits of first word are the first byte (little endian). + */ + for (i = 0; i < psize; i++) + { + if (i % sizeof (w) == 0) + { + /* beginning of a word */ + w = *bp64; + bp64++; + if (!BPE_IS_PAYLOADWORD(bp, bp64)) + bp64++; + } + buf8[i] = BF64_GET(w, (i % sizeof (w)) * 8, 8); + } + return GRUB_ERR_NONE; +} + +/* + * Read in a block of data, verify its checksum, decompress if needed, + * and put the uncompressed data in buf. + */ +static grub_err_t +zio_read (blkptr_t *bp, grub_zfs_endian_t endian, void **buf, + grub_size_t *size, struct grub_zfs_data *data) +{ + grub_size_t lsize, psize; + unsigned int comp, encrypted; + char *compbuf = NULL; + grub_err_t err; + zio_cksum_t zc = bp->blk_cksum; + grub_uint32_t checksum; + + *buf = NULL; + + checksum = (grub_zfs_to_cpu64((bp)->blk_prop, endian) >> 40) & 0xff; + comp = (grub_zfs_to_cpu64((bp)->blk_prop, endian)>>32) & 0x7f; + encrypted = ((grub_zfs_to_cpu64((bp)->blk_prop, endian) >> 60) & 3); + if (BP_IS_EMBEDDED(bp)) + { + if (BPE_GET_ETYPE(bp) != BP_EMBEDDED_TYPE_DATA) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported embedded BP (type=%u)\n", + BPE_GET_ETYPE(bp)); + lsize = BPE_GET_LSIZE(bp); + psize = BF64_GET_SB(grub_zfs_to_cpu64 ((bp)->blk_prop, endian), 25, 7, 0, 1); + } + else + { + lsize = (BP_IS_HOLE(bp) ? 0 : + (((grub_zfs_to_cpu64 ((bp)->blk_prop, endian) & 0xffff) + 1) + << SPA_MINBLOCKSHIFT)); + psize = get_psize (bp, endian); + } + grub_dprintf("zfs", "zio_read: E %d: size %" PRIdGRUB_SSIZE "/%" + PRIdGRUB_SSIZE "\n", (int)BP_IS_EMBEDDED(bp), lsize, psize); + + if (size) + *size = lsize; + + if (comp >= ZIO_COMPRESS_FUNCTIONS) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "compression algorithm %u not supported\n", (unsigned int) comp); + + if (comp != ZIO_COMPRESS_OFF && decomp_table[comp].decomp_func == NULL) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "compression algorithm %s not supported\n", decomp_table[comp].name); + + if (comp != ZIO_COMPRESS_OFF) + /* It's not really necessary to align to 16, just for safety. */ + compbuf = grub_malloc (ALIGN_UP (psize, 16)); + else + compbuf = *buf = grub_malloc (lsize); + if (! compbuf) + return grub_errno; + + grub_dprintf ("zfs", "endian = %d\n", endian); + if (BP_IS_EMBEDDED(bp)) + err = decode_embedded_bp_compressed(bp, compbuf); + else + { + err = zio_read_data (bp, endian, compbuf, data); + /* FIXME is it really necessary? */ + if (comp != ZIO_COMPRESS_OFF) + grub_memset (compbuf + psize, 0, ALIGN_UP (psize, 16) - psize); + } + if (err) + { + grub_free (compbuf); + *buf = NULL; + return err; + } + + if (!BP_IS_EMBEDDED(bp)) + { + err = zio_checksum_verify (zc, checksum, endian, + compbuf, psize); + if (err) + { + grub_dprintf ("zfs", "incorrect checksum\n"); + grub_free (compbuf); + *buf = NULL; + return err; + } + } + + if (encrypted) + { + if (!grub_zfs_decrypt) + err = grub_error (GRUB_ERR_BAD_FS, + N_("module `%s' isn't loaded"), + "zfscrypt"); + else + { + unsigned i, besti = 0; + grub_uint64_t bestval = 0; + for (i = 0; i < data->subvol.nkeys; i++) + if (data->subvol.keyring[i].txg <= grub_zfs_to_cpu64 (bp->blk_birth, + endian) + && data->subvol.keyring[i].txg > bestval) + { + besti = i; + bestval = data->subvol.keyring[i].txg; + } + if (bestval == 0) + { + grub_free (compbuf); + *buf = NULL; + grub_dprintf ("zfs", "no key for txg %" PRIxGRUB_UINT64_T "\n", + grub_zfs_to_cpu64 (bp->blk_birth, + endian)); + return grub_error (GRUB_ERR_BAD_FS, "no key found in keychain"); + } + grub_dprintf ("zfs", "using key %u (%" PRIxGRUB_UINT64_T + ", %p) for txg %" PRIxGRUB_UINT64_T "\n", + besti, data->subvol.keyring[besti].txg, + data->subvol.keyring[besti].cipher, + grub_zfs_to_cpu64 (bp->blk_birth, + endian)); + err = grub_zfs_decrypt (data->subvol.keyring[besti].cipher, + data->subvol.keyring[besti].algo, + &(bp)->blk_dva[encrypted], + compbuf, psize, zc.zc_mac, + endian); + } + if (err) + { + grub_free (compbuf); + *buf = NULL; + return err; + } + } + + if (comp != ZIO_COMPRESS_OFF) + { + *buf = grub_malloc (lsize); + if (!*buf) + { + grub_free (compbuf); + return grub_errno; + } + + err = decomp_table[comp].decomp_func (compbuf, *buf, psize, lsize); + grub_free (compbuf); + if (err) + { + grub_free (*buf); + *buf = NULL; + return err; + } + } + + return GRUB_ERR_NONE; +} + +/* + * Get the block from a block id. + * push the block onto the stack. + * + */ +static grub_err_t +dmu_read (dnode_end_t * dn, grub_uint64_t blkid, void **buf, + grub_zfs_endian_t *endian_out, struct grub_zfs_data *data) +{ + int level; + grub_off_t idx; + blkptr_t *bp_array = dn->dn.dn_blkptr; + int epbs = dn->dn.dn_indblkshift - SPA_BLKPTRSHIFT; + blkptr_t *bp; + void *tmpbuf = 0; + grub_zfs_endian_t endian; + grub_err_t err = GRUB_ERR_NONE; + + bp = grub_malloc (sizeof (blkptr_t)); + if (!bp) + return grub_errno; + + endian = dn->endian; + for (level = dn->dn.dn_nlevels - 1; level >= 0; level--) + { + grub_dprintf ("zfs", "endian = %d\n", endian); + idx = (blkid >> (epbs * level)) & ((1 << epbs) - 1); + *bp = bp_array[idx]; + if (bp_array != dn->dn.dn_blkptr) + { + grub_free (bp_array); + bp_array = 0; + } + + if (BP_IS_HOLE (bp)) + { + grub_size_t size = grub_zfs_to_cpu16 (dn->dn.dn_datablkszsec, + dn->endian) + << SPA_MINBLOCKSHIFT; + *buf = grub_malloc (size); + if (!*buf) + { + err = grub_errno; + break; + } + grub_memset (*buf, 0, size); + endian = (grub_zfs_to_cpu64 (bp->blk_prop, endian) >> 63) & 1; + break; + } + if (level == 0) + { + grub_dprintf ("zfs", "endian = %d\n", endian); + err = zio_read (bp, endian, buf, 0, data); + endian = (grub_zfs_to_cpu64 (bp->blk_prop, endian) >> 63) & 1; + break; + } + grub_dprintf ("zfs", "endian = %d\n", endian); + err = zio_read (bp, endian, &tmpbuf, 0, data); + endian = (grub_zfs_to_cpu64 (bp->blk_prop, endian) >> 63) & 1; + if (err) + break; + bp_array = tmpbuf; + } + if (bp_array != dn->dn.dn_blkptr) + grub_free (bp_array); + if (endian_out) + *endian_out = endian; + + grub_free (bp); + return err; +} + +/* + * mzap_lookup: Looks up property described by "name" and returns the value + * in "value". + */ +static grub_err_t +mzap_lookup (mzap_phys_t * zapobj, grub_zfs_endian_t endian, + grub_uint32_t objsize, const char *name, grub_uint64_t * value, + int case_insensitive) +{ + grub_uint32_t i, chunks; + mzap_ent_phys_t *mzap_ent = zapobj->mz_chunk; + + if (objsize < MZAP_ENT_LEN) + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name); + chunks = objsize / MZAP_ENT_LEN - 1; + for (i = 0; i < chunks; i++) + { + if (case_insensitive ? (grub_strcasecmp (mzap_ent[i].mze_name, name) == 0) + : (grub_strcmp (mzap_ent[i].mze_name, name) == 0)) + { + *value = grub_zfs_to_cpu64 (mzap_ent[i].mze_value, endian); + return GRUB_ERR_NONE; + } + } + + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name); +} + +static int +mzap_iterate (mzap_phys_t * zapobj, grub_zfs_endian_t endian, int objsize, + int (*hook) (const char *name, grub_uint64_t val, + struct grub_zfs_dir_ctx *ctx), + struct grub_zfs_dir_ctx *ctx) +{ + int i, chunks; + mzap_ent_phys_t *mzap_ent = zapobj->mz_chunk; + + chunks = objsize / MZAP_ENT_LEN - 1; + for (i = 0; i < chunks; i++) + { + grub_dprintf ("zfs", "zap: name = %s, value = %llx, cd = %x\n", + mzap_ent[i].mze_name, (long long)mzap_ent[i].mze_value, + (int)mzap_ent[i].mze_cd); + if (hook (mzap_ent[i].mze_name, + grub_zfs_to_cpu64 (mzap_ent[i].mze_value, endian), ctx)) + return 1; + } + + return 0; +} + +static grub_uint64_t +zap_hash (grub_uint64_t salt, const char *name, + int case_insensitive) +{ + static grub_uint64_t table[256]; + const grub_uint8_t *cp; + grub_uint8_t c; + grub_uint64_t crc = salt; + + if (table[128] == 0) + { + grub_uint64_t *ct; + int i, j; + for (i = 0; i < 256; i++) + { + for (ct = table + i, *ct = i, j = 8; j > 0; j--) + *ct = (*ct >> 1) ^ (-(*ct & 1) & ZFS_CRC64_POLY); + } + } + + if (case_insensitive) + for (cp = (const grub_uint8_t *) name; (c = *cp) != '\0'; cp++) + crc = (crc >> 8) ^ table[(crc ^ grub_toupper (c)) & 0xFF]; + else + for (cp = (const grub_uint8_t *) name; (c = *cp) != '\0'; cp++) + crc = (crc >> 8) ^ table[(crc ^ c) & 0xFF]; + + /* + * Only use 28 bits, since we need 4 bits in the cookie for the + * collision differentiator. We MUST use the high bits, since + * those are the onces that we first pay attention to when + * chosing the bucket. + */ + crc &= ~((1ULL << (64 - ZAP_HASHBITS)) - 1); + + return crc; +} + +/* + * Only to be used on 8-bit arrays. + * array_len is actual len in bytes (not encoded le_value_length). + * buf is null-terminated. + */ + +static inline int +name_cmp (const char *s1, const char *s2, grub_size_t n, + int case_insensitive) +{ + const char *t1 = (const char *) s1; + const char *t2 = (const char *) s2; + + if (!case_insensitive) + return grub_memcmp (t1, t2, n); + + while (n--) + { + if (grub_toupper (*t1) != grub_toupper (*t2)) + return (int) grub_toupper (*t1) - (int) grub_toupper (*t2); + + t1++; + t2++; + } + + return 0; +} + +/* XXX */ +static int +zap_leaf_array_equal (zap_leaf_phys_t * l, grub_zfs_endian_t endian, + int blksft, int chunk, grub_size_t array_len, + const char *buf, int case_insensitive) +{ + grub_size_t bseen = 0; + + while (bseen < array_len) + { + struct zap_leaf_array *la = &ZAP_LEAF_CHUNK (l, blksft, chunk)->l_array; + grub_size_t toread = array_len - bseen; + + if (toread > ZAP_LEAF_ARRAY_BYTES) + toread = ZAP_LEAF_ARRAY_BYTES; + + if (chunk >= ZAP_LEAF_NUMCHUNKS (blksft)) + return 0; + + if (name_cmp ((char *) la->la_array, buf + bseen, toread, + case_insensitive) != 0) + break; + chunk = grub_zfs_to_cpu16 (la->la_next, endian); + bseen += toread; + } + return (bseen == array_len); +} + +/* XXX */ +static grub_err_t +zap_leaf_array_get (zap_leaf_phys_t * l, grub_zfs_endian_t endian, int blksft, + int chunk, grub_size_t array_len, char *buf) +{ + grub_size_t bseen = 0; + + while (bseen < array_len) + { + struct zap_leaf_array *la = &ZAP_LEAF_CHUNK (l, blksft, chunk)->l_array; + grub_size_t toread = array_len - bseen; + + if (toread > ZAP_LEAF_ARRAY_BYTES) + toread = ZAP_LEAF_ARRAY_BYTES; + + if (chunk >= ZAP_LEAF_NUMCHUNKS (blksft)) + /* Don't use grub_error because this error is to be ignored. */ + return GRUB_ERR_BAD_FS; + + grub_memcpy (buf + bseen,la->la_array, toread); + chunk = grub_zfs_to_cpu16 (la->la_next, endian); + bseen += toread; + } + return GRUB_ERR_NONE; +} + + +/* + * Given a zap_leaf_phys_t, walk thru the zap leaf chunks to get the + * value for the property "name". + * + */ +/* XXX */ +static grub_err_t +zap_leaf_lookup (zap_leaf_phys_t * l, grub_zfs_endian_t endian, + int blksft, grub_uint64_t h, + const char *name, grub_uint64_t * value, + int case_insensitive) +{ + grub_uint16_t chunk; + struct zap_leaf_entry *le; + + /* Verify if this is a valid leaf block */ + if (grub_zfs_to_cpu64 (l->l_hdr.lh_block_type, endian) != ZBT_LEAF) + return grub_error (GRUB_ERR_BAD_FS, "invalid leaf type"); + if (grub_zfs_to_cpu32 (l->l_hdr.lh_magic, endian) != ZAP_LEAF_MAGIC) + return grub_error (GRUB_ERR_BAD_FS, "invalid leaf magic"); + + for (chunk = grub_zfs_to_cpu16 (l->l_hash[LEAF_HASH (blksft, h, l)], endian); + chunk != CHAIN_END; chunk = grub_zfs_to_cpu16 (le->le_next, endian)) + { + + if (chunk >= ZAP_LEAF_NUMCHUNKS (blksft)) + return grub_error (GRUB_ERR_BAD_FS, "invalid chunk number"); + + le = ZAP_LEAF_ENTRY (l, blksft, chunk); + + /* Verify the chunk entry */ + if (le->le_type != ZAP_CHUNK_ENTRY) + return grub_error (GRUB_ERR_BAD_FS, "invalid chunk entry"); + + if (grub_zfs_to_cpu64 (le->le_hash,endian) != h) + continue; + + grub_dprintf ("zfs", "fzap: length %d\n", (int) le->le_name_length); + + if (zap_leaf_array_equal (l, endian, blksft, + grub_zfs_to_cpu16 (le->le_name_chunk,endian), + grub_zfs_to_cpu16 (le->le_name_length, endian), + name, case_insensitive)) + { + struct zap_leaf_array *la; + + if (le->le_int_size != 8 || grub_zfs_to_cpu16 (le->le_value_length, + endian) != 1) + return grub_error (GRUB_ERR_BAD_FS, "invalid leaf chunk entry"); + + /* get the uint64_t property value */ + la = &ZAP_LEAF_CHUNK (l, blksft, le->le_value_chunk)->l_array; + + *value = grub_be_to_cpu64 (la->la_array64); + + return GRUB_ERR_NONE; + } + } + + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), name); +} + + +/* Verify if this is a fat zap header block */ +static grub_err_t +zap_verify (zap_phys_t *zap, grub_zfs_endian_t endian) +{ + if (grub_zfs_to_cpu64 (zap->zap_magic, endian) != (grub_uint64_t) ZAP_MAGIC) + return grub_error (GRUB_ERR_BAD_FS, "bad ZAP magic"); + + if (zap->zap_salt == 0) + return grub_error (GRUB_ERR_BAD_FS, "bad ZAP salt"); + + return GRUB_ERR_NONE; +} + +/* + * Fat ZAP lookup + * + */ +/* XXX */ +static grub_err_t +fzap_lookup (dnode_end_t * zap_dnode, zap_phys_t * zap, + const char *name, grub_uint64_t * value, + struct grub_zfs_data *data, int case_insensitive) +{ + void *l; + grub_uint64_t hash, idx, blkid; + int blksft = zfs_log2 (grub_zfs_to_cpu16 (zap_dnode->dn.dn_datablkszsec, + zap_dnode->endian) << DNODE_SHIFT); + grub_err_t err; + grub_zfs_endian_t leafendian; + + err = zap_verify (zap, zap_dnode->endian); + if (err) + return err; + + hash = zap_hash (zap->zap_salt, name, case_insensitive); + + /* get block id from index */ + if (zap->zap_ptrtbl.zt_numblks != 0) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "external pointer tables not supported"); + idx = ZAP_HASH_IDX (hash, zap->zap_ptrtbl.zt_shift); + blkid = grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))], zap_dnode->endian); + + /* Get the leaf block */ + if ((1U << blksft) < sizeof (zap_leaf_phys_t)) + return grub_error (GRUB_ERR_BAD_FS, "ZAP leaf is too small"); + err = dmu_read (zap_dnode, blkid, &l, &leafendian, data); + if (err) + return err; + + err = zap_leaf_lookup (l, leafendian, blksft, hash, name, value, + case_insensitive); + grub_free (l); + return err; +} + +/* XXX */ +static int +fzap_iterate (dnode_end_t * zap_dnode, zap_phys_t * zap, + grub_size_t name_elem_length, + int (*hook) (const void *name, grub_size_t name_length, + const void *val_in, + grub_size_t nelem, grub_size_t elemsize, + void *data), + void *hook_data, struct grub_zfs_data *data) +{ + zap_leaf_phys_t *l; + void *l_in; + grub_uint64_t idx, idx2, blkid; + grub_uint16_t chunk; + int blksft = zfs_log2 (grub_zfs_to_cpu16 (zap_dnode->dn.dn_datablkszsec, + zap_dnode->endian) << DNODE_SHIFT); + grub_err_t err; + grub_zfs_endian_t endian; + + if (zap_verify (zap, zap_dnode->endian)) + return 0; + + /* get block id from index */ + if (zap->zap_ptrtbl.zt_numblks != 0) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "external pointer tables not supported"); + return 0; + } + /* Get the leaf block */ + if ((1U << blksft) < sizeof (zap_leaf_phys_t)) + { + grub_error (GRUB_ERR_BAD_FS, "ZAP leaf is too small"); + return 0; + } + for (idx = 0; idx < (1ULL << zap->zap_ptrtbl.zt_shift); idx++) + { + blkid = grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))], + zap_dnode->endian); + + for (idx2 = 0; idx2 < idx; idx2++) + if (blkid == grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx2 + (1 << (blksft - 3 - 1))], + zap_dnode->endian)) + break; + if (idx2 != idx) + continue; + + err = dmu_read (zap_dnode, blkid, &l_in, &endian, data); + l = l_in; + if (err) + { + grub_errno = GRUB_ERR_NONE; + continue; + } + + /* Verify if this is a valid leaf block */ + if (grub_zfs_to_cpu64 (l->l_hdr.lh_block_type, endian) != ZBT_LEAF) + { + grub_free (l); + continue; + } + if (grub_zfs_to_cpu32 (l->l_hdr.lh_magic, endian) != ZAP_LEAF_MAGIC) + { + grub_free (l); + continue; + } + + for (chunk = 0; chunk < ZAP_LEAF_NUMCHUNKS (blksft); chunk++) + { + char *buf; + struct zap_leaf_entry *le; + char *val; + grub_size_t val_length; + le = ZAP_LEAF_ENTRY (l, blksft, chunk); + + /* Verify the chunk entry */ + if (le->le_type != ZAP_CHUNK_ENTRY) + continue; + + buf = grub_malloc (grub_zfs_to_cpu16 (le->le_name_length, endian) + * name_elem_length + 1); + if (zap_leaf_array_get (l, endian, blksft, + grub_zfs_to_cpu16 (le->le_name_chunk, + endian), + grub_zfs_to_cpu16 (le->le_name_length, + endian) + * name_elem_length, buf)) + { + grub_free (buf); + continue; + } + buf[le->le_name_length * name_elem_length] = 0; + + val_length = ((int) le->le_value_length + * (int) le->le_int_size); + val = grub_malloc (grub_zfs_to_cpu16 (val_length, endian)); + if (zap_leaf_array_get (l, endian, blksft, + grub_zfs_to_cpu16 (le->le_value_chunk, + endian), + val_length, val)) + { + grub_free (buf); + grub_free (val); + continue; + } + + if (hook (buf, le->le_name_length, + val, le->le_value_length, le->le_int_size, hook_data)) + { + grub_free (l); + return 1; + } + grub_free (buf); + grub_free (val); + } + grub_free (l); + } + return 0; +} + +/* + * Read in the data of a zap object and find the value for a matching + * property name. + * + */ +static grub_err_t +zap_lookup (dnode_end_t * zap_dnode, const char *name, grub_uint64_t *val, + struct grub_zfs_data *data, int case_insensitive) +{ + grub_uint64_t block_type; + grub_uint32_t size; + void *zapbuf; + grub_err_t err; + grub_zfs_endian_t endian; + + grub_dprintf ("zfs", "looking for '%s'\n", name); + + /* Read in the first block of the zap object data. */ + size = (grub_uint32_t) grub_zfs_to_cpu16 (zap_dnode->dn.dn_datablkszsec, + zap_dnode->endian) << SPA_MINBLOCKSHIFT; + err = dmu_read (zap_dnode, 0, &zapbuf, &endian, data); + if (err) + return err; + block_type = grub_zfs_to_cpu64 (*((grub_uint64_t *) zapbuf), endian); + + grub_dprintf ("zfs", "zap read\n"); + + if (block_type == ZBT_MICRO) + { + grub_dprintf ("zfs", "micro zap\n"); + err = mzap_lookup (zapbuf, endian, size, name, val, + case_insensitive); + grub_dprintf ("zfs", "returned %d\n", err); + grub_free (zapbuf); + return err; + } + else if (block_type == ZBT_HEADER) + { + grub_dprintf ("zfs", "fat zap\n"); + /* this is a fat zap */ + err = fzap_lookup (zap_dnode, zapbuf, name, val, data, + case_insensitive); + grub_dprintf ("zfs", "returned %d\n", err); + grub_free (zapbuf); + return err; + } + + return grub_error (GRUB_ERR_BAD_FS, "unknown ZAP type"); +} + +/* Context for zap_iterate_u64. */ +struct zap_iterate_u64_ctx +{ + int (*hook) (const char *, grub_uint64_t, struct grub_zfs_dir_ctx *); + struct grub_zfs_dir_ctx *dir_ctx; +}; + +/* Helper for zap_iterate_u64. */ +static int +zap_iterate_u64_transform (const void *name, + grub_size_t namelen __attribute__ ((unused)), + const void *val_in, + grub_size_t nelem, + grub_size_t elemsize, + void *data) +{ + struct zap_iterate_u64_ctx *ctx = data; + + if (elemsize != sizeof (grub_uint64_t) || nelem != 1) + return 0; + return ctx->hook (name, grub_be_to_cpu64 (*(const grub_uint64_t *) val_in), + ctx->dir_ctx); +} + +static int +zap_iterate_u64 (dnode_end_t * zap_dnode, + int (*hook) (const char *name, grub_uint64_t val, + struct grub_zfs_dir_ctx *ctx), + struct grub_zfs_data *data, struct grub_zfs_dir_ctx *ctx) +{ + grub_uint64_t block_type; + int size; + void *zapbuf; + grub_err_t err; + int ret; + grub_zfs_endian_t endian; + + /* Read in the first block of the zap object data. */ + size = grub_zfs_to_cpu16 (zap_dnode->dn.dn_datablkszsec, zap_dnode->endian) << SPA_MINBLOCKSHIFT; + err = dmu_read (zap_dnode, 0, &zapbuf, &endian, data); + if (err) + return 0; + block_type = grub_zfs_to_cpu64 (*((grub_uint64_t *) zapbuf), endian); + + grub_dprintf ("zfs", "zap iterate\n"); + + if (block_type == ZBT_MICRO) + { + grub_dprintf ("zfs", "micro zap\n"); + ret = mzap_iterate (zapbuf, endian, size, hook, ctx); + grub_free (zapbuf); + return ret; + } + else if (block_type == ZBT_HEADER) + { + struct zap_iterate_u64_ctx transform_ctx = { + .hook = hook, + .dir_ctx = ctx + }; + + grub_dprintf ("zfs", "fat zap\n"); + /* this is a fat zap */ + ret = fzap_iterate (zap_dnode, zapbuf, 1, + zap_iterate_u64_transform, &transform_ctx, data); + grub_free (zapbuf); + return ret; + } + grub_error (GRUB_ERR_BAD_FS, "unknown ZAP type"); + return 0; +} + +static int +zap_iterate (dnode_end_t * zap_dnode, + grub_size_t nameelemlen, + int (*hook) (const void *name, grub_size_t namelen, + const void *val_in, + grub_size_t nelem, grub_size_t elemsize, + void *data), + void *hook_data, struct grub_zfs_data *data) +{ + grub_uint64_t block_type; + void *zapbuf; + grub_err_t err; + int ret; + grub_zfs_endian_t endian; + + /* Read in the first block of the zap object data. */ + err = dmu_read (zap_dnode, 0, &zapbuf, &endian, data); + if (err) + return 0; + block_type = grub_zfs_to_cpu64 (*((grub_uint64_t *) zapbuf), endian); + + grub_dprintf ("zfs", "zap iterate\n"); + + if (block_type == ZBT_MICRO) + { + grub_error (GRUB_ERR_BAD_FS, "micro ZAP where FAT ZAP expected"); + return 0; + } + if (block_type == ZBT_HEADER) + { + grub_dprintf ("zfs", "fat zap\n"); + /* this is a fat zap */ + ret = fzap_iterate (zap_dnode, zapbuf, nameelemlen, hook, hook_data, + data); + grub_free (zapbuf); + return ret; + } + grub_error (GRUB_ERR_BAD_FS, "unknown ZAP type"); + return 0; +} + + +/* + * Get the dnode of an object number from the metadnode of an object set. + * + * Input + * mdn - metadnode to get the object dnode + * objnum - object number for the object dnode + * buf - data buffer that holds the returning dnode + */ +static grub_err_t +dnode_get (dnode_end_t * mdn, grub_uint64_t objnum, grub_uint8_t type, + dnode_end_t * buf, struct grub_zfs_data *data) +{ + grub_uint64_t blkid, blksz; /* the block id this object dnode is in */ + int epbs; /* shift of number of dnodes in a block */ + int idx; /* index within a block */ + void *dnbuf; + grub_err_t err; + grub_zfs_endian_t endian; + + blksz = grub_zfs_to_cpu16 (mdn->dn.dn_datablkszsec, + mdn->endian) << SPA_MINBLOCKSHIFT; + epbs = zfs_log2 (blksz) - DNODE_SHIFT; + blkid = objnum >> epbs; + idx = objnum & ((1 << epbs) - 1); + + if (data->dnode_buf != NULL && grub_memcmp (data->dnode_mdn, mdn, + sizeof (*mdn)) == 0 + && objnum >= data->dnode_start && objnum < data->dnode_end) + { + grub_memmove (&(buf->dn), &(data->dnode_buf)[idx], DNODE_SIZE); + buf->endian = data->dnode_endian; + if (type && buf->dn.dn_type != type) + return grub_error(GRUB_ERR_BAD_FS, "incorrect dnode type"); + return GRUB_ERR_NONE; + } + + grub_dprintf ("zfs", "endian = %d, blkid=%llx\n", mdn->endian, + (unsigned long long) blkid); + err = dmu_read (mdn, blkid, &dnbuf, &endian, data); + if (err) + return err; + grub_dprintf ("zfs", "alive\n"); + + grub_free (data->dnode_buf); + grub_free (data->dnode_mdn); + data->dnode_mdn = grub_malloc (sizeof (*mdn)); + if (! data->dnode_mdn) + { + grub_errno = GRUB_ERR_NONE; + data->dnode_buf = 0; + } + else + { + grub_memcpy (data->dnode_mdn, mdn, sizeof (*mdn)); + data->dnode_buf = dnbuf; + data->dnode_start = blkid << epbs; + data->dnode_end = (blkid + 1) << epbs; + data->dnode_endian = endian; + } + + grub_memmove (&(buf->dn), (dnode_phys_t *) dnbuf + idx, DNODE_SIZE); + buf->endian = endian; + if (type && buf->dn.dn_type != type) + return grub_error(GRUB_ERR_BAD_FS, "incorrect dnode type"); + + return GRUB_ERR_NONE; +} + +#pragma GCC diagnostic ignored "-Wstrict-aliasing" + +/* + * Get the file dnode for a given file name where mdn is the meta dnode + * for this ZFS object set. When found, place the file dnode in dn. + * The 'path' argument will be mangled. + * + */ +static grub_err_t +dnode_get_path (struct subvolume *subvol, const char *path_in, dnode_end_t *dn, + struct grub_zfs_data *data) +{ + grub_uint64_t objnum, version; + char *cname, ch; + grub_err_t err = GRUB_ERR_NONE; + char *path, *path_buf; + struct dnode_chain + { + struct dnode_chain *next; + dnode_end_t dn; + }; + struct dnode_chain *dnode_path = 0, *dn_new, *root; + + dn_new = grub_malloc (sizeof (*dn_new)); + if (! dn_new) + return grub_errno; + dn_new->next = 0; + dnode_path = root = dn_new; + + err = dnode_get (&subvol->mdn, MASTER_NODE_OBJ, DMU_OT_MASTER_NODE, + &(dnode_path->dn), data); + if (err) + { + grub_free (dn_new); + return err; + } + + err = zap_lookup (&(dnode_path->dn), ZPL_VERSION_STR, &version, + data, 0); + if (err) + { + grub_free (dn_new); + return err; + } + + if (version > ZPL_VERSION) + { + grub_free (dn_new); + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "too new ZPL version"); + } + + err = zap_lookup (&(dnode_path->dn), "casesensitivity", + &subvol->case_insensitive, + data, 0); + if (err == GRUB_ERR_FILE_NOT_FOUND) + { + grub_errno = GRUB_ERR_NONE; + subvol->case_insensitive = 0; + } + + err = zap_lookup (&(dnode_path->dn), ZFS_ROOT_OBJ, &objnum, data, 0); + if (err) + { + grub_free (dn_new); + return err; + } + + err = dnode_get (&subvol->mdn, objnum, 0, &(dnode_path->dn), data); + if (err) + { + grub_free (dn_new); + return err; + } + + path = path_buf = grub_strdup (path_in); + if (!path_buf) + { + grub_free (dn_new); + return grub_errno; + } + + while (1) + { + /* skip leading slashes */ + while (*path == '/') + path++; + if (!*path) + break; + /* get the next component name */ + cname = path; + while (*path && *path != '/') + path++; + /* Skip dot. */ + if (cname + 1 == path && cname[0] == '.') + continue; + /* Handle double dot. */ + if (cname + 2 == path && cname[0] == '.' && cname[1] == '.') + { + if (dn_new->next) + { + dn_new = dnode_path; + dnode_path = dn_new->next; + grub_free (dn_new); + } + else + { + err = grub_error (GRUB_ERR_FILE_NOT_FOUND, + "can't resolve .."); + break; + } + continue; + } + + ch = *path; + *path = 0; /* ensure null termination */ + + if (dnode_path->dn.dn.dn_type != DMU_OT_DIRECTORY_CONTENTS) + { + grub_free (path_buf); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + } + err = zap_lookup (&(dnode_path->dn), cname, &objnum, + data, subvol->case_insensitive); + if (err) + break; + + dn_new = grub_malloc (sizeof (*dn_new)); + if (! dn_new) + { + err = grub_errno; + break; + } + dn_new->next = dnode_path; + dnode_path = dn_new; + + objnum = ZFS_DIRENT_OBJ (objnum); + err = dnode_get (&subvol->mdn, objnum, 0, &(dnode_path->dn), data); + if (err) + break; + + *path = ch; + if (dnode_path->dn.dn.dn_bonustype == DMU_OT_ZNODE + && ((grub_zfs_to_cpu64(((znode_phys_t *) DN_BONUS (&dnode_path->dn.dn))->zp_mode, dnode_path->dn.endian) >> 12) & 0xf) == 0xa) + { + char *sym_value; + grub_size_t sym_sz; + int free_symval = 0; + char *oldpath = path, *oldpathbuf = path_buf; + sym_value = ((char *) DN_BONUS (&dnode_path->dn.dn) + sizeof (struct znode_phys)); + + sym_sz = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dnode_path->dn.dn))->zp_size, dnode_path->dn.endian); + + if (dnode_path->dn.dn.dn_flags & 1) + { + grub_size_t block; + grub_size_t blksz; + blksz = (grub_zfs_to_cpu16 (dnode_path->dn.dn.dn_datablkszsec, + dnode_path->dn.endian) + << SPA_MINBLOCKSHIFT); + + if (blksz == 0) + return grub_error(GRUB_ERR_BAD_FS, "0-sized block"); + + sym_value = grub_malloc (sym_sz); + if (!sym_value) + return grub_errno; + for (block = 0; block < (sym_sz + blksz - 1) / blksz; block++) + { + void *t; + grub_size_t movesize; + + err = dmu_read (&(dnode_path->dn), block, &t, 0, data); + if (err) + { + grub_free (sym_value); + return err; + } + + movesize = sym_sz - block * blksz; + if (movesize > blksz) + movesize = blksz; + + grub_memcpy (sym_value + block * blksz, t, movesize); + grub_free (t); + } + free_symval = 1; + } + path = path_buf = grub_malloc (sym_sz + grub_strlen (oldpath) + 1); + if (!path_buf) + { + grub_free (oldpathbuf); + if (free_symval) + grub_free (sym_value); + return grub_errno; + } + grub_memcpy (path, sym_value, sym_sz); + if (free_symval) + grub_free (sym_value); + path [sym_sz] = 0; + grub_memcpy (path + grub_strlen (path), oldpath, + grub_strlen (oldpath) + 1); + + grub_free (oldpathbuf); + if (path[0] != '/') + { + dn_new = dnode_path; + dnode_path = dn_new->next; + grub_free (dn_new); + } + else while (dnode_path != root) + { + dn_new = dnode_path; + dnode_path = dn_new->next; + grub_free (dn_new); + } + } + if (dnode_path->dn.dn.dn_bonustype == DMU_OT_SA) + { + void *sahdrp; + int hdrsize; + + if (dnode_path->dn.dn.dn_bonuslen != 0) + { + sahdrp = DN_BONUS (&dnode_path->dn.dn); + } + else if (dnode_path->dn.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR) + { + blkptr_t *bp = &dnode_path->dn.dn.dn_spill; + + err = zio_read (bp, dnode_path->dn.endian, &sahdrp, NULL, data); + if (err) + return err; + } + else + { + return grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); + } + + hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); + + if (((grub_zfs_to_cpu64 (grub_get_unaligned64 ((char *) sahdrp + + hdrsize + + SA_TYPE_OFFSET), + dnode_path->dn.endian) >> 12) & 0xf) == 0xa) + { + char *sym_value = (char *) sahdrp + hdrsize + SA_SYMLINK_OFFSET; + grub_size_t sym_sz = + grub_zfs_to_cpu64 (grub_get_unaligned64 ((char *) sahdrp + + hdrsize + + SA_SIZE_OFFSET), + dnode_path->dn.endian); + char *oldpath = path, *oldpathbuf = path_buf; + path = path_buf = grub_malloc (sym_sz + grub_strlen (oldpath) + 1); + if (!path_buf) + { + grub_free (oldpathbuf); + return grub_errno; + } + grub_memcpy (path, sym_value, sym_sz); + path [sym_sz] = 0; + grub_memcpy (path + grub_strlen (path), oldpath, + grub_strlen (oldpath) + 1); + + grub_free (oldpathbuf); + if (path[0] != '/') + { + dn_new = dnode_path; + dnode_path = dn_new->next; + grub_free (dn_new); + } + else while (dnode_path != root) + { + dn_new = dnode_path; + dnode_path = dn_new->next; + grub_free (dn_new); + } + } + } + } + + if (!err) + grub_memcpy (dn, &(dnode_path->dn), sizeof (*dn)); + + while (dnode_path) + { + dn_new = dnode_path->next; + grub_free (dnode_path); + dnode_path = dn_new; + } + grub_free (path_buf); + return err; +} + +#if 0 +/* + * Get the default 'bootfs' property value from the rootpool. + * + */ +static grub_err_t +get_default_bootfsobj (dnode_phys_t * mosmdn, grub_uint64_t * obj, + struct grub_zfs_data *data) +{ + grub_uint64_t objnum = 0; + dnode_phys_t *dn; + if (!dn) + return grub_errno; + + if ((grub_errno = dnode_get (mosmdn, DMU_POOL_DIRECTORY_OBJECT, + DMU_OT_OBJECT_DIRECTORY, dn, data))) + { + grub_free (dn); + return (grub_errno); + } + + /* + * find the object number for 'pool_props', and get the dnode + * of the 'pool_props'. + */ + if (zap_lookup (dn, DMU_POOL_PROPS, &objnum, data)) + { + grub_free (dn); + return (GRUB_ERR_BAD_FS); + } + if ((grub_errno = dnode_get (mosmdn, objnum, DMU_OT_POOL_PROPS, dn, data))) + { + grub_free (dn); + return (grub_errno); + } + if (zap_lookup (dn, ZPOOL_PROP_BOOTFS, &objnum, data)) + { + grub_free (dn); + return (GRUB_ERR_BAD_FS); + } + + if (!objnum) + { + grub_free (dn); + return (GRUB_ERR_BAD_FS); + } + + *obj = objnum; + return (0); +} +#endif +/* + * Given a MOS metadnode, get the metadnode of a given filesystem name (fsname), + * e.g. pool/rootfs, or a given object number (obj), e.g. the object number + * of pool/rootfs. + * + * If no fsname and no obj are given, return the DSL_DIR metadnode. + * If fsname is given, return its metadnode and its matching object number. + * If only obj is given, return the metadnode for this object number. + * + */ +static grub_err_t +get_filesystem_dnode (dnode_end_t * mosmdn, char *fsname, + dnode_end_t * mdn, struct grub_zfs_data *data) +{ + grub_uint64_t objnum; + grub_err_t err; + + grub_dprintf ("zfs", "endian = %d\n", mosmdn->endian); + + err = dnode_get (mosmdn, DMU_POOL_DIRECTORY_OBJECT, + DMU_OT_OBJECT_DIRECTORY, mdn, data); + if (err) + return err; + + grub_dprintf ("zfs", "alive\n"); + + err = zap_lookup (mdn, DMU_POOL_ROOT_DATASET, &objnum, data, 0); + if (err) + return err; + + grub_dprintf ("zfs", "alive\n"); + + err = dnode_get (mosmdn, objnum, 0, mdn, data); + if (err) + return err; + + grub_dprintf ("zfs", "alive\n"); + + while (*fsname) + { + grub_uint64_t childobj; + char *cname, ch; + + while (*fsname == '/') + fsname++; + + if (! *fsname || *fsname == '@') + break; + + cname = fsname; + while (*fsname && *fsname != '/') + fsname++; + ch = *fsname; + *fsname = 0; + + childobj = grub_zfs_to_cpu64 ((((dsl_dir_phys_t *) DN_BONUS (&mdn->dn)))->dd_child_dir_zapobj, mdn->endian); + err = dnode_get (mosmdn, childobj, + DMU_OT_DSL_DIR_CHILD_MAP, mdn, data); + if (err) + return err; + + err = zap_lookup (mdn, cname, &objnum, data, 0); + if (err) + return err; + + err = dnode_get (mosmdn, objnum, 0, mdn, data); + if (err) + return err; + + *fsname = ch; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +make_mdn (dnode_end_t * mdn, struct grub_zfs_data *data) +{ + void *osp; + blkptr_t *bp; + grub_size_t ospsize = 0; + grub_err_t err; + + grub_dprintf ("zfs", "endian = %d\n", mdn->endian); + + bp = &(((dsl_dataset_phys_t *) DN_BONUS (&mdn->dn))->ds_bp); + err = zio_read (bp, mdn->endian, &osp, &ospsize, data); + if (err) + return err; + if (ospsize < OBJSET_PHYS_SIZE_V14) + { + grub_free (osp); + return grub_error (GRUB_ERR_BAD_FS, "too small osp"); + } + + mdn->endian = (grub_zfs_to_cpu64 (bp->blk_prop, mdn->endian)>>63) & 1; + grub_memmove ((char *) &(mdn->dn), + (char *) &((objset_phys_t *) osp)->os_meta_dnode, DNODE_SIZE); + grub_free (osp); + return GRUB_ERR_NONE; +} + +/* Context for dnode_get_fullpath. */ +struct dnode_get_fullpath_ctx +{ + struct subvolume *subvol; + grub_uint64_t salt; + int keyn; +}; + +/* Helper for dnode_get_fullpath. */ +static int +count_zap_keys (const void *name __attribute__ ((unused)), + grub_size_t namelen __attribute__ ((unused)), + const void *val_in __attribute__ ((unused)), + grub_size_t nelem __attribute__ ((unused)), + grub_size_t elemsize __attribute__ ((unused)), + void *data) +{ + struct dnode_get_fullpath_ctx *ctx = data; + + ctx->subvol->nkeys++; + return 0; +} + +/* Helper for dnode_get_fullpath. */ +static int +load_zap_key (const void *name, grub_size_t namelen, const void *val_in, + grub_size_t nelem, grub_size_t elemsize, void *data) +{ + struct dnode_get_fullpath_ctx *ctx = data; + + if (namelen != 1) + { + grub_dprintf ("zfs", "Unexpected key index size %" PRIuGRUB_SIZE "\n", + namelen); + return 0; + } + + if (elemsize != 1) + { + grub_dprintf ("zfs", "Unexpected key element size %" PRIuGRUB_SIZE "\n", + elemsize); + return 0; + } + + ctx->subvol->keyring[ctx->keyn].txg = + grub_be_to_cpu64 (*(grub_uint64_t *) name); + ctx->subvol->keyring[ctx->keyn].algo = + grub_le_to_cpu64 (*(grub_uint64_t *) val_in); + ctx->subvol->keyring[ctx->keyn].cipher = + grub_zfs_load_key (val_in, nelem, ctx->salt, + ctx->subvol->keyring[ctx->keyn].algo); + ctx->keyn++; + return 0; +} + +static grub_err_t +dnode_get_fullpath (const char *fullpath, struct subvolume *subvol, + dnode_end_t * dn, int *isfs, + struct grub_zfs_data *data) +{ + char *fsname, *snapname; + const char *ptr_at, *filename; + grub_uint64_t headobj; + grub_uint64_t keychainobj; + grub_err_t err; + + ptr_at = grub_strchr (fullpath, '@'); + if (! ptr_at) + { + *isfs = 1; + filename = 0; + snapname = 0; + fsname = grub_strdup (fullpath); + } + else + { + const char *ptr_slash = grub_strchr (ptr_at, '/'); + + *isfs = 0; + fsname = grub_malloc (ptr_at - fullpath + 1); + if (!fsname) + return grub_errno; + grub_memcpy (fsname, fullpath, ptr_at - fullpath); + fsname[ptr_at - fullpath] = 0; + if (ptr_at[1] && ptr_at[1] != '/') + { + snapname = grub_malloc (ptr_slash - ptr_at); + if (!snapname) + { + grub_free (fsname); + return grub_errno; + } + grub_memcpy (snapname, ptr_at + 1, ptr_slash - ptr_at - 1); + snapname[ptr_slash - ptr_at - 1] = 0; + } + else + snapname = 0; + if (ptr_slash) + filename = ptr_slash; + else + filename = "/"; + grub_dprintf ("zfs", "fsname = '%s' snapname='%s' filename = '%s'\n", + fsname, snapname, filename); + } + grub_dprintf ("zfs", "alive\n"); + err = get_filesystem_dnode (&(data->mos), fsname, dn, data); + if (err) + { + grub_free (fsname); + grub_free (snapname); + return err; + } + + grub_dprintf ("zfs", "alive\n"); + + headobj = grub_zfs_to_cpu64 (((dsl_dir_phys_t *) DN_BONUS (&dn->dn))->dd_head_dataset_obj, dn->endian); + + grub_dprintf ("zfs", "endian = %d\n", subvol->mdn.endian); + + err = dnode_get (&(data->mos), headobj, 0, &subvol->mdn, data); + if (err) + { + grub_free (fsname); + grub_free (snapname); + return err; + } + grub_dprintf ("zfs", "endian = %d\n", subvol->mdn.endian); + + keychainobj = grub_zfs_to_cpu64 (((dsl_dir_phys_t *) DN_BONUS (&dn->dn))->keychain, dn->endian); + if (grub_zfs_load_key && keychainobj) + { + struct dnode_get_fullpath_ctx ctx = { + .subvol = subvol, + .keyn = 0 + }; + dnode_end_t keychain_dn, props_dn; + grub_uint64_t propsobj; + propsobj = grub_zfs_to_cpu64 (((dsl_dir_phys_t *) DN_BONUS (&dn->dn))->dd_props_zapobj, dn->endian); + + err = dnode_get (&(data->mos), propsobj, DMU_OT_DSL_PROPS, + &props_dn, data); + if (err) + { + grub_free (fsname); + grub_free (snapname); + return err; + } + + err = zap_lookup (&props_dn, "salt", &ctx.salt, data, 0); + if (err == GRUB_ERR_FILE_NOT_FOUND) + { + err = 0; + grub_errno = 0; + ctx.salt = 0; + } + if (err) + { + grub_dprintf ("zfs", "failed here\n"); + return err; + } + + err = dnode_get (&(data->mos), keychainobj, DMU_OT_DSL_KEYCHAIN, + &keychain_dn, data); + if (err) + { + grub_free (fsname); + grub_free (snapname); + return err; + } + subvol->nkeys = 0; + zap_iterate (&keychain_dn, 8, count_zap_keys, &ctx, data); + subvol->keyring = grub_zalloc (subvol->nkeys * sizeof (subvol->keyring[0])); + if (!subvol->keyring) + { + grub_free (fsname); + grub_free (snapname); + return err; + } + zap_iterate (&keychain_dn, 8, load_zap_key, &ctx, data); + } + + if (snapname) + { + grub_uint64_t snapobj; + + snapobj = grub_zfs_to_cpu64 (((dsl_dataset_phys_t *) DN_BONUS (&subvol->mdn.dn))->ds_snapnames_zapobj, subvol->mdn.endian); + + err = dnode_get (&(data->mos), snapobj, + DMU_OT_DSL_DS_SNAP_MAP, &subvol->mdn, data); + if (!err) + err = zap_lookup (&subvol->mdn, snapname, &headobj, data, 0); + if (!err) + err = dnode_get (&(data->mos), headobj, DMU_OT_DSL_DATASET, + &subvol->mdn, data); + if (err) + { + grub_free (fsname); + grub_free (snapname); + return err; + } + } + + subvol->obj = headobj; + + make_mdn (&subvol->mdn, data); + + grub_dprintf ("zfs", "endian = %d\n", subvol->mdn.endian); + + if (*isfs) + { + grub_free (fsname); + grub_free (snapname); + return GRUB_ERR_NONE; + } + err = dnode_get_path (subvol, filename, dn, data); + grub_free (fsname); + grub_free (snapname); + return err; +} + +static int +nvlist_find_value (const char *nvlist_in, const char *name, + int valtype, char **val, + grub_size_t *size_out, grub_size_t *nelm_out) +{ + grub_size_t nvp_name_len, name_len = grub_strlen(name); + int type; + const char *nvpair=NULL,*nvlist=nvlist_in; + char *nvp_name; + + /* Verify if the 1st and 2nd byte in the nvlist are valid. */ + /* NOTE: independently of what endianness header announces all + subsequent values are big-endian. */ + if (nvlist[0] != NV_ENCODE_XDR || (nvlist[1] != NV_LITTLE_ENDIAN + && nvlist[1] != NV_BIG_ENDIAN)) + { + grub_dprintf ("zfs", "incorrect nvlist header\n"); + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist"); + return 0; + } + + /* + * Loop thru the nvpair list + * The XDR representation of an integer is in big-endian byte order. + */ + while ((nvpair=nvlist_next_nvpair(nvlist,nvpair))) + { + nvpair_name(nvpair,&nvp_name, &nvp_name_len); + type = nvpair_type(nvpair); + if (type == valtype + && (nvp_name_len == name_len + || (nvp_name_len > name_len && nvp_name[name_len] == '\0')) + && grub_memcmp (nvp_name, name, name_len) == 0) + { + return nvpair_value(nvpair,val,size_out,nelm_out); + } + } + return 0; +} + +int +grub_zfs_nvlist_lookup_uint64 (const char *nvlist, const char *name, + grub_uint64_t * out) +{ + char *nvpair; + grub_size_t size; + int found; + + found = nvlist_find_value (nvlist, name, DATA_TYPE_UINT64, &nvpair, &size, 0); + if (!found) + return 0; + if (size < sizeof (grub_uint64_t)) + { + grub_error (GRUB_ERR_BAD_FS, "invalid uint64"); + return 0; + } + + *out = grub_be_to_cpu64 (grub_get_unaligned64 (nvpair)); + return 1; +} + +char * +grub_zfs_nvlist_lookup_string (const char *nvlist, const char *name) +{ + char *nvpair; + char *ret; + grub_size_t slen; + grub_size_t size; + int found; + + found = nvlist_find_value (nvlist, name, DATA_TYPE_STRING, &nvpair, &size, 0); + if (!found) + return 0; + if (size < 4) + { + grub_error (GRUB_ERR_BAD_FS, "invalid string"); + return 0; + } + slen = grub_be_to_cpu32 (grub_get_unaligned32 (nvpair)); + if (slen > size - 4) + slen = size - 4; + ret = grub_malloc (slen + 1); + if (!ret) + return 0; + grub_memcpy (ret, nvpair + 4, slen); + ret[slen] = 0; + return ret; +} + +char * +grub_zfs_nvlist_lookup_nvlist (const char *nvlist, const char *name) +{ + char *nvpair; + char *ret; + grub_size_t size; + int found; + + found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST, &nvpair, + &size, 0); + if (!found) + return 0; + ret = grub_zalloc (size + 3 * sizeof (grub_uint32_t)); + if (!ret) + return 0; + grub_memcpy (ret, nvlist, sizeof (grub_uint32_t)); + + grub_memcpy (ret + sizeof (grub_uint32_t), nvpair, size); + return ret; +} + +int +grub_zfs_nvlist_lookup_nvlist_array_get_nelm (const char *nvlist, + const char *name) +{ + char *nvpair; + grub_size_t nelm, size; + int found; + + found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST_ARRAY, &nvpair, + &size, &nelm); + if (! found) + return -1; + return nelm; +} + +static int +get_nvlist_size (const char *beg, const char *limit) +{ + const char *ptr; + grub_uint32_t encode_size; + + ptr = beg + 8; + + while (ptr < limit + && (encode_size = grub_be_to_cpu32 (grub_get_unaligned32 (ptr)))) + ptr += encode_size; /* goto the next nvpair */ + ptr += 8; + return (ptr > limit) ? -1 : (ptr - beg); +} + +char * +grub_zfs_nvlist_lookup_nvlist_array (const char *nvlist, const char *name, + grub_size_t index) +{ + char *nvpair, *nvpairptr; + int found; + char *ret; + grub_size_t size; + unsigned i; + grub_size_t nelm; + int elemsize = 0; + + found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST_ARRAY, &nvpair, + &size, &nelm); + if (!found) + return 0; + if (index >= nelm) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, "trying to lookup past nvlist array"); + return 0; + } + + nvpairptr = nvpair; + + for (i = 0; i < index; i++) + { + int r; + r = get_nvlist_size (nvpairptr, nvpair + size); + + if (r < 0) + { + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist array"); + return NULL; + } + nvpairptr += r; + } + + elemsize = get_nvlist_size (nvpairptr, nvpair + size); + + if (elemsize < 0) + { + grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist array"); + return 0; + } + + ret = grub_zalloc (elemsize + sizeof (grub_uint32_t)); + if (!ret) + return 0; + grub_memcpy (ret, nvlist, sizeof (grub_uint32_t)); + + grub_memcpy (ret + sizeof (grub_uint32_t), nvpairptr, elemsize); + return ret; +} + +static void +unmount_device (struct grub_zfs_device_desc *desc) +{ + unsigned i; + switch (desc->type) + { + case DEVICE_LEAF: + if (!desc->original && desc->dev) + grub_device_close (desc->dev); + return; + case DEVICE_RAIDZ: + case DEVICE_MIRROR: + for (i = 0; i < desc->n_children; i++) + unmount_device (&desc->children[i]); + grub_free (desc->children); + return; + } +} + +static void +zfs_unmount (struct grub_zfs_data *data) +{ + unsigned i; + for (i = 0; i < data->n_devices_attached; i++) + unmount_device (&data->devices_attached[i]); + grub_free (data->devices_attached); + grub_free (data->dnode_buf); + grub_free (data->dnode_mdn); + grub_free (data->file_buf); + for (i = 0; i < data->subvol.nkeys; i++) + grub_crypto_cipher_close (data->subvol.keyring[i].cipher); + grub_free (data->subvol.keyring); + grub_free (data); +} + +/* + * zfs_mount() locates a valid uberblock of the root pool and read in its MOS + * to the memory address MOS. + * + */ +static struct grub_zfs_data * +zfs_mount (grub_device_t dev) +{ + struct grub_zfs_data *data = 0; + grub_err_t err; + void *osp = 0; + grub_size_t ospsize; + grub_zfs_endian_t ub_endian = GRUB_ZFS_UNKNOWN_ENDIAN; + uberblock_t *ub; + int inserted; + + if (! dev->disk) + { + grub_error (GRUB_ERR_BAD_DEVICE, "not a disk"); + return 0; + } + + data = grub_zalloc (sizeof (*data)); + if (!data) + return 0; +#if 0 + /* if it's our first time here, zero the best uberblock out */ + if (data->best_drive == 0 && data->best_part == 0 && find_best_root) + grub_memset (¤t_uberblock, 0, sizeof (uberblock_t)); +#endif + + data->n_devices_allocated = 16; + data->devices_attached = grub_malloc (sizeof (data->devices_attached[0]) + * data->n_devices_allocated); + data->n_devices_attached = 0; + err = scan_disk (dev, data, 1, &inserted); + if (err) + { + zfs_unmount (data); + return NULL; + } + + ub = &(data->current_uberblock); + ub_endian = (grub_zfs_to_cpu64 (ub->ub_magic, + GRUB_ZFS_LITTLE_ENDIAN) == UBERBLOCK_MAGIC + ? GRUB_ZFS_LITTLE_ENDIAN : GRUB_ZFS_BIG_ENDIAN); + + err = zio_read (&ub->ub_rootbp, ub_endian, + &osp, &ospsize, data); + if (err) + { + zfs_unmount (data); + return NULL; + } + + if (ospsize < OBJSET_PHYS_SIZE_V14) + { + grub_error (GRUB_ERR_BAD_FS, "OSP too small"); + grub_free (osp); + zfs_unmount (data); + return NULL; + } + + if (ub->ub_version >= SPA_VERSION_FEATURES && + check_mos_features(&((objset_phys_t *) osp)->os_meta_dnode,ub_endian, + data) != 0) + { + grub_error (GRUB_ERR_BAD_FS, "Unsupported features in pool"); + grub_free (osp); + zfs_unmount (data); + return NULL; + } + + /* Got the MOS. Save it at the memory addr MOS. */ + grub_memmove (&(data->mos.dn), &((objset_phys_t *) osp)->os_meta_dnode, + DNODE_SIZE); + data->mos.endian = (grub_zfs_to_cpu64 (ub->ub_rootbp.blk_prop, + ub_endian) >> 63) & 1; + grub_free (osp); + + return data; +} + +grub_err_t +grub_zfs_fetch_nvlist (grub_device_t dev, char **nvlist) +{ + struct grub_zfs_data *zfs; + grub_err_t err; + + zfs = zfs_mount (dev); + if (!zfs) + return grub_errno; + err = zfs_fetch_nvlist (zfs->device_original, nvlist); + zfs_unmount (zfs); + return err; +} + +static grub_err_t +zfs_label (grub_device_t device, char **label) +{ + char *nvlist; + grub_err_t err; + struct grub_zfs_data *data; + + data = zfs_mount (device); + if (! data) + return grub_errno; + + err = zfs_fetch_nvlist (data->device_original, &nvlist); + if (err) + { + zfs_unmount (data); + return err; + } + + *label = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_POOL_NAME); + grub_free (nvlist); + zfs_unmount (data); + return grub_errno; +} + +static grub_err_t +zfs_uuid (grub_device_t device, char **uuid) +{ + struct grub_zfs_data *data; + + *uuid = 0; + + data = zfs_mount (device); + if (! data) + return grub_errno; + + *uuid = grub_xasprintf ("%016llx", (long long unsigned) data->guid); + zfs_unmount (data); + if (! *uuid) + return grub_errno; + return GRUB_ERR_NONE; +} + +static grub_err_t +zfs_mtime (grub_device_t device, grub_int32_t *mt) +{ + struct grub_zfs_data *data; + grub_zfs_endian_t ub_endian = GRUB_ZFS_UNKNOWN_ENDIAN; + uberblock_t *ub; + + *mt = 0; + + data = zfs_mount (device); + if (! data) + return grub_errno; + + ub = &(data->current_uberblock); + ub_endian = (grub_zfs_to_cpu64 (ub->ub_magic, + GRUB_ZFS_LITTLE_ENDIAN) == UBERBLOCK_MAGIC + ? GRUB_ZFS_LITTLE_ENDIAN : GRUB_ZFS_BIG_ENDIAN); + + *mt = grub_zfs_to_cpu64 (ub->ub_timestamp, ub_endian); + zfs_unmount (data); + return GRUB_ERR_NONE; +} + +/* + * zfs_open() locates a file in the rootpool by following the + * MOS and places the dnode of the file in the memory address DNODE. + */ +static grub_err_t +grub_zfs_open (struct grub_file *file, const char *fsfilename) +{ + struct grub_zfs_data *data; + grub_err_t err; + int isfs; + + data = zfs_mount (file->device); + if (! data) + return grub_errno; + + err = dnode_get_fullpath (fsfilename, &(data->subvol), + &(data->dnode), &isfs, data); + if (err) + { + zfs_unmount (data); + return err; + } + + if (isfs) + { + zfs_unmount (data); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("missing `%c' symbol"), '@'); + } + + /* We found the dnode for this file. Verify if it is a plain file. */ + if (data->dnode.dn.dn_type != DMU_OT_PLAIN_FILE_CONTENTS) + { + zfs_unmount (data); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a regular file")); + } + + /* get the file size and set the file position to 0 */ + + /* + * For DMU_OT_SA we will need to locate the SIZE attribute + * attribute, which could be either in the bonus buffer + * or the "spill" block. + */ + if (data->dnode.dn.dn_bonustype == DMU_OT_SA) + { + void *sahdrp; + int hdrsize; + + if (data->dnode.dn.dn_bonuslen != 0) + { + sahdrp = (sa_hdr_phys_t *) DN_BONUS (&data->dnode.dn); + } + else if (data->dnode.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR) + { + blkptr_t *bp = &data->dnode.dn.dn_spill; + + err = zio_read (bp, data->dnode.endian, &sahdrp, NULL, data); + if (err) + return err; + } + else + { + return grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); + } + + hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); + file->size = grub_zfs_to_cpu64 (grub_get_unaligned64 ((char *) sahdrp + hdrsize + SA_SIZE_OFFSET), data->dnode.endian); + } + else if (data->dnode.dn.dn_bonustype == DMU_OT_ZNODE) + { + file->size = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&data->dnode.dn))->zp_size, data->dnode.endian); + } + else + return grub_error (GRUB_ERR_BAD_FS, "bad bonus type"); + + file->data = data; + file->offset = 0; + +#ifndef GRUB_UTIL + grub_dl_ref (my_mod); +#endif + + return GRUB_ERR_NONE; +} + +static grub_ssize_t +grub_zfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_zfs_data *data = (struct grub_zfs_data *) file->data; + grub_size_t blksz, movesize; + grub_size_t length; + grub_size_t read; + grub_err_t err; + + /* + * If offset is in memory, move it into the buffer provided and return. + */ + if (file->offset >= data->file_start + && file->offset + len <= data->file_end) + { + grub_memmove (buf, data->file_buf + file->offset - data->file_start, + len); + return len; + } + + blksz = grub_zfs_to_cpu16 (data->dnode.dn.dn_datablkszsec, + data->dnode.endian) << SPA_MINBLOCKSHIFT; + + if (blksz == 0) + { + grub_error (GRUB_ERR_BAD_FS, "0-sized block"); + return -1; + } + + /* + * Entire Dnode is too big to fit into the space available. We + * will need to read it in chunks. This could be optimized to + * read in as large a chunk as there is space available, but for + * now, this only reads in one data block at a time. + */ + length = len; + read = 0; + while (length) + { + void *t; + /* + * Find requested blkid and the offset within that block. + */ + grub_uint64_t blkid = grub_divmod64 (file->offset + read, blksz, 0); + grub_free (data->file_buf); + data->file_buf = 0; + + err = dmu_read (&(data->dnode), blkid, &t, + 0, data); + data->file_buf = t; + if (err) + { + data->file_buf = NULL; + data->file_start = data->file_end = 0; + return -1; + } + + data->file_start = blkid * blksz; + data->file_end = data->file_start + blksz; + + movesize = data->file_end - file->offset - read; + if (movesize > length) + movesize = length; + + grub_memmove (buf, data->file_buf + file->offset + read + - data->file_start, movesize); + buf += movesize; + length -= movesize; + read += movesize; + } + + return len; +} + +static grub_err_t +grub_zfs_close (grub_file_t file) +{ + zfs_unmount ((struct grub_zfs_data *) file->data); + +#ifndef GRUB_UTIL + grub_dl_unref (my_mod); +#endif + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_zfs_getmdnobj (grub_device_t dev, const char *fsfilename, + grub_uint64_t *mdnobj) +{ + struct grub_zfs_data *data; + grub_err_t err; + int isfs; + + data = zfs_mount (dev); + if (! data) + return grub_errno; + + err = dnode_get_fullpath (fsfilename, &(data->subvol), + &(data->dnode), &isfs, data); + *mdnobj = data->subvol.obj; + zfs_unmount (data); + return err; +} + +static grub_err_t +fill_fs_info (struct grub_dirhook_info *info, + dnode_end_t mdn, struct grub_zfs_data *data) +{ + grub_err_t err; + dnode_end_t dn; + grub_uint64_t objnum; + grub_uint64_t headobj; + + grub_memset (info, 0, sizeof (*info)); + + info->dir = 1; + + if (mdn.dn.dn_type == DMU_OT_DSL_DIR) + { + headobj = grub_zfs_to_cpu64 (((dsl_dir_phys_t *) DN_BONUS (&mdn.dn))->dd_head_dataset_obj, mdn.endian); + + err = dnode_get (&(data->mos), headobj, 0, &mdn, data); + if (err) + { + grub_dprintf ("zfs", "failed here\n"); + return err; + } + } + err = make_mdn (&mdn, data); + if (err) + return err; + err = dnode_get (&mdn, MASTER_NODE_OBJ, DMU_OT_MASTER_NODE, + &dn, data); + if (err) + { + grub_dprintf ("zfs", "failed here\n"); + return err; + } + + err = zap_lookup (&dn, ZFS_ROOT_OBJ, &objnum, data, 0); + if (err) + { + grub_dprintf ("zfs", "failed here\n"); + return err; + } + + err = dnode_get (&mdn, objnum, 0, &dn, data); + if (err) + { + grub_dprintf ("zfs", "failed here\n"); + return err; + } + + if (dn.dn.dn_bonustype == DMU_OT_SA) + { + void *sahdrp; + int hdrsize; + + if (dn.dn.dn_bonuslen != 0) + { + sahdrp = (sa_hdr_phys_t *) DN_BONUS (&dn.dn); + } + else if (dn.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR) + { + blkptr_t *bp = &dn.dn.dn_spill; + + err = zio_read (bp, dn.endian, &sahdrp, NULL, data); + if (err) + return err; + } + else + { + grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); + return grub_errno; + } + + hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); + info->mtimeset = 1; + info->mtime = grub_zfs_to_cpu64 (grub_get_unaligned64 ((char *) sahdrp + hdrsize + SA_MTIME_OFFSET), dn.endian); + } + + if (dn.dn.dn_bonustype == DMU_OT_ZNODE) + { + info->mtimeset = 1; + info->mtime = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dn.dn))->zp_mtime[0], dn.endian); + } + return 0; +} + +/* Helper for grub_zfs_dir. */ +static int +iterate_zap (const char *name, grub_uint64_t val, struct grub_zfs_dir_ctx *ctx) +{ + grub_err_t err; + struct grub_dirhook_info info; + + dnode_end_t dn; + grub_memset (&info, 0, sizeof (info)); + + err = dnode_get (&(ctx->data->subvol.mdn), val, 0, &dn, ctx->data); + if (err) + { + grub_print_error (); + return 0; + } + + if (dn.dn.dn_bonustype == DMU_OT_SA) + { + void *sahdrp; + int hdrsize; + + if (dn.dn.dn_bonuslen != 0) + { + sahdrp = (sa_hdr_phys_t *) DN_BONUS (&ctx->data->dnode.dn); + } + else if (dn.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR) + { + blkptr_t *bp = &dn.dn.dn_spill; + + err = zio_read (bp, dn.endian, &sahdrp, NULL, ctx->data); + if (err) + { + grub_print_error (); + return 0; + } + } + else + { + grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); + grub_print_error (); + return 0; + } + + hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); + info.mtimeset = 1; + info.mtime = grub_zfs_to_cpu64 (grub_get_unaligned64 ((char *) sahdrp + hdrsize + SA_MTIME_OFFSET), dn.endian); + info.case_insensitive = ctx->data->subvol.case_insensitive; + } + + if (dn.dn.dn_bonustype == DMU_OT_ZNODE) + { + info.mtimeset = 1; + info.mtime = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dn.dn))->zp_mtime[0], + dn.endian); + } + info.dir = (dn.dn.dn_type == DMU_OT_DIRECTORY_CONTENTS); + grub_dprintf ("zfs", "type=%d, name=%s\n", + (int)dn.dn.dn_type, (char *)name); + return ctx->hook (name, &info, ctx->hook_data); +} + +/* Helper for grub_zfs_dir. */ +static int +iterate_zap_fs (const char *name, grub_uint64_t val, + struct grub_zfs_dir_ctx *ctx) +{ + grub_err_t err; + struct grub_dirhook_info info; + + dnode_end_t mdn; + err = dnode_get (&(ctx->data->mos), val, 0, &mdn, ctx->data); + if (err) + { + grub_errno = 0; + return 0; + } + if (mdn.dn.dn_type != DMU_OT_DSL_DIR) + return 0; + + err = fill_fs_info (&info, mdn, ctx->data); + if (err) + { + grub_errno = 0; + return 0; + } + return ctx->hook (name, &info, ctx->hook_data); +} + +/* Helper for grub_zfs_dir. */ +static int +iterate_zap_snap (const char *name, grub_uint64_t val, + struct grub_zfs_dir_ctx *ctx) +{ + grub_err_t err; + struct grub_dirhook_info info; + char *name2; + int ret; + + dnode_end_t mdn; + + err = dnode_get (&(ctx->data->mos), val, 0, &mdn, ctx->data); + if (err) + { + grub_errno = 0; + return 0; + } + + if (mdn.dn.dn_type != DMU_OT_DSL_DATASET) + return 0; + + err = fill_fs_info (&info, mdn, ctx->data); + if (err) + { + grub_errno = 0; + return 0; + } + + name2 = grub_malloc (grub_strlen (name) + 2); + name2[0] = '@'; + grub_memcpy (name2 + 1, name, grub_strlen (name) + 1); + ret = ctx->hook (name2, &info, ctx->hook_data); + grub_free (name2); + return ret; +} + +static grub_err_t +grub_zfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + struct grub_zfs_dir_ctx ctx = { + .hook = hook, + .hook_data = hook_data + }; + struct grub_zfs_data *data; + grub_err_t err; + int isfs; + + data = zfs_mount (device); + if (! data) + return grub_errno; + err = dnode_get_fullpath (path, &(data->subvol), &(data->dnode), &isfs, data); + if (err) + { + zfs_unmount (data); + return err; + } + ctx.data = data; + + if (isfs) + { + grub_uint64_t childobj, headobj; + grub_uint64_t snapobj; + dnode_end_t dn; + struct grub_dirhook_info info; + + err = fill_fs_info (&info, data->dnode, data); + if (err) + { + zfs_unmount (data); + return err; + } + if (hook ("@", &info, hook_data)) + { + zfs_unmount (data); + return GRUB_ERR_NONE; + } + + childobj = grub_zfs_to_cpu64 (((dsl_dir_phys_t *) DN_BONUS (&data->dnode.dn))->dd_child_dir_zapobj, data->dnode.endian); + headobj = grub_zfs_to_cpu64 (((dsl_dir_phys_t *) DN_BONUS (&data->dnode.dn))->dd_head_dataset_obj, data->dnode.endian); + err = dnode_get (&(data->mos), childobj, + DMU_OT_DSL_DIR_CHILD_MAP, &dn, data); + if (err) + { + zfs_unmount (data); + return err; + } + + zap_iterate_u64 (&dn, iterate_zap_fs, data, &ctx); + + err = dnode_get (&(data->mos), headobj, DMU_OT_DSL_DATASET, &dn, data); + if (err) + { + zfs_unmount (data); + return err; + } + + snapobj = grub_zfs_to_cpu64 (((dsl_dataset_phys_t *) DN_BONUS (&dn.dn))->ds_snapnames_zapobj, dn.endian); + + err = dnode_get (&(data->mos), snapobj, + DMU_OT_DSL_DS_SNAP_MAP, &dn, data); + if (err) + { + zfs_unmount (data); + return err; + } + + zap_iterate_u64 (&dn, iterate_zap_snap, data, &ctx); + } + else + { + if (data->dnode.dn.dn_type != DMU_OT_DIRECTORY_CONTENTS) + { + zfs_unmount (data); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory")); + } + zap_iterate_u64 (&(data->dnode), iterate_zap, data, &ctx); + } + zfs_unmount (data); + return grub_errno; +} + +static int +check_feature (const char *name, grub_uint64_t val, + struct grub_zfs_dir_ctx *ctx __attribute__((unused))) +{ + int i; + if (val == 0) + return 0; + if (name[0] == 0) + return 0; + for (i = 0; spa_feature_names[i] != NULL; i++) + if (grub_strcmp (name, spa_feature_names[i]) == 0) + return 0; + return 1; +} + +/* + * Checks whether the MOS features that are active are supported by this + * (GRUB's) implementation of ZFS. + * + * Return: + * 0: Success. + * errnum: Failure. + */ + +static grub_err_t +check_mos_features(dnode_phys_t *mosmdn_phys,grub_zfs_endian_t endian,struct grub_zfs_data* data ) +{ + grub_uint64_t objnum; + grub_err_t errnum = 0; + dnode_end_t dn,mosmdn; + mzap_phys_t* mzp; + grub_zfs_endian_t endianzap; + int size; + grub_memmove(&(mosmdn.dn),mosmdn_phys,sizeof(dnode_phys_t)); + mosmdn.endian=endian; + errnum = dnode_get(&mosmdn, DMU_POOL_DIRECTORY_OBJECT, + DMU_OT_OBJECT_DIRECTORY, &dn,data); + if (errnum != 0) + return errnum; + + /* + * Find the object number for 'features_for_read' and retrieve its + * corresponding dnode. Note that we don't check features_for_write + * because GRUB is not opening the pool for write. + */ + errnum = zap_lookup(&dn, DMU_POOL_FEATURES_FOR_READ, &objnum, data,0); + if (errnum != 0) + return errnum; + + errnum = dnode_get(&mosmdn, objnum, DMU_OTN_ZAP_METADATA, &dn, data); + if (errnum != 0) + return errnum; + + errnum = dmu_read(&dn, 0, (void**)&mzp, &endianzap,data); + if (errnum != 0) + return errnum; + + size = grub_zfs_to_cpu16 (dn.dn.dn_datablkszsec, dn.endian) << SPA_MINBLOCKSHIFT; + return mzap_iterate (mzp,endianzap, size, check_feature,NULL); +} + + +#ifdef GRUB_UTIL +static grub_err_t +grub_zfs_embed (grub_device_t device __attribute__ ((unused)), + unsigned int *nsectors, + unsigned int max_nsectors, + grub_embed_type_t embed_type, + grub_disk_addr_t **sectors) +{ + unsigned i; + + if (embed_type != GRUB_EMBED_PCBIOS) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "ZFS currently supports only PC-BIOS embedding"); + + if ((VDEV_BOOT_SIZE >> GRUB_DISK_SECTOR_BITS) < *nsectors) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("your core.img is unusually large. " + "It won't fit in the embedding area")); + + *nsectors = (VDEV_BOOT_SIZE >> GRUB_DISK_SECTOR_BITS); + if (*nsectors > max_nsectors) + *nsectors = max_nsectors; + *sectors = grub_malloc (*nsectors * sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) + (*sectors)[i] = i + (VDEV_BOOT_OFFSET >> GRUB_DISK_SECTOR_BITS); + + return GRUB_ERR_NONE; +} +#endif + +static struct grub_fs grub_zfs_fs = { + .name = "zfs", + .dir = grub_zfs_dir, + .open = grub_zfs_open, + .read = grub_zfs_read, + .close = grub_zfs_close, + .label = zfs_label, + .uuid = zfs_uuid, + .mtime = zfs_mtime, +#ifdef GRUB_UTIL + .embed = grub_zfs_embed, + .reserved_first_sector = 1, + .blocklist_install = 0, +#endif + .next = 0 +}; + +GRUB_MOD_INIT (zfs) +{ + COMPILE_TIME_ASSERT (sizeof (zap_leaf_chunk_t) == ZAP_LEAF_CHUNKSIZE); + grub_fs_register (&grub_zfs_fs); +#ifndef GRUB_UTIL + my_mod = mod; +#endif +} + +GRUB_MOD_FINI (zfs) +{ + grub_fs_unregister (&grub_zfs_fs); +} diff --git a/grub-core/fs/zfs/zfs_fletcher.c b/grub-core/fs/zfs/zfs_fletcher.c new file mode 100644 index 000000000..7d27b053d --- /dev/null +++ b/grub-core/fs/zfs/zfs_fletcher.c @@ -0,0 +1,84 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2009 Free Software Foundation, Inc. + * Copyright 2007 Sun Microsystems, Inc. + * + * GRUB is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void +fletcher_2(const void *buf, grub_uint64_t size, grub_zfs_endian_t endian, + zio_cksum_t *zcp) +{ + const grub_uint64_t *ip = buf; + const grub_uint64_t *ipend = ip + (size / sizeof (grub_uint64_t)); + grub_uint64_t a0, b0, a1, b1; + + for (a0 = b0 = a1 = b1 = 0; ip < ipend; ip += 2) + { + a0 += grub_zfs_to_cpu64 (ip[0], endian); + a1 += grub_zfs_to_cpu64 (ip[1], endian); + b0 += a0; + b1 += a1; + } + + zcp->zc_word[0] = grub_cpu_to_zfs64 (a0, endian); + zcp->zc_word[1] = grub_cpu_to_zfs64 (a1, endian); + zcp->zc_word[2] = grub_cpu_to_zfs64 (b0, endian); + zcp->zc_word[3] = grub_cpu_to_zfs64 (b1, endian); +} + +void +fletcher_4 (const void *buf, grub_uint64_t size, grub_zfs_endian_t endian, + zio_cksum_t *zcp) +{ + const grub_uint32_t *ip = buf; + const grub_uint32_t *ipend = ip + (size / sizeof (grub_uint32_t)); + grub_uint64_t a, b, c, d; + + for (a = b = c = d = 0; ip < ipend; ip++) + { + a += grub_zfs_to_cpu32 (ip[0], endian);; + b += a; + c += b; + d += c; + } + + zcp->zc_word[0] = grub_cpu_to_zfs64 (a, endian); + zcp->zc_word[1] = grub_cpu_to_zfs64 (b, endian); + zcp->zc_word[2] = grub_cpu_to_zfs64 (c, endian); + zcp->zc_word[3] = grub_cpu_to_zfs64 (d, endian); +} + diff --git a/grub-core/fs/zfs/zfs_lz4.c b/grub-core/fs/zfs/zfs_lz4.c new file mode 100644 index 000000000..2f73449f0 --- /dev/null +++ b/grub-core/fs/zfs/zfs_lz4.c @@ -0,0 +1,286 @@ +/* + * LZ4 - Fast LZ compression algorithm + * Header File + * Copyright (C) 2011-2013, Yann Collet. + * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You can contact the author at : + * - LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html + * - LZ4 source repository : http://code.google.com/p/lz4/ + */ + +#include +#include +#include +#include + +static int LZ4_uncompress_unknownOutputSize(const char *source, char *dest, + int isize, int maxOutputSize); + +/* + * CPU Feature Detection + */ + +/* 32 or 64 bits ? */ +#if (GRUB_CPU_SIZEOF_VOID_P == 8) +#define LZ4_ARCH64 1 +#else +#define LZ4_ARCH64 0 +#endif + +/* + * Compiler Options + */ + + +#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) + +#if (GCC_VERSION >= 302) || (defined (__INTEL_COMPILER) && __INTEL_COMPILER >= 800) || defined(__clang__) +#define expect(expr, value) (__builtin_expect((expr), (value))) +#else +#define expect(expr, value) (expr) +#endif + +#define likely(expr) expect((expr) != 0, 1) +#define unlikely(expr) expect((expr) != 0, 0) + +/* Basic types */ +#define BYTE grub_uint8_t +#define U16 grub_uint16_t +#define U32 grub_uint32_t +#define S32 grub_int32_t +#define U64 grub_uint64_t +typedef grub_size_t size_t; + +typedef struct _U16_S { + U16 v; +} GRUB_PACKED U16_S; +typedef struct _U32_S { + U32 v; +} GRUB_PACKED U32_S; +typedef struct _U64_S { + U64 v; +} GRUB_PACKED U64_S; + +#define A64(x) (((U64_S *)(x))->v) +#define A32(x) (((U32_S *)(x))->v) +#define A16(x) (((U16_S *)(x))->v) + +/* + * Constants + */ +#define MINMATCH 4 + +#define COPYLENGTH 8 +#define LASTLITERALS 5 + +#define ML_BITS 4 +#define ML_MASK ((1U< s_len) + return grub_error(GRUB_ERR_BAD_FS,"lz4 decompression failed."); + + /* + * Returns 0 on success (decompression function returned non-negative) + * and appropriate error on failure (decompression function returned negative). + */ + return (LZ4_uncompress_unknownOutputSize((char*)s_start + 4, d_start, bufsiz, + d_len) < 0)?grub_error(GRUB_ERR_BAD_FS,"lz4 decompression failed."):0; +} + +static int +LZ4_uncompress_unknownOutputSize(const char *source, + char *dest, int isize, int maxOutputSize) +{ + /* Local Variables */ + const BYTE * ip = (const BYTE *) source; + const BYTE *const iend = ip + isize; + const BYTE * ref; + + BYTE * op = (BYTE *) dest; + BYTE *const oend = op + maxOutputSize; + BYTE *cpy; + + size_t dec[] = { 0, 3, 2, 3, 0, 0, 0, 0 }; + + /* Main Loop */ + while (ip < iend) { + BYTE token; + int length; + + /* get runlength */ + token = *ip++; + if ((length = (token >> ML_BITS)) == RUN_MASK) { + int s = 255; + while ((ip < iend) && (s == 255)) { + s = *ip++; + length += s; + } + } + /* copy literals */ + if ((grub_addr_t) length > ~(grub_addr_t)op) + goto _output_error; + cpy = op + length; + if ((cpy > oend - COPYLENGTH) || + (ip + length > iend - COPYLENGTH)) { + if (cpy > oend) + /* + * Error: request to write beyond destination + * buffer. + */ + goto _output_error; + if (ip + length > iend) + /* + * Error : request to read beyond source + * buffer. + */ + goto _output_error; + grub_memcpy(op, ip, length); + op += length; + ip += length; + if (ip < iend) + /* Error : LZ4 format violation */ + goto _output_error; + /* Necessarily EOF, due to parsing restrictions. */ + break; + } + LZ4_WILDCOPY(ip, op, cpy); + ip -= (op - cpy); + op = cpy; + + /* get offset */ + LZ4_READ_LITTLEENDIAN_16(ref, cpy, ip); + ip += 2; + if (ref < (BYTE * const) dest) + /* + * Error: offset creates reference outside of + * destination buffer. + */ + goto _output_error; + + /* get matchlength */ + if ((length = (token & ML_MASK)) == ML_MASK) { + while (ip < iend) { + int s = *ip++; + length += s; + if (s == 255) + continue; + break; + } + } + /* copy repeated sequence */ + if unlikely(op - ref < STEPSIZE) { +#if LZ4_ARCH64 + size_t dec2table[] = { 0, 0, 0, -1, 0, 1, 2, 3 }; + size_t dec2 = dec2table[op - ref]; +#else + const int dec2 = 0; +#endif + *op++ = *ref++; + *op++ = *ref++; + *op++ = *ref++; + *op++ = *ref++; + ref -= dec[op - ref]; + A32(op) = A32(ref); + op += STEPSIZE - 4; + ref -= dec2; + } else { + LZ4_COPYSTEP(ref, op); + } + cpy = op + length - (STEPSIZE - 4); + if (cpy > oend - COPYLENGTH) { + if (cpy > oend) + /* + * Error: request to write outside of + * destination buffer. + */ + goto _output_error; + LZ4_SECURECOPY(ref, op, (oend - COPYLENGTH)); + while (op < cpy) + *op++ = *ref++; + op = cpy; + if (op == oend) + /* + * Check EOF (should never happen, since last + * 5 bytes are supposed to be literals). + */ + break; + continue; + } + LZ4_SECURECOPY(ref, op, cpy); + op = cpy; /* correction */ + } + + /* end of decoding */ + return (int)(((char *)op) - dest); + + /* write overflow error detected */ + _output_error: + return (int)(-(((char *)ip) - source)); +} diff --git a/grub-core/fs/zfs/zfs_lzjb.c b/grub-core/fs/zfs/zfs_lzjb.c new file mode 100644 index 000000000..62b5ea6a0 --- /dev/null +++ b/grub-core/fs/zfs/zfs_lzjb.c @@ -0,0 +1,93 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2009 Free Software Foundation, Inc. + * Copyright 2007 Sun Microsystems, Inc. + * + * GRUB is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MATCH_BITS 6 +#define MATCH_MIN 3 +#define OFFSET_MASK ((1 << (16 - MATCH_BITS)) - 1) + +/* + * Decompression Entry - lzjb + */ +#ifndef NBBY +#define NBBY 8 +#endif + +grub_err_t +lzjb_decompress (void *s_start, void *d_start, grub_size_t s_len, + grub_size_t d_len); + +grub_err_t +lzjb_decompress (void *s_start, void *d_start, grub_size_t s_len, + grub_size_t d_len) +{ + grub_uint8_t *src = s_start; + grub_uint8_t *dst = d_start; + grub_uint8_t *d_end = (grub_uint8_t *) d_start + d_len; + grub_uint8_t *s_end = (grub_uint8_t *) s_start + s_len; + grub_uint8_t *cpy, copymap = 0; + int copymask = 1 << (NBBY - 1); + + while (dst < d_end && src < s_end) + { + if ((copymask <<= 1) == (1 << NBBY)) + { + copymask = 1; + copymap = *src++; + } + if (src >= s_end) + return grub_error (GRUB_ERR_BAD_FS, "lzjb decompression failed"); + if (copymap & copymask) + { + int mlen = (src[0] >> (NBBY - MATCH_BITS)) + MATCH_MIN; + int offset = ((src[0] << NBBY) | src[1]) & OFFSET_MASK; + src += 2; + cpy = dst - offset; + if (src > s_end || cpy < (grub_uint8_t *) d_start) + return grub_error (GRUB_ERR_BAD_FS, "lzjb decompression failed"); + while (--mlen >= 0 && dst < d_end) + *dst++ = *cpy++; + } + else + *dst++ = *src++; + } + if (dst < d_end) + return grub_error (GRUB_ERR_BAD_FS, "lzjb decompression failed"); + return GRUB_ERR_NONE; +} diff --git a/grub-core/fs/zfs/zfs_sha256.c b/grub-core/fs/zfs/zfs_sha256.c new file mode 100644 index 000000000..a181f076c --- /dev/null +++ b/grub-core/fs/zfs/zfs_sha256.c @@ -0,0 +1,143 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2009 Free Software Foundation, Inc. + * Copyright 2007 Sun Microsystems, Inc. + * + * GRUB is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * SHA-256 checksum, as specified in FIPS 180-2, available at: + * http://csrc.nist.gov/cryptval + * + * This is a very compact implementation of SHA-256. + * It is designed to be simple and portable, not to be fast. + */ + +/* + * The literal definitions according to FIPS180-2 would be: + * + * Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z))) + * Maj(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) + * + * We use logical equivalents which require one less op. + */ +#define Ch(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define Maj(x, y, z) (((x) & (y)) ^ ((z) & ((x) ^ (y)))) +#define Rot32(x, s) (((x) >> s) | ((x) << (32 - s))) +#define SIGMA0(x) (Rot32(x, 2) ^ Rot32(x, 13) ^ Rot32(x, 22)) +#define SIGMA1(x) (Rot32(x, 6) ^ Rot32(x, 11) ^ Rot32(x, 25)) +#define sigma0(x) (Rot32(x, 7) ^ Rot32(x, 18) ^ ((x) >> 3)) +#define sigma1(x) (Rot32(x, 17) ^ Rot32(x, 19) ^ ((x) >> 10)) + +static const grub_uint32_t SHA256_K[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +}; + +static void +SHA256Transform(grub_uint32_t *H, const grub_uint8_t *cp) +{ + grub_uint32_t a, b, c, d, e, f, g, h, t, T1, T2, W[64]; + + for (t = 0; t < 16; t++, cp += 4) + W[t] = (cp[0] << 24) | (cp[1] << 16) | (cp[2] << 8) | cp[3]; + + for (t = 16; t < 64; t++) + W[t] = sigma1(W[t - 2]) + W[t - 7] + + sigma0(W[t - 15]) + W[t - 16]; + + a = H[0]; b = H[1]; c = H[2]; d = H[3]; + e = H[4]; f = H[5]; g = H[6]; h = H[7]; + + for (t = 0; t < 64; t++) { + T1 = h + SIGMA1(e) + Ch(e, f, g) + SHA256_K[t] + W[t]; + T2 = SIGMA0(a) + Maj(a, b, c); + h = g; g = f; f = e; e = d + T1; + d = c; c = b; b = a; a = T1 + T2; + } + + H[0] += a; H[1] += b; H[2] += c; H[3] += d; + H[4] += e; H[5] += f; H[6] += g; H[7] += h; +} + +void +zio_checksum_SHA256(const void *buf, grub_uint64_t size, + grub_zfs_endian_t endian, zio_cksum_t *zcp) +{ + grub_uint32_t H[8] = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 }; + grub_uint8_t pad[128]; + unsigned padsize = size & 63; + unsigned i; + + for (i = 0; i < size - padsize; i += 64) + SHA256Transform(H, (grub_uint8_t *)buf + i); + + for (i = 0; i < padsize; i++) + pad[i] = ((grub_uint8_t *)buf)[i]; + + for (pad[padsize++] = 0x80; (padsize & 63) != 56; padsize++) + pad[padsize] = 0; + + for (i = 0; i < 8; i++) + pad[padsize++] = (size << 3) >> (56 - 8 * i); + + for (i = 0; i < padsize && i <= 64; i += 64) + SHA256Transform(H, pad + i); + + zcp->zc_word[0] = grub_cpu_to_zfs64 ((grub_uint64_t)H[0] << 32 | H[1], + endian); + zcp->zc_word[1] = grub_cpu_to_zfs64 ((grub_uint64_t)H[2] << 32 | H[3], + endian); + zcp->zc_word[2] = grub_cpu_to_zfs64 ((grub_uint64_t)H[4] << 32 | H[5], + endian); + zcp->zc_word[3] = grub_cpu_to_zfs64 ((grub_uint64_t)H[6] << 32 | H[7], + endian); +} diff --git a/grub-core/fs/zfs/zfscrypt.c b/grub-core/fs/zfs/zfscrypt.c new file mode 100644 index 000000000..87eef621d --- /dev/null +++ b/grub-core/fs/zfs/zfscrypt.c @@ -0,0 +1,486 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* + Mostly based on following article: + https://blogs.oracle.com/darren/entry/zfs_encryption_what_is_on + */ + +enum grub_zfs_algo + { + GRUB_ZFS_ALGO_CCM, + GRUB_ZFS_ALGO_GCM, + }; + +struct grub_zfs_key +{ + grub_uint64_t algo; + grub_uint8_t enc_nonce[13]; + grub_uint8_t unused[3]; + grub_uint8_t enc_key[48]; + grub_uint8_t unknown_purpose_nonce[13]; + grub_uint8_t unused2[3]; + grub_uint8_t unknown_purpose_key[48]; +}; + +struct grub_zfs_wrap_key +{ + struct grub_zfs_wrap_key *next; + grub_size_t keylen; + int is_passphrase; + grub_uint64_t key[0]; +}; + +static struct grub_zfs_wrap_key *zfs_wrap_keys; + +grub_err_t +grub_zfs_add_key (grub_uint8_t *key_in, + grub_size_t keylen, + int passphrase) +{ + struct grub_zfs_wrap_key *key; + if (!passphrase && keylen > 32) + keylen = 32; + key = grub_malloc (sizeof (*key) + keylen); + if (!key) + return grub_errno; + key->is_passphrase = passphrase; + key->keylen = keylen; + grub_memcpy (key->key, key_in, keylen); + key->next = zfs_wrap_keys; + zfs_wrap_keys = key; + return GRUB_ERR_NONE; +} + +static gcry_err_code_t +grub_ccm_decrypt (grub_crypto_cipher_handle_t cipher, + grub_uint8_t *out, const grub_uint8_t *in, + grub_size_t psize, + void *mac_out, const void *nonce, + unsigned l, unsigned m) +{ + grub_uint8_t iv[16]; + grub_uint8_t mul[16]; + grub_uint32_t mac[4]; + unsigned i, j; + gcry_err_code_t err; + + grub_memcpy (iv + 1, nonce, 15 - l); + + iv[0] = (l - 1) | (((m-2) / 2) << 3); + for (j = 0; j < l; j++) + iv[15 - j] = psize >> (8 * j); + err = grub_crypto_ecb_encrypt (cipher, mac, iv, 16); + if (err) + return err; + + iv[0] = l - 1; + + for (i = 0; i < (psize + 15) / 16; i++) + { + grub_size_t csize; + csize = 16; + if (csize > psize - 16 * i) + csize = psize - 16 * i; + for (j = 0; j < l; j++) + iv[15 - j] = (i + 1) >> (8 * j); + err = grub_crypto_ecb_encrypt (cipher, mul, iv, 16); + if (err) + return err; + grub_crypto_xor (out + 16 * i, in + 16 * i, mul, csize); + grub_crypto_xor (mac, mac, out + 16 * i, csize); + err = grub_crypto_ecb_encrypt (cipher, mac, mac, 16); + if (err) + return err; + } + for (j = 0; j < l; j++) + iv[15 - j] = 0; + err = grub_crypto_ecb_encrypt (cipher, mul, iv, 16); + if (err) + return err; + if (mac_out) + grub_crypto_xor (mac_out, mac, mul, m); + return GPG_ERR_NO_ERROR; +} + +static void +grub_gcm_mul_x (grub_uint8_t *a) +{ + int i; + int c = 0, d = 0; + for (i = 0; i < 16; i++) + { + c = a[i] & 0x1; + a[i] = (a[i] >> 1) | (d << 7); + d = c; + } + if (d) + a[0] ^= 0xe1; +} + +static void +grub_gcm_mul (grub_uint8_t *a, const grub_uint8_t *b) +{ + grub_uint8_t res[16], bs[16]; + int i; + grub_memcpy (bs, b, 16); + grub_memset (res, 0, 16); + for (i = 0; i < 128; i++) + { + if ((a[i / 8] << (i % 8)) & 0x80) + grub_crypto_xor (res, res, bs, 16); + grub_gcm_mul_x (bs); + } + + grub_memcpy (a, res, 16); +} + +static gcry_err_code_t +grub_gcm_decrypt (grub_crypto_cipher_handle_t cipher, + grub_uint8_t *out, const grub_uint8_t *in, + grub_size_t psize, + void *mac_out, const void *nonce, + unsigned nonce_len, unsigned m) +{ + grub_uint8_t iv[16]; + grub_uint8_t mul[16]; + grub_uint8_t mac[16], h[16], mac_xor[16]; + unsigned i, j; + gcry_err_code_t err; + + grub_memset (mac, 0, sizeof (mac)); + + err = grub_crypto_ecb_encrypt (cipher, h, mac, 16); + if (err) + return err; + + if (nonce_len == 12) + { + grub_memcpy (iv, nonce, 12); + iv[12] = 0; + iv[13] = 0; + iv[14] = 0; + iv[15] = 1; + } + else + { + grub_memset (iv, 0, sizeof (iv)); + grub_memcpy (iv, nonce, nonce_len); + grub_gcm_mul (iv, h); + iv[15] ^= nonce_len * 8; + grub_gcm_mul (iv, h); + } + + err = grub_crypto_ecb_encrypt (cipher, mac_xor, iv, 16); + if (err) + return err; + + for (i = 0; i < (psize + 15) / 16; i++) + { + grub_size_t csize; + csize = 16; + if (csize > psize - 16 * i) + csize = psize - 16 * i; + for (j = 0; j < 4; j++) + { + iv[15 - j]++; + if (iv[15 - j] != 0) + break; + } + grub_crypto_xor (mac, mac, in + 16 * i, csize); + grub_gcm_mul (mac, h); + err = grub_crypto_ecb_encrypt (cipher, mul, iv, 16); + if (err) + return err; + grub_crypto_xor (out + 16 * i, in + 16 * i, mul, csize); + } + for (j = 0; j < 8; j++) + mac[15 - j] ^= ((((grub_uint64_t) psize) * 8) >> (8 * j)); + grub_gcm_mul (mac, h); + + if (mac_out) + grub_crypto_xor (mac_out, mac, mac_xor, m); + + return GPG_ERR_NO_ERROR; +} + + +static gcry_err_code_t +algo_decrypt (grub_crypto_cipher_handle_t cipher, grub_uint64_t algo, + grub_uint8_t *out, const grub_uint8_t *in, + grub_size_t psize, + void *mac_out, const void *nonce, + unsigned l, unsigned m) +{ + switch (algo) + { + case 0: + return grub_ccm_decrypt (cipher, out, in, psize, + mac_out, nonce, l, m); + case 1: + return grub_gcm_decrypt (cipher, out, in, psize, + mac_out, nonce, + 15 - l, m); + default: + return GPG_ERR_CIPHER_ALGO; + } +} + +static grub_err_t +grub_zfs_decrypt_real (grub_crypto_cipher_handle_t cipher, + grub_uint64_t algo, + void *nonce, + char *buf, grub_size_t size, + const grub_uint32_t *expected_mac, + grub_zfs_endian_t endian) +{ + grub_uint32_t mac[4]; + unsigned i; + grub_uint32_t sw[4]; + gcry_err_code_t err; + + grub_memcpy (sw, nonce, 16); + if (endian != GRUB_ZFS_BIG_ENDIAN) + for (i = 0; i < 4; i++) + sw[i] = grub_swap_bytes32 (sw[i]); + + if (!cipher) + return grub_error (GRUB_ERR_ACCESS_DENIED, + N_("no decryption key available")); + err = algo_decrypt (cipher, algo, + (grub_uint8_t *) buf, + (grub_uint8_t *) buf, + size, mac, + sw + 1, 3, 12); + if (err) + return grub_crypto_gcry_error (err); + + for (i = 0; i < 3; i++) + if (grub_zfs_to_cpu32 (expected_mac[i], endian) + != grub_be_to_cpu32 (mac[i])) + return grub_error (GRUB_ERR_BAD_FS, N_("MAC verification failed")); + return GRUB_ERR_NONE; +} + +static grub_crypto_cipher_handle_t +grub_zfs_load_key_real (const struct grub_zfs_key *key, + grub_size_t keysize, + grub_uint64_t salt, + grub_uint64_t algo) +{ + unsigned keylen; + struct grub_zfs_wrap_key *wrap_key; + grub_crypto_cipher_handle_t ret = NULL; + + if (keysize != sizeof (*key)) + { + grub_dprintf ("zfs", "Unexpected key size %" PRIuGRUB_SIZE "\n", keysize); + return 0; + } + + if (grub_memcmp (key->enc_key + 32, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) + == 0) + keylen = 16; + else if (grub_memcmp (key->enc_key + 40, "\0\0\0\0\0\0\0\0", 8) == 0) + keylen = 24; + else + keylen = 32; + + for (wrap_key = zfs_wrap_keys; wrap_key; wrap_key = wrap_key->next) + { + grub_crypto_cipher_handle_t cipher; + grub_uint8_t decrypted[32], mac[32], wrap_key_real[32]; + gcry_err_code_t err; + cipher = grub_crypto_cipher_open (GRUB_CIPHER_AES); + if (!cipher) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + grub_memset (wrap_key_real, 0, sizeof (wrap_key_real)); + err = 0; + if (!wrap_key->is_passphrase) + grub_memcpy(wrap_key_real, wrap_key->key, + wrap_key->keylen < keylen ? wrap_key->keylen : keylen); + else + err = grub_crypto_pbkdf2 (GRUB_MD_SHA1, + (const grub_uint8_t *) wrap_key->key, + wrap_key->keylen, + (const grub_uint8_t *) &salt, sizeof (salt), + 1000, wrap_key_real, keylen); + if (err) + { + grub_errno = GRUB_ERR_NONE; + grub_crypto_cipher_close (cipher); + continue; + } + + err = grub_crypto_cipher_set_key (cipher, wrap_key_real, + keylen); + if (err) + { + grub_errno = GRUB_ERR_NONE; + grub_crypto_cipher_close (cipher); + continue; + } + + err = algo_decrypt (cipher, algo, decrypted, key->unknown_purpose_key, 32, + mac, key->unknown_purpose_nonce, 2, 16); + if (err || (grub_crypto_memcmp (mac, key->unknown_purpose_key + 32, 16) + != 0)) + { + grub_dprintf ("zfs", "key loading failed\n"); + grub_errno = GRUB_ERR_NONE; + grub_crypto_cipher_close (cipher); + continue; + } + + err = algo_decrypt (cipher, algo, decrypted, key->enc_key, keylen, mac, + key->enc_nonce, 2, 16); + if (err || grub_crypto_memcmp (mac, key->enc_key + keylen, 16) != 0) + { + grub_dprintf ("zfs", "key loading failed\n"); + grub_errno = GRUB_ERR_NONE; + grub_crypto_cipher_close (cipher); + continue; + } + ret = grub_crypto_cipher_open (GRUB_CIPHER_AES); + if (!ret) + { + grub_errno = GRUB_ERR_NONE; + grub_crypto_cipher_close (cipher); + continue; + } + err = grub_crypto_cipher_set_key (ret, decrypted, keylen); + if (err) + { + grub_errno = GRUB_ERR_NONE; + grub_crypto_cipher_close (ret); + grub_crypto_cipher_close (cipher); + continue; + } + grub_crypto_cipher_close (cipher); + return ret; + } + return NULL; +} + +static const struct grub_arg_option options[] = + { + {"raw", 'r', 0, N_("Assume input is raw."), 0, 0}, + {"hex", 'h', 0, N_("Assume input is hex."), 0, 0}, + {"passphrase", 'p', 0, N_("Assume input is passphrase."), 0, 0}, + {0, 0, 0, 0, 0, 0} + }; + +static grub_err_t +grub_cmd_zfs_key (grub_extcmd_context_t ctxt, int argc, char **args) +{ + grub_uint8_t buf[1024]; + grub_ssize_t real_size; + + if (argc > 0) + { + grub_file_t file; + file = grub_file_open (args[0]); + if (!file) + return grub_errno; + real_size = grub_file_read (file, buf, 1024); + if (real_size < 0) + return grub_errno; + } + else + { + grub_xputs (_("Enter ZFS password: ")); + if (!grub_password_get ((char *) buf, 1023)) + return grub_errno; + real_size = grub_strlen ((char *) buf); + } + + if (ctxt->state[1].set) + { + int i; + grub_err_t err; + for (i = 0; i < real_size / 2; i++) + { + char c1 = grub_tolower (buf[2 * i]) - '0'; + char c2 = grub_tolower (buf[2 * i + 1]) - '0'; + if (c1 > 9) + c1 += '0' - 'a' + 10; + if (c2 > 9) + c2 += '0' - 'a' + 10; + buf[i] = (c1 << 4) | c2; + } + err = grub_zfs_add_key (buf, real_size / 2, 0); + if (err) + return err; + return GRUB_ERR_NONE; + } + + return grub_zfs_add_key (buf, real_size, + ctxt->state[2].set + || (argc == 0 && !ctxt->state[0].set + && !ctxt->state[1].set)); +} + +static grub_extcmd_t cmd_key; + +GRUB_MOD_INIT(zfscrypt) +{ + grub_zfs_decrypt = grub_zfs_decrypt_real; + grub_zfs_load_key = grub_zfs_load_key_real; + cmd_key = grub_register_extcmd ("zfskey", grub_cmd_zfs_key, 0, + N_("[-h|-p|-r] [FILE]"), + N_("Import ZFS wrapping key stored in FILE."), + options); +} + +GRUB_MOD_FINI(zfscrypt) +{ + grub_zfs_decrypt = 0; + grub_zfs_load_key = 0; + grub_unregister_extcmd (cmd_key); +} diff --git a/grub-core/fs/zfs/zfsinfo.c b/grub-core/fs/zfs/zfsinfo.c new file mode 100644 index 000000000..c8a28acf5 --- /dev/null +++ b/grub-core/fs/zfs/zfsinfo.c @@ -0,0 +1,441 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2009 Free Software Foundation, Inc. + * Copyright 2008 Sun Microsystems, Inc. + * + * GRUB is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static inline void +print_tabs (int n) +{ + int i; + + for (i = 0; i < n; i++) + grub_printf (" "); +} + +static grub_err_t +print_state (char *nvlist, int tab) +{ + grub_uint64_t ival; + int isok = 1; + + print_tabs (tab); + + if (grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_REMOVED, &ival)) + { + grub_puts_ (N_("Virtual device is removed")); + isok = 0; + } + + if (grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_FAULTED, &ival)) + { + grub_puts_ (N_("Virtual device is faulted")); + isok = 0; + } + + if (grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_OFFLINE, &ival)) + { + grub_puts_ (N_("Virtual device is offline")); + isok = 0; + } + + if (grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_FAULTED, &ival)) + /* TRANSLATORS: degraded doesn't mean broken but that some of + component are missing but virtual device as whole is still usable. */ + grub_puts_ (N_("Virtual device is degraded")); + + if (isok) + grub_puts_ (N_("Virtual device is online")); + grub_xputs ("\n"); + + return GRUB_ERR_NONE; +} + +static grub_err_t +print_vdev_info (char *nvlist, int tab) +{ + char *type = 0; + + type = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_TYPE); + + if (!type) + { + print_tabs (tab); + grub_puts_ (N_("Incorrect virtual device: no type available")); + return grub_errno; + } + + if (grub_strcmp (type, VDEV_TYPE_DISK) == 0) + { + char *bootpath = 0; + char *path = 0; + char *devid = 0; + + print_tabs (tab); + /* TRANSLATORS: The virtual devices form a tree (in graph-theoretical + sense). The nodes like mirror or raidz have children: member devices. + The "real" devices which actually store data are called "leafs" + (again borrowed from graph theory) and can be either disks + (or partitions) or files. */ + grub_puts_ (N_("Leaf virtual device (file or disk)")); + + print_state (nvlist, tab); + + bootpath = + grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_PHYS_PATH); + print_tabs (tab); + if (!bootpath) + grub_puts_ (N_("Bootpath: unavailable\n")); + else + grub_printf_ (N_("Bootpath: %s\n"), bootpath); + + path = grub_zfs_nvlist_lookup_string (nvlist, "path"); + print_tabs (tab); + if (!path) + grub_puts_ (N_("Path: unavailable")); + else + grub_printf_ (N_("Path: %s\n"), path); + + devid = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_DEVID); + print_tabs (tab); + if (!devid) + grub_puts_ (N_("Devid: unavailable")); + else + grub_printf_ (N_("Devid: %s\n"), devid); + grub_free (bootpath); + grub_free (devid); + grub_free (path); + grub_free (type); + return GRUB_ERR_NONE; + } + char is_mirror=(grub_strcmp(type,VDEV_TYPE_MIRROR) == 0); + char is_raidz=(grub_strcmp(type,VDEV_TYPE_RAIDZ) == 0); + grub_free (type); + + if (is_mirror || is_raidz) + { + int nelm, i; + + nelm = grub_zfs_nvlist_lookup_nvlist_array_get_nelm + (nvlist, ZPOOL_CONFIG_CHILDREN); + + if(is_mirror){ + grub_puts_ (N_("This VDEV is a mirror")); + } + else if(is_raidz){ + grub_uint64_t parity; + grub_zfs_nvlist_lookup_uint64(nvlist,"nparity",&parity); + grub_printf_ (N_("This VDEV is a RAIDZ%llu\n"),(unsigned long long)parity); + } + print_tabs (tab); + if (nelm <= 0) + { + grub_puts_ (N_("Incorrect VDEV")); + return GRUB_ERR_NONE; + } + grub_printf_ (N_("VDEV with %d children\n"), nelm); + print_state (nvlist, tab); + for (i = 0; i < nelm; i++) + { + char *child; + + child = grub_zfs_nvlist_lookup_nvlist_array + (nvlist, ZPOOL_CONFIG_CHILDREN, i); + + print_tabs (tab); + if (!child) + { + /* TRANSLATORS: it's the element carying the number %d, not + total element number. And the number itself is fine, + only the element isn't. + */ + grub_printf_ (N_("VDEV element number %d isn't correct\n"), i); + continue; + } + + /* TRANSLATORS: it's the element carying the number %d, not + total element number. This is used in enumeration + "Element number 1", "Element number 2", ... */ + grub_printf_ (N_("VDEV element number %d:\n"), i); + print_vdev_info (child, tab + 1); + + grub_free (child); + } + return GRUB_ERR_NONE; + } + + print_tabs (tab); + grub_printf_ (N_("Unknown virtual device type: %s\n"), type); + + return GRUB_ERR_NONE; +} + +static grub_err_t +get_bootpath (char *nvlist, char **bootpath, char **devid) +{ + char *type = 0; + + type = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_TYPE); + + if (!type) + return grub_errno; + + if (grub_strcmp (type, VDEV_TYPE_DISK) == 0) + { + *bootpath = grub_zfs_nvlist_lookup_string (nvlist, + ZPOOL_CONFIG_PHYS_PATH); + *devid = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_DEVID); + if (!*bootpath || !*devid) + { + grub_free (*bootpath); + grub_free (*devid); + *bootpath = 0; + *devid = 0; + } + return GRUB_ERR_NONE; + } + + if (grub_strcmp (type, VDEV_TYPE_MIRROR) == 0) + { + int nelm, i; + + nelm = grub_zfs_nvlist_lookup_nvlist_array_get_nelm + (nvlist, ZPOOL_CONFIG_CHILDREN); + + for (i = 0; i < nelm; i++) + { + char *child; + + child = grub_zfs_nvlist_lookup_nvlist_array (nvlist, + ZPOOL_CONFIG_CHILDREN, + i); + + get_bootpath (child, bootpath, devid); + + grub_free (child); + + if (*bootpath && *devid) + return GRUB_ERR_NONE; + } + } + + return GRUB_ERR_NONE; +} + +static const char *poolstates[] = { + /* TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, + semi-technical term by Sun/Oracle and should be translated in sync with + other ZFS-related software and documentation. */ + [POOL_STATE_ACTIVE] = N_("Pool state: active"), + [POOL_STATE_EXPORTED] = N_("Pool state: exported"), + [POOL_STATE_DESTROYED] = N_("Pool state: destroyed"), + [POOL_STATE_SPARE] = N_("Pool state: reserved for hot spare"), + [POOL_STATE_L2CACHE] = N_("Pool state: level 2 ARC device"), + [POOL_STATE_UNINITIALIZED] = N_("Pool state: uninitialized"), + [POOL_STATE_UNAVAIL] = N_("Pool state: unavailable"), + [POOL_STATE_POTENTIALLY_ACTIVE] = N_("Pool state: potentially active") +}; + +static grub_err_t +grub_cmd_zfsinfo (grub_command_t cmd __attribute__ ((unused)), int argc, + char **args) +{ + grub_device_t dev; + char *devname; + grub_err_t err; + char *nvlist = 0; + char *nv = 0; + char *poolname; + grub_uint64_t guid; + grub_uint64_t pool_state; + int found; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + if (args[0][0] == '(' && args[0][grub_strlen (args[0]) - 1] == ')') + { + devname = grub_strdup (args[0] + 1); + if (devname) + devname[grub_strlen (devname) - 1] = 0; + } + else + devname = grub_strdup (args[0]); + if (!devname) + return grub_errno; + + dev = grub_device_open (devname); + grub_free (devname); + if (!dev) + return grub_errno; + + err = grub_zfs_fetch_nvlist (dev, &nvlist); + + grub_device_close (dev); + + if (err) + return err; + + poolname = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_POOL_NAME); + if (!poolname) + grub_puts_ (N_("Pool name: unavailable")); + else + grub_printf_ (N_("Pool name: %s\n"), poolname); + + found = + grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_GUID, &guid); + if (!found) + grub_puts_ (N_("Pool GUID: unavailable")); + else + grub_printf_ (N_("Pool GUID: %016llx\n"), (long long unsigned) guid); + + found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_STATE, + &pool_state); + if (!found) + grub_puts_ (N_("Unable to retrieve pool state")); + else if (pool_state >= ARRAY_SIZE (poolstates)) + grub_puts_ (N_("Unrecognized pool state")); + else + grub_puts_ (poolstates[pool_state]); + + nv = grub_zfs_nvlist_lookup_nvlist (nvlist, ZPOOL_CONFIG_VDEV_TREE); + + if (!nv) + /* TRANSLATORS: There are undetermined number of virtual devices + in a device tree, not just one. + */ + grub_puts_ (N_("No virtual device tree available")); + else + print_vdev_info (nv, 1); + + grub_free (nv); + grub_free (nvlist); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_cmd_zfs_bootfs (grub_command_t cmd __attribute__ ((unused)), int argc, + char **args) +{ + grub_device_t dev; + char *devname; + grub_err_t err; + char *nvlist = 0; + char *nv = 0; + char *bootpath = 0, *devid = 0; + char *fsname; + char *bootfs; + char *poolname; + grub_uint64_t mdnobj; + + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + devname = grub_file_get_device_name (args[0]); + if (grub_errno) + return grub_errno; + + dev = grub_device_open (devname); + grub_free (devname); + if (!dev) + return grub_errno; + + err = grub_zfs_fetch_nvlist (dev, &nvlist); + + fsname = grub_strchr (args[0], ')'); + if (fsname) + fsname++; + else + fsname = args[0]; + + if (!err) + err = grub_zfs_getmdnobj (dev, fsname, &mdnobj); + + grub_device_close (dev); + + if (err) + return err; + + poolname = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_POOL_NAME); + if (!poolname) + { + if (!grub_errno) + grub_error (GRUB_ERR_BAD_FS, "No poolname found"); + return grub_errno; + } + + nv = grub_zfs_nvlist_lookup_nvlist (nvlist, ZPOOL_CONFIG_VDEV_TREE); + + if (nv) + get_bootpath (nv, &bootpath, &devid); + + grub_free (nv); + grub_free (nvlist); + + bootfs = grub_xasprintf ("zfs-bootfs=%s/%llu%s%s%s%s%s%s", + poolname, (unsigned long long) mdnobj, + bootpath ? ",bootpath=\"" : "", + bootpath ? : "", + bootpath ? "\"" : "", + devid ? ",diskdevid=\"" : "", + devid ? : "", + devid ? "\"" : ""); + if (!bootfs) + return grub_errno; + if (argc >= 2) + grub_env_set (args[1], bootfs); + else + grub_printf ("%s\n", bootfs); + + grub_free (bootfs); + grub_free (poolname); + grub_free (bootpath); + grub_free (devid); + + return GRUB_ERR_NONE; +} + + +static grub_command_t cmd_info, cmd_bootfs; + +GRUB_MOD_INIT (zfsinfo) +{ + cmd_info = grub_register_command ("zfsinfo", grub_cmd_zfsinfo, + N_("DEVICE"), + N_("Print ZFS info about DEVICE.")); + cmd_bootfs = grub_register_command ("zfs-bootfs", grub_cmd_zfs_bootfs, + N_("FILESYSTEM [VARIABLE]"), + N_("Print ZFS-BOOTFSOBJ or store it into VARIABLE")); +} + +GRUB_MOD_FINI (zfsinfo) +{ + grub_unregister_command (cmd_info); + grub_unregister_command (cmd_bootfs); +} diff --git a/grub-core/gdb/cstub.c b/grub-core/gdb/cstub.c new file mode 100644 index 000000000..b64acd70f --- /dev/null +++ b/grub-core/gdb/cstub.c @@ -0,0 +1,366 @@ +/* cstub.c - machine independent portion of remote GDB stub */ +/* + * Copyright (C) 2006 Lubomir Kundrak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include + +static const char hexchars[] = "0123456789abcdef"; +int grub_gdb_regs[GRUB_MACHINE_NR_REGS]; + +#define GRUB_GDB_COMBUF_SIZE 400 /* At least sizeof(grub_gdb_regs)*2 are needed for + register packets. */ +static char grub_gdb_inbuf[GRUB_GDB_COMBUF_SIZE + 1]; +static char grub_gdb_outbuf[GRUB_GDB_COMBUF_SIZE + 1]; + +struct grub_serial_port *grub_gdb_port; + +static int +hex (char ch) +{ + if ((ch >= 'a') && (ch <= 'f')) + return (ch - 'a' + 10); + if ((ch >= '0') && (ch <= '9')) + return (ch - '0'); + if ((ch >= 'A') && (ch <= 'F')) + return (ch - 'A' + 10); + return (-1); +} + +/* Scan for the sequence $#. */ +static char * +grub_gdb_getpacket (void) +{ + char *buffer = &grub_gdb_inbuf[0]; + unsigned char checksum; + unsigned char xmitcsum; + int count; + int ch; + + while (1) + { + /* Wait around for the start character, ignore all other + characters. */ + while ((ch = grub_serial_port_fetch (grub_gdb_port)) != '$'); + + retry: + checksum = 0; + xmitcsum = -1; + count = 0; + + /* Now read until a # or end of buffer is found. */ + while (count < GRUB_GDB_COMBUF_SIZE) + { + do + ch = grub_serial_port_fetch (grub_gdb_port); + while (ch < 0); + if (ch == '$') + goto retry; + if (ch == '#') + break; + checksum += ch; + buffer[count] = ch; + count = count + 1; + } + buffer[count] = 0; + if (ch == '#') + { + do + ch = grub_serial_port_fetch (grub_gdb_port); + while (ch < 0); + xmitcsum = hex (ch) << 4; + do + ch = grub_serial_port_fetch (grub_gdb_port); + while (ch < 0); + xmitcsum += hex (ch); + + if (checksum != xmitcsum) + grub_serial_port_put (grub_gdb_port, '-'); /* Failed checksum. */ + else + { + grub_serial_port_put (grub_gdb_port, '+'); /* Successful transfer. */ + + /* If a sequence char is present, reply the sequence ID. */ + if (buffer[2] == ':') + { + grub_serial_port_put (grub_gdb_port, buffer[0]); + grub_serial_port_put (grub_gdb_port, buffer[1]); + + return &buffer[3]; + } + return &buffer[0]; + } + } + } +} + +/* Send the packet in buffer. */ +static void +grub_gdb_putpacket (char *buffer) +{ + grub_uint8_t checksum; + + /* $#. */ + do + { + char *ptr; + grub_serial_port_put (grub_gdb_port, '$'); + checksum = 0; + + for (ptr = buffer; *ptr; ptr++) + { + grub_serial_port_put (grub_gdb_port, *ptr); + checksum += *ptr; + } + + grub_serial_port_put (grub_gdb_port, '#'); + grub_serial_port_put (grub_gdb_port, hexchars[checksum >> 4]); + grub_serial_port_put (grub_gdb_port, hexchars[checksum & 0xf]); + } + while (grub_serial_port_fetch (grub_gdb_port) != '+'); +} + +/* Convert the memory pointed to by mem into hex, placing result in buf. + Return a pointer to the last char put in buf (NULL). */ +static char * +grub_gdb_mem2hex (char *mem, char *buf, grub_size_t count) +{ + grub_size_t i; + unsigned char ch; + + for (i = 0; i < count; i++) + { + ch = *mem++; + *buf++ = hexchars[ch >> 4]; + *buf++ = hexchars[ch % 16]; + } + *buf = 0; + return (buf); +} + +/* Convert the hex array pointed to by buf into binary to be placed in mem. + Return a pointer to the character after the last byte written. */ +static char * +grub_gdb_hex2mem (char *buf, char *mem, int count) +{ + int i; + unsigned char ch; + + for (i = 0; i < count; i++) + { + ch = hex (*buf++) << 4; + ch = ch + hex (*buf++); + *mem++ = ch; + } + return (mem); +} + +/* Convert hex characters to int and return the number of characters + processed. */ +static int +grub_gdb_hex2int (char **ptr, grub_uint64_t *int_value) +{ + int num_chars = 0; + int hex_value; + + *int_value = 0; + + while (**ptr) + { + hex_value = hex (**ptr); + if (hex_value >= 0) + { + *int_value = (*int_value << 4) | hex_value; + num_chars++; + } + else + break; + + (*ptr)++; + } + + return (num_chars); +} + +/* This function does all command procesing for interfacing to gdb. */ +void __attribute__ ((regparm(3))) +grub_gdb_trap (int trap_no) +{ + unsigned int sig_no; + int stepping; + grub_uint64_t addr; + grub_uint64_t length; + char *ptr; + + if (!grub_gdb_port) + { + grub_printf ("Unhandled exception 0x%x at ", trap_no); + grub_backtrace_print_address ((void *) grub_gdb_regs[PC]); + grub_printf ("\n"); + grub_backtrace_pointer ((void *) grub_gdb_regs[EBP]); + grub_fatal ("Unhandled exception"); + } + + sig_no = grub_gdb_trap2sig (trap_no); + + ptr = grub_gdb_outbuf; + + /* Reply to host that an exception has occurred. */ + + *ptr++ = 'T'; /* Notify gdb with signo, PC, FP and SP. */ + + *ptr++ = hexchars[sig_no >> 4]; + *ptr++ = hexchars[sig_no & 0xf]; + + /* Stack pointer. */ + *ptr++ = hexchars[SP]; + *ptr++ = ':'; + ptr = grub_gdb_mem2hex ((char *) &grub_gdb_regs[ESP], ptr, 4); + *ptr++ = ';'; + + /* Frame pointer. */ + *ptr++ = hexchars[FP]; + *ptr++ = ':'; + ptr = grub_gdb_mem2hex ((char *) &grub_gdb_regs[EBP], ptr, 4); + *ptr++ = ';'; + + /* Program counter. */ + *ptr++ = hexchars[PC]; + *ptr++ = ':'; + ptr = grub_gdb_mem2hex ((char *) &grub_gdb_regs[PC], ptr, 4); + *ptr++ = ';'; + + *ptr = '\0'; + + grub_gdb_putpacket (grub_gdb_outbuf); + + stepping = 0; + + while (1) + { + grub_gdb_outbuf[0] = 0; + ptr = grub_gdb_getpacket (); + + switch (*ptr++) + { + case '?': + grub_gdb_outbuf[0] = 'S'; + grub_gdb_outbuf[1] = hexchars[sig_no >> 4]; + grub_gdb_outbuf[2] = hexchars[sig_no & 0xf]; + grub_gdb_outbuf[3] = 0; + break; + + /* Return values of the CPU registers. */ + case 'g': + grub_gdb_mem2hex ((char *) grub_gdb_regs, grub_gdb_outbuf, + sizeof (grub_gdb_regs)); + break; + + /* Set values of the CPU registers -- return OK. */ + case 'G': + grub_gdb_hex2mem (ptr, (char *) grub_gdb_regs, + sizeof (grub_gdb_regs)); + grub_strcpy (grub_gdb_outbuf, "OK"); + break; + + /* Set the value of a single CPU register -- return OK. */ + case 'P': + { + grub_uint64_t regno; + + if (grub_gdb_hex2int (&ptr, ®no) && *ptr++ == '=') + if (regno < GRUB_MACHINE_NR_REGS) + { + grub_gdb_hex2mem (ptr, (char *) &grub_gdb_regs[regno], 4); + grub_strcpy (grub_gdb_outbuf, "OK"); + break; + } + /* FIXME: GDB requires setting orig_eax. I don't know what's + this register is about. For now just simulate setting any + registers. */ + grub_strcpy (grub_gdb_outbuf, /*"E01"*/ "OK"); + break; + } + + /* mAA..AA,LLLL: Read LLLL bytes at address AA..AA. */ + case 'm': + /* Try to read %x,%x. Set ptr = 0 if successful. */ + if (grub_gdb_hex2int (&ptr, &addr)) + if (*(ptr++) == ',') + if (grub_gdb_hex2int (&ptr, &length)) + { + ptr = 0; + grub_gdb_mem2hex ((char *) (grub_addr_t) addr, + grub_gdb_outbuf, length); + } + if (ptr) + grub_strcpy (grub_gdb_outbuf, "E01"); + break; + + /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA -- return OK. */ + case 'M': + /* Try to read %x,%x. Set ptr = 0 if successful. */ + if (grub_gdb_hex2int (&ptr, &addr)) + if (*(ptr++) == ',') + if (grub_gdb_hex2int (&ptr, &length)) + if (*(ptr++) == ':') + { + grub_gdb_hex2mem (ptr, (char *) (grub_addr_t) addr, length); + grub_strcpy (grub_gdb_outbuf, "OK"); + ptr = 0; + } + if (ptr) + { + grub_strcpy (grub_gdb_outbuf, "E02"); + } + break; + + /* sAA..AA: Step one instruction from AA..AA(optional). */ + case 's': + stepping = 1; + /* FALLTHROUGH */ + + /* cAA..AA: Continue at address AA..AA(optional). */ + case 'c': + /* try to read optional parameter, pc unchanged if no parm */ + if (grub_gdb_hex2int (&ptr, &addr)) + grub_gdb_regs[PC] = addr; + + /* Clear the trace bit. */ + grub_gdb_regs[PS] &= 0xfffffeff; + + /* Set the trace bit if we're stepping. */ + if (stepping) + grub_gdb_regs[PS] |= 0x100; + + return; + + /* Kill the program. */ + case 'k': + /* Do nothing. */ + return; + } + + /* Reply to the request. */ + grub_gdb_putpacket (grub_gdb_outbuf); + } +} + diff --git a/grub-core/gdb/gdb.c b/grub-core/gdb/gdb.c new file mode 100644 index 000000000..847a1e1e3 --- /dev/null +++ b/grub-core/gdb/gdb.c @@ -0,0 +1,100 @@ +/* gdb.c - gdb remote stub module */ +/* + * Copyright (C) 2003 Free Software Foundation, Inc. + * Copyright (C) 2006 Lubomir Kundrak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_gdbstub (struct grub_command *cmd __attribute__ ((unused)), + int argc, char **args) +{ + struct grub_serial_port *port; + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "port required"); + port = grub_serial_find (args[0]); + if (!port) + return grub_errno; + grub_gdb_port = port; + /* TRANSLATORS: at this position GRUB waits for the user to do an action + in remote debugger, namely to tell it to establish connection. */ + grub_puts_ (N_("Now connect the remote debugger, please.")); + grub_gdb_breakpoint (); + return 0; +} + +static grub_err_t +grub_cmd_gdbstop (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_gdb_port = NULL; + return 0; +} + +static grub_err_t +grub_cmd_gdb_break (struct grub_command *cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + if (!grub_gdb_port) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "No GDB stub is running"); + grub_gdb_breakpoint (); + return 0; +} + +static grub_command_t cmd, cmd_stop, cmd_break; + +GRUB_MOD_INIT (gdb) +{ + grub_gdb_idtinit (); + cmd = grub_register_command ("gdbstub", grub_cmd_gdbstub, + N_("PORT"), + /* TRANSLATORS: GDB stub is a small part of + GDB functionality running on local host + which allows remote debugger to + connect to it. */ + N_("Start GDB stub on given port")); + cmd_break = grub_register_command ("gdbstub_break", grub_cmd_gdb_break, + /* TRANSLATORS: this refers to triggering + a breakpoint so that the user will land + into GDB. */ + 0, N_("Break into GDB")); + cmd_stop = grub_register_command ("gdbstub_stop", grub_cmd_gdbstop, + 0, N_("Stop GDB stub")); +} + +GRUB_MOD_FINI (gdb) +{ + grub_unregister_command (cmd); + grub_unregister_command (cmd_stop); + grub_gdb_idtrestore (); +} + diff --git a/grub-core/gdb/i386/idt.c b/grub-core/gdb/i386/idt.c new file mode 100644 index 000000000..69bfcb089 --- /dev/null +++ b/grub-core/gdb/i386/idt.c @@ -0,0 +1,78 @@ +/* idt.c - routines for constructing IDT fot the GDB stub */ +/* + * Copyright (C) 2006 Lubomir Kundrak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include + +static struct grub_cpu_interrupt_gate grub_gdb_idt[GRUB_GDB_LAST_TRAP + 1] + __attribute__ ((aligned(16))); + +/* Sets up a gate descriptor in the IDT table. */ +static void +grub_idt_gate (struct grub_cpu_interrupt_gate *gate, void (*offset) (void), + grub_uint16_t selector, grub_uint8_t type, grub_uint8_t dpl) +{ + gate->offset_lo = (int) offset & 0xffff; + gate->selector = selector & 0xffff; + gate->unused = 0; + gate->gate = (type & 0x1f) | ((dpl & 0x3) << 5) | 0x80; + gate->offset_hi = ((int) offset >> 16) & 0xffff; +} + +static struct grub_cpu_idt_descriptor grub_gdb_orig_idt_desc + __attribute__ ((aligned(16))); +static struct grub_cpu_idt_descriptor grub_gdb_idt_desc + __attribute__ ((aligned(16))); + +/* Set up interrupt and trap handler descriptors in IDT. */ +void +grub_gdb_idtinit (void) +{ + int i; + grub_uint16_t seg; + + asm volatile ("xorl %%eax, %%eax\n" + "mov %%cs, %%ax\n" :"=a" (seg)); + + for (i = 0; i <= GRUB_GDB_LAST_TRAP; i++) + { + grub_idt_gate (&grub_gdb_idt[i], + grub_gdb_trapvec[i], seg, + GRUB_CPU_TRAP_GATE, 0); + } + + grub_gdb_idt_desc.base = (grub_addr_t) grub_gdb_idt; + grub_gdb_idt_desc.limit = sizeof (grub_gdb_idt) - 1; + asm volatile ("sidt %0" : : "m" (grub_gdb_orig_idt_desc)); + asm volatile ("lidt %0" : : "m" (grub_gdb_idt_desc)); +} + +void +grub_gdb_idtrestore (void) +{ + asm volatile ("lidt %0" : : "m" (grub_gdb_orig_idt_desc)); +} + +void +grub_gdb_breakpoint (void) +{ + asm volatile ("int $3"); +} diff --git a/grub-core/gdb/i386/machdep.S b/grub-core/gdb/i386/machdep.S new file mode 100644 index 000000000..f96d2b9c4 --- /dev/null +++ b/grub-core/gdb/i386/machdep.S @@ -0,0 +1,245 @@ +/* machdep.S - machine dependent assembly routines for the GDB stub */ +/* + * Copyright (C) 2006 Lubomir Kundrak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include + +#define EC_PRESENT 1 +#define EC_ABSENT 0 + +#define GRUB_GDB_STACKSIZE 40000 + +#define SEP , + +#ifdef __APPLE__ + .zerofill __DATA, __bss, LOCAL(grub_gdb_stack_end), GRUB_GDB_STACKSIZE, 4 + LOCAL(grub_gdb_stack) = LOCAL(grub_gdb_stack_end) +#else +/* + * The .data index for the address vector. + */ + +#define VECTOR 1 + + .bss + .space GRUB_GDB_STACKSIZE +VARIABLE(grub_gdb_stack) +#endif + +/* + * Supplemental macros for register saving/restoration + * on exception handler entry/leave. + */ + +#ifdef __APPLE__ +.macro save32 +#define REG $0 +#define NDX $1 +#else +.macro save32 reg ndx +#define REG \reg +#define NDX \ndx +#endif + movl REG, EXT_C(grub_gdb_regs)+(NDX * 4) +.endm + +#undef REG +#undef NDX + +#ifdef __APPLE__ +.macro save16 +#define REG $0 +#define NDX $1 +#else +.macro save16 reg ndx +#define REG \reg +#define NDX \ndx +#endif + xorl %eax, %eax + movw REG, EXT_C(grub_gdb_regs)+(NDX * 4) + movw %ax, EXT_C(grub_gdb_regs)+(NDX * 4 + 2) + movl EXT_C(grub_gdb_regs)+(EAX * 4), %eax +.endm + +#undef REG +#undef NDX + +#ifdef __APPLE__ +.macro load32 +#define NDX $0 +#define REG $1 +#else +.macro load32 ndx reg +#define REG \reg +#define NDX \ndx +#endif + movl EXT_C(grub_gdb_regs)+(NDX * 4), REG +.endm + +#undef REG +#undef NDX + +#ifdef __APPLE__ +.macro load16 +#define NDX $0 +#define REG $1 +#else +.macro load16 ndx reg +#define NDX \ndx +#define REG \reg +#endif + movw EXT_C(grub_gdb_regs)+(NDX * 4), REG +.endm + +#undef REG +#undef NDX + +.macro save_context + save32 %eax, EAX + + save32 %ecx, ECX + save32 %edx, EDX + save32 %ebx, EBX + save32 %ebp, EBP + save32 %esi, ESI + save32 %edi, EDI + + popl %ebx + save32 %ebx, EIP + popl %ebx + save32 %ebx, CS + popl %ebx + save32 %ebx, EFLAGS + + save32 %esp, ESP + + save16 %ds, DS + save16 %es, ES + save16 %fs, FS + save16 %gs, GS + save16 %ss, SS +.endm + +.macro load_context + load16 SS, %ss + load32 ESP, %esp + + load32 EBP, %ebp + load32 ESI, %esi + load32 EDI, %edi + + load16 DS, %ds + load16 ES, %es + load16 FS, %fs + load16 GS, %gs + + load32 EFLAGS, %eax + pushl %eax + load32 CS, %eax + pushl %eax + load32 EIP, %eax + pushl %eax + + load32 EBX, %ebx + load32 EDX, %edx + load32 ECX, %ecx + load32 EAX, %eax +.endm + +/* + * This macro creates handlers for a given range of exception numbers + * and adds their addresses to the grub_gdb_trapvec array. + */ + +#ifdef __APPLE__ +.macro ent +#define EC $0 +#define BEG $1 +#define END $2 +#else +.macro ent ec beg end=0 +#define EC \ec +#define BEG \beg +#define END \end +#endif + + /* + * Wrapper body itself. + */ + + .text +1: + .if EC + add MACRO_DOLLAR(4), %esp + .endif + + save_context +#ifdef __APPLE__ + mov $LOCAL(grub_gdb_stack), %esp +#else + mov $EXT_C(grub_gdb_stack), %esp +#endif + mov $(BEG), %eax /* trap number */ + call EXT_C(grub_gdb_trap) + load_context + iret + + /* + * Address entry in trapvec array. + */ + +#ifdef __APPLE__ + .section __DATA, VECTOR +#else + .data VECTOR +#endif + .long 1b + + /* + * Next... (recursion). + */ + + .if END-BEG > 0 +#ifdef __APPLE__ + ent EC, (BEG+1), END +#else + ent \ec "(\beg+1)" \end +#endif + .endif +.endm + +/* + * Here does the actual construction of the address array and handlers + * take place. + */ +#ifdef __APPLE__ + .section __DATA, VECTOR +#else + .data VECTOR +#endif +VARIABLE(grub_gdb_trapvec) + ent EC_ABSENT, 0, 7 + ent EC_PRESENT, 8 + ent EC_ABSENT, 9 + ent EC_PRESENT, 10, 14 + /* + * You may have to split this further or as(1) + * will complain about nesting being too deep. + */ + ent EC_ABSENT, 15, GRUB_GDB_LAST_TRAP diff --git a/grub-core/gdb/i386/signal.c b/grub-core/gdb/i386/signal.c new file mode 100644 index 000000000..1ac3bbd18 --- /dev/null +++ b/grub-core/gdb/i386/signal.c @@ -0,0 +1,53 @@ +/* idt.c - routines for constructing IDT fot the GDB stub */ +/* + * Copyright (C) 2006 Lubomir Kundrak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include + +/* Converting CPU trap number to UNIX signal number as + described in System V ABI i386 Processor Supplement, 3-25. */ +unsigned int +grub_gdb_trap2sig (int trap_no) +{ + const int signals[] = { + SIGFPE, /* 0: Divide error fault */ + SIGTRAP, /* 1: Single step trap fault */ + SIGABRT, /* 2: # Nonmaskable interrupt */ + SIGTRAP, /* 3: Breakpoint trap */ + SIGSEGV, /* 4: Overflow trap */ + SIGSEGV, /* 5: Bounds check fault */ + SIGILL, /* 6: Invalid opcode fault */ + SIGFPE, /* 7: No coprocessor fault */ + SIGABRT, /* 8: # Double fault abort */ + SIGSEGV, /* 9: Coprocessor overrun abort */ + SIGSEGV, /* 10: Invalid TSS fault */ + SIGSEGV, /* 11: Segment not present fault */ + SIGSEGV, /* 12: Stack exception fault */ + SIGSEGV, /* 13: General protection fault abort */ + SIGSEGV, /* 14: Page fault */ + SIGABRT, /* 15: (reserved) */ + SIGFPE, /* 16: Coprocessor error fault */ + SIGUSR1 /* other */ + }; + + return signals[trap_no < 17 ? trap_no : 17]; +} + diff --git a/grub-core/gdb_grub.in b/grub-core/gdb_grub.in new file mode 100644 index 000000000..e322d3dc1 --- /dev/null +++ b/grub-core/gdb_grub.in @@ -0,0 +1,85 @@ +### +### Load debuging information about GNU GRUB 2 modules into GDB +### automatically. Needs readelf, Perl and gmodule.pl script +### +### Has to be launched from the writable and trusted +### directory containing *.image and *.module +### +### $Id: .gdbinit,v 1.1 2006/05/14 11:38:08 lkundrak Exp $ +### Lubomir Kundrak +### + +# Add section numbers and addresses to .segments.tmp +define dump_module_sections + set $mod = $arg0 + + # FIXME: save logging status + set logging file .segments.tmp + set logging redirect on + set logging overwrite off + set logging on + + printf "%s", $mod->name + set $segment = $mod->segment + while ($segment) + printf " %i 0x%lx", $segment->section, $segment->addr + set $segment = $segment->next + end + printf "\n" + + set logging off + # FIXME: restore logging status +end +document dump_module_sections + Gather information about module whose mod structure was + given for use with match_and_load_symbols +end + +# Generate and execute GDB commands and delete temporary files +# afterwards +define match_and_load_symbols + shell perl gmodule.pl <.segments.tmp >.loadsym.gdb + source .loadsym.gdb + shell rm -f .segments.tmp .loadsym.gdb +end +document match_and_load_symbols + Launch script, that matches section names with information + generated by dump_module_sections and load debugging info + apropriately +end + +### + +define load_module + dump_module_sections $arg0 + match_and_load_symbols +end +document load_module + Load debugging information for module given as argument. +end + +define load_all_modules + set $this = grub_dl_head + while ($this != 0) + dump_module_sections $this + set $this = $this->next + end + match_and_load_symbols +end +document load_all_modules + Load debugging information for all loaded modules. +end + +### + +set confirm off +file kernel.exec +target remote :1234 + +# inform when module is loaded +break grub_dl_add +commands + silent + load_module mod + cont +end diff --git a/grub-core/genemuinit.sh b/grub-core/genemuinit.sh new file mode 100644 index 000000000..8c6bb1c18 --- /dev/null +++ b/grub-core/genemuinit.sh @@ -0,0 +1,72 @@ +#! /bin/sh +# +# Copyright (C) 2002,2005,2007 Free Software Foundation, Inc. +# +# This gensymlist.sh is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +nm="$1" +shift + +cat <. + */ + +#include "grub_emu_init.h" + +EOF + +cat < /dev/null; then + echo "grub_${line%%.*}_init ();" + fi +done + +cat < /dev/null; then + echo "grub_${line%%.*}_fini ();" + fi +done + +cat <. + */ + +EOF + +cat < /dev/null; then + echo "void grub_${line%%.*}_init (void);" + fi + if ${nm} --defined-only -P -p ${line} | grep grub_mod_fini > /dev/null; then + echo "void grub_${line%%.*}_fini (void);" + fi +done diff --git a/grub-core/genmod.sh.in b/grub-core/genmod.sh.in new file mode 100644 index 000000000..03cc3b7f6 --- /dev/null +++ b/grub-core/genmod.sh.in @@ -0,0 +1,99 @@ +#! /bin/sh +set -e + +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# This gensymlist.sh is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# +# Example: +# +# genmod.sh moddep.lst normal.module build-grub-module-verifier normal.mod +# + +moddep=$1 +infile=$2 +outfile=$4 + +tmpfile=${outfile}.tmp +modname=`echo $infile | sed -e 's@\.module.*$@@'` + +if ! grep ^$modname: $moddep >/dev/null; then + echo "warning: moddep.lst has no dependencies for $modname" >&2 + exit 0 +fi + +deps=`grep ^$modname: $moddep | sed s@^.*:@@` + +# remove old files if any +rm -f $tmpfile $outfile + +if test x@TARGET_APPLE_LINKER@ != x1; then + # stripout .modname and .moddeps sections from input module + @TARGET_OBJCOPY@ -R .modname -R .moddeps $infile $tmpfile + + # Attach .modname and .moddeps sections + t1=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + printf "$modname\0" >$t1 + + t2=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + for dep in $deps; do printf "$dep\0" >> $t2; done + + if test -n "$deps"; then + @TARGET_OBJCOPY@ --add-section .modname=$t1 --add-section .moddeps=$t2 $tmpfile + else + @TARGET_OBJCOPY@ --add-section .modname=$t1 $tmpfile + fi + rm -f $t1 $t2 + + if test x@platform@ != xemu; then + @TARGET_STRIP@ --strip-unneeded \ + -K grub_mod_init -K grub_mod_fini \ + -K _grub_mod_init -K _grub_mod_fini \ + -R .note.gnu.gold-version -R .note.GNU-stack \ + -R .note -R .comment -R .ARM.exidx $tmpfile || exit 1 + fi + if ! test -z "${TARGET_OBJ2ELF}"; then + "${TARGET_OBJ2ELF}" $tmpfile || exit 1 + fi +else + tmpfile2=${outfile}.tmp2 + t1=${outfile}.t1.c + t2=${outfile}.t2.c + + # remove old files if any + rm -f $t1 $t2 + + cp $infile $tmpfile + + # Attach .modname and .moddeps sections + echo "char modname[] __attribute__ ((section(\"_modname, _modname\"))) = \"$modname\";" >$t1 + + for dep in $deps; do echo "char moddep_$dep[] __attribute__ ((section(\"_moddeps, _moddeps\"))) = \"$dep\";" >>$t2; done + + if test -n "$deps"; then + @TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $t2 $tmpfile -Wl,-r,-d + else + @TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $tmpfile -Wl,-r,-d + fi + rm -f $t1 $t2 $tmpfile + mv $tmpfile2 $tmpfile + + cp $tmpfile $tmpfile.bin + @TARGET_OBJCONV@ -f@TARGET_MODULE_FORMAT@ \ + -nr:_grub_mod_init:grub_mod_init \ + -nr:_grub_mod_fini:grub_mod_fini \ + -wd1106 -nu -nd $tmpfile.bin $tmpfile || exit 1 + rm -f $tmpfile.bin +fi +if test x@platform@ != xemu; then + ./build-grub-module-verifier@BUILD_EXEEXT@ $tmpfile @target_cpu@ @platform@ +fi +mv $tmpfile $outfile diff --git a/grub-core/genmoddep.awk b/grub-core/genmoddep.awk new file mode 100644 index 000000000..bd98d84cd --- /dev/null +++ b/grub-core/genmoddep.awk @@ -0,0 +1,98 @@ +#! /usr/bin/awk -f +# +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This genmoddep.awk is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Read symbols' info from stdin. +BEGIN { + error = 0 +} + +{ + if ($1 == "defined") { + symtab[$3] = $2; + modtab[$2] = "" modtab[$2] + } else if ($1 == "undefined") { + if ($3 in symtab) + modtab[$2] = modtab[$2] " " symtab[$3]; + else if ($3 != "__gnu_local_gp" && $3 != "_gp_disp") { + printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr"; + error++; + } + } + else { + printf "error: %u: unrecognized input format\n", NR >"/dev/stderr"; + error++; + } +} + +# Output the result. +END { + if (error >= 1) + exit 1; + + total_depcount = 0 + + for (mod in modtab) { + # Remove duplications. + split(modtab[mod], depmods, " "); + for (depmod in uniqmods) { + delete uniqmods[depmod]; + } + for (i in depmods) { + depmod = depmods[i]; + # Ignore kernel, as always loaded. + if (depmod != "kernel" && depmod != mod) + uniqmods[depmod] = 1; + } + modlist = "" + depcount[mod] = 0 + for (depmod in uniqmods) { + modlist = modlist " " depmod; + inverse_dependencies[depmod] = inverse_dependencies[depmod] " " mod + depcount[mod]++ + total_depcount++ + } + if (mod == "all_video") { + continue; + } + printf "%s:%s\n", mod, modlist; + } + + # Check that we have no dependency circles + while (total_depcount != 0) { + something_done = 0 + for (mod in depcount) { + if (depcount[mod] == 0) { + delete depcount[mod] + split(inverse_dependencies[mod], inv_depmods, " "); + for (ctr in inv_depmods) { + depcount[inv_depmods[ctr]]-- + total_depcount-- + } + delete inverse_dependencies[mod] + something_done = 1 + } + } + if (something_done == 0) { + for (mod in depcount) { + circle = circle " " mod + } + printf "error: modules %s form a dependency circle\n", circle >"/dev/stderr"; + exit 1 + } + } + modlist = "" + while (getline <"video.lst") { + modlist = modlist " " $1; + } + printf "all_video:%s\n", modlist; +} diff --git a/grub-core/gensyminfo.sh.in b/grub-core/gensyminfo.sh.in new file mode 100644 index 000000000..2e8716b42 --- /dev/null +++ b/grub-core/gensyminfo.sh.in @@ -0,0 +1,37 @@ +#! /bin/sh +set -e + +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# This gensymlist.sh is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# +# Example: +# +# gensyms.sh normal.module +# + +module=$1 +modname=`echo $module | sed -e 's@\.module.*$@@'` + +# Print all symbols defined by module +if test x"@TARGET_NMFLAGS_DEFINED_ONLY@" = x && test x"@TARGET_NMFLAGS_MINUS_P@" = x; then + @TARGET_NM@ -g -p $module | \ + sed -n "s@^\([0-9a-fA-F]*\) *[TBRDS] *\([^ ]*\).*@defined $modname \2@p" +elif test x"@TARGET_NMFLAGS_DEFINED_ONLY@" = x; then + @TARGET_NM@ -g @TARGET_NMFLAGS_MINUS_P@ -p $module | \ + sed -n "s@^\([^ ]*\) *[TBRDS] *\([0-9a-fA-F]*\).*@defined $modname \1@p" +else + @TARGET_NM@ -g --defined-only @TARGET_NMFLAGS_MINUS_P@ -p $module | \ + sed "s@^\([^ ]*\).*@defined $modname \1@g" +fi + +# Print all undefined symbols used by module +@TARGET_NM@ -u @TARGET_NMFLAGS_MINUS_P@ -p $module | sed "s@^\([^ ]*\).*@undefined $modname \1@g" diff --git a/grub-core/gensymlist.sh b/grub-core/gensymlist.sh new file mode 100644 index 000000000..5beaabdd6 --- /dev/null +++ b/grub-core/gensymlist.sh @@ -0,0 +1,73 @@ +#! /bin/sh +# +# Copyright (C) 2002,2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# This gensymlist.sh.in is free software; the author +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +cat <. + */ + +EOF + +for i in $*; do + echo "#include <$i>" +done + +cat < sizeof (tab[0])); + for (p = tab; p->name; p++) + grub_dl_register_symbol (p->name, p->addr, p->isfunc, 0); +} +EOF diff --git a/grub-core/gentrigtables.c b/grub-core/gentrigtables.c new file mode 100644 index 000000000..fface6efc --- /dev/null +++ b/grub-core/gentrigtables.c @@ -0,0 +1,57 @@ +/* Generate trigonometric function tables. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define _GNU_SOURCE 1 + +#include +#include +#include + +int +main (int argc __attribute__ ((unused)), + char **argv __attribute__ ((unused))) +{ + int i; + + printf ("#include \n"); + printf ("#include \n"); + printf ("\n"); + + printf ("/* Under copyright legislature such automated output isn't\n"); + printf ("covered by any copyright. Hence it's public domain. Public\n"); + printf ("domain works can be dual-licenced with any license. */\n"); + printf ("GRUB_MOD_LICENSE (\"GPLv3+\");"); + printf ("GRUB_MOD_DUAL_LICENSE (\"Public Domain\");"); + +#define TAB(op) \ + printf ("const grub_int16_t grub_trig_" #op "tab[] =\n{"); \ + for (i = 0; i < GRUB_TRIG_ANGLE_MAX; i++) \ + { \ + double x = i * 2 * M_PI / GRUB_TRIG_ANGLE_MAX; \ + if (i % 10 == 0) \ + printf ("\n "); \ + printf ("%d,", (int) (round (op (x) * GRUB_TRIG_FRACTION_SCALE))); \ + } \ + printf ("\n};\n") + + TAB(sin); + TAB(cos); + + return 0; +} diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c new file mode 100644 index 000000000..4880cefe3 --- /dev/null +++ b/grub-core/gettext/gettext.c @@ -0,0 +1,542 @@ +/* gettext.c - gettext module */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* + .mo file information from: + http://www.gnu.org/software/autoconf/manual/gettext/MO-Files.html . +*/ + +static const char *(*grub_gettext_original) (const char *s); + +struct grub_gettext_msg +{ + char *name; + char *translated; +}; + +struct header +{ + grub_uint32_t magic; + grub_uint32_t version; + grub_uint32_t number_of_strings; + grub_uint32_t offset_original; + grub_uint32_t offset_translation; +}; + +struct string_descriptor +{ + grub_uint32_t length; + grub_uint32_t offset; +}; + +struct grub_gettext_context +{ + grub_file_t fd_mo; + grub_off_t grub_gettext_offset_original; + grub_off_t grub_gettext_offset_translation; + grub_size_t grub_gettext_max; + int grub_gettext_max_log; + struct grub_gettext_msg *grub_gettext_msg_list; +}; + +static struct grub_gettext_context main_context, secondary_context; + +#define MO_MAGIC_NUMBER 0x950412de + +static grub_err_t +grub_gettext_pread (grub_file_t file, void *buf, grub_size_t len, + grub_off_t offset) +{ + if (len == 0) + return GRUB_ERR_NONE; + if (grub_file_seek (file, offset) == (grub_off_t) - 1) + return grub_errno; + if (grub_file_read (file, buf, len) != (grub_ssize_t) len) + { + if (!grub_errno) + grub_error (GRUB_ERR_READ_ERROR, N_("premature end of file")); + return grub_errno; + } + return GRUB_ERR_NONE; +} + +static char * +grub_gettext_getstr_from_position (struct grub_gettext_context *ctx, + grub_off_t off, + grub_size_t position) +{ + grub_off_t internal_position; + grub_size_t length; + grub_off_t offset; + char *translation; + struct string_descriptor desc; + grub_err_t err; + + internal_position = (off + position * sizeof (desc)); + + err = grub_gettext_pread (ctx->fd_mo, (char *) &desc, + sizeof (desc), internal_position); + if (err) + return NULL; + length = grub_cpu_to_le32 (desc.length); + offset = grub_cpu_to_le32 (desc.offset); + + translation = grub_malloc (length + 1); + if (!translation) + return NULL; + + err = grub_gettext_pread (ctx->fd_mo, translation, length, offset); + if (err) + { + grub_free (translation); + return NULL; + } + translation[length] = '\0'; + + return translation; +} + +static const char * +grub_gettext_gettranslation_from_position (struct grub_gettext_context *ctx, + grub_size_t position) +{ + if (!ctx->grub_gettext_msg_list[position].translated) + ctx->grub_gettext_msg_list[position].translated + = grub_gettext_getstr_from_position (ctx, + ctx->grub_gettext_offset_translation, + position); + return ctx->grub_gettext_msg_list[position].translated; +} + +static const char * +grub_gettext_getstring_from_position (struct grub_gettext_context *ctx, + grub_size_t position) +{ + if (!ctx->grub_gettext_msg_list[position].name) + ctx->grub_gettext_msg_list[position].name + = grub_gettext_getstr_from_position (ctx, + ctx->grub_gettext_offset_original, + position); + return ctx->grub_gettext_msg_list[position].name; +} + +static const char * +grub_gettext_translate_real (struct grub_gettext_context *ctx, + const char *orig) +{ + grub_size_t current = 0; + int i; + const char *current_string; + static int depth = 0; + + if (!ctx->grub_gettext_msg_list || !ctx->fd_mo) + return NULL; + + /* Shouldn't happen. Just a precaution if our own code + calls gettext somehow. */ + if (depth > 2) + return NULL; + depth++; + + /* Make sure we can use grub_gettext_translate for error messages. Push + active error message to error stack and reset error message. */ + grub_error_push (); + + for (i = ctx->grub_gettext_max_log; i >= 0; i--) + { + grub_size_t test; + int cmp; + + test = current | (1 << i); + if (test >= ctx->grub_gettext_max) + continue; + + current_string = grub_gettext_getstring_from_position (ctx, test); + + if (!current_string) + { + grub_errno = GRUB_ERR_NONE; + grub_error_pop (); + depth--; + return NULL; + } + + /* Search by bisection. */ + cmp = grub_strcmp (current_string, orig); + if (cmp <= 0) + current = test; + if (cmp == 0) + { + const char *ret = 0; + ret = grub_gettext_gettranslation_from_position (ctx, current); + if (!ret) + { + grub_errno = GRUB_ERR_NONE; + grub_error_pop (); + depth--; + return NULL; + } + grub_error_pop (); + depth--; + return ret; + } + } + + if (current == 0 && ctx->grub_gettext_max != 0) + { + current_string = grub_gettext_getstring_from_position (ctx, 0); + + if (!current_string) + { + grub_errno = GRUB_ERR_NONE; + grub_error_pop (); + depth--; + return NULL; + } + + if (grub_strcmp (current_string, orig) == 0) + { + const char *ret = 0; + ret = grub_gettext_gettranslation_from_position (ctx, current); + if (!ret) + { + grub_errno = GRUB_ERR_NONE; + grub_error_pop (); + depth--; + return NULL; + } + grub_error_pop (); + depth--; + return ret; + } + } + + grub_error_pop (); + depth--; + return NULL; +} + +static const char * +grub_gettext_translate (const char *orig) +{ + const char *ret; + if (orig[0] == 0) + return orig; + + ret = grub_gettext_translate_real (&main_context, orig); + if (ret) + return ret; + ret = grub_gettext_translate_real (&secondary_context, orig); + if (ret) + return ret; + return orig; +} + +static void +grub_gettext_delete_list (struct grub_gettext_context *ctx) +{ + struct grub_gettext_msg *l = ctx->grub_gettext_msg_list; + grub_size_t i; + + if (!l) + return; + ctx->grub_gettext_msg_list = 0; + for (i = 0; i < ctx->grub_gettext_max; i++) + grub_free (l[i].name); + /* Don't delete the translated message because could be in use. */ + grub_free (l); + if (ctx->fd_mo) + grub_file_close (ctx->fd_mo); + ctx->fd_mo = 0; + grub_memset (ctx, 0, sizeof (*ctx)); +} + +/* This is similar to grub_file_open. */ +static grub_err_t +grub_mofile_open (struct grub_gettext_context *ctx, + const char *filename) +{ + struct header head; + grub_err_t err; + grub_file_t fd; + + /* Using fd_mo and not another variable because + it's needed for grub_gettext_get_info. */ + + fd = grub_file_open (filename); + + if (!fd) + return grub_errno; + + err = grub_gettext_pread (fd, &head, sizeof (head), 0); + if (err) + { + grub_file_close (fd); + return err; + } + + if (head.magic != grub_cpu_to_le32_compile_time (MO_MAGIC_NUMBER)) + { + grub_file_close (fd); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, + "mo: invalid mo magic in file: %s", filename); + } + + if (head.version != 0) + { + grub_file_close (fd); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, + "mo: invalid mo version in file: %s", filename); + } + + ctx->grub_gettext_offset_original = grub_le_to_cpu32 (head.offset_original); + ctx->grub_gettext_offset_translation = grub_le_to_cpu32 (head.offset_translation); + ctx->grub_gettext_max = grub_le_to_cpu32 (head.number_of_strings); + for (ctx->grub_gettext_max_log = 0; ctx->grub_gettext_max >> ctx->grub_gettext_max_log; + ctx->grub_gettext_max_log++); + + ctx->grub_gettext_msg_list = grub_zalloc (ctx->grub_gettext_max + * sizeof (ctx->grub_gettext_msg_list[0])); + if (!ctx->grub_gettext_msg_list) + { + grub_file_close (fd); + return grub_errno; + } + ctx->fd_mo = fd; + if (grub_gettext != grub_gettext_translate) + { + grub_gettext_original = grub_gettext; + grub_gettext = grub_gettext_translate; + } + return 0; +} + +/* Returning grub_file_t would be more natural, but grub_mofile_open assigns + to fd_mo anyway ... */ +static grub_err_t +grub_mofile_open_lang (struct grub_gettext_context *ctx, + const char *part1, const char *part2, const char *locale) +{ + char *mo_file; + grub_err_t err; + + /* mo_file e.g.: /boot/grub/locale/ca.mo */ + + mo_file = grub_xasprintf ("%s%s/%s.mo", part1, part2, locale); + if (!mo_file) + return grub_errno; + + err = grub_mofile_open (ctx, mo_file); + grub_free (mo_file); + + /* Will try adding .gz as well. */ + if (err) + { + grub_errno = GRUB_ERR_NONE; + mo_file = grub_xasprintf ("%s%s/%s.mo.gz", part1, part2, locale); + if (!mo_file) + return grub_errno; + err = grub_mofile_open (ctx, mo_file); + grub_free (mo_file); + } + + /* Will try adding .gmo as well. */ + if (err) + { + grub_errno = GRUB_ERR_NONE; + mo_file = grub_xasprintf ("%s%s/%s.gmo", part1, part2, locale); + if (!mo_file) + return grub_errno; + err = grub_mofile_open (ctx, mo_file); + grub_free (mo_file); + } + + return err; +} + +static grub_err_t +grub_gettext_init_ext (struct grub_gettext_context *ctx, + const char *locale, + const char *locale_dir, const char *prefix) +{ + const char *part1, *part2; + grub_err_t err; + + grub_gettext_delete_list (ctx); + + if (!locale || locale[0] == 0) + return 0; + + part1 = locale_dir; + part2 = ""; + if (!part1 || part1[0] == 0) + { + part1 = prefix; + part2 = "/locale"; + } + + if (!part1 || part1[0] == 0) + return 0; + + err = grub_mofile_open_lang (ctx, part1, part2, locale); + + /* ll_CC didn't work, so try ll. */ + if (err) + { + char *lang = grub_strdup (locale); + char *underscore = lang ? grub_strchr (lang, '_') : 0; + + if (underscore) + { + *underscore = '\0'; + grub_errno = GRUB_ERR_NONE; + err = grub_mofile_open_lang (ctx, part1, part2, lang); + } + + grub_free (lang); + } + + if (locale[0] == 'e' && locale[1] == 'n' + && (locale[2] == '\0' || locale[2] == '_')) + grub_errno = err = GRUB_ERR_NONE; + return err; +} + +static char * +grub_gettext_env_write_lang (struct grub_env_var *var + __attribute__ ((unused)), const char *val) +{ + grub_err_t err; + err = grub_gettext_init_ext (&main_context, val, grub_env_get ("locale_dir"), + grub_env_get ("prefix")); + if (err) + grub_print_error (); + + err = grub_gettext_init_ext (&secondary_context, val, + grub_env_get ("secondary_locale_dir"), 0); + if (err) + grub_print_error (); + + return grub_strdup (val); +} + +void +grub_gettext_reread_prefix (const char *val) +{ + grub_err_t err; + err = grub_gettext_init_ext (&main_context, grub_env_get ("lang"), + grub_env_get ("locale_dir"), + val); + if (err) + grub_print_error (); +} + +static char * +read_main (struct grub_env_var *var + __attribute__ ((unused)), const char *val) +{ + grub_err_t err; + err = grub_gettext_init_ext (&main_context, grub_env_get ("lang"), val, + grub_env_get ("prefix")); + if (err) + grub_print_error (); + return grub_strdup (val); +} + +static char * +read_secondary (struct grub_env_var *var + __attribute__ ((unused)), const char *val) +{ + grub_err_t err; + err = grub_gettext_init_ext (&secondary_context, grub_env_get ("lang"), val, + 0); + if (err) + grub_print_error (); + + return grub_strdup (val); +} + +static grub_err_t +grub_cmd_translate (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + const char *translation; + translation = grub_gettext_translate (args[0]); + grub_printf ("%s\n", translation); + return 0; +} + +GRUB_MOD_INIT (gettext) +{ + const char *lang; + grub_err_t err; + + lang = grub_env_get ("lang"); + + err = grub_gettext_init_ext (&main_context, lang, grub_env_get ("locale_dir"), + grub_env_get ("prefix")); + if (err) + grub_print_error (); + err = grub_gettext_init_ext (&secondary_context, lang, + grub_env_get ("secondary_locale_dir"), 0); + if (err) + grub_print_error (); + + grub_register_variable_hook ("locale_dir", NULL, read_main); + grub_register_variable_hook ("secondary_locale_dir", NULL, read_secondary); + + grub_register_command_p1 ("gettext", grub_cmd_translate, + N_("STRING"), + /* TRANSLATORS: It refers to passing the string through gettext. + So it's "translate" in the same meaning as in what you're + doing now. + */ + N_("Translates the string with the current settings.")); + + /* Reload .mo file information if lang changes. */ + grub_register_variable_hook ("lang", NULL, grub_gettext_env_write_lang); + + /* Preserve hooks after context changes. */ + grub_env_export ("lang"); + grub_env_export ("locale_dir"); + grub_env_export ("secondary_locale_dir"); +} + +GRUB_MOD_FINI (gettext) +{ + grub_gettext_delete_list (&main_context); + grub_gettext_delete_list (&secondary_context); + + grub_gettext = grub_gettext_original; +} diff --git a/grub-core/gfxmenu/font.c b/grub-core/gfxmenu/font.c new file mode 100644 index 000000000..756c24f20 --- /dev/null +++ b/grub-core/gfxmenu/font.c @@ -0,0 +1,116 @@ +/* font.c - Font API and font file loader. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Draw a UTF-8 string of text on the current video render target. + The x coordinate specifies the starting x position for the first character, + while the y coordinate specifies the baseline position. + If the string contains a character that FONT does not contain, then + a glyph from another loaded font may be used instead. */ +grub_err_t +grub_font_draw_string (const char *str, grub_font_t font, + grub_video_color_t color, + int left_x, int baseline_y) +{ + int x; + grub_uint32_t *logical; + grub_ssize_t logical_len, visual_len; + struct grub_unicode_glyph *visual, *ptr; + grub_err_t err; + + logical_len = grub_utf8_to_ucs4_alloc (str, &logical, 0); + if (logical_len < 0) + return grub_errno; + + visual_len = grub_bidi_logical_to_visual (logical, logical_len, &visual, + 0, 0, 0, 0, 0, 0, 0); + grub_free (logical); + if (visual_len < 0) + return grub_errno; + + err = GRUB_ERR_NONE; + for (ptr = visual, x = left_x; ptr < visual + visual_len; ptr++) + { + struct grub_font_glyph *glyph; + glyph = grub_font_construct_glyph (font, ptr); + if (!glyph) + { + err = grub_errno; + goto out; + } + err = grub_font_draw_glyph (glyph, color, x, baseline_y); + if (err) + goto out; + x += glyph->device_width; + } + +out: + for (ptr = visual; ptr < visual + visual_len; ptr++) + grub_unicode_destroy_glyph (ptr); + grub_free (visual); + + return err; +} + +/* Get the width in pixels of the specified UTF-8 string, when rendered in + in the specified font (but falling back on other fonts for glyphs that + are missing). */ +int +grub_font_get_string_width (grub_font_t font, const char *str) +{ + int width = 0; + grub_uint32_t *ptr; + grub_ssize_t logical_len; + grub_uint32_t *logical; + + logical_len = grub_utf8_to_ucs4_alloc (str, &logical, 0); + if (logical_len < 0) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + + for (ptr = logical; ptr < logical + logical_len;) + { + struct grub_unicode_glyph glyph; + + ptr += grub_unicode_aglomerate_comb (ptr, + logical_len - (ptr - logical), + &glyph); + width += grub_font_get_constructed_device_width (font, &glyph); + + grub_unicode_destroy_glyph (&glyph); + } + grub_free (logical); + + return width; +} diff --git a/grub-core/gfxmenu/gfxmenu.c b/grub-core/gfxmenu/gfxmenu.c new file mode 100644 index 000000000..8a17dda2c --- /dev/null +++ b/grub-core/gfxmenu/gfxmenu.c @@ -0,0 +1,150 @@ +/* gfxmenu.c - Graphical menu interface controller. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_gfxmenu_view_t cached_view; + +static void +grub_gfxmenu_viewer_fini (void *data __attribute__ ((unused))) +{ +} + +/* FIXME: Previously 't' changed to text menu is it necessary? */ +static grub_err_t +grub_gfxmenu_try (int entry, grub_menu_t menu, int nested) +{ + grub_gfxmenu_view_t view = NULL; + const char *theme_path; + char *full_theme_path = 0; + struct grub_menu_viewer *instance; + grub_err_t err; + struct grub_video_mode_info mode_info; + + theme_path = grub_env_get ("theme"); + if (! theme_path) + return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), + "theme"); + + err = grub_video_get_info (&mode_info); + if (err) + return err; + + instance = grub_zalloc (sizeof (*instance)); + if (!instance) + return grub_errno; + + if (theme_path[0] != '/' && theme_path[0] != '(') + { + const char *prefix; + prefix = grub_env_get ("prefix"); + full_theme_path = grub_xasprintf ("%s/themes/%s", + prefix, + theme_path); + } + + if (!cached_view || grub_strcmp (cached_view->theme_path, + full_theme_path ? : theme_path) != 0 + || cached_view->screen.width != mode_info.width + || cached_view->screen.height != mode_info.height) + { + grub_gfxmenu_view_destroy (cached_view); + /* Create the view. */ + cached_view = grub_gfxmenu_view_new (full_theme_path ? : theme_path, + mode_info.width, + mode_info.height); + } + grub_free (full_theme_path); + + if (! cached_view) + { + grub_free (instance); + return grub_errno; + } + + view = cached_view; + + view->double_repaint = (mode_info.mode_type + & GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED) + && !(mode_info.mode_type & GRUB_VIDEO_MODE_TYPE_UPDATING_SWAP); + view->selected = entry; + view->menu = menu; + view->nested = nested; + view->first_timeout = -1; + + grub_video_set_viewport (0, 0, mode_info.width, mode_info.height); + if (view->double_repaint) + { + grub_video_swap_buffers (); + grub_video_set_viewport (0, 0, mode_info.width, mode_info.height); + } + + grub_gfxmenu_view_draw (view); + + instance->data = view; + instance->set_chosen_entry = grub_gfxmenu_set_chosen_entry; + instance->fini = grub_gfxmenu_viewer_fini; + instance->print_timeout = grub_gfxmenu_print_timeout; + instance->clear_timeout = grub_gfxmenu_clear_timeout; + + grub_menu_register_viewer (instance); + + return GRUB_ERR_NONE; +} + +GRUB_MOD_INIT (gfxmenu) +{ + struct grub_term_output *term; + + FOR_ACTIVE_TERM_OUTPUTS(term) + if (grub_gfxmenu_try_hook && term->fullscreen) + { + term->fullscreen (); + break; + } + + grub_gfxmenu_try_hook = grub_gfxmenu_try; +} + +GRUB_MOD_FINI (gfxmenu) +{ + grub_gfxmenu_view_destroy (cached_view); + grub_gfxmenu_try_hook = NULL; +} diff --git a/grub-core/gfxmenu/gui_box.c b/grub-core/gfxmenu/gui_box.c new file mode 100644 index 000000000..37bab3fbb --- /dev/null +++ b/grub-core/gfxmenu/gui_box.c @@ -0,0 +1,428 @@ +/* gui_box.c - GUI container that stack components. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +struct component_node +{ + grub_gui_component_t component; + struct component_node *next; + struct component_node *prev; +}; + +typedef struct grub_gui_box *grub_gui_box_t; + +typedef void (*layout_func_t) (grub_gui_box_t self, int modify_layout, + unsigned *minimal_width, + unsigned *minimal_height); + +struct grub_gui_box +{ + struct grub_gui_container container; + + grub_gui_container_t parent; + grub_video_rect_t bounds; + char *id; + + /* Doubly linked list of components with dummy head & tail nodes. */ + struct component_node chead; + struct component_node ctail; + + /* The layout function: differs for vertical and horizontal boxes. */ + layout_func_t layout_func; +}; + +static void +box_destroy (void *vself) +{ + grub_gui_box_t self = vself; + struct component_node *cur; + struct component_node *next; + for (cur = self->chead.next; cur != &self->ctail; cur = next) + { + /* Copy the 'next' pointer, since we need it for the next iteration, + and we're going to free the memory it is stored in. */ + next = cur->next; + /* Destroy the child component. */ + cur->component->ops->destroy (cur->component); + /* Free the linked list node. */ + grub_free (cur); + } + grub_free (self); +} + +static const char * +box_get_id (void *vself) +{ + grub_gui_box_t self = vself; + return self->id; +} + +static int +box_is_instance (void *vself __attribute__((unused)), const char *type) +{ + return (grub_strcmp (type, "component") == 0 + || grub_strcmp (type, "container") == 0); +} + +static void +layout_horizontally (grub_gui_box_t self, int modify_layout, + unsigned *min_width, unsigned *min_height) +{ + /* Start at the left (chead) and set the x coordinates as we go right. */ + /* All components have their width set to the box's width. */ + + struct component_node *cur; + unsigned w = 0, mwfrac = 0, h = 0, x = 0; + grub_fixed_signed_t wfrac = 0; + int bogus_frac = 0; + + for (cur = self->chead.next; cur != &self->ctail; cur = cur->next) + { + grub_gui_component_t c = cur->component; + unsigned mw = 0, mh = 0; + + if (c->ops->get_minimal_size) + c->ops->get_minimal_size (c, &mw, &mh); + + if (c->h > (signed) h) + h = c->h; + if (mh > h) + h = mh; + wfrac += c->wfrac; + w += c->w; + if (mw - c->w > 0) + mwfrac += mw - c->w; + } + if (wfrac > GRUB_FIXED_1 || (w > 0 && wfrac == GRUB_FIXED_1)) + bogus_frac = 1; + + if (min_width) + { + if (wfrac < GRUB_FIXED_1) + *min_width = grub_fixed_sfs_divide (w, GRUB_FIXED_1 - wfrac); + else + *min_width = w; + if (*min_width < w + mwfrac) + *min_width = w + mwfrac; + } + if (min_height) + *min_height = h; + + if (!modify_layout) + return; + + for (cur = self->chead.next; cur != &self->ctail; cur = cur->next) + { + grub_video_rect_t r; + grub_gui_component_t c = cur->component; + unsigned mw = 0, mh = 0; + + r.x = x; + r.y = 0; + r.height = h; + + if (c->ops->get_minimal_size) + c->ops->get_minimal_size (c, &mw, &mh); + + r.width = c->w; + if (!bogus_frac) + r.width += grub_fixed_sfs_multiply (self->bounds.width, c->wfrac); + + if (r.width < mw) + r.width = mw; + + c->ops->set_bounds (c, &r); + + x += r.width; + } +} + +static void +layout_vertically (grub_gui_box_t self, int modify_layout, + unsigned *min_width, unsigned *min_height) +{ + /* Start at the top (chead) and set the y coordinates as we go rdown. */ + /* All components have their height set to the box's height. */ + + struct component_node *cur; + unsigned h = 0, mhfrac = 0, w = 0, y = 0; + grub_fixed_signed_t hfrac = 0; + int bogus_frac = 0; + + for (cur = self->chead.next; cur != &self->ctail; cur = cur->next) + { + grub_gui_component_t c = cur->component; + unsigned mw = 0, mh = 0; + + if (c->ops->get_minimal_size) + c->ops->get_minimal_size (c, &mw, &mh); + + if (c->w > (signed) w) + w = c->w; + if (mw > w) + w = mw; + hfrac += c->hfrac; + h += c->h; + if (mh - c->h > 0) + mhfrac += mh - c->h; + } + if (hfrac > GRUB_FIXED_1 || (h > 0 && hfrac == GRUB_FIXED_1)) + bogus_frac = 1; + + if (min_height) + { + if (hfrac < GRUB_FIXED_1) + *min_height = grub_fixed_sfs_divide (h, GRUB_FIXED_1 - hfrac); + else + *min_height = h; + if (*min_height < h + mhfrac) + *min_height = h + mhfrac; + } + if (min_width) + *min_width = w; + + if (!modify_layout) + return; + + for (cur = self->chead.next; cur != &self->ctail; cur = cur->next) + { + grub_video_rect_t r; + grub_gui_component_t c = cur->component; + unsigned mw = 0, mh = 0; + + r.x = 0; + r.y = y; + r.width = w; + + if (c->ops->get_minimal_size) + c->ops->get_minimal_size (c, &mw, &mh); + + r.height = c->h; + if (!bogus_frac) + r.height += grub_fixed_sfs_multiply (self->bounds.height, c->hfrac); + + if (r.height < mh) + r.height = mh; + + c->ops->set_bounds (c, &r); + + y += r.height; + } +} + +static void +box_paint (void *vself, const grub_video_rect_t *region) +{ + grub_gui_box_t self = vself; + + struct component_node *cur; + grub_video_rect_t vpsave; + + grub_video_area_status_t box_area_status; + grub_video_get_area_status (&box_area_status); + + grub_gui_set_viewport (&self->bounds, &vpsave); + for (cur = self->chead.next; cur != &self->ctail; cur = cur->next) + { + grub_gui_component_t comp = cur->component; + grub_video_rect_t r; + comp->ops->get_bounds(comp, &r); + + if (!grub_video_have_common_points (region, &r)) + continue; + + /* Paint the child. */ + if (box_area_status == GRUB_VIDEO_AREA_ENABLED + && grub_video_bounds_inside_region (&r, region)) + grub_video_set_area_status (GRUB_VIDEO_AREA_DISABLED); + comp->ops->paint (comp, region); + if (box_area_status == GRUB_VIDEO_AREA_ENABLED) + grub_video_set_area_status (GRUB_VIDEO_AREA_ENABLED); + } + grub_gui_restore_viewport (&vpsave); +} + +static void +box_set_parent (void *vself, grub_gui_container_t parent) +{ + grub_gui_box_t self = vself; + self->parent = parent; +} + +static grub_gui_container_t +box_get_parent (void *vself) +{ + grub_gui_box_t self = vself; + return self->parent; +} + +static void +box_set_bounds (void *vself, const grub_video_rect_t *bounds) +{ + grub_gui_box_t self = vself; + self->bounds = *bounds; + self->layout_func (self, 1, 0, 0); /* Relayout the children. */ +} + +static void +box_get_bounds (void *vself, grub_video_rect_t *bounds) +{ + grub_gui_box_t self = vself; + *bounds = self->bounds; +} + +/* The box's preferred size is based on the preferred sizes + of its children. */ +static void +box_get_minimal_size (void *vself, unsigned *width, unsigned *height) +{ + grub_gui_box_t self = vself; + self->layout_func (self, 0, width, height); /* Just calculate the size. */ +} + +static grub_err_t +box_set_property (void *vself, const char *name, const char *value) +{ + grub_gui_box_t self = vself; + if (grub_strcmp (name, "id") == 0) + { + grub_free (self->id); + if (value) + { + self->id = grub_strdup (value); + if (! self->id) + return grub_errno; + } + else + self->id = 0; + } + + return grub_errno; +} + +static void +box_add (void *vself, grub_gui_component_t comp) +{ + grub_gui_box_t self = vself; + struct component_node *node; + node = grub_malloc (sizeof (*node)); + if (! node) + return; /* Note: probably should handle the error. */ + node->component = comp; + /* Insert the node before the tail. */ + node->prev = self->ctail.prev; + node->prev->next = node; + node->next = &self->ctail; + node->next->prev = node; + + comp->ops->set_parent (comp, (grub_gui_container_t) self); + self->layout_func (self, 1, 0, 0); /* Relayout the children. */ +} + +static void +box_remove (void *vself, grub_gui_component_t comp) +{ + grub_gui_box_t self = vself; + struct component_node *cur; + for (cur = self->chead.next; cur != &self->ctail; cur = cur->next) + { + if (cur->component == comp) + { + /* Unlink 'cur' from the list. */ + cur->prev->next = cur->next; + cur->next->prev = cur->prev; + /* Free the node's memory (but don't destroy the component). */ + grub_free (cur); + /* Must not loop again, since 'cur' would be dereferenced! */ + return; + } + } +} + +static void +box_iterate_children (void *vself, + grub_gui_component_callback cb, void *userdata) +{ + grub_gui_box_t self = vself; + struct component_node *cur; + for (cur = self->chead.next; cur != &self->ctail; cur = cur->next) + cb (cur->component, userdata); +} + +static struct grub_gui_component_ops box_comp_ops = + { + .destroy = box_destroy, + .get_id = box_get_id, + .is_instance = box_is_instance, + .paint = box_paint, + .set_parent = box_set_parent, + .get_parent = box_get_parent, + .set_bounds = box_set_bounds, + .get_bounds = box_get_bounds, + .get_minimal_size = box_get_minimal_size, + .set_property = box_set_property + }; + +static struct grub_gui_container_ops box_ops = +{ + .add = box_add, + .remove = box_remove, + .iterate_children = box_iterate_children +}; + +/* Box constructor. Specify the appropriate layout function to create + a horizontal or vertical stacking box. */ +static grub_gui_box_t +box_new (layout_func_t layout_func) +{ + grub_gui_box_t box; + box = grub_zalloc (sizeof (*box)); + if (! box) + return 0; + box->container.ops = &box_ops; + box->container.component.ops = &box_comp_ops; + box->chead.next = &box->ctail; + box->ctail.prev = &box->chead; + box->layout_func = layout_func; + return box; +} + +/* Create a new container that stacks its child components horizontally, + from left to right. Each child get a width corresponding to its + preferred width. The height of each child is set the maximum of the + preferred heights of all children. */ +grub_gui_container_t +grub_gui_hbox_new (void) +{ + return (grub_gui_container_t) box_new (layout_horizontally); +} + +/* Create a new container that stacks its child components verticallyj, + from top to bottom. Each child get a height corresponding to its + preferred height. The width of each child is set the maximum of the + preferred widths of all children. */ +grub_gui_container_t +grub_gui_vbox_new (void) +{ + return (grub_gui_container_t) box_new (layout_vertically); +} diff --git a/grub-core/gfxmenu/gui_canvas.c b/grub-core/gfxmenu/gui_canvas.c new file mode 100644 index 000000000..a05491242 --- /dev/null +++ b/grub-core/gfxmenu/gui_canvas.c @@ -0,0 +1,278 @@ +/* gui_canvas.c - GUI container allowing manually placed components. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +/* TODO Add layering so that components can be properly overlaid. */ + +struct component_node +{ + grub_gui_component_t component; + struct component_node *next; +}; + +struct grub_gui_canvas +{ + struct grub_gui_container container; + + grub_gui_container_t parent; + grub_video_rect_t bounds; + char *id; + /* Component list (dummy head node). */ + struct component_node components; +}; + +typedef struct grub_gui_canvas *grub_gui_canvas_t; + +static void +canvas_destroy (void *vself) +{ + grub_gui_canvas_t self = vself; + struct component_node *cur; + struct component_node *next; + for (cur = self->components.next; cur; cur = next) + { + /* Copy the 'next' pointer, since we need it for the next iteration, + and we're going to free the memory it is stored in. */ + next = cur->next; + /* Destroy the child component. */ + cur->component->ops->destroy (cur->component); + /* Free the linked list node. */ + grub_free (cur); + } + grub_free (self); +} + +static const char * +canvas_get_id (void *vself) +{ + grub_gui_canvas_t self = vself; + return self->id; +} + +static int +canvas_is_instance (void *vself __attribute__((unused)), const char *type) +{ + return (grub_strcmp (type, "component") == 0 + || grub_strcmp (type, "container") == 0); +} + +static void +canvas_paint (void *vself, const grub_video_rect_t *region) +{ + grub_gui_canvas_t self = vself; + + struct component_node *cur; + grub_video_rect_t vpsave; + + grub_video_area_status_t canvas_area_status; + grub_video_get_area_status (&canvas_area_status); + + grub_gui_set_viewport (&self->bounds, &vpsave); + for (cur = self->components.next; cur; cur = cur->next) + { + grub_video_rect_t r; + grub_gui_component_t comp; + signed x, y, w, h; + + comp = cur->component; + + w = grub_fixed_sfs_multiply (self->bounds.width, comp->wfrac) + comp->w; + h = grub_fixed_sfs_multiply (self->bounds.height, comp->hfrac) + comp->h; + x = grub_fixed_sfs_multiply (self->bounds.width, comp->xfrac) + comp->x; + y = grub_fixed_sfs_multiply (self->bounds.height, comp->yfrac) + comp->y; + + if (comp->ops->get_minimal_size) + { + unsigned mw; + unsigned mh; + comp->ops->get_minimal_size (comp, &mw, &mh); + if (w < (signed) mw) + w = mw; + if (h < (signed) mh) + h = mh; + } + + /* Sanity checks. */ + if (w <= 0) + w = 32; + if (h <= 0) + h = 32; + + if (x >= (signed) self->bounds.width) + x = self->bounds.width - 32; + if (y >= (signed) self->bounds.height) + y = self->bounds.height - 32; + + if (x < 0) + x = 0; + if (y < 0) + y = 0; + + if (x + w >= (signed) self->bounds.width) + w = self->bounds.width - x; + if (y + h >= (signed) self->bounds.height) + h = self->bounds.height - y; + + r.x = x; + r.y = y; + r.width = w; + r.height = h; + comp->ops->set_bounds (comp, &r); + + if (!grub_video_have_common_points (region, &r)) + continue; + + /* Paint the child. */ + if (canvas_area_status == GRUB_VIDEO_AREA_ENABLED + && grub_video_bounds_inside_region (&r, region)) + grub_video_set_area_status (GRUB_VIDEO_AREA_DISABLED); + comp->ops->paint (comp, region); + if (canvas_area_status == GRUB_VIDEO_AREA_ENABLED) + grub_video_set_area_status (GRUB_VIDEO_AREA_ENABLED); + } + grub_gui_restore_viewport (&vpsave); +} + +static void +canvas_set_parent (void *vself, grub_gui_container_t parent) +{ + grub_gui_canvas_t self = vself; + self->parent = parent; +} + +static grub_gui_container_t +canvas_get_parent (void *vself) +{ + grub_gui_canvas_t self = vself; + return self->parent; +} + +static void +canvas_set_bounds (void *vself, const grub_video_rect_t *bounds) +{ + grub_gui_canvas_t self = vself; + self->bounds = *bounds; +} + +static void +canvas_get_bounds (void *vself, grub_video_rect_t *bounds) +{ + grub_gui_canvas_t self = vself; + *bounds = self->bounds; +} + +static grub_err_t +canvas_set_property (void *vself, const char *name, const char *value) +{ + grub_gui_canvas_t self = vself; + if (grub_strcmp (name, "id") == 0) + { + grub_free (self->id); + if (value) + { + self->id = grub_strdup (value); + if (! self->id) + return grub_errno; + } + else + self->id = 0; + } + return grub_errno; +} + +static void +canvas_add (void *vself, grub_gui_component_t comp) +{ + grub_gui_canvas_t self = vself; + struct component_node *node; + node = grub_malloc (sizeof (*node)); + if (! node) + return; /* Note: probably should handle the error. */ + node->component = comp; + node->next = self->components.next; + self->components.next = node; + comp->ops->set_parent (comp, (grub_gui_container_t) self); +} + +static void +canvas_remove (void *vself, grub_gui_component_t comp) +{ + grub_gui_canvas_t self = vself; + struct component_node *cur; + struct component_node *prev; + prev = &self->components; + for (cur = self->components.next; cur; prev = cur, cur = cur->next) + { + if (cur->component == comp) + { + /* Unlink 'cur' from the list. */ + prev->next = cur->next; + /* Free the node's memory (but don't destroy the component). */ + grub_free (cur); + /* Must not loop again, since 'cur' would be dereferenced! */ + return; + } + } +} + +static void +canvas_iterate_children (void *vself, + grub_gui_component_callback cb, void *userdata) +{ + grub_gui_canvas_t self = vself; + struct component_node *cur; + for (cur = self->components.next; cur; cur = cur->next) + cb (cur->component, userdata); +} + +static struct grub_gui_component_ops canvas_comp_ops = +{ + .destroy = canvas_destroy, + .get_id = canvas_get_id, + .is_instance = canvas_is_instance, + .paint = canvas_paint, + .set_parent = canvas_set_parent, + .get_parent = canvas_get_parent, + .set_bounds = canvas_set_bounds, + .get_bounds = canvas_get_bounds, + .set_property = canvas_set_property +}; + +static struct grub_gui_container_ops canvas_ops = +{ + .add = canvas_add, + .remove = canvas_remove, + .iterate_children = canvas_iterate_children +}; + +grub_gui_container_t +grub_gui_canvas_new (void) +{ + grub_gui_canvas_t canvas; + canvas = grub_zalloc (sizeof (*canvas)); + if (! canvas) + return 0; + canvas->container.ops = &canvas_ops; + canvas->container.component.ops = &canvas_comp_ops; + return (grub_gui_container_t) canvas; +} diff --git a/grub-core/gfxmenu/gui_circular_progress.c b/grub-core/gfxmenu/gui_circular_progress.c new file mode 100644 index 000000000..354dd7b73 --- /dev/null +++ b/grub-core/gfxmenu/gui_circular_progress.c @@ -0,0 +1,331 @@ +/* gui_circular_process.c - GUI circular progress indicator component. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct grub_gui_circular_progress +{ + struct grub_gui_progress progress; + + grub_gui_container_t parent; + grub_video_rect_t bounds; + char *id; + int visible; + int start; + int end; + int value; + unsigned num_ticks; + int start_angle; + int ticks_disappear; + char *theme_dir; + int need_to_load_pixmaps; + char *center_file; + char *tick_file; + struct grub_video_bitmap *center_bitmap; + struct grub_video_bitmap *tick_bitmap; +}; + +typedef struct grub_gui_circular_progress *circular_progress_t; + +static void +circprog_destroy (void *vself) +{ + circular_progress_t self = vself; + grub_gfxmenu_timeout_unregister ((grub_gui_component_t) self); + grub_free (self); +} + +static const char * +circprog_get_id (void *vself) +{ + circular_progress_t self = vself; + return self->id; +} + +static int +circprog_is_instance (void *vself __attribute__((unused)), const char *type) +{ + return grub_strcmp (type, "component") == 0; +} + +static struct grub_video_bitmap * +load_bitmap (const char *dir, const char *file) +{ + struct grub_video_bitmap *bitmap; + char *abspath; + + /* Check arguments. */ + if (! dir || ! file) + return 0; + + /* Resolve to an absolute path. */ + abspath = grub_resolve_relative_path (dir, file); + if (! abspath) + return 0; + + /* Load the image. */ + grub_errno = GRUB_ERR_NONE; + grub_video_bitmap_load (&bitmap, abspath); + grub_errno = GRUB_ERR_NONE; + + grub_free (abspath); + return bitmap; +} + +static int +check_pixmaps (circular_progress_t self) +{ + if (self->need_to_load_pixmaps) + { + if (self->center_bitmap) + grub_video_bitmap_destroy (self->center_bitmap); + self->center_bitmap = load_bitmap (self->theme_dir, self->center_file); + self->tick_bitmap = load_bitmap (self->theme_dir, self->tick_file); + self->need_to_load_pixmaps = 0; + } + + return (self->center_bitmap != 0 && self->tick_bitmap != 0); +} + +static void +circprog_paint (void *vself, const grub_video_rect_t *region) +{ + circular_progress_t self = vself; + + if (! self->visible) + return; + + if (!grub_video_have_common_points (region, &self->bounds)) + return; + + if (! check_pixmaps (self)) + return; + + grub_video_rect_t vpsave; + grub_gui_set_viewport (&self->bounds, &vpsave); + + int width = self->bounds.width; + int height = self->bounds.height; + int center_width = grub_video_bitmap_get_width (self->center_bitmap); + int center_height = grub_video_bitmap_get_height (self->center_bitmap); + int tick_width = grub_video_bitmap_get_width (self->tick_bitmap); + int tick_height = grub_video_bitmap_get_height (self->tick_bitmap); + grub_video_blit_bitmap (self->center_bitmap, GRUB_VIDEO_BLIT_BLEND, + (width - center_width) / 2, + (height - center_height) / 2, 0, 0, + center_width, center_height); + + if (self->num_ticks) + { + int radius = grub_min (height, width) / 2 - grub_max (tick_height, tick_width) / 2 - 1; + unsigned nticks; + unsigned tick_begin; + unsigned tick_end; + if (self->end <= self->start + || self->value <= self->start) + nticks = 0; + else + nticks = ((unsigned) (self->num_ticks + * (self->value - self->start))) + / ((unsigned) (self->end - self->start)); + /* Do ticks appear or disappear as the value approached the end? */ + if (self->ticks_disappear) + { + tick_begin = nticks; + tick_end = self->num_ticks; + } + else + { + tick_begin = 0; + tick_end = nticks; + } + + unsigned i; + for (i = tick_begin; i < tick_end; i++) + { + int x; + int y; + int angle; + + /* Calculate the location of the tick. */ + angle = self->start_angle + + i * GRUB_TRIG_ANGLE_MAX / self->num_ticks; + x = width / 2 + (grub_cos (angle) * radius / GRUB_TRIG_FRACTION_SCALE); + y = height / 2 + (grub_sin (angle) * radius / GRUB_TRIG_FRACTION_SCALE); + + /* Adjust (x,y) so the tick is centered. */ + x -= tick_width / 2; + y -= tick_height / 2; + + /* Draw the tick. */ + grub_video_blit_bitmap (self->tick_bitmap, GRUB_VIDEO_BLIT_BLEND, + x, y, 0, 0, tick_width, tick_height); + } + } + grub_gui_restore_viewport (&vpsave); +} + +static void +circprog_set_parent (void *vself, grub_gui_container_t parent) +{ + circular_progress_t self = vself; + self->parent = parent; +} + +static grub_gui_container_t +circprog_get_parent (void *vself) +{ + circular_progress_t self = vself; + return self->parent; +} + +static void +circprog_set_bounds (void *vself, const grub_video_rect_t *bounds) +{ + circular_progress_t self = vself; + self->bounds = *bounds; +} + +static void +circprog_get_bounds (void *vself, grub_video_rect_t *bounds) +{ + circular_progress_t self = vself; + *bounds = self->bounds; +} + +static void +circprog_set_state (void *vself, int visible, int start, + int current, int end) +{ + circular_progress_t self = vself; + self->visible = visible; + self->start = start; + self->value = current; + self->end = end; +} + +static int +parse_angle (const char *value) +{ + char *ptr; + int angle; + + angle = grub_strtol (value, &ptr, 10); + if (grub_errno) + return 0; + while (grub_isspace (*ptr)) + ptr++; + if (grub_strcmp (ptr, "deg") == 0 + /* Unicode symbol of degrees (a circle, U+b0). Put here in UTF-8 to + avoid potential problem with text file reesncoding */ + || grub_strcmp (ptr, "\xc2\xb0") == 0) + angle = grub_divide_round (angle * 64, 90); + return angle; +} + +static grub_err_t +circprog_set_property (void *vself, const char *name, const char *value) +{ + circular_progress_t self = vself; + if (grub_strcmp (name, "num_ticks") == 0) + { + self->num_ticks = grub_strtoul (value, 0, 10); + } + else if (grub_strcmp (name, "start_angle") == 0) + { + self->start_angle = parse_angle (value); + } + else if (grub_strcmp (name, "ticks_disappear") == 0) + { + self->ticks_disappear = grub_strcmp (value, "false") != 0; + } + else if (grub_strcmp (name, "center_bitmap") == 0) + { + self->need_to_load_pixmaps = 1; + grub_free (self->center_file); + self->center_file = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "tick_bitmap") == 0) + { + self->need_to_load_pixmaps = 1; + grub_free (self->tick_file); + self->tick_file = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "theme_dir") == 0) + { + self->need_to_load_pixmaps = 1; + grub_free (self->theme_dir); + self->theme_dir = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "id") == 0) + { + grub_gfxmenu_timeout_unregister ((grub_gui_component_t) self); + grub_free (self->id); + if (value) + self->id = grub_strdup (value); + else + self->id = 0; + if (self->id && grub_strcmp (self->id, GRUB_GFXMENU_TIMEOUT_COMPONENT_ID) + == 0) + grub_gfxmenu_timeout_register ((grub_gui_component_t) self, + circprog_set_state); + } + return grub_errno; +} + +static struct grub_gui_component_ops circprog_ops = +{ + .destroy = circprog_destroy, + .get_id = circprog_get_id, + .is_instance = circprog_is_instance, + .paint = circprog_paint, + .set_parent = circprog_set_parent, + .get_parent = circprog_get_parent, + .set_bounds = circprog_set_bounds, + .get_bounds = circprog_get_bounds, + .set_property = circprog_set_property +}; + +static struct grub_gui_progress_ops circprog_prog_ops = + { + .set_state = circprog_set_state + }; + +grub_gui_component_t +grub_gui_circular_progress_new (void) +{ + circular_progress_t self; + self = grub_zalloc (sizeof (*self)); + if (! self) + return 0; + self->progress.ops = &circprog_prog_ops; + self->progress.component.ops = &circprog_ops; + self->visible = 1; + self->num_ticks = 64; + self->start_angle = -64; + + return (grub_gui_component_t) self; +} diff --git a/grub-core/gfxmenu/gui_image.c b/grub-core/gfxmenu/gui_image.c new file mode 100644 index 000000000..29784ed2d --- /dev/null +++ b/grub-core/gfxmenu/gui_image.c @@ -0,0 +1,267 @@ +/* gui_image.c - GUI component to display an image. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +struct grub_gui_image +{ + struct grub_gui_component component; + + grub_gui_container_t parent; + grub_video_rect_t bounds; + char *id; + char *theme_dir; + struct grub_video_bitmap *raw_bitmap; + struct grub_video_bitmap *bitmap; +}; + +typedef struct grub_gui_image *grub_gui_image_t; + +static void +image_destroy (void *vself) +{ + grub_gui_image_t self = vself; + + /* Free the scaled bitmap, unless it's a reference to the raw bitmap. */ + if (self->bitmap && (self->bitmap != self->raw_bitmap)) + grub_video_bitmap_destroy (self->bitmap); + if (self->raw_bitmap) + grub_video_bitmap_destroy (self->raw_bitmap); + + grub_free (self); +} + +static const char * +image_get_id (void *vself) +{ + grub_gui_image_t self = vself; + return self->id; +} + +static int +image_is_instance (void *vself __attribute__((unused)), const char *type) +{ + return grub_strcmp (type, "component") == 0; +} + +static void +image_paint (void *vself, const grub_video_rect_t *region) +{ + grub_gui_image_t self = vself; + grub_video_rect_t vpsave; + + if (! self->bitmap) + return; + if (!grub_video_have_common_points (region, &self->bounds)) + return; + + grub_gui_set_viewport (&self->bounds, &vpsave); + grub_video_blit_bitmap (self->bitmap, GRUB_VIDEO_BLIT_BLEND, + 0, 0, 0, 0, + grub_video_bitmap_get_width (self->bitmap), + grub_video_bitmap_get_height (self->bitmap)); + grub_gui_restore_viewport (&vpsave); +} + +static void +image_set_parent (void *vself, grub_gui_container_t parent) +{ + grub_gui_image_t self = vself; + self->parent = parent; +} + +static grub_gui_container_t +image_get_parent (void *vself) +{ + grub_gui_image_t self = vself; + return self->parent; +} + +static grub_err_t +rescale_image (grub_gui_image_t self) +{ + signed width; + signed height; + + if (! self->raw_bitmap) + { + if (self->bitmap) + { + grub_video_bitmap_destroy (self->bitmap); + self->bitmap = 0; + } + return grub_errno; + } + + width = self->bounds.width; + height = self->bounds.height; + + if (self->bitmap + && ((signed) grub_video_bitmap_get_width (self->bitmap) == width) + && ((signed) grub_video_bitmap_get_height (self->bitmap) == height)) + { + /* Nothing to do; already the right size. */ + return grub_errno; + } + + /* Free any old scaled bitmap, + *unless* it's a reference to the raw bitmap. */ + if (self->bitmap && (self->bitmap != self->raw_bitmap)) + grub_video_bitmap_destroy (self->bitmap); + + self->bitmap = 0; + + /* Create a scaled bitmap, unless the requested size is the same + as the raw size -- in that case a reference is made. */ + if ((signed) grub_video_bitmap_get_width (self->raw_bitmap) == width + && (signed) grub_video_bitmap_get_height (self->raw_bitmap) == height) + { + self->bitmap = self->raw_bitmap; + return grub_errno; + } + + /* Don't scale to an invalid size. */ + if (width <= 0 || height <= 0) + return grub_errno; + + /* Create the scaled bitmap. */ + grub_video_bitmap_create_scaled (&self->bitmap, + width, + height, + self->raw_bitmap, + GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST); + return grub_errno; +} + +static void +image_set_bounds (void *vself, const grub_video_rect_t *bounds) +{ + grub_gui_image_t self = vself; + self->bounds = *bounds; + rescale_image (self); +} + +static void +image_get_bounds (void *vself, grub_video_rect_t *bounds) +{ + grub_gui_image_t self = vself; + *bounds = self->bounds; +} + +/* FIXME: inform rendering system it's not forced minimum. */ +static void +image_get_minimal_size (void *vself, unsigned *width, unsigned *height) +{ + grub_gui_image_t self = vself; + + if (self->raw_bitmap) + { + *width = grub_video_bitmap_get_width (self->raw_bitmap); + *height = grub_video_bitmap_get_height (self->raw_bitmap); + } + else + { + *width = 0; + *height = 0; + } +} + +static grub_err_t +load_image (grub_gui_image_t self, const char *path) +{ + struct grub_video_bitmap *bitmap; + if (grub_video_bitmap_load (&bitmap, path) != GRUB_ERR_NONE) + return grub_errno; + + if (self->bitmap && (self->bitmap != self->raw_bitmap)) + grub_video_bitmap_destroy (self->bitmap); + if (self->raw_bitmap) + grub_video_bitmap_destroy (self->raw_bitmap); + + self->raw_bitmap = bitmap; + return rescale_image (self); +} + +static grub_err_t +image_set_property (void *vself, const char *name, const char *value) +{ + grub_gui_image_t self = vself; + if (grub_strcmp (name, "theme_dir") == 0) + { + grub_free (self->theme_dir); + self->theme_dir = grub_strdup (value); + } + else if (grub_strcmp (name, "file") == 0) + { + char *absvalue; + grub_err_t err; + + /* Resolve to an absolute path. */ + if (! self->theme_dir) + return grub_error (GRUB_ERR_BUG, "unspecified theme_dir"); + absvalue = grub_resolve_relative_path (self->theme_dir, value); + if (! absvalue) + return grub_errno; + + err = load_image (self, absvalue); + grub_free (absvalue); + + return err; + } + else if (grub_strcmp (name, "id") == 0) + { + grub_free (self->id); + if (value) + self->id = grub_strdup (value); + else + self->id = 0; + } + return grub_errno; +} + +static struct grub_gui_component_ops image_ops = +{ + .destroy = image_destroy, + .get_id = image_get_id, + .is_instance = image_is_instance, + .paint = image_paint, + .set_parent = image_set_parent, + .get_parent = image_get_parent, + .set_bounds = image_set_bounds, + .get_bounds = image_get_bounds, + .get_minimal_size = image_get_minimal_size, + .set_property = image_set_property +}; + +grub_gui_component_t +grub_gui_image_new (void) +{ + grub_gui_image_t image; + image = grub_zalloc (sizeof (*image)); + if (! image) + return 0; + image->component.ops = &image_ops; + return (grub_gui_component_t) image; +} + diff --git a/grub-core/gfxmenu/gui_label.c b/grub-core/gfxmenu/gui_label.c new file mode 100644 index 000000000..a4c817891 --- /dev/null +++ b/grub-core/gfxmenu/gui_label.c @@ -0,0 +1,273 @@ +/* gui_label.c - GUI component to display a line of text. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +static const char *align_options[] = +{ + "left", + "center", + "right", + 0 +}; + +enum align_mode { + align_left, + align_center, + align_right +}; + +struct grub_gui_label +{ + struct grub_gui_component comp; + + grub_gui_container_t parent; + grub_video_rect_t bounds; + char *id; + int visible; + char *text; + char *template; + grub_font_t font; + grub_video_rgba_color_t color; + int value; + enum align_mode align; +}; + +typedef struct grub_gui_label *grub_gui_label_t; + +static void +label_destroy (void *vself) +{ + grub_gui_label_t self = vself; + grub_gfxmenu_timeout_unregister ((grub_gui_component_t) self); + grub_free (self->text); + grub_free (self->template); + grub_free (self); +} + +static const char * +label_get_id (void *vself) +{ + grub_gui_label_t self = vself; + return self->id; +} + +static int +label_is_instance (void *vself __attribute__((unused)), const char *type) +{ + return grub_strcmp (type, "component") == 0; +} + +static void +label_paint (void *vself, const grub_video_rect_t *region) +{ + grub_gui_label_t self = vself; + + if (! self->visible) + return; + + if (!grub_video_have_common_points (region, &self->bounds)) + return; + + /* Calculate the starting x coordinate. */ + int left_x; + if (self->align == align_left) + left_x = 0; + else if (self->align == align_center) + left_x = (self->bounds.width + - grub_font_get_string_width (self->font, self->text)) / 2; + else if (self->align == align_right) + left_x = (self->bounds.width + - grub_font_get_string_width (self->font, self->text)); + else + return; /* Invalid alignment. */ + + if (left_x < 0 || left_x > (int) self->bounds.width) + left_x = 0; + + grub_video_rect_t vpsave; + grub_gui_set_viewport (&self->bounds, &vpsave); + grub_font_draw_string (self->text, + self->font, + grub_video_map_rgba_color (self->color), + left_x, + grub_font_get_ascent (self->font)); + grub_gui_restore_viewport (&vpsave); +} + +static void +label_set_parent (void *vself, grub_gui_container_t parent) +{ + grub_gui_label_t self = vself; + self->parent = parent; +} + +static grub_gui_container_t +label_get_parent (void *vself) +{ + grub_gui_label_t self = vself; + return self->parent; +} + +static void +label_set_bounds (void *vself, const grub_video_rect_t *bounds) +{ + grub_gui_label_t self = vself; + self->bounds = *bounds; +} + +static void +label_get_bounds (void *vself, grub_video_rect_t *bounds) +{ + grub_gui_label_t self = vself; + *bounds = self->bounds; +} + +static void +label_get_minimal_size (void *vself, unsigned *width, unsigned *height) +{ + grub_gui_label_t self = vself; + *width = grub_font_get_string_width (self->font, self->text); + *height = (grub_font_get_ascent (self->font) + + grub_font_get_descent (self->font)); +} + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static void +label_set_state (void *vself, int visible, int start __attribute__ ((unused)), + int current, int end __attribute__ ((unused))) +{ + grub_gui_label_t self = vself; + self->value = -current; + self->visible = visible; + grub_free (self->text); + self->text = grub_xasprintf (self->template ? : "%d", self->value); +} + +static grub_err_t +label_set_property (void *vself, const char *name, const char *value) +{ + grub_gui_label_t self = vself; + if (grub_strcmp (name, "text") == 0) + { + grub_free (self->text); + grub_free (self->template); + if (! value) + { + self->template = NULL; + self->text = grub_strdup (""); + } + else + { + if (grub_strcmp (value, "@KEYMAP_LONG@") == 0) + value = _("Press enter to boot the selected OS, " + "`e' to edit the commands before booting " + "or `c' for a command-line. ESC to return previous menu."); + else if (grub_strcmp (value, "@KEYMAP_MIDDLE@") == 0) + value = _("Press enter to boot the selected OS, " + "`e' to edit the commands before booting " + "or `c' for a command-line."); + else if (grub_strcmp (value, "@KEYMAP_SHORT@") == 0) + value = _("enter: boot, `e': options, `c': cmd-line"); + /* FIXME: Add more templates here if needed. */ + self->template = grub_strdup (value); + self->text = grub_xasprintf (value, self->value); + } + } + else if (grub_strcmp (name, "font") == 0) + { + self->font = grub_font_get (value); + } + else if (grub_strcmp (name, "color") == 0) + { + grub_video_parse_color (value, &self->color); + } + else if (grub_strcmp (name, "align") == 0) + { + int i; + for (i = 0; align_options[i]; i++) + { + if (grub_strcmp (align_options[i], value) == 0) + { + self->align = i; /* Set the alignment mode. */ + break; + } + } + } + else if (grub_strcmp (name, "visible") == 0) + { + self->visible = grub_strcmp (value, "false") != 0; + } + else if (grub_strcmp (name, "id") == 0) + { + grub_gfxmenu_timeout_unregister ((grub_gui_component_t) self); + grub_free (self->id); + if (value) + self->id = grub_strdup (value); + else + self->id = 0; + if (self->id && grub_strcmp (self->id, GRUB_GFXMENU_TIMEOUT_COMPONENT_ID) + == 0) + grub_gfxmenu_timeout_register ((grub_gui_component_t) self, + label_set_state); + } + return GRUB_ERR_NONE; +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +static struct grub_gui_component_ops label_ops = +{ + .destroy = label_destroy, + .get_id = label_get_id, + .is_instance = label_is_instance, + .paint = label_paint, + .set_parent = label_set_parent, + .get_parent = label_get_parent, + .set_bounds = label_set_bounds, + .get_bounds = label_get_bounds, + .get_minimal_size = label_get_minimal_size, + .set_property = label_set_property +}; + +grub_gui_component_t +grub_gui_label_new (void) +{ + grub_gui_label_t label; + label = grub_zalloc (sizeof (*label)); + if (! label) + return 0; + label->comp.ops = &label_ops; + label->visible = 1; + label->text = grub_strdup (""); + label->font = grub_font_get ("Unknown Regular 16"); + label->color.red = 0; + label->color.green = 0; + label->color.blue = 0; + label->color.alpha = 255; + label->align = align_left; + return (grub_gui_component_t) label; +} diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c new file mode 100644 index 000000000..01477cdf2 --- /dev/null +++ b/grub-core/gfxmenu/gui_list.c @@ -0,0 +1,953 @@ +/* gui_list.c - GUI component to display a selectable list of items. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +enum scrollbar_slice_mode { + SCROLLBAR_SLICE_WEST, + SCROLLBAR_SLICE_CENTER, + SCROLLBAR_SLICE_EAST +}; + +struct grub_gui_list_impl +{ + struct grub_gui_list list; + + grub_gui_container_t parent; + grub_video_rect_t bounds; + char *id; + int visible; + + int icon_width; + int icon_height; + int item_height; + int item_padding; + int item_icon_space; + int item_spacing; + grub_font_t item_font; + int selected_item_font_inherit; + grub_font_t selected_item_font; + grub_video_rgba_color_t item_color; + int selected_item_color_inherit; + grub_video_rgba_color_t selected_item_color; + + int draw_scrollbar; + int need_to_recreate_scrollbar; + char *scrollbar_frame_pattern; + char *scrollbar_thumb_pattern; + grub_gfxmenu_box_t scrollbar_frame; + grub_gfxmenu_box_t scrollbar_thumb; + int scrollbar_thumb_overlay; + int scrollbar_width; + enum scrollbar_slice_mode scrollbar_slice; + int scrollbar_left_pad; + int scrollbar_right_pad; + int scrollbar_top_pad; + int scrollbar_bottom_pad; + + int first_shown_index; + + int need_to_recreate_boxes; + char *theme_dir; + char *menu_box_pattern; + char *item_box_pattern; + int selected_item_box_pattern_inherit; + char *selected_item_box_pattern; + grub_gfxmenu_box_t menu_box; + grub_gfxmenu_box_t selected_item_box; + grub_gfxmenu_box_t item_box; + + grub_gfxmenu_icon_manager_t icon_manager; + + grub_gfxmenu_view_t view; +}; + +typedef struct grub_gui_list_impl *list_impl_t; + +static void +list_destroy (void *vself) +{ + list_impl_t self = vself; + + grub_free (self->theme_dir); + grub_free (self->menu_box_pattern); + grub_free (self->item_box_pattern); + grub_free (self->selected_item_box_pattern); + if (self->menu_box) + self->menu_box->destroy (self->menu_box); + if (self->item_box) + self->item_box->destroy (self->item_box); + if (self->selected_item_box) + self->selected_item_box->destroy (self->selected_item_box); + if (self->icon_manager) + grub_gfxmenu_icon_manager_destroy (self->icon_manager); + if (self->scrollbar_thumb) + self->scrollbar_thumb->destroy (self->scrollbar_thumb); + if (self->scrollbar_frame) + self->scrollbar_frame->destroy (self->scrollbar_frame); + grub_free (self->scrollbar_thumb_pattern); + grub_free (self->scrollbar_frame_pattern); + grub_free (self); +} + +static int +get_num_shown_items (list_impl_t self) +{ + int boxpad = self->item_padding; + int item_vspace = self->item_spacing; + int item_height = self->item_height; + + grub_gfxmenu_box_t box = self->menu_box; + int box_top_pad = box->get_top_pad (box); + int box_bottom_pad = box->get_bottom_pad (box); + grub_gfxmenu_box_t itembox = self->item_box; + grub_gfxmenu_box_t selbox = self->selected_item_box; + int item_top_pad = itembox->get_top_pad (itembox); + int item_bottom_pad = itembox->get_bottom_pad (itembox); + int sel_top_pad = selbox->get_top_pad (selbox); + int sel_bottom_pad = selbox->get_bottom_pad (selbox); + int max_top_pad = grub_max (item_top_pad, sel_top_pad); + int max_bottom_pad = grub_max (item_bottom_pad, sel_bottom_pad); + + if (item_height + item_vspace <= 0) + return 1; + + return (self->bounds.height + item_vspace - 2 * boxpad + - max_top_pad - max_bottom_pad + - box_top_pad - box_bottom_pad) / (item_height + item_vspace); +} + +static int +check_boxes (list_impl_t self) +{ + if (self->need_to_recreate_boxes) + { + grub_gui_recreate_box (&self->menu_box, + self->menu_box_pattern, + self->theme_dir); + + grub_gui_recreate_box (&self->item_box, + self->item_box_pattern, + self->theme_dir); + + grub_gui_recreate_box (&self->selected_item_box, + self->selected_item_box_pattern, + self->theme_dir); + + self->need_to_recreate_boxes = 0; + } + + return (self->menu_box != 0 && self->selected_item_box != 0 + && self->item_box != 0); +} + +static int +check_scrollbar (list_impl_t self) +{ + if (self->need_to_recreate_scrollbar) + { + grub_gui_recreate_box (&self->scrollbar_frame, + self->scrollbar_frame_pattern, + self->theme_dir); + + grub_gui_recreate_box (&self->scrollbar_thumb, + self->scrollbar_thumb_pattern, + self->theme_dir); + + self->need_to_recreate_scrollbar = 0; + } + + if (self->scrollbar_frame == 0 || self->scrollbar_thumb == 0) + return 0; + + /* Sanity checks. */ + grub_gfxmenu_box_t frame = self->scrollbar_frame; + grub_gfxmenu_box_t thumb = self->scrollbar_thumb; + grub_gfxmenu_box_t menu = self->menu_box; + int min_width = frame->get_left_pad (frame) + + frame->get_right_pad (frame); + int min_height = frame->get_top_pad (frame) + + frame->get_bottom_pad (frame) + + self->scrollbar_top_pad + self->scrollbar_bottom_pad + + menu->get_top_pad (menu) + + menu->get_bottom_pad (menu); + if (!self->scrollbar_thumb_overlay) + { + min_width += thumb->get_left_pad (thumb) + + thumb->get_right_pad (thumb); + min_height += thumb->get_top_pad (thumb) + + thumb->get_bottom_pad (thumb); + } + if (min_width <= self->scrollbar_width + && min_height <= (int) self->bounds.height) + return 1; + + /* Unprintable dimenstions. */ + self->draw_scrollbar = 0; + return 0; +} + +static const char * +list_get_id (void *vself) +{ + list_impl_t self = vself; + return self->id; +} + +static int +list_is_instance (void *vself __attribute__((unused)), const char *type) +{ + return (grub_strcmp (type, "component") == 0 + || grub_strcmp (type, "list") == 0); +} + +static struct grub_video_bitmap * +get_item_icon (list_impl_t self, int item_index) +{ + grub_menu_entry_t entry; + entry = grub_menu_get_entry (self->view->menu, item_index); + if (! entry) + return 0; + + return grub_gfxmenu_icon_manager_get_icon (self->icon_manager, entry); +} + +static void +make_selected_item_visible (list_impl_t self) +{ + int selected_index = self->view->selected; + if (selected_index < 0) + return; /* No item is selected. */ + int num_shown_items = get_num_shown_items (self); + int last_shown_index = self->first_shown_index + (num_shown_items - 1); + if (selected_index < self->first_shown_index) + self->first_shown_index = selected_index; + else if (selected_index > last_shown_index) + self->first_shown_index = selected_index - (num_shown_items - 1); +} + +/* Draw a scrollbar on the menu. */ +static void +draw_scrollbar (list_impl_t self, + int value, int extent, int min, int max, + int scrollbar_width, int scrollbar_height) +{ + unsigned thumby, thumbheight; + + grub_gfxmenu_box_t frame = self->scrollbar_frame; + grub_gfxmenu_box_t thumb = self->scrollbar_thumb; + int frame_vertical_pad = (frame->get_top_pad (frame) + + frame->get_bottom_pad (frame)); + int frame_horizontal_pad = (frame->get_left_pad (frame) + + frame->get_right_pad (frame)); + unsigned thumb_vertical_pad = (thumb->get_top_pad (thumb) + + thumb->get_bottom_pad (thumb)); + int thumb_horizontal_pad = (thumb->get_left_pad (thumb) + + thumb->get_right_pad (thumb)); + int tracktop = frame->get_top_pad (frame); + unsigned tracklen; + if (scrollbar_height <= frame_vertical_pad) + tracklen = 0; + else + tracklen = scrollbar_height - frame_vertical_pad; + frame->set_content_size (frame, + scrollbar_width - frame_horizontal_pad, + tracklen); + if (self->scrollbar_thumb_overlay) + { + tracklen += thumb_vertical_pad; + tracktop -= thumb->get_top_pad (thumb); + } + if (value <= min || max <= min) + thumby = 0; + else + thumby = ((unsigned) tracklen * (value - min)) + / ((unsigned) (max - min)); + if (max <= min) + thumbheight = 1; + else + thumbheight = ((unsigned) (tracklen * extent) + / ((unsigned) (max - min))) + 1; + /* Rare occasion: too many entries or too low height. */ + if (thumbheight < thumb_vertical_pad) + { + thumbheight = thumb_vertical_pad; + if (value <= min || max <= extent + || tracklen <= thumb_vertical_pad) + thumby = 0; + else + thumby = ((unsigned) ((tracklen - thumb_vertical_pad) * (value - min)) + / ((unsigned)(max - extent))); + } + thumby += tracktop; + int thumbx = frame->get_left_pad (frame); + int thumbwidth = scrollbar_width - frame_horizontal_pad; + if (!self->scrollbar_thumb_overlay) + thumbwidth -= thumb_horizontal_pad; + else + thumbx -= thumb->get_left_pad (thumb); + thumb->set_content_size (thumb, thumbwidth, + thumbheight - thumb_vertical_pad); + frame->draw (frame, 0, 0); + thumb->draw (thumb, thumbx, thumby); +} + +/* Draw the list of items. */ +static void +draw_menu (list_impl_t self, int num_shown_items) +{ + if (! self->menu_box || ! self->selected_item_box || ! self->item_box) + return; + + int boxpad = self->item_padding; + int icon_text_space = self->item_icon_space; + int item_vspace = self->item_spacing; + + int ascent = grub_font_get_ascent (self->item_font); + int descent = grub_font_get_descent (self->item_font); + int selected_ascent = grub_font_get_ascent (self->selected_item_font); + int selected_descent = grub_font_get_descent (self->selected_item_font); + int text_box_height = self->item_height; + + make_selected_item_visible (self); + + grub_gfxmenu_box_t itembox = self->item_box; + grub_gfxmenu_box_t selbox = self->selected_item_box; + int item_leftpad = itembox->get_left_pad (itembox); + int item_rightpad = itembox->get_right_pad (itembox); + int item_border_width = item_leftpad + item_rightpad; + int item_toppad = itembox->get_top_pad (itembox); + int sel_leftpad = selbox->get_left_pad (selbox); + int sel_rightpad = selbox->get_right_pad (selbox); + int sel_border_width = sel_leftpad + sel_rightpad; + int sel_toppad = selbox->get_top_pad (selbox); + + int max_leftpad = grub_max (item_leftpad, sel_leftpad); + int max_toppad = grub_max (item_toppad, sel_toppad); + int item_top = 0; + int menu_index; + int visible_index; + struct grub_video_rect oviewport; + + grub_video_get_viewport (&oviewport.x, &oviewport.y, + &oviewport.width, &oviewport.height); + grub_video_set_viewport (oviewport.x + boxpad, + oviewport.y + boxpad, + oviewport.width - 2 * boxpad, + oviewport.height - 2 * boxpad); + + int cwidth = oviewport.width - 2 * boxpad; + + itembox->set_content_size (itembox, cwidth - item_border_width, + text_box_height); + selbox->set_content_size (selbox, cwidth - sel_border_width, + text_box_height); + + int text_left_offset = self->icon_width + icon_text_space; + int item_text_top_offset = (text_box_height - (ascent + descent)) / 2 + ascent; + int sel_text_top_offset = (text_box_height - (selected_ascent + + selected_descent)) / 2 + + selected_ascent; + + grub_video_rect_t svpsave, sviewport; + sviewport.x = max_leftpad + text_left_offset; + int text_viewport_width = cwidth - sviewport.x; + sviewport.height = text_box_height; + + grub_video_color_t item_color; + grub_video_color_t sel_color; + item_color = grub_video_map_rgba_color (self->item_color); + sel_color = grub_video_map_rgba_color (self->selected_item_color); + + int item_box_top_offset = max_toppad - item_toppad; + int sel_box_top_offset = max_toppad - sel_toppad; + int item_viewport_width = text_viewport_width - item_rightpad; + int sel_viewport_width = text_viewport_width - sel_rightpad; + int tmp_icon_top_offset = (text_box_height - self->icon_height) / 2; + int item_icon_top_offset = item_toppad + tmp_icon_top_offset; + int sel_icon_top_offset = sel_toppad + tmp_icon_top_offset; + + for (visible_index = 0, menu_index = self->first_shown_index; + visible_index < num_shown_items && menu_index < self->view->menu->size; + visible_index++, menu_index++) + { + int is_selected = (menu_index == self->view->selected); + struct grub_video_bitmap *icon; + grub_font_t font; + grub_video_color_t color; + int text_top_offset; + int top_pad; + int icon_top_offset; + int viewport_width; + + if (is_selected) + { + selbox->draw (selbox, 0, item_top + sel_box_top_offset); + font = self->selected_item_font; + color = sel_color; + text_top_offset = sel_text_top_offset; + top_pad = sel_toppad; + icon_top_offset = sel_icon_top_offset; + viewport_width = sel_viewport_width; + } + else + { + itembox->draw (itembox, 0, item_top + item_box_top_offset); + font = self->item_font; + color = item_color; + text_top_offset = item_text_top_offset; + top_pad = item_toppad; + icon_top_offset = item_icon_top_offset; + viewport_width = item_viewport_width; + } + + icon = get_item_icon (self, menu_index); + if (icon != 0) + grub_video_blit_bitmap (icon, GRUB_VIDEO_BLIT_BLEND, + max_leftpad, + item_top + icon_top_offset, + 0, 0, self->icon_width, self->icon_height); + + const char *item_title = + grub_menu_get_entry (self->view->menu, menu_index)->title; + + sviewport.y = item_top + top_pad; + sviewport.width = viewport_width; + grub_gui_set_viewport (&sviewport, &svpsave); + grub_font_draw_string (item_title, + font, + color, + 0, + text_top_offset); + grub_gui_restore_viewport (&svpsave); + + item_top += text_box_height + item_vspace; + } + grub_video_set_viewport (oviewport.x, + oviewport.y, + oviewport.width, + oviewport.height); +} + +static void +list_paint (void *vself, const grub_video_rect_t *region) +{ + list_impl_t self = vself; + grub_video_rect_t vpsave; + + if (! self->visible) + return; + if (!grub_video_have_common_points (region, &self->bounds)) + return; + + check_boxes (self); + + if (! self->menu_box || ! self->selected_item_box || ! self->item_box) + return; + + grub_gui_set_viewport (&self->bounds, &vpsave); + { + grub_gfxmenu_box_t box = self->menu_box; + int box_left_pad = box->get_left_pad (box); + int box_top_pad = box->get_top_pad (box); + int box_right_pad = box->get_right_pad (box); + int box_bottom_pad = box->get_bottom_pad (box); + grub_video_rect_t vpsave2, content_rect; + int num_shown_items = get_num_shown_items (self); + int drawing_scrollbar = (self->draw_scrollbar + && (num_shown_items < self->view->menu->size) + && check_scrollbar (self)); + int scrollbar_width = self->scrollbar_width; + + content_rect.x = box_left_pad; + content_rect.y = box_top_pad; + content_rect.width = self->bounds.width - box_left_pad - box_right_pad; + content_rect.height = self->bounds.height - box_top_pad - box_bottom_pad; + + box->set_content_size (box, content_rect.width, content_rect.height); + + box->draw (box, 0, 0); + + switch (self->scrollbar_slice) + { + case SCROLLBAR_SLICE_WEST: + content_rect.x += self->scrollbar_right_pad; + content_rect.width -= self->scrollbar_right_pad; + break; + case SCROLLBAR_SLICE_CENTER: + if (drawing_scrollbar) + content_rect.width -= scrollbar_width + self->scrollbar_left_pad + + self->scrollbar_right_pad; + break; + case SCROLLBAR_SLICE_EAST: + content_rect.width -= self->scrollbar_left_pad; + break; + } + + grub_gui_set_viewport (&content_rect, &vpsave2); + draw_menu (self, num_shown_items); + grub_gui_restore_viewport (&vpsave2); + + if (drawing_scrollbar) + { + content_rect.y += self->scrollbar_top_pad; + content_rect.height -= self->scrollbar_top_pad + + self->scrollbar_bottom_pad; + content_rect.width = scrollbar_width; + switch (self->scrollbar_slice) + { + case SCROLLBAR_SLICE_WEST: + if (box_left_pad > scrollbar_width) + { + content_rect.x = box_left_pad - scrollbar_width; + content_rect.width = scrollbar_width; + } + else + { + content_rect.x = 0; + content_rect.width = box_left_pad; + } + break; + case SCROLLBAR_SLICE_CENTER: + content_rect.x = self->bounds.width - box_right_pad + - scrollbar_width - self->scrollbar_right_pad; + content_rect.width = scrollbar_width; + break; + case SCROLLBAR_SLICE_EAST: + content_rect.x = self->bounds.width - box_right_pad; + content_rect.width = box_right_pad; + break; + } + + grub_gui_set_viewport (&content_rect, &vpsave2); + draw_scrollbar (self, + self->first_shown_index, num_shown_items, + 0, self->view->menu->size, + scrollbar_width, + content_rect.height); + grub_gui_restore_viewport (&vpsave2); + } + } + + grub_gui_restore_viewport (&vpsave); +} + +static void +list_set_parent (void *vself, grub_gui_container_t parent) +{ + list_impl_t self = vself; + self->parent = parent; +} + +static grub_gui_container_t +list_get_parent (void *vself) +{ + list_impl_t self = vself; + return self->parent; +} + +static void +list_set_bounds (void *vself, const grub_video_rect_t *bounds) +{ + list_impl_t self = vself; + self->bounds = *bounds; +} + +static void +list_get_bounds (void *vself, grub_video_rect_t *bounds) +{ + list_impl_t self = vself; + *bounds = self->bounds; +} + +static void +list_get_minimal_size (void *vself, unsigned *width, unsigned *height) +{ + list_impl_t self = vself; + + if (check_boxes (self)) + { + int boxpad = self->item_padding; + int item_vspace = self->item_spacing; + int item_height = self->item_height; + int num_items = 3; + + grub_gfxmenu_box_t box = self->menu_box; + int box_left_pad = box->get_left_pad (box); + int box_top_pad = box->get_top_pad (box); + int box_right_pad = box->get_right_pad (box); + int box_bottom_pad = box->get_bottom_pad (box); + unsigned width_s; + + grub_gfxmenu_box_t selbox = self->selected_item_box; + int sel_top_pad = selbox->get_top_pad (selbox); + int sel_bottom_pad = selbox->get_bottom_pad (selbox); + int sel_left_pad = selbox->get_left_pad (selbox); + int sel_right_pad = selbox->get_right_pad (selbox); + + grub_gfxmenu_box_t itembox = self->item_box; + int item_top_pad = itembox->get_top_pad (itembox); + int item_bottom_pad = itembox->get_bottom_pad (itembox); + int item_left_pad = itembox->get_left_pad (itembox); + int item_right_pad = itembox->get_right_pad (itembox); + + int max_left_pad = grub_max (item_left_pad, sel_left_pad); + int max_right_pad = grub_max (item_right_pad, sel_right_pad); + int max_top_pad = grub_max (item_top_pad, sel_top_pad); + int max_bottom_pad = grub_max (item_bottom_pad, sel_bottom_pad); + + *width = grub_font_get_string_width (self->item_font, "Typical OS"); + width_s = grub_font_get_string_width (self->selected_item_font, + "Typical OS"); + if (*width < width_s) + *width = width_s; + + *width += 2 * boxpad + box_left_pad + box_right_pad + + max_left_pad + max_right_pad + + self->item_icon_space + self->icon_width; + + switch (self->scrollbar_slice) + { + case SCROLLBAR_SLICE_WEST: + *width += self->scrollbar_right_pad; + break; + case SCROLLBAR_SLICE_CENTER: + *width += self->scrollbar_width + self->scrollbar_left_pad + + self->scrollbar_right_pad; + break; + case SCROLLBAR_SLICE_EAST: + *width += self->scrollbar_left_pad; + break; + } + + /* Set the menu box height to fit the items. */ + *height = (item_height * num_items + + item_vspace * (num_items - 1) + + 2 * boxpad + + box_top_pad + box_bottom_pad + + max_top_pad + max_bottom_pad); + } + else + { + *width = 0; + *height = 0; + } +} + +static grub_err_t +list_set_property (void *vself, const char *name, const char *value) +{ + list_impl_t self = vself; + if (grub_strcmp (name, "item_font") == 0) + { + self->item_font = grub_font_get (value); + if (self->selected_item_font_inherit) + self->selected_item_font = self->item_font; + } + else if (grub_strcmp (name, "selected_item_font") == 0) + { + if (! value || grub_strcmp (value, "inherit") == 0) + { + self->selected_item_font = self->item_font; + self->selected_item_font_inherit = 1; + } + else + { + self->selected_item_font = grub_font_get (value); + self->selected_item_font_inherit = 0; + } + } + else if (grub_strcmp (name, "item_color") == 0) + { + grub_video_rgba_color_t color; + if (grub_video_parse_color (value, &color) == GRUB_ERR_NONE) + { + self->item_color = color; + if (self->selected_item_color_inherit) + self->selected_item_color = self->item_color; + } + } + else if (grub_strcmp (name, "selected_item_color") == 0) + { + if (! value || grub_strcmp (value, "inherit") == 0) + { + self->selected_item_color = self->item_color; + self->selected_item_color_inherit = 1; + } + else + { + grub_video_rgba_color_t color; + if (grub_video_parse_color (value, &color) + == GRUB_ERR_NONE) + { + self->selected_item_color = color; + self->selected_item_color_inherit = 0; + } + } + } + else if (grub_strcmp (name, "icon_width") == 0) + { + self->icon_width = grub_strtol (value, 0, 10); + grub_gfxmenu_icon_manager_set_icon_size (self->icon_manager, + self->icon_width, + self->icon_height); + } + else if (grub_strcmp (name, "icon_height") == 0) + { + self->icon_height = grub_strtol (value, 0, 10); + grub_gfxmenu_icon_manager_set_icon_size (self->icon_manager, + self->icon_width, + self->icon_height); + } + else if (grub_strcmp (name, "item_height") == 0) + { + self->item_height = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "item_padding") == 0) + { + self->item_padding = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "item_icon_space") == 0) + { + self->item_icon_space = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "item_spacing") == 0) + { + self->item_spacing = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "visible") == 0) + { + self->visible = grub_strcmp (value, "false") != 0; + } + else if (grub_strcmp (name, "menu_pixmap_style") == 0) + { + self->need_to_recreate_boxes = 1; + grub_free (self->menu_box_pattern); + self->menu_box_pattern = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "item_pixmap_style") == 0) + { + self->need_to_recreate_boxes = 1; + grub_free (self->item_box_pattern); + self->item_box_pattern = value ? grub_strdup (value) : 0; + if (self->selected_item_box_pattern_inherit) + { + grub_free (self->selected_item_box_pattern); + self->selected_item_box_pattern = value ? grub_strdup (value) : 0; + } + } + else if (grub_strcmp (name, "selected_item_pixmap_style") == 0) + { + if (!value || grub_strcmp (value, "inherit") == 0) + { + grub_free (self->selected_item_box_pattern); + char *tmp = self->item_box_pattern; + self->selected_item_box_pattern = tmp ? grub_strdup (tmp) : 0; + self->selected_item_box_pattern_inherit = 1; + } + else + { + self->need_to_recreate_boxes = 1; + grub_free (self->selected_item_box_pattern); + self->selected_item_box_pattern = value ? grub_strdup (value) : 0; + self->selected_item_box_pattern_inherit = 0; + } + } + else if (grub_strcmp (name, "scrollbar_frame") == 0) + { + self->need_to_recreate_scrollbar = 1; + grub_free (self->scrollbar_frame_pattern); + self->scrollbar_frame_pattern = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "scrollbar_thumb") == 0) + { + self->need_to_recreate_scrollbar = 1; + grub_free (self->scrollbar_thumb_pattern); + self->scrollbar_thumb_pattern = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "scrollbar_thumb_overlay") == 0) + { + self->scrollbar_thumb_overlay = grub_strcmp (value, "true") == 0; + } + else if (grub_strcmp (name, "scrollbar_width") == 0) + { + self->scrollbar_width = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "scrollbar_slice") == 0) + { + if (grub_strcmp (value, "west") == 0) + self->scrollbar_slice = SCROLLBAR_SLICE_WEST; + else if (grub_strcmp (value, "center") == 0) + self->scrollbar_slice = SCROLLBAR_SLICE_CENTER; + else if (grub_strcmp (value, "east") == 0) + self->scrollbar_slice = SCROLLBAR_SLICE_EAST; + } + else if (grub_strcmp (name, "scrollbar_left_pad") == 0) + { + self->scrollbar_left_pad = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "scrollbar_right_pad") == 0) + { + self->scrollbar_right_pad = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "scrollbar_top_pad") == 0) + { + self->scrollbar_top_pad = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "scrollbar_bottom_pad") == 0) + { + self->scrollbar_bottom_pad = grub_strtol (value, 0, 10); + } + else if (grub_strcmp (name, "scrollbar") == 0) + { + self->draw_scrollbar = grub_strcmp (value, "false") != 0; + } + else if (grub_strcmp (name, "theme_dir") == 0) + { + self->need_to_recreate_boxes = 1; + grub_free (self->theme_dir); + self->theme_dir = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "id") == 0) + { + grub_free (self->id); + if (value) + self->id = grub_strdup (value); + else + self->id = 0; + } + return grub_errno; +} + +/* Set necessary information that the gfxmenu view provides. */ +static void +list_set_view_info (void *vself, + grub_gfxmenu_view_t view) +{ + list_impl_t self = vself; + grub_gfxmenu_icon_manager_set_theme_path (self->icon_manager, + view->theme_path); + self->view = view; +} + +/* Refresh list variables */ +static void +list_refresh_info (void *vself, + grub_gfxmenu_view_t view) +{ + list_impl_t self = vself; + if (view->nested) + self->first_shown_index = 0; +} + +static struct grub_gui_component_ops list_comp_ops = + { + .destroy = list_destroy, + .get_id = list_get_id, + .is_instance = list_is_instance, + .paint = list_paint, + .set_parent = list_set_parent, + .get_parent = list_get_parent, + .set_bounds = list_set_bounds, + .get_bounds = list_get_bounds, + .get_minimal_size = list_get_minimal_size, + .set_property = list_set_property + }; + +static struct grub_gui_list_ops list_ops = +{ + .set_view_info = list_set_view_info, + .refresh_list = list_refresh_info +}; + +grub_gui_component_t +grub_gui_list_new (void) +{ + list_impl_t self; + grub_font_t default_font; + grub_video_rgba_color_t default_fg_color; + + self = grub_zalloc (sizeof (*self)); + if (! self) + return 0; + + self->list.ops = &list_ops; + self->list.component.ops = &list_comp_ops; + + self->visible = 1; + + default_font = grub_font_get ("Unknown Regular 16"); + default_fg_color = grub_video_rgba_color_rgb (0, 0, 0); + + self->icon_width = 32; + self->icon_height = 32; + self->item_height = 42; + self->item_padding = 14; + self->item_icon_space = 4; + self->item_spacing = 16; + self->item_font = default_font; + self->selected_item_font_inherit = 1; /* Default to using the item_font. */ + self->selected_item_font = default_font; + self->item_color = default_fg_color; + self->selected_item_color_inherit = 1; /* Default to using the item_color. */ + self->selected_item_color = default_fg_color; + + self->draw_scrollbar = 1; + self->need_to_recreate_scrollbar = 1; + self->scrollbar_frame = 0; + self->scrollbar_thumb = 0; + self->scrollbar_frame_pattern = 0; + self->scrollbar_thumb_pattern = 0; + self->scrollbar_thumb_overlay = 0; + self->scrollbar_width = 16; + self->scrollbar_slice = SCROLLBAR_SLICE_EAST; + self->scrollbar_left_pad = 2; + self->scrollbar_right_pad = 0; + self->scrollbar_top_pad = 0; + self->scrollbar_bottom_pad = 0; + + self->first_shown_index = 0; + + self->need_to_recreate_boxes = 0; + self->theme_dir = 0; + self->menu_box_pattern = 0; + self->item_box_pattern = 0; + self->selected_item_box_pattern_inherit = 1;/*Default to using the item_box.*/ + self->selected_item_box_pattern = 0; + self->menu_box = grub_gfxmenu_create_box (0, 0); + self->item_box = grub_gfxmenu_create_box (0, 0); + self->selected_item_box = grub_gfxmenu_create_box (0, 0); + + self->icon_manager = grub_gfxmenu_icon_manager_new (); + if (! self->icon_manager) + { + self->list.component.ops->destroy (self); + return 0; + } + grub_gfxmenu_icon_manager_set_icon_size (self->icon_manager, + self->icon_width, + self->icon_height); + return (grub_gui_component_t) self; +} diff --git a/grub-core/gfxmenu/gui_progress_bar.c b/grub-core/gfxmenu/gui_progress_bar.c new file mode 100644 index 000000000..b128f0866 --- /dev/null +++ b/grub-core/gfxmenu/gui_progress_bar.c @@ -0,0 +1,454 @@ +/* gui_progress_bar.c - GUI progress bar component. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct grub_gui_progress_bar +{ + struct grub_gui_progress progress; + + grub_gui_container_t parent; + grub_video_rect_t bounds; + char *id; + int visible; + int start; + int end; + int value; + char *template; + grub_font_t font; + grub_video_rgba_color_t text_color; + grub_video_rgba_color_t border_color; + grub_video_rgba_color_t bg_color; + grub_video_rgba_color_t fg_color; + + char *theme_dir; + int need_to_recreate_pixmaps; + int pixmapbar_available; + char *bar_pattern; + char *highlight_pattern; + grub_gfxmenu_box_t bar_box; + grub_gfxmenu_box_t highlight_box; + int highlight_overlay; +}; + +typedef struct grub_gui_progress_bar *grub_gui_progress_bar_t; + +static void +progress_bar_destroy (void *vself) +{ + grub_gui_progress_bar_t self = vself; + grub_free (self->theme_dir); + grub_free (self->template); + grub_free (self->id); + grub_gfxmenu_timeout_unregister ((grub_gui_component_t) self); + grub_free (self); +} + +static const char * +progress_bar_get_id (void *vself) +{ + grub_gui_progress_bar_t self = vself; + return self->id; +} + +static int +progress_bar_is_instance (void *vself __attribute__((unused)), const char *type) +{ + return grub_strcmp (type, "component") == 0; +} + +static int +check_pixmaps (grub_gui_progress_bar_t self) +{ + if (!self->pixmapbar_available) + return 0; + if (self->need_to_recreate_pixmaps) + { + grub_gui_recreate_box (&self->bar_box, + self->bar_pattern, + self->theme_dir); + + grub_gui_recreate_box (&self->highlight_box, + self->highlight_pattern, + self->theme_dir); + + self->need_to_recreate_pixmaps = 0; + } + + return (self->bar_box != 0 && self->highlight_box != 0); +} + +static void +draw_filled_rect_bar (grub_gui_progress_bar_t self) +{ + /* Set the progress bar's frame. */ + grub_video_rect_t f; + f.x = 1; + f.y = 1; + f.width = self->bounds.width - 2; + f.height = self->bounds.height - 2; + + /* Border. */ + grub_video_fill_rect (grub_video_map_rgba_color (self->border_color), + f.x - 1, f.y - 1, + f.width + 2, f.height + 2); + + /* Bar background. */ + unsigned barwidth; + + if (self->end <= self->start + || self->value <= self->start) + barwidth = 0; + else + barwidth = (f.width + * (self->value - self->start) + / (self->end - self->start)); + grub_video_fill_rect (grub_video_map_rgba_color (self->bg_color), + f.x + barwidth, f.y, + f.width - barwidth, f.height); + + /* Bar foreground. */ + grub_video_fill_rect (grub_video_map_rgba_color (self->fg_color), + f.x, f.y, + barwidth, f.height); +} + +static void +draw_pixmap_bar (grub_gui_progress_bar_t self) +{ + grub_gfxmenu_box_t bar = self->bar_box; + grub_gfxmenu_box_t hl = self->highlight_box; + int w = self->bounds.width; + int h = self->bounds.height; + int bar_l_pad = bar->get_left_pad (bar); + int bar_r_pad = bar->get_right_pad (bar); + int bar_t_pad = bar->get_top_pad (bar); + int bar_b_pad = bar->get_bottom_pad (bar); + int bar_h_pad = bar_l_pad + bar_r_pad; + int bar_v_pad = bar_t_pad + bar_b_pad; + int hl_l_pad = hl->get_left_pad (hl); + int hl_r_pad = hl->get_right_pad (hl); + int hl_t_pad = hl->get_top_pad (hl); + int hl_b_pad = hl->get_bottom_pad (hl); + int hl_h_pad = hl_l_pad + hl_r_pad; + int hl_v_pad = hl_t_pad + hl_b_pad; + int tracklen = w - bar_h_pad; + int trackheight = h - bar_v_pad; + int barwidth; + int hlheight = trackheight; + int hlx = bar_l_pad; + int hly = bar_t_pad; + + bar->set_content_size (bar, tracklen, trackheight); + bar->draw (bar, 0, 0); + + if (self->highlight_overlay) + { + tracklen += hl_h_pad; + hlx -= hl_l_pad; + hly -= hl_t_pad; + } + else + hlheight -= hl_v_pad; + + if (self->value <= self->start + || self->end <= self->start) + barwidth = 0; + else + barwidth = ((unsigned) (tracklen * (self->value - self->start)) + / ((unsigned) (self->end - self->start))); + + if (barwidth >= hl_h_pad) + { + hl->set_content_size (hl, barwidth - hl_h_pad, hlheight); + hl->draw (hl, hlx, hly); + } +} + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static void +draw_text (grub_gui_progress_bar_t self) +{ + if (self->template) + { + grub_font_t font = self->font; + grub_video_color_t text_color = + grub_video_map_rgba_color (self->text_color); + int width = self->bounds.width; + int height = self->bounds.height; + char *text; + text = grub_xasprintf (self->template, + self->value > 0 ? self->value : -self->value); + if (!text) + { + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + return; + } + /* Center the text. */ + int text_width = grub_font_get_string_width (font, text); + int x = (width - text_width) / 2; + int y = ((height - grub_font_get_descent (font)) / 2 + + grub_font_get_ascent (font) / 2); + grub_font_draw_string (text, font, text_color, x, y); + grub_free (text); + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +static void +progress_bar_paint (void *vself, const grub_video_rect_t *region) +{ + grub_gui_progress_bar_t self = vself; + grub_video_rect_t vpsave; + + if (! self->visible) + return; + if (!grub_video_have_common_points (region, &self->bounds)) + return; + + if (self->end == self->start) + return; + + grub_gui_set_viewport (&self->bounds, &vpsave); + + if (check_pixmaps (self)) + draw_pixmap_bar (self); + else + draw_filled_rect_bar (self); + + draw_text (self); + + grub_gui_restore_viewport (&vpsave); +} + +static void +progress_bar_set_parent (void *vself, grub_gui_container_t parent) +{ + grub_gui_progress_bar_t self = vself; + self->parent = parent; +} + +static grub_gui_container_t +progress_bar_get_parent (void *vself) +{ + grub_gui_progress_bar_t self = vself; + return self->parent; +} + +static void +progress_bar_set_bounds (void *vself, const grub_video_rect_t *bounds) +{ + grub_gui_progress_bar_t self = vself; + self->bounds = *bounds; +} + +static void +progress_bar_get_bounds (void *vself, grub_video_rect_t *bounds) +{ + grub_gui_progress_bar_t self = vself; + *bounds = self->bounds; +} + +static void +progress_bar_get_minimal_size (void *vself, + unsigned *width, unsigned *height) +{ + unsigned min_width = 0; + unsigned min_height = 0; + grub_gui_progress_bar_t self = vself; + + if (self->template) + { + min_width = grub_font_get_string_width (self->font, self->template); + min_width += grub_font_get_string_width (self->font, "XXXXXXXXXX"); + min_height = grub_font_get_descent (self->font) + + grub_font_get_ascent (self->font); + } + if (check_pixmaps (self)) + { + grub_gfxmenu_box_t bar = self->bar_box; + grub_gfxmenu_box_t hl = self->highlight_box; + min_width += bar->get_left_pad (bar) + bar->get_right_pad (bar); + min_height += bar->get_top_pad (bar) + bar->get_bottom_pad (bar); + if (!self->highlight_overlay) + { + min_width += hl->get_left_pad (hl) + hl->get_right_pad (hl); + min_height += hl->get_top_pad (hl) + hl->get_bottom_pad (hl); + } + } + else + { + min_height += 2; + min_width += 2; + } + *width = 200; + if (*width < min_width) + *width = min_width; + *height = 28; + if (*height < min_height) + *height = min_height; +} + +static void +progress_bar_set_state (void *vself, int visible, int start, + int current, int end) +{ + grub_gui_progress_bar_t self = vself; + self->visible = visible; + self->start = start; + self->value = current; + self->end = end; +} + +static grub_err_t +progress_bar_set_property (void *vself, const char *name, const char *value) +{ + grub_gui_progress_bar_t self = vself; + if (grub_strcmp (name, "text") == 0) + { + grub_free (self->template); + if (grub_strcmp (value, "@TIMEOUT_NOTIFICATION_LONG@") == 0) + value + = _("The highlighted entry will be executed automatically in %ds."); + else if (grub_strcmp (value, "@TIMEOUT_NOTIFICATION_MIDDLE@") == 0) + /* TRANSLATORS: 's' stands for seconds. + It's a standalone timeout notification. + Please use the short form in your language. */ + value = _("%ds remaining."); + else if (grub_strcmp (value, "@TIMEOUT_NOTIFICATION_SHORT@") == 0) + /* TRANSLATORS: 's' stands for seconds. + It's a standalone timeout notification. + Please use the shortest form available in you language. */ + value = _("%ds"); + + self->template = grub_strdup (value); + } + else if (grub_strcmp (name, "font") == 0) + { + self->font = grub_font_get (value); + } + else if (grub_strcmp (name, "text_color") == 0) + { + grub_video_parse_color (value, &self->text_color); + } + else if (grub_strcmp (name, "border_color") == 0) + { + grub_video_parse_color (value, &self->border_color); + } + else if (grub_strcmp (name, "bg_color") == 0) + { + grub_video_parse_color (value, &self->bg_color); + } + else if (grub_strcmp (name, "fg_color") == 0) + { + grub_video_parse_color (value, &self->fg_color); + } + else if (grub_strcmp (name, "bar_style") == 0) + { + self->need_to_recreate_pixmaps = 1; + self->pixmapbar_available = 1; + grub_free (self->bar_pattern); + self->bar_pattern = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "highlight_style") == 0) + { + self->need_to_recreate_pixmaps = 1; + self->pixmapbar_available = 1; + grub_free (self->highlight_pattern); + self->highlight_pattern = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "highlight_overlay") == 0) + { + self->highlight_overlay = grub_strcmp (value, "true") == 0; + } + else if (grub_strcmp (name, "theme_dir") == 0) + { + self->need_to_recreate_pixmaps = 1; + grub_free (self->theme_dir); + self->theme_dir = value ? grub_strdup (value) : 0; + } + else if (grub_strcmp (name, "id") == 0) + { + grub_gfxmenu_timeout_unregister ((grub_gui_component_t) self); + grub_free (self->id); + if (value) + self->id = grub_strdup (value); + else + self->id = 0; + if (self->id && grub_strcmp (self->id, GRUB_GFXMENU_TIMEOUT_COMPONENT_ID) + == 0) + grub_gfxmenu_timeout_register ((grub_gui_component_t) self, + progress_bar_set_state); + } + return grub_errno; +} + +static struct grub_gui_component_ops progress_bar_ops = +{ + .destroy = progress_bar_destroy, + .get_id = progress_bar_get_id, + .is_instance = progress_bar_is_instance, + .paint = progress_bar_paint, + .set_parent = progress_bar_set_parent, + .get_parent = progress_bar_get_parent, + .set_bounds = progress_bar_set_bounds, + .get_bounds = progress_bar_get_bounds, + .get_minimal_size = progress_bar_get_minimal_size, + .set_property = progress_bar_set_property +}; + +static struct grub_gui_progress_ops progress_bar_pb_ops = + { + .set_state = progress_bar_set_state + }; + +grub_gui_component_t +grub_gui_progress_bar_new (void) +{ + grub_gui_progress_bar_t self; + self = grub_zalloc (sizeof (*self)); + if (! self) + return 0; + + self->progress.ops = &progress_bar_pb_ops; + self->progress.component.ops = &progress_bar_ops; + self->visible = 1; + self->font = grub_font_get ("Unknown Regular 16"); + grub_video_rgba_color_t black = { .red = 0, .green = 0, .blue = 0, .alpha = 255 }; + grub_video_rgba_color_t gray = { .red = 128, .green = 128, .blue = 128, .alpha = 255 }; + grub_video_rgba_color_t lightgray = { .red = 200, .green = 200, .blue = 200, .alpha = 255 }; + self->text_color = black; + self->border_color = black; + self->bg_color = gray; + self->fg_color = lightgray; + self->highlight_overlay = 0; + + return (grub_gui_component_t) self; +} diff --git a/grub-core/gfxmenu/gui_string_util.c b/grub-core/gfxmenu/gui_string_util.c new file mode 100644 index 000000000..a9a415e31 --- /dev/null +++ b/grub-core/gfxmenu/gui_string_util.c @@ -0,0 +1,206 @@ +/* gui_string_util.c - String utilities used by the GUI system. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +/* Create a new NUL-terminated string on the heap as a substring of BUF. + The range of buf included is the half-open interval [START,END). + The index START is inclusive, END is exclusive. */ +char * +grub_new_substring (const char *buf, + grub_size_t start, grub_size_t end) +{ + if (end < start) + return 0; + grub_size_t len = end - start; + char *s = grub_malloc (len + 1); + if (! s) + return 0; + grub_memcpy (s, buf + start, len); + s[len] = '\0'; + return s; +} + +/* Eliminate "." and ".." path elements from PATH. A new heap-allocated + string is returned. */ +static char * +canonicalize_path (const char *path) +{ + int i; + const char *p; + char *newpath = 0; + + /* Count the path components in path. */ + int components = 1; + for (p = path; *p; p++) + if (*p == '/') + components++; + + char **path_array = grub_malloc (components * sizeof (*path_array)); + if (! path_array) + return 0; + + /* Initialize array elements to NULL pointers; in case once of the + allocations fails, the cleanup code can just call grub_free() for all + pointers in the array. */ + for (i = 0; i < components; i++) + path_array[i] = 0; + + /* Parse the path into path_array. */ + p = path; + for (i = 0; i < components && p; i++) + { + /* Find the end of the path element. */ + const char *end = grub_strchr (p, '/'); + if (!end) + end = p + grub_strlen (p); + + /* Copy the element. */ + path_array[i] = grub_new_substring (p, 0, end - p); + if (! path_array[i]) + goto cleanup; + + /* Advance p to point to the start of the next element, or NULL. */ + if (*end) + p = end + 1; + else + p = 0; + } + + /* Eliminate '.' and '..' elements from the path array. */ + int newpath_length = 0; + for (i = components - 1; i >= 0; --i) + { + if (! grub_strcmp (path_array[i], ".")) + { + grub_free (path_array[i]); + path_array[i] = 0; + } + else if (! grub_strcmp (path_array[i], "..") + && i > 0) + { + /* Delete the '..' and the prior path element. */ + grub_free (path_array[i]); + path_array[i] = 0; + --i; + grub_free (path_array[i]); + path_array[i] = 0; + } + else + { + newpath_length += grub_strlen (path_array[i]) + 1; + } + } + + /* Construct a new path string. */ + newpath = grub_malloc (newpath_length + 1); + if (! newpath) + goto cleanup; + + newpath[0] = '\0'; + char *newpath_end = newpath; + int first = 1; + for (i = 0; i < components; i++) + { + char *element = path_array[i]; + if (element) + { + /* For all components but the first, prefix with a slash. */ + if (! first) + newpath_end = grub_stpcpy (newpath_end, "/"); + newpath_end = grub_stpcpy (newpath_end, element); + first = 0; + } + } + +cleanup: + for (i = 0; i < components; i++) + grub_free (path_array[i]); + grub_free (path_array); + + return newpath; +} + +/* Return a new heap-allocated string representing to absolute path + to the file referred to by PATH. If PATH is an absolute path, then + the returned path is a copy of PATH. If PATH is a relative path, then + BASE is with PATH used to construct the absolute path. */ +char * +grub_resolve_relative_path (const char *base, const char *path) +{ + char *abspath; + char *canonpath; + char *p; + grub_size_t l; + + /* If PATH is an absolute path, then just use it as is. */ + if (path[0] == '/' || path[0] == '(') + return canonicalize_path (path); + + abspath = grub_malloc (grub_strlen (base) + grub_strlen (path) + 3); + if (! abspath) + return 0; + + /* Concatenate BASE and PATH. */ + p = grub_stpcpy (abspath, base); + l = grub_strlen (abspath); + if (l == 0 || abspath[l-1] != '/') + { + *p = '/'; + p++; + *p = 0; + } + grub_stpcpy (p, path); + + canonpath = canonicalize_path (abspath); + if (! canonpath) + return abspath; + + grub_free (abspath); + return canonpath; +} + +/* Get the path of the directory where the file at FILE_PATH is located. + FILE_PATH should refer to a file, not a directory. The returned path + includes a trailing slash. + This does not handle GRUB "(hd0,0)" paths properly yet since it only + looks at slashes. */ +char * +grub_get_dirname (const char *file_path) +{ + int i; + int last_slash; + + last_slash = -1; + for (i = grub_strlen (file_path) - 1; i >= 0; --i) + { + if (file_path[i] == '/') + { + last_slash = i; + break; + } + } + if (last_slash == -1) + return grub_strdup ("/"); + + return grub_new_substring (file_path, 0, last_slash + 1); +} diff --git a/grub-core/gfxmenu/gui_util.c b/grub-core/gfxmenu/gui_util.c new file mode 100644 index 000000000..eba7bb39e --- /dev/null +++ b/grub-core/gfxmenu/gui_util.c @@ -0,0 +1,101 @@ +/* gui_util.c - GUI utility functions. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + + +struct find_by_id_state +{ + const char *match_id; + grub_gui_component_callback match_callback; + void *match_userdata; +}; + +static void +find_by_id_recursively (grub_gui_component_t component, void *userdata) +{ + struct find_by_id_state *state; + const char *id; + + state = (struct find_by_id_state *) userdata; + id = component->ops->get_id (component); + if (id && grub_strcmp (id, state->match_id) == 0) + state->match_callback (component, state->match_userdata); + + if (component->ops->is_instance (component, "container")) + { + grub_gui_container_t container; + container = (grub_gui_container_t) component; + container->ops->iterate_children (container, + find_by_id_recursively, + state); + } +} + +void +grub_gui_find_by_id (grub_gui_component_t root, + const char *id, + grub_gui_component_callback cb, + void *userdata) +{ + struct find_by_id_state state; + state.match_id = id; + state.match_callback = cb; + state.match_userdata = userdata; + find_by_id_recursively (root, &state); +} + + +struct iterate_recursively_state +{ + grub_gui_component_callback callback; + void *userdata; +}; + +static +void iterate_recursively_cb (grub_gui_component_t component, void *userdata) +{ + struct iterate_recursively_state *state; + + state = (struct iterate_recursively_state *) userdata; + state->callback (component, state->userdata); + + if (component->ops->is_instance (component, "container")) + { + grub_gui_container_t container; + container = (grub_gui_container_t) component; + container->ops->iterate_children (container, + iterate_recursively_cb, + state); + } +} + +void +grub_gui_iterate_recursively (grub_gui_component_t root, + grub_gui_component_callback cb, + void *userdata) +{ + struct iterate_recursively_state state; + state.callback = cb; + state.userdata = userdata; + iterate_recursively_cb (root, &state); +} diff --git a/grub-core/gfxmenu/icon_manager.c b/grub-core/gfxmenu/icon_manager.c new file mode 100644 index 000000000..1894682ef --- /dev/null +++ b/grub-core/gfxmenu/icon_manager.c @@ -0,0 +1,257 @@ +/* icon_manager.c - gfxmenu icon manager. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Currently hard coded to '.png' extension. */ +static const char icon_extension[] = ".png"; + +typedef struct icon_entry +{ + char *class_name; + struct grub_video_bitmap *bitmap; + struct icon_entry *next; +} *icon_entry_t; + +struct grub_gfxmenu_icon_manager +{ + char *theme_path; + int icon_width; + int icon_height; + + /* Icon cache: linked list w/ dummy head node. */ + struct icon_entry cache; +}; + + +/* Create a new icon manager and return a point to it. */ +grub_gfxmenu_icon_manager_t +grub_gfxmenu_icon_manager_new (void) +{ + grub_gfxmenu_icon_manager_t mgr; + mgr = grub_malloc (sizeof (*mgr)); + if (! mgr) + return 0; + + mgr->theme_path = 0; + mgr->icon_width = 0; + mgr->icon_height = 0; + + /* Initialize the dummy head node. */ + mgr->cache.class_name = 0; + mgr->cache.bitmap = 0; + mgr->cache.next = 0; + + return mgr; +} + +/* Destroy the icon manager MGR, freeing all resources used by it. + +Note: Any bitmaps returned by grub_gfxmenu_icon_manager_get_icon() +are destroyed and must not be used by the caller after this function +is called. */ +void +grub_gfxmenu_icon_manager_destroy (grub_gfxmenu_icon_manager_t mgr) +{ + grub_gfxmenu_icon_manager_clear_cache (mgr); + grub_free (mgr->theme_path); + grub_free (mgr); +} + +/* Clear the icon cache. */ +void +grub_gfxmenu_icon_manager_clear_cache (grub_gfxmenu_icon_manager_t mgr) +{ + icon_entry_t cur; + icon_entry_t next; + for (cur = mgr->cache.next; cur; cur = next) + { + next = cur->next; + grub_free (cur->class_name); + grub_video_bitmap_destroy (cur->bitmap); + grub_free (cur); + } + mgr->cache.next = 0; +} + +/* Set the theme path. If the theme path is changed, the icon cache + is cleared. */ +void +grub_gfxmenu_icon_manager_set_theme_path (grub_gfxmenu_icon_manager_t mgr, + const char *path) +{ + /* Clear the cache if the theme path has changed. */ + if (mgr->theme_path == 0 && path == 0) + return; + if (mgr->theme_path == 0 || path == 0 + || grub_strcmp (mgr->theme_path, path) != 0) + grub_gfxmenu_icon_manager_clear_cache (mgr); + + grub_free (mgr->theme_path); + mgr->theme_path = path ? grub_strdup (path) : 0; +} + +/* Set the icon size. When icons are requested from the icon manager, + they are scaled to this size before being returned. If the size is + changed, the icon cache is cleared. */ +void +grub_gfxmenu_icon_manager_set_icon_size (grub_gfxmenu_icon_manager_t mgr, + int width, int height) +{ + /* If the width or height is changed, we must clear the cache, since the + scaled bitmaps are stored in the cache. */ + if (width != mgr->icon_width || height != mgr->icon_height) + grub_gfxmenu_icon_manager_clear_cache (mgr); + + mgr->icon_width = width; + mgr->icon_height = height; +} + +/* Try to load an icon for the specified CLASS_NAME in the directory DIR. + Returns 0 if the icon could not be loaded, or returns a pointer to a new + bitmap if it was successful. */ +static struct grub_video_bitmap * +try_loading_icon (grub_gfxmenu_icon_manager_t mgr, + const char *dir, const char *class_name) +{ + char *path, *ptr; + + path = grub_malloc (grub_strlen (dir) + grub_strlen (class_name) + + grub_strlen (icon_extension) + 3); + if (! path) + return 0; + + ptr = grub_stpcpy (path, dir); + if (path == ptr || ptr[-1] != '/') + *ptr++ = '/'; + ptr = grub_stpcpy (ptr, class_name); + ptr = grub_stpcpy (ptr, icon_extension); + *ptr = '\0'; + + struct grub_video_bitmap *raw_bitmap; + grub_video_bitmap_load (&raw_bitmap, path); + grub_free (path); + grub_errno = GRUB_ERR_NONE; /* Critical to clear the error!! */ + if (! raw_bitmap) + return 0; + + struct grub_video_bitmap *scaled_bitmap; + grub_video_bitmap_create_scaled (&scaled_bitmap, + mgr->icon_width, mgr->icon_height, + raw_bitmap, + GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST); + grub_video_bitmap_destroy (raw_bitmap); + if (! scaled_bitmap) + return 0; + + return scaled_bitmap; +} + +/* Get the icon for the specified class CLASS_NAME. If an icon for + CLASS_NAME already exists in the cache, then a reference to the cached + bitmap is returned. If it is not cached, then it is loaded and cached. + If no icon could be could for CLASS_NAME, then 0 is returned. */ +static struct grub_video_bitmap * +get_icon_by_class (grub_gfxmenu_icon_manager_t mgr, const char *class_name) +{ + /* First check the icon cache. */ + icon_entry_t entry; + for (entry = mgr->cache.next; entry; entry = entry->next) + { + if (grub_strcmp (entry->class_name, class_name) == 0) + return entry->bitmap; + } + + if (! mgr->theme_path) + return 0; + + /* Otherwise, we search for an icon to load. */ + char *theme_dir = grub_get_dirname (mgr->theme_path); + char *icons_dir; + struct grub_video_bitmap *icon; + icon = 0; + /* First try the theme's own icons, from "grub/themes/NAME/icons/" */ + icons_dir = grub_resolve_relative_path (theme_dir, "icons/"); + if (icons_dir) + { + icon = try_loading_icon (mgr, icons_dir, class_name); + grub_free (icons_dir); + } + + grub_free (theme_dir); + if (! icon) + { + const char *icondir; + + icondir = grub_env_get ("icondir"); + if (icondir) + icon = try_loading_icon (mgr, icondir, class_name); + } + + /* No icon was found. */ + /* This should probably be noted in the cache, so that a search is not + performed each time an icon for CLASS_NAME is requested. */ + if (! icon) + return 0; + + /* Insert a new cache entry for this icon. */ + entry = grub_malloc (sizeof (*entry)); + if (! entry) + { + grub_video_bitmap_destroy (icon); + return 0; + } + entry->class_name = grub_strdup (class_name); + entry->bitmap = icon; + entry->next = mgr->cache.next; + mgr->cache.next = entry; /* Link it into the cache. */ + return entry->bitmap; +} + +/* Get the best available icon for ENTRY. Beginning with the first class + listed in the menu entry and proceeding forward, an icon for each class + is searched for. The first icon found is returned. The returned icon + is scaled to the size specified by + grub_gfxmenu_icon_manager_set_icon_size(). + + Note: Bitmaps returned by this function are destroyed when the + icon manager is destroyed. + */ +struct grub_video_bitmap * +grub_gfxmenu_icon_manager_get_icon (grub_gfxmenu_icon_manager_t mgr, + grub_menu_entry_t entry) +{ + struct grub_menu_entry_class *c; + struct grub_video_bitmap *icon; + + /* Try each class in succession. */ + icon = 0; + for (c = entry->classes; c && ! icon; c = c->next) + icon = get_icon_by_class (mgr, c->name); + return icon; +} diff --git a/grub-core/gfxmenu/theme_loader.c b/grub-core/gfxmenu/theme_loader.c new file mode 100644 index 000000000..02978392c --- /dev/null +++ b/grub-core/gfxmenu/theme_loader.c @@ -0,0 +1,828 @@ +/* theme_loader.c - Theme file loader for gfxmenu. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static grub_err_t +parse_proportional_spec (const char *value, signed *abs, grub_fixed_signed_t *prop); + +/* Construct a new box widget using ABSPATTERN to find the pixmap files for + it, storing the new box instance at *BOXPTR. + PATTERN should be of the form: "(hd0,0)/somewhere/style*.png". + The '*' then gets substituted with the various pixmap names that the + box uses. */ +static grub_err_t +recreate_box_absolute (grub_gfxmenu_box_t *boxptr, const char *abspattern) +{ + char *prefix; + char *suffix; + char *star; + grub_gfxmenu_box_t box; + + star = grub_strchr (abspattern, '*'); + if (! star) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "missing `*' in box pixmap pattern `%s'", abspattern); + + /* Prefix: Get the part before the '*'. */ + prefix = grub_malloc (star - abspattern + 1); + if (! prefix) + return grub_errno; + + grub_memcpy (prefix, abspattern, star - abspattern); + prefix[star - abspattern] = '\0'; + + /* Suffix: Everything after the '*' is the suffix. */ + suffix = star + 1; + + box = grub_gfxmenu_create_box (prefix, suffix); + grub_free (prefix); + if (! box) + return grub_errno; + + if (*boxptr) + (*boxptr)->destroy (*boxptr); + *boxptr = box; + return grub_errno; +} + + +/* Construct a new box widget using PATTERN to find the pixmap files for it, + storing the new widget at *BOXPTR. PATTERN should be of the form: + "somewhere/style*.png". The '*' then gets substituted with the various + pixmap names that the widget uses. + + Important! The value of *BOXPTR must be initialized! It must either + (1) Be 0 (a NULL pointer), or + (2) Be a pointer to a valid 'grub_gfxmenu_box_t' instance. + In this case, the previous instance is destroyed. */ +grub_err_t +grub_gui_recreate_box (grub_gfxmenu_box_t *boxptr, + const char *pattern, const char *theme_dir) +{ + char *abspattern; + + /* Check arguments. */ + if (! pattern) + { + /* If no pixmap pattern is given, then just create an empty box. */ + if (*boxptr) + (*boxptr)->destroy (*boxptr); + *boxptr = grub_gfxmenu_create_box (0, 0); + return grub_errno; + } + + if (! theme_dir) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "styled box missing theme directory"); + + /* Resolve to an absolute path. */ + abspattern = grub_resolve_relative_path (theme_dir, pattern); + if (! abspattern) + return grub_errno; + + /* Create the box. */ + recreate_box_absolute (boxptr, abspattern); + grub_free (abspattern); + return grub_errno; +} + +static grub_err_t +theme_get_unsigned_int_from_proportional (const char *value, + unsigned absolute_value, + unsigned int *parsed_value) +{ + grub_err_t err; + grub_fixed_signed_t frac; + signed pixels; + err = parse_proportional_spec (value, &pixels, &frac); + if (err != GRUB_ERR_NONE) + return err; + int result = grub_fixed_sfs_multiply (absolute_value, frac) + pixels; + if (result < 0) + result = 0; + *parsed_value = result; + return GRUB_ERR_NONE; +} + +/* Set the specified property NAME on the view to the given string VALUE. + The caller is responsible for the lifetimes of NAME and VALUE. */ +static grub_err_t +theme_set_string (grub_gfxmenu_view_t view, + const char *name, + const char *value, + const char *theme_dir, + const char *filename, + int line_num, + int col_num) +{ + if (! grub_strcmp ("title-font", name)) + view->title_font = grub_font_get (value); + else if (! grub_strcmp ("message-font", name)) + view->message_font = grub_font_get (value); + else if (! grub_strcmp ("terminal-font", name)) + { + grub_free (view->terminal_font_name); + view->terminal_font_name = grub_strdup (value); + if (! view->terminal_font_name) + return grub_errno; + } + else if (! grub_strcmp ("title-color", name)) + grub_video_parse_color (value, &view->title_color); + else if (! grub_strcmp ("message-color", name)) + grub_video_parse_color (value, &view->message_color); + else if (! grub_strcmp ("message-bg-color", name)) + grub_video_parse_color (value, &view->message_bg_color); + else if (! grub_strcmp ("desktop-image", name)) + { + struct grub_video_bitmap *raw_bitmap; + char *path; + path = grub_resolve_relative_path (theme_dir, value); + if (! path) + return grub_errno; + if (grub_video_bitmap_load (&raw_bitmap, path) != GRUB_ERR_NONE) + { + grub_free (path); + return grub_errno; + } + grub_free(path); + grub_video_bitmap_destroy (view->raw_desktop_image); + view->raw_desktop_image = raw_bitmap; + } + else if (! grub_strcmp ("desktop-image-scale-method", name)) + { + if (! value || ! grub_strcmp ("stretch", value)) + view->desktop_image_scale_method = + GRUB_VIDEO_BITMAP_SELECTION_METHOD_STRETCH; + else if (! grub_strcmp ("crop", value)) + view->desktop_image_scale_method = + GRUB_VIDEO_BITMAP_SELECTION_METHOD_CROP; + else if (! grub_strcmp ("padding", value)) + view->desktop_image_scale_method = + GRUB_VIDEO_BITMAP_SELECTION_METHOD_PADDING; + else if (! grub_strcmp ("fitwidth", value)) + view->desktop_image_scale_method = + GRUB_VIDEO_BITMAP_SELECTION_METHOD_FITWIDTH; + else if (! grub_strcmp ("fitheight", value)) + view->desktop_image_scale_method = + GRUB_VIDEO_BITMAP_SELECTION_METHOD_FITHEIGHT; + else + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "Unsupported scale method: %s", + value); + } + else if (! grub_strcmp ("desktop-image-h-align", name)) + { + if (! grub_strcmp ("left", value)) + view->desktop_image_h_align = GRUB_VIDEO_BITMAP_H_ALIGN_LEFT; + else if (! grub_strcmp ("center", value)) + view->desktop_image_h_align = GRUB_VIDEO_BITMAP_H_ALIGN_CENTER; + else if (! grub_strcmp ("right", value)) + view->desktop_image_h_align = GRUB_VIDEO_BITMAP_H_ALIGN_RIGHT; + else + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "Unsupported horizontal align method: %s", + value); + } + else if (! grub_strcmp ("desktop-image-v-align", name)) + { + if (! grub_strcmp ("top", value)) + view->desktop_image_v_align = GRUB_VIDEO_BITMAP_V_ALIGN_TOP; + else if (! grub_strcmp ("center", value)) + view->desktop_image_v_align = GRUB_VIDEO_BITMAP_V_ALIGN_CENTER; + else if (! grub_strcmp ("bottom", value)) + view->desktop_image_v_align = GRUB_VIDEO_BITMAP_V_ALIGN_BOTTOM; + else + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "Unsupported vertical align method: %s", + value); + } + else if (! grub_strcmp ("desktop-color", name)) + grub_video_parse_color (value, &view->desktop_color); + else if (! grub_strcmp ("terminal-box", name)) + { + grub_err_t err; + err = grub_gui_recreate_box (&view->terminal_box, value, theme_dir); + if (err != GRUB_ERR_NONE) + return err; + } + else if (! grub_strcmp ("terminal-border", name)) + { + view->terminal_border = grub_strtoul (value, 0, 10); + if (grub_errno) + return grub_errno; + } + else if (! grub_strcmp ("terminal-left", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.width, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.x = tmp; + } + else if (! grub_strcmp ("terminal-top", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.height, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.y = tmp; + } + else if (! grub_strcmp ("terminal-width", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.width, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.width = tmp; + } + else if (! grub_strcmp ("terminal-height", name)) + { + unsigned int tmp; + int err = theme_get_unsigned_int_from_proportional (value, + view->screen.height, + &tmp); + if (err != GRUB_ERR_NONE) + return err; + view->terminal_rect.height = tmp; + } + else if (! grub_strcmp ("title-text", name)) + { + grub_free (view->title_text); + view->title_text = grub_strdup (value); + if (! view->title_text) + return grub_errno; + } + else + { + return grub_error (GRUB_ERR_BAD_ARGUMENT, + "%s:%d:%d unknown property `%s'", + filename, line_num, col_num, name); + } + return grub_errno; +} + +struct parsebuf +{ + char *buf; + int pos; + int len; + int line_num; + int col_num; + const char *filename; + char *theme_dir; + grub_gfxmenu_view_t view; +}; + +static int +has_more (struct parsebuf *p) +{ + return p->pos < p->len; +} + +static int +read_char (struct parsebuf *p) +{ + if (has_more (p)) + { + char c; + c = p->buf[p->pos++]; + if (c == '\n') + { + p->line_num++; + p->col_num = 1; + } + else + { + p->col_num++; + } + return c; + } + else + return -1; +} + +static int +peek_char (struct parsebuf *p) +{ + if (has_more (p)) + return p->buf[p->pos]; + else + return -1; +} + +static int +is_whitespace (char c) +{ + return (c == ' ' + || c == '\t' + || c == '\r' + || c == '\n' + || c == '\f'); +} + +static void +skip_whitespace (struct parsebuf *p) +{ + while (has_more (p) && is_whitespace(peek_char (p))) + read_char (p); +} + +static void +advance_to_next_line (struct parsebuf *p) +{ + int c; + + /* Eat characters up to the newline. */ + do + { + c = read_char (p); + } + while (c != -1 && c != '\n'); +} + +static int +is_identifier_char (int c) +{ + return (c != -1 + && (grub_isalpha(c) + || grub_isdigit(c) + || c == '_' + || c == '-')); +} + +static char * +read_identifier (struct parsebuf *p) +{ + /* Index of the first character of the identifier in p->buf. */ + int start; + /* Next index after the last character of the identifer in p->buf. */ + int end; + + skip_whitespace (p); + + /* Capture the start of the identifier. */ + start = p->pos; + + /* Scan for the end. */ + while (is_identifier_char (peek_char (p))) + read_char (p); + end = p->pos; + + if (end - start < 1) + return 0; + + return grub_new_substring (p->buf, start, end); +} + +static char * +read_expression (struct parsebuf *p) +{ + int start; + int end; + + skip_whitespace (p); + if (peek_char (p) == '"') + { + /* Read as a quoted string. + The quotation marks are not included in the expression value. */ + /* Skip opening quotation mark. */ + read_char (p); + start = p->pos; + while (has_more (p) && peek_char (p) != '"') + read_char (p); + end = p->pos; + /* Skip the terminating quotation mark. */ + read_char (p); + } + else if (peek_char (p) == '(') + { + /* Read as a parenthesized string -- for tuples/coordinates. */ + /* The parentheses are included in the expression value. */ + int c; + + start = p->pos; + do + { + c = read_char (p); + } + while (c != -1 && c != ')'); + end = p->pos; + } + else if (has_more (p)) + { + /* Read as a single word -- for numeric values or words without + whitespace. */ + start = p->pos; + while (has_more (p) && ! is_whitespace (peek_char (p))) + read_char (p); + end = p->pos; + } + else + { + /* The end of the theme file has been reached. */ + grub_error (GRUB_ERR_IO, "%s:%d:%d expression expected in theme file", + p->filename, p->line_num, p->col_num); + return 0; + } + + return grub_new_substring (p->buf, start, end); +} + +static grub_err_t +parse_proportional_spec (const char *value, signed *abs, grub_fixed_signed_t *prop) +{ + signed num; + const char *ptr; + int sig = 0; + *abs = 0; + *prop = 0; + ptr = value; + while (*ptr) + { + sig = 0; + + while (*ptr == '-' || *ptr == '+') + { + if (*ptr == '-') + sig = !sig; + ptr++; + } + + num = grub_strtoul (ptr, (char **) &ptr, 0); + if (grub_errno) + return grub_errno; + if (sig) + num = -num; + if (*ptr == '%') + { + *prop += grub_fixed_fsf_divide (grub_signed_to_fixed (num), 100); + ptr++; + } + else + *abs += num; + } + return GRUB_ERR_NONE; +} + + +/* Read a GUI object specification from the theme file. + Any components created will be added to the GUI container PARENT. */ +static grub_err_t +read_object (struct parsebuf *p, grub_gui_container_t parent) +{ + grub_video_rect_t bounds; + + char *name; + name = read_identifier (p); + if (! name) + goto cleanup; + + grub_gui_component_t component = 0; + if (grub_strcmp (name, "label") == 0) + { + component = grub_gui_label_new (); + } + else if (grub_strcmp (name, "image") == 0) + { + component = grub_gui_image_new (); + } + else if (grub_strcmp (name, "vbox") == 0) + { + component = (grub_gui_component_t) grub_gui_vbox_new (); + } + else if (grub_strcmp (name, "hbox") == 0) + { + component = (grub_gui_component_t) grub_gui_hbox_new (); + } + else if (grub_strcmp (name, "canvas") == 0) + { + component = (grub_gui_component_t) grub_gui_canvas_new (); + } + else if (grub_strcmp (name, "progress_bar") == 0) + { + component = grub_gui_progress_bar_new (); + } + else if (grub_strcmp (name, "circular_progress") == 0) + { + component = grub_gui_circular_progress_new (); + } + else if (grub_strcmp (name, "boot_menu") == 0) + { + component = grub_gui_list_new (); + } + else + { + /* Unknown type. */ + grub_error (GRUB_ERR_IO, "%s:%d:%d unknown object type `%s'", + p->filename, p->line_num, p->col_num, name); + goto cleanup; + } + + if (! component) + goto cleanup; + + /* Inform the component about the theme so it can find its resources. */ + component->ops->set_property (component, "theme_dir", p->theme_dir); + component->ops->set_property (component, "theme_path", p->filename); + + /* Add the component as a child of PARENT. */ + bounds.x = 0; + bounds.y = 0; + bounds.width = -1; + bounds.height = -1; + component->ops->set_bounds (component, &bounds); + parent->ops->add (parent, component); + + skip_whitespace (p); + if (read_char (p) != '{') + { + grub_error (GRUB_ERR_IO, + "%s:%d:%d expected `{' after object type name `%s'", + p->filename, p->line_num, p->col_num, name); + goto cleanup; + } + + while (has_more (p)) + { + skip_whitespace (p); + + /* Check whether the end has been encountered. */ + if (peek_char (p) == '}') + { + /* Skip the closing brace. */ + read_char (p); + break; + } + + if (peek_char (p) == '#') + { + /* Skip comments. */ + advance_to_next_line (p); + continue; + } + + if (peek_char (p) == '+') + { + /* Skip the '+'. */ + read_char (p); + + /* Check whether this component is a container. */ + if (component->ops->is_instance (component, "container")) + { + /* Read the sub-object recursively and add it as a child. */ + if (read_object (p, (grub_gui_container_t) component) != 0) + goto cleanup; + /* After reading the sub-object, resume parsing, expecting + another property assignment or sub-object definition. */ + continue; + } + else + { + grub_error (GRUB_ERR_IO, + "%s:%d:%d attempted to add object to non-container", + p->filename, p->line_num, p->col_num); + goto cleanup; + } + } + + char *property; + property = read_identifier (p); + if (! property) + { + grub_error (GRUB_ERR_IO, "%s:%d:%d identifier expected in theme file", + p->filename, p->line_num, p->col_num); + goto cleanup; + } + + skip_whitespace (p); + if (read_char (p) != '=') + { + grub_error (GRUB_ERR_IO, + "%s:%d:%d expected `=' after property name `%s'", + p->filename, p->line_num, p->col_num, property); + grub_free (property); + goto cleanup; + } + skip_whitespace (p); + + char *value; + value = read_expression (p); + if (! value) + { + grub_free (property); + goto cleanup; + } + + /* Handle the property value. */ + if (grub_strcmp (property, "left") == 0) + parse_proportional_spec (value, &component->x, &component->xfrac); + else if (grub_strcmp (property, "top") == 0) + parse_proportional_spec (value, &component->y, &component->yfrac); + else if (grub_strcmp (property, "width") == 0) + parse_proportional_spec (value, &component->w, &component->wfrac); + else if (grub_strcmp (property, "height") == 0) + parse_proportional_spec (value, &component->h, &component->hfrac); + else + /* General property handling. */ + component->ops->set_property (component, property, value); + + grub_free (value); + grub_free (property); + if (grub_errno != GRUB_ERR_NONE) + goto cleanup; + } + +cleanup: + grub_free (name); + return grub_errno; +} + +static grub_err_t +read_property (struct parsebuf *p) +{ + char *name; + + /* Read the property name. */ + name = read_identifier (p); + if (! name) + { + advance_to_next_line (p); + return grub_errno; + } + + /* Skip whitespace before separator. */ + skip_whitespace (p); + + /* Read separator. */ + if (read_char (p) != ':') + { + grub_error (GRUB_ERR_IO, + "%s:%d:%d missing separator after property name `%s'", + p->filename, p->line_num, p->col_num, name); + goto done; + } + + /* Skip whitespace after separator. */ + skip_whitespace (p); + + /* Get the value based on its type. */ + if (peek_char (p) == '"') + { + /* String value (e.g., '"My string"'). */ + char *value = read_expression (p); + if (! value) + { + grub_error (GRUB_ERR_IO, "%s:%d:%d missing property value", + p->filename, p->line_num, p->col_num); + goto done; + } + /* If theme_set_string results in an error, grub_errno will be returned + below. */ + theme_set_string (p->view, name, value, p->theme_dir, + p->filename, p->line_num, p->col_num); + grub_free (value); + } + else + { + grub_error (GRUB_ERR_IO, + "%s:%d:%d property value invalid; " + "enclose literal values in quotes (\")", + p->filename, p->line_num, p->col_num); + goto done; + } + +done: + grub_free (name); + return grub_errno; +} + +/* Set properties on the view based on settings from the specified + theme file. */ +grub_err_t +grub_gfxmenu_view_load_theme (grub_gfxmenu_view_t view, const char *theme_path) +{ + grub_file_t file; + struct parsebuf p; + + p.view = view; + p.theme_dir = grub_get_dirname (theme_path); + + file = grub_file_open (theme_path); + if (! file) + { + grub_free (p.theme_dir); + return grub_errno; + } + + p.len = grub_file_size (file); + p.buf = grub_malloc (p.len); + p.pos = 0; + p.line_num = 1; + p.col_num = 1; + p.filename = theme_path; + if (! p.buf) + { + grub_file_close (file); + grub_free (p.theme_dir); + return grub_errno; + } + if (grub_file_read (file, p.buf, p.len) != p.len) + { + grub_free (p.buf); + grub_file_close (file); + grub_free (p.theme_dir); + return grub_errno; + } + + if (view->canvas) + view->canvas->component.ops->destroy (view->canvas); + + view->canvas = grub_gui_canvas_new (); + if (!view->canvas) + goto fail; + ((grub_gui_component_t) view->canvas) + ->ops->set_bounds ((grub_gui_component_t) view->canvas, + &view->screen); + + while (has_more (&p)) + { + /* Skip comments (lines beginning with #). */ + if (peek_char (&p) == '#') + { + advance_to_next_line (&p); + continue; + } + + /* Find the first non-whitespace character. */ + skip_whitespace (&p); + + /* Handle the content. */ + if (peek_char (&p) == '+') + { + /* Skip the '+'. */ + read_char (&p); + read_object (&p, view->canvas); + } + else + { + read_property (&p); + } + + if (grub_errno != GRUB_ERR_NONE) + goto fail; + } + + /* Set the new theme path. */ + grub_free (view->theme_path); + view->theme_path = grub_strdup (theme_path); + goto cleanup; + +fail: + if (view->canvas) + { + view->canvas->component.ops->destroy (view->canvas); + view->canvas = 0; + } + +cleanup: + grub_free (p.buf); + grub_file_close (file); + grub_free (p.theme_dir); + return grub_errno; +} diff --git a/grub-core/gfxmenu/view.c b/grub-core/gfxmenu/view.c new file mode 100644 index 000000000..ad5e82b81 --- /dev/null +++ b/grub-core/gfxmenu/view.c @@ -0,0 +1,647 @@ +/* view.c - Graphical menu interface MVC view. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void +init_terminal (grub_gfxmenu_view_t view); +static void +init_background (grub_gfxmenu_view_t view); +static grub_gfxmenu_view_t term_view; + +/* Create a new view object, loading the theme specified by THEME_PATH and + associating MODEL with the view. */ +grub_gfxmenu_view_t +grub_gfxmenu_view_new (const char *theme_path, + int width, int height) +{ + grub_gfxmenu_view_t view; + grub_font_t default_font; + grub_video_rgba_color_t default_fg_color; + grub_video_rgba_color_t default_bg_color; + + view = grub_malloc (sizeof (*view)); + if (! view) + return 0; + + while (grub_gfxmenu_timeout_notifications) + { + struct grub_gfxmenu_timeout_notify *p; + p = grub_gfxmenu_timeout_notifications; + grub_gfxmenu_timeout_notifications = grub_gfxmenu_timeout_notifications->next; + grub_free (p); + } + + view->screen.x = 0; + view->screen.y = 0; + view->screen.width = width; + view->screen.height = height; + + view->need_to_check_sanity = 1; + view->terminal_border = 3; + view->terminal_rect.width = view->screen.width * 7 / 10; + view->terminal_rect.height = view->screen.height * 7 / 10; + view->terminal_rect.x = view->screen.x + (view->screen.width + - view->terminal_rect.width) / 2; + view->terminal_rect.y = view->screen.y + (view->screen.height + - view->terminal_rect.height) / 2; + + default_font = grub_font_get ("Unknown Regular 16"); + default_fg_color = grub_video_rgba_color_rgb (0, 0, 0); + default_bg_color = grub_video_rgba_color_rgb (255, 255, 255); + + view->canvas = 0; + + view->title_font = default_font; + view->message_font = default_font; + view->terminal_font_name = grub_strdup ("Fixed 10"); + view->title_color = default_fg_color; + view->message_color = default_bg_color; + view->message_bg_color = default_fg_color; + view->raw_desktop_image = 0; + view->scaled_desktop_image = 0; + view->desktop_image_scale_method = GRUB_VIDEO_BITMAP_SELECTION_METHOD_STRETCH; + view->desktop_image_h_align = GRUB_VIDEO_BITMAP_H_ALIGN_CENTER; + view->desktop_image_v_align = GRUB_VIDEO_BITMAP_V_ALIGN_CENTER; + view->desktop_color = default_bg_color; + view->terminal_box = grub_gfxmenu_create_box (0, 0); + view->title_text = grub_strdup (_("GRUB Boot Menu")); + view->progress_message_text = 0; + view->theme_path = 0; + + /* Set the timeout bar's frame. */ + view->progress_message_frame.width = view->screen.width * 4 / 5; + view->progress_message_frame.height = 50; + view->progress_message_frame.x = view->screen.x + + (view->screen.width - view->progress_message_frame.width) / 2; + view->progress_message_frame.y = view->screen.y + + view->screen.height - 90 - 20 - view->progress_message_frame.height; + + if (grub_gfxmenu_view_load_theme (view, theme_path) != 0) + { + grub_gfxmenu_view_destroy (view); + return 0; + } + + return view; +} + +/* Destroy the view object. All used memory is freed. */ +void +grub_gfxmenu_view_destroy (grub_gfxmenu_view_t view) +{ + if (!view) + return; + while (grub_gfxmenu_timeout_notifications) + { + struct grub_gfxmenu_timeout_notify *p; + p = grub_gfxmenu_timeout_notifications; + grub_gfxmenu_timeout_notifications = grub_gfxmenu_timeout_notifications->next; + grub_free (p); + } + grub_video_bitmap_destroy (view->raw_desktop_image); + grub_video_bitmap_destroy (view->scaled_desktop_image); + if (view->terminal_box) + view->terminal_box->destroy (view->terminal_box); + grub_free (view->terminal_font_name); + grub_free (view->title_text); + grub_free (view->progress_message_text); + grub_free (view->theme_path); + if (view->canvas) + view->canvas->component.ops->destroy (view->canvas); + grub_free (view); +} + +static void +redraw_background (grub_gfxmenu_view_t view, + const grub_video_rect_t *bounds) +{ + if (view->scaled_desktop_image) + { + struct grub_video_bitmap *img = view->scaled_desktop_image; + grub_video_blit_bitmap (img, GRUB_VIDEO_BLIT_REPLACE, + bounds->x, bounds->y, + bounds->x - view->screen.x, + bounds->y - view->screen.y, + bounds->width, bounds->height); + } + else + { + grub_video_fill_rect (grub_video_map_rgba_color (view->desktop_color), + bounds->x, bounds->y, + bounds->width, bounds->height); + } +} + +static void +draw_title (grub_gfxmenu_view_t view) +{ + if (! view->title_text) + return; + + /* Center the title. */ + int title_width = grub_font_get_string_width (view->title_font, + view->title_text); + int x = (view->screen.width - title_width) / 2; + int y = 40 + grub_font_get_ascent (view->title_font); + grub_font_draw_string (view->title_text, + view->title_font, + grub_video_map_rgba_color (view->title_color), + x, y); +} + +struct progress_value_data +{ + int visible; + int start; + int end; + int value; +}; + +struct grub_gfxmenu_timeout_notify *grub_gfxmenu_timeout_notifications; + +static void +update_timeouts (int visible, int start, int value, int end) +{ + struct grub_gfxmenu_timeout_notify *cur; + + for (cur = grub_gfxmenu_timeout_notifications; cur; cur = cur->next) + cur->set_state (cur->self, visible, start, value, end); +} + +static void +redraw_timeouts (struct grub_gfxmenu_view *view) +{ + struct grub_gfxmenu_timeout_notify *cur; + + for (cur = grub_gfxmenu_timeout_notifications; cur; cur = cur->next) + { + grub_video_rect_t bounds; + cur->self->ops->get_bounds (cur->self, &bounds); + grub_video_set_area_status (GRUB_VIDEO_AREA_ENABLED); + grub_gfxmenu_view_redraw (view, &bounds); + } +} + +void +grub_gfxmenu_print_timeout (int timeout, void *data) +{ + struct grub_gfxmenu_view *view = data; + + if (view->first_timeout == -1) + view->first_timeout = timeout; + + update_timeouts (1, -view->first_timeout, -timeout, 0); + redraw_timeouts (view); + grub_video_swap_buffers (); + if (view->double_repaint) + redraw_timeouts (view); +} + +void +grub_gfxmenu_clear_timeout (void *data) +{ + struct grub_gfxmenu_view *view = data; + + update_timeouts (0, 1, 0, 0); + redraw_timeouts (view); + grub_video_swap_buffers (); + if (view->double_repaint) + redraw_timeouts (view); +} + +static void +update_menu_visit (grub_gui_component_t component, + void *userdata) +{ + grub_gfxmenu_view_t view; + view = userdata; + if (component->ops->is_instance (component, "list")) + { + grub_gui_list_t list = (grub_gui_list_t) component; + list->ops->set_view_info (list, view); + } +} + +/* Update any boot menu components with the current menu model and + theme path. */ +static void +update_menu_components (grub_gfxmenu_view_t view) +{ + grub_gui_iterate_recursively ((grub_gui_component_t) view->canvas, + update_menu_visit, view); +} + +static void +refresh_menu_visit (grub_gui_component_t component, + void *userdata) +{ + grub_gfxmenu_view_t view; + view = userdata; + if (component->ops->is_instance (component, "list")) + { + grub_gui_list_t list = (grub_gui_list_t) component; + list->ops->refresh_list (list, view); + } +} + +/* Refresh list information (useful for submenus) */ +static void +refresh_menu_components (grub_gfxmenu_view_t view) +{ + grub_gui_iterate_recursively ((grub_gui_component_t) view->canvas, + refresh_menu_visit, view); +} + +static void +draw_message (grub_gfxmenu_view_t view) +{ + char *text = view->progress_message_text; + grub_video_rect_t f = view->progress_message_frame; + if (! text) + return; + + grub_font_t font = view->message_font; + grub_video_color_t color = grub_video_map_rgba_color (view->message_color); + + /* Border. */ + grub_video_fill_rect (color, + f.x-1, f.y-1, f.width+2, f.height+2); + /* Fill. */ + grub_video_fill_rect (grub_video_map_rgba_color (view->message_bg_color), + f.x, f.y, f.width, f.height); + + /* Center the text. */ + int text_width = grub_font_get_string_width (font, text); + int x = f.x + (f.width - text_width) / 2; + int y = (f.y + (f.height - grub_font_get_descent (font)) / 2 + + grub_font_get_ascent (font) / 2); + grub_font_draw_string (text, font, color, x, y); +} + +void +grub_gfxmenu_view_redraw (grub_gfxmenu_view_t view, + const grub_video_rect_t *region) +{ + if (grub_video_have_common_points (&view->terminal_rect, region)) + grub_gfxterm_schedule_repaint (); + + grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY); + grub_video_area_status_t area_status; + grub_video_get_area_status (&area_status); + if (area_status == GRUB_VIDEO_AREA_ENABLED) + grub_video_set_region (region->x, region->y, + region->width, region->height); + + redraw_background (view, region); + if (view->canvas) + view->canvas->component.ops->paint (view->canvas, region); + draw_title (view); + if (grub_video_have_common_points (&view->progress_message_frame, region)) + draw_message (view); + + if (area_status == GRUB_VIDEO_AREA_ENABLED) + grub_video_set_area_status (GRUB_VIDEO_AREA_ENABLED); +} + +void +grub_gfxmenu_view_draw (grub_gfxmenu_view_t view) +{ + init_terminal (view); + + init_background (view); + + /* Clear the screen; there may be garbage left over in video memory. */ + grub_video_fill_rect (grub_video_map_rgb (0, 0, 0), + view->screen.x, view->screen.y, + view->screen.width, view->screen.height); + grub_video_swap_buffers (); + if (view->double_repaint) + grub_video_fill_rect (grub_video_map_rgb (0, 0, 0), + view->screen.x, view->screen.y, + view->screen.width, view->screen.height); + + refresh_menu_components (view); + update_menu_components (view); + + grub_video_set_area_status (GRUB_VIDEO_AREA_DISABLED); + grub_gfxmenu_view_redraw (view, &view->screen); + grub_video_swap_buffers (); + if (view->double_repaint) + { + grub_video_set_area_status (GRUB_VIDEO_AREA_DISABLED); + grub_gfxmenu_view_redraw (view, &view->screen); + } + +} + +static void +redraw_menu_visit (grub_gui_component_t component, + void *userdata) +{ + grub_gfxmenu_view_t view; + view = userdata; + if (component->ops->is_instance (component, "list")) + { + grub_video_rect_t bounds; + + component->ops->get_bounds (component, &bounds); + grub_video_set_area_status (GRUB_VIDEO_AREA_ENABLED); + grub_gfxmenu_view_redraw (view, &bounds); + } +} + +void +grub_gfxmenu_redraw_menu (grub_gfxmenu_view_t view) +{ + update_menu_components (view); + + grub_gui_iterate_recursively ((grub_gui_component_t) view->canvas, + redraw_menu_visit, view); + grub_video_swap_buffers (); + if (view->double_repaint) + { + grub_gui_iterate_recursively ((grub_gui_component_t) view->canvas, + redraw_menu_visit, view); + } +} + +void +grub_gfxmenu_set_chosen_entry (int entry, void *data) +{ + grub_gfxmenu_view_t view = data; + + view->selected = entry; + grub_gfxmenu_redraw_menu (view); +} + +static void +grub_gfxmenu_draw_terminal_box (void) +{ + grub_gfxmenu_box_t term_box; + + term_box = term_view->terminal_box; + if (!term_box) + return; + + grub_video_set_area_status (GRUB_VIDEO_AREA_DISABLED); + + term_box->set_content_size (term_box, term_view->terminal_rect.width, + term_view->terminal_rect.height); + + term_box->draw (term_box, + term_view->terminal_rect.x - term_box->get_left_pad (term_box), + term_view->terminal_rect.y - term_box->get_top_pad (term_box)); +} + +static void +get_min_terminal (grub_font_t terminal_font, + unsigned int border_width, + unsigned int *min_terminal_width, + unsigned int *min_terminal_height) +{ + struct grub_font_glyph *glyph; + glyph = grub_font_get_glyph (terminal_font, 'M'); + *min_terminal_width = (glyph? glyph->device_width : 8) * 80 + + 2 * border_width; + *min_terminal_height = grub_font_get_max_char_height (terminal_font) * 24 + + 2 * border_width; +} + +static void +terminal_sanity_check (grub_gfxmenu_view_t view) +{ + if (!view->need_to_check_sanity) + return; + + /* terminal_font was checked before in the init_terminal function. */ + grub_font_t terminal_font = grub_font_get (view->terminal_font_name); + + /* Non-negative numbers below. */ + int scr_x = view->screen.x; + int scr_y = view->screen.y; + int scr_width = view->screen.width; + int scr_height = view->screen.height; + int term_x = view->terminal_rect.x; + int term_y = view->terminal_rect.y; + int term_width = view->terminal_rect.width; + int term_height = view->terminal_rect.height; + + /* Check that border_width isn't too big. */ + unsigned int border_width = view->terminal_border; + unsigned int min_terminal_width; + unsigned int min_terminal_height; + get_min_terminal (terminal_font, border_width, + &min_terminal_width, &min_terminal_height); + if (border_width > 3 && ((int) min_terminal_width >= scr_width + || (int) min_terminal_height >= scr_height)) + { + border_width = 3; + get_min_terminal (terminal_font, border_width, + &min_terminal_width, &min_terminal_height); + } + + /* Sanity checks. */ + if (term_width > scr_width) + term_width = scr_width; + if (term_height > scr_height) + term_height = scr_height; + + if (scr_width <= (int) min_terminal_width + || scr_height <= (int) min_terminal_height) + { + /* The screen resulution is too low. Use all space, except a small border + to show the user, that it is a window. Then center the window. */ + term_width = scr_width - 6 * border_width; + term_height = scr_height - 6 * border_width; + term_x = scr_x + (scr_width - term_width) / 2; + term_y = scr_y + (scr_height - term_height) / 2; + } + else if (term_width < (int) min_terminal_width + || term_height < (int) min_terminal_height) + { + /* The screen resolution is big enough. Make sure, that terminal screen + dimensions aren't less than minimal values. Then center the window. */ + term_width = (int) min_terminal_width; + term_height = (int) min_terminal_height; + term_x = scr_x + (scr_width - term_width) / 2; + term_y = scr_y + (scr_height - term_height) / 2; + } + + /* At this point w and h are satisfying. */ + if (term_x + term_width > scr_width) + term_x = scr_width - term_width; + if (term_y + term_height > scr_height) + term_y = scr_height - term_height; + + /* Write down corrected data. */ + view->terminal_rect.x = (unsigned int) term_x; + view->terminal_rect.y = (unsigned int) term_y; + view->terminal_rect.width = (unsigned int) term_width; + view->terminal_rect.height = (unsigned int) term_height; + view->terminal_border = border_width; + + view->need_to_check_sanity = 0; +} + +static void +init_terminal (grub_gfxmenu_view_t view) +{ + grub_font_t terminal_font; + + terminal_font = grub_font_get (view->terminal_font_name); + if (!terminal_font) + { + grub_error (GRUB_ERR_BAD_FONT, "no font loaded"); + return; + } + + /* Check that terminal window size and position are sane. */ + terminal_sanity_check (view); + + term_view = view; + + /* Note: currently there is no API for changing the gfxterm font + on the fly, so whatever font the initially loaded theme specifies + will be permanent. */ + grub_gfxterm_set_window (GRUB_VIDEO_RENDER_TARGET_DISPLAY, + view->terminal_rect.x, + view->terminal_rect.y, + view->terminal_rect.width, + view->terminal_rect.height, + view->double_repaint, + terminal_font, + view->terminal_border); + grub_gfxterm_decorator_hook = grub_gfxmenu_draw_terminal_box; +} + +static void +init_background (grub_gfxmenu_view_t view) +{ + if (view->scaled_desktop_image) + return; + + struct grub_video_bitmap *scaled_bitmap; + if (view->desktop_image_scale_method == + GRUB_VIDEO_BITMAP_SELECTION_METHOD_STRETCH) + grub_video_bitmap_create_scaled (&scaled_bitmap, + view->screen.width, + view->screen.height, + view->raw_desktop_image, + GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST); + else + grub_video_bitmap_scale_proportional (&scaled_bitmap, + view->screen.width, + view->screen.height, + view->raw_desktop_image, + GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST, + view->desktop_image_scale_method, + view->desktop_image_v_align, + view->desktop_image_h_align); + if (! scaled_bitmap) + return; + view->scaled_desktop_image = scaled_bitmap; + +} + +/* FIXME: previously notifications were displayed in special case. + Is it necessary? + */ +#if 0 +/* Sets MESSAGE as the progress message for the view. + MESSAGE can be 0, in which case no message is displayed. */ +static void +set_progress_message (grub_gfxmenu_view_t view, const char *message) +{ + grub_free (view->progress_message_text); + if (message) + view->progress_message_text = grub_strdup (message); + else + view->progress_message_text = 0; +} + +static void +notify_booting (grub_menu_entry_t entry, void *userdata) +{ + grub_gfxmenu_view_t view = (grub_gfxmenu_view_t) userdata; + + char *s = grub_malloc (100 + grub_strlen (entry->title)); + if (!s) + return; + + grub_sprintf (s, "Booting '%s'", entry->title); + set_progress_message (view, s); + grub_free (s); + grub_gfxmenu_view_redraw (view, &view->progress_message_frame); + grub_video_swap_buffers (); + if (view->double_repaint) + grub_gfxmenu_view_redraw (view, &view->progress_message_frame); +} + +static void +notify_fallback (grub_menu_entry_t entry, void *userdata) +{ + grub_gfxmenu_view_t view = (grub_gfxmenu_view_t) userdata; + + char *s = grub_malloc (100 + grub_strlen (entry->title)); + if (!s) + return; + + grub_sprintf (s, "Falling back to '%s'", entry->title); + set_progress_message (view, s); + grub_free (s); + grub_gfxmenu_view_redraw (view, &view->progress_message_frame); + grub_video_swap_buffers (); + if (view->double_repaint) + grub_gfxmenu_view_redraw (view, &view->progress_message_frame); +} + +static void +notify_execution_failure (void *userdata __attribute__ ((unused))) +{ +} + + +static struct grub_menu_execute_callback execute_callback = +{ + .notify_booting = notify_booting, + .notify_fallback = notify_fallback, + .notify_failure = notify_execution_failure +}; + +#endif diff --git a/grub-core/gfxmenu/widget-box.c b/grub-core/gfxmenu/widget-box.c new file mode 100644 index 000000000..b60602889 --- /dev/null +++ b/grub-core/gfxmenu/widget-box.c @@ -0,0 +1,360 @@ +/* widget_box.c - Pixmap-stylized box widget. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +enum box_pixmaps +{ + BOX_PIXMAP_NW, BOX_PIXMAP_NE, BOX_PIXMAP_SE, BOX_PIXMAP_SW, + BOX_PIXMAP_N, BOX_PIXMAP_E, BOX_PIXMAP_S, BOX_PIXMAP_W, + BOX_PIXMAP_CENTER +}; + +static const char *box_pixmap_names[] = { + /* Corners: */ + "nw", "ne", "se", "sw", + /* Sides: */ + "n", "e", "s", "w", + /* Center: */ + "c" +}; + +#define BOX_NUM_PIXMAPS (sizeof(box_pixmap_names)/sizeof(*box_pixmap_names)) + +static int +get_height (struct grub_video_bitmap *bitmap) +{ + if (bitmap) + return grub_video_bitmap_get_height (bitmap); + else + return 0; +} + +static int +get_width (struct grub_video_bitmap *bitmap) +{ + if (bitmap) + return grub_video_bitmap_get_width (bitmap); + else + return 0; +} + +static void +blit (grub_gfxmenu_box_t self, int pixmap_index, int x, int y) +{ + struct grub_video_bitmap *bitmap; + bitmap = self->scaled_pixmaps[pixmap_index]; + if (! bitmap) + return; + grub_video_blit_bitmap (bitmap, GRUB_VIDEO_BLIT_BLEND, + x, y, 0, 0, + grub_video_bitmap_get_width (bitmap), + grub_video_bitmap_get_height (bitmap)); +} + +static void +draw (grub_gfxmenu_box_t self, int x, int y) +{ + int height_n; + int width_w; + int tmp; + + /* Count maximum height of NW, N, NE. */ + height_n = get_height (self->scaled_pixmaps[BOX_PIXMAP_NW]); + tmp = get_height (self->scaled_pixmaps[BOX_PIXMAP_N]); + if (tmp > height_n) + height_n = tmp; + tmp = get_height (self->scaled_pixmaps[BOX_PIXMAP_NE]); + if (tmp > height_n) + height_n = tmp; + + /* Count maximum width of NW, W, SW. */ + width_w = get_width (self->scaled_pixmaps[BOX_PIXMAP_NW]); + tmp = get_width (self->scaled_pixmaps[BOX_PIXMAP_W]); + if (tmp > width_w) + width_w = tmp; + tmp = get_width (self->scaled_pixmaps[BOX_PIXMAP_SW]); + if (tmp > width_w) + width_w = tmp; + + /* Draw sides. */ + blit (self, BOX_PIXMAP_N, x + width_w, y); + blit (self, BOX_PIXMAP_S, x + width_w, y + height_n + self->content_height); + blit (self, BOX_PIXMAP_E, x + width_w + self->content_width, y + height_n); + blit (self, BOX_PIXMAP_W, x, y + height_n); + + /* Draw corners. */ + blit (self, BOX_PIXMAP_NW, x, y); + blit (self, BOX_PIXMAP_NE, x + width_w + self->content_width, y); + blit (self, BOX_PIXMAP_SE, + x + width_w + self->content_width, + y + height_n + self->content_height); + blit (self, BOX_PIXMAP_SW, x, y + height_n + self->content_height); + + /* Draw center. */ + blit (self, BOX_PIXMAP_CENTER, x + width_w, y + height_n); +} + +static grub_err_t +scale_pixmap (grub_gfxmenu_box_t self, int i, int w, int h) +{ + struct grub_video_bitmap **scaled = &self->scaled_pixmaps[i]; + struct grub_video_bitmap *raw = self->raw_pixmaps[i]; + + if (raw == 0) + return grub_errno; + + if (w == -1) + w = grub_video_bitmap_get_width (raw); + if (h == -1) + h = grub_video_bitmap_get_height (raw); + + if (*scaled == 0 + || ((int) grub_video_bitmap_get_width (*scaled) != w) + || ((int) grub_video_bitmap_get_height (*scaled) != h)) + { + if (*scaled) + { + grub_video_bitmap_destroy (*scaled); + *scaled = 0; + } + + /* Don't try to create a bitmap with a zero dimension. */ + if (w != 0 && h != 0) + grub_video_bitmap_create_scaled (scaled, w, h, raw, + GRUB_VIDEO_BITMAP_SCALE_METHOD_BEST); + } + + return grub_errno; +} + +static void +set_content_size (grub_gfxmenu_box_t self, + int width, int height) +{ + self->content_width = width; + self->content_height = height; + + /* Resize sides to match the width and height. */ + /* It is assumed that the corners width/height match the adjacent sides. */ + + /* Resize N and S sides to match width. */ + if (scale_pixmap(self, BOX_PIXMAP_N, width, -1) != GRUB_ERR_NONE) + return; + if (scale_pixmap(self, BOX_PIXMAP_S, width, -1) != GRUB_ERR_NONE) + return; + + /* Resize E and W sides to match height. */ + if (scale_pixmap(self, BOX_PIXMAP_E, -1, height) != GRUB_ERR_NONE) + return; + if (scale_pixmap(self, BOX_PIXMAP_W, -1, height) != GRUB_ERR_NONE) + return; + + /* Don't scale the corners--they are assumed to match the sides. */ + if (scale_pixmap(self, BOX_PIXMAP_NW, -1, -1) != GRUB_ERR_NONE) + return; + if (scale_pixmap(self, BOX_PIXMAP_SW, -1, -1) != GRUB_ERR_NONE) + return; + if (scale_pixmap(self, BOX_PIXMAP_NE, -1, -1) != GRUB_ERR_NONE) + return; + if (scale_pixmap(self, BOX_PIXMAP_SE, -1, -1) != GRUB_ERR_NONE) + return; + + /* Scale the center area. */ + if (scale_pixmap(self, BOX_PIXMAP_CENTER, width, height) != GRUB_ERR_NONE) + return; +} + +static int +get_border_width (grub_gfxmenu_box_t self) +{ + return (get_width (self->raw_pixmaps[BOX_PIXMAP_E]) + + get_width (self->raw_pixmaps[BOX_PIXMAP_W])); +} + +static int +get_left_pad (grub_gfxmenu_box_t self) +{ + int v, c; + + v = get_width (self->raw_pixmaps[BOX_PIXMAP_W]); + c = get_width (self->raw_pixmaps[BOX_PIXMAP_NW]); + if (c > v) + v = c; + c = get_width (self->raw_pixmaps[BOX_PIXMAP_SW]); + if (c > v) + v = c; + + return v; +} + +static int +get_top_pad (grub_gfxmenu_box_t self) +{ + int v, c; + + v = get_height (self->raw_pixmaps[BOX_PIXMAP_N]); + c = get_height (self->raw_pixmaps[BOX_PIXMAP_NW]); + if (c > v) + v = c; + c = get_height (self->raw_pixmaps[BOX_PIXMAP_NE]); + if (c > v) + v = c; + + return v; +} + +static int +get_right_pad (grub_gfxmenu_box_t self) +{ + int v, c; + + v = get_width (self->raw_pixmaps[BOX_PIXMAP_E]); + c = get_width (self->raw_pixmaps[BOX_PIXMAP_NE]); + if (c > v) + v = c; + c = get_width (self->raw_pixmaps[BOX_PIXMAP_SE]); + if (c > v) + v = c; + + return v; +} + +static int +get_bottom_pad (grub_gfxmenu_box_t self) +{ + int v, c; + + v = get_height (self->raw_pixmaps[BOX_PIXMAP_S]); + c = get_height (self->raw_pixmaps[BOX_PIXMAP_SW]); + if (c > v) + v = c; + c = get_height (self->raw_pixmaps[BOX_PIXMAP_SE]); + if (c > v) + v = c; + + return v; +} + +static void +destroy (grub_gfxmenu_box_t self) +{ + unsigned i; + for (i = 0; i < BOX_NUM_PIXMAPS; i++) + { + if (self->raw_pixmaps[i]) + grub_video_bitmap_destroy(self->raw_pixmaps[i]); + self->raw_pixmaps[i] = 0; + + if (self->scaled_pixmaps[i]) + grub_video_bitmap_destroy(self->scaled_pixmaps[i]); + self->scaled_pixmaps[i] = 0; + } + grub_free (self->raw_pixmaps); + self->raw_pixmaps = 0; + grub_free (self->scaled_pixmaps); + self->scaled_pixmaps = 0; + + /* Free self: must be the last step! */ + grub_free (self); +} + + +/* Create a new box. If PIXMAPS_PREFIX and PIXMAPS_SUFFIX are both non-null, + then an attempt is made to load the north, south, east, west, northwest, + northeast, southeast, southwest, and center pixmaps. + If either PIXMAPS_PREFIX or PIXMAPS_SUFFIX is 0, then no pixmaps are + loaded, and the box has zero-width borders and is drawn transparent. */ +grub_gfxmenu_box_t +grub_gfxmenu_create_box (const char *pixmaps_prefix, + const char *pixmaps_suffix) +{ + unsigned i; + grub_gfxmenu_box_t box; + + box = (grub_gfxmenu_box_t) grub_malloc (sizeof (*box)); + if (! box) + return 0; + + box->content_width = 0; + box->content_height = 0; + box->raw_pixmaps = + (struct grub_video_bitmap **) + grub_malloc (BOX_NUM_PIXMAPS * sizeof (struct grub_video_bitmap *)); + box->scaled_pixmaps = + (struct grub_video_bitmap **) + grub_malloc (BOX_NUM_PIXMAPS * sizeof (struct grub_video_bitmap *)); + + /* Initialize all pixmap pointers to NULL so that proper destruction can + be performed if an error is encountered partway through construction. */ + for (i = 0; i < BOX_NUM_PIXMAPS; i++) + box->raw_pixmaps[i] = 0; + for (i = 0; i < BOX_NUM_PIXMAPS; i++) + box->scaled_pixmaps[i] = 0; + + /* Load the pixmaps. */ + for (i = 0; i < BOX_NUM_PIXMAPS; i++) + { + if (pixmaps_prefix && pixmaps_suffix) + { + char *path; + char *path_end; + + path = grub_malloc (grub_strlen (pixmaps_prefix) + + grub_strlen (box_pixmap_names[i]) + + grub_strlen (pixmaps_suffix) + + 1); + if (! path) + goto fail_and_destroy; + + /* Construct the specific path for this pixmap. */ + path_end = grub_stpcpy (path, pixmaps_prefix); + path_end = grub_stpcpy (path_end, box_pixmap_names[i]); + path_end = grub_stpcpy (path_end, pixmaps_suffix); + + grub_video_bitmap_load (&box->raw_pixmaps[i], path); + grub_free (path); + + /* Ignore missing pixmaps. */ + grub_errno = GRUB_ERR_NONE; + } + } + + box->draw = draw; + box->set_content_size = set_content_size; + box->get_border_width = get_border_width; + + box->get_left_pad = get_left_pad; + box->get_top_pad = get_top_pad; + box->get_right_pad = get_right_pad; + box->get_bottom_pad = get_bottom_pad; + box->destroy = destroy; + return box; + +fail_and_destroy: + destroy (box); + return 0; +} diff --git a/grub-core/gmodule.pl.in b/grub-core/gmodule.pl.in new file mode 100644 index 000000000..78aa1e64e --- /dev/null +++ b/grub-core/gmodule.pl.in @@ -0,0 +1,30 @@ +### +### Generate GDB commands, that load symbols for specified module, +### with proper section relocations. See .gdbinit +### +### $Id: gmodule.pl,v 1.2 2006/05/14 11:38:42 lkundrak Exp lkundrak $ +### Lubomir Kundrak +### + +use strict; + +while (<>) { + my ($name, %sections) = split; + + print "add-symbol-file $name.module"; + + open (READELF, "readelf -S $name.mod |") or die; + while () { + /\[\s*(\d+)\]\s+(\.\S+)/ or next; + + if ($2 eq '.text') { + print " $sections{$1}"; + next; + } + + print " -s $2 $sections{$1}" + if ($sections{$1} ne '0x0' and $sections{$1} ne ''); + }; + close (READELF); + print "\n"; +} diff --git a/grub-core/gnulib-fix-null-deref.diff b/grub-core/gnulib-fix-null-deref.diff new file mode 100644 index 000000000..a2fba8c3b --- /dev/null +++ b/grub-core/gnulib-fix-null-deref.diff @@ -0,0 +1,13 @@ +=== modified file 'grub-core/gnulib/argp-parse.c' +--- grub-core/gnulib/argp-parse.c 2010-04-02 22:45:01 +0000 ++++ grub-core/gnulib/argp-parse.c 2011-04-10 13:25:52 +0000 +@@ -935,7 +935,7 @@ + void * + __argp_input (const struct argp *argp, const struct argp_state *state) + { +- if (state) ++ if (state && state->pstate) + { + struct group *group; + struct parser *parser = state->pstate; + diff --git a/grub-core/gnulib-fix-width.diff b/grub-core/gnulib-fix-width.diff new file mode 100644 index 000000000..ae77af6c9 --- /dev/null +++ b/grub-core/gnulib-fix-width.diff @@ -0,0 +1,231 @@ +diff --git a/lib/argp-fmtstream.c b/lib/argp-fmtstream.c +index 7aa317c..02406ff 100644 +--- a/lib/argp-fmtstream.c ++++ b/lib/argp-fmtstream.c +@@ -29,9 +29,11 @@ + #include + #include + #include ++#include + + #include "argp-fmtstream.h" + #include "argp-namefrob.h" ++#include "mbswidth.h" + + #ifndef ARGP_FMTSTREAM_USE_LINEWRAP + +@@ -116,6 +118,51 @@ weak_alias (__argp_fmtstream_free, argp_fmtstream_free) + #endif + #endif + ++ ++/* Return the pointer to the first character that doesn't fit in l columns. */ ++static inline const ptrdiff_t ++add_width (const char *ptr, const char *end, size_t l) ++{ ++ mbstate_t ps; ++ const char *ptr0 = ptr; ++ ++ memset (&ps, 0, sizeof (ps)); ++ ++ while (ptr < end) ++ { ++ wchar_t wc; ++ size_t s, k; ++ ++ s = mbrtowc (&wc, ptr, end - ptr, &ps); ++ if (s == (size_t) -1) ++ break; ++ if (s == (size_t) -2) ++ { ++ if (1 >= l) ++ break; ++ l--; ++ ptr++; ++ continue; ++ } ++ ++ if (wc == '\e' && ptr + 3 < end ++ && ptr[1] == '[' && (ptr[2] == '0' || ptr[2] == '1') ++ && ptr[3] == 'm') ++ { ++ ptr += 4; ++ continue; ++ } ++ ++ k = wcwidth (wc); ++ ++ if (k >= l) ++ break; ++ l -= k; ++ ptr += s; ++ } ++ return ptr - ptr0; ++} ++ + /* Process FS's buffer so that line wrapping is done from POINT_OFFS to the + end of its buffer. This code is mostly from glibc stdio/linewrap.c. */ + void +@@ -168,14 +215,15 @@ __argp_fmtstream_update (argp_fmtstream_t fs) + + if (!nl) + { ++ size_t display_width = mbsnwidth (buf, fs->p - buf, MBSW_STOP_AT_NUL); + /* The buffer ends in a partial line. */ + +- if (fs->point_col + len < fs->rmargin) ++ if (fs->point_col + display_width < fs->rmargin) + { + /* The remaining buffer text is a partial line and fits + within the maximum line width. Advance point for the + characters to be written and stop scanning. */ +- fs->point_col += len; ++ fs->point_col += display_width; + break; + } + else +@@ -183,14 +231,18 @@ __argp_fmtstream_update (argp_fmtstream_t fs) + the end of the buffer. */ + nl = fs->p; + } +- else if (fs->point_col + (nl - buf) < (ssize_t) fs->rmargin) +- { +- /* The buffer contains a full line that fits within the maximum +- line width. Reset point and scan the next line. */ +- fs->point_col = 0; +- buf = nl + 1; +- continue; +- } ++ else ++ { ++ size_t display_width = mbsnwidth (buf, nl - buf, MBSW_STOP_AT_NUL); ++ if (display_width < (ssize_t) fs->rmargin) ++ { ++ /* The buffer contains a full line that fits within the maximum ++ line width. Reset point and scan the next line. */ ++ fs->point_col = 0; ++ buf = nl + 1; ++ continue; ++ } ++ } + + /* This line is too long. */ + r = fs->rmargin - 1; +@@ -226,7 +278,7 @@ __argp_fmtstream_update (argp_fmtstream_t fs) + char *p, *nextline; + int i; + +- p = buf + (r + 1 - fs->point_col); ++ p = buf + add_width (buf, fs->p, (r + 1 - fs->point_col)); + while (p >= buf && !isblank ((unsigned char) *p)) + --p; + nextline = p + 1; /* This will begin the next line. */ +@@ -244,7 +296,7 @@ __argp_fmtstream_update (argp_fmtstream_t fs) + { + /* A single word that is greater than the maximum line width. + Oh well. Put it on an overlong line by itself. */ +- p = buf + (r + 1 - fs->point_col); ++ p = buf + add_width (buf, fs->p, (r + 1 - fs->point_col)); + /* Find the end of the long word. */ + if (p < nl) + do +@@ -278,7 +330,8 @@ __argp_fmtstream_update (argp_fmtstream_t fs) + && fs->p > nextline) + { + /* The margin needs more blanks than we removed. */ +- if (fs->end - fs->p > fs->wmargin + 1) ++ if (mbsnwidth (fs->p, fs->end - fs->p, MBSW_STOP_AT_NUL) ++ > fs->wmargin + 1) + /* Make some space for them. */ + { + size_t mv = fs->p - nextline; +diff --git a/lib/argp-help.c b/lib/argp-help.c +index 354f1e2..2914f47 100644 +--- a/lib/argp-help.c ++++ b/lib/argp-help.c +@@ -50,6 +50,7 @@ + #include "argp.h" + #include "argp-fmtstream.h" + #include "argp-namefrob.h" ++#include "mbswidth.h" + + #ifndef SIZE_MAX + # define SIZE_MAX ((size_t) -1) +@@ -1452,7 +1453,7 @@ argp_args_usage (const struct argp *argp, const struct argp_state *state, + + /* Manually do line wrapping so that it (probably) won't get wrapped at + any embedded spaces. */ +- space (stream, 1 + nl - cp); ++ space (stream, 1 + mbsnwidth (cp, nl - cp, MBSW_STOP_AT_NUL)); + + __argp_fmtstream_write (stream, cp, nl - cp); + } +diff --git a/lib/mbswidth.c b/lib/mbswidth.c +index 7c2dfce..baa4f27 100644 +--- a/lib/mbswidth.c ++++ b/lib/mbswidth.c +@@ -90,6 +90,9 @@ mbsnwidth (const char *string, size_t nbytes, int flags) + p++; + width++; + break; ++ case '\0': ++ if (flags & MBSW_STOP_AT_NUL) ++ return width; + default: + /* If we have a multibyte sequence, scan it up to its end. */ + { +@@ -168,6 +171,9 @@ mbsnwidth (const char *string, size_t nbytes, int flags) + { + unsigned char c = (unsigned char) *p++; + ++ if (c == 0 && (flags & MBSW_STOP_AT_NUL)) ++ return width; ++ + if (isprint (c)) + { + if (width == INT_MAX) +diff --git a/lib/mbswidth.h b/lib/mbswidth.h +index e9c0b03..d7207c5 100644 +--- a/lib/mbswidth.h ++++ b/lib/mbswidth.h +@@ -45,6 +45,9 @@ extern "C" { + control characters and 1 otherwise. */ + #define MBSW_REJECT_UNPRINTABLE 2 + ++/* If this bit is set \0 is treated as the end of string. ++ Otherwise it's treated as a normal one column width character. */ ++#define MBSW_STOP_AT_NUL 4 + + /* Returns the number of screen columns needed for STRING. */ + #define mbswidth gnu_mbswidth /* avoid clash with UnixWare 7.1.1 function */ +diff --git a/modules/argp b/modules/argp +index 125046a..6f14d10 100644 +--- a/modules/argp ++++ b/modules/argp +@@ -40,6 +40,7 @@ stdalign + strerror + memchr + memmove ++mbswidth + + configure.ac: + gl_ARGP +diff --git a/modules/argp-tests b/modules/argp-tests +index 8f92a4d..0463927 100644 +--- a/modules/argp-tests ++++ b/modules/argp-tests +@@ -1,11 +1,13 @@ + Files: + tests/test-argp.c + tests/test-argp-2.sh ++tests/test-argp-2-utf.sh + + Depends-on: + progname + + Makefile.am: + TESTS += test-argp test-argp-2.sh +-check_PROGRAMS += test-argp ++TESTS += test-argp test-argp-2.sh test-argp-2-utf.sh ++check_PROGRAMS += test-argp test-argp-utf8 + test_argp_LDADD = $(LDADD) @LIBINTL@ diff --git a/grub-core/gnulib-no-abort.diff b/grub-core/gnulib-no-abort.diff new file mode 100644 index 000000000..8377338f7 --- /dev/null +++ b/grub-core/gnulib-no-abort.diff @@ -0,0 +1,30 @@ +=== modified file 'grub-core/gnulib/regcomp.c' +--- grub-core/gnulib/regcomp.c 2010-09-20 10:35:33 +0000 ++++ grub-core/gnulib/regcomp.c 2012-03-10 11:31:42 +0000 +@@ -549,13 +549,9 @@ regerror (int errcode, const regex_t *_R + if (BE (errcode < 0 + || errcode >= (int) (sizeof (__re_error_msgid_idx) + / sizeof (__re_error_msgid_idx[0])), 0)) +- /* Only error codes returned by the rest of the code should be passed +- to this routine. If we are given anything else, or if other regex +- code generates an invalid error code, then the program has a bug. +- Dump core so we can fix it. */ +- abort (); +- +- msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); ++ msg = gettext ("unknown regexp error"); ++ else ++ msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); + + msg_size = strlen (msg) + 1; /* Includes the null. */ + +@@ -1119,7 +1119,7 @@ + } + break; + default: +- abort (); ++ break; + } + + if (mb_chars || has_period) + diff --git a/grub-core/gnulib-no-gets.diff b/grub-core/gnulib-no-gets.diff new file mode 100644 index 000000000..1a9487e84 --- /dev/null +++ b/grub-core/gnulib-no-gets.diff @@ -0,0 +1,10 @@ +--- /tmp/x.diff 2013-04-11 16:51:42.777873536 +0200 ++++ grub-core/gnulib/stdio.in.h 2013-04-11 16:51:49.917873298 +0200 +@@ -700,7 +700,6 @@ + removed it. */ + #undef gets + #if HAVE_RAW_DECL_GETS +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); + #endif + + diff --git a/grub-core/gnulib/Makefile.am b/grub-core/gnulib/Makefile.am new file mode 100644 index 000000000..3444397fe --- /dev/null +++ b/grub-core/gnulib/Makefile.am @@ -0,0 +1,1747 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see . +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=grub-core/gnulib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files argp error fnmatch getdelim getline gettext progname regex + +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects + +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = +noinst_LTLIBRARIES = +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +AM_CPPFLAGS = +AM_CFLAGS = + +noinst_LIBRARIES += libgnu.a + +libgnu_a_SOURCES = +libgnu_a_LIBADD = $(gl_LIBOBJS) +libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) +EXTRA_libgnu_a_SOURCES = + +## begin gnulib module alloca + + +libgnu_a_LIBADD += @ALLOCA@ +libgnu_a_DEPENDENCIES += @ALLOCA@ +EXTRA_DIST += alloca.c + +EXTRA_libgnu_a_SOURCES += alloca.c + +## end gnulib module alloca + +## begin gnulib module alloca-opt + +BUILT_SOURCES += $(ALLOCA_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_ALLOCA_H +alloca.h: alloca.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +else +alloca.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += alloca.h alloca.h-t + +EXTRA_DIST += alloca.in.h + +## end gnulib module alloca-opt + +## begin gnulib module argp + +libgnu_a_SOURCES += argp.h argp-ba.c argp-eexst.c \ + argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \ + argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \ + argp-xinl.c + +## end gnulib module argp + +## begin gnulib module btowc + + +EXTRA_DIST += btowc.c + +EXTRA_libgnu_a_SOURCES += btowc.c + +## end gnulib module btowc + +## begin gnulib module configmake + +# Listed in the same order as the GNU makefile conventions, and +# provided by autoconf 2.59c+. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + $(AM_V_GEN)rm -f $@-t && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t && \ + mv -f $@-t $@ + +BUILT_SOURCES += configmake.h +CLEANFILES += configmake.h configmake.h-t + +## end gnulib module configmake + +## begin gnulib module dirname-lgpl + +libgnu_a_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c + +EXTRA_DIST += dirname.h + +## end gnulib module dirname-lgpl + +## begin gnulib module dosname + + +EXTRA_DIST += dosname.h + +## end gnulib module dosname + +## begin gnulib module errno + +BUILT_SOURCES += $(ERRNO_H) + +# We need the following in order to create when the system +# doesn't have one that is POSIX compliant. +if GL_GENERATE_ERRNO_H +errno.h: errno.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +errno.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += errno.h errno.h-t + +EXTRA_DIST += errno.in.h + +## end gnulib module errno + +## begin gnulib module error + + +EXTRA_DIST += error.c error.h + +EXTRA_libgnu_a_SOURCES += error.c + +## end gnulib module error + +## begin gnulib module float + +BUILT_SOURCES += $(FLOAT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_FLOAT_H +float.h: float.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +float.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += float.h float.h-t + +EXTRA_DIST += float.c float.in.h itold.c + +EXTRA_libgnu_a_SOURCES += float.c itold.c + +## end gnulib module float + +## begin gnulib module fnmatch + +BUILT_SOURCES += $(FNMATCH_H) + +# We need the following in order to create when the system +# doesn't have one that supports the required API. +if GL_GENERATE_FNMATCH_H +fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/fnmatch.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +else +fnmatch.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t + +EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c + +EXTRA_libgnu_a_SOURCES += fnmatch.c fnmatch_loop.c + +## end gnulib module fnmatch + +## begin gnulib module getdelim + + +EXTRA_DIST += getdelim.c + +EXTRA_libgnu_a_SOURCES += getdelim.c + +## end gnulib module getdelim + +## begin gnulib module getline + + +EXTRA_DIST += getline.c + +EXTRA_libgnu_a_SOURCES += getline.c + +## end gnulib module getline + +## begin gnulib module getopt-posix + +BUILT_SOURCES += $(GETOPT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/getopt.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +MOSTLYCLEANFILES += getopt.h getopt.h-t + +EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h + +EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c + +## end gnulib module getopt-posix + +## begin gnulib module gettext + +# This is for those projects which use "gettextize --intl" to put a source-code +# copy of libintl into their package. In such projects, every Makefile.am needs +# -I$(top_builddir)/intl, so that can be found in this directory. +# For the Makefile.ams in other directories it is the maintainer's +# responsibility; for the one from gnulib we do it here. +# This option has no effect when the user disables NLS (because then the intl +# directory contains no libintl.h file) or when the project does not use +# "gettextize --intl". +AM_CPPFLAGS += -I$(top_builddir)/intl + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module gettext + +## begin gnulib module gettext-h + +libgnu_a_SOURCES += gettext.h + +## end gnulib module gettext-h + +## begin gnulib module havelib + + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module havelib + +## begin gnulib module intprops + + +EXTRA_DIST += intprops.h + +## end gnulib module intprops + +## begin gnulib module langinfo + +BUILT_SOURCES += langinfo.h + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ + -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ + -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ + -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ + -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ + -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ + -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ + -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/langinfo.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += langinfo.h langinfo.h-t + +EXTRA_DIST += langinfo.in.h + +## end gnulib module langinfo + +## begin gnulib module localcharset + +libgnu_a_SOURCES += localcharset.h localcharset.c + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed + +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp +install-exec-local: install-exec-localcharset +install-exec-localcharset: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: uninstall-localcharset +uninstall-localcharset: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + $(AM_V_GEN)rm -f t-$@ $@ && \ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ + mv t-$@ $@ + +SUFFIXES += .sed .sin +.sin.sed: + $(AM_V_GEN)rm -f t-$@ $@ && \ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ + mv t-$@ $@ + +CLEANFILES += charset.alias ref-add.sed ref-del.sed + +EXTRA_DIST += config.charset ref-add.sin ref-del.sin + +## end gnulib module localcharset + +## begin gnulib module locale + +BUILT_SOURCES += locale.h + +# We need the following in order to create when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ + -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ + -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ + -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ + -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ + -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ + -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ + -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ + -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/locale.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += locale.h locale.h-t + +EXTRA_DIST += locale.in.h + +## end gnulib module locale + +## begin gnulib module localeconv + + +EXTRA_DIST += localeconv.c + +EXTRA_libgnu_a_SOURCES += localeconv.c + +## end gnulib module localeconv + +## begin gnulib module malloc-gnu + + +EXTRA_DIST += malloc.c + +EXTRA_libgnu_a_SOURCES += malloc.c + +## end gnulib module malloc-gnu + +## begin gnulib module malloc-posix + + +EXTRA_DIST += malloc.c + +EXTRA_libgnu_a_SOURCES += malloc.c + +## end gnulib module malloc-posix + +## begin gnulib module mbrtowc + + +EXTRA_DIST += mbrtowc.c + +EXTRA_libgnu_a_SOURCES += mbrtowc.c + +## end gnulib module mbrtowc + +## begin gnulib module mbsinit + + +EXTRA_DIST += mbsinit.c + +EXTRA_libgnu_a_SOURCES += mbsinit.c + +## end gnulib module mbsinit + +## begin gnulib module mbsrtowcs + + +EXTRA_DIST += mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c + +EXTRA_libgnu_a_SOURCES += mbsrtowcs-state.c mbsrtowcs.c + +## end gnulib module mbsrtowcs + +## begin gnulib module mbswidth + +libgnu_a_SOURCES += mbswidth.h mbswidth.c + +## end gnulib module mbswidth + +## begin gnulib module mbtowc + + +EXTRA_DIST += mbtowc-impl.h mbtowc.c + +EXTRA_libgnu_a_SOURCES += mbtowc.c + +## end gnulib module mbtowc + +## begin gnulib module memchr + + +EXTRA_DIST += memchr.c memchr.valgrind + +EXTRA_libgnu_a_SOURCES += memchr.c + +## end gnulib module memchr + +## begin gnulib module mempcpy + + +EXTRA_DIST += mempcpy.c + +EXTRA_libgnu_a_SOURCES += mempcpy.c + +## end gnulib module mempcpy + +## begin gnulib module msvc-inval + + +EXTRA_DIST += msvc-inval.c msvc-inval.h + +EXTRA_libgnu_a_SOURCES += msvc-inval.c + +## end gnulib module msvc-inval + +## begin gnulib module msvc-nothrow + + +EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h + +EXTRA_libgnu_a_SOURCES += msvc-nothrow.c + +## end gnulib module msvc-nothrow + +## begin gnulib module nl_langinfo + + +EXTRA_DIST += nl_langinfo.c + +EXTRA_libgnu_a_SOURCES += nl_langinfo.c + +## end gnulib module nl_langinfo + +## begin gnulib module progname + +libgnu_a_SOURCES += progname.h progname.c + +## end gnulib module progname + +## begin gnulib module rawmemchr + + +EXTRA_DIST += rawmemchr.c rawmemchr.valgrind + +EXTRA_libgnu_a_SOURCES += rawmemchr.c + +## end gnulib module rawmemchr + +## begin gnulib module realloc-posix + + +EXTRA_DIST += realloc.c + +EXTRA_libgnu_a_SOURCES += realloc.c + +## end gnulib module realloc-posix + +## begin gnulib module regex + + +EXTRA_DIST += regcomp.c regex.c regex.h regex_internal.c regex_internal.h regexec.c + +EXTRA_libgnu_a_SOURCES += regcomp.c regex.c regex_internal.c regexec.c + +## end gnulib module regex + +## begin gnulib module size_max + +libgnu_a_SOURCES += size_max.h + +## end gnulib module size_max + +## begin gnulib module sleep + + +EXTRA_DIST += sleep.c + +EXTRA_libgnu_a_SOURCES += sleep.c + +## end gnulib module sleep + +## begin gnulib module snippet/_Noreturn + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all Makefile.am that +# need it. This is ensured by the applicability 'all' defined above. + +_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h + +EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h + +## end gnulib module snippet/_Noreturn + +## begin gnulib module snippet/arg-nonnull + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += arg-nonnull.h +# The arg-nonnull.h that gets inserted into generated .h files is the same as +# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut +# off. +arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/GL_ARG_NONNULL/,$$p' \ + < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t + +ARG_NONNULL_H=arg-nonnull.h + +EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h + +## end gnulib module snippet/arg-nonnull + +## begin gnulib module snippet/c++defs + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +BUILT_SOURCES += c++defs.h +# The c++defs.h that gets inserted into generated .h files is the same as +# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. +c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/_GL_CXXDEFS/,$$p' \ + < $(top_srcdir)/build-aux/snippet/c++defs.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += c++defs.h c++defs.h-t + +CXXDEFS_H=c++defs.h + +EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h + +## end gnulib module snippet/c++defs + +## begin gnulib module snippet/warn-on-use + +BUILT_SOURCES += warn-on-use.h +# The warn-on-use.h that gets inserted into generated .h files is the same as +# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut +# off. +warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/^.ifndef/,$$p' \ + < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ + > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t + +WARN_ON_USE_H=warn-on-use.h + +EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h + +## end gnulib module snippet/warn-on-use + +## begin gnulib module stdalign + +BUILT_SOURCES += $(STDALIGN_H) + +# We need the following in order to create when the system +# doesn't have one that works. +if GL_GENERATE_STDALIGN_H +stdalign.h: stdalign.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/stdalign.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdalign.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdalign.h stdalign.h-t + +EXTRA_DIST += stdalign.in.h + +## end gnulib module stdalign + +## begin gnulib module stdbool + +BUILT_SOURCES += $(STDBOOL_H) + +# We need the following in order to create when the system +# doesn't have one that works. +if GL_GENERATE_STDBOOL_H +stdbool.h: stdbool.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdbool.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdbool.h stdbool.h-t + +EXTRA_DIST += stdbool.in.h + +## end gnulib module stdbool + +## begin gnulib module stddef + +BUILT_SOURCES += $(STDDEF_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDDEF_H +stddef.h: stddef.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ + -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ + -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ + < $(srcdir)/stddef.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stddef.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stddef.h stddef.h-t + +EXTRA_DIST += stddef.in.h + +## end gnulib module stddef + +## begin gnulib module stdint + +BUILT_SOURCES += $(STDINT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDINT_H +stdint.h: stdint.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdint.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdint.h stdint.h-t + +EXTRA_DIST += stdint.in.h + +## end gnulib module stdint + +## begin gnulib module stdio + +BUILT_SOURCES += stdio.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ + -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ + -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ + -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ + -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ + -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ + -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ + -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ + -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ + -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ + -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ + -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ + -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ + -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ + -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ + -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ + -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ + -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ + -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ + -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ + -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ + -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ + -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ + -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ + -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ + -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ + -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ + -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ + -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ + -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ + -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ + -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ + -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ + -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ + -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ + -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ + -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ + -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ + -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ + -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ + -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ + < $(srcdir)/stdio.in.h | \ + sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ + -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ + -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ + -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ + -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ + -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ + -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ + -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ + -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += stdio.h stdio.h-t + +EXTRA_DIST += stdio.in.h + +## end gnulib module stdio + +## begin gnulib module stdlib + +BUILT_SOURCES += stdlib.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ + $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ + -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ + -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ + -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ + -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ + -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ + -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ + -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ + -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ + -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ + -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ + -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ + -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ + -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ + -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ + -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ + -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ + -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ + -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ + -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ + -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ + -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ + -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ + -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ + -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ + -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ + -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ + -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ + < $(srcdir)/stdlib.in.h | \ + sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ + -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ + -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ + -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ + -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ + -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ + -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ + -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ + -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ + -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ + -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ + -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ + -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ + -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ + -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _Noreturn/r $(_NORETURN_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += stdlib.h stdlib.h-t + +EXTRA_DIST += stdlib.in.h + +## end gnulib module stdlib + +## begin gnulib module strcase + + +EXTRA_DIST += strcasecmp.c strncasecmp.c + +EXTRA_libgnu_a_SOURCES += strcasecmp.c strncasecmp.c + +## end gnulib module strcase + +## begin gnulib module strchrnul + + +EXTRA_DIST += strchrnul.c strchrnul.valgrind + +EXTRA_libgnu_a_SOURCES += strchrnul.c + +## end gnulib module strchrnul + +## begin gnulib module streq + + +EXTRA_DIST += streq.h + +## end gnulib module streq + +## begin gnulib module strerror + + +EXTRA_DIST += strerror.c + +EXTRA_libgnu_a_SOURCES += strerror.c + +## end gnulib module strerror + +## begin gnulib module strerror-override + + +EXTRA_DIST += strerror-override.c strerror-override.h + +EXTRA_libgnu_a_SOURCES += strerror-override.c + +## end gnulib module strerror-override + +## begin gnulib module string + +BUILT_SOURCES += string.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ + -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ + -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ + -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ + -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ + -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ + -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ + -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ + -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ + -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ + -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ + -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ + -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ + -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ + -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ + -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ + -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ + -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ + -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ + -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ + -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ + -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ + -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ + -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ + -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ + -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ + -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ + -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ + -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ + -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ + -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ + -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ + -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ + -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ + -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ + -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ + < $(srcdir)/string.in.h | \ + sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ + -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ + -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ + -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ + -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + < $(srcdir)/string.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += string.h string.h-t + +EXTRA_DIST += string.in.h + +## end gnulib module string + +## begin gnulib module strings + +BUILT_SOURCES += strings.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's|@''GNULIB_FFS''@|$(GNULIB_FFS)|g' \ + -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/strings.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += strings.h strings.h-t + +EXTRA_DIST += strings.in.h + +## end gnulib module strings + +## begin gnulib module strndup + + +EXTRA_DIST += strndup.c + +EXTRA_libgnu_a_SOURCES += strndup.c + +## end gnulib module strndup + +## begin gnulib module strnlen + + +EXTRA_DIST += strnlen.c + +EXTRA_libgnu_a_SOURCES += strnlen.c + +## end gnulib module strnlen + +## begin gnulib module strnlen1 + +libgnu_a_SOURCES += strnlen1.h strnlen1.c + +## end gnulib module strnlen1 + +## begin gnulib module sys_types + +BUILT_SOURCES += sys/types.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +sys/types.h: sys_types.in.h $(top_builddir)/config.status + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + < $(srcdir)/sys_types.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += sys/types.h sys/types.h-t + +EXTRA_DIST += sys_types.in.h + +## end gnulib module sys_types + +## begin gnulib module sysexits + +BUILT_SOURCES += $(SYSEXITS_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_SYSEXITS_H +sysexits.h: sysexits.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ + < $(srcdir)/sysexits.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +else +sysexits.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += sysexits.h sysexits.h-t + +EXTRA_DIST += sysexits.in.h + +## end gnulib module sysexits + +## begin gnulib module unistd + +BUILT_SOURCES += unistd.h +libgnu_a_SOURCES += unistd.c + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ + -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ + -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ + -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ + -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ + -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ + -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ + -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ + -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ + -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ + -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ + -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ + -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ + -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ + -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ + -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ + -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ + -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ + -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ + -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ + -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ + -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ + -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ + -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ + -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ + -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ + -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ + -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ + -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ + -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ + -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ + -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ + -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ + -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ + -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ + -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ + -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ + -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ + -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ + -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ + -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ + -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ + < $(srcdir)/unistd.in.h | \ + sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ + -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ + -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ + -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ + -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ + -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ + -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ + -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ + -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ + -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ + -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ + -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ + -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ + -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ + -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + | \ + sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ + -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ + -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ + -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ + -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ + -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ + -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ + -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ + -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ + -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ + -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ + -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ + -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ + -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += unistd.h unistd.h-t + +EXTRA_DIST += unistd.in.h + +## end gnulib module unistd + +## begin gnulib module unitypes + +BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H) + +unitypes.h: unitypes.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/unitypes.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +MOSTLYCLEANFILES += unitypes.h unitypes.h-t + +EXTRA_DIST += unitypes.in.h + +## end gnulib module unitypes + +## begin gnulib module uniwidth/base + +BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H) + +uniwidth.h: uniwidth.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/uniwidth.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t + +EXTRA_DIST += localcharset.h uniwidth.in.h + +## end gnulib module uniwidth/base + +## begin gnulib module uniwidth/width + +if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH +libgnu_a_SOURCES += uniwidth/width.c +endif + +EXTRA_DIST += uniwidth/cjk.h + +## end gnulib module uniwidth/width + +## begin gnulib module vasnprintf + + +EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h + +EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c + +## end gnulib module vasnprintf + +## begin gnulib module verify + + +EXTRA_DIST += verify.h + +## end gnulib module verify + +## begin gnulib module vsnprintf + + +EXTRA_DIST += vsnprintf.c + +EXTRA_libgnu_a_SOURCES += vsnprintf.c + +## end gnulib module vsnprintf + +## begin gnulib module wchar + +BUILT_SOURCES += wchar.h + +# We need the following in order to create when the system +# version does not work standalone. +wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ + -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ + -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ + -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ + -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ + -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ + -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ + -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ + -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ + -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ + -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ + -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ + -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ + -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ + -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ + -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ + -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ + -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ + -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ + -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ + -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ + -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ + -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ + -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ + -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ + -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ + -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ + -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ + -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ + -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ + -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ + -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ + -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ + -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ + -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ + -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ + -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ + -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + < $(srcdir)/wchar.in.h | \ + sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ + -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ + -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ + -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ + -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ + -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ + -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ + -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ + -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ + -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ + -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ + -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ + -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ + -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ + -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ + -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ + -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ + -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ + -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ + -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ + -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ + -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ + -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ + -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ + -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ + -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ + -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + | \ + sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += wchar.h wchar.h-t + +EXTRA_DIST += wchar.in.h + +## end gnulib module wchar + +## begin gnulib module wcrtomb + + +EXTRA_DIST += wcrtomb.c + +EXTRA_libgnu_a_SOURCES += wcrtomb.c + +## end gnulib module wcrtomb + +## begin gnulib module wctype-h + +BUILT_SOURCES += wctype.h +libgnu_a_SOURCES += wctype-h.c + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ + -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ + -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ + -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ + -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ + -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ + -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += wctype.h wctype.h-t + +EXTRA_DIST += wctype.in.h + +## end gnulib module wctype-h + +## begin gnulib module wcwidth + + +EXTRA_DIST += wcwidth.c + +EXTRA_libgnu_a_SOURCES += wcwidth.c + +## end gnulib module wcwidth + +## begin gnulib module xsize + +libgnu_a_SOURCES += xsize.h xsize.c + +## end gnulib module xsize + + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : diff --git a/grub-core/gnulib/Makefile.in b/grub-core/gnulib/Makefile.in new file mode 100644 index 000000000..91485c740 --- /dev/null +++ b/grub-core/gnulib/Makefile.in @@ -0,0 +1,2674 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see . +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=grub-core/gnulib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files argp error fnmatch getdelim getline gettext progname regex + + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_1 = uniwidth/width.c +subdir = grub-core/gnulib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argp.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/errno_h.m4 \ + $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \ + $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/langinfo_h.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libunistring-base.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/mbtowc.m4 \ + $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ + $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/sleep.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdalign.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strchrnul.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sysexits.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/warn-on-use.m4 \ + $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ + $(top_srcdir)/m4/wcwidth.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config-util.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +libgnu_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am__libgnu_a_SOURCES_DIST = argp.h argp-ba.c argp-eexst.c \ + argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \ + argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \ + argp-xinl.c dirname-lgpl.c basename-lgpl.c stripslash.c \ + gettext.h localcharset.h localcharset.c mbswidth.h mbswidth.c \ + progname.h progname.c size_max.h strnlen1.h strnlen1.c \ + unistd.c uniwidth/width.c wctype-h.c xsize.h xsize.c +am__dirstamp = $(am__leading_dot)dirstamp +@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_1 = uniwidth/width.$(OBJEXT) +am_libgnu_a_OBJECTS = argp-ba.$(OBJEXT) argp-eexst.$(OBJEXT) \ + argp-fmtstream.$(OBJEXT) argp-fs-xinl.$(OBJEXT) \ + argp-help.$(OBJEXT) argp-parse.$(OBJEXT) argp-pin.$(OBJEXT) \ + argp-pv.$(OBJEXT) argp-pvh.$(OBJEXT) argp-xinl.$(OBJEXT) \ + dirname-lgpl.$(OBJEXT) basename-lgpl.$(OBJEXT) \ + stripslash.$(OBJEXT) localcharset.$(OBJEXT) mbswidth.$(OBJEXT) \ + progname.$(OBJEXT) strnlen1.$(OBJEXT) unistd.$(OBJEXT) \ + $(am__objects_1) wctype-h.$(OBJEXT) xsize.$(OBJEXT) +libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS) +LTLIBRARIES = $(noinst_LTLIBRARIES) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES) +DIST_SOURCES = $(am__libgnu_a_SOURCES_DIST) $(EXTRA_libgnu_a_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp alloca.c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +pkglibexecdir = @pkglibexecdir@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +BOOT_TIME_STATS = @BOOT_TIME_STATS@ +BSS_START_SYMBOL = @BSS_START_SYMBOL@ +BUILD_CC = @BUILD_CC@ +BUILD_CFLAGS = @BUILD_CFLAGS@ +BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_FREETYPE = @BUILD_FREETYPE@ +BUILD_LDFLAGS = @BUILD_LDFLAGS@ +BUILD_LIBM = @BUILD_LIBM@ +BUILD_SIZEOF_LONG = @BUILD_SIZEOF_LONG@ +BUILD_SIZEOF_VOID_P = @BUILD_SIZEOF_VOID_P@ +BUILD_WORDS_BIGENDIAN = @BUILD_WORDS_BIGENDIAN@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CMP = @CMP@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISK_CACHE_STATS = @DISK_CACHE_STATS@ +DJVU_FONT_SOURCE = @DJVU_FONT_SOURCE@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EFIEMU64_LINK_FORMAT = @EFIEMU64_LINK_FORMAT@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +END_SYMBOL = @END_SYMBOL@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FLOAT_H = @FLOAT_H@ +FNMATCH_H = @FNMATCH_H@ +FONT_SOURCE = @FONT_SOURCE@ +FREETYPE = @FREETYPE@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GRUB_BOOT_MACHINE_LINK_ADDR = @GRUB_BOOT_MACHINE_LINK_ADDR@ +GRUB_PLATFORM = @GRUB_PLATFORM@ +GRUB_TARGET_CPU = @GRUB_TARGET_CPU@ +HAVE_ASM_USCORE = @HAVE_ASM_USCORE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FONT_SOURCE = @HAVE_FONT_SOURCE@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HOST_CC = @HOST_CC@ +HOST_CCASFLAGS = @HOST_CCASFLAGS@ +HOST_CFLAGS = @HOST_CFLAGS@ +HOST_CPPFLAGS = @HOST_CPPFLAGS@ +HOST_LDFLAGS = @HOST_LDFLAGS@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBDEVMAPPER = @LIBDEVMAPPER@ +LIBGEOM = @LIBGEOM@ +LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ +LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBLZMA = @LIBLZMA@ +LIBNVPAIR = @LIBNVPAIR@ +LIBOBJS = @LIBOBJS@ +LIBPCIACCESS = @LIBPCIACCESS@ +LIBS = @LIBS@ +LIBSDL = @LIBSDL@ +LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ +LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ +LIBUTIL = @LIBUTIL@ +LIBZFS = @LIBZFS@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDALIGN_H = @STDALIGN_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYSEXITS_H = @SYSEXITS_H@ +TARGET_APPLE_LINKER = @TARGET_APPLE_LINKER@ +TARGET_CC = @TARGET_CC@ +TARGET_CCAS = @TARGET_CCAS@ +TARGET_CCASFLAGS = @TARGET_CCASFLAGS@ +TARGET_CC_VERSION = @TARGET_CC_VERSION@ +TARGET_CFLAGS = @TARGET_CFLAGS@ +TARGET_CPP = @TARGET_CPP@ +TARGET_CPPFLAGS = @TARGET_CPPFLAGS@ +TARGET_DECOMPRESSOR_LINK_ADDR = @TARGET_DECOMPRESSOR_LINK_ADDR@ +TARGET_IMG_BASE_LDOPT = @TARGET_IMG_BASE_LDOPT@ +TARGET_IMG_CFLAGS = @TARGET_IMG_CFLAGS@ +TARGET_IMG_LDFLAGS = @TARGET_IMG_LDFLAGS@ +TARGET_LDFLAGS = @TARGET_LDFLAGS@ +TARGET_LDFLAGS_OLDMAGIC = @TARGET_LDFLAGS_OLDMAGIC@ +TARGET_LINK_ADDR = @TARGET_LINK_ADDR@ +TARGET_MODULE_FORMAT = @TARGET_MODULE_FORMAT@ +TARGET_NM = @TARGET_NM@ +TARGET_NMFLAGS_DEFINED_ONLY = @TARGET_NMFLAGS_DEFINED_ONLY@ +TARGET_NMFLAGS_MINUS_P = @TARGET_NMFLAGS_MINUS_P@ +TARGET_OBJ2ELF = @TARGET_OBJ2ELF@ +TARGET_OBJCONV = @TARGET_OBJCONV@ +TARGET_OBJCOPY = @TARGET_OBJCOPY@ +TARGET_RANLIB = @TARGET_RANLIB@ +TARGET_STRIP = @TARGET_STRIP@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_FREETYPE = @ac_ct_FREETYPE@ +ac_ct_TARGET_CC = @ac_ct_TARGET_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +bootdirname = @bootdirname@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_freetype_cflags = @build_freetype_cflags@ +build_freetype_libs = @build_freetype_libs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_efiemu = @enable_efiemu@ +enable_grub_emu_pci = @enable_grub_emu_pci@ +enable_grub_emu_sdl = @enable_grub_emu_sdl@ +enable_grub_mkfont = @enable_grub_mkfont@ +enable_grub_mount = @enable_grub_mount@ +exec_prefix = @exec_prefix@ +freetype_cflags = @freetype_cflags@ +freetype_libs = @freetype_libs@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +grub_bios_setup = @grub_bios_setup@ +grub_editenv = @grub_editenv@ +grub_file = @grub_file@ +grub_glue_efi = @grub_glue_efi@ +grub_install = @grub_install@ +grub_mkconfig = @grub_mkconfig@ +grub_mkfont = @grub_mkfont@ +grub_mkimage = @grub_mkimage@ +grub_mklayout = @grub_mklayout@ +grub_mkpasswd_pbkdf2 = @grub_mkpasswd_pbkdf2@ +grub_mkrelpath = @grub_mkrelpath@ +grub_mkrescue = @grub_mkrescue@ +grub_probe = @grub_probe@ +grub_reboot = @grub_reboot@ +grub_render_label = @grub_render_label@ +grub_script_check = @grub_script_check@ +grub_set_default = @grub_set_default@ +grub_sparc64_setup = @grub_sparc64_setup@ +grubdirname = @grubdirname@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_kernel = @host_kernel@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +platform = @platform@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = libgnu.a +noinst_LTLIBRARIES = +EXTRA_DIST = alloca.c alloca.in.h btowc.c dirname.h dosname.h \ + errno.in.h error.c error.h float.c float.in.h itold.c \ + fnmatch.c fnmatch.in.h fnmatch_loop.c getdelim.c getline.c \ + getopt.c getopt.in.h getopt1.c getopt_int.h \ + $(top_srcdir)/build-aux/config.rpath \ + $(top_srcdir)/build-aux/config.rpath intprops.h langinfo.in.h \ + config.charset ref-add.sin ref-del.sin locale.in.h \ + localeconv.c malloc.c malloc.c mbrtowc.c mbsinit.c \ + mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c mbtowc-impl.h \ + mbtowc.c memchr.c memchr.valgrind mempcpy.c msvc-inval.c \ + msvc-inval.h msvc-nothrow.c msvc-nothrow.h nl_langinfo.c \ + rawmemchr.c rawmemchr.valgrind realloc.c regcomp.c regex.c \ + regex.h regex_internal.c regex_internal.h regexec.c sleep.c \ + $(top_srcdir)/build-aux/snippet/_Noreturn.h \ + $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ + $(top_srcdir)/build-aux/snippet/c++defs.h \ + $(top_srcdir)/build-aux/snippet/warn-on-use.h stdalign.in.h \ + stdbool.in.h stddef.in.h stdint.in.h stdio.in.h stdlib.in.h \ + strcasecmp.c strncasecmp.c strchrnul.c strchrnul.valgrind \ + streq.h strerror.c strerror-override.c strerror-override.h \ + string.in.h strings.in.h strndup.c strnlen.c sys_types.in.h \ + sysexits.in.h unistd.in.h unitypes.in.h localcharset.h \ + uniwidth.in.h uniwidth/cjk.h asnprintf.c float+.h \ + printf-args.c printf-args.h printf-parse.c printf-parse.h \ + vasnprintf.c vasnprintf.h verify.h vsnprintf.c wchar.in.h \ + wcrtomb.c wctype.in.h wcwidth.c + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. + +# The BUILT_SOURCES created by this Makefile snippet are not used via #include +# statements but through direct file reference. Therefore this snippet must be +# present in all Makefile.am that need it. This is ensured by the applicability +# 'all' defined above. +BUILT_SOURCES = $(ALLOCA_H) configmake.h $(ERRNO_H) $(FLOAT_H) \ + $(FNMATCH_H) $(GETOPT_H) langinfo.h locale.h arg-nonnull.h \ + c++defs.h warn-on-use.h $(STDALIGN_H) $(STDBOOL_H) $(STDDEF_H) \ + $(STDINT_H) stdio.h stdlib.h string.h strings.h sys/types.h \ + $(SYSEXITS_H) unistd.h $(LIBUNISTRING_UNITYPES_H) \ + $(LIBUNISTRING_UNIWIDTH_H) wchar.h wctype.h +SUFFIXES = .sed .sin +MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ + errno.h-t float.h float.h-t fnmatch.h fnmatch.h-t getopt.h \ + getopt.h-t langinfo.h langinfo.h-t locale.h locale.h-t \ + arg-nonnull.h arg-nonnull.h-t c++defs.h c++defs.h-t \ + warn-on-use.h warn-on-use.h-t stdalign.h stdalign.h-t \ + stdbool.h stdbool.h-t stddef.h stddef.h-t stdint.h stdint.h-t \ + stdio.h stdio.h-t stdlib.h stdlib.h-t string.h string.h-t \ + strings.h strings.h-t sys/types.h sys/types.h-t sysexits.h \ + sysexits.h-t unistd.h unistd.h-t unitypes.h unitypes.h-t \ + uniwidth.h uniwidth.h-t wchar.h wchar.h-t wctype.h wctype.h-t +MOSTLYCLEANDIRS = +CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \ + ref-del.sed +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +# This is for those projects which use "gettextize --intl" to put a source-code +# copy of libintl into their package. In such projects, every Makefile.am needs +# -I$(top_builddir)/intl, so that can be found in this directory. +# For the Makefile.ams in other directories it is the maintainer's +# responsibility; for the one from gnulib we do it here. +# This option has no effect when the user disables NLS (because then the intl +# directory contains no libintl.h file) or when the project does not use +# "gettextize --intl". +AM_CPPFLAGS = -I$(top_builddir)/intl +AM_CFLAGS = +libgnu_a_SOURCES = argp.h argp-ba.c argp-eexst.c argp-fmtstream.c \ + argp-fmtstream.h argp-fs-xinl.c argp-help.c argp-namefrob.h \ + argp-parse.c argp-pin.c argp-pv.c argp-pvh.c argp-xinl.c \ + dirname-lgpl.c basename-lgpl.c stripslash.c gettext.h \ + localcharset.h localcharset.c mbswidth.h mbswidth.c progname.h \ + progname.c size_max.h strnlen1.h strnlen1.c unistd.c \ + $(am__append_1) wctype-h.c xsize.h xsize.c +libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@ +libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@ +EXTRA_libgnu_a_SOURCES = alloca.c btowc.c error.c float.c itold.c \ + fnmatch.c fnmatch_loop.c getdelim.c getline.c getopt.c \ + getopt1.c localeconv.c malloc.c malloc.c mbrtowc.c mbsinit.c \ + mbsrtowcs-state.c mbsrtowcs.c mbtowc.c memchr.c mempcpy.c \ + msvc-inval.c msvc-nothrow.c nl_langinfo.c rawmemchr.c \ + realloc.c regcomp.c regex.c regex_internal.c regexec.c sleep.c \ + strcasecmp.c strncasecmp.c strchrnul.c strerror.c \ + strerror-override.c strndup.c strnlen.c asnprintf.c \ + printf-args.c printf-parse.c vasnprintf.c vsnprintf.c \ + wcrtomb.c wcwidth.c +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all Makefile.am that +# need it. This is ensured by the applicability 'all' defined above. +_NORETURN_H = $(top_srcdir)/build-aux/snippet/_Noreturn.h +ARG_NONNULL_H = arg-nonnull.h +CXXDEFS_H = c++defs.h +WARN_ON_USE_H = warn-on-use.h +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .sed .sin .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits grub-core/gnulib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits grub-core/gnulib/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +uniwidth/$(am__dirstamp): + @$(MKDIR_P) uniwidth + @: > uniwidth/$(am__dirstamp) +uniwidth/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uniwidth/$(DEPDIR) + @: > uniwidth/$(DEPDIR)/$(am__dirstamp) +uniwidth/width.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) + +libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) $(EXTRA_libgnu_a_DEPENDENCIES) + $(AM_V_at)-rm -f libgnu.a + $(AM_V_AR)$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD) + $(AM_V_at)$(RANLIB) libgnu.a + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f uniwidth/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-ba.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-eexst.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fmtstream.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fs-xinl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-help.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pvh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-xinl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch_loop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdelim.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localeconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs-state.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbswidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbtowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nl_langinfo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strncasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsnprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsize.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp) + -rm -f uniwidth/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) uniwidth/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-exec-local + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) uniwidth/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: $(am__recursive_targets) all check install install-am \ + install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ + check check-am clean clean-generic clean-noinstLIBRARIES \ + clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-local + +.PRECIOUS: Makefile + + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status +@GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_ALLOCA_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_ALLOCA_H_TRUE@ cat $(srcdir)/alloca.in.h; \ +@GL_GENERATE_ALLOCA_H_TRUE@ } > $@-t && \ +@GL_GENERATE_ALLOCA_H_TRUE@ mv -f $@-t $@ +@GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status +@GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ + +# Listed in the same order as the GNU makefile conventions, and +# provided by autoconf 2.59c+. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + $(AM_V_GEN)rm -f $@-t && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t && \ + mv -f $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that is POSIX compliant. +@GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status +@GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \ +@GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \ +@GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@ +@GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status +@GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status +@GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_FLOAT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_FLOAT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ < $(srcdir)/float.in.h; \ +@GL_GENERATE_FLOAT_H_TRUE@ } > $@-t && \ +@GL_GENERATE_FLOAT_H_TRUE@ mv $@-t $@ +@GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status +@GL_GENERATE_FLOAT_H_FALSE@ rm -f $@ + +# We need the following in order to create when the system +# doesn't have one that supports the required API. +@GL_GENERATE_FNMATCH_H_TRUE@fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) +@GL_GENERATE_FNMATCH_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_FNMATCH_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_FNMATCH_H_TRUE@ sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ +@GL_GENERATE_FNMATCH_H_TRUE@ < $(srcdir)/fnmatch.in.h; \ +@GL_GENERATE_FNMATCH_H_TRUE@ } > $@-t && \ +@GL_GENERATE_FNMATCH_H_TRUE@ mv -f $@-t $@ +@GL_GENERATE_FNMATCH_H_FALSE@fnmatch.h: $(top_builddir)/config.status +@GL_GENERATE_FNMATCH_H_FALSE@ rm -f $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/getopt.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ + -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ + -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ + -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ + -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ + -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ + -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ + -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/langinfo.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed +install-exec-local: install-exec-localcharset +install-exec-localcharset: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: uninstall-localcharset +uninstall-localcharset: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + $(AM_V_GEN)rm -f t-$@ $@ && \ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \ + mv t-$@ $@ +.sin.sed: + $(AM_V_GEN)rm -f t-$@ $@ && \ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \ + mv t-$@ $@ + +# We need the following in order to create when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ + -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ + -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ + -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ + -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ + -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ + -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ + -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ + -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/locale.in.h; \ + } > $@-t && \ + mv $@-t $@ +# The arg-nonnull.h that gets inserted into generated .h files is the same as +# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut +# off. +arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/GL_ARG_NONNULL/,$$p' \ + < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ + > $@-t && \ + mv $@-t $@ +# The c++defs.h that gets inserted into generated .h files is the same as +# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. +c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/_GL_CXXDEFS/,$$p' \ + < $(top_srcdir)/build-aux/snippet/c++defs.h \ + > $@-t && \ + mv $@-t $@ +# The warn-on-use.h that gets inserted into generated .h files is the same as +# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut +# off. +warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h + $(AM_V_GEN)rm -f $@-t $@ && \ + sed -n -e '/^.ifndef/,$$p' \ + < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ + > $@-t && \ + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works. +@GL_GENERATE_STDALIGN_H_TRUE@stdalign.h: stdalign.in.h $(top_builddir)/config.status +@GL_GENERATE_STDALIGN_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDALIGN_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_STDALIGN_H_TRUE@ cat $(srcdir)/stdalign.in.h; \ +@GL_GENERATE_STDALIGN_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDALIGN_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDALIGN_H_FALSE@stdalign.h: $(top_builddir)/config.status +@GL_GENERATE_STDALIGN_H_FALSE@ rm -f $@ + +# We need the following in order to create when the system +# doesn't have one that works. +@GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status +@GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ +@GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status +@GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status +@GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ +@GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status +@GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status +@GL_GENERATE_STDINT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDINT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_STDINT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \ +@GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status +@GL_GENERATE_STDINT_H_FALSE@ rm -f $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ + -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ + -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ + -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ + -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ + -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ + -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ + -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ + -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ + -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ + -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ + -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ + -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ + -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ + -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ + -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ + -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ + -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ + -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ + -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ + -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ + -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ + -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ + -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ + -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ + -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ + -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ + -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ + -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ + -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ + -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ + -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ + -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ + -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ + -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ + -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ + -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ + -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ + -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ + -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ + -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ + < $(srcdir)/stdio.in.h | \ + sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ + -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ + -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ + -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ + -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ + -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ + -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ + -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ + -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ + $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ + -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ + -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ + -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ + -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ + -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ + -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ + -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ + -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ + -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ + -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ + -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ + -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ + -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ + -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ + -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ + -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ + -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ + -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ + -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ + -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ + -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ + -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ + -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ + -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ + -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ + -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ + -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ + < $(srcdir)/stdlib.in.h | \ + sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ + -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ + -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ + -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ + -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ + -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ + -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ + -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ + -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ + -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ + -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ + -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ + -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ + -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ + -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _Noreturn/r $(_NORETURN_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ + -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ + -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ + -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ + -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ + -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ + -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ + -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ + -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ + -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ + -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ + -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ + -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ + -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ + -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ + -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ + -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ + -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ + -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ + -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ + -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ + -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ + -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ + -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ + -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ + -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ + -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ + -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ + -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ + -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ + -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ + -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ + -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ + -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ + -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ + -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ + < $(srcdir)/string.in.h | \ + sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ + -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ + -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ + -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ + -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + < $(srcdir)/string.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's|@''GNULIB_FFS''@|$(GNULIB_FFS)|g' \ + -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/strings.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +sys/types.h: sys_types.in.h $(top_builddir)/config.status + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + < $(srcdir)/sys_types.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_SYSEXITS_H_TRUE@sysexits.h: sysexits.in.h $(top_builddir)/config.status +@GL_GENERATE_SYSEXITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_SYSEXITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_SYSEXITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ +@GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ +@GL_GENERATE_SYSEXITS_H_TRUE@ < $(srcdir)/sysexits.in.h; \ +@GL_GENERATE_SYSEXITS_H_TRUE@ } > $@-t && \ +@GL_GENERATE_SYSEXITS_H_TRUE@ mv -f $@-t $@ +@GL_GENERATE_SYSEXITS_H_FALSE@sysexits.h: $(top_builddir)/config.status +@GL_GENERATE_SYSEXITS_H_FALSE@ rm -f $@ + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ + -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ + -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ + -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ + -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ + -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ + -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ + -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ + -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ + -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ + -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ + -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ + -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ + -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ + -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ + -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ + -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ + -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ + -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ + -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ + -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ + -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ + -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ + -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ + -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ + -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ + -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ + -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ + -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ + -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ + -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ + -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ + -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ + -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ + -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ + -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ + -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ + -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ + -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ + -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ + -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ + -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ + < $(srcdir)/unistd.in.h | \ + sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ + -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ + -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ + -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ + -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ + -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ + -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ + -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ + -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ + -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ + -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ + -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ + -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ + -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ + -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + | \ + sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ + -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ + -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ + -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ + -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ + -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ + -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ + -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ + -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ + -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ + -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ + -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ + -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ + -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +unitypes.h: unitypes.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/unitypes.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +uniwidth.h: uniwidth.in.h + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/uniwidth.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +# We need the following in order to create when the system +# version does not work standalone. +wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ + -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ + -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ + -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ + -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ + -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ + -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ + -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ + -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ + -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ + -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ + -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ + -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ + -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ + -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ + -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ + -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ + -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ + -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ + -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ + -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ + -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ + -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ + -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ + -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ + -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ + -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ + -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ + -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ + -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ + -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ + -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ + -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ + -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ + -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ + -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ + -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ + -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + < $(srcdir)/wchar.in.h | \ + sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ + -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ + -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ + -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ + -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ + -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ + -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ + -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ + -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ + -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ + -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ + -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ + -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ + -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ + -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ + -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ + -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ + -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ + -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ + -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ + -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ + -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ + -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ + -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ + -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ + -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ + -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + | \ + sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ + -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ + -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ + -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ + -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ + -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ + -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t && \ + mv $@-t $@ + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/grub-core/gnulib/alloca.c b/grub-core/gnulib/alloca.c new file mode 100644 index 000000000..ee0f01886 --- /dev/null +++ b/grub-core/gnulib/alloca.c @@ -0,0 +1,478 @@ +/* alloca.c -- allocate automatically reclaimed memory + (Mostly) portable public-domain implementation -- D A Gwyn + + This implementation of the PWB library alloca function, + which is used to allocate space off the run-time stack so + that it is automatically reclaimed upon procedure exit, + was inspired by discussions with J. Q. Johnson of Cornell. + J.Otto Tennant contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +#include + +#include + +#include +#include + +#ifdef emacs +# include "lisp.h" +# include "blockinput.h" +# ifdef EMACS_FREE +# undef free +# define free EMACS_FREE +# endif +#else +# define memory_full() abort () +#endif + +/* If compiling with GCC 2, this file's not needed. */ +#if !defined (__GNUC__) || __GNUC__ < 2 + +/* If someone has defined alloca as a macro, + there must be some other way alloca is supposed to work. */ +# ifndef alloca + +# ifdef emacs +# ifdef static +/* actually, only want this if static is defined as "" + -- this is for usg, in which emacs must undefine static + in order to make unexec workable + */ +# ifndef STACK_DIRECTION +you +lose +-- must know STACK_DIRECTION at compile-time +/* Using #error here is not wise since this file should work for + old and obscure compilers. */ +# endif /* STACK_DIRECTION undefined */ +# endif /* static */ +# endif /* emacs */ + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) +long i00afunc (); +# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +# else +# define ADDRESS_FUNCTION(arg) &(arg) +# endif + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +# ifndef STACK_DIRECTION +# define STACK_DIRECTION 0 /* Direction unknown. */ +# endif + +# if STACK_DIRECTION != 0 + +# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +# else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +# define STACK_DIR stack_dir + +static int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +# endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +# ifndef ALIGN_SIZE +# define ALIGN_SIZE sizeof(double) +# endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +void * +alloca (size_t size) +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +# if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); +# endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + +# ifdef emacs + BLOCK_INPUT; +# endif + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free (hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + +# ifdef emacs + UNBLOCK_INPUT; +# endif + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + /* Address of header. */ + register header *new; + + size_t combined_size = sizeof (header) + size; + if (combined_size < sizeof (header)) + memory_full (); + + new = malloc (combined_size); + + if (! new) + memory_full (); + + new->h.next = last_alloca_header; + new->h.deep = depth; + + last_alloca_header = new; + + /* User storage begins just after header. */ + + return (void *) (new + 1); + } +} + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) + +# ifdef DEBUG_I00AFUNC +# include +# endif + +# ifndef CRAY_STACK +# define CRAY_STACK +# ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +# else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +# endif /* CRAY2 */ +# endif /* not CRAY_STACK */ + +# ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +# else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +# endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +# endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +# endif /* not CRAY2 */ +# endif /* CRAY */ + +# endif /* no alloca */ +#endif /* not GCC 2 */ diff --git a/grub-core/gnulib/alloca.in.h b/grub-core/gnulib/alloca.in.h new file mode 100644 index 000000000..72d28ee30 --- /dev/null +++ b/grub-core/gnulib/alloca.in.h @@ -0,0 +1,63 @@ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2013 Free Software Foundation, + Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, see + . + */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# elif defined __TANDEM && defined _TNS_E_TARGET +# ifdef __cplusplus +extern "C" +# endif +void *_alloca (unsigned short); +# pragma intrinsic (_alloca) +# define alloca _alloca +# else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/grub-core/gnulib/argp-ba.c b/grub-core/gnulib/argp-ba.c new file mode 100644 index 000000000..5abc9d00a --- /dev/null +++ b/grub-core/gnulib/argp-ba.c @@ -0,0 +1,34 @@ +/* Default definition for ARGP_PROGRAM_BUG_ADDRESS. + Copyright (C) 1996-1997, 1999, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* If set by the user program, it should point to string that is the + bug-reporting address for the program. It will be printed by argp_help if + the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help + messages), embedded in a sentence that says something like "Report bugs to + ADDR." */ +const char *argp_program_bug_address +/* This variable should be zero-initialized. On most systems, putting it into + BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see + + . */ +#if defined __ELF__ + /* On ELF systems, variables in BSS behave well. */ +#else + = (const char *) 0 +#endif + ; diff --git a/grub-core/gnulib/argp-eexst.c b/grub-core/gnulib/argp-eexst.c new file mode 100644 index 000000000..a8bb77fcf --- /dev/null +++ b/grub-core/gnulib/argp-eexst.c @@ -0,0 +1,30 @@ +/* Default definition for ARGP_ERR_EXIT_STATUS + Copyright (C) 1997, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include + +#include "argp.h" + +/* The exit status that argp will use when exiting due to a parsing error. + If not defined or set by the user program, this defaults to EX_USAGE from + . */ +error_t argp_err_exit_status = EX_USAGE; diff --git a/grub-core/gnulib/argp-fmtstream.c b/grub-core/gnulib/argp-fmtstream.c new file mode 100644 index 000000000..02406ff2a --- /dev/null +++ b/grub-core/gnulib/argp-fmtstream.c @@ -0,0 +1,488 @@ +/* Word-wrapping and line-truncating streams + Copyright (C) 1997-1999, 2001-2003, 2005, 2009-2013 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This package emulates glibc 'line_wrap_stream' semantics for systems that + don't have that. */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include +#include + +#include "argp-fmtstream.h" +#include "argp-namefrob.h" +#include "mbswidth.h" + +#ifndef ARGP_FMTSTREAM_USE_LINEWRAP + +#ifndef isblank +#define isblank(ch) ((ch)==' ' || (ch)=='\t') +#endif + +#if defined _LIBC && defined USE_IN_LIBIO +# include +# include +# define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a) +#endif + +#define INIT_BUF_SIZE 200 +#define PRINTF_SIZE_GUESS 150 + +/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines + written on it with LMARGIN spaces and limits them to RMARGIN columns + total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by + replacing the whitespace before them with a newline and WMARGIN spaces. + Otherwise, chars beyond RMARGIN are simply dropped until a newline. + Returns NULL if there was an error. */ +argp_fmtstream_t +__argp_make_fmtstream (FILE *stream, + size_t lmargin, size_t rmargin, ssize_t wmargin) +{ + argp_fmtstream_t fs; + + fs = (struct argp_fmtstream *) malloc (sizeof (struct argp_fmtstream)); + if (fs != NULL) + { + fs->stream = stream; + + fs->lmargin = lmargin; + fs->rmargin = rmargin; + fs->wmargin = wmargin; + fs->point_col = 0; + fs->point_offs = 0; + + fs->buf = (char *) malloc (INIT_BUF_SIZE); + if (! fs->buf) + { + free (fs); + fs = 0; + } + else + { + fs->p = fs->buf; + fs->end = fs->buf + INIT_BUF_SIZE; + } + } + + return fs; +} +#if 0 +/* Not exported. */ +#ifdef weak_alias +weak_alias (__argp_make_fmtstream, argp_make_fmtstream) +#endif +#endif + +/* Flush FS to its stream, and free it (but don't close the stream). */ +void +__argp_fmtstream_free (argp_fmtstream_t fs) +{ + __argp_fmtstream_update (fs); + if (fs->p > fs->buf) + { +#ifdef USE_IN_LIBIO + __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); +#else + fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); +#endif + } + free (fs->buf); + free (fs); +} +#if 0 +/* Not exported. */ +#ifdef weak_alias +weak_alias (__argp_fmtstream_free, argp_fmtstream_free) +#endif +#endif + + +/* Return the pointer to the first character that doesn't fit in l columns. */ +static inline const ptrdiff_t +add_width (const char *ptr, const char *end, size_t l) +{ + mbstate_t ps; + const char *ptr0 = ptr; + + memset (&ps, 0, sizeof (ps)); + + while (ptr < end) + { + wchar_t wc; + size_t s, k; + + s = mbrtowc (&wc, ptr, end - ptr, &ps); + if (s == (size_t) -1) + break; + if (s == (size_t) -2) + { + if (1 >= l) + break; + l--; + ptr++; + continue; + } + + if (wc == '\e' && ptr + 3 < end + && ptr[1] == '[' && (ptr[2] == '0' || ptr[2] == '1') + && ptr[3] == 'm') + { + ptr += 4; + continue; + } + + k = wcwidth (wc); + + if (k >= l) + break; + l -= k; + ptr += s; + } + return ptr - ptr0; +} + +/* Process FS's buffer so that line wrapping is done from POINT_OFFS to the + end of its buffer. This code is mostly from glibc stdio/linewrap.c. */ +void +__argp_fmtstream_update (argp_fmtstream_t fs) +{ + char *buf, *nl; + size_t len; + + /* Scan the buffer for newlines. */ + buf = fs->buf + fs->point_offs; + while (buf < fs->p) + { + size_t r; + + if (fs->point_col == 0 && fs->lmargin != 0) + { + /* We are starting a new line. Print spaces to the left margin. */ + const size_t pad = fs->lmargin; + if (fs->p + pad < fs->end) + { + /* We can fit in them in the buffer by moving the + buffer text up and filling in the beginning. */ + memmove (buf + pad, buf, fs->p - buf); + fs->p += pad; /* Compensate for bigger buffer. */ + memset (buf, ' ', pad); /* Fill in the spaces. */ + buf += pad; /* Don't bother searching them. */ + } + else + { + /* No buffer space for spaces. Must flush. */ + size_t i; + for (i = 0; i < pad; i++) + { +#ifdef USE_IN_LIBIO + if (_IO_fwide (fs->stream, 0) > 0) + putwc_unlocked (L' ', fs->stream); + else +#endif + putc_unlocked (' ', fs->stream); + } + } + fs->point_col = pad; + } + + len = fs->p - buf; + nl = memchr (buf, '\n', len); + + if (fs->point_col < 0) + fs->point_col = 0; + + if (!nl) + { + size_t display_width = mbsnwidth (buf, fs->p - buf, MBSW_STOP_AT_NUL); + /* The buffer ends in a partial line. */ + + if (fs->point_col + display_width < fs->rmargin) + { + /* The remaining buffer text is a partial line and fits + within the maximum line width. Advance point for the + characters to be written and stop scanning. */ + fs->point_col += display_width; + break; + } + else + /* Set the end-of-line pointer for the code below to + the end of the buffer. */ + nl = fs->p; + } + else + { + size_t display_width = mbsnwidth (buf, nl - buf, MBSW_STOP_AT_NUL); + if (display_width < (ssize_t) fs->rmargin) + { + /* The buffer contains a full line that fits within the maximum + line width. Reset point and scan the next line. */ + fs->point_col = 0; + buf = nl + 1; + continue; + } + } + + /* This line is too long. */ + r = fs->rmargin - 1; + + if (fs->wmargin < 0) + { + /* Truncate the line by overwriting the excess with the + newline and anything after it in the buffer. */ + if (nl < fs->p) + { + memmove (buf + (r - fs->point_col), nl, fs->p - nl); + fs->p -= buf + (r - fs->point_col) - nl; + /* Reset point for the next line and start scanning it. */ + fs->point_col = 0; + buf += r + 1; /* Skip full line plus \n. */ + } + else + { + /* The buffer ends with a partial line that is beyond the + maximum line width. Advance point for the characters + written, and discard those past the max from the buffer. */ + fs->point_col += len; + fs->p -= fs->point_col - r; + break; + } + } + else + { + /* Do word wrap. Go to the column just past the maximum line + width and scan back for the beginning of the word there. + Then insert a line break. */ + + char *p, *nextline; + int i; + + p = buf + add_width (buf, fs->p, (r + 1 - fs->point_col)); + while (p >= buf && !isblank ((unsigned char) *p)) + --p; + nextline = p + 1; /* This will begin the next line. */ + + if (nextline > buf) + { + /* Swallow separating blanks. */ + if (p >= buf) + do + --p; + while (p >= buf && isblank ((unsigned char) *p)); + nl = p + 1; /* The newline will replace the first blank. */ + } + else + { + /* A single word that is greater than the maximum line width. + Oh well. Put it on an overlong line by itself. */ + p = buf + add_width (buf, fs->p, (r + 1 - fs->point_col)); + /* Find the end of the long word. */ + if (p < nl) + do + ++p; + while (p < nl && !isblank ((unsigned char) *p)); + if (p == nl) + { + /* It already ends a line. No fussing required. */ + fs->point_col = 0; + buf = nl + 1; + continue; + } + /* We will move the newline to replace the first blank. */ + nl = p; + /* Swallow separating blanks. */ + do + ++p; + while (isblank ((unsigned char) *p)); + /* The next line will start here. */ + nextline = p; + } + + /* Note: There are a bunch of tests below for + NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall + at the end of the buffer, and NEXTLINE is in fact empty (and so + we need not be careful to maintain its contents). */ + + if ((nextline == buf + len + 1 + ? fs->end - nl < fs->wmargin + 1 + : nextline - (nl + 1) < fs->wmargin) + && fs->p > nextline) + { + /* The margin needs more blanks than we removed. */ + if (mbsnwidth (fs->p, fs->end - fs->p, MBSW_STOP_AT_NUL) + > fs->wmargin + 1) + /* Make some space for them. */ + { + size_t mv = fs->p - nextline; + memmove (nl + 1 + fs->wmargin, nextline, mv); + nextline = nl + 1 + fs->wmargin; + len = nextline + mv - buf; + *nl++ = '\n'; + } + else + /* Output the first line so we can use the space. */ + { +#ifdef _LIBC + __fxprintf (fs->stream, "%.*s\n", + (int) (nl - fs->buf), fs->buf); +#else + if (nl > fs->buf) + fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream); + putc_unlocked ('\n', fs->stream); +#endif + + len += buf - fs->buf; + nl = buf = fs->buf; + } + } + else + /* We can fit the newline and blanks in before + the next word. */ + *nl++ = '\n'; + + if (nextline - nl >= fs->wmargin + || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin)) + /* Add blanks up to the wrap margin column. */ + for (i = 0; i < fs->wmargin; ++i) + *nl++ = ' '; + else + for (i = 0; i < fs->wmargin; ++i) +#ifdef USE_IN_LIBIO + if (_IO_fwide (fs->stream, 0) > 0) + putwc_unlocked (L' ', fs->stream); + else +#endif + putc_unlocked (' ', fs->stream); + + /* Copy the tail of the original buffer into the current buffer + position. */ + if (nl < nextline) + memmove (nl, nextline, buf + len - nextline); + len -= nextline - buf; + + /* Continue the scan on the remaining lines in the buffer. */ + buf = nl; + + /* Restore bufp to include all the remaining text. */ + fs->p = nl + len; + + /* Reset the counter of what has been output this line. If wmargin + is 0, we want to avoid the lmargin getting added, so we set + point_col to a magic value of -1 in that case. */ + fs->point_col = fs->wmargin ? fs->wmargin : -1; + } + } + + /* Remember that we've scanned as far as the end of the buffer. */ + fs->point_offs = fs->p - fs->buf; +} + +/* Ensure that FS has space for AMOUNT more bytes in its buffer, either by + growing the buffer, or by flushing it. True is returned iff we succeed. */ +int +__argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount) +{ + if ((size_t) (fs->end - fs->p) < amount) + { + ssize_t wrote; + + /* Flush FS's buffer. */ + __argp_fmtstream_update (fs); + +#ifdef _LIBC + __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); + wrote = fs->p - fs->buf; +#else + wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); +#endif + if (wrote == fs->p - fs->buf) + { + fs->p = fs->buf; + fs->point_offs = 0; + } + else + { + fs->p -= wrote; + fs->point_offs -= wrote; + memmove (fs->buf, fs->buf + wrote, fs->p - fs->buf); + return 0; + } + + if ((size_t) (fs->end - fs->buf) < amount) + /* Gotta grow the buffer. */ + { + size_t old_size = fs->end - fs->buf; + size_t new_size = old_size + amount; + char *new_buf; + + if (new_size < old_size || ! (new_buf = realloc (fs->buf, new_size))) + { + __set_errno (ENOMEM); + return 0; + } + + fs->buf = new_buf; + fs->end = new_buf + new_size; + fs->p = fs->buf; + } + } + + return 1; +} + +ssize_t +__argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...) +{ + int out; + size_t avail; + size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */ + + do + { + va_list args; + + if (! __argp_fmtstream_ensure (fs, size_guess)) + return -1; + + va_start (args, fmt); + avail = fs->end - fs->p; + out = __vsnprintf (fs->p, avail, fmt, args); + va_end (args); + if ((size_t) out >= avail) + size_guess = out + 1; + } + while ((size_t) out >= avail); + + fs->p += out; + + return out; +} +#if 0 +/* Not exported. */ +#ifdef weak_alias +weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf) +#endif +#endif + +#endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */ diff --git a/grub-core/gnulib/argp-fmtstream.h b/grub-core/gnulib/argp-fmtstream.h new file mode 100644 index 000000000..000090ea6 --- /dev/null +++ b/grub-core/gnulib/argp-fmtstream.h @@ -0,0 +1,359 @@ +/* Word-wrapping and line-truncating streams. + Copyright (C) 1997, 2006-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This package emulates glibc 'line_wrap_stream' semantics for systems that + don't have that. If the system does have it, it is just a wrapper for + that. This header file is only used internally while compiling argp, and + shouldn't be installed. */ + +#ifndef _ARGP_FMTSTREAM_H +#define _ARGP_FMTSTREAM_H + +#include +#include +#include + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +#if (_LIBC - 0 && !defined (USE_IN_LIBIO)) \ + || (defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H)) +/* line_wrap_stream is available, so use that. */ +#define ARGP_FMTSTREAM_USE_LINEWRAP +#endif + +#ifdef ARGP_FMTSTREAM_USE_LINEWRAP +/* Just be a simple wrapper for line_wrap_stream; the semantics are + *slightly* different, as line_wrap_stream doesn't actually make a new + object, it just modifies the given stream (reversibly) to do + line-wrapping. Since we control who uses this code, it doesn't matter. */ + +#include + +typedef FILE *argp_fmtstream_t; + +#define argp_make_fmtstream line_wrap_stream +#define __argp_make_fmtstream line_wrap_stream +#define argp_fmtstream_free line_unwrap_stream +#define __argp_fmtstream_free line_unwrap_stream + +#define __argp_fmtstream_putc(fs,ch) putc(ch,fs) +#define argp_fmtstream_putc(fs,ch) putc(ch,fs) +#define __argp_fmtstream_puts(fs,str) fputs(str,fs) +#define argp_fmtstream_puts(fs,str) fputs(str,fs) +#define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) +#define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) +#define __argp_fmtstream_printf fprintf +#define argp_fmtstream_printf fprintf + +#define __argp_fmtstream_lmargin line_wrap_lmargin +#define argp_fmtstream_lmargin line_wrap_lmargin +#define __argp_fmtstream_set_lmargin line_wrap_set_lmargin +#define argp_fmtstream_set_lmargin line_wrap_set_lmargin +#define __argp_fmtstream_rmargin line_wrap_rmargin +#define argp_fmtstream_rmargin line_wrap_rmargin +#define __argp_fmtstream_set_rmargin line_wrap_set_rmargin +#define argp_fmtstream_set_rmargin line_wrap_set_rmargin +#define __argp_fmtstream_wmargin line_wrap_wmargin +#define argp_fmtstream_wmargin line_wrap_wmargin +#define __argp_fmtstream_set_wmargin line_wrap_set_wmargin +#define argp_fmtstream_set_wmargin line_wrap_set_wmargin +#define __argp_fmtstream_point line_wrap_point +#define argp_fmtstream_point line_wrap_point + +#else /* !ARGP_FMTSTREAM_USE_LINEWRAP */ +/* Guess we have to define our own version. */ + +struct argp_fmtstream +{ + FILE *stream; /* The stream we're outputting to. */ + + size_t lmargin, rmargin; /* Left and right margins. */ + ssize_t wmargin; /* Margin to wrap to, or -1 to truncate. */ + + /* Point in buffer to which we've processed for wrapping, but not output. */ + size_t point_offs; + /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin. */ + ssize_t point_col; + + char *buf; /* Output buffer. */ + char *p; /* Current end of text in BUF. */ + char *end; /* Absolute end of BUF. */ +}; + +typedef struct argp_fmtstream *argp_fmtstream_t; + +/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines + written on it with LMARGIN spaces and limits them to RMARGIN columns + total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by + replacing the whitespace before them with a newline and WMARGIN spaces. + Otherwise, chars beyond RMARGIN are simply dropped until a newline. + Returns NULL if there was an error. */ +extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream, + size_t __lmargin, + size_t __rmargin, + ssize_t __wmargin); +extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream, + size_t __lmargin, + size_t __rmargin, + ssize_t __wmargin); + +/* Flush __FS to its stream, and free it (but don't close the stream). */ +extern void __argp_fmtstream_free (argp_fmtstream_t __fs); +extern void argp_fmtstream_free (argp_fmtstream_t __fs); + +extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs, + const char *__fmt, ...) + _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); +extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs, + const char *__fmt, ...) + _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); + +#if _LIBC +extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); +extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); + +extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); +extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); + +extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len); +extern size_t argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len); +#endif + +/* Access macros for various bits of state. */ +#define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin) +#define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin) +#define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin) +#define __argp_fmtstream_lmargin argp_fmtstream_lmargin +#define __argp_fmtstream_rmargin argp_fmtstream_rmargin +#define __argp_fmtstream_wmargin argp_fmtstream_wmargin + +#if _LIBC +/* Set __FS's left margin to LMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, + size_t __lmargin); +extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, + size_t __lmargin); + +/* Set __FS's right margin to __RMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, + size_t __rmargin); +extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, + size_t __rmargin); + +/* Set __FS's wrap margin to __WMARGIN and return the old value. */ +extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, + size_t __wmargin); +extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, + size_t __wmargin); + +/* Return the column number of the current output point in __FS. */ +extern size_t argp_fmtstream_point (argp_fmtstream_t __fs); +extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs); +#endif + +/* Internal routines. */ +extern void _argp_fmtstream_update (argp_fmtstream_t __fs); +extern void __argp_fmtstream_update (argp_fmtstream_t __fs); +extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); +extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); + +#if !_LIBC || defined __OPTIMIZE__ +/* Inline versions of above routines. */ + +#if !_LIBC +#define __argp_fmtstream_putc argp_fmtstream_putc +#define __argp_fmtstream_puts argp_fmtstream_puts +#define __argp_fmtstream_write argp_fmtstream_write +#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin +#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin +#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin +#define __argp_fmtstream_point argp_fmtstream_point +#define __argp_fmtstream_update _argp_fmtstream_update +#define __argp_fmtstream_ensure _argp_fmtstream_ensure +_GL_INLINE_HEADER_BEGIN +#ifndef ARGP_FS_EI +# define ARGP_FS_EI _GL_INLINE +#endif +#endif + +#ifndef ARGP_FS_EI +# ifdef __GNUC__ + /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + + Whereas Apple GCC 4.0.1 build 5479 without -std=c99 or -std=gnu99 + implements the GNU C inline semantics and defines the macro + __GNUC_GNU_INLINE__, but it does not warn and does not support + __attribute__ ((__gnu_inline__)). + + All in all, these are the possible combinations. For every compiler, + we need to choose ARGP_FS_EI so that the corresponding table cell + contains an "ok". + + \ ARGP_FS_EI inline extern extern + \ inline inline + CC \ __attribute__ + ((gnu_inline)) + + gcc 4.3.0 error ok ok + gcc 4.3.0 -std=gnu99 -fgnu89-inline error ok ok + gcc 4.3.0 -std=gnu99 ok error ok + + gcc 4.2.2 error ok ok + gcc 4.2.2 -std=gnu99 -fgnu89-inline error ok ok + gcc 4.2.2 -std=gnu99 error warning ok + + gcc 4.1.2 error ok warning + gcc 4.1.2 -std=gnu99 error ok warning + + Apple gcc 4.0.1 error ok warning + Apple gcc 4.0.1 -std=gnu99 ok error warning + */ +# if defined __GNUC_STDC_INLINE__ +# define ARGP_FS_EI inline +# elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2) +# define ARGP_FS_EI extern inline __attribute__ ((__gnu_inline__)) +# else +# define ARGP_FS_EI extern inline +# endif +# else + /* With other compilers, assume the ISO C99 meaning of 'inline', if + the compiler supports 'inline' at all. */ +# define ARGP_FS_EI inline +# endif +#endif + +ARGP_FS_EI size_t +__argp_fmtstream_write (argp_fmtstream_t __fs, + const char *__str, size_t __len) +{ + if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len)) + { + memcpy (__fs->p, __str, __len); + __fs->p += __len; + return __len; + } + else + return 0; +} + +ARGP_FS_EI int +__argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str) +{ + size_t __len = strlen (__str); + if (__len) + { + size_t __wrote = __argp_fmtstream_write (__fs, __str, __len); + return __wrote == __len ? 0 : -1; + } + else + return 0; +} + +ARGP_FS_EI int +__argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch) +{ + if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1)) + return *__fs->p++ = __ch; + else + return EOF; +} + +/* Set __FS's left margin to __LMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->lmargin; + __fs->lmargin = __lmargin; + return __old; +} + +/* Set __FS's right margin to __RMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->rmargin; + __fs->rmargin = __rmargin; + return __old; +} + +/* Set FS's wrap margin to __WMARGIN and return the old value. */ +ARGP_FS_EI size_t +__argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin) +{ + size_t __old; + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + __old = __fs->wmargin; + __fs->wmargin = __wmargin; + return __old; +} + +/* Return the column number of the current output point in __FS. */ +ARGP_FS_EI size_t +__argp_fmtstream_point (argp_fmtstream_t __fs) +{ + if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) + __argp_fmtstream_update (__fs); + return __fs->point_col >= 0 ? __fs->point_col : 0; +} + +#if !_LIBC +#undef __argp_fmtstream_putc +#undef __argp_fmtstream_puts +#undef __argp_fmtstream_write +#undef __argp_fmtstream_set_lmargin +#undef __argp_fmtstream_set_rmargin +#undef __argp_fmtstream_set_wmargin +#undef __argp_fmtstream_point +#undef __argp_fmtstream_update +#undef __argp_fmtstream_ensure +_GL_INLINE_HEADER_END +#endif + +#endif /* !_LIBC || __OPTIMIZE__ */ + +#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ + +#endif /* argp-fmtstream.h */ diff --git a/grub-core/gnulib/argp-fs-xinl.c b/grub-core/gnulib/argp-fs-xinl.c new file mode 100644 index 000000000..35547d93d --- /dev/null +++ b/grub-core/gnulib/argp-fs-xinl.c @@ -0,0 +1,46 @@ +/* Real definitions for extern inline functions in argp-fmtstream.h + Copyright (C) 1997, 2003-2004, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifdef _LIBC +# define ARGP_FS_EI +#else +# define ARGP_FS_EI _GL_EXTERN_INLINE +#endif +#undef __OPTIMIZE__ +#define __OPTIMIZE__ 1 +#include "argp-fmtstream.h" + +#if 0 +/* Not exported. */ +/* Add weak aliases. */ +#if _LIBC - 0 && !defined (ARGP_FMTSTREAM_USE_LINEWRAP) && defined (weak_alias) + +weak_alias (__argp_fmtstream_putc, argp_fmtstream_putc) +weak_alias (__argp_fmtstream_puts, argp_fmtstream_puts) +weak_alias (__argp_fmtstream_write, argp_fmtstream_write) +weak_alias (__argp_fmtstream_set_lmargin, argp_fmtstream_set_lmargin) +weak_alias (__argp_fmtstream_set_rmargin, argp_fmtstream_set_rmargin) +weak_alias (__argp_fmtstream_set_wmargin, argp_fmtstream_set_wmargin) +weak_alias (__argp_fmtstream_point, argp_fmtstream_point) + +#endif +#endif diff --git a/grub-core/gnulib/argp-help.c b/grub-core/gnulib/argp-help.c new file mode 100644 index 000000000..b9be63f40 --- /dev/null +++ b/grub-core/gnulib/argp-help.c @@ -0,0 +1,1960 @@ +/* Hierarchical argument parsing help output + Copyright (C) 1995-2005, 2007, 2009-2015 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef USE_IN_LIBIO +# include +#endif + +#ifdef _LIBC +# include +# undef dgettext +# define dgettext(domain, msgid) \ + INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES) +#else +# include "gettext.h" +#endif + +#include "argp.h" +#include "argp-fmtstream.h" +#include "argp-namefrob.h" +#include "mbswidth.h" + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +/* User-selectable (using an environment variable) formatting parameters. + + These may be specified in an environment variable called 'ARGP_HELP_FMT', + with a contents like: VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2 + Where VALn must be a positive integer. The list of variables is in the + UPARAM_NAMES vector, below. */ + +/* Default parameters. */ +#define DUP_ARGS 0 /* True if option argument can be duplicated. */ +#define DUP_ARGS_NOTE 1 /* True to print a note about duplicate args. */ +#define SHORT_OPT_COL 2 /* column in which short options start */ +#define LONG_OPT_COL 6 /* column in which long options start */ +#define DOC_OPT_COL 2 /* column in which doc options start */ +#define OPT_DOC_COL 29 /* column in which option text starts */ +#define HEADER_COL 1 /* column in which group headers are printed */ +#define USAGE_INDENT 12 /* indentation of wrapped usage lines */ +#define RMARGIN 79 /* right margin used for wrapping */ + +/* User-selectable (using an environment variable) formatting parameters. + They must all be of type 'int' for the parsing code to work. */ +struct uparams +{ + /* If true, arguments for an option are shown with both short and long + options, even when a given option has both, e.g. '-x ARG, --longx=ARG'. + If false, then if an option has both, the argument is only shown with + the long one, e.g., '-x, --longx=ARG', and a message indicating that + this really means both is printed below the options. */ + int dup_args; + + /* This is true if when DUP_ARGS is false, and some duplicate arguments have + been suppressed, an explanatory message should be printed. */ + int dup_args_note; + + /* Various output columns. */ + int short_opt_col; /* column in which short options start */ + int long_opt_col; /* column in which long options start */ + int doc_opt_col; /* column in which doc options start */ + int opt_doc_col; /* column in which option text starts */ + int header_col; /* column in which group headers are printed */ + int usage_indent; /* indentation of wrapped usage lines */ + int rmargin; /* right margin used for wrapping */ + + int valid; /* True when the values in here are valid. */ +}; + +/* This is a global variable, as user options are only ever read once. */ +static struct uparams uparams = { + DUP_ARGS, DUP_ARGS_NOTE, + SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL, + USAGE_INDENT, RMARGIN, + 0 +}; + +/* A particular uparam, and what the user name is. */ +struct uparam_name +{ + const char *name; /* User name. */ + int is_bool; /* Whether it's 'boolean'. */ + size_t uparams_offs; /* Location of the (int) field in UPARAMS. */ +}; + +/* The name-field mappings we know about. */ +static const struct uparam_name uparam_names[] = +{ + { "dup-args", 1, offsetof (struct uparams, dup_args) }, + { "dup-args-note", 1, offsetof (struct uparams, dup_args_note) }, + { "short-opt-col", 0, offsetof (struct uparams, short_opt_col) }, + { "long-opt-col", 0, offsetof (struct uparams, long_opt_col) }, + { "doc-opt-col", 0, offsetof (struct uparams, doc_opt_col) }, + { "opt-doc-col", 0, offsetof (struct uparams, opt_doc_col) }, + { "header-col", 0, offsetof (struct uparams, header_col) }, + { "usage-indent", 0, offsetof (struct uparams, usage_indent) }, + { "rmargin", 0, offsetof (struct uparams, rmargin) }, + { 0 } +}; + +static void +validate_uparams (const struct argp_state *state, struct uparams *upptr) +{ + const struct uparam_name *up; + + for (up = uparam_names; up->name; up++) + { + if (up->is_bool + || up->uparams_offs == offsetof (struct uparams, rmargin)) + continue; + if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin) + { + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "\ +ARGP_HELP_FMT: %s value is less than or equal to %s"), + "rmargin", up->name); + return; + } + } + uparams = *upptr; + uparams.valid = 1; +} + +/* Read user options from the environment, and fill in UPARAMS appropriately. */ +static void +fill_in_uparams (const struct argp_state *state) +{ + const char *var = getenv ("ARGP_HELP_FMT"); + struct uparams new_params = uparams; + +#define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0); + + if (var) + { + /* Parse var. */ + while (*var) + { + SKIPWS (var); + + if (isalpha ((unsigned char) *var)) + { + size_t var_len; + const struct uparam_name *un; + int unspec = 0, val = 0; + const char *arg = var; + + while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_') + arg++; + var_len = arg - var; + + SKIPWS (arg); + + if (*arg == '\0' || *arg == ',') + unspec = 1; + else if (*arg == '=') + { + arg++; + SKIPWS (arg); + } + + if (unspec) + { + if (var[0] == 'n' && var[1] == 'o' && var[2] == '-') + { + val = 0; + var += 3; + var_len -= 3; + } + else + val = 1; + } + else if (isdigit ((unsigned char) *arg)) + { + val = atoi (arg); + while (isdigit ((unsigned char) *arg)) + arg++; + SKIPWS (arg); + } + + for (un = uparam_names; un->name; un++) + if (strlen (un->name) == var_len + && strncmp (var, un->name, var_len) == 0) + { + if (unspec && !un->is_bool) + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "\ +%.*s: ARGP_HELP_FMT parameter requires a value"), + (int) var_len, var); + else if (val < 0) + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "\ +%.*s: ARGP_HELP_FMT parameter must be positive"), + (int) var_len, var); + else + *(int *)((char *)&new_params + un->uparams_offs) = val; + break; + } + if (! un->name) + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, "\ +%.*s: Unknown ARGP_HELP_FMT parameter"), + (int) var_len, var); + + var = arg; + if (*var == ',') + var++; + } + else if (*var) + { + __argp_failure (state, 0, 0, + dgettext (state->root_argp->argp_domain, + "Garbage in ARGP_HELP_FMT: %s"), var); + break; + } + } + validate_uparams (state, &new_params); + } +} + +/* Returns true if OPT hasn't been marked invisible. Visibility only affects + whether OPT is displayed or used in sorting, not option shadowing. */ +#define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN)) + +/* Returns true if OPT is an alias for an earlier option. */ +#define oalias(opt) ((opt)->flags & OPTION_ALIAS) + +/* Returns true if OPT is a documentation-only entry. */ +#define odoc(opt) ((opt)->flags & OPTION_DOC) + +/* Returns true if OPT should not be translated */ +#define onotrans(opt) ((opt)->flags & OPTION_NO_TRANS) + +/* Returns true if OPT is the end-of-list marker for a list of options. */ +#define oend(opt) __option_is_end (opt) + +/* Returns true if OPT has a short option. */ +#define oshort(opt) __option_is_short (opt) + +/* + The help format for a particular option is like: + + -xARG, -yARG, --long1=ARG, --long2=ARG Documentation... + + Where ARG will be omitted if there's no argument, for this option, or + will be surrounded by "[" and "]" appropriately if the argument is + optional. The documentation string is word-wrapped appropriately, and if + the list of options is long enough, it will be started on a separate line. + If there are no short options for a given option, the first long option is + indented slightly in a way that's supposed to make most long options appear + to be in a separate column. + + For example, the following output (from ps): + + -p PID, --pid=PID List the process PID + --pgrp=PGRP List processes in the process group PGRP + -P, -x, --no-parent Include processes without parents + -Q, --all-fields Don't elide unusable fields (normally if there's + some reason ps can't print a field for any + process, it's removed from the output entirely) + -r, --reverse, --gratuitously-long-reverse-option + Reverse the order of any sort + --session[=SID] Add the processes from the session SID (which + defaults to the sid of the current process) + + Here are some more options: + -f ZOT, --foonly=ZOT Glork a foonly + -z, --zaza Snit a zar + + -?, --help Give this help list + --usage Give a short usage message + -V, --version Print program version + + The struct argp_option array for the above could look like: + + { + {"pid", 'p', "PID", 0, "List the process PID"}, + {"pgrp", OPT_PGRP, "PGRP", 0, "List processes in the process group PGRP"}, + {"no-parent", 'P', 0, 0, "Include processes without parents"}, + {0, 'x', 0, OPTION_ALIAS}, + {"all-fields",'Q', 0, 0, "Don't elide unusable fields (normally" + " if there's some reason ps can't" + " print a field for any process, it's" + " removed from the output entirely)" }, + {"reverse", 'r', 0, 0, "Reverse the order of any sort"}, + {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS}, + {"session", OPT_SESS, "SID", OPTION_ARG_OPTIONAL, + "Add the processes from the session" + " SID (which defaults to the sid of" + " the current process)" }, + + {0,0,0,0, "Here are some more options:"}, + {"foonly", 'f', "ZOT", 0, "Glork a foonly"}, + {"zaza", 'z', 0, 0, "Snit a zar"}, + + {0} + } + + Note that the last three options are automatically supplied by argp_parse, + unless you tell it not to with ARGP_NO_HELP. + +*/ + +/* Returns true if CH occurs between BEG and END. */ +static int +find_char (char ch, char *beg, char *end) +{ + while (beg < end) + if (*beg == ch) + return 1; + else + beg++; + return 0; +} + +struct hol_cluster; /* fwd decl */ + +struct hol_entry +{ + /* First option. */ + const struct argp_option *opt; + /* Number of options (including aliases). */ + unsigned num; + + /* A pointers into the HOL's short_options field, to the first short option + letter for this entry. The order of the characters following this point + corresponds to the order of options pointed to by OPT, and there are at + most NUM. A short option recorded in an option following OPT is only + valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's + probably been shadowed by some other entry). */ + char *short_options; + + /* Entries are sorted by their group first, in the order: + 1, 2, ..., n, 0, -m, ..., -2, -1 + and then alphabetically within each group. The default is 0. */ + int group; + + /* The cluster of options this entry belongs to, or 0 if none. */ + struct hol_cluster *cluster; + + /* The argp from which this option came. */ + const struct argp *argp; + + /* Position in the array */ + unsigned ord; +}; + +/* A cluster of entries to reflect the argp tree structure. */ +struct hol_cluster +{ + /* A descriptive header printed before options in this cluster. */ + const char *header; + + /* Used to order clusters within the same group with the same parent, + according to the order in which they occurred in the parent argp's child + list. */ + int index; + + /* How to sort this cluster with respect to options and other clusters at the + same depth (clusters always follow options in the same group). */ + int group; + + /* The cluster to which this cluster belongs, or 0 if it's at the base + level. */ + struct hol_cluster *parent; + + /* The argp from which this cluster is (eventually) derived. */ + const struct argp *argp; + + /* The distance this cluster is from the root. */ + int depth; + + /* Clusters in a given hol are kept in a linked list, to make freeing them + possible. */ + struct hol_cluster *next; +}; + +/* A list of options for help. */ +struct hol +{ + /* An array of hol_entry's. */ + struct hol_entry *entries; + /* The number of entries in this hol. If this field is zero, the others + are undefined. */ + unsigned num_entries; + + /* A string containing all short options in this HOL. Each entry contains + pointers into this string, so the order can't be messed with blindly. */ + char *short_options; + + /* Clusters of entries in this hol. */ + struct hol_cluster *clusters; +}; + +/* Create a struct hol from the options in ARGP. CLUSTER is the + hol_cluster in which these entries occur, or 0, if at the root. */ +static struct hol * +make_hol (const struct argp *argp, struct hol_cluster *cluster) +{ + char *so; + const struct argp_option *o; + const struct argp_option *opts = argp->options; + struct hol_entry *entry; + unsigned num_short_options = 0; + struct hol *hol = malloc (sizeof (struct hol)); + + assert (hol); + + hol->num_entries = 0; + hol->clusters = 0; + + if (opts) + { + int cur_group = 0; + + /* The first option must not be an alias. */ + assert (! oalias (opts)); + + /* Calculate the space needed. */ + for (o = opts; ! oend (o); o++) + { + if (! oalias (o)) + hol->num_entries++; + if (oshort (o)) + num_short_options++; /* This is an upper bound. */ + } + + hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries); + hol->short_options = malloc (num_short_options + 1); + + assert (hol->entries && hol->short_options); + if (SIZE_MAX <= UINT_MAX) + assert (hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry)); + + /* Fill in the entries. */ + so = hol->short_options; + for (o = opts, entry = hol->entries; ! oend (o); entry++) + { + entry->opt = o; + entry->num = 0; + entry->short_options = so; + entry->group = cur_group = + o->group + ? o->group + : ((!o->name && !o->key) + ? cur_group + 1 + : cur_group); + entry->cluster = cluster; + entry->argp = argp; + + do + { + entry->num++; + if (oshort (o) && ! find_char (o->key, hol->short_options, so)) + /* O has a valid short option which hasn't already been used.*/ + *so++ = o->key; + o++; + } + while (! oend (o) && oalias (o)); + } + *so = '\0'; /* null terminated so we can find the length */ + } + + return hol; +} + +/* Add a new cluster to HOL, with the given GROUP and HEADER (taken from the + associated argp child list entry), INDEX, and PARENT, and return a pointer + to it. ARGP is the argp that this cluster results from. */ +static struct hol_cluster * +hol_add_cluster (struct hol *hol, int group, const char *header, int index, + struct hol_cluster *parent, const struct argp *argp) +{ + struct hol_cluster *cl = malloc (sizeof (struct hol_cluster)); + if (cl) + { + cl->group = group; + cl->header = header; + + cl->index = index; + cl->parent = parent; + cl->argp = argp; + cl->depth = parent ? parent->depth + 1 : 0; + + cl->next = hol->clusters; + hol->clusters = cl; + } + return cl; +} + +/* Free HOL and any resources it uses. */ +static void +hol_free (struct hol *hol) +{ + struct hol_cluster *cl = hol->clusters; + + while (cl) + { + struct hol_cluster *next = cl->next; + free (cl); + cl = next; + } + + if (hol->num_entries > 0) + { + free (hol->entries); + free (hol->short_options); + } + + free (hol); +} + +static int +hol_entry_short_iterate (const struct hol_entry *entry, + int (*func)(const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie), + const char *domain, void *cookie) +{ + unsigned nopts; + int val = 0; + const struct argp_option *opt, *real = entry->opt; + char *so = entry->short_options; + + for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) + if (oshort (opt) && *so == opt->key) + { + if (!oalias (opt)) + real = opt; + if (ovisible (opt)) + val = (*func)(opt, real, domain, cookie); + so++; + } + + return val; +} + +static inline int +#if __GNUC__ >= 3 +__attribute__ ((always_inline)) +#endif +hol_entry_long_iterate (const struct hol_entry *entry, + int (*func)(const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie), + const char *domain, void *cookie) +{ + unsigned nopts; + int val = 0; + const struct argp_option *opt, *real = entry->opt; + + for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) + if (opt->name) + { + if (!oalias (opt)) + real = opt; + if (ovisible (opt)) + val = (*func)(opt, real, domain, cookie); + } + + return val; +} + +/* Iterator that returns true for the first short option. */ +static int +until_short (const struct argp_option *opt, const struct argp_option *real, + const char *domain, void *cookie) +{ + return oshort (opt) ? opt->key : 0; +} + +/* Returns the first valid short option in ENTRY, or 0 if there is none. */ +static char +hol_entry_first_short (const struct hol_entry *entry) +{ + return hol_entry_short_iterate (entry, until_short, + entry->argp->argp_domain, 0); +} + +/* Returns the first valid long option in ENTRY, or 0 if there is none. */ +static const char * +hol_entry_first_long (const struct hol_entry *entry) +{ + const struct argp_option *opt; + unsigned num; + for (opt = entry->opt, num = entry->num; num > 0; opt++, num--) + if (opt->name && ovisible (opt)) + return opt->name; + return 0; +} + +/* Returns the entry in HOL with the long option name NAME, or 0 if there is + none. */ +static struct hol_entry * +hol_find_entry (struct hol *hol, const char *name) +{ + struct hol_entry *entry = hol->entries; + unsigned num_entries = hol->num_entries; + + while (num_entries-- > 0) + { + const struct argp_option *opt = entry->opt; + unsigned num_opts = entry->num; + + while (num_opts-- > 0) + if (opt->name && ovisible (opt) && strcmp (opt->name, name) == 0) + return entry; + else + opt++; + + entry++; + } + + return 0; +} + +/* If an entry with the long option NAME occurs in HOL, set its special + sort position to GROUP. */ +static void +hol_set_group (struct hol *hol, const char *name, int group) +{ + struct hol_entry *entry = hol_find_entry (hol, name); + if (entry) + entry->group = group; +} + +/* Order by group: 0, 1, 2, ..., n, -m, ..., -2, -1. + EQ is what to return if GROUP1 and GROUP2 are the same. */ +static int +group_cmp (int group1, int group2, int eq) +{ + if (group1 == group2) + return eq; + else if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0)) + return group1 - group2; + else + return group2 - group1; +} + +/* Compare clusters CL1 & CL2 by the order that they should appear in + output. */ +static int +hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) +{ + /* If one cluster is deeper than the other, use its ancestor at the same + level, so that finding the common ancestor is straightforward. + + clN->depth > 0 means that clN->parent != NULL (see hol_add_cluster) */ + while (cl1->depth > cl2->depth) + cl1 = cl1->parent; + while (cl2->depth > cl1->depth) + cl2 = cl2->parent; + + /* Now reduce both clusters to their ancestors at the point where both have + a common parent; these can be directly compared. */ + while (cl1->parent != cl2->parent) + cl1 = cl1->parent, cl2 = cl2->parent; + + return group_cmp (cl1->group, cl2->group, cl2->index - cl1->index); +} + +/* Return the ancestor of CL that's just below the root (i.e., has a parent + of 0). */ +static struct hol_cluster * +hol_cluster_base (struct hol_cluster *cl) +{ + while (cl->parent) + cl = cl->parent; + return cl; +} + +/* Return true if CL1 is a child of CL2. */ +static int +hol_cluster_is_child (const struct hol_cluster *cl1, + const struct hol_cluster *cl2) +{ + while (cl1 && cl1 != cl2) + cl1 = cl1->parent; + return cl1 == cl2; +} + +/* Given the name of an OPTION_DOC option, modifies NAME to start at the tail + that should be used for comparisons, and returns true iff it should be + treated as a non-option. */ +static int +canon_doc_option (const char **name) +{ + int non_opt; + + if (!*name) + non_opt = 1; + else + { + /* Skip initial whitespace. */ + while (isspace ((unsigned char) **name)) + (*name)++; + /* Decide whether this looks like an option (leading '-') or not. */ + non_opt = (**name != '-'); + /* Skip until part of name used for sorting. */ + while (**name && !isalnum ((unsigned char) **name)) + (*name)++; + } + return non_opt; +} + +#define HOL_ENTRY_PTRCMP(a,b) ((a)->ord < (b)->ord ? -1 : 1) + +/* Order ENTRY1 & ENTRY2 by the order which they should appear in a help + listing. */ +static int +hol_entry_cmp (const struct hol_entry *entry1, + const struct hol_entry *entry2) +{ + /* The group numbers by which the entries should be ordered; if either is + in a cluster, then this is just the group within the cluster. */ + int group1 = entry1->group, group2 = entry2->group; + int rc; + + if (entry1->cluster != entry2->cluster) + { + /* The entries are not within the same cluster, so we can't compare them + directly, we have to use the appropriate clustering level too. */ + if (! entry1->cluster) + /* ENTRY1 is at the "base level", not in a cluster, so we have to + compare it's group number with that of the base cluster in which + ENTRY2 resides. Note that if they're in the same group, the + clustered option always comes laster. */ + return group_cmp (group1, hol_cluster_base (entry2->cluster)->group, -1); + else if (! entry2->cluster) + /* Likewise, but ENTRY2's not in a cluster. */ + return group_cmp (hol_cluster_base (entry1->cluster)->group, group2, 1); + else + /* Both entries are in clusters, we can just compare the clusters. */ + return (rc = hol_cluster_cmp (entry1->cluster, entry2->cluster)) ? + rc : HOL_ENTRY_PTRCMP (entry1, entry2); + } + else if (group1 == group2) + /* The entries are both in the same cluster and group, so compare them + alphabetically. */ + { + int short1 = hol_entry_first_short (entry1); + int short2 = hol_entry_first_short (entry2); + int doc1 = odoc (entry1->opt); + int doc2 = odoc (entry2->opt); + const char *long1 = hol_entry_first_long (entry1); + const char *long2 = hol_entry_first_long (entry2); + + if (doc1) + doc1 = canon_doc_option (&long1); + if (doc2) + doc2 = canon_doc_option (&long2); + + if (doc1 != doc2) + /* "documentation" options always follow normal options (or + documentation options that *look* like normal options). */ + return doc1 - doc2; + else if (!short1 && !short2 && long1 && long2) + /* Only long options. */ + return (rc = __strcasecmp (long1, long2)) ? + rc : HOL_ENTRY_PTRCMP (entry1, entry2); + else + /* Compare short/short, long/short, short/long, using the first + character of long options. Entries without *any* valid + options (such as options with OPTION_HIDDEN set) will be put + first, but as they're not displayed, it doesn't matter where + they are. */ + { + unsigned char first1 = short1 ? short1 : long1 ? *long1 : 0; + unsigned char first2 = short2 ? short2 : long2 ? *long2 : 0; + /* Use tolower, not _tolower, since only the former is + guaranteed to work on something already lower case. */ + int lower_cmp = tolower (first1) - tolower (first2); + /* Compare ignoring case, except when the options are both the + same letter, in which case lower-case always comes first. */ + return lower_cmp ? lower_cmp : + (rc = first2 - first1) ? + rc : HOL_ENTRY_PTRCMP (entry1, entry2); + } + } + else + /* Within the same cluster, but not the same group, so just compare + groups. */ + return group_cmp (group1, group2, HOL_ENTRY_PTRCMP (entry1, entry2)); +} + +/* Version of hol_entry_cmp with correct signature for qsort. */ +static int +hol_entry_qcmp (const void *entry1_v, const void *entry2_v) +{ + return hol_entry_cmp (entry1_v, entry2_v); +} + +/* Sort HOL by group and alphabetically by option name (with short options + taking precedence over long). Since the sorting is for display purposes + only, the shadowing of options isn't effected. */ +static void +hol_sort (struct hol *hol) +{ + if (hol->num_entries > 0) + { + unsigned i; + struct hol_entry *e; + for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++) + e->ord = i; + qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry), + hol_entry_qcmp); + } +} + +/* Append MORE to HOL, destroying MORE in the process. Options in HOL shadow + any in MORE with the same name. */ +static void +hol_append (struct hol *hol, struct hol *more) +{ + struct hol_cluster **cl_end = &hol->clusters; + + /* Steal MORE's cluster list, and add it to the end of HOL's. */ + while (*cl_end) + cl_end = &(*cl_end)->next; + *cl_end = more->clusters; + more->clusters = 0; + + /* Merge entries. */ + if (more->num_entries > 0) + { + if (hol->num_entries == 0) + { + hol->num_entries = more->num_entries; + hol->entries = more->entries; + hol->short_options = more->short_options; + more->num_entries = 0; /* Mark MORE's fields as invalid. */ + } + else + /* Append the entries in MORE to those in HOL, taking care to only add + non-shadowed SHORT_OPTIONS values. */ + { + unsigned left; + char *so, *more_so; + struct hol_entry *e; + unsigned num_entries = hol->num_entries + more->num_entries; + struct hol_entry *entries = + malloc (num_entries * sizeof (struct hol_entry)); + unsigned hol_so_len = strlen (hol->short_options); + char *short_options = + malloc (hol_so_len + strlen (more->short_options) + 1); + + assert (entries && short_options); + if (SIZE_MAX <= UINT_MAX) + assert (num_entries <= SIZE_MAX / sizeof (struct hol_entry)); + + __mempcpy (__mempcpy (entries, hol->entries, + hol->num_entries * sizeof (struct hol_entry)), + more->entries, + more->num_entries * sizeof (struct hol_entry)); + + __mempcpy (short_options, hol->short_options, hol_so_len); + + /* Fix up the short options pointers from HOL. */ + for (e = entries, left = hol->num_entries; left > 0; e++, left--) + e->short_options = + short_options + (e->short_options - hol->short_options); + + /* Now add the short options from MORE, fixing up its entries + too. */ + so = short_options + hol_so_len; + more_so = more->short_options; + for (left = more->num_entries; left > 0; e++, left--) + { + int opts_left; + const struct argp_option *opt; + + e->short_options = so; + + for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--) + { + int ch = *more_so; + if (oshort (opt) && ch == opt->key) + /* The next short option in MORE_SO, CH, is from OPT. */ + { + if (! find_char (ch, short_options, + short_options + hol_so_len)) + /* The short option CH isn't shadowed by HOL's options, + so add it to the sum. */ + *so++ = ch; + more_so++; + } + } + } + + *so = '\0'; + + free (hol->entries); + free (hol->short_options); + + hol->entries = entries; + hol->num_entries = num_entries; + hol->short_options = short_options; + } + } + + hol_free (more); +} + +/* Inserts enough spaces to make sure STREAM is at column COL. */ +static void +indent_to (argp_fmtstream_t stream, unsigned col) +{ + int needed = col - __argp_fmtstream_point (stream); + while (needed-- > 0) + __argp_fmtstream_putc (stream, ' '); +} + +/* Output to STREAM either a space, or a newline if there isn't room for at + least ENSURE characters before the right margin. */ +static void +space (argp_fmtstream_t stream, size_t ensure) +{ + if (__argp_fmtstream_point (stream) + ensure + >= __argp_fmtstream_rmargin (stream)) + __argp_fmtstream_putc (stream, '\n'); + else + __argp_fmtstream_putc (stream, ' '); +} + +/* If the option REAL has an argument, we print it in using the printf + format REQ_FMT or OPT_FMT depending on whether it's a required or + optional argument. */ +static void +arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt, + const char *domain, argp_fmtstream_t stream) +{ + if (real->arg) + { + if (real->flags & OPTION_ARG_OPTIONAL) + __argp_fmtstream_printf (stream, opt_fmt, + dgettext (domain, real->arg)); + else + __argp_fmtstream_printf (stream, req_fmt, + dgettext (domain, real->arg)); + } +} + +/* Helper functions for hol_entry_help. */ + +/* State used during the execution of hol_help. */ +struct hol_help_state +{ + /* PREV_ENTRY should contain the previous entry printed, or 0. */ + struct hol_entry *prev_entry; + + /* If an entry is in a different group from the previous one, and SEP_GROUPS + is true, then a blank line will be printed before any output. */ + int sep_groups; + + /* True if a duplicate option argument was suppressed (only ever set if + UPARAMS.dup_args is false). */ + int suppressed_dup_arg; +}; + +/* Some state used while printing a help entry (used to communicate with + helper functions). See the doc for hol_entry_help for more info, as most + of the fields are copied from its arguments. */ +struct pentry_state +{ + const struct hol_entry *entry; + argp_fmtstream_t stream; + struct hol_help_state *hhstate; + + /* True if nothing's been printed so far. */ + int first; + + /* If non-zero, the state that was used to print this help. */ + const struct argp_state *state; +}; + +/* If a user doc filter should be applied to DOC, do so. */ +static const char * +filter_doc (const char *doc, int key, const struct argp *argp, + const struct argp_state *state) +{ + if (argp->help_filter) + /* We must apply a user filter to this output. */ + { + void *input = __argp_input (argp, state); + return (*argp->help_filter) (key, doc, input); + } + else + /* No filter. */ + return doc; +} + +/* Prints STR as a header line, with the margin lines set appropriately, and + notes the fact that groups should be separated with a blank line. ARGP is + the argp that should dictate any user doc filtering to take place. Note + that the previous wrap margin isn't restored, but the left margin is reset + to 0. */ +static void +print_header (const char *str, const struct argp *argp, + struct pentry_state *pest) +{ + const char *tstr = dgettext (argp->argp_domain, str); + const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state); + + if (fstr) + { + if (*fstr) + { + if (pest->hhstate->prev_entry) + /* Precede with a blank line. */ + __argp_fmtstream_putc (pest->stream, '\n'); + indent_to (pest->stream, uparams.header_col); + __argp_fmtstream_set_lmargin (pest->stream, uparams.header_col); + __argp_fmtstream_set_wmargin (pest->stream, uparams.header_col); + __argp_fmtstream_puts (pest->stream, fstr); + __argp_fmtstream_set_lmargin (pest->stream, 0); + __argp_fmtstream_putc (pest->stream, '\n'); + } + + pest->hhstate->sep_groups = 1; /* Separate subsequent groups. */ + } + + if (fstr != tstr) + free ((char *) fstr); +} + +/* Inserts a comma if this isn't the first item on the line, and then makes + sure we're at least to column COL. If this *is* the first item on a line, + prints any pending whitespace/headers that should precede this line. Also + clears FIRST. */ +static void +comma (unsigned col, struct pentry_state *pest) +{ + if (pest->first) + { + const struct hol_entry *pe = pest->hhstate->prev_entry; + const struct hol_cluster *cl = pest->entry->cluster; + + if (pest->hhstate->sep_groups && pe && pest->entry->group != pe->group) + __argp_fmtstream_putc (pest->stream, '\n'); + + if (cl && cl->header && *cl->header + && (!pe + || (pe->cluster != cl + && !hol_cluster_is_child (pe->cluster, cl)))) + /* If we're changing clusters, then this must be the start of the + ENTRY's cluster unless that is an ancestor of the previous one + (in which case we had just popped into a sub-cluster for a bit). + If so, then print the cluster's header line. */ + { + int old_wm = __argp_fmtstream_wmargin (pest->stream); + print_header (cl->header, cl->argp, pest); + __argp_fmtstream_set_wmargin (pest->stream, old_wm); + } + + pest->first = 0; + } + else + __argp_fmtstream_puts (pest->stream, ", "); + + indent_to (pest->stream, col); +} + +/* Print help for ENTRY to STREAM. */ +static void +hol_entry_help (struct hol_entry *entry, const struct argp_state *state, + argp_fmtstream_t stream, struct hol_help_state *hhstate) +{ + unsigned num; + const struct argp_option *real = entry->opt, *opt; + char *so = entry->short_options; + int have_long_opt = 0; /* We have any long options. */ + /* Saved margins. */ + int old_lm = __argp_fmtstream_set_lmargin (stream, 0); + int old_wm = __argp_fmtstream_wmargin (stream); + /* PEST is a state block holding some of our variables that we'd like to + share with helper functions. */ + struct pentry_state pest; + + pest.entry = entry; + pest.stream = stream; + pest.hhstate = hhstate; + pest.first = 1; + pest.state = state; + + if (! odoc (real)) + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (opt->name && ovisible (opt)) + { + have_long_opt = 1; + break; + } + + /* First emit short options. */ + __argp_fmtstream_set_wmargin (stream, uparams.short_opt_col); /* For truly bizarre cases. */ + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (oshort (opt) && opt->key == *so) + /* OPT has a valid (non shadowed) short option. */ + { + if (ovisible (opt)) + { + comma (uparams.short_opt_col, &pest); + __argp_fmtstream_putc (stream, '-'); + __argp_fmtstream_putc (stream, *so); + if (!have_long_opt || uparams.dup_args) + arg (real, " %s", "[%s]", state->root_argp->argp_domain, stream); + else if (real->arg) + hhstate->suppressed_dup_arg = 1; + } + so++; + } + + /* Now, long options. */ + if (odoc (real)) + /* A "documentation" option. */ + { + __argp_fmtstream_set_wmargin (stream, uparams.doc_opt_col); + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (opt->name && *opt->name && ovisible (opt)) + { + comma (uparams.doc_opt_col, &pest); + /* Calling dgettext here isn't quite right, since sorting will + have been done on the original; but documentation options + should be pretty rare anyway... */ + __argp_fmtstream_puts (stream, + onotrans (opt) ? + opt->name : + dgettext (state->root_argp->argp_domain, + opt->name)); + } + } + else + /* A real long option. */ + { + int first_long_opt = 1; + + __argp_fmtstream_set_wmargin (stream, uparams.long_opt_col); + for (opt = real, num = entry->num; num > 0; opt++, num--) + if (opt->name && ovisible (opt)) + { + comma (uparams.long_opt_col, &pest); + __argp_fmtstream_printf (stream, "--%s", opt->name); + if (first_long_opt || uparams.dup_args) + arg (real, "=%s", "[=%s]", state->root_argp->argp_domain, + stream); + else if (real->arg) + hhstate->suppressed_dup_arg = 1; + } + } + + /* Next, documentation strings. */ + __argp_fmtstream_set_lmargin (stream, 0); + + if (pest.first) + { + /* Didn't print any switches, what's up? */ + if (!oshort (real) && !real->name) + /* This is a group header, print it nicely. */ + print_header (real->doc, entry->argp, &pest); + else + /* Just a totally shadowed option or null header; print nothing. */ + goto cleanup; /* Just return, after cleaning up. */ + } + else + { + const char *tstr = real->doc ? dgettext (state->root_argp->argp_domain, + real->doc) : 0; + const char *fstr = filter_doc (tstr, real->key, entry->argp, state); + if (fstr && *fstr) + { + unsigned int col = __argp_fmtstream_point (stream); + + __argp_fmtstream_set_lmargin (stream, uparams.opt_doc_col); + __argp_fmtstream_set_wmargin (stream, uparams.opt_doc_col); + + if (col > (unsigned int) (uparams.opt_doc_col + 3)) + __argp_fmtstream_putc (stream, '\n'); + else if (col >= (unsigned int) uparams.opt_doc_col) + __argp_fmtstream_puts (stream, " "); + else + indent_to (stream, uparams.opt_doc_col); + + __argp_fmtstream_puts (stream, fstr); + } + if (fstr && fstr != tstr) + free ((char *) fstr); + + /* Reset the left margin. */ + __argp_fmtstream_set_lmargin (stream, 0); + __argp_fmtstream_putc (stream, '\n'); + } + + hhstate->prev_entry = entry; + +cleanup: + __argp_fmtstream_set_lmargin (stream, old_lm); + __argp_fmtstream_set_wmargin (stream, old_wm); +} + +/* Output a long help message about the options in HOL to STREAM. */ +static void +hol_help (struct hol *hol, const struct argp_state *state, + argp_fmtstream_t stream) +{ + unsigned num; + struct hol_entry *entry; + struct hol_help_state hhstate = { 0, 0, 0 }; + + for (entry = hol->entries, num = hol->num_entries; num > 0; entry++, num--) + hol_entry_help (entry, state, stream, &hhstate); + + if (hhstate.suppressed_dup_arg && uparams.dup_args_note) + { + const char *tstr = dgettext (state->root_argp->argp_domain, "\ +Mandatory or optional arguments to long options are also mandatory or \ +optional for any corresponding short options."); + const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_DUP_ARGS_NOTE, + state ? state->root_argp : 0, state); + if (fstr && *fstr) + { + __argp_fmtstream_putc (stream, '\n'); + __argp_fmtstream_puts (stream, fstr); + __argp_fmtstream_putc (stream, '\n'); + } + if (fstr && fstr != tstr) + free ((char *) fstr); + } +} + +/* Helper functions for hol_usage. */ + +/* If OPT is a short option without an arg, append its key to the string + pointer pointer to by COOKIE, and advance the pointer. */ +static int +add_argless_short_opt (const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie) +{ + char **snao_end = cookie; + if (!(opt->arg || real->arg) + && !((opt->flags | real->flags) & OPTION_NO_USAGE)) + *(*snao_end)++ = opt->key; + return 0; +} + +/* If OPT is a short option with an arg, output a usage entry for it to the + stream pointed at by COOKIE. */ +static int +usage_argful_short_opt (const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie) +{ + argp_fmtstream_t stream = cookie; + const char *arg = opt->arg; + int flags = opt->flags | real->flags; + + if (! arg) + arg = real->arg; + + if (arg && !(flags & OPTION_NO_USAGE)) + { + arg = dgettext (domain, arg); + + if (flags & OPTION_ARG_OPTIONAL) + __argp_fmtstream_printf (stream, " [-%c[%s]]", opt->key, arg); + else + { + /* Manually do line wrapping so that it (probably) won't + get wrapped at the embedded space. */ + space (stream, 6 + strlen (arg)); + __argp_fmtstream_printf (stream, "[-%c %s]", opt->key, arg); + } + } + + return 0; +} + +/* Output a usage entry for the long option opt to the stream pointed at by + COOKIE. */ +static int +usage_long_opt (const struct argp_option *opt, + const struct argp_option *real, + const char *domain, void *cookie) +{ + argp_fmtstream_t stream = cookie; + const char *arg = opt->arg; + int flags = opt->flags | real->flags; + + if (! arg) + arg = real->arg; + + if (! (flags & OPTION_NO_USAGE) && !odoc (opt)) + { + if (arg) + { + arg = dgettext (domain, arg); + if (flags & OPTION_ARG_OPTIONAL) + __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg); + else + __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg); + } + else + __argp_fmtstream_printf (stream, " [--%s]", opt->name); + } + + return 0; +} + +/* Print a short usage description for the arguments in HOL to STREAM. */ +static void +hol_usage (struct hol *hol, argp_fmtstream_t stream) +{ + if (hol->num_entries > 0) + { + unsigned nentries; + struct hol_entry *entry; + char *short_no_arg_opts = alloca (strlen (hol->short_options) + 1); + char *snao_end = short_no_arg_opts; + + /* First we put a list of short options without arguments. */ + for (entry = hol->entries, nentries = hol->num_entries + ; nentries > 0 + ; entry++, nentries--) + hol_entry_short_iterate (entry, add_argless_short_opt, + entry->argp->argp_domain, &snao_end); + if (snao_end > short_no_arg_opts) + { + *snao_end++ = 0; + __argp_fmtstream_printf (stream, " [-%s]", short_no_arg_opts); + } + + /* Now a list of short options *with* arguments. */ + for (entry = hol->entries, nentries = hol->num_entries + ; nentries > 0 + ; entry++, nentries--) + hol_entry_short_iterate (entry, usage_argful_short_opt, + entry->argp->argp_domain, stream); + + /* Finally, a list of long options (whew!). */ + for (entry = hol->entries, nentries = hol->num_entries + ; nentries > 0 + ; entry++, nentries--) + hol_entry_long_iterate (entry, usage_long_opt, + entry->argp->argp_domain, stream); + } +} + +/* Make a HOL containing all levels of options in ARGP. CLUSTER is the + cluster in which ARGP's entries should be clustered, or 0. */ +static struct hol * +argp_hol (const struct argp *argp, struct hol_cluster *cluster) +{ + const struct argp_child *child = argp->children; + struct hol *hol = make_hol (argp, cluster); + if (child) + while (child->argp) + { + struct hol_cluster *child_cluster = + ((child->group || child->header) + /* Put CHILD->argp within its own cluster. */ + ? hol_add_cluster (hol, child->group, child->header, + child - argp->children, cluster, argp) + /* Just merge it into the parent's cluster. */ + : cluster); + hol_append (hol, argp_hol (child->argp, child_cluster)) ; + child++; + } + return hol; +} + +/* Calculate how many different levels with alternative args strings exist in + ARGP. */ +static size_t +argp_args_levels (const struct argp *argp) +{ + size_t levels = 0; + const struct argp_child *child = argp->children; + + if (argp->args_doc && strchr (argp->args_doc, '\n')) + levels++; + + if (child) + while (child->argp) + levels += argp_args_levels ((child++)->argp); + + return levels; +} + +/* Print all the non-option args documented in ARGP to STREAM. Any output is + preceded by a space. LEVELS is a pointer to a byte vector the length + returned by argp_args_levels; it should be initialized to zero, and + updated by this routine for the next call if ADVANCE is true. True is + returned as long as there are more patterns to output. */ +static int +argp_args_usage (const struct argp *argp, const struct argp_state *state, + char **levels, int advance, argp_fmtstream_t stream) +{ + char *our_level = *levels; + int multiple = 0; + const struct argp_child *child = argp->children; + const char *tdoc = dgettext (argp->argp_domain, argp->args_doc), *nl = 0; + const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state); + + if (fdoc) + { + const char *cp = fdoc; + nl = __strchrnul (cp, '\n'); + if (*nl != '\0') + /* This is a "multi-level" args doc; advance to the correct position + as determined by our state in LEVELS, and update LEVELS. */ + { + int i; + multiple = 1; + for (i = 0; i < *our_level; i++) + cp = nl + 1, nl = __strchrnul (cp, '\n'); + (*levels)++; + } + + /* Manually do line wrapping so that it (probably) won't get wrapped at + any embedded spaces. */ + space (stream, 1 + mbsnwidth (cp, nl - cp, MBSW_STOP_AT_NUL)); + + __argp_fmtstream_write (stream, cp, nl - cp); + } + if (fdoc && fdoc != tdoc) + free ((char *)fdoc); /* Free user's modified doc string. */ + + if (child) + while (child->argp) + advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream); + + if (advance && multiple) + { + /* Need to increment our level. */ + if (*nl) + /* There's more we can do here. */ + { + (*our_level)++; + advance = 0; /* Our parent shouldn't advance also. */ + } + else if (*our_level > 0) + /* We had multiple levels, but used them up; reset to zero. */ + *our_level = 0; + } + + return !advance; +} + +/* Print the documentation for ARGP to STREAM; if POST is false, then + everything preceding a '\v' character in the documentation strings (or + the whole string, for those with none) is printed, otherwise, everything + following the '\v' character (nothing for strings without). Each separate + bit of documentation is separated a blank line, and if PRE_BLANK is true, + then the first is as well. If FIRST_ONLY is true, only the first + occurrence is output. Returns true if anything was output. */ +static int +argp_doc (const struct argp *argp, const struct argp_state *state, + int post, int pre_blank, int first_only, + argp_fmtstream_t stream) +{ + const char *text; + const char *inp_text; + size_t inp_text_len = 0; + const char *trans_text; + void *input = 0; + int anything = 0; + const struct argp_child *child = argp->children; + + if (argp->doc) + { + char *vt = strchr (argp->doc, '\v'); + if (vt) + { + if (post) + { + inp_text = vt + 1; + if (! *inp_text) + inp_text = 0; + } + else + { + inp_text_len = vt - argp->doc; + inp_text = inp_text_len ? __strndup (argp->doc, inp_text_len) : 0; + } + } + else + inp_text = post ? 0 : argp->doc; + trans_text = inp_text ? dgettext (argp->argp_domain, inp_text) : NULL; + } + else + trans_text = inp_text = 0; + + if (argp->help_filter) + /* We have to filter the doc strings. */ + { + input = __argp_input (argp, state); + text = + (*argp->help_filter) (post + ? ARGP_KEY_HELP_POST_DOC + : ARGP_KEY_HELP_PRE_DOC, + trans_text, input); + } + else + text = (const char *) trans_text; + + if (text) + { + if (pre_blank) + __argp_fmtstream_putc (stream, '\n'); + + __argp_fmtstream_puts (stream, text); + + if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) + __argp_fmtstream_putc (stream, '\n'); + + anything = 1; + } + + if (text && text != trans_text) + free ((char *) text); /* Free TEXT returned from the help filter. */ + + if (inp_text && inp_text_len) + free ((char *) inp_text); /* We copied INP_TEXT, so free it now. */ + + if (post && argp->help_filter) + /* Now see if we have to output an ARGP_KEY_HELP_EXTRA text. */ + { + text = (*argp->help_filter) (ARGP_KEY_HELP_EXTRA, 0, input); + if (text) + { + if (anything || pre_blank) + __argp_fmtstream_putc (stream, '\n'); + __argp_fmtstream_puts (stream, text); + free ((char *) text); + if (__argp_fmtstream_point (stream) + > __argp_fmtstream_lmargin (stream)) + __argp_fmtstream_putc (stream, '\n'); + anything = 1; + } + } + + if (child) + while (child->argp && !(first_only && anything)) + anything |= + argp_doc ((child++)->argp, state, + post, anything || pre_blank, first_only, + stream); + + return anything; +} + +/* Output a usage message for ARGP to STREAM. If called from + argp_state_help, STATE is the relevant parsing state. FLAGS are from the + set ARGP_HELP_*. NAME is what to use wherever a "program name" is + needed. */ +static void +_help (const struct argp *argp, const struct argp_state *state, FILE *stream, + unsigned flags, char *name) +{ + int anything = 0; /* Whether we've output anything. */ + struct hol *hol = 0; + argp_fmtstream_t fs; + + if (! stream) + return; + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __flockfile (stream); +#endif + + if (! uparams.valid) + fill_in_uparams (state); + + fs = __argp_make_fmtstream (stream, 0, uparams.rmargin, 0); + if (! fs) + { +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + return; + } + + if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG)) + { + hol = argp_hol (argp, 0); + + /* If present, these options always come last. */ + hol_set_group (hol, "help", -1); + hol_set_group (hol, "version", -1); + + hol_sort (hol); + } + + if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE)) + /* Print a short "Usage:" message. */ + { + int first_pattern = 1, more_patterns; + size_t num_pattern_levels = argp_args_levels (argp); + char *pattern_levels = alloca (num_pattern_levels); + + memset (pattern_levels, 0, num_pattern_levels); + + do + { + int old_lm; + int old_wm = __argp_fmtstream_set_wmargin (fs, uparams.usage_indent); + char *levels = pattern_levels; + + if (first_pattern) + __argp_fmtstream_printf (fs, "%s %s", + dgettext (argp->argp_domain, "Usage:"), + name); + else + __argp_fmtstream_printf (fs, "%s %s", + dgettext (argp->argp_domain, " or: "), + name); + + /* We set the lmargin as well as the wmargin, because hol_usage + manually wraps options with newline to avoid annoying breaks. */ + old_lm = __argp_fmtstream_set_lmargin (fs, uparams.usage_indent); + + if (flags & ARGP_HELP_SHORT_USAGE) + /* Just show where the options go. */ + { + if (hol->num_entries > 0) + __argp_fmtstream_puts (fs, dgettext (argp->argp_domain, + " [OPTION...]")); + } + else + /* Actually print the options. */ + { + hol_usage (hol, fs); + flags |= ARGP_HELP_SHORT_USAGE; /* But only do so once. */ + } + + more_patterns = argp_args_usage (argp, state, &levels, 1, fs); + + __argp_fmtstream_set_wmargin (fs, old_wm); + __argp_fmtstream_set_lmargin (fs, old_lm); + + __argp_fmtstream_putc (fs, '\n'); + anything = 1; + + first_pattern = 0; + } + while (more_patterns); + } + + if (flags & ARGP_HELP_PRE_DOC) + anything |= argp_doc (argp, state, 0, 0, 1, fs); + + if (flags & ARGP_HELP_SEE) + { + __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "\ +Try '%s --help' or '%s --usage' for more information.\n"), + name, name); + anything = 1; + } + + if (flags & ARGP_HELP_LONG) + /* Print a long, detailed help message. */ + { + /* Print info about all the options. */ + if (hol->num_entries > 0) + { + if (anything) + __argp_fmtstream_putc (fs, '\n'); + hol_help (hol, state, fs); + anything = 1; + } + } + + if (flags & ARGP_HELP_POST_DOC) + /* Print any documentation strings at the end. */ + anything |= argp_doc (argp, state, 1, anything, 0, fs); + + if ((flags & ARGP_HELP_BUG_ADDR) && argp_program_bug_address) + { + if (anything) + __argp_fmtstream_putc (fs, '\n'); + __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, + "Report bugs to %s.\n"), + argp_program_bug_address); + anything = 1; + } + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + + if (hol) + hol_free (hol); + + __argp_fmtstream_free (fs); +} + +/* Output a usage message for ARGP to STREAM. FLAGS are from the set + ARGP_HELP_*. NAME is what to use wherever a "program name" is needed. */ +void __argp_help (const struct argp *argp, FILE *stream, + unsigned flags, char *name) +{ + struct argp_state state; + memset (&state, 0, sizeof state); + state.root_argp = argp; + _help (argp, &state, stream, flags, name); +} +#ifdef weak_alias +weak_alias (__argp_help, argp_help) +#endif + +#if ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME) +char * +__argp_short_program_name (void) +{ +# if HAVE_DECL_PROGRAM_INVOCATION_NAME + return __argp_base_name (program_invocation_name); +# else + /* FIXME: What now? Miles suggests that it is better to use NULL, + but currently the value is passed on directly to fputs_unlocked, + so that requires more changes. */ +# if __GNUC__ +# warning No reasonable value to return +# endif /* __GNUC__ */ + return ""; +# endif +} +#endif + +/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are + from the set ARGP_HELP_*. */ +void +__argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags) +{ + if ((!state || ! (state->flags & ARGP_NO_ERRS)) && stream) + { + if (state && (state->flags & ARGP_LONG_ONLY)) + flags |= ARGP_HELP_LONG_ONLY; + + _help (state ? state->root_argp : 0, state, stream, flags, + state ? state->name : __argp_short_program_name ()); + + if (!state || ! (state->flags & ARGP_NO_EXIT)) + { + if (flags & ARGP_HELP_EXIT_ERR) + exit (argp_err_exit_status); + if (flags & ARGP_HELP_EXIT_OK) + exit (0); + } + } +} +#ifdef weak_alias +weak_alias (__argp_state_help, argp_state_help) +#endif + +/* If appropriate, print the printf string FMT and following args, preceded + by the program name and ':', to stderr, and followed by a "Try ... --help" + message, then exit (1). */ +void +__argp_error (const struct argp_state *state, const char *fmt, ...) +{ + if (!state || !(state->flags & ARGP_NO_ERRS)) + { + FILE *stream = state ? state->err_stream : stderr; + + if (stream) + { + va_list ap; + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __flockfile (stream); +#endif + + va_start (ap, fmt); + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + { + char *buf; + + if (__asprintf (&buf, fmt, ap) < 0) + buf = NULL; + + __fwprintf (stream, L"%s: %s\n", + state ? state->name : __argp_short_program_name (), + buf); + + free (buf); + } + else +#endif + { + fputs_unlocked (state + ? state->name : __argp_short_program_name (), + stream); + putc_unlocked (':', stream); + putc_unlocked (' ', stream); + + vfprintf (stream, fmt, ap); + + putc_unlocked ('\n', stream); + } + + __argp_state_help (state, stream, ARGP_HELP_STD_ERR); + + va_end (ap); + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + } + } +} +#ifdef weak_alias +weak_alias (__argp_error, argp_error) +#endif + +/* Similar to the standard gnu error-reporting function error(), but will + respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print + to STATE->err_stream. This is useful for argument parsing code that is + shared between program startup (when exiting is desired) and runtime + option parsing (when typically an error code is returned instead). The + difference between this function and argp_error is that the latter is for + *parsing errors*, and the former is for other problems that occur during + parsing but don't reflect a (syntactic) problem with the input. */ +void +__argp_failure (const struct argp_state *state, int status, int errnum, + const char *fmt, ...) +{ + if (!state || !(state->flags & ARGP_NO_ERRS)) + { + FILE *stream = state ? state->err_stream : stderr; + + if (stream) + { +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __flockfile (stream); +#endif + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + __fwprintf (stream, L"%s", + state ? state->name : __argp_short_program_name ()); + else +#endif + fputs_unlocked (state + ? state->name : __argp_short_program_name (), + stream); + + if (fmt) + { + va_list ap; + + va_start (ap, fmt); +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + { + char *buf; + + if (__asprintf (&buf, fmt, ap) < 0) + buf = NULL; + + __fwprintf (stream, L": %s", buf); + + free (buf); + } + else +#endif + { + putc_unlocked (':', stream); + putc_unlocked (' ', stream); + + vfprintf (stream, fmt, ap); + } + + va_end (ap); + } + + if (errnum) + { + char buf[200]; + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + __fwprintf (stream, L": %s", + __strerror_r (errnum, buf, sizeof (buf))); + else +#endif + { + char const *s = NULL; + putc_unlocked (':', stream); + putc_unlocked (' ', stream); +#if _LIBC || (HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P && !defined strerror_r) + s = __strerror_r (errnum, buf, sizeof buf); +#elif HAVE_DECL_STRERROR_R + if (__strerror_r (errnum, buf, sizeof buf) == 0) + s = buf; +#endif +#if !_LIBC + if (! s && ! (s = strerror (errnum))) + s = dgettext (state->root_argp->argp_domain, + "Unknown system error"); +#endif + fputs (s, stream); + } + } + +#ifdef USE_IN_LIBIO + if (_IO_fwide (stream, 0) > 0) + putwc_unlocked (L'\n', stream); + else +#endif + putc_unlocked ('\n', stream); + +#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) + __funlockfile (stream); +#endif + + if (status && (!state || !(state->flags & ARGP_NO_EXIT))) + exit (status); + } + } +} +#ifdef weak_alias +weak_alias (__argp_failure, argp_failure) +#endif diff --git a/grub-core/gnulib/argp-namefrob.h b/grub-core/gnulib/argp-namefrob.h new file mode 100644 index 000000000..6333958c6 --- /dev/null +++ b/grub-core/gnulib/argp-namefrob.h @@ -0,0 +1,157 @@ +/* Name frobnication for compiling argp outside of glibc + Copyright (C) 1997, 2003, 2007, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if !_LIBC +/* This code is written for inclusion in gnu-libc, and uses names in the + namespace reserved for libc. If we're not compiling in libc, define those + names to be the normal ones instead. */ + +/* argp-parse functions */ +#undef __argp_parse +#define __argp_parse argp_parse +#undef __option_is_end +#define __option_is_end _option_is_end +#undef __option_is_short +#define __option_is_short _option_is_short +#undef __argp_input +#define __argp_input _argp_input + +/* argp-help functions */ +#undef __argp_help +#define __argp_help argp_help +#undef __argp_error +#define __argp_error argp_error +#undef __argp_failure +#define __argp_failure argp_failure +#undef __argp_state_help +#define __argp_state_help argp_state_help +#undef __argp_usage +#define __argp_usage argp_usage + +/* argp-fmtstream functions */ +#undef __argp_make_fmtstream +#define __argp_make_fmtstream argp_make_fmtstream +#undef __argp_fmtstream_free +#define __argp_fmtstream_free argp_fmtstream_free +#undef __argp_fmtstream_putc +#define __argp_fmtstream_putc argp_fmtstream_putc +#undef __argp_fmtstream_puts +#define __argp_fmtstream_puts argp_fmtstream_puts +#undef __argp_fmtstream_write +#define __argp_fmtstream_write argp_fmtstream_write +#undef __argp_fmtstream_printf +#define __argp_fmtstream_printf argp_fmtstream_printf +#undef __argp_fmtstream_set_lmargin +#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin +#undef __argp_fmtstream_set_rmargin +#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin +#undef __argp_fmtstream_set_wmargin +#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin +#undef __argp_fmtstream_point +#define __argp_fmtstream_point argp_fmtstream_point +#undef __argp_fmtstream_update +#define __argp_fmtstream_update _argp_fmtstream_update +#undef __argp_fmtstream_ensure +#define __argp_fmtstream_ensure _argp_fmtstream_ensure +#undef __argp_fmtstream_lmargin +#define __argp_fmtstream_lmargin argp_fmtstream_lmargin +#undef __argp_fmtstream_rmargin +#define __argp_fmtstream_rmargin argp_fmtstream_rmargin +#undef __argp_fmtstream_wmargin +#define __argp_fmtstream_wmargin argp_fmtstream_wmargin + +/* normal libc functions we call */ +#undef __flockfile +#define __flockfile flockfile +#undef __funlockfile +#define __funlockfile funlockfile +#undef __mempcpy +#define __mempcpy mempcpy +#undef __sleep +#define __sleep sleep +#undef __strcasecmp +#define __strcasecmp strcasecmp +#undef __strchrnul +#define __strchrnul strchrnul +#undef __strerror_r +#define __strerror_r strerror_r +#undef __strndup +#define __strndup strndup +#undef __vsnprintf +#define __vsnprintf vsnprintf + +#if defined(HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED +# define clearerr_unlocked(x) clearerr (x) +#endif +#if defined(HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED +# define feof_unlocked(x) feof (x) +#endif +#if defined(HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED +# define ferror_unlocked(x) ferror (x) +#endif +#if defined(HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED +# define fflush_unlocked(x) fflush (x) +#endif +#if defined(HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED +# define fgets_unlocked(x,y,z) fgets (x,y,z) +#endif +#if defined(HAVE_DECL_FPUTC_UNLOCKED) && !HAVE_DECL_FPUTC_UNLOCKED +# define fputc_unlocked(x,y) fputc (x,y) +#endif +#if defined(HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED +# define fputs_unlocked(x,y) fputs (x,y) +#endif +#if defined(HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED +# define fread_unlocked(w,x,y,z) fread (w,x,y,z) +#endif +#if defined(HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED +# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) +#endif +#if defined(HAVE_DECL_GETC_UNLOCKED) && !HAVE_DECL_GETC_UNLOCKED +# define getc_unlocked(x) getc (x) +#endif +#if defined(HAVE_DECL_GETCHAR_UNLOCKED) && !HAVE_DECL_GETCHAR_UNLOCKED +# define getchar_unlocked() getchar () +#endif +#if defined(HAVE_DECL_PUTC_UNLOCKED) && !HAVE_DECL_PUTC_UNLOCKED +# define putc_unlocked(x,y) putc (x,y) +#endif +#if defined(HAVE_DECL_PUTCHAR_UNLOCKED) && !HAVE_DECL_PUTCHAR_UNLOCKED +# define putchar_unlocked(x) putchar (x) +#endif + +#endif /* !_LIBC */ + +#ifndef __set_errno +# define __set_errno(e) (errno = (e)) +#endif + +#if defined GNULIB_ARGP_DISABLE_DIRNAME +# define __argp_base_name(arg) arg +#elif defined GNULIB_ARGP_EXTERN_BASENAME +extern char *__argp_base_name (const char *arg); +#else +# include "dirname.h" +# define __argp_base_name last_component +#endif + +#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME +# define __argp_short_program_name() (program_invocation_short_name) +#else +extern char *__argp_short_program_name (void); +#endif diff --git a/grub-core/gnulib/argp-parse.c b/grub-core/gnulib/argp-parse.c new file mode 100644 index 000000000..67ea32c54 --- /dev/null +++ b/grub-core/gnulib/argp-parse.c @@ -0,0 +1,953 @@ +/* Hierarchical argument parsing, layered over getopt + Copyright (C) 1995-2000, 2002-2004, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef _LIBC +# include +# undef dgettext +# define dgettext(domain, msgid) \ + INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES) +#else +# include "gettext.h" +#endif +#define N_(msgid) msgid + +#include "argp.h" +#include "argp-namefrob.h" + +#define alignto(n, d) ((((n) + (d) - 1) / (d)) * (d)) + +/* Getopt return values. */ +#define KEY_END (-1) /* The end of the options. */ +#define KEY_ARG 1 /* A non-option argument. */ +#define KEY_ERR '?' /* An error parsing the options. */ + +/* The meta-argument used to prevent any further arguments being interpreted + as options. */ +#define QUOTE "--" + +/* The number of bits we steal in a long-option value for our own use. */ +#define GROUP_BITS CHAR_BIT + +/* The number of bits available for the user value. */ +#define USER_BITS ((sizeof ((struct option *)0)->val * CHAR_BIT) - GROUP_BITS) +#define USER_MASK ((1 << USER_BITS) - 1) + +/* EZ alias for ARGP_ERR_UNKNOWN. */ +#define EBADKEY ARGP_ERR_UNKNOWN + +/* Default options. */ + +/* When argp is given the --HANG switch, _ARGP_HANG is set and argp will sleep + for one second intervals, decrementing _ARGP_HANG until it's zero. Thus + you can force the program to continue by attaching a debugger and setting + it to 0 yourself. */ +static volatile int _argp_hang; + +#define OPT_PROGNAME -2 +#define OPT_USAGE -3 +#define OPT_HANG -4 + +static const struct argp_option argp_default_options[] = +{ + {"help", '?', 0, 0, N_("give this help list"), -1}, + {"usage", OPT_USAGE, 0, 0, N_("give a short usage message"), 0}, + {"program-name",OPT_PROGNAME,N_("NAME"), OPTION_HIDDEN, N_("set the program name"), 0}, + {"HANG", OPT_HANG, N_("SECS"), OPTION_ARG_OPTIONAL | OPTION_HIDDEN, + N_("hang for SECS seconds (default 3600)"), 0}, + {NULL, 0, 0, 0, NULL, 0} +}; + +static error_t +argp_default_parser (int key, char *arg, struct argp_state *state) +{ + switch (key) + { + case '?': + __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP); + break; + case OPT_USAGE: + __argp_state_help (state, state->out_stream, + ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK); + break; + + case OPT_PROGNAME: /* Set the program name. */ +#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_NAME + program_invocation_name = arg; +#endif + /* [Note that some systems only have PROGRAM_INVOCATION_SHORT_NAME (aka + __PROGNAME), in which case, PROGRAM_INVOCATION_NAME is just defined + to be that, so we have to be a bit careful here.] */ + + /* Update what we use for messages. */ + state->name = __argp_base_name (arg); + +#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + program_invocation_short_name = state->name; +#endif + + if ((state->flags & (ARGP_PARSE_ARGV0 | ARGP_NO_ERRS)) + == ARGP_PARSE_ARGV0) + /* Update what getopt uses too. */ + state->argv[0] = arg; + + break; + + case OPT_HANG: + _argp_hang = atoi (arg ? arg : "3600"); + while (_argp_hang-- > 0) + __sleep (1); + break; + + default: + return EBADKEY; + } + return 0; +} + +static const struct argp argp_default_argp = + {argp_default_options, &argp_default_parser, NULL, NULL, NULL, NULL, "libc"}; + + +static const struct argp_option argp_version_options[] = +{ + {"version", 'V', 0, 0, N_("print program version"), -1}, + {NULL, 0, 0, 0, NULL, 0} +}; + +static error_t +argp_version_parser (int key, char *arg, struct argp_state *state) +{ + switch (key) + { + case 'V': + if (argp_program_version_hook) + (*argp_program_version_hook) (state->out_stream, state); + else if (argp_program_version) + fprintf (state->out_stream, "%s\n", argp_program_version); + else + __argp_error (state, "%s", + dgettext (state->root_argp->argp_domain, + "(PROGRAM ERROR) No version known!?")); + if (! (state->flags & ARGP_NO_EXIT)) + exit (0); + break; + default: + return EBADKEY; + } + return 0; +} + +static const struct argp argp_version_argp = + {argp_version_options, &argp_version_parser, NULL, NULL, NULL, NULL, "libc"}; + +/* Returns the offset into the getopt long options array LONG_OPTIONS of a + long option with called NAME, or -1 if none is found. Passing NULL as + NAME will return the number of options. */ +static int +find_long_option (struct option *long_options, const char *name) +{ + struct option *l = long_options; + while (l->name != NULL) + if (name != NULL && strcmp (l->name, name) == 0) + return l - long_options; + else + l++; + if (name == NULL) + return l - long_options; + else + return -1; +} + + +/* The state of a "group" during parsing. Each group corresponds to a + particular argp structure from the tree of such descending from the top + level argp passed to argp_parse. */ +struct group +{ + /* This group's parsing function. */ + argp_parser_t parser; + + /* Which argp this group is from. */ + const struct argp *argp; + + /* Points to the point in SHORT_OPTS corresponding to the end of the short + options for this group. We use it to determine from which group a + particular short options is from. */ + char *short_end; + + /* The number of non-option args successfully handled by this parser. */ + unsigned args_processed; + + /* This group's parser's parent's group. */ + struct group *parent; + unsigned parent_index; /* And the our position in the parent. */ + + /* These fields are swapped into and out of the state structure when + calling this group's parser. */ + void *input, **child_inputs; + void *hook; +}; + +/* Call GROUP's parser with KEY and ARG, swapping any group-specific info + from STATE before calling, and back into state afterwards. If GROUP has + no parser, EBADKEY is returned. */ +static error_t +group_parse (struct group *group, struct argp_state *state, int key, char *arg) +{ + if (group->parser) + { + error_t err; + state->hook = group->hook; + state->input = group->input; + state->child_inputs = group->child_inputs; + state->arg_num = group->args_processed; + err = (*group->parser)(key, arg, state); + group->hook = state->hook; + return err; + } + else + return EBADKEY; +} + +struct parser +{ + const struct argp *argp; + + /* SHORT_OPTS is the getopt short options string for the union of all the + groups of options. */ + char *short_opts; + /* LONG_OPTS is the array of getop long option structures for the union of + all the groups of options. */ + struct option *long_opts; + /* OPT_DATA is the getopt data used for the re-entrant getopt. */ + struct _getopt_data opt_data; + + /* States of the various parsing groups. */ + struct group *groups; + /* The end of the GROUPS array. */ + struct group *egroup; + /* A vector containing storage for the CHILD_INPUTS field in all groups. */ + void **child_inputs; + + /* True if we think using getopt is still useful; if false, then + remaining arguments are just passed verbatim with ARGP_KEY_ARG. This is + cleared whenever getopt returns KEY_END, but may be set again if the user + moves the next argument pointer backwards. */ + int try_getopt; + + /* State block supplied to parsing routines. */ + struct argp_state state; + + /* Memory used by this parser. */ + void *storage; +}; + +/* The next usable entries in the various parser tables being filled in by + convert_options. */ +struct parser_convert_state +{ + struct parser *parser; + char *short_end; + struct option *long_end; + void **child_inputs_end; +}; + +/* Converts all options in ARGP (which is put in GROUP) and ancestors + into getopt options stored in SHORT_OPTS and LONG_OPTS; SHORT_END and + CVT->LONG_END are the points at which new options are added. Returns the + next unused group entry. CVT holds state used during the conversion. */ +static struct group * +convert_options (const struct argp *argp, + struct group *parent, unsigned parent_index, + struct group *group, struct parser_convert_state *cvt) +{ + /* REAL is the most recent non-alias value of OPT. */ + const struct argp_option *real = argp->options; + const struct argp_child *children = argp->children; + + if (real || argp->parser) + { + const struct argp_option *opt; + + if (real) + for (opt = real; !__option_is_end (opt); opt++) + { + if (! (opt->flags & OPTION_ALIAS)) + /* OPT isn't an alias, so we can use values from it. */ + real = opt; + + if (! (real->flags & OPTION_DOC)) + /* A real option (not just documentation). */ + { + if (__option_is_short (opt)) + /* OPT can be used as a short option. */ + { + *cvt->short_end++ = opt->key; + if (real->arg) + { + *cvt->short_end++ = ':'; + if (real->flags & OPTION_ARG_OPTIONAL) + *cvt->short_end++ = ':'; + } + *cvt->short_end = '\0'; /* keep 0 terminated */ + } + + if (opt->name + && find_long_option (cvt->parser->long_opts, opt->name) < 0) + /* OPT can be used as a long option. */ + { + cvt->long_end->name = opt->name; + cvt->long_end->has_arg = + (real->arg + ? (real->flags & OPTION_ARG_OPTIONAL + ? optional_argument + : required_argument) + : no_argument); + cvt->long_end->flag = 0; + /* we add a disambiguating code to all the user's + values (which is removed before we actually call + the function to parse the value); this means that + the user loses use of the high 8 bits in all his + values (the sign of the lower bits is preserved + however)... */ + cvt->long_end->val = + ((opt->key ? opt->key : real->key) & USER_MASK) + + (((group - cvt->parser->groups) + 1) << USER_BITS); + + /* Keep the LONG_OPTS list terminated. */ + (++cvt->long_end)->name = NULL; + } + } + } + + group->parser = argp->parser; + group->argp = argp; + group->short_end = cvt->short_end; + group->args_processed = 0; + group->parent = parent; + group->parent_index = parent_index; + group->input = 0; + group->hook = 0; + group->child_inputs = 0; + + if (children) + /* Assign GROUP's CHILD_INPUTS field some space from + CVT->child_inputs_end.*/ + { + unsigned num_children = 0; + while (children[num_children].argp) + num_children++; + group->child_inputs = cvt->child_inputs_end; + cvt->child_inputs_end += num_children; + } + + parent = group++; + } + else + parent = 0; + + if (children) + { + unsigned index = 0; + while (children->argp) + group = + convert_options (children++->argp, parent, index++, group, cvt); + } + + return group; +} + +/* Find the merged set of getopt options, with keys appropriately prefixed. */ +static void +parser_convert (struct parser *parser, const struct argp *argp, int flags) +{ + struct parser_convert_state cvt; + + cvt.parser = parser; + cvt.short_end = parser->short_opts; + cvt.long_end = parser->long_opts; + cvt.child_inputs_end = parser->child_inputs; + + if (flags & ARGP_IN_ORDER) + *cvt.short_end++ = '-'; + else if (flags & ARGP_NO_ARGS) + *cvt.short_end++ = '+'; + *cvt.short_end = '\0'; + + cvt.long_end->name = NULL; + + parser->argp = argp; + + if (argp) + parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt); + else + parser->egroup = parser->groups; /* No parsers at all! */ +} + +/* Lengths of various parser fields which we will allocated. */ +struct parser_sizes +{ + size_t short_len; /* Getopt short options string. */ + size_t long_len; /* Getopt long options vector. */ + size_t num_groups; /* Group structures we allocate. */ + size_t num_child_inputs; /* Child input slots. */ +}; + +/* For ARGP, increments the NUM_GROUPS field in SZS by the total number of + argp structures descended from it, and the SHORT_LEN & LONG_LEN fields by + the maximum lengths of the resulting merged getopt short options string and + long-options array, respectively. */ +static void +calc_sizes (const struct argp *argp, struct parser_sizes *szs) +{ + const struct argp_child *child = argp->children; + const struct argp_option *opt = argp->options; + + if (opt || argp->parser) + { + szs->num_groups++; + if (opt) + { + int num_opts = 0; + while (!__option_is_end (opt++)) + num_opts++; + szs->short_len += num_opts * 3; /* opt + up to 2 ':'s */ + szs->long_len += num_opts; + } + } + + if (child) + while (child->argp) + { + calc_sizes ((child++)->argp, szs); + szs->num_child_inputs++; + } +} + +/* Initializes PARSER to parse ARGP in a manner described by FLAGS. */ +static error_t +parser_init (struct parser *parser, const struct argp *argp, + int argc, char **argv, int flags, void *input) +{ + error_t err = 0; + struct group *group; + struct parser_sizes szs; + struct _getopt_data opt_data = _GETOPT_DATA_INITIALIZER; + char *storage; + size_t glen, gsum; + size_t clen, csum; + size_t llen, lsum; + size_t slen, ssum; + + szs.short_len = (flags & ARGP_NO_ARGS) ? 0 : 1; + szs.long_len = 0; + szs.num_groups = 0; + szs.num_child_inputs = 0; + + if (argp) + calc_sizes (argp, &szs); + + /* Lengths of the various bits of storage used by PARSER. */ + glen = (szs.num_groups + 1) * sizeof (struct group); + clen = szs.num_child_inputs * sizeof (void *); + llen = (szs.long_len + 1) * sizeof (struct option); + slen = szs.short_len + 1; + + /* Sums of previous lengths, properly aligned. There's no need to + align gsum, since struct group is aligned at least as strictly as + void * (since it contains a void * member). And there's no need + to align lsum, since struct option is aligned at least as + strictly as char. */ + gsum = glen; + csum = alignto (gsum + clen, alignof (struct option)); + lsum = csum + llen; + ssum = lsum + slen; + + parser->storage = malloc (ssum); + if (! parser->storage) + return ENOMEM; + + storage = parser->storage; + parser->groups = parser->storage; + parser->child_inputs = (void **) (storage + gsum); + parser->long_opts = (struct option *) (storage + csum); + parser->short_opts = storage + lsum; + parser->opt_data = opt_data; + + memset (parser->child_inputs, 0, clen); + parser_convert (parser, argp, flags); + + memset (&parser->state, 0, sizeof (struct argp_state)); + parser->state.root_argp = parser->argp; + parser->state.argc = argc; + parser->state.argv = argv; + parser->state.flags = flags; + parser->state.err_stream = stderr; + parser->state.out_stream = stdout; + parser->state.next = 0; /* Tell getopt to initialize. */ + parser->state.pstate = parser; + + parser->try_getopt = 1; + + /* Call each parser for the first time, giving it a chance to propagate + values to child parsers. */ + if (parser->groups < parser->egroup) + parser->groups->input = input; + for (group = parser->groups; + group < parser->egroup && (!err || err == EBADKEY); + group++) + { + if (group->parent) + /* If a child parser, get the initial input value from the parent. */ + group->input = group->parent->child_inputs[group->parent_index]; + + if (!group->parser + && group->argp->children && group->argp->children->argp) + /* For the special case where no parsing function is supplied for an + argp, propagate its input to its first child, if any (this just + makes very simple wrapper argps more convenient). */ + group->child_inputs[0] = group->input; + + err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0); + } + if (err == EBADKEY) + err = 0; /* Some parser didn't understand. */ + + if (err) + return err; + + if (parser->state.flags & ARGP_NO_ERRS) + { + parser->opt_data.opterr = 0; + if (parser->state.flags & ARGP_PARSE_ARGV0) + /* getopt always skips ARGV[0], so we have to fake it out. As long + as OPTERR is 0, then it shouldn't actually try to access it. */ + parser->state.argv--, parser->state.argc++; + } + else + parser->opt_data.opterr = 1; /* Print error messages. */ + + if (parser->state.argv == argv && argv[0]) + /* There's an argv[0]; use it for messages. */ + parser->state.name = __argp_base_name (argv[0]); + else + parser->state.name = __argp_short_program_name (); + + return 0; +} + +/* Free any storage consumed by PARSER (but not PARSER itself). */ +static error_t +parser_finalize (struct parser *parser, + error_t err, int arg_ebadkey, int *end_index) +{ + struct group *group; + + if (err == EBADKEY && arg_ebadkey) + /* Suppress errors generated by unparsed arguments. */ + err = 0; + + if (! err) + { + if (parser->state.next == parser->state.argc) + /* We successfully parsed all arguments! Call all the parsers again, + just a few more times... */ + { + for (group = parser->groups; + group < parser->egroup && (!err || err==EBADKEY); + group++) + if (group->args_processed == 0) + err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0); + for (group = parser->egroup - 1; + group >= parser->groups && (!err || err==EBADKEY); + group--) + err = group_parse (group, &parser->state, ARGP_KEY_END, 0); + + if (err == EBADKEY) + err = 0; /* Some parser didn't understand. */ + + /* Tell the user that all arguments are parsed. */ + if (end_index) + *end_index = parser->state.next; + } + else if (end_index) + /* Return any remaining arguments to the user. */ + *end_index = parser->state.next; + else + /* No way to return the remaining arguments, they must be bogus. */ + { + if (!(parser->state.flags & ARGP_NO_ERRS) + && parser->state.err_stream) + fprintf (parser->state.err_stream, + dgettext (parser->argp->argp_domain, + "%s: Too many arguments\n"), + parser->state.name); + err = EBADKEY; + } + } + + /* Okay, we're all done, with either an error or success; call the parsers + to indicate which one. */ + + if (err) + { + /* Maybe print an error message. */ + if (err == EBADKEY) + /* An appropriate message describing what the error was should have + been printed earlier. */ + __argp_state_help (&parser->state, parser->state.err_stream, + ARGP_HELP_STD_ERR); + + /* Since we didn't exit, give each parser an error indication. */ + for (group = parser->groups; group < parser->egroup; group++) + group_parse (group, &parser->state, ARGP_KEY_ERROR, 0); + } + else + /* Notify parsers of success, and propagate back values from parsers. */ + { + /* We pass over the groups in reverse order so that child groups are + given a chance to do there processing before passing back a value to + the parent. */ + for (group = parser->egroup - 1 + ; group >= parser->groups && (!err || err == EBADKEY) + ; group--) + err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0); + if (err == EBADKEY) + err = 0; /* Some parser didn't understand. */ + } + + /* Call parsers once more, to do any final cleanup. Errors are ignored. */ + for (group = parser->egroup - 1; group >= parser->groups; group--) + group_parse (group, &parser->state, ARGP_KEY_FINI, 0); + + if (err == EBADKEY) + err = EINVAL; + + free (parser->storage); + + return err; +} + +/* Call the user parsers to parse the non-option argument VAL, at the current + position, returning any error. The state NEXT pointer is assumed to have + been adjusted (by getopt) to point after this argument; this function will + adjust it correctly to reflect however many args actually end up being + consumed. */ +static error_t +parser_parse_arg (struct parser *parser, char *val) +{ + /* Save the starting value of NEXT, first adjusting it so that the arg + we're parsing is again the front of the arg vector. */ + int index = --parser->state.next; + error_t err = EBADKEY; + struct group *group; + int key = 0; /* Which of ARGP_KEY_ARG[S] we used. */ + + /* Try to parse the argument in each parser. */ + for (group = parser->groups + ; group < parser->egroup && err == EBADKEY + ; group++) + { + parser->state.next++; /* For ARGP_KEY_ARG, consume the arg. */ + key = ARGP_KEY_ARG; + err = group_parse (group, &parser->state, key, val); + + if (err == EBADKEY) + /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */ + { + parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg. */ + key = ARGP_KEY_ARGS; + err = group_parse (group, &parser->state, key, 0); + } + } + + if (! err) + { + if (key == ARGP_KEY_ARGS) + /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't + changed by the user, *all* arguments should be considered + consumed. */ + parser->state.next = parser->state.argc; + + if (parser->state.next > index) + /* Remember that we successfully processed a non-option + argument -- but only if the user hasn't gotten tricky and set + the clock back. */ + (--group)->args_processed += (parser->state.next - index); + else + /* The user wants to reparse some args, give getopt another try. */ + parser->try_getopt = 1; + } + + return err; +} + +/* Call the user parsers to parse the option OPT, with argument VAL, at the + current position, returning any error. */ +static error_t +parser_parse_opt (struct parser *parser, int opt, char *val) +{ + /* The group key encoded in the high bits; 0 for short opts or + group_number + 1 for long opts. */ + int group_key = opt >> USER_BITS; + error_t err = EBADKEY; + + if (group_key == 0) + /* A short option. By comparing OPT's position in SHORT_OPTS to the + various starting positions in each group's SHORT_END field, we can + determine which group OPT came from. */ + { + struct group *group; + char *short_index = strchr (parser->short_opts, opt); + + if (short_index) + for (group = parser->groups; group < parser->egroup; group++) + if (group->short_end > short_index) + { + err = group_parse (group, &parser->state, opt, + parser->opt_data.optarg); + break; + } + } + else + /* A long option. We use shifts instead of masking for extracting + the user value in order to preserve the sign. */ + err = + group_parse (&parser->groups[group_key - 1], &parser->state, + (opt << GROUP_BITS) >> GROUP_BITS, + parser->opt_data.optarg); + + if (err == EBADKEY) + /* At least currently, an option not recognized is an error in the + parser, because we pre-compute which parser is supposed to deal + with each option. */ + { + static const char bad_key_err[] = + N_("(PROGRAM ERROR) Option should have been recognized!?"); + if (group_key == 0) + __argp_error (&parser->state, "-%c: %s", opt, + dgettext (parser->argp->argp_domain, bad_key_err)); + else + { + struct option *long_opt = parser->long_opts; + while (long_opt->val != opt && long_opt->name) + long_opt++; + __argp_error (&parser->state, "--%s: %s", + long_opt->name ? long_opt->name : "???", + dgettext (parser->argp->argp_domain, bad_key_err)); + } + } + + return err; +} + +/* Parse the next argument in PARSER (as indicated by PARSER->state.next). + Any error from the parsers is returned, and *ARGP_EBADKEY indicates + whether a value of EBADKEY is due to an unrecognized argument (which is + generally not fatal). */ +static error_t +parser_parse_next (struct parser *parser, int *arg_ebadkey) +{ + int opt; + error_t err = 0; + + if (parser->state.quoted && parser->state.next < parser->state.quoted) + /* The next argument pointer has been moved to before the quoted + region, so pretend we never saw the quoting "--", and give getopt + another chance. If the user hasn't removed it, getopt will just + process it again. */ + parser->state.quoted = 0; + + if (parser->try_getopt && !parser->state.quoted) + /* Give getopt a chance to parse this. */ + { + /* Put it back in OPTIND for getopt. */ + parser->opt_data.optind = parser->state.next; + /* Distinguish KEY_ERR from a real option. */ + parser->opt_data.optopt = KEY_END; + if (parser->state.flags & ARGP_LONG_ONLY) + opt = _getopt_long_only_r (parser->state.argc, parser->state.argv, + parser->short_opts, parser->long_opts, 0, + &parser->opt_data); + else + opt = _getopt_long_r (parser->state.argc, parser->state.argv, + parser->short_opts, parser->long_opts, 0, + &parser->opt_data); + /* And see what getopt did. */ + parser->state.next = parser->opt_data.optind; + + if (opt == KEY_END) + /* Getopt says there are no more options, so stop using + getopt; we'll continue if necessary on our own. */ + { + parser->try_getopt = 0; + if (parser->state.next > 1 + && strcmp (parser->state.argv[parser->state.next - 1], QUOTE) + == 0) + /* Not only is this the end of the options, but it's a + "quoted" region, which may have args that *look* like + options, so we definitely shouldn't try to use getopt past + here, whatever happens. */ + parser->state.quoted = parser->state.next; + } + else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END) + /* KEY_ERR can have the same value as a valid user short + option, but in the case of a real error, getopt sets OPTOPT + to the offending character, which can never be KEY_END. */ + { + *arg_ebadkey = 0; + return EBADKEY; + } + } + else + opt = KEY_END; + + if (opt == KEY_END) + { + /* We're past what getopt considers the options. */ + if (parser->state.next >= parser->state.argc + || (parser->state.flags & ARGP_NO_ARGS)) + /* Indicate that we're done. */ + { + *arg_ebadkey = 1; + return EBADKEY; + } + else + /* A non-option arg; simulate what getopt might have done. */ + { + opt = KEY_ARG; + parser->opt_data.optarg = parser->state.argv[parser->state.next++]; + } + } + + if (opt == KEY_ARG) + /* A non-option argument; try each parser in turn. */ + err = parser_parse_arg (parser, parser->opt_data.optarg); + else + err = parser_parse_opt (parser, opt, parser->opt_data.optarg); + + if (err == EBADKEY) + *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG); + + return err; +} + +/* Parse the options strings in ARGC & ARGV according to the argp in ARGP. + FLAGS is one of the ARGP_ flags above. If END_INDEX is non-NULL, the + index in ARGV of the first unparsed option is returned in it. If an + unknown option is present, EINVAL is returned; if some parser routine + returned a non-zero value, it is returned; otherwise 0 is returned. */ +error_t +__argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags, + int *end_index, void *input) +{ + error_t err; + struct parser parser; + + /* If true, then err == EBADKEY is a result of a non-option argument failing + to be parsed (which in some cases isn't actually an error). */ + int arg_ebadkey = 0; + +#ifndef _LIBC + if (!(flags & ARGP_PARSE_ARGV0)) + { +#if HAVE_DECL_PROGRAM_INVOCATION_NAME + if (!program_invocation_name) + program_invocation_name = argv[0]; +#endif +#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + if (!program_invocation_short_name) + program_invocation_short_name = __argp_base_name (argv[0]); +#endif + } +#endif + + if (! (flags & ARGP_NO_HELP)) + /* Add our own options. */ + { + struct argp_child *child = alloca (4 * sizeof (struct argp_child)); + struct argp *top_argp = alloca (sizeof (struct argp)); + + /* TOP_ARGP has no options, it just serves to group the user & default + argps. */ + memset (top_argp, 0, sizeof (*top_argp)); + top_argp->children = child; + + memset (child, 0, 4 * sizeof (struct argp_child)); + + if (argp) + (child++)->argp = argp; + (child++)->argp = &argp_default_argp; + if (argp_program_version || argp_program_version_hook) + (child++)->argp = &argp_version_argp; + child->argp = 0; + + argp = top_argp; + } + + /* Construct a parser for these arguments. */ + err = parser_init (&parser, argp, argc, argv, flags, input); + + if (! err) + /* Parse! */ + { + while (! err) + err = parser_parse_next (&parser, &arg_ebadkey); + err = parser_finalize (&parser, err, arg_ebadkey, end_index); + } + + return err; +} +#ifdef weak_alias +weak_alias (__argp_parse, argp_parse) +#endif + +/* Return the input field for ARGP in the parser corresponding to STATE; used + by the help routines. */ +void * +__argp_input (const struct argp *argp, const struct argp_state *state) +{ + if (state && state->pstate) + { + struct group *group; + struct parser *parser = state->pstate; + + for (group = parser->groups; group < parser->egroup; group++) + if (group->argp == argp) + return group->input; + } + + return 0; +} +#ifdef weak_alias +weak_alias (__argp_input, _argp_input) +#endif diff --git a/grub-core/gnulib/argp-pin.c b/grub-core/gnulib/argp-pin.c new file mode 100644 index 000000000..78cbb355b --- /dev/null +++ b/grub-core/gnulib/argp-pin.c @@ -0,0 +1,26 @@ +/* Full and short program names for argp module + Copyright (C) 2005, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME +char *program_invocation_short_name = 0; +#endif +#ifndef HAVE_PROGRAM_INVOCATION_NAME +char *program_invocation_name = 0; +#endif diff --git a/grub-core/gnulib/argp-pv.c b/grub-core/gnulib/argp-pv.c new file mode 100644 index 000000000..c74070d12 --- /dev/null +++ b/grub-core/gnulib/argp-pv.c @@ -0,0 +1,34 @@ +/* Default definition for ARGP_PROGRAM_VERSION. + Copyright (C) 1996-1997, 1999, 2006, 2009-2013 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* If set by the user program to a non-zero value, then a default option + --version is added (unless the ARGP_NO_HELP flag is used), which will + print this string followed by a newline and exit (unless the + ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ +const char *argp_program_version +/* This variable should be zero-initialized. On most systems, putting it into + BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see + + . */ +#if defined __ELF__ + /* On ELF systems, variables in BSS behave well. */ +#else + = (const char *) 0 +#endif + ; diff --git a/grub-core/gnulib/argp-pvh.c b/grub-core/gnulib/argp-pvh.c new file mode 100644 index 000000000..885ff4b75 --- /dev/null +++ b/grub-core/gnulib/argp-pvh.c @@ -0,0 +1,31 @@ +/* Default definition for ARGP_PROGRAM_VERSION_HOOK. + Copyright (C) 1996-1997, 1999, 2004, 2009-2013 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "argp.h" + +/* If set by the user program to a non-zero value, then a default option + --version is added (unless the ARGP_NO_HELP flag is used), which calls + this function with a stream to print the version to and a pointer to the + current parsing state, and then exits (unless the ARGP_NO_EXIT flag is + used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ +void (*argp_program_version_hook) (FILE *stream, struct argp_state *state) = NULL; diff --git a/grub-core/gnulib/argp-xinl.c b/grub-core/gnulib/argp-xinl.c new file mode 100644 index 000000000..04d8cf703 --- /dev/null +++ b/grub-core/gnulib/argp-xinl.c @@ -0,0 +1,46 @@ +/* Real definitions for extern inline functions in argp.h + Copyright (C) 1997-1998, 2004, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#if defined _LIBC || defined HAVE_FEATURES_H +# include +#endif + +#ifndef __USE_EXTERN_INLINES +# define __USE_EXTERN_INLINES 1 +#endif +#ifdef _LIBC +# define ARGP_EI +#else +# define ARGP_EI _GL_EXTERN_INLINE +#endif +#undef __OPTIMIZE__ +#define __OPTIMIZE__ 1 +#include "argp.h" + +/* Add weak aliases. */ +#if _LIBC - 0 && defined (weak_alias) + +weak_alias (__argp_usage, argp_usage) +weak_alias (__option_is_short, _option_is_short) +weak_alias (__option_is_end, _option_is_end) + +#endif diff --git a/grub-core/gnulib/argp.h b/grub-core/gnulib/argp.h new file mode 100644 index 000000000..c4094a40c --- /dev/null +++ b/grub-core/gnulib/argp.h @@ -0,0 +1,650 @@ +/* Hierarchical argument parsing, layered over getopt. + Copyright (C) 1995-1999, 2003-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Miles Bader . + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _ARGP_H +#define _ARGP_H + +#include +#include +#include +#include + +#define __need_error_t +#include + +#ifndef __THROW +# define __THROW +#endif +#ifndef __NTH +# define __NTH(fct) fct __THROW +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words. */ +#ifndef __restrict +# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) +# if 199901L <= __STDC_VERSION__ +# define __restrict restrict +# else +# define __restrict +# endif +# endif +#endif + +#ifndef __error_t_defined +typedef int error_t; +# define __error_t_defined +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* A description of a particular option. A pointer to an array of + these is passed in the OPTIONS field of an argp structure. Each option + entry can correspond to one long option and/or one short option; more + names for the same option can be added by following an entry in an option + array with options having the OPTION_ALIAS flag set. */ +struct argp_option +{ + /* The long option name. For more than one name for the same option, you + can use following options with the OPTION_ALIAS flag set. */ + const char *name; + + /* What key is returned for this option. If > 0 and printable, then it's + also accepted as a short option. */ + int key; + + /* If non-NULL, this is the name of the argument associated with this + option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */ + const char *arg; + + /* OPTION_ flags. */ + int flags; + + /* The doc string for this option. If both NAME and KEY are 0, This string + will be printed outdented from the normal option column, making it + useful as a group header (it will be the first thing printed in its + group); in this usage, it's conventional to end the string with a ':'. + + Write the initial value as N_("TEXT") if you want xgettext to collect + it into a POT file. */ + const char *doc; + + /* The group this option is in. In a long help message, options are sorted + alphabetically within each group, and the groups presented in the order + 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with + if this field 0 will inherit the group number of the previous entry, or + zero if it's the first one, unless its a group header (NAME and KEY both + 0), in which case, the previous entry + 1 is the default. Automagic + options such as --help are put into group -1. */ + int group; +}; + +/* The argument associated with this option is optional. */ +#define OPTION_ARG_OPTIONAL 0x1 + +/* This option isn't displayed in any help messages. */ +#define OPTION_HIDDEN 0x2 + +/* This option is an alias for the closest previous non-alias option. This + means that it will be displayed in the same help entry, and will inherit + fields other than NAME and KEY from the aliased option. */ +#define OPTION_ALIAS 0x4 + +/* This option isn't actually an option (and so should be ignored by the + actual option parser), but rather an arbitrary piece of documentation that + should be displayed in much the same manner as the options. If this flag + is set, then the option NAME field is displayed unmodified (e.g., no '--' + prefix is added) at the left-margin (where a *short* option would normally + be displayed), and the documentation string in the normal place. The NAME + field will be translated using gettext, unless OPTION_NO_TRANS is set (see + below). For purposes of sorting, any leading whitespace and punctuation is + ignored, except that if the first non-whitespace character is not '-', this + entry is displayed after all options (and OPTION_DOC entries with a leading + '-') in the same group. */ +#define OPTION_DOC 0x8 + +/* This option shouldn't be included in "long" usage messages (but is still + included in help messages). This is mainly intended for options that are + completely documented in an argp's ARGS_DOC field, in which case including + the option in the generic usage list would be redundant. For instance, + if ARGS_DOC is "FOO BAR\n-x BLAH", and the '-x' option's purpose is to + distinguish these two cases, -x should probably be marked + OPTION_NO_USAGE. */ +#define OPTION_NO_USAGE 0x10 + +/* Valid only in conjunction with OPTION_DOC. This option disables translation + of option name. */ +#define OPTION_NO_TRANS 0x20 + + +struct argp; /* fwd declare this type */ +struct argp_state; /* " */ +struct argp_child; /* " */ + +/* The type of a pointer to an argp parsing function. */ +typedef error_t (*argp_parser_t) (int key, char *arg, + struct argp_state *state); + +/* What to return for unrecognized keys. For special ARGP_KEY_ keys, such + returns will simply be ignored. For user keys, this error will be turned + into EINVAL (if the call to argp_parse is such that errors are propagated + back to the user instead of exiting); returning EINVAL itself would result + in an immediate stop to parsing in *all* cases. */ +#define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */ + +/* Special values for the KEY argument to an argument parsing function. + ARGP_ERR_UNKNOWN should be returned if they aren't understood. + + The sequence of keys to a parsing function is either (where each + uppercased word should be prefixed by 'ARGP_KEY_' and opt is a user key): + + INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all + or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed + or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized + + The third case is where every parser returned ARGP_KEY_UNKNOWN for an + argument, in which case parsing stops at that argument (returning the + unparsed arguments to the caller of argp_parse if requested, or stopping + with an error message if not). + + If an error occurs (either detected by argp, or because the parsing + function returned an error value), then the parser is called with + ARGP_KEY_ERROR, and no further calls are made. */ + +/* This is not an option at all, but rather a command line argument. If a + parser receiving this key returns success, the fact is recorded, and the + ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the + argument, a parser function decrements the NEXT field of the state it's + passed, the option won't be considered processed; this is to allow you to + actually modify the argument (perhaps into an option), and have it + processed again. */ +#define ARGP_KEY_ARG 0 +/* There are remaining arguments not parsed by any parser, which may be found + starting at (STATE->argv + STATE->next). If success is returned, but + STATE->next left untouched, it's assumed that all arguments were consume, + otherwise, the parser should adjust STATE->next to reflect any arguments + consumed. */ +#define ARGP_KEY_ARGS 0x1000006 +/* There are no more command line arguments at all. */ +#define ARGP_KEY_END 0x1000001 +/* Because it's common to want to do some special processing if there aren't + any non-option args, user parsers are called with this key if they didn't + successfully process any non-option arguments. Called just before + ARGP_KEY_END (where more general validity checks on previously parsed + arguments can take place). */ +#define ARGP_KEY_NO_ARGS 0x1000002 +/* Passed in before any parsing is done. Afterwards, the values of each + element of the CHILD_INPUT field, if any, in the state structure is + copied to each child's state to be the initial value of the INPUT field. */ +#define ARGP_KEY_INIT 0x1000003 +/* Use after all other keys, including SUCCESS & END. */ +#define ARGP_KEY_FINI 0x1000007 +/* Passed in when parsing has successfully been completed (even if there are + still arguments remaining). */ +#define ARGP_KEY_SUCCESS 0x1000004 +/* Passed in if an error occurs. */ +#define ARGP_KEY_ERROR 0x1000005 + +/* An argp structure contains a set of options declarations, a function to + deal with parsing one, documentation string, a possible vector of child + argp's, and perhaps a function to filter help output. When actually + parsing options, getopt is called with the union of all the argp + structures chained together through their CHILD pointers, with conflicts + being resolved in favor of the first occurrence in the chain. */ +struct argp +{ + /* An array of argp_option structures, terminated by an entry with both + NAME and KEY having a value of 0. */ + const struct argp_option *options; + + /* What to do with an option from this structure. KEY is the key + associated with the option, and ARG is any associated argument (NULL if + none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be + returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then + parsing is stopped immediately, and that value is returned from + argp_parse(). For special (non-user-supplied) values of KEY, see the + ARGP_KEY_ definitions below. */ + argp_parser_t parser; + + /* A string describing what other arguments are wanted by this program. It + is only used by argp_usage to print the "Usage:" message. If it + contains newlines, the strings separated by them are considered + alternative usage patterns, and printed on separate lines (lines after + the first are prefix by " or: " instead of "Usage:"). */ + const char *args_doc; + + /* If non-NULL, a string containing extra text to be printed before and + after the options in a long help message (separated by a vertical tab + '\v' character). + Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if + you want xgettext to collect the two pieces of text into a POT file. */ + const char *doc; + + /* A vector of argp_children structures, terminated by a member with a 0 + argp field, pointing to child argps should be parsed with this one. Any + conflicts are resolved in favor of this argp, or early argps in the + CHILDREN list. This field is useful if you use libraries that supply + their own argp structure, which you want to use in conjunction with your + own. */ + const struct argp_child *children; + + /* If non-zero, this should be a function to filter the output of help + messages. KEY is either a key from an option, in which case TEXT is + that option's help text, or a special key from the ARGP_KEY_HELP_ + defines, below, describing which other help text TEXT is. The function + should return either TEXT, if it should be used as-is, a replacement + string, which should be malloced, and will be freed by argp, or NULL, + meaning "print nothing". The value for TEXT is *after* any translation + has been done, so if any of the replacement text also needs translation, + that should be done by the filter function. INPUT is either the input + supplied to argp_parse, or NULL, if argp_help was called directly. */ + char *(*help_filter) (int __key, const char *__text, void *__input); + + /* If non-zero the strings used in the argp library are translated using + the domain described by this string. Otherwise the currently installed + default domain is used. */ + const char *argp_domain; +}; + +/* Possible KEY arguments to a help filter function. */ +#define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceding options. */ +#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ +#define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ +#define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; + TEXT is NULL for this key. */ +/* Explanatory note emitted when duplicate option arguments have been + suppressed. */ +#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005 +#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */ + +/* When an argp has a non-zero CHILDREN field, it should point to a vector of + argp_child structures, each of which describes a subsidiary argp. */ +struct argp_child +{ + /* The child parser. */ + const struct argp *argp; + + /* Flags for this child. */ + int flags; + + /* If non-zero, an optional header to be printed in help output before the + child options. As a side-effect, a non-zero value forces the child + options to be grouped together; to achieve this effect without actually + printing a header string, use a value of "". */ + const char *header; + + /* Where to group the child options relative to the other ("consolidated") + options in the parent argp; the values are the same as the GROUP field + in argp_option structs, but all child-groupings follow parent options at + a particular group level. If both this field and HEADER are zero, then + they aren't grouped at all, but rather merged with the parent options + (merging the child's grouping levels with the parents). */ + int group; +}; + +/* Parsing state. This is provided to parsing functions called by argp, + which may examine and, as noted, modify fields. */ +struct argp_state +{ + /* The top level ARGP being parsed. */ + const struct argp *root_argp; + + /* The argument vector being parsed. May be modified. */ + int argc; + char **argv; + + /* The index in ARGV of the next arg that to be parsed. May be modified. */ + int next; + + /* The flags supplied to argp_parse. May be modified. */ + unsigned flags; + + /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the + number of the current arg, starting at zero, and incremented after each + such call returns. At all other times, this is the number of such + arguments that have been processed. */ + unsigned arg_num; + + /* If non-zero, the index in ARGV of the first argument following a special + '--' argument (which prevents anything following being interpreted as an + option). Only set once argument parsing has proceeded past this point. */ + int quoted; + + /* An arbitrary pointer passed in from the user. */ + void *input; + /* Values to pass to child parsers. This vector will be the same length as + the number of children for the current parser. */ + void **child_inputs; + + /* For the parser's use. Initialized to 0. */ + void *hook; + + /* The name used when printing messages. This is initialized to ARGV[0], + or PROGRAM_INVOCATION_NAME if that is unavailable. */ + char *name; + + /* Streams used when argp prints something. */ + FILE *err_stream; /* For errors; initialized to stderr. */ + FILE *out_stream; /* For information; initialized to stdout. */ + + void *pstate; /* Private, for use by argp. */ +}; + +/* Flags for argp_parse (note that the defaults are those that are + convenient for program command line parsing): */ + +/* Don't ignore the first element of ARGV. Normally (and always unless + ARGP_NO_ERRS is set) the first element of the argument vector is + skipped for option parsing purposes, as it corresponds to the program name + in a command line. */ +#define ARGP_PARSE_ARGV0 0x01 + +/* Don't print error messages for unknown options to stderr; unless this flag + is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program + name in the error messages. This flag implies ARGP_NO_EXIT (on the + assumption that silent exiting upon errors is bad behaviour). */ +#define ARGP_NO_ERRS 0x02 + +/* Don't parse any non-option args. Normally non-option args are parsed by + calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg + as the value. Since it's impossible to know which parse function wants to + handle it, each one is called in turn, until one returns 0 or an error + other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the + argp_parse returns prematurely (but with a return value of 0). If all + args have been parsed without error, all parsing functions are called one + last time with a key of ARGP_KEY_END. This flag needn't normally be set, + as the normal behavior is to stop parsing as soon as some argument can't + be handled. */ +#define ARGP_NO_ARGS 0x04 + +/* Parse options and arguments in the same order they occur on the command + line -- normally they're rearranged so that all options come first. */ +#define ARGP_IN_ORDER 0x08 + +/* Don't provide the standard long option --help, which causes usage and + option help information to be output to stdout, and exit (0) called. */ +#define ARGP_NO_HELP 0x10 + +/* Don't exit on errors (they may still result in error messages). */ +#define ARGP_NO_EXIT 0x20 + +/* Use the gnu getopt "long-only" rules for parsing arguments. */ +#define ARGP_LONG_ONLY 0x40 + +/* Turns off any message-printing/exiting options. */ +#define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP) + +/* Parse the options strings in ARGC & ARGV according to the options in ARGP. + FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the + index in ARGV of the first unparsed option is returned in it. If an + unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser + routine returned a non-zero value, it is returned; otherwise 0 is + returned. This function may also call exit unless the ARGP_NO_HELP flag + is set. INPUT is a pointer to a value to be passed in to the parser. */ +extern error_t argp_parse (const struct argp *__restrict __argp, + int /*argc*/, char **__restrict /*argv*/, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); +extern error_t __argp_parse (const struct argp *__restrict __argp, + int /*argc*/, char **__restrict /*argv*/, + unsigned __flags, int *__restrict __arg_index, + void *__restrict __input); + +/* Global variables. */ + +/* GNULIB makes sure both program_invocation_name and + program_invocation_short_name are available */ +#ifdef GNULIB_PROGRAM_INVOCATION_NAME +extern char *program_invocation_name; +# undef HAVE_DECL_PROGRAM_INVOCATION_NAME +# define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +#endif + +#ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME +extern char *program_invocation_short_name; +# undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME +# define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +#endif + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + will print this string followed by a newline and exit (unless the + ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ +extern const char *argp_program_version; + +/* If defined or set by the user program to a non-zero value, then a default + option --version is added (unless the ARGP_NO_HELP flag is used), which + calls this function with a stream to print the version to and a pointer to + the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is + used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ +extern void (*argp_program_version_hook) (FILE *__restrict __stream, + struct argp_state *__restrict + __state); + +/* If defined or set by the user program, it should point to string that is + the bug-reporting address for the program. It will be printed by + argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various + standard help messages), embedded in a sentence that says something like + "Report bugs to ADDR." */ +extern const char *argp_program_bug_address; + +/* The exit status that argp will use when exiting due to a parsing error. + If not defined or set by the user program, this defaults to EX_USAGE from + . */ +extern error_t argp_err_exit_status; + +/* Flags for argp_help. */ +#define ARGP_HELP_USAGE 0x01 /* a Usage: message. */ +#define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */ +#define ARGP_HELP_SEE 0x04 /* a "Try ... for more help" message. */ +#define ARGP_HELP_LONG 0x08 /* a long help message. */ +#define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */ +#define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */ +#define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC) +#define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */ +#define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to + reflect ARGP_LONG_ONLY mode. */ + +/* These ARGP_HELP flags are only understood by argp_state_help. */ +#define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ +#define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ + +/* The standard thing to do after a program command line parsing error, if an + error message has already been printed. */ +#define ARGP_HELP_STD_ERR \ + (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do after a program command line parsing error, if no + more specific error message has been printed. */ +#define ARGP_HELP_STD_USAGE \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) +/* The standard thing to do in response to a --help option. */ +#define ARGP_HELP_STD_HELP \ + (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \ + | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR) + +/* Output a usage message for ARGP to STREAM. FLAGS are from the set + ARGP_HELP_*. */ +extern void argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, + unsigned __flags, char *__restrict __name); +extern void __argp_help (const struct argp *__restrict __argp, + FILE *__restrict __stream, unsigned __flags, + char *__name); + +/* The following routines are intended to be called from within an argp + parsing routine (thus taking an argp_state structure as the first + argument). They may or may not print an error message and exit, depending + on the flags in STATE -- in any case, the caller should be prepared for + them *not* to exit, and should return an appropriate error after calling + them. [argp_usage & argp_error should probably be called argp_state_..., + but they're used often enough that they should be short] */ + +/* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are + from the set ARGP_HELP_*. */ +extern void argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); +extern void __argp_state_help (const struct argp_state *__restrict __state, + FILE *__restrict __stream, + unsigned int __flags); + +#if _LIBC +/* Possibly output the standard usage message for ARGP to stderr and exit. */ +extern void argp_usage (const struct argp_state *__state); +extern void __argp_usage (const struct argp_state *__state); +#endif + +/* If appropriate, print the printf string FMT and following args, preceded + by the program name and ':', to stderr, and followed by a "Try ... --help" + message, then exit (1). */ +extern void argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); +extern void __argp_error (const struct argp_state *__restrict __state, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 2, 3)); + +/* Similar to the standard gnu error-reporting function error(), but will + respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print + to STATE->err_stream. This is useful for argument parsing code that is + shared between program startup (when exiting is desired) and runtime + option parsing (when typically an error code is returned instead). The + difference between this function and argp_error is that the latter is for + *parsing errors*, and the former is for other problems that occur during + parsing but don't reflect a (syntactic) problem with the input. */ +extern void argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); +extern void __argp_failure (const struct argp_state *__restrict __state, + int __status, int __errnum, + const char *__restrict __fmt, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 4, 5)); + +#if _LIBC +/* Returns true if the option OPT is a valid short option. */ +extern int _option_is_short (const struct argp_option *__opt) __THROW; +extern int __option_is_short (const struct argp_option *__opt) __THROW; + +/* Returns true if the option OPT is in fact the last (unused) entry in an + options array. */ +extern int _option_is_end (const struct argp_option *__opt) __THROW; +extern int __option_is_end (const struct argp_option *__opt) __THROW; +#endif + +/* Return the input field for ARGP in the parser corresponding to STATE; used + by the help routines. */ +extern void *_argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; +extern void *__argp_input (const struct argp *__restrict __argp, + const struct argp_state *__restrict __state) + __THROW; + +#if !_LIBC || defined __USE_EXTERN_INLINES + +# if !_LIBC +# define __argp_usage argp_usage +# define __argp_state_help argp_state_help +# define __option_is_short _option_is_short +# define __option_is_end _option_is_end +_GL_INLINE_HEADER_BEGIN +# ifndef ARGP_EI +# define ARGP_EI _GL_INLINE +# endif +# endif + +# ifndef ARGP_EI +# ifdef __GNUC__ + /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ +# if defined __GNUC_STDC_INLINE__ +# define ARGP_EI __inline__ +# elif defined __GNUC_GNU_INLINE__ +# define ARGP_EI extern __inline__ __attribute__ ((__gnu_inline__)) +# else +# define ARGP_EI extern __inline__ +# endif +# else + /* With other compilers, assume the ISO C99 meaning of 'inline', if + the compiler supports 'inline' at all. */ +# define ARGP_EI inline +# endif +# endif + +ARGP_EI void +__argp_usage (const struct argp_state *__state) +{ + __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); +} + +ARGP_EI int +__NTH (__option_is_short (const struct argp_option *__opt)) +{ + if (__opt->flags & OPTION_DOC) + return 0; + else + { + int __key = __opt->key; + return __key > 0 && __key <= UCHAR_MAX && isprint (__key); + } +} + +ARGP_EI int +__NTH (__option_is_end (const struct argp_option *__opt)) +{ + return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; +} + +# if !_LIBC +# undef __argp_usage +# undef __argp_state_help +# undef __option_is_short +# undef __option_is_end +_GL_INLINE_HEADER_END +# endif +#endif /* Use extern inlines. */ + +#ifdef __cplusplus +} +#endif + +#endif /* argp.h */ diff --git a/grub-core/gnulib/asnprintf.c b/grub-core/gnulib/asnprintf.c new file mode 100644 index 000000000..76e228d86 --- /dev/null +++ b/grub-core/gnulib/asnprintf.c @@ -0,0 +1,34 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006, 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#include + +/* Specification. */ +#include "vasnprintf.h" + +#include + +char * +asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *result; + + va_start (args, format); + result = vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return result; +} diff --git a/grub-core/gnulib/basename-lgpl.c b/grub-core/gnulib/basename-lgpl.c new file mode 100644 index 000000000..9307e8314 --- /dev/null +++ b/grub-core/gnulib/basename-lgpl.c @@ -0,0 +1,75 @@ +/* basename.c -- return the last element in a file name + + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2013 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +#include + +/* Return the address of the last file name component of NAME. If + NAME has no relative file name components because it is a file + system root, return the empty string. */ + +char * +last_component (char const *name) +{ + char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); + char const *p; + bool saw_slash = false; + + while (ISSLASH (*base)) + base++; + + for (p = base; *p; p++) + { + if (ISSLASH (*p)) + saw_slash = true; + else if (saw_slash) + { + base = p; + saw_slash = false; + } + } + + return (char *) base; +} + +/* Return the length of the basename NAME. Typically NAME is the + value returned by base_name or last_component. Act like strlen + (NAME), except omit all trailing slashes. */ + +size_t +base_len (char const *name) +{ + size_t len; + size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); + + for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) + continue; + + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 + && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) + return 2; + + if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len + && len == prefix_len && ISSLASH (name[prefix_len])) + return prefix_len + 1; + + return len; +} diff --git a/grub-core/gnulib/btowc.c b/grub-core/gnulib/btowc.c new file mode 100644 index 000000000..6c7cbec9d --- /dev/null +++ b/grub-core/gnulib/btowc.c @@ -0,0 +1,39 @@ +/* Convert unibyte character to wide character. + Copyright (C) 2008, 2010-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +wint_t +btowc (int c) +{ + if (c != EOF) + { + char buf[1]; + wchar_t wc; + + buf[0] = c; + if (mbtowc (&wc, buf, 1) >= 0) + return wc; + } + return WEOF; +} diff --git a/grub-core/gnulib/config.charset b/grub-core/gnulib/config.charset new file mode 100644 index 000000000..a991419cd --- /dev/null +++ b/grub-core/gnulib/config.charset @@ -0,0 +1,684 @@ +#! /bin/sh +# Output a system dependent table of character encoding aliases. +# +# Copyright (C) 2000-2004, 2006-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, see . +# +# The table consists of lines of the form +# ALIAS CANONICAL +# +# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". +# ALIAS is compared in a case sensitive way. +# +# CANONICAL is the GNU canonical name for this character encoding. +# It must be an encoding supported by libiconv. Support by GNU libc is +# also desirable. CANONICAL is case insensitive. Usually an upper case +# MIME charset name is preferred. +# The current list of GNU canonical charset names is as follows. +# +# name MIME? used by which systems +# (darwin = Mac OS X, woe32 = native Windows) +# +# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin cygwin +# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin +# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin +# ISO-8859-3 Y glibc solaris cygwin +# ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin +# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin +# ISO-8859-6 Y glibc aix hpux solaris cygwin +# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin +# ISO-8859-8 Y glibc aix hpux osf solaris cygwin +# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin cygwin +# ISO-8859-13 glibc netbsd openbsd darwin cygwin +# ISO-8859-14 glibc cygwin +# ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin +# KOI8-R Y glibc solaris freebsd netbsd openbsd darwin +# KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin +# KOI8-T glibc +# CP437 dos +# CP775 dos +# CP850 aix osf dos +# CP852 dos +# CP855 dos +# CP856 aix +# CP857 dos +# CP861 dos +# CP862 dos +# CP864 dos +# CP865 dos +# CP866 freebsd netbsd openbsd darwin dos +# CP869 dos +# CP874 woe32 dos +# CP922 aix +# CP932 aix cygwin woe32 dos +# CP943 aix +# CP949 osf darwin woe32 dos +# CP950 woe32 dos +# CP1046 aix +# CP1124 aix +# CP1125 dos +# CP1129 aix +# CP1131 darwin +# CP1250 woe32 +# CP1251 glibc solaris netbsd openbsd darwin cygwin woe32 +# CP1252 aix woe32 +# CP1253 woe32 +# CP1254 woe32 +# CP1255 glibc woe32 +# CP1256 woe32 +# CP1257 woe32 +# GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin +# EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin +# EUC-TW glibc aix hpux irix osf solaris netbsd +# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin +# BIG5-HKSCS glibc solaris darwin +# GBK glibc aix osf solaris darwin cygwin woe32 dos +# GB18030 glibc solaris netbsd darwin +# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin +# JOHAB glibc solaris woe32 +# TIS-620 glibc aix hpux osf solaris cygwin +# VISCII Y glibc +# TCVN5712-1 glibc +# ARMSCII-8 glibc darwin +# GEORGIAN-PS glibc cygwin +# PT154 glibc +# HP-ROMAN8 hpux +# HP-ARABIC8 hpux +# HP-GREEK8 hpux +# HP-HEBREW8 hpux +# HP-TURKISH8 hpux +# HP-KANA8 hpux +# DEC-KANJI osf +# DEC-HANYU osf +# UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin +# +# Note: Names which are not marked as being a MIME name should not be used in +# Internet protocols for information interchange (mail, news, etc.). +# +# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications +# must understand both names and treat them as equivalent. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM + +host="$1" +os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` +echo "# This file contains a table of character encoding aliases," +echo "# suitable for operating system '${os}'." +echo "# It was automatically generated from config.charset." +# List of references, updated during installation: +echo "# Packages using this file: " +case "$os" in + linux-gnulibc1*) + # Linux libc5 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + echo "POSIX ASCII" + for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ + en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ + en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ + es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ + et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ + fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ + it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ + sv_FI sv_SE; do + echo "$l ISO-8859-1" + echo "$l.iso-8859-1 ISO-8859-1" + echo "$l.iso-8859-15 ISO-8859-15" + echo "$l.iso-8859-15@euro ISO-8859-15" + echo "$l@euro ISO-8859-15" + echo "$l.cp-437 CP437" + echo "$l.cp-850 CP850" + echo "$l.cp-1252 CP1252" + echo "$l.cp-1252@euro CP1252" + #echo "$l.atari-st ATARI-ST" # not a commonly used encoding + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ + sl_SI sr sr_CS sr_YU; do + echo "$l ISO-8859-2" + echo "$l.iso-8859-2 ISO-8859-2" + echo "$l.cp-852 CP852" + echo "$l.cp-1250 CP1250" + echo "$l.utf-8 UTF-8" + done + for l in mk mk_MK ru ru_RU; do + echo "$l ISO-8859-5" + echo "$l.iso-8859-5 ISO-8859-5" + echo "$l.koi8-r KOI8-R" + echo "$l.cp-866 CP866" + echo "$l.cp-1251 CP1251" + echo "$l.utf-8 UTF-8" + done + for l in ar ar_SA; do + echo "$l ISO-8859-6" + echo "$l.iso-8859-6 ISO-8859-6" + echo "$l.cp-864 CP864" + #echo "$l.cp-868 CP868" # not a commonly used encoding + echo "$l.cp-1256 CP1256" + echo "$l.utf-8 UTF-8" + done + for l in el el_GR gr gr_GR; do + echo "$l ISO-8859-7" + echo "$l.iso-8859-7 ISO-8859-7" + echo "$l.cp-869 CP869" + echo "$l.cp-1253 CP1253" + echo "$l.cp-1253@euro CP1253" + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in he he_IL iw iw_IL; do + echo "$l ISO-8859-8" + echo "$l.iso-8859-8 ISO-8859-8" + echo "$l.cp-862 CP862" + echo "$l.cp-1255 CP1255" + echo "$l.utf-8 UTF-8" + done + for l in tr tr_TR; do + echo "$l ISO-8859-9" + echo "$l.iso-8859-9 ISO-8859-9" + echo "$l.cp-857 CP857" + echo "$l.cp-1254 CP1254" + echo "$l.utf-8 UTF-8" + done + for l in lt lt_LT lv lv_LV; do + #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name + echo "$l ISO-8859-13" + done + for l in ru_UA uk uk_UA; do + echo "$l KOI8-U" + done + for l in zh zh_CN; do + #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name + echo "$l GB2312" + done + for l in ja ja_JP ja_JP.EUC; do + echo "$l EUC-JP" + done + for l in ko ko_KR; do + echo "$l EUC-KR" + done + for l in th th_TH; do + echo "$l TIS-620" + done + for l in fa fa_IR; do + #echo "$l ISIRI-3342" # a broken encoding + echo "$l.utf-8 UTF-8" + done + ;; + linux* | *-gnu*) + # With glibc-2.1 or newer, we don't need any canonicalization, + # because glibc has iconv and both glibc and libiconv support all + # GNU canonical names directly. Therefore, the Makefile does not + # need to install the alias file at all. + # The following applies only to glibc-2.0.x and older libcs. + echo "ISO_646.IRV:1983 ASCII" + ;; + aix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "IBM-850 CP850" + echo "IBM-856 CP856" + echo "IBM-921 ISO-8859-13" + echo "IBM-922 CP922" + echo "IBM-932 CP932" + echo "IBM-943 CP943" + echo "IBM-1046 CP1046" + echo "IBM-1124 CP1124" + echo "IBM-1129 CP1129" + echo "IBM-1252 CP1252" + echo "IBM-eucCN GB2312" + echo "IBM-eucJP EUC-JP" + echo "IBM-eucKR EUC-KR" + echo "IBM-eucTW EUC-TW" + echo "big5 BIG5" + echo "GBK GBK" + echo "TIS-620 TIS-620" + echo "UTF-8 UTF-8" + ;; + hpux*) + echo "iso88591 ISO-8859-1" + echo "iso88592 ISO-8859-2" + echo "iso88595 ISO-8859-5" + echo "iso88596 ISO-8859-6" + echo "iso88597 ISO-8859-7" + echo "iso88598 ISO-8859-8" + echo "iso88599 ISO-8859-9" + echo "iso885915 ISO-8859-15" + echo "roman8 HP-ROMAN8" + echo "arabic8 HP-ARABIC8" + echo "greek8 HP-GREEK8" + echo "hebrew8 HP-HEBREW8" + echo "turkish8 HP-TURKISH8" + echo "kana8 HP-KANA8" + echo "tis620 TIS-620" + echo "big5 BIG5" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "hp15CN GB2312" + #echo "ccdc ?" # what is this? + echo "SJIS SHIFT_JIS" + echo "utf8 UTF-8" + ;; + irix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + ;; + osf*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "cp850 CP850" + echo "big5 BIG5" + echo "dechanyu DEC-HANYU" + echo "dechanzi GB2312" + echo "deckanji DEC-KANJI" + echo "deckorean EUC-KR" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "GBK GBK" + echo "KSC5601 CP949" + echo "sdeckanji EUC-JP" + echo "SJIS SHIFT_JIS" + echo "TACTIS TIS-620" + echo "UTF-8 UTF-8" + ;; + solaris*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-3 ISO-8859-3" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "koi8-r KOI8-R" + echo "ansi-1251 CP1251" + echo "BIG5 BIG5" + echo "Big5-HKSCS BIG5-HKSCS" + echo "gb2312 GB2312" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "cns11643 EUC-TW" + echo "5601 EUC-KR" + echo "ko_KR.johap92 JOHAB" + echo "eucJP EUC-JP" + echo "PCK SHIFT_JIS" + echo "TIS620.2533 TIS-620" + #echo "sun_eu_greek ?" # what is this? + echo "UTF-8 UTF-8" + ;; + freebsd* | os2*) + # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just + # reuse FreeBSD's locale data for OS/2. + echo "C ASCII" + echo "US-ASCII ASCII" + for l in la_LN lt_LN; do + echo "$l.ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ + lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do + echo "$l.ISO_8859-1 ISO-8859-1" + echo "$l.DIS_8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do + echo "$l.ISO_8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO_8859-4 ISO-8859-4" + done + for l in ru_RU ru_SU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO_8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ja_JP.Shift_JIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + netbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "BIG5 BIG5" + echo "SJIS SHIFT_JIS" + ;; + openbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + ;; + darwin[56]*) + # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + for l in en_AU en_CA en_GB en_US la_LN; do + echo "$l.US-ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ + nl_NL no_NO pt_PT sv_SE; do + echo "$l ISO-8859-1" + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in la_LN; do + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do + echo "$l.ISO8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO8859-4 ISO-8859-4" + done + for l in ru_RU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + for l in bg_BG; do + echo "$l.CP1251 CP1251" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + darwin*) + # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + # useless: + # - It returns the empty string when LANG is set to a locale of the + # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + # LC_CTYPE file. + # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + # - The documentation says: + # "... all code that calls BSD system routines should ensure + # that the const *char parameters of these routines are in UTF-8 + # encoding. All BSD system functions expect their string + # parameters to be in UTF-8 encoding and nothing else." + # It also says + # "An additional caveat is that string parameters for files, + # paths, and other file-system entities must be in canonical + # UTF-8. In a canonical UTF-8 Unicode string, all decomposable + # characters are decomposed ..." + # but this is not true: You can pass non-decomposed UTF-8 strings + # to file system functions, and it is the OS which will convert + # them to decomposed UTF-8 before accessing the file system. + # - The Apple Terminal application displays UTF-8 by default. + # - However, other applications are free to use different encodings: + # - xterm uses ISO-8859-1 by default. + # - TextEdit uses MacRoman by default. + # We prefer UTF-8 over decomposed UTF-8-MAC because one should + # minimize the use of decomposed Unicode. Unfortunately, through the + # Darwin file system, decomposed UTF-8 strings are leaked into user + # space nevertheless. + # Then there are also the locales with encodings other than US-ASCII + # and UTF-8. These locales can be occasionally useful to users (e.g. + # when grepping through ISO-8859-1 encoded text files), when all their + # file names are in US-ASCII. + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "KOI8-R KOI8-R" + echo "KOI8-U KOI8-U" + echo "CP866 CP866" + echo "CP949 CP949" + echo "CP1131 CP1131" + echo "CP1251 CP1251" + echo "eucCN GB2312" + echo "GB2312 GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "Big5 BIG5" + echo "Big5HKSCS BIG5-HKSCS" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "SJIS SHIFT_JIS" + echo "ARMSCII-8 ARMSCII-8" + echo "PT154 PT154" + #echo "ISCII-DEV ?" + echo "* UTF-8" + ;; + beos* | haiku*) + # BeOS and Haiku have a single locale, and it has UTF-8 encoding. + echo "* UTF-8" + ;; + msdosdjgpp*) + # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "#" + echo "# The encodings given here may not all be correct." + echo "# If you find that the encoding given for your language and" + echo "# country is not the one your DOS machine actually uses, just" + echo "# correct it in this file, and send a mail to" + echo "# Juan Manuel Guerrero " + echo "# and Bruno Haible ." + echo "#" + echo "C ASCII" + # ISO-8859-1 languages + echo "ca CP850" + echo "ca_ES CP850" + echo "da CP865" # not CP850 ?? + echo "da_DK CP865" # not CP850 ?? + echo "de CP850" + echo "de_AT CP850" + echo "de_CH CP850" + echo "de_DE CP850" + echo "en CP850" + echo "en_AU CP850" # not CP437 ?? + echo "en_CA CP850" + echo "en_GB CP850" + echo "en_NZ CP437" + echo "en_US CP437" + echo "en_ZA CP850" # not CP437 ?? + echo "es CP850" + echo "es_AR CP850" + echo "es_BO CP850" + echo "es_CL CP850" + echo "es_CO CP850" + echo "es_CR CP850" + echo "es_CU CP850" + echo "es_DO CP850" + echo "es_EC CP850" + echo "es_ES CP850" + echo "es_GT CP850" + echo "es_HN CP850" + echo "es_MX CP850" + echo "es_NI CP850" + echo "es_PA CP850" + echo "es_PY CP850" + echo "es_PE CP850" + echo "es_SV CP850" + echo "es_UY CP850" + echo "es_VE CP850" + echo "et CP850" + echo "et_EE CP850" + echo "eu CP850" + echo "eu_ES CP850" + echo "fi CP850" + echo "fi_FI CP850" + echo "fr CP850" + echo "fr_BE CP850" + echo "fr_CA CP850" + echo "fr_CH CP850" + echo "fr_FR CP850" + echo "ga CP850" + echo "ga_IE CP850" + echo "gd CP850" + echo "gd_GB CP850" + echo "gl CP850" + echo "gl_ES CP850" + echo "id CP850" # not CP437 ?? + echo "id_ID CP850" # not CP437 ?? + echo "is CP861" # not CP850 ?? + echo "is_IS CP861" # not CP850 ?? + echo "it CP850" + echo "it_CH CP850" + echo "it_IT CP850" + echo "lt CP775" + echo "lt_LT CP775" + echo "lv CP775" + echo "lv_LV CP775" + echo "nb CP865" # not CP850 ?? + echo "nb_NO CP865" # not CP850 ?? + echo "nl CP850" + echo "nl_BE CP850" + echo "nl_NL CP850" + echo "nn CP865" # not CP850 ?? + echo "nn_NO CP865" # not CP850 ?? + echo "no CP865" # not CP850 ?? + echo "no_NO CP865" # not CP850 ?? + echo "pt CP850" + echo "pt_BR CP850" + echo "pt_PT CP850" + echo "sv CP850" + echo "sv_SE CP850" + # ISO-8859-2 languages + echo "cs CP852" + echo "cs_CZ CP852" + echo "hr CP852" + echo "hr_HR CP852" + echo "hu CP852" + echo "hu_HU CP852" + echo "pl CP852" + echo "pl_PL CP852" + echo "ro CP852" + echo "ro_RO CP852" + echo "sk CP852" + echo "sk_SK CP852" + echo "sl CP852" + echo "sl_SI CP852" + echo "sq CP852" + echo "sq_AL CP852" + echo "sr CP852" # CP852 or CP866 or CP855 ?? + echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? + echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? + # ISO-8859-3 languages + echo "mt CP850" + echo "mt_MT CP850" + # ISO-8859-5 languages + echo "be CP866" + echo "be_BE CP866" + echo "bg CP866" # not CP855 ?? + echo "bg_BG CP866" # not CP855 ?? + echo "mk CP866" # not CP855 ?? + echo "mk_MK CP866" # not CP855 ?? + echo "ru CP866" + echo "ru_RU CP866" + echo "uk CP1125" + echo "uk_UA CP1125" + # ISO-8859-6 languages + echo "ar CP864" + echo "ar_AE CP864" + echo "ar_DZ CP864" + echo "ar_EG CP864" + echo "ar_IQ CP864" + echo "ar_IR CP864" + echo "ar_JO CP864" + echo "ar_KW CP864" + echo "ar_MA CP864" + echo "ar_OM CP864" + echo "ar_QA CP864" + echo "ar_SA CP864" + echo "ar_SY CP864" + # ISO-8859-7 languages + echo "el CP869" + echo "el_GR CP869" + # ISO-8859-8 languages + echo "he CP862" + echo "he_IL CP862" + # ISO-8859-9 languages + echo "tr CP857" + echo "tr_TR CP857" + # Japanese + echo "ja CP932" + echo "ja_JP CP932" + # Chinese + echo "zh_CN GBK" + echo "zh_TW CP950" # not CP938 ?? + # Korean + echo "kr CP949" # not CP934 ?? + echo "kr_KR CP949" # not CP934 ?? + # Thai + echo "th CP874" + echo "th_TH CP874" + # Other + echo "eo CP850" + echo "eo_EO CP850" + ;; +esac diff --git a/grub-core/gnulib/dirname-lgpl.c b/grub-core/gnulib/dirname-lgpl.c new file mode 100644 index 000000000..82f66301f --- /dev/null +++ b/grub-core/gnulib/dirname-lgpl.c @@ -0,0 +1,86 @@ +/* dirname.c -- return all but the last element in a file name + + Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2013 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +#include +#include + +/* Return the length of the prefix of FILE that will be used by + dir_name. If FILE is in the working directory, this returns zero + even though 'dir_name (FILE)' will return ".". Works properly even + if there are trailing slashes (by effectively ignoring them). */ + +size_t +dir_len (char const *file) +{ + size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); + size_t length; + + /* Advance prefix_length beyond important leading slashes. */ + prefix_length += (prefix_length != 0 + ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && ISSLASH (file[prefix_length])) + : (ISSLASH (file[0]) + ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT + && ISSLASH (file[1]) && ! ISSLASH (file[2]) + ? 2 : 1)) + : 0)); + + /* Strip the basename and any redundant slashes before it. */ + for (length = last_component (file) - file; + prefix_length < length; length--) + if (! ISSLASH (file[length - 1])) + break; + return length; +} + + +/* In general, we can't use the builtin 'dirname' function if available, + since it has different meanings in different environments. + In some environments the builtin 'dirname' modifies its argument. + + Return the leading directories part of FILE, allocated with malloc. + Works properly even if there are trailing slashes (by effectively + ignoring them). Return NULL on failure. + + If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); + lstat (base_name (FILE)); } will access the same file. Likewise, + if the sequence { chdir (dir_name (FILE)); + rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE + to "foo" in the same directory FILE was in. */ + +char * +mdir_name (char const *file) +{ + size_t length = dir_len (file); + bool append_dot = (length == 0 + || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && length == FILE_SYSTEM_PREFIX_LEN (file) + && file[2] != '\0' && ! ISSLASH (file[2]))); + char *dir = malloc (length + append_dot + 1); + if (!dir) + return NULL; + memcpy (dir, file, length); + if (append_dot) + dir[length++] = '.'; + dir[length] = '\0'; + return dir; +} diff --git a/grub-core/gnulib/dirname.h b/grub-core/gnulib/dirname.h new file mode 100644 index 000000000..4ad031200 --- /dev/null +++ b/grub-core/gnulib/dirname.h @@ -0,0 +1,46 @@ +/* Take file names apart into directory and base names. + + Copyright (C) 1998, 2001, 2003-2006, 2009-2013 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef DIRNAME_H_ +# define DIRNAME_H_ 1 + +# include +# include +# include "dosname.h" + +# ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +# endif + +# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 +# endif + +# if GNULIB_DIRNAME +char *base_name (char const *file); +char *dir_name (char const *file); +# endif + +char *mdir_name (char const *file); +size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; +size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; +char *last_component (char const *file) _GL_ATTRIBUTE_PURE; + +bool strip_trailing_slashes (char *file); + +#endif /* not DIRNAME_H_ */ diff --git a/grub-core/gnulib/dosname.h b/grub-core/gnulib/dosname.h new file mode 100644 index 000000000..ba63ce4bd --- /dev/null +++ b/grub-core/gnulib/dosname.h @@ -0,0 +1,53 @@ +/* File names on MS-DOS/Windows systems. + + Copyright (C) 2000-2001, 2004-2006, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + From Paul Eggert and Jim Meyering. */ + +#ifndef _DOSNAME_H +#define _DOSNAME_H + +#if (defined _WIN32 || defined __WIN32__ || \ + defined __MSDOS__ || defined __CYGWIN__ || \ + defined __EMX__ || defined __DJGPP__) + /* This internal macro assumes ASCII, but all hosts that support drive + letters use ASCII. */ +# define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ + <= 'z' - 'a') +# define FILE_SYSTEM_PREFIX_LEN(Filename) \ + (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) +# ifndef __CYGWIN__ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 +# endif +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define FILE_SYSTEM_PREFIX_LEN(Filename) 0 +# define ISSLASH(C) ((C) == '/') +#endif + +#ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +#endif + +#if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) +# else +# define IS_ABSOLUTE_FILE_NAME(F) \ + (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) +#endif +#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) + +#endif /* DOSNAME_H_ */ diff --git a/grub-core/gnulib/errno.in.h b/grub-core/gnulib/errno.in.h new file mode 100644 index 000000000..49b35464b --- /dev/null +++ b/grub-core/gnulib/errno.in.h @@ -0,0 +1,279 @@ +/* A POSIX-like . + + Copyright (C) 2008-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _@GUARD_PREFIX@_ERRNO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ + +#ifndef _@GUARD_PREFIX@_ERRNO_H +#define _@GUARD_PREFIX@_ERRNO_H + + +/* On native Windows platforms, many macros are not defined. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* These are the same values as defined by MSVC 10, for interoperability. */ + +# ifndef ENOMSG +# define ENOMSG 122 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 111 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 121 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 134 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 104 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 132 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 129 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ENETRESET +# define ENETRESET 117 +# define GNULIB_defined_ENETRESET 1 +# endif + +# ifndef ECONNABORTED +# define ECONNABORTED 106 +# define GNULIB_defined_ECONNABORTED 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 105 +# define GNULIB_defined_ECANCELED 1 +# endif + +# ifndef EOWNERDEAD +# define EOWNERDEAD 133 +# define GNULIB_defined_EOWNERDEAD 1 +# endif + +# ifndef ENOTRECOVERABLE +# define ENOTRECOVERABLE 127 +# define GNULIB_defined_ENOTRECOVERABLE 1 +# endif + +# ifndef EINPROGRESS +# define EINPROGRESS 112 +# define EALREADY 103 +# define ENOTSOCK 128 +# define EDESTADDRREQ 109 +# define EMSGSIZE 115 +# define EPROTOTYPE 136 +# define ENOPROTOOPT 123 +# define EPROTONOSUPPORT 135 +# define EOPNOTSUPP 130 +# define EAFNOSUPPORT 102 +# define EADDRINUSE 100 +# define EADDRNOTAVAIL 101 +# define ENETDOWN 116 +# define ENETUNREACH 118 +# define ECONNRESET 108 +# define ENOBUFS 119 +# define EISCONN 113 +# define ENOTCONN 126 +# define ETIMEDOUT 138 +# define ECONNREFUSED 107 +# define ELOOP 114 +# define EHOSTUNREACH 110 +# define EWOULDBLOCK 140 +# define GNULIB_defined_ESOCK 1 +# endif + +# ifndef ETXTBSY +# define ETXTBSY 139 +# define ENODATA 120 /* not required by POSIX */ +# define ENOSR 124 /* not required by POSIX */ +# define ENOSTR 125 /* not required by POSIX */ +# define ETIME 137 /* not required by POSIX */ +# define EOTHER 131 /* not required by POSIX */ +# define GNULIB_defined_ESTREAMS 1 +# endif + +/* These are intentionally the same values as the WSA* error numbers, defined + in . */ +# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ +# define EPFNOSUPPORT 10046 /* not required by POSIX */ +# define ESHUTDOWN 10058 /* not required by POSIX */ +# define ETOOMANYREFS 10059 /* not required by POSIX */ +# define EHOSTDOWN 10064 /* not required by POSIX */ +# define EPROCLIM 10067 /* not required by POSIX */ +# define EUSERS 10068 /* not required by POSIX */ +# define EDQUOT 10069 +# define ESTALE 10070 +# define EREMOTE 10071 /* not required by POSIX */ +# define GNULIB_defined_EWINSOCK 1 + +# endif + + +/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros + EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ +# if @EMULTIHOP_HIDDEN@ +# define EMULTIHOP @EMULTIHOP_VALUE@ +# define GNULIB_defined_EMULTIHOP 1 +# endif +# if @ENOLINK_HIDDEN@ +# define ENOLINK @ENOLINK_VALUE@ +# define GNULIB_defined_ENOLINK 1 +# endif +# if @EOVERFLOW_HIDDEN@ +# define EOVERFLOW @EOVERFLOW_VALUE@ +# define GNULIB_defined_EOVERFLOW 1 +# endif + + +/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, + EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. + Likewise, on NonStop Kernel, EDQUOT is not defined. + Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, + HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. + + Note: When one of these systems defines some of these macros some day, + binaries will have to be recompiled so that they recognizes the new + errno values from the system. */ + +# ifndef ENOMSG +# define ENOMSG 2000 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 2001 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 2002 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 2003 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EMULTIHOP +# define EMULTIHOP 2004 +# define GNULIB_defined_EMULTIHOP 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 2005 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 2006 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 2007 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ENETRESET +# define ENETRESET 2011 +# define GNULIB_defined_ENETRESET 1 +# endif + +# ifndef ECONNABORTED +# define ECONNABORTED 2012 +# define GNULIB_defined_ECONNABORTED 1 +# endif + +# ifndef ESTALE +# define ESTALE 2009 +# define GNULIB_defined_ESTALE 1 +# endif + +# ifndef EDQUOT +# define EDQUOT 2010 +# define GNULIB_defined_EDQUOT 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 2008 +# define GNULIB_defined_ECANCELED 1 +# endif + +/* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not + defined. */ + +# ifndef EOWNERDEAD +# if defined __sun + /* Use the same values as defined for Solaris >= 8, for + interoperability. */ +# define EOWNERDEAD 58 +# define ENOTRECOVERABLE 59 +# elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* We have a conflict here: pthreads-win32 defines these values + differently than MSVC 10. It's hairy to decide which one to use. */ +# if defined __MINGW32__ && !defined USE_WINDOWS_THREADS + /* Use the same values as defined by pthreads-win32, for + interoperability. */ +# define EOWNERDEAD 43 +# define ENOTRECOVERABLE 44 +# else + /* Use the same values as defined by MSVC 10, for + interoperability. */ +# define EOWNERDEAD 133 +# define ENOTRECOVERABLE 127 +# endif +# else +# define EOWNERDEAD 2013 +# define ENOTRECOVERABLE 2014 +# endif +# define GNULIB_defined_EOWNERDEAD 1 +# define GNULIB_defined_ENOTRECOVERABLE 1 +# endif + +# ifndef EILSEQ +# define EILSEQ 2015 +# define GNULIB_defined_EILSEQ 1 +# endif + +#endif /* _@GUARD_PREFIX@_ERRNO_H */ +#endif /* _@GUARD_PREFIX@_ERRNO_H */ diff --git a/grub-core/gnulib/error.c b/grub-core/gnulib/error.c new file mode 100644 index 000000000..865b29340 --- /dev/null +++ b/grub-core/gnulib/error.c @@ -0,0 +1,401 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990-1998, 2000-2007, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by David MacKenzie . */ + +#if !_LIBC +# include +#endif + +#include "error.h" + +#include +#include +#include +#include + +#if !_LIBC && ENABLE_NLS +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#ifdef _LIBC +# include +# include +# include +# include +# define mbsrtowcs __mbsrtowcs +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#ifndef _ +# define _(String) String +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +unsigned int error_message_count; + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ + +# define program_name program_invocation_name +# include +# include +# include + +/* In GNU libc we want do not want to use the common name 'error' directly. + Instead make it a weak alias. */ +extern void __error (int status, int errnum, const char *message, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +extern void __error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, + ...) + __attribute__ ((__format__ (__printf__, 5, 6)));; +# define error __error +# define error_at_line __error_at_line + +# include +# define fflush(s) INTUSE(_IO_fflush) (s) +# undef putc +# define putc(c, fp) INTUSE(_IO_putc) (c, fp) + +# include + +#else /* not _LIBC */ + +# include +# include + +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include +/* Get _get_osfhandle. */ +# include "msvc-nothrow.h" +# endif + +/* The gnulib override of fcntl is not needed in this file. */ +# undef fcntl + +# if !HAVE_DECL_STRERROR_R +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +# if STRERROR_R_CHAR_P +char *strerror_r (); +# else +int strerror_r (); +# endif +# endif + +/* The calling program should define program_name and set it to the + name of the executing program. */ +extern char *program_name; + +# if HAVE_STRERROR_R || defined strerror_r +# define __strerror_r strerror_r +# endif /* HAVE_STRERROR_R || defined strerror_r */ +#endif /* not _LIBC */ + +#if !_LIBC +/* Return non-zero if FD is open. */ +static int +is_open (int fd) +{ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On native Windows: The initial state of unassigned standard file + descriptors is that they are open but point to an INVALID_HANDLE_VALUE. + There is no fcntl, and the gnulib replacement fcntl does not support + F_GETFL. */ + return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; +# else +# ifndef F_GETFL +# error Please port fcntl to your platform +# endif + return 0 <= fcntl (fd, F_GETFL); +# endif +} +#endif + +static void +flush_stdout (void) +{ +#if !_LIBC + int stdout_fd; + +# if GNULIB_FREOPEN_SAFER + /* Use of gnulib's freopen-safer module normally ensures that + fileno (stdout) == 1 + whenever stdout is open. */ + stdout_fd = STDOUT_FILENO; +# else + /* POSIX states that fileno (stdout) after fclose is unspecified. But in + practice it is not a problem, because stdout is statically allocated and + the fd of a FILE stream is stored as a field in its allocated memory. */ + stdout_fd = fileno (stdout); +# endif + /* POSIX states that fflush (stdout) after fclose is unspecified; it + is safe in glibc, but not on all other platforms. fflush (NULL) + is always defined, but too draconian. */ + if (0 <= stdout_fd && is_open (stdout_fd)) +#endif + fflush (stdout); +} + +static void +print_errno_message (int errnum) +{ + char const *s; + +#if defined HAVE_STRERROR_R || _LIBC + char errbuf[1024]; +# if STRERROR_R_CHAR_P || _LIBC + s = __strerror_r (errnum, errbuf, sizeof errbuf); +# else + if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) + s = errbuf; + else + s = 0; +# endif +#else + s = strerror (errnum); +#endif + +#if !_LIBC + if (! s) + s = _("Unknown system error"); +#endif + +#if _LIBC + __fxprintf (NULL, ": %s", s); +#else + fprintf (stderr, ": %s", s); +#endif +} + +static void +error_tail (int status, int errnum, const char *message, va_list args) +{ +#if _LIBC + if (_IO_fwide (stderr, 0) > 0) + { +# define ALLOCA_LIMIT 2000 + size_t len = strlen (message) + 1; + wchar_t *wmessage = NULL; + mbstate_t st; + size_t res; + const char *tmp; + bool use_malloc = false; + + while (1) + { + if (__libc_use_alloca (len * sizeof (wchar_t))) + wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); + else + { + if (!use_malloc) + wmessage = NULL; + + wchar_t *p = (wchar_t *) realloc (wmessage, + len * sizeof (wchar_t)); + if (p == NULL) + { + free (wmessage); + fputws_unlocked (L"out of memory\n", stderr); + return; + } + wmessage = p; + use_malloc = true; + } + + memset (&st, '\0', sizeof (st)); + tmp = message; + + res = mbsrtowcs (wmessage, &tmp, len, &st); + if (res != len) + break; + + if (__builtin_expect (len >= SIZE_MAX / 2, 0)) + { + /* This really should not happen if everything is fine. */ + res = (size_t) -1; + break; + } + + len *= 2; + } + + if (res == (size_t) -1) + { + /* The string cannot be converted. */ + if (use_malloc) + { + free (wmessage); + use_malloc = false; + } + wmessage = (wchar_t *) L"???"; + } + + __vfwprintf (stderr, wmessage, args); + + if (use_malloc) + free (wmessage); + } + else +#endif + vfprintf (stderr, message, args); + va_end (args); + + ++error_message_count; + if (errnum) + print_errno_message (errnum); +#if _LIBC + __fxprintf (NULL, "\n"); +#else + putc ('\n', stderr); +#endif + fflush (stderr); + if (status) + exit (status); +} + + +/* Print the program name and error message MESSAGE, which is a printf-style + format string with optional args. + If ERRNUM is nonzero, print its corresponding system error message. + Exit with status STATUS if it is nonzero. */ +void +error (int status, int errnum, const char *message, ...) +{ + va_list args; + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s: ", program_name); +#else + fprintf (stderr, "%s: ", program_name); +#endif + } + + va_start (args, message); + error_tail (status, errnum, message, args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +int error_one_per_line; + +void +error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, ...) +{ + va_list args; + + if (error_one_per_line) + { + static const char *old_file_name; + static unsigned int old_line_number; + + if (old_line_number == line_number + && (file_name == old_file_name + || strcmp (old_file_name, file_name) == 0)) + /* Simply return and print nothing. */ + return; + + old_file_name = file_name; + old_line_number = line_number; + } + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s:", program_name); +#else + fprintf (stderr, "%s:", program_name); +#endif + } + +#if _LIBC + __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ", + file_name, line_number); +#else + fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", + file_name, line_number); +#endif + + va_start (args, message); + error_tail (status, errnum, message, args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +#ifdef _LIBC +/* Make the weak alias. */ +# undef error +# undef error_at_line +weak_alias (__error, error) +weak_alias (__error_at_line, error_at_line) +#endif diff --git a/grub-core/gnulib/error.h b/grub-core/gnulib/error.h new file mode 100644 index 000000000..afcb0e10c --- /dev/null +++ b/grub-core/gnulib/error.h @@ -0,0 +1,65 @@ +/* Declaration for error-reporting function + Copyright (C) 1995-1997, 2003, 2006, 2008-2013 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _ERROR_H +#define _ERROR_H 1 + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Print a message with 'fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ + +extern void error (int __status, int __errnum, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); + +extern void error_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 6)); + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/grub-core/gnulib/float+.h b/grub-core/gnulib/float+.h new file mode 100644 index 000000000..32fb790bb --- /dev/null +++ b/grub-core/gnulib/float+.h @@ -0,0 +1,147 @@ +/* Supplemental information about the floating-point formats. + Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _FLOATPLUS_H +#define _FLOATPLUS_H + +#include +#include + +/* Number of bits in the mantissa of a floating-point number, including the + "hidden bit". */ +#if FLT_RADIX == 2 +# define FLT_MANT_BIT FLT_MANT_DIG +# define DBL_MANT_BIT DBL_MANT_DIG +# define LDBL_MANT_BIT LDBL_MANT_DIG +#elif FLT_RADIX == 4 +# define FLT_MANT_BIT (FLT_MANT_DIG * 2) +# define DBL_MANT_BIT (DBL_MANT_DIG * 2) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) +#elif FLT_RADIX == 16 +# define FLT_MANT_BIT (FLT_MANT_DIG * 4) +# define DBL_MANT_BIT (DBL_MANT_DIG * 4) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) +#endif + +/* Bit mask that can be used to mask the exponent, as an unsigned number. */ +#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) +#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) + +/* Number of bits used for the exponent of a floating-point number, including + the exponent's sign. */ +#define FLT_EXP_BIT \ + (FLT_EXP_MASK < 0x100 ? 8 : \ + FLT_EXP_MASK < 0x200 ? 9 : \ + FLT_EXP_MASK < 0x400 ? 10 : \ + FLT_EXP_MASK < 0x800 ? 11 : \ + FLT_EXP_MASK < 0x1000 ? 12 : \ + FLT_EXP_MASK < 0x2000 ? 13 : \ + FLT_EXP_MASK < 0x4000 ? 14 : \ + FLT_EXP_MASK < 0x8000 ? 15 : \ + FLT_EXP_MASK < 0x10000 ? 16 : \ + FLT_EXP_MASK < 0x20000 ? 17 : \ + FLT_EXP_MASK < 0x40000 ? 18 : \ + FLT_EXP_MASK < 0x80000 ? 19 : \ + FLT_EXP_MASK < 0x100000 ? 20 : \ + FLT_EXP_MASK < 0x200000 ? 21 : \ + FLT_EXP_MASK < 0x400000 ? 22 : \ + FLT_EXP_MASK < 0x800000 ? 23 : \ + FLT_EXP_MASK < 0x1000000 ? 24 : \ + FLT_EXP_MASK < 0x2000000 ? 25 : \ + FLT_EXP_MASK < 0x4000000 ? 26 : \ + FLT_EXP_MASK < 0x8000000 ? 27 : \ + FLT_EXP_MASK < 0x10000000 ? 28 : \ + FLT_EXP_MASK < 0x20000000 ? 29 : \ + FLT_EXP_MASK < 0x40000000 ? 30 : \ + FLT_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define DBL_EXP_BIT \ + (DBL_EXP_MASK < 0x100 ? 8 : \ + DBL_EXP_MASK < 0x200 ? 9 : \ + DBL_EXP_MASK < 0x400 ? 10 : \ + DBL_EXP_MASK < 0x800 ? 11 : \ + DBL_EXP_MASK < 0x1000 ? 12 : \ + DBL_EXP_MASK < 0x2000 ? 13 : \ + DBL_EXP_MASK < 0x4000 ? 14 : \ + DBL_EXP_MASK < 0x8000 ? 15 : \ + DBL_EXP_MASK < 0x10000 ? 16 : \ + DBL_EXP_MASK < 0x20000 ? 17 : \ + DBL_EXP_MASK < 0x40000 ? 18 : \ + DBL_EXP_MASK < 0x80000 ? 19 : \ + DBL_EXP_MASK < 0x100000 ? 20 : \ + DBL_EXP_MASK < 0x200000 ? 21 : \ + DBL_EXP_MASK < 0x400000 ? 22 : \ + DBL_EXP_MASK < 0x800000 ? 23 : \ + DBL_EXP_MASK < 0x1000000 ? 24 : \ + DBL_EXP_MASK < 0x2000000 ? 25 : \ + DBL_EXP_MASK < 0x4000000 ? 26 : \ + DBL_EXP_MASK < 0x8000000 ? 27 : \ + DBL_EXP_MASK < 0x10000000 ? 28 : \ + DBL_EXP_MASK < 0x20000000 ? 29 : \ + DBL_EXP_MASK < 0x40000000 ? 30 : \ + DBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define LDBL_EXP_BIT \ + (LDBL_EXP_MASK < 0x100 ? 8 : \ + LDBL_EXP_MASK < 0x200 ? 9 : \ + LDBL_EXP_MASK < 0x400 ? 10 : \ + LDBL_EXP_MASK < 0x800 ? 11 : \ + LDBL_EXP_MASK < 0x1000 ? 12 : \ + LDBL_EXP_MASK < 0x2000 ? 13 : \ + LDBL_EXP_MASK < 0x4000 ? 14 : \ + LDBL_EXP_MASK < 0x8000 ? 15 : \ + LDBL_EXP_MASK < 0x10000 ? 16 : \ + LDBL_EXP_MASK < 0x20000 ? 17 : \ + LDBL_EXP_MASK < 0x40000 ? 18 : \ + LDBL_EXP_MASK < 0x80000 ? 19 : \ + LDBL_EXP_MASK < 0x100000 ? 20 : \ + LDBL_EXP_MASK < 0x200000 ? 21 : \ + LDBL_EXP_MASK < 0x400000 ? 22 : \ + LDBL_EXP_MASK < 0x800000 ? 23 : \ + LDBL_EXP_MASK < 0x1000000 ? 24 : \ + LDBL_EXP_MASK < 0x2000000 ? 25 : \ + LDBL_EXP_MASK < 0x4000000 ? 26 : \ + LDBL_EXP_MASK < 0x8000000 ? 27 : \ + LDBL_EXP_MASK < 0x10000000 ? 28 : \ + LDBL_EXP_MASK < 0x20000000 ? 29 : \ + LDBL_EXP_MASK < 0x40000000 ? 30 : \ + LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) + +/* Number of bits used for a floating-point number: the mantissa (not + counting the "hidden bit", since it may or may not be explicit), the + exponent, and the sign. */ +#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) +#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) +#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) + +/* Number of bytes used for a floating-point number. + This can be smaller than the 'sizeof'. For example, on i386 systems, + 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence + LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but + sizeof (long double) = 12 or = 16. */ +#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) + +/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ +typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; +typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; +typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; + +#endif /* _FLOATPLUS_H */ diff --git a/grub-core/gnulib/float.c b/grub-core/gnulib/float.c new file mode 100644 index 000000000..366945fa3 --- /dev/null +++ b/grub-core/gnulib/float.c @@ -0,0 +1,33 @@ +/* Auxiliary definitions for . + Copyright (C) 2011-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ +const union gl_long_double_union gl_LDBL_MAX = + { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; +#elif defined __i386__ +const union gl_long_double_union gl_LDBL_MAX = + { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; +#else +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; +#endif diff --git a/grub-core/gnulib/float.in.h b/grub-core/gnulib/float.in.h new file mode 100644 index 000000000..84e1950f9 --- /dev/null +++ b/grub-core/gnulib/float.in.h @@ -0,0 +1,188 @@ +/* A correct . + + Copyright (C) 2007-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _@GUARD_PREFIX@_FLOAT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ + +#ifndef _@GUARD_PREFIX@_FLOAT_H +#define _@GUARD_PREFIX@_FLOAT_H + +/* 'long double' properties. */ + +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.0842021724855044340E-19L +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.3621031431120935063E-4932L +/* Maximum representable finite number. */ +# undef LDBL_MAX +# define LDBL_MAX 1.1897314953572317650E+4932L +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of + precision in the compiler but 64 bits of precision at runtime. See + . */ +#if defined __i386__ && defined __FreeBSD__ +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.3621031431120935E-4932L /* = 0x1p-16382L */ +/* Maximum representable finite number. */ +# undef LDBL_MAX +/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. + But the largest literal that GCC allows us to write is + 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. + So, define it like this through a reference to an external variable + + const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; + extern const long double LDBL_MAX; + + Unfortunately, this is not a constant expression. */ +union gl_long_double_union + { + struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; + long double ld; + }; +extern const union gl_long_double_union gl_LDBL_MAX; +# define LDBL_MAX (gl_LDBL_MAX.ld) +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are + wrong. + On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ +#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP DBL_MIN_10_EXP +# undef LDBL_MIN +# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ +#endif +#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MAX +/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. + It is not easy to define: + #define LDBL_MAX 1.79769313486231580793728971405302307166e308L + is too small, whereas + #define LDBL_MAX 1.79769313486231580793728971405302307167e308L + is too large. Apparently a bug in GCC decimal-to-binary conversion. + Also, I can't get values larger than + #define LDBL63 ((long double) (1ULL << 63)) + #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) + which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. + So, define it like this through a reference to an external variable + + const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; + extern const long double LDBL_MAX; + + or through a pointer cast + + #define LDBL_MAX \ + (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) + + Unfortunately, this is not a constant expression, and the latter expression + does not work well when GCC is optimizing.. */ +union gl_long_double_union + { + struct { double hi; double lo; } dd; + long double ld; + }; +extern const union gl_long_double_union gl_LDBL_MAX; +# define LDBL_MAX (gl_LDBL_MAX.ld) +#endif + +/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. + On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON + are wrong. */ +#if defined __sgi && (LDBL_MANT_DIG >= 106) +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 106 +# if defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP DBL_MIN_10_EXP +# undef LDBL_MIN +# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ +# endif +#endif + +#if @REPLACE_ITOLD@ +/* Pull in a function that fixes the 'int' to 'long double' conversion + of glibc 2.7. */ +extern +# ifdef __cplusplus +"C" +# endif +void _Qp_itoq (long double *, int); +static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; +#endif + +#endif /* _@GUARD_PREFIX@_FLOAT_H */ +#endif /* _@GUARD_PREFIX@_FLOAT_H */ diff --git a/grub-core/gnulib/fnmatch.c b/grub-core/gnulib/fnmatch.c new file mode 100644 index 000000000..6a09e1a9b --- /dev/null +++ b/grub-core/gnulib/fnmatch.c @@ -0,0 +1,350 @@ +/* Copyright (C) 1991-1993, 1996-2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _LIBC +# include +#endif + +/* Enable GNU extensions in fnmatch.h. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#if ! defined __builtin_expect && __GNUC__ < 3 +# define __builtin_expect(expr, expected) (expr) +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define WIDE_CHAR_SUPPORT \ + (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \ + && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY)) + +/* For platform which support the ISO C amendment 1 functionality we + support user defined character classes. */ +#if defined _LIBC || WIDE_CHAR_SUPPORT +# include +# include +#endif + +/* We need some of the locale data (the collation sequence information) + but there is no interface to get this information in general. Therefore + we support a correct implementation only in glibc. */ +#ifdef _LIBC +# include "../locale/localeinfo.h" +# include "../locale/elem-hash.h" +# include "../locale/coll-lookup.h" +# include + +# define CONCAT(a,b) __CONCAT(a,b) +# define mbsrtowcs __mbsrtowcs +# define fnmatch __fnmatch +extern int fnmatch (const char *pattern, const char *string, int flags); +#endif + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set. */ +#define NO_LEADING_PERIOD(flags) \ + ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD)) + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and have not detected a bug + in the library. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand 'configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU + + +# if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) +# define isblank(c) ((c) == ' ' || (c) == '\t') +# endif + +# define STREQ(s1, s2) (strcmp (s1, s2) == 0) + +# if defined _LIBC || WIDE_CHAR_SUPPORT +/* The GNU C library provides support for user-defined character classes + and the functions from ISO C amendment 1. */ +# ifdef CHARCLASS_NAME_MAX +# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX +# else +/* This shouldn't happen but some implementation might still have this + problem. Use a reasonable default value. */ +# define CHAR_CLASS_MAX_LENGTH 256 +# endif + +# ifdef _LIBC +# define IS_CHAR_CLASS(string) __wctype (string) +# else +# define IS_CHAR_CLASS(string) wctype (string) +# endif + +# ifdef _LIBC +# define ISWCTYPE(WC, WT) __iswctype (WC, WT) +# else +# define ISWCTYPE(WC, WT) iswctype (WC, WT) +# endif + +# if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC +/* In this case we are implementing the multibyte character handling. */ +# define HANDLE_MULTIBYTE 1 +# endif + +# else +# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, 'xdigit'. */ + +# define IS_CHAR_CLASS(string) \ + (STREQ (string, "alpha") || STREQ (string, "upper") \ + || STREQ (string, "lower") || STREQ (string, "digit") \ + || STREQ (string, "alnum") || STREQ (string, "xdigit") \ + || STREQ (string, "space") || STREQ (string, "print") \ + || STREQ (string, "punct") || STREQ (string, "graph") \ + || STREQ (string, "cntrl") || STREQ (string, "blank")) +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +/* Global variable. */ +static int posixly_correct; + +# ifndef internal_function +/* Inside GNU libc we mark some function in a special way. In other + environments simply ignore the marking. */ +# define internal_function +# endif + +/* Note that this evaluates C many times. */ +# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) +# define CHAR char +# define UCHAR unsigned char +# define INT int +# define FCT internal_fnmatch +# define EXT ext_match +# define END end_pattern +# define L_(CS) CS +# ifdef _LIBC +# define BTOWC(C) __btowc (C) +# else +# define BTOWC(C) btowc (C) +# endif +# define STRLEN(S) strlen (S) +# define STRCAT(D, S) strcat (D, S) +# ifdef _LIBC +# define MEMPCPY(D, S, N) __mempcpy (D, S, N) +# else +# if HAVE_MEMPCPY +# define MEMPCPY(D, S, N) mempcpy (D, S, N) +# else +# define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) +# endif +# endif +# define MEMCHR(S, C, N) memchr (S, C, N) +# include "fnmatch_loop.c" + + +# if HANDLE_MULTIBYTE +# define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c)) +# define CHAR wchar_t +# define UCHAR wint_t +# define INT wint_t +# define FCT internal_fnwmatch +# define EXT ext_wmatch +# define END end_wpattern +# define L_(CS) L##CS +# define BTOWC(C) (C) +# ifdef _LIBC +# define STRLEN(S) __wcslen (S) +# define STRCAT(D, S) __wcscat (D, S) +# define MEMPCPY(D, S, N) __wmempcpy (D, S, N) +# else +# define STRLEN(S) wcslen (S) +# define STRCAT(D, S) wcscat (D, S) +# if HAVE_WMEMPCPY +# define MEMPCPY(D, S, N) wmempcpy (D, S, N) +# else +# define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N)) +# endif +# endif +# define MEMCHR(S, C, N) wmemchr (S, C, N) +# define WIDE_CHAR_VERSION 1 + +# undef IS_CHAR_CLASS +/* We have to convert the wide character string in a multibyte string. But + we know that the character class names consist of alphanumeric characters + from the portable character set, and since the wide character encoding + for a member of the portable character set is the same code point as + its single-byte encoding, we can use a simplified method to convert the + string to a multibyte character string. */ +static wctype_t +is_char_class (const wchar_t *wcs) +{ + char s[CHAR_CLASS_MAX_LENGTH + 1]; + char *cp = s; + + do + { + /* Test for a printable character from the portable character set. */ +# ifdef _LIBC + if (*wcs < 0x20 || *wcs > 0x7e + || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60) + return (wctype_t) 0; +# else + switch (*wcs) + { + case L' ': case L'!': case L'"': case L'#': case L'%': + case L'&': case L'\'': case L'(': case L')': case L'*': + case L'+': case L',': case L'-': case L'.': case L'/': + case L'0': case L'1': case L'2': case L'3': case L'4': + case L'5': case L'6': case L'7': case L'8': case L'9': + case L':': case L';': case L'<': case L'=': case L'>': + case L'?': + case L'A': case L'B': case L'C': case L'D': case L'E': + case L'F': case L'G': case L'H': case L'I': case L'J': + case L'K': case L'L': case L'M': case L'N': case L'O': + case L'P': case L'Q': case L'R': case L'S': case L'T': + case L'U': case L'V': case L'W': case L'X': case L'Y': + case L'Z': + case L'[': case L'\\': case L']': case L'^': case L'_': + case L'a': case L'b': case L'c': case L'd': case L'e': + case L'f': case L'g': case L'h': case L'i': case L'j': + case L'k': case L'l': case L'm': case L'n': case L'o': + case L'p': case L'q': case L'r': case L's': case L't': + case L'u': case L'v': case L'w': case L'x': case L'y': + case L'z': case L'{': case L'|': case L'}': case L'~': + break; + default: + return (wctype_t) 0; + } +# endif + + /* Avoid overrunning the buffer. */ + if (cp == s + CHAR_CLASS_MAX_LENGTH) + return (wctype_t) 0; + + *cp++ = (char) *wcs++; + } + while (*wcs != L'\0'); + + *cp = '\0'; + +# ifdef _LIBC + return __wctype (s); +# else + return wctype (s); +# endif +} +# define IS_CHAR_CLASS(string) is_char_class (string) + +# include "fnmatch_loop.c" +# endif + + +int +fnmatch (const char *pattern, const char *string, int flags) +{ +# if HANDLE_MULTIBYTE +# define ALLOCA_LIMIT 2000 + if (__builtin_expect (MB_CUR_MAX, 1) != 1) + { + mbstate_t ps; + size_t patsize; + size_t strsize; + size_t totsize; + wchar_t *wpattern; + wchar_t *wstring; + int res; + + /* Calculate the size needed to convert the strings to + wide characters. */ + memset (&ps, '\0', sizeof (ps)); + patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1; + if (__builtin_expect (patsize != 0, 1)) + { + assert (mbsinit (&ps)); + strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1; + if (__builtin_expect (strsize != 0, 1)) + { + assert (mbsinit (&ps)); + totsize = patsize + strsize; + if (__builtin_expect (! (patsize <= totsize + && totsize <= SIZE_MAX / sizeof (wchar_t)), + 0)) + { + errno = ENOMEM; + return -1; + } + + /* Allocate room for the wide characters. */ + if (__builtin_expect (totsize < ALLOCA_LIMIT, 1)) + wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t)); + else + { + wpattern = malloc (totsize * sizeof (wchar_t)); + if (__builtin_expect (! wpattern, 0)) + { + errno = ENOMEM; + return -1; + } + } + wstring = wpattern + patsize; + + /* Convert the strings into wide characters. */ + mbsrtowcs (wpattern, &pattern, patsize, &ps); + assert (mbsinit (&ps)); + mbsrtowcs (wstring, &string, strsize, &ps); + + res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1, + flags & FNM_PERIOD, flags); + + if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0)) + free (wpattern); + return res; + } + } + } + +# endif /* HANDLE_MULTIBYTE */ + + return internal_fnmatch (pattern, string, string + strlen (string), + flags & FNM_PERIOD, flags); +} + +# ifdef _LIBC +# undef fnmatch +versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3); +# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3) +strong_alias (__fnmatch, __fnmatch_old) +compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0); +# endif +libc_hidden_ver (__fnmatch, fnmatch) +# endif + +#endif /* _LIBC or not __GNU_LIBRARY__. */ diff --git a/grub-core/gnulib/fnmatch.in.h b/grub-core/gnulib/fnmatch.in.h new file mode 100644 index 000000000..d39ce2f1c --- /dev/null +++ b/grub-core/gnulib/fnmatch.in.h @@ -0,0 +1,67 @@ +/* Copyright (C) 1991-1993, 1996-1999, 2001-2003, 2005, 2007, 2009-2013 Free + Software Foundation, Inc. + + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _FNMATCH_H +#define _FNMATCH_H 1 + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* We #undef these before defining them because some losing systems + (HP-UX A.08.07 for example) define these in . */ +#undef FNM_PATHNAME +#undef FNM_NOESCAPE +#undef FNM_PERIOD + +/* Bits set in the FLAGS argument to 'fnmatch'. */ +#define FNM_PATHNAME (1 << 0) /* No wildcard can ever match '/'. */ +#define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ +#define FNM_PERIOD (1 << 2) /* Leading '.' is matched only explicitly. */ + +#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE +# define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ +# define FNM_LEADING_DIR (1 << 3) /* Ignore '/...' after a match. */ +# define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ +# define FNM_EXTMATCH (1 << 5) /* Use ksh-like extended matching. */ +#endif + +/* Value returned by 'fnmatch' if STRING does not match PATTERN. */ +#define FNM_NOMATCH 1 + +/* This value is returned if the implementation does not support + 'fnmatch'. Since this is not the case here it will never be + returned but the conformance test suites still require the symbol + to be defined. */ +#ifdef _XOPEN_SOURCE +# define FNM_NOSYS (-1) +#endif + +/* Match NAME against the file name pattern PATTERN, + returning zero if it matches, FNM_NOMATCH if not. */ +extern int fnmatch (const char *__pattern, const char *__name, + int __flags) + _GL_ARG_NONNULL ((1, 2)); + +#ifdef __cplusplus +} +#endif + +#endif /* fnmatch.h */ diff --git a/grub-core/gnulib/fnmatch_loop.c b/grub-core/gnulib/fnmatch_loop.c new file mode 100644 index 000000000..f57cd63f9 --- /dev/null +++ b/grub-core/gnulib/fnmatch_loop.c @@ -0,0 +1,1219 @@ +/* Copyright (C) 1991-1993, 1996-2006, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* Match STRING against the file name pattern PATTERN, returning zero if + it matches, nonzero if not. */ +static int EXT (INT opt, const CHAR *pattern, const CHAR *string, + const CHAR *string_end, bool no_leading_period, int flags) + internal_function; +static const CHAR *END (const CHAR *patternp) internal_function; + +static int +internal_function +FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, + bool no_leading_period, int flags) +{ + register const CHAR *p = pattern, *n = string; + register UCHAR c; +#ifdef _LIBC +# if WIDE_CHAR_VERSION + const char *collseq = (const char *) + _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC); +# else + const UCHAR *collseq = (const UCHAR *) + _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQMB); +# endif +#endif + + while ((c = *p++) != L_('\0')) + { + bool new_no_leading_period = false; + c = FOLD (c); + + switch (c) + { + case L_('?'): + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, + flags); + if (res != -1) + return res; + } + + if (n == string_end) + return FNM_NOMATCH; + else if (*n == L_('/') && (flags & FNM_FILE_NAME)) + return FNM_NOMATCH; + else if (*n == L_('.') && no_leading_period) + return FNM_NOMATCH; + break; + + case L_('\\'): + if (!(flags & FNM_NOESCAPE)) + { + c = *p++; + if (c == L_('\0')) + /* Trailing \ loses. */ + return FNM_NOMATCH; + c = FOLD (c); + } + if (n == string_end || FOLD ((UCHAR) *n) != c) + return FNM_NOMATCH; + break; + + case L_('*'): + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, + flags); + if (res != -1) + return res; + } + + if (n != string_end && *n == L_('.') && no_leading_period) + return FNM_NOMATCH; + + for (c = *p++; c == L_('?') || c == L_('*'); c = *p++) + { + if (*p == L_('(') && (flags & FNM_EXTMATCH) != 0) + { + const CHAR *endp = END (p); + if (endp != p) + { + /* This is a pattern. Skip over it. */ + p = endp; + continue; + } + } + + if (c == L_('?')) + { + /* A ? needs to match one character. */ + if (n == string_end) + /* There isn't another character; no match. */ + return FNM_NOMATCH; + else if (*n == L_('/') + && __builtin_expect (flags & FNM_FILE_NAME, 0)) + /* A slash does not match a wildcard under + FNM_FILE_NAME. */ + return FNM_NOMATCH; + else + /* One character of the string is consumed in matching + this ? wildcard, so *??? won't match if there are + less than three characters. */ + ++n; + } + } + + if (c == L_('\0')) + /* The wildcard(s) is/are the last element of the pattern. + If the name is a file name and contains another slash + this means it cannot match, unless the FNM_LEADING_DIR + flag is set. */ + { + int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH; + + if (flags & FNM_FILE_NAME) + { + if (flags & FNM_LEADING_DIR) + result = 0; + else + { + if (MEMCHR (n, L_('/'), string_end - n) == NULL) + result = 0; + } + } + + return result; + } + else + { + const CHAR *endp; + + endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'), + string_end - n); + if (endp == NULL) + endp = string_end; + + if (c == L_('[') + || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0 + && (c == L_('@') || c == L_('+') || c == L_('!')) + && *p == L_('('))) + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + bool no_leading_period2 = no_leading_period; + + for (--p; n < endp; ++n, no_leading_period2 = false) + if (FCT (p, n, string_end, no_leading_period2, flags2) + == 0) + return 0; + } + else if (c == L_('/') && (flags & FNM_FILE_NAME)) + { + while (n < string_end && *n != L_('/')) + ++n; + if (n < string_end && *n == L_('/') + && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags) + == 0)) + return 0; + } + else + { + int flags2 = ((flags & FNM_FILE_NAME) + ? flags : (flags & ~FNM_PERIOD)); + int no_leading_period2 = no_leading_period; + + if (c == L_('\\') && !(flags & FNM_NOESCAPE)) + c = *p; + c = FOLD (c); + for (--p; n < endp; ++n, no_leading_period2 = false) + if (FOLD ((UCHAR) *n) == c + && (FCT (p, n, string_end, no_leading_period2, flags2) + == 0)) + return 0; + } + } + + /* If we come here no match is possible with the wildcard. */ + return FNM_NOMATCH; + + case L_('['): + { + /* Nonzero if the sense of the character class is inverted. */ + const CHAR *p_init = p; + const CHAR *n_init = n; + register bool not; + CHAR cold; + UCHAR fn; + + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + if (n == string_end) + return FNM_NOMATCH; + + if (*n == L_('.') && no_leading_period) + return FNM_NOMATCH; + + if (*n == L_('/') && (flags & FNM_FILE_NAME)) + /* '/' cannot be matched. */ + return FNM_NOMATCH; + + not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^'))); + if (not) + ++p; + + fn = FOLD ((UCHAR) *n); + + c = *p++; + for (;;) + { + if (!(flags & FNM_NOESCAPE) && c == L_('\\')) + { + if (*p == L_('\0')) + return FNM_NOMATCH; + c = FOLD ((UCHAR) *p); + ++p; + + goto normal_bracket; + } + else if (c == L_('[') && *p == L_(':')) + { + /* Leave room for the null. */ + CHAR str[CHAR_CLASS_MAX_LENGTH + 1]; + size_t c1 = 0; +#if defined _LIBC || WIDE_CHAR_SUPPORT + wctype_t wt; +#endif + const CHAR *startp = p; + + for (;;) + { + if (c1 == CHAR_CLASS_MAX_LENGTH) + /* The name is too long and therefore the pattern + is ill-formed. */ + return FNM_NOMATCH; + + c = *++p; + if (c == L_(':') && p[1] == L_(']')) + { + p += 2; + break; + } + if (c < L_('a') || c >= L_('z')) + { + /* This cannot possibly be a character class name. + Match it as a normal range. */ + p = startp; + c = L_('['); + goto normal_bracket; + } + str[c1++] = c; + } + str[c1] = L_('\0'); + +#if defined _LIBC || WIDE_CHAR_SUPPORT + wt = IS_CHAR_CLASS (str); + if (wt == 0) + /* Invalid character class name. */ + return FNM_NOMATCH; + +# if defined _LIBC && ! WIDE_CHAR_VERSION + /* The following code is glibc specific but does + there a good job in speeding up the code since + we can avoid the btowc() call. */ + if (_ISCTYPE ((UCHAR) *n, wt)) + goto matched; +# else + if (ISWCTYPE (BTOWC ((UCHAR) *n), wt)) + goto matched; +# endif +#else + if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n)) + || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n)) + || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n)) + || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n)) + || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n)) + || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n)) + || (STREQ (str, L_("lower")) && islower ((UCHAR) *n)) + || (STREQ (str, L_("print")) && isprint ((UCHAR) *n)) + || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n)) + || (STREQ (str, L_("space")) && isspace ((UCHAR) *n)) + || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n)) + || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n))) + goto matched; +#endif + c = *p++; + } +#ifdef _LIBC + else if (c == L_('[') && *p == L_('=')) + { + UCHAR str[1]; + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + const CHAR *startp = p; + + c = *++p; + if (c == L_('\0')) + { + p = startp; + c = L_('['); + goto normal_bracket; + } + str[0] = c; + + c = *++p; + if (c != L_('=') || p[1] != L_(']')) + { + p = startp; + c = L_('['); + goto normal_bracket; + } + p += 2; + + if (nrules == 0) + { + if ((UCHAR) *n == str[0]) + goto matched; + } + else + { + const int32_t *table; +# if WIDE_CHAR_VERSION + const int32_t *weights; + const int32_t *extra; +# else + const unsigned char *weights; + const unsigned char *extra; +# endif + const int32_t *indirect; + int32_t idx; + const UCHAR *cp = (const UCHAR *) str; + + /* This #include defines a local function! */ +# if WIDE_CHAR_VERSION +# include +# else +# include +# endif + +# if WIDE_CHAR_VERSION + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC); + weights = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC); + extra = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC); +# else + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); +# endif + + idx = findidx (&cp); + if (idx != 0) + { + /* We found a table entry. Now see whether the + character we are currently at has the same + equivalence class value. */ + int len = weights[idx & 0xffffff]; + int32_t idx2; + const UCHAR *np = (const UCHAR *) n; + + idx2 = findidx (&np); + if (idx2 != 0 + && (idx >> 24) == (idx2 >> 24) + && len == weights[idx2 & 0xffffff]) + { + int cnt = 0; + + idx &= 0xffffff; + idx2 &= 0xffffff; + + while (cnt < len + && (weights[idx + 1 + cnt] + == weights[idx2 + 1 + cnt])) + ++cnt; + + if (cnt == len) + goto matched; + } + } + } + + c = *p++; + } +#endif + else if (c == L_('\0')) + { + /* [ unterminated, treat as normal character. */ + p = p_init; + n = n_init; + c = L_('['); + goto normal_match; + } + else + { + bool is_range = false; + +#ifdef _LIBC + bool is_seqval = false; + + if (c == L_('[') && *p == L_('.')) + { + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + const CHAR *startp = p; + size_t c1 = 0; + + while (1) + { + c = *++p; + if (c == L_('.') && p[1] == L_(']')) + { + p += 2; + break; + } + if (c == '\0') + return FNM_NOMATCH; + ++c1; + } + + /* We have to handling the symbols differently in + ranges since then the collation sequence is + important. */ + is_range = *p == L_('-') && p[1] != L_('\0'); + + if (nrules == 0) + { + /* There are no names defined in the collation + data. Therefore we only accept the trivial + names consisting of the character itself. */ + if (c1 != 1) + return FNM_NOMATCH; + + if (!is_range && *n == startp[1]) + goto matched; + + cold = startp[1]; + c = *p++; + } + else + { + int32_t table_size; + const int32_t *symb_table; +# ifdef WIDE_CHAR_VERSION + char str[c1]; + size_t strcnt; +# else +# define str (startp + 1) +# endif + const unsigned char *extra; + int32_t idx; + int32_t elem; + int32_t second; + int32_t hash; + +# ifdef WIDE_CHAR_VERSION + /* We have to convert the name to a single-byte + string. This is possible since the names + consist of ASCII characters and the internal + representation is UCS4. */ + for (strcnt = 0; strcnt < c1; ++strcnt) + str[strcnt] = startp[1 + strcnt]; +# endif + + table_size = + _NL_CURRENT_WORD (LC_COLLATE, + _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + + /* Locate the character in the hashing table. */ + hash = elem_hash (str, c1); + + idx = 0; + elem = hash % table_size; + if (symb_table[2 * elem] != 0) + { + second = hash % (table_size - 2) + 1; + + do + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + && (c1 + == extra[symb_table[2 * elem + 1]]) + && memcmp (str, + &extra[symb_table[2 * elem + + 1] + + 1], c1) == 0) + { + /* Yep, this is the entry. */ + idx = symb_table[2 * elem + 1]; + idx += 1 + extra[idx]; + break; + } + + /* Next entry. */ + elem += second; + } + while (symb_table[2 * elem] != 0); + } + + if (symb_table[2 * elem] != 0) + { + /* Compare the byte sequence but only if + this is not part of a range. */ +# ifdef WIDE_CHAR_VERSION + int32_t *wextra; + + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + + wextra = (int32_t *) &extra[idx + 4]; +# endif + + if (! is_range) + { +# ifdef WIDE_CHAR_VERSION + for (c1 = 0; + (int32_t) c1 < wextra[idx]; + ++c1) + if (n[c1] != wextra[1 + c1]) + break; + + if ((int32_t) c1 == wextra[idx]) + goto matched; +# else + for (c1 = 0; c1 < extra[idx]; ++c1) + if (n[c1] != extra[1 + c1]) + break; + + if (c1 == extra[idx]) + goto matched; +# endif + } + + /* Get the collation sequence value. */ + is_seqval = true; +# ifdef WIDE_CHAR_VERSION + cold = wextra[1 + wextra[idx]]; +# else + /* Adjust for the alignment. */ + idx += 1 + extra[idx]; + idx = (idx + 3) & ~4; + cold = *((int32_t *) &extra[idx]); +# endif + + c = *p++; + } + else if (c1 == 1) + { + /* No valid character. Match it as a + single byte. */ + if (!is_range && *n == str[0]) + goto matched; + + cold = str[0]; + c = *p++; + } + else + return FNM_NOMATCH; + } + } + else +# undef str +#endif + { + c = FOLD (c); + normal_bracket: + + /* We have to handling the symbols differently in + ranges since then the collation sequence is + important. */ + is_range = (*p == L_('-') && p[1] != L_('\0') + && p[1] != L_(']')); + + if (!is_range && c == fn) + goto matched; + +#if _LIBC + /* This is needed if we goto normal_bracket; from + outside of is_seqval's scope. */ + is_seqval = false; +#endif + + cold = c; + c = *p++; + } + + if (c == L_('-') && *p != L_(']')) + { +#if _LIBC + /* We have to find the collation sequence + value for C. Collation sequence is nothing + we can regularly access. The sequence + value is defined by the order in which the + definitions of the collation values for the + various characters appear in the source + file. A strange concept, nowhere + documented. */ + uint32_t fcollseq; + uint32_t lcollseq; + UCHAR cend = *p++; + +# ifdef WIDE_CHAR_VERSION + /* Search in the 'names' array for the characters. */ + fcollseq = __collseq_table_lookup (collseq, fn); + if (fcollseq == ~((uint32_t) 0)) + /* XXX We don't know anything about the character + we are supposed to match. This means we are + failing. */ + goto range_not_matched; + + if (is_seqval) + lcollseq = cold; + else + lcollseq = __collseq_table_lookup (collseq, cold); +# else + fcollseq = collseq[fn]; + lcollseq = is_seqval ? cold : collseq[(UCHAR) cold]; +# endif + + is_seqval = false; + if (cend == L_('[') && *p == L_('.')) + { + uint32_t nrules = + _NL_CURRENT_WORD (LC_COLLATE, + _NL_COLLATE_NRULES); + const CHAR *startp = p; + size_t c1 = 0; + + while (1) + { + c = *++p; + if (c == L_('.') && p[1] == L_(']')) + { + p += 2; + break; + } + if (c == '\0') + return FNM_NOMATCH; + ++c1; + } + + if (nrules == 0) + { + /* There are no names defined in the + collation data. Therefore we only + accept the trivial names consisting + of the character itself. */ + if (c1 != 1) + return FNM_NOMATCH; + + cend = startp[1]; + } + else + { + int32_t table_size; + const int32_t *symb_table; +# ifdef WIDE_CHAR_VERSION + char str[c1]; + size_t strcnt; +# else +# define str (startp + 1) +# endif + const unsigned char *extra; + int32_t idx; + int32_t elem; + int32_t second; + int32_t hash; + +# ifdef WIDE_CHAR_VERSION + /* We have to convert the name to a single-byte + string. This is possible since the names + consist of ASCII characters and the internal + representation is UCS4. */ + for (strcnt = 0; strcnt < c1; ++strcnt) + str[strcnt] = startp[1 + strcnt]; +# endif + + table_size = + _NL_CURRENT_WORD (LC_COLLATE, + _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + + /* Locate the character in the hashing + table. */ + hash = elem_hash (str, c1); + + idx = 0; + elem = hash % table_size; + if (symb_table[2 * elem] != 0) + { + second = hash % (table_size - 2) + 1; + + do + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + && (c1 + == extra[symb_table[2 * elem + 1]]) + && memcmp (str, + &extra[symb_table[2 * elem + 1] + + 1], c1) == 0) + { + /* Yep, this is the entry. */ + idx = symb_table[2 * elem + 1]; + idx += 1 + extra[idx]; + break; + } + + /* Next entry. */ + elem += second; + } + while (symb_table[2 * elem] != 0); + } + + if (symb_table[2 * elem] != 0) + { + /* Compare the byte sequence but only if + this is not part of a range. */ +# ifdef WIDE_CHAR_VERSION + int32_t *wextra; + + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~4; + + wextra = (int32_t *) &extra[idx + 4]; +# endif + /* Get the collation sequence value. */ + is_seqval = true; +# ifdef WIDE_CHAR_VERSION + cend = wextra[1 + wextra[idx]]; +# else + /* Adjust for the alignment. */ + idx += 1 + extra[idx]; + idx = (idx + 3) & ~4; + cend = *((int32_t *) &extra[idx]); +# endif + } + else if (symb_table[2 * elem] != 0 && c1 == 1) + { + cend = str[0]; + c = *p++; + } + else + return FNM_NOMATCH; + } +# undef str + } + else + { + if (!(flags & FNM_NOESCAPE) && cend == L_('\\')) + cend = *p++; + if (cend == L_('\0')) + return FNM_NOMATCH; + cend = FOLD (cend); + } + + /* XXX It is not entirely clear to me how to handle + characters which are not mentioned in the + collation specification. */ + if ( +# ifdef WIDE_CHAR_VERSION + lcollseq == 0xffffffff || +# endif + lcollseq <= fcollseq) + { + /* We have to look at the upper bound. */ + uint32_t hcollseq; + + if (is_seqval) + hcollseq = cend; + else + { +# ifdef WIDE_CHAR_VERSION + hcollseq = + __collseq_table_lookup (collseq, cend); + if (hcollseq == ~((uint32_t) 0)) + { + /* Hum, no information about the upper + bound. The matching succeeds if the + lower bound is matched exactly. */ + if (lcollseq != fcollseq) + goto range_not_matched; + + goto matched; + } +# else + hcollseq = collseq[cend]; +# endif + } + + if (lcollseq <= hcollseq && fcollseq <= hcollseq) + goto matched; + } +# ifdef WIDE_CHAR_VERSION + range_not_matched: +# endif +#else + /* We use a boring value comparison of the character + values. This is better than comparing using + 'strcoll' since the latter would have surprising + and sometimes fatal consequences. */ + UCHAR cend = *p++; + + if (!(flags & FNM_NOESCAPE) && cend == L_('\\')) + cend = *p++; + if (cend == L_('\0')) + return FNM_NOMATCH; + + /* It is a range. */ + if (cold <= fn && fn <= cend) + goto matched; +#endif + + c = *p++; + } + } + + if (c == L_(']')) + break; + } + + if (!not) + return FNM_NOMATCH; + break; + + matched: + /* Skip the rest of the [...] that already matched. */ + do + { + ignore_next: + c = *p++; + + if (c == L_('\0')) + /* [... (unterminated) loses. */ + return FNM_NOMATCH; + + if (!(flags & FNM_NOESCAPE) && c == L_('\\')) + { + if (*p == L_('\0')) + return FNM_NOMATCH; + /* XXX 1003.2d11 is unclear if this is right. */ + ++p; + } + else if (c == L_('[') && *p == L_(':')) + { + int c1 = 0; + const CHAR *startp = p; + + while (1) + { + c = *++p; + if (++c1 == CHAR_CLASS_MAX_LENGTH) + return FNM_NOMATCH; + + if (*p == L_(':') && p[1] == L_(']')) + break; + + if (c < L_('a') || c >= L_('z')) + { + p = startp; + goto ignore_next; + } + } + p += 2; + c = *p++; + } + else if (c == L_('[') && *p == L_('=')) + { + c = *++p; + if (c == L_('\0')) + return FNM_NOMATCH; + c = *++p; + if (c != L_('=') || p[1] != L_(']')) + return FNM_NOMATCH; + p += 2; + c = *p++; + } + else if (c == L_('[') && *p == L_('.')) + { + ++p; + while (1) + { + c = *++p; + if (c == '\0') + return FNM_NOMATCH; + + if (*p == L_('.') && p[1] == L_(']')) + break; + } + p += 2; + c = *p++; + } + } + while (c != L_(']')); + if (not) + return FNM_NOMATCH; + } + break; + + case L_('+'): + case L_('@'): + case L_('!'): + if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(') + { + int res; + + res = EXT (c, p, n, string_end, no_leading_period, flags); + if (res != -1) + return res; + } + goto normal_match; + + case L_('/'): + if (NO_LEADING_PERIOD (flags)) + { + if (n == string_end || c != (UCHAR) *n) + return FNM_NOMATCH; + + new_no_leading_period = true; + break; + } + /* FALLTHROUGH */ + default: + normal_match: + if (n == string_end || c != FOLD ((UCHAR) *n)) + return FNM_NOMATCH; + } + + no_leading_period = new_no_leading_period; + ++n; + } + + if (n == string_end) + return 0; + + if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L_('/')) + /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ + return 0; + + return FNM_NOMATCH; +} + + +static const CHAR * +internal_function +END (const CHAR *pattern) +{ + const CHAR *p = pattern; + + while (1) + if (*++p == L_('\0')) + /* This is an invalid pattern. */ + return pattern; + else if (*p == L_('[')) + { + /* Handle brackets special. */ + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + /* Skip the not sign. We have to recognize it because of a possibly + following ']'. */ + if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^'))) + ++p; + /* A leading ']' is recognized as such. */ + if (*p == L_(']')) + ++p; + /* Skip over all characters of the list. */ + while (*p != L_(']')) + if (*p++ == L_('\0')) + /* This is no valid pattern. */ + return pattern; + } + else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') + || *p == L_('!')) && p[1] == L_('(')) + p = END (p + 1); + else if (*p == L_(')')) + break; + + return p + 1; +} + + +static int +internal_function +EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end, + bool no_leading_period, int flags) +{ + const CHAR *startp; + size_t level; + struct patternlist + { + struct patternlist *next; + CHAR str[1]; + } *list = NULL; + struct patternlist **lastp = &list; + size_t pattern_len = STRLEN (pattern); + const CHAR *p; + const CHAR *rs; + enum { ALLOCA_LIMIT = 8000 }; + + /* Parse the pattern. Store the individual parts in the list. */ + level = 0; + for (startp = p = pattern + 1; ; ++p) + if (*p == L_('\0')) + /* This is an invalid pattern. */ + return -1; + else if (*p == L_('[')) + { + /* Handle brackets special. */ + if (posixly_correct == 0) + posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; + + /* Skip the not sign. We have to recognize it because of a possibly + following ']'. */ + if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^'))) + ++p; + /* A leading ']' is recognized as such. */ + if (*p == L_(']')) + ++p; + /* Skip over all characters of the list. */ + while (*p != L_(']')) + if (*p++ == L_('\0')) + /* This is no valid pattern. */ + return -1; + } + else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@') + || *p == L_('!')) && p[1] == L_('(')) + /* Remember the nesting level. */ + ++level; + else if (*p == L_(')')) + { + if (level-- == 0) + { + /* This means we found the end of the pattern. */ +#define NEW_PATTERN \ + struct patternlist *newp; \ + size_t plen; \ + size_t plensize; \ + size_t newpsize; \ + \ + plen = (opt == L_('?') || opt == L_('@') \ + ? pattern_len \ + : p - startp + 1UL); \ + plensize = plen * sizeof (CHAR); \ + newpsize = offsetof (struct patternlist, str) + plensize; \ + if ((size_t) -1 / sizeof (CHAR) < plen \ + || newpsize < offsetof (struct patternlist, str) \ + || ALLOCA_LIMIT <= newpsize) \ + return -1; \ + newp = (struct patternlist *) alloca (newpsize); \ + *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0'); \ + newp->next = NULL; \ + *lastp = newp; \ + lastp = &newp->next + NEW_PATTERN; + break; + } + } + else if (*p == L_('|')) + { + if (level == 0) + { + NEW_PATTERN; + startp = p + 1; + } + } + assert (list != NULL); + assert (p[-1] == L_(')')); +#undef NEW_PATTERN + + switch (opt) + { + case L_('*'): + if (FCT (p, string, string_end, no_leading_period, flags) == 0) + return 0; + /* FALLTHROUGH */ + + case L_('+'): + do + { + for (rs = string; rs <= string_end; ++rs) + /* First match the prefix with the current pattern with the + current pattern. */ + if (FCT (list->str, string, rs, no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0 + /* This was successful. Now match the rest with the rest + of the pattern. */ + && (FCT (p, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), + flags & FNM_FILE_NAME + ? flags : flags & ~FNM_PERIOD) == 0 + /* This didn't work. Try the whole pattern. */ + || (rs != string + && FCT (pattern - 1, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), + flags & FNM_FILE_NAME + ? flags : flags & ~FNM_PERIOD) == 0))) + /* It worked. Signal success. */ + return 0; + } + while ((list = list->next) != NULL); + + /* None of the patterns lead to a match. */ + return FNM_NOMATCH; + + case L_('?'): + if (FCT (p, string, string_end, no_leading_period, flags) == 0) + return 0; + /* FALLTHROUGH */ + + case L_('@'): + do + /* I cannot believe it but 'strcat' is actually acceptable + here. Match the entire string with the prefix from the + pattern list and the rest of the pattern following the + pattern list. */ + if (FCT (STRCAT (list->str, p), string, string_end, + no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + /* It worked. Signal success. */ + return 0; + while ((list = list->next) != NULL); + + /* None of the patterns lead to a match. */ + return FNM_NOMATCH; + + case L_('!'): + for (rs = string; rs <= string_end; ++rs) + { + struct patternlist *runp; + + for (runp = list; runp != NULL; runp = runp->next) + if (FCT (runp->str, string, rs, no_leading_period, + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0) + break; + + /* If none of the patterns matched see whether the rest does. */ + if (runp == NULL + && (FCT (p, rs, string_end, + rs == string + ? no_leading_period + : rs[-1] == '/' && NO_LEADING_PERIOD (flags), + flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) + == 0)) + /* This is successful. */ + return 0; + } + + /* None of the patterns together with the rest of the pattern + lead to a match. */ + return FNM_NOMATCH; + + default: + assert (! "Invalid extended matching operator"); + break; + } + + return -1; +} + + +#undef FOLD +#undef CHAR +#undef UCHAR +#undef INT +#undef FCT +#undef EXT +#undef END +#undef MEMPCPY +#undef MEMCHR +#undef STRLEN +#undef STRCAT +#undef L_ +#undef BTOWC diff --git a/grub-core/gnulib/getdelim.c b/grub-core/gnulib/getdelim.c new file mode 100644 index 000000000..fdbcde2a2 --- /dev/null +++ b/grub-core/gnulib/getdelim.c @@ -0,0 +1,135 @@ +/* getdelim.c --- Implementation of replacement getdelim function. + Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2013 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* Ported from glibc by Simon Josefsson. */ + +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ +#define _GL_ARG_NONNULL(params) + +#include + +#include + +#include +#include +#include +#include + +#ifndef SSIZE_MAX +# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +# define getc_maybe_unlocked(fp) getc(fp) +#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED +# undef flockfile +# undef funlockfile +# define flockfile(x) ((void) 0) +# define funlockfile(x) ((void) 0) +# define getc_maybe_unlocked(fp) getc(fp) +#else +# define getc_maybe_unlocked(fp) getc_unlocked(fp) +#endif + +/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and + NUL-terminate it). *LINEPTR is a pointer returned from malloc (or + NULL), pointing to *N characters of space. It is realloc'ed as + necessary. Returns the number of characters read (not including + the null terminator), or -1 on error or EOF. */ + +ssize_t +getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) +{ + ssize_t result; + size_t cur_len = 0; + + if (lineptr == NULL || n == NULL || fp == NULL) + { + errno = EINVAL; + return -1; + } + + flockfile (fp); + + if (*lineptr == NULL || *n == 0) + { + char *new_lineptr; + *n = 120; + new_lineptr = (char *) realloc (*lineptr, *n); + if (new_lineptr == NULL) + { + result = -1; + goto unlock_return; + } + *lineptr = new_lineptr; + } + + for (;;) + { + int i; + + i = getc_maybe_unlocked (fp); + if (i == EOF) + { + result = -1; + break; + } + + /* Make enough space for len+1 (for final NUL) bytes. */ + if (cur_len + 1 >= *n) + { + size_t needed_max = + SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; + size_t needed = 2 * *n + 1; /* Be generous. */ + char *new_lineptr; + + if (needed_max < needed) + needed = needed_max; + if (cur_len + 1 >= needed) + { + result = -1; + errno = EOVERFLOW; + goto unlock_return; + } + + new_lineptr = (char *) realloc (*lineptr, needed); + if (new_lineptr == NULL) + { + result = -1; + goto unlock_return; + } + + *lineptr = new_lineptr; + *n = needed; + } + + (*lineptr)[cur_len] = i; + cur_len++; + + if (i == delimiter) + break; + } + (*lineptr)[cur_len] = '\0'; + result = cur_len ? cur_len : result; + + unlock_return: + funlockfile (fp); /* doesn't set errno */ + + return result; +} diff --git a/grub-core/gnulib/getline.c b/grub-core/gnulib/getline.c new file mode 100644 index 000000000..1aa07b9c7 --- /dev/null +++ b/grub-core/gnulib/getline.c @@ -0,0 +1,27 @@ +/* getline.c --- Implementation of replacement getline function. + Copyright (C) 2005-2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* Written by Simon Josefsson. */ + +#include + +#include + +ssize_t +getline (char **lineptr, size_t *n, FILE *stream) +{ + return getdelim (lineptr, n, '\n', stream); +} diff --git a/grub-core/gnulib/getopt.c b/grub-core/gnulib/getopt.c new file mode 100644 index 000000000..ef0f4ceec --- /dev/null +++ b/grub-core/gnulib/getopt.c @@ -0,0 +1,1245 @@ +/* Getopt for GNU. + NOTE: getopt is part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2013 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _LIBC +# include +#endif + +#include "getopt.h" + +#include +#include +#include +#include + +#ifdef _LIBC +# include +#else +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#if defined _LIBC && defined USE_IN_LIBIO +# include +#endif + +/* This version of 'getopt' appears to the caller like standard Unix 'getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As 'getopt_long' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Using 'getopt' or setting the environment variable POSIXLY_CORRECT + disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt_int.h" + +/* For communication from 'getopt' to the caller. + When 'getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when 'ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to 'getopt'. + + On entry to 'getopt', zero means this is the first call; initialize. + + When 'getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, 'optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Keep a global copy of all internal members of getopt_data. */ + +static struct _getopt_data getopt_data; + + +#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV +extern char *getenv (); +#endif + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (d->__nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + 'first_nonopt' and 'last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +static void +exchange (char **argv, struct _getopt_data *d) +{ + int bottom = d->__first_nonopt; + int middle = d->__last_nonopt; + int top = d->optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the '__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + d->__nonoption_flags_max_len), + '\0', top + 1 - d->__nonoption_flags_max_len); + d->__nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + d->__first_nonopt += (d->optind - d->__last_nonopt); + d->__last_nonopt = d->optind; +} + +/* Initialize the internal data when the first call is made. */ + +static const char * +_getopt_initialize (int argc _GL_UNUSED, + char **argv _GL_UNUSED, const char *optstring, + struct _getopt_data *d, int posixly_correct) +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + d->__first_nonopt = d->__last_nonopt = d->optind; + + d->__nextchar = NULL; + + d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + d->__ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + d->__ordering = REQUIRE_ORDER; + ++optstring; + } + else if (d->__posixly_correct) + d->__ordering = REQUIRE_ORDER; + else + d->__ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (!d->__posixly_correct + && argc == __libc_argc && argv == __libc_argv) + { + if (d->__nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + d->__nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = d->__nonoption_flags_max_len = strlen (orig_str); + if (d->__nonoption_flags_max_len < argc) + d->__nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (d->__nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + d->__nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', d->__nonoption_flags_max_len - len); + } + } + d->__nonoption_flags_len = d->__nonoption_flags_max_len; + } + else + d->__nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If 'getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If 'getopt' finds another option character, it returns that character, + updating 'optind' and 'nextchar' so that the next call to 'getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, 'getopt' returns -1. + Then 'optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set 'opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in 'optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in 'optarg', otherwise 'optarg' is set to zero. + + If OPTSTRING starts with '-' or '+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with '--' instead of '-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a '=', or else the in next ARGV-element. + When 'getopt' finds a long-named option, it returns 0 if that option's + 'flag' field is nonzero, the value of the option's 'val' field + if the 'flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of 'struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal_r (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, struct _getopt_data *d, int posixly_correct) +{ + int print_errors = d->opterr; + + if (argc < 1) + return -1; + + d->optarg = NULL; + + if (d->optind == 0 || !d->__initialized) + { + if (d->optind == 0) + d->optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring, d, + posixly_correct); + d->__initialized = 1; + } + else if (optstring[0] == '-' || optstring[0] == '+') + optstring++; + if (optstring[0] == ':') + print_errors = 0; + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ + || (d->optind < d->__nonoption_flags_len \ + && __getopt_nonoption_flags[d->optind] == '1')) +#else +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') +#endif + + if (d->__nextchar == NULL || *d->__nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (d->__last_nonopt > d->optind) + d->__last_nonopt = d->optind; + if (d->__first_nonopt > d->optind) + d->__first_nonopt = d->optind; + + if (d->__ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__last_nonopt != d->optind) + d->__first_nonopt = d->optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (d->optind < argc && NONOPTION_P) + d->optind++; + d->__last_nonopt = d->optind; + } + + /* The special ARGV-element '--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (d->optind != argc && !strcmp (argv[d->optind], "--")) + { + d->optind++; + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__first_nonopt == d->__last_nonopt) + d->__first_nonopt = d->optind; + d->__last_nonopt = argc; + + d->optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (d->optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (d->__first_nonopt != d->__last_nonopt) + d->optind = d->__first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (d->__ordering == REQUIRE_ORDER) + return -1; + d->optarg = argv[d->optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + d->__nextchar = (argv[d->optind] + 1 + + (longopts != NULL && argv[d->optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[d->optind][1] == '-' + || (long_only && (argv[d->optind][2] + || !strchr (optstring, argv[d->optind][1]))))) + { + char *nameend; + unsigned int namelen; + const struct option *p; + const struct option *pfound = NULL; + struct option_list + { + const struct option *p; + struct option_list *next; + } *ambig_list = NULL; + int exact = 0; + int indfound = -1; + int option_index; + + for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + namelen = nameend - d->__nextchar; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, namelen)) + { + if (namelen == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + { + /* Second or later nonexact match found. */ + struct option_list *newp = malloc (sizeof (*newp)); + newp->p = p; + newp->next = ambig_list; + ambig_list = newp; + } + } + + if (ambig_list != NULL && !exact) + { + if (print_errors) + { + struct option_list first; + first.p = pfound; + first.next = ambig_list; + ambig_list = &first; + +#if defined _LIBC && defined USE_IN_LIBIO + char *buf = NULL; + size_t buflen = 0; + + FILE *fp = open_memstream (&buf, &buflen); + if (fp != NULL) + { + fprintf (fp, + _("%s: option '%s' is ambiguous; possibilities:"), + argv[0], argv[d->optind]); + + do + { + fprintf (fp, " '--%s'", ambig_list->p->name); + ambig_list = ambig_list->next; + } + while (ambig_list != NULL); + + fputc_unlocked ('\n', fp); + + if (__builtin_expect (fclose (fp) != EOF, 1)) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } + } +#else + fprintf (stderr, + _("%s: option '%s' is ambiguous; possibilities:"), + argv[0], argv[d->optind]); + do + { + fprintf (stderr, " '--%s'", ambig_list->p->name); + ambig_list = ambig_list->next; + } + while (ambig_list != NULL); + + fputc ('\n', stderr); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + d->optopt = 0; + return '?'; + } + + while (ambig_list != NULL) + { + struct option_list *pn = ambig_list->next; + free (ambig_list); + ambig_list = pn; + } + + if (pfound != NULL) + { + option_index = indfound; + d->optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option '--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option '--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option '%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option '%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + + d->__nextchar += strlen (d->__nextchar); + + d->optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '--%s' requires an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option '--%s' requires an argument\n"), + argv[0], pfound->name); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[d->optind][1] == '-' + || strchr (optstring, *d->__nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"), + argv[0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option '--%s'\n"), + argv[0], d->__nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option '%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->__nextchar = (char *) ""; + d->optind++; + d->optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *d->__nextchar++; + const char *temp = strchr (optstring, c); + + /* Increment 'optind' when we start to process its last character. */ + if (*d->__nextchar == '\0') + ++d->optind; + + if (temp == NULL || c == ':' || c == ';') + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); +#endif + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + if (longopts == NULL) + goto no_longs; + + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented 'd->optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; + nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"), + argv[0], d->optarg) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"), + argv[0], d->optarg); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '-W %s' doesn't allow an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option '-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + d->__nextchar += strlen (d->__nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option '-W %s' requires an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option '-W %s' requires an argument\n"), + argv[0], pfound->name); +#endif + } + d->__nextchar += strlen (d->__nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + else + d->optarg = NULL; + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + no_longs: + d->__nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + d->optind++; + } + else + d->optarg = NULL; + d->__nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option requires an argument -- '%c'\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented 'optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + d->__nextchar = NULL; + } + } + return c; + } +} + +int +_getopt_internal (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, int long_only, + int posixly_correct) +{ + int result; + + getopt_data.optind = optind; + getopt_data.opterr = opterr; + + result = _getopt_internal_r (argc, argv, optstring, longopts, + longind, long_only, &getopt_data, + posixly_correct); + + optind = getopt_data.optind; + optarg = getopt_data.optarg; + optopt = getopt_data.optopt; + + return result; +} + +/* glibc gets a LSB-compliant getopt. + Standalone applications get a POSIX-compliant getopt. */ +#if _LIBC +enum { POSIXLY_CORRECT = 0 }; +#else +enum { POSIXLY_CORRECT = 1 }; +#endif + +int +getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, (char **) argv, optstring, + (const struct option *) 0, + (int *) 0, + 0, POSIXLY_CORRECT); +} + +#ifdef _LIBC +int +__posix_getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0, 1); +} +#endif + + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of 'getopt'. */ + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value '%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/grub-core/gnulib/getopt.in.h b/grub-core/gnulib/getopt.in.h new file mode 100644 index 000000000..d9c7d8144 --- /dev/null +++ b/grub-core/gnulib/getopt.in.h @@ -0,0 +1,255 @@ +/* Declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2013 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _@GUARD_PREFIX@_GETOPT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. We must + also inform the replacement unistd.h to not recursively use + ; our definitions will be present soon enough. */ +#if @HAVE_GETOPT_H@ +# define _GL_SYSTEM_GETOPT +# @INCLUDE_NEXT@ @NEXT_GETOPT_H@ +# undef _GL_SYSTEM_GETOPT +#endif + +#ifndef _@GUARD_PREFIX@_GETOPT_H + +#ifndef __need_getopt +# define _@GUARD_PREFIX@_GETOPT_H 1 +#endif + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in this header. When this happens, include the + headers that might declare getopt so that they will not cause + confusion if included after this file (if the system had , + we have already included it). Then systematically rename + identifiers so that they do not collide with the system functions + and variables. Renaming avoids problems with some compilers and + linkers. */ +#if defined __GETOPT_PREFIX && !defined __need_getopt +# if !@HAVE_GETOPT_H@ +# define __need_system_stdlib_h +# include +# undef __need_system_stdlib_h +# include +# include +# endif +# undef __need_getopt +# undef getopt +# undef getopt_long +# undef getopt_long_only +# undef optarg +# undef opterr +# undef optind +# undef optopt +# undef option +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# define getopt __GETOPT_ID (getopt) +# define getopt_long __GETOPT_ID (getopt_long) +# define getopt_long_only __GETOPT_ID (getopt_long_only) +# define optarg __GETOPT_ID (optarg) +# define opterr __GETOPT_ID (opterr) +# define optind __GETOPT_ID (optind) +# define optopt __GETOPT_ID (optopt) +# define option __GETOPT_ID (option) +# define _getopt_internal __GETOPT_ID (getopt_internal) +#endif + +/* Standalone applications get correct prototypes for getopt_long and + getopt_long_only; they declare "char **argv". libc uses prototypes + with "char *const *argv" that are incorrect because getopt_long and + getopt_long_only can permute argv; this is required for backward + compatibility (e.g., for LSB 2.0.1). + + This used to be '#if defined __GETOPT_PREFIX && !defined __need_getopt', + but it caused redefinition warnings if both unistd.h and getopt.h were + included, since unistd.h includes getopt.h having previously defined + __need_getopt. + + The only place where __getopt_argv_const is used is in definitions + of getopt_long and getopt_long_only below, but these are visible + only if __need_getopt is not defined, so it is quite safe to rewrite + the conditional as follows: +*/ +#if !defined __need_getopt +# if defined __GETOPT_PREFIX +# define __getopt_argv_const /* empty */ +# else +# define __getopt_argv_const const +# endif +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include , but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include , which will pull in for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include +#endif + +#ifndef __THROW +# ifndef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) (0) +# endif +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from 'getopt' to the caller. + When 'getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when 'ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to 'getopt'. + + On entry to 'getopt', zero means this is the first call; initialize. + + When 'getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, 'optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message 'getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of 'struct option' terminated by an element containing a name which is + zero. + + The field 'has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field 'flag' is not NULL, it points to a variable that is set + to the value given in the field 'val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an 'int' to + a compiled-in constant, such as set a value from 'optarg', set the + option's 'flag' field to zero and its 'val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero 'flag' field, 'getopt' + returns the contents of the 'val' field. */ + +# if !GNULIB_defined_struct_option +struct option +{ + const char *name; + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; +# define GNULIB_defined_struct_option 1 +# endif + +/* Names for the values of the 'has_arg' field of 'struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, 'optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in 'optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU 'getopt'. + + The argument '--' causes premature termination of argument + scanning, explicitly telling 'getopt' that there are no more + options. + + If OPTS begins with '-', then non-option arguments are treated as + arguments to the option '\1'. This behavior is specific to the GNU + 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in + the environment, then do not permute arguments. */ + +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW _GL_ARG_NONNULL ((2, 3)); + +#ifndef __need_getopt +extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); +extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); + +#endif + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* _@GUARD_PREFIX@_GETOPT_H */ +#endif /* _@GUARD_PREFIX@_GETOPT_H */ diff --git a/grub-core/gnulib/getopt1.c b/grub-core/gnulib/getopt1.c new file mode 100644 index 000000000..55a6b4eae --- /dev/null +++ b/grub-core/gnulib/getopt1.c @@ -0,0 +1,170 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2013 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef _LIBC +# include +#else +# include +# include "getopt.h" +#endif +#include "getopt_int.h" + +#include + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 0, 0); +} + +int +_getopt_long_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 0, d, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (int argc, char *__getopt_argv_const *argv, + const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 1, 0); +} + +int +_getopt_long_only_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 1, d, 0); +} + + +#ifdef TEST + +#include + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static const struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value '%s'\n", optarg); + break; + + case 'd': + printf ("option d with value '%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/grub-core/gnulib/getopt_int.h b/grub-core/gnulib/getopt_int.h new file mode 100644 index 000000000..a6e4b9ea7 --- /dev/null +++ b/grub-core/gnulib/getopt_int.h @@ -0,0 +1,135 @@ +/* Internal declarations for getopt. + Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2013 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GETOPT_INT_H +#define _GETOPT_INT_H 1 + +#include + +extern int _getopt_internal (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct); + + +/* Reentrant versions which can handle parsing multiple argument + vectors at the same time. */ + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using '+' as the first character + of the list of option characters, or by calling getopt. + + PERMUTE is the default. We permute the contents of ARGV as we + scan, so that eventually all the non-options are at the end. + This allows options to be given in any order, even with programs + that were not written to expect this. + + RETURN_IN_ORDER is an option available to programs that were + written to expect options and other ARGV-elements in any order + and that care about the ordering of the two. We describe each + non-option ARGV-element as if it were the argument of an option + with character code 1. Using '-' as the first character of the + list of option characters selects this mode of operation. + + The special argument '--' forces an end of option-scanning regardless + of the value of 'ordering'. In the case of RETURN_IN_ORDER, only + '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ + +enum __ord + { + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER + }; + +/* Data type for reentrant functions. */ +struct _getopt_data +{ + /* These have exactly the same meaning as the corresponding global + variables, except that they are used for the reentrant + versions of getopt. */ + int optind; + int opterr; + int optopt; + char *optarg; + + /* Internal members. */ + + /* True if the internal members have been initialized. */ + int __initialized; + + /* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + char *__nextchar; + + /* See __ord above. */ + enum __ord __ordering; + + /* If the POSIXLY_CORRECT environment variable is set + or getopt was called. */ + int __posixly_correct; + + + /* Handle permutation of arguments. */ + + /* Describe the part of ARGV that contains non-options that have + been skipped. 'first_nonopt' is the index in ARGV of the first + of them; 'last_nonopt' is the index after the last of them. */ + + int __first_nonopt; + int __last_nonopt; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + int __nonoption_flags_max_len; + int __nonoption_flags_len; +#endif +}; + +/* The initializer is necessary to set OPTIND and OPTERR to their + default values and to clear the initialization flag. */ +#define _GETOPT_DATA_INITIALIZER { 1, 1 } + +extern int _getopt_internal_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, struct _getopt_data *__data, + int __posixly_correct); + +extern int _getopt_long_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + struct _getopt_data *__data); + +extern int _getopt_long_only_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind, + struct _getopt_data *__data); + +#endif /* getopt_int.h */ diff --git a/grub-core/gnulib/gettext.h b/grub-core/gnulib/gettext.h new file mode 100644 index 000000000..d0215715a --- /dev/null +++ b/grub-core/gnulib/gettext.h @@ -0,0 +1,288 @@ +/* Convenience header for conditional use of GNU . + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2013 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +# ifdef DEFAULT_TEXT_DOMAIN +# undef gettext +# define gettext(Msgid) \ + dgettext (DEFAULT_TEXT_DOMAIN, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +# endif + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of a NOP. We don't include + as well because people using "gettext.h" will not include , + and also including would fail on SunOS 4, whereas + is OK. */ +#if defined(__sun) +# include +#endif + +/* Many header files from the libstdc++ coming with g++ 3.3 or newer include + , which chokes if dcgettext is defined as a macro. So include + it now, to make later inclusions of a NOP. */ +#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) +# include +# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H +# include +# endif +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# undef gettext +# define gettext(Msgid) ((const char *) (Msgid)) +# undef dgettext +# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) +# undef dcgettext +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (Category), dgettext (Domainname, Msgid)) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void) (Msgid2), (const char *) (Msgid1)) \ + : ((void) (Msgid1), (const char *) (Msgid2))) +# undef dngettext +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) +# undef dcngettext +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) +# undef textdomain +# define textdomain(Domainname) ((const char *) (Domainname)) +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) \ + ((void) (Domainname), (const char *) (Dirname)) +# undef bind_textdomain_codeset +# define bind_textdomain_codeset(Domainname, Codeset) \ + ((void) (Domainname), (const char *) (Codeset)) + +#endif + +/* Prefer gnulib's setlocale override over libintl's setlocale override. */ +#ifdef GNULIB_defined_setlocale +# undef setlocale +# define setlocale rpl_setlocale +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +pgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + int category) +{ + const char *translation = dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +npgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + const char *translation = + dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include + +#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ + /* || __STDC_VERSION__ >= 199901L */ ) +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 +#else +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 +#endif + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext (domain, msg_ctxt_id, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (translation != msg_ctxt_id) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcnpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (!(translation == msg_ctxt_id || translation == msgid_plural)) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/grub-core/gnulib/intprops.h b/grub-core/gnulib/intprops.h new file mode 100644 index 000000000..b473052d1 --- /dev/null +++ b/grub-core/gnulib/intprops.h @@ -0,0 +1,319 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001-2005, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_INTPROPS_H +#define _GL_INTPROPS_H + +#include + +/* Return an integer value, converted to the same type as the integer + expression E after integer type promotion. V is the unconverted value. */ +#define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) + +/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see + . */ +#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the arithmetic type T is an integer type. bool counts as + an integer. */ +#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) + +/* True if negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the signed integer expression E uses two's complement. */ +#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1) + +/* True if the arithmetic type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* Return 1 if the integer expression E, after integer promotion, has + a signed type. */ +#define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) + + +/* Minimum and maximum values for integer types and expressions. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ + +/* The maximum and minimum values for the integer type T. */ +#define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ TYPE_MAXIMUM (t))) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) + +/* The maximum and minimum values for the type of the expression E, + after integer promotion. E should not have side effects. */ +#define _GL_INT_MINIMUM(e) \ + (_GL_INT_SIGNED (e) \ + ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_CONVERT (e, 0)) +#define _GL_INT_MAXIMUM(e) \ + (_GL_INT_SIGNED (e) \ + ? _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_NEGATE_CONVERT (e, 1)) +#define _GL_SIGNED_INT_MAXIMUM(e) \ + (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1) + + +/* Return 1 if the __typeof__ keyword works. This could be done by + 'configure', but for now it's easier to do it by hand. */ +#if 2 <= __GNUC__ || 0x5110 <= __SUNPRO_C +# define _GL_HAVE___TYPEOF__ 1 +#else +# define _GL_HAVE___TYPEOF__ 0 +#endif + +/* Return 1 if the integer type or expression T might be signed. Return 0 + if it is definitely unsigned. This macro does not evaluate its argument, + and expands to an integer constant expression. */ +#if _GL_HAVE___TYPEOF__ +# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) +#else +# define _GL_SIGNED_TYPE_OR_EXPR(t) 1 +#endif + +/* Bound on length of the string representing an unsigned integer + value representable in B bits. log10 (2.0) < 146/485. The + smallest value of B where this bound is not tight is 2621. */ +#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) + +/* Bound on length of the string representing an integer type or expression T. + Subtract 1 for the sign bit if T is signed, and then add 1 more for + a minus sign if needed. + + Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is + signed, this macro may overestimate the true bound by one byte when + applied to unsigned types of size 2, 4, 16, ... bytes. */ +#define INT_STRLEN_BOUND(t) \ + (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT \ + - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + + _GL_SIGNED_TYPE_OR_EXPR (t)) + +/* Bound on buffer size needed to represent an integer type or expression T, + including the terminating null. */ +#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) + + +/* Range overflow checks. + + The INT__RANGE_OVERFLOW macros return 1 if the corresponding C + operators might not yield numerically correct answers due to + arithmetic overflow. They do not rely on undefined or + implementation-defined behavior. Their implementations are simple + and straightforward, but they are a bit harder to use than the + INT__OVERFLOW macros described below. + + Example usage: + + long int i = ...; + long int j = ...; + if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) + printf ("multiply would overflow"); + else + printf ("product is %ld", i * j); + + Restrictions on *_RANGE_OVERFLOW macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, + so the arguments should not have side effects. The arithmetic + arguments (including the MIN and MAX arguments) must be of the same + integer type after the usual arithmetic conversions, and the type + must have minimum value MIN and maximum MAX. Unsigned types should + use a zero MIN of the proper type. + + These macros are tuned for constant MIN and MAX. For commutative + operations such as A + B, they are also tuned for constant B. */ + +/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (a) < (min) - (b) \ + : (max) - (b) < (a)) + +/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (max) + (b) < (a) \ + : (a) < (min) + (b)) + +/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ + ((min) < 0 \ + ? (a) < - (max) \ + : 0 < (a)) + +/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Avoid && and || as they tickle + bugs in Sun C 5.11 2010/08/13 and other compilers; see + . */ +#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (a) < (max) / (b) \ + : (b) == -1 \ + ? 0 \ + : (min) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (a) < (min) / (b) \ + : (max) / (b) < (a))) + +/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. */ +#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ + ((min) < 0 && (b) == -1 && (a) < - (max)) + +/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. + Mathematically, % should never overflow, but on x86-like hosts + INT_MIN % -1 traps, and the C standard permits this, so treat this + as an overflow too. */ +#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ + INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) + +/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Here, MIN and MAX are for A only, and B need + not be of the same type as the other arguments. The C standard says that + behavior is undefined for shifts unless 0 <= B < wordwidth, and that when + A is negative then A << B has undefined behavior and A >> B has + implementation-defined behavior, but do not check these other + restrictions. */ +#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ + ((a) < 0 \ + ? (a) < (min) >> (b) \ + : (max) >> (b) < (a)) + + +/* The _GL*_OVERFLOW macros have the same restrictions as the + *_RANGE_OVERFLOW macros, except that they do not assume that operands + (e.g., A and B) have the same type as MIN and MAX. Instead, they assume + that the result (e.g., A + B) has that type. */ +#define _GL_ADD_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? (b) <= (a) + (b) \ + : (b) < 0 ? (a) <= (a) + (b) \ + : (a) + (b) < (b)) +#define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? 1 \ + : (b) < 0 ? (a) - (b) <= (a) \ + : (a) < (b)) +#define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ + || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) +#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (b) <= (a) + (b) - 1 \ + : (b) < 0 && (a) + (b) <= (a)) +#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ + : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) + +/* Return a nonzero value if A is a mathematical multiple of B, where + A is unsigned, B is negative, and MAX is the maximum value of A's + type. A's type must be the same as (A % B)'s type. Normally (A % + -B == 0) suffices, but things get tricky if -B would overflow. */ +#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ + (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ + ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ + ? (a) \ + : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ + : (a) % - (b)) \ + == 0) + + +/* Integer overflow checks. + + The INT__OVERFLOW macros return 1 if the corresponding C operators + might not yield numerically correct answers due to arithmetic overflow. + They work correctly on all known practical hosts, and do not rely + on undefined behavior due to signed arithmetic overflow. + + Example usage: + + long int i = ...; + long int j = ...; + if (INT_MULTIPLY_OVERFLOW (i, j)) + printf ("multiply would overflow"); + else + printf ("product is %ld", i * j); + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, so the + arguments should not have side effects. + + These macros are tuned for their last argument being a constant. + + Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, + A % B, and A << B would overflow, respectively. */ + +#define INT_ADD_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) +#define INT_SUBTRACT_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) +#define INT_NEGATE_OVERFLOW(a) \ + INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) +#define INT_MULTIPLY_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) +#define INT_DIVIDE_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) +#define INT_REMAINDER_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) +#define INT_LEFT_SHIFT_OVERFLOW(a, b) \ + INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ + _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) + +/* Return 1 if the expression A B would overflow, + where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, + assuming MIN and MAX are the minimum and maximum for the result type. + Arguments should be free of side effects. */ +#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ + op_result_overflow (a, b, \ + _GL_INT_MINIMUM (0 * (b) + (a)), \ + _GL_INT_MAXIMUM (0 * (b) + (a))) + +#endif /* _GL_INTPROPS_H */ diff --git a/grub-core/gnulib/itold.c b/grub-core/gnulib/itold.c new file mode 100644 index 000000000..9aabc7e46 --- /dev/null +++ b/grub-core/gnulib/itold.c @@ -0,0 +1,28 @@ +/* Replacement for 'int' to 'long double' conversion routine. + Copyright (C) 2011-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +void +_Qp_itoq (long double *result, int a) +{ + /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ + *result = (double) a; +} diff --git a/grub-core/gnulib/langinfo.in.h b/grub-core/gnulib/langinfo.in.h new file mode 100644 index 000000000..5388ce624 --- /dev/null +++ b/grub-core/gnulib/langinfo.in.h @@ -0,0 +1,176 @@ +/* Substitute for and wrapper around . + Copyright (C) 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* + * POSIX for platforms that lack it or have an incomplete one. + * + */ + +#ifndef _@GUARD_PREFIX@_LANGINFO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_LANGINFO_H@ +# @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ +#endif + +#ifndef _@GUARD_PREFIX@_LANGINFO_H +#define _@GUARD_PREFIX@_LANGINFO_H + + +#if !@HAVE_LANGINFO_H@ + +/* A platform that lacks . */ + +/* Assume that it also lacks and the nl_item type. */ +# if !GNULIB_defined_nl_item +typedef int nl_item; +# define GNULIB_defined_nl_item 1 +# endif + +/* nl_langinfo items of the LC_CTYPE category */ +# define CODESET 10000 +/* nl_langinfo items of the LC_NUMERIC category */ +# define RADIXCHAR 10001 +# define THOUSEP 10002 +/* nl_langinfo items of the LC_TIME category */ +# define D_T_FMT 10003 +# define D_FMT 10004 +# define T_FMT 10005 +# define T_FMT_AMPM 10006 +# define AM_STR 10007 +# define PM_STR 10008 +# define DAY_1 10009 +# define DAY_2 (DAY_1 + 1) +# define DAY_3 (DAY_1 + 2) +# define DAY_4 (DAY_1 + 3) +# define DAY_5 (DAY_1 + 4) +# define DAY_6 (DAY_1 + 5) +# define DAY_7 (DAY_1 + 6) +# define ABDAY_1 10016 +# define ABDAY_2 (ABDAY_1 + 1) +# define ABDAY_3 (ABDAY_1 + 2) +# define ABDAY_4 (ABDAY_1 + 3) +# define ABDAY_5 (ABDAY_1 + 4) +# define ABDAY_6 (ABDAY_1 + 5) +# define ABDAY_7 (ABDAY_1 + 6) +# define MON_1 10023 +# define MON_2 (MON_1 + 1) +# define MON_3 (MON_1 + 2) +# define MON_4 (MON_1 + 3) +# define MON_5 (MON_1 + 4) +# define MON_6 (MON_1 + 5) +# define MON_7 (MON_1 + 6) +# define MON_8 (MON_1 + 7) +# define MON_9 (MON_1 + 8) +# define MON_10 (MON_1 + 9) +# define MON_11 (MON_1 + 10) +# define MON_12 (MON_1 + 11) +# define ABMON_1 10035 +# define ABMON_2 (ABMON_1 + 1) +# define ABMON_3 (ABMON_1 + 2) +# define ABMON_4 (ABMON_1 + 3) +# define ABMON_5 (ABMON_1 + 4) +# define ABMON_6 (ABMON_1 + 5) +# define ABMON_7 (ABMON_1 + 6) +# define ABMON_8 (ABMON_1 + 7) +# define ABMON_9 (ABMON_1 + 8) +# define ABMON_10 (ABMON_1 + 9) +# define ABMON_11 (ABMON_1 + 10) +# define ABMON_12 (ABMON_1 + 11) +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +/* nl_langinfo items of the LC_MONETARY category */ +# define CRNCYSTR 10052 +/* nl_langinfo items of the LC_MESSAGES category */ +# define YESEXPR 10053 +# define NOEXPR 10054 + +#else + +/* A platform that has . */ + +# if !@HAVE_LANGINFO_CODESET@ +# define CODESET 10000 +# define GNULIB_defined_CODESET 1 +# endif + +# if !@HAVE_LANGINFO_T_FMT_AMPM@ +# define T_FMT_AMPM 10006 +# define GNULIB_defined_T_FMT_AMPM 1 +# endif + +# if !@HAVE_LANGINFO_ERA@ +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +# define GNULIB_defined_ERA 1 +# endif + +# if !@HAVE_LANGINFO_YESEXPR@ +# define YESEXPR 10053 +# define NOEXPR 10054 +# define GNULIB_defined_YESEXPR 1 +# endif + +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Declare overridden functions. */ + + +/* Return a piece of locale dependent information. + Note: The difference between nl_langinfo (CODESET) and locale_charset () + is that the latter normalizes the encoding names to GNU conventions. */ + +#if @GNULIB_NL_LANGINFO@ +# if @REPLACE_NL_LANGINFO@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef nl_langinfo +# define nl_langinfo rpl_nl_langinfo +# endif +_GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); +_GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); +# else +# if !@HAVE_NL_LANGINFO@ +_GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); +# endif +_GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); +# endif +_GL_CXXALIASWARN (nl_langinfo); +#elif defined GNULIB_POSIXCHECK +# undef nl_langinfo +# if HAVE_RAW_DECL_NL_LANGINFO +_GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " + "use gnulib module nl_langinfo for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_LANGINFO_H */ +#endif /* _@GUARD_PREFIX@_LANGINFO_H */ diff --git a/grub-core/gnulib/localcharset.c b/grub-core/gnulib/localcharset.c new file mode 100644 index 000000000..953cc1e70 --- /dev/null +++ b/grub-core/gnulib/localcharset.c @@ -0,0 +1,553 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "localcharset.h" + +#include +#include +#include +#include +#include + +#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ +#endif + +#if defined _WIN32 || defined __WIN32__ +# define WINDOWS_NATIVE +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WINDOWS_NATIVE +# include +# if HAVE_LANGINFO_CODESET +# include +# else +# if 0 /* see comment below */ +# include +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +# endif +#elif defined WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +#endif +#if defined OS2 +# define INCL_DOS +# include +#endif + +#if ENABLE_RELOCATABLE +# include "relocatable.h" +#else +# define relocate(pathname) (pathname) +#endif + +/* Get LIBDIR. */ +#ifndef LIBDIR +# include "configmake.h" +#endif + +/* Define O_NOFOLLOW to 0 on platforms where it does not exist. */ +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#endif + +#ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +#endif + +#ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +#endif + +#if HAVE_DECL_GETC_UNLOCKED +# undef getc +# define getc getc_unlocked +#endif + +/* The following static variable is declared 'volatile' to avoid a + possible multithread problem in the function get_charset_aliases. If we + are running in a threaded environment, and if two threads initialize + 'charset_aliases' simultaneously, both will produce the same value, + and everything will be ok if the two assignments to 'charset_aliases' + are atomic. But I don't know what will happen if the two assignments mix. */ +#if __STDC__ != 1 +# define volatile /* empty */ +#endif +/* Pointer to the contents of the charset.alias file, if it has already been + read, else NULL. Its format is: + ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ +static const char * volatile charset_aliases; + +/* Return a pointer to the contents of the charset.alias file. */ +static const char * +get_charset_aliases (void) +{ + const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { +#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; + + /* Make it possible to override the charset.alias location. This is + necessary for running the testsuite before "make install". */ + dir = getenv ("CHARSETALIASDIR"); + if (dir == NULL || dir[0] == '\0') + dir = relocate (LIBDIR); + + /* Concatenate dir and base into freshly allocated file_name. */ + { + size_t dir_len = strlen (dir); + size_t base_len = strlen (base); + int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); + file_name = (char *) malloc (dir_len + add_slash + base_len + 1); + if (file_name != NULL) + { + memcpy (file_name, dir, dir_len); + if (add_slash) + file_name[dir_len] = DIRECTORY_SEPARATOR; + memcpy (file_name + dir_len + add_slash, base, base_len + 1); + } + } + + if (file_name == NULL) + /* Out of memory. Treat the file as empty. */ + cp = ""; + else + { + int fd; + + /* Open the file. Reject symbolic links on platforms that support + O_NOFOLLOW. This is a security feature. Without it, an attacker + could retrieve parts of the contents (namely, the tail of the + first line that starts with "* ") of an arbitrary file by placing + a symbolic link to that file under the name "charset.alias" in + some writable directory and defining the environment variable + CHARSETALIASDIR to point to that directory. */ + fd = open (file_name, + O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0)); + if (fd < 0) + /* File not found. Treat it as empty. */ + cp = ""; + else + { + FILE *fp; + + fp = fdopen (fd, "r"); + if (fp == NULL) + { + /* Out of memory. Treat the file as empty. */ + close (fd); + cp = ""; + } + else + { + /* Parse the file's contents. */ + char *res_ptr = NULL; + size_t res_size = 0; + + for (;;) + { + int c; + char buf1[50+1]; + char buf2[50+1]; + size_t l1, l2; + char *old_res_ptr; + + c = getc (fp); + if (c == EOF) + break; + if (c == '\n' || c == ' ' || c == '\t') + continue; + if (c == '#') + { + /* Skip comment, to end of line. */ + do + c = getc (fp); + while (!(c == EOF || c == '\n')); + if (c == EOF) + break; + continue; + } + ungetc (c, fp); + if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) + break; + l1 = strlen (buf1); + l2 = strlen (buf2); + old_res_ptr = res_ptr; + if (res_size == 0) + { + res_size = l1 + 1 + l2 + 1; + res_ptr = (char *) malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; + res_ptr = (char *) realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { + /* Out of memory. */ + res_size = 0; + free (old_res_ptr); + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); + strcpy (res_ptr + res_size - (l2 + 1), buf2); + } + fclose (fp); + if (res_size == 0) + cp = ""; + else + { + *(res_ptr + res_size) = '\0'; + cp = res_ptr; + } + } + } + + free (file_name); + } + +#else + +# if defined DARWIN7 + /* To avoid the trouble of installing a file that is shared by many + GNU packages -- many packaging systems have problems with this --, + simply inline the aliases here. */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-4" "\0" "ISO-8859-4" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + "ISO8859-13" "\0" "ISO-8859-13" "\0" + "ISO8859-15" "\0" "ISO-8859-15" "\0" + "KOI8-R" "\0" "KOI8-R" "\0" + "KOI8-U" "\0" "KOI8-U" "\0" + "CP866" "\0" "CP866" "\0" + "CP949" "\0" "CP949" "\0" + "CP1131" "\0" "CP1131" "\0" + "CP1251" "\0" "CP1251" "\0" + "eucCN" "\0" "GB2312" "\0" + "GB2312" "\0" "GB2312" "\0" + "eucJP" "\0" "EUC-JP" "\0" + "eucKR" "\0" "EUC-KR" "\0" + "Big5" "\0" "BIG5" "\0" + "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" + "GBK" "\0" "GBK" "\0" + "GB18030" "\0" "GB18030" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "ARMSCII-8" "\0" "ARMSCII-8" "\0" + "PT154" "\0" "PT154" "\0" + /*"ISCII-DEV" "\0" "?" "\0"*/ + "*" "\0" "UTF-8" "\0"; +# endif + +# if defined VMS + /* To avoid the troubles of an extra file charset.alias_vms in the + sources of many GNU packages, simply inline the aliases here. */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-8" "\0" "ISO-8859-8" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + /* Japanese */ + "eucJP" "\0" "EUC-JP" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "DECKANJI" "\0" "DEC-KANJI" "\0" + "SDECKANJI" "\0" "EUC-JP" "\0" + /* Chinese */ + "eucTW" "\0" "EUC-TW" "\0" + "DECHANYU" "\0" "DEC-HANYU" "\0" + "DECHANZI" "\0" "GB2312" "\0" + /* Korean */ + "DECKOREAN" "\0" "EUC-KR" "\0"; +# endif + +# if defined WINDOWS_NATIVE || defined __CYGWIN__ + /* To avoid the troubles of installing a separate file in the same + directory as the DLL and of retrieving the DLL's directory at + runtime, simply inline the aliases here. */ + + cp = "CP936" "\0" "GBK" "\0" + "CP1361" "\0" "JOHAB" "\0" + "CP20127" "\0" "ASCII" "\0" + "CP20866" "\0" "KOI8-R" "\0" + "CP20936" "\0" "GB2312" "\0" + "CP21866" "\0" "KOI8-RU" "\0" + "CP28591" "\0" "ISO-8859-1" "\0" + "CP28592" "\0" "ISO-8859-2" "\0" + "CP28593" "\0" "ISO-8859-3" "\0" + "CP28594" "\0" "ISO-8859-4" "\0" + "CP28595" "\0" "ISO-8859-5" "\0" + "CP28596" "\0" "ISO-8859-6" "\0" + "CP28597" "\0" "ISO-8859-7" "\0" + "CP28598" "\0" "ISO-8859-8" "\0" + "CP28599" "\0" "ISO-8859-9" "\0" + "CP28605" "\0" "ISO-8859-15" "\0" + "CP38598" "\0" "ISO-8859-8" "\0" + "CP51932" "\0" "EUC-JP" "\0" + "CP51936" "\0" "GB2312" "\0" + "CP51949" "\0" "EUC-KR" "\0" + "CP51950" "\0" "EUC-TW" "\0" + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; +# endif +#endif + + charset_aliases = cp; + } + + return cp; +} + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset (void) +{ + const char *codeset; + const char *aliases; + +#if !(defined WINDOWS_NATIVE || defined OS2) + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". Return the suffix of the locale name from the + environment variables (if present) or the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) + { + const char *locale; + static char buf[2 + 10 + 1]; + + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + } + + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). This encoding is used by Cygwin, unless the user + has set the environment variable CYGWIN=codepage:oem (which very few + people do). + Output directed to console windows needs to be converted (to + GetOEMCP() if the console is using a raster font, or to + GetConsoleOutputCP() if it is using a TrueType font). Cygwin does + this conversion transparently (see winsup/cygwin/fhandler_console.cc), + converting to GetConsoleOutputCP(). This leads to correct results, + except when SetConsoleOutputCP has been called and a raster font is + in use. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + } +# endif + +# else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't + use setlocale here; it would return "C" when it doesn't support the + locale name the user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + } + + /* On some old systems, one used to set locale = "iso8859_1". On others, + you set it to "language_COUNTRY.charset". In any case, we resolve it + through the charset.alias file. */ + codeset = locale; + +# endif + +#elif defined WINDOWS_NATIVE + + static char buf[2 + 10 + 1]; + + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). + When the output goes to a console window, it needs to be provided in + GetOEMCP() encoding if the console is using a raster font, or in + GetConsoleOutputCP() encoding if it is using a TrueType font. + But in GUI programs and for output sent to files and pipes, GetACP() + encoding is the best bet. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + +#elif defined OS2 + + const char *locale; + static char buf[2 + 10 + 1]; + ULONG cp[3]; + ULONG cplen; + + /* Allow user to override the codeset, as set in the operating system, + with standard language environment variables. */ + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + + /* Resolve through the charset.alias file. */ + codeset = locale; + } + else + { + /* OS/2 has a function returning the locale's codepage as a number. */ + if (DosQueryCp (sizeof (cp), cp, &cplen)) + codeset = ""; + else + { + sprintf (buf, "CP%u", cp[0]); + codeset = buf; + } + } + +#endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + + /* Resolve alias. */ + for (aliases = get_charset_aliases (); + *aliases != '\0'; + aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) + if (strcmp (codeset, aliases) == 0 + || (aliases[0] == '*' && aliases[1] == '\0')) + { + codeset = aliases + strlen (aliases) + 1; + break; + } + + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; + +#ifdef DARWIN7 + /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" + (the default codeset) does not work when MB_CUR_MAX is 1. */ + if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX <= 1) + codeset = "ASCII"; +#endif + + return codeset; +} diff --git a/grub-core/gnulib/localcharset.h b/grub-core/gnulib/localcharset.h new file mode 100644 index 000000000..c20982986 --- /dev/null +++ b/grub-core/gnulib/localcharset.h @@ -0,0 +1,40 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2009-2013 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern const char * locale_charset (void); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/grub-core/gnulib/locale.in.h b/grub-core/gnulib/locale.in.h new file mode 100644 index 000000000..264161a6c --- /dev/null +++ b/grub-core/gnulib/locale.in.h @@ -0,0 +1,216 @@ +/* A POSIX . + Copyright (C) 2007-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#ifdef _GL_ALREADY_INCLUDING_LOCALE_H + +/* Special invocation conventions to handle Solaris header files + (through Solaris 10) when combined with gettext's libintl.h. */ + +#@INCLUDE_NEXT@ @NEXT_LOCALE_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_LOCALE_H + +#define _GL_ALREADY_INCLUDING_LOCALE_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_LOCALE_H@ + +#undef _GL_ALREADY_INCLUDING_LOCALE_H + +#ifndef _@GUARD_PREFIX@_LOCALE_H +#define _@GUARD_PREFIX@_LOCALE_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* Mac OS X 10.5 defines the locale_t type in . */ +#if @HAVE_XLOCALE_H@ +# include +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. + On systems that don't define it, use the same value as GNU libintl. */ +#if !defined LC_MESSAGES +# define LC_MESSAGES 1729 +#endif + +/* Bionic libc's 'struct lconv' is just a dummy. */ +#if @REPLACE_STRUCT_LCONV@ +# define lconv rpl_lconv +struct lconv +{ + /* All 'char *' are actually 'const char *'. */ + + /* Members that depend on the LC_NUMERIC category of the locale. See + */ + + /* Symbol used as decimal point. */ + char *decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *grouping; + + /* Members that depend on the LC_MONETARY category of the locale. See + */ + + /* Symbol used as decimal point. */ + char *mon_decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *mon_thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *mon_grouping; + /* Sign used to indicate a value >= 0. */ + char *positive_sign; + /* Sign used to indicate a value < 0. */ + char *negative_sign; + + /* For formatting local currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *currency_symbol; + /* Number of digits after the decimal point. */ + char frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char n_cs_precedes; + /* For values < 0: Position of the sign. */ + char n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char n_sep_by_space; + + /* For formatting international currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *int_curr_symbol; + /* Number of digits after the decimal point. */ + char int_frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char int_p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_n_cs_precedes; + /* For values < 0: Position of the sign. */ + char int_n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_n_sep_by_space; +}; +#endif + +#if @GNULIB_LOCALECONV@ +# if @REPLACE_LOCALECONV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localeconv +# define localeconv rpl_localeconv +# endif +_GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); +_GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); +# else +_GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); +# endif +_GL_CXXALIASWARN (localeconv); +#elif @REPLACE_STRUCT_LCONV@ +# undef localeconv +# define localeconv localeconv_used_without_requesting_gnulib_module_localeconv +#elif defined GNULIB_POSIXCHECK +# undef localeconv +# if HAVE_RAW_DECL_LOCALECONV +_GL_WARN_ON_USE (localeconv, + "localeconv returns too few information on some platforms - " + "use gnulib module localeconv for portability"); +# endif +#endif + +#if @GNULIB_SETLOCALE@ +# if @REPLACE_SETLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setlocale +# define setlocale rpl_setlocale +# define GNULIB_defined_setlocale 1 +# endif +_GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); +_GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); +# else +_GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); +# endif +_GL_CXXALIASWARN (setlocale); +#elif defined GNULIB_POSIXCHECK +# undef setlocale +# if HAVE_RAW_DECL_SETLOCALE +_GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " + "use gnulib module setlocale for portability"); +# endif +#endif + +#if @GNULIB_DUPLOCALE@ +# if @REPLACE_DUPLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef duplocale +# define duplocale rpl_duplocale +# endif +_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); +# else +# if @HAVE_DUPLOCALE@ +_GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); +# endif +# endif +# if @HAVE_DUPLOCALE@ +_GL_CXXALIASWARN (duplocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef duplocale +# if HAVE_RAW_DECL_DUPLOCALE +_GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " + "use gnulib module duplocale for portability"); +# endif +#endif + +#endif /* _@GUARD_PREFIX@_LOCALE_H */ +#endif /* ! _GL_ALREADY_INCLUDING_LOCALE_H */ +#endif /* _@GUARD_PREFIX@_LOCALE_H */ diff --git a/grub-core/gnulib/localeconv.c b/grub-core/gnulib/localeconv.c new file mode 100644 index 000000000..7c7c77cfd --- /dev/null +++ b/grub-core/gnulib/localeconv.c @@ -0,0 +1,103 @@ +/* Query locale dependent information for formatting numbers. + Copyright (C) 2012-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if HAVE_STRUCT_LCONV_DECIMAL_POINT + +/* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_* + members. */ + +struct lconv * +localeconv (void) +{ + static struct lconv result; +# undef lconv +# undef localeconv + struct lconv *sys_result = localeconv (); + + result.decimal_point = sys_result->decimal_point; + result.thousands_sep = sys_result->thousands_sep; + result.grouping = sys_result->grouping; + result.mon_decimal_point = sys_result->mon_decimal_point; + result.mon_thousands_sep = sys_result->mon_thousands_sep; + result.mon_grouping = sys_result->mon_grouping; + result.positive_sign = sys_result->positive_sign; + result.negative_sign = sys_result->negative_sign; + result.currency_symbol = sys_result->currency_symbol; + result.frac_digits = sys_result->frac_digits; + result.p_cs_precedes = sys_result->p_cs_precedes; + result.p_sign_posn = sys_result->p_sign_posn; + result.p_sep_by_space = sys_result->p_sep_by_space; + result.n_cs_precedes = sys_result->n_cs_precedes; + result.n_sign_posn = sys_result->n_sign_posn; + result.n_sep_by_space = sys_result->n_sep_by_space; + result.int_curr_symbol = sys_result->int_curr_symbol; + result.int_frac_digits = sys_result->int_frac_digits; + result.int_p_cs_precedes = sys_result->p_cs_precedes; + result.int_p_sign_posn = sys_result->p_sign_posn; + result.int_p_sep_by_space = sys_result->p_sep_by_space; + result.int_n_cs_precedes = sys_result->n_cs_precedes; + result.int_n_sign_posn = sys_result->n_sign_posn; + result.int_n_sep_by_space = sys_result->n_sep_by_space; + + return &result; +} + +#else + +/* Override for platforms where 'struct lconv' is a dummy. */ + +# include + +struct lconv * +localeconv (void) +{ + static /*const*/ struct lconv result = + { + /* decimal_point */ ".", + /* thousands_sep */ "", + /* grouping */ "", + /* mon_decimal_point */ "", + /* mon_thousands_sep */ "", + /* mon_grouping */ "", + /* positive_sign */ "", + /* negative_sign */ "", + /* currency_symbol */ "", + /* frac_digits */ CHAR_MAX, + /* p_cs_precedes */ CHAR_MAX, + /* p_sign_posn */ CHAR_MAX, + /* p_sep_by_space */ CHAR_MAX, + /* n_cs_precedes */ CHAR_MAX, + /* n_sign_posn */ CHAR_MAX, + /* n_sep_by_space */ CHAR_MAX, + /* int_curr_symbol */ "", + /* int_frac_digits */ CHAR_MAX, + /* int_p_cs_precedes */ CHAR_MAX, + /* int_p_sign_posn */ CHAR_MAX, + /* int_p_sep_by_space */ CHAR_MAX, + /* int_n_cs_precedes */ CHAR_MAX, + /* int_n_sign_posn */ CHAR_MAX, + /* int_n_sep_by_space */ CHAR_MAX + }; + + return &result; +} + +#endif diff --git a/grub-core/gnulib/malloc.c b/grub-core/gnulib/malloc.c new file mode 100644 index 000000000..908735d27 --- /dev/null +++ b/grub-core/gnulib/malloc.c @@ -0,0 +1,56 @@ +/* malloc() function that is glibc compatible. + + Copyright (C) 1997-1998, 2006-2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* written by Jim Meyering and Bruno Haible */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include +/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ +#ifdef malloc +# define NEED_MALLOC_GNU 1 +# undef malloc +/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ +#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU +# define NEED_MALLOC_GNU 1 +#endif + +#include + +#include + +/* Allocate an N-byte block of memory from the heap. + If N is zero, allocate a 1-byte block. */ + +void * +rpl_malloc (size_t n) +{ + void *result; + +#if NEED_MALLOC_GNU + if (n == 0) + n = 1; +#endif + + result = malloc (n); + +#if !HAVE_MALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/grub-core/gnulib/mbrtowc.c b/grub-core/gnulib/mbrtowc.c new file mode 100644 index 000000000..5ee44aea4 --- /dev/null +++ b/grub-core/gnulib/mbrtowc.c @@ -0,0 +1,402 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if GNULIB_defined_mbstate_t +/* Implement mbrtowc() on top of mbtowc(). */ + +# include +# include + +# include "localcharset.h" +# include "streq.h" +# include "verify.h" + + +verify (sizeof (mbstate_t) >= 4); + +static char internal_state[4]; + +size_t +mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + char *pstate = (char *)ps; + + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + + if (n == 0) + return (size_t)(-2); + + /* Here n > 0. */ + + if (pstate == NULL) + pstate = internal_state; + + { + size_t nstate = pstate[0]; + char buf[4]; + const char *p; + size_t m; + + switch (nstate) + { + case 0: + p = s; + m = n; + break; + case 3: + buf[2] = pstate[3]; + /*FALLTHROUGH*/ + case 2: + buf[1] = pstate[2]; + /*FALLTHROUGH*/ + case 1: + buf[0] = pstate[1]; + p = buf; + m = nstate; + buf[m++] = s[0]; + if (n >= 2 && m < 4) + { + buf[m++] = s[1]; + if (n >= 3 && m < 4) + buf[m++] = s[2]; + } + break; + default: + errno = EINVAL; + return (size_t)(-1); + } + + /* Here m > 0. */ + +# if __GLIBC__ || defined __UCLIBC__ + /* Work around bug */ + mbtowc (NULL, NULL, 0); +# endif + { + int res = mbtowc (pwc, p, m); + + if (res >= 0) + { + if (pwc != NULL && ((*pwc == 0) != (res == 0))) + abort (); + if (nstate >= (res > 0 ? res : 1)) + abort (); + res -= nstate; + pstate[0] = 0; + return res; + } + + /* mbtowc does not distinguish between invalid and incomplete multibyte + sequences. But mbrtowc needs to make this distinction. + There are two possible approaches: + - Use iconv() and its return value. + - Use built-in knowledge about the possible encodings. + Given the low quality of implementation of iconv() on the systems that + lack mbrtowc(), we use the second approach. + The possible encodings are: + - 8-bit encodings, + - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, + - UTF-8. + Use specialized code for each. */ + if (m >= 4 || m >= MB_CUR_MAX) + goto invalid; + /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ + { + const char *encoding = locale_charset (); + + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + { + /* Cf. unistr/u8-mblen.c. */ + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (m == 1) + goto incomplete; + } + else if (c < 0xf0) + { + if (m == 1) + goto incomplete; + if (m == 2) + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xe1 || c2 >= 0xa0) + && (c != 0xed || c2 < 0xa0)) + goto incomplete; + } + } + else if (c <= 0xf4) + { + if (m == 1) + goto incomplete; + else /* m == 2 || m == 3 */ + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xf1 || c2 >= 0x90) + && (c < 0xf4 || (c == 0xf4 && c2 < 0x90))) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + goto incomplete; + } + } + } + } + } + goto invalid; + } + + /* As a reference for this code, you can use the GNU libiconv + implementation. Look for uses of the RET_TOOFEW macro. */ + + if (STREQ_OPT (encoding, + "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) + goto incomplete; + } + if (m == 2) + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8f) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0xa1 && c2 < 0xff) + goto incomplete; + } + } + goto invalid; + } + if (STREQ_OPT (encoding, + "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ_OPT (encoding, + "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ_OPT (encoding, + "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xa1 && c < 0xff) + goto incomplete; + } + goto invalid; + } + if (STREQ_OPT (encoding, + "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8e) + goto incomplete; + } + goto invalid; + } + if (STREQ_OPT (encoding, + "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0x90 && c <= 0xe3) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0x30 && c2 <= 0x39) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if (c3 >= 0x81 && c3 <= 0xfe) + goto incomplete; + } + } + } + } + goto invalid; + } + if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) + || (c >= 0xf0 && c <= 0xf9)) + goto incomplete; + } + goto invalid; + } + + /* An unknown multibyte encoding. */ + goto incomplete; + } + + incomplete: + { + size_t k = nstate; + /* Here 0 <= k < m < 4. */ + pstate[++k] = s[0]; + if (k < m) + { + pstate[++k] = s[1]; + if (k < m) + pstate[++k] = s[2]; + } + if (k != m) + abort (); + } + pstate[0] = m; + return (size_t)(-2); + + invalid: + errno = EILSEQ; + /* The conversion state is undefined, says POSIX. */ + return (size_t)(-1); + } + } +} + +#else +/* Override the system's mbrtowc() function. */ + +# undef mbrtowc + +size_t +rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ +# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } +# endif + +# if MBRTOWC_RETVAL_BUG + { + static mbstate_t internal_state; + + /* Override mbrtowc's internal state. We cannot call mbsinit() on the + hidden internal state, but we can call it on our variable. */ + if (ps == NULL) + ps = &internal_state; + + if (!mbsinit (ps)) + { + /* Parse the rest of the multibyte character byte for byte. */ + size_t count = 0; + for (; n > 0; s++, n--) + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, 1, ps); + + if (ret == (size_t)(-1)) + return (size_t)(-1); + count++; + if (ret != (size_t)(-2)) + { + /* The multibyte character has been completed. */ + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : count); + } + } + return (size_t)(-2); + } + } +# endif + +# if MBRTOWC_NUL_RETVAL_BUG + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, n, ps); + + if (ret != (size_t)(-1) && ret != (size_t)(-2)) + { + if (pwc != NULL) + *pwc = wc; + if (wc == 0) + ret = 0; + } + return ret; + } +# else + { +# if MBRTOWC_NULL_ARG1_BUG + wchar_t dummy; + + if (pwc == NULL) + pwc = &dummy; +# endif + + return mbrtowc (pwc, s, n, ps); + } +# endif +} + +#endif diff --git a/grub-core/gnulib/mbsinit.c b/grub-core/gnulib/mbsinit.c new file mode 100644 index 000000000..26fbb7fa2 --- /dev/null +++ b/grub-core/gnulib/mbsinit.c @@ -0,0 +1,61 @@ +/* Test for initial conversion state. + Copyright (C) 2008-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include "verify.h" + +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ + +/* On native Windows, 'mbstate_t' is defined as 'int'. */ + +int +mbsinit (const mbstate_t *ps) +{ + return ps == NULL || *ps == 0; +} + +#else + +/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() + and wcrtomb(), wcsrtombs(). + We assume that + - sizeof (mbstate_t) >= 4, + - only stateless encodings are supported (such as UTF-8 and EUC-JP, but + not ISO-2022 variants), + - for each encoding, the number of bytes for a wide character is <= 4. + (This maximum is attained for UTF-8, GB18030, EUC-TW.) + We define the meaning of mbstate_t as follows: + - In mb -> wc direction, mbstate_t's first byte contains the number of + buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. + - In wc -> mb direction, mbstate_t contains no information. In other + words, it is always in the initial state. */ + +verify (sizeof (mbstate_t) >= 4); + +int +mbsinit (const mbstate_t *ps) +{ + const char *pstate = (const char *)ps; + + return pstate == NULL || pstate[0] == 0; +} + +#endif diff --git a/grub-core/gnulib/mbsrtowcs-impl.h b/grub-core/gnulib/mbsrtowcs-impl.h new file mode 100644 index 000000000..b50e9739b --- /dev/null +++ b/grub-core/gnulib/mbsrtowcs-impl.h @@ -0,0 +1,122 @@ +/* Convert string to wide string. + Copyright (C) 2008-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +size_t +mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) +{ + if (ps == NULL) + ps = &_gl_mbsrtowcs_state; + { + const char *src = *srcp; + + if (dest != NULL) + { + wchar_t *destptr = dest; + + for (; len > 0; destptr++, len--) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MB_LEN_MAX); */ + if (src[0] == '\0') + src_avail = 1; + else if (src[1] == '\0') + src_avail = 2; + else if (src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); + + /* Parse the next multibyte character. */ + ret = mbrtowc (destptr, src, src_avail, ps); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input; + if (ret == 0) + { + src = NULL; + /* Here mbsinit (ps). */ + break; + } + src += ret; + } + + *srcp = src; + return destptr - dest; + } + else + { + /* Ignore dest and len, don't store *srcp at the end, and + don't clobber *ps. */ + mbstate_t state = *ps; + size_t totalcount = 0; + + for (;; totalcount++) + { + size_t src_avail; + size_t ret; + + /* An optimized variant of + src_avail = strnlen1 (src, MB_LEN_MAX); */ + if (src[0] == '\0') + src_avail = 1; + else if (src[1] == '\0') + src_avail = 2; + else if (src[2] == '\0') + src_avail = 3; + else if (MB_LEN_MAX <= 4 || src[3] == '\0') + src_avail = 4; + else + src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4); + + /* Parse the next multibyte character. */ + ret = mbrtowc (NULL, src, src_avail, &state); + + if (ret == (size_t)(-2)) + /* Encountered a multibyte character that extends past a '\0' byte + or that is longer than MB_LEN_MAX bytes. Cannot happen. */ + abort (); + + if (ret == (size_t)(-1)) + goto bad_input2; + if (ret == 0) + { + /* Here mbsinit (&state). */ + break; + } + src += ret; + } + + return totalcount; + } + + bad_input: + *srcp = src; + bad_input2: + errno = EILSEQ; + return (size_t)(-1); + } +} diff --git a/grub-core/gnulib/mbsrtowcs-state.c b/grub-core/gnulib/mbsrtowcs-state.c new file mode 100644 index 000000000..5a0b8882b --- /dev/null +++ b/grub-core/gnulib/mbsrtowcs-state.c @@ -0,0 +1,37 @@ +/* Convert string to wide string. + Copyright (C) 2008-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include + +/* Internal state used by the functions mbsrtowcs() and mbsnrtowcs(). */ +mbstate_t _gl_mbsrtowcs_state +/* The state must initially be in the "initial state"; so, zero-initialize it. + On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3, + see . + When it needs an initializer, use 0 or {0} as initializer? 0 only works + when mbstate_t is a scalar type (such as when gnulib defines it, or on + AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct + or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)). */ +#if defined __ELF__ + /* On ELF systems, variables in BSS behave well. */ +#else + /* Use braces, to be on the safe side. */ + = { 0 } +#endif + ; diff --git a/grub-core/gnulib/mbsrtowcs.c b/grub-core/gnulib/mbsrtowcs.c new file mode 100644 index 000000000..116ff493b --- /dev/null +++ b/grub-core/gnulib/mbsrtowcs.c @@ -0,0 +1,32 @@ +/* Convert string to wide string. + Copyright (C) 2008-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include + +#include "strnlen1.h" + + +extern mbstate_t _gl_mbsrtowcs_state; + +#include "mbsrtowcs-impl.h" diff --git a/grub-core/gnulib/mbswidth.c b/grub-core/gnulib/mbswidth.c new file mode 100644 index 000000000..baa4f2757 --- /dev/null +++ b/grub-core/gnulib/mbswidth.c @@ -0,0 +1,199 @@ +/* Determine the number of screen columns needed for a string. + Copyright (C) 2000-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "mbswidth.h" + +/* Get MB_CUR_MAX. */ +#include + +#include + +/* Get isprint(). */ +#include + +/* Get mbstate_t, mbrtowc(), mbsinit(), wcwidth(). */ +#include + +/* Get iswcntrl(). */ +#include + +/* Get INT_MAX. */ +#include + +/* Returns the number of columns needed to represent the multibyte + character string pointed to by STRING. If a non-printable character + occurs, and MBSW_REJECT_UNPRINTABLE is specified, -1 is returned. + With flags = MBSW_REJECT_INVALID | MBSW_REJECT_UNPRINTABLE, this is + the multibyte analogue of the wcswidth function. */ +int +mbswidth (const char *string, int flags) +{ + return mbsnwidth (string, strlen (string), flags); +} + +/* Returns the number of columns needed to represent the multibyte + character string pointed to by STRING of length NBYTES. If a + non-printable character occurs, and MBSW_REJECT_UNPRINTABLE is + specified, -1 is returned. */ +int +mbsnwidth (const char *string, size_t nbytes, int flags) +{ + const char *p = string; + const char *plimit = p + nbytes; + int width; + + width = 0; + if (MB_CUR_MAX > 1) + { + while (p < plimit) + switch (*p) + { + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* These characters are printable ASCII characters. */ + p++; + width++; + break; + case '\0': + if (flags & MBSW_STOP_AT_NUL) + return width; + default: + /* If we have a multibyte sequence, scan it up to its end. */ + { + mbstate_t mbstate; + memset (&mbstate, 0, sizeof mbstate); + do + { + wchar_t wc; + size_t bytes; + int w; + + bytes = mbrtowc (&wc, p, plimit - p, &mbstate); + + if (bytes == (size_t) -1) + /* An invalid multibyte sequence was encountered. */ + { + if (!(flags & MBSW_REJECT_INVALID)) + { + p++; + width++; + break; + } + else + return -1; + } + + if (bytes == (size_t) -2) + /* An incomplete multibyte character at the end. */ + { + if (!(flags & MBSW_REJECT_INVALID)) + { + p = plimit; + width++; + break; + } + else + return -1; + } + + if (bytes == 0) + /* A null wide character was encountered. */ + bytes = 1; + + w = wcwidth (wc); + if (w >= 0) + /* A printable multibyte character. */ + { + if (w > INT_MAX - width) + goto overflow; + width += w; + } + else + /* An unprintable multibyte character. */ + if (!(flags & MBSW_REJECT_UNPRINTABLE)) + { + if (!iswcntrl (wc)) + { + if (width == INT_MAX) + goto overflow; + width++; + } + } + else + return -1; + + p += bytes; + } + while (! mbsinit (&mbstate)); + } + break; + } + return width; + } + + while (p < plimit) + { + unsigned char c = (unsigned char) *p++; + + if (c == 0 && (flags & MBSW_STOP_AT_NUL)) + return width; + + if (isprint (c)) + { + if (width == INT_MAX) + goto overflow; + width++; + } + else if (!(flags & MBSW_REJECT_UNPRINTABLE)) + { + if (!iscntrl (c)) + { + if (width == INT_MAX) + goto overflow; + width++; + } + } + else + return -1; + } + return width; + + overflow: + return INT_MAX; +} diff --git a/grub-core/gnulib/mbswidth.h b/grub-core/gnulib/mbswidth.h new file mode 100644 index 000000000..d7207c58f --- /dev/null +++ b/grub-core/gnulib/mbswidth.h @@ -0,0 +1,63 @@ +/* Determine the number of screen columns needed for a string. + Copyright (C) 2000-2004, 2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Avoid a clash of our mbswidth() with a function of the same name defined + in UnixWare 7.1.1 . We need this #include before the #define + below. + However, we don't want to #include on all platforms because + - Tru64 with Desktop Toolkit C has a bug: must be included before + . + - BSD/OS 4.1 has a bug: and must be included before + . */ +#if HAVE_DECL_MBSWIDTH_IN_WCHAR_H +# include +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Optional flags to influence mbswidth/mbsnwidth behavior. */ + +/* If this bit is set, return -1 upon finding an invalid or incomplete + character. Otherwise, assume invalid characters have width 1. */ +#define MBSW_REJECT_INVALID 1 + +/* If this bit is set, return -1 upon finding a non-printable character. + Otherwise, assume unprintable characters have width 0 if they are + control characters and 1 otherwise. */ +#define MBSW_REJECT_UNPRINTABLE 2 + +/* If this bit is set \0 is treated as the end of string. + Otherwise it's treated as a normal one column width character. */ +#define MBSW_STOP_AT_NUL 4 + +/* Returns the number of screen columns needed for STRING. */ +#define mbswidth gnu_mbswidth /* avoid clash with UnixWare 7.1.1 function */ +extern int mbswidth (const char *string, int flags); + +/* Returns the number of screen columns needed for the NBYTES bytes + starting at BUF. */ +extern int mbsnwidth (const char *buf, size_t nbytes, int flags); + + +#ifdef __cplusplus +} +#endif diff --git a/grub-core/gnulib/mbtowc-impl.h b/grub-core/gnulib/mbtowc-impl.h new file mode 100644 index 000000000..767ab397c --- /dev/null +++ b/grub-core/gnulib/mbtowc-impl.h @@ -0,0 +1,44 @@ +/* Convert multibyte character to wide character. + Copyright (C) 2011-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* We don't need a static internal state, because the encoding is not state + dependent, and when mbrtowc returns (size_t)(-2). we throw the result + away. */ + +int +mbtowc (wchar_t *pwc, const char *s, size_t n) +{ + if (s == NULL) + return 0; + else + { + mbstate_t state; + wchar_t wc; + size_t result; + + memset (&state, 0, sizeof (mbstate_t)); + result = mbrtowc (&wc, s, n, &state); + if (result == (size_t)-1 || result == (size_t)-2) + { + errno = EILSEQ; + return -1; + } + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : result); + } +} diff --git a/grub-core/gnulib/mbtowc.c b/grub-core/gnulib/mbtowc.c new file mode 100644 index 000000000..632f2e1db --- /dev/null +++ b/grub-core/gnulib/mbtowc.c @@ -0,0 +1,26 @@ +/* Convert multibyte character to wide character. + Copyright (C) 2011-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include + +#include +#include +#include + +#include "mbtowc-impl.h" diff --git a/grub-core/gnulib/memchr.c b/grub-core/gnulib/memchr.c new file mode 100644 index 000000000..3db38a94c --- /dev/null +++ b/grub-core/gnulib/memchr.c @@ -0,0 +1,172 @@ +/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2013 + Free Software Foundation, Inc. + + Based on strlen implementation by Torbjorn Granlund (tege@sics.se), + with help from Dan Sahlin (dan@sics.se) and + commentary by Jim Blandy (jimb@ai.mit.edu); + adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), + and implemented by Roland McGrath (roland@ai.mit.edu). + +NOTE: The canonical source of this file is maintained with the GNU C Library. +Bugs can be reported to bug-glibc@prep.ai.mit.edu. + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ + +#ifndef _LIBC +# include +#endif + +#include + +#include + +#if defined _LIBC +# include +#else +# define reg_char char +#endif + +#include + +#if HAVE_BP_SYM_H || defined _LIBC +# include +#else +# define BP_SYM(sym) sym +#endif + +#undef __memchr +#ifdef _LIBC +# undef memchr +#endif + +#ifndef weak_alias +# define __memchr memchr +#endif + +/* Search no more than N bytes of S for C. */ +void * +__memchr (void const *s, int c_in, size_t n) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned reg_char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + n > 0 && (size_t) char_ptr % sizeof (longword) != 0; + --n, ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will test a + longword at a time. The tricky part is testing if *any of the four* + bytes in the longword in question are equal to c. We first use an xor + with repeated_c. This reduces the task to testing whether *any of the + four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + So, the test whether any byte in longword1 is zero is equivalent to + testing whether tmp is nonzero. */ + + while (n >= sizeof (longword)) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + n -= sizeof (longword); + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that either n < sizeof (longword), or one of the + sizeof (longword) bytes starting at char_ptr is == c. On little-endian + machines, we could determine the first such byte without any further + memory accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. Choose code + that works in both cases. */ + + for (; n > 0; --n, ++char_ptr) + { + if (*char_ptr == c) + return (void *) char_ptr; + } + + return NULL; +} +#ifdef weak_alias +weak_alias (__memchr, BP_SYM (memchr)) +#endif diff --git a/grub-core/gnulib/memchr.valgrind b/grub-core/gnulib/memchr.valgrind new file mode 100644 index 000000000..60f247e10 --- /dev/null +++ b/grub-core/gnulib/memchr.valgrind @@ -0,0 +1,14 @@ +# Suppress a valgrind message about use of uninitialized memory in memchr(). +# POSIX states that when the character is found, memchr must not read extra +# bytes in an overestimated length (for example, where memchr is used to +# implement strnlen). However, we use a safe word read to provide a speedup. +{ + memchr-value4 + Memcheck:Value4 + fun:rpl_memchr +} +{ + memchr-value8 + Memcheck:Value8 + fun:rpl_memchr +} diff --git a/grub-core/gnulib/mempcpy.c b/grub-core/gnulib/mempcpy.c new file mode 100644 index 000000000..5582368ed --- /dev/null +++ b/grub-core/gnulib/mempcpy.c @@ -0,0 +1,28 @@ +/* Copy memory area and return pointer after last written byte. + Copyright (C) 2003, 2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#include + +/* Specification. */ +#include + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +void * +mempcpy (void *dest, const void *src, size_t n) +{ + return (char *) memcpy (dest, src, n) + n; +} diff --git a/grub-core/gnulib/msvc-inval.c b/grub-core/gnulib/msvc-inval.c new file mode 100644 index 000000000..7e57731eb --- /dev/null +++ b/grub-core/gnulib/msvc-inval.c @@ -0,0 +1,129 @@ +/* Invalid parameter handler for MSVC runtime libraries. + Copyright (C) 2011-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#include + +/* Specification. */ +#include "msvc-inval.h" + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ + && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) + +/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler + declaration. */ +# include + +# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING + +static void __cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ +} + +# else + +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include + +# if defined _MSC_VER + +static void cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ + RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); +} + +# else + +/* An index to thread-local storage. */ +static DWORD tls_index; +static int tls_initialized /* = 0 */; + +/* Used as a fallback only. */ +static struct gl_msvc_inval_per_thread not_per_thread; + +struct gl_msvc_inval_per_thread * +gl_msvc_inval_current (void) +{ + if (!tls_initialized) + { + tls_index = TlsAlloc (); + tls_initialized = 1; + } + if (tls_index == TLS_OUT_OF_INDEXES) + /* TlsAlloc had failed. */ + return ¬_per_thread; + else + { + struct gl_msvc_inval_per_thread *pointer = + (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); + if (pointer == NULL) + { + /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ + pointer = + (struct gl_msvc_inval_per_thread *) + malloc (sizeof (struct gl_msvc_inval_per_thread)); + if (pointer == NULL) + /* Could not allocate memory. Use the global storage. */ + pointer = ¬_per_thread; + TlsSetValue (tls_index, pointer); + } + return pointer; + } +} + +static void cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ + struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); + if (current->restart_valid) + longjmp (current->restart, 1); + else + /* An invalid parameter notification from outside the gnulib code. + Give the caller a chance to intervene. */ + RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); +} + +# endif + +# endif + +static int gl_msvc_inval_initialized /* = 0 */; + +void +gl_msvc_inval_ensure_handler (void) +{ + if (gl_msvc_inval_initialized == 0) + { + _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); + gl_msvc_inval_initialized = 1; + } +} + +#endif diff --git a/grub-core/gnulib/msvc-inval.h b/grub-core/gnulib/msvc-inval.h new file mode 100644 index 000000000..dcb0353dc --- /dev/null +++ b/grub-core/gnulib/msvc-inval.h @@ -0,0 +1,222 @@ +/* Invalid parameter handler for MSVC runtime libraries. + Copyright (C) 2011-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifndef _MSVC_INVAL_H +#define _MSVC_INVAL_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines macros that turn such an invalid parameter notification + into a non-local exit. An error code can then be produced at the target + of this exit. You can thus write code like + + TRY_MSVC_INVAL + { + + } + CATCH_MSVC_INVAL + { + + } + DONE_MSVC_INVAL; + + This entire block expands to a single statement. + + The handling of invalid parameters can be done in three ways: + + * The default way, which is reasonable for programs (not libraries): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) + + * The way for libraries that make "hairy" calls (like close(-1), or + fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) + + * The way for libraries that make no "hairy" calls: + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) + */ + +#define DEFAULT_HANDLING 0 +#define HAIRY_LIBRARY_HANDLING 1 +#define SANE_LIBRARY_HANDLING 2 + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ + && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) +/* A native Windows platform with the "invalid parameter handler" concept, + and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ + +# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING +/* Default handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that just returns. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Handling for hairy libraries. */ + +# include + +/* Gnulib can define its own status codes, as described in the page + "Raising Software Exceptions" on microsoft.com + . + Our status codes are composed of + - 0xE0000000, mandatory for all user-defined status codes, + - 0x474E550, a API identifier ("GNU"), + - 0, 1, 2, ..., used to distinguish different status codes from the + same API. */ +# define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) + +# if defined _MSC_VER +/* A compiler that supports __try/__except, as described in the page + "try-except statement" on microsoft.com + . + With __try/__except, we can use the multithread-safe exception handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + __try +# define CATCH_MSVC_INVAL \ + __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ + ? EXCEPTION_EXECUTE_HANDLER \ + : EXCEPTION_CONTINUE_SEARCH) +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Any compiler. + We can only use setjmp/longjmp. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +struct gl_msvc_inval_per_thread +{ + /* The restart that will resume execution at the code between + CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between + TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ + jmp_buf restart; + + /* Tells whether the contents of restart is valid. */ + int restart_valid; +}; + +/* Ensure that the invalid parameter handler in installed that passes + control to the gl_msvc_inval_restart if it is valid, or raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +/* Return a pointer to the per-thread data for the current thread. */ +extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + struct gl_msvc_inval_per_thread *msvc_inval_current; \ + gl_msvc_inval_ensure_handler (); \ + msvc_inval_current = gl_msvc_inval_current (); \ + /* First, initialize gl_msvc_inval_restart. */ \ + if (setjmp (msvc_inval_current->restart) == 0) \ + { \ + /* Then, mark it as valid. */ \ + msvc_inval_current->restart_valid = 1; +# define CATCH_MSVC_INVAL \ + /* Execution completed. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; \ + } \ + else \ + { \ + /* Execution triggered an invalid parameter notification. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; +# define DONE_MSVC_INVAL \ + } \ + } \ + while (0) + +# endif + +# endif + +#else +/* A platform that does not need to the invalid parameter handler, + or when SANE_LIBRARY_HANDLING is desired. */ + +/* The braces here avoid GCC warnings like + "warning: suggest explicit braces to avoid ambiguous 'else'". */ +# define TRY_MSVC_INVAL \ + do \ + { \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +#endif + +#endif /* _MSVC_INVAL_H */ diff --git a/grub-core/gnulib/msvc-nothrow.c b/grub-core/gnulib/msvc-nothrow.c new file mode 100644 index 000000000..8d65472a8 --- /dev/null +++ b/grub-core/gnulib/msvc-nothrow.c @@ -0,0 +1,49 @@ +/* Wrappers that don't throw invalid parameter notifications + with MSVC runtime libraries. + Copyright (C) 2011-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#include + +/* Specification. */ +#include "msvc-nothrow.h" + +/* Get declarations of the native Windows API functions. */ +#define WIN32_LEAN_AND_MEAN +#include + +#include "msvc-inval.h" + +#undef _get_osfhandle + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +intptr_t +_gl_nothrow_get_osfhandle (int fd) +{ + intptr_t result; + + TRY_MSVC_INVAL + { + result = _get_osfhandle (fd); + } + CATCH_MSVC_INVAL + { + result = (intptr_t) INVALID_HANDLE_VALUE; + } + DONE_MSVC_INVAL; + + return result; +} +#endif diff --git a/grub-core/gnulib/msvc-nothrow.h b/grub-core/gnulib/msvc-nothrow.h new file mode 100644 index 000000000..5f521813d --- /dev/null +++ b/grub-core/gnulib/msvc-nothrow.h @@ -0,0 +1,43 @@ +/* Wrappers that don't throw invalid parameter notifications + with MSVC runtime libraries. + Copyright (C) 2011-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifndef _MSVC_NOTHROW_H +#define _MSVC_NOTHROW_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines wrappers that turn such an invalid parameter notification + into an error code. */ + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* Get original declaration of _get_osfhandle. */ +# include + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER + +/* Override _get_osfhandle. */ +extern intptr_t _gl_nothrow_get_osfhandle (int fd); +# define _get_osfhandle _gl_nothrow_get_osfhandle + +# endif + +#endif + +#endif /* _MSVC_NOTHROW_H */ diff --git a/grub-core/gnulib/nl_langinfo.c b/grub-core/gnulib/nl_langinfo.c new file mode 100644 index 000000000..771c9533a --- /dev/null +++ b/grub-core/gnulib/nl_langinfo.c @@ -0,0 +1,271 @@ +/* nl_langinfo() replacement: query locale dependent information. + + Copyright (C) 2007-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if REPLACE_NL_LANGINFO + +/* Override nl_langinfo with support for added nl_item values. */ + +# include +# include + +# undef nl_langinfo + +char * +rpl_nl_langinfo (nl_item item) +{ + switch (item) + { +# if GNULIB_defined_CODESET + case CODESET: + { + const char *locale; + static char buf[2 + 10 + 1]; + + locale = setlocale (LC_CTYPE, NULL); + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + } + return ""; + } +# endif +# if GNULIB_defined_T_FMT_AMPM + case T_FMT_AMPM: + return "%I:%M:%S %p"; +# endif +# if GNULIB_defined_ERA + case ERA: + /* The format is not standardized. In glibc it is a sequence of strings + of the form "direction:offset:start_date:end_date:era_name:era_format" + with an empty string at the end. */ + return ""; + case ERA_D_FMT: + /* The %Ex conversion in strftime behaves like %x if the locale does not + have an alternative time format. */ + item = D_FMT; + break; + case ERA_D_T_FMT: + /* The %Ec conversion in strftime behaves like %c if the locale does not + have an alternative time format. */ + item = D_T_FMT; + break; + case ERA_T_FMT: + /* The %EX conversion in strftime behaves like %X if the locale does not + have an alternative time format. */ + item = T_FMT; + break; + case ALT_DIGITS: + /* The format is not standardized. In glibc it is a sequence of 10 + strings, appended in memory. */ + return "\0\0\0\0\0\0\0\0\0\0"; +# endif +# if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS + case YESEXPR: + return "^[yY]"; + case NOEXPR: + return "^[nN]"; +# endif + default: + break; + } + return nl_langinfo (item); +} + +#else + +/* Provide nl_langinfo from scratch. */ + +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* Native Windows platforms. */ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# include + +# else + +/* An old Unix platform without locales, such as Linux libc5 or BeOS. */ + +# endif + +# include + +char * +nl_langinfo (nl_item item) +{ + switch (item) + { + /* nl_langinfo items of the LC_CTYPE category */ + case CODESET: +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { + static char buf[2 + 10 + 1]; + + /* The Windows API has a function returning the locale's codepage as + a number. */ + sprintf (buf, "CP%u", GetACP ()); + return buf; + } +# elif defined __BEOS__ + return "UTF-8"; +# else + return "ISO-8859-1"; +# endif + /* nl_langinfo items of the LC_NUMERIC category */ + case RADIXCHAR: + return localeconv () ->decimal_point; + case THOUSEP: + return localeconv () ->thousands_sep; + /* nl_langinfo items of the LC_TIME category. + TODO: Really use the locale. */ + case D_T_FMT: + case ERA_D_T_FMT: + return "%a %b %e %H:%M:%S %Y"; + case D_FMT: + case ERA_D_FMT: + return "%m/%d/%y"; + case T_FMT: + case ERA_T_FMT: + return "%H:%M:%S"; + case T_FMT_AMPM: + return "%I:%M:%S %p"; + case AM_STR: + return "AM"; + case PM_STR: + return "PM"; + case DAY_1: + return "Sunday"; + case DAY_2: + return "Monday"; + case DAY_3: + return "Tuesday"; + case DAY_4: + return "Wednesday"; + case DAY_5: + return "Thursday"; + case DAY_6: + return "Friday"; + case DAY_7: + return "Saturday"; + case ABDAY_1: + return "Sun"; + case ABDAY_2: + return "Mon"; + case ABDAY_3: + return "Tue"; + case ABDAY_4: + return "Wed"; + case ABDAY_5: + return "Thu"; + case ABDAY_6: + return "Fri"; + case ABDAY_7: + return "Sat"; + case MON_1: + return "January"; + case MON_2: + return "February"; + case MON_3: + return "March"; + case MON_4: + return "April"; + case MON_5: + return "May"; + case MON_6: + return "June"; + case MON_7: + return "July"; + case MON_8: + return "August"; + case MON_9: + return "September"; + case MON_10: + return "October"; + case MON_11: + return "November"; + case MON_12: + return "December"; + case ABMON_1: + return "Jan"; + case ABMON_2: + return "Feb"; + case ABMON_3: + return "Mar"; + case ABMON_4: + return "Apr"; + case ABMON_5: + return "May"; + case ABMON_6: + return "Jun"; + case ABMON_7: + return "Jul"; + case ABMON_8: + return "Aug"; + case ABMON_9: + return "Sep"; + case ABMON_10: + return "Oct"; + case ABMON_11: + return "Nov"; + case ABMON_12: + return "Dec"; + case ERA: + return ""; + case ALT_DIGITS: + return "\0\0\0\0\0\0\0\0\0\0"; + /* nl_langinfo items of the LC_MONETARY category + TODO: Really use the locale. */ + case CRNCYSTR: + return "-"; + /* nl_langinfo items of the LC_MESSAGES category + TODO: Really use the locale. */ + case YESEXPR: + return "^[yY]"; + case NOEXPR: + return "^[nN]"; + default: + return ""; + } +} + +#endif diff --git a/grub-core/gnulib/printf-args.c b/grub-core/gnulib/printf-args.c new file mode 100644 index 000000000..c27e6bc6b --- /dev/null +++ b/grub-core/gnulib/printf-args.c @@ -0,0 +1,187 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2013 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be defined. + STATIC Set to 'static' to declare the function static. */ + +#ifndef PRINTF_FETCHARGS +# include +#endif + +/* Specification. */ +#ifndef PRINTF_FETCHARGS +# include "printf-args.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_FETCHARGS (va_list args, arguments *a) +{ + size_t i; + argument *ap; + + for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) + switch (ap->type) + { + case TYPE_SCHAR: + ap->a.a_schar = va_arg (args, /*signed char*/ int); + break; + case TYPE_UCHAR: + ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); + break; + case TYPE_SHORT: + ap->a.a_short = va_arg (args, /*short*/ int); + break; + case TYPE_USHORT: + ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); + break; + case TYPE_INT: + ap->a.a_int = va_arg (args, int); + break; + case TYPE_UINT: + ap->a.a_uint = va_arg (args, unsigned int); + break; + case TYPE_LONGINT: + ap->a.a_longint = va_arg (args, long int); + break; + case TYPE_ULONGINT: + ap->a.a_ulongint = va_arg (args, unsigned long int); + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + ap->a.a_longlongint = va_arg (args, long long int); + break; + case TYPE_ULONGLONGINT: + ap->a.a_ulonglongint = va_arg (args, unsigned long long int); + break; +#endif + case TYPE_DOUBLE: + ap->a.a_double = va_arg (args, double); + break; + case TYPE_LONGDOUBLE: + ap->a.a_longdouble = va_arg (args, long double); + break; + case TYPE_CHAR: + ap->a.a_char = va_arg (args, int); + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by + default argument promotions", this is not the case in mingw32, + where wint_t is 'unsigned short'. */ + ap->a.a_wide_char = + (sizeof (wint_t) < sizeof (int) + ? (wint_t) va_arg (args, int) + : va_arg (args, wint_t)); + break; +#endif + case TYPE_STRING: + ap->a.a_string = va_arg (args, const char *); + /* A null pointer is an invalid argument for "%s", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_string == NULL) + ap->a.a_string = "(NULL)"; + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + ap->a.a_wide_string = va_arg (args, const wchar_t *); + /* A null pointer is an invalid argument for "%ls", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_wide_string == NULL) + { + static const wchar_t wide_null_string[] = + { + (wchar_t)'(', + (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', + (wchar_t)')', + (wchar_t)0 + }; + ap->a.a_wide_string = wide_null_string; + } + break; +#endif + case TYPE_POINTER: + ap->a.a_pointer = va_arg (args, void *); + break; + case TYPE_COUNT_SCHAR_POINTER: + ap->a.a_count_schar_pointer = va_arg (args, signed char *); + break; + case TYPE_COUNT_SHORT_POINTER: + ap->a.a_count_short_pointer = va_arg (args, short *); + break; + case TYPE_COUNT_INT_POINTER: + ap->a.a_count_int_pointer = va_arg (args, int *); + break; + case TYPE_COUNT_LONGINT_POINTER: + ap->a.a_count_longint_pointer = va_arg (args, long int *); + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); + break; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case TYPE_U8_STRING: + ap->a.a_u8_string = va_arg (args, const uint8_t *); + /* A null pointer is an invalid argument for "%U", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u8_string == NULL) + { + static const uint8_t u8_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u8_string = u8_null_string; + } + break; + case TYPE_U16_STRING: + ap->a.a_u16_string = va_arg (args, const uint16_t *); + /* A null pointer is an invalid argument for "%lU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u16_string == NULL) + { + static const uint16_t u16_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u16_string = u16_null_string; + } + break; + case TYPE_U32_STRING: + ap->a.a_u32_string = va_arg (args, const uint32_t *); + /* A null pointer is an invalid argument for "%llU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u32_string == NULL) + { + static const uint32_t u32_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u32_string = u32_null_string; + } + break; +#endif + default: + /* Unknown type. */ + return -1; + } + return 0; +} diff --git a/grub-core/gnulib/printf-args.h b/grub-core/gnulib/printf-args.h new file mode 100644 index 000000000..2a9c2a3f8 --- /dev/null +++ b/grub-core/gnulib/printf-args.h @@ -0,0 +1,158 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2013 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifndef _PRINTF_ARGS_H +#define _PRINTF_ARGS_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be declared. + STATIC Set to 'static' to declare the function static. */ + +/* Default parameters. */ +#ifndef PRINTF_FETCHARGS +# define PRINTF_FETCHARGS printf_fetchargs +#endif + +/* Get size_t. */ +#include + +/* Get wchar_t. */ +#if HAVE_WCHAR_T +# include +#endif + +/* Get wint_t. */ +#if HAVE_WINT_T +# include +#endif + +/* Get va_list. */ +#include + + +/* Argument types */ +typedef enum +{ + TYPE_NONE, + TYPE_SCHAR, + TYPE_UCHAR, + TYPE_SHORT, + TYPE_USHORT, + TYPE_INT, + TYPE_UINT, + TYPE_LONGINT, + TYPE_ULONGINT, +#if HAVE_LONG_LONG_INT + TYPE_LONGLONGINT, + TYPE_ULONGLONGINT, +#endif + TYPE_DOUBLE, + TYPE_LONGDOUBLE, + TYPE_CHAR, +#if HAVE_WINT_T + TYPE_WIDE_CHAR, +#endif + TYPE_STRING, +#if HAVE_WCHAR_T + TYPE_WIDE_STRING, +#endif + TYPE_POINTER, + TYPE_COUNT_SCHAR_POINTER, + TYPE_COUNT_SHORT_POINTER, + TYPE_COUNT_INT_POINTER, + TYPE_COUNT_LONGINT_POINTER +#if HAVE_LONG_LONG_INT +, TYPE_COUNT_LONGLONGINT_POINTER +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ +, TYPE_U8_STRING +, TYPE_U16_STRING +, TYPE_U32_STRING +#endif +} arg_type; + +/* Polymorphic argument */ +typedef struct +{ + arg_type type; + union + { + signed char a_schar; + unsigned char a_uchar; + short a_short; + unsigned short a_ushort; + int a_int; + unsigned int a_uint; + long int a_longint; + unsigned long int a_ulongint; +#if HAVE_LONG_LONG_INT + long long int a_longlongint; + unsigned long long int a_ulonglongint; +#endif + float a_float; + double a_double; + long double a_longdouble; + int a_char; +#if HAVE_WINT_T + wint_t a_wide_char; +#endif + const char* a_string; +#if HAVE_WCHAR_T + const wchar_t* a_wide_string; +#endif + void* a_pointer; + signed char * a_count_schar_pointer; + short * a_count_short_pointer; + int * a_count_int_pointer; + long int * a_count_longint_pointer; +#if HAVE_LONG_LONG_INT + long long int * a_count_longlongint_pointer; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + const uint8_t * a_u8_string; + const uint16_t * a_u16_string; + const uint32_t * a_u32_string; +#endif + } + a; +} +argument; + +/* Number of directly allocated arguments (no malloc() needed). */ +#define N_DIRECT_ALLOC_ARGUMENTS 7 + +typedef struct +{ + size_t count; + argument *arg; + argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; +} +arguments; + + +/* Fetch the arguments, putting them into a. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int PRINTF_FETCHARGS (va_list args, arguments *a); + +#endif /* _PRINTF_ARGS_H */ diff --git a/grub-core/gnulib/printf-parse.c b/grub-core/gnulib/printf-parse.c new file mode 100644 index 000000000..23cacc1da --- /dev/null +++ b/grub-core/gnulib/printf-parse.c @@ -0,0 +1,638 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002-2003, 2006-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +/* This file can be parametrized with the following macros: + CHAR_T The element type of the format string. + CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. + DIRECTIVE Structure denoting a format directive. + Depends on CHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on CHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on CHAR_T. + STATIC Set to 'static' to declare the function static. + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ + +#ifndef PRINTF_PARSE +# include +#endif + +/* Specification. */ +#ifndef PRINTF_PARSE +# include "printf-parse.h" +#endif + +/* Default parameters. */ +#ifndef PRINTF_PARSE +# define PRINTF_PARSE printf_parse +# define CHAR_T char +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +#endif + +/* Get size_t, NULL. */ +#include + +/* Get intmax_t. */ +#if defined IN_LIBINTL || defined IN_LIBASPRINTF +# if HAVE_STDINT_H_WITH_UINTMAX +# include +# endif +# if HAVE_INTTYPES_H_WITH_UINTMAX +# include +# endif +#else +# include +#endif + +/* malloc(), realloc(), free(). */ +#include + +/* memcpy(). */ +#include + +/* errno. */ +#include + +/* Checked size_t computations. */ +#include "xsize.h" + +#if CHAR_T_ONLY_ASCII +/* c_isascii(). */ +# include "c-ctype.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) +{ + const CHAR_T *cp = format; /* pointer into format */ + size_t arg_posn = 0; /* number of regular arguments consumed */ + size_t d_allocated; /* allocated elements of d->dir */ + size_t a_allocated; /* allocated elements of a->arg */ + size_t max_width_length = 0; + size_t max_precision_length = 0; + + d->count = 0; + d_allocated = N_DIRECT_ALLOC_DIRECTIVES; + d->dir = d->direct_alloc_dir; + + a->count = 0; + a_allocated = N_DIRECT_ALLOC_ARGUMENTS; + a->arg = a->direct_alloc_arg; + +#define REGISTER_ARG(_index_,_type_) \ + { \ + size_t n = (_index_); \ + if (n >= a_allocated) \ + { \ + size_t memory_size; \ + argument *memory; \ + \ + a_allocated = xtimes (a_allocated, 2); \ + if (a_allocated <= n) \ + a_allocated = xsum (n, 1); \ + memory_size = xtimes (a_allocated, sizeof (argument)); \ + if (size_overflow_p (memory_size)) \ + /* Overflow, would lead to out of memory. */ \ + goto out_of_memory; \ + memory = (argument *) (a->arg != a->direct_alloc_arg \ + ? realloc (a->arg, memory_size) \ + : malloc (memory_size)); \ + if (memory == NULL) \ + /* Out of memory. */ \ + goto out_of_memory; \ + if (a->arg == a->direct_alloc_arg) \ + memcpy (memory, a->arg, a->count * sizeof (argument)); \ + a->arg = memory; \ + } \ + while (a->count <= n) \ + a->arg[a->count++].type = TYPE_NONE; \ + if (a->arg[n].type == TYPE_NONE) \ + a->arg[n].type = (_type_); \ + else if (a->arg[n].type != (_type_)) \ + /* Ambiguous type for positional argument. */ \ + goto error; \ + } + + while (*cp != '\0') + { + CHAR_T c = *cp++; + if (c == '%') + { + size_t arg_index = ARG_NONE; + DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ + + /* Initialize the next directive. */ + dp->dir_start = cp - 1; + dp->flags = 0; + dp->width_start = NULL; + dp->width_end = NULL; + dp->width_arg_index = ARG_NONE; + dp->precision_start = NULL; + dp->precision_end = NULL; + dp->precision_arg_index = ARG_NONE; + dp->arg_index = ARG_NONE; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + arg_index = n - 1; + cp = np + 1; + } + } + + /* Read the flags. */ + for (;;) + { + if (*cp == '\'') + { + dp->flags |= FLAG_GROUP; + cp++; + } + else if (*cp == '-') + { + dp->flags |= FLAG_LEFT; + cp++; + } + else if (*cp == '+') + { + dp->flags |= FLAG_SHOWSIGN; + cp++; + } + else if (*cp == ' ') + { + dp->flags |= FLAG_SPACE; + cp++; + } + else if (*cp == '#') + { + dp->flags |= FLAG_ALT; + cp++; + } + else if (*cp == '0') + { + dp->flags |= FLAG_ZERO; + cp++; + } +#if __GLIBC__ >= 2 && !defined __UCLIBC__ + else if (*cp == 'I') + { + dp->flags |= FLAG_LOCALIZED; + cp++; + } +#endif + else + break; + } + + /* Parse the field width. */ + if (*cp == '*') + { + dp->width_start = cp; + cp++; + dp->width_end = cp; + if (max_width_length < 1) + max_width_length = 1; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + dp->width_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->width_arg_index == ARG_NONE) + { + dp->width_arg_index = arg_posn++; + if (dp->width_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->width_arg_index, TYPE_INT); + } + else if (*cp >= '0' && *cp <= '9') + { + size_t width_length; + + dp->width_start = cp; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->width_end = cp; + width_length = dp->width_end - dp->width_start; + if (max_width_length < width_length) + max_width_length = width_length; + } + + /* Parse the precision. */ + if (*cp == '.') + { + cp++; + if (*cp == '*') + { + dp->precision_start = cp - 1; + cp++; + dp->precision_end = cp; + if (max_precision_length < 2) + max_precision_length = 2; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory + later. */ + goto error; + dp->precision_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->precision_arg_index == ARG_NONE) + { + dp->precision_arg_index = arg_posn++; + if (dp->precision_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->precision_arg_index, TYPE_INT); + } + else + { + size_t precision_length; + + dp->precision_start = cp - 1; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->precision_end = cp; + precision_length = dp->precision_end - dp->precision_start; + if (max_precision_length < precision_length) + max_precision_length = precision_length; + } + } + + { + arg_type type; + + /* Parse argument type/size specifiers. */ + { + int flags = 0; + + for (;;) + { + if (*cp == 'h') + { + flags |= (1 << (flags & 1)); + cp++; + } + else if (*cp == 'L') + { + flags |= 4; + cp++; + } + else if (*cp == 'l') + { + flags += 8; + cp++; + } + else if (*cp == 'j') + { + if (sizeof (intmax_t) > sizeof (long)) + { + /* intmax_t = long long */ + flags += 16; + } + else if (sizeof (intmax_t) > sizeof (int)) + { + /* intmax_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 'z' || *cp == 'Z') + { + /* 'z' is standardized in ISO C 99, but glibc uses 'Z' + because the warning facility in gcc-2.95.2 understands + only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ + if (sizeof (size_t) > sizeof (long)) + { + /* size_t = long long */ + flags += 16; + } + else if (sizeof (size_t) > sizeof (int)) + { + /* size_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 't') + { + if (sizeof (ptrdiff_t) > sizeof (long)) + { + /* ptrdiff_t = long long */ + flags += 16; + } + else if (sizeof (ptrdiff_t) > sizeof (int)) + { + /* ptrdiff_t = long */ + flags += 8; + } + cp++; + } +#if defined __APPLE__ && defined __MACH__ + /* On Mac OS X 10.3, PRIdMAX is defined as "qd". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'q') + { + if (64 / 8 > sizeof (long)) + { + /* int64_t = long long */ + flags += 16; + } + else + { + /* int64_t = long */ + flags += 8; + } + cp++; + } +#endif +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On native Windows, PRIdMAX is defined as "I64d". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') + { + if (64 / 8 > sizeof (long)) + { + /* __int64 = long long */ + flags += 16; + } + else + { + /* __int64 = long */ + flags += 8; + } + cp += 3; + } +#endif + else + break; + } + + /* Read the conversion character. */ + c = *cp++; + switch (c) + { + case 'd': case 'i': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGLONGINT; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lld" into TYPE_LONGINT. */ + if (flags >= 8) + type = TYPE_LONGINT; + else if (flags & 2) + type = TYPE_SCHAR; + else if (flags & 1) + type = TYPE_SHORT; + else + type = TYPE_INT; + break; + case 'o': case 'u': case 'x': case 'X': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_ULONGLONGINT; + else +#endif + /* If 'unsigned long long' exists and is the same as + 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ + if (flags >= 8) + type = TYPE_ULONGINT; + else if (flags & 2) + type = TYPE_UCHAR; + else if (flags & 1) + type = TYPE_USHORT; + else + type = TYPE_UINT; + break; + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGDOUBLE; + else + type = TYPE_DOUBLE; + break; + case 'c': + if (flags >= 8) +#if HAVE_WINT_T + type = TYPE_WIDE_CHAR; +#else + goto error; +#endif + else + type = TYPE_CHAR; + break; +#if HAVE_WINT_T + case 'C': + type = TYPE_WIDE_CHAR; + c = 'c'; + break; +#endif + case 's': + if (flags >= 8) +#if HAVE_WCHAR_T + type = TYPE_WIDE_STRING; +#else + goto error; +#endif + else + type = TYPE_STRING; + break; +#if HAVE_WCHAR_T + case 'S': + type = TYPE_WIDE_STRING; + c = 's'; + break; +#endif + case 'p': + type = TYPE_POINTER; + break; + case 'n': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_COUNT_LONGLONGINT_POINTER; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lln" into TYPE_COUNT_LONGINT_POINTER. */ + if (flags >= 8) + type = TYPE_COUNT_LONGINT_POINTER; + else if (flags & 2) + type = TYPE_COUNT_SCHAR_POINTER; + else if (flags & 1) + type = TYPE_COUNT_SHORT_POINTER; + else + type = TYPE_COUNT_INT_POINTER; + break; +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case 'U': + if (flags >= 16) + type = TYPE_U32_STRING; + else if (flags >= 8) + type = TYPE_U16_STRING; + else + type = TYPE_U8_STRING; + break; +#endif + case '%': + type = TYPE_NONE; + break; + default: + /* Unknown conversion character. */ + goto error; + } + } + + if (type != TYPE_NONE) + { + dp->arg_index = arg_index; + if (dp->arg_index == ARG_NONE) + { + dp->arg_index = arg_posn++; + if (dp->arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->arg_index, type); + } + dp->conversion = c; + dp->dir_end = cp; + } + + d->count++; + if (d->count >= d_allocated) + { + size_t memory_size; + DIRECTIVE *memory; + + d_allocated = xtimes (d_allocated, 2); + memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir + ? realloc (d->dir, memory_size) + : malloc (memory_size)); + if (memory == NULL) + /* Out of memory. */ + goto out_of_memory; + if (d->dir == d->direct_alloc_dir) + memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); + d->dir = memory; + } + } +#if CHAR_T_ONLY_ASCII + else if (!c_isascii (c)) + { + /* Non-ASCII character. Not supported. */ + goto error; + } +#endif + } + d->dir[d->count].dir_start = cp; + + d->max_width_length = max_width_length; + d->max_precision_length = max_precision_length; + return 0; + +error: + if (a->arg != a->direct_alloc_arg) + free (a->arg); + if (d->dir != d->direct_alloc_dir) + free (d->dir); + errno = EINVAL; + return -1; + +out_of_memory: + if (a->arg != a->direct_alloc_arg) + free (a->arg); + if (d->dir != d->direct_alloc_dir) + free (d->dir); + errno = ENOMEM; + return -1; +} + +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef CHAR_T_ONLY_ASCII +#undef CHAR_T diff --git a/grub-core/gnulib/printf-parse.h b/grub-core/gnulib/printf-parse.h new file mode 100644 index 000000000..d8474bee1 --- /dev/null +++ b/grub-core/gnulib/printf-parse.h @@ -0,0 +1,193 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2013 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifndef _PRINTF_PARSE_H +#define _PRINTF_PARSE_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + STATIC Set to 'static' to declare the function static. */ + +#if HAVE_FEATURES_H +# include /* for __GLIBC__, __UCLIBC__ */ +#endif + +#include "printf-args.h" + + +/* Flags */ +#define FLAG_GROUP 1 /* ' flag */ +#define FLAG_LEFT 2 /* - flag */ +#define FLAG_SHOWSIGN 4 /* + flag */ +#define FLAG_SPACE 8 /* space flag */ +#define FLAG_ALT 16 /* # flag */ +#define FLAG_ZERO 32 +#if __GLIBC__ >= 2 && !defined __UCLIBC__ +# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ +#endif + +/* arg_index value indicating that no argument is consumed. */ +#define ARG_NONE (~(size_t)0) + +/* xxx_directive: A parsed directive. + xxx_directives: A parsed format string. */ + +/* Number of directly allocated directives (no malloc() needed). */ +#define N_DIRECT_ALLOC_DIRECTIVES 7 + +/* A parsed directive. */ +typedef struct +{ + const char* dir_start; + const char* dir_end; + int flags; + const char* width_start; + const char* width_end; + size_t width_arg_index; + const char* precision_start; + const char* precision_end; + size_t precision_arg_index; + char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +char_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + char_directive *dir; + size_t max_width_length; + size_t max_precision_length; + char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +char_directives; + +#if ENABLE_UNISTDIO + +/* A parsed directive. */ +typedef struct +{ + const uint8_t* dir_start; + const uint8_t* dir_end; + int flags; + const uint8_t* width_start; + const uint8_t* width_end; + size_t width_arg_index; + const uint8_t* precision_start; + const uint8_t* precision_end; + size_t precision_arg_index; + uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u8_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u8_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u8_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint16_t* dir_start; + const uint16_t* dir_end; + int flags; + const uint16_t* width_start; + const uint16_t* width_end; + size_t width_arg_index; + const uint16_t* precision_start; + const uint16_t* precision_end; + size_t precision_arg_index; + uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u16_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u16_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u16_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint32_t* dir_start; + const uint32_t* dir_end; + int flags; + const uint32_t* width_start; + const uint32_t* width_end; + size_t width_arg_index; + const uint32_t* precision_start; + const uint32_t* precision_end; + size_t precision_arg_index; + uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u32_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u32_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u32_directives; + +#endif + + +/* Parses the format string. Fills in the number N of directives, and fills + in directives[0], ..., directives[N-1], and sets directives[N].dir_start + to the end of the format string. Also fills in the arg_type fields of the + arguments and the needed count of arguments. */ +#if ENABLE_UNISTDIO +extern int + ulc_printf_parse (const char *format, char_directives *d, arguments *a); +extern int + u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); +extern int + u16_printf_parse (const uint16_t *format, u16_directives *d, + arguments *a); +extern int + u32_printf_parse (const uint32_t *format, u32_directives *d, + arguments *a); +#else +# ifdef STATIC +STATIC +# else +extern +# endif +int printf_parse (const char *format, char_directives *d, arguments *a); +#endif + +#endif /* _PRINTF_PARSE_H */ diff --git a/grub-core/gnulib/progname.c b/grub-core/gnulib/progname.c new file mode 100644 index 000000000..0c195e521 --- /dev/null +++ b/grub-core/gnulib/progname.c @@ -0,0 +1,92 @@ +/* Program name management. + Copyright (C) 2001-2003, 2005-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ +#include "progname.h" + +#include /* get program_invocation_name declaration */ +#include +#include +#include + + +/* String containing name the program is called with. + To be initialized by main(). */ +const char *program_name = NULL; + +/* Set program_name, based on argv[0]. + argv0 must be a string allocated with indefinite extent, and must not be + modified after this call. */ +void +set_program_name (const char *argv0) +{ + /* libtool creates a temporary executable whose name is sometimes prefixed + with "lt-" (depends on the platform). It also makes argv[0] absolute. + But the name of the temporary executable is a detail that should not be + visible to the end user and to the test suite. + Remove this "/.libs/" or "/.libs/lt-" prefix here. */ + const char *slash; + const char *base; + + /* Sanity check. POSIX requires the invoking process to pass a non-NULL + argv[0]. */ + if (argv0 == NULL) + { + /* It's a bug in the invoking program. Help diagnosing it. */ + fputs ("A NULL argv[0] was passed through an exec system call.\n", + stderr); + abort (); + } + + slash = strrchr (argv0, '/'); + base = (slash != NULL ? slash + 1 : argv0); + if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) + { + argv0 = base; + if (strncmp (base, "lt-", 3) == 0) + { + argv0 = base + 3; + /* On glibc systems, remove the "lt-" prefix from the variable + program_invocation_short_name. */ +#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + program_invocation_short_name = (char *) argv0; +#endif + } + } + + /* But don't strip off a leading / in general, because when the user + runs + /some/hidden/place/bin/cp foo foo + he should get the error message + /some/hidden/place/bin/cp: `foo' and `foo' are the same file + not + cp: `foo' and `foo' are the same file + */ + + program_name = argv0; + + /* On glibc systems, the error() function comes from libc and uses the + variable program_invocation_name, not program_name. So set this variable + as well. */ +#if HAVE_DECL_PROGRAM_INVOCATION_NAME + program_invocation_name = (char *) argv0; +#endif +} diff --git a/grub-core/gnulib/progname.h b/grub-core/gnulib/progname.h new file mode 100644 index 000000000..b4f3c2778 --- /dev/null +++ b/grub-core/gnulib/progname.h @@ -0,0 +1,62 @@ +/* Program name management. + Copyright (C) 2001-2004, 2006, 2009-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _PROGNAME_H +#define _PROGNAME_H + +/* Programs using this file should do the following in main(): + set_program_name (argv[0]); + */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* String containing name the program is called with. */ +extern const char *program_name; + +/* Set program_name, based on argv[0]. + argv0 must be a string allocated with indefinite extent, and must not be + modified after this call. */ +extern void set_program_name (const char *argv0); + +#if ENABLE_RELOCATABLE + +/* Set program_name, based on argv[0], and original installation prefix and + directory, for relocatability. */ +extern void set_program_name_and_installdir (const char *argv0, + const char *orig_installprefix, + const char *orig_installdir); +#undef set_program_name +#define set_program_name(ARG0) \ + set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) + +/* Return the full pathname of the current executable, based on the earlier + call to set_program_name_and_installdir. Return NULL if unknown. */ +extern char *get_full_program_name (void); + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROGNAME_H */ diff --git a/grub-core/gnulib/rawmemchr.c b/grub-core/gnulib/rawmemchr.c new file mode 100644 index 000000000..a0298ce64 --- /dev/null +++ b/grub-core/gnulib/rawmemchr.c @@ -0,0 +1,136 @@ +/* Searching in a string. + Copyright (C) 2008-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Find the first occurrence of C in S. */ +void * +rawmemchr (const void *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 is zero is equivalent + to testing whether tmp is nonzero. + + This test can read beyond the end of a string, depending on where + C_IN is encountered. However, this is considered safe since the + initialization phase ensured that the read will be aligned, + therefore, the read will not cross page boundaries and will not + cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == c. On little-endian machines, we + could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr != c) + char_ptr++; + return (void *) char_ptr; +} diff --git a/grub-core/gnulib/rawmemchr.valgrind b/grub-core/gnulib/rawmemchr.valgrind new file mode 100644 index 000000000..636392368 --- /dev/null +++ b/grub-core/gnulib/rawmemchr.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). +# This use is OK because it provides only a speedup. +{ + rawmemchr-value4 + Memcheck:Value4 + fun:rawmemchr +} +{ + rawmemchr-value8 + Memcheck:Value8 + fun:rawmemchr +} diff --git a/grub-core/gnulib/realloc.c b/grub-core/gnulib/realloc.c new file mode 100644 index 000000000..b51010a62 --- /dev/null +++ b/grub-core/gnulib/realloc.c @@ -0,0 +1,79 @@ +/* realloc() function that is glibc compatible. + + Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2013 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* written by Jim Meyering and Bruno Haible */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include + +/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h. */ +#ifdef realloc +# define NEED_REALLOC_GNU 1 +/* Whereas the gnulib module 'realloc-gnu' defines HAVE_REALLOC_GNU. */ +#elif GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU +# define NEED_REALLOC_GNU 1 +#endif + +/* Infer the properties of the system's malloc function. + The gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ +#if GNULIB_MALLOC_GNU && HAVE_MALLOC_GNU +# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1 +#endif + +#include + +#include + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. If N is zero, change it to 1. If P is NULL, + use malloc. */ + +void * +rpl_realloc (void *p, size_t n) +{ + void *result; + +#if NEED_REALLOC_GNU + if (n == 0) + { + n = 1; + + /* In theory realloc might fail, so don't rely on it to free. */ + free (p); + p = NULL; + } +#endif + + if (p == NULL) + { +#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE + if (n == 0) + n = 1; +#endif + result = malloc (n); + } + else + result = realloc (p, n); + +#if !HAVE_REALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/grub-core/gnulib/ref-add.sin b/grub-core/gnulib/ref-add.sin new file mode 100644 index 000000000..112bcdc64 --- /dev/null +++ b/grub-core/gnulib/ref-add.sin @@ -0,0 +1,29 @@ +# Add this package to a list of references stored in a text file. +# +# Copyright (C) 2000, 2009-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, see . +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ @PACKAGE@ / @PACKAGE@ / + tb + s/ $/ @PACKAGE@ / + :b + s/^/# Packages using this file:/ +} diff --git a/grub-core/gnulib/ref-del.sin b/grub-core/gnulib/ref-del.sin new file mode 100644 index 000000000..6f7386847 --- /dev/null +++ b/grub-core/gnulib/ref-del.sin @@ -0,0 +1,24 @@ +# Remove this package from a list of references stored in a text file. +# +# Copyright (C) 2000, 2009-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, see . +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + s/ @PACKAGE@ / / + s/^/# Packages using this file:/ +} diff --git a/grub-core/gnulib/regcomp.c b/grub-core/gnulib/regcomp.c new file mode 100644 index 000000000..596e0cf3e --- /dev/null +++ b/grub-core/gnulib/regcomp.c @@ -0,0 +1,3913 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + . */ + +static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, + size_t length, reg_syntax_t syntax); +static void re_compile_fastmap_iter (regex_t *bufp, + const re_dfastate_t *init_state, + char *fastmap); +static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); +#ifdef RE_ENABLE_I18N +static void free_charset (re_charset_t *cset); +#endif /* RE_ENABLE_I18N */ +static void free_workarea_compile (regex_t *preg); +static reg_errcode_t create_initial_state (re_dfa_t *dfa); +#ifdef RE_ENABLE_I18N +static void optimize_utf8 (re_dfa_t *dfa); +#endif +static reg_errcode_t analyze (regex_t *preg); +static reg_errcode_t preorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t postorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); +static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); +static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, + bin_tree_t *node); +static reg_errcode_t calc_first (void *extra, bin_tree_t *node); +static reg_errcode_t calc_next (void *extra, bin_tree_t *node); +static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); +static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); +static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint); +static reg_errcode_t calc_eclosure (re_dfa_t *dfa); +static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, + Idx node, bool root); +static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); +static Idx fetch_number (re_string_t *input, re_token_t *token, + reg_syntax_t syntax); +static int peek_token (re_token_t *token, re_string_t *input, + reg_syntax_t syntax) internal_function; +static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, + re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, + reg_errcode_t *err); +static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token, int token_len, + re_dfa_t *dfa, + reg_syntax_t syntax, + bool accept_hyphen); +static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token); +#ifdef RE_ENABLE_I18N +static reg_errcode_t build_equiv_class (bitset_t sbcset, + re_charset_t *mbcset, + Idx *equiv_class_alloc, + const unsigned char *name); +static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, + bitset_t sbcset, + re_charset_t *mbcset, + Idx *char_class_alloc, + const char *class_name, + reg_syntax_t syntax); +#else /* not RE_ENABLE_I18N */ +static reg_errcode_t build_equiv_class (bitset_t sbcset, + const unsigned char *name); +static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, + bitset_t sbcset, + const char *class_name, + reg_syntax_t syntax); +#endif /* not RE_ENABLE_I18N */ +static bin_tree_t *build_charclass_op (re_dfa_t *dfa, + RE_TRANSLATE_TYPE trans, + const char *class_name, + const char *extra, + bool non_match, reg_errcode_t *err); +static bin_tree_t *create_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + re_token_type_t type); +static bin_tree_t *create_token_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + const re_token_t *token); +static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); +static void free_token (re_token_t *node); +static reg_errcode_t free_tree (void *extra, bin_tree_t *node); +static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); + +/* This table gives an error message for each of the error codes listed + in regex.h. Obviously the order here has to be same as there. + POSIX doesn't require that we do anything for REG_NOERROR, + but why not be nice? */ + +static const char __re_error_msgid[] = + { +#define REG_NOERROR_IDX 0 + gettext_noop ("Success") /* REG_NOERROR */ + "\0" +#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") + gettext_noop ("No match") /* REG_NOMATCH */ + "\0" +#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") + gettext_noop ("Invalid regular expression") /* REG_BADPAT */ + "\0" +#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") + gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ + "\0" +#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") + gettext_noop ("Invalid character class name") /* REG_ECTYPE */ + "\0" +#define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") + gettext_noop ("Trailing backslash") /* REG_EESCAPE */ + "\0" +#define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") + gettext_noop ("Invalid back reference") /* REG_ESUBREG */ + "\0" +#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") + gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */ + "\0" +#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^") + gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ + "\0" +#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") + gettext_noop ("Unmatched \\{") /* REG_EBRACE */ + "\0" +#define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") + gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ + "\0" +#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") + gettext_noop ("Invalid range end") /* REG_ERANGE */ + "\0" +#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") + gettext_noop ("Memory exhausted") /* REG_ESPACE */ + "\0" +#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") + gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ + "\0" +#define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") + gettext_noop ("Premature end of regular expression") /* REG_EEND */ + "\0" +#define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") + gettext_noop ("Regular expression too big") /* REG_ESIZE */ + "\0" +#define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") + gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ + }; + +static const size_t __re_error_msgid_idx[] = + { + REG_NOERROR_IDX, + REG_NOMATCH_IDX, + REG_BADPAT_IDX, + REG_ECOLLATE_IDX, + REG_ECTYPE_IDX, + REG_EESCAPE_IDX, + REG_ESUBREG_IDX, + REG_EBRACK_IDX, + REG_EPAREN_IDX, + REG_EBRACE_IDX, + REG_BADBR_IDX, + REG_ERANGE_IDX, + REG_ESPACE_IDX, + REG_BADRPT_IDX, + REG_EEND_IDX, + REG_ESIZE_IDX, + REG_ERPAREN_IDX + }; + +/* Entry points for GNU code. */ + +/* re_compile_pattern is the GNU regular expression compiler: it + compiles PATTERN (of length LENGTH) and puts the result in BUFP. + Returns 0 if the pattern was valid, otherwise an error string. + + Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields + are set in BUFP on entry. */ + +#ifdef _LIBC +const char * +re_compile_pattern (pattern, length, bufp) + const char *pattern; + size_t length; + struct re_pattern_buffer *bufp; +#else /* size_t might promote */ +const char * +re_compile_pattern (const char *pattern, size_t length, + struct re_pattern_buffer *bufp) +#endif +{ + reg_errcode_t ret; + + /* And GNU code determines whether or not to get register information + by passing null for the REGS argument to re_match, etc., not by + setting no_sub, unless RE_NO_SUB is set. */ + bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); + + /* Match anchors at newline. */ + bufp->newline_anchor = 1; + + ret = re_compile_internal (bufp, pattern, length, re_syntax_options); + + if (!ret) + return NULL; + return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} +#ifdef _LIBC +weak_alias (__re_compile_pattern, re_compile_pattern) +#endif + +/* Set by 're_set_syntax' to the current regexp syntax to recognize. Can + also be assigned to arbitrarily: each pattern buffer stores its own + syntax, so it can be changed between regex compilations. */ +/* This has no initializer because initialized variables in Emacs + become read-only after dumping. */ +reg_syntax_t re_syntax_options; + + +/* Specify the precise syntax of regexps for compilation. This provides + for compatibility for various utilities which historically have + different, incompatible syntaxes. + + The argument SYNTAX is a bit mask comprised of the various bits + defined in regex.h. We return the old syntax. */ + +reg_syntax_t +re_set_syntax (syntax) + reg_syntax_t syntax; +{ + reg_syntax_t ret = re_syntax_options; + + re_syntax_options = syntax; + return ret; +} +#ifdef _LIBC +weak_alias (__re_set_syntax, re_set_syntax) +#endif + +int +re_compile_fastmap (bufp) + struct re_pattern_buffer *bufp; +{ + re_dfa_t *dfa = bufp->buffer; + char *fastmap = bufp->fastmap; + + memset (fastmap, '\0', sizeof (char) * SBC_MAX); + re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); + if (dfa->init_state != dfa->init_state_word) + re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); + if (dfa->init_state != dfa->init_state_nl) + re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); + if (dfa->init_state != dfa->init_state_begbuf) + re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); + bufp->fastmap_accurate = 1; + return 0; +} +#ifdef _LIBC +weak_alias (__re_compile_fastmap, re_compile_fastmap) +#endif + +static inline void +__attribute__ ((always_inline)) +re_set_fastmap (char *fastmap, bool icase, int ch) +{ + fastmap[ch] = 1; + if (icase) + fastmap[tolower (ch)] = 1; +} + +/* Helper function for re_compile_fastmap. + Compile fastmap for the initial_state INIT_STATE. */ + +static void +re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, + char *fastmap) +{ + re_dfa_t *dfa = bufp->buffer; + Idx node_cnt; + bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); + for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) + { + Idx node = init_state->nodes.elems[node_cnt]; + re_token_type_t type = dfa->nodes[node].type; + + if (type == CHARACTER) + { + re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); +#ifdef RE_ENABLE_I18N + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + unsigned char buf[MB_LEN_MAX]; + unsigned char *p; + wchar_t wc; + mbstate_t state; + + p = buf; + *p++ = dfa->nodes[node].opr.c; + while (++node < dfa->nodes_len + && dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].mb_partial) + *p++ = dfa->nodes[node].opr.c; + memset (&state, '\0', sizeof (state)); + if (__mbrtowc (&wc, (const char *) buf, p - buf, + &state) == p - buf + && (__wcrtomb ((char *) buf, towlower (wc), &state) + != (size_t) -1)) + re_set_fastmap (fastmap, false, buf[0]); + } +#endif + } + else if (type == SIMPLE_BRACKET) + { + int i, ch; + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + { + int j; + bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (w & ((bitset_word_t) 1 << j)) + re_set_fastmap (fastmap, icase, ch); + } + } +#ifdef RE_ENABLE_I18N + else if (type == COMPLEX_BRACKET) + { + re_charset_t *cset = dfa->nodes[node].opr.mbcset; + Idx i; + +# ifdef _LIBC + /* See if we have to try all bytes which start multiple collation + elements. + e.g. In da_DK, we want to catch 'a' since "aa" is a valid + collation element, and don't catch 'b' since 'b' is + the only collation element which starts from 'b' (and + it is caught by SIMPLE_BRACKET). */ + if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 + && (cset->ncoll_syms || cset->nranges)) + { + const int32_t *table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + for (i = 0; i < SBC_MAX; ++i) + if (table[i] < 0) + re_set_fastmap (fastmap, icase, i); + } +# endif /* _LIBC */ + + /* See if we have to start the match at all multibyte characters, + i.e. where we would not find an invalid sequence. This only + applies to multibyte character sets; for single byte character + sets, the SIMPLE_BRACKET again suffices. */ + if (dfa->mb_cur_max > 1 + && (cset->nchar_classes || cset->non_match || cset->nranges +# ifdef _LIBC + || cset->nequiv_classes +# endif /* _LIBC */ + )) + { + unsigned char c = 0; + do + { + mbstate_t mbs; + memset (&mbs, 0, sizeof (mbs)); + if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) + re_set_fastmap (fastmap, false, (int) c); + } + while (++c != 0); + } + + else + { + /* ... Else catch all bytes which can start the mbchars. */ + for (i = 0; i < cset->nmbchars; ++i) + { + char buf[256]; + mbstate_t state; + memset (&state, '\0', sizeof (state)); + if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) + re_set_fastmap (fastmap, icase, *(unsigned char *) buf); + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state) + != (size_t) -1) + re_set_fastmap (fastmap, false, *(unsigned char *) buf); + } + } + } + } +#endif /* RE_ENABLE_I18N */ + else if (type == OP_PERIOD +#ifdef RE_ENABLE_I18N + || type == OP_UTF8_PERIOD +#endif /* RE_ENABLE_I18N */ + || type == END_OF_RE) + { + memset (fastmap, '\1', sizeof (char) * SBC_MAX); + if (type == END_OF_RE) + bufp->can_be_null = 1; + return; + } + } +} + +/* Entry point for POSIX code. */ +/* regcomp takes a regular expression as a string and compiles it. + + PREG is a regex_t *. We do not expect any fields to be initialized, + since POSIX says we shouldn't. Thus, we set + + 'buffer' to the compiled pattern; + 'used' to the length of the compiled pattern; + 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the + REG_EXTENDED bit in CFLAGS is set; otherwise, to + RE_SYNTAX_POSIX_BASIC; + 'newline_anchor' to REG_NEWLINE being set in CFLAGS; + 'fastmap' to an allocated space for the fastmap; + 'fastmap_accurate' to zero; + 're_nsub' to the number of subexpressions in PATTERN. + + PATTERN is the address of the pattern string. + + CFLAGS is a series of bits which affect compilation. + + If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we + use POSIX basic syntax. + + If REG_NEWLINE is set, then . and [^...] don't match newline. + Also, regexec will try a match beginning after every newline. + + If REG_ICASE is set, then we considers upper- and lowercase + versions of letters to be equivalent when matching. + + If REG_NOSUB is set, then when PREG is passed to regexec, that + routine will report only success or failure, and nothing about the + registers. + + It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for + the return codes and their meanings.) */ + +int +regcomp (preg, pattern, cflags) + regex_t *_Restrict_ preg; + const char *_Restrict_ pattern; + int cflags; +{ + reg_errcode_t ret; + reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED + : RE_SYNTAX_POSIX_BASIC); + + preg->buffer = NULL; + preg->allocated = 0; + preg->used = 0; + + /* Try to allocate space for the fastmap. */ + preg->fastmap = re_malloc (char, SBC_MAX); + if (BE (preg->fastmap == NULL, 0)) + return REG_ESPACE; + + syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; + + /* If REG_NEWLINE is set, newlines are treated differently. */ + if (cflags & REG_NEWLINE) + { /* REG_NEWLINE implies neither . nor [^...] match newline. */ + syntax &= ~RE_DOT_NEWLINE; + syntax |= RE_HAT_LISTS_NOT_NEWLINE; + /* It also changes the matching behavior. */ + preg->newline_anchor = 1; + } + else + preg->newline_anchor = 0; + preg->no_sub = !!(cflags & REG_NOSUB); + preg->translate = NULL; + + ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); + + /* POSIX doesn't distinguish between an unmatched open-group and an + unmatched close-group: both are REG_EPAREN. */ + if (ret == REG_ERPAREN) + ret = REG_EPAREN; + + /* We have already checked preg->fastmap != NULL. */ + if (BE (ret == REG_NOERROR, 1)) + /* Compute the fastmap now, since regexec cannot modify the pattern + buffer. This function never fails in this implementation. */ + (void) re_compile_fastmap (preg); + else + { + /* Some error occurred while compiling the expression. */ + re_free (preg->fastmap); + preg->fastmap = NULL; + } + + return (int) ret; +} +#ifdef _LIBC +weak_alias (__regcomp, regcomp) +#endif + +/* Returns a message corresponding to an error code, ERRCODE, returned + from either regcomp or regexec. We don't use PREG here. */ + +#ifdef _LIBC +size_t +regerror (errcode, preg, errbuf, errbuf_size) + int errcode; + const regex_t *_Restrict_ preg; + char *_Restrict_ errbuf; + size_t errbuf_size; +#else /* size_t might promote */ +size_t +regerror (int errcode, const regex_t *_Restrict_ preg, + char *_Restrict_ errbuf, size_t errbuf_size) +#endif +{ + const char *msg; + size_t msg_size; + + if (BE (errcode < 0 + || errcode >= (int) (sizeof (__re_error_msgid_idx) + / sizeof (__re_error_msgid_idx[0])), 0)) + msg = gettext ("unknown regexp error"); + else + msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); + + msg_size = strlen (msg) + 1; /* Includes the null. */ + + if (BE (errbuf_size != 0, 1)) + { + size_t cpy_size = msg_size; + if (BE (msg_size > errbuf_size, 0)) + { + cpy_size = errbuf_size - 1; + errbuf[cpy_size] = '\0'; + } + memcpy (errbuf, msg, cpy_size); + } + + return msg_size; +} +#ifdef _LIBC +weak_alias (__regerror, regerror) +#endif + + +#ifdef RE_ENABLE_I18N +/* This static array is used for the map to single-byte characters when + UTF-8 is used. Otherwise we would allocate memory just to initialize + it the same all the time. UTF-8 is the preferred encoding so this is + a worthwhile optimization. */ +static const bitset_t utf8_sb_map = +{ + /* Set the first 128 bits. */ +# ifdef __GNUC__ + [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX +# else +# if 4 * BITSET_WORD_BITS < ASCII_CHARS +# error "bitset_word_t is narrower than 32 bits" +# elif 3 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 2 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 1 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, +# endif + (BITSET_WORD_MAX + >> (SBC_MAX % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) +# endif +}; +#endif + + +static void +free_dfa_content (re_dfa_t *dfa) +{ + Idx i, j; + + if (dfa->nodes) + for (i = 0; i < dfa->nodes_len; ++i) + free_token (dfa->nodes + i); + re_free (dfa->nexts); + for (i = 0; i < dfa->nodes_len; ++i) + { + if (dfa->eclosures != NULL) + re_node_set_free (dfa->eclosures + i); + if (dfa->inveclosures != NULL) + re_node_set_free (dfa->inveclosures + i); + if (dfa->edests != NULL) + re_node_set_free (dfa->edests + i); + } + re_free (dfa->edests); + re_free (dfa->eclosures); + re_free (dfa->inveclosures); + re_free (dfa->nodes); + + if (dfa->state_table) + for (i = 0; i <= dfa->state_hash_mask; ++i) + { + struct re_state_table_entry *entry = dfa->state_table + i; + for (j = 0; j < entry->num; ++j) + { + re_dfastate_t *state = entry->array[j]; + free_state (state); + } + re_free (entry->array); + } + re_free (dfa->state_table); +#ifdef RE_ENABLE_I18N + if (dfa->sb_char != utf8_sb_map) + re_free (dfa->sb_char); +#endif + re_free (dfa->subexp_map); +#ifdef DEBUG + re_free (dfa->re_str); +#endif + + re_free (dfa); +} + + +/* Free dynamically allocated space used by PREG. */ + +void +regfree (preg) + regex_t *preg; +{ + re_dfa_t *dfa = preg->buffer; + if (BE (dfa != NULL, 1)) + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + + re_free (preg->fastmap); + preg->fastmap = NULL; + + re_free (preg->translate); + preg->translate = NULL; +} +#ifdef _LIBC +weak_alias (__regfree, regfree) +#endif + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC + +/* BSD has one and only one pattern buffer. */ +static struct re_pattern_buffer re_comp_buf; + +char * +# ifdef _LIBC +/* Make these definitions weak in libc, so POSIX programs can redefine + these names if they don't use our functions, and still use + regcomp/regexec above without link errors. */ +weak_function +# endif +re_comp (s) + const char *s; +{ + reg_errcode_t ret; + char *fastmap; + + if (!s) + { + if (!re_comp_buf.buffer) + return gettext ("No previous regular expression"); + return 0; + } + + if (re_comp_buf.buffer) + { + fastmap = re_comp_buf.fastmap; + re_comp_buf.fastmap = NULL; + __regfree (&re_comp_buf); + memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); + re_comp_buf.fastmap = fastmap; + } + + if (re_comp_buf.fastmap == NULL) + { + re_comp_buf.fastmap = (char *) malloc (SBC_MAX); + if (re_comp_buf.fastmap == NULL) + return (char *) gettext (__re_error_msgid + + __re_error_msgid_idx[(int) REG_ESPACE]); + } + + /* Since 're_exec' always passes NULL for the 'regs' argument, we + don't need to initialize the pattern buffer fields which affect it. */ + + /* Match anchors at newlines. */ + re_comp_buf.newline_anchor = 1; + + ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); + + if (!ret) + return NULL; + + /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ + return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} + +#ifdef _LIBC +libc_freeres_fn (free_mem) +{ + __regfree (&re_comp_buf); +} +#endif + +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. + Compile the regular expression PATTERN, whose length is LENGTH. + SYNTAX indicate regular expression's syntax. */ + +static reg_errcode_t +re_compile_internal (regex_t *preg, const char * pattern, size_t length, + reg_syntax_t syntax) +{ + reg_errcode_t err = REG_NOERROR; + re_dfa_t *dfa; + re_string_t regexp; + + /* Initialize the pattern buffer. */ + preg->fastmap_accurate = 0; + preg->syntax = syntax; + preg->not_bol = preg->not_eol = 0; + preg->used = 0; + preg->re_nsub = 0; + preg->can_be_null = 0; + preg->regs_allocated = REGS_UNALLOCATED; + + /* Initialize the dfa. */ + dfa = preg->buffer; + if (BE (preg->allocated < sizeof (re_dfa_t), 0)) + { + /* If zero allocated, but buffer is non-null, try to realloc + enough space. This loses if buffer's address is bogus, but + that is the user's responsibility. If ->buffer is NULL this + is a simple allocation. */ + dfa = re_realloc (preg->buffer, re_dfa_t, 1); + if (dfa == NULL) + return REG_ESPACE; + preg->allocated = sizeof (re_dfa_t); + preg->buffer = dfa; + } + preg->used = sizeof (re_dfa_t); + + err = init_dfa (dfa, length); + if (BE (err != REG_NOERROR, 0)) + { + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } +#ifdef DEBUG + /* Note: length+1 will not overflow since it is checked in init_dfa. */ + dfa->re_str = re_malloc (char, length + 1); + strncpy (dfa->re_str, pattern, length + 1); +#endif + + __libc_lock_init (dfa->lock); + + err = re_string_construct (®exp, pattern, length, preg->translate, + (syntax & RE_ICASE) != 0, dfa); + if (BE (err != REG_NOERROR, 0)) + { + re_compile_internal_free_return: + free_workarea_compile (preg); + re_string_destruct (®exp); + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } + + /* Parse the regular expression, and build a structure tree. */ + preg->re_nsub = 0; + dfa->str_tree = parse (®exp, preg, syntax, &err); + if (BE (dfa->str_tree == NULL, 0)) + goto re_compile_internal_free_return; + + /* Analyze the tree and create the nfa. */ + err = analyze (preg); + if (BE (err != REG_NOERROR, 0)) + goto re_compile_internal_free_return; + +#ifdef RE_ENABLE_I18N + /* If possible, do searching in single byte encoding to speed things up. */ + if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) + optimize_utf8 (dfa); +#endif + + /* Then create the initial state of the dfa. */ + err = create_initial_state (dfa); + + /* Release work areas. */ + free_workarea_compile (preg); + re_string_destruct (®exp); + + if (BE (err != REG_NOERROR, 0)) + { + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + } + + return err; +} + +/* Initialize DFA. We use the length of the regular expression PAT_LEN + as the initial length of some arrays. */ + +static reg_errcode_t +init_dfa (re_dfa_t *dfa, size_t pat_len) +{ + __re_size_t table_size; +#ifndef _LIBC + const char *codeset_name; +#endif +#ifdef RE_ENABLE_I18N + size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); +#else + size_t max_i18n_object_size = 0; +#endif + size_t max_object_size = + MAX (sizeof (struct re_state_table_entry), + MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + MAX (sizeof (regmatch_t), + max_i18n_object_size)))); + + memset (dfa, '\0', sizeof (re_dfa_t)); + + /* Force allocation of str_tree_storage the first time. */ + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + + /* Avoid overflows. The extra "/ 2" is for the table_size doubling + calculation below, and for similar doubling calculations + elsewhere. And it's <= rather than <, because some of the + doubling calculations add 1 afterwards. */ + if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 <= pat_len, 0)) + return REG_ESPACE; + + dfa->nodes_alloc = pat_len + 1; + dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); + + /* table_size = 2 ^ ceil(log pat_len) */ + for (table_size = 1; ; table_size <<= 1) + if (table_size > pat_len) + break; + + dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); + dfa->state_hash_mask = table_size - 1; + + dfa->mb_cur_max = MB_CUR_MAX; +#ifdef _LIBC + if (dfa->mb_cur_max == 6 + && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) + dfa->is_utf8 = 1; + dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) + != 0); +#else + codeset_name = nl_langinfo (CODESET); + if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') + && (codeset_name[1] == 'T' || codeset_name[1] == 't') + && (codeset_name[2] == 'F' || codeset_name[2] == 'f') + && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) + dfa->is_utf8 = 1; + + /* We check exhaustively in the loop below if this charset is a + superset of ASCII. */ + dfa->map_notascii = 0; +#endif + +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + if (dfa->is_utf8) + dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; + else + { + int i, j, ch; + + dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + if (BE (dfa->sb_char == NULL, 0)) + return REG_ESPACE; + + /* Set the bits corresponding to single byte chars. */ + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + { + wint_t wch = __btowc (ch); + if (wch != WEOF) + dfa->sb_char[i] |= (bitset_word_t) 1 << j; +# ifndef _LIBC + if (isascii (ch) && wch != ch) + dfa->map_notascii = 1; +# endif + } + } + } +#endif + + if (BE (dfa->nodes == NULL || dfa->state_table == NULL, 0)) + return REG_ESPACE; + return REG_NOERROR; +} + +/* Initialize WORD_CHAR table, which indicate which character is + "word". In this case "word" means that it is the word construction + character used by some operators like "\<", "\>", etc. */ + +static void +internal_function +init_word_char (re_dfa_t *dfa) +{ + int i = 0; + int j; + int ch = 0; + dfa->word_ops_used = 1; + if (BE (dfa->map_notascii == 0, 1)) + { + bitset_word_t bits0 = 0x00000000; + bitset_word_t bits1 = 0x03ff0000; + bitset_word_t bits2 = 0x87fffffe; + bitset_word_t bits3 = 0x07fffffe; + if (BITSET_WORD_BITS == 64) + { + dfa->word_char[0] = bits1 << 31 << 1 | bits0; + dfa->word_char[1] = bits3 << 31 << 1 | bits2; + i = 2; + } + else if (BITSET_WORD_BITS == 32) + { + dfa->word_char[0] = bits0; + dfa->word_char[1] = bits1; + dfa->word_char[2] = bits2; + dfa->word_char[3] = bits3; + i = 4; + } + else + goto general_case; + ch = 128; + + if (BE (dfa->is_utf8, 1)) + { + memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); + return; + } + } + + general_case: + for (; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (isalnum (ch) || ch == '_') + dfa->word_char[i] |= (bitset_word_t) 1 << j; +} + +/* Free the work area which are only used while compiling. */ + +static void +free_workarea_compile (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_storage_t *storage, *next; + for (storage = dfa->str_tree_storage; storage; storage = next) + { + next = storage->next; + re_free (storage); + } + dfa->str_tree_storage = NULL; + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + dfa->str_tree = NULL; + re_free (dfa->org_indices); + dfa->org_indices = NULL; +} + +/* Create initial states for all contexts. */ + +static reg_errcode_t +create_initial_state (re_dfa_t *dfa) +{ + Idx first, i; + reg_errcode_t err; + re_node_set init_nodes; + + /* Initial states have the epsilon closure of the node which is + the first node of the regular expression. */ + first = dfa->str_tree->first->node_idx; + dfa->init_node = first; + err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* The back-references which are in initial states can epsilon transit, + since in this case all of the subexpressions can be null. + Then we add epsilon closures of the nodes which are the next nodes of + the back-references. */ + if (dfa->nbackref > 0) + for (i = 0; i < init_nodes.nelem; ++i) + { + Idx node_idx = init_nodes.elems[i]; + re_token_type_t type = dfa->nodes[node_idx].type; + + Idx clexp_idx; + if (type != OP_BACK_REF) + continue; + for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) + { + re_token_t *clexp_node; + clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; + if (clexp_node->type == OP_CLOSE_SUBEXP + && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) + break; + } + if (clexp_idx == init_nodes.nelem) + continue; + + if (type == OP_BACK_REF) + { + Idx dest_idx = dfa->edests[node_idx].elems[0]; + if (!re_node_set_contains (&init_nodes, dest_idx)) + { + reg_errcode_t merge_err + = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); + if (merge_err != REG_NOERROR) + return merge_err; + i = 0; + } + } + } + + /* It must be the first time to invoke acquire_state. */ + dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); + /* We don't check ERR here, since the initial state must not be NULL. */ + if (BE (dfa->init_state == NULL, 0)) + return err; + if (dfa->init_state->has_constraint) + { + dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_WORD); + dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_NEWLINE); + dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, + &init_nodes, + CONTEXT_NEWLINE + | CONTEXT_BEGBUF); + if (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL, 0)) + return err; + } + else + dfa->init_state_word = dfa->init_state_nl + = dfa->init_state_begbuf = dfa->init_state; + + re_node_set_free (&init_nodes); + return REG_NOERROR; +} + +#ifdef RE_ENABLE_I18N +/* If it is possible to do searching in single byte encoding instead of UTF-8 + to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change + DFA nodes where needed. */ + +static void +optimize_utf8 (re_dfa_t *dfa) +{ + Idx node; + int i; + bool mb_chars = false; + bool has_period = false; + + for (node = 0; node < dfa->nodes_len; ++node) + switch (dfa->nodes[node].type) + { + case CHARACTER: + if (dfa->nodes[node].opr.c >= ASCII_CHARS) + mb_chars = true; + break; + case ANCHOR: + switch (dfa->nodes[node].opr.ctx_type) + { + case LINE_FIRST: + case LINE_LAST: + case BUF_FIRST: + case BUF_LAST: + break; + default: + /* Word anchors etc. cannot be handled. It's okay to test + opr.ctx_type since constraints (for all DFA nodes) are + created by ORing one or more opr.ctx_type values. */ + return; + } + break; + case OP_PERIOD: + has_period = true; + break; + case OP_BACK_REF: + case OP_ALT: + case END_OF_RE: + case OP_DUP_ASTERISK: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + break; + case COMPLEX_BRACKET: + return; + case SIMPLE_BRACKET: + /* Just double check. */ + { + int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); + for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) + { + if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) + return; + rshift = 0; + } + } + break; + default: + break; + } + + if (mb_chars || has_period) + for (node = 0; node < dfa->nodes_len; ++node) + { + if (dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].opr.c >= ASCII_CHARS) + dfa->nodes[node].mb_partial = 0; + else if (dfa->nodes[node].type == OP_PERIOD) + dfa->nodes[node].type = OP_UTF8_PERIOD; + } + + /* The search can be in single byte locale. */ + dfa->mb_cur_max = 1; + dfa->is_utf8 = 0; + dfa->has_mb_node = dfa->nbackref > 0 || has_period; +} +#endif + +/* Analyze the structure tree, and calculate "first", "next", "edest", + "eclosure", and "inveclosure". */ + +static reg_errcode_t +analyze (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + reg_errcode_t ret; + + /* Allocate arrays. */ + dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); + dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); + dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); + dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); + if (BE (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL + || dfa->eclosures == NULL, 0)) + return REG_ESPACE; + + dfa->subexp_map = re_malloc (Idx, preg->re_nsub); + if (dfa->subexp_map != NULL) + { + Idx i; + for (i = 0; i < preg->re_nsub; i++) + dfa->subexp_map[i] = i; + preorder (dfa->str_tree, optimize_subexps, dfa); + for (i = 0; i < preg->re_nsub; i++) + if (dfa->subexp_map[i] != i) + break; + if (i == preg->re_nsub) + { + free (dfa->subexp_map); + dfa->subexp_map = NULL; + } + } + + ret = postorder (dfa->str_tree, lower_subexps, preg); + if (BE (ret != REG_NOERROR, 0)) + return ret; + ret = postorder (dfa->str_tree, calc_first, dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + preorder (dfa->str_tree, calc_next, dfa); + ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + ret = calc_eclosure (dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + + /* We only need this during the prune_impossible_nodes pass in regexec.c; + skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ + if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) + || dfa->nbackref) + { + dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); + if (BE (dfa->inveclosures == NULL, 0)) + return REG_ESPACE; + ret = calc_inveclosure (dfa); + } + + return ret; +} + +/* Our parse trees are very unbalanced, so we cannot use a stack to + implement parse tree visits. Instead, we use parent pointers and + some hairy code in these two functions. */ +static reg_errcode_t +postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node, *prev; + + for (node = root; ; ) + { + /* Descend down the tree, preferably to the left (or to the right + if that's the only child). */ + while (node->left || node->right) + if (node->left) + node = node->left; + else + node = node->right; + + do + { + reg_errcode_t err = fn (extra, node); + if (BE (err != REG_NOERROR, 0)) + return err; + if (node->parent == NULL) + return REG_NOERROR; + prev = node; + node = node->parent; + } + /* Go up while we have a node that is reached from the right. */ + while (node->right == prev || node->right == NULL); + node = node->right; + } +} + +static reg_errcode_t +preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node; + + for (node = root; ; ) + { + reg_errcode_t err = fn (extra, node); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* Go to the left node, or up and to the right. */ + if (node->left) + node = node->left; + else + { + bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + if (!node) + return REG_NOERROR; + } + node = node->right; + } + } +} + +/* Optimization pass: if a SUBEXP is entirely contained, strip it and tell + re_search_internal to map the inner one's opr.idx to this one's. Adjust + backreferences as well. Requires a preorder visit. */ +static reg_errcode_t +optimize_subexps (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + + if (node->token.type == OP_BACK_REF && dfa->subexp_map) + { + int idx = node->token.opr.idx; + node->token.opr.idx = dfa->subexp_map[idx]; + dfa->used_bkref_map |= 1 << node->token.opr.idx; + } + + else if (node->token.type == SUBEXP + && node->left && node->left->token.type == SUBEXP) + { + Idx other_idx = node->left->token.opr.idx; + + node->left = node->left->left; + if (node->left) + node->left->parent = node; + + dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; + if (other_idx < BITSET_WORD_BITS) + dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); + } + + return REG_NOERROR; +} + +/* Lowering pass: Turn each SUBEXP node into the appropriate concatenation + of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ +static reg_errcode_t +lower_subexps (void *extra, bin_tree_t *node) +{ + regex_t *preg = (regex_t *) extra; + reg_errcode_t err = REG_NOERROR; + + if (node->left && node->left->token.type == SUBEXP) + { + node->left = lower_subexp (&err, preg, node->left); + if (node->left) + node->left->parent = node; + } + if (node->right && node->right->token.type == SUBEXP) + { + node->right = lower_subexp (&err, preg, node->right); + if (node->right) + node->right->parent = node; + } + + return err; +} + +static bin_tree_t * +lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *body = node->left; + bin_tree_t *op, *cls, *tree1, *tree; + + if (preg->no_sub + /* We do not optimize empty subexpressions, because otherwise we may + have bad CONCAT nodes with NULL children. This is obviously not + very common, so we do not lose much. An example that triggers + this case is the sed "script" /\(\)/x. */ + && node->left != NULL + && (node->token.opr.idx >= BITSET_WORD_BITS + || !(dfa->used_bkref_map + & ((bitset_word_t) 1 << node->token.opr.idx)))) + return node->left; + + /* Convert the SUBEXP node to the concatenation of an + OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ + op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); + cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); + tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; + tree = create_tree (dfa, op, tree1, CONCAT); + if (BE (tree == NULL || tree1 == NULL || op == NULL || cls == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + + op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; + op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; + return tree; +} + +/* Pass 1 in building the NFA: compute FIRST and create unlinked automaton + nodes. Requires a postorder visit. */ +static reg_errcode_t +calc_first (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + if (node->token.type == CONCAT) + { + node->first = node->left->first; + node->node_idx = node->left->node_idx; + } + else + { + node->first = node; + node->node_idx = re_dfa_add_node (dfa, node->token); + if (BE (node->node_idx == REG_MISSING, 0)) + return REG_ESPACE; + if (node->token.type == ANCHOR) + dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; + } + return REG_NOERROR; +} + +/* Pass 2: compute NEXT on the tree. Preorder visit. */ +static reg_errcode_t +calc_next (void *extra, bin_tree_t *node) +{ + switch (node->token.type) + { + case OP_DUP_ASTERISK: + node->left->next = node; + break; + case CONCAT: + node->left->next = node->right->first; + node->right->next = node->next; + break; + default: + if (node->left) + node->left->next = node->next; + if (node->right) + node->right->next = node->next; + break; + } + return REG_NOERROR; +} + +/* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ +static reg_errcode_t +link_nfa_nodes (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + Idx idx = node->node_idx; + reg_errcode_t err = REG_NOERROR; + + switch (node->token.type) + { + case CONCAT: + break; + + case END_OF_RE: + assert (node->next == NULL); + break; + + case OP_DUP_ASTERISK: + case OP_ALT: + { + Idx left, right; + dfa->has_plural_match = 1; + if (node->left != NULL) + left = node->left->first->node_idx; + else + left = node->next->node_idx; + if (node->right != NULL) + right = node->right->first->node_idx; + else + right = node->next->node_idx; + assert (REG_VALID_INDEX (left)); + assert (REG_VALID_INDEX (right)); + err = re_node_set_init_2 (dfa->edests + idx, left, right); + } + break; + + case ANCHOR: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); + break; + + case OP_BACK_REF: + dfa->nexts[idx] = node->next->node_idx; + if (node->token.type == OP_BACK_REF) + err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); + break; + + default: + assert (!IS_EPSILON_NODE (node->token.type)); + dfa->nexts[idx] = node->next->node_idx; + break; + } + + return err; +} + +/* Duplicate the epsilon closure of the node ROOT_NODE. + Note that duplicated nodes have constraint INIT_CONSTRAINT in addition + to their own constraint. */ + +static reg_errcode_t +internal_function +duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, + Idx root_node, unsigned int init_constraint) +{ + Idx org_node, clone_node; + bool ok; + unsigned int constraint = init_constraint; + for (org_node = top_org_node, clone_node = top_clone_node;;) + { + Idx org_dest, clone_dest; + if (dfa->nodes[org_node].type == OP_BACK_REF) + { + /* If the back reference epsilon-transit, its destination must + also have the constraint. Then duplicate the epsilon closure + of the destination of the back reference, and store it in + edests of the back reference. */ + org_dest = dfa->nexts[org_node]; + re_node_set_empty (dfa->edests + clone_node); + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + dfa->nexts[clone_node] = dfa->nexts[org_node]; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + else if (dfa->edests[org_node].nelem == 0) + { + /* In case of the node can't epsilon-transit, don't duplicate the + destination and store the original destination as the + destination of the node. */ + dfa->nexts[clone_node] = dfa->nexts[org_node]; + break; + } + else if (dfa->edests[org_node].nelem == 1) + { + /* In case of the node can epsilon-transit, and it has only one + destination. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + /* If the node is root_node itself, it means the epsilon closure + has a loop. Then tie it to the destination of the root_node. */ + if (org_node == root_node && clone_node != org_node) + { + ok = re_node_set_insert (dfa->edests + clone_node, org_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + break; + } + /* In case the node has another constraint, append it. */ + constraint |= dfa->nodes[org_node].constraint; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + else /* dfa->edests[org_node].nelem == 2 */ + { + /* In case of the node can epsilon-transit, and it has two + destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + /* Search for a duplicated node which satisfies the constraint. */ + clone_dest = search_duplicated_node (dfa, org_dest, constraint); + if (clone_dest == REG_MISSING) + { + /* There is no such duplicated node, create a new one. */ + reg_errcode_t err; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + err = duplicate_node_closure (dfa, org_dest, clone_dest, + root_node, constraint); + if (BE (err != REG_NOERROR, 0)) + return err; + } + else + { + /* There is a duplicated node which satisfies the constraint, + use it to avoid infinite loop. */ + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + + org_dest = dfa->edests[org_node].elems[1]; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + org_node = org_dest; + clone_node = clone_dest; + } + return REG_NOERROR; +} + +/* Search for a node which is duplicated from the node ORG_NODE, and + satisfies the constraint CONSTRAINT. */ + +static Idx +search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint) +{ + Idx idx; + for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) + { + if (org_node == dfa->org_indices[idx] + && constraint == dfa->nodes[idx].constraint) + return idx; /* Found. */ + } + return REG_MISSING; /* Not found. */ +} + +/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. + Return the index of the new node, or REG_MISSING if insufficient storage is + available. */ + +static Idx +duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) +{ + Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); + if (BE (dup_idx != REG_MISSING, 1)) + { + dfa->nodes[dup_idx].constraint = constraint; + dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; + dfa->nodes[dup_idx].duplicated = 1; + + /* Store the index of the original node. */ + dfa->org_indices[dup_idx] = org_idx; + } + return dup_idx; +} + +static reg_errcode_t +calc_inveclosure (re_dfa_t *dfa) +{ + Idx src, idx; + bool ok; + for (idx = 0; idx < dfa->nodes_len; ++idx) + re_node_set_init_empty (dfa->inveclosures + idx); + + for (src = 0; src < dfa->nodes_len; ++src) + { + Idx *elems = dfa->eclosures[src].elems; + for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) + { + ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); + if (BE (! ok, 0)) + return REG_ESPACE; + } + } + + return REG_NOERROR; +} + +/* Calculate "eclosure" for all the node in DFA. */ + +static reg_errcode_t +calc_eclosure (re_dfa_t *dfa) +{ + Idx node_idx; + bool incomplete; +#ifdef DEBUG + assert (dfa->nodes_len > 0); +#endif + incomplete = false; + /* For each nodes, calculate epsilon closure. */ + for (node_idx = 0; ; ++node_idx) + { + reg_errcode_t err; + re_node_set eclosure_elem; + if (node_idx == dfa->nodes_len) + { + if (!incomplete) + break; + incomplete = false; + node_idx = 0; + } + +#ifdef DEBUG + assert (dfa->eclosures[node_idx].nelem != REG_MISSING); +#endif + + /* If we have already calculated, skip it. */ + if (dfa->eclosures[node_idx].nelem != 0) + continue; + /* Calculate epsilon closure of 'node_idx'. */ + err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); + if (BE (err != REG_NOERROR, 0)) + return err; + + if (dfa->eclosures[node_idx].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + return REG_NOERROR; +} + +/* Calculate epsilon closure of NODE. */ + +static reg_errcode_t +calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) +{ + reg_errcode_t err; + Idx i; + re_node_set eclosure; + bool ok; + bool incomplete = false; + err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* This indicates that we are calculating this node now. + We reference this value to avoid infinite loop. */ + dfa->eclosures[node].nelem = REG_MISSING; + + /* If the current node has constraints, duplicate all nodes + since they must inherit the constraints. */ + if (dfa->nodes[node].constraint + && dfa->edests[node].nelem + && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) + { + err = duplicate_node_closure (dfa, node, node, node, + dfa->nodes[node].constraint); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + /* Expand each epsilon destination nodes. */ + if (IS_EPSILON_NODE(dfa->nodes[node].type)) + for (i = 0; i < dfa->edests[node].nelem; ++i) + { + re_node_set eclosure_elem; + Idx edest = dfa->edests[node].elems[i]; + /* If calculating the epsilon closure of 'edest' is in progress, + return intermediate result. */ + if (dfa->eclosures[edest].nelem == REG_MISSING) + { + incomplete = true; + continue; + } + /* If we haven't calculated the epsilon closure of 'edest' yet, + calculate now. Otherwise use calculated epsilon closure. */ + if (dfa->eclosures[edest].nelem == 0) + { + err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); + if (BE (err != REG_NOERROR, 0)) + return err; + } + else + eclosure_elem = dfa->eclosures[edest]; + /* Merge the epsilon closure of 'edest'. */ + err = re_node_set_merge (&eclosure, &eclosure_elem); + if (BE (err != REG_NOERROR, 0)) + return err; + /* If the epsilon closure of 'edest' is incomplete, + the epsilon closure of this node is also incomplete. */ + if (dfa->eclosures[edest].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + + /* An epsilon closure includes itself. */ + ok = re_node_set_insert (&eclosure, node); + if (BE (! ok, 0)) + return REG_ESPACE; + if (incomplete && !root) + dfa->eclosures[node].nelem = 0; + else + dfa->eclosures[node] = eclosure; + *new_set = eclosure; + return REG_NOERROR; +} + +/* Functions for token which are used in the parser. */ + +/* Fetch a token from INPUT. + We must not use this function inside bracket expressions. */ + +static void +internal_function +fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) +{ + re_string_skip_bytes (input, peek_token (result, input, syntax)); +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function inside bracket expressions. */ + +static int +internal_function +peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + + c = re_string_peek_byte (input, 0); + token->opr.c = c; + + token->word_char = 0; +#ifdef RE_ENABLE_I18N + token->mb_partial = 0; + if (input->mb_cur_max > 1 && + !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + token->mb_partial = 1; + return 1; + } +#endif + if (c == '\\') + { + unsigned char c2; + if (re_string_cur_idx (input) + 1 >= re_string_length (input)) + { + token->type = BACK_SLASH; + return 1; + } + + c2 = re_string_peek_byte_case (input, 1); + token->opr.c = c2; + token->type = CHARACTER; +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, + re_string_cur_idx (input) + 1); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else +#endif + token->word_char = IS_WORD_CHAR (c2) != 0; + + switch (c2) + { + case '|': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + if (!(syntax & RE_NO_BK_REFS)) + { + token->type = OP_BACK_REF; + token->opr.idx = c2 - '1'; + } + break; + case '<': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_FIRST; + } + break; + case '>': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_LAST; + } + break; + case 'b': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_DELIM; + } + break; + case 'B': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = NOT_WORD_DELIM; + } + break; + case 'w': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_WORD; + break; + case 'W': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTWORD; + break; + case 's': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_SPACE; + break; + case 'S': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTSPACE; + break; + case '`': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_FIRST; + } + break; + case '\'': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_LAST; + } + break; + case '(': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_CLOSE_SUBEXP; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_CLOSE_DUP_NUM; + break; + default: + break; + } + return 2; + } + + token->type = CHARACTER; +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else +#endif + token->word_char = IS_WORD_CHAR (token->opr.c); + + switch (c) + { + case '\n': + if (syntax & RE_NEWLINE_ALT) + token->type = OP_ALT; + break; + case '|': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '*': + token->type = OP_DUP_ASTERISK; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_CLOSE_DUP_NUM; + break; + case '(': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_CLOSE_SUBEXP; + break; + case '[': + token->type = OP_OPEN_BRACKET; + break; + case '.': + token->type = OP_PERIOD; + break; + case '^': + if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && + re_string_cur_idx (input) != 0) + { + char prev = re_string_peek_byte (input, -1); + if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_FIRST; + break; + case '$': + if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && + re_string_cur_idx (input) + 1 != re_string_length (input)) + { + re_token_t next; + re_string_skip_bytes (input, 1); + peek_token (&next, input, syntax); + re_string_skip_bytes (input, -1); + if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_LAST; + break; + default: + break; + } + return 1; +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function out of bracket expressions. */ + +static int +internal_function +peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + c = re_string_peek_byte (input, 0); + token->opr.c = c; + +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1 && + !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + return 1; + } +#endif /* RE_ENABLE_I18N */ + + if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) + && re_string_cur_idx (input) + 1 < re_string_length (input)) + { + /* In this case, '\' escape a character. */ + unsigned char c2; + re_string_skip_bytes (input, 1); + c2 = re_string_peek_byte (input, 0); + token->opr.c = c2; + token->type = CHARACTER; + return 1; + } + if (c == '[') /* '[' is a special char in a bracket exps. */ + { + unsigned char c2; + int token_len; + if (re_string_cur_idx (input) + 1 < re_string_length (input)) + c2 = re_string_peek_byte (input, 1); + else + c2 = 0; + token->opr.c = c2; + token_len = 2; + switch (c2) + { + case '.': + token->type = OP_OPEN_COLL_ELEM; + break; + case '=': + token->type = OP_OPEN_EQUIV_CLASS; + break; + case ':': + if (syntax & RE_CHAR_CLASSES) + { + token->type = OP_OPEN_CHAR_CLASS; + break; + } + /* else fall through. */ + default: + token->type = CHARACTER; + token->opr.c = c; + token_len = 1; + break; + } + return token_len; + } + switch (c) + { + case '-': + token->type = OP_CHARSET_RANGE; + break; + case ']': + token->type = OP_CLOSE_BRACKET; + break; + case '^': + token->type = OP_NON_MATCH_LIST; + break; + default: + token->type = CHARACTER; + } + return 1; +} + +/* Functions for parser. */ + +/* Entry point of the parser. + Parse the regular expression REGEXP and return the structure tree. + If an error occurs, ERR is set by error code, and return NULL. + This function build the following tree, from regular expression : + CAT + / \ + / \ + EOR + + CAT means concatenation. + EOR means end of regular expression. */ + +static bin_tree_t * +parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, + reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree, *eor, *root; + re_token_t current_token; + dfa->syntax = syntax; + fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); + tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + eor = create_tree (dfa, NULL, NULL, END_OF_RE); + if (tree != NULL) + root = create_tree (dfa, tree, eor, CONCAT); + else + root = eor; + if (BE (eor == NULL || root == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + return root; +} + +/* This function build the following tree, from regular expression + |: + ALT + / \ + / \ + + + ALT means alternative, which represents the operator '|'. */ + +static bin_tree_t * +parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree, *branch = NULL; + tree = parse_branch (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + + while (token->type == OP_ALT) + { + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + if (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + branch = parse_branch (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && branch == NULL, 0)) + return NULL; + } + else + branch = NULL; + tree = create_tree (dfa, tree, branch, OP_ALT); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + return tree; +} + +/* This function build the following tree, from regular expression + : + CAT + / \ + / \ + + + CAT means concatenation. */ + +static bin_tree_t * +parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + bin_tree_t *tree, *expr; + re_dfa_t *dfa = preg->buffer; + tree = parse_expression (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + + while (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + expr = parse_expression (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && expr == NULL, 0)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + if (tree != NULL && expr != NULL) + { + bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); + if (newtree == NULL) + { + postorder (expr, free_tree, NULL); + postorder (tree, free_tree, NULL); + *err = REG_ESPACE; + return NULL; + } + tree = newtree; + } + else if (tree == NULL) + tree = expr; + /* Otherwise expr == NULL, we don't need to create new tree. */ + } + return tree; +} + +/* This function build the following tree, from regular expression a*: + * + | + a +*/ + +static bin_tree_t * +parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree; + switch (token->type) + { + case CHARACTER: + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + while (!re_string_eoi (regexp) + && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) + { + bin_tree_t *mbc_remain; + fetch_token (token, regexp, syntax); + mbc_remain = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree, mbc_remain, CONCAT); + if (BE (mbc_remain == NULL || tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + } +#endif + break; + case OP_OPEN_SUBEXP: + tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_OPEN_BRACKET: + tree = parse_bracket_exp (regexp, dfa, token, syntax, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_BACK_REF: + if (!BE (dfa->completed_bkref_map & (1 << token->opr.idx), 1)) + { + *err = REG_ESUBREG; + return NULL; + } + dfa->used_bkref_map |= 1 << token->opr.idx; + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + ++dfa->nbackref; + dfa->has_mb_node = 1; + break; + case OP_OPEN_DUP_NUM: + if (syntax & RE_CONTEXT_INVALID_DUP) + { + *err = REG_BADRPT; + return NULL; + } + /* FALLTHROUGH */ + case OP_DUP_ASTERISK: + case OP_DUP_PLUS: + case OP_DUP_QUESTION: + if (syntax & RE_CONTEXT_INVALID_OPS) + { + *err = REG_BADRPT; + return NULL; + } + else if (syntax & RE_CONTEXT_INDEP_OPS) + { + fetch_token (token, regexp, syntax); + return parse_expression (regexp, preg, token, syntax, nest, err); + } + /* else fall through */ + case OP_CLOSE_SUBEXP: + if ((token->type == OP_CLOSE_SUBEXP) && + !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) + { + *err = REG_ERPAREN; + return NULL; + } + /* else fall through */ + case OP_CLOSE_DUP_NUM: + /* We treat it as a normal character. */ + + /* Then we can these characters as normal characters. */ + token->type = CHARACTER; + /* mb_partial and word_char bits should be initialized already + by peek_token. */ + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + break; + case ANCHOR: + if ((token->opr.ctx_type + & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) + && dfa->word_ops_used == 0) + init_word_char (dfa); + if (token->opr.ctx_type == WORD_DELIM + || token->opr.ctx_type == NOT_WORD_DELIM) + { + bin_tree_t *tree_first, *tree_last; + if (token->opr.ctx_type == WORD_DELIM) + { + token->opr.ctx_type = WORD_FIRST; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = WORD_LAST; + } + else + { + token->opr.ctx_type = INSIDE_WORD; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = INSIDE_NOTWORD; + } + tree_last = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree_first, tree_last, OP_ALT); + if (BE (tree_first == NULL || tree_last == NULL || tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + else + { + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + /* We must return here, since ANCHORs can't be followed + by repetition operators. + eg. RE"^*" is invalid or "", + it must not be "". */ + fetch_token (token, regexp, syntax); + return tree; + case OP_PERIOD: + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + if (dfa->mb_cur_max > 1) + dfa->has_mb_node = 1; + break; + case OP_WORD: + case OP_NOTWORD: + tree = build_charclass_op (dfa, regexp->trans, + "alnum", + "_", + token->type == OP_NOTWORD, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_SPACE: + case OP_NOTSPACE: + tree = build_charclass_op (dfa, regexp->trans, + "space", + "", + token->type == OP_NOTSPACE, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_ALT: + case END_OF_RE: + return NULL; + case BACK_SLASH: + *err = REG_EESCAPE; + return NULL; + default: + /* Must not happen? */ +#ifdef DEBUG + assert (0); +#endif + return NULL; + } + fetch_token (token, regexp, syntax); + + while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS + || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) + { + tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + /* In BRE consecutive duplications are not allowed. */ + if ((syntax & RE_CONTEXT_INVALID_DUP) + && (token->type == OP_DUP_ASTERISK + || token->type == OP_OPEN_DUP_NUM)) + { + *err = REG_BADRPT; + return NULL; + } + } + + return tree; +} + +/* This function build the following tree, from regular expression + (): + SUBEXP + | + +*/ + +static bin_tree_t * +parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree; + size_t cur_nsub; + cur_nsub = preg->re_nsub++; + + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + + /* The subexpression may be a null string. */ + if (token->type == OP_CLOSE_SUBEXP) + tree = NULL; + else + { + tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); + if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + *err = REG_EPAREN; + } + if (BE (*err != REG_NOERROR, 0)) + return NULL; + } + + if (cur_nsub <= '9' - '1') + dfa->completed_bkref_map |= 1 << cur_nsub; + + tree = create_tree (dfa, tree, NULL, SUBEXP); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + tree->token.opr.idx = cur_nsub; + return tree; +} + +/* This function parse repetition operators like "*", "+", "{1,3}" etc. */ + +static bin_tree_t * +parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) +{ + bin_tree_t *tree = NULL, *old_tree = NULL; + Idx i, start, end, start_idx = re_string_cur_idx (regexp); + re_token_t start_token = *token; + + if (token->type == OP_OPEN_DUP_NUM) + { + end = 0; + start = fetch_number (regexp, token, syntax); + if (start == REG_MISSING) + { + if (token->type == CHARACTER && token->opr.c == ',') + start = 0; /* We treat "{,m}" as "{0,m}". */ + else + { + *err = REG_BADBR; /* {} is invalid. */ + return NULL; + } + } + if (BE (start != REG_ERROR, 1)) + { + /* We treat "{n}" as "{n,n}". */ + end = ((token->type == OP_CLOSE_DUP_NUM) ? start + : ((token->type == CHARACTER && token->opr.c == ',') + ? fetch_number (regexp, token, syntax) : REG_ERROR)); + } + if (BE (start == REG_ERROR || end == REG_ERROR, 0)) + { + /* Invalid sequence. */ + if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0)) + { + if (token->type == END_OF_RE) + *err = REG_EBRACE; + else + *err = REG_BADBR; + + return NULL; + } + + /* If the syntax bit is set, rollback. */ + re_string_set_index (regexp, start_idx); + *token = start_token; + token->type = CHARACTER; + /* mb_partial and word_char bits should be already initialized by + peek_token. */ + return elem; + } + + if (BE ((end != REG_MISSING && start > end) + || token->type != OP_CLOSE_DUP_NUM, 0)) + { + /* First number greater than second. */ + *err = REG_BADBR; + return NULL; + } + + if (BE (RE_DUP_MAX < (end == REG_MISSING ? start : end), 0)) + { + *err = REG_ESIZE; + return NULL; + } + } + else + { + start = (token->type == OP_DUP_PLUS) ? 1 : 0; + end = (token->type == OP_DUP_QUESTION) ? 1 : REG_MISSING; + } + + fetch_token (token, regexp, syntax); + + if (BE (elem == NULL, 0)) + return NULL; + if (BE (start == 0 && end == 0, 0)) + { + postorder (elem, free_tree, NULL); + return NULL; + } + + /* Extract "{n,m}" to "...{0,}". */ + if (BE (start > 0, 0)) + { + tree = elem; + for (i = 2; i <= start; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (BE (elem == NULL || tree == NULL, 0)) + goto parse_dup_op_espace; + } + + if (start == end) + return tree; + + /* Duplicate ELEM before it is marked optional. */ + elem = duplicate_tree (elem, dfa); + old_tree = tree; + } + else + old_tree = NULL; + + if (elem->token.type == SUBEXP) + { + uintptr_t subidx = elem->token.opr.idx; + postorder (elem, mark_opt_subexp, (void *) subidx); + } + + tree = create_tree (dfa, elem, NULL, + (end == REG_MISSING ? OP_DUP_ASTERISK : OP_ALT)); + if (BE (tree == NULL, 0)) + goto parse_dup_op_espace; + +/* From gnulib's "intprops.h": + True if the arithmetic type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + + /* This loop is actually executed only when end != REG_MISSING, + to rewrite {0,n} as ((...?)?)?... We have + already created the start+1-th copy. */ + if (TYPE_SIGNED (Idx) || end != REG_MISSING) + for (i = start + 2; i <= end; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (BE (elem == NULL || tree == NULL, 0)) + goto parse_dup_op_espace; + + tree = create_tree (dfa, tree, NULL, OP_ALT); + if (BE (tree == NULL, 0)) + goto parse_dup_op_espace; + } + + if (old_tree) + tree = create_tree (dfa, old_tree, tree, CONCAT); + + return tree; + + parse_dup_op_espace: + *err = REG_ESPACE; + return NULL; +} + +/* Size of the names for collating symbol/equivalence_class/character_class. + I'm not sure, but maybe enough. */ +#define BRACKET_NAME_BUF_SIZE 32 + +#ifndef _LIBC + /* Local function for parse_bracket_exp only used in case of NOT _LIBC. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument since we may + update it. */ + +static reg_errcode_t +internal_function +# ifdef RE_ENABLE_I18N +build_range_exp (const reg_syntax_t syntax, + bitset_t sbcset, + re_charset_t *mbcset, + Idx *range_alloc, + const bracket_elem_t *start_elem, + const bracket_elem_t *end_elem) +# else /* not RE_ENABLE_I18N */ +build_range_exp (const reg_syntax_t syntax, + bitset_t sbcset, + const bracket_elem_t *start_elem, + const bracket_elem_t *end_elem) +# endif /* not RE_ENABLE_I18N */ +{ + unsigned int start_ch, end_ch; + /* Equivalence Classes and Character Classes can't be a range start/end. */ + if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, + 0)) + return REG_ERANGE; + + /* We can handle no multi character collating elements without libc + support. */ + if (BE ((start_elem->type == COLL_SYM + && strlen ((char *) start_elem->opr.name) > 1) + || (end_elem->type == COLL_SYM + && strlen ((char *) end_elem->opr.name) > 1), 0)) + return REG_ECOLLATE; + +# ifdef RE_ENABLE_I18N + { + wchar_t wc; + wint_t start_wc; + wint_t end_wc; + + start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch + : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] + : 0)); + end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch + : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] + : 0)); + start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) + ? __btowc (start_ch) : start_elem->opr.wch); + end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) + ? __btowc (end_ch) : end_elem->opr.wch); + if (start_wc == WEOF || end_wc == WEOF) + return REG_ECOLLATE; + else if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_wc > end_wc, 0)) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, for !_LIBC we have no collation elements: if the + character set is single byte, the single byte character set + that we build below suffices. parse_bracket_exp passes + no MBCSET if dfa->mb_cur_max == 1. */ + if (mbcset) + { + /* Check the space of the arrays. */ + if (BE (*range_alloc == mbcset->nranges, 0)) + { + /* There is not enough space, need realloc. */ + wchar_t *new_array_start, *new_array_end; + Idx new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + /* Use realloc since mbcset->range_starts and mbcset->range_ends + are NULL if *range_alloc == 0. */ + new_array_start = re_realloc (mbcset->range_starts, wchar_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, wchar_t, + new_nranges); + + if (BE (new_array_start == NULL || new_array_end == NULL, 0)) + return REG_ESPACE; + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_wc; + mbcset->range_ends[mbcset->nranges++] = end_wc; + } + + /* Build the table for single byte characters. */ + for (wc = 0; wc < SBC_MAX; ++wc) + { + if (start_wc <= wc && wc <= end_wc) + bitset_set (sbcset, wc); + } + } +# else /* not RE_ENABLE_I18N */ + { + unsigned int ch; + start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch + : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] + : 0)); + end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch + : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] + : 0)); + if (start_ch > end_ch) + return REG_ERANGE; + /* Build the table for single byte characters. */ + for (ch = 0; ch < SBC_MAX; ++ch) + if (start_ch <= ch && ch <= end_ch) + bitset_set (sbcset, ch); + } +# endif /* not RE_ENABLE_I18N */ + return REG_NOERROR; +} +#endif /* not _LIBC */ + +#ifndef _LIBC +/* Helper function for parse_bracket_exp only used in case of NOT _LIBC.. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument since we may update it. */ + +static reg_errcode_t +internal_function +# ifdef RE_ENABLE_I18N +build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, + Idx *coll_sym_alloc, const unsigned char *name) +# else /* not RE_ENABLE_I18N */ +build_collating_symbol (bitset_t sbcset, const unsigned char *name) +# endif /* not RE_ENABLE_I18N */ +{ + size_t name_len = strlen ((const char *) name); + if (BE (name_len != 1, 0)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } +} +#endif /* not _LIBC */ + +/* This function parse bracket expression like "[abc]", "[a-c]", + "[[.a-a.]]" etc. */ + +static bin_tree_t * +parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err) +{ +#ifdef _LIBC + const unsigned char *collseqmb; + const char *collseqwc; + uint32_t nrules; + int32_t table_size; + const int32_t *symb_table; + const unsigned char *extra; + + /* Local function for parse_bracket_exp used in _LIBC environment. + Seek the collating symbol entry corresponding to NAME. + Return the index of the symbol in the SYMB_TABLE, + or -1 if not found. */ + + auto inline int32_t + __attribute__ ((always_inline)) + seek_collating_symbol_entry (const unsigned char *name, size_t name_len) + { + int32_t elem; + + for (elem = 0; elem < table_size; elem++) + if (symb_table[2 * elem] != 0) + { + int32_t idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + if (/* Compare the length of the name. */ + name_len == extra[idx] + /* Compare the name. */ + && memcmp (name, &extra[idx + 1], name_len) == 0) + /* Yep, this is the entry. */ + return elem; + } + return -1; + } + + /* Local function for parse_bracket_exp used in _LIBC environment. + Look up the collation sequence value of BR_ELEM. + Return the value if succeeded, UINT_MAX otherwise. */ + + auto inline unsigned int + __attribute__ ((always_inline)) + lookup_collation_sequence_value (bracket_elem_t *br_elem) + { + if (br_elem->type == SB_CHAR) + { + /* + if (MB_CUR_MAX == 1) + */ + if (nrules == 0) + return collseqmb[br_elem->opr.ch]; + else + { + wint_t wc = __btowc (br_elem->opr.ch); + return __collseq_table_lookup (collseqwc, wc); + } + } + else if (br_elem->type == MB_CHAR) + { + if (nrules != 0) + return __collseq_table_lookup (collseqwc, br_elem->opr.wch); + } + else if (br_elem->type == COLL_SYM) + { + size_t sym_name_len = strlen ((char *) br_elem->opr.name); + if (nrules != 0) + { + int32_t elem, idx; + elem = seek_collating_symbol_entry (br_elem->opr.name, + sym_name_len); + if (elem != -1) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + /* Skip the byte sequence of the collating element. */ + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the multibyte collation sequence value. */ + idx += sizeof (unsigned int); + /* Skip the wide char sequence of the collating element. */ + idx += sizeof (unsigned int) * + (1 + *(unsigned int *) (extra + idx)); + /* Return the collation sequence value. */ + return *(unsigned int *) (extra + idx); + } + else if (sym_name_len == 1) + { + /* No valid character. Match it as a single byte + character. */ + return collseqmb[br_elem->opr.name[0]]; + } + } + else if (sym_name_len == 1) + return collseqmb[br_elem->opr.name[0]]; + } + return UINT_MAX; + } + + /* Local function for parse_bracket_exp used in _LIBC environment. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument since we may + update it. */ + + auto inline reg_errcode_t + __attribute__ ((always_inline)) + build_range_exp (bitset_t sbcset, re_charset_t *mbcset, int *range_alloc, + bracket_elem_t *start_elem, bracket_elem_t *end_elem) + { + unsigned int ch; + uint32_t start_collseq; + uint32_t end_collseq; + + /* Equivalence Classes and Character Classes can't be a range + start/end. */ + if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, + 0)) + return REG_ERANGE; + + /* FIXME: Implement rational ranges here, too. */ + start_collseq = lookup_collation_sequence_value (start_elem); + end_collseq = lookup_collation_sequence_value (end_elem); + /* Check start/end collation sequence values. */ + if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0)) + return REG_ECOLLATE; + if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0)) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, if we have no collation elements, and the character set + is single byte, the single byte character set that we + build below suffices. */ + if (nrules > 0 || dfa->mb_cur_max > 1) + { + /* Check the space of the arrays. */ + if (BE (*range_alloc == mbcset->nranges, 0)) + { + /* There is not enough space, need realloc. */ + uint32_t *new_array_start; + uint32_t *new_array_end; + Idx new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + new_array_start = re_realloc (mbcset->range_starts, uint32_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, uint32_t, + new_nranges); + + if (BE (new_array_start == NULL || new_array_end == NULL, 0)) + return REG_ESPACE; + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_collseq; + mbcset->range_ends[mbcset->nranges++] = end_collseq; + } + + /* Build the table for single byte characters. */ + for (ch = 0; ch < SBC_MAX; ch++) + { + uint32_t ch_collseq; + /* + if (MB_CUR_MAX == 1) + */ + if (nrules == 0) + ch_collseq = collseqmb[ch]; + else + ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); + if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) + bitset_set (sbcset, ch); + } + return REG_NOERROR; + } + + /* Local function for parse_bracket_exp used in _LIBC environment. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument since we may update it. */ + + auto inline reg_errcode_t + __attribute__ ((always_inline)) + build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, + Idx *coll_sym_alloc, const unsigned char *name) + { + int32_t elem, idx; + size_t name_len = strlen ((const char *) name); + if (nrules != 0) + { + elem = seek_collating_symbol_entry (name, name_len); + if (elem != -1) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + } + else if (name_len == 1) + { + /* No valid character, treat it as a normal + character. */ + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + else + return REG_ECOLLATE; + + /* Got valid collation sequence, add it as a new entry. */ + /* Check the space of the arrays. */ + if (BE (*coll_sym_alloc == mbcset->ncoll_syms, 0)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->ncoll_syms is 0. */ + Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; + /* Use realloc since mbcset->coll_syms is NULL + if *alloc == 0. */ + int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, + new_coll_sym_alloc); + if (BE (new_coll_syms == NULL, 0)) + return REG_ESPACE; + mbcset->coll_syms = new_coll_syms; + *coll_sym_alloc = new_coll_sym_alloc; + } + mbcset->coll_syms[mbcset->ncoll_syms++] = idx; + return REG_NOERROR; + } + else + { + if (BE (name_len != 1, 0)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + } + } +#endif + + re_token_t br_token; + re_bitset_ptr_t sbcset; +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; + Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; + Idx equiv_class_alloc = 0, char_class_alloc = 0; +#endif /* not RE_ENABLE_I18N */ + bool non_match = false; + bin_tree_t *work_tree; + int token_len; + bool first_round = true; +#ifdef _LIBC + collseqmb = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules) + { + /* + if (MB_CUR_MAX > 1) + */ + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + } +#endif + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); +#ifdef RE_ENABLE_I18N + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); +#endif /* RE_ENABLE_I18N */ +#ifdef RE_ENABLE_I18N + if (BE (sbcset == NULL || mbcset == NULL, 0)) +#else + if (BE (sbcset == NULL, 0)) +#endif /* RE_ENABLE_I18N */ + { + re_free (sbcset); +#ifdef RE_ENABLE_I18N + re_free (mbcset); +#endif + *err = REG_ESPACE; + return NULL; + } + + token_len = peek_token_bracket (token, regexp, syntax); + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_NON_MATCH_LIST) + { +#ifdef RE_ENABLE_I18N + mbcset->non_match = 1; +#endif /* not RE_ENABLE_I18N */ + non_match = true; + if (syntax & RE_HAT_LISTS_NOT_NEWLINE) + bitset_set (sbcset, '\n'); + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + token_len = peek_token_bracket (token, regexp, syntax); + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + } + + /* We treat the first ']' as a normal character. */ + if (token->type == OP_CLOSE_BRACKET) + token->type = CHARACTER; + + while (1) + { + bracket_elem_t start_elem, end_elem; + unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; + unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; + reg_errcode_t ret; + int token_len2 = 0; + bool is_range_exp = false; + re_token_t token2; + + start_elem.opr.name = start_name_buf; + ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, + syntax, first_round); + if (BE (ret != REG_NOERROR, 0)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + first_round = false; + + /* Get information about the next token. We need it in any case. */ + token_len = peek_token_bracket (token, regexp, syntax); + + /* Do not check for ranges if we know they are not allowed. */ + if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) + { + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CHARSET_RANGE) + { + re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ + token_len2 = peek_token_bracket (&token2, regexp, syntax); + if (BE (token2.type == END_OF_RE, 0)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token2.type == OP_CLOSE_BRACKET) + { + /* We treat the last '-' as a normal character. */ + re_string_skip_bytes (regexp, -token_len); + token->type = CHARACTER; + } + else + is_range_exp = true; + } + } + + if (is_range_exp == true) + { + end_elem.opr.name = end_name_buf; + ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, + dfa, syntax, true); + if (BE (ret != REG_NOERROR, 0)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + + token_len = peek_token_bracket (token, regexp, syntax); + +#ifdef _LIBC + *err = build_range_exp (sbcset, mbcset, &range_alloc, + &start_elem, &end_elem); +#else +# ifdef RE_ENABLE_I18N + *err = build_range_exp (syntax, sbcset, + dfa->mb_cur_max > 1 ? mbcset : NULL, + &range_alloc, &start_elem, &end_elem); +# else + *err = build_range_exp (syntax, sbcset, &start_elem, &end_elem); +# endif +#endif /* RE_ENABLE_I18N */ + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + } + else + { + switch (start_elem.type) + { + case SB_CHAR: + bitset_set (sbcset, start_elem.opr.ch); + break; +#ifdef RE_ENABLE_I18N + case MB_CHAR: + /* Check whether the array has enough space. */ + if (BE (mbchar_alloc == mbcset->nmbchars, 0)) + { + wchar_t *new_mbchars; + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nmbchars is 0. */ + mbchar_alloc = 2 * mbcset->nmbchars + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + new_mbchars = re_realloc (mbcset->mbchars, wchar_t, + mbchar_alloc); + if (BE (new_mbchars == NULL, 0)) + goto parse_bracket_exp_espace; + mbcset->mbchars = new_mbchars; + } + mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; + break; +#endif /* RE_ENABLE_I18N */ + case EQUIV_CLASS: + *err = build_equiv_class (sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &equiv_class_alloc, +#endif /* RE_ENABLE_I18N */ + start_elem.opr.name); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + break; + case COLL_SYM: + *err = build_collating_symbol (sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &coll_sym_alloc, +#endif /* RE_ENABLE_I18N */ + start_elem.opr.name); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + break; + case CHAR_CLASS: + *err = build_charclass (regexp->trans, sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &char_class_alloc, +#endif /* RE_ENABLE_I18N */ + (const char *) start_elem.opr.name, + syntax); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + break; + default: + assert (0); + break; + } + } + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CLOSE_BRACKET) + break; + } + + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + +#ifdef RE_ENABLE_I18N + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); + + if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes + || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes + || mbcset->non_match))) + { + bin_tree_t *mbc_tree; + int sbc_idx; + /* Build a tree for complex bracket. */ + dfa->has_mb_node = 1; + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (mbc_tree == NULL, 0)) + goto parse_bracket_exp_espace; + for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) + if (sbcset[sbc_idx]) + break; + /* If there are no bits set in sbcset, there is no point + of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ + if (sbc_idx < BITSET_WORDS) + { + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (work_tree == NULL, 0)) + goto parse_bracket_exp_espace; + + /* Then join them by ALT node. */ + work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); + if (BE (work_tree == NULL, 0)) + goto parse_bracket_exp_espace; + } + else + { + re_free (sbcset); + work_tree = mbc_tree; + } + } + else +#endif /* not RE_ENABLE_I18N */ + { +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (work_tree == NULL, 0)) + goto parse_bracket_exp_espace; + } + return work_tree; + + parse_bracket_exp_espace: + *err = REG_ESPACE; + parse_bracket_exp_free_return: + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + return NULL; +} + +/* Parse an element in the bracket expression. */ + +static reg_errcode_t +parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token, int token_len, re_dfa_t *dfa, + reg_syntax_t syntax, bool accept_hyphen) +{ +#ifdef RE_ENABLE_I18N + int cur_char_size; + cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); + if (cur_char_size > 1) + { + elem->type = MB_CHAR; + elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); + re_string_skip_bytes (regexp, cur_char_size); + return REG_NOERROR; + } +#endif /* RE_ENABLE_I18N */ + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS + || token->type == OP_OPEN_EQUIV_CLASS) + return parse_bracket_symbol (elem, regexp, token); + if (BE (token->type == OP_CHARSET_RANGE, 0) && !accept_hyphen) + { + /* A '-' must only appear as anything but a range indicator before + the closing bracket. Everything else is an error. */ + re_token_t token2; + (void) peek_token_bracket (&token2, regexp, syntax); + if (token2.type != OP_CLOSE_BRACKET) + /* The actual error value is not standardized since this whole + case is undefined. But ERANGE makes good sense. */ + return REG_ERANGE; + } + elem->type = SB_CHAR; + elem->opr.ch = token->opr.c; + return REG_NOERROR; +} + +/* Parse a bracket symbol in the bracket expression. Bracket symbols are + such as [::], [..], and + [==]. */ + +static reg_errcode_t +parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token) +{ + unsigned char ch, delim = token->opr.c; + int i = 0; + if (re_string_eoi(regexp)) + return REG_EBRACK; + for (;; ++i) + { + if (i >= BRACKET_NAME_BUF_SIZE) + return REG_EBRACK; + if (token->type == OP_OPEN_CHAR_CLASS) + ch = re_string_fetch_byte_case (regexp); + else + ch = re_string_fetch_byte (regexp); + if (re_string_eoi(regexp)) + return REG_EBRACK; + if (ch == delim && re_string_peek_byte (regexp, 0) == ']') + break; + elem->opr.name[i] = ch; + } + re_string_skip_bytes (regexp, 1); + elem->opr.name[i] = '\0'; + switch (token->type) + { + case OP_OPEN_COLL_ELEM: + elem->type = COLL_SYM; + break; + case OP_OPEN_EQUIV_CLASS: + elem->type = EQUIV_CLASS; + break; + case OP_OPEN_CHAR_CLASS: + elem->type = CHAR_CLASS; + break; + default: + break; + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the equivalence class which is represented by NAME. + The result are written to MBCSET and SBCSET. + EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, + is a pointer argument since we may update it. */ + +static reg_errcode_t +#ifdef RE_ENABLE_I18N +build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, + Idx *equiv_class_alloc, const unsigned char *name) +#else /* not RE_ENABLE_I18N */ +build_equiv_class (bitset_t sbcset, const unsigned char *name) +#endif /* not RE_ENABLE_I18N */ +{ +#ifdef _LIBC + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + const int32_t *table, *indirect; + const unsigned char *weights, *extra, *cp; + unsigned char char_buf[2]; + int32_t idx1, idx2; + unsigned int ch; + size_t len; + /* This #include defines a local function! */ +# include + /* Calculate the index for equivalence class. */ + cp = name; + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + idx1 = findidx (&cp, -1); + if (BE (idx1 == 0 || *cp != '\0', 0)) + /* This isn't a valid character. */ + return REG_ECOLLATE; + + /* Build single byte matching table for this equivalence class. */ + len = weights[idx1 & 0xffffff]; + for (ch = 0; ch < SBC_MAX; ++ch) + { + char_buf[0] = ch; + cp = char_buf; + idx2 = findidx (&cp, 1); +/* + idx2 = table[ch]; +*/ + if (idx2 == 0) + /* This isn't a valid character. */ + continue; + /* Compare only if the length matches and the collation rule + index is the same. */ + if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24)) + { + int cnt = 0; + + while (cnt <= len && + weights[(idx1 & 0xffffff) + 1 + cnt] + == weights[(idx2 & 0xffffff) + 1 + cnt]) + ++cnt; + + if (cnt > len) + bitset_set (sbcset, ch); + } + } + /* Check whether the array has enough space. */ + if (BE (*equiv_class_alloc == mbcset->nequiv_classes, 0)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nequiv_classes is 0. */ + Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; + /* Use realloc since the array is NULL if *alloc == 0. */ + int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, + int32_t, + new_equiv_class_alloc); + if (BE (new_equiv_classes == NULL, 0)) + return REG_ESPACE; + mbcset->equiv_classes = new_equiv_classes; + *equiv_class_alloc = new_equiv_class_alloc; + } + mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; + } + else +#endif /* _LIBC */ + { + if (BE (strlen ((const char *) name) != 1, 0)) + return REG_ECOLLATE; + bitset_set (sbcset, *name); + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the character class which is represented by NAME. + The result are written to MBCSET and SBCSET. + CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, + is a pointer argument since we may update it. */ + +static reg_errcode_t +#ifdef RE_ENABLE_I18N +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + re_charset_t *mbcset, Idx *char_class_alloc, + const char *class_name, reg_syntax_t syntax) +#else /* not RE_ENABLE_I18N */ +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + const char *class_name, reg_syntax_t syntax) +#endif /* not RE_ENABLE_I18N */ +{ + int i; + const char *name = class_name; + + /* In case of REG_ICASE "upper" and "lower" match the both of + upper and lower cases. */ + if ((syntax & RE_ICASE) + && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) + name = "alpha"; + +#ifdef RE_ENABLE_I18N + /* Check the space of the arrays. */ + if (BE (*char_class_alloc == mbcset->nchar_classes, 0)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nchar_classes is 0. */ + Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, + new_char_class_alloc); + if (BE (new_char_classes == NULL, 0)) + return REG_ESPACE; + mbcset->char_classes = new_char_classes; + *char_class_alloc = new_char_class_alloc; + } + mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); +#endif /* RE_ENABLE_I18N */ + +#define BUILD_CHARCLASS_LOOP(ctype_func) \ + do { \ + if (BE (trans != NULL, 0)) \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, trans[i]); \ + } \ + else \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, i); \ + } \ + } while (0) + + if (strcmp (name, "alnum") == 0) + BUILD_CHARCLASS_LOOP (isalnum); + else if (strcmp (name, "cntrl") == 0) + BUILD_CHARCLASS_LOOP (iscntrl); + else if (strcmp (name, "lower") == 0) + BUILD_CHARCLASS_LOOP (islower); + else if (strcmp (name, "space") == 0) + BUILD_CHARCLASS_LOOP (isspace); + else if (strcmp (name, "alpha") == 0) + BUILD_CHARCLASS_LOOP (isalpha); + else if (strcmp (name, "digit") == 0) + BUILD_CHARCLASS_LOOP (isdigit); + else if (strcmp (name, "print") == 0) + BUILD_CHARCLASS_LOOP (isprint); + else if (strcmp (name, "upper") == 0) + BUILD_CHARCLASS_LOOP (isupper); + else if (strcmp (name, "blank") == 0) + BUILD_CHARCLASS_LOOP (isblank); + else if (strcmp (name, "graph") == 0) + BUILD_CHARCLASS_LOOP (isgraph); + else if (strcmp (name, "punct") == 0) + BUILD_CHARCLASS_LOOP (ispunct); + else if (strcmp (name, "xdigit") == 0) + BUILD_CHARCLASS_LOOP (isxdigit); + else + return REG_ECTYPE; + + return REG_NOERROR; +} + +static bin_tree_t * +build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, + const char *class_name, + const char *extra, bool non_match, + reg_errcode_t *err) +{ + re_bitset_ptr_t sbcset; +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; + Idx alloc = 0; +#endif /* not RE_ENABLE_I18N */ + reg_errcode_t ret; + re_token_t br_token; + bin_tree_t *tree; + + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); +#ifdef RE_ENABLE_I18N + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); +#endif /* RE_ENABLE_I18N */ + +#ifdef RE_ENABLE_I18N + if (BE (sbcset == NULL || mbcset == NULL, 0)) +#else /* not RE_ENABLE_I18N */ + if (BE (sbcset == NULL, 0)) +#endif /* not RE_ENABLE_I18N */ + { + *err = REG_ESPACE; + return NULL; + } + + if (non_match) + { +#ifdef RE_ENABLE_I18N + mbcset->non_match = 1; +#endif /* not RE_ENABLE_I18N */ + } + + /* We don't care the syntax in this case. */ + ret = build_charclass (trans, sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &alloc, +#endif /* RE_ENABLE_I18N */ + class_name, 0); + + if (BE (ret != REG_NOERROR, 0)) + { + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + *err = ret; + return NULL; + } + /* \w match '_' also. */ + for (; *extra; extra++) + bitset_set (sbcset, *extra); + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + +#ifdef RE_ENABLE_I18N + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); +#endif + + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (tree == NULL, 0)) + goto build_word_op_espace; + +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + bin_tree_t *mbc_tree; + /* Build a tree for complex bracket. */ + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + dfa->has_mb_node = 1; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (mbc_tree == NULL, 0)) + goto build_word_op_espace; + /* Then join them by ALT node. */ + tree = create_tree (dfa, tree, mbc_tree, OP_ALT); + if (BE (mbc_tree != NULL, 1)) + return tree; + } + else + { + free_charset (mbcset); + return tree; + } +#else /* not RE_ENABLE_I18N */ + return tree; +#endif /* not RE_ENABLE_I18N */ + + build_word_op_espace: + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + *err = REG_ESPACE; + return NULL; +} + +/* This is intended for the expressions like "a{1,3}". + Fetch a number from 'input', and return the number. + Return REG_MISSING if the number field is empty like "{,1}". + Return RE_DUP_MAX + 1 if the number field is too large. + Return REG_ERROR if an error occurred. */ + +static Idx +fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) +{ + Idx num = REG_MISSING; + unsigned char c; + while (1) + { + fetch_token (token, input, syntax); + c = token->opr.c; + if (BE (token->type == END_OF_RE, 0)) + return REG_ERROR; + if (token->type == OP_CLOSE_DUP_NUM || c == ',') + break; + num = ((token->type != CHARACTER || c < '0' || '9' < c + || num == REG_ERROR) + ? REG_ERROR + : num == REG_MISSING + ? c - '0' + : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); + } + return num; +} + +#ifdef RE_ENABLE_I18N +static void +free_charset (re_charset_t *cset) +{ + re_free (cset->mbchars); +# ifdef _LIBC + re_free (cset->coll_syms); + re_free (cset->equiv_classes); + re_free (cset->range_starts); + re_free (cset->range_ends); +# endif + re_free (cset->char_classes); + re_free (cset); +} +#endif /* RE_ENABLE_I18N */ + +/* Functions for binary tree operation. */ + +/* Create a tree node. */ + +static bin_tree_t * +create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + re_token_type_t type) +{ + re_token_t t; + t.type = type; + return create_token_tree (dfa, left, right, &t); +} + +static bin_tree_t * +create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + const re_token_t *token) +{ + bin_tree_t *tree; + if (BE (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE, 0)) + { + bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); + + if (storage == NULL) + return NULL; + storage->next = dfa->str_tree_storage; + dfa->str_tree_storage = storage; + dfa->str_tree_storage_idx = 0; + } + tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; + + tree->parent = NULL; + tree->left = left; + tree->right = right; + tree->token = *token; + tree->token.duplicated = 0; + tree->token.opt_subexp = 0; + tree->first = NULL; + tree->next = NULL; + tree->node_idx = REG_MISSING; + + if (left != NULL) + left->parent = tree; + if (right != NULL) + right->parent = tree; + return tree; +} + +/* Mark the tree SRC as an optional subexpression. + To be called from preorder or postorder. */ + +static reg_errcode_t +mark_opt_subexp (void *extra, bin_tree_t *node) +{ + Idx idx = (uintptr_t) extra; + if (node->token.type == SUBEXP && node->token.opr.idx == idx) + node->token.opt_subexp = 1; + + return REG_NOERROR; +} + +/* Free the allocated memory inside NODE. */ + +static void +free_token (re_token_t *node) +{ +#ifdef RE_ENABLE_I18N + if (node->type == COMPLEX_BRACKET && node->duplicated == 0) + free_charset (node->opr.mbcset); + else +#endif /* RE_ENABLE_I18N */ + if (node->type == SIMPLE_BRACKET && node->duplicated == 0) + re_free (node->opr.sbcset); +} + +/* Worker function for tree walking. Free the allocated memory inside NODE + and its children. */ + +static reg_errcode_t +free_tree (void *extra, bin_tree_t *node) +{ + free_token (&node->token); + return REG_NOERROR; +} + + +/* Duplicate the node SRC, and return new node. This is a preorder + visit similar to the one implemented by the generic visitor, but + we need more infrastructure to maintain two parallel trees --- so, + it's easier to duplicate. */ + +static bin_tree_t * +duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) +{ + const bin_tree_t *node; + bin_tree_t *dup_root; + bin_tree_t **p_new = &dup_root, *dup_node = root->parent; + + for (node = root; ; ) + { + /* Create a new tree and link it back to the current parent. */ + *p_new = create_token_tree (dfa, NULL, NULL, &node->token); + if (*p_new == NULL) + return NULL; + (*p_new)->parent = dup_node; + (*p_new)->token.duplicated = 1; + dup_node = *p_new; + + /* Go to the left node, or up and to the right. */ + if (node->left) + { + node = node->left; + p_new = &dup_node->left; + } + else + { + const bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + dup_node = dup_node->parent; + if (!node) + return dup_root; + } + node = node->right; + p_new = &dup_node->right; + } + } +} diff --git a/grub-core/gnulib/regex.c b/grub-core/gnulib/regex.c new file mode 100644 index 000000000..5a0332e00 --- /dev/null +++ b/grub-core/gnulib/regex.c @@ -0,0 +1,81 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _LIBC +# include + +# if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ +# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" +# endif +# if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__ +# pragma GCC diagnostic ignored "-Wold-style-definition" +# pragma GCC diagnostic ignored "-Wtype-limits" +# endif +#endif + +/* Make sure no one compiles this code with a C++ compiler. */ +#if defined __cplusplus && defined _LIBC +# error "This is C code, use a C compiler" +#endif + +#ifdef _LIBC +/* We have to keep the namespace clean. */ +# define regfree(preg) __regfree (preg) +# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) +# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) +# define regerror(errcode, preg, errbuf, errbuf_size) \ + __regerror(errcode, preg, errbuf, errbuf_size) +# define re_set_registers(bu, re, nu, st, en) \ + __re_set_registers (bu, re, nu, st, en) +# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ + __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) +# define re_match(bufp, string, size, pos, regs) \ + __re_match (bufp, string, size, pos, regs) +# define re_search(bufp, string, size, startpos, range, regs) \ + __re_search (bufp, string, size, startpos, range, regs) +# define re_compile_pattern(pattern, length, bufp) \ + __re_compile_pattern (pattern, length, bufp) +# define re_set_syntax(syntax) __re_set_syntax (syntax) +# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ + __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) +# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) + +# include "../locale/localeinfo.h" +#endif + +/* On some systems, limits.h sets RE_DUP_MAX to a lower value than + GNU regex allows. Include it before , which correctly + #undefs RE_DUP_MAX and sets it to the right value. */ +#include + +#include +#include "regex_internal.h" + +#include "regex_internal.c" +#include "regcomp.c" +#include "regexec.c" + +/* Binary backward compatibility. */ +#if _LIBC +# include +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) +link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") +int re_max_failures = 2000; +# endif +#endif diff --git a/grub-core/gnulib/regex.h b/grub-core/gnulib/regex.h new file mode 100644 index 000000000..854c6edaf --- /dev/null +++ b/grub-core/gnulib/regex.h @@ -0,0 +1,667 @@ +/* Definitions for data structures and routines for the regular + expression library. + Copyright (C) 1985, 1989-1993, 1995-1998, 2000-2003, 2005-2013 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _REGEX_H +#define _REGEX_H 1 + +#include + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Define __USE_GNU to declare GNU extensions that violate the + POSIX name space rules. */ +#ifdef _GNU_SOURCE +# define __USE_GNU 1 +#endif + +#ifdef _REGEX_LARGE_OFFSETS + +/* Use types and values that are wide enough to represent signed and + unsigned byte offsets in memory. This currently works only when + the regex code is used outside of the GNU C library; it is not yet + supported within glibc itself, and glibc users should not define + _REGEX_LARGE_OFFSETS. */ + +/* The type of nonnegative object indexes. Traditionally, GNU regex + uses 'int' for these. Code that uses __re_idx_t should work + regardless of whether the type is signed. */ +typedef size_t __re_idx_t; + +/* The type of object sizes. */ +typedef size_t __re_size_t; + +/* The type of object sizes, in places where the traditional code + uses unsigned long int. */ +typedef size_t __re_long_size_t; + +#else + +/* The traditional GNU regex implementation mishandles strings longer + than INT_MAX. */ +typedef int __re_idx_t; +typedef unsigned int __re_size_t; +typedef unsigned long int __re_long_size_t; + +#endif + +/* The following two types have to be signed and unsigned integer type + wide enough to hold a value of a pointer. For most ANSI compilers + ptrdiff_t and size_t should be likely OK. Still size of these two + types is 2 for Microsoft C. Ugh... */ +typedef long int s_reg_t; +typedef unsigned long int active_reg_t; + +/* The following bits are used to determine the regexp syntax we + recognize. The set/not-set meanings are chosen so that Emacs syntax + remains the value 0. The bits are given in alphabetical order, and + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ +typedef unsigned long int reg_syntax_t; + +#ifdef __USE_GNU +/* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ +# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) + +/* If this bit is not set, then + and ? are operators, and \+ and \? are + literals. + If set, then \+ and \? are operators and + and ? are literals. */ +# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) + +/* If this bit is set, then character classes are supported. They are: + [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], + [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. + If not set, then character classes are not supported. */ +# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) + +/* If this bit is set, then ^ and $ are always anchors (outside bracket + expressions, of course). + If this bit is not set, then it depends: + ^ is an anchor if it is at the beginning of a regular + expression or after an open-group or an alternation operator; + $ is an anchor if it is at the end of a regular expression, or + before a close-group or an alternation operator. + + This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because + POSIX draft 11.2 says that * etc. in leading positions is undefined. + We already implemented a previous draft which made those constructs + invalid, though, so we haven't changed the code back. */ +# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) + +/* If this bit is set, then special characters are always special + regardless of where they are in the pattern. + If this bit is not set, then special characters are special only in + some contexts; otherwise they are ordinary. Specifically, + * + ? and intervals are only special when not after the beginning, + open-group, or alternation operator. */ +# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) + +/* If this bit is set, then *, +, ?, and { cannot be first in an re or + immediately after an alternation or begin-group operator. */ +# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) + +/* If this bit is set, then . matches newline. + If not set, then it doesn't. */ +# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) + +/* If this bit is set, then . doesn't match NUL. + If not set, then it does. */ +# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) + +/* If this bit is set, nonmatching lists [^...] do not match newline. + If not set, they do. */ +# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) + +/* If this bit is set, either \{...\} or {...} defines an + interval, depending on RE_NO_BK_BRACES. + If not set, \{, \}, {, and } are literals. */ +# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) + +/* If this bit is set, +, ? and | aren't recognized as operators. + If not set, they are. */ +# define RE_LIMITED_OPS (RE_INTERVALS << 1) + +/* If this bit is set, newline is an alternation operator. + If not set, newline is literal. */ +# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) + +/* If this bit is set, then '{...}' defines an interval, and \{ and \} + are literals. + If not set, then '\{...\}' defines an interval. */ +# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) + +/* If this bit is set, (...) defines a group, and \( and \) are literals. + If not set, \(...\) defines a group, and ( and ) are literals. */ +# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) + +/* If this bit is set, then \ matches . + If not set, then \ is a back-reference. */ +# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) + +/* If this bit is set, then | is an alternation operator, and \| is literal. + If not set, then \| is an alternation operator, and | is literal. */ +# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) + +/* If this bit is set, then an ending range point collating higher + than the starting range point, as in [z-a], is invalid. + If not set, then when ending range point collates higher than the + starting range point, the range is ignored. */ +# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) + +/* If this bit is set, then an unmatched ) is ordinary. + If not set, then an unmatched ) is invalid. */ +# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) + +/* If this bit is set, succeed as soon as we match the whole pattern, + without further backtracking. */ +# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) + +/* If this bit is set, do not process the GNU regex operators. + If not set, then the GNU regex operators are recognized. */ +# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) + +/* If this bit is set, turn on internal regex debugging. + If not set, and debugging was on, turn it off. + This only works if regex.c is compiled -DDEBUG. + We define this bit always, so that all that's needed to turn on + debugging is to recompile regex.c; the calling code can always have + this bit set, and it won't affect anything in the normal case. */ +# define RE_DEBUG (RE_NO_GNU_OPS << 1) + +/* If this bit is set, a syntactically invalid interval is treated as + a string of ordinary characters. For example, the ERE 'a{1' is + treated as 'a\{1'. */ +# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) + +/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only + for ^, because it is difficult to scan the regex backwards to find + whether ^ should be special. */ +# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) + +/* If this bit is set, then \{ cannot be first in a regex or + immediately after an alternation, open-group or \} operator. */ +# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) + +/* If this bit is set, then no_sub will be set to 1 during + re_compile_pattern. */ +# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) +#endif + +/* This global variable defines the particular regexp syntax to use (for + some interfaces). When a regexp is compiled, the syntax used is + stored in the pattern buffer, so changing this does not affect + already-compiled regexps. */ +extern reg_syntax_t re_syntax_options; + +#ifdef __USE_GNU +/* Define combinations of the above bits for the standard possibilities. + (The [[[ comments delimit what gets put into the Texinfo file, so + don't delete them!) */ +/* [[[begin syntaxes]]] */ +# define RE_SYNTAX_EMACS 0 + +# define RE_SYNTAX_AWK \ + (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ + | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CHAR_CLASSES \ + | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + +# define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INVALID_INTERVAL_ORD) \ + & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ + | RE_CONTEXT_INVALID_OPS )) + +# define RE_SYNTAX_POSIX_AWK \ + (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INTERVALS | RE_NO_GNU_OPS \ + | RE_INVALID_INTERVAL_ORD) + +# define RE_SYNTAX_GREP \ + (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ + | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ + | RE_NEWLINE_ALT) + +# define RE_SYNTAX_EGREP \ + (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ + | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ + | RE_NO_BK_VBAR) + +# define RE_SYNTAX_POSIX_EGREP \ + (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ + | RE_INVALID_INTERVAL_ORD) + +/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ +# define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC + +# define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC + +/* Syntax bits common to both basic and extended POSIX regex syntax. */ +# define _RE_SYNTAX_POSIX_COMMON \ + (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ + | RE_INTERVALS | RE_NO_EMPTY_RANGES) + +# define RE_SYNTAX_POSIX_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) + +/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes + RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this + isn't minimal, since other operators, such as \`, aren't disabled. */ +# define RE_SYNTAX_POSIX_MINIMAL_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) + +# define RE_SYNTAX_POSIX_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) + +/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is + removed and RE_NO_BK_REFS is added. */ +# define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) +/* [[[end syntaxes]]] */ + +/* Maximum number of duplicates an interval can allow. POSIX-conforming + systems might define this in , but we want our + value, so remove any previous define. */ +# ifdef _REGEX_INCLUDE_LIMITS_H +# include +# endif +# ifdef RE_DUP_MAX +# undef RE_DUP_MAX +# endif + +/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored + the counter as a 2-byte signed integer. This is no longer true, so + RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to + ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. + However, there would be a huge performance problem if someone + actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains + its historical value. */ +# define RE_DUP_MAX (0x7fff) +#endif + + +/* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ + +/* If this bit is set, then use extended regular expression syntax. + If not set, then use basic regular expression syntax. */ +#define REG_EXTENDED 1 + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +#define REG_ICASE (1 << 1) + +/* If this bit is set, then anchors do not match at newline + characters in the string. + If not set, then anchors do match at newlines. */ +#define REG_NEWLINE (1 << 2) + +/* If this bit is set, then report only success or fail in regexec. + If not set, then returns differ between not matching and errors. */ +#define REG_NOSUB (1 << 3) + + +/* POSIX 'eflags' bits (i.e., information for regexec). */ + +/* If this bit is set, then the beginning-of-line operator doesn't match + the beginning of the string (presumably because it's not the + beginning of a line). + If not set, then the beginning-of-line operator does match the + beginning of the string. */ +#define REG_NOTBOL 1 + +/* Like REG_NOTBOL, except for the end-of-line. */ +#define REG_NOTEOL (1 << 1) + +/* Use PMATCH[0] to delimit the start and end of the search in the + buffer. */ +#define REG_STARTEND (1 << 2) + + +/* If any error codes are removed, changed, or added, update the + '__re_error_msgid' table in regcomp.c. */ + +typedef enum +{ + _REG_ENOSYS = -1, /* This will never happen for this implementation. */ + _REG_NOERROR = 0, /* Success. */ + _REG_NOMATCH, /* Didn't find a match (for regexec). */ + + /* POSIX regcomp return error codes. (In the order listed in the + standard.) */ + _REG_BADPAT, /* Invalid pattern. */ + _REG_ECOLLATE, /* Invalid collating element. */ + _REG_ECTYPE, /* Invalid character class name. */ + _REG_EESCAPE, /* Trailing backslash. */ + _REG_ESUBREG, /* Invalid back reference. */ + _REG_EBRACK, /* Unmatched left bracket. */ + _REG_EPAREN, /* Parenthesis imbalance. */ + _REG_EBRACE, /* Unmatched \{. */ + _REG_BADBR, /* Invalid contents of \{\}. */ + _REG_ERANGE, /* Invalid range end. */ + _REG_ESPACE, /* Ran out of memory. */ + _REG_BADRPT, /* No preceding re for repetition op. */ + + /* Error codes we've added. */ + _REG_EEND, /* Premature end. */ + _REG_ESIZE, /* Too large (e.g., repeat count too large). */ + _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ +} reg_errcode_t; + +#if defined _XOPEN_SOURCE || defined __USE_XOPEN2K +# define REG_ENOSYS _REG_ENOSYS +#endif +#define REG_NOERROR _REG_NOERROR +#define REG_NOMATCH _REG_NOMATCH +#define REG_BADPAT _REG_BADPAT +#define REG_ECOLLATE _REG_ECOLLATE +#define REG_ECTYPE _REG_ECTYPE +#define REG_EESCAPE _REG_EESCAPE +#define REG_ESUBREG _REG_ESUBREG +#define REG_EBRACK _REG_EBRACK +#define REG_EPAREN _REG_EPAREN +#define REG_EBRACE _REG_EBRACE +#define REG_BADBR _REG_BADBR +#define REG_ERANGE _REG_ERANGE +#define REG_ESPACE _REG_ESPACE +#define REG_BADRPT _REG_BADRPT +#define REG_EEND _REG_EEND +#define REG_ESIZE _REG_ESIZE +#define REG_ERPAREN _REG_ERPAREN + +/* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', + and 'translate' can be set. After the pattern has been compiled, + the fields 're_nsub', 'not_bol' and 'not_eol' are available. All + other fields are private to the regex routines. */ + +#ifndef RE_TRANSLATE_TYPE +# define __RE_TRANSLATE_TYPE unsigned char * +# ifdef __USE_GNU +# define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE +# endif +#endif + +#ifdef __USE_GNU +# define __REPB_PREFIX(name) name +#else +# define __REPB_PREFIX(name) __##name +#endif + +struct re_pattern_buffer +{ + /* Space that holds the compiled pattern. The type + 'struct re_dfa_t' is private and is not declared here. */ + struct re_dfa_t *__REPB_PREFIX(buffer); + + /* Number of bytes to which 'buffer' points. */ + __re_long_size_t __REPB_PREFIX(allocated); + + /* Number of bytes actually used in 'buffer'. */ + __re_long_size_t __REPB_PREFIX(used); + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t __REPB_PREFIX(syntax); + + /* Pointer to a fastmap, if any, otherwise zero. re_search uses the + fastmap, if there is one, to skip over impossible starting points + for matches. */ + char *__REPB_PREFIX(fastmap); + + /* Either a translate table to apply to all characters before + comparing them, or zero for no translation. The translation is + applied to a pattern when it is compiled and to a string when it + is matched. */ + __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); + + /* Number of subexpressions found by the compiler. */ + size_t re_nsub; + + /* Zero if this pattern cannot match the empty string, one else. + Well, in truth it's used only in 're_search_2', to see whether or + not we should use the fastmap, so we don't set this absolutely + perfectly; see 're_compile_fastmap' (the "duplicate" case). */ + unsigned __REPB_PREFIX(can_be_null) : 1; + + /* If REGS_UNALLOCATED, allocate space in the 'regs' structure + for 'max (RE_NREGS, re_nsub + 1)' groups. + If REGS_REALLOCATE, reallocate space if necessary. + If REGS_FIXED, use what's there. */ +#ifdef __USE_GNU +# define REGS_UNALLOCATED 0 +# define REGS_REALLOCATE 1 +# define REGS_FIXED 2 +#endif + unsigned __REPB_PREFIX(regs_allocated) : 2; + + /* Set to zero when 're_compile_pattern' compiles a pattern; set to + one by 're_compile_fastmap' if it updates the fastmap. */ + unsigned __REPB_PREFIX(fastmap_accurate) : 1; + + /* If set, 're_match_2' does not return information about + subexpressions. */ + unsigned __REPB_PREFIX(no_sub) : 1; + + /* If set, a beginning-of-line anchor doesn't match at the beginning + of the string. */ + unsigned __REPB_PREFIX(not_bol) : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned __REPB_PREFIX(not_eol) : 1; + + /* If true, an anchor at a newline matches. */ + unsigned __REPB_PREFIX(newline_anchor) : 1; +}; + +typedef struct re_pattern_buffer regex_t; + +/* Type for byte offsets within the string. POSIX mandates this. */ +#ifdef _REGEX_LARGE_OFFSETS +/* POSIX 1003.1-2008 requires that regoff_t be at least as wide as + ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t + is wider than ssize_t, so ssize_t is safe. */ +typedef ssize_t regoff_t; +#else +/* The traditional GNU regex implementation mishandles strings longer + than INT_MAX. */ +typedef int regoff_t; +#endif + + +#ifdef __USE_GNU +/* This is the structure we store register match data in. See + regex.texinfo for a full description of what registers match. */ +struct re_registers +{ + __re_size_t num_regs; + regoff_t *start; + regoff_t *end; +}; + + +/* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, + 're_match_2' returns information about at least this many registers + the first time a 'regs' structure is passed. */ +# ifndef RE_NREGS +# define RE_NREGS 30 +# endif +#endif + + +/* POSIX specification for registers. Aside from the different names than + 're_registers', POSIX uses an array of structures, instead of a + structure of arrays. */ +typedef struct +{ + regoff_t rm_so; /* Byte offset from string's start to substring's start. */ + regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ +} regmatch_t; + +/* Declarations for routines. */ + +#ifdef __USE_GNU +/* Sets the current default syntax to SYNTAX, and return the old syntax. + You can also simply assign to the 're_syntax_options' variable. */ +extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); + +/* Compile the regular expression PATTERN, with length LENGTH + and syntax given by the global 're_syntax_options', into the buffer + BUFFER. Return NULL if successful, and an error string if not. + + To free the allocated storage, you must call 'regfree' on BUFFER. + Note that the translate table must either have been initialised by + 'regcomp', with a malloc'ed value, or set to NULL before calling + 'regfree'. */ +extern const char *re_compile_pattern (const char *__pattern, size_t __length, + struct re_pattern_buffer *__buffer); + + +/* Compile a fastmap for the compiled pattern in BUFFER; used to + accelerate searches. Return 0 if successful and -2 if was an + internal error. */ +extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); + + +/* Search in the string STRING (with length LENGTH) for the pattern + compiled into BUFFER. Start searching at position START, for RANGE + characters. Return the starting position of the match, -1 for no + match, or -2 for an internal error. Also return register + information in REGS (if REGS and BUFFER->no_sub are nonzero). */ +extern regoff_t re_search (struct re_pattern_buffer *__buffer, + const char *__string, __re_idx_t __length, + __re_idx_t __start, regoff_t __range, + struct re_registers *__regs); + + +/* Like 're_search', but search in the concatenation of STRING1 and + STRING2. Also, stop searching at index START + STOP. */ +extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, + const char *__string1, __re_idx_t __length1, + const char *__string2, __re_idx_t __length2, + __re_idx_t __start, regoff_t __range, + struct re_registers *__regs, + __re_idx_t __stop); + + +/* Like 're_search', but return how many characters in STRING the regexp + in BUFFER matched, starting at position START. */ +extern regoff_t re_match (struct re_pattern_buffer *__buffer, + const char *__string, __re_idx_t __length, + __re_idx_t __start, struct re_registers *__regs); + + +/* Relates to 're_match' as 're_search_2' relates to 're_search'. */ +extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, + const char *__string1, __re_idx_t __length1, + const char *__string2, __re_idx_t __length2, + __re_idx_t __start, struct re_registers *__regs, + __re_idx_t __stop); + + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using BUFFER and REGS will use this memory + for recording register information. STARTS and ENDS must be + allocated with malloc, and must each be at least 'NUM_REGS * sizeof + (regoff_t)' bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + BUFFER will allocate its own register data, without + freeing the old data. */ +extern void re_set_registers (struct re_pattern_buffer *__buffer, + struct re_registers *__regs, + __re_size_t __num_regs, + regoff_t *__starts, regoff_t *__ends); +#endif /* Use GNU */ + +#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_BSD) +# ifndef _CRAY +/* 4.2 bsd compatibility. */ +extern char *re_comp (const char *); +extern int re_exec (const char *); +# endif +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if 199901L <= __STDC_VERSION__ +# define _Restrict_ restrict +# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# else +# define _Restrict_ +# endif +#endif +/* gcc 3.1 and up support the [restrict] syntax. Don't trust + sys/cdefs.h's definition of __restrict_arr, though, as it + mishandles gcc -ansi -pedantic. */ +#ifndef _Restrict_arr_ +# if ((199901L <= __STDC_VERSION__ \ + || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ + && !defined __STRICT_ANSI__)) \ + && !defined __GNUG__) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* POSIX compatibility. */ +extern int regcomp (regex_t *_Restrict_ __preg, + const char *_Restrict_ __pattern, + int __cflags); + +extern int regexec (const regex_t *_Restrict_ __preg, + const char *_Restrict_ __string, size_t __nmatch, + regmatch_t __pmatch[_Restrict_arr_], + int __eflags); + +extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, + char *_Restrict_ __errbuf, size_t __errbuf_size); + +extern void regfree (regex_t *__preg); + + +#ifdef __cplusplus +} +#endif /* C++ */ + +#endif /* regex.h */ diff --git a/grub-core/gnulib/regex_internal.c b/grub-core/gnulib/regex_internal.c new file mode 100644 index 000000000..899b0ae67 --- /dev/null +++ b/grub-core/gnulib/regex_internal.c @@ -0,0 +1,1741 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + . */ + +static void re_string_construct_common (const char *str, Idx len, + re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa) internal_function; +static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + re_hashval_t hash) internal_function; +static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + unsigned int context, + re_hashval_t hash) internal_function; + +/* Functions for string operation. */ + +/* This function allocate the buffers. It is necessary to call + re_string_reconstruct before using the object. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + Idx init_buf_len; + + /* Ensure at least one character fits into the buffers. */ + if (init_len < dfa->mb_cur_max) + init_len = dfa->mb_cur_max; + init_buf_len = (len + 1 < init_len) ? len + 1: init_len; + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + ret = re_string_realloc_buffers (pstr, init_buf_len); + if (BE (ret != REG_NOERROR, 0)) + return ret; + + pstr->word_char = dfa->word_char; + pstr->word_ops_used = dfa->word_ops_used; + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; + pstr->valid_raw_len = pstr->valid_len; + return REG_NOERROR; +} + +/* This function allocate the buffers, and initialize them. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_string_construct (re_string_t *pstr, const char *str, Idx len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + memset (pstr, '\0', sizeof (re_string_t)); + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + if (len > 0) + { + ret = re_string_realloc_buffers (pstr, len + 1); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + + if (icase) + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + while (1) + { + ret = build_wcs_upper_buffer (pstr); + if (BE (ret != REG_NOERROR, 0)) + return ret; + if (pstr->valid_raw_len >= len) + break; + if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) + break; + ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + } + else +#endif /* RE_ENABLE_I18N */ + build_upper_buffer (pstr); + } + else + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + build_wcs_buffer (pstr); + else +#endif /* RE_ENABLE_I18N */ + { + if (trans != NULL) + re_string_translate_buffer (pstr); + else + { + pstr->valid_len = pstr->bufs_len; + pstr->valid_raw_len = pstr->bufs_len; + } + } + } + + return REG_NOERROR; +} + +/* Helper functions for re_string_allocate, and re_string_construct. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) +{ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + wint_t *new_wcs; + + /* Avoid overflow in realloc. */ + const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); + if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_buf_len, 0)) + return REG_ESPACE; + + new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); + if (BE (new_wcs == NULL, 0)) + return REG_ESPACE; + pstr->wcs = new_wcs; + if (pstr->offsets != NULL) + { + Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); + if (BE (new_offsets == NULL, 0)) + return REG_ESPACE; + pstr->offsets = new_offsets; + } + } +#endif /* RE_ENABLE_I18N */ + if (pstr->mbs_allocated) + { + unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, + new_buf_len); + if (BE (new_mbs == NULL, 0)) + return REG_ESPACE; + pstr->mbs = new_mbs; + } + pstr->bufs_len = new_buf_len; + return REG_NOERROR; +} + + +static void +internal_function +re_string_construct_common (const char *str, Idx len, re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa) +{ + pstr->raw_mbs = (const unsigned char *) str; + pstr->len = len; + pstr->raw_len = len; + pstr->trans = trans; + pstr->icase = icase; + pstr->mbs_allocated = (trans != NULL || icase); + pstr->mb_cur_max = dfa->mb_cur_max; + pstr->is_utf8 = dfa->is_utf8; + pstr->map_notascii = dfa->map_notascii; + pstr->stop = pstr->len; + pstr->raw_stop = pstr->stop; +} + +#ifdef RE_ENABLE_I18N + +/* Build wide character buffer PSTR->WCS. + If the byte sequence of the string are: + (0), (1), (0), (1), + Then wide character buffer will be: + , WEOF , , WEOF , + We use WEOF for padding, they indicate that the position isn't + a first byte of a multibyte character. + + Note that this function assumes PSTR->VALID_LEN elements are already + built and starts from PSTR->VALID_LEN. */ + +static void +internal_function +build_wcs_buffer (re_string_t *pstr) +{ +#ifdef _LIBC + unsigned char buf[MB_LEN_MAX]; + assert (MB_LEN_MAX >= pstr->mb_cur_max); +#else + unsigned char buf[64]; +#endif + mbstate_t prev_st; + Idx byte_idx, end_idx, remain_len; + size_t mbclen; + + /* Build the buffers from pstr->valid_len to either pstr->len or + pstr->bufs_len. */ + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + for (byte_idx = pstr->valid_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + /* Apply the translation if we need. */ + if (BE (pstr->trans != NULL, 0)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; + buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (BE (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len), 0)) + { + /* We treat these cases as a singlebyte character. */ + mbclen = 1; + wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + if (BE (pstr->trans != NULL, 0)) + wc = pstr->trans[wc]; + pstr->cur_state = prev_st; + } + else if (BE (mbclen == (size_t) -2, 0)) + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + + /* Write wide character and padding. */ + pstr->wcs[byte_idx++] = wc; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; +} + +/* Build wide character buffer PSTR->WCS like build_wcs_buffer, + but for REG_ICASE. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +build_wcs_upper_buffer (re_string_t *pstr) +{ + mbstate_t prev_st; + Idx src_idx, byte_idx, end_idx, remain_len; + size_t mbclen; +#ifdef _LIBC + char buf[MB_LEN_MAX]; + assert (MB_LEN_MAX >= pstr->mb_cur_max); +#else + char buf[64]; +#endif + + byte_idx = pstr->valid_len; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + /* The following optimization assumes that ASCII characters can be + mapped to wide characters with a simple cast. */ + if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) + { + while (byte_idx < end_idx) + { + wchar_t wc; + + if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]) + && mbsinit (&pstr->cur_state)) + { + /* In case of a singlebyte character. */ + pstr->mbs[byte_idx] + = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]); + /* The next step uses the assumption that wchar_t is encoded + ASCII-safe: all ASCII values can be converted like this. */ + pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx]; + ++byte_idx; + continue; + } + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc, + ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + + byte_idx), remain_len, &pstr->cur_state); + if (BE (mbclen < (size_t) -2, 1)) + { + wchar_t wcu = wc; + if (iswlower (wc)) + { + size_t mbcdlen; + + wcu = towupper (wc); + mbcdlen = wcrtomb (buf, wcu, &prev_st); + if (BE (mbclen == mbcdlen, 1)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else + { + src_idx = byte_idx; + goto offsets_needed; + } + } + else + memcpy (pstr->mbs + byte_idx, + pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) + { + /* It is an invalid character, an incomplete character + at the end of the string, or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + pstr->mbs[byte_idx] = ch; + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (BE (mbclen == (size_t) -1, 0)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; + return REG_NOERROR; + } + else + for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + offsets_needed: + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + if (BE (pstr->trans != NULL, 0)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; + buf[i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (BE (mbclen < (size_t) -2, 1)) + { + wchar_t wcu = wc; + if (iswlower (wc)) + { + size_t mbcdlen; + + wcu = towupper (wc); + mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st); + if (BE (mbclen == mbcdlen, 1)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else if (mbcdlen != (size_t) -1) + { + size_t i; + + if (byte_idx + mbcdlen > pstr->bufs_len) + { + pstr->cur_state = prev_st; + break; + } + + if (pstr->offsets == NULL) + { + pstr->offsets = re_malloc (Idx, pstr->bufs_len); + + if (pstr->offsets == NULL) + return REG_ESPACE; + } + if (!pstr->offsets_needed) + { + for (i = 0; i < (size_t) byte_idx; ++i) + pstr->offsets[i] = i; + pstr->offsets_needed = 1; + } + + memcpy (pstr->mbs + byte_idx, buf, mbcdlen); + pstr->wcs[byte_idx] = wcu; + pstr->offsets[byte_idx] = src_idx; + for (i = 1; i < mbcdlen; ++i) + { + pstr->offsets[byte_idx + i] + = src_idx + (i < mbclen ? i : mbclen - 1); + pstr->wcs[byte_idx + i] = WEOF; + } + pstr->len += mbcdlen - mbclen; + if (pstr->raw_stop > src_idx) + pstr->stop += mbcdlen - mbclen; + end_idx = (pstr->bufs_len > pstr->len) + ? pstr->len : pstr->bufs_len; + byte_idx += mbcdlen; + src_idx += mbclen; + continue; + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + + if (BE (pstr->offsets_needed != 0, 0)) + { + size_t i; + for (i = 0; i < mbclen; ++i) + pstr->offsets[byte_idx + i] = src_idx + i; + } + src_idx += mbclen; + + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) + { + /* It is an invalid character or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; + + if (BE (pstr->trans != NULL, 0)) + ch = pstr->trans [ch]; + pstr->mbs[byte_idx] = ch; + + if (BE (pstr->offsets_needed != 0, 0)) + pstr->offsets[byte_idx] = src_idx; + ++src_idx; + + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (BE (mbclen == (size_t) -1, 0)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = src_idx; + return REG_NOERROR; +} + +/* Skip characters until the index becomes greater than NEW_RAW_IDX. + Return the index. */ + +static Idx +internal_function +re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) +{ + mbstate_t prev_st; + Idx rawbuf_idx; + size_t mbclen; + wint_t wc = WEOF; + + /* Skip the characters which are not necessary to check. */ + for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; + rawbuf_idx < new_raw_idx;) + { + wchar_t wc2; + Idx remain_len = pstr->raw_len - rawbuf_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, + remain_len, &pstr->cur_state); + if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 0)) + { + /* We treat these cases as a single byte character. */ + if (mbclen == 0 || remain_len == 0) + wc = L'\0'; + else + wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); + mbclen = 1; + pstr->cur_state = prev_st; + } + else + wc = wc2; + /* Then proceed the next character. */ + rawbuf_idx += mbclen; + } + *last_wc = wc; + return rawbuf_idx; +} +#endif /* RE_ENABLE_I18N */ + +/* Build the buffer PSTR->MBS, and apply the translation if we need. + This function is used in case of REG_ICASE. */ + +static void +internal_function +build_upper_buffer (re_string_t *pstr) +{ + Idx char_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; + if (BE (pstr->trans != NULL, 0)) + ch = pstr->trans[ch]; + if (islower (ch)) + pstr->mbs[char_idx] = toupper (ch); + else + pstr->mbs[char_idx] = ch; + } + pstr->valid_len = char_idx; + pstr->valid_raw_len = char_idx; +} + +/* Apply TRANS to the buffer in PSTR. */ + +static void +internal_function +re_string_translate_buffer (re_string_t *pstr) +{ + Idx buf_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; + pstr->mbs[buf_idx] = pstr->trans[ch]; + } + + pstr->valid_len = buf_idx; + pstr->valid_raw_len = buf_idx; +} + +/* This function re-construct the buffers. + Concretely, convert to wide character in case of pstr->mb_cur_max > 1, + convert to upper case in case of REG_ICASE, apply translation. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) +{ + Idx offset; + + if (BE (pstr->raw_mbs_idx <= idx, 0)) + offset = idx - pstr->raw_mbs_idx; + else + { + /* Reset buffer. */ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); +#endif /* RE_ENABLE_I18N */ + pstr->len = pstr->raw_len; + pstr->stop = pstr->raw_stop; + pstr->valid_len = 0; + pstr->raw_mbs_idx = 0; + pstr->valid_raw_len = 0; + pstr->offsets_needed = 0; + pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF); + if (!pstr->mbs_allocated) + pstr->mbs = (unsigned char *) pstr->raw_mbs; + offset = idx; + } + + if (BE (offset != 0, 1)) + { + /* Should the already checked characters be kept? */ + if (BE (offset < pstr->valid_raw_len, 1)) + { + /* Yes, move them to the front of the buffer. */ +#ifdef RE_ENABLE_I18N + if (BE (pstr->offsets_needed, 0)) + { + Idx low = 0, high = pstr->valid_len, mid; + do + { + mid = (high + low) / 2; + if (pstr->offsets[mid] > offset) + high = mid; + else if (pstr->offsets[mid] < offset) + low = mid + 1; + else + break; + } + while (low < high); + if (pstr->offsets[mid] < offset) + ++mid; + pstr->tip_context = re_string_context_at (pstr, mid - 1, + eflags); + /* This can be quite complicated, so handle specially + only the common and easy case where the character with + different length representation of lower and upper + case is present at or after offset. */ + if (pstr->valid_len > offset + && mid == offset && pstr->offsets[mid] == offset) + { + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); + memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; + for (low = 0; low < pstr->valid_len; low++) + pstr->offsets[low] = pstr->offsets[low + offset] - offset; + } + else + { + /* Otherwise, just find out how long the partial multibyte + character at offset is and fill it with WEOF/255. */ + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + while (mid > 0 && pstr->offsets[mid - 1] == offset) + --mid; + while (mid < pstr->valid_len) + if (pstr->wcs[mid] != WEOF) + break; + else + ++mid; + if (mid == pstr->valid_len) + pstr->valid_len = 0; + else + { + pstr->valid_len = pstr->offsets[mid] - offset; + if (pstr->valid_len) + { + for (low = 0; low < pstr->valid_len; ++low) + pstr->wcs[low] = WEOF; + memset (pstr->mbs, 255, pstr->valid_len); + } + } + pstr->valid_raw_len = pstr->valid_len; + } + } + else +#endif + { + pstr->tip_context = re_string_context_at (pstr, offset - 1, + eflags); +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); +#endif /* RE_ENABLE_I18N */ + if (BE (pstr->mbs_allocated, 0)) + memmove (pstr->mbs, pstr->mbs + offset, + pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; +#if DEBUG + assert (pstr->valid_len > 0); +#endif + } + } + else + { +#ifdef RE_ENABLE_I18N + /* No, skip all characters until IDX. */ + Idx prev_valid_len = pstr->valid_len; + + if (BE (pstr->offsets_needed, 0)) + { + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + } +#endif + pstr->valid_len = 0; +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + Idx wcs_idx; + wint_t wc = WEOF; + + if (pstr->is_utf8) + { + const unsigned char *raw, *p, *end; + + /* Special case UTF-8. Multi-byte chars start with any + byte other than 0x80 - 0xbf. */ + raw = pstr->raw_mbs + pstr->raw_mbs_idx; + end = raw + (offset - pstr->mb_cur_max); + if (end < pstr->raw_mbs) + end = pstr->raw_mbs; + p = raw + offset - 1; +#ifdef _LIBC + /* We know the wchar_t encoding is UCS4, so for the simple + case, ASCII characters, skip the conversion step. */ + if (isascii (*p) && BE (pstr->trans == NULL, 1)) + { + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); + /* pstr->valid_len = 0; */ + wc = (wchar_t) *p; + } + else +#endif + for (; p >= end; --p) + if ((*p & 0xc0) != 0x80) + { + mbstate_t cur_state; + wchar_t wc2; + Idx mlen = raw + pstr->len - p; + unsigned char buf[6]; + size_t mbclen; + + const unsigned char *pp = p; + if (BE (pstr->trans != NULL, 0)) + { + int i = mlen < 6 ? mlen : 6; + while (--i >= 0) + buf[i] = pstr->trans[p[i]]; + pp = buf; + } + /* XXX Don't use mbrtowc, we know which conversion + to use (UTF-8 -> UCS4). */ + memset (&cur_state, 0, sizeof (cur_state)); + mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, + &cur_state); + if (raw + offset - p <= mbclen + && mbclen < (size_t) -2) + { + memset (&pstr->cur_state, '\0', + sizeof (mbstate_t)); + pstr->valid_len = mbclen - (raw + offset - p); + wc = wc2; + } + break; + } + } + + if (wc == WEOF) + pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; + if (wc == WEOF) + pstr->tip_context + = re_string_context_at (pstr, prev_valid_len - 1, eflags); + else + pstr->tip_context = ((BE (pstr->word_ops_used != 0, 0) + && IS_WIDE_WORD_CHAR (wc)) + ? CONTEXT_WORD + : ((IS_WIDE_NEWLINE (wc) + && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + if (BE (pstr->valid_len, 0)) + { + for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) + pstr->wcs[wcs_idx] = WEOF; + if (pstr->mbs_allocated) + memset (pstr->mbs, 255, pstr->valid_len); + } + pstr->valid_raw_len = pstr->valid_len; + } + else +#endif /* RE_ENABLE_I18N */ + { + int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; + pstr->valid_raw_len = 0; + if (pstr->trans) + c = pstr->trans[c]; + pstr->tip_context = (bitset_contain (pstr->word_char, c) + ? CONTEXT_WORD + : ((IS_NEWLINE (c) && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + } + } + if (!BE (pstr->mbs_allocated, 0)) + pstr->mbs += offset; + } + pstr->raw_mbs_idx = idx; + pstr->len -= offset; + pstr->stop -= offset; + + /* Then build the buffers. */ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + if (pstr->icase) + { + reg_errcode_t ret = build_wcs_upper_buffer (pstr); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + else + build_wcs_buffer (pstr); + } + else +#endif /* RE_ENABLE_I18N */ + if (BE (pstr->mbs_allocated, 0)) + { + if (pstr->icase) + build_upper_buffer (pstr); + else if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + else + pstr->valid_len = pstr->len; + + pstr->cur_idx = 0; + return REG_NOERROR; +} + +static unsigned char +internal_function __attribute__ ((pure)) +re_string_peek_byte_case (const re_string_t *pstr, Idx idx) +{ + int ch; + Idx off; + + /* Handle the common (easiest) cases first. */ + if (BE (!pstr->mbs_allocated, 1)) + return re_string_peek_byte (pstr, idx); + +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1 + && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) + return re_string_peek_byte (pstr, idx); +#endif + + off = pstr->cur_idx + idx; +#ifdef RE_ENABLE_I18N + if (pstr->offsets_needed) + off = pstr->offsets[off]; +#endif + + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + +#ifdef RE_ENABLE_I18N + /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I + this function returns CAPITAL LETTER I instead of first byte of + DOTLESS SMALL LETTER I. The latter would confuse the parser, + since peek_byte_case doesn't advance cur_idx in any way. */ + if (pstr->offsets_needed && !isascii (ch)) + return re_string_peek_byte (pstr, idx); +#endif + + return ch; +} + +static unsigned char +internal_function +re_string_fetch_byte_case (re_string_t *pstr) +{ + if (BE (!pstr->mbs_allocated, 1)) + return re_string_fetch_byte (pstr); + +#ifdef RE_ENABLE_I18N + if (pstr->offsets_needed) + { + Idx off; + int ch; + + /* For tr_TR.UTF-8 [[:islower:]] there is + [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip + in that case the whole multi-byte character and return + the original letter. On the other side, with + [[: DOTLESS SMALL LETTER I return [[:I, as doing + anything else would complicate things too much. */ + + if (!re_string_first_byte (pstr, pstr->cur_idx)) + return re_string_fetch_byte (pstr); + + off = pstr->offsets[pstr->cur_idx]; + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + + if (! isascii (ch)) + return re_string_fetch_byte (pstr); + + re_string_skip_bytes (pstr, + re_string_char_size_at (pstr, pstr->cur_idx)); + return ch; + } +#endif + + return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; +} + +static void +internal_function +re_string_destruct (re_string_t *pstr) +{ +#ifdef RE_ENABLE_I18N + re_free (pstr->wcs); + re_free (pstr->offsets); +#endif /* RE_ENABLE_I18N */ + if (pstr->mbs_allocated) + re_free (pstr->mbs); +} + +/* Return the context at IDX in INPUT. */ + +static unsigned int +internal_function +re_string_context_at (const re_string_t *input, Idx idx, int eflags) +{ + int c; + if (BE (! REG_VALID_INDEX (idx), 0)) + /* In this case, we use the value stored in input->tip_context, + since we can't know the character in input->mbs[-1] here. */ + return input->tip_context; + if (BE (idx == input->len, 0)) + return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF + : CONTEXT_NEWLINE | CONTEXT_ENDBUF); +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc; + Idx wc_idx = idx; + while(input->wcs[wc_idx] == WEOF) + { +#ifdef DEBUG + /* It must not happen. */ + assert (REG_VALID_INDEX (wc_idx)); +#endif + --wc_idx; + if (! REG_VALID_INDEX (wc_idx)) + return input->tip_context; + } + wc = input->wcs[wc_idx]; + if (BE (input->word_ops_used != 0, 0) && IS_WIDE_WORD_CHAR (wc)) + return CONTEXT_WORD; + return (IS_WIDE_NEWLINE (wc) && input->newline_anchor + ? CONTEXT_NEWLINE : 0); + } + else +#endif + { + c = re_string_byte_at (input, idx); + if (bitset_contain (input->word_char, c)) + return CONTEXT_WORD; + return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; + } +} + +/* Functions for set operation. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_node_set_alloc (re_node_set *set, Idx size) +{ + set->alloc = size; + set->nelem = 0; + set->elems = re_malloc (Idx, size); + if (BE (set->elems == NULL, 0) && (MALLOC_0_IS_NONNULL || size != 0)) + return REG_ESPACE; + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_node_set_init_1 (re_node_set *set, Idx elem) +{ + set->alloc = 1; + set->nelem = 1; + set->elems = re_malloc (Idx, 1); + if (BE (set->elems == NULL, 0)) + { + set->alloc = set->nelem = 0; + return REG_ESPACE; + } + set->elems[0] = elem; + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) +{ + set->alloc = 2; + set->elems = re_malloc (Idx, 2); + if (BE (set->elems == NULL, 0)) + return REG_ESPACE; + if (elem1 == elem2) + { + set->nelem = 1; + set->elems[0] = elem1; + } + else + { + set->nelem = 2; + if (elem1 < elem2) + { + set->elems[0] = elem1; + set->elems[1] = elem2; + } + else + { + set->elems[0] = elem2; + set->elems[1] = elem1; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_node_set_init_copy (re_node_set *dest, const re_node_set *src) +{ + dest->nelem = src->nelem; + if (src->nelem > 0) + { + dest->alloc = dest->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (BE (dest->elems == NULL, 0)) + { + dest->alloc = dest->nelem = 0; + return REG_ESPACE; + } + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + } + else + re_node_set_init_empty (dest); + return REG_NOERROR; +} + +/* Calculate the intersection of the sets SRC1 and SRC2. And merge it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. + Note: We assume dest->elems is NULL, when dest->alloc is 0. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, is, id, delta, sbase; + if (src1->nelem == 0 || src2->nelem == 0) + return REG_NOERROR; + + /* We need dest->nelem + 2 * elems_in_intersection; this is a + conservative estimate. */ + if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) + { + Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; + Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); + if (BE (new_elems == NULL, 0)) + return REG_ESPACE; + dest->elems = new_elems; + dest->alloc = new_alloc; + } + + /* Find the items in the intersection of SRC1 and SRC2, and copy + into the top of DEST those that are not already in DEST itself. */ + sbase = dest->nelem + src1->nelem + src2->nelem; + i1 = src1->nelem - 1; + i2 = src2->nelem - 1; + id = dest->nelem - 1; + for (;;) + { + if (src1->elems[i1] == src2->elems[i2]) + { + /* Try to find the item in DEST. Maybe we could binary search? */ + while (REG_VALID_INDEX (id) && dest->elems[id] > src1->elems[i1]) + --id; + + if (! REG_VALID_INDEX (id) || dest->elems[id] != src1->elems[i1]) + dest->elems[--sbase] = src1->elems[i1]; + + if (! REG_VALID_INDEX (--i1) || ! REG_VALID_INDEX (--i2)) + break; + } + + /* Lower the highest of the two items. */ + else if (src1->elems[i1] < src2->elems[i2]) + { + if (! REG_VALID_INDEX (--i2)) + break; + } + else + { + if (! REG_VALID_INDEX (--i1)) + break; + } + } + + id = dest->nelem - 1; + is = dest->nelem + src1->nelem + src2->nelem - 1; + delta = is - sbase + 1; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place; this is more or + less the same loop that is in re_node_set_merge. */ + dest->nelem += delta; + if (delta > 0 && REG_VALID_INDEX (id)) + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (! REG_VALID_INDEX (--id)) + break; + } + } + + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); + + return REG_NOERROR; +} + +/* Calculate the union set of the sets SRC1 and SRC2. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_node_set_init_union (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, id; + if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) + { + dest->alloc = src1->nelem + src2->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (BE (dest->elems == NULL, 0)) + return REG_ESPACE; + } + else + { + if (src1 != NULL && src1->nelem > 0) + return re_node_set_init_copy (dest, src1); + else if (src2 != NULL && src2->nelem > 0) + return re_node_set_init_copy (dest, src2); + else + re_node_set_init_empty (dest); + return REG_NOERROR; + } + for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) + { + if (src1->elems[i1] > src2->elems[i2]) + { + dest->elems[id++] = src2->elems[i2++]; + continue; + } + if (src1->elems[i1] == src2->elems[i2]) + ++i2; + dest->elems[id++] = src1->elems[i1++]; + } + if (i1 < src1->nelem) + { + memcpy (dest->elems + id, src1->elems + i1, + (src1->nelem - i1) * sizeof (Idx)); + id += src1->nelem - i1; + } + else if (i2 < src2->nelem) + { + memcpy (dest->elems + id, src2->elems + i2, + (src2->nelem - i2) * sizeof (Idx)); + id += src2->nelem - i2; + } + dest->nelem = id; + return REG_NOERROR; +} + +/* Calculate the union set of the sets DEST and SRC. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +re_node_set_merge (re_node_set *dest, const re_node_set *src) +{ + Idx is, id, sbase, delta; + if (src == NULL || src->nelem == 0) + return REG_NOERROR; + if (dest->alloc < 2 * src->nelem + dest->nelem) + { + Idx new_alloc = 2 * (src->nelem + dest->alloc); + Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); + if (BE (new_buffer == NULL, 0)) + return REG_ESPACE; + dest->elems = new_buffer; + dest->alloc = new_alloc; + } + + if (BE (dest->nelem == 0, 0)) + { + dest->nelem = src->nelem; + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + return REG_NOERROR; + } + + /* Copy into the top of DEST the items of SRC that are not + found in DEST. Maybe we could binary search in DEST? */ + for (sbase = dest->nelem + 2 * src->nelem, + is = src->nelem - 1, id = dest->nelem - 1; + REG_VALID_INDEX (is) && REG_VALID_INDEX (id); ) + { + if (dest->elems[id] == src->elems[is]) + is--, id--; + else if (dest->elems[id] < src->elems[is]) + dest->elems[--sbase] = src->elems[is--]; + else /* if (dest->elems[id] > src->elems[is]) */ + --id; + } + + if (REG_VALID_INDEX (is)) + { + /* If DEST is exhausted, the remaining items of SRC must be unique. */ + sbase -= is + 1; + memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); + } + + id = dest->nelem - 1; + is = dest->nelem + 2 * src->nelem - 1; + delta = is - sbase + 1; + if (delta == 0) + return REG_NOERROR; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place. */ + dest->nelem += delta; + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (! REG_VALID_INDEX (--id)) + { + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, + delta * sizeof (Idx)); + break; + } + } + } + + return REG_NOERROR; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have ELEM. + Return true if successful. */ + +static bool +internal_function __attribute_warn_unused_result__ +re_node_set_insert (re_node_set *set, Idx elem) +{ + Idx idx; + /* In case the set is empty. */ + if (set->alloc == 0) + return BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1); + + if (BE (set->nelem, 0) == 0) + { + /* We already guaranteed above that set->alloc != 0. */ + set->elems[0] = elem; + ++set->nelem; + return true; + } + + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = set->alloc * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (BE (new_elems == NULL, 0)) + return false; + set->elems = new_elems; + } + + /* Move the elements which follows the new element. Test the + first element separately to skip a check in the inner loop. */ + if (elem < set->elems[0]) + { + idx = 0; + for (idx = set->nelem; idx > 0; idx--) + set->elems[idx] = set->elems[idx - 1]; + } + else + { + for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) + set->elems[idx] = set->elems[idx - 1]; + } + + /* Insert the new element. */ + set->elems[idx] = elem; + ++set->nelem; + return true; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have any element greater than or equal to ELEM. + Return true if successful. */ + +static bool +internal_function __attribute_warn_unused_result__ +re_node_set_insert_last (re_node_set *set, Idx elem) +{ + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = (set->alloc + 1) * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (BE (new_elems == NULL, 0)) + return false; + set->elems = new_elems; + } + + /* Insert the new element. */ + set->elems[set->nelem++] = elem; + return true; +} + +/* Compare two node sets SET1 and SET2. + Return true if SET1 and SET2 are equivalent. */ + +static bool +internal_function __attribute__ ((pure)) +re_node_set_compare (const re_node_set *set1, const re_node_set *set2) +{ + Idx i; + if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) + return false; + for (i = set1->nelem ; REG_VALID_INDEX (--i) ; ) + if (set1->elems[i] != set2->elems[i]) + return false; + return true; +} + +/* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ + +static Idx +internal_function __attribute__ ((pure)) +re_node_set_contains (const re_node_set *set, Idx elem) +{ + __re_size_t idx, right, mid; + if (! REG_VALID_NONZERO_INDEX (set->nelem)) + return 0; + + /* Binary search the element. */ + idx = 0; + right = set->nelem - 1; + while (idx < right) + { + mid = (idx + right) / 2; + if (set->elems[mid] < elem) + idx = mid + 1; + else + right = mid; + } + return set->elems[idx] == elem ? idx + 1 : 0; +} + +static void +internal_function +re_node_set_remove_at (re_node_set *set, Idx idx) +{ + if (idx < 0 || idx >= set->nelem) + return; + --set->nelem; + for (; idx < set->nelem; idx++) + set->elems[idx] = set->elems[idx + 1]; +} + + +/* Add the token TOKEN to dfa->nodes, and return the index of the token. + Or return REG_MISSING if an error occurred. */ + +static Idx +internal_function +re_dfa_add_node (re_dfa_t *dfa, re_token_t token) +{ + if (BE (dfa->nodes_len >= dfa->nodes_alloc, 0)) + { + size_t new_nodes_alloc = dfa->nodes_alloc * 2; + Idx *new_nexts, *new_indices; + re_node_set *new_edests, *new_eclosures; + re_token_t *new_nodes; + + /* Avoid overflows in realloc. */ + const size_t max_object_size = MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + sizeof (Idx))); + if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_nodes_alloc, 0)) + return REG_MISSING; + + new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); + if (BE (new_nodes == NULL, 0)) + return REG_MISSING; + dfa->nodes = new_nodes; + new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); + new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); + new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); + new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); + if (BE (new_nexts == NULL || new_indices == NULL + || new_edests == NULL || new_eclosures == NULL, 0)) + return REG_MISSING; + dfa->nexts = new_nexts; + dfa->org_indices = new_indices; + dfa->edests = new_edests; + dfa->eclosures = new_eclosures; + dfa->nodes_alloc = new_nodes_alloc; + } + dfa->nodes[dfa->nodes_len] = token; + dfa->nodes[dfa->nodes_len].constraint = 0; +#ifdef RE_ENABLE_I18N + dfa->nodes[dfa->nodes_len].accept_mb = + ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) + || token.type == COMPLEX_BRACKET); +#endif + dfa->nexts[dfa->nodes_len] = REG_MISSING; + re_node_set_init_empty (dfa->edests + dfa->nodes_len); + re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); + return dfa->nodes_len++; +} + +static re_hashval_t +internal_function +calc_state_hash (const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash = nodes->nelem + context; + Idx i; + for (i = 0 ; i < nodes->nelem ; i++) + hash += nodes->elems[i]; + return hash; +} + +/* Search for the state whose node_set is equivalent to NODES. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +internal_function __attribute_warn_unused_result__ +re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#ifdef lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (BE (nodes->nelem == 0, 0)) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, 0); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (hash != state->hash) + continue; + if (re_node_set_compare (&state->nodes, nodes)) + return state; + } + + /* There are no appropriate state in the dfa, create the new one. */ + new_state = create_ci_newstate (dfa, nodes, hash); + if (BE (new_state == NULL, 0)) + *err = REG_ESPACE; + + return new_state; +} + +/* Search for the state whose node_set is equivalent to NODES and + whose context is equivalent to CONTEXT. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +internal_function __attribute_warn_unused_result__ +re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#ifdef lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (nodes->nelem == 0) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, context); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (state->hash == hash + && state->context == context + && re_node_set_compare (state->entrance_nodes, nodes)) + return state; + } + /* There are no appropriate state in 'dfa', create the new one. */ + new_state = create_cd_newstate (dfa, nodes, context, hash); + if (BE (new_state == NULL, 0)) + *err = REG_ESPACE; + + return new_state; +} + +/* Finish initialization of the new state NEWSTATE, and using its hash value + HASH put in the appropriate bucket of DFA's state table. Return value + indicates the error code if failed. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, + re_hashval_t hash) +{ + struct re_state_table_entry *spot; + reg_errcode_t err; + Idx i; + + newstate->hash = hash; + err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); + if (BE (err != REG_NOERROR, 0)) + return REG_ESPACE; + for (i = 0; i < newstate->nodes.nelem; i++) + { + Idx elem = newstate->nodes.elems[i]; + if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) + if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) + return REG_ESPACE; + } + + spot = dfa->state_table + (hash & dfa->state_hash_mask); + if (BE (spot->alloc <= spot->num, 0)) + { + Idx new_alloc = 2 * spot->num + 2; + re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, + new_alloc); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + spot->array = new_array; + spot->alloc = new_alloc; + } + spot->array[spot->num++] = newstate; + return REG_NOERROR; +} + +static void +free_state (re_dfastate_t *state) +{ + re_node_set_free (&state->non_eps_nodes); + re_node_set_free (&state->inveclosure); + if (state->entrance_nodes != &state->nodes) + { + re_node_set_free (state->entrance_nodes); + re_free (state->entrance_nodes); + } + re_node_set_free (&state->nodes); + re_free (state->word_trtable); + re_free (state->trtable); + re_free (state); +} + +/* Create the new state which is independent of contexts. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +internal_function __attribute_warn_unused_result__ +create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + re_hashval_t hash) +{ + Idx i; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (BE (newstate == NULL, 0)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_free (newstate); + return NULL; + } + + newstate->entrance_nodes = &newstate->nodes; + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + if (type == CHARACTER && !node->constraint) + continue; +#ifdef RE_ENABLE_I18N + newstate->accept_mb |= node->accept_mb; +#endif /* RE_ENABLE_I18N */ + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + else if (type == ANCHOR || node->constraint) + newstate->has_constraint = 1; + } + err = register_state (dfa, newstate, hash); + if (BE (err != REG_NOERROR, 0)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} + +/* Create the new state which is depend on the context CONTEXT. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +internal_function __attribute_warn_unused_result__ +create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + unsigned int context, re_hashval_t hash) +{ + Idx i, nctx_nodes = 0; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (BE (newstate == NULL, 0)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_free (newstate); + return NULL; + } + + newstate->context = context; + newstate->entrance_nodes = &newstate->nodes; + + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + if (type == CHARACTER && !constraint) + continue; +#ifdef RE_ENABLE_I18N + newstate->accept_mb |= node->accept_mb; +#endif /* RE_ENABLE_I18N */ + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + + if (constraint) + { + if (newstate->entrance_nodes == &newstate->nodes) + { + newstate->entrance_nodes = re_malloc (re_node_set, 1); + if (BE (newstate->entrance_nodes == NULL, 0)) + { + free_state (newstate); + return NULL; + } + if (re_node_set_init_copy (newstate->entrance_nodes, nodes) + != REG_NOERROR) + return NULL; + nctx_nodes = 0; + newstate->has_constraint = 1; + } + + if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) + { + re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); + ++nctx_nodes; + } + } + } + err = register_state (dfa, newstate, hash); + if (BE (err != REG_NOERROR, 0)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} diff --git a/grub-core/gnulib/regex_internal.h b/grub-core/gnulib/regex_internal.h new file mode 100644 index 000000000..c467b2907 --- /dev/null +++ b/grub-core/gnulib/regex_internal.h @@ -0,0 +1,873 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _REGEX_INTERNAL_H +#define _REGEX_INTERNAL_H 1 + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#if defined _LIBC +# include +#else +# define __libc_lock_init(NAME) do { } while (0) +# define __libc_lock_lock(NAME) do { } while (0) +# define __libc_lock_unlock(NAME) do { } while (0) +#endif + +/* In case that the system doesn't have isblank(). */ +#if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) +# define isblank(ch) ((ch) == ' ' || (ch) == '\t') +#endif + +#ifdef _LIBC +# ifndef _RE_DEFINE_LOCALE_FUNCTIONS +# define _RE_DEFINE_LOCALE_FUNCTIONS 1 +# include +# include +# include +# endif +#endif + +/* This is for other GNU distributions with internationalized messages. */ +#if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include +# ifdef _LIBC +# undef gettext +# define gettext(msgid) \ + __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) +# endif +#else +# define gettext(msgid) (msgid) +#endif + +#ifndef gettext_noop +/* This define is so xgettext can find the internationalizable + strings. */ +# define gettext_noop(String) String +#endif + +#if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC +# define RE_ENABLE_I18N +#endif + +#if __GNUC__ >= 3 +# define BE(expr, val) __builtin_expect (expr, val) +#else +# define BE(expr, val) (expr) +#endif + +/* Number of ASCII characters. */ +#define ASCII_CHARS 0x80 + +/* Number of single byte characters. */ +#define SBC_MAX (UCHAR_MAX + 1) + +#define COLL_ELEM_LEN_MAX 8 + +/* The character which represents newline. */ +#define NEWLINE_CHAR '\n' +#define WIDE_NEWLINE_CHAR L'\n' + +/* Rename to standard API for using out of glibc. */ +#ifndef _LIBC +# undef __wctype +# undef __iswctype +# define __wctype wctype +# define __iswctype iswctype +# define __btowc btowc +# define __mbrtowc mbrtowc +# define __wcrtomb wcrtomb +# define __regfree regfree +# define attribute_hidden +#endif /* not _LIBC */ + +#if __GNUC__ < 3 + (__GNUC_MINOR__ < 1) +# define __attribute__(arg) +#endif + +typedef __re_idx_t Idx; +#ifdef _REGEX_LARGE_OFFSETS +# define IDX_MAX (SIZE_MAX - 2) +#else +# define IDX_MAX INT_MAX +#endif + +/* Special return value for failure to match. */ +#define REG_MISSING ((Idx) -1) + +/* Special return value for internal error. */ +#define REG_ERROR ((Idx) -2) + +/* Test whether N is a valid index, and is not one of the above. */ +#ifdef _REGEX_LARGE_OFFSETS +# define REG_VALID_INDEX(n) ((Idx) (n) < REG_ERROR) +#else +# define REG_VALID_INDEX(n) (0 <= (n)) +#endif + +/* Test whether N is a valid nonzero index. */ +#ifdef _REGEX_LARGE_OFFSETS +# define REG_VALID_NONZERO_INDEX(n) ((Idx) ((n) - 1) < (Idx) (REG_ERROR - 1)) +#else +# define REG_VALID_NONZERO_INDEX(n) (0 < (n)) +#endif + +/* A hash value, suitable for computing hash tables. */ +typedef __re_size_t re_hashval_t; + +/* An integer used to represent a set of bits. It must be unsigned, + and must be at least as wide as unsigned int. */ +typedef unsigned long int bitset_word_t; +/* All bits set in a bitset_word_t. */ +#define BITSET_WORD_MAX ULONG_MAX + +/* Number of bits in a bitset_word_t. For portability to hosts with + padding bits, do not use '(sizeof (bitset_word_t) * CHAR_BIT)'; + instead, deduce it directly from BITSET_WORD_MAX. Avoid + greater-than-32-bit integers and unconditional shifts by more than + 31 bits, as they're not portable. */ +#if BITSET_WORD_MAX == 0xffffffffUL +# define BITSET_WORD_BITS 32 +#elif BITSET_WORD_MAX >> 31 >> 4 == 1 +# define BITSET_WORD_BITS 36 +#elif BITSET_WORD_MAX >> 31 >> 16 == 1 +# define BITSET_WORD_BITS 48 +#elif BITSET_WORD_MAX >> 31 >> 28 == 1 +# define BITSET_WORD_BITS 60 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1 +# define BITSET_WORD_BITS 64 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1 +# define BITSET_WORD_BITS 72 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1 +# define BITSET_WORD_BITS 128 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1 +# define BITSET_WORD_BITS 256 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1 +# define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */ +# if BITSET_WORD_BITS <= SBC_MAX +# error "Invalid SBC_MAX" +# endif +#else +# error "Add case for new bitset_word_t size" +#endif + +/* Number of bitset_word_t values in a bitset_t. */ +#define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) + +typedef bitset_word_t bitset_t[BITSET_WORDS]; +typedef bitset_word_t *re_bitset_ptr_t; +typedef const bitset_word_t *re_const_bitset_ptr_t; + +#define PREV_WORD_CONSTRAINT 0x0001 +#define PREV_NOTWORD_CONSTRAINT 0x0002 +#define NEXT_WORD_CONSTRAINT 0x0004 +#define NEXT_NOTWORD_CONSTRAINT 0x0008 +#define PREV_NEWLINE_CONSTRAINT 0x0010 +#define NEXT_NEWLINE_CONSTRAINT 0x0020 +#define PREV_BEGBUF_CONSTRAINT 0x0040 +#define NEXT_ENDBUF_CONSTRAINT 0x0080 +#define WORD_DELIM_CONSTRAINT 0x0100 +#define NOT_WORD_DELIM_CONSTRAINT 0x0200 + +typedef enum +{ + INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + LINE_FIRST = PREV_NEWLINE_CONSTRAINT, + LINE_LAST = NEXT_NEWLINE_CONSTRAINT, + BUF_FIRST = PREV_BEGBUF_CONSTRAINT, + BUF_LAST = NEXT_ENDBUF_CONSTRAINT, + WORD_DELIM = WORD_DELIM_CONSTRAINT, + NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT +} re_context_type; + +typedef struct +{ + Idx alloc; + Idx nelem; + Idx *elems; +} re_node_set; + +typedef enum +{ + NON_TYPE = 0, + + /* Node type, These are used by token, node, tree. */ + CHARACTER = 1, + END_OF_RE = 2, + SIMPLE_BRACKET = 3, + OP_BACK_REF = 4, + OP_PERIOD = 5, +#ifdef RE_ENABLE_I18N + COMPLEX_BRACKET = 6, + OP_UTF8_PERIOD = 7, +#endif /* RE_ENABLE_I18N */ + + /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used + when the debugger shows values of this enum type. */ +#define EPSILON_BIT 8 + OP_OPEN_SUBEXP = EPSILON_BIT | 0, + OP_CLOSE_SUBEXP = EPSILON_BIT | 1, + OP_ALT = EPSILON_BIT | 2, + OP_DUP_ASTERISK = EPSILON_BIT | 3, + ANCHOR = EPSILON_BIT | 4, + + /* Tree type, these are used only by tree. */ + CONCAT = 16, + SUBEXP = 17, + + /* Token type, these are used only by token. */ + OP_DUP_PLUS = 18, + OP_DUP_QUESTION, + OP_OPEN_BRACKET, + OP_CLOSE_BRACKET, + OP_CHARSET_RANGE, + OP_OPEN_DUP_NUM, + OP_CLOSE_DUP_NUM, + OP_NON_MATCH_LIST, + OP_OPEN_COLL_ELEM, + OP_CLOSE_COLL_ELEM, + OP_OPEN_EQUIV_CLASS, + OP_CLOSE_EQUIV_CLASS, + OP_OPEN_CHAR_CLASS, + OP_CLOSE_CHAR_CLASS, + OP_WORD, + OP_NOTWORD, + OP_SPACE, + OP_NOTSPACE, + BACK_SLASH + +} re_token_type_t; + +#ifdef RE_ENABLE_I18N +typedef struct +{ + /* Multibyte characters. */ + wchar_t *mbchars; + + /* Collating symbols. */ +# ifdef _LIBC + int32_t *coll_syms; +# endif + + /* Equivalence classes. */ +# ifdef _LIBC + int32_t *equiv_classes; +# endif + + /* Range expressions. */ +# ifdef _LIBC + uint32_t *range_starts; + uint32_t *range_ends; +# else /* not _LIBC */ + wchar_t *range_starts; + wchar_t *range_ends; +# endif /* not _LIBC */ + + /* Character classes. */ + wctype_t *char_classes; + + /* If this character set is the non-matching list. */ + unsigned int non_match : 1; + + /* # of multibyte characters. */ + Idx nmbchars; + + /* # of collating symbols. */ + Idx ncoll_syms; + + /* # of equivalence classes. */ + Idx nequiv_classes; + + /* # of range expressions. */ + Idx nranges; + + /* # of character classes. */ + Idx nchar_classes; +} re_charset_t; +#endif /* RE_ENABLE_I18N */ + +typedef struct +{ + union + { + unsigned char c; /* for CHARACTER */ + re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; /* for COMPLEX_BRACKET */ +#endif /* RE_ENABLE_I18N */ + Idx idx; /* for BACK_REF */ + re_context_type ctx_type; /* for ANCHOR */ + } opr; +#if __GNUC__ >= 2 && !defined __STRICT_ANSI__ + re_token_type_t type : 8; +#else + re_token_type_t type; +#endif + unsigned int constraint : 10; /* context constraint */ + unsigned int duplicated : 1; + unsigned int opt_subexp : 1; +#ifdef RE_ENABLE_I18N + unsigned int accept_mb : 1; + /* These 2 bits can be moved into the union if needed (e.g. if running out + of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ + unsigned int mb_partial : 1; +#endif + unsigned int word_char : 1; +} re_token_t; + +#define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) + +struct re_string_t +{ + /* Indicate the raw buffer which is the original string passed as an + argument of regexec(), re_search(), etc.. */ + const unsigned char *raw_mbs; + /* Store the multibyte string. In case of "case insensitive mode" like + REG_ICASE, upper cases of the string are stored, otherwise MBS points + the same address that RAW_MBS points. */ + unsigned char *mbs; +#ifdef RE_ENABLE_I18N + /* Store the wide character string which is corresponding to MBS. */ + wint_t *wcs; + Idx *offsets; + mbstate_t cur_state; +#endif + /* Index in RAW_MBS. Each character mbs[i] corresponds to + raw_mbs[raw_mbs_idx + i]. */ + Idx raw_mbs_idx; + /* The length of the valid characters in the buffers. */ + Idx valid_len; + /* The corresponding number of bytes in raw_mbs array. */ + Idx valid_raw_len; + /* The length of the buffers MBS and WCS. */ + Idx bufs_len; + /* The index in MBS, which is updated by re_string_fetch_byte. */ + Idx cur_idx; + /* length of RAW_MBS array. */ + Idx raw_len; + /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ + Idx len; + /* End of the buffer may be shorter than its length in the cases such + as re_match_2, re_search_2. Then, we use STOP for end of the buffer + instead of LEN. */ + Idx raw_stop; + /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ + Idx stop; + + /* The context of mbs[0]. We store the context independently, since + the context of mbs[0] may be different from raw_mbs[0], which is + the beginning of the input string. */ + unsigned int tip_context; + /* The translation passed as a part of an argument of re_compile_pattern. */ + RE_TRANSLATE_TYPE trans; + /* Copy of re_dfa_t's word_char. */ + re_const_bitset_ptr_t word_char; + /* true if REG_ICASE. */ + unsigned char icase; + unsigned char is_utf8; + unsigned char map_notascii; + unsigned char mbs_allocated; + unsigned char offsets_needed; + unsigned char newline_anchor; + unsigned char word_ops_used; + int mb_cur_max; +}; +typedef struct re_string_t re_string_t; + + +struct re_dfa_t; +typedef struct re_dfa_t re_dfa_t; + +#ifndef _LIBC +# define internal_function +#endif + +#ifndef NOT_IN_libc +static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, + Idx new_buf_len) + internal_function; +# ifdef RE_ENABLE_I18N +static void build_wcs_buffer (re_string_t *pstr) internal_function; +static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr) + internal_function; +# endif /* RE_ENABLE_I18N */ +static void build_upper_buffer (re_string_t *pstr) internal_function; +static void re_string_translate_buffer (re_string_t *pstr) internal_function; +static unsigned int re_string_context_at (const re_string_t *input, Idx idx, + int eflags) + internal_function __attribute__ ((pure)); +#endif +#define re_string_peek_byte(pstr, offset) \ + ((pstr)->mbs[(pstr)->cur_idx + offset]) +#define re_string_fetch_byte(pstr) \ + ((pstr)->mbs[(pstr)->cur_idx++]) +#define re_string_first_byte(pstr, idx) \ + ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) +#define re_string_is_single_byte_char(pstr, idx) \ + ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ + || (pstr)->wcs[(idx) + 1] != WEOF)) +#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) +#define re_string_cur_idx(pstr) ((pstr)->cur_idx) +#define re_string_get_buffer(pstr) ((pstr)->mbs) +#define re_string_length(pstr) ((pstr)->len) +#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) +#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) +#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) + +#if defined _LIBC || HAVE_ALLOCA +# include +#endif + +#ifndef _LIBC +# if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. */ +# define __libc_use_alloca(n) ((n) < 4032) +# else +/* alloca is implemented with malloc, so just use malloc. */ +# define __libc_use_alloca(n) 0 +# undef alloca +# define alloca(n) malloc (n) +# endif +#endif + +#ifdef _LIBC +# define MALLOC_0_IS_NONNULL 1 +#elif !defined MALLOC_0_IS_NONNULL +# define MALLOC_0_IS_NONNULL 0 +#endif + +#ifndef MAX +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +#endif +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) +#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) +#define re_free(p) free (p) + +struct bin_tree_t +{ + struct bin_tree_t *parent; + struct bin_tree_t *left; + struct bin_tree_t *right; + struct bin_tree_t *first; + struct bin_tree_t *next; + + re_token_t token; + + /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. + Otherwise 'type' indicate the type of this node. */ + Idx node_idx; +}; +typedef struct bin_tree_t bin_tree_t; + +#define BIN_TREE_STORAGE_SIZE \ + ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) + +struct bin_tree_storage_t +{ + struct bin_tree_storage_t *next; + bin_tree_t data[BIN_TREE_STORAGE_SIZE]; +}; +typedef struct bin_tree_storage_t bin_tree_storage_t; + +#define CONTEXT_WORD 1 +#define CONTEXT_NEWLINE (CONTEXT_WORD << 1) +#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) +#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) + +#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) +#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) +#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) +#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) +#define IS_ORDINARY_CONTEXT(c) ((c) == 0) + +#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') +#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) +#define IS_WIDE_WORD_CHAR(ch) (iswalnum (ch) || (ch) == L'_') +#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) + +#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ + ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ + || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) + +#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ + ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ + || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) + +struct re_dfastate_t +{ + re_hashval_t hash; + re_node_set nodes; + re_node_set non_eps_nodes; + re_node_set inveclosure; + re_node_set *entrance_nodes; + struct re_dfastate_t **trtable, **word_trtable; + unsigned int context : 4; + unsigned int halt : 1; + /* If this state can accept "multi byte". + Note that we refer to multibyte characters, and multi character + collating elements as "multi byte". */ + unsigned int accept_mb : 1; + /* If this state has backreference node(s). */ + unsigned int has_backref : 1; + unsigned int has_constraint : 1; +}; +typedef struct re_dfastate_t re_dfastate_t; + +struct re_state_table_entry +{ + Idx num; + Idx alloc; + re_dfastate_t **array; +}; + +/* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ + +typedef struct +{ + Idx next_idx; + Idx alloc; + re_dfastate_t **array; +} state_array_t; + +/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ + +typedef struct +{ + Idx node; + Idx str_idx; /* The position NODE match at. */ + state_array_t path; +} re_sub_match_last_t; + +/* Store information about the node NODE whose type is OP_OPEN_SUBEXP. + And information about the node, whose type is OP_CLOSE_SUBEXP, + corresponding to NODE is stored in LASTS. */ + +typedef struct +{ + Idx str_idx; + Idx node; + state_array_t *path; + Idx alasts; /* Allocation size of LASTS. */ + Idx nlasts; /* The number of LASTS. */ + re_sub_match_last_t **lasts; +} re_sub_match_top_t; + +struct re_backref_cache_entry +{ + Idx node; + Idx str_idx; + Idx subexp_from; + Idx subexp_to; + char more; + char unused; + unsigned short int eps_reachable_subexps_map; +}; + +typedef struct +{ + /* The string object corresponding to the input string. */ + re_string_t input; +#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) + const re_dfa_t *const dfa; +#else + const re_dfa_t *dfa; +#endif + /* EFLAGS of the argument of regexec. */ + int eflags; + /* Where the matching ends. */ + Idx match_last; + Idx last_node; + /* The state log used by the matcher. */ + re_dfastate_t **state_log; + Idx state_log_top; + /* Back reference cache. */ + Idx nbkref_ents; + Idx abkref_ents; + struct re_backref_cache_entry *bkref_ents; + int max_mb_elem_len; + Idx nsub_tops; + Idx asub_tops; + re_sub_match_top_t **sub_tops; +} re_match_context_t; + +typedef struct +{ + re_dfastate_t **sifted_states; + re_dfastate_t **limited_states; + Idx last_node; + Idx last_str_idx; + re_node_set limits; +} re_sift_context_t; + +struct re_fail_stack_ent_t +{ + Idx idx; + Idx node; + regmatch_t *regs; + re_node_set eps_via_nodes; +}; + +struct re_fail_stack_t +{ + Idx num; + Idx alloc; + struct re_fail_stack_ent_t *stack; +}; + +struct re_dfa_t +{ + re_token_t *nodes; + size_t nodes_alloc; + size_t nodes_len; + Idx *nexts; + Idx *org_indices; + re_node_set *edests; + re_node_set *eclosures; + re_node_set *inveclosures; + struct re_state_table_entry *state_table; + re_dfastate_t *init_state; + re_dfastate_t *init_state_word; + re_dfastate_t *init_state_nl; + re_dfastate_t *init_state_begbuf; + bin_tree_t *str_tree; + bin_tree_storage_t *str_tree_storage; + re_bitset_ptr_t sb_char; + int str_tree_storage_idx; + + /* number of subexpressions 're_nsub' is in regex_t. */ + re_hashval_t state_hash_mask; + Idx init_node; + Idx nbackref; /* The number of backreference in this dfa. */ + + /* Bitmap expressing which backreference is used. */ + bitset_word_t used_bkref_map; + bitset_word_t completed_bkref_map; + + unsigned int has_plural_match : 1; + /* If this dfa has "multibyte node", which is a backreference or + a node which can accept multibyte character or multi character + collating element. */ + unsigned int has_mb_node : 1; + unsigned int is_utf8 : 1; + unsigned int map_notascii : 1; + unsigned int word_ops_used : 1; + int mb_cur_max; + bitset_t word_char; + reg_syntax_t syntax; + Idx *subexp_map; +#ifdef DEBUG + char* re_str; +#endif +#ifdef _LIBC + __libc_lock_define (, lock) +#endif +}; + +#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) +#define re_node_set_remove(set,id) \ + (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) +#define re_node_set_empty(p) ((p)->nelem = 0) +#define re_node_set_free(set) re_free ((set)->elems) + + +typedef enum +{ + SB_CHAR, + MB_CHAR, + EQUIV_CLASS, + COLL_SYM, + CHAR_CLASS +} bracket_elem_type; + +typedef struct +{ + bracket_elem_type type; + union + { + unsigned char ch; + unsigned char *name; + wchar_t wch; + } opr; +} bracket_elem_t; + + +/* Functions for bitset_t operation. */ + +static void +bitset_set (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; +} + +static void +bitset_clear (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); +} + +static bool +bitset_contain (const bitset_t set, Idx i) +{ + return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; +} + +static void +bitset_empty (bitset_t set) +{ + memset (set, '\0', sizeof (bitset_t)); +} + +static void +bitset_set_all (bitset_t set) +{ + memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; +} + +static void +bitset_copy (bitset_t dest, const bitset_t src) +{ + memcpy (dest, src, sizeof (bitset_t)); +} + +static void __attribute__ ((unused)) +bitset_not (bitset_t set) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) + set[bitset_i] = ~set[bitset_i]; + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) + & ~set[BITSET_WORDS - 1]); +} + +static void __attribute__ ((unused)) +bitset_merge (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] |= src[bitset_i]; +} + +static void __attribute__ ((unused)) +bitset_mask (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] &= src[bitset_i]; +} + +#ifdef RE_ENABLE_I18N +/* Functions for re_string. */ +static int +internal_function __attribute__ ((pure, unused)) +re_string_char_size_at (const re_string_t *pstr, Idx idx) +{ + int byte_idx; + if (pstr->mb_cur_max == 1) + return 1; + for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) + if (pstr->wcs[idx + byte_idx] != WEOF) + break; + return byte_idx; +} + +static wint_t +internal_function __attribute__ ((pure, unused)) +re_string_wchar_at (const re_string_t *pstr, Idx idx) +{ + if (pstr->mb_cur_max == 1) + return (wint_t) pstr->mbs[idx]; + return (wint_t) pstr->wcs[idx]; +} + +# ifndef NOT_IN_libc +static int +internal_function __attribute__ ((pure, unused)) +re_string_elem_size_at (const re_string_t *pstr, Idx idx) +{ +# ifdef _LIBC + const unsigned char *p, *extra; + const int32_t *table, *indirect; +# include + uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + + if (nrules != 0) + { + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + p = pstr->mbs + idx; + findidx (&p, pstr->len - idx); + return p - pstr->mbs - idx; + } + else +# endif /* _LIBC */ + return 1; +} +# endif +#endif /* RE_ENABLE_I18N */ + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#if __GNUC_PREREQ (3,4) +# undef __attribute_warn_unused_result__ +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif + +#endif /* _REGEX_INTERNAL_H */ diff --git a/grub-core/gnulib/regexec.c b/grub-core/gnulib/regexec.c new file mode 100644 index 000000000..a7776f088 --- /dev/null +++ b/grub-core/gnulib/regexec.c @@ -0,0 +1,4417 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + . */ + +static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, + Idx n) internal_function; +static void match_ctx_clean (re_match_context_t *mctx) internal_function; +static void match_ctx_free (re_match_context_t *cache) internal_function; +static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, + Idx str_idx, Idx from, Idx to) + internal_function; +static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) + internal_function; +static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, + Idx str_idx) internal_function; +static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, + Idx node, Idx str_idx) + internal_function; +static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, + Idx last_str_idx) + internal_function; +static reg_errcode_t re_search_internal (const regex_t *preg, + const char *string, Idx length, + Idx start, Idx last_start, Idx stop, + size_t nmatch, regmatch_t pmatch[], + int eflags) internal_function; +static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, + const char *string1, Idx length1, + const char *string2, Idx length2, + Idx start, regoff_t range, + struct re_registers *regs, + Idx stop, bool ret_len) internal_function; +static regoff_t re_search_stub (struct re_pattern_buffer *bufp, + const char *string, Idx length, Idx start, + regoff_t range, Idx stop, + struct re_registers *regs, + bool ret_len) internal_function; +static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, + Idx nregs, int regs_allocated) internal_function; +static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx) + internal_function; +static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first) internal_function; +static Idx check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx) + internal_function; +static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, + Idx cur_idx, Idx nmatch) internal_function; +static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, + Idx str_idx, Idx dest_node, Idx nregs, + regmatch_t *regs, + re_node_set *eps_via_nodes) + internal_function; +static reg_errcode_t set_regs (const regex_t *preg, + const re_match_context_t *mctx, + size_t nmatch, regmatch_t *pmatch, + bool fl_backtrack) internal_function; +static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) + internal_function; + +#ifdef RE_ENABLE_I18N +static int sift_states_iter_mb (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx) + internal_function; +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, + re_sift_context_t *sctx) + internal_function; +static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *cur_dest) + internal_function; +static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, + re_node_set *dest_nodes) + internal_function; +static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates) + internal_function; +static bool check_dst_limits (const re_match_context_t *mctx, + const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, + Idx src_idx) internal_function; +static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, + int boundaries, Idx subexp_idx, + Idx from_node, Idx bkref_idx) + internal_function; +static int check_dst_limits_calc_pos (const re_match_context_t *mctx, + Idx limit, Idx subexp_idx, + Idx node, Idx str_idx, + Idx bkref_idx) internal_function; +static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates, + re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, + Idx str_idx) internal_function; +static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates) + internal_function; +static reg_errcode_t merge_state_array (const re_dfa_t *dfa, + re_dfastate_t **dst, + re_dfastate_t **src, Idx num) + internal_function; +static re_dfastate_t *find_recover_state (reg_errcode_t *err, + re_match_context_t *mctx) internal_function; +static re_dfastate_t *transit_state (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *state) internal_function; +static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *next_state) + internal_function; +static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, + re_node_set *cur_nodes, + Idx str_idx) internal_function; +#if 0 +static re_dfastate_t *transit_state_sb (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *pstate) + internal_function; +#endif +#ifdef RE_ENABLE_I18N +static reg_errcode_t transit_state_mb (re_match_context_t *mctx, + re_dfastate_t *pstate) + internal_function; +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, + const re_node_set *nodes) + internal_function; +static reg_errcode_t get_subexp (re_match_context_t *mctx, + Idx bkref_node, Idx bkref_str_idx) + internal_function; +static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, + const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, + Idx bkref_node, Idx bkref_str) + internal_function; +static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type) internal_function; +static reg_errcode_t check_arrival (re_match_context_t *mctx, + state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, + int type) internal_function; +static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, + Idx str_idx, + re_node_set *cur_nodes, + re_node_set *next_nodes) + internal_function; +static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, + re_node_set *cur_nodes, + Idx ex_subexp, int type) + internal_function; +static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, + re_node_set *dst_nodes, + Idx target, Idx ex_subexp, + int type) internal_function; +static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, + re_node_set *cur_nodes, Idx cur_str, + Idx subexp_num, int type) + internal_function; +static bool build_trtable (const re_dfa_t *dfa, + re_dfastate_t *state) internal_function; +#ifdef RE_ENABLE_I18N +static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx idx) + internal_function; +# ifdef _LIBC +static unsigned int find_collation_sequence_value (const unsigned char *mbs, + size_t name_len) + internal_function; +# endif /* _LIBC */ +#endif /* RE_ENABLE_I18N */ +static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, + const re_dfastate_t *state, + re_node_set *states_node, + bitset_t *states_ch) internal_function; +static bool check_node_accept (const re_match_context_t *mctx, + const re_token_t *node, Idx idx) + internal_function; +static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len) + internal_function; + +/* Entry point for POSIX code. */ + +/* regexec searches for a given pattern, specified by PREG, in the + string STRING. + + If NMATCH is zero or REG_NOSUB was set in the cflags argument to + 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at + least NMATCH elements, and we set them to the offsets of the + corresponding matched substrings. + + EFLAGS specifies "execution flags" which affect matching: if + REG_NOTBOL is set, then ^ does not match at the beginning of the + string; if REG_NOTEOL is set, then $ does not match at the end. + + We return 0 if we find a match and REG_NOMATCH if not. */ + +int +regexec (preg, string, nmatch, pmatch, eflags) + const regex_t *_Restrict_ preg; + const char *_Restrict_ string; + size_t nmatch; + regmatch_t pmatch[_Restrict_arr_]; + int eflags; +{ + reg_errcode_t err; + Idx start, length; +#ifdef _LIBC + re_dfa_t *dfa = preg->buffer; +#endif + + if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) + return REG_BADPAT; + + if (eflags & REG_STARTEND) + { + start = pmatch[0].rm_so; + length = pmatch[0].rm_eo; + } + else + { + start = 0; + length = strlen (string); + } + + __libc_lock_lock (dfa->lock); + if (preg->no_sub) + err = re_search_internal (preg, string, length, start, length, + length, 0, NULL, eflags); + else + err = re_search_internal (preg, string, length, start, length, + length, nmatch, pmatch, eflags); + __libc_lock_unlock (dfa->lock); + return err != REG_NOERROR; +} + +#ifdef _LIBC +# include +versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); + +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) +__typeof__ (__regexec) __compat_regexec; + +int +attribute_compat_text_section +__compat_regexec (const regex_t *_Restrict_ preg, + const char *_Restrict_ string, size_t nmatch, + regmatch_t pmatch[], int eflags) +{ + return regexec (preg, string, nmatch, pmatch, + eflags & (REG_NOTBOL | REG_NOTEOL)); +} +compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); +# endif +#endif + +/* Entry points for GNU code. */ + +/* re_match, re_search, re_match_2, re_search_2 + + The former two functions operate on STRING with length LENGTH, + while the later two operate on concatenation of STRING1 and STRING2 + with lengths LENGTH1 and LENGTH2, respectively. + + re_match() matches the compiled pattern in BUFP against the string, + starting at index START. + + re_search() first tries matching at index START, then it tries to match + starting from index START + 1, and so on. The last start position tried + is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same + way as re_match().) + + The parameter STOP of re_{match,search}_2 specifies that no match exceeding + the first STOP characters of the concatenation of the strings should be + concerned. + + If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match + and all groups is stored in REGS. (For the "_2" variants, the offsets are + computed relative to the concatenation, not relative to the individual + strings.) + + On success, re_match* functions return the length of the match, re_search* + return the position of the start of the match. Return value -1 means no + match was found and -2 indicates an internal error. */ + +regoff_t +re_match (bufp, string, length, start, regs) + struct re_pattern_buffer *bufp; + const char *string; + Idx length, start; + struct re_registers *regs; +{ + return re_search_stub (bufp, string, length, start, 0, length, regs, true); +} +#ifdef _LIBC +weak_alias (__re_match, re_match) +#endif + +regoff_t +re_search (bufp, string, length, start, range, regs) + struct re_pattern_buffer *bufp; + const char *string; + Idx length, start; + regoff_t range; + struct re_registers *regs; +{ + return re_search_stub (bufp, string, length, start, range, length, regs, + false); +} +#ifdef _LIBC +weak_alias (__re_search, re_search) +#endif + +regoff_t +re_match_2 (bufp, string1, length1, string2, length2, start, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + Idx length1, length2, start, stop; + struct re_registers *regs; +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, 0, regs, stop, true); +} +#ifdef _LIBC +weak_alias (__re_match_2, re_match_2) +#endif + +regoff_t +re_search_2 (bufp, string1, length1, string2, length2, start, range, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + Idx length1, length2, start, stop; + regoff_t range; + struct re_registers *regs; +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, range, regs, stop, false); +} +#ifdef _LIBC +weak_alias (__re_search_2, re_search_2) +#endif + +static regoff_t +re_search_2_stub (struct re_pattern_buffer *bufp, + const char *string1, Idx length1, + const char *string2, Idx length2, + Idx start, regoff_t range, struct re_registers *regs, + Idx stop, bool ret_len) +{ + const char *str; + regoff_t rval; + Idx len = length1 + length2; + char *s = NULL; + + if (BE (length1 < 0 || length2 < 0 || stop < 0 || len < length1, 0)) + return -2; + + /* Concatenate the strings. */ + if (length2 > 0) + if (length1 > 0) + { + s = re_malloc (char, len); + + if (BE (s == NULL, 0)) + return -2; +#ifdef _LIBC + memcpy (__mempcpy (s, string1, length1), string2, length2); +#else + memcpy (s, string1, length1); + memcpy (s + length1, string2, length2); +#endif + str = s; + } + else + str = string2; + else + str = string1; + + rval = re_search_stub (bufp, str, len, start, range, stop, regs, + ret_len); + re_free (s); + return rval; +} + +/* The parameters have the same meaning as those of re_search. + Additional parameters: + If RET_LEN is true the length of the match is returned (re_match style); + otherwise the position of the match is returned. */ + +static regoff_t +re_search_stub (struct re_pattern_buffer *bufp, + const char *string, Idx length, + Idx start, regoff_t range, Idx stop, struct re_registers *regs, + bool ret_len) +{ + reg_errcode_t result; + regmatch_t *pmatch; + Idx nregs; + regoff_t rval; + int eflags = 0; +#ifdef _LIBC + re_dfa_t *dfa = bufp->buffer; +#endif + Idx last_start = start + range; + + /* Check for out-of-range. */ + if (BE (start < 0 || start > length, 0)) + return -1; + if (BE (length < last_start || (0 <= range && last_start < start), 0)) + last_start = length; + else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0)) + last_start = 0; + + __libc_lock_lock (dfa->lock); + + eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; + eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; + + /* Compile fastmap if we haven't yet. */ + if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) + re_compile_fastmap (bufp); + + if (BE (bufp->no_sub, 0)) + regs = NULL; + + /* We need at least 1 register. */ + if (regs == NULL) + nregs = 1; + else if (BE (bufp->regs_allocated == REGS_FIXED + && regs->num_regs <= bufp->re_nsub, 0)) + { + nregs = regs->num_regs; + if (BE (nregs < 1, 0)) + { + /* Nothing can be copied to regs. */ + regs = NULL; + nregs = 1; + } + } + else + nregs = bufp->re_nsub + 1; + pmatch = re_malloc (regmatch_t, nregs); + if (BE (pmatch == NULL, 0)) + { + rval = -2; + goto out; + } + + result = re_search_internal (bufp, string, length, start, last_start, stop, + nregs, pmatch, eflags); + + rval = 0; + + /* I hope we needn't fill their regs with -1's when no match was found. */ + if (result != REG_NOERROR) + rval = result == REG_NOMATCH ? -1 : -2; + else if (regs != NULL) + { + /* If caller wants register contents data back, copy them. */ + bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, + bufp->regs_allocated); + if (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0)) + rval = -2; + } + + if (BE (rval == 0, 1)) + { + if (ret_len) + { + assert (pmatch[0].rm_so == start); + rval = pmatch[0].rm_eo - start; + } + else + rval = pmatch[0].rm_so; + } + re_free (pmatch); + out: + __libc_lock_unlock (dfa->lock); + return rval; +} + +static unsigned +re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, + int regs_allocated) +{ + int rval = REGS_REALLOCATE; + Idx i; + Idx need_regs = nregs + 1; + /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code + uses. */ + + /* Have the register data arrays been allocated? */ + if (regs_allocated == REGS_UNALLOCATED) + { /* No. So allocate them with malloc. */ + regs->start = re_malloc (regoff_t, need_regs); + if (BE (regs->start == NULL, 0)) + return REGS_UNALLOCATED; + regs->end = re_malloc (regoff_t, need_regs); + if (BE (regs->end == NULL, 0)) + { + re_free (regs->start); + return REGS_UNALLOCATED; + } + regs->num_regs = need_regs; + } + else if (regs_allocated == REGS_REALLOCATE) + { /* Yes. If we need more elements than were already + allocated, reallocate them. If we need fewer, just + leave it alone. */ + if (BE (need_regs > regs->num_regs, 0)) + { + regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); + regoff_t *new_end; + if (BE (new_start == NULL, 0)) + return REGS_UNALLOCATED; + new_end = re_realloc (regs->end, regoff_t, need_regs); + if (BE (new_end == NULL, 0)) + { + re_free (new_start); + return REGS_UNALLOCATED; + } + regs->start = new_start; + regs->end = new_end; + regs->num_regs = need_regs; + } + } + else + { + assert (regs_allocated == REGS_FIXED); + /* This function may not be called with REGS_FIXED and nregs too big. */ + assert (regs->num_regs >= nregs); + rval = REGS_FIXED; + } + + /* Copy the regs. */ + for (i = 0; i < nregs; ++i) + { + regs->start[i] = pmatch[i].rm_so; + regs->end[i] = pmatch[i].rm_eo; + } + for ( ; i < regs->num_regs; ++i) + regs->start[i] = regs->end[i] = -1; + + return rval; +} + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use + this memory for recording register information. STARTS and ENDS + must be allocated using the malloc library routine, and must each + be at least NUM_REGS * sizeof (regoff_t) bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ + +void +re_set_registers (bufp, regs, num_regs, starts, ends) + struct re_pattern_buffer *bufp; + struct re_registers *regs; + __re_size_t num_regs; + regoff_t *starts, *ends; +{ + if (num_regs) + { + bufp->regs_allocated = REGS_REALLOCATE; + regs->num_regs = num_regs; + regs->start = starts; + regs->end = ends; + } + else + { + bufp->regs_allocated = REGS_UNALLOCATED; + regs->num_regs = 0; + regs->start = regs->end = NULL; + } +} +#ifdef _LIBC +weak_alias (__re_set_registers, re_set_registers) +#endif + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC +int +# ifdef _LIBC +weak_function +# endif +re_exec (s) + const char *s; +{ + return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); +} +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. */ + +/* Searches for a compiled pattern PREG in the string STRING, whose + length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same + meaning as with regexec. LAST_START is START + RANGE, where + START and RANGE have the same meaning as with re_search. + Return REG_NOERROR if we find a match, and REG_NOMATCH if not, + otherwise return the error code. + Note: We assume front end functions already check ranges. + (0 <= LAST_START && LAST_START <= LENGTH) */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_search_internal (const regex_t *preg, + const char *string, Idx length, + Idx start, Idx last_start, Idx stop, + size_t nmatch, regmatch_t pmatch[], + int eflags) +{ + reg_errcode_t err; + const re_dfa_t *dfa = preg->buffer; + Idx left_lim, right_lim; + int incr; + bool fl_longest_match; + int match_kind; + Idx match_first; + Idx match_last = REG_MISSING; + Idx extra_nmatch; + bool sb; + int ch; +#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) + re_match_context_t mctx = { .dfa = dfa }; +#else + re_match_context_t mctx; +#endif + char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate + && start != last_start && !preg->can_be_null) + ? preg->fastmap : NULL); + RE_TRANSLATE_TYPE t = preg->translate; + +#if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) + memset (&mctx, '\0', sizeof (re_match_context_t)); + mctx.dfa = dfa; +#endif + + extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; + nmatch -= extra_nmatch; + + /* Check if the DFA haven't been compiled. */ + if (BE (preg->used == 0 || dfa->init_state == NULL + || dfa->init_state_word == NULL || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL, 0)) + return REG_NOMATCH; + +#ifdef DEBUG + /* We assume front-end functions already check them. */ + assert (0 <= last_start && last_start <= length); +#endif + + /* If initial states with non-begbuf contexts have no elements, + the regex must be anchored. If preg->newline_anchor is set, + we'll never use init_state_nl, so do not check it. */ + if (dfa->init_state->nodes.nelem == 0 + && dfa->init_state_word->nodes.nelem == 0 + && (dfa->init_state_nl->nodes.nelem == 0 + || !preg->newline_anchor)) + { + if (start != 0 && last_start != 0) + return REG_NOMATCH; + start = last_start = 0; + } + + /* We must check the longest matching, if nmatch > 0. */ + fl_longest_match = (nmatch != 0 || dfa->nbackref); + + err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, + preg->translate, (preg->syntax & RE_ICASE) != 0, + dfa); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + mctx.input.stop = stop; + mctx.input.raw_stop = stop; + mctx.input.newline_anchor = preg->newline_anchor; + + err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + /* We will log all the DFA states through which the dfa pass, + if nmatch > 1, or this dfa has "multibyte node", which is a + back-reference or a node which can accept multibyte character or + multi character collating element. */ + if (nmatch > 1 || dfa->has_mb_node) + { + /* Avoid overflow. */ + if (BE ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) + <= mctx.input.bufs_len), 0)) + { + err = REG_ESPACE; + goto free_return; + } + + mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); + if (BE (mctx.state_log == NULL, 0)) + { + err = REG_ESPACE; + goto free_return; + } + } + else + mctx.state_log = NULL; + + match_first = start; + mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF; + + /* Check incrementally whether the input string matches. */ + incr = (last_start < start) ? -1 : 1; + left_lim = (last_start < start) ? last_start : start; + right_lim = (last_start < start) ? start : last_start; + sb = dfa->mb_cur_max == 1; + match_kind = + (fastmap + ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) + | (start <= last_start ? 2 : 0) + | (t != NULL ? 1 : 0)) + : 8); + + for (;; match_first += incr) + { + err = REG_NOMATCH; + if (match_first < left_lim || right_lim < match_first) + goto free_return; + + /* Advance as rapidly as possible through the string, until we + find a plausible place to start matching. This may be done + with varying efficiency, so there are various possibilities: + only the most common of them are specialized, in order to + save on code size. We use a switch statement for speed. */ + switch (match_kind) + { + case 8: + /* No fastmap. */ + break; + + case 7: + /* Fastmap with single-byte translation, match forward. */ + while (BE (match_first < right_lim, 1) + && !fastmap[t[(unsigned char) string[match_first]]]) + ++match_first; + goto forward_match_found_start_or_reached_end; + + case 6: + /* Fastmap without translation, match forward. */ + while (BE (match_first < right_lim, 1) + && !fastmap[(unsigned char) string[match_first]]) + ++match_first; + + forward_match_found_start_or_reached_end: + if (BE (match_first == right_lim, 0)) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (!fastmap[t ? t[ch] : ch]) + goto free_return; + } + break; + + case 4: + case 5: + /* Fastmap without multi-byte translation, match backwards. */ + while (match_first >= left_lim) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (fastmap[t ? t[ch] : ch]) + break; + --match_first; + } + if (match_first < left_lim) + goto free_return; + break; + + default: + /* In this case, we can't determine easily the current byte, + since it might be a component byte of a multibyte + character. Then we use the constructed buffer instead. */ + for (;;) + { + /* If MATCH_FIRST is out of the valid range, reconstruct the + buffers. */ + __re_size_t offset = match_first - mctx.input.raw_mbs_idx; + if (BE (offset >= (__re_size_t) mctx.input.valid_raw_len, 0)) + { + err = re_string_reconstruct (&mctx.input, match_first, + eflags); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + offset = match_first - mctx.input.raw_mbs_idx; + } + /* If MATCH_FIRST is out of the buffer, leave it as '\0'. + Note that MATCH_FIRST must not be smaller than 0. */ + ch = (match_first >= length + ? 0 : re_string_byte_at (&mctx.input, offset)); + if (fastmap[ch]) + break; + match_first += incr; + if (match_first < left_lim || match_first > right_lim) + { + err = REG_NOMATCH; + goto free_return; + } + } + break; + } + + /* Reconstruct the buffers so that the matcher can assume that + the matching starts from the beginning of the buffer. */ + err = re_string_reconstruct (&mctx.input, match_first, eflags); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + +#ifdef RE_ENABLE_I18N + /* Don't consider this char as a possible match start if it part, + yet isn't the head, of a multibyte character. */ + if (!sb && !re_string_first_byte (&mctx.input, 0)) + continue; +#endif + + /* It seems to be appropriate one, then use the matcher. */ + /* We assume that the matching starts from 0. */ + mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; + match_last = check_matching (&mctx, fl_longest_match, + start <= last_start ? &match_first : NULL); + if (match_last != REG_MISSING) + { + if (BE (match_last == REG_ERROR, 0)) + { + err = REG_ESPACE; + goto free_return; + } + else + { + mctx.match_last = match_last; + if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) + { + re_dfastate_t *pstate = mctx.state_log[match_last]; + mctx.last_node = check_halt_state_context (&mctx, pstate, + match_last); + } + if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) + || dfa->nbackref) + { + err = prune_impossible_nodes (&mctx); + if (err == REG_NOERROR) + break; + if (BE (err != REG_NOMATCH, 0)) + goto free_return; + match_last = REG_MISSING; + } + else + break; /* We found a match. */ + } + } + + match_ctx_clean (&mctx); + } + +#ifdef DEBUG + assert (match_last != REG_MISSING); + assert (err == REG_NOERROR); +#endif + + /* Set pmatch[] if we need. */ + if (nmatch > 0) + { + Idx reg_idx; + + /* Initialize registers. */ + for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) + pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; + + /* Set the points where matching start/end. */ + pmatch[0].rm_so = 0; + pmatch[0].rm_eo = mctx.match_last; + /* FIXME: This function should fail if mctx.match_last exceeds + the maximum possible regoff_t value. We need a new error + code REG_OVERFLOW. */ + + if (!preg->no_sub && nmatch > 1) + { + err = set_regs (preg, &mctx, nmatch, pmatch, + dfa->has_plural_match && dfa->nbackref > 0); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + + /* At last, add the offset to each register, since we slid + the buffers so that we could assume that the matching starts + from 0. */ + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so != -1) + { +#ifdef RE_ENABLE_I18N + if (BE (mctx.input.offsets_needed != 0, 0)) + { + pmatch[reg_idx].rm_so = + (pmatch[reg_idx].rm_so == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_so]); + pmatch[reg_idx].rm_eo = + (pmatch[reg_idx].rm_eo == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_eo]); + } +#else + assert (mctx.input.offsets_needed == 0); +#endif + pmatch[reg_idx].rm_so += match_first; + pmatch[reg_idx].rm_eo += match_first; + } + for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) + { + pmatch[nmatch + reg_idx].rm_so = -1; + pmatch[nmatch + reg_idx].rm_eo = -1; + } + + if (dfa->subexp_map) + for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) + if (dfa->subexp_map[reg_idx] != reg_idx) + { + pmatch[reg_idx + 1].rm_so + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; + pmatch[reg_idx + 1].rm_eo + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; + } + } + + free_return: + re_free (mctx.state_log); + if (dfa->nbackref) + match_ctx_free (&mctx); + re_string_destruct (&mctx.input); + return err; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +prune_impossible_nodes (re_match_context_t *mctx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx halt_node, match_last; + reg_errcode_t ret; + re_dfastate_t **sifted_states; + re_dfastate_t **lim_states = NULL; + re_sift_context_t sctx; +#ifdef DEBUG + assert (mctx->state_log != NULL); +#endif + match_last = mctx->match_last; + halt_node = mctx->last_node; + + /* Avoid overflow. */ + if (BE (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= match_last, 0)) + return REG_ESPACE; + + sifted_states = re_malloc (re_dfastate_t *, match_last + 1); + if (BE (sifted_states == NULL, 0)) + { + ret = REG_ESPACE; + goto free_return; + } + if (dfa->nbackref) + { + lim_states = re_malloc (re_dfastate_t *, match_last + 1); + if (BE (lim_states == NULL, 0)) + { + ret = REG_ESPACE; + goto free_return; + } + while (1) + { + memset (lim_states, '\0', + sizeof (re_dfastate_t *) * (match_last + 1)); + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, + match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (BE (ret != REG_NOERROR, 0)) + goto free_return; + if (sifted_states[0] != NULL || lim_states[0] != NULL) + break; + do + { + --match_last; + if (! REG_VALID_INDEX (match_last)) + { + ret = REG_NOMATCH; + goto free_return; + } + } while (mctx->state_log[match_last] == NULL + || !mctx->state_log[match_last]->halt); + halt_node = check_halt_state_context (mctx, + mctx->state_log[match_last], + match_last); + } + ret = merge_state_array (dfa, sifted_states, lim_states, + match_last + 1); + re_free (lim_states); + lim_states = NULL; + if (BE (ret != REG_NOERROR, 0)) + goto free_return; + } + else + { + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (BE (ret != REG_NOERROR, 0)) + goto free_return; + if (sifted_states[0] == NULL) + { + ret = REG_NOMATCH; + goto free_return; + } + } + re_free (mctx->state_log); + mctx->state_log = sifted_states; + sifted_states = NULL; + mctx->last_node = halt_node; + mctx->match_last = match_last; + ret = REG_NOERROR; + free_return: + re_free (sifted_states); + re_free (lim_states); + return ret; +} + +/* Acquire an initial state and return it. + We must select appropriate initial state depending on the context, + since initial states may have constraints like "\<", "^", etc.. */ + +static inline re_dfastate_t * +__attribute__ ((always_inline)) internal_function +acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, + Idx idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + if (dfa->init_state->has_constraint) + { + unsigned int context; + context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return dfa->init_state_word; + else if (IS_ORDINARY_CONTEXT (context)) + return dfa->init_state; + else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_begbuf; + else if (IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_nl; + else if (IS_BEGBUF_CONTEXT (context)) + { + /* It is relatively rare case, then calculate on demand. */ + return re_acquire_state_context (err, dfa, + dfa->init_state->entrance_nodes, + context); + } + else + /* Must not happen? */ + return dfa->init_state; + } + else + return dfa->init_state; +} + +/* Check whether the regular expression match input string INPUT or not, + and return the index where the matching end. Return REG_MISSING if + there is no match, and return REG_ERROR in case of an error. + FL_LONGEST_MATCH means we want the POSIX longest matching. + If P_MATCH_FIRST is not NULL, and the match fails, it is set to the + next place where we may want to try matching. + Note that the matcher assumes that the matching starts from the current + index of the buffer. */ + +static Idx +internal_function __attribute_warn_unused_result__ +check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx match = 0; + Idx match_last = REG_MISSING; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + re_dfastate_t *cur_state; + bool at_init_state = p_match_first != NULL; + Idx next_start_idx = cur_str_idx; + + err = REG_NOERROR; + cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); + /* An initial state must not be NULL (invalid). */ + if (BE (cur_state == NULL, 0)) + { + assert (err == REG_ESPACE); + return REG_ERROR; + } + + if (mctx->state_log != NULL) + { + mctx->state_log[cur_str_idx] = cur_state; + + /* Check OP_OPEN_SUBEXP in the initial state in case that we use them + later. E.g. Processing back references. */ + if (BE (dfa->nbackref, 0)) + { + at_init_state = false; + err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); + if (BE (err != REG_NOERROR, 0)) + return err; + + if (cur_state->has_backref) + { + err = transit_state_bkref (mctx, &cur_state->nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + } + + /* If the RE accepts NULL string. */ + if (BE (cur_state->halt, 0)) + { + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, cur_str_idx)) + { + if (!fl_longest_match) + return cur_str_idx; + else + { + match_last = cur_str_idx; + match = 1; + } + } + } + + while (!re_string_eoi (&mctx->input)) + { + re_dfastate_t *old_state = cur_state; + Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; + + if ((BE (next_char_idx >= mctx->input.bufs_len, 0) + && mctx->input.bufs_len < mctx->input.len) + || (BE (next_char_idx >= mctx->input.valid_len, 0) + && mctx->input.valid_len < mctx->input.len)) + { + err = extend_buffers (mctx, next_char_idx + 1); + if (BE (err != REG_NOERROR, 0)) + { + assert (err == REG_ESPACE); + return REG_ERROR; + } + } + + cur_state = transit_state (&err, mctx, cur_state); + if (mctx->state_log != NULL) + cur_state = merge_state_with_log (&err, mctx, cur_state); + + if (cur_state == NULL) + { + /* Reached the invalid state or an error. Try to recover a valid + state using the state log, if available and if we have not + already found a valid (even if not the longest) match. */ + if (BE (err != REG_NOERROR, 0)) + return REG_ERROR; + + if (mctx->state_log == NULL + || (match && !fl_longest_match) + || (cur_state = find_recover_state (&err, mctx)) == NULL) + break; + } + + if (BE (at_init_state, 0)) + { + if (old_state == cur_state) + next_start_idx = next_char_idx; + else + at_init_state = false; + } + + if (cur_state->halt) + { + /* Reached a halt state. + Check the halt state can satisfy the current context. */ + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, + re_string_cur_idx (&mctx->input))) + { + /* We found an appropriate halt state. */ + match_last = re_string_cur_idx (&mctx->input); + match = 1; + + /* We found a match, do not modify match_first below. */ + p_match_first = NULL; + if (!fl_longest_match) + break; + } + } + } + + if (p_match_first) + *p_match_first += next_start_idx; + + return match_last; +} + +/* Check NODE match the current context. */ + +static bool +internal_function +check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) +{ + re_token_type_t type = dfa->nodes[node].type; + unsigned int constraint = dfa->nodes[node].constraint; + if (type != END_OF_RE) + return false; + if (!constraint) + return true; + if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) + return false; + return true; +} + +/* Check the halt state STATE match the current context. + Return 0 if not match, if the node, STATE has, is a halt node and + match the context, return the node. */ + +static Idx +internal_function +check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx) +{ + Idx i; + unsigned int context; +#ifdef DEBUG + assert (state->halt); +#endif + context = re_string_context_at (&mctx->input, idx, mctx->eflags); + for (i = 0; i < state->nodes.nelem; ++i) + if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) + return state->nodes.elems[i]; + return 0; +} + +/* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA + corresponding to the DFA). + Return the destination node, and update EPS_VIA_NODES; + return REG_MISSING in case of errors. */ + +static Idx +internal_function +proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, + Idx *pidx, Idx node, re_node_set *eps_via_nodes, + struct re_fail_stack_t *fs) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx i; + bool ok; + if (IS_EPSILON_NODE (dfa->nodes[node].type)) + { + re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; + re_node_set *edests = &dfa->edests[node]; + Idx dest_node; + ok = re_node_set_insert (eps_via_nodes, node); + if (BE (! ok, 0)) + return REG_ERROR; + /* Pick up a valid destination, or return REG_MISSING if none + is found. */ + for (dest_node = REG_MISSING, i = 0; i < edests->nelem; ++i) + { + Idx candidate = edests->elems[i]; + if (!re_node_set_contains (cur_nodes, candidate)) + continue; + if (dest_node == REG_MISSING) + dest_node = candidate; + + else + { + /* In order to avoid infinite loop like "(a*)*", return the second + epsilon-transition if the first was already considered. */ + if (re_node_set_contains (eps_via_nodes, dest_node)) + return candidate; + + /* Otherwise, push the second epsilon-transition on the fail stack. */ + else if (fs != NULL + && push_fail_stack (fs, *pidx, candidate, nregs, regs, + eps_via_nodes)) + return REG_ERROR; + + /* We know we are going to exit. */ + break; + } + } + return dest_node; + } + else + { + Idx naccepted = 0; + re_token_type_t type = dfa->nodes[node].type; + +#ifdef RE_ENABLE_I18N + if (dfa->nodes[node].accept_mb) + naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); + else +#endif /* RE_ENABLE_I18N */ + if (type == OP_BACK_REF) + { + Idx subexp_idx = dfa->nodes[node].opr.idx + 1; + naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; + if (fs != NULL) + { + if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) + return REG_MISSING; + else if (naccepted) + { + char *buf = (char *) re_string_get_buffer (&mctx->input); + if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, + naccepted) != 0) + return REG_MISSING; + } + } + + if (naccepted == 0) + { + Idx dest_node; + ok = re_node_set_insert (eps_via_nodes, node); + if (BE (! ok, 0)) + return REG_ERROR; + dest_node = dfa->edests[node].elems[0]; + if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node)) + return dest_node; + } + } + + if (naccepted != 0 + || check_node_accept (mctx, dfa->nodes + node, *pidx)) + { + Idx dest_node = dfa->nexts[node]; + *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; + if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL + || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node))) + return REG_MISSING; + re_node_set_empty (eps_via_nodes); + return dest_node; + } + } + return REG_MISSING; +} + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, + Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes) +{ + reg_errcode_t err; + Idx num = fs->num++; + if (fs->num == fs->alloc) + { + struct re_fail_stack_ent_t *new_array; + new_array = realloc (fs->stack, (sizeof (struct re_fail_stack_ent_t) + * fs->alloc * 2)); + if (new_array == NULL) + return REG_ESPACE; + fs->alloc *= 2; + fs->stack = new_array; + } + fs->stack[num].idx = str_idx; + fs->stack[num].node = dest_node; + fs->stack[num].regs = re_malloc (regmatch_t, nregs); + if (fs->stack[num].regs == NULL) + return REG_ESPACE; + memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); + err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); + return err; +} + +static Idx +internal_function +pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, + regmatch_t *regs, re_node_set *eps_via_nodes) +{ + Idx num = --fs->num; + assert (REG_VALID_INDEX (num)); + *pidx = fs->stack[num].idx; + memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); + re_node_set_free (eps_via_nodes); + re_free (fs->stack[num].regs); + *eps_via_nodes = fs->stack[num].eps_via_nodes; + return fs->stack[num].node; +} + +/* Set the positions where the subexpressions are starts/ends to registers + PMATCH. + Note: We assume that pmatch[0] is already set, and + pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, + regmatch_t *pmatch, bool fl_backtrack) +{ + const re_dfa_t *dfa = preg->buffer; + Idx idx, cur_node; + re_node_set eps_via_nodes; + struct re_fail_stack_t *fs; + struct re_fail_stack_t fs_body = { 0, 2, NULL }; + regmatch_t *prev_idx_match; + bool prev_idx_match_malloced = false; + +#ifdef DEBUG + assert (nmatch > 1); + assert (mctx->state_log != NULL); +#endif + if (fl_backtrack) + { + fs = &fs_body; + fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); + if (fs->stack == NULL) + return REG_ESPACE; + } + else + fs = NULL; + + cur_node = dfa->init_node; + re_node_set_init_empty (&eps_via_nodes); + + if (__libc_use_alloca (nmatch * sizeof (regmatch_t))) + prev_idx_match = (regmatch_t *) alloca (nmatch * sizeof (regmatch_t)); + else + { + prev_idx_match = re_malloc (regmatch_t, nmatch); + if (prev_idx_match == NULL) + { + free_fail_stack_return (fs); + return REG_ESPACE; + } + prev_idx_match_malloced = true; + } + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + + for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) + { + update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); + + if (idx == pmatch[0].rm_eo && cur_node == mctx->last_node) + { + Idx reg_idx; + if (fs) + { + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) + break; + if (reg_idx == nmatch) + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return free_fail_stack_return (fs); + } + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + &eps_via_nodes); + } + else + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return REG_NOERROR; + } + } + + /* Proceed to next node. */ + cur_node = proceed_next_node (mctx, nmatch, pmatch, &idx, cur_node, + &eps_via_nodes, fs); + + if (BE (! REG_VALID_INDEX (cur_node), 0)) + { + if (BE (cur_node == REG_ERROR, 0)) + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + free_fail_stack_return (fs); + return REG_ESPACE; + } + if (fs) + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + &eps_via_nodes); + else + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return REG_NOMATCH; + } + } + } + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return free_fail_stack_return (fs); +} + +static reg_errcode_t +internal_function +free_fail_stack_return (struct re_fail_stack_t *fs) +{ + if (fs) + { + Idx fs_idx; + for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) + { + re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); + re_free (fs->stack[fs_idx].regs); + } + re_free (fs->stack); + } + return REG_NOERROR; +} + +static void +internal_function +update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) +{ + int type = dfa->nodes[cur_node].type; + if (type == OP_OPEN_SUBEXP) + { + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + + /* We are at the first node of this sub expression. */ + if (reg_num < nmatch) + { + pmatch[reg_num].rm_so = cur_idx; + pmatch[reg_num].rm_eo = -1; + } + } + else if (type == OP_CLOSE_SUBEXP) + { + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + if (reg_num < nmatch) + { + /* We are at the last node of this sub expression. */ + if (pmatch[reg_num].rm_so < cur_idx) + { + pmatch[reg_num].rm_eo = cur_idx; + /* This is a non-empty match or we are not inside an optional + subexpression. Accept this right away. */ + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + } + else + { + if (dfa->nodes[cur_node].opt_subexp + && prev_idx_match[reg_num].rm_so != -1) + /* We transited through an empty match for an optional + subexpression, like (a?)*, and this is not the subexp's + first match. Copy back the old content of the registers + so that matches of an inner subexpression are undone as + well, like in ((a?))*. */ + memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); + else + /* We completed a subexpression, but it may be part of + an optional one, so do not update PREV_IDX_MATCH. */ + pmatch[reg_num].rm_eo = cur_idx; + } + } + } +} + +/* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 + and sift the nodes in each states according to the following rules. + Updated state_log will be wrote to STATE_LOG. + + Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... + 1. When STR_IDX == MATCH_LAST(the last index in the state_log): + If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to + the LAST_NODE, we throw away the node 'a'. + 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts + string 's' and transit to 'b': + i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw + away the node 'a'. + ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is + thrown away, we throw away the node 'a'. + 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': + i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the + node 'a'. + ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, + we throw away the node 'a'. */ + +#define STATE_NODE_CONTAINS(state,node) \ + ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) + +static reg_errcode_t +internal_function +sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) +{ + reg_errcode_t err; + int null_cnt = 0; + Idx str_idx = sctx->last_str_idx; + re_node_set cur_dest; + +#ifdef DEBUG + assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); +#endif + + /* Build sifted state_log[str_idx]. It has the nodes which can epsilon + transit to the last_node and the last_node itself. */ + err = re_node_set_init_1 (&cur_dest, sctx->last_node); + if (BE (err != REG_NOERROR, 0)) + return err; + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + /* Then check each states in the state_log. */ + while (str_idx > 0) + { + /* Update counters. */ + null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; + if (null_cnt > mctx->max_mb_elem_len) + { + memset (sctx->sifted_states, '\0', + sizeof (re_dfastate_t *) * str_idx); + re_node_set_free (&cur_dest); + return REG_NOERROR; + } + re_node_set_empty (&cur_dest); + --str_idx; + + if (mctx->state_log[str_idx]) + { + err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + + /* Add all the nodes which satisfy the following conditions: + - It can epsilon transit to a node in CUR_DEST. + - It is in CUR_SRC. + And update state_log. */ + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + err = REG_NOERROR; + free_return: + re_node_set_free (&cur_dest); + return err; +} + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, re_node_set *cur_dest) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; + Idx i; + + /* Then build the next sifted state. + We build the next sifted state on 'cur_dest', and update + 'sifted_states[str_idx]' with 'cur_dest'. + Note: + 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. + 'cur_src' points the node_set of the old 'state_log[str_idx]' + (with the epsilon nodes pre-filtered out). */ + for (i = 0; i < cur_src->nelem; i++) + { + Idx prev_node = cur_src->elems[i]; + int naccepted = 0; + bool ok; + +#ifdef DEBUG + re_token_type_t type = dfa->nodes[prev_node].type; + assert (!IS_EPSILON_NODE (type)); +#endif +#ifdef RE_ENABLE_I18N + /* If the node may accept "multi byte". */ + if (dfa->nodes[prev_node].accept_mb) + naccepted = sift_states_iter_mb (mctx, sctx, prev_node, + str_idx, sctx->last_str_idx); +#endif /* RE_ENABLE_I18N */ + + /* We don't check backreferences here. + See update_cur_sifted_state(). */ + if (!naccepted + && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) + && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], + dfa->nexts[prev_node])) + naccepted = 1; + + if (naccepted == 0) + continue; + + if (sctx->limits.nelem) + { + Idx to_idx = str_idx + naccepted; + if (check_dst_limits (mctx, &sctx->limits, + dfa->nexts[prev_node], to_idx, + prev_node, str_idx)) + continue; + } + ok = re_node_set_insert (cur_dest, prev_node); + if (BE (! ok, 0)) + return REG_ESPACE; + } + + return REG_NOERROR; +} + +/* Helper functions. */ + +static reg_errcode_t +internal_function +clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) +{ + Idx top = mctx->state_log_top; + + if ((next_state_log_idx >= mctx->input.bufs_len + && mctx->input.bufs_len < mctx->input.len) + || (next_state_log_idx >= mctx->input.valid_len + && mctx->input.valid_len < mctx->input.len)) + { + reg_errcode_t err; + err = extend_buffers (mctx, next_state_log_idx + 1); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + if (top < next_state_log_idx) + { + memset (mctx->state_log + top + 1, '\0', + sizeof (re_dfastate_t *) * (next_state_log_idx - top)); + mctx->state_log_top = next_state_log_idx; + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, + re_dfastate_t **src, Idx num) +{ + Idx st_idx; + reg_errcode_t err; + for (st_idx = 0; st_idx < num; ++st_idx) + { + if (dst[st_idx] == NULL) + dst[st_idx] = src[st_idx]; + else if (src[st_idx] != NULL) + { + re_node_set merged_set; + err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, + &src[st_idx]->nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); + re_node_set_free (&merged_set); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *dest_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + const re_node_set *candidates; + candidates = ((mctx->state_log[str_idx] == NULL) ? NULL + : &mctx->state_log[str_idx]->nodes); + + if (dest_nodes->nelem == 0) + sctx->sifted_states[str_idx] = NULL; + else + { + if (candidates) + { + /* At first, add the nodes which can epsilon transit to a node in + DEST_NODE. */ + err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* Then, check the limitations in the current sift_context. */ + if (sctx->limits.nelem) + { + err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, + mctx->bkref_ents, str_idx); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + + sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + if (candidates && mctx->state_log[str_idx]->has_backref) + { + err = sift_states_bkref (mctx, sctx, str_idx, candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + reg_errcode_t err = REG_NOERROR; + Idx i; + + re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + + if (!state->inveclosure.alloc) + { + err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); + if (BE (err != REG_NOERROR, 0)) + return REG_ESPACE; + for (i = 0; i < dest_nodes->nelem; i++) + { + err = re_node_set_merge (&state->inveclosure, + dfa->inveclosures + dest_nodes->elems[i]); + if (BE (err != REG_NOERROR, 0)) + return REG_ESPACE; + } + } + return re_node_set_add_intersect (dest_nodes, candidates, + &state->inveclosure); +} + +static reg_errcode_t +internal_function +sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + Idx ecl_idx; + reg_errcode_t err; + re_node_set *inv_eclosure = dfa->inveclosures + node; + re_node_set except_nodes; + re_node_set_init_empty (&except_nodes); + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (cur_node == node) + continue; + if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) + { + Idx edst1 = dfa->edests[cur_node].elems[0]; + Idx edst2 = ((dfa->edests[cur_node].nelem > 1) + ? dfa->edests[cur_node].elems[1] : REG_MISSING); + if ((!re_node_set_contains (inv_eclosure, edst1) + && re_node_set_contains (dest_nodes, edst1)) + || (REG_VALID_NONZERO_INDEX (edst2) + && !re_node_set_contains (inv_eclosure, edst2) + && re_node_set_contains (dest_nodes, edst2))) + { + err = re_node_set_add_intersect (&except_nodes, candidates, + dfa->inveclosures + cur_node); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&except_nodes); + return err; + } + } + } + } + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (!re_node_set_contains (&except_nodes, cur_node)) + { + Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; + re_node_set_remove_at (dest_nodes, idx); + } + } + re_node_set_free (&except_nodes); + return REG_NOERROR; +} + +static bool +internal_function +check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx lim_idx, src_pos, dst_pos; + + Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); + Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = mctx->bkref_ents + limits->elems[lim_idx]; + subexp_idx = dfa->nodes[ent->node].opr.idx; + + dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, dst_node, dst_idx, + dst_bkref_idx); + src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, src_node, src_idx, + src_bkref_idx); + + /* In case of: + ( ) + ( ) + ( ) */ + if (src_pos == dst_pos) + continue; /* This is unrelated limitation. */ + else + return true; + } + return false; +} + +static int +internal_function +check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, + Idx subexp_idx, Idx from_node, Idx bkref_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *eclosures = dfa->eclosures + from_node; + Idx node_idx; + + /* Else, we are on the boundary: examine the nodes on the epsilon + closure. */ + for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) + { + Idx node = eclosures->elems[node_idx]; + switch (dfa->nodes[node].type) + { + case OP_BACK_REF: + if (bkref_idx != REG_MISSING) + { + struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; + do + { + Idx dst; + int cpos; + + if (ent->node != node) + continue; + + if (subexp_idx < BITSET_WORD_BITS + && !(ent->eps_reachable_subexps_map + & ((bitset_word_t) 1 << subexp_idx))) + continue; + + /* Recurse trying to reach the OP_OPEN_SUBEXP and + OP_CLOSE_SUBEXP cases below. But, if the + destination node is the same node as the source + node, don't recurse because it would cause an + infinite loop: a regex that exhibits this behavior + is ()\1*\1* */ + dst = dfa->edests[node].elems[0]; + if (dst == from_node) + { + if (boundaries & 1) + return -1; + else /* if (boundaries & 2) */ + return 0; + } + + cpos = + check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + dst, bkref_idx); + if (cpos == -1 /* && (boundaries & 1) */) + return -1; + if (cpos == 0 && (boundaries & 2)) + return 0; + + if (subexp_idx < BITSET_WORD_BITS) + ent->eps_reachable_subexps_map + &= ~((bitset_word_t) 1 << subexp_idx); + } + while (ent++->more); + } + break; + + case OP_OPEN_SUBEXP: + if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) + return -1; + break; + + case OP_CLOSE_SUBEXP: + if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) + return 0; + break; + + default: + break; + } + } + + return (boundaries & 2) ? 1 : 0; +} + +static int +internal_function +check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, + Idx subexp_idx, Idx from_node, Idx str_idx, + Idx bkref_idx) +{ + struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; + int boundaries; + + /* If we are outside the range of the subexpression, return -1 or 1. */ + if (str_idx < lim->subexp_from) + return -1; + + if (lim->subexp_to < str_idx) + return 1; + + /* If we are within the subexpression, return 0. */ + boundaries = (str_idx == lim->subexp_from); + boundaries |= (str_idx == lim->subexp_to) << 1; + if (boundaries == 0) + return 0; + + /* Else, examine epsilon closure. */ + return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + from_node, bkref_idx); +} + +/* Check the limitations of sub expressions LIMITS, and remove the nodes + which are against limitations from DEST_NODES. */ + +static reg_errcode_t +internal_function +check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates, re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, Idx str_idx) +{ + reg_errcode_t err; + Idx node_idx, lim_idx; + + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = bkref_ents + limits->elems[lim_idx]; + + if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) + continue; /* This is unrelated limitation. */ + + subexp_idx = dfa->nodes[ent->node].opr.idx; + if (ent->subexp_to == str_idx) + { + Idx ops_node = REG_MISSING; + Idx cls_node = REG_MISSING; + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_OPEN_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + ops_node = node; + else if (type == OP_CLOSE_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + cls_node = node; + } + + /* Check the limitation of the open subexpression. */ + /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ + if (REG_VALID_INDEX (ops_node)) + { + err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, + candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + /* Check the limitation of the close subexpression. */ + if (REG_VALID_INDEX (cls_node)) + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + if (!re_node_set_contains (dfa->inveclosures + node, + cls_node) + && !re_node_set_contains (dfa->eclosures + node, + cls_node)) + { + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + --node_idx; + } + } + } + else /* (ent->subexp_to != str_idx) */ + { + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) + { + if (subexp_idx != dfa->nodes[node].opr.idx) + continue; + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx node_idx, node; + re_sift_context_t local_sctx; + Idx first_idx = search_cur_bkref_entry (mctx, str_idx); + + if (first_idx == REG_MISSING) + return REG_NOERROR; + + local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ + + for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) + { + Idx enabled_idx; + re_token_type_t type; + struct re_backref_cache_entry *entry; + node = candidates->elems[node_idx]; + type = dfa->nodes[node].type; + /* Avoid infinite loop for the REs like "()\1+". */ + if (node == sctx->last_node && str_idx == sctx->last_str_idx) + continue; + if (type != OP_BACK_REF) + continue; + + entry = mctx->bkref_ents + first_idx; + enabled_idx = first_idx; + do + { + Idx subexp_len; + Idx to_idx; + Idx dst_node; + bool ok; + re_dfastate_t *cur_state; + + if (entry->node != node) + continue; + subexp_len = entry->subexp_to - entry->subexp_from; + to_idx = str_idx + subexp_len; + dst_node = (subexp_len ? dfa->nexts[node] + : dfa->edests[node].elems[0]); + + if (to_idx > sctx->last_str_idx + || sctx->sifted_states[to_idx] == NULL + || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) + || check_dst_limits (mctx, &sctx->limits, node, + str_idx, dst_node, to_idx)) + continue; + + if (local_sctx.sifted_states == NULL) + { + local_sctx = *sctx; + err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + local_sctx.last_node = node; + local_sctx.last_str_idx = str_idx; + ok = re_node_set_insert (&local_sctx.limits, enabled_idx); + if (BE (! ok, 0)) + { + err = REG_ESPACE; + goto free_return; + } + cur_state = local_sctx.sifted_states[str_idx]; + err = sift_states_backward (mctx, &local_sctx); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + if (sctx->limited_states != NULL) + { + err = merge_state_array (dfa, sctx->limited_states, + local_sctx.sifted_states, + str_idx + 1); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + local_sctx.sifted_states[str_idx] = cur_state; + re_node_set_remove (&local_sctx.limits, enabled_idx); + + /* mctx->bkref_ents may have changed, reload the pointer. */ + entry = mctx->bkref_ents + enabled_idx; + } + while (enabled_idx++, entry++->more); + } + err = REG_NOERROR; + free_return: + if (local_sctx.sifted_states != NULL) + { + re_node_set_free (&local_sctx.limits); + } + + return err; +} + + +#ifdef RE_ENABLE_I18N +static int +internal_function +sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + int naccepted; + /* Check the node can accept "multi byte". */ + naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); + if (naccepted > 0 && str_idx + naccepted <= max_str_idx && + !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], + dfa->nexts[node_idx])) + /* The node can't accept the "multi byte", or the + destination was already thrown away, then the node + could't accept the current input "multi byte". */ + naccepted = 0; + /* Otherwise, it is sure that the node could accept + 'naccepted' bytes input. */ + return naccepted; +} +#endif /* RE_ENABLE_I18N */ + + +/* Functions for state transition. */ + +/* Return the next state to which the current state STATE will transit by + accepting the current input byte, and update STATE_LOG if necessary. + If STATE can accept a multibyte char/collating element/back reference + update the destination of STATE_LOG. */ + +static re_dfastate_t * +internal_function __attribute_warn_unused_result__ +transit_state (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + re_dfastate_t **trtable; + unsigned char ch; + +#ifdef RE_ENABLE_I18N + /* If the current state can accept multibyte. */ + if (BE (state->accept_mb, 0)) + { + *err = transit_state_mb (mctx, state); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + } +#endif /* RE_ENABLE_I18N */ + + /* Then decide the next state with the single byte. */ +#if 0 + if (0) + /* don't use transition table */ + return transit_state_sb (err, mctx, state); +#endif + + /* Use transition table */ + ch = re_string_fetch_byte (&mctx->input); + for (;;) + { + trtable = state->trtable; + if (BE (trtable != NULL, 1)) + return trtable[ch]; + + trtable = state->word_trtable; + if (BE (trtable != NULL, 1)) + { + unsigned int context; + context + = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return trtable[ch + SBC_MAX]; + else + return trtable[ch]; + } + + if (!build_trtable (mctx->dfa, state)) + { + *err = REG_ESPACE; + return NULL; + } + + /* Retry, we now have a transition table. */ + } +} + +/* Update the state_log if we need */ +static re_dfastate_t * +internal_function +merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *next_state) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx cur_idx = re_string_cur_idx (&mctx->input); + + if (cur_idx > mctx->state_log_top) + { + mctx->state_log[cur_idx] = next_state; + mctx->state_log_top = cur_idx; + } + else if (mctx->state_log[cur_idx] == 0) + { + mctx->state_log[cur_idx] = next_state; + } + else + { + re_dfastate_t *pstate; + unsigned int context; + re_node_set next_nodes, *log_nodes, *table_nodes = NULL; + /* If (state_log[cur_idx] != 0), it implies that cur_idx is + the destination of a multibyte char/collating element/ + back reference. Then the next state is the union set of + these destinations and the results of the transition table. */ + pstate = mctx->state_log[cur_idx]; + log_nodes = pstate->entrance_nodes; + if (next_state != NULL) + { + table_nodes = next_state->entrance_nodes; + *err = re_node_set_init_union (&next_nodes, table_nodes, + log_nodes); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + } + else + next_nodes = *log_nodes; + /* Note: We already add the nodes of the initial state, + then we don't need to add them here. */ + + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + next_state = mctx->state_log[cur_idx] + = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + if (table_nodes != NULL) + re_node_set_free (&next_nodes); + } + + if (BE (dfa->nbackref, 0) && next_state != NULL) + { + /* Check OP_OPEN_SUBEXP in the current state in case that we use them + later. We must check them here, since the back references in the + next state might use them. */ + *err = check_subexp_matching_top (mctx, &next_state->nodes, + cur_idx); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + + /* If the next state has back references. */ + if (next_state->has_backref) + { + *err = transit_state_bkref (mctx, &next_state->nodes); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + next_state = mctx->state_log[cur_idx]; + } + } + + return next_state; +} + +/* Skip bytes in the input that correspond to part of a + multi-byte match, then look in the log for a state + from which to restart matching. */ +static re_dfastate_t * +internal_function +find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) +{ + re_dfastate_t *cur_state; + do + { + Idx max = mctx->state_log_top; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + do + { + if (++cur_str_idx > max) + return NULL; + re_string_skip_bytes (&mctx->input, 1); + } + while (mctx->state_log[cur_str_idx] == NULL); + + cur_state = merge_state_with_log (err, mctx, NULL); + } + while (*err == REG_NOERROR && cur_state == NULL); + return cur_state; +} + +/* Helper functions for transit_state. */ + +/* From the node set CUR_NODES, pick up the nodes whose types are + OP_OPEN_SUBEXP and which have corresponding back references in the regular + expression. And register them to use them later for evaluating the + corresponding back references. */ + +static reg_errcode_t +internal_function +check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx node_idx; + reg_errcode_t err; + + /* TODO: This isn't efficient. + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) + { + Idx node = cur_nodes->elems[node_idx]; + if (dfa->nodes[node].type == OP_OPEN_SUBEXP + && dfa->nodes[node].opr.idx < BITSET_WORD_BITS + && (dfa->used_bkref_map + & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) + { + err = match_ctx_add_subtop (mctx, node, str_idx); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + return REG_NOERROR; +} + +#if 0 +/* Return the next state to which the current state STATE will transit by + accepting the current input byte. */ + +static re_dfastate_t * +transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + const re_dfa_t *const dfa = mctx->dfa; + re_node_set next_nodes; + re_dfastate_t *next_state; + Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); + unsigned int context; + + *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) + { + Idx cur_node = state->nodes.elems[node_cnt]; + if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) + { + *err = re_node_set_merge (&next_nodes, + dfa->eclosures + dfa->nexts[cur_node]); + if (BE (*err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return NULL; + } + } + } + context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); + next_state = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + re_node_set_free (&next_nodes); + re_string_skip_bytes (&mctx->input, 1); + return next_state; +} +#endif + +#ifdef RE_ENABLE_I18N +static reg_errcode_t +internal_function +transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + + for (i = 0; i < pstate->nodes.nelem; ++i) + { + re_node_set dest_nodes, *new_nodes; + Idx cur_node_idx = pstate->nodes.elems[i]; + int naccepted; + Idx dest_idx; + unsigned int context; + re_dfastate_t *dest_state; + + if (!dfa->nodes[cur_node_idx].accept_mb) + continue; + + if (dfa->nodes[cur_node_idx].constraint) + { + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input), + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, + context)) + continue; + } + + /* How many bytes the node can accept? */ + naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, + re_string_cur_idx (&mctx->input)); + if (naccepted == 0) + continue; + + /* The node can accepts 'naccepted' bytes. */ + dest_idx = re_string_cur_idx (&mctx->input) + naccepted; + mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted + : mctx->max_mb_elem_len); + err = clean_state_log_if_needed (mctx, dest_idx); + if (BE (err != REG_NOERROR, 0)) + return err; +#ifdef DEBUG + assert (dfa->nexts[cur_node_idx] != REG_MISSING); +#endif + new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; + + dest_state = mctx->state_log[dest_idx]; + if (dest_state == NULL) + dest_nodes = *new_nodes; + else + { + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, new_nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + context = re_string_context_at (&mctx->input, dest_idx - 1, + mctx->eflags); + mctx->state_log[dest_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + if (dest_state != NULL) + re_node_set_free (&dest_nodes); + if (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0)) + return err; + } + return REG_NOERROR; +} +#endif /* RE_ENABLE_I18N */ + +static reg_errcode_t +internal_function +transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + for (i = 0; i < nodes->nelem; ++i) + { + Idx dest_str_idx, prev_nelem, bkc_idx; + Idx node_idx = nodes->elems[i]; + unsigned int context; + const re_token_t *node = dfa->nodes + node_idx; + re_node_set *new_dest_nodes; + + /* Check whether 'node' is a backreference or not. */ + if (node->type != OP_BACK_REF) + continue; + + if (node->constraint) + { + context = re_string_context_at (&mctx->input, cur_str_idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + continue; + } + + /* 'node' is a backreference. + Check the substring which the substring matched. */ + bkc_idx = mctx->nbkref_ents; + err = get_subexp (mctx, node_idx, cur_str_idx); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + /* And add the epsilon closures (which is 'new_dest_nodes') of + the backreference to appropriate state_log. */ +#ifdef DEBUG + assert (dfa->nexts[node_idx] != REG_MISSING); +#endif + for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) + { + Idx subexp_len; + re_dfastate_t *dest_state; + struct re_backref_cache_entry *bkref_ent; + bkref_ent = mctx->bkref_ents + bkc_idx; + if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) + continue; + subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; + new_dest_nodes = (subexp_len == 0 + ? dfa->eclosures + dfa->edests[node_idx].elems[0] + : dfa->eclosures + dfa->nexts[node_idx]); + dest_str_idx = (cur_str_idx + bkref_ent->subexp_to + - bkref_ent->subexp_from); + context = re_string_context_at (&mctx->input, dest_str_idx - 1, + mctx->eflags); + dest_state = mctx->state_log[dest_str_idx]; + prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 + : mctx->state_log[cur_str_idx]->nodes.nelem); + /* Add 'new_dest_node' to state_log. */ + if (dest_state == NULL) + { + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, new_dest_nodes, + context); + if (BE (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR, 0)) + goto free_return; + } + else + { + re_node_set dest_nodes; + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, + new_dest_nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&dest_nodes); + goto free_return; + } + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + re_node_set_free (&dest_nodes); + if (BE (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR, 0)) + goto free_return; + } + /* We need to check recursively if the backreference can epsilon + transit. */ + if (subexp_len == 0 + && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) + { + err = check_subexp_matching_top (mctx, new_dest_nodes, + cur_str_idx); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + err = transit_state_bkref (mctx, new_dest_nodes); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + } + } + err = REG_NOERROR; + free_return: + return err; +} + +/* Enumerate all the candidates which the backreference BKREF_NODE can match + at BKREF_STR_IDX, and register them by match_ctx_add_entry(). + Note that we might collect inappropriate candidates here. + However, the cost of checking them strictly here is too high, then we + delay these checking for prune_impossible_nodes(). */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx subexp_num, sub_top_idx; + const char *buf = (const char *) re_string_get_buffer (&mctx->input); + /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ + Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); + if (cache_idx != REG_MISSING) + { + const struct re_backref_cache_entry *entry + = mctx->bkref_ents + cache_idx; + do + if (entry->node == bkref_node) + return REG_NOERROR; /* We already checked it. */ + while (entry++->more); + } + + subexp_num = dfa->nodes[bkref_node].opr.idx; + + /* For each sub expression */ + for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) + { + reg_errcode_t err; + re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; + re_sub_match_last_t *sub_last; + Idx sub_last_idx, sl_str, bkref_str_off; + + if (dfa->nodes[sub_top->node].opr.idx != subexp_num) + continue; /* It isn't related. */ + + sl_str = sub_top->str_idx; + bkref_str_off = bkref_str_idx; + /* At first, check the last node of sub expressions we already + evaluated. */ + for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) + { + regoff_t sl_str_diff; + sub_last = sub_top->lasts[sub_last_idx]; + sl_str_diff = sub_last->str_idx - sl_str; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_diff > 0) + { + if (BE (bkref_str_off + sl_str_diff > mctx->input.valid_len, 0)) + { + /* Not enough chars for a successful match. */ + if (bkref_str_off + sl_str_diff > mctx->input.len) + break; + + err = clean_state_log_if_needed (mctx, + bkref_str_off + + sl_str_diff); + if (BE (err != REG_NOERROR, 0)) + return err; + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) + /* We don't need to search this sub expression any more. */ + break; + } + bkref_str_off += sl_str_diff; + sl_str += sl_str_diff; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + + /* Reload buf, since the preceding call might have reallocated + the buffer. */ + buf = (const char *) re_string_get_buffer (&mctx->input); + + if (err == REG_NOMATCH) + continue; + if (BE (err != REG_NOERROR, 0)) + return err; + } + + if (sub_last_idx < sub_top->nlasts) + continue; + if (sub_last_idx > 0) + ++sl_str; + /* Then, search for the other last nodes of the sub expression. */ + for (; sl_str <= bkref_str_idx; ++sl_str) + { + Idx cls_node; + regoff_t sl_str_off; + const re_node_set *nodes; + sl_str_off = sl_str - sub_top->str_idx; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_off > 0) + { + if (BE (bkref_str_off >= mctx->input.valid_len, 0)) + { + /* If we are at the end of the input, we cannot match. */ + if (bkref_str_off >= mctx->input.len) + break; + + err = extend_buffers (mctx, bkref_str_off + 1); + if (BE (err != REG_NOERROR, 0)) + return err; + + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (buf [bkref_str_off++] != buf[sl_str - 1]) + break; /* We don't need to search this sub expression + any more. */ + } + if (mctx->state_log[sl_str] == NULL) + continue; + /* Does this state have a ')' of the sub expression? */ + nodes = &mctx->state_log[sl_str]->nodes; + cls_node = find_subexp_node (dfa, nodes, subexp_num, + OP_CLOSE_SUBEXP); + if (cls_node == REG_MISSING) + continue; /* No. */ + if (sub_top->path == NULL) + { + sub_top->path = calloc (sizeof (state_array_t), + sl_str - sub_top->str_idx + 1); + if (sub_top->path == NULL) + return REG_ESPACE; + } + /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node + in the current context? */ + err = check_arrival (mctx, sub_top->path, sub_top->node, + sub_top->str_idx, cls_node, sl_str, + OP_CLOSE_SUBEXP); + if (err == REG_NOMATCH) + continue; + if (BE (err != REG_NOERROR, 0)) + return err; + sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); + if (BE (sub_last == NULL, 0)) + return REG_ESPACE; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + if (err == REG_NOMATCH) + continue; + } + } + return REG_NOERROR; +} + +/* Helper functions for get_subexp(). */ + +/* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. + If it can arrive, register the sub expression expressed with SUB_TOP + and SUB_LAST. */ + +static reg_errcode_t +internal_function +get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) +{ + reg_errcode_t err; + Idx to_idx; + /* Can the subexpression arrive the back reference? */ + err = check_arrival (mctx, &sub_last->path, sub_last->node, + sub_last->str_idx, bkref_node, bkref_str, + OP_OPEN_SUBEXP); + if (err != REG_NOERROR) + return err; + err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, + sub_last->str_idx); + if (BE (err != REG_NOERROR, 0)) + return err; + to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; + return clean_state_log_if_needed (mctx, to_idx); +} + +/* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. + Search '(' if FL_OPEN, or search ')' otherwise. + TODO: This function isn't efficient... + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + +static Idx +internal_function +find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type) +{ + Idx cls_idx; + for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) + { + Idx cls_node = nodes->elems[cls_idx]; + const re_token_t *node = dfa->nodes + cls_node; + if (node->type == type + && node->opr.idx == subexp_idx) + return cls_node; + } + return REG_MISSING; +} + +/* Check whether the node TOP_NODE at TOP_STR can arrive to the node + LAST_NODE at LAST_STR. We record the path onto PATH since it will be + heavily reused. + Return REG_NOERROR if it can arrive, or REG_NOMATCH otherwise. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + Idx subexp_num, backup_cur_idx, str_idx, null_cnt; + re_dfastate_t *cur_state = NULL; + re_node_set *cur_nodes, next_nodes; + re_dfastate_t **backup_state_log; + unsigned int context; + + subexp_num = dfa->nodes[top_node].opr.idx; + /* Extend the buffer if we need. */ + if (BE (path->alloc < last_str + mctx->max_mb_elem_len + 1, 0)) + { + re_dfastate_t **new_array; + Idx old_alloc = path->alloc; + Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; + Idx new_alloc; + if (BE (IDX_MAX - old_alloc < incr_alloc, 0)) + return REG_ESPACE; + new_alloc = old_alloc + incr_alloc; + if (BE (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc, 0)) + return REG_ESPACE; + new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + path->array = new_array; + path->alloc = new_alloc; + memset (new_array + old_alloc, '\0', + sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); + } + + str_idx = path->next_idx ? path->next_idx : top_str; + + /* Temporary modify MCTX. */ + backup_state_log = mctx->state_log; + backup_cur_idx = mctx->input.cur_idx; + mctx->state_log = path->array; + mctx->input.cur_idx = str_idx; + + /* Setup initial node set. */ + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + if (str_idx == top_str) + { + err = re_node_set_init_1 (&next_nodes, top_node); + if (BE (err != REG_NOERROR, 0)) + return err; + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + else + { + cur_state = mctx->state_log[str_idx]; + if (cur_state && cur_state->has_backref) + { + err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + else + re_node_set_init_empty (&next_nodes); + } + if (str_idx == top_str || (cur_state && cur_state->has_backref)) + { + if (next_nodes.nelem) + { + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (BE (cur_state == NULL && err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + } + + for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) + { + re_node_set_empty (&next_nodes); + if (mctx->state_log[str_idx + 1]) + { + err = re_node_set_merge (&next_nodes, + &mctx->state_log[str_idx + 1]->nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + if (cur_state) + { + err = check_arrival_add_next_nodes (mctx, str_idx, + &cur_state->non_eps_nodes, + &next_nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + ++str_idx; + if (next_nodes.nelem) + { + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (BE (cur_state == NULL && err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + null_cnt = cur_state == NULL ? null_cnt + 1 : 0; + } + re_node_set_free (&next_nodes); + cur_nodes = (mctx->state_log[last_str] == NULL ? NULL + : &mctx->state_log[last_str]->nodes); + path->next_idx = str_idx; + + /* Fix MCTX. */ + mctx->state_log = backup_state_log; + mctx->input.cur_idx = backup_cur_idx; + + /* Then check the current node set has the node LAST_NODE. */ + if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) + return REG_NOERROR; + + return REG_NOMATCH; +} + +/* Helper functions for check_arrival. */ + +/* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them + to NEXT_NODES. + TODO: This function is similar to the functions transit_state*(), + however this function has many additional works. + Can't we unify them? */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, + re_node_set *cur_nodes, re_node_set *next_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + bool ok; + Idx cur_idx; +#ifdef RE_ENABLE_I18N + reg_errcode_t err = REG_NOERROR; +#endif + re_node_set union_set; + re_node_set_init_empty (&union_set); + for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) + { + int naccepted = 0; + Idx cur_node = cur_nodes->elems[cur_idx]; +#ifdef DEBUG + re_token_type_t type = dfa->nodes[cur_node].type; + assert (!IS_EPSILON_NODE (type)); +#endif +#ifdef RE_ENABLE_I18N + /* If the node may accept "multi byte". */ + if (dfa->nodes[cur_node].accept_mb) + { + naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, + str_idx); + if (naccepted > 1) + { + re_dfastate_t *dest_state; + Idx next_node = dfa->nexts[cur_node]; + Idx next_idx = str_idx + naccepted; + dest_state = mctx->state_log[next_idx]; + re_node_set_empty (&union_set); + if (dest_state) + { + err = re_node_set_merge (&union_set, &dest_state->nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&union_set); + return err; + } + } + ok = re_node_set_insert (&union_set, next_node); + if (BE (! ok, 0)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + mctx->state_log[next_idx] = re_acquire_state (&err, dfa, + &union_set); + if (BE (mctx->state_log[next_idx] == NULL + && err != REG_NOERROR, 0)) + { + re_node_set_free (&union_set); + return err; + } + } + } +#endif /* RE_ENABLE_I18N */ + if (naccepted + || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) + { + ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); + if (BE (! ok, 0)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + } + } + re_node_set_free (&union_set); + return REG_NOERROR; +} + +/* For all the nodes in CUR_NODES, add the epsilon closures of them to + CUR_NODES, however exclude the nodes which are: + - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. + - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. +*/ + +static reg_errcode_t +internal_function +check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, + Idx ex_subexp, int type) +{ + reg_errcode_t err; + Idx idx, outside_node; + re_node_set new_nodes; +#ifdef DEBUG + assert (cur_nodes->nelem); +#endif + err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); + if (BE (err != REG_NOERROR, 0)) + return err; + /* Create a new node set NEW_NODES with the nodes which are epsilon + closures of the node in CUR_NODES. */ + + for (idx = 0; idx < cur_nodes->nelem; ++idx) + { + Idx cur_node = cur_nodes->elems[idx]; + const re_node_set *eclosure = dfa->eclosures + cur_node; + outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); + if (outside_node == REG_MISSING) + { + /* There are no problematic nodes, just merge them. */ + err = re_node_set_merge (&new_nodes, eclosure); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&new_nodes); + return err; + } + } + else + { + /* There are problematic nodes, re-calculate incrementally. */ + err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, + ex_subexp, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&new_nodes); + return err; + } + } + } + re_node_set_free (cur_nodes); + *cur_nodes = new_nodes; + return REG_NOERROR; +} + +/* Helper function for check_arrival_expand_ecl. + Check incrementally the epsilon closure of TARGET, and if it isn't + problematic append it to DST_NODES. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, + Idx target, Idx ex_subexp, int type) +{ + Idx cur_node; + for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) + { + bool ok; + + if (dfa->nodes[cur_node].type == type + && dfa->nodes[cur_node].opr.idx == ex_subexp) + { + if (type == OP_CLOSE_SUBEXP) + { + ok = re_node_set_insert (dst_nodes, cur_node); + if (BE (! ok, 0)) + return REG_ESPACE; + } + break; + } + ok = re_node_set_insert (dst_nodes, cur_node); + if (BE (! ok, 0)) + return REG_ESPACE; + if (dfa->edests[cur_node].nelem == 0) + break; + if (dfa->edests[cur_node].nelem == 2) + { + reg_errcode_t err; + err = check_arrival_expand_ecl_sub (dfa, dst_nodes, + dfa->edests[cur_node].elems[1], + ex_subexp, type); + if (BE (err != REG_NOERROR, 0)) + return err; + } + cur_node = dfa->edests[cur_node].elems[0]; + } + return REG_NOERROR; +} + + +/* For all the back references in the current state, calculate the + destination of the back references by the appropriate entry + in MCTX->BKREF_ENTS. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx cur_str, Idx subexp_num, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); + struct re_backref_cache_entry *ent; + + if (cache_idx_start == REG_MISSING) + return REG_NOERROR; + + restart: + ent = mctx->bkref_ents + cache_idx_start; + do + { + Idx to_idx, next_node; + + /* Is this entry ENT is appropriate? */ + if (!re_node_set_contains (cur_nodes, ent->node)) + continue; /* No. */ + + to_idx = cur_str + ent->subexp_to - ent->subexp_from; + /* Calculate the destination of the back reference, and append it + to MCTX->STATE_LOG. */ + if (to_idx == cur_str) + { + /* The backreference did epsilon transit, we must re-check all the + node in the current state. */ + re_node_set new_dests; + reg_errcode_t err2, err3; + next_node = dfa->edests[ent->node].elems[0]; + if (re_node_set_contains (cur_nodes, next_node)) + continue; + err = re_node_set_init_1 (&new_dests, next_node); + err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); + err3 = re_node_set_merge (cur_nodes, &new_dests); + re_node_set_free (&new_dests); + if (BE (err != REG_NOERROR || err2 != REG_NOERROR + || err3 != REG_NOERROR, 0)) + { + err = (err != REG_NOERROR ? err + : (err2 != REG_NOERROR ? err2 : err3)); + return err; + } + /* TODO: It is still inefficient... */ + goto restart; + } + else + { + re_node_set union_set; + next_node = dfa->nexts[ent->node]; + if (mctx->state_log[to_idx]) + { + bool ok; + if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, + next_node)) + continue; + err = re_node_set_init_copy (&union_set, + &mctx->state_log[to_idx]->nodes); + ok = re_node_set_insert (&union_set, next_node); + if (BE (err != REG_NOERROR || ! ok, 0)) + { + re_node_set_free (&union_set); + err = err != REG_NOERROR ? err : REG_ESPACE; + return err; + } + } + else + { + err = re_node_set_init_1 (&union_set, next_node); + if (BE (err != REG_NOERROR, 0)) + return err; + } + mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); + re_node_set_free (&union_set); + if (BE (mctx->state_log[to_idx] == NULL + && err != REG_NOERROR, 0)) + return err; + } + } + while (ent++->more); + return REG_NOERROR; +} + +/* Build transition table for the state. + Return true if successful. */ + +static bool +internal_function +build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) +{ + reg_errcode_t err; + Idx i, j; + int ch; + bool need_word_trtable = false; + bitset_word_t elem, mask; + bool dests_node_malloced = false; + bool dest_states_malloced = false; + Idx ndests; /* Number of the destination states from 'state'. */ + re_dfastate_t **trtable; + re_dfastate_t **dest_states = NULL, **dest_states_word, **dest_states_nl; + re_node_set follows, *dests_node; + bitset_t *dests_ch; + bitset_t acceptable; + + struct dests_alloc + { + re_node_set dests_node[SBC_MAX]; + bitset_t dests_ch[SBC_MAX]; + } *dests_alloc; + + /* We build DFA states which corresponds to the destination nodes + from 'state'. 'dests_node[i]' represents the nodes which i-th + destination state contains, and 'dests_ch[i]' represents the + characters which i-th destination state accepts. */ + if (__libc_use_alloca (sizeof (struct dests_alloc))) + dests_alloc = (struct dests_alloc *) alloca (sizeof (struct dests_alloc)); + else + { + dests_alloc = re_malloc (struct dests_alloc, 1); + if (BE (dests_alloc == NULL, 0)) + return false; + dests_node_malloced = true; + } + dests_node = dests_alloc->dests_node; + dests_ch = dests_alloc->dests_ch; + + /* Initialize transition table. */ + state->word_trtable = state->trtable = NULL; + + /* At first, group all nodes belonging to 'state' into several + destinations. */ + ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); + if (BE (! REG_VALID_NONZERO_INDEX (ndests), 0)) + { + if (dests_node_malloced) + free (dests_alloc); + /* Return false in case of an error, true otherwise. */ + if (ndests == 0) + { + state->trtable = (re_dfastate_t **) + calloc (sizeof (re_dfastate_t *), SBC_MAX); + if (BE (state->trtable == NULL, 0)) + return false; + return true; + } + return false; + } + + err = re_node_set_alloc (&follows, ndests + 1); + if (BE (err != REG_NOERROR, 0)) + goto out_free; + + /* Avoid arithmetic overflow in size calculation. */ + if (BE ((((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX) + / (3 * sizeof (re_dfastate_t *))) + < ndests), + 0)) + goto out_free; + + if (__libc_use_alloca ((sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX + + ndests * 3 * sizeof (re_dfastate_t *))) + dest_states = (re_dfastate_t **) + alloca (ndests * 3 * sizeof (re_dfastate_t *)); + else + { + dest_states = (re_dfastate_t **) + malloc (ndests * 3 * sizeof (re_dfastate_t *)); + if (BE (dest_states == NULL, 0)) + { +out_free: + if (dest_states_malloced) + free (dest_states); + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + if (dests_node_malloced) + free (dests_alloc); + return false; + } + dest_states_malloced = true; + } + dest_states_word = dest_states + ndests; + dest_states_nl = dest_states_word + ndests; + bitset_empty (acceptable); + + /* Then build the states for all destinations. */ + for (i = 0; i < ndests; ++i) + { + Idx next_node; + re_node_set_empty (&follows); + /* Merge the follows of this destination states. */ + for (j = 0; j < dests_node[i].nelem; ++j) + { + next_node = dfa->nexts[dests_node[i].elems[j]]; + if (next_node != REG_MISSING) + { + err = re_node_set_merge (&follows, dfa->eclosures + next_node); + if (BE (err != REG_NOERROR, 0)) + goto out_free; + } + } + dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); + if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0)) + goto out_free; + /* If the new state has context constraint, + build appropriate states for these contexts. */ + if (dest_states[i]->has_constraint) + { + dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_WORD); + if (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0)) + goto out_free; + + if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) + need_word_trtable = true; + + dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_NEWLINE); + if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) + goto out_free; + } + else + { + dest_states_word[i] = dest_states[i]; + dest_states_nl[i] = dest_states[i]; + } + bitset_merge (acceptable, dests_ch[i]); + } + + if (!BE (need_word_trtable, 0)) + { + /* We don't care about whether the following character is a word + character, or we are in a single-byte character set so we can + discern by looking at the character code: allocate a + 256-entry transition table. */ + trtable = state->trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); + if (BE (trtable == NULL, 0)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (BE (elem & 1, 0)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + if (dfa->word_char[i] & mask) + trtable[ch] = dest_states_word[j]; + else + trtable[ch] = dest_states[j]; + } + } + else + { + /* We care about whether the following character is a word + character, and we are in a multi-byte character set: discern + by looking at the character code: build two 256-entry + transition tables, one starting at trtable[0] and one + starting at trtable[SBC_MAX]. */ + trtable = state->word_trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); + if (BE (trtable == NULL, 0)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (BE (elem & 1, 0)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + trtable[ch] = dest_states[j]; + trtable[ch + SBC_MAX] = dest_states_word[j]; + } + } + + /* new line */ + if (bitset_contain (acceptable, NEWLINE_CHAR)) + { + /* The current state accepts newline character. */ + for (j = 0; j < ndests; ++j) + if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) + { + /* k-th destination accepts newline character. */ + trtable[NEWLINE_CHAR] = dest_states_nl[j]; + if (need_word_trtable) + trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; + /* There must be only one destination which accepts + newline. See group_nodes_into_DFAstates. */ + break; + } + } + + if (dest_states_malloced) + free (dest_states); + + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + + if (dests_node_malloced) + free (dests_alloc); + + return true; +} + +/* Group all nodes belonging to STATE into several destinations. + Then for all destinations, set the nodes belonging to the destination + to DESTS_NODE[i] and set the characters accepted by the destination + to DEST_CH[i]. This function return the number of destinations. */ + +static Idx +internal_function +group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, + re_node_set *dests_node, bitset_t *dests_ch) +{ + reg_errcode_t err; + bool ok; + Idx i, j, k; + Idx ndests; /* Number of the destinations from 'state'. */ + bitset_t accepts; /* Characters a node can accept. */ + const re_node_set *cur_nodes = &state->nodes; + bitset_empty (accepts); + ndests = 0; + + /* For all the nodes belonging to 'state', */ + for (i = 0; i < cur_nodes->nelem; ++i) + { + re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + /* Enumerate all single byte character this node can accept. */ + if (type == CHARACTER) + bitset_set (accepts, node->opr.c); + else if (type == SIMPLE_BRACKET) + { + bitset_merge (accepts, node->opr.sbcset); + } + else if (type == OP_PERIOD) + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + bitset_merge (accepts, dfa->sb_char); + else +#endif + bitset_set_all (accepts); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } +#ifdef RE_ENABLE_I18N + else if (type == OP_UTF8_PERIOD) + { + if (ASCII_CHARS % BITSET_WORD_BITS == 0) + memset (accepts, -1, ASCII_CHARS / CHAR_BIT); + else + bitset_merge (accepts, utf8_sb_map); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } +#endif + else + continue; + + /* Check the 'accepts' and sift the characters which are not + match it the context. */ + if (constraint) + { + if (constraint & NEXT_NEWLINE_CONSTRAINT) + { + bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); + bitset_empty (accepts); + if (accepts_newline) + bitset_set (accepts, NEWLINE_CHAR); + else + continue; + } + if (constraint & NEXT_ENDBUF_CONSTRAINT) + { + bitset_empty (accepts); + continue; + } + + if (constraint & NEXT_WORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && !node->word_char) + { + bitset_empty (accepts); + continue; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); + else +#endif + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= dfa->word_char[j]); + if (!any_set) + continue; + } + if (constraint & NEXT_NOTWORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && node->word_char) + { + bitset_empty (accepts); + continue; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); + else +#endif + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~dfa->word_char[j]); + if (!any_set) + continue; + } + } + + /* Then divide 'accepts' into DFA states, or create a new + state. Above, we make sure that accepts is not empty. */ + for (j = 0; j < ndests; ++j) + { + bitset_t intersec; /* Intersection sets, see below. */ + bitset_t remains; + /* Flags, see below. */ + bitset_word_t has_intersec, not_subset, not_consumed; + + /* Optimization, skip if this state doesn't accept the character. */ + if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) + continue; + + /* Enumerate the intersection set of this state and 'accepts'. */ + has_intersec = 0; + for (k = 0; k < BITSET_WORDS; ++k) + has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; + /* And skip if the intersection set is empty. */ + if (!has_intersec) + continue; + + /* Then check if this state is a subset of 'accepts'. */ + not_subset = not_consumed = 0; + for (k = 0; k < BITSET_WORDS; ++k) + { + not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; + not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; + } + + /* If this state isn't a subset of 'accepts', create a + new group state, which has the 'remains'. */ + if (not_subset) + { + bitset_copy (dests_ch[ndests], remains); + bitset_copy (dests_ch[j], intersec); + err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); + if (BE (err != REG_NOERROR, 0)) + goto error_return; + ++ndests; + } + + /* Put the position in the current group. */ + ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); + if (BE (! ok, 0)) + goto error_return; + + /* If all characters are consumed, go to next node. */ + if (!not_consumed) + break; + } + /* Some characters remain, create a new group. */ + if (j == ndests) + { + bitset_copy (dests_ch[ndests], accepts); + err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); + if (BE (err != REG_NOERROR, 0)) + goto error_return; + ++ndests; + bitset_empty (accepts); + } + } + return ndests; + error_return: + for (j = 0; j < ndests; ++j) + re_node_set_free (dests_node + j); + return REG_MISSING; +} + +#ifdef RE_ENABLE_I18N +/* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. + Return the number of the bytes the node accepts. + STR_IDX is the current index of the input string. + + This function handles the nodes which can accept one character, or + one collating element like '.', '[a-z]', opposite to the other nodes + can only accept one byte. */ + +static int +internal_function +check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx str_idx) +{ + const re_token_t *node = dfa->nodes + node_idx; + int char_len, elem_len; + Idx i; + + if (BE (node->type == OP_UTF8_PERIOD, 0)) + { + unsigned char c = re_string_byte_at (input, str_idx), d; + if (BE (c < 0xc2, 1)) + return 0; + + if (str_idx + 2 > input->len) + return 0; + + d = re_string_byte_at (input, str_idx + 1); + if (c < 0xe0) + return (d < 0x80 || d > 0xbf) ? 0 : 2; + else if (c < 0xf0) + { + char_len = 3; + if (c == 0xe0 && d < 0xa0) + return 0; + } + else if (c < 0xf8) + { + char_len = 4; + if (c == 0xf0 && d < 0x90) + return 0; + } + else if (c < 0xfc) + { + char_len = 5; + if (c == 0xf8 && d < 0x88) + return 0; + } + else if (c < 0xfe) + { + char_len = 6; + if (c == 0xfc && d < 0x84) + return 0; + } + else + return 0; + + if (str_idx + char_len > input->len) + return 0; + + for (i = 1; i < char_len; ++i) + { + d = re_string_byte_at (input, str_idx + i); + if (d < 0x80 || d > 0xbf) + return 0; + } + return char_len; + } + + char_len = re_string_char_size_at (input, str_idx); + if (node->type == OP_PERIOD) + { + if (char_len <= 1) + return 0; + /* FIXME: I don't think this if is needed, as both '\n' + and '\0' are char_len == 1. */ + /* '.' accepts any one character except the following two cases. */ + if ((!(dfa->syntax & RE_DOT_NEWLINE) && + re_string_byte_at (input, str_idx) == '\n') || + ((dfa->syntax & RE_DOT_NOT_NULL) && + re_string_byte_at (input, str_idx) == '\0')) + return 0; + return char_len; + } + + elem_len = re_string_elem_size_at (input, str_idx); + if ((elem_len <= 1 && char_len <= 1) || char_len == 0) + return 0; + + if (node->type == COMPLEX_BRACKET) + { + const re_charset_t *cset = node->opr.mbcset; +# ifdef _LIBC + const unsigned char *pin + = ((const unsigned char *) re_string_get_buffer (input) + str_idx); + Idx j; + uint32_t nrules; +# endif /* _LIBC */ + int match_len = 0; + wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) + ? re_string_wchar_at (input, str_idx) : 0); + + /* match with multibyte character? */ + for (i = 0; i < cset->nmbchars; ++i) + if (wc == cset->mbchars[i]) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + /* match with character_class? */ + for (i = 0; i < cset->nchar_classes; ++i) + { + wctype_t wt = cset->char_classes[i]; + if (__iswctype (wc, wt)) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + +# ifdef _LIBC + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + unsigned int in_collseq = 0; + const int32_t *table, *indirect; + const unsigned char *weights, *extra; + const char *collseqwc; + /* This #include defines a local function! */ +# include + + /* match with collating_symbol? */ + if (cset->ncoll_syms) + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + for (i = 0; i < cset->ncoll_syms; ++i) + { + const unsigned char *coll_sym = extra + cset->coll_syms[i]; + /* Compare the length of input collating element and + the length of current collating element. */ + if (*coll_sym != elem_len) + continue; + /* Compare each bytes. */ + for (j = 0; j < *coll_sym; j++) + if (pin[j] != coll_sym[1 + j]) + break; + if (j == *coll_sym) + { + /* Match if every bytes is equal. */ + match_len = j; + goto check_node_accept_bytes_match; + } + } + + if (cset->nranges) + { + if (elem_len <= char_len) + { + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + in_collseq = __collseq_table_lookup (collseqwc, wc); + } + else + in_collseq = find_collation_sequence_value (pin, elem_len); + } + /* match with range expression? */ + /* FIXME: Implement rational ranges here, too. */ + for (i = 0; i < cset->nranges; ++i) + if (cset->range_starts[i] <= in_collseq + && in_collseq <= cset->range_ends[i]) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + + /* match with equivalence_class? */ + if (cset->nequiv_classes) + { + const unsigned char *cp = pin; + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); + int32_t idx = findidx (&cp, elem_len); + if (idx > 0) + for (i = 0; i < cset->nequiv_classes; ++i) + { + int32_t equiv_class_idx = cset->equiv_classes[i]; + size_t weight_len = weights[idx & 0xffffff]; + if (weight_len == weights[equiv_class_idx & 0xffffff] + && (idx >> 24) == (equiv_class_idx >> 24)) + { + Idx cnt = 0; + + idx &= 0xffffff; + equiv_class_idx &= 0xffffff; + + while (cnt <= weight_len + && (weights[equiv_class_idx + 1 + cnt] + == weights[idx + 1 + cnt])) + ++cnt; + if (cnt > weight_len) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + } + } + } + } + else +# endif /* _LIBC */ + { + /* match with range expression? */ + for (i = 0; i < cset->nranges; ++i) + { + if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + } + check_node_accept_bytes_match: + if (!cset->non_match) + return match_len; + else + { + if (match_len > 0) + return 0; + else + return (elem_len > char_len) ? elem_len : char_len; + } + } + return 0; +} + +# ifdef _LIBC +static unsigned int +internal_function +find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) +{ + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules == 0) + { + if (mbs_len == 1) + { + /* No valid character. Match it as a single byte character. */ + const unsigned char *collseq = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + return collseq[mbs[0]]; + } + return UINT_MAX; + } + else + { + int32_t idx; + const unsigned char *extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + int32_t extrasize = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; + + for (idx = 0; idx < extrasize;) + { + int mbs_cnt; + bool found = false; + int32_t elem_mbs_len; + /* Skip the name of collating element name. */ + idx = idx + extra[idx] + 1; + elem_mbs_len = extra[idx++]; + if (mbs_len == elem_mbs_len) + { + for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) + if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) + break; + if (mbs_cnt == elem_mbs_len) + /* Found the entry. */ + found = true; + } + /* Skip the byte sequence of the collating element. */ + idx += elem_mbs_len; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + /* Skip the wide char sequence of the collating element. */ + idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); + /* If we found the entry, return the sequence value. */ + if (found) + return *(uint32_t *) (extra + idx); + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + } + return UINT_MAX; + } +} +# endif /* _LIBC */ +#endif /* RE_ENABLE_I18N */ + +/* Check whether the node accepts the byte which is IDX-th + byte of the INPUT. */ + +static bool +internal_function +check_node_accept (const re_match_context_t *mctx, const re_token_t *node, + Idx idx) +{ + unsigned char ch; + ch = re_string_byte_at (&mctx->input, idx); + switch (node->type) + { + case CHARACTER: + if (node->opr.c != ch) + return false; + break; + + case SIMPLE_BRACKET: + if (!bitset_contain (node->opr.sbcset, ch)) + return false; + break; + +#ifdef RE_ENABLE_I18N + case OP_UTF8_PERIOD: + if (ch >= ASCII_CHARS) + return false; +#if defined __GNUC__ && __GNUC__ >= 7 + __attribute__ ((fallthrough)); +#endif + /* FALLTHROUGH */ +#endif + case OP_PERIOD: + if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) + || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) + return false; + break; + + default: + return false; + } + + if (node->constraint) + { + /* The node has constraints. Check whether the current context + satisfies the constraints. */ + unsigned int context = re_string_context_at (&mctx->input, idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + return false; + } + + return true; +} + +/* Extend the buffers, if the buffers have run out. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +extend_buffers (re_match_context_t *mctx, int min_len) +{ + reg_errcode_t ret; + re_string_t *pstr = &mctx->input; + + /* Avoid overflow. */ + if (BE (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 + <= pstr->bufs_len, 0)) + return REG_ESPACE; + + /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ + ret = re_string_realloc_buffers (pstr, + MAX (min_len, + MIN (pstr->len, pstr->bufs_len * 2))); + if (BE (ret != REG_NOERROR, 0)) + return ret; + + if (mctx->state_log != NULL) + { + /* And double the length of state_log. */ + /* XXX We have no indication of the size of this buffer. If this + allocation fail we have no indication that the state_log array + does not have the right size. */ + re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, + pstr->bufs_len + 1); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + mctx->state_log = new_array; + } + + /* Then reconstruct the buffers. */ + if (pstr->icase) + { +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + ret = build_wcs_upper_buffer (pstr); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + else +#endif /* RE_ENABLE_I18N */ + build_upper_buffer (pstr); + } + else + { +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + build_wcs_buffer (pstr); + else +#endif /* RE_ENABLE_I18N */ + { + if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + } + return REG_NOERROR; +} + + +/* Functions for matching context. */ + +/* Initialize MCTX. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) +{ + mctx->eflags = eflags; + mctx->match_last = REG_MISSING; + if (n > 0) + { + /* Avoid overflow. */ + size_t max_object_size = + MAX (sizeof (struct re_backref_cache_entry), + sizeof (re_sub_match_top_t *)); + if (BE (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n, 0)) + return REG_ESPACE; + + mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); + mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); + if (BE (mctx->bkref_ents == NULL || mctx->sub_tops == NULL, 0)) + return REG_ESPACE; + } + /* Already zero-ed by the caller. + else + mctx->bkref_ents = NULL; + mctx->nbkref_ents = 0; + mctx->nsub_tops = 0; */ + mctx->abkref_ents = n; + mctx->max_mb_elem_len = 1; + mctx->asub_tops = n; + return REG_NOERROR; +} + +/* Clean the entries which depend on the current input in MCTX. + This function must be invoked when the matcher changes the start index + of the input, or changes the input string. */ + +static void +internal_function +match_ctx_clean (re_match_context_t *mctx) +{ + Idx st_idx; + for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) + { + Idx sl_idx; + re_sub_match_top_t *top = mctx->sub_tops[st_idx]; + for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) + { + re_sub_match_last_t *last = top->lasts[sl_idx]; + re_free (last->path.array); + re_free (last); + } + re_free (top->lasts); + if (top->path) + { + re_free (top->path->array); + re_free (top->path); + } + free (top); + } + + mctx->nsub_tops = 0; + mctx->nbkref_ents = 0; +} + +/* Free all the memory associated with MCTX. */ + +static void +internal_function +match_ctx_free (re_match_context_t *mctx) +{ + /* First, free all the memory associated with MCTX->SUB_TOPS. */ + match_ctx_clean (mctx); + re_free (mctx->sub_tops); + re_free (mctx->bkref_ents); +} + +/* Add a new backreference entry to MCTX. + Note that we assume that caller never call this function with duplicate + entry, and call with STR_IDX which isn't smaller than any existing entry. +*/ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, + Idx to) +{ + if (mctx->nbkref_ents >= mctx->abkref_ents) + { + struct re_backref_cache_entry* new_entry; + new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, + mctx->abkref_ents * 2); + if (BE (new_entry == NULL, 0)) + { + re_free (mctx->bkref_ents); + return REG_ESPACE; + } + mctx->bkref_ents = new_entry; + memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', + sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); + mctx->abkref_ents *= 2; + } + if (mctx->nbkref_ents > 0 + && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) + mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; + + mctx->bkref_ents[mctx->nbkref_ents].node = node; + mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; + mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; + mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; + + /* This is a cache that saves negative results of check_dst_limits_calc_pos. + If bit N is clear, means that this entry won't epsilon-transition to + an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If + it is set, check_dst_limits_calc_pos_1 will recurse and try to find one + such node. + + A backreference does not epsilon-transition unless it is empty, so set + to all zeros if FROM != TO. */ + mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map + = (from == to ? -1 : 0); + + mctx->bkref_ents[mctx->nbkref_ents++].more = 0; + if (mctx->max_mb_elem_len < to - from) + mctx->max_mb_elem_len = to - from; + return REG_NOERROR; +} + +/* Return the first entry with the same str_idx, or REG_MISSING if none is + found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ + +static Idx +internal_function +search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) +{ + Idx left, right, mid, last; + last = right = mctx->nbkref_ents; + for (left = 0; left < right;) + { + mid = (left + right) / 2; + if (mctx->bkref_ents[mid].str_idx < str_idx) + left = mid + 1; + else + right = mid; + } + if (left < last && mctx->bkref_ents[left].str_idx == str_idx) + return left; + else + return REG_MISSING; +} + +/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches + at STR_IDX. */ + +static reg_errcode_t +internal_function __attribute_warn_unused_result__ +match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) +{ +#ifdef DEBUG + assert (mctx->sub_tops != NULL); + assert (mctx->asub_tops > 0); +#endif + if (BE (mctx->nsub_tops == mctx->asub_tops, 0)) + { + Idx new_asub_tops = mctx->asub_tops * 2; + re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, + re_sub_match_top_t *, + new_asub_tops); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + mctx->sub_tops = new_array; + mctx->asub_tops = new_asub_tops; + } + mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); + if (BE (mctx->sub_tops[mctx->nsub_tops] == NULL, 0)) + return REG_ESPACE; + mctx->sub_tops[mctx->nsub_tops]->node = node; + mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; + return REG_NOERROR; +} + +/* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches + at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. */ + +static re_sub_match_last_t * +internal_function +match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) +{ + re_sub_match_last_t *new_entry; + if (BE (subtop->nlasts == subtop->alasts, 0)) + { + Idx new_alasts = 2 * subtop->alasts + 1; + re_sub_match_last_t **new_array = re_realloc (subtop->lasts, + re_sub_match_last_t *, + new_alasts); + if (BE (new_array == NULL, 0)) + return NULL; + subtop->lasts = new_array; + subtop->alasts = new_alasts; + } + new_entry = calloc (1, sizeof (re_sub_match_last_t)); + if (BE (new_entry != NULL, 1)) + { + subtop->lasts[subtop->nlasts] = new_entry; + new_entry->node = node; + new_entry->str_idx = str_idx; + ++subtop->nlasts; + } + return new_entry; +} + +static void +internal_function +sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) +{ + sctx->sifted_states = sifted_sts; + sctx->limited_states = limited_sts; + sctx->last_node = last_node; + sctx->last_str_idx = last_str_idx; + re_node_set_init_empty (&sctx->limits); +} diff --git a/grub-core/gnulib/size_max.h b/grub-core/gnulib/size_max.h new file mode 100644 index 000000000..5f3312404 --- /dev/null +++ b/grub-core/gnulib/size_max.h @@ -0,0 +1,30 @@ +/* size_max.h -- declare SIZE_MAX through system headers + Copyright (C) 2005-2006, 2009-2013 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef GNULIB_SIZE_MAX_H +#define GNULIB_SIZE_MAX_H + +/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ +# include +/* Get SIZE_MAX declaration on systems like glibc 2. */ +# if HAVE_STDINT_H +# include +# endif +/* On systems where these include files don't define it, SIZE_MAX is defined + in config.h. */ + +#endif /* GNULIB_SIZE_MAX_H */ diff --git a/grub-core/gnulib/sleep.c b/grub-core/gnulib/sleep.c new file mode 100644 index 000000000..4c97d7dfa --- /dev/null +++ b/grub-core/gnulib/sleep.c @@ -0,0 +1,76 @@ +/* Pausing execution of the current thread. + Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +#include "verify.h" + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +unsigned int +sleep (unsigned int seconds) +{ + unsigned int remaining; + + /* Sleep for 1 second many times, because + 1. Sleep is not interruptible by Ctrl-C, + 2. we want to avoid arithmetic overflow while multiplying with 1000. */ + for (remaining = seconds; remaining > 0; remaining--) + Sleep (1000); + + return remaining; +} + +#elif HAVE_SLEEP + +# undef sleep + +/* Guarantee unlimited sleep and a reasonable return value. Cygwin + 1.5.x rejects attempts to sleep more than 49.7 days (2**32 + milliseconds), but uses uninitialized memory which results in a + garbage answer. Similarly, Linux 2.6.9 with glibc 2.3.4 has a too + small return value when asked to sleep more than 24.85 days. */ +unsigned int +rpl_sleep (unsigned int seconds) +{ + /* This requires int larger than 16 bits. */ + verify (UINT_MAX / 24 / 24 / 60 / 60); + const unsigned int limit = 24 * 24 * 60 * 60; + while (limit < seconds) + { + unsigned int result; + seconds -= limit; + result = sleep (limit); + if (result) + return seconds + result; + } + return sleep (seconds); +} + +#else /* !HAVE_SLEEP */ + + #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib." + +#endif diff --git a/grub-core/gnulib/stdalign.in.h b/grub-core/gnulib/stdalign.in.h new file mode 100644 index 000000000..c3a67321b --- /dev/null +++ b/grub-core/gnulib/stdalign.in.h @@ -0,0 +1,90 @@ +/* A substitute for ISO C11 . + + Copyright 2011-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* Written by Paul Eggert and Bruno Haible. */ + +#ifndef _GL_STDALIGN_H +#define _GL_STDALIGN_H + +/* ISO C11 for platforms that lack it. + + References: + ISO C11 (latest free draft + ) + sections 6.5.3.4, 6.7.5, 7.15. + C++11 (latest free draft + ) + section 18.10. */ + +/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment + requirement of a structure member (i.e., slot or field) that is of + type TYPE, as an integer constant expression. + + This differs from GCC's __alignof__ operator, which can yield a + better-performing alignment for an object of that type. For + example, on x86 with GCC, __alignof__ (double) and __alignof__ + (long long) are 8, whereas alignof (double) and alignof (long long) + are 4 unless the option '-malign-double' is used. + + The result cannot be used as a value for an 'enum' constant, if you + want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */ +#include +#if defined __cplusplus + template struct __alignof_helper { char __a; __t __b; }; +# define _Alignof(type) offsetof (__alignof_helper, __b) +#else +# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) +#endif +#define alignof _Alignof +#define __alignof_is_defined 1 + +/* alignas (A), also known as _Alignas (A), aligns a variable or type + to the alignment A, where A is an integer constant expression. For + example: + + int alignas (8) foo; + struct s { int a; int alignas (8) bar; }; + + aligns the address of FOO and the offset of BAR to be multiples of 8. + + A should be a power of two that is at least the type's alignment + and at most the implementation's alignment limit. This limit is + 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable + to MSVC through at least version 10.0, A should be an integer + constant, as MSVC does not support expressions such as 1 << 3. + To be portable to Sun C 5.11, do not align auto variables to + anything stricter than their default alignment. + + The following C11 requirements are not supported here: + + - If A is zero, alignas has no effect. + - alignas can be used multiple times; the strictest one wins. + - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). + + */ + +#if __GNUC__ || __IBMC__ || __IBMCPP__ || 0x5110 <= __SUNPRO_C +# define _Alignas(a) __attribute__ ((__aligned__ (a))) +#elif 1300 <= _MSC_VER +# define _Alignas(a) __declspec (align (a)) +#endif +#ifdef _Alignas +# define alignas _Alignas +# define __alignas_is_defined 1 +#endif + +#endif /* _GL_STDALIGN_H */ diff --git a/grub-core/gnulib/stdbool.in.h b/grub-core/gnulib/stdbool.in.h new file mode 100644 index 000000000..7c1577277 --- /dev/null +++ b/grub-core/gnulib/stdbool.in.h @@ -0,0 +1,132 @@ +/* Copyright (C) 2001-2003, 2006-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _GL_STDBOOL_H +#define _GL_STDBOOL_H + +/* ISO C 99 for platforms that lack it. */ + +/* Usage suggestions: + + Programs that use should be aware of some limitations + and standards compliance issues. + + Standards compliance: + + - must be #included before 'bool', 'false', 'true' + can be used. + + - You cannot assume that sizeof (bool) == 1. + + - Programs should not undefine the macros bool, true, and false, + as C99 lists that as an "obsolescent feature". + + Limitations of this substitute, when used in a C89 environment: + + - must be #included before the '_Bool' type can be used. + + - You cannot assume that _Bool is a typedef; it might be a macro. + + - Bit-fields of type 'bool' are not supported. Portable code + should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. + + - In C99, casts and automatic conversions to '_Bool' or 'bool' are + performed in such a way that every nonzero value gets converted + to 'true', and zero gets converted to 'false'. This doesn't work + with this substitute. With this substitute, only the values 0 and 1 + give the expected result when converted to _Bool' or 'bool'. + + - C99 allows the use of (_Bool)0.0 in constant expressions, but + this substitute cannot always provide this property. + + Also, it is suggested that programs use 'bool' rather than '_Bool'; + this isn't required, but 'bool' is more common. */ + + +/* 7.16. Boolean type and values */ + +/* BeOS already #defines false 0, true 1. We use the same + definitions below, but temporarily we have to #undef them. */ +#if defined __BEOS__ && !defined __HAIKU__ +# include /* defines bool but not _Bool */ +# undef false +# undef true +#endif + +#ifdef __cplusplus +# define _Bool bool +# define bool bool +#else +# if defined __BEOS__ && !defined __HAIKU__ + /* A compiler known to have 'bool'. */ + /* If the compiler already has both 'bool' and '_Bool', we can assume they + are the same types. */ +# if !@HAVE__BOOL@ +typedef bool _Bool; +# endif +# else +# if !defined __GNUC__ + /* If @HAVE__BOOL@: + Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when + the built-in _Bool type is used. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + Similar bugs are likely with other compilers as well; this file + wouldn't be used if was working. + So we override the _Bool type. + If !@HAVE__BOOL@: + Need to define _Bool ourselves. As 'signed char' or as an enum type? + Use of a typedef, with SunPRO C, leads to a stupid + "warning: _Bool is a keyword in ISO C99". + Use of an enum type, with IRIX cc, leads to a stupid + "warning(1185): enumerated type mixed with another type". + Even the existence of an enum type, without a typedef, + "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. + The only benefit of the enum, debuggability, is not important + with these compilers. So use 'signed char' and no enum. */ +# define _Bool signed char +# else + /* With this compiler, trust the _Bool type if the compiler has it. */ +# if !@HAVE__BOOL@ + /* For the sake of symbolic names in gdb, define true and false as + enum constants, not only as macros. + It is tempting to write + typedef enum { false = 0, true = 1 } _Bool; + so that gdb prints values of type 'bool' symbolically. But then + values of type '_Bool' might promote to 'int' or 'unsigned int' + (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' + (see ISO C 99 6.3.1.1.(2)). So add a negative value to the + enum; this ensures that '_Bool' promotes to 'int'. */ +typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; +# endif +# endif +# endif +# define bool _Bool +#endif + +/* The other macros must be usable in preprocessor directives. */ +#ifdef __cplusplus +# define false false +# define true true +#else +# define false 0 +# define true 1 +#endif + +#define __bool_true_false_are_defined 1 + +#endif /* _GL_STDBOOL_H */ diff --git a/grub-core/gnulib/stddef.in.h b/grub-core/gnulib/stddef.in.h new file mode 100644 index 000000000..40f0536aa --- /dev/null +++ b/grub-core/gnulib/stddef.in.h @@ -0,0 +1,86 @@ +/* A substitute for POSIX 2008 , for platforms that have issues. + + Copyright (C) 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* Written by Eric Blake. */ + +/* + * POSIX 2008 for platforms that have issues. + * + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_wchar_t || defined __need_size_t \ + || defined __need_ptrdiff_t || defined __need_NULL \ + || defined __need_wint_t +/* Special invocation convention inside gcc header files. In + particular, gcc provides a version of that blindly + redefines NULL even when __need_wint_t was defined, even though + wint_t is not normally provided by . Hence, we must + remember if special invocation has ever been used to obtain wint_t, + in which case we need to clean up NULL yet again. */ + +# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) +# ifdef __need_wint_t +# undef _@GUARD_PREFIX@_STDDEF_H +# define _GL_STDDEF_WINT_T +# endif +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ +# endif + +#else +/* Normal invocation convention. */ + +# ifndef _@GUARD_PREFIX@_STDDEF_H + +/* The include_next requires a split double-inclusion guard. */ + +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ + +# ifndef _@GUARD_PREFIX@_STDDEF_H +# define _@GUARD_PREFIX@_STDDEF_H + +/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ +#if @REPLACE_NULL@ +# undef NULL +# ifdef __cplusplus + /* ISO C++ says that the macro NULL must expand to an integer constant + expression, hence '((void *) 0)' is not allowed in C++. */ +# if __GNUG__ >= 3 + /* GNU C++ has a __null macro that behaves like an integer ('int' or + 'long') but has the same size as a pointer. Use that, to avoid + warnings. */ +# define NULL __null +# else +# define NULL 0L +# endif +# else +# define NULL ((void *) 0) +# endif +#endif + +/* Some platforms lack wchar_t. */ +#if !@HAVE_WCHAR_T@ +# define wchar_t int +#endif + +# endif /* _@GUARD_PREFIX@_STDDEF_H */ +# endif /* _@GUARD_PREFIX@_STDDEF_H */ +#endif /* __need_XXX */ diff --git a/grub-core/gnulib/stdint.in.h b/grub-core/gnulib/stdint.in.h new file mode 100644 index 000000000..2db8b2e37 --- /dev/null +++ b/grub-core/gnulib/stdint.in.h @@ -0,0 +1,636 @@ +/* Copyright (C) 2001-2002, 2004-2013 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* + * ISO C 99 for platforms that lack it. + * + */ + +#ifndef _@GUARD_PREFIX@_STDINT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* When including a system file that in turn includes , + use the system , not our substitute. This avoids + problems with (for example) VMS, whose includes + . */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* On Android (Bionic libc), includes this file before + having defined 'time_t'. Therefore in this case avoid including + other system header files; just include the system's . + Ideally we should test __BIONIC__ here, but it is only defined after + has been included; hence test __ANDROID__ instead. */ +#if defined __ANDROID__ \ + && defined _SYS_TYPES_H_ && !defined __need_size_t +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#else + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if @HAVE_STDINT_H@ +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + + /* Some pre-C++11 implementations need this. */ +# ifdef __cplusplus +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS 1 +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +# endif +# endif + + /* Other systems may have an incomplete or buggy . + Include it before , since any "#include " + in would reinclude us, skipping our contents because + _@GUARD_PREFIX@_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#endif + +#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _@GUARD_PREFIX@_STDINT_H + +/* defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via ). + AIX 5.2 isn't needed and causes troubles. + Mac OS X 10.4.6 includes (which is us), but + relies on the system definitions, so include + after @NEXT_STDINT_H@. */ +#if @HAVE_SYS_TYPES_H@ && ! defined _AIX +# include +#endif + +/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, + LONG_MIN, LONG_MAX, ULONG_MAX. */ +#include + +#if @HAVE_INTTYPES_H@ + /* In OpenBSD 3.8, includes , which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + also defines intptr_t and uintptr_t. */ +# include +#elif @HAVE_SYS_INTTYPES_H@ + /* Solaris 7 has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include +#endif + +#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by . */ +# include +#endif + +#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for an integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +#define _STDINT_MIN(signed, bits, zero) \ + ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) + +#define _STDINT_MAX(signed, bits, zero) \ + ((signed) \ + ? ~ _STDINT_MIN (signed, bits, zero) \ + : /* The expression for the unsigned case. The subtraction of (signed) \ + is a nop in the unsigned case and avoids "signed integer overflow" \ + warnings in the signed case. */ \ + ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +#if !GNULIB_defined_stdint_types + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef int8_t +#undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +#define int8_t gl_int8_t +#define uint8_t gl_uint8_t + +#undef int16_t +#undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +#define int16_t gl_int16_t +#define uint16_t gl_uint16_t + +#undef int32_t +#undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +#define int32_t gl_int32_t +#define uint32_t gl_uint32_t + +/* If the system defines INT64_MAX, assume int64_t works. That way, + if the underlying platform defines int64_t to be a 64-bit long long + int, the code below won't mistakenly define it to be a 64-bit long + int, which would mess up C++ name mangling. We must use #ifdef + rather than #if, to avoid an error with HP-UX 10.20 cc. */ + +#ifdef INT64_MAX +# define GL_INT64_T +#else +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +# if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif @HAVE_LONG_LONG_INT@ +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# endif +#endif + +#ifdef UINT64_MAX +# define GL_UINT64_T +#else +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# endif +#endif + +/* Avoid collision with Solaris 2.5.1 etc. */ +#define _UINT8_T +#define _UINT32_T +#define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef int_least8_t +#undef uint_least8_t +#undef int_least16_t +#undef uint_least16_t +#undef int_least32_t +#undef uint_least32_t +#undef int_least64_t +#undef uint_least64_t +#define int_least8_t int8_t +#define uint_least8_t uint8_t +#define int_least16_t int16_t +#define uint_least16_t uint16_t +#define int_least32_t int32_t +#define uint_least32_t uint32_t +#ifdef GL_INT64_T +# define int_least64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_least64_t uint64_t +#endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. The following code normally + uses types consistent with glibc, as that lessens the chance of + incompatibility with older GNU hosts. */ + +#undef int_fast8_t +#undef uint_fast8_t +#undef int_fast16_t +#undef uint_fast16_t +#undef int_fast32_t +#undef uint_fast32_t +#undef int_fast64_t +#undef uint_fast64_t +typedef signed char gl_int_fast8_t; +typedef unsigned char gl_uint_fast8_t; + +#ifdef __sun +/* Define types compatible with SunOS 5.10, so that code compiled under + earlier SunOS versions works with code compiled under SunOS 5.10. */ +typedef int gl_int_fast32_t; +typedef unsigned int gl_uint_fast32_t; +#else +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +#endif +typedef gl_int_fast32_t gl_int_fast16_t; +typedef gl_uint_fast32_t gl_uint_fast16_t; + +#define int_fast8_t gl_int_fast8_t +#define uint_fast8_t gl_uint_fast8_t +#define int_fast16_t gl_int_fast16_t +#define uint_fast16_t gl_uint_fast16_t +#define int_fast32_t gl_int_fast32_t +#define uint_fast32_t gl_uint_fast32_t +#ifdef GL_INT64_T +# define int_fast64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +#endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +#undef intptr_t +#undef uintptr_t +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +#define intptr_t gl_intptr_t +#define uintptr_t gl_uintptr_t + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +/* If the system defines INTMAX_MAX, assume that intmax_t works, and + similarly for UINTMAX_MAX and uintmax_t. This avoids problems with + assuming one type where another is used by the system. */ + +#ifndef INTMAX_MAX +# undef INTMAX_C +# undef intmax_t +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +# elif defined GL_INT64_T +# define intmax_t int64_t +# else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +# endif +#endif + +#ifndef UINTMAX_MAX +# undef UINTMAX_C +# undef uintmax_t +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# elif defined GL_UINT64_T +# define uintmax_t uint64_t +# else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# endif +#endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) + ? 1 : -1]; + +#define GNULIB_defined_stdint_types 1 +#endif /* !GNULIB_defined_stdint_types */ + +/* 7.18.2. Limits of specified-width integer types */ + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef INT8_MIN +#undef INT8_MAX +#undef UINT8_MAX +#define INT8_MIN (~ INT8_MAX) +#define INT8_MAX 127 +#define UINT8_MAX 255 + +#undef INT16_MIN +#undef INT16_MAX +#undef UINT16_MAX +#define INT16_MIN (~ INT16_MAX) +#define INT16_MAX 32767 +#define UINT16_MAX 65535 + +#undef INT32_MIN +#undef INT32_MAX +#undef UINT32_MAX +#define INT32_MIN (~ INT32_MAX) +#define INT32_MAX 2147483647 +#define UINT32_MAX 4294967295U + +#if defined GL_INT64_T && ! defined INT64_MAX +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +#endif + +#if defined GL_UINT64_T && ! defined UINT64_MAX +# define UINT64_MAX UINTMAX_C (18446744073709551615) +#endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef INT_LEAST8_MIN +#undef INT_LEAST8_MAX +#undef UINT_LEAST8_MAX +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define UINT_LEAST8_MAX UINT8_MAX + +#undef INT_LEAST16_MIN +#undef INT_LEAST16_MAX +#undef UINT_LEAST16_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define UINT_LEAST16_MAX UINT16_MAX + +#undef INT_LEAST32_MIN +#undef INT_LEAST32_MAX +#undef UINT_LEAST32_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define UINT_LEAST32_MAX UINT32_MAX + +#undef INT_LEAST64_MIN +#undef INT_LEAST64_MAX +#ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +#endif + +#undef UINT_LEAST64_MAX +#ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +#undef INT_FAST8_MIN +#undef INT_FAST8_MAX +#undef UINT_FAST8_MAX +#define INT_FAST8_MIN SCHAR_MIN +#define INT_FAST8_MAX SCHAR_MAX +#define UINT_FAST8_MAX UCHAR_MAX + +#undef INT_FAST16_MIN +#undef INT_FAST16_MAX +#undef UINT_FAST16_MAX +#define INT_FAST16_MIN INT_FAST32_MIN +#define INT_FAST16_MAX INT_FAST32_MAX +#define UINT_FAST16_MAX UINT_FAST32_MAX + +#undef INT_FAST32_MIN +#undef INT_FAST32_MAX +#undef UINT_FAST32_MAX +#ifdef __sun +# define INT_FAST32_MIN INT_MIN +# define INT_FAST32_MAX INT_MAX +# define UINT_FAST32_MAX UINT_MAX +#else +# define INT_FAST32_MIN LONG_MIN +# define INT_FAST32_MAX LONG_MAX +# define UINT_FAST32_MAX ULONG_MAX +#endif + +#undef INT_FAST64_MIN +#undef INT_FAST64_MAX +#ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +#endif + +#undef UINT_FAST64_MAX +#ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +#undef INTPTR_MIN +#undef INTPTR_MAX +#undef UINTPTR_MAX +#define INTPTR_MIN LONG_MIN +#define INTPTR_MAX LONG_MAX +#define UINTPTR_MAX ULONG_MAX + +/* 7.18.2.5. Limits of greatest-width integer types */ + +#ifndef INTMAX_MAX +# undef INTMAX_MIN +# ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +# endif +#endif + +#ifndef UINTMAX_MAX +# ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +# else +# define UINTMAX_MAX UINT32_MAX +# endif +#endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +#undef PTRDIFF_MIN +#undef PTRDIFF_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +#else +# define PTRDIFF_MIN \ + _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +#endif + +/* sig_atomic_t limits */ +#undef SIG_ATOMIC_MIN +#undef SIG_ATOMIC_MAX +#define SIG_ATOMIC_MIN \ + _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) +#define SIG_ATOMIC_MAX \ + _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) + + +/* size_t limit */ +#undef SIZE_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +#else +# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) +#endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a + sequence of nested includes + -> -> -> , and the latter includes + and assumes its types are already defined. */ +#if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ +# include +# include +# include +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +#endif +#undef WCHAR_MIN +#undef WCHAR_MAX +#define WCHAR_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +#define WCHAR_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) + +/* wint_t limits */ +#undef WINT_MIN +#undef WINT_MAX +#define WINT_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +#define WINT_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) + +/* 7.18.4. Macros for integer constants */ + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +#undef INT8_C +#undef UINT8_C +#define INT8_C(x) x +#define UINT8_C(x) x + +#undef INT16_C +#undef UINT16_C +#define INT16_C(x) x +#define UINT16_C(x) x + +#undef INT32_C +#undef UINT32_C +#define INT32_C(x) x +#define UINT32_C(x) x ## U + +#undef INT64_C +#undef UINT64_C +#if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +#elif defined _MSC_VER +# define INT64_C(x) x##i64 +#elif @HAVE_LONG_LONG_INT@ +# define INT64_C(x) x##LL +#endif +#if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +#elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +#elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# define UINT64_C(x) x##ULL +#endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +#ifndef INTMAX_C +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +# elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +# else +# define INTMAX_C(x) x##L +# endif +#endif + +#ifndef UINTMAX_C +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +# elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +# else +# define UINTMAX_C(x) x##UL +# endif +#endif + +#endif /* _@GUARD_PREFIX@_STDINT_H */ +#endif /* !(defined __ANDROID__ && ...) */ +#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/grub-core/gnulib/stdio.in.h b/grub-core/gnulib/stdio.in.h new file mode 100644 index 000000000..e1d28cebf --- /dev/null +++ b/grub-core/gnulib/stdio.in.h @@ -0,0 +1,1333 @@ +/* A GNU-like . + + Copyright (C) 2004, 2007-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H +/* Special invocation convention: + - Inside glibc header files. + - On OSF/1 5.1 we have a sequence of nested includes + -> -> -> -> + -> -> -> . + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_STDIO_H + +#define _GL_ALREADY_INCLUDING_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#undef _GL_ALREADY_INCLUDING_STDIO_H + +#ifndef _@GUARD_PREFIX@_STDIO_H +#define _@GUARD_PREFIX@_STDIO_H + +/* Get va_list. Needed on many systems, including glibc 2.8. */ +#include + +#include + +/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 + and eglibc 2.11.2. + May also define off_t to a 64-bit type on native Windows. */ +#include + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, + except that it indicates to GCC that the supported format string directives + are the ones of the system printf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) + +/* _GL_ATTRIBUTE_FORMAT_SCANF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, + except that it indicates to GCC that the supported format string directives + are the ones of the system scanf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) + +/* Solaris 10 declares renameat in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \ + && ! defined __GLIBC__ +# include +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Macros for stringification. */ +#define _GL_STDIO_STRINGIZE(token) #token +#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) + + +#if @GNULIB_DPRINTF@ +# if @REPLACE_DPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dprintf rpl_dprintf +# endif +_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); +# else +# if !@HAVE_DPRINTF@ +_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); +# endif +_GL_CXXALIASWARN (dprintf); +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# if HAVE_RAW_DECL_DPRINTF +_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " + "use gnulib module dprintf for portability"); +# endif +#endif + +#if @GNULIB_FCLOSE@ +/* Close STREAM and its underlying file descriptor. */ +# if @REPLACE_FCLOSE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fclose rpl_fclose +# endif +_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fclose); +#elif defined GNULIB_POSIXCHECK +# undef fclose +/* Assume fclose is always declared. */ +_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " + "use gnulib module fclose for portable POSIX compliance"); +#endif + +#if @GNULIB_FDOPEN@ +# if @REPLACE_FDOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen rpl_fdopen +# endif +_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); +# else +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +#elif defined GNULIB_POSIXCHECK +# undef fdopen +/* Assume fdopen is always declared. */ +_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fdopen for portability"); +#endif + +#if @GNULIB_FFLUSH@ +/* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ +# if @REPLACE_FFLUSH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fflush rpl_fflush +# endif +_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); +_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); +# else +_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fflush); +#elif defined GNULIB_POSIXCHECK +# undef fflush +/* Assume fflush is always declared. */ +_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " + "use gnulib module fflush for portable POSIX compliance"); +#endif + +#if @GNULIB_FGETC@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgetc +# define fgetc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fgetc); +#endif + +#if @GNULIB_FGETS@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgets +# define fgets rpl_fgets +# endif +_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fgets); +#endif + +#if @GNULIB_FOPEN@ +# if @REPLACE_FOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fopen +# define fopen rpl_fopen +# endif +_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); +# else +_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); +# endif +_GL_CXXALIASWARN (fopen); +#elif defined GNULIB_POSIXCHECK +# undef fopen +/* Assume fopen is always declared. */ +_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fopen for portability"); +#endif + +#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ +# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ + || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fprintf rpl_fprintf +# endif +# define GNULIB_overrides_fprintf 1 +# if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fprintf); +#endif +#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_fprintf +# undef fprintf +# endif +/* Assume fprintf is always declared. */ +_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " + "use gnulib module fprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_FPURGE@ +/* Discard all pending buffered I/O data on STREAM. + STREAM must not be wide-character oriented. + When discarding pending output, the file position is set back to where it + was before the write calls. When discarding pending input, the file + position is advanced to match the end of the previously read input. + Return 0 if successful. Upon error, return -1 and set errno. */ +# if @REPLACE_FPURGE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fpurge rpl_fpurge +# endif +_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); +# else +# if !@HAVE_DECL_FPURGE@ +_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fpurge); +#elif defined GNULIB_POSIXCHECK +# undef fpurge +# if HAVE_RAW_DECL_FPURGE +_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " + "use gnulib module fpurge for portability"); +# endif +#endif + +#if @GNULIB_FPUTC@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputc +# define fputc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputc); +#endif + +#if @GNULIB_FPUTS@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputs +# define fputs rpl_fputs +# endif +_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputs); +#endif + +#if @GNULIB_FREAD@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fread +# define fread rpl_fread +# endif +_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((4))); +_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fread); +#endif + +#if @GNULIB_FREOPEN@ +# if @REPLACE_FREOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freopen +# define freopen rpl_freopen +# endif +_GL_FUNCDECL_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# else +_GL_CXXALIAS_SYS (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# endif +_GL_CXXALIASWARN (freopen); +#elif defined GNULIB_POSIXCHECK +# undef freopen +/* Assume freopen is always declared. */ +_GL_WARN_ON_USE (freopen, + "freopen on native Windows platforms is not POSIX compliant - " + "use gnulib module freopen for portability"); +#endif + +#if @GNULIB_FSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fscanf +# define fscanf rpl_fscanf +# endif +_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fscanf); +#endif + + +/* Set up the following warnings, based on which modules are in use. + GNU Coding Standards discourage the use of fseek, since it imposes + an arbitrary limitation on some 32-bit hosts. Remember that the + fseek module depends on the fseeko module, so we only have three + cases to consider: + + 1. The developer is not using either module. Issue a warning under + GNULIB_POSIXCHECK for both functions, to remind them that both + functions have bugs on some systems. _GL_NO_LARGE_FILES has no + impact on this warning. + + 2. The developer is using both modules. They may be unaware of the + arbitrary limitations of fseek, so issue a warning under + GNULIB_POSIXCHECK. On the other hand, they may be using both + modules intentionally, so the developer can define + _GL_NO_LARGE_FILES in the compilation units where the use of fseek + is safe, to silence the warning. + + 3. The developer is using the fseeko module, but not fseek. Gnulib + guarantees that fseek will still work around platform bugs in that + case, but we presume that the developer is aware of the pitfalls of + fseek and was trying to avoid it, so issue a warning even when + GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be + defined to silence the warning in particular compilation units. + In C++ compilations with GNULIB_NAMESPACE, in order to avoid that + fseek gets defined as a macro, it is recommended that the developer + uses the fseek module, even if he is not calling the fseek function. + + Most gnulib clients that perform stream operations should fall into + category 3. */ + +#if @GNULIB_FSEEK@ +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 2, above. */ +# undef fseek +# endif +# if @REPLACE_FSEEK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseek +# define fseek rpl_fseek +# endif +_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); +# endif +_GL_CXXALIASWARN (fseek); +#endif + +#if @GNULIB_FSEEKO@ +# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 3, above. */ +# undef fseek +# endif +# if @REPLACE_FSEEKO@ +/* Provide an fseeko function that is aware of a preceding fflush(), and which + detects pipes. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseeko +# define fseeko rpl_fseeko +# endif +_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); +# else +# if ! @HAVE_DECL_FSEEKO@ +_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (fseeko); +#elif defined GNULIB_POSIXCHECK +# define _GL_FSEEK_WARN /* Category 1, above. */ +# undef fseek +# undef fseeko +# if HAVE_RAW_DECL_FSEEKO +_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " + "use gnulib module fseeko for portability"); +# endif +#endif + +#ifdef _GL_FSEEK_WARN +# undef _GL_FSEEK_WARN +/* Here, either fseek is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_fseek (declared above). */ +_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use fseeko function for handling of large files"); +#endif + + +/* ftell, ftello. See the comments on fseek/fseeko. */ + +#if @GNULIB_FTELL@ +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 2, above. */ +# undef ftell +# endif +# if @REPLACE_FTELL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftell +# define ftell rpl_ftell +# endif +_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); +# else +_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftell); +#endif + +#if @GNULIB_FTELLO@ +# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 3, above. */ +# undef ftell +# endif +# if @REPLACE_FTELLO@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftello +# define ftello rpl_ftello +# endif +_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); +# else +# if ! @HAVE_DECL_FTELLO@ +_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftello); +#elif defined GNULIB_POSIXCHECK +# define _GL_FTELL_WARN /* Category 1, above. */ +# undef ftell +# undef ftello +# if HAVE_RAW_DECL_FTELLO +_GL_WARN_ON_USE (ftello, "ftello is unportable - " + "use gnulib module ftello for portability"); +# endif +#endif + +#ifdef _GL_FTELL_WARN +# undef _GL_FTELL_WARN +/* Here, either ftell is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_ftell (declared above). */ +_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use ftello function for handling of large files"); +#endif + + +#if @GNULIB_FWRITE@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fwrite +# define fwrite rpl_fwrite +# endif +_GL_FUNCDECL_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); + +/* Work around bug 11959 when fortifying glibc 2.4 through 2.15 + , + which sometimes causes an unwanted diagnostic for fwrite calls. + This affects only function declaration attributes under certain + versions of gcc, and is not needed for C++. */ +# if (0 < __USE_FORTIFY_LEVEL \ + && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ + && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ + && !defined __cplusplus) +# undef fwrite +# define fwrite(a, b, c, d) ({size_t __r = fwrite (a, b, c, d); __r; }) +# endif +# endif +_GL_CXXALIASWARN (fwrite); +#endif + +#if @GNULIB_GETC@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getc +# define getc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (getc); +#endif + +#if @GNULIB_GETCHAR@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getchar +# define getchar rpl_getchar +# endif +_GL_FUNCDECL_RPL (getchar, int, (void)); +_GL_CXXALIAS_RPL (getchar, int, (void)); +# else +_GL_CXXALIAS_SYS (getchar, int, (void)); +# endif +_GL_CXXALIASWARN (getchar); +#endif + +#if @GNULIB_GETDELIM@ +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if @REPLACE_GETDELIM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdelim +# define getdelim rpl_getdelim +# endif +_GL_FUNCDECL_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +_GL_CXXALIAS_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# else +# if !@HAVE_DECL_GETDELIM@ +_GL_FUNCDECL_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +# endif +_GL_CXXALIAS_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# endif +_GL_CXXALIASWARN (getdelim); +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# if HAVE_RAW_DECL_GETDELIM +_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " + "use gnulib module getdelim for portability"); +# endif +#endif + +#if @GNULIB_GETLINE@ +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if @REPLACE_GETLINE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getline +# define getline rpl_getline +# endif +_GL_FUNCDECL_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# else +# if !@HAVE_DECL_GETLINE@ +_GL_FUNCDECL_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# endif +# if @HAVE_DECL_GETLINE@ +_GL_CXXALIASWARN (getline); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# if HAVE_RAW_DECL_GETLINE +_GL_WARN_ON_USE (getline, "getline is unportable - " + "use gnulib module getline for portability"); +# endif +#endif + +/* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning; besides, C11 + removed it. */ +#undef gets +#if HAVE_RAW_DECL_GETS +#endif + + +#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ +struct obstack; +/* Grow an obstack with formatted output. Return the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. Upon + memory allocation error, call obstack_alloc_failed_handler. Upon + other error, return -1. */ +# if @REPLACE_OBSTACK_PRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_printf rpl_obstack_printf +# endif +_GL_FUNCDECL_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# else +# if !@HAVE_DECL_OBSTACK_PRINTF@ +_GL_FUNCDECL_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# endif +_GL_CXXALIASWARN (obstack_printf); +# if @REPLACE_OBSTACK_PRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_vprintf rpl_obstack_vprintf +# endif +_GL_FUNCDECL_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# else +# if !@HAVE_DECL_OBSTACK_PRINTF@ +_GL_FUNCDECL_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (obstack_vprintf); +#endif + +#if @GNULIB_PCLOSE@ +# if !@HAVE_PCLOSE@ +_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); +_GL_CXXALIASWARN (pclose); +#elif defined GNULIB_POSIXCHECK +# undef pclose +# if HAVE_RAW_DECL_PCLOSE +_GL_WARN_ON_USE (pclose, "pclose is unportable - " + "use gnulib module pclose for more portability"); +# endif +#endif + +#if @GNULIB_PERROR@ +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +# if @REPLACE_PERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define perror rpl_perror +# endif +_GL_FUNCDECL_RPL (perror, void, (const char *string)); +_GL_CXXALIAS_RPL (perror, void, (const char *string)); +# else +_GL_CXXALIAS_SYS (perror, void, (const char *string)); +# endif +_GL_CXXALIASWARN (perror); +#elif defined GNULIB_POSIXCHECK +# undef perror +/* Assume perror is always declared. */ +_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " + "use gnulib module perror for portability"); +#endif + +#if @GNULIB_POPEN@ +# if @REPLACE_POPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef popen +# define popen rpl_popen +# endif +_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); +# else +# if !@HAVE_POPEN@ +_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); +# endif +_GL_CXXALIASWARN (popen); +#elif defined GNULIB_POSIXCHECK +# undef popen +# if HAVE_RAW_DECL_POPEN +_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " + "use gnulib module popen or pipe for more portability"); +# endif +#endif + +#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ +# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ + || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +# endif +# if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define printf rpl_printf +# endif +_GL_FUNCDECL_RPL (printf, int, + (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); +# endif +# define GNULIB_overrides_printf 1 +# else +_GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (printf); +#endif +#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_printf +# undef printf +# endif +/* Assume printf is always declared. */ +_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " + "use gnulib module printf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_PUTC@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putc +# define putc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (putc); +#endif + +#if @GNULIB_PUTCHAR@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putchar +# define putchar rpl_putchar +# endif +_GL_FUNCDECL_RPL (putchar, int, (int c)); +_GL_CXXALIAS_RPL (putchar, int, (int c)); +# else +_GL_CXXALIAS_SYS (putchar, int, (int c)); +# endif +_GL_CXXALIASWARN (putchar); +#endif + +#if @GNULIB_PUTS@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef puts +# define puts rpl_puts +# endif +_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (puts, int, (const char *string)); +# else +_GL_CXXALIAS_SYS (puts, int, (const char *string)); +# endif +_GL_CXXALIASWARN (puts); +#endif + +#if @GNULIB_REMOVE@ +# if @REPLACE_REMOVE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remove +# define remove rpl_remove +# endif +_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (remove, int, (const char *name)); +# else +_GL_CXXALIAS_SYS (remove, int, (const char *name)); +# endif +_GL_CXXALIASWARN (remove); +#elif defined GNULIB_POSIXCHECK +# undef remove +/* Assume remove is always declared. */ +_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " + "use gnulib module remove for more portability"); +#endif + +#if @GNULIB_RENAME@ +# if @REPLACE_RENAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rename +# define rename rpl_rename +# endif +_GL_FUNCDECL_RPL (rename, int, + (const char *old_filename, const char *new_filename) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (rename, int, + (const char *old_filename, const char *new_filename)); +# else +_GL_CXXALIAS_SYS (rename, int, + (const char *old_filename, const char *new_filename)); +# endif +_GL_CXXALIASWARN (rename); +#elif defined GNULIB_POSIXCHECK +# undef rename +/* Assume rename is always declared. */ +_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " + "use gnulib module rename for more portability"); +#endif + +#if @GNULIB_RENAMEAT@ +# if @REPLACE_RENAMEAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef renameat +# define renameat rpl_renameat +# endif +_GL_FUNCDECL_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# else +# if !@HAVE_RENAMEAT@ +_GL_FUNCDECL_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# endif +_GL_CXXALIASWARN (renameat); +#elif defined GNULIB_POSIXCHECK +# undef renameat +# if HAVE_RAW_DECL_RENAMEAT +_GL_WARN_ON_USE (renameat, "renameat is not portable - " + "use gnulib module renameat for portability"); +# endif +#endif + +#if @GNULIB_SCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +/* Don't break __attribute__((format(scanf,M,N))). */ +# define scanf __scanf__ +# endif +_GL_FUNCDECL_RPL_1 (__scanf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +# define scanf rpl_scanf +# endif +_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); +# endif +# else +_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (scanf); +#endif + +#if @GNULIB_SNPRINTF@ +# if @REPLACE_SNPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define snprintf rpl_snprintf +# endif +_GL_FUNCDECL_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# else +# if !@HAVE_DECL_SNPRINTF@ +_GL_FUNCDECL_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# endif +_GL_CXXALIASWARN (snprintf); +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# if HAVE_RAW_DECL_SNPRINTF +_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " + "use gnulib module snprintf for portability"); +# endif +#endif + +/* Some people would argue that all sprintf uses should be warned about + (for example, OpenBSD issues a link warning for it), + since it can cause security holes due to buffer overruns. + However, we believe that sprintf can be used safely, and is more + efficient than snprintf in those safe cases; and as proof of our + belief, we use sprintf in several gnulib modules. So this header + intentionally avoids adding a warning to sprintf except when + GNULIB_POSIXCHECK is defined. */ + +#if @GNULIB_SPRINTF_POSIX@ +# if @REPLACE_SPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define sprintf rpl_sprintf +# endif +_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); +# endif +_GL_CXXALIASWARN (sprintf); +#elif defined GNULIB_POSIXCHECK +# undef sprintf +/* Assume sprintf is always declared. */ +_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " + "use gnulib module sprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_TMPFILE@ +# if @REPLACE_TMPFILE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tmpfile rpl_tmpfile +# endif +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); +_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); +# else +_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); +# endif +_GL_CXXALIASWARN (tmpfile); +#elif defined GNULIB_POSIXCHECK +# undef tmpfile +# if HAVE_RAW_DECL_TMPFILE +_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " + "use gnulib module tmpfile for portability"); +# endif +#endif + +#if @GNULIB_VASPRINTF@ +/* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ +# if @REPLACE_VASPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define asprintf rpl_asprintf +# endif +_GL_FUNCDECL_RPL (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (asprintf, int, + (char **result, const char *format, ...)); +# else +# if !@HAVE_VASPRINTF@ +_GL_FUNCDECL_SYS (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (asprintf, int, + (char **result, const char *format, ...)); +# endif +_GL_CXXALIASWARN (asprintf); +# if @REPLACE_VASPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vasprintf rpl_vasprintf +# endif +_GL_FUNCDECL_RPL (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vasprintf, int, + (char **result, const char *format, va_list args)); +# else +# if !@HAVE_VASPRINTF@ +_GL_FUNCDECL_SYS (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (vasprintf, int, + (char **result, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vasprintf); +#endif + +#if @GNULIB_VDPRINTF@ +# if @REPLACE_VDPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vdprintf rpl_vdprintf +# endif +_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); +# else +# if !@HAVE_VDPRINTF@ +_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on Solaris, the third parameter will likely be + __va_list args. */ +_GL_CXXALIAS_SYS_CAST (vdprintf, int, + (int fd, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vdprintf); +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# if HAVE_RAW_DECL_VDPRINTF +_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " + "use gnulib module vdprintf for portability"); +# endif +#endif + +#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ +# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ + || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vfprintf rpl_vfprintf +# endif +# define GNULIB_overrides_vfprintf 1 +# if @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vfprintf, int, + (FILE *fp, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfprintf); +#endif +#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vfprintf +# undef vfprintf +# endif +/* Assume vfprintf is always declared. */ +_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " + "use gnulib module vfprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_VFSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vfscanf +# define vfscanf rpl_vfscanf +# endif +_GL_FUNCDECL_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfscanf); +#endif + +#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ +# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ + || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vprintf rpl_vprintf +# endif +# define GNULIB_overrides_vprintf 1 +# if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the second parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vprintf); +#endif +#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vprintf +# undef vprintf +# endif +/* Assume vprintf is always declared. */ +_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " + "use gnulib module vprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_VSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vscanf +# define vscanf rpl_vscanf +# endif +_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vscanf); +#endif + +#if @GNULIB_VSNPRINTF@ +# if @REPLACE_VSNPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsnprintf rpl_vsnprintf +# endif +_GL_FUNCDECL_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# else +# if !@HAVE_DECL_VSNPRINTF@ +_GL_FUNCDECL_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsnprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# if HAVE_RAW_DECL_VSNPRINTF +_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " + "use gnulib module vsnprintf for portability"); +# endif +#endif + +#if @GNULIB_VSPRINTF_POSIX@ +# if @REPLACE_VSPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsprintf rpl_vsprintf +# endif +_GL_FUNCDECL_RPL (vsprintf, int, + (char *str, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vsprintf, int, + (char *str, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vsprintf, int, + (char *str, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +/* Assume vsprintf is always declared. */ +_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " + "use gnulib module vsprintf-posix for portable " + "POSIX compliance"); +#endif + +#endif /* _@GUARD_PREFIX@_STDIO_H */ +#endif /* _@GUARD_PREFIX@_STDIO_H */ +#endif diff --git a/grub-core/gnulib/stdlib.in.h b/grub-core/gnulib/stdlib.in.h new file mode 100644 index 000000000..c9552480e --- /dev/null +++ b/grub-core/gnulib/stdlib.in.h @@ -0,0 +1,954 @@ +/* A GNU-like . + + Copyright (C) 1995, 2001-2004, 2006-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc +/* Special invocation conventions inside some gnulib header files, + and inside some glibc header files, respectively. */ + +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#ifndef _@GUARD_PREFIX@_STDLIB_H +#define _@GUARD_PREFIX@_STDLIB_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* MirBSD 10 defines WEXITSTATUS in , not in . */ +#if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS +# include +#endif + +/* Solaris declares getloadavg() in . */ +#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ +# include +#endif + +/* Native Windows platforms declare mktemp() in . */ +#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# include +#endif + +#if @GNULIB_RANDOM_R@ + +/* OSF/1 5.1 declares 'struct random_data' in , which is included + from if _REENTRANT is defined. Include it whenever we need + 'struct random_data'. */ +# if @HAVE_RANDOM_H@ +# include +# endif + +# if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ +# include +# endif + +# if !@HAVE_STRUCT_RANDOM_DATA@ +/* Define 'struct random_data'. + But allow multiple gnulib generated replacements to coexist. */ +# if !GNULIB_defined_struct_random_data +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +# define GNULIB_defined_struct_random_data 1 +# endif +# endif +#endif + +#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +/* On Mac OS X 10.3, only declares mkstemp. */ +/* On Mac OS X 10.5, only declares mkstemps. */ +/* On Cygwin 1.7.1, only declares getsubopt. */ +/* But avoid namespace pollution on glibc systems and native Windows. */ +# include +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The definition of _Noreturn is copied here. */ + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#if @GNULIB__EXIT@ +/* Terminate the current process with the given return code, without running + the 'atexit' handlers. */ +# if !@HAVE__EXIT@ +_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); +# endif +_GL_CXXALIAS_SYS (_Exit, void, (int status)); +_GL_CXXALIASWARN (_Exit); +#elif defined GNULIB_POSIXCHECK +# undef _Exit +# if HAVE_RAW_DECL__EXIT +_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " + "use gnulib module _Exit for portability"); +# endif +#endif + + +#if @GNULIB_ATOLL@ +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +# if !@HAVE_ATOLL@ +_GL_FUNCDECL_SYS (atoll, long long, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); +_GL_CXXALIASWARN (atoll); +#elif defined GNULIB_POSIXCHECK +# undef atoll +# if HAVE_RAW_DECL_ATOLL +_GL_WARN_ON_USE (atoll, "atoll is unportable - " + "use gnulib module atoll for portability"); +# endif +#endif + +#if @GNULIB_CALLOC_POSIX@ +# if @REPLACE_CALLOC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef calloc +# define calloc rpl_calloc +# endif +_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); +_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); +# else +_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); +# endif +_GL_CXXALIASWARN (calloc); +#elif defined GNULIB_POSIXCHECK +# undef calloc +/* Assume calloc is always declared. */ +_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " + "use gnulib module calloc-posix for portability"); +#endif + +#if @GNULIB_CANONICALIZE_FILE_NAME@ +# if @REPLACE_CANONICALIZE_FILE_NAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define canonicalize_file_name rpl_canonicalize_file_name +# endif +_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); +# else +# if !@HAVE_CANONICALIZE_FILE_NAME@ +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); +# endif +_GL_CXXALIASWARN (canonicalize_file_name); +#elif defined GNULIB_POSIXCHECK +# undef canonicalize_file_name +# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME +_GL_WARN_ON_USE (canonicalize_file_name, + "canonicalize_file_name is unportable - " + "use gnulib module canonicalize-lgpl for portability"); +# endif +#endif + +#if @GNULIB_GETLOADAVG@ +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +# if !@HAVE_DECL_GETLOADAVG@ +_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); +_GL_CXXALIASWARN (getloadavg); +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# if HAVE_RAW_DECL_GETLOADAVG +_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " + "use gnulib module getloadavg for portability"); +# endif +#endif + +#if @GNULIB_GETSUBOPT@ +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX:2001 specification. + http://www.opengroup.org/susv3xsh/getsubopt.html */ +# if !@HAVE_GETSUBOPT@ +_GL_FUNCDECL_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep)); +_GL_CXXALIASWARN (getsubopt); +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# if HAVE_RAW_DECL_GETSUBOPT +_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " + "use gnulib module getsubopt for portability"); +# endif +#endif + +#if @GNULIB_GRANTPT@ +/* Change the ownership and access permission of the slave side of the + pseudo-terminal whose master side is specified by FD. */ +# if !@HAVE_GRANTPT@ +_GL_FUNCDECL_SYS (grantpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (grantpt, int, (int fd)); +_GL_CXXALIASWARN (grantpt); +#elif defined GNULIB_POSIXCHECK +# undef grantpt +# if HAVE_RAW_DECL_GRANTPT +_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " + "use gnulib module grantpt for portability"); +# endif +#endif + +/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not + rely on GNU or POSIX semantics for malloc and realloc (for example, + by never specifying a zero size), so it does not need malloc or + realloc to be redefined. */ +#if @GNULIB_MALLOC_POSIX@ +# if @REPLACE_MALLOC@ +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef malloc +# define malloc rpl_malloc +# endif +_GL_FUNCDECL_RPL (malloc, void *, (size_t size)); +_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); +# else +_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); +# endif +_GL_CXXALIASWARN (malloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef malloc +/* Assume malloc is always declared. */ +_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " + "use gnulib module malloc-posix for portability"); +#endif + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBTOWC@ +# if @REPLACE_MBTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbtowc +# define mbtowc rpl_mbtowc +# endif +_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# else +_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# endif +_GL_CXXALIASWARN (mbtowc); +#endif + +#if @GNULIB_MKDTEMP@ +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +# if !@HAVE_MKDTEMP@ +_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); +_GL_CXXALIASWARN (mkdtemp); +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# if HAVE_RAW_DECL_MKDTEMP +_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " + "use gnulib module mkdtemp for portability"); +# endif +#endif + +#if @GNULIB_MKOSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKOSTEMP@ +_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemp); +#elif defined GNULIB_POSIXCHECK +# undef mkostemp +# if HAVE_RAW_DECL_MKOSTEMP +_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " + "use gnulib module mkostemp for portability"); +# endif +#endif + +#if @GNULIB_MKOSTEMPS@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE before a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKOSTEMPS@ +_GL_FUNCDECL_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemps); +#elif defined GNULIB_POSIXCHECK +# undef mkostemps +# if HAVE_RAW_DECL_MKOSTEMPS +_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " + "use gnulib module mkostemps for portability"); +# endif +#endif + +#if @GNULIB_MKSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if @REPLACE_MKSTEMP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkstemp rpl_mkstemp +# endif +_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); +# else +# if ! @HAVE_MKSTEMP@ +_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mkstemp); +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# if HAVE_RAW_DECL_MKSTEMP +_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " + "use gnulib module mkstemp for portability"); +# endif +#endif + +#if @GNULIB_MKSTEMPS@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE prior to a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKSTEMPS@ +_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); +_GL_CXXALIASWARN (mkstemps); +#elif defined GNULIB_POSIXCHECK +# undef mkstemps +# if HAVE_RAW_DECL_MKSTEMPS +_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " + "use gnulib module mkstemps for portability"); +# endif +#endif + +#if @GNULIB_POSIX_OPENPT@ +/* Return an FD open to the master side of a pseudo-terminal. Flags should + include O_RDWR, and may also include O_NOCTTY. */ +# if !@HAVE_POSIX_OPENPT@ +_GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); +# endif +_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); +_GL_CXXALIASWARN (posix_openpt); +#elif defined GNULIB_POSIXCHECK +# undef posix_openpt +# if HAVE_RAW_DECL_POSIX_OPENPT +_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " + "use gnulib module posix_openpt for portability"); +# endif +#endif + +#if @GNULIB_PTSNAME@ +/* Return the pathname of the pseudo-terminal slave associated with + the master FD is open on, or NULL on errors. */ +# if @REPLACE_PTSNAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname +# define ptsname rpl_ptsname +# endif +_GL_FUNCDECL_RPL (ptsname, char *, (int fd)); +_GL_CXXALIAS_RPL (ptsname, char *, (int fd)); +# else +# if !@HAVE_PTSNAME@ +_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIASWARN (ptsname); +#elif defined GNULIB_POSIXCHECK +# undef ptsname +# if HAVE_RAW_DECL_PTSNAME +_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " + "use gnulib module ptsname for portability"); +# endif +#endif + +#if @GNULIB_PTSNAME_R@ +/* Set the pathname of the pseudo-terminal slave associated with + the master FD is open on and return 0, or set errno and return + non-zero on errors. */ +# if @REPLACE_PTSNAME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname_r +# define ptsname_r rpl_ptsname_r +# endif +_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +# else +# if !@HAVE_PTSNAME_R@ +_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIASWARN (ptsname_r); +#elif defined GNULIB_POSIXCHECK +# undef ptsname_r +# if HAVE_RAW_DECL_PTSNAME_R +_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " + "use gnulib module ptsname_r for portability"); +# endif +#endif + +#if @GNULIB_PUTENV@ +# if @REPLACE_PUTENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv rpl_putenv +# endif +_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#endif + + +#if @GNULIB_RANDOM_R@ +# if !@HAVE_RANDOM_R@ +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif +# endif +#endif + + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (random, long, (void)); +# endif +_GL_CXXALIAS_SYS (random, long, (void)); +_GL_CXXALIASWARN (random); +#elif defined GNULIB_POSIXCHECK +# undef random +# if HAVE_RAW_DECL_RANDOM +_GL_WARN_ON_USE (random, "random is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); +# endif +_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); +_GL_CXXALIASWARN (srandom); +#elif defined GNULIB_POSIXCHECK +# undef srandom +# if HAVE_RAW_DECL_SRANDOM +_GL_WARN_ON_USE (srandom, "srandom is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +_GL_CXXALIASWARN (initstate); +#elif defined GNULIB_POSIXCHECK +# undef initstate +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate, "initstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); +_GL_CXXALIASWARN (setstate); +#elif defined GNULIB_POSIXCHECK +# undef setstate +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate, "setstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random_r +# define random_r rpl_random_r +# endif +_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); +# endif +_GL_CXXALIASWARN (random_r); +#elif defined GNULIB_POSIXCHECK +# undef random_r +# if HAVE_RAW_DECL_RANDOM_R +_GL_WARN_ON_USE (random_r, "random_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom_r +# define srandom_r rpl_srandom_r +# endif +_GL_FUNCDECL_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (srandom_r); +#elif defined GNULIB_POSIXCHECK +# undef srandom_r +# if HAVE_RAW_DECL_SRANDOM_R +_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate_r +# define initstate_r rpl_initstate_r +# endif +_GL_FUNCDECL_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (initstate_r); +#elif defined GNULIB_POSIXCHECK +# undef initstate_r +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate_r +# define setstate_r rpl_setstate_r +# endif +_GL_FUNCDECL_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (setstate_r); +#elif defined GNULIB_POSIXCHECK +# undef setstate_r +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + + +#if @GNULIB_REALLOC_POSIX@ +# if @REPLACE_REALLOC@ +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef realloc +# define realloc rpl_realloc +# endif +_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); +_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); +# else +_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); +# endif +_GL_CXXALIASWARN (realloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef realloc +/* Assume realloc is always declared. */ +_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " + "use gnulib module realloc-posix for portability"); +#endif + +#if @GNULIB_REALPATH@ +# if @REPLACE_REALPATH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define realpath rpl_realpath +# endif +_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); +# else +# if !@HAVE_REALPATH@ +_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); +# endif +_GL_CXXALIASWARN (realpath); +#elif defined GNULIB_POSIXCHECK +# undef realpath +# if HAVE_RAW_DECL_REALPATH +_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " + "canonicalize or canonicalize-lgpl for portability"); +# endif +#endif + +#if @GNULIB_RPMATCH@ +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +# if !@HAVE_RPMATCH@ +_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); +_GL_CXXALIASWARN (rpmatch); +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# if HAVE_RAW_DECL_RPMATCH +_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " + "use gnulib module rpmatch for portability"); +# endif +#endif + +#if @GNULIB_SECURE_GETENV@ +/* Look up NAME in the environment, returning 0 in insecure situations. */ +# if !@HAVE_SECURE_GETENV@ +_GL_FUNCDECL_SYS (secure_getenv, char *, + (char const *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); +_GL_CXXALIASWARN (secure_getenv); +#elif defined GNULIB_POSIXCHECK +# undef secure_getenv +# if HAVE_RAW_DECL_SECURE_GETENV +_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " + "use gnulib module secure_getenv for portability"); +# endif +#endif + +#if @GNULIB_SETENV@ +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +# if @REPLACE_SETENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setenv +# define setenv rpl_setenv +# endif +_GL_FUNCDECL_RPL (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setenv, int, + (const char *name, const char *value, int replace)); +# else +# if !@HAVE_DECL_SETENV@ +_GL_FUNCDECL_SYS (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setenv, int, + (const char *name, const char *value, int replace)); +# endif +# if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) +_GL_CXXALIASWARN (setenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setenv +# if HAVE_RAW_DECL_SETENV +_GL_WARN_ON_USE (setenv, "setenv is unportable - " + "use gnulib module setenv for portability"); +# endif +#endif + +#if @GNULIB_STRTOD@ + /* Parse a double from STRING, updating ENDP if appropriate. */ +# if @REPLACE_STRTOD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtod rpl_strtod +# endif +_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); +# else +# if !@HAVE_STRTOD@ +_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); +# endif +_GL_CXXALIASWARN (strtod); +#elif defined GNULIB_POSIXCHECK +# undef strtod +# if HAVE_RAW_DECL_STRTOD +_GL_WARN_ON_USE (strtod, "strtod is unportable - " + "use gnulib module strtod for portability"); +# endif +#endif + +#if @GNULIB_STRTOLL@ +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +# if !@HAVE_STRTOLL@ +_GL_FUNCDECL_SYS (strtoll, long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoll, long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoll); +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# if HAVE_RAW_DECL_STRTOLL +_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " + "use gnulib module strtoll for portability"); +# endif +#endif + +#if @GNULIB_STRTOULL@ +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +# if !@HAVE_STRTOULL@ +_GL_FUNCDECL_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoull); +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# if HAVE_RAW_DECL_STRTOULL +_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " + "use gnulib module strtoull for portability"); +# endif +#endif + +#if @GNULIB_UNLOCKPT@ +/* Unlock the slave side of the pseudo-terminal whose master side is specified + by FD, so that it can be opened. */ +# if !@HAVE_UNLOCKPT@ +_GL_FUNCDECL_SYS (unlockpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); +_GL_CXXALIASWARN (unlockpt); +#elif defined GNULIB_POSIXCHECK +# undef unlockpt +# if HAVE_RAW_DECL_UNLOCKPT +_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " + "use gnulib module unlockpt for portability"); +# endif +#endif + +#if @GNULIB_UNSETENV@ +/* Remove the variable NAME from the environment. */ +# if @REPLACE_UNSETENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unsetenv +# define unsetenv rpl_unsetenv +# endif +_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); +# else +# if !@HAVE_DECL_UNSETENV@ +_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); +# endif +# if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) +_GL_CXXALIASWARN (unsetenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef unsetenv +# if HAVE_RAW_DECL_UNSETENV +_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " + "use gnulib module unsetenv for portability"); +# endif +#endif + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCTOMB@ +# if @REPLACE_WCTOMB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctomb +# define wctomb rpl_wctomb +# endif +_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); +_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); +# else +_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); +# endif +_GL_CXXALIASWARN (wctomb); +#endif + + +#endif /* _@GUARD_PREFIX@_STDLIB_H */ +#endif /* _@GUARD_PREFIX@_STDLIB_H */ +#endif diff --git a/grub-core/gnulib/strcasecmp.c b/grub-core/gnulib/strcasecmp.c new file mode 100644 index 000000000..0f0a742ff --- /dev/null +++ b/grub-core/gnulib/strcasecmp.c @@ -0,0 +1,62 @@ +/* Case-insensitive string comparison function. + Copyright (C) 1998-1999, 2005-2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. + Note: This function does not work with multibyte strings! */ + +int +strcasecmp (const char *s1, const char *s2) +{ + const unsigned char *p1 = (const unsigned char *) s1; + const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = TOLOWER (*p1); + c2 = TOLOWER (*p2); + + if (c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/grub-core/gnulib/strchrnul.c b/grub-core/gnulib/strchrnul.c new file mode 100644 index 000000000..f6b072274 --- /dev/null +++ b/grub-core/gnulib/strchrnul.c @@ -0,0 +1,142 @@ +/* Searching in a string. + Copyright (C) 2003, 2007-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Find the first occurrence of C in S or the final NUL byte. */ +char * +strchrnul (const char *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + if (!c) + return rawmemchr (s, 0); + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (!*char_ptr || *char_ptr == c) + return (char *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 or + longword2 is zero. + + Let's consider longword1. We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 or longword2 is zero is equivalent + to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine + this into a single test, whether (tmp1 | tmp2) is nonzero. + + This test can read more than one byte beyond the end of a string, + depending on where the terminating NUL is encountered. However, + this is considered safe since the initialization phase ensured + that the read will be aligned, therefore, the read will not cross + page boundaries and will not cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + longword longword2 = *longword_ptr; + + if (((((longword1 - repeated_one) & ~longword1) + | ((longword2 - repeated_one) & ~longword2)) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == 0 or == c. On little-endian machines, + we could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr && (*char_ptr != c)) + char_ptr++; + return (char *) char_ptr; +} diff --git a/grub-core/gnulib/strchrnul.valgrind b/grub-core/gnulib/strchrnul.valgrind new file mode 100644 index 000000000..b14fa1304 --- /dev/null +++ b/grub-core/gnulib/strchrnul.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in strchrnul(). +# This use is OK because it provides only a speedup. +{ + strchrnul-value4 + Memcheck:Value4 + fun:strchrnul +} +{ + strchrnul-value8 + Memcheck:Value8 + fun:strchrnul +} diff --git a/grub-core/gnulib/streq.h b/grub-core/gnulib/streq.h new file mode 100644 index 000000000..12c1867c8 --- /dev/null +++ b/grub-core/gnulib/streq.h @@ -0,0 +1,176 @@ +/* Optimized string comparison. + Copyright (C) 2001-2002, 2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#ifndef _GL_STREQ_H +#define _GL_STREQ_H + +#include + +/* STREQ_OPT allows to optimize string comparison with a small literal string. + STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + is semantically equivalent to + strcmp (s, "EUC-KR") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if defined (__GNUC__) && defined (__OPTIMIZE__) + +static inline int +streq9 (const char *s1, const char *s2) +{ + return strcmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +streq8 (const char *s1, const char *s2, char s28) +{ + if (s1[8] == s28) + { + if (s28 == 0) + return 1; + else + return streq9 (s1, s2); + } + else + return 0; +} + +static inline int +streq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (s1[7] == s27) + { + if (s27 == 0) + return 1; + else + return streq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +streq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (s1[6] == s26) + { + if (s26 == 0) + return 1; + else + return streq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (s1[5] == s25) + { + if (s25 == 0) + return 1; + else + return streq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[4] == s24) + { + if (s24 == 0) + return 1; + else + return streq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[3] == s23) + { + if (s23 == 0) + return 1; + else + return streq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[2] == s22) + { + if (s22 == 0) + return 1; + else + return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[1] == s21) + { + if (s21 == 0) + return 1; + else + return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[0] == s20) + { + if (s20 == 0) + return 1; + else + return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (strcmp (s1, s2) == 0) + +#endif + +#endif /* _GL_STREQ_H */ diff --git a/grub-core/gnulib/strerror-override.c b/grub-core/gnulib/strerror-override.c new file mode 100644 index 000000000..d0ed2fb86 --- /dev/null +++ b/grub-core/gnulib/strerror-override.c @@ -0,0 +1,302 @@ +/* strerror-override.c --- POSIX compatible system error routine + + Copyright (C) 2010-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2010. */ + +#include + +#include "strerror-override.h" + +#include + +#if GNULIB_defined_EWINSOCK /* native Windows platforms */ +# if HAVE_WINSOCK2_H +# include +# endif +#endif + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +const char * +strerror_override (int errnum) +{ + /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ + switch (errnum) + { +#if REPLACE_STRERROR_0 + case 0: + return "Success"; +#endif + +#if GNULIB_defined_ESOCK /* native Windows platforms with older */ + case EINPROGRESS: + return "Operation now in progress"; + case EALREADY: + return "Operation already in progress"; + case ENOTSOCK: + return "Socket operation on non-socket"; + case EDESTADDRREQ: + return "Destination address required"; + case EMSGSIZE: + return "Message too long"; + case EPROTOTYPE: + return "Protocol wrong type for socket"; + case ENOPROTOOPT: + return "Protocol not available"; + case EPROTONOSUPPORT: + return "Protocol not supported"; + case EOPNOTSUPP: + return "Operation not supported"; + case EAFNOSUPPORT: + return "Address family not supported by protocol"; + case EADDRINUSE: + return "Address already in use"; + case EADDRNOTAVAIL: + return "Cannot assign requested address"; + case ENETDOWN: + return "Network is down"; + case ENETUNREACH: + return "Network is unreachable"; + case ECONNRESET: + return "Connection reset by peer"; + case ENOBUFS: + return "No buffer space available"; + case EISCONN: + return "Transport endpoint is already connected"; + case ENOTCONN: + return "Transport endpoint is not connected"; + case ETIMEDOUT: + return "Connection timed out"; + case ECONNREFUSED: + return "Connection refused"; + case ELOOP: + return "Too many levels of symbolic links"; + case EHOSTUNREACH: + return "No route to host"; + case EWOULDBLOCK: + return "Operation would block"; +#endif +#if GNULIB_defined_ESTREAMS /* native Windows platforms with older */ + case ETXTBSY: + return "Text file busy"; + case ENODATA: + return "No data available"; + case ENOSR: + return "Out of streams resources"; + case ENOSTR: + return "Device not a stream"; + case ETIME: + return "Timer expired"; + case EOTHER: + return "Other error"; +#endif +#if GNULIB_defined_EWINSOCK /* native Windows platforms */ + case ESOCKTNOSUPPORT: + return "Socket type not supported"; + case EPFNOSUPPORT: + return "Protocol family not supported"; + case ESHUTDOWN: + return "Cannot send after transport endpoint shutdown"; + case ETOOMANYREFS: + return "Too many references: cannot splice"; + case EHOSTDOWN: + return "Host is down"; + case EPROCLIM: + return "Too many processes"; + case EUSERS: + return "Too many users"; + case EDQUOT: + return "Disk quota exceeded"; + case ESTALE: + return "Stale NFS file handle"; + case EREMOTE: + return "Object is remote"; +# if HAVE_WINSOCK2_H + /* WSA_INVALID_HANDLE maps to EBADF */ + /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ + /* WSA_INVALID_PARAMETER maps to EINVAL */ + case WSA_OPERATION_ABORTED: + return "Overlapped operation aborted"; + case WSA_IO_INCOMPLETE: + return "Overlapped I/O event object not in signaled state"; + case WSA_IO_PENDING: + return "Overlapped operations will complete later"; + /* WSAEINTR maps to EINTR */ + /* WSAEBADF maps to EBADF */ + /* WSAEACCES maps to EACCES */ + /* WSAEFAULT maps to EFAULT */ + /* WSAEINVAL maps to EINVAL */ + /* WSAEMFILE maps to EMFILE */ + /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ + /* WSAEINPROGRESS maps to EINPROGRESS */ + /* WSAEALREADY maps to EALREADY */ + /* WSAENOTSOCK maps to ENOTSOCK */ + /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ + /* WSAEMSGSIZE maps to EMSGSIZE */ + /* WSAEPROTOTYPE maps to EPROTOTYPE */ + /* WSAENOPROTOOPT maps to ENOPROTOOPT */ + /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ + /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ + /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ + /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ + /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ + /* WSAEADDRINUSE maps to EADDRINUSE */ + /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ + /* WSAENETDOWN maps to ENETDOWN */ + /* WSAENETUNREACH maps to ENETUNREACH */ + /* WSAENETRESET maps to ENETRESET */ + /* WSAECONNABORTED maps to ECONNABORTED */ + /* WSAECONNRESET maps to ECONNRESET */ + /* WSAENOBUFS maps to ENOBUFS */ + /* WSAEISCONN maps to EISCONN */ + /* WSAENOTCONN maps to ENOTCONN */ + /* WSAESHUTDOWN is ESHUTDOWN */ + /* WSAETOOMANYREFS is ETOOMANYREFS */ + /* WSAETIMEDOUT maps to ETIMEDOUT */ + /* WSAECONNREFUSED maps to ECONNREFUSED */ + /* WSAELOOP maps to ELOOP */ + /* WSAENAMETOOLONG maps to ENAMETOOLONG */ + /* WSAEHOSTDOWN is EHOSTDOWN */ + /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ + /* WSAENOTEMPTY maps to ENOTEMPTY */ + /* WSAEPROCLIM is EPROCLIM */ + /* WSAEUSERS is EUSERS */ + /* WSAEDQUOT is EDQUOT */ + /* WSAESTALE is ESTALE */ + /* WSAEREMOTE is EREMOTE */ + case WSASYSNOTREADY: + return "Network subsystem is unavailable"; + case WSAVERNOTSUPPORTED: + return "Winsock.dll version out of range"; + case WSANOTINITIALISED: + return "Successful WSAStartup not yet performed"; + case WSAEDISCON: + return "Graceful shutdown in progress"; + case WSAENOMORE: case WSA_E_NO_MORE: + return "No more results"; + case WSAECANCELLED: case WSA_E_CANCELLED: + return "Call was canceled"; + case WSAEINVALIDPROCTABLE: + return "Procedure call table is invalid"; + case WSAEINVALIDPROVIDER: + return "Service provider is invalid"; + case WSAEPROVIDERFAILEDINIT: + return "Service provider failed to initialize"; + case WSASYSCALLFAILURE: + return "System call failure"; + case WSASERVICE_NOT_FOUND: + return "Service not found"; + case WSATYPE_NOT_FOUND: + return "Class type not found"; + case WSAEREFUSED: + return "Database query was refused"; + case WSAHOST_NOT_FOUND: + return "Host not found"; + case WSATRY_AGAIN: + return "Nonauthoritative host not found"; + case WSANO_RECOVERY: + return "Nonrecoverable error"; + case WSANO_DATA: + return "Valid name, no data record of requested type"; + /* WSA_QOS_* omitted */ +# endif +#endif + +#if GNULIB_defined_ENOMSG + case ENOMSG: + return "No message of desired type"; +#endif + +#if GNULIB_defined_EIDRM + case EIDRM: + return "Identifier removed"; +#endif + +#if GNULIB_defined_ENOLINK + case ENOLINK: + return "Link has been severed"; +#endif + +#if GNULIB_defined_EPROTO + case EPROTO: + return "Protocol error"; +#endif + +#if GNULIB_defined_EMULTIHOP + case EMULTIHOP: + return "Multihop attempted"; +#endif + +#if GNULIB_defined_EBADMSG + case EBADMSG: + return "Bad message"; +#endif + +#if GNULIB_defined_EOVERFLOW + case EOVERFLOW: + return "Value too large for defined data type"; +#endif + +#if GNULIB_defined_ENOTSUP + case ENOTSUP: + return "Not supported"; +#endif + +#if GNULIB_defined_ENETRESET + case ENETRESET: + return "Network dropped connection on reset"; +#endif + +#if GNULIB_defined_ECONNABORTED + case ECONNABORTED: + return "Software caused connection abort"; +#endif + +#if GNULIB_defined_ESTALE + case ESTALE: + return "Stale NFS file handle"; +#endif + +#if GNULIB_defined_EDQUOT + case EDQUOT: + return "Disk quota exceeded"; +#endif + +#if GNULIB_defined_ECANCELED + case ECANCELED: + return "Operation canceled"; +#endif + +#if GNULIB_defined_EOWNERDEAD + case EOWNERDEAD: + return "Owner died"; +#endif + +#if GNULIB_defined_ENOTRECOVERABLE + case ENOTRECOVERABLE: + return "State not recoverable"; +#endif + +#if GNULIB_defined_EILSEQ + case EILSEQ: + return "Invalid or incomplete multibyte or wide character"; +#endif + + default: + return NULL; + } +} diff --git a/grub-core/gnulib/strerror-override.h b/grub-core/gnulib/strerror-override.h new file mode 100644 index 000000000..3b8f24b99 --- /dev/null +++ b/grub-core/gnulib/strerror-override.h @@ -0,0 +1,56 @@ +/* strerror-override.h --- POSIX compatible system error routine + + Copyright (C) 2010-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_STRERROR_OVERRIDE_H +# define _GL_STRERROR_OVERRIDE_H + +# include +# include + +/* Reasonable buffer size that should never trigger ERANGE; if this + proves too small, we intentionally abort(), to remind us to fix + this value. */ +# define STACKBUF_LEN 256 + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +# if REPLACE_STRERROR_0 \ + || GNULIB_defined_ESOCK \ + || GNULIB_defined_ESTREAMS \ + || GNULIB_defined_EWINSOCK \ + || GNULIB_defined_ENOMSG \ + || GNULIB_defined_EIDRM \ + || GNULIB_defined_ENOLINK \ + || GNULIB_defined_EPROTO \ + || GNULIB_defined_EMULTIHOP \ + || GNULIB_defined_EBADMSG \ + || GNULIB_defined_EOVERFLOW \ + || GNULIB_defined_ENOTSUP \ + || GNULIB_defined_ENETRESET \ + || GNULIB_defined_ECONNABORTED \ + || GNULIB_defined_ESTALE \ + || GNULIB_defined_EDQUOT \ + || GNULIB_defined_ECANCELED \ + || GNULIB_defined_EOWNERDEAD \ + || GNULIB_defined_ENOTRECOVERABLE \ + || GNULIB_defined_EILSEQ +extern const char *strerror_override (int errnum); +# else +# define strerror_override(ignored) NULL +# endif + +#endif /* _GL_STRERROR_OVERRIDE_H */ diff --git a/grub-core/gnulib/strerror.c b/grub-core/gnulib/strerror.c new file mode 100644 index 000000000..80a2f2eea --- /dev/null +++ b/grub-core/gnulib/strerror.c @@ -0,0 +1,70 @@ +/* strerror.c --- POSIX compatible system error routine + + Copyright (C) 2007-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include +#include + +#include "intprops.h" +#include "strerror-override.h" +#include "verify.h" + +/* Use the system functions, not the gnulib overrides in this file. */ +#undef sprintf + +char * +strerror (int n) +#undef strerror +{ + static char buf[STACKBUF_LEN]; + size_t len; + + /* Cast away const, due to the historical signature of strerror; + callers should not be modifying the string. */ + const char *msg = strerror_override (n); + if (msg) + return (char *) msg; + + msg = strerror (n); + + /* Our strerror_r implementation might use the system's strerror + buffer, so all other clients of strerror have to see the error + copied into a buffer that we manage. This is not thread-safe, + even if the system strerror is, but portable programs shouldn't + be using strerror if they care about thread-safety. */ + if (!msg || !*msg) + { + static char const fmt[] = "Unknown error %d"; + verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); + sprintf (buf, fmt, n); + errno = EINVAL; + return buf; + } + + /* Fix STACKBUF_LEN if this ever aborts. */ + len = strlen (msg); + if (sizeof buf <= len) + abort (); + + return memcpy (buf, msg, len + 1); +} diff --git a/grub-core/gnulib/string.in.h b/grub-core/gnulib/string.in.h new file mode 100644 index 000000000..d7a6c9c92 --- /dev/null +++ b/grub-core/gnulib/string.in.h @@ -0,0 +1,1029 @@ +/* A GNU-like . + + Copyright (C) 1995-1996, 2001-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _@GUARD_PREFIX@_STRING_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STRING_H@ + +#ifndef _@GUARD_PREFIX@_STRING_H +#define _@GUARD_PREFIX@_STRING_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include + +/* MirBSD defines mbslen as a macro. */ +#if @GNULIB_MBSLEN@ && defined __MirBSD__ +# include +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* NetBSD 5.0 declares strsignal in , not in . */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ + && ! defined __GLIBC__ +# include +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Find the index of the least-significant set bit. */ +#if @GNULIB_FFSL@ +# if !@HAVE_FFSL@ +_GL_FUNCDECL_SYS (ffsl, int, (long int i)); +# endif +_GL_CXXALIAS_SYS (ffsl, int, (long int i)); +_GL_CXXALIASWARN (ffsl); +#elif defined GNULIB_POSIXCHECK +# undef ffsl +# if HAVE_RAW_DECL_FFSL +_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); +# endif +#endif + + +/* Find the index of the least-significant set bit. */ +#if @GNULIB_FFSLL@ +# if !@HAVE_FFSLL@ +_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); +# endif +_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); +_GL_CXXALIASWARN (ffsll); +#elif defined GNULIB_POSIXCHECK +# undef ffsll +# if HAVE_RAW_DECL_FFSLL +_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); +# endif +#endif + + +/* Return the first instance of C within N bytes of S, or NULL. */ +#if @GNULIB_MEMCHR@ +# if @REPLACE_MEMCHR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memchr rpl_memchr +# endif +_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); +# else +# if ! @HAVE_MEMCHR@ +_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const void * std::memchr (const void *, int, size_t); } + extern "C++" { void * std::memchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memchr, + void *, (void const *__s, int __c, size_t __n), + void const *, (void const *__s, int __c, size_t __n)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); +_GL_CXXALIASWARN1 (memchr, void const *, + (void const *__s, int __c, size_t __n)); +# else +_GL_CXXALIASWARN (memchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memchr +/* Assume memchr is always declared. */ +_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " + "use gnulib module memchr for portability" ); +#endif + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_MEMMEM@ +# if @REPLACE_MEMMEM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memmem rpl_memmem +# endif +_GL_FUNCDECL_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# else +# if ! @HAVE_DECL_MEMMEM@ +_GL_FUNCDECL_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# endif +_GL_CXXALIASWARN (memmem); +#elif defined GNULIB_POSIXCHECK +# undef memmem +# if HAVE_RAW_DECL_MEMMEM +_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " + "use gnulib module memmem-simple for portability, " + "and module memmem for speed" ); +# endif +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if @GNULIB_MEMPCPY@ +# if ! @HAVE_MEMPCPY@ +_GL_FUNCDECL_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n)); +_GL_CXXALIASWARN (mempcpy); +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# if HAVE_RAW_DECL_MEMPCPY +_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " + "use gnulib module mempcpy for portability"); +# endif +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if @GNULIB_MEMRCHR@ +# if ! @HAVE_DECL_MEMRCHR@ +_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::memrchr (const void *, int, size_t); } + extern "C++" { void * std::memrchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memrchr, + void *, (void const *, int, size_t), + void const *, (void const *, int, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); +_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); +# else +_GL_CXXALIASWARN (memrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# if HAVE_RAW_DECL_MEMRCHR +_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " + "use gnulib module memrchr for portability"); +# endif +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if @GNULIB_RAWMEMCHR@ +# if ! @HAVE_RAWMEMCHR@ +_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::rawmemchr (const void *, int); } + extern "C++" { void * std::rawmemchr (void *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (rawmemchr, + void *, (void const *__s, int __c_in), + void const *, (void const *__s, int __c_in)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); +_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (rawmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# if HAVE_RAW_DECL_RAWMEMCHR +_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " + "use gnulib module rawmemchr for portability"); +# endif +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if @GNULIB_STPCPY@ +# if ! @HAVE_STPCPY@ +_GL_FUNCDECL_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src)); +_GL_CXXALIASWARN (stpcpy); +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# if HAVE_RAW_DECL_STPCPY +_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " + "use gnulib module stpcpy for portability"); +# endif +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if @GNULIB_STPNCPY@ +# if @REPLACE_STPNCPY@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef stpncpy +# define stpncpy rpl_stpncpy +# endif +_GL_FUNCDECL_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# else +# if ! @HAVE_STPNCPY@ +_GL_FUNCDECL_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# endif +_GL_CXXALIASWARN (stpncpy); +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# if HAVE_RAW_DECL_STPNCPY +_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " + "use gnulib module stpncpy for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +/* Assume strchr is always declared. */ +_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbschr if you care about internationalization"); +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if @GNULIB_STRCHRNUL@ +# if @REPLACE_STRCHRNUL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strchrnul rpl_strchrnul +# endif +_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strchrnul, char *, + (const char *str, int ch)); +# else +# if ! @HAVE_STRCHRNUL@ +_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * std::strchrnul (const char *, int); } + extern "C++" { char * std::strchrnul (char *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (strchrnul, + char *, (char const *__s, int __c_in), + char const *, (char const *__s, int __c_in)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); +_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (strchrnul); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# if HAVE_RAW_DECL_STRCHRNUL +_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " + "use gnulib module strchrnul for portability"); +# endif +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_STRDUP@ +# if @REPLACE_STRDUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup rpl_strdup +# endif +_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup + /* strdup exists as a function and as a macro. Get rid of the macro. */ +# undef strdup +# endif +# if !(@HAVE_DECL_STRDUP@ || defined strdup) +_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +#elif defined GNULIB_POSIXCHECK +# undef strdup +# if HAVE_RAW_DECL_STRDUP +_GL_WARN_ON_USE (strdup, "strdup is unportable - " + "use gnulib module strdup for portability"); +# endif +#endif + +/* Append no more than N characters from SRC onto DEST. */ +#if @GNULIB_STRNCAT@ +# if @REPLACE_STRNCAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strncat +# define strncat rpl_strncat +# endif +_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); +# else +_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); +# endif +_GL_CXXALIASWARN (strncat); +#elif defined GNULIB_POSIXCHECK +# undef strncat +# if HAVE_RAW_DECL_STRNCAT +_GL_WARN_ON_USE (strncat, "strncat is unportable - " + "use gnulib module strncat for portability"); +# endif +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if @GNULIB_STRNDUP@ +# if @REPLACE_STRNDUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strndup +# define strndup rpl_strndup +# endif +_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); +# else +# if ! @HAVE_DECL_STRNDUP@ +_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n)); +# endif +_GL_CXXALIASWARN (strndup); +#elif defined GNULIB_POSIXCHECK +# undef strndup +# if HAVE_RAW_DECL_STRNDUP +_GL_WARN_ON_USE (strndup, "strndup is unportable - " + "use gnulib module strndup for portability"); +# endif +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if @GNULIB_STRNLEN@ +# if @REPLACE_STRNLEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strnlen +# define strnlen rpl_strnlen +# endif +_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)); +# else +# if ! @HAVE_DECL_STRNLEN@ +_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)); +# endif +_GL_CXXALIASWARN (strnlen); +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# if HAVE_RAW_DECL_STRNLEN +_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " + "use gnulib module strnlen for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +/* Assume strcspn is always declared. */ +_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbscspn if you care about internationalization"); +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if @GNULIB_STRPBRK@ +# if ! @HAVE_STRPBRK@ +_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const char * strpbrk (const char *, const char *); } + extern "C++" { char * strpbrk (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strpbrk, + char *, (char const *__s, char const *__accept), + const char *, (char const *__s, char const *__accept)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); +_GL_CXXALIASWARN1 (strpbrk, char const *, + (char const *__s, char const *__accept)); +# else +_GL_CXXALIASWARN (strpbrk); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " + "in multibyte locales - " + "use mbspbrk if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# if HAVE_RAW_DECL_STRPBRK +_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " + "use gnulib module strpbrk for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +/* Assume strspn is always declared. */ +_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbsspn if you care about internationalization"); +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +/* Assume strrchr is always declared. */ +_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbsrchr if you care about internationalization"); +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if @GNULIB_STRSEP@ +# if ! @HAVE_STRSEP@ +_GL_FUNCDECL_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim)); +_GL_CXXALIASWARN (strsep); +# if defined GNULIB_POSIXCHECK +# undef strsep +_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " + "in multibyte locales - " + "use mbssep if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# if HAVE_RAW_DECL_STRSEP +_GL_WARN_ON_USE (strsep, "strsep is unportable - " + "use gnulib module strsep for portability"); +# endif +#endif + +#if @GNULIB_STRSTR@ +# if @REPLACE_STRSTR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strstr rpl_strstr +# endif +_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strstr (const char *, const char *); } + extern "C++" { char * strstr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strstr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strstr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strstr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +/* Assume strstr is always declared. */ +_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " + "work correctly on character strings in most " + "multibyte locales - " + "use mbsstr if you care about internationalization, " + "or use strstr if you care about speed"); +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if @GNULIB_STRCASESTR@ +# if @REPLACE_STRCASESTR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strcasestr rpl_strcasestr +# endif +_GL_FUNCDECL_RPL (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strcasestr, char *, + (const char *haystack, const char *needle)); +# else +# if ! @HAVE_STRCASESTR@ +_GL_FUNCDECL_SYS (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strcasestr (const char *, const char *); } + extern "C++" { char * strcasestr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strcasestr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strcasestr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strcasestr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# if HAVE_RAW_DECL_STRCASESTR +_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " + "strings in multibyte locales - " + "use mbscasestr if you care about " + "internationalization, or use c-strcasestr if you want " + "a locale independent function"); +# endif +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + http://www.opengroup.org/susv3xsh/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if @GNULIB_STRTOK_R@ +# if @REPLACE_STRTOK_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtok_r +# define strtok_r rpl_strtok_r +# endif +_GL_FUNCDECL_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# else +# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK +# undef strtok_r +# endif +# if ! @HAVE_DECL_STRTOK_R@ +_GL_FUNCDECL_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# endif +_GL_CXXALIASWARN (strtok_r); +# if defined GNULIB_POSIXCHECK +_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " + "strings in multibyte locales - " + "use mbstok_r if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# if HAVE_RAW_DECL_STRTOK_R +_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " + "use gnulib module strtok_r for portability"); +# endif +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if @GNULIB_MBSLEN@ +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ +# undef mbslen +# endif +# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbslen rpl_mbslen +# endif +_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); +# else +_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); +# endif +_GL_CXXALIASWARN (mbslen); +#endif + +#if @GNULIB_MBSNLEN@ +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1)); +#endif + +#if @GNULIB_MBSCHR@ +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbschr); +#endif + +#if @GNULIB_MBSRCHR@ +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux || defined __INTERIX +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ +# endif +_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbsrchr); +#endif + +#if @GNULIB_MBSSTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCASECMP@ +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSNCASECMP@ +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSPCASECMP@ +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case. If the two match, return a pointer to the first byte + after this prefix in STRING. Otherwise, return NULL. + Note: This function may, in multibyte locales, return non-NULL if STRING + is of smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCASESTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCSPN@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSPBRK@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); +# else +_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); +# endif +_GL_CXXALIASWARN (mbspbrk); +#endif + +#if @GNULIB_MBSSPN@ +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSSEP@ +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSTOK_R@ +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) + _GL_ARG_NONNULL ((2, 3)); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if @GNULIB_STRERROR@ +# if @REPLACE_STRERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror +# define strerror rpl_strerror +# endif +_GL_FUNCDECL_RPL (strerror, char *, (int)); +_GL_CXXALIAS_RPL (strerror, char *, (int)); +# else +_GL_CXXALIAS_SYS (strerror, char *, (int)); +# endif +_GL_CXXALIASWARN (strerror); +#elif defined GNULIB_POSIXCHECK +# undef strerror +/* Assume strerror is always declared. */ +_GL_WARN_ON_USE (strerror, "strerror is unportable - " + "use gnulib module strerror to guarantee non-NULL result"); +#endif + +/* Map any int, typically from errno, into an error message. Multithread-safe. + Uses the POSIX declaration, not the glibc declaration. */ +#if @GNULIB_STRERROR_R@ +# if @REPLACE_STRERROR_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror_r +# define strerror_r rpl_strerror_r +# endif +_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# else +# if !@HAVE_DECL_STRERROR_R@ +_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# endif +# if @HAVE_DECL_STRERROR_R@ +_GL_CXXALIASWARN (strerror_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror_r +# if HAVE_RAW_DECL_STRERROR_R +_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " + "use gnulib module strerror_r-posix for portability"); +# endif +#endif + +#if @GNULIB_STRSIGNAL@ +# if @REPLACE_STRSIGNAL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strsignal rpl_strsignal +# endif +_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); +_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); +# else +# if ! @HAVE_DECL_STRSIGNAL@ +_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is + 'const char *'. */ +_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); +# endif +_GL_CXXALIASWARN (strsignal); +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# if HAVE_RAW_DECL_STRSIGNAL +_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " + "use gnulib module strsignal for portability"); +# endif +#endif + +#if @GNULIB_STRVERSCMP@ +# if !@HAVE_STRVERSCMP@ +_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); +_GL_CXXALIASWARN (strverscmp); +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# if HAVE_RAW_DECL_STRVERSCMP +_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " + "use gnulib module strverscmp for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_STRING_H */ +#endif /* _@GUARD_PREFIX@_STRING_H */ diff --git a/grub-core/gnulib/strings.in.h b/grub-core/gnulib/strings.in.h new file mode 100644 index 000000000..4469f86ca --- /dev/null +++ b/grub-core/gnulib/strings.in.h @@ -0,0 +1,122 @@ +/* A substitute . + + Copyright (C) 2007-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _@GUARD_PREFIX@_STRINGS_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* Minix 3.1.8 has a bug: must be included before . + But avoid namespace pollution on glibc systems. */ +#if defined __minix && !defined __GLIBC__ +# include +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_STRINGS_H@ +# @INCLUDE_NEXT@ @NEXT_STRINGS_H@ +#endif + +#ifndef _@GUARD_PREFIX@_STRINGS_H +#define _@GUARD_PREFIX@_STRINGS_H + +#if ! @HAVE_DECL_STRNCASECMP@ +/* Get size_t. */ +# include +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + + + /* Find the index of the least-significant set bit. */ +#if @GNULIB_FFS@ +# if !@HAVE_FFS@ +_GL_FUNCDECL_SYS (ffs, int, (int i)); +# endif +_GL_CXXALIAS_SYS (ffs, int, (int i)); +_GL_CXXALIASWARN (ffs); +#elif defined GNULIB_POSIXCHECK +# undef ffs +# if HAVE_RAW_DECL_FFS +_GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); +# endif +#endif + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. + Note: This function does not work in multibyte locales. */ +#if ! @HAVE_STRCASECMP@ +extern int strcasecmp (char const *s1, char const *s2) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strcasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strcasecmp +# if HAVE_RAW_DECL_STRCASECMP +_GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbscasecmp if you care about " + "internationalization, or use c_strcasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + +/* Compare no more than N bytes of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. + Note: This function cannot work correctly in multibyte locales. */ +#if ! @HAVE_DECL_STRNCASECMP@ +extern int strncasecmp (char const *s1, char const *s2, size_t n) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strncasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strncasecmp +# if HAVE_RAW_DECL_STRNCASECMP +_GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbsncasecmp or mbspcasecmp if you care about " + "internationalization, or use c_strncasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _@GUARD_PREFIX@_STRING_H */ +#endif /* _@GUARD_PREFIX@_STRING_H */ diff --git a/grub-core/gnulib/stripslash.c b/grub-core/gnulib/stripslash.c new file mode 100644 index 000000000..0e452a95e --- /dev/null +++ b/grub-core/gnulib/stripslash.c @@ -0,0 +1,45 @@ +/* stripslash.c -- remove redundant trailing slashes from a file name + + Copyright (C) 1990, 2001, 2003-2006, 2009-2013 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +/* Remove trailing slashes from FILE. Return true if a trailing slash + was removed. This is useful when using file name completion from a + shell that adds a "/" after directory names (such as tcsh and + bash), because on symlinks to directories, several system calls + have different semantics according to whether a trailing slash is + present. */ + +bool +strip_trailing_slashes (char *file) +{ + char *base = last_component (file); + char *base_lim; + bool had_slash; + + /* last_component returns "" for file system roots, but we need to turn + "///" into "/". */ + if (! *base) + base = file; + base_lim = base + base_len (base); + had_slash = (*base_lim != '\0'); + *base_lim = '\0'; + return had_slash; +} diff --git a/grub-core/gnulib/strncasecmp.c b/grub-core/gnulib/strncasecmp.c new file mode 100644 index 000000000..35840bc01 --- /dev/null +++ b/grub-core/gnulib/strncasecmp.c @@ -0,0 +1,62 @@ +/* strncasecmp.c -- case insensitive string comparator + Copyright (C) 1998-1999, 2005-2007, 2009-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Compare no more than N bytes of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. + Note: This function cannot work correctly in multibyte locales. */ + +int +strncasecmp (const char *s1, const char *s2, size_t n) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = TOLOWER (*p1); + c2 = TOLOWER (*p2); + + if (--n == 0 || c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/grub-core/gnulib/strndup.c b/grub-core/gnulib/strndup.c new file mode 100644 index 000000000..e60268b86 --- /dev/null +++ b/grub-core/gnulib/strndup.c @@ -0,0 +1,36 @@ +/* A replacement function, for systems that lack strndup. + + Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2013 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#include + +#include + +#include + +char * +strndup (char const *s, size_t n) +{ + size_t len = strnlen (s, n); + char *new = malloc (len + 1); + + if (new == NULL) + return NULL; + + new[len] = '\0'; + return memcpy (new, s, len); +} diff --git a/grub-core/gnulib/strnlen.c b/grub-core/gnulib/strnlen.c new file mode 100644 index 000000000..57fdfe770 --- /dev/null +++ b/grub-core/gnulib/strnlen.c @@ -0,0 +1,30 @@ +/* Find the length of STRING, but scan at most MAXLEN characters. + Copyright (C) 2005-2007, 2009-2013 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#include + +#include + +/* Find the length of STRING, but scan at most MAXLEN characters. + If no '\0' terminator is found in that many characters, return MAXLEN. */ + +size_t +strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} diff --git a/grub-core/gnulib/strnlen1.c b/grub-core/gnulib/strnlen1.c new file mode 100644 index 000000000..0c22d21ed --- /dev/null +++ b/grub-core/gnulib/strnlen1.c @@ -0,0 +1,35 @@ +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + Copyright (C) 2005-2006, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "strnlen1.h" + +#include + +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + If no '\0' terminator is found in that many characters, return MAXLEN. */ +/* This is the same as strnlen (string, maxlen - 1) + 1. */ +size_t +strnlen1 (const char *string, size_t maxlen) +{ + const char *end = (const char *) memchr (string, '\0', maxlen); + if (end != NULL) + return end - string + 1; + else + return maxlen; +} diff --git a/grub-core/gnulib/strnlen1.h b/grub-core/gnulib/strnlen1.h new file mode 100644 index 000000000..7c65e3161 --- /dev/null +++ b/grub-core/gnulib/strnlen1.h @@ -0,0 +1,40 @@ +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + Copyright (C) 2005, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _STRNLEN1_H +#define _STRNLEN1_H + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Find the length of STRING + 1, but scan at most MAXLEN bytes. + If no '\0' terminator is found in that many characters, return MAXLEN. */ +/* This is the same as strnlen (string, maxlen - 1) + 1. */ +extern size_t strnlen1 (const char *string, size_t maxlen) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRNLEN1_H */ diff --git a/grub-core/gnulib/sys_types.in.h b/grub-core/gnulib/sys_types.in.h new file mode 100644 index 000000000..d7da35623 --- /dev/null +++ b/grub-core/gnulib/sys_types.in.h @@ -0,0 +1,51 @@ +/* Provide a more complete sys/types.h. + + Copyright (C) 2011-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#ifndef _@GUARD_PREFIX@_SYS_TYPES_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ + +#ifndef _@GUARD_PREFIX@_SYS_TYPES_H +#define _@GUARD_PREFIX@_SYS_TYPES_H + +/* Override off_t if Large File Support is requested on native Windows. */ +#if @WINDOWS_64_BIT_OFF_T@ +/* Same as int64_t in . */ +# if defined _MSC_VER +# define off_t __int64 +# else +# define off_t long long int +# endif +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_64_BIT_OFF_T 1 +#endif + +/* MSVC 9 defines size_t in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include +#endif + +#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ +#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ diff --git a/grub-core/gnulib/sysexits.in.h b/grub-core/gnulib/sysexits.in.h new file mode 100644 index 000000000..fa8db8386 --- /dev/null +++ b/grub-core/gnulib/sysexits.in.h @@ -0,0 +1,72 @@ +/* exit() exit codes for some BSD system programs. + Copyright (C) 2003, 2006-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson based on sysexits(3) man page */ + +#ifndef _@GUARD_PREFIX@_SYSEXITS_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if @HAVE_SYSEXITS_H@ + +/* IRIX 6.5 has an that defines a macro EX_OK with a nonzero + value. Override it. See + */ +# ifdef __sgi +# include +# undef EX_OK +# endif + +/* The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_SYSEXITS_H@ + +/* HP-UX 11 ends at EX_NOPERM. */ +# ifndef EX_CONFIG +# define EX_CONFIG 78 +# endif + +#endif + +#ifndef _@GUARD_PREFIX@_SYSEXITS_H +#define _@GUARD_PREFIX@_SYSEXITS_H + +#if !@HAVE_SYSEXITS_H@ + +# define EX_OK 0 /* same value as EXIT_SUCCESS */ + +# define EX_USAGE 64 +# define EX_DATAERR 65 +# define EX_NOINPUT 66 +# define EX_NOUSER 67 +# define EX_NOHOST 68 +# define EX_UNAVAILABLE 69 +# define EX_SOFTWARE 70 +# define EX_OSERR 71 +# define EX_OSFILE 72 +# define EX_CANTCREAT 73 +# define EX_IOERR 74 +# define EX_TEMPFAIL 75 +# define EX_PROTOCOL 76 +# define EX_NOPERM 77 +# define EX_CONFIG 78 + +#endif + +#endif /* _@GUARD_PREFIX@_SYSEXITS_H */ +#endif /* _@GUARD_PREFIX@_SYSEXITS_H */ diff --git a/grub-core/gnulib/unistd.c b/grub-core/gnulib/unistd.c new file mode 100644 index 000000000..6c6a8e268 --- /dev/null +++ b/grub-core/gnulib/unistd.c @@ -0,0 +1,3 @@ +#include +#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE +#include "unistd.h" diff --git a/grub-core/gnulib/unistd.in.h b/grub-core/gnulib/unistd.in.h new file mode 100644 index 000000000..2ea9af436 --- /dev/null +++ b/grub-core/gnulib/unistd.in.h @@ -0,0 +1,1530 @@ +/* Substitute for and wrapper around . + Copyright (C) 2003-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _@GUARD_PREFIX@_UNISTD_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +#endif + +/* Get all possible declarations of gethostname(). */ +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ + && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H +#define _@GUARD_PREFIX@_UNISTD_H + +/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ +#include + +/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ +/* Cygwin 1.7.1 declares symlinkat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ + && defined __CYGWIN__)) \ + && ! defined __GLIBC__ +# include +#endif + +/* Cygwin 1.7.1 declares unlinkat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ + && ! defined __GLIBC__ +# include +#endif + +/* mingw fails to declare _exit in . */ +/* mingw, MSVC, BeOS, Haiku declare environ in , not in + . */ +/* Solaris declares getcwd not only in but also in . */ +/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is + included here. */ +/* But avoid namespace pollution on glibc systems. */ +#if !defined __GLIBC__ && !defined __osf__ +# define __need_system_stdlib_h +# include +# undef __need_system_stdlib_h +#endif + +/* Native Windows platforms declare chdir, getcwd, rmdir in + and/or , not in . + They also declare access(), chmod(), close(), dup(), dup2(), isatty(), + lseek(), read(), unlink(), write() in . */ +#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ + || defined GNULIB_POSIXCHECK) \ + && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) +# include /* mingw32, mingw64 */ +# include /* mingw64, MSVC 9 */ +#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ + || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ + || defined GNULIB_POSIXCHECK) \ + && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# include +#endif + +/* AIX and OSF/1 5.1 declare getdomainname in , not in . + NonStop Kernel declares gethostname in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ + || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ + && !defined __GLIBC__ +# include +#endif + +/* MSVC defines off_t in . + May also define off_t to a 64-bit type on native Windows. */ +#if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ +/* Get off_t. */ +# include +#endif + +#if (@GNULIB_READ@ || @GNULIB_WRITE@ \ + || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ + || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) +/* Get ssize_t. */ +# include +#endif + +/* Get getopt(), optarg, optind, opterr, optopt. + But avoid namespace pollution on glibc systems. */ +#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT +# define __need_getopt +# include +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_UNISTD_INLINE +# define _GL_UNISTD_INLINE _GL_INLINE +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Hide some function declarations from . */ + +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ +# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including "); + _GL_WARN_ON_USE (connect, + "connect() used without including "); + _GL_WARN_ON_USE (accept, + "accept() used without including "); + _GL_WARN_ON_USE (bind, + "bind() used without including "); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including "); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including "); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including "); + _GL_WARN_ON_USE (listen, + "listen() used without including "); + _GL_WARN_ON_USE (recv, + "recv() used without including "); + _GL_WARN_ON_USE (send, + "send() used without including "); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including "); + _GL_WARN_ON_USE (sendto, + "sendto() used without including "); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including "); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including "); +# endif +# endif +# if !defined _@GUARD_PREFIX@_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including "); +# endif +# endif +#endif + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Ensure *_OK macros exist. */ +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif + + +/* Declare overridden functions. */ + + +#if defined GNULIB_POSIXCHECK +/* The access() function is a security risk. */ +_GL_WARN_ON_USE (access, "the access function is a security risk - " + "use the gnulib module faccessat instead"); +#endif + + +#if @GNULIB_CHDIR@ +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIASWARN (chdir); +#elif defined GNULIB_POSIXCHECK +# undef chdir +# if HAVE_RAW_DECL_CHDIR +_GL_WARN_ON_USE (chown, "chdir is not always in - " + "use gnulib module chdir for portability"); +# endif +#endif + + +#if @GNULIB_CHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if @REPLACE_DUP2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup2 rpl_dup2 +# endif +_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); +_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); +# else +# if !@HAVE_DUP2@ +_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# if HAVE_RAW_DECL_DUP2 +_GL_WARN_ON_USE (dup2, "dup2 is unportable - " + "use gnulib module dup2 for portability"); +# endif +#endif + + +#if @GNULIB_DUP3@ +/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the + specified flags. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the Linux man page at + . */ +# if @HAVE_DUP3@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup3 rpl_dup3 +# endif +_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); +# else +_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); +# endif +_GL_CXXALIASWARN (dup3); +#elif defined GNULIB_POSIXCHECK +# undef dup3 +# if HAVE_RAW_DECL_DUP3 +_GL_WARN_ON_USE (dup3, "dup3 is unportable - " + "use gnulib module dup3 for portability"); +# endif +#endif + + +#if @GNULIB_ENVIRON@ +# if !@HAVE_DECL_ENVIRON@ +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include +# define environ (*_NSGetEnviron ()) +# else +# ifdef __cplusplus +extern "C" { +# endif +extern char **environ; +# ifdef __cplusplus +} +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if HAVE_RAW_DECL_ENVIRON +_GL_UNISTD_INLINE char *** +rpl_environ (void) +{ + return &environ; +} +_GL_WARN_ON_USE (rpl_environ, "environ is unportable - " + "use gnulib module environ for portability"); +# undef environ +# define environ (*rpl_environ ()) +# endif +#endif + + +#if @GNULIB_EUIDACCESS@ +/* Like access(), except that it uses the effective user id and group id of + the current process. */ +# if !@HAVE_EUIDACCESS@ +_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); +_GL_CXXALIASWARN (euidaccess); +# if defined GNULIB_POSIXCHECK +/* Like access(), this function is a security risk. */ +_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# if HAVE_RAW_DECL_EUIDACCESS +_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " + "use gnulib module euidaccess for portability"); +# endif +#endif + + +#if @GNULIB_FACCESSAT@ +# if !@HAVE_FACCESSAT@ +_GL_FUNCDECL_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag)); +_GL_CXXALIASWARN (faccessat); +#elif defined GNULIB_POSIXCHECK +# undef faccessat +# if HAVE_RAW_DECL_FACCESSAT +_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " + "use gnulib module faccessat for portability"); +# endif +#endif + + +#if @GNULIB_FCHDIR@ +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if ! @HAVE_FCHDIR@ +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); + +/* Gnulib internal hooks needed to maintain the fchdir metadata. */ +_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) + _GL_ARG_NONNULL ((2)); +_GL_EXTERN_C void _gl_unregister_fd (int fd); +_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); +_GL_EXTERN_C const char *_gl_directory_name (int fd); + +# else +# if !@HAVE_DECL_FCHDIR@ +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); +# endif +# endif +_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); +_GL_CXXALIASWARN (fchdir); +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# if HAVE_RAW_DECL_FCHDIR +_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " + "use gnulib module fchdir for portability"); +# endif +#endif + + +#if @GNULIB_FCHOWNAT@ +# if @REPLACE_FCHOWNAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchownat +# define fchownat rpl_fchownat +# endif +_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# else +# if !@HAVE_FCHOWNAT@ +_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# endif +_GL_CXXALIASWARN (fchownat); +#elif defined GNULIB_POSIXCHECK +# undef fchownat +# if HAVE_RAW_DECL_FCHOWNAT +_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_FDATASYNC@ +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ +_GL_FUNCDECL_SYS (fdatasync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); +_GL_CXXALIASWARN (fdatasync); +#elif defined GNULIB_POSIXCHECK +# undef fdatasync +# if HAVE_RAW_DECL_FDATASYNC +_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " + "use gnulib module fdatasync for portability"); +# endif +#endif + + +#if @GNULIB_FSYNC@ +/* Synchronize changes, including metadata, to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if !@HAVE_FSYNC@ +_GL_FUNCDECL_SYS (fsync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fsync, int, (int fd)); +_GL_CXXALIASWARN (fsync); +#elif defined GNULIB_POSIXCHECK +# undef fsync +# if HAVE_RAW_DECL_FSYNC +_GL_WARN_ON_USE (fsync, "fsync is unportable - " + "use gnulib module fsync for portability"); +# endif +#endif + + +#if @GNULIB_FTRUNCATE@ +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if @REPLACE_FTRUNCATE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftruncate +# define ftruncate rpl_ftruncate +# endif +_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); +_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); +# else +# if !@HAVE_FTRUNCATE@ +_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIASWARN (ftruncate); +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# if HAVE_RAW_DECL_FTRUNCATE +_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " + "use gnulib module ftruncate for portability"); +# endif +#endif + + +#if @GNULIB_GETCWD@ +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2008 specification + . + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# if @REPLACE_GETCWD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getcwd rpl_getcwd +# endif +_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); +_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); +# else +/* Need to cast, because on mingw, the second parameter is + int size. */ +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# if HAVE_RAW_DECL_GETCWD +_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " + "use gnulib module getcwd for portability"); +# endif +#endif + + +#if @GNULIB_GETDOMAINNAME@ +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @REPLACE_GETDOMAINNAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdomainname +# define getdomainname rpl_getdomainname +# endif +_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); +# else +# if !@HAVE_DECL_GETDOMAINNAME@ +_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (getdomainname); +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# if HAVE_RAW_DECL_GETDOMAINNAME +_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " + "use gnulib module getdomainname for portability"); +# endif +#endif + + +#if @GNULIB_GETDTABLESIZE@ +/* Return the maximum number of file descriptors in the current process. + In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ +# if !@HAVE_GETDTABLESIZE@ +_GL_FUNCDECL_SYS (getdtablesize, int, (void)); +# endif +_GL_CXXALIAS_SYS (getdtablesize, int, (void)); +_GL_CXXALIASWARN (getdtablesize); +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# if HAVE_RAW_DECL_GETDTABLESIZE +_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " + "use gnulib module getdtablesize for portability"); +# endif +#endif + + +#if @GNULIB_GETGROUPS@ +/* Return the supplemental groups that the current process belongs to. + It is unspecified whether the effective group id is in the list. + If N is 0, return the group count; otherwise, N describes how many + entries are available in GROUPS. Return -1 and set errno if N is + not 0 and not large enough. Fails with ENOSYS on some systems. */ +# if @REPLACE_GETGROUPS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getgroups +# define getgroups rpl_getgroups +# endif +_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); +_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); +# else +# if !@HAVE_GETGROUPS@ +_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIASWARN (getgroups); +#elif defined GNULIB_POSIXCHECK +# undef getgroups +# if HAVE_RAW_DECL_GETGROUPS +_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " + "use gnulib module getgroups for portability"); +# endif +#endif + + +#if @GNULIB_GETHOSTNAME@ +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname rpl_gethostname +# endif +_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); +# else +# if !@HAVE_GETHOSTNAME@ +_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second + parameter is + int len. */ +_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (gethostname); +#elif @UNISTD_H_HAVE_WINSOCK2_H@ +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# if HAVE_RAW_DECL_GETHOSTNAME +_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " + "use gnulib module gethostname for portability"); +# endif +#endif + + +#if @GNULIB_GETLOGIN@ +/* Returns the user's login name, or NULL if it cannot be found. Upon error, + returns NULL with errno set. + + See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if !@HAVE_GETLOGIN@ +_GL_FUNCDECL_SYS (getlogin, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getlogin, char *, (void)); +_GL_CXXALIASWARN (getlogin); +#elif defined GNULIB_POSIXCHECK +# undef getlogin +# if HAVE_RAW_DECL_GETLOGIN +_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " + "use gnulib module getlogin for portability"); +# endif +#endif + + +#if @GNULIB_GETLOGIN_R@ +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if @REPLACE_GETLOGIN_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getlogin_r rpl_getlogin_r +# endif +_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); +# else +# if !@HAVE_DECL_GETLOGIN_R@ +_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 systems, the second argument is + int size. */ +_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); +# endif +_GL_CXXALIASWARN (getlogin_r); +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# if HAVE_RAW_DECL_GETLOGIN_R +_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " + "use gnulib module getlogin_r for portability"); +# endif +#endif + + +#if @GNULIB_GETPAGESIZE@ +# if @REPLACE_GETPAGESIZE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize rpl_getpagesize +# endif +_GL_FUNCDECL_RPL (getpagesize, int, (void)); +_GL_CXXALIAS_RPL (getpagesize, int, (void)); +# else +# if !@HAVE_GETPAGESIZE@ +# if !defined getpagesize +/* This is for POSIX systems. */ +# if !defined _gl_getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define _gl_getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined _gl_getpagesize && defined __VMS +# ifdef __ALPHA +# define _gl_getpagesize() 8192 +# else +# define _gl_getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined _gl_getpagesize && @HAVE_OS_H@ +# include +# if defined B_PAGE_SIZE +# define _gl_getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined _gl_getpagesize && defined __amigaos4__ +# define _gl_getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ +# include +# ifdef EXEC_PAGESIZE +# define _gl_getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define _gl_getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define _gl_getpagesize() NBPC +# endif +# endif +# endif +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize() _gl_getpagesize () +# else +# if !GNULIB_defined_getpagesize_function +_GL_UNISTD_INLINE int +getpagesize () +{ + return _gl_getpagesize (); +} +# define GNULIB_defined_getpagesize_function 1 +# endif +# endif +# endif +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ +_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); +# endif +# if @HAVE_DECL_GETPAGESIZE@ +_GL_CXXALIASWARN (getpagesize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# if HAVE_RAW_DECL_GETPAGESIZE +_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " + "use gnulib module getpagesize for portability"); +# endif +#endif + + +#if @GNULIB_GETUSERSHELL@ +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (getusershell, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getusershell, char *, (void)); +_GL_CXXALIASWARN (getusershell); +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# if HAVE_RAW_DECL_GETUSERSHELL +_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if @GNULIB_GETUSERSHELL@ +/* Rewind to pointer that is advanced at each getusershell() call. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (setusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (setusershell, void, (void)); +_GL_CXXALIASWARN (setusershell); +#elif defined GNULIB_POSIXCHECK +# undef setusershell +# if HAVE_RAW_DECL_SETUSERSHELL +_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if @GNULIB_GETUSERSHELL@ +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (endusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (endusershell, void, (void)); +_GL_CXXALIASWARN (endusershell); +#elif defined GNULIB_POSIXCHECK +# undef endusershell +# if HAVE_RAW_DECL_ENDUSERSHELL +_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + + +#if @GNULIB_GROUP_MEMBER@ +/* Determine whether group id is in calling user's group list. */ +# if !@HAVE_GROUP_MEMBER@ +_GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); +# endif +_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); +_GL_CXXALIASWARN (group_member); +#elif defined GNULIB_POSIXCHECK +# undef group_member +# if HAVE_RAW_DECL_GROUP_MEMBER +_GL_WARN_ON_USE (group_member, "group_member is unportable - " + "use gnulib module group-member for portability"); +# endif +#endif + + +#if @GNULIB_ISATTY@ +# if @REPLACE_ISATTY@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty rpl_isatty +# endif +_GL_FUNCDECL_RPL (isatty, int, (int fd)); +_GL_CXXALIAS_RPL (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#elif defined GNULIB_POSIXCHECK +# undef isatty +# if HAVE_RAW_DECL_ISATTY +_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " + "use gnulib module isatty for portability"); +# endif +#endif + + +#if @GNULIB_LCHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if @REPLACE_LCHOWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lchown +# define lchown rpl_lchown +# endif +_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); +# else +# if !@HAVE_LCHOWN@ +_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); +# endif +_GL_CXXALIASWARN (lchown); +#elif defined GNULIB_POSIXCHECK +# undef lchown +# if HAVE_RAW_DECL_LCHOWN +_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " + "use gnulib module lchown for portability"); +# endif +#endif + + +#if @GNULIB_LINK@ +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + . */ +# if @REPLACE_LINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define link rpl_link +# endif +_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); +# else +# if !@HAVE_LINK@ +_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); +# endif +_GL_CXXALIASWARN (link); +#elif defined GNULIB_POSIXCHECK +# undef link +# if HAVE_RAW_DECL_LINK +_GL_WARN_ON_USE (link, "link is unportable - " + "use gnulib module link for portability"); +# endif +#endif + + +#if @GNULIB_LINKAT@ +/* Create a new hard link for an existing file, relative to two + directories. FLAG controls whether symlinks are followed. + Return 0 if successful, otherwise -1 and errno set. */ +# if @REPLACE_LINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef linkat +# define linkat rpl_linkat +# endif +_GL_FUNCDECL_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# else +# if !@HAVE_LINKAT@ +_GL_FUNCDECL_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# endif +_GL_CXXALIASWARN (linkat); +#elif defined GNULIB_POSIXCHECK +# undef linkat +# if HAVE_RAW_DECL_LINKAT +_GL_WARN_ON_USE (linkat, "linkat is unportable - " + "use gnulib module linkat for portability"); +# endif +#endif + + +#if @GNULIB_LSEEK@ +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if @REPLACE_LSEEK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lseek rpl_lseek +# endif +_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#elif defined GNULIB_POSIXCHECK +# undef lseek +# if HAVE_RAW_DECL_LSEEK +_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " + "systems - use gnulib module lseek for portability"); +# endif +#endif + + +#if @GNULIB_PIPE@ +/* Create a pipe, defaulting to O_BINARY mode. + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. */ +# if !@HAVE_PIPE@ +_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); +_GL_CXXALIASWARN (pipe); +#elif defined GNULIB_POSIXCHECK +# undef pipe +# if HAVE_RAW_DECL_PIPE +_GL_WARN_ON_USE (pipe, "pipe is unportable - " + "use gnulib module pipe-posix for portability"); +# endif +#endif + + +#if @GNULIB_PIPE2@ +/* Create a pipe, applying the given flags when opening the read-end of the + pipe and the write-end of the pipe. + The flags are a bitmask, possibly including O_CLOEXEC (defined in ) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. + See also the Linux man page at + . */ +# if @HAVE_PIPE2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define pipe2 rpl_pipe2 +# endif +_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); +# else +_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); +# endif +_GL_CXXALIASWARN (pipe2); +#elif defined GNULIB_POSIXCHECK +# undef pipe2 +# if HAVE_RAW_DECL_PIPE2 +_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " + "use gnulib module pipe2 for portability"); +# endif +#endif + + +#if @GNULIB_PREAD@ +/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. + Return the number of bytes placed into BUF if successful, otherwise + set errno and return -1. 0 indicates EOF. + See the POSIX:2008 specification + . */ +# if @REPLACE_PREAD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pread +# define pread rpl_pread +# endif +_GL_FUNCDECL_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# else +# if !@HAVE_PREAD@ +_GL_FUNCDECL_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pread); +#elif defined GNULIB_POSIXCHECK +# undef pread +# if HAVE_RAW_DECL_PREAD +_GL_WARN_ON_USE (pread, "pread is unportable - " + "use gnulib module pread for portability"); +# endif +#endif + + +#if @GNULIB_PWRITE@ +/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. + Return the number of bytes written if successful, otherwise + set errno and return -1. 0 indicates nothing written. See the + POSIX:2008 specification + . */ +# if @REPLACE_PWRITE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pwrite +# define pwrite rpl_pwrite +# endif +_GL_FUNCDECL_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# else +# if !@HAVE_PWRITE@ +_GL_FUNCDECL_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pwrite); +#elif defined GNULIB_POSIXCHECK +# undef pwrite +# if HAVE_RAW_DECL_PWRITE +_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " + "use gnulib module pwrite for portability"); +# endif +#endif + + +#if @GNULIB_READ@ +/* Read up to COUNT bytes from file descriptor FD into the buffer starting + at BUF. See the POSIX:2008 specification + . */ +# if @REPLACE_READ@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read rpl_read +# endif +_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#endif + + +#if @GNULIB_READLINK@ +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2008 specification + . */ +# if @REPLACE_READLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlink rpl_readlink +# endif +_GL_FUNCDECL_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# else +# if !@HAVE_READLINK@ +_GL_FUNCDECL_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# endif +_GL_CXXALIASWARN (readlink); +#elif defined GNULIB_POSIXCHECK +# undef readlink +# if HAVE_RAW_DECL_READLINK +_GL_WARN_ON_USE (readlink, "readlink is unportable - " + "use gnulib module readlink for portability"); +# endif +#endif + + +#if @GNULIB_READLINKAT@ +# if !@HAVE_READLINKAT@ +_GL_FUNCDECL_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len)); +_GL_CXXALIASWARN (readlinkat); +#elif defined GNULIB_POSIXCHECK +# undef readlinkat +# if HAVE_RAW_DECL_READLINKAT +_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " + "use gnulib module readlinkat for portability"); +# endif +#endif + + +#if @GNULIB_RMDIR@ +/* Remove the directory DIR. */ +# if @REPLACE_RMDIR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define rmdir rpl_rmdir +# endif +_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#elif defined GNULIB_POSIXCHECK +# undef rmdir +# if HAVE_RAW_DECL_RMDIR +_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " + "use gnulib module rmdir for portability"); +# endif +#endif + + +#if @GNULIB_SETHOSTNAME@ +/* Set the host name of the machine. + The host name may or may not be fully qualified. + + Put LEN bytes of NAME into the host name. + Return 0 if successful, otherwise, set errno and return -1. + + Platforms with no ability to set the hostname return -1 and set + errno = ENOSYS. */ +# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ +_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 + and FreeBSD 6.4 the second parameter is int. On Solaris 11 + 2011-10, the first parameter is not const. */ +_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); +_GL_CXXALIASWARN (sethostname); +#elif defined GNULIB_POSIXCHECK +# undef sethostname +# if HAVE_RAW_DECL_SETHOSTNAME +_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " + "use gnulib module sethostname for portability"); +# endif +#endif + + +#if @GNULIB_SLEEP@ +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2008 specification + . */ +# if @REPLACE_SLEEP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sleep +# define sleep rpl_sleep +# endif +_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); +_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); +# else +# if !@HAVE_SLEEP@ +_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIASWARN (sleep); +#elif defined GNULIB_POSIXCHECK +# undef sleep +# if HAVE_RAW_DECL_SLEEP +_GL_WARN_ON_USE (sleep, "sleep is unportable - " + "use gnulib module sleep for portability"); +# endif +#endif + + +#if @GNULIB_SYMLINK@ +# if @REPLACE_SYMLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlink +# define symlink rpl_symlink +# endif +_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); +# else +# if !@HAVE_SYMLINK@ +_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); +# endif +_GL_CXXALIASWARN (symlink); +#elif defined GNULIB_POSIXCHECK +# undef symlink +# if HAVE_RAW_DECL_SYMLINK +_GL_WARN_ON_USE (symlink, "symlink is not portable - " + "use gnulib module symlink for portability"); +# endif +#endif + + +#if @GNULIB_SYMLINKAT@ +# if !@HAVE_SYMLINKAT@ +_GL_FUNCDECL_SYS (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (symlinkat, int, + (char const *contents, int fd, char const *file)); +_GL_CXXALIASWARN (symlinkat); +#elif defined GNULIB_POSIXCHECK +# undef symlinkat +# if HAVE_RAW_DECL_SYMLINKAT +_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " + "use gnulib module symlinkat for portability"); +# endif +#endif + + +#if @GNULIB_TTYNAME_R@ +/* Store at most BUFLEN characters of the pathname of the terminal FD is + open on in BUF. Return 0 on success, otherwise an error number. */ +# if @REPLACE_TTYNAME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ttyname_r +# define ttyname_r rpl_ttyname_r +# endif +_GL_FUNCDECL_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# else +# if !@HAVE_DECL_TTYNAME_R@ +_GL_FUNCDECL_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# endif +_GL_CXXALIASWARN (ttyname_r); +#elif defined GNULIB_POSIXCHECK +# undef ttyname_r +# if HAVE_RAW_DECL_TTYNAME_R +_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " + "use gnulib module ttyname_r for portability"); +# endif +#endif + + +#if @GNULIB_UNLINK@ +# if @REPLACE_UNLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink rpl_unlink +# endif +_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#elif defined GNULIB_POSIXCHECK +# undef unlink +# if HAVE_RAW_DECL_UNLINK +_GL_WARN_ON_USE (unlink, "unlink is not portable - " + "use gnulib module unlink for portability"); +# endif +#endif + + +#if @GNULIB_UNLINKAT@ +# if @REPLACE_UNLINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlinkat +# define unlinkat rpl_unlinkat +# endif +_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); +# else +# if !@HAVE_UNLINKAT@ +_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); +# endif +_GL_CXXALIASWARN (unlinkat); +#elif defined GNULIB_POSIXCHECK +# undef unlinkat +# if HAVE_RAW_DECL_UNLINKAT +_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_USLEEP@ +/* Pause the execution of the current thread for N microseconds. + Returns 0 on completion, or -1 on range error. + See the POSIX:2001 specification + . */ +# if @REPLACE_USLEEP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef usleep +# define usleep rpl_usleep +# endif +_GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); +_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); +# else +# if !@HAVE_USLEEP@ +_GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIASWARN (usleep); +#elif defined GNULIB_POSIXCHECK +# undef usleep +# if HAVE_RAW_DECL_USLEEP +_GL_WARN_ON_USE (usleep, "usleep is unportable - " + "use gnulib module usleep for portability"); +# endif +#endif + + +#if @GNULIB_WRITE@ +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2008 specification + . */ +# if @REPLACE_WRITE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write rpl_write +# endif +_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#endif + +_GL_INLINE_HEADER_END + +#endif /* _@GUARD_PREFIX@_UNISTD_H */ +#endif /* _@GUARD_PREFIX@_UNISTD_H */ diff --git a/grub-core/gnulib/unitypes.in.h b/grub-core/gnulib/unitypes.in.h new file mode 100644 index 000000000..06eef05ce --- /dev/null +++ b/grub-core/gnulib/unitypes.in.h @@ -0,0 +1,46 @@ +/* Elementary types and macros for the GNU UniString library. + Copyright (C) 2002, 2005-2006, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _UNITYPES_H +#define _UNITYPES_H + +/* Get uint8_t, uint16_t, uint32_t. */ +#include + +/* Type representing a Unicode character. */ +typedef uint32_t ucs4_t; + +/* Attribute of a function whose result depends only on the arguments + (not pointers!) and which has no side effects. */ +#ifndef _UC_ATTRIBUTE_CONST +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +# define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) +# else +# define _UC_ATTRIBUTE_CONST +# endif +#endif + +/* Attribute of a function whose result depends only on the arguments + (possibly pointers) and global memory, and which has no side effects. */ +#ifndef _UC_ATTRIBUTE_PURE +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define _UC_ATTRIBUTE_PURE +# endif +#endif + +#endif /* _UNITYPES_H */ diff --git a/grub-core/gnulib/uniwidth.in.h b/grub-core/gnulib/uniwidth.in.h new file mode 100644 index 000000000..8931cc9b0 --- /dev/null +++ b/grub-core/gnulib/uniwidth.in.h @@ -0,0 +1,72 @@ +/* Display width functions. + Copyright (C) 2001-2002, 2005, 2007, 2009-2013 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _UNIWIDTH_H +#define _UNIWIDTH_H + +#include "unitypes.h" + +/* Get size_t. */ +#include + +/* Get locale_charset() declaration. */ +#include "localcharset.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Display width. */ + +/* These functions are locale dependent. The encoding argument identifies + the encoding (e.g. "ISO-8859-2" for Polish). */ + +/* Determine number of column positions required for UC. */ +extern int + uc_width (ucs4_t uc, const char *encoding) + _UC_ATTRIBUTE_PURE; + +/* Determine number of column positions required for first N units + (or fewer if S ends before this) in S. */ +extern int + u8_width (const uint8_t *s, size_t n, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u16_width (const uint16_t *s, size_t n, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u32_width (const uint32_t *s, size_t n, const char *encoding) + _UC_ATTRIBUTE_PURE; + +/* Determine number of column positions required for S. */ +extern int + u8_strwidth (const uint8_t *s, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u16_strwidth (const uint16_t *s, const char *encoding) + _UC_ATTRIBUTE_PURE; +extern int + u32_strwidth (const uint32_t *s, const char *encoding) + _UC_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + +#endif /* _UNIWIDTH_H */ diff --git a/grub-core/gnulib/uniwidth/cjk.h b/grub-core/gnulib/uniwidth/cjk.h new file mode 100644 index 000000000..11b14dfec --- /dev/null +++ b/grub-core/gnulib/uniwidth/cjk.h @@ -0,0 +1,37 @@ +/* Test for CJK encoding. + Copyright (C) 2001-2002, 2005-2007, 2009-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "streq.h" + +static int +is_cjk_encoding (const char *encoding) +{ + if (0 + /* Legacy Japanese encodings */ + || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) + /* Legacy Chinese encodings */ + || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) + || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) + || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) + /* Legacy Korean encodings */ + || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) + || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) + return 1; + return 0; +} diff --git a/grub-core/gnulib/uniwidth/width.c b/grub-core/gnulib/uniwidth/width.c new file mode 100644 index 000000000..173d0872c --- /dev/null +++ b/grub-core/gnulib/uniwidth/width.c @@ -0,0 +1,368 @@ +/* Determine display width of Unicode character. + Copyright (C) 2001-2002, 2006-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "cjk.h" + +/* + * Non-spacing attribute table. + * Consists of: + * - Non-spacing characters; generated from PropList.txt or + * "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" + * - Format control characters; generated from + * "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" + * - Zero width characters; generated from + * "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" + */ +static const unsigned char nonspacing_table_data[27*64] = { + /* 0x0000-0x01ff */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ + /* 0x0200-0x03ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ + /* 0x0400-0x05ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ + 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ + 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ + /* 0x0600-0x07ff */ + 0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ + 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ + 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ + 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */ + /* 0x0800-0x09ff */ + 0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */ + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */ + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */ + 0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */ + /* 0x0a00-0x0bff */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ + 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ + 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ + 0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ + /* 0x0c00-0x0dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */ + 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ + 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ + 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ + /* 0x0e00-0x0fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ + 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */ + 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ + 0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ + /* 0x1000-0x11ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ + 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ + 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */ + /* 0x1200-0x13ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ + 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ + /* 0x1600-0x17ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */ + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ + 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ + /* 0x1800-0x19ff */ + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ + /* 0x1a00-0x1bff */ + 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ + 0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ + 0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */ + 0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */ + /* 0x1c00-0x1dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ + 0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x00, 0x00, /* 0x1cc0-0x1cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, /* 0x1dc0-0x1dff */ + /* 0x2000-0x21ff */ + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ + /* 0x2c00-0x2dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ + /* 0x3000-0x31ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ + /* 0xa600-0xa7ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ + /* 0xa800-0xa9ff */ + 0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ + 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ + 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ + /* 0xaa00-0xabff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ + 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ + 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */ + /* 0xfa00-0xfbff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ + /* 0xfe00-0xffff */ + 0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ + /* 0x10000-0x101ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ + /* 0x10a00-0x10bff */ + 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ + /* 0x11000-0x111ff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */ + 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11040-0x1107f */ + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11100-0x1113f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11140-0x1117f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11180-0x111bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */ + /* 0x1d000-0x1d1ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */ + 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ + /* 0x1d200-0x1d3ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1d3c0-0x1d3ff */ +}; +static const signed char nonspacing_table_ind[240] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ + 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ + 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ + 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ + -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ + -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */ + 22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */ + 24, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */ + 25, 26, -1, -1, -1, -1, -1, -1 /* 0x1d000-0x1dfff */ +}; + +/* Determine number of column positions required for UC. */ +int +uc_width (ucs4_t uc, const char *encoding) +{ + /* Test for non-spacing or control character. */ + if ((uc >> 9) < 240) + { + int ind = nonspacing_table_ind[uc >> 9]; + if (ind >= 0) + if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1) + { + if (uc > 0 && uc < 0xa0) + return -1; + else + return 0; + } + } + else if ((uc >> 9) == (0xe0000 >> 9)) + { + if (uc >= 0xe0100) + { + if (uc <= 0xe01ef) + return 0; + } + else + { + if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001) + return 0; + } + } + /* Test for double-width character. + * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt" + * and "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt" + */ + if (uc >= 0x1100 + && ((uc < 0x1160) /* Hangul Jamo */ + || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */ + || (uc >= 0x2e80 && uc < 0xa4d0 /* CJK ... Yi */ + && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00)) + || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */ + || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */ + || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */ + || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */ + || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */ + || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */ + || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */ + || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */ + ) ) + return 2; + /* In ancient CJK encodings, Cyrillic and most other characters are + double-width as well. */ + if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9 + && is_cjk_encoding (encoding)) + return 2; + return 1; +} diff --git a/grub-core/gnulib/vasnprintf.c b/grub-core/gnulib/vasnprintf.c new file mode 100644 index 000000000..8fdab32ea --- /dev/null +++ b/grub-core/gnulib/vasnprintf.c @@ -0,0 +1,5606 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 1999, 2002-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +/* This file can be parametrized with the following macros: + VASNPRINTF The name of the function being defined. + FCHAR_T The element type of the format string. + DCHAR_T The element type of the destination (result) string. + FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. MUST be set if + FCHAR_T and DCHAR_T are not the same type. + DIRECTIVE Structure denoting a format directive. + Depends on FCHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on FCHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on FCHAR_T. + DCHAR_CPY memcpy like function for DCHAR_T[] arrays. + DCHAR_SET memset like function for DCHAR_T[] arrays. + DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. + SNPRINTF The system's snprintf (or similar) function. + This may be either snprintf or swprintf. + TCHAR_T The element type of the argument and result string + of the said SNPRINTF function. This may be either + char or wchar_t. The code exploits that + sizeof (TCHAR_T) | sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). + DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. + DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. + DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. + DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. + DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifndef VASNPRINTF +# include +#endif +#ifndef IN_LIBINTL +# include +#endif + +/* Specification. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "vasnwprintf.h" +# else +# include "vasnprintf.h" +# endif +#endif + +#include /* localeconv() */ +#include /* snprintf(), sprintf() */ +#include /* abort(), malloc(), realloc(), free() */ +#include /* memcpy(), strlen() */ +#include /* errno */ +#include /* CHAR_BIT */ +#include /* DBL_MAX_EXP, LDBL_MAX_EXP */ +#if HAVE_NL_LANGINFO +# include +#endif +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "wprintf-parse.h" +# else +# include "printf-parse.h" +# endif +#endif + +/* Checked size_t computations. */ +#include "xsize.h" + +#include "verify.h" + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "float+.h" +#endif + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnand-nolibm.h" +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnanl-nolibm.h" +# include "fpucw.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnand-nolibm.h" +# include "printf-frexp.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnanl-nolibm.h" +# include "printf-frexpl.h" +# include "fpucw.h" +#endif + +/* Default parameters. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# define VASNPRINTF vasnwprintf +# define FCHAR_T wchar_t +# define DCHAR_T wchar_t +# define TCHAR_T wchar_t +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE wchar_t_directive +# define DIRECTIVES wchar_t_directives +# define PRINTF_PARSE wprintf_parse +# define DCHAR_CPY wmemcpy +# define DCHAR_SET wmemset +# else +# define VASNPRINTF vasnprintf +# define FCHAR_T char +# define DCHAR_T char +# define TCHAR_T char +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +# define PRINTF_PARSE printf_parse +# define DCHAR_CPY memcpy +# define DCHAR_SET memset +# endif +#endif +#if WIDE_CHAR_VERSION + /* TCHAR_T is wchar_t. */ +# define USE_SNPRINTF 1 +# if HAVE_DECL__SNWPRINTF + /* On Windows, the function swprintf() has a different signature than + on Unix; we use the function _snwprintf() or - on mingw - snwprintf() + instead. The mingw function snwprintf() has fewer bugs than the + MSVCRT function _snwprintf(), so prefer that. */ +# if defined __MINGW32__ +# define SNPRINTF snwprintf +# else +# define SNPRINTF _snwprintf +# endif +# else + /* Unix. */ +# define SNPRINTF swprintf +# endif +#else + /* TCHAR_T is char. */ + /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. + But don't use it on BeOS, since BeOS snprintf produces no output if the + size argument is >= 0x3000000. + Also don't use it on Linux libc5, since there snprintf with size = 1 + writes any output without bounds, like sprintf. */ +# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) +# define USE_SNPRINTF 1 +# else +# define USE_SNPRINTF 0 +# endif +# if HAVE_DECL__SNPRINTF + /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT + function _snprintf(), so prefer that. */ +# if defined __MINGW32__ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# else +# define SNPRINTF _snprintf +# endif +# else + /* Unix. */ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# endif +#endif +/* Here we need to call the native sprintf, not rpl_sprintf. */ +#undef sprintf + +/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" + warnings in this file. Use -Dlint to suppress them. */ +#ifdef lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() and remainder() functions. */ +#undef exp +#define exp expo +#undef remainder +#define remainder rem + +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION +# if (HAVE_STRNLEN && !defined _AIX) +# define local_strnlen strnlen +# else +# ifndef local_strnlen_defined +# define local_strnlen_defined 1 +static size_t +local_strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} +# endif +# endif +#endif + +#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T +# if HAVE_WCSLEN +# define local_wcslen wcslen +# else + /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid + a dependency towards this library, here is a local substitute. + Define this substitute only once, even if this file is included + twice in the same compilation unit. */ +# ifndef local_wcslen_defined +# define local_wcslen_defined 1 +static size_t +local_wcslen (const wchar_t *s) +{ + const wchar_t *ptr; + + for (ptr = s; *ptr != (wchar_t) 0; ptr++) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION +# if HAVE_WCSNLEN +# define local_wcsnlen wcsnlen +# else +# ifndef local_wcsnlen_defined +# define local_wcsnlen_defined 1 +static size_t +local_wcsnlen (const wchar_t *s, size_t maxlen) +{ + const wchar_t *ptr; + + for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +/* Determine the decimal-point character according to the current locale. */ +# ifndef decimal_point_char_defined +# define decimal_point_char_defined 1 +static char +decimal_point_char (void) +{ + const char *point; + /* Determine it in a multithread-safe way. We know nl_langinfo is + multithread-safe on glibc systems and Mac OS X systems, but is not required + to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. + localeconv() is rarely multithread-safe. */ +# if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) + point = nl_langinfo (RADIXCHAR); +# elif 1 + char pointbuf[5]; + sprintf (pointbuf, "%#.0f", 1.0); + point = &pointbuf[1]; +# else + point = localeconv () -> decimal_point; +# endif + /* The decimal point is always a single byte: either '.' or ','. */ + return (point[0] != '\0' ? point[0] : '.'); +} +# endif +#endif + +#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zero (double x) +{ + return isnand (x) || x + x == x; +} + +#endif + +#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zerol (long double x) +{ + return isnanl (x) || x + x == x; +} + +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + +/* Converting 'long double' to decimal without rare rounding bugs requires + real bignums. We use the naming conventions of GNU gmp, but vastly simpler + (and slower) algorithms. */ + +typedef unsigned int mp_limb_t; +# define GMP_LIMB_BITS 32 +verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); + +typedef unsigned long long mp_twolimb_t; +# define GMP_TWOLIMB_BITS 64 +verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); + +/* Representation of a bignum >= 0. */ +typedef struct +{ + size_t nlimbs; + mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ +} mpn_t; + +/* Compute the product of two bignums >= 0. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +multiply (mpn_t src1, mpn_t src2, mpn_t *dest) +{ + const mp_limb_t *p1; + const mp_limb_t *p2; + size_t len1; + size_t len2; + + if (src1.nlimbs <= src2.nlimbs) + { + len1 = src1.nlimbs; + p1 = src1.limbs; + len2 = src2.nlimbs; + p2 = src2.limbs; + } + else + { + len1 = src2.nlimbs; + p1 = src2.limbs; + len2 = src1.nlimbs; + p2 = src1.limbs; + } + /* Now 0 <= len1 <= len2. */ + if (len1 == 0) + { + /* src1 or src2 is zero. */ + dest->nlimbs = 0; + dest->limbs = (mp_limb_t *) malloc (1); + } + else + { + /* Here 1 <= len1 <= len2. */ + size_t dlen; + mp_limb_t *dp; + size_t k, i, j; + + dlen = len1 + len2; + dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); + if (dp == NULL) + return NULL; + for (k = len2; k > 0; ) + dp[--k] = 0; + for (i = 0; i < len1; i++) + { + mp_limb_t digit1 = p1[i]; + mp_twolimb_t carry = 0; + for (j = 0; j < len2; j++) + { + mp_limb_t digit2 = p2[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + carry += dp[i + j]; + dp[i + j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + dp[i + len2] = (mp_limb_t) carry; + } + /* Normalise. */ + while (dlen > 0 && dp[dlen - 1] == 0) + dlen--; + dest->nlimbs = dlen; + dest->limbs = dp; + } + return dest->limbs; +} + +/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. + a is written as a = q * b + r with 0 <= r < b. q is the quotient, r + the remainder. + Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, + q is incremented. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +divide (mpn_t a, mpn_t b, mpn_t *q) +{ + /* Algorithm: + First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] + with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). + If m=n=1, perform a single-precision division: + r:=0, j:=m, + while j>0 do + {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = + = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: + We have a/b < beta^(m-n+1). + s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. + For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} + Compute q* : + q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). + In case of overflow (q* >= beta) set q* := beta-1. + Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] + and c3 := b[n-2] * q*. + {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow + occurred. Furthermore 0 <= c3 < beta^2. + If there was overflow and + r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, + the next test can be skipped.} + While c3 > c2, {Here 0 <= c2 < c3 < beta^2} + Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. + If q* > 0: + Put r := r - b * q* * beta^j. In detail: + [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. + hence: u:=0, for i:=0 to n-1 do + u := u + q* * b[i], + r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), + u:=u div beta (+ 1, if carry in subtraction) + r[n+j]:=r[n+j]-u. + {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 + < q* + 1 <= beta, + the carry u does not overflow.} + If a negative carry occurs, put q* := q* - 1 + and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. + Set q[j] := q*. + Normalise [q[m-n],..,q[0]]; this yields the quotient q. + Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the + rest r. + The room for q[j] can be allocated at the memory location of r[n+j]. + Finally, round-to-even: + Shift r left by 1 bit. + If r > b or if r = b and q[0] is odd, q := q+1. + */ + const mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + const mp_limb_t *b_ptr = b.limbs; + size_t b_len = b.nlimbs; + mp_limb_t *roomptr; + mp_limb_t *tmp_roomptr = NULL; + mp_limb_t *q_ptr; + size_t q_len; + mp_limb_t *r_ptr; + size_t r_len; + + /* Allocate room for a_len+2 digits. + (Need a_len+1 digits for the real division and 1 more digit for the + final rounding of q.) */ + roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); + if (roomptr == NULL) + return NULL; + + /* Normalise a. */ + while (a_len > 0 && a_ptr[a_len - 1] == 0) + a_len--; + + /* Normalise b. */ + for (;;) + { + if (b_len == 0) + /* Division by zero. */ + abort (); + if (b_ptr[b_len - 1] == 0) + b_len--; + else + break; + } + + /* Here m = a_len >= 0 and n = b_len > 0. */ + + if (a_len < b_len) + { + /* m beta^(m-2) <= a/b < beta^m */ + r_ptr = roomptr; + q_ptr = roomptr + 1; + { + mp_limb_t den = b_ptr[0]; + mp_limb_t remainder = 0; + const mp_limb_t *sourceptr = a_ptr + a_len; + mp_limb_t *destptr = q_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; + *--destptr = num / den; + remainder = num % den; + } + /* Normalise and store r. */ + if (remainder > 0) + { + r_ptr[0] = remainder; + r_len = 1; + } + else + r_len = 0; + /* Normalise q. */ + q_len = a_len; + if (q_ptr[q_len - 1] == 0) + q_len--; + } + } + else + { + /* n>1: multiple precision division. + beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> + beta^(m-n-1) <= a/b < beta^(m-n+1). */ + /* Determine s. */ + size_t s; + { + mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ + /* Determine s = GMP_LIMB_BITS - integer_length (msd). + Code copied from gnulib's integer_length.c. */ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + s = __builtin_clz (msd); +# else +# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + if (GMP_LIMB_BITS <= DBL_MANT_BIT) + { + /* Use 'double' operations. + Assumes an IEEE 754 'double' implementation. */ +# define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +# define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) +# define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { double value; unsigned int word[NWORDS]; } m; + + /* Use a single integer to floating-point conversion. */ + m.value = msd; + + s = GMP_LIMB_BITS + - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) + - DBL_EXP_BIAS); + } + else +# undef NWORDS +# endif + { + s = 31; + if (msd >= 0x10000) + { + msd = msd >> 16; + s -= 16; + } + if (msd >= 0x100) + { + msd = msd >> 8; + s -= 8; + } + if (msd >= 0x10) + { + msd = msd >> 4; + s -= 4; + } + if (msd >= 0x4) + { + msd = msd >> 2; + s -= 2; + } + if (msd >= 0x2) + { + msd = msd >> 1; + s -= 1; + } + } +# endif + } + /* 0 <= s < GMP_LIMB_BITS. + Copy b, shifting it left by s bits. */ + if (s > 0) + { + tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); + if (tmp_roomptr == NULL) + { + free (roomptr); + return NULL; + } + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = tmp_roomptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + /* accu must be zero, since that was how s was determined. */ + if (accu != 0) + abort (); + } + b_ptr = tmp_roomptr; + } + /* Copy a, shifting it left by s bits, yields r. + Memory layout: + At the beginning: r = roomptr[0..a_len], + at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ + r_ptr = roomptr; + if (s == 0) + { + memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); + r_ptr[a_len] = 0; + } + else + { + const mp_limb_t *sourceptr = a_ptr; + mp_limb_t *destptr = r_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = a_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + *destptr++ = (mp_limb_t) accu; + } + q_ptr = roomptr + b_len; + q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ + { + size_t j = a_len - b_len; /* m-n */ + mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ + mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ + mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ + ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; + /* Division loop, traversed m-n+1 times. + j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ + for (;;) + { + mp_limb_t q_star; + mp_limb_t c1; + if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ + { + /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ + mp_twolimb_t num = + ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) + | r_ptr[j + b_len - 1]; + q_star = num / b_msd; + c1 = num % b_msd; + } + else + { + /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ + q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ + /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta + <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta + <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) + {<= beta !}. + If yes, jump directly to the subtraction loop. + (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta + <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ + if (r_ptr[j + b_len] > b_msd + || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) + /* r[j+n] >= b[n-1]+1 or + r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a + carry. */ + goto subtract; + } + /* q_star = q*, + c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by + b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 + this can happen only twice. */ + if (c3 > c2) + { + q_star = q_star - 1; /* q* := q* - 1 */ + if (c3 - c2 > b_msdd) + q_star = q_star - 1; /* q* := q* - 1 */ + } + } + if (q_star > 0) + subtract: + { + /* Subtract r := r - b * q* * beta^j. */ + mp_limb_t cr; + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_twolimb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + /* Here 0 <= carry <= q*. */ + carry = + carry + + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + + (mp_limb_t) ~(*destptr); + /* Here 0 <= carry <= beta*q* + beta-1. */ + *destptr++ = ~(mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; /* <= q* */ + } + cr = (mp_limb_t) carry; + } + /* Subtract cr from r_ptr[j + b_len], then forget about + r_ptr[j + b_len]. */ + if (cr > r_ptr[j + b_len]) + { + /* Subtraction gave a carry. */ + q_star = q_star - 1; /* q* := q* - 1 */ + /* Add b back. */ + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_limb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + mp_limb_t source1 = *sourceptr++; + mp_limb_t source2 = *destptr; + *destptr++ = source1 + source2 + carry; + carry = + (carry + ? source1 >= (mp_limb_t) ~source2 + : source1 > (mp_limb_t) ~source2); + } + } + /* Forget about the carry and about r[j+n]. */ + } + } + /* q* is determined. Store it as q[j]. */ + q_ptr[j] = q_star; + if (j == 0) + break; + j--; + } + } + r_len = b_len; + /* Normalise q. */ + if (q_ptr[q_len - 1] == 0) + q_len--; +# if 0 /* Not needed here, since we need r only to compare it with b/2, and + b is shifted left by s bits. */ + /* Shift r right by s bits. */ + if (s > 0) + { + mp_limb_t ptr = r_ptr + r_len; + mp_twolimb_t accu = 0; + size_t count; + for (count = r_len; count > 0; count--) + { + accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; + accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); + *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); + } + } +# endif + /* Normalise r. */ + while (r_len > 0 && r_ptr[r_len - 1] == 0) + r_len--; + } + /* Compare r << 1 with b. */ + if (r_len > b_len) + goto increment_q; + { + size_t i; + for (i = b_len;;) + { + mp_limb_t r_i = + (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) + | (i < r_len ? r_ptr[i] << 1 : 0); + mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); + if (r_i > b_i) + goto increment_q; + if (r_i < b_i) + goto keep_q; + if (i == 0) + break; + i--; + } + } + if (q_len > 0 && ((q_ptr[0] & 1) != 0)) + /* q is odd. */ + increment_q: + { + size_t i; + for (i = 0; i < q_len; i++) + if (++(q_ptr[i]) != 0) + goto keep_q; + q_ptr[q_len++] = 1; + } + keep_q: + if (tmp_roomptr != NULL) + free (tmp_roomptr); + q->limbs = q_ptr; + q->nlimbs = q_len; + return roomptr; +} + +/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal + representation. + Destroys the contents of a. + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +convert_to_decimal (mpn_t a, size_t extra_zeroes) +{ + mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ + size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); + char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); + if (c_ptr != NULL) + { + char *d_ptr = c_ptr; + for (; extra_zeroes > 0; extra_zeroes--) + *d_ptr++ = '0'; + while (a_len > 0) + { + /* Divide a by 10^9, in-place. */ + mp_limb_t remainder = 0; + mp_limb_t *ptr = a_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; + *ptr = num / 1000000000; + remainder = num % 1000000000; + } + /* Store the remainder as 9 decimal digits. */ + for (count = 9; count > 0; count--) + { + *d_ptr++ = '0' + (remainder % 10); + remainder = remainder / 10; + } + /* Normalize a. */ + if (a_ptr[a_len - 1] == 0) + a_len--; + } + /* Remove leading zeroes. */ + while (d_ptr > c_ptr && d_ptr[-1] == '0') + d_ptr--; + /* But keep at least one zero. */ + if (d_ptr == c_ptr) + *d_ptr++ = '0'; + /* Terminate the string. */ + *d_ptr = '\0'; + } + return c_ptr; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_long_double (long double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + long double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'long double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess + precision. */ + if (!(y == 0.0L)) + abort (); +# endif + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - LDBL_MANT_BIT; + return m.limbs; +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_double (double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } + if (!(y == 0.0)) + abort (); + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - DBL_MANT_BIT; + return m.limbs; +} + +# endif + +/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) +{ + int s; + size_t extra_zeroes; + unsigned int abs_n; + unsigned int abs_s; + mp_limb_t *pow5_ptr; + size_t pow5_len; + unsigned int s_limbs; + unsigned int s_bits; + mpn_t pow5; + mpn_t z; + void *z_memory; + char *digits; + + if (memory == NULL) + return NULL; + /* x = 2^e * m, hence + y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) + = round (2^s * 5^n * m). */ + s = e + n; + extra_zeroes = 0; + /* Factor out a common power of 10 if possible. */ + if (s > 0 && n > 0) + { + extra_zeroes = (s < n ? s : n); + s -= extra_zeroes; + n -= extra_zeroes; + } + /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. + Before converting to decimal, we need to compute + z = round (2^s * 5^n * m). */ + /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same + sign. 2.322 is slightly larger than log(5)/log(2). */ + abs_n = (n >= 0 ? n : -n); + abs_s = (s >= 0 ? s : -s); + pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + + abs_s / GMP_LIMB_BITS + 1) + * sizeof (mp_limb_t)); + if (pow5_ptr == NULL) + { + free (memory); + return NULL; + } + /* Initialize with 1. */ + pow5_ptr[0] = 1; + pow5_len = 1; + /* Multiply with 5^|n|. */ + if (abs_n > 0) + { + static mp_limb_t const small_pow5[13 + 1] = + { + 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, + 48828125, 244140625, 1220703125 + }; + unsigned int n13; + for (n13 = 0; n13 <= abs_n; n13 += 13) + { + mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; + size_t j; + mp_twolimb_t carry = 0; + for (j = 0; j < pow5_len; j++) + { + mp_limb_t digit2 = pow5_ptr[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + pow5_ptr[j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + if (carry > 0) + pow5_ptr[pow5_len++] = (mp_limb_t) carry; + } + } + s_limbs = abs_s / GMP_LIMB_BITS; + s_bits = abs_s % GMP_LIMB_BITS; + if (n >= 0 ? s >= 0 : s <= 0) + { + /* Multiply with 2^|s|. */ + if (s_bits > 0) + { + mp_limb_t *ptr = pow5_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = pow5_len; count > 0; count--) + { + accu += (mp_twolimb_t) *ptr << s_bits; + *ptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + { + *ptr = (mp_limb_t) accu; + pow5_len++; + } + } + if (s_limbs > 0) + { + size_t count; + for (count = pow5_len; count > 0;) + { + count--; + pow5_ptr[s_limbs + count] = pow5_ptr[count]; + } + for (count = s_limbs; count > 0;) + { + count--; + pow5_ptr[count] = 0; + } + pow5_len += s_limbs; + } + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* Multiply m with pow5. No division needed. */ + z_memory = multiply (m, pow5, &z); + } + else + { + /* Divide m by pow5 and round. */ + z_memory = divide (m, pow5, &z); + } + } + else + { + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* n >= 0, s < 0. + Multiply m with pow5, then divide by 2^|s|. */ + mpn_t numerator; + mpn_t denominator; + void *tmp_memory; + tmp_memory = multiply (m, pow5, &numerator); + if (tmp_memory == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + /* Construct 2^|s|. */ + { + mp_limb_t *ptr = pow5_ptr + pow5_len; + size_t i; + for (i = 0; i < s_limbs; i++) + ptr[i] = 0; + ptr[s_limbs] = (mp_limb_t) 1 << s_bits; + denominator.limbs = ptr; + denominator.nlimbs = s_limbs + 1; + } + z_memory = divide (numerator, denominator, &z); + free (tmp_memory); + } + else + { + /* n < 0, s > 0. + Multiply m with 2^s, then divide by pow5. */ + mpn_t numerator; + mp_limb_t *num_ptr; + num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) + * sizeof (mp_limb_t)); + if (num_ptr == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + { + mp_limb_t *destptr = num_ptr; + { + size_t i; + for (i = 0; i < s_limbs; i++) + *destptr++ = 0; + } + if (s_bits > 0) + { + const mp_limb_t *sourceptr = m.limbs; + mp_twolimb_t accu = 0; + size_t count; + for (count = m.nlimbs; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s_bits; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + *destptr++ = (mp_limb_t) accu; + } + else + { + const mp_limb_t *sourceptr = m.limbs; + size_t count; + for (count = m.nlimbs; count > 0; count--) + *destptr++ = *sourceptr++; + } + numerator.limbs = num_ptr; + numerator.nlimbs = destptr - num_ptr; + } + z_memory = divide (numerator, pow5, &z); + free (num_ptr); + } + } + free (pow5_ptr); + free (memory); + + /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ + + if (z_memory == NULL) + return NULL; + digits = convert_to_decimal (z, extra_zeroes); + free (z_memory); + return digits; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_long_double (long double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_long_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_double (double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10l (long double x) +{ + int exp; + long double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + if (y == 0.0L) + return INT_MIN; + if (y < 0.5L) + { + while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0L / (1 << 16))) + { + y *= 1.0L * (1 << 16); + exp -= 16; + } + if (y < (1.0L / (1 << 8))) + { + y *= 1.0L * (1 << 8); + exp -= 8; + } + if (y < (1.0L / (1 << 4))) + { + y *= 1.0L * (1 << 4); + exp -= 4; + } + if (y < (1.0L / (1 << 2))) + { + y *= 1.0L * (1 << 2); + exp -= 2; + } + if (y < (1.0L / (1 << 1))) + { + y *= 1.0L * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5L && y < 1.0L)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10 (double x) +{ + int exp; + double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + if (y == 0.0) + return INT_MIN; + if (y < 0.5) + { + while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0 / (1 << 16))) + { + y *= 1.0 * (1 << 16); + exp -= 16; + } + if (y < (1.0 / (1 << 8))) + { + y *= 1.0 * (1 << 8); + exp -= 8; + } + if (y < (1.0 / (1 << 4))) + { + y *= 1.0 * (1 << 4); + exp -= 4; + } + if (y < (1.0 / (1 << 2))) + { + y *= 1.0 * (1 << 2); + exp -= 2; + } + if (y < (1.0 / (1 << 1))) + { + y *= 1.0 * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5 && y < 1.0)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +/* Tests whether a string of digits consists of exactly PRECISION zeroes and + a single '1' digit. */ +static int +is_borderline (const char *digits, size_t precision) +{ + for (; precision > 0; precision--, digits++) + if (*digits != '0') + return 0; + if (*digits != '1') + return 0; + digits++; + return *digits == '\0'; +} + +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 + +/* Use a different function name, to make it possible that the 'wchar_t' + parametrization and the 'char' parametrization get compiled in the same + translation unit. */ +# if WIDE_CHAR_VERSION +# define MAX_ROOM_NEEDED wmax_room_needed +# else +# define MAX_ROOM_NEEDED max_room_needed +# endif + +/* Returns the number of TCHAR_T units needed as temporary space for the result + of sprintf or SNPRINTF of a single conversion directive. */ +static size_t +MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, + arg_type type, int flags, size_t width, int has_precision, + size_t precision, int pad_ourselves) +{ + size_t tmp_length; + + switch (conversion) + { + case 'd': case 'i': case 'u': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Multiply by 2, as an estimate for FLAG_GROUP. */ + tmp_length = xsum (tmp_length, tmp_length); + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'o': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'x': case 'X': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 2, to account for a leading sign or alternate form. */ + tmp_length = xsum (tmp_length, 2); + break; + + case 'f': case 'F': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + else + tmp_length = + (unsigned int) (DBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'e': case 'E': case 'g': case 'G': + tmp_length = + 12; /* sign, decimal point, exponent etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'a': case 'A': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (DBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + break; + + case 'c': +# if HAVE_WINT_T && !WIDE_CHAR_VERSION + if (type == TYPE_WIDE_CHAR) + tmp_length = MB_CUR_MAX; + else +# endif + tmp_length = 1; + break; + + case 's': +# if HAVE_WCHAR_T + if (type == TYPE_WIDE_STRING) + { +# if WIDE_CHAR_VERSION + /* ISO C says about %ls in fwprintf: + "If the precision is not specified or is greater than the size + of the array, the array shall contain a null wide character." + So if there is a precision, we must not use wcslen. */ + const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; + + if (has_precision) + tmp_length = local_wcsnlen (arg, precision); + else + tmp_length = local_wcslen (arg); +# else + /* ISO C says about %ls in fprintf: + "If a precision is specified, no more than that many bytes are + written (including shift sequences, if any), and the array + shall contain a null wide character if, to equal the multibyte + character sequence length given by the precision, the function + would need to access a wide character one past the end of the + array." + So if there is a precision, we must not use wcslen. */ + /* This case has already been handled separately in VASNPRINTF. */ + abort (); +# endif + } + else +# endif + { +# if WIDE_CHAR_VERSION + /* ISO C says about %s in fwprintf: + "If the precision is not specified or is greater than the size + of the converted array, the converted array shall contain a + null wide character." + So if there is a precision, we must not use strlen. */ + /* This case has already been handled separately in VASNPRINTF. */ + abort (); +# else + /* ISO C says about %s in fprintf: + "If the precision is not specified or greater than the size of + the array, the array shall contain a null character." + So if there is a precision, we must not use strlen. */ + const char *arg = ap->arg[arg_index].a.a_string; + + if (has_precision) + tmp_length = local_strnlen (arg, precision); + else + tmp_length = strlen (arg); +# endif + } + break; + + case 'p': + tmp_length = + (unsigned int) (sizeof (void *) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1 /* turn floor into ceil */ + + 2; /* account for leading 0x */ + break; + + default: + abort (); + } + + if (!pad_ourselves) + { +# if ENABLE_UNISTDIO + /* Padding considers the number of characters, therefore the number of + elements after padding may be + > max (tmp_length, width) + but is certainly + <= tmp_length + width. */ + tmp_length = xsum (tmp_length, width); +# else + /* Padding considers the number of elements, says POSIX. */ + if (tmp_length < width) + tmp_length = width; +# endif + } + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + return tmp_length; +} + +#endif + +DCHAR_T * +VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, + const FCHAR_T *format, va_list args) +{ + DIRECTIVES d; + arguments a; + + if (PRINTF_PARSE (format, &d, &a) < 0) + /* errno is already set. */ + return NULL; + +#define CLEANUP() \ + if (d.dir != d.direct_alloc_dir) \ + free (d.dir); \ + if (a.arg != a.direct_alloc_arg) \ + free (a.arg); + + if (PRINTF_FETCHARGS (args, &a) < 0) + { + CLEANUP (); + errno = EINVAL; + return NULL; + } + + { + size_t buf_neededlength; + TCHAR_T *buf; + TCHAR_T *buf_malloced; + const FCHAR_T *cp; + size_t i; + DIRECTIVE *dp; + /* Output string accumulator. */ + DCHAR_T *result; + size_t allocated; + size_t length; + + /* Allocate a small buffer that will hold a directive passed to + sprintf or snprintf. */ + buf_neededlength = + xsum4 (7, d.max_width_length, d.max_precision_length, 6); +#if HAVE_ALLOCA + if (buf_neededlength < 4000 / sizeof (TCHAR_T)) + { + buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); + buf_malloced = NULL; + } + else +#endif + { + size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); + if (size_overflow_p (buf_memsize)) + goto out_of_memory_1; + buf = (TCHAR_T *) malloc (buf_memsize); + if (buf == NULL) + goto out_of_memory_1; + buf_malloced = buf; + } + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + /* Ensures that allocated >= needed. Aborts through a jump to + out_of_memory if needed is SIZE_MAX or otherwise too big. */ +#define ENSURE_ALLOCATION(needed) \ + if ((needed) > allocated) \ + { \ + size_t memory_size; \ + DCHAR_T *memory; \ + \ + allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ + if ((needed) > allocated) \ + allocated = (needed); \ + memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ + if (size_overflow_p (memory_size)) \ + goto out_of_memory; \ + if (result == resultbuf || result == NULL) \ + memory = (DCHAR_T *) malloc (memory_size); \ + else \ + memory = (DCHAR_T *) realloc (result, memory_size); \ + if (memory == NULL) \ + goto out_of_memory; \ + if (result == resultbuf && length > 0) \ + DCHAR_CPY (memory, result, length); \ + result = memory; \ + } + + for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) + { + if (cp != dp->dir_start) + { + size_t n = dp->dir_start - cp; + size_t augmented_length = xsum (length, n); + + ENSURE_ALLOCATION (augmented_length); + /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we + need that the format string contains only ASCII characters + if FCHAR_T and DCHAR_T are not the same type. */ + if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) + { + DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); + length = augmented_length; + } + else + { + do + result[length++] = (unsigned char) *cp++; + while (--n > 0); + } + } + if (i == d.count) + break; + + /* Execute a single directive. */ + if (dp->conversion == '%') + { + size_t augmented_length; + + if (!(dp->arg_index == ARG_NONE)) + abort (); + augmented_length = xsum (length, 1); + ENSURE_ALLOCATION (augmented_length); + result[length] = '%'; + length = augmented_length; + } + else + { + if (!(dp->arg_index != ARG_NONE)) + abort (); + + if (dp->conversion == 'n') + { + switch (a.arg[dp->arg_index].type) + { + case TYPE_COUNT_SCHAR_POINTER: + *a.arg[dp->arg_index].a.a_count_schar_pointer = length; + break; + case TYPE_COUNT_SHORT_POINTER: + *a.arg[dp->arg_index].a.a_count_short_pointer = length; + break; + case TYPE_COUNT_INT_POINTER: + *a.arg[dp->arg_index].a.a_count_int_pointer = length; + break; + case TYPE_COUNT_LONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longint_pointer = length; + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; + break; +#endif + default: + abort (); + } + } +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + else if (dp->conversion == 'U') + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + switch (type) + { + case TYPE_U8_STRING: + { + const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; + const uint8_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u8_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT8_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-8 to locale encoding. */ + converted = + u8_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-8 to UTF-16/UTF-32. */ + converted = + U8_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U16_STRING: + { + const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; + const uint16_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u16_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT16_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-16 to locale encoding. */ + converted = + u16_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-16 to UTF-8/UTF-32. */ + converted = + U16_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U32_STRING: + { + const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; + const uint32_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u32_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT32_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-32 to locale encoding. */ + converted = + u32_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-32 to UTF-8/UTF-16. */ + converted = + U32_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + default: + abort (); + } + } +#endif +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T + else if (dp->conversion == 's' +# if WIDE_CHAR_VERSION + && a.arg[dp->arg_index].type != TYPE_WIDE_STRING +# else + && a.arg[dp->arg_index].type == TYPE_WIDE_STRING +# endif + ) + { + /* The normal handling of the 's' directive below requires + allocating a temporary buffer. The determination of its + length (tmp_length), in the case when a precision is + specified, below requires a conversion between a char[] + string and a wchar_t[] wide string. It could be done, but + we have no guarantee that the implementation of sprintf will + use the exactly same algorithm. Without this guarantee, it + is possible to have buffer overrun bugs. In order to avoid + such bugs, we implement the entire processing of the 's' + directive ourselves. */ + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + +# if WIDE_CHAR_VERSION + /* %s in vasnwprintf. See the specification of fwprintf. */ + { + const char *arg = a.arg[dp->arg_index].a.a_string; + const char *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only as many bytes as needed to produce PRECISION + wide characters, from the left. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of wide + characters. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + + if (has_precision || has_width) + { + /* We know the number of wide characters in advance. */ + size_t remaining; +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; remaining--) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + result[length++] = wc; + arg += count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + ENSURE_ALLOCATION (xsum (length, 1)); + result[length++] = wc; + arg += count; + } + } + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# else + /* %ls in vasnprintf. See the specification of fprintf. */ + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + const wchar_t *arg_end; + size_t characters; +# if !DCHAR_IS_TCHAR + /* This code assumes that TCHAR_T is 'char'. */ + verify (sizeof (TCHAR_T) == 1); + TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; +# endif + size_t w; + + if (has_precision) + { + /* Use only as many wide characters as needed to produce + at most PRECISION bytes, from the left. */ +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + while (precision > 0) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg_end, &state); +# else + count = wctomb (cbuf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + if (precision < count) + break; + arg_end++; + characters += count; + precision -= count; + } + } +# if DCHAR_IS_TCHAR + else if (has_width) +# else + else +# endif + { + /* Use the entire string, and count the number of + bytes. */ +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg_end, &state); +# else + count = wctomb (cbuf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end++; + characters += count; + } + } +# if DCHAR_IS_TCHAR + else + { + /* Use the entire string. */ + arg_end = arg + local_wcslen (arg); + /* The number of bytes doesn't matter. */ + characters = 0; + } +# endif + +# if !DCHAR_IS_TCHAR + /* Convert the string into a piece of temporary memory. */ + tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); + if (tmpsrc == NULL) + goto out_of_memory; + { + TCHAR_T *tmpptr = tmpsrc; + size_t remaining; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + for (remaining = characters; remaining > 0; ) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (tmpptr, cbuf, count); + tmpptr += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, characters, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + free (tmpsrc); + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + free (tmpsrc); +# endif + + if (has_width) + { +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, characters); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = characters; +# endif + } + else + /* w doesn't matter. */ + w = 0; + + if (has_width && width > w + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_TCHAR + if (has_precision || has_width) + { + /* We know the number of bytes in advance. */ + size_t remaining; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; ) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (result + length, cbuf, count); + length += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, count)); + memcpy (result + length, cbuf, count); + length += count; + arg++; + } + } +# else + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + length += tmpdst_len; +# endif + + if (has_width && width > w + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# endif + } +#endif +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'a' || dp->conversion == 'A') +# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# endif + ) +# endif + ) + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* Allocate a temporary buffer of sufficient size. */ + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) ((LDBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) ((DBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + if (type == TYPE_LONGDOUBLE) + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + long double mantissa; + + if (arg > 0.0L) + mantissa = printf_frexpl (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0L; + } + + if (has_precision + && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + long double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5L : tail > 0.5L) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0L; + } + if (tail != 0.0L) + for (q = precision; q > 0; q--) + tail *= 0.0625L; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0L || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0L) + { + mantissa *= 16.0L; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } +# else + abort (); +# endif + } + else + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + double mantissa; + + if (arg > 0.0) + mantissa = printf_frexp (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0; + } + + if (has_precision + && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5 : tail > 0.5) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0; + } + if (tail != 0.0) + for (q = precision; q > 0; q--) + tail *= 0.0625; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0 || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0) + { + mantissa *= 16.0; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + } +# else + abort (); +# endif + } + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif +#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'f' || dp->conversion == 'F' + || dp->conversion == 'e' || dp->conversion == 'E' + || dp->conversion == 'g' || dp->conversion == 'G' + || dp->conversion == 'a' || dp->conversion == 'A') + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# elif NEED_PRINTF_INFINITE_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_DOUBLE + /* The systems (mingw) which produce wrong output + for Inf, -Inf, and NaN also do so for -0.0. + Therefore we treat this case here as well. */ + && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# elif NEED_PRINTF_INFINITE_LONG_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE + /* Some systems produce wrong output for Inf, + -Inf, and NaN. Some systems in this category + (IRIX 5.3) also do so for -0.0. Therefore we + treat this case here as well. */ + && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) +# endif + )) + { +# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) + arg_type type = a.arg[dp->arg_index].type; +# endif + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* POSIX specifies the default precision to be 6 for %f, %F, + %e, %E, but not for %g, %G. Implementations appear to use + the same default precision also for %g, %G. But for %a, %A, + the default precision is 0. */ + if (!has_precision) + if (!(dp->conversion == 'a' || dp->conversion == 'A')) + precision = 6; + + /* Allocate a temporary buffer of sufficient size. */ +# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); +# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); +# elif NEED_PRINTF_LONG_DOUBLE + tmp_length = LDBL_DIG + 1; +# elif NEED_PRINTF_DOUBLE + tmp_length = DBL_DIG + 1; +# else + tmp_length = 0; +# endif + if (tmp_length < precision) + tmp_length = precision; +# if NEED_PRINTF_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + if (!(isnanl (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10l (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif +# if NEED_PRINTF_DOUBLE +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE + if (type == TYPE_DOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + double arg = a.arg[dp->arg_index].a.a_double; + if (!(isnand (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10 (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_LONG_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_long_double (arg, precision); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0L) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0L. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)precision - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0L) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0L. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0L)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else if (dp->conversion == 'a' || dp->conversion == 'A') + { + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion - 'A' + 'P'; + *p++ = '+'; + *p++ = '0'; + } + else + abort (); +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } + } +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + else +# endif +# endif +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + { + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_double (arg, precision); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)precision - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + /* Produce the same number of exponent digits as + the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *p++ = '0'; +# endif + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else + abort (); +# endif + } + } + } +# endif + + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif + else + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int has_width; + size_t width; +#endif +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION + int has_precision; + size_t precision; +#endif +#if NEED_PRINTF_UNBOUNDED_PRECISION + int prec_ourselves; +#else +# define prec_ourselves 0 +#endif +#if NEED_PRINTF_FLAG_LEFTADJUST +# define pad_ourselves 1 +#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int pad_ourselves; +#else +# define pad_ourselves 0 +#endif + TCHAR_T *fbp; + unsigned int prefix_count; + int prefixes[2] IF_LINT (= { 0 }); + int orig_errno; +#if !USE_SNPRINTF + size_t tmp_length; + TCHAR_T tmpbuf[700]; + TCHAR_T *tmp; +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } +#endif + + /* Decide whether to handle the precision ourselves. */ +#if NEED_PRINTF_UNBOUNDED_PRECISION + switch (dp->conversion) + { + case 'd': case 'i': case 'u': + case 'o': + case 'x': case 'X': case 'p': + prec_ourselves = has_precision && (precision > 0); + break; + default: + prec_ourselves = 0; + break; + } +#endif + + /* Decide whether to perform the padding ourselves. */ +#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) + switch (dp->conversion) + { +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need + to perform the padding after this conversion. Functions + with unistdio extensions perform the padding based on + character count rather than element count. */ + case 'c': case 's': +# endif +# if NEED_PRINTF_FLAG_ZERO + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': +# endif + pad_ourselves = 1; + break; + default: + pad_ourselves = prec_ourselves; + break; + } +#endif + +#if !USE_SNPRINTF + /* Allocate a temporary buffer of sufficient size for calling + sprintf. */ + tmp_length = + MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, + flags, width, has_precision, precision, + pad_ourselves); + + if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (TCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } +#endif + + /* Construct the format string for calling snprintf or + sprintf. */ + fbp = buf; + *fbp++ = '%'; +#if NEED_PRINTF_FLAG_GROUPING + /* The underlying implementation doesn't support the ' flag. + Produce no grouping characters in this case; this is + acceptable because the grouping is locale dependent. */ +#else + if (flags & FLAG_GROUP) + *fbp++ = '\''; +#endif + if (flags & FLAG_LEFT) + *fbp++ = '-'; + if (flags & FLAG_SHOWSIGN) + *fbp++ = '+'; + if (flags & FLAG_SPACE) + *fbp++ = ' '; + if (flags & FLAG_ALT) + *fbp++ = '#'; +#if __GLIBC__ >= 2 && !defined __UCLIBC__ + if (flags & FLAG_LOCALIZED) + *fbp++ = 'I'; +#endif + if (!pad_ourselves) + { + if (flags & FLAG_ZERO) + *fbp++ = '0'; + if (dp->width_start != dp->width_end) + { + size_t n = dp->width_end - dp->width_start; + /* The width specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->width_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + if (!prec_ourselves) + { + if (dp->precision_start != dp->precision_end) + { + size_t n = dp->precision_end - dp->precision_start; + /* The precision specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->precision_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + + switch (type) + { +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + case TYPE_ULONGLONGINT: +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *fbp++ = 'I'; + *fbp++ = '6'; + *fbp++ = '4'; + break; +# else + *fbp++ = 'l'; + /*FALLTHROUGH*/ +# endif +#endif + case TYPE_LONGINT: + case TYPE_ULONGINT: +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: +#endif +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: +#endif + *fbp++ = 'l'; + break; + case TYPE_LONGDOUBLE: + *fbp++ = 'L'; + break; + default: + break; + } +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + *fbp = 'f'; + else +#endif + *fbp = dp->conversion; +#if USE_SNPRINTF +# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + fbp[1] = '%'; + fbp[2] = 'n'; + fbp[3] = '\0'; +# else + /* On glibc2 systems from glibc >= 2.3 - probably also older + ones - we know that snprintf's return value conforms to + ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and + gl_SNPRINTF_TRUNCATION_C99 pass. + Therefore we can avoid using %n in this situation. + On glibc2 systems from 2004-10-18 or newer, the use of %n + in format strings in writable memory may crash the program + (if compiled with _FORTIFY_SOURCE=2), so we should avoid it + in this situation. */ + /* On native Windows systems (such as mingw), we can avoid using + %n because: + - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, + snprintf does not write more than the specified number + of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes + '4', '5', '6' into buf, not '4', '5', '\0'.) + - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf + allows us to recognize the case of an insufficient + buffer size: it returns -1 in this case. + On native Windows systems (such as mingw) where the OS is + Windows Vista, the use of %n in format strings by default + crashes the program. See + and + + So we should avoid %n in this situation. */ + fbp[1] = '\0'; +# endif +#else + fbp[1] = '\0'; +#endif + + /* Construct the arguments for calling snprintf or sprintf. */ + prefix_count = 0; + if (!pad_ourselves && dp->width_arg_index != ARG_NONE) + { + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; + } + if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) + { + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; + } + +#if USE_SNPRINTF + /* The SNPRINTF result is appended after result[0..length]. + The latter is an array of DCHAR_T; SNPRINTF appends an + array of TCHAR_T to it. This is possible because + sizeof (TCHAR_T) divides sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). */ +# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) + /* Ensure that maxlen below will be >= 2. Needed on BeOS, + where an snprintf() with maxlen==1 acts like sprintf(). */ + ENSURE_ALLOCATION (xsum (length, + (2 + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR)); + /* Prepare checking whether snprintf returns the count + via %n. */ + *(TCHAR_T *) (result + length) = '\0'; +#endif + + orig_errno = errno; + + for (;;) + { + int count = -1; + +#if USE_SNPRINTF + int retcount = 0; + size_t maxlen = allocated - length; + /* SNPRINTF can fail if its second argument is + > INT_MAX. */ + if (maxlen > INT_MAX / TCHARS_PER_DCHAR) + maxlen = INT_MAX / TCHARS_PER_DCHAR; + maxlen = maxlen * TCHARS_PER_DCHAR; +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + arg, &count); \ + break; \ + case 1: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], arg, &count); \ + break; \ + case 2: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], prefixes[1], arg, \ + &count); \ + break; \ + default: \ + abort (); \ + } +#else +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + count = sprintf (tmp, buf, arg); \ + break; \ + case 1: \ + count = sprintf (tmp, buf, prefixes[0], arg); \ + break; \ + case 2: \ + count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ + arg); \ + break; \ + default: \ + abort (); \ + } +#endif + + errno = 0; + switch (type) + { + case TYPE_SCHAR: + { + int arg = a.arg[dp->arg_index].a.a_schar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UCHAR: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uchar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_SHORT: + { + int arg = a.arg[dp->arg_index].a.a_short; + SNPRINTF_BUF (arg); + } + break; + case TYPE_USHORT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_ushort; + SNPRINTF_BUF (arg); + } + break; + case TYPE_INT: + { + int arg = a.arg[dp->arg_index].a.a_int; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UINT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGINT: + { + long int arg = a.arg[dp->arg_index].a.a_longint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGINT: + { + unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + { + long long int arg = a.arg[dp->arg_index].a.a_longlongint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGLONGINT: + { + unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_DOUBLE: + { + double arg = a.arg[dp->arg_index].a.a_double; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGDOUBLE: + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + SNPRINTF_BUF (arg); + } + break; + case TYPE_CHAR: + { + int arg = a.arg[dp->arg_index].a.a_char; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + { + wint_t arg = a.arg[dp->arg_index].a.a_wide_char; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_STRING: + { + const char *arg = a.arg[dp->arg_index].a.a_string; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_POINTER: + { + void *arg = a.arg[dp->arg_index].a.a_pointer; + SNPRINTF_BUF (arg); + } + break; + default: + abort (); + } + +#if USE_SNPRINTF + /* Portability: Not all implementations of snprintf() + are ISO C 99 compliant. Determine the number of + bytes that snprintf() has produced or would have + produced. */ + if (count >= 0) + { + /* Verify that snprintf() has NUL-terminated its + result. */ + if (count < maxlen + && ((TCHAR_T *) (result + length)) [count] != '\0') + abort (); + /* Portability hack. */ + if (retcount > count) + count = retcount; + } + else + { + /* snprintf() doesn't understand the '%n' + directive. */ + if (fbp[1] != '\0') + { + /* Don't use the '%n' directive; instead, look + at the snprintf() return value. */ + fbp[1] = '\0'; + continue; + } + else + { + /* Look at the snprintf() return value. */ + if (retcount < 0) + { +# if !HAVE_SNPRINTF_RETVAL_C99 + /* HP-UX 10.20 snprintf() is doubly deficient: + It doesn't understand the '%n' directive, + *and* it returns -1 (rather than the length + that would have been required) when the + buffer is too small. + But a failure at this point can also come + from other reasons than a too small buffer, + such as an invalid wide string argument to + the %ls directive, or possibly an invalid + floating-point argument. */ + size_t tmp_length = + MAX_ROOM_NEEDED (&a, dp->arg_index, + dp->conversion, type, flags, + width, has_precision, + precision, pad_ourselves); + + if (maxlen < tmp_length) + { + /* Make more room. But try to do through + this reallocation only once. */ + size_t bigger_need = + xsum (length, + xsum (tmp_length, + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + /* And always grow proportionally. + (There may be several arguments, each + needing a little more room than the + previous one.) */ + size_t bigger_need2 = + xsum (xtimes (allocated, 2), 12); + if (bigger_need < bigger_need2) + bigger_need = bigger_need2; + ENSURE_ALLOCATION (bigger_need); + continue; + } +# endif + } + else + count = retcount; + } + } +#endif + + /* Attempt to handle failure. */ + if (count < 0) + { + /* SNPRINTF or sprintf failed. Save and use the errno + that it has set, if any. */ + int saved_errno = errno; + + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = + (saved_errno != 0 + ? saved_errno + : (dp->conversion == 'c' || dp->conversion == 's' + ? EILSEQ + : EINVAL)); + return NULL; + } + +#if USE_SNPRINTF + /* Handle overflow of the allocated buffer. + If such an overflow occurs, a C99 compliant snprintf() + returns a count >= maxlen. However, a non-compliant + snprintf() function returns only count = maxlen - 1. To + cover both cases, test whether count >= maxlen - 1. */ + if ((unsigned int) count + 1 >= maxlen) + { + /* If maxlen already has attained its allowed maximum, + allocating more memory will not increase maxlen. + Instead of looping, bail out. */ + if (maxlen == INT_MAX / TCHARS_PER_DCHAR) + goto overflow; + else + { + /* Need at least (count + 1) * sizeof (TCHAR_T) + bytes. (The +1 is for the trailing NUL.) + But ask for (count + 2) * sizeof (TCHAR_T) + bytes, so that in the next round, we likely get + maxlen > (unsigned int) count + 1 + and so we don't get here again. + And allocate proportionally, to avoid looping + eternally if snprintf() reports a too small + count. */ + size_t n = + xmax (xsum (length, + ((unsigned int) count + 2 + + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR), + xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + continue; + } + } +#endif + +#if NEED_PRINTF_UNBOUNDED_PRECISION + if (prec_ourselves) + { + /* Handle the precision. */ + TCHAR_T *prec_ptr = +# if USE_SNPRINTF + (TCHAR_T *) (result + length); +# else + tmp; +# endif + size_t prefix_count; + size_t move; + + prefix_count = 0; + /* Put the additional zeroes after the sign. */ + if (count >= 1 + && (*prec_ptr == '-' || *prec_ptr == '+' + || *prec_ptr == ' ')) + prefix_count = 1; + /* Put the additional zeroes after the 0x prefix if + (flags & FLAG_ALT) || (dp->conversion == 'p'). */ + else if (count >= 2 + && prec_ptr[0] == '0' + && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) + prefix_count = 2; + + move = count - prefix_count; + if (precision > move) + { + /* Insert zeroes. */ + size_t insert = precision - move; + TCHAR_T *prec_end; + +# if USE_SNPRINTF + size_t n = + xsum (length, + (count + insert + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + ENSURE_ALLOCATION (n); + length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + prec_ptr = (TCHAR_T *) (result + length); +# endif + + prec_end = prec_ptr + count; + prec_ptr += prefix_count; + + while (prec_end > prec_ptr) + { + prec_end--; + prec_end[insert] = prec_end[0]; + } + + prec_end += insert; + do + *--prec_end = '0'; + while (prec_end > prec_ptr); + + count += insert; + } + } +#endif + +#if !USE_SNPRINTF + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); +#endif + +#if !DCHAR_IS_TCHAR + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + if (dp->conversion == 'c' || dp->conversion == 's') + { + /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING + TYPE_WIDE_STRING. + The result string is not certainly ASCII. */ + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; + /* This code assumes that TCHAR_T is 'char'. */ + verify (sizeof (TCHAR_T) == 1); +# if USE_SNPRINTF + tmpsrc = (TCHAR_T *) (result + length); +# else + tmpsrc = tmp; +# endif + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, count, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + count = tmpdst_len; + } + else + { + /* The result string is ASCII. + Simple 1:1 conversion. */ +# if USE_SNPRINTF + /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a + no-op conversion, in-place on the array starting + at (result + length). */ + if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) +# endif + { + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t n; + +# if USE_SNPRINTF + if (result == resultbuf) + { + tmpsrc = (TCHAR_T *) (result + length); + /* ENSURE_ALLOCATION will not move tmpsrc + (because it's part of resultbuf). */ + ENSURE_ALLOCATION (xsum (length, count)); + } + else + { + /* ENSURE_ALLOCATION will move the array + (because it uses realloc(). */ + ENSURE_ALLOCATION (xsum (length, count)); + tmpsrc = (TCHAR_T *) (result + length); + } +# else + tmpsrc = tmp; + ENSURE_ALLOCATION (xsum (length, count)); +# endif + tmpdst = result + length; + /* Copy backwards, because of overlapping. */ + tmpsrc += count; + tmpdst += count; + for (n = count; n > 0; n--) + *--tmpdst = (unsigned char) *--tmpsrc; + } + } +#endif + +#if DCHAR_IS_TCHAR && !USE_SNPRINTF + /* Make room for the result. */ + if (count > allocated - length) + { + /* Need at least count elements. But allocate + proportionally. */ + size_t n = + xmax (xsum (length, count), xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + } +#endif + + /* Here count <= allocated - length. */ + + /* Perform padding. */ +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + if (pad_ourselves && has_width) + { + size_t w; +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, count); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = count; +# endif + if (w < width) + { + size_t pad = width - w; + + /* Make room for the result. */ + if (xsum (count, pad) > allocated - length) + { + /* Need at least count + pad elements. But + allocate proportionally. */ + size_t n = + xmax (xsum3 (length, count, pad), + xtimes (allocated, 2)); + +# if USE_SNPRINTF + length += count; + ENSURE_ALLOCATION (n); + length -= count; +# else + ENSURE_ALLOCATION (n); +# endif + } + /* Here count + pad <= allocated - length. */ + + { +# if !DCHAR_IS_TCHAR || USE_SNPRINTF + DCHAR_T * const rp = result + length; +# else + DCHAR_T * const rp = tmp; +# endif + DCHAR_T *p = rp + count; + DCHAR_T *end = p + pad; + DCHAR_T *pad_ptr; +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + if (dp->conversion == 'c' + || dp->conversion == 's') + /* No zero-padding for string directives. */ + pad_ptr = NULL; + else +# endif + { + pad_ptr = (*rp == '-' ? rp + 1 : rp); + /* No zero-padding of "inf" and "nan". */ + if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') + || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) + pad_ptr = NULL; + } + /* The generated string now extends from rp to p, + with the zero padding insertion point being at + pad_ptr. */ + + count = count + pad; /* = end - rp */ + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > rp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + } + } + } +#endif + + /* Here still count <= allocated - length. */ + +#if !DCHAR_IS_TCHAR || USE_SNPRINTF + /* The snprintf() result did fit. */ +#else + /* Append the sprintf() result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); +#endif +#if !USE_SNPRINTF + if (tmp != tmpbuf) + free (tmp); +#endif + +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + { + /* Convert the %f result to upper case for %F. */ + DCHAR_T *rp = result + length; + size_t rc; + for (rc = count; rc > 0; rc--, rp++) + if (*rp >= 'a' && *rp <= 'z') + *rp = *rp - 'a' + 'A'; + } +#endif + + length += count; + break; + } + errno = orig_errno; +#undef pad_ourselves +#undef prec_ourselves + } + } + } + + /* Add the final NUL. */ + ENSURE_ALLOCATION (xsum (length, 1)); + result[length] = '\0'; + + if (result != resultbuf && length + 1 < allocated) + { + /* Shrink the allocated memory if possible. */ + DCHAR_T *memory; + + memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); + if (memory != NULL) + result = memory; + } + + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + *lengthp = length; + /* Note that we can produce a big string of a length > INT_MAX. POSIX + says that snprintf() fails with errno = EOVERFLOW in this case, but + that's only because snprintf() returns an 'int'. This function does + not have this limitation. */ + return result; + +#if USE_SNPRINTF + overflow: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EOVERFLOW; + return NULL; +#endif + + out_of_memory: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + out_of_memory_1: + CLEANUP (); + errno = ENOMEM; + return NULL; + } +} + +#undef MAX_ROOM_NEEDED +#undef TCHARS_PER_DCHAR +#undef SNPRINTF +#undef USE_SNPRINTF +#undef DCHAR_SET +#undef DCHAR_CPY +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef DCHAR_IS_TCHAR +#undef TCHAR_T +#undef DCHAR_T +#undef FCHAR_T +#undef VASNPRINTF diff --git a/grub-core/gnulib/vasnprintf.h b/grub-core/gnulib/vasnprintf.h new file mode 100644 index 000000000..7658f505e --- /dev/null +++ b/grub-core/gnulib/vasnprintf.h @@ -0,0 +1,79 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 2002-2004, 2007-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifndef _VASNPRINTF_H +#define _VASNPRINTF_H + +/* Get va_list. */ +#include + +/* Get size_t. */ +#include + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(). + You can pass a preallocated buffer for the result in RESULTBUF and its + size in *LENGTHP; otherwise you pass RESULTBUF = NULL. + If successful, return the address of the string (this may be = RESULTBUF + if no dynamic memory allocation was necessary) and set *LENGTHP to the + number of resulting bytes, excluding the trailing NUL. Upon error, set + errno and return NULL. + + When dynamic memory allocation occurs, the preallocated buffer is left + alone (with possibly modified contents). This makes it possible to use + a statically allocated or stack-allocated buffer, like this: + + char buf[100]; + size_t len = sizeof (buf); + char *output = vasnprintf (buf, &len, format, args); + if (output == NULL) + ... error handling ...; + else + { + ... use the output string ...; + if (output != buf) + free (output); + } + */ +#if REPLACE_VASNPRINTF +# define asnprintf rpl_asnprintf +# define vasnprintf rpl_vasnprintf +#endif +extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); +extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); + +#ifdef __cplusplus +} +#endif + +#endif /* _VASNPRINTF_H */ diff --git a/grub-core/gnulib/verify.h b/grub-core/gnulib/verify.h new file mode 100644 index 000000000..cb8e90b54 --- /dev/null +++ b/grub-core/gnulib/verify.h @@ -0,0 +1,245 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005-2006, 2009-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_VERIFY_H +# define _GL_VERIFY_H + + +/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. + This is supported by GCC 4.6.0 and later, in C mode, and its use + here generates easier-to-read diagnostics when verify (R) fails. + + Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. + This will likely be supported by future GCC versions, in C++ mode. + + Use this only with GCC. If we were willing to slow 'configure' + down we could also use it with other compilers, but since this + affects only the quality of diagnostics, why bother? */ +# if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus +# define _GL_HAVE__STATIC_ASSERT 1 +# endif +/* The condition (99 < __GNUC__) is temporary, until we know about the + first G++ release that supports static_assert. */ +# if (99 < __GNUC__) && defined __cplusplus +# define _GL_HAVE_STATIC_ASSERT 1 +# endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + If _Static_assert works, verify (R) uses it directly. Similarly, + _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct + that is an operand of sizeof. + + The code below uses several ideas for C++ compilers, and for C + compilers that do not support _Static_assert: + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: W; + }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct _gl_verify_type will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define _GL_CONCAT0(x, y) x##y + #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) + extern struct {...} * _GL_CONCAT (dummy, __LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. (The GCC __COUNTER__ + macro solves this problem, but is not portable.) + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct _gl_verify_type {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct _gl_verify_type {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * GCC warns about duplicate declarations of the dummy function if + -Wredundant-decls is used. GCC 4.3 and later have a builtin + __COUNTER__ macro that can let us generate unique identifiers for + each dummy function, to suppress this warning. + + * This implementation exploits the fact that older versions of GCC, + which do not support _Static_assert, also do not warn about the + last declaration mentioned above. + + * GCC warns if -Wnested-externs is enabled and verify() is used + within a function body; but inside a function, you can always + arrange to use verify_expr() instead. + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + +/* Concatenate two preprocessor tokens. */ +# define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) +# define _GL_CONCAT0(x, y) x##y + +/* _GL_COUNTER is an integer, preferably one that changes each time we + use it. Use __COUNTER__ if it works, falling back on __LINE__ + otherwise. __LINE__ isn't perfect, but it's better than a + constant. */ +# if defined __COUNTER__ && __COUNTER__ != __COUNTER__ +# define _GL_COUNTER __COUNTER__ +# else +# define _GL_COUNTER __LINE__ +# endif + +/* Generate a symbol with the given prefix, making it unique if + possible. */ +# define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) + +/* Verify requirement R at compile-time, as an integer constant expression + that returns 1. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. */ + +# define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ + (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) + +# ifdef __cplusplus +# if !GNULIB_defined_struct__gl_verify_type +template + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: w; + }; +# define GNULIB_defined_struct__gl_verify_type 1 +# endif +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + _gl_verify_type<(R) ? 1 : -1> +# elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { \ + _Static_assert (R, DIAGNOSTIC); \ + int _gl_dummy; \ + } +# else +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } +# endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. + + Unfortunately, unlike C11, this implementation must appear as an + ordinary declaration, and cannot appear inside struct { ... }. */ + +# ifdef _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY _Static_assert +# else +# define _GL_VERIFY(R, DIAGNOSTIC) \ + extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ + [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] +# endif + +/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ +# ifdef _GL_STATIC_ASSERT_H +# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert +# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) +# endif +# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert +# define static_assert _Static_assert /* C11 requires this #define. */ +# endif +# endif + +/* @assert.h omit start@ */ + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + There are two macros, since no single macro can be used in all + contexts in C. verify_true (R) is for scalar contexts, including + integer constant expression contexts. verify (R) is for declaration + contexts, e.g., the top level. */ + +/* Verify requirement R at compile-time, as an integer constant expression. + Return 1. This is equivalent to verify_expr (R, 1). + + verify_true is obsolescent; please use verify_expr instead. */ + +# define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") + +/* Verify requirement R at compile-time. Return the value of the + expression E. */ + +# define verify_expr(R, E) \ + (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. */ + +# define verify(R) _GL_VERIFY (R, "verify (" #R ")") + +/* @assert.h omit end@ */ + +#endif diff --git a/grub-core/gnulib/vsnprintf.c b/grub-core/gnulib/vsnprintf.c new file mode 100644 index 000000000..7d4dfbed9 --- /dev/null +++ b/grub-core/gnulib/vsnprintf.c @@ -0,0 +1,70 @@ +/* Formatted output to strings. + Copyright (C) 2004, 2006-2013 Free Software Foundation, Inc. + Written by Simon Josefsson and Yoann Vandoorselaere . + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* Specification. */ +#include + +#include +#include +#include +#include +#include + +#include "vasnprintf.h" + +/* Print formatted output to string STR. Similar to vsprintf, but + additional length SIZE limit how much is written into STR. Returns + string length of formatted string (which may be larger than SIZE). + STR may be NULL, in which case nothing will be written. On error, + return a negative value. */ +int +vsnprintf (char *str, size_t size, const char *format, va_list args) +{ + char *output; + size_t len; + size_t lenbuf = size; + + output = vasnprintf (str, &lenbuf, format, args); + len = lenbuf; + + if (!output) + return -1; + + if (output != str) + { + if (size) + { + size_t pruned_len = (len < size ? len : size - 1); + memcpy (str, output, pruned_len); + str[pruned_len] = '\0'; + } + + free (output); + } + + if (len > INT_MAX) + { + errno = EOVERFLOW; + return -1; + } + + return len; +} diff --git a/grub-core/gnulib/wchar.in.h b/grub-core/gnulib/wchar.in.h new file mode 100644 index 000000000..b6e436279 --- /dev/null +++ b/grub-core/gnulib/wchar.in.h @@ -0,0 +1,1028 @@ +/* A substitute for ISO C99 , for platforms that have issues. + + Copyright (C) 2007-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 for platforms that have issues. + * + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H +/* Special invocation convention: + - Inside glibc and uClibc header files. + - On HP-UX 11.00 we have a sequence of nested includes + -> -> , and the latter includes , + once indirectly -> -> -> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's . + - On IRIX 6.5, similarly, we have an include -> , and + the latter includes . But here, we have no way to detect whether + is completely included or is still being included. */ + +#@INCLUDE_NEXT@ @NEXT_WCHAR_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +#if @HAVE_FEATURES_H@ +# include /* for __GLIBC__ */ +#endif + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . + In some builds of uClibc, is nonexistent and wchar_t is defined + by . + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include +#endif +#ifndef __GLIBC__ +# include +# include +#endif + +/* Include the original if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCHAR_H@ +# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _@GUARD_PREFIX@_WCHAR_H +#define _@GUARD_PREFIX@_WCHAR_H + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* MSVC defines wint_t as 'unsigned short' in . + This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be + "unchanged by default argument promotions". Override it. */ +# if defined _MSC_VER +# if !GNULIB_defined_wint_t +# include +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. */ +#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ +# if !GNULIB_defined_mbstate_t +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# define GNULIB_defined_mbstate_t 1 +# endif +#endif + + +/* Convert a single-byte character to a wide character. */ +#if @GNULIB_BTOWC@ +# if @REPLACE_BTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef btowc +# define btowc rpl_btowc +# endif +_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); +# else +# if !@HAVE_BTOWC@ +_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); +# endif +_GL_CXXALIASWARN (btowc); +#elif defined GNULIB_POSIXCHECK +# undef btowc +# if HAVE_RAW_DECL_BTOWC +_GL_WARN_ON_USE (btowc, "btowc is unportable - " + "use gnulib module btowc for portability"); +# endif +#endif + + +/* Convert a wide character to a single-byte character. */ +#if @GNULIB_WCTOB@ +# if @REPLACE_WCTOB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctob +# define wctob rpl_wctob +# endif +_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); +# else +# if !defined wctob && !@HAVE_DECL_WCTOB@ +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); +# endif +_GL_CXXALIASWARN (wctob); +#elif defined GNULIB_POSIXCHECK +# undef wctob +# if HAVE_RAW_DECL_WCTOB +_GL_WARN_ON_USE (wctob, "wctob is unportable - " + "use gnulib module wctob for portability"); +# endif +#endif + + +/* Test whether *PS is in the initial state. */ +#if @GNULIB_MBSINIT@ +# if @REPLACE_MBSINIT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); +# else +# if !@HAVE_MBSINIT@ +_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsinit); +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# if HAVE_RAW_DECL_MBSINIT +_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " + "use gnulib module mbsinit for portability"); +# endif +#endif + + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBRTOWC@ +# if @REPLACE_MBRTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +_GL_FUNCDECL_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# else +# if !@HAVE_MBRTOWC@ +_GL_FUNCDECL_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrtowc); +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# if HAVE_RAW_DECL_MBRTOWC +_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " + "use gnulib module mbrtowc for portability"); +# endif +#endif + + +/* Recognize a multibyte character. */ +#if @GNULIB_MBRLEN@ +# if @REPLACE_MBRLEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# else +# if !@HAVE_MBRLEN@ +_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrlen); +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# if HAVE_RAW_DECL_MBRLEN +_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " + "use gnulib module mbrlen for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSRTOWCS@ +# if @REPLACE_MBSRTOWCS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +_GL_FUNCDECL_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_MBSRTOWCS@ +_GL_FUNCDECL_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# if HAVE_RAW_DECL_MBSRTOWCS +_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " + "use gnulib module mbsrtowcs for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSNRTOWCS@ +# if @REPLACE_MBSNRTOWCS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_MBSNRTOWCS@ +_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsnrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# if HAVE_RAW_DECL_MBSNRTOWCS +_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " + "use gnulib module mbsnrtowcs for portability"); +# endif +#endif + + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCRTOMB@ +# if @REPLACE_WCRTOMB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# else +# if !@HAVE_WCRTOMB@ +_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcrtomb); +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# if HAVE_RAW_DECL_WCRTOMB +_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " + "use gnulib module wcrtomb for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSRTOMBS@ +# if @REPLACE_WCSRTOMBS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +_GL_FUNCDECL_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_WCSRTOMBS@ +_GL_FUNCDECL_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# if HAVE_RAW_DECL_WCSRTOMBS +_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " + "use gnulib module wcsrtombs for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSNRTOMBS@ +# if @REPLACE_WCSNRTOMBS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsnrtombs +# define wcsnrtombs rpl_wcsnrtombs +# endif +_GL_FUNCDECL_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_WCSNRTOMBS@ +_GL_FUNCDECL_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsnrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# if HAVE_RAW_DECL_WCSNRTOMBS +_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " + "use gnulib module wcsnrtombs for portability"); +# endif +#endif + + +/* Return the number of screen columns needed for WC. */ +#if @GNULIB_WCWIDTH@ +# if @REPLACE_WCWIDTH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcwidth +# define wcwidth rpl_wcwidth +# endif +_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); +# else +# if !@HAVE_DECL_WCWIDTH@ +/* wcwidth exists but is not declared. */ +_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); +# endif +_GL_CXXALIASWARN (wcwidth); +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# if HAVE_RAW_DECL_WCWIDTH +_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " + "use gnulib module wcwidth for portability"); +# endif +#endif + + +/* Search N wide characters of S for C. */ +#if @GNULIB_WMEMCHR@ +# if !@HAVE_WMEMCHR@ +_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); + wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wmemchr, + wchar_t *, (const wchar_t *, wchar_t, size_t), + const wchar_t *, (const wchar_t *, wchar_t, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, + (const wchar_t *s, wchar_t c, size_t n)); +# else +_GL_CXXALIASWARN (wmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemchr +# if HAVE_RAW_DECL_WMEMCHR +_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " + "use gnulib module wmemchr for portability"); +# endif +#endif + + +/* Compare N wide characters of S1 and S2. */ +#if @GNULIB_WMEMCMP@ +# if !@HAVE_WMEMCMP@ +_GL_FUNCDECL_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wmemcmp); +#elif defined GNULIB_POSIXCHECK +# undef wmemcmp +# if HAVE_RAW_DECL_WMEMCMP +_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " + "use gnulib module wmemcmp for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. */ +#if @GNULIB_WMEMCPY@ +# if !@HAVE_WMEMCPY@ +_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemcpy); +#elif defined GNULIB_POSIXCHECK +# undef wmemcpy +# if HAVE_RAW_DECL_WMEMCPY +_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " + "use gnulib module wmemcpy for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. */ +#if @GNULIB_WMEMMOVE@ +# if !@HAVE_WMEMMOVE@ +_GL_FUNCDECL_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemmove); +#elif defined GNULIB_POSIXCHECK +# undef wmemmove +# if HAVE_RAW_DECL_WMEMMOVE +_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " + "use gnulib module wmemmove for portability"); +# endif +#endif + + +/* Set N wide characters of S to C. */ +#if @GNULIB_WMEMSET@ +# if !@HAVE_WMEMSET@ +_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN (wmemset); +#elif defined GNULIB_POSIXCHECK +# undef wmemset +# if HAVE_RAW_DECL_WMEMSET +_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " + "use gnulib module wmemset for portability"); +# endif +#endif + + +/* Return the number of wide characters in S. */ +#if @GNULIB_WCSLEN@ +# if !@HAVE_WCSLEN@ +_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +_GL_CXXALIASWARN (wcslen); +#elif defined GNULIB_POSIXCHECK +# undef wcslen +# if HAVE_RAW_DECL_WCSLEN +_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " + "use gnulib module wcslen for portability"); +# endif +#endif + + +/* Return the number of wide characters in S, but at most MAXLEN. */ +#if @GNULIB_WCSNLEN@ +# if !@HAVE_WCSNLEN@ +_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); +_GL_CXXALIASWARN (wcsnlen); +#elif defined GNULIB_POSIXCHECK +# undef wcsnlen +# if HAVE_RAW_DECL_WCSNLEN +_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " + "use gnulib module wcsnlen for portability"); +# endif +#endif + + +/* Copy SRC to DEST. */ +#if @GNULIB_WCSCPY@ +# if !@HAVE_WCSCPY@ +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscpy); +#elif defined GNULIB_POSIXCHECK +# undef wcscpy +# if HAVE_RAW_DECL_WCSCPY +_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " + "use gnulib module wcscpy for portability"); +# endif +#endif + + +/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ +#if @GNULIB_WCPCPY@ +# if !@HAVE_WCPCPY@ +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcpcpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpcpy +# if HAVE_RAW_DECL_WCPCPY +_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " + "use gnulib module wcpcpy for portability"); +# endif +#endif + + +/* Copy no more than N wide characters of SRC to DEST. */ +#if @GNULIB_WCSNCPY@ +# if !@HAVE_WCSNCPY@ +_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcsncpy +# if HAVE_RAW_DECL_WCSNCPY +_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " + "use gnulib module wcsncpy for portability"); +# endif +#endif + + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +#if @GNULIB_WCPNCPY@ +# if !@HAVE_WCPNCPY@ +_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcpncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpncpy +# if HAVE_RAW_DECL_WCPNCPY +_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " + "use gnulib module wcpncpy for portability"); +# endif +#endif + + +/* Append SRC onto DEST. */ +#if @GNULIB_WCSCAT@ +# if !@HAVE_WCSCAT@ +_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscat); +#elif defined GNULIB_POSIXCHECK +# undef wcscat +# if HAVE_RAW_DECL_WCSCAT +_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " + "use gnulib module wcscat for portability"); +# endif +#endif + + +/* Append no more than N wide characters of SRC onto DEST. */ +#if @GNULIB_WCSNCAT@ +# if !@HAVE_WCSNCAT@ +_GL_FUNCDECL_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncat); +#elif defined GNULIB_POSIXCHECK +# undef wcsncat +# if HAVE_RAW_DECL_WCSNCAT +_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " + "use gnulib module wcsncat for portability"); +# endif +#endif + + +/* Compare S1 and S2. */ +#if @GNULIB_WCSCMP@ +# if !@HAVE_WCSCMP@ +_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscmp +# if HAVE_RAW_DECL_WCSCMP +_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " + "use gnulib module wcscmp for portability"); +# endif +#endif + + +/* Compare no more than N wide characters of S1 and S2. */ +#if @GNULIB_WCSNCMP@ +# if !@HAVE_WCSNCMP@ +_GL_FUNCDECL_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncmp +# if HAVE_RAW_DECL_WCSNCMP +_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " + "use gnulib module wcsncmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, ignoring case. */ +#if @GNULIB_WCSCASECMP@ +# if !@HAVE_WCSCASECMP@ +_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscasecmp +# if HAVE_RAW_DECL_WCSCASECMP +_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " + "use gnulib module wcscasecmp for portability"); +# endif +#endif + + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +#if @GNULIB_WCSNCASECMP@ +# if !@HAVE_WCSNCASECMP@ +_GL_FUNCDECL_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncasecmp +# if HAVE_RAW_DECL_WCSNCASECMP +_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " + "use gnulib module wcsncasecmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE + category of the current locale. */ +#if @GNULIB_WCSCOLL@ +# if !@HAVE_WCSCOLL@ +_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscoll); +#elif defined GNULIB_POSIXCHECK +# undef wcscoll +# if HAVE_RAW_DECL_WCSCOLL +_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " + "use gnulib module wcscoll for portability"); +# endif +#endif + + +/* Transform S2 into array pointed to by S1 such that if wcscmp is applied + to two transformed strings the result is the as applying 'wcscoll' to the + original strings. */ +#if @GNULIB_WCSXFRM@ +# if !@HAVE_WCSXFRM@ +_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsxfrm); +#elif defined GNULIB_POSIXCHECK +# undef wcsxfrm +# if HAVE_RAW_DECL_WCSXFRM +_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " + "use gnulib module wcsxfrm for portability"); +# endif +#endif + + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_WCSDUP@ +# if !@HAVE_WCSDUP@ +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +_GL_CXXALIASWARN (wcsdup); +#elif defined GNULIB_POSIXCHECK +# undef wcsdup +# if HAVE_RAW_DECL_WCSDUP +_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " + "use gnulib module wcsdup for portability"); +# endif +#endif + + +/* Find the first occurrence of WC in WCS. */ +#if @GNULIB_WCSCHR@ +# if !@HAVE_WCSCHR@ +_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcschr (const wchar_t *, wchar_t); + wchar_t * std::wcschr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcschr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcschr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcschr +# if HAVE_RAW_DECL_WCSCHR +_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " + "use gnulib module wcschr for portability"); +# endif +#endif + + +/* Find the last occurrence of WC in WCS. */ +#if @GNULIB_WCSRCHR@ +# if !@HAVE_WCSRCHR@ +_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); + wchar_t * std::wcsrchr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsrchr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcsrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrchr +# if HAVE_RAW_DECL_WCSRCHR +_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " + "use gnulib module wcsrchr for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters not in REJECT. */ +#if @GNULIB_WCSCSPN@ +# if !@HAVE_WCSCSPN@ +_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +_GL_CXXALIASWARN (wcscspn); +#elif defined GNULIB_POSIXCHECK +# undef wcscspn +# if HAVE_RAW_DECL_WCSCSPN +_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " + "use gnulib module wcscspn for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters in ACCEPT. */ +#if @GNULIB_WCSSPN@ +# if !@HAVE_WCSSPN@ +_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN (wcsspn); +#elif defined GNULIB_POSIXCHECK +# undef wcsspn +# if HAVE_RAW_DECL_WCSSPN +_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " + "use gnulib module wcsspn for portability"); +# endif +#endif + + +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#if @GNULIB_WCSPBRK@ +# if !@HAVE_WCSPBRK@ +_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, + (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); + wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcspbrk, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, + (wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, + (const wchar_t *wcs, const wchar_t *accept)); +# else +_GL_CXXALIASWARN (wcspbrk); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcspbrk +# if HAVE_RAW_DECL_WCSPBRK +_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " + "use gnulib module wcspbrk for portability"); +# endif +#endif + + +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_WCSSTR@ +# if !@HAVE_WCSSTR@ +_GL_FUNCDECL_SYS (wcsstr, wchar_t *, + (const wchar_t *haystack, const wchar_t *needle) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); + wchar_t * std::wcsstr (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsstr, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsstr, wchar_t *, + (wchar_t *haystack, const wchar_t *needle)); +_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, + (const wchar_t *haystack, const wchar_t *needle)); +# else +_GL_CXXALIASWARN (wcsstr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsstr +# if HAVE_RAW_DECL_WCSSTR +_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " + "use gnulib module wcsstr for portability"); +# endif +#endif + + +/* Divide WCS into tokens separated by characters in DELIM. */ +#if @GNULIB_WCSTOK@ +# if !@HAVE_WCSTOK@ +_GL_FUNCDECL_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +# endif +_GL_CXXALIAS_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +_GL_CXXALIASWARN (wcstok); +#elif defined GNULIB_POSIXCHECK +# undef wcstok +# if HAVE_RAW_DECL_WCSTOK +_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " + "use gnulib module wcstok for portability"); +# endif +#endif + + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +#if @GNULIB_WCSWIDTH@ +# if @REPLACE_WCSWIDTH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcswidth +# define wcswidth rpl_wcswidth +# endif +_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); +# else +# if !@HAVE_WCSWIDTH@ +_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); +# endif +_GL_CXXALIASWARN (wcswidth); +#elif defined GNULIB_POSIXCHECK +# undef wcswidth +# if HAVE_RAW_DECL_WCSWIDTH +_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " + "use gnulib module wcswidth for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_WCHAR_H */ +#endif /* _@GUARD_PREFIX@_WCHAR_H */ +#endif diff --git a/grub-core/gnulib/wcrtomb.c b/grub-core/gnulib/wcrtomb.c new file mode 100644 index 000000000..da42809bc --- /dev/null +++ b/grub-core/gnulib/wcrtomb.c @@ -0,0 +1,53 @@ +/* Convert wide character to multibyte character. + Copyright (C) 2008-2013 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + + +size_t +wcrtomb (char *s, wchar_t wc, mbstate_t *ps) +{ + /* This implementation of wcrtomb on top of wctomb() supports only + stateless encodings. ps must be in the initial state. */ + if (ps != NULL && !mbsinit (ps)) + { + errno = EINVAL; + return (size_t)(-1); + } + + if (s == NULL) + /* We know the NUL wide character corresponds to the NUL character. */ + return 1; + else + { + int ret = wctomb (s, wc); + + if (ret >= 0) + return ret; + else + { + errno = EILSEQ; + return (size_t)(-1); + } + } +} diff --git a/grub-core/gnulib/wctype-h.c b/grub-core/gnulib/wctype-h.c new file mode 100644 index 000000000..bb5f847e3 --- /dev/null +++ b/grub-core/gnulib/wctype-h.c @@ -0,0 +1,4 @@ +/* Normally this would be wctype.c, but that name's already taken. */ +#include +#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE +#include "wctype.h" diff --git a/grub-core/gnulib/wctype.in.h b/grub-core/gnulib/wctype.in.h new file mode 100644 index 000000000..0cd02d5a3 --- /dev/null +++ b/grub-core/gnulib/wctype.in.h @@ -0,0 +1,504 @@ +/* A substitute for ISO C99 , for platforms that lack it. + + Copyright (C) 2006-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +/* Written by Bruno Haible and Paul Eggert. */ + +/* + * ISO C 99 for platforms that lack it. + * + * + * iswctype, towctrans, towlower, towupper, wctrans, wctype, + * wctrans_t, and wctype_t are not yet implemented. + */ + +#ifndef _@GUARD_PREFIX@_WCTYPE_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if @HAVE_WINT_T@ +/* Solaris 2.5 has a bug: must be included before . + Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +# include +# include +# include +# include +#endif + +/* Include the original if it exists. + BeOS 5 has the functions but no . */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCTYPE_H@ +# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ +#endif + +#ifndef _@GUARD_PREFIX@_WCTYPE_H +#define _@GUARD_PREFIX@_WCTYPE_H + +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_WCTYPE_INLINE +# define _GL_WCTYPE_INLINE _GL_INLINE +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Solaris 2.6 includes which includes which + #defines a number of identifiers in the application namespace. Revert + these #defines. */ +#ifdef __sun +# undef multibyte +# undef eucw1 +# undef eucw2 +# undef eucw3 +# undef scrw1 +# undef scrw2 +# undef scrw3 +#endif + +/* Define wint_t and WEOF. (Also done in wchar.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* MSVC defines wint_t as 'unsigned short' in . + This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be + "unchanged by default argument promotions". Override it. */ +# if defined _MSC_VER +# if !GNULIB_defined_wint_t +# include +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +#if !GNULIB_defined_wctype_functions + +/* FreeBSD 4.4 to 4.11 has but lacks the functions. + Linux libc5 has and the functions but they are broken. + Assume all 11 functions (all isw* except iswblank) are implemented the + same way, or not at all. */ +# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ + +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit +# undef towlower +# undef towupper + +/* Linux libc5 has and the functions but they are broken. */ +# if @REPLACE_ISWCNTRL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# endif +# endif +# if @REPLACE_TOWLOWER@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# define towupper rpl_towupper +# endif +# endif + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswalnum +# else +iswalnum +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswalpha +# else +iswalpha +# endif + (wint_t wc) +{ + return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswblank +# else +iswblank +# endif + (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswcntrl +# else +iswcntrl +# endif + (wint_t wc) +{ + return (wc & ~0x1f) == 0 || wc == 0x7f; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswdigit +# else +iswdigit +# endif + (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswgraph +# else +iswgraph +# endif + (wint_t wc) +{ + return wc >= '!' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswlower +# else +iswlower +# endif + (wint_t wc) +{ + return wc >= 'a' && wc <= 'z'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswprint +# else +iswprint +# endif + (wint_t wc) +{ + return wc >= ' ' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswpunct +# else +iswpunct +# endif + (wint_t wc) +{ + return (wc >= '!' && wc <= '~' + && !((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswspace +# else +iswspace +# endif + (wint_t wc) +{ + return (wc == ' ' || wc == '\t' + || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswupper +# else +iswupper +# endif + (wint_t wc) +{ + return wc >= 'A' && wc <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswxdigit +# else +iswxdigit +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); +} + +_GL_WCTYPE_INLINE wint_t +# if @REPLACE_TOWLOWER@ +rpl_towlower +# else +towlower +# endif + (wint_t wc) +{ + return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); +} + +_GL_WCTYPE_INLINE wint_t +# if @REPLACE_TOWLOWER@ +rpl_towupper +# else +towupper +# endif + (wint_t wc) +{ + return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); +} + +# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) +/* Only the iswblank function is missing. */ + +# if @REPLACE_ISWBLANK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswblank rpl_iswblank +# endif +_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); +# else +_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); +# endif + +# endif + +# if defined __MINGW32__ + +/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. + The functions towlower and towupper are implemented in the MSVCRT library + to take a wchar_t argument and return a wchar_t result. mingw declares + these functions to take a wint_t argument and return a wint_t result. + This means that: + 1. When the user passes an argument outside the range 0x0000..0xFFFF, the + function will look only at the lower 16 bits. This is allowed according + to POSIX. + 2. The return value is returned in the lower 16 bits of the result register. + The upper 16 bits are random: whatever happened to be in that part of the + result register. We need to fix this by adding a zero-extend from + wchar_t to wint_t after the call. */ + +_GL_WCTYPE_INLINE wint_t +rpl_towlower (wint_t wc) +{ + return (wint_t) (wchar_t) towlower (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# endif + +_GL_WCTYPE_INLINE wint_t +rpl_towupper (wint_t wc) +{ + return (wint_t) (wchar_t) towupper (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towupper rpl_towupper +# endif + +# endif /* __MINGW32__ */ + +# define GNULIB_defined_wctype_functions 1 +#endif + +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); +#endif +_GL_CXXALIASWARN (iswalnum); +_GL_CXXALIASWARN (iswalpha); +_GL_CXXALIASWARN (iswcntrl); +_GL_CXXALIASWARN (iswdigit); +_GL_CXXALIASWARN (iswgraph); +_GL_CXXALIASWARN (iswlower); +_GL_CXXALIASWARN (iswprint); +_GL_CXXALIASWARN (iswpunct); +_GL_CXXALIASWARN (iswspace); +_GL_CXXALIASWARN (iswupper); +_GL_CXXALIASWARN (iswxdigit); + +#if @GNULIB_ISWBLANK@ +# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ +_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); +# else +_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); +# endif +_GL_CXXALIASWARN (iswblank); +#endif + +#if !@HAVE_WCTYPE_T@ +# if !GNULIB_defined_wctype_t +typedef void * wctype_t; +# define GNULIB_defined_wctype_t 1 +# endif +#endif + +/* Get a descriptor for a wide character property. */ +#if @GNULIB_WCTYPE@ +# if !@HAVE_WCTYPE_T@ +_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); +# endif +_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); +_GL_CXXALIASWARN (wctype); +#elif defined GNULIB_POSIXCHECK +# undef wctype +# if HAVE_RAW_DECL_WCTYPE +_GL_WARN_ON_USE (wctype, "wctype is unportable - " + "use gnulib module wctype for portability"); +# endif +#endif + +/* Test whether a wide character has a given property. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctype() function. */ +#if @GNULIB_ISWCTYPE@ +# if !@HAVE_WCTYPE_T@ +_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +# endif +_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +_GL_CXXALIASWARN (iswctype); +#elif defined GNULIB_POSIXCHECK +# undef iswctype +# if HAVE_RAW_DECL_ISWCTYPE +_GL_WARN_ON_USE (iswctype, "iswctype is unportable - " + "use gnulib module iswctype for portability"); +# endif +#endif + +#if @REPLACE_TOWLOWER@ || defined __MINGW32__ +_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); +#endif +_GL_CXXALIASWARN (towlower); +_GL_CXXALIASWARN (towupper); + +#if !@HAVE_WCTRANS_T@ +# if !GNULIB_defined_wctrans_t +typedef void * wctrans_t; +# define GNULIB_defined_wctrans_t 1 +# endif +#endif + +/* Get a descriptor for a wide character case conversion. */ +#if @GNULIB_WCTRANS@ +# if !@HAVE_WCTRANS_T@ +_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); +# endif +_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); +_GL_CXXALIASWARN (wctrans); +#elif defined GNULIB_POSIXCHECK +# undef wctrans +# if HAVE_RAW_DECL_WCTRANS +_GL_WARN_ON_USE (wctrans, "wctrans is unportable - " + "use gnulib module wctrans for portability"); +# endif +#endif + +/* Perform a given case conversion on a wide character. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctrans() function. */ +#if @GNULIB_TOWCTRANS@ +# if !@HAVE_WCTRANS_T@ +_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +# endif +_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +_GL_CXXALIASWARN (towctrans); +#elif defined GNULIB_POSIXCHECK +# undef towctrans +# if HAVE_RAW_DECL_TOWCTRANS +_GL_WARN_ON_USE (towctrans, "towctrans is unportable - " + "use gnulib module towctrans for portability"); +# endif +#endif + +_GL_INLINE_HEADER_END + +#endif /* _@GUARD_PREFIX@_WCTYPE_H */ +#endif /* _@GUARD_PREFIX@_WCTYPE_H */ diff --git a/grub-core/gnulib/wcwidth.c b/grub-core/gnulib/wcwidth.c new file mode 100644 index 000000000..253fcaa65 --- /dev/null +++ b/grub-core/gnulib/wcwidth.c @@ -0,0 +1,50 @@ +/* Determine the number of screen columns needed for a character. + Copyright (C) 2006-2007, 2010-2013 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Get iswprint. */ +#include + +#include "localcharset.h" +#include "streq.h" +#include "uniwidth.h" + +int +wcwidth (wchar_t wc) +#undef wcwidth +{ + /* In UTF-8 locales, use a Unicode aware width function. */ + const char *encoding = locale_charset (); + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0)) + { + /* We assume that in a UTF-8 locale, a wide character is the same as a + Unicode character. */ + return uc_width (wc, encoding); + } + else + { + /* Otherwise, fall back to the system's wcwidth function. */ +#if HAVE_WCWIDTH + return wcwidth (wc); +#else + return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; +#endif + } +} diff --git a/grub-core/gnulib/xsize.c b/grub-core/gnulib/xsize.c new file mode 100644 index 000000000..4b4914c2c --- /dev/null +++ b/grub-core/gnulib/xsize.c @@ -0,0 +1,3 @@ +#include +#define XSIZE_INLINE _GL_EXTERN_INLINE +#include "xsize.h" diff --git a/grub-core/gnulib/xsize.h b/grub-core/gnulib/xsize.h new file mode 100644 index 000000000..2922f3530 --- /dev/null +++ b/grub-core/gnulib/xsize.h @@ -0,0 +1,114 @@ +/* xsize.h -- Checked size_t computations. + + Copyright (C) 2003, 2008-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . */ + +#ifndef _XSIZE_H +#define _XSIZE_H + +/* Get size_t. */ +#include + +/* Get SIZE_MAX. */ +#include +#if HAVE_STDINT_H +# include +#endif + +_GL_INLINE_HEADER_BEGIN +#ifndef XSIZE_INLINE +# define XSIZE_INLINE _GL_INLINE +#endif + +/* The size of memory objects is often computed through expressions of + type size_t. Example: + void* p = malloc (header_size + n * element_size). + These computations can lead to overflow. When this happens, malloc() + returns a piece of memory that is way too small, and the program then + crashes while attempting to fill the memory. + To avoid this, the functions and macros in this file check for overflow. + The convention is that SIZE_MAX represents overflow. + malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc + implementation that uses mmap --, it's recommended to use size_overflow_p() + or size_in_bounds_p() before invoking malloc(). + The example thus becomes: + size_t size = xsum (header_size, xtimes (n, element_size)); + void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); +*/ + +/* Convert an arbitrary value >= 0 to type size_t. */ +#define xcast_size_t(N) \ + ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) + +/* Sum of two sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum (size_t size1, size_t size2) +{ + size_t sum = size1 + size2; + return (sum >= size1 ? sum : SIZE_MAX); +} + +/* Sum of three sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum3 (size_t size1, size_t size2, size_t size3) +{ + return xsum (xsum (size1, size2), size3); +} + +/* Sum of four sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) +{ + return xsum (xsum (xsum (size1, size2), size3), size4); +} + +/* Maximum of two sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xmax (size_t size1, size_t size2) +{ + /* No explicit check is needed here, because for any n: + max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ + return (size1 >= size2 ? size1 : size2); +} + +/* Multiplication of a count with an element size, with overflow check. + The count must be >= 0 and the element size must be > 0. + This is a macro, not a function, so that it works correctly even + when N is of a wider type and N > SIZE_MAX. */ +#define xtimes(N, ELSIZE) \ + ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) + +/* Check for overflow. */ +#define size_overflow_p(SIZE) \ + ((SIZE) == SIZE_MAX) +/* Check against overflow. */ +#define size_in_bounds_p(SIZE) \ + ((SIZE) != SIZE_MAX) + +_GL_INLINE_HEADER_END + +#endif /* _XSIZE_H */ diff --git a/grub-core/hello/hello.c b/grub-core/hello/hello.c new file mode 100644 index 000000000..456b7c322 --- /dev/null +++ b/grub-core/hello/hello.c @@ -0,0 +1,51 @@ +/* hello.c - test module for dynamic loading */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2007 Free Software Foundation, Inc. + * Copyright (C) 2003 NIIBE Yutaka + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_hello (grub_extcmd_context_t ctxt __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_printf ("%s\n", _("Hello World")); + return 0; +} + +static grub_extcmd_t cmd; + +GRUB_MOD_INIT(hello) +{ + cmd = grub_register_extcmd ("hello", grub_cmd_hello, 0, 0, + N_("Say `Hello World'."), 0); +} + +GRUB_MOD_FINI(hello) +{ + grub_unregister_extcmd (cmd); +} diff --git a/grub-core/hook/datehook.c b/grub-core/hook/datehook.c new file mode 100644 index 000000000..ac75908ef --- /dev/null +++ b/grub-core/hook/datehook.c @@ -0,0 +1,110 @@ +/* datehook.c - Module to install datetime hooks. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static const char *grub_datetime_names[] = +{ + "YEAR", + "MONTH", + "DAY", + "HOUR", + "MINUTE", + "SECOND", + "WEEKDAY", +}; + +static const char * +grub_read_hook_datetime (struct grub_env_var *var, + const char *val __attribute__ ((unused))) +{ + struct grub_datetime datetime; + static char buf[6]; + + buf[0] = 0; + if (! grub_get_datetime (&datetime)) + { + int i; + + for (i = 0; i < 7; i++) + if (grub_strcmp (var->name, grub_datetime_names[i]) == 0) + { + int n; + + switch (i) + { + case 0: + n = datetime.year; + break; + case 1: + n = datetime.month; + break; + case 2: + n = datetime.day; + break; + case 3: + n = datetime.hour; + break; + case 4: + n = datetime.minute; + break; + case 5: + n = datetime.second; + break; + default: + return grub_get_weekday_name (&datetime); + } + + grub_snprintf (buf, sizeof (buf), "%d", n); + break; + } + } + + return buf; +} + +GRUB_MOD_INIT(datehook) +{ + unsigned i; + + for (i = 0; i < ARRAY_SIZE (grub_datetime_names); i++) + { + grub_register_variable_hook (grub_datetime_names[i], + grub_read_hook_datetime, 0); + grub_env_export (grub_datetime_names[i]); + } +} + +GRUB_MOD_FINI(datehook) +{ + unsigned i; + + for (i = 0; i < ARRAY_SIZE (grub_datetime_names); i++) + { + grub_register_variable_hook (grub_datetime_names[i], 0, 0); + grub_env_unset (grub_datetime_names[i]); + } +} diff --git a/grub-core/io/bufio.c b/grub-core/io/bufio.c new file mode 100644 index 000000000..22438277d --- /dev/null +++ b/grub-core/io/bufio.c @@ -0,0 +1,207 @@ +/* bufio.c - buffered io access */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define GRUB_BUFIO_DEF_SIZE 8192 +#define GRUB_BUFIO_MAX_SIZE 1048576 + +struct grub_bufio +{ + grub_file_t file; + grub_size_t block_size; + grub_size_t buffer_len; + grub_off_t buffer_at; + char buffer[0]; +}; +typedef struct grub_bufio *grub_bufio_t; + +static struct grub_fs grub_bufio_fs; + +grub_file_t +grub_bufio_open (grub_file_t io, int size) +{ + grub_file_t file; + grub_bufio_t bufio = 0; + + file = (grub_file_t) grub_zalloc (sizeof (*file)); + if (! file) + return 0; + + if (size == 0) + size = GRUB_BUFIO_DEF_SIZE; + else if (size > GRUB_BUFIO_MAX_SIZE) + size = GRUB_BUFIO_MAX_SIZE; + + if ((size < 0) || ((unsigned) size > io->size)) + size = ((io->size > GRUB_BUFIO_MAX_SIZE) ? GRUB_BUFIO_MAX_SIZE : + io->size); + + bufio = grub_zalloc (sizeof (struct grub_bufio) + size); + if (! bufio) + { + grub_free (file); + return 0; + } + + bufio->file = io; + bufio->block_size = size; + + file->device = io->device; + file->size = io->size; + file->data = bufio; + file->fs = &grub_bufio_fs; + file->not_easily_seekable = io->not_easily_seekable; + + return file; +} + +grub_file_t +grub_buffile_open (const char *name, int size) +{ + grub_file_t io, file; + + io = grub_file_open (name); + if (! io) + return 0; + + file = grub_bufio_open (io, size); + if (! file) + { + grub_file_close (io); + return 0; + } + + return file; +} + +static grub_ssize_t +grub_bufio_read (grub_file_t file, char *buf, grub_size_t len) +{ + grub_size_t res = 0; + grub_off_t next_buf; + grub_bufio_t bufio = file->data; + grub_ssize_t really_read; + + if (file->size == GRUB_FILE_SIZE_UNKNOWN) + file->size = bufio->file->size; + + /* First part: use whatever we already have in the buffer. */ + if ((file->offset >= bufio->buffer_at) && + (file->offset < bufio->buffer_at + bufio->buffer_len)) + { + grub_size_t n; + grub_uint64_t pos; + + pos = file->offset - bufio->buffer_at; + n = bufio->buffer_len - pos; + if (n > len) + n = len; + + grub_memcpy (buf, &bufio->buffer[pos], n); + len -= n; + res += n; + + buf += n; + } + if (len == 0) + return res; + + /* Need to read some more. */ + next_buf = (file->offset + res + len - 1) & ~((grub_off_t) bufio->block_size - 1); + /* Now read between file->offset + res and bufio->buffer_at. */ + if (file->offset + res < next_buf) + { + grub_size_t read_now; + read_now = next_buf - (file->offset + res); + grub_file_seek (bufio->file, file->offset + res); + really_read = grub_file_read (bufio->file, buf, read_now); + if (really_read < 0) + return -1; + if (file->size == GRUB_FILE_SIZE_UNKNOWN) + file->size = bufio->file->size; + len -= really_read; + buf += really_read; + res += really_read; + + /* Partial read. File ended unexpectedly. Save the last chunk in buffer. + */ + if (really_read != (grub_ssize_t) read_now) + { + bufio->buffer_len = really_read; + if (bufio->buffer_len > bufio->block_size) + bufio->buffer_len = bufio->block_size; + bufio->buffer_at = file->offset + res - bufio->buffer_len; + grub_memcpy (&bufio->buffer[0], buf - bufio->buffer_len, + bufio->buffer_len); + return res; + } + } + + /* Read into buffer. */ + grub_file_seek (bufio->file, next_buf); + really_read = grub_file_read (bufio->file, bufio->buffer, + bufio->block_size); + if (really_read < 0) + return -1; + bufio->buffer_at = next_buf; + bufio->buffer_len = really_read; + + if (file->size == GRUB_FILE_SIZE_UNKNOWN) + file->size = bufio->file->size; + + if (len > bufio->buffer_len) + len = bufio->buffer_len; + grub_memcpy (buf, &bufio->buffer[file->offset + res - next_buf], len); + res += len; + + return res; +} + +static grub_err_t +grub_bufio_close (grub_file_t file) +{ + grub_bufio_t bufio = file->data; + + grub_file_close (bufio->file); + grub_free (bufio); + + file->device = 0; + + return grub_errno; +} + +static struct grub_fs grub_bufio_fs = + { + .name = "bufio", + .dir = 0, + .open = 0, + .read = grub_bufio_read, + .close = grub_bufio_close, + .label = 0, + .next = 0 + }; diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c new file mode 100644 index 000000000..0f2ea6bd8 --- /dev/null +++ b/grub-core/io/gzio.c @@ -0,0 +1,1369 @@ +/* gzio.c - decompression support for gzip */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2005,2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* + * Most of this file was originally the source file "inflate.c", written + * by Mark Adler. It has been very heavily modified. In particular, the + * original would run through the whole file at once, and this version can + * be stopped and restarted on any boundary during the decompression process. + * + * The license and header comments that file are included here. + */ + +/* inflate.c -- Not copyrighted 1992 by Mark Adler + version c10p1, 10 January 1993 */ + +/* You can do whatever you like with this source file, though I would + prefer that if you modify it and redistribute it that you include + comments to that effect with your name and the date. Thank you. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* + * Window Size + * + * This must be a power of two, and at least 32K for zip's deflate method + */ + +#define WSIZE 0x8000 + + +#define INBUFSIZ 0x2000 + +/* The state stored in filesystem-specific data. */ +struct grub_gzio +{ + /* The underlying file object. */ + grub_file_t file; + /* If input is in memory following fields are used instead of file. */ + grub_size_t mem_input_size, mem_input_off; + grub_uint8_t *mem_input; + /* The offset at which the data starts in the underlying file. */ + grub_off_t data_offset; + /* The type of current block. */ + int block_type; + /* The length of current block. */ + int block_len; + /* The flag of the last block. */ + int last_block; + /* The flag of codes. */ + int code_state; + /* The length of a copy. */ + unsigned inflate_n; + /* The index of a copy. */ + unsigned inflate_d; + /* The input buffer. */ + grub_uint8_t inbuf[INBUFSIZ]; + int inbuf_d; + /* The bit buffer. */ + unsigned long bb; + /* The bits in the bit buffer. */ + unsigned bk; + /* The sliding window in uncompressed data. */ + grub_uint8_t slide[WSIZE]; + /* Current position in the slide. */ + unsigned wp; + /* The literal/length code table. */ + struct huft *tl; + /* The distance code table. */ + struct huft *td; + /* The lookup bits for the literal/length code table. */ + int bl; + /* The lookup bits for the distance code table. */ + int bd; + /* The original offset value. */ + grub_off_t saved_offset; +}; +typedef struct grub_gzio *grub_gzio_t; + +/* Declare the filesystem structure for grub_gzio_open. */ +static struct grub_fs grub_gzio_fs; + +/* Function prototypes */ +static void initialize_tables (grub_gzio_t); + +/* Eat variable-length header fields. */ +static int +eat_field (grub_file_t file, int len) +{ + char ch = 1; + int not_retval = 1; + + do + { + if (len >= 0) + { + if (! (len--)) + break; + } + else + { + if (! ch) + break; + } + } + while ((not_retval = grub_file_read (file, &ch, 1)) == 1); + + return ! not_retval; +} + + +/* Little-Endian defines for the 2-byte magic numbers for gzip files. */ +#define GZIP_MAGIC grub_le_to_cpu16 (0x8B1F) +#define OLD_GZIP_MAGIC grub_le_to_cpu16 (0x9E1F) + +/* Compression methods (see algorithm.doc) */ +#define STORED 0 +#define COMPRESSED 1 +#define PACKED 2 +#define LZHED 3 +/* methods 4 to 7 reserved */ +#define DEFLATED 8 +#define MAX_METHODS 9 + +/* gzip flag byte */ +#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ +#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ +#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ +#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ +#define COMMENT 0x10 /* bit 4 set: file comment present */ +#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ +#define RESERVED 0xC0 /* bit 6,7: reserved */ + +#define UNSUPPORTED_FLAGS (CONTINUATION | ENCRYPTED | RESERVED) + +/* inflate block codes */ +#define INFLATE_STORED 0 +#define INFLATE_FIXED 1 +#define INFLATE_DYNAMIC 2 + +typedef unsigned char uch; +typedef unsigned short ush; +typedef unsigned long ulg; + +static int +test_gzip_header (grub_file_t file) +{ + struct { + grub_uint16_t magic; + grub_uint8_t method; + grub_uint8_t flags; + grub_uint32_t timestamp; + grub_uint8_t extra_flags; + grub_uint8_t os_type; + } hdr; + grub_uint16_t extra_len; + grub_uint32_t orig_len; + grub_gzio_t gzio = file->data; + + if (grub_file_tell (gzio->file) != 0) + grub_file_seek (gzio->file, 0); + + /* + * This checks if the file is gzipped. If a problem occurs here + * (other than a real error with the disk) then we don't think it + * is a compressed file, and simply mark it as such. + */ + if (grub_file_read (gzio->file, &hdr, 10) != 10 + || ((hdr.magic != GZIP_MAGIC) + && (hdr.magic != OLD_GZIP_MAGIC))) + return 0; + + /* + * This does consistency checking on the header data. If a + * problem occurs from here on, then we have corrupt or otherwise + * bad data, and the error should be reported to the user. + */ + if (hdr.method != DEFLATED + || (hdr.flags & UNSUPPORTED_FLAGS) + || ((hdr.flags & EXTRA_FIELD) + && (grub_file_read (gzio->file, &extra_len, 2) != 2 + || eat_field (gzio->file, + grub_le_to_cpu16 (extra_len)))) + || ((hdr.flags & ORIG_NAME) && eat_field (gzio->file, -1)) + || ((hdr.flags & COMMENT) && eat_field (gzio->file, -1))) + return 0; + + gzio->data_offset = grub_file_tell (gzio->file); + + /* FIXME: don't do this on not easily seekable files. */ + { + grub_file_seek (gzio->file, grub_file_size (gzio->file) - 4); + if (grub_file_read (gzio->file, &orig_len, 4) != 4) + return 0; + /* FIXME: this does not handle files whose original size is over 4GB. + But how can we know the real original size? */ + file->size = grub_le_to_cpu32 (orig_len); + } + + initialize_tables (gzio); + + return 1; +} + + +/* Huffman code lookup table entry--this entry is four bytes for machines + that have 16-bit pointers (e.g. PC's in the small or medium model). + Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16 + means that v is a literal, 16 < e < 32 means that v is a pointer to + the next table, which codes e - 16 bits, and lastly e == 99 indicates + an unused code. If a code with e == 99 is looked up, this implies an + error in the data. */ +struct huft +{ + uch e; /* number of extra bits or operation */ + uch b; /* number of bits in this code or subcode */ + union + { + ush n; /* literal, length base, or distance base */ + struct huft *t; /* pointer to next level of table */ + } + v; +}; + + +/* The inflate algorithm uses a sliding 32K byte window on the uncompressed + stream to find repeated byte strings. This is implemented here as a + circular buffer. The index is updated simply by incrementing and then + and'ing with 0x7fff (32K-1). */ +/* It is left to other modules to supply the 32K area. It is assumed + to be usable as if it were declared "uch slide[32768];" or as just + "uch *slide;" and then malloc'ed in the latter case. The definition + must be in unzip.h, included above. */ + + +/* Tables for deflate from PKZIP's appnote.txt. */ +static unsigned bitorder[] = +{ /* Order of the bit length code lengths */ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; +static ush cplens[] = +{ /* Copy lengths for literal codes 257..285 */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + /* note: see note #13 above about the 258 in this list. */ +static ush cplext[] = +{ /* Extra bits for literal codes 257..285 */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ +static ush cpdist[] = +{ /* Copy offsets for distance codes 0..29 */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577}; +static ush cpdext[] = +{ /* Extra bits for distance codes */ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + + +/* + Huffman code decoding is performed using a multi-level table lookup. + The fastest way to decode is to simply build a lookup table whose + size is determined by the longest code. However, the time it takes + to build this table can also be a factor if the data being decoded + is not very long. The most common codes are necessarily the + shortest codes, so those codes dominate the decoding time, and hence + the speed. The idea is you can have a shorter table that decodes the + shorter, more probable codes, and then point to subsidiary tables for + the longer codes. The time it costs to decode the longer codes is + then traded against the time it takes to make longer tables. + + This results of this trade are in the variables lbits and dbits + below. lbits is the number of bits the first level table for literal/ + length codes can decode in one step, and dbits is the same thing for + the distance codes. Subsequent tables are also less than or equal to + those sizes. These values may be adjusted either when all of the + codes are shorter than that, in which case the longest code length in + bits is used, or when the shortest code is *longer* than the requested + table size, in which case the length of the shortest code in bits is + used. + + There are two different values for the two tables, since they code a + different number of possibilities each. The literal/length table + codes 286 possible values, or in a flat code, a little over eight + bits. The distance table codes 30 possible values, or a little less + than five bits, flat. The optimum values for speed end up being + about one bit more than those, so lbits is 8+1 and dbits is 5+1. + The optimum values may differ though from machine to machine, and + possibly even between compilers. Your mileage may vary. + */ + + +static int lbits = 9; /* bits in base literal/length lookup table */ +static int dbits = 6; /* bits in base distance lookup table */ + + +/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ +#define BMAX 16 /* maximum bit length of any code (16 for explode) */ +#define N_MAX 288 /* maximum number of codes in any set */ + + +/* Macros for inflate() bit peeking and grabbing. + The usage is: + + NEEDBITS(j) + x = b & mask_bits[j]; + DUMPBITS(j) + + where NEEDBITS makes sure that b has at least j bits in it, and + DUMPBITS removes the bits from b. The macros use the variable k + for the number of bits in b. Normally, b and k are register + variables for speed, and are initialized at the beginning of a + routine that uses these macros from a global bit buffer and count. + + If we assume that EOB will be the longest code, then we will never + ask for bits with NEEDBITS that are beyond the end of the stream. + So, NEEDBITS should not read any more bytes than are needed to + meet the request. Then no bytes need to be "returned" to the buffer + at the end of the last block. + + However, this assumption is not true for fixed blocks--the EOB code + is 7 bits, but the other literal/length codes can be 8 or 9 bits. + (The EOB code is shorter than other codes because fixed blocks are + generally short. So, while a block always has an EOB, many other + literal/length codes have a significantly lower probability of + showing up at all.) However, by making the first table have a + lookup of seven bits, the EOB code will be found in that first + lookup, and so will not require that too many bits be pulled from + the stream. + */ + +static ush mask_bits[] = +{ + 0x0000, + 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, + 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff +}; + +#define NEEDBITS(n) do {while(k<(n)){b|=((ulg)get_byte(gzio))<>=(n);k-=(n);} while (0) + +static int +get_byte (grub_gzio_t gzio) +{ + if (gzio->mem_input) + { + if (gzio->mem_input_off < gzio->mem_input_size) + return gzio->mem_input[gzio->mem_input_off++]; + return 0; + } + + if (gzio->file && (grub_file_tell (gzio->file) + == (grub_off_t) gzio->data_offset + || gzio->inbuf_d == INBUFSIZ)) + { + gzio->inbuf_d = 0; + grub_file_read (gzio->file, gzio->inbuf, INBUFSIZ); + } + + return gzio->inbuf[gzio->inbuf_d++]; +} + +static void +gzio_seek (grub_gzio_t gzio, grub_off_t off) +{ + if (gzio->mem_input) + { + if (off > gzio->mem_input_size) + grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to seek outside of the file")); + else + gzio->mem_input_off = off; + } + else + grub_file_seek (gzio->file, off); +} + +/* more function prototypes */ +static int huft_build (unsigned *, unsigned, unsigned, ush *, ush *, + struct huft **, int *); +static int huft_free (struct huft *); +static int inflate_codes_in_window (grub_gzio_t); + + +/* Given a list of code lengths and a maximum table size, make a set of + tables to decode that set of codes. Return zero on success, one if + the given code set is incomplete (the tables are still built in this + case), two if the input is invalid (all zero length codes or an + oversubscribed set of lengths), and three if not enough memory. */ + +static int +huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ + unsigned n, /* number of codes (assumed <= N_MAX) */ + unsigned s, /* number of simple-valued codes (0..s-1) */ + ush * d, /* list of base values for non-simple codes */ + ush * e, /* list of extra bits for non-simple codes */ + struct huft **t, /* result: starting table */ + int *m) /* maximum lookup bits, returns actual */ +{ + unsigned a; /* counter for codes of length k */ + unsigned c[BMAX + 1]; /* bit length count table */ + unsigned f; /* i repeats in table every f entries */ + int g; /* maximum code length */ + int h; /* table level */ + register unsigned i; /* counter, current code */ + register unsigned j; /* counter */ + register int k; /* number of bits in current code */ + int l; /* bits per table (returned in m) */ + register unsigned *p; /* pointer into c[], b[], or v[] */ + register struct huft *q; /* points to current table */ + struct huft r; /* table entry for structure assignment */ + struct huft *u[BMAX]; /* table stack */ + unsigned v[N_MAX]; /* values in order of bit length */ + register int w; /* bits before this table == (l * h) */ + unsigned x[BMAX + 1]; /* bit offsets, then code stack */ + unsigned *xp; /* pointer into x */ + int y; /* number of dummy codes added */ + unsigned z; /* number of entries in current table */ + + /* Generate counts for each bit length */ + grub_memset ((char *) c, 0, sizeof (c)); + p = b; + i = n; + do + { + c[*p]++; /* assume all entries <= BMAX */ + p++; /* Can't combine with above line (Solaris bug) */ + } + while (--i); + if (c[0] == n) /* null input--all zero length codes */ + { + *t = (struct huft *) NULL; + *m = 0; + return 0; + } + + /* Find minimum and maximum length, bound *m by those */ + l = *m; + for (j = 1; j <= BMAX; j++) + if (c[j]) + break; + k = j; /* minimum code length */ + if ((unsigned) l < j) + l = j; + for (i = BMAX; i; i--) + if (c[i]) + break; + g = i; /* maximum code length */ + if ((unsigned) l > i) + l = i; + *m = l; + + /* Adjust last length count to fill out codes, if needed */ + for (y = 1 << j; j < i; j++, y <<= 1) + if ((y -= c[j]) < 0) + return 2; /* bad input: more codes than bits */ + if ((y -= c[i]) < 0) + return 2; + c[i] += y; + + /* Generate starting offsets into the value table for each length */ + x[1] = j = 0; + p = c + 1; + xp = x + 2; + while (--i) + { /* note that i == g from above */ + *xp++ = (j += *p++); + } + + /* Make a table of values in order of bit lengths */ + p = b; + i = 0; + do + { + if ((j = *p++) != 0) + v[x[j]++] = i; + } + while (++i < n); + + /* Generate the Huffman codes and for each, make the table entries */ + x[0] = i = 0; /* first Huffman code is zero */ + p = v; /* grab values in bit order */ + h = -1; /* no tables yet--level -1 */ + w = -l; /* bits decoded == (l * h) */ + u[0] = (struct huft *) NULL; /* just to keep compilers happy */ + q = (struct huft *) NULL; /* ditto */ + z = 0; /* ditto */ + + /* go through the bit lengths (k already is bits in shortest code) */ + for (; k <= g; k++) + { + a = c[k]; + while (a--) + { + /* here i is the Huffman code of length k bits for value *p */ + /* make tables up to required level */ + while (k > w + l) + { + h++; + w += l; /* previous table always l bits */ + + /* compute minimum size table less than or equal to l bits */ + z = (z = (unsigned) (g - w)) > (unsigned) l ? (unsigned) l : z; /* upper limit on table size */ + if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ + { /* too few codes for k-w bit table */ + f -= a + 1; /* deduct codes from patterns left */ + xp = c + k; + while (++j < z) /* try smaller tables up to z bits */ + { + if ((f <<= 1) <= *++xp) + break; /* enough codes to use up j bits */ + f -= *xp; /* else deduct codes from patterns */ + } + } + z = 1 << j; /* table entries for j-bit table */ + + /* allocate and link in new table */ + q = (struct huft *) grub_zalloc ((z + 1) * sizeof (struct huft)); + if (! q) + { + if (h) + huft_free (u[0]); + return 3; + } + + *t = q + 1; /* link to list for huft_free() */ + *(t = &(q->v.t)) = (struct huft *) NULL; + u[h] = ++q; /* table starts after link */ + + /* connect to last table, if there is one */ + if (h) + { + x[h] = i; /* save pattern for backing up */ + r.b = (uch) l; /* bits to dump before this table */ + r.e = (uch) (16 + j); /* bits in this table */ + r.v.t = q; /* pointer to this table */ + j = i >> (w - l); /* (get around Turbo C bug) */ + u[h - 1][j] = r; /* connect to last table */ + } + } + + /* set up table entry in r */ + r.b = (uch) (k - w); + if (p >= v + n) + r.e = 99; /* out of values--invalid code */ + else if (*p < s) + { + r.e = (uch) (*p < 256 ? 16 : 15); /* 256 is end-of-block code */ + r.v.n = (ush) (*p); /* simple code is just the value */ + p++; /* one compiler does not like *p++ */ + } + else + { + r.e = (uch) e[*p - s]; /* non-simple--look up in lists */ + r.v.n = d[*p++ - s]; + } + + /* fill code-like entries with r */ + f = 1 << (k - w); + for (j = i >> w; j < z; j += f) + q[j] = r; + + /* backwards increment the k-bit code i */ + for (j = 1 << (k - 1); i & j; j >>= 1) + i ^= j; + i ^= j; + + /* backup over finished tables */ + while ((i & ((1 << w) - 1)) != x[h]) + { + h--; /* don't need to update q */ + w -= l; + } + } + } + + /* Return true (1) if we were given an incomplete table */ + return y != 0 && g != 1; +} + + +/* Free the malloc'ed tables built by huft_build(), which makes a linked + list of the tables it made, with the links in a dummy first entry of + each table. */ +static int +huft_free (struct huft *t) +{ + register struct huft *p, *q; + + + /* Go through linked list, freeing from the malloced (t[-1]) address. */ + p = t; + while (p != (struct huft *) NULL) + { + q = (--p)->v.t; + grub_free ((char *) p); + p = q; + } + return 0; +} + + +/* + * inflate (decompress) the codes in a deflated (compressed) block. + * Return an error code or zero if it all goes ok. + */ + +static int +inflate_codes_in_window (grub_gzio_t gzio) +{ + register unsigned e; /* table entry flag/number of extra bits */ + unsigned n, d; /* length and index for copy */ + unsigned w; /* current window position */ + struct huft *t; /* pointer to table entry */ + unsigned ml, md; /* masks for bl and bd bits */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + /* make local copies of globals */ + d = gzio->inflate_d; + n = gzio->inflate_n; + b = gzio->bb; /* initialize bit buffer */ + k = gzio->bk; + w = gzio->wp; /* initialize window position */ + + /* inflate the coded data */ + ml = mask_bits[gzio->bl]; /* precompute masks for speed */ + md = mask_bits[gzio->bd]; + for (;;) /* do until end of block */ + { + if (! gzio->code_state) + { + NEEDBITS ((unsigned) gzio->bl); + if ((e = (t = gzio->tl + ((unsigned) b & ml))->e) > 16) + do + { + if (e == 99) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "an unused code found"); + return 1; + } + DUMPBITS (t->b); + e -= 16; + NEEDBITS (e); + } + while ((e = (t = t->v.t + ((unsigned) b & mask_bits[e]))->e) > 16); + DUMPBITS (t->b); + + if (e == 16) /* then it's a literal */ + { + gzio->slide[w++] = (uch) t->v.n; + if (w == WSIZE) + break; + } + else + /* it's an EOB or a length */ + { + /* exit if end of block */ + if (e == 15) + { + gzio->block_len = 0; + break; + } + + /* get length of block to copy */ + NEEDBITS (e); + n = t->v.n + ((unsigned) b & mask_bits[e]); + DUMPBITS (e); + + /* decode distance of block to copy */ + NEEDBITS ((unsigned) gzio->bd); + if ((e = (t = gzio->td + ((unsigned) b & md))->e) > 16) + do + { + if (e == 99) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "an unused code found"); + return 1; + } + DUMPBITS (t->b); + e -= 16; + NEEDBITS (e); + } + while ((e = (t = t->v.t + ((unsigned) b & mask_bits[e]))->e) + > 16); + DUMPBITS (t->b); + NEEDBITS (e); + d = w - t->v.n - ((unsigned) b & mask_bits[e]); + DUMPBITS (e); + gzio->code_state++; + } + } + + if (gzio->code_state) + { + /* do the copy */ + do + { + n -= (e = (e = WSIZE - ((d &= WSIZE - 1) > w ? d : w)) > n ? n + : e); + + if (w - d >= e) + { + grub_memmove (gzio->slide + w, gzio->slide + d, e); + w += e; + d += e; + } + else + /* purposefully use the overlap for extra copies here!! */ + { + while (e--) + gzio->slide[w++] = gzio->slide[d++]; + } + + if (w == WSIZE) + break; + } + while (n); + + if (! n) + gzio->code_state--; + + /* did we break from the loop too soon? */ + if (w == WSIZE) + break; + } + } + + /* restore the globals from the locals */ + gzio->inflate_d = d; + gzio->inflate_n = n; + gzio->wp = w; /* restore global window pointer */ + gzio->bb = b; /* restore global bit buffer */ + gzio->bk = k; + + return ! gzio->block_len; +} + + +/* get header for an inflated type 0 (stored) block. */ + +static void +init_stored_block (grub_gzio_t gzio) +{ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + /* make local copies of globals */ + b = gzio->bb; /* initialize bit buffer */ + k = gzio->bk; + + /* go to byte boundary */ + DUMPBITS (k & 7); + + /* get the length and its complement */ + NEEDBITS (16); + gzio->block_len = ((unsigned) b & 0xffff); + DUMPBITS (16); + NEEDBITS (16); + if (gzio->block_len != (int) ((~b) & 0xffff)) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "the length of a stored block does not match"); + DUMPBITS (16); + + /* restore global variables */ + gzio->bb = b; + gzio->bk = k; +} + + +/* get header for an inflated type 1 (fixed Huffman codes) block. We should + either replace this with a custom decoder, or at least precompute the + Huffman tables. */ + +static void +init_fixed_block (grub_gzio_t gzio) +{ + int i; /* temporary variable */ + unsigned l[288]; /* length list for huft_build */ + + /* set up literal table */ + for (i = 0; i < 144; i++) + l[i] = 8; + for (; i < 256; i++) + l[i] = 9; + for (; i < 280; i++) + l[i] = 7; + for (; i < 288; i++) /* make a complete, but wrong code set */ + l[i] = 8; + gzio->bl = 7; + if (huft_build (l, 288, 257, cplens, cplext, &gzio->tl, &gzio->bl) != 0) + { + if (grub_errno == GRUB_ERR_NONE) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "failed in building a Huffman code table"); + return; + } + + /* set up distance table */ + for (i = 0; i < 30; i++) /* make an incomplete code set */ + l[i] = 5; + gzio->bd = 5; + if (huft_build (l, 30, 0, cpdist, cpdext, &gzio->td, &gzio->bd) > 1) + { + if (grub_errno == GRUB_ERR_NONE) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "failed in building a Huffman code table"); + huft_free (gzio->tl); + gzio->tl = 0; + return; + } + + /* indicate we're now working on a block */ + gzio->code_state = 0; + gzio->block_len++; +} + + +/* get header for an inflated type 2 (dynamic Huffman codes) block. */ + +static void +init_dynamic_block (grub_gzio_t gzio) +{ + int i; /* temporary variables */ + unsigned j; + unsigned l; /* last length */ + unsigned m; /* mask for bit lengths table */ + unsigned n; /* number of lengths to get */ + unsigned nb; /* number of bit length codes */ + unsigned nl; /* number of literal/length codes */ + unsigned nd; /* number of distance codes */ + unsigned ll[286 + 30]; /* literal/length and distance code lengths */ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + /* make local bit buffer */ + b = gzio->bb; + k = gzio->bk; + + /* read in table lengths */ + NEEDBITS (5); + nl = 257 + ((unsigned) b & 0x1f); /* number of literal/length codes */ + DUMPBITS (5); + NEEDBITS (5); + nd = 1 + ((unsigned) b & 0x1f); /* number of distance codes */ + DUMPBITS (5); + NEEDBITS (4); + nb = 4 + ((unsigned) b & 0xf); /* number of bit length codes */ + DUMPBITS (4); + if (nl > 286 || nd > 30) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "too much data"); + return; + } + + /* read in bit-length-code lengths */ + for (j = 0; j < nb; j++) + { + NEEDBITS (3); + ll[bitorder[j]] = (unsigned) b & 7; + DUMPBITS (3); + } + for (; j < 19; j++) + ll[bitorder[j]] = 0; + + /* build decoding table for trees--single level, 7 bit lookup */ + gzio->bl = 7; + if (huft_build (ll, 19, 19, NULL, NULL, &gzio->tl, &gzio->bl) != 0) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "failed in building a Huffman code table"); + return; + } + + /* read in literal and distance code lengths */ + n = nl + nd; + m = mask_bits[gzio->bl]; + i = l = 0; + while ((unsigned) i < n) + { + NEEDBITS ((unsigned) gzio->bl); + j = (gzio->td = gzio->tl + ((unsigned) b & m))->b; + DUMPBITS (j); + j = gzio->td->v.n; + if (j < 16) /* length of code in bits (0..15) */ + ll[i++] = l = j; /* save last length in l */ + else if (j == 16) /* repeat last length 3 to 6 times */ + { + NEEDBITS (2); + j = 3 + ((unsigned) b & 3); + DUMPBITS (2); + if ((unsigned) i + j > n) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "too many codes found"); + return; + } + while (j--) + ll[i++] = l; + } + else if (j == 17) /* 3 to 10 zero length codes */ + { + NEEDBITS (3); + j = 3 + ((unsigned) b & 7); + DUMPBITS (3); + if ((unsigned) i + j > n) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "too many codes found"); + return; + } + while (j--) + ll[i++] = 0; + l = 0; + } + else + /* j == 18: 11 to 138 zero length codes */ + { + NEEDBITS (7); + j = 11 + ((unsigned) b & 0x7f); + DUMPBITS (7); + if ((unsigned) i + j > n) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "too many codes found"); + return; + } + while (j--) + ll[i++] = 0; + l = 0; + } + } + + /* free decoding table for trees */ + huft_free (gzio->tl); + gzio->td = 0; + gzio->tl = 0; + + /* restore the global bit buffer */ + gzio->bb = b; + gzio->bk = k; + + /* build the decoding tables for literal/length and distance codes */ + gzio->bl = lbits; + if (huft_build (ll, nl, 257, cplens, cplext, &gzio->tl, &gzio->bl) != 0) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "failed in building a Huffman code table"); + return; + } + gzio->bd = dbits; + if (huft_build (ll + nl, nd, 0, cpdist, cpdext, &gzio->td, &gzio->bd) != 0) + { + huft_free (gzio->tl); + gzio->tl = 0; + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "failed in building a Huffman code table"); + return; + } + + /* indicate we're now working on a block */ + gzio->code_state = 0; + gzio->block_len++; +} + + +static void +get_new_block (grub_gzio_t gzio) +{ + register ulg b; /* bit buffer */ + register unsigned k; /* number of bits in bit buffer */ + + /* make local bit buffer */ + b = gzio->bb; + k = gzio->bk; + + /* read in last block bit */ + NEEDBITS (1); + gzio->last_block = (int) b & 1; + DUMPBITS (1); + + /* read in block type */ + NEEDBITS (2); + gzio->block_type = (unsigned) b & 3; + DUMPBITS (2); + + /* restore the global bit buffer */ + gzio->bb = b; + gzio->bk = k; + + switch (gzio->block_type) + { + case INFLATE_STORED: + init_stored_block (gzio); + break; + case INFLATE_FIXED: + init_fixed_block (gzio); + break; + case INFLATE_DYNAMIC: + init_dynamic_block (gzio); + break; + default: + break; + } +} + + +static void +inflate_window (grub_gzio_t gzio) +{ + /* initialize window */ + gzio->wp = 0; + + /* + * Main decompression loop. + */ + + while (gzio->wp < WSIZE && grub_errno == GRUB_ERR_NONE) + { + if (! gzio->block_len) + { + if (gzio->last_block) + break; + + get_new_block (gzio); + } + + if (gzio->block_type > INFLATE_DYNAMIC) + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + "unknown block type %d", gzio->block_type); + + if (grub_errno != GRUB_ERR_NONE) + return; + + /* + * Expand stored block here. + */ + if (gzio->block_type == INFLATE_STORED) + { + int w = gzio->wp; + + /* + * This is basically a glorified pass-through + */ + + while (gzio->block_len && w < WSIZE && grub_errno == GRUB_ERR_NONE) + { + gzio->slide[w++] = get_byte (gzio); + gzio->block_len--; + } + + gzio->wp = w; + + continue; + } + + /* + * Expand other kind of block. + */ + + if (inflate_codes_in_window (gzio)) + { + huft_free (gzio->tl); + huft_free (gzio->td); + gzio->tl = 0; + gzio->td = 0; + } + } + + gzio->saved_offset += gzio->wp; + + /* XXX do CRC calculation here! */ +} + + +static void +initialize_tables (grub_gzio_t gzio) +{ + gzio->saved_offset = 0; + gzio_seek (gzio, gzio->data_offset); + + /* Initialize the bit buffer. */ + gzio->bk = 0; + gzio->bb = 0; + + /* Reset partial decompression code. */ + gzio->last_block = 0; + gzio->block_len = 0; + + /* Reset memory allocation stuff. */ + huft_free (gzio->tl); + huft_free (gzio->td); + gzio->tl = NULL; + gzio->td = NULL; +} + + +/* Open a new decompressing object on the top of IO. If TRANSPARENT is true, + even if IO does not contain data compressed by gzip, return a valid file + object. Note that this function won't close IO, even if an error occurs. */ +static grub_file_t +grub_gzio_open (grub_file_t io, const char *name __attribute__ ((unused))) +{ + grub_file_t file; + grub_gzio_t gzio = 0; + + file = (grub_file_t) grub_zalloc (sizeof (*file)); + if (! file) + return 0; + + gzio = grub_zalloc (sizeof (*gzio)); + if (! gzio) + { + grub_free (file); + return 0; + } + + gzio->file = io; + + file->device = io->device; + file->data = gzio; + file->fs = &grub_gzio_fs; + file->not_easily_seekable = 1; + + if (! test_gzip_header (file)) + { + grub_errno = GRUB_ERR_NONE; + grub_free (gzio); + grub_free (file); + grub_file_seek (io, 0); + + return io; + } + + return file; +} + +static grub_uint8_t +mod_31 (grub_uint16_t v) +{ + /* At most 2 iterations for any number that + we can get here. + In any case faster than real division. */ + while (v > 0x1f) + v = (v & 0x1f) + (v >> 5); + if (v == 0x1f) + return 0; + return v; +} + +static int +test_zlib_header (grub_gzio_t gzio) +{ + grub_uint8_t cmf, flg; + + cmf = get_byte (gzio); + flg = get_byte (gzio); + + /* Check that compression method is DEFLATE. */ + if ((cmf & 0xf) != DEFLATED) + { + /* TRANSLATORS: It's about given file having some strange format, not + complete lack of gzip support. */ + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, N_("unsupported gzip format")); + return 0; + } + + /* Usually it would be: (cmf * 256 + flg) % 31 != 0. */ + /* But 256 == 8 (31). */ + /* By multiplying by 4 and using 32 == 1 (31). We get our formula. */ + if (mod_31 (cmf + flg * 4) != 0) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, N_("unsupported gzip format")); + return 0; + } + + /* Dictionary isn't supported. */ + if (flg & 0x20) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, N_("unsupported gzip format")); + return 0; + } + + gzio->data_offset = 2; + initialize_tables (gzio); + + return 1; +} + +static grub_ssize_t +grub_gzio_read_real (grub_gzio_t gzio, grub_off_t offset, + char *buf, grub_size_t len) +{ + grub_ssize_t ret = 0; + + /* Do we reset decompression to the beginning of the file? */ + if (gzio->saved_offset > offset + WSIZE) + initialize_tables (gzio); + + /* + * This loop operates upon uncompressed data only. The only + * special thing it does is to make sure the decompression + * window is within the range of data it needs. + */ + + while (len > 0 && grub_errno == GRUB_ERR_NONE) + { + register grub_size_t size; + register char *srcaddr; + + while (offset >= gzio->saved_offset) + { + inflate_window (gzio); + if (gzio->wp == 0) + goto out; + } + + if (gzio->wp == 0) + goto out; + + srcaddr = (char *) ((offset & (WSIZE - 1)) + gzio->slide); + size = gzio->saved_offset - offset; + if (size > len) + size = len; + + grub_memmove (buf, srcaddr, size); + + buf += size; + len -= size; + ret += size; + offset += size; + } + + out: + if (grub_errno != GRUB_ERR_NONE) + ret = -1; + + return ret; +} + +static grub_ssize_t +grub_gzio_read (grub_file_t file, char *buf, grub_size_t len) +{ + grub_ssize_t ret; + ret = grub_gzio_read_real (file->data, file->offset, buf, len); + + if (!grub_errno && ret != (grub_ssize_t) len) + { + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "premature end of compressed"); + ret = -1; + } + return ret; +} + +/* Release everything, including the underlying file object. */ +static grub_err_t +grub_gzio_close (grub_file_t file) +{ + grub_gzio_t gzio = file->data; + + grub_file_close (gzio->file); + huft_free (gzio->tl); + huft_free (gzio->td); + grub_free (gzio); + + /* No need to close the same device twice. */ + file->device = 0; + file->name = 0; + + return grub_errno; +} + +grub_ssize_t +grub_zlib_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t outsize) +{ + grub_gzio_t gzio = 0; + grub_ssize_t ret; + + gzio = grub_zalloc (sizeof (*gzio)); + if (! gzio) + return -1; + gzio->mem_input = (grub_uint8_t *) inbuf; + gzio->mem_input_size = insize; + gzio->mem_input_off = 0; + + if (!test_zlib_header (gzio)) + { + grub_free (gzio); + return -1; + } + + ret = grub_gzio_read_real (gzio, off, outbuf, outsize); + grub_free (gzio); + + /* FIXME: Check Adler. */ + return ret; +} + +grub_ssize_t +grub_deflate_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t outsize) +{ + grub_gzio_t gzio = 0; + grub_ssize_t ret; + + gzio = grub_zalloc (sizeof (*gzio)); + if (! gzio) + return -1; + gzio->mem_input = (grub_uint8_t *) inbuf; + gzio->mem_input_size = insize; + gzio->mem_input_off = 0; + + initialize_tables (gzio); + + ret = grub_gzio_read_real (gzio, off, outbuf, outsize); + grub_free (gzio); + + return ret; +} + + + +static struct grub_fs grub_gzio_fs = + { + .name = "gzio", + .dir = 0, + .open = 0, + .read = grub_gzio_read, + .close = grub_gzio_close, + .label = 0, + .next = 0 + }; + +GRUB_MOD_INIT(gzio) +{ + grub_file_filter_register (GRUB_FILE_FILTER_GZIO, grub_gzio_open); +} + +GRUB_MOD_FINI(gzio) +{ + grub_file_filter_unregister (GRUB_FILE_FILTER_GZIO); +} diff --git a/grub-core/io/lzopio.c b/grub-core/io/lzopio.c new file mode 100644 index 000000000..7559c6c9c --- /dev/null +++ b/grub-core/io/lzopio.c @@ -0,0 +1,548 @@ +/* lzopio.c - decompression support for lzop */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define LZOP_MAGIC "\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a" +#define LZOP_MAGIC_SIZE 9 +#define LZOP_CHECK_SIZE 4 +#define LZOP_NEW_LIB 0x0940 + +/* Header flags - copied from conf.h of LZOP source code. */ +#define F_ADLER32_D 0x00000001L +#define F_ADLER32_C 0x00000002L +#define F_STDIN 0x00000004L +#define F_STDOUT 0x00000008L +#define F_NAME_DEFAULT 0x00000010L +#define F_DOSISH 0x00000020L +#define F_H_EXTRA_FIELD 0x00000040L +#define F_H_GMTDIFF 0x00000080L +#define F_CRC32_D 0x00000100L +#define F_CRC32_C 0x00000200L +#define F_MULTIPART 0x00000400L +#define F_H_FILTER 0x00000800L +#define F_H_CRC32 0x00001000L +#define F_H_PATH 0x00002000L +#define F_MASK 0x00003FFFL + +struct block_header +{ + grub_uint32_t usize; + grub_uint32_t csize; + grub_uint32_t ucheck; + grub_uint32_t ccheck; + unsigned char *cdata; + unsigned char *udata; +}; + +struct grub_lzopio +{ + grub_file_t file; + int has_ccheck; + int has_ucheck; + const gcry_md_spec_t *ucheck_fun; + const gcry_md_spec_t *ccheck_fun; + grub_off_t saved_off; /* Rounded down to block boundary. */ + grub_off_t start_block_off; + struct block_header block; +}; + +typedef struct grub_lzopio *grub_lzopio_t; +static struct grub_fs grub_lzopio_fs; + +/* Some helper functions. On errors memory allocated by those function is free + * either on close() so no risk of leaks. This makes functions simpler. */ + +/* Read block header from file, after successful exit file points to + * beginning of block data. */ +static int +read_block_header (struct grub_lzopio *lzopio) +{ + lzopio->saved_off += lzopio->block.usize; + + /* Free cached block data if any. */ + grub_free (lzopio->block.udata); + grub_free (lzopio->block.cdata); + lzopio->block.udata = NULL; + lzopio->block.cdata = NULL; + + if (grub_file_read (lzopio->file, &lzopio->block.usize, + sizeof (lzopio->block.usize)) != + sizeof (lzopio->block.usize)) + return -1; + + lzopio->block.usize = grub_be_to_cpu32 (lzopio->block.usize); + + /* Last block has uncompressed data size == 0 and no other fields. */ + if (lzopio->block.usize == 0) + { + if (grub_file_tell (lzopio->file) == grub_file_size (lzopio->file)) + return 0; + else + return -1; + } + + /* Read compressed data block size. */ + if (grub_file_read (lzopio->file, &lzopio->block.csize, + sizeof (lzopio->block.csize)) != + sizeof (lzopio->block.csize)) + return -1; + + lzopio->block.csize = grub_be_to_cpu32 (lzopio->block.csize); + + /* Corrupted. */ + if (lzopio->block.csize > lzopio->block.usize) + return -1; + + /* Read checksum of uncompressed data. */ + if (lzopio->has_ucheck) + { + if (grub_file_read (lzopio->file, &lzopio->block.ucheck, + sizeof (lzopio->block.ucheck)) != + sizeof (lzopio->block.ucheck)) + return -1; + + lzopio->block.ucheck = lzopio->block.ucheck; + } + + /* Read checksum of compressed data. */ + if (lzopio->has_ccheck) + { + /* Incompressible data block. */ + if (lzopio->block.csize == lzopio->block.usize) + { + lzopio->block.ccheck = lzopio->block.ucheck; + } + else + { + if (grub_file_read (lzopio->file, &lzopio->block.ccheck, + sizeof (lzopio->block.ccheck)) != + sizeof (lzopio->block.ccheck)) + return -1; + + lzopio->block.ccheck = lzopio->block.ccheck; + } + } + + return 0; +} + +/* Read block data into memory. File must be set to beginning of block data. + * Can't be called on last block. */ +static int +read_block_data (struct grub_lzopio *lzopio) +{ + lzopio->block.cdata = grub_malloc (lzopio->block.csize); + if (!lzopio->block.cdata) + return -1; + + if (grub_file_read (lzopio->file, lzopio->block.cdata, lzopio->block.csize) + != (grub_ssize_t) lzopio->block.csize) + return -1; + + if (lzopio->ccheck_fun) + { + grub_uint8_t computed_hash[GRUB_CRYPTO_MAX_MDLEN]; + + if (lzopio->ccheck_fun->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return -1; + + grub_crypto_hash (lzopio->ccheck_fun, computed_hash, + lzopio->block.cdata, + lzopio->block.csize); + + if (grub_memcmp + (computed_hash, &lzopio->block.ccheck, + sizeof (lzopio->block.ccheck)) != 0) + return -1; + } + + return 0; +} + +/* Read block data, uncompressed and also store it in memory. */ +/* XXX Investigate possibility of in-place decompression to reduce memory + * footprint. Or try to uncompress directly to buf if possible. */ +static int +uncompress_block (struct grub_lzopio *lzopio) +{ + lzo_uint usize = lzopio->block.usize; + + if (read_block_data (lzopio) < 0) + return -1; + + /* Incompressible data. */ + if (lzopio->block.csize == lzopio->block.usize) + { + lzopio->block.udata = lzopio->block.cdata; + lzopio->block.cdata = NULL; + } + else + { + lzopio->block.udata = grub_malloc (lzopio->block.usize); + if (!lzopio->block.udata) + return -1; + + if (lzo1x_decompress_safe (lzopio->block.cdata, lzopio->block.csize, + lzopio->block.udata, &usize, NULL) + != LZO_E_OK) + return -1; + + if (lzopio->ucheck_fun) + { + grub_uint8_t computed_hash[GRUB_CRYPTO_MAX_MDLEN]; + + if (lzopio->ucheck_fun->mdlen > GRUB_CRYPTO_MAX_MDLEN) + return -1; + + grub_crypto_hash (lzopio->ucheck_fun, computed_hash, + lzopio->block.udata, + lzopio->block.usize); + + if (grub_memcmp + (computed_hash, &lzopio->block.ucheck, + sizeof (lzopio->block.ucheck)) != 0) + return -1; + } + + /* Compressed data can be free now. */ + grub_free (lzopio->block.cdata); + lzopio->block.cdata = NULL; + } + + return 0; +} + +/* Jump to next block and read its header. */ +static int +jump_block (struct grub_lzopio *lzopio) +{ + /* only jump if block was not decompressed (and read from disk) */ + if (!lzopio->block.udata) + { + grub_off_t off = grub_file_tell (lzopio->file) + lzopio->block.csize; + + if (grub_file_seek (lzopio->file, off) == ((grub_off_t) - 1)) + return -1; + } + + return read_block_header (lzopio); +} + +static int +calculate_uncompressed_size (grub_file_t file) +{ + grub_lzopio_t lzopio = file->data; + grub_off_t usize_total = 0; + + if (read_block_header (lzopio) < 0) + return -1; + + /* FIXME: Don't do this for not easily seekable files. */ + while (lzopio->block.usize != 0) + { + usize_total += lzopio->block.usize; + + if (jump_block (lzopio) < 0) + return -1; + } + + file->size = usize_total; + + return 0; +} + +struct lzop_header +{ + grub_uint8_t magic[LZOP_MAGIC_SIZE]; + grub_uint16_t lzop_version; + grub_uint16_t lib_version; + grub_uint16_t lib_version_ext; + grub_uint8_t method; + grub_uint8_t level; + grub_uint32_t flags; + /* grub_uint32_t filter; */ /* No filters support. Rarely used anyway. */ + grub_uint32_t mode; + grub_uint32_t mtime_lo; + grub_uint32_t mtime_hi; + grub_uint8_t name_len; +} GRUB_PACKED; + +static int +test_header (grub_file_t file) +{ + grub_lzopio_t lzopio = file->data; + struct lzop_header header; + grub_uint32_t flags, checksum; + const gcry_md_spec_t *hcheck; + grub_uint8_t *context = NULL; + grub_uint8_t *name = NULL; + + if (grub_file_read (lzopio->file, &header, sizeof (header)) != sizeof (header)) + return 0; + + if (grub_memcmp (header.magic, LZOP_MAGIC, LZOP_MAGIC_SIZE) != 0) + return 0; + + if (grub_be_to_cpu16(header.lib_version) < LZOP_NEW_LIB) + return 0; + + /* Too new version, should upgrade minilzo? */ + if (grub_be_to_cpu16 (header.lib_version_ext) > MINILZO_VERSION) + return 0; + + flags = grub_be_to_cpu32 (header.flags); + + if (flags & F_CRC32_D) + { + lzopio->has_ucheck = 1; + lzopio->ucheck_fun = grub_crypto_lookup_md_by_name ("crc32"); + } + else if (flags & F_ADLER32_D) + { + lzopio->has_ucheck = 1; + lzopio->ucheck_fun = grub_crypto_lookup_md_by_name ("adler32"); + } + + if (flags & F_CRC32_C) + { + lzopio->has_ccheck = 1; + lzopio->ccheck_fun = grub_crypto_lookup_md_by_name ("crc32"); + } + else if (flags & F_ADLER32_C) + { + lzopio->has_ccheck = 1; + lzopio->ccheck_fun = grub_crypto_lookup_md_by_name ("adler32"); + } + + if (flags & F_H_CRC32) + hcheck = grub_crypto_lookup_md_by_name ("crc32"); + else + hcheck = grub_crypto_lookup_md_by_name ("adler32"); + + if (hcheck) { + context = grub_malloc(hcheck->contextsize); + if (! context) + return 0; + + hcheck->init(context); + + /* MAGIC is not included in check calculation. */ + hcheck->write(context, &header.lzop_version, sizeof(header)- LZOP_MAGIC_SIZE); + } + + if (header.name_len != 0) + { + name = grub_malloc (header.name_len); + if (! name) + { + grub_free (context); + return 0; + } + + if (grub_file_read (lzopio->file, name, header.name_len) != + header.name_len) + { + grub_free(name); + goto CORRUPTED; + } + + if (hcheck) + hcheck->write(context, name, header.name_len); + + grub_free(name); + } + + if (hcheck) + hcheck->final(context); + + if (grub_file_read (lzopio->file, &checksum, sizeof (checksum)) != + sizeof (checksum)) + goto CORRUPTED; + + if (hcheck && grub_memcmp (&checksum, hcheck->read(context), sizeof(checksum)) != 0) + goto CORRUPTED; + + lzopio->start_block_off = grub_file_tell (lzopio->file); + + if (calculate_uncompressed_size (file) < 0) + goto CORRUPTED; + + /* Get back to start block. */ + grub_file_seek (lzopio->file, lzopio->start_block_off); + + /* Read first block - grub_lzopio_read() expects valid block. */ + if (read_block_header (lzopio) < 0) + goto CORRUPTED; + + lzopio->saved_off = 0; + return 1; + +CORRUPTED: + return 0; +} + +static grub_file_t +grub_lzopio_open (grub_file_t io, + const char *name __attribute__ ((unused))) +{ + grub_file_t file; + grub_lzopio_t lzopio; + + file = (grub_file_t) grub_zalloc (sizeof (*file)); + if (!file) + return 0; + + lzopio = grub_zalloc (sizeof (*lzopio)); + if (!lzopio) + { + grub_free (file); + return 0; + } + + lzopio->file = io; + + file->device = io->device; + file->data = lzopio; + file->fs = &grub_lzopio_fs; + file->size = GRUB_FILE_SIZE_UNKNOWN; + file->not_easily_seekable = 1; + + if (grub_file_tell (lzopio->file) != 0) + grub_file_seek (lzopio->file, 0); + + if (!test_header (file)) + { + grub_errno = GRUB_ERR_NONE; + grub_file_seek (io, 0); + grub_free (lzopio); + grub_free (file); + + return io; + } + + return file; +} + +static grub_ssize_t +grub_lzopio_read (grub_file_t file, char *buf, grub_size_t len) +{ + grub_lzopio_t lzopio = file->data; + grub_ssize_t ret = 0; + grub_off_t off; + + /* Backward seek before last read block. */ + if (lzopio->saved_off > grub_file_tell (file)) + { + grub_file_seek (lzopio->file, lzopio->start_block_off); + + if (read_block_header (lzopio) < 0) + goto CORRUPTED; + + lzopio->saved_off = 0; + } + + /* Forward to first block with requested data. */ + while (lzopio->saved_off + lzopio->block.usize <= grub_file_tell (file)) + { + /* EOF, could be possible files with unknown size. */ + if (lzopio->block.usize == 0) + return 0; + + if (jump_block (lzopio) < 0) + goto CORRUPTED; + } + + off = grub_file_tell (file) - lzopio->saved_off; + + while (len != 0 && lzopio->block.usize != 0) + { + grub_size_t to_copy; + + /* Block not decompressed yet. */ + if (!lzopio->block.udata && uncompress_block (lzopio) < 0) + goto CORRUPTED; + + /* Copy requested data into buffer. */ + to_copy = lzopio->block.usize - off; + if (to_copy > len) + to_copy = len; + grub_memcpy (buf, lzopio->block.udata + off, to_copy); + + len -= to_copy; + buf += to_copy; + ret += to_copy; + off = 0; + + /* Read next block if needed. */ + if (len > 0 && read_block_header (lzopio) < 0) + goto CORRUPTED; + } + + return ret; + +CORRUPTED: + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, N_("lzop file corrupted")); + return -1; +} + +/* Release everything, including the underlying file object. */ +static grub_err_t +grub_lzopio_close (grub_file_t file) +{ + grub_lzopio_t lzopio = file->data; + + grub_file_close (lzopio->file); + grub_free (lzopio->block.cdata); + grub_free (lzopio->block.udata); + grub_free (lzopio); + + /* Device must not be closed twice. */ + file->device = 0; + file->name = 0; + return grub_errno; +} + +static struct grub_fs grub_lzopio_fs = { + .name = "lzopio", + .dir = 0, + .open = 0, + .read = grub_lzopio_read, + .close = grub_lzopio_close, + .label = 0, + .next = 0 +}; + +GRUB_MOD_INIT (lzopio) +{ + grub_file_filter_register (GRUB_FILE_FILTER_LZOPIO, grub_lzopio_open); +} + +GRUB_MOD_FINI (lzopio) +{ + grub_file_filter_unregister (GRUB_FILE_FILTER_LZOPIO); +} diff --git a/grub-core/io/offset.c b/grub-core/io/offset.c new file mode 100644 index 000000000..ebed0ebe6 --- /dev/null +++ b/grub-core/io/offset.c @@ -0,0 +1,111 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_offset_file +{ + grub_file_t parent; + grub_off_t off; +}; + +static grub_ssize_t +grub_offset_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_offset_file *data = file->data; + if (grub_file_seek (data->parent, data->off + file->offset) == (grub_off_t) -1) + return -1; + return grub_file_read (data->parent, buf, len); +} + +static grub_err_t +grub_offset_close (grub_file_t file) +{ + struct grub_offset_file *data = file->data; + + if (data->parent) + grub_file_close (data->parent); + + /* No need to close the same device twice. */ + file->device = 0; + + return 0; +} + +static struct grub_fs grub_offset_fs = { + .name = "offset", + .dir = 0, + .open = 0, + .read = grub_offset_read, + .close = grub_offset_close, + .label = 0, + .next = 0 +}; + +void +grub_file_offset_close (grub_file_t file) +{ + struct grub_offset_file *off_data = file->data; + off_data->parent = NULL; + grub_file_close (file); +} + +grub_file_t +grub_file_offset_open (grub_file_t parent, grub_off_t start, grub_off_t size) +{ + struct grub_offset_file *off_data; + grub_file_t off_file, last_off_file; + grub_file_filter_id_t filter; + + off_file = grub_zalloc (sizeof (*off_file)); + off_data = grub_zalloc (sizeof (*off_data)); + if (!off_file || !off_data) + { + grub_free (off_file); + grub_free (off_data); + return 0; + } + + off_data->off = start; + off_data->parent = parent; + + off_file->device = parent->device; + off_file->data = off_data; + off_file->fs = &grub_offset_fs; + off_file->size = size; + + last_off_file = NULL; + for (filter = GRUB_FILE_FILTER_COMPRESSION_FIRST; + off_file && filter <= GRUB_FILE_FILTER_COMPRESSION_LAST; filter++) + if (grub_file_filters_enabled[filter]) + { + last_off_file = off_file; + off_file = grub_file_filters_enabled[filter] (off_file, parent->name); + } + + if (!off_file) + { + off_data->parent = NULL; + grub_file_close (last_off_file); + return 0; + } + return off_file; +} diff --git a/grub-core/io/xzio.c b/grub-core/io/xzio.c new file mode 100644 index 000000000..a3536ad73 --- /dev/null +++ b/grub-core/io/xzio.c @@ -0,0 +1,344 @@ +/* xzio.c - decompression support for xz */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#include "xz.h" +#include "xz_stream.h" + +#define XZBUFSIZ 0x2000 +#define VLI_MAX_DIGITS 9 +#define XZ_STREAM_FOOTER_SIZE 12 + +struct grub_xzio +{ + grub_file_t file; + struct xz_buf buf; + struct xz_dec *dec; + grub_uint8_t inbuf[XZBUFSIZ]; + grub_uint8_t outbuf[XZBUFSIZ]; + grub_off_t saved_offset; +}; + +typedef struct grub_xzio *grub_xzio_t; +static struct grub_fs grub_xzio_fs; + +static grub_size_t +decode_vli (const grub_uint8_t buf[], grub_size_t size_max, + grub_uint64_t *num) +{ + if (size_max == 0) + return 0; + + if (size_max > VLI_MAX_DIGITS) + size_max = VLI_MAX_DIGITS; + + *num = buf[0] & 0x7F; + grub_size_t i = 0; + + while (buf[i++] & 0x80) + { + if (i >= size_max || buf[i] == 0x00) + return 0; + + *num |= (uint64_t) (buf[i] & 0x7F) << (i * 7); + } + + return i; +} + +static grub_ssize_t +read_vli (grub_file_t file, grub_uint64_t *num) +{ + grub_uint8_t buf[VLI_MAX_DIGITS]; + grub_ssize_t read_bytes; + grub_size_t dec; + + read_bytes = grub_file_read (file, buf, VLI_MAX_DIGITS); + if (read_bytes < 0) + return -1; + + dec = decode_vli (buf, read_bytes, num); + grub_file_seek (file, file->offset - (read_bytes - dec)); + return dec; +} + +/* Function xz_dec_run() should consume header and ask for more (XZ_OK) + * else file is corrupted (or options not supported) or not xz. */ +static int +test_header (grub_file_t file) +{ + grub_xzio_t xzio = file->data; + enum xz_ret ret; + + xzio->buf.in_size = grub_file_read (xzio->file, xzio->inbuf, + STREAM_HEADER_SIZE); + + if (xzio->buf.in_size != STREAM_HEADER_SIZE) + return 0; + + ret = xz_dec_run (xzio->dec, &xzio->buf); + + if (ret == XZ_FORMAT_ERROR) + return 0; + + if (ret != XZ_OK) + return 0; + + return 1; +} + +/* Try to find out size of uncompressed data, + * also do some footer sanity checks. */ +static int +test_footer (grub_file_t file) +{ + grub_xzio_t xzio = file->data; + grub_uint8_t footer[FOOTER_MAGIC_SIZE]; + grub_uint32_t backsize; + grub_uint8_t imarker; + grub_uint64_t uncompressed_size_total = 0; + grub_uint64_t uncompressed_size; + grub_uint64_t records; + + grub_file_seek (xzio->file, xzio->file->size - FOOTER_MAGIC_SIZE); + if (grub_file_read (xzio->file, footer, FOOTER_MAGIC_SIZE) + != FOOTER_MAGIC_SIZE + || grub_memcmp (footer, FOOTER_MAGIC, FOOTER_MAGIC_SIZE) != 0) + goto ERROR; + + grub_file_seek (xzio->file, xzio->file->size - 8); + if (grub_file_read (xzio->file, &backsize, sizeof (backsize)) + != sizeof (backsize)) + goto ERROR; + + /* Calculate real backward size. */ + backsize = (grub_le_to_cpu32 (backsize) + 1) * 4; + + /* Set file to the beginning of stream index. */ + grub_file_seek (xzio->file, + xzio->file->size - XZ_STREAM_FOOTER_SIZE - backsize); + + /* Test index marker. */ + if (grub_file_read (xzio->file, &imarker, sizeof (imarker)) + != sizeof (imarker) && imarker != 0x00) + goto ERROR; + + if (read_vli (xzio->file, &records) <= 0) + goto ERROR; + + for (; records != 0; records--) + { + if (read_vli (xzio->file, &uncompressed_size) <= 0) /* Ignore unpadded. */ + goto ERROR; + if (read_vli (xzio->file, &uncompressed_size) <= 0) /* Uncompressed. */ + goto ERROR; + + uncompressed_size_total += uncompressed_size; + } + + file->size = uncompressed_size_total; + grub_file_seek (xzio->file, STREAM_HEADER_SIZE); + return 1; + +ERROR: + return 0; +} + +static grub_file_t +grub_xzio_open (grub_file_t io, + const char *name __attribute__ ((unused))) +{ + grub_file_t file; + grub_xzio_t xzio; + + file = (grub_file_t) grub_zalloc (sizeof (*file)); + if (!file) + return 0; + + xzio = grub_zalloc (sizeof (*xzio)); + if (!xzio) + { + grub_free (file); + return 0; + } + + xzio->file = io; + + file->device = io->device; + file->data = xzio; + file->fs = &grub_xzio_fs; + file->size = GRUB_FILE_SIZE_UNKNOWN; + file->not_easily_seekable = 1; + + if (grub_file_tell (xzio->file) != 0) + grub_file_seek (xzio->file, 0); + + /* Allocated 64KiB for dictionary. + * Decoder will relocate if bigger is needed. */ + xzio->dec = xz_dec_init (1 << 16); + if (!xzio->dec) + { + grub_free (file); + grub_free (xzio); + return 0; + } + + xzio->buf.in = xzio->inbuf; + xzio->buf.out = xzio->outbuf; + xzio->buf.out_size = XZBUFSIZ; + + /* FIXME: don't test footer on not easily seekable files. */ + if (!test_header (file) || !test_footer (file)) + { + grub_errno = GRUB_ERR_NONE; + grub_file_seek (io, 0); + xz_dec_end (xzio->dec); + grub_free (xzio); + grub_free (file); + + return io; + } + + return file; +} + +static grub_ssize_t +grub_xzio_read (grub_file_t file, char *buf, grub_size_t len) +{ + grub_ssize_t ret = 0; + grub_ssize_t readret; + enum xz_ret xzret; + grub_xzio_t xzio = file->data; + grub_off_t current_offset; + + /* If seek backward need to reset decoder and start from beginning of file. + TODO Possible improvement by jumping blocks. */ + if (file->offset < xzio->saved_offset) + { + xz_dec_reset (xzio->dec); + xzio->saved_offset = 0; + xzio->buf.out_pos = 0; + xzio->buf.in_pos = 0; + xzio->buf.in_size = 0; + grub_file_seek (xzio->file, 0); + } + + current_offset = xzio->saved_offset; + + while (len > 0) + { + xzio->buf.out_size = file->offset + ret + len - current_offset; + if (xzio->buf.out_size > XZBUFSIZ) + xzio->buf.out_size = XZBUFSIZ; + /* Feed input. */ + if (xzio->buf.in_pos == xzio->buf.in_size) + { + readret = grub_file_read (xzio->file, xzio->inbuf, XZBUFSIZ); + if (readret < 0) + return -1; + xzio->buf.in_size = readret; + xzio->buf.in_pos = 0; + } + + xzret = xz_dec_run (xzio->dec, &xzio->buf); + switch (xzret) + { + case XZ_MEMLIMIT_ERROR: + case XZ_FORMAT_ERROR: + case XZ_OPTIONS_ERROR: + case XZ_DATA_ERROR: + case XZ_BUF_ERROR: + grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, + N_("xz file corrupted or unsupported block options")); + return -1; + default: + break; + } + + { + grub_off_t new_offset = current_offset + xzio->buf.out_pos; + + if (file->offset <= new_offset) + /* Store first chunk of data in buffer. */ + { + grub_size_t delta = new_offset - (file->offset + ret); + grub_memmove (buf, xzio->buf.out + (xzio->buf.out_pos - delta), + delta); + len -= delta; + buf += delta; + ret += delta; + } + current_offset = new_offset; + } + xzio->buf.out_pos = 0; + + if (xzret == XZ_STREAM_END) /* Stream end, EOF. */ + break; + } + + if (ret >= 0) + xzio->saved_offset = file->offset + ret; + + return ret; +} + +/* Release everything, including the underlying file object. */ +static grub_err_t +grub_xzio_close (grub_file_t file) +{ + grub_xzio_t xzio = file->data; + + xz_dec_end (xzio->dec); + + grub_file_close (xzio->file); + grub_free (xzio); + + /* Device must not be closed twice. */ + file->device = 0; + file->name = 0; + return grub_errno; +} + +static struct grub_fs grub_xzio_fs = { + .name = "xzio", + .dir = 0, + .open = 0, + .read = grub_xzio_read, + .close = grub_xzio_close, + .label = 0, + .next = 0 +}; + +GRUB_MOD_INIT (xzio) +{ + grub_file_filter_register (GRUB_FILE_FILTER_XZIO, grub_xzio_open); +} + +GRUB_MOD_FINI (xzio) +{ + grub_file_filter_unregister (GRUB_FILE_FILTER_XZIO); +} diff --git a/grub-core/kern/acpi.c b/grub-core/kern/acpi.c new file mode 100644 index 000000000..5746ac00c --- /dev/null +++ b/grub-core/kern/acpi.c @@ -0,0 +1,119 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */ +grub_uint8_t +grub_byte_checksum (void *base, grub_size_t size) +{ + grub_uint8_t *ptr; + grub_uint8_t ret = 0; + for (ptr = (grub_uint8_t *) base; ptr < ((grub_uint8_t *) base) + size; + ptr++) + ret += *ptr; + return ret; +} + +static void * +grub_acpi_rsdt_find_table (struct grub_acpi_table_header *rsdt, const char *sig) +{ + grub_size_t s; + grub_unaligned_uint32_t *ptr; + + if (!rsdt) + return 0; + + if (grub_memcmp (rsdt->signature, "RSDT", 4) != 0) + return 0; + + ptr = (grub_unaligned_uint32_t *) (rsdt + 1); + s = (rsdt->length - sizeof (*rsdt)) / sizeof (grub_uint32_t); + for (; s; s--, ptr++) + { + struct grub_acpi_table_header *tbl; + tbl = (struct grub_acpi_table_header *) (grub_addr_t) ptr->val; + if (grub_memcmp (tbl->signature, sig, 4) == 0) + return tbl; + } + return 0; +} + +static void * +grub_acpi_xsdt_find_table (struct grub_acpi_table_header *xsdt, const char *sig) +{ + grub_size_t s; + grub_unaligned_uint64_t *ptr; + + if (!xsdt) + return 0; + + if (grub_memcmp (xsdt->signature, "XSDT", 4) != 0) + return 0; + + ptr = (grub_unaligned_uint64_t *) (xsdt + 1); + s = (xsdt->length - sizeof (*xsdt)) / sizeof (grub_uint32_t); + for (; s; s--, ptr++) + { + struct grub_acpi_table_header *tbl; +#if GRUB_CPU_SIZEOF_VOID_P != 8 + if (ptr->val >> 32) + continue; +#endif + tbl = (struct grub_acpi_table_header *) (grub_addr_t) ptr->val; + if (grub_memcmp (tbl->signature, sig, 4) == 0) + return tbl; + } + return 0; +} + +struct grub_acpi_fadt * +grub_acpi_find_fadt (void) +{ + struct grub_acpi_fadt *fadt = 0; + struct grub_acpi_rsdp_v10 *rsdpv1; + struct grub_acpi_rsdp_v20 *rsdpv2; + rsdpv1 = grub_machine_acpi_get_rsdpv1 (); + if (rsdpv1) + fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *) + (grub_addr_t) rsdpv1->rsdt_addr, + GRUB_ACPI_FADT_SIGNATURE); + if (fadt) + return fadt; + rsdpv2 = grub_machine_acpi_get_rsdpv2 (); + if (rsdpv2) + fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *) + (grub_addr_t) rsdpv2->rsdpv1.rsdt_addr, + GRUB_ACPI_FADT_SIGNATURE); + if (fadt) + return fadt; + if (rsdpv2 +#if GRUB_CPU_SIZEOF_VOID_P != 8 + && !(rsdpv2->xsdt_addr >> 32) +#endif + ) + fadt = grub_acpi_xsdt_find_table ((struct grub_acpi_table_header *) + (grub_addr_t) rsdpv2->xsdt_addr, + GRUB_ACPI_FADT_SIGNATURE); + if (fadt) + return fadt; + return 0; +} diff --git a/grub-core/kern/arm/cache.S b/grub-core/kern/arm/cache.S new file mode 100644 index 000000000..354a069fe --- /dev/null +++ b/grub-core/kern/arm/cache.S @@ -0,0 +1,123 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .file "cache.S" + .text + .syntax unified +#if !defined (__thumb2__) || !defined (ARMV7) + .arm +#else + .thumb +#endif + +#if !defined (ARMV6) && !defined (ARMV7) +# error Unsupported architecture version! +#endif + + .align 2 + +/* + * Simple cache maintenance functions + */ + +@ r0 - *beg (inclusive) +@ r1 - *end (exclusive) +@void grub_arm_clean_dcache_range (grub_addr_t start, grub_addr_t end, grub_addr_t dlinesz) +#ifdef ARMV6 +FUNCTION(grub_arm_clean_dcache_range_armv6) +#else +FUNCTION(grub_arm_clean_dcache_range_armv7) +#endif + DSB + @ Clean data cache for range to point-of-unification +1: cmp r0, r1 + bge 2f +#ifdef ARMV6 + mcr p15, 0, r0, c7, c10, 1 @ Clean data cache line by MVA +#else + mcr p15, 0, r0, c7, c11, 1 @ DCCMVAU +#endif + add r0, r0, r2 @ Next line + b 1b +2: DSB + bx lr + +@ r0 - *beg (inclusive) +@ r1 - *end (exclusive) +#ifdef ARMV6 +FUNCTION(grub_arm_invalidate_icache_range_armv6) +#else +FUNCTION(grub_arm_invalidate_icache_range_armv7) +#endif + @ Invalidate instruction cache for range to point-of-unification +1: cmp r0, r1 + bge 2f + mcr p15, 0, r0, c7, c5, 1 @ ICIMVAU + add r0, r0, r2 @ Next line + b 1b + @ Branch predictor invalidate all +2: mcr p15, 0, r0, c7, c5, 6 @ BPIALL + DSB + ISB + bx lr + +#ifdef ARMV6 +FUNCTION(grub_arm_disable_caches_mmu_armv6) +#else +FUNCTION(grub_arm_disable_caches_mmu_armv7) +#endif + + push {r4, lr} + + @ disable D-cache + mrc p15, 0, r0, c1, c0, 0 + bic r0, r0, #(1 << 2) + mcr p15, 0, r0, c1, c0, 0 + DSB + ISB + + @ clean/invalidate D-cache + bl clean_invalidate_dcache + + @ disable I-cache + mrc p15, 0, r0, c1, c0, 0 + bic r0, r0, #(1 << 12) + mcr p15, 0, r0, c1, c0, 0 + DSB + ISB + + @ invalidate I-cache (also invalidates branch predictors) + mcr p15, 0, r0, c7, c5, 0 + DSB + ISB + + @ clear SCTLR M bit + mrc p15, 0, r0, c1, c0, 0 + bic r0, r0, #(1 << 0) + mcr p15, 0, r0, c1, c0, 0 + + mcr p15, 0, r0, c8, c7, 0 @ invalidate TLB + mcr p15, 0, r0, c7, c5, 6 @ invalidate branch predictor + DSB + ISB + + pop {r4, lr} + bx lr + diff --git a/grub-core/kern/arm/cache.c b/grub-core/kern/arm/cache.c new file mode 100644 index 000000000..34154ccdb --- /dev/null +++ b/grub-core/kern/arm/cache.c @@ -0,0 +1,274 @@ +#include +#include +#include +#ifdef GRUB_MACHINE_UBOOT +#include +#include +#include +#endif + +/* This is only about cache architecture. It doesn't imply + the CPU architecture. */ +static enum + { + ARCH_UNKNOWN, + ARCH_ARMV5_WRITE_THROUGH, + ARCH_ARMV6, + ARCH_ARMV6_UNIFIED, + ARCH_ARMV7 + } type = ARCH_UNKNOWN; + +static int is_v6_mmu; + +static grub_uint32_t grub_arch_cache_dlinesz; +static grub_uint32_t grub_arch_cache_ilinesz; +static grub_uint32_t grub_arch_cache_max_linesz; + +/* Prototypes for asm functions. */ +void grub_arm_clean_dcache_range_armv6 (grub_addr_t start, grub_addr_t end, + grub_addr_t dlinesz); +void grub_arm_clean_dcache_range_armv7 (grub_addr_t start, grub_addr_t end, + grub_addr_t dlinesz); +void grub_arm_invalidate_icache_range_armv6 (grub_addr_t start, grub_addr_t end, + grub_addr_t dlinesz); +void grub_arm_invalidate_icache_range_armv7 (grub_addr_t start, grub_addr_t end, + grub_addr_t dlinesz); +void grub_arm_disable_caches_mmu_armv6 (void); +void grub_arm_disable_caches_mmu_armv7 (void); +grub_uint32_t grub_arm_main_id (void); +grub_uint32_t grub_arm_cache_type (void); + +static void +probe_caches (void) +{ + grub_uint32_t main_id, cache_type; + + /* Read main ID Register */ + main_id = grub_arm_main_id (); + + switch ((main_id >> 16) & 0xf) + { + case 0x3: + case 0x4: + case 0x5: + case 0x6: + is_v6_mmu = 0; + break; + case 0x7: + case 0xf: + is_v6_mmu = 1; + break; + default: + grub_fatal ("Unsupported ARM ID 0x%x", main_id); + } + + /* Read Cache Type Register */ + cache_type = grub_arm_cache_type (); + + switch (cache_type >> 24) + { + case 0x00: + case 0x01: + grub_arch_cache_dlinesz = 8 << ((cache_type >> 12) & 3); + grub_arch_cache_ilinesz = 8 << (cache_type & 3); + type = ARCH_ARMV5_WRITE_THROUGH; + break; + case 0x04: + case 0x0a: + case 0x0c: + case 0x0e: + case 0x1c: + grub_arch_cache_dlinesz = 8 << ((cache_type >> 12) & 3); + grub_arch_cache_ilinesz = 8 << (cache_type & 3); + type = ARCH_ARMV6_UNIFIED; + break; + case 0x05: + case 0x0b: + case 0x0d: + case 0x0f: + case 0x1d: + grub_arch_cache_dlinesz = 8 << ((cache_type >> 12) & 3); + grub_arch_cache_ilinesz = 8 << (cache_type & 3); + type = ARCH_ARMV6; + break; + case 0x80 ... 0x8f: + grub_arch_cache_dlinesz = 4 << ((cache_type >> 16) & 0xf); + grub_arch_cache_ilinesz = 4 << (cache_type & 0xf); + type = ARCH_ARMV7; + break; + default: + grub_fatal ("Unsupported cache type 0x%x", cache_type); + } + if (grub_arch_cache_dlinesz > grub_arch_cache_ilinesz) + grub_arch_cache_max_linesz = grub_arch_cache_dlinesz; + else + grub_arch_cache_max_linesz = grub_arch_cache_ilinesz; +} + +#ifdef GRUB_MACHINE_UBOOT + +static void subdivide (grub_uint32_t *table, grub_uint32_t *subtable, + grub_uint32_t addr) +{ + grub_uint32_t j; + addr = addr >> 20 << 20; + table[addr >> 20] = (grub_addr_t) subtable | 1; + for (j = 0; j < 256; j++) + subtable[j] = addr | (j << 12) + | (3 << 4) | (3 << 6) | (3 << 8) | (3 << 10) + | (0 << 3) | (1 << 2) | 2; +} + +void +grub_arm_enable_caches_mmu (void) +{ + grub_uint32_t *table; + grub_uint32_t i; + grub_uint32_t border_crossing = 0; + grub_uint32_t *subtable; + struct sys_info *si = grub_uboot_get_sys_info (); + + if (!si || (si->mr_no == 0)) + { + grub_printf ("couldn't get memory map, not enabling caches"); + grub_errno = GRUB_ERR_NONE; + return; + } + + if (type == ARCH_UNKNOWN) + probe_caches (); + + for (i = 0; (signed) i < si->mr_no; i++) + { + if (si->mr[i].start & ((1 << 20) - 1)) + border_crossing++; + if ((si->mr[i].start + si->mr[i].size) & ((1 << 20) - 1)) + border_crossing++; + } + + grub_printf ("%d crossers\n", border_crossing); + + table = grub_memalign (1 << 14, (1 << 14) + (border_crossing << 10)); + if (!table) + { + grub_printf ("couldn't allocate place for MMU table, not enabling caches"); + grub_errno = GRUB_ERR_NONE; + return; + } + + subtable = table + (1 << 12); + /* Map all unknown as device. */ + for (i = 0; i < (1 << 12); i++) + table[i] = (i << 20) | (3 << 10) | (0 << 3) | (1 << 2) | 2; + /* + Device: TEX= 0, C=0, B=1 + normal: TEX= 0, C=1, B=1 + AP = 3 + IMP = 0 + Domain = 0 +*/ + + for (i = 0; (signed) i < si->mr_no; i++) + { + if (si->mr[i].start & ((1 << 20) - 1)) + { + subdivide (table, subtable, si->mr[i].start); + subtable += (1 << 8); + } + if ((si->mr[i].start + si->mr[i].size) & ((1 << 20) - 1)) + { + subdivide (table, subtable, si->mr[i].start + si->mr[i].size); + subtable += (1 << 8); + } + } + + for (i = 0; (signed) i < si->mr_no; i++) + if ((si->mr[i].flags & MR_ATTR_MASK) == MR_ATTR_DRAM + || (si->mr[i].flags & MR_ATTR_MASK) == MR_ATTR_SRAM + || (si->mr[i].flags & MR_ATTR_MASK) == MR_ATTR_FLASH) + { + grub_uint32_t cur, end; + cur = si->mr[i].start; + end = si->mr[i].start + si->mr[i].size; + while (cur < end) + { + grub_uint32_t *st; + if ((table[cur >> 20] & 3) == 2) + { + cur = cur >> 20 << 20; + table[cur >> 20] = cur | (3 << 10) | (1 << 3) | (1 << 2) | 2; + cur += (1 << 20); + continue; + } + cur = cur >> 12 << 12; + st = (grub_uint32_t *) (table[cur >> 20] & ~0x3ff); + st[(cur >> 12) & 0xff] = cur | (3 << 4) | (3 << 6) + | (3 << 8) | (3 << 10) + | (1 << 3) | (1 << 2) | 2; + cur += (1 << 12); + } + } + + grub_printf ("MMU tables generated\n"); + if (is_v6_mmu) + grub_arm_clear_mmu_v6 (); + + grub_printf ("enabling MMU\n"); + grub_arm_enable_mmu (table); + grub_printf ("MMU enabled\n"); +} + +#endif + +void +grub_arch_sync_caches (void *address, grub_size_t len) +{ + grub_addr_t start = (grub_addr_t) address; + grub_addr_t end = start + len; + + if (type == ARCH_UNKNOWN) + probe_caches (); + start = ALIGN_DOWN (start, grub_arch_cache_max_linesz); + end = ALIGN_UP (end, grub_arch_cache_max_linesz); + switch (type) + { + case ARCH_ARMV6: + grub_arm_clean_dcache_range_armv6 (start, end, grub_arch_cache_dlinesz); + grub_arm_invalidate_icache_range_armv6 (start, end, + grub_arch_cache_ilinesz); + break; + case ARCH_ARMV7: + grub_arm_clean_dcache_range_armv7 (start, end, grub_arch_cache_dlinesz); + grub_arm_invalidate_icache_range_armv7 (start, end, + grub_arch_cache_ilinesz); + break; + /* Nothing to do. */ + case ARCH_ARMV5_WRITE_THROUGH: + case ARCH_ARMV6_UNIFIED: + break; + /* Pacify GCC. */ + case ARCH_UNKNOWN: + break; + } +} + +void +grub_arm_disable_caches_mmu (void) +{ + if (type == ARCH_UNKNOWN) + probe_caches (); + switch (type) + { + case ARCH_ARMV5_WRITE_THROUGH: + case ARCH_ARMV6_UNIFIED: + case ARCH_ARMV6: + grub_arm_disable_caches_mmu_armv6 (); + break; + case ARCH_ARMV7: + grub_arm_disable_caches_mmu_armv7 (); + break; + /* Pacify GCC. */ + case ARCH_UNKNOWN: + break; + } +} diff --git a/grub-core/kern/arm/cache_armv6.S b/grub-core/kern/arm/cache_armv6.S new file mode 100644 index 000000000..dfaded0eb --- /dev/null +++ b/grub-core/kern/arm/cache_armv6.S @@ -0,0 +1,72 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .file "cache_armv6.S" + .text + .syntax unified + .arm + +# define DMB mcr p15, 0, r0, c7, c10, 5 +# define DSB mcr p15, 0, r0, c7, c10, 4 +# define ISB mcr p15, 0, r0, c7, c5, 4 +#define ARMV6 1 + +clean_invalidate_dcache: + mcr p15, 0, r0, c7, c14, 0 @ Clean/Invalidate D-cache + bx lr + +#include "cache.S" + +FUNCTION(grub_arm_main_id) + mrc p15, 0, r0, c0, c0, 0 + bx lr + +FUNCTION(grub_arm_cache_type) + mrc p15, 0, r0, c0, c0, 1 + bx lr + +FUNCTION(grub_arm_clear_mmu_v6) + mov r0, #0 + mcr p15, 0, r0, c2, c0, 2 + bx lr + +FUNCTION(grub_arm_enable_mmu) + mcr p15, 0, r0, c2, c0, 0 + + mvn r0, #0 + mcr p15, 0, r0, c3, c0, 0 + + mrc p15, 0, r0, c1, c0, 0 + bic r0, r0, #(1 << 23) + mcr p15, 0, r0, c1, c0, 0 + + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #(1 << 0) + mcr p15, 0, r0, c1, c0, 0 + + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #(1 << 2) + mcr p15, 0, r0, c1, c0, 0 + + mrc p15, 0, r0, c1, c0, 0 + orr r0, r0, #(1 << 12) + mcr p15, 0, r0, c1, c0, 0 + + bx lr diff --git a/grub-core/kern/arm/cache_armv7.S b/grub-core/kern/arm/cache_armv7.S new file mode 100644 index 000000000..1ef2754af --- /dev/null +++ b/grub-core/kern/arm/cache_armv7.S @@ -0,0 +1,126 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .file "cache_armv7.S" + .text + .syntax unified +#if !defined (__thumb2__) + .arch armv7a + .arm +#else + .arch armv7 + .thumb +#endif +# define DMB dmb +# define DSB dsb +# define ISB isb +#define ARMV7 1 + + @ r0 - CLIDR + @ r1 - LoC + @ r2 - current level + @ r3 - num sets + @ r4 - num ways + @ r5 - current set + @ r6 - current way + @ r7 - line size + @ r8 - scratch + @ r9 - scratch + @ r10 - scratch + @ r11 - scratch +clean_invalidate_dcache: + push {r4-r12, lr} + mrc p15, 1, r0, c0, c0, 1 @ Read CLIDR + lsr r1, r0, #24 @ Extract LoC + and r1, r1, #0x7 + + mov r2, #0 @ First level, L1 +2: and r8, r0, #7 @ cache type at current level + cmp r8, #2 + blt 5f @ instruction only, or none, skip level + + @ set current cache level/type (for CCSIDR read) + lsl r8, r2, #1 + mcr p15, 2, r8, c0, c0, 0 @ Write CSSELR (level, type: data/uni) + + @ read current cache information + mrc p15, 1, r8, c0, c0, 0 @ Read CCSIDR + lsr r3, r8, #13 @ Number of sets -1 + + @ Keep only 14 bits of r3 + lsl r3, r3, #18 + lsr r3, r3, #18 + + lsr r4, r8, #3 @ Number of ways -1 + + @ Keep only 9 bits of r4 + lsl r4, r4, #23 + lsr r4, r4, #23 + + and r7, r8, #7 @ log2(line size in words) - 2 + add r7, r7, #2 @ adjust + mov r8, #1 + lsl r7, r8, r7 @ -> line size in words + lsl r7, r7, #2 @ -> bytes + + @ set loop + mov r5, #0 @ current set = 0 +3: lsl r8, r2, #1 @ insert level + clz r9, r7 @ calculate set field offset + mov r10, #31 + sub r9, r10, r9 + lsl r10, r5, r9 + orr r8, r8, r10 @ insert set field + + @ way loop + @ calculate way field offset + mov r6, #0 @ current way = 0 + add r10, r4, #1 + clz r9, r10 @ r9 = way field offset + add r9, r9, #1 +4: lsl r10, r6, r9 + orr r11, r8, r10 @ insert way field + + @ clean and invalidate line by set/way + mcr p15, 0, r11, c7, c14, 2 @ DCCISW + + @ next way + add r6, r6, #1 + cmp r6, r4 + ble 4b + + @ next set + add r5, r5, #1 + cmp r5, r3 + ble 3b + + @ next level +5: lsr r0, r0, #3 @ align next level CLIDR 'type' field + add r2, r2, #1 @ increment cache level counter + cmp r2, r1 + blt 2b @ outer loop + + @ return +6: DSB + ISB + pop {r4-r12, lr} + bx lr + +#include "cache.S" \ No newline at end of file diff --git a/grub-core/kern/arm/compiler-rt.S b/grub-core/kern/arm/compiler-rt.S new file mode 100644 index 000000000..645b42f50 --- /dev/null +++ b/grub-core/kern/arm/compiler-rt.S @@ -0,0 +1,86 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "misc.S" + .text + .syntax unified +#if !defined (__thumb2__) + .arm +#else + .thumb +#endif + + .align 2 + +FUNCTION(__muldi3) +FUNCTION(__aeabi_lmul) + stmfd sp!, {r4, fp} + add fp, sp, #4 + sub sp, sp, #16 + str r0, [fp, #-12] + str r1, [fp, #-8] + str r2, [fp, #-20] + str r3, [fp, #-16] + ldr r3, [fp, #-8] + ldr r2, [fp, #-20] + mul r2, r3, r2 + ldr r3, [fp, #-16] + ldr r1, [fp, #-12] + mul r3, r1, r3 + add r2, r2, r3 + ldr r0, [fp, #-12] + ldr r1, [fp, #-20] + umull r3, r4, r0, r1 + add r2, r2, r4 + mov r4, r2 + mov r0, r3 + mov r1, r4 + mov sp, fp + sub sp, sp, #4 + ldmfd sp!, {r4, fp} + bx lr + + .macro division32 parent + + sub sp, sp, #8 @ Allocate naturally aligned 64-bit space + stmfd sp!, {r3,lr} @ Dummy r3 to maintain stack alignment + add r2, sp, #8 @ Set r2 to address of 64-bit space + bl \parent + ldr r1, [sp, #8] @ Extract remainder + ldmfd sp!, {r3,lr} @ Pop into an unused arg/scratch register + add sp, sp, #8 + bx lr + .endm + +FUNCTION(__aeabi_uidivmod) + division32 grub_divmod32 +FUNCTION(__aeabi_idivmod) + division32 grub_divmod32s + +/* + * Null divide-by-zero handler + */ +FUNCTION(__aeabi_unwind_cpp_pr0) +FUNCTION(raise) + mov r0, #0 + bx lr + + END diff --git a/grub-core/kern/arm/dl.c b/grub-core/kern/arm/dl.c new file mode 100644 index 000000000..eab9d17ff --- /dev/null +++ b/grub-core/kern/arm/dl.c @@ -0,0 +1,280 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +struct trampoline_arm +{ +#define ARM_LOAD_IP 0xe59fc000 +#define ARM_BX 0xe12fff1c +#define ARM_MOV_PC 0xe1a0f00c + grub_uint32_t load_ip; /* ldr ip, [pc] */ + grub_uint32_t bx; /* bx ip or mov pc, ip*/ + grub_uint32_t addr; +}; + +static grub_uint16_t thumb_template[8] = + { + 0x468c, /* mov ip, r1 */ + 0x4903, /* ldr r1, [pc, #12] ; (10 <.text+0x10>) */ + /* Exchange R1 and IP in limited Thumb instruction set. + IP gets negated but we compensate it by C code. */ + /* R1 IP */ + /* -A R1 */ + 0x4461, /* add r1, ip */ /* R1-A R1 */ + 0x4249, /* negs r1, r1 */ /* A-R1 R1 */ + 0x448c, /* add ip, r1 */ /* A-R1 A */ + 0x4249, /* negs r1, r1 */ /* R1-A A */ + 0x4461, /* add r1, ip */ /* R1 A */ + 0x4760 /* bx ip */ + }; + +struct trampoline_thumb +{ + grub_uint16_t template[8]; + grub_uint32_t neg_addr; +}; + +#pragma GCC diagnostic ignored "-Wcast-align" + +grub_err_t +grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, + grub_size_t *got) +{ + const Elf_Ehdr *e = ehdr; + const Elf_Shdr *s; + unsigned i; + + *tramp = 0; + *got = 0; + + for (i = 0, s = (const Elf_Shdr *) ((grub_addr_t) e + e->e_shoff); + i < e->e_shnum; + i++, s = (const Elf_Shdr *) ((grub_addr_t) s + e->e_shentsize)) + if (s->sh_type == SHT_REL) + { + const Elf_Rel *rel, *max; + + for (rel = (const Elf_Rel *) ((grub_addr_t) e + s->sh_offset), + max = (const Elf_Rel *) ((grub_addr_t) rel + s->sh_size); + rel + 1 <= max; + rel = (const Elf_Rel *) ((grub_addr_t) rel + s->sh_entsize)) + switch (ELF_R_TYPE (rel->r_info)) + { + case R_ARM_CALL: + case R_ARM_JUMP24: + { + *tramp += sizeof (struct trampoline_arm); + break; + } + case R_ARM_THM_CALL: + case R_ARM_THM_JUMP24: + case R_ARM_THM_JUMP19: + { + *tramp += sizeof (struct trampoline_thumb); + break; + } + } + } + + grub_dprintf ("dl", "trampoline size %x\n", *tramp); + + return GRUB_ERR_NONE; +} + +/************************************************* + * Runtime dynamic linker with helper functions. * + *************************************************/ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + Elf_Rel *rel, *max; + + for (rel = (Elf_Rel *) ((char *) ehdr + s->sh_offset), + max = (Elf_Rel *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf_Rel *) ((char *) rel + s->sh_entsize)) + { + Elf_Addr *target, sym_addr; + grub_err_t retval; + Elf_Sym *sym; + + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + target = (void *) ((char *) seg->addr + rel->r_offset); + sym = (Elf_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + + sym_addr = sym->st_value; + + switch (ELF_R_TYPE (rel->r_info)) + { + case R_ARM_ABS32: + { + /* Data will be naturally aligned */ + retval = grub_arm_reloc_abs32 (target, sym_addr); + if (retval != GRUB_ERR_NONE) + return retval; + } + break; + case R_ARM_CALL: + case R_ARM_JUMP24: + { + grub_int32_t offset; + + sym_addr += grub_arm_jump24_get_offset (target); + offset = sym_addr - (grub_uint32_t) target; + + if ((sym_addr & 1) || !grub_arm_jump24_check_offset (offset)) + { + struct trampoline_arm *tp = mod->trampptr; + mod->trampptr = tp + 1; + tp->load_ip = ARM_LOAD_IP; + tp->bx = (sym_addr & 1) ? ARM_BX : ARM_MOV_PC; + tp->addr = sym_addr + 8; + offset = (grub_uint8_t *) tp - (grub_uint8_t *) target - 8; + } + if (!grub_arm_jump24_check_offset (offset)) + return grub_error (GRUB_ERR_BAD_MODULE, + "trampoline out of range"); + grub_arm_jump24_set_offset (target, offset); + } + break; + case R_ARM_THM_CALL: + case R_ARM_THM_JUMP24: + { + /* Thumb instructions can be 16-bit aligned */ + grub_int32_t offset; + + sym_addr += grub_arm_thm_call_get_offset ((grub_uint16_t *) target); + + grub_dprintf ("dl", " sym_addr = 0x%08x\n", sym_addr); + if (ELF_ST_TYPE (sym->st_info) != STT_FUNC) + sym_addr |= 1; + + offset = sym_addr - (grub_uint32_t) target; + + grub_dprintf("dl", " BL*: target=%p, sym_addr=0x%08x, offset=%d\n", + target, sym_addr, offset); + + if (!(sym_addr & 1) || (offset < -0x200000 || offset >= 0x200000)) + { + struct trampoline_thumb *tp = mod->trampptr; + mod->trampptr = tp + 1; + grub_memcpy (tp->template, thumb_template, sizeof (tp->template)); + tp->neg_addr = -sym_addr - 4; + offset = ((grub_uint8_t *) tp - (grub_uint8_t *) target - 4) | 1; + } + + if (offset < -0x200000 || offset >= 0x200000) + return grub_error (GRUB_ERR_BAD_MODULE, + "trampoline out of range"); + + grub_dprintf ("dl", " relative destination = %p\n", + (char *) target + offset); + + retval = grub_arm_thm_call_set_offset ((grub_uint16_t *) target, offset); + if (retval != GRUB_ERR_NONE) + return retval; + } + break; + /* Happens when compiled with -march=armv4. Since currently we need + at least armv5, keep bx as-is. + */ + case R_ARM_V4BX: + break; + case R_ARM_THM_MOVW_ABS_NC: + case R_ARM_THM_MOVT_ABS: + { + grub_uint32_t offset; + offset = grub_arm_thm_movw_movt_get_value((grub_uint16_t *) target); + offset += sym_addr; + + if (ELF_R_TYPE (rel->r_info) == R_ARM_THM_MOVT_ABS) + offset >>= 16; + else + offset &= 0xffff; + + grub_arm_thm_movw_movt_set_value((grub_uint16_t *) target, offset); + } + break; + case R_ARM_THM_JUMP19: + { + /* Thumb instructions can be 16-bit aligned */ + grub_int32_t offset; + + sym_addr += grub_arm_thm_jump19_get_offset ((grub_uint16_t *) target); + + if (ELF_ST_TYPE (sym->st_info) != STT_FUNC) + sym_addr |= 1; + + offset = sym_addr - (grub_uint32_t) target; + + if (!grub_arm_thm_jump19_check_offset (offset) + || !(sym_addr & 1)) + { + struct trampoline_thumb *tp = mod->trampptr; + mod->trampptr = tp + 1; + grub_memcpy (tp->template, thumb_template, sizeof (tp->template)); + tp->neg_addr = -sym_addr - 4; + offset = ((grub_uint8_t *) tp - (grub_uint8_t *) target - 4) | 1; + } + + if (!grub_arm_thm_jump19_check_offset (offset)) + return grub_error (GRUB_ERR_BAD_MODULE, + "trampoline out of range"); + + grub_arm_thm_jump19_set_offset ((grub_uint16_t *) target, offset); + } + break; + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + + return GRUB_ERR_NONE; +} + + +/* + * Check if EHDR is a valid ELF header. + */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS32 + || e->e_ident[EI_DATA] != ELFDATA2LSB || e->e_machine != EM_ARM) + return grub_error (GRUB_ERR_BAD_OS, + N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/arm/dl_helper.c b/grub-core/kern/arm/dl_helper.c new file mode 100644 index 000000000..21d77f763 --- /dev/null +++ b/grub-core/kern/arm/dl_helper.c @@ -0,0 +1,245 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +static inline grub_uint32_t +thumb_get_instruction_word (grub_uint16_t *target) +{ + /* Extract instruction word in alignment-safe manner */ + return grub_le_to_cpu16 ((*target)) << 16 | grub_le_to_cpu16 (*(target + 1)); +} + +static inline void +thumb_set_instruction_word (grub_uint16_t *target, grub_uint32_t insword) +{ + *target = grub_cpu_to_le16 (insword >> 16); + *(target + 1) = grub_cpu_to_le16 (insword & 0xffff); +} + +/* + * R_ARM_ABS32 + * + * Simple relocation of 32-bit value (in literal pool) + */ +grub_err_t +grub_arm_reloc_abs32 (Elf32_Word *target, Elf32_Addr sym_addr) +{ + Elf32_Addr tmp; + + tmp = grub_le_to_cpu32 (*target); + tmp += sym_addr; + *target = grub_cpu_to_le32 (tmp); + + return GRUB_ERR_NONE; +} + +/******************************************************************** + * Thumb (T32) relocations: * + * * + * 32-bit Thumb instructions can be 16-bit aligned, and are fetched * + * little-endian, requiring some additional fiddling. * + ********************************************************************/ + +grub_int32_t +grub_arm_thm_call_get_offset (grub_uint16_t *target) +{ + grub_uint32_t sign, j1, j2; + grub_uint32_t insword; + grub_int32_t offset; + + insword = thumb_get_instruction_word (target); + + /* Extract bitfields from instruction words */ + sign = (insword >> 26) & 1; + j1 = (insword >> 13) & 1; + j2 = (insword >> 11) & 1; + offset = (sign << 24) | ((~(j1 ^ sign) & 1) << 23) | + ((~(j2 ^ sign) & 1) << 22) | + ((insword & 0x03ff0000) >> 4) | ((insword & 0x000007ff) << 1); + + /* Sign adjust and calculate offset */ + if (offset & (1 << 24)) + offset -= (1 << 25); + + return offset; +} + +grub_err_t +grub_arm_thm_call_set_offset (grub_uint16_t *target, grub_int32_t offset) +{ + grub_uint32_t sign, j1, j2; + const grub_uint32_t insmask = 0xf800d000; + grub_uint32_t insword; + int is_blx; + + insword = thumb_get_instruction_word (target); + + if (((insword >> 12) & 0xd) == 0xc) + is_blx = 1; + else + is_blx = 0; + + if (!is_blx && !(offset & 1)) + return grub_error (GRUB_ERR_BAD_MODULE, "bl/b.w targettting ARM"); + + /* Transform blx into bl if necessarry. */ + if (is_blx && (offset & 1)) + insword |= (1 << 12); + + /* Reassemble instruction word */ + sign = (offset >> 24) & 1; + j1 = sign ^ (~(offset >> 23) & 1); + j2 = sign ^ (~(offset >> 22) & 1); + insword = (insword & insmask) | + (sign << 26) | + (((offset >> 12) & 0x03ff) << 16) | + (j1 << 13) | (j2 << 11) | ((offset >> 1) & 0x07ff); + + thumb_set_instruction_word (target, insword); + + grub_dprintf ("dl", " *insword = 0x%08x", insword); + + return GRUB_ERR_NONE; +} + +grub_int32_t +grub_arm_thm_jump19_get_offset (grub_uint16_t *target) +{ + grub_int32_t offset; + grub_uint32_t insword; + + insword = thumb_get_instruction_word (target); + + /* Extract and sign extend offset */ + offset = ((insword >> 26) & 1) << 19 + | ((insword >> 11) & 1) << 18 + | ((insword >> 13) & 1) << 17 + | ((insword >> 16) & 0x3f) << 11 + | (insword & 0x7ff); + offset <<= 1; + if (offset & (1 << 20)) + offset -= (1 << 21); + + return offset; +} + +void +grub_arm_thm_jump19_set_offset (grub_uint16_t *target, grub_int32_t offset) +{ + grub_uint32_t insword; + const grub_uint32_t insmask = 0xfbc0d000; + + offset >>= 1; + offset &= 0xfffff; + + insword = thumb_get_instruction_word (target); + + /* Reassemble instruction word and write back */ + insword &= insmask; + insword |= ((offset >> 19) & 1) << 26 + | ((offset >> 18) & 1) << 11 + | ((offset >> 17) & 1) << 13 + | ((offset >> 11) & 0x3f) << 16 + | (offset & 0x7ff); + thumb_set_instruction_word (target, insword); +} + +int +grub_arm_thm_jump19_check_offset (grub_int32_t offset) +{ + if ((offset > 1048574) || (offset < -1048576)) + return 0; + return 1; +} + +grub_uint16_t +grub_arm_thm_movw_movt_get_value (grub_uint16_t *target) +{ + grub_uint32_t insword; + + insword = thumb_get_instruction_word (target); + + return ((insword & 0xf0000) >> 4) | ((insword & 0x04000000) >> 15) | \ + ((insword & 0x7000) >> 4) | (insword & 0xff); +} + +void +grub_arm_thm_movw_movt_set_value (grub_uint16_t *target, grub_uint16_t value) +{ + grub_uint32_t insword; + const grub_uint32_t insmask = 0xfbf08f00; + + insword = thumb_get_instruction_word (target); + insword &= insmask; + + insword |= ((value & 0xf000) << 4) | ((value & 0x0800) << 15) | \ + ((value & 0x0700) << 4) | (value & 0xff); + + thumb_set_instruction_word (target, insword); +} + + +/*********************************************************** + * ARM (A32) relocations: * + * * + * ARM instructions are 32-bit in size and 32-bit aligned. * + ***********************************************************/ + +grub_int32_t +grub_arm_jump24_get_offset (grub_uint32_t *target) +{ + grub_int32_t offset; + grub_uint32_t insword; + + insword = grub_le_to_cpu32 (*target); + + offset = (insword & 0x00ffffff) << 2; + if (offset & 0x02000000) + offset -= 0x04000000; + return offset; +} + +int +grub_arm_jump24_check_offset (grub_int32_t offset) +{ + if (offset >= 0x02000000 || offset < -0x02000000) + return 0; + return 1; +} + +void +grub_arm_jump24_set_offset (grub_uint32_t *target, + grub_int32_t offset) +{ + grub_uint32_t insword; + + insword = grub_le_to_cpu32 (*target); + + insword &= 0xff000000; + insword |= (offset >> 2) & 0x00ffffff; + + *target = grub_cpu_to_le32 (insword); +} diff --git a/grub-core/kern/arm/efi/init.c b/grub-core/kern/arm/efi/init.c new file mode 100644 index 000000000..06df60e2f --- /dev/null +++ b/grub-core/kern/arm/efi/init.c @@ -0,0 +1,74 @@ +/* init.c - initialize an arm-based EFI system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +static grub_uint64_t tmr; +static grub_efi_event_t tmr_evt; + +static grub_uint64_t +grub_efi_get_time_ms (void) +{ + return tmr; +} + +static void +increment_timer (grub_efi_event_t event __attribute__ ((unused)), + void *context __attribute__ ((unused))) +{ + tmr += 10; +} + +void +grub_machine_init (void) +{ + grub_efi_boot_services_t *b; + + grub_efi_init (); + + b = grub_efi_system_table->boot_services; + + efi_call_5 (b->create_event, GRUB_EFI_EVT_TIMER | GRUB_EFI_EVT_NOTIFY_SIGNAL, + GRUB_EFI_TPL_CALLBACK, increment_timer, NULL, &tmr_evt); + efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 100000); + + grub_install_get_time_ms (grub_efi_get_time_ms); +} + +void +grub_machine_fini (int flags) +{ + grub_efi_boot_services_t *b; + + if (!(flags & GRUB_LOADER_FLAG_NORETURN)) + return; + + b = grub_efi_system_table->boot_services; + + efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_CANCEL, 0); + efi_call_1 (b->close_event, tmr_evt); + + grub_efi_fini (); +} diff --git a/grub-core/kern/arm/efi/misc.c b/grub-core/kern/arm/efi/misc.c new file mode 100644 index 000000000..7cd41842a --- /dev/null +++ b/grub-core/kern/arm/efi/misc.c @@ -0,0 +1,202 @@ +/* misc.c - various system functions for an arm-based EFI system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +static inline grub_size_t +page_align (grub_size_t size) +{ + return (size + (1 << 12) - 1) & (~((1 << 12) - 1)); +} + +/* Find the optimal number of pages for the memory map. Is it better to + move this code to efi/mm.c? */ +static grub_efi_uintn_t +find_mmap_size (void) +{ + static grub_efi_uintn_t mmap_size = 0; + + if (mmap_size != 0) + return mmap_size; + + mmap_size = (1 << 12); + while (1) + { + int ret; + grub_efi_memory_descriptor_t *mmap; + grub_efi_uintn_t desc_size; + + mmap = grub_malloc (mmap_size); + if (! mmap) + return 0; + + ret = grub_efi_get_memory_map (&mmap_size, mmap, 0, &desc_size, 0); + grub_free (mmap); + + if (ret < 0) + { + grub_error (GRUB_ERR_IO, "cannot get memory map"); + return 0; + } + else if (ret > 0) + break; + + mmap_size += (1 << 12); + } + + /* Increase the size a bit for safety, because GRUB allocates more on + later, and EFI itself may allocate more. */ + mmap_size += (1 << 12); + + return page_align (mmap_size); +} + +#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ + ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) +#define PAGE_SHIFT 12 + +void * +grub_efi_allocate_loader_memory (grub_uint32_t min_offset, grub_uint32_t size) +{ + grub_efi_uintn_t desc_size; + grub_efi_memory_descriptor_t *mmap, *mmap_end; + grub_efi_uintn_t mmap_size, tmp_mmap_size; + grub_efi_memory_descriptor_t *desc; + void *mem = NULL; + grub_addr_t min_start = 0; + + mmap_size = find_mmap_size(); + if (!mmap_size) + return NULL; + + mmap = grub_malloc(mmap_size); + if (!mmap) + return NULL; + + tmp_mmap_size = mmap_size; + if (grub_efi_get_memory_map (&tmp_mmap_size, mmap, 0, &desc_size, 0) <= 0) + { + grub_error (GRUB_ERR_IO, "cannot get memory map"); + goto fail; + } + + mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap, tmp_mmap_size); + /* Find lowest accessible RAM location */ + { + int found = 0; + for (desc = mmap ; !found && (desc < mmap_end) ; + desc = NEXT_MEMORY_DESCRIPTOR(desc, desc_size)) + { + switch (desc->type) + { + case GRUB_EFI_CONVENTIONAL_MEMORY: + case GRUB_EFI_LOADER_CODE: + case GRUB_EFI_LOADER_DATA: + min_start = desc->physical_start + min_offset; + found = 1; + break; + default: + break; + } + } + } + + /* First, find free pages for the real mode code + and the memory map buffer. */ + for (desc = mmap ; desc < mmap_end ; + desc = NEXT_MEMORY_DESCRIPTOR(desc, desc_size)) + { + grub_uint64_t start, end; + + grub_dprintf("mm", "%s: 0x%08x bytes @ 0x%08x\n", + __FUNCTION__, + (grub_uint32_t) (desc->num_pages << PAGE_SHIFT), + (grub_uint32_t) (desc->physical_start)); + + if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) + continue; + + start = desc->physical_start; + end = start + (desc->num_pages << PAGE_SHIFT); + grub_dprintf("mm", "%s: start=0x%016llx, end=0x%016llx\n", + __FUNCTION__, start, end); + start = start < min_start ? min_start : start; + if (start + size > end) + continue; + grub_dprintf("mm", "%s: let's allocate some (0x%x) pages @ 0x%08x...\n", + __FUNCTION__, (size >> PAGE_SHIFT), (grub_addr_t) start); + mem = grub_efi_allocate_pages (start, (size >> PAGE_SHIFT) + 1); + grub_dprintf("mm", "%s: retval=0x%08x\n", + __FUNCTION__, (grub_addr_t) mem); + if (! mem) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate memory"); + goto fail; + } + break; + } + + if (! mem) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate memory"); + goto fail; + } + + grub_free (mmap); + return mem; + + fail: + grub_free (mmap); + return NULL; +} + +grub_err_t +grub_efi_prepare_platform (void) +{ + grub_efi_uintn_t mmap_size; + grub_efi_uintn_t map_key; + grub_efi_uintn_t desc_size; + grub_efi_uint32_t desc_version; + grub_efi_memory_descriptor_t *mmap_buf; + grub_err_t err; + + /* + * Cloned from IA64 + * Must be done after grub_machine_fini because map_key is used by + *exit_boot_services. + */ + mmap_size = find_mmap_size (); + if (! mmap_size) + return GRUB_ERR_OUT_OF_MEMORY; + mmap_buf = grub_efi_allocate_pages (0, page_align (mmap_size) >> 12); + if (! mmap_buf) + return GRUB_ERR_OUT_OF_MEMORY; + + err = grub_efi_finish_boot_services (&mmap_size, mmap_buf, &map_key, + &desc_size, &desc_version); + if (err != GRUB_ERR_NONE) + return err; + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/arm/efi/startup.S b/grub-core/kern/arm/efi/startup.S new file mode 100644 index 000000000..9f8265315 --- /dev/null +++ b/grub-core/kern/arm/efi/startup.S @@ -0,0 +1,36 @@ +/* + * (C) Copyright 2013 Free Software Foundation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ + +#include + + .file "startup.S" + .text + .arm +FUNCTION(_start) + /* + * EFI_SYSTEM_TABLE and EFI_HANDLE are passed in r1/r0. + */ + ldr ip, =EXT_C(grub_efi_image_handle) + str r0, [ip] + ldr ip, =EXT_C(grub_efi_system_table) + str r1, [ip] + ldr ip, =EXT_C(grub_main) + bx ip + END diff --git a/grub-core/kern/arm/uboot/startup.S b/grub-core/kern/arm/uboot/startup.S new file mode 100644 index 000000000..5efaae16e --- /dev/null +++ b/grub-core/kern/arm/uboot/startup.S @@ -0,0 +1,221 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +/* + * GRUB is called from U-Boot as a Linux Kernel type image, which + * means among other things that it always enters in ARM state. + * + * + * Overview of GRUB image layout: + * + * _start: + * Entry point (1 ARM branch instruction, to "codestart") + * grub_total_module_size: + * Data field: Size of included module blob + * (when generated by grub-mkimage) + * codestart: + * Remainder of statically-linked executable code and data. + * __bss_start: + * Start of included module blob. + * Also where global/static variables are located. + * _end: + * End of bss region (but not necessarily module blob). + * : + * : + * Loadable modules, post relocation. + * : + */ + + .text + .arm +FUNCTION(_start) + b codestart + + @ Size of final image integrated module blob - set by grub-mkimage + .org _start + GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE +VARIABLE(grub_total_module_size) + .long 0 + +VARIABLE(grub_modbase) + .long 0 +bss_start_ptr: + .long EXT_C(__bss_start) +end_ptr: + .long EXT_C(_end) + + @ Memory map at start: + @ * text+data + @ * list relocations + @ * modules + @ Before we enter C, we need to apply the relocations + @ and get following map: + @ * text+data + @ * BSS (cleared) + @ * stack + @ * modules + @ + @ To make things easier we ensure + @ that BSS+stack is larger than list of relocations + @ by increasing stack if necessarry. + @ This allows us to always unconditionally copy backwards + @ Currently list of relocations is ~5K and stack is set + @ to be at least 256K + +FUNCTION(codestart) + @ Store context: Machine ID, atags/dtb, ... + @ U-Boot API signature is stored on the U-Boot heap + @ Stack pointer used as start address for signature probing + mov r12, sp + adr sp, entry_state + push {r1-r12,lr} @ store U-Boot context (sp in r12) + + adr r1, _start + ldr r0, bss_start_ptr @ src + add r0, r0, r1 + + add r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) + mvn r2, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) + and r0, r0, r2 +1: + ldr r3, [r0], #4 @load next offset + @ both -2 and -1 are treated the same as we have only one type of relocs + @ -2 means "end of this type of relocs" and -1 means "end of all relocs" + add r2, r3, #2 + cmp r2, #1 + bls reloc_done + @ Adjust next offset + ldr r2, [r3, r1] + add r2, r2, r1 + str r2, [r3, r1] + b 1b + +reloc_done: + + @ Modules have been stored as a blob + @ they need to be manually relocated to _end + add r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) + mvn r1, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) + and r0, r0, r1 @ src = aligned end of relocations + + ldr r1, end_ptr @ dst = End of BSS + ldr r2, grub_total_module_size @ blob size + + add r1, r1, #GRUB_KERNEL_MACHINE_STACK_SIZE + and r1, r1, #~0x7 @ Ensure 8-byte alignment + + sub sp, r1, #8 + add r1, r1, #1024 + + str r1, EXT_C(grub_modbase) + + add r1, r1, r2 + add r0, r0, r2 + sub r1, r1, #4 + sub r0, r0, #4 + +1: ldr r3, [r0], #-4 @ r3 = *src-- + str r3, [r1], #-4 @ *dst-- = r3 + subs r2, #4 @ remaining -= 4 + bne 1b @ while remaining != 0 + + @ Since we _are_ the C run-time, we need to manually zero the BSS + @ region before continuing + ldr r0, bss_start_ptr @ zero from here + @ If unaligned, bytewise zero until base address aligned. + mov r2, #0 +1: tst r0, #3 + beq 2f + strb r2, [r0], #1 + b 1b +2: ldr r1, end_ptr @ to here +1: str r2, [r0], #4 + cmp r0, r1 + bne 1b + + b EXT_C(grub_main) + + /* + * uboot_syscall(): + * This function is effectively a veneer, so it cannot + * modify the stack or corrupt any registers other than + * r12 (ip). Furthermore it needs to restore r8 for + * U-Boot (Global Data Pointer) and preserve it for Grub. + */ +FUNCTION(grub_uboot_syscall) + str r8, transition_space + str lr, transition_space + 4 + str r9, transition_space + 8 + + ldr r8, gd_backup + ldr r9, gd_backup + 4 + + bl do_syscall + + ldr r8, transition_space + ldr lr, transition_space + 4 + ldr r9, transition_space + 8 + + bx lr +do_syscall: + + ldr ip, grub_uboot_syscall_ptr + bx ip + +FUNCTION(grub_uboot_return) + adr sp, entry_state_end + pop {r4-r12, lr} + mov sp, r12 + bx lr + + + .align 3 +@ U-boot context stack space +entry_state_end: +VARIABLE(grub_uboot_machine_type) + .long 0 @ r1 +VARIABLE(grub_uboot_boot_data) + .long 0 @ r2 + .long 0 @ r3 + .long 0 @ r4 + .long 0 @ r5 + .long 0 @ r6 + .long 0 @ r7 +gd_backup: + .long 0 @ r8 - U-Boot global data pointer up to 2013-09-21 + .long 0 @ r9 - U-Boot global data pointer 2013-09-21 onwards + .long 0 @ r10 + .long 0 @ r11 +VARIABLE(grub_uboot_search_hint)@ U-Boot stack pointer - + .long 0 @ also API signature address hint. + .long 0 @ lr +entry_state: @ backup for U-Boot context + +@ GRUB context stack space +transition_space: + .long 0 @ r8 + .long 0 @ lr + .long 0 @ r9 + +VARIABLE(grub_uboot_syscall_ptr) + .long 0 @ + + END diff --git a/grub-core/kern/arm64/cache.c b/grub-core/kern/arm64/cache.c new file mode 100644 index 000000000..b84383da1 --- /dev/null +++ b/grub-core/kern/arm64/cache.c @@ -0,0 +1,63 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +static grub_int64_t dlinesz; +static grub_int64_t ilinesz; + +/* Prototypes for asm functions. */ +void grub_arch_clean_dcache_range (grub_addr_t beg, grub_addr_t end, + grub_uint64_t line_size); +void grub_arch_invalidate_icache_range (grub_addr_t beg, grub_addr_t end, + grub_uint64_t line_size); + +static void +probe_caches (void) +{ + grub_uint64_t cache_type; + + /* Read Cache Type Register */ + asm volatile ("mrs %0, ctr_el0": "=r"(cache_type)); + + dlinesz = 4 << ((cache_type >> 16) & 0xf); + ilinesz = 4 << (cache_type & 0xf); + + grub_dprintf("cache", "D$ line size: %lld\n", (long long) dlinesz); + grub_dprintf("cache", "I$ line size: %lld\n", (long long) ilinesz); +} + +void +grub_arch_sync_caches (void *address, grub_size_t len) +{ + grub_uint64_t start, end, max_align; + + if (dlinesz == 0) + probe_caches(); + if (dlinesz == 0) + grub_fatal ("Unknown cache line size!"); + + max_align = dlinesz > ilinesz ? dlinesz : ilinesz; + + start = ALIGN_DOWN ((grub_uint64_t) address, max_align); + end = ALIGN_UP ((grub_uint64_t) address + len, max_align); + + grub_arch_clean_dcache_range (start, end, dlinesz); + grub_arch_invalidate_icache_range (start, end, ilinesz); +} diff --git a/grub-core/kern/arm64/cache_flush.S b/grub-core/kern/arm64/cache_flush.S new file mode 100644 index 000000000..e064f7ece --- /dev/null +++ b/grub-core/kern/arm64/cache_flush.S @@ -0,0 +1,55 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .file "cache_flush.S" + .text + +/* + * Simple cache maintenance functions + */ + +// x0 - *beg (inclusive) +// x1 - *end (exclusive) +// x2 - line size +FUNCTION(grub_arch_clean_dcache_range) + // Clean data cache for range to point-of-unification +1: cmp x0, x1 + b.ge 2f + dc cvau, x0 // Clean Virtual Address to PoU + add x0, x0, x2 // Next line + b 1b +2: dsb ish + isb + ret + +// x0 - *beg (inclusive) +// x1 - *end (exclusive) +// x2 - line size +FUNCTION(grub_arch_invalidate_icache_range) + // Invalidate instruction cache for range to point-of-unification +1: cmp x0, x1 + b.ge 2f + ic ivau, x0 // Invalidate Virtual Address to PoU + add x0, x0, x2 // Next line + b 1b + // Branch predictor invalidation not needed on AArch64 +2: dsb ish + isb + ret diff --git a/grub-core/kern/arm64/dl.c b/grub-core/kern/arm64/dl.c new file mode 100644 index 000000000..fb0337319 --- /dev/null +++ b/grub-core/kern/arm64/dl.c @@ -0,0 +1,193 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#define LDR 0x58000050 +#define BR 0xd61f0200 + + +/* + * Check if EHDR is a valid ELF header. + */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS64 + || e->e_ident[EI_DATA] != ELFDATA2LSB || e->e_machine != EM_AARCH64) + return grub_error (GRUB_ERR_BAD_OS, + N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} + +#pragma GCC diagnostic ignored "-Wcast-align" + +/* + * Unified function for both REL and RELA + */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + Elf_Rel *rel, *max; + unsigned unmatched_adr_got_page = 0; + + for (rel = (Elf_Rel *) ((char *) ehdr + s->sh_offset), + max = (Elf_Rel *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf_Rel *) ((char *) rel + s->sh_entsize)) + { + Elf_Sym *sym; + void *place; + grub_uint64_t sym_addr; + + if (rel->r_offset >= seg->size) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + sym = (Elf_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + + sym_addr = sym->st_value; + if (s->sh_type == SHT_RELA) + sym_addr += ((Elf_Rela *) rel)->r_addend; + + place = (void *) ((grub_addr_t) seg->addr + rel->r_offset); + + switch (ELF_R_TYPE (rel->r_info)) + { + case R_AARCH64_ABS64: + { + grub_uint64_t *abs_place = place; + + grub_dprintf ("dl", " reloc_abs64 %p => 0x%016llx\n", + place, (unsigned long long) sym_addr); + + *abs_place = (grub_uint64_t) sym_addr; + } + break; + case R_AARCH64_ADD_ABS_LO12_NC: + grub_arm64_set_abs_lo12 (place, sym_addr); + break; + case R_AARCH64_LDST64_ABS_LO12_NC: + grub_arm64_set_abs_lo12_ldst64 (place, sym_addr); + break; + case R_AARCH64_CALL26: + case R_AARCH64_JUMP26: + { + grub_int64_t offset = sym_addr - (grub_uint64_t) place; + + if (!grub_arm_64_check_xxxx26_offset (offset)) + { + struct grub_arm64_trampoline *tp = mod->trampptr; + mod->trampptr = tp + 1; + tp->ldr = LDR; + tp->br = BR; + tp->addr = sym_addr; + offset = (grub_uint8_t *) tp - (grub_uint8_t *) place; + } + + if (!grub_arm_64_check_xxxx26_offset (offset)) + return grub_error (GRUB_ERR_BAD_MODULE, + "trampoline out of range"); + + grub_arm64_set_xxxx26_offset (place, offset); + } + break; + case R_AARCH64_PREL32: + { + grub_int64_t value; + Elf64_Word *addr32 = place; + value = ((grub_int32_t) *addr32) + sym_addr - + (Elf64_Xword) (grub_addr_t) seg->addr - rel->r_offset; + if (value != (grub_int32_t) value) + return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range"); + grub_dprintf("dl", " reloc_prel32 %p => 0x%016llx\n", + place, (unsigned long long) sym_addr); + *addr32 = value; + } + break; + case R_AARCH64_ADR_GOT_PAGE: + { + grub_uint64_t *gp = mod->gotptr; + Elf_Rela *rel2; + grub_int64_t gpoffset = ((grub_uint64_t) gp & ~0xfffULL) - (((grub_uint64_t) place) & ~0xfffULL); + *gp = (grub_uint64_t) sym_addr; + mod->gotptr = gp + 1; + unmatched_adr_got_page++; + grub_dprintf("dl", " reloc_got %p => 0x%016llx (0x%016llx)\n", + place, (unsigned long long) sym_addr, (unsigned long long) gp); + if (!grub_arm64_check_hi21_signed (gpoffset)) + return grub_error (GRUB_ERR_BAD_MODULE, + "HI21 out of range"); + grub_arm64_set_hi21(place, gpoffset); + for (rel2 = (Elf_Rela *) ((char *) rel + s->sh_entsize); + rel2 < (Elf_Rela *) max; + rel2 = (Elf_Rela *) ((char *) rel2 + s->sh_entsize)) + if (ELF_R_SYM (rel2->r_info) + == ELF_R_SYM (rel->r_info) + && ((Elf_Rela *) rel)->r_addend == rel2->r_addend + && ELF_R_TYPE (rel2->r_info) == R_AARCH64_LD64_GOT_LO12_NC) + { + grub_arm64_set_abs_lo12_ldst64 ((void *) ((grub_addr_t) seg->addr + rel2->r_offset), + (grub_uint64_t)gp); + break; + } + if (rel2 >= (Elf_Rela *) max) + return grub_error (GRUB_ERR_BAD_MODULE, + "ADR_GOT_PAGE without matching LD64_GOT_LO12_NC"); + } + break; + case R_AARCH64_LD64_GOT_LO12_NC: + if (unmatched_adr_got_page == 0) + return grub_error (GRUB_ERR_BAD_MODULE, + "LD64_GOT_LO12_NC without matching ADR_GOT_PAGE"); + unmatched_adr_got_page--; + break; + case R_AARCH64_ADR_PREL_PG_HI21: + { + grub_int64_t offset = (sym_addr & ~0xfffULL) - (((grub_uint64_t) place) & ~0xfffULL); + + if (!grub_arm64_check_hi21_signed (offset)) + return grub_error (GRUB_ERR_BAD_MODULE, + "HI21 out of range"); + + grub_arm64_set_hi21 (place, offset); + } + break; + + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/arm64/dl_helper.c b/grub-core/kern/arm64/dl_helper.c new file mode 100644 index 000000000..e00c198db --- /dev/null +++ b/grub-core/kern/arm64/dl_helper.c @@ -0,0 +1,134 @@ +/* dl_helper.c - relocation helper functions for modules and grub-mkimage */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +/* + * grub_arm64_reloc_xxxx26(): + * + * JUMP26/CALL26 relocations for B and BL instructions. + */ + +int +grub_arm_64_check_xxxx26_offset (grub_int64_t offset) +{ + const grub_ssize_t offset_low = -(1 << 27), offset_high = (1 << 27) - 1; + + if ((offset < offset_low) || (offset > offset_high)) + return 0; + return 1; +} + +void +grub_arm64_set_xxxx26_offset (grub_uint32_t *place, grub_int64_t offset) +{ + const grub_uint32_t insmask = grub_cpu_to_le32_compile_time (0xfc000000); + + grub_dprintf ("dl", " reloc_xxxx64 %p %c= 0x%llx\n", + place, offset > 0 ? '+' : '-', + offset < 0 ? (long long) -(unsigned long long) offset : offset); + + *place &= insmask; + *place |= grub_cpu_to_le32 (offset >> 2) & ~insmask; +} + +int +grub_arm64_check_hi21_signed (grub_int64_t offset) +{ + if (offset != (grub_int64_t)(grub_int32_t)offset) + return 0; + return 1; +} + +void +grub_arm64_set_hi21 (grub_uint32_t *place, grub_int64_t offset) +{ + const grub_uint32_t insmask = grub_cpu_to_le32_compile_time (0x9f00001f); + grub_uint32_t val; + + offset >>= 12; + + val = ((offset & 3) << 29) | (((offset >> 2) & 0x7ffff) << 5); + + *place &= insmask; + *place |= grub_cpu_to_le32 (val) & ~insmask; +} + +void +grub_arm64_set_abs_lo12 (grub_uint32_t *place, grub_int64_t target) +{ + const grub_uint32_t insmask = grub_cpu_to_le32_compile_time (0xffc003ff); + + *place &= insmask; + *place |= grub_cpu_to_le32 (target << 10) & ~insmask; +} + +void +grub_arm64_set_abs_lo12_ldst64 (grub_uint32_t *place, grub_int64_t target) +{ + const grub_uint32_t insmask = grub_cpu_to_le32_compile_time (0xfff803ff); + + *place &= insmask; + *place |= grub_cpu_to_le32 (target << 7) & ~insmask; +} + +#pragma GCC diagnostic ignored "-Wcast-align" + +grub_err_t +grub_arm64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, + grub_size_t *got) +{ + const Elf64_Ehdr *e = ehdr; + const Elf64_Shdr *s; + unsigned i; + + *tramp = 0; + *got = 0; + + for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff)); + i < grub_le_to_cpu16 (e->e_shnum); + i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize))) + if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_REL) + || s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA)) + { + const Elf64_Rela *rel, *max; + + for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)), + max = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_size)); + rel < max; rel = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_entsize))) + switch (ELF64_R_TYPE (rel->r_info)) + { + case R_AARCH64_CALL26: + case R_AARCH64_JUMP26: + *tramp += sizeof (struct grub_arm64_trampoline); + break; + case R_AARCH64_ADR_GOT_PAGE: + *got += 8; + break; + } + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/arm64/efi/init.c b/grub-core/kern/arm64/efi/init.c new file mode 100644 index 000000000..6224999ec --- /dev/null +++ b/grub-core/kern/arm64/efi/init.c @@ -0,0 +1,60 @@ +/* init.c - initialize an arm-based EFI system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +static grub_uint64_t timer_frequency_in_khz; + +static grub_uint64_t +grub_efi_get_time_ms (void) +{ + grub_uint64_t tmr; + asm volatile("mrs %0, cntvct_el0" : "=r" (tmr)); + + return tmr / timer_frequency_in_khz; +} + + +void +grub_machine_init (void) +{ + grub_uint64_t timer_frequency; + + grub_efi_init (); + + asm volatile("mrs %0, cntfrq_el0" : "=r" (timer_frequency)); + timer_frequency_in_khz = timer_frequency / 1000; + + grub_install_get_time_ms (grub_efi_get_time_ms); +} + +void +grub_machine_fini (int flags) +{ + if (!(flags & GRUB_LOADER_FLAG_NORETURN)) + return; + + grub_efi_fini (); +} diff --git a/grub-core/kern/arm64/efi/startup.S b/grub-core/kern/arm64/efi/startup.S new file mode 100644 index 000000000..666a7ee3c --- /dev/null +++ b/grub-core/kern/arm64/efi/startup.S @@ -0,0 +1,39 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .file "startup.S" + .text +FUNCTION(_start) + /* + * EFI_SYSTEM_TABLE and EFI_HANDLE are passed in x1/x0. + */ + ldr x2, efi_image_handle_val + str x0, [x2] + ldr x2, efi_system_table_val + str x1, [x2] + ldr x2, grub_main_val + br x2 +grub_main_val: + .quad EXT_C(grub_main) +efi_system_table_val: + .quad EXT_C(grub_efi_system_table) +efi_image_handle_val: + .quad EXT_C(grub_efi_image_handle) + diff --git a/grub-core/kern/command.c b/grub-core/kern/command.c new file mode 100644 index 000000000..acd721879 --- /dev/null +++ b/grub-core/kern/command.c @@ -0,0 +1,87 @@ +/* command.c - support basic command */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +grub_command_t grub_command_list; + +grub_command_t +grub_register_command_prio (const char *name, + grub_command_func_t func, + const char *summary, + const char *description, + int prio) +{ + grub_command_t cmd; + int inactive = 0; + + grub_command_t *p, q; + + cmd = (grub_command_t) grub_zalloc (sizeof (*cmd)); + if (! cmd) + return 0; + + cmd->name = name; + cmd->func = func; + cmd->summary = (summary) ? summary : ""; + cmd->description = description; + + cmd->flags = 0; + cmd->prio = prio; + + for (p = &grub_command_list, q = *p; q; p = &(q->next), q = q->next) + { + int r; + + r = grub_strcmp (cmd->name, q->name); + if (r < 0) + break; + if (r > 0) + continue; + + if (cmd->prio >= (q->prio & GRUB_COMMAND_PRIO_MASK)) + { + q->prio &= ~GRUB_COMMAND_FLAG_ACTIVE; + break; + } + + inactive = 1; + } + + *p = cmd; + cmd->next = q; + if (q) + q->prev = &cmd->next; + cmd->prev = p; + + if (! inactive) + cmd->prio |= GRUB_COMMAND_FLAG_ACTIVE; + + return cmd; +} + +void +grub_unregister_command (grub_command_t cmd) +{ + if ((cmd->prio & GRUB_COMMAND_FLAG_ACTIVE) && (cmd->next)) + cmd->next->prio |= GRUB_COMMAND_FLAG_ACTIVE; + grub_list_remove (GRUB_AS_LIST (cmd)); + grub_free (cmd); +} diff --git a/grub-core/kern/compiler-rt.c b/grub-core/kern/compiler-rt.c new file mode 100644 index 000000000..5cfcb3907 --- /dev/null +++ b/grub-core/kern/compiler-rt.c @@ -0,0 +1,419 @@ +/* compiler-rt.c - compiler helpers. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010-2014 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#ifndef GRUB_EMBED_DECOMPRESSOR +void * GRUB_BUILTIN_ATTR +memcpy (void *dest, const void *src, grub_size_t n) +{ + return grub_memmove (dest, src, n); +} +void * GRUB_BUILTIN_ATTR +memmove (void *dest, const void *src, grub_size_t n) +{ + return grub_memmove (dest, src, n); +} +int GRUB_BUILTIN_ATTR +memcmp (const void *s1, const void *s2, grub_size_t n) +{ + return grub_memcmp (s1, s2, n); +} +void * GRUB_BUILTIN_ATTR +memset (void *s, int c, grub_size_t n) +{ + return grub_memset (s, c, n); +} + +#ifdef __APPLE__ + +void GRUB_BUILTIN_ATTR +__bzero (void *s, grub_size_t n) +{ + grub_memset (s, 0, n); +} + +#endif + +#if GRUB_DIVISION_IN_SOFTWARE + +grub_uint32_t +__udivsi3 (grub_uint32_t a, grub_uint32_t b) +{ + return grub_divmod64 (a, b, 0); +} + +grub_int32_t +__divsi3 (grub_int32_t a, grub_int32_t b) +{ + return grub_divmod64s (a, b, 0); +} + +grub_uint32_t +__umodsi3 (grub_uint32_t a, grub_uint32_t b) +{ + grub_uint64_t ret; + grub_divmod64 (a, b, &ret); + return ret; +} + +grub_int32_t +__modsi3 (grub_int32_t a, grub_int32_t b) +{ + grub_int64_t ret; + grub_divmod64s (a, b, &ret); + return ret; +} + +grub_uint64_t +__udivdi3 (grub_uint64_t a, grub_uint64_t b) +{ + return grub_divmod64 (a, b, 0); +} + +grub_uint64_t +__umoddi3 (grub_uint64_t a, grub_uint64_t b) +{ + grub_uint64_t ret; + grub_divmod64 (a, b, &ret); + return ret; +} + +grub_int64_t +__divdi3 (grub_int64_t a, grub_int64_t b) +{ + return grub_divmod64s (a, b, 0); +} + +grub_int64_t +__moddi3 (grub_int64_t a, grub_int64_t b) +{ + grub_int64_t ret; + grub_divmod64s (a, b, &ret); + return ret; +} + +#endif + +#endif + +#ifdef NEED_CTZDI2 + +unsigned +__ctzdi2 (grub_uint64_t x) +{ + unsigned ret = 0; + if (!x) + return 64; + if (!(x & 0xffffffff)) + { + x >>= 32; + ret |= 32; + } + if (!(x & 0xffff)) + { + x >>= 16; + ret |= 16; + } + if (!(x & 0xff)) + { + x >>= 8; + ret |= 8; + } + if (!(x & 0xf)) + { + x >>= 4; + ret |= 4; + } + if (!(x & 0x3)) + { + x >>= 2; + ret |= 2; + } + if (!(x & 0x1)) + { + x >>= 1; + ret |= 1; + } + return ret; +} +#endif + +#ifdef NEED_CTZSI2 +unsigned +__ctzsi2 (grub_uint32_t x) +{ + unsigned ret = 0; + if (!x) + return 32; + + if (!(x & 0xffff)) + { + x >>= 16; + ret |= 16; + } + if (!(x & 0xff)) + { + x >>= 8; + ret |= 8; + } + if (!(x & 0xf)) + { + x >>= 4; + ret |= 4; + } + if (!(x & 0x3)) + { + x >>= 2; + ret |= 2; + } + if (!(x & 0x1)) + { + x >>= 1; + ret |= 1; + } + return ret; +} + +#endif + + +#if defined (__clang__) && !defined(GRUB_EMBED_DECOMPRESSOR) +/* clang emits references to abort(). */ +void __attribute__ ((noreturn)) +abort (void) +{ + grub_fatal ("compiler abort"); +} +#endif + +#if (defined (__MINGW32__) || defined (__CYGWIN__)) +void __register_frame_info (void) +{ +} + +void __deregister_frame_info (void) +{ +} + +void ___chkstk_ms (void) +{ +} + +void __chkstk_ms (void) +{ +} +#endif + +union component64 +{ + grub_uint64_t full; + struct + { +#ifdef GRUB_CPU_WORDS_BIGENDIAN + grub_uint32_t high; + grub_uint32_t low; +#else + grub_uint32_t low; + grub_uint32_t high; +#endif + }; +}; + +#if defined (__powerpc__) || defined (__arm__) || defined(__mips__) + +/* Based on libgcc2.c from gcc suite. */ +grub_uint64_t +__lshrdi3 (grub_uint64_t u, int b) +{ + if (b == 0) + return u; + + const union component64 uu = {.full = u}; + const int bm = 32 - b; + union component64 w; + + if (bm <= 0) + { + w.high = 0; + w.low = (grub_uint32_t) uu.high >> -bm; + } + else + { + const grub_uint32_t carries = (grub_uint32_t) uu.high << bm; + + w.high = (grub_uint32_t) uu.high >> b; + w.low = ((grub_uint32_t) uu.low >> b) | carries; + } + + return w.full; +} + +/* Based on libgcc2.c from gcc suite. */ +grub_uint64_t +__ashrdi3 (grub_uint64_t u, int b) +{ + if (b == 0) + return u; + + const union component64 uu = {.full = u}; + const int bm = 32 - b; + union component64 w; + + if (bm <= 0) + { + /* w.high = 1..1 or 0..0 */ + w.high = ((grub_int32_t) uu.high) >> (32 - 1); + w.low = ((grub_int32_t) uu.high) >> -bm; + } + else + { + const grub_uint32_t carries = ((grub_uint32_t) uu.high) << bm; + + w.high = ((grub_int32_t) uu.high) >> b; + w.low = ((grub_uint32_t) uu.low >> b) | carries; + } + + return w.full; +} + +/* Based on libgcc2.c from gcc suite. */ +grub_uint64_t +__ashldi3 (grub_uint64_t u, int b) +{ + if (b == 0) + return u; + + const union component64 uu = {.full = u}; + const int bm = 32 - b; + union component64 w; + + if (bm <= 0) + { + w.low = 0; + w.high = (grub_uint32_t) uu.low << -bm; + } + else + { + const grub_uint32_t carries = (grub_uint32_t) uu.low >> bm; + + w.low = (grub_uint32_t) uu.low << b; + w.high = ((grub_uint32_t) uu.high << b) | carries; + } + + return w.full; +} + +/* Based on libgcc2.c from gcc suite. */ +int +__ucmpdi2 (grub_uint64_t a, grub_uint64_t b) +{ + union component64 ac, bc; + ac.full = a; + bc.full = b; + + if (ac.high < bc.high) + return 0; + else if (ac.high > bc.high) + return 2; + + if (ac.low < bc.low) + return 0; + else if (ac.low > bc.low) + return 2; + return 1; +} + +#endif + +#if defined (__powerpc__) || defined(__mips__) || defined(__sparc__) || defined(__arm__) + +/* Based on libgcc2.c from gcc suite. */ +grub_uint32_t +__bswapsi2 (grub_uint32_t u) +{ + return ((((u) & 0xff000000) >> 24) + | (((u) & 0x00ff0000) >> 8) + | (((u) & 0x0000ff00) << 8) + | (((u) & 0x000000ff) << 24)); +} + +/* Based on libgcc2.c from gcc suite. */ +grub_uint64_t +__bswapdi2 (grub_uint64_t u) +{ + return ((((u) & 0xff00000000000000ull) >> 56) + | (((u) & 0x00ff000000000000ull) >> 40) + | (((u) & 0x0000ff0000000000ull) >> 24) + | (((u) & 0x000000ff00000000ull) >> 8) + | (((u) & 0x00000000ff000000ull) << 8) + | (((u) & 0x0000000000ff0000ull) << 24) + | (((u) & 0x000000000000ff00ull) << 40) + | (((u) & 0x00000000000000ffull) << 56)); +} + + +#endif + +#ifdef __arm__ +grub_uint32_t +__aeabi_uidiv (grub_uint32_t a, grub_uint32_t b) + __attribute__ ((alias ("__udivsi3"))); +grub_int32_t +__aeabi_idiv (grub_int32_t a, grub_int32_t b) + __attribute__ ((alias ("__divsi3"))); +void *__aeabi_memcpy (void *dest, const void *src, grub_size_t n) + __attribute__ ((alias ("grub_memcpy"))); +void *__aeabi_memcpy4 (void *dest, const void *src, grub_size_t n) + __attribute__ ((alias ("grub_memcpy"))); +void *__aeabi_memcpy8 (void *dest, const void *src, grub_size_t n) + __attribute__ ((alias ("grub_memcpy"))); +void *__aeabi_memset (void *s, int c, grub_size_t n) + __attribute__ ((alias ("memset"))); + +void +__aeabi_memclr (void *s, grub_size_t n) +{ + grub_memset (s, 0, n); +} + +void __aeabi_memclr4 (void *s, grub_size_t n) + __attribute__ ((alias ("__aeabi_memclr"))); +void __aeabi_memclr8 (void *s, grub_size_t n) + __attribute__ ((alias ("__aeabi_memclr"))); + +int +__aeabi_ulcmp (grub_uint64_t a, grub_uint64_t b) +{ + return __ucmpdi2 (a, b) - 1; +} + +grub_uint64_t +__aeabi_lasr (grub_uint64_t u, int b) + __attribute__ ((alias ("__ashrdi3"))); +grub_uint64_t +__aeabi_llsr (grub_uint64_t u, int b) + __attribute__ ((alias ("__lshrdi3"))); + +grub_uint64_t +__aeabi_llsl (grub_uint64_t u, int b) + __attribute__ ((alias ("__ashldi3"))); + +#endif diff --git a/grub-core/kern/corecmd.c b/grub-core/kern/corecmd.c new file mode 100644 index 000000000..d9412a316 --- /dev/null +++ b/grub-core/kern/corecmd.c @@ -0,0 +1,189 @@ +/* corecmd.c - critical commands which are registered in kernel */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* set ENVVAR=VALUE */ +static grub_err_t +grub_core_cmd_set (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + char *var; + char *val; + + if (argc < 1) + { + struct grub_env_var *env; + FOR_SORTED_ENV (env) + grub_printf ("%s=%s\n", env->name, grub_env_get (env->name)); + return 0; + } + + var = argv[0]; + val = grub_strchr (var, '='); + if (! val) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "not an assignment"); + + val[0] = 0; + grub_env_set (var, val + 1); + val[0] = '='; + + return 0; +} + +static grub_err_t +grub_core_cmd_unset (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + if (argc < 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("one argument expected")); + + grub_env_unset (argv[0]); + return 0; +} + +/* insmod MODULE */ +static grub_err_t +grub_core_cmd_insmod (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + grub_dl_t mod; + + if (argc == 0) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + if (argv[0][0] == '/' || argv[0][0] == '(' || argv[0][0] == '+') + mod = grub_dl_load_file (argv[0]); + else + mod = grub_dl_load (argv[0]); + + if (mod) + grub_dl_ref (mod); + + return 0; +} + +static int +grub_mini_print_devices (const char *name, void *data __attribute__ ((unused))) +{ + grub_printf ("(%s) ", name); + + return 0; +} + +static int +grub_mini_print_files (const char *filename, + const struct grub_dirhook_info *info, + void *data __attribute__ ((unused))) +{ + grub_printf ("%s%s ", filename, info->dir ? "/" : ""); + + return 0; +} + +/* ls [ARG] */ +static grub_err_t +grub_core_cmd_ls (struct grub_command *cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + if (argc < 1) + { + grub_device_iterate (grub_mini_print_devices, NULL); + grub_xputs ("\n"); + grub_refresh (); + } + else + { + char *device_name; + grub_device_t dev = 0; + grub_fs_t fs; + char *path; + + device_name = grub_file_get_device_name (argv[0]); + if (grub_errno) + goto fail; + dev = grub_device_open (device_name); + if (! dev) + goto fail; + + fs = grub_fs_probe (dev); + path = grub_strchr (argv[0], ')'); + if (! path) + path = argv[0]; + else + path++; + + if (! *path && ! device_name) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument"); + goto fail; + } + + if (! *path) + { + if (grub_errno == GRUB_ERR_UNKNOWN_FS) + grub_errno = GRUB_ERR_NONE; + + grub_printf ("(%s): Filesystem is %s.\n", + device_name, fs ? fs->name : "unknown"); + } + else if (fs) + { + (fs->dir) (dev, path, grub_mini_print_files, NULL); + grub_xputs ("\n"); + grub_refresh (); + } + + fail: + if (dev) + grub_device_close (dev); + + grub_free (device_name); + } + + return grub_errno; +} + +void +grub_register_core_commands (void) +{ + grub_command_t cmd; + cmd = grub_register_command ("set", grub_core_cmd_set, + N_("[ENVVAR=VALUE]"), + N_("Set an environment variable.")); + if (cmd) + cmd->flags |= GRUB_COMMAND_FLAG_EXTRACTOR; + grub_register_command ("unset", grub_core_cmd_unset, + N_("ENVVAR"), + N_("Remove an environment variable.")); + grub_register_command ("ls", grub_core_cmd_ls, + N_("[ARG]"), N_("List devices or files.")); + grub_register_command ("insmod", grub_core_cmd_insmod, + N_("MODULE"), N_("Insert a module.")); +} diff --git a/grub-core/kern/device.c b/grub-core/kern/device.c new file mode 100644 index 000000000..73b8ecc0c --- /dev/null +++ b/grub-core/kern/device.c @@ -0,0 +1,191 @@ +/* device.c - device manager */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +grub_net_t (*grub_net_open) (const char *name) = NULL; + +grub_device_t +grub_device_open (const char *name) +{ + grub_device_t dev = 0; + + if (! name) + { + name = grub_env_get ("root"); + if (name == NULL || *name == '\0') + { + grub_error (GRUB_ERR_BAD_DEVICE, N_("variable `%s' isn't set"), "root"); + goto fail; + } + } + + dev = grub_malloc (sizeof (*dev)); + if (! dev) + goto fail; + + dev->net = NULL; + /* Try to open a disk. */ + dev->disk = grub_disk_open (name); + if (dev->disk) + return dev; + if (grub_net_open && grub_errno == GRUB_ERR_UNKNOWN_DEVICE) + { + grub_errno = GRUB_ERR_NONE; + dev->net = grub_net_open (name); + } + + if (dev->net) + return dev; + + fail: + grub_free (dev); + + return 0; +} + +grub_err_t +grub_device_close (grub_device_t device) +{ + if (device->disk) + grub_disk_close (device->disk); + + if (device->net) + { + grub_free (device->net->server); + grub_free (device->net); + } + + grub_free (device); + + return grub_errno; +} + +struct part_ent +{ + struct part_ent *next; + char *name; +}; + +/* Context for grub_device_iterate. */ +struct grub_device_iterate_ctx +{ + grub_device_iterate_hook_t hook; + void *hook_data; + struct part_ent *ents; +}; + +/* Helper for grub_device_iterate. */ +static int +iterate_partition (grub_disk_t disk, const grub_partition_t partition, + void *data) +{ + struct grub_device_iterate_ctx *ctx = data; + struct part_ent *p; + char *part_name; + + p = grub_malloc (sizeof (*p)); + if (!p) + { + return 1; + } + + part_name = grub_partition_get_name (partition); + if (!part_name) + { + grub_free (p); + return 1; + } + p->name = grub_xasprintf ("%s,%s", disk->name, part_name); + grub_free (part_name); + if (!p->name) + { + grub_free (p); + return 1; + } + + p->next = ctx->ents; + ctx->ents = p; + + return 0; +} + +/* Helper for grub_device_iterate. */ +static int +iterate_disk (const char *disk_name, void *data) +{ + struct grub_device_iterate_ctx *ctx = data; + grub_device_t dev; + + if (ctx->hook (disk_name, ctx->hook_data)) + return 1; + + dev = grub_device_open (disk_name); + if (! dev) + { + grub_errno = GRUB_ERR_NONE; + return 0; + } + + if (dev->disk) + { + struct part_ent *p; + int ret = 0; + + ctx->ents = NULL; + (void) grub_partition_iterate (dev->disk, iterate_partition, ctx); + grub_device_close (dev); + + grub_errno = GRUB_ERR_NONE; + + p = ctx->ents; + while (p != NULL) + { + struct part_ent *next = p->next; + + if (!ret) + ret = ctx->hook (p->name, ctx->hook_data); + grub_free (p->name); + grub_free (p); + p = next; + } + + return ret; + } + + grub_device_close (dev); + return 0; +} + +int +grub_device_iterate (grub_device_iterate_hook_t hook, void *hook_data) +{ + struct grub_device_iterate_ctx ctx = { hook, hook_data, NULL }; + + /* Only disk devices are supported at the moment. */ + return grub_disk_dev_iterate (iterate_disk, &ctx); +} diff --git a/grub-core/kern/disk.c b/grub-core/kern/disk.c new file mode 100644 index 000000000..789f8c052 --- /dev/null +++ b/grub-core/kern/disk.c @@ -0,0 +1,544 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GRUB_CACHE_TIMEOUT 2 + +/* The last time the disk was used. */ +static grub_uint64_t grub_last_time = 0; + +struct grub_disk_cache grub_disk_cache_table[GRUB_DISK_CACHE_NUM]; + +void (*grub_disk_firmware_fini) (void); +int grub_disk_firmware_is_tainted; + +#if DISK_CACHE_STATS +static unsigned long grub_disk_cache_hits; +static unsigned long grub_disk_cache_misses; + +void +grub_disk_cache_get_performance (unsigned long *hits, unsigned long *misses) +{ + *hits = grub_disk_cache_hits; + *misses = grub_disk_cache_misses; +} +#endif + +grub_err_t (*grub_disk_write_weak) (grub_disk_t disk, + grub_disk_addr_t sector, + grub_off_t offset, + grub_size_t size, + const void *buf); +#include "disk_common.c" + +void +grub_disk_cache_invalidate_all (void) +{ + unsigned i; + + for (i = 0; i < GRUB_DISK_CACHE_NUM; i++) + { + struct grub_disk_cache *cache = grub_disk_cache_table + i; + + if (cache->data && ! cache->lock) + { + grub_free (cache->data); + cache->data = 0; + } + } +} + +static char * +grub_disk_cache_fetch (unsigned long dev_id, unsigned long disk_id, + grub_disk_addr_t sector) +{ + struct grub_disk_cache *cache; + unsigned cache_index; + + cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); + cache = grub_disk_cache_table + cache_index; + + if (cache->dev_id == dev_id && cache->disk_id == disk_id + && cache->sector == sector) + { + cache->lock = 1; +#if DISK_CACHE_STATS + grub_disk_cache_hits++; +#endif + return cache->data; + } + +#if DISK_CACHE_STATS + grub_disk_cache_misses++; +#endif + + return 0; +} + +static void +grub_disk_cache_unlock (unsigned long dev_id, unsigned long disk_id, + grub_disk_addr_t sector) +{ + struct grub_disk_cache *cache; + unsigned cache_index; + + cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); + cache = grub_disk_cache_table + cache_index; + + if (cache->dev_id == dev_id && cache->disk_id == disk_id + && cache->sector == sector) + cache->lock = 0; +} + +static grub_err_t +grub_disk_cache_store (unsigned long dev_id, unsigned long disk_id, + grub_disk_addr_t sector, const char *data) +{ + unsigned cache_index; + struct grub_disk_cache *cache; + + cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); + cache = grub_disk_cache_table + cache_index; + + cache->lock = 1; + grub_free (cache->data); + cache->data = 0; + cache->lock = 0; + + cache->data = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); + if (! cache->data) + return grub_errno; + + grub_memcpy (cache->data, data, + GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); + cache->dev_id = dev_id; + cache->disk_id = disk_id; + cache->sector = sector; + + return GRUB_ERR_NONE; +} + + + +grub_disk_dev_t grub_disk_dev_list; + +void +grub_disk_dev_register (grub_disk_dev_t dev) +{ + dev->next = grub_disk_dev_list; + grub_disk_dev_list = dev; +} + +void +grub_disk_dev_unregister (grub_disk_dev_t dev) +{ + grub_disk_dev_t *p, q; + + for (p = &grub_disk_dev_list, q = *p; q; p = &(q->next), q = q->next) + if (q == dev) + { + *p = q->next; + break; + } +} + +/* Return the location of the first ',', if any, which is not + escaped by a '\'. */ +static const char * +find_part_sep (const char *name) +{ + const char *p = name; + char c; + + while ((c = *p++) != '\0') + { + if (c == '\\' && *p == ',') + p++; + else if (c == ',') + return p - 1; + } + return NULL; +} + +grub_disk_t +grub_disk_open (const char *name) +{ + const char *p; + grub_disk_t disk; + grub_disk_dev_t dev; + char *raw = (char *) name; + grub_uint64_t current_time; + + grub_dprintf ("disk", "Opening `%s'...\n", name); + + disk = (grub_disk_t) grub_zalloc (sizeof (*disk)); + if (! disk) + return 0; + disk->log_sector_size = GRUB_DISK_SECTOR_BITS; + /* Default 1MiB of maximum agglomerate. */ + disk->max_agglomerate = 1048576 >> (GRUB_DISK_SECTOR_BITS + + GRUB_DISK_CACHE_BITS); + + p = find_part_sep (name); + if (p) + { + grub_size_t len = p - name; + + raw = grub_malloc (len + 1); + if (! raw) + goto fail; + + grub_memcpy (raw, name, len); + raw[len] = '\0'; + disk->name = grub_strdup (raw); + } + else + disk->name = grub_strdup (name); + if (! disk->name) + goto fail; + + for (dev = grub_disk_dev_list; dev; dev = dev->next) + { + if ((dev->open) (raw, disk) == GRUB_ERR_NONE) + break; + else if (grub_errno == GRUB_ERR_UNKNOWN_DEVICE) + grub_errno = GRUB_ERR_NONE; + else + goto fail; + } + + if (! dev) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("disk `%s' not found"), + name); + goto fail; + } + if (disk->log_sector_size > GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS + || disk->log_sector_size < GRUB_DISK_SECTOR_BITS) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "sector sizes of %d bytes aren't supported yet", + (1 << disk->log_sector_size)); + goto fail; + } + + disk->dev = dev; + + if (p) + { + disk->partition = grub_partition_probe (disk, p + 1); + if (! disk->partition) + { + /* TRANSLATORS: It means that the specified partition e.g. + hd0,msdos1=/dev/sda1 doesn't exist. */ + grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("no such partition")); + goto fail; + } + } + + /* The cache will be invalidated about 2 seconds after a device was + closed. */ + current_time = grub_get_time_ms (); + + if (current_time > (grub_last_time + + GRUB_CACHE_TIMEOUT * 1000)) + grub_disk_cache_invalidate_all (); + + grub_last_time = current_time; + + fail: + + if (raw && raw != name) + grub_free (raw); + + if (grub_errno != GRUB_ERR_NONE) + { + grub_error_push (); + grub_dprintf ("disk", "Opening `%s' failed.\n", name); + grub_error_pop (); + + grub_disk_close (disk); + return 0; + } + + return disk; +} + +void +grub_disk_close (grub_disk_t disk) +{ + grub_partition_t part; + grub_dprintf ("disk", "Closing `%s'.\n", disk->name); + + if (disk->dev && disk->dev->close) + (disk->dev->close) (disk); + + /* Reset the timer. */ + grub_last_time = grub_get_time_ms (); + + while (disk->partition) + { + part = disk->partition->parent; + grub_free (disk->partition); + disk->partition = part; + } + grub_free ((void *) disk->name); + grub_free (disk); +} + +/* Small read (less than cache size and not pass across cache unit boundaries). + sector is already adjusted and is divisible by cache unit size. + */ +static grub_err_t +grub_disk_read_small_real (grub_disk_t disk, grub_disk_addr_t sector, + grub_off_t offset, grub_size_t size, void *buf) +{ + char *data; + char *tmp_buf; + + /* Fetch the cache. */ + data = grub_disk_cache_fetch (disk->dev->id, disk->id, sector); + if (data) + { + /* Just copy it! */ + grub_memcpy (buf, data + offset, size); + grub_disk_cache_unlock (disk->dev->id, disk->id, sector); + return GRUB_ERR_NONE; + } + + /* Allocate a temporary buffer. */ + tmp_buf = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); + if (! tmp_buf) + return grub_errno; + + /* Otherwise read data from the disk actually. */ + if (disk->total_sectors == GRUB_DISK_SIZE_UNKNOWN + || sector + GRUB_DISK_CACHE_SIZE + < (disk->total_sectors << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS))) + { + grub_err_t err; + err = (disk->dev->read) (disk, transform_sector (disk, sector), + 1U << (GRUB_DISK_CACHE_BITS + + GRUB_DISK_SECTOR_BITS + - disk->log_sector_size), tmp_buf); + if (!err) + { + /* Copy it and store it in the disk cache. */ + grub_memcpy (buf, tmp_buf + offset, size); + grub_disk_cache_store (disk->dev->id, disk->id, + sector, tmp_buf); + grub_free (tmp_buf); + return GRUB_ERR_NONE; + } + } + + grub_free (tmp_buf); + grub_errno = GRUB_ERR_NONE; + + { + /* Uggh... Failed. Instead, just read necessary data. */ + unsigned num; + grub_disk_addr_t aligned_sector; + + sector += (offset >> GRUB_DISK_SECTOR_BITS); + offset &= ((1 << GRUB_DISK_SECTOR_BITS) - 1); + aligned_sector = (sector & ~((1ULL << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)) + - 1)); + offset += ((sector - aligned_sector) << GRUB_DISK_SECTOR_BITS); + num = ((size + offset + (1ULL << (disk->log_sector_size)) + - 1) >> (disk->log_sector_size)); + + tmp_buf = grub_malloc (num << disk->log_sector_size); + if (!tmp_buf) + return grub_errno; + + if ((disk->dev->read) (disk, transform_sector (disk, aligned_sector), + num, tmp_buf)) + { + grub_error_push (); + grub_dprintf ("disk", "%s read failed\n", disk->name); + grub_error_pop (); + grub_free (tmp_buf); + return grub_errno; + } + grub_memcpy (buf, tmp_buf + offset, size); + grub_free (tmp_buf); + return GRUB_ERR_NONE; + } +} + +static grub_err_t +grub_disk_read_small (grub_disk_t disk, grub_disk_addr_t sector, + grub_off_t offset, grub_size_t size, void *buf) +{ + grub_err_t err; + + err = grub_disk_read_small_real (disk, sector, offset, size, buf); + if (err) + return err; + if (disk->read_hook) + (disk->read_hook) (sector + (offset >> GRUB_DISK_SECTOR_BITS), + offset & (GRUB_DISK_SECTOR_SIZE - 1), + size, disk->read_hook_data); + return GRUB_ERR_NONE; +} + +/* Read data from the disk. */ +grub_err_t +grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_off_t offset, grub_size_t size, void *buf) +{ + /* First of all, check if the region is within the disk. */ + if (grub_disk_adjust_range (disk, §or, &offset, size) != GRUB_ERR_NONE) + { + grub_error_push (); + grub_dprintf ("disk", "Read out of range: sector 0x%llx (%s).\n", + (unsigned long long) sector, grub_errmsg); + grub_error_pop (); + return grub_errno; + } + + /* First read until first cache boundary. */ + if (offset || (sector & (GRUB_DISK_CACHE_SIZE - 1))) + { + grub_disk_addr_t start_sector; + grub_size_t pos; + grub_err_t err; + grub_size_t len; + + start_sector = sector & ~((grub_disk_addr_t) GRUB_DISK_CACHE_SIZE - 1); + pos = (sector - start_sector) << GRUB_DISK_SECTOR_BITS; + len = ((GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS) + - pos - offset); + if (len > size) + len = size; + err = grub_disk_read_small (disk, start_sector, + offset + pos, len, buf); + if (err) + return err; + buf = (char *) buf + len; + size -= len; + offset += len; + sector += (offset >> GRUB_DISK_SECTOR_BITS); + offset &= ((1 << GRUB_DISK_SECTOR_BITS) - 1); + } + + /* Until SIZE is zero... */ + while (size >= (GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS)) + { + char *data = NULL; + grub_disk_addr_t agglomerate; + grub_err_t err; + + /* agglomerate read until we find a first cached entry. */ + for (agglomerate = 0; agglomerate + < (size >> (GRUB_DISK_SECTOR_BITS + GRUB_DISK_CACHE_BITS)) + && agglomerate < disk->max_agglomerate; + agglomerate++) + { + data = grub_disk_cache_fetch (disk->dev->id, disk->id, + sector + (agglomerate + << GRUB_DISK_CACHE_BITS)); + if (data) + break; + } + + if (data) + { + grub_memcpy ((char *) buf + + (agglomerate << (GRUB_DISK_CACHE_BITS + + GRUB_DISK_SECTOR_BITS)), + data, GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS); + grub_disk_cache_unlock (disk->dev->id, disk->id, + sector + (agglomerate + << GRUB_DISK_CACHE_BITS)); + } + + if (agglomerate) + { + grub_disk_addr_t i; + + err = (disk->dev->read) (disk, transform_sector (disk, sector), + agglomerate << (GRUB_DISK_CACHE_BITS + + GRUB_DISK_SECTOR_BITS + - disk->log_sector_size), + buf); + if (err) + return err; + + for (i = 0; i < agglomerate; i ++) + grub_disk_cache_store (disk->dev->id, disk->id, + sector + (i << GRUB_DISK_CACHE_BITS), + (char *) buf + + (i << (GRUB_DISK_CACHE_BITS + + GRUB_DISK_SECTOR_BITS))); + + + if (disk->read_hook) + (disk->read_hook) (sector, 0, agglomerate << (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS), + disk->read_hook_data); + + sector += agglomerate << GRUB_DISK_CACHE_BITS; + size -= agglomerate << (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS); + buf = (char *) buf + + (agglomerate << (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS)); + } + + if (data) + { + if (disk->read_hook) + (disk->read_hook) (sector, 0, (GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS), + disk->read_hook_data); + sector += GRUB_DISK_CACHE_SIZE; + buf = (char *) buf + (GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS); + size -= (GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS); + } + } + + /* And now read the last part. */ + if (size) + { + grub_err_t err; + err = grub_disk_read_small (disk, sector, 0, size, buf); + if (err) + return err; + } + + return grub_errno; +} + +grub_uint64_t +grub_disk_get_size (grub_disk_t disk) +{ + if (disk->partition) + return grub_partition_get_len (disk->partition); + else if (disk->total_sectors != GRUB_DISK_SIZE_UNKNOWN) + return disk->total_sectors << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); + else + return GRUB_DISK_SIZE_UNKNOWN; +} diff --git a/grub-core/kern/disk_common.c b/grub-core/kern/disk_common.c new file mode 100644 index 000000000..2ca12b5f8 --- /dev/null +++ b/grub-core/kern/disk_common.c @@ -0,0 +1,65 @@ +/* This function performs three tasks: + - Make sectors disk relative from partition relative. + - Normalize offset to be less than the sector size. + - Verify that the range is inside the partition. */ +static grub_err_t +grub_disk_adjust_range (grub_disk_t disk, grub_disk_addr_t *sector, + grub_off_t *offset, grub_size_t size) +{ + grub_partition_t part; + grub_disk_addr_t total_sectors; + + *sector += *offset >> GRUB_DISK_SECTOR_BITS; + *offset &= GRUB_DISK_SECTOR_SIZE - 1; + + for (part = disk->partition; part; part = part->parent) + { + grub_disk_addr_t start; + grub_uint64_t len; + + start = part->start; + len = part->len; + + if (*sector >= len + || len - *sector < ((*offset + size + GRUB_DISK_SECTOR_SIZE - 1) + >> GRUB_DISK_SECTOR_BITS)) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read or write outside of partition")); + + *sector += start; + } + + /* Transform total_sectors to number of 512B blocks. */ + total_sectors = disk->total_sectors << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); + + /* Some drivers have problems with disks above reasonable. + Treat unknown as 1EiB disk. While on it, clamp the size to 1EiB. + Just one condition is enough since GRUB_DISK_UNKNOWN_SIZE << ls is always + above 9EiB. + */ + if (total_sectors > (1ULL << 51)) + total_sectors = (1ULL << 51); + + if ((total_sectors <= *sector + || ((*offset + size + GRUB_DISK_SECTOR_SIZE - 1) + >> GRUB_DISK_SECTOR_BITS) > total_sectors - *sector)) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read or write outside of disk `%s'"), disk->name); + + return GRUB_ERR_NONE; +} + +static inline grub_disk_addr_t +transform_sector (grub_disk_t disk, grub_disk_addr_t sector) +{ + return sector >> (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); +} + +static unsigned +grub_disk_cache_get_index (unsigned long dev_id, unsigned long disk_id, + grub_disk_addr_t sector) +{ + return ((dev_id * 524287UL + disk_id * 2606459UL + + ((unsigned) (sector >> GRUB_DISK_CACHE_BITS))) + % GRUB_DISK_CACHE_NUM); +} diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c new file mode 100644 index 000000000..e394cd96f --- /dev/null +++ b/grub-core/kern/dl.c @@ -0,0 +1,816 @@ +/* dl.c - loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* Force native word size */ +#define GRUB_TARGET_WORDSIZE (8 * GRUB_CPU_SIZEOF_VOID_P) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Platforms where modules are in a readonly area of memory. */ +#if defined(GRUB_MACHINE_QEMU) +#define GRUB_MODULES_MACHINE_READONLY +#endif + + + +#pragma GCC diagnostic ignored "-Wcast-align" + +grub_dl_t grub_dl_head = 0; + +grub_err_t +grub_dl_add (grub_dl_t mod); + +/* Keep global so that GDB scripts work. */ +grub_err_t +grub_dl_add (grub_dl_t mod) +{ + if (grub_dl_get (mod->name)) + return grub_error (GRUB_ERR_BAD_MODULE, + "`%s' is already loaded", mod->name); + + return GRUB_ERR_NONE; +} + +static void +grub_dl_remove (grub_dl_t mod) +{ + grub_dl_t *p, q; + + for (p = &grub_dl_head, q = *p; q; p = &q->next, q = *p) + if (q == mod) + { + *p = q->next; + return; + } +} + + + +struct grub_symbol +{ + struct grub_symbol *next; + const char *name; + void *addr; + int isfunc; + grub_dl_t mod; /* The module to which this symbol belongs. */ +}; +typedef struct grub_symbol *grub_symbol_t; + +/* The size of the symbol table. */ +#define GRUB_SYMTAB_SIZE 509 + +/* The symbol table (using an open-hash). */ +static struct grub_symbol *grub_symtab[GRUB_SYMTAB_SIZE]; + +/* Simple hash function. */ +static unsigned +grub_symbol_hash (const char *s) +{ + unsigned key = 0; + + while (*s) + key = key * 65599 + *s++; + + return (key + (key >> 5)) % GRUB_SYMTAB_SIZE; +} + +/* Resolve the symbol name NAME and return the address. + Return NULL, if not found. */ +static grub_symbol_t +grub_dl_resolve_symbol (const char *name) +{ + grub_symbol_t sym; + + for (sym = grub_symtab[grub_symbol_hash (name)]; sym; sym = sym->next) + if (grub_strcmp (sym->name, name) == 0) + return sym; + + return 0; +} + +/* Register a symbol with the name NAME and the address ADDR. */ +grub_err_t +grub_dl_register_symbol (const char *name, void *addr, int isfunc, + grub_dl_t mod) +{ + grub_symbol_t sym; + unsigned k; + + sym = (grub_symbol_t) grub_malloc (sizeof (*sym)); + if (! sym) + return grub_errno; + + if (mod) + { + sym->name = grub_strdup (name); + if (! sym->name) + { + grub_free (sym); + return grub_errno; + } + } + else + sym->name = name; + + sym->addr = addr; + sym->mod = mod; + sym->isfunc = isfunc; + + k = grub_symbol_hash (name); + sym->next = grub_symtab[k]; + grub_symtab[k] = sym; + + return GRUB_ERR_NONE; +} + +/* Unregister all the symbols defined in the module MOD. */ +static void +grub_dl_unregister_symbols (grub_dl_t mod) +{ + unsigned i; + + if (! mod) + grub_fatal ("core symbols cannot be unregistered"); + + for (i = 0; i < GRUB_SYMTAB_SIZE; i++) + { + grub_symbol_t sym, *p, q; + + for (p = &grub_symtab[i], sym = *p; sym; sym = q) + { + q = sym->next; + if (sym->mod == mod) + { + *p = q; + grub_free ((void *) sym->name); + grub_free (sym); + } + else + p = &sym->next; + } + } +} + +/* Return the address of a section whose index is N. */ +static void * +grub_dl_get_section_addr (grub_dl_t mod, unsigned n) +{ + grub_dl_segment_t seg; + + for (seg = mod->segment; seg; seg = seg->next) + if (seg->section == n) + return seg->addr; + + return 0; +} + +/* Check if EHDR is a valid ELF header. */ +static grub_err_t +grub_dl_check_header (void *ehdr, grub_size_t size) +{ + Elf_Ehdr *e = ehdr; + grub_err_t err; + + /* Check the header size. */ + if (size < sizeof (Elf_Ehdr)) + return grub_error (GRUB_ERR_BAD_OS, "ELF header smaller than expected"); + + /* Check the magic numbers. */ + if (e->e_ident[EI_MAG0] != ELFMAG0 + || e->e_ident[EI_MAG1] != ELFMAG1 + || e->e_ident[EI_MAG2] != ELFMAG2 + || e->e_ident[EI_MAG3] != ELFMAG3 + || e->e_ident[EI_VERSION] != EV_CURRENT + || e->e_version != EV_CURRENT) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-independent ELF magic")); + + err = grub_arch_dl_check_header (ehdr); + if (err) + return err; + + return GRUB_ERR_NONE; +} + +/* Load all segments from memory specified by E. */ +static grub_err_t +grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e) +{ + unsigned i; + const Elf_Shdr *s; + grub_size_t tsize = 0, talign = 1; +#if !defined (__i386__) && !defined (__x86_64__) + grub_size_t tramp; + grub_size_t got; + grub_err_t err; +#endif + char *ptr; + + for (i = 0, s = (const Elf_Shdr *)((const char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (const Elf_Shdr *)((const char *) s + e->e_shentsize)) + { + tsize = ALIGN_UP (tsize, s->sh_addralign) + s->sh_size; + if (talign < s->sh_addralign) + talign = s->sh_addralign; + } + +#if !defined (__i386__) && !defined (__x86_64__) + err = grub_arch_dl_get_tramp_got_size (e, &tramp, &got); + if (err) + return err; + tsize += ALIGN_UP (tramp, GRUB_ARCH_DL_TRAMP_ALIGN); + if (talign < GRUB_ARCH_DL_TRAMP_ALIGN) + talign = GRUB_ARCH_DL_TRAMP_ALIGN; + tsize += ALIGN_UP (got, GRUB_ARCH_DL_GOT_ALIGN); + if (talign < GRUB_ARCH_DL_GOT_ALIGN) + talign = GRUB_ARCH_DL_GOT_ALIGN; +#endif + +#ifdef GRUB_MACHINE_EMU + mod->base = grub_osdep_dl_memalign (talign, tsize); +#else + mod->base = grub_memalign (talign, tsize); +#endif + if (!mod->base) + return grub_errno; + mod->sz = tsize; + ptr = mod->base; + + for (i = 0, s = (Elf_Shdr *)((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *)((char *) s + e->e_shentsize)) + { + if (s->sh_flags & SHF_ALLOC) + { + grub_dl_segment_t seg; + + seg = (grub_dl_segment_t) grub_malloc (sizeof (*seg)); + if (! seg) + return grub_errno; + + if (s->sh_size) + { + void *addr; + + ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, s->sh_addralign); + addr = ptr; + ptr += s->sh_size; + + switch (s->sh_type) + { + case SHT_PROGBITS: + grub_memcpy (addr, (char *) e + s->sh_offset, s->sh_size); + break; + case SHT_NOBITS: + grub_memset (addr, 0, s->sh_size); + break; + } + + seg->addr = addr; + } + else + seg->addr = 0; + + seg->size = s->sh_size; + seg->section = i; + seg->next = mod->segment; + mod->segment = seg; + } + } +#if !defined (__i386__) && !defined (__x86_64__) + ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, GRUB_ARCH_DL_TRAMP_ALIGN); + mod->tramp = ptr; + mod->trampptr = ptr; + ptr += tramp; + ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, GRUB_ARCH_DL_GOT_ALIGN); + mod->got = ptr; + mod->gotptr = ptr; + ptr += got; +#endif + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_dl_resolve_symbols (grub_dl_t mod, Elf_Ehdr *e) +{ + unsigned i; + Elf_Shdr *s; + Elf_Sym *sym; + const char *str; + Elf_Word size, entsize; + + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_SYMTAB) + break; + + /* Module without symbol table may still be used to pull in dependencies. + We verify at build time that such modules do not contain any relocations + that may reference symbol table. */ + if (i == e->e_shnum) + return GRUB_ERR_NONE; + +#ifdef GRUB_MODULES_MACHINE_READONLY + mod->symtab = grub_malloc (s->sh_size); + if (!mod->symtab) + return grub_errno; + grub_memcpy (mod->symtab, (char *) e + s->sh_offset, s->sh_size); +#else + mod->symtab = (Elf_Sym *) ((char *) e + s->sh_offset); +#endif + mod->symsize = s->sh_entsize; + sym = mod->symtab; + size = s->sh_size; + entsize = s->sh_entsize; + + s = (Elf_Shdr *) ((char *) e + e->e_shoff + e->e_shentsize * s->sh_link); + str = (char *) e + s->sh_offset; + + for (i = 0; + i < size / entsize; + i++, sym = (Elf_Sym *) ((char *) sym + entsize)) + { + unsigned char type = ELF_ST_TYPE (sym->st_info); + unsigned char bind = ELF_ST_BIND (sym->st_info); + const char *name = str + sym->st_name; + + switch (type) + { + case STT_NOTYPE: + case STT_OBJECT: + /* Resolve a global symbol. */ + if (sym->st_name != 0 && sym->st_shndx == 0) + { + grub_symbol_t nsym = grub_dl_resolve_symbol (name); + if (! nsym) + return grub_error (GRUB_ERR_BAD_MODULE, + N_("symbol `%s' not found"), name); + sym->st_value = (Elf_Addr) nsym->addr; + if (nsym->isfunc) + sym->st_info = ELF_ST_INFO (bind, STT_FUNC); + } + else + { + sym->st_value += (Elf_Addr) grub_dl_get_section_addr (mod, + sym->st_shndx); + if (bind != STB_LOCAL) + if (grub_dl_register_symbol (name, (void *) sym->st_value, 0, mod)) + return grub_errno; + } + break; + + case STT_FUNC: + sym->st_value += (Elf_Addr) grub_dl_get_section_addr (mod, + sym->st_shndx); +#ifdef __ia64__ + { + /* FIXME: free descriptor once it's not used anymore. */ + char **desc; + desc = grub_malloc (2 * sizeof (char *)); + if (!desc) + return grub_errno; + desc[0] = (void *) sym->st_value; + desc[1] = mod->base; + sym->st_value = (grub_addr_t) desc; + } +#endif + if (bind != STB_LOCAL) + if (grub_dl_register_symbol (name, (void *) sym->st_value, 1, mod)) + return grub_errno; + if (grub_strcmp (name, "grub_mod_init") == 0) + mod->init = (void (*) (grub_dl_t)) sym->st_value; + else if (grub_strcmp (name, "grub_mod_fini") == 0) + mod->fini = (void (*) (void)) sym->st_value; + break; + + case STT_SECTION: + sym->st_value = (Elf_Addr) grub_dl_get_section_addr (mod, + sym->st_shndx); + break; + + case STT_FILE: + sym->st_value = 0; + break; + + default: + return grub_error (GRUB_ERR_BAD_MODULE, + "unknown symbol type `%d'", (int) type); + } + } + + return GRUB_ERR_NONE; +} + +static Elf_Shdr * +grub_dl_find_section (Elf_Ehdr *e, const char *name) +{ + Elf_Shdr *s; + const char *str; + unsigned i; + + s = (Elf_Shdr *) ((char *) e + e->e_shoff + e->e_shstrndx * e->e_shentsize); + str = (char *) e + s->sh_offset; + + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + if (grub_strcmp (str + s->sh_name, name) == 0) + return s; + return NULL; +} + +/* Me, Vladimir Serbinenko, hereby I add this module check as per new + GNU module policy. Note that this license check is informative only. + Modules have to be licensed under GPLv3 or GPLv3+ (optionally + multi-licensed under other licences as well) independently of the + presence of this check and solely by linking (module loading in GRUB + constitutes linking) and GRUB core being licensed under GPLv3+. + Be sure to understand your license obligations. +*/ +static grub_err_t +grub_dl_check_license (Elf_Ehdr *e) +{ + Elf_Shdr *s = grub_dl_find_section (e, ".module_license"); + if (s && (grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv3") == 0 + || grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv3+") == 0 + || grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv2+") == 0)) + return GRUB_ERR_NONE; + return grub_error (GRUB_ERR_BAD_MODULE, "incompatible license"); +} + +static grub_err_t +grub_dl_resolve_name (grub_dl_t mod, Elf_Ehdr *e) +{ + Elf_Shdr *s; + + s = grub_dl_find_section (e, ".modname"); + if (!s) + return grub_error (GRUB_ERR_BAD_MODULE, "no module name found"); + + mod->name = grub_strdup ((char *) e + s->sh_offset); + if (! mod->name) + return grub_errno; + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_dl_resolve_dependencies (grub_dl_t mod, Elf_Ehdr *e) +{ + Elf_Shdr *s; + + s = grub_dl_find_section (e, ".moddeps"); + + if (!s) + return GRUB_ERR_NONE; + + const char *name = (char *) e + s->sh_offset; + const char *max = name + s->sh_size; + + while ((name < max) && (*name)) + { + grub_dl_t m; + grub_dl_dep_t dep; + + m = grub_dl_load (name); + if (! m) + return grub_errno; + + grub_dl_ref (m); + + dep = (grub_dl_dep_t) grub_malloc (sizeof (*dep)); + if (! dep) + return grub_errno; + + dep->mod = m; + dep->next = mod->dep; + mod->dep = dep; + + name += grub_strlen (name) + 1; + } + + return GRUB_ERR_NONE; +} + +int +grub_dl_ref (grub_dl_t mod) +{ + grub_dl_dep_t dep; + + if (!mod) + return 0; + + for (dep = mod->dep; dep; dep = dep->next) + grub_dl_ref (dep->mod); + + return ++mod->ref_count; +} + +int +grub_dl_unref (grub_dl_t mod) +{ + grub_dl_dep_t dep; + + if (!mod) + return 0; + + for (dep = mod->dep; dep; dep = dep->next) + grub_dl_unref (dep->mod); + + return --mod->ref_count; +} + +static void +grub_dl_flush_cache (grub_dl_t mod) +{ + grub_dprintf ("modules", "flushing 0x%lx bytes at %p\n", + (unsigned long) mod->sz, mod->base); + grub_arch_sync_caches (mod->base, mod->sz); +} + +static grub_err_t +grub_dl_relocate_symbols (grub_dl_t mod, void *ehdr) +{ + Elf_Ehdr *e = ehdr; + Elf_Shdr *s; + unsigned i; + + for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) + if (s->sh_type == SHT_REL || s->sh_type == SHT_RELA) + { + grub_dl_segment_t seg; + grub_err_t err; + + /* Find the target segment. */ + for (seg = mod->segment; seg; seg = seg->next) + if (seg->section == s->sh_info) + break; + + if (seg) + { + if (!mod->symtab) + return grub_error (GRUB_ERR_BAD_MODULE, "relocation without symbol table"); + + err = grub_arch_dl_relocate_symbols (mod, ehdr, s, seg); + if (err) + return err; + } + } + + return GRUB_ERR_NONE; +} + +/* Load a module from core memory. */ +grub_dl_t +grub_dl_load_core_noinit (void *addr, grub_size_t size) +{ + Elf_Ehdr *e; + grub_dl_t mod; + + grub_dprintf ("modules", "module at %p, size 0x%lx\n", addr, + (unsigned long) size); + e = addr; + if (grub_dl_check_header (e, size)) + return 0; + + if (e->e_type != ET_REL) + { + grub_error (GRUB_ERR_BAD_MODULE, N_("this ELF file is not of the right type")); + return 0; + } + + /* Make sure that every section is within the core. */ + if (size < e->e_shoff + (grub_uint32_t) e->e_shentsize * e->e_shnum) + { + grub_error (GRUB_ERR_BAD_OS, "ELF sections outside core"); + return 0; + } + + mod = (grub_dl_t) grub_zalloc (sizeof (*mod)); + if (! mod) + return 0; + + mod->ref_count = 1; + + grub_dprintf ("modules", "relocating to %p\n", mod); + /* Me, Vladimir Serbinenko, hereby I add this module check as per new + GNU module policy. Note that this license check is informative only. + Modules have to be licensed under GPLv3 or GPLv3+ (optionally + multi-licensed under other licences as well) independently of the + presence of this check and solely by linking (module loading in GRUB + constitutes linking) and GRUB core being licensed under GPLv3+. + Be sure to understand your license obligations. + */ + if (grub_dl_check_license (e) + || grub_dl_resolve_name (mod, e) + || grub_dl_resolve_dependencies (mod, e) + || grub_dl_load_segments (mod, e) + || grub_dl_resolve_symbols (mod, e) + || grub_dl_relocate_symbols (mod, e)) + { + mod->fini = 0; + grub_dl_unload (mod); + return 0; + } + + grub_dl_flush_cache (mod); + + grub_dprintf ("modules", "module name: %s\n", mod->name); + grub_dprintf ("modules", "init function: %p\n", mod->init); + + if (grub_dl_add (mod)) + { + grub_dl_unload (mod); + return 0; + } + + return mod; +} + +grub_dl_t +grub_dl_load_core (void *addr, grub_size_t size) +{ + grub_dl_t mod; + + grub_boot_time ("Parsing module"); + + mod = grub_dl_load_core_noinit (addr, size); + + if (!mod) + return NULL; + + grub_boot_time ("Initing module %s", mod->name); + grub_dl_init (mod); + grub_boot_time ("Module %s inited", mod->name); + + return mod; +} + +/* Load a module from the file FILENAME. */ +grub_dl_t +grub_dl_load_file (const char *filename) +{ + grub_file_t file = NULL; + grub_ssize_t size; + void *core = 0; + grub_dl_t mod = 0; + + grub_boot_time ("Loading module %s", filename); + + file = grub_file_open (filename); + if (! file) + return 0; + + size = grub_file_size (file); + core = grub_malloc (size); + if (! core) + { + grub_file_close (file); + return 0; + } + + if (grub_file_read (file, core, size) != (int) size) + { + grub_file_close (file); + grub_free (core); + return 0; + } + + /* We must close this before we try to process dependencies. + Some disk backends do not handle gracefully multiple concurrent + opens of the same device. */ + grub_file_close (file); + + mod = grub_dl_load_core (core, size); + grub_free (core); + if (! mod) + return 0; + + mod->ref_count--; + return mod; +} + +/* Load a module using a symbolic name. */ +grub_dl_t +grub_dl_load (const char *name) +{ + char *filename; + grub_dl_t mod; + const char *grub_dl_dir = grub_env_get ("prefix"); + + mod = grub_dl_get (name); + if (mod) + return mod; + + if (grub_no_modules) + return 0; + + if (! grub_dl_dir) { + grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "prefix"); + return 0; + } + + filename = grub_xasprintf ("%s/" GRUB_TARGET_CPU "-" GRUB_PLATFORM "/%s.mod", + grub_dl_dir, name); + if (! filename) + return 0; + + mod = grub_dl_load_file (filename); + grub_free (filename); + + if (! mod) + return 0; + + if (grub_strcmp (mod->name, name) != 0) + grub_error (GRUB_ERR_BAD_MODULE, "mismatched names"); + + return mod; +} + +/* Unload the module MOD. */ +int +grub_dl_unload (grub_dl_t mod) +{ + grub_dl_dep_t dep, depn; + + if (mod->ref_count > 0) + return 0; + + if (mod->fini) + (mod->fini) (); + + grub_dl_remove (mod); + grub_dl_unregister_symbols (mod); + + for (dep = mod->dep; dep; dep = depn) + { + depn = dep->next; + + grub_dl_unload (dep->mod); + + grub_free (dep); + } + +#ifdef GRUB_MACHINE_EMU + grub_dl_osdep_dl_free (mod->base); +#else + grub_free (mod->base); +#endif + grub_free (mod->name); +#ifdef GRUB_MODULES_MACHINE_READONLY + grub_free (mod->symtab); +#endif + grub_free (mod); + return 1; +} + +/* Unload unneeded modules. */ +void +grub_dl_unload_unneeded (void) +{ + /* Because grub_dl_remove modifies the list of modules, this + implementation is tricky. */ + grub_dl_t p = grub_dl_head; + + while (p) + { + if (grub_dl_unload (p)) + { + p = grub_dl_head; + continue; + } + + p = p->next; + } +} diff --git a/grub-core/kern/efi/acpi.c b/grub-core/kern/efi/acpi.c new file mode 100644 index 000000000..74f8cd1a9 --- /dev/null +++ b/grub-core/kern/efi/acpi.c @@ -0,0 +1,59 @@ +/* acpi.c - get acpi tables. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +struct grub_acpi_rsdp_v10 * +grub_machine_acpi_get_rsdpv1 (void) +{ + unsigned i; + static grub_efi_packed_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID; + + for (i = 0; i < grub_efi_system_table->num_table_entries; i++) + { + grub_efi_packed_guid_t *guid = + &grub_efi_system_table->configuration_table[i].vendor_guid; + + if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_packed_guid_t))) + return (struct grub_acpi_rsdp_v10 *) + grub_efi_system_table->configuration_table[i].vendor_table; + } + return 0; +} + +struct grub_acpi_rsdp_v20 * +grub_machine_acpi_get_rsdpv2 (void) +{ + unsigned i; + static grub_efi_packed_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID; + + for (i = 0; i < grub_efi_system_table->num_table_entries; i++) + { + grub_efi_packed_guid_t *guid = + &grub_efi_system_table->configuration_table[i].vendor_guid; + + if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_packed_guid_t))) + return (struct grub_acpi_rsdp_v20 *) + grub_efi_system_table->configuration_table[i].vendor_table; + } + return 0; +} diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c new file mode 100644 index 000000000..d467785fc --- /dev/null +++ b/grub-core/kern/efi/efi.c @@ -0,0 +1,916 @@ +/* efi.c - generic EFI support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* The handle of GRUB itself. Filled in by the startup code. */ +grub_efi_handle_t grub_efi_image_handle; + +/* The pointer to a system table. Filled in by the startup code. */ +grub_efi_system_table_t *grub_efi_system_table; + +static grub_efi_guid_t console_control_guid = GRUB_EFI_CONSOLE_CONTROL_GUID; +static grub_efi_guid_t loaded_image_guid = GRUB_EFI_LOADED_IMAGE_GUID; +static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID; + +void * +grub_efi_locate_protocol (grub_efi_guid_t *protocol, void *registration) +{ + void *interface; + grub_efi_status_t status; + + status = efi_call_3 (grub_efi_system_table->boot_services->locate_protocol, + protocol, registration, &interface); + if (status != GRUB_EFI_SUCCESS) + return 0; + + return interface; +} + +/* Return the array of handles which meet the requirement. If successful, + the number of handles is stored in NUM_HANDLES. The array is allocated + from the heap. */ +grub_efi_handle_t * +grub_efi_locate_handle (grub_efi_locate_search_type_t search_type, + grub_efi_guid_t *protocol, + void *search_key, + grub_efi_uintn_t *num_handles) +{ + grub_efi_boot_services_t *b; + grub_efi_status_t status; + grub_efi_handle_t *buffer; + grub_efi_uintn_t buffer_size = 8 * sizeof (grub_efi_handle_t); + + buffer = grub_malloc (buffer_size); + if (! buffer) + return 0; + + b = grub_efi_system_table->boot_services; + status = efi_call_5 (b->locate_handle, search_type, protocol, search_key, + &buffer_size, buffer); + if (status == GRUB_EFI_BUFFER_TOO_SMALL) + { + grub_free (buffer); + buffer = grub_malloc (buffer_size); + if (! buffer) + return 0; + + status = efi_call_5 (b->locate_handle, search_type, protocol, search_key, + &buffer_size, buffer); + } + + if (status != GRUB_EFI_SUCCESS) + { + grub_free (buffer); + return 0; + } + + *num_handles = buffer_size / sizeof (grub_efi_handle_t); + return buffer; +} + +void * +grub_efi_open_protocol (grub_efi_handle_t handle, + grub_efi_guid_t *protocol, + grub_efi_uint32_t attributes) +{ + grub_efi_boot_services_t *b; + grub_efi_status_t status; + void *interface; + + b = grub_efi_system_table->boot_services; + status = efi_call_6 (b->open_protocol, handle, + protocol, + &interface, + grub_efi_image_handle, + 0, + attributes); + if (status != GRUB_EFI_SUCCESS) + return 0; + + return interface; +} + +int +grub_efi_set_text_mode (int on) +{ + grub_efi_console_control_protocol_t *c; + grub_efi_screen_mode_t mode, new_mode; + + c = grub_efi_locate_protocol (&console_control_guid, 0); + if (! c) + /* No console control protocol instance available, assume it is + already in text mode. */ + return 1; + + if (efi_call_4 (c->get_mode, c, &mode, 0, 0) != GRUB_EFI_SUCCESS) + return 0; + + new_mode = on ? GRUB_EFI_SCREEN_TEXT : GRUB_EFI_SCREEN_GRAPHICS; + if (mode != new_mode) + if (efi_call_2 (c->set_mode, c, new_mode) != GRUB_EFI_SUCCESS) + return 0; + + return 1; +} + +void +grub_efi_stall (grub_efi_uintn_t microseconds) +{ + efi_call_1 (grub_efi_system_table->boot_services->stall, microseconds); +} + +grub_efi_loaded_image_t * +grub_efi_get_loaded_image (grub_efi_handle_t image_handle) +{ + return grub_efi_open_protocol (image_handle, + &loaded_image_guid, + GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); +} + +void +grub_exit (void) +{ + grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); + efi_call_4 (grub_efi_system_table->boot_services->exit, + grub_efi_image_handle, GRUB_EFI_SUCCESS, 0, 0); + for (;;) ; +} + +grub_err_t +grub_efi_set_virtual_address_map (grub_efi_uintn_t memory_map_size, + grub_efi_uintn_t descriptor_size, + grub_efi_uint32_t descriptor_version, + grub_efi_memory_descriptor_t *virtual_map) +{ + grub_efi_runtime_services_t *r; + grub_efi_status_t status; + + r = grub_efi_system_table->runtime_services; + status = efi_call_4 (r->set_virtual_address_map, memory_map_size, + descriptor_size, descriptor_version, virtual_map); + + if (status == GRUB_EFI_SUCCESS) + return GRUB_ERR_NONE; + + return grub_error (GRUB_ERR_IO, "set_virtual_address_map failed"); +} + +grub_err_t +grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid, + void *data, grub_size_t datasize) +{ + grub_efi_status_t status; + grub_efi_runtime_services_t *r; + grub_efi_char16_t *var16; + grub_size_t len, len16; + + len = grub_strlen (var); + len16 = len * GRUB_MAX_UTF16_PER_UTF8; + var16 = grub_malloc ((len16 + 1) * sizeof (var16[0])); + if (!var16) + return grub_errno; + len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL); + var16[len16] = 0; + + r = grub_efi_system_table->runtime_services; + + status = efi_call_5 (r->set_variable, var16, guid, + (GRUB_EFI_VARIABLE_NON_VOLATILE + | GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS + | GRUB_EFI_VARIABLE_RUNTIME_ACCESS), + datasize, data); + grub_free (var16); + if (status == GRUB_EFI_SUCCESS) + return GRUB_ERR_NONE; + + return grub_error (GRUB_ERR_IO, "could not set EFI variable `%s'", var); +} + +void * +grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + grub_size_t *datasize_out) +{ + grub_efi_status_t status; + grub_efi_uintn_t datasize = 0; + grub_efi_runtime_services_t *r; + grub_efi_char16_t *var16; + void *data; + grub_size_t len, len16; + + *datasize_out = 0; + + len = grub_strlen (var); + len16 = len * GRUB_MAX_UTF16_PER_UTF8; + var16 = grub_malloc ((len16 + 1) * sizeof (var16[0])); + if (!var16) + return NULL; + len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL); + var16[len16] = 0; + + r = grub_efi_system_table->runtime_services; + + status = efi_call_5 (r->get_variable, var16, guid, NULL, &datasize, NULL); + + if (status != GRUB_EFI_BUFFER_TOO_SMALL || !datasize) + { + grub_free (var16); + return NULL; + } + + data = grub_malloc (datasize); + if (!data) + { + grub_free (var16); + return NULL; + } + + status = efi_call_5 (r->get_variable, var16, guid, NULL, &datasize, data); + grub_free (var16); + + if (status == GRUB_EFI_SUCCESS) + { + *datasize_out = datasize; + return data; + } + + grub_free (data); + return NULL; +} + +#pragma GCC diagnostic ignored "-Wcast-align" + +/* Search the mods section from the PE32/PE32+ image. This code uses + a PE32 header, but should work with PE32+ as well. */ +grub_addr_t +grub_efi_modules_addr (void) +{ + grub_efi_loaded_image_t *image; + struct grub_pe32_header *header; + struct grub_pe32_coff_header *coff_header; + struct grub_pe32_section_table *sections; + struct grub_pe32_section_table *section; + struct grub_module_info *info; + grub_uint16_t i; + + image = grub_efi_get_loaded_image (grub_efi_image_handle); + if (! image) + return 0; + + header = image->image_base; + coff_header = &(header->coff_header); + sections + = (struct grub_pe32_section_table *) ((char *) coff_header + + sizeof (*coff_header) + + coff_header->optional_header_size); + + for (i = 0, section = sections; + i < coff_header->num_sections; + i++, section++) + { + if (grub_strcmp (section->name, "mods") == 0) + break; + } + + if (i == coff_header->num_sections) + return 0; + + info = (struct grub_module_info *) ((char *) image->image_base + + section->virtual_address); + if (info->magic != GRUB_MODULE_MAGIC) + return 0; + + return (grub_addr_t) info; +} + +#pragma GCC diagnostic error "-Wcast-align" + +char * +grub_efi_get_filename (grub_efi_device_path_t *dp0) +{ + char *name = 0, *p, *pi; + grub_size_t filesize = 0; + grub_efi_device_path_t *dp; + + dp = dp0; + + while (1) + { + grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); + grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); + + if (type == GRUB_EFI_END_DEVICE_PATH_TYPE) + break; + if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE + && subtype == GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE) + { + grub_efi_uint16_t len; + len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4) + / sizeof (grub_efi_char16_t)); + filesize += GRUB_MAX_UTF8_PER_UTF16 * len + 2; + } + + dp = GRUB_EFI_NEXT_DEVICE_PATH (dp); + } + + if (!filesize) + return NULL; + + dp = dp0; + + p = name = grub_malloc (filesize); + if (!name) + return NULL; + + while (1) + { + grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); + grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); + + if (type == GRUB_EFI_END_DEVICE_PATH_TYPE) + break; + else if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE + && subtype == GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE) + { + grub_efi_file_path_device_path_t *fp; + grub_efi_uint16_t len; + + *p++ = '/'; + + len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4) + / sizeof (grub_efi_char16_t)); + fp = (grub_efi_file_path_device_path_t *) dp; + /* According to EFI spec Path Name is NULL terminated */ + while (len > 0 && fp->path_name[len - 1] == 0) + len--; + + p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len); + } + + dp = GRUB_EFI_NEXT_DEVICE_PATH (dp); + } + + *p = '\0'; + + for (pi = name, p = name; *pi;) + { + /* EFI breaks paths with backslashes. */ + if (*pi == '\\' || *pi == '/') + { + *p++ = '/'; + while (*pi == '\\' || *pi == '/') + pi++; + continue; + } + *p++ = *pi++; + } + *p = '\0'; + + return name; +} + +grub_efi_device_path_t * +grub_efi_get_device_path (grub_efi_handle_t handle) +{ + return grub_efi_open_protocol (handle, &device_path_guid, + GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); +} + +/* Return the device path node right before the end node. */ +grub_efi_device_path_t * +grub_efi_find_last_device_path (const grub_efi_device_path_t *dp) +{ + grub_efi_device_path_t *next, *p; + + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) + return 0; + + for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p); + ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next); + p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next)) + ; + + return p; +} + +/* Duplicate a device path. */ +grub_efi_device_path_t * +grub_efi_duplicate_device_path (const grub_efi_device_path_t *dp) +{ + grub_efi_device_path_t *p; + grub_size_t total_size = 0; + + for (p = (grub_efi_device_path_t *) dp; + ; + p = GRUB_EFI_NEXT_DEVICE_PATH (p)) + { + total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p); + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p)) + break; + } + + p = grub_malloc (total_size); + if (! p) + return 0; + + grub_memcpy (p, dp, total_size); + return p; +} + +static void +dump_vendor_path (const char *type, grub_efi_vendor_device_path_t *vendor) +{ + grub_uint32_t vendor_data_len = vendor->header.length - sizeof (*vendor); + grub_printf ("/%sVendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)[%x: ", + type, + (unsigned) vendor->vendor_guid.data1, + (unsigned) vendor->vendor_guid.data2, + (unsigned) vendor->vendor_guid.data3, + (unsigned) vendor->vendor_guid.data4[0], + (unsigned) vendor->vendor_guid.data4[1], + (unsigned) vendor->vendor_guid.data4[2], + (unsigned) vendor->vendor_guid.data4[3], + (unsigned) vendor->vendor_guid.data4[4], + (unsigned) vendor->vendor_guid.data4[5], + (unsigned) vendor->vendor_guid.data4[6], + (unsigned) vendor->vendor_guid.data4[7], + vendor_data_len); + if (vendor->header.length > sizeof (*vendor)) + { + grub_uint32_t i; + for (i = 0; i < vendor_data_len; i++) + grub_printf ("%02x ", vendor->vendor_defined_data[i]); + } + grub_printf ("]"); +} + + +/* Print the chain of Device Path nodes. This is mainly for debugging. */ +void +grub_efi_print_device_path (grub_efi_device_path_t *dp) +{ + while (1) + { + grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); + grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); + grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); + + switch (type) + { + case GRUB_EFI_END_DEVICE_PATH_TYPE: + switch (subtype) + { + case GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE: + grub_printf ("/EndEntire\n"); + //grub_putchar ('\n'); + break; + case GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE: + grub_printf ("/EndThis\n"); + //grub_putchar ('\n'); + break; + default: + grub_printf ("/EndUnknown(%x)\n", (unsigned) subtype); + break; + } + break; + + case GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE: + switch (subtype) + { + case GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE: + { + grub_efi_pci_device_path_t *pci + = (grub_efi_pci_device_path_t *) dp; + grub_printf ("/PCI(%x,%x)", + (unsigned) pci->function, (unsigned) pci->device); + } + break; + case GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE: + { + grub_efi_pccard_device_path_t *pccard + = (grub_efi_pccard_device_path_t *) dp; + grub_printf ("/PCCARD(%x)", + (unsigned) pccard->function); + } + break; + case GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE: + { + grub_efi_memory_mapped_device_path_t *mmapped + = (grub_efi_memory_mapped_device_path_t *) dp; + grub_printf ("/MMap(%x,%llx,%llx)", + (unsigned) mmapped->memory_type, + (unsigned long long) mmapped->start_address, + (unsigned long long) mmapped->end_address); + } + break; + case GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE: + dump_vendor_path ("Hardware", + (grub_efi_vendor_device_path_t *) dp); + break; + case GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE: + { + grub_efi_controller_device_path_t *controller + = (grub_efi_controller_device_path_t *) dp; + grub_printf ("/Ctrl(%x)", + (unsigned) controller->controller_number); + } + break; + default: + grub_printf ("/UnknownHW(%x)", (unsigned) subtype); + break; + } + break; + + case GRUB_EFI_ACPI_DEVICE_PATH_TYPE: + switch (subtype) + { + case GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE: + { + grub_efi_acpi_device_path_t *acpi + = (grub_efi_acpi_device_path_t *) dp; + grub_printf ("/ACPI(%x,%x)", + (unsigned) acpi->hid, + (unsigned) acpi->uid); + } + break; + case GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE: + { + grub_efi_expanded_acpi_device_path_t *eacpi + = (grub_efi_expanded_acpi_device_path_t *) dp; + grub_printf ("/ACPI("); + + if (GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)[0] == '\0') + grub_printf ("%x,", (unsigned) eacpi->hid); + else + grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)); + + if (GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)[0] == '\0') + grub_printf ("%x,", (unsigned) eacpi->uid); + else + grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)); + + if (GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)[0] == '\0') + grub_printf ("%x)", (unsigned) eacpi->cid); + else + grub_printf ("%s)", GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)); + } + break; + default: + grub_printf ("/UnknownACPI(%x)", (unsigned) subtype); + break; + } + break; + + case GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE: + switch (subtype) + { + case GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE: + { + grub_efi_atapi_device_path_t *atapi + = (grub_efi_atapi_device_path_t *) dp; + grub_printf ("/ATAPI(%x,%x,%x)", + (unsigned) atapi->primary_secondary, + (unsigned) atapi->slave_master, + (unsigned) atapi->lun); + } + break; + case GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE: + { + grub_efi_scsi_device_path_t *scsi + = (grub_efi_scsi_device_path_t *) dp; + grub_printf ("/SCSI(%x,%x)", + (unsigned) scsi->pun, + (unsigned) scsi->lun); + } + break; + case GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE: + { + grub_efi_fibre_channel_device_path_t *fc + = (grub_efi_fibre_channel_device_path_t *) dp; + grub_printf ("/FibreChannel(%llx,%llx)", + (unsigned long long) fc->wwn, + (unsigned long long) fc->lun); + } + break; + case GRUB_EFI_1394_DEVICE_PATH_SUBTYPE: + { + grub_efi_1394_device_path_t *firewire + = (grub_efi_1394_device_path_t *) dp; + grub_printf ("/1394(%llx)", + (unsigned long long) firewire->guid); + } + break; + case GRUB_EFI_USB_DEVICE_PATH_SUBTYPE: + { + grub_efi_usb_device_path_t *usb + = (grub_efi_usb_device_path_t *) dp; + grub_printf ("/USB(%x,%x)", + (unsigned) usb->parent_port_number, + (unsigned) usb->usb_interface); + } + break; + case GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE: + { + grub_efi_usb_class_device_path_t *usb_class + = (grub_efi_usb_class_device_path_t *) dp; + grub_printf ("/USBClass(%x,%x,%x,%x,%x)", + (unsigned) usb_class->vendor_id, + (unsigned) usb_class->product_id, + (unsigned) usb_class->device_class, + (unsigned) usb_class->device_subclass, + (unsigned) usb_class->device_protocol); + } + break; + case GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE: + { + grub_efi_i2o_device_path_t *i2o + = (grub_efi_i2o_device_path_t *) dp; + grub_printf ("/I2O(%x)", (unsigned) i2o->tid); + } + break; + case GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE: + { + grub_efi_mac_address_device_path_t *mac + = (grub_efi_mac_address_device_path_t *) dp; + grub_printf ("/MacAddr(%02x:%02x:%02x:%02x:%02x:%02x,%x)", + (unsigned) mac->mac_address[0], + (unsigned) mac->mac_address[1], + (unsigned) mac->mac_address[2], + (unsigned) mac->mac_address[3], + (unsigned) mac->mac_address[4], + (unsigned) mac->mac_address[5], + (unsigned) mac->if_type); + } + break; + case GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE: + { + grub_efi_ipv4_device_path_t *ipv4 + = (grub_efi_ipv4_device_path_t *) dp; + grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)", + (unsigned) ipv4->local_ip_address[0], + (unsigned) ipv4->local_ip_address[1], + (unsigned) ipv4->local_ip_address[2], + (unsigned) ipv4->local_ip_address[3], + (unsigned) ipv4->remote_ip_address[0], + (unsigned) ipv4->remote_ip_address[1], + (unsigned) ipv4->remote_ip_address[2], + (unsigned) ipv4->remote_ip_address[3], + (unsigned) ipv4->local_port, + (unsigned) ipv4->remote_port, + (unsigned) ipv4->protocol, + (unsigned) ipv4->static_ip_address); + } + break; + case GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE: + { + grub_efi_ipv6_device_path_t *ipv6 + = (grub_efi_ipv6_device_path_t *) dp; + grub_printf ("/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)", + (unsigned) ipv6->local_ip_address[0], + (unsigned) ipv6->local_ip_address[1], + (unsigned) ipv6->local_ip_address[2], + (unsigned) ipv6->local_ip_address[3], + (unsigned) ipv6->local_ip_address[4], + (unsigned) ipv6->local_ip_address[5], + (unsigned) ipv6->local_ip_address[6], + (unsigned) ipv6->local_ip_address[7], + (unsigned) ipv6->remote_ip_address[0], + (unsigned) ipv6->remote_ip_address[1], + (unsigned) ipv6->remote_ip_address[2], + (unsigned) ipv6->remote_ip_address[3], + (unsigned) ipv6->remote_ip_address[4], + (unsigned) ipv6->remote_ip_address[5], + (unsigned) ipv6->remote_ip_address[6], + (unsigned) ipv6->remote_ip_address[7], + (unsigned) ipv6->local_port, + (unsigned) ipv6->remote_port, + (unsigned) ipv6->protocol, + (unsigned) ipv6->static_ip_address); + } + break; + case GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE: + { + grub_efi_infiniband_device_path_t *ib + = (grub_efi_infiniband_device_path_t *) dp; + grub_printf ("/InfiniBand(%x,%llx,%llx,%llx)", + (unsigned) ib->port_gid[0], /* XXX */ + (unsigned long long) ib->remote_id, + (unsigned long long) ib->target_port_id, + (unsigned long long) ib->device_id); + } + break; + case GRUB_EFI_UART_DEVICE_PATH_SUBTYPE: + { + grub_efi_uart_device_path_t *uart + = (grub_efi_uart_device_path_t *) dp; + grub_printf ("/UART(%llu,%u,%x,%x)", + (unsigned long long) uart->baud_rate, + uart->data_bits, + uart->parity, + uart->stop_bits); + } + break; + case GRUB_EFI_SATA_DEVICE_PATH_SUBTYPE: + { + grub_efi_sata_device_path_t *sata; + sata = (grub_efi_sata_device_path_t *) dp; + grub_printf ("/Sata(%x,%x,%x)", + sata->hba_port, + sata->multiplier_port, + sata->lun); + } + break; + + case GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE: + dump_vendor_path ("Messaging", + (grub_efi_vendor_device_path_t *) dp); + break; + default: + grub_printf ("/UnknownMessaging(%x)", (unsigned) subtype); + break; + } + break; + + case GRUB_EFI_MEDIA_DEVICE_PATH_TYPE: + switch (subtype) + { + case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE: + { + grub_efi_hard_drive_device_path_t *hd = (grub_efi_hard_drive_device_path_t *) dp; + grub_printf ("/HD(%u,%llx,%llx,%02x%02x%02x%02x%02x%02x%02x%02x,%x,%x)", + hd->partition_number, + (unsigned long long) hd->partition_start, + (unsigned long long) hd->partition_size, + (unsigned) hd->partition_signature[0], + (unsigned) hd->partition_signature[1], + (unsigned) hd->partition_signature[2], + (unsigned) hd->partition_signature[3], + (unsigned) hd->partition_signature[4], + (unsigned) hd->partition_signature[5], + (unsigned) hd->partition_signature[6], + (unsigned) hd->partition_signature[7], + (unsigned) hd->partmap_type, + (unsigned) hd->signature_type); + } + break; + case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE: + { + grub_efi_cdrom_device_path_t *cd + = (grub_efi_cdrom_device_path_t *) dp; + grub_printf ("/CD(%u,%llx,%llx)", + cd->boot_entry, + (unsigned long long) cd->partition_start, + (unsigned long long) cd->partition_size); + } + break; + case GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE: + dump_vendor_path ("Media", + (grub_efi_vendor_device_path_t *) dp); + break; + case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE: + { + grub_efi_file_path_device_path_t *fp; + grub_uint8_t *buf; + fp = (grub_efi_file_path_device_path_t *) dp; + buf = grub_malloc ((len - 4) * 2 + 1); + if (buf) + *grub_utf16_to_utf8 (buf, fp->path_name, + (len - 4) / sizeof (grub_efi_char16_t)) + = '\0'; + else + grub_errno = GRUB_ERR_NONE; + grub_printf ("/File(%s)", buf); + grub_free (buf); + } + break; + case GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE: + { + grub_efi_protocol_device_path_t *proto + = (grub_efi_protocol_device_path_t *) dp; + grub_printf ("/Protocol(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", + (unsigned) proto->guid.data1, + (unsigned) proto->guid.data2, + (unsigned) proto->guid.data3, + (unsigned) proto->guid.data4[0], + (unsigned) proto->guid.data4[1], + (unsigned) proto->guid.data4[2], + (unsigned) proto->guid.data4[3], + (unsigned) proto->guid.data4[4], + (unsigned) proto->guid.data4[5], + (unsigned) proto->guid.data4[6], + (unsigned) proto->guid.data4[7]); + } + break; + default: + grub_printf ("/UnknownMedia(%x)", (unsigned) subtype); + break; + } + break; + + case GRUB_EFI_BIOS_DEVICE_PATH_TYPE: + switch (subtype) + { + case GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE: + { + grub_efi_bios_device_path_t *bios + = (grub_efi_bios_device_path_t *) dp; + grub_printf ("/BIOS(%x,%x,%s)", + (unsigned) bios->device_type, + (unsigned) bios->status_flags, + (char *) (dp + 1)); + } + break; + default: + grub_printf ("/UnknownBIOS(%x)", (unsigned) subtype); + break; + } + break; + + default: + grub_printf ("/UnknownType(%x,%x)\n", + (unsigned) type, + (unsigned) subtype); + return; + break; + } + + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) + break; + + dp = (grub_efi_device_path_t *) ((char *) dp + len); + } +} + +/* Compare device paths. */ +int +grub_efi_compare_device_paths (const grub_efi_device_path_t *dp1, + const grub_efi_device_path_t *dp2) +{ + if (! dp1 || ! dp2) + /* Return non-zero. */ + return 1; + + while (1) + { + grub_efi_uint8_t type1, type2; + grub_efi_uint8_t subtype1, subtype2; + grub_efi_uint16_t len1, len2; + int ret; + + type1 = GRUB_EFI_DEVICE_PATH_TYPE (dp1); + type2 = GRUB_EFI_DEVICE_PATH_TYPE (dp2); + + if (type1 != type2) + return (int) type2 - (int) type1; + + subtype1 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp1); + subtype2 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp2); + + if (subtype1 != subtype2) + return (int) subtype1 - (int) subtype2; + + len1 = GRUB_EFI_DEVICE_PATH_LENGTH (dp1); + len2 = GRUB_EFI_DEVICE_PATH_LENGTH (dp2); + + if (len1 != len2) + return (int) len1 - (int) len2; + + ret = grub_memcmp (dp1, dp2, len1); + if (ret != 0) + return ret; + + if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1)) + break; + + dp1 = (grub_efi_device_path_t *) ((char *) dp1 + len1); + dp2 = (grub_efi_device_path_t *) ((char *) dp2 + len2); + } + + return 0; +} diff --git a/grub-core/kern/efi/fdt.c b/grub-core/kern/efi/fdt.c new file mode 100644 index 000000000..30100c61c --- /dev/null +++ b/grub-core/kern/efi/fdt.c @@ -0,0 +1,43 @@ +/* fdt.c - EFI Flattened Device Tree interaction */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +void * +grub_efi_get_firmware_fdt (void) +{ + grub_efi_configuration_table_t *tables; + grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID; + void *firmware_fdt = NULL; + unsigned int i; + + /* Look for FDT in UEFI config tables. */ + tables = grub_efi_system_table->configuration_table; + + for (i = 0; i < grub_efi_system_table->num_table_entries; i++) + if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0) + { + firmware_fdt = tables[i].vendor_table; + grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt); + break; + } + + return firmware_fdt; +} diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c new file mode 100644 index 000000000..2c31847bf --- /dev/null +++ b/grub-core/kern/efi/init.c @@ -0,0 +1,83 @@ +/* init.c - generic EFI initialization and finalization */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +grub_addr_t grub_modbase; + +void +grub_efi_init (void) +{ + grub_modbase = grub_efi_modules_addr (); + /* First of all, initialize the console so that GRUB can display + messages. */ + grub_console_init (); + + /* Initialize the memory management system. */ + grub_efi_mm_init (); + + efi_call_4 (grub_efi_system_table->boot_services->set_watchdog_timer, + 0, 0, 0, NULL); + + grub_efidisk_init (); +} + +void (*grub_efi_net_config) (grub_efi_handle_t hnd, + char **device, + char **path); + +void +grub_machine_get_bootlocation (char **device, char **path) +{ + grub_efi_loaded_image_t *image = NULL; + char *p; + + image = grub_efi_get_loaded_image (grub_efi_image_handle); + if (!image) + return; + *device = grub_efidisk_get_device_name (image->device_handle); + if (!*device && grub_efi_net_config) + { + grub_efi_net_config (image->device_handle, device, path); + return; + } + + *path = grub_efi_get_filename (image->file_path); + if (*path) + { + /* Get the directory. */ + p = grub_strrchr (*path, '/'); + if (p) + *p = '\0'; + } +} + +void +grub_efi_fini (void) +{ + grub_efidisk_fini (); + grub_console_fini (); +} diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c new file mode 100644 index 000000000..20a47aaf5 --- /dev/null +++ b/grub-core/kern/efi/mm.c @@ -0,0 +1,527 @@ +/* mm.c - generic EFI memory management */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +#if defined (__i386__) || defined (__x86_64__) +#include +#endif + +#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ + ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) + +#define BYTES_TO_PAGES(bytes) (((bytes) + 0xfff) >> 12) +#define BYTES_TO_PAGES_DOWN(bytes) ((bytes) >> 12) +#define PAGES_TO_BYTES(pages) ((pages) << 12) + +/* The size of a memory map obtained from the firmware. This must be + a multiplier of 4KB. */ +#define MEMORY_MAP_SIZE 0x3000 + +/* The minimum and maximum heap size for GRUB itself. */ +#define MIN_HEAP_SIZE 0x100000 +#define MAX_HEAP_SIZE (1600 * 0x100000) + +static void *finish_mmap_buf = 0; +static grub_efi_uintn_t finish_mmap_size = 0; +static grub_efi_uintn_t finish_key = 0; +static grub_efi_uintn_t finish_desc_size; +static grub_efi_uint32_t finish_desc_version; +int grub_efi_is_finished = 0; + +/* Allocate pages. Return the pointer to the first of allocated pages. */ +void * +grub_efi_allocate_pages (grub_efi_physical_address_t address, + grub_efi_uintn_t pages) +{ + grub_efi_allocate_type_t type; + grub_efi_status_t status; + grub_efi_boot_services_t *b; + +#if 1 + /* Limit the memory access to less than 4GB for 32-bit platforms. */ + if (address > GRUB_EFI_MAX_USABLE_ADDRESS) + return 0; +#endif + +#if 1 + if (address == 0) + { + type = GRUB_EFI_ALLOCATE_MAX_ADDRESS; + address = GRUB_EFI_MAX_USABLE_ADDRESS; + } + else + type = GRUB_EFI_ALLOCATE_ADDRESS; +#else + if (address == 0) + type = GRUB_EFI_ALLOCATE_ANY_PAGES; + else + type = GRUB_EFI_ALLOCATE_ADDRESS; +#endif + + b = grub_efi_system_table->boot_services; + status = efi_call_4 (b->allocate_pages, type, GRUB_EFI_LOADER_DATA, pages, &address); + if (status != GRUB_EFI_SUCCESS) + return 0; + + if (address == 0) + { + /* Uggh, the address 0 was allocated... This is too annoying, + so reallocate another one. */ + address = GRUB_EFI_MAX_USABLE_ADDRESS; + status = efi_call_4 (b->allocate_pages, type, GRUB_EFI_LOADER_DATA, pages, &address); + grub_efi_free_pages (0, pages); + if (status != GRUB_EFI_SUCCESS) + return 0; + } + + return (void *) ((grub_addr_t) address); +} + +/* Free pages starting from ADDRESS. */ +void +grub_efi_free_pages (grub_efi_physical_address_t address, + grub_efi_uintn_t pages) +{ + grub_efi_boot_services_t *b; + + b = grub_efi_system_table->boot_services; + efi_call_2 (b->free_pages, address, pages); +} + +#if defined (__i386__) || defined (__x86_64__) + +/* Helper for stop_broadcom. */ +static int +find_card (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_pci_address_t addr; + grub_uint8_t cap; + grub_uint16_t pm_state; + + if ((pciid & 0xffff) != GRUB_PCI_VENDOR_BROADCOM) + return 0; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); + if (grub_pci_read (addr) >> 24 != GRUB_PCI_CLASS_NETWORK) + return 0; + cap = grub_pci_find_capability (dev, GRUB_PCI_CAP_POWER_MANAGEMENT); + if (!cap) + return 0; + addr = grub_pci_make_address (dev, cap + 4); + pm_state = grub_pci_read_word (addr); + pm_state = pm_state | 0x03; + grub_pci_write_word (addr, pm_state); + grub_pci_read_word (addr); + return 0; +} + +static void +stop_broadcom (void) +{ + grub_pci_iterate (find_card, NULL); +} + +#endif + +grub_err_t +grub_efi_finish_boot_services (grub_efi_uintn_t *outbuf_size, void *outbuf, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *efi_desc_size, + grub_efi_uint32_t *efi_desc_version) +{ + grub_efi_boot_services_t *b; + grub_efi_status_t status; + +#if defined (__i386__) || defined (__x86_64__) + const grub_uint16_t apple[] = { 'A', 'p', 'p', 'l', 'e' }; + int is_apple; + + is_apple = (grub_memcmp (grub_efi_system_table->firmware_vendor, + apple, sizeof (apple)) == 0); +#endif + + while (1) + { + if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, + &finish_desc_size, &finish_desc_version) < 0) + return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); + + if (outbuf && *outbuf_size < finish_mmap_size) + return grub_error (GRUB_ERR_IO, "memory map buffer is too small"); + + finish_mmap_buf = grub_malloc (finish_mmap_size); + if (!finish_mmap_buf) + return grub_errno; + + if (grub_efi_get_memory_map (&finish_mmap_size, finish_mmap_buf, &finish_key, + &finish_desc_size, &finish_desc_version) <= 0) + { + grub_free (finish_mmap_buf); + return grub_error (GRUB_ERR_IO, "couldn't retrieve memory map"); + } + + b = grub_efi_system_table->boot_services; + status = efi_call_2 (b->exit_boot_services, grub_efi_image_handle, + finish_key); + if (status == GRUB_EFI_SUCCESS) + break; + + if (status != GRUB_EFI_INVALID_PARAMETER) + { + grub_free (finish_mmap_buf); + return grub_error (GRUB_ERR_IO, "couldn't terminate EFI services"); + } + + grub_free (finish_mmap_buf); + grub_printf ("Trying to terminate EFI services again\n"); + } + grub_efi_is_finished = 1; + if (outbuf_size) + *outbuf_size = finish_mmap_size; + if (outbuf) + grub_memcpy (outbuf, finish_mmap_buf, finish_mmap_size); + if (map_key) + *map_key = finish_key; + if (efi_desc_size) + *efi_desc_size = finish_desc_size; + if (efi_desc_version) + *efi_desc_version = finish_desc_version; + +#if defined (__i386__) || defined (__x86_64__) + if (is_apple) + stop_broadcom (); +#endif + + return GRUB_ERR_NONE; +} + +/* Get the memory map as defined in the EFI spec. Return 1 if successful, + return 0 if partial, or return -1 if an error occurs. */ +int +grub_efi_get_memory_map (grub_efi_uintn_t *memory_map_size, + grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t *map_key, + grub_efi_uintn_t *descriptor_size, + grub_efi_uint32_t *descriptor_version) +{ + grub_efi_status_t status; + grub_efi_boot_services_t *b; + grub_efi_uintn_t key; + grub_efi_uint32_t version; + grub_efi_uintn_t size; + + if (grub_efi_is_finished) + { + int ret = 1; + if (*memory_map_size < finish_mmap_size) + { + grub_memcpy (memory_map, finish_mmap_buf, *memory_map_size); + ret = 0; + } + else + { + grub_memcpy (memory_map, finish_mmap_buf, finish_mmap_size); + ret = 1; + } + *memory_map_size = finish_mmap_size; + if (map_key) + *map_key = finish_key; + if (descriptor_size) + *descriptor_size = finish_desc_size; + if (descriptor_version) + *descriptor_version = finish_desc_version; + return ret; + } + + /* Allow some parameters to be missing. */ + if (! map_key) + map_key = &key; + if (! descriptor_version) + descriptor_version = &version; + if (! descriptor_size) + descriptor_size = &size; + + b = grub_efi_system_table->boot_services; + status = efi_call_5 (b->get_memory_map, memory_map_size, memory_map, map_key, + descriptor_size, descriptor_version); + if (*descriptor_size == 0) + *descriptor_size = sizeof (grub_efi_memory_descriptor_t); + if (status == GRUB_EFI_SUCCESS) + return 1; + else if (status == GRUB_EFI_BUFFER_TOO_SMALL) + return 0; + else + return -1; +} + +/* Sort the memory map in place. */ +static void +sort_memory_map (grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t desc_size, + grub_efi_memory_descriptor_t *memory_map_end) +{ + grub_efi_memory_descriptor_t *d1; + grub_efi_memory_descriptor_t *d2; + + for (d1 = memory_map; + d1 < memory_map_end; + d1 = NEXT_MEMORY_DESCRIPTOR (d1, desc_size)) + { + grub_efi_memory_descriptor_t *max_desc = d1; + + for (d2 = NEXT_MEMORY_DESCRIPTOR (d1, desc_size); + d2 < memory_map_end; + d2 = NEXT_MEMORY_DESCRIPTOR (d2, desc_size)) + { + if (max_desc->num_pages < d2->num_pages) + max_desc = d2; + } + + if (max_desc != d1) + { + grub_efi_memory_descriptor_t tmp; + + tmp = *d1; + *d1 = *max_desc; + *max_desc = tmp; + } + } +} + +/* Filter the descriptors. GRUB needs only available memory. */ +static grub_efi_memory_descriptor_t * +filter_memory_map (grub_efi_memory_descriptor_t *memory_map, + grub_efi_memory_descriptor_t *filtered_memory_map, + grub_efi_uintn_t desc_size, + grub_efi_memory_descriptor_t *memory_map_end) +{ + grub_efi_memory_descriptor_t *desc; + grub_efi_memory_descriptor_t *filtered_desc; + + for (desc = memory_map, filtered_desc = filtered_memory_map; + desc < memory_map_end; + desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) + { + if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY +#if 1 + && desc->physical_start <= GRUB_EFI_MAX_USABLE_ADDRESS +#endif + && desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000 + && desc->num_pages != 0) + { + grub_memcpy (filtered_desc, desc, desc_size); + + /* Avoid less than 1MB, because some loaders seem to be confused. */ + if (desc->physical_start < 0x100000) + { + desc->num_pages -= BYTES_TO_PAGES (0x100000 + - desc->physical_start); + desc->physical_start = 0x100000; + } + +#if 1 + if (BYTES_TO_PAGES (filtered_desc->physical_start) + + filtered_desc->num_pages + > BYTES_TO_PAGES_DOWN (GRUB_EFI_MAX_USABLE_ADDRESS)) + filtered_desc->num_pages + = (BYTES_TO_PAGES_DOWN (GRUB_EFI_MAX_USABLE_ADDRESS) + - BYTES_TO_PAGES (filtered_desc->physical_start)); +#endif + + if (filtered_desc->num_pages == 0) + continue; + + filtered_desc = NEXT_MEMORY_DESCRIPTOR (filtered_desc, desc_size); + } + } + + return filtered_desc; +} + +/* Return the total number of pages. */ +static grub_efi_uint64_t +get_total_pages (grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t desc_size, + grub_efi_memory_descriptor_t *memory_map_end) +{ + grub_efi_memory_descriptor_t *desc; + grub_efi_uint64_t total = 0; + + for (desc = memory_map; + desc < memory_map_end; + desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) + total += desc->num_pages; + + return total; +} + +/* Add memory regions. */ +static void +add_memory_regions (grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t desc_size, + grub_efi_memory_descriptor_t *memory_map_end, + grub_efi_uint64_t required_pages) +{ + grub_efi_memory_descriptor_t *desc; + + for (desc = memory_map; + desc < memory_map_end; + desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) + { + grub_efi_uint64_t pages; + grub_efi_physical_address_t start; + void *addr; + + start = desc->physical_start; + pages = desc->num_pages; + if (pages > required_pages) + { + start += PAGES_TO_BYTES (pages - required_pages); + pages = required_pages; + } + + addr = grub_efi_allocate_pages (start, pages); + if (! addr) + grub_fatal ("cannot allocate conventional memory %p with %u pages", + (void *) ((grub_addr_t) start), + (unsigned) pages); + + grub_mm_init_region (addr, PAGES_TO_BYTES (pages)); + + required_pages -= pages; + if (required_pages == 0) + break; + } + + if (required_pages > 0) + grub_fatal ("too little memory"); +} + +#if 0 +/* Print the memory map. */ +static void +print_memory_map (grub_efi_memory_descriptor_t *memory_map, + grub_efi_uintn_t desc_size, + grub_efi_memory_descriptor_t *memory_map_end) +{ + grub_efi_memory_descriptor_t *desc; + int i; + + for (desc = memory_map, i = 0; + desc < memory_map_end; + desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size), i++) + { + grub_printf ("MD: t=%x, p=%llx, v=%llx, n=%llx, a=%llx\n", + desc->type, desc->physical_start, desc->virtual_start, + desc->num_pages, desc->attribute); + } +} +#endif + +void +grub_efi_mm_init (void) +{ + grub_efi_memory_descriptor_t *memory_map; + grub_efi_memory_descriptor_t *memory_map_end; + grub_efi_memory_descriptor_t *filtered_memory_map; + grub_efi_memory_descriptor_t *filtered_memory_map_end; + grub_efi_uintn_t map_size; + grub_efi_uintn_t desc_size; + grub_efi_uint64_t total_pages; + grub_efi_uint64_t required_pages; + int mm_status; + + /* Prepare a memory region to store two memory maps. */ + memory_map = grub_efi_allocate_pages (0, + 2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE)); + if (! memory_map) + grub_fatal ("cannot allocate memory"); + + /* Obtain descriptors for available memory. */ + map_size = MEMORY_MAP_SIZE; + + mm_status = grub_efi_get_memory_map (&map_size, memory_map, 0, &desc_size, 0); + + if (mm_status == 0) + { + grub_efi_free_pages + ((grub_efi_physical_address_t) ((grub_addr_t) memory_map), + 2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE)); + + /* Freeing/allocating operations may increase memory map size. */ + map_size += desc_size * 32; + + memory_map = grub_efi_allocate_pages (0, 2 * BYTES_TO_PAGES (map_size)); + if (! memory_map) + grub_fatal ("cannot allocate memory"); + + mm_status = grub_efi_get_memory_map (&map_size, memory_map, 0, + &desc_size, 0); + } + + if (mm_status < 0) + grub_fatal ("cannot get memory map"); + + memory_map_end = NEXT_MEMORY_DESCRIPTOR (memory_map, map_size); + + filtered_memory_map = memory_map_end; + + filtered_memory_map_end = filter_memory_map (memory_map, filtered_memory_map, + desc_size, memory_map_end); + + /* By default, request a quarter of the available memory. */ + total_pages = get_total_pages (filtered_memory_map, desc_size, + filtered_memory_map_end); + required_pages = (total_pages >> 2); + if (required_pages < BYTES_TO_PAGES (MIN_HEAP_SIZE)) + required_pages = BYTES_TO_PAGES (MIN_HEAP_SIZE); + else if (required_pages > BYTES_TO_PAGES (MAX_HEAP_SIZE)) + required_pages = BYTES_TO_PAGES (MAX_HEAP_SIZE); + + /* Sort the filtered descriptors, so that GRUB can allocate pages + from smaller regions. */ + sort_memory_map (filtered_memory_map, desc_size, filtered_memory_map_end); + + /* Allocate memory regions for GRUB's memory management. */ + add_memory_regions (filtered_memory_map, desc_size, + filtered_memory_map_end, required_pages); + +#if 0 + /* For debug. */ + map_size = MEMORY_MAP_SIZE; + + if (grub_efi_get_memory_map (&map_size, memory_map, 0, &desc_size, 0) < 0) + grub_fatal ("cannot get memory map"); + + grub_printf ("printing memory map\n"); + print_memory_map (memory_map, desc_size, + NEXT_MEMORY_DESCRIPTOR (memory_map, map_size)); + grub_fatal ("Debug. "); +#endif + + /* Release the memory maps. */ + grub_efi_free_pages ((grub_addr_t) memory_map, + 2 * BYTES_TO_PAGES (MEMORY_MAP_SIZE)); +} diff --git a/grub-core/kern/elf.c b/grub-core/kern/elf.c new file mode 100644 index 000000000..4f282c9cf --- /dev/null +++ b/grub-core/kern/elf.c @@ -0,0 +1,212 @@ +/* elf.c - load ELF files */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#pragma GCC diagnostic ignored "-Wcast-align" + +#if defined(__powerpc__) && defined(GRUB_MACHINE_IEEE1275) +#define GRUB_ELF_ENABLE_BI_ENDIAN 1 +#else +#define GRUB_ELF_ENABLE_BI_ENDIAN 0 +#endif + +#if defined(GRUB_CPU_WORDS_BIGENDIAN) +#define GRUB_ELF_NATIVE_ENDIANNESS ELFDATA2MSB +#define GRUB_ELF_OPPOSITE_ENDIANNESS ELFDATA2LSB +#else +#define GRUB_ELF_NATIVE_ENDIANNESS ELFDATA2LSB +#define GRUB_ELF_OPPOSITE_ENDIANNESS ELFDATA2MSB +#endif + +static int grub_elf32_check_endianess_and_bswap_ehdr (grub_elf_t elf); +static int grub_elf64_check_endianess_and_bswap_ehdr (grub_elf_t elf); + +/* Check if EHDR is a valid ELF header. */ +static grub_err_t +grub_elf_check_header (grub_elf_t elf) +{ + Elf32_Ehdr *e = &elf->ehdr.ehdr32; + + if (e->e_ident[EI_MAG0] != ELFMAG0 + || e->e_ident[EI_MAG1] != ELFMAG1 + || e->e_ident[EI_MAG2] != ELFMAG2 + || e->e_ident[EI_MAG3] != ELFMAG3 + || e->e_ident[EI_VERSION] != EV_CURRENT) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-independent ELF magic")); + + if (grub_elf_is_elf32 (elf)) + { + if (!grub_elf32_check_endianess_and_bswap_ehdr (elf)) { + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF endianness magic"); + } + } + else if (grub_elf_is_elf64 (elf)) + { + if (!grub_elf64_check_endianess_and_bswap_ehdr (elf)) { + return grub_error (GRUB_ERR_BAD_OS, "invalid ELF endianness magic"); + } + } + else + return grub_error (GRUB_ERR_BAD_OS, "unknown ELF class"); + + if (e->e_version != EV_CURRENT) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-independent ELF magic")); + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_elf_close (grub_elf_t elf) +{ + grub_file_t file = elf->file; + + grub_free (elf->phdrs); + grub_free (elf->filename); + grub_free (elf); + + if (file) + grub_file_close (file); + + return grub_errno; +} + +grub_elf_t +grub_elf_file (grub_file_t file, const char *filename) +{ + grub_elf_t elf; + + elf = grub_zalloc (sizeof (*elf)); + if (! elf) + return 0; + + elf->file = file; + + if (grub_file_seek (elf->file, 0) == (grub_off_t) -1) + goto fail; + + if (grub_file_read (elf->file, &elf->ehdr, sizeof (elf->ehdr)) + != sizeof (elf->ehdr)) + { + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), + filename); + goto fail; + } + + if (grub_elf_check_header (elf)) + goto fail; + + elf->filename = grub_strdup (filename); + if (!elf->filename) + goto fail; + + return elf; + +fail: + grub_free (elf->filename); + grub_free (elf->phdrs); + grub_free (elf); + return 0; +} + +grub_elf_t +grub_elf_open (const char *name) +{ + grub_file_t file; + grub_elf_t elf; + + file = grub_file_open (name); + if (! file) + return 0; + + elf = grub_elf_file (file, name); + if (! elf) + grub_file_close (file); + + return elf; +} + + +#define grub_swap_bytes_halfXX grub_swap_bytes16 +#define grub_swap_bytes_wordXX grub_swap_bytes32 + +/* 32-bit */ +#define ehdrXX ehdr32 +#define ELFCLASSXX ELFCLASS32 +#define ElfXX_Addr Elf32_Addr +#define grub_elfXX_size grub_elf32_size +#define grub_elfXX_load grub_elf32_load +#define FOR_ELFXX_PHDRS FOR_ELF32_PHDRS +#define grub_elf_is_elfXX grub_elf_is_elf32 +#define grub_elfXX_load_phdrs grub_elf32_load_phdrs +#define ElfXX_Phdr Elf32_Phdr +#define ElfXX_Ehdr Elf32_Ehdr +#define grub_uintXX_t grub_uint32_t +#define grub_swap_bytes_addrXX grub_swap_bytes32 +#define grub_swap_bytes_offXX grub_swap_bytes32 +#define grub_swap_bytes_XwordXX grub_swap_bytes32 +#define grub_elfXX_check_endianess_and_bswap_ehdr grub_elf32_check_endianess_and_bswap_ehdr + +#include "elfXX.c" + +#undef ehdrXX +#undef ELFCLASSXX +#undef ElfXX_Addr +#undef grub_elfXX_size +#undef grub_elfXX_load +#undef FOR_ELFXX_PHDRS +#undef grub_elf_is_elfXX +#undef grub_elfXX_load_phdrs +#undef ElfXX_Phdr +#undef ElfXX_Ehdr +#undef grub_uintXX_t +#undef grub_swap_bytes_addrXX +#undef grub_swap_bytes_offXX +#undef grub_swap_bytes_XwordXX +#undef grub_elfXX_check_endianess_and_bswap_ehdr + + +/* 64-bit */ +#define ehdrXX ehdr64 +#define ELFCLASSXX ELFCLASS64 +#define ElfXX_Addr Elf64_Addr +#define grub_elfXX_size grub_elf64_size +#define grub_elfXX_load grub_elf64_load +#define FOR_ELFXX_PHDRS FOR_ELF64_PHDRS +#define grub_elf_is_elfXX grub_elf_is_elf64 +#define grub_elfXX_load_phdrs grub_elf64_load_phdrs +#define ElfXX_Phdr Elf64_Phdr +#define ElfXX_Ehdr Elf64_Ehdr +#define grub_uintXX_t grub_uint64_t +#define grub_swap_bytes_addrXX grub_swap_bytes64 +#define grub_swap_bytes_offXX grub_swap_bytes64 +#define grub_swap_bytes_XwordXX grub_swap_bytes64 +#define grub_elfXX_check_endianess_and_bswap_ehdr grub_elf64_check_endianess_and_bswap_ehdr + +#include "elfXX.c" diff --git a/grub-core/kern/elfXX.c b/grub-core/kern/elfXX.c new file mode 100644 index 000000000..1859d1880 --- /dev/null +++ b/grub-core/kern/elfXX.c @@ -0,0 +1,207 @@ +int +grub_elf_is_elfXX (grub_elf_t elf) +{ + return elf->ehdr.ehdrXX.e_ident[EI_CLASS] == ELFCLASSXX; +} + +grub_err_t +grub_elfXX_load_phdrs (grub_elf_t elf) +{ + grub_ssize_t phdrs_size; + + if (elf->phdrs) + return GRUB_ERR_NONE; + + phdrs_size = (grub_uint32_t) elf->ehdr.ehdrXX.e_phnum * elf->ehdr.ehdrXX.e_phentsize; + + grub_dprintf ("elf", "Loading program headers at 0x%llx, size 0x%lx.\n", + (unsigned long long) elf->ehdr.ehdrXX.e_phoff, + (unsigned long) phdrs_size); + + elf->phdrs = grub_malloc (phdrs_size); + if (! elf->phdrs) + return grub_errno; + + if ((grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_phoff) == (grub_off_t) -1) + || (grub_file_read (elf->file, elf->phdrs, phdrs_size) != phdrs_size)) + { + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), + elf->filename); + return grub_errno; + } + +#if GRUB_ELF_ENABLE_BI_ENDIAN + if (elf->ehdr.ehdrXX.e_ident[EI_DATA] == GRUB_ELF_OPPOSITE_ENDIANNESS) + { + ElfXX_Phdr *phdr; + for (phdr = elf->phdrs; (char *) phdr < (char *) elf->phdrs + phdrs_size; + phdr = (ElfXX_Phdr *) ((char *) phdr + elf->ehdr.ehdrXX.e_phentsize)) + { + phdr->p_type = grub_swap_bytes_wordXX (phdr->p_type); + phdr->p_flags = grub_swap_bytes_wordXX (phdr->p_flags); + phdr->p_offset = grub_swap_bytes_offXX (phdr->p_offset); + phdr->p_vaddr = grub_swap_bytes_addrXX (phdr->p_vaddr); + phdr->p_paddr = grub_swap_bytes_addrXX (phdr->p_paddr); + phdr->p_filesz = grub_swap_bytes_XwordXX (phdr->p_filesz); + phdr->p_memsz = grub_swap_bytes_XwordXX (phdr->p_memsz); + phdr->p_align = grub_swap_bytes_XwordXX (phdr->p_align); + } + } +#endif /* GRUB_ELF_ENABLE_BI_ENDIAN */ + + return GRUB_ERR_NONE; +} + +/* Calculate the amount of memory spanned by the segments. */ +grub_size_t +grub_elfXX_size (grub_elf_t elf, + ElfXX_Addr *base, grub_uintXX_t *max_align) +{ + ElfXX_Addr segments_start = (ElfXX_Addr) -1; + ElfXX_Addr segments_end = 0; + int nr_phdrs = 0; + grub_uint32_t curr_align = 1; + ElfXX_Phdr *phdr; + + /* Run through the program headers to calculate the total memory size we + * should claim. */ + FOR_ELFXX_PHDRS (elf, phdr) + { + /* Only consider loadable segments. */ + if (phdr->p_type != PT_LOAD) + continue; + nr_phdrs++; + if (phdr->p_paddr < segments_start) + segments_start = phdr->p_paddr; + if (phdr->p_paddr + phdr->p_memsz > segments_end) + segments_end = phdr->p_paddr + phdr->p_memsz; + if (curr_align < phdr->p_align) + curr_align = phdr->p_align; + } + + if (base) + *base = 0; + + if (nr_phdrs == 0) + { + grub_error (GRUB_ERR_BAD_OS, "no program headers present"); + return 0; + } + + if (segments_end < segments_start) + { + /* Very bad addresses. */ + grub_error (GRUB_ERR_BAD_OS, "bad program header load addresses"); + return 0; + } + + if (base) + *base = segments_start; + if (max_align) + *max_align = curr_align; + return segments_end - segments_start; +} + +grub_err_t +grub_elfXX_load (grub_elf_t elf, const char *filename, + void *load_offset, enum grub_elf_load_flags load_flags, + grub_addr_t *base, grub_size_t *size) +{ + grub_addr_t load_base = (grub_addr_t) -1ULL; + grub_size_t load_size = 0; + ElfXX_Phdr *phdr; + + FOR_ELFXX_PHDRS(elf, phdr) + { + grub_addr_t load_addr; + + if (phdr->p_type != PT_LOAD && !((load_flags & GRUB_ELF_LOAD_FLAGS_LOAD_PT_DYNAMIC) && phdr->p_type == PT_DYNAMIC)) + continue; + + load_addr = (grub_addr_t) phdr->p_paddr; + switch (load_flags & GRUB_ELF_LOAD_FLAGS_BITS) + { + case GRUB_ELF_LOAD_FLAGS_ALL_BITS: + break; + case GRUB_ELF_LOAD_FLAGS_28BITS: + load_addr &= 0xFFFFFFF; + break; + case GRUB_ELF_LOAD_FLAGS_30BITS: + load_addr &= 0x3FFFFFFF; + break; + case GRUB_ELF_LOAD_FLAGS_62BITS: + load_addr &= 0x3FFFFFFFFFFFFFFFULL; + break; + } + load_addr += (grub_addr_t) load_offset; + + if (load_addr < load_base) + load_base = load_addr; + + grub_dprintf ("elf", "Loading segment at 0x%llx, size 0x%llx\n", + (unsigned long long) load_addr, + (unsigned long long) phdr->p_memsz); + + if (grub_file_seek (elf->file, phdr->p_offset) == (grub_off_t) -1) + return grub_errno; + + if (phdr->p_filesz) + { + grub_ssize_t read; + read = grub_file_read (elf->file, (void *) load_addr, phdr->p_filesz); + if (read != (grub_ssize_t) phdr->p_filesz) + { + if (!grub_errno) + grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), + filename); + return grub_errno; + } + } + + if (phdr->p_filesz < phdr->p_memsz) + grub_memset ((void *) (grub_addr_t) (load_addr + phdr->p_filesz), + 0, phdr->p_memsz - phdr->p_filesz); + + load_size += phdr->p_memsz; + } + + if (base) + *base = load_base; + if (size) + *size = load_size; + + return grub_errno; +} + +static int +grub_elfXX_check_endianess_and_bswap_ehdr (grub_elf_t elf) +{ + ElfXX_Ehdr *e = &(elf->ehdr.ehdrXX); + if (e->e_ident[EI_DATA] == GRUB_ELF_NATIVE_ENDIANNESS) + { + return 1; + } + +#if GRUB_ELF_ENABLE_BI_ENDIAN + if (e->e_ident[EI_DATA] == GRUB_ELF_OPPOSITE_ENDIANNESS) + { + e->e_type = grub_swap_bytes_halfXX (e->e_type); + e->e_machine = grub_swap_bytes_halfXX (e->e_machine); + e->e_version = grub_swap_bytes_wordXX (e->e_version); + e->e_entry = grub_swap_bytes_addrXX (e->e_entry); + e->e_phoff = grub_swap_bytes_offXX (e->e_phoff); + e->e_shoff = grub_swap_bytes_offXX (e->e_shoff); + e->e_flags = grub_swap_bytes_wordXX (e->e_flags); + e->e_ehsize = grub_swap_bytes_halfXX (e->e_ehsize); + e->e_phentsize = grub_swap_bytes_halfXX (e->e_phentsize); + e->e_phnum = grub_swap_bytes_halfXX (e->e_phnum); + e->e_shentsize = grub_swap_bytes_halfXX (e->e_shentsize); + e->e_shnum = grub_swap_bytes_halfXX (e->e_shnum); + e->e_shstrndx = grub_swap_bytes_halfXX (e->e_shstrndx); + return 1; + } +#endif /* GRUB_ELF_ENABLE_BI_ENDIAN */ + + return 0; +} diff --git a/grub-core/kern/emu/argp_common.c b/grub-core/kern/emu/argp_common.c new file mode 100644 index 000000000..166885870 --- /dev/null +++ b/grub-core/kern/emu/argp_common.c @@ -0,0 +1,41 @@ +/* grub-setup.c - make GRUB usable */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" + +#define _GNU_SOURCE 1 +#include +#include +#include +#include + +/* Print the version information. */ +static void +print_version (FILE *stream, struct argp_state *state) +{ + fprintf (stream, "%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); +} +void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; + +/* Set the bug report address */ +const char *argp_program_bug_address = "<"PACKAGE_BUGREPORT">"; diff --git a/grub-core/kern/emu/cache.c b/grub-core/kern/emu/cache.c new file mode 100644 index 000000000..6f89e871a --- /dev/null +++ b/grub-core/kern/emu/cache.c @@ -0,0 +1,29 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#include + +#if defined(__ia64__) +#include "../ia64/cache.c" +#elif defined (__arm__) || defined (__aarch64__) + +void __clear_cache (void *beg, void *end); + +void +grub_arch_sync_caches (void *address, grub_size_t len) +{ + __clear_cache (address, (char *) address + len); +} + +#elif defined (__mips__) +void _flush_cache (void *address, grub_size_t len, int type); + +void +grub_arch_sync_caches (void *address, grub_size_t len) +{ + return _flush_cache (address, len, 0); +} + +#endif + diff --git a/grub-core/kern/emu/cache_s.S b/grub-core/kern/emu/cache_s.S new file mode 100644 index 000000000..76cf7560d --- /dev/null +++ b/grub-core/kern/emu/cache_s.S @@ -0,0 +1,14 @@ +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if defined(__i386__) || defined(__x86_64__) +/* Nothing is necessary. */ +#elif defined(__sparc__) +#include "../sparc64/cache.S" +#elif defined(__powerpc__) +#include "../powerpc/cache.S" +#elif defined(__ia64__) || defined(__arm__) || defined(__aarch64__) || defined(__mips__) +#else +#error "No target cpu type is defined" +#endif diff --git a/grub-core/kern/emu/full.c b/grub-core/kern/emu/full.c new file mode 100644 index 000000000..e8d63b1f5 --- /dev/null +++ b/grub-core/kern/emu/full.c @@ -0,0 +1,69 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +const int grub_no_modules = 1; + +void +grub_register_exported_symbols (void) +{ +} + +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + (void) ehdr; + return GRUB_ERR_BAD_MODULE; +} + +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + (void) mod; + (void) ehdr; + (void) s; + (void) seg; + return GRUB_ERR_BAD_MODULE; +} + +#if !defined (__i386__) && !defined (__x86_64__) +grub_err_t +grub_arch_dl_get_tramp_got_size (const void *ehdr __attribute__ ((unused)), + grub_size_t *tramp, grub_size_t *got) +{ + *tramp = 0; + *got = 0; + return GRUB_ERR_BAD_MODULE; +} +#endif + +#ifdef GRUB_LINKER_HAVE_INIT +void +grub_arch_dl_init_linker (void) +{ +} +#endif + diff --git a/grub-core/kern/emu/hostdisk.c b/grub-core/kern/emu/hostdisk.c new file mode 100644 index 000000000..87e3e2512 --- /dev/null +++ b/grub-core/kern/emu/hostdisk.c @@ -0,0 +1,686 @@ +/* hostdisk.c - emulate biosdisk */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __linux__ +# include /* ioctl */ +# include +# ifndef BLKFLSBUF +# define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ +# endif /* ! BLKFLSBUF */ +#endif /* __linux__ */ + +static struct +{ + char *drive; + char *device; + int device_map; +} map[256]; + +static int +unescape_cmp (const char *a, const char *b_escaped) +{ + while (*a || *b_escaped) + { + if (*b_escaped == '\\' && b_escaped[1] != 0) + b_escaped++; + if (*a < *b_escaped) + return -1; + if (*a > *b_escaped) + return +1; + a++; + b_escaped++; + } + if (*a) + return +1; + if (*b_escaped) + return -1; + return 0; +} + +static int +find_grub_drive (const char *name) +{ + unsigned int i; + + if (name) + { + for (i = 0; i < ARRAY_SIZE (map); i++) + if (map[i].drive && unescape_cmp (map[i].drive, name) == 0) + return i; + } + + return -1; +} + +static int +find_free_slot (void) +{ + unsigned int i; + + for (i = 0; i < ARRAY_SIZE (map); i++) + if (! map[i].drive) + return i; + + return -1; +} + +static int +grub_util_biosdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + grub_disk_pull_t pull) +{ + unsigned i; + + if (pull != GRUB_DISK_PULL_NONE) + return 0; + + for (i = 0; i < ARRAY_SIZE (map); i++) + if (map[i].drive && hook (map[i].drive, hook_data)) + return 1; + + return 0; +} + +static grub_err_t +grub_util_biosdisk_open (const char *name, grub_disk_t disk) +{ + int drive; + struct grub_util_hostdisk_data *data; + + drive = find_grub_drive (name); + grub_util_info ("drive = %d", drive); + if (drive < 0) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "no mapping exists for `%s'", name); + + disk->id = drive; + disk->data = data = xmalloc (sizeof (struct grub_util_hostdisk_data)); + data->dev = NULL; + data->access_mode = 0; + data->fd = GRUB_UTIL_FD_INVALID; + data->is_disk = 0; + data->device_map = map[drive].device_map; + + /* Get the size. */ + { + grub_util_fd_t fd; + + fd = grub_util_fd_open (map[drive].device, GRUB_UTIL_FD_O_RDONLY); + + if (!GRUB_UTIL_FD_IS_VALID(fd)) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("cannot open `%s': %s"), + map[drive].device, grub_util_fd_strerror ()); + + disk->total_sectors = grub_util_get_fd_size (fd, map[drive].device, + &disk->log_sector_size); + disk->total_sectors >>= disk->log_sector_size; + disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; + +#if GRUB_UTIL_FD_STAT_IS_FUNCTIONAL + { + struct stat st; +# if GRUB_DISK_DEVS_ARE_CHAR + if (fstat (fd, &st) >= 0 && S_ISCHR (st.st_mode)) +# else + if (fstat (fd, &st) >= 0 && S_ISBLK (st.st_mode)) +# endif + data->is_disk = 1; + } +#endif + + grub_util_fd_close (fd); + + grub_util_info ("the size of %s is %" GRUB_HOST_PRIuLONG_LONG, + name, (unsigned long long) disk->total_sectors); + + return GRUB_ERR_NONE; + } +} + +const char * +grub_hostdisk_os_dev_to_grub_drive (const char *os_disk, int add) +{ + unsigned int i; + char *canon; + + canon = grub_canonicalize_file_name (os_disk); + if (!canon) + canon = xstrdup (os_disk); + + for (i = 0; i < ARRAY_SIZE (map); i++) + if (! map[i].device) + break; + else if (strcmp (map[i].device, canon) == 0) + { + free (canon); + return map[i].drive; + } + + if (!add) + { + free (canon); + return NULL; + } + + if (i == ARRAY_SIZE (map)) + /* TRANSLATORS: it refers to the lack of free slots. */ + grub_util_error ("%s", _("device count exceeds limit")); + + map[i].device = canon; + map[i].drive = xmalloc (sizeof ("hostdisk/") + strlen (os_disk)); + strcpy (map[i].drive, "hostdisk/"); + strcpy (map[i].drive + sizeof ("hostdisk/") - 1, os_disk); + map[i].device_map = 0; + + grub_hostdisk_flush_initial_buffer (os_disk); + + return map[i].drive; +} + +#ifndef __linux__ +grub_util_fd_t +grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int flags, + grub_disk_addr_t *max) +{ + grub_util_fd_t fd; + struct grub_util_hostdisk_data *data = disk->data; + + *max = ~0ULL; + + flags |= GRUB_UTIL_FD_O_SYNC; + + if (data->dev && strcmp (data->dev, map[disk->id].device) == 0 && + data->access_mode == (flags & O_ACCMODE)) + { + grub_dprintf ("hostdisk", "reusing open device `%s'\n", data->dev); + fd = data->fd; + } + else + { + free (data->dev); + data->dev = 0; + if (GRUB_UTIL_FD_IS_VALID(data->fd)) + { + if (data->access_mode == O_RDWR || data->access_mode == O_WRONLY) + grub_util_fd_sync (data->fd); + grub_util_fd_close (data->fd); + data->fd = GRUB_UTIL_FD_INVALID; + } + + fd = grub_util_fd_open (map[disk->id].device, flags); + if (GRUB_UTIL_FD_IS_VALID(fd)) + { + data->dev = xstrdup (map[disk->id].device); + data->access_mode = (flags & O_ACCMODE); + data->fd = fd; + } + } + + if (!GRUB_UTIL_FD_IS_VALID(data->fd)) + { + grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot open `%s': %s"), + map[disk->id].device, grub_util_fd_strerror ()); + return GRUB_UTIL_FD_INVALID; + } + + if (grub_util_fd_seek (fd, sector << disk->log_sector_size)) + { + grub_util_fd_close (fd); + grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot seek `%s': %s"), + map[disk->id].device, grub_util_fd_strerror ()); + + return GRUB_UTIL_FD_INVALID; + } + + return fd; +} +#endif + + +static grub_err_t +grub_util_biosdisk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) +{ + while (size) + { + grub_util_fd_t fd; + grub_disk_addr_t max = ~0ULL; + fd = grub_util_fd_open_device (disk, sector, GRUB_UTIL_FD_O_RDONLY, &max); + if (!GRUB_UTIL_FD_IS_VALID (fd)) + return grub_errno; + +#ifdef __linux__ + if (sector == 0) + /* Work around a bug in Linux ez remapping. Linux remaps all + sectors that are read together with the MBR in one read. It + should only remap the MBR, so we split the read in two + parts. -jochen */ + max = 1; +#endif /* __linux__ */ + + if (max > size) + max = size; + + if (grub_util_fd_read (fd, buf, max << disk->log_sector_size) + != (ssize_t) (max << disk->log_sector_size)) + return grub_error (GRUB_ERR_READ_ERROR, N_("cannot read `%s': %s"), + map[disk->id].device, grub_util_fd_strerror ()); + size -= max; + buf += (max << disk->log_sector_size); + sector += max; + } + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_util_biosdisk_write (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, const char *buf) +{ + while (size) + { + grub_util_fd_t fd; + grub_disk_addr_t max = ~0ULL; + fd = grub_util_fd_open_device (disk, sector, GRUB_UTIL_FD_O_WRONLY, &max); + if (!GRUB_UTIL_FD_IS_VALID (fd)) + return grub_errno; + +#ifdef __linux__ + if (sector == 0) + /* Work around a bug in Linux ez remapping. Linux remaps all + sectors that are write together with the MBR in one write. It + should only remap the MBR, so we split the write in two + parts. -jochen */ + max = 1; +#endif /* __linux__ */ + + if (max > size) + max = size; + + if (grub_util_fd_write (fd, buf, max << disk->log_sector_size) + != (ssize_t) (max << disk->log_sector_size)) + return grub_error (GRUB_ERR_WRITE_ERROR, N_("cannot write to `%s': %s"), + map[disk->id].device, grub_util_fd_strerror ()); + size -= max; + buf += (max << disk->log_sector_size); + } + return GRUB_ERR_NONE; +} + +grub_err_t +grub_util_biosdisk_flush (struct grub_disk *disk) +{ + struct grub_util_hostdisk_data *data = disk->data; + + if (disk->dev->id != GRUB_DISK_DEVICE_BIOSDISK_ID) + return GRUB_ERR_NONE; + if (!GRUB_UTIL_FD_IS_VALID (data->fd)) + { + grub_disk_addr_t max; + data->fd = grub_util_fd_open_device (disk, 0, GRUB_UTIL_FD_O_RDONLY, &max); + if (!GRUB_UTIL_FD_IS_VALID (data->fd)) + return grub_errno; + } + grub_util_fd_sync (data->fd); +#ifdef __linux__ + if (data->is_disk) + ioctl (data->fd, BLKFLSBUF, 0); +#endif + return GRUB_ERR_NONE; +} + +static void +grub_util_biosdisk_close (struct grub_disk *disk) +{ + struct grub_util_hostdisk_data *data = disk->data; + + free (data->dev); + if (GRUB_UTIL_FD_IS_VALID (data->fd)) + { + if (data->access_mode == O_RDWR || data->access_mode == O_WRONLY) + grub_util_biosdisk_flush (disk); + grub_util_fd_close (data->fd); + } + free (data); +} + +static struct grub_disk_dev grub_util_biosdisk_dev = + { + .name = "hostdisk", + .id = GRUB_DISK_DEVICE_HOSTDISK_ID, + .iterate = grub_util_biosdisk_iterate, + .open = grub_util_biosdisk_open, + .close = grub_util_biosdisk_close, + .read = grub_util_biosdisk_read, + .write = grub_util_biosdisk_write, + .next = 0 + }; + +static int +grub_util_check_file_presence (const char *p) +{ +#if !GRUB_UTIL_FD_STAT_IS_FUNCTIONAL + grub_util_fd_t h; + h = grub_util_fd_open (p, GRUB_UTIL_FD_O_RDONLY); + if (!GRUB_UTIL_FD_IS_VALID(h)) + return 0; + grub_util_fd_close (h); + return 1; +#else + struct stat st; + + if (stat (p, &st) == -1) + return 0; + return 1; +#endif +} + +static void +read_device_map (const char *dev_map) +{ + FILE *fp; + char buf[1024]; /* XXX */ + int lineno = 0; + + if (!dev_map || dev_map[0] == '\0') + { + grub_util_info ("no device.map"); + return; + } + + fp = grub_util_fopen (dev_map, "r"); + if (! fp) + { + grub_util_info (_("cannot open `%s': %s"), dev_map, strerror (errno)); + return; + } + + while (fgets (buf, sizeof (buf), fp)) + { + char *p = buf; + char *e; + char *drive_e, *drive_p; + int drive; + + lineno++; + + /* Skip leading spaces. */ + while (*p && grub_isspace (*p)) + p++; + + /* If the first character is `#' or NUL, skip this line. */ + if (*p == '\0' || *p == '#') + continue; + + if (*p != '(') + { + char *tmp; + tmp = xasprintf (_("missing `%c' symbol"), '('); + grub_util_error ("%s:%d: %s", dev_map, lineno, tmp); + } + + p++; + /* Find a free slot. */ + drive = find_free_slot (); + if (drive < 0) + grub_util_error ("%s:%d: %s", dev_map, lineno, _("device count exceeds limit")); + + e = p; + p = strchr (p, ')'); + if (! p) + { + char *tmp; + tmp = xasprintf (_("missing `%c' symbol"), ')'); + grub_util_error ("%s:%d: %s", dev_map, lineno, tmp); + } + + map[drive].drive = 0; + if ((e[0] == 'f' || e[0] == 'h' || e[0] == 'c') && e[1] == 'd') + { + char *ptr; + for (ptr = e + 2; ptr < p; ptr++) + if (!grub_isdigit (*ptr)) + break; + if (ptr == p) + { + map[drive].drive = xmalloc (p - e + sizeof ('\0')); + strncpy (map[drive].drive, e, p - e + sizeof ('\0')); + map[drive].drive[p - e] = '\0'; + } + if (*ptr == ',') + { + *p = 0; + + /* TRANSLATORS: Only one entry is ignored. However the suggestion + is to correct/delete the whole file. + device.map is a file indicating which + devices are available at boot time. Fedora populated it with + entries like (hd0,1) /dev/sda1 which would mean that every + partition is a separate disk for BIOS. Such entries were + inactive in GRUB due to its bug which is now gone. Without + this additional check these entries would be harmful now. + */ + grub_util_warn (_("the device.map entry `%s' is invalid. " + "Ignoring it. Please correct or " + "delete your device.map"), e); + continue; + } + } + drive_e = e; + drive_p = p; + map[drive].device_map = 1; + + p++; + /* Skip leading spaces. */ + while (*p && grub_isspace (*p)) + p++; + + if (*p == '\0') + grub_util_error ("%s:%d: %s", dev_map, lineno, _("filename expected")); + + /* NUL-terminate the filename. */ + e = p; + while (*e && ! grub_isspace (*e)) + e++; + *e = '\0'; + + if (!grub_util_check_file_presence (p)) + { + free (map[drive].drive); + map[drive].drive = NULL; + grub_util_info ("Cannot stat `%s', skipping", p); + continue; + } + + /* On Linux, the devfs uses symbolic links horribly, and that + confuses the interface very much, so use realpath to expand + symbolic links. */ + map[drive].device = grub_canonicalize_file_name (p); + if (! map[drive].device) + map[drive].device = xstrdup (p); + + if (!map[drive].drive) + { + char c; + map[drive].drive = xmalloc (sizeof ("hostdisk/") + strlen (p)); + memcpy (map[drive].drive, "hostdisk/", sizeof ("hostdisk/") - 1); + strcpy (map[drive].drive + sizeof ("hostdisk/") - 1, p); + c = *drive_p; + *drive_p = 0; + /* TRANSLATORS: device.map is a filename. Not to be translated. + device.map specifies disk correspondance overrides. Previously + one could create any kind of device name with this. Due to + some problems we decided to limit it to just a handful + possibilities. */ + grub_util_warn (_("the drive name `%s' in device.map is incorrect. " + "Using %s instead. " + "Please use the form [hfc]d[0-9]* " + "(E.g. `hd0' or `cd')"), + drive_e, map[drive].drive); + *drive_p = c; + } + + grub_util_info ("adding `%s' -> `%s' from device.map", map[drive].drive, + map[drive].device); + + grub_hostdisk_flush_initial_buffer (map[drive].device); + } + + fclose (fp); +} + +void +grub_util_biosdisk_init (const char *dev_map) +{ + read_device_map (dev_map); + grub_disk_dev_register (&grub_util_biosdisk_dev); +} + +void +grub_util_biosdisk_fini (void) +{ + unsigned i; + + for (i = 0; i < ARRAY_SIZE(map); i++) + { + if (map[i].drive) + free (map[i].drive); + if (map[i].device) + free (map[i].device); + map[i].drive = map[i].device = NULL; + } + + grub_disk_dev_unregister (&grub_util_biosdisk_dev); +} + +const char * +grub_util_biosdisk_get_compatibility_hint (grub_disk_t disk) +{ + if (disk->dev != &grub_util_biosdisk_dev || map[disk->id].device_map) + return disk->name; + return 0; +} + +const char * +grub_util_biosdisk_get_osdev (grub_disk_t disk) +{ + if (disk->dev != &grub_util_biosdisk_dev) + return 0; + + return map[disk->id].device; +} + + +static char * +grub_util_path_concat_real (size_t n, int ext, va_list ap) +{ + size_t totlen = 0; + char **l = xmalloc ((n + ext) * sizeof (l[0])); + char *r, *p, *pi; + size_t i; + int first = 1; + + for (i = 0; i < n + ext; i++) + { + l[i] = va_arg (ap, char *); + if (l[i]) + totlen += strlen (l[i]) + 1; + } + + r = xmalloc (totlen + 10); + + p = r; + for (i = 0; i < n; i++) + { + pi = l[i]; + if (!pi) + continue; + while (*pi == '/') + pi++; + if ((p != r || (pi != l[i] && first)) && (p == r || *(p - 1) != '/')) + *p++ = '/'; + first = 0; + p = grub_stpcpy (p, pi); + while (p != r && p != r + 1 && *(p - 1) == '/') + p--; + } + + if (ext && l[i]) + p = grub_stpcpy (p, l[i]); + + *p = '\0'; + + free (l); + + return r; +} + +char * +grub_util_path_concat (size_t n, ...) +{ + va_list ap; + char *r; + + va_start (ap, n); + + r = grub_util_path_concat_real (n, 0, ap); + + va_end (ap); + + return r; +} + +char * +grub_util_path_concat_ext (size_t n, ...) +{ + va_list ap; + char *r; + + va_start (ap, n); + + r = grub_util_path_concat_real (n, 1, ap); + + va_end (ap); + + return r; +} diff --git a/grub-core/kern/emu/hostfs.c b/grub-core/kern/emu/hostfs.c new file mode 100644 index 000000000..7b28c001f --- /dev/null +++ b/grub-core/kern/emu/hostfs.c @@ -0,0 +1,197 @@ +/* hostfs.c - Dummy filesystem to provide access to the hosts filesystem */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +static int +is_dir (const char *path, const char *name) +{ + int len1 = strlen(path); + int len2 = strlen(name); + int ret; + + char *pathname = xmalloc (len1 + 1 + len2 + 1 + 13); + strcpy (pathname, path); + + /* Avoid UNC-path "//name" on Cygwin. */ + if (len1 > 0 && pathname[len1 - 1] != '/') + strcat (pathname, "/"); + + strcat (pathname, name); + + ret = grub_util_is_directory (pathname); + free (pathname); + return ret; +} + +struct grub_hostfs_data +{ + char *filename; + grub_util_fd_t f; +}; + +static grub_err_t +grub_hostfs_dir (grub_device_t device, const char *path, + grub_fs_dir_hook_t hook, void *hook_data) +{ + grub_util_fd_dir_t dir; + + /* Check if the disk is our dummy disk. */ + if (grub_strcmp (device->disk->name, "host")) + return grub_error (GRUB_ERR_BAD_FS, "not a hostfs"); + + dir = grub_util_fd_opendir (path); + if (! dir) + return grub_error (GRUB_ERR_BAD_FILENAME, + N_("can't open `%s': %s"), path, + grub_util_fd_strerror ()); + + while (1) + { + grub_util_fd_dirent_t de; + struct grub_dirhook_info info; + grub_memset (&info, 0, sizeof (info)); + + de = grub_util_fd_readdir (dir); + if (! de) + break; + + info.dir = !! is_dir (path, de->d_name); + hook (de->d_name, &info, hook_data); + + } + + grub_util_fd_closedir (dir); + + return GRUB_ERR_NONE; +} + +/* Open a file named NAME and initialize FILE. */ +static grub_err_t +grub_hostfs_open (struct grub_file *file, const char *name) +{ + grub_util_fd_t f; + struct grub_hostfs_data *data; + + f = grub_util_fd_open (name, GRUB_UTIL_FD_O_RDONLY); + if (! GRUB_UTIL_FD_IS_VALID (f)) + return grub_error (GRUB_ERR_BAD_FILENAME, + N_("can't open `%s': %s"), name, + strerror (errno)); + data = grub_malloc (sizeof (*data)); + if (!data) + { + grub_util_fd_close (f); + return grub_errno; + } + data->filename = grub_strdup (name); + if (!data->filename) + { + grub_free (data); + grub_util_fd_close (f); + return grub_errno; + } + + data->f = f; + + file->data = data; + + file->size = grub_util_get_fd_size (f, name, NULL); + + return GRUB_ERR_NONE; +} + +static grub_ssize_t +grub_hostfs_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_hostfs_data *data; + + data = file->data; + if (grub_util_fd_seek (data->f, file->offset) != 0) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, N_("cannot seek `%s': %s"), + data->filename, grub_util_fd_strerror ()); + return -1; + } + + unsigned int s = grub_util_fd_read (data->f, buf, len); + if (s != len) + grub_error (GRUB_ERR_FILE_READ_ERROR, N_("cannot read `%s': %s"), + data->filename, grub_util_fd_strerror ()); + + return (signed) s; +} + +static grub_err_t +grub_hostfs_close (grub_file_t file) +{ + struct grub_hostfs_data *data; + + data = file->data; + grub_util_fd_close (data->f); + grub_free (data->filename); + grub_free (data); + + return GRUB_ERR_NONE; +} + +static grub_err_t +grub_hostfs_label (grub_device_t device __attribute ((unused)), + char **label __attribute ((unused))) +{ + *label = 0; + return GRUB_ERR_NONE; +} + +static struct grub_fs grub_hostfs_fs = + { + .name = "hostfs", + .dir = grub_hostfs_dir, + .open = grub_hostfs_open, + .read = grub_hostfs_read, + .close = grub_hostfs_close, + .label = grub_hostfs_label, + .next = 0 + }; + + + +GRUB_MOD_INIT(hostfs) +{ + grub_fs_register (&grub_hostfs_fs); +} + +GRUB_MOD_FINI(hostfs) +{ + grub_fs_unregister (&grub_hostfs_fs); +} diff --git a/grub-core/kern/emu/lite.c b/grub-core/kern/emu/lite.c new file mode 100644 index 000000000..b2fc93d7f --- /dev/null +++ b/grub-core/kern/emu/lite.c @@ -0,0 +1,45 @@ +#include +#include + +#ifndef GRUB_MACHINE_EMU +#error "This source is only meant for grub-emu platform" +#endif + +#if defined(__i386__) +#include "../i386/dl.c" +#elif defined(__x86_64__) +#include "../x86_64/dl.c" +#elif defined(__sparc__) +#include "../sparc64/dl.c" +#elif defined(__mips__) +#include "../mips/dl.c" +#elif defined(__powerpc__) +#include "../powerpc/dl.c" +#elif defined(__ia64__) +#include "../ia64/dl_helper.c" +#include "../ia64/dl.c" +#elif defined(__arm__) +#include "../arm/dl_helper.c" +#include "../arm/dl.c" +#elif defined(__aarch64__) +#include "../arm64/dl_helper.c" +#include "../arm64/dl.c" +#else +#error "No target cpu type is defined" +#endif + +const int grub_no_modules = 0; + +/* grub-emu-lite supports dynamic module loading, so it won't have any + embedded modules. */ +void +grub_init_all (void) +{ + return; +} + +void +grub_fini_all (void) +{ + return; +} diff --git a/grub-core/kern/emu/main.c b/grub-core/kern/emu/main.c new file mode 100644 index 000000000..425bb9603 --- /dev/null +++ b/grub-core/kern/emu/main.c @@ -0,0 +1,286 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" + +#include "progname.h" +#include + +#define ENABLE_RELOCATABLE 0 + +/* Used for going back to the main function. */ +static jmp_buf main_env; + +/* Store the prefix specified by an argument. */ +static char *root_dev = NULL, *dir = NULL; + +grub_addr_t grub_modbase = 0; + +void +grub_reboot (void) +{ + longjmp (main_env, 1); + grub_fatal ("longjmp failed"); +} + +void +grub_exit (void) +{ + grub_reboot (); +} + +void +grub_machine_init (void) +{ +} + +void +grub_machine_get_bootlocation (char **device, char **path) +{ + *device = root_dev; + *path = dir; +} + +void +grub_machine_fini (int flags) +{ + if (flags & GRUB_LOADER_FLAG_NORETURN) + grub_console_fini (); +} + + + +#define OPT_MEMDISK 257 + +static struct argp_option options[] = { + {"root", 'r', N_("DEVICE_NAME"), 0, N_("Set root device."), 2}, + {"device-map", 'm', N_("FILE"), 0, + /* TRANSLATORS: There are many devices in device map. */ + N_("use FILE as the device map [default=%s]"), 0}, + {"memdisk", OPT_MEMDISK, N_("FILE"), 0, + /* TRANSLATORS: There are many devices in device map. */ + N_("use FILE as memdisk"), 0}, + {"directory", 'd', N_("DIR"), 0, + N_("use GRUB files in the directory DIR [default=%s]"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + {"hold", 'H', N_("SECS"), OPTION_ARG_OPTIONAL, N_("wait until a debugger will attach"), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case 'd': + return xasprintf (text, DEFAULT_DIRECTORY); + case 'm': + return xasprintf (text, DEFAULT_DEVICE_MAP); + default: + return (char *) text; + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +struct arguments +{ + const char *dev_map; + const char *mem_disk; + int hold; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case OPT_MEMDISK: + arguments->mem_disk = arg; + break; + case 'r': + free (root_dev); + root_dev = xstrdup (arg); + break; + case 'd': + free (dir); + dir = xstrdup (arg); + break; + case 'm': + arguments->dev_map = arg; + break; + case 'H': + arguments->hold = (arg ? atoi (arg) : -1); + break; + case 'v': + verbosity++; + break; + + case ARGP_KEY_ARG: + { + /* Too many arguments. */ + fprintf (stderr, _("Unknown extra argument `%s'."), arg); + fprintf (stderr, "\n"); + argp_usage (state); + } + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, NULL, + N_("GRUB emulator."), + NULL, help_filter, NULL +}; + + + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" + +int +main (int argc, char *argv[]) +{ + struct arguments arguments = + { + .dev_map = DEFAULT_DEVICE_MAP, + .hold = 0, + .mem_disk = 0, + }; + volatile int hold = 0; + size_t total_module_size = sizeof (struct grub_module_info), memdisk_size = 0; + struct grub_module_info *modinfo; + void *mods; + + grub_util_host_init (&argc, &argv); + + dir = xstrdup (DEFAULT_DIRECTORY); + + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (arguments.mem_disk) + { + memdisk_size = ALIGN_UP(grub_util_get_image_size (arguments.mem_disk), 512); + total_module_size += memdisk_size + sizeof (struct grub_module_header); + } + + mods = xmalloc (total_module_size); + modinfo = grub_memset (mods, 0, total_module_size); + mods = (char *) (modinfo + 1); + + modinfo->magic = GRUB_MODULE_MAGIC; + modinfo->offset = sizeof (struct grub_module_info); + modinfo->size = total_module_size; + + if (arguments.mem_disk) + { + struct grub_module_header *header = (struct grub_module_header *) mods; + header->type = OBJ_TYPE_MEMDISK; + header->size = memdisk_size + sizeof (*header); + mods = header + 1; + + grub_util_load_image (arguments.mem_disk, mods); + mods = (char *) mods + memdisk_size; + } + + grub_modbase = (grub_addr_t) modinfo; + + hold = arguments.hold; + /* Wait until the ARGS.HOLD variable is cleared by an attached debugger. */ + if (hold && verbosity > 0) + /* TRANSLATORS: In this case GRUB tells user what he has to do. */ + printf (_("Run `gdb %s %d', and set ARGS.HOLD to zero.\n"), + program_name, (int) getpid ()); + while (hold) + { + if (hold > 0) + hold--; + + sleep (1); + } + + signal (SIGINT, SIG_IGN); + grub_console_init (); + grub_host_init (); + + /* XXX: This is a bit unportable. */ + grub_util_biosdisk_init (arguments.dev_map); + + grub_init_all (); + + grub_hostfs_init (); + + /* Make sure that there is a root device. */ + if (! root_dev) + root_dev = grub_strdup ("host"); + + dir = xstrdup (dir); + + /* Start GRUB! */ + if (setjmp (main_env) == 0) + grub_main (); + + grub_fini_all (); + grub_hostfs_fini (); + grub_host_fini (); + + grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); + + return 0; +} diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c new file mode 100644 index 000000000..76661337f --- /dev/null +++ b/grub-core/kern/emu/misc.c @@ -0,0 +1,202 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +int verbosity; + +void +grub_util_warn (const char *fmt, ...) +{ + va_list ap; + + fprintf (stderr, _("%s: warning:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + fflush (stderr); +} + +void +grub_util_info (const char *fmt, ...) +{ + if (verbosity > 0) + { + va_list ap; + + fprintf (stderr, _("%s: info:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + fflush (stderr); + } +} + +void +grub_util_error (const char *fmt, ...) +{ + va_list ap; + + fprintf (stderr, _("%s: error:"), program_name); + fprintf (stderr, " "); + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + va_end (ap); + fprintf (stderr, ".\n"); + exit (1); +} + +void * +xmalloc (grub_size_t size) +{ + void *p; + + p = malloc (size); + if (! p) + grub_util_error ("%s", _("out of memory")); + + return p; +} + +void * +xrealloc (void *ptr, grub_size_t size) +{ + ptr = realloc (ptr, size); + if (! ptr) + grub_util_error ("%s", _("out of memory")); + + return ptr; +} + +char * +xstrdup (const char *str) +{ + size_t len; + char *newstr; + + len = strlen (str); + newstr = (char *) xmalloc (len + 1); + memcpy (newstr, str, len + 1); + + return newstr; +} + +#if !defined (GRUB_MKFONT) && !defined (GRUB_BUILD) +char * +xasprintf (const char *fmt, ...) +{ + va_list ap; + char *result; + + va_start (ap, fmt); + result = grub_xvasprintf (fmt, ap); + va_end (ap); + if (!result) + grub_util_error ("%s", _("out of memory")); + + return result; +} +#endif + +#if !defined (GRUB_MACHINE_EMU) || defined (GRUB_UTIL) +void +grub_exit (void) +{ + exit (1); +} +#endif + +grub_uint64_t +grub_get_time_ms (void) +{ + struct timeval tv; + + gettimeofday (&tv, 0); + + return (tv.tv_sec * 1000 + tv.tv_usec / 1000); +} + +size_t +grub_util_get_image_size (const char *path) +{ + FILE *f; + size_t ret; + off_t sz; + + f = grub_util_fopen (path, "rb"); + + if (!f) + grub_util_error (_("cannot open `%s': %s"), path, strerror (errno)); + + fseeko (f, 0, SEEK_END); + + sz = ftello (f); + if (sz < 0) + grub_util_error (_("cannot open `%s': %s"), path, strerror (errno)); + if (sz != (size_t) sz) + grub_util_error (_("file `%s' is too big"), path); + ret = (size_t) sz; + + fclose (f); + + return ret; +} + +void +grub_util_load_image (const char *path, char *buf) +{ + FILE *fp; + size_t size; + + grub_util_info ("reading %s", path); + + size = grub_util_get_image_size (path); + + fp = grub_util_fopen (path, "rb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), path, + strerror (errno)); + + if (fread (buf, 1, size, fp) != size) + grub_util_error (_("cannot read `%s': %s"), path, + strerror (errno)); + + fclose (fp); +} diff --git a/grub-core/kern/emu/mm.c b/grub-core/kern/emu/mm.c new file mode 100644 index 000000000..f262e95e3 --- /dev/null +++ b/grub-core/kern/emu/mm.c @@ -0,0 +1,64 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#include + +void * +grub_malloc (grub_size_t size) +{ + void *ret; + ret = malloc (size); + if (!ret) + grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); + return ret; +} + +void * +grub_zalloc (grub_size_t size) +{ + void *ret; + + ret = grub_malloc (size); + if (!ret) + return NULL; + memset (ret, 0, size); + return ret; +} + +void +grub_free (void *ptr) +{ + free (ptr); +} + +void * +grub_realloc (void *ptr, grub_size_t size) +{ + void *ret; + ret = realloc (ptr, size); + if (!ret) + grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); + return ret; +} diff --git a/grub-core/kern/emu/time.c b/grub-core/kern/emu/time.c new file mode 100644 index 000000000..5da8092a9 --- /dev/null +++ b/grub-core/kern/emu/time.c @@ -0,0 +1,46 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +grub_err_t +grub_get_datetime (struct grub_datetime *datetime) +{ + struct tm *mytm; + time_t mytime; + + mytime = time (&mytime); + mytm = gmtime (&mytime); + + datetime->year = mytm->tm_year + 1900; + datetime->month = mytm->tm_mon + 1; + datetime->day = mytm->tm_mday; + datetime->hour = mytm->tm_hour; + datetime->minute = mytm->tm_min; + datetime->second = mytm->tm_sec; + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_set_datetime (struct grub_datetime *datetime __attribute__ ((unused))) +{ + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "no clock setting routine available"); +} diff --git a/grub-core/kern/env.c b/grub-core/kern/env.c new file mode 100644 index 000000000..c40862642 --- /dev/null +++ b/grub-core/kern/env.c @@ -0,0 +1,238 @@ +/* env.c - Environment variables */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +/* The initial context. */ +static struct grub_env_context initial_context; + +/* The current context. */ +struct grub_env_context *grub_current_context = &initial_context; + +/* Return the hash representation of the string S. */ +static unsigned int +grub_env_hashval (const char *s) +{ + unsigned int i = 0; + + /* XXX: This can be done much more efficiently. */ + while (*s) + i += 5 * *(s++); + + return i % HASHSZ; +} + +static struct grub_env_var * +grub_env_find (const char *name) +{ + struct grub_env_var *var; + int idx = grub_env_hashval (name); + + /* Look for the variable in the current context. */ + for (var = grub_current_context->vars[idx]; var; var = var->next) + if (grub_strcmp (var->name, name) == 0) + return var; + + return 0; +} + +static void +grub_env_insert (struct grub_env_context *context, + struct grub_env_var *var) +{ + int idx = grub_env_hashval (var->name); + + /* Insert the variable into the hashtable. */ + var->prevp = &context->vars[idx]; + var->next = context->vars[idx]; + if (var->next) + var->next->prevp = &(var->next); + context->vars[idx] = var; +} + +static void +grub_env_remove (struct grub_env_var *var) +{ + /* Remove the entry from the variable table. */ + *var->prevp = var->next; + if (var->next) + var->next->prevp = var->prevp; +} + +grub_err_t +grub_env_set (const char *name, const char *val) +{ + struct grub_env_var *var; + + /* If the variable does already exist, just update the variable. */ + var = grub_env_find (name); + if (var) + { + char *old = var->value; + + if (var->write_hook) + var->value = var->write_hook (var, val); + else + var->value = grub_strdup (val); + + if (! var->value) + { + var->value = old; + return grub_errno; + } + + grub_free (old); + return GRUB_ERR_NONE; + } + + /* The variable does not exist, so create a new one. */ + var = grub_zalloc (sizeof (*var)); + if (! var) + return grub_errno; + + var->name = grub_strdup (name); + if (! var->name) + goto fail; + + var->value = grub_strdup (val); + if (! var->value) + goto fail; + + grub_env_insert (grub_current_context, var); + + return GRUB_ERR_NONE; + + fail: + grub_free (var->name); + grub_free (var->value); + grub_free (var); + + return grub_errno; +} + +const char * +grub_env_get (const char *name) +{ + struct grub_env_var *var; + + var = grub_env_find (name); + if (! var) + return 0; + + if (var->read_hook) + return var->read_hook (var, var->value); + + return var->value; +} + +void +grub_env_unset (const char *name) +{ + struct grub_env_var *var; + + var = grub_env_find (name); + if (! var) + return; + + if (var->read_hook || var->write_hook) + { + grub_env_set (name, ""); + return; + } + + grub_env_remove (var); + + grub_free (var->name); + grub_free (var->value); + grub_free (var); +} + +struct grub_env_var * +grub_env_update_get_sorted (void) +{ + struct grub_env_var *sorted_list = 0; + int i; + + /* Add variables associated with this context into a sorted list. */ + for (i = 0; i < HASHSZ; i++) + { + struct grub_env_var *var; + + for (var = grub_current_context->vars[i]; var; var = var->next) + { + struct grub_env_var *p, **q; + + for (q = &sorted_list, p = *q; p; q = &((*q)->sorted_next), p = *q) + { + if (grub_strcmp (p->name, var->name) > 0) + break; + } + + var->sorted_next = *q; + *q = var; + } + } + + return sorted_list; +} + +grub_err_t +grub_register_variable_hook (const char *name, + grub_env_read_hook_t read_hook, + grub_env_write_hook_t write_hook) +{ + struct grub_env_var *var = grub_env_find (name); + + if (! var) + { + if (grub_env_set (name, "") != GRUB_ERR_NONE) + return grub_errno; + + var = grub_env_find (name); + /* XXX Insert an assertion? */ + } + + var->read_hook = read_hook; + var->write_hook = write_hook; + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_env_export (const char *name) +{ + struct grub_env_var *var; + + var = grub_env_find (name); + if (! var) + { + grub_err_t err; + + err = grub_env_set (name, ""); + if (err) + return err; + var = grub_env_find (name); + } + var->global = 1; + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/err.c b/grub-core/kern/err.c new file mode 100644 index 000000000..53c734de7 --- /dev/null +++ b/grub-core/kern/err.c @@ -0,0 +1,122 @@ +/* err.c - error handling routines */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2005,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +#define GRUB_ERROR_STACK_SIZE 10 + +grub_err_t grub_errno; +char grub_errmsg[GRUB_MAX_ERRMSG]; +int grub_err_printed_errors; + +static struct grub_error_saved grub_error_stack_items[GRUB_ERROR_STACK_SIZE]; + +static int grub_error_stack_pos; +static int grub_error_stack_assert; + +grub_err_t +grub_error (grub_err_t n, const char *fmt, ...) +{ + va_list ap; + + grub_errno = n; + + va_start (ap, fmt); + grub_vsnprintf (grub_errmsg, sizeof (grub_errmsg), _(fmt), ap); + va_end (ap); + + return n; +} + +void +grub_error_push (void) +{ + /* Only add items to stack, if there is enough room. */ + if (grub_error_stack_pos < GRUB_ERROR_STACK_SIZE) + { + /* Copy active error message to stack. */ + grub_error_stack_items[grub_error_stack_pos].grub_errno = grub_errno; + grub_memcpy (grub_error_stack_items[grub_error_stack_pos].errmsg, + grub_errmsg, + sizeof (grub_errmsg)); + + /* Advance to next error stack position. */ + grub_error_stack_pos++; + } + else + { + /* There is no room for new error message. Discard new error message + and mark error stack assertion flag. */ + grub_error_stack_assert = 1; + } + + /* Allow further operation of other components by resetting + active errno to GRUB_ERR_NONE. */ + grub_errno = GRUB_ERR_NONE; +} + +int +grub_error_pop (void) +{ + if (grub_error_stack_pos > 0) + { + /* Pop error message from error stack to current active error. */ + grub_error_stack_pos--; + + grub_errno = grub_error_stack_items[grub_error_stack_pos].grub_errno; + grub_memcpy (grub_errmsg, + grub_error_stack_items[grub_error_stack_pos].errmsg, + sizeof (grub_errmsg)); + + return 1; + } + else + { + /* There is no more items on error stack, reset to no error state. */ + grub_errno = GRUB_ERR_NONE; + + return 0; + } +} + +void +grub_print_error (void) +{ + /* Print error messages in reverse order. First print active error message + and then empty error stack. */ + do + { + if (grub_errno != GRUB_ERR_NONE) + { + grub_err_printf (_("error: %s.\n"), grub_errmsg); + grub_err_printed_errors++; + } + } + while (grub_error_pop ()); + + /* If there was an assert while using error stack, report about it. */ + if (grub_error_stack_assert) + { + grub_err_printf ("assert: error stack overflow detected!\n"); + grub_error_stack_assert = 0; + } +} diff --git a/grub-core/kern/file.c b/grub-core/kern/file.c new file mode 100644 index 000000000..668f8930b --- /dev/null +++ b/grub-core/kern/file.c @@ -0,0 +1,220 @@ +/* file.c - file I/O functions */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +void (*EXPORT_VAR (grub_grubnet_fini)) (void); + +grub_file_filter_t grub_file_filters_all[GRUB_FILE_FILTER_MAX]; +grub_file_filter_t grub_file_filters_enabled[GRUB_FILE_FILTER_MAX]; + +/* Get the device part of the filename NAME. It is enclosed by parentheses. */ +char * +grub_file_get_device_name (const char *name) +{ + if (name[0] == '(') + { + char *p = grub_strchr (name, ')'); + char *ret; + + if (! p) + { + grub_error (GRUB_ERR_BAD_FILENAME, N_("missing `%c' symbol"), ')'); + return 0; + } + + ret = (char *) grub_malloc (p - name); + if (! ret) + return 0; + + grub_memcpy (ret, name + 1, p - name - 1); + ret[p - name - 1] = '\0'; + return ret; + } + + return 0; +} + +grub_file_t +grub_file_open (const char *name) +{ + grub_device_t device = 0; + grub_file_t file = 0, last_file = 0; + char *device_name; + const char *file_name; + grub_file_filter_id_t filter; + + device_name = grub_file_get_device_name (name); + if (grub_errno) + goto fail; + + /* Get the file part of NAME. */ + file_name = (name[0] == '(') ? grub_strchr (name, ')') : NULL; + if (file_name) + file_name++; + else + file_name = name; + + device = grub_device_open (device_name); + grub_free (device_name); + if (! device) + goto fail; + + file = (grub_file_t) grub_zalloc (sizeof (*file)); + if (! file) + goto fail; + + file->device = device; + + /* In case of relative pathnames and non-Unix systems (like Windows) + * name of host files may not start with `/'. Blocklists for host files + * are meaningless as well (for a start, host disk does not allow any direct + * access - it is just a marker). So skip host disk in this case. + */ + if (device->disk && file_name[0] != '/' +#if defined(GRUB_UTIL) || defined(GRUB_MACHINE_EMU) + && grub_strcmp (device->disk->name, "host") +#endif + ) + /* This is a block list. */ + file->fs = &grub_fs_blocklist; + else + { + file->fs = grub_fs_probe (device); + if (! file->fs) + goto fail; + } + + if ((file->fs->open) (file, file_name) != GRUB_ERR_NONE) + goto fail; + + file->name = grub_strdup (name); + grub_errno = GRUB_ERR_NONE; + + for (filter = 0; file && filter < ARRAY_SIZE (grub_file_filters_enabled); + filter++) + if (grub_file_filters_enabled[filter]) + { + last_file = file; + file = grub_file_filters_enabled[filter] (file, name); + } + if (!file) + grub_file_close (last_file); + + grub_memcpy (grub_file_filters_enabled, grub_file_filters_all, + sizeof (grub_file_filters_enabled)); + + return file; + + fail: + if (device) + grub_device_close (device); + + /* if (net) grub_net_close (net); */ + + grub_free (file); + + grub_memcpy (grub_file_filters_enabled, grub_file_filters_all, + sizeof (grub_file_filters_enabled)); + + return 0; +} + +grub_disk_read_hook_t grub_file_progress_hook; + +grub_ssize_t +grub_file_read (grub_file_t file, void *buf, grub_size_t len) +{ + grub_ssize_t res; + grub_disk_read_hook_t read_hook; + void *read_hook_data; + + if (file->offset > file->size) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to read past the end of file")); + return -1; + } + + if (len == 0) + return 0; + + if (len > file->size - file->offset) + len = file->size - file->offset; + + /* Prevent an overflow. */ + if ((grub_ssize_t) len < 0) + len >>= 1; + + if (len == 0) + return 0; + read_hook = file->read_hook; + read_hook_data = file->read_hook_data; + if (!file->read_hook) + { + file->read_hook = grub_file_progress_hook; + file->read_hook_data = file; + file->progress_offset = file->offset; + } + res = (file->fs->read) (file, buf, len); + file->read_hook = read_hook; + file->read_hook_data = read_hook_data; + if (res > 0) + file->offset += res; + + return res; +} + +grub_err_t +grub_file_close (grub_file_t file) +{ + if (file->fs->close) + (file->fs->close) (file); + + if (file->device) + grub_device_close (file->device); + grub_free (file->name); + grub_free (file); + return grub_errno; +} + +grub_off_t +grub_file_seek (grub_file_t file, grub_off_t offset) +{ + grub_off_t old; + + if (offset > file->size) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("attempt to seek outside of the file")); + return -1; + } + + old = file->offset; + file->offset = offset; + + return old; +} diff --git a/grub-core/kern/fs.c b/grub-core/kern/fs.c new file mode 100644 index 000000000..9085895b6 --- /dev/null +++ b/grub-core/kern/fs.c @@ -0,0 +1,251 @@ +/* fs.c - filesystem manager */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2005,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +grub_fs_t grub_fs_list = 0; + +grub_fs_autoload_hook_t grub_fs_autoload_hook = 0; + +/* Helper for grub_fs_probe. */ +static int +probe_dummy_iter (const char *filename __attribute__ ((unused)), + const struct grub_dirhook_info *info __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + return 1; +} + +grub_fs_t +grub_fs_probe (grub_device_t device) +{ + grub_fs_t p; + + if (device->disk) + { + /* Make it sure not to have an infinite recursive calls. */ + static int count = 0; + + for (p = grub_fs_list; p; p = p->next) + { + grub_dprintf ("fs", "Detecting %s...\n", p->name); + + /* This is evil: newly-created just mounted BtrFS after copying all + GRUB files has a very peculiar unrecoverable corruption which + will be fixed at sync but we'd rather not do a global sync and + syncing just files doesn't seem to help. Relax the check for + this time. */ +#ifdef GRUB_UTIL + if (grub_strcmp (p->name, "btrfs") == 0) + { + char *label = 0; + p->uuid (device, &label); + if (label) + grub_free (label); + } + else +#endif + (p->dir) (device, "/", probe_dummy_iter, NULL); + if (grub_errno == GRUB_ERR_NONE) + return p; + + grub_error_push (); + grub_dprintf ("fs", "%s detection failed.\n", p->name); + grub_error_pop (); + + if (grub_errno != GRUB_ERR_BAD_FS + && grub_errno != GRUB_ERR_OUT_OF_RANGE) + return 0; + + grub_errno = GRUB_ERR_NONE; + } + + /* Let's load modules automatically. */ + if (grub_fs_autoload_hook && count == 0) + { + count++; + + while (grub_fs_autoload_hook ()) + { + p = grub_fs_list; + + (p->dir) (device, "/", probe_dummy_iter, NULL); + if (grub_errno == GRUB_ERR_NONE) + { + count--; + return p; + } + + if (grub_errno != GRUB_ERR_BAD_FS + && grub_errno != GRUB_ERR_OUT_OF_RANGE) + { + count--; + return 0; + } + + grub_errno = GRUB_ERR_NONE; + } + + count--; + } + } + else if (device->net && device->net->fs) + return device->net->fs; + + grub_error (GRUB_ERR_UNKNOWN_FS, N_("unknown filesystem")); + return 0; +} + + + +/* Block list support routines. */ + +struct grub_fs_block +{ + grub_disk_addr_t offset; + unsigned long length; +}; + +static grub_err_t +grub_fs_blocklist_open (grub_file_t file, const char *name) +{ + char *p = (char *) name; + unsigned num = 0; + unsigned i; + grub_disk_t disk = file->device->disk; + struct grub_fs_block *blocks; + + /* First, count the number of blocks. */ + do + { + num++; + p = grub_strchr (p, ','); + if (p) + p++; + } + while (p); + + /* Allocate a block list. */ + blocks = grub_zalloc (sizeof (struct grub_fs_block) * (num + 1)); + if (! blocks) + return 0; + + file->size = 0; + p = (char *) name; + for (i = 0; i < num; i++) + { + if (*p != '+') + { + blocks[i].offset = grub_strtoull (p, &p, 0); + if (grub_errno != GRUB_ERR_NONE || *p != '+') + { + grub_error (GRUB_ERR_BAD_FILENAME, + N_("invalid file name `%s'"), name); + goto fail; + } + } + + p++; + blocks[i].length = grub_strtoul (p, &p, 0); + if (grub_errno != GRUB_ERR_NONE + || blocks[i].length == 0 + || (*p && *p != ',' && ! grub_isspace (*p))) + { + grub_error (GRUB_ERR_BAD_FILENAME, + N_("invalid file name `%s'"), name); + goto fail; + } + + if (disk->total_sectors < blocks[i].offset + blocks[i].length) + { + grub_error (GRUB_ERR_BAD_FILENAME, "beyond the total sectors"); + goto fail; + } + + file->size += (blocks[i].length << GRUB_DISK_SECTOR_BITS); + p++; + } + + file->data = blocks; + + return GRUB_ERR_NONE; + + fail: + grub_free (blocks); + return grub_errno; +} + +static grub_ssize_t +grub_fs_blocklist_read (grub_file_t file, char *buf, grub_size_t len) +{ + struct grub_fs_block *p; + grub_disk_addr_t sector; + grub_off_t offset; + grub_ssize_t ret = 0; + + if (len > file->size - file->offset) + len = file->size - file->offset; + + sector = (file->offset >> GRUB_DISK_SECTOR_BITS); + offset = (file->offset & (GRUB_DISK_SECTOR_SIZE - 1)); + for (p = file->data; p->length && len > 0; p++) + { + if (sector < p->length) + { + grub_size_t size; + + size = len; + if (((size + offset + GRUB_DISK_SECTOR_SIZE - 1) + >> GRUB_DISK_SECTOR_BITS) > p->length - sector) + size = ((p->length - sector) << GRUB_DISK_SECTOR_BITS) - offset; + + if (grub_disk_read (file->device->disk, p->offset + sector, offset, + size, buf) != GRUB_ERR_NONE) + return -1; + + ret += size; + len -= size; + sector -= ((size + offset) >> GRUB_DISK_SECTOR_BITS); + offset = ((size + offset) & (GRUB_DISK_SECTOR_SIZE - 1)); + } + else + sector -= p->length; + } + + return ret; +} + +struct grub_fs grub_fs_blocklist = + { + .name = "blocklist", + .dir = 0, + .open = grub_fs_blocklist_open, + .read = grub_fs_blocklist_read, + .close = 0, + .next = 0 + }; diff --git a/grub-core/kern/generic/millisleep.c b/grub-core/kern/generic/millisleep.c new file mode 100644 index 000000000..9d5971f21 --- /dev/null +++ b/grub-core/kern/generic/millisleep.c @@ -0,0 +1,39 @@ +/* millisleep.c - generic millisleep function. + * The generic implementation of these functions can be used for architectures + * or platforms that do not have a more specialized implementation. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +void +grub_millisleep (grub_uint32_t ms) +{ + grub_uint64_t start; + + start = grub_get_time_ms (); + + /* Instead of setting an end time and looping while the current time is + less than that, comparing the elapsed sleep time with the desired sleep + time handles the (unlikely!) case that the timer would wrap around + during the sleep. */ + + while (grub_get_time_ms () - start < ms) + grub_cpu_idle (); +} diff --git a/grub-core/kern/generic/rtc_get_time_ms.c b/grub-core/kern/generic/rtc_get_time_ms.c new file mode 100644 index 000000000..3e39c8fe1 --- /dev/null +++ b/grub-core/kern/generic/rtc_get_time_ms.c @@ -0,0 +1,38 @@ +/* rtc_get_time_ms.c - get_time_ms implementation using platform RTC. + * The generic implementation of these functions can be used for architectures + * or platforms that do not have a more specialized implementation. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +/* Calculate the time in milliseconds since the epoch based on the RTC. */ +grub_uint64_t +grub_rtc_get_time_ms (void) +{ + /* By dimensional analysis: + + 1000 ms N rtc ticks 1 s + ------- * ----------- * ----------- = 1000*N/T ms + 1 s 1 T rtc ticks + */ + grub_uint64_t ticks_ms_per_sec = ((grub_uint64_t) 1000) * grub_get_rtc (); + return grub_divmod64 (ticks_ms_per_sec, GRUB_TICKS_PER_SECOND ? : 1000, 0); +} diff --git a/grub-core/kern/i386/coreboot/cbtable.c b/grub-core/kern/i386/coreboot/cbtable.c new file mode 100644 index 000000000..1669bc0ca --- /dev/null +++ b/grub-core/kern/i386/coreboot/cbtable.c @@ -0,0 +1,83 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +/* Helper for grub_linuxbios_table_iterate. */ +static int +check_signature (grub_linuxbios_table_header_t tbl_header) +{ + if (! grub_memcmp (tbl_header->signature, "LBIO", 4)) + return 1; + + return 0; +} + +grub_err_t +grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t, + void *), + void *hook_data) +{ + grub_linuxbios_table_header_t table_header; + grub_linuxbios_table_item_t table_item; + + /* Assuming table_header is aligned to its size (8 bytes). */ + + for (table_header = (grub_linuxbios_table_header_t) 0x500; + table_header < (grub_linuxbios_table_header_t) 0x1000; table_header++) + if (check_signature (table_header)) + goto signature_found; + + for (table_header = (grub_linuxbios_table_header_t) 0xf0000; + table_header < (grub_linuxbios_table_header_t) 0x100000; table_header++) + if (check_signature (table_header)) + goto signature_found; + + return 0; + +signature_found: + + table_item = + (grub_linuxbios_table_item_t) ((char *) table_header + + table_header->header_size); + for (; table_item < (grub_linuxbios_table_item_t) ((char *) table_header + + table_header->header_size + + table_header->table_size); + table_item = (grub_linuxbios_table_item_t) ((char *) table_item + table_item->size)) + { + if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK + && check_signature ((grub_linuxbios_table_header_t) (grub_addr_t) + *(grub_uint64_t *) (table_item + 1))) + { + table_header = (grub_linuxbios_table_header_t) (grub_addr_t) + *(grub_uint64_t *) (table_item + 1); + goto signature_found; + } + if (hook (table_item, hook_data)) + return 1; + } + + return 0; +} diff --git a/grub-core/kern/i386/coreboot/init.c b/grub-core/kern/i386/coreboot/init.c new file mode 100644 index 000000000..3314f027f --- /dev/null +++ b/grub-core/kern/i386/coreboot/init.c @@ -0,0 +1,143 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern grub_uint8_t _start[]; +extern grub_uint8_t _end[]; +extern grub_uint8_t _edata[]; + +void __attribute__ ((noreturn)) +grub_exit (void) +{ + /* We can't use grub_fatal() in this function. This would create an infinite + loop, since grub_fatal() calls grub_abort() which in turn calls grub_exit(). */ + while (1) + grub_cpu_idle (); +} + +grub_addr_t grub_modbase = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR; +static grub_uint64_t modend; +static int have_memory = 0; + +/* Helper for grub_machine_init. */ +static int +heap_init (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type, + void *data __attribute__ ((unused))) +{ + grub_uint64_t begin = addr, end = addr + size; + +#if GRUB_CPU_SIZEOF_VOID_P == 4 + /* Restrict ourselves to 32-bit memory space. */ + if (begin > GRUB_ULONG_MAX) + return 0; + if (end > GRUB_ULONG_MAX) + end = GRUB_ULONG_MAX; +#endif + + if (type != GRUB_MEMORY_AVAILABLE) + return 0; + + /* Avoid the lower memory. */ + if (begin < GRUB_MEMORY_MACHINE_LOWER_SIZE) + begin = GRUB_MEMORY_MACHINE_LOWER_SIZE; + + if (modend && begin < modend) + begin = modend; + + if (end <= begin) + return 0; + + grub_mm_init_region ((void *) (grub_addr_t) begin, (grub_size_t) (end - begin)); + + have_memory = 1; + + return 0; +} + +#ifndef GRUB_MACHINE_MULTIBOOT + +void +grub_machine_init (void) +{ + modend = grub_modules_get_end (); + + grub_video_coreboot_fb_early_init (); + + grub_vga_text_init (); + + grub_machine_mmap_iterate (heap_init, NULL); + if (!have_memory) + grub_fatal ("No memory found"); + + grub_video_coreboot_fb_late_init (); + + grub_font_init (); + grub_gfxterm_init (); + + grub_tsc_init (); +} + +#else + +void +grub_machine_init (void) +{ + modend = grub_modules_get_end (); + + grub_vga_text_init (); + + grub_machine_mmap_init (); + grub_machine_mmap_iterate (heap_init, NULL); + + grub_tsc_init (); +} + +#endif + +void +grub_machine_get_bootlocation (char **device __attribute__ ((unused)), + char **path __attribute__ ((unused))) +{ +} + +void +grub_machine_fini (int flags) +{ + if (flags & GRUB_LOADER_FLAG_NORETURN) + grub_vga_text_fini (); + grub_stop_floppy (); +} diff --git a/grub-core/kern/i386/coreboot/mmap.c b/grub-core/kern/i386/coreboot/mmap.c new file mode 100644 index 000000000..4d29f6b7d --- /dev/null +++ b/grub-core/kern/i386/coreboot/mmap.c @@ -0,0 +1,98 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2007,2008,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* Context for grub_machine_mmap_iterate. */ +struct grub_machine_mmap_iterate_ctx +{ + grub_memory_hook_t hook; + void *hook_data; +}; + +#define GRUB_MACHINE_MEMORY_BADRAM 5 + +/* Helper for grub_machine_mmap_iterate. */ +static int +iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, void *data) +{ + struct grub_machine_mmap_iterate_ctx *ctx = data; + mem_region_t mem_region; + + if (table_item->tag != GRUB_LINUXBIOS_MEMBER_MEMORY) + return 0; + + mem_region = + (mem_region_t) ((long) table_item + + sizeof (struct grub_linuxbios_table_item)); + for (; (long) mem_region < (long) table_item + (long) table_item->size; + mem_region++) + { + grub_uint64_t start = mem_region->addr; + grub_uint64_t end = mem_region->addr + mem_region->size; + /* Mark region 0xa0000 - 0x100000 as reserved. */ + if (start < 0x100000 && end >= 0xa0000 + && mem_region->type == GRUB_MACHINE_MEMORY_AVAILABLE) + { + if (start < 0xa0000 + && ctx->hook (start, 0xa0000 - start, + /* Multiboot mmaps match with the coreboot mmap + definition. Therefore, we can just pass type + through. */ + mem_region->type, + ctx->hook_data)) + return 1; + if (start < 0xa0000) + start = 0xa0000; + if (start >= end) + continue; + + if (ctx->hook (start, (end > 0x100000 ? 0x100000 : end) - start, + GRUB_MEMORY_RESERVED, + ctx->hook_data)) + return 1; + start = 0x100000; + + if (end <= start) + continue; + } + if (ctx->hook (start, end - start, + /* Multiboot mmaps match with the coreboot mmap + definition. Therefore, we can just pass type + through. */ + mem_region->type, + ctx->hook_data)) + return 1; + } + + return 0; +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + struct grub_machine_mmap_iterate_ctx ctx = { hook, hook_data }; + + grub_linuxbios_table_iterate (iterate_linuxbios_table, &ctx); + + return 0; +} diff --git a/grub-core/kern/i386/coreboot/startup.S b/grub-core/kern/i386/coreboot/startup.S new file mode 100644 index 000000000..c8486548d --- /dev/null +++ b/grub-core/kern/i386/coreboot/startup.S @@ -0,0 +1,63 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +/* + * Note: GRUB is compiled with the options -mrtd and -mregparm=3. + * So the first three arguments are passed in %eax, %edx, and %ecx, + * respectively, and if a function has a fixed number of arguments + * and the number if greater than three, the function must return + * with "ret $N" where N is ((the number of arguments) - 3) * 4. + */ + + .file "startup.S" + .text + .globl start, _start +start: +_start: +#ifdef GRUB_MACHINE_MULTIBOOT + cmpl $MULTIBOOT_BOOTLOADER_MAGIC, %eax + jne 0f + movl %ebx, EXT_C(startup_multiboot_info) +0: +#endif + + /* initialize the stack */ + movl $GRUB_MEMORY_MACHINE_PROT_STACK, %esp + + /* jump to the main body of C code */ + jmp EXT_C(grub_main) + +/* + * Support for booting GRUB from a Multiboot boot loader (e.g. GRUB itself). + */ + .p2align 2 /* force 4-byte alignment */ +multiboot_header: + /* magic */ + .long 0x1BADB002 + /* flags */ + .long MULTIBOOT_MEMORY_INFO + /* checksum */ + .long -0x1BADB002 - MULTIBOOT_MEMORY_INFO + diff --git a/grub-core/kern/i386/dl.c b/grub-core/kern/i386/dl.c new file mode 100644 index 000000000..1346da5cc --- /dev/null +++ b/grub-core/kern/i386/dl.c @@ -0,0 +1,81 @@ +/* dl-386.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* Check if EHDR is a valid ELF header. */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS32 + || e->e_ident[EI_DATA] != ELFDATA2LSB + || e->e_machine != EM_386) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + Elf_Rel *rel, *max; + + for (rel = (Elf_Rel *) ((char *) ehdr + s->sh_offset), + max = (Elf_Rel *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf_Rel *) ((char *) rel + s->sh_entsize)) + { + Elf_Word *addr; + Elf_Sym *sym; + + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = (Elf_Word *) ((char *) seg->addr + rel->r_offset); + sym = (Elf_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + + switch (ELF_R_TYPE (rel->r_info)) + { + case R_386_32: + *addr += sym->st_value; + break; + + case R_386_PC32: + *addr += (sym->st_value - (grub_addr_t) addr); + break; + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/i386/efi/init.c b/grub-core/kern/i386/efi/init.c new file mode 100644 index 000000000..a28316cc6 --- /dev/null +++ b/grub-core/kern/i386/efi/init.c @@ -0,0 +1,43 @@ +/* init.c - initialize an x86-based EFI system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void +grub_machine_init (void) +{ + grub_efi_init (); + grub_tsc_init (); +} + +void +grub_machine_fini (int flags) +{ + if (flags & GRUB_LOADER_FLAG_NORETURN) + grub_efi_fini (); +} diff --git a/grub-core/kern/i386/efi/startup.S b/grub-core/kern/i386/efi/startup.S new file mode 100644 index 000000000..fc5ea3dac --- /dev/null +++ b/grub-core/kern/i386/efi/startup.S @@ -0,0 +1,36 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "startup.S" + .text + .globl start, _start +start: +_start: + /* + * EFI_SYSTEM_TABLE * and EFI_HANDLE are passed on the stack. + */ + movl 4(%esp), %eax + movl %eax, EXT_C(grub_efi_image_handle) + movl 8(%esp), %eax + movl %eax, EXT_C(grub_efi_system_table) + call EXT_C(grub_main) + ret diff --git a/grub-core/kern/i386/efi/tsc.c b/grub-core/kern/i386/efi/tsc.c new file mode 100644 index 000000000..4b93ba8e1 --- /dev/null +++ b/grub-core/kern/i386/efi/tsc.c @@ -0,0 +1,40 @@ +/* kern/i386/tsc.c - x86 TSC time source implementation + * Requires Pentium or better x86 CPU that supports the RDTSC instruction. + * This module uses the PIT to calibrate the TSC to + * real time. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +int +grub_tsc_calibrate_from_efi (void) +{ + grub_uint64_t start_tsc, end_tsc; + /* Use EFI Time Service to calibrate TSC */ + start_tsc = grub_get_tsc (); + efi_call_1 (grub_efi_system_table->boot_services->stall, 1000); + end_tsc = grub_get_tsc (); + grub_tsc_rate = grub_divmod64 ((1ULL << 32), end_tsc - start_tsc, 0); + return 1; +} diff --git a/grub-core/kern/i386/ieee1275/startup.S b/grub-core/kern/i386/ieee1275/startup.S new file mode 100644 index 000000000..245583bdb --- /dev/null +++ b/grub-core/kern/i386/ieee1275/startup.S @@ -0,0 +1,41 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* + * Note: GRUB is compiled with the options -mrtd and -mregparm=3. + * So the first three arguments are passed in %eax, %edx, and %ecx, + * respectively, and if a function has a fixed number of arguments + * and the number if greater than three, the function must return + * with "ret $N" where N is ((the number of arguments) - 3) * 4. + */ + + .file "startup.S" + .text + .globl start, _start + +start: +_start: + movl %eax, EXT_C(grub_ieee1275_entry_fn) + jmp EXT_C(grub_main) + diff --git a/grub-core/kern/i386/int.S b/grub-core/kern/i386/int.S new file mode 100644 index 000000000..862a54202 --- /dev/null +++ b/grub-core/kern/i386/int.S @@ -0,0 +1,134 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +FUNCTION(grub_bios_interrupt) + pushf + cli + popf + pushl %ebp + pushl %ecx + pushl %eax + pushl %ebx + pushl %esi + pushl %edi + pushl %edx + + movb %al, intno + movl (%edx), %eax + movl %eax, LOCAL(bios_register_eax) + movw 4(%edx), %ax + movw %ax, LOCAL(bios_register_es) + movw 6(%edx), %ax + movw %ax, LOCAL(bios_register_ds) + movw 8(%edx), %ax + movw %ax, LOCAL(bios_register_flags) + + movl 12(%edx), %ebx + movl 16(%edx), %ecx + movl 20(%edx), %edi + movl 24(%edx), %esi + movl 28(%edx), %edx + + /* + Via C3 CPUs have cache coherence problems, so we need to call + wbinvd at these 2 points. As wbinvd slows down boot, don't do + it on non-VIA. 9090 is nop nop. */ +VARIABLE(grub_bios_via_workaround1) + .byte 0x90, 0x90 + + PROT_TO_REAL + .code16 + pushf + cli + + mov %ds, %ax + push %ax + + /* movw imm16, %ax*/ + .byte 0xb8 +LOCAL(bios_register_es): + .short 0 + movw %ax, %es + /* movw imm16, %ax*/ + .byte 0xb8 +LOCAL(bios_register_ds): + .short 0 + movw %ax, %ds + + /* movw imm16, %ax*/ + .byte 0xb8 +LOCAL(bios_register_flags): + .short 0 + push %ax + popf + + /* movl imm32, %eax*/ + .byte 0x66, 0xb8 +LOCAL(bios_register_eax): + .long 0 + + /* int imm8. */ + .byte 0xcd +intno: + .byte 0 + + movl %eax, %cs:LOCAL(bios_register_eax) + movw %ds, %ax + movw %ax, %cs:LOCAL(bios_register_ds) + pop %ax + mov %ax, %ds + pushf + pop %ax + movw %ax, LOCAL(bios_register_flags) + mov %es, %ax + movw %ax, LOCAL(bios_register_es) + + popf + +VARIABLE(grub_bios_via_workaround2) + .byte 0x90, 0x90 + + REAL_TO_PROT + .code32 + + popl %eax + + movl %ebx, 12(%eax) + movl %ecx, 16(%eax) + movl %edi, 20(%eax) + movl %esi, 24(%eax) + movl %edx, 28(%eax) + + movl %eax, %edx + + movl LOCAL(bios_register_eax), %eax + movl %eax, (%edx) + movw LOCAL(bios_register_es), %ax + movw %ax, 4(%edx) + movw LOCAL(bios_register_ds), %ax + movw %ax, 6(%edx) + movw LOCAL(bios_register_flags), %ax + movw %ax, 8(%edx) + + popl %edi + popl %esi + popl %ebx + popl %eax + popl %ecx + popl %ebp + ret diff --git a/grub-core/kern/i386/multiboot_mmap.c b/grub-core/kern/i386/multiboot_mmap.c new file mode 100644 index 000000000..e8f4f34b9 --- /dev/null +++ b/grub-core/kern/i386/multiboot_mmap.c @@ -0,0 +1,73 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* A pointer to the MBI in its initial location. */ +struct multiboot_info *startup_multiboot_info; + +/* The MBI has to be copied to our BSS so that it won't be + overwritten. This is its final location. */ +static struct multiboot_info kern_multiboot_info; + +/* Unfortunately we can't use heap at this point. But 32 looks like a sane + limit (used by memtest86). */ +static grub_uint8_t mmap_entries[sizeof (struct multiboot_mmap_entry) * 32]; + +void +grub_machine_mmap_init (void) +{ + if (! startup_multiboot_info) + grub_fatal ("Unable to find Multiboot Information (is CONFIG_MULTIBOOT disabled in coreboot?)"); + + /* Move MBI to a safe place. */ + grub_memmove (&kern_multiboot_info, startup_multiboot_info, sizeof (struct multiboot_info)); + + if ((kern_multiboot_info.flags & MULTIBOOT_INFO_MEM_MAP) == 0) + grub_fatal ("Missing Multiboot memory information"); + + /* Move the memory map to a safe place. */ + if (kern_multiboot_info.mmap_length > sizeof (mmap_entries)) + { + grub_printf ("WARNING: Memory map size exceeds limit (0x%x > 0x%x); it will be truncated\n", + kern_multiboot_info.mmap_length, sizeof (mmap_entries)); + kern_multiboot_info.mmap_length = sizeof (mmap_entries); + } + grub_memmove (mmap_entries, (void *) kern_multiboot_info.mmap_addr, kern_multiboot_info.mmap_length); + kern_multiboot_info.mmap_addr = (grub_uint32_t) mmap_entries; +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + struct multiboot_mmap_entry *entry = (void *) kern_multiboot_info.mmap_addr; + + while ((unsigned long) entry < kern_multiboot_info.mmap_addr + kern_multiboot_info.mmap_length) + { + if (hook (entry->addr, entry->len, entry->type, hook_data)) + break; + + entry = (void *) ((grub_addr_t) entry + entry->size + sizeof (entry->size)); + } + + return 0; +} diff --git a/grub-core/kern/i386/pc/acpi.c b/grub-core/kern/i386/pc/acpi.c new file mode 100644 index 000000000..297f5d05f --- /dev/null +++ b/grub-core/kern/i386/pc/acpi.c @@ -0,0 +1,83 @@ +/* acpi.c - get acpi tables. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +struct grub_acpi_rsdp_v10 * +grub_machine_acpi_get_rsdpv1 (void) +{ + int ebda_len; + grub_uint8_t *ebda, *ptr; + + grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n"); + ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4); + ebda_len = * (grub_uint16_t *) ebda; + if (! ebda_len) /* FIXME do we really need this check? */ + goto scan_bios; + for (ptr = ebda; ptr < ebda + 0x400; ptr += 16) + if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0 + && grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0 + && ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0) + return (struct grub_acpi_rsdp_v10 *) ptr; + +scan_bios: + grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n"); + for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000; + ptr += 16) + if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0 + && grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0 + && ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0) + return (struct grub_acpi_rsdp_v10 *) ptr; + return 0; +} + +struct grub_acpi_rsdp_v20 * +grub_machine_acpi_get_rsdpv2 (void) +{ + int ebda_len; + grub_uint8_t *ebda, *ptr; + + grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n"); + ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4); + ebda_len = * (grub_uint16_t *) ebda; + if (! ebda_len) /* FIXME do we really need this check? */ + goto scan_bios; + for (ptr = ebda; ptr < ebda + 0x400; ptr += 16) + if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0 + && grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0 + && ((struct grub_acpi_rsdp_v10 *) ptr)->revision != 0 + && ((struct grub_acpi_rsdp_v20 *) ptr)->length < 1024 + && grub_byte_checksum (ptr, ((struct grub_acpi_rsdp_v20 *) ptr)->length) + == 0) + return (struct grub_acpi_rsdp_v20 *) ptr; + +scan_bios: + grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n"); + for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000; + ptr += 16) + if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0 + && grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0 + && ((struct grub_acpi_rsdp_v10 *) ptr)->revision != 0 + && ((struct grub_acpi_rsdp_v20 *) ptr)->length < 1024 + && grub_byte_checksum (ptr, ((struct grub_acpi_rsdp_v20 *) ptr)->length) + == 0) + return (struct grub_acpi_rsdp_v20 *) ptr; + return 0; +} diff --git a/grub-core/kern/i386/pc/init.c b/grub-core/kern/i386/pc/init.c new file mode 100644 index 000000000..27bc68b8a --- /dev/null +++ b/grub-core/kern/i386/pc/init.c @@ -0,0 +1,271 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct mem_region +{ + grub_addr_t addr; + grub_size_t size; +}; + +#define MAX_REGIONS 32 + +static struct mem_region mem_regions[MAX_REGIONS]; +static int num_regions; + +void (*grub_pc_net_config) (char **device, char **path); + +/* + * return the real time in ticks, of which there are about + * 18-20 per second + */ +grub_uint64_t +grub_rtc_get_time_ms (void) +{ + struct grub_bios_int_registers regs; + + regs.eax = 0; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x1a, ®s); + + return ((regs.ecx << 16) | (regs.edx & 0xffff)) * 55ULL; +} + +void +grub_machine_get_bootlocation (char **device, char **path) +{ + char *ptr; + grub_uint8_t boot_drive, dos_part, bsd_part; + + boot_drive = (grub_boot_device >> 24); + dos_part = (grub_boot_device >> 16); + bsd_part = (grub_boot_device >> 8); + + /* No hardcoded root partition - make it from the boot drive and the + partition number encoded at the install time. */ + if (boot_drive == GRUB_BOOT_MACHINE_PXE_DL) + { + if (grub_pc_net_config) + grub_pc_net_config (device, path); + return; + } + + /* XXX: This should be enough. */ +#define DEV_SIZE 100 + *device = grub_malloc (DEV_SIZE); + ptr = *device; + grub_snprintf (*device, DEV_SIZE, + "%cd%u", (boot_drive & 0x80) ? 'h' : 'f', + boot_drive & 0x7f); + ptr += grub_strlen (ptr); + + if (dos_part != 0xff) + grub_snprintf (ptr, DEV_SIZE - (ptr - *device), + ",%u", dos_part + 1); + ptr += grub_strlen (ptr); + + if (bsd_part != 0xff) + grub_snprintf (ptr, DEV_SIZE - (ptr - *device), ",%u", + bsd_part + 1); + ptr += grub_strlen (ptr); + *ptr = 0; +} + +/* Add a memory region. */ +static void +add_mem_region (grub_addr_t addr, grub_size_t size) +{ + if (num_regions == MAX_REGIONS) + /* Ignore. */ + return; + + mem_regions[num_regions].addr = addr; + mem_regions[num_regions].size = size; + num_regions++; +} + +/* Compact memory regions. */ +static void +compact_mem_regions (void) +{ + int i, j; + + /* Sort them. */ + for (i = 0; i < num_regions - 1; i++) + for (j = i + 1; j < num_regions; j++) + if (mem_regions[i].addr > mem_regions[j].addr) + { + struct mem_region tmp = mem_regions[i]; + mem_regions[i] = mem_regions[j]; + mem_regions[j] = tmp; + } + + /* Merge overlaps. */ + for (i = 0; i < num_regions - 1; i++) + if (mem_regions[i].addr + mem_regions[i].size >= mem_regions[i + 1].addr) + { + j = i + 1; + + if (mem_regions[i].addr + mem_regions[i].size + < mem_regions[j].addr + mem_regions[j].size) + mem_regions[i].size = (mem_regions[j].addr + mem_regions[j].size + - mem_regions[i].addr); + + grub_memmove (mem_regions + j, mem_regions + j + 1, + (num_regions - j - 1) * sizeof (struct mem_region)); + i--; + num_regions--; + } +} + +grub_addr_t grub_modbase; +extern grub_uint8_t _start[], _edata[]; + +/* Helper for grub_machine_init. */ +static int +mmap_iterate_hook (grub_uint64_t addr, grub_uint64_t size, + grub_memory_type_t type, + void *data __attribute__ ((unused))) +{ + /* Avoid the lower memory. */ + if (addr < GRUB_MEMORY_MACHINE_UPPER_START) + { + if (size <= GRUB_MEMORY_MACHINE_UPPER_START - addr) + return 0; + + size -= GRUB_MEMORY_MACHINE_UPPER_START - addr; + addr = GRUB_MEMORY_MACHINE_UPPER_START; + } + + /* Ignore >4GB. */ + if (addr <= 0xFFFFFFFF && type == GRUB_MEMORY_AVAILABLE) + { + grub_size_t len; + + len = (grub_size_t) ((addr + size > 0xFFFFFFFF) + ? 0xFFFFFFFF - addr + : size); + add_mem_region (addr, len); + } + + return 0; +} + +extern grub_uint16_t grub_bios_via_workaround1, grub_bios_via_workaround2; + +/* Via needs additional wbinvd. */ +static void +grub_via_workaround_init (void) +{ + grub_uint32_t manufacturer[3], max_cpuid; + if (! grub_cpu_is_cpuid_supported ()) + return; + + grub_cpuid (0, max_cpuid, manufacturer[0], manufacturer[2], manufacturer[1]); + + if (grub_memcmp (manufacturer, "CentaurHauls", 12) != 0) + return; + + grub_bios_via_workaround1 = 0x090f; + grub_bios_via_workaround2 = 0x090f; + asm volatile ("wbinvd"); +} + +void +grub_machine_init (void) +{ + int i; +#if 0 + int grub_lower_mem; +#endif + grub_addr_t modend; + + /* This has to happen before any BIOS calls. */ + grub_via_workaround_init (); + + grub_modbase = GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR + (_edata - _start); + + /* Initialize the console as early as possible. */ + grub_console_init (); + + /* This sanity check is useless since top of GRUB_MEMORY_MACHINE_RESERVED_END + is used for stack and if it's unavailable we wouldn't have gotten so far. + */ +#if 0 + grub_lower_mem = grub_get_conv_memsize () << 10; + + /* Sanity check. */ + if (grub_lower_mem < GRUB_MEMORY_MACHINE_RESERVED_END) + grub_fatal ("too small memory"); +#endif + +/* FIXME: This prevents loader/i386/linux.c from using low memory. When our + heap implements support for requesting a chunk in low memory, this should + no longer be a problem. */ +#if 0 + /* Add the lower memory into free memory. */ + if (grub_lower_mem >= GRUB_MEMORY_MACHINE_RESERVED_END) + add_mem_region (GRUB_MEMORY_MACHINE_RESERVED_END, + grub_lower_mem - GRUB_MEMORY_MACHINE_RESERVED_END); +#endif + + grub_machine_mmap_iterate (mmap_iterate_hook, NULL); + + compact_mem_regions (); + + modend = grub_modules_get_end (); + for (i = 0; i < num_regions; i++) + { + grub_addr_t beg = mem_regions[i].addr; + grub_addr_t fin = mem_regions[i].addr + mem_regions[i].size; + if (modend && beg < modend) + beg = modend; + if (beg >= fin) + continue; + grub_mm_init_region ((void *) beg, fin - beg); + } + + grub_tsc_init (); +} + +void +grub_machine_fini (int flags) +{ + if (flags & GRUB_LOADER_FLAG_NORETURN) + grub_console_fini (); + grub_stop_floppy (); +} diff --git a/grub-core/kern/i386/pc/mmap.c b/grub-core/kern/i386/pc/mmap.c new file mode 100644 index 000000000..c0c3c3585 --- /dev/null +++ b/grub-core/kern/i386/pc/mmap.c @@ -0,0 +1,193 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +struct grub_machine_mmap_entry +{ + grub_uint32_t size; + grub_uint64_t addr; + grub_uint64_t len; +#define GRUB_MACHINE_MEMORY_AVAILABLE 1 +#define GRUB_MACHINE_MEMORY_RESERVED 2 +#define GRUB_MACHINE_MEMORY_ACPI 3 +#define GRUB_MACHINE_MEMORY_NVS 4 +#define GRUB_MACHINE_MEMORY_BADRAM 5 + grub_uint32_t type; +} GRUB_PACKED; + + +/* + * + * grub_get_conv_memsize(i) : return the conventional memory size in KB. + * BIOS call "INT 12H" to get conventional memory size + * The return value in AX. + */ +static inline grub_uint16_t +grub_get_conv_memsize (void) +{ + struct grub_bios_int_registers regs; + + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x12, ®s); + return regs.eax & 0xffff; +} + +/* + * grub_get_ext_memsize() : return the extended memory size in KB. + * BIOS call "INT 15H, AH=88H" to get extended memory size + * The return value in AX. + * + */ +static inline grub_uint16_t +grub_get_ext_memsize (void) +{ + struct grub_bios_int_registers regs; + + regs.eax = 0x8800; + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + grub_bios_interrupt (0x15, ®s); + return regs.eax & 0xffff; +} + +/* Get a packed EISA memory map. Lower 16 bits are between 1MB and 16MB + in 1KB parts, and upper 16 bits are above 16MB in 64KB parts. If error, return zero. + BIOS call "INT 15H, AH=E801H" to get EISA memory map, + AX = memory between 1M and 16M in 1K parts. + BX = memory above 16M in 64K parts. +*/ + +static inline grub_uint32_t +grub_get_eisa_mmap (void) +{ + struct grub_bios_int_registers regs; + + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + regs.eax = 0xe801; + grub_bios_interrupt (0x15, ®s); + + if ((regs.eax & 0xff00) == 0x8600) + return 0; + + return (regs.eax & 0xffff) | (regs.ebx << 16); +} + +/* + * + * grub_get_mmap_entry(addr, cont) : address and old continuation value (zero to + * start), for the Query System Address Map BIOS call. + * + * Sets the first 4-byte int value of "addr" to the size returned by + * the call. If the call fails, sets it to zero. + * + * Returns: new (non-zero) continuation value, 0 if done. + */ +/* Get a memory map entry. Return next continuation value. Zero means + the end. */ +static grub_uint32_t +grub_get_mmap_entry (struct grub_machine_mmap_entry *entry, + grub_uint32_t cont) +{ + struct grub_bios_int_registers regs; + + regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; + + /* place address (+4) in ES:DI */ + regs.es = ((grub_addr_t) &entry->addr) >> 4; + regs.edi = ((grub_addr_t) &entry->addr) & 0xf; + + /* set continuation value */ + regs.ebx = cont; + + /* set default maximum buffer size */ + regs.ecx = sizeof (*entry) - sizeof (entry->size); + + /* set EDX to 'SMAP' */ + regs.edx = 0x534d4150; + + regs.eax = 0xe820; + grub_bios_interrupt (0x15, ®s); + + /* write length of buffer (zero if error) into ADDR */ + if ((regs.flags & GRUB_CPU_INT_FLAGS_CARRY) || regs.eax != 0x534d4150 + || regs.ecx < 0x14 || regs.ecx > 0x400) + entry->size = 0; + else + entry->size = regs.ecx; + + /* return the continuation value */ + return regs.ebx; +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + grub_uint32_t cont = 0; + struct grub_machine_mmap_entry *entry + = (struct grub_machine_mmap_entry *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR; + int e820_works = 0; + + while (1) + { + grub_memset (entry, 0, sizeof (*entry)); + + cont = grub_get_mmap_entry (entry, cont); + + if (!entry->size) + break; + + if (entry->len) + e820_works = 1; + if (entry->len + && hook (entry->addr, entry->len, + /* GRUB mmaps have been defined to match with + the E820 definition. + Therefore, we can just pass type through. */ + entry->type, hook_data)) + break; + + if (! cont) + break; + } + + if (!e820_works) + { + grub_uint32_t eisa_mmap = grub_get_eisa_mmap (); + + if (hook (0x0, ((grub_uint32_t) grub_get_conv_memsize ()) << 10, + GRUB_MEMORY_AVAILABLE, hook_data)) + return 0; + + if (eisa_mmap) + { + if (hook (0x100000, (eisa_mmap & 0xFFFF) << 10, + GRUB_MEMORY_AVAILABLE, hook_data) == 0) + hook (0x1000000, eisa_mmap & ~0xFFFF, GRUB_MEMORY_AVAILABLE, + hook_data); + } + else + hook (0x100000, ((grub_uint32_t) grub_get_ext_memsize ()) << 10, + GRUB_MEMORY_AVAILABLE, hook_data); + } + + return 0; +} diff --git a/grub-core/kern/i386/pc/startup.S b/grub-core/kern/i386/pc/startup.S new file mode 100644 index 000000000..b8a9b33b4 --- /dev/null +++ b/grub-core/kern/i386/pc/startup.S @@ -0,0 +1,217 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008,2009,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +/* + * Note: These functions defined in this file may be called from C. + * Be careful of that you must not modify some registers. Quote + * from gcc-2.95.2/gcc/config/i386/i386.h: + + 1 for registers not available across function calls. + These must include the FIXED_REGISTERS and also any + registers that can be used without being saved. + The latter must include the registers where values are returned + and the register where structure-value addresses are passed. + Aside from that, you can include as many other registers as you like. + + ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg +{ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } + */ + +/* + * Note: GRUB is compiled with the options -mrtd and -mregparm=3. + * So the first three arguments are passed in %eax, %edx, and %ecx, + * respectively, and if a function has a fixed number of arguments + * and the number is greater than three, the function must return + * with "ret $N" where N is ((the number of arguments) - 3) * 4. + */ + +#include +#include +#include +#ifdef __APPLE__ +#include +#endif + + .file "startup.S" + + .text + + .globl start, _start, __start +start: +_start: +__start: +#ifdef __APPLE__ +LOCAL(start): +#endif + .code32 + + movl %ecx, (LOCAL(real_to_prot_addr) - _start) (%esi) + movl %edi, (LOCAL(prot_to_real_addr) - _start) (%esi) + movl %eax, (EXT_C(grub_realidt) - _start) (%esi) + + /* copy back the decompressed part (except the modules) */ +#ifdef __APPLE__ + movl $EXT_C(_edata), %ecx + subl $LOCAL(start), %ecx +#else + movl $(_edata - _start), %ecx +#endif + movl $(_start), %edi + rep + movsb + + movl $LOCAL (cont), %esi + jmp *%esi +LOCAL(cont): + +#if 0 + /* copy modules before cleaning out the bss */ + movl EXT_C(grub_total_module_size), %ecx + movl EXT_C(grub_kernel_image_size), %esi + addl %ecx, %esi + addl $_start, %esi + decl %esi + movl $END_SYMBOL, %edi + addl %ecx, %edi + decl %edi + std + rep + movsb +#endif + +#ifdef __APPLE__ + /* clean out the bss */ + movl $EXT_C(_edata), %edi + + /* compute the bss length */ + movl $GRUB_MEMORY_MACHINE_SCRATCH_ADDR, %ecx +#else + /* clean out the bss */ + movl $BSS_START_SYMBOL, %edi + + /* compute the bss length */ + movl $END_SYMBOL, %ecx +#endif + subl %edi, %ecx + + /* clean out */ + xorl %eax, %eax + cld + rep + stosb + + movl %edx, EXT_C(grub_boot_device) + + /* + * Call the start of main body of C code. + */ + call EXT_C(grub_main) + +LOCAL(real_to_prot_addr): + .long 0 +LOCAL(prot_to_real_addr): + .long 0 + + .macro PROT_TO_REAL + movl LOCAL(prot_to_real_addr), %eax + call *%eax + .endm + + .macro REAL_TO_PROT + movl LOCAL(real_to_prot_addr), %eax + calll *%eax + .endm + +/* + * grub_exit() + * + * Exit the system. + */ +FUNCTION(grub_exit) + PROT_TO_REAL + .code16 + /* Tell the BIOS a boot failure. If this does not work, reboot. */ + int $0x18 + /* set 0x472 to 0x0000 for cold boot (0x1234 for warm boot) */ + xorw %ax, %ax + movw $0x0472, %di + movw %ax, (%di) + ljmp $0xf000, $0xfff0 + .code32 + +/* + * int grub_pxe_call (int func, void* data, grub_uint32_t pxe_rm_entry); + */ +FUNCTION(grub_pxe_call) + pushl %ebp + movl %esp, %ebp + pushl %esi + pushl %edi + pushl %ebx + + movl %ecx, %ebx + movl %eax, %ecx + movl %edx, %eax + andl $0xF, %eax + shrl $4, %edx + shll $16, %edx + addl %eax, %edx + + PROT_TO_REAL + .code16 + + pushl %ebx + pushl %edx + pushw %cx + movw %sp, %bx + lcall *%ss:6(%bx) + cld + addw $10, %sp + movw %ax, %cx + + REAL_TO_PROT + .code32 + + movzwl %cx, %eax + + popl %ebx + popl %edi + popl %esi + popl %ebp + ret + +#include "../int.S" + +VARIABLE(grub_realidt) + .long 0 + +#ifdef __APPLE__ + /* Older versions of objconv assume that there is the same number + of text and data sections. Hence this dummy. */ + .section __TEXT, __zz_dummy + .byte 0 + .globl EXT_C(_edata) + .globl EXT_C(grub_boot_device) + .zerofill __DATA, __aa_before_bss, EXT_C(_edata), 1, 0 + .zerofill __DATA, __bss, EXT_C(grub_boot_device), 4, 2 +#else + .bss +VARIABLE(grub_boot_device) + .long 0 +#endif diff --git a/grub-core/kern/i386/qemu/init.c b/grub-core/kern/i386/qemu/init.c new file mode 100644 index 000000000..271b6fbfa --- /dev/null +++ b/grub-core/kern/i386/qemu/init.c @@ -0,0 +1,276 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern grub_uint8_t _start[]; +extern grub_uint8_t _end[]; +extern grub_uint8_t _edata[]; + +void __attribute__ ((noreturn)) +grub_exit (void) +{ + /* We can't use grub_fatal() in this function. This would create an infinite + loop, since grub_fatal() calls grub_abort() which in turn calls grub_exit(). */ + while (1) + grub_cpu_idle (); +} + +grub_addr_t grub_modbase; + +/* Helper for grub_machine_init. */ +static int +heap_init (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type, + void *data __attribute__ ((unused))) +{ + grub_uint64_t begin = addr, end = addr + size; + +#if GRUB_CPU_SIZEOF_VOID_P == 4 + /* Restrict ourselves to 32-bit memory space. */ + if (begin > GRUB_ULONG_MAX) + return 0; + if (end > GRUB_ULONG_MAX) + end = GRUB_ULONG_MAX; +#endif + + if (type != GRUB_MEMORY_AVAILABLE) + return 0; + + /* Avoid the lower memory. */ + if (begin < GRUB_MEMORY_MACHINE_LOWER_SIZE) + begin = GRUB_MEMORY_MACHINE_LOWER_SIZE; + + if (end <= begin) + return 0; + + grub_mm_init_region ((void *) (grub_addr_t) begin, (grub_size_t) (end - begin)); + + return 0; +} + +struct resource +{ + grub_pci_device_t dev; + grub_size_t size; + unsigned type:4; + unsigned bar:3; +}; + +struct iterator_ctx +{ + struct resource *resources; + grub_size_t nresources; +}; + +/* We don't support bridges, so can't have more than 32 devices. */ +#define MAX_DEVICES 32 + +static int +find_resources (grub_pci_device_t dev, + grub_pci_id_t pciid __attribute__ ((unused)), + void *data) +{ + struct iterator_ctx *ctx = data; + int bar; + + if (ctx->nresources >= MAX_DEVICES * 6) + return 1; + + for (bar = 0; bar < 6; bar++) + { + grub_pci_address_t addr; + grub_uint32_t ones, zeros, mask; + struct resource *res; + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0 + + 4 * bar); + grub_pci_write (addr, 0xffffffff); + grub_pci_read (addr); + ones = grub_pci_read (addr); + grub_pci_write (addr, 0); + grub_pci_read (addr); + zeros = grub_pci_read (addr); + if (ones == zeros) + continue; + res = &ctx->resources[ctx->nresources++]; + if ((zeros & GRUB_PCI_ADDR_SPACE_MASK) == GRUB_PCI_ADDR_SPACE_IO) + mask = GRUB_PCI_ADDR_SPACE_MASK; + else + mask = (GRUB_PCI_ADDR_MEM_TYPE_MASK | GRUB_PCI_ADDR_SPACE_MASK | GRUB_PCI_ADDR_MEM_PREFETCH); + + res->type = ones & mask; + res->dev = dev; + res->bar = bar; + res->size = (~((zeros ^ ones)) | mask) + 1; + if ((zeros & (GRUB_PCI_ADDR_MEM_TYPE_MASK | GRUB_PCI_ADDR_SPACE_MASK)) + == (GRUB_PCI_ADDR_SPACE_MEMORY | GRUB_PCI_ADDR_MEM_TYPE_64)) + bar++; + } + return 0; +} + +static int +enable_cards (grub_pci_device_t dev, + grub_pci_id_t pciid __attribute__ ((unused)), + void *data __attribute__ ((unused))) +{ + grub_uint16_t cmd = 0; + grub_pci_address_t addr; + grub_uint32_t class; + int bar; + + for (bar = 0; bar < 6; bar++) + { + grub_uint32_t val; + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0 + + 4 * bar); + val = grub_pci_read (addr); + if (!val) + continue; + if ((val & GRUB_PCI_ADDR_SPACE_MASK) == GRUB_PCI_ADDR_SPACE_IO) + cmd |= GRUB_PCI_COMMAND_IO_ENABLED; + else + cmd |= GRUB_PCI_COMMAND_MEM_ENABLED; + } + + class = (grub_pci_read (addr) >> 16) & 0xffff; + + if (class == GRUB_PCI_CLASS_SUBCLASS_VGA) + cmd |= GRUB_PCI_COMMAND_IO_ENABLED + | GRUB_PCI_COMMAND_MEM_ENABLED; + + if (class == GRUB_PCI_CLASS_SUBCLASS_USB) + return 0; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write (addr, cmd); + + return 0; +} + +static void +grub_pci_assign_addresses (void) +{ + struct iterator_ctx ctx; + + { + struct resource resources[MAX_DEVICES * 6]; + int done; + unsigned i; + ctx.nresources = 0; + ctx.resources = resources; + grub_uint32_t memptr = 0xf0000000; + grub_uint16_t ioptr = 0x1000; + + grub_pci_iterate (find_resources, &ctx); + /* FIXME: do we need a better sort here? */ + do + { + done = 0; + for (i = 0; i + 1 < ctx.nresources; i++) + if (resources[i].size < resources[i+1].size) + { + struct resource t; + t = resources[i]; + resources[i] = resources[i+1]; + resources[i+1] = t; + done = 1; + } + } + while (done); + + for (i = 0; i < ctx.nresources; i++) + { + grub_pci_address_t addr; + addr = grub_pci_make_address (resources[i].dev, + GRUB_PCI_REG_ADDRESS_REG0 + + 4 * resources[i].bar); + if ((resources[i].type & GRUB_PCI_ADDR_SPACE_MASK) + == GRUB_PCI_ADDR_SPACE_IO) + { + grub_pci_write (addr, ioptr | resources[i].type); + ioptr += resources[i].size; + } + else + { + grub_pci_write (addr, memptr | resources[i].type); + memptr += resources[i].size; + if ((resources[i].type & (GRUB_PCI_ADDR_MEM_TYPE_MASK + | GRUB_PCI_ADDR_SPACE_MASK)) + == (GRUB_PCI_ADDR_SPACE_MEMORY | GRUB_PCI_ADDR_MEM_TYPE_64)) + { + addr = grub_pci_make_address (resources[i].dev, + GRUB_PCI_REG_ADDRESS_REG0 + + 4 * resources[i].bar + 4); + grub_pci_write (addr, 0); + } + } + } + grub_pci_iterate (enable_cards, NULL); + } +} + +void +grub_machine_init (void) +{ + grub_modbase = grub_core_entry_addr + (_edata - _start); + + grub_pci_assign_addresses (); + + grub_qemu_init_cirrus (); + + grub_vga_text_init (); + + grub_machine_mmap_init (); + grub_machine_mmap_iterate (heap_init, NULL); + + + grub_tsc_init (); +} + +void +grub_machine_get_bootlocation (char **device __attribute__ ((unused)), + char **path __attribute__ ((unused))) +{ +} + +void +grub_machine_fini (int flags) +{ + if (flags & GRUB_LOADER_FLAG_NORETURN) + grub_vga_text_fini (); + grub_stop_floppy (); +} diff --git a/grub-core/kern/i386/qemu/mmap.c b/grub-core/kern/i386/qemu/mmap.c new file mode 100644 index 000000000..f449637ef --- /dev/null +++ b/grub-core/kern/i386/qemu/mmap.c @@ -0,0 +1,107 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define QEMU_CMOS_MEMSIZE_HIGH 0x35 +#define QEMU_CMOS_MEMSIZE_LOW 0x34 + +#define QEMU_CMOS_MEMSIZE2_HIGH 0x31 +#define QEMU_CMOS_MEMSIZE2_LOW 0x30 + +#define min(a,b) ((a) > (b) ? (b) : (a)) + +extern char _start[]; +extern char _end[]; + +static grub_uint64_t mem_size, above_4g; + +void +grub_machine_mmap_init (void) +{ + grub_uint8_t high, low, b, c, d; + grub_cmos_read (QEMU_CMOS_MEMSIZE_HIGH, &high); + grub_cmos_read (QEMU_CMOS_MEMSIZE_LOW, &low); + mem_size = ((grub_uint64_t) high) << 24 + | ((grub_uint64_t) low) << 16; + if (mem_size > 0) + { + /* Don't ask... */ + mem_size += (16 * 1024 * 1024); + } + else + { + grub_cmos_read (QEMU_CMOS_MEMSIZE2_HIGH, &high); + grub_cmos_read (QEMU_CMOS_MEMSIZE2_LOW, &low); + mem_size + = ((((grub_uint64_t) high) << 18) | (((grub_uint64_t) low) << 10)) + + 1024 * 1024; + } + + grub_cmos_read (0x5b, &b); + grub_cmos_read (0x5c, &c); + grub_cmos_read (0x5d, &d); + above_4g = (((grub_uint64_t) b) << 16) + | (((grub_uint64_t) c) << 24) + | (((grub_uint64_t) d) << 32); +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + if (hook (0x0, + (grub_addr_t) _start, + GRUB_MEMORY_AVAILABLE, hook_data)) + return 1; + + if (hook ((grub_addr_t) _end, + 0xa0000 - (grub_addr_t) _end, + GRUB_MEMORY_AVAILABLE, hook_data)) + return 1; + + if (hook (GRUB_MEMORY_MACHINE_UPPER, + 0x100000 - GRUB_MEMORY_MACHINE_UPPER, + GRUB_MEMORY_RESERVED, hook_data)) + return 1; + + /* Everything else is free. */ + if (hook (0x100000, + min (mem_size, (grub_uint32_t) -GRUB_BOOT_MACHINE_SIZE) - 0x100000, + GRUB_MEMORY_AVAILABLE, hook_data)) + return 1; + + /* Protect boot.img, which contains the gdt. It is mapped at the top of memory + (it is also mapped below 0x100000, but we already reserved that area). */ + if (hook ((grub_uint32_t) -GRUB_BOOT_MACHINE_SIZE, + GRUB_BOOT_MACHINE_SIZE, + GRUB_MEMORY_RESERVED, hook_data)) + return 1; + + if (above_4g != 0 && hook (0x100000000ULL, above_4g, + GRUB_MEMORY_AVAILABLE, hook_data)) + return 1; + + return 0; +} diff --git a/grub-core/kern/i386/qemu/startup.S b/grub-core/kern/i386/qemu/startup.S new file mode 100644 index 000000000..0d89858d9 --- /dev/null +++ b/grub-core/kern/i386/qemu/startup.S @@ -0,0 +1,75 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#include +#include + + .text + .code32 + .globl _start +_start: + jmp codestart + + .org GRUB_KERNEL_I386_QEMU_CORE_ENTRY_ADDR +VARIABLE(grub_core_entry_addr) + .long 0 + +codestart: + /* Relocate to low memory. First we figure out our location. + We will derive the rom start address from it. */ + call 1f +1: popl %esi + + /* Rom size is a multiple of 64 kiB. With this we get the + value of `grub_core_entry_addr' in %esi. */ + xorw %si, %si + + movl $(_edata - _start), %ecx + movl $_start, %edi + cld + rep + movsb + ljmp $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $1f +1: + + /* clean out the bss */ + movl $BSS_START_SYMBOL, %edi + + /* compute the bss length */ + movl $END_SYMBOL, %ecx + subl %edi, %ecx + + /* clean out */ + xorl %eax, %eax + cld + rep + stosb + + /* + * Call the start of main body of C code. + */ + call EXT_C(grub_main) + + /* This should never happen. */ + cli +1: + hlt + jmp 1b diff --git a/grub-core/kern/i386/realmode.S b/grub-core/kern/i386/realmode.S new file mode 100644 index 000000000..998fdc756 --- /dev/null +++ b/grub-core/kern/i386/realmode.S @@ -0,0 +1,281 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +/* + * Note: These functions defined in this file may be called from C. + * Be careful of that you must not modify some registers. Quote + * from gcc-2.95.2/gcc/config/i386/i386.h: + + 1 for registers not available across function calls. + These must include the FIXED_REGISTERS and also any + registers that can be used without being saved. + The latter must include the registers where values are returned + and the register where structure-value addresses are passed. + Aside from that, you can include as many other registers as you like. + + ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg +{ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } + */ + +/* + * Note: GRUB is compiled with the options -mrtd and -mregparm=3. + * So the first three arguments are passed in %eax, %edx, and %ecx, + * respectively, and if a function has a fixed number of arguments + * and the number if greater than three, the function must return + * with "ret $N" where N is ((the number of arguments) - 3) * 4. + */ + +/* + * This is the area for all of the special variables. + */ + +protstack: + .long GRUB_MEMORY_MACHINE_PROT_STACK + + .macro PROT_TO_REAL + call prot_to_real + .endm + + .macro REAL_TO_PROT + calll real_to_prot + .endm + +/* + * This is the Global Descriptor Table + * + * An entry, a "Segment Descriptor", looks like this: + * + * 31 24 19 16 7 0 + * ------------------------------------------------------------ + * | | |B| |A| | | |1|0|E|W|A| | + * | BASE 31..24 |G|/|L|V| LIMIT |P|DPL| TYPE | BASE 23:16 | 4 + * | | |D| |L| 19..16| | |1|1|C|R|A| | + * ------------------------------------------------------------ + * | | | + * | BASE 15..0 | LIMIT 15..0 | 0 + * | | | + * ------------------------------------------------------------ + * + * Note the ordering of the data items is reversed from the above + * description. + */ + + .p2align 5 /* force 4-byte alignment */ +gdt: + .word 0, 0 + .byte 0, 0, 0, 0 + + /* -- code segment -- + * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present + * type = 32bit code execute/read, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x9A, 0xCF, 0 + + /* -- data segment -- + * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present + * type = 32 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0xCF, 0 + + /* -- 16 bit real mode CS -- + * base = 0x00000000, limit 0x0FFFF (1 B Granularity), present + * type = 16 bit code execute/read only/conforming, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x9E, 0, 0 + + /* -- 16 bit real mode DS -- + * base = 0x00000000, limit 0x0FFFF (1 B Granularity), present + * type = 16 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0, 0 + + + .p2align 5 +/* this is the GDT descriptor */ +gdtdesc: + .word 0x27 /* limit */ + .long gdt /* addr */ +LOCAL(realidt): + .word 0x400 + .long 0 +protidt: + .word 0 + .long 0 + +/* + * These next two routines, "real_to_prot" and "prot_to_real" are structured + * in a very specific way. Be very careful when changing them. + * + * NOTE: Use of either one messes up %eax and %ebp. + */ + +real_to_prot: + .code16 + cli + + /* load the GDT register */ + xorw %ax, %ax + movw %ax, %ds +#ifdef GRUB_MACHINE_QEMU + /* + qemu is special: gdtdesc is in ROM. + %cs = 0xf000 + _start + GRUB_BOOT_MACHINE_SIZE = 0x100000 + So + _start + GRUB_BOOT_MACHINE_SIZE - 0x10000 points to the same point + as %cs. + gdtdesc - (_start + GRUB_BOOT_MACHINE_SIZE - 0x10000) + = gdtdesc - _start - GRUB_BOOT_MACHINE_SIZE + 0x10000 + but the later can be computed by assembly. + */ + lgdtl %cs:(gdtdesc - _start - GRUB_BOOT_MACHINE_SIZE + 0x10000) +#else + lgdtl gdtdesc +#endif + + /* turn on protected mode */ + movl %cr0, %eax + orl $GRUB_MEMORY_CPU_CR0_PE_ON, %eax + movl %eax, %cr0 + + /* jump to relocation, flush prefetch queue, and reload %cs */ + ljmpl $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $protcseg + + .code32 +protcseg: + /* reload other segment registers */ + movw $GRUB_MEMORY_MACHINE_PROT_MODE_DSEG, %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %fs + movw %ax, %gs + movw %ax, %ss + + /* put the return address in a known safe location */ + movl (%esp), %eax + movl %eax, GRUB_MEMORY_MACHINE_REAL_STACK + + /* get protected mode stack */ + movl protstack, %eax + movl %eax, %esp + movl %eax, %ebp + + /* get return address onto the right stack */ + movl GRUB_MEMORY_MACHINE_REAL_STACK, %eax + movl %eax, (%esp) + + /* zero %eax */ + xorl %eax, %eax + + sidt LOCAL(realidt) + lidt protidt + + /* return on the old (or initialized) stack! */ + ret + /* prot_to_real assumes that this code is under 64K which is not + true for qemu. */ +#ifndef GRUB_MACHINE_QEMU +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2005,2006,2007,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +prot_to_real: + /* just in case, set GDT */ + lgdt gdtdesc + + sidt protidt + lidt LOCAL(realidt) + + /* save the protected mode stack */ + movl %esp, %eax + movl %eax, protstack + + /* get the return address */ + movl (%esp), %eax + movl %eax, GRUB_MEMORY_MACHINE_REAL_STACK + + /* set up new stack */ + movl $GRUB_MEMORY_MACHINE_REAL_STACK, %eax + movl %eax, %esp + movl %eax, %ebp + + /* set up segment limits */ + movw $GRUB_MEMORY_MACHINE_PSEUDO_REAL_DSEG, %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %fs + movw %ax, %gs + movw %ax, %ss + + /* this might be an extra step */ + /* jump to a 16 bit segment */ + ljmp $GRUB_MEMORY_MACHINE_PSEUDO_REAL_CSEG, $tmpcseg + +tmpcseg: + .code16 + + /* clear the PE bit of CR0 */ + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PE_ON), %eax + movl %eax, %cr0 + + /* flush prefetch queue, reload %cs */ + ljmpl $0, $realcseg + +realcseg: + /* we are in real mode now + * set up the real mode segment registers : DS, SS, ES + */ + /* zero %eax */ + xorl %eax, %eax + + movw %ax, %ds + movw %ax, %es + movw %ax, %fs + movw %ax, %gs + movw %ax, %ss + +#ifdef GRUB_MACHINE_PCBIOS + /* restore interrupts */ + sti +#endif + + /* return on new stack! */ + retl +#endif + .code32 diff --git a/grub-core/kern/i386/tsc.c b/grub-core/kern/i386/tsc.c new file mode 100644 index 000000000..2e85289d8 --- /dev/null +++ b/grub-core/kern/i386/tsc.c @@ -0,0 +1,78 @@ +/* kern/i386/tsc.c - x86 TSC time source implementation + * Requires Pentium or better x86 CPU that supports the RDTSC instruction. + * This module calibrates the TSC to real time. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* This defines the value TSC had at the epoch (that is, when we calibrated it). */ +static grub_uint64_t tsc_boot_time; + +/* Calibrated TSC rate. (In ms per 2^32 ticks) */ +/* We assume that the tick is less than 1 ms and hence this value fits + in 32-bit. */ +grub_uint32_t grub_tsc_rate; + +static grub_uint64_t +grub_tsc_get_time_ms (void) +{ + grub_uint64_t a = grub_get_tsc () - tsc_boot_time; + grub_uint64_t ah = a >> 32; + grub_uint64_t al = a & 0xffffffff; + + return ((al * grub_tsc_rate) >> 32) + ah * grub_tsc_rate; +} + +static int +calibrate_tsc_hardcode (void) +{ + grub_tsc_rate = 5368;/* 800 MHz */ + return 1; +} + +void +grub_tsc_init (void) +{ + if (!grub_cpu_is_tsc_supported ()) + { +#if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_IEEE1275) + grub_install_get_time_ms (grub_rtc_get_time_ms); +#else + grub_fatal ("no TSC found"); +#endif + return; + } + + tsc_boot_time = grub_get_tsc (); + +#ifdef GRUB_MACHINE_XEN + (void) (grub_tsc_calibrate_from_xen () || calibrate_tsc_hardcode()); +#elif defined (GRUB_MACHINE_EFI) + (void) (grub_tsc_calibrate_from_pit () || grub_tsc_calibrate_from_pmtimer () || grub_tsc_calibrate_from_efi() || calibrate_tsc_hardcode()); +#elif defined (GRUB_MACHINE_COREBOOT) + (void) (grub_tsc_calibrate_from_pmtimer () || grub_tsc_calibrate_from_pit () || calibrate_tsc_hardcode()); +#else + (void) (grub_tsc_calibrate_from_pit () || calibrate_tsc_hardcode()); +#endif + grub_install_get_time_ms (grub_tsc_get_time_ms); +} diff --git a/grub-core/kern/i386/tsc_pit.c b/grub-core/kern/i386/tsc_pit.c new file mode 100644 index 000000000..67990bfa6 --- /dev/null +++ b/grub-core/kern/i386/tsc_pit.c @@ -0,0 +1,84 @@ +/* kern/i386/tsc.c - x86 TSC time source implementation + * Requires Pentium or better x86 CPU that supports the RDTSC instruction. + * This module uses the PIT to calibrate the TSC to + * real time. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +static int +grub_pit_wait (void) +{ + int ret = 0; + + /* Disable timer2 gate and speaker. */ + grub_outb (grub_inb (GRUB_PIT_SPEAKER_PORT) + & ~ (GRUB_PIT_SPK_DATA | GRUB_PIT_SPK_TMR2), + GRUB_PIT_SPEAKER_PORT); + + /* Set tics. */ + grub_outb (GRUB_PIT_CTRL_SELECT_2 | GRUB_PIT_CTRL_READLOAD_WORD, + GRUB_PIT_CTRL); + /* 0xffff ticks: 55ms. */ + grub_outb (0xff, GRUB_PIT_COUNTER_2); + grub_outb (0xff, GRUB_PIT_COUNTER_2); + + /* Enable timer2 gate, keep speaker disabled. */ + grub_outb ((grub_inb (GRUB_PIT_SPEAKER_PORT) & ~ GRUB_PIT_SPK_DATA) + | GRUB_PIT_SPK_TMR2, + GRUB_PIT_SPEAKER_PORT); + + if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00) { + ret = 1; + /* Wait. */ + while ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00); + } + + /* Disable timer2 gate and speaker. */ + grub_outb (grub_inb (GRUB_PIT_SPEAKER_PORT) + & ~ (GRUB_PIT_SPK_DATA | GRUB_PIT_SPK_TMR2), + GRUB_PIT_SPEAKER_PORT); + + return ret; +} + +/* Calibrate the TSC based on the RTC. */ +int +grub_tsc_calibrate_from_pit (void) +{ + /* First calibrate the TSC rate (relative, not absolute time). */ + grub_uint64_t start_tsc, end_tsc; + + start_tsc = grub_get_tsc (); + if (!grub_pit_wait ()) + return 0; + end_tsc = grub_get_tsc (); + + grub_tsc_rate = 0; + if (end_tsc > start_tsc) + grub_tsc_rate = grub_divmod64 ((55ULL << 32), end_tsc - start_tsc, 0); + if (grub_tsc_rate == 0) + return 0; + return 1; +} diff --git a/grub-core/kern/i386/tsc_pmtimer.c b/grub-core/kern/i386/tsc_pmtimer.c new file mode 100644 index 000000000..c9c361699 --- /dev/null +++ b/grub-core/kern/i386/tsc_pmtimer.c @@ -0,0 +1,88 @@ +/* kern/i386/tsc.c - x86 TSC time source implementation + * Requires Pentium or better x86 CPU that supports the RDTSC instruction. + * This module uses the PIT to calibrate the TSC to + * real time. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +grub_uint64_t +grub_pmtimer_wait_count_tsc (grub_port_t pmtimer, + grub_uint16_t num_pm_ticks) +{ + grub_uint32_t start; + grub_uint32_t last; + grub_uint32_t cur, end; + grub_uint64_t start_tsc; + grub_uint64_t end_tsc; + int num_iter = 0; + + start = grub_inl (pmtimer) & 0xffffff; + last = start; + end = start + num_pm_ticks; + start_tsc = grub_get_tsc (); + while (1) + { + cur = grub_inl (pmtimer) & 0xffffff; + if (cur < last) + cur |= 0x1000000; + num_iter++; + if (cur >= end) + { + end_tsc = grub_get_tsc (); + return end_tsc - start_tsc; + } + /* Check for broken PM timer. + 50000000 TSCs is between 5 ms (10GHz) and 200 ms (250 MHz) + if after this time we still don't have 1 ms on pmtimer, then + pmtimer is broken. + */ + if ((num_iter & 0xffffff) == 0 && grub_get_tsc () - start_tsc > 5000000) { + return 0; + } + } +} + +int +grub_tsc_calibrate_from_pmtimer (void) +{ + struct grub_acpi_fadt *fadt; + grub_port_t pmtimer; + grub_uint64_t tsc_diff; + + fadt = grub_acpi_find_fadt (); + if (!fadt) + return 0; + pmtimer = fadt->pmtimer; + if (!pmtimer) + return 0; + + /* It's 3.579545 MHz clock. Wait 1 ms. */ + tsc_diff = grub_pmtimer_wait_count_tsc (pmtimer, 3580); + if (tsc_diff == 0) + return 0; + grub_tsc_rate = grub_divmod64 ((1ULL << 32), tsc_diff, 0); + return 1; +} diff --git a/grub-core/kern/i386/xen/hypercall.S b/grub-core/kern/i386/xen/hypercall.S new file mode 100644 index 000000000..09d75c3a5 --- /dev/null +++ b/grub-core/kern/i386/xen/hypercall.S @@ -0,0 +1,43 @@ +/* hypercall.S - wrappers for Xen hypercalls */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +FUNCTION(grub_xen_hypercall) + pushl %ebp + movl %esp, %ebp + pushl %esi + pushl %edi + pushl %ebx + + /* call number already in %eax. */ + /* %edx -> %ebx*/ + /* %ecx -> %ecx*/ + movl %edx, %ebx + movl 8(%ebp), %edx + movl 12(%ebp), %esi + movl 16(%ebp), %edi + movl 20(%ebp), %ebp + int $0x82 + popl %ebx + popl %edi + popl %esi + popl %ebp + ret diff --git a/grub-core/kern/i386/xen/startup.S b/grub-core/kern/i386/xen/startup.S new file mode 100644 index 000000000..fbe8300a7 --- /dev/null +++ b/grub-core/kern/i386/xen/startup.S @@ -0,0 +1,38 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "startup.S" + .text + .globl start, _start + .code32 + +start: +_start: + leal LOCAL(stack_end), %esp + movl %esi, EXT_C(grub_xen_start_page_addr) + + call EXT_C(grub_main) + /* Doesn't return. */ + + .bss + .space (1 << 22) +LOCAL(stack_end): diff --git a/grub-core/kern/i386/xen/tsc.c b/grub-core/kern/i386/xen/tsc.c new file mode 100644 index 000000000..8792b308d --- /dev/null +++ b/grub-core/kern/i386/xen/tsc.c @@ -0,0 +1,40 @@ +/* kern/i386/tsc.c - x86 TSC time source implementation + * Requires Pentium or better x86 CPU that supports the RDTSC instruction. + * This module uses the PIT to calibrate the TSC to + * real time. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +int +grub_tsc_calibrate_from_xen (void) +{ + grub_uint64_t t; + t = grub_xen_shared_info->vcpu_info[0].time.tsc_to_system_mul; + if (grub_xen_shared_info->vcpu_info[0].time.tsc_shift > 0) + t <<= grub_xen_shared_info->vcpu_info[0].time.tsc_shift; + else + t >>= -grub_xen_shared_info->vcpu_info[0].time.tsc_shift; + grub_tsc_rate = grub_divmod64 (t, 1000000, 0); + return 1; +} diff --git a/grub-core/kern/ia64/cache.c b/grub-core/kern/ia64/cache.c new file mode 100644 index 000000000..13efd308f --- /dev/null +++ b/grub-core/kern/ia64/cache.c @@ -0,0 +1,35 @@ +/* init.c - initialize an ia64-based EFI system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +void +grub_arch_sync_caches (void *address, grub_size_t len) +{ + /* Cache line length is at least 32. */ + len += (grub_uint64_t)address & 0x1f; + grub_uint64_t a = (grub_uint64_t)address & ~0x1f; + + /* Flush data. */ + for (len = (len + 31) & ~0x1f; len > 0; len -= 0x20, a += 0x20) + asm volatile ("fc.i %0" : : "r" (a)); + /* Sync and serialize. Maybe extra. */ + asm volatile (";; sync.i;; srlz.i;;"); +} diff --git a/grub-core/kern/ia64/dl.c b/grub-core/kern/ia64/dl.c new file mode 100644 index 000000000..ebcf31629 --- /dev/null +++ b/grub-core/kern/ia64/dl.c @@ -0,0 +1,145 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2004,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#define MASK19 ((1 << 19) - 1) +#define MASK20 ((1 << 20) - 1) + +/* Check if EHDR is a valid ELF header. */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS64 + || e->e_ident[EI_DATA] != ELFDATA2LSB + || e->e_machine != EM_IA_64) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} + +#pragma GCC diagnostic ignored "-Wcast-align" + +/* Relocate symbols. */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + Elf_Rela *rel, *max; + + for (rel = (Elf_Rela *) ((char *) ehdr + s->sh_offset), + max = (Elf_Rela *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf_Rela *) ((char *) rel + s->sh_entsize)) + { + grub_addr_t addr; + Elf_Sym *sym; + grub_uint64_t value; + + if (seg->size < (rel->r_offset & ~3)) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = (grub_addr_t) seg->addr + rel->r_offset; + sym = (Elf_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + + /* On the PPC the value does not have an explicit + addend, add it. */ + value = sym->st_value + rel->r_addend; + + switch (ELF_R_TYPE (rel->r_info)) + { + case R_IA64_PCREL21B: + { + grub_int64_t noff; + if (ELF_ST_TYPE (sym->st_info) == STT_FUNC) + { + struct grub_ia64_trampoline *tr = mod->trampptr; + grub_ia64_make_trampoline (tr, value); + noff = ((char *) tr - (char *) (addr & ~3)) >> 4; + mod->trampptr = tr + 1; + } + else + noff = ((char *) value - (char *) (addr & ~3)) >> 4; + + if ((noff & ~MASK19) && ((-noff) & ~MASK19)) + return grub_error (GRUB_ERR_BAD_MODULE, + "jump offset too big (%lx)", noff); + grub_ia64_add_value_to_slot_20b (addr, noff); + } + break; + case R_IA64_SEGREL64LSB: + *(grub_uint64_t *) addr += value - (grub_addr_t) seg->addr; + break; + case R_IA64_FPTR64LSB: + case R_IA64_DIR64LSB: + *(grub_uint64_t *) addr += value; + break; + case R_IA64_PCREL64LSB: + *(grub_uint64_t *) addr += value - addr; + break; + case R_IA64_GPREL64I: + grub_ia64_set_immu64 (addr, value - (grub_addr_t) mod->base); + break; + case R_IA64_GPREL22: + if ((value - (grub_addr_t) mod->base) & ~MASK20) + return grub_error (GRUB_ERR_BAD_MODULE, + "gprel offset too big (%lx)", + value - (grub_addr_t) mod->base); + grub_ia64_add_value_to_slot_21 (addr, value - (grub_addr_t) mod->base); + break; + + case R_IA64_LTOFF22X: + case R_IA64_LTOFF22: + if (ELF_ST_TYPE (sym->st_info) == STT_FUNC) + value = *(grub_uint64_t *) sym->st_value + rel->r_addend; + /* Fallthrough. */ + case R_IA64_LTOFF_FPTR22: + { + grub_uint64_t *gpptr = mod->gotptr; + *gpptr = value; + if (((grub_addr_t) gpptr - (grub_addr_t) mod->base) & ~MASK20) + return grub_error (GRUB_ERR_BAD_MODULE, + "gprel offset too big (%lx)", + (grub_addr_t) gpptr - (grub_addr_t) mod->base); + grub_ia64_add_value_to_slot_21 (addr, (grub_addr_t) gpptr - (grub_addr_t) mod->base); + mod->gotptr = gpptr + 1; + break; + } + /* We treat LTOFF22X as LTOFF22, so we can ignore LDXMOV. */ + case R_IA64_LDXMOV: + break; + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/ia64/dl_helper.c b/grub-core/kern/ia64/dl_helper.c new file mode 100644 index 000000000..c60159573 --- /dev/null +++ b/grub-core/kern/ia64/dl_helper.c @@ -0,0 +1,241 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2004,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wcast-align" + +#define MASK20 ((1 << 20) - 1) +#define MASK3 (~(grub_addr_t) 3) + +void +grub_ia64_set_immu64 (grub_addr_t addr, grub_uint64_t val) +{ + /* Copied from binutils. */ + grub_uint64_t *ptr = ((grub_uint64_t *) (addr & MASK3)); + grub_uint64_t t0, t1; + + t0 = grub_le_to_cpu64 (ptr[0]); + t1 = grub_le_to_cpu64 (ptr[1]); + + /* tmpl/s: bits 0.. 5 in t0 + slot 0: bits 5..45 in t0 + slot 1: bits 46..63 in t0, bits 0..22 in t1 + slot 2: bits 23..63 in t1 */ + + /* First, clear the bits that form the 64 bit constant. */ + t0 &= ~(0x3ffffLL << 46); + t1 &= ~(0x7fffffLL + | (( (0x07fLL << 13) | (0x1ffLL << 27) + | (0x01fLL << 22) | (0x001LL << 21) + | (0x001LL << 36)) << 23)); + + t0 |= ((val >> 22) & 0x03ffffLL) << 46; /* 18 lsbs of imm41 */ + t1 |= ((val >> 40) & 0x7fffffLL) << 0; /* 23 msbs of imm41 */ + t1 |= ( (((val >> 0) & 0x07f) << 13) /* imm7b */ + | (((val >> 7) & 0x1ff) << 27) /* imm9d */ + | (((val >> 16) & 0x01f) << 22) /* imm5c */ + | (((val >> 21) & 0x001) << 21) /* ic */ + | (((val >> 63) & 0x001) << 36)) << 23; /* i */ + + ptr[0] = t0; + ptr[1] = t1; +} + +void +grub_ia64_add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value) +{ + grub_uint32_t val; + switch (addr & 3) + { + case 0: + val = grub_le_to_cpu32 (grub_get_unaligned32 (((grub_uint8_t *) + (addr & MASK3) + 2))); + val = (((((val & MASK20) + value) & MASK20) << 2) + | (val & ~(MASK20 << 2))); + grub_set_unaligned32 (((grub_uint8_t *) (addr & MASK3) + 2), + grub_cpu_to_le32 (val)); + break; + case 1: + val = grub_le_to_cpu32 (grub_get_unaligned32 (((grub_uint8_t *) + (addr & MASK3) + 7))); + val = ((((((val >> 3) & MASK20) + value) & MASK20) << 3) + | (val & ~(MASK20 << 3))); + grub_set_unaligned32 (((grub_uint8_t *) (addr & MASK3) + 7), + grub_cpu_to_le32 (val)); + break; + case 2: + val = grub_le_to_cpu32 (grub_get_unaligned32 (((grub_uint8_t *) + (addr & MASK3) + 12))); + val = ((((((val >> 4) & MASK20) + value) & MASK20) << 4) + | (val & ~(MASK20 << 4))); + grub_set_unaligned32 (((grub_uint8_t *) (addr & MASK3) + 12), + grub_cpu_to_le32 (val)); + break; + } +} + +#define MASKF21 ( ((1 << 23) - 1) & ~((1 << 7) | (1 << 8)) ) + +static grub_uint32_t +add_value_to_slot_21_real (grub_uint32_t a, grub_uint32_t value) +{ + grub_uint32_t high, mid, low, c; + low = (a & 0x00007f); + mid = (a & 0x7fc000) >> 7; + high = (a & 0x003e00) << 7; + c = (low | mid | high) + value; + return (c & 0x7f) | ((c << 7) & 0x7fc000) | ((c >> 7) & 0x0003e00); //0x003e00 +} + +void +grub_ia64_add_value_to_slot_21 (grub_addr_t addr, grub_uint32_t value) +{ + grub_uint32_t val; + switch (addr & 3) + { + case 0: + val = grub_le_to_cpu32 (grub_get_unaligned32 (((grub_uint8_t *) + (addr & MASK3) + 2))); + val = ((add_value_to_slot_21_real (((val >> 2) & MASKF21), value) + & MASKF21) << 2) | (val & ~(MASKF21 << 2)); + grub_set_unaligned32 (((grub_uint8_t *) (addr & MASK3) + 2), + grub_cpu_to_le32 (val)); + break; + case 1: + val = grub_le_to_cpu32 (grub_get_unaligned32 (((grub_uint8_t *) + (addr & MASK3) + 7))); + val = ((add_value_to_slot_21_real (((val >> 3) & MASKF21), value) + & MASKF21) << 3) | (val & ~(MASKF21 << 3)); + grub_set_unaligned32 (((grub_uint8_t *) (addr & MASK3) + 7), + grub_cpu_to_le32 (val)); + break; + case 2: + val = grub_le_to_cpu32 (grub_get_unaligned32 (((grub_uint8_t *) + (addr & MASK3) + 12))); + val = ((add_value_to_slot_21_real (((val >> 4) & MASKF21), value) + & MASKF21) << 4) | (val & ~(MASKF21 << 4)); + grub_set_unaligned32 (((grub_uint8_t *) (addr & MASK3) + 12), + grub_cpu_to_le32 (val)); + break; + } +} + +static const grub_uint8_t nopm[5] = + { + /* [MLX] nop.m 0x0 */ + 0x05, 0x00, 0x00, 0x00, 0x01 + }; + +#ifdef GRUB_UTIL +static grub_uint8_t jump[0x20] = + { + /* [MMI] add r15=r15,r1;; */ + 0x0b, 0x78, 0x3c, 0x02, 0x00, 0x20, + /* ld8 r16=[r15],8 */ + 0x00, 0x41, 0x3c, 0x30, 0x28, 0xc0, + /* mov r14=r1;; */ + 0x01, 0x08, 0x00, 0x84, + /* [MIB] ld8 r1=[r15] */ + 0x11, 0x08, 0x00, 0x1e, 0x18, 0x10, + /* mov b6=r16 */ + 0x60, 0x80, 0x04, 0x80, 0x03, 0x00, + /* br.few b6;; */ + 0x60, 0x00, 0x80, 0x00 + }; +#else +static const grub_uint8_t jump[0x20] = + { + /* ld8 r16=[r15],8 */ + 0x02, 0x80, 0x20, 0x1e, 0x18, 0x14, + /* mov r14=r1;; */ + 0xe0, 0x00, 0x04, 0x00, 0x42, 0x00, + /* nop.i 0x0 */ + 0x00, 0x00, 0x04, 0x00, + /* ld8 r1=[r15] */ + 0x11, 0x08, 0x00, 0x1e, 0x18, 0x10, + /* mov b6=r16 */ + 0x60, 0x80, 0x04, 0x80, 0x03, 0x00, + /* br.few b6;; */ + 0x60, 0x00, 0x80, 0x00 + }; +#endif + +void +grub_ia64_make_trampoline (struct grub_ia64_trampoline *tr, grub_uint64_t addr) +{ + grub_memcpy (tr->nop, nopm, sizeof (tr->nop)); + tr->addr_hi[0] = ((addr & 0xc00000) >> 16); + tr->addr_hi[1] = (addr >> 24) & 0xff; + tr->addr_hi[2] = (addr >> 32) & 0xff; + tr->addr_hi[3] = (addr >> 40) & 0xff; + tr->addr_hi[4] = (addr >> 48) & 0xff; + tr->addr_hi[5] = (addr >> 56) & 0xff; + tr->e0 = 0xe0; + tr->addr_lo[0] = ((addr & 0x000f) << 4) | 0x01; + tr->addr_lo[1] = (((addr & 0x0070) >> 4) | ((addr & 0x070000) >> 11) + | ((addr & 0x200000) >> 17)); + tr->addr_lo[2] = ((addr & 0x1f80) >> 5) | ((addr & 0x180000) >> 19); + tr->addr_lo[3] = ((addr & 0xe000) >> 13) | 0x60; + grub_memcpy (tr->jump, jump, sizeof (tr->jump)); +} + +grub_err_t +grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, + grub_size_t *got) +{ + const Elf64_Ehdr *e = ehdr; + grub_size_t cntt = 0, cntg = 0; + const Elf64_Shdr *s; + unsigned i; + + for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff)); + i < grub_le_to_cpu16 (e->e_shnum); + i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize))) + if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA)) + { + const Elf64_Rela *rel, *max; + + for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)), + max = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_size)); + rel < max; rel = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_entsize))) + switch (ELF64_R_TYPE (grub_le_to_cpu64 (rel->r_info))) + { + case R_IA64_PCREL21B: + cntt++; + break; + case R_IA64_LTOFF_FPTR22: + case R_IA64_LTOFF22X: + case R_IA64_LTOFF22: + cntg++; + break; + } + } + *tramp = cntt * sizeof (struct grub_ia64_trampoline); + *got = cntg * sizeof (grub_uint64_t); + + return GRUB_ERR_NONE; +} + diff --git a/grub-core/kern/ia64/efi/init.c b/grub-core/kern/ia64/efi/init.c new file mode 100644 index 000000000..b5ecbd091 --- /dev/null +++ b/grub-core/kern/ia64/efi/init.c @@ -0,0 +1,75 @@ +/* init.c - initialize an ia64-based EFI system */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static grub_uint64_t divisor = 1; + +static grub_uint64_t +get_itc (void) +{ + grub_uint64_t ret; + asm volatile ("mov %0=ar.itc" : "=r" (ret)); + return ret; +} + +grub_uint64_t +grub_rtc_get_time_ms (void) +{ + return get_itc () / divisor; +} + +void +grub_machine_init (void) +{ + grub_efi_event_t event; + grub_uint64_t before, after; + grub_efi_uintn_t idx; + grub_efi_init (); + + efi_call_5 (grub_efi_system_table->boot_services->create_event, + GRUB_EFI_EVT_TIMER, GRUB_EFI_TPL_CALLBACK, 0, 0, &event); + + before = get_itc (); + efi_call_3 (grub_efi_system_table->boot_services->set_timer, event, + GRUB_EFI_TIMER_RELATIVE, 200000); + efi_call_3 (grub_efi_system_table->boot_services->wait_for_event, 1, + &event, &idx); + after = get_itc (); + efi_call_1 (grub_efi_system_table->boot_services->close_event, event); + divisor = (after - before + 5) / 20; + if (divisor == 0) + divisor = 800000; + grub_install_get_time_ms (grub_rtc_get_time_ms); +} + +void +grub_machine_fini (int flags) +{ + if (flags & GRUB_LOADER_FLAG_NORETURN) + grub_efi_fini (); +} diff --git a/grub-core/kern/ia64/efi/startup.S b/grub-core/kern/ia64/efi/startup.S new file mode 100644 index 000000000..d75c6d7cc --- /dev/null +++ b/grub-core/kern/ia64/efi/startup.S @@ -0,0 +1,44 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#include +#include +#include + + .text + .psr abi64 + .psr lsb + .lsb + + .global _start + .proc _start +_start: + alloc loc0=ar.pfs,2,4,0,0 + mov loc1=rp + addl loc2=@gprel(grub_efi_image_handle),gp + addl loc3=@gprel(grub_efi_system_table),gp + ;; + st8 [loc2]=in0 + st8 [loc3]=in1 + br.call.sptk.few rp=grub_main + ;; + mov ar.pfs=loc0 + mov rp=loc1 + ;; + br.ret.sptk.few rp + + .endp _start diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c new file mode 100644 index 000000000..3e12e6b24 --- /dev/null +++ b/grub-core/kern/ieee1275/cmain.c @@ -0,0 +1,217 @@ +/* cmain.c - Startup code for the PowerPC. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +int (*grub_ieee1275_entry_fn) (void *) GRUB_IEEE1275_ENTRY_FN_ATTRIBUTE; + +grub_ieee1275_phandle_t grub_ieee1275_chosen; +grub_ieee1275_ihandle_t grub_ieee1275_mmu; + +static grub_uint32_t grub_ieee1275_flags; + + + +int +grub_ieee1275_test_flag (enum grub_ieee1275_flag flag) +{ + return (grub_ieee1275_flags & (1 << flag)); +} + +void +grub_ieee1275_set_flag (enum grub_ieee1275_flag flag) +{ + grub_ieee1275_flags |= (1 << flag); +} + +static void +grub_ieee1275_find_options (void) +{ + grub_ieee1275_phandle_t root; + grub_ieee1275_phandle_t options; + grub_ieee1275_phandle_t openprom; + grub_ieee1275_phandle_t bootrom; + int rc; + grub_uint32_t realmode = 0; + char tmp[256]; + int is_smartfirmware = 0; + int is_olpc = 0; + int is_qemu = 0; + grub_ssize_t actual; + +#ifdef __sparc__ + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_PARTITION_0); +#endif + + grub_ieee1275_finddevice ("/", &root); + grub_ieee1275_finddevice ("/options", &options); + grub_ieee1275_finddevice ("/openprom", &openprom); + + rc = grub_ieee1275_get_integer_property (options, "real-mode?", &realmode, + sizeof realmode, 0); + if (((rc >= 0) && realmode) || (grub_ieee1275_mmu == 0)) + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_REAL_MODE); + + rc = grub_ieee1275_get_property (openprom, "CodeGen-copyright", + tmp, sizeof (tmp), 0); + if (rc >= 0 && !grub_strncmp (tmp, "SmartFirmware(tm)", + sizeof ("SmartFirmware(tm)") - 1)) + is_smartfirmware = 1; + + rc = grub_ieee1275_get_property (root, "architecture", + tmp, sizeof (tmp), 0); + if (rc >= 0 && !grub_strcmp (tmp, "OLPC")) + is_olpc = 1; + + rc = grub_ieee1275_get_property (root, "model", + tmp, sizeof (tmp), 0); + if (rc >= 0 && (!grub_strcmp (tmp, "Emulated PC") + || !grub_strcmp (tmp, "IBM pSeries (emulated by qemu)"))) { + is_qemu = 1; + } + + if (rc >= 0 && grub_strncmp (tmp, "IBM", 3) == 0) + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS); + + /* Old Macs have no key repeat, newer ones have fully working one. + The ones inbetween when repeated key generates an escaoe sequence + only the escape is repeated. With this workaround however a fast + e.g. down arrow-ESC is perceived as down arrow-down arrow which is + also annoying but is less so than the original bug of exiting from + the current window on arrow repeat. To avoid unaffected users suffering + from this workaround match only exact models known to have this bug. + */ + if (rc >= 0 && grub_strcmp (tmp, "PowerBook3,3") == 0) + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_BROKEN_REPEAT); + + rc = grub_ieee1275_get_property (root, "compatible", + tmp, sizeof (tmp), &actual); + if (rc >= 0) + { + char *ptr; + for (ptr = tmp; ptr - tmp < actual; ptr += grub_strlen (ptr) + 1) + { + if (grub_memcmp (ptr, "MacRISC", sizeof ("MacRISC") - 1) == 0 + && (ptr[sizeof ("MacRISC") - 1] == 0 + || grub_isdigit (ptr[sizeof ("MacRISC") - 1]))) + { + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_OFNET_SUFFIX); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN); + break; + } + } + } + + if (is_smartfirmware) + { + /* Broken in all versions */ + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_BROKEN_OUTPUT); + + /* There are two incompatible ways of checking the version number. Try + both. */ + rc = grub_ieee1275_get_property (openprom, "SmartFirmware-version", + tmp, sizeof (tmp), 0); + if (rc < 0) + rc = grub_ieee1275_get_property (openprom, "firmware-version", + tmp, sizeof (tmp), 0); + if (rc >= 0) + { + /* It is tempting to implement a version parser to set the flags for + e.g. 1.3 and below. However, there's a special situation here. + 3rd party updates which fix the partition bugs are common, and for + some reason their fixes aren't being merged into trunk. So for + example we know that 1.2 and 1.3 are broken, but there's 1.2.99 + and 1.3.99 which are known good (and applying this workaround + would cause breakage). */ + if (!grub_strcmp (tmp, "1.0") + || !grub_strcmp (tmp, "1.1") + || !grub_strcmp (tmp, "1.2") + || !grub_strcmp (tmp, "1.3")) + { + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_PARTITION_0); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS); + } + } + } + + if (is_olpc) + { + /* OLPC / XO laptops have three kinds of storage devices: + + - NAND flash. These are accessible via OFW callbacks, but: + - Follow strange semantics, imposed by hardware constraints. + - Its ABI is undocumented, and not stable. + They lack "device_type" property, which conveniently makes GRUB + skip them. + + - USB drives. Not accessible, because OFW shuts down the controller + in order to prevent collisions with applications accessing it + directly. Even worse, attempts to access it will NOT return + control to the caller, so we have to avoid probing them. + + - SD cards. These work fine. + + To avoid breakage, we only need to skip USB probing. However, + since detecting SD cards is more reliable, we do that instead. + */ + + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_OFDISK_SDCARD_ONLY); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_HAS_CURSORONOFF); + } + + if (is_qemu) + { + /* OpenFirmware hangs on qemu if one requests any memory below 1.5 MiB. */ + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM); + + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_HAS_CURSORONOFF); + } + + if (! grub_ieee1275_finddevice ("/rom/boot-rom", &bootrom) + || ! grub_ieee1275_finddevice ("/boot-rom", &bootrom)) + { + rc = grub_ieee1275_get_property (bootrom, "model", tmp, sizeof (tmp), 0); + if (rc >= 0 && !grub_strncmp (tmp, "PPC Open Hack'Ware", + sizeof ("PPC Open Hack'Ware") - 1)) + { + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_BROKEN_OUTPUT); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_CANNOT_SET_COLORS); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_FORCE_CLAIM); + grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_ANSI); + } + } +} + +void +grub_ieee1275_init (void) +{ + grub_ieee1275_finddevice ("/chosen", &grub_ieee1275_chosen); + + if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, "mmu", &grub_ieee1275_mmu, + sizeof grub_ieee1275_mmu, 0) < 0) + grub_ieee1275_mmu = 0; + + grub_ieee1275_find_options (); +} diff --git a/grub-core/kern/ieee1275/ieee1275.c b/grub-core/kern/ieee1275/ieee1275.c new file mode 100644 index 000000000..98217029f --- /dev/null +++ b/grub-core/kern/ieee1275/ieee1275.c @@ -0,0 +1,609 @@ +/* of.c - Access the Open Firmware client interface. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#define IEEE1275_PHANDLE_INVALID ((grub_ieee1275_cell_t) -1) +#define IEEE1275_IHANDLE_INVALID ((grub_ieee1275_cell_t) 0) +#define IEEE1275_CELL_INVALID ((grub_ieee1275_cell_t) -1) + + + +int +grub_ieee1275_finddevice (const char *name, grub_ieee1275_phandle_t *phandlep) +{ + struct find_device_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t device; + grub_ieee1275_cell_t phandle; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "finddevice", 1, 1); + args.device = (grub_ieee1275_cell_t) name; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *phandlep = args.phandle; + if (args.phandle == IEEE1275_PHANDLE_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_get_property (grub_ieee1275_phandle_t phandle, + const char *property, void *buf, + grub_size_t size, grub_ssize_t *actual) +{ + struct get_property_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t phandle; + grub_ieee1275_cell_t prop; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t buflen; + grub_ieee1275_cell_t size; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "getprop", 4, 1); + args.phandle = phandle; + args.prop = (grub_ieee1275_cell_t) property; + args.buf = (grub_ieee1275_cell_t) buf; + args.buflen = (grub_ieee1275_cell_t) size; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + if (actual) + *actual = (grub_ssize_t) args.size; + if (args.size == IEEE1275_CELL_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_get_integer_property (grub_ieee1275_phandle_t phandle, + const char *property, grub_uint32_t *buf, + grub_size_t size, grub_ssize_t *actual) +{ + int ret; + ret = grub_ieee1275_get_property (phandle, property, (void *) buf, size, actual); +#ifndef GRUB_CPU_WORDS_BIGENDIAN + /* Integer properties are always in big endian. */ + if (ret == 0) + { + unsigned int i; + size /= sizeof (grub_uint32_t); + for (i = 0; i < size; i++) + buf[i] = grub_be_to_cpu32 (buf[i]); + } +#endif + return ret; +} + +int +grub_ieee1275_next_property (grub_ieee1275_phandle_t phandle, char *prev_prop, + char *prop) +{ + struct get_property_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t phandle; + grub_ieee1275_cell_t prev_prop; + grub_ieee1275_cell_t next_prop; + grub_ieee1275_cell_t flags; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "nextprop", 3, 1); + args.phandle = phandle; + args.prev_prop = (grub_ieee1275_cell_t) prev_prop; + args.next_prop = (grub_ieee1275_cell_t) prop; + args.flags = (grub_ieee1275_cell_t) -1; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + return (int) args.flags; +} + +int +grub_ieee1275_get_property_length (grub_ieee1275_phandle_t phandle, + const char *prop, grub_ssize_t *length) +{ + struct get_property_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t phandle; + grub_ieee1275_cell_t prop; + grub_ieee1275_cell_t length; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "getproplen", 2, 1); + args.phandle = phandle; + args.prop = (grub_ieee1275_cell_t) prop; + args.length = (grub_ieee1275_cell_t) -1; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *length = args.length; + if (args.length == IEEE1275_CELL_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_instance_to_package (grub_ieee1275_ihandle_t ihandle, + grub_ieee1275_phandle_t *phandlep) +{ + struct instance_to_package_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t phandle; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "instance-to-package", 1, 1); + args.ihandle = ihandle; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *phandlep = args.phandle; + if (args.phandle == IEEE1275_PHANDLE_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_package_to_path (grub_ieee1275_phandle_t phandle, + char *path, grub_size_t len, + grub_ssize_t *actual) +{ + struct instance_to_package_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t phandle; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t buflen; + grub_ieee1275_cell_t actual; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "package-to-path", 3, 1); + args.phandle = phandle; + args.buf = (grub_ieee1275_cell_t) path; + args.buflen = (grub_ieee1275_cell_t) len; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + if (actual) + *actual = args.actual; + if (args.actual == IEEE1275_CELL_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_instance_to_path (grub_ieee1275_ihandle_t ihandle, + char *path, grub_size_t len, + grub_ssize_t *actual) +{ + struct instance_to_path_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t buflen; + grub_ieee1275_cell_t actual; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "instance-to-path", 3, 1); + args.ihandle = ihandle; + args.buf = (grub_ieee1275_cell_t) path; + args.buflen = (grub_ieee1275_cell_t) len; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + if (actual) + *actual = args.actual; + if (args.actual == IEEE1275_CELL_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_write (grub_ieee1275_ihandle_t ihandle, const void *buffer, + grub_size_t len, grub_ssize_t *actualp) +{ + struct write_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t len; + grub_ieee1275_cell_t actual; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "write", 3, 1); + args.ihandle = ihandle; + args.buf = (grub_ieee1275_cell_t) buffer; + args.len = (grub_ieee1275_cell_t) len; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + if (actualp) + *actualp = args.actual; + return 0; +} + +int +grub_ieee1275_read (grub_ieee1275_ihandle_t ihandle, void *buffer, + grub_size_t len, grub_ssize_t *actualp) +{ + struct write_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t len; + grub_ieee1275_cell_t actual; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "read", 3, 1); + args.ihandle = ihandle; + args.buf = (grub_ieee1275_cell_t) buffer; + args.len = (grub_ieee1275_cell_t) len; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + if (actualp) + *actualp = args.actual; + return 0; +} + +int +grub_ieee1275_seek (grub_ieee1275_ihandle_t ihandle, grub_disk_addr_t pos, + grub_ssize_t *result) +{ + struct write_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t pos_hi; + grub_ieee1275_cell_t pos_lo; + grub_ieee1275_cell_t result; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "seek", 3, 1); + args.ihandle = ihandle; + /* To prevent stupid gcc warning. */ +#if GRUB_IEEE1275_CELL_SIZEOF >= 8 + args.pos_hi = 0; + args.pos_lo = pos; +#else + args.pos_hi = (grub_ieee1275_cell_t) (pos >> (8 * GRUB_IEEE1275_CELL_SIZEOF)); + args.pos_lo = (grub_ieee1275_cell_t) + (pos & ((1ULL << (8 * GRUB_IEEE1275_CELL_SIZEOF)) - 1)); +#endif + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + + if (result) + *result = args.result; + return 0; +} + +int +grub_ieee1275_peer (grub_ieee1275_phandle_t node, + grub_ieee1275_phandle_t *result) +{ + struct peer_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t node; + grub_ieee1275_cell_t result; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "peer", 1, 1); + args.node = node; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *result = args.result; + if (args.result == 0) + return -1; + return 0; +} + +int +grub_ieee1275_child (grub_ieee1275_phandle_t node, + grub_ieee1275_phandle_t *result) +{ + struct child_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t node; + grub_ieee1275_cell_t result; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "child", 1, 1); + args.node = node; + args.result = IEEE1275_PHANDLE_INVALID; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *result = args.result; + if (args.result == 0) + return -1; + return 0; +} + +int +grub_ieee1275_parent (grub_ieee1275_phandle_t node, + grub_ieee1275_phandle_t *result) +{ + struct parent_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t node; + grub_ieee1275_cell_t result; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "parent", 1, 1); + args.node = node; + args.result = IEEE1275_PHANDLE_INVALID; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *result = args.result; + return 0; +} + +int +grub_ieee1275_interpret (const char *command, grub_ieee1275_cell_t *catch) +{ + struct enter_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t command; + grub_ieee1275_cell_t catch; + } + args; + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET)) + return -1; + + INIT_IEEE1275_COMMON (&args.common, "interpret", 1, 1); + args.command = (grub_ieee1275_cell_t) command; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + if (catch) + *catch = args.catch; + return 0; +} + +int +grub_ieee1275_enter (void) +{ + struct enter_args + { + struct grub_ieee1275_common_hdr common; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "enter", 0, 0); + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + return 0; +} + +void +grub_ieee1275_exit (void) +{ + struct exit_args + { + struct grub_ieee1275_common_hdr common; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "exit", 0, 0); + + IEEE1275_CALL_ENTRY_FN (&args); + for (;;) ; +} + +int +grub_ieee1275_open (const char *path, grub_ieee1275_ihandle_t *result) +{ + struct open_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t path; + grub_ieee1275_cell_t result; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "open", 1, 1); + args.path = (grub_ieee1275_cell_t) path; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *result = args.result; + if (args.result == IEEE1275_IHANDLE_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_close (grub_ieee1275_ihandle_t ihandle) +{ + struct close_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t ihandle; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "close", 1, 0); + args.ihandle = ihandle; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + + return 0; +} + +int +grub_ieee1275_claim (grub_addr_t addr, grub_size_t size, unsigned int align, + grub_addr_t *result) +{ + struct claim_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t addr; + grub_ieee1275_cell_t size; + grub_ieee1275_cell_t align; + grub_ieee1275_cell_t base; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "claim", 3, 1); + args.addr = (grub_ieee1275_cell_t) addr; + args.size = (grub_ieee1275_cell_t) size; + args.align = (grub_ieee1275_cell_t) align; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + if (result) + *result = args.base; + if (args.base == IEEE1275_CELL_INVALID) + return -1; + return 0; +} + +int +grub_ieee1275_release (grub_addr_t addr, grub_size_t size) +{ + struct release_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t addr; + grub_ieee1275_cell_t size; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "release", 2, 0); + args.addr = addr; + args.size = size; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + return 0; +} + +int +grub_ieee1275_set_property (grub_ieee1275_phandle_t phandle, + const char *propname, const void *buf, + grub_size_t size, grub_ssize_t *actual) +{ + struct set_property_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t phandle; + grub_ieee1275_cell_t propname; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t size; + grub_ieee1275_cell_t actual; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "setprop", 4, 1); + args.size = (grub_ieee1275_cell_t) size; + args.buf = (grub_ieee1275_cell_t) buf; + args.propname = (grub_ieee1275_cell_t) propname; + args.phandle = (grub_ieee1275_cell_t) phandle; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *actual = args.actual; + if ((args.actual == IEEE1275_CELL_INVALID) || (args.actual != args.size)) + return -1; + return 0; +} + +int +grub_ieee1275_set_color (grub_ieee1275_ihandle_t ihandle, + int index, int r, int g, int b) +{ + struct set_color_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t index; + grub_ieee1275_cell_t b; + grub_ieee1275_cell_t g; + grub_ieee1275_cell_t r; + grub_ieee1275_cell_t catch_result; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "call-method", 6, 1); + args.method = (grub_ieee1275_cell_t) "color!"; + args.ihandle = ihandle; + args.index = index; + args.r = r; + args.g = g; + args.b = b; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + return args.catch_result; +} + +int +grub_ieee1275_milliseconds (grub_uint32_t *msecs) +{ + struct milliseconds_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t msecs; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "milliseconds", 0, 1); + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + *msecs = args.msecs; + return 0; +} diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c new file mode 100644 index 000000000..12590225e --- /dev/null +++ b/grub-core/kern/ieee1275/init.c @@ -0,0 +1,326 @@ +/* init.c -- Initialize GRUB on the newworld mac (PPC). */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef __i386__ +#include +#endif +#ifdef __sparc__ +#include +#endif + +/* The minimal heap size we can live with. */ +#define HEAP_MIN_SIZE (unsigned long) (2 * 1024 * 1024) + +/* The maximum heap size we're going to claim */ +#ifdef __i386__ +#define HEAP_MAX_SIZE (unsigned long) (64 * 1024 * 1024) +#else +#define HEAP_MAX_SIZE (unsigned long) (32 * 1024 * 1024) +#endif + +/* If possible, we will avoid claiming heap above this address, because it + seems to cause relocation problems with OSes that link at 4 MiB */ +#ifdef __i386__ +#define HEAP_MAX_ADDR (unsigned long) (64 * 1024 * 1024) +#else +#define HEAP_MAX_ADDR (unsigned long) (32 * 1024 * 1024) +#endif + +extern char _start[]; +extern char _end[]; + +#ifdef __sparc__ +grub_addr_t grub_ieee1275_original_stack; +#endif + +void +grub_exit (void) +{ + grub_ieee1275_exit (); +} + +/* Translate an OF filesystem path (separated by backslashes), into a GRUB + path (separated by forward slashes). */ +static void +grub_translate_ieee1275_path (char *filepath) +{ + char *backslash; + + backslash = grub_strchr (filepath, '\\'); + while (backslash != 0) + { + *backslash = '/'; + backslash = grub_strchr (filepath, '\\'); + } +} + +void (*grub_ieee1275_net_config) (const char *dev, char **device, char **path, + char *bootpath); +void +grub_machine_get_bootlocation (char **device, char **path) +{ + char *bootpath; + grub_ssize_t bootpath_size; + char *filename; + char *type; + + if (grub_ieee1275_get_property_length (grub_ieee1275_chosen, "bootpath", + &bootpath_size) + || bootpath_size <= 0) + { + /* Should never happen. */ + grub_printf ("/chosen/bootpath property missing!\n"); + return; + } + + bootpath = (char *) grub_malloc ((grub_size_t) bootpath_size + 64); + if (! bootpath) + { + grub_print_error (); + return; + } + grub_ieee1275_get_property (grub_ieee1275_chosen, "bootpath", bootpath, + (grub_size_t) bootpath_size + 1, 0); + bootpath[bootpath_size] = '\0'; + + /* Transform an OF device path to a GRUB path. */ + + type = grub_ieee1275_get_device_type (bootpath); + if (type && grub_strcmp (type, "network") == 0) + { + char *dev, *canon; + char *ptr; + dev = grub_ieee1275_get_aliasdevname (bootpath); + canon = grub_ieee1275_canonicalise_devname (dev); + ptr = canon + grub_strlen (canon) - 1; + while (ptr > canon && (*ptr == ',' || *ptr == ':')) + ptr--; + ptr++; + *ptr = 0; + + if (grub_ieee1275_net_config) + grub_ieee1275_net_config (canon, device, path, bootpath); + grub_free (dev); + grub_free (canon); + } + else + *device = grub_ieee1275_encode_devname (bootpath); + grub_free (type); + + filename = grub_ieee1275_get_filename (bootpath); + if (filename) + { + char *lastslash = grub_strrchr (filename, '\\'); + + /* Truncate at last directory. */ + if (lastslash) + { + *lastslash = '\0'; + grub_translate_ieee1275_path (filename); + + *path = filename; + } + } + grub_free (bootpath); +} + +/* Claim some available memory in the first /memory node. */ +#ifdef __sparc__ +static void +grub_claim_heap (void) +{ + grub_mm_init_region ((void *) (grub_modules_get_end () + + GRUB_KERNEL_MACHINE_STACK_SIZE), 0x200000); +} +#else +/* Helper for grub_claim_heap. */ +static int +heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type, + void *data) +{ + unsigned long *total = data; + + if (type != GRUB_MEMORY_AVAILABLE) + return 0; + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM)) + { + if (addr + len <= 0x180000) + return 0; + + if (addr < 0x180000) + { + len = addr + len - 0x180000; + addr = 0x180000; + } + } + len -= 1; /* Required for some firmware. */ + + /* Never exceed HEAP_MAX_SIZE */ + if (*total + len > HEAP_MAX_SIZE) + len = HEAP_MAX_SIZE - *total; + + /* Avoid claiming anything above HEAP_MAX_ADDR, if possible. */ + if ((addr < HEAP_MAX_ADDR) && /* if it's too late, don't bother */ + (addr + len > HEAP_MAX_ADDR) && /* if it wasn't available anyway, don't bother */ + (*total + (HEAP_MAX_ADDR - addr) > HEAP_MIN_SIZE)) /* only limit ourselves when we can afford to */ + len = HEAP_MAX_ADDR - addr; + + /* In theory, firmware should already prevent this from happening by not + listing our own image in /memory/available. The check below is intended + as a safeguard in case that doesn't happen. However, it doesn't protect + us from corrupting our module area, which extends up to a + yet-undetermined region above _end. */ + if ((addr < (grub_addr_t) _end) && ((addr + len) > (grub_addr_t) _start)) + { + grub_printf ("Warning: attempt to claim over our own code!\n"); + len = 0; + } + + if (len) + { + grub_err_t err; + /* Claim and use it. */ + err = grub_claimmap (addr, len); + if (err) + return err; + grub_mm_init_region ((void *) (grub_addr_t) addr, len); + } + + *total += len; + if (*total >= HEAP_MAX_SIZE) + return 1; + + return 0; +} + +static void +grub_claim_heap (void) +{ + unsigned long total = 0; + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_FORCE_CLAIM)) + heap_init (GRUB_IEEE1275_STATIC_HEAP_START, GRUB_IEEE1275_STATIC_HEAP_LEN, + 1, &total); + else + grub_machine_mmap_iterate (heap_init, &total); +} +#endif + +static void +grub_parse_cmdline (void) +{ + grub_ssize_t actual; + char args[256]; + + if (grub_ieee1275_get_property (grub_ieee1275_chosen, "bootargs", &args, + sizeof args, &actual) == 0 + && actual > 1) + { + int i = 0; + + while (i < actual) + { + char *command = &args[i]; + char *end; + char *val; + + end = grub_strchr (command, ';'); + if (end == 0) + i = actual; /* No more commands after this one. */ + else + { + *end = '\0'; + i += end - command + 1; + while (grub_isspace(args[i])) + i++; + } + + /* Process command. */ + val = grub_strchr (command, '='); + if (val) + { + *val = '\0'; + grub_env_set (command, val + 1); + } + } + } +} + +grub_addr_t grub_modbase; + +void +grub_machine_init (void) +{ + grub_modbase = ALIGN_UP((grub_addr_t) _end + + GRUB_KERNEL_MACHINE_MOD_GAP, + GRUB_KERNEL_MACHINE_MOD_ALIGN); + grub_ieee1275_init (); + + grub_console_init_early (); + grub_claim_heap (); + grub_console_init_lately (); + grub_ofdisk_init (); + + grub_parse_cmdline (); + +#ifdef __i386__ + grub_tsc_init (); +#else + grub_install_get_time_ms (grub_rtc_get_time_ms); +#endif +} + +void +grub_machine_fini (int flags) +{ + if (flags & GRUB_LOADER_FLAG_NORETURN) + { + grub_ofdisk_fini (); + grub_console_fini (); + } +} + +grub_uint64_t +grub_rtc_get_time_ms (void) +{ + grub_uint32_t msecs = 0; + + grub_ieee1275_milliseconds (&msecs); + + return msecs; +} diff --git a/grub-core/kern/ieee1275/mmap.c b/grub-core/kern/ieee1275/mmap.c new file mode 100644 index 000000000..bf325eadf --- /dev/null +++ b/grub-core/kern/ieee1275/mmap.c @@ -0,0 +1,83 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + grub_ieee1275_phandle_t root; + grub_ieee1275_phandle_t memory; + grub_uint32_t available[128]; + grub_ssize_t available_size; + grub_uint32_t address_cells = 1; + grub_uint32_t size_cells = 1; + int i; + + /* Determine the format of each entry in `available'. */ + grub_ieee1275_finddevice ("/", &root); + grub_ieee1275_get_integer_property (root, "#address-cells", &address_cells, + sizeof address_cells, 0); + grub_ieee1275_get_integer_property (root, "#size-cells", &size_cells, + sizeof size_cells, 0); + + if (size_cells > address_cells) + address_cells = size_cells; + + /* Load `/memory/available'. */ + if (grub_ieee1275_finddevice ("/memory", &memory)) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "couldn't find /memory node"); + if (grub_ieee1275_get_integer_property (memory, "available", available, + sizeof available, &available_size)) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "couldn't examine /memory/available property"); + if (available_size < 0 || (grub_size_t) available_size > sizeof (available)) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "/memory response buffer exceeded"); + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS)) + { + address_cells = 1; + size_cells = 1; + } + + /* Decode each entry and call `hook'. */ + i = 0; + available_size /= sizeof (grub_uint32_t); + while (i < available_size) + { + grub_uint64_t address; + grub_uint64_t size; + + address = available[i++]; + if (address_cells == 2) + address = (address << 32) | available[i++]; + + size = available[i++]; + if (size_cells == 2) + size = (size << 32) | available[i++]; + + if (hook (address, size, GRUB_MEMORY_AVAILABLE, hook_data)) + break; + } + + return grub_errno; +} diff --git a/grub-core/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c new file mode 100644 index 000000000..ddb778340 --- /dev/null +++ b/grub-core/kern/ieee1275/openfw.c @@ -0,0 +1,563 @@ +/* openfw.c -- Open firmware support functions. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +enum grub_ieee1275_parse_type +{ + GRUB_PARSE_FILENAME, + GRUB_PARSE_PARTITION, + GRUB_PARSE_DEVICE, + GRUB_PARSE_DEVICE_TYPE +}; + +static int +fill_alias (struct grub_ieee1275_devalias *alias) +{ + grub_ssize_t actual; + + if (grub_ieee1275_get_property (alias->phandle, "device_type", alias->type, + IEEE1275_MAX_PROP_LEN, &actual)) + alias->type[0] = 0; + + if (alias->parent_dev == alias->phandle) + return 0; + + if (grub_ieee1275_package_to_path (alias->phandle, alias->path, + IEEE1275_MAX_PATH_LEN, &actual)) + return 0; + + if (grub_strcmp (alias->parent_path, alias->path) == 0) + return 0; + + if (grub_ieee1275_get_property (alias->phandle, "name", alias->name, + IEEE1275_MAX_PROP_LEN, &actual)) + return 0; + grub_dprintf ("devalias", "device path=%s\n", alias->path); + return 1; +} + +void +grub_ieee1275_devalias_free (struct grub_ieee1275_devalias *alias) +{ + grub_free (alias->name); + grub_free (alias->type); + grub_free (alias->path); + grub_free (alias->parent_path); + alias->name = 0; + alias->type = 0; + alias->path = 0; + alias->parent_path = 0; + alias->phandle = GRUB_IEEE1275_PHANDLE_INVALID; +} + +void +grub_ieee1275_children_peer (struct grub_ieee1275_devalias *alias) +{ + while (grub_ieee1275_peer (alias->phandle, &alias->phandle) != -1) + if (fill_alias (alias)) + return; + grub_ieee1275_devalias_free (alias); +} + +void +grub_ieee1275_children_first (const char *devpath, + struct grub_ieee1275_devalias *alias) +{ + grub_ieee1275_phandle_t dev; + + grub_dprintf ("devalias", "iterating children of %s\n", + devpath); + + alias->name = 0; + alias->path = 0; + alias->parent_path = 0; + alias->type = 0; + + if (grub_ieee1275_finddevice (devpath, &dev)) + return; + + if (grub_ieee1275_child (dev, &alias->phandle)) + return; + + alias->type = grub_malloc (IEEE1275_MAX_PROP_LEN); + if (!alias->type) + return; + alias->path = grub_malloc (IEEE1275_MAX_PATH_LEN); + if (!alias->path) + { + grub_free (alias->type); + return; + } + alias->parent_path = grub_strdup (devpath); + if (!alias->parent_path) + { + grub_free (alias->path); + grub_free (alias->type); + return; + } + + alias->name = grub_malloc (IEEE1275_MAX_PROP_LEN); + if (!alias->name) + { + grub_free (alias->path); + grub_free (alias->type); + grub_free (alias->parent_path); + return; + } + if (!fill_alias (alias)) + grub_ieee1275_children_peer (alias); +} + +static int +iterate_recursively (const char *path, + int (*hook) (struct grub_ieee1275_devalias *alias)) +{ + struct grub_ieee1275_devalias alias; + int ret = 0; + + FOR_IEEE1275_DEVCHILDREN(path, alias) + { + ret = hook (&alias); + if (ret) + break; + ret = iterate_recursively (alias.path, hook); + if (ret) + break; + } + grub_ieee1275_devalias_free (&alias); + return ret; +} + +int +grub_ieee1275_devices_iterate (int (*hook) (struct grub_ieee1275_devalias *alias)) +{ + return iterate_recursively ("/", hook); +} + +void +grub_ieee1275_devalias_init_iterator (struct grub_ieee1275_devalias *alias) +{ + alias->name = 0; + alias->path = 0; + alias->parent_path = 0; + alias->type = 0; + + grub_dprintf ("devalias", "iterating aliases\n"); + + if (grub_ieee1275_finddevice ("/aliases", &alias->parent_dev)) + return; + + alias->name = grub_malloc (IEEE1275_MAX_PROP_LEN); + if (!alias->name) + return; + + alias->type = grub_malloc (IEEE1275_MAX_PROP_LEN); + if (!alias->type) + { + grub_free (alias->name); + alias->name = 0; + return; + } + + alias->name[0] = '\0'; +} + +int +grub_ieee1275_devalias_next (struct grub_ieee1275_devalias *alias) +{ + if (!alias->name) + return 0; + while (1) + { + grub_ssize_t pathlen; + grub_ssize_t actual; + char *tmp; + + if (alias->path) + { + grub_free (alias->path); + alias->path = 0; + } + tmp = grub_strdup (alias->name); + if (grub_ieee1275_next_property (alias->parent_dev, tmp, + alias->name) <= 0) + { + grub_free (tmp); + grub_ieee1275_devalias_free (alias); + return 0; + } + grub_free (tmp); + + grub_dprintf ("devalias", "devalias name = %s\n", alias->name); + + grub_ieee1275_get_property_length (alias->parent_dev, alias->name, &pathlen); + + /* The property `name' is a special case we should skip. */ + if (grub_strcmp (alias->name, "name") == 0) + continue; + + /* Sun's OpenBoot often doesn't zero terminate the device alias + strings, so we will add a NULL byte at the end explicitly. */ + pathlen += 1; + + alias->path = grub_malloc (pathlen + 1); + if (! alias->path) + { + grub_ieee1275_devalias_free (alias); + return 0; + } + + if (grub_ieee1275_get_property (alias->parent_dev, alias->name, alias->path, + pathlen, &actual) || actual < 0) + { + grub_dprintf ("devalias", "get_property (%s) failed\n", alias->name); + grub_free (alias->path); + continue; + } + if (actual > pathlen) + actual = pathlen; + alias->path[actual] = '\0'; + alias->path[pathlen] = '\0'; + + if (grub_ieee1275_finddevice (alias->path, &alias->phandle)) + { + grub_dprintf ("devalias", "finddevice (%s) failed\n", alias->path); + grub_free (alias->path); + alias->path = 0; + continue; + } + + if (grub_ieee1275_get_property (alias->phandle, "device_type", alias->type, + IEEE1275_MAX_PROP_LEN, &actual)) + { + /* NAND device don't have device_type property. */ + alias->type[0] = 0; + } + return 1; + } +} + +/* Call the "map" method of /chosen/mmu. */ +int +grub_ieee1275_map (grub_addr_t phys, grub_addr_t virt, grub_size_t size, + grub_uint32_t mode) +{ + struct map_args { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t mode; + grub_ieee1275_cell_t size; + grub_ieee1275_cell_t virt; +#ifdef __sparc__ + grub_ieee1275_cell_t phys_high; +#endif + grub_ieee1275_cell_t phys_low; + grub_ieee1275_cell_t catch_result; + } args; + + INIT_IEEE1275_COMMON (&args.common, "call-method", +#ifdef __sparc__ + 7, +#else + 6, +#endif + 1); + args.method = (grub_ieee1275_cell_t) "map"; + args.ihandle = grub_ieee1275_mmu; +#ifdef __sparc__ + args.phys_high = 0; +#endif + args.phys_low = phys; + args.virt = virt; + args.size = size; + args.mode = mode; /* Format is WIMG0PP. */ + args.catch_result = (grub_ieee1275_cell_t) -1; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + + return args.catch_result; +} + +grub_err_t +grub_claimmap (grub_addr_t addr, grub_size_t size) +{ + if (grub_ieee1275_claim (addr, size, 0, 0)) + return -1; + + if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_REAL_MODE) + && grub_ieee1275_map (addr, addr, size, 0x00)) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, "map failed: address 0x%llx, size 0x%llx\n", + (long long) addr, (long long) size); + grub_ieee1275_release (addr, size); + return grub_errno; + } + + return GRUB_ERR_NONE; +} + +/* Get the device arguments of the Open Firmware node name `path'. */ +static char * +grub_ieee1275_get_devargs (const char *path) +{ + char *colon = grub_strchr (path, ':'); + + if (! colon) + return 0; + + return grub_strdup (colon + 1); +} + +/* Get the device path of the Open Firmware node name `path'. */ +char * +grub_ieee1275_get_devname (const char *path) +{ + char *colon = grub_strchr (path, ':'); + int pathlen = grub_strlen (path); + struct grub_ieee1275_devalias curalias; + if (colon) + pathlen = (int)(colon - path); + + /* Try to find an alias for this device. */ + FOR_IEEE1275_DEVALIASES (curalias) + /* briQ firmware can change capitalization in /chosen/bootpath. */ + if (grub_strncasecmp (curalias.path, path, pathlen) == 0 + && curalias.path[pathlen] == 0) + { + char *newpath; + newpath = grub_strdup (curalias.name); + grub_ieee1275_devalias_free (&curalias); + return newpath; + } + + return grub_strndup (path, pathlen); +} + +static char * +grub_ieee1275_parse_args (const char *path, enum grub_ieee1275_parse_type ptype) +{ + char type[64]; /* XXX check size. */ + char *device = grub_ieee1275_get_devname (path); + char *ret = 0; + grub_ieee1275_phandle_t dev; + + /* We need to know what type of device it is in order to parse the full + file path properly. */ + if (grub_ieee1275_finddevice (device, &dev)) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "device %s not found", device); + goto fail; + } + if (grub_ieee1275_get_property (dev, "device_type", &type, sizeof type, 0)) + { + grub_error (GRUB_ERR_UNKNOWN_DEVICE, + "device %s lacks a device_type property", device); + goto fail; + } + + switch (ptype) + { + case GRUB_PARSE_DEVICE: + ret = grub_strdup (device); + break; + case GRUB_PARSE_DEVICE_TYPE: + ret = grub_strdup (type); + break; + case GRUB_PARSE_FILENAME: + { + char *comma; + char *args; + + args = grub_ieee1275_get_devargs (path); + if (!args) + /* Shouldn't happen. */ + return 0; + + /* The syntax of the device arguments is defined in the CHRP and PReP + IEEE1275 bindings: "[partition][,[filename]]". */ + comma = grub_strchr (args, ','); + + if (comma) + { + char *filepath = comma + 1; + + /* Make sure filepath has leading backslash. */ + if (filepath[0] != '\\') + ret = grub_xasprintf ("\\%s", filepath); + else + ret = grub_strdup (filepath); + } + grub_free (args); + } + break; + case GRUB_PARSE_PARTITION: + { + char *comma; + char *args; + + if (grub_strcmp ("block", type) != 0) + goto unknown; + + args = grub_ieee1275_get_devargs (path); + if (!args) + /* Shouldn't happen. */ + return 0; + + comma = grub_strchr (args, ','); + if (!comma) + ret = grub_strdup (args); + else + ret = grub_strndup (args, (grub_size_t)(comma - args)); + /* Consistently provide numbered partitions to GRUB. + OpenBOOT traditionally uses alphabetical partition + specifiers. */ + if (ret[0] >= 'a' && ret[0] <= 'z') + ret[0] = '1' + (ret[0] - 'a'); + grub_free (args); + } + break; + default: + unknown: + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "unsupported type %s for device %s", type, device); + } + +fail: + grub_free (device); + return ret; +} + +char * +grub_ieee1275_get_device_type (const char *path) +{ + return grub_ieee1275_parse_args (path, GRUB_PARSE_DEVICE_TYPE); +} + +char * +grub_ieee1275_get_aliasdevname (const char *path) +{ + return grub_ieee1275_parse_args (path, GRUB_PARSE_DEVICE); +} + +char * +grub_ieee1275_get_filename (const char *path) +{ + return grub_ieee1275_parse_args (path, GRUB_PARSE_FILENAME); +} + +/* Convert a device name from IEEE1275 syntax to GRUB syntax. */ +char * +grub_ieee1275_encode_devname (const char *path) +{ + char *device = grub_ieee1275_get_devname (path); + char *partition; + char *encoding; + char *optr; + const char *iptr; + + encoding = grub_malloc (sizeof ("ieee1275/") + 2 * grub_strlen (device) + + sizeof (",XXXXXXXXXXXX")); + if (!encoding) + { + grub_free (device); + return 0; + } + + partition = grub_ieee1275_parse_args (path, GRUB_PARSE_PARTITION); + + optr = grub_stpcpy (encoding, "ieee1275/"); + for (iptr = device; *iptr; ) + { + if (*iptr == ',') + *optr++ ='\\'; + *optr++ = *iptr++; + } + if (partition && partition[0]) + { + unsigned int partno = grub_strtoul (partition, 0, 0); + + *optr++ = ','; + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_0_BASED_PARTITIONS)) + /* GRUB partition 1 is OF partition 0. */ + partno++; + + grub_snprintf (optr, sizeof ("XXXXXXXXXXXX"), "%d", partno); + } + else + *optr = '\0'; + + grub_free (partition); + grub_free (device); + + return encoding; +} + +/* Resolve aliases. */ +char * +grub_ieee1275_canonicalise_devname (const char *path) +{ + struct canon_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t path; + grub_ieee1275_cell_t buf; + grub_ieee1275_cell_t inlen; + grub_ieee1275_cell_t outlen; + } + args; + char *buf = NULL; + grub_size_t bufsize = 64; + int i; + + for (i = 0; i < 2; i++) + { + grub_free (buf); + + buf = grub_malloc (bufsize); + if (!buf) + return NULL; + + INIT_IEEE1275_COMMON (&args.common, "canon", 3, 1); + args.path = (grub_ieee1275_cell_t) path; + args.buf = (grub_ieee1275_cell_t) buf; + args.inlen = (grub_ieee1275_cell_t) (bufsize - 1); + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return 0; + if (args.outlen > bufsize - 1) + { + bufsize = args.outlen + 2; + continue; + } + return buf; + } + /* Shouldn't reach here. */ + grub_free (buf); + return NULL; +} + diff --git a/grub-core/kern/list.c b/grub-core/kern/list.c new file mode 100644 index 000000000..a256bb3f8 --- /dev/null +++ b/grub-core/kern/list.c @@ -0,0 +1,55 @@ +/* list.c - grub list function */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +void * +grub_named_list_find (grub_named_list_t head, const char *name) +{ + grub_named_list_t item; + + FOR_LIST_ELEMENTS (item, head) + if (grub_strcmp (item->name, name) == 0) + return item; + + return NULL; +} + +void +grub_list_push (grub_list_t *head, grub_list_t item) +{ + item->prev = head; + if (*head) + (*head)->prev = &item->next; + item->next = *head; + *head = item; +} + +void +grub_list_remove (grub_list_t item) +{ + if (item->prev) + *item->prev = item->next; + if (item->next) + item->next->prev = item->prev; + item->next = 0; + item->prev = 0; +} diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c new file mode 100644 index 000000000..9cad0c448 --- /dev/null +++ b/grub-core/kern/main.c @@ -0,0 +1,312 @@ +/* main.c - the kernel main routine */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2005,2006,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GRUB_MACHINE_PCBIOS +#include +#endif + +grub_addr_t +grub_modules_get_end (void) +{ + struct grub_module_info *modinfo; + + modinfo = (struct grub_module_info *) grub_modbase; + + /* Check if there are any modules. */ + if ((modinfo == 0) || modinfo->magic != GRUB_MODULE_MAGIC) + return grub_modbase; + + return grub_modbase + modinfo->size; +} + +/* Load all modules in core. */ +static void +grub_load_modules (void) +{ + struct grub_module_header *header; + FOR_MODULES (header) + { + /* Not an ELF module, skip. */ + if (header->type != OBJ_TYPE_ELF) + continue; + + if (! grub_dl_load_core ((char *) header + sizeof (struct grub_module_header), + (header->size - sizeof (struct grub_module_header)))) + grub_fatal ("%s", grub_errmsg); + + if (grub_errno) + grub_print_error (); + } +} + +static char *load_config; + +static void +grub_load_config (void) +{ + struct grub_module_header *header; + FOR_MODULES (header) + { + /* Not an embedded config, skip. */ + if (header->type != OBJ_TYPE_CONFIG) + continue; + + load_config = grub_malloc (header->size - sizeof (struct grub_module_header) + 1); + if (!load_config) + { + grub_print_error (); + break; + } + grub_memcpy (load_config, (char *) header + + sizeof (struct grub_module_header), + header->size - sizeof (struct grub_module_header)); + load_config[header->size - sizeof (struct grub_module_header)] = 0; + break; + } +} + +/* Write hook for the environment variables of root. Remove surrounding + parentheses, if any. */ +static char * +grub_env_write_root (struct grub_env_var *var __attribute__ ((unused)), + const char *val) +{ + /* XXX Is it better to check the existence of the device? */ + grub_size_t len = grub_strlen (val); + + if (val[0] == '(' && val[len - 1] == ')') + return grub_strndup (val + 1, len - 2); + + return grub_strdup (val); +} + +static void +grub_set_prefix_and_root (void) +{ + char *device = NULL; + char *path = NULL; + char *fwdevice = NULL; + char *fwpath = NULL; + char *prefix = NULL; + struct grub_module_header *header; + + FOR_MODULES (header) + if (header->type == OBJ_TYPE_PREFIX) + prefix = (char *) header + sizeof (struct grub_module_header); + + grub_register_variable_hook ("root", 0, grub_env_write_root); + + grub_machine_get_bootlocation (&fwdevice, &fwpath); + + if (fwdevice) + { + char *cmdpath; + + cmdpath = grub_xasprintf ("(%s)%s", fwdevice, fwpath ? : ""); + if (cmdpath) + { + grub_env_set ("cmdpath", cmdpath); + grub_env_export ("cmdpath"); + grub_free (cmdpath); + } + } + + if (prefix) + { + char *pptr = NULL; + if (prefix[0] == '(') + { + pptr = grub_strrchr (prefix, ')'); + if (pptr) + { + device = grub_strndup (prefix + 1, pptr - prefix - 1); + pptr++; + } + } + if (!pptr) + pptr = prefix; + if (pptr[0]) + path = grub_strdup (pptr); + } + + if (!device && fwdevice) + device = fwdevice; + else if (fwdevice && (device[0] == ',' || !device[0])) + { + /* We have a partition, but still need to fill in the drive. */ + char *comma, *new_device; + + for (comma = fwdevice; *comma; ) + { + if (comma[0] == '\\' && comma[1] == ',') + { + comma += 2; + continue; + } + if (*comma == ',') + break; + comma++; + } + if (*comma) + { + char *drive = grub_strndup (fwdevice, comma - fwdevice); + new_device = grub_xasprintf ("%s%s", drive, device); + grub_free (drive); + } + else + new_device = grub_xasprintf ("%s%s", fwdevice, device); + + grub_free (fwdevice); + grub_free (device); + device = new_device; + } + else + grub_free (fwdevice); + if (fwpath && !path) + { + grub_size_t len = grub_strlen (fwpath); + while (len > 1 && fwpath[len - 1] == '/') + fwpath[--len] = 0; + if (len >= sizeof (GRUB_TARGET_CPU "-" GRUB_PLATFORM) - 1 + && grub_memcmp (fwpath + len - (sizeof (GRUB_TARGET_CPU "-" GRUB_PLATFORM) - 1), GRUB_TARGET_CPU "-" GRUB_PLATFORM, + sizeof (GRUB_TARGET_CPU "-" GRUB_PLATFORM) - 1) == 0) + fwpath[len - (sizeof (GRUB_TARGET_CPU "-" GRUB_PLATFORM) - 1)] = 0; + path = fwpath; + } + else + grub_free (fwpath); + if (device) + { + char *prefix_set; + + prefix_set = grub_xasprintf ("(%s)%s", device, path ? : ""); + if (prefix_set) + { + grub_env_set ("prefix", prefix_set); + grub_free (prefix_set); + } + grub_env_set ("root", device); + } + + grub_free (device); + grub_free (path); + grub_print_error (); +} + +/* Load the normal mode module and execute the normal mode if possible. */ +static void +grub_load_normal_mode (void) +{ + /* Load the module. */ + grub_dl_load ("normal"); + + /* Print errors if any. */ + grub_print_error (); + grub_errno = 0; + + grub_command_execute ("normal", 0, 0); +} + +static void +reclaim_module_space (void) +{ + grub_addr_t modstart, modend; + + if (!grub_modbase) + return; + +#ifdef GRUB_MACHINE_PCBIOS + modstart = GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR; +#else + modstart = grub_modbase; +#endif + modend = grub_modules_get_end (); + grub_modbase = 0; + +#if GRUB_KERNEL_PRELOAD_SPACE_REUSABLE + grub_mm_init_region ((void *) modstart, modend - modstart); +#else + (void) modstart; + (void) modend; +#endif +} + +/* The main routine. */ +void __attribute__ ((noreturn)) +grub_main (void) +{ + /* First of all, initialize the machine. */ + grub_machine_init (); + + grub_boot_time ("After machine init."); + + /* Hello. */ + grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); + grub_printf ("Welcome to GRUB!\n\n"); + grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); + + grub_load_config (); + + grub_boot_time ("Before loading embedded modules."); + + /* Load pre-loaded modules and free the space. */ + grub_register_exported_symbols (); +#ifdef GRUB_LINKER_HAVE_INIT + grub_arch_dl_init_linker (); +#endif + grub_load_modules (); + + grub_boot_time ("After loading embedded modules."); + + /* It is better to set the root device as soon as possible, + for convenience. */ + grub_set_prefix_and_root (); + grub_env_export ("root"); + grub_env_export ("prefix"); + + /* Reclaim space used for modules. */ + reclaim_module_space (); + + grub_boot_time ("After reclaiming module space."); + + grub_register_core_commands (); + + grub_boot_time ("Before execution of embedded config."); + + if (load_config) + grub_parser_execute (load_config); + + grub_boot_time ("After execution of embedded config. Attempt to go to normal mode"); + + grub_load_normal_mode (); + grub_rescue_run (); +} diff --git a/grub-core/kern/mips/arc/init.c b/grub-core/kern/mips/arc/init.c new file mode 100644 index 000000000..3834a1490 --- /dev/null +++ b/grub-core/kern/mips/arc/init.c @@ -0,0 +1,463 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const char *type_names[] = { +#ifdef GRUB_CPU_WORDS_BIGENDIAN + NULL, +#endif + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + "eisa", "tc", "scsi", "dti", "multi", "disk", "tape", "cdrom", "worm", + "serial", "net", "video", "par", "point", "key", "audio", "other", + "rdisk", "fdisk", "tape", "modem", "monitor", "print", "pointer", + "keyboard", "term", +#ifndef GRUB_CPU_WORDS_BIGENDIAN + "other", +#endif + "line", "network", NULL +}; + +static int +iterate_rec (const char *prefix, const struct grub_arc_component *parent, + grub_arc_iterate_devs_hook_t hook, void *hook_data, + int alt_names) +{ + const struct grub_arc_component *comp; + FOR_ARC_CHILDREN(comp, parent) + { + char *name; + const char *cname = NULL; + if (comp->type < ARRAY_SIZE (type_names)) + cname = type_names[comp->type]; + if (!cname) + cname = "unknown"; + if (alt_names) + name = grub_xasprintf ("%s/%s%lu", prefix, cname, comp->key); + else + name = grub_xasprintf ("%s%s(%lu)", prefix, cname, comp->key); + if (!name) + return 1; + if (hook (name, comp, hook_data)) + { + grub_free (name); + return 1; + } + if (iterate_rec ((parent ? name : prefix), comp, hook, hook_data, + alt_names)) + { + grub_free (name); + return 1; + } + grub_free (name); + } + return 0; +} + +int +grub_arc_iterate_devs (grub_arc_iterate_devs_hook_t hook, void *hook_data, + int alt_names) +{ + return iterate_rec ((alt_names ? "arc" : ""), NULL, hook, hook_data, + alt_names); +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + struct grub_arc_memory_descriptor *cur = NULL; + while (1) + { + grub_memory_type_t type; + cur = GRUB_ARC_FIRMWARE_VECTOR->getmemorydescriptor (cur); + if (!cur) + return GRUB_ERR_NONE; + switch (cur->type) + { + case GRUB_ARC_MEMORY_EXCEPTION_BLOCK: + case GRUB_ARC_MEMORY_SYSTEM_PARAMETER_BLOCK: + case GRUB_ARC_MEMORY_FW_PERMANENT: + default: + type = GRUB_MEMORY_RESERVED; + break; + + case GRUB_ARC_MEMORY_FW_TEMPORARY: + case GRUB_ARC_MEMORY_FREE: + case GRUB_ARC_MEMORY_LOADED: + case GRUB_ARC_MEMORY_FREE_CONTIGUOUS: + type = GRUB_MEMORY_AVAILABLE; + break; + case GRUB_ARC_MEMORY_BADRAM: + type = GRUB_MEMORY_BADRAM; + break; + } + if (hook (((grub_uint64_t) cur->start_page) << 12, + ((grub_uint64_t) cur->num_pages) << 12, type, hook_data)) + return GRUB_ERR_NONE; + } +} + +char * +grub_arc_alt_name_to_norm (const char *name, const char *suffix) +{ + char *optr; + const char *iptr; + char * ret = grub_malloc (2 * grub_strlen (name) + grub_strlen (suffix)); + int state = 0; + + if (!ret) + return NULL; + optr = ret; + for (iptr = name + 4; *iptr; iptr++) + if (state == 0) + { + if (!grub_isdigit (*iptr)) + *optr++ = *iptr; + else + { + *optr++ = '('; + *optr++ = *iptr; + state = 1; + } + } + else + { + if (grub_isdigit (*iptr)) + *optr++ = *iptr; + else + { + *optr++ = ')'; + state = 0; + } + } + if (state) + *optr++ = ')'; + grub_strcpy (optr, suffix); + return ret; +} + +static char * +norm_name_to_alt (const char *name) +{ + char *optr; + const char *iptr; + int state = 0; + char * ret = grub_malloc (grub_strlen (name) + sizeof ("arc/")); + + if (!ret) + return NULL; + optr = grub_stpcpy (ret, "arc/"); + for (iptr = name; *iptr; iptr++) + { + if (state == 3) + { + *optr++ = '/'; + state = 0; + } + if (*iptr == '(') + { + state = 1; + continue; + } + if (*iptr == ')') + { + if (state == 1) + *optr++ = '0'; + state = 3; + continue; + } + *optr++ = *iptr; + if (state == 1) + state = 2; + } + *optr = '\0'; + return ret; +} + +extern grub_uint32_t grub_total_modules_size __attribute__ ((section(".text"))); +grub_addr_t grub_modbase; + +extern char _end[]; +static char boot_location[256]; + +void +grub_machine_init (void) +{ + struct grub_arc_memory_descriptor *cur = NULL; + grub_addr_t modend; + + grub_memcpy (boot_location, + (char *) (GRUB_DECOMPRESSOR_LINK_ADDR - 256), 256); + + grub_modbase = ALIGN_UP ((grub_addr_t) _end, GRUB_KERNEL_MACHINE_MOD_ALIGN); + modend = grub_modbase + grub_total_modules_size; + grub_console_init_early (); + + /* FIXME: measure this. */ + grub_arch_cpuclock = 150000000; + grub_install_get_time_ms (grub_rtc_get_time_ms); + + while (1) + { + grub_uint64_t start, end; + cur = GRUB_ARC_FIRMWARE_VECTOR->getmemorydescriptor (cur); + if (!cur) + break; + if (cur->type != GRUB_ARC_MEMORY_FREE + && cur->type != GRUB_ARC_MEMORY_LOADED + && cur->type != GRUB_ARC_MEMORY_FREE_CONTIGUOUS) + continue; + start = ((grub_uint64_t) cur->start_page) << 12; + end = ((grub_uint64_t) cur->num_pages) << 12; + end += start; + if ((grub_uint64_t) start < (modend & 0x1fffffff)) + start = (modend & 0x1fffffff); + if ((grub_uint64_t) end > 0x20000000) + end = 0x20000000; + if (end > start) + grub_mm_init_region ((void *) (grub_addr_t) (start | 0x80000000), + end - start); + } + + grub_console_init_lately (); + + grub_arcdisk_init (); +} + +void +grub_machine_fini (int flags __attribute__ ((unused))) +{ +} + +void +grub_halt (void) +{ + GRUB_ARC_FIRMWARE_VECTOR->powerdown (); + + grub_millisleep (1500); + + grub_puts_ (N_("Shutdown failed")); + grub_refresh (); + while (1); +} + +void +grub_exit (void) +{ + GRUB_ARC_FIRMWARE_VECTOR->exit (); + + grub_millisleep (1500); + + grub_puts_ (N_("Exit failed")); + grub_refresh (); + while (1); +} + +static char * +get_part (char *dev) +{ + char *ptr; + if (!*dev) + return 0; + ptr = dev + grub_strlen (dev) - 1; + if (ptr == dev || *ptr != ')') + return 0; + ptr--; + while (grub_isdigit (*ptr) && ptr > dev) + ptr--; + if (*ptr != '(' || ptr == dev) + return 0; + ptr--; + if (ptr - dev < (int) sizeof ("partition") - 2) + return 0; + ptr -= sizeof ("partition") - 2; + if (grub_memcmp (ptr, "partition", sizeof ("partition") - 1) != 0) + return 0; + return ptr; +} + +static grub_disk_addr_t +get_partition_offset (char *part, grub_disk_addr_t *en) +{ + grub_arc_fileno_t handle; + grub_disk_addr_t ret = -1; + struct grub_arc_fileinfo info; + grub_arc_err_t r; + + if (GRUB_ARC_FIRMWARE_VECTOR->open (part, GRUB_ARC_FILE_ACCESS_OPEN_RO, + &handle)) + return -1; + + r = GRUB_ARC_FIRMWARE_VECTOR->getfileinformation (handle, &info); + if (!r) + { + ret = (info.start >> 9); + *en = (info.end >> 9); + } + GRUB_ARC_FIRMWARE_VECTOR->close (handle); + return ret; +} + +struct get_device_name_ctx +{ + char *partition_name; + grub_disk_addr_t poff, pend; +}; + +static int +get_device_name_iter (grub_disk_t disk __attribute__ ((unused)), + const grub_partition_t part, void *data) +{ + struct get_device_name_ctx *ctx = data; + + if (grub_partition_get_start (part) == ctx->poff + && grub_partition_get_len (part) == ctx->pend) + { + ctx->partition_name = grub_partition_get_name (part); + return 1; + } + + return 0; +} + +void +grub_machine_get_bootlocation (char **device, char **path) +{ + char *loaddev = boot_location; + char *pptr, *partptr; + char *dname; + grub_disk_addr_t poff = -1, pend = -1; + struct get_device_name_ctx ctx; + grub_disk_t parent = 0; + unsigned i; + + for (i = 0; i < ARRAY_SIZE (type_names); i++) + if (type_names[i] + && grub_memcmp (loaddev, type_names[i], grub_strlen (type_names[i])) == 0 + && loaddev[grub_strlen (type_names[i])] == '(') + break; + if (i == ARRAY_SIZE (type_names)) + pptr = loaddev; + else + for (pptr = loaddev; *pptr && *pptr != '/' && *pptr != '\\'; pptr++); + if (*pptr) + { + char *iptr, *optr; + char sep = *pptr; + *path = grub_malloc (grub_strlen (pptr) + 1); + if (!*path) + return; + for (iptr = pptr, optr = *path; *iptr; iptr++, optr++) + if (*iptr == sep) + *optr = '/'; + else + *optr = *iptr; + *optr = '\0'; + *path = grub_strdup (pptr); + *pptr = '\0'; + } + + if (*loaddev == '\0') + { + const char *syspart = 0; + + if (GRUB_ARC_SYSTEM_PARAMETER_BLOCK->firmware_vector_length + >= (unsigned) ((char *) (&GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable + 1) + - (char *) GRUB_ARC_FIRMWARE_VECTOR) + && GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable) + syspart = GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable ("SystemPartition"); + if (!syspart) + return; + loaddev = grub_strdup (syspart); + } + + partptr = get_part (loaddev); + if (partptr) + { + poff = get_partition_offset (loaddev, &pend); + *partptr = '\0'; + } + dname = norm_name_to_alt (loaddev); + if (poff == (grub_addr_t) -1) + { + *device = dname; + if (loaddev != boot_location) + grub_free (loaddev); + return; + } + + parent = grub_disk_open (dname); + if (!parent) + { + *device = dname; + if (loaddev != boot_location) + grub_free (loaddev); + return; + } + + if (poff == 0 + && pend == grub_disk_get_size (parent)) + { + grub_disk_close (parent); + *device = dname; + if (loaddev != boot_location) + grub_free (loaddev); + return; + } + + ctx.partition_name = NULL; + ctx.poff = poff; + ctx.pend = pend; + + grub_partition_iterate (parent, get_device_name_iter, &ctx); + grub_disk_close (parent); + + if (! ctx.partition_name) + { + *device = dname; + if (loaddev != boot_location) + grub_free (loaddev); + return; + } + + *device = grub_xasprintf ("%s,%s", dname, + ctx.partition_name); + grub_free (ctx.partition_name); + grub_free (dname); + if (loaddev != boot_location) + grub_free (loaddev); +} diff --git a/grub-core/kern/mips/cache.S b/grub-core/kern/mips/cache.S new file mode 100644 index 000000000..fa6897e14 --- /dev/null +++ b/grub-core/kern/mips/cache.S @@ -0,0 +1,68 @@ + +#include + + .set noreorder + .set nomacro + +FUNCTION (grub_arch_sync_caches) +#include "cache_flush.S" + j $ra + +FUNCTION (grub_arch_sync_dma_caches) + move $t2, $a0 + addu $t3, $a0, $a1 + srl $t2, $t2, 5 + sll $t2, $t2, 5 + addu $t3, $t3, 0x1f + srl $t3, $t3, 5 + sll $t3, $t3, 5 + move $t0, $t2 + subu $t1, $t3, $t2 +1: + cache_op 1, 0($t0) +#ifdef GRUB_MACHINE_MIPS_LOONGSON + cache_op 1, 1($t0) + cache_op 1, 2($t0) + cache_op 1, 3($t0) + + addiu $t1, $t1, -0x20 + bne $t1, $zero, 1b + addiu $t0, $t0, 0x20 +#else + addiu $t1, $t1, -4 + bne $t1, $zero, 1b + addiu $t0, $t0, 0x4 +#endif + sync_op + move $t0, $t2 + subu $t1, $t3, $t2 +2: +#ifdef GRUB_MACHINE_MIPS_LOONGSON + cache_op 0, 0($t0) + addiu $t1, $t1, -0x20 + bne $t1, $zero, 2b + addiu $t0, $t0, 0x20 +#else + cache_op 0, 0($t0) + addiu $t1, $t1, -4 + bne $t1, $zero, 2b + addiu $t0, $t0, 0x4 +#endif + sync_op + move $t0, $t2 + subu $t1, $t3, $t2 +2: +#ifdef GRUB_MACHINE_MIPS_LOONGSON + cache_op 23, 0($t0) + addiu $t1, $t1, -0x20 + bne $t1, $zero, 2b + addiu $t0, $t0, 0x20 +#else + cache_op 23, 0($t0) + addiu $t1, $t1, -0x4 + bne $t1, $zero, 2b + addiu $t0, $t0, 0x4 +#endif + sync_op + + jr $ra diff --git a/grub-core/kern/mips/cache_flush.S b/grub-core/kern/mips/cache_flush.S new file mode 100644 index 000000000..89961a0f7 --- /dev/null +++ b/grub-core/kern/mips/cache_flush.S @@ -0,0 +1,54 @@ +#ifndef CACHE_OP_DEFINED +#define CACHE_OP_DEFINED 1 + .macro cache_op op addr + .set mips3 + cache \op, \addr + .set mips1 + .endm + .macro sync_op + .set mips3 + sync + .set mips1 + .endm +#endif + + move $t2, $a0 + addu $t3, $a0, $a1 + srl $t2, $t2, 5 + sll $t2, $t2, 5 + addu $t3, $t3, 0x1f + srl $t3, $t3, 5 + sll $t3, $t3, 5 + move $t0, $t2 + subu $t1, $t3, $t2 +1: + cache_op 1, 0($t0) + /* All four ways. */ +#ifdef GRUB_MACHINE_MIPS_LOONGSON + cache_op 1, 1($t0) + cache_op 1, 2($t0) + cache_op 1, 3($t0) + addiu $t1, $t1, -0x20 + bne $t1, $zero, 1b + addiu $t0, $t0, 0x20 + +#else + addiu $t1, $t1, -0x4 + bne $t1, $zero, 1b + addiu $t0, $t0, 0x4 +#endif + sync_op + move $t0, $t2 + subu $t1, $t3, $t2 +2: + cache_op 0, 0($t0) +#ifdef GRUB_MACHINE_MIPS_LOONGSON + addiu $t1, $t1, -0x20 + bne $t1, $zero, 2b + addiu $t0, $t0, 0x20 +#else + addiu $t1, $t1, -0x4 + bne $t1, $zero, 2b + addiu $t0, $t0, 0x4 +#endif + sync_op diff --git a/grub-core/kern/mips/dl.c b/grub-core/kern/mips/dl.c new file mode 100644 index 000000000..5d7d299c7 --- /dev/null +++ b/grub-core/kern/mips/dl.c @@ -0,0 +1,274 @@ +/* dl-386.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +/* Dummy __gnu_local_gp. Resolved by linker. */ +static char __gnu_local_gp_dummy; +static char _gp_disp_dummy; + +/* Check if EHDR is a valid ELF header. */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf_Ehdr *e = ehdr; + + /* Check the magic numbers. */ +#ifdef GRUB_CPU_WORDS_BIGENDIAN + if (e->e_ident[EI_CLASS] != ELFCLASS32 + || e->e_ident[EI_DATA] != ELFDATA2MSB + || e->e_machine != EM_MIPS) +#else + if (e->e_ident[EI_CLASS] != ELFCLASS32 + || e->e_ident[EI_DATA] != ELFDATA2LSB + || e->e_machine != EM_MIPS) +#endif + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} + +#pragma GCC diagnostic ignored "-Wcast-align" + +grub_err_t +grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, + grub_size_t *got) +{ + const Elf_Ehdr *e = ehdr; + const Elf_Shdr *s; + /* FIXME: suboptimal. */ + grub_size_t gp_size = 0; + unsigned i; + + *tramp = 0; + *got = 0; + + for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (const Elf_Shdr *) ((const char *) s + e->e_shentsize)) + if (s->sh_type == SHT_REL) + { + const Elf_Rel *rel, *max; + + for (rel = (const Elf_Rel *) ((const char *) e + s->sh_offset), + max = rel + s->sh_size / s->sh_entsize; + rel < max; + rel++) + switch (ELF_R_TYPE (rel->r_info)) + { + case R_MIPS_GOT16: + case R_MIPS_CALL16: + case R_MIPS_GPREL32: + gp_size += 4; + break; + } + } + + if (gp_size > 0x08000) + return grub_error (GRUB_ERR_OUT_OF_RANGE, "__gnu_local_gp is too big\n"); + + *got = gp_size; + + return GRUB_ERR_NONE; +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + grub_uint32_t gp0; + Elf_Ehdr *e = ehdr; + + if (!mod->reginfo) + { + unsigned i; + Elf_Shdr *ri; + + /* Find reginfo. */ + for (i = 0, ri = (Elf_Shdr *) ((char *) ehdr + e->e_shoff); + i < e->e_shnum; + i++, ri = (Elf_Shdr *) ((char *) ri + e->e_shentsize)) + if (ri->sh_type == SHT_MIPS_REGINFO) + break; + if (i == e->e_shnum) + return grub_error (GRUB_ERR_BAD_MODULE, "no reginfo found"); + mod->reginfo = (grub_uint32_t *)((char *) ehdr + ri->sh_offset); + } + + gp0 = mod->reginfo[5]; + Elf_Rel *rel, *max; + + for (rel = (Elf_Rel *) ((char *) e + s->sh_offset), + max = (Elf_Rel *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf_Rel *) ((char *) rel + s->sh_entsize)) + { + grub_uint8_t *addr; + Elf_Sym *sym; + grub_uint32_t sym_value; + + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = (grub_uint8_t *) ((char *) seg->addr + rel->r_offset); + sym = (Elf_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + sym_value = sym->st_value; + if (s->sh_type == SHT_RELA) + { + sym_value += ((Elf_Rela *) rel)->r_addend; + } + if (sym_value == (grub_addr_t) &__gnu_local_gp_dummy) + sym_value = (grub_addr_t) mod->got; + else if (sym_value == (grub_addr_t) &_gp_disp_dummy) + { + sym_value = (grub_addr_t) mod->got - (grub_addr_t) addr; + if (ELF_R_TYPE (rel->r_info) == R_MIPS_LO16) + /* ABI mandates +4 even if partner lui doesn't + immediately precede addiu. */ + sym_value += 4; + } + switch (ELF_R_TYPE (rel->r_info)) + { + case R_MIPS_HI16: + { + grub_uint32_t value; + Elf_Rel *rel2; + +#ifdef GRUB_CPU_WORDS_BIGENDIAN + addr += 2; +#endif + + /* Handle partner lo16 relocation. Lower part is + treated as signed. Hence add 0x8000 to compensate. + */ + value = (*(grub_uint16_t *) addr << 16) + + sym_value + 0x8000; + for (rel2 = rel + 1; rel2 < max; rel2++) + if (ELF_R_SYM (rel2->r_info) + == ELF_R_SYM (rel->r_info) + && ELF_R_TYPE (rel2->r_info) == R_MIPS_LO16) + { + value += *(grub_int16_t *) + ((char *) seg->addr + rel2->r_offset +#ifdef GRUB_CPU_WORDS_BIGENDIAN + + 2 +#endif + ); + break; + } + *(grub_uint16_t *) addr = (value >> 16) & 0xffff; + } + break; + case R_MIPS_LO16: +#ifdef GRUB_CPU_WORDS_BIGENDIAN + addr += 2; +#endif + *(grub_uint16_t *) addr += sym_value & 0xffff; + break; + case R_MIPS_32: + *(grub_uint32_t *) addr += sym_value; + break; + case R_MIPS_GPREL32: + *(grub_uint32_t *) addr = sym_value + + *(grub_uint32_t *) addr + gp0 - (grub_uint32_t)mod->got; + break; + + case R_MIPS_26: + { + grub_uint32_t value; + grub_uint32_t raw; + raw = (*(grub_uint32_t *) addr) & 0x3ffffff; + value = raw << 2; + value += sym_value; + raw = (value >> 2) & 0x3ffffff; + + *(grub_uint32_t *) addr = + raw | ((*(grub_uint32_t *) addr) & 0xfc000000); + } + break; + case R_MIPS_GOT16: + if (ELF_ST_BIND (sym->st_info) == STB_LOCAL) + { + Elf_Rel *rel2; + /* Handle partner lo16 relocation. Lower part is + treated as signed. Hence add 0x8000 to compensate. + */ + sym_value += (*(grub_uint16_t *) addr << 16) + + 0x8000; + for (rel2 = rel + 1; rel2 < max; rel2++) + if (ELF_R_SYM (rel2->r_info) + == ELF_R_SYM (rel->r_info) + && ELF_R_TYPE (rel2->r_info) == R_MIPS_LO16) + { + sym_value += *(grub_int16_t *) + ((char *) seg->addr + rel2->r_offset +#ifdef GRUB_CPU_WORDS_BIGENDIAN + + 2 +#endif + ); + break; + } + sym_value &= 0xffff0000; + *(grub_uint16_t *) addr = 0; + } + /* Fallthrough. */ + case R_MIPS_CALL16: + { + grub_uint32_t *gpptr = mod->gotptr; + /* FIXME: reuse*/ +#ifdef GRUB_CPU_WORDS_BIGENDIAN + addr += 2; +#endif + *gpptr = sym_value + *(grub_uint16_t *) addr; + *(grub_uint16_t *) addr + = sizeof (grub_uint32_t) * (gpptr - (grub_uint32_t *) mod->got); + mod->gotptr = gpptr + 1; + break; + } + case R_MIPS_JALR: + break; + default: + { + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + break; + } + } + + return GRUB_ERR_NONE; +} + +void +grub_arch_dl_init_linker (void) +{ + grub_dl_register_symbol ("__gnu_local_gp", &__gnu_local_gp_dummy, 0, 0); + grub_dl_register_symbol ("_gp_disp", &_gp_disp_dummy, 0, 0); +} + diff --git a/grub-core/kern/mips/init.c b/grub-core/kern/mips/init.c new file mode 100644 index 000000000..14b8752ec --- /dev/null +++ b/grub-core/kern/mips/init.c @@ -0,0 +1,38 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +/* FIXME: use interrupt to count high. */ +grub_uint64_t +grub_get_rtc (void) +{ + static grub_uint32_t high = 0; + static grub_uint32_t last = 0; + grub_uint32_t low; + + asm volatile ("mfc0 %0, " GRUB_CPU_MIPS_COP0_TIMER_COUNT : "=r" (low)); + if (low < last) + high++; + last = low; + + return (((grub_uint64_t) high) << 32) | low; +} diff --git a/grub-core/kern/mips/loongson/init.c b/grub-core/kern/mips/loongson/init.c new file mode 100644 index 000000000..7b96531b9 --- /dev/null +++ b/grub-core/kern/mips/loongson/init.c @@ -0,0 +1,320 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + hook (GRUB_ARCH_LOWMEMPSTART, grub_arch_memsize << 20, + GRUB_MEMORY_AVAILABLE, hook_data); + hook (GRUB_ARCH_HIGHMEMPSTART, grub_arch_highmemsize << 20, + GRUB_MEMORY_AVAILABLE, hook_data); + return GRUB_ERR_NONE; +} + +/* Helper for init_pci. */ +static int +set_card (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_pci_address_t addr; + /* We could use grub_pci_assign_addresses for this but we prefer to + have exactly same memory map as on pmon. */ + switch (pciid) + { + case GRUB_LOONGSON_OHCI_PCIID: + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0); + grub_pci_write (addr, 0x5025000); + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word (addr, GRUB_PCI_COMMAND_SERR_ENABLE + | GRUB_PCI_COMMAND_PARITY_ERROR + | GRUB_PCI_COMMAND_BUS_MASTER + | GRUB_PCI_COMMAND_MEM_ENABLED); + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_STATUS); + grub_pci_write_word (addr, 0x0200 | GRUB_PCI_STATUS_CAPABILITIES); + break; + case GRUB_LOONGSON_EHCI_PCIID: + addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0); + grub_pci_write (addr, 0x5026000); + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word (addr, GRUB_PCI_COMMAND_SERR_ENABLE + | GRUB_PCI_COMMAND_PARITY_ERROR + | GRUB_PCI_COMMAND_BUS_MASTER + | GRUB_PCI_COMMAND_MEM_ENABLED); + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_STATUS); + grub_pci_write_word (addr, (1 << GRUB_PCI_STATUS_DEVSEL_TIMING_SHIFT) + | GRUB_PCI_STATUS_CAPABILITIES); + break; + } + return 0; +} + +static void +init_pci (void) +{ + *((volatile grub_uint32_t *) GRUB_CPU_LOONGSON_PCI_HIT1_SEL_LO) = 0x8000000c; + *((volatile grub_uint32_t *) GRUB_CPU_LOONGSON_PCI_HIT1_SEL_HI) = 0xffffffff; + + /* Setup PCI controller. */ + *((volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONTROLLER_HEADER + + GRUB_PCI_REG_COMMAND)) + = GRUB_PCI_COMMAND_PARITY_ERROR | GRUB_PCI_COMMAND_BUS_MASTER + | GRUB_PCI_COMMAND_MEM_ENABLED; + *((volatile grub_uint16_t *) (GRUB_MACHINE_PCI_CONTROLLER_HEADER + + GRUB_PCI_REG_STATUS)) + = (1 << GRUB_PCI_STATUS_DEVSEL_TIMING_SHIFT) + | GRUB_PCI_STATUS_FAST_B2B_CAPABLE | GRUB_PCI_STATUS_66MHZ_CAPABLE + | GRUB_PCI_STATUS_CAPABILITIES; + + *((volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONTROLLER_HEADER + + GRUB_PCI_REG_CACHELINE)) = 0xff; + *((volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONTROLLER_HEADER + + GRUB_PCI_REG_ADDRESS_REG0)) + = 0x80000000 | GRUB_PCI_ADDR_MEM_TYPE_64 | GRUB_PCI_ADDR_MEM_PREFETCH; + *((volatile grub_uint32_t *) (GRUB_MACHINE_PCI_CONTROLLER_HEADER + + GRUB_PCI_REG_ADDRESS_REG1)) = 0; + + grub_pci_iterate (set_card, NULL); +} + +void +grub_machine_init (void) +{ + grub_addr_t modend; + grub_uint32_t prid; + + asm volatile ("mfc0 %0, " GRUB_CPU_LOONGSON_COP0_PRID : "=r" (prid)); + + switch (prid) + { + /* Loongson 2E. */ + case 0x6302: + grub_arch_machine = GRUB_ARCH_MACHINE_FULOONG2E; + grub_bonito_type = GRUB_BONITO_2F; + break; + /* Loongson 2F. */ + case 0x6303: + if (grub_arch_machine != GRUB_ARCH_MACHINE_FULOONG2F + && grub_arch_machine != GRUB_ARCH_MACHINE_YEELOONG) + grub_arch_machine = GRUB_ARCH_MACHINE_YEELOONG; + grub_bonito_type = GRUB_BONITO_2F; + break; + /* Loongson 3A. */ + case 0x6305: + grub_arch_machine = GRUB_ARCH_MACHINE_YEELOONG_3A; + grub_bonito_type = GRUB_BONITO_3A; + break; + } + + /* FIXME: measure this. */ + if (grub_arch_busclock == 0) + { + grub_arch_busclock = 66000000; + grub_arch_cpuclock = 797000000; + } + + grub_install_get_time_ms (grub_rtc_get_time_ms); + + if (grub_arch_memsize == 0) + { + grub_port_t smbbase; + grub_err_t err; + grub_pci_device_t dev; + struct grub_smbus_spd spd; + unsigned totalmem; + int i; + + if (!grub_cs5536_find (&dev)) + grub_fatal ("No CS5536 found\n"); + + err = grub_cs5536_init_smbus (dev, 0x7ff, &smbbase); + if (err) + grub_fatal ("Couldn't init SMBus: %s\n", grub_errmsg); + + /* Yeeloong and Fuloong have only one memory slot. */ + err = grub_cs5536_read_spd (smbbase, GRUB_SMB_RAM_START_ADDR, &spd); + if (err) + grub_fatal ("Couldn't read SPD: %s\n", grub_errmsg); + for (i = 5; i < 13; i++) + if (spd.ddr2.rank_capacity & (1 << (i & 7))) + break; + /* Something is wrong. */ + if (i == 13) + totalmem = 256; + else + totalmem = ((spd.ddr2.num_of_ranks + & GRUB_SMBUS_SPD_MEMORY_NUM_OF_RANKS_MASK) + 1) << (i + 2); + + if (totalmem >= 256) + { + grub_arch_memsize = 256; + grub_arch_highmemsize = totalmem - 256; + } + else + { + grub_arch_memsize = totalmem; + grub_arch_highmemsize = 0; + } + + grub_cs5536_init_geode (dev); + + init_pci (); + } + + modend = grub_modules_get_end (); + grub_mm_init_region ((void *) modend, (grub_arch_memsize << 20) + - (modend - GRUB_ARCH_LOWMEMVSTART)); + /* FIXME: use upper memory as well. */ + + /* Initialize output terminal (can't be done earlier, as gfxterm + relies on a working heap. */ + grub_video_sm712_init (); + grub_video_sis315pro_init (); + grub_video_radeon_fuloong2e_init (); + grub_video_radeon_yeeloong3a_init (); + grub_font_init (); + grub_gfxterm_init (); + + grub_keylayouts_init (); + if (grub_arch_machine == GRUB_ARCH_MACHINE_YEELOONG + || grub_arch_machine == GRUB_ARCH_MACHINE_YEELOONG_3A) + grub_at_keyboard_init (); + + grub_terminfo_init (); + grub_serial_init (); + + grub_boot_init (); +} + +void +grub_machine_fini (int flags __attribute__ ((unused))) +{ +} + +static int +halt_via (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + grub_uint16_t pm; + grub_pci_address_t addr; + + if (pciid != 0x30571106) + return 0; + + addr = grub_pci_make_address (dev, 0x40); + pm = grub_pci_read (addr) & ~1; + + if (pm == 0) + { + grub_pci_write (addr, 0x1801); + pm = 0x1800; + } + + addr = grub_pci_make_address (dev, 0x80); + grub_pci_write_byte (addr, 0xff); + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); + grub_pci_write_word (addr, grub_pci_read_word (addr) | GRUB_PCI_COMMAND_IO_ENABLED); + + /* FIXME: This one is derived from qemu. Check on real hardware. */ + grub_outw (0x2000, pm + 4 + GRUB_MACHINE_PCI_IO_BASE); + grub_millisleep (5000); + + return 0; +} + +void +grub_halt (void) +{ + switch (grub_arch_machine) + { + case GRUB_ARCH_MACHINE_FULOONG2E: + grub_pci_iterate (halt_via, NULL); + break; + case GRUB_ARCH_MACHINE_FULOONG2F: + { + grub_pci_device_t dev; + grub_port_t p; + if (grub_cs5536_find (&dev)) + { + p = (grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_GPIO_BAR) + & GRUB_CS5536_LBAR_ADDR_MASK) + GRUB_MACHINE_PCI_IO_BASE; + grub_outl ((1 << 13), p + 4); + grub_outl ((1 << 29), p); + grub_millisleep (5000); + } + } + break; + case GRUB_ARCH_MACHINE_YEELOONG: + grub_outb (grub_inb (GRUB_CPU_LOONGSON_GPIOCFG) + & ~GRUB_CPU_YEELOONG_SHUTDOWN_GPIO, GRUB_CPU_LOONGSON_GPIOCFG); + grub_millisleep (1500); + break; + case GRUB_ARCH_MACHINE_YEELOONG_3A: + grub_millisleep (1); + grub_outb (0x4e, GRUB_MACHINE_PCI_IO_BASE_3A | 0x66); + grub_millisleep (1); + grub_outb (2, GRUB_MACHINE_PCI_IO_BASE_3A | 0x62); + grub_millisleep (5000); + break; + } + + grub_puts_ (N_("Shutdown failed")); + grub_refresh (); + while (1); +} + +void +grub_exit (void) +{ + grub_halt (); +} + +void +grub_machine_get_bootlocation (char **device __attribute__ ((unused)), + char **path __attribute__ ((unused))) +{ +} + +extern char _end[]; +grub_addr_t grub_modbase = (grub_addr_t) _end; + diff --git a/grub-core/kern/mips/qemu_mips/init.c b/grub-core/kern/mips/qemu_mips/init.c new file mode 100644 index 000000000..be88b77d2 --- /dev/null +++ b/grub-core/kern/mips/qemu_mips/init.c @@ -0,0 +1,105 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static inline int +probe_mem (grub_addr_t addr) +{ + volatile grub_uint8_t *ptr = (grub_uint8_t *) (0xa0000000 | addr); + grub_uint8_t c = *ptr; + *ptr = 0xAA; + if (*ptr != 0xAA) + return 0; + *ptr = 0x55; + if (*ptr != 0x55) + return 0; + *ptr = c; + return 1; +} + +void +grub_machine_init (void) +{ + grub_addr_t modend; + + if (grub_arch_memsize == 0) + { + int i; + + for (i = 27; i >= 0; i--) + if (probe_mem (grub_arch_memsize | (1 << i))) + grub_arch_memsize |= (1 << i); + grub_arch_memsize++; + } + + /* FIXME: measure this. */ + grub_arch_cpuclock = 200000000; + + modend = grub_modules_get_end (); + grub_mm_init_region ((void *) modend, grub_arch_memsize + - (modend - GRUB_ARCH_LOWMEMVSTART)); + + grub_install_get_time_ms (grub_rtc_get_time_ms); + + grub_keylayouts_init (); + grub_at_keyboard_init (); + + grub_qemu_init_cirrus (); + grub_vga_text_init (); + + grub_terminfo_init (); + grub_serial_init (); + + grub_boot_init (); +} + +void +grub_machine_fini (int flags __attribute__ ((unused))) +{ +} + +void +grub_exit (void) +{ + grub_halt (); +} + +void +grub_halt (void) +{ + grub_outl (42, 0xbfbf0004); + while (1); +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + hook (0, grub_arch_memsize, GRUB_MEMORY_AVAILABLE, hook_data); + return GRUB_ERR_NONE; +} + +void +grub_machine_get_bootlocation (char **device __attribute__ ((unused)), + char **path __attribute__ ((unused))) +{ +} + +extern char _end[]; +grub_addr_t grub_modbase = (grub_addr_t) _end; + diff --git a/grub-core/kern/mips/startup.S b/grub-core/kern/mips/startup.S new file mode 100644 index 000000000..1fdb58aca --- /dev/null +++ b/grub-core/kern/mips/startup.S @@ -0,0 +1,126 @@ +/* startup.S - Startup code for the MIPS. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#define BASE_ADDR 8 + + .globl __start, _start, start + .set noreorder + .set nomacro +__start: +_start: +start: +.extern __bss_start +.extern _end + bal cont + nop + + .org GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE +VARIABLE(grub_total_modules_size) + .long 0 + +VARIABLE (grub_arch_busclock) + .long 0 +VARIABLE (grub_arch_cpuclock) + .long 0 +VARIABLE (grub_arch_memsize) + .long 0 +VARIABLE (grub_arch_highmemsize) + .long 0 +#ifdef GRUB_MACHINE_MIPS_LOONGSON +VARIABLE (grub_arch_machine) + .long GRUB_ARCH_MACHINE_FULOONG2F +#endif +cont: + /* Save our base. */ + move $s0, $ra + +#ifdef GRUB_MACHINE_MIPS_QEMU_MIPS + lui $t1, %hi(grub_arch_busclock) + addiu $t1, %lo(grub_arch_busclock) + sw $s4, 8($t1) +#endif + +#ifdef GRUB_MACHINE_MIPS_LOONGSON + lui $t1, %hi(grub_arch_busclock) + addiu $t1, %lo(grub_arch_busclock) + sw $s2, 0($t1) + sw $s3, 4($t1) + sw $s4, 8($t1) + sw $s5, 12($t1) + sw $s7, 16($t1) +#endif + + /* Move the modules out of BSS. */ + lui $t2, %hi(__bss_start) + addiu $t2, %lo(__bss_start) + + lui $t1, %hi(_end) + addiu $t1, %lo(_end) + addiu $t1, (GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) + li $t3, (GRUB_KERNEL_MACHINE_MOD_ALIGN - 1) + nor $t3, $t3, $0 + and $t1, $t1, $t3 + + lw $t3, (GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE - BASE_ADDR)($s0) + + /* Backward copy. */ + add $t1, $t1, $t3 + add $t2, $t2, $t3 + addiu $t1, $t1, -1 + addiu $t2, $t2, -1 + + /* $t2 is source. $t1 is destination. $t3 is size. */ +modulesmovcont: + beq $t3, $0, modulesmovdone + nop + lb GRUB_ASM_T4, 0($t2) + sb GRUB_ASM_T4, 0($t1) + addiu $t2, $t2, -1 + addiu $t1, $t1, -1 + b modulesmovcont + addiu $t3, $t3, -1 +modulesmovdone: + + /* Clean BSS. */ + + lui $t1, %hi(__bss_start) + addiu $t1, $t1, %lo(__bss_start) + lui $t2, %hi(_end) + addiu $t2, $t2, %lo(_end) +bsscont: + sb $0,0($t1) + addiu $t1, $t1, 1 + sltu $t3, $t1, $t2 + bne $t3, $0, bsscont + nop + + lui $t9, %hi(grub_main) + addiu $t9, %lo(grub_main) + + lui $sp, %hi(GRUB_MACHINE_MEMORY_STACK_HIGH) + jr $t9 + addiu $sp, $sp, %lo(GRUB_MACHINE_MEMORY_STACK_HIGH) + diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c new file mode 100644 index 000000000..d1a54df6c --- /dev/null +++ b/grub-core/kern/misc.c @@ -0,0 +1,1152 @@ +/* misc.c - definitions of misc functions */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +union printf_arg +{ + /* Yes, type is also part of union as the moment we fill the value + we don't need to store its type anymore (when we'll need it, we'll + have format spec again. So save some space. */ + enum + { + INT, LONG, LONGLONG, + UNSIGNED_INT = 3, UNSIGNED_LONG, UNSIGNED_LONGLONG + } type; + long long ll; +}; + +struct printf_args +{ + union printf_arg prealloc[32]; + union printf_arg *ptr; + grub_size_t count; +}; + +static void +parse_printf_args (const char *fmt0, struct printf_args *args, + va_list args_in); +static int +grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, + struct printf_args *args); + +static void +free_printf_args (struct printf_args *args) +{ + if (args->ptr != args->prealloc) + grub_free (args->ptr); +} + +static int +grub_iswordseparator (int c) +{ + return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&'); +} + +/* grub_gettext_dummy is not translating anything. */ +static const char * +grub_gettext_dummy (const char *s) +{ + return s; +} + +const char* (*grub_gettext) (const char *s) = grub_gettext_dummy; + +void * +grub_memmove (void *dest, const void *src, grub_size_t n) +{ + char *d = (char *) dest; + const char *s = (const char *) src; + + if (d < s) + while (n--) + *d++ = *s++; + else + { + d += n; + s += n; + + while (n--) + *--d = *--s; + } + + return dest; +} + +char * +grub_strcpy (char *dest, const char *src) +{ + char *p = dest; + + while ((*p++ = *src++) != '\0') + ; + + return dest; +} + +int +grub_printf (const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = grub_vprintf (fmt, ap); + va_end (ap); + + return ret; +} + +int +grub_printf_ (const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = grub_vprintf (_(fmt), ap); + va_end (ap); + + return ret; +} + +int +grub_puts_ (const char *s) +{ + return grub_puts (_(s)); +} + +#if defined (__APPLE__) && ! defined (GRUB_UTIL) +int +grub_err_printf (const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = grub_vprintf (fmt, ap); + va_end (ap); + + return ret; +} +#endif + +#if ! defined (__APPLE__) && ! defined (GRUB_UTIL) +int grub_err_printf (const char *fmt, ...) +__attribute__ ((alias("grub_printf"))); +#endif + +void +grub_real_dprintf (const char *file, const int line, const char *condition, + const char *fmt, ...) +{ + va_list args; + const char *debug = grub_env_get ("debug"); + + if (! debug) + return; + + if (grub_strword (debug, "all") || grub_strword (debug, condition)) + { + grub_printf ("%s:%d: ", file, line); + va_start (args, fmt); + grub_vprintf (fmt, args); + va_end (args); + grub_refresh (); + } +} + +#define PREALLOC_SIZE 255 + +int +grub_vprintf (const char *fmt, va_list ap) +{ + grub_size_t s; + static char buf[PREALLOC_SIZE + 1]; + char *curbuf = buf; + struct printf_args args; + + parse_printf_args (fmt, &args, ap); + + s = grub_vsnprintf_real (buf, PREALLOC_SIZE, fmt, &args); + if (s > PREALLOC_SIZE) + { + curbuf = grub_malloc (s + 1); + if (!curbuf) + { + grub_errno = GRUB_ERR_NONE; + buf[PREALLOC_SIZE - 3] = '.'; + buf[PREALLOC_SIZE - 2] = '.'; + buf[PREALLOC_SIZE - 1] = '.'; + buf[PREALLOC_SIZE] = 0; + curbuf = buf; + } + else + s = grub_vsnprintf_real (curbuf, s, fmt, &args); + } + + free_printf_args (&args); + + grub_xputs (curbuf); + + if (curbuf != buf) + grub_free (curbuf); + + return s; +} + +int +grub_memcmp (const void *s1, const void *s2, grub_size_t n) +{ + const grub_uint8_t *t1 = s1; + const grub_uint8_t *t2 = s2; + + while (n--) + { + if (*t1 != *t2) + return (int) *t1 - (int) *t2; + + t1++; + t2++; + } + + return 0; +} + +int +grub_strcmp (const char *s1, const char *s2) +{ + while (*s1 && *s2) + { + if (*s1 != *s2) + break; + + s1++; + s2++; + } + + return (int) (grub_uint8_t) *s1 - (int) (grub_uint8_t) *s2; +} + +int +grub_strncmp (const char *s1, const char *s2, grub_size_t n) +{ + if (n == 0) + return 0; + + while (*s1 && *s2 && --n) + { + if (*s1 != *s2) + break; + + s1++; + s2++; + } + + return (int) (grub_uint8_t) *s1 - (int) (grub_uint8_t) *s2; +} + +char * +grub_strchr (const char *s, int c) +{ + do + { + if (*s == c) + return (char *) s; + } + while (*s++); + + return 0; +} + +char * +grub_strrchr (const char *s, int c) +{ + char *p = NULL; + + do + { + if (*s == c) + p = (char *) s; + } + while (*s++); + + return p; +} + +int +grub_strword (const char *haystack, const char *needle) +{ + const char *n_pos = needle; + + while (grub_iswordseparator (*haystack)) + haystack++; + + while (*haystack) + { + /* Crawl both the needle and the haystack word we're on. */ + while(*haystack && !grub_iswordseparator (*haystack) + && *haystack == *n_pos) + { + haystack++; + n_pos++; + } + + /* If we reached the end of both words at the same time, the word + is found. If not, eat everything in the haystack that isn't the + next word (or the end of string) and "reset" the needle. */ + if ( (!*haystack || grub_iswordseparator (*haystack)) + && (!*n_pos || grub_iswordseparator (*n_pos))) + return 1; + else + { + n_pos = needle; + while (*haystack && !grub_iswordseparator (*haystack)) + haystack++; + while (grub_iswordseparator (*haystack)) + haystack++; + } + } + + return 0; +} + +int +grub_isspace (int c) +{ + return (c == '\n' || c == '\r' || c == ' ' || c == '\t'); +} + +unsigned long +grub_strtoul (const char *str, char **end, int base) +{ + unsigned long long num; + + num = grub_strtoull (str, end, base); +#if GRUB_CPU_SIZEOF_LONG != 8 + if (num > ~0UL) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, N_("overflow is detected")); + return ~0UL; + } +#endif + + return (unsigned long) num; +} + +unsigned long long +grub_strtoull (const char *str, char **end, int base) +{ + unsigned long long num = 0; + int found = 0; + + /* Skip white spaces. */ + /* grub_isspace checks that *str != '\0'. */ + while (grub_isspace (*str)) + str++; + + /* Guess the base, if not specified. The prefix `0x' means 16, and + the prefix `0' means 8. */ + if (str[0] == '0') + { + if (str[1] == 'x') + { + if (base == 0 || base == 16) + { + base = 16; + str += 2; + } + } + else if (base == 0 && str[1] >= '0' && str[1] <= '7') + base = 8; + } + + if (base == 0) + base = 10; + + while (*str) + { + unsigned long digit; + + digit = grub_tolower (*str) - '0'; + if (digit > 9) + { + digit += '0' - 'a' + 10; + if (digit >= (unsigned long) base) + break; + } + + found = 1; + + /* NUM * BASE + DIGIT > ~0ULL */ + if (num > grub_divmod64 (~0ULL - digit, base, 0)) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("overflow is detected")); + return ~0ULL; + } + + num = num * base + digit; + str++; + } + + if (! found) + { + grub_error (GRUB_ERR_BAD_NUMBER, + N_("unrecognized number")); + return 0; + } + + if (end) + *end = (char *) str; + + return num; +} + +char * +grub_strdup (const char *s) +{ + grub_size_t len; + char *p; + + len = grub_strlen (s) + 1; + p = (char *) grub_malloc (len); + if (! p) + return 0; + + return grub_memcpy (p, s, len); +} + +char * +grub_strndup (const char *s, grub_size_t n) +{ + grub_size_t len; + char *p; + + len = grub_strlen (s); + if (len > n) + len = n; + p = (char *) grub_malloc (len + 1); + if (! p) + return 0; + + grub_memcpy (p, s, len); + p[len] = '\0'; + return p; +} + +/* clang detects that we're implementing here a memset so it decides to + optimise and calls memset resulting in infinite recursion. With volatile + we make it not optimise in this way. */ +#ifdef __clang__ +#define VOLATILE_CLANG volatile +#else +#define VOLATILE_CLANG +#endif + +void * +grub_memset (void *s, int c, grub_size_t len) +{ + void *p = s; + grub_uint8_t pattern8 = c; + + if (len >= 3 * sizeof (unsigned long)) + { + unsigned long patternl = 0; + grub_size_t i; + + for (i = 0; i < sizeof (unsigned long); i++) + patternl |= ((unsigned long) pattern8) << (8 * i); + + while (len > 0 && (((grub_addr_t) p) & (sizeof (unsigned long) - 1))) + { + *(VOLATILE_CLANG grub_uint8_t *) p = pattern8; + p = (grub_uint8_t *) p + 1; + len--; + } + while (len >= sizeof (unsigned long)) + { + *(VOLATILE_CLANG unsigned long *) p = patternl; + p = (unsigned long *) p + 1; + len -= sizeof (unsigned long); + } + } + + while (len > 0) + { + *(VOLATILE_CLANG grub_uint8_t *) p = pattern8; + p = (grub_uint8_t *) p + 1; + len--; + } + + return s; +} + +grub_size_t +grub_strlen (const char *s) +{ + const char *p = s; + + while (*p) + p++; + + return p - s; +} + +static inline void +grub_reverse (char *str) +{ + char *p = str + grub_strlen (str) - 1; + + while (str < p) + { + char tmp; + + tmp = *str; + *str = *p; + *p = tmp; + str++; + p--; + } +} + +/* Divide N by D, return the quotient, and store the remainder in *R. */ +grub_uint64_t +grub_divmod64 (grub_uint64_t n, grub_uint64_t d, grub_uint64_t *r) +{ + /* This algorithm is typically implemented by hardware. The idea + is to get the highest bit in N, 64 times, by keeping + upper(N * 2^i) = (Q * D + M), where upper + represents the high 64 bits in 128-bits space. */ + unsigned bits = 64; + grub_uint64_t q = 0; + grub_uint64_t m = 0; + + /* ARM and IA64 don't have a fast 32-bit division. + Using that code would just make us use software division routines, calling + ourselves indirectly and hence getting infinite recursion. + */ +#if !GRUB_DIVISION_IN_SOFTWARE + /* Skip the slow computation if 32-bit arithmetic is possible. */ + if (n < 0xffffffff && d < 0xffffffff) + { + if (r) + *r = ((grub_uint32_t) n) % (grub_uint32_t) d; + + return ((grub_uint32_t) n) / (grub_uint32_t) d; + } +#endif + + while (bits--) + { + m <<= 1; + + if (n & (1ULL << 63)) + m |= 1; + + q <<= 1; + n <<= 1; + + if (m >= d) + { + q |= 1; + m -= d; + } + } + + if (r) + *r = m; + + return q; +} + +/* Convert a long long value to a string. This function avoids 64-bit + modular arithmetic or divisions. */ +static inline char * +grub_lltoa (char *str, int c, unsigned long long n) +{ + unsigned base = (c == 'x') ? 16 : 10; + char *p; + + if ((long long) n < 0 && c == 'd') + { + n = (unsigned long long) (-((long long) n)); + *str++ = '-'; + } + + p = str; + + if (base == 16) + do + { + unsigned d = (unsigned) (n & 0xf); + *p++ = (d > 9) ? d + 'a' - 10 : d + '0'; + } + while (n >>= 4); + else + /* BASE == 10 */ + do + { + grub_uint64_t m; + + n = grub_divmod64 (n, 10, &m); + *p++ = m + '0'; + } + while (n); + + *p = 0; + + grub_reverse (str); + return p; +} + +static void +parse_printf_args (const char *fmt0, struct printf_args *args, + va_list args_in) +{ + const char *fmt; + char c; + grub_size_t n = 0; + + args->count = 0; + + COMPILE_TIME_ASSERT (sizeof (int) == sizeof (grub_uint32_t)); + COMPILE_TIME_ASSERT (sizeof (int) <= sizeof (long long)); + COMPILE_TIME_ASSERT (sizeof (long) <= sizeof (long long)); + COMPILE_TIME_ASSERT (sizeof (long long) == sizeof (void *) + || sizeof (int) == sizeof (void *)); + + fmt = fmt0; + while ((c = *fmt++) != 0) + { + if (c != '%') + continue; + + if (*fmt =='-') + fmt++; + + while (grub_isdigit (*fmt)) + fmt++; + + if (*fmt == '$') + fmt++; + + if (*fmt =='-') + fmt++; + + while (grub_isdigit (*fmt)) + fmt++; + + if (*fmt =='.') + fmt++; + + while (grub_isdigit (*fmt)) + fmt++; + + c = *fmt++; + if (c == 'l') + c = *fmt++; + if (c == 'l') + c = *fmt++; + + switch (c) + { + case 'p': + case 'x': + case 'u': + case 'd': + case 'c': + case 'C': + case 's': + args->count++; + break; + } + } + + if (args->count <= ARRAY_SIZE (args->prealloc)) + args->ptr = args->prealloc; + else + { + args->ptr = grub_malloc (args->count * sizeof (args->ptr[0])); + if (!args->ptr) + { + grub_errno = GRUB_ERR_NONE; + args->ptr = args->prealloc; + args->count = ARRAY_SIZE (args->prealloc); + } + } + + grub_memset (args->ptr, 0, args->count * sizeof (args->ptr[0])); + + fmt = fmt0; + n = 0; + while ((c = *fmt++) != 0) + { + int longfmt = 0; + grub_size_t curn; + const char *p; + + if (c != '%') + continue; + + curn = n++; + + if (*fmt =='-') + fmt++; + + p = fmt; + + while (grub_isdigit (*fmt)) + fmt++; + + if (*fmt == '$') + { + curn = grub_strtoull (p, 0, 10) - 1; + fmt++; + } + + if (*fmt =='-') + fmt++; + + while (grub_isdigit (*fmt)) + fmt++; + + if (*fmt =='.') + fmt++; + + while (grub_isdigit (*fmt)) + fmt++; + + c = *fmt++; + if (c == '%') + { + n--; + continue; + } + + if (c == 'l') + { + c = *fmt++; + longfmt = 1; + } + if (c == 'l') + { + c = *fmt++; + longfmt = 2; + } + if (curn >= args->count) + continue; + switch (c) + { + case 'x': + case 'u': + args->ptr[curn].type = UNSIGNED_INT + longfmt; + break; + case 'd': + args->ptr[curn].type = INT + longfmt; + break; + case 'p': + case 's': + if (sizeof (void *) == sizeof (long long)) + args->ptr[curn].type = UNSIGNED_LONGLONG; + else + args->ptr[curn].type = UNSIGNED_INT; + break; + case 'C': + case 'c': + args->ptr[curn].type = INT; + break; + } + } + + for (n = 0; n < args->count; n++) + switch (args->ptr[n].type) + { + case INT: + args->ptr[n].ll = va_arg (args_in, int); + break; + case LONG: + args->ptr[n].ll = va_arg (args_in, long); + break; + case UNSIGNED_INT: + args->ptr[n].ll = va_arg (args_in, unsigned int); + break; + case UNSIGNED_LONG: + args->ptr[n].ll = va_arg (args_in, unsigned long); + break; + case LONGLONG: + case UNSIGNED_LONGLONG: + args->ptr[n].ll = va_arg (args_in, long long); + break; + } +} + +static inline void __attribute__ ((always_inline)) +write_char (char *str, grub_size_t *count, grub_size_t max_len, unsigned char ch) +{ + if (*count < max_len) + str[*count] = ch; + + (*count)++; +} + +static int +grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, + struct printf_args *args) +{ + char c; + grub_size_t n = 0; + grub_size_t count = 0; + const char *fmt; + + fmt = fmt0; + + while ((c = *fmt++) != 0) + { + unsigned int format1 = 0; + unsigned int format2 = ~ 0U; + char zerofill = ' '; + char rightfill = 0; + grub_size_t curn; + + if (c != '%') + { + write_char (str, &count, max_len,c); + continue; + } + + curn = n++; + + rescan:; + + if (*fmt =='-') + { + rightfill = 1; + fmt++; + } + + /* Read formatting parameters. */ + if (grub_isdigit (*fmt)) + { + if (fmt[0] == '0') + zerofill = '0'; + format1 = grub_strtoul (fmt, (char **) &fmt, 10); + } + + if (*fmt == '.') + fmt++; + + if (grub_isdigit (*fmt)) + format2 = grub_strtoul (fmt, (char **) &fmt, 10); + + if (*fmt == '$') + { + curn = format1 - 1; + fmt++; + format1 = 0; + format2 = ~ 0U; + zerofill = ' '; + rightfill = 0; + + goto rescan; + } + + c = *fmt++; + if (c == 'l') + c = *fmt++; + if (c == 'l') + c = *fmt++; + + if (c == '%') + { + write_char (str, &count, max_len,c); + n--; + continue; + } + + if (curn >= args->count) + continue; + + long long curarg = args->ptr[curn].ll; + + switch (c) + { + case 'p': + write_char (str, &count, max_len, '0'); + write_char (str, &count, max_len, 'x'); + c = 'x'; + /* Fall through. */ + case 'x': + case 'u': + case 'd': + { + char tmp[32]; + const char *p = tmp; + grub_size_t len; + grub_size_t fill; + + len = grub_lltoa (tmp, c, curarg) - tmp; + fill = len < format1 ? format1 - len : 0; + if (! rightfill) + while (fill--) + write_char (str, &count, max_len, zerofill); + while (*p) + write_char (str, &count, max_len, *p++); + if (rightfill) + while (fill--) + write_char (str, &count, max_len, zerofill); + } + break; + + case 'c': + write_char (str, &count, max_len,curarg & 0xff); + break; + + case 'C': + { + grub_uint32_t code = curarg; + int shift; + unsigned mask; + + if (code <= 0x7f) + { + shift = 0; + mask = 0; + } + else if (code <= 0x7ff) + { + shift = 6; + mask = 0xc0; + } + else if (code <= 0xffff) + { + shift = 12; + mask = 0xe0; + } + else if (code <= 0x10ffff) + { + shift = 18; + mask = 0xf0; + } + else + { + code = '?'; + shift = 0; + mask = 0; + } + + write_char (str, &count, max_len,mask | (code >> shift)); + + for (shift -= 6; shift >= 0; shift -= 6) + write_char (str, &count, max_len,0x80 | (0x3f & (code >> shift))); + } + break; + + case 's': + { + grub_size_t len = 0; + grub_size_t fill; + const char *p = ((char *) (grub_addr_t) curarg) ? : "(null)"; + grub_size_t i; + + while (len < format2 && p[len]) + len++; + + fill = len < format1 ? format1 - len : 0; + + if (!rightfill) + while (fill--) + write_char (str, &count, max_len, zerofill); + + for (i = 0; i < len; i++) + write_char (str, &count, max_len,*p++); + + if (rightfill) + while (fill--) + write_char (str, &count, max_len, zerofill); + } + + break; + + default: + write_char (str, &count, max_len,c); + break; + } + } + + if (count < max_len) + str[count] = '\0'; + else + str[max_len] = '\0'; + return count; +} + +int +grub_vsnprintf (char *str, grub_size_t n, const char *fmt, va_list ap) +{ + grub_size_t ret; + struct printf_args args; + + if (!n) + return 0; + + n--; + + parse_printf_args (fmt, &args, ap); + + ret = grub_vsnprintf_real (str, n, fmt, &args); + + free_printf_args (&args); + + return ret < n ? ret : n; +} + +int +grub_snprintf (char *str, grub_size_t n, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = grub_vsnprintf (str, n, fmt, ap); + va_end (ap); + + return ret; +} + +char * +grub_xvasprintf (const char *fmt, va_list ap) +{ + grub_size_t s, as = PREALLOC_SIZE; + char *ret; + struct printf_args args; + + parse_printf_args (fmt, &args, ap); + + while (1) + { + ret = grub_malloc (as + 1); + if (!ret) + { + free_printf_args (&args); + return NULL; + } + + s = grub_vsnprintf_real (ret, as, fmt, &args); + + if (s <= as) + { + free_printf_args (&args); + return ret; + } + + grub_free (ret); + as = s; + } +} + +char * +grub_xasprintf (const char *fmt, ...) +{ + va_list ap; + char *ret; + + va_start (ap, fmt); + ret = grub_xvasprintf (fmt, ap); + va_end (ap); + + return ret; +} + +/* Abort GRUB. This function does not return. */ +static void __attribute__ ((noreturn)) +grub_abort (void) +{ + grub_printf ("\nAborted."); + +#ifndef GRUB_UTIL + if (grub_term_inputs) +#endif + { + grub_printf (" Press any key to exit."); + grub_getkey (); + } + + grub_exit (); +} + +void +grub_fatal (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + grub_vprintf (_(fmt), ap); + va_end (ap); + + grub_refresh (); + + grub_abort (); +} + +#if BOOT_TIME_STATS + +#include + +struct grub_boot_time *grub_boot_time_head; +static struct grub_boot_time **boot_time_last = &grub_boot_time_head; + +void +grub_real_boot_time (const char *file, + const int line, + const char *fmt, ...) +{ + struct grub_boot_time *n; + va_list args; + + grub_error_push (); + n = grub_malloc (sizeof (*n)); + if (!n) + { + grub_errno = 0; + grub_error_pop (); + return; + } + n->file = file; + n->line = line; + n->tp = grub_get_time_ms (); + n->next = 0; + + va_start (args, fmt); + n->msg = grub_xvasprintf (fmt, args); + va_end (args); + + *boot_time_last = n; + boot_time_last = &n->next; + + grub_errno = 0; + grub_error_pop (); +} +#endif diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c new file mode 100644 index 000000000..ee88ff611 --- /dev/null +++ b/grub-core/kern/mm.c @@ -0,0 +1,624 @@ +/* mm.c - functions for memory manager */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* + The design of this memory manager. + + This is a simple implementation of malloc with a few extensions. These are + the extensions: + + - memalign is implemented efficiently. + + - multiple regions may be used as free space. They may not be + contiguous. + + Regions are managed by a singly linked list, and the meta information is + stored in the beginning of each region. Space after the meta information + is used to allocate memory. + + The memory space is used as cells instead of bytes for simplicity. This + is important for some CPUs which may not access multiple bytes at a time + when the first byte is not aligned at a certain boundary (typically, + 4-byte or 8-byte). The size of each cell is equal to the size of struct + grub_mm_header, so the header of each allocated/free block fits into one + cell precisely. One cell is 16 bytes on 32-bit platforms and 32 bytes + on 64-bit platforms. + + There are two types of blocks: allocated blocks and free blocks. + + In allocated blocks, the header of each block has only its size. Note that + this size is based on cells but not on bytes. The header is located right + before the returned pointer, that is, the header resides at the previous + cell. + + Free blocks constitutes a ring, using a singly linked list. The first free + block is pointed to by the meta information of a region. The allocator + attempts to pick up the second block instead of the first one. This is + a typical optimization against defragmentation, and makes the + implementation a bit easier. + + For safety, both allocated blocks and free ones are marked by magic + numbers. Whenever anything unexpected is detected, GRUB aborts the + operation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef MM_DEBUG +# undef grub_malloc +# undef grub_zalloc +# undef grub_realloc +# undef grub_free +# undef grub_memalign +#endif + + + +grub_mm_region_t grub_mm_base; + +/* Get a header from the pointer PTR, and set *P and *R to a pointer + to the header and a pointer to its region, respectively. PTR must + be allocated. */ +static void +get_header_from_pointer (void *ptr, grub_mm_header_t *p, grub_mm_region_t *r) +{ + if ((grub_addr_t) ptr & (GRUB_MM_ALIGN - 1)) + grub_fatal ("unaligned pointer %p", ptr); + + for (*r = grub_mm_base; *r; *r = (*r)->next) + if ((grub_addr_t) ptr > (grub_addr_t) ((*r) + 1) + && (grub_addr_t) ptr <= (grub_addr_t) ((*r) + 1) + (*r)->size) + break; + + if (! *r) + grub_fatal ("out of range pointer %p", ptr); + + *p = (grub_mm_header_t) ptr - 1; + if ((*p)->magic == GRUB_MM_FREE_MAGIC) + grub_fatal ("double free at %p", *p); + if ((*p)->magic != GRUB_MM_ALLOC_MAGIC) + grub_fatal ("alloc magic is broken at %p: %lx", *p, + (unsigned long) (*p)->magic); +} + +/* Initialize a region starting from ADDR and whose size is SIZE, + to use it as free space. */ +void +grub_mm_init_region (void *addr, grub_size_t size) +{ + grub_mm_header_t h; + grub_mm_region_t r, *p, q; + +#if 0 + grub_printf ("Using memory for heap: start=%p, end=%p\n", addr, addr + (unsigned int) size); +#endif + + /* Exclude last 4K to avoid overflows. */ + /* If addr + 0x1000 overflows then whole region is in excluded zone. */ + if ((grub_addr_t) addr > ~((grub_addr_t) 0x1000)) + return; + + /* If addr + 0x1000 + size overflows then decrease size. */ + if (((grub_addr_t) addr + 0x1000) > ~(grub_addr_t) size) + size = ((grub_addr_t) -0x1000) - (grub_addr_t) addr; + + for (p = &grub_mm_base, q = *p; q; p = &(q->next), q = *p) + if ((grub_uint8_t *) addr + size + q->pre_size == (grub_uint8_t *) q) + { + r = (grub_mm_region_t) ALIGN_UP ((grub_addr_t) addr, GRUB_MM_ALIGN); + *r = *q; + r->pre_size += size; + + if (r->pre_size >> GRUB_MM_ALIGN_LOG2) + { + h = (grub_mm_header_t) (r + 1); + h->size = (r->pre_size >> GRUB_MM_ALIGN_LOG2); + h->magic = GRUB_MM_ALLOC_MAGIC; + r->size += h->size << GRUB_MM_ALIGN_LOG2; + r->pre_size &= (GRUB_MM_ALIGN - 1); + *p = r; + grub_free (h + 1); + } + *p = r; + return; + } + + /* Allocate a region from the head. */ + r = (grub_mm_region_t) ALIGN_UP ((grub_addr_t) addr, GRUB_MM_ALIGN); + + /* If this region is too small, ignore it. */ + if (size < GRUB_MM_ALIGN + (char *) r - (char *) addr + sizeof (*r)) + return; + + size -= (char *) r - (char *) addr + sizeof (*r); + + h = (grub_mm_header_t) (r + 1); + h->next = h; + h->magic = GRUB_MM_FREE_MAGIC; + h->size = (size >> GRUB_MM_ALIGN_LOG2); + + r->first = h; + r->pre_size = (grub_addr_t) r - (grub_addr_t) addr; + r->size = (h->size << GRUB_MM_ALIGN_LOG2); + + /* Find where to insert this region. Put a smaller one before bigger ones, + to prevent fragmentation. */ + for (p = &grub_mm_base, q = *p; q; p = &(q->next), q = *p) + if (q->size > r->size) + break; + + *p = r; + r->next = q; +} + +/* Allocate the number of units N with the alignment ALIGN from the ring + buffer starting from *FIRST. ALIGN must be a power of two. Both N and + ALIGN are in units of GRUB_MM_ALIGN. Return a non-NULL if successful, + otherwise return NULL. */ +static void * +grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align) +{ + grub_mm_header_t p, q; + + /* When everything is allocated side effect is that *first will have alloc + magic marked, meaning that there is no room in this region. */ + if ((*first)->magic == GRUB_MM_ALLOC_MAGIC) + return 0; + + /* Try to search free slot for allocation in this memory region. */ + for (q = *first, p = q->next; ; q = p, p = p->next) + { + grub_off_t extra; + + extra = ((grub_addr_t) (p + 1) >> GRUB_MM_ALIGN_LOG2) & (align - 1); + if (extra) + extra = align - extra; + + if (! p) + grub_fatal ("null in the ring"); + + if (p->magic != GRUB_MM_FREE_MAGIC) + grub_fatal ("free magic is broken at %p: 0x%x", p, p->magic); + + if (p->size >= n + extra) + { + extra += (p->size - extra - n) & (~(align - 1)); + if (extra == 0 && p->size == n) + { + /* There is no special alignment requirement and memory block + is complete match. + + 1. Just mark memory block as allocated and remove it from + free list. + + Result: + +---------------+ previous block's next + | alloc, size=n | | + +---------------+ v + */ + q->next = p->next; + } + else if (align == 1 || p->size == n + extra) + { + /* There might be alignment requirement, when taking it into + account memory block fits in. + + 1. Allocate new area at end of memory block. + 2. Reduce size of available blocks from original node. + 3. Mark new area as allocated and "remove" it from free + list. + + Result: + +---------------+ + | free, size-=n | next --+ + +---------------+ | + | alloc, size=n | | + +---------------+ v + */ + + p->size -= n; + p += p->size; + } + else if (extra == 0) + { + grub_mm_header_t r; + + r = p + extra + n; + r->magic = GRUB_MM_FREE_MAGIC; + r->size = p->size - extra - n; + r->next = p->next; + q->next = r; + + if (q == p) + { + q = r; + r->next = r; + } + } + else + { + /* There is alignment requirement and there is room in memory + block. Split memory block to three pieces. + + 1. Create new memory block right after section being + allocated. Mark it as free. + 2. Add new memory block to free chain. + 3. Mark current memory block having only extra blocks. + 4. Advance to aligned block and mark that as allocated and + "remove" it from free list. + + Result: + +------------------------------+ + | free, size=extra | next --+ + +------------------------------+ | + | alloc, size=n | | + +------------------------------+ | + | free, size=orig.size-extra-n | <------+, next --+ + +------------------------------+ v + */ + grub_mm_header_t r; + + r = p + extra + n; + r->magic = GRUB_MM_FREE_MAGIC; + r->size = p->size - extra - n; + r->next = p; + + p->size = extra; + q->next = r; + p += extra; + } + + p->magic = GRUB_MM_ALLOC_MAGIC; + p->size = n; + + /* Mark find as a start marker for next allocation to fasten it. + This will have side effect of fragmenting memory as small + pieces before this will be un-used. */ + /* So do it only for chunks under 64K. */ + if (n < (0x8000 >> GRUB_MM_ALIGN_LOG2) + || *first == p) + *first = q; + + return p + 1; + } + + /* Search was completed without result. */ + if (p == *first) + break; + } + + return 0; +} + +/* Allocate SIZE bytes with the alignment ALIGN and return the pointer. */ +void * +grub_memalign (grub_size_t align, grub_size_t size) +{ + grub_mm_region_t r; + grub_size_t n = ((size + GRUB_MM_ALIGN - 1) >> GRUB_MM_ALIGN_LOG2) + 1; + int count = 0; + + if (!grub_mm_base) + goto fail; + + if (size > ~(grub_size_t) align) + goto fail; + + /* We currently assume at least a 32-bit grub_size_t, + so limiting allocations to - 1MiB + in name of sanity is beneficial. */ + if ((size + align) > ~(grub_size_t) 0x100000) + goto fail; + + align = (align >> GRUB_MM_ALIGN_LOG2); + if (align == 0) + align = 1; + + again: + + for (r = grub_mm_base; r; r = r->next) + { + void *p; + + p = grub_real_malloc (&(r->first), n, align); + if (p) + return p; + } + + /* If failed, increase free memory somehow. */ + switch (count) + { + case 0: + /* Invalidate disk caches. */ + grub_disk_cache_invalidate_all (); + count++; + goto again; + +#if 0 + case 1: + /* Unload unneeded modules. */ + grub_dl_unload_unneeded (); + count++; + goto again; +#endif + + default: + break; + } + + fail: + grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); + return 0; +} + +/* Allocate SIZE bytes and return the pointer. */ +void * +grub_malloc (grub_size_t size) +{ + return grub_memalign (0, size); +} + +/* Allocate SIZE bytes, clear them and return the pointer. */ +void * +grub_zalloc (grub_size_t size) +{ + void *ret; + + ret = grub_memalign (0, size); + if (ret) + grub_memset (ret, 0, size); + + return ret; +} + +/* Deallocate the pointer PTR. */ +void +grub_free (void *ptr) +{ + grub_mm_header_t p; + grub_mm_region_t r; + + if (! ptr) + return; + + get_header_from_pointer (ptr, &p, &r); + + if (r->first->magic == GRUB_MM_ALLOC_MAGIC) + { + p->magic = GRUB_MM_FREE_MAGIC; + r->first = p->next = p; + } + else + { + grub_mm_header_t q, s; + +#if 0 + q = r->first; + do + { + grub_printf ("%s:%d: q=%p, q->size=0x%x, q->magic=0x%x\n", + GRUB_FILE, __LINE__, q, q->size, q->magic); + q = q->next; + } + while (q != r->first); +#endif + + for (s = r->first, q = s->next; q <= p || q->next >= p; s = q, q = s->next) + { + if (q->magic != GRUB_MM_FREE_MAGIC) + grub_fatal ("free magic is broken at %p: 0x%x", q, q->magic); + + if (q <= q->next && (q > p || q->next < p)) + break; + } + + p->magic = GRUB_MM_FREE_MAGIC; + p->next = q->next; + q->next = p; + + if (p->next + p->next->size == p) + { + p->magic = 0; + + p->next->size += p->size; + q->next = p->next; + p = p->next; + } + + r->first = q; + + if (q == p + p->size) + { + q->magic = 0; + p->size += q->size; + if (q == s) + s = p; + s->next = p; + q = s; + } + + r->first = q; + } +} + +/* Reallocate SIZE bytes and return the pointer. The contents will be + the same as that of PTR. */ +void * +grub_realloc (void *ptr, grub_size_t size) +{ + grub_mm_header_t p; + grub_mm_region_t r; + void *q; + grub_size_t n; + + if (! ptr) + return grub_malloc (size); + + if (! size) + { + grub_free (ptr); + return 0; + } + + /* FIXME: Not optimal. */ + n = ((size + GRUB_MM_ALIGN - 1) >> GRUB_MM_ALIGN_LOG2) + 1; + get_header_from_pointer (ptr, &p, &r); + + if (p->size >= n) + return ptr; + + q = grub_malloc (size); + if (! q) + return q; + + /* We've already checked that p->size < n. */ + grub_memcpy (q, ptr, p->size << GRUB_MM_ALIGN_LOG2); + grub_free (ptr); + return q; +} + +#ifdef MM_DEBUG +int grub_mm_debug = 0; + +void +grub_mm_dump_free (void) +{ + grub_mm_region_t r; + + for (r = grub_mm_base; r; r = r->next) + { + grub_mm_header_t p; + + /* Follow the free list. */ + p = r->first; + do + { + if (p->magic != GRUB_MM_FREE_MAGIC) + grub_fatal ("free magic is broken at %p: 0x%x", p, p->magic); + + grub_printf ("F:%p:%u:%p\n", + p, (unsigned int) p->size << GRUB_MM_ALIGN_LOG2, p->next); + p = p->next; + } + while (p != r->first); + } + + grub_printf ("\n"); +} + +void +grub_mm_dump (unsigned lineno) +{ + grub_mm_region_t r; + + grub_printf ("called at line %u\n", lineno); + for (r = grub_mm_base; r; r = r->next) + { + grub_mm_header_t p; + + for (p = (grub_mm_header_t) ALIGN_UP ((grub_addr_t) (r + 1), + GRUB_MM_ALIGN); + (grub_addr_t) p < (grub_addr_t) (r+1) + r->size; + p++) + { + switch (p->magic) + { + case GRUB_MM_FREE_MAGIC: + grub_printf ("F:%p:%u:%p\n", + p, (unsigned int) p->size << GRUB_MM_ALIGN_LOG2, p->next); + break; + case GRUB_MM_ALLOC_MAGIC: + grub_printf ("A:%p:%u\n", p, (unsigned int) p->size << GRUB_MM_ALIGN_LOG2); + break; + } + } + } + + grub_printf ("\n"); +} + +void * +grub_debug_malloc (const char *file, int line, grub_size_t size) +{ + void *ptr; + + if (grub_mm_debug) + grub_printf ("%s:%d: malloc (0x%" PRIxGRUB_SIZE ") = ", file, line, size); + ptr = grub_malloc (size); + if (grub_mm_debug) + grub_printf ("%p\n", ptr); + return ptr; +} + +void * +grub_debug_zalloc (const char *file, int line, grub_size_t size) +{ + void *ptr; + + if (grub_mm_debug) + grub_printf ("%s:%d: zalloc (0x%" PRIxGRUB_SIZE ") = ", file, line, size); + ptr = grub_zalloc (size); + if (grub_mm_debug) + grub_printf ("%p\n", ptr); + return ptr; +} + +void +grub_debug_free (const char *file, int line, void *ptr) +{ + if (grub_mm_debug) + grub_printf ("%s:%d: free (%p)\n", file, line, ptr); + grub_free (ptr); +} + +void * +grub_debug_realloc (const char *file, int line, void *ptr, grub_size_t size) +{ + if (grub_mm_debug) + grub_printf ("%s:%d: realloc (%p, 0x%" PRIxGRUB_SIZE ") = ", file, line, ptr, size); + ptr = grub_realloc (ptr, size); + if (grub_mm_debug) + grub_printf ("%p\n", ptr); + return ptr; +} + +void * +grub_debug_memalign (const char *file, int line, grub_size_t align, + grub_size_t size) +{ + void *ptr; + + if (grub_mm_debug) + grub_printf ("%s:%d: memalign (0x%" PRIxGRUB_SIZE ", 0x%" PRIxGRUB_SIZE + ") = ", file, line, align, size); + ptr = grub_memalign (align, size); + if (grub_mm_debug) + grub_printf ("%p\n", ptr); + return ptr; +} + +#endif /* MM_DEBUG */ diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c new file mode 100644 index 000000000..78175aac2 --- /dev/null +++ b/grub-core/kern/parser.c @@ -0,0 +1,275 @@ +/* parser.c - the part of the parser that can return partial tokens */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + + +/* All the possible state transitions on the command line. If a + transition can not be found, it is assumed that there is no + transition and keep_value is assumed to be 1. */ +static struct grub_parser_state_transition state_transitions[] = { + {GRUB_PARSER_STATE_TEXT, GRUB_PARSER_STATE_QUOTE, '\'', 0}, + {GRUB_PARSER_STATE_TEXT, GRUB_PARSER_STATE_DQUOTE, '\"', 0}, + {GRUB_PARSER_STATE_TEXT, GRUB_PARSER_STATE_VAR, '$', 0}, + {GRUB_PARSER_STATE_TEXT, GRUB_PARSER_STATE_ESC, '\\', 0}, + + {GRUB_PARSER_STATE_ESC, GRUB_PARSER_STATE_TEXT, 0, 1}, + + {GRUB_PARSER_STATE_QUOTE, GRUB_PARSER_STATE_TEXT, '\'', 0}, + + {GRUB_PARSER_STATE_DQUOTE, GRUB_PARSER_STATE_TEXT, '\"', 0}, + {GRUB_PARSER_STATE_DQUOTE, GRUB_PARSER_STATE_QVAR, '$', 0}, + + {GRUB_PARSER_STATE_VAR, GRUB_PARSER_STATE_VARNAME2, '{', 0}, + {GRUB_PARSER_STATE_VAR, GRUB_PARSER_STATE_VARNAME, 0, 1}, + {GRUB_PARSER_STATE_VARNAME, GRUB_PARSER_STATE_TEXT, ' ', 1}, + {GRUB_PARSER_STATE_VARNAME, GRUB_PARSER_STATE_TEXT, '\t', 1}, + {GRUB_PARSER_STATE_VARNAME2, GRUB_PARSER_STATE_TEXT, '}', 0}, + + {GRUB_PARSER_STATE_QVAR, GRUB_PARSER_STATE_QVARNAME2, '{', 0}, + {GRUB_PARSER_STATE_QVAR, GRUB_PARSER_STATE_QVARNAME, 0, 1}, + {GRUB_PARSER_STATE_QVARNAME, GRUB_PARSER_STATE_TEXT, '\"', 0}, + {GRUB_PARSER_STATE_QVARNAME, GRUB_PARSER_STATE_DQUOTE, ' ', 1}, + {GRUB_PARSER_STATE_QVARNAME, GRUB_PARSER_STATE_DQUOTE, '\t', 1}, + {GRUB_PARSER_STATE_QVARNAME2, GRUB_PARSER_STATE_DQUOTE, '}', 0}, + + {0, 0, 0, 0} +}; + + +/* Determines the state following STATE, determined by C. */ +grub_parser_state_t +grub_parser_cmdline_state (grub_parser_state_t state, char c, char *result) +{ + struct grub_parser_state_transition *transition; + struct grub_parser_state_transition default_transition; + + default_transition.to_state = state; + default_transition.keep_value = 1; + + /* Look for a good translation. */ + for (transition = state_transitions; transition->from_state; transition++) + { + if (transition->from_state != state) + continue; + /* An exact match was found, use it. */ + if (transition->input == c) + break; + + if (grub_isspace (transition->input) && !grub_isalpha (c) + && !grub_isdigit (c) && c != '_') + break; + + /* A less perfect match was found, use this one if no exact + match can be found. */ + if (transition->input == 0) + break; + } + + if (!transition->from_state) + transition = &default_transition; + + if (transition->keep_value) + *result = c; + else + *result = 0; + return transition->to_state; +} + + +/* Helper for grub_parser_split_cmdline. */ +static inline int +check_varstate (grub_parser_state_t s) +{ + return (s == GRUB_PARSER_STATE_VARNAME + || s == GRUB_PARSER_STATE_VARNAME2 + || s == GRUB_PARSER_STATE_QVARNAME + || s == GRUB_PARSER_STATE_QVARNAME2); +} + + +static void +add_var (char *varname, char **bp, char **vp, + grub_parser_state_t state, grub_parser_state_t newstate) +{ + const char *val; + + /* Check if a variable was being read in and the end of the name + was reached. */ + if (!(check_varstate (state) && !check_varstate (newstate))) + return; + + *((*vp)++) = '\0'; + val = grub_env_get (varname); + *vp = varname; + if (!val) + return; + + /* Insert the contents of the variable in the buffer. */ + for (; *val; val++) + *((*bp)++) = *val; +} + +grub_err_t +grub_parser_split_cmdline (const char *cmdline, + grub_reader_getline_t getline, void *getline_data, + int *argc, char ***argv) +{ + grub_parser_state_t state = GRUB_PARSER_STATE_TEXT; + /* XXX: Fixed size buffer, perhaps this buffer should be dynamically + allocated. */ + char buffer[1024]; + char *bp = buffer; + char *rd = (char *) cmdline; + char varname[200]; + char *vp = varname; + char *args; + int i; + + *argc = 0; + do + { + if (!rd || !*rd) + { + if (getline) + getline (&rd, 1, getline_data); + else + break; + } + + if (!rd) + break; + + for (; *rd; rd++) + { + grub_parser_state_t newstate; + char use; + + newstate = grub_parser_cmdline_state (state, *rd, &use); + + /* If a variable was being processed and this character does + not describe the variable anymore, write the variable to + the buffer. */ + add_var (varname, &bp, &vp, state, newstate); + + if (check_varstate (newstate)) + { + if (use) + *(vp++) = use; + } + else + { + if (newstate == GRUB_PARSER_STATE_TEXT + && state != GRUB_PARSER_STATE_ESC && grub_isspace (use)) + { + /* Don't add more than one argument if multiple + spaces are used. */ + if (bp != buffer && *(bp - 1)) + { + *(bp++) = '\0'; + (*argc)++; + } + } + else if (use) + *(bp++) = use; + } + state = newstate; + } + } + while (state != GRUB_PARSER_STATE_TEXT && !check_varstate (state)); + + /* A special case for when the last character was part of a + variable. */ + add_var (varname, &bp, &vp, state, GRUB_PARSER_STATE_TEXT); + + if (bp != buffer && *(bp - 1)) + { + *(bp++) = '\0'; + (*argc)++; + } + + /* Reserve memory for the return values. */ + args = grub_malloc (bp - buffer); + if (!args) + return grub_errno; + grub_memcpy (args, buffer, bp - buffer); + + *argv = grub_malloc (sizeof (char *) * (*argc + 1)); + if (!*argv) + { + grub_free (args); + return grub_errno; + } + + /* The arguments are separated with 0's, setup argv so it points to + the right values. */ + bp = args; + for (i = 0; i < *argc; i++) + { + (*argv)[i] = bp; + while (*bp) + bp++; + bp++; + } + + return 0; +} + +/* Helper for grub_parser_execute. */ +static grub_err_t +grub_parser_execute_getline (char **line, int cont __attribute__ ((unused)), + void *data) +{ + char **source = data; + char *p; + + if (!*source) + { + *line = 0; + return 0; + } + + p = grub_strchr (*source, '\n'); + + if (p) + *line = grub_strndup (*source, p - *source); + else + *line = grub_strdup (*source); + *source = p ? p + 1 : 0; + return 0; +} + +grub_err_t +grub_parser_execute (char *source) +{ + while (source) + { + char *line; + + grub_parser_execute_getline (&line, 0, &source); + grub_rescue_parse_line (line, grub_parser_execute_getline, &source); + grub_free (line); + grub_print_error (); + } + + return grub_errno; +} diff --git a/grub-core/kern/partition.c b/grub-core/kern/partition.c new file mode 100644 index 000000000..e499147cb --- /dev/null +++ b/grub-core/kern/partition.c @@ -0,0 +1,276 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +#ifdef GRUB_UTIL +#include +#endif + +grub_partition_map_t grub_partition_map_list; + +/* + * Checks that disk->partition contains part. This function assumes that the + * start of part is relative to the start of disk->partition. Returns 1 if + * disk->partition is null. + */ +static int +grub_partition_check_containment (const grub_disk_t disk, + const grub_partition_t part) +{ + if (disk->partition == NULL) + return 1; + + if (part->start + part->len > disk->partition->len) + { + char *partname; + + partname = grub_partition_get_name (disk->partition); + grub_dprintf ("partition", "sub-partition %s%d of (%s,%s) ends after parent.\n", + part->partmap->name, part->number + 1, disk->name, partname); +#ifdef GRUB_UTIL + grub_util_warn (_("Discarding improperly nested partition (%s,%s,%s%d)"), + disk->name, partname, part->partmap->name, part->number + 1); +#endif + grub_free (partname); + + return 0; + } + + return 1; +} + +/* Context for grub_partition_map_probe. */ +struct grub_partition_map_probe_ctx +{ + int partnum; + grub_partition_t p; +}; + +/* Helper for grub_partition_map_probe. */ +static int +probe_iter (grub_disk_t dsk, const grub_partition_t partition, void *data) +{ + struct grub_partition_map_probe_ctx *ctx = data; + + if (ctx->partnum != partition->number) + return 0; + + if (!(grub_partition_check_containment (dsk, partition))) + return 0; + + ctx->p = (grub_partition_t) grub_malloc (sizeof (*ctx->p)); + if (! ctx->p) + return 1; + + grub_memcpy (ctx->p, partition, sizeof (*ctx->p)); + return 1; +} + +static grub_partition_t +grub_partition_map_probe (const grub_partition_map_t partmap, + grub_disk_t disk, int partnum) +{ + struct grub_partition_map_probe_ctx ctx = { + .partnum = partnum, + .p = 0 + }; + + partmap->iterate (disk, probe_iter, &ctx); + if (grub_errno) + goto fail; + + return ctx.p; + + fail: + grub_free (ctx.p); + return 0; +} + +grub_partition_t +grub_partition_probe (struct grub_disk *disk, const char *str) +{ + grub_partition_t part = 0; + grub_partition_t curpart = 0; + grub_partition_t tail; + const char *ptr; + + part = tail = disk->partition; + + for (ptr = str; *ptr;) + { + grub_partition_map_t partmap; + int num; + const char *partname, *partname_end; + + partname = ptr; + while (*ptr && grub_isalpha (*ptr)) + ptr++; + partname_end = ptr; + num = grub_strtoul (ptr, (char **) &ptr, 0) - 1; + + curpart = 0; + /* Use the first partition map type found. */ + FOR_PARTITION_MAPS(partmap) + { + if (partname_end != partname && + (grub_strncmp (partmap->name, partname, partname_end - partname) + != 0 || partmap->name[partname_end - partname] != 0)) + continue; + + disk->partition = part; + curpart = grub_partition_map_probe (partmap, disk, num); + disk->partition = tail; + if (curpart) + break; + + if (grub_errno == GRUB_ERR_BAD_PART_TABLE) + { + /* Continue to next partition map type. */ + grub_errno = GRUB_ERR_NONE; + continue; + } + + break; + } + + if (! curpart) + { + while (part) + { + curpart = part->parent; + grub_free (part); + part = curpart; + } + return 0; + } + curpart->parent = part; + part = curpart; + if (! ptr || *ptr != ',') + break; + ptr++; + } + + return part; +} + +/* Context for grub_partition_iterate. */ +struct grub_partition_iterate_ctx +{ + int ret; + grub_partition_iterate_hook_t hook; + void *hook_data; +}; + +/* Helper for grub_partition_iterate. */ +static int +part_iterate (grub_disk_t dsk, const grub_partition_t partition, void *data) +{ + struct grub_partition_iterate_ctx *ctx = data; + struct grub_partition p = *partition; + + if (!(grub_partition_check_containment (dsk, partition))) + return 0; + + p.parent = dsk->partition; + dsk->partition = 0; + if (ctx->hook (dsk, &p, ctx->hook_data)) + { + ctx->ret = 1; + return 1; + } + if (p.start != 0) + { + const struct grub_partition_map *partmap; + dsk->partition = &p; + FOR_PARTITION_MAPS(partmap) + { + grub_err_t err; + err = partmap->iterate (dsk, part_iterate, ctx); + if (err) + grub_errno = GRUB_ERR_NONE; + if (ctx->ret) + break; + } + } + dsk->partition = p.parent; + return ctx->ret; +} + +int +grub_partition_iterate (struct grub_disk *disk, + grub_partition_iterate_hook_t hook, void *hook_data) +{ + struct grub_partition_iterate_ctx ctx = { + .ret = 0, + .hook = hook, + .hook_data = hook_data + }; + const struct grub_partition_map *partmap; + + FOR_PARTITION_MAPS(partmap) + { + grub_err_t err; + err = partmap->iterate (disk, part_iterate, &ctx); + if (err) + grub_errno = GRUB_ERR_NONE; + if (ctx.ret) + break; + } + + return ctx.ret; +} + +char * +grub_partition_get_name (const grub_partition_t partition) +{ + char *out = 0, *ptr; + grub_size_t needlen = 0; + grub_partition_t part; + if (!partition) + return grub_strdup (""); + for (part = partition; part; part = part->parent) + /* Even on 64-bit machines this buffer is enough to hold + longest number. */ + needlen += grub_strlen (part->partmap->name) + 1 + 27; + out = grub_malloc (needlen + 1); + if (!out) + return NULL; + + ptr = out + needlen; + *ptr = 0; + for (part = partition; part; part = part->parent) + { + char buf[27]; + grub_size_t len; + grub_snprintf (buf, sizeof (buf), "%d", part->number + 1); + len = grub_strlen (buf); + ptr -= len; + grub_memcpy (ptr, buf, len); + len = grub_strlen (part->partmap->name); + ptr -= len; + grub_memcpy (ptr, part->partmap->name, len); + *--ptr = ','; + } + grub_memmove (out, ptr + 1, out + needlen - ptr); + return out; +} diff --git a/grub-core/kern/powerpc/cache.S b/grub-core/kern/powerpc/cache.S new file mode 100644 index 000000000..d85e68d42 --- /dev/null +++ b/grub-core/kern/powerpc/cache.S @@ -0,0 +1,26 @@ +/* cache.S - Flush the processor cache for a specific region. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2007,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + .text + + .align 2 + .globl grub_arch_sync_caches +grub_arch_sync_caches: +#include "cache_flush.S" + blr diff --git a/grub-core/kern/powerpc/cache_flush.S b/grub-core/kern/powerpc/cache_flush.S new file mode 100644 index 000000000..1410f78b1 --- /dev/null +++ b/grub-core/kern/powerpc/cache_flush.S @@ -0,0 +1,43 @@ +/* cache.S - Flush the processor cache for a specific region. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2004,2007,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#undef CACHE_LINE_BYTES +#define CACHE_LINE_BYTES 32 + + /* `address' may not be CACHE_LINE_BYTES-aligned. */ + andi. 6, 3, CACHE_LINE_BYTES - 1 /* Find the misalignment. */ + add 4, 4, 6 /* Adjust `size' to compensate. */ + + /* Force the dcache lines to memory. */ + li 5, 0 +1: dcbst 5, 3 + addi 5, 5, CACHE_LINE_BYTES + cmpw 5, 4 + blt 1b + sync /* Force all dcbsts to complete. */ + + /* Invalidate the icache lines. */ + li 5, 0 +1: icbi 5, 3 + addi 5, 5, CACHE_LINE_BYTES + cmpw 5, 4 + blt 1b + sync /* Force all icbis to complete. */ + isync /* Discard partially executed instructions that were + loaded from the invalid icache. */ diff --git a/grub-core/kern/powerpc/compiler-rt.S b/grub-core/kern/powerpc/compiler-rt.S new file mode 100644 index 000000000..b3b912db6 --- /dev/null +++ b/grub-core/kern/powerpc/compiler-rt.S @@ -0,0 +1,130 @@ +/* + * Special support for eabi and SVR4 + * + * Copyright (C) 1995-2014 Free Software Foundation, Inc. + * Written By Michael Meissner + * 64-bit support written by David Edelsohn + * + * This file is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 3, or (at your option) any + * later version. + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * Under Section 7 of GPL version 3, you are granted additional + * permissions described in the GCC Runtime Library Exception, version + * 3.1, as published by the Free Software Foundation. + * + * You should have received a copy of the GNU General Public License and + * a copy of the GCC Runtime Library Exception along with this program; + * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + * . + */ + +/* Do any initializations needed for the eabi environment */ + +#include +#include + + .section ".text" + +#define CFI_RESTORE(reg) .cfi_restore reg +#define CFI_OFFSET(reg, off) .cfi_offset reg, off +#define CFI_DEF_CFA_REGISTER(reg) .cfi_def_cfa_register reg +#define CFI_STARTPROC .cfi_startproc +#define CFI_ENDPROC .cfi_endproc + +/* Routines for restoring integer registers, called by the compiler. */ +/* Called with r11 pointing to the stack header word of the caller of the */ +/* function, just beyond the end of the integer restore area. */ + +CFI_STARTPROC +CFI_DEF_CFA_REGISTER (11) +CFI_OFFSET (65, 4) +CFI_OFFSET (14, -72) +CFI_OFFSET (15, -68) +CFI_OFFSET (16, -64) +CFI_OFFSET (17, -60) +CFI_OFFSET (18, -56) +CFI_OFFSET (19, -52) +CFI_OFFSET (20, -48) +CFI_OFFSET (21, -44) +CFI_OFFSET (22, -40) +CFI_OFFSET (23, -36) +CFI_OFFSET (24, -32) +CFI_OFFSET (25, -28) +CFI_OFFSET (26, -24) +CFI_OFFSET (27, -20) +CFI_OFFSET (28, -16) +CFI_OFFSET (29, -12) +CFI_OFFSET (30, -8) +CFI_OFFSET (31, -4) +FUNCTION(_restgpr_14_x) lwz 14,-72(11) /* restore gp registers */ +CFI_RESTORE (14) +FUNCTION(_restgpr_15_x) lwz 15,-68(11) +CFI_RESTORE (15) +FUNCTION(_restgpr_16_x) lwz 16,-64(11) +CFI_RESTORE (16) +FUNCTION(_restgpr_17_x) lwz 17,-60(11) +CFI_RESTORE (17) +FUNCTION(_restgpr_18_x) lwz 18,-56(11) +CFI_RESTORE (18) +FUNCTION(_restgpr_19_x) lwz 19,-52(11) +CFI_RESTORE (19) +FUNCTION(_restgpr_20_x) lwz 20,-48(11) +CFI_RESTORE (20) +FUNCTION(_restgpr_21_x) lwz 21,-44(11) +CFI_RESTORE (21) +FUNCTION(_restgpr_22_x) lwz 22,-40(11) +CFI_RESTORE (22) +FUNCTION(_restgpr_23_x) lwz 23,-36(11) +CFI_RESTORE (23) +FUNCTION(_restgpr_24_x) lwz 24,-32(11) +CFI_RESTORE (24) +FUNCTION(_restgpr_25_x) lwz 25,-28(11) +CFI_RESTORE (25) +FUNCTION(_restgpr_26_x) lwz 26,-24(11) +CFI_RESTORE (26) +FUNCTION(_restgpr_27_x) lwz 27,-20(11) +CFI_RESTORE (27) +FUNCTION(_restgpr_28_x) lwz 28,-16(11) +CFI_RESTORE (28) +FUNCTION(_restgpr_29_x) lwz 29,-12(11) +CFI_RESTORE (29) +FUNCTION(_restgpr_30_x) lwz 30,-8(11) +CFI_RESTORE (30) +FUNCTION(_restgpr_31_x) lwz 0,4(11) + lwz 31,-4(11) +CFI_RESTORE (31) + mtlr 0 +CFI_RESTORE (65) + mr 1,11 +CFI_DEF_CFA_REGISTER (1) + blr +CFI_ENDPROC + +CFI_STARTPROC +FUNCTION(_savegpr_14) stw 14,-72(11) /* save gp registers */ +FUNCTION(_savegpr_15) stw 15,-68(11) +FUNCTION(_savegpr_16) stw 16,-64(11) +FUNCTION(_savegpr_17) stw 17,-60(11) +FUNCTION(_savegpr_18) stw 18,-56(11) +FUNCTION(_savegpr_19) stw 19,-52(11) +FUNCTION(_savegpr_20) stw 20,-48(11) +FUNCTION(_savegpr_21) stw 21,-44(11) +FUNCTION(_savegpr_22) stw 22,-40(11) +FUNCTION(_savegpr_23) stw 23,-36(11) +FUNCTION(_savegpr_24) stw 24,-32(11) +FUNCTION(_savegpr_25) stw 25,-28(11) +FUNCTION(_savegpr_26) stw 26,-24(11) +FUNCTION(_savegpr_27) stw 27,-20(11) +FUNCTION(_savegpr_28) stw 28,-16(11) +FUNCTION(_savegpr_29) stw 29,-12(11) +FUNCTION(_savegpr_30) stw 30,-8(11) +FUNCTION(_savegpr_31) stw 31,-4(11) + blr +CFI_ENDPROC diff --git a/grub-core/kern/powerpc/dl.c b/grub-core/kern/powerpc/dl.c new file mode 100644 index 000000000..3a7fa3ed3 --- /dev/null +++ b/grub-core/kern/powerpc/dl.c @@ -0,0 +1,167 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2004,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* Check if EHDR is a valid ELF header. */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS32 + || e->e_ident[EI_DATA] != ELFDATA2MSB + || e->e_machine != EM_PPC) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} + +/* For low-endian reverse lis and addr_high as well as ori and addr_low. */ +struct trampoline +{ + grub_uint32_t lis; + grub_uint32_t ori; + grub_uint32_t mtctr; + grub_uint32_t bctr; +}; + +static const struct trampoline trampoline_template = + { + 0x3d800000, + 0x618c0000, + 0x7d8903a6, + 0x4e800420, + }; + +#pragma GCC diagnostic ignored "-Wcast-align" + +grub_err_t +grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, + grub_size_t *got) +{ + const Elf_Ehdr *e = ehdr; + const Elf_Shdr *s; + unsigned i; + + *tramp = 0; + *got = 0; + + for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff); + i < e->e_shnum; + i++, s = (const Elf_Shdr *) ((const char *) s + e->e_shentsize)) + if (s->sh_type == SHT_RELA) + { + const Elf_Rela *rel, *max; + + for (rel = (const Elf_Rela *) ((const char *) e + s->sh_offset), + max = rel + s->sh_size / s->sh_entsize; + rel < max; + rel++) + if (ELF_R_TYPE (rel->r_info) == GRUB_ELF_R_PPC_REL24) + (*tramp)++; + + } + + *tramp *= sizeof (struct trampoline); + + return GRUB_ERR_NONE; +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + Elf_Rela *rel, *max; + + for (rel = (Elf_Rela *) ((char *) ehdr + s->sh_offset), + max = (Elf_Rela *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf_Rela *) ((char *) rel + s->sh_entsize)) + { + Elf_Word *addr; + Elf_Sym *sym; + grub_uint32_t value; + + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = (Elf_Word *) ((char *) seg->addr + rel->r_offset); + sym = (Elf_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + + /* On the PPC the value does not have an explicit + addend, add it. */ + value = sym->st_value + rel->r_addend; + switch (ELF_R_TYPE (rel->r_info)) + { + case GRUB_ELF_R_PPC_ADDR16_LO: + *(Elf_Half *) addr = value; + break; + + case GRUB_ELF_R_PPC_REL24: + { + Elf_Sword delta = value - (Elf_Word) addr; + + if (delta << 6 >> 6 != delta) + { + struct trampoline *tptr = mod->trampptr; + grub_memcpy (tptr, &trampoline_template, + sizeof (*tptr)); + delta = (grub_uint8_t *) tptr - (grub_uint8_t *) addr; + tptr->lis |= (((value) >> 16) & 0xffff); + tptr->ori |= ((value) & 0xffff); + mod->trampptr = tptr + 1; + } + + if (delta << 6 >> 6 != delta) + return grub_error (GRUB_ERR_BAD_MODULE, + "relocation overflow"); + *addr = (*addr & 0xfc000003) | (delta & 0x3fffffc); + break; + } + + case GRUB_ELF_R_PPC_ADDR16_HA: + *(Elf_Half *) addr = (value + 0x8000) >> 16; + break; + + case GRUB_ELF_R_PPC_ADDR32: + *addr = value; + break; + + case GRUB_ELF_R_PPC_REL32: + *addr = value - (Elf_Word) addr; + break; + + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/powerpc/ieee1275/startup.S b/grub-core/kern/powerpc/ieee1275/startup.S new file mode 100644 index 000000000..21c884b43 --- /dev/null +++ b/grub-core/kern/powerpc/ieee1275/startup.S @@ -0,0 +1,67 @@ +/* startup.S - Startup code for the PowerPC. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +.extern __bss_start +.extern _end + + .text + .align 2 + .globl start, _start +start: +_start: + li 2, 0 + li 13, 0 + + /* Stage1 won't zero BSS for us. In other cases, why not do it again? */ + lis 6, (__bss_start - 4)@h + ori 6, 6, (__bss_start - 4)@l + +2: stb 2, 4(6) + addi 6, 6, 1 + andi. 7, 6, 3 + cmpi 0, 1, 7, 0 + bne 2b + + lis 7, (_end - 4)@h + ori 7, 7, (_end - 4)@l + subf 7, 6, 7 + subi 8, 7, 1 + andi. 8, 8, 3 + addi 8, 8, 1 + sub 7, 7, 8 + + srwi 7, 7, 2 /* We store 4 bytes at a time. */ + mtctr 7 +2: stwu 2, 4(6) /* We know r2 is already 0 from above. */ + bdnz 2b + + mtctr 8 +2: stb 2, 4(6) /* We know r2 is already 0 from above. */ + addi 6, 6, 1 + bdnz 2b + + /* Store r5 in grub_ieee1275_entry_fn. */ + lis 9, grub_ieee1275_entry_fn@ha + stw 5, grub_ieee1275_entry_fn@l(9) + + bl grub_main +1: b 1b diff --git a/grub-core/kern/rescue_parser.c b/grub-core/kern/rescue_parser.c new file mode 100644 index 000000000..633836699 --- /dev/null +++ b/grub-core/kern/rescue_parser.c @@ -0,0 +1,84 @@ +/* rescue_parser.c - rescue mode parser */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +grub_err_t +grub_rescue_parse_line (char *line, + grub_reader_getline_t getline, void *getline_data) +{ + char *name; + int n; + grub_command_t cmd; + char **args; + + if (grub_parser_split_cmdline (line, getline, getline_data, &n, &args) + || n < 0) + return grub_errno; + + if (n == 0) + return GRUB_ERR_NONE; + + /* In case of an assignment set the environment accordingly + instead of calling a function. */ + if (n == 1) + { + char *val = grub_strchr (args[0], '='); + + if (val) + { + val[0] = 0; + grub_env_set (args[0], val + 1); + val[0] = '='; + goto quit; + } + } + + /* Get the command name. */ + name = args[0]; + + /* If nothing is specified, restart. */ + if (*name == '\0') + goto quit; + + cmd = grub_command_find (name); + if (cmd) + { + (cmd->func) (cmd, n - 1, &args[1]); + } + else + { + grub_printf_ (N_("Unknown command `%s'.\n"), name); + if (grub_command_find ("help")) + grub_printf ("Try `help' for usage\n"); + } + + quit: + /* Arguments are returned in single memory chunk separated by zeroes */ + grub_free (args[0]); + grub_free (args); + + return grub_errno; +} diff --git a/grub-core/kern/rescue_reader.c b/grub-core/kern/rescue_reader.c new file mode 100644 index 000000000..dcd7d4439 --- /dev/null +++ b/grub-core/kern/rescue_reader.c @@ -0,0 +1,98 @@ +/* rescue_reader.c - rescue mode reader */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#define GRUB_RESCUE_BUF_SIZE 256 + +static char linebuf[GRUB_RESCUE_BUF_SIZE]; + +/* Prompt to input a command and read the line. */ +static grub_err_t +grub_rescue_read_line (char **line, int cont, + void *data __attribute__ ((unused))) +{ + int c; + int pos = 0; + char str[4]; + + grub_printf ((cont) ? "> " : "grub rescue> "); + grub_memset (linebuf, 0, GRUB_RESCUE_BUF_SIZE); + + while ((c = grub_getkey ()) != '\n' && c != '\r') + { + if (grub_isprint (c)) + { + if (pos < GRUB_RESCUE_BUF_SIZE - 1) + { + str[0] = c; + str[1] = 0; + linebuf[pos++] = c; + grub_xputs (str); + } + } + else if (c == '\b') + { + if (pos > 0) + { + str[0] = c; + str[1] = ' '; + str[2] = c; + str[3] = 0; + linebuf[--pos] = 0; + grub_xputs (str); + } + } + grub_refresh (); + } + + grub_xputs ("\n"); + grub_refresh (); + + *line = grub_strdup (linebuf); + + return 0; +} + +void __attribute__ ((noreturn)) +grub_rescue_run (void) +{ + grub_printf ("Entering rescue mode...\n"); + + while (1) + { + char *line; + + /* Print an error, if any. */ + grub_print_error (); + grub_errno = GRUB_ERR_NONE; + + grub_rescue_read_line (&line, 0, NULL); + if (! line || line[0] == '\0') + continue; + + grub_rescue_parse_line (line, grub_rescue_read_line, NULL); + grub_free (line); + } +} diff --git a/grub-core/kern/sparc64/cache.S b/grub-core/kern/sparc64/cache.S new file mode 100644 index 000000000..1a16adde8 --- /dev/null +++ b/grub-core/kern/sparc64/cache.S @@ -0,0 +1,41 @@ +/* cache.S - Flush the processor cache for a specific region. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + + .file "cache.S" + + .text + +/* + * void grub_arch_sync_caches (void *address, grub_size_t len) + */ +FUNCTION(grub_arch_sync_caches) + brz,pn %o1, 2f + add %o0, %o1, %o1 + add %o1, 7, %o1 + andn %o1, 7, %o1 + andn %o0, 7, %o0 + sub %o1, %o0, %o1 +1: subcc %o1, 8, %o1 + bne,pt %icc, 1b + flush %o0 + %o1 +2: retl + nop + diff --git a/grub-core/kern/sparc64/dl.c b/grub-core/kern/sparc64/dl.c new file mode 100644 index 000000000..739be4717 --- /dev/null +++ b/grub-core/kern/sparc64/dl.c @@ -0,0 +1,186 @@ +/* dl.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2004,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* Check if EHDR is a valid ELF header. */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS64 + || e->e_ident[EI_DATA] != ELFDATA2MSB + || e->e_machine != EM_SPARCV9) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} + +#pragma GCC diagnostic ignored "-Wcast-align" + +struct trampoline +{ + grub_uint8_t code[0x28]; + grub_uint64_t addr; +}; + +static const grub_uint8_t trampoline_code[0x28] = +{ + /* 0: */ 0x82, 0x10, 0x00, 0x0f, /* mov %o7, %g1 */ + /* 4: */ 0x40, 0x00, 0x00, 0x02, /* call 0xc */ + /* 8: */ 0x01, 0x00, 0x00, 0x00, /* nop */ + /* c: */ 0x9e, 0x1b, 0xc0, 0x01, /* xor %o7, %g1, %o7 */ + /* 10: */ 0x82, 0x18, 0x40, 0x0f, /* xor %g1, %o7, %g1 */ + /* 14: */ 0x9e, 0x1b, 0xc0, 0x01, /* xor %o7, %g1, %o7 */ + /* 18: */ 0xc2, 0x58, 0x60, 0x24, /* ldx [ %g1 + 0x24 ], %g1 */ + /* 1c: */ 0x81, 0xc0, 0x40, 0x00, /* jmp %g1 */ + /* 20: */ 0x01, 0x00, 0x00, 0x00, /* nop */ + /* 24: */ 0x01, 0x00, 0x00, 0x00, /* nop */ +}; + +grub_err_t +grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp, + grub_size_t *got) +{ + const Elf_Ehdr *e = ehdr; + const Elf_Shdr *s; + unsigned i; + + *tramp = 0; + *got = 0; + + for (i = 0, s = (const Elf_Shdr *) ((grub_addr_t) e + e->e_shoff); + i < e->e_shnum; + i++, s = (const Elf_Shdr *) ((grub_addr_t) s + e->e_shentsize)) + if (s->sh_type == SHT_REL || s->sh_type == SHT_RELA) + { + const Elf_Rel *rel, *max; + + for (rel = (const Elf_Rel *) ((grub_addr_t) e + s->sh_offset), + max = rel + s->sh_size / s->sh_entsize; + rel < max; + rel = (const Elf_Rel *) ((grub_addr_t) rel + s->sh_entsize)) + switch (ELF_R_TYPE (rel->r_info)) + { + case R_SPARC_WDISP30: + { + *tramp += sizeof (struct trampoline); + break; + } + } + } + + return GRUB_ERR_NONE; +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + Elf_Rela *rel, *max; + + for (rel = (Elf_Rela *) ((char *) ehdr + s->sh_offset), + max = (Elf_Rela *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf_Rela *) ((char *) rel + s->sh_entsize)) + { + Elf_Word *addr; + Elf_Sym *sym; + Elf_Addr value; + + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr = (Elf_Word *) ((char *) seg->addr + rel->r_offset); + sym = (Elf_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + + value = sym->st_value + rel->r_addend; + switch (ELF_R_TYPE (rel->r_info) & 0xff) + { + case R_SPARC_32: /* 3 V-word32 */ + if (value & 0xFFFFFFFF00000000) + return grub_error (GRUB_ERR_BAD_MODULE, + "address out of 32 bits range"); + *addr = value; + break; + case R_SPARC_WDISP30: /* 7 V-disp30 */ + if (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) && + (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) + != 0xFFFFFFFF00000000)) + { + struct trampoline *tp = mod->trampptr; + mod->trampptr = tp + 1; + grub_memcpy (tp->code, trampoline_code, sizeof (tp->code)); + tp->addr = value; + value = (Elf_Addr) tp; + } + + if (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) && + (((value - (Elf_Addr) addr) & 0xFFFFFFFF00000000) + != 0xFFFFFFFF00000000)) + return grub_error (GRUB_ERR_BAD_MODULE, + "displacement out of 30 bits range"); + *addr = (*addr & 0xC0000000) | + (((grub_int32_t) ((value - (Elf_Addr) addr) >> 2)) & + 0x3FFFFFFF); + break; + case R_SPARC_HH22: /* 9 V-imm22 */ + *addr = (*addr & 0xFFC00000) | ((value >> 42) & 0x3FFFFF); + break; + case R_SPARC_HM10: /* 12 T-simm13 */ + *addr = (*addr & 0xFFFFFC00) | ((value >> 32) & 0x3FF); + break; + case R_SPARC_HI22: /* 9 V-imm22 */ + if (value >> 32) + return grub_error (GRUB_ERR_BAD_MODULE, + "address out of 32 bits range"); + /* Fallthrough. */ + case R_SPARC_LM22: + *addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF); + break; + case R_SPARC_LO10: /* 12 T-simm13 */ + *addr = (*addr & 0xFFFFFC00) | (value & 0x3FF); + break; + case R_SPARC_64: /* 32 V-xwords64 */ + *(Elf_Xword *) addr = value; + break; + case R_SPARC_OLO10: + *addr = (*addr & ~0x1fff) + | (((value & 0x3ff) + + (ELF_R_TYPE (rel->r_info) >> 8)) + & 0x1fff); + break; + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/sparc64/ieee1275/crt0.S b/grub-core/kern/sparc64/ieee1275/crt0.S new file mode 100644 index 000000000..03b916f05 --- /dev/null +++ b/grub-core/kern/sparc64/ieee1275/crt0.S @@ -0,0 +1,104 @@ +/* crt0.S - Startup code for the Sparc64. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#include +#include +#include + + .text + .align 4 + .globl _start +_start: + ba codestart + mov %o4, %o0 + + .org GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE + +VARIABLE(grub_total_module_size) + .word 0 + +codestart: + /* Copy the modules past the end of the kernel image. + * They are currently sitting in the BSS. + */ + sethi %hi(__bss_start + GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN - 1), %o2 + or %o2, %lo(__bss_start + GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN - 1), %o2 + srl %o2, GRUB_KERNEL_SPARC64_IEEE1275_LOG_MOD_ALIGN, %o2 + sll %o2, GRUB_KERNEL_SPARC64_IEEE1275_LOG_MOD_ALIGN, %o2 + sethi %hi(_end + GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN - 1), %o3 + or %o3, %lo(_end + GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN - 1), %o3 + srl %o3, GRUB_KERNEL_SPARC64_IEEE1275_LOG_MOD_ALIGN, %o3 + sll %o3, GRUB_KERNEL_SPARC64_IEEE1275_LOG_MOD_ALIGN, %o3 + sethi %hi(grub_total_module_size), %o4 + lduw [%o4 + %lo(grub_total_module_size)], %o4 + + add %o2, %o4, %o2 + add %o3, %o4, %o3 + + /* Save ieee1275 stack for future use by booter. */ + mov %o6, %o1 + /* Our future stack. */ + sethi %hi(GRUB_KERNEL_MACHINE_STACK_SIZE), %o5 + or %o5, %lo(GRUB_KERNEL_MACHINE_STACK_SIZE), %o5 + add %o3, %o5, %o6 + and %o6, ~0xff, %o6 + sub %o6, 2047, %o6 + + sub %o2, 4, %o2 + sub %o3, 4, %o3 +1: lduw [%o2], %o5 + stw %o5, [%o3] + subcc %o4, 4, %o4 + sub %o2, 4, %o2 + bne,pt %icc, 1b + sub %o3, 4, %o3 + + /* Now it's safe to clear out the BSS. */ + sethi %hi(__bss_start), %o2 + or %o2, %lo(__bss_start), %o2 +1: stb %g0, [%o2] + add %o2, 1, %o2 + and %o2, 7, %o3 + brnz %o3, 1b + nop + + sethi %hi(_end - 1), %o3 + or %o3, %lo(_end - 1), %o3 + srl %o3, 3, %o3 + sll %o3, 3, %o3 +1: stx %g0, [%o2] + add %o2, 8, %o2 + cmp %o2, %o3 + blt,pt %xcc, 1b + nop + + sethi %hi(_end), %o3 + or %o3, %lo(_end), %o3 +1: stb %g0, [%o2] + add %o2, 1, %o2 + cmp %o2, %o3 + blt,pt %xcc, 1b + nop + + sethi %hi(grub_ieee1275_original_stack), %o2 + stx %o1, [%o2 + %lo(grub_ieee1275_original_stack)] + sethi %hi(grub_ieee1275_entry_fn), %o2 + call grub_main + stx %o0, [%o2 + %lo(grub_ieee1275_entry_fn)] +1: ba,a 1b + nop diff --git a/grub-core/kern/sparc64/ieee1275/ieee1275.c b/grub-core/kern/sparc64/ieee1275/ieee1275.c new file mode 100644 index 000000000..53be692c3 --- /dev/null +++ b/grub-core/kern/sparc64/ieee1275/ieee1275.c @@ -0,0 +1,91 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +/* Sun specific ieee1275 interfaces used by GRUB. */ + +int +grub_ieee1275_claim_vaddr (grub_addr_t vaddr, grub_size_t size) +{ + struct claim_vaddr_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t align; + grub_ieee1275_cell_t size; + grub_ieee1275_cell_t virt; + grub_ieee1275_cell_t catch_result; + } + args; + + INIT_IEEE1275_COMMON (&args.common, "call-method", 5, 2); + args.method = (grub_ieee1275_cell_t) "claim"; + args.ihandle = grub_ieee1275_mmu; + args.align = 0; + args.size = size; + args.virt = vaddr; + args.catch_result = (grub_ieee1275_cell_t) -1; + + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + return args.catch_result; +} + +int +grub_ieee1275_alloc_physmem (grub_addr_t *paddr, grub_size_t size, + grub_uint32_t align) +{ + grub_uint32_t memory_ihandle; + struct alloc_physmem_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t ihandle; + grub_ieee1275_cell_t align; + grub_ieee1275_cell_t size; + grub_ieee1275_cell_t catch_result; + grub_ieee1275_cell_t phys_high; + grub_ieee1275_cell_t phys_low; + } + args; + grub_ssize_t actual = 0; + + grub_ieee1275_get_property (grub_ieee1275_chosen, "memory", + &memory_ihandle, sizeof (memory_ihandle), + &actual); + if (actual != sizeof (memory_ihandle)) + return -1; + + if (!align) + align = 1; + + INIT_IEEE1275_COMMON (&args.common, "call-method", 4, 3); + args.method = (grub_ieee1275_cell_t) "claim"; + args.ihandle = memory_ihandle; + args.align = (align ? align : 1); + args.size = size; + if (IEEE1275_CALL_ENTRY_FN (&args) == -1) + return -1; + + *paddr = args.phys_low; + + return args.catch_result; +} diff --git a/grub-core/kern/term.c b/grub-core/kern/term.c new file mode 100644 index 000000000..07720ee67 --- /dev/null +++ b/grub-core/kern/term.c @@ -0,0 +1,130 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +struct grub_term_output *grub_term_outputs_disabled; +struct grub_term_input *grub_term_inputs_disabled; +struct grub_term_output *grub_term_outputs; +struct grub_term_input *grub_term_inputs; + +/* Current color state. */ +grub_uint8_t grub_term_normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR; +grub_uint8_t grub_term_highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR; + +void (*grub_term_poll_usb) (int wait_for_completion) = NULL; +void (*grub_net_poll_cards_idle) (void) = NULL; + +/* Put a Unicode character. */ +static void +grub_putcode_dumb (grub_uint32_t code, + struct grub_term_output *term) +{ + struct grub_unicode_glyph c = + { + .base = code, + .variant = 0, + .attributes = 0, + .ncomb = 0, + .estimated_width = 1 + }; + + if (code == '\t' && term->getxy) + { + int n; + + n = GRUB_TERM_TAB_WIDTH - ((term->getxy (term).x) + % GRUB_TERM_TAB_WIDTH); + while (n--) + grub_putcode_dumb (' ', term); + + return; + } + + (term->putchar) (term, &c); + if (code == '\n') + grub_putcode_dumb ('\r', term); +} + +static void +grub_xputs_dumb (const char *str) +{ + for (; *str; str++) + { + grub_term_output_t term; + grub_uint32_t code = *str; + if (code > 0x7f) + code = '?'; + + FOR_ACTIVE_TERM_OUTPUTS(term) + grub_putcode_dumb (code, term); + } +} + +void (*grub_xputs) (const char *str) = grub_xputs_dumb; + +int +grub_getkey_noblock (void) +{ + grub_term_input_t term; + + if (grub_term_poll_usb) + grub_term_poll_usb (0); + + if (grub_net_poll_cards_idle) + grub_net_poll_cards_idle (); + + FOR_ACTIVE_TERM_INPUTS(term) + { + int key = term->getkey (term); + if (key != GRUB_TERM_NO_KEY) + return key; + } + + return GRUB_TERM_NO_KEY; +} + +int +grub_getkey (void) +{ + int ret; + + grub_refresh (); + + while (1) + { + ret = grub_getkey_noblock (); + if (ret != GRUB_TERM_NO_KEY) + return ret; + grub_cpu_idle (); + } +} + +void +grub_refresh (void) +{ + struct grub_term_output *term; + + FOR_ACTIVE_TERM_OUTPUTS(term) + grub_term_refresh (term); +} diff --git a/grub-core/kern/time.c b/grub-core/kern/time.c new file mode 100644 index 000000000..6521ec66f --- /dev/null +++ b/grub-core/kern/time.c @@ -0,0 +1,37 @@ +/* time.c - kernel time functions */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +typedef grub_uint64_t (*get_time_ms_func_t) (void); + +/* Function pointer to the implementation in use. */ +static get_time_ms_func_t get_time_ms_func; + +grub_uint64_t +grub_get_time_ms (void) +{ + return get_time_ms_func (); +} + +void +grub_install_get_time_ms (get_time_ms_func_t func) +{ + get_time_ms_func = func; +} diff --git a/grub-core/kern/uboot/hw.c b/grub-core/kern/uboot/hw.c new file mode 100644 index 000000000..272b83bd7 --- /dev/null +++ b/grub-core/kern/uboot/hw.c @@ -0,0 +1,112 @@ +/* hw.c - U-Boot hardware discovery */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +grub_addr_t start_of_ram; + +/* + * grub_uboot_probe_memory(): + * Queries U-Boot for available memory regions. + * + * Sets up heap near the image in memory and sets up "start_of_ram". + */ +void +grub_uboot_mm_init (void) +{ + struct sys_info *si = grub_uboot_get_sys_info (); + + grub_mm_init_region ((void *) grub_modules_get_end (), + GRUB_KERNEL_MACHINE_HEAP_SIZE); + + if (si && (si->mr_no != 0)) + { + int i; + start_of_ram = GRUB_UINT_MAX; + + for (i = 0; i < si->mr_no; i++) + if ((si->mr[i].flags & MR_ATTR_MASK) == MR_ATTR_DRAM) + if (si->mr[i].start < start_of_ram) + start_of_ram = si->mr[i].start; + } +} + +/* + * grub_uboot_probe_hardware(): + */ +grub_err_t +grub_uboot_probe_hardware (void) +{ + int devcount, i; + + devcount = grub_uboot_dev_enum (); + grub_dprintf ("init", "%d devices found\n", devcount); + + for (i = 0; i < devcount; i++) + { + struct device_info *devinfo = grub_uboot_dev_get (i); + + grub_dprintf ("init", "device handle: %d\n", i); + grub_dprintf ("init", " cookie\t= 0x%08x\n", + (grub_uint32_t) devinfo->cookie); + + if (devinfo->type & DEV_TYP_STOR) + { + grub_dprintf ("init", " type\t\t= DISK\n"); + grub_ubootdisk_register (devinfo); + } + else if (devinfo->type & DEV_TYP_NET) + { + /* Dealt with in ubootnet module. */ + grub_dprintf ("init", " type\t\t= NET (not supported yet)\n"); + } + else + { + grub_dprintf ("init", "%s: unknown device type", __FUNCTION__); + } + } + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + int i; + struct sys_info *si = grub_uboot_get_sys_info (); + + if (!si || (si->mr_no < 1)) + return GRUB_ERR_BUG; + + /* Iterate and call `hook'. */ + for (i = 0; i < si->mr_no; i++) + if ((si->mr[i].flags & MR_ATTR_MASK) == MR_ATTR_DRAM) + hook (si->mr[i].start, si->mr[i].size, GRUB_MEMORY_AVAILABLE, + hook_data); + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/uboot/init.c b/grub-core/kern/uboot/init.c new file mode 100644 index 000000000..5dcc106ed --- /dev/null +++ b/grub-core/kern/uboot/init.c @@ -0,0 +1,188 @@ +/* init.c - generic U-Boot initialization and finalization */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern char __bss_start[]; +extern char _end[]; +extern grub_size_t grub_total_module_size; +extern int (*grub_uboot_syscall_ptr) (int, int *, ...); +static unsigned long timer_start; + +extern grub_uint32_t grub_uboot_machine_type; +extern grub_addr_t grub_uboot_boot_data; + +void +grub_exit (void) +{ + grub_uboot_return (0); +} + +grub_uint32_t +grub_uboot_get_machine_type (void) +{ + return grub_uboot_machine_type; +} + +grub_addr_t +grub_uboot_get_boot_data (void) +{ + return grub_uboot_boot_data; +} + +static grub_uint64_t +uboot_timer_ms (void) +{ + static grub_uint32_t last = 0, high = 0; + grub_uint32_t cur = grub_uboot_get_timer (timer_start); + if (cur < last) + high++; + last = cur; + return (((grub_uint64_t) high) << 32) | cur; +} + +#ifdef __arm__ +static grub_uint64_t +rpi_timer_ms (void) +{ + static grub_uint32_t last = 0, high = 0; + grub_uint32_t cur = *(volatile grub_uint32_t *) 0x20003004; + if (cur < last) + high++; + last = cur; + return grub_divmod64 ((((grub_uint64_t) high) << 32) | cur, 1000, 0); +} +#endif + +void +grub_machine_init (void) +{ + int ver; + + /* First of all - establish connection with U-Boot */ + ver = grub_uboot_api_init (); + if (!ver) + { + /* Don't even have a console to log errors to... */ + grub_exit (); + } + else if (ver > API_SIG_VERSION) + { + /* Try to print an error message */ + grub_uboot_puts ("invalid U-Boot API version\n"); + } + + /* Initialize the console so that GRUB can display messages. */ + grub_console_init_early (); + + /* Enumerate memory and initialize the memory management system. */ + grub_uboot_mm_init (); + + /* Should be earlier but it needs memalign. */ +#ifdef __arm__ + grub_arm_enable_caches_mmu (); +#endif + + grub_dprintf ("init", "__bss_start: %p\n", __bss_start); + grub_dprintf ("init", "_end: %p\n", _end); + grub_dprintf ("init", "grub_modbase: %p\n", (void *) grub_modbase); + grub_dprintf ("init", "grub_modules_get_end(): %p\n", + (void *) grub_modules_get_end ()); + + /* Initialise full terminfo support */ + grub_console_init_lately (); + + /* Enumerate uboot devices */ + grub_uboot_probe_hardware (); + + /* Initialise timer */ +#ifdef __arm__ + if (grub_uboot_get_machine_type () == GRUB_ARM_MACHINE_TYPE_RASPBERRY_PI) + { + grub_install_get_time_ms (rpi_timer_ms); + } + else +#endif + { + timer_start = grub_uboot_get_timer (0); + grub_install_get_time_ms (uboot_timer_ms); + } + + /* Initialize */ + grub_ubootdisk_init (); +} + + +void +grub_machine_fini (int flags __attribute__ ((unused))) +{ +} + +/* + * grub_machine_get_bootlocation(): + * Called from kern/main.c, which expects a device name (minus parentheses) + * and a filesystem path back, if any are known. + * Any returned values must be pointers to dynamically allocated strings. + */ +void +grub_machine_get_bootlocation (char **device, char **path) +{ + char *tmp; + + tmp = grub_uboot_env_get ("grub_bootdev"); + if (tmp) + { + *device = grub_strdup (tmp); + if (*device == NULL) + return; + } + else + *device = NULL; + + tmp = grub_uboot_env_get ("grub_bootpath"); + if (tmp) + { + *path = grub_strdup (tmp); + if (*path == NULL) + return; + } + else + *path = NULL; +} + +void +grub_uboot_fini (void) +{ + grub_ubootdisk_fini (); + grub_console_fini (); +} diff --git a/grub-core/kern/uboot/uboot.c b/grub-core/kern/uboot/uboot.c new file mode 100644 index 000000000..6800a4beb --- /dev/null +++ b/grub-core/kern/uboot/uboot.c @@ -0,0 +1,326 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +/* + * The main syscall entry point is not reentrant, only one call is + * serviced until finished. + * + * int syscall(int call, int *retval, ...) + * e.g. syscall(1, int *, u_int32_t, u_int32_t, u_int32_t, u_int32_t); + * + * call: syscall number + * + * retval: points to the return value placeholder, this is the place the + * syscall puts its return value, if NULL the caller does not + * expect a return value + * + * ... syscall arguments (variable number) + * + * returns: 0 if the call not found, 1 if serviced + */ + +extern int (*grub_uboot_syscall_ptr) (int, int *, ...); +extern int grub_uboot_syscall (int, int *, ...); +extern grub_addr_t grub_uboot_search_hint; + +static struct sys_info uboot_sys_info; +static struct mem_region uboot_mem_info[5]; +static struct device_info * devices; +static int num_devices; + +int +grub_uboot_api_init (void) +{ + struct api_signature *start, *end; + struct api_signature *p; + + if (grub_uboot_search_hint) + { + /* Extended search range to work around Trim Slice U-Boot issue */ + start = (struct api_signature *) ((grub_uboot_search_hint & ~0x000fffff) + - 0x00500000); + end = + (struct api_signature *) ((grub_addr_t) start + UBOOT_API_SEARCH_LEN - + API_SIG_MAGLEN + 0x00500000); + } + else + { + start = 0; + end = (struct api_signature *) (256 * 1024 * 1024); + } + + /* Structure alignment is (at least) 8 bytes */ + for (p = start; p < end; p = (void *) ((grub_addr_t) p + 8)) + { + if (grub_memcmp (&(p->magic), API_SIG_MAGIC, API_SIG_MAGLEN) == 0) + { + grub_uboot_syscall_ptr = p->syscall; + return p->version; + } + } + + return 0; +} + +/* + * All functions below are wrappers around the grub_uboot_syscall() function + */ + +int +grub_uboot_getc (void) +{ + int c; + if (!grub_uboot_syscall (API_GETC, NULL, &c)) + return -1; + + return c; +} + +int +grub_uboot_tstc (void) +{ + int c; + if (!grub_uboot_syscall (API_TSTC, NULL, &c)) + return -1; + + return c; +} + +void +grub_uboot_putc (int c) +{ + grub_uboot_syscall (API_PUTC, NULL, &c); +} + +void +grub_uboot_puts (const char *s) +{ + grub_uboot_syscall (API_PUTS, NULL, s); +} + +void +grub_uboot_reset (void) +{ + grub_uboot_syscall (API_RESET, NULL, 0); +} + +struct sys_info * +grub_uboot_get_sys_info (void) +{ + int retval; + + grub_memset (&uboot_sys_info, 0, sizeof (uboot_sys_info)); + grub_memset (&uboot_mem_info, 0, sizeof (uboot_mem_info)); + uboot_sys_info.mr = uboot_mem_info; + uboot_sys_info.mr_no = sizeof (uboot_mem_info) / sizeof (struct mem_region); + + if (grub_uboot_syscall (API_GET_SYS_INFO, &retval, &uboot_sys_info)) + if (retval == 0) + return &uboot_sys_info; + + return NULL; +} + +void +grub_uboot_udelay (grub_uint32_t usec) +{ + grub_uboot_syscall (API_UDELAY, NULL, &usec); +} + +grub_uint32_t +grub_uboot_get_timer (grub_uint32_t base) +{ + grub_uint32_t current; + + if (!grub_uboot_syscall (API_GET_TIMER, NULL, ¤t, &base)) + return 0; + + return current; +} + +int +grub_uboot_dev_enum (void) +{ + struct device_info * enum_devices; + int num_enum_devices, max_devices; + + if (num_devices) + return num_devices; + + max_devices = 2; + enum_devices = grub_malloc (sizeof(struct device_info) * max_devices); + if (!enum_devices) + return 0; + + /* + * The API_DEV_ENUM call starts a fresh enumeration when passed a + * struct device_info with a NULL cookie, and then depends on having + * the previously enumerated device cookie "seeded" into the target + * structure. + */ + + enum_devices[0].cookie = NULL; + num_enum_devices = 0; + + if (grub_uboot_syscall (API_DEV_ENUM, NULL, + &enum_devices[num_enum_devices]) == 0) + goto error; + + num_enum_devices++; + + while (enum_devices[num_enum_devices - 1].cookie != NULL) + { + if (num_enum_devices == max_devices) + { + struct device_info *tmp; + int new_max; + new_max = max_devices * 2; + tmp = grub_realloc (enum_devices, + sizeof (struct device_info) * new_max); + if (!tmp) + { + /* Failed to realloc, so return what we have */ + break; + } + enum_devices = tmp; + max_devices = new_max; + } + + enum_devices[num_enum_devices].cookie = + enum_devices[num_enum_devices - 1].cookie; + if (grub_uboot_syscall (API_DEV_ENUM, NULL, + &enum_devices[num_enum_devices]) == 0) + goto error; + + if (enum_devices[num_enum_devices].cookie == NULL) + break; + + num_enum_devices++; + } + + devices = enum_devices; + return num_devices = num_enum_devices; + + error: + grub_free (enum_devices); + return 0; +} + +#define VALID_DEV(x) (((x) < num_devices) && ((x) >= 0)) +#define OPEN_DEV(x) ((x->state == DEV_STA_OPEN)) + +struct device_info * +grub_uboot_dev_get (int index) +{ + if (VALID_DEV (index)) + return &devices[index]; + + return NULL; +} + + +int +grub_uboot_dev_open (struct device_info *dev) +{ + int retval; + + if (!grub_uboot_syscall (API_DEV_OPEN, &retval, dev)) + return -1; + + return retval; +} + +int +grub_uboot_dev_close (struct device_info *dev) +{ + int retval; + + if (!grub_uboot_syscall (API_DEV_CLOSE, &retval, dev)) + return -1; + + return retval; +} + + +int +grub_uboot_dev_read (struct device_info *dev, void *buf, grub_size_t blocks, + grub_uint32_t start, grub_size_t * real_blocks) +{ + int retval; + + if (!OPEN_DEV (dev)) + return -1; + + if (!grub_uboot_syscall (API_DEV_READ, &retval, dev, buf, + &blocks, &start, real_blocks)) + return -1; + + return retval; +} + +int +grub_uboot_dev_recv (struct device_info *dev, void *buf, + int size, int *real_size) +{ + int retval; + + if (!OPEN_DEV (dev)) + return -1; + + if (!grub_uboot_syscall (API_DEV_READ, &retval, dev, buf, &size, real_size)) + return -1; + + return retval; + +} + +int +grub_uboot_dev_send (struct device_info *dev, void *buf, int size) +{ + int retval; + + if (!OPEN_DEV (dev)) + return -1; + + if (!grub_uboot_syscall (API_DEV_WRITE, &retval, dev, buf, &size)) + return -1; + + return retval; +} + +char * +grub_uboot_env_get (const char *name) +{ + char *value; + + if (!grub_uboot_syscall (API_ENV_GET, NULL, name, &value)) + return NULL; + + return value; +} + +void +grub_uboot_env_set (const char *name, const char *value) +{ + grub_uboot_syscall (API_ENV_SET, NULL, name, value); +} diff --git a/grub-core/kern/vga_init.c b/grub-core/kern/vga_init.c new file mode 100644 index 000000000..3fe2f16de --- /dev/null +++ b/grub-core/kern/vga_init.c @@ -0,0 +1,128 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#ifndef __mips__ +#include +#include +#endif +#include +#include +#include + +static struct {grub_uint8_t r, g, b, a; } colors[] = + { + // {R, G, B, A} + {0x00, 0x00, 0x00, 0xFF}, // 0 = black + {0x00, 0x00, 0xA8, 0xFF}, // 1 = blue + {0x00, 0xA8, 0x00, 0xFF}, // 2 = green + {0x00, 0xA8, 0xA8, 0xFF}, // 3 = cyan + {0xA8, 0x00, 0x00, 0xFF}, // 4 = red + {0xA8, 0x00, 0xA8, 0xFF}, // 5 = magenta + {0xA8, 0x54, 0x00, 0xFF}, // 6 = brown + {0xA8, 0xA8, 0xA8, 0xFF}, // 7 = light gray + + {0x54, 0x54, 0x54, 0xFF}, // 8 = dark gray + {0x54, 0x54, 0xFE, 0xFF}, // 9 = bright blue + {0x54, 0xFE, 0x54, 0xFF}, // 10 = bright green + {0x54, 0xFE, 0xFE, 0xFF}, // 11 = bright cyan + {0xFE, 0x54, 0x54, 0xFF}, // 12 = bright red + {0xFE, 0x54, 0xFE, 0xFF}, // 13 = bright magenta + {0xFE, 0xFE, 0x54, 0xFF}, // 14 = yellow + {0xFE, 0xFE, 0xFE, 0xFF} // 15 = white + }; + +#include + +#ifdef __mips__ +#define VGA_ADDR 0xb00a0000 +#else +#define VGA_ADDR 0xa0000 +#endif + +static void +load_font (void) +{ + unsigned i; + + grub_vga_gr_write (0 << 2, GRUB_VGA_GR_GR6); + + grub_vga_sr_write (GRUB_VGA_SR_MEMORY_MODE_NORMAL, GRUB_VGA_SR_MEMORY_MODE); + grub_vga_sr_write (1 << GRUB_VGA_TEXT_FONT_PLANE, + GRUB_VGA_SR_MAP_MASK_REGISTER); + + grub_vga_gr_write (0, GRUB_VGA_GR_DATA_ROTATE); + grub_vga_gr_write (0, GRUB_VGA_GR_MODE); + grub_vga_gr_write (0xff, GRUB_VGA_GR_BITMASK); + + for (i = 0; i < 128; i++) + grub_memcpy ((void *) (VGA_ADDR + 32 * i), ascii_bitmaps + 16 * i, 16); +} + +static void +load_palette (void) +{ + unsigned i; + for (i = 0; i < 16; i++) + grub_vga_write_arx (i, i); + + for (i = 0; i < ARRAY_SIZE (colors); i++) + grub_vga_palette_write (i, colors[i].r, colors[i].g, colors[i].b); +} + +void +grub_qemu_init_cirrus (void) +{ + grub_outb (GRUB_VGA_IO_MISC_COLOR, + GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_MISC_WRITE); + + load_font (); + + grub_vga_gr_write (GRUB_VGA_GR_GR6_MMAP_CGA, GRUB_VGA_GR_GR6); + grub_vga_gr_write (GRUB_VGA_GR_MODE_ODD_EVEN, GRUB_VGA_GR_MODE); + + grub_vga_sr_write (GRUB_VGA_SR_MEMORY_MODE_NORMAL, GRUB_VGA_SR_MEMORY_MODE); + + grub_vga_sr_write ((1 << GRUB_VGA_TEXT_TEXT_PLANE) + | (1 << GRUB_VGA_TEXT_ATTR_PLANE), + GRUB_VGA_SR_MAP_MASK_REGISTER); + + grub_vga_cr_write (15, GRUB_VGA_CR_CELL_HEIGHT); + grub_vga_cr_write (79, GRUB_VGA_CR_HORIZ_END); + grub_vga_cr_write (40, GRUB_VGA_CR_PITCH); + + int vert = 25 * 16; + grub_vga_cr_write (vert & 0xff, GRUB_VGA_CR_VDISPLAY_END); + grub_vga_cr_write (((vert >> GRUB_VGA_CR_OVERFLOW_HEIGHT1_SHIFT) + & GRUB_VGA_CR_OVERFLOW_HEIGHT1_MASK) + | ((vert >> GRUB_VGA_CR_OVERFLOW_HEIGHT2_SHIFT) + & GRUB_VGA_CR_OVERFLOW_HEIGHT2_MASK), + GRUB_VGA_CR_OVERFLOW); + + load_palette (); + + grub_vga_write_arx (GRUB_VGA_ARX_MODE_TEXT, GRUB_VGA_ARX_MODE); + grub_vga_write_arx (0, GRUB_VGA_ARX_COLOR_SELECT); + + grub_vga_sr_write (GRUB_VGA_SR_CLOCKING_MODE_8_DOT_CLOCK, + GRUB_VGA_SR_CLOCKING_MODE); + + grub_vga_cr_write (14, GRUB_VGA_CR_CURSOR_START); + grub_vga_cr_write (15, GRUB_VGA_CR_CURSOR_END); + + grub_outb (0x20, GRUB_MACHINE_PCI_IO_BASE + GRUB_VGA_IO_ARX); +} diff --git a/grub-core/kern/x86_64/dl.c b/grub-core/kern/x86_64/dl.c new file mode 100644 index 000000000..440690673 --- /dev/null +++ b/grub-core/kern/x86_64/dl.c @@ -0,0 +1,115 @@ +/* dl-x86_64.c - arch-dependent part of loadable module support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2005,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +/* Check if EHDR is a valid ELF header. */ +grub_err_t +grub_arch_dl_check_header (void *ehdr) +{ + Elf64_Ehdr *e = ehdr; + + /* Check the magic numbers. */ + if (e->e_ident[EI_CLASS] != ELFCLASS64 + || e->e_ident[EI_DATA] != ELFDATA2LSB + || e->e_machine != EM_X86_64) + return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic")); + + return GRUB_ERR_NONE; +} + +/* Relocate symbols. */ +grub_err_t +grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, + Elf_Shdr *s, grub_dl_segment_t seg) +{ + Elf64_Rela *rel, *max; + + for (rel = (Elf64_Rela *) ((char *) ehdr + s->sh_offset), + max = (Elf64_Rela *) ((char *) rel + s->sh_size); + rel < max; + rel = (Elf64_Rela *) ((char *) rel + s->sh_entsize)) + { + Elf64_Word *addr32; + Elf64_Xword *addr64; + Elf64_Sym *sym; + + if (seg->size < rel->r_offset) + return grub_error (GRUB_ERR_BAD_MODULE, + "reloc offset is out of the segment"); + + addr32 = (Elf64_Word *) ((char *) seg->addr + rel->r_offset); + addr64 = (Elf64_Xword *) addr32; + sym = (Elf64_Sym *) ((char *) mod->symtab + + mod->symsize * ELF_R_SYM (rel->r_info)); + + switch (ELF_R_TYPE (rel->r_info)) + { + case R_X86_64_64: + *addr64 += rel->r_addend + sym->st_value; + break; + + case R_X86_64_PC32: + { + grub_int64_t value; + value = ((grub_int32_t) *addr32) + rel->r_addend + sym->st_value - + (Elf64_Xword) (grub_addr_t) seg->addr - rel->r_offset; + if (value != (grub_int32_t) value) + return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range"); + *addr32 = value; + } + break; + + case R_X86_64_PC64: + { + *addr64 += rel->r_addend + sym->st_value - + (Elf64_Xword) (grub_addr_t) seg->addr - rel->r_offset; + } + break; + + case R_X86_64_32: + { + grub_uint64_t value = *addr32 + rel->r_addend + sym->st_value; + if (value != (grub_uint32_t) value) + return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range"); + *addr32 = value; + } + break; + case R_X86_64_32S: + { + grub_int64_t value = ((grub_int32_t) *addr32) + rel->r_addend + sym->st_value; + if (value != (grub_int32_t) value) + return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range"); + *addr32 = value; + } + break; + + default: + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + N_("relocation 0x%x is not implemented yet"), + ELF_R_TYPE (rel->r_info)); + } + } + + return GRUB_ERR_NONE; +} diff --git a/grub-core/kern/x86_64/efi/callwrap.S b/grub-core/kern/x86_64/efi/callwrap.S new file mode 100644 index 000000000..1337fd9fc --- /dev/null +++ b/grub-core/kern/x86_64/efi/callwrap.S @@ -0,0 +1,129 @@ +/* callwrap.S - wrapper for x86_64 efi calls */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +/* + * x86_64 uses registry to pass parameters. Unfortunately, gcc and efi use + * different call conversion, so we need to do some conversion. + * + * gcc: + * %rdi, %rsi, %rdx, %rcx, %r8, %r9, 8(%rsp), 16(%rsp), ... + * + * efi: + * %rcx, %rdx, %r8, %r9, 32(%rsp), 40(%rsp), 48(%rsp), ... + * + */ + + .file "callwrap.S" + .text + +FUNCTION(efi_wrap_0) + subq $40, %rsp + call *%rdi + addq $40, %rsp + ret + +FUNCTION(efi_wrap_1) + subq $40, %rsp + mov %rsi, %rcx + call *%rdi + addq $40, %rsp + ret + +FUNCTION(efi_wrap_2) + subq $40, %rsp + mov %rsi, %rcx + call *%rdi + addq $40, %rsp + ret + +FUNCTION(efi_wrap_3) + subq $40, %rsp + mov %rcx, %r8 + mov %rsi, %rcx + call *%rdi + addq $40, %rsp + ret + +FUNCTION(efi_wrap_4) + subq $40, %rsp + mov %r8, %r9 + mov %rcx, %r8 + mov %rsi, %rcx + call *%rdi + addq $40, %rsp + ret + +FUNCTION(efi_wrap_5) + subq $40, %rsp + mov %r9, 32(%rsp) + mov %r8, %r9 + mov %rcx, %r8 + mov %rsi, %rcx + call *%rdi + addq $40, %rsp + ret + +FUNCTION(efi_wrap_6) + subq $56, %rsp + mov 56+8(%rsp), %rax + mov %rax, 40(%rsp) + mov %r9, 32(%rsp) + mov %r8, %r9 + mov %rcx, %r8 + mov %rsi, %rcx + call *%rdi + addq $56, %rsp + ret + +FUNCTION(efi_wrap_7) + subq $88, %rsp + mov 88+16(%rsp), %rax + mov %rax, 48(%rsp) + mov 88+8(%rsp), %rax + mov %rax, 40(%rsp) + mov %r9, 32(%rsp) + mov %r8, %r9 + mov %rcx, %r8 + mov %rsi, %rcx + call *%rdi + addq $88, %rsp + ret + +FUNCTION(efi_wrap_10) + subq $88, %rsp + mov 88+40(%rsp), %rax + mov %rax, 72(%rsp) + mov 88+32(%rsp), %rax + mov %rax, 64(%rsp) + mov 88+24(%rsp), %rax + mov %rax, 56(%rsp) + mov 88+16(%rsp), %rax + mov %rax, 48(%rsp) + mov 88+8(%rsp), %rax + mov %rax, 40(%rsp) + mov %r9, 32(%rsp) + mov %r8, %r9 + mov %rcx, %r8 + mov %rsi, %rcx + call *%rdi + addq $88, %rsp + ret diff --git a/grub-core/kern/x86_64/efi/startup.S b/grub-core/kern/x86_64/efi/startup.S new file mode 100644 index 000000000..9357e5c5d --- /dev/null +++ b/grub-core/kern/x86_64/efi/startup.S @@ -0,0 +1,35 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "startup.S" + .text + .globl start, _start + .code64 + +start: +_start: + movq %rcx, EXT_C(grub_efi_image_handle)(%rip) + movq %rdx, EXT_C(grub_efi_system_table)(%rip) + + andq $~0xf, %rsp + call EXT_C(grub_main) + /* Doesn't return. */ diff --git a/grub-core/kern/x86_64/xen/hypercall.S b/grub-core/kern/x86_64/xen/hypercall.S new file mode 100644 index 000000000..9b04db6a0 --- /dev/null +++ b/grub-core/kern/x86_64/xen/hypercall.S @@ -0,0 +1,53 @@ +/* hypercall.S - wrappers for Xen hypercalls */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +FUNCTION(grub_xen_sched_op) + movq $__HYPERVISOR_sched_op, %rax + syscall + ret + +FUNCTION(grub_xen_event_channel_op) + movq $__HYPERVISOR_event_channel_op, %rax + syscall + ret + +FUNCTION(grub_xen_update_va_mapping) + movq $__HYPERVISOR_update_va_mapping, %rax + syscall + ret + +FUNCTION(grub_xen_mmuext_op) + movq %rcx, %r10 + movq $__HYPERVISOR_mmuext_op, %rax + syscall + ret + +FUNCTION(grub_xen_grant_table_op) + movq $__HYPERVISOR_grant_table_op, %rax + syscall + ret + +FUNCTION(grub_xen_mmu_update) + movq %rcx, %r10 + movq $__HYPERVISOR_mmu_update, %rax + syscall + ret diff --git a/grub-core/kern/x86_64/xen/startup.S b/grub-core/kern/x86_64/xen/startup.S new file mode 100644 index 000000000..21a139f40 --- /dev/null +++ b/grub-core/kern/x86_64/xen/startup.S @@ -0,0 +1,39 @@ +/* startup.S - bootstrap GRUB itself */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "startup.S" + .text + .globl start, _start + .code64 + +start: +_start: + leaq LOCAL(stack_end), %rsp + movq %rsi, EXT_C(grub_xen_start_page_addr)(%rip) + + andq $~0xf, %rsp + call EXT_C(grub_main) + /* Doesn't return. */ + + .bss + .space (1 << 22) +LOCAL(stack_end): diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c new file mode 100644 index 000000000..0559c033c --- /dev/null +++ b/grub-core/kern/xen/init.c @@ -0,0 +1,580 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +grub_addr_t grub_modbase; +struct start_info *grub_xen_start_page_addr; +volatile struct xencons_interface *grub_xen_xcons; +volatile struct shared_info *grub_xen_shared_info; +volatile struct xenstore_domain_interface *grub_xen_xenstore; +volatile grant_entry_v1_t *grub_xen_grant_table; +static const grub_size_t total_grants = + GRUB_XEN_PAGE_SIZE / sizeof (grub_xen_grant_table[0]); +grub_size_t grub_xen_n_allocated_shared_pages; + +static grub_xen_mfn_t +grub_xen_ptr2mfn (void *ptr) +{ + grub_xen_mfn_t *mfn_list = + (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list; + return mfn_list[(grub_addr_t) ptr >> GRUB_XEN_LOG_PAGE_SIZE]; +} + +void * +grub_xen_alloc_shared_page (domid_t dom, grub_xen_grant_t * grnum) +{ + void *ret; + grub_xen_mfn_t mfn; + volatile grant_entry_v1_t *entry; + + /* Avoid 0. */ + for (entry = grub_xen_grant_table; + entry < grub_xen_grant_table + total_grants; entry++) + if (!entry->flags) + break; + + if (entry == grub_xen_grant_table + total_grants) + { + grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of grant entries"); + return NULL; + } + ret = grub_memalign (GRUB_XEN_PAGE_SIZE, GRUB_XEN_PAGE_SIZE); + if (!ret) + return NULL; + mfn = grub_xen_ptr2mfn (ret); + entry->frame = mfn; + entry->domid = dom; + mb (); + entry->flags = GTF_permit_access; + mb (); + *grnum = entry - grub_xen_grant_table; + grub_xen_n_allocated_shared_pages++; + return ret; +} + +void +grub_xen_free_shared_page (void *ptr) +{ + grub_xen_mfn_t mfn; + volatile grant_entry_v1_t *entry; + + mfn = grub_xen_ptr2mfn (ptr); + for (entry = grub_xen_grant_table + 1; + entry < grub_xen_grant_table + total_grants; entry++) + if (entry->flags && entry->frame == mfn) + { + mb (); + entry->flags = 0; + mb (); + entry->frame = 0; + mb (); + } + grub_xen_n_allocated_shared_pages--; +} + +void +grub_machine_get_bootlocation (char **device __attribute__ ((unused)), + char **path __attribute__ ((unused))) +{ +} + +static grub_uint8_t window[GRUB_XEN_PAGE_SIZE] + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE))); + +#ifdef __x86_64__ +#define NUMBER_OF_LEVELS 4 +#else +#define NUMBER_OF_LEVELS 3 +#endif + +#define LOG_POINTERS_PER_PAGE 9 +#define POINTERS_PER_PAGE (1 << LOG_POINTERS_PER_PAGE) + +void +grub_xen_store_send (const void *buf_, grub_size_t len) +{ + const grub_uint8_t *buf = buf_; + struct evtchn_send send; + int event_sent = 0; + while (len) + { + grub_size_t avail, inbuf; + grub_size_t prod, cons; + mb (); + prod = grub_xen_xenstore->req_prod; + cons = grub_xen_xenstore->req_cons; + if (prod >= cons + sizeof (grub_xen_xenstore->req)) + { + if (!event_sent) + { + send.port = grub_xen_start_page_addr->store_evtchn; + grub_xen_event_channel_op (EVTCHNOP_send, &send); + event_sent = 1; + } + grub_xen_sched_op (SCHEDOP_yield, 0); + continue; + } + event_sent = 0; + avail = cons + sizeof (grub_xen_xenstore->req) - prod; + inbuf = (~prod & (sizeof (grub_xen_xenstore->req) - 1)) + 1; + if (avail > inbuf) + avail = inbuf; + if (avail > len) + avail = len; + grub_memcpy ((void *) &grub_xen_xenstore->req[prod & (sizeof (grub_xen_xenstore->req) - 1)], + buf, avail); + buf += avail; + len -= avail; + mb (); + grub_xen_xenstore->req_prod += avail; + mb (); + if (!event_sent) + { + send.port = grub_xen_start_page_addr->store_evtchn; + grub_xen_event_channel_op (EVTCHNOP_send, &send); + event_sent = 1; + } + grub_xen_sched_op (SCHEDOP_yield, 0); + } +} + +void +grub_xen_store_recv (void *buf_, grub_size_t len) +{ + grub_uint8_t *buf = buf_; + struct evtchn_send send; + int event_sent = 0; + while (len) + { + grub_size_t avail, inbuf; + grub_size_t prod, cons; + mb (); + prod = grub_xen_xenstore->rsp_prod; + cons = grub_xen_xenstore->rsp_cons; + if (prod <= cons) + { + if (!event_sent) + { + send.port = grub_xen_start_page_addr->store_evtchn; + grub_xen_event_channel_op (EVTCHNOP_send, &send); + event_sent = 1; + } + grub_xen_sched_op (SCHEDOP_yield, 0); + continue; + } + event_sent = 0; + avail = prod - cons; + inbuf = (~cons & (sizeof (grub_xen_xenstore->req) - 1)) + 1; + if (avail > inbuf) + avail = inbuf; + if (avail > len) + avail = len; + grub_memcpy (buf, + (void *) &grub_xen_xenstore->rsp[cons & (sizeof (grub_xen_xenstore->rsp) - 1)], + avail); + buf += avail; + len -= avail; + mb (); + grub_xen_xenstore->rsp_cons += avail; + mb (); + if (!event_sent) + { + send.port = grub_xen_start_page_addr->store_evtchn; + grub_xen_event_channel_op(EVTCHNOP_send, &send); + event_sent = 1; + } + grub_xen_sched_op(SCHEDOP_yield, 0); + } +} + +void * +grub_xenstore_get_file (const char *dir, grub_size_t *len) +{ + struct xsd_sockmsg msg; + char *buf; + grub_size_t dirlen = grub_strlen (dir) + 1; + + if (len) + *len = 0; + + grub_memset (&msg, 0, sizeof (msg)); + msg.type = XS_READ; + msg.len = dirlen; + grub_xen_store_send (&msg, sizeof (msg)); + grub_xen_store_send (dir, dirlen); + grub_xen_store_recv (&msg, sizeof (msg)); + buf = grub_malloc (msg.len + 1); + if (!buf) + return NULL; + grub_dprintf ("xen", "msg type = %d, len = %d\n", msg.type, msg.len); + grub_xen_store_recv (buf, msg.len); + buf[msg.len] = '\0'; + if (msg.type == XS_ERROR) + { + grub_error (GRUB_ERR_IO, "couldn't read xenstorage `%s': %s", dir, buf); + grub_free (buf); + return NULL; + } + if (len) + *len = msg.len; + return buf; +} + +grub_err_t +grub_xenstore_write_file (const char *dir, const void *buf, grub_size_t len) +{ + struct xsd_sockmsg msg; + grub_size_t dirlen = grub_strlen (dir) + 1; + char *resp; + + grub_memset (&msg, 0, sizeof (msg)); + msg.type = XS_WRITE; + msg.len = dirlen + len; + grub_xen_store_send (&msg, sizeof (msg)); + grub_xen_store_send (dir, dirlen); + grub_xen_store_send (buf, len); + grub_xen_store_recv (&msg, sizeof (msg)); + resp = grub_malloc (msg.len + 1); + if (!resp) + return grub_errno; + grub_dprintf ("xen", "msg type = %d, len = %d\n", msg.type, msg.len); + grub_xen_store_recv (resp, msg.len); + resp[msg.len] = '\0'; + if (msg.type == XS_ERROR) + { + grub_dprintf ("xen", "error = %s\n", resp); + grub_error (GRUB_ERR_IO, "couldn't read xenstorage `%s': %s", + dir, resp); + grub_free (resp); + return grub_errno; + } + grub_free (resp); + return GRUB_ERR_NONE; +} + +/* FIXME: error handling. */ +grub_err_t +grub_xenstore_dir (const char *dir, + int (*hook) (const char *dir, void *hook_data), + void *hook_data) +{ + struct xsd_sockmsg msg; + char *buf; + char *ptr; + grub_size_t dirlen = grub_strlen (dir) + 1; + + grub_memset (&msg, 0, sizeof (msg)); + msg.type = XS_DIRECTORY; + msg.len = dirlen; + grub_xen_store_send (&msg, sizeof (msg)); + grub_xen_store_send (dir, dirlen); + grub_xen_store_recv (&msg, sizeof (msg)); + buf = grub_malloc (msg.len + 1); + if (!buf) + return grub_errno; + grub_dprintf ("xen", "msg type = %d, len = %d\n", msg.type, msg.len); + grub_xen_store_recv (buf, msg.len); + buf[msg.len] = '\0'; + if (msg.type == XS_ERROR) + { + grub_err_t err; + err = grub_error (GRUB_ERR_IO, "couldn't read xenstorage `%s': %s", + dir, buf); + grub_free (buf); + return err; + } + for (ptr = buf; ptr < buf + msg.len; ptr += grub_strlen (ptr) + 1) + if (hook (ptr, hook_data)) + break; + grub_free (buf); + return grub_errno; +} + +unsigned long gntframe = 0; + +#define MAX_N_UNUSABLE_PAGES 4 + +static int +grub_xen_is_page_usable (grub_xen_mfn_t mfn) +{ + if (mfn == grub_xen_start_page_addr->console.domU.mfn) + return 0; + if (mfn == grub_xen_start_page_addr->shared_info) + return 0; + if (mfn == grub_xen_start_page_addr->store_mfn) + return 0; + if (mfn == gntframe) + return 0; + return 1; +} + +static grub_uint64_t +page2offset (grub_uint64_t page) +{ + return page << 12; +} + +#if defined (__x86_64__) && defined (__code_model_large__) +#define MAX_TOTAL_PAGES (1LL << (64 - 12)) +#elif defined (__x86_64__) +#define MAX_TOTAL_PAGES (1LL << (31 - 12)) +#else +#define MAX_TOTAL_PAGES (1LL << (32 - 12)) +#endif + +static void +map_all_pages (void) +{ + grub_uint64_t total_pages = grub_xen_start_page_addr->nr_pages; + grub_uint64_t i, j; + grub_xen_mfn_t *mfn_list = + (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list; + grub_uint64_t *pg = (grub_uint64_t *) window; + grub_uint64_t oldpgstart, oldpgend; + struct gnttab_setup_table gnttab_setup; + struct gnttab_set_version gnttab_setver; + grub_size_t n_unusable_pages = 0; + struct mmu_update m2p_updates[2 * MAX_N_UNUSABLE_PAGES]; + + if (total_pages > MAX_TOTAL_PAGES - 4) + total_pages = MAX_TOTAL_PAGES - 4; + + grub_memset (&gnttab_setver, 0, sizeof (gnttab_setver)); + + gnttab_setver.version = 1; + grub_xen_grant_table_op (GNTTABOP_set_version, &gnttab_setver, 1); + + grub_memset (&gnttab_setup, 0, sizeof (gnttab_setup)); + gnttab_setup.dom = DOMID_SELF; + gnttab_setup.nr_frames = 1; + gnttab_setup.frame_list.p = &gntframe; + + grub_xen_grant_table_op (GNTTABOP_setup_table, &gnttab_setup, 1); + + for (j = 0; j < total_pages - n_unusable_pages; j++) + while (!grub_xen_is_page_usable (mfn_list[j])) + { + grub_xen_mfn_t t; + if (n_unusable_pages >= MAX_N_UNUSABLE_PAGES) + { + struct sched_shutdown arg; + arg.reason = SHUTDOWN_crash; + grub_xen_sched_op (SCHEDOP_shutdown, &arg); + while (1); + } + t = mfn_list[j]; + mfn_list[j] = mfn_list[total_pages - n_unusable_pages - 1]; + mfn_list[total_pages - n_unusable_pages - 1] = t; + + m2p_updates[2 * n_unusable_pages].ptr + = page2offset (mfn_list[j]) | MMU_MACHPHYS_UPDATE; + m2p_updates[2 * n_unusable_pages].val = j; + m2p_updates[2 * n_unusable_pages + 1].ptr + = page2offset (mfn_list[total_pages - n_unusable_pages - 1]) + | MMU_MACHPHYS_UPDATE; + m2p_updates[2 * n_unusable_pages + 1].val = total_pages + - n_unusable_pages - 1; + + n_unusable_pages++; + } + + grub_xen_mmu_update (m2p_updates, 2 * n_unusable_pages, NULL, DOMID_SELF); + + total_pages += 4; + + grub_uint64_t lx[NUMBER_OF_LEVELS], nlx; + grub_uint64_t paging_start = total_pages - 4 - n_unusable_pages, curpage; + + for (nlx = total_pages, i = 0; i < (unsigned) NUMBER_OF_LEVELS; i++) + { + nlx = (nlx + POINTERS_PER_PAGE - 1) >> LOG_POINTERS_PER_PAGE; + /* PAE wants all 4 root directories present. */ +#ifdef __i386__ + if (i == 1) + nlx = 4; +#endif + lx[i] = nlx; + paging_start -= nlx; + } + + oldpgstart = grub_xen_start_page_addr->pt_base >> 12; + oldpgend = oldpgstart + grub_xen_start_page_addr->nr_pt_frames; + + curpage = paging_start; + + int l; + + for (l = NUMBER_OF_LEVELS - 1; l >= 1; l--) + { + for (i = 0; i < lx[l]; i++) + { + grub_xen_update_va_mapping (&window, + page2offset (mfn_list[curpage + i]) | 7, + UVMF_INVLPG); + grub_memset (&window, 0, sizeof (window)); + + for (j = i * POINTERS_PER_PAGE; + j < (i + 1) * POINTERS_PER_PAGE && j < lx[l - 1]; j++) + pg[j - i * POINTERS_PER_PAGE] = + page2offset (mfn_list[curpage + lx[l] + j]) +#ifdef __x86_64__ + | 4 +#endif + | 3; + } + curpage += lx[l]; + } + + for (i = 0; i < lx[0]; i++) + { + grub_xen_update_va_mapping (&window, + page2offset (mfn_list[curpage + i]) | 7, + UVMF_INVLPG); + grub_memset (&window, 0, sizeof (window)); + + for (j = i * POINTERS_PER_PAGE; + j < (i + 1) * POINTERS_PER_PAGE && j < total_pages; j++) + if (j < paging_start && !(j >= oldpgstart && j < oldpgend)) + pg[j - i * POINTERS_PER_PAGE] = page2offset (mfn_list[j]) | 0x7; + else if (j < grub_xen_start_page_addr->nr_pages) + pg[j - i * POINTERS_PER_PAGE] = page2offset (mfn_list[j]) | 5; + else if (j == grub_xen_start_page_addr->nr_pages) + { + pg[j - i * POINTERS_PER_PAGE] = + page2offset (grub_xen_start_page_addr->console.domU.mfn) | 7; + grub_xen_xcons = (void *) (grub_addr_t) page2offset (j); + } + else if (j == grub_xen_start_page_addr->nr_pages + 1) + { + pg[j - i * POINTERS_PER_PAGE] = + grub_xen_start_page_addr->shared_info | 7; + grub_xen_shared_info = (void *) (grub_addr_t) page2offset (j); + } + else if (j == grub_xen_start_page_addr->nr_pages + 2) + { + pg[j - i * POINTERS_PER_PAGE] = + page2offset (grub_xen_start_page_addr->store_mfn) | 7; + grub_xen_xenstore = (void *) (grub_addr_t) page2offset (j); + } + else if (j == grub_xen_start_page_addr->nr_pages + 3) + { + pg[j - i * POINTERS_PER_PAGE] = page2offset (gntframe) | 7; + grub_xen_grant_table = (void *) (grub_addr_t) page2offset (j); + } + } + + grub_xen_update_va_mapping (&window, 0, UVMF_INVLPG); + + mmuext_op_t op[3]; + + op[0].cmd = MMUEXT_PIN_L1_TABLE + (NUMBER_OF_LEVELS - 1); + op[0].arg1.mfn = mfn_list[paging_start]; + op[1].cmd = MMUEXT_NEW_BASEPTR; + op[1].arg1.mfn = mfn_list[paging_start]; + op[2].cmd = MMUEXT_UNPIN_TABLE; + op[2].arg1.mfn = mfn_list[oldpgstart]; + + grub_xen_mmuext_op (op, 3, NULL, DOMID_SELF); + + for (i = oldpgstart; i < oldpgend; i++) + grub_xen_update_va_mapping ((void *) (grub_addr_t) page2offset (i), + page2offset (mfn_list[i]) | 7, UVMF_INVLPG); + void *new_start_page, *new_mfn_list; + new_start_page = (void *) (grub_addr_t) page2offset (paging_start - 1); + grub_memcpy (new_start_page, grub_xen_start_page_addr, 4096); + grub_xen_start_page_addr = new_start_page; + new_mfn_list = (void *) (grub_addr_t) + page2offset (paging_start - 1 + - ((grub_xen_start_page_addr->nr_pages + * sizeof (grub_uint64_t) + 4095) / 4096)); + grub_memcpy (new_mfn_list, mfn_list, grub_xen_start_page_addr->nr_pages + * sizeof (grub_uint64_t)); + grub_xen_start_page_addr->pt_base = page2offset (paging_start); + grub_xen_start_page_addr->mfn_list = (grub_addr_t) new_mfn_list; + + grub_addr_t heap_start = grub_modules_get_end (); + grub_addr_t heap_end = (grub_addr_t) new_mfn_list; + + grub_mm_init_region ((void *) heap_start, heap_end - heap_start); +} + +extern char _end[]; + +void +grub_machine_init (void) +{ +#ifdef __i386__ + grub_xen_vm_assist (VMASST_CMD_enable, VMASST_TYPE_pae_extended_cr3); +#endif + + grub_modbase = ALIGN_UP ((grub_addr_t) _end + + GRUB_KERNEL_MACHINE_MOD_GAP, + GRUB_KERNEL_MACHINE_MOD_ALIGN); + + map_all_pages (); + + grub_console_init (); + + grub_tsc_init (); + + grub_xendisk_init (); + + grub_boot_init (); +} + +void +grub_exit (void) +{ + struct sched_shutdown arg; + + arg.reason = SHUTDOWN_poweroff; + grub_xen_sched_op (SCHEDOP_shutdown, &arg); + while (1); +} + +void +grub_machine_fini (int flags __attribute__ ((unused))) +{ + grub_xendisk_fini (); + grub_boot_fini (); +} + +grub_err_t +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) +{ + grub_uint64_t total_pages = grub_xen_start_page_addr->nr_pages; + grub_uint64_t usable_pages = grub_xen_start_page_addr->pt_base >> 12; + if (hook (0, page2offset (usable_pages), GRUB_MEMORY_AVAILABLE, hook_data)) + return GRUB_ERR_NONE; + + hook (page2offset (usable_pages), page2offset (total_pages - usable_pages), + GRUB_MEMORY_RESERVED, hook_data); + + return GRUB_ERR_NONE; +} diff --git a/grub-core/lib/LzFind.c b/grub-core/lib/LzFind.c new file mode 100644 index 000000000..dcb20d921 --- /dev/null +++ b/grub-core/lib/LzFind.c @@ -0,0 +1,777 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (c) 1999-2008 Igor Pavlov + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* + * This code was taken from LZMA SDK 4.58 beta, and was slightly modified + * to adapt it to GRUB's requirement. + * + * See , for more information about LZMA. + */ + + +#include + +#include + +#include +#include + +#define kEmptyHashValue 0 +#define kMaxValForNormalize ((UInt32)0xFFFFFFFF) +#define kNormalizeStepMin (1 << 10) /* it must be power of 2 */ +#define kNormalizeMask (~(kNormalizeStepMin - 1)) +#define kMaxHistorySize ((UInt32)3 << 30) + +#define kStartMaxLen 3 + +static void LzInWindow_Free(CMatchFinder *p, ISzAlloc *alloc) +{ + if (!p->directInput) + { + alloc->Free(alloc, p->bufferBase); + p->bufferBase = 0; + } +} + +/* keepSizeBefore + keepSizeAfter + keepSizeReserv must be < 4G) */ + +static int LzInWindow_Create(CMatchFinder *p, UInt32 keepSizeReserv, ISzAlloc *alloc) +{ + UInt32 blockSize = p->keepSizeBefore + p->keepSizeAfter + keepSizeReserv; + if (p->directInput) + { + p->blockSize = blockSize; + return 1; + } + if (p->bufferBase == 0 || p->blockSize != blockSize) + { + LzInWindow_Free(p, alloc); + p->blockSize = blockSize; + p->bufferBase = (Byte *)alloc->Alloc(alloc, (size_t)blockSize); + } + return (p->bufferBase != 0); +} + +Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; } +static Byte MatchFinder_GetIndexByte(CMatchFinder *p, Int32 curindex) { return p->buffer[curindex]; } + +static UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return p->streamPos - p->pos; } + +void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue) +{ + p->posLimit -= subValue; + p->pos -= subValue; + p->streamPos -= subValue; +} + +static void MatchFinder_ReadBlock(CMatchFinder *p) +{ + if (p->streamEndWasReached || p->result != SZ_OK) + return; + for (;;) + { + Byte *dest = p->buffer + (p->streamPos - p->pos); + size_t size = (p->bufferBase + p->blockSize - dest); + if (size == 0) + return; + p->result = p->stream->Read(p->stream, dest, &size); + if (p->result != SZ_OK) + return; + if (size == 0) + { + p->streamEndWasReached = 1; + return; + } + p->streamPos += (UInt32)size; + if (p->streamPos - p->pos > p->keepSizeAfter) + return; + } +} + +void MatchFinder_MoveBlock(CMatchFinder *p) +{ + memmove(p->bufferBase, + p->buffer - p->keepSizeBefore, + (size_t)(p->streamPos - p->pos + p->keepSizeBefore)); + p->buffer = p->bufferBase + p->keepSizeBefore; +} + +int MatchFinder_NeedMove(CMatchFinder *p) +{ + /* if (p->streamEndWasReached) return 0; */ + return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter); +} + +void MatchFinder_ReadIfRequired(CMatchFinder *p) +{ + if (p->streamEndWasReached) + return; + if (p->keepSizeAfter >= p->streamPos - p->pos) + MatchFinder_ReadBlock(p); +} + +static void MatchFinder_CheckAndMoveAndRead(CMatchFinder *p) +{ + if (MatchFinder_NeedMove(p)) + MatchFinder_MoveBlock(p); + MatchFinder_ReadBlock(p); +} + +static void MatchFinder_SetDefaultSettings(CMatchFinder *p) +{ + p->cutValue = 32; + p->btMode = 1; + p->numHashBytes = 4; + /* p->skipModeBits = 0; */ + p->directInput = 0; + p->bigHash = 0; +} + +#define kCrcPoly 0xEDB88320 + +void MatchFinder_Construct(CMatchFinder *p) +{ + UInt32 i; + p->bufferBase = 0; + p->directInput = 0; + p->hash = 0; + MatchFinder_SetDefaultSettings(p); + + for (i = 0; i < 256; i++) + { + UInt32 r = i; + int j; + for (j = 0; j < 8; j++) + r = (r >> 1) ^ (kCrcPoly & ~((r & 1) - 1)); + p->crc[i] = r; + } +} + +static void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->hash); + p->hash = 0; +} + +void MatchFinder_Free(CMatchFinder *p, ISzAlloc *alloc) +{ + MatchFinder_FreeThisClassMemory(p, alloc); + LzInWindow_Free(p, alloc); +} + +static CLzRef* AllocRefs(UInt32 num, ISzAlloc *alloc) +{ + size_t sizeInBytes = (size_t)num * sizeof(CLzRef); + if (sizeInBytes / sizeof(CLzRef) != num) + return 0; + return (CLzRef *)alloc->Alloc(alloc, sizeInBytes); +} + +int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, + ISzAlloc *alloc) +{ + UInt32 sizeReserv; + if (historySize > kMaxHistorySize) + { + MatchFinder_Free(p, alloc); + return 0; + } + sizeReserv = historySize >> 1; + if (historySize > ((UInt32)2 << 30)) + sizeReserv = historySize >> 2; + sizeReserv += (keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) / 2 + (1 << 19); + + p->keepSizeBefore = historySize + keepAddBufferBefore + 1; + p->keepSizeAfter = matchMaxLen + keepAddBufferAfter; + /* we need one additional byte, since we use MoveBlock after pos++ and before dictionary using */ + if (LzInWindow_Create(p, sizeReserv, alloc)) + { + UInt32 newCyclicBufferSize = (historySize /* >> p->skipModeBits */) + 1; + UInt32 hs; + p->matchMaxLen = matchMaxLen; + { + p->fixedHashSize = 0; + if (p->numHashBytes == 2) + hs = (1 << 16) - 1; + else + { + hs = historySize - 1; + hs |= (hs >> 1); + hs |= (hs >> 2); + hs |= (hs >> 4); + hs |= (hs >> 8); + hs >>= 1; + /* hs >>= p->skipModeBits; */ + hs |= 0xFFFF; /* don't change it! It's required for Deflate */ + if (hs > (1 << 24)) + { + if (p->numHashBytes == 3) + hs = (1 << 24) - 1; + else + hs >>= 1; + } + } + p->hashMask = hs; + hs++; + if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size; + if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size; + if (p->numHashBytes > 4) p->fixedHashSize += kHash4Size; + hs += p->fixedHashSize; + } + + { + UInt32 prevSize = p->hashSizeSum + p->numSons; + UInt32 newSize; + p->historySize = historySize; + p->hashSizeSum = hs; + p->cyclicBufferSize = newCyclicBufferSize; + p->numSons = (p->btMode ? newCyclicBufferSize * 2 : newCyclicBufferSize); + newSize = p->hashSizeSum + p->numSons; + if (p->hash != 0 && prevSize == newSize) + return 1; + MatchFinder_FreeThisClassMemory(p, alloc); + p->hash = AllocRefs(newSize, alloc); + if (p->hash != 0) + { + p->son = p->hash + p->hashSizeSum; + return 1; + } + } + } + MatchFinder_Free(p, alloc); + return 0; +} + +static void MatchFinder_SetLimits(CMatchFinder *p) +{ + UInt32 limit = kMaxValForNormalize - p->pos; + UInt32 limit2 = p->cyclicBufferSize - p->cyclicBufferPos; + if (limit2 < limit) + limit = limit2; + limit2 = p->streamPos - p->pos; + if (limit2 <= p->keepSizeAfter) + { + if (limit2 > 0) + limit2 = 1; + } + else + limit2 -= p->keepSizeAfter; + if (limit2 < limit) + limit = limit2; + { + UInt32 lenLimit = p->streamPos - p->pos; + if (lenLimit > p->matchMaxLen) + lenLimit = p->matchMaxLen; + p->lenLimit = lenLimit; + } + p->posLimit = p->pos + limit; +} + +void MatchFinder_Init(CMatchFinder *p) +{ + UInt32 i; + for(i = 0; i < p->hashSizeSum; i++) + p->hash[i] = kEmptyHashValue; + p->cyclicBufferPos = 0; + p->buffer = p->bufferBase; + p->pos = p->streamPos = p->cyclicBufferSize; + p->result = SZ_OK; + p->streamEndWasReached = 0; + MatchFinder_ReadBlock(p); + MatchFinder_SetLimits(p); +} + +static UInt32 MatchFinder_GetSubValue(CMatchFinder *p) +{ + return (p->pos - p->historySize - 1) & kNormalizeMask; +} + +void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, UInt32 numItems) +{ + UInt32 i; + for (i = 0; i < numItems; i++) + { + UInt32 value = items[i]; + if (value <= subValue) + value = kEmptyHashValue; + else + value -= subValue; + items[i] = value; + } +} + +static void MatchFinder_Normalize(CMatchFinder *p) +{ + UInt32 subValue = MatchFinder_GetSubValue(p); + MatchFinder_Normalize3(subValue, p->hash, p->hashSizeSum + p->numSons); + MatchFinder_ReduceOffsets(p, subValue); +} + +static void MatchFinder_CheckLimits(CMatchFinder *p) +{ + if (p->pos == kMaxValForNormalize) + MatchFinder_Normalize(p); + if (!p->streamEndWasReached && p->keepSizeAfter == p->streamPos - p->pos) + MatchFinder_CheckAndMoveAndRead(p); + if (p->cyclicBufferPos == p->cyclicBufferSize) + p->cyclicBufferPos = 0; + MatchFinder_SetLimits(p); +} + +static UInt32 * Hc_GetMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *distances, UInt32 maxLen) +{ + son[_cyclicBufferPos] = curMatch; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + return distances; + { + const Byte *pb = cur - delta; + curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)]; + if (pb[maxLen] == cur[maxLen] && *pb == *cur) + { + UInt32 len = 0; + while(++len != lenLimit) + if (pb[len] != cur[len]) + break; + if (maxLen < len) + { + *distances++ = maxLen = len; + *distances++ = delta - 1; + if (len == lenLimit) + return distances; + } + } + } + } +} + +UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *distances, UInt32 maxLen) +{ + CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; + CLzRef *ptr1 = son + (_cyclicBufferPos << 1); + UInt32 len0 = 0, len1 = 0; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + { + *ptr0 = *ptr1 = kEmptyHashValue; + return distances; + } + { + CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); + const Byte *pb = cur - delta; + UInt32 len = (len0 < len1 ? len0 : len1); + if (pb[len] == cur[len]) + { + if (++len != lenLimit && pb[len] == cur[len]) + while(++len != lenLimit) + if (pb[len] != cur[len]) + break; + if (maxLen < len) + { + *distances++ = maxLen = len; + *distances++ = delta - 1; + if (len == lenLimit) + { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return distances; + } + } + } + if (pb[len] < cur[len]) + { + *ptr1 = curMatch; + ptr1 = pair + 1; + curMatch = *ptr1; + len1 = len; + } + else + { + *ptr0 = curMatch; + ptr0 = pair; + curMatch = *ptr0; + len0 = len; + } + } + } +} + +static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + UInt32 _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue) +{ + CLzRef *ptr0 = son + (_cyclicBufferPos << 1) + 1; + CLzRef *ptr1 = son + (_cyclicBufferPos << 1); + UInt32 len0 = 0, len1 = 0; + for (;;) + { + UInt32 delta = pos - curMatch; + if (cutValue-- == 0 || delta >= _cyclicBufferSize) + { + *ptr0 = *ptr1 = kEmptyHashValue; + return; + } + { + CLzRef *pair = son + ((_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); + const Byte *pb = cur - delta; + UInt32 len = (len0 < len1 ? len0 : len1); + if (pb[len] == cur[len]) + { + while(++len != lenLimit) + if (pb[len] != cur[len]) + break; + { + if (len == lenLimit) + { + *ptr1 = pair[0]; + *ptr0 = pair[1]; + return; + } + } + } + if (pb[len] < cur[len]) + { + *ptr1 = curMatch; + ptr1 = pair + 1; + curMatch = *ptr1; + len1 = len; + } + else + { + *ptr0 = curMatch; + ptr0 = pair; + curMatch = *ptr0; + len0 = len; + } + } + } +} + +#define MOVE_POS \ + ++p->cyclicBufferPos; \ + p->buffer++; \ + if (++p->pos == p->posLimit) MatchFinder_CheckLimits(p); + +#define MOVE_POS_RET MOVE_POS return offset; + +static void MatchFinder_MovePos(CMatchFinder *p) { MOVE_POS; } + +#define GET_MATCHES_HEADER2(minLen, ret_op) \ + UInt32 lenLimit; UInt32 hashValue; const Byte *cur; UInt32 curMatch; \ + lenLimit = p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \ + cur = p->buffer; + +#define GET_MATCHES_HEADER(minLen) GET_MATCHES_HEADER2(minLen, return 0) +#define SKIP_HEADER(minLen) GET_MATCHES_HEADER2(minLen, continue) + +#define MF_PARAMS(p) p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue + +#define GET_MATCHES_FOOTER(offset, maxLen) \ + offset = (UInt32)(GetMatchesSpec1(lenLimit, curMatch, MF_PARAMS(p), \ + distances + offset, maxLen) - distances); MOVE_POS_RET; + +#define SKIP_FOOTER \ + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); MOVE_POS; + +static UInt32 Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(2) + HASH2_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = 0; + GET_MATCHES_FOOTER(offset, 1) +} + +UInt32 Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = 0; + GET_MATCHES_FOOTER(offset, 2) +} + +static UInt32 Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, delta2, maxLen, offset; + GET_MATCHES_HEADER(3) + + HASH3_CALC; + + delta2 = p->pos - p->hash[hash2Value]; + curMatch = p->hash[kFix3HashSize + hashValue]; + + p->hash[hash2Value] = + p->hash[kFix3HashSize + hashValue] = p->pos; + + + maxLen = 2; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[0] = maxLen; + distances[1] = delta2 - 1; + offset = 2; + if (maxLen == lenLimit) + { + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); + MOVE_POS_RET; + } + } + GET_MATCHES_FOOTER(offset, maxLen) +} + +static UInt32 Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; + GET_MATCHES_HEADER(4) + + HASH4_CALC; + + delta2 = p->pos - p->hash[ hash2Value]; + delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; + curMatch = p->hash[kFix4HashSize + hashValue]; + + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + + maxLen = 1; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + distances[0] = maxLen = 2; + distances[1] = delta2 - 1; + offset = 2; + } + if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) + { + maxLen = 3; + distances[offset + 1] = delta3 - 1; + offset += 2; + delta2 = delta3; + } + if (offset != 0) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[offset - 2] = maxLen; + if (maxLen == lenLimit) + { + SkipMatchesSpec(lenLimit, curMatch, MF_PARAMS(p)); + MOVE_POS_RET; + } + } + if (maxLen < 3) + maxLen = 3; + GET_MATCHES_FOOTER(offset, maxLen) +} + +static UInt32 Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 hash2Value, hash3Value, delta2, delta3, maxLen, offset; + GET_MATCHES_HEADER(4) + + HASH4_CALC; + + delta2 = p->pos - p->hash[ hash2Value]; + delta3 = p->pos - p->hash[kFix3HashSize + hash3Value]; + curMatch = p->hash[kFix4HashSize + hashValue]; + + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + + maxLen = 1; + offset = 0; + if (delta2 < p->cyclicBufferSize && *(cur - delta2) == *cur) + { + distances[0] = maxLen = 2; + distances[1] = delta2 - 1; + offset = 2; + } + if (delta2 != delta3 && delta3 < p->cyclicBufferSize && *(cur - delta3) == *cur) + { + maxLen = 3; + distances[offset + 1] = delta3 - 1; + offset += 2; + delta2 = delta3; + } + if (offset != 0) + { + for (; maxLen != lenLimit; maxLen++) + if (cur[(ptrdiff_t)maxLen - delta2] != cur[maxLen]) + break; + distances[offset - 2] = maxLen; + if (maxLen == lenLimit) + { + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS_RET; + } + } + if (maxLen < 3) + maxLen = 3; + offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), + distances + offset, maxLen) - (distances)); + MOVE_POS_RET +} + +UInt32 Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) +{ + UInt32 offset; + GET_MATCHES_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + offset = (UInt32)(Hc_GetMatchesSpec(lenLimit, curMatch, MF_PARAMS(p), + distances, 2) - (distances)); + MOVE_POS_RET +} + +static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(2) + HASH2_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value; + SKIP_HEADER(3) + HASH3_CALC; + curMatch = p->hash[kFix3HashSize + hashValue]; + p->hash[hash2Value] = + p->hash[kFix3HashSize + hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value, hash3Value; + SKIP_HEADER(4) + HASH4_CALC; + curMatch = p->hash[kFix4HashSize + hashValue]; + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = p->pos; + p->hash[kFix4HashSize + hashValue] = p->pos; + SKIP_FOOTER + } + while (--num != 0); +} + +static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + UInt32 hash2Value, hash3Value; + SKIP_HEADER(4) + HASH4_CALC; + curMatch = p->hash[kFix4HashSize + hashValue]; + p->hash[ hash2Value] = + p->hash[kFix3HashSize + hash3Value] = + p->hash[kFix4HashSize + hashValue] = p->pos; + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS + } + while (--num != 0); +} + +void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) +{ + do + { + SKIP_HEADER(3) + HASH_ZIP_CALC; + curMatch = p->hash[hashValue]; + p->hash[hashValue] = p->pos; + p->son[p->cyclicBufferPos] = curMatch; + MOVE_POS + } + while (--num != 0); +} + +void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder *vTable) +{ + vTable->Init = (Mf_Init_Func)MatchFinder_Init; + vTable->GetIndexByte = (Mf_GetIndexByte_Func)MatchFinder_GetIndexByte; + vTable->GetNumAvailableBytes = (Mf_GetNumAvailableBytes_Func)MatchFinder_GetNumAvailableBytes; + vTable->GetPointerToCurrentPos = (Mf_GetPointerToCurrentPos_Func)MatchFinder_GetPointerToCurrentPos; + if (!p->btMode) + { + vTable->GetMatches = (Mf_GetMatches_Func)Hc4_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Hc4_MatchFinder_Skip; + } + else if (p->numHashBytes == 2) + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt2_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt2_MatchFinder_Skip; + } + else if (p->numHashBytes == 3) + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt3_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt3_MatchFinder_Skip; + } + else + { + vTable->GetMatches = (Mf_GetMatches_Func)Bt4_MatchFinder_GetMatches; + vTable->Skip = (Mf_Skip_Func)Bt4_MatchFinder_Skip; + } +} diff --git a/grub-core/lib/LzmaDec.c b/grub-core/lib/LzmaDec.c new file mode 100644 index 000000000..952edb346 --- /dev/null +++ b/grub-core/lib/LzmaDec.c @@ -0,0 +1,1037 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (c) 1999-2008 Igor Pavlov + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* + * This code was taken from LZMA SDK 4.58 beta, and was slightly modified + * to adapt it to GRUB's requirement. + * + * See , for more information about LZMA. + */ + +#include + +#pragma GCC diagnostic ignored "-Wshadow" +#include +#define memcpy grub_memcpy + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_INIT_SIZE 5 + +#define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0(p) ttt = *(p); NORMALIZE; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +#define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); +#define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ + { UPDATE_0(p); i = (i + i); A0; } else \ + { UPDATE_1(p); i = (i + i) + 1; A1; } +#define GET_BIT(p, i) GET_BIT2(p, i, ; , ;) + +#define TREE_GET_BIT(probs, i) { GET_BIT((probs + i), i); } +#define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +/* #define _LZMA_SIZE_OPT */ + +#ifdef _LZMA_SIZE_OPT +#define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) +#else +#define TREE_6_DECODE(probs, i) \ + { i = 1; \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + TREE_GET_BIT(probs, i); \ + i -= 0x40; } +#endif + +#define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_ERROR; range <<= 8; code = (code << 8) | (*buf++); } + +#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * ttt; if (code < bound) +#define UPDATE_0_CHECK range = bound; +#define UPDATE_1_CHECK range -= bound; code -= bound; +#define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ + { UPDATE_0_CHECK; i = (i + i); A0; } else \ + { UPDATE_1_CHECK; i = (i + i) + 1; A1; } +#define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) +#define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while(i < limit); i -= limit; } + + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + + +#define kNumStates 12 +#define kNumLitStates 7 + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) + +#define kMatchMinLen 2 +#define kMatchSpecLenStart (kMatchMinLen + kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#define LZMA_BASE_SIZE 1846 +#define LZMA_LIT_SIZE 768 + +#define LzmaProps_GetNumProbs(p) ((UInt32)LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((p)->lc + (p)->lp))) + +#if Literal != LZMA_BASE_SIZE +StopCompilingDueBUG +#endif + +/* +#define LZMA_STREAM_WAS_FINISHED_ID (-1) +#define LZMA_SPEC_LEN_OFFSET (-3) +*/ + +Byte kLiteralNextStates[kNumStates * 2] = +{ + 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5, + 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10 +}; + +#define LZMA_DIC_MIN (1 << 12) + +/* First LZMA-symbol is always decoded. +And it decodes new LZMA-symbols while (buf < bufLimit), but "buf" is without last normalization +Out: + Result: + 0 - OK + 1 - Error + p->remainLen: + < kMatchSpecLenStart : normal remain + = kMatchSpecLenStart : finished + = kMatchSpecLenStart + 1 : Flush marker + = kMatchSpecLenStart + 2 : State Init Marker +*/ + +static int MY_FAST_CALL LzmaDec_DecodeReal(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + CLzmaProb *probs = p->probs; + + unsigned state = p->state; + UInt32 rep0 = p->reps[0], rep1 = p->reps[1], rep2 = p->reps[2], rep3 = p->reps[3]; + unsigned pbMask = ((unsigned)1 << (p->prop.pb)) - 1; + unsigned lpMask = ((unsigned)1 << (p->prop.lp)) - 1; + unsigned lc = p->prop.lc; + + Byte *dic = p->dic; + SizeT dicBufSize = p->dicBufSize; + SizeT dicPos = p->dicPos; + + UInt32 processedPos = p->processedPos; + UInt32 checkDicSize = p->checkDicSize; + unsigned len = 0; + + const Byte *buf = p->buf; + UInt32 range = p->range; + UInt32 code = p->code; + + do + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = processedPos & pbMask; + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + unsigned symbol; + UPDATE_0(prob); + prob = probs + Literal; + if (checkDicSize != 0 || processedPos != 0) + prob += (LZMA_LIT_SIZE * (((processedPos & lpMask) << lc) + + (dic[(dicPos == 0 ? dicBufSize : dicPos) - 1] >> (8 - lc)))); + + if (state < kNumLitStates) + { + symbol = 1; + do { GET_BIT(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + unsigned offs = 0x100; + symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + dic[dicPos++] = (Byte)symbol; + processedPos++; + + state = kLiteralNextStates[state]; + /* if (state < 4) state = 0; else if (state < 10) state -= 3; else state -= 6; */ + continue; + } + else + { + UPDATE_1(prob); + prob = probs + IsRep + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + state += kNumStates; + prob = probs + LenCoder; + } + else + { + UPDATE_1(prob); + if (checkDicSize == 0 && processedPos == 0) + return SZ_ERROR_DATA; + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0(prob) + { + UPDATE_0(prob); + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + processedPos++; + state = state < kNumLitStates ? 9 : 11; + continue; + } + UPDATE_1(prob); + } + else + { + UInt32 distance; + UPDATE_1(prob); + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep1; + } + else + { + UPDATE_1(prob); + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { + UPDATE_0(prob); + distance = rep2; + } + else + { + UPDATE_1(prob); + distance = rep3; + rep3 = rep2; + } + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + state = state < kNumLitStates ? 8 : 11; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = (1 << kLenNumLowBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { + UPDATE_0(probLen); + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = (1 << kLenNumMidBits); + } + else + { + UPDATE_1(probLen); + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = (1 << kLenNumHighBits); + } + } + TREE_DECODE(probLen, limit, len); + len += offset; + } + + if (state >= kNumStates) + { + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); + TREE_6_DECODE(prob, distance); + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; + int numDirectBits = (int)(((distance >> 1) - 1)); + distance = (2 | (distance & 1)); + if (posSlot < kEndPosModelIndex) + { + distance <<= numDirectBits; + prob = probs + SpecPos + distance - posSlot - 1; + { + UInt32 mask = 1; + unsigned i = 1; + do + { + GET_BIT2(prob + i, i, ; , distance |= mask); + mask <<= 1; + } + while(--numDirectBits != 0); + } + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE + range >>= 1; + + { + UInt32 t; + code -= range; + t = (0 - ((UInt32)code >> 31)); /* (UInt32)((Int32)code >> 31) */ + distance = (distance << 1) + (t + 1); + code += range & t; + } + /* + distance <<= 1; + if (code >= range) + { + code -= range; + distance |= 1; + } + */ + } + while (--numDirectBits != 0); + prob = probs + Align; + distance <<= kNumAlignBits; + { + unsigned i = 1; + GET_BIT2(prob + i, i, ; , distance |= 1); + GET_BIT2(prob + i, i, ; , distance |= 2); + GET_BIT2(prob + i, i, ; , distance |= 4); + GET_BIT2(prob + i, i, ; , distance |= 8); + } + if (distance == (UInt32)0xFFFFFFFF) + { + len += kMatchSpecLenStart; + state -= kNumStates; + break; + } + } + } + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + rep0 = distance + 1; + if (checkDicSize == 0) + { + if (distance >= processedPos) + return SZ_ERROR_DATA; + } + else if (distance >= checkDicSize) + return SZ_ERROR_DATA; + state = (state < kNumStates + kNumLitStates) ? kNumLitStates : kNumLitStates + 3; + /* state = kLiteralNextStates[state]; */ + } + + len += kMatchMinLen; + + { + SizeT rem = limit - dicPos; + unsigned curLen = ((rem < len) ? (unsigned)rem : len); + SizeT pos = (dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0); + + processedPos += curLen; + + len -= curLen; + if (pos + curLen <= dicBufSize) + { + Byte *dest = dic + dicPos; + ptrdiff_t src = (ptrdiff_t)pos - (ptrdiff_t)dicPos; + const Byte *lim = dest + curLen; + dicPos += curLen; + do + *(dest) = (Byte)*(dest + src); + while (++dest != lim); + } + else + { + do + { + dic[dicPos++] = dic[pos]; + if (++pos == dicBufSize) + pos = 0; + } + while (--curLen != 0); + } + } + } + } + while (dicPos < limit && buf < bufLimit); + NORMALIZE; + p->buf = buf; + p->range = range; + p->code = code; + p->remainLen = len; + p->dicPos = dicPos; + p->processedPos = processedPos; + p->reps[0] = rep0; + p->reps[1] = rep1; + p->reps[2] = rep2; + p->reps[3] = rep3; + p->state = state; + + return SZ_OK; +} + +static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) +{ + if (p->remainLen != 0 && p->remainLen < kMatchSpecLenStart) + { + Byte *dic = p->dic; + SizeT dicPos = p->dicPos; + SizeT dicBufSize = p->dicBufSize; + unsigned len = p->remainLen; + UInt32 rep0 = p->reps[0]; + if (limit - dicPos < len) + len = (unsigned)(limit - dicPos); + + if (p->checkDicSize == 0 && p->prop.dicSize - p->processedPos <= len) + p->checkDicSize = p->prop.dicSize; + + p->processedPos += len; + p->remainLen -= len; + while (len-- != 0) + { + dic[dicPos] = dic[(dicPos - rep0) + ((dicPos < rep0) ? dicBufSize : 0)]; + dicPos++; + } + p->dicPos = dicPos; + } +} + +/* LzmaDec_DecodeReal2 decodes LZMA-symbols and sets p->needFlush and p->needInit, if required. */ + +static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) +{ + do + { + SizeT limit2 = limit; + if (p->checkDicSize == 0) + { + UInt32 rem = p->prop.dicSize - p->processedPos; + if (limit - p->dicPos > rem) + limit2 = p->dicPos + rem; + } + RINOK(LzmaDec_DecodeReal(p, limit2, bufLimit)); + if (p->processedPos >= p->prop.dicSize) + p->checkDicSize = p->prop.dicSize; + LzmaDec_WriteRem(p, limit); + } + while (p->dicPos < limit && p->buf < bufLimit && p->remainLen < kMatchSpecLenStart); + + if (p->remainLen > kMatchSpecLenStart) + { + p->remainLen = kMatchSpecLenStart; + } + return 0; +} + +typedef enum +{ + DUMMY_ERROR, /* unexpected end of input stream */ + DUMMY_LIT, + DUMMY_MATCH, + DUMMY_REP +} ELzmaDummy; + +static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, SizeT inSize) +{ + UInt32 range = p->range; + UInt32 code = p->code; + const Byte *bufLimit = buf + inSize; + CLzmaProb *probs = p->probs; + unsigned state = p->state; + ELzmaDummy res; + + { + CLzmaProb *prob; + UInt32 bound; + unsigned ttt; + unsigned posState = (p->processedPos) & ((1 << p->prop.pb) - 1); + + prob = probs + IsMatch + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK + + /* if (bufLimit - buf >= 7) return DUMMY_LIT; */ + + prob = probs + Literal; + if (p->checkDicSize != 0 || p->processedPos != 0) + prob += (LZMA_LIT_SIZE * + ((((p->processedPos) & ((1 << (p->prop.lp)) - 1)) << p->prop.lc) + + (p->dic[(p->dicPos == 0 ? p->dicBufSize : p->dicPos) - 1] >> (8 - p->prop.lc)))); + + if (state < kNumLitStates) + { + unsigned symbol = 1; + do { GET_BIT_CHECK(prob + symbol, symbol) } while (symbol < 0x100); + } + else + { + unsigned matchByte = p->dic[p->dicPos - p->reps[0] + + ((p->dicPos < p->reps[0]) ? p->dicBufSize : 0)]; + unsigned offs = 0x100; + unsigned symbol = 1; + do + { + unsigned bit; + CLzmaProb *probLit; + matchByte <<= 1; + bit = (matchByte & offs); + probLit = prob + offs + bit + symbol; + GET_BIT2_CHECK(probLit, symbol, offs &= ~bit, offs &= bit) + } + while (symbol < 0x100); + } + res = DUMMY_LIT; + } + else + { + unsigned len; + UPDATE_1_CHECK; + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { + UPDATE_1_CHECK; + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + prob = probs + IsRep0Long + (state << kNumPosBitsMax) + posState; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + NORMALIZE_CHECK; + return DUMMY_REP; + } + else + { + UPDATE_1_CHECK; + } + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { + UPDATE_0_CHECK; + } + else + { + UPDATE_1_CHECK; + } + } + } + state = kNumStates; + prob = probs + RepLenCoder; + } + { + unsigned limit, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenLow + (posState << kLenNumLowBits); + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { + UPDATE_0_CHECK; + probLen = prob + LenMid + (posState << kLenNumMidBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumMidBits; + } + else + { + UPDATE_1_CHECK; + probLen = prob + LenHigh; + offset = kLenNumLowSymbols + kLenNumMidSymbols; + limit = 1 << kLenNumHighBits; + } + } + TREE_DECODE_CHECK(probLen, limit, len); + len += offset; + } + + if (state < 4) + { + unsigned posSlot; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); + TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); + if (posSlot >= kStartPosModelIndex) + { + int numDirectBits = ((posSlot >> 1) - 1); + + /* if (bufLimit - buf >= 8) return DUMMY_MATCH; */ + + if (posSlot < kEndPosModelIndex) + { + prob = probs + SpecPos + ((2 | (posSlot & 1)) << numDirectBits) - posSlot - 1; + } + else + { + numDirectBits -= kNumAlignBits; + do + { + NORMALIZE_CHECK + range >>= 1; + code -= range & (((code - range) >> 31) - 1); + /* if (code >= range) code -= range; */ + } + while (--numDirectBits != 0); + prob = probs + Align; + numDirectBits = kNumAlignBits; + } + { + unsigned i = 1; + do + { + GET_BIT_CHECK(prob + i, i); + } + while(--numDirectBits != 0); + } + } + } + } + } + NORMALIZE_CHECK; + return res; +} + + +static void LzmaDec_InitRc(CLzmaDec *p, const Byte *data) +{ + p->code = ((UInt32)data[1] << 24) | ((UInt32)data[2] << 16) | ((UInt32)data[3] << 8) | ((UInt32)data[4]); + p->range = 0xFFFFFFFF; + p->needFlush = 0; +} + +static void LzmaDec_InitDicAndState(CLzmaDec *p, Bool initDic, Bool initState) +{ + p->needFlush = 1; + p->remainLen = 0; + p->tempBufSize = 0; + + if (initDic) + { + p->processedPos = 0; + p->checkDicSize = 0; + p->needInitState = 1; + } + if (initState) + p->needInitState = 1; +} + +void LzmaDec_Init(CLzmaDec *p) +{ + p->dicPos = 0; + LzmaDec_InitDicAndState(p, True, True); +} + +static void LzmaDec_InitStateReal(CLzmaDec *p) +{ + UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (p->prop.lc + p->prop.lp)); + UInt32 i; + CLzmaProb *probs = p->probs; + for (i = 0; i < numProbs; i++) + probs[i] = kBitModelTotal >> 1; + p->reps[0] = p->reps[1] = p->reps[2] = p->reps[3] = 1; + p->state = 0; + p->needInitState = 0; +} + +SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *srcLen, + ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT inSize = *srcLen; + (*srcLen) = 0; + LzmaDec_WriteRem(p, dicLimit); + + *status = LZMA_STATUS_NOT_SPECIFIED; + + while (p->remainLen != kMatchSpecLenStart) + { + int checkEndMarkNow; + + if (p->needFlush != 0) + { + for (; inSize > 0 && p->tempBufSize < RC_INIT_SIZE; (*srcLen)++, inSize--) + p->tempBuf[p->tempBufSize++] = *src++; + if (p->tempBufSize < RC_INIT_SIZE) + { + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (p->tempBuf[0] != 0) + return SZ_ERROR_DATA; + + LzmaDec_InitRc(p, p->tempBuf); + p->tempBufSize = 0; + } + + checkEndMarkNow = 0; + if (p->dicPos >= dicLimit) + { + if (p->remainLen == 0 && p->code == 0) + { + *status = LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK; + return SZ_OK; + } + if (finishMode == LZMA_FINISH_ANY) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_OK; + } + if (p->remainLen != 0) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + checkEndMarkNow = 1; + } + + if (p->needInitState) + LzmaDec_InitStateReal(p); + + if (p->tempBufSize == 0) + { + SizeT processed; + const Byte *bufLimit; + if (inSize < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, src, inSize); + if (dummyRes == DUMMY_ERROR) + { + memcpy(p->tempBuf, src, inSize); + p->tempBufSize = (unsigned)inSize; + (*srcLen) += inSize; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + bufLimit = src; + } + else + bufLimit = src + inSize - LZMA_REQUIRED_INPUT_MAX; + p->buf = src; + if (LzmaDec_DecodeReal2(p, dicLimit, bufLimit) != 0) + return SZ_ERROR_DATA; + processed = p->buf - src; + (*srcLen) += processed; + src += processed; + inSize -= processed; + } + else + { + unsigned rem = p->tempBufSize, lookAhead = 0; + while (rem < LZMA_REQUIRED_INPUT_MAX && lookAhead < inSize) + p->tempBuf[rem++] = src[lookAhead++]; + p->tempBufSize = rem; + if (rem < LZMA_REQUIRED_INPUT_MAX || checkEndMarkNow) + { + int dummyRes = LzmaDec_TryDummy(p, p->tempBuf, rem); + if (dummyRes == DUMMY_ERROR) + { + (*srcLen) += lookAhead; + *status = LZMA_STATUS_NEEDS_MORE_INPUT; + return SZ_OK; + } + if (checkEndMarkNow && dummyRes != DUMMY_MATCH) + { + *status = LZMA_STATUS_NOT_FINISHED; + return SZ_ERROR_DATA; + } + } + p->buf = p->tempBuf; + if (LzmaDec_DecodeReal2(p, dicLimit, p->buf) != 0) + return SZ_ERROR_DATA; + lookAhead -= (rem - (unsigned)(p->buf - p->tempBuf)); + (*srcLen) += lookAhead; + src += lookAhead; + inSize -= lookAhead; + p->tempBufSize = 0; + } + } + if (p->code == 0) + *status = LZMA_STATUS_FINISHED_WITH_MARK; + return (p->code == 0) ? SZ_OK : SZ_ERROR_DATA; +} + +SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status) +{ + SizeT outSize = *destLen; + SizeT inSize = *srcLen; + *srcLen = *destLen = 0; + for (;;) + { + SizeT inSizeCur = inSize, outSizeCur, dicPos; + ELzmaFinishMode curFinishMode; + SRes res; + if (p->dicPos == p->dicBufSize) + p->dicPos = 0; + dicPos = p->dicPos; + if (outSize > p->dicBufSize - dicPos) + { + outSizeCur = p->dicBufSize; + curFinishMode = LZMA_FINISH_ANY; + } + else + { + outSizeCur = dicPos + outSize; + curFinishMode = finishMode; + } + + res = LzmaDec_DecodeToDic(p, outSizeCur, src, &inSizeCur, curFinishMode, status); + src += inSizeCur; + inSize -= inSizeCur; + *srcLen += inSizeCur; + outSizeCur = p->dicPos - dicPos; + memcpy(dest, p->dic + dicPos, outSizeCur); + dest += outSizeCur; + outSize -= outSizeCur; + *destLen += outSizeCur; + if (res != 0) + return res; + if (outSizeCur == 0 || outSize == 0) + return SZ_OK; + } +} + +void LzmaDec_FreeProbs(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->probs); + p->probs = 0; +} + +static void LzmaDec_FreeDict(CLzmaDec *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->dic); + p->dic = 0; +} + +void LzmaDec_Free(CLzmaDec *p, ISzAlloc *alloc) +{ + LzmaDec_FreeProbs(p, alloc); + LzmaDec_FreeDict(p, alloc); +} + +SRes LzmaProps_Decode(CLzmaProps *p, const Byte *data, unsigned size) +{ + UInt32 dicSize; + Byte d; + + if (size < LZMA_PROPS_SIZE) + return SZ_ERROR_UNSUPPORTED; + else + dicSize = data[1] | ((UInt32)data[2] << 8) | ((UInt32)data[3] << 16) | ((UInt32)data[4] << 24); + + if (dicSize < LZMA_DIC_MIN) + dicSize = LZMA_DIC_MIN; + p->dicSize = dicSize; + + d = data[0]; + if (d >= (9 * 5 * 5)) + return SZ_ERROR_UNSUPPORTED; + + p->lc = d % 9; + d /= 9; + p->pb = d / 5; + p->lp = d % 5; + + return SZ_OK; +} + +static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc) +{ + UInt32 numProbs = LzmaProps_GetNumProbs(propNew); + if (p->probs == 0 || numProbs != p->numProbs) + { + LzmaDec_FreeProbs(p, alloc); + p->probs = (CLzmaProb *)alloc->Alloc(alloc, numProbs * sizeof(CLzmaProb)); + p->numProbs = numProbs; + if (p->probs == 0) + return SZ_ERROR_MEM; + } + return SZ_OK; +} + +SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAlloc *alloc) +{ + CLzmaProps propNew; + SizeT dicBufSize; + RINOK(LzmaProps_Decode(&propNew, props, propsSize)); + RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); + dicBufSize = propNew.dicSize; + if (p->dic == 0 || dicBufSize != p->dicBufSize) + { + LzmaDec_FreeDict(p, alloc); + p->dic = (Byte *)alloc->Alloc(alloc, dicBufSize); + if (p->dic == 0) + { + LzmaDec_FreeProbs(p, alloc); + return SZ_ERROR_MEM; + } + } + p->dicBufSize = dicBufSize; + p->prop = propNew; + return SZ_OK; +} + +SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + const Byte *propData, unsigned propSize, ELzmaFinishMode finishMode, + ELzmaStatus *status, ISzAlloc *alloc) +{ + CLzmaDec p; + SRes res; + SizeT inSize = *srcLen; + SizeT outSize = *destLen; + *srcLen = *destLen = 0; + if (inSize < RC_INIT_SIZE) + return SZ_ERROR_INPUT_EOF; + + LzmaDec_Construct(&p); + res = LzmaDec_AllocateProbs(&p, propData, propSize, alloc); + if (res != 0) + return res; + p.dic = dest; + p.dicBufSize = outSize; + + LzmaDec_Init(&p); + + *srcLen = inSize; + res = LzmaDec_DecodeToDic(&p, outSize, src, srcLen, finishMode, status); + + if (res == SZ_OK && *status == LZMA_STATUS_NEEDS_MORE_INPUT) + res = SZ_ERROR_INPUT_EOF; + + (*destLen) = p.dicPos; + LzmaDec_FreeProbs(&p, alloc); + return res; +} diff --git a/grub-core/lib/LzmaEnc.c b/grub-core/lib/LzmaEnc.c new file mode 100644 index 000000000..f2ec04a8c --- /dev/null +++ b/grub-core/lib/LzmaEnc.c @@ -0,0 +1,2244 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (c) 1999-2008 Igor Pavlov + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* + * This code was taken from LZMA SDK 4.58 beta, and was slightly modified + * to adapt it to GRUB's requirement. + * + * See , for more information about LZMA. + */ + +#include + +#include +#include + +#include + +#include +#ifdef COMPRESS_MF_MT +#include +#endif + +/* #define SHOW_STAT */ +/* #define SHOW_STAT2 */ + +#ifdef SHOW_STAT +static int ttt = 0; +#endif + +#define kBlockSizeMax ((1 << LZMA_NUM_BLOCK_SIZE_BITS) - 1) + +#define kBlockSize (9 << 10) +#define kUnpackBlockSize (1 << 18) +#define kMatchArraySize (1 << 21) +#define kMatchRecordMaxSize ((LZMA_MATCH_LEN_MAX * 2 + 3) * LZMA_MATCH_LEN_MAX) + +#define kNumMaxDirectBits (31) + +#define kNumTopBits 24 +#define kTopValue ((UInt32)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 +#define kProbInitValue (kBitModelTotal >> 1) + +#define kNumMoveReducingBits 4 +#define kNumBitPriceShiftBits 4 +#define kBitPrice (1 << kNumBitPriceShiftBits) + +void LzmaEncProps_Init(CLzmaEncProps *p) +{ + p->level = 5; + p->dictSize = p->mc = 0; + p->lc = p->lp = p->pb = p->algo = p->fb = p->btMode = p->numHashBytes = p->numThreads = -1; + p->writeEndMark = 0; +} + +void LzmaEncProps_Normalize(CLzmaEncProps *p) +{ + int level = p->level; + if (level < 0) level = 5; + p->level = level; + if (p->dictSize == 0) p->dictSize = (level <= 5 ? (1 << (level * 2 + 14)) : (level == 6 ? (1 << 25) : (1 << 26))); + if (p->lc < 0) p->lc = 3; + if (p->lp < 0) p->lp = 0; + if (p->pb < 0) p->pb = 2; + if (p->algo < 0) p->algo = (level < 5 ? 0 : 1); + if (p->fb < 0) p->fb = (level < 7 ? 32 : 64); + if (p->btMode < 0) p->btMode = (p->algo == 0 ? 0 : 1); + if (p->numHashBytes < 0) p->numHashBytes = 4; + if (p->mc == 0) p->mc = (16 + (p->fb >> 1)) >> (p->btMode ? 0 : 1); + if (p->numThreads < 0) p->numThreads = ((p->btMode && p->algo) ? 2 : 1); +} + +UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2) +{ + CLzmaEncProps props = *props2; + LzmaEncProps_Normalize(&props); + return props.dictSize; +} + +/* #define LZMA_LOG_BSR */ +/* Define it for Intel's CPU */ + + +#ifdef LZMA_LOG_BSR + +#define kDicLogSizeMaxCompress 30 + +#define BSR2_RET(pos, res) { unsigned long i; _BitScanReverse(&i, (pos)); res = (i + i) + ((pos >> (i - 1)) & 1); } + +UInt32 GetPosSlot1(UInt32 pos) +{ + UInt32 res; + BSR2_RET(pos, res); + return res; +} +#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } +#define GetPosSlot(pos, res) { if (pos < 2) res = pos; else BSR2_RET(pos, res); } + +#else + +#define kNumLogBits (9 + (int)sizeof(size_t) / 2) +#define kDicLogSizeMaxCompress ((kNumLogBits - 1) * 2 + 7) + +static void LzmaEnc_FastPosInit(Byte *g_FastPos) +{ + int c = 2, slotFast; + g_FastPos[0] = 0; + g_FastPos[1] = 1; + + for (slotFast = 2; slotFast < kNumLogBits * 2; slotFast++) + { + UInt32 k = (1 << ((slotFast >> 1) - 1)); + UInt32 j; + for (j = 0; j < k; j++, c++) + g_FastPos[c] = (Byte)slotFast; + } +} + +#define BSR2_RET(pos, res) { UInt32 i = 6 + ((kNumLogBits - 1) & \ + (0 - (((((UInt32)1 << (kNumLogBits + 6)) - 1) - pos) >> 31))); \ + res = p->g_FastPos[pos >> i] + (i * 2); } +/* +#define BSR2_RET(pos, res) { res = (pos < (1 << (kNumLogBits + 6))) ? \ + p->g_FastPos[pos >> 6] + 12 : \ + p->g_FastPos[pos >> (6 + kNumLogBits - 1)] + (6 + (kNumLogBits - 1)) * 2; } +*/ + +#define GetPosSlot1(pos) p->g_FastPos[pos] +#define GetPosSlot2(pos, res) { BSR2_RET(pos, res); } +#define GetPosSlot(pos, res) { if (pos < kNumFullDistances) res = p->g_FastPos[pos]; else BSR2_RET(pos, res); } + +#endif + + +#define LZMA_NUM_REPS 4 + +typedef unsigned CState; + +typedef struct _COptimal +{ + UInt32 price; + + CState state; + int prev1IsChar; + int prev2; + + UInt32 posPrev2; + UInt32 backPrev2; + + UInt32 posPrev; + UInt32 backPrev; + UInt32 backs[LZMA_NUM_REPS]; +} COptimal; + +#define kNumOpts (1 << 12) + +#define kNumLenToPosStates 4 +#define kNumPosSlotBits 6 +#define kDicLogSizeMin 0 +#define kDicLogSizeMax 32 +#define kDistTableSizeMax (kDicLogSizeMax * 2) + + +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) +#define kAlignMask (kAlignTableSize - 1) + +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumPosModels (kEndPosModelIndex - kStartPosModelIndex) + +#define kNumFullDistances (1 << (kEndPosModelIndex / 2)) + +#ifdef _LZMA_PROB32 +#define CLzmaProb UInt32 +#else +#define CLzmaProb UInt16 +#endif + +#define LZMA_PB_MAX 4 +#define LZMA_LC_MAX 8 +#define LZMA_LP_MAX 4 + +#define LZMA_NUM_PB_STATES_MAX (1 << LZMA_PB_MAX) + + +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define kLenNumSymbolsTotal (kLenNumLowSymbols + kLenNumMidSymbols + kLenNumHighSymbols) + +#define LZMA_MATCH_LEN_MIN 2 +#define LZMA_MATCH_LEN_MAX (LZMA_MATCH_LEN_MIN + kLenNumSymbolsTotal - 1) + +#define kNumStates 12 + +typedef struct +{ + CLzmaProb choice; + CLzmaProb choice2; + CLzmaProb low[LZMA_NUM_PB_STATES_MAX << kLenNumLowBits]; + CLzmaProb mid[LZMA_NUM_PB_STATES_MAX << kLenNumMidBits]; + CLzmaProb high[kLenNumHighSymbols]; +} CLenEnc; + +typedef struct +{ + CLenEnc p; + UInt32 prices[LZMA_NUM_PB_STATES_MAX][kLenNumSymbolsTotal]; + UInt32 tableSize; + UInt32 counters[LZMA_NUM_PB_STATES_MAX]; +} CLenPriceEnc; + +typedef struct _CRangeEnc +{ + UInt32 range; + Byte cache; + UInt64 low; + UInt64 cacheSize; + Byte *buf; + Byte *bufLim; + Byte *bufBase; + ISeqOutStream *outStream; + UInt64 processed; + SRes res; +} CRangeEnc; + +typedef struct _CSeqInStreamBuf +{ + ISeqInStream funcTable; + const Byte *data; + SizeT rem; +} CSeqInStreamBuf; + +static SRes MyRead(void *pp, void *data, size_t *size) +{ + size_t curSize = *size; + CSeqInStreamBuf *p = (CSeqInStreamBuf *)pp; + if (p->rem < curSize) + curSize = p->rem; + memcpy(data, p->data, curSize); + p->rem -= curSize; + p->data += curSize; + *size = curSize; + return SZ_OK; +} + +typedef struct +{ + CLzmaProb *litProbs; + + CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; + CLzmaProb isRep[kNumStates]; + CLzmaProb isRepG0[kNumStates]; + CLzmaProb isRepG1[kNumStates]; + CLzmaProb isRepG2[kNumStates]; + CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; + + CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; + CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; + CLzmaProb posAlignEncoder[1 << kNumAlignBits]; + + CLenPriceEnc lenEnc; + CLenPriceEnc repLenEnc; + + UInt32 reps[LZMA_NUM_REPS]; + UInt32 state; +} CSaveState; + +typedef struct _CLzmaEnc +{ + IMatchFinder matchFinder; + void *matchFinderObj; + + #ifdef COMPRESS_MF_MT + Bool mtMode; + CMatchFinderMt matchFinderMt; + #endif + + CMatchFinder matchFinderBase; + + #ifdef COMPRESS_MF_MT + Byte pad[128]; + #endif + + UInt32 optimumEndIndex; + UInt32 optimumCurrentIndex; + + Bool longestMatchWasFound; + UInt32 longestMatchLength; + UInt32 numDistancePairs; + + COptimal opt[kNumOpts]; + + #ifndef LZMA_LOG_BSR + Byte g_FastPos[1 << kNumLogBits]; + #endif + + UInt32 ProbPrices[kBitModelTotal >> kNumMoveReducingBits]; + UInt32 matchDistances[LZMA_MATCH_LEN_MAX * 2 + 2 + 1]; + UInt32 numFastBytes; + UInt32 additionalOffset; + UInt32 reps[LZMA_NUM_REPS]; + UInt32 state; + + UInt32 posSlotPrices[kNumLenToPosStates][kDistTableSizeMax]; + UInt32 distancesPrices[kNumLenToPosStates][kNumFullDistances]; + UInt32 alignPrices[kAlignTableSize]; + UInt32 alignPriceCount; + + UInt32 distTableSize; + + unsigned lc, lp, pb; + unsigned lpMask, pbMask; + + CLzmaProb *litProbs; + + CLzmaProb isMatch[kNumStates][LZMA_NUM_PB_STATES_MAX]; + CLzmaProb isRep[kNumStates]; + CLzmaProb isRepG0[kNumStates]; + CLzmaProb isRepG1[kNumStates]; + CLzmaProb isRepG2[kNumStates]; + CLzmaProb isRep0Long[kNumStates][LZMA_NUM_PB_STATES_MAX]; + + CLzmaProb posSlotEncoder[kNumLenToPosStates][1 << kNumPosSlotBits]; + CLzmaProb posEncoders[kNumFullDistances - kEndPosModelIndex]; + CLzmaProb posAlignEncoder[1 << kNumAlignBits]; + + CLenPriceEnc lenEnc; + CLenPriceEnc repLenEnc; + + unsigned lclp; + + Bool fastMode; + + CRangeEnc rc; + + Bool writeEndMark; + UInt64 nowPos64; + UInt32 matchPriceCount; + Bool finished; + Bool multiThread; + + SRes result; + UInt32 dictSize; + UInt32 matchFinderCycles; + + ISeqInStream *inStream; + CSeqInStreamBuf seqBufInStream; + + CSaveState saveState; +} CLzmaEnc; + +SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + CLzmaEncProps props = *props2; + LzmaEncProps_Normalize(&props); + + if (props.lc > LZMA_LC_MAX || props.lp > LZMA_LP_MAX || props.pb > LZMA_PB_MAX || + props.dictSize > (1U << kDicLogSizeMaxCompress) || props.dictSize > (1 << 30)) + return SZ_ERROR_PARAM; + p->dictSize = props.dictSize; + p->matchFinderCycles = props.mc; + { + unsigned fb = props.fb; + if (fb < 5) + fb = 5; + if (fb > LZMA_MATCH_LEN_MAX) + fb = LZMA_MATCH_LEN_MAX; + p->numFastBytes = fb; + } + p->lc = props.lc; + p->lp = props.lp; + p->pb = props.pb; + p->fastMode = (props.algo == 0); + p->matchFinderBase.btMode = props.btMode; + { + UInt32 numHashBytes = 4; + if (props.btMode) + { + if (props.numHashBytes < 2) + numHashBytes = 2; + else if (props.numHashBytes < 4) + numHashBytes = props.numHashBytes; + } + p->matchFinderBase.numHashBytes = numHashBytes; + } + + p->matchFinderBase.cutValue = props.mc; + + p->writeEndMark = props.writeEndMark; + + #ifdef COMPRESS_MF_MT + /* + if (newMultiThread != _multiThread) + { + ReleaseMatchFinder(); + _multiThread = newMultiThread; + } + */ + p->multiThread = (props.numThreads > 1); + #endif + + return SZ_OK; +} + +static const int kLiteralNextStates[kNumStates] = {0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 4, 5}; +static const int kMatchNextStates[kNumStates] = {7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10}; +static const int kRepNextStates[kNumStates] = {8, 8, 8, 8, 8, 8, 8, 11, 11, 11, 11, 11}; +static const int kShortRepNextStates[kNumStates]= {9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11}; + +/* + void UpdateChar() { Index = kLiteralNextStates[Index]; } + void UpdateMatch() { Index = kMatchNextStates[Index]; } + void UpdateRep() { Index = kRepNextStates[Index]; } + void UpdateShortRep() { Index = kShortRepNextStates[Index]; } +*/ + +#define IsCharState(s) ((s) < 7) + + +#define GetLenToPosState(len) (((len) < kNumLenToPosStates + 1) ? (len) - 2 : kNumLenToPosStates - 1) + +#define kInfinityPrice (1 << 30) + +static void RangeEnc_Construct(CRangeEnc *p) +{ + p->outStream = 0; + p->bufBase = 0; +} + +#define RangeEnc_GetProcessed(p) ((p)->processed + ((p)->buf - (p)->bufBase) + (p)->cacheSize) + +#define RC_BUF_SIZE (1 << 16) +static int RangeEnc_Alloc(CRangeEnc *p, ISzAlloc *alloc) +{ + if (p->bufBase == 0) + { + p->bufBase = (Byte *)alloc->Alloc(alloc, RC_BUF_SIZE); + if (p->bufBase == 0) + return 0; + p->bufLim = p->bufBase + RC_BUF_SIZE; + } + return 1; +} + +static void RangeEnc_Free(CRangeEnc *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->bufBase); + p->bufBase = 0; +} + +static void RangeEnc_Init(CRangeEnc *p) +{ + /* Stream.Init(); */ + p->low = 0; + p->range = 0xFFFFFFFF; + p->cacheSize = 1; + p->cache = 0; + + p->buf = p->bufBase; + + p->processed = 0; + p->res = SZ_OK; +} + +static void RangeEnc_FlushStream(CRangeEnc *p) +{ + size_t num; + if (p->res != SZ_OK) + return; + num = p->buf - p->bufBase; + if (num != p->outStream->Write(p->outStream, p->bufBase, num)) + p->res = SZ_ERROR_WRITE; + p->processed += num; + p->buf = p->bufBase; +} + +static void MY_FAST_CALL RangeEnc_ShiftLow(CRangeEnc *p) +{ + if ((UInt32)p->low < (UInt32)0xFF000000 || (int)(p->low >> 32) != 0) + { + Byte temp = p->cache; + do + { + Byte *buf = p->buf; + *buf++ = (Byte)(temp + (Byte)(p->low >> 32)); + p->buf = buf; + if (buf == p->bufLim) + RangeEnc_FlushStream(p); + temp = 0xFF; + } + while (--p->cacheSize != 0); + p->cache = (Byte)((UInt32)p->low >> 24); + } + p->cacheSize++; + p->low = (UInt32)p->low << 8; +} + +static void RangeEnc_FlushData(CRangeEnc *p) +{ + int i; + for (i = 0; i < 5; i++) + RangeEnc_ShiftLow(p); +} + +static void RangeEnc_EncodeDirectBits(CRangeEnc *p, UInt32 value, int numBits) +{ + do + { + p->range >>= 1; + p->low += p->range & (0 - ((value >> --numBits) & 1)); + if (p->range < kTopValue) + { + p->range <<= 8; + RangeEnc_ShiftLow(p); + } + } + while (numBits != 0); +} + +static void RangeEnc_EncodeBit(CRangeEnc *p, CLzmaProb *prob, UInt32 symbol) +{ + UInt32 ttt = *prob; + UInt32 newBound = (p->range >> kNumBitModelTotalBits) * ttt; + if (symbol == 0) + { + p->range = newBound; + ttt += (kBitModelTotal - ttt) >> kNumMoveBits; + } + else + { + p->low += newBound; + p->range -= newBound; + ttt -= ttt >> kNumMoveBits; + } + *prob = (CLzmaProb)ttt; + if (p->range < kTopValue) + { + p->range <<= 8; + RangeEnc_ShiftLow(p); + } +} + +static void LitEnc_Encode(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol) +{ + symbol |= 0x100; + do + { + RangeEnc_EncodeBit(p, probs + (symbol >> 8), (symbol >> 7) & 1); + symbol <<= 1; + } + while (symbol < 0x10000); +} + +static void LitEnc_EncodeMatched(CRangeEnc *p, CLzmaProb *probs, UInt32 symbol, UInt32 matchByte) +{ + UInt32 offs = 0x100; + symbol |= 0x100; + do + { + matchByte <<= 1; + RangeEnc_EncodeBit(p, probs + (offs + (matchByte & offs) + (symbol >> 8)), (symbol >> 7) & 1); + symbol <<= 1; + offs &= ~(matchByte ^ symbol); + } + while (symbol < 0x10000); +} + +static void LzmaEnc_InitPriceTables(UInt32 *ProbPrices) +{ + UInt32 i; + for (i = (1 << kNumMoveReducingBits) / 2; i < kBitModelTotal; i += (1 << kNumMoveReducingBits)) + { + const int kCyclesBits = kNumBitPriceShiftBits; + UInt32 w = i; + UInt32 bitCount = 0; + int j; + for (j = 0; j < kCyclesBits; j++) + { + w = w * w; + bitCount <<= 1; + while (w >= ((UInt32)1 << 16)) + { + w >>= 1; + bitCount++; + } + } + ProbPrices[i >> kNumMoveReducingBits] = ((kNumBitModelTotalBits << kCyclesBits) - 15 - bitCount); + } +} + + +#define GET_PRICE(prob, symbol) \ + p->ProbPrices[((prob) ^ (((-(int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; + +#define GET_PRICEa(prob, symbol) \ + ProbPrices[((prob) ^ ((-((int)(symbol))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; + +#define GET_PRICE_0(prob) p->ProbPrices[(prob) >> kNumMoveReducingBits] +#define GET_PRICE_1(prob) p->ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] + +#define GET_PRICE_0a(prob) ProbPrices[(prob) >> kNumMoveReducingBits] +#define GET_PRICE_1a(prob) ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] + +static UInt32 LitEnc_GetPrice(const CLzmaProb *probs, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + symbol |= 0x100; + do + { + price += GET_PRICEa(probs[symbol >> 8], (symbol >> 7) & 1); + symbol <<= 1; + } + while (symbol < 0x10000); + return price; +}; + +static UInt32 LitEnc_GetPriceMatched(const CLzmaProb *probs, UInt32 symbol, UInt32 matchByte, UInt32 *ProbPrices) +{ + UInt32 price = 0; + UInt32 offs = 0x100; + symbol |= 0x100; + do + { + matchByte <<= 1; + price += GET_PRICEa(probs[offs + (matchByte & offs) + (symbol >> 8)], (symbol >> 7) & 1); + symbol <<= 1; + offs &= ~(matchByte ^ symbol); + } + while (symbol < 0x10000); + return price; +}; + + +static void RcTree_Encode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) +{ + UInt32 m = 1; + int i; + for (i = numBitLevels; i != 0 ;) + { + UInt32 bit; + i--; + bit = (symbol >> i) & 1; + RangeEnc_EncodeBit(rc, probs + m, bit); + m = (m << 1) | bit; + } +}; + +static void RcTree_ReverseEncode(CRangeEnc *rc, CLzmaProb *probs, int numBitLevels, UInt32 symbol) +{ + UInt32 m = 1; + int i; + for (i = 0; i < numBitLevels; i++) + { + UInt32 bit = symbol & 1; + RangeEnc_EncodeBit(rc, probs + m, bit); + m = (m << 1) | bit; + symbol >>= 1; + } +} + +static UInt32 RcTree_GetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + symbol |= (1 << numBitLevels); + while (symbol != 1) + { + price += GET_PRICEa(probs[symbol >> 1], symbol & 1); + symbol >>= 1; + } + return price; +} + +static UInt32 RcTree_ReverseGetPrice(const CLzmaProb *probs, int numBitLevels, UInt32 symbol, UInt32 *ProbPrices) +{ + UInt32 price = 0; + UInt32 m = 1; + int i; + for (i = numBitLevels; i != 0; i--) + { + UInt32 bit = symbol & 1; + symbol >>= 1; + price += GET_PRICEa(probs[m], bit); + m = (m << 1) | bit; + } + return price; +} + + +static void LenEnc_Init(CLenEnc *p) +{ + unsigned i; + p->choice = p->choice2 = kProbInitValue; + for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumLowBits); i++) + p->low[i] = kProbInitValue; + for (i = 0; i < (LZMA_NUM_PB_STATES_MAX << kLenNumMidBits); i++) + p->mid[i] = kProbInitValue; + for (i = 0; i < kLenNumHighSymbols; i++) + p->high[i] = kProbInitValue; +} + +static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState) +{ + if (symbol < kLenNumLowSymbols) + { + RangeEnc_EncodeBit(rc, &p->choice, 0); + RcTree_Encode(rc, p->low + (posState << kLenNumLowBits), kLenNumLowBits, symbol); + } + else + { + RangeEnc_EncodeBit(rc, &p->choice, 1); + if (symbol < kLenNumLowSymbols + kLenNumMidSymbols) + { + RangeEnc_EncodeBit(rc, &p->choice2, 0); + RcTree_Encode(rc, p->mid + (posState << kLenNumMidBits), kLenNumMidBits, symbol - kLenNumLowSymbols); + } + else + { + RangeEnc_EncodeBit(rc, &p->choice2, 1); + RcTree_Encode(rc, p->high, kLenNumHighBits, symbol - kLenNumLowSymbols - kLenNumMidSymbols); + } + } +} + +static void LenEnc_SetPrices(CLenEnc *p, UInt32 posState, UInt32 numSymbols, UInt32 *prices, UInt32 *ProbPrices) +{ + UInt32 a0 = GET_PRICE_0a(p->choice); + UInt32 a1 = GET_PRICE_1a(p->choice); + UInt32 b0 = a1 + GET_PRICE_0a(p->choice2); + UInt32 b1 = a1 + GET_PRICE_1a(p->choice2); + UInt32 i = 0; + for (i = 0; i < kLenNumLowSymbols; i++) + { + if (i >= numSymbols) + return; + prices[i] = a0 + RcTree_GetPrice(p->low + (posState << kLenNumLowBits), kLenNumLowBits, i, ProbPrices); + } + for (; i < kLenNumLowSymbols + kLenNumMidSymbols; i++) + { + if (i >= numSymbols) + return; + prices[i] = b0 + RcTree_GetPrice(p->mid + (posState << kLenNumMidBits), kLenNumMidBits, i - kLenNumLowSymbols, ProbPrices); + } + for (; i < numSymbols; i++) + prices[i] = b1 + RcTree_GetPrice(p->high, kLenNumHighBits, i - kLenNumLowSymbols - kLenNumMidSymbols, ProbPrices); +} + +static void MY_FAST_CALL LenPriceEnc_UpdateTable(CLenPriceEnc *p, UInt32 posState, UInt32 *ProbPrices) +{ + LenEnc_SetPrices(&p->p, posState, p->tableSize, p->prices[posState], ProbPrices); + p->counters[posState] = p->tableSize; +} + +static void LenPriceEnc_UpdateTables(CLenPriceEnc *p, UInt32 numPosStates, UInt32 *ProbPrices) +{ + UInt32 posState; + for (posState = 0; posState < numPosStates; posState++) + LenPriceEnc_UpdateTable(p, posState, ProbPrices); +} + +static void LenEnc_Encode2(CLenPriceEnc *p, CRangeEnc *rc, UInt32 symbol, UInt32 posState, Bool updatePrice, UInt32 *ProbPrices) +{ + LenEnc_Encode(&p->p, rc, symbol, posState); + if (updatePrice) + if (--p->counters[posState] == 0) + LenPriceEnc_UpdateTable(p, posState, ProbPrices); +} + + + + +static void MovePos(CLzmaEnc *p, UInt32 num) +{ + #ifdef SHOW_STAT + ttt += num; + printf("\n MovePos %d", num); + #endif + if (num != 0) + { + p->additionalOffset += num; + p->matchFinder.Skip(p->matchFinderObj, num); + } +} + +static UInt32 ReadMatchDistances(CLzmaEnc *p, UInt32 *numDistancePairsRes) +{ + UInt32 lenRes = 0, numDistancePairs; + numDistancePairs = p->matchFinder.GetMatches(p->matchFinderObj, p->matchDistances); + #ifdef SHOW_STAT + printf("\n i = %d numPairs = %d ", ttt, numDistancePairs / 2); + if (ttt >= 61994) + ttt = ttt; + + ttt++; + { + UInt32 i; + for (i = 0; i < numDistancePairs; i += 2) + printf("%2d %6d | ", p->matchDistances[i], p->matchDistances[i + 1]); + } + #endif + if (numDistancePairs > 0) + { + lenRes = p->matchDistances[numDistancePairs - 2]; + if (lenRes == p->numFastBytes) + { + UInt32 numAvail = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) + 1; + const Byte *pby = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + UInt32 distance = p->matchDistances[numDistancePairs - 1] + 1; + if (numAvail > LZMA_MATCH_LEN_MAX) + numAvail = LZMA_MATCH_LEN_MAX; + + { + const Byte *pby2 = pby - distance; + for (; lenRes < numAvail && pby[lenRes] == pby2[lenRes]; lenRes++); + } + } + } + p->additionalOffset++; + *numDistancePairsRes = numDistancePairs; + return lenRes; +} + + +#define MakeAsChar(p) (p)->backPrev = (UInt32)(-1); (p)->prev1IsChar = False; +#define MakeAsShortRep(p) (p)->backPrev = 0; (p)->prev1IsChar = False; +#define IsShortRep(p) ((p)->backPrev == 0) + +static UInt32 GetRepLen1Price(CLzmaEnc *p, UInt32 state, UInt32 posState) +{ + return + GET_PRICE_0(p->isRepG0[state]) + + GET_PRICE_0(p->isRep0Long[state][posState]); +} + +static UInt32 GetPureRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 state, UInt32 posState) +{ + UInt32 price; + if (repIndex == 0) + { + price = GET_PRICE_0(p->isRepG0[state]); + price += GET_PRICE_1(p->isRep0Long[state][posState]); + } + else + { + price = GET_PRICE_1(p->isRepG0[state]); + if (repIndex == 1) + price += GET_PRICE_0(p->isRepG1[state]); + else + { + price += GET_PRICE_1(p->isRepG1[state]); + price += GET_PRICE(p->isRepG2[state], repIndex - 2); + } + } + return price; +} + +static UInt32 GetRepPrice(CLzmaEnc *p, UInt32 repIndex, UInt32 len, UInt32 state, UInt32 posState) +{ + return p->repLenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN] + + GetPureRepPrice(p, repIndex, state, posState); +} + +static UInt32 Backward(CLzmaEnc *p, UInt32 *backRes, UInt32 cur) +{ + UInt32 posMem = p->opt[cur].posPrev; + UInt32 backMem = p->opt[cur].backPrev; + p->optimumEndIndex = cur; + do + { + if (p->opt[cur].prev1IsChar) + { + MakeAsChar(&p->opt[posMem]) + p->opt[posMem].posPrev = posMem - 1; + if (p->opt[cur].prev2) + { + p->opt[posMem - 1].prev1IsChar = False; + p->opt[posMem - 1].posPrev = p->opt[cur].posPrev2; + p->opt[posMem - 1].backPrev = p->opt[cur].backPrev2; + } + } + { + UInt32 posPrev = posMem; + UInt32 backCur = backMem; + + backMem = p->opt[posPrev].backPrev; + posMem = p->opt[posPrev].posPrev; + + p->opt[posPrev].backPrev = backCur; + p->opt[posPrev].posPrev = cur; + cur = posPrev; + } + } + while (cur != 0); + *backRes = p->opt[0].backPrev; + p->optimumCurrentIndex = p->opt[0].posPrev; + return p->optimumCurrentIndex; +} + +#define LIT_PROBS(pos, prevByte) (p->litProbs + ((((pos) & p->lpMask) << p->lc) + ((prevByte) >> (8 - p->lc))) * 0x300) + +#pragma GCC diagnostic ignored "-Wshadow" + +static UInt32 GetOptimum(CLzmaEnc *p, UInt32 position, UInt32 *backRes) +{ + UInt32 numAvailableBytes, lenMain, numDistancePairs; + const Byte *data; + UInt32 reps[LZMA_NUM_REPS]; + UInt32 repLens[LZMA_NUM_REPS]; + UInt32 repMaxIndex, i; + UInt32 *matchDistances; + Byte currentByte, matchByte; + UInt32 posState; + UInt32 matchPrice, repMatchPrice; + UInt32 lenEnd; + UInt32 len; + UInt32 normalMatchPrice; + UInt32 cur; + if (p->optimumEndIndex != p->optimumCurrentIndex) + { + const COptimal *opt = &p->opt[p->optimumCurrentIndex]; + UInt32 lenRes = opt->posPrev - p->optimumCurrentIndex; + *backRes = opt->backPrev; + p->optimumCurrentIndex = opt->posPrev; + return lenRes; + } + p->optimumCurrentIndex = p->optimumEndIndex = 0; + + numAvailableBytes = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); + + if (!p->longestMatchWasFound) + { + lenMain = ReadMatchDistances(p, &numDistancePairs); + } + else + { + lenMain = p->longestMatchLength; + numDistancePairs = p->numDistancePairs; + p->longestMatchWasFound = False; + } + + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + if (numAvailableBytes < 2) + { + *backRes = (UInt32)(-1); + return 1; + } + if (numAvailableBytes > LZMA_MATCH_LEN_MAX) + numAvailableBytes = LZMA_MATCH_LEN_MAX; + + repMaxIndex = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 lenTest; + const Byte *data2; + reps[i] = p->reps[i]; + data2 = data - (reps[i] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + { + repLens[i] = 0; + continue; + } + for (lenTest = 2; lenTest < numAvailableBytes && data[lenTest] == data2[lenTest]; lenTest++); + repLens[i] = lenTest; + if (lenTest > repLens[repMaxIndex]) + repMaxIndex = i; + } + if (repLens[repMaxIndex] >= p->numFastBytes) + { + UInt32 lenRes; + *backRes = repMaxIndex; + lenRes = repLens[repMaxIndex]; + MovePos(p, lenRes - 1); + return lenRes; + } + + matchDistances = p->matchDistances; + if (lenMain >= p->numFastBytes) + { + *backRes = matchDistances[numDistancePairs - 1] + LZMA_NUM_REPS; + MovePos(p, lenMain - 1); + return lenMain; + } + currentByte = *data; + matchByte = *(data - (reps[0] + 1)); + + if (lenMain < 2 && currentByte != matchByte && repLens[repMaxIndex] < 2) + { + *backRes = (UInt32)-1; + return 1; + } + + p->opt[0].state = (CState)p->state; + + posState = (position & p->pbMask); + + { + const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); + p->opt[1].price = GET_PRICE_0(p->isMatch[p->state][posState]) + + (!IsCharState(p->state) ? + LitEnc_GetPriceMatched(probs, currentByte, matchByte, p->ProbPrices) : + LitEnc_GetPrice(probs, currentByte, p->ProbPrices)); + } + + MakeAsChar(&p->opt[1]); + + matchPrice = GET_PRICE_1(p->isMatch[p->state][posState]); + repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[p->state]); + + if (matchByte == currentByte) + { + UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, p->state, posState); + if (shortRepPrice < p->opt[1].price) + { + p->opt[1].price = shortRepPrice; + MakeAsShortRep(&p->opt[1]); + } + } + lenEnd = ((lenMain >= repLens[repMaxIndex]) ? lenMain : repLens[repMaxIndex]); + + if (lenEnd < 2) + { + *backRes = p->opt[1].backPrev; + return 1; + } + + p->opt[1].posPrev = 0; + for (i = 0; i < LZMA_NUM_REPS; i++) + p->opt[0].backs[i] = reps[i]; + + len = lenEnd; + do + p->opt[len--].price = kInfinityPrice; + while (len >= 2); + + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 repLen = repLens[i]; + UInt32 price; + if (repLen < 2) + continue; + price = repMatchPrice + GetPureRepPrice(p, i, p->state, posState); + do + { + UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][repLen - 2]; + COptimal *opt = &p->opt[repLen]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = 0; + opt->backPrev = i; + opt->prev1IsChar = False; + } + } + while (--repLen >= 2); + } + + normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[p->state]); + + len = ((repLens[0] >= 2) ? repLens[0] + 1 : 2); + if (len <= lenMain) + { + UInt32 offs = 0; + while (len > matchDistances[offs]) + offs += 2; + for (; ; len++) + { + COptimal *opt; + UInt32 distance = matchDistances[offs + 1]; + + UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][len - LZMA_MATCH_LEN_MIN]; + UInt32 lenToPosState = GetLenToPosState(len); + if (distance < kNumFullDistances) + curAndLenPrice += p->distancesPrices[lenToPosState][distance]; + else + { + UInt32 slot; + GetPosSlot2(distance, slot); + curAndLenPrice += p->alignPrices[distance & kAlignMask] + p->posSlotPrices[lenToPosState][slot]; + } + opt = &p->opt[len]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = 0; + opt->backPrev = distance + LZMA_NUM_REPS; + opt->prev1IsChar = False; + } + if (len == matchDistances[offs]) + { + offs += 2; + if (offs == numDistancePairs) + break; + } + } + } + + cur = 0; + + #ifdef SHOW_STAT2 + if (position >= 0) + { + unsigned i; + printf("\n pos = %4X", position); + for (i = cur; i <= lenEnd; i++) + printf("\nprice[%4X] = %d", position - cur + i, p->opt[i].price); + } + #endif + + for (;;) + { + UInt32 numAvailableBytesFull, newLen, numDistancePairs; + COptimal *curOpt; + UInt32 posPrev; + UInt32 state; + UInt32 curPrice; + Bool nextIsChar; + const Byte *data; + Byte currentByte, matchByte; + UInt32 posState; + UInt32 curAnd1Price; + COptimal *nextOpt; + UInt32 matchPrice, repMatchPrice; + UInt32 numAvailableBytes; + UInt32 startLen; + + cur++; + if (cur == lenEnd) + return Backward(p, backRes, cur); + + numAvailableBytesFull = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); + newLen = ReadMatchDistances(p, &numDistancePairs); + if (newLen >= p->numFastBytes) + { + p->numDistancePairs = numDistancePairs; + p->longestMatchLength = newLen; + p->longestMatchWasFound = True; + return Backward(p, backRes, cur); + } + position++; + curOpt = &p->opt[cur]; + posPrev = curOpt->posPrev; + if (curOpt->prev1IsChar) + { + posPrev--; + if (curOpt->prev2) + { + state = p->opt[curOpt->posPrev2].state; + if (curOpt->backPrev2 < LZMA_NUM_REPS) + state = kRepNextStates[state]; + else + state = kMatchNextStates[state]; + } + else + state = p->opt[posPrev].state; + state = kLiteralNextStates[state]; + } + else + state = p->opt[posPrev].state; + if (posPrev == cur - 1) + { + if (IsShortRep(curOpt)) + state = kShortRepNextStates[state]; + else + state = kLiteralNextStates[state]; + } + else + { + UInt32 pos; + const COptimal *prevOpt; + if (curOpt->prev1IsChar && curOpt->prev2) + { + posPrev = curOpt->posPrev2; + pos = curOpt->backPrev2; + state = kRepNextStates[state]; + } + else + { + pos = curOpt->backPrev; + if (pos < LZMA_NUM_REPS) + state = kRepNextStates[state]; + else + state = kMatchNextStates[state]; + } + prevOpt = &p->opt[posPrev]; + if (pos < LZMA_NUM_REPS) + { + UInt32 i; + reps[0] = prevOpt->backs[pos]; + for (i = 1; i < pos + 1; i++) + reps[i] = prevOpt->backs[i - 1]; + for (; i < LZMA_NUM_REPS; i++) + reps[i] = prevOpt->backs[i]; + } + else + { + UInt32 i; + reps[0] = (pos - LZMA_NUM_REPS); + for (i = 1; i < LZMA_NUM_REPS; i++) + reps[i] = prevOpt->backs[i - 1]; + } + } + curOpt->state = (CState)state; + + curOpt->backs[0] = reps[0]; + curOpt->backs[1] = reps[1]; + curOpt->backs[2] = reps[2]; + curOpt->backs[3] = reps[3]; + + curPrice = curOpt->price; + nextIsChar = False; + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + currentByte = *data; + matchByte = *(data - (reps[0] + 1)); + + posState = (position & p->pbMask); + + curAnd1Price = curPrice + GET_PRICE_0(p->isMatch[state][posState]); + { + const CLzmaProb *probs = LIT_PROBS(position, *(data - 1)); + curAnd1Price += + (!IsCharState(state) ? + LitEnc_GetPriceMatched(probs, currentByte, matchByte, p->ProbPrices) : + LitEnc_GetPrice(probs, currentByte, p->ProbPrices)); + } + + nextOpt = &p->opt[cur + 1]; + + if (curAnd1Price < nextOpt->price) + { + nextOpt->price = curAnd1Price; + nextOpt->posPrev = cur; + MakeAsChar(nextOpt); + nextIsChar = True; + } + + matchPrice = curPrice + GET_PRICE_1(p->isMatch[state][posState]); + repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[state]); + + if (matchByte == currentByte && !(nextOpt->posPrev < cur && nextOpt->backPrev == 0)) + { + UInt32 shortRepPrice = repMatchPrice + GetRepLen1Price(p, state, posState); + if (shortRepPrice <= nextOpt->price) + { + nextOpt->price = shortRepPrice; + nextOpt->posPrev = cur; + MakeAsShortRep(nextOpt); + nextIsChar = True; + } + } + + { + UInt32 temp = kNumOpts - 1 - cur; + if (temp < numAvailableBytesFull) + numAvailableBytesFull = temp; + } + numAvailableBytes = numAvailableBytesFull; + + if (numAvailableBytes < 2) + continue; + if (numAvailableBytes > p->numFastBytes) + numAvailableBytes = p->numFastBytes; + if (!nextIsChar && matchByte != currentByte) /* speed optimization */ + { + /* try Literal + rep0 */ + UInt32 temp; + UInt32 lenTest2; + const Byte *data2 = data - (reps[0] + 1); + UInt32 limit = p->numFastBytes + 1; + if (limit > numAvailableBytesFull) + limit = numAvailableBytesFull; + + for (temp = 1; temp < limit && data[temp] == data2[temp]; temp++); + lenTest2 = temp - 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kLiteralNextStates[state]; + UInt32 posStateNext = (position + 1) & p->pbMask; + UInt32 nextRepMatchPrice = curAnd1Price + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 curAndLenPrice; + COptimal *opt; + UInt32 offset = cur + 1 + lenTest2; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = False; + } + } + } + } + + startLen = 2; /* speed optimization */ + { + UInt32 repIndex; + for (repIndex = 0; repIndex < LZMA_NUM_REPS; repIndex++) + { + UInt32 lenTest; + UInt32 lenTestTemp; + UInt32 price; + const Byte *data2 = data - (reps[repIndex] + 1); + if (data[0] != data2[0] || data[1] != data2[1]) + continue; + for (lenTest = 2; lenTest < numAvailableBytes && data[lenTest] == data2[lenTest]; lenTest++); + while (lenEnd < cur + lenTest) + p->opt[++lenEnd].price = kInfinityPrice; + lenTestTemp = lenTest; + price = repMatchPrice + GetPureRepPrice(p, repIndex, state, posState); + do + { + UInt32 curAndLenPrice = price + p->repLenEnc.prices[posState][lenTest - 2]; + COptimal *opt = &p->opt[cur + lenTest]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur; + opt->backPrev = repIndex; + opt->prev1IsChar = False; + } + } + while (--lenTest >= 2); + lenTest = lenTestTemp; + + if (repIndex == 0) + startLen = lenTest + 1; + + /* if (_maxMode) */ + { + UInt32 lenTest2 = lenTest + 1; + UInt32 limit = lenTest2 + p->numFastBytes; + UInt32 nextRepMatchPrice; + if (limit > numAvailableBytesFull) + limit = numAvailableBytesFull; + for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); + lenTest2 -= lenTest + 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kRepNextStates[state]; + UInt32 posStateNext = (position + lenTest) & p->pbMask; + UInt32 curAndLenCharPrice = + price + p->repLenEnc.prices[posState][lenTest - 2] + + GET_PRICE_0(p->isMatch[state2][posStateNext]) + + LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), + data[lenTest], data2[lenTest], p->ProbPrices); + state2 = kLiteralNextStates[state2]; + posStateNext = (position + lenTest + 1) & p->pbMask; + nextRepMatchPrice = curAndLenCharPrice + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 curAndLenPrice; + COptimal *opt; + UInt32 offset = cur + lenTest + 1 + lenTest2; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + lenTest + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = True; + opt->posPrev2 = cur; + opt->backPrev2 = repIndex; + } + } + } + } + } + } + /* for (UInt32 lenTest = 2; lenTest <= newLen; lenTest++) */ + if (newLen > numAvailableBytes) + { + newLen = numAvailableBytes; + for (numDistancePairs = 0; newLen > matchDistances[numDistancePairs]; numDistancePairs += 2); + matchDistances[numDistancePairs] = newLen; + numDistancePairs += 2; + } + if (newLen >= startLen) + { + UInt32 normalMatchPrice = matchPrice + GET_PRICE_0(p->isRep[state]); + UInt32 offs, curBack, posSlot; + UInt32 lenTest; + while (lenEnd < cur + newLen) + p->opt[++lenEnd].price = kInfinityPrice; + + offs = 0; + while (startLen > matchDistances[offs]) + offs += 2; + curBack = matchDistances[offs + 1]; + GetPosSlot2(curBack, posSlot); + for (lenTest = /*2*/ startLen; ; lenTest++) + { + UInt32 curAndLenPrice = normalMatchPrice + p->lenEnc.prices[posState][lenTest - LZMA_MATCH_LEN_MIN]; + UInt32 lenToPosState = GetLenToPosState(lenTest); + COptimal *opt; + if (curBack < kNumFullDistances) + curAndLenPrice += p->distancesPrices[lenToPosState][curBack]; + else + curAndLenPrice += p->posSlotPrices[lenToPosState][posSlot] + p->alignPrices[curBack & kAlignMask]; + + opt = &p->opt[cur + lenTest]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur; + opt->backPrev = curBack + LZMA_NUM_REPS; + opt->prev1IsChar = False; + } + + if (/*_maxMode && */lenTest == matchDistances[offs]) + { + /* Try Match + Literal + Rep0 */ + const Byte *data2 = data - (curBack + 1); + UInt32 lenTest2 = lenTest + 1; + UInt32 limit = lenTest2 + p->numFastBytes; + UInt32 nextRepMatchPrice; + if (limit > numAvailableBytesFull) + limit = numAvailableBytesFull; + for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++); + lenTest2 -= lenTest + 1; + if (lenTest2 >= 2) + { + UInt32 state2 = kMatchNextStates[state]; + UInt32 posStateNext = (position + lenTest) & p->pbMask; + UInt32 curAndLenCharPrice = curAndLenPrice + + GET_PRICE_0(p->isMatch[state2][posStateNext]) + + LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]), + data[lenTest], data2[lenTest], p->ProbPrices); + state2 = kLiteralNextStates[state2]; + posStateNext = (posStateNext + 1) & p->pbMask; + nextRepMatchPrice = curAndLenCharPrice + + GET_PRICE_1(p->isMatch[state2][posStateNext]) + + GET_PRICE_1(p->isRep[state2]); + + /* for (; lenTest2 >= 2; lenTest2--) */ + { + UInt32 offset = cur + lenTest + 1 + lenTest2; + UInt32 curAndLenPrice; + COptimal *opt; + while (lenEnd < offset) + p->opt[++lenEnd].price = kInfinityPrice; + curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext); + opt = &p->opt[offset]; + if (curAndLenPrice < opt->price) + { + opt->price = curAndLenPrice; + opt->posPrev = cur + lenTest + 1; + opt->backPrev = 0; + opt->prev1IsChar = True; + opt->prev2 = True; + opt->posPrev2 = cur; + opt->backPrev2 = curBack + LZMA_NUM_REPS; + } + } + } + offs += 2; + if (offs == numDistancePairs) + break; + curBack = matchDistances[offs + 1]; + if (curBack >= kNumFullDistances) + GetPosSlot2(curBack, posSlot); + } + } + } + } +} + +#define ChangePair(smallDist, bigDist) (((bigDist) >> 7) > (smallDist)) + +static UInt32 GetOptimumFast(CLzmaEnc *p, UInt32 *backRes) +{ + UInt32 numAvailableBytes = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); + UInt32 lenMain, numDistancePairs; + const Byte *data; + UInt32 repLens[LZMA_NUM_REPS]; + UInt32 repMaxIndex, i; + UInt32 *matchDistances; + UInt32 backMain; + + if (!p->longestMatchWasFound) + { + lenMain = ReadMatchDistances(p, &numDistancePairs); + } + else + { + lenMain = p->longestMatchLength; + numDistancePairs = p->numDistancePairs; + p->longestMatchWasFound = False; + } + + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + if (numAvailableBytes > LZMA_MATCH_LEN_MAX) + numAvailableBytes = LZMA_MATCH_LEN_MAX; + if (numAvailableBytes < 2) + { + *backRes = (UInt32)(-1); + return 1; + } + + repMaxIndex = 0; + + for (i = 0; i < LZMA_NUM_REPS; i++) + { + const Byte *data2 = data - (p->reps[i] + 1); + UInt32 len; + if (data[0] != data2[0] || data[1] != data2[1]) + { + repLens[i] = 0; + continue; + } + for (len = 2; len < numAvailableBytes && data[len] == data2[len]; len++); + if (len >= p->numFastBytes) + { + *backRes = i; + MovePos(p, len - 1); + return len; + } + repLens[i] = len; + if (len > repLens[repMaxIndex]) + repMaxIndex = i; + } + matchDistances = p->matchDistances; + if (lenMain >= p->numFastBytes) + { + *backRes = matchDistances[numDistancePairs - 1] + LZMA_NUM_REPS; + MovePos(p, lenMain - 1); + return lenMain; + } + + backMain = 0; /* for GCC */ + if (lenMain >= 2) + { + backMain = matchDistances[numDistancePairs - 1]; + while (numDistancePairs > 2 && lenMain == matchDistances[numDistancePairs - 4] + 1) + { + if (!ChangePair(matchDistances[numDistancePairs - 3], backMain)) + break; + numDistancePairs -= 2; + lenMain = matchDistances[numDistancePairs - 2]; + backMain = matchDistances[numDistancePairs - 1]; + } + if (lenMain == 2 && backMain >= 0x80) + lenMain = 1; + } + + if (repLens[repMaxIndex] >= 2) + { + if (repLens[repMaxIndex] + 1 >= lenMain || + (repLens[repMaxIndex] + 2 >= lenMain && (backMain > (1 << 9))) || + (repLens[repMaxIndex] + 3 >= lenMain && (backMain > (1 << 15)))) + { + UInt32 lenRes; + *backRes = repMaxIndex; + lenRes = repLens[repMaxIndex]; + MovePos(p, lenRes - 1); + return lenRes; + } + } + + if (lenMain >= 2 && numAvailableBytes > 2) + { + UInt32 i; + numAvailableBytes = p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); + p->longestMatchLength = ReadMatchDistances(p, &p->numDistancePairs); + if (p->longestMatchLength >= 2) + { + UInt32 newDistance = matchDistances[p->numDistancePairs - 1]; + if ((p->longestMatchLength >= lenMain && newDistance < backMain) || + (p->longestMatchLength == lenMain + 1 && !ChangePair(backMain, newDistance)) || + (p->longestMatchLength > lenMain + 1) || + (p->longestMatchLength + 1 >= lenMain && lenMain >= 3 && ChangePair(newDistance, backMain))) + { + p->longestMatchWasFound = True; + *backRes = (UInt32)(-1); + return 1; + } + } + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - 1; + for (i = 0; i < LZMA_NUM_REPS; i++) + { + UInt32 len; + const Byte *data2 = data - (p->reps[i] + 1); + if (data[1] != data2[1] || data[2] != data2[2]) + { + repLens[i] = 0; + continue; + } + for (len = 2; len < numAvailableBytes && data[len] == data2[len]; len++); + if (len + 1 >= lenMain) + { + p->longestMatchWasFound = True; + *backRes = (UInt32)(-1); + return 1; + } + } + *backRes = backMain + LZMA_NUM_REPS; + MovePos(p, lenMain - 2); + return lenMain; + } + *backRes = (UInt32)(-1); + return 1; +} + +static void WriteEndMarker(CLzmaEnc *p, UInt32 posState) +{ + UInt32 len; + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); + p->state = kMatchNextStates[p->state]; + len = LZMA_MATCH_LEN_MIN; + LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, (1 << kNumPosSlotBits) - 1); + RangeEnc_EncodeDirectBits(&p->rc, (((UInt32)1 << 30) - 1) >> kNumAlignBits, 30 - kNumAlignBits); + RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, kAlignMask); +} + +static SRes CheckErrors(CLzmaEnc *p) +{ + if (p->result != SZ_OK) + return p->result; + if (p->rc.res != SZ_OK) + p->result = SZ_ERROR_WRITE; + if (p->matchFinderBase.result != SZ_OK) + p->result = SZ_ERROR_READ; + if (p->result != SZ_OK) + p->finished = True; + return p->result; +} + +static SRes Flush(CLzmaEnc *p, UInt32 nowPos) +{ + /* ReleaseMFStream(); */ + p->finished = True; + if (p->writeEndMark) + WriteEndMarker(p, nowPos & p->pbMask); + RangeEnc_FlushData(&p->rc); + RangeEnc_FlushStream(&p->rc); + return CheckErrors(p); +} + +static void FillAlignPrices(CLzmaEnc *p) +{ + UInt32 i; + for (i = 0; i < kAlignTableSize; i++) + p->alignPrices[i] = RcTree_ReverseGetPrice(p->posAlignEncoder, kNumAlignBits, i, p->ProbPrices); + p->alignPriceCount = 0; +} + +static void FillDistancesPrices(CLzmaEnc *p) +{ + UInt32 tempPrices[kNumFullDistances]; + UInt32 i, lenToPosState; + for (i = kStartPosModelIndex; i < kNumFullDistances; i++) + { + UInt32 posSlot = GetPosSlot1(i); + UInt32 footerBits = ((posSlot >> 1) - 1); + UInt32 base = ((2 | (posSlot & 1)) << footerBits); + tempPrices[i] = RcTree_ReverseGetPrice(p->posEncoders + base - posSlot - 1, footerBits, i - base, p->ProbPrices); + } + + for (lenToPosState = 0; lenToPosState < kNumLenToPosStates; lenToPosState++) + { + UInt32 posSlot; + const CLzmaProb *encoder = p->posSlotEncoder[lenToPosState]; + UInt32 *posSlotPrices = p->posSlotPrices[lenToPosState]; + for (posSlot = 0; posSlot < p->distTableSize; posSlot++) + posSlotPrices[posSlot] = RcTree_GetPrice(encoder, kNumPosSlotBits, posSlot, p->ProbPrices); + for (posSlot = kEndPosModelIndex; posSlot < p->distTableSize; posSlot++) + posSlotPrices[posSlot] += ((((posSlot >> 1) - 1) - kNumAlignBits) << kNumBitPriceShiftBits); + + { + UInt32 *distancesPrices = p->distancesPrices[lenToPosState]; + UInt32 i; + for (i = 0; i < kStartPosModelIndex; i++) + distancesPrices[i] = posSlotPrices[i]; + for (; i < kNumFullDistances; i++) + distancesPrices[i] = posSlotPrices[GetPosSlot1(i)] + tempPrices[i]; + } + } + p->matchPriceCount = 0; +} + +static void LzmaEnc_Construct(CLzmaEnc *p) +{ + RangeEnc_Construct(&p->rc); + MatchFinder_Construct(&p->matchFinderBase); + #ifdef COMPRESS_MF_MT + MatchFinderMt_Construct(&p->matchFinderMt); + p->matchFinderMt.MatchFinder = &p->matchFinderBase; + #endif + + { + CLzmaEncProps props; + LzmaEncProps_Init(&props); + LzmaEnc_SetProps(p, &props); + } + + #ifndef LZMA_LOG_BSR + LzmaEnc_FastPosInit(p->g_FastPos); + #endif + + LzmaEnc_InitPriceTables(p->ProbPrices); + p->litProbs = 0; + p->saveState.litProbs = 0; +} + +CLzmaEncHandle LzmaEnc_Create(ISzAlloc *alloc) +{ + void *p; + p = alloc->Alloc(alloc, sizeof(CLzmaEnc)); + if (p != 0) + LzmaEnc_Construct((CLzmaEnc *)p); + return p; +} + +static void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAlloc *alloc) +{ + alloc->Free(alloc, p->litProbs); + alloc->Free(alloc, p->saveState.litProbs); + p->litProbs = 0; + p->saveState.litProbs = 0; +} + +static void LzmaEnc_Destruct(CLzmaEnc *p, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + #ifdef COMPRESS_MF_MT + MatchFinderMt_Destruct(&p->matchFinderMt, allocBig); + #endif + MatchFinder_Free(&p->matchFinderBase, allocBig); + LzmaEnc_FreeLits(p, alloc); + RangeEnc_Free(&p->rc, alloc); +} + +void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + LzmaEnc_Destruct((CLzmaEnc *)p, alloc, allocBig); + alloc->Free(alloc, p); +} + +static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize, UInt32 maxUnpackSize) +{ + UInt32 nowPos32, startPos32; + if (p->inStream != 0) + { + p->matchFinderBase.stream = p->inStream; + p->matchFinder.Init(p->matchFinderObj); + p->inStream = 0; + } + + if (p->finished) + return p->result; + RINOK(CheckErrors(p)); + + nowPos32 = (UInt32)p->nowPos64; + startPos32 = nowPos32; + + if (p->nowPos64 == 0) + { + UInt32 numDistancePairs; + Byte curByte; + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) + return Flush(p, nowPos32); + ReadMatchDistances(p, &numDistancePairs); + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][0], 0); + p->state = kLiteralNextStates[p->state]; + curByte = p->matchFinder.GetIndexByte(p->matchFinderObj, 0 - p->additionalOffset); + LitEnc_Encode(&p->rc, p->litProbs, curByte); + p->additionalOffset--; + nowPos32++; + } + + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) != 0) + for (;;) + { + UInt32 pos, len, posState; + + if (p->fastMode) + len = GetOptimumFast(p, &pos); + else + len = GetOptimum(p, nowPos32, &pos); + + #ifdef SHOW_STAT2 + printf("\n pos = %4X, len = %d pos = %d", nowPos32, len, pos); + #endif + + posState = nowPos32 & p->pbMask; + if (len == 1 && pos == 0xFFFFFFFF) + { + Byte curByte; + CLzmaProb *probs; + const Byte *data; + + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 0); + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; + curByte = *data; + probs = LIT_PROBS(nowPos32, *(data - 1)); + if (IsCharState(p->state)) + LitEnc_Encode(&p->rc, probs, curByte); + else + LitEnc_EncodeMatched(&p->rc, probs, curByte, *(data - p->reps[0] - 1)); + p->state = kLiteralNextStates[p->state]; + } + else + { + RangeEnc_EncodeBit(&p->rc, &p->isMatch[p->state][posState], 1); + if (pos < LZMA_NUM_REPS) + { + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 1); + if (pos == 0) + { + RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 0); + RangeEnc_EncodeBit(&p->rc, &p->isRep0Long[p->state][posState], ((len == 1) ? 0 : 1)); + } + else + { + UInt32 distance = p->reps[pos]; + RangeEnc_EncodeBit(&p->rc, &p->isRepG0[p->state], 1); + if (pos == 1) + RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 0); + else + { + RangeEnc_EncodeBit(&p->rc, &p->isRepG1[p->state], 1); + RangeEnc_EncodeBit(&p->rc, &p->isRepG2[p->state], pos - 2); + if (pos == 3) + p->reps[3] = p->reps[2]; + p->reps[2] = p->reps[1]; + } + p->reps[1] = p->reps[0]; + p->reps[0] = distance; + } + if (len == 1) + p->state = kShortRepNextStates[p->state]; + else + { + LenEnc_Encode2(&p->repLenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + p->state = kRepNextStates[p->state]; + } + } + else + { + UInt32 posSlot; + RangeEnc_EncodeBit(&p->rc, &p->isRep[p->state], 0); + p->state = kMatchNextStates[p->state]; + LenEnc_Encode2(&p->lenEnc, &p->rc, len - LZMA_MATCH_LEN_MIN, posState, !p->fastMode, p->ProbPrices); + pos -= LZMA_NUM_REPS; + GetPosSlot(pos, posSlot); + RcTree_Encode(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], kNumPosSlotBits, posSlot); + + if (posSlot >= kStartPosModelIndex) + { + UInt32 footerBits = ((posSlot >> 1) - 1); + UInt32 base = ((2 | (posSlot & 1)) << footerBits); + UInt32 posReduced = pos - base; + + if (posSlot < kEndPosModelIndex) + RcTree_ReverseEncode(&p->rc, p->posEncoders + base - posSlot - 1, footerBits, posReduced); + else + { + RangeEnc_EncodeDirectBits(&p->rc, posReduced >> kNumAlignBits, footerBits - kNumAlignBits); + RcTree_ReverseEncode(&p->rc, p->posAlignEncoder, kNumAlignBits, posReduced & kAlignMask); + p->alignPriceCount++; + } + } + p->reps[3] = p->reps[2]; + p->reps[2] = p->reps[1]; + p->reps[1] = p->reps[0]; + p->reps[0] = pos; + p->matchPriceCount++; + } + } + p->additionalOffset -= len; + nowPos32 += len; + if (p->additionalOffset == 0) + { + UInt32 processed; + if (!p->fastMode) + { + if (p->matchPriceCount >= (1 << 7)) + FillDistancesPrices(p); + if (p->alignPriceCount >= kAlignTableSize) + FillAlignPrices(p); + } + if (p->matchFinder.GetNumAvailableBytes(p->matchFinderObj) == 0) + break; + processed = nowPos32 - startPos32; + if (useLimits) + { + if (processed + kNumOpts + 300 >= maxUnpackSize || + RangeEnc_GetProcessed(&p->rc) + kNumOpts * 2 >= maxPackSize) + break; + } + else if (processed >= (1 << 15)) + { + p->nowPos64 += nowPos32 - startPos32; + return CheckErrors(p); + } + } + } + p->nowPos64 += nowPos32 - startPos32; + return Flush(p, nowPos32); +} + +#define kBigHashDicLimit ((UInt32)1 << 24) + +static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + UInt32 beforeSize = kNumOpts; +#ifdef COMPRESS_MF_MT + Bool btMode; +#endif + if (!RangeEnc_Alloc(&p->rc, alloc)) + return SZ_ERROR_MEM; +#ifdef COMPRESS_MF_MT + btMode = (p->matchFinderBase.btMode != 0); + p->mtMode = (p->multiThread && !p->fastMode && btMode); +#endif + + { + unsigned lclp = p->lc + p->lp; + if (p->litProbs == 0 || p->saveState.litProbs == 0 || p->lclp != lclp) + { + LzmaEnc_FreeLits(p, alloc); + p->litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); + p->saveState.litProbs = (CLzmaProb *)alloc->Alloc(alloc, (0x300 << lclp) * sizeof(CLzmaProb)); + if (p->litProbs == 0 || p->saveState.litProbs == 0) + { + LzmaEnc_FreeLits(p, alloc); + return SZ_ERROR_MEM; + } + p->lclp = lclp; + } + } + + p->matchFinderBase.bigHash = (p->dictSize > kBigHashDicLimit); + + if (beforeSize + p->dictSize < keepWindowSize) + beforeSize = keepWindowSize - p->dictSize; + + #ifdef COMPRESS_MF_MT + if (p->mtMode) + { + RINOK(MatchFinderMt_Create(&p->matchFinderMt, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)); + p->matchFinderObj = &p->matchFinderMt; + MatchFinderMt_CreateVTable(&p->matchFinderMt, &p->matchFinder); + } + else + #endif + { + if (!MatchFinder_Create(&p->matchFinderBase, p->dictSize, beforeSize, p->numFastBytes, LZMA_MATCH_LEN_MAX, allocBig)) + return SZ_ERROR_MEM; + p->matchFinderObj = &p->matchFinderBase; + MatchFinder_CreateVTable(&p->matchFinderBase, &p->matchFinder); + } + return SZ_OK; +} + +static void LzmaEnc_Init(CLzmaEnc *p) +{ + UInt32 i; + p->state = 0; + for(i = 0 ; i < LZMA_NUM_REPS; i++) + p->reps[i] = 0; + + RangeEnc_Init(&p->rc); + + + for (i = 0; i < kNumStates; i++) + { + UInt32 j; + for (j = 0; j < LZMA_NUM_PB_STATES_MAX; j++) + { + p->isMatch[i][j] = kProbInitValue; + p->isRep0Long[i][j] = kProbInitValue; + } + p->isRep[i] = kProbInitValue; + p->isRepG0[i] = kProbInitValue; + p->isRepG1[i] = kProbInitValue; + p->isRepG2[i] = kProbInitValue; + } + + { + UInt32 num = 0x300 << (p->lp + p->lc); + for (i = 0; i < num; i++) + p->litProbs[i] = kProbInitValue; + } + + { + for (i = 0; i < kNumLenToPosStates; i++) + { + CLzmaProb *probs = p->posSlotEncoder[i]; + UInt32 j; + for (j = 0; j < (1 << kNumPosSlotBits); j++) + probs[j] = kProbInitValue; + } + } + { + for(i = 0; i < kNumFullDistances - kEndPosModelIndex; i++) + p->posEncoders[i] = kProbInitValue; + } + + LenEnc_Init(&p->lenEnc.p); + LenEnc_Init(&p->repLenEnc.p); + + for (i = 0; i < (1 << kNumAlignBits); i++) + p->posAlignEncoder[i] = kProbInitValue; + + p->longestMatchWasFound = False; + p->optimumEndIndex = 0; + p->optimumCurrentIndex = 0; + p->additionalOffset = 0; + + p->pbMask = (1 << p->pb) - 1; + p->lpMask = (1 << p->lp) - 1; +} + +static void LzmaEnc_InitPrices(CLzmaEnc *p) +{ + if (!p->fastMode) + { + FillDistancesPrices(p); + FillAlignPrices(p); + } + + p->lenEnc.tableSize = + p->repLenEnc.tableSize = + p->numFastBytes + 1 - LZMA_MATCH_LEN_MIN; + LenPriceEnc_UpdateTables(&p->lenEnc, 1 << p->pb, p->ProbPrices); + LenPriceEnc_UpdateTables(&p->repLenEnc, 1 << p->pb, p->ProbPrices); +} + +static SRes LzmaEnc_AllocAndInit(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + UInt32 i; + for (i = 0; i < (UInt32)kDicLogSizeMaxCompress; i++) + if (p->dictSize <= ((UInt32)1 << i)) + break; + p->distTableSize = i * 2; + + p->finished = False; + p->result = SZ_OK; + RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig)); + LzmaEnc_Init(p); + LzmaEnc_InitPrices(p); + p->nowPos64 = 0; + return SZ_OK; +} + +static SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqInStream *inStream, ISeqOutStream *outStream, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + p->inStream = inStream; + p->rc.outStream = outStream; + return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig); +} + +static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen) +{ + p->seqBufInStream.funcTable.Read = MyRead; + p->seqBufInStream.data = src; + p->seqBufInStream.rem = srcLen; +} + +static void LzmaEnc_Finish(CLzmaEncHandle pp) +{ + #ifdef COMPRESS_MF_MT + CLzmaEnc *p = (CLzmaEnc *)pp; + if (p->mtMode) + MatchFinderMt_ReleaseStream(&p->matchFinderMt); + #else + (void)pp; + #endif +} + +typedef struct _CSeqOutStreamBuf +{ + ISeqOutStream funcTable; + Byte *data; + SizeT rem; + Bool overflow; +} CSeqOutStreamBuf; + +static size_t MyWrite(void *pp, const void *data, size_t size) +{ + CSeqOutStreamBuf *p = (CSeqOutStreamBuf *)pp; + if (p->rem < size) + { + size = p->rem; + p->overflow = True; + } + memcpy(p->data, data, size); + p->rem -= size; + p->data += size; + return size; +} + +SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress, + ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + SRes res = SZ_OK; + + #ifdef COMPRESS_MF_MT + Byte allocaDummy[0x300]; + int i = 0; + for (i = 0; i < 16; i++) + allocaDummy[i] = (Byte)i; + #endif + + RINOK(LzmaEnc_Prepare(pp, inStream, outStream, alloc, allocBig)); + + for (;;) + { + res = LzmaEnc_CodeOneBlock(pp, False, 0, 0); + if (res != SZ_OK || p->finished != 0) + break; + if (progress != 0) + { + res = progress->Progress(progress, p->nowPos64, RangeEnc_GetProcessed(&p->rc)); + if (res != SZ_OK) + { + res = SZ_ERROR_PROGRESS; + break; + } + } + } + LzmaEnc_Finish(pp); + return res; +} + +SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size) +{ + CLzmaEnc *p = (CLzmaEnc *)pp; + int i; + UInt32 dictSize = p->dictSize; + if (*size < LZMA_PROPS_SIZE) + return SZ_ERROR_PARAM; + *size = LZMA_PROPS_SIZE; + props[0] = (Byte)((p->pb * 5 + p->lp) * 9 + p->lc); + + for (i = 11; i <= 30; i++) + { + if (dictSize <= ((UInt32)2 << i)) + { + dictSize = (2 << i); + break; + } + if (dictSize <= ((UInt32)3 << i)) + { + dictSize = (3 << i); + break; + } + } + + for (i = 0; i < 4; i++) + props[1 + i] = (Byte)(dictSize >> (8 * i)); + return SZ_OK; +} + +SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + int writeEndMark, ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + SRes res; + CLzmaEnc *p = (CLzmaEnc *)pp; + + CSeqOutStreamBuf outStream; + + LzmaEnc_SetInputBuf(p, src, srcLen); + + outStream.funcTable.Write = MyWrite; + outStream.data = dest; + outStream.rem = *destLen; + outStream.overflow = False; + + p->writeEndMark = writeEndMark; + res = LzmaEnc_Encode(pp, &outStream.funcTable, &p->seqBufInStream.funcTable, + progress, alloc, allocBig); + + *destLen -= outStream.rem; + if (outStream.overflow) + return SZ_ERROR_OUTPUT_EOF; + return res; +} + +SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, + ICompressProgress *progress, ISzAlloc *alloc, ISzAlloc *allocBig) +{ + CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc); + SRes res; + if (p == 0) + return SZ_ERROR_MEM; + + res = LzmaEnc_SetProps(p, props); + if (res == SZ_OK) + { + res = LzmaEnc_WriteProperties(p, propsEncoded, propsSize); + if (res == SZ_OK) + res = LzmaEnc_MemEncode(p, dest, destLen, src, srcLen, + writeEndMark, progress, alloc, allocBig); + } + + LzmaEnc_Destroy(p, alloc, allocBig); + return res; +} diff --git a/grub-core/lib/adler32.c b/grub-core/lib/adler32.c new file mode 100644 index 000000000..43b68af62 --- /dev/null +++ b/grub-core/lib/adler32.c @@ -0,0 +1,102 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct adler32_context +{ + grub_uint16_t a, b; + grub_uint32_t c; +}; + +static void +adler32_init (void *context) +{ + struct adler32_context *ctx = context; + + ctx->a = 1; + ctx->b = 0; +} + +#define MOD 65521 + +static grub_uint16_t +mod_add (grub_uint16_t a, grub_uint16_t b) +{ + if ((grub_uint32_t) a + (grub_uint32_t) b >= MOD) + return a + b - MOD; + return a + b; +} + +static void +adler32_write (void *context, const void *inbuf, grub_size_t inlen) +{ + struct adler32_context *ctx = context; + const grub_uint8_t *ptr = inbuf; + + while (inlen) + { + ctx->a = mod_add (ctx->a, *ptr); + ctx->b = mod_add (ctx->a, ctx->b); + inlen--; + ptr++; + } +} + +static void +adler32_final (void *context __attribute__ ((unused))) +{ +} + +static grub_uint8_t * +adler32_read (void *context) +{ + struct adler32_context *ctx = context; + if (ctx->a > MOD) + ctx->a -= MOD; + if (ctx->b > MOD) + ctx->b -= MOD; + ctx->c = grub_cpu_to_be32 (ctx->a | (ctx->b << 16)); + return (grub_uint8_t *) &ctx->c; +} + +static gcry_md_spec_t spec_adler32 = + { + "ADLER32", 0, 0, 0, 4, + adler32_init, adler32_write, adler32_final, adler32_read, + sizeof (struct adler32_context), +#ifdef GRUB_UTIL + .modname = "adler32", +#endif + .blocksize = 64 + }; + + +GRUB_MOD_INIT(adler32) +{ + grub_md_register (&spec_adler32); +} + +GRUB_MOD_FINI(adler32) +{ + grub_md_unregister (&spec_adler32); +} diff --git a/grub-core/lib/arc/datetime.c b/grub-core/lib/arc/datetime.c new file mode 100644 index 000000000..b8d910e5f --- /dev/null +++ b/grub-core/lib/arc/datetime.c @@ -0,0 +1,48 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +grub_err_t +grub_get_datetime (struct grub_datetime *datetime) +{ + struct grub_arc_timeinfo *dt; + grub_memset (datetime, 0, sizeof (*datetime)); + + dt = GRUB_ARC_FIRMWARE_VECTOR->gettime (); + + datetime->year = dt->y; + datetime->month = dt->m; + datetime->day = dt->d; + datetime->hour = dt->h; + datetime->minute = dt->min; + datetime->second = dt->s; + + return 0; +} + +grub_err_t +grub_set_datetime (struct grub_datetime *datetime __attribute__ ((unused))) +{ + return grub_error (GRUB_ERR_IO, "setting time isn't supported"); +} diff --git a/grub-core/lib/arg.c b/grub-core/lib/arg.c new file mode 100644 index 000000000..fd7744a6f --- /dev/null +++ b/grub-core/lib/arg.c @@ -0,0 +1,463 @@ +/* arg.c - argument parser */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +/* Built-in parser for default options. */ +static const struct grub_arg_option help_options[] = + { + {"help", 0, 0, + N_("Display this help and exit."), 0, ARG_TYPE_NONE}, + {"usage", 0, 0, + N_("Display the usage of this command and exit."), 0, ARG_TYPE_NONE}, + {0, 0, 0, 0, 0, 0} + }; + +/* Helper for find_short. */ +static const struct grub_arg_option * +fnd_short (const struct grub_arg_option *opt, char c) +{ + while (opt->doc) + { + if (opt->shortarg == c) + return opt; + opt++; + } + return 0; +} + +static const struct grub_arg_option * +find_short (const struct grub_arg_option *options, char c) +{ + const struct grub_arg_option *found = 0; + + if (options) + found = fnd_short (options, c); + + if (! found) + { + switch (c) + { + case 'h': + found = help_options; + break; + + case 'u': + found = (help_options + 1); + break; + + default: + break; + } + } + + return found; +} + +/* Helper for find_long. */ +static const struct grub_arg_option * +fnd_long (const struct grub_arg_option *opt, const char *s, int len) +{ + while (opt->doc) + { + if (opt->longarg && ! grub_strncmp (opt->longarg, s, len) && + opt->longarg[len] == '\0') + return opt; + opt++; + } + return 0; +} + +static const struct grub_arg_option * +find_long (const struct grub_arg_option *options, const char *s, int len) +{ + const struct grub_arg_option *found = 0; + + if (options) + found = fnd_long (options, s, len); + + if (! found) + found = fnd_long (help_options, s, len); + + return found; +} + +static void +show_usage (grub_extcmd_t cmd) +{ + grub_printf ("%s %s %s\n", _("Usage:"), cmd->cmd->name, _(cmd->cmd->summary)); +} + +static void +showargs (const struct grub_arg_option *opt, + int h_is_used, int u_is_used) +{ + for (; opt->doc; opt++) + { + int spacing = 20; + + if (opt->shortarg && grub_isgraph (opt->shortarg)) + grub_printf ("-%c%c ", opt->shortarg, opt->longarg ? ',':' '); + else if (opt == help_options && ! h_is_used) + grub_printf ("-h, "); + else if (opt == help_options + 1 && ! u_is_used) + grub_printf ("-u, "); + else + grub_printf (" "); + + if (opt->longarg) + { + grub_printf ("--%s", opt->longarg); + spacing -= grub_strlen (opt->longarg) + 2; + + if (opt->arg) + { + grub_printf ("=%s", opt->arg); + spacing -= grub_strlen (opt->arg) + 1; + } + } + + if (spacing <= 0) + spacing = 3; + + while (spacing--) + grub_xputs (" "); + + grub_printf ("%s\n", _(opt->doc)); + } +} + +void +grub_arg_show_help (grub_extcmd_t cmd) +{ + int h_is_used = 0; + int u_is_used = 0; + const struct grub_arg_option *opt; + + show_usage (cmd); + grub_printf ("%s\n\n", _(cmd->cmd->description)); + + for (opt = cmd->options; opt && opt->doc; opt++) + switch (opt->shortarg) + { + case 'h': + h_is_used = 1; + break; + + case 'u': + u_is_used = 1; + break; + } + + if (cmd->options) + showargs (cmd->options, h_is_used, u_is_used); + showargs (help_options, h_is_used, u_is_used); +#if 0 + grub_printf ("\nReport bugs to <%s>.\n", PACKAGE_BUGREPORT); +#endif +} + + +static int +parse_option (grub_extcmd_t cmd, const struct grub_arg_option *opt, + char *arg, struct grub_arg_list *usr) +{ + if (opt == help_options) + { + grub_arg_show_help (cmd); + return -1; + } + + if (opt == help_options + 1) + { + show_usage (cmd); + return -1; + } + { + int found = opt - cmd->options; + + if (opt->flags & GRUB_ARG_OPTION_REPEATABLE) + { + usr[found].args[usr[found].set++] = arg; + usr[found].args[usr[found].set] = NULL; + } + else + { + usr[found].set = 1; + usr[found].arg = arg; + } + } + + return 0; +} + +static inline grub_err_t +add_arg (char ***argl, int *num, char *s) +{ + char **p = *argl; + *argl = grub_realloc (*argl, (++(*num) + 1) * sizeof (char *)); + if (! *argl) + { + grub_free (p); + return grub_errno; + } + (*argl)[(*num) - 1] = s; + (*argl)[(*num)] = NULL; + return 0; +} + + +int +grub_arg_parse (grub_extcmd_t cmd, int argc, char **argv, + struct grub_arg_list *usr, char ***args, int *argnum) +{ + int curarg; + int arglen; + char **argl = 0; + int num = 0; + + for (curarg = 0; curarg < argc; curarg++) + { + char *arg = argv[curarg]; + const struct grub_arg_option *opt; + char *option = 0; + + /* No option is used. */ + if ((num && (cmd->cmd->flags & GRUB_COMMAND_OPTIONS_AT_START)) + || arg[0] != '-' || grub_strlen (arg) == 1) + { + if (add_arg (&argl, &num, arg) != 0) + goto fail; + + continue; + } + + /* One or more short options. */ + if (arg[1] != '-') + { + char *curshort; + + if (cmd->cmd->flags & GRUB_COMMAND_ACCEPT_DASH) + { + for (curshort = arg + 1; *curshort; curshort++) + if (!find_short (cmd->options, *curshort)) + break; + + if (*curshort) + { + if (add_arg (&argl, &num, arg) != 0) + goto fail; + continue; + } + } + + curshort = arg + 1; + + while (1) + { + opt = find_short (cmd->options, *curshort); + + if (! opt) + { + char tmp[3] = { '-', *curshort, 0 }; + grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("unknown argument `%s'"), tmp); + goto fail; + } + + curshort++; + + /* Parse all arguments here except the last one because + it can have an argument value. */ + if (*curshort) + { + if (parse_option (cmd, opt, 0, usr) || grub_errno) + goto fail; + } + else + { + if (opt->type != ARG_TYPE_NONE) + { + if (curarg + 1 < argc) + { + char *nextarg = argv[curarg + 1]; + if (!(opt->flags & GRUB_ARG_OPTION_OPTIONAL) + || (grub_strlen (nextarg) < 2 || nextarg[0] != '-')) + option = argv[++curarg]; + } + } + break; + } + } + + } + else /* The argument starts with "--". */ + { + /* If the argument "--" is used just pass the other + arguments. */ + if (grub_strlen (arg) == 2) + { + for (curarg++; curarg < argc; curarg++) + if (add_arg (&argl, &num, argv[curarg]) != 0) + goto fail; + break; + } + + option = grub_strchr (arg, '='); + if (option) + { + arglen = option - arg - 2; + option++; + } + else + arglen = grub_strlen (arg) - 2; + + opt = find_long (cmd->options, arg + 2, arglen); + + if (!option && argv[curarg + 1] && argv[curarg + 1][0] != '-' + && opt && opt->type != ARG_TYPE_NONE) + option = argv[++curarg]; + + if (!opt && (cmd->cmd->flags & GRUB_COMMAND_ACCEPT_DASH)) + { + if (add_arg (&argl, &num, arg) != 0) + goto fail; + continue; + } + + if (! opt) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("unknown argument `%s'"), arg); + goto fail; + } + } + + if (! (opt->type == ARG_TYPE_NONE + || (! option && (opt->flags & GRUB_ARG_OPTION_OPTIONAL)))) + { + if (! option) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("missing mandatory option for `%s'"), opt->longarg); + goto fail; + } + + switch (opt->type) + { + case ARG_TYPE_NONE: + /* This will never happen. */ + break; + + case ARG_TYPE_STRING: + /* No need to do anything. */ + break; + + case ARG_TYPE_INT: + { + char *tail; + + grub_strtoull (option, &tail, 0); + if (tail == 0 || tail == option || *tail != '\0' || grub_errno) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("the argument `%s' requires an integer"), + arg); + + goto fail; + } + break; + } + + case ARG_TYPE_DEVICE: + case ARG_TYPE_DIR: + case ARG_TYPE_FILE: + case ARG_TYPE_PATHNAME: + /* XXX: Not implemented. */ + break; + } + if (parse_option (cmd, opt, option, usr) || grub_errno) + goto fail; + } + else + { + if (option) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("a value was assigned to the argument `%s' while it " + "doesn't require an argument"), arg); + goto fail; + } + + if (parse_option (cmd, opt, 0, usr) || grub_errno) + goto fail; + } + } + + *args = argl; + *argnum = num; + return 1; + + fail: + return 0; +} + +struct grub_arg_list* +grub_arg_list_alloc(grub_extcmd_t extcmd, int argc, + char **argv __attribute__((unused))) +{ + int i; + char **args; + grub_size_t argcnt; + struct grub_arg_list *list; + const struct grub_arg_option *options; + + options = extcmd->options; + if (! options) + return 0; + + argcnt = 0; + for (i = 0; options[i].doc; i++) + { + if (options[i].flags & GRUB_ARG_OPTION_REPEATABLE) + argcnt += ((grub_size_t) argc + 1) / 2 + 1; /* max possible for any option */ + } + + list = grub_zalloc (sizeof (*list) * i + sizeof (char*) * argcnt); + if (! list) + return 0; + + args = (char**) (list + i); + for (i = 0; options[i].doc; i++) + { + list[i].set = 0; + list[i].arg = 0; + + if (options[i].flags & GRUB_ARG_OPTION_REPEATABLE) + { + list[i].args = args; + args += (grub_size_t) argc / 2 + 1; + } + } + return list; +} diff --git a/grub-core/lib/arm/setjmp.S b/grub-core/lib/arm/setjmp.S new file mode 100644 index 000000000..a5373d3a9 --- /dev/null +++ b/grub-core/lib/arm/setjmp.S @@ -0,0 +1,53 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "setjmp.S" + +GRUB_MOD_LICENSE "GPLv3+" + + .syntax unified +#if !defined (__thumb2__) + .arm +#else + .thumb +#endif + + .text + +/* + * int grub_setjmp (grub_jmp_buf env) + */ +FUNCTION(grub_setjmp) + mov r12, sp + stm r0, { r4-r12, lr } + mov r0, #0 + bx lr + +/* + * int grub_longjmp (grub_jmp_buf env, int val) + */ +FUNCTION(grub_longjmp) + ldm r0, { r4-r12, lr } + mov sp, r12 + movs r0, r1 + it eq + moveq r0, #1 + bx lr diff --git a/grub-core/lib/arm64/setjmp.S b/grub-core/lib/arm64/setjmp.S new file mode 100644 index 000000000..ffcabf6e4 --- /dev/null +++ b/grub-core/lib/arm64/setjmp.S @@ -0,0 +1,56 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "setjmp.S" +GRUB_MOD_LICENSE "GPLv3+" + .text + +/* + * int grub_setjmp (grub_jmp_buf env) + */ +FUNCTION(grub_setjmp) + stp x19, x20, [x0], #16 + stp x21, x22, [x0], #16 + stp x23, x24, [x0], #16 + stp x25, x26, [x0], #16 + stp x27, x28, [x0], #16 + stp x29, x30, [x0], #16 + mov x1, sp + str x1, [x0] + mov x0, #0 + ret + +/* + * int grub_longjmp (grub_jmp_buf env, int val) + */ +FUNCTION(grub_longjmp) + ldp x19, x20, [x0], #16 + ldp x21, x22, [x0], #16 + ldp x23, x24, [x0], #16 + ldp x25, x26, [x0], #16 + ldp x27, x28, [x0], #16 + ldp x29, x30, [x0], #16 + ldr x2, [x0] + mov sp, x2 + mov x0, #1 + cmp x1, #0 + csel x0, x1, x0, ne + ret diff --git a/grub-core/lib/backtrace.c b/grub-core/lib/backtrace.c new file mode 100644 index 000000000..825a8800e --- /dev/null +++ b/grub-core/lib/backtrace.c @@ -0,0 +1,70 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +void +grub_backtrace_print_address (void *addr) +{ + grub_dl_t mod; + + FOR_DL_MODULES (mod) + { + grub_dl_segment_t segment; + for (segment = mod->segment; segment; segment = segment->next) + if (segment->addr <= addr && (grub_uint8_t *) segment->addr + + segment->size > (grub_uint8_t *) addr) + { + grub_printf ("%s.%x+%" PRIxGRUB_SIZE, mod->name, segment->section, + (grub_size_t) ((grub_uint8_t *) addr - (grub_uint8_t *) segment->addr)); + return; + } + } + + grub_printf ("%p", addr); +} + +static grub_err_t +grub_cmd_backtrace (grub_command_t cmd __attribute__ ((unused)), + int argc __attribute__ ((unused)), + char **args __attribute__ ((unused))) +{ + grub_backtrace (); + return 0; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(backtrace) +{ + cmd = grub_register_command ("backtrace", grub_cmd_backtrace, + 0, N_("Print backtrace.")); +} + +GRUB_MOD_FINI(backtrace) +{ + grub_unregister_command (cmd); +} diff --git a/grub-core/lib/cmdline.c b/grub-core/lib/cmdline.c new file mode 100644 index 000000000..d5e10ee87 --- /dev/null +++ b/grub-core/lib/cmdline.c @@ -0,0 +1,108 @@ +/* cmdline.c - linux command line handling */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +static unsigned int check_arg (char *c, int *has_space) +{ + int space = 0; + unsigned int size = 0; + + while (*c) + { + if (*c == '\\' || *c == '\'' || *c == '"') + size++; + else if (*c == ' ') + space = 1; + + size++; + c++; + } + + if (space) + size += 2; + + if (has_space) + *has_space = space; + + return size; +} + +unsigned int grub_loader_cmdline_size (int argc, char *argv[]) +{ + int i; + unsigned int size = 0; + + for (i = 0; i < argc; i++) + { + size += check_arg (argv[i], 0); + size++; /* Separator space or NULL. */ + } + + if (size == 0) + size = 1; + + return size; +} + +int grub_create_loader_cmdline (int argc, char *argv[], char *buf, + grub_size_t size) +{ + int i, space; + unsigned int arg_size; + char *c; + + for (i = 0; i < argc; i++) + { + c = argv[i]; + arg_size = check_arg(argv[i], &space); + arg_size++; /* Separator space or NULL. */ + + if (size < arg_size) + break; + + size -= arg_size; + + if (space) + *buf++ = '"'; + + while (*c) + { + if (*c == '\\' || *c == '\'' || *c == '"') + *buf++ = '\\'; + + *buf++ = *c; + c++; + } + + if (space) + *buf++ = '"'; + + *buf++ = ' '; + } + + /* Replace last space with null. */ + if (i) + buf--; + + *buf = 0; + + return i; +} diff --git a/grub-core/lib/cmos_datetime.c b/grub-core/lib/cmos_datetime.c new file mode 100644 index 000000000..86cd91180 --- /dev/null +++ b/grub-core/lib/cmos_datetime.c @@ -0,0 +1,194 @@ +/* kern/cmos_datetime.c - CMOS datetime function. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#if !defined (__powerpc__) && !defined (__sparc__) +#define grub_get_datetime_cmos grub_get_datetime +#define grub_set_datetime_cmos grub_set_datetime +#endif + +grub_err_t +grub_get_datetime_cmos (struct grub_datetime *datetime) +{ + int is_bcd, is_12hour; + grub_uint8_t value, flag; + grub_err_t err; + + err = grub_cmos_read (GRUB_CMOS_INDEX_STATUS_B, &flag); + if (err) + return err; + + is_bcd = ! (flag & GRUB_CMOS_STATUS_B_BINARY); + + err = grub_cmos_read (GRUB_CMOS_INDEX_YEAR, &value); + if (err) + return err; + if (is_bcd) + value = grub_bcd_to_num (value); + + datetime->year = value; + datetime->year += (value < 80) ? 2000 : 1900; + + err = grub_cmos_read (GRUB_CMOS_INDEX_MONTH, &value); + if (err) + return err; + if (is_bcd) + value = grub_bcd_to_num (value); + + datetime->month = value; + + err = grub_cmos_read (GRUB_CMOS_INDEX_DAY_OF_MONTH, &value); + if (err) + return err; + if (is_bcd) + value = grub_bcd_to_num (value); + + datetime->day = value; + + is_12hour = ! (flag & GRUB_CMOS_STATUS_B_24HOUR); + + err = grub_cmos_read (GRUB_CMOS_INDEX_HOUR, &value); + if (err) + return err; + if (is_12hour) + { + is_12hour = (value & 0x80); + + value &= 0x7F; + value--; + } + + if (is_bcd) + value = grub_bcd_to_num (value); + + if (is_12hour) + value += 12; + + datetime->hour = value; + + err = grub_cmos_read (GRUB_CMOS_INDEX_MINUTE, &value); + if (err) + return err; + + if (is_bcd) + value = grub_bcd_to_num (value); + + datetime->minute = value; + + err = grub_cmos_read (GRUB_CMOS_INDEX_SECOND, &value); + if (err) + return err; + if (is_bcd) + value = grub_bcd_to_num (value); + + datetime->second = value; + + return 0; +} + +grub_err_t +grub_set_datetime_cmos (struct grub_datetime *datetime) +{ + int is_bcd, is_12hour; + grub_uint8_t value, flag; + grub_err_t err; + + err = grub_cmos_read (GRUB_CMOS_INDEX_STATUS_B, &flag); + if (err) + return err; + + is_bcd = ! (flag & GRUB_CMOS_STATUS_B_BINARY); + + value = ((datetime->year >= 2000) ? datetime->year - 2000 : + datetime->year - 1900); + + if (is_bcd) + value = grub_num_to_bcd (value); + + err = grub_cmos_write (GRUB_CMOS_INDEX_YEAR, value); + if (err) + return err; + + value = datetime->month; + + if (is_bcd) + value = grub_num_to_bcd (value); + + err = grub_cmos_write (GRUB_CMOS_INDEX_MONTH, value); + if (err) + return err; + + value = datetime->day; + + if (is_bcd) + value = grub_num_to_bcd (value); + + err = grub_cmos_write (GRUB_CMOS_INDEX_DAY_OF_MONTH, value); + if (err) + return err; + + value = datetime->hour; + + is_12hour = (! (flag & GRUB_CMOS_STATUS_B_24HOUR)); + + if (is_12hour) + { + value++; + + if (value > 12) + value -= 12; + else + is_12hour = 0; + } + + if (is_bcd) + value = grub_num_to_bcd (value); + + if (is_12hour) + value |= 0x80; + + err = grub_cmos_write (GRUB_CMOS_INDEX_HOUR, value); + if (err) + return err; + + value = datetime->minute; + + if (is_bcd) + value = grub_num_to_bcd (value); + + err = grub_cmos_write (GRUB_CMOS_INDEX_MINUTE, value); + if (err) + return err; + + value = datetime->second; + + if (is_bcd) + value = grub_num_to_bcd (value); + + err = grub_cmos_write (GRUB_CMOS_INDEX_SECOND, value); + if (err) + return err; + + return 0; +} diff --git a/grub-core/lib/crc.c b/grub-core/lib/crc.c new file mode 100644 index 000000000..bf97cc63a --- /dev/null +++ b/grub-core/lib/crc.c @@ -0,0 +1,76 @@ +/* crc.c - crc function */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +static grub_uint32_t crc32c_table [256]; + +/* Helper for init_crc32c_table. */ +static grub_uint32_t +reflect (grub_uint32_t ref, int len) +{ + grub_uint32_t result = 0; + int i; + + for (i = 1; i <= len; i++) + { + if (ref & 1) + result |= 1 << (len - i); + ref >>= 1; + } + + return result; +} + +static void +init_crc32c_table (void) +{ + grub_uint32_t polynomial = 0x1edc6f41; + int i, j; + + for(i = 0; i < 256; i++) + { + crc32c_table[i] = reflect(i, 8) << 24; + for (j = 0; j < 8; j++) + crc32c_table[i] = (crc32c_table[i] << 1) ^ + (crc32c_table[i] & (1 << 31) ? polynomial : 0); + crc32c_table[i] = reflect(crc32c_table[i], 32); + } +} + +grub_uint32_t +grub_getcrc32c (grub_uint32_t crc, const void *buf, int size) +{ + int i; + const grub_uint8_t *data = buf; + + if (! crc32c_table[1]) + init_crc32c_table (); + + crc^= 0xffffffff; + + for (i = 0; i < size; i++) + { + crc = (crc >> 8) ^ crc32c_table[(crc & 0xFF) ^ *data]; + data++; + } + + return crc ^ 0xffffffff; +} diff --git a/grub-core/lib/crc64.c b/grub-core/lib/crc64.c new file mode 100644 index 000000000..4960f3f89 --- /dev/null +++ b/grub-core/lib/crc64.c @@ -0,0 +1,114 @@ +/* crc64.c - crc64 function */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_uint64_t crc64_table [256]; + +/* Helper for init_crc64_table. */ +static grub_uint64_t +reflect (grub_uint64_t ref, int len) +{ + grub_uint64_t result = 0; + int i; + + for (i = 1; i <= len; i++) + { + if (ref & 1) + result |= 1ULL << (len - i); + ref >>= 1; + } + + return result; +} + +static void +init_crc64_table (void) +{ + grub_uint64_t polynomial = 0x42f0e1eba9ea3693ULL; + int i, j; + + for(i = 0; i < 256; i++) + { + crc64_table[i] = reflect(i, 8) << 56; + for (j = 0; j < 8; j++) + { + crc64_table[i] = (crc64_table[i] << 1) ^ + (crc64_table[i] & (1ULL << 63) ? polynomial : 0); + } + crc64_table[i] = reflect(crc64_table[i], 64); + } +} + +static void +crc64_init (void *context) +{ + if (! crc64_table[1]) + init_crc64_table (); + *(grub_uint64_t *) context = 0; +} + +static void +crc64_write (void *context, const void *buf, grub_size_t size) +{ + unsigned i; + const grub_uint8_t *data = buf; + grub_uint64_t crc = ~grub_le_to_cpu64 (*(grub_uint64_t *) context); + + for (i = 0; i < size; i++) + { + crc = (crc >> 8) ^ crc64_table[(crc & 0xFF) ^ *data]; + data++; + } + + *(grub_uint64_t *) context = grub_cpu_to_le64 (~crc); +} + +static grub_uint8_t * +crc64_read (void *context) +{ + return context; +} + +static void +crc64_final (void *context __attribute__ ((unused))) +{ +} + +gcry_md_spec_t _gcry_digest_spec_crc64 = + { + "CRC64", 0, 0, 0, 8, + crc64_init, crc64_write, crc64_final, crc64_read, + sizeof (grub_uint64_t), + .blocksize = 64 + }; + +GRUB_MOD_INIT(crc64) +{ + grub_md_register (&_gcry_digest_spec_crc64); +} + +GRUB_MOD_FINI(crc64) +{ + grub_md_unregister (&_gcry_digest_spec_crc64); +} diff --git a/grub-core/lib/crypto.c b/grub-core/lib/crypto.c new file mode 100644 index 000000000..683a8aaa7 --- /dev/null +++ b/grub-core/lib/crypto.c @@ -0,0 +1,493 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 + * 2007, 2008, 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +struct grub_crypto_hmac_handle +{ + const struct gcry_md_spec *md; + void *ctx; + void *opad; +}; + +static gcry_cipher_spec_t *grub_ciphers = NULL; +static gcry_md_spec_t *grub_digests = NULL; + +void (*grub_crypto_autoload_hook) (const char *name) = NULL; + +/* Based on libgcrypt-1.4.4/src/misc.c. */ +void +grub_burn_stack (grub_size_t size) +{ + char buf[64]; + + grub_memset (buf, 0, sizeof (buf)); + if (size > sizeof (buf)) + grub_burn_stack (size - sizeof (buf)); +} + +void +_gcry_burn_stack (int size) +{ + grub_burn_stack (size); +} + +void __attribute__ ((noreturn)) +_gcry_assert_failed (const char *expr, const char *file, int line, + const char *func) + +{ + grub_fatal ("assertion %s at %s:%d (%s) failed\n", expr, file, line, func); +} + + +void _gcry_log_error (const char *fmt, ...) +{ + va_list args; + const char *debug = grub_env_get ("debug"); + + if (! debug) + return; + + if (grub_strword (debug, "all") || grub_strword (debug, "gcrypt")) + { + grub_printf ("gcrypt error: "); + va_start (args, fmt); + grub_vprintf (fmt, args); + va_end (args); + grub_refresh (); + } +} + +void +grub_cipher_register (gcry_cipher_spec_t *cipher) +{ + cipher->next = grub_ciphers; + grub_ciphers = cipher; +} + +void +grub_cipher_unregister (gcry_cipher_spec_t *cipher) +{ + gcry_cipher_spec_t **ciph; + for (ciph = &grub_ciphers; *ciph; ciph = &((*ciph)->next)) + if (*ciph == cipher) + { + *ciph = (*ciph)->next; + break; + } +} + +void +grub_md_register (gcry_md_spec_t *digest) +{ + digest->next = grub_digests; + grub_digests = digest; +} + +void +grub_md_unregister (gcry_md_spec_t *cipher) +{ + gcry_md_spec_t **ciph; + for (ciph = &grub_digests; *ciph; ciph = &((*ciph)->next)) + if (*ciph == cipher) + { + *ciph = (*ciph)->next; + break; + } +} + +void +grub_crypto_hash (const gcry_md_spec_t *hash, void *out, const void *in, + grub_size_t inlen) +{ + GRUB_PROPERLY_ALIGNED_ARRAY (ctx, GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + + if (hash->contextsize > sizeof (ctx)) + grub_fatal ("Too large md context"); + hash->init (&ctx); + hash->write (&ctx, in, inlen); + hash->final (&ctx); + grub_memcpy (out, hash->read (&ctx), hash->mdlen); +} + +const gcry_md_spec_t * +grub_crypto_lookup_md_by_name (const char *name) +{ + const gcry_md_spec_t *md; + int first = 1; + while (1) + { + for (md = grub_digests; md; md = md->next) + if (grub_strcasecmp (name, md->name) == 0) + return md; + if (grub_crypto_autoload_hook && first) + grub_crypto_autoload_hook (name); + else + return NULL; + first = 0; + } +} + +const gcry_cipher_spec_t * +grub_crypto_lookup_cipher_by_name (const char *name) +{ + const gcry_cipher_spec_t *ciph; + int first = 1; + while (1) + { + for (ciph = grub_ciphers; ciph; ciph = ciph->next) + { + const char **alias; + if (grub_strcasecmp (name, ciph->name) == 0) + return ciph; + if (!ciph->aliases) + continue; + for (alias = ciph->aliases; *alias; alias++) + if (grub_strcasecmp (name, *alias) == 0) + return ciph; + } + if (grub_crypto_autoload_hook && first) + grub_crypto_autoload_hook (name); + else + return NULL; + first = 0; + } +} + + +grub_crypto_cipher_handle_t +grub_crypto_cipher_open (const struct gcry_cipher_spec *cipher) +{ + grub_crypto_cipher_handle_t ret; + ret = grub_malloc (sizeof (*ret) + cipher->contextsize); + if (!ret) + return NULL; + ret->cipher = cipher; + return ret; +} + +gcry_err_code_t +grub_crypto_cipher_set_key (grub_crypto_cipher_handle_t cipher, + const unsigned char *key, + unsigned keylen) +{ + return cipher->cipher->setkey (cipher->ctx, key, keylen); +} + +gcry_err_code_t +grub_crypto_ecb_decrypt (grub_crypto_cipher_handle_t cipher, + void *out, const void *in, grub_size_t size) +{ + const grub_uint8_t *inptr, *end; + grub_uint8_t *outptr; + grub_size_t blocksize; + if (!cipher->cipher->decrypt) + return GPG_ERR_NOT_SUPPORTED; + blocksize = cipher->cipher->blocksize; + if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0) + || ((size & (blocksize - 1)) != 0)) + return GPG_ERR_INV_ARG; + end = (const grub_uint8_t *) in + size; + for (inptr = in, outptr = out; inptr < end; + inptr += blocksize, outptr += blocksize) + cipher->cipher->decrypt (cipher->ctx, outptr, inptr); + return GPG_ERR_NO_ERROR; +} + +gcry_err_code_t +grub_crypto_ecb_encrypt (grub_crypto_cipher_handle_t cipher, + void *out, const void *in, grub_size_t size) +{ + const grub_uint8_t *inptr, *end; + grub_uint8_t *outptr; + grub_size_t blocksize; + if (!cipher->cipher->encrypt) + return GPG_ERR_NOT_SUPPORTED; + blocksize = cipher->cipher->blocksize; + if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0) + || ((size & (blocksize - 1)) != 0)) + return GPG_ERR_INV_ARG; + end = (const grub_uint8_t *) in + size; + for (inptr = in, outptr = out; inptr < end; + inptr += blocksize, outptr += blocksize) + cipher->cipher->encrypt (cipher->ctx, outptr, inptr); + return GPG_ERR_NO_ERROR; +} + +gcry_err_code_t +grub_crypto_cbc_encrypt (grub_crypto_cipher_handle_t cipher, + void *out, const void *in, grub_size_t size, + void *iv_in) +{ + grub_uint8_t *outptr; + const grub_uint8_t *inptr, *end; + void *iv; + grub_size_t blocksize; + if (!cipher->cipher->encrypt) + return GPG_ERR_NOT_SUPPORTED; + blocksize = cipher->cipher->blocksize; + if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0) + || ((size & (blocksize - 1)) != 0)) + return GPG_ERR_INV_ARG; + end = (const grub_uint8_t *) in + size; + iv = iv_in; + for (inptr = in, outptr = out; inptr < end; + inptr += blocksize, outptr += blocksize) + { + grub_crypto_xor (outptr, inptr, iv, blocksize); + cipher->cipher->encrypt (cipher->ctx, outptr, outptr); + iv = outptr; + } + grub_memcpy (iv_in, iv, blocksize); + return GPG_ERR_NO_ERROR; +} + +gcry_err_code_t +grub_crypto_cbc_decrypt (grub_crypto_cipher_handle_t cipher, + void *out, const void *in, grub_size_t size, + void *iv) +{ + const grub_uint8_t *inptr, *end; + grub_uint8_t *outptr; + grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE]; + grub_size_t blocksize; + if (!cipher->cipher->decrypt) + return GPG_ERR_NOT_SUPPORTED; + blocksize = cipher->cipher->blocksize; + if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0) + || ((size & (blocksize - 1)) != 0)) + return GPG_ERR_INV_ARG; + if (blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE) + return GPG_ERR_INV_ARG; + end = (const grub_uint8_t *) in + size; + for (inptr = in, outptr = out; inptr < end; + inptr += blocksize, outptr += blocksize) + { + grub_memcpy (ivt, inptr, blocksize); + cipher->cipher->decrypt (cipher->ctx, outptr, inptr); + grub_crypto_xor (outptr, outptr, iv, blocksize); + grub_memcpy (iv, ivt, blocksize); + } + return GPG_ERR_NO_ERROR; +} + +/* Based on gcry/cipher/md.c. */ +struct grub_crypto_hmac_handle * +grub_crypto_hmac_init (const struct gcry_md_spec *md, + const void *key, grub_size_t keylen) +{ + grub_uint8_t *helpkey = NULL; + grub_uint8_t *ipad = NULL, *opad = NULL; + void *ctx = NULL; + struct grub_crypto_hmac_handle *ret = NULL; + unsigned i; + + if (md->mdlen > md->blocksize) + return NULL; + + ctx = grub_malloc (md->contextsize); + if (!ctx) + goto err; + + if ( keylen > md->blocksize ) + { + helpkey = grub_malloc (md->mdlen); + if (!helpkey) + goto err; + grub_crypto_hash (md, helpkey, key, keylen); + + key = helpkey; + keylen = md->mdlen; + } + + ipad = grub_zalloc (md->blocksize); + if (!ipad) + goto err; + + opad = grub_zalloc (md->blocksize); + if (!opad) + goto err; + + grub_memcpy ( ipad, key, keylen ); + grub_memcpy ( opad, key, keylen ); + for (i=0; i < md->blocksize; i++ ) + { + ipad[i] ^= 0x36; + opad[i] ^= 0x5c; + } + grub_free (helpkey); + helpkey = NULL; + + md->init (ctx); + + md->write (ctx, ipad, md->blocksize); /* inner pad */ + grub_memset (ipad, 0, md->blocksize); + grub_free (ipad); + ipad = NULL; + + ret = grub_malloc (sizeof (*ret)); + if (!ret) + goto err; + + ret->md = md; + ret->ctx = ctx; + ret->opad = opad; + + return ret; + + err: + grub_free (helpkey); + grub_free (ctx); + grub_free (ipad); + grub_free (opad); + return NULL; +} + +void +grub_crypto_hmac_write (struct grub_crypto_hmac_handle *hnd, + const void *data, + grub_size_t datalen) +{ + hnd->md->write (hnd->ctx, data, datalen); +} + +gcry_err_code_t +grub_crypto_hmac_fini (struct grub_crypto_hmac_handle *hnd, void *out) +{ + grub_uint8_t *p; + grub_uint8_t *ctx2; + + ctx2 = grub_malloc (hnd->md->contextsize); + if (!ctx2) + return GPG_ERR_OUT_OF_MEMORY; + + hnd->md->final (hnd->ctx); + hnd->md->read (hnd->ctx); + p = hnd->md->read (hnd->ctx); + + hnd->md->init (ctx2); + hnd->md->write (ctx2, hnd->opad, hnd->md->blocksize); + hnd->md->write (ctx2, p, hnd->md->mdlen); + hnd->md->final (ctx2); + grub_memset (hnd->opad, 0, hnd->md->blocksize); + grub_free (hnd->opad); + grub_memset (hnd->ctx, 0, hnd->md->contextsize); + grub_free (hnd->ctx); + + grub_memcpy (out, hnd->md->read (ctx2), hnd->md->mdlen); + grub_memset (ctx2, 0, hnd->md->contextsize); + grub_free (ctx2); + + grub_memset (hnd, 0, sizeof (*hnd)); + grub_free (hnd); + + return GPG_ERR_NO_ERROR; +} + +gcry_err_code_t +grub_crypto_hmac_buffer (const struct gcry_md_spec *md, + const void *key, grub_size_t keylen, + const void *data, grub_size_t datalen, void *out) +{ + struct grub_crypto_hmac_handle *hnd; + + hnd = grub_crypto_hmac_init (md, key, keylen); + if (!hnd) + return GPG_ERR_OUT_OF_MEMORY; + + grub_crypto_hmac_write (hnd, data, datalen); + return grub_crypto_hmac_fini (hnd, out); +} + + +grub_err_t +grub_crypto_gcry_error (gcry_err_code_t in) +{ + if (in == GPG_ERR_NO_ERROR) + return GRUB_ERR_NONE; + return GRUB_ACCESS_DENIED; +} + +int +grub_crypto_memcmp (const void *a, const void *b, grub_size_t n) +{ + register grub_size_t counter = 0; + const grub_uint8_t *pa, *pb; + + for (pa = a, pb = b; n; pa++, pb++, n--) + { + if (*pa != *pb) + counter++; + } + + return !!counter; +} + +#ifndef GRUB_UTIL + +int +grub_password_get (char buf[], unsigned buf_size) +{ + unsigned cur_len = 0; + int key; + + while (1) + { + key = grub_getkey (); + if (key == '\n' || key == '\r') + break; + + if (key == '\e') + { + cur_len = 0; + break; + } + + if (key == '\b') + { + if (cur_len) + cur_len--; + continue; + } + + if (!grub_isprint (key)) + continue; + + if (cur_len + 2 < buf_size) + buf[cur_len++] = key; + } + + grub_memset (buf + cur_len, 0, buf_size - cur_len); + + grub_xputs ("\n"); + grub_refresh (); + + return (key != '\e'); +} +#endif + diff --git a/grub-core/lib/disk.c b/grub-core/lib/disk.c new file mode 100644 index 000000000..0f186883a --- /dev/null +++ b/grub-core/lib/disk.c @@ -0,0 +1,161 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#include "../kern/disk_common.c" + +static void +grub_disk_cache_invalidate (unsigned long dev_id, unsigned long disk_id, + grub_disk_addr_t sector) +{ + unsigned cache_index; + struct grub_disk_cache *cache; + + sector &= ~((grub_disk_addr_t) GRUB_DISK_CACHE_SIZE - 1); + cache_index = grub_disk_cache_get_index (dev_id, disk_id, sector); + cache = grub_disk_cache_table + cache_index; + + if (cache->dev_id == dev_id && cache->disk_id == disk_id + && cache->sector == sector && cache->data) + { + cache->lock = 1; + grub_free (cache->data); + cache->data = 0; + cache->lock = 0; + } +} + +grub_err_t +grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector, + grub_off_t offset, grub_size_t size, const void *buf) +{ + unsigned real_offset; + grub_disk_addr_t aligned_sector; + + grub_dprintf ("disk", "Writing `%s'...\n", disk->name); + + if (grub_disk_adjust_range (disk, §or, &offset, size) != GRUB_ERR_NONE) + return -1; + + aligned_sector = (sector & ~((1ULL << (disk->log_sector_size + - GRUB_DISK_SECTOR_BITS)) - 1)); + real_offset = offset + ((sector - aligned_sector) << GRUB_DISK_SECTOR_BITS); + sector = aligned_sector; + + while (size) + { + if (real_offset != 0 || (size < (1U << disk->log_sector_size) + && size != 0)) + { + char *tmp_buf; + grub_size_t len; + grub_partition_t part; + + tmp_buf = grub_malloc (1U << disk->log_sector_size); + if (!tmp_buf) + return grub_errno; + + part = disk->partition; + disk->partition = 0; + if (grub_disk_read (disk, sector, + 0, (1U << disk->log_sector_size), tmp_buf) + != GRUB_ERR_NONE) + { + disk->partition = part; + grub_free (tmp_buf); + goto finish; + } + disk->partition = part; + + len = (1U << disk->log_sector_size) - real_offset; + if (len > size) + len = size; + + grub_memcpy (tmp_buf + real_offset, buf, len); + + grub_disk_cache_invalidate (disk->dev->id, disk->id, sector); + + if ((disk->dev->write) (disk, transform_sector (disk, sector), + 1, tmp_buf) != GRUB_ERR_NONE) + { + grub_free (tmp_buf); + goto finish; + } + + grub_free (tmp_buf); + + sector += (1U << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)); + buf = (const char *) buf + len; + size -= len; + real_offset = 0; + } + else + { + grub_size_t len; + grub_size_t n; + + len = size & ~((1ULL << disk->log_sector_size) - 1); + n = size >> disk->log_sector_size; + + if (n > (disk->max_agglomerate + << (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS + - disk->log_sector_size))) + n = (disk->max_agglomerate + << (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS + - disk->log_sector_size)); + + if ((disk->dev->write) (disk, transform_sector (disk, sector), + n, buf) != GRUB_ERR_NONE) + goto finish; + + while (n--) + { + grub_disk_cache_invalidate (disk->dev->id, disk->id, sector); + sector += (1U << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)); + } + + buf = (const char *) buf + len; + size -= len; + } + } + + finish: + + return grub_errno; +} + +GRUB_MOD_INIT(disk) +{ + grub_disk_write_weak = grub_disk_write; +} + +GRUB_MOD_FINI(disk) +{ + grub_disk_write_weak = NULL; +} diff --git a/grub-core/lib/division.c b/grub-core/lib/division.c new file mode 100644 index 000000000..35606fea7 --- /dev/null +++ b/grub-core/lib/division.c @@ -0,0 +1,74 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2015 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_uint64_t +abs64(grub_int64_t a) +{ + return a > 0 ? a : -a; +} + +grub_int64_t +grub_divmod64s (grub_int64_t n, + grub_int64_t d, + grub_int64_t *ro) +{ + grub_uint64_t ru; + grub_int64_t q, r; + q = grub_divmod64 (abs64(n), abs64(d), &ru); + r = ru; + /* Now: |n| = |d| * q + r */ + if (n < 0) + { + /* -|n| = |d| * (-q) + (-r) */ + q = -q; + r = -r; + } + /* Now: n = |d| * q + r */ + if (d < 0) + { + /* n = (-|d|) * (-q) + r */ + q = -q; + } + /* Now: n = d * q + r */ + if (ro) + *ro = r; + return q; +} + +grub_uint32_t +grub_divmod32 (grub_uint32_t n, grub_uint32_t d, grub_uint32_t *ro) +{ + grub_uint64_t q, r; + q = grub_divmod64 (n, d, &r); + *ro = r; + return q; +} + +grub_int32_t +grub_divmod32s (grub_int32_t n, grub_int32_t d, grub_int32_t *ro) +{ + grub_int64_t q, r; + q = grub_divmod64s (n, d, &r); + *ro = r; + return q; +} diff --git a/grub-core/lib/efi/datetime.c b/grub-core/lib/efi/datetime.c new file mode 100644 index 000000000..0fd1b5fbd --- /dev/null +++ b/grub-core/lib/efi/datetime.c @@ -0,0 +1,82 @@ +/* kern/efi/datetime.c - efi datetime function. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +grub_err_t +grub_get_datetime (struct grub_datetime *datetime) +{ + grub_efi_status_t status; + struct grub_efi_time efi_time; + + status = efi_call_2 (grub_efi_system_table->runtime_services->get_time, + &efi_time, 0); + + if (status) + return grub_error (GRUB_ERR_INVALID_COMMAND, + "can\'t get datetime using efi"); + else + { + datetime->year = efi_time.year; + datetime->month = efi_time.month; + datetime->day = efi_time.day; + datetime->hour = efi_time.hour; + datetime->minute = efi_time.minute; + datetime->second = efi_time.second; + } + + return 0; +} + +grub_err_t +grub_set_datetime (struct grub_datetime *datetime) +{ + grub_efi_status_t status; + struct grub_efi_time efi_time; + + status = efi_call_2 (grub_efi_system_table->runtime_services->get_time, + &efi_time, 0); + + if (status) + return grub_error (GRUB_ERR_INVALID_COMMAND, + "can\'t get datetime using efi"); + + efi_time.year = datetime->year; + efi_time.month = datetime->month; + efi_time.day = datetime->day; + efi_time.hour = datetime->hour; + efi_time.minute = datetime->minute; + efi_time.second = datetime->second; + + status = efi_call_1 (grub_efi_system_table->runtime_services->set_time, + &efi_time); + + if (status) + return grub_error (GRUB_ERR_INVALID_COMMAND, + "can\'t set datetime using efi"); + + return 0; +} diff --git a/grub-core/lib/efi/halt.c b/grub-core/lib/efi/halt.c new file mode 100644 index 000000000..e9441c844 --- /dev/null +++ b/grub-core/lib/efi/halt.c @@ -0,0 +1,39 @@ +/* efi.c - generic EFI support */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +void +grub_halt (void) +{ + grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); +#if !defined(__ia64__) && !defined(__arm__) && !defined(__aarch64__) + grub_acpi_halt (); +#endif + efi_call_4 (grub_efi_system_table->runtime_services->reset_system, + GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL); + + while (1); +} diff --git a/grub-core/lib/efi/reboot.c b/grub-core/lib/efi/reboot.c new file mode 100644 index 000000000..7de8bcb5d --- /dev/null +++ b/grub-core/lib/efi/reboot.c @@ -0,0 +1,33 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +void +grub_reboot (void) +{ + grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); + efi_call_4 (grub_efi_system_table->runtime_services->reset_system, + GRUB_EFI_RESET_COLD, GRUB_EFI_SUCCESS, 0, NULL); + for (;;) ; +} diff --git a/grub-core/lib/efi/relocator.c b/grub-core/lib/efi/relocator.c new file mode 100644 index 000000000..319b69eeb --- /dev/null +++ b/grub-core/lib/efi/relocator.c @@ -0,0 +1,119 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ + ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) + +unsigned +grub_relocator_firmware_get_max_events (void) +{ + grub_efi_uintn_t mmapsize = 0, descriptor_size = 0; + grub_efi_uint32_t descriptor_version = 0; + grub_efi_uintn_t key; + grub_efi_get_memory_map (&mmapsize, NULL, &key, &descriptor_size, + &descriptor_version); + /* Since grub_relocator_firmware_fill_events uses malloc + we need some reserve. Hence +10. */ + return 2 * (mmapsize / descriptor_size + 10); +} + +unsigned +grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events) +{ + grub_efi_uintn_t mmapsize = 0, desc_size = 0; + grub_efi_uint32_t descriptor_version = 0; + grub_efi_memory_descriptor_t *descs = NULL; + grub_efi_uintn_t key; + int counter = 0; + grub_efi_memory_descriptor_t *desc; + + grub_efi_get_memory_map (&mmapsize, NULL, &key, &desc_size, + &descriptor_version); + descs = grub_malloc (mmapsize); + if (!descs) + return 0; + + grub_efi_get_memory_map (&mmapsize, descs, &key, &desc_size, + &descriptor_version); + + for (desc = descs; + (char *) desc < ((char *) descs + mmapsize); + desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) + { + grub_uint64_t start = desc->physical_start; + grub_uint64_t end = desc->physical_start + (desc->num_pages << 12); + + /* post-4G addresses are never supported on 32-bit EFI. + Moreover it has been reported that some 64-bit EFI contrary to the + spec don't map post-4G pages. So if you enable post-4G allocations, + map pages manually or check that they are mapped. + */ + if (end >= 0x100000000ULL) + end = 0x100000000ULL; + if (end <= start) + continue; + if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) + continue; + events[counter].type = REG_FIRMWARE_START; + events[counter].pos = start; + counter++; + events[counter].type = REG_FIRMWARE_END; + events[counter].pos = end; + counter++; + } + + return counter; +} + +int +grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size) +{ + grub_efi_boot_services_t *b; + grub_efi_physical_address_t address = start; + grub_efi_status_t status; + + if (grub_efi_is_finished) + return 1; +#ifdef DEBUG_RELOCATOR_NOMEM_DPRINTF + grub_dprintf ("relocator", "EFI alloc: %llx, %llx\n", + (unsigned long long) start, (unsigned long long) size); +#endif + b = grub_efi_system_table->boot_services; + status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ADDRESS, + GRUB_EFI_LOADER_DATA, size >> 12, &address); + return (status == GRUB_EFI_SUCCESS); +} + +void +grub_relocator_firmware_free_region (grub_addr_t start, grub_size_t size) +{ + grub_efi_boot_services_t *b; + + if (grub_efi_is_finished) + return; + + b = grub_efi_system_table->boot_services; + efi_call_2 (b->free_pages, start, size >> 12); +} diff --git a/grub-core/lib/emu/halt.c b/grub-core/lib/emu/halt.c new file mode 100644 index 000000000..620935b5a --- /dev/null +++ b/grub-core/lib/emu/halt.c @@ -0,0 +1,25 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +void +grub_halt (void) +{ + grub_reboot (); +} diff --git a/grub-core/lib/envblk.c b/grub-core/lib/envblk.c new file mode 100644 index 000000000..230e0e9d9 --- /dev/null +++ b/grub-core/lib/envblk.c @@ -0,0 +1,297 @@ +/* envblk.c - Common functions for environment block. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +grub_envblk_t +grub_envblk_open (char *buf, grub_size_t size) +{ + grub_envblk_t envblk; + + if (size < sizeof (GRUB_ENVBLK_SIGNATURE) + || grub_memcmp (buf, GRUB_ENVBLK_SIGNATURE, + sizeof (GRUB_ENVBLK_SIGNATURE) - 1)) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid environment block"); + return 0; + } + + envblk = grub_malloc (sizeof (*envblk)); + if (envblk) + { + envblk->buf = buf; + envblk->size = size; + } + + return envblk; +} + +void +grub_envblk_close (grub_envblk_t envblk) +{ + grub_free (envblk->buf); + grub_free (envblk); +} + +static int +escaped_value_len (const char *value) +{ + int n = 0; + char *p; + + for (p = (char *) value; *p; p++) + { + if (*p == '\\' || *p == '\n') + n += 2; + else + n++; + } + + return n; +} + +static char * +find_next_line (char *p, const char *pend) +{ + while (p < pend) + { + if (*p == '\\') + p += 2; + else if (*p == '\n') + break; + else + p++; + } + + return p + 1; +} + +int +grub_envblk_set (grub_envblk_t envblk, const char *name, const char *value) +{ + char *p, *pend; + char *space; + int found = 0; + int nl; + int vl; + int i; + + nl = grub_strlen (name); + vl = escaped_value_len (value); + p = envblk->buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1; + pend = envblk->buf + envblk->size; + + /* First, look at free space. */ + for (space = pend - 1; *space == '#'; space--) + ; + + if (*space != '\n') + /* Broken. */ + return 0; + + space++; + + while (p + nl + 1 < space) + { + if (grub_memcmp (p, name, nl) == 0 && p[nl] == '=') + { + int len; + + /* Found the same name. */ + p += nl + 1; + + /* Check the length of the current value. */ + len = 0; + while (p + len < pend && p[len] != '\n') + { + if (p[len] == '\\') + len += 2; + else + len++; + } + + if (p + len >= pend) + /* Broken. */ + return 0; + + if (pend - space < vl - len) + /* No space. */ + return 0; + + if (vl < len) + { + /* Move the following characters backward, and fill the new + space with harmless characters. */ + grub_memmove (p + vl, p + len, pend - (p + len)); + grub_memset (space + len - vl, '#', len - vl); + } + else + /* Move the following characters forward. */ + grub_memmove (p + vl, p + len, pend - (p + vl)); + + found = 1; + break; + } + + p = find_next_line (p, pend); + } + + if (! found) + { + /* Append a new variable. */ + + if (pend - space < nl + 1 + vl + 1) + /* No space. */ + return 0; + + grub_memcpy (space, name, nl); + p = space + nl; + *p++ = '='; + } + + /* Write the value. */ + for (i = 0; value[i]; i++) + { + if (value[i] == '\\' || value[i] == '\n') + *p++ = '\\'; + + *p++ = value[i]; + } + + *p = '\n'; + return 1; +} + +void +grub_envblk_delete (grub_envblk_t envblk, const char *name) +{ + char *p, *pend; + int nl; + + nl = grub_strlen (name); + p = envblk->buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1; + pend = envblk->buf + envblk->size; + + while (p + nl + 1 < pend) + { + if (grub_memcmp (p, name, nl) == 0 && p[nl] == '=') + { + /* Found. */ + int len = nl + 1; + + while (p + len < pend) + { + if (p[len] == '\n') + break; + else if (p[len] == '\\') + len += 2; + else + len++; + } + + if (p + len >= pend) + /* Broken. */ + return; + + len++; + grub_memmove (p, p + len, pend - (p + len)); + grub_memset (pend - len, '#', len); + break; + } + + p = find_next_line (p, pend); + } +} + +void +grub_envblk_iterate (grub_envblk_t envblk, + void *hook_data, + int hook (const char *name, const char *value, void *hook_data)) +{ + char *p, *pend; + + p = envblk->buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1; + pend = envblk->buf + envblk->size; + + while (p < pend) + { + if (*p != '#') + { + char *name; + char *value; + char *name_start, *name_end, *value_start; + char *q; + int ret; + + name_start = p; + while (p < pend && *p != '=') + p++; + if (p == pend) + /* Broken. */ + return; + name_end = p; + + p++; + value_start = p; + while (p < pend) + { + if (*p == '\n') + break; + else if (*p == '\\') + p += 2; + else + p++; + } + + if (p >= pend) + /* Broken. */ + return; + + name = grub_malloc (p - name_start + 1); + if (! name) + /* out of memory. */ + return; + + value = name + (value_start - name_start); + + grub_memcpy (name, name_start, name_end - name_start); + name[name_end - name_start] = '\0'; + + for (p = value_start, q = value; *p != '\n'; ++p) + { + if (*p == '\\') + *q++ = *++p; + else + *q++ = *p; + } + *q = '\0'; + + ret = hook (name, value, hook_data); + grub_free (name); + if (ret) + return; + } + + p = find_next_line (p, pend); + } +} diff --git a/grub-core/lib/fake_module.c b/grub-core/lib/fake_module.c new file mode 100644 index 000000000..3646cedbc --- /dev/null +++ b/grub-core/lib/fake_module.c @@ -0,0 +1,4 @@ +/* This file is intentionally empty: it's used to generate modules with no code or data. (purely dependency modules) */ +#include + +GRUB_MOD_LICENSE ("GPLv3+"); diff --git a/grub-core/lib/fdt.c b/grub-core/lib/fdt.c new file mode 100644 index 000000000..b5d520f20 --- /dev/null +++ b/grub-core/lib/fdt.c @@ -0,0 +1,465 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define FDT_SUPPORTED_VERSION 17 + +#define FDT_BEGIN_NODE 0x00000001 +#define FDT_END_NODE 0x00000002 +#define FDT_PROP 0x00000003 +#define FDT_NOP 0x00000004 +#define FDT_END 0x00000009 + +#define struct_end(fdt) \ + ((grub_addr_t) fdt + grub_fdt_get_off_dt_struct(fdt) \ + + grub_fdt_get_size_dt_struct(fdt)) + +/* Size needed by a node entry: 2 tokens (FDT_BEGIN_NODE and FDT_END_NODE), plus + the NULL-terminated string containing the name, plus padding if needed. */ +#define node_entry_size(node_name) \ + (2 * sizeof(grub_uint32_t) \ + + ALIGN_UP (grub_strlen (name) + 1, sizeof(grub_uint32_t))) + +/* Size needed by a property entry: 1 token (FDT_PROPERTY), plus len and nameoff + fields, plus the property value, plus padding if needed. */ +#define prop_entry_size(prop_len) \ + (3 * sizeof(grub_uint32_t) + ALIGN_UP(prop_len, sizeof(grub_uint32_t))) + +#define SKIP_NODE_NAME(name, token, end) \ + name = (char *) ((token) + 1); \ + while (name < (char *) end) \ + { \ + if (!*name++) \ + break; \ + } \ + token = (grub_uint32_t *) ALIGN_UP((grub_addr_t) (name), sizeof(*token)) + + +static grub_uint32_t *get_next_node (const void *fdt, char *node_name) +{ + grub_uint32_t *end = (void *) struct_end (fdt); + grub_uint32_t *token; + + if (node_name >= (char *) end) + return NULL; + while (*node_name++) + { + if (node_name >= (char *) end) + return NULL; + } + token = (grub_uint32_t *) ALIGN_UP ((grub_addr_t) node_name, 4); + while (token < end) + { + switch (grub_be_to_cpu32(*token)) + { + case FDT_BEGIN_NODE: + token = get_next_node (fdt, (char *) (token + 1)); + if (!token) + return NULL; + break; + case FDT_END_NODE: + token++; + if (token >= end) + return NULL; + return token; + case FDT_PROP: + /* Skip property token and following data (len, nameoff and property + value). */ + token += prop_entry_size(grub_be_to_cpu32(*(token + 1))) + / sizeof(*token); + break; + case FDT_NOP: + token++; + break; + default: + return NULL; + } + } + return NULL; +} + +static int get_mem_rsvmap_size (const void *fdt) +{ + int size = 0; + grub_uint64_t *ptr = (void *) ((grub_addr_t) fdt + + grub_fdt_get_off_mem_rsvmap (fdt)); + + do + { + size += 2 * sizeof(*ptr); + if (!*ptr && !*(ptr + 1)) + return size; + ptr += 2; + } while ((grub_addr_t) ptr <= (grub_addr_t) fdt + grub_fdt_get_totalsize (fdt) + - 2 * sizeof(grub_uint64_t)); + return -1; +} + +static grub_uint32_t get_free_space (void *fdt) +{ + int mem_rsvmap_size = get_mem_rsvmap_size (fdt); + + if (mem_rsvmap_size < 0) + /* invalid memory reservation block */ + return 0; + return (grub_fdt_get_totalsize (fdt) - sizeof(grub_fdt_header_t) + - mem_rsvmap_size - grub_fdt_get_size_dt_strings (fdt) + - grub_fdt_get_size_dt_struct (fdt)); +} + +static int add_subnode (void *fdt, int parentoffset, const char *name) +{ + grub_uint32_t *token = (void *) ((grub_addr_t) fdt + + grub_fdt_get_off_dt_struct(fdt) + + parentoffset); + grub_uint32_t *end = (void *) struct_end (fdt); + unsigned int entry_size = node_entry_size (name); + unsigned int struct_size = grub_fdt_get_size_dt_struct(fdt); + char *node_name; + + SKIP_NODE_NAME(node_name, token, end); + + /* Insert the new subnode just after the properties of the parent node (if + any).*/ + while (1) + { + if (token >= end) + return -1; + switch (grub_be_to_cpu32(*token)) + { + case FDT_PROP: + /* Skip len, nameoff and property value. */ + token += prop_entry_size(grub_be_to_cpu32(*(token + 1))) + / sizeof(*token); + break; + case FDT_BEGIN_NODE: + case FDT_END_NODE: + goto insert; + case FDT_NOP: + token++; + break; + default: + /* invalid token */ + return -1; + } + } +insert: + grub_memmove (token + entry_size / sizeof(*token), token, + (grub_addr_t) end - (grub_addr_t) token); + *token = grub_cpu_to_be32_compile_time(FDT_BEGIN_NODE); + token[entry_size / sizeof(*token) - 2] = 0; /* padding bytes */ + grub_strcpy((char *) (token + 1), name); + token[entry_size / sizeof(*token) - 1] = grub_cpu_to_be32_compile_time(FDT_END_NODE); + grub_fdt_set_size_dt_struct (fdt, struct_size + entry_size); + return ((grub_addr_t) token - (grub_addr_t) fdt + - grub_fdt_get_off_dt_struct(fdt)); +} + +/* Rearrange FDT blocks in the canonical order: first the memory reservation + block (just after the FDT header), then the structure block and finally the + strings block. No free space is left between the first and the second block, + while the space between the second and the third block is given by the + clearance argument. */ +static int rearrange_blocks (void *fdt, unsigned int clearance) +{ + grub_uint32_t off_mem_rsvmap = ALIGN_UP(sizeof(grub_fdt_header_t), 8); + grub_uint32_t off_dt_struct = off_mem_rsvmap + get_mem_rsvmap_size (fdt); + grub_uint32_t off_dt_strings = off_dt_struct + + grub_fdt_get_size_dt_struct (fdt) + + clearance; + grub_uint8_t *fdt_ptr = fdt; + grub_uint8_t *tmp_fdt; + + if ((grub_fdt_get_off_mem_rsvmap (fdt) == off_mem_rsvmap) + && (grub_fdt_get_off_dt_struct (fdt) == off_dt_struct)) + { + /* No need to allocate memory for a temporary FDT, just move the strings + block if needed. */ + if (grub_fdt_get_off_dt_strings (fdt) != off_dt_strings) + { + grub_memmove(fdt_ptr + off_dt_strings, + fdt_ptr + grub_fdt_get_off_dt_strings (fdt), + grub_fdt_get_size_dt_strings (fdt)); + grub_fdt_set_off_dt_strings (fdt, off_dt_strings); + } + return 0; + } + tmp_fdt = grub_malloc (grub_fdt_get_totalsize (fdt)); + if (!tmp_fdt) + return -1; + grub_memcpy (tmp_fdt + off_mem_rsvmap, + fdt_ptr + grub_fdt_get_off_mem_rsvmap (fdt), + get_mem_rsvmap_size (fdt)); + grub_fdt_set_off_mem_rsvmap (fdt, off_mem_rsvmap); + grub_memcpy (tmp_fdt + off_dt_struct, + fdt_ptr + grub_fdt_get_off_dt_struct (fdt), + grub_fdt_get_size_dt_struct (fdt)); + grub_fdt_set_off_dt_struct (fdt, off_dt_struct); + grub_memcpy (tmp_fdt + off_dt_strings, + fdt_ptr + grub_fdt_get_off_dt_strings (fdt), + grub_fdt_get_size_dt_strings (fdt)); + grub_fdt_set_off_dt_strings (fdt, off_dt_strings); + + /* Copy reordered blocks back to fdt. */ + grub_memcpy (fdt_ptr + off_mem_rsvmap, tmp_fdt + off_mem_rsvmap, + grub_fdt_get_totalsize (fdt) - off_mem_rsvmap); + + grub_free(tmp_fdt); + return 0; +} + +static grub_uint32_t *find_prop (void *fdt, unsigned int nodeoffset, + const char *name) +{ + grub_uint32_t *prop = (void *) ((grub_addr_t) fdt + + grub_fdt_get_off_dt_struct (fdt) + + nodeoffset); + grub_uint32_t *end = (void *) struct_end(fdt); + grub_uint32_t nameoff; + char *node_name; + + SKIP_NODE_NAME(node_name, prop, end); + while (prop < end - 2) + { + if (grub_be_to_cpu32(*prop) == FDT_PROP) + { + nameoff = grub_be_to_cpu32(*(prop + 2)); + if ((nameoff + grub_strlen (name) < grub_fdt_get_size_dt_strings (fdt)) + && !grub_strcmp (name, (char *) fdt + + grub_fdt_get_off_dt_strings (fdt) + nameoff)) + { + if (prop + prop_entry_size(grub_be_to_cpu32(*(prop + 1))) + / sizeof (*prop) >= end) + return NULL; + return prop; + } + prop += prop_entry_size(grub_be_to_cpu32(*(prop + 1))) / sizeof (*prop); + } + else if (grub_be_to_cpu32(*prop) == FDT_NOP) + prop++; + else + return NULL; + } + return NULL; +} + +/* Check the FDT header for consistency and adjust the totalsize field to match + the size allocated for the FDT; if this function is called before the other + functions in this file and returns success, the other functions are + guaranteed not to access memory locations outside the allocated memory. */ +int grub_fdt_check_header_nosize (void *fdt) +{ + if (((grub_addr_t) fdt & 0x7) || (grub_fdt_get_magic (fdt) != FDT_MAGIC) + || (grub_fdt_get_version (fdt) < FDT_SUPPORTED_VERSION) + || (grub_fdt_get_last_comp_version (fdt) > FDT_SUPPORTED_VERSION) + || (grub_fdt_get_off_dt_struct (fdt) & 0x00000003) + || (grub_fdt_get_size_dt_struct (fdt) & 0x00000003) + || (grub_fdt_get_off_dt_struct (fdt) + grub_fdt_get_size_dt_struct (fdt) + > grub_fdt_get_totalsize (fdt)) + || (grub_fdt_get_off_dt_strings (fdt) + grub_fdt_get_size_dt_strings (fdt) + > grub_fdt_get_totalsize (fdt)) + || (grub_fdt_get_off_mem_rsvmap (fdt) & 0x00000007) + || (grub_fdt_get_off_mem_rsvmap (fdt) + > grub_fdt_get_totalsize (fdt) - 2 * sizeof(grub_uint64_t))) + return -1; + return 0; +} + +int grub_fdt_check_header (void *fdt, unsigned int size) +{ + if (size < sizeof (grub_fdt_header_t) + || (grub_fdt_get_totalsize (fdt) > size) + || grub_fdt_check_header_nosize (fdt) == -1) + return -1; + return 0; +} + +/* Find a direct sub-node of a given parent node. */ +int grub_fdt_find_subnode (const void *fdt, unsigned int parentoffset, + const char *name) +{ + grub_uint32_t *token, *end; + char *node_name; + + if (parentoffset & 0x3) + return -1; + token = (void *) ((grub_addr_t) fdt + grub_fdt_get_off_dt_struct(fdt) + + parentoffset); + end = (void *) struct_end (fdt); + if ((token >= end) || (grub_be_to_cpu32(*token) != FDT_BEGIN_NODE)) + return -1; + SKIP_NODE_NAME(node_name, token, end); + while (token < end) + { + switch (grub_be_to_cpu32(*token)) + { + case FDT_BEGIN_NODE: + node_name = (char *) (token + 1); + if (node_name + grub_strlen (name) >= (char *) end) + return -1; + if (!grub_strcmp (node_name, name)) + return (int) ((grub_addr_t) token - (grub_addr_t) fdt + - grub_fdt_get_off_dt_struct (fdt)); + token = get_next_node (fdt, node_name); + if (!token) + return -1; + break; + case FDT_PROP: + /* Skip property token and following data (len, nameoff and property + value). */ + if (token >= end - 1) + return -1; + token += prop_entry_size(grub_be_to_cpu32(*(token + 1))) + / sizeof(*token); + break; + case FDT_NOP: + token++; + break; + default: + return -1; + } + } + return -1; +} + +int grub_fdt_add_subnode (void *fdt, unsigned int parentoffset, + const char *name) +{ + unsigned int entry_size = node_entry_size(name); + + if ((parentoffset & 0x3) || (get_free_space (fdt) < entry_size)) + return -1; + + /* The new node entry will increase the size of the structure block: rearrange + blocks such that there is sufficient free space between the structure and + the strings block, then add the new node entry. */ + if (rearrange_blocks (fdt, entry_size) < 0) + return -1; + return add_subnode (fdt, parentoffset, name); +} + +int grub_fdt_set_prop (void *fdt, unsigned int nodeoffset, const char *name, + const void *val, grub_uint32_t len) +{ + grub_uint32_t *prop; + int prop_name_present = 0; + grub_uint32_t nameoff = 0; + + if ((nodeoffset >= grub_fdt_get_size_dt_struct (fdt)) || (nodeoffset & 0x3) + || (grub_be_to_cpu32(*(grub_uint32_t *) ((grub_addr_t) fdt + + grub_fdt_get_off_dt_struct (fdt) + nodeoffset)) + != FDT_BEGIN_NODE)) + return -1; + prop = find_prop (fdt, nodeoffset, name); + if (prop) + { + grub_uint32_t prop_len = ALIGN_UP(grub_be_to_cpu32 (*(prop + 1)), + sizeof(grub_uint32_t)); + grub_uint32_t i; + + prop_name_present = 1; + for (i = 0; i < prop_len / sizeof(grub_uint32_t); i++) + *(prop + 3 + i) = grub_cpu_to_be32_compile_time (FDT_NOP); + if (len > ALIGN_UP(prop_len, sizeof(grub_uint32_t))) + { + /* Length of new property value is greater than the space allocated + for the current value: a new entry needs to be created, so save the + nameoff field of the current entry and replace the current entry + with NOP tokens. */ + nameoff = grub_be_to_cpu32 (*(prop + 2)); + *prop = *(prop + 1) = *(prop + 2) = grub_cpu_to_be32_compile_time (FDT_NOP); + prop = NULL; + } + } + if (!prop || !prop_name_present) { + unsigned int needed_space = 0; + + if (!prop) + needed_space = prop_entry_size(len); + if (!prop_name_present) + needed_space += grub_strlen (name) + 1; + if (needed_space > get_free_space (fdt)) + return -1; + if (rearrange_blocks (fdt, !prop ? prop_entry_size(len) : 0) < 0) + return -1; + } + if (!prop_name_present) { + /* Append the property name at the end of the strings block. */ + nameoff = grub_fdt_get_size_dt_strings (fdt); + grub_strcpy ((char *) fdt + grub_fdt_get_off_dt_strings (fdt) + nameoff, + name); + grub_fdt_set_size_dt_strings (fdt, grub_fdt_get_size_dt_strings (fdt) + + grub_strlen (name) + 1); + } + if (!prop) { + char *node_name = (char *) ((grub_addr_t) fdt + + grub_fdt_get_off_dt_struct (fdt) + nodeoffset + + sizeof(grub_uint32_t)); + + prop = (void *) (node_name + ALIGN_UP(grub_strlen(node_name) + 1, 4)); + grub_memmove (prop + prop_entry_size(len) / sizeof(*prop), prop, + struct_end(fdt) - (grub_addr_t) prop); + grub_fdt_set_size_dt_struct (fdt, grub_fdt_get_size_dt_struct (fdt) + + prop_entry_size(len)); + *prop = grub_cpu_to_be32_compile_time (FDT_PROP); + *(prop + 2) = grub_cpu_to_be32 (nameoff); + } + *(prop + 1) = grub_cpu_to_be32 (len); + + /* Insert padding bytes at the end of the value; if they are not needed, they + will be overwritten by the following memcpy. */ + *(prop + prop_entry_size(len) / sizeof(grub_uint32_t) - 1) = 0; + + grub_memcpy (prop + 3, val, len); + return 0; +} + +int +grub_fdt_create_empty_tree (void *fdt, unsigned int size) +{ + struct grub_fdt_empty_tree *et; + + if (size < GRUB_FDT_EMPTY_TREE_SZ) + return -1; + + grub_memset (fdt, 0, size); + et = fdt; + + et->empty_node.tree_end = grub_cpu_to_be32_compile_time (FDT_END); + et->empty_node.node_end = grub_cpu_to_be32_compile_time (FDT_END_NODE); + et->empty_node.node_start = grub_cpu_to_be32_compile_time (FDT_BEGIN_NODE); + ((struct grub_fdt_empty_tree *) fdt)->header.off_mem_rsvmap = + grub_cpu_to_be32_compile_time (ALIGN_UP (sizeof (grub_fdt_header_t), 8)); + + grub_fdt_set_off_dt_strings (fdt, sizeof (*et)); + grub_fdt_set_off_dt_struct (fdt, + sizeof (et->header) + sizeof (et->empty_rsvmap)); + grub_fdt_set_version (fdt, FDT_SUPPORTED_VERSION); + grub_fdt_set_last_comp_version (fdt, FDT_SUPPORTED_VERSION); + grub_fdt_set_size_dt_struct (fdt, sizeof (et->empty_node)); + grub_fdt_set_totalsize (fdt, size); + grub_fdt_set_magic (fdt, FDT_MAGIC); + + return 0; +} diff --git a/grub-core/lib/getline.c b/grub-core/lib/getline.c new file mode 100644 index 000000000..edb8e9ffe --- /dev/null +++ b/grub-core/lib/getline.c @@ -0,0 +1,92 @@ +/* main.c - the normal mode main routine */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2000,2001,2002,2003,2005,2006,2007,2008,2009,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Read a line from the file FILE. */ +char * +grub_file_getline (grub_file_t file) +{ + char c; + grub_size_t pos = 0; + char *cmdline; + int have_newline = 0; + grub_size_t max_len = 64; + + /* Initially locate some space. */ + cmdline = grub_malloc (max_len); + if (! cmdline) + return 0; + + while (1) + { + if (grub_file_read (file, &c, 1) != 1) + break; + + /* Skip all carriage returns. */ + if (c == '\r') + continue; + + + if (pos + 1 >= max_len) + { + char *old_cmdline = cmdline; + max_len = max_len * 2; + cmdline = grub_realloc (cmdline, max_len); + if (! cmdline) + { + grub_free (old_cmdline); + return 0; + } + } + + if (c == '\n') + { + have_newline = 1; + break; + } + + cmdline[pos++] = c; + } + + cmdline[pos] = '\0'; + + /* If the buffer is empty, don't return anything at all. */ + if (pos == 0 && !have_newline) + { + grub_free (cmdline); + cmdline = 0; + } + + return cmdline; +} diff --git a/grub-core/lib/hexdump.c b/grub-core/lib/hexdump.c new file mode 100644 index 000000000..317635a2b --- /dev/null +++ b/grub-core/lib/hexdump.c @@ -0,0 +1,85 @@ +/* hexdump.c - hexdump function */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +void +hexdump (unsigned long bse, char *buf, int len) +{ + int pos; + char line[80]; + + while (len > 0) + { + int cnt, i; + + pos = grub_snprintf (line, sizeof (line), "%08lx ", bse); + cnt = 16; + if (cnt > len) + cnt = len; + + for (i = 0; i < cnt; i++) + { + pos += grub_snprintf (&line[pos], sizeof (line) - pos, + "%02x ", (unsigned char) buf[i]); + if ((i & 7) == 7) + line[pos++] = ' '; + } + + for (; i < 16; i++) + { + pos += grub_snprintf (&line[pos], sizeof (line) - pos, " "); + if ((i & 7) == 7) + line[pos++] = ' '; + } + + line[pos++] = '|'; + + for (i = 0; i < cnt; i++) + line[pos++] = ((buf[i] >= 32) && (buf[i] < 127)) ? buf[i] : '.'; + + line[pos++] = '|'; + + line[pos] = 0; + + grub_printf ("%s\n", line); + + /* Print only first and last line if more than 3 lines are identical. */ + if (len >= 4 * 16 + && ! grub_memcmp (buf, buf + 1 * 16, 16) + && ! grub_memcmp (buf, buf + 2 * 16, 16) + && ! grub_memcmp (buf, buf + 3 * 16, 16)) + { + grub_printf ("*\n"); + do + { + bse += 16; + buf += 16; + len -= 16; + } + while (len >= 3 * 16 && ! grub_memcmp (buf, buf + 2 * 16, 16)); + } + + bse += 16; + buf += 16; + len -= cnt; + } +} diff --git a/grub-core/lib/i386/backtrace.c b/grub-core/lib/i386/backtrace.c new file mode 100644 index 000000000..c3e03c727 --- /dev/null +++ b/grub-core/lib/i386/backtrace.c @@ -0,0 +1,66 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#define MAX_STACK_FRAME 102400 + +void +grub_backtrace_pointer (void *ebp) +{ + void *ptr, *nptr; + unsigned i; + + ptr = ebp; + while (1) + { + grub_printf ("%p: ", ptr); + grub_backtrace_print_address (((void **) ptr)[1]); + grub_printf (" ("); + for (i = 0; i < 2; i++) + grub_printf ("%p,", ((void **)ptr) [i + 2]); + grub_printf ("%p)\n", ((void **)ptr) [i + 2]); + nptr = *(void **)ptr; + if (nptr < ptr || (void **) nptr - (void **) ptr > MAX_STACK_FRAME + || nptr == ptr) + { + grub_printf ("Invalid stack frame at %p (%p)\n", ptr, nptr); + break; + } + ptr = nptr; + } +} + +void +grub_backtrace (void) +{ +#ifdef __x86_64__ + asm volatile ("movq %%rbp, %%rdi\n" + "callq *%%rax": :"a"(grub_backtrace_pointer)); +#else + asm volatile ("movl %%ebp, %%eax\n" + "calll *%%ecx": :"c"(grub_backtrace_pointer)); +#endif +} + diff --git a/grub-core/lib/i386/halt.c b/grub-core/lib/i386/halt.c new file mode 100644 index 000000000..9f8405494 --- /dev/null +++ b/grub-core/lib/i386/halt.c @@ -0,0 +1,82 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +const char bochs_shutdown[] = "Shutdown"; + +/* + * This call is special... it never returns... in fact it should simply + * hang at this point! + */ +static inline void __attribute__ ((noreturn)) +stop (void) +{ + asm volatile ("cli"); + while (1) + { + asm volatile ("hlt"); + } +} + +static int +grub_shutdown_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid, + void *data __attribute__ ((unused))) +{ + /* QEMU. */ + if (pciid == 0x71138086) + { + grub_pci_address_t addr; + addr = grub_pci_make_address (dev, 0x40); + grub_pci_write (addr, 0x7001); + addr = grub_pci_make_address (dev, 0x80); + grub_pci_write (addr, grub_pci_read (addr) | 1); + grub_outw (0x2000, 0x7004); + } + return 0; +} + +void +grub_halt (void) +{ + unsigned int i; + +#if defined (GRUB_MACHINE_COREBOOT) || defined (GRUB_MACHINE_MULTIBOOT) + grub_acpi_halt (); +#endif + + /* Disable interrupts. */ + __asm__ __volatile__ ("cli"); + + /* Bochs, QEMU, etc. Removed in newer QEMU releases. */ + for (i = 0; i < sizeof (bochs_shutdown) - 1; i++) + grub_outb (bochs_shutdown[i], 0x8900); + + grub_pci_iterate (grub_shutdown_pci_iter, NULL); + + grub_puts_ (N_("GRUB doesn't know how to halt this machine yet!")); + + /* In order to return we'd have to check what the previous status of IF + flag was. But user most likely doesn't want to return anyway ... */ + stop (); +} diff --git a/grub-core/lib/i386/pc/biosnum.c b/grub-core/lib/i386/pc/biosnum.c new file mode 100644 index 000000000..0f0e743c4 --- /dev/null +++ b/grub-core/lib/i386/pc/biosnum.c @@ -0,0 +1,47 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +static int +grub_get_root_biosnumber_default (void) +{ + const char *biosnum; + int ret = -1; + grub_device_t dev; + + biosnum = grub_env_get ("biosnum"); + + if (biosnum) + return grub_strtoul (biosnum, 0, 0); + + dev = grub_device_open (0); + if (dev && dev->disk && dev->disk->dev + && dev->disk->dev->id == GRUB_DISK_DEVICE_BIOSDISK_ID) + ret = (int) dev->disk->id; + + if (dev) + grub_device_close (dev); + + return ret; +} + +int (*grub_get_root_biosnumber) (void) = grub_get_root_biosnumber_default; diff --git a/grub-core/lib/i386/pc/vesa_modes_table.c b/grub-core/lib/i386/pc/vesa_modes_table.c new file mode 100644 index 000000000..6dc4b7d8d --- /dev/null +++ b/grub-core/lib/i386/pc/vesa_modes_table.c @@ -0,0 +1,127 @@ + +#include + +/* This is the reverse of the table in [linux]/Documentation/fb/vesafb.txt + plus a few more modes based on the table in + http://en.wikipedia.org/wiki/VESA_BIOS_Extensions */ +struct grub_vesa_mode_table_entry +grub_vesa_mode_table[GRUB_VESA_MODE_TABLE_END + - GRUB_VESA_MODE_TABLE_START + 1] = + { + { 640, 400, 8 }, /* 0x300 */ + { 640, 480, 8 }, /* 0x301 */ + { 800, 600, 4 }, /* 0x302 */ + { 800, 600, 8 }, /* 0x303 */ + { 1024, 768, 4 }, /* 0x304 */ + { 1024, 768, 8 }, /* 0x305 */ + { 1280, 1024, 4 }, /* 0x306 */ + { 1280, 1024, 8 }, /* 0x307 */ + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 320, 200, 15 }, /* 0x30d */ + { 320, 200, 16 }, /* 0x30e */ + { 320, 200, 24 }, /* 0x30f */ + { 640, 480, 15 }, /* 0x310 */ + { 640, 480, 16 }, /* 0x311 */ + { 640, 480, 24 }, /* 0x312 */ + { 800, 600, 15 }, /* 0x313 */ + { 800, 600, 16 }, /* 0x314 */ + { 800, 600, 24 }, /* 0x315 */ + { 1024, 768, 15 }, /* 0x316 */ + { 1024, 768, 16 }, /* 0x317 */ + { 1024, 768, 24 }, /* 0x318 */ + { 1280, 1024, 15 }, /* 0x319 */ + { 1280, 1024, 16 }, /* 0x31a */ + { 1280, 1024, 24 }, /* 0x31b */ + { 1600, 1200, 8 }, /* 0x31c */ + { 1600, 1200, 15 }, /* 0x31d */ + { 1600, 1200, 16 }, /* 0x31e */ + { 1600, 1200, 24 }, /* 0x31f */ + { 0, 0, 0 }, + { 640, 400, 15 }, /* 0x321 */ + { 640, 400, 16 }, /* 0x322 */ + { 640, 400, 24 }, /* 0x323 */ + { 640, 400, 32 }, /* 0x324 */ + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 640, 480, 32 }, /* 0x329 */ + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 896, 672, 8 }, /* 0x32f */ + { 896, 672, 15 }, /* 0x330 */ + { 896, 672, 16 }, /* 0x331 */ + { 896, 672, 24 }, /* 0x332 */ + { 896, 672, 32 }, /* 0x333 */ + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 1600, 1200, 32 }, /* 0x342 */ + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 1440, 900, 8 }, /* 0x360 */ + { 1440, 900, 15 }, /* 0x361 */ + { 1440, 900, 16 }, /* 0x362 */ + { 1440, 900, 24 }, /* 0x363 */ + { 1440, 900, 32 }, /* 0x364 */ + { 1152, 720, 8 }, /* 0x365 */ + { 1152, 720, 15 }, /* 0x366 */ + { 1152, 720, 16 }, /* 0x367 */ + { 1152, 720, 24 }, /* 0x368 */ + { 1152, 720, 32 }, /* 0x369 */ + { 1024, 640, 8 }, /* 0x36a */ + { 1024, 640, 15 }, /* 0x36b */ + { 1024, 640, 16 }, /* 0x36c */ + { 1024, 640, 24 }, /* 0x36d */ + { 1024, 640, 32 }, /* 0x36e */ + { 800, 500, 8 }, /* 0x36f */ + { 800, 500, 15 }, /* 0x370 */ + { 800, 500, 16 }, /* 0x371 */ + { 800, 500, 24 }, /* 0x372 */ + { 800, 500, 32 }, /* 0x373 */ + }; diff --git a/grub-core/lib/i386/random.c b/grub-core/lib/i386/random.c new file mode 100644 index 000000000..cd83d2f8f --- /dev/null +++ b/grub-core/lib/i386/random.c @@ -0,0 +1,103 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2016 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +static int have_tsc = -1, have_pmtimer = -1; +static grub_port_t pmtimer_port; + +static int +detect_pmtimer (void) +{ + struct grub_acpi_fadt *fadt; + fadt = grub_acpi_find_fadt (); + if (!fadt) + return 0; + pmtimer_port = fadt->pmtimer; + if (!pmtimer_port) + return 0; + return 1; +} + +static int +pmtimer_tsc_get_random_bit (void) +{ + /* It's hard to come up with figures about pmtimer and tsc jitter but + 50 ppm seems to be typical. So we need 10^6/50 tsc cycles to get drift + of one tsc cycle. With TSC at least of 800 MHz it means 1/(50*800) + = 1/40000 s or about 3579545 / 40000 = 90 pmtimer ticks. + This gives us rate of 40000 bit/s or 5 kB/s. + */ + grub_uint64_t tsc_diff; + tsc_diff = grub_pmtimer_wait_count_tsc (pmtimer_port, 90); + if (tsc_diff == 0) + { + have_pmtimer = 0; + return -1; + } + return tsc_diff & 1; +} + +static int +pmtimer_tsc_get_random_byte (void) +{ + grub_uint8_t ret = 0; + int i, c; + for (i = 0; i < 8; i++) + { + c = pmtimer_tsc_get_random_bit (); + if (c < 0) + return -1; + ret |= c << i; + } + return ret; +} + +static int +pmtimer_fill_buffer (void *buffer, grub_size_t sz) +{ + grub_uint8_t *p = buffer; + int c; + while (sz) + { + c = pmtimer_tsc_get_random_byte (); + if (c < 0) + return 0; + *p++ = c; + sz--; + } + return 1; +} + +int +grub_crypto_arch_get_random (void *buffer, grub_size_t sz) +{ + if (have_tsc == -1) + have_tsc = grub_cpu_is_tsc_supported (); + if (!have_tsc) + return 0; + if (have_pmtimer == -1) + have_pmtimer = detect_pmtimer (); + if (!have_pmtimer) + return 0; + return pmtimer_fill_buffer (buffer, sz); +} diff --git a/grub-core/lib/i386/reboot.c b/grub-core/lib/i386/reboot.c new file mode 100644 index 000000000..a234244dc --- /dev/null +++ b/grub-core/lib/i386/reboot.c @@ -0,0 +1,60 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +void +grub_reboot (void) +{ + struct grub_relocator *relocator = NULL; + grub_relocator_chunk_t ch; + grub_err_t err; + void *buf; + struct grub_relocator16_state state; + grub_uint16_t segment; + + relocator = grub_relocator_new (); + if (!relocator) + while (1); + err = grub_relocator_alloc_chunk_align (relocator, &ch, 0x1000, 0x1000, + grub_reboot_end - grub_reboot_start, + 16, GRUB_RELOCATOR_PREFERENCE_NONE, + 0); + if (err) + while (1); + buf = get_virtual_current_address (ch); + grub_memcpy (buf, grub_reboot_start, grub_reboot_end - grub_reboot_start); + + segment = ((grub_addr_t) get_physical_target_address (ch)) >> 4; + state.gs = state.fs = state.es = state.ds = state.ss = segment; + state.sp = 0; + state.cs = segment; + state.ip = 0; + state.a20 = 0; + + grub_stop_floppy (); + + err = grub_relocator16_boot (relocator, state); + + while (1); +} diff --git a/grub-core/lib/i386/reboot_trampoline.S b/grub-core/lib/i386/reboot_trampoline.S new file mode 100644 index 000000000..c088cd081 --- /dev/null +++ b/grub-core/lib/i386/reboot_trampoline.S @@ -0,0 +1,34 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .p2align 4 + +VARIABLE(grub_reboot_start) + .code16 + + /* set 0x472 to 0x0000 for cold boot (0x1234 for warm boot) */ + movw $0x0472, %di + xorw %ax, %ax + movw %ax, (%di) + ljmp $0xf000, $0xfff0 + + .code32 +VARIABLE(grub_reboot_end) diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c new file mode 100644 index 000000000..71dd4f0ab --- /dev/null +++ b/grub-core/lib/i386/relocator.c @@ -0,0 +1,216 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +extern grub_uint8_t grub_relocator16_start; +extern grub_uint8_t grub_relocator16_end; +extern grub_uint16_t grub_relocator16_cs; +extern grub_uint16_t grub_relocator16_ip; +extern grub_uint16_t grub_relocator16_ds; +extern grub_uint16_t grub_relocator16_es; +extern grub_uint16_t grub_relocator16_fs; +extern grub_uint16_t grub_relocator16_gs; +extern grub_uint16_t grub_relocator16_ss; +extern grub_uint16_t grub_relocator16_sp; +extern grub_uint32_t grub_relocator16_edx; +extern grub_uint32_t grub_relocator16_ebx; +extern grub_uint32_t grub_relocator16_esi; +extern grub_uint32_t grub_relocator16_ebp; + +extern grub_uint16_t grub_relocator16_keep_a20_enabled; + +extern grub_uint8_t grub_relocator32_start; +extern grub_uint8_t grub_relocator32_end; +extern grub_uint32_t grub_relocator32_eax; +extern grub_uint32_t grub_relocator32_ebx; +extern grub_uint32_t grub_relocator32_ecx; +extern grub_uint32_t grub_relocator32_edx; +extern grub_uint32_t grub_relocator32_eip; +extern grub_uint32_t grub_relocator32_esp; +extern grub_uint32_t grub_relocator32_ebp; +extern grub_uint32_t grub_relocator32_esi; +extern grub_uint32_t grub_relocator32_edi; + +extern grub_uint8_t grub_relocator64_start; +extern grub_uint8_t grub_relocator64_end; +extern grub_uint64_t grub_relocator64_rax; +extern grub_uint64_t grub_relocator64_rbx; +extern grub_uint64_t grub_relocator64_rcx; +extern grub_uint64_t grub_relocator64_rdx; +extern grub_uint64_t grub_relocator64_rip; +extern grub_uint64_t grub_relocator64_rsp; +extern grub_uint64_t grub_relocator64_rsi; +extern grub_addr_t grub_relocator64_cr3; +extern struct grub_i386_idt grub_relocator16_idt; + +#define RELOCATOR_SIZEOF(x) (&grub_relocator##x##_end - &grub_relocator##x##_start) + +grub_err_t +grub_relocator32_boot (struct grub_relocator *rel, + struct grub_relocator32_state state, + int avoid_efi_bootservices) +{ + grub_err_t err; + void *relst; + grub_relocator_chunk_t ch; + + /* Specific memory range due to Global Descriptor Table for use by payload + that we will store in returned chunk. The address range and preference + are based on "THE LINUX/x86 BOOT PROTOCOL" specification. */ + err = grub_relocator_alloc_chunk_align (rel, &ch, 0x1000, + 0x9a000 - RELOCATOR_SIZEOF (32), + RELOCATOR_SIZEOF (32), 16, + GRUB_RELOCATOR_PREFERENCE_LOW, + avoid_efi_bootservices); + if (err) + return err; + + grub_relocator32_eax = state.eax; + grub_relocator32_ebx = state.ebx; + grub_relocator32_ecx = state.ecx; + grub_relocator32_edx = state.edx; + grub_relocator32_eip = state.eip; + grub_relocator32_esp = state.esp; + grub_relocator32_ebp = state.ebp; + grub_relocator32_esi = state.esi; + grub_relocator32_edi = state.edi; + + grub_memmove (get_virtual_current_address (ch), &grub_relocator32_start, + RELOCATOR_SIZEOF (32)); + + err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch), + &relst, NULL); + if (err) + return err; + + asm volatile ("cli"); + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} + +grub_err_t +grub_relocator16_boot (struct grub_relocator *rel, + struct grub_relocator16_state state) +{ + grub_err_t err; + void *relst; + grub_relocator_chunk_t ch; + + /* Put it higher than the byte it checks for A20 check. */ + err = grub_relocator_alloc_chunk_align (rel, &ch, 0x8010, + 0xa0000 - RELOCATOR_SIZEOF (16) + - GRUB_RELOCATOR16_STACK_SIZE, + RELOCATOR_SIZEOF (16) + + GRUB_RELOCATOR16_STACK_SIZE, 16, + GRUB_RELOCATOR_PREFERENCE_NONE, + 0); + if (err) + return err; + + grub_relocator16_cs = state.cs; + grub_relocator16_ip = state.ip; + + grub_relocator16_ds = state.ds; + grub_relocator16_es = state.es; + grub_relocator16_fs = state.fs; + grub_relocator16_gs = state.gs; + + grub_relocator16_ss = state.ss; + grub_relocator16_sp = state.sp; + + grub_relocator16_ebp = state.ebp; + grub_relocator16_ebx = state.ebx; + grub_relocator16_edx = state.edx; + grub_relocator16_esi = state.esi; +#ifdef GRUB_MACHINE_PCBIOS + grub_relocator16_idt = *grub_realidt; +#else + grub_relocator16_idt.base = 0; + grub_relocator16_idt.limit = 0; +#endif + + grub_relocator16_keep_a20_enabled = state.a20; + + grub_memmove (get_virtual_current_address (ch), &grub_relocator16_start, + RELOCATOR_SIZEOF (16)); + + err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch), + &relst, NULL); + if (err) + return err; + + asm volatile ("cli"); + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} + +grub_err_t +grub_relocator64_boot (struct grub_relocator *rel, + struct grub_relocator64_state state, + grub_addr_t min_addr, grub_addr_t max_addr) +{ + grub_err_t err; + void *relst; + grub_relocator_chunk_t ch; + + err = grub_relocator_alloc_chunk_align (rel, &ch, min_addr, + max_addr - RELOCATOR_SIZEOF (64), + RELOCATOR_SIZEOF (64), 16, + GRUB_RELOCATOR_PREFERENCE_NONE, + 0); + if (err) + return err; + + grub_relocator64_rax = state.rax; + grub_relocator64_rbx = state.rbx; + grub_relocator64_rcx = state.rcx; + grub_relocator64_rdx = state.rdx; + grub_relocator64_rip = state.rip; + grub_relocator64_rsp = state.rsp; + grub_relocator64_rsi = state.rsi; + grub_relocator64_cr3 = state.cr3; + + grub_memmove (get_virtual_current_address (ch), &grub_relocator64_start, + RELOCATOR_SIZEOF (64)); + + err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch), + &relst, NULL); + if (err) + return err; + + asm volatile ("cli"); + ((void (*) (void)) relst) (); + + /* Not reached. */ + return GRUB_ERR_NONE; +} diff --git a/grub-core/lib/i386/relocator16.S b/grub-core/lib/i386/relocator16.S new file mode 100644 index 000000000..c8d6f86d8 --- /dev/null +++ b/grub-core/lib/i386/relocator16.S @@ -0,0 +1,328 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* The code segment of the protected mode. */ +#define CODE_SEGMENT 0x08 + +/* The data segment of the protected mode. */ +#define DATA_SEGMENT 0x10 + +#define PSEUDO_REAL_CSEG 0x18 + +#define PSEUDO_REAL_DSEG 0x20 + +#include + +#include "relocator_common.S" + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE(grub_relocator16_start) + PREAMBLE + +#ifdef __APPLE__ + LOCAL(cs_base_bytes12_offset) = LOCAL (cs_base_bytes12) - LOCAL (base) + LOCAL(cs_base_byte3_offset) = LOCAL (cs_base_byte3) - LOCAL (base) + movl %esi, %eax + movw %ax, (LOCAL(cs_base_bytes12_offset)) (RSI, 1) + shrl $16, %eax + movb %al, (LOCAL (cs_base_byte3_offset)) (RSI, 1) +#else + movl %esi, %eax + movw %ax, (LOCAL (cs_base_bytes12) - LOCAL (base)) (RSI, 1) + shrl $16, %eax + movb %al, (LOCAL (cs_base_byte3) - LOCAL (base)) (RSI, 1) +#endif + + RELOAD_GDT + .code32 + /* Update other registers. */ + movl $DATA_SEGMENT, %eax + movl %eax, %ds + movl %eax, %es + movl %eax, %fs + movl %eax, %gs + movl %eax, %ss + + DISABLE_PAGING + +#ifdef __x86_64__ + /* Disable amd64. */ + movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx + rdmsr + andl $(~GRUB_MEMORY_CPU_AMD64_MSR_ON), %eax + wrmsr +#endif + + /* Turn off PAE. */ + movl %cr4, %eax + andl $(~GRUB_MEMORY_CPU_CR4_PAE_ON), %eax + movl %eax, %cr4 + + /* Update other registers. */ + movl $PSEUDO_REAL_DSEG, %eax + movl %eax, %ds + movl %eax, %es + movl %eax, %fs + movl %eax, %gs + movl %eax, %ss + + movl %esi, %eax + shrl $4, %eax +#ifdef __APPLE__ + LOCAL(segment_offset) = LOCAL (segment) - LOCAL (base) + LOCAL(idt_offset) = LOCAL(relocator16_idt) - LOCAL (base) + LOCAL(cont2_offset) = LOCAL (cont2) - LOCAL(base) + movw %ax, LOCAL(segment_offset) (%esi, 1) + lidt LOCAL(idt_offset) (%esi, 1) + + /* jump to a 16 bit segment */ + ljmp $PSEUDO_REAL_CSEG, $(LOCAL(cont2_offset)) +#else + movw %ax, (LOCAL (segment) - LOCAL (base)) (%esi, 1) + + lidt (EXT_C(grub_relocator16_idt) - LOCAL (base)) (%esi, 1) + + /* jump to a 16 bit segment */ + ljmp $PSEUDO_REAL_CSEG, $(LOCAL (cont2) - LOCAL(base)) +#endif +LOCAL(cont2): + .code16 + + /* clear the PE bit of CR0 */ + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PE_ON), %eax + movl %eax, %cr0 + + /* flush prefetch queue, reload %cs */ + /* ljmp */ + .byte 0xea +#ifdef __APPLE__ + LOCAL(cont3_offset) = LOCAL(cont3) - LOCAL(base) + .word LOCAL(cont3_offset) +#else + .word LOCAL(cont3)-LOCAL(base) +#endif +LOCAL(segment): + .word 0 + +LOCAL(cont3): + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_keep_a20_enabled) + .word 0 + + test %ax, %ax + jnz LOCAL(gate_a20_done) + + movw %cs, %ax + movw %ax, %ss +#ifdef __APPLE__ + LOCAL(relocator16_end_offset) = LOCAL(relocator16_end) - LOCAL(base) + leaw LOCAL(relocator16_end_offset), %sp +#else + leaw LOCAL(relocator16_end) - LOCAL(base), %sp +#endif + addw $GRUB_RELOCATOR16_STACK_SIZE, %sp + + /* second, try a BIOS call */ + movw $0x2400, %ax + int $0x15 + + call LOCAL(gate_a20_check_state) + testb %al, %al + jz LOCAL(gate_a20_done) + + /* + * In macbook, the keyboard test would hang the machine, so we move + * this forward. + */ + /* fourth, try the system control port A */ + inb $0x92 + andb $(~0x03), %al + outb $0x92 + + /* When turning off Gate A20, do not check the state strictly, + because a failure is not fatal usually, and Gate A20 is always + on some modern machines. */ + jmp LOCAL(gate_a20_done) + +LOCAL(gate_a20_check_state): + /* iterate the checking for a while */ + movw $100, %cx +1: + xorw %ax, %ax + movw %ax, %ds + decw %ax + movw %ax, %es + xorw %ax, %ax + + movw $0x8000, %ax + /* compare the byte at ADDR with that at 0x100000 + ADDR */ + movw %ax, %si + addw $0x10, %ax + movw %ax, %di + + /* save the original byte in DL */ + movb %ds:(%si), %dl + movb %es:(%di), %al + /* try to set one less value at ADDR */ + movb %al, %dh + decb %dh + movb %dh, %ds:(%si) + /* serialize */ + outb %al, $0x80 + outb %al, $0x80 + /* obtain the value at 0x100000 + ADDR in CH */ + movb %es:(%di), %dh + /* this result is 1 if A20 is on or 0 if it is off */ + subb %dh, %al + xorb $1, %al + /* restore the original */ + movb %dl, %ds:(%si) + + testb %al, %al + jz LOCAL(gate_a20_done) + loop 1b +2: + ret + +LOCAL(gate_a20_done): + /* we are in real mode now + * set up the real mode segment registers : DS, SS, ES + */ + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_ds) + .word 0 + movw %ax, %ds + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_es) + .word 0 + movw %ax, %es + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_fs) + .word 0 + movw %ax, %fs + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_gs) + .word 0 + movw %ax, %gs + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_ss) + .word 0 + movw %ax, %ss + + /* movw imm16, %ax. */ + .byte 0xb8 +VARIABLE(grub_relocator16_sp) + .word 0 + movzwl %ax, %esp + + /* movw imm32, %eax. */ + .byte 0x66, 0xb8 +VARIABLE(grub_relocator16_esi) + .long 0 + movl %eax, %esi + + /* movw imm32, %edx. */ + .byte 0x66, 0xba +VARIABLE(grub_relocator16_edx) + .long 0 + + /* movw imm32, %ebx. */ + .byte 0x66, 0xbb +VARIABLE(grub_relocator16_ebx) + .long 0 + + /* movl imm32, %ebp. */ + .byte 0x66, 0xbd +VARIABLE(grub_relocator16_ebp) + .long 0 + + /* Cleared direction flag is of no problem with any current + payload and makes this implementation easier. */ + cld + + /* ljmp */ + .byte 0xea +VARIABLE(grub_relocator16_ip) + .word 0 +VARIABLE(grub_relocator16_cs) + .word 0 + + .code32 + + /* GDT. Copied from loader/i386/linux.c. */ + .p2align 4 +LOCAL(gdt): + .word 0, 0 + .byte 0, 0, 0, 0 + + /* -- code segment -- + * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present + * type = 32bit code execute/read, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x9A, 0xCF, 0 + + /* -- data segment -- + * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present + * type = 32 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0xCF, 0 + + /* -- 16 bit real mode CS -- + * base = 0x00000000, limit 0x0FFFF (1 B Granularity), present + * type = 16 bit code execute/read only/conforming, DPL = 0 + */ + .word 0xFFFF +LOCAL(cs_base_bytes12): + .word 0 +LOCAL(cs_base_byte3): + .byte 0 + + .byte 0x9E, 0, 0 + + /* -- 16 bit real mode DS -- + * base = 0x00000000, limit 0x0FFFF (1 B Granularity), present + * type = 16 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0, 0 +LOCAL(gdt_end): + +#ifdef __APPLE__ +LOCAL(relocator16_idt): +#endif +VARIABLE(grub_relocator16_idt) + .word 0 + .long 0 +LOCAL(relocator16_end): +VARIABLE(grub_relocator16_end) + .byte 0 diff --git a/grub-core/lib/i386/relocator32.S b/grub-core/lib/i386/relocator32.S new file mode 100644 index 000000000..09ce56ad0 --- /dev/null +++ b/grub-core/lib/i386/relocator32.S @@ -0,0 +1,134 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* The code segment of the protected mode. */ +#define CODE_SEGMENT 0x10 + +/* The data segment of the protected mode. */ +#define DATA_SEGMENT 0x18 + +#include "relocator_common.S" + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE(grub_relocator32_start) + PREAMBLE + + RELOAD_GDT + .code32 + /* Update other registers. */ + movl $DATA_SEGMENT, %eax + movl %eax, %ds + movl %eax, %es + movl %eax, %fs + movl %eax, %gs + movl %eax, %ss + + DISABLE_PAGING + +#ifdef __x86_64__ + /* Disable amd64. */ + movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx + rdmsr + andl $(~GRUB_MEMORY_CPU_AMD64_MSR_ON), %eax + wrmsr +#endif + + /* Turn off PAE. */ + movl %cr4, %eax + andl $(~GRUB_MEMORY_CPU_CR4_PAE_ON), %eax + movl %eax, %cr4 + + jmp LOCAL(cont2) +LOCAL(cont2): + .code32 + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_esp) + .long 0 + + movl %eax, %esp + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_ebp) + .long 0 + + movl %eax, %ebp + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_esi) + .long 0 + + movl %eax, %esi + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_edi) + .long 0 + + movl %eax, %edi + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator32_eax) + .long 0 + + /* mov imm32, %ebx */ + .byte 0xbb +VARIABLE(grub_relocator32_ebx) + .long 0 + + /* mov imm32, %ecx */ + .byte 0xb9 +VARIABLE(grub_relocator32_ecx) + .long 0 + + /* mov imm32, %edx */ + .byte 0xba +VARIABLE(grub_relocator32_edx) + .long 0 + + /* Cleared direction flag is of no problem with any current + payload and makes this implementation easier. */ + cld + + .byte 0xea +VARIABLE(grub_relocator32_eip) + .long 0 + .word CODE_SEGMENT + + /* GDT. Copied from loader/i386/linux.c. */ + .p2align 4 +LOCAL(gdt): + /* NULL. */ + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + /* Reserved. */ + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + /* Code segment. */ + .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x9A, 0xCF, 0x00 + + /* Data segment. */ + .byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x92, 0xCF, 0x00 +LOCAL(gdt_end): + +VARIABLE(grub_relocator32_end) diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S new file mode 100644 index 000000000..148f38adb --- /dev/null +++ b/grub-core/lib/i386/relocator64.S @@ -0,0 +1,186 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#define CODE32_SEGMENT 0x18 +#define CODE_SEGMENT 0x08 + +/* The data segment of the protected mode. */ +#define DATA_SEGMENT 0x10 + +#include "relocator_common.S" + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE(grub_relocator64_start) + PREAMBLE +#ifndef __x86_64__ + DISABLE_PAGING + + /* Turn on PAE. */ + movl %cr4, %eax + orl $(GRUB_MEMORY_CPU_CR4_PAE_ON | GRUB_MEMORY_CPU_CR4_PSE_ON), %eax + movl %eax, %cr4 + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator64_cr3) + .long 0 + movl %eax, %cr3 + + /* Turn on amd64. */ + movl $GRUB_MEMORY_CPU_AMD64_MSR, %ecx + rdmsr + orl $GRUB_MEMORY_CPU_AMD64_MSR_ON, %eax + wrmsr + + /* Enable paging. */ + movl %cr0, %eax + orl $GRUB_MEMORY_CPU_CR0_PAGING_ON, %eax + movl %eax, %cr0 + + RELOAD_GDT +#else + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_cr3) + .quad 0 + movq %rax, %cr3 +#endif + + .code64 + + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_rsp) + .quad 0 + + movq %rax, %rsp + +#ifdef GRUB_MACHINE_EFI + jmp LOCAL(skip_efi_stack_align) + + /* + * Here is grub_relocator64_efi_start() entry point. Most of the + * code below is shared between grub_relocator64_efi_start() + * and grub_relocator64_start(). + * + * Think twice before changing anything there!!! + */ +VARIABLE(grub_relocator64_efi_start) + /* Align the stack as UEFI spec requires. */ + andq $~15, %rsp + +LOCAL(skip_efi_stack_align): +#endif + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_rsi) + .quad 0 + + movq %rax, %rsi + + /* mov imm64, %rax */ + .byte 0x48 + .byte 0xb8 +VARIABLE(grub_relocator64_rax) + .quad 0 + + /* mov imm64, %rbx */ + .byte 0x48 + .byte 0xbb +VARIABLE(grub_relocator64_rbx) + .quad 0 + + /* mov imm64, %rcx */ + .byte 0x48 + .byte 0xb9 +VARIABLE(grub_relocator64_rcx) + .quad 0 + + /* mov imm64, %rdx */ + .byte 0x48 + .byte 0xba +VARIABLE(grub_relocator64_rdx) + .quad 0 + + /* Cleared direction flag is of no problem with any current + payload and makes this implementation easier. */ + cld + +#ifdef __APPLE__ + .byte 0xff, 0x25 + .quad 0 +#else + jmp *LOCAL(jump_addr) (%rip) +#endif + +LOCAL(jump_addr): +VARIABLE(grub_relocator64_rip) + .quad 0 + +#ifdef GRUB_MACHINE_EFI + /* Here grub_relocator64_efi_start() ends. Ufff... */ +VARIABLE(grub_relocator64_efi_end) +#endif + +#ifndef __x86_64__ + .p2align 4 +LOCAL(gdt): + /* NULL. */ + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + /* 64-bit segment. */ + .word 0xffff /* Limit xffff. */ + .word 0x0000 /* Base xxxx0000. */ + .byte 0x00 /* Base xx00xxxx. */ + .byte (0x8 /* Type 8. */ | (1 << 4) /* Code. */ \ + | (0 << 5) /* Ring 0. */ | (1 << 7) /* Present. */) + .byte (0xf /* Limit fxxxx. */ | (0 << 4) /* AVL flag. */ \ + | (1 << 5) /* 64-bit. */ | (0 << 6) \ + | (1 << 7) /* 4K granular. */) + .byte 0x00 /* Base 00xxxxxx. */ + + /* Data segment*/ + .word 0xffff /* Limit xffff. */ + .word 0x0000 /* Base xxxx0000. */ + .byte 0x00 /* Base xx00xxxx. */ + .byte (0x0 /* Type 0. */ | (0 << 4) /* Data. */ \ + | (0 << 5) /* Ring 0. */ | (1 << 7) /* Present. */) + .byte (0xf /* Limit fxxxx. */ | (0 << 4) /* AVL flag. */ \ + | (0 << 5) /* Data. */ | (0 << 6) \ + | (1 << 7) /* 4K granular. */) + .byte 0x00 /* Base 00xxxxxx. */ + + /* Compatibility segment. */ + .word 0xffff /* Limit xffff. */ + .word 0x0000 /* Base xxxx0000. */ + .byte 0x00 /* Base xx00xxxx. */ + .byte (0x8 /* Type 8. */ | (1 << 4) /* Code. */ \ + | (0 << 5) /* Ring 0. */ | (1 << 7) /* Present. */) + .byte (0xf /* Limit fxxxx. */ | (0 << 4) /* AVL flag. */ \ + | (0 << 5) /* 32-bit. */ | (1 << 6) /* 32-bit. */ \ + | (1 << 7) /* 4K granular. */) + .byte 0x00 /* Base 00xxxxxx. */ + +LOCAL(gdt_end): +#endif + +VARIABLE(grub_relocator64_end) diff --git a/grub-core/lib/i386/relocator_asm.S b/grub-core/lib/i386/relocator_asm.S new file mode 100644 index 000000000..f273586fe --- /dev/null +++ b/grub-core/lib/i386/relocator_asm.S @@ -0,0 +1,80 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .p2align 2 + +VARIABLE(grub_relocator_backward_start) + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_backward_dest) + .long 0 + movl %eax, %edi + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_backward_src) + .long 0 + movl %eax, %esi + + /* mov imm32, %ecx */ + .byte 0xb9 +VARIABLE(grub_relocator_backward_chunk_size) + .long 0 + + add %ecx, %esi + add %ecx, %edi + + + /* Backward movsb is implicitly off-by-one. compensate that. */ + sub $1, %esi + sub $1, %edi + + /* Backward copy. */ + std + + rep + movsb +VARIABLE(grub_relocator_backward_end) + + +VARIABLE(grub_relocator_forward_start) + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_forward_dest) + .long 0 + movl %eax, %edi + + /* mov imm32, %rax */ + .byte 0xb8 +VARIABLE(grub_relocator_forward_src) + .long 0 + movl %eax, %esi + + /* mov imm32, %ecx */ + .byte 0xb9 +VARIABLE(grub_relocator_forward_chunk_size) + .long 0 + + /* Forward copy. */ + cld + rep + movsb +VARIABLE(grub_relocator_forward_end) diff --git a/grub-core/lib/i386/relocator_common.S b/grub-core/lib/i386/relocator_common.S new file mode 100644 index 000000000..03f427a03 --- /dev/null +++ b/grub-core/lib/i386/relocator_common.S @@ -0,0 +1,113 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include +#include + +#ifdef __x86_64__ +#define RAX %rax +#define RSI %rsi +#else +#define RAX %eax +#define RSI %esi +#endif + + .macro DISABLE_PAGING +#ifdef GRUB_MACHINE_IEEE1275 +#endif + + movl %cr0, %eax + andl $(~GRUB_MEMORY_CPU_CR0_PAGING_ON), %eax + movl %eax, %cr0 + .endm + + .macro PREAMBLE +LOCAL(base): + /* %rax contains now our new 'base'. */ + mov RAX, RSI + +#if defined (__APPLE__) && defined (__x86_64__) + leaq LOCAL(cont0) (%rip), RAX +#elif defined (__APPLE__) + LOCAL(cont0_offset) = LOCAL(cont0) - LOCAL(base) + add $LOCAL(cont0_offset), RAX +#else + add $(LOCAL(cont0) - LOCAL(base)), RAX +#endif + jmp *RAX +LOCAL(cont0): + .endm + + .macro RELOAD_GDT +#ifdef __APPLE__ + LOCAL(cont1_offset) = LOCAL(cont1) - LOCAL(base) + LOCAL(jump_vector_offset) = LOCAL(jump_vector) - LOCAL(base) + LOCAL(gdt_offset) = LOCAL(gdt) - LOCAL(base) + LOCAL(gdt_addr_offset) = LOCAL(gdt_addr) - LOCAL(base) + LOCAL(gdtdesc_offset) = LOCAL(gdtdesc) - LOCAL(base) + + lea LOCAL(cont1_offset) (RSI, 1), RAX + movl %eax, LOCAL(jump_vector_offset) (RSI, 1) + + lea LOCAL(gdt_offset) (RSI, 1), RAX + mov RAX, (LOCAL(gdt_addr_offset)) (RSI, 1) + + /* Switch to compatibility mode. */ + lgdt (LOCAL(gdtdesc_offset)) (RSI, 1) + + /* Update %cs. */ + ljmp *(LOCAL(jump_vector_offset)) (RSI, 1) + .p2align 4 +LOCAL(gdtdesc): + LOCAL(gdtsize) = LOCAL(gdt_end) - LOCAL(gdt) + .word LOCAL(gdtsize) +#else + lea (LOCAL(cont1) - LOCAL(base)) (RSI, 1), RAX + movl %eax, (LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + + lea (LOCAL(gdt) - LOCAL(base)) (RSI, 1), RAX + mov RAX, (LOCAL(gdt_addr) - LOCAL(base)) (RSI, 1) + + /* Switch to compatibility mode. */ + lgdt (LOCAL(gdtdesc) - LOCAL(base)) (RSI, 1) + + /* Update %cs. */ + ljmp *(LOCAL(jump_vector) - LOCAL(base)) (RSI, 1) + + .p2align 4 +LOCAL(gdtdesc): + .word LOCAL(gdt_end) - LOCAL(gdt) +#endif +LOCAL(gdt_addr): +#ifdef __x86_64__ + /* Filled by the code. */ + .quad 0 +#else + /* Filled by the code. */ + .long 0 +#endif + + .p2align 4 +LOCAL(jump_vector): + /* Jump location. Is filled by the code */ + .long 0 + .long CODE_SEGMENT + +LOCAL(cont1): + .endm diff --git a/grub-core/lib/i386/relocator_common_c.c b/grub-core/lib/i386/relocator_common_c.c new file mode 100644 index 000000000..7be609b73 --- /dev/null +++ b/grub-core/lib/i386/relocator_common_c.c @@ -0,0 +1,109 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009-2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#include +#include +#include + +#include +#include + +extern grub_uint8_t grub_relocator_forward_start; +extern grub_uint8_t grub_relocator_forward_end; +extern grub_uint8_t grub_relocator_backward_start; +extern grub_uint8_t grub_relocator_backward_end; + +extern void *grub_relocator_backward_dest; +extern void *grub_relocator_backward_src; +extern grub_size_t grub_relocator_backward_chunk_size; + +extern void *grub_relocator_forward_dest; +extern void *grub_relocator_forward_src; +extern grub_size_t grub_relocator_forward_chunk_size; + +#define RELOCATOR_SIZEOF(x) (&grub_relocator##x##_end - &grub_relocator##x##_start) + +grub_size_t grub_relocator_align = 1; +grub_size_t grub_relocator_forward_size; +grub_size_t grub_relocator_backward_size; +#ifdef __x86_64__ +grub_size_t grub_relocator_jumper_size = 12; +#else +grub_size_t grub_relocator_jumper_size = 7; +#endif + +void +grub_cpu_relocator_init (void) +{ + grub_relocator_forward_size = RELOCATOR_SIZEOF (_forward); + grub_relocator_backward_size = RELOCATOR_SIZEOF (_backward); +} + +void +grub_cpu_relocator_jumper (void *rels, grub_addr_t addr) +{ + grub_uint8_t *ptr; + ptr = rels; +#ifdef __x86_64__ + /* movq imm64, %rax (for relocator) */ + *(grub_uint8_t *) ptr = 0x48; + ptr++; + *(grub_uint8_t *) ptr = 0xb8; + ptr++; + *(grub_uint64_t *) ptr = addr; + ptr += sizeof (grub_uint64_t); +#else + /* movl imm32, %eax (for relocator) */ + *(grub_uint8_t *) ptr = 0xb8; + ptr++; + *(grub_uint32_t *) ptr = addr; + ptr += sizeof (grub_uint32_t); +#endif + /* jmp $eax/$rax */ + *(grub_uint8_t *) ptr = 0xff; + ptr++; + *(grub_uint8_t *) ptr = 0xe0; + ptr++; +} + +void +grub_cpu_relocator_backward (void *ptr, void *src, void *dest, + grub_size_t size) +{ + grub_relocator_backward_dest = dest; + grub_relocator_backward_src = src; + grub_relocator_backward_chunk_size = size; + + grub_memmove (ptr, + &grub_relocator_backward_start, RELOCATOR_SIZEOF (_backward)); +} + +void +grub_cpu_relocator_forward (void *ptr, void *src, void *dest, + grub_size_t size) +{ + grub_relocator_forward_dest = dest; + grub_relocator_forward_src = src; + grub_relocator_forward_chunk_size = size; + + grub_memmove (ptr, + &grub_relocator_forward_start, RELOCATOR_SIZEOF (_forward)); +} diff --git a/grub-core/lib/i386/setjmp.S b/grub-core/lib/i386/setjmp.S new file mode 100644 index 000000000..0b0740f11 --- /dev/null +++ b/grub-core/lib/i386/setjmp.S @@ -0,0 +1,59 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + + .file "setjmp.S" + +GRUB_MOD_LICENSE "GPLv3+" + + .text + +/* + * int grub_setjmp (grub_jmp_buf env) + */ +FUNCTION(grub_setjmp) + movl %ebx, 0(%eax) /* EBX */ + movl %esi, 4(%eax) /* ESI */ + movl %edi, 8(%eax) /* EDI */ + movl %ebp, 12(%eax) /* EBP */ + popl %ecx + movl %esp, 16(%eax) /* ESP */ + movl %ecx, 20(%eax) /* EIP */ + xorl %eax, %eax + jmp *%ecx + + +/* + * int grub_longjmp (grub_jmp_buf env, int val) + */ +FUNCTION(grub_longjmp) + movl 0(%eax), %ebx + movl 4(%eax), %esi + movl 8(%eax), %edi + movl 12(%eax), %ebp + movl 16(%eax), %esp + movl 20(%eax), %ecx + + movl %edx, %eax + testl %eax, %eax + jnz 1f + incl %eax +1: jmp *%ecx + diff --git a/grub-core/lib/i386/xen/relocator.S b/grub-core/lib/i386/xen/relocator.S new file mode 100644 index 000000000..96e51b59a --- /dev/null +++ b/grub-core/lib/i386/xen/relocator.S @@ -0,0 +1,165 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + + .p2align 4 /* force 16-byte alignment */ + +VARIABLE(grub_relocator_xen_remap_start) +LOCAL(base): + /* Remap the remapper to it's new address. */ + /* mov imm32, %ebx - %ebx: new virtual address of remapper */ + .byte 0xbb +VARIABLE(grub_relocator_xen_remapper_virt) + .long 0 + + /* mov imm32, %ecx - %ecx: low part of page table entry */ + .byte 0xb9 +VARIABLE(grub_relocator_xen_remapper_map) + .long 0 + + /* mov imm32, %edx - %edx: high part of page table entry */ + .byte 0xba +VARIABLE(grub_relocator_xen_remapper_map_high) + .long 0 + + movl %ebx, %ebp /* %ebx is clobbered by hypercall */ + + movl $UVMF_INVLPG, %esi /* esi: flags (inv. single entry) */ + movl $__HYPERVISOR_update_va_mapping, %eax + int $0x82 + + movl %ebp, %ebx + addl $(LOCAL(cont) - LOCAL(base)), %ebx + + jmp *%ebx /* Continue with new virtual address */ + +LOCAL(cont): + /* Modify mappings of new page tables to be read-only. */ + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_xen_paging_areas_addr) + .long 0 + movl %eax, %ebx +1: + movl 0(%ebx), %ebp /* Get start pfn of the current area */ + movl GRUB_TARGET_SIZEOF_LONG(%ebx), %ecx /* Get # of pg tables */ + testl %ecx, %ecx /* 0 -> last area reached */ + jz 3f + addl $(2 * GRUB_TARGET_SIZEOF_LONG), %ebx + movl %ebx, %esp /* Save current area pointer */ + +2: + movl %ecx, %edi + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_xen_mfn_list) + .long 0 + movl 0(%eax, %ebp, 4), %ecx /* mfn */ + movl %ebp, %ebx + shll $PAGE_SHIFT, %ebx /* virtual address (1:1 mapping) */ + movl %ecx, %edx + shll $PAGE_SHIFT, %ecx /* prepare pte low part */ + shrl $(32 - PAGE_SHIFT), %edx /* pte high part */ + orl $(GRUB_PAGE_PRESENT | GRUB_PAGE_USER), %ecx /* pte low */ + movl $UVMF_INVLPG, %esi + movl $__HYPERVISOR_update_va_mapping, %eax + int $0x82 /* parameters: eax, ebx, ecx, edx, esi */ + + incl %ebp /* next pfn */ + movl %edi, %ecx + + loop 2b + + mov %esp, %ebx /* restore area poniter */ + jmp 1b + +3: + /* Switch page tables: pin new L3 pt, load cr3, unpin old L3. */ + /* mov imm32, %ebx */ + .byte 0xbb +VARIABLE(grub_relocator_xen_mmu_op_addr) + .long 0 + movl $3, %ecx /* 3 mmu ops */ + movl $0, %edx /* pdone (not used) */ + movl $DOMID_SELF, %esi + movl $__HYPERVISOR_mmuext_op, %eax + int $0x82 + + /* Continue in virtual kernel mapping. */ + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_xen_remap_continue) + .long 0 + + jmp *%eax + +VARIABLE(grub_relocator_xen_paging_areas) + .long 0, 0, 0, 0, 0, 0, 0, 0 + +VARIABLE(grub_relocator_xen_mmu_op) + .space 256 + +VARIABLE(grub_relocator_xen_remap_end) + + +VARIABLE(grub_relocator_xen_start) + /* Unmap old remapper area. */ + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_xen_remapper_virt2) + .long 0 + + movl %eax, %ebx + + xorl %ecx, %ecx /* Invalid pte */ + xorl %edx, %edx + + movl $UVMF_INVLPG, %esi + movl $__HYPERVISOR_update_va_mapping, %eax + int $0x82 + + /* Prepare registers for starting kernel. */ + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_xen_stack) + .long 0 + + movl %eax, %esp + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_xen_start_info) + .long 0 + + movl %eax, %esi + + cld + + /* mov imm32, %eax */ + .byte 0xb8 +VARIABLE(grub_relocator_xen_entry_point) + .long 0 + + /* Now start the new kernel. */ + jmp *%eax + +VARIABLE(grub_relocator_xen_end) diff --git a/grub-core/lib/ia64/longjmp.S b/grub-core/lib/ia64/longjmp.S new file mode 100644 index 000000000..38afb2243 --- /dev/null +++ b/grub-core/lib/ia64/longjmp.S @@ -0,0 +1,162 @@ +/* Copyright (C) 1999, 2000, 2001, 2002, 2008 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. + + Note that __sigsetjmp() did NOT flush the register stack. Instead, + we do it here since __longjmp() is usually much less frequently + invoked than __sigsetjmp(). The only difficulty is that __sigsetjmp() + didn't (and wouldn't be able to) save ar.rnat either. This is a problem + because if we're not careful, we could end up loading random NaT bits. + There are two cases: + + (i) ar.bsp < ia64_rse_rnat_addr(jmpbuf.ar_bsp) + ar.rnat contains the desired bits---preserve ar.rnat + across loadrs and write to ar.bspstore + + (ii) ar.bsp >= ia64_rse_rnat_addr(jmpbuf.ar_bsp) + The desired ar.rnat is stored in + ia64_rse_rnat_addr(jmpbuf.ar_bsp). Load those + bits into ar.rnat after setting ar.bspstore. */ + + + +# define pPos p6 /* is rotate count positive? */ +# define pNeg p7 /* is rotate count negative? */ + + + /* __longjmp(__jmp_buf buf, int val) */ + + .text + + .proc EXT_C(grub_longjmp) +FUNCTION(grub_longjmp) + alloc r8=ar.pfs,2,1,0,0 + mov r27=ar.rsc + add r2=0x98,in0 // r2 <- &jmpbuf.orig_jmp_buf_addr + ;; + ld8 r8=[r2],-16 // r8 <- orig_jmp_buf_addr + mov r10=ar.bsp + and r11=~0x3,r27 // clear ar.rsc.mode + ;; + flushrs // flush dirty regs to backing store (must be first in insn grp) + ld8 r23=[r2],8 // r23 <- jmpbuf.ar_bsp + sub r8=r8,in0 // r8 <- &orig_jmpbuf - &jmpbuf + ;; + ld8 r25=[r2] // r25 <- jmpbuf.ar_unat + extr.u r8=r8,3,6 // r8 <- (&orig_jmpbuf - &jmpbuf)/8 & 0x3f + ;; + cmp.lt pNeg,pPos=r8,r0 + mov r2=in0 + ;; +(pPos) mov r16=r8 +(pNeg) add r16=64,r8 +(pPos) sub r17=64,r8 +(pNeg) sub r17=r0,r8 + ;; + mov ar.rsc=r11 // put RSE in enforced lazy mode + shr.u r8=r25,r16 + add r3=8,in0 // r3 <- &jmpbuf.r1 + shl r9=r25,r17 + ;; + or r25=r8,r9 + ;; + mov r26=ar.rnat + mov ar.unat=r25 // setup ar.unat (NaT bits for r1, r4-r7, and r12) + ;; + ld8.fill.nta sp=[r2],16 // r12 (sp) + ld8.fill.nta gp=[r3],16 // r1 (gp) + dep r11=-1,r23,3,6 // r11 <- ia64_rse_rnat_addr(jmpbuf.ar_bsp) + ;; + ld8.nta r16=[r2],16 // caller's unat + ld8.nta r17=[r3],16 // fpsr + ;; + ld8.fill.nta r4=[r2],16 // r4 + ld8.fill.nta r5=[r3],16 // r5 (gp) + cmp.geu p8,p0=r10,r11 // p8 <- (ar.bsp >= jmpbuf.ar_bsp) + ;; + ld8.fill.nta r6=[r2],16 // r6 + ld8.fill.nta r7=[r3],16 // r7 + ;; + mov ar.unat=r16 // restore caller's unat + mov ar.fpsr=r17 // restore fpsr + ;; + ld8.nta r16=[r2],16 // b0 + ld8.nta r17=[r3],16 // b1 + ;; +(p8) ld8 r26=[r11] // r26 <- *ia64_rse_rnat_addr(jmpbuf.ar_bsp) + mov ar.bspstore=r23 // restore ar.bspstore + ;; + ld8.nta r18=[r2],16 // b2 + ld8.nta r19=[r3],16 // b3 + ;; + ld8.nta r20=[r2],16 // b4 + ld8.nta r21=[r3],16 // b5 + ;; + ld8.nta r11=[r2],16 // ar.pfs + ld8.nta r22=[r3],56 // ar.lc + ;; + ld8.nta r24=[r2],32 // pr + mov b0=r16 + ;; + ldf.fill.nta f2=[r2],32 + ldf.fill.nta f3=[r3],32 + mov b1=r17 + ;; + ldf.fill.nta f4=[r2],32 + ldf.fill.nta f5=[r3],32 + mov b2=r18 + ;; + ldf.fill.nta f16=[r2],32 + ldf.fill.nta f17=[r3],32 + mov b3=r19 + ;; + ldf.fill.nta f18=[r2],32 + ldf.fill.nta f19=[r3],32 + mov b4=r20 + ;; + ldf.fill.nta f20=[r2],32 + ldf.fill.nta f21=[r3],32 + mov b5=r21 + ;; + ldf.fill.nta f22=[r2],32 + ldf.fill.nta f23=[r3],32 + mov ar.lc=r22 + ;; + ldf.fill.nta f24=[r2],32 + ldf.fill.nta f25=[r3],32 + cmp.eq p8,p9=0,in1 + ;; + ldf.fill.nta f26=[r2],32 + ldf.fill.nta f27=[r3],32 + mov ar.pfs=r11 + ;; + ldf.fill.nta f28=[r2],32 + ldf.fill.nta f29=[r3],32 + ;; + ldf.fill.nta f30=[r2] + ldf.fill.nta f31=[r3] +(p8) mov r8=1 + + mov ar.rnat=r26 // restore ar.rnat + ;; + mov ar.rsc=r27 // restore ar.rsc +(p9) mov r8=in1 + + invala // virt. -> phys. regnum mapping may change + mov pr=r24,-1 + br.ret.dptk.few rp + .endp EXT_C(grub_longjmp) diff --git a/grub-core/lib/ia64/setjmp.S b/grub-core/lib/ia64/setjmp.S new file mode 100644 index 000000000..a0382d83d --- /dev/null +++ b/grub-core/lib/ia64/setjmp.S @@ -0,0 +1,177 @@ +/* Copyright (C) 1999, 2000, 2001, 2002, 2008 Free Software Foundation, Inc. + Contributed by David Mosberger-Tang . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. + + The layout of the jmp_buf is as follows. This is subject to change + and user-code should never depend on the particular layout of + jmp_buf! + + + offset: description: + ------- ------------ + 0x000 stack pointer (r12) ; unchangeable (see _JMPBUF_UNWINDS) + 0x008 r1 (gp) + 0x010 caller's unat + 0x018 fpsr + 0x020 r4 + 0x028 r5 + 0x030 r6 + 0x038 r7 + 0x040 rp (b0) + 0x048 b1 + 0x050 b2 + 0x058 b3 + 0x060 b4 + 0x068 b5 + 0x070 ar.pfs + 0x078 ar.lc + 0x080 pr + 0x088 ar.bsp ; unchangeable (see __longjmp.S) + 0x090 ar.unat + 0x098 &__jmp_buf ; address of the jmpbuf (needed to locate NaT bits in unat) + 0x0a0 f2 + 0x0b0 f3 + 0x0c0 f4 + 0x0d0 f5 + 0x0e0 f16 + 0x0f0 f17 + 0x100 f18 + 0x110 f19 + 0x120 f20 + 0x130 f21 + 0x130 f22 + 0x140 f23 + 0x150 f24 + 0x160 f25 + 0x170 f26 + 0x180 f27 + 0x190 f28 + 0x1a0 f29 + 0x1b0 f30 + 0x1c0 f31 */ + +#include +#include + + .file "setjmp.S" + +GRUB_MOD_LICENSE "GPLv2+" + + /* The following two entry points are the traditional entry points: */ + + .text + + .proc EXT_C(grub_setjmp) +FUNCTION(grub_setjmp) + alloc r8=ar.pfs,2,0,0,0 + mov in1=1 + br.cond.sptk.many __sigsetjmp + .endp EXT_C(grub_setjmp) + + /* __sigsetjmp(__jmp_buf buf, int savemask) */ + + .proc __sigsetjmp +__sigsetjmp: + //.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) + alloc loc1=ar.pfs,2,2,2,0 + mov r16=ar.unat + ;; + mov r17=ar.fpsr + mov r2=in0 + add r3=8,in0 + ;; + st8.spill.nta [r2]=sp,16 // r12 (sp) + st8.spill.nta [r3]=gp,16 // r1 (gp) + ;; + st8.nta [r2]=r16,16 // save caller's unat + st8.nta [r3]=r17,16 // save fpsr + add r8=0xa0,in0 + ;; + st8.spill.nta [r2]=r4,16 // r4 + st8.spill.nta [r3]=r5,16 // r5 + add r9=0xb0,in0 + ;; + stf.spill.nta [r8]=f2,32 + stf.spill.nta [r9]=f3,32 + mov loc0=rp + .body + ;; + stf.spill.nta [r8]=f4,32 + stf.spill.nta [r9]=f5,32 + mov r17=b1 + ;; + stf.spill.nta [r8]=f16,32 + stf.spill.nta [r9]=f17,32 + mov r18=b2 + ;; + stf.spill.nta [r8]=f18,32 + stf.spill.nta [r9]=f19,32 + mov r19=b3 + ;; + stf.spill.nta [r8]=f20,32 + stf.spill.nta [r9]=f21,32 + mov r20=b4 + ;; + stf.spill.nta [r8]=f22,32 + stf.spill.nta [r9]=f23,32 + mov r21=b5 + ;; + stf.spill.nta [r8]=f24,32 + stf.spill.nta [r9]=f25,32 + mov r22=ar.lc + ;; + stf.spill.nta [r8]=f26,32 + stf.spill.nta [r9]=f27,32 + mov r24=pr + ;; + stf.spill.nta [r8]=f28,32 + stf.spill.nta [r9]=f29,32 + ;; + stf.spill.nta [r8]=f30 + stf.spill.nta [r9]=f31 + + st8.spill.nta [r2]=r6,16 // r6 + st8.spill.nta [r3]=r7,16 // r7 + ;; + mov r23=ar.bsp + mov r25=ar.unat + mov out0=in0 + + st8.nta [r2]=loc0,16 // b0 + st8.nta [r3]=r17,16 // b1 + mov out1=in1 + ;; + st8.nta [r2]=r18,16 // b2 + st8.nta [r3]=r19,16 // b3 + ;; + st8.nta [r2]=r20,16 // b4 + st8.nta [r3]=r21,16 // b5 + ;; + st8.nta [r2]=loc1,16 // ar.pfs + st8.nta [r3]=r22,16 // ar.lc + ;; + st8.nta [r2]=r24,16 // pr + st8.nta [r3]=r23,16 // ar.bsp + ;; + st8.nta [r2]=r25 // ar.unat + st8.nta [r3]=in0 // &__jmp_buf + mov r8=0 + mov rp=loc0 + mov ar.pfs=loc1 + br.ret.sptk.many rp + + .endp __sigsetjmp diff --git a/grub-core/lib/ieee1275/cmos.c b/grub-core/lib/ieee1275/cmos.c new file mode 100644 index 000000000..328d70a0c --- /dev/null +++ b/grub-core/lib/ieee1275/cmos.c @@ -0,0 +1,77 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +volatile grub_uint8_t *grub_cmos_port = 0; + +/* Helper for grub_cmos_find_port. */ +static int +grub_cmos_find_port_iter (struct grub_ieee1275_devalias *alias) +{ + grub_ieee1275_phandle_t dev; + grub_uint32_t addr[2]; + grub_ssize_t actual; + /* Enough to check if it's "m5819" */ + char compat[100]; + if (grub_ieee1275_finddevice (alias->path, &dev)) + return 0; + if (grub_ieee1275_get_property (dev, "compatible", compat, sizeof (compat), + 0)) + return 0; + if (grub_strcmp (compat, "m5819") != 0) + return 0; + if (grub_ieee1275_get_integer_property (dev, "address", + addr, sizeof (addr), &actual)) + return 0; + if (actual == 4) + { + grub_cmos_port = (volatile grub_uint8_t *) (grub_addr_t) addr[0]; + return 1; + } + +#if GRUB_CPU_SIZEOF_VOID_P == 8 + if (actual == 8) + { + grub_cmos_port = (volatile grub_uint8_t *) + ((((grub_addr_t) addr[0]) << 32) | addr[1]); + return 1; + } +#else + if (actual == 8 && addr[0] == 0) + { + grub_cmos_port = (volatile grub_uint8_t *) addr[1]; + return 1; + } +#endif + return 0; +} + +grub_err_t +grub_cmos_find_port (void) +{ + grub_ieee1275_devices_iterate (grub_cmos_find_port_iter); + if (!grub_cmos_port) + return grub_error (GRUB_ERR_IO, "no cmos found"); + + return GRUB_ERR_NONE; +} diff --git a/grub-core/lib/ieee1275/datetime.c b/grub-core/lib/ieee1275/datetime.c new file mode 100644 index 000000000..b81fba2ed --- /dev/null +++ b/grub-core/lib/ieee1275/datetime.c @@ -0,0 +1,156 @@ +/* kern/cmos_datetime.c - CMOS datetime function. + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#if defined (__powerpc__) || defined (__sparc__) +#include +#endif + +GRUB_MOD_LICENSE ("GPLv3+"); + +static char *rtc = 0; +static int no_ieee1275_rtc = 0; + +/* Helper for find_rtc. */ +static int +find_rtc_iter (struct grub_ieee1275_devalias *alias) +{ + if (grub_strcmp (alias->type, "rtc") == 0) + { + grub_dprintf ("datetime", "Found RTC %s\n", alias->path); + rtc = grub_strdup (alias->path); + return 1; + } + return 0; +} + +static void +find_rtc (void) +{ + grub_ieee1275_devices_iterate (find_rtc_iter); + if (!rtc) + no_ieee1275_rtc = 1; +} + +grub_err_t +grub_get_datetime (struct grub_datetime *datetime) +{ + struct get_time_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t device; + grub_ieee1275_cell_t catch_result; + grub_ieee1275_cell_t year; + grub_ieee1275_cell_t month; + grub_ieee1275_cell_t day; + grub_ieee1275_cell_t hour; + grub_ieee1275_cell_t minute; + grub_ieee1275_cell_t second; + } + args; + int status; + grub_ieee1275_ihandle_t ihandle; + + if (no_ieee1275_rtc) + return grub_get_datetime_cmos (datetime); + if (!rtc) + find_rtc (); + if (!rtc) + return grub_get_datetime_cmos (datetime); + + status = grub_ieee1275_open (rtc, &ihandle); + if (status == -1) + return grub_error (GRUB_ERR_IO, "couldn't open RTC"); + + INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 7); + args.device = (grub_ieee1275_cell_t) ihandle; + args.method = (grub_ieee1275_cell_t) "get-time"; + + status = IEEE1275_CALL_ENTRY_FN (&args); + + grub_ieee1275_close (ihandle); + + if (status == -1 || args.catch_result) + return grub_error (GRUB_ERR_IO, "get-time failed"); + + datetime->year = args.year; + datetime->month = args.month; + datetime->day = args.day + 1; + datetime->hour = args.hour; + datetime->minute = args.minute; + datetime->second = args.second; + + return GRUB_ERR_NONE; +} + +grub_err_t +grub_set_datetime (struct grub_datetime *datetime) +{ + struct set_time_args + { + struct grub_ieee1275_common_hdr common; + grub_ieee1275_cell_t method; + grub_ieee1275_cell_t device; + grub_ieee1275_cell_t year; + grub_ieee1275_cell_t month; + grub_ieee1275_cell_t day; + grub_ieee1275_cell_t hour; + grub_ieee1275_cell_t minute; + grub_ieee1275_cell_t second; + grub_ieee1275_cell_t catch_result; + } + args; + int status; + grub_ieee1275_ihandle_t ihandle; + + if (no_ieee1275_rtc) + return grub_set_datetime_cmos (datetime); + if (!rtc) + find_rtc (); + if (!rtc) + return grub_set_datetime_cmos (datetime); + + status = grub_ieee1275_open (rtc, &ihandle); + if (status == -1) + return grub_error (GRUB_ERR_IO, "couldn't open RTC"); + + INIT_IEEE1275_COMMON (&args.common, "call-method", 8, 1); + args.device = (grub_ieee1275_cell_t) ihandle; + args.method = (grub_ieee1275_cell_t) "set-time"; + + args.year = datetime->year; + args.month = datetime->month; + args.day = datetime->day - 1; + args.hour = datetime->hour; + args.minute = datetime->minute; + args.second = datetime->second; + + status = IEEE1275_CALL_ENTRY_FN (&args); + + grub_ieee1275_close (ihandle); + + if (status == -1 || args.catch_result) + return grub_error (GRUB_ERR_IO, "set-time failed"); + + return GRUB_ERR_NONE; +} diff --git a/grub-core/lib/ieee1275/halt.c b/grub-core/lib/ieee1275/halt.c new file mode 100644 index 000000000..8fc16d243 --- /dev/null +++ b/grub-core/lib/ieee1275/halt.c @@ -0,0 +1,33 @@ +/* openfw.c -- Open firmware support functions. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +void +grub_halt (void) +{ + /* Not standardized. We try three known commands. */ + + grub_ieee1275_interpret ("power-off", 0); + grub_ieee1275_interpret ("shut-down", 0); + grub_ieee1275_interpret ("poweroff", 0); + + while (1); +} diff --git a/grub-core/lib/ieee1275/reboot.c b/grub-core/lib/ieee1275/reboot.c new file mode 100644 index 000000000..91c8779f2 --- /dev/null +++ b/grub-core/lib/ieee1275/reboot.c @@ -0,0 +1,27 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +void +grub_reboot (void) +{ + grub_ieee1275_interpret ("reset-all", 0); + for (;;) ; +} diff --git a/grub-core/lib/ieee1275/relocator.c b/grub-core/lib/ieee1275/relocator.c new file mode 100644 index 000000000..c6dd8facb --- /dev/null +++ b/grub-core/lib/ieee1275/relocator.c @@ -0,0 +1,114 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +/* Helper for grub_relocator_firmware_get_max_events. */ +static int +count (grub_uint64_t addr __attribute__ ((unused)), + grub_uint64_t len __attribute__ ((unused)), + grub_memory_type_t type __attribute__ ((unused)), void *data) +{ + int *counter = data; + + (*counter)++; + return 0; +} + +unsigned +grub_relocator_firmware_get_max_events (void) +{ + int counter = 0; + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_FORCE_CLAIM)) + return 0; + grub_machine_mmap_iterate (count, &counter); + return 2 * counter; +} + +/* Context for grub_relocator_firmware_fill_events. */ +struct grub_relocator_firmware_fill_events_ctx +{ + struct grub_relocator_mmap_event *events; + int counter; +}; + +/* Helper for grub_relocator_firmware_fill_events. */ +static int +grub_relocator_firmware_fill_events_iter (grub_uint64_t addr, + grub_uint64_t len, + grub_memory_type_t type, void *data) +{ + struct grub_relocator_firmware_fill_events_ctx *ctx = data; + + if (type != GRUB_MEMORY_AVAILABLE) + return 0; + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM)) + { + if (addr + len <= 0x180000) + return 0; + + if (addr < 0x180000) + { + len = addr + len - 0x180000; + addr = 0x180000; + } + } + + ctx->events[ctx->counter].type = REG_FIRMWARE_START; + ctx->events[ctx->counter].pos = addr; + ctx->counter++; + ctx->events[ctx->counter].type = REG_FIRMWARE_END; + ctx->events[ctx->counter].pos = addr + len; + ctx->counter++; + + return 0; +} + +unsigned +grub_relocator_firmware_fill_events (struct grub_relocator_mmap_event *events) +{ + struct grub_relocator_firmware_fill_events_ctx ctx = { + .events = events, + .counter = 0 + }; + + if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_FORCE_CLAIM)) + return 0; + grub_machine_mmap_iterate (grub_relocator_firmware_fill_events_iter, &ctx); + return ctx.counter; +} + +int +grub_relocator_firmware_alloc_region (grub_addr_t start, grub_size_t size) +{ + grub_err_t err; + err = grub_claimmap (start, size); + grub_errno = 0; + return (err == 0); +} + +void +grub_relocator_firmware_free_region (grub_addr_t start, grub_size_t size) +{ + grub_ieee1275_release (start, size); +} diff --git a/grub-core/lib/legacy_parse.c b/grub-core/lib/legacy_parse.c new file mode 100644 index 000000000..ef56150ac --- /dev/null +++ b/grub-core/lib/legacy_parse.c @@ -0,0 +1,875 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2010,2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +struct legacy_command +{ + const char *name; + const char *map; + const char *suffix; + unsigned suffixarg; + unsigned argc; + enum arg_type { + TYPE_VERBATIM, + TYPE_FORCE_OPTION, + TYPE_NOAPM_OPTION, + TYPE_TYPE_OR_NOMEM_OPTION, + TYPE_OPTION, + TYPE_FILE, + TYPE_FILE_NO_CONSUME, + TYPE_PARTITION, + TYPE_BOOL, + TYPE_INT, + TYPE_REST_VERBATIM, + TYPE_VBE_MODE, + TYPE_WITH_CONFIGFILE_OPTION + } argt[4]; + enum { + FLAG_IGNORE_REST = 0x001, + FLAG_FALLBACK_AVAILABLE = 0x004, + FLAG_FALLBACK = 0x008, + FLAG_COLOR_INVERT = 0x010, + FLAG_NO_MENUENTRY = 0x020, + FLAG_MENUENTRY_ONLY = 0x040, + FLAG_TERMINAL = 0x080, + FLAG_TITLE = 0x100, + } flags; + const char *shortdesc; + const char *longdesc; +}; + +/* Help texts are kept here mostly for reference. They are never shown. So + no need to gettextize. + */ +static struct legacy_command legacy_commands[] = + { + /* FIXME: background unsupported. */ + {"blocklist", "blocklist '%s'\n", NULL, 0, 1, {TYPE_FILE}, 0, "FILE", + "Print the blocklist notation of the file FILE."}, + {"boot", "boot\n", NULL, 0, 0, {}, 0, 0, + "Boot the OS/chain-loader which has been loaded."}, + {"bootp", "net_bootp; net_ls_addr; echo $\"" N_("Default server is ${net_default_server}") "\"; if [ x%s = x--with-configfile ]; then " + "if net_get_dhcp_option configfile_name pxe 150 string; then " + "configfile $configfile_name; fi; fi\n", NULL, 0, 1, + {TYPE_WITH_CONFIGFILE_OPTION}, FLAG_IGNORE_REST, "[--with-configfile]", + "Initialize a network device via BOOTP. If the option `--with-configfile'" + " is given, try to load a configuration file specified by the 150 vendor" + " tag."}, + /* FIXME: border unsupported. */ + {"cat", "cat '%s'\n", NULL, 0, 1, {TYPE_FILE}, 0, "FILE", + "Print the contents of the file FILE."}, + {"chainloader", "chainloader %s '%s'\n", NULL, 0, + 2, {TYPE_FORCE_OPTION, TYPE_FILE}, 0, "[--force] FILE", + "Load the chain-loader FILE. If --force is specified, then load it" + " forcibly, whether the boot loader signature is present or not."}, + {"clear", "clear\n", NULL, 0, 0, {}, 0, 0, + "Clear the screen."}, + {"cmp", "cmp '%s' '%s'\n", NULL, 0, + 2, {TYPE_FILE, TYPE_FILE}, FLAG_IGNORE_REST, "FILE1 FILE2", + "Compare the file FILE1 with the FILE2 and inform the different values" + " if any."}, + {"color", "set color_normal='%s'; set color_highlight='%s'\n", NULL, 0, + 2, {TYPE_VERBATIM, TYPE_VERBATIM}, + FLAG_IGNORE_REST | FLAG_FALLBACK_AVAILABLE, "NORMAL [HIGHLIGHT]", + "Change the menu colors. The color NORMAL is used for most" + " lines in the menu, and the color HIGHLIGHT is used to highlight the" + " line where the cursor points. If you omit HIGHLIGHT, then the" + " inverted color of NORMAL is used for the highlighted line." + " The format of a color is \"FG/BG\". FG and BG are symbolic color names." + " A symbolic color name must be one of these: black, blue, green," + " cyan, red, magenta, brown, light-gray, dark-gray, light-blue," + " light-green, light-cyan, light-red, light-magenta, yellow and white." + " But only the first eight names can be used for BG. You can prefix" + " \"blink-\" to FG if you want a blinking foreground color."}, + {"color", "set color_normal='%s'; set color_highlight='%s'\n", NULL, 0, + 1, {TYPE_VERBATIM}, + FLAG_IGNORE_REST | FLAG_FALLBACK | FLAG_COLOR_INVERT, NULL, NULL}, + {"configfile", "legacy_configfile '%s'\n", NULL, 0, 1, {TYPE_FILE}, + 0, "FILE", "Load FILE as the configuration file."}, + {"debug", + "if [ -z \"$debug\" ]; then set debug=all; else set debug=; fi\n", NULL, 0, + 0, {}, 0, 0, "Turn on/off the debug mode."}, + {"default", + "set default='%s'; if [ x\"$default\" = xsaved ]; then load_env; " + "set default=\"$saved_entry\"; fi\n", NULL, 0, 1, {TYPE_VERBATIM}, 0, + "[NUM | `saved']", + "Set the default entry to entry number NUM (if not specified, it is" + " 0, the first entry) or the entry number saved by savedefault."}, + {"dhcp", "net_bootp; net_ls_addr; if [ x%s = x--with-configfile ]; then " + "if net_get_dhcp_option configfile_name pxe 150 string; then " + "configfile $configfile_name; fi; fi\n", NULL, 0, 1, + {TYPE_WITH_CONFIGFILE_OPTION}, FLAG_IGNORE_REST, "[--with-configfile]", + "Initialize a network device via BOOTP. If the option `--with-configfile'" + " is given, try to load a configuration file specified by the 150 vendor" + " tag."}, + {"displayapm", "lsapm\n", NULL, 0, 0, {}, 0, 0, + "Display APM BIOS information."}, + {"displaymem", "lsmmap\n", NULL, 0, 0, {}, 0, 0, + "Display what GRUB thinks the system address space map of the" + " machine is, including all regions of physical RAM installed."}, + /* FIXME: device and efimap unsupported. */ + /* NOTE: embed unsupported. */ + {"fallback", "set fallback='%s'\n", NULL, 0, + 1, {TYPE_VERBATIM}, 0, "NUM...", + "Go into unattended boot mode: if the default boot entry has any" + " errors, instead of waiting for the user to do anything, it" + " immediately starts over using the NUM entry (same numbering as the" + " `default' command). This obviously won't help if the machine" + " was rebooted by a kernel that GRUB loaded."}, + {"find", "search -f '%s'\n", NULL, 0, 1, {TYPE_FILE}, 0, "FILENAME", + "Search for the filename FILENAME in all of partitions and print the list of" + " the devices which contain the file."}, + /* FIXME: findiso unsupported. */ + /* FIXME: foreground unsupported. */ + /* FIXME: fstest unsupported. */ + /* NOTE: The obsolete C/H/S geometry isn't shown anymore. */ + {"geometry", "insmod regexp; ls -l (%s*)\n", NULL, 0, 1, {TYPE_VERBATIM}, 0, "DRIVE", + "Print the information for a drive DRIVE. "}, + {"halt", "halt %s\n", NULL, 0, 1, {TYPE_NOAPM_OPTION}, 0, "[--no-apm]", + "Halt your system. If APM is available on it, turn off the power using" + " the APM BIOS, unless you specify the option `--no-apm'."}, + /* FIXME: help unsupported. */ /* NUL_TERMINATE */ + {"hiddenmenu", NULL, + "if sleep -i $timeout; then timeout=0; else timeout=-1; fi\n", 0, + 0, {}, 0, "", "Hide the menu."}, + {"hide", "parttool '%s' hidden+\n", NULL, 0, 1, {TYPE_PARTITION}, + 0, "PARTITION", + "Hide PARTITION by setting the \"hidden\" bit in" + " its partition type code."}, + /* FIXME: ifconfig unsupported. */ + /* FIXME: impsprobe unsupported. */ + {"initrd", "legacy_initrd '%s' %s\n", NULL, 0, 2, {TYPE_FILE_NO_CONSUME, + TYPE_REST_VERBATIM}, 0, + "FILE [ARG ...]", + "Load an initial ramdisk FILE for a Linux format boot image and set the" + " appropriate parameters in the Linux setup area in memory."}, + /* NOTE: install unsupported. */ + /* FIXME: ioprobe unsupported. */ + /* FIXME: really support --no-mem-option. */ + {"kernel", "legacy_kernel %s %s '%s' %s\n", NULL, 0, + 4, {TYPE_TYPE_OR_NOMEM_OPTION, TYPE_TYPE_OR_NOMEM_OPTION, + TYPE_FILE_NO_CONSUME, TYPE_REST_VERBATIM}, 0, + "[--no-mem-option] [--type=TYPE] FILE [ARG ...]", + "Attempt to load the primary boot image from FILE. The rest of the" + " line is passed verbatim as the \"kernel command line\". Any modules" + " must be reloaded after using this command. The option --type is used" + " to suggest what type of kernel to be loaded. TYPE must be either of" + " \"netbsd\", \"freebsd\", \"openbsd\", \"linux\", \"biglinux\" and" + " \"multiboot\". The option --no-mem-option tells GRUB not to pass a" + " Linux's mem option automatically."}, + {"lock", "if ! authenticate legacy; then return; fi", NULL, 0, 0, {}, 0, + 0, "Break a command execution unless the user is authenticated."}, + {"makeactive", "parttool \"$root\" boot+\n", NULL, 0, 0, {}, 0, 0, + "Set the active partition on the root disk to GRUB's root device." + " This command is limited to _primary_ PC partitions on a hard disk."}, + {"map", "drivemap '%s' '%s'\n", NULL, 0, + 2, {TYPE_PARTITION, TYPE_PARTITION}, + FLAG_IGNORE_REST, "TO_DRIVE FROM_DRIVE", + "Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary" + " when you chain-load some operating systems, such as DOS, if such an" + " OS resides at a non-first drive."}, + /* NOTE: md5crypt unsupported since GRUB has not enough entropy and this + hash shouldn't be used anymore. */ + {"module", "legacy_initrd '%s' %s\n", NULL, 0, 2, {TYPE_FILE_NO_CONSUME, + TYPE_REST_VERBATIM}, 0, + "FILE [ARG ...]", + "Load a boot module FILE for a Multiboot format boot image (no" + " interpretation of the file contents is made, so users of this" + " command must know what the kernel in question expects). The" + " rest of the line is passed as the \"module command line\", like" + " the `kernel' command."}, + {"modulenounzip", "legacy_initrd_nounzip '%s' %s\n", NULL, 0, 2, + {TYPE_FILE_NO_CONSUME, TYPE_REST_VERBATIM}, 0, + "FILE [ARG ...]", + "The same as `module', except that automatic decompression is" + " disabled."}, + {"pager", "set pager=%s; if [ \"$pager\" = 0 ]; then " + " echo Internal pager is now off; else " + "echo Internal pager is now on; fi\n", NULL, 0, + 1, {TYPE_BOOL}, FLAG_FALLBACK_AVAILABLE, "[FLAG]", + "Toggle pager mode with no argument. If FLAG is given and its value" + " is `on', turn on the mode. If FLAG is `off', turn off the mode."}, + {"pager", + "if [ \"$pager\" = 1 ]; then pager=0; echo Internal pager is now off;" + "else pager=1; echo Internal pager is now on; fi\n", NULL, 0, 0, {}, + FLAG_FALLBACK, NULL, NULL}, + /* FIXME: partnew unsupported. */ + {"parttype", "parttool '%s' type=%s\n", NULL, 0, + 2, {TYPE_PARTITION, TYPE_INT}, 0, + "PART TYPE", "Change the type of the partition PART to TYPE."}, + {"password", "if [ \"$superusers\" = "" ]; then superusers=legacy; fi;\n" + "legacy_password %s '%s'\n", + "menuentry \"Superuser menu\" --users \"legacy\" { configfile '%s'; }\n", + 2, 3, {TYPE_OPTION, TYPE_VERBATIM, TYPE_FILE}, + FLAG_IGNORE_REST | FLAG_FALLBACK_AVAILABLE | FLAG_NO_MENUENTRY, + "[--md5] PASSWD [FILE]", + "If used in the first section of a menu file, disable all" + " interactive editing control (menu entry editor and" + " command line). If the password PASSWD is entered, it loads the" + " FILE as a new config file and restarts the GRUB Stage 2. If you" + " omit the argument FILE, then GRUB just unlocks privileged" + " instructions. You can also use it in the script section, in" + " which case it will ask for the password, before continuing." + " The option --md5 tells GRUB that PASSWD is encrypted with" + " md5crypt."}, + {"password", "if [ \"$superusers\" = "" ]; then superusers=legacy; fi;\n" + "legacy_password %s '%s'\n", NULL, 0, 2, {TYPE_OPTION, TYPE_VERBATIM}, + FLAG_IGNORE_REST | FLAG_FALLBACK | FLAG_NO_MENUENTRY, NULL, NULL}, + {"password", "if legacy_check_password %s '%s'; then configfile '%s'; " + "else return; fi\n", NULL, 2, 3, {TYPE_OPTION, TYPE_VERBATIM, TYPE_FILE}, + FLAG_IGNORE_REST | FLAG_FALLBACK_AVAILABLE | FLAG_MENUENTRY_ONLY, + NULL, NULL}, + {"password", "if ! legacy_check_password %s '%s'; then return fi;\n", + NULL, 0, 2, {TYPE_OPTION, TYPE_VERBATIM}, + FLAG_IGNORE_REST | FLAG_FALLBACK | FLAG_MENUENTRY_ONLY, NULL, NULL}, + /* NOTE: GRUB2 has a design principle of not eternally waiting for user + input. 60 seconds should be enough. + */ + {"pause", "echo %s; if ! sleep -i 60; then return; fi\n", NULL, 0, 1, + {TYPE_REST_VERBATIM}, 0, + "[MESSAGE ...]", "Print MESSAGE, then wait until a key is pressed."}, + {"print", "echo %s\n", NULL, 0, 1, + {TYPE_REST_VERBATIM}, 0, + "[MESSAGE ...]", "Print MESSAGE."}, + /* FIXME: quit unsupported. */ + /* FIXME: rarp unsupported. */ + {"read", "read_dword %s\n", NULL, 0, 1, {TYPE_INT}, 0, "ADDR", + "Read a 32-bit value from memory at address ADDR and" + " display it in hex format."}, + {"reboot", "reboot\n", NULL, 0, 0, {}, 0, 0, "Reboot your system."}, + {"root", "set root='%s'; set legacy_hdbias='%s'\n", NULL, 0, + 2, {TYPE_PARTITION, TYPE_INT}, FLAG_FALLBACK_AVAILABLE, + "[DEVICE [HDBIAS]]", + "Set the current \"root device\" to the device DEVICE, then" + " attempt to mount it to get the partition size (for passing the" + " partition descriptor in `ES:ESI', used by some chain-loaded" + " bootloaders), the BSD drive-type (for booting BSD kernels using" + " their native boot format), and correctly determine " + " the PC partition where a BSD sub-partition is located. The" + " optional HDBIAS parameter is a number to tell a BSD kernel" + " how many BIOS drive numbers are on controllers before the current" + " one. For example, if there is an IDE disk and a SCSI disk, and your" + " FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS."}, + {"root", "echo \"$root\"\n", NULL, 0, 0, {}, FLAG_FALLBACK, NULL, NULL}, + {"rootnoverify", "set root='%s'; set legacy_hdbias='%s'\n", NULL, 0, + 2, {TYPE_PARTITION, TYPE_INT}, 0, + "[DEVICE [HDBIAS]]", + "Similar to `root', but don't attempt to mount the partition. This" + " is useful for when an OS is outside of the area of the disk that" + " GRUB can read, but setting the correct root device is still" + " desired. Note that the items mentioned in `root' which" + " derived from attempting the mount will NOT work correctly."}, + {"rootnoverify", "echo \"$root\"\n", NULL, 0, + 0, {}, FLAG_FALLBACK, NULL, NULL}, + /* FIXME: support saving NUM and fallback. */ + {"savedefault", "saved_entry=${chosen}; save_env saved_entry\n", NULL, 0, + 0, {}, 0, "[NUM | `fallback']", + "Save the current entry as the default boot entry if no argument is" + " specified. If a number is specified, this number is saved. If" + " `fallback' is used, next fallback entry is saved."}, + {"serial", "serial %s\n", NULL, 0, 1, {TYPE_REST_VERBATIM}, 0, + "[--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] " + "[--parity=PARITY] [--stop=STOP] [--device=DEV]", + "Initialize a serial device. UNIT is a digit that specifies which serial" + " device is used (e.g. 0 == COM1). If you need to specify the port number," + " set it by --port. SPEED is the DTE-DTE speed. WORD is the word length," + " PARITY is the type of parity, which is one of `no', `odd' and `even'." + " STOP is the length of stop bit(s). The option --device can be used only" + " in the grub shell, which specifies the file name of a tty device. The" + " default values are COM1, 9600, 8N1."}, + /* FIXME: shade unsupported. */ + /* FIXME: silent unsupported. */ + /* FIXME: splashimage unsupported. */ + /* FIXME: setkey unsupported. */ /* NUL_TERMINATE */ + /* NOTE: setup unsupported. */ + /* FIXME: --no-echo, --no-edit unsupported. */ + /* NOTE: both terminals are activated so --silent and --timeout + are useless. */ + /* FIXME: graphics unsupported. */ + {"terminal", NULL, NULL, 0, 0, {}, FLAG_TERMINAL | FLAG_IGNORE_REST, + "[--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] " + "[--silent] [console] [serial] [hercules] [graphics]", + "Select a terminal. When multiple terminals are specified, wait until" + " you push any key to continue. If both console and serial are specified," + " the terminal to which you input a key first will be selected. If no" + " argument is specified, print current setting. The option --dumb" + " specifies that your terminal is dumb, otherwise, vt100-compatibility" + " is assumed. If you specify --no-echo, input characters won't be echoed." + " If you specify --no-edit, the BASH-like editing feature will be disabled." + " If --timeout is present, this command will wait at most for SECS" + " seconds. The option --lines specifies the maximum number of lines." + " The option --silent is used to suppress messages."}, + /* FIXME: terminfo unsupported. */ /* NUL_TERMINATE */ + {"testload", "testload '%s'\n", NULL, 0, 1, {TYPE_FILE}, 0, "FILE", + "Read the entire contents of FILE in several different ways and" + " compares them, to test the filesystem code. " + " If this test succeeds, then a good next" + " step is to try loading a kernel."}, + {"testvbe", "insmod vbe; videotest '%s'\n", NULL, 0, 1, {TYPE_VBE_MODE}, 0, + "MODE", "Test the VBE mode MODE. Hit any key to return."}, + /* FIXME: tftpserver unsupported. */ + {"timeout", "set timeout=%s\n", NULL, 0, 1, {TYPE_INT}, 0, "SEC", + "Set a timeout, in SEC seconds, before automatically booting the" + " default entry (normally the first entry defined)."}, + {"title", NULL, NULL, 0, 0, {}, FLAG_TITLE, "NAME ...", + "Start a new boot entry, and set its name to the contents of the" + " rest of the line, starting with the first non-space character."}, + {"unhide", "parttool '%s' hidden-\n", NULL, 0, + 1, {TYPE_PARTITION}, 0, "PARTITION", + "Unhide PARTITION by clearing the \"hidden\" bit in its" + " partition type code."}, + /* FIXME: uppermem unsupported. */ + {"uuid", "search --set=root --fs-uuid '%s'\n", NULL, 0, 1, {TYPE_VERBATIM}, + 0, "UUID", "Find root by UUID"}, + {"vbeprobe", "insmod vbe; videoinfo '%s'\n", NULL, 0, 1, {TYPE_VBE_MODE}, + FLAG_FALLBACK_AVAILABLE, "[MODE]", + "Probe VBE information. If the mode number MODE is specified, show only" + " the information about only the mode."}, + {"vbeprobe", "insmod vbe; videoinfo\n", NULL, 0, 0, {}, + FLAG_FALLBACK, NULL, NULL} + /* FIXME: verbose unsupported. */ + /* FIXME: version unsupported. */ + /* FIXME: viewport unsupported. */ + }; + +char * +grub_legacy_escape (const char *in, grub_size_t len) +{ + char *ptr; + char *ret; + char saved; + int overhead = 0; + + for (ptr = (char*)in; ptr < in + len && *ptr; ptr++) + if (*ptr == '\'') + overhead += 3; + ret = grub_malloc (ptr - in + overhead + 1); + if (!ret) + return NULL; + + ptr = (char*)in; + saved = ptr[len]; + ptr[len] = '\0'; + grub_strchrsub (ret, ptr, '\'', "'\\''"); + ptr[len] = saved; + return ret; +} + +static char * +adjust_file (const char *in, grub_size_t len) +{ + const char *comma, *ptr, *rest; + char *ret, *outptr; + int overhead = 0; + int part = -1, subpart = -1; + if (in[0] != '(') + return grub_legacy_escape (in, len); + for (ptr = in + 1; ptr < in + len && *ptr && *ptr != ')' + && *ptr != ','; ptr++) + if (*ptr == '\'' || *ptr == '\\') + overhead++; + comma = ptr; + if (*comma == ')' && comma - in == 3 + && in[1] == 'n' && in[2] == 'd') + { + rest = comma + 1; + for (ptr = rest; ptr < in + len && *ptr; ptr++) + if (*ptr == '\'' || *ptr == '\\') + overhead++; + + ret = grub_malloc (ptr - in + overhead + 15); + if (!ret) + return NULL; + + outptr = grub_stpcpy (ret, "(tftp)");; + for (ptr = rest; ptr < in + len; ptr++) + { + if (*ptr == '\'' || *ptr == '\\') + *outptr++ = '\\'; + + *outptr++ = *ptr; + } + *outptr = 0; + return ret; + } + if (*comma != ',') + return grub_legacy_escape (in, len); + part = grub_strtoull (comma + 1, (char **) &rest, 0); + if (rest[0] == ',' && rest[1] >= 'a' && rest[1] <= 'z') + { + subpart = rest[1] - 'a'; + rest += 2; + } + for (ptr = rest; ptr < in + len && *ptr; ptr++) + if (*ptr == '\'' || *ptr == '\\') + overhead++; + + /* 35 is enough for any 2 numbers. */ + ret = grub_malloc (ptr - in + overhead + 35 + 5); + if (!ret) + return NULL; + + outptr = ret; + for (ptr = in; ptr < in + len && ptr <= comma; ptr++) + { + if (*ptr == '\'' || *ptr == '\\') + *outptr++ = '\\'; + + *outptr++ = *ptr; + } + if (subpart != -1) + grub_snprintf (outptr, 35, "%d,%d", part + 1, subpart + 1); + else + grub_snprintf (outptr, 35, "%d", part + 1); + while (*outptr) + outptr++; + for (ptr = rest; ptr < in + len; ptr++) + { + if (*ptr == '\'' || *ptr == '\\') + *outptr++ = '\\'; + + *outptr++ = *ptr; + } + *outptr = 0; + return ret; +} + +static int +check_option (const char *a, const char *b, grub_size_t len) +{ + if (grub_strlen (b) != len) + return 0; + return grub_strncmp (a, b, len) == 0; +} + +static int +is_option (enum arg_type opt, const char *curarg, grub_size_t len) +{ + switch (opt) + { + case TYPE_WITH_CONFIGFILE_OPTION: + return check_option (curarg, "--with-configfile", len); + case TYPE_NOAPM_OPTION: + return check_option (curarg, "--no-apm", len); + case TYPE_FORCE_OPTION: + return check_option (curarg, "--force", len); + case TYPE_TYPE_OR_NOMEM_OPTION: + return check_option (curarg, "--type=netbsd", len) + || check_option (curarg, "--type=freebsd", len) + || check_option (curarg, "--type=openbsd", len) + || check_option (curarg, "--type=linux", len) + || check_option (curarg, "--type=biglinux", len) + || check_option (curarg, "--type=multiboot", len) + || check_option (curarg, "--no-mem-option", len); + case TYPE_OPTION: + return (len >= 2 && curarg[0] == '-' && curarg[1] == '-'); + default: + return 0; + } +} + +char * +grub_legacy_parse (const char *buf, char **entryname, char **suffix) +{ + const char *ptr; + const char *cmdname; + unsigned i, cmdnum; + char *args[ARRAY_SIZE (legacy_commands[0].argt)]; + + *suffix = NULL; + + for (ptr = buf; *ptr && grub_isspace (*ptr); ptr++); + if (!*ptr || *ptr == '#') + { + char *ret; + int len = grub_strlen (buf); + ret = grub_malloc (len + 2); + grub_memcpy (ret, buf, len); + if (len && ret[len - 1] == '\n') + ret[len] = 0; + else + { + ret[len] = '\n'; + ret[len + 1] = 0; + } + return ret; + } + + cmdname = ptr; + for (ptr = buf; *ptr && !grub_isspace (*ptr) && *ptr != '='; ptr++); + + for (cmdnum = 0; cmdnum < ARRAY_SIZE (legacy_commands); cmdnum++) + if (grub_strncmp (legacy_commands[cmdnum].name, cmdname, ptr - cmdname) == 0 + && legacy_commands[cmdnum].name[ptr - cmdname] == 0 + && (!(*entryname != NULL && (legacy_commands[cmdnum].flags + & FLAG_NO_MENUENTRY))) + && (!(*entryname == NULL && (legacy_commands[cmdnum].flags + & FLAG_MENUENTRY_ONLY)))) + break; + if (cmdnum == ARRAY_SIZE (legacy_commands)) + return grub_xasprintf ("# Unsupported legacy command: %s\n", buf); + + for (; grub_isspace (*ptr) || *ptr == '='; ptr++); + + if (legacy_commands[cmdnum].flags & FLAG_TITLE) + { + const char *ptr2; + ptr2 = ptr + grub_strlen (ptr); + while (ptr2 > ptr && grub_isspace (*(ptr2 - 1))) + ptr2--; + *entryname = grub_strndup (ptr, ptr2 - ptr); + return NULL; + } + + if (legacy_commands[cmdnum].flags & FLAG_TERMINAL) + { + int dumb = 0, lines = 24; +#ifdef TODO + int no_echo = 0, no_edit = 0; +#endif + int hercules = 0; + int console = 0, serial = 0, graphics = 0; + /* Big enough for any possible resulting command. */ + char outbuf[512] = ""; + char *outptr; + while (*ptr) + { + /* "[--timeout=SECS] [--silent]" + " [console] [serial] [hercules]"*/ + if (grub_memcmp (ptr, "--dumb", sizeof ("--dumb") - 1) == 0) + dumb = 1; +#ifdef TODO + if (grub_memcmp (ptr, "--no-echo", sizeof ("--no-echo") - 1) == 0) + no_echo = 1; + + if (grub_memcmp (ptr, "--no-edit", sizeof ("--no-edit") - 1) == 0) + no_edit = 1; +#endif + if (grub_memcmp (ptr, "--lines=", sizeof ("--lines=") - 1) == 0) + { + lines = grub_strtoul (ptr + sizeof ("--lines=") - 1, 0, 0); + if (grub_errno) + { + lines = 24; + grub_errno = GRUB_ERR_NONE; + } + } + + if (grub_memcmp (ptr, "console", sizeof ("console") - 1) == 0) + console = 1; + + if (grub_memcmp (ptr, "serial", sizeof ("serial") - 1) == 0) + serial = 1; + if (grub_memcmp (ptr, "hercules", sizeof ("hercules") - 1) == 0) + hercules = 1; + if (grub_memcmp (ptr, "graphics", sizeof ("graphics") - 1) == 0) + graphics = 1; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + while (*ptr && grub_isspace (*ptr)) + ptr++; + } + + if (!console && !serial && !hercules && !graphics) + return grub_strdup ("terminal_input; terminal_output; terminfo\n"); + + outptr = outbuf; + + if (graphics) + outptr = grub_stpcpy (outptr, "insmod all_video; "); + + outptr = grub_stpcpy (outptr, "terminal_input "); + if (serial) + outptr = grub_stpcpy (outptr, "serial "); + if (console || hercules || graphics) + outptr = grub_stpcpy (outptr, "console "); + outptr = grub_stpcpy (outptr, "; terminal_output "); + if (serial) + outptr = grub_stpcpy (outptr, "serial "); + if (console) + outptr = grub_stpcpy (outptr, "console "); + if (hercules) + outptr = grub_stpcpy (outptr, "mda_text "); + if (graphics) + outptr = grub_stpcpy (outptr, "gfxterm "); + outptr = grub_stpcpy (outptr, "; "); + *outptr = '\0'; + if (serial) + { + grub_snprintf (outptr, outbuf + sizeof (outbuf) - outptr, + "terminfo serial -g 80x%d %s; ", + lines, dumb ? "dumb" : "vt100"); + outptr += grub_strlen (outptr); + } + + grub_strcpy (outptr, "\n"); + + return grub_strdup (outbuf); + } + + grub_memset (args, 0, sizeof (args)); + + { + int hold_arg = 0; + const char *curarg = NULL; + for (i = 0; i < legacy_commands[cmdnum].argc; i++) + { + grub_size_t curarglen; + if (hold_arg) + { + ptr = curarg; + hold_arg = 0; + } + for (; grub_isspace (*ptr); ptr++); + curarg = ptr; + if (!*curarg) + break; + for (; *ptr && !grub_isspace (*ptr); ptr++); + if (i != legacy_commands[cmdnum].argc - 1 + || (legacy_commands[cmdnum].flags & FLAG_IGNORE_REST)) + curarglen = ptr - curarg; + else + { + curarglen = grub_strlen (curarg); + while (curarglen > 0 && grub_isspace (curarg[curarglen - 1])) + curarglen--; + } + if (*ptr) + ptr++; + switch (legacy_commands[cmdnum].argt[i]) + { + case TYPE_FILE_NO_CONSUME: + hold_arg = 1; + /* Fallthrough. */ + case TYPE_PARTITION: + case TYPE_FILE: + args[i] = adjust_file (curarg, curarglen); + break; + + case TYPE_REST_VERBATIM: + { + char *outptr, *outptr0; + int overhead = 3; + ptr = curarg; + while (*ptr) + { + for (; *ptr && grub_isspace (*ptr); ptr++); + for (; *ptr && !grub_isspace (*ptr); ptr++) + if (*ptr == '\'') + overhead += 3; + if (*ptr) + ptr++; + overhead += 3; + } + + outptr0 = args[i] = grub_malloc (overhead + (ptr - curarg)); + if (!outptr0) + return NULL; + ptr = curarg; + outptr = outptr0; + while (*ptr) + { + for (; *ptr && grub_isspace (*ptr); ptr++); + if (outptr != outptr0) + *outptr++ = ' '; + *outptr++ = '\''; + for (; *ptr && !grub_isspace (*ptr); ptr++) + { + if (*ptr == '\'') + { + *outptr++ = '\''; + *outptr++ = '\\'; + *outptr++ = '\''; + *outptr++ = '\''; + } + else + *outptr++ = *ptr; + } + *outptr++ = '\''; + if (*ptr) + ptr++; + } + *outptr++ = 0; + } + break; + + case TYPE_VERBATIM: + args[i] = grub_legacy_escape (curarg, curarglen); + break; + case TYPE_WITH_CONFIGFILE_OPTION: + case TYPE_FORCE_OPTION: + case TYPE_NOAPM_OPTION: + case TYPE_TYPE_OR_NOMEM_OPTION: + case TYPE_OPTION: + if (is_option (legacy_commands[cmdnum].argt[i], curarg, curarglen)) + { + args[i] = grub_strndup (curarg, curarglen); + break; + } + args[i] = grub_strdup (""); + hold_arg = 1; + break; + case TYPE_INT: + { + const char *brk; + int base = 10; + brk = curarg; + if (brk[0] == '0' && brk[1] == 'x') + { + base = 16; + brk += 2; + } + else if (brk[0] == '0') + base = 8; + for (; *brk && brk < curarg + curarglen; brk++) + { + if (base == 8 && (*brk == '8' || *brk == '9')) + break; + if (grub_isdigit (*brk)) + continue; + if (base != 16) + break; + if (!(*brk >= 'a' && *brk <= 'f') + && !(*brk >= 'A' && *brk <= 'F')) + break; + } + if (brk == curarg) + args[i] = grub_strdup ("0"); + else + args[i] = grub_strndup (curarg, brk - curarg); + } + break; + case TYPE_VBE_MODE: + { + unsigned mod; + struct grub_vesa_mode_table_entry *modedesc; + + mod = grub_strtoul (curarg, 0, 0); + if (grub_errno) + { + mod = 0; + grub_errno = GRUB_ERR_NONE; + } + if (mod < GRUB_VESA_MODE_TABLE_START + || mod > GRUB_VESA_MODE_TABLE_END) + { + args[i] = grub_strdup ("auto"); + break; + } + modedesc = &grub_vesa_mode_table[mod - GRUB_VESA_MODE_TABLE_START]; + if (!modedesc->width) + { + args[i] = grub_strdup ("auto"); + break; + } + args[i] = grub_xasprintf ("%ux%ux%u", + modedesc->width, modedesc->height, + modedesc->depth); + break; + } + case TYPE_BOOL: + if (curarglen == 2 && curarg[0] == 'o' && curarg[1] == 'n') + args[i] = grub_strdup ("1"); + else + args[i] = grub_strdup ("0"); + break; + } + } + } + + while (legacy_commands[cmdnum].argc > 0 + && args[legacy_commands[cmdnum].argc - 1] == NULL + && (legacy_commands[cmdnum].flags & FLAG_FALLBACK_AVAILABLE) + && args[legacy_commands[cmdnum + 1].argc] == NULL) + cmdnum++; + + for (; i < legacy_commands[cmdnum].argc; i++) + switch (legacy_commands[cmdnum].argt[i]) + { + case TYPE_FILE_NO_CONSUME: + case TYPE_PARTITION: + case TYPE_FILE: + case TYPE_REST_VERBATIM: + case TYPE_VERBATIM: + case TYPE_WITH_CONFIGFILE_OPTION: + case TYPE_FORCE_OPTION: + case TYPE_NOAPM_OPTION: + case TYPE_TYPE_OR_NOMEM_OPTION: + case TYPE_OPTION: + args[i] = grub_strdup (""); + break; + case TYPE_BOOL: + case TYPE_INT: + args[i] = grub_strdup ("0"); + break; + case TYPE_VBE_MODE: + args[i] = grub_strdup ("auto"); + break; + } + + if (legacy_commands[cmdnum].flags & FLAG_COLOR_INVERT) + { + char *corig = args[legacy_commands[cmdnum].argc - 1]; + char *slash = grub_strchr (corig, '/'); + char *invert; + grub_size_t len; + + len = grub_strlen (corig); + if (!slash) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid color specification `%s'"), + args[0]); + return NULL; + } + invert = grub_malloc (len + 1); + if (!invert) + return NULL; + grub_memcpy (invert, slash + 1, len - (slash - corig) - 1); + invert[len - (slash - args[0]) - 1] = '/'; + grub_memcpy (invert + len - (slash - corig), corig, slash - corig); + invert[len] = 0; + args[legacy_commands[cmdnum].argc] = invert; + } + + if (legacy_commands[cmdnum].suffix) + { + *suffix = grub_xasprintf (legacy_commands[cmdnum].suffix, + args[legacy_commands[cmdnum].suffixarg]); + if (*suffix) + return NULL; + } + + { + char *ret = grub_xasprintf (legacy_commands[cmdnum].map, args[0], args[1], + args[2], args[3]); + grub_free (args[0]); + grub_free (args[1]); + grub_free (args[2]); + grub_free (args[3]); + return ret; + } +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/ChangeLog b/grub-core/lib/libgcrypt-grub/cipher/ChangeLog new file mode 100644 index 000000000..334eb9fe1 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/ChangeLog @@ -0,0 +1,4357 @@ +2017-04-24 Automatic import tool + + Imported ciphers to GRUB + + * Makefile.am: Removed + * Manifest: Removed + * ac.c: Removed + * arcfour.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (elftest): Removed declaration. + (selftest): Removed. + (GRUB_MOD_INIT(gcry_arcfour)): New function + + Register cipher _gcry_cipher_spec_arcfour + (GRUB_MOD_FINI(gcry_arcfour)): New function + + Unregister cipher _gcry_cipher_spec_arcfour + * blowfish.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (selftest): Removed. + (GRUB_MOD_INIT(gcry_blowfish)): New function + + Register cipher _gcry_cipher_spec_blowfish + (GRUB_MOD_FINI(gcry_blowfish)): New function + + Unregister cipher _gcry_cipher_spec_blowfish + * camellia-glue.c: Removed including of config.h + Removed including of config.h + (elftest): Removed declaration. + (selftest): Removed. + (GRUB_MOD_INIT(gcry_camellia)): New function + + Register cipher _gcry_cipher_spec_camellia128 + Register cipher _gcry_cipher_spec_camellia192 + Register cipher _gcry_cipher_spec_camellia256 + (GRUB_MOD_FINI(gcry_camellia)): New function + + Unregister cipher _gcry_cipher_spec_camellia128 + Unregister cipher _gcry_cipher_spec_camellia192 + Unregister cipher _gcry_cipher_spec_camellia256 + * cast5.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (selftest): Removed. + (GRUB_MOD_INIT(gcry_cast5)): New function + + Register cipher _gcry_cipher_spec_cast5 + (GRUB_MOD_FINI(gcry_cast5)): New function + + Unregister cipher _gcry_cipher_spec_cast5 + * cipher.c: Removed + * crc.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (GRUB_MOD_INIT(gcry_crc)): New function + + Register digest _gcry_digest_spec_crc32 + Register digest _gcry_digest_spec_crc32_rfc1510 + Register digest _gcry_digest_spec_crc24_rfc2440 + (GRUB_MOD_FINI(gcry_crc)): New function + + Unregister MD _gcry_digest_spec_crc32 + Unregister MD _gcry_digest_spec_crc32_rfc1510 + Unregister MD _gcry_digest_spec_crc24_rfc2440 + * des.c: Removed including of config.h + Removed including of stdio.h + Removed including of string.h + (elftest): Removed declaration. + (weak_keys_chksum): Removed. + (tripledes_set2keys): Removed. + (selftest): Removed. + (do_tripledes_set_extra_info): Removed. + (selftest_fips): Removed. + (run_selftests): Removed. + (_gcry_cipher_extraspec_tripledes): Removed. + (GRUB_MOD_INIT(gcry_des)): New function + + Register cipher _gcry_cipher_spec_des + Register cipher _gcry_cipher_spec_tripledes + (GRUB_MOD_FINI(gcry_des)): New function + + Unregister cipher _gcry_cipher_spec_des + Unregister cipher _gcry_cipher_spec_tripledes + * dsa.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (gen_k): Removed declaration. + (test_keys): Removed declaration. + (progress_cb): Removed declaration. + (progress_cb): Removed declaration. + (_gcry_register_pk_dsa_progress): Removed. + (progress): Removed. + (gen_k): Removed. + (test_keys): Removed. + (generate): Removed. + (generate_fips186): Removed. + (sign): Removed. + (dsa_generate_ext): Removed. + (dsa_generate): Removed. + (dsa_sign): Removed. + (selftest_sign_1024): Removed. + (selftests_dsa): Removed. + (run_selftests): Removed. + (_gcry_pubkey_extraspec_dsa): Removed. + (GRUB_MOD_INIT(gcry_dsa)): New function + + Register pk _gcry_digest_spec_crc24_rfc2440 + (GRUB_MOD_FINI(gcry_dsa)): New function + + Unregister pk _gcry_digest_spec_crc24_rfc2440 + * ecc.c: Removed + * elgamal.c: Removed + * hash-common.c: Removed + * hmac-tests.c: Removed + * idea.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + Removed including of assert.h + (elftest): Removed declaration. + (selftest): Removed. + (GRUB_MOD_INIT(gcry_idea)): New function + + Register cipher _gcry_cipher_spec_idea + (GRUB_MOD_FINI(gcry_idea)): New function + + Unregister cipher _gcry_cipher_spec_idea + * kdf.c: Removed + * md.c: Removed + * md4.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (GRUB_MOD_INIT(gcry_md4)): New function + + Register digest _gcry_digest_spec_md4 + (GRUB_MOD_FINI(gcry_md4)): New function + + Unregister MD _gcry_digest_spec_md4 + * md5.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (GRUB_MOD_INIT(gcry_md5)): New function + + Register digest _gcry_digest_spec_md5 + (GRUB_MOD_FINI(gcry_md5)): New function + + Unregister MD _gcry_digest_spec_md5 + * primegen.c: Removed + * pubkey.c: Removed + * rfc2268.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (elftest): Removed declaration. + (selftest): Removed. + (GRUB_MOD_INIT(gcry_rfc2268)): New function + + Register cipher _gcry_cipher_spec_rfc2268_40 + (GRUB_MOD_FINI(gcry_rfc2268)): New function + + Unregister cipher _gcry_cipher_spec_rfc2268_40 + * rijndael.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (elftest): Removed declaration. + (_gcry_aes_cfb_enc): Removed. + (_gcry_aes_cbc_enc): Removed. + (_gcry_aes_ctr_enc): Removed. + (_gcry_aes_cfb_dec): Removed. + (_gcry_aes_cbc_dec): Removed. + (selftest_basic_128): Removed. + (selftest_basic_192): Removed. + (selftest_basic_256): Removed. + (selftest): Removed. + (selftest_fips_128_38a): Removed. + (selftest_fips_128): Removed. + (selftest_fips_192): Removed. + (selftest_fips_256): Removed. + (run_selftests): Removed. + (_gcry_cipher_extraspec_aes): Removed. + (_gcry_cipher_extraspec_aes192): Removed. + (_gcry_cipher_extraspec_aes256): Removed. + (GRUB_MOD_INIT(gcry_rijndael)): New function + + Register cipher _gcry_cipher_spec_aes + Register cipher _gcry_cipher_spec_aes192 + Register cipher _gcry_cipher_spec_aes256 + (GRUB_MOD_FINI(gcry_rijndael)): New function + + Unregister cipher _gcry_cipher_spec_aes + Unregister cipher _gcry_cipher_spec_aes192 + Unregister cipher _gcry_cipher_spec_aes256 + * rmd160.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (_gcry_rmd160_mixblock): Removed. + (_gcry_rmd160_hash_buffer): Removed. + (GRUB_MOD_INIT(gcry_rmd160)): New function + + Register digest _gcry_digest_spec_rmd160 + (GRUB_MOD_FINI(gcry_rmd160)): New function + + Unregister MD _gcry_digest_spec_rmd160 + * rsa.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + Removed including of errno.h + (test_keys): Removed declaration. + (secret): Removed declaration. + (test_keys): Removed. + (check_exponent): Removed. + (generate_std): Removed. + (gen_x931_parm_xp): Removed. + (gen_x931_parm_xi): Removed. + (generate_x931): Removed. + (secret): Removed. + (rsa_blind): Removed. + (rsa_unblind): Removed. + (rsa_generate_ext): Removed. + (rsa_generate): Removed. + (rsa_decrypt): Removed. + (rsa_sign): Removed. + (compute_keygrip): Removed. + (selftest_sign_1024): Removed. + (extract_a_from_sexp): Removed. + (selftest_encr_1024): Removed. + (selftests_rsa): Removed. + (run_selftests): Removed. + (_gcry_pubkey_extraspec_rsa): Removed. + (GRUB_MOD_INIT(gcry_rsa)): New function + + Register pk _gcry_digest_spec_rmd160 + (GRUB_MOD_FINI(gcry_rsa)): New function + + Unregister pk _gcry_digest_spec_rmd160 + * seed.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + (elftest): Removed declaration. + (selftest): Removed. + (GRUB_MOD_INIT(gcry_seed)): New function + + Register cipher _gcry_cipher_spec_seed + (GRUB_MOD_FINI(gcry_seed)): New function + + Unregister cipher _gcry_cipher_spec_seed + * serpent.c: Removed including of config.h + Removed including of string.h + Removed including of stdio.h + (serpent_test): Removed. + (GRUB_MOD_INIT(gcry_serpent)): New function + + Register cipher _gcry_cipher_spec_serpent128 + Register cipher _gcry_cipher_spec_serpent192 + Register cipher _gcry_cipher_spec_serpent256 + (GRUB_MOD_FINI(gcry_serpent)): New function + + Unregister cipher _gcry_cipher_spec_serpent128 + Unregister cipher _gcry_cipher_spec_serpent192 + Unregister cipher _gcry_cipher_spec_serpent256 + * sha1.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + Removed including of stdint.h + (_gcry_sha1_hash_buffer): Removed. + (selftests_sha1): Removed. + (run_selftests): Removed. + (_gcry_digest_extraspec_sha1): Removed. + (GRUB_MOD_INIT(gcry_sha1)): New function + + Register digest _gcry_digest_spec_sha1 + (GRUB_MOD_FINI(gcry_sha1)): New function + + Unregister MD _gcry_digest_spec_sha1 + * sha256.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (selftests_sha224): Removed. + (selftests_sha256): Removed. + (run_selftests): Removed. + (_gcry_digest_extraspec_sha224): Removed. + (_gcry_digest_extraspec_sha256): Removed. + (GRUB_MOD_INIT(gcry_sha256)): New function + + Register digest _gcry_digest_spec_sha224 + Register digest _gcry_digest_spec_sha256 + (GRUB_MOD_FINI(gcry_sha256)): New function + + Unregister MD _gcry_digest_spec_sha224 + Unregister MD _gcry_digest_spec_sha256 + * sha512.c: Removed including of config.h + Removed including of string.h + (selftests_sha384): Removed. + (selftests_sha512): Removed. + (run_selftests): Removed. + (_gcry_digest_extraspec_sha512): Removed. + (_gcry_digest_extraspec_sha384): Removed. + (GRUB_MOD_INIT(gcry_sha512)): New function + + Register digest _gcry_digest_spec_sha512 + Register digest _gcry_digest_spec_sha384 + (GRUB_MOD_FINI(gcry_sha512)): New function + + Unregister MD _gcry_digest_spec_sha512 + Unregister MD _gcry_digest_spec_sha384 + * test-getrusage.c: Removed + * tiger.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (GRUB_MOD_INIT(gcry_tiger)): New function + + Register digest _gcry_digest_spec_tiger + Register digest _gcry_digest_spec_tiger1 + Register digest _gcry_digest_spec_tiger2 + (GRUB_MOD_FINI(gcry_tiger)): New function + + Unregister MD _gcry_digest_spec_tiger + Unregister MD _gcry_digest_spec_tiger1 + Unregister MD _gcry_digest_spec_tiger2 + * twofish.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (elftest): Removed declaration. + (selftest): Removed. + Removed including of stdio.h + Removed including of string.h + Removed including of time.h + (GRUB_MOD_INIT(gcry_twofish)): New function + + Register cipher _gcry_cipher_spec_twofish + Register cipher _gcry_cipher_spec_twofish128 + (GRUB_MOD_FINI(gcry_twofish)): New function + + Unregister cipher _gcry_cipher_spec_twofish + Unregister cipher _gcry_cipher_spec_twofish128 + * whirlpool.c: Removed including of config.h + Removed including of stdio.h + Removed including of stdlib.h + Removed including of string.h + (GRUB_MOD_INIT(gcry_whirlpool)): New function + + Register digest _gcry_digest_spec_whirlpool + (GRUB_MOD_FINI(gcry_whirlpool)): New function + + Unregister MD _gcry_digest_spec_whirlpool + * crypto.lst: New file. + * types.h: New file. + * memory.h: New file. + * cipher.h: Likewise. + * g10lib.h: Likewise. + +2010-08-19 Werner Koch + + * cipher.c (gcry_cipher_open): Remove double release of the module. + Fixes bug#1263. + +2010-06-10 Jeff Johnson (wk) + + * ecc.c (ecc_generate_ext): Parse transient-key flag. + (generate_key): Add arg TRANSIENT_KEY and use it to set the random + level. + +2010-04-12 Brad Hards (wk) + + Spelling fixes. + +2010-03-26 Werner Koch + + * tiger.c (asn): Unfetter the old TIGER from an OID. + (TIGER_CONTEXT): Add field VARIANT. + (tiger_init): Factor code out to ... + (do_init): New. + (tiger1_init, tiger2_init): New. + (_gcry_digest_spec_tiger1, _gcry_digest_spec_tiger2): New. + * md.c (digest_table): Add TIGER1 and TIGER2 variants. + +2009-12-11 Werner Koch + + * sha256.c (Cho, Maj, Sum0, Sum1): Turn macros into inline + functions. + (transform): Partly unroll to interweave the chain variables + + * sha512.c (ROTR, Ch, Maj, Sum0, Sum1): Turn macros into inline + functions. + (transform): Partly unroll to interweave the chain variables. + Suggested by Christian Grothoff. + +2009-12-10 Werner Koch + + * Makefile.am (o_flag_munging): New. + (tiger.o, tiger.lo): Use it. + + * cipher.c (do_ctr_encrypt): Add arg OUTBUFLEN. Check for + suitable value. Add check for valid inputlen. Wipe temporary + memory. + (do_ctr_decrypt): Likewise. + (do_cbc_encrypt, do_cbc_decrypt): Add arg OUTBUFLEN. Check for + suitable value. Move check for valid inputlen to here; change + returned error from INV_ARG to INV_LENGTH. + (do_ecb_encrypt, do_ecb_decrypt): Ditto. + (do_cfb_encrypt, do_cfb_decrypt): Ditto. + (do_ofb_encrypt, do_ofb_decrypt): Ditto. + (cipher_encrypt, cipher_encrypt): Adjust for above changes. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Simplify. + +2009-12-09 Werner Koch + + * cipher.c (gcry_cipher_open): Allow for GCRY_CIPHER_MODE_AESWRAP. + (cipher_encrypt, cipher_decrypt): Ditto. + (do_aeswrap_encrypt, do_aeswrap_decrypt): New. + (struct gcry_cipher_handle): Add field marks. + (cipher_setkey, cipher_setiv): Update marks flags. + (cipher_reset): Reset marks. + (cipher_encrypt, cipher_decrypt): Add new arg OUTBUFLEN. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Pass outbuflen to + cipher_encrypt. Replace GPG_ERR_TOO_SHORT by + GPG_ERR_BUFFER_TOO_SHORT. + +2009-08-21 Werner Koch + + * dsa.c (dsa_generate_ext): Release retfactors array before + setting it to NULL. Reported by Daiko Ueno. + +2009-07-02 Werner Koch + + * md.c (md_read): Fix incomplete check for NULL. + Reported by Fabian Kail. + +2009-03-31 Werner Koch + + * rsa.c (rsa_check_secret_key): Return GPG_ERR_BAD_SECKEY and not + GPG_ERR_PUBKEY_ALGO. + +2009-02-16 Werner Koch + + * rsa.c (generate_x931): Do not initialize TBL with automatic + variables. + * whirlpool.c, tiger.c, sha256.c, sha1.c, rmd160.c, md5.c + * md4.c, crc.c: Remove memory.h. This is garbage from gnupg. + Reported by Dan Fandrich. + +2009-01-22 Werner Koch + + * ecc.c (compute_keygrip): Remove superfluous const. + +2009-01-06 Werner Koch + + * rmd160.c (oid_spec_rmd160): Add TeleTrust identifier. + +2008-12-10 Werner Koch + + * dsa.c (generate): Add arg DOMAIN and use it if specified. + (generate_fips186): Ditto. + (dsa_generate_ext): Parse and check the optional "domain" + parameter and pass them to the generate functions. + + * rijndael.c (rijndael_names): Add "AES128" and "AES-128". + (rijndael192_names): Add "AES-192". + (rijndael256_names): Add "AES-256". + +2008-12-05 Werner Koch + + * dsa.c (generate): Add arg TRANSIENT_KEY and use it to detrmine + the RNG quality needed. + (dsa_generate_ext): Parse the transient-key flag und pass it to + generate. + +2008-11-28 Werner Koch + + * dsa.c (generate_fips186): Add arg DERIVEPARMS and use the seed + value if available. + + * primegen.c (_gcry_generate_fips186_2_prime): Fix inner p loop. + +2008-11-26 Werner Koch + + * primegen.c (_gcry_generate_fips186_3_prime): New. + * dsa.c (generate_fips186): Add arg USE_FIPS186_2. + (dsa_generate_ext): Parse new flag use-fips183-2. + +2008-11-25 Werner Koch + + * dsa.c (generate_fips186): New. + (dsa_generate_ext): Use new function if derive-parms are given or + if in FIPS mode. + * primegen.c (_gcry_generate_fips186_2_prime): New. + +2008-11-24 Werner Koch + + * pubkey.c (gcry_pk_genkey): Insert code to output extrainfo. + (pubkey_generate): Add arg R_EXTRAINFO and pass it to the extended + key generation function. + * rsa.c (gen_x931_parm_xp, gen_x931_parm_xi): New. + (generate_x931): Generate params if not given. + (rsa_generate_ext): Parse use-x931 flag. Return p-q-swapped + indicator. + * dsa.c (dsa_generate_ext): Put RETFACTORS into R_EXTRAINFO if + possible. + + * pubkey.c (gcry_pk_genkey): Remove parsing of almost all + parameters and pass the parameter S-expression to pubkey_generate. + (pubkey_generate): Simplify by requitring modules to parse the + parameters. Remove the special cases for Elgamal and ECC. + (sexp_elements_extract_ecc): Add arg EXTRASPEC and use it. Fix + small memory leak. + (sexp_to_key): Pass EXTRASPEC to sexp_elements_extract_ecc. + (pubkey_table) [USE_ELGAMAL]: Add real extraspec. + * rsa.c (rsa_generate_ext): Adjust for new calling convention. + * dsa.c (dsa_generate_ext): Ditto. + * elgamal.c (_gcry_elg_generate): Ditto. Rename to elg_generate_ext. + (elg_generate): New. + (_gcry_elg_generate_using_x): Remove after merging code with + elg_generate_ext. + (_gcry_pubkey_extraspec_elg): New. + (_gcry_elg_check_secret_key, _gcry_elg_encrypt, _gcry_elg_sign) + (_gcry_elg_verify, _gcry_elg_get_nbits): Make static and remove + _gcry_ prefix. + * ecc.c (_gcry_ecc_generate): Rename to ecc_generate_ext and + adjust for new calling convention. + (_gcry_ecc_get_param): Rename to ecc_get_param and make static. + (_gcry_pubkey_extraspec_ecdsa): Add ecc_generate_ext and + ecc_get_param. + +2008-11-20 Werner Koch + + * pubkey.c (pubkey_generate): Add arg DERIVEPARMS. + (gcry_pk_genkey): Parse derive-parms and pass it to above. + * rsa.c (generate_x931): New. + (rsa_generate_ext): Add arg DERIVEPARMS and call new function in + fips mode or if DERIVEPARMS is given. + * primegen.c (_gcry_derive_x931_prime, find_x931_prime): New. + +2008-11-19 Werner Koch + + * rsa.c (rsa_decrypt): Use gcry_create_nonce for blinding. + (generate): Rename to generate_std. + +2008-11-05 Werner Koch + + * md.c (md_open): Use a switch to set the Bsize. + (prepare_macpads): Fix long key case for SHA384 and SHA512. + + * cipher.c (gcry_cipher_handle): Add field EXTRASPEC. + (gcry_cipher_open): Set it. + (gcry_cipher_ctl): Add private control code to disable weak key + detection and to return the current input block. + * des.c (_tripledes_ctx): Add field FLAGS. + (do_tripledes_set_extra_info): New. + (_gcry_cipher_extraspec_tripledes): Add new function. + (do_tripledes_setkey): Disable weak key detection. + +2008-10-24 Werner Koch + + * md.c (digest_table): Allow MD5 in fips mode. + (md_register_default): Take special action for MD5. + (md_enable, gcry_md_hash_buffer): Ditto. + +2008-09-30 Werner Koch + + * rijndael.c (do_setkey): Properly align "t" and "tk". + (prepare_decryption): Properly align "w". Fixes bug #936. + +2008-09-18 Werner Koch + + * pubkey.c (gcry_pk_genkey): Parse domain parameter. + (pubkey_generate): Add new arg DOMAIN and remove special case for + DSA with qbits. + * rsa.c (rsa_generate): Add dummy args QBITS, NAME and DOMAIN and + rename to rsa_generate_ext. Change caller. + (_gcry_rsa_generate, _gcry_rsa_check_secret_key) + (_gcry_rsa_encrypt, _gcry_rsa_decrypt, _gcry_rsa_sign) + (_gcry_rsa_verify, _gcry_rsa_get_nbits): Make static and remove + _gcry_ prefix. + (_gcry_pubkey_spec_rsa, _gcry_pubkey_extraspec_rsa): Adjust names. + * dsa.c (dsa_generate_ext): New. + (_gcry_dsa_generate): Replace code by a call to dsa_generate. + (_gcry_dsa_check_secret_key, _gcry_dsa_sign, _gcry_dsa_verify) + (_gcry_dsa_get_nbits): Make static and remove _gcry prefix. + (_gcry_dsa_generate2): Remove. + (_gcry_pubkey_spec_dsa): Adjust to name changes. + (_gcry_pubkey_extraspec_rsa): Add dsa_generate_ext. + +2008-09-16 Werner Koch + + * ecc.c (run_selftests): Add arg EXTENDED. + +2008-09-12 Werner Koch + + * rsa.c (test_keys): Do a bad case signature check. + * dsa.c (test_keys): Do a bad case check. + + * cipher.c (_gcry_cipher_selftest): Add arg EXTENDED and pass it + to the called tests. + * md.c (_gcry_md_selftest): Ditto. + * pubkey.c (_gcry_pk_selftest): Ditto. + * rijndael.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftest_fips_128): Add arg EXTENDED and run only one test + non-extended mode. + (selftest_fips_192): Add dummy arg EXTENDED. + (selftest_fips_256): Ditto. + * hmac-tests.c (_gcry_hmac_selftest): Ditto. + (run_selftests): Ditto. + (selftests_sha1): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha224, selftests_sha256): Ditto. + (selftests_sha384, selftests_sha512): Ditto. + * sha1.c (run_selftests): Add arg EXTENDED and pass it to the + called test. + (selftests_sha1): Add arg EXTENDED and run only one test + non-extended mode. + * sha256.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftests_sha224): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha256): Ditto. + * sha512.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftests_sha384): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha512): Ditto. + * des.c (run_selftests): Add arg EXTENDED and pass it to the + called test. + (selftest_fips): Add dummy arg EXTENDED. + * rsa.c (run_selftests): Add dummy arg EXTENDED. + + * dsa.c (run_selftests): Add dummy arg EXTENDED. + + * rsa.c (extract_a_from_sexp): New. + (selftest_encr_1024): Check that the ciphertext does not match the + plaintext. + (test_keys): Improve tests and return an error status. + (generate): Return an error if test_keys fails. + * dsa.c (test_keys): Add comments and return an error status. + (generate): Return an error if test_keys failed. + +2008-09-11 Werner Koch + + * rsa.c (_gcry_rsa_decrypt): Return an error instead of calling + BUG in case of a practically impossible condition. + (sample_secret_key, sample_public_key): New. + (selftest_sign_1024, selftest_encr_1024): New. + (selftests_rsa): Implement tests. + * dsa.c (sample_secret_key, sample_public_key): New. + (selftest_sign_1024): New. + (selftests_dsa): Implement tests. + +2008-09-09 Werner Koch + + * hmac-tests.c (selftests_sha1): Add tests. + (selftests_sha224, selftests_sha384, selftests_sha512): Make up tests. + + * hash-common.c, hash-common.h: New. + * sha1.c (selftests_sha1): Add 3 tests. + * sha256.c (selftests_sha256, selftests_sha224): Ditto. + * sha512.c (selftests_sha512, selftests_sha384): Ditto. + +2008-08-29 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Remove the special case for RSA + and check whether a custom computation function has been setup. + * rsa.c (compute_keygrip): New. + (_gcry_pubkey_extraspec_rsa): Setup this function. + * ecc.c (compute_keygrip): New. + (_gcry_pubkey_extraspec_ecdsa): Setup this function. + +2008-08-28 Werner Koch + + * cipher.c (cipher_decrypt, cipher_encrypt): Return an error if + mode NONE is used. + (gcry_cipher_open): Allow mode NONE only with a debug flag set and + if not in FIPS mode. + +2008-08-26 Werner Koch + + * pubkey.c (pubkey_generate): Add arg KEYGEN_FLAGS. + (gcry_pk_genkey): Implement new parameter "transient-key" and + pass it as flags to pubkey_generate. + (pubkey_generate): Make use of an ext_generate function. + * rsa.c (generate): Add new arg transient_key and pass appropriate + args to the prime generator. + (_gcry_rsa_generate): Factor all code out to ... + (rsa_generate): .. new func with extra arg KEYGEN_FLAGS. + (_gcry_pubkey_extraspec_ecdsa): Setup rsa_generate. + * primegen.c (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Add new arg RANDOM_LEVEL. + +2008-08-21 Werner Koch + + * primegen.c (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Use a constant macro for the random + level. + +2008-08-19 Werner Koch + + * pubkey.c (sexp_elements_extract_ecc) [!USE_ECC]: Do not allow + allow "curve" parameter. + +2008-08-15 Werner Koch + + * pubkey.c (_gcry_pk_selftest): New. + * dsa.c (selftests_dsa, run_selftests): New. + * rsa.c (selftests_rsa, run_selftests): New. + * ecc.c (selftests_ecdsa, run_selftests): New. + + * md.c (_gcry_md_selftest): New. + * sha1.c (run_selftests, selftests_sha1): New. + * sha256.c (selftests_sha224, selftests_sha256, run_selftests): New. + * sha512.c (selftests_sha384, selftests_sha512, run_selftests): New. + + * des.c (selftest): Remove static variable form selftest. + (des_setkey): No on-the-fly self test in fips mode. + (tripledes_set3keys): Ditto. + + * cipher.c (_gcry_cipher_setkey, _gcry_cipher_setiv): + + * dsa.c (generate): Bail out in fips mode if NBITS is less than 1024. + * rsa.c (generate): Return an error code if the the requested size + is less than 1024 and we are in fpis mode. + (_gcry_rsa_generate): Take care of that error code. + + * ecc.c (generate_curve): In fips mode enable only NIST curves. + + * cipher.c (_gcry_cipher_selftest): New. + + * sha512.c (_gcry_digest_extraspec_sha384) + (_gcry_digest_extraspec_sha512): New. + * sha256.c (_gcry_digest_extraspec_sha224) + (_gcry_digest_extraspec_sha256): New. + * sha1.c (_gcry_digest_extraspec_sha1): New. + * ecc.c (_gcry_pubkey_extraspec_ecdsa): New. + * dsa.c (_gcry_pubkey_extraspec_dsa): New. + * rsa.c (_gcry_pubkey_extraspec_rsa): New. + * rijndael.c (_gcry_cipher_extraspec_aes) + (_gcry_cipher_extraspec_aes192, _gcry_cipher_extraspec_aes256): New. + * des.c (_gcry_cipher_extraspec_tripledes): New. + + * cipher.c (gcry_cipher_register): Rename to _gcry_cipher_register. + Add arg EXTRASPEC. + (dummy_extra_spec): New. + (cipher_table_entry): Add extraspec field. + * md.c (_gcry_md_register): Rename to _gcry_md_register. Add + arg EXTRASPEC. + (dummy_extra_spec): New. + (digest_table_entry): Add extraspec field. + * pubkey.c (gcry_pk_register): Rename to _gcry_pk_register. Add + arg EXTRASPEC. + (dummy_extra_spec): New. + (pubkey_table_entry): Add extraspec field. + + * ac.c: Let most public functions return GPG_ERR_UNSUPPORTED in + fips mode. + + * pubkey.c (pubkey_table_entry): Add field FIPS_ALLOWED and mark + appropriate algorithms. + (dummy_generate, dummy_check_secret_key, dummy_encrypt) + (dummy_decrypt, dummy_sign, dummy_verify, dummy_get_nbits): Signal + a fips error when used. + (gcry_pk_register): In fips mode do not allow to register new + algorithms. + + * md.c (digest_table): Add field FIPS_ALLOWED and mark appropriate + algorithms. + (md_register_default): In fips mode register only fips algorithms. + (gcry_md_register): In fips mode do not allow to register new + algorithms. + (gcry_md_get): Signal a fips error if called. + (gcry_md_hash_buffer): Do not allow rmd160 when not in fips mode. + (md_start_debug): Disable in fips_mode. + + * md.c (gcry_md_register_default): Rename to .. + (md_register_default): .. this. + (md_digest): Remove this commented fucntion. + * pubkey.c (gcry_pk_register_default): Rename to .. + (pk_register_default): .. this. + + * cipher.c (cipher_table_entry): Add field FIPS_ALLOWED. + (gcry_cipher_register_default): Register only fips approved + algorithms. + (gcry_cipher_register): Do not allow to register new ciphers. + (cipher_setiv): Signal fips error. + + * cipher (gcry_cipher_register_default): Rename to .. + (cipher_register_default): .. this. + (REGISTER_DEFAULT_CIPHERS): Adjust for that change. + +2008-07-05 Werner Koch + + * random-daemon.c, random.h, rndhw.c, rndunix.c, rand-internal.h + * random.c, rndegd.c, rndlinux.c, rndw32.c: Move to ../cipher. + * Makefile.am: Remove random stuff. + +2008-06-24 Szakats Istvan (wk) + + * ac.c (_gcry_ac_key_destroy, _gcry_ac_key_pair_generate): Relase + some more memory. + +2008-04-22 Werner Koch + + * rijndael.c (_gcry_aes_cfb_enc, _gcry_aes_cbc_enc) + (_gcry_aes_cfb_dec, _gcry_aes_cbc_dec): Use Padlock if possible. + +2008-04-18 Werner Koch + + * sha1.c (transform_aligned): Remove. That is will obviosuly not + work because we need a scratch working area and our internal API + does not allow to modify the buffers. + + * rijndael.c: Factor tables out to .. + * rijndael-tables.h: .. new. + + * ac.c (ac_data_extract): Make static. + + * camellia.h [HAVE_CONFIG_H]: Include config.h. + + * rndw32.c (registry_poll): Only print the performance data + problem warning once. Suggested by Simon Josefsson. + +2008-03-19 Werner Koch + + * cipher.c (gcry_cipher_open) [USE_AES]: Init bulk encryption only + if requested. Suggested by Dirk Stoecker. + +2008-03-18 Werner Koch + + * sha1.c: Include stdint.h. + (transform): Add arg NBLOCKS so that we can work on more than one + block and avoid updates of the chaining variables. Changed all + callers to use 1. + (sha1_write): Replace loop around transform. + (transform_aligned) [WORDS_BIGENDIAN]: New. + (TRANSFORM): New macro to replace all direct calls of transform. + +2008-03-17 Werner Koch + + * rijndael.c (_gcry_aes_cfb_dec): New. + (do_encrypt): Factor code out to .. + (do_encrypt_aligned): .. New. + (_gcry_aes_cfb_enc, _gcry_aes_cfb_dec): Use new function. + (do_decrypt): Factor code out to .. + (do_decrypt_aligned): .. new. + (_gcry_aes_cbc_enc, _gcry_aes_cbc_dec): New. + * cipher.c (struct gcry_cipher_handle): Put field IV into new + union U_IV to enforce proper alignment. Change all users. + (do_cfb_decrypt): Optimize. + (do_cbc_encrypt, do_cbc_decrypt): Optimize. + +2008-03-15 Werner Koch + + * rijndael.c (_gcry_aes_cfb_enc): New. + * cipher.c (struct gcry_cipher_handle): Add field ALGO and BULK. + (gcry_cipher_open): Set ALGO and BULK. + (do_cfb_encrypt): Optimize. + +2008-02-18 Werner Koch + + * rsa.c (_gcry_rsa_verify) [IS_DEVELOPMENT_VERSION]: Print + intermediate results. + +2008-01-08 Werner Koch + + * random.c (add_randomness): Do not just increment + POOL_FILLED_COUNTER but update it by the actual amount of data. + +2007-12-13 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Support SHA-224. + +2007-12-05 Werner Koch + + * rijndael.c (USE_PADLOCK): Depend on ENABLE_PADLOCK_SUPPORT. + * rndhw.c (USE_PADLOCK): Ditto + + * rsa.c (secret): Fixed condition test for using CRT. Reported by + Dean Scarff. Fixes bug#864. + (_gcry_rsa_check_secret_key): Return an erro if the optional + parameters are missing. + * pubkey.c (sexp_elements_extract): Add arg ALGO_NAME. Changed all + callers to pass NULL. Add hack to allow for optional RSA + parameters. + (sexp_to_key): Pass algo name to sexp_elements_extract. + +2007-12-03 Werner Koch + + * random.c (gcry_random_add_bytes): Implement it. + * rand-internal.h (RANDOM_ORIGIN_EXTERNAL): New. + +2007-11-30 Werner Koch + + * rndhw.c: New. + * rndlinux.c (_gcry_rndlinux_gather_random): Try to read 50% + directly from the hwrng. + * random.c (do_fast_random_poll): Also run the hw rng fast poll. + (_gcry_random_dump_stats): Tell whether the hw rng failed. + +2007-11-29 Werner Koch + + * rijndael.c (USE_PADLOCK): Define new macro used for ia32. + (RIJNDAEL_context) [USE_PADLOCK]: Add fields USE_PADLOCK and + PADLOCK_KEY. + (do_setkey) [USE_PADLOCK]: Enable padlock if available for 128 bit + AES. + (do_padlock) [USE_PADLOCK]: New. + (rijndael_encrypt, rijndael_decrypt) [USE_PADLOCK]: Divert to + do_padlock. + * cipher.c (cipher_context_alignment_t): New. Use it in this + module in place of PROPERLY_ALIGNED_TYPE. + (NEED_16BYTE_ALIGNED_CONTEXT): Define macro for ia32. + (struct gcry_cipher_handle): Add field HANDLE_OFFSET. + (gcry_cipher_open): Take care of increased alignment requirements. + (gcry_cipher_close): Ditto. + +2007-11-28 Werner Koch + + * sha256.c (asn224): Fixed wrong template. It happened due to a + bug in RFC4880. SHA-224 is not in the stable version of libgcrypt + so the consequences are limited to users of this devel version. + +2007-10-31 Werner Koch + + * ac.c (gcry_ac_data_new): Remove due to the visibility wrapper. + (gcry_ac_data_destroy, gcry_ac_data_copy, gcry_ac_data_length) + (gcry_ac_data_set, gcry_ac_data_get_name, gcry_ac_data_get_index) + (gcry_ac_data_to_sexp, gcry_ac_data_from_sexp) + (gcry_ac_data_clear, gcry_ac_io_init, gcry_ac_open) + (gcry_ac_close, gcry_ac_key_init, gcry_ac_key_pair_generate) + (gcry_ac_key_pair_extract, gcry_ac_key_destroy) + (gcry_ac_key_pair_destroy, gcry_ac_key_data_get) + (gcry_ac_key_test, gcry_ac_key_get_nbits, gcry_ac_key_get_grip) + (gcry_ac_data_encrypt, gcry_ac_data_decrypt, gcry_ac_data_sign) + (gcry_ac_data_verify, gcry_ac_data_encode, gcry_ac_data_decode) + (gcry_ac_mpi_to_os, gcry_ac_mpi_to_os_alloc, gcry_ac_os_to_mpi) + (gcry_ac_data_encrypt_scheme, gcry_ac_data_decrypt_scheme) + (gcry_ac_data_sign_scheme, gcry_ac_data_verify_scheme) + (gcry_ac_io_init_va): Ditto. + (gcry_ac_id_to_name, gcry_ac_name_to_id): Remove as these + deprecated functions are now implemented by visibility.c. + +2007-10-26 Werner Koch + + * rndw32.c: Disable debug flag. + +2007-10-25 Werner Koch + + * rndw32.c: Updated from current cryptlib snapshot and modified + for our use. Removed support from pre NT systems. + (slow_gatherer_windows95): Remove. + (_gcry_rndw32_gather_random): Require an NT platform. + (init_system_rng, read_system_rng, read_mbm_data): New. + (slow_gatherer_windowsNT): Rename to ... + (slow_gatherer): .. this. Read system RNG and MBM. + (registry_poll): New with code factored out from slow_gatherer. + +2007-08-23 Werner Koch + + * random.c (pool_filled_counter): New. + (add_randomness): Use it. + +2007-08-22 Werner Koch + + * rndw32.c, rndunix.c: Switched to LGPL. + +2007-05-30 Werner Koch + + * camellia.h, camellia.c: Replace by new LGPL version and adjusted + camellia.h. + +2007-05-09 Marcus Brinkmann + + * ac.c (_gcry_ac_io_init_va, _gcry_ac_io_write, _gcry_ac_io_read): + Adjust users of gcry_ac_io_t because union is not anonymous + anymore. + +2007-05-02 Werner Koch + + * camellia-glue.c (camellia_setkey, camellia_encrypt) + (camellia_decrypt): Recalculated used stack size in called + functions. + * camellia.h: Redefine external symbols. + +2007-05-02 David Shaw + + * Makefile.am, cipher.c: Add Camellia. + + * camellia-glue.c: New. The necessary glue to interface libgcrypt + to the stock NTT Camellia distribution. + + * camellia.h, camellia.c: The stock NTT Camellia distribution + (GPL). + +2007-04-30 David Shaw + + * cipher.c: Use #if instead of #ifdef as configure defines the + USE_cipher defines as 0 for disabled. + +2007-04-30 Werner Koch + + * rndegd.c (_gcry_rndegd_set_socket_name): New. + +2007-04-30 Marcus Brinkmann + + * ecc.c (ec2os): Fix relocation of short numbers. + + * ecc.c (generate_key): Do not allocate D, which will be allocated + by GEN_K. Remove G. Fix test if g_x, g_y resp. q_x, q_y are + requested. + (_gcry_ecc_generate): Release unneeded members of SK. + * pubkey.c (sexp_to_key): Release NAME. + +2007-04-28 Marcus Brinkmann + + * ac.c (gcry_ac_mpi): Remove member NAME_PROVIDED. + (ac_data_mpi_copy, _gcry_ac_data_set, _gcry_ac_data_get_name) + (_gcry_ac_data_get_index, ac_data_construct): Adjust handling of + NAME accordingly. + +2007-04-20 Werner Koch + + * ecc.c (domain_parms): Add standard brainpool curves. + +2007-04-18 Werner Koch + + * ecc.c (generate_curve): Implement alias mechanism. + + * pubkey.c (sexp_elements_extract_ecc): New. + (sexp_to_key): Add special case for ecc. + (sexp_to_key, sexp_to_sig, sexp_to_enc, gcry_pk_genkey): Replace + name_terminated stuff by a call to _gcry_sexp_nth_string. + (gcry_pk_get_keygrip): Ditto. + +2007-04-16 Werner Koch + + * ecc.c (_gcry_ecc_generate): Renamed DUMMY to CURVE and use it. + +2007-04-13 Marcus Brinkmann + + * ac.c (ac_data_construct): Cast const away to suppress compiler + warning. + + * ecc.c (ecc_generate): Avoid compiler warning for unused argument + DUMMY. + (ecc_verify): Avoid compiler warning for unused arguments CMP and + OPAQUEV. + +2007-04-06 Werner Koch + + * sha1.c (oid_spec_sha1): Add another oid from X9.62. + +2007-03-28 Werner Koch + + * pubkey.c (gcry_pk_genkey): Do not issue misc-key-info if it is + empty. + (gcry_pk_genkey): New parameter "curve". + + * ecc.c: Entirely rewritten with only a few traces of the old + code left. + (_gcry_ecc_generate): New. + (generate_key) New arg NAME. + (generate_curve): Ditto. Return actual number of NBITS. + +2007-03-26 Werner Koch + + * pubkey.c (gcry_pk_genkey): Increase size of SKEY array and add a + runtime bounds check. + +2007-03-23 Werner Koch + + * ecc.c (ecc_ctx_init, ecc_ctx_free, ecc_mod, ecc_mulm): New. + (duplicate_point, sum_points, escalar_mult): Don't use a + copy of base->p. Replaced all mpi_mulm by ecc_mulm so that we can + experiment with different algorithms. + (generate_key, check_secret_key, sign, verify): Initialize a + computation context for use by ecc_mulm. + +2007-03-22 Werner Koch + + * pubkey.c (pubkey_table): Initialize ECC. + * Makefile.am (EXTRA_libcipher_la_SOURCES): Add ecc.c. + * ecc.c: New. Heavily reformatted and changed for use in libgcrypt. + (point_init): New. + (escalar_mult): Make arg R the first arg to be similar to the mpi + functions. + (duplicate_point): Ditto + (sum_points): Ditto + (sign, verify): Remove unneeded copy operations. + (sum_points): Removed memory leaks and optimized some compares. + (verify): Simplified input check. + +2007-03-14 Werner Koch + + * random.c (MASK_LEVEL): Removed macro as it was used only at one + place. Open coded it there. + (gcry_randomize, _gcry_update_random_seed_file) + (_gcry_fast_random_poll): Factor lock code out to .. + (lock_pool, unlock_pool): .. new. + (initialize): Look the pool while allocating. + (read_random_source, do_fast_random_poll): Moved intialization to ... + (initialize): .. here. + (_gcry_enable_quick_random_gen): No more need for initialization. + (is_initialized): Moved this global flag to .. + (initialize): .. here and changed all users to unconditionally call + initialize. + (add_randomness): Remove initalization here. It simply can't + happen. + + * random.c (enum random_origins): Moved to .. + * rand-internal.h: .. here. + * rndunix.c (_gcry_rndunix_gather_random): Use enum in prototype + for ORIGIN and renamed REQUESTOR to ORIGIN. + * rndegd.c (_gcry_rndegd_gather_random): Ditto. + * rndlinux.c (_gcry_rndlinux_gather_random): Ditto. + * rndw32.c (_gcry_rndw32_gather_random): Ditto. + (_gcry_rndw32_gather_random_fast): Ditto. + +2007-03-13 Werner Koch + + * random.c (enum random_origins): New. + (add_randomness): Renamed arg SOURCE to ORIGIN. + (read_random_source): Renamed arg REQUESTOR to ORIGIN. + (getfnc_gather_random): Removed static variable because this + function is only called one and thus we don't need this + optimization. + (_gcry_quick_random_gen): Removed and replaced by.. + (_gcry_enable_quick_random_gen): .. this. It is onlyu used to + enable it and it does not make sense to disable it later. Changed + the only one caller too. + (get_random_bytes): Removed. + (gcry_random_bytes, gcry_random_bytes_secure): Implement in terms + of gcry_randomize. + * random-daemon.c (_gcry_daemon_get_random_bytes): Removed. + +2007-02-23 Werner Koch + + * elgamal.c (generate): Removed unused variable TEMP. + (test_keys): New arg NODIE. + (generate_using_x, _gcry_elg_generate_using_x): New. + * pubkey.c (pubkey_generate): New arg XVALUE and direct call to + the new elgamal generate fucntion. + (gcry_pk_genkey): Parse the new "xvalue" tag. + +2007-02-22 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Handle dynamically allocated + algorithms. Suggested by Neil Dunbar. Fixes bug#596. + + * rndw32.c (_gcry_rndw32_gather_random_fast): Make it return void. + + * cipher.c (gcry_cipher_algo_name): Simplified. + + * random.c: Use the daemon only if compiled with USE_RANDOM_DAEMON. + + * Makefile.am (libcipher_la_SOURCES): Build random-daemon support + only if requested. + +2007-02-21 Werner Koch + + * random.c (rndpool, keypool): Make unsigned. + (mix_pool): Change char* variables to unsigned char*. + (gcry_randomize): Make arg BUFFER a void*. + (gcry_create_nonce): Ditto. + + * rmd160.c (gcry_rmd160_mixblock): Make BUFFER a void*. + (_gcry_rmd160_hash_buffer): Make OUTBUF and BUFFER void*. + * sha1.c (_gcry_sha1_hash_buffer): Ditto. + + * cipher.c (gcry_cipher_encrypt, cry_cipher_decrypt): Change + buffer args to void*. + (gcry_cipher_register): Make ALGORITHM_ID a int *. + + * md.c (md_start_debug): Make SUFFIX a const char*. Use snprintf. + (gcry_md_debug): New. + (gcry_md_ctl): Changed arg BUFFER from unsigned char*. + + * md.c (md_write): Make INBUF a const void*. + (gcry_md_write): Remove needless cast. + * crc.c (crc32_write): Make INBUF a const void* + (update_crc32, crc24rfc2440_write): Ditto. + * sha512.c (sha512_write, transform): Ditto. + * sha256.c (sha256_write, transform): Ditto. + * rmd160.c (rmd160_write, transform): Ditto. + * md5.c (md5_write, transform): Ditto. + * md4.c (md4_write, transform): Ditto. + * sha1.c (sha1_write, transform): Ditto. + + * tiger.c (tiger_write, transform): Ditto. + * whirlpool.c (whirlpool_write, whirlpool_add, transform): Ditto. + + * elgamal.c (elg_names): Change to a const*. + * dsa.c (dsa_names): Ditto. + * rsa.c (rsa_names): Ditto. + * pubkey.c (gcry_pk_lookup_func_name): Make ALIASES a const. + +2007-02-20 Werner Koch + + * rndlinux.c (open_device): Remove unsused arg MINOR. + +2007-01-30 Werner Koch + + * sha256.c (oid_spec_sha256): Add alias from pkcs#1. + * sha512.c (oid_spec_sha512): Ditto. + (oid_spec_sha384): Ditto. + +2006-12-18 Werner Koch + + * rndlinux.c (set_cloexec_flag): New. + (open_device): Set close-on-exit flags. Suggested by Max + Kellermann. Fixes Debian#403613. + + * Makefile.am (AM_CPPFLAGS, AM_CFLAGS): Splitted and merged + Moritz' changes. + (INCLUDES): Removed. + +2006-11-30 Werner Koch + + * serpent.c (byte_swap_32): Remove trailing semicolon. + +2006-11-15 Werner Koch + + * Makefile.am (INCLUDES): Include ../src/ + +2006-11-03 Werner Koch + + * random.c [HAVE_GETTIMEOFDAY]: Included sys/time.h and not + sys/times.h. Reported by Rafaël Carré. + +2006-11-05 Moritz Schulte + + * Makefile.am (AM_CFLAGS): Added -I$(top_builddir)/src so that the + new gcrypt.h is used, not the one installed in the system. + +2006-10-25 Werner Koch + + * primegen.c (prime_generate_internal): Tweaked use of secure + memory and entropy use. Safe unused primes from the pool. Allocate + at least a pool of 30. + (save_pool_prime, get_pool_prime): New. + +2006-10-23 Werner Koch + + * ac.c (_gcry_ac_data_from_sexp): Reset sexp_tmp for failsafe + means. Release sexp_cur if needed. Reported by Dirk Stoecker. + + * pubkey.c (pubkeys_registered_lock): Intialized it. It is not + realy needed because this is a mere initialization to 0 anyway. + Noted by Victor Stinner. + +2006-10-17 Werner Koch + + * dsa.c (_gcry_dsa_generate2): New. + (generate): New arg QBITS. Add sanity checks for reasonable qbits + and nbits. + * pubkey.c (gcry_pk_genkey): Parse an qbits element. + (pubkey_generate): New arg QBITS. Pass it to the DSA generation. + +2006-10-05 Werner Koch + + * md.c (gcry_md_algo_info) : Check that the algo is + available. + +2006-10-04 David Shaw (wk) + + * tiger.c (round): Rename to tiger_round as gcc 4 has a built-in + round function that this conflicts with. + +2006-09-11 Werner Koch + + * rndw32.c (slow_gatherer_windowsNT): While adding data use the + size of the diskPerformance and not its address. Has been fixed in + GnuPG more than a year ago. Noted by Lee Fisher. + +2006-08-30 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Need to allow "ripemd160" here as + this is the canonical name. + +2006-08-29 Hye-Shik Chang (wk) + + * seed.c: New. + +2006-08-03 Werner Koch + + * random-daemon.c (_gcry_daemon_initialize_basics): Don't + initialize the socket. Remove arg SOCKETNAME. + (connect_to_socket): Make sure that daemon is set to -1 on error. + (call_daemon): Initialize the socket on the first call. + (_gcry_daemon_randomize, _gcry_daemon_get_random_bytes) + (_gcry_daemon_create_nonce): New arg SOCKETNAME. + * random.c (initialize): Call new daemon initializator. + (get_random_bytes, gcry_randomize, gcry_create_nonce): Pass socket + name to daemon call and reset allow_daemon on failure. + +2006-07-26 Werner Koch + + * rmd160.c (_gcry_rmd160_mixblock): Add cast to transform call. + + * blowfish.c (selftest): Cast string to usnigned char*. + + * primegen.c (prime_generate_internal): Cast unsigned/char* + mismatch in calling m_out_of_n. + (is_prime): Changed COUNT to unsigned int *. + + * ac.c (_gcry_ac_data_copy): Initialize DATA_MPIS. + + * random.c (gcry_create_nonce): Update the pid after a fork. + Reported by Uoti Urpala. + +2006-07-04 Marcus Brinkmann + + * sha512.c: Fix typo in copyright notice. + +2006-06-21 Werner Koch + + * rsa.c (_gcry_rsa_generate): Replace xcalloc by calloc. + * pubkey.c (gcry_pk_encrypt, gcry_pk_sign): Ditto. + (sexp_to_key, sexp_to_sig, sexp_to_enc, gcry_pk_encrypt) + (gcry_pk_sign, gcry_pk_genkey, gcry_pk_get_keygrip): Ditto. + * md.c (md_copy): Ditto. + +2006-04-22 Moritz Schulte + + * random-daemon.c (_gcry_daemon_initialize_basics): New argument: + SOCKETNAME. Passing on to connect_to_socket() if non-NULL. + (connect_to_socket, writen, readn, call_daemon): New functions. + (_gcry_daemon_randomize, _gcry_daemon_get_random_bytes) + (_gcry_daemon_create_nonce): Call call_daemon(). + (RANDOM_DAEMON_SOCKET): New symbol. + (daemon_socket): New static variable. + + * random.h (_gcry_daemon_initialize_basics): New parameter: + SOCKETNAME. + (_gcry_set_random_daemon_socket): New declaration. + + * random.c (initialize_basics): Pass DAEMON_SOCKET_NAME to + _gcry_daemon_initialize_basics. + (_gcry_set_random_daemon_socket): New function, setting + DAEMON_SOCKET_NAME. + +2006-04-01 Moritz Schulte + + * ac.c (eme_pkcs_v1_5_encode): Use KEY_SIZE directly, no need to + call gcry_ac_key_get_nbits. + (eme_pkcs_v1_5_decode): Likewise. + (ac_es_dencode_prepare_pkcs_v1_5): Fill options_em structure with + key_size. + (_gcry_ac_data_dump, gcry_ac_data_dump): New functions. + (_gcry_ac_data_to_sexp, _gcry_ac_data_from_sexp): More or less + rewritten; changed S-Expression format so that it matches the one + used in pubkey.c. + +2006-03-15 Werner Koch + + * random-daemon.c: New. + * random.c (_gcry_use_random_daemon): New. + (get_random_bytes, gcry_randomize, gcry_create_nonce): Try + diverting to the daemon functions. + +2006-03-14 Werner Koch + + * random.c (lock_seed_file): New. + (read_seed_file, _gcry_update_random_seed_file): Use it. + + * random.c (gcry_create_nonce): Detect a fork and re-seed. + (read_pool): Fixed the fork detection; it used to work only for + multi-threaded processes. + +2006-03-12 Brad Hards (wk) + + * md.c (md_open): Use new variable macpads_Bsize instead of + hardwiring the block size. Changed at all places. + +2006-03-10 Brad Hards (wk, patch 2005-04-22) + + * md.c, sha256.c: Add support for SHA-224. + (sha224_init): New. + +2006-01-18 Brad Hards (wk 2006-03-07) + + * cipher.c (cipher_encrypt, cipher_decrypt, do_ofb_encrypt) + (do_ofb_decrypt, gcry_cipher_open): Implement Output Feedback Mode. + +2005-11-02 Moritz Schulte + + * pubkey.c (gcry_pk_algo_name): Return "?" instead of NULL for + unknown algorithm IDs. + * cipher.c (cipher_algo_to_string): Likewise. + +2005-11-01 Moritz Schulte + + * pubkey.c (gcry_pk_algo_info): Don't forget to break after switch + case. + +2005-09-19 Werner Koch + + * dsa.c (generate): Add preliminary support for 2 and 4 keys. + Return an error code if the key size is not supported. + (_gcry_dsa_generate): Return an error. + +2005-08-22 Werner Koch + + * primegen.c (check_prime): New arg RM_ROUNDS. + (prime_generate_internal): Call it here with 5 rounds as used + before. + (gcry_prime_check): But here with 64 rounds. + (is_prime): Make sure never to use less than 5 rounds. + +2005-04-16 Moritz Schulte + + * ac.c (_gcry_ac_init): New function. + +2005-04-12 Moritz Schulte + + * ac.c (_gcry_ac_io_write, _gcry_ac_io_read): Initialize err to + make the compiler happy. + Always use errno, now that gcry_malloc() is guaranteed to set + errno on failure. + (_gcry_ac_data_to_sexp): Don't forget to goto out after error in + loop. + (_gcry_ac_data_to_sexp): Remove unused variable: mpi_list; + (_gcry_ac_data_to_sexp): Always deallocate sexp_buffer. + (_gcry_ac_data_from_sexp): Don't forget to initialize data_set_new. + (_gcry_ac_data_from_sexp): Handle special case, which is + necessary, since gcry_sexp_nth() does not distinguish between + "element does not exist" and "element is the empty list". + (_gcry_ac_io_init_va): Use assert to make sure that mode and type + are correct. + Use gcry_error_t types where gcry_err_code_t types have been used + before. + +2005-04-11 Moritz Schulte + + * ac.c (_gcry_ac_data_sign_scheme): Don't forget to initialize + buffer. + + * whirlpool.c: New file. + * md.c (digest_table): Add whirlpool. + * Makefile.am (EXTRA_libcipher_la_SOURCES): Added: whirlpool.c. + +2005-03-30 Moritz Schulte + + * ac.c (_gcry_ac_data_from_sexp): Use length of SEXP_CUR, not + length of SEXP; do not forget to set SEXP_TMP to NULL after it has + been released. + + (struct gcry_ac_mpi): New member: name_provided. + (_gcry_ac_data_set): Rename variable `name_final' to `name_cp'; + remove const qualifier; change code to not cast away const + qualifiers; use name_provided member as well. + (_gcry_ac_data_set, _gcry_ac_data_get_name): Use name_provided + member of named mpi structure. + + (gcry_ac_name_to_id): Do not forget to initialize err. + (_gcry_ac_data_get_index): Do not forget to initialize mpi_return; + use gcry_free() instead of free(); remove unnecessary cast; rename + mpi_return and name_return to mpi_cp and name_cp; adjust code. + (ac_data_mpi_copy): Do not cast away const qualifier. + (ac_data_values_destroy): Likewise. + (ac_data_construct): Likewise. + + (ac_data_mpi_copy): Initialize flags to GCRY_AC_FLAG_DEALLOC. + (ac_data_extract): Use GCRY_AC_FLAG_DEALLOC instead of + GCRY_AC_FLAG_COPY. + + (_gcry_ac_io_init_va, _gcry_ac_io_init, gcry_ac_io_init) + (gcry_ac_io_init_va, _gcry_ac_io_write, _gcry_ac_io_read) + (_gcry_ac_io_read_all, _gcry_ac_io_process): New functions. + (gry_ac_em_dencode_t): Use gcry_ac_io_t in prototype instead of + memroy strings directly; adjust encode/decode functions to use io + objects. + (emsa_pkcs_v1_5_encode_data_cb): New function ... + (emsa_pkcs_v1_5_encode): ... use it here. + (ac_data_dencode): Use io objects. + (_gcry_ac_data_encode, _gcry_ac_data_decode, gcry_ac_data_encode) + (gcry_ac_data_decode): Likewise. + (_gcry_ac_data_encrypt_scheme, gcry_ac_data_encrypt_scheme) + (_gcry_ac_data_decrypt_scheme, gcry_ac_data_decrypt_scheme) + (_gcry_ac_data_sign_scheme, gcry_ac_data_sign_scheme) + (_gcry_ac_data_verify_scheme, gcry_ac_data_verify_scheme): + Likewise. + +2005-03-23 Werner Koch + + * rndw32.c (_gcry_rndw32_gather_random_fast): While adding data + use the size of the object and not the one of its address. Bug + reported by Sascha Kiefer. + +2005-03-19 Moritz Schulte + + * cipher.c (do_cbc_encrypt): Be careful to not overwrite data, + which is to be used later on. This happend, in case CTS is + enabled and OUTBUF is equal to INBUF. + +2005-02-25 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Allow for shadowed-private-key. + +2005-02-13 Moritz Schulte + + * serpent.c: Updated from 1.2 branch: + + s/u32_t/u32/ and s/byte_t/byte/. Too match what we have always + used and are using in all other files too + (serpent_test): Moved prototype out of a fucntion. + +2005-02-07 Moritz Schulte + + * ac.c: Major parts rewritten. + * pubkey.c (_gcry_pk_get_elements): New function. + +2004-12-09 Werner Koch + + * serpent.c (serpent_setkey): Moved prototype of serpent_test to + outer scope. + +2004-09-11 Moritz Schulte + + * pubkey.c (pubkey_table): Added an alias entry for GCRY_PK_ELG_E. + +2004-08-23 Moritz Schulte + + * ac.c: Do not include . + * rndegd.c: Likewise. + * sha1.c: Likewise. + * rndunix.c: Likewise. + * rndlinux.c: Likewise. + * rmd160.c: Likewise. + * md5.c: Likewise. + * md4.c: Likewise. + * cipher.c: Likewise. + * crc.c: Likewise. + * blowfish.c: Likewise. + + * pubkey.c (dummy_generate, dummy_check_secret_key) + (dummy_encrypt, dummy_decrypt, dummy_sign, dummy_verify): Return + err code GPG_ERR_NOT_IMPLEMENTED instead of aborting through + log_bug(). + (dummy_get_nbits): Return 0 instead of aborting though log_bug(). + +2004-08-19 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Changed the zero random byte + substituting code to actually do clever things. Thanks to + Matthias Urlichs for noting the implementation problem. + +2004-08-09 Moritz Schulte + + * pubkey.c (gcry_pk_sign): Fixed memory leak; fix provided by + Modestas Vainius. + +2004-07-16 Werner Koch + + * rijndael.c (do_encrypt): Fix alignment problem. Bugs found by + Matthias Urlichs. + (do_decrypt): Ditto. + (keySched, keySched2): Use 2 macros along with unions in the key + schedule context. + +2004-07-14 Moritz Schulte + + * rsa.c (_gcry_rsa_decrypt): Don't forget to free "a". Thanks to + Nikos Mavroyanopoulos. + +2004-05-09 Werner Koch + + * random.c (read_pool): Mix the PID in to better protect after a + fork. + +2004-07-04 Moritz Schulte + + * serpent.c: Use "u32_t" instead of "unsigned long", do not + declare S-Box variables as "register". Fixes failure on + OpenBSD/sparc64, reported by Nikolay Sturm. + +2004-05-07 Werner Koch + + * random.c (initialize): Factored out some code to .. + (initialize_basics): .. new function. + (_gcry_random_initialize): Just call initialize_basics unless the + new arg FULL is set to TRUE. + (_gcry_fast_random_poll): Don't do anything unless the random + system has been really initialized. + +2004-05-07 Moritz Schulte + + * ac.c (gcry_ac_open): Do not dereference NULL pointer. Reported + by Umberto Salsi. + +2004-02-20 Werner Koch + + * primegen.c (check_prime): New args CB_FUNC and CB_ARG; call them + at different stages. Pass these arguments through all callers. + +2004-02-06 Werner Koch + + * des.c: Add a new OID as used by pkcs#12. + + * rfc2268.c: New. Taken from libgcrypt. + * cipher.c: Setup the rfc2268 algorithm. + +2004-01-25 Moritz Schulte + + * primegen.c (prime_generate_internal): Do not forget to free + `q_factor'; fixed by Brieuc Jeunhomme. + (prime_generate_internal): Do not forget to free `prime'. + +2004-01-14 Moritz Schulte + + * ac.c (gcry_ac_data_set): New argument: flags; slightly + rewritten. + (gcry_ac_data_get_name, gcry_ac_data_get_index): Likewise. + (gcry_ac_key_pair_generate): New argument: misc_data; modified + order of arguments. + (gcry_ac_key_test): New argument: handle. + (gcry_ac_key_get_nbits, gcry_ac_key_get_grip): Likewise. + Use GCRY_AC_FLAG_NO_BLINDING instead of + GCRY_AC_DATA_FLAG_NO_BLINDING. + (gcry_ac_mpi): New member: flags. + (gcry_ac_data_search, gcry_ac_data_add): Removed functions. + +2003-12-22 Werner Koch + + * primegen.c (is_prime): Release A2. + +2003-12-19 Werner Koch + + * md.c: Moved a couple of functions down below the data structure + definitions. + (struct gcry_md_context): New field ACTUAL_HANDLE_SIZE. + (md_open): Set it here. + (strcut gcry_md_list): New field ACTUAL_STRUCT_SIZE. + (md_enable): Set it here. + (md_close): Wipe the context memory. + secure memory. + * cipher.c (struct gcry_cipher_handle): New field ACTUAL_HANDLE_SIZE. + (gcry_cipher_open): Set it here. + (gcry_cipher_close): Use it to always wipe out the handle data. + + * ac.c (gcry_ac_open): Make sure HANDLE gets initialized even when + the function is not successful. + (gcry_ac_close): Allow a NULL handle. + (gcry_ac_key_destroy, gcry_ac_key_pair_destroy): Ditto. + (gcry_ac_key_get_grip): Return INV_OBJ on error. + + * primegen.c (prime_generate_internal): Fixed error code for + failed malloc. Replaced the !err if chain by gotos. + (gcry_prime_group_generator): Remove the extra sanity check. + + * md.c: Minor code and comment cleanups. + +2003-12-16 Werner Koch + + * primegen.c (gen_prime): Doc fix. Thanks to Newton Hammet. + +2003-12-11 Werner Koch + + * rndunix.c (slow_poll): Don't use #warning but #error. + + * rndegd.c: Changed indentation. + (my_make_filename): Removd the var_arg cruft becuase we + don't need it here. Changed caller. + + * rndlinux.c: Changed indentation. + (open_device): Remove the superfluous stat call and clarify + comment. + + * rsa.c: Changed indentation. + (secret): Use the standard algorithm if p, q and u are not + available. + (rsa_blind, rsa_unblind): Renamed from _gcry_rsa_blind, + _gcry_rsa_unblind and moved more to the top. + + * md4.c: Changed indentation. Removed unnecessary casts. + * md5.c, rmd160.c, sha1.c, tiger.c: Ditto. + * rijndael.c, twofish.c: Ditto. + * serpent.c: Removed unnecessary casts. + * sha256.c, sha512.c: Ditto. + +2003-12-09 Werner Koch + + * dsa.c: Unified indentation style. + * elgamal.c: Ditto. + * des.c (des_key_schedule): Code beautifications. + * blowfish.c: Changed indentation style. + * cast5.c (do_cast_setkey): Ditto. + + * pubkey.c (gcry_pk_encrypt): Replaced the chain of if(!err) tests + by straightforward gotos. Other cleanups. + (gcry_pk_decrypt): Ditto. + (gcry_pk_sign): Ditto. + (gcry_pk_verify): Ditto. + (gcry_pk_genkey): Ditto. Use strtoul instead of strtol. + (gcry_pk_ctl): Use GPG_ERR_INV_ARG to indicate bad arguments. + +2003-12-07 Werner Koch + + * pubkey.c (gcry_pk_register_default): Undef the helper macro. + (gcry_pk_map_name): Allow NULL for string. + (sexp_to_key): Use memcpy and not strncpy. Use gcry_free and not + free. + (sexp_to_sig): Ditto. + (sexp_to_enc): Ditto. Replaced the chain of if(!err) tests by + straightforward gotos. + +2003-12-05 Werner Koch + + * cipher.c: Documentation cleanups. + (gcry_cipher_mode_from_oid): Allow NULL for STRING. + +2003-12-03 Werner Koch + + * elgamal.c (sign, do_encrypt, gen_k): Make sure that a small K is + only used for encryption. + +2003-11-18 Werner Koch + + * random.h (rndw32_set_dll_name): Removed unused prototype. + + * Makefile.am (EXTRA_DIST): Added Manifest. + +2003-11-11 Werner Koch + + * Manifest: New. + +2003-11-04 Werner Koch + + * md.c (gcry_md_hash_buffer): Use shortcut for SHA1 + * sha1.c (_gcry_sha1_hash_buffer): New. + + * random.c: Reformatted most functions. + (mix_pool): Moved the failsafe_digest from global + scope to here. + (do_fast_random_poll): Use the generic fucntions even if a fast + gathering function has been used. + (read_pool): Detect a fork and retry. + (gcry_randomize, get_random_bytes): Don't distinguish anymore + between weak and strong random. + (gcry_create_nonce): New. + +2003-10-31 Werner Koch + + * rndw32.c (slow_gatherer_windowsNT): Use a plain buffer for the + disk performance values and not the W32 API structure. + + * dsa.c (verify): s/exp/ex/ due to shadowing of a builtin. + * elgamal.c (verify): Ditto. + + * ac.c (gcry_ac_data_get_index): s/index/idx/ + (gcry_ac_data_copy_internal): Remove the cast in _gcry_malloc. + (gcry_ac_data_add): Must use gcry_realloc instead of realloc. + * pubkey.c (sexp_elements_extract): s/index/idx/ as tribute to the + forehackers. + (gcry_pk_encrypt): Removed shadowed definition of I. Reordered + arguments to malloc for clarity. + (gcry_pk_sign, gcry_pk_genkey): Ditto. + * primegen.c (prime_generate_internal): s/random/randomlevel/. + +2003-10-27 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Don't forget to deallocate pkey. + +2003-10-27 Werner Koch + + * random.c (gcry_random_add_bytes): Return if buflen is zero to + avoid gcc warning about unsed parameter. + (MASK_LEVEL): Simplified; does now work for signed and unsigned + w/o warnings. + + * md.c (md_start_debug): Removed the const from SUFFIX, because + this function is called from the control fucntion which does not + require const. + + Prefixed all (pubkey,digest,cipher}_spec_* globale variables with + _gcry_. + + * ac.c (ac_key_identifiers): Made static. + + * random.c (getfnc_gather_random,getfnc_fast_random_poll): Move + prototypes to .. + * rand-internal.h: .. here + * random.c (getfnc_gather_random): Include rndw32 gatherer. + * rndunix.c, rndw32.c, rndegd.c: Include them here. + * rndlinux.c (_gcry_rndlinux_gather_random): Prepend the _gcry_ + prefix. Changed all callers. + * rndegd.c (_gcry_rndegd_gather_random): Likewise. + (_gcry_rndegd_connect_socket): Likewise. + * rndunix.c (_gcry_rndunix_gather_random): Likewise. + (waitpid): Made static. + * rndw32.c: Removed the old and unused winseed.dll cruft. + (_gcry_rndw32_gather_random_fast): Renamed from + gather_random_fast. + (_gcry_rndw32_gather_random): Renamed from gather_random. Note, + that the changes 2003-04-08 somehow got lost. + + * sha512.c (sha512_init, sha384_init): Made static. + + * cipher.c (do_ctr_decrypt): Removed "return" from this void + function. + +2003-10-24 Moritz Schulte + + * serpent.c: Fix an issue on big-endian systems. + + * rndw32.c: Removed IS_MODULE -cruft. + * rndlinux.c (rndlinux_gather_random): Likewise. + +2003-10-10 Werner Koch + + * primegen.c (gen_prime): Bail out if NBITS is less than 16. + (prime_generate_internal): Initialize prime variable to suppress + compiler warning. Check pbits, initialize qbits when passed as + zero. + + * primegen.c (prime_generate_internal): New arg + ALL_FACTORS. Changed all callers. + (gcry_prime_generate): Make the factors arg optional. Request + all_factors. Make sure PRIME is set to NULL even on error. + (gcry_prime_group_generator): New. + (gcry_prime_release_factors): New. + +2003-10-06 Werner Koch + + * primegen.c (gen_prime): Assert that NBITS is never zero, it + would cause a segv. + +2003-09-28 Moritz Schulte + + * ac.c: Include "cipher.h". + +2003-09-27 Moritz Schulte + + * rndegd.c (do_read): Return nread instead of nbytes; thanks to + Michael Caerwyn. + +2003-09-04 Werner Koch + + * pubkey.c (_gcry_pk_aliased_algo_name): New. + * ac.c (gcry_ac_open): Use it here. + + * Makefile.am (EXTRA_libcipher_la_SOURCES): Add serpent.c + +2003-09-02 Moritz Schulte + + * primegen.c (gcry_prime_check, gcry_prime_generate): New + functions. + (prime_generate_internal): New function, based on + _gcry_generate_elg_prime. + (_gcry_generate_elg_prime): Rewritten as a wrapper for + prime_generate_internal. + +2003-08-28 Werner Koch + + * pubkey.c (gcry_pk_encrypt): Don't include the flags list in the + return value. This does not make sense and breaks any programs + parsing the output strictly (e.g. current gpgsm). + (gcry_pk_encrypt): If aliases for the algorithm name exists, take + the first one instead of the regular name to adhere to SPKI + conventions. + (gcry_pk_genkey): Ditto. + (gcry_pk_sign): Ditto. Removed unused KEY_ALGO_NAME. + +2003-08-19 Moritz Schulte + + * cipher.c: Add support for Serpent + * serpent.c: New file. + +2003-08-10 Moritz Schulte + + * rsa.c (_gcry_rsa_blind, _gcry_rsa_unblind): Declare static. + +2003-08-09 Timo Schulz + + * random.c (getfnc_gather_random): Don't check NAME_OF_DEV_RANDOM + two times, but also the NAME_OF_DEV_URANDOM device. + +2003-08-08 Moritz Schulte + + * pubkey.c (sexp_to_enc): Fixed extraction of S-Expression: do not + fail if no `flags' sub S-Expression is found. + +2003-07-27 Werner Koch + + * md.c (gcry_md_lookup_func_oid): Allow for empty OID lists. + +2003-07-23 Moritz Schulte + + * ac.c (gcry_ac_data_construct): New argument: include_flags, only + include `flags' S-expression, if include_flags is true. Adjust + callers. Thanks for triggering a bug caused by `flags' + sub-S-expression where they are not expected to Ralf Schneider. + +2003-07-21 Moritz Schulte + + * pubkey.c (gcry_pk_lookup_func_name): Use new member name + `aliases' instead of `sexp_names'. + + * ac.c (gcry_ac_key_data_get): New function. + + * cipher.c (gcry_cipher_lookup_func_name): Fix return value. + +2003-07-20 Moritz Schulte + + * blowfish.c: Adjusted for new gcry_cipher_spec_t structure. + * cast5.c: Likewise. + * twofish.c: Likewise. + * arcfour.c: Likewise. + * rijndael.c (rijndael_oids, rijndael192_oids, rijndael256_oids): + New variables, adjust for new gcry_cipher_spec_t structure. + * des.c (oids_tripledes): New variable, adjust for new + gcry_cipher_spec_t structure. + + * md.c (oid_table): Removed. + + * tiger.c (oid_spec_tiger): New variable. + (digest_spec_tiger): Adjusted for new gry_md_spec_t structure. + + * sha512.c (oid_spec_sha512): New variable. + (digest_spec_sha512): Adjusted for new gry_md_spec_t structure. + + * sha512.c (oid_spec_sha384): New variable. + (digest_spec_sha384): Adjusted for new gry_md_spec_t structure. + + * sha256.c (oid_spec_sha256): New variable. + (digest_spec_sha256): Adjusted for new gry_md_spec_t structure. + + * sha1.c (oid_spec_sha1): New variable. + (digest_spec_sha1): Adjusted for new gry_md_spec_t structure. + + * rmd160.c (oid_spec_rmd160): New variable. + (digest_spec_rnd160): Adjusted for new gry_md_spec_t structure. + + * md5.c (oid_spec_md5): New variable. + (digest_spec_md5): Adjusted for new gry_md_spec_t structure. + + * md4.c (oid_spec_md4): New variable. + (digest_spec_md4): Adjusted for new gry_md_spec_t structure. + + * crc.c (digest_spec_crc32, digest_spec_crc32_rfc1510, + digest_spec_crc32_rfc2440): Adjusted for new gry_md_spec_t + structure. + +2003-07-19 Moritz Schulte + + * md.c (gcry_md_lookup_func_oid): New function. + (search_oid): New function, copied from cipher.c. + (gcry_md_map_name): Adjust for new search_oid_interface. + + * cipher.c (oid_table): Removed table. + (gcry_cipher_lookup_func_oid): New function. + (search_oid): Rewritten to use the module functions. + (gcry_cipher_map_name): Adjust for new search_oid interface. + (gcry_cipher_mode_from_oid): Likewise. + +2003-07-18 Werner Koch + + * md.c (gcry_md_hash_buffer): Convert ERR to gpg_error_t in + gpg_strerror. + +2003-07-14 Moritz Schulte + + * cipher.c (gcry_cipher_lookup_func_name): Also check the cipher + name aliases, not just the primary name. + (gcry_cipher_map_name): Remove kludge for aliasing Rijndael to + AES. + + * arcfour.c, blowfish.c, cast5.c, des.c, twofish.c: Adjust cipher + specification structures. + + * rijndael.c (rijndael_names, rijndael192_names, + rijndael256_names): New variables, use them in the cipher + specifications. + + * rmd160test.c: Removed file. + + * ac.c, arcfour.c, blowfish.c, cast5.c, cipher.c, des.c, dsa.c, + elgamal.c, md.c, pubkey.c, random.c, rijndael.c, rsa.c, twofish.c: + Used gcry_err* wrappers for libgpg symbols. + + * primegen.c (gen_prime): Correct the order arguments to + extra_check. + +2003-07-12 Moritz Schulte + + * ac.c: Replaced all public occurences of gpg_error_t with + gcry_error_t. + * cipher.c: Likewise. + * md.c: Likewise. + * pubkey.c: Likewise. + * random.c: Likewise. + + * cipher.c: Added support for TWOFISH128. + +2003-07-08 Moritz Schulte + + * ac.c (gcry_ac_data_copy_internal): New function, based on + gcry_ac_data_copy. + (gcry_ac_data_copy): Made public, use gcry_ac_data_copy_internal. + (gcry_ac_key_init): Use gcry_ac_data_copy_internal. + +2003-07-07 Moritz Schulte + + * ac.c (gcry_ac_data_set): Only release old MPI value if it is + different from the new value. Bug reported by Simon Josefsson + . + + * pubkey.c (gcry_pk_list): New function. + * md.c (gcry_md_list): New function. + + * ac.c (gcry_ac_key_pair_generate): Fix calculation of format + string size. + +2003-07-05 Moritz Schulte + + * md.c: Named struct of digest_table `digest_table_entry'. + (digest_table_entry): New member: algorithm; filled in. + (digest_table_entry): Removed unused member: flags. + (gcry_md_register): New argument: algorithm_id, filled in. + (gcry_md_register_default): Used algorithm ID from module + structure. + (gcry_md_map_name): Likewise. + (md_enable): Likewise. + (md_read): Likewise. + (gcry_md_info): Likewise. + + * pubkey.c: Named truct for pubkey_table `pubkey_table_entry'. + (pubkey_table_entry): New member: algorithm; filled in. + (gcry_pk_register_default): Used algorithm ID from pubkey_table. + (gcry_pk_register): New argument: algorithm_id, filled in. + (gcry_pk_map_name): Used algorithm ID from module structure. + (gcry_pk_decrypt): Likewise. + (gcry_pk_encrypt): Likewise. + (gcry_pk_verify): Likewise. + (gcry_pk_sign): Likewise. + (gcry_pk_testkey): Likewise. + (gcry_pk_genkey): Likewise. + (gcry_pk_get_nbits): Likewise. + (sexp_to_key): Removed unused variable: algo. + (sexp_to_sig): Likewise. + + * cipher.c: Named struct for cipher_table `cipher_table_entry'. + (cipher_table_entry): New member: algorithm; filled in. + (gcry_cipher_register_default): Used algorithm ID from + cipher_table. + (gcry_cipher_register): New argument: algorithm_id, filled in. + (gcry_cipher_map_name): Used algorithm ID from module structure. + + * arcfour.c (cipher_spec_arcfour): Removed algorithm ID. + * blowfish.c (cipher_spec_blowfish): Likewise. + * cast5.c (cipher_spec_cast5): Likewise. + * crc.c (digest_spec_crc32): Likewise. + * crc.c (digest_spec_crc32_rfc1510): Likewise. + * crc.c (digest_spec_crc32_rfc2440): Likewise. + * des.c (cipher_spec_des): Likewise. + * des.c (cipher_spec_tripledes): Likewise. + * dsa.c (pubkey_spec_dsa): Likewise. + * elgamal.c (pubkey_spec_elg): Likewise. + * md4.c (digest_spec_md4): Likewise. + * md5.c (digest_spec_md5): Likewise. + * aes.c (cipher_spec_aes): Likewise. + * aes.c (cipher_spec_aes192): Likewise. + * aes.c (cipher_spec_aes256): Likewise. + * rsa.c (pubkey_spec_rsa): Likewise. + * sha1.c (digest_spec_sha1): Likewise. + * sha256.c (digest_spec_sha256): Likewise. + * sha512.c (digest_spec_sha512): Likewise. + * tiger.c (digest_spec_tiger): Likewise. + * twofish.c (cipher_spec_twofish): Likewise. + * twofish.c (cipher_spec_twofish128): Likewise. + + * Makefile.am (EXTRA_libcipher_la_SOURCES): Fix list of source + files; reported by Simon Josefsson . + + * pubkey.c: Replaced all occurences of `id' with `algorithm', + since `id' is a keyword in obj-c. + * md.c: Likewise. + * cipher.c: Likewise. + + * crc.c, md4.c, md5.c, rmd160.c, sha1.c, sha256.c, tiger.c: + Replaced all occurences of gcry_digest_spec_t with gcry_md_spec_t. + + * dsa.c, rsa.c, elgamal.c: Replaced all occurencens of + gcry_pubkey_spec_t with gcry_pk_spec_t. + + * md.c: Replaced all occurences of gcry_digest_spec_t with + gcry_md_spec_t. + (gcry_digest_register_default): Renamed to ... + (gcry_md_register_default): ... this; adjusted callers. + (gcry_digest_lookup_func_name): Renamed to ... + (gcry_md_lookup_func_name): ... this; adjusted callers. + (gcry_digest_lookup_name): Renamed to ... + (gcry_md_lookup_name): ... this; adjusted callers. + (gcry_digest_register): Renamed to ... + (gcry_md_register): ... this. + (gcry_digest_unregister): Renamed to ... + (gcry_md_unregister): ... this. + + * pubkey.c (gcry_pubkey_register): Renamed to ... + (gcry_pk_register): ... this. + (gcry_pubkey_unregister): Renamed to ... + (gcry_pk_unregister): ... this. + Replaced all occurences of gcry_pubkey_spec_t with gcry_pk_spec_t. + (gcry_pubkey_register_default): Renamed to ... + (gcry_pk_register_default): ... this; adjusted callers. + (gcry_pubkey_lookup_func_name): Renamed to ... + (gcry_pk_lookup_func_name): ... this; adjusted callers. + (gcry_pubkey_lookup_name): Renamed to ... + (gcry_pk_lookup_name): ... this; adjusted callers. + + * md.c (gcry_md_hash_buffer): Fix error checking. Thanks to Simon + Josefsson . + +2003-07-04 Moritz Schulte + + * cipher.c (gcry_cipher_list): New function. + +2003-07-01 Moritz Schulte + + * pubkey.c (sexp_to_sig): Accept a `flags' S-expression to be more + consistent with sexp_to_enc. + +2003-06-30 Moritz Schulte + + * Makefile.am (libcipher_la_SOURCES): Added: ac.c. + + * pubkey.c (_gcry_pk_module_lookup): New function. + (_gcry_pk_module_release): New function. + +2003-06-29 Moritz Schulte + + * ac.c: New file. + +2003-06-26 Werner Koch + + * md.c (gcry_md_hash_buffer): Trigger BUG correcly with new API. + +2003-06-19 Werner Koch + + * md.c (gcry_md_is_enabled): Fixed. + +2003-06-18 Werner Koch + + * cipher.c (gcry_cipher_get_algo_keylen): New. + (gcry_cipher_get_algo_blklen): New. + +2003-06-18 Moritz Schulte + + * arcfour.c, cipher.c, blowfish.c, md.c, cast5.c, pubkey.c, crc.c, + des.c, dsa.c, elgamal.c, md4.c, md5.c, random.c, rijndael.c, + rmd160.c, rsa.c, sha1.c, sha256.c, sha512.c, tiger.c, twofish.c: + Replaced older types GcryDigestSpec, GcryCipherSpec and + GcryPubkeySpec with newer types: gcry_digest_spec_t, + gcry_cipher_spec_t and gcry_pubkey_spec_t. + + * md.c (gcry_digest_id_new): Removed function. + (gcry_digest_register): Removed code for generating a new module + ID. + + * pubkey.c (gcry_pubkey_id_new): Removed function. + (gcry_pubkey_register): Removed code for generating a new module + ID. + + * cipher.c, md.c, pubkey.c: Replace old type GcryModule with newer + one: gcry_module_t. + (gcry_cipher_id_new): Removed function. + (gcry_cipher_register): Removed code for generating a new module + ID. + + * cipher.c (gcry_cipher_register): Adjust call to + _gcry_module_add. + (gcry_cipher_register_default): Likewise. + * pubkey.c (gcry_pubkey_register_default): Likewise. + (gcry_pubkey_register): Likewise. + * md.c (gcry_digest_register_default): Likewise. + (gcry_digest_register): Likewise. + + * md.c (gcry_digest_lookup_func_id): Removed function. + (gcry_digest_lookup_id): Likewise. + (gcry_digest_id_new): Use _gcry_module_lookup_id instead of + gcry_digest_lookup_id. + (digest_algo_to_string): Likewise. + (check_digest_algo): Likewise. + (md_enable): Likewise. + (md_digest_length): Likewise. + (md_asn_oid): Likewise. + + * pubkey.c (gcry_pubkey_lookup_id): Removed function. + (gcry_pubkey_lookup_func_id): Likewise. + (gcry_pubkey_id_new): Use _gcry_module_lookup_id instead of + gcry_pubkey_id_new. + (gcry_pk_algo_name): Likewise. + (disable_pubkey_algo): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_get_npkey): Likewise. + (pubkey_get_nskey): Likewise. + (pubkey_get_nsig): Likewise. + (pubkey_get_nenc): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (gcry_pk_algo_info): Likewise. + + * cipher.c (gcry_cipher_lookup_func_id): Removed function. + (gcry_cipher_lookup_id): Likewise. + (cipher_algo_to_string): use _gcry_module_lookup_id instead of + gcry_cipher_lookup_id. + (disable_cipher_algo): Likewise. + (check_cipher_algo): Likewise. + (cipher_get_blocksize): Likewise. + (gcry_cipher_open): Likewise. + (gcry_cipher_id_new): Likewise. + +2003-06-17 Moritz Schulte + + * Makefile.am (GCRYPT_MODULES): Set to @GCRYPT_CIPHERS@, + @GCRYPT_PUBKEY_CIPHERS@, @GCRYPT_DIGESTS@ and @GCRYPT_RANDOM@. + (libcipher_la_DEPENDENCIES): Set to $(GCRYPT_MODULES). + (libcipher_la_LIBADD): Likewise. + (AM_CFLAGS): Added: @GPG_ERROR_CFLAGS@. + (EXTRA_libcipher_la_SOURCES): Added all conditional sources. + + * md.c (md_open): Use _gcry_fast_random_poll instead of + fast_random_poll. + * cipher.c (gcry_cipher_open): Likewise. + + * random.h (fast_random_poll): Removed macro. + + * blowfish.c, md4.c, md5.c, rmd160.c, sha1.c, sha256.c, sha512.c, + tiger.c: Use Autoconf's WORDS_BIGENDIAN instead of our own + BIG_ENDIAN_HOST. + +2003-06-16 Moritz Schulte + + * random.c (getfnc_gather_random): Do not special-case + USE_ALL_RANDOM_MODULES, make it the default. + + * dsa.c: Replace last occurences of old type names with newer + names (i.e. replace MPI with gcry_mpi_t). + * elgamal.c: Likewise. + * primegen.c: Likewise. + * pubkey.c: Likewise. + * rsa.c: Likewise. + +2003-06-14 Moritz Schulte + + * des.c (des_setkey): Add selftest check. + (tripledes_set3keys): Likewise. + (do_tripledes_setkey): Remove selftest check. + (do_des_setkey): Likewise. + +2003-06-11 Moritz Schulte + + * md.c (_gcry_md_init): New function. + * cipher.c (_gcry_cipher_init): New function. + * pubkey.c (_gcry_pk_init): New function. + +2003-06-13 Werner Koch + + * md.c (gcry_md_get_algo): Reverted to old API. This is a + convenience function anyway and error checking is not approriate. + (gcry_md_is_secure): New. + (gcry_md_is_enabled): New. + +2003-06-12 Werner Koch + + * cipher.c (gcry_cipher_open): Make sure HANDLE is set to NULL on + error. + +2003-06-11 Werner Koch + + * md.c (gcry_md_open): Make sure H receives either NULL or an + valid handle. + (gcry_md_copy): Swapped arguments so that it is more in lione with + md_open and most other API fucntions like memcpy (destination + comes first). Make sure HANDLE is set to NULL on error. + + * rijndael.c (do_encrypt): Hack to force correct alignment. It + seems not to be not sufficient, though. We should rework this + fucntions and remove all these ugly casts. Let the compiler + optimize or have an assembler implementation. + +2003-06-09 Moritz Schulte + + * Makefile.am: Removed rules serpent, since that is not commited + yet. + +2003-06-08 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Improve calculation for size of the + format string. + +2003-06-07 Moritz Schulte + + * arcfour.c, bithelp.h, blowfish.c, cast5.c, cipher.c, crc.c, + des.c, dsa.c, elgamal.c, md4.c, md5.c, md.c, primegen.c, pubkey.c, + rand-internal.h, random.c, random.h, rijndael.c, rmd160.c, + rmd160test.c, rmd.h, rndeged.c, rndlinux.c, rndunix.c, rndw32.c, + rsa.c, sha1.c, sha256.c, sha512.c, tiger.c, twofish.c: Edited all + preprocessor instructions to remove whitespace before the '#'. + This is not required by C89, but there are some compilers out + there that don't like it. Replaced any occurence of the now + deprecated type names with the new ones. + +2003-06-04 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Construct an arg_list and use + gcry_sexp_build_array instead of gcry_sexp_build. + (gcry_pk_sign): Likewise. + (gcry_pk_genkey): Likewise. + +2003-06-01 Moritz Schulte + + * dsa.c (_gcry_dsa_generate): Do not check wether the algorithm ID + does indeed belong to DSA. + (_gcry_dsa_sign): Likewise. + (_gcry_dsa_verify): Likewise. + (_gcry_dsa_get_nbits): Likewise. + + * elgamal.c (_gcry_elg_check_secret_key): Do not check wether the + algorithm ID does indeed belong to ElGamal. + (_gcry_elg_encrypt): Likewise. + (_gcry_elg_decrypt): Likewise. + (_gcry_elg_sign): Likewise. + (_gcry_elg_verify): Likewise. + (_gcry_elg_get_nbits): Likewise. + (_gcry_elg_generate): Likewise. + + * rsa.c (_gcry_rsa_generate): Do not check wether the algorithm ID + does indeed belong to RSA. + (_gcry_rsa_encrypt): Likewise. + (_gcry_rsa_decrypt): Likewise. + (_gcry_rsa_sign): Likewise. + (_gcry_rsa_verify): Likewise. + (_gcry_rsa_get_nbits): Likewise. + +2003-05-30 Moritz Schulte + + * md.c (md_get_algo): Return zero in case to algorithm is enabled. + + * md.c (gcry_md_info): Adjusted for new no-errno-API. + (md_final): Likewise. + (gcry_md_get_algo): Likewise. + * pubkey.c (gcry_pk_get_keygrip): Likewise. + (gcry_pk_ctl): Likewise. + (gcry_pk_algo_info): Likewise. + * des.c (selftest): Likewise. + +2003-05-29 Moritz Schulte + + * md.c (md_enable): Do not forget to release module on error. + (gcry_md_open): Adjusted for new no-errno-API. + (md_open): Likewise. + (md_copy): Likewise. + (gcry_md_copy): Likewise. + (gcry_md_setkey): Likewise. + (gcry_md_algo_info): Likewise. + + * cipher.c (gcry_cipher_open): Adjusted for new no-errno-API and + also fixed a locking bug. + (gcry_cipher_encrypt): Adjusted for new no-errno-API. + (gcry_cipher_decrypt): Likewise. + (gcry_cipher_ctl): Likewise. + (gcry_cipher_info): Likewise. + (gcry_cipher_algo_info): Likewise. + +2003-05-28 Moritz Schulte + + * md.c (md_enable): Adjusted for libgpg-error. + (gcry_md_enable): Likewise. + (gcry_digest_register_default): Likewise. + (gcry_digest_register): Likewise. + (check_digest_algo): Likewise. + (prepare_macpads): Likewise. + (gcry_md_setkey): Likewise. + (gcry_md_ctl): Likewise. + (gcry_md_get): Likewise. + (gcry_md_algo_info): Likewise. + (gcry_md_info): Likewise. + * dsa.c (_gcry_dsa_generate): Likewise. + (_gcry_dsa_check_secret_key): Likewise. + (_gcry_dsa_sign): Likewie. + (_gcry_dsa_verify): Likewise. + * twofish.c (do_twofish_setkey): Likewise. + (twofish_setkey): Likewise. + * cipher.c (gcry_cipher_register): Likewise. + +2003-05-25 Moritz Schulte + + * rijndael.c (do_setkey): Adjusted for libgpg-error. + (rijndael_setkey): Likewise. + * random.c (gcry_random_add_bytes): Likewise. + * elgamal.c (_gcry_elg_generate): Likewise. + (_gcry_elg_check_secret_key): Likewise. + (_gcry_elg_encrypt): Likewise. + (_gcry_elg_decrypt): Likewise. + (_gcry_elg_sign): Likewise. + (_gcry_elg_verify): Likewise. + * rsa.c (_gcry_rsa_generate): Likewise. + (_gcry_rsa_check_secret_key): Likewise. + (_gcry_rsa_encrypt): Likewise. + (_gcry_rsa_decrypt): Likewise. + (_gcry_rsa_sign): Likewise. + (_gcry_rsa_verify): Likewise. + * pubkey.c (dummy_generate, dummy_check_secret_key, dummy_encrypt, + dummy_decrypt, dummy_sign, dummy_verify): Likewise. + (gcry_pubkey_register): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (sexp_elements_extract): Likewise. + (sexp_to_key): Likewise. + (sexp_to_sig): Likewise. + (sexp_to_enc): Likewise. + (sexp_data_to_mpi): Likewise. + (gcry_pk_encrypt): Likewise. + (gcry_pk_decrypt): Likewise. + (gcry_pk_sign): Likewise. + (gcry_pk_verify): Likewise. + (gcry_pk_testkey): Likewise. + (gcry_pk_genkey): Likewise. + (gcry_pk_ctl): Likewise. + * cipher.c (dummy_setkey): Likewise. + (check_cipher_algo): Likewise. + (gcry_cipher_open): Likewise. + (cipher_setkey): Likewise. + (gcry_cipher_ctl): Likewise. + (cipher_encrypt): Likewise. + (gcry_cipher_encrypt): Likewise. + (cipher_decrypt): Likewise. + (gcry_cipher_decrypt): Likewise. + (gcry_cipher_info): Likewise. + (gcry_cipher_algo_info): Likewise. + * cast5.c (cast_setkey): Likewise. + (do_cast_setkey): Likewise. + * arcfour.c (arcfour_setkey): Likewise. + (do_arcfour_setkey): Likewise. + * blowfish.c (do_bf_setkey): Likewise. + (bf_setkey): Likewise. + * des.c (do_des_setkey): Likewise. + (do_tripledes_setkey): Likewise. + +2003-05-22 Moritz Schulte + + * tiger.c: Merged code ussing the U64_C macro from GnuPG. + + * sha512.c: Likewise. + +2003-05-17 Moritz Schulte + + * pubkey.c (gcry_pk_genkey): Fix type: acquire a lock, instead of + releasing it. + +2003-05-11 Moritz Schulte + + * pubkey.c (gcry_pk_testkey): Call REGISTER_DEFAULT_CIPHERS. + (gcry_pk_ctl): Likewise. + +2003-04-27 Moritz Schulte + + * pubkey.c (gcry_pk_genkey): Release sexp after extracted data has + been used. + + * md.c (gcry_md_get_algo_dlen): Simplified, simply call + md_digest_length to do the job. + + * des.c (do_des_setkey): Check for selftest failure not only + during initialization. + (do_tripledes_setkey): Include check for selftest failure. + + * pubkey.c (gcry_pubkey_register_default): New macro + `pubkey_use_dummy', use it. + + * elgamal.c (elg_names): New variable. + (pubkey_spec_elg): Include elg_names. + + * dsa.c (dsa_names): New variable. + (pubkey_spec_dsa): Include dsa_names. + + * rsa.c (rsa_names): New variable. + (pubkey_spec_rsa): Include rsa_names. + + * pubkey.c (gcry_pubkey_lookup_func_name): Compare name also with + the names listed in `sexp_names'. + +2003-04-24 Moritz Schulte + + * pubkey.c (sexp_to_key): New variables: module, pubkey. Adjusted + to new module interface. + (sexp_to_key): Changend type of argument `retalgo' from `int *' to + `GcryModule **'. Adjusted all callers. Removed argument: + r_algotblidx. + (sexp_to_sig): Changend type of argument `retalgo' from `int *' to + `GcryModule **'. Adjusted all callers. + (sexp_to_enc): Likewise. + + (pubkey_get_npkey, pubkey_get_nskey, pubkey_get_nsig, + pubkey_get_nenc): Use strlen to find out the number. + + * rsa.c: Adjust pubkey_spec_rsa to new internal interface. + * dsa.c: Likewise. + * elgamal.c: Likewise. + +2003-04-17 Moritz Schulte + + * pubkey.c (sexp_elements_extract): New function. + * pubkey.c (sexp_to_key): Removed variable `idx', added `err', use + sexp_elements_extract. + (sexp_to_sig): Likewise. + (sexp_to_enc): Likewise. + + * pubkey.c: Terminate list correctly. + * md.c: Include sha512/sha384 in digest_table. + +2003-04-16 Moritz Schulte + + * Makefile.am: Include support for sha512.c. + + * sha512.c: New file, merged from GnuPG, with few modifications + for libgcrypt. + + * rand-internal.h: Removed declarations for constructor functions. + + * md.c (md_copy): Call _gcry_module_use for incrementing the usage + counter of the digest modules. + + * rsa.c: Do not include "rsa.h". + * dsa.c: Do not include "dsa.h". + * elgamal.c: Do not include "elgamal.h". + * des.c: Do not include "des.h". + * cast5.c: Do not include "cast5.h". + * blowfish.c: Do not include "blowfish.h". + * arcfour.c: Do not include "arcfour.h". + + * Makefile.am (libcipher_la_DEPENDENCIES): Removed. + (libcipher_la_LIBADD): Removed. + Use Automake conditionals for conditional compilation. + +2003-04-13 Moritz Schulte + + * cipher.c (gcry_cipher_open): Call REGISTER_DEFAULT_CIPHERS. + + * md.c (gcry_md_list): New member: module. + (md_enable): New variable: module, changed use of module and + digest. + (md_enable): Initialize member: module. + (md_close): Call _gcry_module_release. + + * cipher.c (gcry_cipher_open): New variable: module, changed use of + module and cipher. + (struct gcry_cipher_handle): New member: module. + (gcry_cipher_open): Initialize member: module. + (gcry_cipher_close): Call _gcry_module_release. + +2003-04-09 Moritz Schulte + + * cipher.c: Include "ath.h". + * md.c: Likewise. + * pubkey.c: Likewise. + + * cipher.c (ciphers_registered_lock): New variable. + * md.c (digests_registered_lock): New variable. + * pubkey.c (pubkeys_registered_lock): New variable. + + * rndlinux.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndlinux_constructor): Removed function. + + * rndegd.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndegd_constructor): Removed function. + + * rndunix.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndunix_constructor): Removed function. + + * rndw32.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndw32_constructor): Removed function. + + * rndegd.c (rndegd_connect_socket): Simplify code for creating the + egd socket address. + (rndegd_connect_socket): Call log_fatal use instead of + g10_log_fatal. + (egd_gather_random): Renamed to ... + (rndegd_gather_random): ... here. + +2003-04-08 Moritz Schulte + + * rndlinux.c: Do not include "dynload.h". + * rndunix.c: Likewise. + * rndw32.c: Likewise. + + * rndegd.c (rndegd_connect_socket): Factored out from ... + (egd_gather_random): here; call it. + (egd_socket): New variable. + (egd_gather_random): Initialize fd with egd_socket, do not declare + fd static. + (do_read): Merged few changes from GnuPG. FIXME - not finished? + Do not include "dynload.h". + + * rndw32.c (gather_random): Renamed to rndw32_gather_random, do + not declare static. + (gather_random_fast): Renamed to rndw32_gather_random_fast, do not + declare static. + + * rndunix.c (gather_random): Renamed to rndunix_gather_random, do + not declare static. + * rndegd.c (gather_random): Renamed to rndegd_gather_random, do + not declare static. + * rndlinux.c (gather_random): Renamed to rndlinux_gather_random, + do not declare static. + +2003-04-07 Moritz Schulte + + * Makefile.am (libcipher_la_SOURCES): Removed construct.c. + (libcipher_la_SOURCES): Added sha1.c, sha256.c, rmd160.c, md4.c, + md5.c, tiger.c and crc.c + (EXTRA_PROGRAMS): Removed sha1, sha256, rmd160, md4, md5, tiger + and crc. Removed definitions: EXTRA_md4_SOURCES, + EXTRA_md5_SOURCES, EXTRA_rmd160_SOURCES, EXTRA_sha1_SOURCES, + EXTRA_sha256_SOURCES, EXTRA_tiger_SOURCES and EXTRA_crc_SOURCES, + BUILT_SOURCES, DISTCLEANFILES. + + * pubkey.c: Do not include "elgamal.h", "dsa.h" and "rsa.h". + + * Makefile.am (libcipher_la_SOURCES): Removed rsa.h, elgamal.h, + dsa.h, des.h, cast5.h, arcfour.h and blowfish.h. + + * rsa.h: Removed file. + * elgamal.h: Removed file. + * dsa.h: Removed file. + * des.h: Removed file. + * cast5.h: Removed file. + * arcfour.h: Removed file. + * blowfish.h: Removed file. + + * Makefile.am (libcipher_la_SOURCES): Removed dynload.c and + dynload.h. + + * rsa.c (pubkey_spec_rsa): New variable. + * dsa.c (pubkey_spec_rsa): New variable. + * elgamal.c (pubkey_spec_elg): New variable. + + * rsa.c (_gcry_rsa_get_info): Removed function. + * elgamal.c (_gcry_elg_get_info): Removed function. + * dsa.c (_gcry_dsa_get_info): Removed function. + + * tiger.c (tiger_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_tiger_constructor): Removed function. + + * sha1.c (sha1_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_sha1_constructor): Removed function. + + * sha256.c (sha256_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_sha256_constructor): Removed function. + + * rmd160.c (rmd160_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rmd160_constructor): Removed function. + + * md5.c (md5_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_md5_constructor): Removed function. + + * md4.c (md4_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_md4_constructor): Removed function. + + * crc.c (crc_get_info): Removed function. + + * arcfour.c (do_arcfour_setkey): Changed type of context argument + to `void *', added local variable for cast, adjusted callers. + (arcfour_setkey): Likewise. + (encrypt_stream): Likewise. + * cast5.c (cast_setkey): Likewise. + (encrypt_block): Likewise. + * rijndael.c (rijndael_setkey): Likewise. + (rijndael_encrypt): Likewise. + (rijndael_decrypt): Likewise. + * twofish.c (twofish_setkey): Likewise. + (twofish_encrypt): Likewise. + (twofish_decrypt): Likewise. + * des.c (do_des_setkey): Likewise. + (do_des_encrypt): Likewise. + (do_des_encrypt): Likewise. + (do_tripledes_encrypt): Likewise. + (do_tripledes_encrypt): Likewise. + * blowfish.c (bf_setkey: Likewise. + (encrypt_block): Likewise. + (decrypt_block): Likewise. + + * arcfour.c (encrypt_stream): Likewise. + + * rijndael.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func) Removed function. + + * twofish.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func) Removed function. + + * cast5.c (CIPHER_ALGO_CAST5): Removed. + + * blowfish.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Removed macros. + (CIPHER_ALGO_BLOWFISH): Removed symbol. + * cast5.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Likewise. + * des.c (selftest_failed): Removed. + (initialized): New variable. + (do_des_setkey): Run selftest, if not yet done. + (FNCCAST_SETKEY, FNCCAST_CRYPT): Removed macros. + + * arcfour.c (_gcry_arcfour_get_info): Removed function. + * blowfish.c (_gcry_blowfish_get_info): Removed function. + * cast5.c (_gcry_cast5_get_info): Removed function. + * des.c (_gcry_des_get_info): Removed function. + * rijndael.c (_gcry_rijndael_get_info): Removed function. + * twofish.c (_gcry_twofish_get_info): Removed function. + + * arcfour.c (cipher_spec_arcfour): New variable. + * twofish.c (cipher_spec_twofish, cipher_spec_twofish128): New + variables. + * rijndael.c (cipher_spec_aes, cipher_spec_aes192, + cipher_spec256): New variables. + * des.c (cipher_spec_des, cipher_spec_tripledes): New variables. + * cast5.c (cipher_spec_cast5): New variable. + * blowfish.c (cipher_spec_blowfish): Likewise. + + * twofish.c: Do not include "dynload.h". + * rijndael.c: Likewise. + * des.c: Likewise. + * cast5.c: Likewise. + * blowfish.c: Likewise. + * cipher.c: Likewise. + * crc.c: Likewise. + * md4.c: Likewise. + * md5.c: Likewise. + * md.c: Likewise. + * pubkey.c: Likewise. + * rijndael.c: Likewise. + * sha1.c: Likewise. + * sha256.c: Likewise. + + * arcfour.c: Include "cipher.h". + * twofish.c: Likewise. + * rijndael.c: Likewise. + * des.c: Likewise. + * cast5.c: Likewise. + * blowfish.c: Likewise. + + * twofish.c (twofish_setkey): Declared argument `key' const. + (twofish_encrypt): Declared argument `inbuf' const. + (twofish_decrypt): Likewise. + + * rijndael.c (rijndael_setkey): Declared argument `key' const. + (rijndael_encrypt): Declared argument `inbuf' const. + (rijndael_decrypt): Likewise. + + * des.c (do_des_setkey): Declared argument `key' const. + (do_tripledes_setkey): Likewise. + (do_des_encrypt): Declared argument `inbuf' const. + (do_des_decrypt): Likewise. + (do_tripledes_encrypt): Likewise. + (do_tripledes_decrypt): Likewise. + + * cast5.c (encrypt_block): Declared argument `inbuf' const. + (decrypt_block): Likewise. + (cast_setkey): Declared argument `key' const. + + * blowfish.c (do_bf_setkey): Declared argument `key' const. + (encrypt_block): Declared argument `inbuf' const. + (encrypt_block): Likewise. + + + + * cipher.c: Remove CIPHER_ALGO_DUMMY related code. + Removed struct cipher_table_s. + Changed definition of cipher_table. + Removed definition of disabled_algos. + (ciphers_registered, default_ciphers_registered): New variables. + (REGISTER_DEFAULT_CIPHERS): New macro. + (dummy_setkey): Declared argument `key' const. + (dummy_encrypt_block): Declared argument `inbuf' const. + (dummy_encrypt_block): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_setkey): Use `unsigned char' instead of `byte'. + (dummy_encrypt_block): Likewise. + (dummy_decrypt_block): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_decrypt_stream): Likewise. + (gcry_cipher_register_default): New function. + (gcry_cipher_lookup_func_id): New function. + (gcry_cipher_lookup_func_name): New function. + (gcry_cipher_lookup_id): New function. + (gcry_cipher_lookup_name): New function. + (gcry_cipher_id_new): New function. + (gcry_cipher_register): New function. + (gcry_cipher_unregister): New function. + (setup_cipher_table): Removed function. + (load_cipher_modules): Removed function. + (gcry_cipher_map_name): Adjusted to use new module management. + (cipher_algo_to_string): Likewise. + (disable_cipher_algo): Likewise. + (check_cipher_algo): Likewise. + (cipher_get_keylen): Likewise. + (cipher_get_blocksize): Likewise. + (gcry_cipher_open): Likewise. + (struct gcry_cipher_handle): Replaced members algo, algo_index, + blocksize, setkey, encrypt, decrypt, stencrypt, stdecrypt with one + member: cipher. + (gcry_cipher_open): Adjusted code for new handle structure. + (cipher_setkey): Likewise. + (cipher_setiv): Likewise. + (cipher_reset): Likewise. + (do_ecb_encrypt): Likewise. + (do_ecb_decrypt): Likewise. + (do_cbc_encrypt): Likewise. + (do_cbc_decrypt): Likewise. + (do_cfb_encrypt): Likewise. + (do_cfb_decrypt): Likewise. + (do_ctr_encrypt): Likewise. + (cipher_encrypt): Likewise. + (gcry_cipher_encrypt): Likewise. + (cipher_decrypt): Likewise. + (gcry_cipher_decrypt): Likewise. + (cipher_sync): Likewise. + (gcry_cipher_ctl): Likewise. + + * pubkey.c: Removed struct pubkey_table_s. + Changed definition of pubkey_table. + Removed definition of disabled_algos. + (pubkeys_registered, default_pubkeys_registered): New variables. + (REGISTER_DEFAULT_PUBKEYS): New macro. + (setup_pubkey_table): Removed function. + (load_pubkey_modules): Removed function. + (gcry_pubkey_register_default): New function. + (gcry_pubkey_lookup_func_id): New function. + (gcry_pubkey_lookup_func_name): New function. + (gcry_pubkey_lookup_id): New function. + (gcry_pubkey_lookup_name): New function. + (gcry_pubkey_id_new): New function. + (gcry_pubkey_register): New function. + (gcry_pubkey_unregister): New function. + (gcry_pk_map_name): Adjusted to use new module management. + (gcry_pk_algo_name): Likewise. + (disable_pubkey_algo): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_get_npkey): Likewise. + (pubkey_get_nskey): Likewise. + (pubkey_get_nsig): Likewise. + (pubkey_get_nenc): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (gcry_pk_get_nbits): Likewise. + (gcry_pk_algo_info): Likewise. + + * md.c: Removed struct md_digest_list_s. + (digest_list): Changed definition. + (digests_registered, default_digests_registered): New variables. + (REGISTER_DEFAULT_DIGESTS): New macro. + (new_list_item): Removed function. + (setup_md_table): Removed function. + (load_digest_module): Removed function. + (gcry_digest_register_default): New function. + (gcry_digest_lookup_func_id): New function. + (gcry_digest_lookup_func_name): New function. + (gcry_digest_lookup_id): New function. + (gcry_digest_lookup_name): New function. + (gcry_digest_id_new): New function. + (gcry_digest_register): New function. + (gcry_digest_unregister): New function. + (GcryDigestEntry): New type. + (struct gcry_md_context): Adjusted type of `list'. + (gcry_md_map_name): Adjusted to use new module management. + (digest_algo_to_string): Likewise. + (check_digest_algo): Likewise. + (md_enable): Likewise. + (md_digest_length): Likewise. + (md_asn_oid): Likewise. + +2003-04-07 Moritz Schulte + + * pubkey.c: Replaced PUBKEY_ALGO_DSA with GCRY_PK_DSA, + PUBKEY_ALGO_RSA with GCRY_PK_RSA and PUBKEY_ALGO_ELGAMAL with + GCRY_PK_ELG. + + * dsa.c: Replaced PUBKEY_ALGO_DSA with GCRY_PK_DSA. + +2003-04-01 Moritz Schulte + + * des.c: Removed checks for GCRY_CIPHER_3DES and GCRY_CIPHER_DES. + +2003-03-31 Moritz Schulte + + * tiger.c (tiger_get_info): Do not declare static. + * sha256.c (sha256_get_info): Likewise. + * sha1.c (sha1_get_info): Likewise. + * rmd160.c (rmd160_get_info): Likewise. + * md5.c (md5_get_info): Likewise. + * md4.c (md4_get_info): Likewise. + * crc.c (crc_get_info): Likewise. + + * md.c (load_digest_module): Call setup_md_table during + initialization. + (new_list_item): Link new element into digest_list. + + * cipher.c (do_ctr_decrypt): Made do_ctr_encrypt act as a wrapper + for do_ctr_encrypt, since these functions are identical. + +2003-03-30 Simon Josefsson + + * cipher.c (struct gcry_cipher_handle): Add counter field. + (gcry_cipher_open): Add CTR. + (cipher_reset): Clear counter field. + (do_ctr_encrypt, do_ctr_decrypt): New functions. + (cipher_encrypt, cipher_decrypt): Call CTR functions. + (gcry_cipher_ctl): Add SET_CTR to set counter. + +2003-03-30 Moritz Schulte + + * rsa.c (_gcry_rsa_blind): New function. + (_gcry_rsa_unblind): New function. + (_gcry_rsa_decrypt): Use _gcry_rsa_blind and _gcry_rsa_decrypt. + +2003-03-26 Moritz Schulte + + * dynload.c (_gcry_enum_gnupgext_pubkeys): Adjust `encrypt' and + `decrypt' function arguments. + (_gcry_enum_gnupgext_pubkeys): Likewise. + * dynload.h: Likewise. + + * pubkey.c (dummy_decrypt): Add argument: int flags. + (dummy_encrypt): Likewise. + + * elgamal.c (_gcry_elg_encrypt): Add argument: int flags. + (_gcry_elg_decrypt): Likewise. + + * rsa.c (_gcry_rsa_encrypt): Add argument: int flags. + (_gcry_rsa_decrypt): Likewise. + + * pubkey.c: Add `flags' argument to members `encrypt' and + `decrypt' of struct `pubkey_table_s'. + + * rsa.h: Add `flags' argument to function declarations. + * elgamal.h: Likewise. + + * pubkey.c (sexp_data_to_mpi): New variable: int parsed_flags. + (sexp_data_to_mpi): Set `parsed_flags'. + (sexp_data_to_mpi): New argument: int *flags. + (gcry_pk_encrypt): New variable: int flags. + (gcry_pk_encrypt): Pass `flags' to pubkey_encrypt. + (pubkey_encrypt): New variable: int flags. + (pubkey_encrypt): Pass `flags' to pubkey encrypt function. + (pubkey_decrypt): Likewise. + (pubkey_decrypt): Pass `flags' to pubkey encrypt function. + (gcry_pk_encrypt): Include `flags' s-exp in return list. + (sexp_to_enc): New argument: int *flags. + (gcry_pk_decrypt): New variable: int flags. + (gcry_pk_decrypt): Pass `flags' to pubkey_decrypt. + (sexp_to_enc): New variable: int parsed_flags. + (sexp_to_enc): Set `parsed_flags'. + +2003-03-22 Simon Josefsson + + * cipher.c (gcry_cipher_open, do_cbc_encrypt) + (gcry_cipher_encrypt): Support GCRY_CIPHER_CBC_MAC. + (gcry_cipher_ctl): Support GCRYCTL_SET_CBC_MAC. + +2003-03-19 Werner Koch + + * primegen.c (gen_prime): New args EXTRA_CHECK and EXTRA_CHECK_ARG + to allow for a user callback. Changed all callers. + (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Ditto, pass them to gen_prime. + * rsa.c (check_exponent): New. + (generate): Use a callback to ensure that a given exponent is + actually generated. + +2003-03-12 Moritz Schulte + + * primegen.c: Initialize `no_of_small_prime_numbers' statically. + (gen_prime): Remove calculation of `no_of_small_prime_numbers'. + +2003-03-03 Moritz Schulte + + * md.c (gcry_md_ctl): Rewritten to use same style like the other + functions dispatchers. + +2003-03-02 Moritz Schulte + + * cipher.c (struct gcry_cipher_handle): New member: algo_index. + (gcry_cipher_open): Allocate memory for two cipher contexts. + Initialize algo_index. + (cipher_setkey): Duplicate context into reserved memory. + (cipher_reset): New function, which resets the context and clear + the IV. + (gcry_cipher_ctl): Call cipher_reset. + +2003-02-23 Moritz Schulte + + * cipher.c: Remove (bogus) `digitp' macro definition. + * md.c: Likewise. + + * blowfish.c (burn_stack): Removed. + * arcfour.c (burn_stack): Likewise. + * cast5.c (burn_stack): Likewise. + * des.c (burn_stack): Likewise. + * md4.c (burn_stack): Likewise. + * md5.c (burn_stack): Likewise. + * random.c (burn_stack): Likewise. + * rijndael.c (burn_stack): Likewise. + * rmd160.c (burn_stack): Likewise. + * sha1.c (burn_stack): Likewise. + * sha256.c (burn_stack): Likewise. + * tiger.c (burn_stack): Likewise. + * twofish.c (burn_stack): Likewise. + + * blowfish.c: Changed all occurences of burn_stack to + _gcry_burn_stack. + * arcfour.c: Likewise. + * cast5.c: Likewise. + * des.c: Likewise. + * md4.c: Likewise. + * md5.c: Likewise. + * random.c: Likewise. + * rijndael.c: Likewise. + * rmd160.c: Likewise. + * sha1.c: Likewise. + * sha256.c: Likewise. + * tiger.c: Likewise. + * twofish.c: Likewise. + + * arcfour.c (_gcry_arcfour_get_info): Use GCRY_CIPHER_ARCFOUR + instead of hard-coded value `301'. + +2003-01-24 Werner Koch + + * random.c (_gcry_register_random_progress): New. + (_gcry_random_progress): New. + + * rndlinux.c (gather_random): Call the random progress function. + +2003-01-23 Werner Koch + + * rsa.c (generate): New arg USE_E to request a specific public + exponent. + (_gcry_rsa_generate): Ditto. + * elgamal.c (_gcry_elg_generate): Must add an dummy argument + instead of USE_E. + * dsa.c (_gcry_dsa_generate): Ditto. + * pubkey.c (dummy_generate): Ditto. + (pubkey_generate): Add USE_E arg and pass it down. + (gcry_pk_genkey): Detect "rsa-use-e" parameter and pass it to generate. + + * pubkey.c (sexp_to_enc): New arg RET_MODERN. + (gcry_pk_decrypt): Make use of it to return a real S-expression. + Return better error codes. + (gcry_pk_verify): Return better error codes. + +2003-01-21 Werner Koch + + * random.c (gcry_random_add_bytes): Add QUALITY argument, let + function return an error code and disable its core for now. + +2003-01-21 Timo Schulz + + * random.c (gcry_random_add_bytes): New. Function to add external + random to the pool. + +2003-01-20 Simon Josefsson + + * crc.c: New. + * Makefile.am (EXTRA_PROGRAMS, EXTRA_crc_SOURCES): Add crc.c. + * md.c (gcry_md_get_algo_dlen): Add values for CRC. + +2003-01-20 Werner Koch + + * sha256.c: New. + * bithelp.h (ror): New. + * Makfile.am: Add sha256.c. + * md.c (oid_table): Add values for SHA256 et al. + (gcry_md_get_algo_dlen): Likewise + +2003-01-20 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Implemented keygrips for DSA + and ElGamal. + +2003-01-17 Werner Koch + + * cipher.c (gcry_cipher_encrypt): Reworked so that the output will + never contain the plaintext even if the caller did not checked the + return value. + + * md.c (gcry_md_get_algo): Changed error code to GCRYERR_GENERAL + because we don't have an invalid md algo but no algorithm enabled. + + * pubkey.c (gcry_pk_genkey): Changed error code for bounds check + of table parameters to GCRYERR_INTERNAL. + + * md.c (gcry_md_open): Partly reverted Timo's change from + 2002-10-10 by removing the check for the algorithm. An algorithm + of 0 is allowed and anyway we should not double check it or check + it using a different function. Also fixed the flags check. + + * pubkey.c (gcry_pk_encrypt): Make sure that R_CIPH points to NULL + on error. + (gcry_pk_decrypt): Ditto for R_PLAIN. + (gcry_pk_sign): Ditto for R_SIG. + (gcry_pk_genkey): Ditto for R_KEY. + +2003-01-16 Werner Koch + + * md.c (gcry_md_write): Changed 2nd argument type to void*. + (gcry_md_hash_buffer): Changed type of boths buffers to void*. + (gcry_md_setkey): Changed 2nd argument type to void*. + +2003-01-15 Werner Koch + + * pubkey.c (sexp_data_to_mpi): New. This handles pkcs1 padding. + (gcry_pk_sign, gcry_pk_verify): Use it here. + (gcry_pk_encrypt): And here. + (pubkey_verify): Add debug code. + (sexp_to_enc): Handle flags in the input and return the pkcs1 flag + in a new parameter. + (gcry_pk_decrypt): Prepare for future pkcs1 handling. + +2002-12-19 Werner Koch + + * random.c (_gcry_random_initialize): New. + +2002-12-16 Werner Koch + + * cipher.c: Added a Teletrust specific OID for 3DES. + +2002-12-12 Werner Koch + + * md.c: Added another oddball OIW OID (sha-1WithRSAEncryption). + +2002-11-23 Werner Koch + + * md.c (load_digest_module): Enlarged checked_algos bitmap. + * md4.c (func_table): Fixed entry for md4. + Both by Simon Josephson. + (transform): Copy data to get the alignment straight. Tested only + on i386. + +2002-11-10 Simon Josefsson + + * cipher.c (gcry_cipher_open): Don't reject CTS flag. + (do_cbc_encrypt, do_cbc_decrypt, cipher_encrypt) + (gcry_cipher_encrypt, cipher_decrypt) + (gcry_cipher_decrypt): Support CTS flag. + (gcry_cipher_ctl): Toggle CTS flag. + +2002-11-10 Werner Koch + + * md4.c: New. By Simon Josefsson. + * Makefile.am (EXTRA_PROGRAMS): Add md4.c. + * md.c (oid_table,gcry_md_get_algo_dlen): MD4 support. + +2002-10-14 Werner Koch + + * arcfour.c (do_encrypt_stream): Don't use increment op when + assigning to the same variable. + +2002-10-10 Timo Schulz + + * pubkey.c (gcry_pk_genkey): Check boundaries. + + * md.c (gcry_md_open): Check that algo is available and only + valid flag values are used. + (gcry_md_get_algo): Add error handling. + +2002-09-26 Werner Koch + + * md.c: Include an OID for TIGER. + * tiger.c (tiger_get_info): Use a regular OID. + +2002-09-17 Werner Koch + + * random.c: Replaced mutex.h by the new ath.h. Changed all calls. + +2002-09-16 Werner Koch + + * arcfour.c (do_encrypt_stream): Use register modifier and modulo. + According to Nikos Mavroyanopoulos this increases perfromace on + i386 system noticable. And I always tought gcc is clever enough. + * md5.c (transform): Use register modifier. + * rmd160.c (transform): Ditto. + * sha1.c (transform): Ditto. We hope that there are 6 free registers. + * random.c (gcry_randomize): Rewrote to avoid malloc calls. + + * rndlinux.c (gather_random): Replaced remaining fprintfs by log_*. + * arcfour.c (do_arcfour_setkey): Ditto. + * twofish.c (do_twofish_setkey): Ditto. + * rndegd.c (gather_random): Ditto. + * rijndael.c (do_setkey): Ditto. + * random.c (_gcry_random_dump_stats): Ditto. + * primegen.c (_gcry_generate_elg_prime): Ditto. + * des.c (_gcry_des_get_info): Ditto. + * cast5.c (do_cast_setkey): Ditto. + * blowfish.c (do_bf_setkey): Ditto. + +2002-08-26 Werner Koch + + * des.c (weak_keys): Fixed one entry in the table and compared + all entries against the literature. + (selftest): Checksum the weak key table. + +2002-08-21 Werner Koch + + * pubkey.c: Enable keygrip calculation for "openpgp-rsa". + +2002-08-17 Werner Koch + + * cipher.c (setup_cipher_table): Don't overwrite the DES entry + with the entry for DUMMY. + +2002-08-14 Werner Koch + + * des.c (do_des_setkey,do_des_encrypt, do_des_decrypt): New. + (_gcry_des_get_info): Support plain old DES. + * cipher.c (setup_cipher_table): Put DES into the table. + +2002-07-25 Werner Koch + + * rndunix.c (_gcry_rndunix_constructor): Prefixed with _gcry_. + Noted by Stephan Austermuehle. + +2002-07-08 Timo Schulz + + * rndw32.c: Replaced the m_ memory functions with the real + gcry_ functions. Renamed all g10_ prefixed functions to log_. + +2002-06-12 Werner Koch + + * rsa.c (generate): Use e = 65537 for now. + +2002-06-11 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Allow a "protected-private-key". + +2002-06-05 Timo Schulz + + * cipher.c (gcry_cipher_encrypt, gcry_cipher_decrypt): + Check that the input size is a multiple of the blocksize. + +2002-05-23 Werner Koch + + * md.c (oid_table): Add an rsadsi OID for MD5. + +2002-05-21 Werner Koch + + * primegen.c, elgamal.c, dsa.c (progress): Do not print anything + by default. Pass an extra identifying string to the callback and + reserved 2 argumenst for current and total counters. Changed the + register function prototype. + +2002-05-17 Werner Koch + + * rndegd.c (rndegd_constructor): Fixed name of register function + and prefixed the function name with _gcry_. + * rndw32.c (rndw32_constructor): Ditto. + * tiger.c (tiger_constructor): Ditto. + + * Makefile.am: Removed all dynamic loading stuff. + * dynload.c: Ditto. Now only used for the constructor system. + +2002-05-15 Werner Koch + + * random.c (gcry_random_bytes,gcry_random_bytes_secure) + (gcry_randomize): Make sure we are initialized. + +2002-05-14 Werner Koch + + Changed license of most files to the LGPL. + +2002-05-02 Werner Koch + + * random.c (_gcry_fast_random_poll): Initialize the module so the + mutex can be used. + + * primegen.c (small_prime_numbers): Moved table from smallprime.c + * smallprime.c: File removed. + + * des.c (leftkey_swap, rightkey_swap, working_memcmp): Made static. + + * cipher.c (gcry_cipher_map_name): Map "RIJNDAEL" to "AES". + * rijndael.c (rijndael_get_info): We do only support a 128 bit + blocksize so it makes sense to change the algorithm strings to + AES. + + * tiger.c (tiger_final): Removed superfluous token pasting operators. + * md5.c (md5_final): Ditto. + +2002-04-30 Werner Koch + + * cipher.c: Fixed list of copyright years. + +2002-03-18 Werner Koch + + * random.c (initialize): Initialize the new pool lock mutex. + (_gcry_fast_random_poll): Add locking and moved main + code out to... + (do_fast_random_poll): new function. + (read_pool): Use the new function here. + (get_random_bytes): Add locking. + (_gcry_update_random_seed_file): Ditto. + +2002-03-11 Werner Koch + + * md.c: Add rsaSignatureWithripemd160 to OID table. + +2002-02-20 Werner Koch + + * sha1.c: Removed a left over comment note. The code has been + rewritten from scratch in 1998. Thanks to Niels Möller for + reporting this misleading comment. + +2002-02-18 Werner Koch + + * rndunix.c (rndunix_constructor): Use the the new prefixed + function name. Reported by Jordi Mallach. + +2002-02-10 Werner Koch + + * random.c (mix_pool): Carry an extra failsafe_digest buffer + around to make the function more robust. + +2002-02-08 Werner Koch + + * random.c (add_randomness): Xor new data into the pool and not + just copy it. This avoids any choosen input attacks which are not + serious in our setting because an outsider won't be able to mix + data in and even then we keep going with a PRNG. Thanks to Stefan + Keller for pointing this out. + +2002-01-04 Werner Koch + + * pubkey.c (gcry_pk_genkey): Do not release skey - it is static. + + * primegen.c (gen_prime): Of course we should use set_bit + and not set_highbit to set the second high bit. + +2001-12-18 Werner Koch + + * rsa.c (generate): Loop until we find the exact modulus size. + Changed the exponent to 41. + (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings. + * primegen.c (gen_prime): Set 2 high order bits for secret primes. + + * Makefile.am (DISTCLEANFILES): Include construct.c. + +2001-12-17 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): New - experimental. + +2001-12-11 Werner Koch + + * cipher.c: Added OIDs for AES. + (gcry_cipher_mode_from_oid): New. + (gcry_cipher_map_name): Moved OID search code to .. + (search_oid): .. new function. + +2001-12-10 Werner Koch + + * pubkey.c (gcry_pk_encrypt): Find the signature algorithm by name + and not by number. + + * pubkey.c (gcry_pk_encrypt,gcry_pk_decrypt,gcry_pk_sign) + (gcry_pk_verify,gcry_pk_testkey, gcry_pk_genkey) + (gcry_pk_get_nbits): Release the arrays. Noted by Nikos + Mavroyanopoulos. + +2001-12-06 Werner Koch + + * cipher.c (gcry_cipher_map_name): Look also for OIDs prefixed + with "oid." or "OID.". + +2001-12-05 Werner Koch + + * pubkey.c (algo_info_table): Fixed entry for openpgp-rsa. + +2001-11-24 Werner Koch + + * pubkey.c: Added the rsaEncryption OID to the tables. + (sexp_to_key): Add an arg to return the index of the algorithm, + changed all callers. + (gcry_pk_sign): Find the signature algorithm by name and not by + number. + (gcry_pk_get_nbits): Fixed so that we can now really pass a secret + key to get the result. + + * md.c (gcry_md_map_name): Look also for OIDs prefixed with "oid." + or "OID." so that an OID string can be used as an S-Exp token. + +2001-11-20 Werner Koch + + * md.c (gcry_md_map_name): Lookup by OID if the the name begins + with a digit. + (oid_table): New. + +2001-11-16 Werner Koch + + * md.c (gcry_md_info): New operator GCRYCTL_IS_ALGO_ENABLED. + +2001-11-07 Werner Koch + + * md.c (gcry_md_hash_buffer): Close the handle which was left open + for algorithms other than rmd160. + +2001-08-08 Werner Koch + + * rndw32.c (gather_random): Use toolhelp in addition to the NT + gatherer for Windows2000. Suggested by Sami Tolvanen. + + * random.c (read_pool): Fixed length check, this used to be one + byte to strict. Made an assert out of it because the caller has + already made sure that only poolsize bytes are requested. + Reported by Marcus Brinkmann. + +2001-08-03 Werner Koch + + * cipher.c (cipher_encrypt, cipher_decrypt): Prepare to return + errors. We have to change the interface to all ciphers to make + this really work but we should do so to prepare for hardware + encryption modules. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Return the error and + set lasterr. + (gcry_cipher_ctl): Make sure that errors from setkey are returned. + +2001-08-02 Werner Koch + + * rndlinux.c (gather_random): casted a size_t arg to int so that + the format string is correct. Casting is okay here and avoids + translation changes. + + * random.c (fast_random_poll): Do not check the return code of + getrusage. + + * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7 + and 8. + + * tiger.c (print_abc,print_data): Removed. + + * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c, arcfour.c + (burn_stack): New. Add wrappers for most functions to be able to + call burn_stack after the function invocation. This methods seems + to be the most portable way to zeroise the stack used. It does + only work on stack frame based machines but it is highly portable + and has no side effects. Just setting the automatic variables at + the end of a function to zero does not work well because the + compiler will optimize them away - marking them as volatile would + be bad for performance. + * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise. + * random.c (burn_stack): New. + (mix_pool): Use it here to burn the stack of the mixblock function. + + * primegen.c (_gcry_generate_elg_prime): Freed q at 3 places. + Thanks to Tommi Komulainen. + + * arcfour.c (arcfour_setkey): Check the minimim keylength against + bytes and not bits. + (selftest): Must reset the key before decryption. + +2001-05-31 Werner Koch + + * sha1.c (sha1_init): Made static. + + Changed all g10_ prefixed function names as well as some mpi_ + function names to cope with the introduced naming changes. + + * md.c (prepare_macpads): Made key const. + +2001-05-28 Werner Koch + + * rndegd.c (gather_random): Removed the use of tty_printf. + +2001-03-29 Werner Koch + + * md5.c (md5_final): Fixed calculation of hashed length. Thanks + to disastry@saiknes.lv for pointing out that it was horrible wrong + for more than 512MB of input. + * sha1.c (sha1_final): Ditto. + * rmd160.c (rmd160_final): Ditto. + * tiger.c (tiger_final): Ditto. + + * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to + avoid name clashes with an encrypt function in stdlib.h of + Dynix/PIX. Thanks to Gene Carter. + * elgamal.c (encrypt,do_encrypt): Ditto. + + * twofish.c (gnupgext_enum_func): Use only when when compiled as a + module. + * rijndael.c (gnupgext_enum_func): Ditto. + + * tiger.c (tiger_get_info): Return "TIGER192" and not just + "TIGER". By Edwin Woudt. + + * random.c: Always include time.h - standard requirement. Thanks + to James Troup. + + * rndw32.c: Fixes to the macros. + +2001-01-11 Werner Koch + + * cipher.c (cipher_encrypt,gcry_cipher_encrypt): Use blocksize and + not 8. + +2000-12-19 Werner Koch + + Major change: + Removed all GnuPG stuff and renamed this piece of software + to gcrypt. + +2000-11-14 Werner Koch + + * dsa.c (test_keys): Replaced mpi_alloc by gcry_mpi_new and + mpi_free by gcry_mpi_release. + * elgamal.c (test_keys,generate): Ditto, also for mpi_alloc_secure. + * rsa.c (test_keys,generate,rsa_verify): Ditto. + * primegen.c (generate_elg_prime): Ditto. + (gen_prime): Ditto and removed nlimbs. + + * rsa.c (generate): Allocate 2 more vars in secure memory. + + * Makefile.am (OMIT_DEPENDENCIES): Hack to work around dependency + problems. + +2000-10-09 Werner Koch + + * arcfour.c, arcfour.h: New. + * cipher.c (cipher_encrypt, cipher_decrypt): Add stream mode. + (setup_cipher_table): Add Arcfour. + (gcry_cipher_open): Kludge to allow stream mode. + +Wed Oct 4 13:16:18 CEST 2000 Werner Koch + + * sha1.c (transform): Use rol() macro. Actually this is not needed + for a newer gcc but there are still aoter compilers. + + * rsa.c (test_keys): Use new random function. + + * md.c (gcry_md_setkey): New function to overcome problems with + const conflics. + (gcry_md_ctl): Pass set key to the new functions. + + * rijndael.c: New. + * cipher.c: Add Rijndael support. + +Mon Sep 18 16:35:45 CEST 2000 Werner Koch + + * rndlinux.c (open_device): Loose random device checking. + By Nils Ellmenreich. + + * random.c (fast_random_poll): Check ENOSYS for getrusage. + * rndunix.c: Add 2 sources for QNX. By Sam Roberts. + + * pubkey.c (gcry_pk_algo_info): Add GCRYCTL_GET_ALGO_USAGE. + + * rsa.c: Changed the comment about the patent. + (secret): Speed up by using the CRT. For a 2k keys this + is about 3 times faster. + (stronger_key_check): New but unused code to check the secret key. + * Makefile.am: Included rsa.[ch]. + * pubkey.c: Enabled RSA support. + (pubkey_get_npkey): Removed RSA workaround. + +Mon Jul 31 10:04:47 CEST 2000 Werner Koch + + * pubkey.c: Replaced all gcry_sexp_{car,cdr}_{data,mpi} by the new + gcry_sexp_nth_{data,mpi} functions. + +Tue Jul 25 17:44:15 CEST 2000 Werner Koch + + * pubkey.c (exp_to_key,sexp_to_sig,sexp_to_enc,gcry_pk_encrypt, + gcry_pk_decrypt,gcry_pk_sign,gcry_pk_genkey): Changed to work with + the new S-Exp interface. + +Mon Jul 17 16:35:47 CEST 2000 Werner Koch + + * random.c (gather_faked): Replaced make_timestamp by time(2) again. + +Fri Jul 14 19:38:23 CEST 2000 Werner Koch + + * md.c (gcry_md_ctl): Support GCRYCTL_{START,STOP}_DUMP. + + * Makefile.am: Never compile mingw32 as module. + + * Makefile.am: Tweaked module build and removed libtool + + * Makefile.am: Replaced -O1 by -O. Suggested by Alec Habig. + + * elgamal.c (sign): Removed inactive code. + + * rsa.c, rsa.h: New based on the old module version (only in CVS for now). + * pubkey.c (setup_pubkey_table): Added commented support for RSA. + + * rndunix.c (waitpid): New. For UTS 2.1. All by Dave Dykstra. + (my_popen): Do the FD_CLOEXEC only if it is available + (start_gatherer): Cope with missing _SC_OPEN_MAX + + * rndunix.c: Add some more headers for QNX. By Sam Roberts. + + * rndegd.c (gather_random): Shortcut level 0. + * rndunix.c (gather_random): Ditto. + * rndw32.c (gather_random): Ditto. + + * rndw32.c: Replaced with code from Cryptlib and commented the old stuff. + * rndw32.c: Add some debuging code enabled by an environment variable. + + * random.c (read_seed_file): Binary open for DOSish system + (update_random_seed_file): Ditto. + * random.c [MINGW32]: Include process.h for getpid. + * random.c (fast_random_poll): Add clock_gettime() as fallback for + system which support this POSIX.4 fucntion. By Sam Roberts. + + * random.c (read_seed_file): Removed the S_ISLNK test becuase it + is already covered by !S_ISREG and is not defined in Unixware. + Reported by Dave Dykstra. + (update_random_seed_file): Silently ignore update request when pool + is not filled. + + * random.c (read_seed_file): New. + (set_random_seed_file): New. + (read_pool): Try to read the seeding file. + (update_random_seed_file): New. + + (read_pool): Do an initial extra seeding when level 2 quality random + is requested the first time. This requestes at least POOLSIZE/2 bytes + of entropy. Compined with the seeding file this should make normal + random bytes cheaper and increase the quality of the random bytes + used for key generation. + + * random.c (read_pool): Print a more friendly error message in + cases when too much random is requested in one call. + + * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined; + this is not the case for some ESIX and Unixware, although they have + getrusage(). + + * primegen.c (generate_elg_prime): All primes are now generated with + the lowest random quality level. Because they are public anyway we + don't need stronger random and by this we do not drain the systems + entropy so much. + + * primegen.c (register_primegen_progress): New. + * dsa.c (register_pk_dsa_progress): New. + * elgamal.c (register_pk_elg_progress): New. + + * elgamal.c (wiener_map): New. + (gen_k): Use a much smaller k. + (generate): Calculate the qbits using the wiener map and + choose an x at a size comparable to the one choosen in gen_k + + * rmd160.c (rmd160_get_info): Moved casting to the left side due to a + problem with UTS4.3. Suggested by Dave Dykstra. + * sha1.c (sha1_get_info): Ditto. + * tiger.c (tiger_get_info): Ditto. + * md5.c (md5_get_info): Ditto + * des.c (des_get_info): Ditto. + * blowfish.c (blowfish_get_info): Ditto. + * cast5.c (cast5_get_info): Ditto. + * twofish.c (twofish_get_info): Ditto. + +Fri Mar 24 11:25:45 CET 2000 Werner Koch + + * md.c (md_open): Add hmac arg and allocate space for the pads. + (md_finalize): Add HMAC support. + (md_copy): Ditto. + (md_close): Ditto. + (gcry_md_reset): Ditto. + (gcry_md_ctl): Ditto. + (prepare_macpdas): New. + +Mon Mar 13 19:22:46 CET 2000 Werner Koch + + * md.c (gcry_md_hash_buffer): Add support for the other algorithms. + +Mon Jan 31 16:37:34 CET 2000 Werner Koch + + * genprime.c (generate_elg_prime): Fixed returned factors which never + worked for non-DSA keys. + +Thu Jan 27 18:00:44 CET 2000 Werner Koch + + * pubkey.c (sexp_to_key): Fixed mem leaks in case of errors. + +Mon Jan 24 22:24:38 CET 2000 Werner Koch + + * pubkey.c (gcry_pk_decrypt): Implemented. + (gcry_pk_encrypt): Implemented. + (gcry_pk_testkey): New. + (gcry_pk_genkey): New. + (pubkey_decrypt): Made static. + (pubkey_encrypt): Ditto. + (pubkey_check_secret_key): Ditto. + (pubkey_generate): Ditto. + +Mon Jan 24 13:04:28 CET 2000 Werner Koch + + * pubkey.c (pubkey_nbits): Removed and replaced by ... + (gcry_pk_get_nbits): this new one. + +Wed Dec 8 21:58:32 CET 1999 Werner Koch + + * dsa.c: s/mpi_powm/gcry_mpi_powm/g + * elgamal.c: Ditto. + * primegen.c: Ditto. + + * : Replaced g10_opt_verbose by g10_log_verbosity(). + + * Makefile.am (INCLUDES): removed intl, add ../gcrypt + +Fri Nov 19 17:15:20 CET 1999 Werner Koch + + * dynload.c (cmp_filenames): New to replaced compare_filename() in + module. + (register_cipher_extension): Removed the tilde expansion stuff. + * rndeg.c (my_make_filename): New. + + * : Replaced header util.h by g10lib.h + + * random.c (gather_faked): Replaced make_timestamp by time(2). + Disabled wrning printed with tty_printf. + * rndlinux.c (gather_random): Always use fprintf instead of tty_xxx; + this should be replaced by a callback function. + + * primegen.c (gen_prime): Use gcry_mpi_randomize. + (is_prime): Ditto. + * elgamal.c (test_keys): Ditto. + * dsa.c (test_keys): Ditto. + + * cipher.c (gcry_cipher_close): Die on invalid handle. + +Mon Nov 15 21:36:02 CET 1999 Werner Koch + + * elgamal.c (gen_k): Use the new random API. + (generate): Ditto. + * dsa.c (gen_k): Ditto. + (generate): Ditto. + +Sat Nov 13 17:44:23 CET 1999 Werner Koch + + * pubkey.c (disable_pubkey_algo): Made static. + (gcry_pk_ctl): New. + + * random.c (get_random_bits): Renamed to ... + (get_random_bytes): ... this and made static. + (gcry_random_bytes): New. + (gcry_random_bytes_secure): New. + (randomize_buffer): Renamed to ... + (gcry_randomize): ...this. + + * md.c (gcry_md_hash_buffer): New. + + * pubkey.c (gcry_pk_algo_info): 4 new commands. + (pubkey_get_npkey): Made static. + (pubkey_get_nskey): Made static. + (pubkey_get_nsig): Made static. + (pubkey_get_nenc): Made static. + + * pubkey.c: Removed all G10ERR_xxx. + * cipher.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_CIPHER_ALGO. + * md.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_MD_ALGO. + * cast5.c (cast_setkey): Changed errocodes to GCRYERR_xxx. + * blowfish.c: Ditto. + * des.c: Ditto. + * twofish.c: Ditto. + * dsa.c: Ditto. + * elgamal.c: Ditto. + + * g10c.c: Removed + + * cipher.c (gcry_cipher_open): Replaced alloc functions and return NULL + if we are out of core. + * dynload.c: Replaced all memory allocation functions. + * md.c: Ditto. + * primegen.c: Ditto. + * pubkey.c: Ditto. + * random.c: Ditto. + * rndw32.c: Ditto. + * elgamal.c: Ditto. + * dsa.c: Ditto. + +Tue Oct 26 14:10:21 CEST 1999 Werner Koch + + * elgamal.c (sign): Hugh found strange code here. Replaced by BUG(). + + * cipher.c: Merged with gcrypt/symapi.c. + + * pubkey.c (string_to_pubkey_algo): Renamed function to ... + (gcry_pk_map_name): ... this. + (pubkey_algo_to_string): Renamed function to ... + (gcry_pk_algo_name): ... this. + (gcry_pk_algo_info): New. + * pubkey.c: Merged with gcrypt/pkapi.c. + + * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for + fixing this bug. + + * md.c: Merged with gcrypt/mdapi.c + +Wed Sep 15 14:39:59 CEST 1999 Michael Roth + + * des.c: Various speed improvements: One bit pre rotation + trick after initial permutation (Richard Outerbridge). + Finished test of SSLeay Tripple-DES patterns. + +Wed Sep 15 16:22:17 CEST 1999 Werner Koch + + * rndw32.c: New. + +Mon Sep 13 10:51:29 CEST 1999 Werner Koch + + * bithelp.h: New. + * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h + +Tue Sep 7 16:23:36 CEST 1999 Werner Koch + + * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert. + +Mon Sep 6 19:59:08 CEST 1999 Werner Koch + + * des.c (selftest): Add some testpattern + +Mon Aug 30 20:38:33 CEST 1999 Werner Koch + + * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using + in place encryption. Pointed out by Frank Stajano. + +Mon Jul 26 09:34:46 CEST 1999 Werner Koch + + * md5.c (md5_final): Fix for a SCO cpp bug. + +Thu Jul 15 10:15:35 CEST 1999 Werner Koch + + * elgamal.c (elg_check_secret_key,elg_encrypt + elg_decrypt,elg_sign,elg_verify): Sanity check on the args. + * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto. + + * pubkey.c (disable_pubkey_algo): New. + (check_pubkey_algo2): Look at disabled algo table. + * cipher.c (disable_cipher_algo): New. + (check_cipher_algo): Look at disabled algo table. + +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + * Makefile.am: Support for libtool. + +Fri Jul 2 11:45:54 CEST 1999 Werner Koch + + * dsa.c (gen_k): Changed algorithm to consume less random bytes + * elgamal.c (gen_k): Ditto. + + * random.c (random_dump_stats): New. + +Thu Jul 1 12:47:31 CEST 1999 Werner Koch + + * primegen.c, elgamal.c, dsa.c (progess): New and replaced all + fputc with a call to this function. + +Sat Jun 26 12:15:59 CEST 1999 Werner Koch + + * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs. + + * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New. + + * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra). + * Makefile.am (install-exec-hook): Removed. + +Sun May 23 14:20:22 CEST 1999 Werner Koch + + * cipher.c (setup_cipher_table): Enable Twofish + + * random.c (fast_random_poll): Disable use of times() for mingw32. + +Mon May 17 21:54:43 CEST 1999 Werner Koch + + * dynload.c (register_internal_cipher_extension): Minor init fix. + +Tue May 4 15:47:53 CEST 1999 Werner Koch + + * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug + that we didn't correct for step when passing the prime to the + Rabin-Miller test which led to bad performance (Stefan Keller). + (check_prime): Add a first Fermat test. + +Sun Apr 18 10:11:28 CEST 1999 Werner Koch + + * cipher.c (cipher_setiv): Add ivlen arg, changed all callers. + + * random.c (randomize_buffer): alway use secure memory because + we can't use m_is_secure() on a statically allocated buffer. + + * twofish.c: Replaced some macros by a loop to reduce text size. + * Makefile.am (twofish): No more need for sed editing. + +Fri Apr 9 12:26:25 CEST 1999 Werner Koch + + * cipher.c (cipher_open): Reversed the changes for AUTO_CFB. + + * blowfish.c: Dropped the Blowfish 160 mode. + * cipher.c (cipher_open): Ditto. + (setup_cipher_table): Ditto. And removed support of twofish128 + +Wed Apr 7 20:51:39 CEST 1999 Werner Koch + + * random.c (get_random_bits): Can now handle requests > POOLSIZE + + * cipher.c (cipher_open): Now uses standard CFB for automode if + the blocksize is gt 8 (according to rfc2440). + + * twofish.c: Applied Matthew Skala's patches for 256 bit key. + +Tue Apr 6 19:58:12 CEST 1999 Werner Koch + + * random.c (get_random_bits): Can now handle requests > POOLSIZE + + * cipher.c (cipher_open): Now uses standard CFB for automode if + the blocksize is gt 8 (according to rfc2440). + +Sat Mar 20 11:44:21 CET 1999 Werner Koch + + * rndlinux.c (tty_printf) [IS_MODULE]: Removed. + + * rndegd.c (gather_random): Some fixes. + +Wed Mar 17 13:09:03 CET 1999 Werner Koch + + * rndegd.c (do_read): New. + (gather_random): Changed the implementation. + +Mon Mar 8 20:47:17 CET 1999 Werner Koch + + * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed. + +Fri Feb 26 17:55:41 CET 1999 Werner Koch + + * md.c: Nearly a total rewrote. + +Wed Feb 24 11:07:27 CET 1999 Werner Koch + + * cipher.c (context): Fixed alignment + * md.c: Ditto. + + * rndegd.c: New + +Mon Feb 22 20:04:00 CET 1999 Werner Koch + + * rndegd.c: New. + +Wed Feb 10 17:15:39 CET 1999 Werner Koch + + * Makefile.am: Modules are now figured out by configure + * construct.c: New. Generated by configure. Changed all modules + to work with that. + * sha1.h: Removed. + * md5.h: Removed. + + * twofish.c: Changed interface to allow Twofish/256 + + * rndunix.c (start_gatherer): Die on SIGPIPE. + +Wed Jan 20 18:59:49 CET 1999 Werner Koch + + * rndunix.c (gather_random): Fix to avoid infinite loop. + +Sun Jan 17 11:04:33 CET 1999 Werner Koch + + * des.c (is_weak_key): Replace system memcmp due to bugs + in SunOS's memcmp. + (des_get_info): Return error on failed selftest. + * twofish.c (twofish_setkey): Return error on failed selftest or + invalid keylength. + * cast5.c (cast_setkey): Ditto. + * blowfish.c (bf_setkey): Return error on failed selftest. + +Tue Jan 12 11:17:18 CET 1999 Werner Koch + + * random.c (random_is_faked): New. + + * tiger.c: Only compile if we have the u64 type + +Sat Jan 9 16:02:23 CET 1999 Werner Koch + + * rndunix.c (gather_random): check for setuid. + + * Makefile.am: Add a way to staically link random modules + +Thu Jan 7 18:00:58 CET 1999 Werner Koch + + * md.c (md_stop_debug): Do a flush first. + (md_open): size of buffer now depends on the secure parameter + +Sun Jan 3 15:28:44 CET 1999 Werner Koch + + * rndunix.c (start_gatherer): Fixed stupid ==/= bug + +1998-12-31 Geoff Keating + + * des.c (is_weak_key): Rewrite loop end condition. + +Tue Dec 29 14:41:47 CET 1998 Werner Koch + + * random.c: add unistd.h for getpid(). + (RAND_MAX): Fallback value for Sun. + +Wed Dec 23 17:12:24 CET 1998 Werner Koch + + * md.c (md_copy): Reset debug. + +Mon Dec 14 21:18:49 CET 1998 Werner Koch + + * random.c (read_random_source): Changed the interface to the + random gathering function. + (gather_faked): Use new interface. + * dynload.c (dynload_getfnc_fast_random_poll): Ditto. + (dynload_getfnc_gather_random): Ditto. + * rndlinux.c (gather_random): Ditto. + * rndunix.c (gather_random): Ditto. + +Sat Dec 12 18:40:32 CET 1998 Werner Koch + + * dynload.c (SYMBOL_VERSION): New to cope with system which needs + underscores. + + * rndunix.c: Rewrote large parts + +Thu Dec 10 20:15:36 CET 1998 Werner Koch + + * dynload.c (load_extension): increased needed verbosity level. + + * random.c (fast_random_poll): Fallback to a default fast random + poll function. + (read_random_source): Always use the faked entroy gatherer if no + gather module is available. + * rndlinux.c (fast_poll): Removed. + * rndunix.c (fast_poll): Removed. + + +Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-*.c: Removed. + * rndlinux.c : New. + * rndunix.c : New. + * random.c : Restructured the interface to the gather modules. + (intialize): Call constructor functions + (read_radnom_source): Moved to here. + * dynload.c (dynload_getfnc_gather_random): New. + (dynload_getfnc_fast_random_poll): New. + (register_internal_cipher_extension): New. + (register_cipher_extension): Support of internal modules. + +Sun Nov 8 17:44:36 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c (read_random_source): Removed the assert. + +Mon Oct 19 18:34:30 1998 me,,, (wk@tobold) + + * pubkey.c: Hack to allow us to give some info about RSA keys back. + +Thu Oct 15 11:47:57 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dynload.c: Support for DLD + +Wed Oct 14 12:13:07 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c: Now uses names from configure for /dev/random. + +1998-10-10 SL Baur + + * Makefile.am: fix sed -O substitutions to catch -O6, etc. + +Tue Oct 6 10:06:32 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-) + * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto. + +Mon Sep 28 13:23:09 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_digest): New. + (md_reset): New. + +Wed Sep 23 12:27:02 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned. + +Mon Sep 21 06:22:53 1998 Werner Koch (wk@(none)) + + * des.c: Some patches from Michael. + +Thu Sep 17 19:00:06 1998 Werner Koch (wk@(none)) + + * des.c : New file from Michael Roth + +Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none)) + + * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys. + +Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none)) + + * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined. + +Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none)) + + * Makefile.am: Fixes to allow a different build directory + +Thu Aug 6 17:25:38 1998 Werner Koch,mobil,,, (wk@tobold) + + * random.c (get_random_byte): Removed and changed all callers + to use get_random_bits() + +Mon Jul 27 10:30:22 1998 Werner Koch (wk@(none)) + + * cipher.c : Support for other blocksizes + (cipher_get_blocksize): New. + * twofish.c: New. + * Makefile.am: Add twofish module. + +Mon Jul 13 21:30:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (read_pool): Simple alloc if secure_alloc is not set. + (get_random_bits): Ditto. + +Thu Jul 9 13:01:14 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dynload.c (load_extension): Function now nbails out if + the program is run setuid. + +Wed Jul 8 18:58:23 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (rmd160_hash_buffer): New. + +Thu Jul 2 10:50:30 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c (cipher_open): algos >=100 use standard CFB + +Thu Jun 25 11:18:25 1998 Werner Koch (wk@isil.d.shuttle.de) + + * Makefile.am: Support for extensions + +Thu Jun 18 12:09:38 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (mix_pool): simpler handling for level 0 + +Mon Jun 15 14:40:48 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c: Removed from dist, will reappear as dynload module + +Sat Jun 13 14:16:57 1998 Werner Koch (wk@isil.d.shuttle.de) + + * pubkey.c: Major changes to allow extensions. Changed the inteface + of all public key ciphers and added the ability to load extensions + on demand. + + * misc.c: Removed. + +Wed Jun 10 07:52:08 1998 Werner Koch,mobil,,, (wk@tobold) + + * dynload.c: New. + * cipher.c: Major changes to allow extensions. + +Mon Jun 8 22:43:00 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: Major internal chnages to support extensions. + * blowfish.c (blowfish_get_info): New and made all internal + functions static, changed heder. + * cast5.c (cast5_get_info): Likewise. + +Mon Jun 8 12:27:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c (transform): Fix for big endian + + * cipher.c (do_cfb_decrypt): Big endian fix. + +Fri May 22 07:30:39 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_get_oid): Add a new one for TIGER. + +Thu May 21 13:24:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: Add support for a dummy cipher + +Thu May 14 15:40:36 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (transform): fixed sigbus - I should better + add Christian von Roques's new implemenation of rmd160_write. + +Fri May 8 18:07:44 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New + * random.c: Moved system specific functions to rand-****.c + +Fri May 8 14:01:17 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (fast_random_poll): add call to gethrtime. + +Tue May 5 21:28:55 1998 Werner Koch (wk@isil.d.shuttle.de) + + * elgamal.c (elg_generate): choosing x was not correct, could + yield 6 bytes which are not from the random pool, tsss, tsss.. + +Tue May 5 14:09:06 1998 Werner Koch (wk@isil.d.shuttle.de) + + * primegen.c (generate_elg_prime): Add arg mode, changed all + callers and implemented mode 1. + +Mon Apr 27 14:41:58 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c (cipher_get_keylen): New. + +Sun Apr 26 14:44:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c, tiger.h: New. + +Wed Apr 8 14:57:11 1998 Werner Koch (wk@isil.d.shuttle.de) + + * misc.c (check_pubkey_algo2): New. + +Tue Apr 7 18:46:49 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: New + * misc.c (check_cipher_algo): Moved to cipher.c + * cast5.c: Moved many functions to cipher.c + * blowfish.c: Likewise. + +Sat Apr 4 19:52:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cast5.c: Implemented and tested. + +Wed Apr 1 16:38:27 1998 Werner Koch (wk@isil.d.shuttle.de) + + * elgamal.c (elg_generate): Faster generation of x in some cases. + +Thu Mar 19 13:54:48 1998 Werner Koch (wk@isil.d.shuttle.de) + + * blowfish.c (blowfish_decode_cfb): changed XOR operation + (blowfish_encode_cfb): Ditto. + +Thu Mar 12 14:04:05 1998 Werner Koch (wk@isil.d.shuttle.de) + + * sha1.c (transform): Rewrote + + * blowfish.c (encrypt): Unrolled for rounds == 16 + (decrypt): Ditto. + +Tue Mar 10 16:32:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (transform): Unrolled the loop. + +Tue Mar 10 13:05:14 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (read_pool): Add pool_balance stuff. + (get_random_bits): New. + + * elgamal.c (elg_generate): Now uses get_random_bits to generate x. + + +Tue Mar 10 11:33:51 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_digest_length): New. + +Tue Mar 10 11:27:41 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dsa.c (dsa_verify): Works. + +Mon Mar 9 12:59:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dsa.c, dsa.h: Removed some unused code. + +Wed Mar 4 10:39:22 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_open): Add call to fast_random_poll. + blowfish.c (blowfish_setkey): Ditto. + +Tue Mar 3 13:32:54 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (rmd160_mixblock): New. + * random.c: Restructured to start with a new RNG implementation. + * random.h: New. + +Mon Mar 2 19:21:46 1998 Werner Koch (wk@isil.d.shuttle.de) + + * gost.c, gost.h: Removed because they did only contain trash. + +Sun Mar 1 16:42:29 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (fill_buffer): removed error message if n == -1. + +Fri Feb 27 16:39:34 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_enable): No init if called twice. + +Thu Feb 26 07:57:02 1998 Werner Koch (wk@isil.d.shuttle.de) + + * primegen.c (generate_elg_prime): Changed the progress printing. + (gen_prime): Ditto. + +Tue Feb 24 12:28:42 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md5.c, md.5 : Replaced by a modified version of md5.c from + GNU textutils 1.22. + +Wed Feb 18 14:08:30 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c, md.h : New debugging support + +Mon Feb 16 10:08:47 1998 Werner Koch (wk@isil.d.shuttle.de) + + * misc.c (cipher_algo_to_string): New + (pubkey_algo_to_string): New. + (digest_algo_to_string): New. + + + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. diff --git a/grub-core/lib/libgcrypt-grub/cipher/arcfour.c b/grub-core/lib/libgcrypt-grub/cipher/arcfour.c new file mode 100644 index 000000000..9d82360cb --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/arcfour.c @@ -0,0 +1,143 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* arcfour.c - The arcfour stream cipher + * Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * For a description of the algorithm, see: + * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. + * ISBN 0-471-11709-9. Pages 397 ff. + */ + + +#include "types.h" +#include "g10lib.h" +#include "cipher.h" + + +typedef struct { + int idx_i, idx_j; + byte sbox[256]; +} ARCFOUR_context; + +static void +do_encrypt_stream( ARCFOUR_context *ctx, + byte *outbuf, const byte *inbuf, unsigned int length ) +{ + register int i = ctx->idx_i; + register int j = ctx->idx_j; + register byte *sbox = ctx->sbox; + register int t; + + while ( length-- ) + { + i++; + i = i & 255; /* The and-op seems to be faster than the mod-op. */ + j += sbox[i]; + j &= 255; + t = sbox[i]; sbox[i] = sbox[j]; sbox[j] = t; + *outbuf++ = *inbuf++ ^ sbox[(sbox[i] + sbox[j]) & 255]; + } + + ctx->idx_i = i; + ctx->idx_j = j; +} + +static void +encrypt_stream (void *context, + byte *outbuf, const byte *inbuf, unsigned int length) +{ + ARCFOUR_context *ctx = (ARCFOUR_context *) context; + do_encrypt_stream (ctx, outbuf, inbuf, length ); + _gcry_burn_stack (64); +} + + +static gcry_err_code_t +do_arcfour_setkey (void *context, const byte *key, unsigned int keylen) +{ + static int initialized; + static const char* selftest_failed; + int i, j; + byte karr[256]; + ARCFOUR_context *ctx = (ARCFOUR_context *) context; + + if (!initialized ) + { + initialized = 1; + selftest_failed = selftest(); + if( selftest_failed ) + log_error ("ARCFOUR selftest failed (%s)\n", selftest_failed ); + } + if( selftest_failed ) + return GPG_ERR_SELFTEST_FAILED; + + if( keylen < 40/8 ) /* we want at least 40 bits */ + return GPG_ERR_INV_KEYLEN; + + ctx->idx_i = ctx->idx_j = 0; + for (i=0; i < 256; i++ ) + ctx->sbox[i] = i; + for (i=0; i < 256; i++ ) + karr[i] = key[i%keylen]; + for (i=j=0; i < 256; i++ ) + { + int t; + j = (j + ctx->sbox[i] + karr[i]) % 256; + t = ctx->sbox[i]; + ctx->sbox[i] = ctx->sbox[j]; + ctx->sbox[j] = t; + } + memset( karr, 0, 256 ); + + return GPG_ERR_NO_ERROR; +} + +static gcry_err_code_t +arcfour_setkey ( void *context, const byte *key, unsigned int keylen ) +{ + ARCFOUR_context *ctx = (ARCFOUR_context *) context; + gcry_err_code_t rc = do_arcfour_setkey (ctx, key, keylen ); + _gcry_burn_stack (300); + return rc; +} + + + + +gcry_cipher_spec_t _gcry_cipher_spec_arcfour = + { + "ARCFOUR", NULL, NULL, 1, 128, sizeof (ARCFOUR_context), + arcfour_setkey, NULL, NULL, encrypt_stream, encrypt_stream, +#ifdef GRUB_UTIL + .modname = "gcry_arcfour", +#endif + }; + + +GRUB_MOD_INIT(gcry_arcfour) +{ + grub_cipher_register (&_gcry_cipher_spec_arcfour); +} + +GRUB_MOD_FINI(gcry_arcfour) +{ + grub_cipher_unregister (&_gcry_cipher_spec_arcfour); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/bithelp.h b/grub-core/lib/libgcrypt-grub/cipher/bithelp.h new file mode 100644 index 000000000..e957b4eac --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/bithelp.h @@ -0,0 +1,57 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +/* bithelp.h - Some bit manipulation helpers + * Copyright (C) 1999, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef G10_BITHELP_H +#define G10_BITHELP_H + + +/**************** + * Rotate the 32 bit unsigned integer X by N bits left/right + */ +#if defined(__GNUC__) && defined(__i386__) +static inline u32 +rol( u32 x, int n) +{ + __asm__("roll %%cl,%0" + :"=r" (x) + :"0" (x),"c" (n)); + return x; +} +#else +#define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) +#endif + +#if defined(__GNUC__) && defined(__i386__) +static inline u32 +ror(u32 x, int n) +{ + __asm__("rorl %%cl,%0" + :"=r" (x) + :"0" (x),"c" (n)); + return x; +} +#else +#define ror(x,n) ( ((x) >> (n)) | ((x) << (32-(n))) ) +#endif + + +#endif /*G10_BITHELP_H*/ diff --git a/grub-core/lib/libgcrypt-grub/cipher/blowfish.c b/grub-core/lib/libgcrypt-grub/cipher/blowfish.c new file mode 100644 index 000000000..612bfce45 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/blowfish.c @@ -0,0 +1,592 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* blowfish.c - Blowfish encryption + * Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * For a description of the algorithm, see: + * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. + * ISBN 0-471-11709-9. Pages 336 ff. + */ + +/* Test values: + * key "abcdefghijklmnopqrstuvwxyz"; + * plain "BLOWFISH" + * cipher 32 4E D0 FE F4 13 A2 03 + * + */ + +#include "types.h" +#include "g10lib.h" +#include "cipher.h" + +#define BLOWFISH_BLOCKSIZE 8 +#define BLOWFISH_ROUNDS 16 + +typedef struct { + u32 s0[256]; + u32 s1[256]; + u32 s2[256]; + u32 s3[256]; + u32 p[BLOWFISH_ROUNDS+2]; +} BLOWFISH_context; + +static gcry_err_code_t bf_setkey (void *c, const byte *key, unsigned keylen); +static void encrypt_block (void *bc, byte *outbuf, const byte *inbuf); +static void decrypt_block (void *bc, byte *outbuf, const byte *inbuf); + + +/* precomputed S boxes */ +static const u32 ks0[256] = { + 0xD1310BA6,0x98DFB5AC,0x2FFD72DB,0xD01ADFB7,0xB8E1AFED,0x6A267E96, + 0xBA7C9045,0xF12C7F99,0x24A19947,0xB3916CF7,0x0801F2E2,0x858EFC16, + 0x636920D8,0x71574E69,0xA458FEA3,0xF4933D7E,0x0D95748F,0x728EB658, + 0x718BCD58,0x82154AEE,0x7B54A41D,0xC25A59B5,0x9C30D539,0x2AF26013, + 0xC5D1B023,0x286085F0,0xCA417918,0xB8DB38EF,0x8E79DCB0,0x603A180E, + 0x6C9E0E8B,0xB01E8A3E,0xD71577C1,0xBD314B27,0x78AF2FDA,0x55605C60, + 0xE65525F3,0xAA55AB94,0x57489862,0x63E81440,0x55CA396A,0x2AAB10B6, + 0xB4CC5C34,0x1141E8CE,0xA15486AF,0x7C72E993,0xB3EE1411,0x636FBC2A, + 0x2BA9C55D,0x741831F6,0xCE5C3E16,0x9B87931E,0xAFD6BA33,0x6C24CF5C, + 0x7A325381,0x28958677,0x3B8F4898,0x6B4BB9AF,0xC4BFE81B,0x66282193, + 0x61D809CC,0xFB21A991,0x487CAC60,0x5DEC8032,0xEF845D5D,0xE98575B1, + 0xDC262302,0xEB651B88,0x23893E81,0xD396ACC5,0x0F6D6FF3,0x83F44239, + 0x2E0B4482,0xA4842004,0x69C8F04A,0x9E1F9B5E,0x21C66842,0xF6E96C9A, + 0x670C9C61,0xABD388F0,0x6A51A0D2,0xD8542F68,0x960FA728,0xAB5133A3, + 0x6EEF0B6C,0x137A3BE4,0xBA3BF050,0x7EFB2A98,0xA1F1651D,0x39AF0176, + 0x66CA593E,0x82430E88,0x8CEE8619,0x456F9FB4,0x7D84A5C3,0x3B8B5EBE, + 0xE06F75D8,0x85C12073,0x401A449F,0x56C16AA6,0x4ED3AA62,0x363F7706, + 0x1BFEDF72,0x429B023D,0x37D0D724,0xD00A1248,0xDB0FEAD3,0x49F1C09B, + 0x075372C9,0x80991B7B,0x25D479D8,0xF6E8DEF7,0xE3FE501A,0xB6794C3B, + 0x976CE0BD,0x04C006BA,0xC1A94FB6,0x409F60C4,0x5E5C9EC2,0x196A2463, + 0x68FB6FAF,0x3E6C53B5,0x1339B2EB,0x3B52EC6F,0x6DFC511F,0x9B30952C, + 0xCC814544,0xAF5EBD09,0xBEE3D004,0xDE334AFD,0x660F2807,0x192E4BB3, + 0xC0CBA857,0x45C8740F,0xD20B5F39,0xB9D3FBDB,0x5579C0BD,0x1A60320A, + 0xD6A100C6,0x402C7279,0x679F25FE,0xFB1FA3CC,0x8EA5E9F8,0xDB3222F8, + 0x3C7516DF,0xFD616B15,0x2F501EC8,0xAD0552AB,0x323DB5FA,0xFD238760, + 0x53317B48,0x3E00DF82,0x9E5C57BB,0xCA6F8CA0,0x1A87562E,0xDF1769DB, + 0xD542A8F6,0x287EFFC3,0xAC6732C6,0x8C4F5573,0x695B27B0,0xBBCA58C8, + 0xE1FFA35D,0xB8F011A0,0x10FA3D98,0xFD2183B8,0x4AFCB56C,0x2DD1D35B, + 0x9A53E479,0xB6F84565,0xD28E49BC,0x4BFB9790,0xE1DDF2DA,0xA4CB7E33, + 0x62FB1341,0xCEE4C6E8,0xEF20CADA,0x36774C01,0xD07E9EFE,0x2BF11FB4, + 0x95DBDA4D,0xAE909198,0xEAAD8E71,0x6B93D5A0,0xD08ED1D0,0xAFC725E0, + 0x8E3C5B2F,0x8E7594B7,0x8FF6E2FB,0xF2122B64,0x8888B812,0x900DF01C, + 0x4FAD5EA0,0x688FC31C,0xD1CFF191,0xB3A8C1AD,0x2F2F2218,0xBE0E1777, + 0xEA752DFE,0x8B021FA1,0xE5A0CC0F,0xB56F74E8,0x18ACF3D6,0xCE89E299, + 0xB4A84FE0,0xFD13E0B7,0x7CC43B81,0xD2ADA8D9,0x165FA266,0x80957705, + 0x93CC7314,0x211A1477,0xE6AD2065,0x77B5FA86,0xC75442F5,0xFB9D35CF, + 0xEBCDAF0C,0x7B3E89A0,0xD6411BD3,0xAE1E7E49,0x00250E2D,0x2071B35E, + 0x226800BB,0x57B8E0AF,0x2464369B,0xF009B91E,0x5563911D,0x59DFA6AA, + 0x78C14389,0xD95A537F,0x207D5BA2,0x02E5B9C5,0x83260376,0x6295CFA9, + 0x11C81968,0x4E734A41,0xB3472DCA,0x7B14A94A,0x1B510052,0x9A532915, + 0xD60F573F,0xBC9BC6E4,0x2B60A476,0x81E67400,0x08BA6FB5,0x571BE91F, + 0xF296EC6B,0x2A0DD915,0xB6636521,0xE7B9F9B6,0xFF34052E,0xC5855664, + 0x53B02D5D,0xA99F8FA1,0x08BA4799,0x6E85076A }; + +static const u32 ks1[256] = { + 0x4B7A70E9,0xB5B32944,0xDB75092E,0xC4192623,0xAD6EA6B0,0x49A7DF7D, + 0x9CEE60B8,0x8FEDB266,0xECAA8C71,0x699A17FF,0x5664526C,0xC2B19EE1, + 0x193602A5,0x75094C29,0xA0591340,0xE4183A3E,0x3F54989A,0x5B429D65, + 0x6B8FE4D6,0x99F73FD6,0xA1D29C07,0xEFE830F5,0x4D2D38E6,0xF0255DC1, + 0x4CDD2086,0x8470EB26,0x6382E9C6,0x021ECC5E,0x09686B3F,0x3EBAEFC9, + 0x3C971814,0x6B6A70A1,0x687F3584,0x52A0E286,0xB79C5305,0xAA500737, + 0x3E07841C,0x7FDEAE5C,0x8E7D44EC,0x5716F2B8,0xB03ADA37,0xF0500C0D, + 0xF01C1F04,0x0200B3FF,0xAE0CF51A,0x3CB574B2,0x25837A58,0xDC0921BD, + 0xD19113F9,0x7CA92FF6,0x94324773,0x22F54701,0x3AE5E581,0x37C2DADC, + 0xC8B57634,0x9AF3DDA7,0xA9446146,0x0FD0030E,0xECC8C73E,0xA4751E41, + 0xE238CD99,0x3BEA0E2F,0x3280BBA1,0x183EB331,0x4E548B38,0x4F6DB908, + 0x6F420D03,0xF60A04BF,0x2CB81290,0x24977C79,0x5679B072,0xBCAF89AF, + 0xDE9A771F,0xD9930810,0xB38BAE12,0xDCCF3F2E,0x5512721F,0x2E6B7124, + 0x501ADDE6,0x9F84CD87,0x7A584718,0x7408DA17,0xBC9F9ABC,0xE94B7D8C, + 0xEC7AEC3A,0xDB851DFA,0x63094366,0xC464C3D2,0xEF1C1847,0x3215D908, + 0xDD433B37,0x24C2BA16,0x12A14D43,0x2A65C451,0x50940002,0x133AE4DD, + 0x71DFF89E,0x10314E55,0x81AC77D6,0x5F11199B,0x043556F1,0xD7A3C76B, + 0x3C11183B,0x5924A509,0xF28FE6ED,0x97F1FBFA,0x9EBABF2C,0x1E153C6E, + 0x86E34570,0xEAE96FB1,0x860E5E0A,0x5A3E2AB3,0x771FE71C,0x4E3D06FA, + 0x2965DCB9,0x99E71D0F,0x803E89D6,0x5266C825,0x2E4CC978,0x9C10B36A, + 0xC6150EBA,0x94E2EA78,0xA5FC3C53,0x1E0A2DF4,0xF2F74EA7,0x361D2B3D, + 0x1939260F,0x19C27960,0x5223A708,0xF71312B6,0xEBADFE6E,0xEAC31F66, + 0xE3BC4595,0xA67BC883,0xB17F37D1,0x018CFF28,0xC332DDEF,0xBE6C5AA5, + 0x65582185,0x68AB9802,0xEECEA50F,0xDB2F953B,0x2AEF7DAD,0x5B6E2F84, + 0x1521B628,0x29076170,0xECDD4775,0x619F1510,0x13CCA830,0xEB61BD96, + 0x0334FE1E,0xAA0363CF,0xB5735C90,0x4C70A239,0xD59E9E0B,0xCBAADE14, + 0xEECC86BC,0x60622CA7,0x9CAB5CAB,0xB2F3846E,0x648B1EAF,0x19BDF0CA, + 0xA02369B9,0x655ABB50,0x40685A32,0x3C2AB4B3,0x319EE9D5,0xC021B8F7, + 0x9B540B19,0x875FA099,0x95F7997E,0x623D7DA8,0xF837889A,0x97E32D77, + 0x11ED935F,0x16681281,0x0E358829,0xC7E61FD6,0x96DEDFA1,0x7858BA99, + 0x57F584A5,0x1B227263,0x9B83C3FF,0x1AC24696,0xCDB30AEB,0x532E3054, + 0x8FD948E4,0x6DBC3128,0x58EBF2EF,0x34C6FFEA,0xFE28ED61,0xEE7C3C73, + 0x5D4A14D9,0xE864B7E3,0x42105D14,0x203E13E0,0x45EEE2B6,0xA3AAABEA, + 0xDB6C4F15,0xFACB4FD0,0xC742F442,0xEF6ABBB5,0x654F3B1D,0x41CD2105, + 0xD81E799E,0x86854DC7,0xE44B476A,0x3D816250,0xCF62A1F2,0x5B8D2646, + 0xFC8883A0,0xC1C7B6A3,0x7F1524C3,0x69CB7492,0x47848A0B,0x5692B285, + 0x095BBF00,0xAD19489D,0x1462B174,0x23820E00,0x58428D2A,0x0C55F5EA, + 0x1DADF43E,0x233F7061,0x3372F092,0x8D937E41,0xD65FECF1,0x6C223BDB, + 0x7CDE3759,0xCBEE7460,0x4085F2A7,0xCE77326E,0xA6078084,0x19F8509E, + 0xE8EFD855,0x61D99735,0xA969A7AA,0xC50C06C2,0x5A04ABFC,0x800BCADC, + 0x9E447A2E,0xC3453484,0xFDD56705,0x0E1E9EC9,0xDB73DBD3,0x105588CD, + 0x675FDA79,0xE3674340,0xC5C43465,0x713E38D8,0x3D28F89E,0xF16DFF20, + 0x153E21E7,0x8FB03D4A,0xE6E39F2B,0xDB83ADF7 }; + +static const u32 ks2[256] = { + 0xE93D5A68,0x948140F7,0xF64C261C,0x94692934,0x411520F7,0x7602D4F7, + 0xBCF46B2E,0xD4A20068,0xD4082471,0x3320F46A,0x43B7D4B7,0x500061AF, + 0x1E39F62E,0x97244546,0x14214F74,0xBF8B8840,0x4D95FC1D,0x96B591AF, + 0x70F4DDD3,0x66A02F45,0xBFBC09EC,0x03BD9785,0x7FAC6DD0,0x31CB8504, + 0x96EB27B3,0x55FD3941,0xDA2547E6,0xABCA0A9A,0x28507825,0x530429F4, + 0x0A2C86DA,0xE9B66DFB,0x68DC1462,0xD7486900,0x680EC0A4,0x27A18DEE, + 0x4F3FFEA2,0xE887AD8C,0xB58CE006,0x7AF4D6B6,0xAACE1E7C,0xD3375FEC, + 0xCE78A399,0x406B2A42,0x20FE9E35,0xD9F385B9,0xEE39D7AB,0x3B124E8B, + 0x1DC9FAF7,0x4B6D1856,0x26A36631,0xEAE397B2,0x3A6EFA74,0xDD5B4332, + 0x6841E7F7,0xCA7820FB,0xFB0AF54E,0xD8FEB397,0x454056AC,0xBA489527, + 0x55533A3A,0x20838D87,0xFE6BA9B7,0xD096954B,0x55A867BC,0xA1159A58, + 0xCCA92963,0x99E1DB33,0xA62A4A56,0x3F3125F9,0x5EF47E1C,0x9029317C, + 0xFDF8E802,0x04272F70,0x80BB155C,0x05282CE3,0x95C11548,0xE4C66D22, + 0x48C1133F,0xC70F86DC,0x07F9C9EE,0x41041F0F,0x404779A4,0x5D886E17, + 0x325F51EB,0xD59BC0D1,0xF2BCC18F,0x41113564,0x257B7834,0x602A9C60, + 0xDFF8E8A3,0x1F636C1B,0x0E12B4C2,0x02E1329E,0xAF664FD1,0xCAD18115, + 0x6B2395E0,0x333E92E1,0x3B240B62,0xEEBEB922,0x85B2A20E,0xE6BA0D99, + 0xDE720C8C,0x2DA2F728,0xD0127845,0x95B794FD,0x647D0862,0xE7CCF5F0, + 0x5449A36F,0x877D48FA,0xC39DFD27,0xF33E8D1E,0x0A476341,0x992EFF74, + 0x3A6F6EAB,0xF4F8FD37,0xA812DC60,0xA1EBDDF8,0x991BE14C,0xDB6E6B0D, + 0xC67B5510,0x6D672C37,0x2765D43B,0xDCD0E804,0xF1290DC7,0xCC00FFA3, + 0xB5390F92,0x690FED0B,0x667B9FFB,0xCEDB7D9C,0xA091CF0B,0xD9155EA3, + 0xBB132F88,0x515BAD24,0x7B9479BF,0x763BD6EB,0x37392EB3,0xCC115979, + 0x8026E297,0xF42E312D,0x6842ADA7,0xC66A2B3B,0x12754CCC,0x782EF11C, + 0x6A124237,0xB79251E7,0x06A1BBE6,0x4BFB6350,0x1A6B1018,0x11CAEDFA, + 0x3D25BDD8,0xE2E1C3C9,0x44421659,0x0A121386,0xD90CEC6E,0xD5ABEA2A, + 0x64AF674E,0xDA86A85F,0xBEBFE988,0x64E4C3FE,0x9DBC8057,0xF0F7C086, + 0x60787BF8,0x6003604D,0xD1FD8346,0xF6381FB0,0x7745AE04,0xD736FCCC, + 0x83426B33,0xF01EAB71,0xB0804187,0x3C005E5F,0x77A057BE,0xBDE8AE24, + 0x55464299,0xBF582E61,0x4E58F48F,0xF2DDFDA2,0xF474EF38,0x8789BDC2, + 0x5366F9C3,0xC8B38E74,0xB475F255,0x46FCD9B9,0x7AEB2661,0x8B1DDF84, + 0x846A0E79,0x915F95E2,0x466E598E,0x20B45770,0x8CD55591,0xC902DE4C, + 0xB90BACE1,0xBB8205D0,0x11A86248,0x7574A99E,0xB77F19B6,0xE0A9DC09, + 0x662D09A1,0xC4324633,0xE85A1F02,0x09F0BE8C,0x4A99A025,0x1D6EFE10, + 0x1AB93D1D,0x0BA5A4DF,0xA186F20F,0x2868F169,0xDCB7DA83,0x573906FE, + 0xA1E2CE9B,0x4FCD7F52,0x50115E01,0xA70683FA,0xA002B5C4,0x0DE6D027, + 0x9AF88C27,0x773F8641,0xC3604C06,0x61A806B5,0xF0177A28,0xC0F586E0, + 0x006058AA,0x30DC7D62,0x11E69ED7,0x2338EA63,0x53C2DD94,0xC2C21634, + 0xBBCBEE56,0x90BCB6DE,0xEBFC7DA1,0xCE591D76,0x6F05E409,0x4B7C0188, + 0x39720A3D,0x7C927C24,0x86E3725F,0x724D9DB9,0x1AC15BB4,0xD39EB8FC, + 0xED545578,0x08FCA5B5,0xD83D7CD3,0x4DAD0FC4,0x1E50EF5E,0xB161E6F8, + 0xA28514D9,0x6C51133C,0x6FD5C7E7,0x56E14EC4,0x362ABFCE,0xDDC6C837, + 0xD79A3234,0x92638212,0x670EFA8E,0x406000E0 }; + +static const u32 ks3[256] = { + 0x3A39CE37,0xD3FAF5CF,0xABC27737,0x5AC52D1B,0x5CB0679E,0x4FA33742, + 0xD3822740,0x99BC9BBE,0xD5118E9D,0xBF0F7315,0xD62D1C7E,0xC700C47B, + 0xB78C1B6B,0x21A19045,0xB26EB1BE,0x6A366EB4,0x5748AB2F,0xBC946E79, + 0xC6A376D2,0x6549C2C8,0x530FF8EE,0x468DDE7D,0xD5730A1D,0x4CD04DC6, + 0x2939BBDB,0xA9BA4650,0xAC9526E8,0xBE5EE304,0xA1FAD5F0,0x6A2D519A, + 0x63EF8CE2,0x9A86EE22,0xC089C2B8,0x43242EF6,0xA51E03AA,0x9CF2D0A4, + 0x83C061BA,0x9BE96A4D,0x8FE51550,0xBA645BD6,0x2826A2F9,0xA73A3AE1, + 0x4BA99586,0xEF5562E9,0xC72FEFD3,0xF752F7DA,0x3F046F69,0x77FA0A59, + 0x80E4A915,0x87B08601,0x9B09E6AD,0x3B3EE593,0xE990FD5A,0x9E34D797, + 0x2CF0B7D9,0x022B8B51,0x96D5AC3A,0x017DA67D,0xD1CF3ED6,0x7C7D2D28, + 0x1F9F25CF,0xADF2B89B,0x5AD6B472,0x5A88F54C,0xE029AC71,0xE019A5E6, + 0x47B0ACFD,0xED93FA9B,0xE8D3C48D,0x283B57CC,0xF8D56629,0x79132E28, + 0x785F0191,0xED756055,0xF7960E44,0xE3D35E8C,0x15056DD4,0x88F46DBA, + 0x03A16125,0x0564F0BD,0xC3EB9E15,0x3C9057A2,0x97271AEC,0xA93A072A, + 0x1B3F6D9B,0x1E6321F5,0xF59C66FB,0x26DCF319,0x7533D928,0xB155FDF5, + 0x03563482,0x8ABA3CBB,0x28517711,0xC20AD9F8,0xABCC5167,0xCCAD925F, + 0x4DE81751,0x3830DC8E,0x379D5862,0x9320F991,0xEA7A90C2,0xFB3E7BCE, + 0x5121CE64,0x774FBE32,0xA8B6E37E,0xC3293D46,0x48DE5369,0x6413E680, + 0xA2AE0810,0xDD6DB224,0x69852DFD,0x09072166,0xB39A460A,0x6445C0DD, + 0x586CDECF,0x1C20C8AE,0x5BBEF7DD,0x1B588D40,0xCCD2017F,0x6BB4E3BB, + 0xDDA26A7E,0x3A59FF45,0x3E350A44,0xBCB4CDD5,0x72EACEA8,0xFA6484BB, + 0x8D6612AE,0xBF3C6F47,0xD29BE463,0x542F5D9E,0xAEC2771B,0xF64E6370, + 0x740E0D8D,0xE75B1357,0xF8721671,0xAF537D5D,0x4040CB08,0x4EB4E2CC, + 0x34D2466A,0x0115AF84,0xE1B00428,0x95983A1D,0x06B89FB4,0xCE6EA048, + 0x6F3F3B82,0x3520AB82,0x011A1D4B,0x277227F8,0x611560B1,0xE7933FDC, + 0xBB3A792B,0x344525BD,0xA08839E1,0x51CE794B,0x2F32C9B7,0xA01FBAC9, + 0xE01CC87E,0xBCC7D1F6,0xCF0111C3,0xA1E8AAC7,0x1A908749,0xD44FBD9A, + 0xD0DADECB,0xD50ADA38,0x0339C32A,0xC6913667,0x8DF9317C,0xE0B12B4F, + 0xF79E59B7,0x43F5BB3A,0xF2D519FF,0x27D9459C,0xBF97222C,0x15E6FC2A, + 0x0F91FC71,0x9B941525,0xFAE59361,0xCEB69CEB,0xC2A86459,0x12BAA8D1, + 0xB6C1075E,0xE3056A0C,0x10D25065,0xCB03A442,0xE0EC6E0E,0x1698DB3B, + 0x4C98A0BE,0x3278E964,0x9F1F9532,0xE0D392DF,0xD3A0342B,0x8971F21E, + 0x1B0A7441,0x4BA3348C,0xC5BE7120,0xC37632D8,0xDF359F8D,0x9B992F2E, + 0xE60B6F47,0x0FE3F11D,0xE54CDA54,0x1EDAD891,0xCE6279CF,0xCD3E7E6F, + 0x1618B166,0xFD2C1D05,0x848FD2C5,0xF6FB2299,0xF523F357,0xA6327623, + 0x93A83531,0x56CCCD02,0xACF08162,0x5A75EBB5,0x6E163697,0x88D273CC, + 0xDE966292,0x81B949D0,0x4C50901B,0x71C65614,0xE6C6C7BD,0x327A140A, + 0x45E1D006,0xC3F27B9A,0xC9AA53FD,0x62A80F00,0xBB25BFE2,0x35BDD2F6, + 0x71126905,0xB2040222,0xB6CBCF7C,0xCD769C2B,0x53113EC0,0x1640E3D3, + 0x38ABBD60,0x2547ADF0,0xBA38209C,0xF746CE76,0x77AFA1C5,0x20756060, + 0x85CBFE4E,0x8AE88DD8,0x7AAAF9B0,0x4CF9AA7E,0x1948C25C,0x02FB8A8C, + 0x01C36AE4,0xD6EBE1F9,0x90D4F869,0xA65CDEA0,0x3F09252D,0xC208E69F, + 0xB74E6132,0xCE77E25B,0x578FDFE3,0x3AC372E6 }; + +static const u32 ps[BLOWFISH_ROUNDS+2] = { + 0x243F6A88,0x85A308D3,0x13198A2E,0x03707344,0xA4093822,0x299F31D0, + 0x082EFA98,0xEC4E6C89,0x452821E6,0x38D01377,0xBE5466CF,0x34E90C6C, + 0xC0AC29B7,0xC97C50DD,0x3F84D5B5,0xB5470917,0x9216D5D9,0x8979FB1B }; + + + +#if BLOWFISH_ROUNDS != 16 +static inline u32 +function_F( BLOWFISH_context *bc, u32 x ) +{ + u16 a, b, c, d; + +#ifdef WORDS_BIGENDIAN + a = ((byte*)&x)[0]; + b = ((byte*)&x)[1]; + c = ((byte*)&x)[2]; + d = ((byte*)&x)[3]; +#else + a = ((byte*)&x)[3]; + b = ((byte*)&x)[2]; + c = ((byte*)&x)[1]; + d = ((byte*)&x)[0]; +#endif + + return ((bc->s0[a] + bc->s1[b]) ^ bc->s2[c] ) + bc->s3[d]; +} +#endif + +#ifdef WORDS_BIGENDIAN +#define F(x) ((( s0[((byte*)&x)[0]] + s1[((byte*)&x)[1]]) \ + ^ s2[((byte*)&x)[2]]) + s3[((byte*)&x)[3]] ) +#else +#define F(x) ((( s0[((byte*)&x)[3]] + s1[((byte*)&x)[2]]) \ + ^ s2[((byte*)&x)[1]]) + s3[((byte*)&x)[0]] ) +#endif +#define R(l,r,i) do { l ^= p[i]; r ^= F(l); } while(0) + + +static void +do_encrypt ( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr ) +{ +#if BLOWFISH_ROUNDS == 16 + u32 xl, xr, *s0, *s1, *s2, *s3, *p; + + xl = *ret_xl; + xr = *ret_xr; + p = bc->p; + s0 = bc->s0; + s1 = bc->s1; + s2 = bc->s2; + s3 = bc->s3; + + R( xl, xr, 0); + R( xr, xl, 1); + R( xl, xr, 2); + R( xr, xl, 3); + R( xl, xr, 4); + R( xr, xl, 5); + R( xl, xr, 6); + R( xr, xl, 7); + R( xl, xr, 8); + R( xr, xl, 9); + R( xl, xr, 10); + R( xr, xl, 11); + R( xl, xr, 12); + R( xr, xl, 13); + R( xl, xr, 14); + R( xr, xl, 15); + + xl ^= p[BLOWFISH_ROUNDS]; + xr ^= p[BLOWFISH_ROUNDS+1]; + + *ret_xl = xr; + *ret_xr = xl; + +#else + u32 xl, xr, temp, *p; + int i; + + xl = *ret_xl; + xr = *ret_xr; + p = bc->p; + + for(i=0; i < BLOWFISH_ROUNDS; i++ ) + { + xl ^= p[i]; + xr ^= function_F(bc, xl); + temp = xl; + xl = xr; + xr = temp; + } + temp = xl; + xl = xr; + xr = temp; + + xr ^= p[BLOWFISH_ROUNDS]; + xl ^= p[BLOWFISH_ROUNDS+1]; + + *ret_xl = xl; + *ret_xr = xr; +#endif +} + + +static void +decrypt ( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr ) +{ +#if BLOWFISH_ROUNDS == 16 + u32 xl, xr, *s0, *s1, *s2, *s3, *p; + + xl = *ret_xl; + xr = *ret_xr; + p = bc->p; + s0 = bc->s0; + s1 = bc->s1; + s2 = bc->s2; + s3 = bc->s3; + + R( xl, xr, 17); + R( xr, xl, 16); + R( xl, xr, 15); + R( xr, xl, 14); + R( xl, xr, 13); + R( xr, xl, 12); + R( xl, xr, 11); + R( xr, xl, 10); + R( xl, xr, 9); + R( xr, xl, 8); + R( xl, xr, 7); + R( xr, xl, 6); + R( xl, xr, 5); + R( xr, xl, 4); + R( xl, xr, 3); + R( xr, xl, 2); + + xl ^= p[1]; + xr ^= p[0]; + + *ret_xl = xr; + *ret_xr = xl; + +#else + u32 xl, xr, temp, *p; + int i; + + xl = *ret_xl; + xr = *ret_xr; + p = bc->p; + + for (i=BLOWFISH_ROUNDS+1; i > 1; i-- ) + { + xl ^= p[i]; + xr ^= function_F(bc, xl); + temp = xl; + xl = xr; + xr = temp; + } + + temp = xl; + xl = xr; + xr = temp; + + xr ^= p[1]; + xl ^= p[0]; + + *ret_xl = xl; + *ret_xr = xr; +#endif +} + +#undef F +#undef R + +static void +do_encrypt_block ( BLOWFISH_context *bc, byte *outbuf, const byte *inbuf ) +{ + u32 d1, d2; + + d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; + d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; + do_encrypt( bc, &d1, &d2 ); + outbuf[0] = (d1 >> 24) & 0xff; + outbuf[1] = (d1 >> 16) & 0xff; + outbuf[2] = (d1 >> 8) & 0xff; + outbuf[3] = d1 & 0xff; + outbuf[4] = (d2 >> 24) & 0xff; + outbuf[5] = (d2 >> 16) & 0xff; + outbuf[6] = (d2 >> 8) & 0xff; + outbuf[7] = d2 & 0xff; +} + +static void +encrypt_block (void *context, byte *outbuf, const byte *inbuf) +{ + BLOWFISH_context *bc = (BLOWFISH_context *) context; + do_encrypt_block (bc, outbuf, inbuf); + _gcry_burn_stack (64); +} + + +static void +do_decrypt_block (BLOWFISH_context *bc, byte *outbuf, const byte *inbuf) +{ + u32 d1, d2; + + d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; + d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; + decrypt( bc, &d1, &d2 ); + outbuf[0] = (d1 >> 24) & 0xff; + outbuf[1] = (d1 >> 16) & 0xff; + outbuf[2] = (d1 >> 8) & 0xff; + outbuf[3] = d1 & 0xff; + outbuf[4] = (d2 >> 24) & 0xff; + outbuf[5] = (d2 >> 16) & 0xff; + outbuf[6] = (d2 >> 8) & 0xff; + outbuf[7] = d2 & 0xff; +} + +static void +decrypt_block (void *context, byte *outbuf, const byte *inbuf) +{ + BLOWFISH_context *bc = (BLOWFISH_context *) context; + do_decrypt_block (bc, outbuf, inbuf); + _gcry_burn_stack (64); +} + + + + + +static gcry_err_code_t +do_bf_setkey (BLOWFISH_context *c, const byte *key, unsigned keylen) +{ + int i, j; + u32 data, datal, datar; + static int initialized; + static const char *selftest_failed; + + if( !initialized ) + { + initialized = 1; + selftest_failed = selftest(); + if( selftest_failed ) + log_error ("%s\n", selftest_failed ); + } + if( selftest_failed ) + return GPG_ERR_SELFTEST_FAILED; + + for(i=0; i < BLOWFISH_ROUNDS+2; i++ ) + c->p[i] = ps[i]; + for(i=0; i < 256; i++ ) + { + c->s0[i] = ks0[i]; + c->s1[i] = ks1[i]; + c->s2[i] = ks2[i]; + c->s3[i] = ks3[i]; + } + + for(i=j=0; i < BLOWFISH_ROUNDS+2; i++ ) + { +#ifdef WORDS_BIGENDIAN + ((byte*)&data)[0] = key[j]; + ((byte*)&data)[1] = key[(j+1)%keylen]; + ((byte*)&data)[2] = key[(j+2)%keylen]; + ((byte*)&data)[3] = key[(j+3)%keylen]; +#else + ((byte*)&data)[3] = key[j]; + ((byte*)&data)[2] = key[(j+1)%keylen]; + ((byte*)&data)[1] = key[(j+2)%keylen]; + ((byte*)&data)[0] = key[(j+3)%keylen]; +#endif + c->p[i] ^= data; + j = (j+4) % keylen; + } + + datal = datar = 0; + for(i=0; i < BLOWFISH_ROUNDS+2; i += 2 ) + { + do_encrypt( c, &datal, &datar ); + c->p[i] = datal; + c->p[i+1] = datar; + } + for(i=0; i < 256; i += 2 ) + { + do_encrypt( c, &datal, &datar ); + c->s0[i] = datal; + c->s0[i+1] = datar; + } + for(i=0; i < 256; i += 2 ) + { + do_encrypt( c, &datal, &datar ); + c->s1[i] = datal; + c->s1[i+1] = datar; + } + for(i=0; i < 256; i += 2 ) + { + do_encrypt( c, &datal, &datar ); + c->s2[i] = datal; + c->s2[i+1] = datar; + } + for(i=0; i < 256; i += 2 ) + { + do_encrypt( c, &datal, &datar ); + c->s3[i] = datal; + c->s3[i+1] = datar; + } + + + /* Check for weak key. A weak key is a key in which a value in + the P-array (here c) occurs more than once per table. */ + for(i=0; i < 255; i++ ) + { + for( j=i+1; j < 256; j++) + { + if( (c->s0[i] == c->s0[j]) || (c->s1[i] == c->s1[j]) || + (c->s2[i] == c->s2[j]) || (c->s3[i] == c->s3[j]) ) + return GPG_ERR_WEAK_KEY; + } + } + + return GPG_ERR_NO_ERROR; +} + + +static gcry_err_code_t +bf_setkey (void *context, const byte *key, unsigned keylen) +{ + BLOWFISH_context *c = (BLOWFISH_context *) context; + gcry_err_code_t rc = do_bf_setkey (c, key, keylen); + _gcry_burn_stack (64); + return rc; +} + + +gcry_cipher_spec_t _gcry_cipher_spec_blowfish = + { + "BLOWFISH", NULL, NULL, BLOWFISH_BLOCKSIZE, 128, + sizeof (BLOWFISH_context), + bf_setkey, encrypt_block, decrypt_block + , +#ifdef GRUB_UTIL + .modname = "gcry_blowfish", +#endif + }; + + +GRUB_MOD_INIT(gcry_blowfish) +{ + grub_cipher_register (&_gcry_cipher_spec_blowfish); +} + +GRUB_MOD_FINI(gcry_blowfish) +{ + grub_cipher_unregister (&_gcry_cipher_spec_blowfish); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c b/grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c new file mode 100644 index 000000000..f1a914305 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/camellia-glue.c @@ -0,0 +1,211 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* camellia-glue.c - Glue for the Camellia cipher + * Copyright (C) 2007 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +/* I put all the libgcrypt-specific stuff in this file to keep the + camellia.c/camellia.h files exactly as provided by NTT. If they + update their code, this should make it easier to bring the changes + in. - dshaw + + There is one small change which needs to be done: Include the + following code at the top of camellia.h: */ +#if 0 + +/* To use Camellia with libraries it is often useful to keep the name + * space of the library clean. The following macro is thus useful: + * + * #define CAMELLIA_EXT_SYM_PREFIX foo_ + * + * This prefixes all external symbols with "foo_". + */ +#ifdef HAVE_CONFIG_H +#endif +#ifdef CAMELLIA_EXT_SYM_PREFIX +#define CAMELLIA_PREFIX1(x,y) x ## y +#define CAMELLIA_PREFIX2(x,y) CAMELLIA_PREFIX1(x,y) +#define CAMELLIA_PREFIX(x) CAMELLIA_PREFIX2(CAMELLIA_EXT_SYM_PREFIX,x) +#define Camellia_Ekeygen CAMELLIA_PREFIX(Camellia_Ekeygen) +#define Camellia_EncryptBlock CAMELLIA_PREFIX(Camellia_EncryptBlock) +#define Camellia_DecryptBlock CAMELLIA_PREFIX(Camellia_DecryptBlock) +#define camellia_decrypt128 CAMELLIA_PREFIX(camellia_decrypt128) +#define camellia_decrypt256 CAMELLIA_PREFIX(camellia_decrypt256) +#define camellia_encrypt128 CAMELLIA_PREFIX(camellia_encrypt128) +#define camellia_encrypt256 CAMELLIA_PREFIX(camellia_encrypt256) +#define camellia_setup128 CAMELLIA_PREFIX(camellia_setup128) +#define camellia_setup192 CAMELLIA_PREFIX(camellia_setup192) +#define camellia_setup256 CAMELLIA_PREFIX(camellia_setup256) +#endif /*CAMELLIA_EXT_SYM_PREFIX*/ + +#endif /* Code sample. */ + + +#include "types.h" +#include "g10lib.h" +#include "cipher.h" +#include "camellia.h" + +typedef struct +{ + int keybitlength; + KEY_TABLE_TYPE keytable; +} CAMELLIA_context; + + +static gcry_err_code_t +camellia_setkey(void *c, const byte *key, unsigned keylen) +{ + CAMELLIA_context *ctx=c; + static int initialized=0; + static const char *selftest_failed=NULL; + + if(keylen!=16 && keylen!=24 && keylen!=32) + return GPG_ERR_INV_KEYLEN; + + if(!initialized) + { + initialized=1; + selftest_failed=selftest(); + if(selftest_failed) + log_error("%s\n",selftest_failed); + } + + if(selftest_failed) + return GPG_ERR_SELFTEST_FAILED; + + ctx->keybitlength=keylen*8; + Camellia_Ekeygen(ctx->keybitlength,key,ctx->keytable); + _gcry_burn_stack + ((19+34+34)*sizeof(u32)+2*sizeof(void*) /* camellia_setup256 */ + +(4+32)*sizeof(u32)+2*sizeof(void*) /* camellia_setup192 */ + +0+sizeof(int)+2*sizeof(void*) /* Camellia_Ekeygen */ + +3*2*sizeof(void*) /* Function calls. */ + ); + + return 0; +} + +static void +camellia_encrypt(void *c, byte *outbuf, const byte *inbuf) +{ + CAMELLIA_context *ctx=c; + + Camellia_EncryptBlock(ctx->keybitlength,inbuf,ctx->keytable,outbuf); + _gcry_burn_stack + (sizeof(int)+2*sizeof(unsigned char *)+sizeof(KEY_TABLE_TYPE) + +4*sizeof(u32) + +2*sizeof(u32*)+4*sizeof(u32) + +2*2*sizeof(void*) /* Function calls. */ + ); +} + +static void +camellia_decrypt(void *c, byte *outbuf, const byte *inbuf) +{ + CAMELLIA_context *ctx=c; + + Camellia_DecryptBlock(ctx->keybitlength,inbuf,ctx->keytable,outbuf); + _gcry_burn_stack + (sizeof(int)+2*sizeof(unsigned char *)+sizeof(KEY_TABLE_TYPE) + +4*sizeof(u32) + +2*sizeof(u32*)+4*sizeof(u32) + +2*2*sizeof(void*) /* Function calls. */ + ); +} + + +/* These oids are from + , + retrieved May 1, 2007. */ + +static gcry_cipher_oid_spec_t camellia128_oids[] = + { + {"1.2.392.200011.61.1.1.1.2", GCRY_CIPHER_MODE_CBC}, + {"0.3.4401.5.3.1.9.1", GCRY_CIPHER_MODE_ECB}, + {"0.3.4401.5.3.1.9.3", GCRY_CIPHER_MODE_OFB}, + {"0.3.4401.5.3.1.9.4", GCRY_CIPHER_MODE_CFB}, + { NULL } + }; + +static gcry_cipher_oid_spec_t camellia192_oids[] = + { + {"1.2.392.200011.61.1.1.1.3", GCRY_CIPHER_MODE_CBC}, + {"0.3.4401.5.3.1.9.21", GCRY_CIPHER_MODE_ECB}, + {"0.3.4401.5.3.1.9.23", GCRY_CIPHER_MODE_OFB}, + {"0.3.4401.5.3.1.9.24", GCRY_CIPHER_MODE_CFB}, + { NULL } + }; + +static gcry_cipher_oid_spec_t camellia256_oids[] = + { + {"1.2.392.200011.61.1.1.1.4", GCRY_CIPHER_MODE_CBC}, + {"0.3.4401.5.3.1.9.41", GCRY_CIPHER_MODE_ECB}, + {"0.3.4401.5.3.1.9.43", GCRY_CIPHER_MODE_OFB}, + {"0.3.4401.5.3.1.9.44", GCRY_CIPHER_MODE_CFB}, + { NULL } + }; + +gcry_cipher_spec_t _gcry_cipher_spec_camellia128 = + { + "CAMELLIA128",NULL,camellia128_oids,CAMELLIA_BLOCK_SIZE,128, + sizeof(CAMELLIA_context),camellia_setkey,camellia_encrypt,camellia_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_camellia", +#endif + }; + +gcry_cipher_spec_t _gcry_cipher_spec_camellia192 = + { + "CAMELLIA192",NULL,camellia192_oids,CAMELLIA_BLOCK_SIZE,192, + sizeof(CAMELLIA_context),camellia_setkey,camellia_encrypt,camellia_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_camellia", +#endif + }; + +gcry_cipher_spec_t _gcry_cipher_spec_camellia256 = + { + "CAMELLIA256",NULL,camellia256_oids,CAMELLIA_BLOCK_SIZE,256, + sizeof(CAMELLIA_context),camellia_setkey,camellia_encrypt,camellia_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_camellia", +#endif + }; + + +GRUB_MOD_INIT(gcry_camellia) +{ + grub_cipher_register (&_gcry_cipher_spec_camellia128); + grub_cipher_register (&_gcry_cipher_spec_camellia192); + grub_cipher_register (&_gcry_cipher_spec_camellia256); +} + +GRUB_MOD_FINI(gcry_camellia) +{ + grub_cipher_unregister (&_gcry_cipher_spec_camellia128); + grub_cipher_unregister (&_gcry_cipher_spec_camellia192); + grub_cipher_unregister (&_gcry_cipher_spec_camellia256); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/camellia.c b/grub-core/lib/libgcrypt-grub/cipher/camellia.c new file mode 100644 index 000000000..5c85ea8fd --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/camellia.c @@ -0,0 +1,1463 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* camellia.h ver 1.2.0 + * + * Copyright (C) 2006,2007 + * NTT (Nippon Telegraph and Telephone Corporation). + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * Algorithm Specification + * http://info.isl.ntt.co.jp/crypt/eng/camellia/specifications.html + */ + + +#include "camellia.h" + +/* u32 must be 32bit word */ +typedef unsigned int u32; +typedef unsigned char u8; + +/* key constants */ + +#define CAMELLIA_SIGMA1L (0xA09E667FL) +#define CAMELLIA_SIGMA1R (0x3BCC908BL) +#define CAMELLIA_SIGMA2L (0xB67AE858L) +#define CAMELLIA_SIGMA2R (0x4CAA73B2L) +#define CAMELLIA_SIGMA3L (0xC6EF372FL) +#define CAMELLIA_SIGMA3R (0xE94F82BEL) +#define CAMELLIA_SIGMA4L (0x54FF53A5L) +#define CAMELLIA_SIGMA4R (0xF1D36F1CL) +#define CAMELLIA_SIGMA5L (0x10E527FAL) +#define CAMELLIA_SIGMA5R (0xDE682D1DL) +#define CAMELLIA_SIGMA6L (0xB05688C2L) +#define CAMELLIA_SIGMA6R (0xB3E6C1FDL) + +/* + * macros + */ + + +#if defined(_MSC_VER) + +# define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) +# define GETU32(p) SWAP(*((u32 *)(p))) +# define PUTU32(ct, st) {*((u32 *)(ct)) = SWAP((st));} + +#else /* not MS-VC */ + +# define GETU32(pt) \ + (((u32)(pt)[0] << 24) \ + ^ ((u32)(pt)[1] << 16) \ + ^ ((u32)(pt)[2] << 8) \ + ^ ((u32)(pt)[3])) + +# define PUTU32(ct, st) { \ + (ct)[0] = (u8)((st) >> 24); \ + (ct)[1] = (u8)((st) >> 16); \ + (ct)[2] = (u8)((st) >> 8); \ + (ct)[3] = (u8)(st); } + +#endif + +#define CamelliaSubkeyL(INDEX) (subkey[(INDEX)*2]) +#define CamelliaSubkeyR(INDEX) (subkey[(INDEX)*2 + 1]) + +/* rotation right shift 1byte */ +#define CAMELLIA_RR8(x) (((x) >> 8) + ((x) << 24)) +/* rotation left shift 1bit */ +#define CAMELLIA_RL1(x) (((x) << 1) + ((x) >> 31)) +/* rotation left shift 1byte */ +#define CAMELLIA_RL8(x) (((x) << 8) + ((x) >> 24)) + +#define CAMELLIA_ROLDQ(ll, lr, rl, rr, w0, w1, bits) \ + do { \ + w0 = ll; \ + ll = (ll << bits) + (lr >> (32 - bits)); \ + lr = (lr << bits) + (rl >> (32 - bits)); \ + rl = (rl << bits) + (rr >> (32 - bits)); \ + rr = (rr << bits) + (w0 >> (32 - bits)); \ + } while(0) + +#define CAMELLIA_ROLDQo32(ll, lr, rl, rr, w0, w1, bits) \ + do { \ + w0 = ll; \ + w1 = lr; \ + ll = (lr << (bits - 32)) + (rl >> (64 - bits)); \ + lr = (rl << (bits - 32)) + (rr >> (64 - bits)); \ + rl = (rr << (bits - 32)) + (w0 >> (64 - bits)); \ + rr = (w0 << (bits - 32)) + (w1 >> (64 - bits)); \ + } while(0) + +#define CAMELLIA_SP1110(INDEX) (camellia_sp1110[(INDEX)]) +#define CAMELLIA_SP0222(INDEX) (camellia_sp0222[(INDEX)]) +#define CAMELLIA_SP3033(INDEX) (camellia_sp3033[(INDEX)]) +#define CAMELLIA_SP4404(INDEX) (camellia_sp4404[(INDEX)]) + +#define CAMELLIA_F(xl, xr, kl, kr, yl, yr, il, ir, t0, t1) \ + do { \ + il = xl ^ kl; \ + ir = xr ^ kr; \ + t0 = il >> 16; \ + t1 = ir >> 16; \ + yl = CAMELLIA_SP1110(ir & 0xff) \ + ^ CAMELLIA_SP0222((t1 >> 8) & 0xff) \ + ^ CAMELLIA_SP3033(t1 & 0xff) \ + ^ CAMELLIA_SP4404((ir >> 8) & 0xff); \ + yr = CAMELLIA_SP1110((t0 >> 8) & 0xff) \ + ^ CAMELLIA_SP0222(t0 & 0xff) \ + ^ CAMELLIA_SP3033((il >> 8) & 0xff) \ + ^ CAMELLIA_SP4404(il & 0xff); \ + yl ^= yr; \ + yr = CAMELLIA_RR8(yr); \ + yr ^= yl; \ + } while(0) + + +/* + * for speed up + * + */ +#define CAMELLIA_FLS(ll, lr, rl, rr, kll, klr, krl, krr, t0, t1, t2, t3) \ + do { \ + t0 = kll; \ + t0 &= ll; \ + lr ^= CAMELLIA_RL1(t0); \ + t1 = klr; \ + t1 |= lr; \ + ll ^= t1; \ + \ + t2 = krr; \ + t2 |= rr; \ + rl ^= t2; \ + t3 = krl; \ + t3 &= rl; \ + rr ^= CAMELLIA_RL1(t3); \ + } while(0) + +#define CAMELLIA_ROUNDSM(xl, xr, kl, kr, yl, yr, il, ir, t0, t1) \ + do { \ + ir = CAMELLIA_SP1110(xr & 0xff) \ + ^ CAMELLIA_SP0222((xr >> 24) & 0xff) \ + ^ CAMELLIA_SP3033((xr >> 16) & 0xff) \ + ^ CAMELLIA_SP4404((xr >> 8) & 0xff); \ + il = CAMELLIA_SP1110((xl >> 24) & 0xff) \ + ^ CAMELLIA_SP0222((xl >> 16) & 0xff) \ + ^ CAMELLIA_SP3033((xl >> 8) & 0xff) \ + ^ CAMELLIA_SP4404(xl & 0xff); \ + il ^= kl; \ + ir ^= kr; \ + ir ^= il; \ + il = CAMELLIA_RR8(il); \ + il ^= ir; \ + yl ^= ir; \ + yr ^= il; \ + } while(0) + + +static const u32 camellia_sp1110[256] = { + 0x70707000,0x82828200,0x2c2c2c00,0xececec00, + 0xb3b3b300,0x27272700,0xc0c0c000,0xe5e5e500, + 0xe4e4e400,0x85858500,0x57575700,0x35353500, + 0xeaeaea00,0x0c0c0c00,0xaeaeae00,0x41414100, + 0x23232300,0xefefef00,0x6b6b6b00,0x93939300, + 0x45454500,0x19191900,0xa5a5a500,0x21212100, + 0xededed00,0x0e0e0e00,0x4f4f4f00,0x4e4e4e00, + 0x1d1d1d00,0x65656500,0x92929200,0xbdbdbd00, + 0x86868600,0xb8b8b800,0xafafaf00,0x8f8f8f00, + 0x7c7c7c00,0xebebeb00,0x1f1f1f00,0xcecece00, + 0x3e3e3e00,0x30303000,0xdcdcdc00,0x5f5f5f00, + 0x5e5e5e00,0xc5c5c500,0x0b0b0b00,0x1a1a1a00, + 0xa6a6a600,0xe1e1e100,0x39393900,0xcacaca00, + 0xd5d5d500,0x47474700,0x5d5d5d00,0x3d3d3d00, + 0xd9d9d900,0x01010100,0x5a5a5a00,0xd6d6d600, + 0x51515100,0x56565600,0x6c6c6c00,0x4d4d4d00, + 0x8b8b8b00,0x0d0d0d00,0x9a9a9a00,0x66666600, + 0xfbfbfb00,0xcccccc00,0xb0b0b000,0x2d2d2d00, + 0x74747400,0x12121200,0x2b2b2b00,0x20202000, + 0xf0f0f000,0xb1b1b100,0x84848400,0x99999900, + 0xdfdfdf00,0x4c4c4c00,0xcbcbcb00,0xc2c2c200, + 0x34343400,0x7e7e7e00,0x76767600,0x05050500, + 0x6d6d6d00,0xb7b7b700,0xa9a9a900,0x31313100, + 0xd1d1d100,0x17171700,0x04040400,0xd7d7d700, + 0x14141400,0x58585800,0x3a3a3a00,0x61616100, + 0xdedede00,0x1b1b1b00,0x11111100,0x1c1c1c00, + 0x32323200,0x0f0f0f00,0x9c9c9c00,0x16161600, + 0x53535300,0x18181800,0xf2f2f200,0x22222200, + 0xfefefe00,0x44444400,0xcfcfcf00,0xb2b2b200, + 0xc3c3c300,0xb5b5b500,0x7a7a7a00,0x91919100, + 0x24242400,0x08080800,0xe8e8e800,0xa8a8a800, + 0x60606000,0xfcfcfc00,0x69696900,0x50505000, + 0xaaaaaa00,0xd0d0d000,0xa0a0a000,0x7d7d7d00, + 0xa1a1a100,0x89898900,0x62626200,0x97979700, + 0x54545400,0x5b5b5b00,0x1e1e1e00,0x95959500, + 0xe0e0e000,0xffffff00,0x64646400,0xd2d2d200, + 0x10101000,0xc4c4c400,0x00000000,0x48484800, + 0xa3a3a300,0xf7f7f700,0x75757500,0xdbdbdb00, + 0x8a8a8a00,0x03030300,0xe6e6e600,0xdadada00, + 0x09090900,0x3f3f3f00,0xdddddd00,0x94949400, + 0x87878700,0x5c5c5c00,0x83838300,0x02020200, + 0xcdcdcd00,0x4a4a4a00,0x90909000,0x33333300, + 0x73737300,0x67676700,0xf6f6f600,0xf3f3f300, + 0x9d9d9d00,0x7f7f7f00,0xbfbfbf00,0xe2e2e200, + 0x52525200,0x9b9b9b00,0xd8d8d800,0x26262600, + 0xc8c8c800,0x37373700,0xc6c6c600,0x3b3b3b00, + 0x81818100,0x96969600,0x6f6f6f00,0x4b4b4b00, + 0x13131300,0xbebebe00,0x63636300,0x2e2e2e00, + 0xe9e9e900,0x79797900,0xa7a7a700,0x8c8c8c00, + 0x9f9f9f00,0x6e6e6e00,0xbcbcbc00,0x8e8e8e00, + 0x29292900,0xf5f5f500,0xf9f9f900,0xb6b6b600, + 0x2f2f2f00,0xfdfdfd00,0xb4b4b400,0x59595900, + 0x78787800,0x98989800,0x06060600,0x6a6a6a00, + 0xe7e7e700,0x46464600,0x71717100,0xbababa00, + 0xd4d4d400,0x25252500,0xababab00,0x42424200, + 0x88888800,0xa2a2a200,0x8d8d8d00,0xfafafa00, + 0x72727200,0x07070700,0xb9b9b900,0x55555500, + 0xf8f8f800,0xeeeeee00,0xacacac00,0x0a0a0a00, + 0x36363600,0x49494900,0x2a2a2a00,0x68686800, + 0x3c3c3c00,0x38383800,0xf1f1f100,0xa4a4a400, + 0x40404000,0x28282800,0xd3d3d300,0x7b7b7b00, + 0xbbbbbb00,0xc9c9c900,0x43434300,0xc1c1c100, + 0x15151500,0xe3e3e300,0xadadad00,0xf4f4f400, + 0x77777700,0xc7c7c700,0x80808000,0x9e9e9e00, +}; + +static const u32 camellia_sp0222[256] = { + 0x00e0e0e0,0x00050505,0x00585858,0x00d9d9d9, + 0x00676767,0x004e4e4e,0x00818181,0x00cbcbcb, + 0x00c9c9c9,0x000b0b0b,0x00aeaeae,0x006a6a6a, + 0x00d5d5d5,0x00181818,0x005d5d5d,0x00828282, + 0x00464646,0x00dfdfdf,0x00d6d6d6,0x00272727, + 0x008a8a8a,0x00323232,0x004b4b4b,0x00424242, + 0x00dbdbdb,0x001c1c1c,0x009e9e9e,0x009c9c9c, + 0x003a3a3a,0x00cacaca,0x00252525,0x007b7b7b, + 0x000d0d0d,0x00717171,0x005f5f5f,0x001f1f1f, + 0x00f8f8f8,0x00d7d7d7,0x003e3e3e,0x009d9d9d, + 0x007c7c7c,0x00606060,0x00b9b9b9,0x00bebebe, + 0x00bcbcbc,0x008b8b8b,0x00161616,0x00343434, + 0x004d4d4d,0x00c3c3c3,0x00727272,0x00959595, + 0x00ababab,0x008e8e8e,0x00bababa,0x007a7a7a, + 0x00b3b3b3,0x00020202,0x00b4b4b4,0x00adadad, + 0x00a2a2a2,0x00acacac,0x00d8d8d8,0x009a9a9a, + 0x00171717,0x001a1a1a,0x00353535,0x00cccccc, + 0x00f7f7f7,0x00999999,0x00616161,0x005a5a5a, + 0x00e8e8e8,0x00242424,0x00565656,0x00404040, + 0x00e1e1e1,0x00636363,0x00090909,0x00333333, + 0x00bfbfbf,0x00989898,0x00979797,0x00858585, + 0x00686868,0x00fcfcfc,0x00ececec,0x000a0a0a, + 0x00dadada,0x006f6f6f,0x00535353,0x00626262, + 0x00a3a3a3,0x002e2e2e,0x00080808,0x00afafaf, + 0x00282828,0x00b0b0b0,0x00747474,0x00c2c2c2, + 0x00bdbdbd,0x00363636,0x00222222,0x00383838, + 0x00646464,0x001e1e1e,0x00393939,0x002c2c2c, + 0x00a6a6a6,0x00303030,0x00e5e5e5,0x00444444, + 0x00fdfdfd,0x00888888,0x009f9f9f,0x00656565, + 0x00878787,0x006b6b6b,0x00f4f4f4,0x00232323, + 0x00484848,0x00101010,0x00d1d1d1,0x00515151, + 0x00c0c0c0,0x00f9f9f9,0x00d2d2d2,0x00a0a0a0, + 0x00555555,0x00a1a1a1,0x00414141,0x00fafafa, + 0x00434343,0x00131313,0x00c4c4c4,0x002f2f2f, + 0x00a8a8a8,0x00b6b6b6,0x003c3c3c,0x002b2b2b, + 0x00c1c1c1,0x00ffffff,0x00c8c8c8,0x00a5a5a5, + 0x00202020,0x00898989,0x00000000,0x00909090, + 0x00474747,0x00efefef,0x00eaeaea,0x00b7b7b7, + 0x00151515,0x00060606,0x00cdcdcd,0x00b5b5b5, + 0x00121212,0x007e7e7e,0x00bbbbbb,0x00292929, + 0x000f0f0f,0x00b8b8b8,0x00070707,0x00040404, + 0x009b9b9b,0x00949494,0x00212121,0x00666666, + 0x00e6e6e6,0x00cecece,0x00ededed,0x00e7e7e7, + 0x003b3b3b,0x00fefefe,0x007f7f7f,0x00c5c5c5, + 0x00a4a4a4,0x00373737,0x00b1b1b1,0x004c4c4c, + 0x00919191,0x006e6e6e,0x008d8d8d,0x00767676, + 0x00030303,0x002d2d2d,0x00dedede,0x00969696, + 0x00262626,0x007d7d7d,0x00c6c6c6,0x005c5c5c, + 0x00d3d3d3,0x00f2f2f2,0x004f4f4f,0x00191919, + 0x003f3f3f,0x00dcdcdc,0x00797979,0x001d1d1d, + 0x00525252,0x00ebebeb,0x00f3f3f3,0x006d6d6d, + 0x005e5e5e,0x00fbfbfb,0x00696969,0x00b2b2b2, + 0x00f0f0f0,0x00313131,0x000c0c0c,0x00d4d4d4, + 0x00cfcfcf,0x008c8c8c,0x00e2e2e2,0x00757575, + 0x00a9a9a9,0x004a4a4a,0x00575757,0x00848484, + 0x00111111,0x00454545,0x001b1b1b,0x00f5f5f5, + 0x00e4e4e4,0x000e0e0e,0x00737373,0x00aaaaaa, + 0x00f1f1f1,0x00dddddd,0x00595959,0x00141414, + 0x006c6c6c,0x00929292,0x00545454,0x00d0d0d0, + 0x00787878,0x00707070,0x00e3e3e3,0x00494949, + 0x00808080,0x00505050,0x00a7a7a7,0x00f6f6f6, + 0x00777777,0x00939393,0x00868686,0x00838383, + 0x002a2a2a,0x00c7c7c7,0x005b5b5b,0x00e9e9e9, + 0x00eeeeee,0x008f8f8f,0x00010101,0x003d3d3d, +}; + +static const u32 camellia_sp3033[256] = { + 0x38003838,0x41004141,0x16001616,0x76007676, + 0xd900d9d9,0x93009393,0x60006060,0xf200f2f2, + 0x72007272,0xc200c2c2,0xab00abab,0x9a009a9a, + 0x75007575,0x06000606,0x57005757,0xa000a0a0, + 0x91009191,0xf700f7f7,0xb500b5b5,0xc900c9c9, + 0xa200a2a2,0x8c008c8c,0xd200d2d2,0x90009090, + 0xf600f6f6,0x07000707,0xa700a7a7,0x27002727, + 0x8e008e8e,0xb200b2b2,0x49004949,0xde00dede, + 0x43004343,0x5c005c5c,0xd700d7d7,0xc700c7c7, + 0x3e003e3e,0xf500f5f5,0x8f008f8f,0x67006767, + 0x1f001f1f,0x18001818,0x6e006e6e,0xaf00afaf, + 0x2f002f2f,0xe200e2e2,0x85008585,0x0d000d0d, + 0x53005353,0xf000f0f0,0x9c009c9c,0x65006565, + 0xea00eaea,0xa300a3a3,0xae00aeae,0x9e009e9e, + 0xec00ecec,0x80008080,0x2d002d2d,0x6b006b6b, + 0xa800a8a8,0x2b002b2b,0x36003636,0xa600a6a6, + 0xc500c5c5,0x86008686,0x4d004d4d,0x33003333, + 0xfd00fdfd,0x66006666,0x58005858,0x96009696, + 0x3a003a3a,0x09000909,0x95009595,0x10001010, + 0x78007878,0xd800d8d8,0x42004242,0xcc00cccc, + 0xef00efef,0x26002626,0xe500e5e5,0x61006161, + 0x1a001a1a,0x3f003f3f,0x3b003b3b,0x82008282, + 0xb600b6b6,0xdb00dbdb,0xd400d4d4,0x98009898, + 0xe800e8e8,0x8b008b8b,0x02000202,0xeb00ebeb, + 0x0a000a0a,0x2c002c2c,0x1d001d1d,0xb000b0b0, + 0x6f006f6f,0x8d008d8d,0x88008888,0x0e000e0e, + 0x19001919,0x87008787,0x4e004e4e,0x0b000b0b, + 0xa900a9a9,0x0c000c0c,0x79007979,0x11001111, + 0x7f007f7f,0x22002222,0xe700e7e7,0x59005959, + 0xe100e1e1,0xda00dada,0x3d003d3d,0xc800c8c8, + 0x12001212,0x04000404,0x74007474,0x54005454, + 0x30003030,0x7e007e7e,0xb400b4b4,0x28002828, + 0x55005555,0x68006868,0x50005050,0xbe00bebe, + 0xd000d0d0,0xc400c4c4,0x31003131,0xcb00cbcb, + 0x2a002a2a,0xad00adad,0x0f000f0f,0xca00caca, + 0x70007070,0xff00ffff,0x32003232,0x69006969, + 0x08000808,0x62006262,0x00000000,0x24002424, + 0xd100d1d1,0xfb00fbfb,0xba00baba,0xed00eded, + 0x45004545,0x81008181,0x73007373,0x6d006d6d, + 0x84008484,0x9f009f9f,0xee00eeee,0x4a004a4a, + 0xc300c3c3,0x2e002e2e,0xc100c1c1,0x01000101, + 0xe600e6e6,0x25002525,0x48004848,0x99009999, + 0xb900b9b9,0xb300b3b3,0x7b007b7b,0xf900f9f9, + 0xce00cece,0xbf00bfbf,0xdf00dfdf,0x71007171, + 0x29002929,0xcd00cdcd,0x6c006c6c,0x13001313, + 0x64006464,0x9b009b9b,0x63006363,0x9d009d9d, + 0xc000c0c0,0x4b004b4b,0xb700b7b7,0xa500a5a5, + 0x89008989,0x5f005f5f,0xb100b1b1,0x17001717, + 0xf400f4f4,0xbc00bcbc,0xd300d3d3,0x46004646, + 0xcf00cfcf,0x37003737,0x5e005e5e,0x47004747, + 0x94009494,0xfa00fafa,0xfc00fcfc,0x5b005b5b, + 0x97009797,0xfe00fefe,0x5a005a5a,0xac00acac, + 0x3c003c3c,0x4c004c4c,0x03000303,0x35003535, + 0xf300f3f3,0x23002323,0xb800b8b8,0x5d005d5d, + 0x6a006a6a,0x92009292,0xd500d5d5,0x21002121, + 0x44004444,0x51005151,0xc600c6c6,0x7d007d7d, + 0x39003939,0x83008383,0xdc00dcdc,0xaa00aaaa, + 0x7c007c7c,0x77007777,0x56005656,0x05000505, + 0x1b001b1b,0xa400a4a4,0x15001515,0x34003434, + 0x1e001e1e,0x1c001c1c,0xf800f8f8,0x52005252, + 0x20002020,0x14001414,0xe900e9e9,0xbd00bdbd, + 0xdd00dddd,0xe400e4e4,0xa100a1a1,0xe000e0e0, + 0x8a008a8a,0xf100f1f1,0xd600d6d6,0x7a007a7a, + 0xbb00bbbb,0xe300e3e3,0x40004040,0x4f004f4f, +}; + +static const u32 camellia_sp4404[256] = { + 0x70700070,0x2c2c002c,0xb3b300b3,0xc0c000c0, + 0xe4e400e4,0x57570057,0xeaea00ea,0xaeae00ae, + 0x23230023,0x6b6b006b,0x45450045,0xa5a500a5, + 0xeded00ed,0x4f4f004f,0x1d1d001d,0x92920092, + 0x86860086,0xafaf00af,0x7c7c007c,0x1f1f001f, + 0x3e3e003e,0xdcdc00dc,0x5e5e005e,0x0b0b000b, + 0xa6a600a6,0x39390039,0xd5d500d5,0x5d5d005d, + 0xd9d900d9,0x5a5a005a,0x51510051,0x6c6c006c, + 0x8b8b008b,0x9a9a009a,0xfbfb00fb,0xb0b000b0, + 0x74740074,0x2b2b002b,0xf0f000f0,0x84840084, + 0xdfdf00df,0xcbcb00cb,0x34340034,0x76760076, + 0x6d6d006d,0xa9a900a9,0xd1d100d1,0x04040004, + 0x14140014,0x3a3a003a,0xdede00de,0x11110011, + 0x32320032,0x9c9c009c,0x53530053,0xf2f200f2, + 0xfefe00fe,0xcfcf00cf,0xc3c300c3,0x7a7a007a, + 0x24240024,0xe8e800e8,0x60600060,0x69690069, + 0xaaaa00aa,0xa0a000a0,0xa1a100a1,0x62620062, + 0x54540054,0x1e1e001e,0xe0e000e0,0x64640064, + 0x10100010,0x00000000,0xa3a300a3,0x75750075, + 0x8a8a008a,0xe6e600e6,0x09090009,0xdddd00dd, + 0x87870087,0x83830083,0xcdcd00cd,0x90900090, + 0x73730073,0xf6f600f6,0x9d9d009d,0xbfbf00bf, + 0x52520052,0xd8d800d8,0xc8c800c8,0xc6c600c6, + 0x81810081,0x6f6f006f,0x13130013,0x63630063, + 0xe9e900e9,0xa7a700a7,0x9f9f009f,0xbcbc00bc, + 0x29290029,0xf9f900f9,0x2f2f002f,0xb4b400b4, + 0x78780078,0x06060006,0xe7e700e7,0x71710071, + 0xd4d400d4,0xabab00ab,0x88880088,0x8d8d008d, + 0x72720072,0xb9b900b9,0xf8f800f8,0xacac00ac, + 0x36360036,0x2a2a002a,0x3c3c003c,0xf1f100f1, + 0x40400040,0xd3d300d3,0xbbbb00bb,0x43430043, + 0x15150015,0xadad00ad,0x77770077,0x80800080, + 0x82820082,0xecec00ec,0x27270027,0xe5e500e5, + 0x85850085,0x35350035,0x0c0c000c,0x41410041, + 0xefef00ef,0x93930093,0x19190019,0x21210021, + 0x0e0e000e,0x4e4e004e,0x65650065,0xbdbd00bd, + 0xb8b800b8,0x8f8f008f,0xebeb00eb,0xcece00ce, + 0x30300030,0x5f5f005f,0xc5c500c5,0x1a1a001a, + 0xe1e100e1,0xcaca00ca,0x47470047,0x3d3d003d, + 0x01010001,0xd6d600d6,0x56560056,0x4d4d004d, + 0x0d0d000d,0x66660066,0xcccc00cc,0x2d2d002d, + 0x12120012,0x20200020,0xb1b100b1,0x99990099, + 0x4c4c004c,0xc2c200c2,0x7e7e007e,0x05050005, + 0xb7b700b7,0x31310031,0x17170017,0xd7d700d7, + 0x58580058,0x61610061,0x1b1b001b,0x1c1c001c, + 0x0f0f000f,0x16160016,0x18180018,0x22220022, + 0x44440044,0xb2b200b2,0xb5b500b5,0x91910091, + 0x08080008,0xa8a800a8,0xfcfc00fc,0x50500050, + 0xd0d000d0,0x7d7d007d,0x89890089,0x97970097, + 0x5b5b005b,0x95950095,0xffff00ff,0xd2d200d2, + 0xc4c400c4,0x48480048,0xf7f700f7,0xdbdb00db, + 0x03030003,0xdada00da,0x3f3f003f,0x94940094, + 0x5c5c005c,0x02020002,0x4a4a004a,0x33330033, + 0x67670067,0xf3f300f3,0x7f7f007f,0xe2e200e2, + 0x9b9b009b,0x26260026,0x37370037,0x3b3b003b, + 0x96960096,0x4b4b004b,0xbebe00be,0x2e2e002e, + 0x79790079,0x8c8c008c,0x6e6e006e,0x8e8e008e, + 0xf5f500f5,0xb6b600b6,0xfdfd00fd,0x59590059, + 0x98980098,0x6a6a006a,0x46460046,0xbaba00ba, + 0x25250025,0x42420042,0xa2a200a2,0xfafa00fa, + 0x07070007,0x55550055,0xeeee00ee,0x0a0a000a, + 0x49490049,0x68680068,0x38380038,0xa4a400a4, + 0x28280028,0x7b7b007b,0xc9c900c9,0xc1c100c1, + 0xe3e300e3,0xf4f400f4,0xc7c700c7,0x9e9e009e, +}; + + +/** + * Stuff related to the Camellia key schedule + */ +#define subl(x) subL[(x)] +#define subr(x) subR[(x)] + +void camellia_setup128(const unsigned char *key, u32 *subkey) +{ + u32 kll, klr, krl, krr; + u32 il, ir, t0, t1, w0, w1; + u32 kw4l, kw4r, dw, tl, tr; + u32 subL[26]; + u32 subR[26]; + + /** + * k == kll || klr || krl || krr (|| is concatination) + */ + kll = GETU32(key ); + klr = GETU32(key + 4); + krl = GETU32(key + 8); + krr = GETU32(key + 12); + /** + * generate KL dependent subkeys + */ + subl(0) = kll; subr(0) = klr; + subl(1) = krl; subr(1) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(4) = kll; subr(4) = klr; + subl(5) = krl; subr(5) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 30); + subl(10) = kll; subr(10) = klr; + subl(11) = krl; subr(11) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(13) = krl; subr(13) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); + subl(16) = kll; subr(16) = klr; + subl(17) = krl; subr(17) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); + subl(18) = kll; subr(18) = klr; + subl(19) = krl; subr(19) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); + subl(22) = kll; subr(22) = klr; + subl(23) = krl; subr(23) = krr; + + /* generate KA */ + kll = subl(0); klr = subr(0); + krl = subl(1); krr = subr(1); + CAMELLIA_F(kll, klr, + CAMELLIA_SIGMA1L, CAMELLIA_SIGMA1R, + w0, w1, il, ir, t0, t1); + krl ^= w0; krr ^= w1; + CAMELLIA_F(krl, krr, + CAMELLIA_SIGMA2L, CAMELLIA_SIGMA2R, + kll, klr, il, ir, t0, t1); + CAMELLIA_F(kll, klr, + CAMELLIA_SIGMA3L, CAMELLIA_SIGMA3R, + krl, krr, il, ir, t0, t1); + krl ^= w0; krr ^= w1; + CAMELLIA_F(krl, krr, + CAMELLIA_SIGMA4L, CAMELLIA_SIGMA4R, + w0, w1, il, ir, t0, t1); + kll ^= w0; klr ^= w1; + + /* generate KA dependent subkeys */ + subl(2) = kll; subr(2) = klr; + subl(3) = krl; subr(3) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(6) = kll; subr(6) = klr; + subl(7) = krl; subr(7) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(8) = kll; subr(8) = klr; + subl(9) = krl; subr(9) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(12) = kll; subr(12) = klr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(14) = kll; subr(14) = klr; + subl(15) = krl; subr(15) = krr; + CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 34); + subl(20) = kll; subr(20) = klr; + subl(21) = krl; subr(21) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); + subl(24) = kll; subr(24) = klr; + subl(25) = krl; subr(25) = krr; + + + /* absorb kw2 to other subkeys */ + subl(3) ^= subl(1); subr(3) ^= subr(1); + subl(5) ^= subl(1); subr(5) ^= subr(1); + subl(7) ^= subl(1); subr(7) ^= subr(1); + subl(1) ^= subr(1) & ~subr(9); + dw = subl(1) & subl(9), subr(1) ^= CAMELLIA_RL1(dw); + subl(11) ^= subl(1); subr(11) ^= subr(1); + subl(13) ^= subl(1); subr(13) ^= subr(1); + subl(15) ^= subl(1); subr(15) ^= subr(1); + subl(1) ^= subr(1) & ~subr(17); + dw = subl(1) & subl(17), subr(1) ^= CAMELLIA_RL1(dw); + subl(19) ^= subl(1); subr(19) ^= subr(1); + subl(21) ^= subl(1); subr(21) ^= subr(1); + subl(23) ^= subl(1); subr(23) ^= subr(1); + subl(24) ^= subl(1); subr(24) ^= subr(1); + + /* absorb kw4 to other subkeys */ + kw4l = subl(25); kw4r = subr(25); + subl(22) ^= kw4l; subr(22) ^= kw4r; + subl(20) ^= kw4l; subr(20) ^= kw4r; + subl(18) ^= kw4l; subr(18) ^= kw4r; + kw4l ^= kw4r & ~subr(16); + dw = kw4l & subl(16), kw4r ^= CAMELLIA_RL1(dw); + subl(14) ^= kw4l; subr(14) ^= kw4r; + subl(12) ^= kw4l; subr(12) ^= kw4r; + subl(10) ^= kw4l; subr(10) ^= kw4r; + kw4l ^= kw4r & ~subr(8); + dw = kw4l & subl(8), kw4r ^= CAMELLIA_RL1(dw); + subl(6) ^= kw4l; subr(6) ^= kw4r; + subl(4) ^= kw4l; subr(4) ^= kw4r; + subl(2) ^= kw4l; subr(2) ^= kw4r; + subl(0) ^= kw4l; subr(0) ^= kw4r; + + /* key XOR is end of F-function */ + CamelliaSubkeyL(0) = subl(0) ^ subl(2); + CamelliaSubkeyR(0) = subr(0) ^ subr(2); + CamelliaSubkeyL(2) = subl(3); + CamelliaSubkeyR(2) = subr(3); + CamelliaSubkeyL(3) = subl(2) ^ subl(4); + CamelliaSubkeyR(3) = subr(2) ^ subr(4); + CamelliaSubkeyL(4) = subl(3) ^ subl(5); + CamelliaSubkeyR(4) = subr(3) ^ subr(5); + CamelliaSubkeyL(5) = subl(4) ^ subl(6); + CamelliaSubkeyR(5) = subr(4) ^ subr(6); + CamelliaSubkeyL(6) = subl(5) ^ subl(7); + CamelliaSubkeyR(6) = subr(5) ^ subr(7); + tl = subl(10) ^ (subr(10) & ~subr(8)); + dw = tl & subl(8), tr = subr(10) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(7) = subl(6) ^ tl; + CamelliaSubkeyR(7) = subr(6) ^ tr; + CamelliaSubkeyL(8) = subl(8); + CamelliaSubkeyR(8) = subr(8); + CamelliaSubkeyL(9) = subl(9); + CamelliaSubkeyR(9) = subr(9); + tl = subl(7) ^ (subr(7) & ~subr(9)); + dw = tl & subl(9), tr = subr(7) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(10) = tl ^ subl(11); + CamelliaSubkeyR(10) = tr ^ subr(11); + CamelliaSubkeyL(11) = subl(10) ^ subl(12); + CamelliaSubkeyR(11) = subr(10) ^ subr(12); + CamelliaSubkeyL(12) = subl(11) ^ subl(13); + CamelliaSubkeyR(12) = subr(11) ^ subr(13); + CamelliaSubkeyL(13) = subl(12) ^ subl(14); + CamelliaSubkeyR(13) = subr(12) ^ subr(14); + CamelliaSubkeyL(14) = subl(13) ^ subl(15); + CamelliaSubkeyR(14) = subr(13) ^ subr(15); + tl = subl(18) ^ (subr(18) & ~subr(16)); + dw = tl & subl(16), tr = subr(18) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(15) = subl(14) ^ tl; + CamelliaSubkeyR(15) = subr(14) ^ tr; + CamelliaSubkeyL(16) = subl(16); + CamelliaSubkeyR(16) = subr(16); + CamelliaSubkeyL(17) = subl(17); + CamelliaSubkeyR(17) = subr(17); + tl = subl(15) ^ (subr(15) & ~subr(17)); + dw = tl & subl(17), tr = subr(15) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(18) = tl ^ subl(19); + CamelliaSubkeyR(18) = tr ^ subr(19); + CamelliaSubkeyL(19) = subl(18) ^ subl(20); + CamelliaSubkeyR(19) = subr(18) ^ subr(20); + CamelliaSubkeyL(20) = subl(19) ^ subl(21); + CamelliaSubkeyR(20) = subr(19) ^ subr(21); + CamelliaSubkeyL(21) = subl(20) ^ subl(22); + CamelliaSubkeyR(21) = subr(20) ^ subr(22); + CamelliaSubkeyL(22) = subl(21) ^ subl(23); + CamelliaSubkeyR(22) = subr(21) ^ subr(23); + CamelliaSubkeyL(23) = subl(22); + CamelliaSubkeyR(23) = subr(22); + CamelliaSubkeyL(24) = subl(24) ^ subl(23); + CamelliaSubkeyR(24) = subr(24) ^ subr(23); + + /* apply the inverse of the last half of P-function */ + dw = CamelliaSubkeyL(2) ^ CamelliaSubkeyR(2), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(2) = CamelliaSubkeyL(2) ^ dw, CamelliaSubkeyL(2) = dw; + dw = CamelliaSubkeyL(3) ^ CamelliaSubkeyR(3), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(3) = CamelliaSubkeyL(3) ^ dw, CamelliaSubkeyL(3) = dw; + dw = CamelliaSubkeyL(4) ^ CamelliaSubkeyR(4), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(4) = CamelliaSubkeyL(4) ^ dw, CamelliaSubkeyL(4) = dw; + dw = CamelliaSubkeyL(5) ^ CamelliaSubkeyR(5), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(5) = CamelliaSubkeyL(5) ^ dw, CamelliaSubkeyL(5) = dw; + dw = CamelliaSubkeyL(6) ^ CamelliaSubkeyR(6), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(6) = CamelliaSubkeyL(6) ^ dw, CamelliaSubkeyL(6) = dw; + dw = CamelliaSubkeyL(7) ^ CamelliaSubkeyR(7), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(7) = CamelliaSubkeyL(7) ^ dw, CamelliaSubkeyL(7) = dw; + dw = CamelliaSubkeyL(10) ^ CamelliaSubkeyR(10), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(10) = CamelliaSubkeyL(10) ^ dw, CamelliaSubkeyL(10) = dw; + dw = CamelliaSubkeyL(11) ^ CamelliaSubkeyR(11), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(11) = CamelliaSubkeyL(11) ^ dw, CamelliaSubkeyL(11) = dw; + dw = CamelliaSubkeyL(12) ^ CamelliaSubkeyR(12), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(12) = CamelliaSubkeyL(12) ^ dw, CamelliaSubkeyL(12) = dw; + dw = CamelliaSubkeyL(13) ^ CamelliaSubkeyR(13), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(13) = CamelliaSubkeyL(13) ^ dw, CamelliaSubkeyL(13) = dw; + dw = CamelliaSubkeyL(14) ^ CamelliaSubkeyR(14), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(14) = CamelliaSubkeyL(14) ^ dw, CamelliaSubkeyL(14) = dw; + dw = CamelliaSubkeyL(15) ^ CamelliaSubkeyR(15), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(15) = CamelliaSubkeyL(15) ^ dw, CamelliaSubkeyL(15) = dw; + dw = CamelliaSubkeyL(18) ^ CamelliaSubkeyR(18), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(18) = CamelliaSubkeyL(18) ^ dw, CamelliaSubkeyL(18) = dw; + dw = CamelliaSubkeyL(19) ^ CamelliaSubkeyR(19), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(19) = CamelliaSubkeyL(19) ^ dw, CamelliaSubkeyL(19) = dw; + dw = CamelliaSubkeyL(20) ^ CamelliaSubkeyR(20), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(20) = CamelliaSubkeyL(20) ^ dw, CamelliaSubkeyL(20) = dw; + dw = CamelliaSubkeyL(21) ^ CamelliaSubkeyR(21), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(21) = CamelliaSubkeyL(21) ^ dw, CamelliaSubkeyL(21) = dw; + dw = CamelliaSubkeyL(22) ^ CamelliaSubkeyR(22), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(22) = CamelliaSubkeyL(22) ^ dw, CamelliaSubkeyL(22) = dw; + dw = CamelliaSubkeyL(23) ^ CamelliaSubkeyR(23), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(23) = CamelliaSubkeyL(23) ^ dw, CamelliaSubkeyL(23) = dw; + + return; +} + +void camellia_setup256(const unsigned char *key, u32 *subkey) +{ + u32 kll,klr,krl,krr; /* left half of key */ + u32 krll,krlr,krrl,krrr; /* right half of key */ + u32 il, ir, t0, t1, w0, w1; /* temporary variables */ + u32 kw4l, kw4r, dw, tl, tr; + u32 subL[34]; + u32 subR[34]; + + /** + * key = (kll || klr || krl || krr || krll || krlr || krrl || krrr) + * (|| is concatination) + */ + + kll = GETU32(key ); + klr = GETU32(key + 4); + krl = GETU32(key + 8); + krr = GETU32(key + 12); + krll = GETU32(key + 16); + krlr = GETU32(key + 20); + krrl = GETU32(key + 24); + krrr = GETU32(key + 28); + + /* generate KL dependent subkeys */ + subl(0) = kll; subr(0) = klr; + subl(1) = krl; subr(1) = krr; + CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 45); + subl(12) = kll; subr(12) = klr; + subl(13) = krl; subr(13) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(16) = kll; subr(16) = klr; + subl(17) = krl; subr(17) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); + subl(22) = kll; subr(22) = klr; + subl(23) = krl; subr(23) = krr; + CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 34); + subl(30) = kll; subr(30) = klr; + subl(31) = krl; subr(31) = krr; + + /* generate KR dependent subkeys */ + CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 15); + subl(4) = krll; subr(4) = krlr; + subl(5) = krrl; subr(5) = krrr; + CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 15); + subl(8) = krll; subr(8) = krlr; + subl(9) = krrl; subr(9) = krrr; + CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30); + subl(18) = krll; subr(18) = krlr; + subl(19) = krrl; subr(19) = krrr; + CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 34); + subl(26) = krll; subr(26) = krlr; + subl(27) = krrl; subr(27) = krrr; + CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 34); + + /* generate KA */ + kll = subl(0) ^ krll; klr = subr(0) ^ krlr; + krl = subl(1) ^ krrl; krr = subr(1) ^ krrr; + CAMELLIA_F(kll, klr, + CAMELLIA_SIGMA1L, CAMELLIA_SIGMA1R, + w0, w1, il, ir, t0, t1); + krl ^= w0; krr ^= w1; + CAMELLIA_F(krl, krr, + CAMELLIA_SIGMA2L, CAMELLIA_SIGMA2R, + kll, klr, il, ir, t0, t1); + kll ^= krll; klr ^= krlr; + CAMELLIA_F(kll, klr, + CAMELLIA_SIGMA3L, CAMELLIA_SIGMA3R, + krl, krr, il, ir, t0, t1); + krl ^= w0 ^ krrl; krr ^= w1 ^ krrr; + CAMELLIA_F(krl, krr, + CAMELLIA_SIGMA4L, CAMELLIA_SIGMA4R, + w0, w1, il, ir, t0, t1); + kll ^= w0; klr ^= w1; + + /* generate KB */ + krll ^= kll; krlr ^= klr; + krrl ^= krl; krrr ^= krr; + CAMELLIA_F(krll, krlr, + CAMELLIA_SIGMA5L, CAMELLIA_SIGMA5R, + w0, w1, il, ir, t0, t1); + krrl ^= w0; krrr ^= w1; + CAMELLIA_F(krrl, krrr, + CAMELLIA_SIGMA6L, CAMELLIA_SIGMA6R, + w0, w1, il, ir, t0, t1); + krll ^= w0; krlr ^= w1; + + /* generate KA dependent subkeys */ + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); + subl(6) = kll; subr(6) = klr; + subl(7) = krl; subr(7) = krr; + CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 30); + subl(14) = kll; subr(14) = klr; + subl(15) = krl; subr(15) = krr; + subl(24) = klr; subr(24) = krl; + subl(25) = krr; subr(25) = kll; + CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 49); + subl(28) = kll; subr(28) = klr; + subl(29) = krl; subr(29) = krr; + + /* generate KB dependent subkeys */ + subl(2) = krll; subr(2) = krlr; + subl(3) = krrl; subr(3) = krrr; + CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30); + subl(10) = krll; subr(10) = krlr; + subl(11) = krrl; subr(11) = krrr; + CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30); + subl(20) = krll; subr(20) = krlr; + subl(21) = krrl; subr(21) = krrr; + CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 51); + subl(32) = krll; subr(32) = krlr; + subl(33) = krrl; subr(33) = krrr; + + /* absorb kw2 to other subkeys */ + subl(3) ^= subl(1); subr(3) ^= subr(1); + subl(5) ^= subl(1); subr(5) ^= subr(1); + subl(7) ^= subl(1); subr(7) ^= subr(1); + subl(1) ^= subr(1) & ~subr(9); + dw = subl(1) & subl(9), subr(1) ^= CAMELLIA_RL1(dw); + subl(11) ^= subl(1); subr(11) ^= subr(1); + subl(13) ^= subl(1); subr(13) ^= subr(1); + subl(15) ^= subl(1); subr(15) ^= subr(1); + subl(1) ^= subr(1) & ~subr(17); + dw = subl(1) & subl(17), subr(1) ^= CAMELLIA_RL1(dw); + subl(19) ^= subl(1); subr(19) ^= subr(1); + subl(21) ^= subl(1); subr(21) ^= subr(1); + subl(23) ^= subl(1); subr(23) ^= subr(1); + subl(1) ^= subr(1) & ~subr(25); + dw = subl(1) & subl(25), subr(1) ^= CAMELLIA_RL1(dw); + subl(27) ^= subl(1); subr(27) ^= subr(1); + subl(29) ^= subl(1); subr(29) ^= subr(1); + subl(31) ^= subl(1); subr(31) ^= subr(1); + subl(32) ^= subl(1); subr(32) ^= subr(1); + + /* absorb kw4 to other subkeys */ + kw4l = subl(33); kw4r = subr(33); + subl(30) ^= kw4l; subr(30) ^= kw4r; + subl(28) ^= kw4l; subr(28) ^= kw4r; + subl(26) ^= kw4l; subr(26) ^= kw4r; + kw4l ^= kw4r & ~subr(24); + dw = kw4l & subl(24), kw4r ^= CAMELLIA_RL1(dw); + subl(22) ^= kw4l; subr(22) ^= kw4r; + subl(20) ^= kw4l; subr(20) ^= kw4r; + subl(18) ^= kw4l; subr(18) ^= kw4r; + kw4l ^= kw4r & ~subr(16); + dw = kw4l & subl(16), kw4r ^= CAMELLIA_RL1(dw); + subl(14) ^= kw4l; subr(14) ^= kw4r; + subl(12) ^= kw4l; subr(12) ^= kw4r; + subl(10) ^= kw4l; subr(10) ^= kw4r; + kw4l ^= kw4r & ~subr(8); + dw = kw4l & subl(8), kw4r ^= CAMELLIA_RL1(dw); + subl(6) ^= kw4l; subr(6) ^= kw4r; + subl(4) ^= kw4l; subr(4) ^= kw4r; + subl(2) ^= kw4l; subr(2) ^= kw4r; + subl(0) ^= kw4l; subr(0) ^= kw4r; + + /* key XOR is end of F-function */ + CamelliaSubkeyL(0) = subl(0) ^ subl(2); + CamelliaSubkeyR(0) = subr(0) ^ subr(2); + CamelliaSubkeyL(2) = subl(3); + CamelliaSubkeyR(2) = subr(3); + CamelliaSubkeyL(3) = subl(2) ^ subl(4); + CamelliaSubkeyR(3) = subr(2) ^ subr(4); + CamelliaSubkeyL(4) = subl(3) ^ subl(5); + CamelliaSubkeyR(4) = subr(3) ^ subr(5); + CamelliaSubkeyL(5) = subl(4) ^ subl(6); + CamelliaSubkeyR(5) = subr(4) ^ subr(6); + CamelliaSubkeyL(6) = subl(5) ^ subl(7); + CamelliaSubkeyR(6) = subr(5) ^ subr(7); + tl = subl(10) ^ (subr(10) & ~subr(8)); + dw = tl & subl(8), tr = subr(10) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(7) = subl(6) ^ tl; + CamelliaSubkeyR(7) = subr(6) ^ tr; + CamelliaSubkeyL(8) = subl(8); + CamelliaSubkeyR(8) = subr(8); + CamelliaSubkeyL(9) = subl(9); + CamelliaSubkeyR(9) = subr(9); + tl = subl(7) ^ (subr(7) & ~subr(9)); + dw = tl & subl(9), tr = subr(7) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(10) = tl ^ subl(11); + CamelliaSubkeyR(10) = tr ^ subr(11); + CamelliaSubkeyL(11) = subl(10) ^ subl(12); + CamelliaSubkeyR(11) = subr(10) ^ subr(12); + CamelliaSubkeyL(12) = subl(11) ^ subl(13); + CamelliaSubkeyR(12) = subr(11) ^ subr(13); + CamelliaSubkeyL(13) = subl(12) ^ subl(14); + CamelliaSubkeyR(13) = subr(12) ^ subr(14); + CamelliaSubkeyL(14) = subl(13) ^ subl(15); + CamelliaSubkeyR(14) = subr(13) ^ subr(15); + tl = subl(18) ^ (subr(18) & ~subr(16)); + dw = tl & subl(16), tr = subr(18) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(15) = subl(14) ^ tl; + CamelliaSubkeyR(15) = subr(14) ^ tr; + CamelliaSubkeyL(16) = subl(16); + CamelliaSubkeyR(16) = subr(16); + CamelliaSubkeyL(17) = subl(17); + CamelliaSubkeyR(17) = subr(17); + tl = subl(15) ^ (subr(15) & ~subr(17)); + dw = tl & subl(17), tr = subr(15) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(18) = tl ^ subl(19); + CamelliaSubkeyR(18) = tr ^ subr(19); + CamelliaSubkeyL(19) = subl(18) ^ subl(20); + CamelliaSubkeyR(19) = subr(18) ^ subr(20); + CamelliaSubkeyL(20) = subl(19) ^ subl(21); + CamelliaSubkeyR(20) = subr(19) ^ subr(21); + CamelliaSubkeyL(21) = subl(20) ^ subl(22); + CamelliaSubkeyR(21) = subr(20) ^ subr(22); + CamelliaSubkeyL(22) = subl(21) ^ subl(23); + CamelliaSubkeyR(22) = subr(21) ^ subr(23); + tl = subl(26) ^ (subr(26) & ~subr(24)); + dw = tl & subl(24), tr = subr(26) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(23) = subl(22) ^ tl; + CamelliaSubkeyR(23) = subr(22) ^ tr; + CamelliaSubkeyL(24) = subl(24); + CamelliaSubkeyR(24) = subr(24); + CamelliaSubkeyL(25) = subl(25); + CamelliaSubkeyR(25) = subr(25); + tl = subl(23) ^ (subr(23) & ~subr(25)); + dw = tl & subl(25), tr = subr(23) ^ CAMELLIA_RL1(dw); + CamelliaSubkeyL(26) = tl ^ subl(27); + CamelliaSubkeyR(26) = tr ^ subr(27); + CamelliaSubkeyL(27) = subl(26) ^ subl(28); + CamelliaSubkeyR(27) = subr(26) ^ subr(28); + CamelliaSubkeyL(28) = subl(27) ^ subl(29); + CamelliaSubkeyR(28) = subr(27) ^ subr(29); + CamelliaSubkeyL(29) = subl(28) ^ subl(30); + CamelliaSubkeyR(29) = subr(28) ^ subr(30); + CamelliaSubkeyL(30) = subl(29) ^ subl(31); + CamelliaSubkeyR(30) = subr(29) ^ subr(31); + CamelliaSubkeyL(31) = subl(30); + CamelliaSubkeyR(31) = subr(30); + CamelliaSubkeyL(32) = subl(32) ^ subl(31); + CamelliaSubkeyR(32) = subr(32) ^ subr(31); + + /* apply the inverse of the last half of P-function */ + dw = CamelliaSubkeyL(2) ^ CamelliaSubkeyR(2), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(2) = CamelliaSubkeyL(2) ^ dw, CamelliaSubkeyL(2) = dw; + dw = CamelliaSubkeyL(3) ^ CamelliaSubkeyR(3), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(3) = CamelliaSubkeyL(3) ^ dw, CamelliaSubkeyL(3) = dw; + dw = CamelliaSubkeyL(4) ^ CamelliaSubkeyR(4), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(4) = CamelliaSubkeyL(4) ^ dw, CamelliaSubkeyL(4) = dw; + dw = CamelliaSubkeyL(5) ^ CamelliaSubkeyR(5), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(5) = CamelliaSubkeyL(5) ^ dw, CamelliaSubkeyL(5) = dw; + dw = CamelliaSubkeyL(6) ^ CamelliaSubkeyR(6), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(6) = CamelliaSubkeyL(6) ^ dw, CamelliaSubkeyL(6) = dw; + dw = CamelliaSubkeyL(7) ^ CamelliaSubkeyR(7), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(7) = CamelliaSubkeyL(7) ^ dw, CamelliaSubkeyL(7) = dw; + dw = CamelliaSubkeyL(10) ^ CamelliaSubkeyR(10), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(10) = CamelliaSubkeyL(10) ^ dw, CamelliaSubkeyL(10) = dw; + dw = CamelliaSubkeyL(11) ^ CamelliaSubkeyR(11), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(11) = CamelliaSubkeyL(11) ^ dw, CamelliaSubkeyL(11) = dw; + dw = CamelliaSubkeyL(12) ^ CamelliaSubkeyR(12), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(12) = CamelliaSubkeyL(12) ^ dw, CamelliaSubkeyL(12) = dw; + dw = CamelliaSubkeyL(13) ^ CamelliaSubkeyR(13), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(13) = CamelliaSubkeyL(13) ^ dw, CamelliaSubkeyL(13) = dw; + dw = CamelliaSubkeyL(14) ^ CamelliaSubkeyR(14), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(14) = CamelliaSubkeyL(14) ^ dw, CamelliaSubkeyL(14) = dw; + dw = CamelliaSubkeyL(15) ^ CamelliaSubkeyR(15), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(15) = CamelliaSubkeyL(15) ^ dw, CamelliaSubkeyL(15) = dw; + dw = CamelliaSubkeyL(18) ^ CamelliaSubkeyR(18), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(18) = CamelliaSubkeyL(18) ^ dw, CamelliaSubkeyL(18) = dw; + dw = CamelliaSubkeyL(19) ^ CamelliaSubkeyR(19), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(19) = CamelliaSubkeyL(19) ^ dw, CamelliaSubkeyL(19) = dw; + dw = CamelliaSubkeyL(20) ^ CamelliaSubkeyR(20), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(20) = CamelliaSubkeyL(20) ^ dw, CamelliaSubkeyL(20) = dw; + dw = CamelliaSubkeyL(21) ^ CamelliaSubkeyR(21), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(21) = CamelliaSubkeyL(21) ^ dw, CamelliaSubkeyL(21) = dw; + dw = CamelliaSubkeyL(22) ^ CamelliaSubkeyR(22), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(22) = CamelliaSubkeyL(22) ^ dw, CamelliaSubkeyL(22) = dw; + dw = CamelliaSubkeyL(23) ^ CamelliaSubkeyR(23), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(23) = CamelliaSubkeyL(23) ^ dw, CamelliaSubkeyL(23) = dw; + dw = CamelliaSubkeyL(26) ^ CamelliaSubkeyR(26), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(26) = CamelliaSubkeyL(26) ^ dw, CamelliaSubkeyL(26) = dw; + dw = CamelliaSubkeyL(27) ^ CamelliaSubkeyR(27), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(27) = CamelliaSubkeyL(27) ^ dw, CamelliaSubkeyL(27) = dw; + dw = CamelliaSubkeyL(28) ^ CamelliaSubkeyR(28), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(28) = CamelliaSubkeyL(28) ^ dw, CamelliaSubkeyL(28) = dw; + dw = CamelliaSubkeyL(29) ^ CamelliaSubkeyR(29), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(29) = CamelliaSubkeyL(29) ^ dw, CamelliaSubkeyL(29) = dw; + dw = CamelliaSubkeyL(30) ^ CamelliaSubkeyR(30), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(30) = CamelliaSubkeyL(30) ^ dw, CamelliaSubkeyL(30) = dw; + dw = CamelliaSubkeyL(31) ^ CamelliaSubkeyR(31), dw = CAMELLIA_RL8(dw); + CamelliaSubkeyR(31) = CamelliaSubkeyL(31) ^ dw,CamelliaSubkeyL(31) = dw; + + return; +} + +void camellia_setup192(const unsigned char *key, u32 *subkey) +{ + unsigned char kk[32]; + u32 krll, krlr, krrl,krrr; + + memcpy(kk, key, 24); + memcpy((unsigned char *)&krll, key+16,4); + memcpy((unsigned char *)&krlr, key+20,4); + krrl = ~krll; + krrr = ~krlr; + memcpy(kk+24, (unsigned char *)&krrl, 4); + memcpy(kk+28, (unsigned char *)&krrr, 4); + camellia_setup256(kk, subkey); + return; +} + + +/** + * Stuff related to camellia encryption/decryption + * + * "io" must be 4byte aligned and big-endian data. + */ +void camellia_encrypt128(const u32 *subkey, u32 *io) +{ + u32 il, ir, t0, t1; + + /* pre whitening but absorb kw2*/ + io[0] ^= CamelliaSubkeyL(0); + io[1] ^= CamelliaSubkeyR(0); + /* main iteration */ + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(2),CamelliaSubkeyR(2), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(3),CamelliaSubkeyR(3), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(4),CamelliaSubkeyR(4), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(5),CamelliaSubkeyR(5), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(6),CamelliaSubkeyR(6), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(7),CamelliaSubkeyR(7), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(8),CamelliaSubkeyR(8), + CamelliaSubkeyL(9),CamelliaSubkeyR(9), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(10),CamelliaSubkeyR(10), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(11),CamelliaSubkeyR(11), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(12),CamelliaSubkeyR(12), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(13),CamelliaSubkeyR(13), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(14),CamelliaSubkeyR(14), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(15),CamelliaSubkeyR(15), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(16),CamelliaSubkeyR(16), + CamelliaSubkeyL(17),CamelliaSubkeyR(17), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(18),CamelliaSubkeyR(18), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(19),CamelliaSubkeyR(19), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(20),CamelliaSubkeyR(20), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(21),CamelliaSubkeyR(21), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(22),CamelliaSubkeyR(22), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(23),CamelliaSubkeyR(23), + io[0],io[1],il,ir,t0,t1); + + /* post whitening but kw4 */ + io[2] ^= CamelliaSubkeyL(24); + io[3] ^= CamelliaSubkeyR(24); + + t0 = io[0]; + t1 = io[1]; + io[0] = io[2]; + io[1] = io[3]; + io[2] = t0; + io[3] = t1; + + return; +} + +void camellia_decrypt128(const u32 *subkey, u32 *io) +{ + u32 il,ir,t0,t1; /* temporary valiables */ + + /* pre whitening but absorb kw2*/ + io[0] ^= CamelliaSubkeyL(24); + io[1] ^= CamelliaSubkeyR(24); + + /* main iteration */ + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(23),CamelliaSubkeyR(23), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(22),CamelliaSubkeyR(22), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(21),CamelliaSubkeyR(21), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(20),CamelliaSubkeyR(20), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(19),CamelliaSubkeyR(19), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(18),CamelliaSubkeyR(18), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(17),CamelliaSubkeyR(17), + CamelliaSubkeyL(16),CamelliaSubkeyR(16), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(15),CamelliaSubkeyR(15), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(14),CamelliaSubkeyR(14), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(13),CamelliaSubkeyR(13), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(12),CamelliaSubkeyR(12), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(11),CamelliaSubkeyR(11), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(10),CamelliaSubkeyR(10), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(9),CamelliaSubkeyR(9), + CamelliaSubkeyL(8),CamelliaSubkeyR(8), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(7),CamelliaSubkeyR(7), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(6),CamelliaSubkeyR(6), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(5),CamelliaSubkeyR(5), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(4),CamelliaSubkeyR(4), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(3),CamelliaSubkeyR(3), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(2),CamelliaSubkeyR(2), + io[0],io[1],il,ir,t0,t1); + + /* post whitening but kw4 */ + io[2] ^= CamelliaSubkeyL(0); + io[3] ^= CamelliaSubkeyR(0); + + t0 = io[0]; + t1 = io[1]; + io[0] = io[2]; + io[1] = io[3]; + io[2] = t0; + io[3] = t1; + + return; +} + +/** + * stuff for 192 and 256bit encryption/decryption + */ +void camellia_encrypt256(const u32 *subkey, u32 *io) +{ + u32 il,ir,t0,t1; /* temporary valiables */ + + /* pre whitening but absorb kw2*/ + io[0] ^= CamelliaSubkeyL(0); + io[1] ^= CamelliaSubkeyR(0); + + /* main iteration */ + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(2),CamelliaSubkeyR(2), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(3),CamelliaSubkeyR(3), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(4),CamelliaSubkeyR(4), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(5),CamelliaSubkeyR(5), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(6),CamelliaSubkeyR(6), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(7),CamelliaSubkeyR(7), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(8),CamelliaSubkeyR(8), + CamelliaSubkeyL(9),CamelliaSubkeyR(9), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(10),CamelliaSubkeyR(10), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(11),CamelliaSubkeyR(11), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(12),CamelliaSubkeyR(12), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(13),CamelliaSubkeyR(13), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(14),CamelliaSubkeyR(14), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(15),CamelliaSubkeyR(15), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(16),CamelliaSubkeyR(16), + CamelliaSubkeyL(17),CamelliaSubkeyR(17), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(18),CamelliaSubkeyR(18), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(19),CamelliaSubkeyR(19), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(20),CamelliaSubkeyR(20), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(21),CamelliaSubkeyR(21), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(22),CamelliaSubkeyR(22), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(23),CamelliaSubkeyR(23), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(24),CamelliaSubkeyR(24), + CamelliaSubkeyL(25),CamelliaSubkeyR(25), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(26),CamelliaSubkeyR(26), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(27),CamelliaSubkeyR(27), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(28),CamelliaSubkeyR(28), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(29),CamelliaSubkeyR(29), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(30),CamelliaSubkeyR(30), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(31),CamelliaSubkeyR(31), + io[0],io[1],il,ir,t0,t1); + + /* post whitening but kw4 */ + io[2] ^= CamelliaSubkeyL(32); + io[3] ^= CamelliaSubkeyR(32); + + t0 = io[0]; + t1 = io[1]; + io[0] = io[2]; + io[1] = io[3]; + io[2] = t0; + io[3] = t1; + + return; +} + +void camellia_decrypt256(const u32 *subkey, u32 *io) +{ + u32 il,ir,t0,t1; /* temporary valiables */ + + /* pre whitening but absorb kw2*/ + io[0] ^= CamelliaSubkeyL(32); + io[1] ^= CamelliaSubkeyR(32); + + /* main iteration */ + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(31),CamelliaSubkeyR(31), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(30),CamelliaSubkeyR(30), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(29),CamelliaSubkeyR(29), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(28),CamelliaSubkeyR(28), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(27),CamelliaSubkeyR(27), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(26),CamelliaSubkeyR(26), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(25),CamelliaSubkeyR(25), + CamelliaSubkeyL(24),CamelliaSubkeyR(24), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(23),CamelliaSubkeyR(23), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(22),CamelliaSubkeyR(22), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(21),CamelliaSubkeyR(21), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(20),CamelliaSubkeyR(20), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(19),CamelliaSubkeyR(19), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(18),CamelliaSubkeyR(18), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(17),CamelliaSubkeyR(17), + CamelliaSubkeyL(16),CamelliaSubkeyR(16), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(15),CamelliaSubkeyR(15), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(14),CamelliaSubkeyR(14), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(13),CamelliaSubkeyR(13), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(12),CamelliaSubkeyR(12), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(11),CamelliaSubkeyR(11), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(10),CamelliaSubkeyR(10), + io[0],io[1],il,ir,t0,t1); + + CAMELLIA_FLS(io[0],io[1],io[2],io[3], + CamelliaSubkeyL(9),CamelliaSubkeyR(9), + CamelliaSubkeyL(8),CamelliaSubkeyR(8), + t0,t1,il,ir); + + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(7),CamelliaSubkeyR(7), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(6),CamelliaSubkeyR(6), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(5),CamelliaSubkeyR(5), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(4),CamelliaSubkeyR(4), + io[0],io[1],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[0],io[1], + CamelliaSubkeyL(3),CamelliaSubkeyR(3), + io[2],io[3],il,ir,t0,t1); + CAMELLIA_ROUNDSM(io[2],io[3], + CamelliaSubkeyL(2),CamelliaSubkeyR(2), + io[0],io[1],il,ir,t0,t1); + + /* post whitening but kw4 */ + io[2] ^= CamelliaSubkeyL(0); + io[3] ^= CamelliaSubkeyR(0); + + t0 = io[0]; + t1 = io[1]; + io[0] = io[2]; + io[1] = io[3]; + io[2] = t0; + io[3] = t1; + + return; +} + +/*** + * + * API for compatibility + */ + +void Camellia_Ekeygen(const int keyBitLength, + const unsigned char *rawKey, + KEY_TABLE_TYPE keyTable) +{ + switch(keyBitLength) { + case 128: + camellia_setup128(rawKey, keyTable); + break; + case 192: + camellia_setup192(rawKey, keyTable); + break; + case 256: + camellia_setup256(rawKey, keyTable); + break; + default: + break; + } +} + + +void Camellia_EncryptBlock(const int keyBitLength, + const unsigned char *plaintext, + const KEY_TABLE_TYPE keyTable, + unsigned char *ciphertext) +{ + u32 tmp[4]; + + tmp[0] = GETU32(plaintext); + tmp[1] = GETU32(plaintext + 4); + tmp[2] = GETU32(plaintext + 8); + tmp[3] = GETU32(plaintext + 12); + + switch (keyBitLength) { + case 128: + camellia_encrypt128(keyTable, tmp); + break; + case 192: + /* fall through */ + case 256: + camellia_encrypt256(keyTable, tmp); + break; + default: + break; + } + + PUTU32(ciphertext, tmp[0]); + PUTU32(ciphertext + 4, tmp[1]); + PUTU32(ciphertext + 8, tmp[2]); + PUTU32(ciphertext + 12, tmp[3]); +} + +void Camellia_DecryptBlock(const int keyBitLength, + const unsigned char *ciphertext, + const KEY_TABLE_TYPE keyTable, + unsigned char *plaintext) +{ + u32 tmp[4]; + + tmp[0] = GETU32(ciphertext); + tmp[1] = GETU32(ciphertext + 4); + tmp[2] = GETU32(ciphertext + 8); + tmp[3] = GETU32(ciphertext + 12); + + switch (keyBitLength) { + case 128: + camellia_decrypt128(keyTable, tmp); + break; + case 192: + /* fall through */ + case 256: + camellia_decrypt256(keyTable, tmp); + break; + default: + break; + } + PUTU32(plaintext, tmp[0]); + PUTU32(plaintext + 4, tmp[1]); + PUTU32(plaintext + 8, tmp[2]); + PUTU32(plaintext + 12, tmp[3]); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/camellia.h b/grub-core/lib/libgcrypt-grub/cipher/camellia.h new file mode 100644 index 000000000..2ab2ddd83 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/camellia.h @@ -0,0 +1,94 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +#include +void camellia_setup128(const unsigned char *key, grub_uint32_t *subkey); +void camellia_setup192(const unsigned char *key, grub_uint32_t *subkey); +void camellia_setup256(const unsigned char *key, grub_uint32_t *subkey); +void camellia_encrypt128(const grub_uint32_t *subkey, grub_uint32_t *io); +void camellia_encrypt192(const grub_uint32_t *subkey, grub_uint32_t *io); +void camellia_encrypt256(const grub_uint32_t *subkey, grub_uint32_t *io); +void camellia_decrypt128(const grub_uint32_t *subkey, grub_uint32_t *io); +void camellia_decrypt192(const grub_uint32_t *subkey, grub_uint32_t *io); +void camellia_decrypt256(const grub_uint32_t *subkey, grub_uint32_t *io); +#define memcpy grub_memcpy +/* camellia.h ver 1.2.0 + * + * Copyright (C) 2006,2007 + * NTT (Nippon Telegraph and Telephone Corporation). + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef HEADER_CAMELLIA_H +#define HEADER_CAMELLIA_H + +/* To use Camellia with libraries it is often useful to keep the name + * space of the library clean. The following macro is thus useful: + * + * #define CAMELLIA_EXT_SYM_PREFIX foo_ + * + * This prefixes all external symbols with "foo_". + */ +#ifdef HAVE_CONFIG_H +#endif +#ifdef CAMELLIA_EXT_SYM_PREFIX +#define CAMELLIA_PREFIX1(x,y) x ## y +#define CAMELLIA_PREFIX2(x,y) CAMELLIA_PREFIX1(x,y) +#define CAMELLIA_PREFIX(x) CAMELLIA_PREFIX2(CAMELLIA_EXT_SYM_PREFIX,x) +#define Camellia_Ekeygen CAMELLIA_PREFIX(Camellia_Ekeygen) +#define Camellia_EncryptBlock CAMELLIA_PREFIX(Camellia_EncryptBlock) +#define Camellia_DecryptBlock CAMELLIA_PREFIX(Camellia_DecryptBlock) +#define camellia_decrypt128 CAMELLIA_PREFIX(camellia_decrypt128) +#define camellia_decrypt256 CAMELLIA_PREFIX(camellia_decrypt256) +#define camellia_encrypt128 CAMELLIA_PREFIX(camellia_encrypt128) +#define camellia_encrypt256 CAMELLIA_PREFIX(camellia_encrypt256) +#define camellia_setup128 CAMELLIA_PREFIX(camellia_setup128) +#define camellia_setup192 CAMELLIA_PREFIX(camellia_setup192) +#define camellia_setup256 CAMELLIA_PREFIX(camellia_setup256) +#endif /*CAMELLIA_EXT_SYM_PREFIX*/ + + +#ifdef __cplusplus +extern "C" { +#endif + +#define CAMELLIA_BLOCK_SIZE 16 +#define CAMELLIA_TABLE_BYTE_LEN 272 +#define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) + +typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; + + +void Camellia_Ekeygen(const int keyBitLength, + const unsigned char *rawKey, + KEY_TABLE_TYPE keyTable); + +void Camellia_EncryptBlock(const int keyBitLength, + const unsigned char *plaintext, + const KEY_TABLE_TYPE keyTable, + unsigned char *cipherText); + +void Camellia_DecryptBlock(const int keyBitLength, + const unsigned char *cipherText, + const KEY_TABLE_TYPE keyTable, + unsigned char *plaintext); + + +#ifdef __cplusplus +} +#endif + +#endif /* HEADER_CAMELLIA_H */ diff --git a/grub-core/lib/libgcrypt-grub/cipher/cast5.c b/grub-core/lib/libgcrypt-grub/cipher/cast5.c new file mode 100644 index 000000000..8598fa3c0 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/cast5.c @@ -0,0 +1,590 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* cast5.c - CAST5 cipher (RFC2144) + * Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* Test vectors: + * + * 128-bit key = 01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A + * plaintext = 01 23 45 67 89 AB CD EF + * ciphertext = 23 8B 4F E5 84 7E 44 B2 + * + * 80-bit key = 01 23 45 67 12 34 56 78 23 45 + * = 01 23 45 67 12 34 56 78 23 45 00 00 00 00 00 00 + * plaintext = 01 23 45 67 89 AB CD EF + * ciphertext = EB 6A 71 1A 2C 02 27 1B + * + * 40-bit key = 01 23 45 67 12 + * = 01 23 45 67 12 00 00 00 00 00 00 00 00 00 00 00 + * plaintext = 01 23 45 67 89 AB CD EF + * ciphertext = 7A C8 16 D1 6E 9B 30 2E + */ + +#include "g10lib.h" +#include "types.h" +#include "cipher.h" + +#define CAST5_BLOCKSIZE 8 + +typedef struct { + u32 Km[16]; + byte Kr[16]; +} CAST5_context; + +static gcry_err_code_t cast_setkey (void *c, const byte *key, unsigned keylen); +static void encrypt_block (void *c, byte *outbuf, const byte *inbuf); +static void decrypt_block (void *c, byte *outbuf, const byte *inbuf); + + + + +static const u32 s1[256] = { +0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, +0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, +0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, +0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, +0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, +0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, +0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, +0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, +0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, +0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, +0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, +0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, +0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, +0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, +0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, +0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, +0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, +0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, +0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, +0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, +0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, +0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, +0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, +0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, +0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, +0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, +0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, +0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, +0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, +0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, +0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, +0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf +}; +static const u32 s2[256] = { +0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, +0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, +0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, +0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, +0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, +0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, +0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, +0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, +0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, +0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, +0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, +0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, +0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, +0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, +0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, +0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, +0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, +0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, +0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, +0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, +0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, +0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, +0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, +0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, +0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, +0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, +0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, +0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, +0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, +0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, +0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, +0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1 +}; +static const u32 s3[256] = { +0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, +0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, +0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, +0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, +0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, +0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, +0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, +0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, +0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, +0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, +0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, +0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, +0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, +0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, +0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, +0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, +0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, +0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, +0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, +0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, +0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, +0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, +0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, +0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, +0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, +0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, +0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, +0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, +0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, +0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, +0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, +0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783 +}; +static const u32 s4[256] = { +0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, +0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, +0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, +0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, +0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, +0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, +0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, +0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, +0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, +0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, +0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, +0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, +0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, +0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, +0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, +0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, +0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, +0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, +0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, +0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, +0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, +0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, +0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, +0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, +0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, +0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, +0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, +0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, +0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, +0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, +0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, +0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 +}; +static const u32 s5[256] = { +0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, +0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, +0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, +0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, +0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, +0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, +0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, +0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, +0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, +0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, +0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, +0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, +0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, +0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, +0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, +0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, +0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, +0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, +0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, +0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, +0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, +0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, +0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, +0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, +0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, +0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, +0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, +0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, +0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, +0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, +0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, +0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4 +}; +static const u32 s6[256] = { +0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, +0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, +0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, +0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, +0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, +0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, +0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, +0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, +0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, +0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, +0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, +0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, +0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, +0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, +0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, +0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, +0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, +0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, +0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, +0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, +0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, +0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, +0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, +0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, +0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, +0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, +0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, +0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, +0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, +0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, +0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, +0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f +}; +static const u32 s7[256] = { +0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, +0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, +0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, +0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, +0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, +0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, +0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, +0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, +0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, +0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, +0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, +0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, +0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, +0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, +0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, +0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, +0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, +0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, +0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, +0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, +0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, +0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, +0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, +0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, +0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, +0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, +0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, +0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, +0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, +0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, +0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, +0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3 +}; +static const u32 s8[256] = { +0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, +0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, +0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, +0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, +0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, +0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, +0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, +0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, +0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, +0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, +0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, +0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, +0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, +0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, +0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, +0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, +0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, +0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, +0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, +0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, +0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, +0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, +0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, +0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, +0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, +0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, +0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, +0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, +0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, +0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, +0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, +0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e +}; + + +#if defined(__GNUC__) && defined(__i386__) +static inline u32 +rol(int n, u32 x) +{ + __asm__("roll %%cl,%0" + :"=r" (x) + :"0" (x),"c" (n)); + return x; +} +#else +#define rol(n,x) ( ((x) << (n)) | ((x) >> (32-(n))) ) +#endif + +#define F1(D,m,r) ( (I = ((m) + (D))), (I=rol((r),I)), \ + (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff]) ) +#define F2(D,m,r) ( (I = ((m) ^ (D))), (I=rol((r),I)), \ + (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff]) ) +#define F3(D,m,r) ( (I = ((m) - (D))), (I=rol((r),I)), \ + (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff]) ) + +static void +do_encrypt_block( CAST5_context *c, byte *outbuf, const byte *inbuf ) +{ + u32 l, r, t; + u32 I; /* used by the Fx macros */ + u32 *Km; + byte *Kr; + + Km = c->Km; + Kr = c->Kr; + + /* (L0,R0) <-- (m1...m64). (Split the plaintext into left and + * right 32-bit halves L0 = m1...m32 and R0 = m33...m64.) + */ + l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; + r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; + + /* (16 rounds) for i from 1 to 16, compute Li and Ri as follows: + * Li = Ri-1; + * Ri = Li-1 ^ f(Ri-1,Kmi,Kri), where f is defined in Section 2.2 + * Rounds 1, 4, 7, 10, 13, and 16 use f function Type 1. + * Rounds 2, 5, 8, 11, and 14 use f function Type 2. + * Rounds 3, 6, 9, 12, and 15 use f function Type 3. + */ + + t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]); + t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]); + t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]); + t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]); + t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]); + t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]); + t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]); + t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]); + t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]); + t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]); + t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]); + t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]); + t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]); + t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]); + t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]); + t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]); + + /* c1...c64 <-- (R16,L16). (Exchange final blocks L16, R16 and + * concatenate to form the ciphertext.) */ + outbuf[0] = (r >> 24) & 0xff; + outbuf[1] = (r >> 16) & 0xff; + outbuf[2] = (r >> 8) & 0xff; + outbuf[3] = r & 0xff; + outbuf[4] = (l >> 24) & 0xff; + outbuf[5] = (l >> 16) & 0xff; + outbuf[6] = (l >> 8) & 0xff; + outbuf[7] = l & 0xff; +} + +static void +encrypt_block (void *context , byte *outbuf, const byte *inbuf) +{ + CAST5_context *c = (CAST5_context *) context; + do_encrypt_block (c, outbuf, inbuf); + _gcry_burn_stack (20+4*sizeof(void*)); +} + + +static void +do_decrypt_block (CAST5_context *c, byte *outbuf, const byte *inbuf ) +{ + u32 l, r, t; + u32 I; + u32 *Km; + byte *Kr; + + Km = c->Km; + Kr = c->Kr; + + l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; + r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; + + t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]); + t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]); + t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]); + t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]); + t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]); + t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]); + t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]); + t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]); + t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]); + t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]); + t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]); + t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]); + t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]); + t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]); + t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]); + t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]); + + outbuf[0] = (r >> 24) & 0xff; + outbuf[1] = (r >> 16) & 0xff; + outbuf[2] = (r >> 8) & 0xff; + outbuf[3] = r & 0xff; + outbuf[4] = (l >> 24) & 0xff; + outbuf[5] = (l >> 16) & 0xff; + outbuf[6] = (l >> 8) & 0xff; + outbuf[7] = l & 0xff; +} + +static void +decrypt_block (void *context, byte *outbuf, const byte *inbuf) +{ + CAST5_context *c = (CAST5_context *) context; + do_decrypt_block (c, outbuf, inbuf); + _gcry_burn_stack (20+4*sizeof(void*)); +} + + + + +static void +key_schedule( u32 *x, u32 *z, u32 *k ) +{ + +#define xi(i) ((x[(i)/4] >> (8*(3-((i)%4)))) & 0xff) +#define zi(i) ((z[(i)/4] >> (8*(3-((i)%4)))) & 0xff) + + z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)]; + z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)]; + z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)]; + z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)]; + k[0] = s5[zi( 8)]^s6[zi( 9)]^s7[zi( 7)]^s8[zi( 6)]^s5[zi( 2)]; + k[1] = s5[zi(10)]^s6[zi(11)]^s7[zi( 5)]^s8[zi( 4)]^s6[zi( 6)]; + k[2] = s5[zi(12)]^s6[zi(13)]^s7[zi( 3)]^s8[zi( 2)]^s7[zi( 9)]; + k[3] = s5[zi(14)]^s6[zi(15)]^s7[zi( 1)]^s8[zi( 0)]^s8[zi(12)]; + + x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)]; + x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)]; + x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)]; + x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)]; + k[4] = s5[xi( 3)]^s6[xi( 2)]^s7[xi(12)]^s8[xi(13)]^s5[xi( 8)]; + k[5] = s5[xi( 1)]^s6[xi( 0)]^s7[xi(14)]^s8[xi(15)]^s6[xi(13)]; + k[6] = s5[xi( 7)]^s6[xi( 6)]^s7[xi( 8)]^s8[xi( 9)]^s7[xi( 3)]; + k[7] = s5[xi( 5)]^s6[xi( 4)]^s7[xi(10)]^s8[xi(11)]^s8[xi( 7)]; + + z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)]; + z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)]; + z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)]; + z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)]; + k[8] = s5[zi( 3)]^s6[zi( 2)]^s7[zi(12)]^s8[zi(13)]^s5[zi( 9)]; + k[9] = s5[zi( 1)]^s6[zi( 0)]^s7[zi(14)]^s8[zi(15)]^s6[zi(12)]; + k[10]= s5[zi( 7)]^s6[zi( 6)]^s7[zi( 8)]^s8[zi( 9)]^s7[zi( 2)]; + k[11]= s5[zi( 5)]^s6[zi( 4)]^s7[zi(10)]^s8[zi(11)]^s8[zi( 6)]; + + x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)]; + x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)]; + x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)]; + x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)]; + k[12]= s5[xi( 8)]^s6[xi( 9)]^s7[xi( 7)]^s8[xi( 6)]^s5[xi( 3)]; + k[13]= s5[xi(10)]^s6[xi(11)]^s7[xi( 5)]^s8[xi( 4)]^s6[xi( 7)]; + k[14]= s5[xi(12)]^s6[xi(13)]^s7[xi( 3)]^s8[xi( 2)]^s7[xi( 8)]; + k[15]= s5[xi(14)]^s6[xi(15)]^s7[xi( 1)]^s8[xi( 0)]^s8[xi(13)]; + +#undef xi +#undef zi +} + + +static gcry_err_code_t +do_cast_setkey( CAST5_context *c, const byte *key, unsigned keylen ) +{ + static int initialized; + static const char* selftest_failed; + int i; + u32 x[4]; + u32 z[4]; + u32 k[16]; + + if( !initialized ) + { + initialized = 1; + selftest_failed = selftest(); + if( selftest_failed ) + log_error ("CAST5 selftest failed (%s).\n", selftest_failed ); + } + if( selftest_failed ) + return GPG_ERR_SELFTEST_FAILED; + + if( keylen != 16 ) + return GPG_ERR_INV_KEYLEN; + + x[0] = key[0] << 24 | key[1] << 16 | key[2] << 8 | key[3]; + x[1] = key[4] << 24 | key[5] << 16 | key[6] << 8 | key[7]; + x[2] = key[8] << 24 | key[9] << 16 | key[10] << 8 | key[11]; + x[3] = key[12] << 24 | key[13] << 16 | key[14] << 8 | key[15]; + + key_schedule( x, z, k ); + for(i=0; i < 16; i++ ) + c->Km[i] = k[i]; + key_schedule( x, z, k ); + for(i=0; i < 16; i++ ) + c->Kr[i] = k[i] & 0x1f; + + memset(&x,0, sizeof x); + memset(&z,0, sizeof z); + memset(&k,0, sizeof k); + +#undef xi +#undef zi + return GPG_ERR_NO_ERROR; +} + +static gcry_err_code_t +cast_setkey (void *context, const byte *key, unsigned keylen ) +{ + CAST5_context *c = (CAST5_context *) context; + gcry_err_code_t rc = do_cast_setkey (c, key, keylen); + _gcry_burn_stack (96+7*sizeof(void*)); + return rc; +} + + +gcry_cipher_spec_t _gcry_cipher_spec_cast5 = + { + "CAST5", NULL, NULL, CAST5_BLOCKSIZE, 128, sizeof (CAST5_context), + cast_setkey, encrypt_block, decrypt_block + , +#ifdef GRUB_UTIL + .modname = "gcry_cast5", +#endif + }; + + +GRUB_MOD_INIT(gcry_cast5) +{ + grub_cipher_register (&_gcry_cipher_spec_cast5); +} + +GRUB_MOD_FINI(gcry_cast5) +{ + grub_cipher_unregister (&_gcry_cipher_spec_cast5); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/cipher.h b/grub-core/lib/libgcrypt-grub/cipher/cipher.h new file mode 100644 index 000000000..73c67798d --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/cipher.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/grub-core/lib/libgcrypt-grub/cipher/crypto.lst b/grub-core/lib/libgcrypt-grub/cipher/crypto.lst new file mode 100644 index 000000000..77d9efc01 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/crypto.lst @@ -0,0 +1,45 @@ +RIJNDAEL: gcry_rijndael +RIJNDAEL192: gcry_rijndael +RIJNDAEL256: gcry_rijndael +AES128: gcry_rijndael +AES-128: gcry_rijndael +AES-192: gcry_rijndael +AES-256: gcry_rijndael +ADLER32: adler32 +CRC64: crc64 +ARCFOUR: gcry_arcfour +BLOWFISH: gcry_blowfish +CAMELLIA128: gcry_camellia +CAMELLIA192: gcry_camellia +CAMELLIA256: gcry_camellia +CAST5: gcry_cast5 +CRC32: gcry_crc +CRC32RFC1510: gcry_crc +CRC24RFC2440: gcry_crc +DES: gcry_des +3DES: gcry_des +DSA: gcry_dsa +IDEA: gcry_idea +MD4: gcry_md4 +MD5: gcry_md5 +RFC2268_40: gcry_rfc2268 +AES: gcry_rijndael +AES192: gcry_rijndael +AES256: gcry_rijndael +RIPEMD160: gcry_rmd160 +RSA: gcry_rsa +SEED: gcry_seed +SERPENT128: gcry_serpent +SERPENT192: gcry_serpent +SERPENT256: gcry_serpent +SHA1: gcry_sha1 +SHA224: gcry_sha256 +SHA256: gcry_sha256 +SHA512: gcry_sha512 +SHA384: gcry_sha512 +TIGER192: gcry_tiger +TIGER: gcry_tiger +TIGER2: gcry_tiger +TWOFISH: gcry_twofish +TWOFISH128: gcry_twofish +WHIRLPOOL: gcry_whirlpool diff --git a/grub-core/lib/libgcrypt-grub/cipher/des.c b/grub-core/lib/libgcrypt-grub/cipher/des.c new file mode 100644 index 000000000..09521e8e8 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/des.c @@ -0,0 +1,929 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* des.c - DES and Triple-DES encryption/decryption Algorithm + * Copyright (C) 1998, 1999, 2001, 2002, 2003, + * 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * For a description of triple encryption, see: + * Bruce Schneier: Applied Cryptography. Second Edition. + * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff. + * This implementation is according to the definition of DES in FIPS + * PUB 46-2 from December 1993. + */ + + +/* + * Written by Michael Roth , September 1998 + */ + + +/* + * U S A G E + * =========== + * + * For DES or Triple-DES encryption/decryption you must initialize a proper + * encryption context with a key. + * + * A DES key is 64bit wide but only 56bits of the key are used. The remaining + * bits are parity bits and they will _not_ checked in this implementation, but + * simply ignored. + * + * For Triple-DES you could use either two 64bit keys or three 64bit keys. + * The parity bits will _not_ checked, too. + * + * After initializing a context with a key you could use this context to + * encrypt or decrypt data in 64bit blocks in Electronic Codebook Mode. + * + * (In the examples below the slashes at the beginning and ending of comments + * are omited.) + * + * DES Example + * ----------- + * unsigned char key[8]; + * unsigned char plaintext[8]; + * unsigned char ciphertext[8]; + * unsigned char recoverd[8]; + * des_ctx context; + * + * * Fill 'key' and 'plaintext' with some data * + * .... + * + * * Set up the DES encryption context * + * des_setkey(context, key); + * + * * Encrypt the plaintext * + * des_ecb_encrypt(context, plaintext, ciphertext); + * + * * To recover the orginal plaintext from ciphertext use: * + * des_ecb_decrypt(context, ciphertext, recoverd); + * + * + * Triple-DES Example + * ------------------ + * unsigned char key1[8]; + * unsigned char key2[8]; + * unsigned char key3[8]; + * unsigned char plaintext[8]; + * unsigned char ciphertext[8]; + * unsigned char recoverd[8]; + * tripledes_ctx context; + * + * * If you would like to use two 64bit keys, fill 'key1' and'key2' + * then setup the encryption context: * + * tripledes_set2keys(context, key1, key2); + * + * * To use three 64bit keys with Triple-DES use: * + * tripledes_set3keys(context, key1, key2, key3); + * + * * Encrypting plaintext with Triple-DES * + * tripledes_ecb_encrypt(context, plaintext, ciphertext); + * + * * Decrypting ciphertext to recover the plaintext with Triple-DES * + * tripledes_ecb_decrypt(context, ciphertext, recoverd); + * + * + * Selftest + * -------- + * char *error_msg; + * + * * To perform a selftest of this DES/Triple-DES implementation use the + * function selftest(). It will return an error string if there are + * some problems with this library. * + * + * if ( (error_msg = selftest()) ) + * { + * fprintf(stderr, "An error in the DES/Triple-DES implementation occurred: %s\n", error_msg); + * abort(); + * } + */ + + +#include "types.h" /* for byte and u32 typedefs */ +#include "g10lib.h" +#include "cipher.h" + +#if defined(__GNUC__) && defined(__GNU_LIBRARY__) +#define working_memcmp memcmp +#else +/* + * According to the SunOS man page, memcmp returns indeterminate sign + * depending on whether characters are signed or not. + */ +static int +working_memcmp( const char *a, const char *b, size_t n ) +{ + for( ; n; n--, a++, b++ ) + if( *a != *b ) + return (int)(*(byte*)a) - (int)(*(byte*)b); + return 0; +} +#endif + +/* + * Encryption/Decryption context of DES + */ +typedef struct _des_ctx + { + u32 encrypt_subkeys[32]; + u32 decrypt_subkeys[32]; + } +des_ctx[1]; + +/* + * Encryption/Decryption context of Triple-DES + */ +typedef struct _tripledes_ctx + { + u32 encrypt_subkeys[96]; + u32 decrypt_subkeys[96]; + struct { + int no_weak_key; + } flags; + } +tripledes_ctx[1]; + +static void des_key_schedule (const byte *, u32 *); +static int des_setkey (struct _des_ctx *, const byte *); +static int des_ecb_crypt (struct _des_ctx *, const byte *, byte *, int); +static int tripledes_ecb_crypt (struct _tripledes_ctx *, + const byte *, byte *, int); +static int is_weak_key ( const byte *key ); + +static int initialized; + + + + +/* + * The s-box values are permuted according to the 'primitive function P' + * and are rotated one bit to the left. + */ +static u32 sbox1[64] = +{ + 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000, + 0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004, + 0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, + 0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000, + 0x00010000, 0x01010404, 0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400, + 0x01010004, 0x00010000, 0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, + 0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, 0x00010404, 0x01010400, + 0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004, 0x00010400, 0x00000000, 0x01010004 +}; + +static u32 sbox2[64] = +{ + 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020, + 0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020, + 0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, + 0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020, + 0x00000000, 0x00108020, 0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000, + 0x80100000, 0x80008000, 0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, + 0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, 0x80000020, 0x00100020, + 0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000, 0x80100020, 0x80108020, 0x00108000 +}; + +static u32 sbox3[64] = +{ + 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200, + 0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208, + 0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, + 0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000, + 0x08020200, 0x08000000, 0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000, + 0x00000200, 0x00020008, 0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, + 0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, 0x00020200, 0x08000008, + 0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208, 0x00000008, 0x08020008, 0x00020200 +}; + +static u32 sbox4[64] = +{ + 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001, + 0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001, + 0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, + 0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081, + 0x00800080, 0x00800001, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000, + 0x00002080, 0x00800080, 0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, 0x00802080, 0x00800081, + 0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002000, 0x00802080 +}; + +static u32 sbox5[64] = +{ + 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000, + 0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000, + 0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, + 0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100, + 0x00080000, 0x42000100, 0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100, + 0x02000100, 0x40000000, 0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, + 0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, 0x40080000, 0x42000000, + 0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000, 0x40080000, 0x02080100, 0x40000100 +}; + +static u32 sbox6[64] = +{ + 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000, + 0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010, + 0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, + 0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000, + 0x20004000, 0x00000010, 0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010, + 0x00400000, 0x20004000, 0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, + 0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, 0x20400000, 0x00404010, + 0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000, 0x20000000, 0x00400010, 0x20004010 +}; + +static u32 sbox7[64] = +{ + 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800, + 0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802, + 0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, + 0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800, + 0x04000000, 0x00200800, 0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002, + 0x00200002, 0x04000000, 0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, + 0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, 0x00000002, 0x04200802, + 0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002, 0x04000800, 0x00000800, 0x00200002 +}; + +static u32 sbox8[64] = +{ + 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000, + 0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040, + 0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, + 0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000, + 0x00041040, 0x00040000, 0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040, + 0x10001000, 0x00000040, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, + 0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0x00000000, + 0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040, 0x00040040, 0x10000000, 0x10041000 +}; + + +/* + * These two tables are part of the 'permuted choice 1' function. + * In this implementation several speed improvements are done. + */ +static u32 leftkey_swap[16] = +{ + 0x00000000, 0x00000001, 0x00000100, 0x00000101, + 0x00010000, 0x00010001, 0x00010100, 0x00010101, + 0x01000000, 0x01000001, 0x01000100, 0x01000101, + 0x01010000, 0x01010001, 0x01010100, 0x01010101 +}; + +static u32 rightkey_swap[16] = +{ + 0x00000000, 0x01000000, 0x00010000, 0x01010000, + 0x00000100, 0x01000100, 0x00010100, 0x01010100, + 0x00000001, 0x01000001, 0x00010001, 0x01010001, + 0x00000101, 0x01000101, 0x00010101, 0x01010101, +}; + + + +/* + * Numbers of left shifts per round for encryption subkeys. + * To calculate the decryption subkeys we just reverse the + * ordering of the calculated encryption subkeys. So their + * is no need for a decryption rotate tab. + */ +static byte encrypt_rotate_tab[16] = +{ + 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 +}; + + + +/* + * Table with weak DES keys sorted in ascending order. + * In DES their are 64 known keys which are weak. They are weak + * because they produce only one, two or four different + * subkeys in the subkey scheduling process. + * The keys in this table have all their parity bits cleared. + */ +static byte weak_keys[64][8] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /*w*/ + { 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e }, + { 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0 }, + { 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe }, + { 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e }, /*sw*/ + { 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00 }, + { 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe }, + { 0x00, 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0 }, + { 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0 }, /*sw*/ + { 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe }, + { 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00 }, + { 0x00, 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e }, + { 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe }, /*sw*/ + { 0x00, 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0 }, + { 0x00, 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e }, + { 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00 }, + { 0x1e, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x0e }, + { 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e, 0x00 }, /*sw*/ + { 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0, 0xfe }, + { 0x1e, 0x00, 0xfe, 0xe0, 0x0e, 0x00, 0xfe, 0xf0 }, + { 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00 }, + { 0x1e, 0x1e, 0x1e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e }, /*w*/ + { 0x1e, 0x1e, 0xe0, 0xe0, 0x0e, 0x0e, 0xf0, 0xf0 }, + { 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe, 0xfe }, + { 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00, 0xfe }, + { 0x1e, 0xe0, 0x1e, 0xe0, 0x0e, 0xf0, 0x0e, 0xf0 }, /*sw*/ + { 0x1e, 0xe0, 0xe0, 0x1e, 0x0e, 0xf0, 0xf0, 0x0e }, + { 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe, 0x00 }, + { 0x1e, 0xfe, 0x00, 0xe0, 0x0e, 0xfe, 0x00, 0xf0 }, + { 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe }, /*sw*/ + { 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0, 0x00 }, + { 0x1e, 0xfe, 0xfe, 0x1e, 0x0e, 0xfe, 0xfe, 0x0e }, + { 0xe0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0xf0 }, + { 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e, 0xfe }, + { 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00 }, /*sw*/ + { 0xe0, 0x00, 0xfe, 0x1e, 0xf0, 0x00, 0xfe, 0x0e }, + { 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00, 0xfe }, + { 0xe0, 0x1e, 0x1e, 0xe0, 0xf0, 0x0e, 0x0e, 0xf0 }, + { 0xe0, 0x1e, 0xe0, 0x1e, 0xf0, 0x0e, 0xf0, 0x0e }, /*sw*/ + { 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe, 0x00 }, + { 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00 }, + { 0xe0, 0xe0, 0x1e, 0x1e, 0xf0, 0xf0, 0x0e, 0x0e }, + { 0xe0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0 }, /*w*/ + { 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe, 0xfe }, + { 0xe0, 0xfe, 0x00, 0x1e, 0xf0, 0xfe, 0x00, 0x0e }, + { 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e, 0x00 }, + { 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0, 0xfe }, /*sw*/ + { 0xe0, 0xfe, 0xfe, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0 }, + { 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe }, + { 0xfe, 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0 }, + { 0xfe, 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e }, + { 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00 }, /*sw*/ + { 0xfe, 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0 }, + { 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe }, + { 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00 }, + { 0xfe, 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e }, /*sw*/ + { 0xfe, 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e }, + { 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00 }, + { 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe }, + { 0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0 }, /*sw*/ + { 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00 }, + { 0xfe, 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e }, + { 0xfe, 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0 }, + { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe } /*w*/ +}; + + + +/* + * Macro to swap bits across two words. + */ +#define DO_PERMUTATION(a, temp, b, offset, mask) \ + temp = ((a>>offset) ^ b) & mask; \ + b ^= temp; \ + a ^= temp<> 31); \ + temp = (left ^ right) & 0xaaaaaaaa; \ + right ^= temp; \ + left ^= temp; \ + left = (left << 1) | (left >> 31); + +/* + * The 'inverse initial permutation'. + */ +#define FINAL_PERMUTATION(left, temp, right) \ + left = (left << 31) | (left >> 1); \ + temp = (left ^ right) & 0xaaaaaaaa; \ + left ^= temp; \ + right ^= temp; \ + right = (right << 31) | (right >> 1); \ + DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ + DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ + DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ + DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) + + +/* + * A full DES round including 'expansion function', 'sbox substitution' + * and 'primitive function P' but without swapping the left and right word. + * Please note: The data in 'from' and 'to' is already rotated one bit to + * the left, done in the initial permutation. + */ +#define DES_ROUND(from, to, work, subkey) \ + work = from ^ *subkey++; \ + to ^= sbox8[ work & 0x3f ]; \ + to ^= sbox6[ (work>>8) & 0x3f ]; \ + to ^= sbox4[ (work>>16) & 0x3f ]; \ + to ^= sbox2[ (work>>24) & 0x3f ]; \ + work = ((from << 28) | (from >> 4)) ^ *subkey++; \ + to ^= sbox7[ work & 0x3f ]; \ + to ^= sbox5[ (work>>8) & 0x3f ]; \ + to ^= sbox3[ (work>>16) & 0x3f ]; \ + to ^= sbox1[ (work>>24) & 0x3f ]; + +/* + * Macros to convert 8 bytes from/to 32bit words. + */ +#define READ_64BIT_DATA(data, left, right) \ + left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \ + right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]; + +#define WRITE_64BIT_DATA(data, left, right) \ + data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \ + data[2] = (left >> 8) &0xff; data[3] = left &0xff; \ + data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \ + data[6] = (right >> 8) &0xff; data[7] = right &0xff; + +/* + * Handy macros for encryption and decryption of data + */ +#define des_ecb_encrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 0) +#define des_ecb_decrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 1) +#define tripledes_ecb_encrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,0) +#define tripledes_ecb_decrypt(ctx, from, to) tripledes_ecb_crypt(ctx,from,to,1) + + + + + + +/* + * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for + * 16 encryption rounds. + * To calculate subkeys for decryption the caller + * have to reorder the generated subkeys. + * + * rawkey: 8 Bytes of key data + * subkey: Array of at least 32 u32s. Will be filled + * with calculated subkeys. + * + */ +static void +des_key_schedule (const byte * rawkey, u32 * subkey) +{ + u32 left, right, work; + int round; + + READ_64BIT_DATA (rawkey, left, right) + + DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f) + DO_PERMUTATION (right, work, left, 0, 0x10101010) + + left = ((leftkey_swap[(left >> 0) & 0xf] << 3) + | (leftkey_swap[(left >> 8) & 0xf] << 2) + | (leftkey_swap[(left >> 16) & 0xf] << 1) + | (leftkey_swap[(left >> 24) & 0xf]) + | (leftkey_swap[(left >> 5) & 0xf] << 7) + | (leftkey_swap[(left >> 13) & 0xf] << 6) + | (leftkey_swap[(left >> 21) & 0xf] << 5) + | (leftkey_swap[(left >> 29) & 0xf] << 4)); + + left &= 0x0fffffff; + + right = ((rightkey_swap[(right >> 1) & 0xf] << 3) + | (rightkey_swap[(right >> 9) & 0xf] << 2) + | (rightkey_swap[(right >> 17) & 0xf] << 1) + | (rightkey_swap[(right >> 25) & 0xf]) + | (rightkey_swap[(right >> 4) & 0xf] << 7) + | (rightkey_swap[(right >> 12) & 0xf] << 6) + | (rightkey_swap[(right >> 20) & 0xf] << 5) + | (rightkey_swap[(right >> 28) & 0xf] << 4)); + + right &= 0x0fffffff; + + for (round = 0; round < 16; ++round) + { + left = ((left << encrypt_rotate_tab[round]) + | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; + right = ((right << encrypt_rotate_tab[round]) + | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; + + *subkey++ = (((left << 4) & 0x24000000) + | ((left << 28) & 0x10000000) + | ((left << 14) & 0x08000000) + | ((left << 18) & 0x02080000) + | ((left << 6) & 0x01000000) + | ((left << 9) & 0x00200000) + | ((left >> 1) & 0x00100000) + | ((left << 10) & 0x00040000) + | ((left << 2) & 0x00020000) + | ((left >> 10) & 0x00010000) + | ((right >> 13) & 0x00002000) + | ((right >> 4) & 0x00001000) + | ((right << 6) & 0x00000800) + | ((right >> 1) & 0x00000400) + | ((right >> 14) & 0x00000200) + | (right & 0x00000100) + | ((right >> 5) & 0x00000020) + | ((right >> 10) & 0x00000010) + | ((right >> 3) & 0x00000008) + | ((right >> 18) & 0x00000004) + | ((right >> 26) & 0x00000002) + | ((right >> 24) & 0x00000001)); + + *subkey++ = (((left << 15) & 0x20000000) + | ((left << 17) & 0x10000000) + | ((left << 10) & 0x08000000) + | ((left << 22) & 0x04000000) + | ((left >> 2) & 0x02000000) + | ((left << 1) & 0x01000000) + | ((left << 16) & 0x00200000) + | ((left << 11) & 0x00100000) + | ((left << 3) & 0x00080000) + | ((left >> 6) & 0x00040000) + | ((left << 15) & 0x00020000) + | ((left >> 4) & 0x00010000) + | ((right >> 2) & 0x00002000) + | ((right << 8) & 0x00001000) + | ((right >> 14) & 0x00000808) + | ((right >> 9) & 0x00000400) + | ((right) & 0x00000200) + | ((right << 7) & 0x00000100) + | ((right >> 7) & 0x00000020) + | ((right >> 3) & 0x00000011) + | ((right << 2) & 0x00000004) + | ((right >> 21) & 0x00000002)); + } +} + + +/* + * Fill a DES context with subkeys calculated from a 64bit key. + * Does not check parity bits, but simply ignore them. + * Does not check for weak keys. + */ +static int +des_setkey (struct _des_ctx *ctx, const byte * key) +{ + static const char *selftest_failed; + int i; + + if (!fips_mode () && !initialized) + { + initialized = 1; + selftest_failed = selftest (); + + if (selftest_failed) + log_error ("%s\n", selftest_failed); + } + if (selftest_failed) + return GPG_ERR_SELFTEST_FAILED; + + des_key_schedule (key, ctx->encrypt_subkeys); + _gcry_burn_stack (32); + + for(i=0; i<32; i+=2) + { + ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i]; + ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i]; + } + + return 0; +} + + + +/* + * Electronic Codebook Mode DES encryption/decryption of data according + * to 'mode'. + */ +static int +des_ecb_crypt (struct _des_ctx *ctx, const byte * from, byte * to, int mode) +{ + u32 left, right, work; + u32 *keys; + + keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; + + READ_64BIT_DATA (from, left, right) + INITIAL_PERMUTATION (left, work, right) + + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + + FINAL_PERMUTATION (right, work, left) + WRITE_64BIT_DATA (to, right, left) + + return 0; +} + + + +/* + * Fill a Triple-DES context with subkeys calculated from two 64bit keys. + * Does not check the parity bits of the keys, but simply ignore them. + * Does not check for weak keys. + */ + + + +/* + * Fill a Triple-DES context with subkeys calculated from three 64bit keys. + * Does not check the parity bits of the keys, but simply ignore them. + * Does not check for weak keys. + */ +static int +tripledes_set3keys (struct _tripledes_ctx *ctx, + const byte * key1, + const byte * key2, + const byte * key3) +{ + static const char *selftest_failed; + int i; + + if (!fips_mode () && !initialized) + { + initialized = 1; + selftest_failed = selftest (); + + if (selftest_failed) + log_error ("%s\n", selftest_failed); + } + if (selftest_failed) + return GPG_ERR_SELFTEST_FAILED; + + des_key_schedule (key1, ctx->encrypt_subkeys); + des_key_schedule (key2, &(ctx->decrypt_subkeys[32])); + des_key_schedule (key3, &(ctx->encrypt_subkeys[64])); + _gcry_burn_stack (32); + + for(i=0; i<32; i+=2) + { + ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[94-i]; + ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[95-i]; + + ctx->encrypt_subkeys[i+32] = ctx->decrypt_subkeys[62-i]; + ctx->encrypt_subkeys[i+33] = ctx->decrypt_subkeys[63-i]; + + ctx->decrypt_subkeys[i+64] = ctx->encrypt_subkeys[30-i]; + ctx->decrypt_subkeys[i+65] = ctx->encrypt_subkeys[31-i]; + } + + return 0; +} + + + +/* + * Electronic Codebook Mode Triple-DES encryption/decryption of data + * according to 'mode'. Sometimes this mode is named 'EDE' mode + * (Encryption-Decryption-Encryption). + */ +static int +tripledes_ecb_crypt (struct _tripledes_ctx *ctx, const byte * from, + byte * to, int mode) +{ + u32 left, right, work; + u32 *keys; + + keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; + + READ_64BIT_DATA (from, left, right) + INITIAL_PERMUTATION (left, work, right) + + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) + + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) + + FINAL_PERMUTATION (right, work, left) + WRITE_64BIT_DATA (to, right, left) + + return 0; +} + + + + + +/* + * Check whether the 8 byte key is weak. + * Does not check the parity bits of the key but simple ignore them. + */ +static int +is_weak_key ( const byte *key ) +{ + byte work[8]; + int i, left, right, middle, cmp_result; + + /* clear parity bits */ + for(i=0; i<8; ++i) + work[i] = key[i] & 0xfe; + + /* binary search in the weak key table */ + left = 0; + right = 63; + while(left <= right) + { + middle = (left + right) / 2; + + if ( !(cmp_result=working_memcmp(work, weak_keys[middle], 8)) ) + return -1; + + if ( cmp_result > 0 ) + left = middle + 1; + else + right = middle - 1; + } + + return 0; +} + + + +/* + * Performs a selftest of this DES/Triple-DES implementation. + * Returns an string with the error text on failure. + * Returns NULL if all is ok. + */ + + +static gcry_err_code_t +do_tripledes_setkey ( void *context, const byte *key, unsigned keylen ) +{ + struct _tripledes_ctx *ctx = (struct _tripledes_ctx *) context; + + if( keylen != 24 ) + return GPG_ERR_INV_KEYLEN; + + tripledes_set3keys ( ctx, key, key+8, key+16); + + if (ctx->flags.no_weak_key) + ; /* Detection has been disabled. */ + else if (is_weak_key (key) || is_weak_key (key+8) || is_weak_key (key+16)) + { + _gcry_burn_stack (64); + return GPG_ERR_WEAK_KEY; + } + _gcry_burn_stack (64); + + return GPG_ERR_NO_ERROR; +} + + + + +static void +do_tripledes_encrypt( void *context, byte *outbuf, const byte *inbuf ) +{ + struct _tripledes_ctx *ctx = (struct _tripledes_ctx *) context; + + tripledes_ecb_encrypt ( ctx, inbuf, outbuf ); + _gcry_burn_stack (32); +} + +static void +do_tripledes_decrypt( void *context, byte *outbuf, const byte *inbuf ) +{ + struct _tripledes_ctx *ctx = (struct _tripledes_ctx *) context; + tripledes_ecb_decrypt ( ctx, inbuf, outbuf ); + _gcry_burn_stack (32); +} + +static gcry_err_code_t +do_des_setkey (void *context, const byte *key, unsigned keylen) +{ + struct _des_ctx *ctx = (struct _des_ctx *) context; + + if (keylen != 8) + return GPG_ERR_INV_KEYLEN; + + des_setkey (ctx, key); + + if (is_weak_key (key)) { + _gcry_burn_stack (64); + return GPG_ERR_WEAK_KEY; + } + _gcry_burn_stack (64); + + return GPG_ERR_NO_ERROR; +} + + +static void +do_des_encrypt( void *context, byte *outbuf, const byte *inbuf ) +{ + struct _des_ctx *ctx = (struct _des_ctx *) context; + + des_ecb_encrypt ( ctx, inbuf, outbuf ); + _gcry_burn_stack (32); +} + +static void +do_des_decrypt( void *context, byte *outbuf, const byte *inbuf ) +{ + struct _des_ctx *ctx = (struct _des_ctx *) context; + + des_ecb_decrypt ( ctx, inbuf, outbuf ); + _gcry_burn_stack (32); +} + + + + +/* + Self-test section. + */ + + +/* Selftest for TripleDES. */ + + + +/* Run a full self-test for ALGO and return 0 on success. */ + + + +gcry_cipher_spec_t _gcry_cipher_spec_des = + { + "DES", NULL, NULL, 8, 64, sizeof (struct _des_ctx), + do_des_setkey, do_des_encrypt, do_des_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_des", +#endif + }; + +static gcry_cipher_oid_spec_t oids_tripledes[] = + { + { "1.2.840.113549.3.7", GCRY_CIPHER_MODE_CBC }, + /* Teletrust specific OID for 3DES. */ + { "1.3.36.3.1.3.2.1", GCRY_CIPHER_MODE_CBC }, + /* pbeWithSHAAnd3_KeyTripleDES_CBC */ + { "1.2.840.113549.1.12.1.3", GCRY_CIPHER_MODE_CBC }, + { NULL } + }; + +gcry_cipher_spec_t _gcry_cipher_spec_tripledes = + { + "3DES", NULL, oids_tripledes, 8, 192, sizeof (struct _tripledes_ctx), + do_tripledes_setkey, do_tripledes_encrypt, do_tripledes_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_des", +#endif + }; + + + +GRUB_MOD_INIT(gcry_des) +{ + grub_cipher_register (&_gcry_cipher_spec_des); + grub_cipher_register (&_gcry_cipher_spec_tripledes); +} + +GRUB_MOD_FINI(gcry_des) +{ + grub_cipher_unregister (&_gcry_cipher_spec_des); + grub_cipher_unregister (&_gcry_cipher_spec_tripledes); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/dsa.c b/grub-core/lib/libgcrypt-grub/cipher/dsa.c new file mode 100644 index 000000000..52079c5bc --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/dsa.c @@ -0,0 +1,292 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* dsa.c - DSA signature algorithm + * Copyright (C) 1998, 2000, 2001, 2002, 2003, + * 2006, 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + + +#include "g10lib.h" +#include "mpi.h" +#include "cipher.h" + +typedef struct +{ + gcry_mpi_t p; /* prime */ + gcry_mpi_t q; /* group order */ + gcry_mpi_t g; /* group generator */ + gcry_mpi_t y; /* g^x mod p */ +} DSA_public_key; + + +typedef struct +{ + gcry_mpi_t p; /* prime */ + gcry_mpi_t q; /* group order */ + gcry_mpi_t g; /* group generator */ + gcry_mpi_t y; /* g^x mod p */ + gcry_mpi_t x; /* secret exponent */ +} DSA_secret_key; + + +/* A structure used to hold domain parameters. */ +typedef struct +{ + gcry_mpi_t p; /* prime */ + gcry_mpi_t q; /* group order */ + gcry_mpi_t g; /* group generator */ +} dsa_domain_t; + + +/* A sample 1024 bit DSA key used for the selftests. */ +/* A sample 1024 bit DSA key used for the selftests (public only). */ + + + + +static int check_secret_key (DSA_secret_key *sk); +static int verify (gcry_mpi_t r, gcry_mpi_t s, gcry_mpi_t input, + DSA_public_key *pkey); + + + + + + + +/* + * Generate a random secret exponent k less than q. + */ + + +/* Check that a freshly generated key actually works. Returns 0 on success. */ + + + +/* + Generate a DSA key pair with a key of size NBITS. If transient_key + is true the key is generated using the standard RNG and not the + very secure one. + + Returns: 2 structures filled with all needed values + and an array with the n-1 factors of (p-1) + */ + + +/* Generate a DSA key pair with a key of size NBITS using the + algorithm given in FIPS-186-3. If USE_FIPS186_2 is true, + FIPS-186-2 is used and thus the length is restricted to 1024/160. + If DERIVEPARMS is not NULL it may contain a seed value. If domain + parameters are specified in DOMAIN, DERIVEPARMS may not be given + and NBITS and QBITS must match the specified domain parameters. */ + + + +/* + Test whether the secret key is valid. + Returns: if this is a valid key. + */ +static int +check_secret_key( DSA_secret_key *sk ) +{ + int rc; + gcry_mpi_t y = mpi_alloc( mpi_get_nlimbs(sk->y) ); + + gcry_mpi_powm( y, sk->g, sk->x, sk->p ); + rc = !mpi_cmp( y, sk->y ); + mpi_free( y ); + return rc; +} + + + +/* + Make a DSA signature from HASH and put it into r and s. + */ + + +/* + Returns true if the signature composed from R and S is valid. + */ +static int +verify (gcry_mpi_t r, gcry_mpi_t s, gcry_mpi_t hash, DSA_public_key *pkey ) +{ + int rc; + gcry_mpi_t w, u1, u2, v; + gcry_mpi_t base[3]; + gcry_mpi_t ex[3]; + + if( !(mpi_cmp_ui( r, 0 ) > 0 && mpi_cmp( r, pkey->q ) < 0) ) + return 0; /* assertion 0 < r < q failed */ + if( !(mpi_cmp_ui( s, 0 ) > 0 && mpi_cmp( s, pkey->q ) < 0) ) + return 0; /* assertion 0 < s < q failed */ + + w = mpi_alloc( mpi_get_nlimbs(pkey->q) ); + u1 = mpi_alloc( mpi_get_nlimbs(pkey->q) ); + u2 = mpi_alloc( mpi_get_nlimbs(pkey->q) ); + v = mpi_alloc( mpi_get_nlimbs(pkey->p) ); + + /* w = s^(-1) mod q */ + mpi_invm( w, s, pkey->q ); + + /* u1 = (hash * w) mod q */ + mpi_mulm( u1, hash, w, pkey->q ); + + /* u2 = r * w mod q */ + mpi_mulm( u2, r, w, pkey->q ); + + /* v = g^u1 * y^u2 mod p mod q */ + base[0] = pkey->g; ex[0] = u1; + base[1] = pkey->y; ex[1] = u2; + base[2] = NULL; ex[2] = NULL; + mpi_mulpowm( v, base, ex, pkey->p ); + mpi_fdiv_r( v, v, pkey->q ); + + rc = !mpi_cmp( v, r ); + + mpi_free(w); + mpi_free(u1); + mpi_free(u2); + mpi_free(v); + + return rc; +} + + +/********************************************* + ************** interface ****************** + *********************************************/ + +#define dsa_generate 0 + +#define dsa_generate 0 + + +static gcry_err_code_t +dsa_check_secret_key (int algo, gcry_mpi_t *skey) +{ + gcry_err_code_t err = GPG_ERR_NO_ERROR; + DSA_secret_key sk; + + (void)algo; + + if ((! skey[0]) || (! skey[1]) || (! skey[2]) || (! skey[3]) || (! skey[4])) + err = GPG_ERR_BAD_MPI; + else + { + sk.p = skey[0]; + sk.q = skey[1]; + sk.g = skey[2]; + sk.y = skey[3]; + sk.x = skey[4]; + if (! check_secret_key (&sk)) + err = GPG_ERR_BAD_SECKEY; + } + + return err; +} + + +#define dsa_sign 0 +static gcry_err_code_t +dsa_verify (int algo, gcry_mpi_t hash, gcry_mpi_t *data, gcry_mpi_t *pkey, + int (*cmp) (void *, gcry_mpi_t), void *opaquev) +{ + gcry_err_code_t err = GPG_ERR_NO_ERROR; + DSA_public_key pk; + + (void)algo; + (void)cmp; + (void)opaquev; + + if ((! data[0]) || (! data[1]) || (! hash) + || (! pkey[0]) || (! pkey[1]) || (! pkey[2]) || (! pkey[3])) + err = GPG_ERR_BAD_MPI; + else + { + pk.p = pkey[0]; + pk.q = pkey[1]; + pk.g = pkey[2]; + pk.y = pkey[3]; + if (! verify (data[0], data[1], hash, &pk)) + err = GPG_ERR_BAD_SIGNATURE; + } + return err; +} + + +static unsigned int +dsa_get_nbits (int algo, gcry_mpi_t *pkey) +{ + (void)algo; + + return mpi_get_nbits (pkey[0]); +} + + + +/* + Self-test section. + */ + + + + + +/* Run a full self-test for ALGO and return 0 on success. */ + + + + +static const char *dsa_names[] = + { + "dsa", + "openpgp-dsa", + NULL, + }; + +gcry_pk_spec_t _gcry_pubkey_spec_dsa = + { + "DSA", dsa_names, + "pqgy", "pqgyx", "", "rs", "pqgy", + GCRY_PK_USAGE_SIGN, + dsa_generate, + dsa_check_secret_key, + NULL, + NULL, + dsa_sign, + dsa_verify, + dsa_get_nbits + , +#ifdef GRUB_UTIL + .modname = "gcry_dsa", +#endif + }; + + +GRUB_MOD_INIT(gcry_dsa) +{ + grub_crypto_pk_dsa = &_gcry_pubkey_spec_dsa; +} + +GRUB_MOD_FINI(gcry_dsa) +{ + grub_crypto_pk_dsa = 0; +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/g10lib.h b/grub-core/lib/libgcrypt-grub/cipher/g10lib.h new file mode 100644 index 000000000..49cc16a2a --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/g10lib.h @@ -0,0 +1 @@ +#include diff --git a/grub-core/lib/libgcrypt-grub/cipher/hash-common.h b/grub-core/lib/libgcrypt-grub/cipher/hash-common.h new file mode 100644 index 000000000..79d36759f --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/hash-common.h @@ -0,0 +1,36 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +/* hash-common.h - Declarations of common code for hash algorithms. + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +#ifndef GCRY_HASH_COMMON_H +#define GCRY_HASH_COMMON_H + + +const char * _gcry_hash_selftest_check_one +/**/ (int algo, + int datamode, const void *data, size_t datalen, + const void *expect, size_t expectlen); + + + + + +#endif /*GCRY_HASH_COMMON_H*/ diff --git a/grub-core/lib/libgcrypt-grub/cipher/idea.c b/grub-core/lib/libgcrypt-grub/cipher/idea.c new file mode 100644 index 000000000..52a818f4e --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/idea.c @@ -0,0 +1,322 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* idea.c - IDEA function + * Copyright 1997, 1998, 1999, 2001 Werner Koch (dd9jn) + * Copyright 2013 g10 Code GmbH + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * WERNER KOCH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Werner Koch shall not be + * used in advertising or otherwise to promote the sale, use or other dealings + * in this Software without prior written authorization from Werner Koch. + * + * Patents on IDEA have expired: + * Europe: EP0482154 on 2011-05-16, + * Japan: JP3225440 on 2011-05-16, + * U.S.: 5,214,703 on 2012-01-07. + */ + +/* + * Please see http://www.noepatents.org/ to learn why software patents + * are bad for society and what you can do to fight them. + * + * The code herein is based on the one from: + * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. + * ISBN 0-471-11709-9. + */ + + + +#include "types.h" /* for byte and u32 typedefs */ +#include "g10lib.h" +#include "cipher.h" + + +#define IDEA_KEYSIZE 16 +#define IDEA_BLOCKSIZE 8 +#define IDEA_ROUNDS 8 +#define IDEA_KEYLEN (6*IDEA_ROUNDS+4) + +typedef struct { + u16 ek[IDEA_KEYLEN]; + u16 dk[IDEA_KEYLEN]; + int have_dk; +} IDEA_context; + + + +static u16 +mul_inv( u16 x ) +{ + u16 t0, t1; + u16 q, y; + + if( x < 2 ) + return x; + t1 = 0x10001UL / x; + y = 0x10001UL % x; + if( y == 1 ) + return (1-t1) & 0xffff; + + t0 = 1; + do { + q = x / y; + x = x % y; + t0 += q * t1; + if( x == 1 ) + return t0; + q = y / x; + y = y % x; + t1 += q * t0; + } while( y != 1 ); + return (1-t1) & 0xffff; +} + + + +static void +expand_key( const byte *userkey, u16 *ek ) +{ + int i,j; + + for(j=0; j < 8; j++ ) { + ek[j] = (*userkey << 8) + userkey[1]; + userkey += 2; + } + for(i=0; j < IDEA_KEYLEN; j++ ) { + i++; + ek[i+7] = ek[i&7] << 9 | ek[(i+1)&7] >> 7; + ek += i & 8; + i &= 7; + } +} + + +static void +invert_key( u16 *ek, u16 dk[IDEA_KEYLEN] ) +{ + int i; + u16 t1, t2, t3; + u16 temp[IDEA_KEYLEN]; + u16 *p = temp + IDEA_KEYLEN; + + t1 = mul_inv( *ek++ ); + t2 = -*ek++; + t3 = -*ek++; + *--p = mul_inv( *ek++ ); + *--p = t3; + *--p = t2; + *--p = t1; + + for(i=0; i < IDEA_ROUNDS-1; i++ ) { + t1 = *ek++; + *--p = *ek++; + *--p = t1; + + t1 = mul_inv( *ek++ ); + t2 = -*ek++; + t3 = -*ek++; + *--p = mul_inv( *ek++ ); + *--p = t2; + *--p = t3; + *--p = t1; + } + t1 = *ek++; + *--p = *ek++; + *--p = t1; + + t1 = mul_inv( *ek++ ); + t2 = -*ek++; + t3 = -*ek++; + *--p = mul_inv( *ek++ ); + *--p = t3; + *--p = t2; + *--p = t1; + memcpy(dk, temp, sizeof(temp) ); + memset(temp, 0, sizeof(temp) ); /* burn temp */ +} + + +static void +cipher( byte *outbuf, const byte *inbuf, u16 *key ) +{ + u16 s2, s3; + u16 in[4]; + int r = IDEA_ROUNDS; +#define x1 (in[0]) +#define x2 (in[1]) +#define x3 (in[2]) +#define x4 (in[3]) +#define MUL(x,y) \ + do {u16 _t16; u32 _t32; \ + if( (_t16 = (y)) ) { \ + if( (x = (x)&0xffff) ) { \ + _t32 = (u32)x * _t16; \ + x = _t32 & 0xffff; \ + _t16 = _t32 >> 16; \ + x = ((x)-_t16) + (x<_t16?1:0); \ + } \ + else { \ + x = 1 - _t16; \ + } \ + } \ + else { \ + x = 1 - x; \ + } \ + } while(0) + + memcpy (in, inbuf, sizeof in); +#ifndef WORDS_BIGENDIAN + x1 = (x1>>8) | (x1<<8); + x2 = (x2>>8) | (x2<<8); + x3 = (x3>>8) | (x3<<8); + x4 = (x4>>8) | (x4<<8); +#endif + do { + MUL(x1, *key++); + x2 += *key++; + x3 += *key++; + MUL(x4, *key++ ); + + s3 = x3; + x3 ^= x1; + MUL(x3, *key++); + s2 = x2; + x2 ^=x4; + x2 += x3; + MUL(x2, *key++); + x3 += x2; + + x1 ^= x2; + x4 ^= x3; + + x2 ^= s3; + x3 ^= s2; + } while( --r ); + MUL(x1, *key++); + x3 += *key++; + x2 += *key++; + MUL(x4, *key); + +#ifndef WORDS_BIGENDIAN + x1 = (x1>>8) | (x1<<8); + x2 = (x2>>8) | (x2<<8); + x3 = (x3>>8) | (x3<<8); + x4 = (x4>>8) | (x4<<8); +#endif + memcpy (outbuf+0, &x1, 2); + memcpy (outbuf+2, &x3, 2); + memcpy (outbuf+4, &x2, 2); + memcpy (outbuf+6, &x4, 2); +#undef MUL +#undef x1 +#undef x2 +#undef x3 +#undef x4 +} + + +static int +do_setkey( IDEA_context *c, const byte *key, unsigned int keylen ) +{ + static int initialized = 0; + static const char *selftest_failed = 0; + + if( !initialized ) { + initialized = 1; + selftest_failed = selftest(); + if( selftest_failed ) + log_error( "%s\n", selftest_failed ); + } + if( selftest_failed ) + return GPG_ERR_SELFTEST_FAILED; + + assert(keylen == 16); + c->have_dk = 0; + expand_key( key, c->ek ); + invert_key( c->ek, c->dk ); + return 0; +} + +static gcry_err_code_t +idea_setkey (void *context, const byte *key, unsigned int keylen) +{ + IDEA_context *ctx = context; + int rc = do_setkey (ctx, key, keylen); + _gcry_burn_stack (23+6*sizeof(void*)); + return rc; +} + +static void +encrypt_block( IDEA_context *c, byte *outbuf, const byte *inbuf ) +{ + cipher( outbuf, inbuf, c->ek ); +} + +static void +idea_encrypt (void *context, byte *out, const byte *in) +{ + IDEA_context *ctx = context; + encrypt_block (ctx, out, in); + _gcry_burn_stack (24+3*sizeof (void*)); +} + +static void +decrypt_block( IDEA_context *c, byte *outbuf, const byte *inbuf ) +{ + if( !c->have_dk ) { + c->have_dk = 1; + invert_key( c->ek, c->dk ); + } + cipher( outbuf, inbuf, c->dk ); +} + +static void +idea_decrypt (void *context, byte *out, const byte *in) +{ + IDEA_context *ctx = context; + decrypt_block (ctx, out, in); + _gcry_burn_stack (24+3*sizeof (void*)); +} + + + + +gcry_cipher_spec_t _gcry_cipher_spec_idea = +{ + "IDEA", NULL, NULL, IDEA_BLOCKSIZE, 128, + sizeof (IDEA_context), + idea_setkey, idea_encrypt, idea_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_idea", +#endif +}; + + +GRUB_MOD_INIT(gcry_idea) +{ + grub_cipher_register (&_gcry_cipher_spec_idea); +} + +GRUB_MOD_FINI(gcry_idea) +{ + grub_cipher_unregister (&_gcry_cipher_spec_idea); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/init.c b/grub-core/lib/libgcrypt-grub/cipher/init.c new file mode 100644 index 000000000..a02fe0fd9 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/init.c @@ -0,0 +1,91 @@ +#include +extern void grub_gcry_arcfour_init (void); +extern void grub_gcry_arcfour_fini (void); +extern void grub_gcry_blowfish_init (void); +extern void grub_gcry_blowfish_fini (void); +extern void grub_gcry_camellia_init (void); +extern void grub_gcry_camellia_fini (void); +extern void grub_gcry_cast5_init (void); +extern void grub_gcry_cast5_fini (void); +extern void grub_gcry_crc_init (void); +extern void grub_gcry_crc_fini (void); +extern void grub_gcry_des_init (void); +extern void grub_gcry_des_fini (void); +extern void grub_gcry_idea_init (void); +extern void grub_gcry_idea_fini (void); +extern void grub_gcry_md4_init (void); +extern void grub_gcry_md4_fini (void); +extern void grub_gcry_md5_init (void); +extern void grub_gcry_md5_fini (void); +extern void grub_gcry_rfc2268_init (void); +extern void grub_gcry_rfc2268_fini (void); +extern void grub_gcry_rijndael_init (void); +extern void grub_gcry_rijndael_fini (void); +extern void grub_gcry_rmd160_init (void); +extern void grub_gcry_rmd160_fini (void); +extern void grub_gcry_seed_init (void); +extern void grub_gcry_seed_fini (void); +extern void grub_gcry_serpent_init (void); +extern void grub_gcry_serpent_fini (void); +extern void grub_gcry_sha1_init (void); +extern void grub_gcry_sha1_fini (void); +extern void grub_gcry_sha256_init (void); +extern void grub_gcry_sha256_fini (void); +extern void grub_gcry_sha512_init (void); +extern void grub_gcry_sha512_fini (void); +extern void grub_gcry_tiger_init (void); +extern void grub_gcry_tiger_fini (void); +extern void grub_gcry_twofish_init (void); +extern void grub_gcry_twofish_fini (void); +extern void grub_gcry_whirlpool_init (void); +extern void grub_gcry_whirlpool_fini (void); + +void +grub_gcry_init_all (void) +{ + grub_gcry_arcfour_init (); + grub_gcry_blowfish_init (); + grub_gcry_camellia_init (); + grub_gcry_cast5_init (); + grub_gcry_crc_init (); + grub_gcry_des_init (); + grub_gcry_idea_init (); + grub_gcry_md4_init (); + grub_gcry_md5_init (); + grub_gcry_rfc2268_init (); + grub_gcry_rijndael_init (); + grub_gcry_rmd160_init (); + grub_gcry_seed_init (); + grub_gcry_serpent_init (); + grub_gcry_sha1_init (); + grub_gcry_sha256_init (); + grub_gcry_sha512_init (); + grub_gcry_tiger_init (); + grub_gcry_twofish_init (); + grub_gcry_whirlpool_init (); +} + +void +grub_gcry_fini_all (void) +{ + grub_gcry_arcfour_fini (); + grub_gcry_blowfish_fini (); + grub_gcry_camellia_fini (); + grub_gcry_cast5_fini (); + grub_gcry_crc_fini (); + grub_gcry_des_fini (); + grub_gcry_idea_fini (); + grub_gcry_md4_fini (); + grub_gcry_md5_fini (); + grub_gcry_rfc2268_fini (); + grub_gcry_rijndael_fini (); + grub_gcry_rmd160_fini (); + grub_gcry_seed_fini (); + grub_gcry_serpent_fini (); + grub_gcry_sha1_fini (); + grub_gcry_sha256_fini (); + grub_gcry_sha512_fini (); + grub_gcry_tiger_fini (); + grub_gcry_twofish_fini (); + grub_gcry_whirlpool_fini (); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/md4.c b/grub-core/lib/libgcrypt-grub/cipher/md4.c new file mode 100644 index 000000000..deb291af8 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/md4.c @@ -0,0 +1,344 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* md4.c - MD4 Message-Digest Algorithm + * Copyright (C) 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Based on md5.c in libgcrypt, but rewritten to compute md4 checksums + * using a public domain md4 implementation with the following comments: + * + * Modified by Wei Dai from Andrew M. Kuchling's md4.c + * The original code and all modifications are in the public domain. + * + * This is the original introductory comment: + * + * md4.c : MD4 hash algorithm. + * + * Part of the Python Cryptography Toolkit, version 1.1 + * + * Distribute and use freely; there are no restrictions on further + * dissemination and usage except those imposed by the laws of your + * country of residence. + * + */ + +/* MD4 test suite: + * MD4 ("") = 31d6cfe0d16ae931b73c59d7e0c089c0 + * MD4 ("a") = bde52cb31de33e46245e05fbdbd6fb24 + * MD4 ("abc") = a448017aaf21d8525fc10ae87aa6729d + * MD4 ("message digest") = d9130a8164549fe818874806e1c7014b + * MD4 ("abcdefghijklmnopqrstuvwxyz") = d79e1c308aa5bbcdeea8ed63df412da9 + * MD4 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = + * 043f8582f241db351ce627e153e7f0e4 + * MD4 ("123456789012345678901234567890123456789012345678901234567890123456 + * 78901234567890") = e33b4ddc9c38f2199c3e7b164fcc0536 + */ + + +#include "g10lib.h" +#include "cipher.h" + +#include "bithelp.h" + + +typedef struct { + u32 A,B,C,D; /* chaining variables */ + u32 nblocks; + byte buf[64]; + int count; +} MD4_CONTEXT; + + +static void +md4_init( void *context ) +{ + MD4_CONTEXT *ctx = context; + + ctx->A = 0x67452301; + ctx->B = 0xefcdab89; + ctx->C = 0x98badcfe; + ctx->D = 0x10325476; + + ctx->nblocks = 0; + ctx->count = 0; +} + +#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) + + +/**************** + * transform 64 bytes + */ +static void +transform ( MD4_CONTEXT *ctx, const unsigned char *data ) +{ + u32 in[16]; + register u32 A = ctx->A; + register u32 B = ctx->B; + register u32 C = ctx->C; + register u32 D = ctx->D; + +#ifdef WORDS_BIGENDIAN + { + int i; + byte *p2; + const byte *p1; + for(i=0, p1=data, p2=(byte*)in; i < 16; i++, p2 += 4 ) + { + p2[3] = *p1++; + p2[2] = *p1++; + p2[1] = *p1++; + p2[0] = *p1++; + } + } +#else + memcpy (in, data, 64); +#endif + + /* Round 1. */ +#define function(a,b,c,d,k,s) a=rol(a+F(b,c,d)+in[k],s); + function(A,B,C,D, 0, 3); + function(D,A,B,C, 1, 7); + function(C,D,A,B, 2,11); + function(B,C,D,A, 3,19); + function(A,B,C,D, 4, 3); + function(D,A,B,C, 5, 7); + function(C,D,A,B, 6,11); + function(B,C,D,A, 7,19); + function(A,B,C,D, 8, 3); + function(D,A,B,C, 9, 7); + function(C,D,A,B,10,11); + function(B,C,D,A,11,19); + function(A,B,C,D,12, 3); + function(D,A,B,C,13, 7); + function(C,D,A,B,14,11); + function(B,C,D,A,15,19); + +#undef function + + /* Round 2. */ +#define function(a,b,c,d,k,s) a=rol(a+G(b,c,d)+in[k]+0x5a827999,s); + + function(A,B,C,D, 0, 3); + function(D,A,B,C, 4, 5); + function(C,D,A,B, 8, 9); + function(B,C,D,A,12,13); + function(A,B,C,D, 1, 3); + function(D,A,B,C, 5, 5); + function(C,D,A,B, 9, 9); + function(B,C,D,A,13,13); + function(A,B,C,D, 2, 3); + function(D,A,B,C, 6, 5); + function(C,D,A,B,10, 9); + function(B,C,D,A,14,13); + function(A,B,C,D, 3, 3); + function(D,A,B,C, 7, 5); + function(C,D,A,B,11, 9); + function(B,C,D,A,15,13); + +#undef function + + /* Round 3. */ +#define function(a,b,c,d,k,s) a=rol(a+H(b,c,d)+in[k]+0x6ed9eba1,s); + + function(A,B,C,D, 0, 3); + function(D,A,B,C, 8, 9); + function(C,D,A,B, 4,11); + function(B,C,D,A,12,15); + function(A,B,C,D, 2, 3); + function(D,A,B,C,10, 9); + function(C,D,A,B, 6,11); + function(B,C,D,A,14,15); + function(A,B,C,D, 1, 3); + function(D,A,B,C, 9, 9); + function(C,D,A,B, 5,11); + function(B,C,D,A,13,15); + function(A,B,C,D, 3, 3); + function(D,A,B,C,11, 9); + function(C,D,A,B, 7,11); + function(B,C,D,A,15,15); + + + /* Put checksum in context given as argument. */ + ctx->A += A; + ctx->B += B; + ctx->C += C; + ctx->D += D; +} + + + +/* The routine updates the message-digest context to + * account for the presence of each of the characters inBuf[0..inLen-1] + * in the message whose digest is being computed. + */ +static void +md4_write ( void *context, const void *inbuf_arg, size_t inlen) +{ + const unsigned char *inbuf = inbuf_arg; + MD4_CONTEXT *hd = context; + + if( hd->count == 64 ) /* flush the buffer */ + { + transform( hd, hd->buf ); + _gcry_burn_stack (80+6*sizeof(void*)); + hd->count = 0; + hd->nblocks++; + } + if( !inbuf ) + return; + + if( hd->count ) + { + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; + md4_write( hd, NULL, 0 ); + if( !inlen ) + return; + } + _gcry_burn_stack (80+6*sizeof(void*)); + + while( inlen >= 64 ) + { + transform( hd, inbuf ); + hd->count = 0; + hd->nblocks++; + inlen -= 64; + inbuf += 64; + } + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; +} + + + +/* The routine final terminates the message-digest computation and + * ends with the desired message digest in mdContext->digest[0...15]. + * The handle is prepared for a new MD4 cycle. + * Returns 16 bytes representing the digest. + */ + +static void +md4_final( void *context ) +{ + MD4_CONTEXT *hd = context; + u32 t, msb, lsb; + byte *p; + + md4_write(hd, NULL, 0); /* flush */; + + t = hd->nblocks; + /* multiply by 64 to make a byte count */ + lsb = t << 6; + msb = t >> 26; + /* add the count */ + t = lsb; + if( (lsb += hd->count) < t ) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 29; + + if( hd->count < 56 ) /* enough room */ + { + hd->buf[hd->count++] = 0x80; /* pad */ + while( hd->count < 56 ) + hd->buf[hd->count++] = 0; /* pad */ + } + else /* need one extra block */ + { + hd->buf[hd->count++] = 0x80; /* pad character */ + while( hd->count < 64 ) + hd->buf[hd->count++] = 0; + md4_write(hd, NULL, 0); /* flush */; + memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ + } + /* append the 64 bit count */ + hd->buf[56] = lsb ; + hd->buf[57] = lsb >> 8; + hd->buf[58] = lsb >> 16; + hd->buf[59] = lsb >> 24; + hd->buf[60] = msb ; + hd->buf[61] = msb >> 8; + hd->buf[62] = msb >> 16; + hd->buf[63] = msb >> 24; + transform( hd, hd->buf ); + _gcry_burn_stack (80+6*sizeof(void*)); + + p = hd->buf; +#ifdef WORDS_BIGENDIAN +#define X(a) do { *p++ = hd->a ; *p++ = hd->a >> 8; \ + *p++ = hd->a >> 16; *p++ = hd->a >> 24; } while(0) +#else /* little endian */ +#define X(a) do { *(u32*)p = (*hd).a ; p += 4; } while(0) +#endif + X(A); + X(B); + X(C); + X(D); +#undef X + +} + +static byte * +md4_read (void *context) +{ + MD4_CONTEXT *hd = context; + return hd->buf; +} + +static byte asn[18] = /* Object ID is 1.2.840.113549.2.4 */ + { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86,0x48, + 0x86, 0xf7, 0x0d, 0x02, 0x04, 0x05, 0x00, 0x04, 0x10 }; + +static gcry_md_oid_spec_t oid_spec_md4[] = + { + /* iso.member-body.us.rsadsi.digestAlgorithm.md4 */ + { "1.2.840.113549.2.4" }, + { NULL }, + }; + +gcry_md_spec_t _gcry_digest_spec_md4 = + { + "MD4", asn, DIM (asn), oid_spec_md4,16, + md4_init, md4_write, md4_final, md4_read, + sizeof (MD4_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_md4", +#endif + .blocksize = 64 + }; + + +GRUB_MOD_INIT(gcry_md4) +{ + COMPILE_TIME_ASSERT(sizeof (MD4_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_md4); +} + +GRUB_MOD_FINI(gcry_md4) +{ + grub_md_unregister (&_gcry_digest_spec_md4); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/md5.c b/grub-core/lib/libgcrypt-grub/cipher/md5.c new file mode 100644 index 000000000..e5b6accca --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/md5.c @@ -0,0 +1,372 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* md5.c - MD5 Message-Digest Algorithm + * Copyright (C) 1995,1996,1998,1999,2001,2002, + * 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * According to the definition of MD5 in RFC 1321 from April 1992. + * NOTE: This is *not* the same file as the one from glibc. + * Written by Ulrich Drepper , 1995. + * heavily modified for GnuPG by Werner Koch + */ + +/* Test values: + * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E + * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61 + * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72 + * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0 + */ + + +#include "g10lib.h" +#include "cipher.h" + +#include "bithelp.h" + + +typedef struct { + u32 A,B,C,D; /* chaining variables */ + u32 nblocks; + byte buf[64]; + int count; +} MD5_CONTEXT; + + +static void +md5_init( void *context ) +{ + MD5_CONTEXT *ctx = context; + + ctx->A = 0x67452301; + ctx->B = 0xefcdab89; + ctx->C = 0x98badcfe; + ctx->D = 0x10325476; + + ctx->nblocks = 0; + ctx->count = 0; +} + + +/* These are the four functions used in the four steps of the MD5 algorithm + and defined in the RFC 1321. The first function is a little bit optimized + (as found in Colin Plumbs public domain implementation). */ +/* #define FF(b, c, d) ((b & c) | (~b & d)) */ +#define FF(b, c, d) (d ^ (b & (c ^ d))) +#define FG(b, c, d) FF (d, b, c) +#define FH(b, c, d) (b ^ c ^ d) +#define FI(b, c, d) (c ^ (b | ~d)) + + +/**************** + * transform n*64 bytes + */ +static void +transform ( MD5_CONTEXT *ctx, const unsigned char *data ) +{ + u32 correct_words[16]; + register u32 A = ctx->A; + register u32 B = ctx->B; + register u32 C = ctx->C; + register u32 D = ctx->D; + u32 *cwp = correct_words; + +#ifdef WORDS_BIGENDIAN + { + int i; + byte *p2; + const byte *p1; + for(i=0, p1=data, p2=(byte*)correct_words; i < 16; i++, p2 += 4 ) + { + p2[3] = *p1++; + p2[2] = *p1++; + p2[1] = *p1++; + p2[0] = *p1++; + } + } +#else + memcpy( correct_words, data, 64 ); +#endif + + +#define OP(a, b, c, d, s, T) \ + do \ + { \ + a += FF (b, c, d) + (*cwp++) + T; \ + a = rol(a, s); \ + a += b; \ + } \ + while (0) + + /* Before we start, one word about the strange constants. + They are defined in RFC 1321 as + + T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 + */ + + /* Round 1. */ + OP (A, B, C, D, 7, 0xd76aa478); + OP (D, A, B, C, 12, 0xe8c7b756); + OP (C, D, A, B, 17, 0x242070db); + OP (B, C, D, A, 22, 0xc1bdceee); + OP (A, B, C, D, 7, 0xf57c0faf); + OP (D, A, B, C, 12, 0x4787c62a); + OP (C, D, A, B, 17, 0xa8304613); + OP (B, C, D, A, 22, 0xfd469501); + OP (A, B, C, D, 7, 0x698098d8); + OP (D, A, B, C, 12, 0x8b44f7af); + OP (C, D, A, B, 17, 0xffff5bb1); + OP (B, C, D, A, 22, 0x895cd7be); + OP (A, B, C, D, 7, 0x6b901122); + OP (D, A, B, C, 12, 0xfd987193); + OP (C, D, A, B, 17, 0xa679438e); + OP (B, C, D, A, 22, 0x49b40821); + +#undef OP +#define OP(f, a, b, c, d, k, s, T) \ + do \ + { \ + a += f (b, c, d) + correct_words[k] + T; \ + a = rol(a, s); \ + a += b; \ + } \ + while (0) + + /* Round 2. */ + OP (FG, A, B, C, D, 1, 5, 0xf61e2562); + OP (FG, D, A, B, C, 6, 9, 0xc040b340); + OP (FG, C, D, A, B, 11, 14, 0x265e5a51); + OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); + OP (FG, A, B, C, D, 5, 5, 0xd62f105d); + OP (FG, D, A, B, C, 10, 9, 0x02441453); + OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); + OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); + OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); + OP (FG, D, A, B, C, 14, 9, 0xc33707d6); + OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); + OP (FG, B, C, D, A, 8, 20, 0x455a14ed); + OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); + OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); + OP (FG, C, D, A, B, 7, 14, 0x676f02d9); + OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); + + /* Round 3. */ + OP (FH, A, B, C, D, 5, 4, 0xfffa3942); + OP (FH, D, A, B, C, 8, 11, 0x8771f681); + OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); + OP (FH, B, C, D, A, 14, 23, 0xfde5380c); + OP (FH, A, B, C, D, 1, 4, 0xa4beea44); + OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); + OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); + OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); + OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); + OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); + OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); + OP (FH, B, C, D, A, 6, 23, 0x04881d05); + OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); + OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); + OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); + OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); + + /* Round 4. */ + OP (FI, A, B, C, D, 0, 6, 0xf4292244); + OP (FI, D, A, B, C, 7, 10, 0x432aff97); + OP (FI, C, D, A, B, 14, 15, 0xab9423a7); + OP (FI, B, C, D, A, 5, 21, 0xfc93a039); + OP (FI, A, B, C, D, 12, 6, 0x655b59c3); + OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); + OP (FI, C, D, A, B, 10, 15, 0xffeff47d); + OP (FI, B, C, D, A, 1, 21, 0x85845dd1); + OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); + OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); + OP (FI, C, D, A, B, 6, 15, 0xa3014314); + OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); + OP (FI, A, B, C, D, 4, 6, 0xf7537e82); + OP (FI, D, A, B, C, 11, 10, 0xbd3af235); + OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); + OP (FI, B, C, D, A, 9, 21, 0xeb86d391); + + /* Put checksum in context given as argument. */ + ctx->A += A; + ctx->B += B; + ctx->C += C; + ctx->D += D; +} + + + +/* The routine updates the message-digest context to + * account for the presence of each of the characters inBuf[0..inLen-1] + * in the message whose digest is being computed. + */ +static void +md5_write( void *context, const void *inbuf_arg , size_t inlen) +{ + const unsigned char *inbuf = inbuf_arg; + MD5_CONTEXT *hd = context; + + if( hd->count == 64 ) /* flush the buffer */ + { + transform( hd, hd->buf ); + _gcry_burn_stack (80+6*sizeof(void*)); + hd->count = 0; + hd->nblocks++; + } + if( !inbuf ) + return; + + if( hd->count ) + { + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; + md5_write( hd, NULL, 0 ); + if( !inlen ) + return; + } + _gcry_burn_stack (80+6*sizeof(void*)); + + while( inlen >= 64 ) + { + transform( hd, inbuf ); + hd->count = 0; + hd->nblocks++; + inlen -= 64; + inbuf += 64; + } + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; + +} + + + +/* The routine final terminates the message-digest computation and + * ends with the desired message digest in mdContext->digest[0...15]. + * The handle is prepared for a new MD5 cycle. + * Returns 16 bytes representing the digest. + */ + +static void +md5_final( void *context) +{ + MD5_CONTEXT *hd = context; + u32 t, msb, lsb; + byte *p; + + md5_write(hd, NULL, 0); /* flush */; + + t = hd->nblocks; + /* multiply by 64 to make a byte count */ + lsb = t << 6; + msb = t >> 26; + /* add the count */ + t = lsb; + if( (lsb += hd->count) < t ) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 29; + + if( hd->count < 56 ) /* enough room */ + { + hd->buf[hd->count++] = 0x80; /* pad */ + while( hd->count < 56 ) + hd->buf[hd->count++] = 0; /* pad */ + } + else /* need one extra block */ + { + hd->buf[hd->count++] = 0x80; /* pad character */ + while( hd->count < 64 ) + hd->buf[hd->count++] = 0; + md5_write(hd, NULL, 0); /* flush */; + memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ + } + /* append the 64 bit count */ + hd->buf[56] = lsb ; + hd->buf[57] = lsb >> 8; + hd->buf[58] = lsb >> 16; + hd->buf[59] = lsb >> 24; + hd->buf[60] = msb ; + hd->buf[61] = msb >> 8; + hd->buf[62] = msb >> 16; + hd->buf[63] = msb >> 24; + transform( hd, hd->buf ); + _gcry_burn_stack (80+6*sizeof(void*)); + + p = hd->buf; +#ifdef WORDS_BIGENDIAN +#define X(a) do { *p++ = hd->a ; *p++ = hd->a >> 8; \ + *p++ = hd->a >> 16; *p++ = hd->a >> 24; } while(0) +#else /* little endian */ +#define X(a) do { *(u32*)p = (*hd).a ; p += 4; } while(0) +#endif + X(A); + X(B); + X(C); + X(D); +#undef X + +} + +static byte * +md5_read( void *context ) +{ + MD5_CONTEXT *hd = (MD5_CONTEXT *) context; + return hd->buf; +} + +static byte asn[18] = /* Object ID is 1.2.840.113549.2.5 */ + { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86,0x48, + 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10 }; + +static gcry_md_oid_spec_t oid_spec_md5[] = + { + /* iso.member-body.us.rsadsi.pkcs.pkcs-1.4 (md5WithRSAEncryption) */ + { "1.2.840.113549.1.1.4" }, + /* RSADSI digestAlgorithm MD5 */ + { "1.2.840.113549.2.5" }, + { NULL }, + }; + +gcry_md_spec_t _gcry_digest_spec_md5 = + { + "MD5", asn, DIM (asn), oid_spec_md5, 16, + md5_init, md5_write, md5_final, md5_read, + sizeof (MD5_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_md5", +#endif + .blocksize = 64 + }; + + +GRUB_MOD_INIT(gcry_md5) +{ + COMPILE_TIME_ASSERT(sizeof (MD5_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_md5); +} + +GRUB_MOD_FINI(gcry_md5) +{ + grub_md_unregister (&_gcry_digest_spec_md5); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/memory.h b/grub-core/lib/libgcrypt-grub/cipher/memory.h new file mode 100644 index 000000000..49cc16a2a --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/memory.h @@ -0,0 +1 @@ +#include diff --git a/grub-core/lib/libgcrypt-grub/cipher/rfc2268.c b/grub-core/lib/libgcrypt-grub/cipher/rfc2268.c new file mode 100644 index 000000000..c5c4a4b7c --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/rfc2268.c @@ -0,0 +1,285 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* rfc2268.c - The cipher described in rfc2268; aka Ron's Cipher 2. + * Copyright (C) 2003 Nikos Mavroyanopoulos + * Copyright (C) 2004 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* This implementation was written by Nikos Mavroyanopoulos for GNUTLS + * as a Libgcrypt module (gnutls/lib/x509/rc2.c) and later adapted for + * direct use by Libgcrypt by Werner Koch. This implementation is + * only useful for pkcs#12 decryption. + * + * The implementation here is based on Peter Gutmann's RRC.2 paper. + */ + + +#include "g10lib.h" +#include "types.h" +#include "cipher.h" + +#define RFC2268_BLOCKSIZE 8 + +typedef struct +{ + u16 S[64]; +} RFC2268_context; + +static const unsigned char rfc2268_sbox[] = { + 217, 120, 249, 196, 25, 221, 181, 237, + 40, 233, 253, 121, 74, 160, 216, 157, + 198, 126, 55, 131, 43, 118, 83, 142, + 98, 76, 100, 136, 68, 139, 251, 162, + 23, 154, 89, 245, 135, 179, 79, 19, + 97, 69, 109, 141, 9, 129, 125, 50, + 189, 143, 64, 235, 134, 183, 123, 11, + 240, 149, 33, 34, 92, 107, 78, 130, + 84, 214, 101, 147, 206, 96, 178, 28, + 115, 86, 192, 20, 167, 140, 241, 220, + 18, 117, 202, 31, 59, 190, 228, 209, + 66, 61, 212, 48, 163, 60, 182, 38, + 111, 191, 14, 218, 70, 105, 7, 87, + 39, 242, 29, 155, 188, 148, 67, 3, + 248, 17, 199, 246, 144, 239, 62, 231, + 6, 195, 213, 47, 200, 102, 30, 215, + 8, 232, 234, 222, 128, 82, 238, 247, + 132, 170, 114, 172, 53, 77, 106, 42, + 150, 26, 210, 113, 90, 21, 73, 116, + 75, 159, 208, 94, 4, 24, 164, 236, + 194, 224, 65, 110, 15, 81, 203, 204, + 36, 145, 175, 80, 161, 244, 112, 57, + 153, 124, 58, 133, 35, 184, 180, 122, + 252, 2, 54, 91, 37, 85, 151, 49, + 45, 93, 250, 152, 227, 138, 146, 174, + 5, 223, 41, 16, 103, 108, 186, 201, + 211, 0, 230, 207, 225, 158, 168, 44, + 99, 22, 1, 63, 88, 226, 137, 169, + 13, 56, 52, 27, 171, 51, 255, 176, + 187, 72, 12, 95, 185, 177, 205, 46, + 197, 243, 219, 71, 229, 165, 156, 119, + 10, 166, 32, 104, 254, 127, 193, 173 +}; + +#define rotl16(x,n) (((x) << ((u16)(n))) | ((x) >> (16 - (u16)(n)))) +#define rotr16(x,n) (((x) >> ((u16)(n))) | ((x) << (16 - (u16)(n)))) + + + +static void +do_encrypt (void *context, unsigned char *outbuf, const unsigned char *inbuf) +{ + RFC2268_context *ctx = context; + register int i, j; + u16 word0 = 0, word1 = 0, word2 = 0, word3 = 0; + + word0 = (word0 << 8) | inbuf[1]; + word0 = (word0 << 8) | inbuf[0]; + word1 = (word1 << 8) | inbuf[3]; + word1 = (word1 << 8) | inbuf[2]; + word2 = (word2 << 8) | inbuf[5]; + word2 = (word2 << 8) | inbuf[4]; + word3 = (word3 << 8) | inbuf[7]; + word3 = (word3 << 8) | inbuf[6]; + + for (i = 0; i < 16; i++) + { + j = i * 4; + /* For some reason I cannot combine those steps. */ + word0 += (word1 & ~word3) + (word2 & word3) + ctx->S[j]; + word0 = rotl16(word0, 1); + + word1 += (word2 & ~word0) + (word3 & word0) + ctx->S[j + 1]; + word1 = rotl16(word1, 2); + + word2 += (word3 & ~word1) + (word0 & word1) + ctx->S[j + 2]; + word2 = rotl16(word2, 3); + + word3 += (word0 & ~word2) + (word1 & word2) + ctx->S[j + 3]; + word3 = rotl16(word3, 5); + + if (i == 4 || i == 10) + { + word0 += ctx->S[word3 & 63]; + word1 += ctx->S[word0 & 63]; + word2 += ctx->S[word1 & 63]; + word3 += ctx->S[word2 & 63]; + } + + } + + outbuf[0] = word0 & 255; + outbuf[1] = word0 >> 8; + outbuf[2] = word1 & 255; + outbuf[3] = word1 >> 8; + outbuf[4] = word2 & 255; + outbuf[5] = word2 >> 8; + outbuf[6] = word3 & 255; + outbuf[7] = word3 >> 8; +} + +static void +do_decrypt (void *context, unsigned char *outbuf, const unsigned char *inbuf) +{ + RFC2268_context *ctx = context; + register int i, j; + u16 word0 = 0, word1 = 0, word2 = 0, word3 = 0; + + word0 = (word0 << 8) | inbuf[1]; + word0 = (word0 << 8) | inbuf[0]; + word1 = (word1 << 8) | inbuf[3]; + word1 = (word1 << 8) | inbuf[2]; + word2 = (word2 << 8) | inbuf[5]; + word2 = (word2 << 8) | inbuf[4]; + word3 = (word3 << 8) | inbuf[7]; + word3 = (word3 << 8) | inbuf[6]; + + for (i = 15; i >= 0; i--) + { + j = i * 4; + + word3 = rotr16(word3, 5); + word3 -= (word0 & ~word2) + (word1 & word2) + ctx->S[j + 3]; + + word2 = rotr16(word2, 3); + word2 -= (word3 & ~word1) + (word0 & word1) + ctx->S[j + 2]; + + word1 = rotr16(word1, 2); + word1 -= (word2 & ~word0) + (word3 & word0) + ctx->S[j + 1]; + + word0 = rotr16(word0, 1); + word0 -= (word1 & ~word3) + (word2 & word3) + ctx->S[j]; + + if (i == 5 || i == 11) + { + word3 = word3 - ctx->S[word2 & 63]; + word2 = word2 - ctx->S[word1 & 63]; + word1 = word1 - ctx->S[word0 & 63]; + word0 = word0 - ctx->S[word3 & 63]; + } + + } + + outbuf[0] = word0 & 255; + outbuf[1] = word0 >> 8; + outbuf[2] = word1 & 255; + outbuf[3] = word1 >> 8; + outbuf[4] = word2 & 255; + outbuf[5] = word2 >> 8; + outbuf[6] = word3 & 255; + outbuf[7] = word3 >> 8; +} + + +static gpg_err_code_t +setkey_core (void *context, const unsigned char *key, unsigned int keylen, int with_phase2) +{ + static int initialized; + static const char *selftest_failed; + RFC2268_context *ctx = context; + unsigned int i; + unsigned char *S, x; + int len; + int bits = keylen * 8; + + if (!initialized) + { + initialized = 1; + selftest_failed = selftest (); + if (selftest_failed) + log_error ("RFC2268 selftest failed (%s).\n", selftest_failed); + } + if (selftest_failed) + return GPG_ERR_SELFTEST_FAILED; + + if (keylen < 40 / 8) /* We want at least 40 bits. */ + return GPG_ERR_INV_KEYLEN; + + S = (unsigned char *) ctx->S; + + for (i = 0; i < keylen; i++) + S[i] = key[i]; + + for (i = keylen; i < 128; i++) + S[i] = rfc2268_sbox[(S[i - keylen] + S[i - 1]) & 255]; + + S[0] = rfc2268_sbox[S[0]]; + + /* Phase 2 - reduce effective key size to "bits". This was not + * discussed in Gutmann's paper. I've copied that from the public + * domain code posted in sci.crypt. */ + if (with_phase2) + { + len = (bits + 7) >> 3; + i = 128 - len; + x = rfc2268_sbox[S[i] & (255 >> (7 & -bits))]; + S[i] = x; + + while (i--) + { + x = rfc2268_sbox[x ^ S[i + len]]; + S[i] = x; + } + } + + /* Make the expanded key, endian independent. */ + for (i = 0; i < 64; i++) + ctx->S[i] = ( (u16) S[i * 2] | (((u16) S[i * 2 + 1]) << 8)); + + return 0; +} + +static gpg_err_code_t +do_setkey (void *context, const unsigned char *key, unsigned int keylen) +{ + return setkey_core (context, key, keylen, 1); +} + + + + +static gcry_cipher_oid_spec_t oids_rfc2268_40[] = + { + /*{ "1.2.840.113549.3.2", GCRY_CIPHER_MODE_CBC },*/ + /* pbeWithSHAAnd40BitRC2_CBC */ + { "1.2.840.113549.1.12.1.6", GCRY_CIPHER_MODE_CBC }, + { NULL } + }; + +gcry_cipher_spec_t _gcry_cipher_spec_rfc2268_40 = { + "RFC2268_40", NULL, oids_rfc2268_40, + RFC2268_BLOCKSIZE, 40, sizeof(RFC2268_context), + do_setkey, do_encrypt, do_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_rfc2268", +#endif +}; + + +GRUB_MOD_INIT(gcry_rfc2268) +{ + grub_cipher_register (&_gcry_cipher_spec_rfc2268_40); +} + +GRUB_MOD_FINI(gcry_rfc2268) +{ + grub_cipher_unregister (&_gcry_cipher_spec_rfc2268_40); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/rijndael-tables.h b/grub-core/lib/libgcrypt-grub/cipher/rijndael-tables.h new file mode 100644 index 000000000..8027db6ee --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/rijndael-tables.h @@ -0,0 +1,1689 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +/* rijndael-tables.h - Rijndael (AES) for GnuPG, + * Copyright (C) 2000, 2001, 2002, 2003, 2007, + * 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +/* To keep the actual implementation at a readable size we use this + include file to define the tables. */ + +static const unsigned char S[256] = + { + 99, 124, 119, 123, 242, 107, 111, 197, + 48, 1, 103, 43, 254, 215, 171, 118, + 202, 130, 201, 125, 250, 89, 71, 240, + 173, 212, 162, 175, 156, 164, 114, 192, + 183, 253, 147, 38, 54, 63, 247, 204, + 52, 165, 229, 241, 113, 216, 49, 21, + 4, 199, 35, 195, 24, 150, 5, 154, + 7, 18, 128, 226, 235, 39, 178, 117, + 9, 131, 44, 26, 27, 110, 90, 160, + 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, + 106, 203, 190, 57, 74, 76, 88, 207, + 208, 239, 170, 251, 67, 77, 51, 133, + 69, 249, 2, 127, 80, 60, 159, 168, + 81, 163, 64, 143, 146, 157, 56, 245, + 188, 182, 218, 33, 16, 255, 243, 210, + 205, 12, 19, 236, 95, 151, 68, 23, + 196, 167, 126, 61, 100, 93, 25, 115, + 96, 129, 79, 220, 34, 42, 144, 136, + 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, + 194, 211, 172, 98, 145, 149, 228, 121, + 231, 200, 55, 109, 141, 213, 78, 169, + 108, 86, 244, 234, 101, 122, 174, 8, + 186, 120, 37, 46, 28, 166, 180, 198, + 232, 221, 116, 31, 75, 189, 139, 138, + 112, 62, 181, 102, 72, 3, 246, 14, + 97, 53, 87, 185, 134, 193, 29, 158, + 225, 248, 152, 17, 105, 217, 142, 148, + 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, + 65, 153, 45, 15, 176, 84, 187, 22 + }; + + +static const unsigned char T1[256][4] = + { + { 0xc6,0x63,0x63,0xa5 }, { 0xf8,0x7c,0x7c,0x84 }, + { 0xee,0x77,0x77,0x99 }, { 0xf6,0x7b,0x7b,0x8d }, + { 0xff,0xf2,0xf2,0x0d }, { 0xd6,0x6b,0x6b,0xbd }, + { 0xde,0x6f,0x6f,0xb1 }, { 0x91,0xc5,0xc5,0x54 }, + { 0x60,0x30,0x30,0x50 }, { 0x02,0x01,0x01,0x03 }, + { 0xce,0x67,0x67,0xa9 }, { 0x56,0x2b,0x2b,0x7d }, + { 0xe7,0xfe,0xfe,0x19 }, { 0xb5,0xd7,0xd7,0x62 }, + { 0x4d,0xab,0xab,0xe6 }, { 0xec,0x76,0x76,0x9a }, + { 0x8f,0xca,0xca,0x45 }, { 0x1f,0x82,0x82,0x9d }, + { 0x89,0xc9,0xc9,0x40 }, { 0xfa,0x7d,0x7d,0x87 }, + { 0xef,0xfa,0xfa,0x15 }, { 0xb2,0x59,0x59,0xeb }, + { 0x8e,0x47,0x47,0xc9 }, { 0xfb,0xf0,0xf0,0x0b }, + { 0x41,0xad,0xad,0xec }, { 0xb3,0xd4,0xd4,0x67 }, + { 0x5f,0xa2,0xa2,0xfd }, { 0x45,0xaf,0xaf,0xea }, + { 0x23,0x9c,0x9c,0xbf }, { 0x53,0xa4,0xa4,0xf7 }, + { 0xe4,0x72,0x72,0x96 }, { 0x9b,0xc0,0xc0,0x5b }, + { 0x75,0xb7,0xb7,0xc2 }, { 0xe1,0xfd,0xfd,0x1c }, + { 0x3d,0x93,0x93,0xae }, { 0x4c,0x26,0x26,0x6a }, + { 0x6c,0x36,0x36,0x5a }, { 0x7e,0x3f,0x3f,0x41 }, + { 0xf5,0xf7,0xf7,0x02 }, { 0x83,0xcc,0xcc,0x4f }, + { 0x68,0x34,0x34,0x5c }, { 0x51,0xa5,0xa5,0xf4 }, + { 0xd1,0xe5,0xe5,0x34 }, { 0xf9,0xf1,0xf1,0x08 }, + { 0xe2,0x71,0x71,0x93 }, { 0xab,0xd8,0xd8,0x73 }, + { 0x62,0x31,0x31,0x53 }, { 0x2a,0x15,0x15,0x3f }, + { 0x08,0x04,0x04,0x0c }, { 0x95,0xc7,0xc7,0x52 }, + { 0x46,0x23,0x23,0x65 }, { 0x9d,0xc3,0xc3,0x5e }, + { 0x30,0x18,0x18,0x28 }, { 0x37,0x96,0x96,0xa1 }, + { 0x0a,0x05,0x05,0x0f }, { 0x2f,0x9a,0x9a,0xb5 }, + { 0x0e,0x07,0x07,0x09 }, { 0x24,0x12,0x12,0x36 }, + { 0x1b,0x80,0x80,0x9b }, { 0xdf,0xe2,0xe2,0x3d }, + { 0xcd,0xeb,0xeb,0x26 }, { 0x4e,0x27,0x27,0x69 }, + { 0x7f,0xb2,0xb2,0xcd }, { 0xea,0x75,0x75,0x9f }, + { 0x12,0x09,0x09,0x1b }, { 0x1d,0x83,0x83,0x9e }, + { 0x58,0x2c,0x2c,0x74 }, { 0x34,0x1a,0x1a,0x2e }, + { 0x36,0x1b,0x1b,0x2d }, { 0xdc,0x6e,0x6e,0xb2 }, + { 0xb4,0x5a,0x5a,0xee }, { 0x5b,0xa0,0xa0,0xfb }, + { 0xa4,0x52,0x52,0xf6 }, { 0x76,0x3b,0x3b,0x4d }, + { 0xb7,0xd6,0xd6,0x61 }, { 0x7d,0xb3,0xb3,0xce }, + { 0x52,0x29,0x29,0x7b }, { 0xdd,0xe3,0xe3,0x3e }, + { 0x5e,0x2f,0x2f,0x71 }, { 0x13,0x84,0x84,0x97 }, + { 0xa6,0x53,0x53,0xf5 }, { 0xb9,0xd1,0xd1,0x68 }, + { 0x00,0x00,0x00,0x00 }, { 0xc1,0xed,0xed,0x2c }, + { 0x40,0x20,0x20,0x60 }, { 0xe3,0xfc,0xfc,0x1f }, + { 0x79,0xb1,0xb1,0xc8 }, { 0xb6,0x5b,0x5b,0xed }, + { 0xd4,0x6a,0x6a,0xbe }, { 0x8d,0xcb,0xcb,0x46 }, + { 0x67,0xbe,0xbe,0xd9 }, { 0x72,0x39,0x39,0x4b }, + { 0x94,0x4a,0x4a,0xde }, { 0x98,0x4c,0x4c,0xd4 }, + { 0xb0,0x58,0x58,0xe8 }, { 0x85,0xcf,0xcf,0x4a }, + { 0xbb,0xd0,0xd0,0x6b }, { 0xc5,0xef,0xef,0x2a }, + { 0x4f,0xaa,0xaa,0xe5 }, { 0xed,0xfb,0xfb,0x16 }, + { 0x86,0x43,0x43,0xc5 }, { 0x9a,0x4d,0x4d,0xd7 }, + { 0x66,0x33,0x33,0x55 }, { 0x11,0x85,0x85,0x94 }, + { 0x8a,0x45,0x45,0xcf }, { 0xe9,0xf9,0xf9,0x10 }, + { 0x04,0x02,0x02,0x06 }, { 0xfe,0x7f,0x7f,0x81 }, + { 0xa0,0x50,0x50,0xf0 }, { 0x78,0x3c,0x3c,0x44 }, + { 0x25,0x9f,0x9f,0xba }, { 0x4b,0xa8,0xa8,0xe3 }, + { 0xa2,0x51,0x51,0xf3 }, { 0x5d,0xa3,0xa3,0xfe }, + { 0x80,0x40,0x40,0xc0 }, { 0x05,0x8f,0x8f,0x8a }, + { 0x3f,0x92,0x92,0xad }, { 0x21,0x9d,0x9d,0xbc }, + { 0x70,0x38,0x38,0x48 }, { 0xf1,0xf5,0xf5,0x04 }, + { 0x63,0xbc,0xbc,0xdf }, { 0x77,0xb6,0xb6,0xc1 }, + { 0xaf,0xda,0xda,0x75 }, { 0x42,0x21,0x21,0x63 }, + { 0x20,0x10,0x10,0x30 }, { 0xe5,0xff,0xff,0x1a }, + { 0xfd,0xf3,0xf3,0x0e }, { 0xbf,0xd2,0xd2,0x6d }, + { 0x81,0xcd,0xcd,0x4c }, { 0x18,0x0c,0x0c,0x14 }, + { 0x26,0x13,0x13,0x35 }, { 0xc3,0xec,0xec,0x2f }, + { 0xbe,0x5f,0x5f,0xe1 }, { 0x35,0x97,0x97,0xa2 }, + { 0x88,0x44,0x44,0xcc }, { 0x2e,0x17,0x17,0x39 }, + { 0x93,0xc4,0xc4,0x57 }, { 0x55,0xa7,0xa7,0xf2 }, + { 0xfc,0x7e,0x7e,0x82 }, { 0x7a,0x3d,0x3d,0x47 }, + { 0xc8,0x64,0x64,0xac }, { 0xba,0x5d,0x5d,0xe7 }, + { 0x32,0x19,0x19,0x2b }, { 0xe6,0x73,0x73,0x95 }, + { 0xc0,0x60,0x60,0xa0 }, { 0x19,0x81,0x81,0x98 }, + { 0x9e,0x4f,0x4f,0xd1 }, { 0xa3,0xdc,0xdc,0x7f }, + { 0x44,0x22,0x22,0x66 }, { 0x54,0x2a,0x2a,0x7e }, + { 0x3b,0x90,0x90,0xab }, { 0x0b,0x88,0x88,0x83 }, + { 0x8c,0x46,0x46,0xca }, { 0xc7,0xee,0xee,0x29 }, + { 0x6b,0xb8,0xb8,0xd3 }, { 0x28,0x14,0x14,0x3c }, + { 0xa7,0xde,0xde,0x79 }, { 0xbc,0x5e,0x5e,0xe2 }, + { 0x16,0x0b,0x0b,0x1d }, { 0xad,0xdb,0xdb,0x76 }, + { 0xdb,0xe0,0xe0,0x3b }, { 0x64,0x32,0x32,0x56 }, + { 0x74,0x3a,0x3a,0x4e }, { 0x14,0x0a,0x0a,0x1e }, + { 0x92,0x49,0x49,0xdb }, { 0x0c,0x06,0x06,0x0a }, + { 0x48,0x24,0x24,0x6c }, { 0xb8,0x5c,0x5c,0xe4 }, + { 0x9f,0xc2,0xc2,0x5d }, { 0xbd,0xd3,0xd3,0x6e }, + { 0x43,0xac,0xac,0xef }, { 0xc4,0x62,0x62,0xa6 }, + { 0x39,0x91,0x91,0xa8 }, { 0x31,0x95,0x95,0xa4 }, + { 0xd3,0xe4,0xe4,0x37 }, { 0xf2,0x79,0x79,0x8b }, + { 0xd5,0xe7,0xe7,0x32 }, { 0x8b,0xc8,0xc8,0x43 }, + { 0x6e,0x37,0x37,0x59 }, { 0xda,0x6d,0x6d,0xb7 }, + { 0x01,0x8d,0x8d,0x8c }, { 0xb1,0xd5,0xd5,0x64 }, + { 0x9c,0x4e,0x4e,0xd2 }, { 0x49,0xa9,0xa9,0xe0 }, + { 0xd8,0x6c,0x6c,0xb4 }, { 0xac,0x56,0x56,0xfa }, + { 0xf3,0xf4,0xf4,0x07 }, { 0xcf,0xea,0xea,0x25 }, + { 0xca,0x65,0x65,0xaf }, { 0xf4,0x7a,0x7a,0x8e }, + { 0x47,0xae,0xae,0xe9 }, { 0x10,0x08,0x08,0x18 }, + { 0x6f,0xba,0xba,0xd5 }, { 0xf0,0x78,0x78,0x88 }, + { 0x4a,0x25,0x25,0x6f }, { 0x5c,0x2e,0x2e,0x72 }, + { 0x38,0x1c,0x1c,0x24 }, { 0x57,0xa6,0xa6,0xf1 }, + { 0x73,0xb4,0xb4,0xc7 }, { 0x97,0xc6,0xc6,0x51 }, + { 0xcb,0xe8,0xe8,0x23 }, { 0xa1,0xdd,0xdd,0x7c }, + { 0xe8,0x74,0x74,0x9c }, { 0x3e,0x1f,0x1f,0x21 }, + { 0x96,0x4b,0x4b,0xdd }, { 0x61,0xbd,0xbd,0xdc }, + { 0x0d,0x8b,0x8b,0x86 }, { 0x0f,0x8a,0x8a,0x85 }, + { 0xe0,0x70,0x70,0x90 }, { 0x7c,0x3e,0x3e,0x42 }, + { 0x71,0xb5,0xb5,0xc4 }, { 0xcc,0x66,0x66,0xaa }, + { 0x90,0x48,0x48,0xd8 }, { 0x06,0x03,0x03,0x05 }, + { 0xf7,0xf6,0xf6,0x01 }, { 0x1c,0x0e,0x0e,0x12 }, + { 0xc2,0x61,0x61,0xa3 }, { 0x6a,0x35,0x35,0x5f }, + { 0xae,0x57,0x57,0xf9 }, { 0x69,0xb9,0xb9,0xd0 }, + { 0x17,0x86,0x86,0x91 }, { 0x99,0xc1,0xc1,0x58 }, + { 0x3a,0x1d,0x1d,0x27 }, { 0x27,0x9e,0x9e,0xb9 }, + { 0xd9,0xe1,0xe1,0x38 }, { 0xeb,0xf8,0xf8,0x13 }, + { 0x2b,0x98,0x98,0xb3 }, { 0x22,0x11,0x11,0x33 }, + { 0xd2,0x69,0x69,0xbb }, { 0xa9,0xd9,0xd9,0x70 }, + { 0x07,0x8e,0x8e,0x89 }, { 0x33,0x94,0x94,0xa7 }, + { 0x2d,0x9b,0x9b,0xb6 }, { 0x3c,0x1e,0x1e,0x22 }, + { 0x15,0x87,0x87,0x92 }, { 0xc9,0xe9,0xe9,0x20 }, + { 0x87,0xce,0xce,0x49 }, { 0xaa,0x55,0x55,0xff }, + { 0x50,0x28,0x28,0x78 }, { 0xa5,0xdf,0xdf,0x7a }, + { 0x03,0x8c,0x8c,0x8f }, { 0x59,0xa1,0xa1,0xf8 }, + { 0x09,0x89,0x89,0x80 }, { 0x1a,0x0d,0x0d,0x17 }, + { 0x65,0xbf,0xbf,0xda }, { 0xd7,0xe6,0xe6,0x31 }, + { 0x84,0x42,0x42,0xc6 }, { 0xd0,0x68,0x68,0xb8 }, + { 0x82,0x41,0x41,0xc3 }, { 0x29,0x99,0x99,0xb0 }, + { 0x5a,0x2d,0x2d,0x77 }, { 0x1e,0x0f,0x0f,0x11 }, + { 0x7b,0xb0,0xb0,0xcb }, { 0xa8,0x54,0x54,0xfc }, + { 0x6d,0xbb,0xbb,0xd6 }, { 0x2c,0x16,0x16,0x3a } + }; + +static const unsigned char T2[256][4] = + { + { 0xa5,0xc6,0x63,0x63 }, { 0x84,0xf8,0x7c,0x7c }, + { 0x99,0xee,0x77,0x77 }, { 0x8d,0xf6,0x7b,0x7b }, + { 0x0d,0xff,0xf2,0xf2 }, { 0xbd,0xd6,0x6b,0x6b }, + { 0xb1,0xde,0x6f,0x6f }, { 0x54,0x91,0xc5,0xc5 }, + { 0x50,0x60,0x30,0x30 }, { 0x03,0x02,0x01,0x01 }, + { 0xa9,0xce,0x67,0x67 }, { 0x7d,0x56,0x2b,0x2b }, + { 0x19,0xe7,0xfe,0xfe }, { 0x62,0xb5,0xd7,0xd7 }, + { 0xe6,0x4d,0xab,0xab }, { 0x9a,0xec,0x76,0x76 }, + { 0x45,0x8f,0xca,0xca }, { 0x9d,0x1f,0x82,0x82 }, + { 0x40,0x89,0xc9,0xc9 }, { 0x87,0xfa,0x7d,0x7d }, + { 0x15,0xef,0xfa,0xfa }, { 0xeb,0xb2,0x59,0x59 }, + { 0xc9,0x8e,0x47,0x47 }, { 0x0b,0xfb,0xf0,0xf0 }, + { 0xec,0x41,0xad,0xad }, { 0x67,0xb3,0xd4,0xd4 }, + { 0xfd,0x5f,0xa2,0xa2 }, { 0xea,0x45,0xaf,0xaf }, + { 0xbf,0x23,0x9c,0x9c }, { 0xf7,0x53,0xa4,0xa4 }, + { 0x96,0xe4,0x72,0x72 }, { 0x5b,0x9b,0xc0,0xc0 }, + { 0xc2,0x75,0xb7,0xb7 }, { 0x1c,0xe1,0xfd,0xfd }, + { 0xae,0x3d,0x93,0x93 }, { 0x6a,0x4c,0x26,0x26 }, + { 0x5a,0x6c,0x36,0x36 }, { 0x41,0x7e,0x3f,0x3f }, + { 0x02,0xf5,0xf7,0xf7 }, { 0x4f,0x83,0xcc,0xcc }, + { 0x5c,0x68,0x34,0x34 }, { 0xf4,0x51,0xa5,0xa5 }, + { 0x34,0xd1,0xe5,0xe5 }, { 0x08,0xf9,0xf1,0xf1 }, + { 0x93,0xe2,0x71,0x71 }, { 0x73,0xab,0xd8,0xd8 }, + { 0x53,0x62,0x31,0x31 }, { 0x3f,0x2a,0x15,0x15 }, + { 0x0c,0x08,0x04,0x04 }, { 0x52,0x95,0xc7,0xc7 }, + { 0x65,0x46,0x23,0x23 }, { 0x5e,0x9d,0xc3,0xc3 }, + { 0x28,0x30,0x18,0x18 }, { 0xa1,0x37,0x96,0x96 }, + { 0x0f,0x0a,0x05,0x05 }, { 0xb5,0x2f,0x9a,0x9a }, + { 0x09,0x0e,0x07,0x07 }, { 0x36,0x24,0x12,0x12 }, + { 0x9b,0x1b,0x80,0x80 }, { 0x3d,0xdf,0xe2,0xe2 }, + { 0x26,0xcd,0xeb,0xeb }, { 0x69,0x4e,0x27,0x27 }, + { 0xcd,0x7f,0xb2,0xb2 }, { 0x9f,0xea,0x75,0x75 }, + { 0x1b,0x12,0x09,0x09 }, { 0x9e,0x1d,0x83,0x83 }, + { 0x74,0x58,0x2c,0x2c }, { 0x2e,0x34,0x1a,0x1a }, + { 0x2d,0x36,0x1b,0x1b }, { 0xb2,0xdc,0x6e,0x6e }, + { 0xee,0xb4,0x5a,0x5a }, { 0xfb,0x5b,0xa0,0xa0 }, + { 0xf6,0xa4,0x52,0x52 }, { 0x4d,0x76,0x3b,0x3b }, + { 0x61,0xb7,0xd6,0xd6 }, { 0xce,0x7d,0xb3,0xb3 }, + { 0x7b,0x52,0x29,0x29 }, { 0x3e,0xdd,0xe3,0xe3 }, + { 0x71,0x5e,0x2f,0x2f }, { 0x97,0x13,0x84,0x84 }, + { 0xf5,0xa6,0x53,0x53 }, { 0x68,0xb9,0xd1,0xd1 }, + { 0x00,0x00,0x00,0x00 }, { 0x2c,0xc1,0xed,0xed }, + { 0x60,0x40,0x20,0x20 }, { 0x1f,0xe3,0xfc,0xfc }, + { 0xc8,0x79,0xb1,0xb1 }, { 0xed,0xb6,0x5b,0x5b }, + { 0xbe,0xd4,0x6a,0x6a }, { 0x46,0x8d,0xcb,0xcb }, + { 0xd9,0x67,0xbe,0xbe }, { 0x4b,0x72,0x39,0x39 }, + { 0xde,0x94,0x4a,0x4a }, { 0xd4,0x98,0x4c,0x4c }, + { 0xe8,0xb0,0x58,0x58 }, { 0x4a,0x85,0xcf,0xcf }, + { 0x6b,0xbb,0xd0,0xd0 }, { 0x2a,0xc5,0xef,0xef }, + { 0xe5,0x4f,0xaa,0xaa }, { 0x16,0xed,0xfb,0xfb }, + { 0xc5,0x86,0x43,0x43 }, { 0xd7,0x9a,0x4d,0x4d }, + { 0x55,0x66,0x33,0x33 }, { 0x94,0x11,0x85,0x85 }, + { 0xcf,0x8a,0x45,0x45 }, { 0x10,0xe9,0xf9,0xf9 }, + { 0x06,0x04,0x02,0x02 }, { 0x81,0xfe,0x7f,0x7f }, + { 0xf0,0xa0,0x50,0x50 }, { 0x44,0x78,0x3c,0x3c }, + { 0xba,0x25,0x9f,0x9f }, { 0xe3,0x4b,0xa8,0xa8 }, + { 0xf3,0xa2,0x51,0x51 }, { 0xfe,0x5d,0xa3,0xa3 }, + { 0xc0,0x80,0x40,0x40 }, { 0x8a,0x05,0x8f,0x8f }, + { 0xad,0x3f,0x92,0x92 }, { 0xbc,0x21,0x9d,0x9d }, + { 0x48,0x70,0x38,0x38 }, { 0x04,0xf1,0xf5,0xf5 }, + { 0xdf,0x63,0xbc,0xbc }, { 0xc1,0x77,0xb6,0xb6 }, + { 0x75,0xaf,0xda,0xda }, { 0x63,0x42,0x21,0x21 }, + { 0x30,0x20,0x10,0x10 }, { 0x1a,0xe5,0xff,0xff }, + { 0x0e,0xfd,0xf3,0xf3 }, { 0x6d,0xbf,0xd2,0xd2 }, + { 0x4c,0x81,0xcd,0xcd }, { 0x14,0x18,0x0c,0x0c }, + { 0x35,0x26,0x13,0x13 }, { 0x2f,0xc3,0xec,0xec }, + { 0xe1,0xbe,0x5f,0x5f }, { 0xa2,0x35,0x97,0x97 }, + { 0xcc,0x88,0x44,0x44 }, { 0x39,0x2e,0x17,0x17 }, + { 0x57,0x93,0xc4,0xc4 }, { 0xf2,0x55,0xa7,0xa7 }, + { 0x82,0xfc,0x7e,0x7e }, { 0x47,0x7a,0x3d,0x3d }, + { 0xac,0xc8,0x64,0x64 }, { 0xe7,0xba,0x5d,0x5d }, + { 0x2b,0x32,0x19,0x19 }, { 0x95,0xe6,0x73,0x73 }, + { 0xa0,0xc0,0x60,0x60 }, { 0x98,0x19,0x81,0x81 }, + { 0xd1,0x9e,0x4f,0x4f }, { 0x7f,0xa3,0xdc,0xdc }, + { 0x66,0x44,0x22,0x22 }, { 0x7e,0x54,0x2a,0x2a }, + { 0xab,0x3b,0x90,0x90 }, { 0x83,0x0b,0x88,0x88 }, + { 0xca,0x8c,0x46,0x46 }, { 0x29,0xc7,0xee,0xee }, + { 0xd3,0x6b,0xb8,0xb8 }, { 0x3c,0x28,0x14,0x14 }, + { 0x79,0xa7,0xde,0xde }, { 0xe2,0xbc,0x5e,0x5e }, + { 0x1d,0x16,0x0b,0x0b }, { 0x76,0xad,0xdb,0xdb }, + { 0x3b,0xdb,0xe0,0xe0 }, { 0x56,0x64,0x32,0x32 }, + { 0x4e,0x74,0x3a,0x3a }, { 0x1e,0x14,0x0a,0x0a }, + { 0xdb,0x92,0x49,0x49 }, { 0x0a,0x0c,0x06,0x06 }, + { 0x6c,0x48,0x24,0x24 }, { 0xe4,0xb8,0x5c,0x5c }, + { 0x5d,0x9f,0xc2,0xc2 }, { 0x6e,0xbd,0xd3,0xd3 }, + { 0xef,0x43,0xac,0xac }, { 0xa6,0xc4,0x62,0x62 }, + { 0xa8,0x39,0x91,0x91 }, { 0xa4,0x31,0x95,0x95 }, + { 0x37,0xd3,0xe4,0xe4 }, { 0x8b,0xf2,0x79,0x79 }, + { 0x32,0xd5,0xe7,0xe7 }, { 0x43,0x8b,0xc8,0xc8 }, + { 0x59,0x6e,0x37,0x37 }, { 0xb7,0xda,0x6d,0x6d }, + { 0x8c,0x01,0x8d,0x8d }, { 0x64,0xb1,0xd5,0xd5 }, + { 0xd2,0x9c,0x4e,0x4e }, { 0xe0,0x49,0xa9,0xa9 }, + { 0xb4,0xd8,0x6c,0x6c }, { 0xfa,0xac,0x56,0x56 }, + { 0x07,0xf3,0xf4,0xf4 }, { 0x25,0xcf,0xea,0xea }, + { 0xaf,0xca,0x65,0x65 }, { 0x8e,0xf4,0x7a,0x7a }, + { 0xe9,0x47,0xae,0xae }, { 0x18,0x10,0x08,0x08 }, + { 0xd5,0x6f,0xba,0xba }, { 0x88,0xf0,0x78,0x78 }, + { 0x6f,0x4a,0x25,0x25 }, { 0x72,0x5c,0x2e,0x2e }, + { 0x24,0x38,0x1c,0x1c }, { 0xf1,0x57,0xa6,0xa6 }, + { 0xc7,0x73,0xb4,0xb4 }, { 0x51,0x97,0xc6,0xc6 }, + { 0x23,0xcb,0xe8,0xe8 }, { 0x7c,0xa1,0xdd,0xdd }, + { 0x9c,0xe8,0x74,0x74 }, { 0x21,0x3e,0x1f,0x1f }, + { 0xdd,0x96,0x4b,0x4b }, { 0xdc,0x61,0xbd,0xbd }, + { 0x86,0x0d,0x8b,0x8b }, { 0x85,0x0f,0x8a,0x8a }, + { 0x90,0xe0,0x70,0x70 }, { 0x42,0x7c,0x3e,0x3e }, + { 0xc4,0x71,0xb5,0xb5 }, { 0xaa,0xcc,0x66,0x66 }, + { 0xd8,0x90,0x48,0x48 }, { 0x05,0x06,0x03,0x03 }, + { 0x01,0xf7,0xf6,0xf6 }, { 0x12,0x1c,0x0e,0x0e }, + { 0xa3,0xc2,0x61,0x61 }, { 0x5f,0x6a,0x35,0x35 }, + { 0xf9,0xae,0x57,0x57 }, { 0xd0,0x69,0xb9,0xb9 }, + { 0x91,0x17,0x86,0x86 }, { 0x58,0x99,0xc1,0xc1 }, + { 0x27,0x3a,0x1d,0x1d }, { 0xb9,0x27,0x9e,0x9e }, + { 0x38,0xd9,0xe1,0xe1 }, { 0x13,0xeb,0xf8,0xf8 }, + { 0xb3,0x2b,0x98,0x98 }, { 0x33,0x22,0x11,0x11 }, + { 0xbb,0xd2,0x69,0x69 }, { 0x70,0xa9,0xd9,0xd9 }, + { 0x89,0x07,0x8e,0x8e }, { 0xa7,0x33,0x94,0x94 }, + { 0xb6,0x2d,0x9b,0x9b }, { 0x22,0x3c,0x1e,0x1e }, + { 0x92,0x15,0x87,0x87 }, { 0x20,0xc9,0xe9,0xe9 }, + { 0x49,0x87,0xce,0xce }, { 0xff,0xaa,0x55,0x55 }, + { 0x78,0x50,0x28,0x28 }, { 0x7a,0xa5,0xdf,0xdf }, + { 0x8f,0x03,0x8c,0x8c }, { 0xf8,0x59,0xa1,0xa1 }, + { 0x80,0x09,0x89,0x89 }, { 0x17,0x1a,0x0d,0x0d }, + { 0xda,0x65,0xbf,0xbf }, { 0x31,0xd7,0xe6,0xe6 }, + { 0xc6,0x84,0x42,0x42 }, { 0xb8,0xd0,0x68,0x68 }, + { 0xc3,0x82,0x41,0x41 }, { 0xb0,0x29,0x99,0x99 }, + { 0x77,0x5a,0x2d,0x2d }, { 0x11,0x1e,0x0f,0x0f }, + { 0xcb,0x7b,0xb0,0xb0 }, { 0xfc,0xa8,0x54,0x54 }, + { 0xd6,0x6d,0xbb,0xbb }, { 0x3a,0x2c,0x16,0x16 } + }; + +static const unsigned char T3[256][4] = + { + { 0x63,0xa5,0xc6,0x63 }, { 0x7c,0x84,0xf8,0x7c }, + { 0x77,0x99,0xee,0x77 }, { 0x7b,0x8d,0xf6,0x7b }, + { 0xf2,0x0d,0xff,0xf2 }, { 0x6b,0xbd,0xd6,0x6b }, + { 0x6f,0xb1,0xde,0x6f }, { 0xc5,0x54,0x91,0xc5 }, + { 0x30,0x50,0x60,0x30 }, { 0x01,0x03,0x02,0x01 }, + { 0x67,0xa9,0xce,0x67 }, { 0x2b,0x7d,0x56,0x2b }, + { 0xfe,0x19,0xe7,0xfe }, { 0xd7,0x62,0xb5,0xd7 }, + { 0xab,0xe6,0x4d,0xab }, { 0x76,0x9a,0xec,0x76 }, + { 0xca,0x45,0x8f,0xca }, { 0x82,0x9d,0x1f,0x82 }, + { 0xc9,0x40,0x89,0xc9 }, { 0x7d,0x87,0xfa,0x7d }, + { 0xfa,0x15,0xef,0xfa }, { 0x59,0xeb,0xb2,0x59 }, + { 0x47,0xc9,0x8e,0x47 }, { 0xf0,0x0b,0xfb,0xf0 }, + { 0xad,0xec,0x41,0xad }, { 0xd4,0x67,0xb3,0xd4 }, + { 0xa2,0xfd,0x5f,0xa2 }, { 0xaf,0xea,0x45,0xaf }, + { 0x9c,0xbf,0x23,0x9c }, { 0xa4,0xf7,0x53,0xa4 }, + { 0x72,0x96,0xe4,0x72 }, { 0xc0,0x5b,0x9b,0xc0 }, + { 0xb7,0xc2,0x75,0xb7 }, { 0xfd,0x1c,0xe1,0xfd }, + { 0x93,0xae,0x3d,0x93 }, { 0x26,0x6a,0x4c,0x26 }, + { 0x36,0x5a,0x6c,0x36 }, { 0x3f,0x41,0x7e,0x3f }, + { 0xf7,0x02,0xf5,0xf7 }, { 0xcc,0x4f,0x83,0xcc }, + { 0x34,0x5c,0x68,0x34 }, { 0xa5,0xf4,0x51,0xa5 }, + { 0xe5,0x34,0xd1,0xe5 }, { 0xf1,0x08,0xf9,0xf1 }, + { 0x71,0x93,0xe2,0x71 }, { 0xd8,0x73,0xab,0xd8 }, + { 0x31,0x53,0x62,0x31 }, { 0x15,0x3f,0x2a,0x15 }, + { 0x04,0x0c,0x08,0x04 }, { 0xc7,0x52,0x95,0xc7 }, + { 0x23,0x65,0x46,0x23 }, { 0xc3,0x5e,0x9d,0xc3 }, + { 0x18,0x28,0x30,0x18 }, { 0x96,0xa1,0x37,0x96 }, + { 0x05,0x0f,0x0a,0x05 }, { 0x9a,0xb5,0x2f,0x9a }, + { 0x07,0x09,0x0e,0x07 }, { 0x12,0x36,0x24,0x12 }, + { 0x80,0x9b,0x1b,0x80 }, { 0xe2,0x3d,0xdf,0xe2 }, + { 0xeb,0x26,0xcd,0xeb }, { 0x27,0x69,0x4e,0x27 }, + { 0xb2,0xcd,0x7f,0xb2 }, { 0x75,0x9f,0xea,0x75 }, + { 0x09,0x1b,0x12,0x09 }, { 0x83,0x9e,0x1d,0x83 }, + { 0x2c,0x74,0x58,0x2c }, { 0x1a,0x2e,0x34,0x1a }, + { 0x1b,0x2d,0x36,0x1b }, { 0x6e,0xb2,0xdc,0x6e }, + { 0x5a,0xee,0xb4,0x5a }, { 0xa0,0xfb,0x5b,0xa0 }, + { 0x52,0xf6,0xa4,0x52 }, { 0x3b,0x4d,0x76,0x3b }, + { 0xd6,0x61,0xb7,0xd6 }, { 0xb3,0xce,0x7d,0xb3 }, + { 0x29,0x7b,0x52,0x29 }, { 0xe3,0x3e,0xdd,0xe3 }, + { 0x2f,0x71,0x5e,0x2f }, { 0x84,0x97,0x13,0x84 }, + { 0x53,0xf5,0xa6,0x53 }, { 0xd1,0x68,0xb9,0xd1 }, + { 0x00,0x00,0x00,0x00 }, { 0xed,0x2c,0xc1,0xed }, + { 0x20,0x60,0x40,0x20 }, { 0xfc,0x1f,0xe3,0xfc }, + { 0xb1,0xc8,0x79,0xb1 }, { 0x5b,0xed,0xb6,0x5b }, + { 0x6a,0xbe,0xd4,0x6a }, { 0xcb,0x46,0x8d,0xcb }, + { 0xbe,0xd9,0x67,0xbe }, { 0x39,0x4b,0x72,0x39 }, + { 0x4a,0xde,0x94,0x4a }, { 0x4c,0xd4,0x98,0x4c }, + { 0x58,0xe8,0xb0,0x58 }, { 0xcf,0x4a,0x85,0xcf }, + { 0xd0,0x6b,0xbb,0xd0 }, { 0xef,0x2a,0xc5,0xef }, + { 0xaa,0xe5,0x4f,0xaa }, { 0xfb,0x16,0xed,0xfb }, + { 0x43,0xc5,0x86,0x43 }, { 0x4d,0xd7,0x9a,0x4d }, + { 0x33,0x55,0x66,0x33 }, { 0x85,0x94,0x11,0x85 }, + { 0x45,0xcf,0x8a,0x45 }, { 0xf9,0x10,0xe9,0xf9 }, + { 0x02,0x06,0x04,0x02 }, { 0x7f,0x81,0xfe,0x7f }, + { 0x50,0xf0,0xa0,0x50 }, { 0x3c,0x44,0x78,0x3c }, + { 0x9f,0xba,0x25,0x9f }, { 0xa8,0xe3,0x4b,0xa8 }, + { 0x51,0xf3,0xa2,0x51 }, { 0xa3,0xfe,0x5d,0xa3 }, + { 0x40,0xc0,0x80,0x40 }, { 0x8f,0x8a,0x05,0x8f }, + { 0x92,0xad,0x3f,0x92 }, { 0x9d,0xbc,0x21,0x9d }, + { 0x38,0x48,0x70,0x38 }, { 0xf5,0x04,0xf1,0xf5 }, + { 0xbc,0xdf,0x63,0xbc }, { 0xb6,0xc1,0x77,0xb6 }, + { 0xda,0x75,0xaf,0xda }, { 0x21,0x63,0x42,0x21 }, + { 0x10,0x30,0x20,0x10 }, { 0xff,0x1a,0xe5,0xff }, + { 0xf3,0x0e,0xfd,0xf3 }, { 0xd2,0x6d,0xbf,0xd2 }, + { 0xcd,0x4c,0x81,0xcd }, { 0x0c,0x14,0x18,0x0c }, + { 0x13,0x35,0x26,0x13 }, { 0xec,0x2f,0xc3,0xec }, + { 0x5f,0xe1,0xbe,0x5f }, { 0x97,0xa2,0x35,0x97 }, + { 0x44,0xcc,0x88,0x44 }, { 0x17,0x39,0x2e,0x17 }, + { 0xc4,0x57,0x93,0xc4 }, { 0xa7,0xf2,0x55,0xa7 }, + { 0x7e,0x82,0xfc,0x7e }, { 0x3d,0x47,0x7a,0x3d }, + { 0x64,0xac,0xc8,0x64 }, { 0x5d,0xe7,0xba,0x5d }, + { 0x19,0x2b,0x32,0x19 }, { 0x73,0x95,0xe6,0x73 }, + { 0x60,0xa0,0xc0,0x60 }, { 0x81,0x98,0x19,0x81 }, + { 0x4f,0xd1,0x9e,0x4f }, { 0xdc,0x7f,0xa3,0xdc }, + { 0x22,0x66,0x44,0x22 }, { 0x2a,0x7e,0x54,0x2a }, + { 0x90,0xab,0x3b,0x90 }, { 0x88,0x83,0x0b,0x88 }, + { 0x46,0xca,0x8c,0x46 }, { 0xee,0x29,0xc7,0xee }, + { 0xb8,0xd3,0x6b,0xb8 }, { 0x14,0x3c,0x28,0x14 }, + { 0xde,0x79,0xa7,0xde }, { 0x5e,0xe2,0xbc,0x5e }, + { 0x0b,0x1d,0x16,0x0b }, { 0xdb,0x76,0xad,0xdb }, + { 0xe0,0x3b,0xdb,0xe0 }, { 0x32,0x56,0x64,0x32 }, + { 0x3a,0x4e,0x74,0x3a }, { 0x0a,0x1e,0x14,0x0a }, + { 0x49,0xdb,0x92,0x49 }, { 0x06,0x0a,0x0c,0x06 }, + { 0x24,0x6c,0x48,0x24 }, { 0x5c,0xe4,0xb8,0x5c }, + { 0xc2,0x5d,0x9f,0xc2 }, { 0xd3,0x6e,0xbd,0xd3 }, + { 0xac,0xef,0x43,0xac }, { 0x62,0xa6,0xc4,0x62 }, + { 0x91,0xa8,0x39,0x91 }, { 0x95,0xa4,0x31,0x95 }, + { 0xe4,0x37,0xd3,0xe4 }, { 0x79,0x8b,0xf2,0x79 }, + { 0xe7,0x32,0xd5,0xe7 }, { 0xc8,0x43,0x8b,0xc8 }, + { 0x37,0x59,0x6e,0x37 }, { 0x6d,0xb7,0xda,0x6d }, + { 0x8d,0x8c,0x01,0x8d }, { 0xd5,0x64,0xb1,0xd5 }, + { 0x4e,0xd2,0x9c,0x4e }, { 0xa9,0xe0,0x49,0xa9 }, + { 0x6c,0xb4,0xd8,0x6c }, { 0x56,0xfa,0xac,0x56 }, + { 0xf4,0x07,0xf3,0xf4 }, { 0xea,0x25,0xcf,0xea }, + { 0x65,0xaf,0xca,0x65 }, { 0x7a,0x8e,0xf4,0x7a }, + { 0xae,0xe9,0x47,0xae }, { 0x08,0x18,0x10,0x08 }, + { 0xba,0xd5,0x6f,0xba }, { 0x78,0x88,0xf0,0x78 }, + { 0x25,0x6f,0x4a,0x25 }, { 0x2e,0x72,0x5c,0x2e }, + { 0x1c,0x24,0x38,0x1c }, { 0xa6,0xf1,0x57,0xa6 }, + { 0xb4,0xc7,0x73,0xb4 }, { 0xc6,0x51,0x97,0xc6 }, + { 0xe8,0x23,0xcb,0xe8 }, { 0xdd,0x7c,0xa1,0xdd }, + { 0x74,0x9c,0xe8,0x74 }, { 0x1f,0x21,0x3e,0x1f }, + { 0x4b,0xdd,0x96,0x4b }, { 0xbd,0xdc,0x61,0xbd }, + { 0x8b,0x86,0x0d,0x8b }, { 0x8a,0x85,0x0f,0x8a }, + { 0x70,0x90,0xe0,0x70 }, { 0x3e,0x42,0x7c,0x3e }, + { 0xb5,0xc4,0x71,0xb5 }, { 0x66,0xaa,0xcc,0x66 }, + { 0x48,0xd8,0x90,0x48 }, { 0x03,0x05,0x06,0x03 }, + { 0xf6,0x01,0xf7,0xf6 }, { 0x0e,0x12,0x1c,0x0e }, + { 0x61,0xa3,0xc2,0x61 }, { 0x35,0x5f,0x6a,0x35 }, + { 0x57,0xf9,0xae,0x57 }, { 0xb9,0xd0,0x69,0xb9 }, + { 0x86,0x91,0x17,0x86 }, { 0xc1,0x58,0x99,0xc1 }, + { 0x1d,0x27,0x3a,0x1d }, { 0x9e,0xb9,0x27,0x9e }, + { 0xe1,0x38,0xd9,0xe1 }, { 0xf8,0x13,0xeb,0xf8 }, + { 0x98,0xb3,0x2b,0x98 }, { 0x11,0x33,0x22,0x11 }, + { 0x69,0xbb,0xd2,0x69 }, { 0xd9,0x70,0xa9,0xd9 }, + { 0x8e,0x89,0x07,0x8e }, { 0x94,0xa7,0x33,0x94 }, + { 0x9b,0xb6,0x2d,0x9b }, { 0x1e,0x22,0x3c,0x1e }, + { 0x87,0x92,0x15,0x87 }, { 0xe9,0x20,0xc9,0xe9 }, + { 0xce,0x49,0x87,0xce }, { 0x55,0xff,0xaa,0x55 }, + { 0x28,0x78,0x50,0x28 }, { 0xdf,0x7a,0xa5,0xdf }, + { 0x8c,0x8f,0x03,0x8c }, { 0xa1,0xf8,0x59,0xa1 }, + { 0x89,0x80,0x09,0x89 }, { 0x0d,0x17,0x1a,0x0d }, + { 0xbf,0xda,0x65,0xbf }, { 0xe6,0x31,0xd7,0xe6 }, + { 0x42,0xc6,0x84,0x42 }, { 0x68,0xb8,0xd0,0x68 }, + { 0x41,0xc3,0x82,0x41 }, { 0x99,0xb0,0x29,0x99 }, + { 0x2d,0x77,0x5a,0x2d }, { 0x0f,0x11,0x1e,0x0f }, + { 0xb0,0xcb,0x7b,0xb0 }, { 0x54,0xfc,0xa8,0x54 }, + { 0xbb,0xd6,0x6d,0xbb }, { 0x16,0x3a,0x2c,0x16 } + }; + +static const unsigned char T4[256][4] = + { + { 0x63,0x63,0xa5,0xc6 }, { 0x7c,0x7c,0x84,0xf8 }, + { 0x77,0x77,0x99,0xee }, { 0x7b,0x7b,0x8d,0xf6 }, + { 0xf2,0xf2,0x0d,0xff }, { 0x6b,0x6b,0xbd,0xd6 }, + { 0x6f,0x6f,0xb1,0xde }, { 0xc5,0xc5,0x54,0x91 }, + { 0x30,0x30,0x50,0x60 }, { 0x01,0x01,0x03,0x02 }, + { 0x67,0x67,0xa9,0xce }, { 0x2b,0x2b,0x7d,0x56 }, + { 0xfe,0xfe,0x19,0xe7 }, { 0xd7,0xd7,0x62,0xb5 }, + { 0xab,0xab,0xe6,0x4d }, { 0x76,0x76,0x9a,0xec }, + { 0xca,0xca,0x45,0x8f }, { 0x82,0x82,0x9d,0x1f }, + { 0xc9,0xc9,0x40,0x89 }, { 0x7d,0x7d,0x87,0xfa }, + { 0xfa,0xfa,0x15,0xef }, { 0x59,0x59,0xeb,0xb2 }, + { 0x47,0x47,0xc9,0x8e }, { 0xf0,0xf0,0x0b,0xfb }, + { 0xad,0xad,0xec,0x41 }, { 0xd4,0xd4,0x67,0xb3 }, + { 0xa2,0xa2,0xfd,0x5f }, { 0xaf,0xaf,0xea,0x45 }, + { 0x9c,0x9c,0xbf,0x23 }, { 0xa4,0xa4,0xf7,0x53 }, + { 0x72,0x72,0x96,0xe4 }, { 0xc0,0xc0,0x5b,0x9b }, + { 0xb7,0xb7,0xc2,0x75 }, { 0xfd,0xfd,0x1c,0xe1 }, + { 0x93,0x93,0xae,0x3d }, { 0x26,0x26,0x6a,0x4c }, + { 0x36,0x36,0x5a,0x6c }, { 0x3f,0x3f,0x41,0x7e }, + { 0xf7,0xf7,0x02,0xf5 }, { 0xcc,0xcc,0x4f,0x83 }, + { 0x34,0x34,0x5c,0x68 }, { 0xa5,0xa5,0xf4,0x51 }, + { 0xe5,0xe5,0x34,0xd1 }, { 0xf1,0xf1,0x08,0xf9 }, + { 0x71,0x71,0x93,0xe2 }, { 0xd8,0xd8,0x73,0xab }, + { 0x31,0x31,0x53,0x62 }, { 0x15,0x15,0x3f,0x2a }, + { 0x04,0x04,0x0c,0x08 }, { 0xc7,0xc7,0x52,0x95 }, + { 0x23,0x23,0x65,0x46 }, { 0xc3,0xc3,0x5e,0x9d }, + { 0x18,0x18,0x28,0x30 }, { 0x96,0x96,0xa1,0x37 }, + { 0x05,0x05,0x0f,0x0a }, { 0x9a,0x9a,0xb5,0x2f }, + { 0x07,0x07,0x09,0x0e }, { 0x12,0x12,0x36,0x24 }, + { 0x80,0x80,0x9b,0x1b }, { 0xe2,0xe2,0x3d,0xdf }, + { 0xeb,0xeb,0x26,0xcd }, { 0x27,0x27,0x69,0x4e }, + { 0xb2,0xb2,0xcd,0x7f }, { 0x75,0x75,0x9f,0xea }, + { 0x09,0x09,0x1b,0x12 }, { 0x83,0x83,0x9e,0x1d }, + { 0x2c,0x2c,0x74,0x58 }, { 0x1a,0x1a,0x2e,0x34 }, + { 0x1b,0x1b,0x2d,0x36 }, { 0x6e,0x6e,0xb2,0xdc }, + { 0x5a,0x5a,0xee,0xb4 }, { 0xa0,0xa0,0xfb,0x5b }, + { 0x52,0x52,0xf6,0xa4 }, { 0x3b,0x3b,0x4d,0x76 }, + { 0xd6,0xd6,0x61,0xb7 }, { 0xb3,0xb3,0xce,0x7d }, + { 0x29,0x29,0x7b,0x52 }, { 0xe3,0xe3,0x3e,0xdd }, + { 0x2f,0x2f,0x71,0x5e }, { 0x84,0x84,0x97,0x13 }, + { 0x53,0x53,0xf5,0xa6 }, { 0xd1,0xd1,0x68,0xb9 }, + { 0x00,0x00,0x00,0x00 }, { 0xed,0xed,0x2c,0xc1 }, + { 0x20,0x20,0x60,0x40 }, { 0xfc,0xfc,0x1f,0xe3 }, + { 0xb1,0xb1,0xc8,0x79 }, { 0x5b,0x5b,0xed,0xb6 }, + { 0x6a,0x6a,0xbe,0xd4 }, { 0xcb,0xcb,0x46,0x8d }, + { 0xbe,0xbe,0xd9,0x67 }, { 0x39,0x39,0x4b,0x72 }, + { 0x4a,0x4a,0xde,0x94 }, { 0x4c,0x4c,0xd4,0x98 }, + { 0x58,0x58,0xe8,0xb0 }, { 0xcf,0xcf,0x4a,0x85 }, + { 0xd0,0xd0,0x6b,0xbb }, { 0xef,0xef,0x2a,0xc5 }, + { 0xaa,0xaa,0xe5,0x4f }, { 0xfb,0xfb,0x16,0xed }, + { 0x43,0x43,0xc5,0x86 }, { 0x4d,0x4d,0xd7,0x9a }, + { 0x33,0x33,0x55,0x66 }, { 0x85,0x85,0x94,0x11 }, + { 0x45,0x45,0xcf,0x8a }, { 0xf9,0xf9,0x10,0xe9 }, + { 0x02,0x02,0x06,0x04 }, { 0x7f,0x7f,0x81,0xfe }, + { 0x50,0x50,0xf0,0xa0 }, { 0x3c,0x3c,0x44,0x78 }, + { 0x9f,0x9f,0xba,0x25 }, { 0xa8,0xa8,0xe3,0x4b }, + { 0x51,0x51,0xf3,0xa2 }, { 0xa3,0xa3,0xfe,0x5d }, + { 0x40,0x40,0xc0,0x80 }, { 0x8f,0x8f,0x8a,0x05 }, + { 0x92,0x92,0xad,0x3f }, { 0x9d,0x9d,0xbc,0x21 }, + { 0x38,0x38,0x48,0x70 }, { 0xf5,0xf5,0x04,0xf1 }, + { 0xbc,0xbc,0xdf,0x63 }, { 0xb6,0xb6,0xc1,0x77 }, + { 0xda,0xda,0x75,0xaf }, { 0x21,0x21,0x63,0x42 }, + { 0x10,0x10,0x30,0x20 }, { 0xff,0xff,0x1a,0xe5 }, + { 0xf3,0xf3,0x0e,0xfd }, { 0xd2,0xd2,0x6d,0xbf }, + { 0xcd,0xcd,0x4c,0x81 }, { 0x0c,0x0c,0x14,0x18 }, + { 0x13,0x13,0x35,0x26 }, { 0xec,0xec,0x2f,0xc3 }, + { 0x5f,0x5f,0xe1,0xbe }, { 0x97,0x97,0xa2,0x35 }, + { 0x44,0x44,0xcc,0x88 }, { 0x17,0x17,0x39,0x2e }, + { 0xc4,0xc4,0x57,0x93 }, { 0xa7,0xa7,0xf2,0x55 }, + { 0x7e,0x7e,0x82,0xfc }, { 0x3d,0x3d,0x47,0x7a }, + { 0x64,0x64,0xac,0xc8 }, { 0x5d,0x5d,0xe7,0xba }, + { 0x19,0x19,0x2b,0x32 }, { 0x73,0x73,0x95,0xe6 }, + { 0x60,0x60,0xa0,0xc0 }, { 0x81,0x81,0x98,0x19 }, + { 0x4f,0x4f,0xd1,0x9e }, { 0xdc,0xdc,0x7f,0xa3 }, + { 0x22,0x22,0x66,0x44 }, { 0x2a,0x2a,0x7e,0x54 }, + { 0x90,0x90,0xab,0x3b }, { 0x88,0x88,0x83,0x0b }, + { 0x46,0x46,0xca,0x8c }, { 0xee,0xee,0x29,0xc7 }, + { 0xb8,0xb8,0xd3,0x6b }, { 0x14,0x14,0x3c,0x28 }, + { 0xde,0xde,0x79,0xa7 }, { 0x5e,0x5e,0xe2,0xbc }, + { 0x0b,0x0b,0x1d,0x16 }, { 0xdb,0xdb,0x76,0xad }, + { 0xe0,0xe0,0x3b,0xdb }, { 0x32,0x32,0x56,0x64 }, + { 0x3a,0x3a,0x4e,0x74 }, { 0x0a,0x0a,0x1e,0x14 }, + { 0x49,0x49,0xdb,0x92 }, { 0x06,0x06,0x0a,0x0c }, + { 0x24,0x24,0x6c,0x48 }, { 0x5c,0x5c,0xe4,0xb8 }, + { 0xc2,0xc2,0x5d,0x9f }, { 0xd3,0xd3,0x6e,0xbd }, + { 0xac,0xac,0xef,0x43 }, { 0x62,0x62,0xa6,0xc4 }, + { 0x91,0x91,0xa8,0x39 }, { 0x95,0x95,0xa4,0x31 }, + { 0xe4,0xe4,0x37,0xd3 }, { 0x79,0x79,0x8b,0xf2 }, + { 0xe7,0xe7,0x32,0xd5 }, { 0xc8,0xc8,0x43,0x8b }, + { 0x37,0x37,0x59,0x6e }, { 0x6d,0x6d,0xb7,0xda }, + { 0x8d,0x8d,0x8c,0x01 }, { 0xd5,0xd5,0x64,0xb1 }, + { 0x4e,0x4e,0xd2,0x9c }, { 0xa9,0xa9,0xe0,0x49 }, + { 0x6c,0x6c,0xb4,0xd8 }, { 0x56,0x56,0xfa,0xac }, + { 0xf4,0xf4,0x07,0xf3 }, { 0xea,0xea,0x25,0xcf }, + { 0x65,0x65,0xaf,0xca }, { 0x7a,0x7a,0x8e,0xf4 }, + { 0xae,0xae,0xe9,0x47 }, { 0x08,0x08,0x18,0x10 }, + { 0xba,0xba,0xd5,0x6f }, { 0x78,0x78,0x88,0xf0 }, + { 0x25,0x25,0x6f,0x4a }, { 0x2e,0x2e,0x72,0x5c }, + { 0x1c,0x1c,0x24,0x38 }, { 0xa6,0xa6,0xf1,0x57 }, + { 0xb4,0xb4,0xc7,0x73 }, { 0xc6,0xc6,0x51,0x97 }, + { 0xe8,0xe8,0x23,0xcb }, { 0xdd,0xdd,0x7c,0xa1 }, + { 0x74,0x74,0x9c,0xe8 }, { 0x1f,0x1f,0x21,0x3e }, + { 0x4b,0x4b,0xdd,0x96 }, { 0xbd,0xbd,0xdc,0x61 }, + { 0x8b,0x8b,0x86,0x0d }, { 0x8a,0x8a,0x85,0x0f }, + { 0x70,0x70,0x90,0xe0 }, { 0x3e,0x3e,0x42,0x7c }, + { 0xb5,0xb5,0xc4,0x71 }, { 0x66,0x66,0xaa,0xcc }, + { 0x48,0x48,0xd8,0x90 }, { 0x03,0x03,0x05,0x06 }, + { 0xf6,0xf6,0x01,0xf7 }, { 0x0e,0x0e,0x12,0x1c }, + { 0x61,0x61,0xa3,0xc2 }, { 0x35,0x35,0x5f,0x6a }, + { 0x57,0x57,0xf9,0xae }, { 0xb9,0xb9,0xd0,0x69 }, + { 0x86,0x86,0x91,0x17 }, { 0xc1,0xc1,0x58,0x99 }, + { 0x1d,0x1d,0x27,0x3a }, { 0x9e,0x9e,0xb9,0x27 }, + { 0xe1,0xe1,0x38,0xd9 }, { 0xf8,0xf8,0x13,0xeb }, + { 0x98,0x98,0xb3,0x2b }, { 0x11,0x11,0x33,0x22 }, + { 0x69,0x69,0xbb,0xd2 }, { 0xd9,0xd9,0x70,0xa9 }, + { 0x8e,0x8e,0x89,0x07 }, { 0x94,0x94,0xa7,0x33 }, + { 0x9b,0x9b,0xb6,0x2d }, { 0x1e,0x1e,0x22,0x3c }, + { 0x87,0x87,0x92,0x15 }, { 0xe9,0xe9,0x20,0xc9 }, + { 0xce,0xce,0x49,0x87 }, { 0x55,0x55,0xff,0xaa }, + { 0x28,0x28,0x78,0x50 }, { 0xdf,0xdf,0x7a,0xa5 }, + { 0x8c,0x8c,0x8f,0x03 }, { 0xa1,0xa1,0xf8,0x59 }, + { 0x89,0x89,0x80,0x09 }, { 0x0d,0x0d,0x17,0x1a }, + { 0xbf,0xbf,0xda,0x65 }, { 0xe6,0xe6,0x31,0xd7 }, + { 0x42,0x42,0xc6,0x84 }, { 0x68,0x68,0xb8,0xd0 }, + { 0x41,0x41,0xc3,0x82 }, { 0x99,0x99,0xb0,0x29 }, + { 0x2d,0x2d,0x77,0x5a }, { 0x0f,0x0f,0x11,0x1e }, + { 0xb0,0xb0,0xcb,0x7b }, { 0x54,0x54,0xfc,0xa8 }, + { 0xbb,0xbb,0xd6,0x6d }, { 0x16,0x16,0x3a,0x2c } + }; + +static const unsigned char T5[256][4] = + { + { 0x51,0xf4,0xa7,0x50 }, { 0x7e,0x41,0x65,0x53 }, + { 0x1a,0x17,0xa4,0xc3 }, { 0x3a,0x27,0x5e,0x96 }, + { 0x3b,0xab,0x6b,0xcb }, { 0x1f,0x9d,0x45,0xf1 }, + { 0xac,0xfa,0x58,0xab }, { 0x4b,0xe3,0x03,0x93 }, + { 0x20,0x30,0xfa,0x55 }, { 0xad,0x76,0x6d,0xf6 }, + { 0x88,0xcc,0x76,0x91 }, { 0xf5,0x02,0x4c,0x25 }, + { 0x4f,0xe5,0xd7,0xfc }, { 0xc5,0x2a,0xcb,0xd7 }, + { 0x26,0x35,0x44,0x80 }, { 0xb5,0x62,0xa3,0x8f }, + { 0xde,0xb1,0x5a,0x49 }, { 0x25,0xba,0x1b,0x67 }, + { 0x45,0xea,0x0e,0x98 }, { 0x5d,0xfe,0xc0,0xe1 }, + { 0xc3,0x2f,0x75,0x02 }, { 0x81,0x4c,0xf0,0x12 }, + { 0x8d,0x46,0x97,0xa3 }, { 0x6b,0xd3,0xf9,0xc6 }, + { 0x03,0x8f,0x5f,0xe7 }, { 0x15,0x92,0x9c,0x95 }, + { 0xbf,0x6d,0x7a,0xeb }, { 0x95,0x52,0x59,0xda }, + { 0xd4,0xbe,0x83,0x2d }, { 0x58,0x74,0x21,0xd3 }, + { 0x49,0xe0,0x69,0x29 }, { 0x8e,0xc9,0xc8,0x44 }, + { 0x75,0xc2,0x89,0x6a }, { 0xf4,0x8e,0x79,0x78 }, + { 0x99,0x58,0x3e,0x6b }, { 0x27,0xb9,0x71,0xdd }, + { 0xbe,0xe1,0x4f,0xb6 }, { 0xf0,0x88,0xad,0x17 }, + { 0xc9,0x20,0xac,0x66 }, { 0x7d,0xce,0x3a,0xb4 }, + { 0x63,0xdf,0x4a,0x18 }, { 0xe5,0x1a,0x31,0x82 }, + { 0x97,0x51,0x33,0x60 }, { 0x62,0x53,0x7f,0x45 }, + { 0xb1,0x64,0x77,0xe0 }, { 0xbb,0x6b,0xae,0x84 }, + { 0xfe,0x81,0xa0,0x1c }, { 0xf9,0x08,0x2b,0x94 }, + { 0x70,0x48,0x68,0x58 }, { 0x8f,0x45,0xfd,0x19 }, + { 0x94,0xde,0x6c,0x87 }, { 0x52,0x7b,0xf8,0xb7 }, + { 0xab,0x73,0xd3,0x23 }, { 0x72,0x4b,0x02,0xe2 }, + { 0xe3,0x1f,0x8f,0x57 }, { 0x66,0x55,0xab,0x2a }, + { 0xb2,0xeb,0x28,0x07 }, { 0x2f,0xb5,0xc2,0x03 }, + { 0x86,0xc5,0x7b,0x9a }, { 0xd3,0x37,0x08,0xa5 }, + { 0x30,0x28,0x87,0xf2 }, { 0x23,0xbf,0xa5,0xb2 }, + { 0x02,0x03,0x6a,0xba }, { 0xed,0x16,0x82,0x5c }, + { 0x8a,0xcf,0x1c,0x2b }, { 0xa7,0x79,0xb4,0x92 }, + { 0xf3,0x07,0xf2,0xf0 }, { 0x4e,0x69,0xe2,0xa1 }, + { 0x65,0xda,0xf4,0xcd }, { 0x06,0x05,0xbe,0xd5 }, + { 0xd1,0x34,0x62,0x1f }, { 0xc4,0xa6,0xfe,0x8a }, + { 0x34,0x2e,0x53,0x9d }, { 0xa2,0xf3,0x55,0xa0 }, + { 0x05,0x8a,0xe1,0x32 }, { 0xa4,0xf6,0xeb,0x75 }, + { 0x0b,0x83,0xec,0x39 }, { 0x40,0x60,0xef,0xaa }, + { 0x5e,0x71,0x9f,0x06 }, { 0xbd,0x6e,0x10,0x51 }, + { 0x3e,0x21,0x8a,0xf9 }, { 0x96,0xdd,0x06,0x3d }, + { 0xdd,0x3e,0x05,0xae }, { 0x4d,0xe6,0xbd,0x46 }, + { 0x91,0x54,0x8d,0xb5 }, { 0x71,0xc4,0x5d,0x05 }, + { 0x04,0x06,0xd4,0x6f }, { 0x60,0x50,0x15,0xff }, + { 0x19,0x98,0xfb,0x24 }, { 0xd6,0xbd,0xe9,0x97 }, + { 0x89,0x40,0x43,0xcc }, { 0x67,0xd9,0x9e,0x77 }, + { 0xb0,0xe8,0x42,0xbd }, { 0x07,0x89,0x8b,0x88 }, + { 0xe7,0x19,0x5b,0x38 }, { 0x79,0xc8,0xee,0xdb }, + { 0xa1,0x7c,0x0a,0x47 }, { 0x7c,0x42,0x0f,0xe9 }, + { 0xf8,0x84,0x1e,0xc9 }, { 0x00,0x00,0x00,0x00 }, + { 0x09,0x80,0x86,0x83 }, { 0x32,0x2b,0xed,0x48 }, + { 0x1e,0x11,0x70,0xac }, { 0x6c,0x5a,0x72,0x4e }, + { 0xfd,0x0e,0xff,0xfb }, { 0x0f,0x85,0x38,0x56 }, + { 0x3d,0xae,0xd5,0x1e }, { 0x36,0x2d,0x39,0x27 }, + { 0x0a,0x0f,0xd9,0x64 }, { 0x68,0x5c,0xa6,0x21 }, + { 0x9b,0x5b,0x54,0xd1 }, { 0x24,0x36,0x2e,0x3a }, + { 0x0c,0x0a,0x67,0xb1 }, { 0x93,0x57,0xe7,0x0f }, + { 0xb4,0xee,0x96,0xd2 }, { 0x1b,0x9b,0x91,0x9e }, + { 0x80,0xc0,0xc5,0x4f }, { 0x61,0xdc,0x20,0xa2 }, + { 0x5a,0x77,0x4b,0x69 }, { 0x1c,0x12,0x1a,0x16 }, + { 0xe2,0x93,0xba,0x0a }, { 0xc0,0xa0,0x2a,0xe5 }, + { 0x3c,0x22,0xe0,0x43 }, { 0x12,0x1b,0x17,0x1d }, + { 0x0e,0x09,0x0d,0x0b }, { 0xf2,0x8b,0xc7,0xad }, + { 0x2d,0xb6,0xa8,0xb9 }, { 0x14,0x1e,0xa9,0xc8 }, + { 0x57,0xf1,0x19,0x85 }, { 0xaf,0x75,0x07,0x4c }, + { 0xee,0x99,0xdd,0xbb }, { 0xa3,0x7f,0x60,0xfd }, + { 0xf7,0x01,0x26,0x9f }, { 0x5c,0x72,0xf5,0xbc }, + { 0x44,0x66,0x3b,0xc5 }, { 0x5b,0xfb,0x7e,0x34 }, + { 0x8b,0x43,0x29,0x76 }, { 0xcb,0x23,0xc6,0xdc }, + { 0xb6,0xed,0xfc,0x68 }, { 0xb8,0xe4,0xf1,0x63 }, + { 0xd7,0x31,0xdc,0xca }, { 0x42,0x63,0x85,0x10 }, + { 0x13,0x97,0x22,0x40 }, { 0x84,0xc6,0x11,0x20 }, + { 0x85,0x4a,0x24,0x7d }, { 0xd2,0xbb,0x3d,0xf8 }, + { 0xae,0xf9,0x32,0x11 }, { 0xc7,0x29,0xa1,0x6d }, + { 0x1d,0x9e,0x2f,0x4b }, { 0xdc,0xb2,0x30,0xf3 }, + { 0x0d,0x86,0x52,0xec }, { 0x77,0xc1,0xe3,0xd0 }, + { 0x2b,0xb3,0x16,0x6c }, { 0xa9,0x70,0xb9,0x99 }, + { 0x11,0x94,0x48,0xfa }, { 0x47,0xe9,0x64,0x22 }, + { 0xa8,0xfc,0x8c,0xc4 }, { 0xa0,0xf0,0x3f,0x1a }, + { 0x56,0x7d,0x2c,0xd8 }, { 0x22,0x33,0x90,0xef }, + { 0x87,0x49,0x4e,0xc7 }, { 0xd9,0x38,0xd1,0xc1 }, + { 0x8c,0xca,0xa2,0xfe }, { 0x98,0xd4,0x0b,0x36 }, + { 0xa6,0xf5,0x81,0xcf }, { 0xa5,0x7a,0xde,0x28 }, + { 0xda,0xb7,0x8e,0x26 }, { 0x3f,0xad,0xbf,0xa4 }, + { 0x2c,0x3a,0x9d,0xe4 }, { 0x50,0x78,0x92,0x0d }, + { 0x6a,0x5f,0xcc,0x9b }, { 0x54,0x7e,0x46,0x62 }, + { 0xf6,0x8d,0x13,0xc2 }, { 0x90,0xd8,0xb8,0xe8 }, + { 0x2e,0x39,0xf7,0x5e }, { 0x82,0xc3,0xaf,0xf5 }, + { 0x9f,0x5d,0x80,0xbe }, { 0x69,0xd0,0x93,0x7c }, + { 0x6f,0xd5,0x2d,0xa9 }, { 0xcf,0x25,0x12,0xb3 }, + { 0xc8,0xac,0x99,0x3b }, { 0x10,0x18,0x7d,0xa7 }, + { 0xe8,0x9c,0x63,0x6e }, { 0xdb,0x3b,0xbb,0x7b }, + { 0xcd,0x26,0x78,0x09 }, { 0x6e,0x59,0x18,0xf4 }, + { 0xec,0x9a,0xb7,0x01 }, { 0x83,0x4f,0x9a,0xa8 }, + { 0xe6,0x95,0x6e,0x65 }, { 0xaa,0xff,0xe6,0x7e }, + { 0x21,0xbc,0xcf,0x08 }, { 0xef,0x15,0xe8,0xe6 }, + { 0xba,0xe7,0x9b,0xd9 }, { 0x4a,0x6f,0x36,0xce }, + { 0xea,0x9f,0x09,0xd4 }, { 0x29,0xb0,0x7c,0xd6 }, + { 0x31,0xa4,0xb2,0xaf }, { 0x2a,0x3f,0x23,0x31 }, + { 0xc6,0xa5,0x94,0x30 }, { 0x35,0xa2,0x66,0xc0 }, + { 0x74,0x4e,0xbc,0x37 }, { 0xfc,0x82,0xca,0xa6 }, + { 0xe0,0x90,0xd0,0xb0 }, { 0x33,0xa7,0xd8,0x15 }, + { 0xf1,0x04,0x98,0x4a }, { 0x41,0xec,0xda,0xf7 }, + { 0x7f,0xcd,0x50,0x0e }, { 0x17,0x91,0xf6,0x2f }, + { 0x76,0x4d,0xd6,0x8d }, { 0x43,0xef,0xb0,0x4d }, + { 0xcc,0xaa,0x4d,0x54 }, { 0xe4,0x96,0x04,0xdf }, + { 0x9e,0xd1,0xb5,0xe3 }, { 0x4c,0x6a,0x88,0x1b }, + { 0xc1,0x2c,0x1f,0xb8 }, { 0x46,0x65,0x51,0x7f }, + { 0x9d,0x5e,0xea,0x04 }, { 0x01,0x8c,0x35,0x5d }, + { 0xfa,0x87,0x74,0x73 }, { 0xfb,0x0b,0x41,0x2e }, + { 0xb3,0x67,0x1d,0x5a }, { 0x92,0xdb,0xd2,0x52 }, + { 0xe9,0x10,0x56,0x33 }, { 0x6d,0xd6,0x47,0x13 }, + { 0x9a,0xd7,0x61,0x8c }, { 0x37,0xa1,0x0c,0x7a }, + { 0x59,0xf8,0x14,0x8e }, { 0xeb,0x13,0x3c,0x89 }, + { 0xce,0xa9,0x27,0xee }, { 0xb7,0x61,0xc9,0x35 }, + { 0xe1,0x1c,0xe5,0xed }, { 0x7a,0x47,0xb1,0x3c }, + { 0x9c,0xd2,0xdf,0x59 }, { 0x55,0xf2,0x73,0x3f }, + { 0x18,0x14,0xce,0x79 }, { 0x73,0xc7,0x37,0xbf }, + { 0x53,0xf7,0xcd,0xea }, { 0x5f,0xfd,0xaa,0x5b }, + { 0xdf,0x3d,0x6f,0x14 }, { 0x78,0x44,0xdb,0x86 }, + { 0xca,0xaf,0xf3,0x81 }, { 0xb9,0x68,0xc4,0x3e }, + { 0x38,0x24,0x34,0x2c }, { 0xc2,0xa3,0x40,0x5f }, + { 0x16,0x1d,0xc3,0x72 }, { 0xbc,0xe2,0x25,0x0c }, + { 0x28,0x3c,0x49,0x8b }, { 0xff,0x0d,0x95,0x41 }, + { 0x39,0xa8,0x01,0x71 }, { 0x08,0x0c,0xb3,0xde }, + { 0xd8,0xb4,0xe4,0x9c }, { 0x64,0x56,0xc1,0x90 }, + { 0x7b,0xcb,0x84,0x61 }, { 0xd5,0x32,0xb6,0x70 }, + { 0x48,0x6c,0x5c,0x74 }, { 0xd0,0xb8,0x57,0x42 } + }; + +static const unsigned char T6[256][4] = + { + { 0x50,0x51,0xf4,0xa7 }, { 0x53,0x7e,0x41,0x65 }, + { 0xc3,0x1a,0x17,0xa4 }, { 0x96,0x3a,0x27,0x5e }, + { 0xcb,0x3b,0xab,0x6b }, { 0xf1,0x1f,0x9d,0x45 }, + { 0xab,0xac,0xfa,0x58 }, { 0x93,0x4b,0xe3,0x03 }, + { 0x55,0x20,0x30,0xfa }, { 0xf6,0xad,0x76,0x6d }, + { 0x91,0x88,0xcc,0x76 }, { 0x25,0xf5,0x02,0x4c }, + { 0xfc,0x4f,0xe5,0xd7 }, { 0xd7,0xc5,0x2a,0xcb }, + { 0x80,0x26,0x35,0x44 }, { 0x8f,0xb5,0x62,0xa3 }, + { 0x49,0xde,0xb1,0x5a }, { 0x67,0x25,0xba,0x1b }, + { 0x98,0x45,0xea,0x0e }, { 0xe1,0x5d,0xfe,0xc0 }, + { 0x02,0xc3,0x2f,0x75 }, { 0x12,0x81,0x4c,0xf0 }, + { 0xa3,0x8d,0x46,0x97 }, { 0xc6,0x6b,0xd3,0xf9 }, + { 0xe7,0x03,0x8f,0x5f }, { 0x95,0x15,0x92,0x9c }, + { 0xeb,0xbf,0x6d,0x7a }, { 0xda,0x95,0x52,0x59 }, + { 0x2d,0xd4,0xbe,0x83 }, { 0xd3,0x58,0x74,0x21 }, + { 0x29,0x49,0xe0,0x69 }, { 0x44,0x8e,0xc9,0xc8 }, + { 0x6a,0x75,0xc2,0x89 }, { 0x78,0xf4,0x8e,0x79 }, + { 0x6b,0x99,0x58,0x3e }, { 0xdd,0x27,0xb9,0x71 }, + { 0xb6,0xbe,0xe1,0x4f }, { 0x17,0xf0,0x88,0xad }, + { 0x66,0xc9,0x20,0xac }, { 0xb4,0x7d,0xce,0x3a }, + { 0x18,0x63,0xdf,0x4a }, { 0x82,0xe5,0x1a,0x31 }, + { 0x60,0x97,0x51,0x33 }, { 0x45,0x62,0x53,0x7f }, + { 0xe0,0xb1,0x64,0x77 }, { 0x84,0xbb,0x6b,0xae }, + { 0x1c,0xfe,0x81,0xa0 }, { 0x94,0xf9,0x08,0x2b }, + { 0x58,0x70,0x48,0x68 }, { 0x19,0x8f,0x45,0xfd }, + { 0x87,0x94,0xde,0x6c }, { 0xb7,0x52,0x7b,0xf8 }, + { 0x23,0xab,0x73,0xd3 }, { 0xe2,0x72,0x4b,0x02 }, + { 0x57,0xe3,0x1f,0x8f }, { 0x2a,0x66,0x55,0xab }, + { 0x07,0xb2,0xeb,0x28 }, { 0x03,0x2f,0xb5,0xc2 }, + { 0x9a,0x86,0xc5,0x7b }, { 0xa5,0xd3,0x37,0x08 }, + { 0xf2,0x30,0x28,0x87 }, { 0xb2,0x23,0xbf,0xa5 }, + { 0xba,0x02,0x03,0x6a }, { 0x5c,0xed,0x16,0x82 }, + { 0x2b,0x8a,0xcf,0x1c }, { 0x92,0xa7,0x79,0xb4 }, + { 0xf0,0xf3,0x07,0xf2 }, { 0xa1,0x4e,0x69,0xe2 }, + { 0xcd,0x65,0xda,0xf4 }, { 0xd5,0x06,0x05,0xbe }, + { 0x1f,0xd1,0x34,0x62 }, { 0x8a,0xc4,0xa6,0xfe }, + { 0x9d,0x34,0x2e,0x53 }, { 0xa0,0xa2,0xf3,0x55 }, + { 0x32,0x05,0x8a,0xe1 }, { 0x75,0xa4,0xf6,0xeb }, + { 0x39,0x0b,0x83,0xec }, { 0xaa,0x40,0x60,0xef }, + { 0x06,0x5e,0x71,0x9f }, { 0x51,0xbd,0x6e,0x10 }, + { 0xf9,0x3e,0x21,0x8a }, { 0x3d,0x96,0xdd,0x06 }, + { 0xae,0xdd,0x3e,0x05 }, { 0x46,0x4d,0xe6,0xbd }, + { 0xb5,0x91,0x54,0x8d }, { 0x05,0x71,0xc4,0x5d }, + { 0x6f,0x04,0x06,0xd4 }, { 0xff,0x60,0x50,0x15 }, + { 0x24,0x19,0x98,0xfb }, { 0x97,0xd6,0xbd,0xe9 }, + { 0xcc,0x89,0x40,0x43 }, { 0x77,0x67,0xd9,0x9e }, + { 0xbd,0xb0,0xe8,0x42 }, { 0x88,0x07,0x89,0x8b }, + { 0x38,0xe7,0x19,0x5b }, { 0xdb,0x79,0xc8,0xee }, + { 0x47,0xa1,0x7c,0x0a }, { 0xe9,0x7c,0x42,0x0f }, + { 0xc9,0xf8,0x84,0x1e }, { 0x00,0x00,0x00,0x00 }, + { 0x83,0x09,0x80,0x86 }, { 0x48,0x32,0x2b,0xed }, + { 0xac,0x1e,0x11,0x70 }, { 0x4e,0x6c,0x5a,0x72 }, + { 0xfb,0xfd,0x0e,0xff }, { 0x56,0x0f,0x85,0x38 }, + { 0x1e,0x3d,0xae,0xd5 }, { 0x27,0x36,0x2d,0x39 }, + { 0x64,0x0a,0x0f,0xd9 }, { 0x21,0x68,0x5c,0xa6 }, + { 0xd1,0x9b,0x5b,0x54 }, { 0x3a,0x24,0x36,0x2e }, + { 0xb1,0x0c,0x0a,0x67 }, { 0x0f,0x93,0x57,0xe7 }, + { 0xd2,0xb4,0xee,0x96 }, { 0x9e,0x1b,0x9b,0x91 }, + { 0x4f,0x80,0xc0,0xc5 }, { 0xa2,0x61,0xdc,0x20 }, + { 0x69,0x5a,0x77,0x4b }, { 0x16,0x1c,0x12,0x1a }, + { 0x0a,0xe2,0x93,0xba }, { 0xe5,0xc0,0xa0,0x2a }, + { 0x43,0x3c,0x22,0xe0 }, { 0x1d,0x12,0x1b,0x17 }, + { 0x0b,0x0e,0x09,0x0d }, { 0xad,0xf2,0x8b,0xc7 }, + { 0xb9,0x2d,0xb6,0xa8 }, { 0xc8,0x14,0x1e,0xa9 }, + { 0x85,0x57,0xf1,0x19 }, { 0x4c,0xaf,0x75,0x07 }, + { 0xbb,0xee,0x99,0xdd }, { 0xfd,0xa3,0x7f,0x60 }, + { 0x9f,0xf7,0x01,0x26 }, { 0xbc,0x5c,0x72,0xf5 }, + { 0xc5,0x44,0x66,0x3b }, { 0x34,0x5b,0xfb,0x7e }, + { 0x76,0x8b,0x43,0x29 }, { 0xdc,0xcb,0x23,0xc6 }, + { 0x68,0xb6,0xed,0xfc }, { 0x63,0xb8,0xe4,0xf1 }, + { 0xca,0xd7,0x31,0xdc }, { 0x10,0x42,0x63,0x85 }, + { 0x40,0x13,0x97,0x22 }, { 0x20,0x84,0xc6,0x11 }, + { 0x7d,0x85,0x4a,0x24 }, { 0xf8,0xd2,0xbb,0x3d }, + { 0x11,0xae,0xf9,0x32 }, { 0x6d,0xc7,0x29,0xa1 }, + { 0x4b,0x1d,0x9e,0x2f }, { 0xf3,0xdc,0xb2,0x30 }, + { 0xec,0x0d,0x86,0x52 }, { 0xd0,0x77,0xc1,0xe3 }, + { 0x6c,0x2b,0xb3,0x16 }, { 0x99,0xa9,0x70,0xb9 }, + { 0xfa,0x11,0x94,0x48 }, { 0x22,0x47,0xe9,0x64 }, + { 0xc4,0xa8,0xfc,0x8c }, { 0x1a,0xa0,0xf0,0x3f }, + { 0xd8,0x56,0x7d,0x2c }, { 0xef,0x22,0x33,0x90 }, + { 0xc7,0x87,0x49,0x4e }, { 0xc1,0xd9,0x38,0xd1 }, + { 0xfe,0x8c,0xca,0xa2 }, { 0x36,0x98,0xd4,0x0b }, + { 0xcf,0xa6,0xf5,0x81 }, { 0x28,0xa5,0x7a,0xde }, + { 0x26,0xda,0xb7,0x8e }, { 0xa4,0x3f,0xad,0xbf }, + { 0xe4,0x2c,0x3a,0x9d }, { 0x0d,0x50,0x78,0x92 }, + { 0x9b,0x6a,0x5f,0xcc }, { 0x62,0x54,0x7e,0x46 }, + { 0xc2,0xf6,0x8d,0x13 }, { 0xe8,0x90,0xd8,0xb8 }, + { 0x5e,0x2e,0x39,0xf7 }, { 0xf5,0x82,0xc3,0xaf }, + { 0xbe,0x9f,0x5d,0x80 }, { 0x7c,0x69,0xd0,0x93 }, + { 0xa9,0x6f,0xd5,0x2d }, { 0xb3,0xcf,0x25,0x12 }, + { 0x3b,0xc8,0xac,0x99 }, { 0xa7,0x10,0x18,0x7d }, + { 0x6e,0xe8,0x9c,0x63 }, { 0x7b,0xdb,0x3b,0xbb }, + { 0x09,0xcd,0x26,0x78 }, { 0xf4,0x6e,0x59,0x18 }, + { 0x01,0xec,0x9a,0xb7 }, { 0xa8,0x83,0x4f,0x9a }, + { 0x65,0xe6,0x95,0x6e }, { 0x7e,0xaa,0xff,0xe6 }, + { 0x08,0x21,0xbc,0xcf }, { 0xe6,0xef,0x15,0xe8 }, + { 0xd9,0xba,0xe7,0x9b }, { 0xce,0x4a,0x6f,0x36 }, + { 0xd4,0xea,0x9f,0x09 }, { 0xd6,0x29,0xb0,0x7c }, + { 0xaf,0x31,0xa4,0xb2 }, { 0x31,0x2a,0x3f,0x23 }, + { 0x30,0xc6,0xa5,0x94 }, { 0xc0,0x35,0xa2,0x66 }, + { 0x37,0x74,0x4e,0xbc }, { 0xa6,0xfc,0x82,0xca }, + { 0xb0,0xe0,0x90,0xd0 }, { 0x15,0x33,0xa7,0xd8 }, + { 0x4a,0xf1,0x04,0x98 }, { 0xf7,0x41,0xec,0xda }, + { 0x0e,0x7f,0xcd,0x50 }, { 0x2f,0x17,0x91,0xf6 }, + { 0x8d,0x76,0x4d,0xd6 }, { 0x4d,0x43,0xef,0xb0 }, + { 0x54,0xcc,0xaa,0x4d }, { 0xdf,0xe4,0x96,0x04 }, + { 0xe3,0x9e,0xd1,0xb5 }, { 0x1b,0x4c,0x6a,0x88 }, + { 0xb8,0xc1,0x2c,0x1f }, { 0x7f,0x46,0x65,0x51 }, + { 0x04,0x9d,0x5e,0xea }, { 0x5d,0x01,0x8c,0x35 }, + { 0x73,0xfa,0x87,0x74 }, { 0x2e,0xfb,0x0b,0x41 }, + { 0x5a,0xb3,0x67,0x1d }, { 0x52,0x92,0xdb,0xd2 }, + { 0x33,0xe9,0x10,0x56 }, { 0x13,0x6d,0xd6,0x47 }, + { 0x8c,0x9a,0xd7,0x61 }, { 0x7a,0x37,0xa1,0x0c }, + { 0x8e,0x59,0xf8,0x14 }, { 0x89,0xeb,0x13,0x3c }, + { 0xee,0xce,0xa9,0x27 }, { 0x35,0xb7,0x61,0xc9 }, + { 0xed,0xe1,0x1c,0xe5 }, { 0x3c,0x7a,0x47,0xb1 }, + { 0x59,0x9c,0xd2,0xdf }, { 0x3f,0x55,0xf2,0x73 }, + { 0x79,0x18,0x14,0xce }, { 0xbf,0x73,0xc7,0x37 }, + { 0xea,0x53,0xf7,0xcd }, { 0x5b,0x5f,0xfd,0xaa }, + { 0x14,0xdf,0x3d,0x6f }, { 0x86,0x78,0x44,0xdb }, + { 0x81,0xca,0xaf,0xf3 }, { 0x3e,0xb9,0x68,0xc4 }, + { 0x2c,0x38,0x24,0x34 }, { 0x5f,0xc2,0xa3,0x40 }, + { 0x72,0x16,0x1d,0xc3 }, { 0x0c,0xbc,0xe2,0x25 }, + { 0x8b,0x28,0x3c,0x49 }, { 0x41,0xff,0x0d,0x95 }, + { 0x71,0x39,0xa8,0x01 }, { 0xde,0x08,0x0c,0xb3 }, + { 0x9c,0xd8,0xb4,0xe4 }, { 0x90,0x64,0x56,0xc1 }, + { 0x61,0x7b,0xcb,0x84 }, { 0x70,0xd5,0x32,0xb6 }, + { 0x74,0x48,0x6c,0x5c }, { 0x42,0xd0,0xb8,0x57 } + }; + +static const unsigned char T7[256][4] = + { + { 0xa7,0x50,0x51,0xf4 }, { 0x65,0x53,0x7e,0x41 }, + { 0xa4,0xc3,0x1a,0x17 }, { 0x5e,0x96,0x3a,0x27 }, + { 0x6b,0xcb,0x3b,0xab }, { 0x45,0xf1,0x1f,0x9d }, + { 0x58,0xab,0xac,0xfa }, { 0x03,0x93,0x4b,0xe3 }, + { 0xfa,0x55,0x20,0x30 }, { 0x6d,0xf6,0xad,0x76 }, + { 0x76,0x91,0x88,0xcc }, { 0x4c,0x25,0xf5,0x02 }, + { 0xd7,0xfc,0x4f,0xe5 }, { 0xcb,0xd7,0xc5,0x2a }, + { 0x44,0x80,0x26,0x35 }, { 0xa3,0x8f,0xb5,0x62 }, + { 0x5a,0x49,0xde,0xb1 }, { 0x1b,0x67,0x25,0xba }, + { 0x0e,0x98,0x45,0xea }, { 0xc0,0xe1,0x5d,0xfe }, + { 0x75,0x02,0xc3,0x2f }, { 0xf0,0x12,0x81,0x4c }, + { 0x97,0xa3,0x8d,0x46 }, { 0xf9,0xc6,0x6b,0xd3 }, + { 0x5f,0xe7,0x03,0x8f }, { 0x9c,0x95,0x15,0x92 }, + { 0x7a,0xeb,0xbf,0x6d }, { 0x59,0xda,0x95,0x52 }, + { 0x83,0x2d,0xd4,0xbe }, { 0x21,0xd3,0x58,0x74 }, + { 0x69,0x29,0x49,0xe0 }, { 0xc8,0x44,0x8e,0xc9 }, + { 0x89,0x6a,0x75,0xc2 }, { 0x79,0x78,0xf4,0x8e }, + { 0x3e,0x6b,0x99,0x58 }, { 0x71,0xdd,0x27,0xb9 }, + { 0x4f,0xb6,0xbe,0xe1 }, { 0xad,0x17,0xf0,0x88 }, + { 0xac,0x66,0xc9,0x20 }, { 0x3a,0xb4,0x7d,0xce }, + { 0x4a,0x18,0x63,0xdf }, { 0x31,0x82,0xe5,0x1a }, + { 0x33,0x60,0x97,0x51 }, { 0x7f,0x45,0x62,0x53 }, + { 0x77,0xe0,0xb1,0x64 }, { 0xae,0x84,0xbb,0x6b }, + { 0xa0,0x1c,0xfe,0x81 }, { 0x2b,0x94,0xf9,0x08 }, + { 0x68,0x58,0x70,0x48 }, { 0xfd,0x19,0x8f,0x45 }, + { 0x6c,0x87,0x94,0xde }, { 0xf8,0xb7,0x52,0x7b }, + { 0xd3,0x23,0xab,0x73 }, { 0x02,0xe2,0x72,0x4b }, + { 0x8f,0x57,0xe3,0x1f }, { 0xab,0x2a,0x66,0x55 }, + { 0x28,0x07,0xb2,0xeb }, { 0xc2,0x03,0x2f,0xb5 }, + { 0x7b,0x9a,0x86,0xc5 }, { 0x08,0xa5,0xd3,0x37 }, + { 0x87,0xf2,0x30,0x28 }, { 0xa5,0xb2,0x23,0xbf }, + { 0x6a,0xba,0x02,0x03 }, { 0x82,0x5c,0xed,0x16 }, + { 0x1c,0x2b,0x8a,0xcf }, { 0xb4,0x92,0xa7,0x79 }, + { 0xf2,0xf0,0xf3,0x07 }, { 0xe2,0xa1,0x4e,0x69 }, + { 0xf4,0xcd,0x65,0xda }, { 0xbe,0xd5,0x06,0x05 }, + { 0x62,0x1f,0xd1,0x34 }, { 0xfe,0x8a,0xc4,0xa6 }, + { 0x53,0x9d,0x34,0x2e }, { 0x55,0xa0,0xa2,0xf3 }, + { 0xe1,0x32,0x05,0x8a }, { 0xeb,0x75,0xa4,0xf6 }, + { 0xec,0x39,0x0b,0x83 }, { 0xef,0xaa,0x40,0x60 }, + { 0x9f,0x06,0x5e,0x71 }, { 0x10,0x51,0xbd,0x6e }, + { 0x8a,0xf9,0x3e,0x21 }, { 0x06,0x3d,0x96,0xdd }, + { 0x05,0xae,0xdd,0x3e }, { 0xbd,0x46,0x4d,0xe6 }, + { 0x8d,0xb5,0x91,0x54 }, { 0x5d,0x05,0x71,0xc4 }, + { 0xd4,0x6f,0x04,0x06 }, { 0x15,0xff,0x60,0x50 }, + { 0xfb,0x24,0x19,0x98 }, { 0xe9,0x97,0xd6,0xbd }, + { 0x43,0xcc,0x89,0x40 }, { 0x9e,0x77,0x67,0xd9 }, + { 0x42,0xbd,0xb0,0xe8 }, { 0x8b,0x88,0x07,0x89 }, + { 0x5b,0x38,0xe7,0x19 }, { 0xee,0xdb,0x79,0xc8 }, + { 0x0a,0x47,0xa1,0x7c }, { 0x0f,0xe9,0x7c,0x42 }, + { 0x1e,0xc9,0xf8,0x84 }, { 0x00,0x00,0x00,0x00 }, + { 0x86,0x83,0x09,0x80 }, { 0xed,0x48,0x32,0x2b }, + { 0x70,0xac,0x1e,0x11 }, { 0x72,0x4e,0x6c,0x5a }, + { 0xff,0xfb,0xfd,0x0e }, { 0x38,0x56,0x0f,0x85 }, + { 0xd5,0x1e,0x3d,0xae }, { 0x39,0x27,0x36,0x2d }, + { 0xd9,0x64,0x0a,0x0f }, { 0xa6,0x21,0x68,0x5c }, + { 0x54,0xd1,0x9b,0x5b }, { 0x2e,0x3a,0x24,0x36 }, + { 0x67,0xb1,0x0c,0x0a }, { 0xe7,0x0f,0x93,0x57 }, + { 0x96,0xd2,0xb4,0xee }, { 0x91,0x9e,0x1b,0x9b }, + { 0xc5,0x4f,0x80,0xc0 }, { 0x20,0xa2,0x61,0xdc }, + { 0x4b,0x69,0x5a,0x77 }, { 0x1a,0x16,0x1c,0x12 }, + { 0xba,0x0a,0xe2,0x93 }, { 0x2a,0xe5,0xc0,0xa0 }, + { 0xe0,0x43,0x3c,0x22 }, { 0x17,0x1d,0x12,0x1b }, + { 0x0d,0x0b,0x0e,0x09 }, { 0xc7,0xad,0xf2,0x8b }, + { 0xa8,0xb9,0x2d,0xb6 }, { 0xa9,0xc8,0x14,0x1e }, + { 0x19,0x85,0x57,0xf1 }, { 0x07,0x4c,0xaf,0x75 }, + { 0xdd,0xbb,0xee,0x99 }, { 0x60,0xfd,0xa3,0x7f }, + { 0x26,0x9f,0xf7,0x01 }, { 0xf5,0xbc,0x5c,0x72 }, + { 0x3b,0xc5,0x44,0x66 }, { 0x7e,0x34,0x5b,0xfb }, + { 0x29,0x76,0x8b,0x43 }, { 0xc6,0xdc,0xcb,0x23 }, + { 0xfc,0x68,0xb6,0xed }, { 0xf1,0x63,0xb8,0xe4 }, + { 0xdc,0xca,0xd7,0x31 }, { 0x85,0x10,0x42,0x63 }, + { 0x22,0x40,0x13,0x97 }, { 0x11,0x20,0x84,0xc6 }, + { 0x24,0x7d,0x85,0x4a }, { 0x3d,0xf8,0xd2,0xbb }, + { 0x32,0x11,0xae,0xf9 }, { 0xa1,0x6d,0xc7,0x29 }, + { 0x2f,0x4b,0x1d,0x9e }, { 0x30,0xf3,0xdc,0xb2 }, + { 0x52,0xec,0x0d,0x86 }, { 0xe3,0xd0,0x77,0xc1 }, + { 0x16,0x6c,0x2b,0xb3 }, { 0xb9,0x99,0xa9,0x70 }, + { 0x48,0xfa,0x11,0x94 }, { 0x64,0x22,0x47,0xe9 }, + { 0x8c,0xc4,0xa8,0xfc }, { 0x3f,0x1a,0xa0,0xf0 }, + { 0x2c,0xd8,0x56,0x7d }, { 0x90,0xef,0x22,0x33 }, + { 0x4e,0xc7,0x87,0x49 }, { 0xd1,0xc1,0xd9,0x38 }, + { 0xa2,0xfe,0x8c,0xca }, { 0x0b,0x36,0x98,0xd4 }, + { 0x81,0xcf,0xa6,0xf5 }, { 0xde,0x28,0xa5,0x7a }, + { 0x8e,0x26,0xda,0xb7 }, { 0xbf,0xa4,0x3f,0xad }, + { 0x9d,0xe4,0x2c,0x3a }, { 0x92,0x0d,0x50,0x78 }, + { 0xcc,0x9b,0x6a,0x5f }, { 0x46,0x62,0x54,0x7e }, + { 0x13,0xc2,0xf6,0x8d }, { 0xb8,0xe8,0x90,0xd8 }, + { 0xf7,0x5e,0x2e,0x39 }, { 0xaf,0xf5,0x82,0xc3 }, + { 0x80,0xbe,0x9f,0x5d }, { 0x93,0x7c,0x69,0xd0 }, + { 0x2d,0xa9,0x6f,0xd5 }, { 0x12,0xb3,0xcf,0x25 }, + { 0x99,0x3b,0xc8,0xac }, { 0x7d,0xa7,0x10,0x18 }, + { 0x63,0x6e,0xe8,0x9c }, { 0xbb,0x7b,0xdb,0x3b }, + { 0x78,0x09,0xcd,0x26 }, { 0x18,0xf4,0x6e,0x59 }, + { 0xb7,0x01,0xec,0x9a }, { 0x9a,0xa8,0x83,0x4f }, + { 0x6e,0x65,0xe6,0x95 }, { 0xe6,0x7e,0xaa,0xff }, + { 0xcf,0x08,0x21,0xbc }, { 0xe8,0xe6,0xef,0x15 }, + { 0x9b,0xd9,0xba,0xe7 }, { 0x36,0xce,0x4a,0x6f }, + { 0x09,0xd4,0xea,0x9f }, { 0x7c,0xd6,0x29,0xb0 }, + { 0xb2,0xaf,0x31,0xa4 }, { 0x23,0x31,0x2a,0x3f }, + { 0x94,0x30,0xc6,0xa5 }, { 0x66,0xc0,0x35,0xa2 }, + { 0xbc,0x37,0x74,0x4e }, { 0xca,0xa6,0xfc,0x82 }, + { 0xd0,0xb0,0xe0,0x90 }, { 0xd8,0x15,0x33,0xa7 }, + { 0x98,0x4a,0xf1,0x04 }, { 0xda,0xf7,0x41,0xec }, + { 0x50,0x0e,0x7f,0xcd }, { 0xf6,0x2f,0x17,0x91 }, + { 0xd6,0x8d,0x76,0x4d }, { 0xb0,0x4d,0x43,0xef }, + { 0x4d,0x54,0xcc,0xaa }, { 0x04,0xdf,0xe4,0x96 }, + { 0xb5,0xe3,0x9e,0xd1 }, { 0x88,0x1b,0x4c,0x6a }, + { 0x1f,0xb8,0xc1,0x2c }, { 0x51,0x7f,0x46,0x65 }, + { 0xea,0x04,0x9d,0x5e }, { 0x35,0x5d,0x01,0x8c }, + { 0x74,0x73,0xfa,0x87 }, { 0x41,0x2e,0xfb,0x0b }, + { 0x1d,0x5a,0xb3,0x67 }, { 0xd2,0x52,0x92,0xdb }, + { 0x56,0x33,0xe9,0x10 }, { 0x47,0x13,0x6d,0xd6 }, + { 0x61,0x8c,0x9a,0xd7 }, { 0x0c,0x7a,0x37,0xa1 }, + { 0x14,0x8e,0x59,0xf8 }, { 0x3c,0x89,0xeb,0x13 }, + { 0x27,0xee,0xce,0xa9 }, { 0xc9,0x35,0xb7,0x61 }, + { 0xe5,0xed,0xe1,0x1c }, { 0xb1,0x3c,0x7a,0x47 }, + { 0xdf,0x59,0x9c,0xd2 }, { 0x73,0x3f,0x55,0xf2 }, + { 0xce,0x79,0x18,0x14 }, { 0x37,0xbf,0x73,0xc7 }, + { 0xcd,0xea,0x53,0xf7 }, { 0xaa,0x5b,0x5f,0xfd }, + { 0x6f,0x14,0xdf,0x3d }, { 0xdb,0x86,0x78,0x44 }, + { 0xf3,0x81,0xca,0xaf }, { 0xc4,0x3e,0xb9,0x68 }, + { 0x34,0x2c,0x38,0x24 }, { 0x40,0x5f,0xc2,0xa3 }, + { 0xc3,0x72,0x16,0x1d }, { 0x25,0x0c,0xbc,0xe2 }, + { 0x49,0x8b,0x28,0x3c }, { 0x95,0x41,0xff,0x0d }, + { 0x01,0x71,0x39,0xa8 }, { 0xb3,0xde,0x08,0x0c }, + { 0xe4,0x9c,0xd8,0xb4 }, { 0xc1,0x90,0x64,0x56 }, + { 0x84,0x61,0x7b,0xcb }, { 0xb6,0x70,0xd5,0x32 }, + { 0x5c,0x74,0x48,0x6c }, { 0x57,0x42,0xd0,0xb8 } + }; + +static const unsigned char T8[256][4] = + { + { 0xf4,0xa7,0x50,0x51 }, { 0x41,0x65,0x53,0x7e }, + { 0x17,0xa4,0xc3,0x1a }, { 0x27,0x5e,0x96,0x3a }, + { 0xab,0x6b,0xcb,0x3b }, { 0x9d,0x45,0xf1,0x1f }, + { 0xfa,0x58,0xab,0xac }, { 0xe3,0x03,0x93,0x4b }, + { 0x30,0xfa,0x55,0x20 }, { 0x76,0x6d,0xf6,0xad }, + { 0xcc,0x76,0x91,0x88 }, { 0x02,0x4c,0x25,0xf5 }, + { 0xe5,0xd7,0xfc,0x4f }, { 0x2a,0xcb,0xd7,0xc5 }, + { 0x35,0x44,0x80,0x26 }, { 0x62,0xa3,0x8f,0xb5 }, + { 0xb1,0x5a,0x49,0xde }, { 0xba,0x1b,0x67,0x25 }, + { 0xea,0x0e,0x98,0x45 }, { 0xfe,0xc0,0xe1,0x5d }, + { 0x2f,0x75,0x02,0xc3 }, { 0x4c,0xf0,0x12,0x81 }, + { 0x46,0x97,0xa3,0x8d }, { 0xd3,0xf9,0xc6,0x6b }, + { 0x8f,0x5f,0xe7,0x03 }, { 0x92,0x9c,0x95,0x15 }, + { 0x6d,0x7a,0xeb,0xbf }, { 0x52,0x59,0xda,0x95 }, + { 0xbe,0x83,0x2d,0xd4 }, { 0x74,0x21,0xd3,0x58 }, + { 0xe0,0x69,0x29,0x49 }, { 0xc9,0xc8,0x44,0x8e }, + { 0xc2,0x89,0x6a,0x75 }, { 0x8e,0x79,0x78,0xf4 }, + { 0x58,0x3e,0x6b,0x99 }, { 0xb9,0x71,0xdd,0x27 }, + { 0xe1,0x4f,0xb6,0xbe }, { 0x88,0xad,0x17,0xf0 }, + { 0x20,0xac,0x66,0xc9 }, { 0xce,0x3a,0xb4,0x7d }, + { 0xdf,0x4a,0x18,0x63 }, { 0x1a,0x31,0x82,0xe5 }, + { 0x51,0x33,0x60,0x97 }, { 0x53,0x7f,0x45,0x62 }, + { 0x64,0x77,0xe0,0xb1 }, { 0x6b,0xae,0x84,0xbb }, + { 0x81,0xa0,0x1c,0xfe }, { 0x08,0x2b,0x94,0xf9 }, + { 0x48,0x68,0x58,0x70 }, { 0x45,0xfd,0x19,0x8f }, + { 0xde,0x6c,0x87,0x94 }, { 0x7b,0xf8,0xb7,0x52 }, + { 0x73,0xd3,0x23,0xab }, { 0x4b,0x02,0xe2,0x72 }, + { 0x1f,0x8f,0x57,0xe3 }, { 0x55,0xab,0x2a,0x66 }, + { 0xeb,0x28,0x07,0xb2 }, { 0xb5,0xc2,0x03,0x2f }, + { 0xc5,0x7b,0x9a,0x86 }, { 0x37,0x08,0xa5,0xd3 }, + { 0x28,0x87,0xf2,0x30 }, { 0xbf,0xa5,0xb2,0x23 }, + { 0x03,0x6a,0xba,0x02 }, { 0x16,0x82,0x5c,0xed }, + { 0xcf,0x1c,0x2b,0x8a }, { 0x79,0xb4,0x92,0xa7 }, + { 0x07,0xf2,0xf0,0xf3 }, { 0x69,0xe2,0xa1,0x4e }, + { 0xda,0xf4,0xcd,0x65 }, { 0x05,0xbe,0xd5,0x06 }, + { 0x34,0x62,0x1f,0xd1 }, { 0xa6,0xfe,0x8a,0xc4 }, + { 0x2e,0x53,0x9d,0x34 }, { 0xf3,0x55,0xa0,0xa2 }, + { 0x8a,0xe1,0x32,0x05 }, { 0xf6,0xeb,0x75,0xa4 }, + { 0x83,0xec,0x39,0x0b }, { 0x60,0xef,0xaa,0x40 }, + { 0x71,0x9f,0x06,0x5e }, { 0x6e,0x10,0x51,0xbd }, + { 0x21,0x8a,0xf9,0x3e }, { 0xdd,0x06,0x3d,0x96 }, + { 0x3e,0x05,0xae,0xdd }, { 0xe6,0xbd,0x46,0x4d }, + { 0x54,0x8d,0xb5,0x91 }, { 0xc4,0x5d,0x05,0x71 }, + { 0x06,0xd4,0x6f,0x04 }, { 0x50,0x15,0xff,0x60 }, + { 0x98,0xfb,0x24,0x19 }, { 0xbd,0xe9,0x97,0xd6 }, + { 0x40,0x43,0xcc,0x89 }, { 0xd9,0x9e,0x77,0x67 }, + { 0xe8,0x42,0xbd,0xb0 }, { 0x89,0x8b,0x88,0x07 }, + { 0x19,0x5b,0x38,0xe7 }, { 0xc8,0xee,0xdb,0x79 }, + { 0x7c,0x0a,0x47,0xa1 }, { 0x42,0x0f,0xe9,0x7c }, + { 0x84,0x1e,0xc9,0xf8 }, { 0x00,0x00,0x00,0x00 }, + { 0x80,0x86,0x83,0x09 }, { 0x2b,0xed,0x48,0x32 }, + { 0x11,0x70,0xac,0x1e }, { 0x5a,0x72,0x4e,0x6c }, + { 0x0e,0xff,0xfb,0xfd }, { 0x85,0x38,0x56,0x0f }, + { 0xae,0xd5,0x1e,0x3d }, { 0x2d,0x39,0x27,0x36 }, + { 0x0f,0xd9,0x64,0x0a }, { 0x5c,0xa6,0x21,0x68 }, + { 0x5b,0x54,0xd1,0x9b }, { 0x36,0x2e,0x3a,0x24 }, + { 0x0a,0x67,0xb1,0x0c }, { 0x57,0xe7,0x0f,0x93 }, + { 0xee,0x96,0xd2,0xb4 }, { 0x9b,0x91,0x9e,0x1b }, + { 0xc0,0xc5,0x4f,0x80 }, { 0xdc,0x20,0xa2,0x61 }, + { 0x77,0x4b,0x69,0x5a }, { 0x12,0x1a,0x16,0x1c }, + { 0x93,0xba,0x0a,0xe2 }, { 0xa0,0x2a,0xe5,0xc0 }, + { 0x22,0xe0,0x43,0x3c }, { 0x1b,0x17,0x1d,0x12 }, + { 0x09,0x0d,0x0b,0x0e }, { 0x8b,0xc7,0xad,0xf2 }, + { 0xb6,0xa8,0xb9,0x2d }, { 0x1e,0xa9,0xc8,0x14 }, + { 0xf1,0x19,0x85,0x57 }, { 0x75,0x07,0x4c,0xaf }, + { 0x99,0xdd,0xbb,0xee }, { 0x7f,0x60,0xfd,0xa3 }, + { 0x01,0x26,0x9f,0xf7 }, { 0x72,0xf5,0xbc,0x5c }, + { 0x66,0x3b,0xc5,0x44 }, { 0xfb,0x7e,0x34,0x5b }, + { 0x43,0x29,0x76,0x8b }, { 0x23,0xc6,0xdc,0xcb }, + { 0xed,0xfc,0x68,0xb6 }, { 0xe4,0xf1,0x63,0xb8 }, + { 0x31,0xdc,0xca,0xd7 }, { 0x63,0x85,0x10,0x42 }, + { 0x97,0x22,0x40,0x13 }, { 0xc6,0x11,0x20,0x84 }, + { 0x4a,0x24,0x7d,0x85 }, { 0xbb,0x3d,0xf8,0xd2 }, + { 0xf9,0x32,0x11,0xae }, { 0x29,0xa1,0x6d,0xc7 }, + { 0x9e,0x2f,0x4b,0x1d }, { 0xb2,0x30,0xf3,0xdc }, + { 0x86,0x52,0xec,0x0d }, { 0xc1,0xe3,0xd0,0x77 }, + { 0xb3,0x16,0x6c,0x2b }, { 0x70,0xb9,0x99,0xa9 }, + { 0x94,0x48,0xfa,0x11 }, { 0xe9,0x64,0x22,0x47 }, + { 0xfc,0x8c,0xc4,0xa8 }, { 0xf0,0x3f,0x1a,0xa0 }, + { 0x7d,0x2c,0xd8,0x56 }, { 0x33,0x90,0xef,0x22 }, + { 0x49,0x4e,0xc7,0x87 }, { 0x38,0xd1,0xc1,0xd9 }, + { 0xca,0xa2,0xfe,0x8c }, { 0xd4,0x0b,0x36,0x98 }, + { 0xf5,0x81,0xcf,0xa6 }, { 0x7a,0xde,0x28,0xa5 }, + { 0xb7,0x8e,0x26,0xda }, { 0xad,0xbf,0xa4,0x3f }, + { 0x3a,0x9d,0xe4,0x2c }, { 0x78,0x92,0x0d,0x50 }, + { 0x5f,0xcc,0x9b,0x6a }, { 0x7e,0x46,0x62,0x54 }, + { 0x8d,0x13,0xc2,0xf6 }, { 0xd8,0xb8,0xe8,0x90 }, + { 0x39,0xf7,0x5e,0x2e }, { 0xc3,0xaf,0xf5,0x82 }, + { 0x5d,0x80,0xbe,0x9f }, { 0xd0,0x93,0x7c,0x69 }, + { 0xd5,0x2d,0xa9,0x6f }, { 0x25,0x12,0xb3,0xcf }, + { 0xac,0x99,0x3b,0xc8 }, { 0x18,0x7d,0xa7,0x10 }, + { 0x9c,0x63,0x6e,0xe8 }, { 0x3b,0xbb,0x7b,0xdb }, + { 0x26,0x78,0x09,0xcd }, { 0x59,0x18,0xf4,0x6e }, + { 0x9a,0xb7,0x01,0xec }, { 0x4f,0x9a,0xa8,0x83 }, + { 0x95,0x6e,0x65,0xe6 }, { 0xff,0xe6,0x7e,0xaa }, + { 0xbc,0xcf,0x08,0x21 }, { 0x15,0xe8,0xe6,0xef }, + { 0xe7,0x9b,0xd9,0xba }, { 0x6f,0x36,0xce,0x4a }, + { 0x9f,0x09,0xd4,0xea }, { 0xb0,0x7c,0xd6,0x29 }, + { 0xa4,0xb2,0xaf,0x31 }, { 0x3f,0x23,0x31,0x2a }, + { 0xa5,0x94,0x30,0xc6 }, { 0xa2,0x66,0xc0,0x35 }, + { 0x4e,0xbc,0x37,0x74 }, { 0x82,0xca,0xa6,0xfc }, + { 0x90,0xd0,0xb0,0xe0 }, { 0xa7,0xd8,0x15,0x33 }, + { 0x04,0x98,0x4a,0xf1 }, { 0xec,0xda,0xf7,0x41 }, + { 0xcd,0x50,0x0e,0x7f }, { 0x91,0xf6,0x2f,0x17 }, + { 0x4d,0xd6,0x8d,0x76 }, { 0xef,0xb0,0x4d,0x43 }, + { 0xaa,0x4d,0x54,0xcc }, { 0x96,0x04,0xdf,0xe4 }, + { 0xd1,0xb5,0xe3,0x9e }, { 0x6a,0x88,0x1b,0x4c }, + { 0x2c,0x1f,0xb8,0xc1 }, { 0x65,0x51,0x7f,0x46 }, + { 0x5e,0xea,0x04,0x9d }, { 0x8c,0x35,0x5d,0x01 }, + { 0x87,0x74,0x73,0xfa }, { 0x0b,0x41,0x2e,0xfb }, + { 0x67,0x1d,0x5a,0xb3 }, { 0xdb,0xd2,0x52,0x92 }, + { 0x10,0x56,0x33,0xe9 }, { 0xd6,0x47,0x13,0x6d }, + { 0xd7,0x61,0x8c,0x9a }, { 0xa1,0x0c,0x7a,0x37 }, + { 0xf8,0x14,0x8e,0x59 }, { 0x13,0x3c,0x89,0xeb }, + { 0xa9,0x27,0xee,0xce }, { 0x61,0xc9,0x35,0xb7 }, + { 0x1c,0xe5,0xed,0xe1 }, { 0x47,0xb1,0x3c,0x7a }, + { 0xd2,0xdf,0x59,0x9c }, { 0xf2,0x73,0x3f,0x55 }, + { 0x14,0xce,0x79,0x18 }, { 0xc7,0x37,0xbf,0x73 }, + { 0xf7,0xcd,0xea,0x53 }, { 0xfd,0xaa,0x5b,0x5f }, + { 0x3d,0x6f,0x14,0xdf }, { 0x44,0xdb,0x86,0x78 }, + { 0xaf,0xf3,0x81,0xca }, { 0x68,0xc4,0x3e,0xb9 }, + { 0x24,0x34,0x2c,0x38 }, { 0xa3,0x40,0x5f,0xc2 }, + { 0x1d,0xc3,0x72,0x16 }, { 0xe2,0x25,0x0c,0xbc }, + { 0x3c,0x49,0x8b,0x28 }, { 0x0d,0x95,0x41,0xff }, + { 0xa8,0x01,0x71,0x39 }, { 0x0c,0xb3,0xde,0x08 }, + { 0xb4,0xe4,0x9c,0xd8 }, { 0x56,0xc1,0x90,0x64 }, + { 0xcb,0x84,0x61,0x7b }, { 0x32,0xb6,0x70,0xd5 }, + { 0x6c,0x5c,0x74,0x48 }, { 0xb8,0x57,0x42,0xd0 } + }; + +static const unsigned char S5[256] = + { + 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38, + 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb, + 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87, + 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb, + 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d, + 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e, + 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2, + 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25, + 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16, + 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92, + 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda, + 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84, + 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a, + 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06, + 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02, + 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b, + 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea, + 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73, + 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85, + 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e, + 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89, + 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b, + 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20, + 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4, + 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31, + 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f, + 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d, + 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef, + 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0, + 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61, + 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26, + 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d + }; + +static const unsigned char U1[256][4] = + { + { 0x00,0x00,0x00,0x00 }, { 0x0e,0x09,0x0d,0x0b }, + { 0x1c,0x12,0x1a,0x16 }, { 0x12,0x1b,0x17,0x1d }, + { 0x38,0x24,0x34,0x2c }, { 0x36,0x2d,0x39,0x27 }, + { 0x24,0x36,0x2e,0x3a }, { 0x2a,0x3f,0x23,0x31 }, + { 0x70,0x48,0x68,0x58 }, { 0x7e,0x41,0x65,0x53 }, + { 0x6c,0x5a,0x72,0x4e }, { 0x62,0x53,0x7f,0x45 }, + { 0x48,0x6c,0x5c,0x74 }, { 0x46,0x65,0x51,0x7f }, + { 0x54,0x7e,0x46,0x62 }, { 0x5a,0x77,0x4b,0x69 }, + { 0xe0,0x90,0xd0,0xb0 }, { 0xee,0x99,0xdd,0xbb }, + { 0xfc,0x82,0xca,0xa6 }, { 0xf2,0x8b,0xc7,0xad }, + { 0xd8,0xb4,0xe4,0x9c }, { 0xd6,0xbd,0xe9,0x97 }, + { 0xc4,0xa6,0xfe,0x8a }, { 0xca,0xaf,0xf3,0x81 }, + { 0x90,0xd8,0xb8,0xe8 }, { 0x9e,0xd1,0xb5,0xe3 }, + { 0x8c,0xca,0xa2,0xfe }, { 0x82,0xc3,0xaf,0xf5 }, + { 0xa8,0xfc,0x8c,0xc4 }, { 0xa6,0xf5,0x81,0xcf }, + { 0xb4,0xee,0x96,0xd2 }, { 0xba,0xe7,0x9b,0xd9 }, + { 0xdb,0x3b,0xbb,0x7b }, { 0xd5,0x32,0xb6,0x70 }, + { 0xc7,0x29,0xa1,0x6d }, { 0xc9,0x20,0xac,0x66 }, + { 0xe3,0x1f,0x8f,0x57 }, { 0xed,0x16,0x82,0x5c }, + { 0xff,0x0d,0x95,0x41 }, { 0xf1,0x04,0x98,0x4a }, + { 0xab,0x73,0xd3,0x23 }, { 0xa5,0x7a,0xde,0x28 }, + { 0xb7,0x61,0xc9,0x35 }, { 0xb9,0x68,0xc4,0x3e }, + { 0x93,0x57,0xe7,0x0f }, { 0x9d,0x5e,0xea,0x04 }, + { 0x8f,0x45,0xfd,0x19 }, { 0x81,0x4c,0xf0,0x12 }, + { 0x3b,0xab,0x6b,0xcb }, { 0x35,0xa2,0x66,0xc0 }, + { 0x27,0xb9,0x71,0xdd }, { 0x29,0xb0,0x7c,0xd6 }, + { 0x03,0x8f,0x5f,0xe7 }, { 0x0d,0x86,0x52,0xec }, + { 0x1f,0x9d,0x45,0xf1 }, { 0x11,0x94,0x48,0xfa }, + { 0x4b,0xe3,0x03,0x93 }, { 0x45,0xea,0x0e,0x98 }, + { 0x57,0xf1,0x19,0x85 }, { 0x59,0xf8,0x14,0x8e }, + { 0x73,0xc7,0x37,0xbf }, { 0x7d,0xce,0x3a,0xb4 }, + { 0x6f,0xd5,0x2d,0xa9 }, { 0x61,0xdc,0x20,0xa2 }, + { 0xad,0x76,0x6d,0xf6 }, { 0xa3,0x7f,0x60,0xfd }, + { 0xb1,0x64,0x77,0xe0 }, { 0xbf,0x6d,0x7a,0xeb }, + { 0x95,0x52,0x59,0xda }, { 0x9b,0x5b,0x54,0xd1 }, + { 0x89,0x40,0x43,0xcc }, { 0x87,0x49,0x4e,0xc7 }, + { 0xdd,0x3e,0x05,0xae }, { 0xd3,0x37,0x08,0xa5 }, + { 0xc1,0x2c,0x1f,0xb8 }, { 0xcf,0x25,0x12,0xb3 }, + { 0xe5,0x1a,0x31,0x82 }, { 0xeb,0x13,0x3c,0x89 }, + { 0xf9,0x08,0x2b,0x94 }, { 0xf7,0x01,0x26,0x9f }, + { 0x4d,0xe6,0xbd,0x46 }, { 0x43,0xef,0xb0,0x4d }, + { 0x51,0xf4,0xa7,0x50 }, { 0x5f,0xfd,0xaa,0x5b }, + { 0x75,0xc2,0x89,0x6a }, { 0x7b,0xcb,0x84,0x61 }, + { 0x69,0xd0,0x93,0x7c }, { 0x67,0xd9,0x9e,0x77 }, + { 0x3d,0xae,0xd5,0x1e }, { 0x33,0xa7,0xd8,0x15 }, + { 0x21,0xbc,0xcf,0x08 }, { 0x2f,0xb5,0xc2,0x03 }, + { 0x05,0x8a,0xe1,0x32 }, { 0x0b,0x83,0xec,0x39 }, + { 0x19,0x98,0xfb,0x24 }, { 0x17,0x91,0xf6,0x2f }, + { 0x76,0x4d,0xd6,0x8d }, { 0x78,0x44,0xdb,0x86 }, + { 0x6a,0x5f,0xcc,0x9b }, { 0x64,0x56,0xc1,0x90 }, + { 0x4e,0x69,0xe2,0xa1 }, { 0x40,0x60,0xef,0xaa }, + { 0x52,0x7b,0xf8,0xb7 }, { 0x5c,0x72,0xf5,0xbc }, + { 0x06,0x05,0xbe,0xd5 }, { 0x08,0x0c,0xb3,0xde }, + { 0x1a,0x17,0xa4,0xc3 }, { 0x14,0x1e,0xa9,0xc8 }, + { 0x3e,0x21,0x8a,0xf9 }, { 0x30,0x28,0x87,0xf2 }, + { 0x22,0x33,0x90,0xef }, { 0x2c,0x3a,0x9d,0xe4 }, + { 0x96,0xdd,0x06,0x3d }, { 0x98,0xd4,0x0b,0x36 }, + { 0x8a,0xcf,0x1c,0x2b }, { 0x84,0xc6,0x11,0x20 }, + { 0xae,0xf9,0x32,0x11 }, { 0xa0,0xf0,0x3f,0x1a }, + { 0xb2,0xeb,0x28,0x07 }, { 0xbc,0xe2,0x25,0x0c }, + { 0xe6,0x95,0x6e,0x65 }, { 0xe8,0x9c,0x63,0x6e }, + { 0xfa,0x87,0x74,0x73 }, { 0xf4,0x8e,0x79,0x78 }, + { 0xde,0xb1,0x5a,0x49 }, { 0xd0,0xb8,0x57,0x42 }, + { 0xc2,0xa3,0x40,0x5f }, { 0xcc,0xaa,0x4d,0x54 }, + { 0x41,0xec,0xda,0xf7 }, { 0x4f,0xe5,0xd7,0xfc }, + { 0x5d,0xfe,0xc0,0xe1 }, { 0x53,0xf7,0xcd,0xea }, + { 0x79,0xc8,0xee,0xdb }, { 0x77,0xc1,0xe3,0xd0 }, + { 0x65,0xda,0xf4,0xcd }, { 0x6b,0xd3,0xf9,0xc6 }, + { 0x31,0xa4,0xb2,0xaf }, { 0x3f,0xad,0xbf,0xa4 }, + { 0x2d,0xb6,0xa8,0xb9 }, { 0x23,0xbf,0xa5,0xb2 }, + { 0x09,0x80,0x86,0x83 }, { 0x07,0x89,0x8b,0x88 }, + { 0x15,0x92,0x9c,0x95 }, { 0x1b,0x9b,0x91,0x9e }, + { 0xa1,0x7c,0x0a,0x47 }, { 0xaf,0x75,0x07,0x4c }, + { 0xbd,0x6e,0x10,0x51 }, { 0xb3,0x67,0x1d,0x5a }, + { 0x99,0x58,0x3e,0x6b }, { 0x97,0x51,0x33,0x60 }, + { 0x85,0x4a,0x24,0x7d }, { 0x8b,0x43,0x29,0x76 }, + { 0xd1,0x34,0x62,0x1f }, { 0xdf,0x3d,0x6f,0x14 }, + { 0xcd,0x26,0x78,0x09 }, { 0xc3,0x2f,0x75,0x02 }, + { 0xe9,0x10,0x56,0x33 }, { 0xe7,0x19,0x5b,0x38 }, + { 0xf5,0x02,0x4c,0x25 }, { 0xfb,0x0b,0x41,0x2e }, + { 0x9a,0xd7,0x61,0x8c }, { 0x94,0xde,0x6c,0x87 }, + { 0x86,0xc5,0x7b,0x9a }, { 0x88,0xcc,0x76,0x91 }, + { 0xa2,0xf3,0x55,0xa0 }, { 0xac,0xfa,0x58,0xab }, + { 0xbe,0xe1,0x4f,0xb6 }, { 0xb0,0xe8,0x42,0xbd }, + { 0xea,0x9f,0x09,0xd4 }, { 0xe4,0x96,0x04,0xdf }, + { 0xf6,0x8d,0x13,0xc2 }, { 0xf8,0x84,0x1e,0xc9 }, + { 0xd2,0xbb,0x3d,0xf8 }, { 0xdc,0xb2,0x30,0xf3 }, + { 0xce,0xa9,0x27,0xee }, { 0xc0,0xa0,0x2a,0xe5 }, + { 0x7a,0x47,0xb1,0x3c }, { 0x74,0x4e,0xbc,0x37 }, + { 0x66,0x55,0xab,0x2a }, { 0x68,0x5c,0xa6,0x21 }, + { 0x42,0x63,0x85,0x10 }, { 0x4c,0x6a,0x88,0x1b }, + { 0x5e,0x71,0x9f,0x06 }, { 0x50,0x78,0x92,0x0d }, + { 0x0a,0x0f,0xd9,0x64 }, { 0x04,0x06,0xd4,0x6f }, + { 0x16,0x1d,0xc3,0x72 }, { 0x18,0x14,0xce,0x79 }, + { 0x32,0x2b,0xed,0x48 }, { 0x3c,0x22,0xe0,0x43 }, + { 0x2e,0x39,0xf7,0x5e }, { 0x20,0x30,0xfa,0x55 }, + { 0xec,0x9a,0xb7,0x01 }, { 0xe2,0x93,0xba,0x0a }, + { 0xf0,0x88,0xad,0x17 }, { 0xfe,0x81,0xa0,0x1c }, + { 0xd4,0xbe,0x83,0x2d }, { 0xda,0xb7,0x8e,0x26 }, + { 0xc8,0xac,0x99,0x3b }, { 0xc6,0xa5,0x94,0x30 }, + { 0x9c,0xd2,0xdf,0x59 }, { 0x92,0xdb,0xd2,0x52 }, + { 0x80,0xc0,0xc5,0x4f }, { 0x8e,0xc9,0xc8,0x44 }, + { 0xa4,0xf6,0xeb,0x75 }, { 0xaa,0xff,0xe6,0x7e }, + { 0xb8,0xe4,0xf1,0x63 }, { 0xb6,0xed,0xfc,0x68 }, + { 0x0c,0x0a,0x67,0xb1 }, { 0x02,0x03,0x6a,0xba }, + { 0x10,0x18,0x7d,0xa7 }, { 0x1e,0x11,0x70,0xac }, + { 0x34,0x2e,0x53,0x9d }, { 0x3a,0x27,0x5e,0x96 }, + { 0x28,0x3c,0x49,0x8b }, { 0x26,0x35,0x44,0x80 }, + { 0x7c,0x42,0x0f,0xe9 }, { 0x72,0x4b,0x02,0xe2 }, + { 0x60,0x50,0x15,0xff }, { 0x6e,0x59,0x18,0xf4 }, + { 0x44,0x66,0x3b,0xc5 }, { 0x4a,0x6f,0x36,0xce }, + { 0x58,0x74,0x21,0xd3 }, { 0x56,0x7d,0x2c,0xd8 }, + { 0x37,0xa1,0x0c,0x7a }, { 0x39,0xa8,0x01,0x71 }, + { 0x2b,0xb3,0x16,0x6c }, { 0x25,0xba,0x1b,0x67 }, + { 0x0f,0x85,0x38,0x56 }, { 0x01,0x8c,0x35,0x5d }, + { 0x13,0x97,0x22,0x40 }, { 0x1d,0x9e,0x2f,0x4b }, + { 0x47,0xe9,0x64,0x22 }, { 0x49,0xe0,0x69,0x29 }, + { 0x5b,0xfb,0x7e,0x34 }, { 0x55,0xf2,0x73,0x3f }, + { 0x7f,0xcd,0x50,0x0e }, { 0x71,0xc4,0x5d,0x05 }, + { 0x63,0xdf,0x4a,0x18 }, { 0x6d,0xd6,0x47,0x13 }, + { 0xd7,0x31,0xdc,0xca }, { 0xd9,0x38,0xd1,0xc1 }, + { 0xcb,0x23,0xc6,0xdc }, { 0xc5,0x2a,0xcb,0xd7 }, + { 0xef,0x15,0xe8,0xe6 }, { 0xe1,0x1c,0xe5,0xed }, + { 0xf3,0x07,0xf2,0xf0 }, { 0xfd,0x0e,0xff,0xfb }, + { 0xa7,0x79,0xb4,0x92 }, { 0xa9,0x70,0xb9,0x99 }, + { 0xbb,0x6b,0xae,0x84 }, { 0xb5,0x62,0xa3,0x8f }, + { 0x9f,0x5d,0x80,0xbe }, { 0x91,0x54,0x8d,0xb5 }, + { 0x83,0x4f,0x9a,0xa8 }, { 0x8d,0x46,0x97,0xa3 } + }; + +static const unsigned char U2[256][4] = + { + { 0x00,0x00,0x00,0x00 }, { 0x0b,0x0e,0x09,0x0d }, + { 0x16,0x1c,0x12,0x1a }, { 0x1d,0x12,0x1b,0x17 }, + { 0x2c,0x38,0x24,0x34 }, { 0x27,0x36,0x2d,0x39 }, + { 0x3a,0x24,0x36,0x2e }, { 0x31,0x2a,0x3f,0x23 }, + { 0x58,0x70,0x48,0x68 }, { 0x53,0x7e,0x41,0x65 }, + { 0x4e,0x6c,0x5a,0x72 }, { 0x45,0x62,0x53,0x7f }, + { 0x74,0x48,0x6c,0x5c }, { 0x7f,0x46,0x65,0x51 }, + { 0x62,0x54,0x7e,0x46 }, { 0x69,0x5a,0x77,0x4b }, + { 0xb0,0xe0,0x90,0xd0 }, { 0xbb,0xee,0x99,0xdd }, + { 0xa6,0xfc,0x82,0xca }, { 0xad,0xf2,0x8b,0xc7 }, + { 0x9c,0xd8,0xb4,0xe4 }, { 0x97,0xd6,0xbd,0xe9 }, + { 0x8a,0xc4,0xa6,0xfe }, { 0x81,0xca,0xaf,0xf3 }, + { 0xe8,0x90,0xd8,0xb8 }, { 0xe3,0x9e,0xd1,0xb5 }, + { 0xfe,0x8c,0xca,0xa2 }, { 0xf5,0x82,0xc3,0xaf }, + { 0xc4,0xa8,0xfc,0x8c }, { 0xcf,0xa6,0xf5,0x81 }, + { 0xd2,0xb4,0xee,0x96 }, { 0xd9,0xba,0xe7,0x9b }, + { 0x7b,0xdb,0x3b,0xbb }, { 0x70,0xd5,0x32,0xb6 }, + { 0x6d,0xc7,0x29,0xa1 }, { 0x66,0xc9,0x20,0xac }, + { 0x57,0xe3,0x1f,0x8f }, { 0x5c,0xed,0x16,0x82 }, + { 0x41,0xff,0x0d,0x95 }, { 0x4a,0xf1,0x04,0x98 }, + { 0x23,0xab,0x73,0xd3 }, { 0x28,0xa5,0x7a,0xde }, + { 0x35,0xb7,0x61,0xc9 }, { 0x3e,0xb9,0x68,0xc4 }, + { 0x0f,0x93,0x57,0xe7 }, { 0x04,0x9d,0x5e,0xea }, + { 0x19,0x8f,0x45,0xfd }, { 0x12,0x81,0x4c,0xf0 }, + { 0xcb,0x3b,0xab,0x6b }, { 0xc0,0x35,0xa2,0x66 }, + { 0xdd,0x27,0xb9,0x71 }, { 0xd6,0x29,0xb0,0x7c }, + { 0xe7,0x03,0x8f,0x5f }, { 0xec,0x0d,0x86,0x52 }, + { 0xf1,0x1f,0x9d,0x45 }, { 0xfa,0x11,0x94,0x48 }, + { 0x93,0x4b,0xe3,0x03 }, { 0x98,0x45,0xea,0x0e }, + { 0x85,0x57,0xf1,0x19 }, { 0x8e,0x59,0xf8,0x14 }, + { 0xbf,0x73,0xc7,0x37 }, { 0xb4,0x7d,0xce,0x3a }, + { 0xa9,0x6f,0xd5,0x2d }, { 0xa2,0x61,0xdc,0x20 }, + { 0xf6,0xad,0x76,0x6d }, { 0xfd,0xa3,0x7f,0x60 }, + { 0xe0,0xb1,0x64,0x77 }, { 0xeb,0xbf,0x6d,0x7a }, + { 0xda,0x95,0x52,0x59 }, { 0xd1,0x9b,0x5b,0x54 }, + { 0xcc,0x89,0x40,0x43 }, { 0xc7,0x87,0x49,0x4e }, + { 0xae,0xdd,0x3e,0x05 }, { 0xa5,0xd3,0x37,0x08 }, + { 0xb8,0xc1,0x2c,0x1f }, { 0xb3,0xcf,0x25,0x12 }, + { 0x82,0xe5,0x1a,0x31 }, { 0x89,0xeb,0x13,0x3c }, + { 0x94,0xf9,0x08,0x2b }, { 0x9f,0xf7,0x01,0x26 }, + { 0x46,0x4d,0xe6,0xbd }, { 0x4d,0x43,0xef,0xb0 }, + { 0x50,0x51,0xf4,0xa7 }, { 0x5b,0x5f,0xfd,0xaa }, + { 0x6a,0x75,0xc2,0x89 }, { 0x61,0x7b,0xcb,0x84 }, + { 0x7c,0x69,0xd0,0x93 }, { 0x77,0x67,0xd9,0x9e }, + { 0x1e,0x3d,0xae,0xd5 }, { 0x15,0x33,0xa7,0xd8 }, + { 0x08,0x21,0xbc,0xcf }, { 0x03,0x2f,0xb5,0xc2 }, + { 0x32,0x05,0x8a,0xe1 }, { 0x39,0x0b,0x83,0xec }, + { 0x24,0x19,0x98,0xfb }, { 0x2f,0x17,0x91,0xf6 }, + { 0x8d,0x76,0x4d,0xd6 }, { 0x86,0x78,0x44,0xdb }, + { 0x9b,0x6a,0x5f,0xcc }, { 0x90,0x64,0x56,0xc1 }, + { 0xa1,0x4e,0x69,0xe2 }, { 0xaa,0x40,0x60,0xef }, + { 0xb7,0x52,0x7b,0xf8 }, { 0xbc,0x5c,0x72,0xf5 }, + { 0xd5,0x06,0x05,0xbe }, { 0xde,0x08,0x0c,0xb3 }, + { 0xc3,0x1a,0x17,0xa4 }, { 0xc8,0x14,0x1e,0xa9 }, + { 0xf9,0x3e,0x21,0x8a }, { 0xf2,0x30,0x28,0x87 }, + { 0xef,0x22,0x33,0x90 }, { 0xe4,0x2c,0x3a,0x9d }, + { 0x3d,0x96,0xdd,0x06 }, { 0x36,0x98,0xd4,0x0b }, + { 0x2b,0x8a,0xcf,0x1c }, { 0x20,0x84,0xc6,0x11 }, + { 0x11,0xae,0xf9,0x32 }, { 0x1a,0xa0,0xf0,0x3f }, + { 0x07,0xb2,0xeb,0x28 }, { 0x0c,0xbc,0xe2,0x25 }, + { 0x65,0xe6,0x95,0x6e }, { 0x6e,0xe8,0x9c,0x63 }, + { 0x73,0xfa,0x87,0x74 }, { 0x78,0xf4,0x8e,0x79 }, + { 0x49,0xde,0xb1,0x5a }, { 0x42,0xd0,0xb8,0x57 }, + { 0x5f,0xc2,0xa3,0x40 }, { 0x54,0xcc,0xaa,0x4d }, + { 0xf7,0x41,0xec,0xda }, { 0xfc,0x4f,0xe5,0xd7 }, + { 0xe1,0x5d,0xfe,0xc0 }, { 0xea,0x53,0xf7,0xcd }, + { 0xdb,0x79,0xc8,0xee }, { 0xd0,0x77,0xc1,0xe3 }, + { 0xcd,0x65,0xda,0xf4 }, { 0xc6,0x6b,0xd3,0xf9 }, + { 0xaf,0x31,0xa4,0xb2 }, { 0xa4,0x3f,0xad,0xbf }, + { 0xb9,0x2d,0xb6,0xa8 }, { 0xb2,0x23,0xbf,0xa5 }, + { 0x83,0x09,0x80,0x86 }, { 0x88,0x07,0x89,0x8b }, + { 0x95,0x15,0x92,0x9c }, { 0x9e,0x1b,0x9b,0x91 }, + { 0x47,0xa1,0x7c,0x0a }, { 0x4c,0xaf,0x75,0x07 }, + { 0x51,0xbd,0x6e,0x10 }, { 0x5a,0xb3,0x67,0x1d }, + { 0x6b,0x99,0x58,0x3e }, { 0x60,0x97,0x51,0x33 }, + { 0x7d,0x85,0x4a,0x24 }, { 0x76,0x8b,0x43,0x29 }, + { 0x1f,0xd1,0x34,0x62 }, { 0x14,0xdf,0x3d,0x6f }, + { 0x09,0xcd,0x26,0x78 }, { 0x02,0xc3,0x2f,0x75 }, + { 0x33,0xe9,0x10,0x56 }, { 0x38,0xe7,0x19,0x5b }, + { 0x25,0xf5,0x02,0x4c }, { 0x2e,0xfb,0x0b,0x41 }, + { 0x8c,0x9a,0xd7,0x61 }, { 0x87,0x94,0xde,0x6c }, + { 0x9a,0x86,0xc5,0x7b }, { 0x91,0x88,0xcc,0x76 }, + { 0xa0,0xa2,0xf3,0x55 }, { 0xab,0xac,0xfa,0x58 }, + { 0xb6,0xbe,0xe1,0x4f }, { 0xbd,0xb0,0xe8,0x42 }, + { 0xd4,0xea,0x9f,0x09 }, { 0xdf,0xe4,0x96,0x04 }, + { 0xc2,0xf6,0x8d,0x13 }, { 0xc9,0xf8,0x84,0x1e }, + { 0xf8,0xd2,0xbb,0x3d }, { 0xf3,0xdc,0xb2,0x30 }, + { 0xee,0xce,0xa9,0x27 }, { 0xe5,0xc0,0xa0,0x2a }, + { 0x3c,0x7a,0x47,0xb1 }, { 0x37,0x74,0x4e,0xbc }, + { 0x2a,0x66,0x55,0xab }, { 0x21,0x68,0x5c,0xa6 }, + { 0x10,0x42,0x63,0x85 }, { 0x1b,0x4c,0x6a,0x88 }, + { 0x06,0x5e,0x71,0x9f }, { 0x0d,0x50,0x78,0x92 }, + { 0x64,0x0a,0x0f,0xd9 }, { 0x6f,0x04,0x06,0xd4 }, + { 0x72,0x16,0x1d,0xc3 }, { 0x79,0x18,0x14,0xce }, + { 0x48,0x32,0x2b,0xed }, { 0x43,0x3c,0x22,0xe0 }, + { 0x5e,0x2e,0x39,0xf7 }, { 0x55,0x20,0x30,0xfa }, + { 0x01,0xec,0x9a,0xb7 }, { 0x0a,0xe2,0x93,0xba }, + { 0x17,0xf0,0x88,0xad }, { 0x1c,0xfe,0x81,0xa0 }, + { 0x2d,0xd4,0xbe,0x83 }, { 0x26,0xda,0xb7,0x8e }, + { 0x3b,0xc8,0xac,0x99 }, { 0x30,0xc6,0xa5,0x94 }, + { 0x59,0x9c,0xd2,0xdf }, { 0x52,0x92,0xdb,0xd2 }, + { 0x4f,0x80,0xc0,0xc5 }, { 0x44,0x8e,0xc9,0xc8 }, + { 0x75,0xa4,0xf6,0xeb }, { 0x7e,0xaa,0xff,0xe6 }, + { 0x63,0xb8,0xe4,0xf1 }, { 0x68,0xb6,0xed,0xfc }, + { 0xb1,0x0c,0x0a,0x67 }, { 0xba,0x02,0x03,0x6a }, + { 0xa7,0x10,0x18,0x7d }, { 0xac,0x1e,0x11,0x70 }, + { 0x9d,0x34,0x2e,0x53 }, { 0x96,0x3a,0x27,0x5e }, + { 0x8b,0x28,0x3c,0x49 }, { 0x80,0x26,0x35,0x44 }, + { 0xe9,0x7c,0x42,0x0f }, { 0xe2,0x72,0x4b,0x02 }, + { 0xff,0x60,0x50,0x15 }, { 0xf4,0x6e,0x59,0x18 }, + { 0xc5,0x44,0x66,0x3b }, { 0xce,0x4a,0x6f,0x36 }, + { 0xd3,0x58,0x74,0x21 }, { 0xd8,0x56,0x7d,0x2c }, + { 0x7a,0x37,0xa1,0x0c }, { 0x71,0x39,0xa8,0x01 }, + { 0x6c,0x2b,0xb3,0x16 }, { 0x67,0x25,0xba,0x1b }, + { 0x56,0x0f,0x85,0x38 }, { 0x5d,0x01,0x8c,0x35 }, + { 0x40,0x13,0x97,0x22 }, { 0x4b,0x1d,0x9e,0x2f }, + { 0x22,0x47,0xe9,0x64 }, { 0x29,0x49,0xe0,0x69 }, + { 0x34,0x5b,0xfb,0x7e }, { 0x3f,0x55,0xf2,0x73 }, + { 0x0e,0x7f,0xcd,0x50 }, { 0x05,0x71,0xc4,0x5d }, + { 0x18,0x63,0xdf,0x4a }, { 0x13,0x6d,0xd6,0x47 }, + { 0xca,0xd7,0x31,0xdc }, { 0xc1,0xd9,0x38,0xd1 }, + { 0xdc,0xcb,0x23,0xc6 }, { 0xd7,0xc5,0x2a,0xcb }, + { 0xe6,0xef,0x15,0xe8 }, { 0xed,0xe1,0x1c,0xe5 }, + { 0xf0,0xf3,0x07,0xf2 }, { 0xfb,0xfd,0x0e,0xff }, + { 0x92,0xa7,0x79,0xb4 }, { 0x99,0xa9,0x70,0xb9 }, + { 0x84,0xbb,0x6b,0xae }, { 0x8f,0xb5,0x62,0xa3 }, + { 0xbe,0x9f,0x5d,0x80 }, { 0xb5,0x91,0x54,0x8d }, + { 0xa8,0x83,0x4f,0x9a }, { 0xa3,0x8d,0x46,0x97 } + }; + +static const unsigned char U3[256][4] = + { + { 0x00,0x00,0x00,0x00 }, { 0x0d,0x0b,0x0e,0x09 }, + { 0x1a,0x16,0x1c,0x12 }, { 0x17,0x1d,0x12,0x1b }, + { 0x34,0x2c,0x38,0x24 }, { 0x39,0x27,0x36,0x2d }, + { 0x2e,0x3a,0x24,0x36 }, { 0x23,0x31,0x2a,0x3f }, + { 0x68,0x58,0x70,0x48 }, { 0x65,0x53,0x7e,0x41 }, + { 0x72,0x4e,0x6c,0x5a }, { 0x7f,0x45,0x62,0x53 }, + { 0x5c,0x74,0x48,0x6c }, { 0x51,0x7f,0x46,0x65 }, + { 0x46,0x62,0x54,0x7e }, { 0x4b,0x69,0x5a,0x77 }, + { 0xd0,0xb0,0xe0,0x90 }, { 0xdd,0xbb,0xee,0x99 }, + { 0xca,0xa6,0xfc,0x82 }, { 0xc7,0xad,0xf2,0x8b }, + { 0xe4,0x9c,0xd8,0xb4 }, { 0xe9,0x97,0xd6,0xbd }, + { 0xfe,0x8a,0xc4,0xa6 }, { 0xf3,0x81,0xca,0xaf }, + { 0xb8,0xe8,0x90,0xd8 }, { 0xb5,0xe3,0x9e,0xd1 }, + { 0xa2,0xfe,0x8c,0xca }, { 0xaf,0xf5,0x82,0xc3 }, + { 0x8c,0xc4,0xa8,0xfc }, { 0x81,0xcf,0xa6,0xf5 }, + { 0x96,0xd2,0xb4,0xee }, { 0x9b,0xd9,0xba,0xe7 }, + { 0xbb,0x7b,0xdb,0x3b }, { 0xb6,0x70,0xd5,0x32 }, + { 0xa1,0x6d,0xc7,0x29 }, { 0xac,0x66,0xc9,0x20 }, + { 0x8f,0x57,0xe3,0x1f }, { 0x82,0x5c,0xed,0x16 }, + { 0x95,0x41,0xff,0x0d }, { 0x98,0x4a,0xf1,0x04 }, + { 0xd3,0x23,0xab,0x73 }, { 0xde,0x28,0xa5,0x7a }, + { 0xc9,0x35,0xb7,0x61 }, { 0xc4,0x3e,0xb9,0x68 }, + { 0xe7,0x0f,0x93,0x57 }, { 0xea,0x04,0x9d,0x5e }, + { 0xfd,0x19,0x8f,0x45 }, { 0xf0,0x12,0x81,0x4c }, + { 0x6b,0xcb,0x3b,0xab }, { 0x66,0xc0,0x35,0xa2 }, + { 0x71,0xdd,0x27,0xb9 }, { 0x7c,0xd6,0x29,0xb0 }, + { 0x5f,0xe7,0x03,0x8f }, { 0x52,0xec,0x0d,0x86 }, + { 0x45,0xf1,0x1f,0x9d }, { 0x48,0xfa,0x11,0x94 }, + { 0x03,0x93,0x4b,0xe3 }, { 0x0e,0x98,0x45,0xea }, + { 0x19,0x85,0x57,0xf1 }, { 0x14,0x8e,0x59,0xf8 }, + { 0x37,0xbf,0x73,0xc7 }, { 0x3a,0xb4,0x7d,0xce }, + { 0x2d,0xa9,0x6f,0xd5 }, { 0x20,0xa2,0x61,0xdc }, + { 0x6d,0xf6,0xad,0x76 }, { 0x60,0xfd,0xa3,0x7f }, + { 0x77,0xe0,0xb1,0x64 }, { 0x7a,0xeb,0xbf,0x6d }, + { 0x59,0xda,0x95,0x52 }, { 0x54,0xd1,0x9b,0x5b }, + { 0x43,0xcc,0x89,0x40 }, { 0x4e,0xc7,0x87,0x49 }, + { 0x05,0xae,0xdd,0x3e }, { 0x08,0xa5,0xd3,0x37 }, + { 0x1f,0xb8,0xc1,0x2c }, { 0x12,0xb3,0xcf,0x25 }, + { 0x31,0x82,0xe5,0x1a }, { 0x3c,0x89,0xeb,0x13 }, + { 0x2b,0x94,0xf9,0x08 }, { 0x26,0x9f,0xf7,0x01 }, + { 0xbd,0x46,0x4d,0xe6 }, { 0xb0,0x4d,0x43,0xef }, + { 0xa7,0x50,0x51,0xf4 }, { 0xaa,0x5b,0x5f,0xfd }, + { 0x89,0x6a,0x75,0xc2 }, { 0x84,0x61,0x7b,0xcb }, + { 0x93,0x7c,0x69,0xd0 }, { 0x9e,0x77,0x67,0xd9 }, + { 0xd5,0x1e,0x3d,0xae }, { 0xd8,0x15,0x33,0xa7 }, + { 0xcf,0x08,0x21,0xbc }, { 0xc2,0x03,0x2f,0xb5 }, + { 0xe1,0x32,0x05,0x8a }, { 0xec,0x39,0x0b,0x83 }, + { 0xfb,0x24,0x19,0x98 }, { 0xf6,0x2f,0x17,0x91 }, + { 0xd6,0x8d,0x76,0x4d }, { 0xdb,0x86,0x78,0x44 }, + { 0xcc,0x9b,0x6a,0x5f }, { 0xc1,0x90,0x64,0x56 }, + { 0xe2,0xa1,0x4e,0x69 }, { 0xef,0xaa,0x40,0x60 }, + { 0xf8,0xb7,0x52,0x7b }, { 0xf5,0xbc,0x5c,0x72 }, + { 0xbe,0xd5,0x06,0x05 }, { 0xb3,0xde,0x08,0x0c }, + { 0xa4,0xc3,0x1a,0x17 }, { 0xa9,0xc8,0x14,0x1e }, + { 0x8a,0xf9,0x3e,0x21 }, { 0x87,0xf2,0x30,0x28 }, + { 0x90,0xef,0x22,0x33 }, { 0x9d,0xe4,0x2c,0x3a }, + { 0x06,0x3d,0x96,0xdd }, { 0x0b,0x36,0x98,0xd4 }, + { 0x1c,0x2b,0x8a,0xcf }, { 0x11,0x20,0x84,0xc6 }, + { 0x32,0x11,0xae,0xf9 }, { 0x3f,0x1a,0xa0,0xf0 }, + { 0x28,0x07,0xb2,0xeb }, { 0x25,0x0c,0xbc,0xe2 }, + { 0x6e,0x65,0xe6,0x95 }, { 0x63,0x6e,0xe8,0x9c }, + { 0x74,0x73,0xfa,0x87 }, { 0x79,0x78,0xf4,0x8e }, + { 0x5a,0x49,0xde,0xb1 }, { 0x57,0x42,0xd0,0xb8 }, + { 0x40,0x5f,0xc2,0xa3 }, { 0x4d,0x54,0xcc,0xaa }, + { 0xda,0xf7,0x41,0xec }, { 0xd7,0xfc,0x4f,0xe5 }, + { 0xc0,0xe1,0x5d,0xfe }, { 0xcd,0xea,0x53,0xf7 }, + { 0xee,0xdb,0x79,0xc8 }, { 0xe3,0xd0,0x77,0xc1 }, + { 0xf4,0xcd,0x65,0xda }, { 0xf9,0xc6,0x6b,0xd3 }, + { 0xb2,0xaf,0x31,0xa4 }, { 0xbf,0xa4,0x3f,0xad }, + { 0xa8,0xb9,0x2d,0xb6 }, { 0xa5,0xb2,0x23,0xbf }, + { 0x86,0x83,0x09,0x80 }, { 0x8b,0x88,0x07,0x89 }, + { 0x9c,0x95,0x15,0x92 }, { 0x91,0x9e,0x1b,0x9b }, + { 0x0a,0x47,0xa1,0x7c }, { 0x07,0x4c,0xaf,0x75 }, + { 0x10,0x51,0xbd,0x6e }, { 0x1d,0x5a,0xb3,0x67 }, + { 0x3e,0x6b,0x99,0x58 }, { 0x33,0x60,0x97,0x51 }, + { 0x24,0x7d,0x85,0x4a }, { 0x29,0x76,0x8b,0x43 }, + { 0x62,0x1f,0xd1,0x34 }, { 0x6f,0x14,0xdf,0x3d }, + { 0x78,0x09,0xcd,0x26 }, { 0x75,0x02,0xc3,0x2f }, + { 0x56,0x33,0xe9,0x10 }, { 0x5b,0x38,0xe7,0x19 }, + { 0x4c,0x25,0xf5,0x02 }, { 0x41,0x2e,0xfb,0x0b }, + { 0x61,0x8c,0x9a,0xd7 }, { 0x6c,0x87,0x94,0xde }, + { 0x7b,0x9a,0x86,0xc5 }, { 0x76,0x91,0x88,0xcc }, + { 0x55,0xa0,0xa2,0xf3 }, { 0x58,0xab,0xac,0xfa }, + { 0x4f,0xb6,0xbe,0xe1 }, { 0x42,0xbd,0xb0,0xe8 }, + { 0x09,0xd4,0xea,0x9f }, { 0x04,0xdf,0xe4,0x96 }, + { 0x13,0xc2,0xf6,0x8d }, { 0x1e,0xc9,0xf8,0x84 }, + { 0x3d,0xf8,0xd2,0xbb }, { 0x30,0xf3,0xdc,0xb2 }, + { 0x27,0xee,0xce,0xa9 }, { 0x2a,0xe5,0xc0,0xa0 }, + { 0xb1,0x3c,0x7a,0x47 }, { 0xbc,0x37,0x74,0x4e }, + { 0xab,0x2a,0x66,0x55 }, { 0xa6,0x21,0x68,0x5c }, + { 0x85,0x10,0x42,0x63 }, { 0x88,0x1b,0x4c,0x6a }, + { 0x9f,0x06,0x5e,0x71 }, { 0x92,0x0d,0x50,0x78 }, + { 0xd9,0x64,0x0a,0x0f }, { 0xd4,0x6f,0x04,0x06 }, + { 0xc3,0x72,0x16,0x1d }, { 0xce,0x79,0x18,0x14 }, + { 0xed,0x48,0x32,0x2b }, { 0xe0,0x43,0x3c,0x22 }, + { 0xf7,0x5e,0x2e,0x39 }, { 0xfa,0x55,0x20,0x30 }, + { 0xb7,0x01,0xec,0x9a }, { 0xba,0x0a,0xe2,0x93 }, + { 0xad,0x17,0xf0,0x88 }, { 0xa0,0x1c,0xfe,0x81 }, + { 0x83,0x2d,0xd4,0xbe }, { 0x8e,0x26,0xda,0xb7 }, + { 0x99,0x3b,0xc8,0xac }, { 0x94,0x30,0xc6,0xa5 }, + { 0xdf,0x59,0x9c,0xd2 }, { 0xd2,0x52,0x92,0xdb }, + { 0xc5,0x4f,0x80,0xc0 }, { 0xc8,0x44,0x8e,0xc9 }, + { 0xeb,0x75,0xa4,0xf6 }, { 0xe6,0x7e,0xaa,0xff }, + { 0xf1,0x63,0xb8,0xe4 }, { 0xfc,0x68,0xb6,0xed }, + { 0x67,0xb1,0x0c,0x0a }, { 0x6a,0xba,0x02,0x03 }, + { 0x7d,0xa7,0x10,0x18 }, { 0x70,0xac,0x1e,0x11 }, + { 0x53,0x9d,0x34,0x2e }, { 0x5e,0x96,0x3a,0x27 }, + { 0x49,0x8b,0x28,0x3c }, { 0x44,0x80,0x26,0x35 }, + { 0x0f,0xe9,0x7c,0x42 }, { 0x02,0xe2,0x72,0x4b }, + { 0x15,0xff,0x60,0x50 }, { 0x18,0xf4,0x6e,0x59 }, + { 0x3b,0xc5,0x44,0x66 }, { 0x36,0xce,0x4a,0x6f }, + { 0x21,0xd3,0x58,0x74 }, { 0x2c,0xd8,0x56,0x7d }, + { 0x0c,0x7a,0x37,0xa1 }, { 0x01,0x71,0x39,0xa8 }, + { 0x16,0x6c,0x2b,0xb3 }, { 0x1b,0x67,0x25,0xba }, + { 0x38,0x56,0x0f,0x85 }, { 0x35,0x5d,0x01,0x8c }, + { 0x22,0x40,0x13,0x97 }, { 0x2f,0x4b,0x1d,0x9e }, + { 0x64,0x22,0x47,0xe9 }, { 0x69,0x29,0x49,0xe0 }, + { 0x7e,0x34,0x5b,0xfb }, { 0x73,0x3f,0x55,0xf2 }, + { 0x50,0x0e,0x7f,0xcd }, { 0x5d,0x05,0x71,0xc4 }, + { 0x4a,0x18,0x63,0xdf }, { 0x47,0x13,0x6d,0xd6 }, + { 0xdc,0xca,0xd7,0x31 }, { 0xd1,0xc1,0xd9,0x38 }, + { 0xc6,0xdc,0xcb,0x23 }, { 0xcb,0xd7,0xc5,0x2a }, + { 0xe8,0xe6,0xef,0x15 }, { 0xe5,0xed,0xe1,0x1c }, + { 0xf2,0xf0,0xf3,0x07 }, { 0xff,0xfb,0xfd,0x0e }, + { 0xb4,0x92,0xa7,0x79 }, { 0xb9,0x99,0xa9,0x70 }, + { 0xae,0x84,0xbb,0x6b }, { 0xa3,0x8f,0xb5,0x62 }, + { 0x80,0xbe,0x9f,0x5d }, { 0x8d,0xb5,0x91,0x54 }, + { 0x9a,0xa8,0x83,0x4f }, { 0x97,0xa3,0x8d,0x46 } + }; + +static const unsigned char U4[256][4] = + { + { 0x00,0x00,0x00,0x00 }, { 0x09,0x0d,0x0b,0x0e }, + { 0x12,0x1a,0x16,0x1c }, { 0x1b,0x17,0x1d,0x12 }, + { 0x24,0x34,0x2c,0x38 }, { 0x2d,0x39,0x27,0x36 }, + { 0x36,0x2e,0x3a,0x24 }, { 0x3f,0x23,0x31,0x2a }, + { 0x48,0x68,0x58,0x70 }, { 0x41,0x65,0x53,0x7e }, + { 0x5a,0x72,0x4e,0x6c }, { 0x53,0x7f,0x45,0x62 }, + { 0x6c,0x5c,0x74,0x48 }, { 0x65,0x51,0x7f,0x46 }, + { 0x7e,0x46,0x62,0x54 }, { 0x77,0x4b,0x69,0x5a }, + { 0x90,0xd0,0xb0,0xe0 }, { 0x99,0xdd,0xbb,0xee }, + { 0x82,0xca,0xa6,0xfc }, { 0x8b,0xc7,0xad,0xf2 }, + { 0xb4,0xe4,0x9c,0xd8 }, { 0xbd,0xe9,0x97,0xd6 }, + { 0xa6,0xfe,0x8a,0xc4 }, { 0xaf,0xf3,0x81,0xca }, + { 0xd8,0xb8,0xe8,0x90 }, { 0xd1,0xb5,0xe3,0x9e }, + { 0xca,0xa2,0xfe,0x8c }, { 0xc3,0xaf,0xf5,0x82 }, + { 0xfc,0x8c,0xc4,0xa8 }, { 0xf5,0x81,0xcf,0xa6 }, + { 0xee,0x96,0xd2,0xb4 }, { 0xe7,0x9b,0xd9,0xba }, + { 0x3b,0xbb,0x7b,0xdb }, { 0x32,0xb6,0x70,0xd5 }, + { 0x29,0xa1,0x6d,0xc7 }, { 0x20,0xac,0x66,0xc9 }, + { 0x1f,0x8f,0x57,0xe3 }, { 0x16,0x82,0x5c,0xed }, + { 0x0d,0x95,0x41,0xff }, { 0x04,0x98,0x4a,0xf1 }, + { 0x73,0xd3,0x23,0xab }, { 0x7a,0xde,0x28,0xa5 }, + { 0x61,0xc9,0x35,0xb7 }, { 0x68,0xc4,0x3e,0xb9 }, + { 0x57,0xe7,0x0f,0x93 }, { 0x5e,0xea,0x04,0x9d }, + { 0x45,0xfd,0x19,0x8f }, { 0x4c,0xf0,0x12,0x81 }, + { 0xab,0x6b,0xcb,0x3b }, { 0xa2,0x66,0xc0,0x35 }, + { 0xb9,0x71,0xdd,0x27 }, { 0xb0,0x7c,0xd6,0x29 }, + { 0x8f,0x5f,0xe7,0x03 }, { 0x86,0x52,0xec,0x0d }, + { 0x9d,0x45,0xf1,0x1f }, { 0x94,0x48,0xfa,0x11 }, + { 0xe3,0x03,0x93,0x4b }, { 0xea,0x0e,0x98,0x45 }, + { 0xf1,0x19,0x85,0x57 }, { 0xf8,0x14,0x8e,0x59 }, + { 0xc7,0x37,0xbf,0x73 }, { 0xce,0x3a,0xb4,0x7d }, + { 0xd5,0x2d,0xa9,0x6f }, { 0xdc,0x20,0xa2,0x61 }, + { 0x76,0x6d,0xf6,0xad }, { 0x7f,0x60,0xfd,0xa3 }, + { 0x64,0x77,0xe0,0xb1 }, { 0x6d,0x7a,0xeb,0xbf }, + { 0x52,0x59,0xda,0x95 }, { 0x5b,0x54,0xd1,0x9b }, + { 0x40,0x43,0xcc,0x89 }, { 0x49,0x4e,0xc7,0x87 }, + { 0x3e,0x05,0xae,0xdd }, { 0x37,0x08,0xa5,0xd3 }, + { 0x2c,0x1f,0xb8,0xc1 }, { 0x25,0x12,0xb3,0xcf }, + { 0x1a,0x31,0x82,0xe5 }, { 0x13,0x3c,0x89,0xeb }, + { 0x08,0x2b,0x94,0xf9 }, { 0x01,0x26,0x9f,0xf7 }, + { 0xe6,0xbd,0x46,0x4d }, { 0xef,0xb0,0x4d,0x43 }, + { 0xf4,0xa7,0x50,0x51 }, { 0xfd,0xaa,0x5b,0x5f }, + { 0xc2,0x89,0x6a,0x75 }, { 0xcb,0x84,0x61,0x7b }, + { 0xd0,0x93,0x7c,0x69 }, { 0xd9,0x9e,0x77,0x67 }, + { 0xae,0xd5,0x1e,0x3d }, { 0xa7,0xd8,0x15,0x33 }, + { 0xbc,0xcf,0x08,0x21 }, { 0xb5,0xc2,0x03,0x2f }, + { 0x8a,0xe1,0x32,0x05 }, { 0x83,0xec,0x39,0x0b }, + { 0x98,0xfb,0x24,0x19 }, { 0x91,0xf6,0x2f,0x17 }, + { 0x4d,0xd6,0x8d,0x76 }, { 0x44,0xdb,0x86,0x78 }, + { 0x5f,0xcc,0x9b,0x6a }, { 0x56,0xc1,0x90,0x64 }, + { 0x69,0xe2,0xa1,0x4e }, { 0x60,0xef,0xaa,0x40 }, + { 0x7b,0xf8,0xb7,0x52 }, { 0x72,0xf5,0xbc,0x5c }, + { 0x05,0xbe,0xd5,0x06 }, { 0x0c,0xb3,0xde,0x08 }, + { 0x17,0xa4,0xc3,0x1a }, { 0x1e,0xa9,0xc8,0x14 }, + { 0x21,0x8a,0xf9,0x3e }, { 0x28,0x87,0xf2,0x30 }, + { 0x33,0x90,0xef,0x22 }, { 0x3a,0x9d,0xe4,0x2c }, + { 0xdd,0x06,0x3d,0x96 }, { 0xd4,0x0b,0x36,0x98 }, + { 0xcf,0x1c,0x2b,0x8a }, { 0xc6,0x11,0x20,0x84 }, + { 0xf9,0x32,0x11,0xae }, { 0xf0,0x3f,0x1a,0xa0 }, + { 0xeb,0x28,0x07,0xb2 }, { 0xe2,0x25,0x0c,0xbc }, + { 0x95,0x6e,0x65,0xe6 }, { 0x9c,0x63,0x6e,0xe8 }, + { 0x87,0x74,0x73,0xfa }, { 0x8e,0x79,0x78,0xf4 }, + { 0xb1,0x5a,0x49,0xde }, { 0xb8,0x57,0x42,0xd0 }, + { 0xa3,0x40,0x5f,0xc2 }, { 0xaa,0x4d,0x54,0xcc }, + { 0xec,0xda,0xf7,0x41 }, { 0xe5,0xd7,0xfc,0x4f }, + { 0xfe,0xc0,0xe1,0x5d }, { 0xf7,0xcd,0xea,0x53 }, + { 0xc8,0xee,0xdb,0x79 }, { 0xc1,0xe3,0xd0,0x77 }, + { 0xda,0xf4,0xcd,0x65 }, { 0xd3,0xf9,0xc6,0x6b }, + { 0xa4,0xb2,0xaf,0x31 }, { 0xad,0xbf,0xa4,0x3f }, + { 0xb6,0xa8,0xb9,0x2d }, { 0xbf,0xa5,0xb2,0x23 }, + { 0x80,0x86,0x83,0x09 }, { 0x89,0x8b,0x88,0x07 }, + { 0x92,0x9c,0x95,0x15 }, { 0x9b,0x91,0x9e,0x1b }, + { 0x7c,0x0a,0x47,0xa1 }, { 0x75,0x07,0x4c,0xaf }, + { 0x6e,0x10,0x51,0xbd }, { 0x67,0x1d,0x5a,0xb3 }, + { 0x58,0x3e,0x6b,0x99 }, { 0x51,0x33,0x60,0x97 }, + { 0x4a,0x24,0x7d,0x85 }, { 0x43,0x29,0x76,0x8b }, + { 0x34,0x62,0x1f,0xd1 }, { 0x3d,0x6f,0x14,0xdf }, + { 0x26,0x78,0x09,0xcd }, { 0x2f,0x75,0x02,0xc3 }, + { 0x10,0x56,0x33,0xe9 }, { 0x19,0x5b,0x38,0xe7 }, + { 0x02,0x4c,0x25,0xf5 }, { 0x0b,0x41,0x2e,0xfb }, + { 0xd7,0x61,0x8c,0x9a }, { 0xde,0x6c,0x87,0x94 }, + { 0xc5,0x7b,0x9a,0x86 }, { 0xcc,0x76,0x91,0x88 }, + { 0xf3,0x55,0xa0,0xa2 }, { 0xfa,0x58,0xab,0xac }, + { 0xe1,0x4f,0xb6,0xbe }, { 0xe8,0x42,0xbd,0xb0 }, + { 0x9f,0x09,0xd4,0xea }, { 0x96,0x04,0xdf,0xe4 }, + { 0x8d,0x13,0xc2,0xf6 }, { 0x84,0x1e,0xc9,0xf8 }, + { 0xbb,0x3d,0xf8,0xd2 }, { 0xb2,0x30,0xf3,0xdc }, + { 0xa9,0x27,0xee,0xce }, { 0xa0,0x2a,0xe5,0xc0 }, + { 0x47,0xb1,0x3c,0x7a }, { 0x4e,0xbc,0x37,0x74 }, + { 0x55,0xab,0x2a,0x66 }, { 0x5c,0xa6,0x21,0x68 }, + { 0x63,0x85,0x10,0x42 }, { 0x6a,0x88,0x1b,0x4c }, + { 0x71,0x9f,0x06,0x5e }, { 0x78,0x92,0x0d,0x50 }, + { 0x0f,0xd9,0x64,0x0a }, { 0x06,0xd4,0x6f,0x04 }, + { 0x1d,0xc3,0x72,0x16 }, { 0x14,0xce,0x79,0x18 }, + { 0x2b,0xed,0x48,0x32 }, { 0x22,0xe0,0x43,0x3c }, + { 0x39,0xf7,0x5e,0x2e }, { 0x30,0xfa,0x55,0x20 }, + { 0x9a,0xb7,0x01,0xec }, { 0x93,0xba,0x0a,0xe2 }, + { 0x88,0xad,0x17,0xf0 }, { 0x81,0xa0,0x1c,0xfe }, + { 0xbe,0x83,0x2d,0xd4 }, { 0xb7,0x8e,0x26,0xda }, + { 0xac,0x99,0x3b,0xc8 }, { 0xa5,0x94,0x30,0xc6 }, + { 0xd2,0xdf,0x59,0x9c }, { 0xdb,0xd2,0x52,0x92 }, + { 0xc0,0xc5,0x4f,0x80 }, { 0xc9,0xc8,0x44,0x8e }, + { 0xf6,0xeb,0x75,0xa4 }, { 0xff,0xe6,0x7e,0xaa }, + { 0xe4,0xf1,0x63,0xb8 }, { 0xed,0xfc,0x68,0xb6 }, + { 0x0a,0x67,0xb1,0x0c }, { 0x03,0x6a,0xba,0x02 }, + { 0x18,0x7d,0xa7,0x10 }, { 0x11,0x70,0xac,0x1e }, + { 0x2e,0x53,0x9d,0x34 }, { 0x27,0x5e,0x96,0x3a }, + { 0x3c,0x49,0x8b,0x28 }, { 0x35,0x44,0x80,0x26 }, + { 0x42,0x0f,0xe9,0x7c }, { 0x4b,0x02,0xe2,0x72 }, + { 0x50,0x15,0xff,0x60 }, { 0x59,0x18,0xf4,0x6e }, + { 0x66,0x3b,0xc5,0x44 }, { 0x6f,0x36,0xce,0x4a }, + { 0x74,0x21,0xd3,0x58 }, { 0x7d,0x2c,0xd8,0x56 }, + { 0xa1,0x0c,0x7a,0x37 }, { 0xa8,0x01,0x71,0x39 }, + { 0xb3,0x16,0x6c,0x2b }, { 0xba,0x1b,0x67,0x25 }, + { 0x85,0x38,0x56,0x0f }, { 0x8c,0x35,0x5d,0x01 }, + { 0x97,0x22,0x40,0x13 }, { 0x9e,0x2f,0x4b,0x1d }, + { 0xe9,0x64,0x22,0x47 }, { 0xe0,0x69,0x29,0x49 }, + { 0xfb,0x7e,0x34,0x5b }, { 0xf2,0x73,0x3f,0x55 }, + { 0xcd,0x50,0x0e,0x7f }, { 0xc4,0x5d,0x05,0x71 }, + { 0xdf,0x4a,0x18,0x63 }, { 0xd6,0x47,0x13,0x6d }, + { 0x31,0xdc,0xca,0xd7 }, { 0x38,0xd1,0xc1,0xd9 }, + { 0x23,0xc6,0xdc,0xcb }, { 0x2a,0xcb,0xd7,0xc5 }, + { 0x15,0xe8,0xe6,0xef }, { 0x1c,0xe5,0xed,0xe1 }, + { 0x07,0xf2,0xf0,0xf3 }, { 0x0e,0xff,0xfb,0xfd }, + { 0x79,0xb4,0x92,0xa7 }, { 0x70,0xb9,0x99,0xa9 }, + { 0x6b,0xae,0x84,0xbb }, { 0x62,0xa3,0x8f,0xb5 }, + { 0x5d,0x80,0xbe,0x9f }, { 0x54,0x8d,0xb5,0x91 }, + { 0x4f,0x9a,0xa8,0x83 }, { 0x46,0x97,0xa3,0x8d } + }; + +static const u32 rcon[30] = + { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, + 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, + 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 + }; diff --git a/grub-core/lib/libgcrypt-grub/cipher/rijndael.c b/grub-core/lib/libgcrypt-grub/cipher/rijndael.c new file mode 100644 index 000000000..92e4d2c1d --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/rijndael.c @@ -0,0 +1,1478 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* Rijndael (AES) for GnuPG + * Copyright (C) 2000, 2001, 2002, 2003, 2007, + * 2008, 2011 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + ******************************************************************* + * The code here is based on the optimized implementation taken from + * http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ on Oct 2, 2000, + * which carries this notice: + *------------------------------------------ + * rijndael-alg-fst.c v2.3 April '2000 + * + * Optimised ANSI C code + * + * authors: v1.0: Antoon Bosselaers + * v2.0: Vincent Rijmen + * v2.3: Paulo Barreto + * + * This code is placed in the public domain. + *------------------------------------------ + * + * The SP800-38a document is available at: + * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf + * + */ + + +#include "types.h" /* for byte and u32 typedefs */ +#include "g10lib.h" +#include "cipher.h" + +#define MAXKC (256/32) +#define MAXROUNDS 14 +#define BLOCKSIZE (128/8) + + +/* Helper macro to force alignment to 16 bytes. */ +#ifdef __GNUC__ +# define ATTR_ALIGNED_16 __attribute__ ((aligned (16))) +#else +# define ATTR_ALIGNED_16 +#endif + + +/* USE_PADLOCK indicates whether to compile the padlock specific + code. */ +#undef USE_PADLOCK +#ifdef ENABLE_PADLOCK_SUPPORT +# if defined (__i386__) && SIZEOF_UNSIGNED_LONG == 4 && defined (__GNUC__) +# define USE_PADLOCK 1 +# endif +#endif /*ENABLE_PADLOCK_SUPPORT*/ + +/* USE_AESNI inidicates whether to compile with Intel AES-NI code. We + need the vector-size attribute which seems to be available since + gcc 3. However, to be on the safe side we require at least gcc 4. */ +#undef USE_AESNI +#ifdef ENABLE_AESNI_SUPPORT +# if defined (__i386__) && SIZEOF_UNSIGNED_LONG == 4 && __GNUC__ >= 4 +# define USE_AESNI 1 +# endif +#endif /* ENABLE_AESNI_SUPPORT */ + +#ifdef USE_AESNI + typedef int m128i_t __attribute__ ((__vector_size__ (16))); +#endif /*USE_AESNI*/ + +/* Define an u32 variant for the sake of gcc 4.4's strict aliasing. */ +#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 4 ) +typedef u32 __attribute__ ((__may_alias__)) u32_a_t; +#else +typedef u32 u32_a_t; +#endif + + + +/* Our context object. */ +typedef struct +{ + /* The first fields are the keyschedule arrays. This is so that + they are aligned on a 16 byte boundary if using gcc. This + alignment is required for the AES-NI code and a good idea in any + case. The alignment is guaranteed due to the way cipher.c + allocates the space for the context. The PROPERLY_ALIGNED_TYPE + hack is used to force a minimal alignment if not using gcc of if + the alignment requirement is higher that 16 bytes. */ + union + { + PROPERLY_ALIGNED_TYPE dummy; + byte keyschedule[MAXROUNDS+1][4][4]; +#ifdef USE_PADLOCK + /* The key as passed to the padlock engine. It is only used if + the padlock engine is used (USE_PADLOCK, below). */ + unsigned char padlock_key[16] __attribute__ ((aligned (16))); +#endif /*USE_PADLOCK*/ + } u1; + union + { + PROPERLY_ALIGNED_TYPE dummy; + byte keyschedule[MAXROUNDS+1][4][4]; + } u2; + int rounds; /* Key-length-dependent number of rounds. */ + int decryption_prepared; /* The decryption key schedule is available. */ +#ifdef USE_PADLOCK + int use_padlock; /* Padlock shall be used. */ +#endif /*USE_PADLOCK*/ +#ifdef USE_AESNI + int use_aesni; /* AES-NI shall be used. */ +#endif /*USE_AESNI*/ +} RIJNDAEL_context ATTR_ALIGNED_16; + +/* Macros defining alias for the keyschedules. */ +#define keyschenc u1.keyschedule +#define keyschdec u2.keyschedule +#define padlockkey u1.padlock_key + +/* Two macros to be called prior and after the use of AESNI + instructions. There should be no external function calls between + the use of these macros. There purpose is to make sure that the + SSE regsiters are cleared and won't reveal any information about + the key or the data. */ +#ifdef USE_AESNI +# define aesni_prepare() do { } while (0) +# define aesni_cleanup() \ + do { asm volatile ("pxor %%xmm0, %%xmm0\n\t" \ + "pxor %%xmm1, %%xmm1\n" :: ); \ + } while (0) +# define aesni_cleanup_2_4() \ + do { asm volatile ("pxor %%xmm2, %%xmm2\n\t" \ + "pxor %%xmm3, %%xmm3\n" \ + "pxor %%xmm4, %%xmm4\n":: ); \ + } while (0) +#else +# define aesni_prepare() do { } while (0) +# define aesni_cleanup() do { } while (0) +#endif + + +/* All the numbers. */ +#include "rijndael-tables.h" + + + +/* Function prototypes. */ +#ifdef USE_AESNI +/* We don't want to inline these functions to help gcc allocate enough + registers. */ +static void do_aesni_ctr (const RIJNDAEL_context *ctx, unsigned char *ctr, + unsigned char *b, const unsigned char *a) + __attribute__ ((__noinline__)); +static void do_aesni_ctr_4 (const RIJNDAEL_context *ctx, unsigned char *ctr, + unsigned char *b, const unsigned char *a) + __attribute__ ((__noinline__)); +#endif /*USE_AESNI*/ + + + + +/* Perform the key setup. */ +static gcry_err_code_t +do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen) +{ + static int initialized = 0; + static const char *selftest_failed=0; + int rounds; + int i,j, r, t, rconpointer = 0; + int KC; + union + { + PROPERLY_ALIGNED_TYPE dummy; + byte k[MAXKC][4]; + } k; +#define k k.k + union + { + PROPERLY_ALIGNED_TYPE dummy; + byte tk[MAXKC][4]; + } tk; +#define tk tk.tk + + /* The on-the-fly self tests are only run in non-fips mode. In fips + mode explicit self-tests are required. Actually the on-the-fly + self-tests are not fully thread-safe and it might happen that a + failed self-test won't get noticed in another thread. + + FIXME: We might want to have a central registry of succeeded + self-tests. */ + if (!fips_mode () && !initialized) + { + initialized = 1; + selftest_failed = selftest (); + if (selftest_failed) + log_error ("%s\n", selftest_failed ); + } + if (selftest_failed) + return GPG_ERR_SELFTEST_FAILED; + + ctx->decryption_prepared = 0; +#ifdef USE_PADLOCK + ctx->use_padlock = 0; +#endif +#ifdef USE_AESNI + ctx->use_aesni = 0; +#endif + + if( keylen == 128/8 ) + { + rounds = 10; + KC = 4; + + if (0) + ; +#ifdef USE_PADLOCK + else if ((_gcry_get_hw_features () & HWF_PADLOCK_AES)) + { + ctx->use_padlock = 1; + memcpy (ctx->padlockkey, key, keylen); + } +#endif +#ifdef USE_AESNI + else if ((_gcry_get_hw_features () & HWF_INTEL_AESNI)) + { + ctx->use_aesni = 1; + } +#endif + } + else if ( keylen == 192/8 ) + { + rounds = 12; + KC = 6; + + if (0) + { + ; + } +#ifdef USE_AESNI + else if ((_gcry_get_hw_features () & HWF_INTEL_AESNI)) + { + ctx->use_aesni = 1; + } +#endif + } + else if ( keylen == 256/8 ) + { + rounds = 14; + KC = 8; + + if (0) + { + ; + } +#ifdef USE_AESNI + else if ((_gcry_get_hw_features () & HWF_INTEL_AESNI)) + { + ctx->use_aesni = 1; + } +#endif + } + else + return GPG_ERR_INV_KEYLEN; + + ctx->rounds = rounds; + + /* NB: We don't yet support Padlock hardware key generation. */ + + if (0) + ; +#ifdef USE_AESNI_is_disabled_here + else if (ctx->use_aesni && ctx->rounds == 10) + { + /* Note: This code works for AES-128 but it is not much better + than using the standard key schedule. We disable it for + now and don't put any effort into implementing this for + AES-192 and AES-256. */ + asm volatile ("movl %[key], %%esi\n\t" + "movdqu (%%esi), %%xmm1\n\t" /* xmm1 := key */ + "movl %[ksch], %%esi\n\t" + "movdqa %%xmm1, (%%esi)\n\t" /* ksch[0] := xmm1 */ + "aeskeygenassist $0x01, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x10(%%esi)\n\t" /* ksch[1] := xmm1 */ + "aeskeygenassist $0x02, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x20(%%esi)\n\t" /* ksch[2] := xmm1 */ + "aeskeygenassist $0x04, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x30(%%esi)\n\t" /* ksch[3] := xmm1 */ + "aeskeygenassist $0x08, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x40(%%esi)\n\t" /* ksch[4] := xmm1 */ + "aeskeygenassist $0x10, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x50(%%esi)\n\t" /* ksch[5] := xmm1 */ + "aeskeygenassist $0x20, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x60(%%esi)\n\t" /* ksch[6] := xmm1 */ + "aeskeygenassist $0x40, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x70(%%esi)\n\t" /* ksch[7] := xmm1 */ + "aeskeygenassist $0x80, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x80(%%esi)\n\t" /* ksch[8] := xmm1 */ + "aeskeygenassist $0x1b, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0x90(%%esi)\n\t" /* ksch[9] := xmm1 */ + "aeskeygenassist $0x36, %%xmm1, %%xmm2\n\t" + "call .Lexpand128_%=\n\t" + "movdqa %%xmm1, 0xa0(%%esi)\n\t" /* ksch[10] := xmm1 */ + "jmp .Lleave%=\n" + + ".Lexpand128_%=:\n\t" + "pshufd $0xff, %%xmm2, %%xmm2\n\t" + "movdqa %%xmm1, %%xmm3\n\t" + "pslldq $4, %%xmm3\n\t" + "pxor %%xmm3, %%xmm1\n\t" + "pslldq $4, %%xmm3\n\t" + "pxor %%xmm3, %%xmm1\n\t" + "pslldq $4, %%xmm3\n\t" + "pxor %%xmm3, %%xmm2\n\t" + "pxor %%xmm2, %%xmm1\n\t" + "ret\n" + + ".Lleave%=:\n\t" + "pxor %%xmm1, %%xmm1\n\t" + "pxor %%xmm2, %%xmm2\n\t" + "pxor %%xmm3, %%xmm3\n" + : + : [key] "g" (key), [ksch] "g" (ctx->keyschenc) + : "%esi", "cc", "memory" ); + } +#endif /*USE_AESNI*/ + else + { +#define W (ctx->keyschenc) + for (i = 0; i < keylen; i++) + { + k[i >> 2][i & 3] = key[i]; + } + + for (j = KC-1; j >= 0; j--) + { + *((u32_a_t*)tk[j]) = *((u32_a_t*)k[j]); + } + r = 0; + t = 0; + /* Copy values into round key array. */ + for (j = 0; (j < KC) && (r < rounds + 1); ) + { + for (; (j < KC) && (t < 4); j++, t++) + { + *((u32_a_t*)W[r][t]) = *((u32_a_t*)tk[j]); + } + if (t == 4) + { + r++; + t = 0; + } + } + + while (r < rounds + 1) + { + /* While not enough round key material calculated calculate + new values. */ + tk[0][0] ^= S[tk[KC-1][1]]; + tk[0][1] ^= S[tk[KC-1][2]]; + tk[0][2] ^= S[tk[KC-1][3]]; + tk[0][3] ^= S[tk[KC-1][0]]; + tk[0][0] ^= rcon[rconpointer++]; + + if (KC != 8) + { + for (j = 1; j < KC; j++) + { + *((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]); + } + } + else + { + for (j = 1; j < KC/2; j++) + { + *((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]); + } + tk[KC/2][0] ^= S[tk[KC/2 - 1][0]]; + tk[KC/2][1] ^= S[tk[KC/2 - 1][1]]; + tk[KC/2][2] ^= S[tk[KC/2 - 1][2]]; + tk[KC/2][3] ^= S[tk[KC/2 - 1][3]]; + for (j = KC/2 + 1; j < KC; j++) + { + *((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]); + } + } + + /* Copy values into round key array. */ + for (j = 0; (j < KC) && (r < rounds + 1); ) + { + for (; (j < KC) && (t < 4); j++, t++) + { + *((u32_a_t*)W[r][t]) = *((u32_a_t*)tk[j]); + } + if (t == 4) + { + r++; + t = 0; + } + } + } +#undef W + } + + return 0; +#undef tk +#undef k +} + + +static gcry_err_code_t +rijndael_setkey (void *context, const byte *key, const unsigned keylen) +{ + RIJNDAEL_context *ctx = context; + + int rc = do_setkey (ctx, key, keylen); + _gcry_burn_stack ( 100 + 16*sizeof(int)); + return rc; +} + + +/* Make a decryption key from an encryption key. */ +static void +prepare_decryption( RIJNDAEL_context *ctx ) +{ + int r; + +#ifdef USE_AESNI + if (ctx->use_aesni) + { + /* The AES-NI decrypt instructions use the Equivalent Inverse + Cipher, thus we can't use the the standard decrypt key + preparation. */ + m128i_t *ekey = (m128i_t*)ctx->keyschenc; + m128i_t *dkey = (m128i_t*)ctx->keyschdec; + int rr; + + dkey[0] = ekey[ctx->rounds]; + for (r=1, rr=ctx->rounds-1; r < ctx->rounds; r++, rr--) + { + asm volatile + ("movdqu %[ekey], %%xmm1\n\t" + /*"aesimc %%xmm1, %%xmm1\n\t"*/ + ".byte 0x66, 0x0f, 0x38, 0xdb, 0xc9\n\t" + "movdqu %%xmm1, %[dkey]" + : [dkey] "=m" (dkey[r]) + : [ekey] "m" (ekey[rr]) ); + } + dkey[r] = ekey[0]; + } + else +#endif /*USE_AESNI*/ + { + union + { + PROPERLY_ALIGNED_TYPE dummy; + byte *w; + } w; +#define w w.w + + for (r=0; r < MAXROUNDS+1; r++ ) + { + *((u32_a_t*)ctx->keyschdec[r][0]) = *((u32_a_t*)ctx->keyschenc[r][0]); + *((u32_a_t*)ctx->keyschdec[r][1]) = *((u32_a_t*)ctx->keyschenc[r][1]); + *((u32_a_t*)ctx->keyschdec[r][2]) = *((u32_a_t*)ctx->keyschenc[r][2]); + *((u32_a_t*)ctx->keyschdec[r][3]) = *((u32_a_t*)ctx->keyschenc[r][3]); + } +#define W (ctx->keyschdec) + for (r = 1; r < ctx->rounds; r++) + { + w = W[r][0]; + *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) + ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); + + w = W[r][1]; + *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) + ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); + + w = W[r][2]; + *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) + ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); + + w = W[r][3]; + *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) + ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); + } +#undef W +#undef w + } +} + + +/* Encrypt one block. A and B need to be aligned on a 4 byte + boundary. A and B may be the same. */ +static void +do_encrypt_aligned (const RIJNDAEL_context *ctx, + unsigned char *b, const unsigned char *a) +{ +#define rk (ctx->keyschenc) + int rounds = ctx->rounds; + int r; + union + { + u32 tempu32[4]; /* Force correct alignment. */ + byte temp[4][4]; + } u; + + *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(a )) ^ *((u32_a_t*)rk[0][0]); + *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(a+ 4)) ^ *((u32_a_t*)rk[0][1]); + *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(a+ 8)) ^ *((u32_a_t*)rk[0][2]); + *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(a+12)) ^ *((u32_a_t*)rk[0][3]); + *((u32_a_t*)(b )) = (*((u32_a_t*)T1[u.temp[0][0]]) + ^ *((u32_a_t*)T2[u.temp[1][1]]) + ^ *((u32_a_t*)T3[u.temp[2][2]]) + ^ *((u32_a_t*)T4[u.temp[3][3]])); + *((u32_a_t*)(b + 4)) = (*((u32_a_t*)T1[u.temp[1][0]]) + ^ *((u32_a_t*)T2[u.temp[2][1]]) + ^ *((u32_a_t*)T3[u.temp[3][2]]) + ^ *((u32_a_t*)T4[u.temp[0][3]])); + *((u32_a_t*)(b + 8)) = (*((u32_a_t*)T1[u.temp[2][0]]) + ^ *((u32_a_t*)T2[u.temp[3][1]]) + ^ *((u32_a_t*)T3[u.temp[0][2]]) + ^ *((u32_a_t*)T4[u.temp[1][3]])); + *((u32_a_t*)(b +12)) = (*((u32_a_t*)T1[u.temp[3][0]]) + ^ *((u32_a_t*)T2[u.temp[0][1]]) + ^ *((u32_a_t*)T3[u.temp[1][2]]) + ^ *((u32_a_t*)T4[u.temp[2][3]])); + + for (r = 1; r < rounds-1; r++) + { + *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[r][0]); + *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[r][1]); + *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[r][2]); + *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[r][3]); + + *((u32_a_t*)(b )) = (*((u32_a_t*)T1[u.temp[0][0]]) + ^ *((u32_a_t*)T2[u.temp[1][1]]) + ^ *((u32_a_t*)T3[u.temp[2][2]]) + ^ *((u32_a_t*)T4[u.temp[3][3]])); + *((u32_a_t*)(b + 4)) = (*((u32_a_t*)T1[u.temp[1][0]]) + ^ *((u32_a_t*)T2[u.temp[2][1]]) + ^ *((u32_a_t*)T3[u.temp[3][2]]) + ^ *((u32_a_t*)T4[u.temp[0][3]])); + *((u32_a_t*)(b + 8)) = (*((u32_a_t*)T1[u.temp[2][0]]) + ^ *((u32_a_t*)T2[u.temp[3][1]]) + ^ *((u32_a_t*)T3[u.temp[0][2]]) + ^ *((u32_a_t*)T4[u.temp[1][3]])); + *((u32_a_t*)(b +12)) = (*((u32_a_t*)T1[u.temp[3][0]]) + ^ *((u32_a_t*)T2[u.temp[0][1]]) + ^ *((u32_a_t*)T3[u.temp[1][2]]) + ^ *((u32_a_t*)T4[u.temp[2][3]])); + } + + /* Last round is special. */ + *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[rounds-1][0]); + *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[rounds-1][1]); + *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[rounds-1][2]); + *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[rounds-1][3]); + b[ 0] = T1[u.temp[0][0]][1]; + b[ 1] = T1[u.temp[1][1]][1]; + b[ 2] = T1[u.temp[2][2]][1]; + b[ 3] = T1[u.temp[3][3]][1]; + b[ 4] = T1[u.temp[1][0]][1]; + b[ 5] = T1[u.temp[2][1]][1]; + b[ 6] = T1[u.temp[3][2]][1]; + b[ 7] = T1[u.temp[0][3]][1]; + b[ 8] = T1[u.temp[2][0]][1]; + b[ 9] = T1[u.temp[3][1]][1]; + b[10] = T1[u.temp[0][2]][1]; + b[11] = T1[u.temp[1][3]][1]; + b[12] = T1[u.temp[3][0]][1]; + b[13] = T1[u.temp[0][1]][1]; + b[14] = T1[u.temp[1][2]][1]; + b[15] = T1[u.temp[2][3]][1]; + *((u32_a_t*)(b )) ^= *((u32_a_t*)rk[rounds][0]); + *((u32_a_t*)(b+ 4)) ^= *((u32_a_t*)rk[rounds][1]); + *((u32_a_t*)(b+ 8)) ^= *((u32_a_t*)rk[rounds][2]); + *((u32_a_t*)(b+12)) ^= *((u32_a_t*)rk[rounds][3]); +#undef rk +} + + +static void +do_encrypt (const RIJNDAEL_context *ctx, + unsigned char *bx, const unsigned char *ax) +{ + /* BX and AX are not necessary correctly aligned. Thus we might + need to copy them here. We try to align to a 16 bytes. */ + if (((size_t)ax & 0x0f) || ((size_t)bx & 0x0f)) + { + union + { + u32 dummy[4]; + byte a[16] ATTR_ALIGNED_16; + } a; + union + { + u32 dummy[4]; + byte b[16] ATTR_ALIGNED_16; + } b; + + memcpy (a.a, ax, 16); + do_encrypt_aligned (ctx, b.b, a.a); + memcpy (bx, b.b, 16); + } + else + { + do_encrypt_aligned (ctx, bx, ax); + } +} + + +/* Encrypt or decrypt one block using the padlock engine. A and B may + be the same. */ +#ifdef USE_PADLOCK +static void +do_padlock (const RIJNDAEL_context *ctx, int decrypt_flag, + unsigned char *bx, const unsigned char *ax) +{ + /* BX and AX are not necessary correctly aligned. Thus we need to + copy them here. */ + unsigned char a[16] __attribute__ ((aligned (16))); + unsigned char b[16] __attribute__ ((aligned (16))); + unsigned int cword[4] __attribute__ ((aligned (16))); + + /* The control word fields are: + 127:12 11:10 9 8 7 6 5 4 3:0 + RESERVED KSIZE CRYPT INTER KEYGN CIPHR ALIGN DGEST ROUND */ + cword[0] = (ctx->rounds & 15); /* (The mask is just a safeguard.) */ + cword[1] = 0; + cword[2] = 0; + cword[3] = 0; + if (decrypt_flag) + cword[0] |= 0x00000200; + + memcpy (a, ax, 16); + + asm volatile + ("pushfl\n\t" /* Force key reload. */ + "popfl\n\t" + "xchg %3, %%ebx\n\t" /* Load key. */ + "movl $1, %%ecx\n\t" /* Init counter for just one block. */ + ".byte 0xf3, 0x0f, 0xa7, 0xc8\n\t" /* REP XSTORE ECB. */ + "xchg %3, %%ebx\n" /* Restore GOT register. */ + : /* No output */ + : "S" (a), "D" (b), "d" (cword), "r" (ctx->padlockkey) + : "%ecx", "cc", "memory" + ); + + memcpy (bx, b, 16); + +} +#endif /*USE_PADLOCK*/ + + +#ifdef USE_AESNI +/* Encrypt one block using the Intel AES-NI instructions. A and B may + be the same; they need to be properly aligned to 16 bytes. + + Our problem here is that gcc does not allow the "x" constraint for + SSE registers in asm unless you compile with -msse. The common + wisdom is to use a separate file for SSE instructions and build it + separately. This would require a lot of extra build system stuff, + similar to what we do in mpi/ for the asm stuff. What we do + instead is to use standard registers and a bit more of plain asm + which copies the data and key stuff to the SSE registers and later + back. If we decide to implement some block modes with parallelized + AES instructions, it might indeed be better to use plain asm ala + mpi/. */ +static void +do_aesni_enc_aligned (const RIJNDAEL_context *ctx, + unsigned char *b, const unsigned char *a) +{ +#define aesenc_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdc, 0xc1\n\t" +#define aesenclast_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdd, 0xc1\n\t" + /* Note: For now we relax the alignment requirement for A and B: It + does not make much difference because in many case we would need + to memcpy them to an extra buffer; using the movdqu is much faster + that memcpy and movdqa. For CFB we know that the IV is properly + aligned but that is a special case. We should better implement + CFB direct in asm. */ + asm volatile ("movdqu %[src], %%xmm0\n\t" /* xmm0 := *a */ + "movl %[key], %%esi\n\t" /* esi := keyschenc */ + "movdqa (%%esi), %%xmm1\n\t" /* xmm1 := key[0] */ + "pxor %%xmm1, %%xmm0\n\t" /* xmm0 ^= key[0] */ + "movdqa 0x10(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x20(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x30(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x40(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x50(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x60(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x70(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x80(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x90(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xa0(%%esi), %%xmm1\n\t" + "cmp $10, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xb0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xc0(%%esi), %%xmm1\n\t" + "cmp $12, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xd0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xe0(%%esi), %%xmm1\n" + + ".Lenclast%=:\n\t" + aesenclast_xmm1_xmm0 + "movdqu %%xmm0, %[dst]\n" + : [dst] "=m" (*b) + : [src] "m" (*a), + [key] "r" (ctx->keyschenc), + [rounds] "r" (ctx->rounds) + : "%esi", "cc", "memory"); +#undef aesenc_xmm1_xmm0 +#undef aesenclast_xmm1_xmm0 +} + + +static void +do_aesni_dec_aligned (const RIJNDAEL_context *ctx, + unsigned char *b, const unsigned char *a) +{ +#define aesdec_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xde, 0xc1\n\t" +#define aesdeclast_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdf, 0xc1\n\t" + asm volatile ("movdqu %[src], %%xmm0\n\t" /* xmm0 := *a */ + "movl %[key], %%esi\n\t" + "movdqa (%%esi), %%xmm1\n\t" + "pxor %%xmm1, %%xmm0\n\t" /* xmm0 ^= key[0] */ + "movdqa 0x10(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x20(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x30(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x40(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x50(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x60(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x70(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x80(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0x90(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0xa0(%%esi), %%xmm1\n\t" + "cmp $10, %[rounds]\n\t" + "jz .Ldeclast%=\n\t" + aesdec_xmm1_xmm0 + "movdqa 0xb0(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0xc0(%%esi), %%xmm1\n\t" + "cmp $12, %[rounds]\n\t" + "jz .Ldeclast%=\n\t" + aesdec_xmm1_xmm0 + "movdqa 0xd0(%%esi), %%xmm1\n\t" + aesdec_xmm1_xmm0 + "movdqa 0xe0(%%esi), %%xmm1\n" + + ".Ldeclast%=:\n\t" + aesdeclast_xmm1_xmm0 + "movdqu %%xmm0, %[dst]\n" + : [dst] "=m" (*b) + : [src] "m" (*a), + [key] "r" (ctx->keyschdec), + [rounds] "r" (ctx->rounds) + : "%esi", "cc", "memory"); +#undef aesdec_xmm1_xmm0 +#undef aesdeclast_xmm1_xmm0 +} + + +/* Perform a CFB encryption or decryption round using the + initialization vector IV and the input block A. Write the result + to the output block B and update IV. IV needs to be 16 byte + aligned. */ +static void +do_aesni_cfb (const RIJNDAEL_context *ctx, int decrypt_flag, + unsigned char *iv, unsigned char *b, const unsigned char *a) +{ +#define aesenc_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdc, 0xc1\n\t" +#define aesenclast_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdd, 0xc1\n\t" + asm volatile ("movdqa %[iv], %%xmm0\n\t" /* xmm0 := IV */ + "movl %[key], %%esi\n\t" /* esi := keyschenc */ + "movdqa (%%esi), %%xmm1\n\t" /* xmm1 := key[0] */ + "pxor %%xmm1, %%xmm0\n\t" /* xmm0 ^= key[0] */ + "movdqa 0x10(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x20(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x30(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x40(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x50(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x60(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x70(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x80(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x90(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xa0(%%esi), %%xmm1\n\t" + "cmp $10, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xb0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xc0(%%esi), %%xmm1\n\t" + "cmp $12, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xd0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xe0(%%esi), %%xmm1\n" + + ".Lenclast%=:\n\t" + aesenclast_xmm1_xmm0 + "movdqu %[src], %%xmm1\n\t" /* Save input. */ + "pxor %%xmm1, %%xmm0\n\t" /* xmm0 = input ^ IV */ + + "cmp $1, %[decrypt]\n\t" + "jz .Ldecrypt_%=\n\t" + "movdqa %%xmm0, %[iv]\n\t" /* [encrypt] Store IV. */ + "jmp .Lleave_%=\n" + ".Ldecrypt_%=:\n\t" + "movdqa %%xmm1, %[iv]\n" /* [decrypt] Store IV. */ + ".Lleave_%=:\n\t" + "movdqu %%xmm0, %[dst]\n" /* Store output. */ + : [iv] "+m" (*iv), [dst] "=m" (*b) + : [src] "m" (*a), + [key] "g" (ctx->keyschenc), + [rounds] "g" (ctx->rounds), + [decrypt] "m" (decrypt_flag) + : "%esi", "cc", "memory"); +#undef aesenc_xmm1_xmm0 +#undef aesenclast_xmm1_xmm0 +} + +/* Perform a CTR encryption round using the counter CTR and the input + block A. Write the result to the output block B and update CTR. + CTR needs to be a 16 byte aligned little-endian value. */ +static void +do_aesni_ctr (const RIJNDAEL_context *ctx, + unsigned char *ctr, unsigned char *b, const unsigned char *a) +{ +#define aesenc_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdc, 0xc1\n\t" +#define aesenclast_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdd, 0xc1\n\t" + static unsigned char be_mask[16] __attribute__ ((aligned (16))) = + { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; + + asm volatile ("movdqa %[ctr], %%xmm0\n\t" /* xmm0, xmm2 := CTR */ + "movaps %%xmm0, %%xmm2\n\t" + "mov $1, %%esi\n\t" /* xmm2++ (big-endian) */ + "movd %%esi, %%xmm1\n\t" + "pshufb %[mask], %%xmm2\n\t" + "paddq %%xmm1, %%xmm2\n\t" + "pshufb %[mask], %%xmm2\n\t" + "movdqa %%xmm2, %[ctr]\n" /* Update CTR. */ + + "movl %[key], %%esi\n\t" /* esi := keyschenc */ + "movdqa (%%esi), %%xmm1\n\t" /* xmm1 := key[0] */ + "pxor %%xmm1, %%xmm0\n\t" /* xmm0 ^= key[0] */ + "movdqa 0x10(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x20(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x30(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x40(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x50(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x60(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x70(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x80(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0x90(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xa0(%%esi), %%xmm1\n\t" + "cmp $10, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xb0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xc0(%%esi), %%xmm1\n\t" + "cmp $12, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xd0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + "movdqa 0xe0(%%esi), %%xmm1\n" + + ".Lenclast%=:\n\t" + aesenclast_xmm1_xmm0 + "movdqu %[src], %%xmm1\n\t" /* xmm1 := input */ + "pxor %%xmm1, %%xmm0\n\t" /* EncCTR ^= input */ + "movdqu %%xmm0, %[dst]" /* Store EncCTR. */ + + : [ctr] "+m" (*ctr), [dst] "=m" (*b) + : [src] "m" (*a), + [key] "g" (ctx->keyschenc), + [rounds] "g" (ctx->rounds), + [mask] "m" (*be_mask) + : "%esi", "cc", "memory"); +#undef aesenc_xmm1_xmm0 +#undef aesenclast_xmm1_xmm0 +} + + +/* Four blocks at a time variant of do_aesni_ctr. */ +static void +do_aesni_ctr_4 (const RIJNDAEL_context *ctx, + unsigned char *ctr, unsigned char *b, const unsigned char *a) +{ +#define aesenc_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdc, 0xc1\n\t" +#define aesenc_xmm1_xmm2 ".byte 0x66, 0x0f, 0x38, 0xdc, 0xd1\n\t" +#define aesenc_xmm1_xmm3 ".byte 0x66, 0x0f, 0x38, 0xdc, 0xd9\n\t" +#define aesenc_xmm1_xmm4 ".byte 0x66, 0x0f, 0x38, 0xdc, 0xe1\n\t" +#define aesenclast_xmm1_xmm0 ".byte 0x66, 0x0f, 0x38, 0xdd, 0xc1\n\t" +#define aesenclast_xmm1_xmm2 ".byte 0x66, 0x0f, 0x38, 0xdd, 0xd1\n\t" +#define aesenclast_xmm1_xmm3 ".byte 0x66, 0x0f, 0x38, 0xdd, 0xd9\n\t" +#define aesenclast_xmm1_xmm4 ".byte 0x66, 0x0f, 0x38, 0xdd, 0xe1\n\t" + + static unsigned char be_mask[16] __attribute__ ((aligned (16))) = + { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; + + /* Register usage: + esi keyschedule + xmm0 CTR-0 + xmm1 temp / round key + xmm2 CTR-1 + xmm3 CTR-2 + xmm4 CTR-3 + xmm5 temp + */ + + asm volatile ("movdqa %[ctr], %%xmm0\n\t" /* xmm0, xmm2 := CTR */ + "movaps %%xmm0, %%xmm2\n\t" + "mov $1, %%esi\n\t" /* xmm1 := 1 */ + "movd %%esi, %%xmm1\n\t" + "pshufb %[mask], %%xmm2\n\t" /* xmm2 := le(xmm2) */ + "paddq %%xmm1, %%xmm2\n\t" /* xmm2++ */ + "movaps %%xmm2, %%xmm3\n\t" /* xmm3 := xmm2 */ + "paddq %%xmm1, %%xmm3\n\t" /* xmm3++ */ + "movaps %%xmm3, %%xmm4\n\t" /* xmm4 := xmm3 */ + "paddq %%xmm1, %%xmm4\n\t" /* xmm4++ */ + "movaps %%xmm4, %%xmm5\n\t" /* xmm5 := xmm4 */ + "paddq %%xmm1, %%xmm5\n\t" /* xmm5++ */ + "pshufb %[mask], %%xmm2\n\t" /* xmm2 := be(xmm2) */ + "pshufb %[mask], %%xmm3\n\t" /* xmm3 := be(xmm3) */ + "pshufb %[mask], %%xmm4\n\t" /* xmm4 := be(xmm4) */ + "pshufb %[mask], %%xmm5\n\t" /* xmm5 := be(xmm5) */ + "movdqa %%xmm5, %[ctr]\n" /* Update CTR. */ + + "movl %[key], %%esi\n\t" /* esi := keyschenc */ + "movdqa (%%esi), %%xmm1\n\t" /* xmm1 := key[0] */ + "pxor %%xmm1, %%xmm0\n\t" /* xmm0 ^= key[0] */ + "pxor %%xmm1, %%xmm2\n\t" /* xmm2 ^= key[0] */ + "pxor %%xmm1, %%xmm3\n\t" /* xmm3 ^= key[0] */ + "pxor %%xmm1, %%xmm4\n\t" /* xmm4 ^= key[0] */ + "movdqa 0x10(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x20(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x30(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x40(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x50(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x60(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x70(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x80(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0x90(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0xa0(%%esi), %%xmm1\n\t" + "cmp $10, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0xb0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0xc0(%%esi), %%xmm1\n\t" + "cmp $12, %[rounds]\n\t" + "jz .Lenclast%=\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0xd0(%%esi), %%xmm1\n\t" + aesenc_xmm1_xmm0 + aesenc_xmm1_xmm2 + aesenc_xmm1_xmm3 + aesenc_xmm1_xmm4 + "movdqa 0xe0(%%esi), %%xmm1\n" + + ".Lenclast%=:\n\t" + aesenclast_xmm1_xmm0 + aesenclast_xmm1_xmm2 + aesenclast_xmm1_xmm3 + aesenclast_xmm1_xmm4 + + "movdqu %[src], %%xmm1\n\t" /* Get block 1. */ + "pxor %%xmm1, %%xmm0\n\t" /* EncCTR-1 ^= input */ + "movdqu %%xmm0, %[dst]\n\t" /* Store block 1 */ + + "movdqu (16)%[src], %%xmm1\n\t" /* Get block 2. */ + "pxor %%xmm1, %%xmm2\n\t" /* EncCTR-2 ^= input */ + "movdqu %%xmm2, (16)%[dst]\n\t" /* Store block 2. */ + + "movdqu (32)%[src], %%xmm1\n\t" /* Get block 3. */ + "pxor %%xmm1, %%xmm3\n\t" /* EncCTR-3 ^= input */ + "movdqu %%xmm3, (32)%[dst]\n\t" /* Store block 3. */ + + "movdqu (48)%[src], %%xmm1\n\t" /* Get block 4. */ + "pxor %%xmm1, %%xmm4\n\t" /* EncCTR-4 ^= input */ + "movdqu %%xmm4, (48)%[dst]" /* Store block 4. */ + + : [ctr] "+m" (*ctr), [dst] "=m" (*b) + : [src] "m" (*a), + [key] "g" (ctx->keyschenc), + [rounds] "g" (ctx->rounds), + [mask] "m" (*be_mask) + : "%esi", "cc", "memory"); +#undef aesenc_xmm1_xmm0 +#undef aesenc_xmm1_xmm2 +#undef aesenc_xmm1_xmm3 +#undef aesenc_xmm1_xmm4 +#undef aesenclast_xmm1_xmm0 +#undef aesenclast_xmm1_xmm2 +#undef aesenclast_xmm1_xmm3 +#undef aesenclast_xmm1_xmm4 +} + + +static void +do_aesni (RIJNDAEL_context *ctx, int decrypt_flag, + unsigned char *bx, const unsigned char *ax) +{ + + if (decrypt_flag) + { + if (!ctx->decryption_prepared ) + { + prepare_decryption ( ctx ); + ctx->decryption_prepared = 1; + } + do_aesni_dec_aligned (ctx, bx, ax); + } + else + do_aesni_enc_aligned (ctx, bx, ax); +} +#endif /*USE_AESNI*/ + + +static void +rijndael_encrypt (void *context, byte *b, const byte *a) +{ + RIJNDAEL_context *ctx = context; + + if (0) + ; +#ifdef USE_PADLOCK + else if (ctx->use_padlock) + { + do_padlock (ctx, 0, b, a); + _gcry_burn_stack (48 + 15 /* possible padding for alignment */); + } +#endif /*USE_PADLOCK*/ +#ifdef USE_AESNI + else if (ctx->use_aesni) + { + aesni_prepare (); + do_aesni (ctx, 0, b, a); + aesni_cleanup (); + } +#endif /*USE_AESNI*/ + else + { + do_encrypt (ctx, b, a); + _gcry_burn_stack (56 + 2*sizeof(int)); + } +} + + +/* Bulk encryption of complete blocks in CFB mode. Caller needs to + make sure that IV is aligned on an unsigned long boundary. This + function is only intended for the bulk encryption feature of + cipher.c. */ + + +/* Bulk encryption of complete blocks in CBC mode. Caller needs to + make sure that IV is aligned on an unsigned long boundary. This + function is only intended for the bulk encryption feature of + cipher.c. */ + + +/* Bulk encryption of complete blocks in CTR mode. Caller needs to + make sure that CTR is aligned on a 16 byte boundary if AESNI; the + minimum alignment is for an u32. This function is only intended + for the bulk encryption feature of cipher.c. CTR is expected to be + of size BLOCKSIZE. */ + + + +/* Decrypt one block. A and B need to be aligned on a 4 byte boundary + and the decryption must have been prepared. A and B may be the + same. */ +static void +do_decrypt_aligned (RIJNDAEL_context *ctx, + unsigned char *b, const unsigned char *a) +{ +#define rk (ctx->keyschdec) + int rounds = ctx->rounds; + int r; + union + { + u32 tempu32[4]; /* Force correct alignment. */ + byte temp[4][4]; + } u; + + + *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(a )) ^ *((u32_a_t*)rk[rounds][0]); + *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(a+ 4)) ^ *((u32_a_t*)rk[rounds][1]); + *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(a+ 8)) ^ *((u32_a_t*)rk[rounds][2]); + *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(a+12)) ^ *((u32_a_t*)rk[rounds][3]); + + *((u32_a_t*)(b )) = (*((u32_a_t*)T5[u.temp[0][0]]) + ^ *((u32_a_t*)T6[u.temp[3][1]]) + ^ *((u32_a_t*)T7[u.temp[2][2]]) + ^ *((u32_a_t*)T8[u.temp[1][3]])); + *((u32_a_t*)(b+ 4)) = (*((u32_a_t*)T5[u.temp[1][0]]) + ^ *((u32_a_t*)T6[u.temp[0][1]]) + ^ *((u32_a_t*)T7[u.temp[3][2]]) + ^ *((u32_a_t*)T8[u.temp[2][3]])); + *((u32_a_t*)(b+ 8)) = (*((u32_a_t*)T5[u.temp[2][0]]) + ^ *((u32_a_t*)T6[u.temp[1][1]]) + ^ *((u32_a_t*)T7[u.temp[0][2]]) + ^ *((u32_a_t*)T8[u.temp[3][3]])); + *((u32_a_t*)(b+12)) = (*((u32_a_t*)T5[u.temp[3][0]]) + ^ *((u32_a_t*)T6[u.temp[2][1]]) + ^ *((u32_a_t*)T7[u.temp[1][2]]) + ^ *((u32_a_t*)T8[u.temp[0][3]])); + + for (r = rounds-1; r > 1; r--) + { + *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[r][0]); + *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[r][1]); + *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[r][2]); + *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[r][3]); + *((u32_a_t*)(b )) = (*((u32_a_t*)T5[u.temp[0][0]]) + ^ *((u32_a_t*)T6[u.temp[3][1]]) + ^ *((u32_a_t*)T7[u.temp[2][2]]) + ^ *((u32_a_t*)T8[u.temp[1][3]])); + *((u32_a_t*)(b+ 4)) = (*((u32_a_t*)T5[u.temp[1][0]]) + ^ *((u32_a_t*)T6[u.temp[0][1]]) + ^ *((u32_a_t*)T7[u.temp[3][2]]) + ^ *((u32_a_t*)T8[u.temp[2][3]])); + *((u32_a_t*)(b+ 8)) = (*((u32_a_t*)T5[u.temp[2][0]]) + ^ *((u32_a_t*)T6[u.temp[1][1]]) + ^ *((u32_a_t*)T7[u.temp[0][2]]) + ^ *((u32_a_t*)T8[u.temp[3][3]])); + *((u32_a_t*)(b+12)) = (*((u32_a_t*)T5[u.temp[3][0]]) + ^ *((u32_a_t*)T6[u.temp[2][1]]) + ^ *((u32_a_t*)T7[u.temp[1][2]]) + ^ *((u32_a_t*)T8[u.temp[0][3]])); + } + + /* Last round is special. */ + *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[1][0]); + *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[1][1]); + *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[1][2]); + *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[1][3]); + b[ 0] = S5[u.temp[0][0]]; + b[ 1] = S5[u.temp[3][1]]; + b[ 2] = S5[u.temp[2][2]]; + b[ 3] = S5[u.temp[1][3]]; + b[ 4] = S5[u.temp[1][0]]; + b[ 5] = S5[u.temp[0][1]]; + b[ 6] = S5[u.temp[3][2]]; + b[ 7] = S5[u.temp[2][3]]; + b[ 8] = S5[u.temp[2][0]]; + b[ 9] = S5[u.temp[1][1]]; + b[10] = S5[u.temp[0][2]]; + b[11] = S5[u.temp[3][3]]; + b[12] = S5[u.temp[3][0]]; + b[13] = S5[u.temp[2][1]]; + b[14] = S5[u.temp[1][2]]; + b[15] = S5[u.temp[0][3]]; + *((u32_a_t*)(b )) ^= *((u32_a_t*)rk[0][0]); + *((u32_a_t*)(b+ 4)) ^= *((u32_a_t*)rk[0][1]); + *((u32_a_t*)(b+ 8)) ^= *((u32_a_t*)rk[0][2]); + *((u32_a_t*)(b+12)) ^= *((u32_a_t*)rk[0][3]); +#undef rk +} + + +/* Decrypt one block. AX and BX may be the same. */ +static void +do_decrypt (RIJNDAEL_context *ctx, byte *bx, const byte *ax) +{ + if ( !ctx->decryption_prepared ) + { + prepare_decryption ( ctx ); + _gcry_burn_stack (64); + ctx->decryption_prepared = 1; + } + + /* BX and AX are not necessary correctly aligned. Thus we might + need to copy them here. We try to align to a 16 bytes. */ + if (((size_t)ax & 0x0f) || ((size_t)bx & 0x0f)) + { + union + { + u32 dummy[4]; + byte a[16] ATTR_ALIGNED_16; + } a; + union + { + u32 dummy[4]; + byte b[16] ATTR_ALIGNED_16; + } b; + + memcpy (a.a, ax, 16); + do_decrypt_aligned (ctx, b.b, a.a); + memcpy (bx, b.b, 16); + } + else + { + do_decrypt_aligned (ctx, bx, ax); + } +} + + + + +static void +rijndael_decrypt (void *context, byte *b, const byte *a) +{ + RIJNDAEL_context *ctx = context; + + if (0) + ; +#ifdef USE_PADLOCK + else if (ctx->use_padlock) + { + do_padlock (ctx, 1, b, a); + _gcry_burn_stack (48 + 2*sizeof(int) /* FIXME */); + } +#endif /*USE_PADLOCK*/ +#ifdef USE_AESNI + else if (ctx->use_aesni) + { + aesni_prepare (); + do_aesni (ctx, 1, b, a); + aesni_cleanup (); + } +#endif /*USE_AESNI*/ + else + { + do_decrypt (ctx, b, a); + _gcry_burn_stack (56+2*sizeof(int)); + } +} + + +/* Bulk decryption of complete blocks in CFB mode. Caller needs to + make sure that IV is aligned on an unisgned lonhg boundary. This + function is only intended for the bulk encryption feature of + cipher.c. */ + + +/* Bulk decryption of complete blocks in CBC mode. Caller needs to + make sure that IV is aligned on an unsigned long boundary. This + function is only intended for the bulk encryption feature of + cipher.c. */ + + + + +/* Run the self-tests for AES 128. Returns NULL on success. */ + +/* Run the self-tests for AES 192. Returns NULL on success. */ + + +/* Run the self-tests for AES 256. Returns NULL on success. */ + +/* Run all the self-tests and return NULL on success. This function + is used for the on-the-fly self-tests. */ + + +/* SP800-38a.pdf for AES-128. */ + + +/* Complete selftest for AES-128 with all modes and driver code. */ + +/* Complete selftest for AES-192. */ + + +/* Complete selftest for AES-256. */ + + + +/* Run a full self-test for ALGO and return 0 on success. */ + + + + +static const char *rijndael_names[] = + { + "RIJNDAEL", + "AES128", + "AES-128", + NULL + }; + +static gcry_cipher_oid_spec_t rijndael_oids[] = + { + { "2.16.840.1.101.3.4.1.1", GCRY_CIPHER_MODE_ECB }, + { "2.16.840.1.101.3.4.1.2", GCRY_CIPHER_MODE_CBC }, + { "2.16.840.1.101.3.4.1.3", GCRY_CIPHER_MODE_OFB }, + { "2.16.840.1.101.3.4.1.4", GCRY_CIPHER_MODE_CFB }, + { NULL } + }; + +gcry_cipher_spec_t _gcry_cipher_spec_aes = + { + "AES", rijndael_names, rijndael_oids, 16, 128, sizeof (RIJNDAEL_context), + rijndael_setkey, rijndael_encrypt, rijndael_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_rijndael", +#endif + }; + +static const char *rijndael192_names[] = + { + "RIJNDAEL192", + "AES-192", + NULL + }; + +static gcry_cipher_oid_spec_t rijndael192_oids[] = + { + { "2.16.840.1.101.3.4.1.21", GCRY_CIPHER_MODE_ECB }, + { "2.16.840.1.101.3.4.1.22", GCRY_CIPHER_MODE_CBC }, + { "2.16.840.1.101.3.4.1.23", GCRY_CIPHER_MODE_OFB }, + { "2.16.840.1.101.3.4.1.24", GCRY_CIPHER_MODE_CFB }, + { NULL } + }; + +gcry_cipher_spec_t _gcry_cipher_spec_aes192 = + { + "AES192", rijndael192_names, rijndael192_oids, 16, 192, sizeof (RIJNDAEL_context), + rijndael_setkey, rijndael_encrypt, rijndael_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_rijndael", +#endif + }; + +static const char *rijndael256_names[] = + { + "RIJNDAEL256", + "AES-256", + NULL + }; + +static gcry_cipher_oid_spec_t rijndael256_oids[] = + { + { "2.16.840.1.101.3.4.1.41", GCRY_CIPHER_MODE_ECB }, + { "2.16.840.1.101.3.4.1.42", GCRY_CIPHER_MODE_CBC }, + { "2.16.840.1.101.3.4.1.43", GCRY_CIPHER_MODE_OFB }, + { "2.16.840.1.101.3.4.1.44", GCRY_CIPHER_MODE_CFB }, + { NULL } + }; + +gcry_cipher_spec_t _gcry_cipher_spec_aes256 = + { + "AES256", rijndael256_names, rijndael256_oids, 16, 256, + sizeof (RIJNDAEL_context), + rijndael_setkey, rijndael_encrypt, rijndael_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_rijndael", +#endif + }; + + + +GRUB_MOD_INIT(gcry_rijndael) +{ + grub_cipher_register (&_gcry_cipher_spec_aes); + grub_cipher_register (&_gcry_cipher_spec_aes192); + grub_cipher_register (&_gcry_cipher_spec_aes256); +} + +GRUB_MOD_FINI(gcry_rijndael) +{ + grub_cipher_unregister (&_gcry_cipher_spec_aes); + grub_cipher_unregister (&_gcry_cipher_spec_aes192); + grub_cipher_unregister (&_gcry_cipher_spec_aes256); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/rmd.h b/grub-core/lib/libgcrypt-grub/cipher/rmd.h new file mode 100644 index 000000000..75bb21f50 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/rmd.h @@ -0,0 +1,39 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +/* rmd.h - RIPE-MD hash functions + * Copyright (C) 1998, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef G10_RMD_H +#define G10_RMD_H + + +/* We need this here because random.c must have direct access. */ +typedef struct +{ + u32 h0,h1,h2,h3,h4; + u32 nblocks; + byte buf[64]; + int count; +} RMD160_CONTEXT; + +void _gcry_rmd160_init ( void *context ); +void _gcry_rmd160_mixblock ( RMD160_CONTEXT *hd, void *blockof64byte ); + +#endif /*G10_RMD_H*/ diff --git a/grub-core/lib/libgcrypt-grub/cipher/rmd160.c b/grub-core/lib/libgcrypt-grub/cipher/rmd160.c new file mode 100644 index 000000000..620fe98ab --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/rmd160.c @@ -0,0 +1,565 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* rmd160.c - RIPE-MD160 + * Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + + +#include "g10lib.h" +#include "rmd.h" +#include "cipher.h" /* Only used for the rmd160_hash_buffer() prototype. */ + +#include "bithelp.h" + +/********************************* + * RIPEMD-160 is not patented, see (as of 25.10.97) + * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + * Note that the code uses Little Endian byteorder, which is good for + * 386 etc, but we must add some conversion when used on a big endian box. + * + * + * Pseudo-code for RIPEMD-160 + * + * RIPEMD-160 is an iterative hash function that operates on 32-bit words. + * The round function takes as input a 5-word chaining variable and a 16-word + * message block and maps this to a new chaining variable. All operations are + * defined on 32-bit words. Padding is identical to that of MD4. + * + * + * RIPEMD-160: definitions + * + * + * nonlinear functions at bit level: exor, mux, -, mux, - + * + * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15) + * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31) + * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47) + * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63) + * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79) + * + * + * added constants (hexadecimal) + * + * K(j) = 0x00000000 (0 <= j <= 15) + * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2)) + * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3)) + * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5)) + * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7)) + * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2)) + * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3)) + * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5)) + * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7)) + * K'(j) = 0x00000000 (64 <= j <= 79) + * + * + * selection of message word + * + * r(j) = j (0 <= j <= 15) + * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 + * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 + * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 + * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 + * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 + * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 + * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 + * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 + * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 + * + * + * amount for rotate left (rol) + * + * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 + * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 + * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 + * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 + * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 + * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 + * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 + * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 + * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 + * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 + * + * + * initial value (hexadecimal) + * + * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476; + * h4 = 0xC3D2E1F0; + * + * + * RIPEMD-160: pseudo-code + * + * It is assumed that the message after padding consists of t 16-word blocks + * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15. + * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left + * shift (rotate) over s positions. + * + * + * for i := 0 to t-1 { + * A := h0; B := h1; C := h2; D = h3; E = h4; + * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4; + * for j := 0 to 79 { + * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E; + * A := E; E := D; D := rol_10(C); C := B; B := T; + * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)] + [+] K'(j)) [+] E'; + * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T; + * } + * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A'; + * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T; + * } + */ + +/* Some examples: + * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31 + * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe + * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc + * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36 + * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc + * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b + * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189 + * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb + * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528 + */ + + +void +_gcry_rmd160_init (void *context) +{ + RMD160_CONTEXT *hd = context; + + hd->h0 = 0x67452301; + hd->h1 = 0xEFCDAB89; + hd->h2 = 0x98BADCFE; + hd->h3 = 0x10325476; + hd->h4 = 0xC3D2E1F0; + hd->nblocks = 0; + hd->count = 0; +} + + + +/**************** + * Transform the message X which consists of 16 32-bit-words + */ +static void +transform ( RMD160_CONTEXT *hd, const unsigned char *data ) +{ + register u32 a,b,c,d,e; + u32 aa,bb,cc,dd,ee,t; +#ifdef WORDS_BIGENDIAN + u32 x[16]; + { + int i; + byte *p2; + const byte *p1; + for (i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) + { + p2[3] = *p1++; + p2[2] = *p1++; + p2[1] = *p1++; + p2[0] = *p1++; + } + } +#else + /* This version is better because it is always aligned; + * The performance penalty on a 586-100 is about 6% which + * is acceptable - because the data is more local it might + * also be possible that this is faster on some machines. + * This function (when compiled with -02 on gcc 2.7.2) + * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec; + * [measured with a 4MB data and "gpgm --print-md rmd160"] */ + u32 x[16]; + memcpy( x, data, 64 ); +#endif + + +#define K0 0x00000000 +#define K1 0x5A827999 +#define K2 0x6ED9EBA1 +#define K3 0x8F1BBCDC +#define K4 0xA953FD4E +#define KK0 0x50A28BE6 +#define KK1 0x5C4DD124 +#define KK2 0x6D703EF3 +#define KK3 0x7A6D76E9 +#define KK4 0x00000000 +#define F0(x,y,z) ( (x) ^ (y) ^ (z) ) +#define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) ) +#define F2(x,y,z) ( ((x) | ~(y)) ^ (z) ) +#define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) ) +#define F4(x,y,z) ( (x) ^ ((y) | ~(z)) ) +#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \ + a = rol(t,s) + e; \ + c = rol(c,10); \ + } while(0) + + /* left lane */ + a = hd->h0; + b = hd->h1; + c = hd->h2; + d = hd->h3; + e = hd->h4; + R( a, b, c, d, e, F0, K0, 0, 11 ); + R( e, a, b, c, d, F0, K0, 1, 14 ); + R( d, e, a, b, c, F0, K0, 2, 15 ); + R( c, d, e, a, b, F0, K0, 3, 12 ); + R( b, c, d, e, a, F0, K0, 4, 5 ); + R( a, b, c, d, e, F0, K0, 5, 8 ); + R( e, a, b, c, d, F0, K0, 6, 7 ); + R( d, e, a, b, c, F0, K0, 7, 9 ); + R( c, d, e, a, b, F0, K0, 8, 11 ); + R( b, c, d, e, a, F0, K0, 9, 13 ); + R( a, b, c, d, e, F0, K0, 10, 14 ); + R( e, a, b, c, d, F0, K0, 11, 15 ); + R( d, e, a, b, c, F0, K0, 12, 6 ); + R( c, d, e, a, b, F0, K0, 13, 7 ); + R( b, c, d, e, a, F0, K0, 14, 9 ); + R( a, b, c, d, e, F0, K0, 15, 8 ); + R( e, a, b, c, d, F1, K1, 7, 7 ); + R( d, e, a, b, c, F1, K1, 4, 6 ); + R( c, d, e, a, b, F1, K1, 13, 8 ); + R( b, c, d, e, a, F1, K1, 1, 13 ); + R( a, b, c, d, e, F1, K1, 10, 11 ); + R( e, a, b, c, d, F1, K1, 6, 9 ); + R( d, e, a, b, c, F1, K1, 15, 7 ); + R( c, d, e, a, b, F1, K1, 3, 15 ); + R( b, c, d, e, a, F1, K1, 12, 7 ); + R( a, b, c, d, e, F1, K1, 0, 12 ); + R( e, a, b, c, d, F1, K1, 9, 15 ); + R( d, e, a, b, c, F1, K1, 5, 9 ); + R( c, d, e, a, b, F1, K1, 2, 11 ); + R( b, c, d, e, a, F1, K1, 14, 7 ); + R( a, b, c, d, e, F1, K1, 11, 13 ); + R( e, a, b, c, d, F1, K1, 8, 12 ); + R( d, e, a, b, c, F2, K2, 3, 11 ); + R( c, d, e, a, b, F2, K2, 10, 13 ); + R( b, c, d, e, a, F2, K2, 14, 6 ); + R( a, b, c, d, e, F2, K2, 4, 7 ); + R( e, a, b, c, d, F2, K2, 9, 14 ); + R( d, e, a, b, c, F2, K2, 15, 9 ); + R( c, d, e, a, b, F2, K2, 8, 13 ); + R( b, c, d, e, a, F2, K2, 1, 15 ); + R( a, b, c, d, e, F2, K2, 2, 14 ); + R( e, a, b, c, d, F2, K2, 7, 8 ); + R( d, e, a, b, c, F2, K2, 0, 13 ); + R( c, d, e, a, b, F2, K2, 6, 6 ); + R( b, c, d, e, a, F2, K2, 13, 5 ); + R( a, b, c, d, e, F2, K2, 11, 12 ); + R( e, a, b, c, d, F2, K2, 5, 7 ); + R( d, e, a, b, c, F2, K2, 12, 5 ); + R( c, d, e, a, b, F3, K3, 1, 11 ); + R( b, c, d, e, a, F3, K3, 9, 12 ); + R( a, b, c, d, e, F3, K3, 11, 14 ); + R( e, a, b, c, d, F3, K3, 10, 15 ); + R( d, e, a, b, c, F3, K3, 0, 14 ); + R( c, d, e, a, b, F3, K3, 8, 15 ); + R( b, c, d, e, a, F3, K3, 12, 9 ); + R( a, b, c, d, e, F3, K3, 4, 8 ); + R( e, a, b, c, d, F3, K3, 13, 9 ); + R( d, e, a, b, c, F3, K3, 3, 14 ); + R( c, d, e, a, b, F3, K3, 7, 5 ); + R( b, c, d, e, a, F3, K3, 15, 6 ); + R( a, b, c, d, e, F3, K3, 14, 8 ); + R( e, a, b, c, d, F3, K3, 5, 6 ); + R( d, e, a, b, c, F3, K3, 6, 5 ); + R( c, d, e, a, b, F3, K3, 2, 12 ); + R( b, c, d, e, a, F4, K4, 4, 9 ); + R( a, b, c, d, e, F4, K4, 0, 15 ); + R( e, a, b, c, d, F4, K4, 5, 5 ); + R( d, e, a, b, c, F4, K4, 9, 11 ); + R( c, d, e, a, b, F4, K4, 7, 6 ); + R( b, c, d, e, a, F4, K4, 12, 8 ); + R( a, b, c, d, e, F4, K4, 2, 13 ); + R( e, a, b, c, d, F4, K4, 10, 12 ); + R( d, e, a, b, c, F4, K4, 14, 5 ); + R( c, d, e, a, b, F4, K4, 1, 12 ); + R( b, c, d, e, a, F4, K4, 3, 13 ); + R( a, b, c, d, e, F4, K4, 8, 14 ); + R( e, a, b, c, d, F4, K4, 11, 11 ); + R( d, e, a, b, c, F4, K4, 6, 8 ); + R( c, d, e, a, b, F4, K4, 15, 5 ); + R( b, c, d, e, a, F4, K4, 13, 6 ); + + aa = a; bb = b; cc = c; dd = d; ee = e; + + /* right lane */ + a = hd->h0; + b = hd->h1; + c = hd->h2; + d = hd->h3; + e = hd->h4; + R( a, b, c, d, e, F4, KK0, 5, 8); + R( e, a, b, c, d, F4, KK0, 14, 9); + R( d, e, a, b, c, F4, KK0, 7, 9); + R( c, d, e, a, b, F4, KK0, 0, 11); + R( b, c, d, e, a, F4, KK0, 9, 13); + R( a, b, c, d, e, F4, KK0, 2, 15); + R( e, a, b, c, d, F4, KK0, 11, 15); + R( d, e, a, b, c, F4, KK0, 4, 5); + R( c, d, e, a, b, F4, KK0, 13, 7); + R( b, c, d, e, a, F4, KK0, 6, 7); + R( a, b, c, d, e, F4, KK0, 15, 8); + R( e, a, b, c, d, F4, KK0, 8, 11); + R( d, e, a, b, c, F4, KK0, 1, 14); + R( c, d, e, a, b, F4, KK0, 10, 14); + R( b, c, d, e, a, F4, KK0, 3, 12); + R( a, b, c, d, e, F4, KK0, 12, 6); + R( e, a, b, c, d, F3, KK1, 6, 9); + R( d, e, a, b, c, F3, KK1, 11, 13); + R( c, d, e, a, b, F3, KK1, 3, 15); + R( b, c, d, e, a, F3, KK1, 7, 7); + R( a, b, c, d, e, F3, KK1, 0, 12); + R( e, a, b, c, d, F3, KK1, 13, 8); + R( d, e, a, b, c, F3, KK1, 5, 9); + R( c, d, e, a, b, F3, KK1, 10, 11); + R( b, c, d, e, a, F3, KK1, 14, 7); + R( a, b, c, d, e, F3, KK1, 15, 7); + R( e, a, b, c, d, F3, KK1, 8, 12); + R( d, e, a, b, c, F3, KK1, 12, 7); + R( c, d, e, a, b, F3, KK1, 4, 6); + R( b, c, d, e, a, F3, KK1, 9, 15); + R( a, b, c, d, e, F3, KK1, 1, 13); + R( e, a, b, c, d, F3, KK1, 2, 11); + R( d, e, a, b, c, F2, KK2, 15, 9); + R( c, d, e, a, b, F2, KK2, 5, 7); + R( b, c, d, e, a, F2, KK2, 1, 15); + R( a, b, c, d, e, F2, KK2, 3, 11); + R( e, a, b, c, d, F2, KK2, 7, 8); + R( d, e, a, b, c, F2, KK2, 14, 6); + R( c, d, e, a, b, F2, KK2, 6, 6); + R( b, c, d, e, a, F2, KK2, 9, 14); + R( a, b, c, d, e, F2, KK2, 11, 12); + R( e, a, b, c, d, F2, KK2, 8, 13); + R( d, e, a, b, c, F2, KK2, 12, 5); + R( c, d, e, a, b, F2, KK2, 2, 14); + R( b, c, d, e, a, F2, KK2, 10, 13); + R( a, b, c, d, e, F2, KK2, 0, 13); + R( e, a, b, c, d, F2, KK2, 4, 7); + R( d, e, a, b, c, F2, KK2, 13, 5); + R( c, d, e, a, b, F1, KK3, 8, 15); + R( b, c, d, e, a, F1, KK3, 6, 5); + R( a, b, c, d, e, F1, KK3, 4, 8); + R( e, a, b, c, d, F1, KK3, 1, 11); + R( d, e, a, b, c, F1, KK3, 3, 14); + R( c, d, e, a, b, F1, KK3, 11, 14); + R( b, c, d, e, a, F1, KK3, 15, 6); + R( a, b, c, d, e, F1, KK3, 0, 14); + R( e, a, b, c, d, F1, KK3, 5, 6); + R( d, e, a, b, c, F1, KK3, 12, 9); + R( c, d, e, a, b, F1, KK3, 2, 12); + R( b, c, d, e, a, F1, KK3, 13, 9); + R( a, b, c, d, e, F1, KK3, 9, 12); + R( e, a, b, c, d, F1, KK3, 7, 5); + R( d, e, a, b, c, F1, KK3, 10, 15); + R( c, d, e, a, b, F1, KK3, 14, 8); + R( b, c, d, e, a, F0, KK4, 12, 8); + R( a, b, c, d, e, F0, KK4, 15, 5); + R( e, a, b, c, d, F0, KK4, 10, 12); + R( d, e, a, b, c, F0, KK4, 4, 9); + R( c, d, e, a, b, F0, KK4, 1, 12); + R( b, c, d, e, a, F0, KK4, 5, 5); + R( a, b, c, d, e, F0, KK4, 8, 14); + R( e, a, b, c, d, F0, KK4, 7, 6); + R( d, e, a, b, c, F0, KK4, 6, 8); + R( c, d, e, a, b, F0, KK4, 2, 13); + R( b, c, d, e, a, F0, KK4, 13, 6); + R( a, b, c, d, e, F0, KK4, 14, 5); + R( e, a, b, c, d, F0, KK4, 0, 15); + R( d, e, a, b, c, F0, KK4, 3, 13); + R( c, d, e, a, b, F0, KK4, 9, 11); + R( b, c, d, e, a, F0, KK4, 11, 11); + + + t = hd->h1 + d + cc; + hd->h1 = hd->h2 + e + dd; + hd->h2 = hd->h3 + a + ee; + hd->h3 = hd->h4 + b + aa; + hd->h4 = hd->h0 + c + bb; + hd->h0 = t; +} + + +/* Update the message digest with the contents + * of INBUF with length INLEN. + */ +static void +rmd160_write ( void *context, const void *inbuf_arg, size_t inlen) +{ + const unsigned char *inbuf = inbuf_arg; + RMD160_CONTEXT *hd = context; + + if( hd->count == 64 ) /* flush the buffer */ + { + transform( hd, hd->buf ); + _gcry_burn_stack (108+5*sizeof(void*)); + hd->count = 0; + hd->nblocks++; + } + if( !inbuf ) + return; + if( hd->count ) + { + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; + rmd160_write( hd, NULL, 0 ); + if( !inlen ) + return; + } + + while( inlen >= 64 ) + { + transform( hd, inbuf ); + hd->count = 0; + hd->nblocks++; + inlen -= 64; + inbuf += 64; + } + _gcry_burn_stack (108+5*sizeof(void*)); + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; +} + +/**************** + * Apply the rmd160 transform function on the buffer which must have + * a length 64 bytes. Do not use this function together with the + * other functions, use rmd160_init to initialize internal variables. + * Returns: 16 bytes in buffer with the mixed contentes of buffer. + */ + + +/* The routine terminates the computation + */ + +static void +rmd160_final( void *context ) +{ + RMD160_CONTEXT *hd = context; + u32 t, msb, lsb; + byte *p; + + rmd160_write(hd, NULL, 0); /* flush */; + + t = hd->nblocks; + /* multiply by 64 to make a byte count */ + lsb = t << 6; + msb = t >> 26; + /* add the count */ + t = lsb; + if( (lsb += hd->count) < t ) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 29; + + if( hd->count < 56 ) /* enough room */ + { + hd->buf[hd->count++] = 0x80; /* pad */ + while( hd->count < 56 ) + hd->buf[hd->count++] = 0; /* pad */ + } + else /* need one extra block */ + { + hd->buf[hd->count++] = 0x80; /* pad character */ + while( hd->count < 64 ) + hd->buf[hd->count++] = 0; + rmd160_write(hd, NULL, 0); /* flush */; + memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ + } + /* append the 64 bit count */ + hd->buf[56] = lsb ; + hd->buf[57] = lsb >> 8; + hd->buf[58] = lsb >> 16; + hd->buf[59] = lsb >> 24; + hd->buf[60] = msb ; + hd->buf[61] = msb >> 8; + hd->buf[62] = msb >> 16; + hd->buf[63] = msb >> 24; + transform( hd, hd->buf ); + _gcry_burn_stack (108+5*sizeof(void*)); + + p = hd->buf; +#ifdef WORDS_BIGENDIAN +#define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \ + *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0) +#else /* little endian */ +#define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) +#endif + X(0); + X(1); + X(2); + X(3); + X(4); +#undef X +} + +static byte * +rmd160_read( void *context ) +{ + RMD160_CONTEXT *hd = context; + + return hd->buf; +} + + + +/**************** + * Shortcut functions which puts the hash value of the supplied buffer + * into outbuf which must have a size of 20 bytes. + */ + +static byte asn[15] = /* Object ID is 1.3.36.3.2.1 */ + { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x24, 0x03, + 0x02, 0x01, 0x05, 0x00, 0x04, 0x14 }; + +static gcry_md_oid_spec_t oid_spec_rmd160[] = + { + /* rsaSignatureWithripemd160 */ + { "1.3.36.3.3.1.2" }, + /* TeleTrust hash algorithm. */ + { "1.3.36.3.2.1" }, + { NULL } + }; + +gcry_md_spec_t _gcry_digest_spec_rmd160 = + { + "RIPEMD160", asn, DIM (asn), oid_spec_rmd160, 20, + _gcry_rmd160_init, rmd160_write, rmd160_final, rmd160_read, + sizeof (RMD160_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_rmd160", +#endif + .blocksize = 64 + }; + + +GRUB_MOD_INIT(gcry_rmd160) +{ + COMPILE_TIME_ASSERT(sizeof (RMD160_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_rmd160); +} + +GRUB_MOD_FINI(gcry_rmd160) +{ + grub_md_unregister (&_gcry_digest_spec_rmd160); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/rsa.c b/grub-core/lib/libgcrypt-grub/cipher/rsa.c new file mode 100644 index 000000000..6e0187b9f --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/rsa.c @@ -0,0 +1,395 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* rsa.c - RSA implementation + * Copyright (C) 1997, 1998, 1999 by Werner Koch (dd9jn) + * Copyright (C) 2000, 2001, 2002, 2003, 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +/* This code uses an algorithm protected by U.S. Patent #4,405,829 + which expired on September 20, 2000. The patent holder placed that + patent into the public domain on Sep 6th, 2000. +*/ + + +#include "g10lib.h" +#include "mpi.h" +#include "cipher.h" + + +typedef struct +{ + gcry_mpi_t n; /* modulus */ + gcry_mpi_t e; /* exponent */ +} RSA_public_key; + + +typedef struct +{ + gcry_mpi_t n; /* public modulus */ + gcry_mpi_t e; /* public exponent */ + gcry_mpi_t d; /* exponent */ + gcry_mpi_t p; /* prime p. */ + gcry_mpi_t q; /* prime q. */ + gcry_mpi_t u; /* inverse of p mod q. */ +} RSA_secret_key; + + +/* A sample 1024 bit RSA key used for the selftests. */ +/* A sample 1024 bit RSA key used for the selftests (public only). */ + + + + +static int check_secret_key (RSA_secret_key *sk); +static void public (gcry_mpi_t output, gcry_mpi_t input, RSA_public_key *skey); + + +/* Check that a freshly generated key actually works. Returns 0 on success. */ + + +/* Callback used by the prime generation to test whether the exponent + is suitable. Returns 0 if the test has been passed. */ + +/**************** + * Generate a key pair with a key of size NBITS. + * USE_E = 0 let Libcgrypt decide what exponent to use. + * = 1 request the use of a "secure" exponent; this is required by some + * specification to be 65537. + * > 2 Use this public exponent. If the given exponent + * is not odd one is internally added to it. + * TRANSIENT_KEY: If true, generate the primes using the standard RNG. + * Returns: 2 structures filled with all needed values + */ + + +/* Helper for generate_x931. */ + + +/* Helper for generate_x931. */ + + + +/* Variant of the standard key generation code using the algorithm + from X9.31. Using this algorithm has the advantage that the + generation can be made deterministic which is required for CAVS + testing. */ + + +/**************** + * Test whether the secret key is valid. + * Returns: true if this is a valid key. + */ +static int +check_secret_key( RSA_secret_key *sk ) +{ + int rc; + gcry_mpi_t temp = mpi_alloc( mpi_get_nlimbs(sk->p)*2 ); + + mpi_mul(temp, sk->p, sk->q ); + rc = mpi_cmp( temp, sk->n ); + mpi_free(temp); + return !rc; +} + + + +/**************** + * Public key operation. Encrypt INPUT with PKEY and put result into OUTPUT. + * + * c = m^e mod n + * + * Where c is OUTPUT, m is INPUT and e,n are elements of PKEY. + */ +static void +public(gcry_mpi_t output, gcry_mpi_t input, RSA_public_key *pkey ) +{ + if( output == input ) /* powm doesn't like output and input the same */ + { + gcry_mpi_t x = mpi_alloc( mpi_get_nlimbs(input)*2 ); + mpi_powm( x, input, pkey->e, pkey->n ); + mpi_set(output, x); + mpi_free(x); + } + else + mpi_powm( output, input, pkey->e, pkey->n ); +} + +#if 0 +static void +stronger_key_check ( RSA_secret_key *skey ) +{ + gcry_mpi_t t = mpi_alloc_secure ( 0 ); + gcry_mpi_t t1 = mpi_alloc_secure ( 0 ); + gcry_mpi_t t2 = mpi_alloc_secure ( 0 ); + gcry_mpi_t phi = mpi_alloc_secure ( 0 ); + + /* check that n == p * q */ + mpi_mul( t, skey->p, skey->q); + if (mpi_cmp( t, skey->n) ) + log_info ( "RSA Oops: n != p * q\n" ); + + /* check that p is less than q */ + if( mpi_cmp( skey->p, skey->q ) > 0 ) + { + log_info ("RSA Oops: p >= q - fixed\n"); + _gcry_mpi_swap ( skey->p, skey->q); + } + + /* check that e divides neither p-1 nor q-1 */ + mpi_sub_ui(t, skey->p, 1 ); + mpi_fdiv_r(t, t, skey->e ); + if ( !mpi_cmp_ui( t, 0) ) + log_info ( "RSA Oops: e divides p-1\n" ); + mpi_sub_ui(t, skey->q, 1 ); + mpi_fdiv_r(t, t, skey->e ); + if ( !mpi_cmp_ui( t, 0) ) + log_info ( "RSA Oops: e divides q-1\n" ); + + /* check that d is correct */ + mpi_sub_ui( t1, skey->p, 1 ); + mpi_sub_ui( t2, skey->q, 1 ); + mpi_mul( phi, t1, t2 ); + gcry_mpi_gcd(t, t1, t2); + mpi_fdiv_q(t, phi, t); + mpi_invm(t, skey->e, t ); + if ( mpi_cmp(t, skey->d ) ) + { + log_info ( "RSA Oops: d is wrong - fixed\n"); + mpi_set (skey->d, t); + _gcry_log_mpidump (" fixed d", skey->d); + } + + /* check for correctness of u */ + mpi_invm(t, skey->p, skey->q ); + if ( mpi_cmp(t, skey->u ) ) + { + log_info ( "RSA Oops: u is wrong - fixed\n"); + mpi_set (skey->u, t); + _gcry_log_mpidump (" fixed u", skey->u); + } + + log_info ( "RSA secret key check finished\n"); + + mpi_free (t); + mpi_free (t1); + mpi_free (t2); + mpi_free (phi); +} +#endif + + + +/**************** + * Secret key operation. Encrypt INPUT with SKEY and put result into OUTPUT. + * + * m = c^d mod n + * + * Or faster: + * + * m1 = c ^ (d mod (p-1)) mod p + * m2 = c ^ (d mod (q-1)) mod q + * h = u * (m2 - m1) mod q + * m = m1 + h * p + * + * Where m is OUTPUT, c is INPUT and d,n,p,q,u are elements of SKEY. + */ + + + +/* Perform RSA blinding. */ + +/* Undo RSA blinding. */ + +/********************************************* + ************** interface ****************** + *********************************************/ + + + +#define rsa_generate 0 + +static gcry_err_code_t +rsa_check_secret_key (int algo, gcry_mpi_t *skey) +{ + gcry_err_code_t err = GPG_ERR_NO_ERROR; + RSA_secret_key sk; + + (void)algo; + + sk.n = skey[0]; + sk.e = skey[1]; + sk.d = skey[2]; + sk.p = skey[3]; + sk.q = skey[4]; + sk.u = skey[5]; + + if (!sk.p || !sk.q || !sk.u) + err = GPG_ERR_NO_OBJ; /* To check the key we need the optional + parameters. */ + else if (!check_secret_key (&sk)) + err = GPG_ERR_BAD_SECKEY; + + return err; +} + + +static gcry_err_code_t +rsa_encrypt (int algo, gcry_mpi_t *resarr, gcry_mpi_t data, + gcry_mpi_t *pkey, int flags) +{ + RSA_public_key pk; + + (void)algo; + (void)flags; + + pk.n = pkey[0]; + pk.e = pkey[1]; + resarr[0] = mpi_alloc (mpi_get_nlimbs (pk.n)); + public (resarr[0], data, &pk); + + return GPG_ERR_NO_ERROR; +} + + +#define rsa_decrypt 0 + +#define rsa_sign 0 + +static gcry_err_code_t +rsa_verify (int algo, gcry_mpi_t hash, gcry_mpi_t *data, gcry_mpi_t *pkey, + int (*cmp) (void *opaque, gcry_mpi_t tmp), + void *opaquev) +{ + RSA_public_key pk; + gcry_mpi_t result; + gcry_err_code_t rc; + + (void)algo; + (void)cmp; + (void)opaquev; + + pk.n = pkey[0]; + pk.e = pkey[1]; + result = gcry_mpi_new ( 160 ); + public( result, data[0], &pk ); +#ifdef IS_DEVELOPMENT_VERSION + if (DBG_CIPHER) + { + log_mpidump ("rsa verify result:", result ); + log_mpidump (" hash:", hash ); + } +#endif /*IS_DEVELOPMENT_VERSION*/ + if (cmp) + rc = (*cmp) (opaquev, result); + else + rc = mpi_cmp (result, hash) ? GPG_ERR_BAD_SIGNATURE : GPG_ERR_NO_ERROR; + gcry_mpi_release (result); + + return rc; +} + + +static unsigned int +rsa_get_nbits (int algo, gcry_mpi_t *pkey) +{ + (void)algo; + + return mpi_get_nbits (pkey[0]); +} + + +/* Compute a keygrip. MD is the hash context which we are going to + update. KEYPARAM is an S-expression with the key parameters, this + is usually a public key but may also be a secret key. An example + of such an S-expression is: + + (rsa + (n #00B...#) + (e #010001#)) + + PKCS-15 says that for RSA only the modulus should be hashed - + however, it is not clear whether this is meant to use the raw bytes + (assuming this is an unsigned integer) or whether the DER required + 0 should be prefixed. We hash the raw bytes. */ + + + + +/* + Self-test section. + */ + + + + +/* Given an S-expression ENCR_DATA of the form: + + (enc-val + (rsa + (a a-value))) + + as returned by gcry_pk_decrypt, return the the A-VALUE. On error, + return NULL. */ + + + + + + +/* Run a full self-test for ALGO and return 0 on success. */ + + + + +static const char *rsa_names[] = + { + "rsa", + "openpgp-rsa", + "oid.1.2.840.113549.1.1.1", + NULL, + }; + +gcry_pk_spec_t _gcry_pubkey_spec_rsa = + { + "RSA", rsa_names, + "ne", "nedpqu", "a", "s", "n", + GCRY_PK_USAGE_SIGN | GCRY_PK_USAGE_ENCR, + rsa_generate, + rsa_check_secret_key, + rsa_encrypt, + rsa_decrypt, + rsa_sign, + rsa_verify, + rsa_get_nbits, +#ifdef GRUB_UTIL + .modname = "gcry_rsa", +#endif + }; + + +GRUB_MOD_INIT(gcry_rsa) +{ + grub_crypto_pk_rsa = &_gcry_pubkey_spec_rsa; +} + +GRUB_MOD_FINI(gcry_rsa) +{ + grub_crypto_pk_rsa = 0; +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/seed.c b/grub-core/lib/libgcrypt-grub/cipher/seed.c new file mode 100644 index 000000000..087e27bf9 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/seed.c @@ -0,0 +1,461 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* SEED for libgcrypt + * Copyright (C) 2006 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * -- + * This implementation was provided for libgcrypt in public domain + * by Hye-Shik Chang , July 2006. + */ + + +#include "types.h" /* for byte and u32 typedefs */ +#include "g10lib.h" +#include "cipher.h" + +#define NUMKC 16 + +#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \ + ((u32)(pt)[2] << 8) ^ ((u32)(pt)[3])) +#define PUTU32(ct, st) { (ct)[0] = (byte)((st) >> 24); \ + (ct)[1] = (byte)((st) >> 16); \ + (ct)[2] = (byte)((st) >> 8); \ + (ct)[3] = (byte)(st); } + +union wordbuf +{ + u32 w; + byte b[4]; +}; + +#ifdef WORDS_BIGENDIAN +#define b0 b[3] +#define b1 b[2] +#define b2 b[1] +#define b3 b[0] +#else +#define b0 b[0] +#define b1 b[1] +#define b2 b[2] +#define b3 b[3] +#endif + + +typedef struct +{ + u32 keyschedule[32]; +} SEED_context; + +static const u32 SS0[256] = { + 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, + 0x2c8ca0ac, 0x25052124, 0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, + 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360, 0x28082028, 0x04444044, + 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314, + 0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, + 0x12c2d2d0, 0x2ecee2ec, 0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, + 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074, 0x2ccce0ec, 0x15859194, + 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100, + 0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, + 0x32c2f2f0, 0x19c9d1d8, 0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, + 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8, 0x20406060, 0x10405050, + 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c, + 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, + 0x2f8fa3ac, 0x15c5d1d4, 0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, + 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008, 0x1f0f131c, 0x19899198, + 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0, + 0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, + 0x0e0e020c, 0x2b8ba3a8, 0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, + 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208, 0x3f8fb3bc, 0x2fcfe3ec, + 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064, + 0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, + 0x2b4b6368, 0x26466264, 0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, + 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0, 0x3a4a7278, 0x07474344, + 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc, + 0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, + 0x22022220, 0x38083038, 0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, + 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394, 0x35053134, 0x0bcbc3c8, + 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188, + 0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, + 0x02828280, 0x04c4c0c4, 0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, + 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8, 0x0f0f030c, 0x0e8e828c, + 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4, + 0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, + 0x2d0d212c, 0x00404040, 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, + 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154, 0x3b0b3338, 0x1cccd0dc, + 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254, + 0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, + 0x25456164, 0x3acaf2f8, 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, + 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0, 0x31013130, 0x2acae2e8, + 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088, + 0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, + 0x07070304, 0x33033330, 0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, + 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298, +}; + +static const u32 SS1[256] = { + 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, + 0xb03383b3, 0xb83888b0, 0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, + 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53, 0xc003c3c3, 0x60224262, + 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3, + 0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, + 0x34360632, 0x480b4b43, 0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, + 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0, 0xc002c2c2, 0x44054541, + 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890, + 0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, + 0x0c0d0d01, 0xdc1fcfd3, 0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, + 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272, 0x40024242, 0xd414c4d0, + 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83, + 0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, + 0xa82a8aa2, 0x34340430, 0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, + 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0, 0x54174753, 0xac2e8ea2, + 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1, + 0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, + 0x682a4a62, 0xb03181b1, 0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, + 0x20220222, 0x04040400, 0x68284860, 0x70314171, 0x04070703, 0xd81bcbd3, + 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951, + 0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, + 0xa82b8ba3, 0xd010c0d0, 0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, + 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3, 0x94168692, 0x783b4b73, + 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41, + 0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, + 0xb83a8ab2, 0x6c2e4e62, 0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, + 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0, 0x14150511, 0xf83bcbf3, + 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303, + 0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, + 0xe82acae2, 0x08090901, 0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, + 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501, 0xf83acaf2, 0x00010101, + 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343, + 0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, + 0x48084840, 0x78394971, 0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, + 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53, 0x74374773, 0x54144450, + 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642, + 0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, + 0xc809c9c1, 0xfc3dcdf1, 0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, + 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70, 0x0c0e0e02, 0x50104050, + 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393, + 0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, + 0x080a0a02, 0x84078783, 0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, + 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3, +}; + +static const u32 SS2[256] = { + 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, + 0xa0ac2c8c, 0x21242505, 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, + 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343, 0x20282808, 0x40440444, + 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707, + 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, + 0xd2d012c2, 0xe2ec2ece, 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, + 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444, 0xe0ec2ccc, 0x91941585, + 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101, + 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, + 0xf2f032c2, 0xd1d819c9, 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, + 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9, 0x60602040, 0x50501040, + 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f, + 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, + 0xa3ac2f8f, 0xd1d415c5, 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, + 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808, 0x131c1f0f, 0x91981989, + 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1, + 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, + 0x020c0e0e, 0xa3a82b8b, 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, + 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a, 0xb3bc3f8f, 0xe3ec2fcf, + 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444, + 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, + 0x63682b4b, 0x62642646, 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, + 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0, 0x72783a4a, 0x43440747, + 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf, + 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, + 0x22202202, 0x30383808, 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, + 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787, 0x31343505, 0xc3c80bcb, + 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989, + 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, + 0x82800282, 0xc0c404c4, 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, + 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888, 0x030c0f0f, 0x828c0e8e, + 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484, + 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, + 0x212c2d0d, 0x40400040, 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, + 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545, 0x33383b0b, 0xd0dc1ccc, + 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646, + 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, + 0x61642545, 0xf2f83aca, 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, + 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282, 0x31303101, 0xe2e82aca, + 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888, + 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, + 0x03040707, 0x33303303, 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, + 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a, +}; + +static const u32 SS3[256] = { + 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, + 0x83b3b033, 0x88b0b838, 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, + 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b, 0xc3c3c003, 0x42626022, + 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427, + 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, + 0x06323436, 0x4b43480b, 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, + 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434, 0xc2c2c002, 0x45414405, + 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818, + 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, + 0x0d010c0d, 0xcfd3dc1f, 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, + 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032, 0x42424002, 0xc4d0d414, + 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b, + 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, + 0x8aa2a82a, 0x04303434, 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, + 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838, 0x47535417, 0x8ea2ac2e, + 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839, + 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, + 0x4a62682a, 0x81b1b031, 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, + 0x02222022, 0x04000404, 0x48606828, 0x41717031, 0x07030407, 0xcbd3d81b, + 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819, + 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, + 0x8ba3a82b, 0xc0d0d010, 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, + 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f, 0x86929416, 0x4b73783b, + 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d, + 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, + 0x8ab2b83a, 0x4e626c2e, 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, + 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c, 0x05111415, 0xcbf3f83b, + 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003, + 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, + 0xcae2e82a, 0x09010809, 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, + 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405, 0xcaf2f83a, 0x01010001, + 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003, + 0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, + 0x48404808, 0x49717839, 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, + 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f, 0x47737437, 0x44505414, + 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406, + 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, + 0xc9c1c809, 0xcdf1fc3d, 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, + 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c, 0x0e020c0e, 0x40505010, + 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013, + 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, + 0x0a02080a, 0x87838407, 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, + 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437, +}; + +static const u32 KC[NUMKC] = { + 0x9e3779b9, 0x3c6ef373, 0x78dde6e6, 0xf1bbcdcc, + 0xe3779b99, 0xc6ef3733, 0x8dde6e67, 0x1bbcdccf, + 0x3779b99e, 0x6ef3733c, 0xdde6e678, 0xbbcdccf1, + 0x779b99e3, 0xef3733c6, 0xde6e678d, 0xbcdccf1b, +}; + + + +/* Perform the key setup. + */ +static gcry_err_code_t +do_setkey (SEED_context *ctx, const byte *key, const unsigned keylen) +{ + static int initialized = 0; + static const char *selftest_failed=0; + u32 x1, x2, x3, x4; + union wordbuf t0, t1; + u32 *keyout = ctx->keyschedule; + int i; + + if (!initialized) + { + initialized = 1; + selftest_failed = selftest (); + if( selftest_failed ) + log_error ("%s\n", selftest_failed ); + } + if (selftest_failed) + return GPG_ERR_SELFTEST_FAILED; + + if (keylen != 16) + return GPG_ERR_INV_KEYLEN; + + x1 = GETU32 (key); + x2 = GETU32 (key+4); + x3 = GETU32 (key+8); + x4 = GETU32 (key+12); + + for (i = 0; i < NUMKC; i++) + { + t0.w = x1 + x3 - KC[i]; + t1.w = x2 + KC[i] - x4; + *(keyout++) = SS0[t0.b0] ^ SS1[t0.b1] ^ SS2[t0.b2] ^ SS3[t0.b3]; + *(keyout++) = SS0[t1.b0] ^ SS1[t1.b1] ^ SS2[t1.b2] ^ SS3[t1.b3]; + + if (i % 2 == 0) + { + t0.w = x1; + x1 = (x1>>8) ^ (x2<<24); + x2 = (x2>>8) ^ (t0.w<<24); + } + else + { + t0.w = x3; + x3 = (x3<<8) ^ (x4>>24); + x4 = (x4<<8) ^ (t0.w>>24); + } + } + + return 0; +} + +static gcry_err_code_t +seed_setkey (void *context, const byte *key, const unsigned keylen) +{ + SEED_context *ctx = context; + + int rc = do_setkey (ctx, key, keylen); + _gcry_burn_stack (4*6 + sizeof(void*)*2 + sizeof(int)*2); + return rc; +} + + + +#define OP(X1, X2, X3, X4, rbase) \ + t0.w = X3 ^ ctx->keyschedule[rbase]; \ + t1.w = X4 ^ ctx->keyschedule[rbase+1]; \ + t1.w ^= t0.w; \ + t1.w = SS0[t1.b0] ^ SS1[t1.b1] ^ SS2[t1.b2] ^ SS3[t1.b3]; \ + t0.w += t1.w; \ + t0.w = SS0[t0.b0] ^ SS1[t0.b1] ^ SS2[t0.b2] ^ SS3[t0.b3]; \ + t1.w += t0.w; \ + t1.w = SS0[t1.b0] ^ SS1[t1.b1] ^ SS2[t1.b2] ^ SS3[t1.b3]; \ + t0.w += t1.w; \ + X1 ^= t0.w; \ + X2 ^= t1.w; + +/* Encrypt one block. inbuf and outbuf may be the same. */ +static void +do_encrypt (const SEED_context *ctx, byte *outbuf, const byte *inbuf) +{ + u32 x1, x2, x3, x4; + union wordbuf t0, t1; + + x1 = GETU32 (inbuf); + x2 = GETU32 (inbuf+4); + x3 = GETU32 (inbuf+8); + x4 = GETU32 (inbuf+12); + + OP (x1, x2, x3, x4, 0); + OP (x3, x4, x1, x2, 2); + OP (x1, x2, x3, x4, 4); + OP (x3, x4, x1, x2, 6); + OP (x1, x2, x3, x4, 8); + OP (x3, x4, x1, x2, 10); + OP (x1, x2, x3, x4, 12); + OP (x3, x4, x1, x2, 14); + OP (x1, x2, x3, x4, 16); + OP (x3, x4, x1, x2, 18); + OP (x1, x2, x3, x4, 20); + OP (x3, x4, x1, x2, 22); + OP (x1, x2, x3, x4, 24); + OP (x3, x4, x1, x2, 26); + OP (x1, x2, x3, x4, 28); + OP (x3, x4, x1, x2, 30); + + PUTU32 (outbuf, x3); + PUTU32 (outbuf+4, x4); + PUTU32 (outbuf+8, x1); + PUTU32 (outbuf+12, x2); +} + +static void +seed_encrypt (void *context, byte *outbuf, const byte *inbuf) +{ + SEED_context *ctx = context; + + do_encrypt (ctx, outbuf, inbuf); + _gcry_burn_stack (4*6); +} + + + +/* Decrypt one block. inbuf and outbuf may be the same. */ +static void +do_decrypt (SEED_context *ctx, byte *outbuf, const byte *inbuf) +{ + u32 x1, x2, x3, x4; + union wordbuf t0, t1; + + x1 = GETU32 (inbuf); + x2 = GETU32 (inbuf+4); + x3 = GETU32 (inbuf+8); + x4 = GETU32 (inbuf+12); + + OP (x1, x2, x3, x4, 30); + OP (x3, x4, x1, x2, 28); + OP (x1, x2, x3, x4, 26); + OP (x3, x4, x1, x2, 24); + OP (x1, x2, x3, x4, 22); + OP (x3, x4, x1, x2, 20); + OP (x1, x2, x3, x4, 18); + OP (x3, x4, x1, x2, 16); + OP (x1, x2, x3, x4, 14); + OP (x3, x4, x1, x2, 12); + OP (x1, x2, x3, x4, 10); + OP (x3, x4, x1, x2, 8); + OP (x1, x2, x3, x4, 6); + OP (x3, x4, x1, x2, 4); + OP (x1, x2, x3, x4, 2); + OP (x3, x4, x1, x2, 0); + + PUTU32 (outbuf, x3); + PUTU32 (outbuf+4, x4); + PUTU32 (outbuf+8, x1); + PUTU32 (outbuf+12, x2); +} + +static void +seed_decrypt (void *context, byte *outbuf, const byte *inbuf) +{ + SEED_context *ctx = context; + + do_decrypt (ctx, outbuf, inbuf); + _gcry_burn_stack (4*6); +} + + +/* Test a single encryption and decryption with each key size. */ + + + +static gcry_cipher_oid_spec_t seed_oids[] = + { + { "1.2.410.200004.1.3", GCRY_CIPHER_MODE_ECB }, + { "1.2.410.200004.1.4", GCRY_CIPHER_MODE_CBC }, + { "1.2.410.200004.1.5", GCRY_CIPHER_MODE_CFB }, + { "1.2.410.200004.1.6", GCRY_CIPHER_MODE_OFB }, + { NULL } + }; + +gcry_cipher_spec_t _gcry_cipher_spec_seed = + { + "SEED", NULL, seed_oids, 16, 128, sizeof (SEED_context), + seed_setkey, seed_encrypt, seed_decrypt, +#ifdef GRUB_UTIL + .modname = "gcry_seed", +#endif + }; + + +GRUB_MOD_INIT(gcry_seed) +{ + grub_cipher_register (&_gcry_cipher_spec_seed); +} + +GRUB_MOD_FINI(gcry_seed) +{ + grub_cipher_unregister (&_gcry_cipher_spec_seed); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/serpent.c b/grub-core/lib/libgcrypt-grub/cipher/serpent.c new file mode 100644 index 000000000..75be7b876 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/serpent.c @@ -0,0 +1,903 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* serpent.c - Implementation of the Serpent encryption algorithm. + * Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ + + + +#include "types.h" +#include "g10lib.h" +#include "cipher.h" +#include "bithelp.h" + +/* Number of rounds per Serpent encrypt/decrypt operation. */ +#define ROUNDS 32 + +/* Magic number, used during generating of the subkeys. */ +#define PHI 0x9E3779B9 + +/* Serpent works on 128 bit blocks. */ +typedef u32 serpent_block_t[4]; + +/* Serpent key, provided by the user. If the original key is shorter + than 256 bits, it is padded. */ +typedef u32 serpent_key_t[8]; + +/* The key schedule consists of 33 128 bit subkeys. */ +typedef u32 serpent_subkeys_t[ROUNDS + 1][4]; + +/* A Serpent context. */ +typedef struct serpent_context +{ + serpent_subkeys_t keys; /* Generated subkeys. */ +} serpent_context_t; + + +/* A prototype. */ +static const char *serpent_test (void); + + +#define byte_swap_32(x) \ + (0 \ + | (((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) \ + | (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + +/* These are the S-Boxes of Serpent. They are copied from Serpents + reference implementation (the optimized one, contained in + `floppy2') and are therefore: + + Copyright (C) 1998 Ross Anderson, Eli Biham, Lars Knudsen. + + To quote the Serpent homepage + (http://www.cl.cam.ac.uk/~rja14/serpent.html): + + "Serpent is now completely in the public domain, and we impose no + restrictions on its use. This was announced on the 21st August at + the First AES Candidate Conference. The optimised implementations + in the submission package are now under the GNU PUBLIC LICENSE + (GPL), although some comments in the code still say otherwise. You + are welcome to use Serpent for any application." */ + +#define SBOX0(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t05, t06, t07, t08, t09; \ + u32 t11, t12, t13, t14, t15, t17, t01; \ + t01 = b ^ c ; \ + t02 = a | d ; \ + t03 = a ^ b ; \ + z = t02 ^ t01; \ + t05 = c | z ; \ + t06 = a ^ d ; \ + t07 = b | c ; \ + t08 = d & t05; \ + t09 = t03 & t07; \ + y = t09 ^ t08; \ + t11 = t09 & y ; \ + t12 = c ^ d ; \ + t13 = t07 ^ t11; \ + t14 = b & t06; \ + t15 = t06 ^ t13; \ + w = ~ t15; \ + t17 = w ^ t14; \ + x = t12 ^ t17; \ + } + +#define SBOX0_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t08, t09, t10; \ + u32 t12, t13, t14, t15, t17, t18, t01; \ + t01 = c ^ d ; \ + t02 = a | b ; \ + t03 = b | c ; \ + t04 = c & t01; \ + t05 = t02 ^ t01; \ + t06 = a | t04; \ + y = ~ t05; \ + t08 = b ^ d ; \ + t09 = t03 & t08; \ + t10 = d | y ; \ + x = t09 ^ t06; \ + t12 = a | t05; \ + t13 = x ^ t12; \ + t14 = t03 ^ t10; \ + t15 = a ^ c ; \ + z = t14 ^ t13; \ + t17 = t05 & t13; \ + t18 = t14 | t17; \ + w = t15 ^ t18; \ + } + +#define SBOX1(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t07, t08; \ + u32 t10, t11, t12, t13, t16, t17, t01; \ + t01 = a | d ; \ + t02 = c ^ d ; \ + t03 = ~ b ; \ + t04 = a ^ c ; \ + t05 = a | t03; \ + t06 = d & t04; \ + t07 = t01 & t02; \ + t08 = b | t06; \ + y = t02 ^ t05; \ + t10 = t07 ^ t08; \ + t11 = t01 ^ t10; \ + t12 = y ^ t11; \ + t13 = b & d ; \ + z = ~ t10; \ + x = t13 ^ t12; \ + t16 = t10 | x ; \ + t17 = t05 & t16; \ + w = c ^ t17; \ + } + +#define SBOX1_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t07, t08; \ + u32 t09, t10, t11, t14, t15, t17, t01; \ + t01 = a ^ b ; \ + t02 = b | d ; \ + t03 = a & c ; \ + t04 = c ^ t02; \ + t05 = a | t04; \ + t06 = t01 & t05; \ + t07 = d | t03; \ + t08 = b ^ t06; \ + t09 = t07 ^ t06; \ + t10 = t04 | t03; \ + t11 = d & t08; \ + y = ~ t09; \ + x = t10 ^ t11; \ + t14 = a | y ; \ + t15 = t06 ^ x ; \ + z = t01 ^ t04; \ + t17 = c ^ t15; \ + w = t14 ^ t17; \ + } + +#define SBOX2(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t05, t06, t07, t08; \ + u32 t09, t10, t12, t13, t14, t01; \ + t01 = a | c ; \ + t02 = a ^ b ; \ + t03 = d ^ t01; \ + w = t02 ^ t03; \ + t05 = c ^ w ; \ + t06 = b ^ t05; \ + t07 = b | t05; \ + t08 = t01 & t06; \ + t09 = t03 ^ t07; \ + t10 = t02 | t09; \ + x = t10 ^ t08; \ + t12 = a | d ; \ + t13 = t09 ^ x ; \ + t14 = b ^ t13; \ + z = ~ t09; \ + y = t12 ^ t14; \ + } + +#define SBOX2_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t06, t07, t08, t09; \ + u32 t10, t11, t12, t15, t16, t17, t01; \ + t01 = a ^ d ; \ + t02 = c ^ d ; \ + t03 = a & c ; \ + t04 = b | t02; \ + w = t01 ^ t04; \ + t06 = a | c ; \ + t07 = d | w ; \ + t08 = ~ d ; \ + t09 = b & t06; \ + t10 = t08 | t03; \ + t11 = b & t07; \ + t12 = t06 & t02; \ + z = t09 ^ t10; \ + x = t12 ^ t11; \ + t15 = c & z ; \ + t16 = w ^ x ; \ + t17 = t10 ^ t15; \ + y = t16 ^ t17; \ + } + +#define SBOX3(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t07, t08; \ + u32 t09, t10, t11, t13, t14, t15, t01; \ + t01 = a ^ c ; \ + t02 = a | d ; \ + t03 = a & d ; \ + t04 = t01 & t02; \ + t05 = b | t03; \ + t06 = a & b ; \ + t07 = d ^ t04; \ + t08 = c | t06; \ + t09 = b ^ t07; \ + t10 = d & t05; \ + t11 = t02 ^ t10; \ + z = t08 ^ t09; \ + t13 = d | z ; \ + t14 = a | t07; \ + t15 = b & t13; \ + y = t08 ^ t11; \ + w = t14 ^ t15; \ + x = t05 ^ t04; \ + } + +#define SBOX3_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t07, t09; \ + u32 t11, t12, t13, t14, t16, t01; \ + t01 = c | d ; \ + t02 = a | d ; \ + t03 = c ^ t02; \ + t04 = b ^ t02; \ + t05 = a ^ d ; \ + t06 = t04 & t03; \ + t07 = b & t01; \ + y = t05 ^ t06; \ + t09 = a ^ t03; \ + w = t07 ^ t03; \ + t11 = w | t05; \ + t12 = t09 & t11; \ + t13 = a & y ; \ + t14 = t01 ^ t05; \ + x = b ^ t12; \ + t16 = b | t13; \ + z = t14 ^ t16; \ + } + +#define SBOX4(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t08, t09; \ + u32 t10, t11, t12, t13, t14, t15, t16, t01; \ + t01 = a | b ; \ + t02 = b | c ; \ + t03 = a ^ t02; \ + t04 = b ^ d ; \ + t05 = d | t03; \ + t06 = d & t01; \ + z = t03 ^ t06; \ + t08 = z & t04; \ + t09 = t04 & t05; \ + t10 = c ^ t06; \ + t11 = b & c ; \ + t12 = t04 ^ t08; \ + t13 = t11 | t03; \ + t14 = t10 ^ t09; \ + t15 = a & t05; \ + t16 = t11 | t12; \ + y = t13 ^ t08; \ + x = t15 ^ t16; \ + w = ~ t14; \ + } + +#define SBOX4_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t07, t09; \ + u32 t10, t11, t12, t13, t15, t01; \ + t01 = b | d ; \ + t02 = c | d ; \ + t03 = a & t01; \ + t04 = b ^ t02; \ + t05 = c ^ d ; \ + t06 = ~ t03; \ + t07 = a & t04; \ + x = t05 ^ t07; \ + t09 = x | t06; \ + t10 = a ^ t07; \ + t11 = t01 ^ t09; \ + t12 = d ^ t04; \ + t13 = c | t10; \ + z = t03 ^ t12; \ + t15 = a ^ t04; \ + y = t11 ^ t13; \ + w = t15 ^ t09; \ + } + +#define SBOX5(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t07, t08, t09; \ + u32 t10, t11, t12, t13, t14, t01; \ + t01 = b ^ d ; \ + t02 = b | d ; \ + t03 = a & t01; \ + t04 = c ^ t02; \ + t05 = t03 ^ t04; \ + w = ~ t05; \ + t07 = a ^ t01; \ + t08 = d | w ; \ + t09 = b | t05; \ + t10 = d ^ t08; \ + t11 = b | t07; \ + t12 = t03 | w ; \ + t13 = t07 | t10; \ + t14 = t01 ^ t11; \ + y = t09 ^ t13; \ + x = t07 ^ t08; \ + z = t12 ^ t14; \ + } + +#define SBOX5_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t07, t08, t09; \ + u32 t10, t12, t13, t15, t16, t01; \ + t01 = a & d ; \ + t02 = c ^ t01; \ + t03 = a ^ d ; \ + t04 = b & t02; \ + t05 = a & c ; \ + w = t03 ^ t04; \ + t07 = a & w ; \ + t08 = t01 ^ w ; \ + t09 = b | t05; \ + t10 = ~ b ; \ + x = t08 ^ t09; \ + t12 = t10 | t07; \ + t13 = w | x ; \ + z = t02 ^ t12; \ + t15 = t02 ^ t13; \ + t16 = b ^ d ; \ + y = t16 ^ t15; \ + } + +#define SBOX6(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t07, t08, t09, t10; \ + u32 t11, t12, t13, t15, t17, t18, t01; \ + t01 = a & d ; \ + t02 = b ^ c ; \ + t03 = a ^ d ; \ + t04 = t01 ^ t02; \ + t05 = b | c ; \ + x = ~ t04; \ + t07 = t03 & t05; \ + t08 = b & x ; \ + t09 = a | c ; \ + t10 = t07 ^ t08; \ + t11 = b | d ; \ + t12 = c ^ t11; \ + t13 = t09 ^ t10; \ + y = ~ t13; \ + t15 = x & t03; \ + z = t12 ^ t07; \ + t17 = a ^ b ; \ + t18 = y ^ t15; \ + w = t17 ^ t18; \ + } + +#define SBOX6_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t07, t08, t09; \ + u32 t12, t13, t14, t15, t16, t17, t01; \ + t01 = a ^ c ; \ + t02 = ~ c ; \ + t03 = b & t01; \ + t04 = b | t02; \ + t05 = d | t03; \ + t06 = b ^ d ; \ + t07 = a & t04; \ + t08 = a | t02; \ + t09 = t07 ^ t05; \ + x = t06 ^ t08; \ + w = ~ t09; \ + t12 = b & w ; \ + t13 = t01 & t05; \ + t14 = t01 ^ t12; \ + t15 = t07 ^ t13; \ + t16 = d | t02; \ + t17 = a ^ x ; \ + z = t17 ^ t15; \ + y = t16 ^ t14; \ + } + +#define SBOX7(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t05, t06, t08, t09, t10; \ + u32 t11, t13, t14, t15, t16, t17, t01; \ + t01 = a & c ; \ + t02 = ~ d ; \ + t03 = a & t02; \ + t04 = b | t01; \ + t05 = a & b ; \ + t06 = c ^ t04; \ + z = t03 ^ t06; \ + t08 = c | z ; \ + t09 = d | t05; \ + t10 = a ^ t08; \ + t11 = t04 & z ; \ + x = t09 ^ t10; \ + t13 = b ^ x ; \ + t14 = t01 ^ x ; \ + t15 = c ^ t05; \ + t16 = t11 | t13; \ + t17 = t02 | t14; \ + w = t15 ^ t17; \ + y = a ^ t16; \ + } + +#define SBOX7_INVERSE(a, b, c, d, w, x, y, z) \ + { \ + u32 t02, t03, t04, t06, t07, t08, t09; \ + u32 t10, t11, t13, t14, t15, t16, t01; \ + t01 = a & b ; \ + t02 = a | b ; \ + t03 = c | t01; \ + t04 = d & t02; \ + z = t03 ^ t04; \ + t06 = b ^ t04; \ + t07 = d ^ z ; \ + t08 = ~ t07; \ + t09 = t06 | t08; \ + t10 = b ^ d ; \ + t11 = a | d ; \ + x = a ^ t09; \ + t13 = c ^ t06; \ + t14 = c & t11; \ + t15 = d | x ; \ + t16 = t01 | t10; \ + w = t13 ^ t15; \ + y = t14 ^ t16; \ + } + +/* XOR BLOCK1 into BLOCK0. */ +#define BLOCK_XOR(block0, block1) \ + { \ + block0[0] ^= block1[0]; \ + block0[1] ^= block1[1]; \ + block0[2] ^= block1[2]; \ + block0[3] ^= block1[3]; \ + } + +/* Copy BLOCK_SRC to BLOCK_DST. */ +#define BLOCK_COPY(block_dst, block_src) \ + { \ + block_dst[0] = block_src[0]; \ + block_dst[1] = block_src[1]; \ + block_dst[2] = block_src[2]; \ + block_dst[3] = block_src[3]; \ + } + +/* Apply SBOX number WHICH to to the block found in ARRAY0 at index + INDEX, writing the output to the block found in ARRAY1 at index + INDEX. */ +#define SBOX(which, array0, array1, index) \ + SBOX##which (array0[index + 0], array0[index + 1], \ + array0[index + 2], array0[index + 3], \ + array1[index + 0], array1[index + 1], \ + array1[index + 2], array1[index + 3]); + +/* Apply inverse SBOX number WHICH to to the block found in ARRAY0 at + index INDEX, writing the output to the block found in ARRAY1 at + index INDEX. */ +#define SBOX_INVERSE(which, array0, array1, index) \ + SBOX##which##_INVERSE (array0[index + 0], array0[index + 1], \ + array0[index + 2], array0[index + 3], \ + array1[index + 0], array1[index + 1], \ + array1[index + 2], array1[index + 3]); + +/* Apply the linear transformation to BLOCK. */ +#define LINEAR_TRANSFORMATION(block) \ + { \ + block[0] = rol (block[0], 13); \ + block[2] = rol (block[2], 3); \ + block[1] = block[1] ^ block[0] ^ block[2]; \ + block[3] = block[3] ^ block[2] ^ (block[0] << 3); \ + block[1] = rol (block[1], 1); \ + block[3] = rol (block[3], 7); \ + block[0] = block[0] ^ block[1] ^ block[3]; \ + block[2] = block[2] ^ block[3] ^ (block[1] << 7); \ + block[0] = rol (block[0], 5); \ + block[2] = rol (block[2], 22); \ + } + +/* Apply the inverse linear transformation to BLOCK. */ +#define LINEAR_TRANSFORMATION_INVERSE(block) \ + { \ + block[2] = ror (block[2], 22); \ + block[0] = ror (block[0] , 5); \ + block[2] = block[2] ^ block[3] ^ (block[1] << 7); \ + block[0] = block[0] ^ block[1] ^ block[3]; \ + block[3] = ror (block[3], 7); \ + block[1] = ror (block[1], 1); \ + block[3] = block[3] ^ block[2] ^ (block[0] << 3); \ + block[1] = block[1] ^ block[0] ^ block[2]; \ + block[2] = ror (block[2], 3); \ + block[0] = ror (block[0], 13); \ + } + +/* Apply a Serpent round to BLOCK, using the SBOX number WHICH and the + subkeys contained in SUBKEYS. Use BLOCK_TMP as temporary storage. + This macro increments `round'. */ +#define ROUND(which, subkeys, block, block_tmp) \ + { \ + BLOCK_XOR (block, subkeys[round]); \ + round++; \ + SBOX (which, block, block_tmp, 0); \ + LINEAR_TRANSFORMATION (block_tmp); \ + BLOCK_COPY (block, block_tmp); \ + } + +/* Apply the last Serpent round to BLOCK, using the SBOX number WHICH + and the subkeys contained in SUBKEYS. Use BLOCK_TMP as temporary + storage. The result will be stored in BLOCK_TMP. This macro + increments `round'. */ +#define ROUND_LAST(which, subkeys, block, block_tmp) \ + { \ + BLOCK_XOR (block, subkeys[round]); \ + round++; \ + SBOX (which, block, block_tmp, 0); \ + BLOCK_XOR (block_tmp, subkeys[round]); \ + round++; \ + } + +/* Apply an inverse Serpent round to BLOCK, using the SBOX number + WHICH and the subkeys contained in SUBKEYS. Use BLOCK_TMP as + temporary storage. This macro increments `round'. */ +#define ROUND_INVERSE(which, subkey, block, block_tmp) \ + { \ + LINEAR_TRANSFORMATION_INVERSE (block); \ + SBOX_INVERSE (which, block, block_tmp, 0); \ + BLOCK_XOR (block_tmp, subkey[round]); \ + round--; \ + BLOCK_COPY (block, block_tmp); \ + } + +/* Apply the first Serpent round to BLOCK, using the SBOX number WHICH + and the subkeys contained in SUBKEYS. Use BLOCK_TMP as temporary + storage. The result will be stored in BLOCK_TMP. This macro + increments `round'. */ +#define ROUND_FIRST_INVERSE(which, subkeys, block, block_tmp) \ + { \ + BLOCK_XOR (block, subkeys[round]); \ + round--; \ + SBOX_INVERSE (which, block, block_tmp, 0); \ + BLOCK_XOR (block_tmp, subkeys[round]); \ + round--; \ + } + +/* Convert the user provided key KEY of KEY_LENGTH bytes into the + internally used format. */ +static void +serpent_key_prepare (const byte *key, unsigned int key_length, + serpent_key_t key_prepared) +{ + int i; + + /* Copy key. */ + memcpy (key_prepared, key, key_length); + key_length /= 4; +#ifdef WORDS_BIGENDIAN + for (i = 0; i < key_length; i++) + key_prepared[i] = byte_swap_32 (key_prepared[i]); +#else + i = key_length; +#endif + if (i < 8) + { + /* Key must be padded according to the Serpent + specification. */ + key_prepared[i] = 0x00000001; + + for (i++; i < 8; i++) + key_prepared[i] = 0; + } +} + +/* Derive the 33 subkeys from KEY and store them in SUBKEYS. */ +static void +serpent_subkeys_generate (serpent_key_t key, serpent_subkeys_t subkeys) +{ + u32 w_real[140]; /* The `prekey'. */ + u32 k[132]; + u32 *w = &w_real[8]; + int i, j; + + /* Initialize with key values. */ + for (i = 0; i < 8; i++) + w[i - 8] = key[i]; + + /* Expand to intermediate key using the affine recurrence. */ + for (i = 0; i < 132; i++) + w[i] = rol (w[i - 8] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ i, 11); + + /* Calculate subkeys via S-Boxes, in bitslice mode. */ + SBOX (3, w, k, 0); + SBOX (2, w, k, 4); + SBOX (1, w, k, 8); + SBOX (0, w, k, 12); + SBOX (7, w, k, 16); + SBOX (6, w, k, 20); + SBOX (5, w, k, 24); + SBOX (4, w, k, 28); + SBOX (3, w, k, 32); + SBOX (2, w, k, 36); + SBOX (1, w, k, 40); + SBOX (0, w, k, 44); + SBOX (7, w, k, 48); + SBOX (6, w, k, 52); + SBOX (5, w, k, 56); + SBOX (4, w, k, 60); + SBOX (3, w, k, 64); + SBOX (2, w, k, 68); + SBOX (1, w, k, 72); + SBOX (0, w, k, 76); + SBOX (7, w, k, 80); + SBOX (6, w, k, 84); + SBOX (5, w, k, 88); + SBOX (4, w, k, 92); + SBOX (3, w, k, 96); + SBOX (2, w, k, 100); + SBOX (1, w, k, 104); + SBOX (0, w, k, 108); + SBOX (7, w, k, 112); + SBOX (6, w, k, 116); + SBOX (5, w, k, 120); + SBOX (4, w, k, 124); + SBOX (3, w, k, 128); + + /* Renumber subkeys. */ + for (i = 0; i < ROUNDS + 1; i++) + for (j = 0; j < 4; j++) + subkeys[i][j] = k[4 * i + j]; +} + +/* Initialize CONTEXT with the key KEY of KEY_LENGTH bits. */ +static void +serpent_setkey_internal (serpent_context_t *context, + const byte *key, unsigned int key_length) +{ + serpent_key_t key_prepared; + + serpent_key_prepare (key, key_length, key_prepared); + serpent_subkeys_generate (key_prepared, context->keys); + _gcry_burn_stack (272 * sizeof (u32)); +} + +/* Initialize CTX with the key KEY of KEY_LENGTH bytes. */ +static gcry_err_code_t +serpent_setkey (void *ctx, + const byte *key, unsigned int key_length) +{ + serpent_context_t *context = ctx; + static const char *serpent_test_ret; + static int serpent_init_done; + gcry_err_code_t ret = GPG_ERR_NO_ERROR; + + if (! serpent_init_done) + { + /* Execute a self-test the first time, Serpent is used. */ + serpent_test_ret = serpent_test (); + if (serpent_test_ret) + log_error ("Serpent test failure: %s\n", serpent_test_ret); + serpent_init_done = 1; + } + + if (serpent_test_ret) + ret = GPG_ERR_SELFTEST_FAILED; + else + { + serpent_setkey_internal (context, key, key_length); + _gcry_burn_stack (sizeof (serpent_key_t)); + } + + return ret; +} + +static void +serpent_encrypt_internal (serpent_context_t *context, + const byte *input, byte *output) +{ + serpent_block_t b, b_next; + int round = 0; + + memcpy (b, input, sizeof (b)); +#ifdef WORDS_BIGENDIAN + b[0] = byte_swap_32 (b[0]); + b[1] = byte_swap_32 (b[1]); + b[2] = byte_swap_32 (b[2]); + b[3] = byte_swap_32 (b[3]); +#endif + + ROUND (0, context->keys, b, b_next); + ROUND (1, context->keys, b, b_next); + ROUND (2, context->keys, b, b_next); + ROUND (3, context->keys, b, b_next); + ROUND (4, context->keys, b, b_next); + ROUND (5, context->keys, b, b_next); + ROUND (6, context->keys, b, b_next); + ROUND (7, context->keys, b, b_next); + ROUND (0, context->keys, b, b_next); + ROUND (1, context->keys, b, b_next); + ROUND (2, context->keys, b, b_next); + ROUND (3, context->keys, b, b_next); + ROUND (4, context->keys, b, b_next); + ROUND (5, context->keys, b, b_next); + ROUND (6, context->keys, b, b_next); + ROUND (7, context->keys, b, b_next); + ROUND (0, context->keys, b, b_next); + ROUND (1, context->keys, b, b_next); + ROUND (2, context->keys, b, b_next); + ROUND (3, context->keys, b, b_next); + ROUND (4, context->keys, b, b_next); + ROUND (5, context->keys, b, b_next); + ROUND (6, context->keys, b, b_next); + ROUND (7, context->keys, b, b_next); + ROUND (0, context->keys, b, b_next); + ROUND (1, context->keys, b, b_next); + ROUND (2, context->keys, b, b_next); + ROUND (3, context->keys, b, b_next); + ROUND (4, context->keys, b, b_next); + ROUND (5, context->keys, b, b_next); + ROUND (6, context->keys, b, b_next); + + ROUND_LAST (7, context->keys, b, b_next); + +#ifdef WORDS_BIGENDIAN + b_next[0] = byte_swap_32 (b_next[0]); + b_next[1] = byte_swap_32 (b_next[1]); + b_next[2] = byte_swap_32 (b_next[2]); + b_next[3] = byte_swap_32 (b_next[3]); +#endif + memcpy (output, b_next, sizeof (b_next)); +} + +static void +serpent_decrypt_internal (serpent_context_t *context, + const byte *input, byte *output) +{ + serpent_block_t b, b_next; + int round = ROUNDS; + + memcpy (b_next, input, sizeof (b)); +#ifdef WORDS_BIGENDIAN + b_next[0] = byte_swap_32 (b_next[0]); + b_next[1] = byte_swap_32 (b_next[1]); + b_next[2] = byte_swap_32 (b_next[2]); + b_next[3] = byte_swap_32 (b_next[3]); +#endif + + ROUND_FIRST_INVERSE (7, context->keys, b_next, b); + + ROUND_INVERSE (6, context->keys, b, b_next); + ROUND_INVERSE (5, context->keys, b, b_next); + ROUND_INVERSE (4, context->keys, b, b_next); + ROUND_INVERSE (3, context->keys, b, b_next); + ROUND_INVERSE (2, context->keys, b, b_next); + ROUND_INVERSE (1, context->keys, b, b_next); + ROUND_INVERSE (0, context->keys, b, b_next); + ROUND_INVERSE (7, context->keys, b, b_next); + ROUND_INVERSE (6, context->keys, b, b_next); + ROUND_INVERSE (5, context->keys, b, b_next); + ROUND_INVERSE (4, context->keys, b, b_next); + ROUND_INVERSE (3, context->keys, b, b_next); + ROUND_INVERSE (2, context->keys, b, b_next); + ROUND_INVERSE (1, context->keys, b, b_next); + ROUND_INVERSE (0, context->keys, b, b_next); + ROUND_INVERSE (7, context->keys, b, b_next); + ROUND_INVERSE (6, context->keys, b, b_next); + ROUND_INVERSE (5, context->keys, b, b_next); + ROUND_INVERSE (4, context->keys, b, b_next); + ROUND_INVERSE (3, context->keys, b, b_next); + ROUND_INVERSE (2, context->keys, b, b_next); + ROUND_INVERSE (1, context->keys, b, b_next); + ROUND_INVERSE (0, context->keys, b, b_next); + ROUND_INVERSE (7, context->keys, b, b_next); + ROUND_INVERSE (6, context->keys, b, b_next); + ROUND_INVERSE (5, context->keys, b, b_next); + ROUND_INVERSE (4, context->keys, b, b_next); + ROUND_INVERSE (3, context->keys, b, b_next); + ROUND_INVERSE (2, context->keys, b, b_next); + ROUND_INVERSE (1, context->keys, b, b_next); + ROUND_INVERSE (0, context->keys, b, b_next); + +#ifdef WORDS_BIGENDIAN + b_next[0] = byte_swap_32 (b_next[0]); + b_next[1] = byte_swap_32 (b_next[1]); + b_next[2] = byte_swap_32 (b_next[2]); + b_next[3] = byte_swap_32 (b_next[3]); +#endif + memcpy (output, b_next, sizeof (b_next)); +} + +static void +serpent_encrypt (void *ctx, byte *buffer_out, const byte *buffer_in) +{ + serpent_context_t *context = ctx; + + serpent_encrypt_internal (context, buffer_in, buffer_out); + _gcry_burn_stack (2 * sizeof (serpent_block_t)); +} + +static void +serpent_decrypt (void *ctx, byte *buffer_out, const byte *buffer_in) +{ + serpent_context_t *context = ctx; + + serpent_decrypt_internal (context, buffer_in, buffer_out); + _gcry_burn_stack (2 * sizeof (serpent_block_t)); +} + + + +/* Serpent test. */ + +static const char *serpent_test (void) { return 0; } + + + +/* "SERPENT" is an alias for "SERPENT128". */ +static const char *cipher_spec_serpent128_aliases[] = + { + "SERPENT", + NULL + }; + +gcry_cipher_spec_t _gcry_cipher_spec_serpent128 = + { + "SERPENT128", cipher_spec_serpent128_aliases, NULL, 16, 128, + sizeof (serpent_context_t), + serpent_setkey, serpent_encrypt, serpent_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_serpent", +#endif + }; + +gcry_cipher_spec_t _gcry_cipher_spec_serpent192 = + { + "SERPENT192", NULL, NULL, 16, 192, + sizeof (serpent_context_t), + serpent_setkey, serpent_encrypt, serpent_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_serpent", +#endif + }; + +gcry_cipher_spec_t _gcry_cipher_spec_serpent256 = + { + "SERPENT256", NULL, NULL, 16, 256, + sizeof (serpent_context_t), + serpent_setkey, serpent_encrypt, serpent_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_serpent", +#endif + }; + + +GRUB_MOD_INIT(gcry_serpent) +{ + grub_cipher_register (&_gcry_cipher_spec_serpent128); + grub_cipher_register (&_gcry_cipher_spec_serpent192); + grub_cipher_register (&_gcry_cipher_spec_serpent256); +} + +GRUB_MOD_FINI(gcry_serpent) +{ + grub_cipher_unregister (&_gcry_cipher_spec_serpent128); + grub_cipher_unregister (&_gcry_cipher_spec_serpent192); + grub_cipher_unregister (&_gcry_cipher_spec_serpent256); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/sha1.c b/grub-core/lib/libgcrypt-grub/cipher/sha1.c new file mode 100644 index 000000000..581802dd5 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/sha1.c @@ -0,0 +1,419 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* sha1.c - SHA1 hash function + * Copyright (C) 1998, 2001, 2002, 2003, 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + + +/* Test vectors: + * + * "abc" + * A999 3E36 4706 816A BA3E 2571 7850 C26C 9CD0 D89D + * + * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + * 8498 3E44 1C3B D26E BAAE 4AA1 F951 29E5 E546 70F1 + */ + + +#ifdef HAVE_STDINT_H +#endif + +#include "g10lib.h" +#include "bithelp.h" +#include "cipher.h" +#include "hash-common.h" + + +/* A macro to test whether P is properly aligned for an u32 type. + Note that config.h provides a suitable replacement for uintptr_t if + it does not exist in stdint.h. */ +/* #if __GNUC__ >= 2 */ +/* # define U32_ALIGNED_P(p) (!(((uintptr_t)p) % __alignof__ (u32))) */ +/* #else */ +/* # define U32_ALIGNED_P(p) (!(((uintptr_t)p) % sizeof (u32))) */ +/* #endif */ + +#define TRANSFORM(x,d,n) transform ((x), (d), (n)) + + +typedef struct +{ + u32 h0,h1,h2,h3,h4; + u32 nblocks; + unsigned char buf[64]; + int count; +} SHA1_CONTEXT; + + + +static void +sha1_init (void *context) +{ + SHA1_CONTEXT *hd = context; + + hd->h0 = 0x67452301; + hd->h1 = 0xefcdab89; + hd->h2 = 0x98badcfe; + hd->h3 = 0x10325476; + hd->h4 = 0xc3d2e1f0; + hd->nblocks = 0; + hd->count = 0; +} + + +/* Round function macros. */ +#define K1 0x5A827999L +#define K2 0x6ED9EBA1L +#define K3 0x8F1BBCDCL +#define K4 0xCA62C1D6L +#define F1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) +#define F2(x,y,z) ( x ^ y ^ z ) +#define F3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) +#define F4(x,y,z) ( x ^ y ^ z ) +#define M(i) ( tm = x[ i &0x0f] \ + ^ x[(i-14)&0x0f] \ + ^ x[(i-8) &0x0f] \ + ^ x[(i-3) &0x0f], \ + (x[i&0x0f] = rol(tm, 1))) +#define R(a,b,c,d,e,f,k,m) do { e += rol( a, 5 ) \ + + f( b, c, d ) \ + + k \ + + m; \ + b = rol( b, 30 ); \ + } while(0) + + +/* + * Transform NBLOCKS of each 64 bytes (16 32-bit words) at DATA. + */ +static void +transform (SHA1_CONTEXT *hd, const unsigned char *data, size_t nblocks) +{ + register u32 a, b, c, d, e; /* Local copies of the chaining variables. */ + register u32 tm; /* Helper. */ + u32 x[16]; /* The array we work on. */ + + /* Loop over all blocks. */ + for ( ;nblocks; nblocks--) + { +#ifdef WORDS_BIGENDIAN + memcpy (x, data, 64); + data += 64; +#else + { + int i; + unsigned char *p; + + for(i=0, p=(unsigned char*)x; i < 16; i++, p += 4 ) + { + p[3] = *data++; + p[2] = *data++; + p[1] = *data++; + p[0] = *data++; + } + } +#endif + /* Get the values of the chaining variables. */ + a = hd->h0; + b = hd->h1; + c = hd->h2; + d = hd->h3; + e = hd->h4; + + /* Transform. */ + R( a, b, c, d, e, F1, K1, x[ 0] ); + R( e, a, b, c, d, F1, K1, x[ 1] ); + R( d, e, a, b, c, F1, K1, x[ 2] ); + R( c, d, e, a, b, F1, K1, x[ 3] ); + R( b, c, d, e, a, F1, K1, x[ 4] ); + R( a, b, c, d, e, F1, K1, x[ 5] ); + R( e, a, b, c, d, F1, K1, x[ 6] ); + R( d, e, a, b, c, F1, K1, x[ 7] ); + R( c, d, e, a, b, F1, K1, x[ 8] ); + R( b, c, d, e, a, F1, K1, x[ 9] ); + R( a, b, c, d, e, F1, K1, x[10] ); + R( e, a, b, c, d, F1, K1, x[11] ); + R( d, e, a, b, c, F1, K1, x[12] ); + R( c, d, e, a, b, F1, K1, x[13] ); + R( b, c, d, e, a, F1, K1, x[14] ); + R( a, b, c, d, e, F1, K1, x[15] ); + R( e, a, b, c, d, F1, K1, M(16) ); + R( d, e, a, b, c, F1, K1, M(17) ); + R( c, d, e, a, b, F1, K1, M(18) ); + R( b, c, d, e, a, F1, K1, M(19) ); + R( a, b, c, d, e, F2, K2, M(20) ); + R( e, a, b, c, d, F2, K2, M(21) ); + R( d, e, a, b, c, F2, K2, M(22) ); + R( c, d, e, a, b, F2, K2, M(23) ); + R( b, c, d, e, a, F2, K2, M(24) ); + R( a, b, c, d, e, F2, K2, M(25) ); + R( e, a, b, c, d, F2, K2, M(26) ); + R( d, e, a, b, c, F2, K2, M(27) ); + R( c, d, e, a, b, F2, K2, M(28) ); + R( b, c, d, e, a, F2, K2, M(29) ); + R( a, b, c, d, e, F2, K2, M(30) ); + R( e, a, b, c, d, F2, K2, M(31) ); + R( d, e, a, b, c, F2, K2, M(32) ); + R( c, d, e, a, b, F2, K2, M(33) ); + R( b, c, d, e, a, F2, K2, M(34) ); + R( a, b, c, d, e, F2, K2, M(35) ); + R( e, a, b, c, d, F2, K2, M(36) ); + R( d, e, a, b, c, F2, K2, M(37) ); + R( c, d, e, a, b, F2, K2, M(38) ); + R( b, c, d, e, a, F2, K2, M(39) ); + R( a, b, c, d, e, F3, K3, M(40) ); + R( e, a, b, c, d, F3, K3, M(41) ); + R( d, e, a, b, c, F3, K3, M(42) ); + R( c, d, e, a, b, F3, K3, M(43) ); + R( b, c, d, e, a, F3, K3, M(44) ); + R( a, b, c, d, e, F3, K3, M(45) ); + R( e, a, b, c, d, F3, K3, M(46) ); + R( d, e, a, b, c, F3, K3, M(47) ); + R( c, d, e, a, b, F3, K3, M(48) ); + R( b, c, d, e, a, F3, K3, M(49) ); + R( a, b, c, d, e, F3, K3, M(50) ); + R( e, a, b, c, d, F3, K3, M(51) ); + R( d, e, a, b, c, F3, K3, M(52) ); + R( c, d, e, a, b, F3, K3, M(53) ); + R( b, c, d, e, a, F3, K3, M(54) ); + R( a, b, c, d, e, F3, K3, M(55) ); + R( e, a, b, c, d, F3, K3, M(56) ); + R( d, e, a, b, c, F3, K3, M(57) ); + R( c, d, e, a, b, F3, K3, M(58) ); + R( b, c, d, e, a, F3, K3, M(59) ); + R( a, b, c, d, e, F4, K4, M(60) ); + R( e, a, b, c, d, F4, K4, M(61) ); + R( d, e, a, b, c, F4, K4, M(62) ); + R( c, d, e, a, b, F4, K4, M(63) ); + R( b, c, d, e, a, F4, K4, M(64) ); + R( a, b, c, d, e, F4, K4, M(65) ); + R( e, a, b, c, d, F4, K4, M(66) ); + R( d, e, a, b, c, F4, K4, M(67) ); + R( c, d, e, a, b, F4, K4, M(68) ); + R( b, c, d, e, a, F4, K4, M(69) ); + R( a, b, c, d, e, F4, K4, M(70) ); + R( e, a, b, c, d, F4, K4, M(71) ); + R( d, e, a, b, c, F4, K4, M(72) ); + R( c, d, e, a, b, F4, K4, M(73) ); + R( b, c, d, e, a, F4, K4, M(74) ); + R( a, b, c, d, e, F4, K4, M(75) ); + R( e, a, b, c, d, F4, K4, M(76) ); + R( d, e, a, b, c, F4, K4, M(77) ); + R( c, d, e, a, b, F4, K4, M(78) ); + R( b, c, d, e, a, F4, K4, M(79) ); + + /* Update the chaining variables. */ + hd->h0 += a; + hd->h1 += b; + hd->h2 += c; + hd->h3 += d; + hd->h4 += e; + } +} + + +/* Update the message digest with the contents + * of INBUF with length INLEN. + */ +static void +sha1_write( void *context, const void *inbuf_arg, size_t inlen) +{ + const unsigned char *inbuf = inbuf_arg; + SHA1_CONTEXT *hd = context; + size_t nblocks; + + if (hd->count == 64) /* Flush the buffer. */ + { + TRANSFORM( hd, hd->buf, 1 ); + _gcry_burn_stack (88+4*sizeof(void*)); + hd->count = 0; + hd->nblocks++; + } + if (!inbuf) + return; + + if (hd->count) + { + for (; inlen && hd->count < 64; inlen--) + hd->buf[hd->count++] = *inbuf++; + sha1_write (hd, NULL, 0); + if (!inlen) + return; + } + + nblocks = inlen / 64; + if (nblocks) + { + TRANSFORM (hd, inbuf, nblocks); + hd->count = 0; + hd->nblocks += nblocks; + inlen -= nblocks * 64; + inbuf += nblocks * 64; + } + _gcry_burn_stack (88+4*sizeof(void*)); + + /* Save remaining bytes. */ + for (; inlen && hd->count < 64; inlen--) + hd->buf[hd->count++] = *inbuf++; +} + + +/* The routine final terminates the computation and + * returns the digest. + * The handle is prepared for a new cycle, but adding bytes to the + * handle will the destroy the returned buffer. + * Returns: 20 bytes representing the digest. + */ + +static void +sha1_final(void *context) +{ + SHA1_CONTEXT *hd = context; + + u32 t, msb, lsb; + unsigned char *p; + + sha1_write(hd, NULL, 0); /* flush */; + + t = hd->nblocks; + /* multiply by 64 to make a byte count */ + lsb = t << 6; + msb = t >> 26; + /* add the count */ + t = lsb; + if( (lsb += hd->count) < t ) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 29; + + if( hd->count < 56 ) /* enough room */ + { + hd->buf[hd->count++] = 0x80; /* pad */ + while( hd->count < 56 ) + hd->buf[hd->count++] = 0; /* pad */ + } + else /* need one extra block */ + { + hd->buf[hd->count++] = 0x80; /* pad character */ + while( hd->count < 64 ) + hd->buf[hd->count++] = 0; + sha1_write(hd, NULL, 0); /* flush */; + memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ + } + /* append the 64 bit count */ + hd->buf[56] = msb >> 24; + hd->buf[57] = msb >> 16; + hd->buf[58] = msb >> 8; + hd->buf[59] = msb ; + hd->buf[60] = lsb >> 24; + hd->buf[61] = lsb >> 16; + hd->buf[62] = lsb >> 8; + hd->buf[63] = lsb ; + TRANSFORM( hd, hd->buf, 1 ); + _gcry_burn_stack (88+4*sizeof(void*)); + + p = hd->buf; +#ifdef WORDS_BIGENDIAN +#define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) +#else /* little endian */ +#define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ + *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0) +#endif + X(0); + X(1); + X(2); + X(3); + X(4); +#undef X + +} + +static unsigned char * +sha1_read( void *context ) +{ + SHA1_CONTEXT *hd = context; + + return hd->buf; +} + +/**************** + * Shortcut functions which puts the hash value of the supplied buffer + * into outbuf which must have a size of 20 bytes. + */ + + + +/* + Self-test section. + */ + + + + +/* Run a full self-test for ALGO and return 0 on success. */ + + + + +static unsigned char asn[15] = /* Object ID is 1.3.14.3.2.26 */ + { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, + 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14 }; + +static gcry_md_oid_spec_t oid_spec_sha1[] = + { + /* iso.member-body.us.rsadsi.pkcs.pkcs-1.5 (sha1WithRSAEncryption) */ + { "1.2.840.113549.1.1.5" }, + /* iso.member-body.us.x9-57.x9cm.3 (dsaWithSha1)*/ + { "1.2.840.10040.4.3" }, + /* from NIST's OIW (sha1) */ + { "1.3.14.3.2.26" }, + /* from NIST OIW (sha-1WithRSAEncryption) */ + { "1.3.14.3.2.29" }, + /* iso.member-body.us.ansi-x9-62.signatures.ecdsa-with-sha1 */ + { "1.2.840.10045.4.1" }, + { NULL }, + }; + +gcry_md_spec_t _gcry_digest_spec_sha1 = + { + "SHA1", asn, DIM (asn), oid_spec_sha1, 20, + sha1_init, sha1_write, sha1_final, sha1_read, + sizeof (SHA1_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_sha1", +#endif + .blocksize = 64 + }; + + +GRUB_MOD_INIT(gcry_sha1) +{ + COMPILE_TIME_ASSERT(sizeof (SHA1_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_sha1); +} + +GRUB_MOD_FINI(gcry_sha1) +{ + grub_md_unregister (&_gcry_digest_spec_sha1); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/sha256.c b/grub-core/lib/libgcrypt-grub/cipher/sha256.c new file mode 100644 index 000000000..0c9fd6bf4 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/sha256.c @@ -0,0 +1,463 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* sha256.c - SHA256 hash function + * Copyright (C) 2003, 2006, 2008, 2009 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + + +/* Test vectors: + + "abc" + SHA224: 23097d22 3405d822 8642a477 bda255b3 2aadbce4 bda0b3f7 e36c9da7 + SHA256: ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad + + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + SHA224: 75388b16 512776cc 5dba5da1 fd890150 b0c6455c b4f58b19 52522525 + SHA256: 248d6a61 d20638b8 e5c02693 0c3e6039 a33ce459 64ff2167 f6ecedd4 19db06c1 + + "a" one million times + SHA224: 20794655 980c91d8 bbb4c1ea 97618a4b f03f4258 1948b2ee 4ee7ad67 + SHA256: cdc76e5c 9914fb92 81a1c7e2 84d73e67 f1809a48 a497200e 046d39cc c7112cd0 + + */ + + + +#include "g10lib.h" +#include "bithelp.h" +#include "cipher.h" +#include "hash-common.h" + +typedef struct { + u32 h0,h1,h2,h3,h4,h5,h6,h7; + u32 nblocks; + byte buf[64]; + int count; +} SHA256_CONTEXT; + + +static void +sha256_init (void *context) +{ + SHA256_CONTEXT *hd = context; + + hd->h0 = 0x6a09e667; + hd->h1 = 0xbb67ae85; + hd->h2 = 0x3c6ef372; + hd->h3 = 0xa54ff53a; + hd->h4 = 0x510e527f; + hd->h5 = 0x9b05688c; + hd->h6 = 0x1f83d9ab; + hd->h7 = 0x5be0cd19; + + hd->nblocks = 0; + hd->count = 0; +} + + +static void +sha224_init (void *context) +{ + SHA256_CONTEXT *hd = context; + + hd->h0 = 0xc1059ed8; + hd->h1 = 0x367cd507; + hd->h2 = 0x3070dd17; + hd->h3 = 0xf70e5939; + hd->h4 = 0xffc00b31; + hd->h5 = 0x68581511; + hd->h6 = 0x64f98fa7; + hd->h7 = 0xbefa4fa4; + + hd->nblocks = 0; + hd->count = 0; +} + + +/* + Transform the message X which consists of 16 32-bit-words. See FIPS + 180-2 for details. */ +#define S0(x) (ror ((x), 7) ^ ror ((x), 18) ^ ((x) >> 3)) /* (4.6) */ +#define S1(x) (ror ((x), 17) ^ ror ((x), 19) ^ ((x) >> 10)) /* (4.7) */ +#define R(a,b,c,d,e,f,g,h,k,w) do \ + { \ + t1 = (h) + Sum1((e)) + Cho((e),(f),(g)) + (k) + (w); \ + t2 = Sum0((a)) + Maj((a),(b),(c)); \ + h = g; \ + g = f; \ + f = e; \ + e = d + t1; \ + d = c; \ + c = b; \ + b = a; \ + a = t1 + t2; \ + } while (0) + +/* (4.2) same as SHA-1's F1. */ +static inline u32 +Cho (u32 x, u32 y, u32 z) +{ + return (z ^ (x & (y ^ z))); +} + +/* (4.3) same as SHA-1's F3 */ +static inline u32 +Maj (u32 x, u32 y, u32 z) +{ + return ((x & y) | (z & (x|y))); +} + +/* (4.4) */ +static inline u32 +Sum0 (u32 x) +{ + return (ror (x, 2) ^ ror (x, 13) ^ ror (x, 22)); +} + +/* (4.5) */ +static inline u32 +Sum1 (u32 x) +{ + return (ror (x, 6) ^ ror (x, 11) ^ ror (x, 25)); +} + + +static void +transform (SHA256_CONTEXT *hd, const unsigned char *data) +{ + static const u32 K[64] = { + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + }; + + u32 a,b,c,d,e,f,g,h,t1,t2; + u32 x[16]; + u32 w[64]; + int i; + + a = hd->h0; + b = hd->h1; + c = hd->h2; + d = hd->h3; + e = hd->h4; + f = hd->h5; + g = hd->h6; + h = hd->h7; + +#ifdef WORDS_BIGENDIAN + memcpy (x, data, 64); +#else + { + byte *p2; + + for (i=0, p2=(byte*)x; i < 16; i++, p2 += 4 ) + { + p2[3] = *data++; + p2[2] = *data++; + p2[1] = *data++; + p2[0] = *data++; + } + } +#endif + + for (i=0; i < 16; i++) + w[i] = x[i]; + for (; i < 64; i++) + w[i] = S1(w[i-2]) + w[i-7] + S0(w[i-15]) + w[i-16]; + + for (i=0; i < 64;) + { +#if 0 + R(a,b,c,d,e,f,g,h,K[i],w[i]); + i++; +#else + t1 = h + Sum1 (e) + Cho (e, f, g) + K[i] + w[i]; + t2 = Sum0 (a) + Maj (a, b, c); + d += t1; + h = t1 + t2; + + t1 = g + Sum1 (d) + Cho (d, e, f) + K[i+1] + w[i+1]; + t2 = Sum0 (h) + Maj (h, a, b); + c += t1; + g = t1 + t2; + + t1 = f + Sum1 (c) + Cho (c, d, e) + K[i+2] + w[i+2]; + t2 = Sum0 (g) + Maj (g, h, a); + b += t1; + f = t1 + t2; + + t1 = e + Sum1 (b) + Cho (b, c, d) + K[i+3] + w[i+3]; + t2 = Sum0 (f) + Maj (f, g, h); + a += t1; + e = t1 + t2; + + t1 = d + Sum1 (a) + Cho (a, b, c) + K[i+4] + w[i+4]; + t2 = Sum0 (e) + Maj (e, f, g); + h += t1; + d = t1 + t2; + + t1 = c + Sum1 (h) + Cho (h, a, b) + K[i+5] + w[i+5]; + t2 = Sum0 (d) + Maj (d, e, f); + g += t1; + c = t1 + t2; + + t1 = b + Sum1 (g) + Cho (g, h, a) + K[i+6] + w[i+6]; + t2 = Sum0 (c) + Maj (c, d, e); + f += t1; + b = t1 + t2; + + t1 = a + Sum1 (f) + Cho (f, g, h) + K[i+7] + w[i+7]; + t2 = Sum0 (b) + Maj (b, c, d); + e += t1; + a = t1 + t2; + + i += 8; +#endif + } + + hd->h0 += a; + hd->h1 += b; + hd->h2 += c; + hd->h3 += d; + hd->h4 += e; + hd->h5 += f; + hd->h6 += g; + hd->h7 += h; +} +#undef S0 +#undef S1 +#undef R + + +/* Update the message digest with the contents of INBUF with length + INLEN. */ +static void +sha256_write (void *context, const void *inbuf_arg, size_t inlen) +{ + const unsigned char *inbuf = inbuf_arg; + SHA256_CONTEXT *hd = context; + + if (hd->count == 64) + { /* flush the buffer */ + transform (hd, hd->buf); + _gcry_burn_stack (74*4+32); + hd->count = 0; + hd->nblocks++; + } + if (!inbuf) + return; + if (hd->count) + { + for (; inlen && hd->count < 64; inlen--) + hd->buf[hd->count++] = *inbuf++; + sha256_write (hd, NULL, 0); + if (!inlen) + return; + } + + while (inlen >= 64) + { + transform (hd, inbuf); + hd->count = 0; + hd->nblocks++; + inlen -= 64; + inbuf += 64; + } + _gcry_burn_stack (74*4+32); + for (; inlen && hd->count < 64; inlen--) + hd->buf[hd->count++] = *inbuf++; +} + + +/* + The routine finally terminates the computation and returns the + digest. The handle is prepared for a new cycle, but adding bytes + to the handle will the destroy the returned buffer. Returns: 32 + bytes with the message the digest. */ +static void +sha256_final(void *context) +{ + SHA256_CONTEXT *hd = context; + u32 t, msb, lsb; + byte *p; + + sha256_write (hd, NULL, 0); /* flush */; + + t = hd->nblocks; + /* multiply by 64 to make a byte count */ + lsb = t << 6; + msb = t >> 26; + /* add the count */ + t = lsb; + if ((lsb += hd->count) < t) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 29; + + if (hd->count < 56) + { /* enough room */ + hd->buf[hd->count++] = 0x80; /* pad */ + while (hd->count < 56) + hd->buf[hd->count++] = 0; /* pad */ + } + else + { /* need one extra block */ + hd->buf[hd->count++] = 0x80; /* pad character */ + while (hd->count < 64) + hd->buf[hd->count++] = 0; + sha256_write (hd, NULL, 0); /* flush */; + memset (hd->buf, 0, 56 ); /* fill next block with zeroes */ + } + /* append the 64 bit count */ + hd->buf[56] = msb >> 24; + hd->buf[57] = msb >> 16; + hd->buf[58] = msb >> 8; + hd->buf[59] = msb; + hd->buf[60] = lsb >> 24; + hd->buf[61] = lsb >> 16; + hd->buf[62] = lsb >> 8; + hd->buf[63] = lsb; + transform (hd, hd->buf); + _gcry_burn_stack (74*4+32); + + p = hd->buf; +#ifdef WORDS_BIGENDIAN +#define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) +#else /* little endian */ +#define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ + *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0) +#endif + X(0); + X(1); + X(2); + X(3); + X(4); + X(5); + X(6); + X(7); +#undef X +} + +static byte * +sha256_read (void *context) +{ + SHA256_CONTEXT *hd = context; + + return hd->buf; +} + + + +/* + Self-test section. + */ + + + + + +/* Run a full self-test for ALGO and return 0 on success. */ + + + + +static byte asn224[19] = /* Object ID is 2.16.840.1.101.3.4.2.4 */ + { 0x30, 0x2D, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, + 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, + 0x1C + }; + +static gcry_md_oid_spec_t oid_spec_sha224[] = + { + /* From RFC3874, Section 4 */ + { "2.16.840.1.101.3.4.2.4" }, + { NULL }, + }; + +static byte asn256[19] = /* Object ID is 2.16.840.1.101.3.4.2.1 */ + { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, + 0x00, 0x04, 0x20 }; + +static gcry_md_oid_spec_t oid_spec_sha256[] = + { + /* According to the OpenPGP draft rfc2440-bis06 */ + { "2.16.840.1.101.3.4.2.1" }, + /* PKCS#1 sha256WithRSAEncryption */ + { "1.2.840.113549.1.1.11" }, + + { NULL }, + }; + +gcry_md_spec_t _gcry_digest_spec_sha224 = + { + "SHA224", asn224, DIM (asn224), oid_spec_sha224, 28, + sha224_init, sha256_write, sha256_final, sha256_read, + sizeof (SHA256_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_sha256", +#endif + .blocksize = 64 + }; + +gcry_md_spec_t _gcry_digest_spec_sha256 = + { + "SHA256", asn256, DIM (asn256), oid_spec_sha256, 32, + sha256_init, sha256_write, sha256_final, sha256_read, + sizeof (SHA256_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_sha256", +#endif + .blocksize = 64 + }; + + +GRUB_MOD_INIT(gcry_sha256) +{ + COMPILE_TIME_ASSERT(sizeof (SHA256_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + COMPILE_TIME_ASSERT(sizeof (SHA256_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_sha224); + grub_md_register (&_gcry_digest_spec_sha256); +} + +GRUB_MOD_FINI(gcry_sha256) +{ + grub_md_unregister (&_gcry_digest_spec_sha224); + grub_md_unregister (&_gcry_digest_spec_sha256); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/sha512.c b/grub-core/lib/libgcrypt-grub/cipher/sha512.c new file mode 100644 index 000000000..717551ccd --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/sha512.c @@ -0,0 +1,525 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* sha512.c - SHA384 and SHA512 hash functions + * Copyright (C) 2003, 2008, 2009 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + + +/* Test vectors from FIPS-180-2: + * + * "abc" + * 384: + * CB00753F 45A35E8B B5A03D69 9AC65007 272C32AB 0EDED163 + * 1A8B605A 43FF5BED 8086072B A1E7CC23 58BAECA1 34C825A7 + * 512: + * DDAF35A1 93617ABA CC417349 AE204131 12E6FA4E 89A97EA2 0A9EEEE6 4B55D39A + * 2192992A 274FC1A8 36BA3C23 A3FEEBBD 454D4423 643CE80E 2A9AC94F A54CA49F + * + * "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" + * 384: + * 09330C33 F71147E8 3D192FC7 82CD1B47 53111B17 3B3B05D2 + * 2FA08086 E3B0F712 FCC7C71A 557E2DB9 66C3E9FA 91746039 + * 512: + * 8E959B75 DAE313DA 8CF4F728 14FC143F 8F7779C6 EB9F7FA1 7299AEAD B6889018 + * 501D289E 4900F7E4 331B99DE C4B5433A C7D329EE B6DD2654 5E96E55B 874BE909 + * + * "a" x 1000000 + * 384: + * 9D0E1809 716474CB 086E834E 310A4A1C ED149E9C 00F24852 + * 7972CEC5 704C2A5B 07B8B3DC 38ECC4EB AE97DDD8 7F3D8985 + * 512: + * E718483D 0CE76964 4E2E42C7 BC15B463 8E1F98B1 3B204428 5632A803 AFA973EB + * DE0FF244 877EA60A 4CB0432C E577C31B EB009C5C 2C49AA2E 4EADB217 AD8CC09B + */ + + +#include "g10lib.h" +#include "bithelp.h" +#include "cipher.h" +#include "hash-common.h" + +typedef struct +{ + u64 h0, h1, h2, h3, h4, h5, h6, h7; + u64 nblocks; + byte buf[128]; + int count; +} SHA512_CONTEXT; + +static void +sha512_init (void *context) +{ + SHA512_CONTEXT *hd = context; + + hd->h0 = U64_C(0x6a09e667f3bcc908); + hd->h1 = U64_C(0xbb67ae8584caa73b); + hd->h2 = U64_C(0x3c6ef372fe94f82b); + hd->h3 = U64_C(0xa54ff53a5f1d36f1); + hd->h4 = U64_C(0x510e527fade682d1); + hd->h5 = U64_C(0x9b05688c2b3e6c1f); + hd->h6 = U64_C(0x1f83d9abfb41bd6b); + hd->h7 = U64_C(0x5be0cd19137e2179); + + hd->nblocks = 0; + hd->count = 0; +} + +static void +sha384_init (void *context) +{ + SHA512_CONTEXT *hd = context; + + hd->h0 = U64_C(0xcbbb9d5dc1059ed8); + hd->h1 = U64_C(0x629a292a367cd507); + hd->h2 = U64_C(0x9159015a3070dd17); + hd->h3 = U64_C(0x152fecd8f70e5939); + hd->h4 = U64_C(0x67332667ffc00b31); + hd->h5 = U64_C(0x8eb44a8768581511); + hd->h6 = U64_C(0xdb0c2e0d64f98fa7); + hd->h7 = U64_C(0x47b5481dbefa4fa4); + + hd->nblocks = 0; + hd->count = 0; +} + + +static inline u64 +ROTR (u64 x, u64 n) +{ + return ((x >> n) | (x << (64 - n))); +} + +static inline u64 +Ch (u64 x, u64 y, u64 z) +{ + return ((x & y) ^ ( ~x & z)); +} + +static inline u64 +Maj (u64 x, u64 y, u64 z) +{ + return ((x & y) ^ (x & z) ^ (y & z)); +} + +static inline u64 +Sum0 (u64 x) +{ + return (ROTR (x, 28) ^ ROTR (x, 34) ^ ROTR (x, 39)); +} + +static inline u64 +Sum1 (u64 x) +{ + return (ROTR (x, 14) ^ ROTR (x, 18) ^ ROTR (x, 41)); +} + +/**************** + * Transform the message W which consists of 16 64-bit-words + */ +static void +transform (SHA512_CONTEXT *hd, const unsigned char *data) +{ + u64 a, b, c, d, e, f, g, h; + u64 w[80]; + int t; + static const u64 k[] = + { + U64_C(0x428a2f98d728ae22), U64_C(0x7137449123ef65cd), + U64_C(0xb5c0fbcfec4d3b2f), U64_C(0xe9b5dba58189dbbc), + U64_C(0x3956c25bf348b538), U64_C(0x59f111f1b605d019), + U64_C(0x923f82a4af194f9b), U64_C(0xab1c5ed5da6d8118), + U64_C(0xd807aa98a3030242), U64_C(0x12835b0145706fbe), + U64_C(0x243185be4ee4b28c), U64_C(0x550c7dc3d5ffb4e2), + U64_C(0x72be5d74f27b896f), U64_C(0x80deb1fe3b1696b1), + U64_C(0x9bdc06a725c71235), U64_C(0xc19bf174cf692694), + U64_C(0xe49b69c19ef14ad2), U64_C(0xefbe4786384f25e3), + U64_C(0x0fc19dc68b8cd5b5), U64_C(0x240ca1cc77ac9c65), + U64_C(0x2de92c6f592b0275), U64_C(0x4a7484aa6ea6e483), + U64_C(0x5cb0a9dcbd41fbd4), U64_C(0x76f988da831153b5), + U64_C(0x983e5152ee66dfab), U64_C(0xa831c66d2db43210), + U64_C(0xb00327c898fb213f), U64_C(0xbf597fc7beef0ee4), + U64_C(0xc6e00bf33da88fc2), U64_C(0xd5a79147930aa725), + U64_C(0x06ca6351e003826f), U64_C(0x142929670a0e6e70), + U64_C(0x27b70a8546d22ffc), U64_C(0x2e1b21385c26c926), + U64_C(0x4d2c6dfc5ac42aed), U64_C(0x53380d139d95b3df), + U64_C(0x650a73548baf63de), U64_C(0x766a0abb3c77b2a8), + U64_C(0x81c2c92e47edaee6), U64_C(0x92722c851482353b), + U64_C(0xa2bfe8a14cf10364), U64_C(0xa81a664bbc423001), + U64_C(0xc24b8b70d0f89791), U64_C(0xc76c51a30654be30), + U64_C(0xd192e819d6ef5218), U64_C(0xd69906245565a910), + U64_C(0xf40e35855771202a), U64_C(0x106aa07032bbd1b8), + U64_C(0x19a4c116b8d2d0c8), U64_C(0x1e376c085141ab53), + U64_C(0x2748774cdf8eeb99), U64_C(0x34b0bcb5e19b48a8), + U64_C(0x391c0cb3c5c95a63), U64_C(0x4ed8aa4ae3418acb), + U64_C(0x5b9cca4f7763e373), U64_C(0x682e6ff3d6b2b8a3), + U64_C(0x748f82ee5defb2fc), U64_C(0x78a5636f43172f60), + U64_C(0x84c87814a1f0ab72), U64_C(0x8cc702081a6439ec), + U64_C(0x90befffa23631e28), U64_C(0xa4506cebde82bde9), + U64_C(0xbef9a3f7b2c67915), U64_C(0xc67178f2e372532b), + U64_C(0xca273eceea26619c), U64_C(0xd186b8c721c0c207), + U64_C(0xeada7dd6cde0eb1e), U64_C(0xf57d4f7fee6ed178), + U64_C(0x06f067aa72176fba), U64_C(0x0a637dc5a2c898a6), + U64_C(0x113f9804bef90dae), U64_C(0x1b710b35131c471b), + U64_C(0x28db77f523047d84), U64_C(0x32caab7b40c72493), + U64_C(0x3c9ebe0a15c9bebc), U64_C(0x431d67c49c100d4c), + U64_C(0x4cc5d4becb3e42b6), U64_C(0x597f299cfc657e2a), + U64_C(0x5fcb6fab3ad6faec), U64_C(0x6c44198c4a475817) + }; + + /* get values from the chaining vars */ + a = hd->h0; + b = hd->h1; + c = hd->h2; + d = hd->h3; + e = hd->h4; + f = hd->h5; + g = hd->h6; + h = hd->h7; + +#ifdef WORDS_BIGENDIAN + memcpy (w, data, 128); +#else + { + int i; + byte *p2; + + for (i = 0, p2 = (byte *) w; i < 16; i++, p2 += 8) + { + p2[7] = *data++; + p2[6] = *data++; + p2[5] = *data++; + p2[4] = *data++; + p2[3] = *data++; + p2[2] = *data++; + p2[1] = *data++; + p2[0] = *data++; + } + } +#endif + +#define S0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7)) +#define S1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6)) + + for (t = 16; t < 80; t++) + w[t] = S1 (w[t - 2]) + w[t - 7] + S0 (w[t - 15]) + w[t - 16]; + + + for (t = 0; t < 80; ) + { + u64 t1, t2; + + /* Performance on a AMD Athlon(tm) Dual Core Processor 4050e + with gcc 4.3.3 using gcry_md_hash_buffer of each 10000 bytes + initialized to 0,1,2,3...255,0,... and 1000 iterations: + + Not unrolled with macros: 440ms + Unrolled with macros: 350ms + Unrolled with inline: 330ms + */ +#if 0 /* Not unrolled. */ + t1 = h + Sum1 (e) + Ch (e, f, g) + k[t] + w[t]; + t2 = Sum0 (a) + Maj (a, b, c); + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + t++; +#else /* Unrolled to interweave the chain variables. */ + t1 = h + Sum1 (e) + Ch (e, f, g) + k[t] + w[t]; + t2 = Sum0 (a) + Maj (a, b, c); + d += t1; + h = t1 + t2; + + t1 = g + Sum1 (d) + Ch (d, e, f) + k[t+1] + w[t+1]; + t2 = Sum0 (h) + Maj (h, a, b); + c += t1; + g = t1 + t2; + + t1 = f + Sum1 (c) + Ch (c, d, e) + k[t+2] + w[t+2]; + t2 = Sum0 (g) + Maj (g, h, a); + b += t1; + f = t1 + t2; + + t1 = e + Sum1 (b) + Ch (b, c, d) + k[t+3] + w[t+3]; + t2 = Sum0 (f) + Maj (f, g, h); + a += t1; + e = t1 + t2; + + t1 = d + Sum1 (a) + Ch (a, b, c) + k[t+4] + w[t+4]; + t2 = Sum0 (e) + Maj (e, f, g); + h += t1; + d = t1 + t2; + + t1 = c + Sum1 (h) + Ch (h, a, b) + k[t+5] + w[t+5]; + t2 = Sum0 (d) + Maj (d, e, f); + g += t1; + c = t1 + t2; + + t1 = b + Sum1 (g) + Ch (g, h, a) + k[t+6] + w[t+6]; + t2 = Sum0 (c) + Maj (c, d, e); + f += t1; + b = t1 + t2; + + t1 = a + Sum1 (f) + Ch (f, g, h) + k[t+7] + w[t+7]; + t2 = Sum0 (b) + Maj (b, c, d); + e += t1; + a = t1 + t2; + + t += 8; +#endif + } + + /* Update chaining vars. */ + hd->h0 += a; + hd->h1 += b; + hd->h2 += c; + hd->h3 += d; + hd->h4 += e; + hd->h5 += f; + hd->h6 += g; + hd->h7 += h; +} + + +/* Update the message digest with the contents + * of INBUF with length INLEN. + */ +static void +sha512_write (void *context, const void *inbuf_arg, size_t inlen) +{ + const unsigned char *inbuf = inbuf_arg; + SHA512_CONTEXT *hd = context; + + if (hd->count == 128) + { /* flush the buffer */ + transform (hd, hd->buf); + _gcry_burn_stack (768); + hd->count = 0; + hd->nblocks++; + } + if (!inbuf) + return; + if (hd->count) + { + for (; inlen && hd->count < 128; inlen--) + hd->buf[hd->count++] = *inbuf++; + sha512_write (context, NULL, 0); + if (!inlen) + return; + } + + while (inlen >= 128) + { + transform (hd, inbuf); + hd->count = 0; + hd->nblocks++; + inlen -= 128; + inbuf += 128; + } + _gcry_burn_stack (768); + for (; inlen && hd->count < 128; inlen--) + hd->buf[hd->count++] = *inbuf++; +} + + +/* The routine final terminates the computation and + * returns the digest. + * The handle is prepared for a new cycle, but adding bytes to the + * handle will the destroy the returned buffer. + * Returns: 64 bytes representing the digest. When used for sha384, + * we take the leftmost 48 of those bytes. + */ + +static void +sha512_final (void *context) +{ + SHA512_CONTEXT *hd = context; + u64 t, msb, lsb; + byte *p; + + sha512_write (context, NULL, 0); /* flush */ ; + + t = hd->nblocks; + /* multiply by 128 to make a byte count */ + lsb = t << 7; + msb = t >> 57; + /* add the count */ + t = lsb; + if ((lsb += hd->count) < t) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 61; + + if (hd->count < 112) + { /* enough room */ + hd->buf[hd->count++] = 0x80; /* pad */ + while (hd->count < 112) + hd->buf[hd->count++] = 0; /* pad */ + } + else + { /* need one extra block */ + hd->buf[hd->count++] = 0x80; /* pad character */ + while (hd->count < 128) + hd->buf[hd->count++] = 0; + sha512_write (context, NULL, 0); /* flush */ ; + memset (hd->buf, 0, 112); /* fill next block with zeroes */ + } + /* append the 128 bit count */ + hd->buf[112] = msb >> 56; + hd->buf[113] = msb >> 48; + hd->buf[114] = msb >> 40; + hd->buf[115] = msb >> 32; + hd->buf[116] = msb >> 24; + hd->buf[117] = msb >> 16; + hd->buf[118] = msb >> 8; + hd->buf[119] = msb; + + hd->buf[120] = lsb >> 56; + hd->buf[121] = lsb >> 48; + hd->buf[122] = lsb >> 40; + hd->buf[123] = lsb >> 32; + hd->buf[124] = lsb >> 24; + hd->buf[125] = lsb >> 16; + hd->buf[126] = lsb >> 8; + hd->buf[127] = lsb; + transform (hd, hd->buf); + _gcry_burn_stack (768); + + p = hd->buf; +#ifdef WORDS_BIGENDIAN +#define X(a) do { *(u64*)p = hd->h##a ; p += 8; } while (0) +#else /* little endian */ +#define X(a) do { *p++ = hd->h##a >> 56; *p++ = hd->h##a >> 48; \ + *p++ = hd->h##a >> 40; *p++ = hd->h##a >> 32; \ + *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ + *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while (0) +#endif + X (0); + X (1); + X (2); + X (3); + X (4); + X (5); + /* Note that these last two chunks are included even for SHA384. + We just ignore them. */ + X (6); + X (7); +#undef X +} + +static byte * +sha512_read (void *context) +{ + SHA512_CONTEXT *hd = (SHA512_CONTEXT *) context; + return hd->buf; +} + + + +/* + Self-test section. + */ + + + + + +/* Run a full self-test for ALGO and return 0 on success. */ + + + + +static byte sha512_asn[] = /* Object ID is 2.16.840.1.101.3.4.2.3 */ + { + 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, + 0x00, 0x04, 0x40 + }; + +static gcry_md_oid_spec_t oid_spec_sha512[] = + { + { "2.16.840.1.101.3.4.2.3" }, + + /* PKCS#1 sha512WithRSAEncryption */ + { "1.2.840.113549.1.1.13" }, + + { NULL } + }; + +gcry_md_spec_t _gcry_digest_spec_sha512 = + { + "SHA512", sha512_asn, DIM (sha512_asn), oid_spec_sha512, 64, + sha512_init, sha512_write, sha512_final, sha512_read, + sizeof (SHA512_CONTEXT), +#ifdef GRUB_UTIL + .modname = "gcry_sha512", +#endif + .blocksize = 128 + }; + +static byte sha384_asn[] = /* Object ID is 2.16.840.1.101.3.4.2.2 */ + { + 0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, + 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, + 0x00, 0x04, 0x30 + }; + +static gcry_md_oid_spec_t oid_spec_sha384[] = + { + { "2.16.840.1.101.3.4.2.2" }, + + /* PKCS#1 sha384WithRSAEncryption */ + { "1.2.840.113549.1.1.12" }, + + { NULL }, + }; + +gcry_md_spec_t _gcry_digest_spec_sha384 = + { + "SHA384", sha384_asn, DIM (sha384_asn), oid_spec_sha384, 48, + sha384_init, sha512_write, sha512_final, sha512_read, + sizeof (SHA512_CONTEXT), +#ifdef GRUB_UTIL + .modname = "gcry_sha512", +#endif + .blocksize = 128 + }; + + +GRUB_MOD_INIT(gcry_sha512) +{ + COMPILE_TIME_ASSERT(sizeof (SHA512_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + COMPILE_TIME_ASSERT(sizeof (SHA512_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_sha512); + grub_md_register (&_gcry_digest_spec_sha384); +} + +GRUB_MOD_FINI(gcry_sha512) +{ + grub_md_unregister (&_gcry_digest_spec_sha512); + grub_md_unregister (&_gcry_digest_spec_sha384); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/tiger.c b/grub-core/lib/libgcrypt-grub/cipher/tiger.c new file mode 100644 index 000000000..c277293f7 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/tiger.c @@ -0,0 +1,944 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* tiger.c - The TIGER hash function + * Copyright (C) 1998, 2001, 2002, 2003, 2010 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +/* See http://www.cs.technion.ac.il/~biham/Reports/Tiger/ */ + + +#include "g10lib.h" +#include "cipher.h" + +/* We really need a 64 bit type for this code. */ +#ifdef HAVE_U64_TYPEDEF + +typedef struct +{ + u64 a, b, c; + byte buf[64]; + int count; + u32 nblocks; + int variant; /* 0 = old code, 1 = fixed code, 2 - TIGER2. */ +} TIGER_CONTEXT; + + +/********************************* + * Okay, okay, this is not the fastest code - improvements are welcome. + * + */ + +/* Some test vectors: + * "" 24F0130C63AC9332 16166E76B1BB925F F373DE2D49584E7A + * "abc" F258C1E88414AB2A 527AB541FFC5B8BF 935F7B951C132951 + * "Tiger" 9F00F599072300DD 276ABB38C8EB6DEC 37790C116F9D2BDF + * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-" + * 87FB2A9083851CF7 470D2CF810E6DF9E B586445034A5A386 + * "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789" + * 467DB80863EBCE48 8DF1CD1261655DE9 57896565975F9197 + * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham" + * 0C410A042968868A 1671DA5A3FD29A72 5EC1E457D3CDB303 + * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proc" + * "eedings of Fast Software Encryption 3, Cambridge." + * EBF591D5AFA655CE 7F22894FF87F54AC 89C811B6B0DA3193 + * "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proc" + * "eedings of Fast Software Encryption 3, Cambridge, 1996." + * 3D9AEB03D1BD1A63 57B2774DFD6D5B24 DD68151D503974FC + * "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEF" + * "GHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-" + * 00B83EB4E53440C5 76AC6AAEE0A74858 25FD15E70A59FFE4 + */ + +static u64 sbox1[256] = { + U64_C(0x02aab17cf7e90c5e) /* 0 */, U64_C(0xac424b03e243a8ec) /* 1 */, + U64_C(0x72cd5be30dd5fcd3) /* 2 */, U64_C(0x6d019b93f6f97f3a) /* 3 */, + U64_C(0xcd9978ffd21f9193) /* 4 */, U64_C(0x7573a1c9708029e2) /* 5 */, + U64_C(0xb164326b922a83c3) /* 6 */, U64_C(0x46883eee04915870) /* 7 */, + U64_C(0xeaace3057103ece6) /* 8 */, U64_C(0xc54169b808a3535c) /* 9 */, + U64_C(0x4ce754918ddec47c) /* 10 */, U64_C(0x0aa2f4dfdc0df40c) /* 11 */, + U64_C(0x10b76f18a74dbefa) /* 12 */, U64_C(0xc6ccb6235ad1ab6a) /* 13 */, + U64_C(0x13726121572fe2ff) /* 14 */, U64_C(0x1a488c6f199d921e) /* 15 */, + U64_C(0x4bc9f9f4da0007ca) /* 16 */, U64_C(0x26f5e6f6e85241c7) /* 17 */, + U64_C(0x859079dbea5947b6) /* 18 */, U64_C(0x4f1885c5c99e8c92) /* 19 */, + U64_C(0xd78e761ea96f864b) /* 20 */, U64_C(0x8e36428c52b5c17d) /* 21 */, + U64_C(0x69cf6827373063c1) /* 22 */, U64_C(0xb607c93d9bb4c56e) /* 23 */, + U64_C(0x7d820e760e76b5ea) /* 24 */, U64_C(0x645c9cc6f07fdc42) /* 25 */, + U64_C(0xbf38a078243342e0) /* 26 */, U64_C(0x5f6b343c9d2e7d04) /* 27 */, + U64_C(0xf2c28aeb600b0ec6) /* 28 */, U64_C(0x6c0ed85f7254bcac) /* 29 */, + U64_C(0x71592281a4db4fe5) /* 30 */, U64_C(0x1967fa69ce0fed9f) /* 31 */, + U64_C(0xfd5293f8b96545db) /* 32 */, U64_C(0xc879e9d7f2a7600b) /* 33 */, + U64_C(0x860248920193194e) /* 34 */, U64_C(0xa4f9533b2d9cc0b3) /* 35 */, + U64_C(0x9053836c15957613) /* 36 */, U64_C(0xdb6dcf8afc357bf1) /* 37 */, + U64_C(0x18beea7a7a370f57) /* 38 */, U64_C(0x037117ca50b99066) /* 39 */, + U64_C(0x6ab30a9774424a35) /* 40 */, U64_C(0xf4e92f02e325249b) /* 41 */, + U64_C(0x7739db07061ccae1) /* 42 */, U64_C(0xd8f3b49ceca42a05) /* 43 */, + U64_C(0xbd56be3f51382f73) /* 44 */, U64_C(0x45faed5843b0bb28) /* 45 */, + U64_C(0x1c813d5c11bf1f83) /* 46 */, U64_C(0x8af0e4b6d75fa169) /* 47 */, + U64_C(0x33ee18a487ad9999) /* 48 */, U64_C(0x3c26e8eab1c94410) /* 49 */, + U64_C(0xb510102bc0a822f9) /* 50 */, U64_C(0x141eef310ce6123b) /* 51 */, + U64_C(0xfc65b90059ddb154) /* 52 */, U64_C(0xe0158640c5e0e607) /* 53 */, + U64_C(0x884e079826c3a3cf) /* 54 */, U64_C(0x930d0d9523c535fd) /* 55 */, + U64_C(0x35638d754e9a2b00) /* 56 */, U64_C(0x4085fccf40469dd5) /* 57 */, + U64_C(0xc4b17ad28be23a4c) /* 58 */, U64_C(0xcab2f0fc6a3e6a2e) /* 59 */, + U64_C(0x2860971a6b943fcd) /* 60 */, U64_C(0x3dde6ee212e30446) /* 61 */, + U64_C(0x6222f32ae01765ae) /* 62 */, U64_C(0x5d550bb5478308fe) /* 63 */, + U64_C(0xa9efa98da0eda22a) /* 64 */, U64_C(0xc351a71686c40da7) /* 65 */, + U64_C(0x1105586d9c867c84) /* 66 */, U64_C(0xdcffee85fda22853) /* 67 */, + U64_C(0xccfbd0262c5eef76) /* 68 */, U64_C(0xbaf294cb8990d201) /* 69 */, + U64_C(0xe69464f52afad975) /* 70 */, U64_C(0x94b013afdf133e14) /* 71 */, + U64_C(0x06a7d1a32823c958) /* 72 */, U64_C(0x6f95fe5130f61119) /* 73 */, + U64_C(0xd92ab34e462c06c0) /* 74 */, U64_C(0xed7bde33887c71d2) /* 75 */, + U64_C(0x79746d6e6518393e) /* 76 */, U64_C(0x5ba419385d713329) /* 77 */, + U64_C(0x7c1ba6b948a97564) /* 78 */, U64_C(0x31987c197bfdac67) /* 79 */, + U64_C(0xde6c23c44b053d02) /* 80 */, U64_C(0x581c49fed002d64d) /* 81 */, + U64_C(0xdd474d6338261571) /* 82 */, U64_C(0xaa4546c3e473d062) /* 83 */, + U64_C(0x928fce349455f860) /* 84 */, U64_C(0x48161bbacaab94d9) /* 85 */, + U64_C(0x63912430770e6f68) /* 86 */, U64_C(0x6ec8a5e602c6641c) /* 87 */, + U64_C(0x87282515337ddd2b) /* 88 */, U64_C(0x2cda6b42034b701b) /* 89 */, + U64_C(0xb03d37c181cb096d) /* 90 */, U64_C(0xe108438266c71c6f) /* 91 */, + U64_C(0x2b3180c7eb51b255) /* 92 */, U64_C(0xdf92b82f96c08bbc) /* 93 */, + U64_C(0x5c68c8c0a632f3ba) /* 94 */, U64_C(0x5504cc861c3d0556) /* 95 */, + U64_C(0xabbfa4e55fb26b8f) /* 96 */, U64_C(0x41848b0ab3baceb4) /* 97 */, + U64_C(0xb334a273aa445d32) /* 98 */, U64_C(0xbca696f0a85ad881) /* 99 */, + U64_C(0x24f6ec65b528d56c) /* 100 */, U64_C(0x0ce1512e90f4524a) /* 101 */, + U64_C(0x4e9dd79d5506d35a) /* 102 */, U64_C(0x258905fac6ce9779) /* 103 */, + U64_C(0x2019295b3e109b33) /* 104 */, U64_C(0xf8a9478b73a054cc) /* 105 */, + U64_C(0x2924f2f934417eb0) /* 106 */, U64_C(0x3993357d536d1bc4) /* 107 */, + U64_C(0x38a81ac21db6ff8b) /* 108 */, U64_C(0x47c4fbf17d6016bf) /* 109 */, + U64_C(0x1e0faadd7667e3f5) /* 110 */, U64_C(0x7abcff62938beb96) /* 111 */, + U64_C(0xa78dad948fc179c9) /* 112 */, U64_C(0x8f1f98b72911e50d) /* 113 */, + U64_C(0x61e48eae27121a91) /* 114 */, U64_C(0x4d62f7ad31859808) /* 115 */, + U64_C(0xeceba345ef5ceaeb) /* 116 */, U64_C(0xf5ceb25ebc9684ce) /* 117 */, + U64_C(0xf633e20cb7f76221) /* 118 */, U64_C(0xa32cdf06ab8293e4) /* 119 */, + U64_C(0x985a202ca5ee2ca4) /* 120 */, U64_C(0xcf0b8447cc8a8fb1) /* 121 */, + U64_C(0x9f765244979859a3) /* 122 */, U64_C(0xa8d516b1a1240017) /* 123 */, + U64_C(0x0bd7ba3ebb5dc726) /* 124 */, U64_C(0xe54bca55b86adb39) /* 125 */, + U64_C(0x1d7a3afd6c478063) /* 126 */, U64_C(0x519ec608e7669edd) /* 127 */, + U64_C(0x0e5715a2d149aa23) /* 128 */, U64_C(0x177d4571848ff194) /* 129 */, + U64_C(0xeeb55f3241014c22) /* 130 */, U64_C(0x0f5e5ca13a6e2ec2) /* 131 */, + U64_C(0x8029927b75f5c361) /* 132 */, U64_C(0xad139fabc3d6e436) /* 133 */, + U64_C(0x0d5df1a94ccf402f) /* 134 */, U64_C(0x3e8bd948bea5dfc8) /* 135 */, + U64_C(0xa5a0d357bd3ff77e) /* 136 */, U64_C(0xa2d12e251f74f645) /* 137 */, + U64_C(0x66fd9e525e81a082) /* 138 */, U64_C(0x2e0c90ce7f687a49) /* 139 */, + U64_C(0xc2e8bcbeba973bc5) /* 140 */, U64_C(0x000001bce509745f) /* 141 */, + U64_C(0x423777bbe6dab3d6) /* 142 */, U64_C(0xd1661c7eaef06eb5) /* 143 */, + U64_C(0xa1781f354daacfd8) /* 144 */, U64_C(0x2d11284a2b16affc) /* 145 */, + U64_C(0xf1fc4f67fa891d1f) /* 146 */, U64_C(0x73ecc25dcb920ada) /* 147 */, + U64_C(0xae610c22c2a12651) /* 148 */, U64_C(0x96e0a810d356b78a) /* 149 */, + U64_C(0x5a9a381f2fe7870f) /* 150 */, U64_C(0xd5ad62ede94e5530) /* 151 */, + U64_C(0xd225e5e8368d1427) /* 152 */, U64_C(0x65977b70c7af4631) /* 153 */, + U64_C(0x99f889b2de39d74f) /* 154 */, U64_C(0x233f30bf54e1d143) /* 155 */, + U64_C(0x9a9675d3d9a63c97) /* 156 */, U64_C(0x5470554ff334f9a8) /* 157 */, + U64_C(0x166acb744a4f5688) /* 158 */, U64_C(0x70c74caab2e4aead) /* 159 */, + U64_C(0xf0d091646f294d12) /* 160 */, U64_C(0x57b82a89684031d1) /* 161 */, + U64_C(0xefd95a5a61be0b6b) /* 162 */, U64_C(0x2fbd12e969f2f29a) /* 163 */, + U64_C(0x9bd37013feff9fe8) /* 164 */, U64_C(0x3f9b0404d6085a06) /* 165 */, + U64_C(0x4940c1f3166cfe15) /* 166 */, U64_C(0x09542c4dcdf3defb) /* 167 */, + U64_C(0xb4c5218385cd5ce3) /* 168 */, U64_C(0xc935b7dc4462a641) /* 169 */, + U64_C(0x3417f8a68ed3b63f) /* 170 */, U64_C(0xb80959295b215b40) /* 171 */, + U64_C(0xf99cdaef3b8c8572) /* 172 */, U64_C(0x018c0614f8fcb95d) /* 173 */, + U64_C(0x1b14accd1a3acdf3) /* 174 */, U64_C(0x84d471f200bb732d) /* 175 */, + U64_C(0xc1a3110e95e8da16) /* 176 */, U64_C(0x430a7220bf1a82b8) /* 177 */, + U64_C(0xb77e090d39df210e) /* 178 */, U64_C(0x5ef4bd9f3cd05e9d) /* 179 */, + U64_C(0x9d4ff6da7e57a444) /* 180 */, U64_C(0xda1d60e183d4a5f8) /* 181 */, + U64_C(0xb287c38417998e47) /* 182 */, U64_C(0xfe3edc121bb31886) /* 183 */, + U64_C(0xc7fe3ccc980ccbef) /* 184 */, U64_C(0xe46fb590189bfd03) /* 185 */, + U64_C(0x3732fd469a4c57dc) /* 186 */, U64_C(0x7ef700a07cf1ad65) /* 187 */, + U64_C(0x59c64468a31d8859) /* 188 */, U64_C(0x762fb0b4d45b61f6) /* 189 */, + U64_C(0x155baed099047718) /* 190 */, U64_C(0x68755e4c3d50baa6) /* 191 */, + U64_C(0xe9214e7f22d8b4df) /* 192 */, U64_C(0x2addbf532eac95f4) /* 193 */, + U64_C(0x32ae3909b4bd0109) /* 194 */, U64_C(0x834df537b08e3450) /* 195 */, + U64_C(0xfa209da84220728d) /* 196 */, U64_C(0x9e691d9b9efe23f7) /* 197 */, + U64_C(0x0446d288c4ae8d7f) /* 198 */, U64_C(0x7b4cc524e169785b) /* 199 */, + U64_C(0x21d87f0135ca1385) /* 200 */, U64_C(0xcebb400f137b8aa5) /* 201 */, + U64_C(0x272e2b66580796be) /* 202 */, U64_C(0x3612264125c2b0de) /* 203 */, + U64_C(0x057702bdad1efbb2) /* 204 */, U64_C(0xd4babb8eacf84be9) /* 205 */, + U64_C(0x91583139641bc67b) /* 206 */, U64_C(0x8bdc2de08036e024) /* 207 */, + U64_C(0x603c8156f49f68ed) /* 208 */, U64_C(0xf7d236f7dbef5111) /* 209 */, + U64_C(0x9727c4598ad21e80) /* 210 */, U64_C(0xa08a0896670a5fd7) /* 211 */, + U64_C(0xcb4a8f4309eba9cb) /* 212 */, U64_C(0x81af564b0f7036a1) /* 213 */, + U64_C(0xc0b99aa778199abd) /* 214 */, U64_C(0x959f1ec83fc8e952) /* 215 */, + U64_C(0x8c505077794a81b9) /* 216 */, U64_C(0x3acaaf8f056338f0) /* 217 */, + U64_C(0x07b43f50627a6778) /* 218 */, U64_C(0x4a44ab49f5eccc77) /* 219 */, + U64_C(0x3bc3d6e4b679ee98) /* 220 */, U64_C(0x9cc0d4d1cf14108c) /* 221 */, + U64_C(0x4406c00b206bc8a0) /* 222 */, U64_C(0x82a18854c8d72d89) /* 223 */, + U64_C(0x67e366b35c3c432c) /* 224 */, U64_C(0xb923dd61102b37f2) /* 225 */, + U64_C(0x56ab2779d884271d) /* 226 */, U64_C(0xbe83e1b0ff1525af) /* 227 */, + U64_C(0xfb7c65d4217e49a9) /* 228 */, U64_C(0x6bdbe0e76d48e7d4) /* 229 */, + U64_C(0x08df828745d9179e) /* 230 */, U64_C(0x22ea6a9add53bd34) /* 231 */, + U64_C(0xe36e141c5622200a) /* 232 */, U64_C(0x7f805d1b8cb750ee) /* 233 */, + U64_C(0xafe5c7a59f58e837) /* 234 */, U64_C(0xe27f996a4fb1c23c) /* 235 */, + U64_C(0xd3867dfb0775f0d0) /* 236 */, U64_C(0xd0e673de6e88891a) /* 237 */, + U64_C(0x123aeb9eafb86c25) /* 238 */, U64_C(0x30f1d5d5c145b895) /* 239 */, + U64_C(0xbb434a2dee7269e7) /* 240 */, U64_C(0x78cb67ecf931fa38) /* 241 */, + U64_C(0xf33b0372323bbf9c) /* 242 */, U64_C(0x52d66336fb279c74) /* 243 */, + U64_C(0x505f33ac0afb4eaa) /* 244 */, U64_C(0xe8a5cd99a2cce187) /* 245 */, + U64_C(0x534974801e2d30bb) /* 246 */, U64_C(0x8d2d5711d5876d90) /* 247 */, + U64_C(0x1f1a412891bc038e) /* 248 */, U64_C(0xd6e2e71d82e56648) /* 249 */, + U64_C(0x74036c3a497732b7) /* 250 */, U64_C(0x89b67ed96361f5ab) /* 251 */, + U64_C(0xffed95d8f1ea02a2) /* 252 */, U64_C(0xe72b3bd61464d43d) /* 253 */, + U64_C(0xa6300f170bdc4820) /* 254 */, U64_C(0xebc18760ed78a77a) /* 255 */ +}; +static u64 sbox2[256] = { + U64_C(0xe6a6be5a05a12138) /* 256 */, U64_C(0xb5a122a5b4f87c98) /* 257 */, + U64_C(0x563c6089140b6990) /* 258 */, U64_C(0x4c46cb2e391f5dd5) /* 259 */, + U64_C(0xd932addbc9b79434) /* 260 */, U64_C(0x08ea70e42015aff5) /* 261 */, + U64_C(0xd765a6673e478cf1) /* 262 */, U64_C(0xc4fb757eab278d99) /* 263 */, + U64_C(0xdf11c6862d6e0692) /* 264 */, U64_C(0xddeb84f10d7f3b16) /* 265 */, + U64_C(0x6f2ef604a665ea04) /* 266 */, U64_C(0x4a8e0f0ff0e0dfb3) /* 267 */, + U64_C(0xa5edeef83dbcba51) /* 268 */, U64_C(0xfc4f0a2a0ea4371e) /* 269 */, + U64_C(0xe83e1da85cb38429) /* 270 */, U64_C(0xdc8ff882ba1b1ce2) /* 271 */, + U64_C(0xcd45505e8353e80d) /* 272 */, U64_C(0x18d19a00d4db0717) /* 273 */, + U64_C(0x34a0cfeda5f38101) /* 274 */, U64_C(0x0be77e518887caf2) /* 275 */, + U64_C(0x1e341438b3c45136) /* 276 */, U64_C(0xe05797f49089ccf9) /* 277 */, + U64_C(0xffd23f9df2591d14) /* 278 */, U64_C(0x543dda228595c5cd) /* 279 */, + U64_C(0x661f81fd99052a33) /* 280 */, U64_C(0x8736e641db0f7b76) /* 281 */, + U64_C(0x15227725418e5307) /* 282 */, U64_C(0xe25f7f46162eb2fa) /* 283 */, + U64_C(0x48a8b2126c13d9fe) /* 284 */, U64_C(0xafdc541792e76eea) /* 285 */, + U64_C(0x03d912bfc6d1898f) /* 286 */, U64_C(0x31b1aafa1b83f51b) /* 287 */, + U64_C(0xf1ac2796e42ab7d9) /* 288 */, U64_C(0x40a3a7d7fcd2ebac) /* 289 */, + U64_C(0x1056136d0afbbcc5) /* 290 */, U64_C(0x7889e1dd9a6d0c85) /* 291 */, + U64_C(0xd33525782a7974aa) /* 292 */, U64_C(0xa7e25d09078ac09b) /* 293 */, + U64_C(0xbd4138b3eac6edd0) /* 294 */, U64_C(0x920abfbe71eb9e70) /* 295 */, + U64_C(0xa2a5d0f54fc2625c) /* 296 */, U64_C(0xc054e36b0b1290a3) /* 297 */, + U64_C(0xf6dd59ff62fe932b) /* 298 */, U64_C(0x3537354511a8ac7d) /* 299 */, + U64_C(0xca845e9172fadcd4) /* 300 */, U64_C(0x84f82b60329d20dc) /* 301 */, + U64_C(0x79c62ce1cd672f18) /* 302 */, U64_C(0x8b09a2add124642c) /* 303 */, + U64_C(0xd0c1e96a19d9e726) /* 304 */, U64_C(0x5a786a9b4ba9500c) /* 305 */, + U64_C(0x0e020336634c43f3) /* 306 */, U64_C(0xc17b474aeb66d822) /* 307 */, + U64_C(0x6a731ae3ec9baac2) /* 308 */, U64_C(0x8226667ae0840258) /* 309 */, + U64_C(0x67d4567691caeca5) /* 310 */, U64_C(0x1d94155c4875adb5) /* 311 */, + U64_C(0x6d00fd985b813fdf) /* 312 */, U64_C(0x51286efcb774cd06) /* 313 */, + U64_C(0x5e8834471fa744af) /* 314 */, U64_C(0xf72ca0aee761ae2e) /* 315 */, + U64_C(0xbe40e4cdaee8e09a) /* 316 */, U64_C(0xe9970bbb5118f665) /* 317 */, + U64_C(0x726e4beb33df1964) /* 318 */, U64_C(0x703b000729199762) /* 319 */, + U64_C(0x4631d816f5ef30a7) /* 320 */, U64_C(0xb880b5b51504a6be) /* 321 */, + U64_C(0x641793c37ed84b6c) /* 322 */, U64_C(0x7b21ed77f6e97d96) /* 323 */, + U64_C(0x776306312ef96b73) /* 324 */, U64_C(0xae528948e86ff3f4) /* 325 */, + U64_C(0x53dbd7f286a3f8f8) /* 326 */, U64_C(0x16cadce74cfc1063) /* 327 */, + U64_C(0x005c19bdfa52c6dd) /* 328 */, U64_C(0x68868f5d64d46ad3) /* 329 */, + U64_C(0x3a9d512ccf1e186a) /* 330 */, U64_C(0x367e62c2385660ae) /* 331 */, + U64_C(0xe359e7ea77dcb1d7) /* 332 */, U64_C(0x526c0773749abe6e) /* 333 */, + U64_C(0x735ae5f9d09f734b) /* 334 */, U64_C(0x493fc7cc8a558ba8) /* 335 */, + U64_C(0xb0b9c1533041ab45) /* 336 */, U64_C(0x321958ba470a59bd) /* 337 */, + U64_C(0x852db00b5f46c393) /* 338 */, U64_C(0x91209b2bd336b0e5) /* 339 */, + U64_C(0x6e604f7d659ef19f) /* 340 */, U64_C(0xb99a8ae2782ccb24) /* 341 */, + U64_C(0xccf52ab6c814c4c7) /* 342 */, U64_C(0x4727d9afbe11727b) /* 343 */, + U64_C(0x7e950d0c0121b34d) /* 344 */, U64_C(0x756f435670ad471f) /* 345 */, + U64_C(0xf5add442615a6849) /* 346 */, U64_C(0x4e87e09980b9957a) /* 347 */, + U64_C(0x2acfa1df50aee355) /* 348 */, U64_C(0xd898263afd2fd556) /* 349 */, + U64_C(0xc8f4924dd80c8fd6) /* 350 */, U64_C(0xcf99ca3d754a173a) /* 351 */, + U64_C(0xfe477bacaf91bf3c) /* 352 */, U64_C(0xed5371f6d690c12d) /* 353 */, + U64_C(0x831a5c285e687094) /* 354 */, U64_C(0xc5d3c90a3708a0a4) /* 355 */, + U64_C(0x0f7f903717d06580) /* 356 */, U64_C(0x19f9bb13b8fdf27f) /* 357 */, + U64_C(0xb1bd6f1b4d502843) /* 358 */, U64_C(0x1c761ba38fff4012) /* 359 */, + U64_C(0x0d1530c4e2e21f3b) /* 360 */, U64_C(0x8943ce69a7372c8a) /* 361 */, + U64_C(0xe5184e11feb5ce66) /* 362 */, U64_C(0x618bdb80bd736621) /* 363 */, + U64_C(0x7d29bad68b574d0b) /* 364 */, U64_C(0x81bb613e25e6fe5b) /* 365 */, + U64_C(0x071c9c10bc07913f) /* 366 */, U64_C(0xc7beeb7909ac2d97) /* 367 */, + U64_C(0xc3e58d353bc5d757) /* 368 */, U64_C(0xeb017892f38f61e8) /* 369 */, + U64_C(0xd4effb9c9b1cc21a) /* 370 */, U64_C(0x99727d26f494f7ab) /* 371 */, + U64_C(0xa3e063a2956b3e03) /* 372 */, U64_C(0x9d4a8b9a4aa09c30) /* 373 */, + U64_C(0x3f6ab7d500090fb4) /* 374 */, U64_C(0x9cc0f2a057268ac0) /* 375 */, + U64_C(0x3dee9d2dedbf42d1) /* 376 */, U64_C(0x330f49c87960a972) /* 377 */, + U64_C(0xc6b2720287421b41) /* 378 */, U64_C(0x0ac59ec07c00369c) /* 379 */, + U64_C(0xef4eac49cb353425) /* 380 */, U64_C(0xf450244eef0129d8) /* 381 */, + U64_C(0x8acc46e5caf4deb6) /* 382 */, U64_C(0x2ffeab63989263f7) /* 383 */, + U64_C(0x8f7cb9fe5d7a4578) /* 384 */, U64_C(0x5bd8f7644e634635) /* 385 */, + U64_C(0x427a7315bf2dc900) /* 386 */, U64_C(0x17d0c4aa2125261c) /* 387 */, + U64_C(0x3992486c93518e50) /* 388 */, U64_C(0xb4cbfee0a2d7d4c3) /* 389 */, + U64_C(0x7c75d6202c5ddd8d) /* 390 */, U64_C(0xdbc295d8e35b6c61) /* 391 */, + U64_C(0x60b369d302032b19) /* 392 */, U64_C(0xce42685fdce44132) /* 393 */, + U64_C(0x06f3ddb9ddf65610) /* 394 */, U64_C(0x8ea4d21db5e148f0) /* 395 */, + U64_C(0x20b0fce62fcd496f) /* 396 */, U64_C(0x2c1b912358b0ee31) /* 397 */, + U64_C(0xb28317b818f5a308) /* 398 */, U64_C(0xa89c1e189ca6d2cf) /* 399 */, + U64_C(0x0c6b18576aaadbc8) /* 400 */, U64_C(0xb65deaa91299fae3) /* 401 */, + U64_C(0xfb2b794b7f1027e7) /* 402 */, U64_C(0x04e4317f443b5beb) /* 403 */, + U64_C(0x4b852d325939d0a6) /* 404 */, U64_C(0xd5ae6beefb207ffc) /* 405 */, + U64_C(0x309682b281c7d374) /* 406 */, U64_C(0xbae309a194c3b475) /* 407 */, + U64_C(0x8cc3f97b13b49f05) /* 408 */, U64_C(0x98a9422ff8293967) /* 409 */, + U64_C(0x244b16b01076ff7c) /* 410 */, U64_C(0xf8bf571c663d67ee) /* 411 */, + U64_C(0x1f0d6758eee30da1) /* 412 */, U64_C(0xc9b611d97adeb9b7) /* 413 */, + U64_C(0xb7afd5887b6c57a2) /* 414 */, U64_C(0x6290ae846b984fe1) /* 415 */, + U64_C(0x94df4cdeacc1a5fd) /* 416 */, U64_C(0x058a5bd1c5483aff) /* 417 */, + U64_C(0x63166cc142ba3c37) /* 418 */, U64_C(0x8db8526eb2f76f40) /* 419 */, + U64_C(0xe10880036f0d6d4e) /* 420 */, U64_C(0x9e0523c9971d311d) /* 421 */, + U64_C(0x45ec2824cc7cd691) /* 422 */, U64_C(0x575b8359e62382c9) /* 423 */, + U64_C(0xfa9e400dc4889995) /* 424 */, U64_C(0xd1823ecb45721568) /* 425 */, + U64_C(0xdafd983b8206082f) /* 426 */, U64_C(0xaa7d29082386a8cb) /* 427 */, + U64_C(0x269fcd4403b87588) /* 428 */, U64_C(0x1b91f5f728bdd1e0) /* 429 */, + U64_C(0xe4669f39040201f6) /* 430 */, U64_C(0x7a1d7c218cf04ade) /* 431 */, + U64_C(0x65623c29d79ce5ce) /* 432 */, U64_C(0x2368449096c00bb1) /* 433 */, + U64_C(0xab9bf1879da503ba) /* 434 */, U64_C(0xbc23ecb1a458058e) /* 435 */, + U64_C(0x9a58df01bb401ecc) /* 436 */, U64_C(0xa070e868a85f143d) /* 437 */, + U64_C(0x4ff188307df2239e) /* 438 */, U64_C(0x14d565b41a641183) /* 439 */, + U64_C(0xee13337452701602) /* 440 */, U64_C(0x950e3dcf3f285e09) /* 441 */, + U64_C(0x59930254b9c80953) /* 442 */, U64_C(0x3bf299408930da6d) /* 443 */, + U64_C(0xa955943f53691387) /* 444 */, U64_C(0xa15edecaa9cb8784) /* 445 */, + U64_C(0x29142127352be9a0) /* 446 */, U64_C(0x76f0371fff4e7afb) /* 447 */, + U64_C(0x0239f450274f2228) /* 448 */, U64_C(0xbb073af01d5e868b) /* 449 */, + U64_C(0xbfc80571c10e96c1) /* 450 */, U64_C(0xd267088568222e23) /* 451 */, + U64_C(0x9671a3d48e80b5b0) /* 452 */, U64_C(0x55b5d38ae193bb81) /* 453 */, + U64_C(0x693ae2d0a18b04b8) /* 454 */, U64_C(0x5c48b4ecadd5335f) /* 455 */, + U64_C(0xfd743b194916a1ca) /* 456 */, U64_C(0x2577018134be98c4) /* 457 */, + U64_C(0xe77987e83c54a4ad) /* 458 */, U64_C(0x28e11014da33e1b9) /* 459 */, + U64_C(0x270cc59e226aa213) /* 460 */, U64_C(0x71495f756d1a5f60) /* 461 */, + U64_C(0x9be853fb60afef77) /* 462 */, U64_C(0xadc786a7f7443dbf) /* 463 */, + U64_C(0x0904456173b29a82) /* 464 */, U64_C(0x58bc7a66c232bd5e) /* 465 */, + U64_C(0xf306558c673ac8b2) /* 466 */, U64_C(0x41f639c6b6c9772a) /* 467 */, + U64_C(0x216defe99fda35da) /* 468 */, U64_C(0x11640cc71c7be615) /* 469 */, + U64_C(0x93c43694565c5527) /* 470 */, U64_C(0xea038e6246777839) /* 471 */, + U64_C(0xf9abf3ce5a3e2469) /* 472 */, U64_C(0x741e768d0fd312d2) /* 473 */, + U64_C(0x0144b883ced652c6) /* 474 */, U64_C(0xc20b5a5ba33f8552) /* 475 */, + U64_C(0x1ae69633c3435a9d) /* 476 */, U64_C(0x97a28ca4088cfdec) /* 477 */, + U64_C(0x8824a43c1e96f420) /* 478 */, U64_C(0x37612fa66eeea746) /* 479 */, + U64_C(0x6b4cb165f9cf0e5a) /* 480 */, U64_C(0x43aa1c06a0abfb4a) /* 481 */, + U64_C(0x7f4dc26ff162796b) /* 482 */, U64_C(0x6cbacc8e54ed9b0f) /* 483 */, + U64_C(0xa6b7ffefd2bb253e) /* 484 */, U64_C(0x2e25bc95b0a29d4f) /* 485 */, + U64_C(0x86d6a58bdef1388c) /* 486 */, U64_C(0xded74ac576b6f054) /* 487 */, + U64_C(0x8030bdbc2b45805d) /* 488 */, U64_C(0x3c81af70e94d9289) /* 489 */, + U64_C(0x3eff6dda9e3100db) /* 490 */, U64_C(0xb38dc39fdfcc8847) /* 491 */, + U64_C(0x123885528d17b87e) /* 492 */, U64_C(0xf2da0ed240b1b642) /* 493 */, + U64_C(0x44cefadcd54bf9a9) /* 494 */, U64_C(0x1312200e433c7ee6) /* 495 */, + U64_C(0x9ffcc84f3a78c748) /* 496 */, U64_C(0xf0cd1f72248576bb) /* 497 */, + U64_C(0xec6974053638cfe4) /* 498 */, U64_C(0x2ba7b67c0cec4e4c) /* 499 */, + U64_C(0xac2f4df3e5ce32ed) /* 500 */, U64_C(0xcb33d14326ea4c11) /* 501 */, + U64_C(0xa4e9044cc77e58bc) /* 502 */, U64_C(0x5f513293d934fcef) /* 503 */, + U64_C(0x5dc9645506e55444) /* 504 */, U64_C(0x50de418f317de40a) /* 505 */, + U64_C(0x388cb31a69dde259) /* 506 */, U64_C(0x2db4a83455820a86) /* 507 */, + U64_C(0x9010a91e84711ae9) /* 508 */, U64_C(0x4df7f0b7b1498371) /* 509 */, + U64_C(0xd62a2eabc0977179) /* 510 */, U64_C(0x22fac097aa8d5c0e) /* 511 */ +}; +static u64 sbox3[256] = { + U64_C(0xf49fcc2ff1daf39b) /* 512 */, U64_C(0x487fd5c66ff29281) /* 513 */, + U64_C(0xe8a30667fcdca83f) /* 514 */, U64_C(0x2c9b4be3d2fcce63) /* 515 */, + U64_C(0xda3ff74b93fbbbc2) /* 516 */, U64_C(0x2fa165d2fe70ba66) /* 517 */, + U64_C(0xa103e279970e93d4) /* 518 */, U64_C(0xbecdec77b0e45e71) /* 519 */, + U64_C(0xcfb41e723985e497) /* 520 */, U64_C(0xb70aaa025ef75017) /* 521 */, + U64_C(0xd42309f03840b8e0) /* 522 */, U64_C(0x8efc1ad035898579) /* 523 */, + U64_C(0x96c6920be2b2abc5) /* 524 */, U64_C(0x66af4163375a9172) /* 525 */, + U64_C(0x2174abdcca7127fb) /* 526 */, U64_C(0xb33ccea64a72ff41) /* 527 */, + U64_C(0xf04a4933083066a5) /* 528 */, U64_C(0x8d970acdd7289af5) /* 529 */, + U64_C(0x8f96e8e031c8c25e) /* 530 */, U64_C(0xf3fec02276875d47) /* 531 */, + U64_C(0xec7bf310056190dd) /* 532 */, U64_C(0xf5adb0aebb0f1491) /* 533 */, + U64_C(0x9b50f8850fd58892) /* 534 */, U64_C(0x4975488358b74de8) /* 535 */, + U64_C(0xa3354ff691531c61) /* 536 */, U64_C(0x0702bbe481d2c6ee) /* 537 */, + U64_C(0x89fb24057deded98) /* 538 */, U64_C(0xac3075138596e902) /* 539 */, + U64_C(0x1d2d3580172772ed) /* 540 */, U64_C(0xeb738fc28e6bc30d) /* 541 */, + U64_C(0x5854ef8f63044326) /* 542 */, U64_C(0x9e5c52325add3bbe) /* 543 */, + U64_C(0x90aa53cf325c4623) /* 544 */, U64_C(0xc1d24d51349dd067) /* 545 */, + U64_C(0x2051cfeea69ea624) /* 546 */, U64_C(0x13220f0a862e7e4f) /* 547 */, + U64_C(0xce39399404e04864) /* 548 */, U64_C(0xd9c42ca47086fcb7) /* 549 */, + U64_C(0x685ad2238a03e7cc) /* 550 */, U64_C(0x066484b2ab2ff1db) /* 551 */, + U64_C(0xfe9d5d70efbf79ec) /* 552 */, U64_C(0x5b13b9dd9c481854) /* 553 */, + U64_C(0x15f0d475ed1509ad) /* 554 */, U64_C(0x0bebcd060ec79851) /* 555 */, + U64_C(0xd58c6791183ab7f8) /* 556 */, U64_C(0xd1187c5052f3eee4) /* 557 */, + U64_C(0xc95d1192e54e82ff) /* 558 */, U64_C(0x86eea14cb9ac6ca2) /* 559 */, + U64_C(0x3485beb153677d5d) /* 560 */, U64_C(0xdd191d781f8c492a) /* 561 */, + U64_C(0xf60866baa784ebf9) /* 562 */, U64_C(0x518f643ba2d08c74) /* 563 */, + U64_C(0x8852e956e1087c22) /* 564 */, U64_C(0xa768cb8dc410ae8d) /* 565 */, + U64_C(0x38047726bfec8e1a) /* 566 */, U64_C(0xa67738b4cd3b45aa) /* 567 */, + U64_C(0xad16691cec0dde19) /* 568 */, U64_C(0xc6d4319380462e07) /* 569 */, + U64_C(0xc5a5876d0ba61938) /* 570 */, U64_C(0x16b9fa1fa58fd840) /* 571 */, + U64_C(0x188ab1173ca74f18) /* 572 */, U64_C(0xabda2f98c99c021f) /* 573 */, + U64_C(0x3e0580ab134ae816) /* 574 */, U64_C(0x5f3b05b773645abb) /* 575 */, + U64_C(0x2501a2be5575f2f6) /* 576 */, U64_C(0x1b2f74004e7e8ba9) /* 577 */, + U64_C(0x1cd7580371e8d953) /* 578 */, U64_C(0x7f6ed89562764e30) /* 579 */, + U64_C(0xb15926ff596f003d) /* 580 */, U64_C(0x9f65293da8c5d6b9) /* 581 */, + U64_C(0x6ecef04dd690f84c) /* 582 */, U64_C(0x4782275fff33af88) /* 583 */, + U64_C(0xe41433083f820801) /* 584 */, U64_C(0xfd0dfe409a1af9b5) /* 585 */, + U64_C(0x4325a3342cdb396b) /* 586 */, U64_C(0x8ae77e62b301b252) /* 587 */, + U64_C(0xc36f9e9f6655615a) /* 588 */, U64_C(0x85455a2d92d32c09) /* 589 */, + U64_C(0xf2c7dea949477485) /* 590 */, U64_C(0x63cfb4c133a39eba) /* 591 */, + U64_C(0x83b040cc6ebc5462) /* 592 */, U64_C(0x3b9454c8fdb326b0) /* 593 */, + U64_C(0x56f56a9e87ffd78c) /* 594 */, U64_C(0x2dc2940d99f42bc6) /* 595 */, + U64_C(0x98f7df096b096e2d) /* 596 */, U64_C(0x19a6e01e3ad852bf) /* 597 */, + U64_C(0x42a99ccbdbd4b40b) /* 598 */, U64_C(0xa59998af45e9c559) /* 599 */, + U64_C(0x366295e807d93186) /* 600 */, U64_C(0x6b48181bfaa1f773) /* 601 */, + U64_C(0x1fec57e2157a0a1d) /* 602 */, U64_C(0x4667446af6201ad5) /* 603 */, + U64_C(0xe615ebcacfb0f075) /* 604 */, U64_C(0xb8f31f4f68290778) /* 605 */, + U64_C(0x22713ed6ce22d11e) /* 606 */, U64_C(0x3057c1a72ec3c93b) /* 607 */, + U64_C(0xcb46acc37c3f1f2f) /* 608 */, U64_C(0xdbb893fd02aaf50e) /* 609 */, + U64_C(0x331fd92e600b9fcf) /* 610 */, U64_C(0xa498f96148ea3ad6) /* 611 */, + U64_C(0xa8d8426e8b6a83ea) /* 612 */, U64_C(0xa089b274b7735cdc) /* 613 */, + U64_C(0x87f6b3731e524a11) /* 614 */, U64_C(0x118808e5cbc96749) /* 615 */, + U64_C(0x9906e4c7b19bd394) /* 616 */, U64_C(0xafed7f7e9b24a20c) /* 617 */, + U64_C(0x6509eadeeb3644a7) /* 618 */, U64_C(0x6c1ef1d3e8ef0ede) /* 619 */, + U64_C(0xb9c97d43e9798fb4) /* 620 */, U64_C(0xa2f2d784740c28a3) /* 621 */, + U64_C(0x7b8496476197566f) /* 622 */, U64_C(0x7a5be3e6b65f069d) /* 623 */, + U64_C(0xf96330ed78be6f10) /* 624 */, U64_C(0xeee60de77a076a15) /* 625 */, + U64_C(0x2b4bee4aa08b9bd0) /* 626 */, U64_C(0x6a56a63ec7b8894e) /* 627 */, + U64_C(0x02121359ba34fef4) /* 628 */, U64_C(0x4cbf99f8283703fc) /* 629 */, + U64_C(0x398071350caf30c8) /* 630 */, U64_C(0xd0a77a89f017687a) /* 631 */, + U64_C(0xf1c1a9eb9e423569) /* 632 */, U64_C(0x8c7976282dee8199) /* 633 */, + U64_C(0x5d1737a5dd1f7abd) /* 634 */, U64_C(0x4f53433c09a9fa80) /* 635 */, + U64_C(0xfa8b0c53df7ca1d9) /* 636 */, U64_C(0x3fd9dcbc886ccb77) /* 637 */, + U64_C(0xc040917ca91b4720) /* 638 */, U64_C(0x7dd00142f9d1dcdf) /* 639 */, + U64_C(0x8476fc1d4f387b58) /* 640 */, U64_C(0x23f8e7c5f3316503) /* 641 */, + U64_C(0x032a2244e7e37339) /* 642 */, U64_C(0x5c87a5d750f5a74b) /* 643 */, + U64_C(0x082b4cc43698992e) /* 644 */, U64_C(0xdf917becb858f63c) /* 645 */, + U64_C(0x3270b8fc5bf86dda) /* 646 */, U64_C(0x10ae72bb29b5dd76) /* 647 */, + U64_C(0x576ac94e7700362b) /* 648 */, U64_C(0x1ad112dac61efb8f) /* 649 */, + U64_C(0x691bc30ec5faa427) /* 650 */, U64_C(0xff246311cc327143) /* 651 */, + U64_C(0x3142368e30e53206) /* 652 */, U64_C(0x71380e31e02ca396) /* 653 */, + U64_C(0x958d5c960aad76f1) /* 654 */, U64_C(0xf8d6f430c16da536) /* 655 */, + U64_C(0xc8ffd13f1be7e1d2) /* 656 */, U64_C(0x7578ae66004ddbe1) /* 657 */, + U64_C(0x05833f01067be646) /* 658 */, U64_C(0xbb34b5ad3bfe586d) /* 659 */, + U64_C(0x095f34c9a12b97f0) /* 660 */, U64_C(0x247ab64525d60ca8) /* 661 */, + U64_C(0xdcdbc6f3017477d1) /* 662 */, U64_C(0x4a2e14d4decad24d) /* 663 */, + U64_C(0xbdb5e6d9be0a1eeb) /* 664 */, U64_C(0x2a7e70f7794301ab) /* 665 */, + U64_C(0xdef42d8a270540fd) /* 666 */, U64_C(0x01078ec0a34c22c1) /* 667 */, + U64_C(0xe5de511af4c16387) /* 668 */, U64_C(0x7ebb3a52bd9a330a) /* 669 */, + U64_C(0x77697857aa7d6435) /* 670 */, U64_C(0x004e831603ae4c32) /* 671 */, + U64_C(0xe7a21020ad78e312) /* 672 */, U64_C(0x9d41a70c6ab420f2) /* 673 */, + U64_C(0x28e06c18ea1141e6) /* 674 */, U64_C(0xd2b28cbd984f6b28) /* 675 */, + U64_C(0x26b75f6c446e9d83) /* 676 */, U64_C(0xba47568c4d418d7f) /* 677 */, + U64_C(0xd80badbfe6183d8e) /* 678 */, U64_C(0x0e206d7f5f166044) /* 679 */, + U64_C(0xe258a43911cbca3e) /* 680 */, U64_C(0x723a1746b21dc0bc) /* 681 */, + U64_C(0xc7caa854f5d7cdd3) /* 682 */, U64_C(0x7cac32883d261d9c) /* 683 */, + U64_C(0x7690c26423ba942c) /* 684 */, U64_C(0x17e55524478042b8) /* 685 */, + U64_C(0xe0be477656a2389f) /* 686 */, U64_C(0x4d289b5e67ab2da0) /* 687 */, + U64_C(0x44862b9c8fbbfd31) /* 688 */, U64_C(0xb47cc8049d141365) /* 689 */, + U64_C(0x822c1b362b91c793) /* 690 */, U64_C(0x4eb14655fb13dfd8) /* 691 */, + U64_C(0x1ecbba0714e2a97b) /* 692 */, U64_C(0x6143459d5cde5f14) /* 693 */, + U64_C(0x53a8fbf1d5f0ac89) /* 694 */, U64_C(0x97ea04d81c5e5b00) /* 695 */, + U64_C(0x622181a8d4fdb3f3) /* 696 */, U64_C(0xe9bcd341572a1208) /* 697 */, + U64_C(0x1411258643cce58a) /* 698 */, U64_C(0x9144c5fea4c6e0a4) /* 699 */, + U64_C(0x0d33d06565cf620f) /* 700 */, U64_C(0x54a48d489f219ca1) /* 701 */, + U64_C(0xc43e5eac6d63c821) /* 702 */, U64_C(0xa9728b3a72770daf) /* 703 */, + U64_C(0xd7934e7b20df87ef) /* 704 */, U64_C(0xe35503b61a3e86e5) /* 705 */, + U64_C(0xcae321fbc819d504) /* 706 */, U64_C(0x129a50b3ac60bfa6) /* 707 */, + U64_C(0xcd5e68ea7e9fb6c3) /* 708 */, U64_C(0xb01c90199483b1c7) /* 709 */, + U64_C(0x3de93cd5c295376c) /* 710 */, U64_C(0xaed52edf2ab9ad13) /* 711 */, + U64_C(0x2e60f512c0a07884) /* 712 */, U64_C(0xbc3d86a3e36210c9) /* 713 */, + U64_C(0x35269d9b163951ce) /* 714 */, U64_C(0x0c7d6e2ad0cdb5fa) /* 715 */, + U64_C(0x59e86297d87f5733) /* 716 */, U64_C(0x298ef221898db0e7) /* 717 */, + U64_C(0x55000029d1a5aa7e) /* 718 */, U64_C(0x8bc08ae1b5061b45) /* 719 */, + U64_C(0xc2c31c2b6c92703a) /* 720 */, U64_C(0x94cc596baf25ef42) /* 721 */, + U64_C(0x0a1d73db22540456) /* 722 */, U64_C(0x04b6a0f9d9c4179a) /* 723 */, + U64_C(0xeffdafa2ae3d3c60) /* 724 */, U64_C(0xf7c8075bb49496c4) /* 725 */, + U64_C(0x9cc5c7141d1cd4e3) /* 726 */, U64_C(0x78bd1638218e5534) /* 727 */, + U64_C(0xb2f11568f850246a) /* 728 */, U64_C(0xedfabcfa9502bc29) /* 729 */, + U64_C(0x796ce5f2da23051b) /* 730 */, U64_C(0xaae128b0dc93537c) /* 731 */, + U64_C(0x3a493da0ee4b29ae) /* 732 */, U64_C(0xb5df6b2c416895d7) /* 733 */, + U64_C(0xfcabbd25122d7f37) /* 734 */, U64_C(0x70810b58105dc4b1) /* 735 */, + U64_C(0xe10fdd37f7882a90) /* 736 */, U64_C(0x524dcab5518a3f5c) /* 737 */, + U64_C(0x3c9e85878451255b) /* 738 */, U64_C(0x4029828119bd34e2) /* 739 */, + U64_C(0x74a05b6f5d3ceccb) /* 740 */, U64_C(0xb610021542e13eca) /* 741 */, + U64_C(0x0ff979d12f59e2ac) /* 742 */, U64_C(0x6037da27e4f9cc50) /* 743 */, + U64_C(0x5e92975a0df1847d) /* 744 */, U64_C(0xd66de190d3e623fe) /* 745 */, + U64_C(0x5032d6b87b568048) /* 746 */, U64_C(0x9a36b7ce8235216e) /* 747 */, + U64_C(0x80272a7a24f64b4a) /* 748 */, U64_C(0x93efed8b8c6916f7) /* 749 */, + U64_C(0x37ddbff44cce1555) /* 750 */, U64_C(0x4b95db5d4b99bd25) /* 751 */, + U64_C(0x92d3fda169812fc0) /* 752 */, U64_C(0xfb1a4a9a90660bb6) /* 753 */, + U64_C(0x730c196946a4b9b2) /* 754 */, U64_C(0x81e289aa7f49da68) /* 755 */, + U64_C(0x64669a0f83b1a05f) /* 756 */, U64_C(0x27b3ff7d9644f48b) /* 757 */, + U64_C(0xcc6b615c8db675b3) /* 758 */, U64_C(0x674f20b9bcebbe95) /* 759 */, + U64_C(0x6f31238275655982) /* 760 */, U64_C(0x5ae488713e45cf05) /* 761 */, + U64_C(0xbf619f9954c21157) /* 762 */, U64_C(0xeabac46040a8eae9) /* 763 */, + U64_C(0x454c6fe9f2c0c1cd) /* 764 */, U64_C(0x419cf6496412691c) /* 765 */, + U64_C(0xd3dc3bef265b0f70) /* 766 */, U64_C(0x6d0e60f5c3578a9e) /* 767 */ +}; +static u64 sbox4[256] = { + U64_C(0x5b0e608526323c55) /* 768 */, U64_C(0x1a46c1a9fa1b59f5) /* 769 */, + U64_C(0xa9e245a17c4c8ffa) /* 770 */, U64_C(0x65ca5159db2955d7) /* 771 */, + U64_C(0x05db0a76ce35afc2) /* 772 */, U64_C(0x81eac77ea9113d45) /* 773 */, + U64_C(0x528ef88ab6ac0a0d) /* 774 */, U64_C(0xa09ea253597be3ff) /* 775 */, + U64_C(0x430ddfb3ac48cd56) /* 776 */, U64_C(0xc4b3a67af45ce46f) /* 777 */, + U64_C(0x4ececfd8fbe2d05e) /* 778 */, U64_C(0x3ef56f10b39935f0) /* 779 */, + U64_C(0x0b22d6829cd619c6) /* 780 */, U64_C(0x17fd460a74df2069) /* 781 */, + U64_C(0x6cf8cc8e8510ed40) /* 782 */, U64_C(0xd6c824bf3a6ecaa7) /* 783 */, + U64_C(0x61243d581a817049) /* 784 */, U64_C(0x048bacb6bbc163a2) /* 785 */, + U64_C(0xd9a38ac27d44cc32) /* 786 */, U64_C(0x7fddff5baaf410ab) /* 787 */, + U64_C(0xad6d495aa804824b) /* 788 */, U64_C(0xe1a6a74f2d8c9f94) /* 789 */, + U64_C(0xd4f7851235dee8e3) /* 790 */, U64_C(0xfd4b7f886540d893) /* 791 */, + U64_C(0x247c20042aa4bfda) /* 792 */, U64_C(0x096ea1c517d1327c) /* 793 */, + U64_C(0xd56966b4361a6685) /* 794 */, U64_C(0x277da5c31221057d) /* 795 */, + U64_C(0x94d59893a43acff7) /* 796 */, U64_C(0x64f0c51ccdc02281) /* 797 */, + U64_C(0x3d33bcc4ff6189db) /* 798 */, U64_C(0xe005cb184ce66af1) /* 799 */, + U64_C(0xff5ccd1d1db99bea) /* 800 */, U64_C(0xb0b854a7fe42980f) /* 801 */, + U64_C(0x7bd46a6a718d4b9f) /* 802 */, U64_C(0xd10fa8cc22a5fd8c) /* 803 */, + U64_C(0xd31484952be4bd31) /* 804 */, U64_C(0xc7fa975fcb243847) /* 805 */, + U64_C(0x4886ed1e5846c407) /* 806 */, U64_C(0x28cddb791eb70b04) /* 807 */, + U64_C(0xc2b00be2f573417f) /* 808 */, U64_C(0x5c9590452180f877) /* 809 */, + U64_C(0x7a6bddfff370eb00) /* 810 */, U64_C(0xce509e38d6d9d6a4) /* 811 */, + U64_C(0xebeb0f00647fa702) /* 812 */, U64_C(0x1dcc06cf76606f06) /* 813 */, + U64_C(0xe4d9f28ba286ff0a) /* 814 */, U64_C(0xd85a305dc918c262) /* 815 */, + U64_C(0x475b1d8732225f54) /* 816 */, U64_C(0x2d4fb51668ccb5fe) /* 817 */, + U64_C(0xa679b9d9d72bba20) /* 818 */, U64_C(0x53841c0d912d43a5) /* 819 */, + U64_C(0x3b7eaa48bf12a4e8) /* 820 */, U64_C(0x781e0e47f22f1ddf) /* 821 */, + U64_C(0xeff20ce60ab50973) /* 822 */, U64_C(0x20d261d19dffb742) /* 823 */, + U64_C(0x16a12b03062a2e39) /* 824 */, U64_C(0x1960eb2239650495) /* 825 */, + U64_C(0x251c16fed50eb8b8) /* 826 */, U64_C(0x9ac0c330f826016e) /* 827 */, + U64_C(0xed152665953e7671) /* 828 */, U64_C(0x02d63194a6369570) /* 829 */, + U64_C(0x5074f08394b1c987) /* 830 */, U64_C(0x70ba598c90b25ce1) /* 831 */, + U64_C(0x794a15810b9742f6) /* 832 */, U64_C(0x0d5925e9fcaf8c6c) /* 833 */, + U64_C(0x3067716cd868744e) /* 834 */, U64_C(0x910ab077e8d7731b) /* 835 */, + U64_C(0x6a61bbdb5ac42f61) /* 836 */, U64_C(0x93513efbf0851567) /* 837 */, + U64_C(0xf494724b9e83e9d5) /* 838 */, U64_C(0xe887e1985c09648d) /* 839 */, + U64_C(0x34b1d3c675370cfd) /* 840 */, U64_C(0xdc35e433bc0d255d) /* 841 */, + U64_C(0xd0aab84234131be0) /* 842 */, U64_C(0x08042a50b48b7eaf) /* 843 */, + U64_C(0x9997c4ee44a3ab35) /* 844 */, U64_C(0x829a7b49201799d0) /* 845 */, + U64_C(0x263b8307b7c54441) /* 846 */, U64_C(0x752f95f4fd6a6ca6) /* 847 */, + U64_C(0x927217402c08c6e5) /* 848 */, U64_C(0x2a8ab754a795d9ee) /* 849 */, + U64_C(0xa442f7552f72943d) /* 850 */, U64_C(0x2c31334e19781208) /* 851 */, + U64_C(0x4fa98d7ceaee6291) /* 852 */, U64_C(0x55c3862f665db309) /* 853 */, + U64_C(0xbd0610175d53b1f3) /* 854 */, U64_C(0x46fe6cb840413f27) /* 855 */, + U64_C(0x3fe03792df0cfa59) /* 856 */, U64_C(0xcfe700372eb85e8f) /* 857 */, + U64_C(0xa7be29e7adbce118) /* 858 */, U64_C(0xe544ee5cde8431dd) /* 859 */, + U64_C(0x8a781b1b41f1873e) /* 860 */, U64_C(0xa5c94c78a0d2f0e7) /* 861 */, + U64_C(0x39412e2877b60728) /* 862 */, U64_C(0xa1265ef3afc9a62c) /* 863 */, + U64_C(0xbcc2770c6a2506c5) /* 864 */, U64_C(0x3ab66dd5dce1ce12) /* 865 */, + U64_C(0xe65499d04a675b37) /* 866 */, U64_C(0x7d8f523481bfd216) /* 867 */, + U64_C(0x0f6f64fcec15f389) /* 868 */, U64_C(0x74efbe618b5b13c8) /* 869 */, + U64_C(0xacdc82b714273e1d) /* 870 */, U64_C(0xdd40bfe003199d17) /* 871 */, + U64_C(0x37e99257e7e061f8) /* 872 */, U64_C(0xfa52626904775aaa) /* 873 */, + U64_C(0x8bbbf63a463d56f9) /* 874 */, U64_C(0xf0013f1543a26e64) /* 875 */, + U64_C(0xa8307e9f879ec898) /* 876 */, U64_C(0xcc4c27a4150177cc) /* 877 */, + U64_C(0x1b432f2cca1d3348) /* 878 */, U64_C(0xde1d1f8f9f6fa013) /* 879 */, + U64_C(0x606602a047a7ddd6) /* 880 */, U64_C(0xd237ab64cc1cb2c7) /* 881 */, + U64_C(0x9b938e7225fcd1d3) /* 882 */, U64_C(0xec4e03708e0ff476) /* 883 */, + U64_C(0xfeb2fbda3d03c12d) /* 884 */, U64_C(0xae0bced2ee43889a) /* 885 */, + U64_C(0x22cb8923ebfb4f43) /* 886 */, U64_C(0x69360d013cf7396d) /* 887 */, + U64_C(0x855e3602d2d4e022) /* 888 */, U64_C(0x073805bad01f784c) /* 889 */, + U64_C(0x33e17a133852f546) /* 890 */, U64_C(0xdf4874058ac7b638) /* 891 */, + U64_C(0xba92b29c678aa14a) /* 892 */, U64_C(0x0ce89fc76cfaadcd) /* 893 */, + U64_C(0x5f9d4e0908339e34) /* 894 */, U64_C(0xf1afe9291f5923b9) /* 895 */, + U64_C(0x6e3480f60f4a265f) /* 896 */, U64_C(0xeebf3a2ab29b841c) /* 897 */, + U64_C(0xe21938a88f91b4ad) /* 898 */, U64_C(0x57dfeff845c6d3c3) /* 899 */, + U64_C(0x2f006b0bf62caaf2) /* 900 */, U64_C(0x62f479ef6f75ee78) /* 901 */, + U64_C(0x11a55ad41c8916a9) /* 902 */, U64_C(0xf229d29084fed453) /* 903 */, + U64_C(0x42f1c27b16b000e6) /* 904 */, U64_C(0x2b1f76749823c074) /* 905 */, + U64_C(0x4b76eca3c2745360) /* 906 */, U64_C(0x8c98f463b91691bd) /* 907 */, + U64_C(0x14bcc93cf1ade66a) /* 908 */, U64_C(0x8885213e6d458397) /* 909 */, + U64_C(0x8e177df0274d4711) /* 910 */, U64_C(0xb49b73b5503f2951) /* 911 */, + U64_C(0x10168168c3f96b6b) /* 912 */, U64_C(0x0e3d963b63cab0ae) /* 913 */, + U64_C(0x8dfc4b5655a1db14) /* 914 */, U64_C(0xf789f1356e14de5c) /* 915 */, + U64_C(0x683e68af4e51dac1) /* 916 */, U64_C(0xc9a84f9d8d4b0fd9) /* 917 */, + U64_C(0x3691e03f52a0f9d1) /* 918 */, U64_C(0x5ed86e46e1878e80) /* 919 */, + U64_C(0x3c711a0e99d07150) /* 920 */, U64_C(0x5a0865b20c4e9310) /* 921 */, + U64_C(0x56fbfc1fe4f0682e) /* 922 */, U64_C(0xea8d5de3105edf9b) /* 923 */, + U64_C(0x71abfdb12379187a) /* 924 */, U64_C(0x2eb99de1bee77b9c) /* 925 */, + U64_C(0x21ecc0ea33cf4523) /* 926 */, U64_C(0x59a4d7521805c7a1) /* 927 */, + U64_C(0x3896f5eb56ae7c72) /* 928 */, U64_C(0xaa638f3db18f75dc) /* 929 */, + U64_C(0x9f39358dabe9808e) /* 930 */, U64_C(0xb7defa91c00b72ac) /* 931 */, + U64_C(0x6b5541fd62492d92) /* 932 */, U64_C(0x6dc6dee8f92e4d5b) /* 933 */, + U64_C(0x353f57abc4beea7e) /* 934 */, U64_C(0x735769d6da5690ce) /* 935 */, + U64_C(0x0a234aa642391484) /* 936 */, U64_C(0xf6f9508028f80d9d) /* 937 */, + U64_C(0xb8e319a27ab3f215) /* 938 */, U64_C(0x31ad9c1151341a4d) /* 939 */, + U64_C(0x773c22a57bef5805) /* 940 */, U64_C(0x45c7561a07968633) /* 941 */, + U64_C(0xf913da9e249dbe36) /* 942 */, U64_C(0xda652d9b78a64c68) /* 943 */, + U64_C(0x4c27a97f3bc334ef) /* 944 */, U64_C(0x76621220e66b17f4) /* 945 */, + U64_C(0x967743899acd7d0b) /* 946 */, U64_C(0xf3ee5bcae0ed6782) /* 947 */, + U64_C(0x409f753600c879fc) /* 948 */, U64_C(0x06d09a39b5926db6) /* 949 */, + U64_C(0x6f83aeb0317ac588) /* 950 */, U64_C(0x01e6ca4a86381f21) /* 951 */, + U64_C(0x66ff3462d19f3025) /* 952 */, U64_C(0x72207c24ddfd3bfb) /* 953 */, + U64_C(0x4af6b6d3e2ece2eb) /* 954 */, U64_C(0x9c994dbec7ea08de) /* 955 */, + U64_C(0x49ace597b09a8bc4) /* 956 */, U64_C(0xb38c4766cf0797ba) /* 957 */, + U64_C(0x131b9373c57c2a75) /* 958 */, U64_C(0xb1822cce61931e58) /* 959 */, + U64_C(0x9d7555b909ba1c0c) /* 960 */, U64_C(0x127fafdd937d11d2) /* 961 */, + U64_C(0x29da3badc66d92e4) /* 962 */, U64_C(0xa2c1d57154c2ecbc) /* 963 */, + U64_C(0x58c5134d82f6fe24) /* 964 */, U64_C(0x1c3ae3515b62274f) /* 965 */, + U64_C(0xe907c82e01cb8126) /* 966 */, U64_C(0xf8ed091913e37fcb) /* 967 */, + U64_C(0x3249d8f9c80046c9) /* 968 */, U64_C(0x80cf9bede388fb63) /* 969 */, + U64_C(0x1881539a116cf19e) /* 970 */, U64_C(0x5103f3f76bd52457) /* 971 */, + U64_C(0x15b7e6f5ae47f7a8) /* 972 */, U64_C(0xdbd7c6ded47e9ccf) /* 973 */, + U64_C(0x44e55c410228bb1a) /* 974 */, U64_C(0xb647d4255edb4e99) /* 975 */, + U64_C(0x5d11882bb8aafc30) /* 976 */, U64_C(0xf5098bbb29d3212a) /* 977 */, + U64_C(0x8fb5ea14e90296b3) /* 978 */, U64_C(0x677b942157dd025a) /* 979 */, + U64_C(0xfb58e7c0a390acb5) /* 980 */, U64_C(0x89d3674c83bd4a01) /* 981 */, + U64_C(0x9e2da4df4bf3b93b) /* 982 */, U64_C(0xfcc41e328cab4829) /* 983 */, + U64_C(0x03f38c96ba582c52) /* 984 */, U64_C(0xcad1bdbd7fd85db2) /* 985 */, + U64_C(0xbbb442c16082ae83) /* 986 */, U64_C(0xb95fe86ba5da9ab0) /* 987 */, + U64_C(0xb22e04673771a93f) /* 988 */, U64_C(0x845358c9493152d8) /* 989 */, + U64_C(0xbe2a488697b4541e) /* 990 */, U64_C(0x95a2dc2dd38e6966) /* 991 */, + U64_C(0xc02c11ac923c852b) /* 992 */, U64_C(0x2388b1990df2a87b) /* 993 */, + U64_C(0x7c8008fa1b4f37be) /* 994 */, U64_C(0x1f70d0c84d54e503) /* 995 */, + U64_C(0x5490adec7ece57d4) /* 996 */, U64_C(0x002b3c27d9063a3a) /* 997 */, + U64_C(0x7eaea3848030a2bf) /* 998 */, U64_C(0xc602326ded2003c0) /* 999 */, + U64_C(0x83a7287d69a94086) /* 1000 */, U64_C(0xc57a5fcb30f57a8a) /* 1001 */, + U64_C(0xb56844e479ebe779) /* 1002 */, U64_C(0xa373b40f05dcbce9) /* 1003 */, + U64_C(0xd71a786e88570ee2) /* 1004 */, U64_C(0x879cbacdbde8f6a0) /* 1005 */, + U64_C(0x976ad1bcc164a32f) /* 1006 */, U64_C(0xab21e25e9666d78b) /* 1007 */, + U64_C(0x901063aae5e5c33c) /* 1008 */, U64_C(0x9818b34448698d90) /* 1009 */, + U64_C(0xe36487ae3e1e8abb) /* 1010 */, U64_C(0xafbdf931893bdcb4) /* 1011 */, + U64_C(0x6345a0dc5fbbd519) /* 1012 */, U64_C(0x8628fe269b9465ca) /* 1013 */, + U64_C(0x1e5d01603f9c51ec) /* 1014 */, U64_C(0x4de44006a15049b7) /* 1015 */, + U64_C(0xbf6c70e5f776cbb1) /* 1016 */, U64_C(0x411218f2ef552bed) /* 1017 */, + U64_C(0xcb0c0708705a36a3) /* 1018 */, U64_C(0xe74d14754f986044) /* 1019 */, + U64_C(0xcd56d9430ea8280e) /* 1020 */, U64_C(0xc12591d7535f5065) /* 1021 */, + U64_C(0xc83223f1720aef96) /* 1022 */, U64_C(0xc3a0396f7363a51f) /* 1023 */ +}; + +static void +do_init (void *context, int variant) +{ + TIGER_CONTEXT *hd = context; + + hd->a = 0x0123456789abcdefLL; + hd->b = 0xfedcba9876543210LL; + hd->c = 0xf096a5b4c3b2e187LL; + hd->nblocks = 0; + hd->count = 0; + hd->variant = variant; +} + +static void +tiger_init (void *context) +{ + do_init (context, 0); +} + +static void +tiger1_init (void *context) +{ + do_init (context, 1); +} + +static void +tiger2_init (void *context) +{ + do_init (context, 2); +} + +static void +tiger_round( u64 *ra, u64 *rb, u64 *rc, u64 x, int mul ) +{ + u64 a = *ra; + u64 b = *rb; + u64 c = *rc; + + c ^= x; + a -= ( sbox1[ c & 0xff ] ^ sbox2[ (c >> 16) & 0xff ] + ^ sbox3[ (c >> 32) & 0xff ] ^ sbox4[ (c >> 48) & 0xff ]); + b += ( sbox4[ (c >> 8) & 0xff ] ^ sbox3[ (c >> 24) & 0xff ] + ^ sbox2[ (c >> 40) & 0xff ] ^ sbox1[ (c >> 56) & 0xff ]); + b *= mul; + + *ra = a; + *rb = b; + *rc = c; +} + + +static void +pass( u64 *ra, u64 *rb, u64 *rc, u64 *x, int mul ) +{ + u64 a = *ra; + u64 b = *rb; + u64 c = *rc; + + tiger_round( &a, &b, &c, x[0], mul ); + tiger_round( &b, &c, &a, x[1], mul ); + tiger_round( &c, &a, &b, x[2], mul ); + tiger_round( &a, &b, &c, x[3], mul ); + tiger_round( &b, &c, &a, x[4], mul ); + tiger_round( &c, &a, &b, x[5], mul ); + tiger_round( &a, &b, &c, x[6], mul ); + tiger_round( &b, &c, &a, x[7], mul ); + + *ra = a; + *rb = b; + *rc = c; +} + + +static void +key_schedule( u64 *x ) +{ + x[0] -= x[7] ^ 0xa5a5a5a5a5a5a5a5LL; + x[1] ^= x[0]; + x[2] += x[1]; + x[3] -= x[2] ^ ((~x[1]) << 19 ); + x[4] ^= x[3]; + x[5] += x[4]; + x[6] -= x[5] ^ ((~x[4]) >> 23 ); + x[7] ^= x[6]; + x[0] += x[7]; + x[1] -= x[0] ^ ((~x[7]) << 19 ); + x[2] ^= x[1]; + x[3] += x[2]; + x[4] -= x[3] ^ ((~x[2]) >> 23 ); + x[5] ^= x[4]; + x[6] += x[5]; + x[7] -= x[6] ^ 0x0123456789abcdefLL; +} + + +/**************** + * Transform the message DATA which consists of 512 bytes (8 words) + */ +static void +transform ( TIGER_CONTEXT *hd, const unsigned char *data ) +{ + u64 a,b,c,aa,bb,cc; + u64 x[8]; +#ifdef WORDS_BIGENDIAN +#define MKWORD(d,n) \ + ( ((u64)(d)[8*(n)+7]) << 56 | ((u64)(d)[8*(n)+6]) << 48 \ + | ((u64)(d)[8*(n)+5]) << 40 | ((u64)(d)[8*(n)+4]) << 32 \ + | ((u64)(d)[8*(n)+3]) << 24 | ((u64)(d)[8*(n)+2]) << 16 \ + | ((u64)(d)[8*(n)+1]) << 8 | ((u64)(d)[8*(n) ]) ) + x[0] = MKWORD(data, 0); + x[1] = MKWORD(data, 1); + x[2] = MKWORD(data, 2); + x[3] = MKWORD(data, 3); + x[4] = MKWORD(data, 4); + x[5] = MKWORD(data, 5); + x[6] = MKWORD(data, 6); + x[7] = MKWORD(data, 7); +#undef MKWORD +#else + memcpy( &x[0], data, 64 ); +#endif + + /* save */ + a = aa = hd->a; + b = bb = hd->b; + c = cc = hd->c; + + pass( &a, &b, &c, x, 5); + key_schedule( x ); + pass( &c, &a, &b, x, 7); + key_schedule( x ); + pass( &b, &c, &a, x, 9); + + /* feedforward */ + a ^= aa; + b -= bb; + c += cc; + /* store */ + hd->a = a; + hd->b = b; + hd->c = c; +} + + + +/* Update the message digest with the contents + * of INBUF with length INLEN. + */ +static void +tiger_write ( void *context, const void *inbuf_arg, size_t inlen) +{ + const unsigned char *inbuf = inbuf_arg; + TIGER_CONTEXT *hd = context; + + if( hd->count == 64 ) /* flush the buffer */ + { + transform( hd, hd->buf ); + _gcry_burn_stack (21*8+11*sizeof(void*)); + hd->count = 0; + hd->nblocks++; + } + if( !inbuf ) + return; + if( hd->count ) + { + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; + tiger_write( hd, NULL, 0 ); + if( !inlen ) + return; + } + + while( inlen >= 64 ) + { + transform( hd, inbuf ); + hd->count = 0; + hd->nblocks++; + inlen -= 64; + inbuf += 64; + } + _gcry_burn_stack (21*8+11*sizeof(void*)); + for( ; inlen && hd->count < 64; inlen-- ) + hd->buf[hd->count++] = *inbuf++; +} + + + +/* The routine terminates the computation + */ +static void +tiger_final( void *context ) +{ + TIGER_CONTEXT *hd = context; + u32 t, msb, lsb; + byte *p; + byte pad = hd->variant == 2? 0x80 : 0x01; + + tiger_write(hd, NULL, 0); /* flush */; + + t = hd->nblocks; + /* multiply by 64 to make a byte count */ + lsb = t << 6; + msb = t >> 26; + /* add the count */ + t = lsb; + if( (lsb += hd->count) < t ) + msb++; + /* multiply by 8 to make a bit count */ + t = lsb; + lsb <<= 3; + msb <<= 3; + msb |= t >> 29; + + if( hd->count < 56 ) /* enough room */ + { + hd->buf[hd->count++] = pad; + while( hd->count < 56 ) + hd->buf[hd->count++] = 0; /* pad */ + } + else /* need one extra block */ + { + hd->buf[hd->count++] = pad; /* pad character */ + while( hd->count < 64 ) + hd->buf[hd->count++] = 0; + tiger_write(hd, NULL, 0); /* flush */; + memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ + } + /* append the 64 bit count */ + hd->buf[56] = lsb ; + hd->buf[57] = lsb >> 8; + hd->buf[58] = lsb >> 16; + hd->buf[59] = lsb >> 24; + hd->buf[60] = msb ; + hd->buf[61] = msb >> 8; + hd->buf[62] = msb >> 16; + hd->buf[63] = msb >> 24; + transform( hd, hd->buf ); + _gcry_burn_stack (21*8+11*sizeof(void*)); + + p = hd->buf; +#ifdef WORDS_BIGENDIAN +#define X(a) do { *(u64*)p = hd->a ; p += 8; } while(0) +#else /* little endian */ +#define X(a) do { *p++ = hd->a >> 56; *p++ = hd->a >> 48; \ + *p++ = hd->a >> 40; *p++ = hd->a >> 32; \ + *p++ = hd->a >> 24; *p++ = hd->a >> 16; \ + *p++ = hd->a >> 8; *p++ = hd->a; } while(0) +#endif +#define Y(a) do { *p++ = hd->a ; *p++ = hd->a >> 8; \ + *p++ = hd->a >> 16; *p++ = hd->a >> 24; \ + *p++ = hd->a >> 32; *p++ = hd->a >> 40; \ + *p++ = hd->a >> 48; *p++ = hd->a >> 56; } while(0) + if (hd->variant == 0) + { + X(a); + X(b); + X(c); + } + else + { + Y(a); + Y(b); + Y(c); + } +#undef X +#undef Y +} + +static byte * +tiger_read( void *context ) +{ + TIGER_CONTEXT *hd = context; + + return hd->buf; +} + + + +/* This is the old TIGER variant based on the unfixed reference + implementation. IT was used in GnupG up to 1.3.2. We don't provide + an OID anymore because that would not be correct. */ +gcry_md_spec_t _gcry_digest_spec_tiger = + { + "TIGER192", NULL, 0, NULL, 24, + tiger_init, tiger_write, tiger_final, tiger_read, + sizeof (TIGER_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_tiger", +#endif + .blocksize = 64 + }; + + + +/* This is the fixed TIGER implementation. */ +static byte asn1[19] = /* Object ID is 1.3.6.1.4.1.11591.12.2 */ + { 0x30, 0x29, 0x30, 0x0d, 0x06, 0x09, 0x2b, 0x06, + 0x01, 0x04, 0x01, 0xda, 0x47, 0x0c, 0x02, + 0x05, 0x00, 0x04, 0x18 }; + +static gcry_md_oid_spec_t oid_spec_tiger1[] = + { + /* GNU.digestAlgorithm TIGER */ + { "1.3.6.1.4.1.11591.12.2" }, + { NULL } + }; + +gcry_md_spec_t _gcry_digest_spec_tiger1 = + { + "TIGER", asn1, DIM (asn1), oid_spec_tiger1, 24, + tiger1_init, tiger_write, tiger_final, tiger_read, + sizeof (TIGER_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_tiger", +#endif + .blocksize = 64 + }; + + + +/* This is TIGER2 which usues a changed padding algorithm. */ +gcry_md_spec_t _gcry_digest_spec_tiger2 = + { + "TIGER2", NULL, 0, NULL, 24, + tiger2_init, tiger_write, tiger_final, tiger_read, + sizeof (TIGER_CONTEXT) + , +#ifdef GRUB_UTIL + .modname = "gcry_tiger", +#endif + .blocksize = 64 + }; + +#endif /* HAVE_U64_TYPEDEF */ + + +GRUB_MOD_INIT(gcry_tiger) +{ + COMPILE_TIME_ASSERT(sizeof (TIGER_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + COMPILE_TIME_ASSERT(sizeof (TIGER_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + COMPILE_TIME_ASSERT(sizeof (TIGER_CONTEXT) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_tiger); + grub_md_register (&_gcry_digest_spec_tiger1); + grub_md_register (&_gcry_digest_spec_tiger2); +} + +GRUB_MOD_FINI(gcry_tiger) +{ + grub_md_unregister (&_gcry_digest_spec_tiger); + grub_md_unregister (&_gcry_digest_spec_tiger1); + grub_md_unregister (&_gcry_digest_spec_tiger2); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/twofish.c b/grub-core/lib/libgcrypt-grub/cipher/twofish.c new file mode 100644 index 000000000..0a65ac18c --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/twofish.c @@ -0,0 +1,1001 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* Twofish for GPG + * Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc. + * Written by Matthew Skala , July 26, 1998 + * 256-bit key length added March 20, 1999 + * Some modifications to reduce the text size by Werner Koch, April, 1998 + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + ******************************************************************** + * + * This code is a "clean room" implementation, written from the paper + * _Twofish: A 128-Bit Block Cipher_ by Bruce Schneier, John Kelsey, + * Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson, available + * through http://www.counterpane.com/twofish.html + * + * For background information on multiplication in finite fields, used for + * the matrix operations in the key schedule, see the book _Contemporary + * Abstract Algebra_ by Joseph A. Gallian, especially chapter 22 in the + * Third Edition. + * + * Only the 128- and 256-bit key sizes are supported. This code is intended + * for GNU C on a 32-bit system, but it should work almost anywhere. Loops + * are unrolled, precomputation tables are used, etc., for maximum speed at + * some cost in memory consumption. */ + + +#include "types.h" /* for byte and u32 typedefs */ +#include "g10lib.h" +#include "cipher.h" + +/* Prototype for the self-test function. */ + +/* Structure for an expanded Twofish key. s contains the key-dependent + * S-boxes composed with the MDS matrix; w contains the eight "whitening" + * subkeys, K[0] through K[7]. k holds the remaining, "round" subkeys. Note + * that k[i] corresponds to what the Twofish paper calls K[i+8]. */ +typedef struct { + u32 s[4][256], w[8], k[32]; +} TWOFISH_context; + +/* These two tables are the q0 and q1 permutations, exactly as described in + * the Twofish paper. */ + +static const byte q0[256] = { + 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78, + 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C, + 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30, + 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82, + 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE, + 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B, + 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45, + 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7, + 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF, + 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8, + 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED, + 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90, + 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B, + 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B, + 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F, + 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A, + 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17, + 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72, + 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68, + 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4, + 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42, + 0x4A, 0x5E, 0xC1, 0xE0 +}; + +static const byte q1[256] = { + 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B, + 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1, + 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B, + 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5, + 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54, + 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96, + 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7, + 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8, + 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF, + 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9, + 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D, + 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E, + 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21, + 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01, + 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E, + 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64, + 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44, + 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E, + 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B, + 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9, + 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56, + 0x55, 0x09, 0xBE, 0x91 +}; + +/* These MDS tables are actually tables of MDS composed with q0 and q1, + * because it is only ever used that way and we can save some time by + * precomputing. Of course the main saving comes from precomputing the + * GF(2^8) multiplication involved in the MDS matrix multiply; by looking + * things up in these tables we reduce the matrix multiply to four lookups + * and three XORs. Semi-formally, the definition of these tables is: + * mds[0][i] = MDS (q1[i] 0 0 0)^T mds[1][i] = MDS (0 q0[i] 0 0)^T + * mds[2][i] = MDS (0 0 q1[i] 0)^T mds[3][i] = MDS (0 0 0 q0[i])^T + * where ^T means "transpose", the matrix multiply is performed in GF(2^8) + * represented as GF(2)[x]/v(x) where v(x)=x^8+x^6+x^5+x^3+1 as described + * by Schneier et al, and I'm casually glossing over the byte/word + * conversion issues. */ + +static const u32 mds[4][256] = { + {0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, + 0xE2E22BFB, 0x9E9EFAC8, 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, + 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, 0x3C3C57D6, 0x93938A32, + 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1, + 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, + 0xB0B0B306, 0x7575DE3F, 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, + 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, 0xAEAE2C6D, 0x7F7FABC1, + 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5, + 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, + 0x3131272C, 0x808065A3, 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, + 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, 0x2A2A3638, 0xC4C49CB0, + 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796, + 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, + 0x6767C027, 0xE9E9AF8C, 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, + 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, 0x29294CCA, 0xF0F035E3, + 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8, + 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, + 0xC8C81DC3, 0x9999FFCC, 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, + 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, 0xB5B53D79, 0x09090F0C, + 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9, + 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, + 0xEDEDD07A, 0x4343FC17, 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, + 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, 0x5656E70B, 0xE3E3DA72, + 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E, + 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, + 0x8181942A, 0x91910149, 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, + 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, 0x7878AEC5, 0xC5C56D39, + 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01, + 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, + 0x55559DF9, 0x7E7E5A48, 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, + 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, 0x0606F48D, 0x404086E5, + 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64, + 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, + 0x2D2D333C, 0x3030D6A5, 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, + 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, 0xD9D97929, 0x8686912E, + 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E, + 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, + 0xC1C112CF, 0x8585EBDC, 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, + 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, 0xABABA212, 0x6F6F3EA2, + 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9, + 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, + 0x04047FF6, 0x272746C2, 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, + 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91}, + + {0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, + 0xA3658080, 0x76DFE4E4, 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, + 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, 0x0D54E6E6, 0xC6432020, + 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141, + 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, + 0x94B1FBFB, 0x485A7E7E, 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, + 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, 0x1945FDFD, 0x5BA33A3A, + 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757, + 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, + 0x9B53AAAA, 0x7C635D5D, 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, + 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, 0xC0F09090, 0x8CAFE9E9, + 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656, + 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, + 0xB499C3C3, 0xF1975B5B, 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, + 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, 0xCCFF9999, 0x95EA1414, + 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3, + 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, + 0xBF7E9595, 0xBA207D7D, 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, + 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, 0x81FB0F0F, 0x793DB5B5, + 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282, + 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, + 0x86135050, 0xE730F7F7, 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, + 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, 0x410B9F9F, 0x7B8B0202, + 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC, + 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, + 0xB1C72B2B, 0xAB6F8E8E, 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, + 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, 0x91EF1313, 0x85FE0808, + 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272, + 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, + 0x6929A9A9, 0x647D4F4F, 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, + 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, 0xAC87D1D1, 0x7F8E0505, + 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5, + 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, + 0x4C5F7979, 0x02B6B7B7, 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, + 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, 0x57AC3333, 0xC718CFCF, + 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3, + 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, + 0x99E51D1D, 0x34392323, 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, + 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, 0xC8FA9E9E, 0xA882D6D6, + 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF, + 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, + 0x0FE25151, 0x00000000, 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, + 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8}, + + {0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, + 0xE2FBE22B, 0x9EC89EFA, 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, + 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, 0x3CD63C57, 0x9332938A, + 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783, + 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, + 0xB006B0B3, 0x753F75DE, 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, + 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, 0xAE6DAE2C, 0x7FC17FAB, + 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA, + 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, + 0x312C3127, 0x80A38065, 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, + 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, 0x2A382A36, 0xC4B0C49C, + 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07, + 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, + 0x672767C0, 0xE98CE9AF, 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, + 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, 0x29CA294C, 0xF0E3F035, + 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96, + 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, + 0xC8C3C81D, 0x99CC99FF, 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, + 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, 0xB579B53D, 0x090C090F, + 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD, + 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, + 0xED7AEDD0, 0x431743FC, 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, + 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, 0x560B56E7, 0xE372E3DA, + 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85, + 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, + 0x812A8194, 0x91499101, 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, + 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, 0x78C578AE, 0xC539C56D, + 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B, + 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, + 0x55F9559D, 0x7E487E5A, 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, + 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, 0x068D06F4, 0x40E54086, + 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D, + 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, + 0x2D3C2D33, 0x30A530D6, 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, + 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, 0xD929D979, 0x862E8691, + 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D, + 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, + 0xC1CFC112, 0x85DC85EB, 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, + 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, 0xAB12ABA2, 0x6FA26F3E, + 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9, + 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, + 0x04F6047F, 0x27C22746, 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, + 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF}, + + {0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, + 0x6580A365, 0xDFE476DF, 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, + 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, 0x54E60D54, 0x4320C643, + 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77, + 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, + 0xB1FB94B1, 0x5A7E485A, 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, + 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, 0x45FD1945, 0xA33A5BA3, + 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216, + 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, + 0x53AA9B53, 0x635D7C63, 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, + 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, 0xF090C0F0, 0xAFE98CAF, + 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7, + 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, + 0x99C3B499, 0x975BF197, 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, + 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, 0xFF99CCFF, 0xEA1495EA, + 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C, + 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, + 0x7E95BF7E, 0x207DBA20, 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, + 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, 0xFB0F81FB, 0x3DB5793D, + 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE, + 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, + 0x13508613, 0x30F7E730, 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, + 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, 0x0B9F410B, 0x8B027B8B, + 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4, + 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, + 0xC72BB1C7, 0x6F8EAB6F, 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, + 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, 0xEF1391EF, 0xFE0885FE, + 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB, + 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, + 0x29A96929, 0x7D4F647D, 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, + 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, 0x87D1AC87, 0x8E057F8E, + 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8, + 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, + 0x5F794C5F, 0xB6B702B6, 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, + 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, 0xAC3357AC, 0x18CFC718, + 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA, + 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, + 0xE51D99E5, 0x39233439, 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, + 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, 0xFA9EC8FA, 0x82D6A882, + 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D, + 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, + 0xE2510FE2, 0x00000000, 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, + 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8} +}; + +/* The exp_to_poly and poly_to_exp tables are used to perform efficient + * operations in GF(2^8) represented as GF(2)[x]/w(x) where + * w(x)=x^8+x^6+x^3+x^2+1. We care about doing that because it's part of the + * definition of the RS matrix in the key schedule. Elements of that field + * are polynomials of degree not greater than 7 and all coefficients 0 or 1, + * which can be represented naturally by bytes (just substitute x=2). In that + * form, GF(2^8) addition is the same as bitwise XOR, but GF(2^8) + * multiplication is inefficient without hardware support. To multiply + * faster, I make use of the fact x is a generator for the nonzero elements, + * so that every element p of GF(2)[x]/w(x) is either 0 or equal to (x)^n for + * some n in 0..254. Note that that caret is exponentiation in GF(2^8), + * *not* polynomial notation. So if I want to compute pq where p and q are + * in GF(2^8), I can just say: + * 1. if p=0 or q=0 then pq=0 + * 2. otherwise, find m and n such that p=x^m and q=x^n + * 3. pq=(x^m)(x^n)=x^(m+n), so add m and n and find pq + * The translations in steps 2 and 3 are looked up in the tables + * poly_to_exp (for step 2) and exp_to_poly (for step 3). To see this + * in action, look at the CALC_S macro. As additional wrinkles, note that + * one of my operands is always a constant, so the poly_to_exp lookup on it + * is done in advance; I included the original values in the comments so + * readers can have some chance of recognizing that this *is* the RS matrix + * from the Twofish paper. I've only included the table entries I actually + * need; I never do a lookup on a variable input of zero and the biggest + * exponents I'll ever see are 254 (variable) and 237 (constant), so they'll + * never sum to more than 491. I'm repeating part of the exp_to_poly table + * so that I don't have to do mod-255 reduction in the exponent arithmetic. + * Since I know my constant operands are never zero, I only have to worry + * about zero values in the variable operand, and I do it with a simple + * conditional branch. I know conditionals are expensive, but I couldn't + * see a non-horrible way of avoiding them, and I did manage to group the + * statements so that each if covers four group multiplications. */ + +static const byte poly_to_exp[255] = { + 0x00, 0x01, 0x17, 0x02, 0x2E, 0x18, 0x53, 0x03, 0x6A, 0x2F, 0x93, 0x19, + 0x34, 0x54, 0x45, 0x04, 0x5C, 0x6B, 0xB6, 0x30, 0xA6, 0x94, 0x4B, 0x1A, + 0x8C, 0x35, 0x81, 0x55, 0xAA, 0x46, 0x0D, 0x05, 0x24, 0x5D, 0x87, 0x6C, + 0x9B, 0xB7, 0xC1, 0x31, 0x2B, 0xA7, 0xA3, 0x95, 0x98, 0x4C, 0xCA, 0x1B, + 0xE6, 0x8D, 0x73, 0x36, 0xCD, 0x82, 0x12, 0x56, 0x62, 0xAB, 0xF0, 0x47, + 0x4F, 0x0E, 0xBD, 0x06, 0xD4, 0x25, 0xD2, 0x5E, 0x27, 0x88, 0x66, 0x6D, + 0xD6, 0x9C, 0x79, 0xB8, 0x08, 0xC2, 0xDF, 0x32, 0x68, 0x2C, 0xFD, 0xA8, + 0x8A, 0xA4, 0x5A, 0x96, 0x29, 0x99, 0x22, 0x4D, 0x60, 0xCB, 0xE4, 0x1C, + 0x7B, 0xE7, 0x3B, 0x8E, 0x9E, 0x74, 0xF4, 0x37, 0xD8, 0xCE, 0xF9, 0x83, + 0x6F, 0x13, 0xB2, 0x57, 0xE1, 0x63, 0xDC, 0xAC, 0xC4, 0xF1, 0xAF, 0x48, + 0x0A, 0x50, 0x42, 0x0F, 0xBA, 0xBE, 0xC7, 0x07, 0xDE, 0xD5, 0x78, 0x26, + 0x65, 0xD3, 0xD1, 0x5F, 0xE3, 0x28, 0x21, 0x89, 0x59, 0x67, 0xFC, 0x6E, + 0xB1, 0xD7, 0xF8, 0x9D, 0xF3, 0x7A, 0x3A, 0xB9, 0xC6, 0x09, 0x41, 0xC3, + 0xAE, 0xE0, 0xDB, 0x33, 0x44, 0x69, 0x92, 0x2D, 0x52, 0xFE, 0x16, 0xA9, + 0x0C, 0x8B, 0x80, 0xA5, 0x4A, 0x5B, 0xB5, 0x97, 0xC9, 0x2A, 0xA2, 0x9A, + 0xC0, 0x23, 0x86, 0x4E, 0xBC, 0x61, 0xEF, 0xCC, 0x11, 0xE5, 0x72, 0x1D, + 0x3D, 0x7C, 0xEB, 0xE8, 0xE9, 0x3C, 0xEA, 0x8F, 0x7D, 0x9F, 0xEC, 0x75, + 0x1E, 0xF5, 0x3E, 0x38, 0xF6, 0xD9, 0x3F, 0xCF, 0x76, 0xFA, 0x1F, 0x84, + 0xA0, 0x70, 0xED, 0x14, 0x90, 0xB3, 0x7E, 0x58, 0xFB, 0xE2, 0x20, 0x64, + 0xD0, 0xDD, 0x77, 0xAD, 0xDA, 0xC5, 0x40, 0xF2, 0x39, 0xB0, 0xF7, 0x49, + 0xB4, 0x0B, 0x7F, 0x51, 0x15, 0x43, 0x91, 0x10, 0x71, 0xBB, 0xEE, 0xBF, + 0x85, 0xC8, 0xA1 +}; + +static const byte exp_to_poly[492] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2, + 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03, + 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6, + 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A, + 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63, + 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C, + 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07, + 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88, + 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12, + 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7, + 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C, + 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8, + 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25, + 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A, + 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE, + 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC, + 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E, + 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92, + 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89, + 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB, 0xDB, 0xFB, 0xBB, + 0x3B, 0x76, 0xEC, 0x95, 0x67, 0xCE, 0xD1, 0xEF, 0x93, 0x6B, 0xD6, 0xE1, + 0x8F, 0x53, 0xA6, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, + 0x9A, 0x79, 0xF2, 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, + 0xF5, 0xA7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, + 0x8B, 0x5B, 0xB6, 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, + 0xA4, 0x05, 0x0A, 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, + 0xED, 0x97, 0x63, 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, + 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, + 0xF4, 0xA5, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, + 0x22, 0x44, 0x88, 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, + 0xA2, 0x09, 0x12, 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, + 0xCC, 0xD5, 0xE7, 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, + 0x1B, 0x36, 0x6C, 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, + 0x32, 0x64, 0xC8, 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, + 0x5A, 0xB4, 0x25, 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, + 0xAC, 0x15, 0x2A, 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, + 0x91, 0x6F, 0xDE, 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, + 0x3F, 0x7E, 0xFC, 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, + 0xB1, 0x2F, 0x5E, 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, + 0x82, 0x49, 0x92, 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, + 0x71, 0xE2, 0x89, 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB +}; + + +/* The table constants are indices of + * S-box entries, preprocessed through q0 and q1. */ +static byte calc_sb_tbl[512] = { + 0xA9, 0x75, 0x67, 0xF3, 0xB3, 0xC6, 0xE8, 0xF4, + 0x04, 0xDB, 0xFD, 0x7B, 0xA3, 0xFB, 0x76, 0xC8, + 0x9A, 0x4A, 0x92, 0xD3, 0x80, 0xE6, 0x78, 0x6B, + 0xE4, 0x45, 0xDD, 0x7D, 0xD1, 0xE8, 0x38, 0x4B, + 0x0D, 0xD6, 0xC6, 0x32, 0x35, 0xD8, 0x98, 0xFD, + 0x18, 0x37, 0xF7, 0x71, 0xEC, 0xF1, 0x6C, 0xE1, + 0x43, 0x30, 0x75, 0x0F, 0x37, 0xF8, 0x26, 0x1B, + 0xFA, 0x87, 0x13, 0xFA, 0x94, 0x06, 0x48, 0x3F, + 0xF2, 0x5E, 0xD0, 0xBA, 0x8B, 0xAE, 0x30, 0x5B, + 0x84, 0x8A, 0x54, 0x00, 0xDF, 0xBC, 0x23, 0x9D, + 0x19, 0x6D, 0x5B, 0xC1, 0x3D, 0xB1, 0x59, 0x0E, + 0xF3, 0x80, 0xAE, 0x5D, 0xA2, 0xD2, 0x82, 0xD5, + 0x63, 0xA0, 0x01, 0x84, 0x83, 0x07, 0x2E, 0x14, + 0xD9, 0xB5, 0x51, 0x90, 0x9B, 0x2C, 0x7C, 0xA3, + 0xA6, 0xB2, 0xEB, 0x73, 0xA5, 0x4C, 0xBE, 0x54, + 0x16, 0x92, 0x0C, 0x74, 0xE3, 0x36, 0x61, 0x51, + 0xC0, 0x38, 0x8C, 0xB0, 0x3A, 0xBD, 0xF5, 0x5A, + 0x73, 0xFC, 0x2C, 0x60, 0x25, 0x62, 0x0B, 0x96, + 0xBB, 0x6C, 0x4E, 0x42, 0x89, 0xF7, 0x6B, 0x10, + 0x53, 0x7C, 0x6A, 0x28, 0xB4, 0x27, 0xF1, 0x8C, + 0xE1, 0x13, 0xE6, 0x95, 0xBD, 0x9C, 0x45, 0xC7, + 0xE2, 0x24, 0xF4, 0x46, 0xB6, 0x3B, 0x66, 0x70, + 0xCC, 0xCA, 0x95, 0xE3, 0x03, 0x85, 0x56, 0xCB, + 0xD4, 0x11, 0x1C, 0xD0, 0x1E, 0x93, 0xD7, 0xB8, + 0xFB, 0xA6, 0xC3, 0x83, 0x8E, 0x20, 0xB5, 0xFF, + 0xE9, 0x9F, 0xCF, 0x77, 0xBF, 0xC3, 0xBA, 0xCC, + 0xEA, 0x03, 0x77, 0x6F, 0x39, 0x08, 0xAF, 0xBF, + 0x33, 0x40, 0xC9, 0xE7, 0x62, 0x2B, 0x71, 0xE2, + 0x81, 0x79, 0x79, 0x0C, 0x09, 0xAA, 0xAD, 0x82, + 0x24, 0x41, 0xCD, 0x3A, 0xF9, 0xEA, 0xD8, 0xB9, + 0xE5, 0xE4, 0xC5, 0x9A, 0xB9, 0xA4, 0x4D, 0x97, + 0x44, 0x7E, 0x08, 0xDA, 0x86, 0x7A, 0xE7, 0x17, + 0xA1, 0x66, 0x1D, 0x94, 0xAA, 0xA1, 0xED, 0x1D, + 0x06, 0x3D, 0x70, 0xF0, 0xB2, 0xDE, 0xD2, 0xB3, + 0x41, 0x0B, 0x7B, 0x72, 0xA0, 0xA7, 0x11, 0x1C, + 0x31, 0xEF, 0xC2, 0xD1, 0x27, 0x53, 0x90, 0x3E, + 0x20, 0x8F, 0xF6, 0x33, 0x60, 0x26, 0xFF, 0x5F, + 0x96, 0xEC, 0x5C, 0x76, 0xB1, 0x2A, 0xAB, 0x49, + 0x9E, 0x81, 0x9C, 0x88, 0x52, 0xEE, 0x1B, 0x21, + 0x5F, 0xC4, 0x93, 0x1A, 0x0A, 0xEB, 0xEF, 0xD9, + 0x91, 0xC5, 0x85, 0x39, 0x49, 0x99, 0xEE, 0xCD, + 0x2D, 0xAD, 0x4F, 0x31, 0x8F, 0x8B, 0x3B, 0x01, + 0x47, 0x18, 0x87, 0x23, 0x6D, 0xDD, 0x46, 0x1F, + 0xD6, 0x4E, 0x3E, 0x2D, 0x69, 0xF9, 0x64, 0x48, + 0x2A, 0x4F, 0xCE, 0xF2, 0xCB, 0x65, 0x2F, 0x8E, + 0xFC, 0x78, 0x97, 0x5C, 0x05, 0x58, 0x7A, 0x19, + 0xAC, 0x8D, 0x7F, 0xE5, 0xD5, 0x98, 0x1A, 0x57, + 0x4B, 0x67, 0x0E, 0x7F, 0xA7, 0x05, 0x5A, 0x64, + 0x28, 0xAF, 0x14, 0x63, 0x3F, 0xB6, 0x29, 0xFE, + 0x88, 0xF5, 0x3C, 0xB7, 0x4C, 0x3C, 0x02, 0xA5, + 0xB8, 0xCE, 0xDA, 0xE9, 0xB0, 0x68, 0x17, 0x44, + 0x55, 0xE0, 0x1F, 0x4D, 0x8A, 0x43, 0x7D, 0x69, + 0x57, 0x29, 0xC7, 0x2E, 0x8D, 0xAC, 0x74, 0x15, + 0xB7, 0x59, 0xC4, 0xA8, 0x9F, 0x0A, 0x72, 0x9E, + 0x7E, 0x6E, 0x15, 0x47, 0x22, 0xDF, 0x12, 0x34, + 0x58, 0x35, 0x07, 0x6A, 0x99, 0xCF, 0x34, 0xDC, + 0x6E, 0x22, 0x50, 0xC9, 0xDE, 0xC0, 0x68, 0x9B, + 0x65, 0x89, 0xBC, 0xD4, 0xDB, 0xED, 0xF8, 0xAB, + 0xC8, 0x12, 0xA8, 0xA2, 0x2B, 0x0D, 0x40, 0x52, + 0xDC, 0xBB, 0xFE, 0x02, 0x32, 0x2F, 0xA4, 0xA9, + 0xCA, 0xD7, 0x10, 0x61, 0x21, 0x1E, 0xF0, 0xB4, + 0xD3, 0x50, 0x5D, 0x04, 0x0F, 0xF6, 0x00, 0xC2, + 0x6F, 0x16, 0x9D, 0x25, 0x36, 0x86, 0x42, 0x56, + 0x4A, 0x55, 0x5E, 0x09, 0xC1, 0xBE, 0xE0, 0x91 +}; +/* Macro to perform one column of the RS matrix multiplication. The + * parameters a, b, c, and d are the four bytes of output; i is the index + * of the key bytes, and w, x, y, and z, are the column of constants from + * the RS matrix, preprocessed through the poly_to_exp table. */ + +#define CALC_S(a, b, c, d, i, w, x, y, z) \ + if (key[i]) { \ + tmp = poly_to_exp[key[i] - 1]; \ + (a) ^= exp_to_poly[tmp + (w)]; \ + (b) ^= exp_to_poly[tmp + (x)]; \ + (c) ^= exp_to_poly[tmp + (y)]; \ + (d) ^= exp_to_poly[tmp + (z)]; \ + } + +/* Macros to calculate the key-dependent S-boxes for a 128-bit key using + * the S vector from CALC_S. CALC_SB_2 computes a single entry in all + * four S-boxes, where i is the index of the entry to compute, and a and b + * are the index numbers preprocessed through the q0 and q1 tables + * respectively. CALC_SB is simply a convenience to make the code shorter; + * it calls CALC_SB_2 four times with consecutive indices from i to i+3, + * using the remaining parameters two by two. */ + +#define CALC_SB_2(i, a, b) \ + ctx->s[0][i] = mds[0][q0[(a) ^ sa] ^ se]; \ + ctx->s[1][i] = mds[1][q0[(b) ^ sb] ^ sf]; \ + ctx->s[2][i] = mds[2][q1[(a) ^ sc] ^ sg]; \ + ctx->s[3][i] = mds[3][q1[(b) ^ sd] ^ sh] + +#define CALC_SB(i, a, b, c, d, e, f, g, h) \ + CALC_SB_2 (i, a, b); CALC_SB_2 ((i)+1, c, d); \ + CALC_SB_2 ((i)+2, e, f); CALC_SB_2 ((i)+3, g, h) + +/* Macros exactly like CALC_SB and CALC_SB_2, but for 256-bit keys. */ + +#define CALC_SB256_2(i, a, b) \ + ctx->s[0][i] = mds[0][q0[q0[q1[(b) ^ sa] ^ se] ^ si] ^ sm]; \ + ctx->s[1][i] = mds[1][q0[q1[q1[(a) ^ sb] ^ sf] ^ sj] ^ sn]; \ + ctx->s[2][i] = mds[2][q1[q0[q0[(a) ^ sc] ^ sg] ^ sk] ^ so]; \ + ctx->s[3][i] = mds[3][q1[q1[q0[(b) ^ sd] ^ sh] ^ sl] ^ sp]; + +#define CALC_SB256(i, a, b, c, d, e, f, g, h) \ + CALC_SB256_2 (i, a, b); CALC_SB256_2 ((i)+1, c, d); \ + CALC_SB256_2 ((i)+2, e, f); CALC_SB256_2 ((i)+3, g, h) + +/* Macros to calculate the whitening and round subkeys. CALC_K_2 computes the + * last two stages of the h() function for a given index (either 2i or 2i+1). + * a, b, c, and d are the four bytes going into the last two stages. For + * 128-bit keys, this is the entire h() function and a and c are the index + * preprocessed through q0 and q1 respectively; for longer keys they are the + * output of previous stages. j is the index of the first key byte to use. + * CALC_K computes a pair of subkeys for 128-bit Twofish, by calling CALC_K_2 + * twice, doing the Pseudo-Hadamard Transform, and doing the necessary + * rotations. Its parameters are: a, the array to write the results into, + * j, the index of the first output entry, k and l, the preprocessed indices + * for index 2i, and m and n, the preprocessed indices for index 2i+1. + * CALC_K256_2 expands CALC_K_2 to handle 256-bit keys, by doing two + * additional lookup-and-XOR stages. The parameters a and b are the index + * preprocessed through q0 and q1 respectively; j is the index of the first + * key byte to use. CALC_K256 is identical to CALC_K but for using the + * CALC_K256_2 macro instead of CALC_K_2. */ + +#define CALC_K_2(a, b, c, d, j) \ + mds[0][q0[a ^ key[(j) + 8]] ^ key[j]] \ + ^ mds[1][q0[b ^ key[(j) + 9]] ^ key[(j) + 1]] \ + ^ mds[2][q1[c ^ key[(j) + 10]] ^ key[(j) + 2]] \ + ^ mds[3][q1[d ^ key[(j) + 11]] ^ key[(j) + 3]] + +#define CALC_K(a, j, k, l, m, n) \ + x = CALC_K_2 (k, l, k, l, 0); \ + y = CALC_K_2 (m, n, m, n, 4); \ + y = (y << 8) + (y >> 24); \ + x += y; y += x; ctx->a[j] = x; \ + ctx->a[(j) + 1] = (y << 9) + (y >> 23) + +#define CALC_K256_2(a, b, j) \ + CALC_K_2 (q0[q1[b ^ key[(j) + 24]] ^ key[(j) + 16]], \ + q1[q1[a ^ key[(j) + 25]] ^ key[(j) + 17]], \ + q0[q0[a ^ key[(j) + 26]] ^ key[(j) + 18]], \ + q1[q0[b ^ key[(j) + 27]] ^ key[(j) + 19]], j) + +#define CALC_K256(a, j, k, l, m, n) \ + x = CALC_K256_2 (k, l, 0); \ + y = CALC_K256_2 (m, n, 4); \ + y = (y << 8) + (y >> 24); \ + x += y; y += x; ctx->a[j] = x; \ + ctx->a[(j) + 1] = (y << 9) + (y >> 23) + + + +/* Perform the key setup. Note that this works only with 128- and 256-bit + * keys, despite the API that looks like it might support other sizes. */ + +static gcry_err_code_t +do_twofish_setkey (TWOFISH_context *ctx, const byte *key, const unsigned keylen) +{ + int i, j, k; + + /* Temporaries for CALC_K. */ + u32 x, y; + + /* The S vector used to key the S-boxes, split up into individual bytes. + * 128-bit keys use only sa through sh; 256-bit use all of them. */ + byte sa = 0, sb = 0, sc = 0, sd = 0, se = 0, sf = 0, sg = 0, sh = 0; + byte si = 0, sj = 0, sk = 0, sl = 0, sm = 0, sn = 0, so = 0, sp = 0; + + /* Temporary for CALC_S. */ + byte tmp; + + /* Flags for self-test. */ + static int initialized = 0; + static const char *selftest_failed=0; + + /* Check key length. */ + if( ( ( keylen - 16 ) | 16 ) != 16 ) + return GPG_ERR_INV_KEYLEN; + + /* Do self-test if necessary. */ + if (!initialized) + { + initialized = 1; + selftest_failed = selftest (); + if( selftest_failed ) + log_error("%s\n", selftest_failed ); + } + if( selftest_failed ) + return GPG_ERR_SELFTEST_FAILED; + + /* Compute the first two words of the S vector. The magic numbers are + * the entries of the RS matrix, preprocessed through poly_to_exp. The + * numbers in the comments are the original (polynomial form) matrix + * entries. */ + CALC_S (sa, sb, sc, sd, 0, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (sa, sb, sc, sd, 1, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (sa, sb, sc, sd, 2, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (sa, sb, sc, sd, 3, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (sa, sb, sc, sd, 4, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (sa, sb, sc, sd, 5, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (sa, sb, sc, sd, 6, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (sa, sb, sc, sd, 7, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + CALC_S (se, sf, sg, sh, 8, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (se, sf, sg, sh, 9, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (se, sf, sg, sh, 10, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (se, sf, sg, sh, 11, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (se, sf, sg, sh, 12, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (se, sf, sg, sh, 13, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (se, sf, sg, sh, 14, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (se, sf, sg, sh, 15, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + + if (keylen == 32) /* 256-bit key */ + { + /* Calculate the remaining two words of the S vector */ + CALC_S (si, sj, sk, sl, 16, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (si, sj, sk, sl, 17, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (si, sj, sk, sl, 18, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (si, sj, sk, sl, 19, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (si, sj, sk, sl, 20, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (si, sj, sk, sl, 21, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (si, sj, sk, sl, 22, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (si, sj, sk, sl, 23, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + CALC_S (sm, sn, so, sp, 24, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (sm, sn, so, sp, 25, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (sm, sn, so, sp, 26, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (sm, sn, so, sp, 27, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (sm, sn, so, sp, 28, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (sm, sn, so, sp, 29, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (sm, sn, so, sp, 30, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (sm, sn, so, sp, 31, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + + /* Compute the S-boxes. */ + for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) + { + CALC_SB256_2( i, calc_sb_tbl[j], calc_sb_tbl[k] ); + } + + /* Calculate whitening and round subkeys. The constants are + * indices of subkeys, preprocessed through q0 and q1. */ + CALC_K256 (w, 0, 0xA9, 0x75, 0x67, 0xF3); + CALC_K256 (w, 2, 0xB3, 0xC6, 0xE8, 0xF4); + CALC_K256 (w, 4, 0x04, 0xDB, 0xFD, 0x7B); + CALC_K256 (w, 6, 0xA3, 0xFB, 0x76, 0xC8); + CALC_K256 (k, 0, 0x9A, 0x4A, 0x92, 0xD3); + CALC_K256 (k, 2, 0x80, 0xE6, 0x78, 0x6B); + CALC_K256 (k, 4, 0xE4, 0x45, 0xDD, 0x7D); + CALC_K256 (k, 6, 0xD1, 0xE8, 0x38, 0x4B); + CALC_K256 (k, 8, 0x0D, 0xD6, 0xC6, 0x32); + CALC_K256 (k, 10, 0x35, 0xD8, 0x98, 0xFD); + CALC_K256 (k, 12, 0x18, 0x37, 0xF7, 0x71); + CALC_K256 (k, 14, 0xEC, 0xF1, 0x6C, 0xE1); + CALC_K256 (k, 16, 0x43, 0x30, 0x75, 0x0F); + CALC_K256 (k, 18, 0x37, 0xF8, 0x26, 0x1B); + CALC_K256 (k, 20, 0xFA, 0x87, 0x13, 0xFA); + CALC_K256 (k, 22, 0x94, 0x06, 0x48, 0x3F); + CALC_K256 (k, 24, 0xF2, 0x5E, 0xD0, 0xBA); + CALC_K256 (k, 26, 0x8B, 0xAE, 0x30, 0x5B); + CALC_K256 (k, 28, 0x84, 0x8A, 0x54, 0x00); + CALC_K256 (k, 30, 0xDF, 0xBC, 0x23, 0x9D); + } + else + { + /* Compute the S-boxes. */ + for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) + { + CALC_SB_2( i, calc_sb_tbl[j], calc_sb_tbl[k] ); + } + + /* Calculate whitening and round subkeys. The constants are + * indices of subkeys, preprocessed through q0 and q1. */ + CALC_K (w, 0, 0xA9, 0x75, 0x67, 0xF3); + CALC_K (w, 2, 0xB3, 0xC6, 0xE8, 0xF4); + CALC_K (w, 4, 0x04, 0xDB, 0xFD, 0x7B); + CALC_K (w, 6, 0xA3, 0xFB, 0x76, 0xC8); + CALC_K (k, 0, 0x9A, 0x4A, 0x92, 0xD3); + CALC_K (k, 2, 0x80, 0xE6, 0x78, 0x6B); + CALC_K (k, 4, 0xE4, 0x45, 0xDD, 0x7D); + CALC_K (k, 6, 0xD1, 0xE8, 0x38, 0x4B); + CALC_K (k, 8, 0x0D, 0xD6, 0xC6, 0x32); + CALC_K (k, 10, 0x35, 0xD8, 0x98, 0xFD); + CALC_K (k, 12, 0x18, 0x37, 0xF7, 0x71); + CALC_K (k, 14, 0xEC, 0xF1, 0x6C, 0xE1); + CALC_K (k, 16, 0x43, 0x30, 0x75, 0x0F); + CALC_K (k, 18, 0x37, 0xF8, 0x26, 0x1B); + CALC_K (k, 20, 0xFA, 0x87, 0x13, 0xFA); + CALC_K (k, 22, 0x94, 0x06, 0x48, 0x3F); + CALC_K (k, 24, 0xF2, 0x5E, 0xD0, 0xBA); + CALC_K (k, 26, 0x8B, 0xAE, 0x30, 0x5B); + CALC_K (k, 28, 0x84, 0x8A, 0x54, 0x00); + CALC_K (k, 30, 0xDF, 0xBC, 0x23, 0x9D); + } + + return 0; +} + +static gcry_err_code_t +twofish_setkey (void *context, const byte *key, unsigned int keylen) +{ + TWOFISH_context *ctx = context; + int rc = do_twofish_setkey (ctx, key, keylen); + _gcry_burn_stack (23+6*sizeof(void*)); + return rc; +} + + + +/* Macros to compute the g() function in the encryption and decryption + * rounds. G1 is the straight g() function; G2 includes the 8-bit + * rotation for the high 32-bit word. */ + +#define G1(a) \ + (ctx->s[0][(a) & 0xFF]) ^ (ctx->s[1][((a) >> 8) & 0xFF]) \ + ^ (ctx->s[2][((a) >> 16) & 0xFF]) ^ (ctx->s[3][(a) >> 24]) + +#define G2(b) \ + (ctx->s[1][(b) & 0xFF]) ^ (ctx->s[2][((b) >> 8) & 0xFF]) \ + ^ (ctx->s[3][((b) >> 16) & 0xFF]) ^ (ctx->s[0][(b) >> 24]) + +/* Encryption and decryption Feistel rounds. Each one calls the two g() + * macros, does the PHT, and performs the XOR and the appropriate bit + * rotations. The parameters are the round number (used to select subkeys), + * and the four 32-bit chunks of the text. */ + +#define ENCROUND(n, a, b, c, d) \ + x = G1 (a); y = G2 (b); \ + x += y; y += x + ctx->k[2 * (n) + 1]; \ + (c) ^= x + ctx->k[2 * (n)]; \ + (c) = ((c) >> 1) + ((c) << 31); \ + (d) = (((d) << 1)+((d) >> 31)) ^ y + +#define DECROUND(n, a, b, c, d) \ + x = G1 (a); y = G2 (b); \ + x += y; y += x; \ + (d) ^= y + ctx->k[2 * (n) + 1]; \ + (d) = ((d) >> 1) + ((d) << 31); \ + (c) = (((c) << 1)+((c) >> 31)); \ + (c) ^= (x + ctx->k[2 * (n)]) + +/* Encryption and decryption cycles; each one is simply two Feistel rounds + * with the 32-bit chunks re-ordered to simulate the "swap" */ + +#define ENCCYCLE(n) \ + ENCROUND (2 * (n), a, b, c, d); \ + ENCROUND (2 * (n) + 1, c, d, a, b) + +#define DECCYCLE(n) \ + DECROUND (2 * (n) + 1, c, d, a, b); \ + DECROUND (2 * (n), a, b, c, d) + +/* Macros to convert the input and output bytes into 32-bit words, + * and simultaneously perform the whitening step. INPACK packs word + * number n into the variable named by x, using whitening subkey number m. + * OUTUNPACK unpacks word number n from the variable named by x, using + * whitening subkey number m. */ + +#define INPACK(n, x, m) \ + x = in[4 * (n)] ^ (in[4 * (n) + 1] << 8) \ + ^ (in[4 * (n) + 2] << 16) ^ (in[4 * (n) + 3] << 24) ^ ctx->w[m] + +#define OUTUNPACK(n, x, m) \ + x ^= ctx->w[m]; \ + out[4 * (n)] = x; out[4 * (n) + 1] = x >> 8; \ + out[4 * (n) + 2] = x >> 16; out[4 * (n) + 3] = x >> 24 + +/* Encrypt one block. in and out may be the same. */ + +static void +do_twofish_encrypt (const TWOFISH_context *ctx, byte *out, const byte *in) +{ + /* The four 32-bit chunks of the text. */ + u32 a, b, c, d; + + /* Temporaries used by the round function. */ + u32 x, y; + + /* Input whitening and packing. */ + INPACK (0, a, 0); + INPACK (1, b, 1); + INPACK (2, c, 2); + INPACK (3, d, 3); + + /* Encryption Feistel cycles. */ + ENCCYCLE (0); + ENCCYCLE (1); + ENCCYCLE (2); + ENCCYCLE (3); + ENCCYCLE (4); + ENCCYCLE (5); + ENCCYCLE (6); + ENCCYCLE (7); + + /* Output whitening and unpacking. */ + OUTUNPACK (0, c, 4); + OUTUNPACK (1, d, 5); + OUTUNPACK (2, a, 6); + OUTUNPACK (3, b, 7); +} + +static void +twofish_encrypt (void *context, byte *out, const byte *in) +{ + TWOFISH_context *ctx = context; + do_twofish_encrypt (ctx, out, in); + _gcry_burn_stack (24+3*sizeof (void*)); +} + + +/* Decrypt one block. in and out may be the same. */ + +static void +do_twofish_decrypt (const TWOFISH_context *ctx, byte *out, const byte *in) +{ + /* The four 32-bit chunks of the text. */ + u32 a, b, c, d; + + /* Temporaries used by the round function. */ + u32 x, y; + + /* Input whitening and packing. */ + INPACK (0, c, 4); + INPACK (1, d, 5); + INPACK (2, a, 6); + INPACK (3, b, 7); + + /* Encryption Feistel cycles. */ + DECCYCLE (7); + DECCYCLE (6); + DECCYCLE (5); + DECCYCLE (4); + DECCYCLE (3); + DECCYCLE (2); + DECCYCLE (1); + DECCYCLE (0); + + /* Output whitening and unpacking. */ + OUTUNPACK (0, a, 0); + OUTUNPACK (1, b, 1); + OUTUNPACK (2, c, 2); + OUTUNPACK (3, d, 3); +} + +static void +twofish_decrypt (void *context, byte *out, const byte *in) +{ + TWOFISH_context *ctx = context; + + do_twofish_decrypt (ctx, out, in); + _gcry_burn_stack (24+3*sizeof (void*)); +} + + +/* Test a single encryption and decryption with each key size. */ + + +/* More complete test program. This does 1000 encryptions and decryptions + * with each of 250 128-bit keys and 2000 encryptions and decryptions with + * each of 125 256-bit keys, using a feedback scheme similar to a Feistel + * cipher, so as to be sure of testing all the table entries pretty + * thoroughly. We keep changing the keys so as to get a more meaningful + * performance number, since the key setup is non-trivial for Twofish. */ + +#ifdef TEST + + +int +main() +{ + TWOFISH_context ctx; /* Expanded key. */ + int i, j; /* Loop counters. */ + + const char *encrypt_msg; /* Message to print regarding encryption test; + * the printf is done outside the loop to avoid + * stuffing up the timing. */ + clock_t timer; /* For computing elapsed time. */ + + /* Test buffer. */ + byte buffer[4][16] = { + {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}, + {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78, + 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}, + {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10}, + {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10, + 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98} + }; + + /* Expected outputs for the million-operation test */ + static const byte test_encrypt[4][16] = { + {0xC8, 0x23, 0xB8, 0xB7, 0x6B, 0xFE, 0x91, 0x13, + 0x2F, 0xA7, 0x5E, 0xE6, 0x94, 0x77, 0x6F, 0x6B}, + {0x90, 0x36, 0xD8, 0x29, 0xD5, 0x96, 0xC2, 0x8E, + 0xE4, 0xFF, 0x76, 0xBC, 0xE5, 0x77, 0x88, 0x27}, + {0xB8, 0x78, 0x69, 0xAF, 0x42, 0x8B, 0x48, 0x64, + 0xF7, 0xE9, 0xF3, 0x9C, 0x42, 0x18, 0x7B, 0x73}, + {0x7A, 0x88, 0xFB, 0xEB, 0x90, 0xA4, 0xB4, 0xA8, + 0x43, 0xA3, 0x1D, 0xF1, 0x26, 0xC4, 0x53, 0x57} + }; + static const byte test_decrypt[4][16] = { + {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}, + {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78, + 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}, + {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10}, + {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10, + 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98} + }; + + /* Start the timer ticking. */ + timer = clock (); + + /* Encryption test. */ + for (i = 0; i < 125; i++) + { + twofish_setkey (&ctx, buffer[0], sizeof (buffer[0])); + for (j = 0; j < 1000; j++) + twofish_encrypt (&ctx, buffer[2], buffer[2]); + twofish_setkey (&ctx, buffer[1], sizeof (buffer[1])); + for (j = 0; j < 1000; j++) + twofish_encrypt (&ctx, buffer[3], buffer[3]); + twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2); + for (j = 0; j < 1000; j++) { + twofish_encrypt (&ctx, buffer[0], buffer[0]); + twofish_encrypt (&ctx, buffer[1], buffer[1]); + } + } + encrypt_msg = memcmp (buffer, test_encrypt, sizeof (test_encrypt)) ? + "encryption failure!\n" : "encryption OK!\n"; + + /* Decryption test. */ + for (i = 0; i < 125; i++) + { + twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2); + for (j = 0; j < 1000; j++) { + twofish_decrypt (&ctx, buffer[0], buffer[0]); + twofish_decrypt (&ctx, buffer[1], buffer[1]); + } + twofish_setkey (&ctx, buffer[1], sizeof (buffer[1])); + for (j = 0; j < 1000; j++) + twofish_decrypt (&ctx, buffer[3], buffer[3]); + twofish_setkey (&ctx, buffer[0], sizeof (buffer[0])); + for (j = 0; j < 1000; j++) + twofish_decrypt (&ctx, buffer[2], buffer[2]); + } + + /* Stop the timer, and print results. */ + timer = clock () - timer; + printf (encrypt_msg); + printf (memcmp (buffer, test_decrypt, sizeof (test_decrypt)) ? + "decryption failure!\n" : "decryption OK!\n"); + printf ("elapsed time: %.1f s.\n", (float) timer / CLOCKS_PER_SEC); + + return 0; +} + +#endif /* TEST */ + + + +gcry_cipher_spec_t _gcry_cipher_spec_twofish = + { + "TWOFISH", NULL, NULL, 16, 256, sizeof (TWOFISH_context), + twofish_setkey, twofish_encrypt, twofish_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_twofish", +#endif + }; + +gcry_cipher_spec_t _gcry_cipher_spec_twofish128 = + { + "TWOFISH128", NULL, NULL, 16, 128, sizeof (TWOFISH_context), + twofish_setkey, twofish_encrypt, twofish_decrypt + , +#ifdef GRUB_UTIL + .modname = "gcry_twofish", +#endif + }; + + +GRUB_MOD_INIT(gcry_twofish) +{ + grub_cipher_register (&_gcry_cipher_spec_twofish); + grub_cipher_register (&_gcry_cipher_spec_twofish128); +} + +GRUB_MOD_FINI(gcry_twofish) +{ + grub_cipher_unregister (&_gcry_cipher_spec_twofish); + grub_cipher_unregister (&_gcry_cipher_spec_twofish128); +} diff --git a/grub-core/lib/libgcrypt-grub/cipher/types.h b/grub-core/lib/libgcrypt-grub/cipher/types.h new file mode 100644 index 000000000..2ec78b62d --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/types.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/grub-core/lib/libgcrypt-grub/cipher/whirlpool.c b/grub-core/lib/libgcrypt-grub/cipher/whirlpool.c new file mode 100644 index 000000000..f2a463d42 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/cipher/whirlpool.c @@ -0,0 +1,1422 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +#include +GRUB_MOD_LICENSE ("GPLv3+"); +/* whirlpool.c - Whirlpool hashing algorithm + * Copyright (C) 2005 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + */ + +/* This is an implementation of the Whirlpool hashing algorithm, which + has been developed by Vincent Rijmen and Paulo S. L. M. Barreto; + it's homepage is located at: + http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html. + + The S-Boxes and the structure of the main transformation function, + which implements an optimized version of the algorithm, is taken + from the reference implementation available from + http://planeta.terra.com.br/informatica/paulobarreto/whirlpool.zip. */ + + +#include "types.h" +#include "g10lib.h" +#include "cipher.h" + +#include "bithelp.h" + +/* Size of a whirlpool block (in bytes). */ +#define BLOCK_SIZE 64 + +/* Number of rounds. */ +#define R 10 + + + +/* Types. */ +typedef u64 whirlpool_block_t[BLOCK_SIZE / 8]; + +typedef struct { + whirlpool_block_t hash_state; + unsigned char buffer[BLOCK_SIZE]; + size_t count; + unsigned char length[32]; +} whirlpool_context_t; + + + +/* Macros. */ + +/* Convert the the buffer BUFFER into a block BLOCK, using I as + counter. */ +#define buffer_to_block(buffer, block, i) \ + for (i = 0; i < 8; i++) \ + (block)[i] = ((u64) (0 \ + | (((u64) (buffer)[i * 8 + 0]) << 56) \ + | (((u64) (buffer)[i * 8 + 1]) << 48) \ + | (((u64) (buffer)[i * 8 + 2]) << 40) \ + | (((u64) (buffer)[i * 8 + 3]) << 32) \ + | (((u64) (buffer)[i * 8 + 4]) << 24) \ + | (((u64) (buffer)[i * 8 + 5]) << 16) \ + | (((u64) (buffer)[i * 8 + 6]) << 8) \ + | (((u64) (buffer)[i * 8 + 7]) << 0))); + +/* Convert the block BLOCK into a buffer BUFFER, using I as + counter. */ +#define block_to_buffer(buffer, block, i) \ + for (i = 0; i < 8; i++) \ + { \ + (buffer)[i * 8 + 0] = (block[i] >> 56) & 0xFF; \ + (buffer)[i * 8 + 1] = (block[i] >> 48) & 0xFF; \ + (buffer)[i * 8 + 2] = (block[i] >> 40) & 0xFF; \ + (buffer)[i * 8 + 3] = (block[i] >> 32) & 0xFF; \ + (buffer)[i * 8 + 4] = (block[i] >> 24) & 0xFF; \ + (buffer)[i * 8 + 5] = (block[i] >> 16) & 0xFF; \ + (buffer)[i * 8 + 6] = (block[i] >> 8) & 0xFF; \ + (buffer)[i * 8 + 7] = (block[i] >> 0) & 0xFF; \ + } + +/* Copy the block BLOCK_SRC to BLOCK_DST, using I as counter. */ +#define block_copy(block_dst, block_src, i) \ + for (i = 0; i < 8; i++) \ + block_dst[i] = block_src[i]; + +/* XOR the block BLOCK_SRC into BLOCK_DST, using I as counter. */ +#define block_xor(block_dst, block_src, i) \ + for (i = 0; i < 8; i++) \ + block_dst[i] ^= block_src[i]; + + + +/* Round constants. */ +static const u64 rc[R] = + { + U64_C (0x1823c6e887b8014f), + U64_C (0x36a6d2f5796f9152), + U64_C (0x60bc9b8ea30c7b35), + U64_C (0x1de0d7c22e4bfe57), + U64_C (0x157737e59ff04ada), + U64_C (0x58c9290ab1a06b85), + U64_C (0xbd5d10f4cb3e0567), + U64_C (0xe427418ba77d95d8), + U64_C (0xfbee7c66dd17479e), + U64_C (0xca2dbf07ad5a8333), + }; + + + +/* Main lookup boxes. */ +static const u64 C0[256] = + { + U64_C (0x18186018c07830d8), U64_C (0x23238c2305af4626), + U64_C (0xc6c63fc67ef991b8), U64_C (0xe8e887e8136fcdfb), + U64_C (0x878726874ca113cb), U64_C (0xb8b8dab8a9626d11), + U64_C (0x0101040108050209), U64_C (0x4f4f214f426e9e0d), + U64_C (0x3636d836adee6c9b), U64_C (0xa6a6a2a6590451ff), + U64_C (0xd2d26fd2debdb90c), U64_C (0xf5f5f3f5fb06f70e), + U64_C (0x7979f979ef80f296), U64_C (0x6f6fa16f5fcede30), + U64_C (0x91917e91fcef3f6d), U64_C (0x52525552aa07a4f8), + U64_C (0x60609d6027fdc047), U64_C (0xbcbccabc89766535), + U64_C (0x9b9b569baccd2b37), U64_C (0x8e8e028e048c018a), + U64_C (0xa3a3b6a371155bd2), U64_C (0x0c0c300c603c186c), + U64_C (0x7b7bf17bff8af684), U64_C (0x3535d435b5e16a80), + U64_C (0x1d1d741de8693af5), U64_C (0xe0e0a7e05347ddb3), + U64_C (0xd7d77bd7f6acb321), U64_C (0xc2c22fc25eed999c), + U64_C (0x2e2eb82e6d965c43), U64_C (0x4b4b314b627a9629), + U64_C (0xfefedffea321e15d), U64_C (0x575741578216aed5), + U64_C (0x15155415a8412abd), U64_C (0x7777c1779fb6eee8), + U64_C (0x3737dc37a5eb6e92), U64_C (0xe5e5b3e57b56d79e), + U64_C (0x9f9f469f8cd92313), U64_C (0xf0f0e7f0d317fd23), + U64_C (0x4a4a354a6a7f9420), U64_C (0xdada4fda9e95a944), + U64_C (0x58587d58fa25b0a2), U64_C (0xc9c903c906ca8fcf), + U64_C (0x2929a429558d527c), U64_C (0x0a0a280a5022145a), + U64_C (0xb1b1feb1e14f7f50), U64_C (0xa0a0baa0691a5dc9), + U64_C (0x6b6bb16b7fdad614), U64_C (0x85852e855cab17d9), + U64_C (0xbdbdcebd8173673c), U64_C (0x5d5d695dd234ba8f), + U64_C (0x1010401080502090), U64_C (0xf4f4f7f4f303f507), + U64_C (0xcbcb0bcb16c08bdd), U64_C (0x3e3ef83eedc67cd3), + U64_C (0x0505140528110a2d), U64_C (0x676781671fe6ce78), + U64_C (0xe4e4b7e47353d597), U64_C (0x27279c2725bb4e02), + U64_C (0x4141194132588273), U64_C (0x8b8b168b2c9d0ba7), + U64_C (0xa7a7a6a7510153f6), U64_C (0x7d7de97dcf94fab2), + U64_C (0x95956e95dcfb3749), U64_C (0xd8d847d88e9fad56), + U64_C (0xfbfbcbfb8b30eb70), U64_C (0xeeee9fee2371c1cd), + U64_C (0x7c7ced7cc791f8bb), U64_C (0x6666856617e3cc71), + U64_C (0xdddd53dda68ea77b), U64_C (0x17175c17b84b2eaf), + U64_C (0x4747014702468e45), U64_C (0x9e9e429e84dc211a), + U64_C (0xcaca0fca1ec589d4), U64_C (0x2d2db42d75995a58), + U64_C (0xbfbfc6bf9179632e), U64_C (0x07071c07381b0e3f), + U64_C (0xadad8ead012347ac), U64_C (0x5a5a755aea2fb4b0), + U64_C (0x838336836cb51bef), U64_C (0x3333cc3385ff66b6), + U64_C (0x636391633ff2c65c), U64_C (0x02020802100a0412), + U64_C (0xaaaa92aa39384993), U64_C (0x7171d971afa8e2de), + U64_C (0xc8c807c80ecf8dc6), U64_C (0x19196419c87d32d1), + U64_C (0x494939497270923b), U64_C (0xd9d943d9869aaf5f), + U64_C (0xf2f2eff2c31df931), U64_C (0xe3e3abe34b48dba8), + U64_C (0x5b5b715be22ab6b9), U64_C (0x88881a8834920dbc), + U64_C (0x9a9a529aa4c8293e), U64_C (0x262698262dbe4c0b), + U64_C (0x3232c8328dfa64bf), U64_C (0xb0b0fab0e94a7d59), + U64_C (0xe9e983e91b6acff2), U64_C (0x0f0f3c0f78331e77), + U64_C (0xd5d573d5e6a6b733), U64_C (0x80803a8074ba1df4), + U64_C (0xbebec2be997c6127), U64_C (0xcdcd13cd26de87eb), + U64_C (0x3434d034bde46889), U64_C (0x48483d487a759032), + U64_C (0xffffdbffab24e354), U64_C (0x7a7af57af78ff48d), + U64_C (0x90907a90f4ea3d64), U64_C (0x5f5f615fc23ebe9d), + U64_C (0x202080201da0403d), U64_C (0x6868bd6867d5d00f), + U64_C (0x1a1a681ad07234ca), U64_C (0xaeae82ae192c41b7), + U64_C (0xb4b4eab4c95e757d), U64_C (0x54544d549a19a8ce), + U64_C (0x93937693ece53b7f), U64_C (0x222288220daa442f), + U64_C (0x64648d6407e9c863), U64_C (0xf1f1e3f1db12ff2a), + U64_C (0x7373d173bfa2e6cc), U64_C (0x12124812905a2482), + U64_C (0x40401d403a5d807a), U64_C (0x0808200840281048), + U64_C (0xc3c32bc356e89b95), U64_C (0xecec97ec337bc5df), + U64_C (0xdbdb4bdb9690ab4d), U64_C (0xa1a1bea1611f5fc0), + U64_C (0x8d8d0e8d1c830791), U64_C (0x3d3df43df5c97ac8), + U64_C (0x97976697ccf1335b), U64_C (0x0000000000000000), + U64_C (0xcfcf1bcf36d483f9), U64_C (0x2b2bac2b4587566e), + U64_C (0x7676c57697b3ece1), U64_C (0x8282328264b019e6), + U64_C (0xd6d67fd6fea9b128), U64_C (0x1b1b6c1bd87736c3), + U64_C (0xb5b5eeb5c15b7774), U64_C (0xafaf86af112943be), + U64_C (0x6a6ab56a77dfd41d), U64_C (0x50505d50ba0da0ea), + U64_C (0x45450945124c8a57), U64_C (0xf3f3ebf3cb18fb38), + U64_C (0x3030c0309df060ad), U64_C (0xefef9bef2b74c3c4), + U64_C (0x3f3ffc3fe5c37eda), U64_C (0x55554955921caac7), + U64_C (0xa2a2b2a2791059db), U64_C (0xeaea8fea0365c9e9), + U64_C (0x656589650fecca6a), U64_C (0xbabad2bab9686903), + U64_C (0x2f2fbc2f65935e4a), U64_C (0xc0c027c04ee79d8e), + U64_C (0xdede5fdebe81a160), U64_C (0x1c1c701ce06c38fc), + U64_C (0xfdfdd3fdbb2ee746), U64_C (0x4d4d294d52649a1f), + U64_C (0x92927292e4e03976), U64_C (0x7575c9758fbceafa), + U64_C (0x06061806301e0c36), U64_C (0x8a8a128a249809ae), + U64_C (0xb2b2f2b2f940794b), U64_C (0xe6e6bfe66359d185), + U64_C (0x0e0e380e70361c7e), U64_C (0x1f1f7c1ff8633ee7), + U64_C (0x6262956237f7c455), U64_C (0xd4d477d4eea3b53a), + U64_C (0xa8a89aa829324d81), U64_C (0x96966296c4f43152), + U64_C (0xf9f9c3f99b3aef62), U64_C (0xc5c533c566f697a3), + U64_C (0x2525942535b14a10), U64_C (0x59597959f220b2ab), + U64_C (0x84842a8454ae15d0), U64_C (0x7272d572b7a7e4c5), + U64_C (0x3939e439d5dd72ec), U64_C (0x4c4c2d4c5a619816), + U64_C (0x5e5e655eca3bbc94), U64_C (0x7878fd78e785f09f), + U64_C (0x3838e038ddd870e5), U64_C (0x8c8c0a8c14860598), + U64_C (0xd1d163d1c6b2bf17), U64_C (0xa5a5aea5410b57e4), + U64_C (0xe2e2afe2434dd9a1), U64_C (0x616199612ff8c24e), + U64_C (0xb3b3f6b3f1457b42), U64_C (0x2121842115a54234), + U64_C (0x9c9c4a9c94d62508), U64_C (0x1e1e781ef0663cee), + U64_C (0x4343114322528661), U64_C (0xc7c73bc776fc93b1), + U64_C (0xfcfcd7fcb32be54f), U64_C (0x0404100420140824), + U64_C (0x51515951b208a2e3), U64_C (0x99995e99bcc72f25), + U64_C (0x6d6da96d4fc4da22), U64_C (0x0d0d340d68391a65), + U64_C (0xfafacffa8335e979), U64_C (0xdfdf5bdfb684a369), + U64_C (0x7e7ee57ed79bfca9), U64_C (0x242490243db44819), + U64_C (0x3b3bec3bc5d776fe), U64_C (0xabab96ab313d4b9a), + U64_C (0xcece1fce3ed181f0), U64_C (0x1111441188552299), + U64_C (0x8f8f068f0c890383), U64_C (0x4e4e254e4a6b9c04), + U64_C (0xb7b7e6b7d1517366), U64_C (0xebeb8beb0b60cbe0), + U64_C (0x3c3cf03cfdcc78c1), U64_C (0x81813e817cbf1ffd), + U64_C (0x94946a94d4fe3540), U64_C (0xf7f7fbf7eb0cf31c), + U64_C (0xb9b9deb9a1676f18), U64_C (0x13134c13985f268b), + U64_C (0x2c2cb02c7d9c5851), U64_C (0xd3d36bd3d6b8bb05), + U64_C (0xe7e7bbe76b5cd38c), U64_C (0x6e6ea56e57cbdc39), + U64_C (0xc4c437c46ef395aa), U64_C (0x03030c03180f061b), + U64_C (0x565645568a13acdc), U64_C (0x44440d441a49885e), + U64_C (0x7f7fe17fdf9efea0), U64_C (0xa9a99ea921374f88), + U64_C (0x2a2aa82a4d825467), U64_C (0xbbbbd6bbb16d6b0a), + U64_C (0xc1c123c146e29f87), U64_C (0x53535153a202a6f1), + U64_C (0xdcdc57dcae8ba572), U64_C (0x0b0b2c0b58271653), + U64_C (0x9d9d4e9d9cd32701), U64_C (0x6c6cad6c47c1d82b), + U64_C (0x3131c43195f562a4), U64_C (0x7474cd7487b9e8f3), + U64_C (0xf6f6fff6e309f115), U64_C (0x464605460a438c4c), + U64_C (0xacac8aac092645a5), U64_C (0x89891e893c970fb5), + U64_C (0x14145014a04428b4), U64_C (0xe1e1a3e15b42dfba), + U64_C (0x16165816b04e2ca6), U64_C (0x3a3ae83acdd274f7), + U64_C (0x6969b9696fd0d206), U64_C (0x09092409482d1241), + U64_C (0x7070dd70a7ade0d7), U64_C (0xb6b6e2b6d954716f), + U64_C (0xd0d067d0ceb7bd1e), U64_C (0xeded93ed3b7ec7d6), + U64_C (0xcccc17cc2edb85e2), U64_C (0x424215422a578468), + U64_C (0x98985a98b4c22d2c), U64_C (0xa4a4aaa4490e55ed), + U64_C (0x2828a0285d885075), U64_C (0x5c5c6d5cda31b886), + U64_C (0xf8f8c7f8933fed6b), U64_C (0x8686228644a411c2), + }; + +static const u64 C1[256] = + { + U64_C (0xd818186018c07830), U64_C (0x2623238c2305af46), + U64_C (0xb8c6c63fc67ef991), U64_C (0xfbe8e887e8136fcd), + U64_C (0xcb878726874ca113), U64_C (0x11b8b8dab8a9626d), + U64_C (0x0901010401080502), U64_C (0x0d4f4f214f426e9e), + U64_C (0x9b3636d836adee6c), U64_C (0xffa6a6a2a6590451), + U64_C (0x0cd2d26fd2debdb9), U64_C (0x0ef5f5f3f5fb06f7), + U64_C (0x967979f979ef80f2), U64_C (0x306f6fa16f5fcede), + U64_C (0x6d91917e91fcef3f), U64_C (0xf852525552aa07a4), + U64_C (0x4760609d6027fdc0), U64_C (0x35bcbccabc897665), + U64_C (0x379b9b569baccd2b), U64_C (0x8a8e8e028e048c01), + U64_C (0xd2a3a3b6a371155b), U64_C (0x6c0c0c300c603c18), + U64_C (0x847b7bf17bff8af6), U64_C (0x803535d435b5e16a), + U64_C (0xf51d1d741de8693a), U64_C (0xb3e0e0a7e05347dd), + U64_C (0x21d7d77bd7f6acb3), U64_C (0x9cc2c22fc25eed99), + U64_C (0x432e2eb82e6d965c), U64_C (0x294b4b314b627a96), + U64_C (0x5dfefedffea321e1), U64_C (0xd5575741578216ae), + U64_C (0xbd15155415a8412a), U64_C (0xe87777c1779fb6ee), + U64_C (0x923737dc37a5eb6e), U64_C (0x9ee5e5b3e57b56d7), + U64_C (0x139f9f469f8cd923), U64_C (0x23f0f0e7f0d317fd), + U64_C (0x204a4a354a6a7f94), U64_C (0x44dada4fda9e95a9), + U64_C (0xa258587d58fa25b0), U64_C (0xcfc9c903c906ca8f), + U64_C (0x7c2929a429558d52), U64_C (0x5a0a0a280a502214), + U64_C (0x50b1b1feb1e14f7f), U64_C (0xc9a0a0baa0691a5d), + U64_C (0x146b6bb16b7fdad6), U64_C (0xd985852e855cab17), + U64_C (0x3cbdbdcebd817367), U64_C (0x8f5d5d695dd234ba), + U64_C (0x9010104010805020), U64_C (0x07f4f4f7f4f303f5), + U64_C (0xddcbcb0bcb16c08b), U64_C (0xd33e3ef83eedc67c), + U64_C (0x2d0505140528110a), U64_C (0x78676781671fe6ce), + U64_C (0x97e4e4b7e47353d5), U64_C (0x0227279c2725bb4e), + U64_C (0x7341411941325882), U64_C (0xa78b8b168b2c9d0b), + U64_C (0xf6a7a7a6a7510153), U64_C (0xb27d7de97dcf94fa), + U64_C (0x4995956e95dcfb37), U64_C (0x56d8d847d88e9fad), + U64_C (0x70fbfbcbfb8b30eb), U64_C (0xcdeeee9fee2371c1), + U64_C (0xbb7c7ced7cc791f8), U64_C (0x716666856617e3cc), + U64_C (0x7bdddd53dda68ea7), U64_C (0xaf17175c17b84b2e), + U64_C (0x454747014702468e), U64_C (0x1a9e9e429e84dc21), + U64_C (0xd4caca0fca1ec589), U64_C (0x582d2db42d75995a), + U64_C (0x2ebfbfc6bf917963), U64_C (0x3f07071c07381b0e), + U64_C (0xacadad8ead012347), U64_C (0xb05a5a755aea2fb4), + U64_C (0xef838336836cb51b), U64_C (0xb63333cc3385ff66), + U64_C (0x5c636391633ff2c6), U64_C (0x1202020802100a04), + U64_C (0x93aaaa92aa393849), U64_C (0xde7171d971afa8e2), + U64_C (0xc6c8c807c80ecf8d), U64_C (0xd119196419c87d32), + U64_C (0x3b49493949727092), U64_C (0x5fd9d943d9869aaf), + U64_C (0x31f2f2eff2c31df9), U64_C (0xa8e3e3abe34b48db), + U64_C (0xb95b5b715be22ab6), U64_C (0xbc88881a8834920d), + U64_C (0x3e9a9a529aa4c829), U64_C (0x0b262698262dbe4c), + U64_C (0xbf3232c8328dfa64), U64_C (0x59b0b0fab0e94a7d), + U64_C (0xf2e9e983e91b6acf), U64_C (0x770f0f3c0f78331e), + U64_C (0x33d5d573d5e6a6b7), U64_C (0xf480803a8074ba1d), + U64_C (0x27bebec2be997c61), U64_C (0xebcdcd13cd26de87), + U64_C (0x893434d034bde468), U64_C (0x3248483d487a7590), + U64_C (0x54ffffdbffab24e3), U64_C (0x8d7a7af57af78ff4), + U64_C (0x6490907a90f4ea3d), U64_C (0x9d5f5f615fc23ebe), + U64_C (0x3d202080201da040), U64_C (0x0f6868bd6867d5d0), + U64_C (0xca1a1a681ad07234), U64_C (0xb7aeae82ae192c41), + U64_C (0x7db4b4eab4c95e75), U64_C (0xce54544d549a19a8), + U64_C (0x7f93937693ece53b), U64_C (0x2f222288220daa44), + U64_C (0x6364648d6407e9c8), U64_C (0x2af1f1e3f1db12ff), + U64_C (0xcc7373d173bfa2e6), U64_C (0x8212124812905a24), + U64_C (0x7a40401d403a5d80), U64_C (0x4808082008402810), + U64_C (0x95c3c32bc356e89b), U64_C (0xdfecec97ec337bc5), + U64_C (0x4ddbdb4bdb9690ab), U64_C (0xc0a1a1bea1611f5f), + U64_C (0x918d8d0e8d1c8307), U64_C (0xc83d3df43df5c97a), + U64_C (0x5b97976697ccf133), U64_C (0x0000000000000000), + U64_C (0xf9cfcf1bcf36d483), U64_C (0x6e2b2bac2b458756), + U64_C (0xe17676c57697b3ec), U64_C (0xe68282328264b019), + U64_C (0x28d6d67fd6fea9b1), U64_C (0xc31b1b6c1bd87736), + U64_C (0x74b5b5eeb5c15b77), U64_C (0xbeafaf86af112943), + U64_C (0x1d6a6ab56a77dfd4), U64_C (0xea50505d50ba0da0), + U64_C (0x5745450945124c8a), U64_C (0x38f3f3ebf3cb18fb), + U64_C (0xad3030c0309df060), U64_C (0xc4efef9bef2b74c3), + U64_C (0xda3f3ffc3fe5c37e), U64_C (0xc755554955921caa), + U64_C (0xdba2a2b2a2791059), U64_C (0xe9eaea8fea0365c9), + U64_C (0x6a656589650fecca), U64_C (0x03babad2bab96869), + U64_C (0x4a2f2fbc2f65935e), U64_C (0x8ec0c027c04ee79d), + U64_C (0x60dede5fdebe81a1), U64_C (0xfc1c1c701ce06c38), + U64_C (0x46fdfdd3fdbb2ee7), U64_C (0x1f4d4d294d52649a), + U64_C (0x7692927292e4e039), U64_C (0xfa7575c9758fbcea), + U64_C (0x3606061806301e0c), U64_C (0xae8a8a128a249809), + U64_C (0x4bb2b2f2b2f94079), U64_C (0x85e6e6bfe66359d1), + U64_C (0x7e0e0e380e70361c), U64_C (0xe71f1f7c1ff8633e), + U64_C (0x556262956237f7c4), U64_C (0x3ad4d477d4eea3b5), + U64_C (0x81a8a89aa829324d), U64_C (0x5296966296c4f431), + U64_C (0x62f9f9c3f99b3aef), U64_C (0xa3c5c533c566f697), + U64_C (0x102525942535b14a), U64_C (0xab59597959f220b2), + U64_C (0xd084842a8454ae15), U64_C (0xc57272d572b7a7e4), + U64_C (0xec3939e439d5dd72), U64_C (0x164c4c2d4c5a6198), + U64_C (0x945e5e655eca3bbc), U64_C (0x9f7878fd78e785f0), + U64_C (0xe53838e038ddd870), U64_C (0x988c8c0a8c148605), + U64_C (0x17d1d163d1c6b2bf), U64_C (0xe4a5a5aea5410b57), + U64_C (0xa1e2e2afe2434dd9), U64_C (0x4e616199612ff8c2), + U64_C (0x42b3b3f6b3f1457b), U64_C (0x342121842115a542), + U64_C (0x089c9c4a9c94d625), U64_C (0xee1e1e781ef0663c), + U64_C (0x6143431143225286), U64_C (0xb1c7c73bc776fc93), + U64_C (0x4ffcfcd7fcb32be5), U64_C (0x2404041004201408), + U64_C (0xe351515951b208a2), U64_C (0x2599995e99bcc72f), + U64_C (0x226d6da96d4fc4da), U64_C (0x650d0d340d68391a), + U64_C (0x79fafacffa8335e9), U64_C (0x69dfdf5bdfb684a3), + U64_C (0xa97e7ee57ed79bfc), U64_C (0x19242490243db448), + U64_C (0xfe3b3bec3bc5d776), U64_C (0x9aabab96ab313d4b), + U64_C (0xf0cece1fce3ed181), U64_C (0x9911114411885522), + U64_C (0x838f8f068f0c8903), U64_C (0x044e4e254e4a6b9c), + U64_C (0x66b7b7e6b7d15173), U64_C (0xe0ebeb8beb0b60cb), + U64_C (0xc13c3cf03cfdcc78), U64_C (0xfd81813e817cbf1f), + U64_C (0x4094946a94d4fe35), U64_C (0x1cf7f7fbf7eb0cf3), + U64_C (0x18b9b9deb9a1676f), U64_C (0x8b13134c13985f26), + U64_C (0x512c2cb02c7d9c58), U64_C (0x05d3d36bd3d6b8bb), + U64_C (0x8ce7e7bbe76b5cd3), U64_C (0x396e6ea56e57cbdc), + U64_C (0xaac4c437c46ef395), U64_C (0x1b03030c03180f06), + U64_C (0xdc565645568a13ac), U64_C (0x5e44440d441a4988), + U64_C (0xa07f7fe17fdf9efe), U64_C (0x88a9a99ea921374f), + U64_C (0x672a2aa82a4d8254), U64_C (0x0abbbbd6bbb16d6b), + U64_C (0x87c1c123c146e29f), U64_C (0xf153535153a202a6), + U64_C (0x72dcdc57dcae8ba5), U64_C (0x530b0b2c0b582716), + U64_C (0x019d9d4e9d9cd327), U64_C (0x2b6c6cad6c47c1d8), + U64_C (0xa43131c43195f562), U64_C (0xf37474cd7487b9e8), + U64_C (0x15f6f6fff6e309f1), U64_C (0x4c464605460a438c), + U64_C (0xa5acac8aac092645), U64_C (0xb589891e893c970f), + U64_C (0xb414145014a04428), U64_C (0xbae1e1a3e15b42df), + U64_C (0xa616165816b04e2c), U64_C (0xf73a3ae83acdd274), + U64_C (0x066969b9696fd0d2), U64_C (0x4109092409482d12), + U64_C (0xd77070dd70a7ade0), U64_C (0x6fb6b6e2b6d95471), + U64_C (0x1ed0d067d0ceb7bd), U64_C (0xd6eded93ed3b7ec7), + U64_C (0xe2cccc17cc2edb85), U64_C (0x68424215422a5784), + U64_C (0x2c98985a98b4c22d), U64_C (0xeda4a4aaa4490e55), + U64_C (0x752828a0285d8850), U64_C (0x865c5c6d5cda31b8), + U64_C (0x6bf8f8c7f8933fed), U64_C (0xc28686228644a411), + }; + +static const u64 C2[256] = + { + U64_C (0x30d818186018c078), U64_C (0x462623238c2305af), + U64_C (0x91b8c6c63fc67ef9), U64_C (0xcdfbe8e887e8136f), + U64_C (0x13cb878726874ca1), U64_C (0x6d11b8b8dab8a962), + U64_C (0x0209010104010805), U64_C (0x9e0d4f4f214f426e), + U64_C (0x6c9b3636d836adee), U64_C (0x51ffa6a6a2a65904), + U64_C (0xb90cd2d26fd2debd), U64_C (0xf70ef5f5f3f5fb06), + U64_C (0xf2967979f979ef80), U64_C (0xde306f6fa16f5fce), + U64_C (0x3f6d91917e91fcef), U64_C (0xa4f852525552aa07), + U64_C (0xc04760609d6027fd), U64_C (0x6535bcbccabc8976), + U64_C (0x2b379b9b569baccd), U64_C (0x018a8e8e028e048c), + U64_C (0x5bd2a3a3b6a37115), U64_C (0x186c0c0c300c603c), + U64_C (0xf6847b7bf17bff8a), U64_C (0x6a803535d435b5e1), + U64_C (0x3af51d1d741de869), U64_C (0xddb3e0e0a7e05347), + U64_C (0xb321d7d77bd7f6ac), U64_C (0x999cc2c22fc25eed), + U64_C (0x5c432e2eb82e6d96), U64_C (0x96294b4b314b627a), + U64_C (0xe15dfefedffea321), U64_C (0xaed5575741578216), + U64_C (0x2abd15155415a841), U64_C (0xeee87777c1779fb6), + U64_C (0x6e923737dc37a5eb), U64_C (0xd79ee5e5b3e57b56), + U64_C (0x23139f9f469f8cd9), U64_C (0xfd23f0f0e7f0d317), + U64_C (0x94204a4a354a6a7f), U64_C (0xa944dada4fda9e95), + U64_C (0xb0a258587d58fa25), U64_C (0x8fcfc9c903c906ca), + U64_C (0x527c2929a429558d), U64_C (0x145a0a0a280a5022), + U64_C (0x7f50b1b1feb1e14f), U64_C (0x5dc9a0a0baa0691a), + U64_C (0xd6146b6bb16b7fda), U64_C (0x17d985852e855cab), + U64_C (0x673cbdbdcebd8173), U64_C (0xba8f5d5d695dd234), + U64_C (0x2090101040108050), U64_C (0xf507f4f4f7f4f303), + U64_C (0x8bddcbcb0bcb16c0), U64_C (0x7cd33e3ef83eedc6), + U64_C (0x0a2d050514052811), U64_C (0xce78676781671fe6), + U64_C (0xd597e4e4b7e47353), U64_C (0x4e0227279c2725bb), + U64_C (0x8273414119413258), U64_C (0x0ba78b8b168b2c9d), + U64_C (0x53f6a7a7a6a75101), U64_C (0xfab27d7de97dcf94), + U64_C (0x374995956e95dcfb), U64_C (0xad56d8d847d88e9f), + U64_C (0xeb70fbfbcbfb8b30), U64_C (0xc1cdeeee9fee2371), + U64_C (0xf8bb7c7ced7cc791), U64_C (0xcc716666856617e3), + U64_C (0xa77bdddd53dda68e), U64_C (0x2eaf17175c17b84b), + U64_C (0x8e45474701470246), U64_C (0x211a9e9e429e84dc), + U64_C (0x89d4caca0fca1ec5), U64_C (0x5a582d2db42d7599), + U64_C (0x632ebfbfc6bf9179), U64_C (0x0e3f07071c07381b), + U64_C (0x47acadad8ead0123), U64_C (0xb4b05a5a755aea2f), + U64_C (0x1bef838336836cb5), U64_C (0x66b63333cc3385ff), + U64_C (0xc65c636391633ff2), U64_C (0x041202020802100a), + U64_C (0x4993aaaa92aa3938), U64_C (0xe2de7171d971afa8), + U64_C (0x8dc6c8c807c80ecf), U64_C (0x32d119196419c87d), + U64_C (0x923b494939497270), U64_C (0xaf5fd9d943d9869a), + U64_C (0xf931f2f2eff2c31d), U64_C (0xdba8e3e3abe34b48), + U64_C (0xb6b95b5b715be22a), U64_C (0x0dbc88881a883492), + U64_C (0x293e9a9a529aa4c8), U64_C (0x4c0b262698262dbe), + U64_C (0x64bf3232c8328dfa), U64_C (0x7d59b0b0fab0e94a), + U64_C (0xcff2e9e983e91b6a), U64_C (0x1e770f0f3c0f7833), + U64_C (0xb733d5d573d5e6a6), U64_C (0x1df480803a8074ba), + U64_C (0x6127bebec2be997c), U64_C (0x87ebcdcd13cd26de), + U64_C (0x68893434d034bde4), U64_C (0x903248483d487a75), + U64_C (0xe354ffffdbffab24), U64_C (0xf48d7a7af57af78f), + U64_C (0x3d6490907a90f4ea), U64_C (0xbe9d5f5f615fc23e), + U64_C (0x403d202080201da0), U64_C (0xd00f6868bd6867d5), + U64_C (0x34ca1a1a681ad072), U64_C (0x41b7aeae82ae192c), + U64_C (0x757db4b4eab4c95e), U64_C (0xa8ce54544d549a19), + U64_C (0x3b7f93937693ece5), U64_C (0x442f222288220daa), + U64_C (0xc86364648d6407e9), U64_C (0xff2af1f1e3f1db12), + U64_C (0xe6cc7373d173bfa2), U64_C (0x248212124812905a), + U64_C (0x807a40401d403a5d), U64_C (0x1048080820084028), + U64_C (0x9b95c3c32bc356e8), U64_C (0xc5dfecec97ec337b), + U64_C (0xab4ddbdb4bdb9690), U64_C (0x5fc0a1a1bea1611f), + U64_C (0x07918d8d0e8d1c83), U64_C (0x7ac83d3df43df5c9), + U64_C (0x335b97976697ccf1), U64_C (0x0000000000000000), + U64_C (0x83f9cfcf1bcf36d4), U64_C (0x566e2b2bac2b4587), + U64_C (0xece17676c57697b3), U64_C (0x19e68282328264b0), + U64_C (0xb128d6d67fd6fea9), U64_C (0x36c31b1b6c1bd877), + U64_C (0x7774b5b5eeb5c15b), U64_C (0x43beafaf86af1129), + U64_C (0xd41d6a6ab56a77df), U64_C (0xa0ea50505d50ba0d), + U64_C (0x8a5745450945124c), U64_C (0xfb38f3f3ebf3cb18), + U64_C (0x60ad3030c0309df0), U64_C (0xc3c4efef9bef2b74), + U64_C (0x7eda3f3ffc3fe5c3), U64_C (0xaac755554955921c), + U64_C (0x59dba2a2b2a27910), U64_C (0xc9e9eaea8fea0365), + U64_C (0xca6a656589650fec), U64_C (0x6903babad2bab968), + U64_C (0x5e4a2f2fbc2f6593), U64_C (0x9d8ec0c027c04ee7), + U64_C (0xa160dede5fdebe81), U64_C (0x38fc1c1c701ce06c), + U64_C (0xe746fdfdd3fdbb2e), U64_C (0x9a1f4d4d294d5264), + U64_C (0x397692927292e4e0), U64_C (0xeafa7575c9758fbc), + U64_C (0x0c3606061806301e), U64_C (0x09ae8a8a128a2498), + U64_C (0x794bb2b2f2b2f940), U64_C (0xd185e6e6bfe66359), + U64_C (0x1c7e0e0e380e7036), U64_C (0x3ee71f1f7c1ff863), + U64_C (0xc4556262956237f7), U64_C (0xb53ad4d477d4eea3), + U64_C (0x4d81a8a89aa82932), U64_C (0x315296966296c4f4), + U64_C (0xef62f9f9c3f99b3a), U64_C (0x97a3c5c533c566f6), + U64_C (0x4a102525942535b1), U64_C (0xb2ab59597959f220), + U64_C (0x15d084842a8454ae), U64_C (0xe4c57272d572b7a7), + U64_C (0x72ec3939e439d5dd), U64_C (0x98164c4c2d4c5a61), + U64_C (0xbc945e5e655eca3b), U64_C (0xf09f7878fd78e785), + U64_C (0x70e53838e038ddd8), U64_C (0x05988c8c0a8c1486), + U64_C (0xbf17d1d163d1c6b2), U64_C (0x57e4a5a5aea5410b), + U64_C (0xd9a1e2e2afe2434d), U64_C (0xc24e616199612ff8), + U64_C (0x7b42b3b3f6b3f145), U64_C (0x42342121842115a5), + U64_C (0x25089c9c4a9c94d6), U64_C (0x3cee1e1e781ef066), + U64_C (0x8661434311432252), U64_C (0x93b1c7c73bc776fc), + U64_C (0xe54ffcfcd7fcb32b), U64_C (0x0824040410042014), + U64_C (0xa2e351515951b208), U64_C (0x2f2599995e99bcc7), + U64_C (0xda226d6da96d4fc4), U64_C (0x1a650d0d340d6839), + U64_C (0xe979fafacffa8335), U64_C (0xa369dfdf5bdfb684), + U64_C (0xfca97e7ee57ed79b), U64_C (0x4819242490243db4), + U64_C (0x76fe3b3bec3bc5d7), U64_C (0x4b9aabab96ab313d), + U64_C (0x81f0cece1fce3ed1), U64_C (0x2299111144118855), + U64_C (0x03838f8f068f0c89), U64_C (0x9c044e4e254e4a6b), + U64_C (0x7366b7b7e6b7d151), U64_C (0xcbe0ebeb8beb0b60), + U64_C (0x78c13c3cf03cfdcc), U64_C (0x1ffd81813e817cbf), + U64_C (0x354094946a94d4fe), U64_C (0xf31cf7f7fbf7eb0c), + U64_C (0x6f18b9b9deb9a167), U64_C (0x268b13134c13985f), + U64_C (0x58512c2cb02c7d9c), U64_C (0xbb05d3d36bd3d6b8), + U64_C (0xd38ce7e7bbe76b5c), U64_C (0xdc396e6ea56e57cb), + U64_C (0x95aac4c437c46ef3), U64_C (0x061b03030c03180f), + U64_C (0xacdc565645568a13), U64_C (0x885e44440d441a49), + U64_C (0xfea07f7fe17fdf9e), U64_C (0x4f88a9a99ea92137), + U64_C (0x54672a2aa82a4d82), U64_C (0x6b0abbbbd6bbb16d), + U64_C (0x9f87c1c123c146e2), U64_C (0xa6f153535153a202), + U64_C (0xa572dcdc57dcae8b), U64_C (0x16530b0b2c0b5827), + U64_C (0x27019d9d4e9d9cd3), U64_C (0xd82b6c6cad6c47c1), + U64_C (0x62a43131c43195f5), U64_C (0xe8f37474cd7487b9), + U64_C (0xf115f6f6fff6e309), U64_C (0x8c4c464605460a43), + U64_C (0x45a5acac8aac0926), U64_C (0x0fb589891e893c97), + U64_C (0x28b414145014a044), U64_C (0xdfbae1e1a3e15b42), + U64_C (0x2ca616165816b04e), U64_C (0x74f73a3ae83acdd2), + U64_C (0xd2066969b9696fd0), U64_C (0x124109092409482d), + U64_C (0xe0d77070dd70a7ad), U64_C (0x716fb6b6e2b6d954), + U64_C (0xbd1ed0d067d0ceb7), U64_C (0xc7d6eded93ed3b7e), + U64_C (0x85e2cccc17cc2edb), U64_C (0x8468424215422a57), + U64_C (0x2d2c98985a98b4c2), U64_C (0x55eda4a4aaa4490e), + U64_C (0x50752828a0285d88), U64_C (0xb8865c5c6d5cda31), + U64_C (0xed6bf8f8c7f8933f), U64_C (0x11c28686228644a4), + }; + +static const u64 C3[256] = + { + U64_C (0x7830d818186018c0), U64_C (0xaf462623238c2305), + U64_C (0xf991b8c6c63fc67e), U64_C (0x6fcdfbe8e887e813), + U64_C (0xa113cb878726874c), U64_C (0x626d11b8b8dab8a9), + U64_C (0x0502090101040108), U64_C (0x6e9e0d4f4f214f42), + U64_C (0xee6c9b3636d836ad), U64_C (0x0451ffa6a6a2a659), + U64_C (0xbdb90cd2d26fd2de), U64_C (0x06f70ef5f5f3f5fb), + U64_C (0x80f2967979f979ef), U64_C (0xcede306f6fa16f5f), + U64_C (0xef3f6d91917e91fc), U64_C (0x07a4f852525552aa), + U64_C (0xfdc04760609d6027), U64_C (0x766535bcbccabc89), + U64_C (0xcd2b379b9b569bac), U64_C (0x8c018a8e8e028e04), + U64_C (0x155bd2a3a3b6a371), U64_C (0x3c186c0c0c300c60), + U64_C (0x8af6847b7bf17bff), U64_C (0xe16a803535d435b5), + U64_C (0x693af51d1d741de8), U64_C (0x47ddb3e0e0a7e053), + U64_C (0xacb321d7d77bd7f6), U64_C (0xed999cc2c22fc25e), + U64_C (0x965c432e2eb82e6d), U64_C (0x7a96294b4b314b62), + U64_C (0x21e15dfefedffea3), U64_C (0x16aed55757415782), + U64_C (0x412abd15155415a8), U64_C (0xb6eee87777c1779f), + U64_C (0xeb6e923737dc37a5), U64_C (0x56d79ee5e5b3e57b), + U64_C (0xd923139f9f469f8c), U64_C (0x17fd23f0f0e7f0d3), + U64_C (0x7f94204a4a354a6a), U64_C (0x95a944dada4fda9e), + U64_C (0x25b0a258587d58fa), U64_C (0xca8fcfc9c903c906), + U64_C (0x8d527c2929a42955), U64_C (0x22145a0a0a280a50), + U64_C (0x4f7f50b1b1feb1e1), U64_C (0x1a5dc9a0a0baa069), + U64_C (0xdad6146b6bb16b7f), U64_C (0xab17d985852e855c), + U64_C (0x73673cbdbdcebd81), U64_C (0x34ba8f5d5d695dd2), + U64_C (0x5020901010401080), U64_C (0x03f507f4f4f7f4f3), + U64_C (0xc08bddcbcb0bcb16), U64_C (0xc67cd33e3ef83eed), + U64_C (0x110a2d0505140528), U64_C (0xe6ce78676781671f), + U64_C (0x53d597e4e4b7e473), U64_C (0xbb4e0227279c2725), + U64_C (0x5882734141194132), U64_C (0x9d0ba78b8b168b2c), + U64_C (0x0153f6a7a7a6a751), U64_C (0x94fab27d7de97dcf), + U64_C (0xfb374995956e95dc), U64_C (0x9fad56d8d847d88e), + U64_C (0x30eb70fbfbcbfb8b), U64_C (0x71c1cdeeee9fee23), + U64_C (0x91f8bb7c7ced7cc7), U64_C (0xe3cc716666856617), + U64_C (0x8ea77bdddd53dda6), U64_C (0x4b2eaf17175c17b8), + U64_C (0x468e454747014702), U64_C (0xdc211a9e9e429e84), + U64_C (0xc589d4caca0fca1e), U64_C (0x995a582d2db42d75), + U64_C (0x79632ebfbfc6bf91), U64_C (0x1b0e3f07071c0738), + U64_C (0x2347acadad8ead01), U64_C (0x2fb4b05a5a755aea), + U64_C (0xb51bef838336836c), U64_C (0xff66b63333cc3385), + U64_C (0xf2c65c636391633f), U64_C (0x0a04120202080210), + U64_C (0x384993aaaa92aa39), U64_C (0xa8e2de7171d971af), + U64_C (0xcf8dc6c8c807c80e), U64_C (0x7d32d119196419c8), + U64_C (0x70923b4949394972), U64_C (0x9aaf5fd9d943d986), + U64_C (0x1df931f2f2eff2c3), U64_C (0x48dba8e3e3abe34b), + U64_C (0x2ab6b95b5b715be2), U64_C (0x920dbc88881a8834), + U64_C (0xc8293e9a9a529aa4), U64_C (0xbe4c0b262698262d), + U64_C (0xfa64bf3232c8328d), U64_C (0x4a7d59b0b0fab0e9), + U64_C (0x6acff2e9e983e91b), U64_C (0x331e770f0f3c0f78), + U64_C (0xa6b733d5d573d5e6), U64_C (0xba1df480803a8074), + U64_C (0x7c6127bebec2be99), U64_C (0xde87ebcdcd13cd26), + U64_C (0xe468893434d034bd), U64_C (0x75903248483d487a), + U64_C (0x24e354ffffdbffab), U64_C (0x8ff48d7a7af57af7), + U64_C (0xea3d6490907a90f4), U64_C (0x3ebe9d5f5f615fc2), + U64_C (0xa0403d202080201d), U64_C (0xd5d00f6868bd6867), + U64_C (0x7234ca1a1a681ad0), U64_C (0x2c41b7aeae82ae19), + U64_C (0x5e757db4b4eab4c9), U64_C (0x19a8ce54544d549a), + U64_C (0xe53b7f93937693ec), U64_C (0xaa442f222288220d), + U64_C (0xe9c86364648d6407), U64_C (0x12ff2af1f1e3f1db), + U64_C (0xa2e6cc7373d173bf), U64_C (0x5a24821212481290), + U64_C (0x5d807a40401d403a), U64_C (0x2810480808200840), + U64_C (0xe89b95c3c32bc356), U64_C (0x7bc5dfecec97ec33), + U64_C (0x90ab4ddbdb4bdb96), U64_C (0x1f5fc0a1a1bea161), + U64_C (0x8307918d8d0e8d1c), U64_C (0xc97ac83d3df43df5), + U64_C (0xf1335b97976697cc), U64_C (0x0000000000000000), + U64_C (0xd483f9cfcf1bcf36), U64_C (0x87566e2b2bac2b45), + U64_C (0xb3ece17676c57697), U64_C (0xb019e68282328264), + U64_C (0xa9b128d6d67fd6fe), U64_C (0x7736c31b1b6c1bd8), + U64_C (0x5b7774b5b5eeb5c1), U64_C (0x2943beafaf86af11), + U64_C (0xdfd41d6a6ab56a77), U64_C (0x0da0ea50505d50ba), + U64_C (0x4c8a574545094512), U64_C (0x18fb38f3f3ebf3cb), + U64_C (0xf060ad3030c0309d), U64_C (0x74c3c4efef9bef2b), + U64_C (0xc37eda3f3ffc3fe5), U64_C (0x1caac75555495592), + U64_C (0x1059dba2a2b2a279), U64_C (0x65c9e9eaea8fea03), + U64_C (0xecca6a656589650f), U64_C (0x686903babad2bab9), + U64_C (0x935e4a2f2fbc2f65), U64_C (0xe79d8ec0c027c04e), + U64_C (0x81a160dede5fdebe), U64_C (0x6c38fc1c1c701ce0), + U64_C (0x2ee746fdfdd3fdbb), U64_C (0x649a1f4d4d294d52), + U64_C (0xe0397692927292e4), U64_C (0xbceafa7575c9758f), + U64_C (0x1e0c360606180630), U64_C (0x9809ae8a8a128a24), + U64_C (0x40794bb2b2f2b2f9), U64_C (0x59d185e6e6bfe663), + U64_C (0x361c7e0e0e380e70), U64_C (0x633ee71f1f7c1ff8), + U64_C (0xf7c4556262956237), U64_C (0xa3b53ad4d477d4ee), + U64_C (0x324d81a8a89aa829), U64_C (0xf4315296966296c4), + U64_C (0x3aef62f9f9c3f99b), U64_C (0xf697a3c5c533c566), + U64_C (0xb14a102525942535), U64_C (0x20b2ab59597959f2), + U64_C (0xae15d084842a8454), U64_C (0xa7e4c57272d572b7), + U64_C (0xdd72ec3939e439d5), U64_C (0x6198164c4c2d4c5a), + U64_C (0x3bbc945e5e655eca), U64_C (0x85f09f7878fd78e7), + U64_C (0xd870e53838e038dd), U64_C (0x8605988c8c0a8c14), + U64_C (0xb2bf17d1d163d1c6), U64_C (0x0b57e4a5a5aea541), + U64_C (0x4dd9a1e2e2afe243), U64_C (0xf8c24e616199612f), + U64_C (0x457b42b3b3f6b3f1), U64_C (0xa542342121842115), + U64_C (0xd625089c9c4a9c94), U64_C (0x663cee1e1e781ef0), + U64_C (0x5286614343114322), U64_C (0xfc93b1c7c73bc776), + U64_C (0x2be54ffcfcd7fcb3), U64_C (0x1408240404100420), + U64_C (0x08a2e351515951b2), U64_C (0xc72f2599995e99bc), + U64_C (0xc4da226d6da96d4f), U64_C (0x391a650d0d340d68), + U64_C (0x35e979fafacffa83), U64_C (0x84a369dfdf5bdfb6), + U64_C (0x9bfca97e7ee57ed7), U64_C (0xb44819242490243d), + U64_C (0xd776fe3b3bec3bc5), U64_C (0x3d4b9aabab96ab31), + U64_C (0xd181f0cece1fce3e), U64_C (0x5522991111441188), + U64_C (0x8903838f8f068f0c), U64_C (0x6b9c044e4e254e4a), + U64_C (0x517366b7b7e6b7d1), U64_C (0x60cbe0ebeb8beb0b), + U64_C (0xcc78c13c3cf03cfd), U64_C (0xbf1ffd81813e817c), + U64_C (0xfe354094946a94d4), U64_C (0x0cf31cf7f7fbf7eb), + U64_C (0x676f18b9b9deb9a1), U64_C (0x5f268b13134c1398), + U64_C (0x9c58512c2cb02c7d), U64_C (0xb8bb05d3d36bd3d6), + U64_C (0x5cd38ce7e7bbe76b), U64_C (0xcbdc396e6ea56e57), + U64_C (0xf395aac4c437c46e), U64_C (0x0f061b03030c0318), + U64_C (0x13acdc565645568a), U64_C (0x49885e44440d441a), + U64_C (0x9efea07f7fe17fdf), U64_C (0x374f88a9a99ea921), + U64_C (0x8254672a2aa82a4d), U64_C (0x6d6b0abbbbd6bbb1), + U64_C (0xe29f87c1c123c146), U64_C (0x02a6f153535153a2), + U64_C (0x8ba572dcdc57dcae), U64_C (0x2716530b0b2c0b58), + U64_C (0xd327019d9d4e9d9c), U64_C (0xc1d82b6c6cad6c47), + U64_C (0xf562a43131c43195), U64_C (0xb9e8f37474cd7487), + U64_C (0x09f115f6f6fff6e3), U64_C (0x438c4c464605460a), + U64_C (0x2645a5acac8aac09), U64_C (0x970fb589891e893c), + U64_C (0x4428b414145014a0), U64_C (0x42dfbae1e1a3e15b), + U64_C (0x4e2ca616165816b0), U64_C (0xd274f73a3ae83acd), + U64_C (0xd0d2066969b9696f), U64_C (0x2d12410909240948), + U64_C (0xade0d77070dd70a7), U64_C (0x54716fb6b6e2b6d9), + U64_C (0xb7bd1ed0d067d0ce), U64_C (0x7ec7d6eded93ed3b), + U64_C (0xdb85e2cccc17cc2e), U64_C (0x578468424215422a), + U64_C (0xc22d2c98985a98b4), U64_C (0x0e55eda4a4aaa449), + U64_C (0x8850752828a0285d), U64_C (0x31b8865c5c6d5cda), + U64_C (0x3fed6bf8f8c7f893), U64_C (0xa411c28686228644), + }; + +static const u64 C4[256] = + { + U64_C (0xc07830d818186018), U64_C (0x05af462623238c23), + U64_C (0x7ef991b8c6c63fc6), U64_C (0x136fcdfbe8e887e8), + U64_C (0x4ca113cb87872687), U64_C (0xa9626d11b8b8dab8), + U64_C (0x0805020901010401), U64_C (0x426e9e0d4f4f214f), + U64_C (0xadee6c9b3636d836), U64_C (0x590451ffa6a6a2a6), + U64_C (0xdebdb90cd2d26fd2), U64_C (0xfb06f70ef5f5f3f5), + U64_C (0xef80f2967979f979), U64_C (0x5fcede306f6fa16f), + U64_C (0xfcef3f6d91917e91), U64_C (0xaa07a4f852525552), + U64_C (0x27fdc04760609d60), U64_C (0x89766535bcbccabc), + U64_C (0xaccd2b379b9b569b), U64_C (0x048c018a8e8e028e), + U64_C (0x71155bd2a3a3b6a3), U64_C (0x603c186c0c0c300c), + U64_C (0xff8af6847b7bf17b), U64_C (0xb5e16a803535d435), + U64_C (0xe8693af51d1d741d), U64_C (0x5347ddb3e0e0a7e0), + U64_C (0xf6acb321d7d77bd7), U64_C (0x5eed999cc2c22fc2), + U64_C (0x6d965c432e2eb82e), U64_C (0x627a96294b4b314b), + U64_C (0xa321e15dfefedffe), U64_C (0x8216aed557574157), + U64_C (0xa8412abd15155415), U64_C (0x9fb6eee87777c177), + U64_C (0xa5eb6e923737dc37), U64_C (0x7b56d79ee5e5b3e5), + U64_C (0x8cd923139f9f469f), U64_C (0xd317fd23f0f0e7f0), + U64_C (0x6a7f94204a4a354a), U64_C (0x9e95a944dada4fda), + U64_C (0xfa25b0a258587d58), U64_C (0x06ca8fcfc9c903c9), + U64_C (0x558d527c2929a429), U64_C (0x5022145a0a0a280a), + U64_C (0xe14f7f50b1b1feb1), U64_C (0x691a5dc9a0a0baa0), + U64_C (0x7fdad6146b6bb16b), U64_C (0x5cab17d985852e85), + U64_C (0x8173673cbdbdcebd), U64_C (0xd234ba8f5d5d695d), + U64_C (0x8050209010104010), U64_C (0xf303f507f4f4f7f4), + U64_C (0x16c08bddcbcb0bcb), U64_C (0xedc67cd33e3ef83e), + U64_C (0x28110a2d05051405), U64_C (0x1fe6ce7867678167), + U64_C (0x7353d597e4e4b7e4), U64_C (0x25bb4e0227279c27), + U64_C (0x3258827341411941), U64_C (0x2c9d0ba78b8b168b), + U64_C (0x510153f6a7a7a6a7), U64_C (0xcf94fab27d7de97d), + U64_C (0xdcfb374995956e95), U64_C (0x8e9fad56d8d847d8), + U64_C (0x8b30eb70fbfbcbfb), U64_C (0x2371c1cdeeee9fee), + U64_C (0xc791f8bb7c7ced7c), U64_C (0x17e3cc7166668566), + U64_C (0xa68ea77bdddd53dd), U64_C (0xb84b2eaf17175c17), + U64_C (0x02468e4547470147), U64_C (0x84dc211a9e9e429e), + U64_C (0x1ec589d4caca0fca), U64_C (0x75995a582d2db42d), + U64_C (0x9179632ebfbfc6bf), U64_C (0x381b0e3f07071c07), + U64_C (0x012347acadad8ead), U64_C (0xea2fb4b05a5a755a), + U64_C (0x6cb51bef83833683), U64_C (0x85ff66b63333cc33), + U64_C (0x3ff2c65c63639163), U64_C (0x100a041202020802), + U64_C (0x39384993aaaa92aa), U64_C (0xafa8e2de7171d971), + U64_C (0x0ecf8dc6c8c807c8), U64_C (0xc87d32d119196419), + U64_C (0x7270923b49493949), U64_C (0x869aaf5fd9d943d9), + U64_C (0xc31df931f2f2eff2), U64_C (0x4b48dba8e3e3abe3), + U64_C (0xe22ab6b95b5b715b), U64_C (0x34920dbc88881a88), + U64_C (0xa4c8293e9a9a529a), U64_C (0x2dbe4c0b26269826), + U64_C (0x8dfa64bf3232c832), U64_C (0xe94a7d59b0b0fab0), + U64_C (0x1b6acff2e9e983e9), U64_C (0x78331e770f0f3c0f), + U64_C (0xe6a6b733d5d573d5), U64_C (0x74ba1df480803a80), + U64_C (0x997c6127bebec2be), U64_C (0x26de87ebcdcd13cd), + U64_C (0xbde468893434d034), U64_C (0x7a75903248483d48), + U64_C (0xab24e354ffffdbff), U64_C (0xf78ff48d7a7af57a), + U64_C (0xf4ea3d6490907a90), U64_C (0xc23ebe9d5f5f615f), + U64_C (0x1da0403d20208020), U64_C (0x67d5d00f6868bd68), + U64_C (0xd07234ca1a1a681a), U64_C (0x192c41b7aeae82ae), + U64_C (0xc95e757db4b4eab4), U64_C (0x9a19a8ce54544d54), + U64_C (0xece53b7f93937693), U64_C (0x0daa442f22228822), + U64_C (0x07e9c86364648d64), U64_C (0xdb12ff2af1f1e3f1), + U64_C (0xbfa2e6cc7373d173), U64_C (0x905a248212124812), + U64_C (0x3a5d807a40401d40), U64_C (0x4028104808082008), + U64_C (0x56e89b95c3c32bc3), U64_C (0x337bc5dfecec97ec), + U64_C (0x9690ab4ddbdb4bdb), U64_C (0x611f5fc0a1a1bea1), + U64_C (0x1c8307918d8d0e8d), U64_C (0xf5c97ac83d3df43d), + U64_C (0xccf1335b97976697), U64_C (0x0000000000000000), + U64_C (0x36d483f9cfcf1bcf), U64_C (0x4587566e2b2bac2b), + U64_C (0x97b3ece17676c576), U64_C (0x64b019e682823282), + U64_C (0xfea9b128d6d67fd6), U64_C (0xd87736c31b1b6c1b), + U64_C (0xc15b7774b5b5eeb5), U64_C (0x112943beafaf86af), + U64_C (0x77dfd41d6a6ab56a), U64_C (0xba0da0ea50505d50), + U64_C (0x124c8a5745450945), U64_C (0xcb18fb38f3f3ebf3), + U64_C (0x9df060ad3030c030), U64_C (0x2b74c3c4efef9bef), + U64_C (0xe5c37eda3f3ffc3f), U64_C (0x921caac755554955), + U64_C (0x791059dba2a2b2a2), U64_C (0x0365c9e9eaea8fea), + U64_C (0x0fecca6a65658965), U64_C (0xb9686903babad2ba), + U64_C (0x65935e4a2f2fbc2f), U64_C (0x4ee79d8ec0c027c0), + U64_C (0xbe81a160dede5fde), U64_C (0xe06c38fc1c1c701c), + U64_C (0xbb2ee746fdfdd3fd), U64_C (0x52649a1f4d4d294d), + U64_C (0xe4e0397692927292), U64_C (0x8fbceafa7575c975), + U64_C (0x301e0c3606061806), U64_C (0x249809ae8a8a128a), + U64_C (0xf940794bb2b2f2b2), U64_C (0x6359d185e6e6bfe6), + U64_C (0x70361c7e0e0e380e), U64_C (0xf8633ee71f1f7c1f), + U64_C (0x37f7c45562629562), U64_C (0xeea3b53ad4d477d4), + U64_C (0x29324d81a8a89aa8), U64_C (0xc4f4315296966296), + U64_C (0x9b3aef62f9f9c3f9), U64_C (0x66f697a3c5c533c5), + U64_C (0x35b14a1025259425), U64_C (0xf220b2ab59597959), + U64_C (0x54ae15d084842a84), U64_C (0xb7a7e4c57272d572), + U64_C (0xd5dd72ec3939e439), U64_C (0x5a6198164c4c2d4c), + U64_C (0xca3bbc945e5e655e), U64_C (0xe785f09f7878fd78), + U64_C (0xddd870e53838e038), U64_C (0x148605988c8c0a8c), + U64_C (0xc6b2bf17d1d163d1), U64_C (0x410b57e4a5a5aea5), + U64_C (0x434dd9a1e2e2afe2), U64_C (0x2ff8c24e61619961), + U64_C (0xf1457b42b3b3f6b3), U64_C (0x15a5423421218421), + U64_C (0x94d625089c9c4a9c), U64_C (0xf0663cee1e1e781e), + U64_C (0x2252866143431143), U64_C (0x76fc93b1c7c73bc7), + U64_C (0xb32be54ffcfcd7fc), U64_C (0x2014082404041004), + U64_C (0xb208a2e351515951), U64_C (0xbcc72f2599995e99), + U64_C (0x4fc4da226d6da96d), U64_C (0x68391a650d0d340d), + U64_C (0x8335e979fafacffa), U64_C (0xb684a369dfdf5bdf), + U64_C (0xd79bfca97e7ee57e), U64_C (0x3db4481924249024), + U64_C (0xc5d776fe3b3bec3b), U64_C (0x313d4b9aabab96ab), + U64_C (0x3ed181f0cece1fce), U64_C (0x8855229911114411), + U64_C (0x0c8903838f8f068f), U64_C (0x4a6b9c044e4e254e), + U64_C (0xd1517366b7b7e6b7), U64_C (0x0b60cbe0ebeb8beb), + U64_C (0xfdcc78c13c3cf03c), U64_C (0x7cbf1ffd81813e81), + U64_C (0xd4fe354094946a94), U64_C (0xeb0cf31cf7f7fbf7), + U64_C (0xa1676f18b9b9deb9), U64_C (0x985f268b13134c13), + U64_C (0x7d9c58512c2cb02c), U64_C (0xd6b8bb05d3d36bd3), + U64_C (0x6b5cd38ce7e7bbe7), U64_C (0x57cbdc396e6ea56e), + U64_C (0x6ef395aac4c437c4), U64_C (0x180f061b03030c03), + U64_C (0x8a13acdc56564556), U64_C (0x1a49885e44440d44), + U64_C (0xdf9efea07f7fe17f), U64_C (0x21374f88a9a99ea9), + U64_C (0x4d8254672a2aa82a), U64_C (0xb16d6b0abbbbd6bb), + U64_C (0x46e29f87c1c123c1), U64_C (0xa202a6f153535153), + U64_C (0xae8ba572dcdc57dc), U64_C (0x582716530b0b2c0b), + U64_C (0x9cd327019d9d4e9d), U64_C (0x47c1d82b6c6cad6c), + U64_C (0x95f562a43131c431), U64_C (0x87b9e8f37474cd74), + U64_C (0xe309f115f6f6fff6), U64_C (0x0a438c4c46460546), + U64_C (0x092645a5acac8aac), U64_C (0x3c970fb589891e89), + U64_C (0xa04428b414145014), U64_C (0x5b42dfbae1e1a3e1), + U64_C (0xb04e2ca616165816), U64_C (0xcdd274f73a3ae83a), + U64_C (0x6fd0d2066969b969), U64_C (0x482d124109092409), + U64_C (0xa7ade0d77070dd70), U64_C (0xd954716fb6b6e2b6), + U64_C (0xceb7bd1ed0d067d0), U64_C (0x3b7ec7d6eded93ed), + U64_C (0x2edb85e2cccc17cc), U64_C (0x2a57846842421542), + U64_C (0xb4c22d2c98985a98), U64_C (0x490e55eda4a4aaa4), + U64_C (0x5d8850752828a028), U64_C (0xda31b8865c5c6d5c), + U64_C (0x933fed6bf8f8c7f8), U64_C (0x44a411c286862286), + }; + +static const u64 C5[256] = + { + U64_C (0x18c07830d8181860), U64_C (0x2305af462623238c), + U64_C (0xc67ef991b8c6c63f), U64_C (0xe8136fcdfbe8e887), + U64_C (0x874ca113cb878726), U64_C (0xb8a9626d11b8b8da), + U64_C (0x0108050209010104), U64_C (0x4f426e9e0d4f4f21), + U64_C (0x36adee6c9b3636d8), U64_C (0xa6590451ffa6a6a2), + U64_C (0xd2debdb90cd2d26f), U64_C (0xf5fb06f70ef5f5f3), + U64_C (0x79ef80f2967979f9), U64_C (0x6f5fcede306f6fa1), + U64_C (0x91fcef3f6d91917e), U64_C (0x52aa07a4f8525255), + U64_C (0x6027fdc04760609d), U64_C (0xbc89766535bcbcca), + U64_C (0x9baccd2b379b9b56), U64_C (0x8e048c018a8e8e02), + U64_C (0xa371155bd2a3a3b6), U64_C (0x0c603c186c0c0c30), + U64_C (0x7bff8af6847b7bf1), U64_C (0x35b5e16a803535d4), + U64_C (0x1de8693af51d1d74), U64_C (0xe05347ddb3e0e0a7), + U64_C (0xd7f6acb321d7d77b), U64_C (0xc25eed999cc2c22f), + U64_C (0x2e6d965c432e2eb8), U64_C (0x4b627a96294b4b31), + U64_C (0xfea321e15dfefedf), U64_C (0x578216aed5575741), + U64_C (0x15a8412abd151554), U64_C (0x779fb6eee87777c1), + U64_C (0x37a5eb6e923737dc), U64_C (0xe57b56d79ee5e5b3), + U64_C (0x9f8cd923139f9f46), U64_C (0xf0d317fd23f0f0e7), + U64_C (0x4a6a7f94204a4a35), U64_C (0xda9e95a944dada4f), + U64_C (0x58fa25b0a258587d), U64_C (0xc906ca8fcfc9c903), + U64_C (0x29558d527c2929a4), U64_C (0x0a5022145a0a0a28), + U64_C (0xb1e14f7f50b1b1fe), U64_C (0xa0691a5dc9a0a0ba), + U64_C (0x6b7fdad6146b6bb1), U64_C (0x855cab17d985852e), + U64_C (0xbd8173673cbdbdce), U64_C (0x5dd234ba8f5d5d69), + U64_C (0x1080502090101040), U64_C (0xf4f303f507f4f4f7), + U64_C (0xcb16c08bddcbcb0b), U64_C (0x3eedc67cd33e3ef8), + U64_C (0x0528110a2d050514), U64_C (0x671fe6ce78676781), + U64_C (0xe47353d597e4e4b7), U64_C (0x2725bb4e0227279c), + U64_C (0x4132588273414119), U64_C (0x8b2c9d0ba78b8b16), + U64_C (0xa7510153f6a7a7a6), U64_C (0x7dcf94fab27d7de9), + U64_C (0x95dcfb374995956e), U64_C (0xd88e9fad56d8d847), + U64_C (0xfb8b30eb70fbfbcb), U64_C (0xee2371c1cdeeee9f), + U64_C (0x7cc791f8bb7c7ced), U64_C (0x6617e3cc71666685), + U64_C (0xdda68ea77bdddd53), U64_C (0x17b84b2eaf17175c), + U64_C (0x4702468e45474701), U64_C (0x9e84dc211a9e9e42), + U64_C (0xca1ec589d4caca0f), U64_C (0x2d75995a582d2db4), + U64_C (0xbf9179632ebfbfc6), U64_C (0x07381b0e3f07071c), + U64_C (0xad012347acadad8e), U64_C (0x5aea2fb4b05a5a75), + U64_C (0x836cb51bef838336), U64_C (0x3385ff66b63333cc), + U64_C (0x633ff2c65c636391), U64_C (0x02100a0412020208), + U64_C (0xaa39384993aaaa92), U64_C (0x71afa8e2de7171d9), + U64_C (0xc80ecf8dc6c8c807), U64_C (0x19c87d32d1191964), + U64_C (0x497270923b494939), U64_C (0xd9869aaf5fd9d943), + U64_C (0xf2c31df931f2f2ef), U64_C (0xe34b48dba8e3e3ab), + U64_C (0x5be22ab6b95b5b71), U64_C (0x8834920dbc88881a), + U64_C (0x9aa4c8293e9a9a52), U64_C (0x262dbe4c0b262698), + U64_C (0x328dfa64bf3232c8), U64_C (0xb0e94a7d59b0b0fa), + U64_C (0xe91b6acff2e9e983), U64_C (0x0f78331e770f0f3c), + U64_C (0xd5e6a6b733d5d573), U64_C (0x8074ba1df480803a), + U64_C (0xbe997c6127bebec2), U64_C (0xcd26de87ebcdcd13), + U64_C (0x34bde468893434d0), U64_C (0x487a75903248483d), + U64_C (0xffab24e354ffffdb), U64_C (0x7af78ff48d7a7af5), + U64_C (0x90f4ea3d6490907a), U64_C (0x5fc23ebe9d5f5f61), + U64_C (0x201da0403d202080), U64_C (0x6867d5d00f6868bd), + U64_C (0x1ad07234ca1a1a68), U64_C (0xae192c41b7aeae82), + U64_C (0xb4c95e757db4b4ea), U64_C (0x549a19a8ce54544d), + U64_C (0x93ece53b7f939376), U64_C (0x220daa442f222288), + U64_C (0x6407e9c86364648d), U64_C (0xf1db12ff2af1f1e3), + U64_C (0x73bfa2e6cc7373d1), U64_C (0x12905a2482121248), + U64_C (0x403a5d807a40401d), U64_C (0x0840281048080820), + U64_C (0xc356e89b95c3c32b), U64_C (0xec337bc5dfecec97), + U64_C (0xdb9690ab4ddbdb4b), U64_C (0xa1611f5fc0a1a1be), + U64_C (0x8d1c8307918d8d0e), U64_C (0x3df5c97ac83d3df4), + U64_C (0x97ccf1335b979766), U64_C (0x0000000000000000), + U64_C (0xcf36d483f9cfcf1b), U64_C (0x2b4587566e2b2bac), + U64_C (0x7697b3ece17676c5), U64_C (0x8264b019e6828232), + U64_C (0xd6fea9b128d6d67f), U64_C (0x1bd87736c31b1b6c), + U64_C (0xb5c15b7774b5b5ee), U64_C (0xaf112943beafaf86), + U64_C (0x6a77dfd41d6a6ab5), U64_C (0x50ba0da0ea50505d), + U64_C (0x45124c8a57454509), U64_C (0xf3cb18fb38f3f3eb), + U64_C (0x309df060ad3030c0), U64_C (0xef2b74c3c4efef9b), + U64_C (0x3fe5c37eda3f3ffc), U64_C (0x55921caac7555549), + U64_C (0xa2791059dba2a2b2), U64_C (0xea0365c9e9eaea8f), + U64_C (0x650fecca6a656589), U64_C (0xbab9686903babad2), + U64_C (0x2f65935e4a2f2fbc), U64_C (0xc04ee79d8ec0c027), + U64_C (0xdebe81a160dede5f), U64_C (0x1ce06c38fc1c1c70), + U64_C (0xfdbb2ee746fdfdd3), U64_C (0x4d52649a1f4d4d29), + U64_C (0x92e4e03976929272), U64_C (0x758fbceafa7575c9), + U64_C (0x06301e0c36060618), U64_C (0x8a249809ae8a8a12), + U64_C (0xb2f940794bb2b2f2), U64_C (0xe66359d185e6e6bf), + U64_C (0x0e70361c7e0e0e38), U64_C (0x1ff8633ee71f1f7c), + U64_C (0x6237f7c455626295), U64_C (0xd4eea3b53ad4d477), + U64_C (0xa829324d81a8a89a), U64_C (0x96c4f43152969662), + U64_C (0xf99b3aef62f9f9c3), U64_C (0xc566f697a3c5c533), + U64_C (0x2535b14a10252594), U64_C (0x59f220b2ab595979), + U64_C (0x8454ae15d084842a), U64_C (0x72b7a7e4c57272d5), + U64_C (0x39d5dd72ec3939e4), U64_C (0x4c5a6198164c4c2d), + U64_C (0x5eca3bbc945e5e65), U64_C (0x78e785f09f7878fd), + U64_C (0x38ddd870e53838e0), U64_C (0x8c148605988c8c0a), + U64_C (0xd1c6b2bf17d1d163), U64_C (0xa5410b57e4a5a5ae), + U64_C (0xe2434dd9a1e2e2af), U64_C (0x612ff8c24e616199), + U64_C (0xb3f1457b42b3b3f6), U64_C (0x2115a54234212184), + U64_C (0x9c94d625089c9c4a), U64_C (0x1ef0663cee1e1e78), + U64_C (0x4322528661434311), U64_C (0xc776fc93b1c7c73b), + U64_C (0xfcb32be54ffcfcd7), U64_C (0x0420140824040410), + U64_C (0x51b208a2e3515159), U64_C (0x99bcc72f2599995e), + U64_C (0x6d4fc4da226d6da9), U64_C (0x0d68391a650d0d34), + U64_C (0xfa8335e979fafacf), U64_C (0xdfb684a369dfdf5b), + U64_C (0x7ed79bfca97e7ee5), U64_C (0x243db44819242490), + U64_C (0x3bc5d776fe3b3bec), U64_C (0xab313d4b9aabab96), + U64_C (0xce3ed181f0cece1f), U64_C (0x1188552299111144), + U64_C (0x8f0c8903838f8f06), U64_C (0x4e4a6b9c044e4e25), + U64_C (0xb7d1517366b7b7e6), U64_C (0xeb0b60cbe0ebeb8b), + U64_C (0x3cfdcc78c13c3cf0), U64_C (0x817cbf1ffd81813e), + U64_C (0x94d4fe354094946a), U64_C (0xf7eb0cf31cf7f7fb), + U64_C (0xb9a1676f18b9b9de), U64_C (0x13985f268b13134c), + U64_C (0x2c7d9c58512c2cb0), U64_C (0xd3d6b8bb05d3d36b), + U64_C (0xe76b5cd38ce7e7bb), U64_C (0x6e57cbdc396e6ea5), + U64_C (0xc46ef395aac4c437), U64_C (0x03180f061b03030c), + U64_C (0x568a13acdc565645), U64_C (0x441a49885e44440d), + U64_C (0x7fdf9efea07f7fe1), U64_C (0xa921374f88a9a99e), + U64_C (0x2a4d8254672a2aa8), U64_C (0xbbb16d6b0abbbbd6), + U64_C (0xc146e29f87c1c123), U64_C (0x53a202a6f1535351), + U64_C (0xdcae8ba572dcdc57), U64_C (0x0b582716530b0b2c), + U64_C (0x9d9cd327019d9d4e), U64_C (0x6c47c1d82b6c6cad), + U64_C (0x3195f562a43131c4), U64_C (0x7487b9e8f37474cd), + U64_C (0xf6e309f115f6f6ff), U64_C (0x460a438c4c464605), + U64_C (0xac092645a5acac8a), U64_C (0x893c970fb589891e), + U64_C (0x14a04428b4141450), U64_C (0xe15b42dfbae1e1a3), + U64_C (0x16b04e2ca6161658), U64_C (0x3acdd274f73a3ae8), + U64_C (0x696fd0d2066969b9), U64_C (0x09482d1241090924), + U64_C (0x70a7ade0d77070dd), U64_C (0xb6d954716fb6b6e2), + U64_C (0xd0ceb7bd1ed0d067), U64_C (0xed3b7ec7d6eded93), + U64_C (0xcc2edb85e2cccc17), U64_C (0x422a578468424215), + U64_C (0x98b4c22d2c98985a), U64_C (0xa4490e55eda4a4aa), + U64_C (0x285d8850752828a0), U64_C (0x5cda31b8865c5c6d), + U64_C (0xf8933fed6bf8f8c7), U64_C (0x8644a411c2868622), + }; + +static const u64 C6[256] = + { + U64_C (0x6018c07830d81818), U64_C (0x8c2305af46262323), + U64_C (0x3fc67ef991b8c6c6), U64_C (0x87e8136fcdfbe8e8), + U64_C (0x26874ca113cb8787), U64_C (0xdab8a9626d11b8b8), + U64_C (0x0401080502090101), U64_C (0x214f426e9e0d4f4f), + U64_C (0xd836adee6c9b3636), U64_C (0xa2a6590451ffa6a6), + U64_C (0x6fd2debdb90cd2d2), U64_C (0xf3f5fb06f70ef5f5), + U64_C (0xf979ef80f2967979), U64_C (0xa16f5fcede306f6f), + U64_C (0x7e91fcef3f6d9191), U64_C (0x5552aa07a4f85252), + U64_C (0x9d6027fdc0476060), U64_C (0xcabc89766535bcbc), + U64_C (0x569baccd2b379b9b), U64_C (0x028e048c018a8e8e), + U64_C (0xb6a371155bd2a3a3), U64_C (0x300c603c186c0c0c), + U64_C (0xf17bff8af6847b7b), U64_C (0xd435b5e16a803535), + U64_C (0x741de8693af51d1d), U64_C (0xa7e05347ddb3e0e0), + U64_C (0x7bd7f6acb321d7d7), U64_C (0x2fc25eed999cc2c2), + U64_C (0xb82e6d965c432e2e), U64_C (0x314b627a96294b4b), + U64_C (0xdffea321e15dfefe), U64_C (0x41578216aed55757), + U64_C (0x5415a8412abd1515), U64_C (0xc1779fb6eee87777), + U64_C (0xdc37a5eb6e923737), U64_C (0xb3e57b56d79ee5e5), + U64_C (0x469f8cd923139f9f), U64_C (0xe7f0d317fd23f0f0), + U64_C (0x354a6a7f94204a4a), U64_C (0x4fda9e95a944dada), + U64_C (0x7d58fa25b0a25858), U64_C (0x03c906ca8fcfc9c9), + U64_C (0xa429558d527c2929), U64_C (0x280a5022145a0a0a), + U64_C (0xfeb1e14f7f50b1b1), U64_C (0xbaa0691a5dc9a0a0), + U64_C (0xb16b7fdad6146b6b), U64_C (0x2e855cab17d98585), + U64_C (0xcebd8173673cbdbd), U64_C (0x695dd234ba8f5d5d), + U64_C (0x4010805020901010), U64_C (0xf7f4f303f507f4f4), + U64_C (0x0bcb16c08bddcbcb), U64_C (0xf83eedc67cd33e3e), + U64_C (0x140528110a2d0505), U64_C (0x81671fe6ce786767), + U64_C (0xb7e47353d597e4e4), U64_C (0x9c2725bb4e022727), + U64_C (0x1941325882734141), U64_C (0x168b2c9d0ba78b8b), + U64_C (0xa6a7510153f6a7a7), U64_C (0xe97dcf94fab27d7d), + U64_C (0x6e95dcfb37499595), U64_C (0x47d88e9fad56d8d8), + U64_C (0xcbfb8b30eb70fbfb), U64_C (0x9fee2371c1cdeeee), + U64_C (0xed7cc791f8bb7c7c), U64_C (0x856617e3cc716666), + U64_C (0x53dda68ea77bdddd), U64_C (0x5c17b84b2eaf1717), + U64_C (0x014702468e454747), U64_C (0x429e84dc211a9e9e), + U64_C (0x0fca1ec589d4caca), U64_C (0xb42d75995a582d2d), + U64_C (0xc6bf9179632ebfbf), U64_C (0x1c07381b0e3f0707), + U64_C (0x8ead012347acadad), U64_C (0x755aea2fb4b05a5a), + U64_C (0x36836cb51bef8383), U64_C (0xcc3385ff66b63333), + U64_C (0x91633ff2c65c6363), U64_C (0x0802100a04120202), + U64_C (0x92aa39384993aaaa), U64_C (0xd971afa8e2de7171), + U64_C (0x07c80ecf8dc6c8c8), U64_C (0x6419c87d32d11919), + U64_C (0x39497270923b4949), U64_C (0x43d9869aaf5fd9d9), + U64_C (0xeff2c31df931f2f2), U64_C (0xabe34b48dba8e3e3), + U64_C (0x715be22ab6b95b5b), U64_C (0x1a8834920dbc8888), + U64_C (0x529aa4c8293e9a9a), U64_C (0x98262dbe4c0b2626), + U64_C (0xc8328dfa64bf3232), U64_C (0xfab0e94a7d59b0b0), + U64_C (0x83e91b6acff2e9e9), U64_C (0x3c0f78331e770f0f), + U64_C (0x73d5e6a6b733d5d5), U64_C (0x3a8074ba1df48080), + U64_C (0xc2be997c6127bebe), U64_C (0x13cd26de87ebcdcd), + U64_C (0xd034bde468893434), U64_C (0x3d487a7590324848), + U64_C (0xdbffab24e354ffff), U64_C (0xf57af78ff48d7a7a), + U64_C (0x7a90f4ea3d649090), U64_C (0x615fc23ebe9d5f5f), + U64_C (0x80201da0403d2020), U64_C (0xbd6867d5d00f6868), + U64_C (0x681ad07234ca1a1a), U64_C (0x82ae192c41b7aeae), + U64_C (0xeab4c95e757db4b4), U64_C (0x4d549a19a8ce5454), + U64_C (0x7693ece53b7f9393), U64_C (0x88220daa442f2222), + U64_C (0x8d6407e9c8636464), U64_C (0xe3f1db12ff2af1f1), + U64_C (0xd173bfa2e6cc7373), U64_C (0x4812905a24821212), + U64_C (0x1d403a5d807a4040), U64_C (0x2008402810480808), + U64_C (0x2bc356e89b95c3c3), U64_C (0x97ec337bc5dfecec), + U64_C (0x4bdb9690ab4ddbdb), U64_C (0xbea1611f5fc0a1a1), + U64_C (0x0e8d1c8307918d8d), U64_C (0xf43df5c97ac83d3d), + U64_C (0x6697ccf1335b9797), U64_C (0x0000000000000000), + U64_C (0x1bcf36d483f9cfcf), U64_C (0xac2b4587566e2b2b), + U64_C (0xc57697b3ece17676), U64_C (0x328264b019e68282), + U64_C (0x7fd6fea9b128d6d6), U64_C (0x6c1bd87736c31b1b), + U64_C (0xeeb5c15b7774b5b5), U64_C (0x86af112943beafaf), + U64_C (0xb56a77dfd41d6a6a), U64_C (0x5d50ba0da0ea5050), + U64_C (0x0945124c8a574545), U64_C (0xebf3cb18fb38f3f3), + U64_C (0xc0309df060ad3030), U64_C (0x9bef2b74c3c4efef), + U64_C (0xfc3fe5c37eda3f3f), U64_C (0x4955921caac75555), + U64_C (0xb2a2791059dba2a2), U64_C (0x8fea0365c9e9eaea), + U64_C (0x89650fecca6a6565), U64_C (0xd2bab9686903baba), + U64_C (0xbc2f65935e4a2f2f), U64_C (0x27c04ee79d8ec0c0), + U64_C (0x5fdebe81a160dede), U64_C (0x701ce06c38fc1c1c), + U64_C (0xd3fdbb2ee746fdfd), U64_C (0x294d52649a1f4d4d), + U64_C (0x7292e4e039769292), U64_C (0xc9758fbceafa7575), + U64_C (0x1806301e0c360606), U64_C (0x128a249809ae8a8a), + U64_C (0xf2b2f940794bb2b2), U64_C (0xbfe66359d185e6e6), + U64_C (0x380e70361c7e0e0e), U64_C (0x7c1ff8633ee71f1f), + U64_C (0x956237f7c4556262), U64_C (0x77d4eea3b53ad4d4), + U64_C (0x9aa829324d81a8a8), U64_C (0x6296c4f431529696), + U64_C (0xc3f99b3aef62f9f9), U64_C (0x33c566f697a3c5c5), + U64_C (0x942535b14a102525), U64_C (0x7959f220b2ab5959), + U64_C (0x2a8454ae15d08484), U64_C (0xd572b7a7e4c57272), + U64_C (0xe439d5dd72ec3939), U64_C (0x2d4c5a6198164c4c), + U64_C (0x655eca3bbc945e5e), U64_C (0xfd78e785f09f7878), + U64_C (0xe038ddd870e53838), U64_C (0x0a8c148605988c8c), + U64_C (0x63d1c6b2bf17d1d1), U64_C (0xaea5410b57e4a5a5), + U64_C (0xafe2434dd9a1e2e2), U64_C (0x99612ff8c24e6161), + U64_C (0xf6b3f1457b42b3b3), U64_C (0x842115a542342121), + U64_C (0x4a9c94d625089c9c), U64_C (0x781ef0663cee1e1e), + U64_C (0x1143225286614343), U64_C (0x3bc776fc93b1c7c7), + U64_C (0xd7fcb32be54ffcfc), U64_C (0x1004201408240404), + U64_C (0x5951b208a2e35151), U64_C (0x5e99bcc72f259999), + U64_C (0xa96d4fc4da226d6d), U64_C (0x340d68391a650d0d), + U64_C (0xcffa8335e979fafa), U64_C (0x5bdfb684a369dfdf), + U64_C (0xe57ed79bfca97e7e), U64_C (0x90243db448192424), + U64_C (0xec3bc5d776fe3b3b), U64_C (0x96ab313d4b9aabab), + U64_C (0x1fce3ed181f0cece), U64_C (0x4411885522991111), + U64_C (0x068f0c8903838f8f), U64_C (0x254e4a6b9c044e4e), + U64_C (0xe6b7d1517366b7b7), U64_C (0x8beb0b60cbe0ebeb), + U64_C (0xf03cfdcc78c13c3c), U64_C (0x3e817cbf1ffd8181), + U64_C (0x6a94d4fe35409494), U64_C (0xfbf7eb0cf31cf7f7), + U64_C (0xdeb9a1676f18b9b9), U64_C (0x4c13985f268b1313), + U64_C (0xb02c7d9c58512c2c), U64_C (0x6bd3d6b8bb05d3d3), + U64_C (0xbbe76b5cd38ce7e7), U64_C (0xa56e57cbdc396e6e), + U64_C (0x37c46ef395aac4c4), U64_C (0x0c03180f061b0303), + U64_C (0x45568a13acdc5656), U64_C (0x0d441a49885e4444), + U64_C (0xe17fdf9efea07f7f), U64_C (0x9ea921374f88a9a9), + U64_C (0xa82a4d8254672a2a), U64_C (0xd6bbb16d6b0abbbb), + U64_C (0x23c146e29f87c1c1), U64_C (0x5153a202a6f15353), + U64_C (0x57dcae8ba572dcdc), U64_C (0x2c0b582716530b0b), + U64_C (0x4e9d9cd327019d9d), U64_C (0xad6c47c1d82b6c6c), + U64_C (0xc43195f562a43131), U64_C (0xcd7487b9e8f37474), + U64_C (0xfff6e309f115f6f6), U64_C (0x05460a438c4c4646), + U64_C (0x8aac092645a5acac), U64_C (0x1e893c970fb58989), + U64_C (0x5014a04428b41414), U64_C (0xa3e15b42dfbae1e1), + U64_C (0x5816b04e2ca61616), U64_C (0xe83acdd274f73a3a), + U64_C (0xb9696fd0d2066969), U64_C (0x2409482d12410909), + U64_C (0xdd70a7ade0d77070), U64_C (0xe2b6d954716fb6b6), + U64_C (0x67d0ceb7bd1ed0d0), U64_C (0x93ed3b7ec7d6eded), + U64_C (0x17cc2edb85e2cccc), U64_C (0x15422a5784684242), + U64_C (0x5a98b4c22d2c9898), U64_C (0xaaa4490e55eda4a4), + U64_C (0xa0285d8850752828), U64_C (0x6d5cda31b8865c5c), + U64_C (0xc7f8933fed6bf8f8), U64_C (0x228644a411c28686), + }; + +static const u64 C7[256] = + { + U64_C (0x186018c07830d818), U64_C (0x238c2305af462623), + U64_C (0xc63fc67ef991b8c6), U64_C (0xe887e8136fcdfbe8), + U64_C (0x8726874ca113cb87), U64_C (0xb8dab8a9626d11b8), + U64_C (0x0104010805020901), U64_C (0x4f214f426e9e0d4f), + U64_C (0x36d836adee6c9b36), U64_C (0xa6a2a6590451ffa6), + U64_C (0xd26fd2debdb90cd2), U64_C (0xf5f3f5fb06f70ef5), + U64_C (0x79f979ef80f29679), U64_C (0x6fa16f5fcede306f), + U64_C (0x917e91fcef3f6d91), U64_C (0x525552aa07a4f852), + U64_C (0x609d6027fdc04760), U64_C (0xbccabc89766535bc), + U64_C (0x9b569baccd2b379b), U64_C (0x8e028e048c018a8e), + U64_C (0xa3b6a371155bd2a3), U64_C (0x0c300c603c186c0c), + U64_C (0x7bf17bff8af6847b), U64_C (0x35d435b5e16a8035), + U64_C (0x1d741de8693af51d), U64_C (0xe0a7e05347ddb3e0), + U64_C (0xd77bd7f6acb321d7), U64_C (0xc22fc25eed999cc2), + U64_C (0x2eb82e6d965c432e), U64_C (0x4b314b627a96294b), + U64_C (0xfedffea321e15dfe), U64_C (0x5741578216aed557), + U64_C (0x155415a8412abd15), U64_C (0x77c1779fb6eee877), + U64_C (0x37dc37a5eb6e9237), U64_C (0xe5b3e57b56d79ee5), + U64_C (0x9f469f8cd923139f), U64_C (0xf0e7f0d317fd23f0), + U64_C (0x4a354a6a7f94204a), U64_C (0xda4fda9e95a944da), + U64_C (0x587d58fa25b0a258), U64_C (0xc903c906ca8fcfc9), + U64_C (0x29a429558d527c29), U64_C (0x0a280a5022145a0a), + U64_C (0xb1feb1e14f7f50b1), U64_C (0xa0baa0691a5dc9a0), + U64_C (0x6bb16b7fdad6146b), U64_C (0x852e855cab17d985), + U64_C (0xbdcebd8173673cbd), U64_C (0x5d695dd234ba8f5d), + U64_C (0x1040108050209010), U64_C (0xf4f7f4f303f507f4), + U64_C (0xcb0bcb16c08bddcb), U64_C (0x3ef83eedc67cd33e), + U64_C (0x05140528110a2d05), U64_C (0x6781671fe6ce7867), + U64_C (0xe4b7e47353d597e4), U64_C (0x279c2725bb4e0227), + U64_C (0x4119413258827341), U64_C (0x8b168b2c9d0ba78b), + U64_C (0xa7a6a7510153f6a7), U64_C (0x7de97dcf94fab27d), + U64_C (0x956e95dcfb374995), U64_C (0xd847d88e9fad56d8), + U64_C (0xfbcbfb8b30eb70fb), U64_C (0xee9fee2371c1cdee), + U64_C (0x7ced7cc791f8bb7c), U64_C (0x66856617e3cc7166), + U64_C (0xdd53dda68ea77bdd), U64_C (0x175c17b84b2eaf17), + U64_C (0x47014702468e4547), U64_C (0x9e429e84dc211a9e), + U64_C (0xca0fca1ec589d4ca), U64_C (0x2db42d75995a582d), + U64_C (0xbfc6bf9179632ebf), U64_C (0x071c07381b0e3f07), + U64_C (0xad8ead012347acad), U64_C (0x5a755aea2fb4b05a), + U64_C (0x8336836cb51bef83), U64_C (0x33cc3385ff66b633), + U64_C (0x6391633ff2c65c63), U64_C (0x020802100a041202), + U64_C (0xaa92aa39384993aa), U64_C (0x71d971afa8e2de71), + U64_C (0xc807c80ecf8dc6c8), U64_C (0x196419c87d32d119), + U64_C (0x4939497270923b49), U64_C (0xd943d9869aaf5fd9), + U64_C (0xf2eff2c31df931f2), U64_C (0xe3abe34b48dba8e3), + U64_C (0x5b715be22ab6b95b), U64_C (0x881a8834920dbc88), + U64_C (0x9a529aa4c8293e9a), U64_C (0x2698262dbe4c0b26), + U64_C (0x32c8328dfa64bf32), U64_C (0xb0fab0e94a7d59b0), + U64_C (0xe983e91b6acff2e9), U64_C (0x0f3c0f78331e770f), + U64_C (0xd573d5e6a6b733d5), U64_C (0x803a8074ba1df480), + U64_C (0xbec2be997c6127be), U64_C (0xcd13cd26de87ebcd), + U64_C (0x34d034bde4688934), U64_C (0x483d487a75903248), + U64_C (0xffdbffab24e354ff), U64_C (0x7af57af78ff48d7a), + U64_C (0x907a90f4ea3d6490), U64_C (0x5f615fc23ebe9d5f), + U64_C (0x2080201da0403d20), U64_C (0x68bd6867d5d00f68), + U64_C (0x1a681ad07234ca1a), U64_C (0xae82ae192c41b7ae), + U64_C (0xb4eab4c95e757db4), U64_C (0x544d549a19a8ce54), + U64_C (0x937693ece53b7f93), U64_C (0x2288220daa442f22), + U64_C (0x648d6407e9c86364), U64_C (0xf1e3f1db12ff2af1), + U64_C (0x73d173bfa2e6cc73), U64_C (0x124812905a248212), + U64_C (0x401d403a5d807a40), U64_C (0x0820084028104808), + U64_C (0xc32bc356e89b95c3), U64_C (0xec97ec337bc5dfec), + U64_C (0xdb4bdb9690ab4ddb), U64_C (0xa1bea1611f5fc0a1), + U64_C (0x8d0e8d1c8307918d), U64_C (0x3df43df5c97ac83d), + U64_C (0x976697ccf1335b97), U64_C (0x0000000000000000), + U64_C (0xcf1bcf36d483f9cf), U64_C (0x2bac2b4587566e2b), + U64_C (0x76c57697b3ece176), U64_C (0x82328264b019e682), + U64_C (0xd67fd6fea9b128d6), U64_C (0x1b6c1bd87736c31b), + U64_C (0xb5eeb5c15b7774b5), U64_C (0xaf86af112943beaf), + U64_C (0x6ab56a77dfd41d6a), U64_C (0x505d50ba0da0ea50), + U64_C (0x450945124c8a5745), U64_C (0xf3ebf3cb18fb38f3), + U64_C (0x30c0309df060ad30), U64_C (0xef9bef2b74c3c4ef), + U64_C (0x3ffc3fe5c37eda3f), U64_C (0x554955921caac755), + U64_C (0xa2b2a2791059dba2), U64_C (0xea8fea0365c9e9ea), + U64_C (0x6589650fecca6a65), U64_C (0xbad2bab9686903ba), + U64_C (0x2fbc2f65935e4a2f), U64_C (0xc027c04ee79d8ec0), + U64_C (0xde5fdebe81a160de), U64_C (0x1c701ce06c38fc1c), + U64_C (0xfdd3fdbb2ee746fd), U64_C (0x4d294d52649a1f4d), + U64_C (0x927292e4e0397692), U64_C (0x75c9758fbceafa75), + U64_C (0x061806301e0c3606), U64_C (0x8a128a249809ae8a), + U64_C (0xb2f2b2f940794bb2), U64_C (0xe6bfe66359d185e6), + U64_C (0x0e380e70361c7e0e), U64_C (0x1f7c1ff8633ee71f), + U64_C (0x62956237f7c45562), U64_C (0xd477d4eea3b53ad4), + U64_C (0xa89aa829324d81a8), U64_C (0x966296c4f4315296), + U64_C (0xf9c3f99b3aef62f9), U64_C (0xc533c566f697a3c5), + U64_C (0x25942535b14a1025), U64_C (0x597959f220b2ab59), + U64_C (0x842a8454ae15d084), U64_C (0x72d572b7a7e4c572), + U64_C (0x39e439d5dd72ec39), U64_C (0x4c2d4c5a6198164c), + U64_C (0x5e655eca3bbc945e), U64_C (0x78fd78e785f09f78), + U64_C (0x38e038ddd870e538), U64_C (0x8c0a8c148605988c), + U64_C (0xd163d1c6b2bf17d1), U64_C (0xa5aea5410b57e4a5), + U64_C (0xe2afe2434dd9a1e2), U64_C (0x6199612ff8c24e61), + U64_C (0xb3f6b3f1457b42b3), U64_C (0x21842115a5423421), + U64_C (0x9c4a9c94d625089c), U64_C (0x1e781ef0663cee1e), + U64_C (0x4311432252866143), U64_C (0xc73bc776fc93b1c7), + U64_C (0xfcd7fcb32be54ffc), U64_C (0x0410042014082404), + U64_C (0x515951b208a2e351), U64_C (0x995e99bcc72f2599), + U64_C (0x6da96d4fc4da226d), U64_C (0x0d340d68391a650d), + U64_C (0xfacffa8335e979fa), U64_C (0xdf5bdfb684a369df), + U64_C (0x7ee57ed79bfca97e), U64_C (0x2490243db4481924), + U64_C (0x3bec3bc5d776fe3b), U64_C (0xab96ab313d4b9aab), + U64_C (0xce1fce3ed181f0ce), U64_C (0x1144118855229911), + U64_C (0x8f068f0c8903838f), U64_C (0x4e254e4a6b9c044e), + U64_C (0xb7e6b7d1517366b7), U64_C (0xeb8beb0b60cbe0eb), + U64_C (0x3cf03cfdcc78c13c), U64_C (0x813e817cbf1ffd81), + U64_C (0x946a94d4fe354094), U64_C (0xf7fbf7eb0cf31cf7), + U64_C (0xb9deb9a1676f18b9), U64_C (0x134c13985f268b13), + U64_C (0x2cb02c7d9c58512c), U64_C (0xd36bd3d6b8bb05d3), + U64_C (0xe7bbe76b5cd38ce7), U64_C (0x6ea56e57cbdc396e), + U64_C (0xc437c46ef395aac4), U64_C (0x030c03180f061b03), + U64_C (0x5645568a13acdc56), U64_C (0x440d441a49885e44), + U64_C (0x7fe17fdf9efea07f), U64_C (0xa99ea921374f88a9), + U64_C (0x2aa82a4d8254672a), U64_C (0xbbd6bbb16d6b0abb), + U64_C (0xc123c146e29f87c1), U64_C (0x535153a202a6f153), + U64_C (0xdc57dcae8ba572dc), U64_C (0x0b2c0b582716530b), + U64_C (0x9d4e9d9cd327019d), U64_C (0x6cad6c47c1d82b6c), + U64_C (0x31c43195f562a431), U64_C (0x74cd7487b9e8f374), + U64_C (0xf6fff6e309f115f6), U64_C (0x4605460a438c4c46), + U64_C (0xac8aac092645a5ac), U64_C (0x891e893c970fb589), + U64_C (0x145014a04428b414), U64_C (0xe1a3e15b42dfbae1), + U64_C (0x165816b04e2ca616), U64_C (0x3ae83acdd274f73a), + U64_C (0x69b9696fd0d20669), U64_C (0x092409482d124109), + U64_C (0x70dd70a7ade0d770), U64_C (0xb6e2b6d954716fb6), + U64_C (0xd067d0ceb7bd1ed0), U64_C (0xed93ed3b7ec7d6ed), + U64_C (0xcc17cc2edb85e2cc), U64_C (0x4215422a57846842), + U64_C (0x985a98b4c22d2c98), U64_C (0xa4aaa4490e55eda4), + U64_C (0x28a0285d88507528), U64_C (0x5c6d5cda31b8865c), + U64_C (0xf8c7f8933fed6bf8), U64_C (0x86228644a411c286), + }; + + + +static void +whirlpool_init (void *ctx) +{ + whirlpool_context_t *context = ctx; + + memset (context, 0, sizeof (*context)); +} + + +/* + * Transform block. + */ +static void +whirlpool_transform (whirlpool_context_t *context, const unsigned char *data) +{ + whirlpool_block_t data_block; + whirlpool_block_t key; + whirlpool_block_t state; + whirlpool_block_t block; + unsigned int r; + unsigned int i; + + buffer_to_block (data, data_block, i); + block_copy (key, context->hash_state, i); + block_copy (state, context->hash_state, i); + block_xor (state, data_block, i); + + for (r = 0; r < R; r++) + { + /* Compute round key K^r. */ + + block[0] = (C0[(key[0] >> 56) & 0xFF] ^ C1[(key[7] >> 48) & 0xFF] ^ + C2[(key[6] >> 40) & 0xFF] ^ C3[(key[5] >> 32) & 0xFF] ^ + C4[(key[4] >> 24) & 0xFF] ^ C5[(key[3] >> 16) & 0xFF] ^ + C6[(key[2] >> 8) & 0xFF] ^ C7[(key[1] >> 0) & 0xFF] ^ rc[r]); + block[1] = (C0[(key[1] >> 56) & 0xFF] ^ C1[(key[0] >> 48) & 0xFF] ^ + C2[(key[7] >> 40) & 0xFF] ^ C3[(key[6] >> 32) & 0xFF] ^ + C4[(key[5] >> 24) & 0xFF] ^ C5[(key[4] >> 16) & 0xFF] ^ + C6[(key[3] >> 8) & 0xFF] ^ C7[(key[2] >> 0) & 0xFF]); + block[2] = (C0[(key[2] >> 56) & 0xFF] ^ C1[(key[1] >> 48) & 0xFF] ^ + C2[(key[0] >> 40) & 0xFF] ^ C3[(key[7] >> 32) & 0xFF] ^ + C4[(key[6] >> 24) & 0xFF] ^ C5[(key[5] >> 16) & 0xFF] ^ + C6[(key[4] >> 8) & 0xFF] ^ C7[(key[3] >> 0) & 0xFF]); + block[3] = (C0[(key[3] >> 56) & 0xFF] ^ C1[(key[2] >> 48) & 0xFF] ^ + C2[(key[1] >> 40) & 0xFF] ^ C3[(key[0] >> 32) & 0xFF] ^ + C4[(key[7] >> 24) & 0xFF] ^ C5[(key[6] >> 16) & 0xFF] ^ + C6[(key[5] >> 8) & 0xFF] ^ C7[(key[4] >> 0) & 0xFF]); + block[4] = (C0[(key[4] >> 56) & 0xFF] ^ C1[(key[3] >> 48) & 0xFF] ^ + C2[(key[2] >> 40) & 0xFF] ^ C3[(key[1] >> 32) & 0xFF] ^ + C4[(key[0] >> 24) & 0xFF] ^ C5[(key[7] >> 16) & 0xFF] ^ + C6[(key[6] >> 8) & 0xFF] ^ C7[(key[5] >> 0) & 0xFF]); + block[5] = (C0[(key[5] >> 56) & 0xFF] ^ C1[(key[4] >> 48) & 0xFF] ^ + C2[(key[3] >> 40) & 0xFF] ^ C3[(key[2] >> 32) & 0xFF] ^ + C4[(key[1] >> 24) & 0xFF] ^ C5[(key[0] >> 16) & 0xFF] ^ + C6[(key[7] >> 8) & 0xFF] ^ C7[(key[6] >> 0) & 0xFF]); + block[6] = (C0[(key[6] >> 56) & 0xFF] ^ C1[(key[5] >> 48) & 0xFF] ^ + C2[(key[4] >> 40) & 0xFF] ^ C3[(key[3] >> 32) & 0xFF] ^ + C4[(key[2] >> 24) & 0xFF] ^ C5[(key[1] >> 16) & 0xFF] ^ + C6[(key[0] >> 8) & 0xFF] ^ C7[(key[7] >> 0) & 0xFF]); + block[7] = (C0[(key[7] >> 56) & 0xFF] ^ C1[(key[6] >> 48) & 0xFF] ^ + C2[(key[5] >> 40) & 0xFF] ^ C3[(key[4] >> 32) & 0xFF] ^ + C4[(key[3] >> 24) & 0xFF] ^ C5[(key[2] >> 16) & 0xFF] ^ + C6[(key[1] >> 8) & 0xFF] ^ C7[(key[0] >> 0) & 0xFF]); + block_copy (key, block, i); + + /* Apply r-th round transformation. */ + + block[0] = (C0[(state[0] >> 56) & 0xFF] ^ C1[(state[7] >> 48) & 0xFF] ^ + C2[(state[6] >> 40) & 0xFF] ^ C3[(state[5] >> 32) & 0xFF] ^ + C4[(state[4] >> 24) & 0xFF] ^ C5[(state[3] >> 16) & 0xFF] ^ + C6[(state[2] >> 8) & 0xFF] ^ C7[(state[1] >> 0) & 0xFF] ^ key[0]); + block[1] = (C0[(state[1] >> 56) & 0xFF] ^ C1[(state[0] >> 48) & 0xFF] ^ + C2[(state[7] >> 40) & 0xFF] ^ C3[(state[6] >> 32) & 0xFF] ^ + C4[(state[5] >> 24) & 0xFF] ^ C5[(state[4] >> 16) & 0xFF] ^ + C6[(state[3] >> 8) & 0xFF] ^ C7[(state[2] >> 0) & 0xFF] ^ key[1]); + block[2] = (C0[(state[2] >> 56) & 0xFF] ^ C1[(state[1] >> 48) & 0xFF] ^ + C2[(state[0] >> 40) & 0xFF] ^ C3[(state[7] >> 32) & 0xFF] ^ + C4[(state[6] >> 24) & 0xFF] ^ C5[(state[5] >> 16) & 0xFF] ^ + C6[(state[4] >> 8) & 0xFF] ^ C7[(state[3] >> 0) & 0xFF] ^ key[2]); + block[3] = (C0[(state[3] >> 56) & 0xFF] ^ C1[(state[2] >> 48) & 0xFF] ^ + C2[(state[1] >> 40) & 0xFF] ^ C3[(state[0] >> 32) & 0xFF] ^ + C4[(state[7] >> 24) & 0xFF] ^ C5[(state[6] >> 16) & 0xFF] ^ + C6[(state[5] >> 8) & 0xFF] ^ C7[(state[4] >> 0) & 0xFF] ^ key[3]); + block[4] = (C0[(state[4] >> 56) & 0xFF] ^ C1[(state[3] >> 48) & 0xFF] ^ + C2[(state[2] >> 40) & 0xFF] ^ C3[(state[1] >> 32) & 0xFF] ^ + C4[(state[0] >> 24) & 0xFF] ^ C5[(state[7] >> 16) & 0xFF] ^ + C6[(state[6] >> 8) & 0xFF] ^ C7[(state[5] >> 0) & 0xFF] ^ key[4]); + block[5] = (C0[(state[5] >> 56) & 0xFF] ^ C1[(state[4] >> 48) & 0xFF] ^ + C2[(state[3] >> 40) & 0xFF] ^ C3[(state[2] >> 32) & 0xFF] ^ + C4[(state[1] >> 24) & 0xFF] ^ C5[(state[0] >> 16) & 0xFF] ^ + C6[(state[7] >> 8) & 0xFF] ^ C7[(state[6] >> 0) & 0xFF] ^ key[5]); + block[6] = (C0[(state[6] >> 56) & 0xFF] ^ C1[(state[5] >> 48) & 0xFF] ^ + C2[(state[4] >> 40) & 0xFF] ^ C3[(state[3] >> 32) & 0xFF] ^ + C4[(state[2] >> 24) & 0xFF] ^ C5[(state[1] >> 16) & 0xFF] ^ + C6[(state[0] >> 8) & 0xFF] ^ C7[(state[7] >> 0) & 0xFF] ^ key[6]); + block[7] = (C0[(state[7] >> 56) & 0xFF] ^ C1[(state[6] >> 48) & 0xFF] ^ + C2[(state[5] >> 40) & 0xFF] ^ C3[(state[4] >> 32) & 0xFF] ^ + C4[(state[3] >> 24) & 0xFF] ^ C5[(state[2] >> 16) & 0xFF] ^ + C6[(state[1] >> 8) & 0xFF] ^ C7[(state[0] >> 0) & 0xFF] ^ key[7]); + block_copy (state, block, i); + } + + /* Compression. */ + + block_xor (context->hash_state, data_block, i); + block_xor (context->hash_state, state, i); +} + +static void +whirlpool_add (whirlpool_context_t *context, + const void *buffer_arg, size_t buffer_n) +{ + const unsigned char *buffer = buffer_arg; + u64 buffer_size; + unsigned int carry; + unsigned int i; + + buffer_size = buffer_n; + + if (context->count == BLOCK_SIZE) + { + /* Flush the buffer. */ + whirlpool_transform (context, context->buffer); + /*_gcry_burn_stack (80+6*sizeof(void*));*/ /* FIXME */ + context->count = 0; + } + if (! buffer) + return; /* Nothing to add. */ + + if (context->count) + { + while (buffer_n && (context->count < BLOCK_SIZE)) + { + context->buffer[context->count++] = *buffer++; + buffer_n--; + } + whirlpool_add (context, NULL, 0); + if (!buffer_n) + /* Done. */ + return; + } + /*_gcry_burn_stack (80+6*sizeof(void*));*/ /* FIXME */ + + while (buffer_n >= BLOCK_SIZE) + { + whirlpool_transform (context, buffer); + context->count = 0; + buffer_n -= BLOCK_SIZE; + buffer += BLOCK_SIZE; + } + while (buffer_n && (context->count < BLOCK_SIZE)) + { + context->buffer[context->count++] = *buffer++; + buffer_n--; + } + + /* Update bit counter. */ + carry = 0; + buffer_size <<= 3; + for (i = 1; i <= 32; i++) + { + if (! (buffer_size || carry)) + break; + + carry += context->length[32 - i] + (buffer_size & 0xFF); + context->length[32 - i] = carry; + buffer_size >>= 8; + carry >>= 8; + } + gcry_assert (! (buffer_size || carry)); +} + +static void +whirlpool_write (void *ctx, const void *buffer, size_t buffer_n) +{ + whirlpool_context_t *context = ctx; + + whirlpool_add (context, buffer, buffer_n); +} + +static void +whirlpool_final (void *ctx) +{ + whirlpool_context_t *context = ctx; + unsigned int i; + + /* Flush. */ + whirlpool_add (context, NULL, 0); + + /* Pad. */ + context->buffer[context->count++] = 0x80; + + if (context->count > 32) + { + /* An extra block is necessary. */ + while (context->count < 64) + context->buffer[context->count++] = 0; + whirlpool_add (context, NULL, 0); + } + while (context->count < 32) + context->buffer[context->count++] = 0; + + /* Add length of message. */ + memcpy (context->buffer + context->count, context->length, 32); + context->count += 32; + whirlpool_add (context, NULL, 0); + + block_to_buffer (context->buffer, context->hash_state, i); +} + +static byte * +whirlpool_read (void *ctx) +{ + whirlpool_context_t *context = ctx; + + return context->buffer; +} + +gcry_md_spec_t _gcry_digest_spec_whirlpool = + { + "WHIRLPOOL", NULL, 0, NULL, 64, + whirlpool_init, whirlpool_write, whirlpool_final, whirlpool_read, + sizeof (whirlpool_context_t) + , +#ifdef GRUB_UTIL + .modname = "gcry_whirlpool", +#endif + .blocksize = 64 + }; + + +GRUB_MOD_INIT(gcry_whirlpool) +{ + COMPILE_TIME_ASSERT(sizeof (whirlpool_context_t) <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE); + grub_md_register (&_gcry_digest_spec_whirlpool); +} + +GRUB_MOD_FINI(gcry_whirlpool) +{ + grub_md_unregister (&_gcry_digest_spec_whirlpool); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/Manifest b/grub-core/lib/libgcrypt-grub/mpi/generic/Manifest new file mode 100644 index 000000000..c429fde72 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/Manifest @@ -0,0 +1,29 @@ +# Manifest - checksums +# Copyright 2003 Free Software Foundation, Inc. +# +# This file is part of Libgcrypt. +# +# Libgcrypt is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser general Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# Libgcrypt is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +mpih-add1.c iQCVAwUAP+Lj2DEAnp832S/7AQKn/AQAwQLWggl6zNQ5EZ+lE+jKV8W3FsogW3/6tp9T5rrSR5JnlWyoHQ9/Pu4knOcLjS6nIfVOiAEifu3nuIysQr9jDSSSJA2LylSUBSXKLKDamPsOCwXOLxiZODslJT3CCGAUtLvXJrWDbTZQrkEuwnLnjQFDzuA7iY9JLrG9kAoXD6Q==WoWm +mpih-mul1.c iQCVAwUAP+LkCTEAnp832S/7AQKFVQP+MhBNjcY73JtnsHZfnaVZq3TiKwN151cWV51nDc1RnTaMhSIFeuNlj3vNML2W0Gn8n+GnyiWE2XXdQEaik6BL02eekUn9aq7I/rdpnTHuOjQPK1uwjuNl8RuJ9YrERBAxq4oB71f+iwMab8dsMSUlVC+NdeAocRqLLgnR/efkdLc==2Tkb +mpih-mul2.c iQCVAwUAP+LkMjEAnp832S/7AQLPeAQAqmRzxFe/mDqTdZr/pTXT8RVyB1vKB0Ei2THV05BxmI4OPv39uysfFpLMt/INsX7AGqdOlj4jOZ/qNaFXR1ceMrlSXvo8u/epk6rCXFp82kM7Qs983LjoP//PrMCkYkXwblaVrgUGiBUCbuPMliWTK6qKkxxXtEfqZ7nVbEWdBx8==Kwhl +mpih-mul3.c iQCVAwUAP+LkVDEAnp832S/7AQL91gP/Qd5iZWxRiN5DdEIVHAedoNvl23NPrT2UUdXvnSK49DpplTxkLiMBj0WqCayG/YIET2NpMRCeLvAZNcSt6lOm0bSZDYo1Hv/N+UoqD3V1McjY16REBv/nnPaMWMZcx7rl5yKTVZiX2PgV6oQOL7Yfrt5ZIOlrHBRs9S2/zcCaVz0==9BQe +mpih-lshift.c iQCVAwUAP+LlATEAnp832S/7AQIACAQAhMrpx0SRXE/LN1NkjMO9n74nMrvmzYJyru0gw2O4BYrUPvD/LWGju2FZaggKV0IBjmi0cDoCrNeK9EGjKOO1lfgODbX2IZ1LUhr9jDuMj0QRqj6T9YkAFYTNUk4GfpwIf7T6Ybo7c78Jx93PidCJt7d39eMMEalooC7LZ4IU3NM==nZ4k +mpih-rshift.c iQCVAwUAP+LlIjEAnp832S/7AQKiuAP/eYC2ZScd+taBx/kNzRvGjA0eAXvORMkMLV6Ot+OXVzVUi04eoP2yXdxSNFKwUj12p8GWXkdoMG3aOGBKg2a7bY5Q5RUho3hUWb9UsVYVUfXLf7IOTt/3a6MLh2CmV5dFPWJmSlbCyQRcn6n/fLDeJ3A2bWTS/BhqGfpOXUIU1ws==jCf8 +mpih-sub1.c iQCVAwUAP+LlZzEAnp832S/7AQIEPgP/dLHTDRbPrYJhsLp9SjGstU1M8/IC5XytcDtO3NQeu4mx6vaXjpujtsTvKIbX4QL5IahNntVVKv1xFLEm2yFg7L2ns0uD/mfwGgOhCG1j2o/SaTAWP5KxP7ae5UDcZl2w6NWvEuMj9t32zmziAZjP8W73A37FUspeRDYiL9sQzkI==QQzk +udiv-w-sdiv.c iQCVAwUAP+Lk0TEAnp832S/7AQICXAQAsxe1SQD4+xZaZTqBC0V9Cyuo0mrdccnRFzthOtm0ARwKFXU2cuLW/ZBOkmeWOVmOFhBp22/I8dEGYnMA3gcfmOMCpNu9i9zk/XHfptdunA1MnOe3GsoWgfHL0rhpAyPhp/X043ICB41NElnnuxADuQQlD4Z1fca5ygYxMr2crJg==EI/6 +mpi-asm-defs.h iQCVAwUAP+LkgDEAnp832S/7AQK0FgQAxJZ7xvXhoZa33GWe23LRb3asrno/loZSyAIXrntqtVH8M3pEsCY0OyW4ry4hX2RnxpuhRCM/PdRNLG3xXyMSVIhkHU8WVRLqzF2LLjEkyU3cAmHnnTQ9aO/XpUWtJGTZ8q2bv7ZsAEi4aPl0p6KhPXcPgM9vQ2XcyOPn3Dl0d6Q==xpjI +$names$ iQCVAwUAP+LmNDEAnp832S/7AQJa+gP+KQNJpbNOgc+s2UX+Ya2gDaOFcAROImIllhg3ej8EaBF8xxdHmWT1zaKwTwi3moEEleykMR104YAGWyQeMbFYiuPPBW+ohrT6KxRBVJpIA9auOOqqJMyglZyoR3Hv7gduVYUW1h/DebnqiKXKEfzQDFqYuT0ayuteoOR4B5NICbE==nLSh diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/distfiles b/grub-core/lib/libgcrypt-grub/mpi/generic/distfiles new file mode 100644 index 000000000..9810eef4d --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/distfiles @@ -0,0 +1,11 @@ +Manifest +mpih-add1.c +mpih-mul1.c +mpih-mul2.c +mpih-mul3.c +mpih-lshift.c +mpih-rshift.c +mpih-sub1.c +udiv-w-sdiv.c +mpi-asm-defs.h + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpi-asm-defs.h b/grub-core/lib/libgcrypt-grub/mpi/generic/mpi-asm-defs.h new file mode 100644 index 000000000..13424e280 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpi-asm-defs.h @@ -0,0 +1,10 @@ +/* This file defines some basic constants for the MPI machinery. We + * need to define the types on a per-CPU basis, so it is done with + * this file here. */ +#define BYTES_PER_MPI_LIMB (SIZEOF_UNSIGNED_LONG) + + + + + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-add1.c b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-add1.c new file mode 100644 index 000000000..4a84df64d --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-add1.c @@ -0,0 +1,65 @@ +/* mpihelp-add_1.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, + * 2000, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + +mpi_limb_t +_gcry_mpih_add_n (mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_ptr_t s2_ptr, mpi_size_t size) +{ + mpi_limb_t x, y, cy; + mpi_size_t j; + + /* The loop counter and index J goes from -SIZE to -1. This way + the loop becomes faster. */ + j = -size; + + /* Offset the base pointers to compensate for the negative indices. */ + s1_ptr -= j; + s2_ptr -= j; + res_ptr -= j; + + cy = 0; + do + { + y = s2_ptr[j]; + x = s1_ptr[j]; + y += cy; /* add previous carry to one addend */ + cy = y < cy; /* get out carry from that addition */ + y += x; /* add other addend */ + cy += y < x; /* get out carry from that add, combine */ + res_ptr[j] = y; + } + while ( ++j ); + + return cy; +} + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-lshift.c b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-lshift.c new file mode 100644 index 000000000..f48c12cd0 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-lshift.c @@ -0,0 +1,68 @@ +/* mpi-lshift.c - MPI helper functions + * Copyright (C) 1994, 1996, 1998, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" + +/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left + * and store the USIZE least significant digits of the result at WP. + * Return the bits shifted out from the most significant digit. + * + * Argument constraints: + * 1. 0 < CNT < BITS_PER_MP_LIMB + * 2. If the result is to be written over the input, WP must be >= UP. + */ + +mpi_limb_t +_gcry_mpih_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, + unsigned int cnt) +{ + mpi_limb_t high_limb, low_limb; + unsigned sh_1, sh_2; + mpi_size_t i; + mpi_limb_t retval; + + sh_1 = cnt; + wp += 1; + sh_2 = BITS_PER_MPI_LIMB - sh_1; + i = usize - 1; + low_limb = up[i]; + retval = low_limb >> sh_2; + high_limb = low_limb; + while ( --i >= 0 ) + { + low_limb = up[i]; + wp[i] = (high_limb << sh_1) | (low_limb >> sh_2); + high_limb = low_limb; + } + wp[i] = high_limb << sh_1; + + return retval; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul1.c b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul1.c new file mode 100644 index 000000000..0e8197d88 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul1.c @@ -0,0 +1,62 @@ +/* mpihelp-mul_1.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + +mpi_limb_t +_gcry_mpih_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, + mpi_limb_t s2_limb) +{ + mpi_limb_t cy_limb; + mpi_size_t j; + mpi_limb_t prod_high, prod_low; + + /* The loop counter and index J goes from -S1_SIZE to -1. This way + * the loop becomes faster. */ + j = -s1_size; + + /* Offset the base pointers to compensate for the negative indices. */ + s1_ptr -= j; + res_ptr -= j; + + cy_limb = 0; + do + { + umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); + prod_low += cy_limb; + cy_limb = (prod_low < cy_limb?1:0) + prod_high; + res_ptr[j] = prod_low; + } + while( ++j ); + + return cy_limb; +} + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul2.c b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul2.c new file mode 100644 index 000000000..3b7549605 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul2.c @@ -0,0 +1,68 @@ +/* mpih-mul2.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + + +mpi_limb_t +_gcry_mpih_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb) +{ + mpi_limb_t cy_limb; + mpi_size_t j; + mpi_limb_t prod_high, prod_low; + mpi_limb_t x; + + /* The loop counter and index J goes from -SIZE to -1. This way + * the loop becomes faster. */ + j = -s1_size; + res_ptr -= j; + s1_ptr -= j; + + cy_limb = 0; + do + { + umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); + + prod_low += cy_limb; + cy_limb = (prod_low < cy_limb?1:0) + prod_high; + + x = res_ptr[j]; + prod_low = x + prod_low; + cy_limb += prod_low < x?1:0; + res_ptr[j] = prod_low; + } + while ( ++j ); + + return cy_limb; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul3.c b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul3.c new file mode 100644 index 000000000..5e84f94f3 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-mul3.c @@ -0,0 +1,68 @@ +/* mpih-mul3.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + + +mpi_limb_t +_gcry_mpih_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb) +{ + mpi_limb_t cy_limb; + mpi_size_t j; + mpi_limb_t prod_high, prod_low; + mpi_limb_t x; + + /* The loop counter and index J goes from -SIZE to -1. This way + * the loop becomes faster. */ + j = -s1_size; + res_ptr -= j; + s1_ptr -= j; + + cy_limb = 0; + do + { + umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb); + + prod_low += cy_limb; + cy_limb = (prod_low < cy_limb?1:0) + prod_high; + + x = res_ptr[j]; + prod_low = x - prod_low; + cy_limb += prod_low > x?1:0; + res_ptr[j] = prod_low; + } + while( ++j ); + + return cy_limb; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-rshift.c b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-rshift.c new file mode 100644 index 000000000..e40794fcf --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-rshift.c @@ -0,0 +1,67 @@ +/* mpih-rshift.c - MPI helper functions + * Copyright (C) 1994, 1996, 1998, 1999, + * 2000, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" + + +/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right + * and store the USIZE least significant limbs of the result at WP. + * The bits shifted out to the right are returned. + * + * Argument constraints: + * 1. 0 < CNT < BITS_PER_MP_LIMB + * 2. If the result is to be written over the input, WP must be <= UP. + */ + +mpi_limb_t +_gcry_mpih_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt) +{ + mpi_limb_t high_limb, low_limb; + unsigned sh_1, sh_2; + mpi_size_t i; + mpi_limb_t retval; + + sh_1 = cnt; + wp -= 1; + sh_2 = BITS_PER_MPI_LIMB - sh_1; + high_limb = up[0]; + retval = high_limb << sh_2; + low_limb = high_limb; + for (i=1; i < usize; i++) + { + high_limb = up[i]; + wp[i] = (low_limb >> sh_1) | (high_limb << sh_2); + low_limb = high_limb; + } + wp[i] = low_limb >> sh_1; + + return retval; +} + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-sub1.c b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-sub1.c new file mode 100644 index 000000000..e88821bfb --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/mpih-sub1.c @@ -0,0 +1,66 @@ +/* mpihelp-add_2.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + +mpi_limb_t +_gcry_mpih_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_ptr_t s2_ptr, mpi_size_t size) +{ + mpi_limb_t x, y, cy; + mpi_size_t j; + + /* The loop counter and index J goes from -SIZE to -1. This way + the loop becomes faster. */ + j = -size; + + /* Offset the base pointers to compensate for the negative indices. */ + s1_ptr -= j; + s2_ptr -= j; + res_ptr -= j; + + cy = 0; + do + { + y = s2_ptr[j]; + x = s1_ptr[j]; + y += cy; /* add previous carry to subtrahend */ + cy = y < cy; /* get out carry from that addition */ + y = x - y; /* main subtract */ + cy += y > x; /* get out carry from the subtract, combine */ + res_ptr[j] = y; + } + while( ++j ); + + return cy; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/generic/udiv-w-sdiv.c b/grub-core/lib/libgcrypt-grub/mpi/generic/udiv-w-sdiv.c new file mode 100644 index 000000000..e80d98bc5 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/generic/udiv-w-sdiv.c @@ -0,0 +1,133 @@ +/* mpih-w-sdiv -- implement udiv_qrnnd on machines with only signed + * division. + * Copyright (C) 1992, 1994, 1996, 1998, 2002 Free Software Foundation, Inc. + * Contributed by Peter L. Montgomery. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + + +#if 0 /* not yet ported to MPI */ + +mpi_limb_t +mpihelp_udiv_w_sdiv( mpi_limp_t *rp, + mpi_limp_t *a1, + mpi_limp_t *a0, + mpi_limp_t *d ) +{ + mp_limb_t q, r; + mp_limb_t c0, c1, b1; + + if ((mpi_limb_signed_t) d >= 0) + { + if (a1 < d - a1 - (a0 >> (BITS_PER_MP_LIMB - 1))) + { + /* dividend, divisor, and quotient are nonnegative */ + sdiv_qrnnd (q, r, a1, a0, d); + } + else + { + /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */ + sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (BITS_PER_MP_LIMB - 1)); + /* Divide (c1*2^32 + c0) by d */ + sdiv_qrnnd (q, r, c1, c0, d); + /* Add 2^31 to quotient */ + q += (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1); + } + } + else + { + b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */ + c1 = a1 >> 1; /* A/2 */ + c0 = (a1 << (BITS_PER_MP_LIMB - 1)) + (a0 >> 1); + + if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */ + { + sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ + + r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */ + if ((d & 1) != 0) + { + if (r >= q) + r = r - q; + else if (q - r <= d) + { + r = r - q + d; + q--; + } + else + { + r = r - q + 2*d; + q -= 2; + } + } + } + else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */ + { + c1 = (b1 - 1) - c1; + c0 = ~c0; /* logical NOT */ + + sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ + + q = ~q; /* (A/2)/b1 */ + r = (b1 - 1) - r; + + r = 2*r + (a0 & 1); /* A/(2*b1) */ + + if ((d & 1) != 0) + { + if (r >= q) + r = r - q; + else if (q - r <= d) + { + r = r - q + d; + q--; + } + else + { + r = r - q + 2*d; + q -= 2; + } + } + } + else /* Implies c1 = b1 */ + { /* Hence a1 = d - 1 = 2*b1 - 1 */ + if (a0 >= -d) + { + q = -1; + r = a0 + d; + } + else + { + q = -2; + r = a0 + 2*d; + } + } + } + + *rp = r; + return q; +} + +#endif + diff --git a/grub-core/lib/libgcrypt-grub/mpi/longlong.h b/grub-core/lib/libgcrypt-grub/mpi/longlong.h new file mode 100644 index 000000000..37a9b9aef --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/longlong.h @@ -0,0 +1,1615 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. + Note: I added some stuff for use with gnupg + +Copyright (C) 1991, 1992, 1993, 1994, 1996, 1998, + 2000, 2001, 2002, 2003, 2004, 2011 Free Software Foundation, Inc. + +This file is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or (at your +option) any later version. + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +License for more details. + +You should have received a copy of the GNU Library General Public License +along with this file; see the file COPYING.LIB. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, +MA 02111-1307, USA. */ + +/* You have to define the following before including this file: + + UWtype -- An unsigned type, default type for operations (typically a "word") + UHWtype -- An unsigned type, at least half the size of UWtype. + UDWtype -- An unsigned type, at least twice as large a UWtype + W_TYPE_SIZE -- size in bits of UWtype + + SItype, USItype -- Signed and unsigned 32 bit types. + DItype, UDItype -- Signed and unsigned 64 bit types. + + On a 32 bit machine UWtype should typically be USItype; + on a 64 bit machine, UWtype should typically be UDItype. +*/ + +#define __BITS4 (W_TYPE_SIZE / 4) +#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) +#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) +#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) + +/* This is used to make sure no undesirable sharing between different libraries + that use this file takes place. */ +#ifndef __MPN +#define __MPN(x) __##x +#endif + +/* Define auxiliary asm macros. + + 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two + UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype + word product in HIGH_PROD and LOW_PROD. + + 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a + UDWtype product. This is just a variant of umul_ppmm. + + 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator) divides a UDWtype, composed by the UWtype integers + HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient + in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less + than DENOMINATOR for correct operation. If, in addition, the most + significant bit of DENOMINATOR must be 1, then the pre-processor symbol + UDIV_NEEDS_NORMALIZATION is defined to 1. + + 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator). Like udiv_qrnnd but the numbers are signed. The quotient + is rounded towards 0. + + 5) count_leading_zeros(count, x) counts the number of zero-bits from the + msb to the first non-zero bit in the UWtype X. This is the number of + steps X needs to be shifted left to set the msb. Undefined for X == 0, + unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. + + 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts + from the least significant end. + + 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, + high_addend_2, low_addend_2) adds two UWtype integers, composed by + HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 + respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow + (i.e. carry out) is not stored anywhere, and is lost. + + 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, + high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, + composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and + LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE + and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, + and is lost. + + If any of these macros are left undefined for a particular CPU, + C macros are used. */ + +/* The CPUs come in alphabetical order below. + + Please add support for more CPUs here, or improve the current support + for the CPUs below! */ + +#ifdef __riscos__ +#pragma continue_after_hash_error +#else /* !__riscos__ */ +#if defined (__GNUC__) && !defined (NO_ASM) + +/* We sometimes need to clobber "cc" with gcc2, but that would not be + understood by gcc1. Use cpp to avoid major code duplication. */ +#if __GNUC__ < 2 +#define __CLOBBER_CC +#define __AND_CLOBBER_CC +#else /* __GNUC__ >= 2 */ +#define __CLOBBER_CC : "cc" +#define __AND_CLOBBER_CC , "cc" +#endif /* __GNUC__ < 2 */ + + +/*************************************** + ************** A29K ***************** + ***************************************/ +#if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add %1,%4,%5\n" \ + "addc %0,%2,%3" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%r" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "%r" ((USItype)(al)), \ + "rI" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub %1,%4,%5\n" \ + "subc %0,%2,%3" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "r" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "r" ((USItype)(al)), \ + "rI" ((USItype)(bl))) +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("multiplu %0,%1,%2" \ + : "=r" ((USItype)(xl)) \ + : "r" (__m0), \ + "r" (__m1)); \ + __asm__ ("multmu %0,%1,%2" \ + : "=r" ((USItype)(xh)) \ + : "r" (__m0), \ + "r" (__m1)); \ + } while (0) +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("dividu %0,%3,%4" \ + : "=r" ((USItype)(q)), \ + "=q" ((USItype)(r)) \ + : "1" ((USItype)(n1)), \ + "r" ((USItype)(n0)), \ + "r" ((USItype)(d))) +#define count_leading_zeros(count, x) \ + __asm__ ("clz %0,%1" \ + : "=r" ((USItype)(count)) \ + : "r" ((USItype)(x))) +#define COUNT_LEADING_ZEROS_0 32 +#endif /* __a29k__ */ + + +#if defined (__alpha) && W_TYPE_SIZE == 64 +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + UDItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("umulh %r1,%2,%0" \ + : "=r" ((UDItype) ph) \ + : "%rJ" (__m0), \ + "rI" (__m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 46 +#ifndef LONGLONG_STANDALONE +#define udiv_qrnnd(q, r, n1, n0, d) \ + do { UDItype __r; \ + (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ + (r) = __r; \ + } while (0) +extern UDItype __udiv_qrnnd (); +#define UDIV_TIME 220 +#endif /* LONGLONG_STANDALONE */ +#endif /* __alpha */ + +/*************************************** + ************** ARM ****************** + ***************************************/ +#if defined (__arm__) && W_TYPE_SIZE == 32 && \ + (!defined (__thumb__) || defined (__thumb2__)) +/* The __ARM_ARCH define is provided by gcc 4.8. Construct it otherwise. */ +#ifndef __ARM_ARCH +# ifdef __ARM_ARCH_2__ +# define __ARM_ARCH 2 +# elif defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__) +# define __ARM_ARCH 3 +# elif defined (__ARM_ARCH_4__) || defined (__ARM_ARCH_4T__) +# define __ARM_ARCH 4 +# elif defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5E__) \ + || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) \ + || defined(__ARM_ARCH_5TEJ__) +# define __ARM_ARCH 5 +# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ + || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \ + || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) +# define __ARM_ARCH 6 +# elif defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \ + || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \ + || defined(__ARM_ARCH_7EM__) +# define __ARM_ARCH 7 +# else + /* could not detect? */ +# endif +#endif +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("adds %1, %4, %5\n" \ + "adc %0, %2, %3" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "%r" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "%r" ((USItype)(al)), \ + "rI" ((USItype)(bl)) __CLOBBER_CC) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subs %1, %4, %5\n" \ + "sbc %0, %2, %3" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "r" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "r" ((USItype)(al)), \ + "rI" ((USItype)(bl)) __CLOBBER_CC) +#if (defined __ARM_ARCH && __ARM_ARCH <= 3) +#define umul_ppmm(xh, xl, a, b) \ + __asm__ ("@ Inlined umul_ppmm\n" \ + "mov %|r0, %2, lsr #16 @ AAAA\n" \ + "mov %|r2, %3, lsr #16 @ BBBB\n" \ + "bic %|r1, %2, %|r0, lsl #16 @ aaaa\n" \ + "bic %0, %3, %|r2, lsl #16 @ bbbb\n" \ + "mul %1, %|r1, %|r2 @ aaaa * BBBB\n" \ + "mul %|r2, %|r0, %|r2 @ AAAA * BBBB\n" \ + "mul %|r1, %0, %|r1 @ aaaa * bbbb\n" \ + "mul %0, %|r0, %0 @ AAAA * bbbb\n" \ + "adds %|r0, %1, %0 @ central sum\n" \ + "addcs %|r2, %|r2, #65536\n" \ + "adds %1, %|r1, %|r0, lsl #16\n" \ + "adc %0, %|r2, %|r0, lsr #16" \ + : "=&r" ((xh)), \ + "=r" ((xl)) \ + : "r" ((USItype)(a)), \ + "r" ((USItype)(b)) \ + : "r0", "r1", "r2" __AND_CLOBBER_CC) +#else /* __ARM_ARCH >= 4 */ +#define umul_ppmm(xh, xl, a, b) \ + __asm__ ("@ Inlined umul_ppmm\n" \ + "umull %1, %0, %2, %3" \ + : "=&r" ((xh)), \ + "=r" ((xl)) \ + : "r" ((USItype)(a)), \ + "r" ((USItype)(b))) +#endif /* __ARM_ARCH >= 4 */ +#define UMUL_TIME 20 +#define UDIV_TIME 100 +#if (defined __ARM_ARCH && __ARM_ARCH >= 5) +#define count_leading_zeros(count, x) \ + __asm__ ("clz %0, %1" \ + : "=r" ((count)) \ + : "r" ((USItype)(x))) +#endif /* __ARM_ARCH >= 5 */ +#endif /* __arm__ */ + +/*************************************** + ************** CLIPPER ************** + ***************************************/ +#if defined (__clipper__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("mulwux %2,%0" \ + : "=r" (__xx.__ll) \ + : "%0" ((USItype)(u)), \ + "r" ((USItype)(v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define smul_ppmm(w1, w0, u, v) \ + ({union {DItype __ll; \ + struct {SItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("mulwx %2,%0" \ + : "=r" (__xx.__ll) \ + : "%0" ((SItype)(u)), \ + "r" ((SItype)(v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define __umulsidi3(u, v) \ + ({UDItype __w; \ + __asm__ ("mulwux %2,%0" \ + : "=r" (__w) \ + : "%0" ((USItype)(u)), \ + "r" ((USItype)(v))); \ + __w; }) +#endif /* __clipper__ */ + + +/*************************************** + ************** GMICRO *************** + ***************************************/ +#if defined (__gmicro__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add.w %5,%1\n" \ + "addx %3,%0" \ + : "=g" ((USItype)(sh)), \ + "=&g" ((USItype)(sl)) \ + : "%0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "%1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub.w %5,%1\n" \ + "subx %3,%0" \ + : "=g" ((USItype)(sh)), \ + "=&g" ((USItype)(sl)) \ + : "0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +#define umul_ppmm(ph, pl, m0, m1) \ + __asm__ ("mulx %3,%0,%1" \ + : "=g" ((USItype)(ph)), \ + "=r" ((USItype)(pl)) \ + : "%0" ((USItype)(m0)), \ + "g" ((USItype)(m1))) +#define udiv_qrnnd(q, r, nh, nl, d) \ + __asm__ ("divx %4,%0,%1" \ + : "=g" ((USItype)(q)), \ + "=r" ((USItype)(r)) \ + : "1" ((USItype)(nh)), \ + "0" ((USItype)(nl)), \ + "g" ((USItype)(d))) +#define count_leading_zeros(count, x) \ + __asm__ ("bsch/1 %1,%0" \ + : "=g" (count) \ + : "g" ((USItype)(x)), \ + "0" ((USItype)0)) +#endif + + +/*************************************** + ************** HPPA ***************** + ***************************************/ +#if defined (__hppa) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ (" add %4,%5,%1\n" \ + " addc %2,%3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%rM" ((USItype)(ah)), \ + "rM" ((USItype)(bh)), \ + "%rM" ((USItype)(al)), \ + "rM" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ (" sub %4,%5,%1\n" \ + " subb %2,%3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "rM" ((USItype)(ah)), \ + "rM" ((USItype)(bh)), \ + "rM" ((USItype)(al)), \ + "rM" ((USItype)(bl))) +#if defined (_PA_RISC1_1) +#define umul_ppmm(wh, wl, u, v) \ + do { \ + union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __asm__ (" xmpyu %1,%2,%0" \ + : "=*f" (__xx.__ll) \ + : "*f" ((USItype)(u)), \ + "*f" ((USItype)(v))); \ + (wh) = __xx.__i.__h; \ + (wl) = __xx.__i.__l; \ + } while (0) +#define UMUL_TIME 8 +#define UDIV_TIME 60 +#else +#define UMUL_TIME 40 +#define UDIV_TIME 80 +#endif +#ifndef LONGLONG_STANDALONE +#define udiv_qrnnd(q, r, n1, n0, d) \ + do { USItype __r; \ + (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ + (r) = __r; \ + } while (0) +extern USItype __udiv_qrnnd (); +#endif /* LONGLONG_STANDALONE */ +#define count_leading_zeros(count, x) \ + do { \ + USItype __tmp; \ + __asm__ ( \ + " ldi 1,%0 \n" \ + " extru,= %1,15,16,%%r0 ; Bits 31..16 zero? \n" \ + " extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n" \ + " ldo 16(%0),%0 ; Yes. Perform add. \n" \ + " extru,= %1,23,8,%%r0 ; Bits 15..8 zero? \n" \ + " extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n" \ + " ldo 8(%0),%0 ; Yes. Perform add. \n" \ + " extru,= %1,27,4,%%r0 ; Bits 7..4 zero? \n" \ + " extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n" \ + " ldo 4(%0),%0 ; Yes. Perform add. \n" \ + " extru,= %1,29,2,%%r0 ; Bits 3..2 zero? \n" \ + " extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n" \ + " ldo 2(%0),%0 ; Yes. Perform add. \n" \ + " extru %1,30,1,%1 ; Extract bit 1. \n" \ + " sub %0,%1,%0 ; Subtract it. " \ + : "=r" (count), "=r" (__tmp) : "1" (x)); \ + } while (0) +#endif /* hppa */ + + +/*************************************** + ************** I370 ***************** + ***************************************/ +#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32 +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mr %0,%3" \ + : "=r" (__xx.__i.__h), \ + "=r" (__xx.__i.__l) \ + : "%1" (__m0), \ + "r" (__m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + (xh) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define smul_ppmm(xh, xl, m0, m1) \ + do { \ + union {DItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __asm__ ("mr %0,%3" \ + : "=r" (__xx.__i.__h), \ + "=r" (__xx.__i.__l) \ + : "%1" (m0), \ + "r" (m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + } while (0) +#define sdiv_qrnnd(q, r, n1, n0, d) \ + do { \ + union {DItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __xx.__i.__h = n1; __xx.__i.__l = n0; \ + __asm__ ("dr %0,%2" \ + : "=r" (__xx.__ll) \ + : "0" (__xx.__ll), "r" (d)); \ + (q) = __xx.__i.__l; (r) = __xx.__i.__h; \ + } while (0) +#endif + + +/*************************************** + ************** I386 ***************** + ***************************************/ +#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addl %5,%1\n" \ + "adcl %3,%0" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "%0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "%1" ((USItype)(al)), \ + "g" ((USItype)(bl)) \ + __CLOBBER_CC) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subl %5,%1\n" \ + "sbbl %3,%0" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "1" ((USItype)(al)), \ + "g" ((USItype)(bl)) \ + __CLOBBER_CC) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mull %3" \ + : "=a" ((w0)), \ + "=d" ((w1)) \ + : "%0" ((USItype)(u)), \ + "rm" ((USItype)(v)) \ + __CLOBBER_CC) +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("divl %4" \ + : "=a" ((q)), \ + "=d" ((r)) \ + : "0" ((USItype)(n0)), \ + "1" ((USItype)(n1)), \ + "rm" ((USItype)(d)) \ + __CLOBBER_CC) +#define count_leading_zeros(count, x) \ + do { \ + USItype __cbtmp; \ + __asm__ ("bsrl %1,%0" \ + : "=r" (__cbtmp) : "rm" ((USItype)(x)) \ + __CLOBBER_CC); \ + (count) = __cbtmp ^ 31; \ + } while (0) +#define count_trailing_zeros(count, x) \ + __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x)) __CLOBBER_CC) +#ifndef UMUL_TIME +#define UMUL_TIME 40 +#endif +#ifndef UDIV_TIME +#define UDIV_TIME 40 +#endif +#endif /* 80x86 */ + + +/*************************************** + ************** I860 ***************** + ***************************************/ +#if defined (__i860__) && W_TYPE_SIZE == 32 +#define rshift_rhlc(r,h,l,c) \ + __asm__ ("shr %3,r0,r0\n" \ + "shrd %1,%2,%0" \ + "=r" (r) : "r" (h), "r" (l), "rn" (c)) +#endif /* i860 */ + +/*************************************** + ************** I960 ***************** + ***************************************/ +#if defined (__i960__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("cmpo 1,0\n" \ + "addc %5,%4,%1\n" \ + "addc %3,%2,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%dI" ((USItype)(ah)), \ + "dI" ((USItype)(bh)), \ + "%dI" ((USItype)(al)), \ + "dI" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("cmpo 0,0\n" \ + "subc %5,%4,%1\n" \ + "subc %3,%2,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "dI" ((USItype)(ah)), \ + "dI" ((USItype)(bh)), \ + "dI" ((USItype)(al)), \ + "dI" ((USItype)(bl))) +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("emul %2,%1,%0" \ + : "=d" (__xx.__ll) \ + : "%dI" ((USItype)(u)), \ + "dI" ((USItype)(v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define __umulsidi3(u, v) \ + ({UDItype __w; \ + __asm__ ("emul %2,%1,%0" \ + : "=d" (__w) \ + : "%dI" ((USItype)(u)), \ + "dI" ((USItype)(v))); \ + __w; }) +#define udiv_qrnnd(q, r, nh, nl, d) \ + do { \ + union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __nn; \ + __nn.__i.__h = (nh); __nn.__i.__l = (nl); \ + __asm__ ("ediv %d,%n,%0" \ + : "=d" (__rq.__ll) \ + : "dI" (__nn.__ll), \ + "dI" ((USItype)(d))); \ + (r) = __rq.__i.__l; (q) = __rq.__i.__h; \ + } while (0) +#define count_leading_zeros(count, x) \ + do { \ + USItype __cbtmp; \ + __asm__ ("scanbit %1,%0" \ + : "=r" (__cbtmp) \ + : "r" ((USItype)(x))); \ + (count) = __cbtmp ^ 31; \ + } while (0) +#define COUNT_LEADING_ZEROS_0 (-32) /* sic */ +#if defined (__i960mx) /* what is the proper symbol to test??? */ +#define rshift_rhlc(r,h,l,c) \ + do { \ + union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __nn; \ + __nn.__i.__h = (h); __nn.__i.__l = (l); \ + __asm__ ("shre %2,%1,%0" \ + : "=d" (r) : "dI" (__nn.__ll), "dI" (c)); \ + } +#endif /* i960mx */ +#endif /* i960 */ + + +/*************************************** + ************** 68000 **************** + ***************************************/ +#if (defined (__mc68000__) || defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add%.l %5,%1\n" \ + "addx%.l %3,%0" \ + : "=d" ((USItype)(sh)), \ + "=&d" ((USItype)(sl)) \ + : "%0" ((USItype)(ah)), \ + "d" ((USItype)(bh)), \ + "%1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub%.l %5,%1\n" \ + "subx%.l %3,%0" \ + : "=d" ((USItype)(sh)), \ + "=&d" ((USItype)(sl)) \ + : "0" ((USItype)(ah)), \ + "d" ((USItype)(bh)), \ + "1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mulu%.l %3,%1:%0" \ + : "=d" ((USItype)(w0)), \ + "=d" ((USItype)(w1)) \ + : "%0" ((USItype)(u)), \ + "dmi" ((USItype)(v))) +#define UMUL_TIME 45 +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("divu%.l %4,%1:%0" \ + : "=d" ((USItype)(q)), \ + "=d" ((USItype)(r)) \ + : "0" ((USItype)(n0)), \ + "1" ((USItype)(n1)), \ + "dmi" ((USItype)(d))) +#define UDIV_TIME 90 +#define sdiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("divs%.l %4,%1:%0" \ + : "=d" ((USItype)(q)), \ + "=d" ((USItype)(r)) \ + : "0" ((USItype)(n0)), \ + "1" ((USItype)(n1)), \ + "dmi" ((USItype)(d))) +#define count_leading_zeros(count, x) \ + __asm__ ("bfffo %1{%b2:%b2},%0" \ + : "=d" ((USItype)(count)) \ + : "od" ((USItype)(x)), "n" (0)) +#define COUNT_LEADING_ZEROS_0 32 +#else /* not mc68020 */ +#define umul_ppmm(xh, xl, a, b) \ + do { USItype __umul_tmp1, __umul_tmp2; \ + __asm__ ("| Inlined umul_ppmm \n" \ + " move%.l %5,%3 \n" \ + " move%.l %2,%0 \n" \ + " move%.w %3,%1 \n" \ + " swap %3 \n" \ + " swap %0 \n" \ + " mulu %2,%1 \n" \ + " mulu %3,%0 \n" \ + " mulu %2,%3 \n" \ + " swap %2 \n" \ + " mulu %5,%2 \n" \ + " add%.l %3,%2 \n" \ + " jcc 1f \n" \ + " add%.l %#0x10000,%0 \n" \ + "1: move%.l %2,%3 \n" \ + " clr%.w %2 \n" \ + " swap %2 \n" \ + " swap %3 \n" \ + " clr%.w %3 \n" \ + " add%.l %3,%1 \n" \ + " addx%.l %2,%0 \n" \ + " | End inlined umul_ppmm" \ + : "=&d" ((USItype)(xh)), "=&d" ((USItype)(xl)), \ + "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \ + : "%2" ((USItype)(a)), "d" ((USItype)(b))); \ + } while (0) +#define UMUL_TIME 100 +#define UDIV_TIME 400 +#endif /* not mc68020 */ +#endif /* mc68000 */ + + +/*************************************** + ************** 88000 **************** + ***************************************/ +#if defined (__m88000__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addu.co %1,%r4,%r5\n" \ + "addu.ci %0,%r2,%r3" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%rJ" ((USItype)(ah)), \ + "rJ" ((USItype)(bh)), \ + "%rJ" ((USItype)(al)), \ + "rJ" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subu.co %1,%r4,%r5\n" \ + "subu.ci %0,%r2,%r3" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "rJ" ((USItype)(ah)), \ + "rJ" ((USItype)(bh)), \ + "rJ" ((USItype)(al)), \ + "rJ" ((USItype)(bl))) +#define count_leading_zeros(count, x) \ + do { \ + USItype __cbtmp; \ + __asm__ ("ff1 %0,%1" \ + : "=r" (__cbtmp) \ + : "r" ((USItype)(x))); \ + (count) = __cbtmp ^ 31; \ + } while (0) +#define COUNT_LEADING_ZEROS_0 63 /* sic */ +#if defined (__m88110__) +#define umul_ppmm(wh, wl, u, v) \ + do { \ + union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __x; \ + __asm__ ("mulu.d %0,%1,%2" : "=r" (__x.__ll) : "r" (u), "r" (v)); \ + (wh) = __x.__i.__h; \ + (wl) = __x.__i.__l; \ + } while (0) +#define udiv_qrnnd(q, r, n1, n0, d) \ + ({union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __x, __q; \ + __x.__i.__h = (n1); __x.__i.__l = (n0); \ + __asm__ ("divu.d %0,%1,%2" \ + : "=r" (__q.__ll) : "r" (__x.__ll), "r" (d)); \ + (r) = (n0) - __q.__l * (d); (q) = __q.__l; }) +#define UMUL_TIME 5 +#define UDIV_TIME 25 +#else +#define UMUL_TIME 17 +#define UDIV_TIME 150 +#endif /* __m88110__ */ +#endif /* __m88000__ */ + +/*************************************** + ************** MIPS ***************** + ***************************************/ +#if defined (__mips__) && W_TYPE_SIZE == 32 +#if defined (__clang__) || (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UDItype _r; \ + _r = (UDItype) u * v; \ + (w1) = _r >> 32; \ + (w0) = (USItype) _r; \ + } while (0) +#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("multu %2,%3" \ + : "=l" ((USItype)(w0)), \ + "=h" ((USItype)(w1)) \ + : "d" ((USItype)(u)), \ + "d" ((USItype)(v))) +#else +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("multu %2,%3 \n" \ + "mflo %0 \n" \ + "mfhi %1" \ + : "=d" ((USItype)(w0)), \ + "=d" ((USItype)(w1)) \ + : "d" ((USItype)(u)), \ + "d" ((USItype)(v))) +#endif +#define UMUL_TIME 10 +#define UDIV_TIME 100 +#endif /* __mips__ */ + +/*************************************** + ************** MIPS/64 ************** + ***************************************/ +#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 +#if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +typedef unsigned int UTItype __attribute__ ((mode (TI))); +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UTItype _r; \ + _r = (UTItype) u * v; \ + (w1) = _r >> 64; \ + (w0) = (UDItype) _r; \ + } while (0) +#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("dmultu %2,%3" \ + : "=l" ((UDItype)(w0)), \ + "=h" ((UDItype)(w1)) \ + : "d" ((UDItype)(u)), \ + "d" ((UDItype)(v))) +#else +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("dmultu %2,%3 \n" \ + "mflo %0 \n" \ + "mfhi %1" \ + : "=d" ((UDItype)(w0)), \ + "=d" ((UDItype)(w1)) \ + : "d" ((UDItype)(u)), \ + "d" ((UDItype)(v))) +#endif +#define UMUL_TIME 20 +#define UDIV_TIME 140 +#endif /* __mips__ */ + + +/*************************************** + ************** 32000 **************** + ***************************************/ +#if defined (__ns32000__) && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __asm__ ("meid %2,%0" \ + : "=g" (__xx.__ll) \ + : "%0" ((USItype)(u)), \ + "g" ((USItype)(v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#define __umulsidi3(u, v) \ + ({UDItype __w; \ + __asm__ ("meid %2,%0" \ + : "=g" (__w) \ + : "%0" ((USItype)(u)), \ + "g" ((USItype)(v))); \ + __w; }) +#define udiv_qrnnd(q, r, n1, n0, d) \ + ({union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ + __asm__ ("deid %2,%0" \ + : "=g" (__xx.__ll) \ + : "0" (__xx.__ll), \ + "g" ((USItype)(d))); \ + (r) = __xx.__i.__l; (q) = __xx.__i.__h; }) +#define count_trailing_zeros(count,x) \ + do { + __asm__ ("ffsd %2,%0" \ + : "=r" ((USItype) (count)) \ + : "0" ((USItype) 0), \ + "r" ((USItype) (x))); \ + } while (0) +#endif /* __ns32000__ */ + + +/*************************************** + ************** PPC ****************** + ***************************************/ +#if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "%r" ((USItype)(ah)), \ + "%r" ((USItype)(al)), \ + "rI" ((USItype)(bl))); \ + else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "%r" ((USItype)(ah)), \ + "%r" ((USItype)(al)), \ + "rI" ((USItype)(bl))); \ + else \ + __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "%r" ((USItype)(ah)), \ + "r" ((USItype)(bh)), \ + "%r" ((USItype)(al)), \ + "rI" ((USItype)(bl))); \ + } while (0) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (ah) && (ah) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "r" ((USItype)(bh)), \ + "rI" ((USItype)(al)), \ + "r" ((USItype)(bl))); \ + else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "r" ((USItype)(bh)), \ + "rI" ((USItype)(al)), \ + "r" ((USItype)(bl))); \ + else if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "r" ((USItype)(ah)), \ + "rI" ((USItype)(al)), \ + "r" ((USItype)(bl))); \ + else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "r" ((USItype)(ah)), \ + "rI" ((USItype)(al)), \ + "r" ((USItype)(bl))); \ + else \ + __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ + : "=r" ((sh)), \ + "=&r" ((sl)) \ + : "r" ((USItype)(ah)), \ + "r" ((USItype)(bh)), \ + "rI" ((USItype)(al)), \ + "r" ((USItype)(bl))); \ + } while (0) +#define count_leading_zeros(count, x) \ + __asm__ ("{cntlz|cntlzw} %0,%1" \ + : "=r" ((count)) \ + : "r" ((USItype)(x))) +#define COUNT_LEADING_ZEROS_0 32 +#if defined (_ARCH_PPC) +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhwu %0,%1,%2" \ + : "=r" (ph) \ + : "%r" (__m0), \ + "r" (__m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 15 +#define smul_ppmm(ph, pl, m0, m1) \ + do { \ + SItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhw %0,%1,%2" \ + : "=r" ((SItype) ph) \ + : "%r" (__m0), \ + "r" (__m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define SMUL_TIME 14 +#define UDIV_TIME 120 +#else +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mul %0,%2,%3" \ + : "=r" ((xh)), \ + "=q" ((xl)) \ + : "r" (__m0), \ + "r" (__m1)); \ + (xh) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define UMUL_TIME 8 +#define smul_ppmm(xh, xl, m0, m1) \ + __asm__ ("mul %0,%2,%3" \ + : "=r" ((SItype)(xh)), \ + "=q" ((SItype)(xl)) \ + : "r" (m0), \ + "r" (m1)) +#define SMUL_TIME 4 +#define sdiv_qrnnd(q, r, nh, nl, d) \ + __asm__ ("div %0,%2,%4" \ + : "=r" ((SItype)(q)), "=q" ((SItype)(r)) \ + : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d))) +#define UDIV_TIME 100 +#endif +#endif /* Power architecture variants. */ + +/* Powerpc 64 bit support taken from gmp-4.1.2. */ +/* We should test _IBMR2 here when we add assembly support for the system + vendor compilers. */ +#if 0 /* Not yet enabled because we don't have hardware for a test. */ +#if (defined (_ARCH_PPC) || defined (__powerpc__)) && W_TYPE_SIZE == 64 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ + else \ + __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ + : "=r" (sh), "=&r" (sl) \ + : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ + } while (0) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + if (__builtin_constant_p (ah) && (ah) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ + __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ + else \ + __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ + : "=r" (sh), "=&r" (sl) \ + : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ + } while (0) +#define count_leading_zeros(count, x) \ + __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x)) +#define COUNT_LEADING_ZEROS_0 64 +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + UDItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define UMUL_TIME 15 +#define smul_ppmm(ph, pl, m0, m1) \ + do { \ + DItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ + (pl) = __m0 * __m1; \ + } while (0) +#define SMUL_TIME 14 /* ??? */ +#define UDIV_TIME 120 /* ??? */ +#endif /* 64-bit PowerPC. */ +#endif /* if 0 */ + +/*************************************** + ************** PYR ****************** + ***************************************/ +#if defined (__pyr__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addw %5,%1 \n" \ + "addwc %3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "%1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subw %5,%1 \n" \ + "subwb %3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +/* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */ +#define umul_ppmm(w1, w0, u, v) \ + ({union {UDItype __ll; \ + struct {USItype __h, __l;} __i; \ + } __xx; \ + __asm__ ("movw %1,%R0 \n" \ + "uemul %2,%0" \ + : "=&r" (__xx.__ll) \ + : "g" ((USItype) (u)), \ + "g" ((USItype)(v))); \ + (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) +#endif /* __pyr__ */ + + +/*************************************** + ************** RT/ROMP ************** + ***************************************/ +#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("a %1,%5 \n" \ + "ae %0,%3" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%0" ((USItype)(ah)), \ + "r" ((USItype)(bh)), \ + "%1" ((USItype)(al)), \ + "r" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("s %1,%5\n" \ + "se %0,%3" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "0" ((USItype)(ah)), \ + "r" ((USItype)(bh)), \ + "1" ((USItype)(al)), \ + "r" ((USItype)(bl))) +#define umul_ppmm(ph, pl, m0, m1) \ + do { \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ( \ + "s r2,r2 \n" \ + "mts r10,%2 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "m r2,%3 \n" \ + "cas %0,r2,r0 \n" \ + "mfs r10,%1" \ + : "=r" ((USItype)(ph)), \ + "=r" ((USItype)(pl)) \ + : "%r" (__m0), \ + "r" (__m1) \ + : "r2"); \ + (ph) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define UMUL_TIME 20 +#define UDIV_TIME 200 +#define count_leading_zeros(count, x) \ + do { \ + if ((x) >= 0x10000) \ + __asm__ ("clz %0,%1" \ + : "=r" ((USItype)(count)) \ + : "r" ((USItype)(x) >> 16)); \ + else \ + { \ + __asm__ ("clz %0,%1" \ + : "=r" ((USItype)(count)) \ + : "r" ((USItype)(x))); \ + (count) += 16; \ + } \ + } while (0) +#endif /* RT/ROMP */ + + +/*************************************** + ************** SH2 ****************** + ***************************************/ +#if (defined (__sh2__) || defined(__sh3__) || defined(__SH4__) ) \ + && W_TYPE_SIZE == 32 +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ( \ + "dmulu.l %2,%3\n" \ + "sts macl,%1\n" \ + "sts mach,%0" \ + : "=r" ((USItype)(w1)), \ + "=r" ((USItype)(w0)) \ + : "r" ((USItype)(u)), \ + "r" ((USItype)(v)) \ + : "macl", "mach") +#define UMUL_TIME 5 +#endif + +/*************************************** + ************** SPARC **************** + ***************************************/ +#if defined (__sparc__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addcc %r4,%5,%1\n" \ + "addx %r2,%3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "%rJ" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "%rJ" ((USItype)(al)), \ + "rI" ((USItype)(bl)) \ + __CLOBBER_CC) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subcc %r4,%5,%1\n" \ + "subx %r2,%3,%0" \ + : "=r" ((USItype)(sh)), \ + "=&r" ((USItype)(sl)) \ + : "rJ" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "rJ" ((USItype)(al)), \ + "rI" ((USItype)(bl)) \ + __CLOBBER_CC) +#if defined (__sparc_v8__) +/* Don't match immediate range because, 1) it is not often useful, + 2) the 'I' flag thinks of the range as a 13 bit signed interval, + while we want to match a 13 bit interval, sign extended to 32 bits, + but INTERPRETED AS UNSIGNED. */ +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("umul %2,%3,%1;rd %%y,%0" \ + : "=r" ((USItype)(w1)), \ + "=r" ((USItype)(w0)) \ + : "r" ((USItype)(u)), \ + "r" ((USItype)(v))) +#define UMUL_TIME 5 +#ifndef SUPERSPARC /* SuperSPARC's udiv only handles 53 bit dividends */ +#define udiv_qrnnd(q, r, n1, n0, d) \ + do { \ + USItype __q; \ + __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \ + : "=r" ((USItype)(__q)) \ + : "r" ((USItype)(n1)), \ + "r" ((USItype)(n0)), \ + "r" ((USItype)(d))); \ + (r) = (n0) - __q * (d); \ + (q) = __q; \ + } while (0) +#define UDIV_TIME 25 +#endif /* SUPERSPARC */ +#else /* ! __sparc_v8__ */ +#if defined (__sparclite__) +/* This has hardware multiply but not divide. It also has two additional + instructions scan (ffs from high bit) and divscc. */ +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("umul %2,%3,%1;rd %%y,%0" \ + : "=r" ((USItype)(w1)), \ + "=r" ((USItype)(w0)) \ + : "r" ((USItype)(u)), \ + "r" ((USItype)(v))) +#define UMUL_TIME 5 +#define udiv_qrnnd(q, r, n1, n0, d) \ + __asm__ ("! Inlined udiv_qrnnd \n" \ + " wr %%g0,%2,%%y ! Not a delayed write for sparclite \n" \ + " tst %%g0 \n" \ + " divscc %3,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%%g1 \n" \ + " divscc %%g1,%4,%0 \n" \ + " rd %%y,%1 \n" \ + " bl,a 1f \n" \ + " add %1,%4,%1 \n" \ + "1: ! End of inline udiv_qrnnd" \ + : "=r" ((USItype)(q)), \ + "=r" ((USItype)(r)) \ + : "r" ((USItype)(n1)), \ + "r" ((USItype)(n0)), \ + "rI" ((USItype)(d)) \ + : "%g1" __AND_CLOBBER_CC) +#define UDIV_TIME 37 +#define count_leading_zeros(count, x) \ + __asm__ ("scan %1,0,%0" \ + : "=r" ((USItype)(x)) \ + : "r" ((USItype)(count))) +/* Early sparclites return 63 for an argument of 0, but they warn that future + implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 + undefined. */ +#endif /* __sparclite__ */ +#endif /* __sparc_v8__ */ +/* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd. */ +#ifndef umul_ppmm +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("! Inlined umul_ppmm \n" \ + " wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr \n" \ + " sra %3,31,%%g2 ! Don't move this insn \n" \ + " and %2,%%g2,%%g2 ! Don't move this insn \n" \ + " andcc %%g0,0,%%g1 ! Don't move this insn \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,%3,%%g1 \n" \ + " mulscc %%g1,0,%%g1 \n" \ + " add %%g1,%%g2,%0 \n" \ + " rd %%y,%1" \ + : "=r" ((USItype)(w1)), \ + "=r" ((USItype)(w0)) \ + : "%rI" ((USItype)(u)), \ + "r" ((USItype)(v)) \ + : "%g1", "%g2" __AND_CLOBBER_CC) +#define UMUL_TIME 39 /* 39 instructions */ +#endif +#ifndef udiv_qrnnd +#ifndef LONGLONG_STANDALONE +#define udiv_qrnnd(q, r, n1, n0, d) \ + do { USItype __r; \ + (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ + (r) = __r; \ + } while (0) +extern USItype __udiv_qrnnd (); +#define UDIV_TIME 140 +#endif /* LONGLONG_STANDALONE */ +#endif /* udiv_qrnnd */ +#endif /* __sparc__ */ + + +/*************************************** + ************** VAX ****************** + ***************************************/ +#if defined (__vax__) && W_TYPE_SIZE == 32 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("addl2 %5,%1\n" \ + "adwc %3,%0" \ + : "=g" ((USItype)(sh)), \ + "=&g" ((USItype)(sl)) \ + : "%0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "%1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subl2 %5,%1\n" \ + "sbwc %3,%0" \ + : "=g" ((USItype)(sh)), \ + "=&g" ((USItype)(sl)) \ + : "0" ((USItype)(ah)), \ + "g" ((USItype)(bh)), \ + "1" ((USItype)(al)), \ + "g" ((USItype)(bl))) +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union {UDItype __ll; \ + struct {USItype __l, __h;} __i; \ + } __xx; \ + USItype __m0 = (m0), __m1 = (m1); \ + __asm__ ("emul %1,%2,$0,%0" \ + : "=g" (__xx.__ll) \ + : "g" (__m0), \ + "g" (__m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + (xh) += ((((SItype) __m0 >> 31) & __m1) \ + + (((SItype) __m1 >> 31) & __m0)); \ + } while (0) +#define sdiv_qrnnd(q, r, n1, n0, d) \ + do { \ + union {DItype __ll; \ + struct {SItype __l, __h;} __i; \ + } __xx; \ + __xx.__i.__h = n1; __xx.__i.__l = n0; \ + __asm__ ("ediv %3,%2,%0,%1" \ + : "=g" (q), "=g" (r) \ + : "g" (__xx.__ll), "g" (d)); \ + } while (0) +#endif /* __vax__ */ + + +/*************************************** + ************** Z8000 **************** + ***************************************/ +#if defined (__z8000__) && W_TYPE_SIZE == 16 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \ + : "=r" ((unsigned int)(sh)), \ + "=&r" ((unsigned int)(sl)) \ + : "%0" ((unsigned int)(ah)), \ + "r" ((unsigned int)(bh)), \ + "%1" ((unsigned int)(al)), \ + "rQR" ((unsigned int)(bl))) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \ + : "=r" ((unsigned int)(sh)), \ + "=&r" ((unsigned int)(sl)) \ + : "0" ((unsigned int)(ah)), \ + "r" ((unsigned int)(bh)), \ + "1" ((unsigned int)(al)), \ + "rQR" ((unsigned int)(bl))) +#define umul_ppmm(xh, xl, m0, m1) \ + do { \ + union {long int __ll; \ + struct {unsigned int __h, __l;} __i; \ + } __xx; \ + unsigned int __m0 = (m0), __m1 = (m1); \ + __asm__ ("mult %S0,%H3" \ + : "=r" (__xx.__i.__h), \ + "=r" (__xx.__i.__l) \ + : "%1" (__m0), \ + "rQR" (__m1)); \ + (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ + (xh) += ((((signed int) __m0 >> 15) & __m1) \ + + (((signed int) __m1 >> 15) & __m0)); \ + } while (0) +#endif /* __z8000__ */ + +#endif /* __GNUC__ */ +#endif /* !__riscos__ */ + + +/*************************************** + *********** Generic Versions ******** + ***************************************/ +#if !defined (umul_ppmm) && defined (__umulsidi3) +#define umul_ppmm(ph, pl, m0, m1) \ + { \ + UDWtype __ll = __umulsidi3 (m0, m1); \ + ph = (UWtype) (__ll >> W_TYPE_SIZE); \ + pl = (UWtype) __ll; \ + } +#endif + +#if !defined (__umulsidi3) +#define __umulsidi3(u, v) \ + ({UWtype __hi, __lo; \ + umul_ppmm (__hi, __lo, u, v); \ + ((UDWtype) __hi << W_TYPE_SIZE) | __lo; }) +#endif + +/* If this machine has no inline assembler, use C macros. */ + +#if !defined (add_ssaaaa) +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + do { \ + UWtype __x; \ + __x = (al) + (bl); \ + (sh) = (ah) + (bh) + (__x < (al)); \ + (sl) = __x; \ + } while (0) +#endif + +#if !defined (sub_ddmmss) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + do { \ + UWtype __x; \ + __x = (al) - (bl); \ + (sh) = (ah) - (bh) - (__x > (al)); \ + (sl) = __x; \ + } while (0) +#endif + +#if !defined (umul_ppmm) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UWtype __x0, __x1, __x2, __x3; \ + UHWtype __ul, __vl, __uh, __vh; \ + UWtype __u = (u), __v = (v); \ + \ + __ul = __ll_lowpart (__u); \ + __uh = __ll_highpart (__u); \ + __vl = __ll_lowpart (__v); \ + __vh = __ll_highpart (__v); \ + \ + __x0 = (UWtype) __ul * __vl; \ + __x1 = (UWtype) __ul * __vh; \ + __x2 = (UWtype) __uh * __vl; \ + __x3 = (UWtype) __uh * __vh; \ + \ + __x1 += __ll_highpart (__x0);/* this can't give carry */ \ + __x1 += __x2; /* but this indeed can */ \ + if (__x1 < __x2) /* did we get it? */ \ + __x3 += __ll_B; /* yes, add it in the proper pos. */ \ + \ + (w1) = __x3 + __ll_highpart (__x1); \ + (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\ + } while (0) +#endif + +#if !defined (umul_ppmm) +#define smul_ppmm(w1, w0, u, v) \ + do { \ + UWtype __w1; \ + UWtype __m0 = (u), __m1 = (v); \ + umul_ppmm (__w1, w0, __m0, __m1); \ + (w1) = __w1 - (-(__m0 >> (W_TYPE_SIZE - 1)) & __m1) \ + - (-(__m1 >> (W_TYPE_SIZE - 1)) & __m0); \ + } while (0) +#endif + +/* Define this unconditionally, so it can be used for debugging. */ +#define __udiv_qrnnd_c(q, r, n1, n0, d) \ + do { \ + UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \ + __d1 = __ll_highpart (d); \ + __d0 = __ll_lowpart (d); \ + \ + __r1 = (n1) % __d1; \ + __q1 = (n1) / __d1; \ + __m = (UWtype) __q1 * __d0; \ + __r1 = __r1 * __ll_B | __ll_highpart (n0); \ + if (__r1 < __m) \ + { \ + __q1--, __r1 += (d); \ + if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ + if (__r1 < __m) \ + __q1--, __r1 += (d); \ + } \ + __r1 -= __m; \ + \ + __r0 = __r1 % __d1; \ + __q0 = __r1 / __d1; \ + __m = (UWtype) __q0 * __d0; \ + __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ + if (__r0 < __m) \ + { \ + __q0--, __r0 += (d); \ + if (__r0 >= (d)) \ + if (__r0 < __m) \ + __q0--, __r0 += (d); \ + } \ + __r0 -= __m; \ + \ + (q) = (UWtype) __q1 * __ll_B | __q0; \ + (r) = __r0; \ + } while (0) + +/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through + __udiv_w_sdiv (defined in libgcc or elsewhere). */ +#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) +#define udiv_qrnnd(q, r, nh, nl, d) \ + do { \ + UWtype __r; \ + (q) = __MPN(udiv_w_sdiv) (&__r, nh, nl, d); \ + (r) = __r; \ + } while (0) +#endif + +/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ +#if !defined (udiv_qrnnd) +#define UDIV_NEEDS_NORMALIZATION 1 +#define udiv_qrnnd __udiv_qrnnd_c +#endif + +#if !defined (count_leading_zeros) +extern +#ifdef __STDC__ +const +#endif +unsigned char _gcry_clz_tab[]; +#define MPI_INTERNAL_NEED_CLZ_TAB 1 +#define count_leading_zeros(count, x) \ + do { \ + UWtype __xr = (x); \ + UWtype __a; \ + \ + if (W_TYPE_SIZE <= 32) \ + { \ + __a = __xr < ((UWtype) 1 << 2*__BITS4) \ + ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4) \ + : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 : 3*__BITS4);\ + } \ + else \ + { \ + for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ + if (((__xr >> __a) & 0xff) != 0) \ + break; \ + } \ + \ + (count) = W_TYPE_SIZE - (_gcry_clz_tab[__xr >> __a] + __a); \ + } while (0) +/* This version gives a well-defined value for zero. */ +#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE +#endif + +#if !defined (count_trailing_zeros) +/* Define count_trailing_zeros using count_leading_zeros. The latter might be + defined in asm, but if it is not, the C version above is good enough. */ +#define count_trailing_zeros(count, x) \ + do { \ + UWtype __ctz_x = (x); \ + UWtype __ctz_c; \ + count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ + (count) = W_TYPE_SIZE - 1 - __ctz_c; \ + } while (0) +#endif + +#ifndef UDIV_NEEDS_NORMALIZATION +#define UDIV_NEEDS_NORMALIZATION 0 +#endif diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-add.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-add.c new file mode 100644 index 000000000..f8f609441 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-add.c @@ -0,0 +1,237 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-add.c - MPI functions + * Copyright (C) 1994, 1996, 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include + +#include "mpi-internal.h" + + +/**************** + * Add the unsigned integer V to the mpi-integer U and store the + * result in W. U and V may be the same. + */ +void +gcry_mpi_add_ui(gcry_mpi_t w, gcry_mpi_t u, unsigned long v ) +{ + mpi_ptr_t wp, up; + mpi_size_t usize, wsize; + int usign, wsign; + + usize = u->nlimbs; + usign = u->sign; + wsign = 0; + + /* If not space for W (and possible carry), increase space. */ + wsize = usize + 1; + if( w->alloced < wsize ) + mpi_resize(w, wsize); + + /* These must be after realloc (U may be the same as W). */ + up = u->d; + wp = w->d; + + if( !usize ) { /* simple */ + wp[0] = v; + wsize = v? 1:0; + } + else if( !usign ) { /* mpi is not negative */ + mpi_limb_t cy; + cy = _gcry_mpih_add_1(wp, up, usize, v); + wp[usize] = cy; + wsize = usize + cy; + } + else { /* The signs are different. Need exact comparison to determine + * which operand to subtract from which. */ + if( usize == 1 && up[0] < v ) { + wp[0] = v - up[0]; + wsize = 1; + } + else { + _gcry_mpih_sub_1(wp, up, usize, v); + /* Size can decrease with at most one limb. */ + wsize = usize - (wp[usize-1]==0); + wsign = 1; + } + } + + w->nlimbs = wsize; + w->sign = wsign; +} + + +void +gcry_mpi_add(gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v) +{ + mpi_ptr_t wp, up, vp; + mpi_size_t usize, vsize, wsize; + int usign, vsign, wsign; + + if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */ + usize = v->nlimbs; + usign = v->sign; + vsize = u->nlimbs; + vsign = u->sign; + wsize = usize + 1; + RESIZE_IF_NEEDED(w, wsize); + /* These must be after realloc (u or v may be the same as w). */ + up = v->d; + vp = u->d; + } + else { + usize = u->nlimbs; + usign = u->sign; + vsize = v->nlimbs; + vsign = v->sign; + wsize = usize + 1; + RESIZE_IF_NEEDED(w, wsize); + /* These must be after realloc (u or v may be the same as w). */ + up = u->d; + vp = v->d; + } + wp = w->d; + wsign = 0; + + if( !vsize ) { /* simple */ + MPN_COPY(wp, up, usize ); + wsize = usize; + wsign = usign; + } + else if( usign != vsign ) { /* different sign */ + /* This test is right since USIZE >= VSIZE */ + if( usize != vsize ) { + _gcry_mpih_sub(wp, up, usize, vp, vsize); + wsize = usize; + MPN_NORMALIZE(wp, wsize); + wsign = usign; + } + else if( _gcry_mpih_cmp(up, vp, usize) < 0 ) { + _gcry_mpih_sub_n(wp, vp, up, usize); + wsize = usize; + MPN_NORMALIZE(wp, wsize); + if( !usign ) + wsign = 1; + } + else { + _gcry_mpih_sub_n(wp, up, vp, usize); + wsize = usize; + MPN_NORMALIZE(wp, wsize); + if( usign ) + wsign = 1; + } + } + else { /* U and V have same sign. Add them. */ + mpi_limb_t cy = _gcry_mpih_add(wp, up, usize, vp, vsize); + wp[usize] = cy; + wsize = usize + cy; + if( usign ) + wsign = 1; + } + + w->nlimbs = wsize; + w->sign = wsign; +} + + +/**************** + * Subtract the unsigned integer V from the mpi-integer U and store the + * result in W. + */ +void +gcry_mpi_sub_ui(gcry_mpi_t w, gcry_mpi_t u, unsigned long v ) +{ + mpi_ptr_t wp, up; + mpi_size_t usize, wsize; + int usign, wsign; + + usize = u->nlimbs; + usign = u->sign; + wsign = 0; + + /* If not space for W (and possible carry), increase space. */ + wsize = usize + 1; + if( w->alloced < wsize ) + mpi_resize(w, wsize); + + /* These must be after realloc (U may be the same as W). */ + up = u->d; + wp = w->d; + + if( !usize ) { /* simple */ + wp[0] = v; + wsize = v? 1:0; + wsign = 1; + } + else if( usign ) { /* mpi and v are negative */ + mpi_limb_t cy; + cy = _gcry_mpih_add_1(wp, up, usize, v); + wp[usize] = cy; + wsize = usize + cy; + } + else { /* The signs are different. Need exact comparison to determine + * which operand to subtract from which. */ + if( usize == 1 && up[0] < v ) { + wp[0] = v - up[0]; + wsize = 1; + wsign = 1; + } + else { + _gcry_mpih_sub_1(wp, up, usize, v); + /* Size can decrease with at most one limb. */ + wsize = usize - (wp[usize-1]==0); + } + } + + w->nlimbs = wsize; + w->sign = wsign; +} + +void +gcry_mpi_sub(gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v) +{ + gcry_mpi_t vv = mpi_copy (v); + vv->sign = ! vv->sign; + gcry_mpi_add (w, u, vv); + mpi_free (vv); +} + + +void +gcry_mpi_addm( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m) +{ + gcry_mpi_add(w, u, v); + _gcry_mpi_fdiv_r( w, w, m ); +} + +void +gcry_mpi_subm( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m) +{ + gcry_mpi_sub(w, u, v); + _gcry_mpi_fdiv_r( w, w, m ); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-asm-defs.h b/grub-core/lib/libgcrypt-grub/mpi/mpi-asm-defs.h new file mode 100644 index 000000000..13424e280 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-asm-defs.h @@ -0,0 +1,10 @@ +/* This file defines some basic constants for the MPI machinery. We + * need to define the types on a per-CPU basis, so it is done with + * this file here. */ +#define BYTES_PER_MPI_LIMB (SIZEOF_UNSIGNED_LONG) + + + + + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-bit.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-bit.c new file mode 100644 index 000000000..05b9f12bb --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-bit.c @@ -0,0 +1,366 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-bit.c - MPI bit level functions + * Copyright (C) 1998, 1999, 2001, 2002, 2006 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + + +#ifdef MPI_INTERNAL_NEED_CLZ_TAB +#ifdef __STDC__ +const +#endif +unsigned char +_gcry_clz_tab[] = +{ + 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, +}; +#endif + + +#define A_LIMB_1 ((mpi_limb_t)1) + + +/**************** + * Sometimes we have MSL (most significant limbs) which are 0; + * this is for some reasons not good, so this function removes them. + */ +void +_gcry_mpi_normalize( gcry_mpi_t a ) +{ + if( mpi_is_opaque(a) ) + return; + + for( ; a->nlimbs && !a->d[a->nlimbs-1]; a->nlimbs-- ) + ; +} + + + +/**************** + * Return the number of bits in A. + */ +unsigned int +gcry_mpi_get_nbits( gcry_mpi_t a ) +{ + unsigned n; + + if( mpi_is_opaque(a) ) { + return a->sign; /* which holds the number of bits */ + } + + _gcry_mpi_normalize( a ); + if( a->nlimbs ) { + mpi_limb_t alimb = a->d[a->nlimbs-1]; + if( alimb ) + count_leading_zeros( n, alimb ); + else + n = BITS_PER_MPI_LIMB; + n = BITS_PER_MPI_LIMB - n + (a->nlimbs-1) * BITS_PER_MPI_LIMB; + } + else + n = 0; + return n; +} + + +/**************** + * Test whether bit N is set. + */ +int +gcry_mpi_test_bit( gcry_mpi_t a, unsigned int n ) +{ + unsigned int limbno, bitno; + mpi_limb_t limb; + + limbno = n / BITS_PER_MPI_LIMB; + bitno = n % BITS_PER_MPI_LIMB; + + if( limbno >= a->nlimbs ) + return 0; /* too far left: this is a 0 */ + limb = a->d[limbno]; + return (limb & (A_LIMB_1 << bitno))? 1: 0; +} + + +/**************** + * Set bit N of A. + */ +void +gcry_mpi_set_bit( gcry_mpi_t a, unsigned int n ) +{ + unsigned int limbno, bitno; + + limbno = n / BITS_PER_MPI_LIMB; + bitno = n % BITS_PER_MPI_LIMB; + + if ( limbno >= a->nlimbs ) + { + mpi_resize (a, limbno+1 ); + a->nlimbs = limbno+1; + } + a->d[limbno] |= (A_LIMB_1<= a->nlimbs ) + { + mpi_resize (a, limbno+1 ); + a->nlimbs = limbno+1; + } + a->d[limbno] |= (A_LIMB_1<d[limbno] &= ~(A_LIMB_1 << bitno); + a->nlimbs = limbno+1; +} + +/**************** + * clear bit N of A and all bits above + */ +void +gcry_mpi_clear_highbit( gcry_mpi_t a, unsigned int n ) +{ + unsigned int limbno, bitno; + + limbno = n / BITS_PER_MPI_LIMB; + bitno = n % BITS_PER_MPI_LIMB; + + if( limbno >= a->nlimbs ) + return; /* not allocated, therefore no need to clear bits + :-) */ + + for( ; bitno < BITS_PER_MPI_LIMB; bitno++ ) + a->d[limbno] &= ~(A_LIMB_1 << bitno); + a->nlimbs = limbno+1; +} + +/**************** + * Clear bit N of A. + */ +void +gcry_mpi_clear_bit( gcry_mpi_t a, unsigned int n ) +{ + unsigned int limbno, bitno; + + limbno = n / BITS_PER_MPI_LIMB; + bitno = n % BITS_PER_MPI_LIMB; + + if( limbno >= a->nlimbs ) + return; /* don't need to clear this bit, it's to far to left */ + a->d[limbno] &= ~(A_LIMB_1 << bitno); +} + + +/**************** + * Shift A by COUNT limbs to the right + * This is used only within the MPI library + */ +void +_gcry_mpi_rshift_limbs( gcry_mpi_t a, unsigned int count ) +{ + mpi_ptr_t ap = a->d; + mpi_size_t n = a->nlimbs; + unsigned int i; + + if( count >= n ) { + a->nlimbs = 0; + return; + } + + for( i = 0; i < n - count; i++ ) + ap[i] = ap[i+count]; + ap[i] = 0; + a->nlimbs -= count; +} + + +/* + * Shift A by N bits to the right. + */ +void +gcry_mpi_rshift ( gcry_mpi_t x, gcry_mpi_t a, unsigned int n ) +{ + mpi_size_t xsize; + unsigned int i; + unsigned int nlimbs = (n/BITS_PER_MPI_LIMB); + unsigned int nbits = (n%BITS_PER_MPI_LIMB); + + if ( x == a ) + { + /* In-place operation. */ + if ( nlimbs >= x->nlimbs ) + { + x->nlimbs = 0; + return; + } + + if (nlimbs) + { + for (i=0; i < x->nlimbs - nlimbs; i++ ) + x->d[i] = x->d[i+nlimbs]; + x->d[i] = 0; + x->nlimbs -= nlimbs; + + } + if ( x->nlimbs && nbits ) + _gcry_mpih_rshift ( x->d, x->d, x->nlimbs, nbits ); + } + else if ( nlimbs ) + { + /* Copy and shift by more or equal bits than in a limb. */ + xsize = a->nlimbs; + x->sign = a->sign; + RESIZE_IF_NEEDED (x, xsize); + x->nlimbs = xsize; + for (i=0; i < a->nlimbs; i++ ) + x->d[i] = a->d[i]; + x->nlimbs = i; + + if ( nlimbs >= x->nlimbs ) + { + x->nlimbs = 0; + return; + } + + if (nlimbs) + { + for (i=0; i < x->nlimbs - nlimbs; i++ ) + x->d[i] = x->d[i+nlimbs]; + x->d[i] = 0; + x->nlimbs -= nlimbs; + } + + if ( x->nlimbs && nbits ) + _gcry_mpih_rshift ( x->d, x->d, x->nlimbs, nbits ); + } + else + { + /* Copy and shift by less than bits in a limb. */ + xsize = a->nlimbs; + x->sign = a->sign; + RESIZE_IF_NEEDED (x, xsize); + x->nlimbs = xsize; + + if ( xsize ) + { + if (nbits ) + _gcry_mpih_rshift (x->d, a->d, x->nlimbs, nbits ); + else + { + /* The rshift helper function is not specified for + NBITS==0, thus we do a plain copy here. */ + for (i=0; i < x->nlimbs; i++ ) + x->d[i] = a->d[i]; + } + } + } + MPN_NORMALIZE (x->d, x->nlimbs); +} + + +/**************** + * Shift A by COUNT limbs to the left + * This is used only within the MPI library + */ +void +_gcry_mpi_lshift_limbs (gcry_mpi_t a, unsigned int count) +{ + mpi_ptr_t ap; + int n = a->nlimbs; + int i; + + if (!count || !n) + return; + + RESIZE_IF_NEEDED (a, n+count); + + ap = a->d; + for (i = n-1; i >= 0; i--) + ap[i+count] = ap[i]; + for (i=0; i < count; i++ ) + ap[i] = 0; + a->nlimbs += count; +} + + +/* + * Shift A by N bits to the left. + */ +void +gcry_mpi_lshift ( gcry_mpi_t x, gcry_mpi_t a, unsigned int n ) +{ + unsigned int nlimbs = (n/BITS_PER_MPI_LIMB); + unsigned int nbits = (n%BITS_PER_MPI_LIMB); + + if (x == a && !n) + return; /* In-place shift with an amount of zero. */ + + if ( x != a ) + { + /* Copy A to X. */ + unsigned int alimbs = a->nlimbs; + int asign = a->sign; + mpi_ptr_t xp, ap; + + RESIZE_IF_NEEDED (x, alimbs+nlimbs+1); + xp = x->d; + ap = a->d; + MPN_COPY (xp, ap, alimbs); + x->nlimbs = alimbs; + x->flags = a->flags; + x->sign = asign; + } + + if (nlimbs && !nbits) + { + /* Shift a full number of limbs. */ + _gcry_mpi_lshift_limbs (x, nlimbs); + } + else if (n) + { + /* We use a very dump approach: Shift left by the number of + limbs plus one and than fix it up by an rshift. */ + _gcry_mpi_lshift_limbs (x, nlimbs+1); + gcry_mpi_rshift (x, x, BITS_PER_MPI_LIMB - nbits); + } + + MPN_NORMALIZE (x->d, x->nlimbs); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-cmp.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-cmp.c new file mode 100644 index 000000000..b0ebbc162 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-cmp.c @@ -0,0 +1,109 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-cmp.c - MPI functions + * Copyright (C) 1998, 1999, 2001, 2002, 2005 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include "mpi-internal.h" + +int +gcry_mpi_cmp_ui (gcry_mpi_t u, unsigned long v) +{ + mpi_limb_t limb = v; + + _gcry_mpi_normalize (u); + + /* Handle the case that U contains no limb. */ + if (u->nlimbs == 0) + return -(limb != 0); + + /* Handle the case that U is negative. */ + if (u->sign) + return -1; + + if (u->nlimbs == 1) + { + /* Handle the case that U contains exactly one limb. */ + + if (u->d[0] > limb) + return 1; + if (u->d[0] < limb) + return -1; + return 0; + } + else + /* Handle the case that U contains more than one limb. */ + return 1; +} + + +int +gcry_mpi_cmp (gcry_mpi_t u, gcry_mpi_t v) +{ + mpi_size_t usize; + mpi_size_t vsize; + int cmp; + + if (mpi_is_opaque (u) || mpi_is_opaque (v)) + { + if (mpi_is_opaque (u) && !mpi_is_opaque (v)) + return -1; + if (!mpi_is_opaque (u) && mpi_is_opaque (v)) + return 1; + if (!u->sign && !v->sign) + return 0; /* Empty buffers are identical. */ + if (u->sign < v->sign) + return -1; + if (u->sign > v->sign) + return 1; + return memcmp (u->d, v->d, (u->sign+7)/8); + } + else + { + _gcry_mpi_normalize (u); + _gcry_mpi_normalize (v); + + usize = u->nlimbs; + vsize = v->nlimbs; + + /* Compare sign bits. */ + + if (!u->sign && v->sign) + return 1; + if (u->sign && !v->sign) + return -1; + + /* U and V are either both positive or both negative. */ + + if (usize != vsize && !u->sign && !v->sign) + return usize - vsize; + if (usize != vsize && u->sign && v->sign) + return vsize + usize; + if (!usize ) + return 0; + if (!(cmp = _gcry_mpih_cmp (u->d, v->d, usize))) + return 0; + if ((cmp < 0?1:0) == (u->sign?1:0)) + return 1; + } + return -1; +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-div.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-div.c new file mode 100644 index 000000000..5218caa74 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-div.c @@ -0,0 +1,357 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-div.c - MPI functions + * Copyright (C) 1994, 1996, 1998, 2001, 2002, + * 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" +#include "g10lib.h" + + +void +_gcry_mpi_fdiv_r( gcry_mpi_t rem, gcry_mpi_t dividend, gcry_mpi_t divisor ) +{ + int divisor_sign = divisor->sign; + gcry_mpi_t temp_divisor = NULL; + + /* We need the original value of the divisor after the remainder has been + * preliminary calculated. We have to copy it to temporary space if it's + * the same variable as REM. */ + if( rem == divisor ) { + temp_divisor = mpi_copy( divisor ); + divisor = temp_divisor; + } + + _gcry_mpi_tdiv_r( rem, dividend, divisor ); + + if( ((divisor_sign?1:0) ^ (dividend->sign?1:0)) && rem->nlimbs ) + gcry_mpi_add( rem, rem, divisor); + + if( temp_divisor ) + mpi_free(temp_divisor); +} + + + +/**************** + * Division rounding the quotient towards -infinity. + * The remainder gets the same sign as the denominator. + * rem is optional + */ + +ulong +_gcry_mpi_fdiv_r_ui( gcry_mpi_t rem, gcry_mpi_t dividend, ulong divisor ) +{ + mpi_limb_t rlimb; + + rlimb = _gcry_mpih_mod_1( dividend->d, dividend->nlimbs, divisor ); + if( rlimb && dividend->sign ) + rlimb = divisor - rlimb; + + if( rem ) { + rem->d[0] = rlimb; + rem->nlimbs = rlimb? 1:0; + } + return rlimb; +} + + +void +_gcry_mpi_fdiv_q( gcry_mpi_t quot, gcry_mpi_t dividend, gcry_mpi_t divisor ) +{ + gcry_mpi_t tmp = mpi_alloc( mpi_get_nlimbs(quot) ); + _gcry_mpi_fdiv_qr( quot, tmp, dividend, divisor); + mpi_free(tmp); +} + +void +_gcry_mpi_fdiv_qr( gcry_mpi_t quot, gcry_mpi_t rem, gcry_mpi_t dividend, gcry_mpi_t divisor ) +{ + int divisor_sign = divisor->sign; + gcry_mpi_t temp_divisor = NULL; + + if( quot == divisor || rem == divisor ) { + temp_divisor = mpi_copy( divisor ); + divisor = temp_divisor; + } + + _gcry_mpi_tdiv_qr( quot, rem, dividend, divisor ); + + if( (divisor_sign ^ dividend->sign) && rem->nlimbs ) { + gcry_mpi_sub_ui( quot, quot, 1 ); + gcry_mpi_add( rem, rem, divisor); + } + + if( temp_divisor ) + mpi_free(temp_divisor); +} + + +/* If den == quot, den needs temporary storage. + * If den == rem, den needs temporary storage. + * If num == quot, num needs temporary storage. + * If den has temporary storage, it can be normalized while being copied, + * i.e no extra storage should be allocated. + */ + +void +_gcry_mpi_tdiv_r( gcry_mpi_t rem, gcry_mpi_t num, gcry_mpi_t den) +{ + _gcry_mpi_tdiv_qr(NULL, rem, num, den ); +} + +void +_gcry_mpi_tdiv_qr( gcry_mpi_t quot, gcry_mpi_t rem, gcry_mpi_t num, gcry_mpi_t den) +{ + mpi_ptr_t np, dp; + mpi_ptr_t qp, rp; + mpi_size_t nsize = num->nlimbs; + mpi_size_t dsize = den->nlimbs; + mpi_size_t qsize, rsize; + mpi_size_t sign_remainder = num->sign; + mpi_size_t sign_quotient = num->sign ^ den->sign; + unsigned normalization_steps; + mpi_limb_t q_limb; + mpi_ptr_t marker[5]; + unsigned int marker_nlimbs[5]; + int markidx=0; + + /* Ensure space is enough for quotient and remainder. + * We need space for an extra limb in the remainder, because it's + * up-shifted (normalized) below. */ + rsize = nsize + 1; + mpi_resize( rem, rsize); + + qsize = rsize - dsize; /* qsize cannot be bigger than this. */ + if( qsize <= 0 ) { + if( num != rem ) { + rem->nlimbs = num->nlimbs; + rem->sign = num->sign; + MPN_COPY(rem->d, num->d, nsize); + } + if( quot ) { + /* This needs to follow the assignment to rem, in case the + * numerator and quotient are the same. */ + quot->nlimbs = 0; + quot->sign = 0; + } + return; + } + + if( quot ) + mpi_resize( quot, qsize); + + /* Read pointers here, when reallocation is finished. */ + np = num->d; + dp = den->d; + rp = rem->d; + + /* Optimize division by a single-limb divisor. */ + if( dsize == 1 ) { + mpi_limb_t rlimb; + if( quot ) { + qp = quot->d; + rlimb = _gcry_mpih_divmod_1( qp, np, nsize, dp[0] ); + qsize -= qp[qsize - 1] == 0; + quot->nlimbs = qsize; + quot->sign = sign_quotient; + } + else + rlimb = _gcry_mpih_mod_1( np, nsize, dp[0] ); + rp[0] = rlimb; + rsize = rlimb != 0?1:0; + rem->nlimbs = rsize; + rem->sign = sign_remainder; + return; + } + + + if( quot ) { + qp = quot->d; + /* Make sure QP and NP point to different objects. Otherwise the + * numerator would be gradually overwritten by the quotient limbs. */ + if(qp == np) { /* Copy NP object to temporary space. */ + marker_nlimbs[markidx] = nsize; + np = marker[markidx++] = mpi_alloc_limb_space(nsize, + mpi_is_secure(quot)); + MPN_COPY(np, qp, nsize); + } + } + else /* Put quotient at top of remainder. */ + qp = rp + dsize; + + count_leading_zeros( normalization_steps, dp[dsize - 1] ); + + /* Normalize the denominator, i.e. make its most significant bit set by + * shifting it NORMALIZATION_STEPS bits to the left. Also shift the + * numerator the same number of steps (to keep the quotient the same!). + */ + if( normalization_steps ) { + mpi_ptr_t tp; + mpi_limb_t nlimb; + + /* Shift up the denominator setting the most significant bit of + * the most significant word. Use temporary storage not to clobber + * the original contents of the denominator. */ + marker_nlimbs[markidx] = dsize; + tp = marker[markidx++] = mpi_alloc_limb_space(dsize,mpi_is_secure(den)); + _gcry_mpih_lshift( tp, dp, dsize, normalization_steps ); + dp = tp; + + /* Shift up the numerator, possibly introducing a new most + * significant word. Move the shifted numerator in the remainder + * meanwhile. */ + nlimb = _gcry_mpih_lshift(rp, np, nsize, normalization_steps); + if( nlimb ) { + rp[nsize] = nlimb; + rsize = nsize + 1; + } + else + rsize = nsize; + } + else { + /* The denominator is already normalized, as required. Copy it to + * temporary space if it overlaps with the quotient or remainder. */ + if( dp == rp || (quot && (dp == qp))) { + mpi_ptr_t tp; + + marker_nlimbs[markidx] = dsize; + tp = marker[markidx++] = mpi_alloc_limb_space(dsize, + mpi_is_secure(den)); + MPN_COPY( tp, dp, dsize ); + dp = tp; + } + + /* Move the numerator to the remainder. */ + if( rp != np ) + MPN_COPY(rp, np, nsize); + + rsize = nsize; + } + + q_limb = _gcry_mpih_divrem( qp, 0, rp, rsize, dp, dsize ); + + if( quot ) { + qsize = rsize - dsize; + if(q_limb) { + qp[qsize] = q_limb; + qsize += 1; + } + + quot->nlimbs = qsize; + quot->sign = sign_quotient; + } + + rsize = dsize; + MPN_NORMALIZE (rp, rsize); + + if( normalization_steps && rsize ) { + _gcry_mpih_rshift(rp, rp, rsize, normalization_steps); + rsize -= rp[rsize - 1] == 0?1:0; + } + + rem->nlimbs = rsize; + rem->sign = sign_remainder; + while( markidx ) + { + markidx--; + _gcry_mpi_free_limb_space (marker[markidx], marker_nlimbs[markidx]); + } +} + +void +_gcry_mpi_tdiv_q_2exp( gcry_mpi_t w, gcry_mpi_t u, unsigned int count ) +{ + mpi_size_t usize, wsize; + mpi_size_t limb_cnt; + + usize = u->nlimbs; + limb_cnt = count / BITS_PER_MPI_LIMB; + wsize = usize - limb_cnt; + if( limb_cnt >= usize ) + w->nlimbs = 0; + else { + mpi_ptr_t wp; + mpi_ptr_t up; + + RESIZE_IF_NEEDED( w, wsize ); + wp = w->d; + up = u->d; + + count %= BITS_PER_MPI_LIMB; + if( count ) { + _gcry_mpih_rshift( wp, up + limb_cnt, wsize, count ); + wsize -= !wp[wsize - 1]; + } + else { + MPN_COPY_INCR( wp, up + limb_cnt, wsize); + } + + w->nlimbs = wsize; + } +} + +/**************** + * Check whether dividend is divisible by divisor + * (note: divisor must fit into a limb) + */ +int +_gcry_mpi_divisible_ui(gcry_mpi_t dividend, ulong divisor ) +{ + return !_gcry_mpih_mod_1( dividend->d, dividend->nlimbs, divisor ); +} + + +void +gcry_mpi_div (gcry_mpi_t quot, gcry_mpi_t rem, gcry_mpi_t dividend, gcry_mpi_t divisor, int round) +{ + if (!round) + { + if (!rem) + { + gcry_mpi_t tmp = mpi_alloc (mpi_get_nlimbs(quot)); + _gcry_mpi_tdiv_qr (quot, tmp, dividend, divisor); + mpi_free (tmp); + } + else + _gcry_mpi_tdiv_qr (quot, rem, dividend, divisor); + } + else if (round < 0) + { + if (!rem) + _gcry_mpi_fdiv_q (quot, dividend, divisor); + else if (!quot) + _gcry_mpi_fdiv_r (rem, dividend, divisor); + else + _gcry_mpi_fdiv_qr (quot, rem, dividend, divisor); + } + else + log_bug ("mpi rounding to ceiling not yet implemented\n"); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-gcd.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-gcd.c new file mode 100644 index 000000000..34bd24941 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-gcd.c @@ -0,0 +1,53 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-gcd.c - MPI functions + * Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include +#include "mpi-internal.h" + +/**************** + * Find the greatest common divisor G of A and B. + * Return: true if this 1, false in all other cases + */ +int +gcry_mpi_gcd( gcry_mpi_t g, gcry_mpi_t xa, gcry_mpi_t xb ) +{ + gcry_mpi_t a, b; + + a = mpi_copy(xa); + b = mpi_copy(xb); + + /* TAOCP Vol II, 4.5.2, Algorithm A */ + a->sign = 0; + b->sign = 0; + while( gcry_mpi_cmp_ui( b, 0 ) ) { + _gcry_mpi_fdiv_r( g, a, b ); /* g used as temorary variable */ + mpi_set(a,b); + mpi_set(b,g); + } + mpi_set(g, a); + + mpi_free(a); + mpi_free(b); + return !gcry_mpi_cmp_ui( g, 1); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-inline.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-inline.c new file mode 100644 index 000000000..4e3e8f3de --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-inline.c @@ -0,0 +1,37 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-inline.c + * Copyright (C) 1999, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include + +/* put the inline functions as real functions into the lib */ +#define G10_MPI_INLINE_DECL + +#include "mpi-internal.h" + +/* always include the header because it is only + * included by mpi-internal if __GCC__ is defined but we + * need it here in all cases and the above definition of + * of the macro allows us to do so + */ +#include "mpi-inline.h" diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-inline.h b/grub-core/lib/libgcrypt-grub/mpi/mpi-inline.h new file mode 100644 index 000000000..0818d2053 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-inline.h @@ -0,0 +1,163 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-inline.h - Internal to the Multi Precision Integers + * Copyright (C) 1994, 1996, 1998, 1999, + * 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#ifndef G10_MPI_INLINE_H +#define G10_MPI_INLINE_H + +/* Starting with gcc 4.3 "extern inline" conforms in c99 mode to the + c99 semantics. To keep the useful old semantics we use an + attribute. */ +#ifndef G10_MPI_INLINE_DECL +# ifdef __GNUC_STDC_INLINE__ +# define G10_MPI_INLINE_DECL extern inline __attribute__ ((__gnu_inline__)) +# else +# define G10_MPI_INLINE_DECL extern __inline__ +# endif +#endif + +G10_MPI_INLINE_DECL mpi_limb_t +_gcry_mpih_add_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb) +{ + mpi_limb_t x; + + x = *s1_ptr++; + s2_limb += x; + *res_ptr++ = s2_limb; + if( s2_limb < x ) { /* sum is less than the left operand: handle carry */ + while( --s1_size ) { + x = *s1_ptr++ + 1; /* add carry */ + *res_ptr++ = x; /* and store */ + if( x ) /* not 0 (no overflow): we can stop */ + goto leave; + } + return 1; /* return carry (size of s1 to small) */ + } + + leave: + if( res_ptr != s1_ptr ) { /* not the same variable */ + mpi_size_t i; /* copy the rest */ + for( i=0; i < s1_size-1; i++ ) + res_ptr[i] = s1_ptr[i]; + } + return 0; /* no carry */ +} + + + +G10_MPI_INLINE_DECL mpi_limb_t +_gcry_mpih_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, + mpi_ptr_t s2_ptr, mpi_size_t s2_size) +{ + mpi_limb_t cy = 0; + + if( s2_size ) + cy = _gcry_mpih_add_n( res_ptr, s1_ptr, s2_ptr, s2_size ); + + if( s1_size - s2_size ) + cy = _gcry_mpih_add_1( res_ptr + s2_size, s1_ptr + s2_size, + s1_size - s2_size, cy); + return cy; +} + + +G10_MPI_INLINE_DECL mpi_limb_t +_gcry_mpih_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb ) +{ + mpi_limb_t x; + + x = *s1_ptr++; + s2_limb = x - s2_limb; + *res_ptr++ = s2_limb; + if( s2_limb > x ) { + while( --s1_size ) { + x = *s1_ptr++; + *res_ptr++ = x - 1; + if( x ) + goto leave; + } + return 1; + } + + leave: + if( res_ptr != s1_ptr ) { + mpi_size_t i; + for( i=0; i < s1_size-1; i++ ) + res_ptr[i] = s1_ptr[i]; + } + return 0; +} + + + +G10_MPI_INLINE_DECL mpi_limb_t +_gcry_mpih_sub( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, + mpi_ptr_t s2_ptr, mpi_size_t s2_size) +{ + mpi_limb_t cy = 0; + + if( s2_size ) + cy = _gcry_mpih_sub_n(res_ptr, s1_ptr, s2_ptr, s2_size); + + if( s1_size - s2_size ) + cy = _gcry_mpih_sub_1(res_ptr + s2_size, s1_ptr + s2_size, + s1_size - s2_size, cy); + return cy; +} + +/**************** + * Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE. + * There are no restrictions on the relative sizes of + * the two arguments. + * Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2. + */ +G10_MPI_INLINE_DECL int +_gcry_mpih_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size ) +{ + mpi_size_t i; + mpi_limb_t op1_word, op2_word; + + for( i = size - 1; i >= 0 ; i--) { + op1_word = op1_ptr[i]; + op2_word = op2_ptr[i]; + if( op1_word != op2_word ) + goto diff; + } + return 0; + + diff: + /* This can *not* be simplified to + * op2_word - op2_word + * since that expression might give signed overflow. */ + return (op1_word > op2_word) ? 1 : -1; +} + + +#endif /*G10_MPI_INLINE_H*/ diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-internal.h b/grub-core/lib/libgcrypt-grub/mpi/mpi-internal.h new file mode 100644 index 000000000..c9684f2bb --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-internal.h @@ -0,0 +1,279 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-internal.h - Internal to the Multi Precision Integers + * Copyright (C) 1994, 1996, 1998, 2000, 2002, + * 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#ifndef G10_MPI_INTERNAL_H +#define G10_MPI_INTERNAL_H + +#include "mpi-asm-defs.h" + +#ifndef BITS_PER_MPI_LIMB +#if BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_INT + typedef unsigned int mpi_limb_t; + typedef signed int mpi_limb_signed_t; +#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG + typedef unsigned long int mpi_limb_t; + typedef signed long int mpi_limb_signed_t; +#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG_LONG + typedef unsigned long long int mpi_limb_t; + typedef signed long long int mpi_limb_signed_t; +#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_SHORT + typedef unsigned short int mpi_limb_t; + typedef signed short int mpi_limb_signed_t; +#else +#error BYTES_PER_MPI_LIMB does not match any C type +#endif +#define BITS_PER_MPI_LIMB (8*BYTES_PER_MPI_LIMB) +#endif /*BITS_PER_MPI_LIMB*/ + +#include "mpi.h" + +/* If KARATSUBA_THRESHOLD is not already defined, define it to a + * value which is good on most machines. */ + +/* tested 4, 16, 32 and 64, where 16 gave the best performance when + * checking a 768 and a 1024 bit ElGamal signature. + * (wk 22.12.97) */ +#ifndef KARATSUBA_THRESHOLD +#define KARATSUBA_THRESHOLD 16 +#endif + +/* The code can't handle KARATSUBA_THRESHOLD smaller than 2. */ +#if KARATSUBA_THRESHOLD < 2 +#undef KARATSUBA_THRESHOLD +#define KARATSUBA_THRESHOLD 2 +#endif + + +typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */ +typedef int mpi_size_t; /* (must be a signed type) */ + +#define ABS(x) (x >= 0 ? x : -x) +#define MIN(l,o) ((l) < (o) ? (l) : (o)) +#define MAX(h,i) ((h) > (i) ? (h) : (i)) +#define RESIZE_IF_NEEDED(a,b) \ + do { \ + if( (a)->alloced < (b) ) \ + mpi_resize((a), (b)); \ + } while(0) + +/* Copy N limbs from S to D. */ +#define MPN_COPY( d, s, n) \ + do { \ + mpi_size_t _i; \ + for( _i = 0; _i < (n); _i++ ) \ + (d)[_i] = (s)[_i]; \ + } while(0) + +#define MPN_COPY_INCR( d, s, n) \ + do { \ + mpi_size_t _i; \ + for( _i = 0; _i < (n); _i++ ) \ + (d)[_i] = (d)[_i]; \ + } while (0) + +#define MPN_COPY_DECR( d, s, n ) \ + do { \ + mpi_size_t _i; \ + for( _i = (n)-1; _i >= 0; _i--) \ + (d)[_i] = (s)[_i]; \ + } while(0) + +/* Zero N limbs at D */ +#define MPN_ZERO(d, n) \ + do { \ + int _i; \ + for( _i = 0; _i < (n); _i++ ) \ + (d)[_i] = 0; \ + } while (0) + +#define MPN_NORMALIZE(d, n) \ + do { \ + while( (n) > 0 ) { \ + if( (d)[(n)-1] ) \ + break; \ + (n)--; \ + } \ + } while(0) + +#define MPN_NORMALIZE_NOT_ZERO(d, n) \ + do { \ + for(;;) { \ + if( (d)[(n)-1] ) \ + break; \ + (n)--; \ + } \ + } while(0) + +#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \ + do { \ + if( (size) < KARATSUBA_THRESHOLD ) \ + mul_n_basecase (prodp, up, vp, size); \ + else \ + mul_n (prodp, up, vp, size, tspace); \ + } while (0); + + +/* Divide the two-limb number in (NH,,NL) by D, with DI being the largest + * limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB). + * If this would yield overflow, DI should be the largest possible number + * (i.e., only ones). For correct operation, the most significant bit of D + * has to be set. Put the quotient in Q and the remainder in R. + */ +#define UDIV_QRNND_PREINV(q, r, nh, nl, d, di) \ + do { \ + mpi_limb_t _q, _ql, _r; \ + mpi_limb_t _xh, _xl; \ + umul_ppmm (_q, _ql, (nh), (di)); \ + _q += (nh); /* DI is 2**BITS_PER_MPI_LIMB too small */ \ + umul_ppmm (_xh, _xl, _q, (d)); \ + sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); \ + if( _xh ) { \ + sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \ + _q++; \ + if( _xh) { \ + sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \ + _q++; \ + } \ + } \ + if( _r >= (d) ) { \ + _r -= (d); \ + _q++; \ + } \ + (r) = _r; \ + (q) = _q; \ + } while (0) + + +/*-- mpiutil.c --*/ +#define mpi_alloc_limb_space(n,f) _gcry_mpi_alloc_limb_space((n),(f)) +mpi_ptr_t _gcry_mpi_alloc_limb_space( unsigned nlimbs, int sec ); +void _gcry_mpi_free_limb_space( mpi_ptr_t a, unsigned int nlimbs ); +void _gcry_mpi_assign_limb_space( gcry_mpi_t a, mpi_ptr_t ap, unsigned nlimbs ); + +/*-- mpi-bit.c --*/ +#define mpi_rshift_limbs(a,n) _gcry_mpi_rshift_limbs ((a), (n)) +#define mpi_lshift_limbs(a,n) _gcry_mpi_lshift_limbs ((a), (n)) + +void _gcry_mpi_rshift_limbs( gcry_mpi_t a, unsigned int count ); +void _gcry_mpi_lshift_limbs( gcry_mpi_t a, unsigned int count ); + + +/*-- mpih-add.c --*/ +mpi_limb_t _gcry_mpih_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb ); +mpi_limb_t _gcry_mpih_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_ptr_t s2_ptr, mpi_size_t size); +mpi_limb_t _gcry_mpih_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, + mpi_ptr_t s2_ptr, mpi_size_t s2_size); + +/*-- mpih-sub.c --*/ +mpi_limb_t _gcry_mpih_sub_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb ); +mpi_limb_t _gcry_mpih_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_ptr_t s2_ptr, mpi_size_t size); +mpi_limb_t _gcry_mpih_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, + mpi_ptr_t s2_ptr, mpi_size_t s2_size); + +/*-- mpih-cmp.c --*/ +int _gcry_mpih_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size ); + +/*-- mpih-mul.c --*/ + +struct karatsuba_ctx { + struct karatsuba_ctx *next; + mpi_ptr_t tspace; + unsigned int tspace_nlimbs; + mpi_size_t tspace_size; + mpi_ptr_t tp; + unsigned int tp_nlimbs; + mpi_size_t tp_size; +}; + +void _gcry_mpih_release_karatsuba_ctx( struct karatsuba_ctx *ctx ); + +mpi_limb_t _gcry_mpih_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb); +mpi_limb_t _gcry_mpih_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb); +void _gcry_mpih_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, + mpi_size_t size); +mpi_limb_t _gcry_mpih_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, + mpi_ptr_t vp, mpi_size_t vsize); +void _gcry_mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size ); +void _gcry_mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size, + mpi_ptr_t tspace); + +void _gcry_mpih_mul_karatsuba_case( mpi_ptr_t prodp, + mpi_ptr_t up, mpi_size_t usize, + mpi_ptr_t vp, mpi_size_t vsize, + struct karatsuba_ctx *ctx ); + + +/*-- mpih-mul_1.c (or xxx/cpu/ *.S) --*/ +mpi_limb_t _gcry_mpih_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb); + +/*-- mpih-div.c --*/ +mpi_limb_t _gcry_mpih_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, + mpi_limb_t divisor_limb); +mpi_limb_t _gcry_mpih_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs, + mpi_ptr_t np, mpi_size_t nsize, + mpi_ptr_t dp, mpi_size_t dsize); +mpi_limb_t _gcry_mpih_divmod_1( mpi_ptr_t quot_ptr, + mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, + mpi_limb_t divisor_limb); + +/*-- mpih-shift.c --*/ +mpi_limb_t _gcry_mpih_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, + unsigned cnt); +mpi_limb_t _gcry_mpih_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, + unsigned cnt); + + +/* Define stuff for longlong.h. */ +#define W_TYPE_SIZE BITS_PER_MPI_LIMB + typedef mpi_limb_t UWtype; + typedef unsigned int UHWtype; +#if defined (__GNUC__) + typedef unsigned int UQItype __attribute__ ((mode (QI))); + typedef int SItype __attribute__ ((mode (SI))); + typedef unsigned int USItype __attribute__ ((mode (SI))); + typedef int DItype __attribute__ ((mode (DI))); + typedef unsigned int UDItype __attribute__ ((mode (DI))); +#else + typedef unsigned char UQItype; + typedef long SItype; + typedef unsigned long USItype; +#endif + +#ifdef __GNUC__ +#include "mpi-inline.h" +#endif + +#endif /*G10_MPI_INTERNAL_H*/ diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-inv.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-inv.c new file mode 100644 index 000000000..684384f7f --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-inv.c @@ -0,0 +1,269 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-inv.c - MPI functions + * Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "g10lib.h" + +/**************** + * Calculate the multiplicative inverse X of A mod N + * That is: Find the solution x for + * 1 = (a*x) mod n + */ +int +gcry_mpi_invm( gcry_mpi_t x, gcry_mpi_t a, gcry_mpi_t n ) +{ +#if 0 + gcry_mpi_t u, v, u1, u2, u3, v1, v2, v3, q, t1, t2, t3; + gcry_mpi_t ta, tb, tc; + + u = mpi_copy(a); + v = mpi_copy(n); + u1 = mpi_alloc_set_ui(1); + u2 = mpi_alloc_set_ui(0); + u3 = mpi_copy(u); + v1 = mpi_alloc_set_ui(0); + v2 = mpi_alloc_set_ui(1); + v3 = mpi_copy(v); + q = mpi_alloc( mpi_get_nlimbs(u)+1 ); + t1 = mpi_alloc( mpi_get_nlimbs(u)+1 ); + t2 = mpi_alloc( mpi_get_nlimbs(u)+1 ); + t3 = mpi_alloc( mpi_get_nlimbs(u)+1 ); + while( mpi_cmp_ui( v3, 0 ) ) { + mpi_fdiv_q( q, u3, v3 ); + mpi_mul(t1, v1, q); mpi_mul(t2, v2, q); mpi_mul(t3, v3, q); + mpi_sub(t1, u1, t1); mpi_sub(t2, u2, t2); mpi_sub(t3, u3, t3); + mpi_set(u1, v1); mpi_set(u2, v2); mpi_set(u3, v3); + mpi_set(v1, t1); mpi_set(v2, t2); mpi_set(v3, t3); + } + /* log_debug("result:\n"); + log_mpidump("q =", q ); + log_mpidump("u1=", u1); + log_mpidump("u2=", u2); + log_mpidump("u3=", u3); + log_mpidump("v1=", v1); + log_mpidump("v2=", v2); */ + mpi_set(x, u1); + + mpi_free(u1); + mpi_free(u2); + mpi_free(u3); + mpi_free(v1); + mpi_free(v2); + mpi_free(v3); + mpi_free(q); + mpi_free(t1); + mpi_free(t2); + mpi_free(t3); + mpi_free(u); + mpi_free(v); +#elif 0 + /* Extended Euclid's algorithm (See TAOCP Vol II, 4.5.2, Alg X) + * modified according to Michael Penk's solution for Exercise 35 */ + + /* FIXME: we can simplify this in most cases (see Knuth) */ + gcry_mpi_t u, v, u1, u2, u3, v1, v2, v3, t1, t2, t3; + unsigned k; + int sign; + + u = mpi_copy(a); + v = mpi_copy(n); + for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) { + mpi_rshift(u, u, 1); + mpi_rshift(v, v, 1); + } + + + u1 = mpi_alloc_set_ui(1); + u2 = mpi_alloc_set_ui(0); + u3 = mpi_copy(u); + v1 = mpi_copy(v); /* !-- used as const 1 */ + v2 = mpi_alloc( mpi_get_nlimbs(u) ); mpi_sub( v2, u1, u ); + v3 = mpi_copy(v); + if( mpi_test_bit(u, 0) ) { /* u is odd */ + t1 = mpi_alloc_set_ui(0); + t2 = mpi_alloc_set_ui(1); t2->sign = 1; + t3 = mpi_copy(v); t3->sign = !t3->sign; + goto Y4; + } + else { + t1 = mpi_alloc_set_ui(1); + t2 = mpi_alloc_set_ui(0); + t3 = mpi_copy(u); + } + do { + do { + if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */ + mpi_add(t1, t1, v); + mpi_sub(t2, t2, u); + } + mpi_rshift(t1, t1, 1); + mpi_rshift(t2, t2, 1); + mpi_rshift(t3, t3, 1); + Y4: + ; + } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */ + + if( !t3->sign ) { + mpi_set(u1, t1); + mpi_set(u2, t2); + mpi_set(u3, t3); + } + else { + mpi_sub(v1, v, t1); + sign = u->sign; u->sign = !u->sign; + mpi_sub(v2, u, t2); + u->sign = sign; + sign = t3->sign; t3->sign = !t3->sign; + mpi_set(v3, t3); + t3->sign = sign; + } + mpi_sub(t1, u1, v1); + mpi_sub(t2, u2, v2); + mpi_sub(t3, u3, v3); + if( t1->sign ) { + mpi_add(t1, t1, v); + mpi_sub(t2, t2, u); + } + } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */ + /* mpi_lshift( u3, k ); */ + mpi_set(x, u1); + + mpi_free(u1); + mpi_free(u2); + mpi_free(u3); + mpi_free(v1); + mpi_free(v2); + mpi_free(v3); + mpi_free(t1); + mpi_free(t2); + mpi_free(t3); +#else + /* Extended Euclid's algorithm (See TAOCP Vol II, 4.5.2, Alg X) + * modified according to Michael Penk's solution for Exercise 35 + * with further enhancement */ + gcry_mpi_t u, v, u1, u2=NULL, u3, v1, v2=NULL, v3, t1, t2=NULL, t3; + unsigned k; + int sign; + int odd ; + + u = mpi_copy(a); + v = mpi_copy(n); + + for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) { + mpi_rshift(u, u, 1); + mpi_rshift(v, v, 1); + } + odd = mpi_test_bit(v,0); + + u1 = mpi_alloc_set_ui(1); + if( !odd ) + u2 = mpi_alloc_set_ui(0); + u3 = mpi_copy(u); + v1 = mpi_copy(v); + if( !odd ) { + v2 = mpi_alloc( mpi_get_nlimbs(u) ); + mpi_sub( v2, u1, u ); /* U is used as const 1 */ + } + v3 = mpi_copy(v); + if( mpi_test_bit(u, 0) ) { /* u is odd */ + t1 = mpi_alloc_set_ui(0); + if( !odd ) { + t2 = mpi_alloc_set_ui(1); t2->sign = 1; + } + t3 = mpi_copy(v); t3->sign = !t3->sign; + goto Y4; + } + else { + t1 = mpi_alloc_set_ui(1); + if( !odd ) + t2 = mpi_alloc_set_ui(0); + t3 = mpi_copy(u); + } + do { + do { + if( !odd ) { + if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */ + mpi_add(t1, t1, v); + mpi_sub(t2, t2, u); + } + mpi_rshift(t1, t1, 1); + mpi_rshift(t2, t2, 1); + mpi_rshift(t3, t3, 1); + } + else { + if( mpi_test_bit(t1, 0) ) + mpi_add(t1, t1, v); + mpi_rshift(t1, t1, 1); + mpi_rshift(t3, t3, 1); + } + Y4: + ; + } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */ + + if( !t3->sign ) { + mpi_set(u1, t1); + if( !odd ) + mpi_set(u2, t2); + mpi_set(u3, t3); + } + else { + mpi_sub(v1, v, t1); + sign = u->sign; u->sign = !u->sign; + if( !odd ) + mpi_sub(v2, u, t2); + u->sign = sign; + sign = t3->sign; t3->sign = !t3->sign; + mpi_set(v3, t3); + t3->sign = sign; + } + mpi_sub(t1, u1, v1); + if( !odd ) + mpi_sub(t2, u2, v2); + mpi_sub(t3, u3, v3); + if( t1->sign ) { + mpi_add(t1, t1, v); + if( !odd ) + mpi_sub(t2, t2, u); + } + } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */ + /* mpi_lshift( u3, k ); */ + mpi_set(x, u1); + + mpi_free(u1); + mpi_free(v1); + mpi_free(t1); + if( !odd ) { + mpi_free(u2); + mpi_free(v2); + mpi_free(t2); + } + mpi_free(u3); + mpi_free(v3); + mpi_free(t3); + + mpi_free(u); + mpi_free(v); +#endif + return 1; +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-mod.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-mod.c new file mode 100644 index 000000000..6d9a6a331 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-mod.c @@ -0,0 +1,186 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-mod.c - Modular reduction + Copyright (C) 1998, 1999, 2001, 2002, 2003, + 2007 Free Software Foundation, Inc. + + This file is part of Libgcrypt. + + Libgcrypt is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + Libgcrypt is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + + +#include +#include +#include + +#include "mpi-internal.h" +#include "longlong.h" +#include "g10lib.h" + + +/* Context used with Barrett reduction. */ +struct barrett_ctx_s +{ + gcry_mpi_t m; /* The modulus - may not be modified. */ + int m_copied; /* If true, M needs to be released. */ + int k; + gcry_mpi_t y; + gcry_mpi_t r1; /* Helper MPI. */ + gcry_mpi_t r2; /* Helper MPI. */ + gcry_mpi_t r3; /* Helper MPI allocated on demand. */ +}; + + + +void +_gcry_mpi_mod (gcry_mpi_t rem, gcry_mpi_t dividend, gcry_mpi_t divisor) +{ + _gcry_mpi_fdiv_r (rem, dividend, divisor); + rem->sign = 0; +} + + +/* This function returns a new context for Barrett based operations on + the modulus M. This context needs to be released using + _gcry_mpi_barrett_free. If COPY is true M will be transferred to + the context and the user may change M. If COPY is false, M may not + be changed until gcry_mpi_barrett_free has been called. */ +mpi_barrett_t +_gcry_mpi_barrett_init (gcry_mpi_t m, int copy) +{ + mpi_barrett_t ctx; + gcry_mpi_t tmp; + + mpi_normalize (m); + ctx = gcry_xcalloc (1, sizeof *ctx); + + if (copy) + { + ctx->m = mpi_copy (m); + ctx->m_copied = 1; + } + else + ctx->m = m; + + ctx->k = mpi_get_nlimbs (m); + tmp = mpi_alloc (ctx->k + 1); + + /* Barrett precalculation: y = floor(b^(2k) / m). */ + mpi_set_ui (tmp, 1); + mpi_lshift_limbs (tmp, 2 * ctx->k); + mpi_fdiv_q (tmp, tmp, m); + + ctx->y = tmp; + ctx->r1 = mpi_alloc ( 2 * ctx->k + 1 ); + ctx->r2 = mpi_alloc ( 2 * ctx->k + 1 ); + + return ctx; +} + +void +_gcry_mpi_barrett_free (mpi_barrett_t ctx) +{ + if (ctx) + { + mpi_free (ctx->y); + mpi_free (ctx->r1); + mpi_free (ctx->r2); + if (ctx->r3) + mpi_free (ctx->r3); + if (ctx->m_copied) + mpi_free (ctx->m); + gcry_free (ctx); + } +} + + +/* R = X mod M + + Using Barrett reduction. Before using this function + _gcry_mpi_barrett_init must have been called to do the + precalculations. CTX is the context created by this precalculation + and also conveys M. If the Barret reduction could no be done a + starightforward reduction method is used. + + We assume that these conditions are met: + Input: x =(x_2k-1 ...x_0)_b + m =(m_k-1 ....m_0)_b with m_k-1 != 0 + Output: r = x mod m + */ +void +_gcry_mpi_mod_barrett (gcry_mpi_t r, gcry_mpi_t x, mpi_barrett_t ctx) +{ + gcry_mpi_t m = ctx->m; + int k = ctx->k; + gcry_mpi_t y = ctx->y; + gcry_mpi_t r1 = ctx->r1; + gcry_mpi_t r2 = ctx->r2; + + mpi_normalize (x); + if (mpi_get_nlimbs (x) > 2*k ) + { + mpi_mod (r, x, m); + return; + } + + /* 1. q1 = floor( x / b^k-1) + * q2 = q1 * y + * q3 = floor( q2 / b^k+1 ) + * Actually, we don't need qx, we can work direct on r2 + */ + mpi_set ( r2, x ); + mpi_rshift_limbs ( r2, k-1 ); + mpi_mul ( r2, r2, y ); + mpi_rshift_limbs ( r2, k+1 ); + + /* 2. r1 = x mod b^k+1 + * r2 = q3 * m mod b^k+1 + * r = r1 - r2 + * 3. if r < 0 then r = r + b^k+1 + */ + mpi_set ( r1, x ); + if ( r1->nlimbs > k+1 ) /* Quick modulo operation. */ + r1->nlimbs = k+1; + mpi_mul ( r2, r2, m ); + if ( r2->nlimbs > k+1 ) /* Quick modulo operation. */ + r2->nlimbs = k+1; + mpi_sub ( r, r1, r2 ); + + if ( mpi_is_neg( r ) ) + { + if (!ctx->r3) + { + ctx->r3 = mpi_alloc ( k + 2 ); + mpi_set_ui (ctx->r3, 1); + mpi_lshift_limbs (ctx->r3, k + 1 ); + } + mpi_add ( r, r, ctx->r3 ); + } + + /* 4. while r >= m do r = r - m */ + while ( mpi_cmp( r, m ) >= 0 ) + mpi_sub ( r, r, m ); + +} + + +void +_gcry_mpi_mul_barrett (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, + mpi_barrett_t ctx) +{ + gcry_mpi_mul (w, u, v); + mpi_mod_barrett (w, w, ctx); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-mpow.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-mpow.c new file mode 100644 index 000000000..afef4336d --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-mpow.c @@ -0,0 +1,225 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-mpow.c - MPI functions + * Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include +#include +#include + +#include "mpi-internal.h" +#include "longlong.h" +#include "g10lib.h" + + +/* Barrett is slower than the classical way. It can be tweaked by + * using partial multiplications + */ +/*#define USE_BARRETT*/ + + + +#ifdef USE_BARRETT +static void barrett_mulm( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m, gcry_mpi_t y, int k, gcry_mpi_t r1, gcry_mpi_t r2 ); +static gcry_mpi_t init_barrett( gcry_mpi_t m, int *k, gcry_mpi_t *r1, gcry_mpi_t *r2 ); +static int calc_barrett( gcry_mpi_t r, gcry_mpi_t x, gcry_mpi_t m, gcry_mpi_t y, int k, gcry_mpi_t r1, gcry_mpi_t r2 ); +#else +#define barrett_mulm( w, u, v, m, y, k, r1, r2 ) gcry_mpi_mulm( (w), (u), (v), (m) ) +#endif + + +static int +build_index( gcry_mpi_t *exparray, int k, int i, int t ) +{ + int j, bitno; + int idx = 0; + + bitno = t-i; + for(j=k-1; j >= 0; j-- ) { + idx <<= 1; + if( mpi_test_bit( exparray[j], bitno ) ) + idx |= 1; + } + /*log_debug("t=%d i=%d idx=%d\n", t, i, idx );*/ + return idx; +} + +/**************** + * RES = (BASE[0] ^ EXP[0]) * (BASE[1] ^ EXP[1]) * ... * mod M + */ +void +_gcry_mpi_mulpowm( gcry_mpi_t res, gcry_mpi_t *basearray, gcry_mpi_t *exparray, gcry_mpi_t m) +{ + int k; /* number of elements */ + int t; /* bit size of largest exponent */ + int i, j, idx; + gcry_mpi_t *G; /* table with precomputed values of size 2^k */ + gcry_mpi_t tmp; +#ifdef USE_BARRETT + gcry_mpi_t barrett_y, barrett_r1, barrett_r2; + int barrett_k; +#endif + + for(k=0; basearray[k]; k++ ) + ; + gcry_assert(k); + for(t=0, i=0; (tmp=exparray[i]); i++ ) { + /*log_mpidump("exp: ", tmp );*/ + j = mpi_get_nbits(tmp); + if( j > t ) + t = j; + } + /*log_mpidump("mod: ", m );*/ + gcry_assert (i==k); + gcry_assert (t); + gcry_assert (k < 10); + + G = gcry_xcalloc( (1<= 0 && idx < (1< 3 ? k-3:0; + + mpi_normalize( x ); + if( mpi_get_nlimbs(x) > 2*k ) + return 1; /* can't do it */ + + /* 1. q1 = floor( x / b^k-1) + * q2 = q1 * y + * q3 = floor( q2 / b^k+1 ) + * Actually, we don't need qx, we can work direct on r2 + */ + mpi_set( r2, x ); + mpi_rshift_limbs( r2, k-1 ); + mpi_mul( r2, r2, y ); + mpi_rshift_limbs( r2, k+1 ); + + /* 2. r1 = x mod b^k+1 + * r2 = q3 * m mod b^k+1 + * r = r1 - r2 + * 3. if r < 0 then r = r + b^k+1 + */ + mpi_set( r1, x ); + if( r1->nlimbs > k+1 ) /* quick modulo operation */ + r1->nlimbs = k+1; + mpi_mul( r2, r2, m ); + if( r2->nlimbs > k+1 ) /* quick modulo operation */ + r2->nlimbs = k+1; + mpi_sub( r, r1, r2 ); + + if( mpi_is_neg( r ) ) { + gcry_mpi_t tmp; + + tmp = mpi_alloc( k + 2 ); + mpi_set_ui( tmp, 1 ); + mpi_lshift_limbs( tmp, k+1 ); + mpi_add( r, r, tmp ); + mpi_free(tmp); + } + + /* 4. while r >= m do r = r - m */ + while( mpi_cmp( r, m ) >= 0 ) + mpi_sub( r, r, m ); + + return 0; +} +#endif /* USE_BARRETT */ diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-mul.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-mul.c new file mode 100644 index 000000000..d30554729 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-mul.c @@ -0,0 +1,214 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-mul.c - MPI functions + * Copyright (C) 1994, 1996, 1998, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" + + +void +gcry_mpi_mul_ui( gcry_mpi_t prod, gcry_mpi_t mult, unsigned long small_mult ) +{ + mpi_size_t size, prod_size; + mpi_ptr_t prod_ptr; + mpi_limb_t cy; + int sign; + + size = mult->nlimbs; + sign = mult->sign; + + if( !size || !small_mult ) { + prod->nlimbs = 0; + prod->sign = 0; + return; + } + + prod_size = size + 1; + if( prod->alloced < prod_size ) + mpi_resize( prod, prod_size ); + prod_ptr = prod->d; + + cy = _gcry_mpih_mul_1( prod_ptr, mult->d, size, (mpi_limb_t)small_mult ); + if( cy ) + prod_ptr[size++] = cy; + prod->nlimbs = size; + prod->sign = sign; +} + + +void +gcry_mpi_mul_2exp( gcry_mpi_t w, gcry_mpi_t u, unsigned long cnt) +{ + mpi_size_t usize, wsize, limb_cnt; + mpi_ptr_t wp; + mpi_limb_t wlimb; + int usign, wsign; + + usize = u->nlimbs; + usign = u->sign; + + if( !usize ) { + w->nlimbs = 0; + w->sign = 0; + return; + } + + limb_cnt = cnt / BITS_PER_MPI_LIMB; + wsize = usize + limb_cnt + 1; + if( w->alloced < wsize ) + mpi_resize(w, wsize ); + wp = w->d; + wsize = usize + limb_cnt; + wsign = usign; + + cnt %= BITS_PER_MPI_LIMB; + if( cnt ) { + wlimb = _gcry_mpih_lshift( wp + limb_cnt, u->d, usize, cnt ); + if( wlimb ) { + wp[wsize] = wlimb; + wsize++; + } + } + else { + MPN_COPY_DECR( wp + limb_cnt, u->d, usize ); + } + + /* Zero all whole limbs at low end. Do it here and not before calling + * mpn_lshift, not to lose for U == W. */ + MPN_ZERO( wp, limb_cnt ); + + w->nlimbs = wsize; + w->sign = wsign; +} + + +void +gcry_mpi_mul( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v) +{ + mpi_size_t usize, vsize, wsize; + mpi_ptr_t up, vp, wp; + mpi_limb_t cy; + int usign, vsign, usecure, vsecure, sign_product; + int assign_wp=0; + mpi_ptr_t tmp_limb=NULL; + unsigned int tmp_limb_nlimbs = 0; + + if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */ + usize = v->nlimbs; + usign = v->sign; + usecure = mpi_is_secure(v); + up = v->d; + vsize = u->nlimbs; + vsign = u->sign; + vsecure = mpi_is_secure(u); + vp = u->d; + } + else { + usize = u->nlimbs; + usign = u->sign; + usecure = mpi_is_secure(u); + up = u->d; + vsize = v->nlimbs; + vsign = v->sign; + vsecure = mpi_is_secure(v); + vp = v->d; + } + sign_product = usign ^ vsign; + wp = w->d; + + /* Ensure W has space enough to store the result. */ + wsize = usize + vsize; + if ( !mpi_is_secure (w) && (mpi_is_secure (u) || mpi_is_secure (v)) ) { + /* w is not allocated in secure space but u or v is. To make sure + * that no temporray results are stored in w, we temporary use + * a newly allocated limb space for w */ + wp = mpi_alloc_limb_space( wsize, 1 ); + assign_wp = 2; /* mark it as 2 so that we can later copy it back to + * mormal memory */ + } + else if( w->alloced < wsize ) { + if( wp == up || wp == vp ) { + wp = mpi_alloc_limb_space( wsize, mpi_is_secure(w) ); + assign_wp = 1; + } + else { + mpi_resize(w, wsize ); + wp = w->d; + } + } + else { /* Make U and V not overlap with W. */ + if( wp == up ) { + /* W and U are identical. Allocate temporary space for U. */ + tmp_limb_nlimbs = usize; + up = tmp_limb = mpi_alloc_limb_space( usize, usecure ); + /* Is V identical too? Keep it identical with U. */ + if( wp == vp ) + vp = up; + /* Copy to the temporary space. */ + MPN_COPY( up, wp, usize ); + } + else if( wp == vp ) { + /* W and V are identical. Allocate temporary space for V. */ + tmp_limb_nlimbs = vsize; + vp = tmp_limb = mpi_alloc_limb_space( vsize, vsecure ); + /* Copy to the temporary space. */ + MPN_COPY( vp, wp, vsize ); + } + } + + if( !vsize ) + wsize = 0; + else { + cy = _gcry_mpih_mul( wp, up, usize, vp, vsize ); + wsize -= cy? 0:1; + } + + if( assign_wp ) { + if (assign_wp == 2) { + /* copy the temp wp from secure memory back to normal memory */ + mpi_ptr_t tmp_wp = mpi_alloc_limb_space (wsize, 0); + MPN_COPY (tmp_wp, wp, wsize); + _gcry_mpi_free_limb_space (wp, 0); + wp = tmp_wp; + } + _gcry_mpi_assign_limb_space( w, wp, wsize ); + } + w->nlimbs = wsize; + w->sign = sign_product; + if( tmp_limb ) + _gcry_mpi_free_limb_space (tmp_limb, tmp_limb_nlimbs); +} + + +void +gcry_mpi_mulm( gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m) +{ + gcry_mpi_mul(w, u, v); + _gcry_mpi_fdiv_r( w, w, m ); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpi-pow.c b/grub-core/lib/libgcrypt-grub/mpi/mpi-pow.c new file mode 100644 index 000000000..f6b3f58d7 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpi-pow.c @@ -0,0 +1,340 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpi-pow.c - MPI functions for exponentiation + * Copyright (C) 1994, 1996, 1998, 2000, 2002 + * 2003 Free Software Foundation, Inc. + * 2013 g10 Code GmbH + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include + +#include "mpi-internal.h" +#include "longlong.h" + + +/**************** + * RES = BASE ^ EXPO mod MOD + */ +void +gcry_mpi_powm (gcry_mpi_t res, + gcry_mpi_t base, gcry_mpi_t expo, gcry_mpi_t mod) +{ + /* Pointer to the limbs of the arguments, their size and signs. */ + mpi_ptr_t rp, ep, mp, bp; + mpi_size_t esize, msize, bsize, rsize; + int msign, bsign, rsign; + /* Flags telling the secure allocation status of the arguments. */ + int esec, msec, bsec; + /* Size of the result including space for temporary values. */ + mpi_size_t size; + /* Helper. */ + int mod_shift_cnt; + int negative_result; + mpi_ptr_t mp_marker = NULL; + mpi_ptr_t bp_marker = NULL; + mpi_ptr_t ep_marker = NULL; + mpi_ptr_t xp_marker = NULL; + unsigned int mp_nlimbs = 0; + unsigned int bp_nlimbs = 0; + unsigned int ep_nlimbs = 0; + unsigned int xp_nlimbs = 0; + mpi_ptr_t tspace = NULL; + mpi_size_t tsize = 0; + + + esize = expo->nlimbs; + msize = mod->nlimbs; + size = 2 * msize; + msign = mod->sign; + + esec = mpi_is_secure(expo); + msec = mpi_is_secure(mod); + bsec = mpi_is_secure(base); + + rp = res->d; + ep = expo->d; + + if (!msize) + grub_fatal ("mpi division by zero"); + + if (!esize) + { + /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 depending + on if MOD equals 1. */ + res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1; + if (res->nlimbs) + { + RESIZE_IF_NEEDED (res, 1); + rp = res->d; + rp[0] = 1; + } + res->sign = 0; + goto leave; + } + + /* Normalize MOD (i.e. make its most significant bit set) as + required by mpn_divrem. This will make the intermediate values + in the calculation slightly larger, but the correct result is + obtained after a final reduction using the original MOD value. */ + mp_nlimbs = msec? msize:0; + mp = mp_marker = mpi_alloc_limb_space(msize, msec); + count_leading_zeros (mod_shift_cnt, mod->d[msize-1]); + if (mod_shift_cnt) + _gcry_mpih_lshift (mp, mod->d, msize, mod_shift_cnt); + else + MPN_COPY( mp, mod->d, msize ); + + bsize = base->nlimbs; + bsign = base->sign; + if (bsize > msize) + { + /* The base is larger than the module. Reduce it. + + Allocate (BSIZE + 1) with space for remainder and quotient. + (The quotient is (bsize - msize + 1) limbs.) */ + bp_nlimbs = bsec ? (bsize + 1):0; + bp = bp_marker = mpi_alloc_limb_space( bsize + 1, bsec ); + MPN_COPY ( bp, base->d, bsize ); + /* We don't care about the quotient, store it above the + * remainder, at BP + MSIZE. */ + _gcry_mpih_divrem( bp + msize, 0, bp, bsize, mp, msize ); + bsize = msize; + /* Canonicalize the base, since we are going to multiply with it + quite a few times. */ + MPN_NORMALIZE( bp, bsize ); + } + else + bp = base->d; + + if (!bsize) + { + res->nlimbs = 0; + res->sign = 0; + goto leave; + } + + + /* Make BASE, EXPO and MOD not overlap with RES. */ + if ( rp == bp ) + { + /* RES and BASE are identical. Allocate temp. space for BASE. */ + gcry_assert (!bp_marker); + bp_nlimbs = bsec? bsize:0; + bp = bp_marker = mpi_alloc_limb_space( bsize, bsec ); + MPN_COPY(bp, rp, bsize); + } + if ( rp == ep ) + { + /* RES and EXPO are identical. Allocate temp. space for EXPO. */ + ep_nlimbs = esec? esize:0; + ep = ep_marker = mpi_alloc_limb_space( esize, esec ); + MPN_COPY(ep, rp, esize); + } + if ( rp == mp ) + { + /* RES and MOD are identical. Allocate temporary space for MOD.*/ + gcry_assert (!mp_marker); + mp_nlimbs = msec?msize:0; + mp = mp_marker = mpi_alloc_limb_space( msize, msec ); + MPN_COPY(mp, rp, msize); + } + + /* Copy base to the result. */ + if (res->alloced < size) + { + mpi_resize (res, size); + rp = res->d; + } + MPN_COPY ( rp, bp, bsize ); + rsize = bsize; + rsign = bsign; + + /* Main processing. */ + { + mpi_size_t i; + mpi_ptr_t xp; + int c; + mpi_limb_t e; + mpi_limb_t carry_limb; + struct karatsuba_ctx karactx; + + xp_nlimbs = msec? (2 * (msize + 1)):0; + xp = xp_marker = mpi_alloc_limb_space( 2 * (msize + 1), msec ); + + memset( &karactx, 0, sizeof karactx ); + negative_result = (ep[0] & 1) && base->sign; + + i = esize - 1; + e = ep[i]; + count_leading_zeros (c, e); + e = (e << c) << 1; /* Shift the expo bits to the left, lose msb. */ + c = BITS_PER_MPI_LIMB - 1 - c; + + /* Main loop. + + Make the result be pointed to alternately by XP and RP. This + helps us avoid block copying, which would otherwise be + necessary with the overlap restrictions of + _gcry_mpih_divmod. With 50% probability the result after this + loop will be in the area originally pointed by RP (==RES->d), + and with 50% probability in the area originally pointed to by XP. */ + for (;;) + { + while (c) + { + mpi_ptr_t tp; + mpi_size_t xsize; + + /*mpih_mul_n(xp, rp, rp, rsize);*/ + if ( rsize < KARATSUBA_THRESHOLD ) + _gcry_mpih_sqr_n_basecase( xp, rp, rsize ); + else + { + if ( !tspace ) + { + tsize = 2 * rsize; + tspace = mpi_alloc_limb_space( tsize, 0 ); + } + else if ( tsize < (2*rsize) ) + { + _gcry_mpi_free_limb_space (tspace, 0); + tsize = 2 * rsize; + tspace = mpi_alloc_limb_space (tsize, 0 ); + } + _gcry_mpih_sqr_n (xp, rp, rsize, tspace); + } + + xsize = 2 * rsize; + if ( xsize > msize ) + { + _gcry_mpih_divrem(xp + msize, 0, xp, xsize, mp, msize); + xsize = msize; + } + + tp = rp; rp = xp; xp = tp; + rsize = xsize; + + /* To mitigate the Yarom/Falkner flush+reload cache + * side-channel attack on the RSA secret exponent, we do + * the multiplication regardless of the value of the + * high-bit of E. But to avoid this performance penalty + * we do it only if the exponent has been stored in secure + * memory and we can thus assume it is a secret exponent. */ + if (esec || (mpi_limb_signed_t)e < 0) + { + /*mpih_mul( xp, rp, rsize, bp, bsize );*/ + if( bsize < KARATSUBA_THRESHOLD ) + _gcry_mpih_mul ( xp, rp, rsize, bp, bsize ); + else + _gcry_mpih_mul_karatsuba_case (xp, rp, rsize, bp, bsize, + &karactx); + + xsize = rsize + bsize; + if ( xsize > msize ) + { + _gcry_mpih_divrem(xp + msize, 0, xp, xsize, mp, msize); + xsize = msize; + } + } + if ( (mpi_limb_signed_t)e < 0 ) + { + tp = rp; rp = xp; xp = tp; + rsize = xsize; + } + e <<= 1; + c--; + } + + i--; + if ( i < 0 ) + break; + e = ep[i]; + c = BITS_PER_MPI_LIMB; + } + + /* We shifted MOD, the modulo reduction argument, left + MOD_SHIFT_CNT steps. Adjust the result by reducing it with the + original MOD. + + Also make sure the result is put in RES->d (where it already + might be, see above). */ + if ( mod_shift_cnt ) + { + carry_limb = _gcry_mpih_lshift( res->d, rp, rsize, mod_shift_cnt); + rp = res->d; + if ( carry_limb ) + { + rp[rsize] = carry_limb; + rsize++; + } + } + else if (res->d != rp) + { + MPN_COPY (res->d, rp, rsize); + rp = res->d; + } + + if ( rsize >= msize ) + { + _gcry_mpih_divrem(rp + msize, 0, rp, rsize, mp, msize); + rsize = msize; + } + + /* Remove any leading zero words from the result. */ + if ( mod_shift_cnt ) + _gcry_mpih_rshift( rp, rp, rsize, mod_shift_cnt); + MPN_NORMALIZE (rp, rsize); + + _gcry_mpih_release_karatsuba_ctx (&karactx ); + } + + /* Fixup for negative results. */ + if ( negative_result && rsize ) + { + if ( mod_shift_cnt ) + _gcry_mpih_rshift( mp, mp, msize, mod_shift_cnt); + _gcry_mpih_sub( rp, mp, msize, rp, rsize); + rsize = msize; + rsign = msign; + MPN_NORMALIZE(rp, rsize); + } + gcry_assert (res->d == rp); + res->nlimbs = rsize; + res->sign = rsign; + + leave: + if (mp_marker) + _gcry_mpi_free_limb_space( mp_marker, mp_nlimbs ); + if (bp_marker) + _gcry_mpi_free_limb_space( bp_marker, bp_nlimbs ); + if (ep_marker) + _gcry_mpi_free_limb_space( ep_marker, ep_nlimbs ); + if (xp_marker) + _gcry_mpi_free_limb_space( xp_marker, xp_nlimbs ); + if (tspace) + _gcry_mpi_free_limb_space( tspace, 0 ); +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c b/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c new file mode 100644 index 000000000..3d55dfcb3 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpicoder.c @@ -0,0 +1,752 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpicoder.c - Coder for the external representation of MPIs + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +#include +#include +#include +#include + +#include "mpi-internal.h" +#include "g10lib.h" + +#define MAX_EXTERN_MPI_BITS 16384 + +/* Helper used to scan PGP style MPIs. Returns NULL on failure. */ +static gcry_mpi_t +mpi_read_from_buffer (const unsigned char *buffer, unsigned *ret_nread, + int secure) +{ + int i, j; + unsigned int nbits, nbytes, nlimbs, nread=0; + mpi_limb_t a; + gcry_mpi_t val = MPI_NULL; + + if ( *ret_nread < 2 ) + goto leave; + nbits = buffer[0] << 8 | buffer[1]; + if ( nbits > MAX_EXTERN_MPI_BITS ) + { +/* log_debug ("mpi too large (%u bits)\n", nbits); */ + goto leave; + } + buffer += 2; + nread = 2; + + nbytes = (nbits+7) / 8; + nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; + val = secure? mpi_alloc_secure (nlimbs) : mpi_alloc (nlimbs); + i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; + i %= BYTES_PER_MPI_LIMB; + j= val->nlimbs = nlimbs; + val->sign = 0; + for ( ; j > 0; j-- ) + { + a = 0; + for (; i < BYTES_PER_MPI_LIMB; i++ ) + { + if ( ++nread > *ret_nread ) + { +/* log_debug ("mpi larger than buffer"); */ + mpi_free (val); + val = NULL; + goto leave; + } + a <<= 8; + a |= *buffer++; + } + i = 0; + val->d[j-1] = a; + } + + leave: + *ret_nread = nread; + return val; +} + + +/**************** + * Fill the mpi VAL from the hex string in STR. + */ +static int +mpi_fromstr (gcry_mpi_t val, const char *str) +{ + int sign = 0; + int prepend_zero = 0; + int i, j, c, c1, c2; + unsigned int nbits, nbytes, nlimbs; + mpi_limb_t a; + + if ( *str == '-' ) + { + sign = 1; + str++; + } + + /* Skip optional hex prefix. */ + if ( *str == '0' && str[1] == 'x' ) + str += 2; + + nbits = 4 * strlen (str); + if ((nbits % 8)) + prepend_zero = 1; + + nbytes = (nbits+7) / 8; + nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; + + if ( val->alloced < nlimbs ) + mpi_resize (val, nlimbs); + + i = BYTES_PER_MPI_LIMB - (nbytes % BYTES_PER_MPI_LIMB); + i %= BYTES_PER_MPI_LIMB; + j = val->nlimbs = nlimbs; + val->sign = sign; + for (; j > 0; j--) + { + a = 0; + for (; i < BYTES_PER_MPI_LIMB; i++) + { + if (prepend_zero) + { + c1 = '0'; + prepend_zero = 0; + } + else + c1 = *str++; + + if (!c1) + { + mpi_clear (val); + return 1; /* Error. */ + } + c2 = *str++; + if (!c2) + { + mpi_clear (val); + return 1; /* Error. */ + } + if ( c1 >= '0' && c1 <= '9' ) + c = c1 - '0'; + else if ( c1 >= 'a' && c1 <= 'f' ) + c = c1 - 'a' + 10; + else if ( c1 >= 'A' && c1 <= 'F' ) + c = c1 - 'A' + 10; + else + { + mpi_clear (val); + return 1; /* Error. */ + } + c <<= 4; + if ( c2 >= '0' && c2 <= '9' ) + c |= c2 - '0'; + else if( c2 >= 'a' && c2 <= 'f' ) + c |= c2 - 'a' + 10; + else if( c2 >= 'A' && c2 <= 'F' ) + c |= c2 - 'A' + 10; + else + { + mpi_clear(val); + return 1; /* Error. */ + } + a <<= 8; + a |= c; + } + i = 0; + val->d[j-1] = a; + } + + return 0; /* Okay. */ +} + + +/* Dump the value of A in a format suitable for debugging to + Libgcrypt's logging stream. Note that one leading space but no + trailing space or linefeed will be printed. It is okay to pass + NULL for A. */ +void +gcry_mpi_dump (const gcry_mpi_t a) +{ + int i; + + log_printf (" "); + if (!a) + log_printf ("[MPI_NULL]"); + else + { + if (a->sign) + log_printf ( "-"); +#if BYTES_PER_MPI_LIMB == 2 +# define X "4" +#elif BYTES_PER_MPI_LIMB == 4 +# define X "8" +#elif BYTES_PER_MPI_LIMB == 8 +# define X "16" +#elif BYTES_PER_MPI_LIMB == 16 +# define X "32" +#else +# error please define the format here +#endif + for (i=a->nlimbs; i > 0 ; i-- ) + { + log_printf (i != a->nlimbs? "%0" X "lX":"%lX", (ulong)a->d[i-1]); + } +#undef X + if (!a->nlimbs) + log_printf ("0"); + } +} + +/* Convience function used internally. */ +void +_gcry_log_mpidump (const char *text, gcry_mpi_t a) +{ + log_printf ("%s:", text); + gcry_mpi_dump (a); + log_printf ("\n"); +} + + +/* Return an allocated buffer with the MPI (msb first). NBYTES + receives the length of this buffer. Caller must free the return + string. This function returns an allocated buffer with NBYTES set + to zero if the value of A is zero. If sign is not NULL, it will be + set to the sign of the A. On error NULL is returned and ERRNO set + appropriately. */ +static unsigned char * +do_get_buffer (gcry_mpi_t a, unsigned int *nbytes, int *sign, int force_secure) +{ + unsigned char *p, *buffer; + mpi_limb_t alimb; + int i; + size_t n; + + if (sign) + *sign = a->sign; + + *nbytes = a->nlimbs * BYTES_PER_MPI_LIMB; + n = *nbytes? *nbytes:1; /* Allocate at least one byte. */ + p = buffer = (force_secure || mpi_is_secure(a))? gcry_malloc_secure (n) + : gcry_malloc (n); + if (!buffer) + return NULL; + + for (i=a->nlimbs-1; i >= 0; i--) + { + alimb = a->d[i]; +#if BYTES_PER_MPI_LIMB == 4 + *p++ = alimb >> 24; + *p++ = alimb >> 16; + *p++ = alimb >> 8; + *p++ = alimb ; +#elif BYTES_PER_MPI_LIMB == 8 + *p++ = alimb >> 56; + *p++ = alimb >> 48; + *p++ = alimb >> 40; + *p++ = alimb >> 32; + *p++ = alimb >> 24; + *p++ = alimb >> 16; + *p++ = alimb >> 8; + *p++ = alimb ; +#else +# error please implement for this limb size. +#endif + } + + /* This is sub-optimal but we need to do the shift operation because + the caller has to free the returned buffer. */ + for (p=buffer; *nbytes && !*p; p++, --*nbytes) + ; + if (p != buffer) + memmove (buffer,p, *nbytes); + return buffer; +} + + +byte * +_gcry_mpi_get_buffer (gcry_mpi_t a, unsigned int *nbytes, int *sign) +{ + return do_get_buffer (a, nbytes, sign, 0); +} + +byte * +_gcry_mpi_get_secure_buffer (gcry_mpi_t a, unsigned *nbytes, int *sign) +{ + return do_get_buffer (a, nbytes, sign, 1); +} + + +/* + * Use the NBYTES at BUFFER_ARG to update A. Set the sign of a to + * SIGN. + */ +void +_gcry_mpi_set_buffer (gcry_mpi_t a, const void *buffer_arg, + unsigned int nbytes, int sign) +{ + const unsigned char *buffer = (const unsigned char*)buffer_arg; + const unsigned char *p; + mpi_limb_t alimb; + int nlimbs; + int i; + + nlimbs = (nbytes + BYTES_PER_MPI_LIMB - 1) / BYTES_PER_MPI_LIMB; + RESIZE_IF_NEEDED(a, nlimbs); + a->sign = sign; + + for (i=0, p = buffer+nbytes-1; p >= buffer+BYTES_PER_MPI_LIMB; ) + { +#if BYTES_PER_MPI_LIMB == 4 + alimb = *p-- ; + alimb |= *p-- << 8 ; + alimb |= *p-- << 16 ; + alimb |= *p-- << 24 ; +#elif BYTES_PER_MPI_LIMB == 8 + alimb = (mpi_limb_t)*p-- ; + alimb |= (mpi_limb_t)*p-- << 8 ; + alimb |= (mpi_limb_t)*p-- << 16 ; + alimb |= (mpi_limb_t)*p-- << 24 ; + alimb |= (mpi_limb_t)*p-- << 32 ; + alimb |= (mpi_limb_t)*p-- << 40 ; + alimb |= (mpi_limb_t)*p-- << 48 ; + alimb |= (mpi_limb_t)*p-- << 56 ; +#else +# error please implement for this limb size. +#endif + a->d[i++] = alimb; + } + if ( p >= buffer ) + { +#if BYTES_PER_MPI_LIMB == 4 + alimb = *p--; + if (p >= buffer) + alimb |= *p-- << 8; + if (p >= buffer) + alimb |= *p-- << 16; + if (p >= buffer) + alimb |= *p-- << 24; +#elif BYTES_PER_MPI_LIMB == 8 + alimb = (mpi_limb_t)*p--; + if (p >= buffer) + alimb |= (mpi_limb_t)*p-- << 8; + if (p >= buffer) + alimb |= (mpi_limb_t)*p-- << 16; + if (p >= buffer) + alimb |= (mpi_limb_t)*p-- << 24; + if (p >= buffer) + alimb |= (mpi_limb_t)*p-- << 32; + if (p >= buffer) + alimb |= (mpi_limb_t)*p-- << 40; + if (p >= buffer) + alimb |= (mpi_limb_t)*p-- << 48; + if (p >= buffer) + alimb |= (mpi_limb_t)*p-- << 56; +#else +# error please implement for this limb size. +#endif + a->d[i++] = alimb; + } + a->nlimbs = i; + gcry_assert (i == nlimbs); +} + + +/* Convert the external representation of an integer stored in BUFFER + with a length of BUFLEN into a newly create MPI returned in + RET_MPI. If NBYTES is not NULL, it will receive the number of + bytes actually scanned after a successful operation. */ +gcry_error_t +gcry_mpi_scan (struct gcry_mpi **ret_mpi, enum gcry_mpi_format format, + const void *buffer_arg, size_t buflen, size_t *nscanned) +{ + const unsigned char *buffer = (const unsigned char*)buffer_arg; + struct gcry_mpi *a = NULL; + unsigned int len; + int secure = (buffer && gcry_is_secure (buffer)); + + if (format == GCRYMPI_FMT_SSH) + len = 0; + else + len = buflen; + + if (format == GCRYMPI_FMT_STD) + { + const unsigned char *s = buffer; + + a = secure? mpi_alloc_secure ((len+BYTES_PER_MPI_LIMB-1) + /BYTES_PER_MPI_LIMB) + : mpi_alloc ((len+BYTES_PER_MPI_LIMB-1)/BYTES_PER_MPI_LIMB); + if (len) + { + a->sign = !!(*s & 0x80); + if (a->sign) + { + /* FIXME: we have to convert from 2compl to magnitude format */ + mpi_free (a); + return gcry_error (GPG_ERR_INTERNAL); + } + else + _gcry_mpi_set_buffer (a, s, len, 0); + } + if (ret_mpi) + { + mpi_normalize ( a ); + *ret_mpi = a; + } + else + mpi_free(a); + return 0; + } + else if (format == GCRYMPI_FMT_USG) + { + a = secure? mpi_alloc_secure ((len+BYTES_PER_MPI_LIMB-1) + /BYTES_PER_MPI_LIMB) + : mpi_alloc ((len+BYTES_PER_MPI_LIMB-1)/BYTES_PER_MPI_LIMB); + + if (len) + _gcry_mpi_set_buffer (a, buffer, len, 0); + if (ret_mpi) + { + mpi_normalize ( a ); + *ret_mpi = a; + } + else + mpi_free(a); + return 0; + } + else if (format == GCRYMPI_FMT_PGP) + { + a = mpi_read_from_buffer (buffer, &len, secure); + if (nscanned) + *nscanned = len; + if (ret_mpi && a) + { + mpi_normalize (a); + *ret_mpi = a; + } + else if (a) + { + mpi_free(a); + a = NULL; + } + return a? 0 : gcry_error (GPG_ERR_INV_OBJ); + } + else if (format == GCRYMPI_FMT_SSH) + { + const unsigned char *s = buffer; + size_t n; + + /* This test is not strictly necessary and an assert (!len) + would be sufficient. We keep this test in case we later + allow the BUFLEN argument to act as a sanitiy check. Same + below. */ + if (len && len < 4) + return gcry_error (GPG_ERR_TOO_SHORT); + + n = (s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]); + s += 4; + if (len) + len -= 4; + if (len && n > len) + return gcry_error (GPG_ERR_TOO_LARGE); + + a = secure? mpi_alloc_secure ((n+BYTES_PER_MPI_LIMB-1) + /BYTES_PER_MPI_LIMB) + : mpi_alloc ((n+BYTES_PER_MPI_LIMB-1)/BYTES_PER_MPI_LIMB); + if (n) + { + a->sign = !!(*s & 0x80); + if (a->sign) + { + /* FIXME: we have to convert from 2compl to magnitude format */ + mpi_free(a); + return gcry_error (GPG_ERR_INTERNAL); + } + else + _gcry_mpi_set_buffer( a, s, n, 0 ); + } + if (nscanned) + *nscanned = n+4; + if (ret_mpi) + { + mpi_normalize ( a ); + *ret_mpi = a; + } + else + mpi_free(a); + return 0; + } + else if (format == GCRYMPI_FMT_HEX) + { + /* We can only handle C strings for now. */ + if (buflen) + return gcry_error (GPG_ERR_INV_ARG); + + a = secure? mpi_alloc_secure (0) : mpi_alloc(0); + if (mpi_fromstr (a, (const char *)buffer)) + { + mpi_free (a); + return gcry_error (GPG_ERR_INV_OBJ); + } + if (ret_mpi) + { + mpi_normalize ( a ); + *ret_mpi = a; + } + else + mpi_free(a); + return 0; + } + else + return gcry_error (GPG_ERR_INV_ARG); +} + + +/* Convert the big integer A into the external representation + described by FORMAT and store it in the provided BUFFER which has + been allocated by the user with a size of BUFLEN bytes. NWRITTEN + receives the actual length of the external representation unless it + has been passed as NULL. BUFFER may be NULL to query the required + length. */ +gcry_error_t +gcry_mpi_print (enum gcry_mpi_format format, + unsigned char *buffer, size_t buflen, + size_t *nwritten, struct gcry_mpi *a) +{ + unsigned int nbits = mpi_get_nbits (a); + size_t len; + size_t dummy_nwritten; + + if (!nwritten) + nwritten = &dummy_nwritten; + + len = buflen; + *nwritten = 0; + if (format == GCRYMPI_FMT_STD) + { + unsigned char *tmp; + int extra = 0; + unsigned int n; + + if (a->sign) + return gcry_error (GPG_ERR_INTERNAL); /* Can't handle it yet. */ + + tmp = _gcry_mpi_get_buffer (a, &n, NULL); + if (!tmp) + return gpg_error_from_syserror (); + if (n && (*tmp & 0x80)) + { + n++; + extra=1; + } + + if (buffer && n > len) + { + /* The provided buffer is too short. */ + gcry_free (tmp); + return gcry_error (GPG_ERR_TOO_SHORT); + } + if (buffer) + { + unsigned char *s = buffer; + + if (extra) + *s++ = 0; + memcpy (s, tmp, n-extra); + } + gcry_free(tmp); + *nwritten = n; + return 0; + } + else if (format == GCRYMPI_FMT_USG) + { + unsigned int n = (nbits + 7)/8; + + /* Note: We ignore the sign for this format. */ + /* FIXME: for performance reasons we should put this into + mpi_aprint because we can then use the buffer directly. */ + if (buffer && n > len) + return gcry_error (GPG_ERR_TOO_SHORT); + if (buffer) + { + unsigned char *tmp; + + tmp = _gcry_mpi_get_buffer (a, &n, NULL); + if (!tmp) + return gpg_error_from_syserror (); + memcpy (buffer, tmp, n); + gcry_free (tmp); + } + *nwritten = n; + return 0; + } + else if (format == GCRYMPI_FMT_PGP) + { + unsigned int n = (nbits + 7)/8; + + /* The PGP format can only handle unsigned integers. */ + if( a->sign ) + return gcry_error (GPG_ERR_INV_ARG); + + if (buffer && n+2 > len) + return gcry_error (GPG_ERR_TOO_SHORT); + + if (buffer) + { + unsigned char *tmp; + unsigned char *s = buffer; + + s[0] = nbits >> 8; + s[1] = nbits; + + tmp = _gcry_mpi_get_buffer (a, &n, NULL); + if (!tmp) + return gpg_error_from_syserror (); + memcpy (s+2, tmp, n); + gcry_free (tmp); + } + *nwritten = n+2; + return 0; + } + else if (format == GCRYMPI_FMT_SSH) + { + unsigned char *tmp; + int extra = 0; + unsigned int n; + + if (a->sign) + return gcry_error (GPG_ERR_INTERNAL); /* Can't handle it yet. */ + + tmp = _gcry_mpi_get_buffer (a, &n, NULL); + if (!tmp) + return gpg_error_from_syserror (); + if (n && (*tmp & 0x80)) + { + n++; + extra=1; + } + + if (buffer && n+4 > len) + { + gcry_free(tmp); + return gcry_error (GPG_ERR_TOO_SHORT); + } + + if (buffer) + { + unsigned char *s = buffer; + + *s++ = n >> 24; + *s++ = n >> 16; + *s++ = n >> 8; + *s++ = n; + if (extra) + *s++ = 0; + + memcpy (s, tmp, n-extra); + } + gcry_free (tmp); + *nwritten = 4+n; + return 0; + } + else if (format == GCRYMPI_FMT_HEX) + { + unsigned char *tmp; + int i; + int extra = 0; + unsigned int n = 0; + + tmp = _gcry_mpi_get_buffer (a, &n, NULL); + if (!tmp) + return gpg_error_from_syserror (); + if (!n || (*tmp & 0x80)) + extra = 2; + + if (buffer && 2*n + extra + !!a->sign + 1 > len) + { + gcry_free(tmp); + return gcry_error (GPG_ERR_TOO_SHORT); + } + if (buffer) + { + unsigned char *s = buffer; + + if (a->sign) + *s++ = '-'; + if (extra) + { + *s++ = '0'; + *s++ = '0'; + } + + for (i=0; i < n; i++) + { + unsigned int c = tmp[i]; + + *s++ = (c >> 4) < 10? '0'+(c>>4) : 'A'+(c>>4)-10 ; + c &= 15; + *s++ = c < 10? '0'+c : 'A'+c-10 ; + } + *s++ = 0; + *nwritten = s - buffer; + } + else + { + *nwritten = 2*n + extra + !!a->sign + 1; + } + gcry_free (tmp); + return 0; + } + else + return gcry_error (GPG_ERR_INV_ARG); +} + + +/* + * Like gcry_mpi_print but this function allocates the buffer itself. + * The caller has to supply the address of a pointer. NWRITTEN may be + * NULL. + */ +gcry_error_t +gcry_mpi_aprint (enum gcry_mpi_format format, + unsigned char **buffer, size_t *nwritten, + struct gcry_mpi *a) +{ + size_t n; + gcry_error_t rc; + + *buffer = NULL; + rc = gcry_mpi_print (format, NULL, 0, &n, a); + if (rc) + return rc; + + *buffer = mpi_is_secure(a) ? gcry_malloc_secure (n) : gcry_malloc (n); + if (!*buffer) + return gpg_error_from_syserror (); + rc = gcry_mpi_print( format, *buffer, n, &n, a ); + if (rc) + { + gcry_free(*buffer); + *buffer = NULL; + } + else if (nwritten) + *nwritten = n; + return rc; +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-add1.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-add1.c new file mode 100644 index 000000000..4a84df64d --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-add1.c @@ -0,0 +1,65 @@ +/* mpihelp-add_1.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, + * 2000, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + +mpi_limb_t +_gcry_mpih_add_n (mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_ptr_t s2_ptr, mpi_size_t size) +{ + mpi_limb_t x, y, cy; + mpi_size_t j; + + /* The loop counter and index J goes from -SIZE to -1. This way + the loop becomes faster. */ + j = -size; + + /* Offset the base pointers to compensate for the negative indices. */ + s1_ptr -= j; + s2_ptr -= j; + res_ptr -= j; + + cy = 0; + do + { + y = s2_ptr[j]; + x = s1_ptr[j]; + y += cy; /* add previous carry to one addend */ + cy = y < cy; /* get out carry from that addition */ + y += x; /* add other addend */ + cy += y < x; /* get out carry from that add, combine */ + res_ptr[j] = y; + } + while ( ++j ); + + return cy; +} + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-div.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-div.c new file mode 100644 index 000000000..797c083e3 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-div.c @@ -0,0 +1,536 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpih-div.c - MPI helper functions + * Copyright (C) 1994, 1996, 1998, 2000, + * 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + +#ifndef UMUL_TIME +#define UMUL_TIME 1 +#endif +#ifndef UDIV_TIME +#define UDIV_TIME UMUL_TIME +#endif + +/* FIXME: We should be using invert_limb (or invert_normalized_limb) + * here (not udiv_qrnnd). + */ + +mpi_limb_t +_gcry_mpih_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, + mpi_limb_t divisor_limb) +{ + mpi_size_t i; + mpi_limb_t n1, n0, r; + int dummy; + + /* Botch: Should this be handled at all? Rely on callers? */ + if( !dividend_size ) + return 0; + + /* If multiplication is much faster than division, and the + * dividend is large, pre-invert the divisor, and use + * only multiplications in the inner loop. + * + * This test should be read: + * Does it ever help to use udiv_qrnnd_preinv? + * && Does what we save compensate for the inversion overhead? + */ + if( UDIV_TIME > (2 * UMUL_TIME + 6) + && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) { + int normalization_steps; + + count_leading_zeros( normalization_steps, divisor_limb ); + if( normalization_steps ) { + mpi_limb_t divisor_limb_inverted; + + divisor_limb <<= normalization_steps; + + /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The + * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the + * most significant bit (with weight 2**N) implicit. + * + * Special case for DIVISOR_LIMB == 100...000. + */ + if( !(divisor_limb << 1) ) + divisor_limb_inverted = ~(mpi_limb_t)0; + else + udiv_qrnnd(divisor_limb_inverted, dummy, + -divisor_limb, 0, divisor_limb); + + n1 = dividend_ptr[dividend_size - 1]; + r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); + + /* Possible optimization: + * if (r == 0 + * && divisor_limb > ((n1 << normalization_steps) + * | (dividend_ptr[dividend_size - 2] >> ...))) + * ...one division less... + */ + for( i = dividend_size - 2; i >= 0; i--) { + n0 = dividend_ptr[i]; + UDIV_QRNND_PREINV(dummy, r, r, + ((n1 << normalization_steps) + | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), + divisor_limb, divisor_limb_inverted); + n1 = n0; + } + UDIV_QRNND_PREINV(dummy, r, r, + n1 << normalization_steps, + divisor_limb, divisor_limb_inverted); + return r >> normalization_steps; + } + else { + mpi_limb_t divisor_limb_inverted; + + /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The + * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the + * most significant bit (with weight 2**N) implicit. + * + * Special case for DIVISOR_LIMB == 100...000. + */ + if( !(divisor_limb << 1) ) + divisor_limb_inverted = ~(mpi_limb_t)0; + else + udiv_qrnnd(divisor_limb_inverted, dummy, + -divisor_limb, 0, divisor_limb); + + i = dividend_size - 1; + r = dividend_ptr[i]; + + if( r >= divisor_limb ) + r = 0; + else + i--; + + for( ; i >= 0; i--) { + n0 = dividend_ptr[i]; + UDIV_QRNND_PREINV(dummy, r, r, + n0, divisor_limb, divisor_limb_inverted); + } + return r; + } + } + else { + if( UDIV_NEEDS_NORMALIZATION ) { + int normalization_steps; + + count_leading_zeros(normalization_steps, divisor_limb); + if( normalization_steps ) { + divisor_limb <<= normalization_steps; + + n1 = dividend_ptr[dividend_size - 1]; + r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); + + /* Possible optimization: + * if (r == 0 + * && divisor_limb > ((n1 << normalization_steps) + * | (dividend_ptr[dividend_size - 2] >> ...))) + * ...one division less... + */ + for(i = dividend_size - 2; i >= 0; i--) { + n0 = dividend_ptr[i]; + udiv_qrnnd (dummy, r, r, + ((n1 << normalization_steps) + | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), + divisor_limb); + n1 = n0; + } + udiv_qrnnd (dummy, r, r, + n1 << normalization_steps, + divisor_limb); + return r >> normalization_steps; + } + } + /* No normalization needed, either because udiv_qrnnd doesn't require + * it, or because DIVISOR_LIMB is already normalized. */ + i = dividend_size - 1; + r = dividend_ptr[i]; + + if(r >= divisor_limb) + r = 0; + else + i--; + + for(; i >= 0; i--) { + n0 = dividend_ptr[i]; + udiv_qrnnd (dummy, r, r, n0, divisor_limb); + } + return r; + } +} + +/* Divide num (NP/NSIZE) by den (DP/DSIZE) and write + * the NSIZE-DSIZE least significant quotient limbs at QP + * and the DSIZE long remainder at NP. If QEXTRA_LIMBS is + * non-zero, generate that many fraction bits and append them after the + * other quotient limbs. + * Return the most significant limb of the quotient, this is always 0 or 1. + * + * Preconditions: + * 0. NSIZE >= DSIZE. + * 1. The most significant bit of the divisor must be set. + * 2. QP must either not overlap with the input operands at all, or + * QP + DSIZE >= NP must hold true. (This means that it's + * possible to put the quotient in the high part of NUM, right after the + * remainder in NUM. + * 3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero. + */ + +mpi_limb_t +_gcry_mpih_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs, + mpi_ptr_t np, mpi_size_t nsize, + mpi_ptr_t dp, mpi_size_t dsize) +{ + mpi_limb_t most_significant_q_limb = 0; + + switch(dsize) { + case 0: + /* We are asked to divide by zero, so go ahead and do it! (To make + the compiler not remove this statement, return the value.) */ + grub_fatal ("mpi division by zero"); + return 0; + + case 1: + { + mpi_size_t i; + mpi_limb_t n1; + mpi_limb_t d; + + d = dp[0]; + n1 = np[nsize - 1]; + + if( n1 >= d ) { + n1 -= d; + most_significant_q_limb = 1; + } + + qp += qextra_limbs; + for( i = nsize - 2; i >= 0; i--) + udiv_qrnnd( qp[i], n1, n1, np[i], d ); + qp -= qextra_limbs; + + for( i = qextra_limbs - 1; i >= 0; i-- ) + udiv_qrnnd (qp[i], n1, n1, 0, d); + + np[0] = n1; + } + break; + + case 2: + { + mpi_size_t i; + mpi_limb_t n1, n0, n2; + mpi_limb_t d1, d0; + + np += nsize - 2; + d1 = dp[1]; + d0 = dp[0]; + n1 = np[1]; + n0 = np[0]; + + if( n1 >= d1 && (n1 > d1 || n0 >= d0) ) { + sub_ddmmss (n1, n0, n1, n0, d1, d0); + most_significant_q_limb = 1; + } + + for( i = qextra_limbs + nsize - 2 - 1; i >= 0; i-- ) { + mpi_limb_t q; + mpi_limb_t r; + + if( i >= qextra_limbs ) + np--; + else + np[0] = 0; + + if( n1 == d1 ) { + /* Q should be either 111..111 or 111..110. Need special + * treatment of this rare case as normal division would + * give overflow. */ + q = ~(mpi_limb_t)0; + + r = n0 + d1; + if( r < d1 ) { /* Carry in the addition? */ + add_ssaaaa( n1, n0, r - d0, np[0], 0, d0 ); + qp[i] = q; + continue; + } + n1 = d0 - (d0 != 0?1:0); + n0 = -d0; + } + else { + udiv_qrnnd (q, r, n1, n0, d1); + umul_ppmm (n1, n0, d0, q); + } + + n2 = np[0]; + q_test: + if( n1 > r || (n1 == r && n0 > n2) ) { + /* The estimated Q was too large. */ + q--; + sub_ddmmss (n1, n0, n1, n0, 0, d0); + r += d1; + if( r >= d1 ) /* If not carry, test Q again. */ + goto q_test; + } + + qp[i] = q; + sub_ddmmss (n1, n0, r, n2, n1, n0); + } + np[1] = n1; + np[0] = n0; + } + break; + + default: + { + mpi_size_t i; + mpi_limb_t dX, d1, n0; + + np += nsize - dsize; + dX = dp[dsize - 1]; + d1 = dp[dsize - 2]; + n0 = np[dsize - 1]; + + if( n0 >= dX ) { + if(n0 > dX || _gcry_mpih_cmp(np, dp, dsize - 1) >= 0 ) { + _gcry_mpih_sub_n(np, np, dp, dsize); + n0 = np[dsize - 1]; + most_significant_q_limb = 1; + } + } + + for( i = qextra_limbs + nsize - dsize - 1; i >= 0; i--) { + mpi_limb_t q; + mpi_limb_t n1, n2; + mpi_limb_t cy_limb; + + if( i >= qextra_limbs ) { + np--; + n2 = np[dsize]; + } + else { + n2 = np[dsize - 1]; + MPN_COPY_DECR (np + 1, np, dsize - 1); + np[0] = 0; + } + + if( n0 == dX ) { + /* This might over-estimate q, but it's probably not worth + * the extra code here to find out. */ + q = ~(mpi_limb_t)0; + } + else { + mpi_limb_t r; + + udiv_qrnnd(q, r, n0, np[dsize - 1], dX); + umul_ppmm(n1, n0, d1, q); + + while( n1 > r || (n1 == r && n0 > np[dsize - 2])) { + q--; + r += dX; + if( r < dX ) /* I.e. "carry in previous addition?" */ + break; + n1 -= n0 < d1; + n0 -= d1; + } + } + + /* Possible optimization: We already have (q * n0) and (1 * n1) + * after the calculation of q. Taking advantage of that, we + * could make this loop make two iterations less. */ + cy_limb = _gcry_mpih_submul_1(np, dp, dsize, q); + + if( n2 != cy_limb ) { + _gcry_mpih_add_n(np, np, dp, dsize); + q--; + } + + qp[i] = q; + n0 = np[dsize - 1]; + } + } + } + + return most_significant_q_limb; +} + + +/**************** + * Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB. + * Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR. + * Return the single-limb remainder. + * There are no constraints on the value of the divisor. + * + * QUOT_PTR and DIVIDEND_PTR might point to the same limb. + */ + +mpi_limb_t +_gcry_mpih_divmod_1( mpi_ptr_t quot_ptr, + mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, + mpi_limb_t divisor_limb) +{ + mpi_size_t i; + mpi_limb_t n1, n0, r; + int dummy; + + if( !dividend_size ) + return 0; + + /* If multiplication is much faster than division, and the + * dividend is large, pre-invert the divisor, and use + * only multiplications in the inner loop. + * + * This test should be read: + * Does it ever help to use udiv_qrnnd_preinv? + * && Does what we save compensate for the inversion overhead? + */ + if( UDIV_TIME > (2 * UMUL_TIME + 6) + && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) { + int normalization_steps; + + count_leading_zeros( normalization_steps, divisor_limb ); + if( normalization_steps ) { + mpi_limb_t divisor_limb_inverted; + + divisor_limb <<= normalization_steps; + + /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The + * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the + * most significant bit (with weight 2**N) implicit. + */ + /* Special case for DIVISOR_LIMB == 100...000. */ + if( !(divisor_limb << 1) ) + divisor_limb_inverted = ~(mpi_limb_t)0; + else + udiv_qrnnd(divisor_limb_inverted, dummy, + -divisor_limb, 0, divisor_limb); + + n1 = dividend_ptr[dividend_size - 1]; + r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); + + /* Possible optimization: + * if (r == 0 + * && divisor_limb > ((n1 << normalization_steps) + * | (dividend_ptr[dividend_size - 2] >> ...))) + * ...one division less... + */ + for( i = dividend_size - 2; i >= 0; i--) { + n0 = dividend_ptr[i]; + UDIV_QRNND_PREINV( quot_ptr[i + 1], r, r, + ((n1 << normalization_steps) + | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), + divisor_limb, divisor_limb_inverted); + n1 = n0; + } + UDIV_QRNND_PREINV( quot_ptr[0], r, r, + n1 << normalization_steps, + divisor_limb, divisor_limb_inverted); + return r >> normalization_steps; + } + else { + mpi_limb_t divisor_limb_inverted; + + /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The + * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the + * most significant bit (with weight 2**N) implicit. + */ + /* Special case for DIVISOR_LIMB == 100...000. */ + if( !(divisor_limb << 1) ) + divisor_limb_inverted = ~(mpi_limb_t) 0; + else + udiv_qrnnd(divisor_limb_inverted, dummy, + -divisor_limb, 0, divisor_limb); + + i = dividend_size - 1; + r = dividend_ptr[i]; + + if( r >= divisor_limb ) + r = 0; + else + quot_ptr[i--] = 0; + + for( ; i >= 0; i-- ) { + n0 = dividend_ptr[i]; + UDIV_QRNND_PREINV( quot_ptr[i], r, r, + n0, divisor_limb, divisor_limb_inverted); + } + return r; + } + } + else { + if(UDIV_NEEDS_NORMALIZATION) { + int normalization_steps; + + count_leading_zeros (normalization_steps, divisor_limb); + if( normalization_steps ) { + divisor_limb <<= normalization_steps; + + n1 = dividend_ptr[dividend_size - 1]; + r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); + + /* Possible optimization: + * if (r == 0 + * && divisor_limb > ((n1 << normalization_steps) + * | (dividend_ptr[dividend_size - 2] >> ...))) + * ...one division less... + */ + for( i = dividend_size - 2; i >= 0; i--) { + n0 = dividend_ptr[i]; + udiv_qrnnd (quot_ptr[i + 1], r, r, + ((n1 << normalization_steps) + | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), + divisor_limb); + n1 = n0; + } + udiv_qrnnd (quot_ptr[0], r, r, + n1 << normalization_steps, + divisor_limb); + return r >> normalization_steps; + } + } + /* No normalization needed, either because udiv_qrnnd doesn't require + * it, or because DIVISOR_LIMB is already normalized. */ + i = dividend_size - 1; + r = dividend_ptr[i]; + + if(r >= divisor_limb) + r = 0; + else + quot_ptr[i--] = 0; + + for(; i >= 0; i--) { + n0 = dividend_ptr[i]; + udiv_qrnnd( quot_ptr[i], r, r, n0, divisor_limb ); + } + return r; + } +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-lshift.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-lshift.c new file mode 100644 index 000000000..f48c12cd0 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-lshift.c @@ -0,0 +1,68 @@ +/* mpi-lshift.c - MPI helper functions + * Copyright (C) 1994, 1996, 1998, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" + +/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left + * and store the USIZE least significant digits of the result at WP. + * Return the bits shifted out from the most significant digit. + * + * Argument constraints: + * 1. 0 < CNT < BITS_PER_MP_LIMB + * 2. If the result is to be written over the input, WP must be >= UP. + */ + +mpi_limb_t +_gcry_mpih_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, + unsigned int cnt) +{ + mpi_limb_t high_limb, low_limb; + unsigned sh_1, sh_2; + mpi_size_t i; + mpi_limb_t retval; + + sh_1 = cnt; + wp += 1; + sh_2 = BITS_PER_MPI_LIMB - sh_1; + i = usize - 1; + low_limb = up[i]; + retval = low_limb >> sh_2; + high_limb = low_limb; + while ( --i >= 0 ) + { + low_limb = up[i]; + wp[i] = (high_limb << sh_1) | (low_limb >> sh_2); + high_limb = low_limb; + } + wp[i] = high_limb << sh_1; + + return retval; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-mul.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul.c new file mode 100644 index 000000000..44b368649 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul.c @@ -0,0 +1,530 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpih-mul.c - MPI helper functions + * Copyright (C) 1994, 1996, 1998, 1999, 2000, + * 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" +#include "g10lib.h" + +#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \ + do { \ + if( (size) < KARATSUBA_THRESHOLD ) \ + mul_n_basecase (prodp, up, vp, size); \ + else \ + mul_n (prodp, up, vp, size, tspace); \ + } while (0); + +#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \ + do { \ + if ((size) < KARATSUBA_THRESHOLD) \ + _gcry_mpih_sqr_n_basecase (prodp, up, size); \ + else \ + _gcry_mpih_sqr_n (prodp, up, size, tspace); \ + } while (0); + + + + +/* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP), + * both with SIZE limbs, and store the result at PRODP. 2 * SIZE limbs are + * always stored. Return the most significant limb. + * + * Argument constraints: + * 1. PRODP != UP and PRODP != VP, i.e. the destination + * must be distinct from the multiplier and the multiplicand. + * + * + * Handle simple cases with traditional multiplication. + * + * This is the most critical code of multiplication. All multiplies rely + * on this, both small and huge. Small ones arrive here immediately. Huge + * ones arrive here as this is the base case for Karatsuba's recursive + * algorithm below. + */ + +static mpi_limb_t +mul_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, + mpi_ptr_t vp, mpi_size_t size) +{ + mpi_size_t i; + mpi_limb_t cy; + mpi_limb_t v_limb; + + /* Multiply by the first limb in V separately, as the result can be + * stored (not added) to PROD. We also avoid a loop for zeroing. */ + v_limb = vp[0]; + if( v_limb <= 1 ) { + if( v_limb == 1 ) + MPN_COPY( prodp, up, size ); + else + MPN_ZERO( prodp, size ); + cy = 0; + } + else + cy = _gcry_mpih_mul_1( prodp, up, size, v_limb ); + + prodp[size] = cy; + prodp++; + + /* For each iteration in the outer loop, multiply one limb from + * U with one limb from V, and add it to PROD. */ + for( i = 1; i < size; i++ ) { + v_limb = vp[i]; + if( v_limb <= 1 ) { + cy = 0; + if( v_limb == 1 ) + cy = _gcry_mpih_add_n(prodp, prodp, up, size); + } + else + cy = _gcry_mpih_addmul_1(prodp, up, size, v_limb); + + prodp[size] = cy; + prodp++; + } + + return cy; +} + + +static void +mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, + mpi_size_t size, mpi_ptr_t tspace ) +{ + if( size & 1 ) { + /* The size is odd, and the code below doesn't handle that. + * Multiply the least significant (size - 1) limbs with a recursive + * call, and handle the most significant limb of S1 and S2 + * separately. + * A slightly faster way to do this would be to make the Karatsuba + * code below behave as if the size were even, and let it check for + * odd size in the end. I.e., in essence move this code to the end. + * Doing so would save us a recursive call, and potentially make the + * stack grow a lot less. + */ + mpi_size_t esize = size - 1; /* even size */ + mpi_limb_t cy_limb; + + MPN_MUL_N_RECURSE( prodp, up, vp, esize, tspace ); + cy_limb = _gcry_mpih_addmul_1( prodp + esize, up, esize, vp[esize] ); + prodp[esize + esize] = cy_limb; + cy_limb = _gcry_mpih_addmul_1( prodp + esize, vp, size, up[esize] ); + prodp[esize + size] = cy_limb; + } + else { + /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm. + * + * Split U in two pieces, U1 and U0, such that + * U = U0 + U1*(B**n), + * and V in V1 and V0, such that + * V = V0 + V1*(B**n). + * + * UV is then computed recursively using the identity + * + * 2n n n n + * UV = (B + B )U V + B (U -U )(V -V ) + (B + 1)U V + * 1 1 1 0 0 1 0 0 + * + * Where B = 2**BITS_PER_MP_LIMB. + */ + mpi_size_t hsize = size >> 1; + mpi_limb_t cy; + int negflg; + + /* Product H. ________________ ________________ + * |_____U1 x V1____||____U0 x V0_____| + * Put result in upper part of PROD and pass low part of TSPACE + * as new TSPACE. + */ + MPN_MUL_N_RECURSE(prodp + size, up + hsize, vp + hsize, hsize, tspace); + + /* Product M. ________________ + * |_(U1-U0)(V0-V1)_| + */ + if( _gcry_mpih_cmp(up + hsize, up, hsize) >= 0 ) { + _gcry_mpih_sub_n(prodp, up + hsize, up, hsize); + negflg = 0; + } + else { + _gcry_mpih_sub_n(prodp, up, up + hsize, hsize); + negflg = 1; + } + if( _gcry_mpih_cmp(vp + hsize, vp, hsize) >= 0 ) { + _gcry_mpih_sub_n(prodp + hsize, vp + hsize, vp, hsize); + negflg ^= 1; + } + else { + _gcry_mpih_sub_n(prodp + hsize, vp, vp + hsize, hsize); + /* No change of NEGFLG. */ + } + /* Read temporary operands from low part of PROD. + * Put result in low part of TSPACE using upper part of TSPACE + * as new TSPACE. + */ + MPN_MUL_N_RECURSE(tspace, prodp, prodp + hsize, hsize, tspace + size); + + /* Add/copy product H. */ + MPN_COPY (prodp + hsize, prodp + size, hsize); + cy = _gcry_mpih_add_n( prodp + size, prodp + size, + prodp + size + hsize, hsize); + + /* Add product M (if NEGFLG M is a negative number) */ + if(negflg) + cy -= _gcry_mpih_sub_n(prodp + hsize, prodp + hsize, tspace, size); + else + cy += _gcry_mpih_add_n(prodp + hsize, prodp + hsize, tspace, size); + + /* Product L. ________________ ________________ + * |________________||____U0 x V0_____| + * Read temporary operands from low part of PROD. + * Put result in low part of TSPACE using upper part of TSPACE + * as new TSPACE. + */ + MPN_MUL_N_RECURSE(tspace, up, vp, hsize, tspace + size); + + /* Add/copy Product L (twice) */ + + cy += _gcry_mpih_add_n(prodp + hsize, prodp + hsize, tspace, size); + if( cy ) + _gcry_mpih_add_1(prodp + hsize + size, prodp + hsize + size, hsize, cy); + + MPN_COPY(prodp, tspace, hsize); + cy = _gcry_mpih_add_n(prodp + hsize, prodp + hsize, tspace + hsize, hsize); + if( cy ) + _gcry_mpih_add_1(prodp + size, prodp + size, size, 1); + } +} + + +void +_gcry_mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size ) +{ + mpi_size_t i; + mpi_limb_t cy_limb; + mpi_limb_t v_limb; + + /* Multiply by the first limb in V separately, as the result can be + * stored (not added) to PROD. We also avoid a loop for zeroing. */ + v_limb = up[0]; + if( v_limb <= 1 ) { + if( v_limb == 1 ) + MPN_COPY( prodp, up, size ); + else + MPN_ZERO(prodp, size); + cy_limb = 0; + } + else + cy_limb = _gcry_mpih_mul_1( prodp, up, size, v_limb ); + + prodp[size] = cy_limb; + prodp++; + + /* For each iteration in the outer loop, multiply one limb from + * U with one limb from V, and add it to PROD. */ + for( i=1; i < size; i++) { + v_limb = up[i]; + if( v_limb <= 1 ) { + cy_limb = 0; + if( v_limb == 1 ) + cy_limb = _gcry_mpih_add_n(prodp, prodp, up, size); + } + else + cy_limb = _gcry_mpih_addmul_1(prodp, up, size, v_limb); + + prodp[size] = cy_limb; + prodp++; + } +} + + +void +_gcry_mpih_sqr_n( mpi_ptr_t prodp, + mpi_ptr_t up, mpi_size_t size, mpi_ptr_t tspace) +{ + if( size & 1 ) { + /* The size is odd, and the code below doesn't handle that. + * Multiply the least significant (size - 1) limbs with a recursive + * call, and handle the most significant limb of S1 and S2 + * separately. + * A slightly faster way to do this would be to make the Karatsuba + * code below behave as if the size were even, and let it check for + * odd size in the end. I.e., in essence move this code to the end. + * Doing so would save us a recursive call, and potentially make the + * stack grow a lot less. + */ + mpi_size_t esize = size - 1; /* even size */ + mpi_limb_t cy_limb; + + MPN_SQR_N_RECURSE( prodp, up, esize, tspace ); + cy_limb = _gcry_mpih_addmul_1( prodp + esize, up, esize, up[esize] ); + prodp[esize + esize] = cy_limb; + cy_limb = _gcry_mpih_addmul_1( prodp + esize, up, size, up[esize] ); + + prodp[esize + size] = cy_limb; + } + else { + mpi_size_t hsize = size >> 1; + mpi_limb_t cy; + + /* Product H. ________________ ________________ + * |_____U1 x U1____||____U0 x U0_____| + * Put result in upper part of PROD and pass low part of TSPACE + * as new TSPACE. + */ + MPN_SQR_N_RECURSE(prodp + size, up + hsize, hsize, tspace); + + /* Product M. ________________ + * |_(U1-U0)(U0-U1)_| + */ + if( _gcry_mpih_cmp( up + hsize, up, hsize) >= 0 ) + _gcry_mpih_sub_n( prodp, up + hsize, up, hsize); + else + _gcry_mpih_sub_n (prodp, up, up + hsize, hsize); + + /* Read temporary operands from low part of PROD. + * Put result in low part of TSPACE using upper part of TSPACE + * as new TSPACE. */ + MPN_SQR_N_RECURSE(tspace, prodp, hsize, tspace + size); + + /* Add/copy product H */ + MPN_COPY(prodp + hsize, prodp + size, hsize); + cy = _gcry_mpih_add_n(prodp + size, prodp + size, + prodp + size + hsize, hsize); + + /* Add product M (if NEGFLG M is a negative number). */ + cy -= _gcry_mpih_sub_n (prodp + hsize, prodp + hsize, tspace, size); + + /* Product L. ________________ ________________ + * |________________||____U0 x U0_____| + * Read temporary operands from low part of PROD. + * Put result in low part of TSPACE using upper part of TSPACE + * as new TSPACE. */ + MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size); + + /* Add/copy Product L (twice). */ + cy += _gcry_mpih_add_n (prodp + hsize, prodp + hsize, tspace, size); + if( cy ) + _gcry_mpih_add_1(prodp + hsize + size, prodp + hsize + size, + hsize, cy); + + MPN_COPY(prodp, tspace, hsize); + cy = _gcry_mpih_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize); + if( cy ) + _gcry_mpih_add_1 (prodp + size, prodp + size, size, 1); + } +} + + +/* This should be made into an inline function in gmp.h. */ +void +_gcry_mpih_mul_n( mpi_ptr_t prodp, + mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size) +{ + int secure; + + if( up == vp ) { + if( size < KARATSUBA_THRESHOLD ) + _gcry_mpih_sqr_n_basecase( prodp, up, size ); + else { + mpi_ptr_t tspace; + secure = gcry_is_secure( up ); + tspace = mpi_alloc_limb_space( 2 * size, secure ); + _gcry_mpih_sqr_n( prodp, up, size, tspace ); + _gcry_mpi_free_limb_space (tspace, 2 * size ); + } + } + else { + if( size < KARATSUBA_THRESHOLD ) + mul_n_basecase( prodp, up, vp, size ); + else { + mpi_ptr_t tspace; + secure = gcry_is_secure( up ) || gcry_is_secure( vp ); + tspace = mpi_alloc_limb_space( 2 * size, secure ); + mul_n (prodp, up, vp, size, tspace); + _gcry_mpi_free_limb_space (tspace, 2 * size ); + } + } +} + + + +void +_gcry_mpih_mul_karatsuba_case( mpi_ptr_t prodp, + mpi_ptr_t up, mpi_size_t usize, + mpi_ptr_t vp, mpi_size_t vsize, + struct karatsuba_ctx *ctx ) +{ + mpi_limb_t cy; + + if( !ctx->tspace || ctx->tspace_size < vsize ) { + if( ctx->tspace ) + _gcry_mpi_free_limb_space( ctx->tspace, ctx->tspace_nlimbs ); + ctx->tspace_nlimbs = 2 * vsize; + ctx->tspace = mpi_alloc_limb_space( 2 * vsize, + (gcry_is_secure( up ) + || gcry_is_secure( vp )) ); + ctx->tspace_size = vsize; + } + + MPN_MUL_N_RECURSE( prodp, up, vp, vsize, ctx->tspace ); + + prodp += vsize; + up += vsize; + usize -= vsize; + if( usize >= vsize ) { + if( !ctx->tp || ctx->tp_size < vsize ) { + if( ctx->tp ) + _gcry_mpi_free_limb_space( ctx->tp, ctx->tp_nlimbs ); + ctx->tp_nlimbs = 2 * vsize; + ctx->tp = mpi_alloc_limb_space( 2 * vsize, gcry_is_secure( up ) + || gcry_is_secure( vp ) ); + ctx->tp_size = vsize; + } + + do { + MPN_MUL_N_RECURSE( ctx->tp, up, vp, vsize, ctx->tspace ); + cy = _gcry_mpih_add_n( prodp, prodp, ctx->tp, vsize ); + _gcry_mpih_add_1( prodp + vsize, ctx->tp + vsize, vsize, cy ); + prodp += vsize; + up += vsize; + usize -= vsize; + } while( usize >= vsize ); + } + + if( usize ) { + if( usize < KARATSUBA_THRESHOLD ) { + _gcry_mpih_mul( ctx->tspace, vp, vsize, up, usize ); + } + else { + if( !ctx->next ) { + ctx->next = gcry_xcalloc( 1, sizeof *ctx ); + } + _gcry_mpih_mul_karatsuba_case( ctx->tspace, + vp, vsize, + up, usize, + ctx->next ); + } + + cy = _gcry_mpih_add_n( prodp, prodp, ctx->tspace, vsize); + _gcry_mpih_add_1( prodp + vsize, ctx->tspace + vsize, usize, cy ); + } +} + + +void +_gcry_mpih_release_karatsuba_ctx( struct karatsuba_ctx *ctx ) +{ + struct karatsuba_ctx *ctx2; + + if( ctx->tp ) + _gcry_mpi_free_limb_space( ctx->tp, ctx->tp_nlimbs ); + if( ctx->tspace ) + _gcry_mpi_free_limb_space( ctx->tspace, ctx->tspace_nlimbs ); + for( ctx=ctx->next; ctx; ctx = ctx2 ) { + ctx2 = ctx->next; + if( ctx->tp ) + _gcry_mpi_free_limb_space( ctx->tp, ctx->tp_nlimbs ); + if( ctx->tspace ) + _gcry_mpi_free_limb_space( ctx->tspace, ctx->tspace_nlimbs ); + gcry_free( ctx ); + } +} + +/* Multiply the natural numbers u (pointed to by UP, with USIZE limbs) + * and v (pointed to by VP, with VSIZE limbs), and store the result at + * PRODP. USIZE + VSIZE limbs are always stored, but if the input + * operands are normalized. Return the most significant limb of the + * result. + * + * NOTE: The space pointed to by PRODP is overwritten before finished + * with U and V, so overlap is an error. + * + * Argument constraints: + * 1. USIZE >= VSIZE. + * 2. PRODP != UP and PRODP != VP, i.e. the destination + * must be distinct from the multiplier and the multiplicand. + */ + +mpi_limb_t +_gcry_mpih_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, + mpi_ptr_t vp, mpi_size_t vsize) +{ + mpi_ptr_t prod_endp = prodp + usize + vsize - 1; + mpi_limb_t cy; + struct karatsuba_ctx ctx; + + if( vsize < KARATSUBA_THRESHOLD ) { + mpi_size_t i; + mpi_limb_t v_limb; + + if( !vsize ) + return 0; + + /* Multiply by the first limb in V separately, as the result can be + * stored (not added) to PROD. We also avoid a loop for zeroing. */ + v_limb = vp[0]; + if( v_limb <= 1 ) { + if( v_limb == 1 ) + MPN_COPY( prodp, up, usize ); + else + MPN_ZERO( prodp, usize ); + cy = 0; + } + else + cy = _gcry_mpih_mul_1( prodp, up, usize, v_limb ); + + prodp[usize] = cy; + prodp++; + + /* For each iteration in the outer loop, multiply one limb from + * U with one limb from V, and add it to PROD. */ + for( i = 1; i < vsize; i++ ) { + v_limb = vp[i]; + if( v_limb <= 1 ) { + cy = 0; + if( v_limb == 1 ) + cy = _gcry_mpih_add_n(prodp, prodp, up, usize); + } + else + cy = _gcry_mpih_addmul_1(prodp, up, usize, v_limb); + + prodp[usize] = cy; + prodp++; + } + + return cy; + } + + memset( &ctx, 0, sizeof ctx ); + _gcry_mpih_mul_karatsuba_case( prodp, up, usize, vp, vsize, &ctx ); + _gcry_mpih_release_karatsuba_ctx( &ctx ); + return *prod_endp; +} diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-mul1.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul1.c new file mode 100644 index 000000000..0e8197d88 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul1.c @@ -0,0 +1,62 @@ +/* mpihelp-mul_1.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + +mpi_limb_t +_gcry_mpih_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, + mpi_limb_t s2_limb) +{ + mpi_limb_t cy_limb; + mpi_size_t j; + mpi_limb_t prod_high, prod_low; + + /* The loop counter and index J goes from -S1_SIZE to -1. This way + * the loop becomes faster. */ + j = -s1_size; + + /* Offset the base pointers to compensate for the negative indices. */ + s1_ptr -= j; + res_ptr -= j; + + cy_limb = 0; + do + { + umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); + prod_low += cy_limb; + cy_limb = (prod_low < cy_limb?1:0) + prod_high; + res_ptr[j] = prod_low; + } + while( ++j ); + + return cy_limb; +} + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-mul2.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul2.c new file mode 100644 index 000000000..3b7549605 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul2.c @@ -0,0 +1,68 @@ +/* mpih-mul2.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + + +mpi_limb_t +_gcry_mpih_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb) +{ + mpi_limb_t cy_limb; + mpi_size_t j; + mpi_limb_t prod_high, prod_low; + mpi_limb_t x; + + /* The loop counter and index J goes from -SIZE to -1. This way + * the loop becomes faster. */ + j = -s1_size; + res_ptr -= j; + s1_ptr -= j; + + cy_limb = 0; + do + { + umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); + + prod_low += cy_limb; + cy_limb = (prod_low < cy_limb?1:0) + prod_high; + + x = res_ptr[j]; + prod_low = x + prod_low; + cy_limb += prod_low < x?1:0; + res_ptr[j] = prod_low; + } + while ( ++j ); + + return cy_limb; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-mul3.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul3.c new file mode 100644 index 000000000..5e84f94f3 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-mul3.c @@ -0,0 +1,68 @@ +/* mpih-mul3.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + + +mpi_limb_t +_gcry_mpih_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_size_t s1_size, mpi_limb_t s2_limb) +{ + mpi_limb_t cy_limb; + mpi_size_t j; + mpi_limb_t prod_high, prod_low; + mpi_limb_t x; + + /* The loop counter and index J goes from -SIZE to -1. This way + * the loop becomes faster. */ + j = -s1_size; + res_ptr -= j; + s1_ptr -= j; + + cy_limb = 0; + do + { + umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb); + + prod_low += cy_limb; + cy_limb = (prod_low < cy_limb?1:0) + prod_high; + + x = res_ptr[j]; + prod_low = x - prod_low; + cy_limb += prod_low > x?1:0; + res_ptr[j] = prod_low; + } + while( ++j ); + + return cy_limb; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-rshift.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-rshift.c new file mode 100644 index 000000000..e40794fcf --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-rshift.c @@ -0,0 +1,67 @@ +/* mpih-rshift.c - MPI helper functions + * Copyright (C) 1994, 1996, 1998, 1999, + * 2000, 2001, 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" + + +/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right + * and store the USIZE least significant limbs of the result at WP. + * The bits shifted out to the right are returned. + * + * Argument constraints: + * 1. 0 < CNT < BITS_PER_MP_LIMB + * 2. If the result is to be written over the input, WP must be <= UP. + */ + +mpi_limb_t +_gcry_mpih_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt) +{ + mpi_limb_t high_limb, low_limb; + unsigned sh_1, sh_2; + mpi_size_t i; + mpi_limb_t retval; + + sh_1 = cnt; + wp -= 1; + sh_2 = BITS_PER_MPI_LIMB - sh_1; + high_limb = up[0]; + retval = high_limb << sh_2; + low_limb = high_limb; + for (i=1; i < usize; i++) + { + high_limb = up[i]; + wp[i] = (low_limb >> sh_1) | (high_limb << sh_2); + low_limb = high_limb; + } + wp[i] = low_limb >> sh_1; + + return retval; +} + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpih-sub1.c b/grub-core/lib/libgcrypt-grub/mpi/mpih-sub1.c new file mode 100644 index 000000000..e88821bfb --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpih-sub1.c @@ -0,0 +1,66 @@ +/* mpihelp-add_2.c - MPI helper functions + * Copyright (C) 1994, 1996, 1997, 1998, 2001, + * 2002 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#include +#include +#include +#include "mpi-internal.h" +#include "longlong.h" + +mpi_limb_t +_gcry_mpih_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, + mpi_ptr_t s2_ptr, mpi_size_t size) +{ + mpi_limb_t x, y, cy; + mpi_size_t j; + + /* The loop counter and index J goes from -SIZE to -1. This way + the loop becomes faster. */ + j = -size; + + /* Offset the base pointers to compensate for the negative indices. */ + s1_ptr -= j; + s2_ptr -= j; + res_ptr -= j; + + cy = 0; + do + { + y = s2_ptr[j]; + x = s1_ptr[j]; + y += cy; /* add previous carry to subtrahend */ + cy = y < cy; /* get out carry from that addition */ + y = x - y; /* main subtract */ + cy += y > x; /* get out carry from the subtract, combine */ + res_ptr[j] = y; + } + while( ++j ); + + return cy; +} + + diff --git a/grub-core/lib/libgcrypt-grub/mpi/mpiutil.c b/grub-core/lib/libgcrypt-grub/mpi/mpiutil.c new file mode 100644 index 000000000..3fec8db3b --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/mpi/mpiutil.c @@ -0,0 +1,435 @@ +/* This file was automatically imported with + import_gcry.py. Please don't modify it */ +/* mpiutil.ac - Utility functions for MPI + * Copyright (C) 1998, 2000, 2001, 2002, 2003, + * 2007 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +#include +#include +#include +#include + +#include "g10lib.h" +#include "mpi-internal.h" + + + + +/**************** + * Note: It was a bad idea to use the number of limbs to allocate + * because on a alpha the limbs are large but we normally need + * integers of n bits - So we should change this to bits (or bytes). + * + * But mpi_alloc is used in a lot of places :-(. New code + * should use mpi_new. + */ +gcry_mpi_t +_gcry_mpi_alloc( unsigned nlimbs ) +{ + gcry_mpi_t a; + + a = gcry_xmalloc( sizeof *a ); + a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 0 ) : NULL; + a->alloced = nlimbs; + a->nlimbs = 0; + a->sign = 0; + a->flags = 0; + return a; +} + +void +_gcry_mpi_m_check( gcry_mpi_t a ) +{ + _gcry_check_heap(a); + _gcry_check_heap(a->d); +} + +gcry_mpi_t +_gcry_mpi_alloc_secure( unsigned nlimbs ) +{ + gcry_mpi_t a; + + a = gcry_xmalloc( sizeof *a ); + a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 1 ) : NULL; + a->alloced = nlimbs; + a->flags = 1; + a->nlimbs = 0; + a->sign = 0; + return a; +} + + + +mpi_ptr_t +_gcry_mpi_alloc_limb_space( unsigned int nlimbs, int secure ) +{ + mpi_ptr_t p; + size_t len; + + len = (nlimbs ? nlimbs : 1) * sizeof (mpi_limb_t); + p = secure ? gcry_xmalloc_secure (len) : gcry_xmalloc (len); + if (! nlimbs) + *p = 0; + + return p; +} + +void +_gcry_mpi_free_limb_space( mpi_ptr_t a, unsigned int nlimbs) +{ + if (a) + { + size_t len = nlimbs * sizeof(mpi_limb_t); + + /* If we have information on the number of allocated limbs, we + better wipe that space out. This is a failsafe feature if + secure memory has been disabled or was not properly + implemented in user provided allocation functions. */ + if (len) + wipememory (a, len); + gcry_free(a); + } +} + + +void +_gcry_mpi_assign_limb_space( gcry_mpi_t a, mpi_ptr_t ap, unsigned int nlimbs ) +{ + _gcry_mpi_free_limb_space (a->d, a->alloced); + a->d = ap; + a->alloced = nlimbs; +} + + + +/**************** + * Resize the array of A to NLIMBS. The additional space is cleared + * (set to 0). + */ +void +_gcry_mpi_resize (gcry_mpi_t a, unsigned nlimbs) +{ + size_t i; + + if (nlimbs <= a->alloced) + { + /* We only need to clear the new space (this is a nop if the + limb space is already of the correct size. */ + for (i=a->nlimbs; i < a->alloced; i++) + a->d[i] = 0; + return; + } + + /* Actually resize the limb space. */ + if (a->d) + { + a->d = gcry_xrealloc (a->d, nlimbs * sizeof (mpi_limb_t)); + for (i=a->alloced; i < nlimbs; i++) + a->d[i] = 0; + } + else + { + if (a->flags & 1) + /* Secure memory is wanted. */ + a->d = gcry_xcalloc_secure (nlimbs , sizeof (mpi_limb_t)); + else + /* Standard memory. */ + a->d = gcry_xcalloc (nlimbs , sizeof (mpi_limb_t)); + } + a->alloced = nlimbs; +} + +void +_gcry_mpi_clear( gcry_mpi_t a ) +{ + a->nlimbs = 0; + a->flags = 0; +} + + +void +_gcry_mpi_free( gcry_mpi_t a ) +{ + if (!a ) + return; + if ((a->flags & 4)) + gcry_free( a->d ); + else + { + _gcry_mpi_free_limb_space(a->d, a->alloced); + } + if ((a->flags & ~7)) + log_bug("invalid flag value in mpi\n"); + gcry_free(a); +} + +static void +mpi_set_secure( gcry_mpi_t a ) +{ + mpi_ptr_t ap, bp; + + if ( (a->flags & 1) ) + return; + a->flags |= 1; + ap = a->d; + if (!a->nlimbs) + { + gcry_assert (!ap); + return; + } + bp = mpi_alloc_limb_space (a->nlimbs, 1); + MPN_COPY( bp, ap, a->nlimbs ); + a->d = bp; + _gcry_mpi_free_limb_space (ap, a->alloced); +} + + +gcry_mpi_t +gcry_mpi_set_opaque( gcry_mpi_t a, void *p, unsigned int nbits ) +{ + if (!a) + a = mpi_alloc(0); + + if( a->flags & 4 ) + gcry_free( a->d ); + else + _gcry_mpi_free_limb_space (a->d, a->alloced); + + a->d = p; + a->alloced = 0; + a->nlimbs = 0; + a->sign = nbits; + a->flags = 4; + return a; +} + + +void * +gcry_mpi_get_opaque( gcry_mpi_t a, unsigned int *nbits ) +{ + if( !(a->flags & 4) ) + log_bug("mpi_get_opaque on normal mpi\n"); + if( nbits ) + *nbits = a->sign; + return a->d; +} + + +/**************** + * Note: This copy function should not interpret the MPI + * but copy it transparently. + */ +gcry_mpi_t +gcry_mpi_copy( gcry_mpi_t a ) +{ + int i; + gcry_mpi_t b; + + if( a && (a->flags & 4) ) { + void *p = gcry_is_secure(a->d)? gcry_xmalloc_secure( (a->sign+7)/8 ) + : gcry_xmalloc( (a->sign+7)/8 ); + memcpy( p, a->d, (a->sign+7)/8 ); + b = gcry_mpi_set_opaque( NULL, p, a->sign ); + } + else if( a ) { + b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs ) + : mpi_alloc( a->nlimbs ); + b->nlimbs = a->nlimbs; + b->sign = a->sign; + b->flags = a->flags; + for(i=0; i < b->nlimbs; i++ ) + b->d[i] = a->d[i]; + } + else + b = NULL; + return b; +} + + +/**************** + * This function allocates an MPI which is optimized to hold + * a value as large as the one given in the argument and allocates it + * with the same flags as A. + */ +gcry_mpi_t +_gcry_mpi_alloc_like( gcry_mpi_t a ) +{ + gcry_mpi_t b; + + if( a && (a->flags & 4) ) { + int n = (a->sign+7)/8; + void *p = gcry_is_secure(a->d)? gcry_malloc_secure( n ) + : gcry_malloc( n ); + memcpy( p, a->d, n ); + b = gcry_mpi_set_opaque( NULL, p, a->sign ); + } + else if( a ) { + b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs ) + : mpi_alloc( a->nlimbs ); + b->nlimbs = 0; + b->sign = 0; + b->flags = a->flags; + } + else + b = NULL; + return b; +} + + +gcry_mpi_t +gcry_mpi_set( gcry_mpi_t w, gcry_mpi_t u) +{ + mpi_ptr_t wp, up; + mpi_size_t usize = u->nlimbs; + int usign = u->sign; + + if (!w) + w = _gcry_mpi_alloc( mpi_get_nlimbs(u) ); + RESIZE_IF_NEEDED(w, usize); + wp = w->d; + up = u->d; + MPN_COPY( wp, up, usize ); + w->nlimbs = usize; + w->flags = u->flags; + w->sign = usign; + return w; +} + + +gcry_mpi_t +gcry_mpi_set_ui( gcry_mpi_t w, unsigned long u) +{ + if (!w) + w = _gcry_mpi_alloc (1); + /* FIXME: If U is 0 we have no need to resize and thus possible + allocating the the limbs. */ + RESIZE_IF_NEEDED(w, 1); + w->d[0] = u; + w->nlimbs = u? 1:0; + w->sign = 0; + w->flags = 0; + return w; +} + +gcry_err_code_t +_gcry_mpi_get_ui (gcry_mpi_t w, unsigned long *u) +{ + gcry_err_code_t err = GPG_ERR_NO_ERROR; + unsigned long x = 0; + + if (w->nlimbs > 1) + err = GPG_ERR_TOO_LARGE; + else if (w->nlimbs == 1) + x = w->d[0]; + else + x = 0; + + if (! err) + *u = x; + + return err; +} + +gcry_error_t +gcry_mpi_get_ui (gcry_mpi_t w, unsigned long *u) +{ + gcry_err_code_t err = GPG_ERR_NO_ERROR; + + err = _gcry_mpi_get_ui (w, u); + + return gcry_error (err); +} + +gcry_mpi_t +_gcry_mpi_alloc_set_ui( unsigned long u) +{ + gcry_mpi_t w = mpi_alloc(1); + w->d[0] = u; + w->nlimbs = u? 1:0; + w->sign = 0; + return w; +} + +void +gcry_mpi_swap( gcry_mpi_t a, gcry_mpi_t b) +{ + struct gcry_mpi tmp; + + tmp = *a; *a = *b; *b = tmp; +} + + +gcry_mpi_t +gcry_mpi_new( unsigned int nbits ) +{ + return _gcry_mpi_alloc ( (nbits+BITS_PER_MPI_LIMB-1) + / BITS_PER_MPI_LIMB ); +} + + +gcry_mpi_t +gcry_mpi_snew( unsigned int nbits ) +{ + return _gcry_mpi_alloc_secure ( (nbits+BITS_PER_MPI_LIMB-1) + / BITS_PER_MPI_LIMB ); +} + +void +gcry_mpi_release( gcry_mpi_t a ) +{ + _gcry_mpi_free( a ); +} + + + +void +gcry_mpi_set_flag( gcry_mpi_t a, enum gcry_mpi_flag flag ) +{ + switch( flag ) { + case GCRYMPI_FLAG_SECURE: mpi_set_secure(a); break; + case GCRYMPI_FLAG_OPAQUE: + default: log_bug("invalid flag value\n"); + } +} + +void +gcry_mpi_clear_flag( gcry_mpi_t a, enum gcry_mpi_flag flag ) +{ + (void)a; /* Not yet used. */ + + switch (flag) + { + case GCRYMPI_FLAG_SECURE: + case GCRYMPI_FLAG_OPAQUE: + default: log_bug("invalid flag value\n"); + } +} + +int +gcry_mpi_get_flag( gcry_mpi_t a, enum gcry_mpi_flag flag ) +{ + switch (flag) + { + case GCRYMPI_FLAG_SECURE: return (a->flags & 1); + case GCRYMPI_FLAG_OPAQUE: return (a->flags & 4); + default: log_bug("invalid flag value\n"); + } + /*NOTREACHED*/ + return 0; +} diff --git a/grub-core/lib/libgcrypt-grub/src/ath.h b/grub-core/lib/libgcrypt-grub/src/ath.h new file mode 100644 index 000000000..8769551be --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/ath.h @@ -0,0 +1,147 @@ +/* ath.h - Thread-safeness library. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + + This file is part of Libgcrypt. + + Libgcrypt is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + Libgcrypt is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with Libgcrypt; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef ATH_H +#define ATH_H + +#include + +#ifdef _WIN32 +# include +#else /* !_WIN32 */ +# ifdef HAVE_SYS_SELECT_H +# include +# else +# include +# endif +# include +# ifdef HAVE_SYS_MSG_H +# include /* (e.g. for zOS) */ +# endif +# include +#endif /* !_WIN32 */ +#include + + + +/* Define _ATH_EXT_SYM_PREFIX if you want to give all external symbols + a prefix. */ +#define _ATH_EXT_SYM_PREFIX _gcry_ + +#ifdef _ATH_EXT_SYM_PREFIX +#define _ATH_PREFIX1(x,y) x ## y +#define _ATH_PREFIX2(x,y) _ATH_PREFIX1(x,y) +#define _ATH_PREFIX(x) _ATH_PREFIX2(_ATH_EXT_SYM_PREFIX,x) +#define ath_install _ATH_PREFIX(ath_install) +#define ath_init _ATH_PREFIX(ath_init) +#define ath_mutex_init _ATH_PREFIX(ath_mutex_init) +#define ath_mutex_destroy _ATH_PREFIX(ath_mutex_destroy) +#define ath_mutex_lock _ATH_PREFIX(ath_mutex_lock) +#define ath_mutex_unlock _ATH_PREFIX(ath_mutex_unlock) +#define ath_read _ATH_PREFIX(ath_read) +#define ath_write _ATH_PREFIX(ath_write) +#define ath_select _ATH_PREFIX(ath_select) +#define ath_waitpid _ATH_PREFIX(ath_waitpid) +#define ath_connect _ATH_PREFIX(ath_connect) +#define ath_accept _ATH_PREFIX(ath_accept) +#define ath_sendmsg _ATH_PREFIX(ath_sendmsg) +#define ath_recvmsg _ATH_PREFIX(ath_recvmsg) +#endif + + +enum ath_thread_option + { + ATH_THREAD_OPTION_DEFAULT = 0, + ATH_THREAD_OPTION_USER = 1, + ATH_THREAD_OPTION_PTH = 2, + ATH_THREAD_OPTION_PTHREAD = 3 + }; + +struct ath_ops +{ + /* The OPTION field encodes the thread model and the version number + of this structure. + Bits 7 - 0 are used for the thread model + Bits 15 - 8 are used for the version number. + */ + unsigned int option; + + int (*init) (void); + int (*mutex_init) (void **priv); + int (*mutex_destroy) (void *priv); + int (*mutex_lock) (void *priv); + int (*mutex_unlock) (void *priv); + ssize_t (*read) (int fd, void *buf, size_t nbytes); + ssize_t (*write) (int fd, const void *buf, size_t nbytes); +#ifdef _WIN32 + ssize_t (*select) (int nfd, void *rset, void *wset, void *eset, + struct timeval *timeout); + ssize_t (*waitpid) (pid_t pid, int *status, int options); + int (*accept) (int s, void *addr, int *length_ptr); + int (*connect) (int s, void *addr, int length); + int (*sendmsg) (int s, const void *msg, int flags); + int (*recvmsg) (int s, void *msg, int flags); +#else + ssize_t (*select) (int nfd, fd_set *rset, fd_set *wset, fd_set *eset, + struct timeval *timeout); + ssize_t (*waitpid) (pid_t pid, int *status, int options); + int (*accept) (int s, struct sockaddr *addr, socklen_t *length_ptr); + int (*connect) (int s, struct sockaddr *addr, socklen_t length); + int (*sendmsg) (int s, const struct msghdr *msg, int flags); + int (*recvmsg) (int s, struct msghdr *msg, int flags); +#endif +}; + +gpg_err_code_t ath_install (struct ath_ops *ath_ops, int check_only); +int ath_init (void); + + +/* Functions for mutual exclusion. */ +typedef void *ath_mutex_t; +#define ATH_MUTEX_INITIALIZER 0 + +int ath_mutex_init (ath_mutex_t *mutex); +int ath_mutex_destroy (ath_mutex_t *mutex); +int ath_mutex_lock (ath_mutex_t *mutex); +int ath_mutex_unlock (ath_mutex_t *mutex); + +/* Replacement for the POSIX functions, which can be used to allow + other (user-level) threads to run. */ +ssize_t ath_read (int fd, void *buf, size_t nbytes); +ssize_t ath_write (int fd, const void *buf, size_t nbytes); +#ifdef _WIN32 +ssize_t ath_select (int nfd, void *rset, void *wset, void *eset, + struct timeval *timeout); +ssize_t ath_waitpid (pid_t pid, int *status, int options); +int ath_accept (int s, void *addr, int *length_ptr); +int ath_connect (int s, void *addr, int length); +int ath_sendmsg (int s, const void *msg, int flags); +int ath_recvmsg (int s, void *msg, int flags); +#else +ssize_t ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset, + struct timeval *timeout); +ssize_t ath_waitpid (pid_t pid, int *status, int options); +int ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr); +int ath_connect (int s, struct sockaddr *addr, socklen_t length); +int ath_sendmsg (int s, const struct msghdr *msg, int flags); +int ath_recvmsg (int s, struct msghdr *msg, int flags); +#endif + +#endif /* ATH_H */ diff --git a/grub-core/lib/libgcrypt-grub/src/cipher-proto.h b/grub-core/lib/libgcrypt-grub/src/cipher-proto.h new file mode 100644 index 000000000..347681ffe --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/cipher-proto.h @@ -0,0 +1,124 @@ +/* cipher-proto.h - Internal declarations + * Copyright (C) 2008, 2011 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +/* This file has been factored out from cipher.h so that it can be + used standalone in visibility.c . */ + +#ifndef G10_CIPHER_PROTO_H +#define G10_CIPHER_PROTO_H + +/* Definition of a function used to report selftest failures. + DOMAIN is a string describing the function block: + "cipher", "digest", "pubkey or "random", + ALGO is the algorithm under test, + WHAT is a string describing what has been tested, + DESC is a string describing the error. */ +typedef void (*selftest_report_func_t)(const char *domain, + int algo, + const char *what, + const char *errdesc); + +/* Definition of the selftest functions. */ +typedef gpg_err_code_t (*selftest_func_t) + (int algo, int extended, selftest_report_func_t report); + + +/* An extended type of the generate function. */ +typedef gcry_err_code_t (*pk_ext_generate_t) + (int algo, + unsigned int nbits, + unsigned long evalue, + gcry_sexp_t genparms, + gcry_mpi_t *skey, + gcry_mpi_t **retfactors, + gcry_sexp_t *extrainfo); + +/* The type used to compute the keygrip. */ +typedef gpg_err_code_t (*pk_comp_keygrip_t) + (gcry_md_hd_t md, gcry_sexp_t keyparm); + +/* The type used to query ECC curve parameters. */ +typedef gcry_err_code_t (*pk_get_param_t) + (const char *name, gcry_mpi_t *pkey); + +/* The type used to query an ECC curve name. */ +typedef const char *(*pk_get_curve_t)(gcry_mpi_t *pkey, int iterator, + unsigned int *r_nbits); + +/* The type used to query ECC curve parameters by name. */ +typedef gcry_sexp_t (*pk_get_curve_param_t)(const char *name); + +/* The type used to convey additional information to a cipher. */ +typedef gpg_err_code_t (*cipher_set_extra_info_t) + (void *c, int what, const void *buffer, size_t buflen); + + +/* Extra module specification structures. These are used for internal + modules which provide more functions than available through the + public algorithm register APIs. */ +typedef struct cipher_extra_spec +{ + selftest_func_t selftest; + cipher_set_extra_info_t set_extra_info; +} cipher_extra_spec_t; + +typedef struct md_extra_spec +{ + selftest_func_t selftest; +} md_extra_spec_t; + +typedef struct pk_extra_spec +{ + selftest_func_t selftest; + pk_ext_generate_t ext_generate; + pk_comp_keygrip_t comp_keygrip; + pk_get_param_t get_param; + pk_get_curve_t get_curve; + pk_get_curve_param_t get_curve_param; +} pk_extra_spec_t; + + + +/* The private register functions. */ +gcry_error_t _gcry_cipher_register (gcry_cipher_spec_t *cipher, + cipher_extra_spec_t *extraspec, + int *algorithm_id, + gcry_module_t *module); +gcry_error_t _gcry_md_register (gcry_md_spec_t *cipher, + md_extra_spec_t *extraspec, + unsigned int *algorithm_id, + gcry_module_t *module); +gcry_error_t _gcry_pk_register (gcry_pk_spec_t *cipher, + pk_extra_spec_t *extraspec, + unsigned int *algorithm_id, + gcry_module_t *module); + +/* The selftest functions. */ +gcry_error_t _gcry_cipher_selftest (int algo, int extended, + selftest_report_func_t report); +gcry_error_t _gcry_md_selftest (int algo, int extended, + selftest_report_func_t report); +gcry_error_t _gcry_pk_selftest (int algo, int extended, + selftest_report_func_t report); +gcry_error_t _gcry_hmac_selftest (int algo, int extended, + selftest_report_func_t report); + +gcry_error_t _gcry_random_selftest (selftest_report_func_t report); + +#endif /*G10_CIPHER_PROTO_H*/ diff --git a/grub-core/lib/libgcrypt-grub/src/cipher.h b/grub-core/lib/libgcrypt-grub/src/cipher.h new file mode 100644 index 000000000..48eeeda5e --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/cipher.h @@ -0,0 +1,182 @@ +/* cipher.h + * Copyright (C) 1998, 2002, 2003, 2009 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ +#ifndef G10_CIPHER_H +#define G10_CIPHER_H + +#include + +#define DBG_CIPHER _gcry_get_debug_flag( 1 ) + +#include "../random/random.h" + +#define PUBKEY_FLAG_NO_BLINDING (1 << 0) + +enum pk_operation + { + PUBKEY_OP_ENCRYPT, + PUBKEY_OP_DECRYPT, + PUBKEY_OP_SIGN, + PUBKEY_OP_VERIFY + }; + +enum pk_encoding + { + PUBKEY_ENC_RAW, + PUBKEY_ENC_PKCS1, + PUBKEY_ENC_OAEP, + PUBKEY_ENC_PSS, + PUBKEY_ENC_UNKNOWN + }; + +struct pk_encoding_ctx +{ + enum pk_operation op; + unsigned int nbits; + + enum pk_encoding encoding; + int flags; + + int hash_algo; + + /* for OAEP */ + unsigned char *label; + size_t labellen; + + /* for PSS */ + size_t saltlen; + + int (* verify_cmp) (void *opaque, gcry_mpi_t tmp); + void *verify_arg; +}; + +#define CIPHER_INFO_NO_WEAK_KEY 1 + +#include "cipher-proto.h" + + +/*-- rmd160.c --*/ +void _gcry_rmd160_hash_buffer (void *outbuf, + const void *buffer, size_t length); +/*-- sha1.c --*/ +void _gcry_sha1_hash_buffer (void *outbuf, + const void *buffer, size_t length); + +/*-- rijndael.c --*/ +void _gcry_aes_cfb_enc (void *context, unsigned char *iv, + void *outbuf, const void *inbuf, + unsigned int nblocks); +void _gcry_aes_cfb_dec (void *context, unsigned char *iv, + void *outbuf_arg, const void *inbuf_arg, + unsigned int nblocks); +void _gcry_aes_cbc_enc (void *context, unsigned char *iv, + void *outbuf_arg, const void *inbuf_arg, + unsigned int nblocks, int cbc_mac); +void _gcry_aes_cbc_dec (void *context, unsigned char *iv, + void *outbuf_arg, const void *inbuf_arg, + unsigned int nblocks); +void _gcry_aes_ctr_enc (void *context, unsigned char *ctr, + void *outbuf_arg, const void *inbuf_arg, + unsigned int nblocks); + + +/*-- dsa.c --*/ +void _gcry_register_pk_dsa_progress (gcry_handler_progress_t cbc, void *cb_data); + +/*-- elgamal.c --*/ +void _gcry_register_pk_elg_progress (gcry_handler_progress_t cb, + void *cb_data); + + +/*-- ecc.c --*/ +void _gcry_register_pk_ecc_progress (gcry_handler_progress_t cbc, + void *cb_data); + + +/*-- primegen.c --*/ +void _gcry_register_primegen_progress (gcry_handler_progress_t cb, + void *cb_data); + +/*-- pubkey.c --*/ +const char * _gcry_pk_aliased_algo_name (int algorithm); + +/* Declarations for the cipher specifications. */ +extern gcry_cipher_spec_t _gcry_cipher_spec_blowfish; +extern gcry_cipher_spec_t _gcry_cipher_spec_des; +extern gcry_cipher_spec_t _gcry_cipher_spec_tripledes; +extern gcry_cipher_spec_t _gcry_cipher_spec_arcfour; +extern gcry_cipher_spec_t _gcry_cipher_spec_cast5; +extern gcry_cipher_spec_t _gcry_cipher_spec_aes; +extern gcry_cipher_spec_t _gcry_cipher_spec_aes192; +extern gcry_cipher_spec_t _gcry_cipher_spec_aes256; +extern gcry_cipher_spec_t _gcry_cipher_spec_twofish; +extern gcry_cipher_spec_t _gcry_cipher_spec_twofish128; +extern gcry_cipher_spec_t _gcry_cipher_spec_serpent128; +extern gcry_cipher_spec_t _gcry_cipher_spec_serpent192; +extern gcry_cipher_spec_t _gcry_cipher_spec_serpent256; +extern gcry_cipher_spec_t _gcry_cipher_spec_rfc2268_40; +extern gcry_cipher_spec_t _gcry_cipher_spec_seed; +extern gcry_cipher_spec_t _gcry_cipher_spec_camellia128; +extern gcry_cipher_spec_t _gcry_cipher_spec_camellia192; +extern gcry_cipher_spec_t _gcry_cipher_spec_camellia256; +extern gcry_cipher_spec_t _gcry_cipher_spec_idea; + +extern cipher_extra_spec_t _gcry_cipher_extraspec_tripledes; +extern cipher_extra_spec_t _gcry_cipher_extraspec_aes; +extern cipher_extra_spec_t _gcry_cipher_extraspec_aes192; +extern cipher_extra_spec_t _gcry_cipher_extraspec_aes256; + + +/* Declarations for the digest specifications. */ +extern gcry_md_spec_t _gcry_digest_spec_crc32; +extern gcry_md_spec_t _gcry_digest_spec_crc32_rfc1510; +extern gcry_md_spec_t _gcry_digest_spec_crc24_rfc2440; +extern gcry_md_spec_t _gcry_digest_spec_md4; +extern gcry_md_spec_t _gcry_digest_spec_md5; +extern gcry_md_spec_t _gcry_digest_spec_rmd160; +extern gcry_md_spec_t _gcry_digest_spec_sha1; +extern gcry_md_spec_t _gcry_digest_spec_sha224; +extern gcry_md_spec_t _gcry_digest_spec_sha256; +extern gcry_md_spec_t _gcry_digest_spec_sha512; +extern gcry_md_spec_t _gcry_digest_spec_sha384; +extern gcry_md_spec_t _gcry_digest_spec_tiger; +extern gcry_md_spec_t _gcry_digest_spec_tiger1; +extern gcry_md_spec_t _gcry_digest_spec_tiger2; +extern gcry_md_spec_t _gcry_digest_spec_whirlpool; + +extern md_extra_spec_t _gcry_digest_extraspec_sha1; +extern md_extra_spec_t _gcry_digest_extraspec_sha224; +extern md_extra_spec_t _gcry_digest_extraspec_sha256; +extern md_extra_spec_t _gcry_digest_extraspec_sha384; +extern md_extra_spec_t _gcry_digest_extraspec_sha512; + +/* Declarations for the pubkey cipher specifications. */ +extern gcry_pk_spec_t _gcry_pubkey_spec_rsa; +extern gcry_pk_spec_t _gcry_pubkey_spec_elg; +extern gcry_pk_spec_t _gcry_pubkey_spec_dsa; +extern gcry_pk_spec_t _gcry_pubkey_spec_ecdsa; +extern gcry_pk_spec_t _gcry_pubkey_spec_ecdh; + +extern pk_extra_spec_t _gcry_pubkey_extraspec_rsa; +extern pk_extra_spec_t _gcry_pubkey_extraspec_dsa; +extern pk_extra_spec_t _gcry_pubkey_extraspec_elg; +extern pk_extra_spec_t _gcry_pubkey_extraspec_ecdsa; + + +#endif /*G10_CIPHER_H*/ diff --git a/grub-core/lib/libgcrypt-grub/src/g10lib.h b/grub-core/lib/libgcrypt-grub/src/g10lib.h new file mode 100644 index 000000000..85a51beea --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/g10lib.h @@ -0,0 +1,302 @@ +/* g10lib.h - Internal definitions for libgcrypt + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 + * 2007, 2011 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +/* This header is to be used inside of libgcrypt in place of gcrypt.h. + This way we can better distinguish between internal and external + usage of gcrypt.h. */ + +#ifndef G10LIB_H +#define G10LIB_H 1 + +#ifdef _GCRYPT_H +#error gcrypt.h already included +#endif + +#ifndef _GCRYPT_IN_LIBGCRYPT +#error something is wrong with config.h +#endif + +#include +#include + +#include "visibility.h" +#include "types.h" + + + + +/* Attribute handling macros. */ + +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) +#define JNLIB_GCC_M_FUNCTION 1 +#define JNLIB_GCC_A_NR __attribute__ ((noreturn)) +#define JNLIB_GCC_A_PRINTF( f, a ) __attribute__ ((format (__printf__,f,a))) +#define JNLIB_GCC_A_NR_PRINTF( f, a ) \ + __attribute__ ((noreturn, format (__printf__,f,a))) +#define GCC_ATTR_NORETURN __attribute__ ((__noreturn__)) +#else +#define JNLIB_GCC_A_NR +#define JNLIB_GCC_A_PRINTF( f, a ) +#define JNLIB_GCC_A_NR_PRINTF( f, a ) +#define GCC_ATTR_NORETURN +#endif + +#if __GNUC__ >= 3 +/* According to glibc this attribute is available since 2.8 however we + better play safe and use it only with gcc 3 or newer. */ +#define GCC_ATTR_FORMAT_ARG(a) __attribute__ ((format_arg (a))) +#else +#define GCC_ATTR_FORMAT_ARG(a) +#endif + + +/* Gettext macros. */ + +/* Some handy macros */ +#ifndef STR +#define STR(v) #v +#endif +#define STR2(v) STR(v) +#define DIM(v) (sizeof(v)/sizeof((v)[0])) +#define DIMof(type,member) DIM(((type *)0)->member) + + + +/*-- src/global.c -*/ +int _gcry_global_is_operational (void); +gcry_error_t _gcry_vcontrol (enum gcry_ctl_cmds cmd, va_list arg_ptr); +void _gcry_check_heap (const void *a); +int _gcry_get_debug_flag (unsigned int mask); + + +/*-- src/misc.c --*/ + +#if defined(JNLIB_GCC_M_FUNCTION) || __STDC_VERSION__ >= 199901L +void _gcry_bug (const char *file, int line, + const char *func) GCC_ATTR_NORETURN; +void _gcry_assert_failed (const char *expr, const char *file, int line, + const char *func) GCC_ATTR_NORETURN; +#else +void _gcry_bug (const char *file, int line); +void _gcry_assert_failed (const char *expr, const char *file, int line); +#endif + +const char *_gcry_gettext (const char *key) GCC_ATTR_FORMAT_ARG(1); +void _gcry_fatal_error(int rc, const char *text ) JNLIB_GCC_A_NR; +void _gcry_log( int level, const char *fmt, ... ) JNLIB_GCC_A_PRINTF(2,3); +void _gcry_log_bug( const char *fmt, ... ) JNLIB_GCC_A_NR_PRINTF(1,2); +void _gcry_log_fatal( const char *fmt, ... ) JNLIB_GCC_A_NR_PRINTF(1,2); +void _gcry_log_error( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); +void _gcry_log_info( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); +int _gcry_log_info_with_dummy_fp (FILE *fp, const char *fmt, ... ) + JNLIB_GCC_A_PRINTF(2,3); +void _gcry_log_debug( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); +void _gcry_log_printf ( const char *fmt, ... ) JNLIB_GCC_A_PRINTF(1,2); +void _gcry_log_printhex (const char *text, const void *buffer, size_t length); + +void _gcry_set_log_verbosity( int level ); +int _gcry_log_verbosity( int level ); + +#ifdef JNLIB_GCC_M_FUNCTION +#define BUG() _gcry_bug( __FILE__ , __LINE__, __FUNCTION__ ) +#define gcry_assert(expr) ((expr)? (void)0 \ + : _gcry_assert_failed (STR(expr), __FILE__, __LINE__, __FUNCTION__)) +#elif __STDC_VERSION__ >= 199901L +#define BUG() _gcry_bug( __FILE__ , __LINE__, __func__ ) +#define gcry_assert(expr) ((expr)? (void)0 \ + : _gcry_assert_failed (STR(expr), __FILE__, __LINE__, __func__)) +#else +#define BUG() _gcry_bug( __FILE__ , __LINE__ ) +#define gcry_assert(expr) ((expr)? (void)0 \ + : _gcry_assert_failed (STR(expr), __FILE__, __LINE__)) +#endif + + +#define log_bug _gcry_log_bug +#define log_fatal _gcry_log_fatal +#define log_error _gcry_log_error +#define log_info _gcry_log_info +#define log_debug _gcry_log_debug +#define log_printf _gcry_log_printf +#define log_printhex _gcry_log_printhex + + +/*-- src/hwfeatures.c --*/ +/* (Do not change these values unless synced with the asm code.) */ +#define HWF_PADLOCK_RNG 1 +#define HWF_PADLOCK_AES 2 +#define HWF_PADLOCK_SHA 4 +#define HWF_PADLOCK_MMUL 8 + +#define HWF_INTEL_AESNI 256 + + +unsigned int _gcry_get_hw_features (void); +void _gcry_detect_hw_features (unsigned int); + + +/*-- mpi/mpiutil.c --*/ +const char *_gcry_mpi_get_hw_config (void); + + +/*-- cipher/pubkey.c --*/ + +/* FIXME: shouldn't this go into mpi.h? */ +#ifndef mpi_powm +#define mpi_powm(w,b,e,m) gcry_mpi_powm( (w), (b), (e), (m) ) +#endif + +/*-- primegen.c --*/ +gcry_mpi_t _gcry_generate_secret_prime (unsigned int nbits, + gcry_random_level_t random_level, + int (*extra_check)(void*, gcry_mpi_t), + void *extra_check_arg); +gcry_mpi_t _gcry_generate_public_prime (unsigned int nbits, + gcry_random_level_t random_level, + int (*extra_check)(void*, gcry_mpi_t), + void *extra_check_arg); +gcry_mpi_t _gcry_generate_elg_prime (int mode, + unsigned int pbits, unsigned int qbits, + gcry_mpi_t g, gcry_mpi_t **factors); +gcry_mpi_t _gcry_derive_x931_prime (const gcry_mpi_t xp, + const gcry_mpi_t xp1, const gcry_mpi_t xp2, + const gcry_mpi_t e, + gcry_mpi_t *r_p1, gcry_mpi_t *r_p2); +gpg_err_code_t _gcry_generate_fips186_2_prime + (unsigned int pbits, unsigned int qbits, + const void *seed, size_t seedlen, + gcry_mpi_t *r_q, gcry_mpi_t *r_p, + int *r_counter, + void **r_seed, size_t *r_seedlen); +gpg_err_code_t _gcry_generate_fips186_3_prime + (unsigned int pbits, unsigned int qbits, + const void *seed, size_t seedlen, + gcry_mpi_t *r_q, gcry_mpi_t *r_p, + int *r_counter, + void **r_seed, size_t *r_seedlen, int *r_hashalgo); + + +/* Replacements of missing functions (missing-string.c). */ +#ifndef HAVE_STPCPY +char *stpcpy (char *a, const char *b); +#endif +#ifndef HAVE_STRCASECMP +int strcasecmp (const char *a, const char *b) _GCRY_GCC_ATTR_PURE; +#endif + + +/* Macros used to rename missing functions. */ +#ifndef HAVE_STRTOUL +#define strtoul(a,b,c) ((unsigned long)strtol((a),(b),(c))) +#endif +#ifndef HAVE_MEMMOVE +#define memmove(d, s, n) bcopy((s), (d), (n)) +#endif +#ifndef HAVE_STRICMP +#define stricmp(a,b) strcasecmp( (a), (b) ) +#endif +#ifndef HAVE_ATEXIT +#define atexit(a) (on_exit((a),0)) +#endif +#ifndef HAVE_RAISE +#define raise(a) kill(getpid(), (a)) +#endif + + +/* Stack burning. */ + +void _gcry_burn_stack (int bytes); + + +/* To avoid that a compiler optimizes certain memset calls away, these + macros may be used instead. */ +#define wipememory2(_ptr,_set,_len) do { \ + volatile char *_vptr=(volatile char *)(_ptr); \ + size_t _vlen=(_len); \ + while(_vlen) { *_vptr=(_set); _vptr++; _vlen--; } \ + } while(0) +#define wipememory(_ptr,_len) wipememory2(_ptr,0,_len) + + + +/* Digit predicates. */ + +#define digitp(p) (*(p) >= '0' && *(p) <= '9') +#define octdigitp(p) (*(p) >= '0' && *(p) <= '7') +#define alphap(a) ( (*(a) >= 'A' && *(a) <= 'Z') \ + || (*(a) >= 'a' && *(a) <= 'z')) +#define hexdigitp(a) (digitp (a) \ + || (*(a) >= 'A' && *(a) <= 'F') \ + || (*(a) >= 'a' && *(a) <= 'f')) + + +/*-- sexp.c --*/ +gcry_error_t _gcry_sexp_vbuild (gcry_sexp_t *retsexp, size_t *erroff, + const char *format, va_list arg_ptr); +char *_gcry_sexp_nth_string (const gcry_sexp_t list, int number); + + +/*-- fips.c --*/ + +void _gcry_initialize_fips_mode (int force); + +int _gcry_fips_mode (void); +#define fips_mode() _gcry_fips_mode () + +int _gcry_enforced_fips_mode (void); + +void _gcry_set_enforced_fips_mode (void); + +void _gcry_inactivate_fips_mode (const char *text); +int _gcry_is_fips_mode_inactive (void); + + +void _gcry_fips_signal_error (const char *srcfile, + int srcline, + const char *srcfunc, + int is_fatal, + const char *description); +#ifdef JNLIB_GCC_M_FUNCTION +# define fips_signal_error(a) \ + _gcry_fips_signal_error (__FILE__, __LINE__, __FUNCTION__, 0, (a)) +# define fips_signal_fatal_error(a) \ + _gcry_fips_signal_error (__FILE__, __LINE__, __FUNCTION__, 1, (a)) +#else +# define fips_signal_error(a) \ + _gcry_fips_signal_error (__FILE__, __LINE__, NULL, 0, (a)) +# define fips_signal_fatal_error(a) \ + _gcry_fips_signal_error (__FILE__, __LINE__, NULL, 1, (a)) +#endif + +int _gcry_fips_is_operational (void); +#define fips_is_operational() (_gcry_global_is_operational ()) +#define fips_not_operational() (GCRY_GPG_ERR_NOT_OPERATIONAL) + +int _gcry_fips_test_operational (void); +int _gcry_fips_test_error_or_operational (void); + +gpg_err_code_t _gcry_fips_run_selftests (int extended); + +void _gcry_fips_noreturn (void); +#define fips_noreturn() (_gcry_fips_noreturn ()) + + + +#endif /* G10LIB_H */ diff --git a/grub-core/lib/libgcrypt-grub/src/gcrypt-module.h b/grub-core/lib/libgcrypt-grub/src/gcrypt-module.h new file mode 100644 index 000000000..e69de29bb diff --git a/grub-core/lib/libgcrypt-grub/src/gcrypt.h b/grub-core/lib/libgcrypt-grub/src/gcrypt.h new file mode 100644 index 000000000..9133f6ecd --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/gcrypt.h @@ -0,0 +1,1925 @@ +/* gcrypt.h - GNU Cryptographic Library Interface -*- c -*- + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 + 2007, 2008, 2009, 2010, 2011, + 2012 Free Software Foundation, Inc. + Copyright (C) 2012, 2013 g10 Code GmbH + + This file is part of Libgcrypt. + + Libgcrypt is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + Libgcrypt is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see . + + File: src/gcrypt.h. Generated from gcrypt.h.in by configure. */ + +#ifndef _GCRYPT_H +#define _GCRYPT_H + +#include +#include +#include + +#include + +#include + +#if defined _WIN32 || defined __WIN32__ +# include +# include +# include +# ifndef __GNUC__ + typedef long ssize_t; + typedef int pid_t; +# endif /*!__GNUC__*/ +#else +# include +# include +# include +#endif /*!_WIN32*/ + +typedef socklen_t gcry_socklen_t; + +/* This is required for error code compatibility. */ +#define _GCRY_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_GCRYPT + +#ifdef __cplusplus +extern "C" { +#if 0 /* (Keep Emacsens' auto-indent happy.) */ +} +#endif +#endif + +/* The version of this header should match the one of the library. It + should not be used by a program because gcry_check_version() should + return the same version. The purpose of this macro is to let + autoconf (using the AM_PATH_GCRYPT macro) check that this header + matches the installed library. */ +#define GCRYPT_VERSION "1.5.3" + +/* The version number of this header. It may be used to handle minor + API incompatibilities. */ +#define GCRYPT_VERSION_NUMBER 0x010503 + + +/* Internal: We can't use the convenience macros for the multi + precision integer functions when building this library. */ +#ifdef _GCRYPT_IN_LIBGCRYPT +#ifndef GCRYPT_NO_MPI_MACROS +#define GCRYPT_NO_MPI_MACROS 1 +#endif +#endif + +/* We want to use gcc attributes when possible. Warning: Don't use + these macros in your programs: As indicated by the leading + underscore they are subject to change without notice. */ +#ifdef __GNUC__ + +#define _GCRY_GCC_VERSION (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) + +#if _GCRY_GCC_VERSION >= 30100 +#define _GCRY_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#if _GCRY_GCC_VERSION >= 29600 +#define _GCRY_GCC_ATTR_PURE __attribute__ ((__pure__)) +#endif + +#if _GCRY_GCC_VERSION >= 30200 +#define _GCRY_GCC_ATTR_MALLOC __attribute__ ((__malloc__)) +#endif + +#endif /*__GNUC__*/ + +#ifndef _GCRY_GCC_ATTR_DEPRECATED +#define _GCRY_GCC_ATTR_DEPRECATED +#endif +#ifndef _GCRY_GCC_ATTR_PURE +#define _GCRY_GCC_ATTR_PURE +#endif +#ifndef _GCRY_GCC_ATTR_MALLOC +#define _GCRY_GCC_ATTR_MALLOC +#endif + +/* Make up an attribute to mark functions and types as deprecated but + allow internal use by Libgcrypt. */ +#ifdef _GCRYPT_IN_LIBGCRYPT +#define _GCRY_ATTR_INTERNAL +#else +#define _GCRY_ATTR_INTERNAL _GCRY_GCC_ATTR_DEPRECATED +#endif + +/* Wrappers for the libgpg-error library. */ + +typedef gpg_error_t gcry_error_t; +typedef gpg_err_code_t gcry_err_code_t; +typedef gpg_err_source_t gcry_err_source_t; + +static GPG_ERR_INLINE gcry_error_t +gcry_err_make (gcry_err_source_t source, gcry_err_code_t code) +{ + return gpg_err_make (source, code); +} + +/* The user can define GPG_ERR_SOURCE_DEFAULT before including this + file to specify a default source for gpg_error. */ +#ifndef GCRY_ERR_SOURCE_DEFAULT +#define GCRY_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_USER_1 +#endif + +static GPG_ERR_INLINE gcry_error_t +gcry_error (gcry_err_code_t code) +{ + return gcry_err_make (GCRY_ERR_SOURCE_DEFAULT, code); +} + +static GPG_ERR_INLINE gcry_err_code_t +gcry_err_code (gcry_error_t err) +{ + return gpg_err_code (err); +} + + +static GPG_ERR_INLINE gcry_err_source_t +gcry_err_source (gcry_error_t err) +{ + return gpg_err_source (err); +} + +/* Return a pointer to a string containing a description of the error + code in the error value ERR. */ +const char *gcry_strerror (gcry_error_t err); + +/* Return a pointer to a string containing a description of the error + source in the error value ERR. */ +const char *gcry_strsource (gcry_error_t err); + +/* Retrieve the error code for the system error ERR. This returns + GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped (report + this). */ +gcry_err_code_t gcry_err_code_from_errno (int err); + +/* Retrieve the system error for the error code CODE. This returns 0 + if CODE is not a system error code. */ +int gcry_err_code_to_errno (gcry_err_code_t code); + +/* Return an error value with the error source SOURCE and the system + error ERR. */ +gcry_error_t gcry_err_make_from_errno (gcry_err_source_t source, int err); + +/* Return an error value with the system error ERR. */ +gcry_err_code_t gcry_error_from_errno (int err); + + +/* This enum is deprecated; it is only declared for the sake of + complete API compatibility. */ +enum gcry_thread_option + { + _GCRY_THREAD_OPTION_DUMMY + } _GCRY_GCC_ATTR_DEPRECATED; + + +/* Constants defining the thread model to use. Used with the OPTION + field of the struct gcry_thread_cbs. */ +#define GCRY_THREAD_OPTION_DEFAULT 0 +#define GCRY_THREAD_OPTION_USER 1 +#define GCRY_THREAD_OPTION_PTH 2 +#define GCRY_THREAD_OPTION_PTHREAD 3 + +/* The version number encoded in the OPTION field of the struct + gcry_thread_cbs. */ +#define GCRY_THREAD_OPTION_VERSION 0 + +/* Wrapper for struct ath_ops. */ +struct gcry_thread_cbs +{ + /* The OPTION field encodes the thread model and the version number + of this structure. + Bits 7 - 0 are used for the thread model + Bits 15 - 8 are used for the version number. + */ + unsigned int option; + + int (*init) (void); + int (*mutex_init) (void **priv); + int (*mutex_destroy) (void **priv); + int (*mutex_lock) (void **priv); + int (*mutex_unlock) (void **priv); + ssize_t (*read) (int fd, void *buf, size_t nbytes); + ssize_t (*write) (int fd, const void *buf, size_t nbytes); +#ifdef _WIN32 + ssize_t (*select) (int nfd, void *rset, void *wset, void *eset, + struct timeval *timeout); + ssize_t (*waitpid) (pid_t pid, int *status, int options); + int (*accept) (int s, void *addr, int *length_ptr); + int (*connect) (int s, void *addr, gcry_socklen_t length); + int (*sendmsg) (int s, const void *msg, int flags); + int (*recvmsg) (int s, void *msg, int flags); +#else + ssize_t (*select) (int nfd, fd_set *rset, fd_set *wset, fd_set *eset, + struct timeval *timeout); + ssize_t (*waitpid) (pid_t pid, int *status, int options); + int (*accept) (int s, struct sockaddr *addr, gcry_socklen_t *length_ptr); + int (*connect) (int s, struct sockaddr *addr, gcry_socklen_t length); + int (*sendmsg) (int s, const struct msghdr *msg, int flags); + int (*recvmsg) (int s, struct msghdr *msg, int flags); +#endif +}; + +#ifdef _WIN32 +# define _GCRY_THREAD_OPTION_PTH_IMPL_NET \ +static ssize_t gcry_pth_select (int nfd, void *rset, void *wset, \ + void *eset, struct timeval *timeout) \ + { return pth_select (nfd, rset, wset, eset, timeout); } \ +static ssize_t gcry_pth_waitpid (pid_t pid, int *status, int options) \ + { return pth_waitpid (pid, status, options); } \ +static int gcry_pth_accept (int s, void *addr, \ + gcry_socklen_t *length_ptr) \ + { return pth_accept (s, addr, length_ptr); } \ +static int gcry_pth_connect (int s, void *addr, \ + gcry_socklen_t length) \ + { return pth_connect (s, addr, length); } +#else /*!_WIN32*/ +# define _GCRY_THREAD_OPTION_PTH_IMPL_NET \ +static ssize_t gcry_pth_select (int nfd, fd_set *rset, fd_set *wset, \ + fd_set *eset, struct timeval *timeout) \ + { return pth_select (nfd, rset, wset, eset, timeout); } \ +static ssize_t gcry_pth_waitpid (pid_t pid, int *status, int options) \ + { return pth_waitpid (pid, status, options); } \ +static int gcry_pth_accept (int s, struct sockaddr *addr, \ + gcry_socklen_t *length_ptr) \ + { return pth_accept (s, addr, length_ptr); } \ +static int gcry_pth_connect (int s, struct sockaddr *addr, \ + gcry_socklen_t length) \ + { return pth_connect (s, addr, length); } +#endif /*!_WIN32*/ + + + +#define GCRY_THREAD_OPTION_PTH_IMPL \ +static int gcry_pth_init (void) \ +{ return (pth_init () == FALSE) ? errno : 0; } \ +static int gcry_pth_mutex_init (void **priv) \ +{ \ + int err = 0; \ + pth_mutex_t *lock = malloc (sizeof (pth_mutex_t)); \ + \ + if (!lock) \ + err = ENOMEM; \ + if (!err) \ + { \ + err = pth_mutex_init (lock); \ + if (err == FALSE) \ + err = errno; \ + else \ + err = 0; \ + if (err) \ + free (lock); \ + else \ + *priv = lock; \ + } \ + return err; \ +} \ +static int gcry_pth_mutex_destroy (void **lock) \ + { /* GNU Pth has no destructor function. */ free (*lock); return 0; } \ +static int gcry_pth_mutex_lock (void **lock) \ + { return ((pth_mutex_acquire (*lock, 0, NULL)) == FALSE) \ + ? errno : 0; } \ +static int gcry_pth_mutex_unlock (void **lock) \ + { return ((pth_mutex_release (*lock)) == FALSE) \ + ? errno : 0; } \ +static ssize_t gcry_pth_read (int fd, void *buf, size_t nbytes) \ + { return pth_read (fd, buf, nbytes); } \ +static ssize_t gcry_pth_write (int fd, const void *buf, size_t nbytes) \ + { return pth_write (fd, buf, nbytes); } \ +_GCRY_THREAD_OPTION_PTH_IMPL_NET \ + \ +/* Note: GNU Pth is missing pth_sendmsg and pth_recvmsg. */ \ +static struct gcry_thread_cbs gcry_threads_pth = { \ + (GCRY_THREAD_OPTION_PTH | (GCRY_THREAD_OPTION_VERSION << 8)), \ + gcry_pth_init, gcry_pth_mutex_init, gcry_pth_mutex_destroy, \ + gcry_pth_mutex_lock, gcry_pth_mutex_unlock, gcry_pth_read, gcry_pth_write, \ + gcry_pth_select, gcry_pth_waitpid, gcry_pth_accept, gcry_pth_connect, \ + NULL, NULL } + + +#define GCRY_THREAD_OPTION_PTHREAD_IMPL \ +static int gcry_pthread_mutex_init (void **priv) \ +{ \ + int err = 0; \ + pthread_mutex_t *lock = (pthread_mutex_t*)malloc (sizeof (pthread_mutex_t));\ + \ + if (!lock) \ + err = ENOMEM; \ + if (!err) \ + { \ + err = pthread_mutex_init (lock, NULL); \ + if (err) \ + free (lock); \ + else \ + *priv = lock; \ + } \ + return err; \ +} \ +static int gcry_pthread_mutex_destroy (void **lock) \ + { int err = pthread_mutex_destroy ((pthread_mutex_t*)*lock); \ + free (*lock); return err; } \ +static int gcry_pthread_mutex_lock (void **lock) \ + { return pthread_mutex_lock ((pthread_mutex_t*)*lock); } \ +static int gcry_pthread_mutex_unlock (void **lock) \ + { return pthread_mutex_unlock ((pthread_mutex_t*)*lock); } \ + \ +static struct gcry_thread_cbs gcry_threads_pthread = { \ + (GCRY_THREAD_OPTION_PTHREAD | (GCRY_THREAD_OPTION_VERSION << 8)), \ + NULL, gcry_pthread_mutex_init, gcry_pthread_mutex_destroy, \ + gcry_pthread_mutex_lock, gcry_pthread_mutex_unlock, \ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } + + +/* The data object used to hold a multi precision integer. */ +struct gcry_mpi; +typedef struct gcry_mpi *gcry_mpi_t; + +#ifndef GCRYPT_NO_DEPRECATED +typedef struct gcry_mpi *GCRY_MPI _GCRY_GCC_ATTR_DEPRECATED; +typedef struct gcry_mpi *GcryMPI _GCRY_GCC_ATTR_DEPRECATED; +#endif + + + +/* Check that the library fulfills the version requirement. */ +const char *gcry_check_version (const char *req_version); + +/* Codes for function dispatchers. */ + +/* Codes used with the gcry_control function. */ +enum gcry_ctl_cmds + { + GCRYCTL_SET_KEY = 1, + GCRYCTL_SET_IV = 2, + GCRYCTL_CFB_SYNC = 3, + GCRYCTL_RESET = 4, /* e.g. for MDs */ + GCRYCTL_FINALIZE = 5, + GCRYCTL_GET_KEYLEN = 6, + GCRYCTL_GET_BLKLEN = 7, + GCRYCTL_TEST_ALGO = 8, + GCRYCTL_IS_SECURE = 9, + GCRYCTL_GET_ASNOID = 10, + GCRYCTL_ENABLE_ALGO = 11, + GCRYCTL_DISABLE_ALGO = 12, + GCRYCTL_DUMP_RANDOM_STATS = 13, + GCRYCTL_DUMP_SECMEM_STATS = 14, + GCRYCTL_GET_ALGO_NPKEY = 15, + GCRYCTL_GET_ALGO_NSKEY = 16, + GCRYCTL_GET_ALGO_NSIGN = 17, + GCRYCTL_GET_ALGO_NENCR = 18, + GCRYCTL_SET_VERBOSITY = 19, + GCRYCTL_SET_DEBUG_FLAGS = 20, + GCRYCTL_CLEAR_DEBUG_FLAGS = 21, + GCRYCTL_USE_SECURE_RNDPOOL= 22, + GCRYCTL_DUMP_MEMORY_STATS = 23, + GCRYCTL_INIT_SECMEM = 24, + GCRYCTL_TERM_SECMEM = 25, + GCRYCTL_DISABLE_SECMEM_WARN = 27, + GCRYCTL_SUSPEND_SECMEM_WARN = 28, + GCRYCTL_RESUME_SECMEM_WARN = 29, + GCRYCTL_DROP_PRIVS = 30, + GCRYCTL_ENABLE_M_GUARD = 31, + GCRYCTL_START_DUMP = 32, + GCRYCTL_STOP_DUMP = 33, + GCRYCTL_GET_ALGO_USAGE = 34, + GCRYCTL_IS_ALGO_ENABLED = 35, + GCRYCTL_DISABLE_INTERNAL_LOCKING = 36, + GCRYCTL_DISABLE_SECMEM = 37, + GCRYCTL_INITIALIZATION_FINISHED = 38, + GCRYCTL_INITIALIZATION_FINISHED_P = 39, + GCRYCTL_ANY_INITIALIZATION_P = 40, + GCRYCTL_SET_CBC_CTS = 41, + GCRYCTL_SET_CBC_MAC = 42, + GCRYCTL_SET_CTR = 43, + GCRYCTL_ENABLE_QUICK_RANDOM = 44, + GCRYCTL_SET_RANDOM_SEED_FILE = 45, + GCRYCTL_UPDATE_RANDOM_SEED_FILE = 46, + GCRYCTL_SET_THREAD_CBS = 47, + GCRYCTL_FAST_POLL = 48, + GCRYCTL_SET_RANDOM_DAEMON_SOCKET = 49, + GCRYCTL_USE_RANDOM_DAEMON = 50, + GCRYCTL_FAKED_RANDOM_P = 51, + GCRYCTL_SET_RNDEGD_SOCKET = 52, + GCRYCTL_PRINT_CONFIG = 53, + GCRYCTL_OPERATIONAL_P = 54, + GCRYCTL_FIPS_MODE_P = 55, + GCRYCTL_FORCE_FIPS_MODE = 56, + GCRYCTL_SELFTEST = 57, + /* Note: 58 .. 62 are used internally. */ + GCRYCTL_DISABLE_HWF = 63, + GCRYCTL_SET_ENFORCED_FIPS_FLAG = 64 + }; + +/* Perform various operations defined by CMD. */ +gcry_error_t gcry_control (enum gcry_ctl_cmds CMD, ...); + + +/* S-expression management. */ + +/* The object to represent an S-expression as used with the public key + functions. */ +struct gcry_sexp; +typedef struct gcry_sexp *gcry_sexp_t; + +#ifndef GCRYPT_NO_DEPRECATED +typedef struct gcry_sexp *GCRY_SEXP _GCRY_GCC_ATTR_DEPRECATED; +typedef struct gcry_sexp *GcrySexp _GCRY_GCC_ATTR_DEPRECATED; +#endif + +/* The possible values for the S-expression format. */ +enum gcry_sexp_format + { + GCRYSEXP_FMT_DEFAULT = 0, + GCRYSEXP_FMT_CANON = 1, + GCRYSEXP_FMT_BASE64 = 2, + GCRYSEXP_FMT_ADVANCED = 3 + }; + +/* Create an new S-expression object from BUFFER of size LENGTH and + return it in RETSEXP. With AUTODETECT set to 0 the data in BUFFER + is expected to be in canonized format. */ +gcry_error_t gcry_sexp_new (gcry_sexp_t *retsexp, + const void *buffer, size_t length, + int autodetect); + + /* Same as gcry_sexp_new but allows to pass a FREEFNC which has the + effect to transfer ownership of BUFFER to the created object. */ +gcry_error_t gcry_sexp_create (gcry_sexp_t *retsexp, + void *buffer, size_t length, + int autodetect, void (*freefnc) (void *)); + +/* Scan BUFFER and return a new S-expression object in RETSEXP. This + function expects a printf like string in BUFFER. */ +gcry_error_t gcry_sexp_sscan (gcry_sexp_t *retsexp, size_t *erroff, + const char *buffer, size_t length); + +/* Same as gcry_sexp_sscan but expects a string in FORMAT and can thus + only be used for certain encodings. */ +gcry_error_t gcry_sexp_build (gcry_sexp_t *retsexp, size_t *erroff, + const char *format, ...); + +/* Like gcry_sexp_build, but uses an array instead of variable + function arguments. */ +gcry_error_t gcry_sexp_build_array (gcry_sexp_t *retsexp, size_t *erroff, + const char *format, void **arg_list); + +/* Release the S-expression object SEXP */ +void gcry_sexp_release (gcry_sexp_t sexp); + +/* Calculate the length of an canonized S-expresion in BUFFER and + check for a valid encoding. */ +size_t gcry_sexp_canon_len (const unsigned char *buffer, size_t length, + size_t *erroff, gcry_error_t *errcode); + +/* Copies the S-expression object SEXP into BUFFER using the format + specified in MODE. */ +size_t gcry_sexp_sprint (gcry_sexp_t sexp, int mode, void *buffer, + size_t maxlength); + +/* Dumps the S-expression object A in a format suitable for debugging + to Libgcrypt's logging stream. */ +void gcry_sexp_dump (const gcry_sexp_t a); + +gcry_sexp_t gcry_sexp_cons (const gcry_sexp_t a, const gcry_sexp_t b); +gcry_sexp_t gcry_sexp_alist (const gcry_sexp_t *array); +gcry_sexp_t gcry_sexp_vlist (const gcry_sexp_t a, ...); +gcry_sexp_t gcry_sexp_append (const gcry_sexp_t a, const gcry_sexp_t n); +gcry_sexp_t gcry_sexp_prepend (const gcry_sexp_t a, const gcry_sexp_t n); + +/* Scan the S-expression for a sublist with a type (the car of the + list) matching the string TOKEN. If TOKLEN is not 0, the token is + assumed to be raw memory of this length. The function returns a + newly allocated S-expression consisting of the found sublist or + `NULL' when not found. */ +gcry_sexp_t gcry_sexp_find_token (gcry_sexp_t list, + const char *tok, size_t toklen); +/* Return the length of the LIST. For a valid S-expression this + should be at least 1. */ +int gcry_sexp_length (const gcry_sexp_t list); + +/* Create and return a new S-expression from the element with index + NUMBER in LIST. Note that the first element has the index 0. If + there is no such element, `NULL' is returned. */ +gcry_sexp_t gcry_sexp_nth (const gcry_sexp_t list, int number); + +/* Create and return a new S-expression from the first element in + LIST; this called the "type" and should always exist and be a + string. `NULL' is returned in case of a problem. */ +gcry_sexp_t gcry_sexp_car (const gcry_sexp_t list); + +/* Create and return a new list form all elements except for the first + one. Note, that this function may return an invalid S-expression + because it is not guaranteed, that the type exists and is a string. + However, for parsing a complex S-expression it might be useful for + intermediate lists. Returns `NULL' on error. */ +gcry_sexp_t gcry_sexp_cdr (const gcry_sexp_t list); + +gcry_sexp_t gcry_sexp_cadr (const gcry_sexp_t list); + + +/* This function is used to get data from a LIST. A pointer to the + actual data with index NUMBER is returned and the length of this + data will be stored to DATALEN. If there is no data at the given + index or the index represents another list, `NULL' is returned. + *Note:* The returned pointer is valid as long as LIST is not + modified or released. */ +const char *gcry_sexp_nth_data (const gcry_sexp_t list, int number, + size_t *datalen); + +/* This function is used to get and convert data from a LIST. The + data is assumed to be a Nul terminated string. The caller must + release the returned value using `gcry_free'. If there is no data + at the given index, the index represents a list or the value can't + be converted to a string, `NULL' is returned. */ +char *gcry_sexp_nth_string (gcry_sexp_t list, int number); + +/* This function is used to get and convert data from a LIST. This + data is assumed to be an MPI stored in the format described by + MPIFMT and returned as a standard Libgcrypt MPI. The caller must + release this returned value using `gcry_mpi_release'. If there is + no data at the given index, the index represents a list or the + value can't be converted to an MPI, `NULL' is returned. */ +gcry_mpi_t gcry_sexp_nth_mpi (gcry_sexp_t list, int number, int mpifmt); + + + +/******************************************* + * * + * Multi Precision Integer Functions * + * * + *******************************************/ + +/* Different formats of external big integer representation. */ +enum gcry_mpi_format + { + GCRYMPI_FMT_NONE= 0, + GCRYMPI_FMT_STD = 1, /* Twos complement stored without length. */ + GCRYMPI_FMT_PGP = 2, /* As used by OpenPGP (unsigned only). */ + GCRYMPI_FMT_SSH = 3, /* As used by SSH (like STD but with length). */ + GCRYMPI_FMT_HEX = 4, /* Hex format. */ + GCRYMPI_FMT_USG = 5 /* Like STD but unsigned. */ + }; + +/* Flags used for creating big integers. */ +enum gcry_mpi_flag + { + GCRYMPI_FLAG_SECURE = 1, /* Allocate the number in "secure" memory. */ + GCRYMPI_FLAG_OPAQUE = 2 /* The number is not a real one but just + a way to store some bytes. This is + useful for encrypted big integers. */ + }; + + +/* Allocate a new big integer object, initialize it with 0 and + initially allocate memory for a number of at least NBITS. */ +gcry_mpi_t gcry_mpi_new (unsigned int nbits); + +/* Same as gcry_mpi_new() but allocate in "secure" memory. */ +gcry_mpi_t gcry_mpi_snew (unsigned int nbits); + +/* Release the number A and free all associated resources. */ +void gcry_mpi_release (gcry_mpi_t a); + +/* Create a new number with the same value as A. */ +gcry_mpi_t gcry_mpi_copy (const gcry_mpi_t a); + +/* Store the big integer value U in W. */ +gcry_mpi_t gcry_mpi_set (gcry_mpi_t w, const gcry_mpi_t u); + +/* Store the unsigned integer value U in W. */ +gcry_mpi_t gcry_mpi_set_ui (gcry_mpi_t w, unsigned long u); + +/* Swap the values of A and B. */ +void gcry_mpi_swap (gcry_mpi_t a, gcry_mpi_t b); + +/* Compare the big integer number U and V returning 0 for equality, a + positive value for U > V and a negative for U < V. */ +int gcry_mpi_cmp (const gcry_mpi_t u, const gcry_mpi_t v); + +/* Compare the big integer number U with the unsigned integer V + returning 0 for equality, a positive value for U > V and a negative + for U < V. */ +int gcry_mpi_cmp_ui (const gcry_mpi_t u, unsigned long v); + +/* Convert the external representation of an integer stored in BUFFER + with a length of BUFLEN into a newly create MPI returned in + RET_MPI. If NSCANNED is not NULL, it will receive the number of + bytes actually scanned after a successful operation. */ +gcry_error_t gcry_mpi_scan (gcry_mpi_t *ret_mpi, enum gcry_mpi_format format, + const void *buffer, size_t buflen, + size_t *nscanned); + +/* Convert the big integer A into the external representation + described by FORMAT and store it in the provided BUFFER which has + been allocated by the user with a size of BUFLEN bytes. NWRITTEN + receives the actual length of the external representation unless it + has been passed as NULL. */ +gcry_error_t gcry_mpi_print (enum gcry_mpi_format format, + unsigned char *buffer, size_t buflen, + size_t *nwritten, + const gcry_mpi_t a); + +/* Convert the big integer A int the external representation described + by FORMAT and store it in a newly allocated buffer which address + will be put into BUFFER. NWRITTEN receives the actual lengths of the + external representation. */ +gcry_error_t gcry_mpi_aprint (enum gcry_mpi_format format, + unsigned char **buffer, size_t *nwritten, + const gcry_mpi_t a); + +/* Dump the value of A in a format suitable for debugging to + Libgcrypt's logging stream. Note that one leading space but no + trailing space or linefeed will be printed. It is okay to pass + NULL for A. */ +void gcry_mpi_dump (const gcry_mpi_t a); + + +/* W = U + V. */ +void gcry_mpi_add (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v); + +/* W = U + V. V is an unsigned integer. */ +void gcry_mpi_add_ui (gcry_mpi_t w, gcry_mpi_t u, unsigned long v); + +/* W = U + V mod M. */ +void gcry_mpi_addm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m); + +/* W = U - V. */ +void gcry_mpi_sub (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v); + +/* W = U - V. V is an unsigned integer. */ +void gcry_mpi_sub_ui (gcry_mpi_t w, gcry_mpi_t u, unsigned long v ); + +/* W = U - V mod M */ +void gcry_mpi_subm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m); + +/* W = U * V. */ +void gcry_mpi_mul (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v); + +/* W = U * V. V is an unsigned integer. */ +void gcry_mpi_mul_ui (gcry_mpi_t w, gcry_mpi_t u, unsigned long v ); + +/* W = U * V mod M. */ +void gcry_mpi_mulm (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, gcry_mpi_t m); + +/* W = U * (2 ^ CNT). */ +void gcry_mpi_mul_2exp (gcry_mpi_t w, gcry_mpi_t u, unsigned long cnt); + +/* Q = DIVIDEND / DIVISOR, R = DIVIDEND % DIVISOR, + Q or R may be passed as NULL. ROUND should be negative or 0. */ +void gcry_mpi_div (gcry_mpi_t q, gcry_mpi_t r, + gcry_mpi_t dividend, gcry_mpi_t divisor, int round); + +/* R = DIVIDEND % DIVISOR */ +void gcry_mpi_mod (gcry_mpi_t r, gcry_mpi_t dividend, gcry_mpi_t divisor); + +/* W = B ^ E mod M. */ +void gcry_mpi_powm (gcry_mpi_t w, + const gcry_mpi_t b, const gcry_mpi_t e, + const gcry_mpi_t m); + +/* Set G to the greatest common divisor of A and B. + Return true if the G is 1. */ +int gcry_mpi_gcd (gcry_mpi_t g, gcry_mpi_t a, gcry_mpi_t b); + +/* Set X to the multiplicative inverse of A mod M. + Return true if the value exists. */ +int gcry_mpi_invm (gcry_mpi_t x, gcry_mpi_t a, gcry_mpi_t m); + + +/* Return the number of bits required to represent A. */ +unsigned int gcry_mpi_get_nbits (gcry_mpi_t a); + +/* Return true when bit number N (counting from 0) is set in A. */ +int gcry_mpi_test_bit (gcry_mpi_t a, unsigned int n); + +/* Set bit number N in A. */ +void gcry_mpi_set_bit (gcry_mpi_t a, unsigned int n); + +/* Clear bit number N in A. */ +void gcry_mpi_clear_bit (gcry_mpi_t a, unsigned int n); + +/* Set bit number N in A and clear all bits greater than N. */ +void gcry_mpi_set_highbit (gcry_mpi_t a, unsigned int n); + +/* Clear bit number N in A and all bits greater than N. */ +void gcry_mpi_clear_highbit (gcry_mpi_t a, unsigned int n); + +/* Shift the value of A by N bits to the right and store the result in X. */ +void gcry_mpi_rshift (gcry_mpi_t x, gcry_mpi_t a, unsigned int n); + +/* Shift the value of A by N bits to the left and store the result in X. */ +void gcry_mpi_lshift (gcry_mpi_t x, gcry_mpi_t a, unsigned int n); + +/* Store NBITS of the value P points to in A and mark A as an opaque + value. WARNING: Never use an opaque MPI for anything thing else then + gcry_mpi_release, gcry_mpi_get_opaque. */ +gcry_mpi_t gcry_mpi_set_opaque (gcry_mpi_t a, void *p, unsigned int nbits); + +/* Return a pointer to an opaque value stored in A and return its size + in NBITS. Note that the returned pointer is still owned by A and + that the function should never be used for an non-opaque MPI. */ +void *gcry_mpi_get_opaque (gcry_mpi_t a, unsigned int *nbits); + +/* Set the FLAG for the big integer A. Currently only the flag + GCRYMPI_FLAG_SECURE is allowed to convert A into an big intger + stored in "secure" memory. */ +void gcry_mpi_set_flag (gcry_mpi_t a, enum gcry_mpi_flag flag); + +/* Clear FLAG for the big integer A. Note that this function is + currently useless as no flags are allowed. */ +void gcry_mpi_clear_flag (gcry_mpi_t a, enum gcry_mpi_flag flag); + +/* Return true when the FLAG is set for A. */ +int gcry_mpi_get_flag (gcry_mpi_t a, enum gcry_mpi_flag flag); + +/* Unless the GCRYPT_NO_MPI_MACROS is used, provide a couple of + convenience macros for the big integer functions. */ +#ifndef GCRYPT_NO_MPI_MACROS +#define mpi_new(n) gcry_mpi_new( (n) ) +#define mpi_secure_new( n ) gcry_mpi_snew( (n) ) +#define mpi_release(a) \ + do \ + { \ + gcry_mpi_release ((a)); \ + (a) = NULL; \ + } \ + while (0) + +#define mpi_copy( a ) gcry_mpi_copy( (a) ) +#define mpi_set( w, u) gcry_mpi_set( (w), (u) ) +#define mpi_set_ui( w, u) gcry_mpi_set_ui( (w), (u) ) +#define mpi_cmp( u, v ) gcry_mpi_cmp( (u), (v) ) +#define mpi_cmp_ui( u, v ) gcry_mpi_cmp_ui( (u), (v) ) + +#define mpi_add_ui(w,u,v) gcry_mpi_add_ui((w),(u),(v)) +#define mpi_add(w,u,v) gcry_mpi_add ((w),(u),(v)) +#define mpi_addm(w,u,v,m) gcry_mpi_addm ((w),(u),(v),(m)) +#define mpi_sub_ui(w,u,v) gcry_mpi_sub_ui ((w),(u),(v)) +#define mpi_sub(w,u,v) gcry_mpi_sub ((w),(u),(v)) +#define mpi_subm(w,u,v,m) gcry_mpi_subm ((w),(u),(v),(m)) +#define mpi_mul_ui(w,u,v) gcry_mpi_mul_ui ((w),(u),(v)) +#define mpi_mul_2exp(w,u,v) gcry_mpi_mul_2exp ((w),(u),(v)) +#define mpi_mul(w,u,v) gcry_mpi_mul ((w),(u),(v)) +#define mpi_mulm(w,u,v,m) gcry_mpi_mulm ((w),(u),(v),(m)) +#define mpi_powm(w,b,e,m) gcry_mpi_powm ( (w), (b), (e), (m) ) +#define mpi_tdiv(q,r,a,m) gcry_mpi_div ( (q), (r), (a), (m), 0) +#define mpi_fdiv(q,r,a,m) gcry_mpi_div ( (q), (r), (a), (m), -1) +#define mpi_mod(r,a,m) gcry_mpi_mod ((r), (a), (m)) +#define mpi_gcd(g,a,b) gcry_mpi_gcd ( (g), (a), (b) ) +#define mpi_invm(g,a,b) gcry_mpi_invm ( (g), (a), (b) ) + +#define mpi_get_nbits(a) gcry_mpi_get_nbits ((a)) +#define mpi_test_bit(a,b) gcry_mpi_test_bit ((a),(b)) +#define mpi_set_bit(a,b) gcry_mpi_set_bit ((a),(b)) +#define mpi_set_highbit(a,b) gcry_mpi_set_highbit ((a),(b)) +#define mpi_clear_bit(a,b) gcry_mpi_clear_bit ((a),(b)) +#define mpi_clear_highbit(a,b) gcry_mpi_clear_highbit ((a),(b)) +#define mpi_rshift(a,b,c) gcry_mpi_rshift ((a),(b),(c)) +#define mpi_lshift(a,b,c) gcry_mpi_lshift ((a),(b),(c)) + +#define mpi_set_opaque(a,b,c) gcry_mpi_set_opaque( (a), (b), (c) ) +#define mpi_get_opaque(a,b) gcry_mpi_get_opaque( (a), (b) ) +#endif /* GCRYPT_NO_MPI_MACROS */ + + + +/************************************ + * * + * Symmetric Cipher Functions * + * * + ************************************/ + +/* The data object used to hold a handle to an encryption object. */ +struct gcry_cipher_handle; +typedef struct gcry_cipher_handle *gcry_cipher_hd_t; + +#ifndef GCRYPT_NO_DEPRECATED +typedef struct gcry_cipher_handle *GCRY_CIPHER_HD _GCRY_GCC_ATTR_DEPRECATED; +typedef struct gcry_cipher_handle *GcryCipherHd _GCRY_GCC_ATTR_DEPRECATED; +#endif + +/* All symmetric encryption algorithms are identified by their IDs. + More IDs may be registered at runtime. */ +enum gcry_cipher_algos + { + GCRY_CIPHER_NONE = 0, + GCRY_CIPHER_IDEA = 1, + GCRY_CIPHER_3DES = 2, + GCRY_CIPHER_CAST5 = 3, + GCRY_CIPHER_BLOWFISH = 4, + GCRY_CIPHER_SAFER_SK128 = 5, + GCRY_CIPHER_DES_SK = 6, + GCRY_CIPHER_AES = 7, + GCRY_CIPHER_AES192 = 8, + GCRY_CIPHER_AES256 = 9, + GCRY_CIPHER_TWOFISH = 10, + + /* Other cipher numbers are above 300 for OpenPGP reasons. */ + GCRY_CIPHER_ARCFOUR = 301, /* Fully compatible with RSA's RC4 (tm). */ + GCRY_CIPHER_DES = 302, /* Yes, this is single key 56 bit DES. */ + GCRY_CIPHER_TWOFISH128 = 303, + GCRY_CIPHER_SERPENT128 = 304, + GCRY_CIPHER_SERPENT192 = 305, + GCRY_CIPHER_SERPENT256 = 306, + GCRY_CIPHER_RFC2268_40 = 307, /* Ron's Cipher 2 (40 bit). */ + GCRY_CIPHER_RFC2268_128 = 308, /* Ron's Cipher 2 (128 bit). */ + GCRY_CIPHER_SEED = 309, /* 128 bit cipher described in RFC4269. */ + GCRY_CIPHER_CAMELLIA128 = 310, + GCRY_CIPHER_CAMELLIA192 = 311, + GCRY_CIPHER_CAMELLIA256 = 312 + }; + +/* The Rijndael algorithm is basically AES, so provide some macros. */ +#define GCRY_CIPHER_AES128 GCRY_CIPHER_AES +#define GCRY_CIPHER_RIJNDAEL GCRY_CIPHER_AES +#define GCRY_CIPHER_RIJNDAEL128 GCRY_CIPHER_AES128 +#define GCRY_CIPHER_RIJNDAEL192 GCRY_CIPHER_AES192 +#define GCRY_CIPHER_RIJNDAEL256 GCRY_CIPHER_AES256 + +/* The supported encryption modes. Note that not all of them are + supported for each algorithm. */ +enum gcry_cipher_modes + { + GCRY_CIPHER_MODE_NONE = 0, /* Not yet specified. */ + GCRY_CIPHER_MODE_ECB = 1, /* Electronic codebook. */ + GCRY_CIPHER_MODE_CFB = 2, /* Cipher feedback. */ + GCRY_CIPHER_MODE_CBC = 3, /* Cipher block chaining. */ + GCRY_CIPHER_MODE_STREAM = 4, /* Used with stream ciphers. */ + GCRY_CIPHER_MODE_OFB = 5, /* Outer feedback. */ + GCRY_CIPHER_MODE_CTR = 6, /* Counter. */ + GCRY_CIPHER_MODE_AESWRAP= 7 /* AES-WRAP algorithm. */ + }; + +/* Flags used with the open function. */ +enum gcry_cipher_flags + { + GCRY_CIPHER_SECURE = 1, /* Allocate in secure memory. */ + GCRY_CIPHER_ENABLE_SYNC = 2, /* Enable CFB sync mode. */ + GCRY_CIPHER_CBC_CTS = 4, /* Enable CBC cipher text stealing (CTS). */ + GCRY_CIPHER_CBC_MAC = 8 /* Enable CBC message auth. code (MAC). */ + }; + + +/* Create a handle for algorithm ALGO to be used in MODE. FLAGS may + be given as an bitwise OR of the gcry_cipher_flags values. */ +gcry_error_t gcry_cipher_open (gcry_cipher_hd_t *handle, + int algo, int mode, unsigned int flags); + +/* Close the cioher handle H and release all resource. */ +void gcry_cipher_close (gcry_cipher_hd_t h); + +/* Perform various operations on the cipher object H. */ +gcry_error_t gcry_cipher_ctl (gcry_cipher_hd_t h, int cmd, void *buffer, + size_t buflen); + +/* Retrieve various information about the cipher object H. */ +gcry_error_t gcry_cipher_info (gcry_cipher_hd_t h, int what, void *buffer, + size_t *nbytes); + +/* Retrieve various information about the cipher algorithm ALGO. */ +gcry_error_t gcry_cipher_algo_info (int algo, int what, void *buffer, + size_t *nbytes); + +/* Map the cipher algorithm whose ID is contained in ALGORITHM to a + string representation of the algorithm name. For unknown algorithm + IDs this function returns "?". */ +const char *gcry_cipher_algo_name (int algorithm) _GCRY_GCC_ATTR_PURE; + +/* Map the algorithm name NAME to an cipher algorithm ID. Return 0 if + the algorithm name is not known. */ +int gcry_cipher_map_name (const char *name) _GCRY_GCC_ATTR_PURE; + +/* Given an ASN.1 object identifier in standard IETF dotted decimal + format in STRING, return the encryption mode associated with that + OID or 0 if not known or applicable. */ +int gcry_cipher_mode_from_oid (const char *string) _GCRY_GCC_ATTR_PURE; + +/* Encrypt the plaintext of size INLEN in IN using the cipher handle H + into the buffer OUT which has an allocated length of OUTSIZE. For + most algorithms it is possible to pass NULL for in and 0 for INLEN + and do a in-place decryption of the data provided in OUT. */ +gcry_error_t gcry_cipher_encrypt (gcry_cipher_hd_t h, + void *out, size_t outsize, + const void *in, size_t inlen); + +/* The counterpart to gcry_cipher_encrypt. */ +gcry_error_t gcry_cipher_decrypt (gcry_cipher_hd_t h, + void *out, size_t outsize, + const void *in, size_t inlen); + +/* Set KEY of length KEYLEN bytes for the cipher handle HD. */ +gcry_error_t gcry_cipher_setkey (gcry_cipher_hd_t hd, + const void *key, size_t keylen); + + +/* Set initialization vector IV of length IVLEN for the cipher handle HD. */ +gcry_error_t gcry_cipher_setiv (gcry_cipher_hd_t hd, + const void *iv, size_t ivlen); + + +/* Reset the handle to the state after open. */ +#define gcry_cipher_reset(h) gcry_cipher_ctl ((h), GCRYCTL_RESET, NULL, 0) + +/* Perform the OpenPGP sync operation if this is enabled for the + cipher handle H. */ +#define gcry_cipher_sync(h) gcry_cipher_ctl( (h), GCRYCTL_CFB_SYNC, NULL, 0) + +/* Enable or disable CTS in future calls to gcry_encrypt(). CBC mode only. */ +#define gcry_cipher_cts(h,on) gcry_cipher_ctl( (h), GCRYCTL_SET_CBC_CTS, \ + NULL, on ) + +/* Set counter for CTR mode. (CTR,CTRLEN) must denote a buffer of + block size length, or (NULL,0) to set the CTR to the all-zero block. */ +gpg_error_t gcry_cipher_setctr (gcry_cipher_hd_t hd, + const void *ctr, size_t ctrlen); + +/* Retrieve the key length in bytes used with algorithm A. */ +size_t gcry_cipher_get_algo_keylen (int algo); + +/* Retrieve the block length in bytes used with algorithm A. */ +size_t gcry_cipher_get_algo_blklen (int algo); + +/* Return 0 if the algorithm A is available for use. */ +#define gcry_cipher_test_algo(a) \ + gcry_cipher_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL ) + +/* Get a list consisting of the IDs of the loaded cipher modules. If + LIST is zero, write the number of loaded cipher modules to + LIST_LENGTH and return. If LIST is non-zero, the first + *LIST_LENGTH algorithm IDs are stored in LIST, which must be of + according size. In case there are less cipher modules than + *LIST_LENGTH, *LIST_LENGTH is updated to the correct number. */ +gcry_error_t gcry_cipher_list (int *list, int *list_length); + + +/************************************ + * * + * Asymmetric Cipher Functions * + * * + ************************************/ + +/* The algorithms and their IDs we support. */ +enum gcry_pk_algos + { + GCRY_PK_RSA = 1, + GCRY_PK_RSA_E = 2, /* (deprecated) */ + GCRY_PK_RSA_S = 3, /* (deprecated) */ + GCRY_PK_ELG_E = 16, + GCRY_PK_DSA = 17, + GCRY_PK_ELG = 20, + GCRY_PK_ECDSA = 301, + GCRY_PK_ECDH = 302 + }; + +/* Flags describing usage capabilities of a PK algorithm. */ +#define GCRY_PK_USAGE_SIGN 1 /* Good for signatures. */ +#define GCRY_PK_USAGE_ENCR 2 /* Good for encryption. */ +#define GCRY_PK_USAGE_CERT 4 /* Good to certify other keys. */ +#define GCRY_PK_USAGE_AUTH 8 /* Good for authentication. */ +#define GCRY_PK_USAGE_UNKN 128 /* Unknown usage flag. */ + +/* Encrypt the DATA using the public key PKEY and store the result as + a newly created S-expression at RESULT. */ +gcry_error_t gcry_pk_encrypt (gcry_sexp_t *result, + gcry_sexp_t data, gcry_sexp_t pkey); + +/* Decrypt the DATA using the private key SKEY and store the result as + a newly created S-expression at RESULT. */ +gcry_error_t gcry_pk_decrypt (gcry_sexp_t *result, + gcry_sexp_t data, gcry_sexp_t skey); + +/* Sign the DATA using the private key SKEY and store the result as + a newly created S-expression at RESULT. */ +gcry_error_t gcry_pk_sign (gcry_sexp_t *result, + gcry_sexp_t data, gcry_sexp_t skey); + +/* Check the signature SIGVAL on DATA using the public key PKEY. */ +gcry_error_t gcry_pk_verify (gcry_sexp_t sigval, + gcry_sexp_t data, gcry_sexp_t pkey); + +/* Check that private KEY is sane. */ +gcry_error_t gcry_pk_testkey (gcry_sexp_t key); + +/* Generate a new key pair according to the parameters given in + S_PARMS. The new key pair is returned in as an S-expression in + R_KEY. */ +gcry_error_t gcry_pk_genkey (gcry_sexp_t *r_key, gcry_sexp_t s_parms); + +/* Catch all function for miscellaneous operations. */ +gcry_error_t gcry_pk_ctl (int cmd, void *buffer, size_t buflen); + +/* Retrieve information about the public key algorithm ALGO. */ +gcry_error_t gcry_pk_algo_info (int algo, int what, + void *buffer, size_t *nbytes); + +/* Map the public key algorithm whose ID is contained in ALGORITHM to + a string representation of the algorithm name. For unknown + algorithm IDs this functions returns "?". */ +const char *gcry_pk_algo_name (int algorithm) _GCRY_GCC_ATTR_PURE; + +/* Map the algorithm NAME to a public key algorithm Id. Return 0 if + the algorithm name is not known. */ +int gcry_pk_map_name (const char* name) _GCRY_GCC_ATTR_PURE; + +/* Return what is commonly referred as the key length for the given + public or private KEY. */ +unsigned int gcry_pk_get_nbits (gcry_sexp_t key) _GCRY_GCC_ATTR_PURE; + +/* Please note that keygrip is still experimental and should not be + used without contacting the author. */ +unsigned char *gcry_pk_get_keygrip (gcry_sexp_t key, unsigned char *array); + +/* Return the name of the curve matching KEY. */ +const char *gcry_pk_get_curve (gcry_sexp_t key, int iterator, + unsigned int *r_nbits); + +/* Return an S-expression with the parameters of the named ECC curve + NAME. ALGO must be set to an ECC algorithm. */ +gcry_sexp_t gcry_pk_get_param (int algo, const char *name); + +/* Return 0 if the public key algorithm A is available for use. */ +#define gcry_pk_test_algo(a) \ + gcry_pk_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL ) + +/* Get a list consisting of the IDs of the loaded pubkey modules. If + LIST is zero, write the number of loaded pubkey modules to + LIST_LENGTH and return. If LIST is non-zero, the first + *LIST_LENGTH algorithm IDs are stored in LIST, which must be of + according size. In case there are less pubkey modules than + *LIST_LENGTH, *LIST_LENGTH is updated to the correct number. */ +gcry_error_t gcry_pk_list (int *list, int *list_length); + + + +/************************************ + * * + * Cryptograhic Hash Functions * + * * + ************************************/ + +/* Algorithm IDs for the hash functions we know about. Not all of them + are implemnted. */ +enum gcry_md_algos + { + GCRY_MD_NONE = 0, + GCRY_MD_MD5 = 1, + GCRY_MD_SHA1 = 2, + GCRY_MD_RMD160 = 3, + GCRY_MD_MD2 = 5, + GCRY_MD_TIGER = 6, /* TIGER/192 as used by gpg <= 1.3.2. */ + GCRY_MD_HAVAL = 7, /* HAVAL, 5 pass, 160 bit. */ + GCRY_MD_SHA256 = 8, + GCRY_MD_SHA384 = 9, + GCRY_MD_SHA512 = 10, + GCRY_MD_SHA224 = 11, + GCRY_MD_MD4 = 301, + GCRY_MD_CRC32 = 302, + GCRY_MD_CRC32_RFC1510 = 303, + GCRY_MD_CRC24_RFC2440 = 304, + GCRY_MD_WHIRLPOOL = 305, + GCRY_MD_TIGER1 = 306, /* TIGER fixed. */ + GCRY_MD_TIGER2 = 307 /* TIGER2 variant. */ + }; + +/* Flags used with the open function. */ +enum gcry_md_flags + { + GCRY_MD_FLAG_SECURE = 1, /* Allocate all buffers in "secure" memory. */ + GCRY_MD_FLAG_HMAC = 2 /* Make an HMAC out of this algorithm. */ + }; + +/* (Forward declaration.) */ +struct gcry_md_context; + +/* This object is used to hold a handle to a message digest object. + This structure is private - only to be used by the public gcry_md_* + macros. */ +typedef struct gcry_md_handle +{ + /* Actual context. */ + struct gcry_md_context *ctx; + + /* Buffer management. */ + int bufpos; + int bufsize; + unsigned char buf[1]; +} *gcry_md_hd_t; + +/* Compatibility types, do not use them. */ +#ifndef GCRYPT_NO_DEPRECATED +typedef struct gcry_md_handle *GCRY_MD_HD _GCRY_GCC_ATTR_DEPRECATED; +typedef struct gcry_md_handle *GcryMDHd _GCRY_GCC_ATTR_DEPRECATED; +#endif + +/* Create a message digest object for algorithm ALGO. FLAGS may be + given as an bitwise OR of the gcry_md_flags values. ALGO may be + given as 0 if the algorithms to be used are later set using + gcry_md_enable. */ +gcry_error_t gcry_md_open (gcry_md_hd_t *h, int algo, unsigned int flags); + +/* Release the message digest object HD. */ +void gcry_md_close (gcry_md_hd_t hd); + +/* Add the message digest algorithm ALGO to the digest object HD. */ +gcry_error_t gcry_md_enable (gcry_md_hd_t hd, int algo); + +/* Create a new digest object as an exact copy of the object HD. */ +gcry_error_t gcry_md_copy (gcry_md_hd_t *bhd, gcry_md_hd_t ahd); + +/* Reset the digest object HD to its initial state. */ +void gcry_md_reset (gcry_md_hd_t hd); + +/* Perform various operations on the digest object HD. */ +gcry_error_t gcry_md_ctl (gcry_md_hd_t hd, int cmd, + void *buffer, size_t buflen); + +/* Pass LENGTH bytes of data in BUFFER to the digest object HD so that + it can update the digest values. This is the actual hash + function. */ +void gcry_md_write (gcry_md_hd_t hd, const void *buffer, size_t length); + +/* Read out the final digest from HD return the digest value for + algorithm ALGO. */ +unsigned char *gcry_md_read (gcry_md_hd_t hd, int algo); + +/* Convenience function to calculate the hash from the data in BUFFER + of size LENGTH using the algorithm ALGO avoiding the creating of a + hash object. The hash is returned in the caller provided buffer + DIGEST which must be large enough to hold the digest of the given + algorithm. */ +void gcry_md_hash_buffer (int algo, void *digest, + const void *buffer, size_t length); + +/* Retrieve the algorithm used with HD. This does not work reliable + if more than one algorithm is enabled in HD. */ +int gcry_md_get_algo (gcry_md_hd_t hd); + +/* Retrieve the length in bytes of the digest yielded by algorithm + ALGO. */ +unsigned int gcry_md_get_algo_dlen (int algo); + +/* Return true if the the algorithm ALGO is enabled in the digest + object A. */ +int gcry_md_is_enabled (gcry_md_hd_t a, int algo); + +/* Return true if the digest object A is allocated in "secure" memory. */ +int gcry_md_is_secure (gcry_md_hd_t a); + +/* Retrieve various information about the object H. */ +gcry_error_t gcry_md_info (gcry_md_hd_t h, int what, void *buffer, + size_t *nbytes); + +/* Retrieve various information about the algorithm ALGO. */ +gcry_error_t gcry_md_algo_info (int algo, int what, void *buffer, + size_t *nbytes); + +/* Map the digest algorithm id ALGO to a string representation of the + algorithm name. For unknown algorithms this function returns + "?". */ +const char *gcry_md_algo_name (int algo) _GCRY_GCC_ATTR_PURE; + +/* Map the algorithm NAME to a digest algorithm Id. Return 0 if + the algorithm name is not known. */ +int gcry_md_map_name (const char* name) _GCRY_GCC_ATTR_PURE; + +/* For use with the HMAC feature, the set MAC key to the KEY of + KEYLEN bytes. */ +gcry_error_t gcry_md_setkey (gcry_md_hd_t hd, const void *key, size_t keylen); + +/* Start or stop debugging for digest handle HD; i.e. create a file + named dbgmd-. while hashing. If SUFFIX is NULL, + debugging stops and the file will be closed. */ +void gcry_md_debug (gcry_md_hd_t hd, const char *suffix); + + +/* Update the hash(s) of H with the character C. This is a buffered + version of the gcry_md_write function. */ +#define gcry_md_putc(h,c) \ + do { \ + gcry_md_hd_t h__ = (h); \ + if( (h__)->bufpos == (h__)->bufsize ) \ + gcry_md_write( (h__), NULL, 0 ); \ + (h__)->buf[(h__)->bufpos++] = (c) & 0xff; \ + } while(0) + +/* Finalize the digest calculation. This is not really needed because + gcry_md_read() does this implicitly. */ +#define gcry_md_final(a) \ + gcry_md_ctl ((a), GCRYCTL_FINALIZE, NULL, 0) + +/* Return 0 if the algorithm A is available for use. */ +#define gcry_md_test_algo(a) \ + gcry_md_algo_info( (a), GCRYCTL_TEST_ALGO, NULL, NULL ) + +/* Return an DER encoded ASN.1 OID for the algorithm A in buffer B. N + must point to size_t variable with the available size of buffer B. + After return it will receive the actual size of the returned + OID. */ +#define gcry_md_get_asnoid(a,b,n) \ + gcry_md_algo_info((a), GCRYCTL_GET_ASNOID, (b), (n)) + +/* Enable debugging for digest object A; i.e. create files named + dbgmd-. while hashing. B is a string used as the suffix + for the filename. This macro is deprecated, use gcry_md_debug. */ +#ifndef GCRYPT_NO_DEPRECATED +#define gcry_md_start_debug(a,b) \ + gcry_md_ctl( (a), GCRYCTL_START_DUMP, (b), 0 ) + +/* Disable the debugging of A. This macro is deprecated, use + gcry_md_debug. */ +#define gcry_md_stop_debug(a,b) \ + gcry_md_ctl( (a), GCRYCTL_STOP_DUMP, (b), 0 ) +#endif + +/* Get a list consisting of the IDs of the loaded message digest + modules. If LIST is zero, write the number of loaded message + digest modules to LIST_LENGTH and return. If LIST is non-zero, the + first *LIST_LENGTH algorithm IDs are stored in LIST, which must be + of according size. In case there are less message digest modules + than *LIST_LENGTH, *LIST_LENGTH is updated to the correct + number. */ +gcry_error_t gcry_md_list (int *list, int *list_length); + + +#if !defined(GCRYPT_NO_DEPRECATED) || defined(_GCRYPT_IN_LIBGCRYPT) +/* Alternative interface for asymmetric cryptography. This interface + is deprecated. */ + +/* The algorithm IDs. */ +typedef enum gcry_ac_id + { + GCRY_AC_RSA = 1, + GCRY_AC_DSA = 17, + GCRY_AC_ELG = 20, + GCRY_AC_ELG_E = 16 + } +gcry_ac_id_t _GCRY_ATTR_INTERNAL; + +/* Key types. */ +typedef enum gcry_ac_key_type + { + GCRY_AC_KEY_SECRET, + GCRY_AC_KEY_PUBLIC + } +gcry_ac_key_type_t _GCRY_ATTR_INTERNAL; + +/* Encoding methods. */ +typedef enum gcry_ac_em + { + GCRY_AC_EME_PKCS_V1_5, + GCRY_AC_EMSA_PKCS_V1_5 + } +gcry_ac_em_t _GCRY_ATTR_INTERNAL; + +/* Encryption and Signature schemes. */ +typedef enum gcry_ac_scheme + { + GCRY_AC_ES_PKCS_V1_5, + GCRY_AC_SSA_PKCS_V1_5 + } +gcry_ac_scheme_t _GCRY_ATTR_INTERNAL; + +/* AC data. */ +#define GCRY_AC_FLAG_DEALLOC (1 << 0) +#define GCRY_AC_FLAG_COPY (1 << 1) +#define GCRY_AC_FLAG_NO_BLINDING (1 << 2) + +/* This type represents a `data set'. */ +typedef struct gcry_ac_data *gcry_ac_data_t _GCRY_ATTR_INTERNAL; + +/* This type represents a single `key', either a secret one or a + public one. */ +typedef struct gcry_ac_key *gcry_ac_key_t _GCRY_ATTR_INTERNAL; + +/* This type represents a `key pair' containing a secret and a public + key. */ +typedef struct gcry_ac_key_pair *gcry_ac_key_pair_t _GCRY_ATTR_INTERNAL; + +/* This type represents a `handle' that is needed by functions + performing cryptographic operations. */ +typedef struct gcry_ac_handle *gcry_ac_handle_t _GCRY_ATTR_INTERNAL; + +typedef gpg_error_t (*gcry_ac_data_read_cb_t) (void *opaque, + unsigned char *buffer, + size_t *buffer_n) + /* */ _GCRY_ATTR_INTERNAL; + +typedef gpg_error_t (*gcry_ac_data_write_cb_t) (void *opaque, + unsigned char *buffer, + size_t buffer_n) + /* */ _GCRY_ATTR_INTERNAL; + +typedef enum + { + GCRY_AC_IO_READABLE, + GCRY_AC_IO_WRITABLE + } +gcry_ac_io_mode_t _GCRY_ATTR_INTERNAL; + +typedef enum + { + GCRY_AC_IO_STRING, + GCRY_AC_IO_CALLBACK + } +gcry_ac_io_type_t _GCRY_ATTR_INTERNAL; + +typedef struct gcry_ac_io +{ + /* This is an INTERNAL structure, do NOT use manually. */ + gcry_ac_io_mode_t mode _GCRY_ATTR_INTERNAL; + gcry_ac_io_type_t type _GCRY_ATTR_INTERNAL; + union + { + union + { + struct + { + gcry_ac_data_read_cb_t cb; + void *opaque; + } callback; + struct + { + unsigned char *data; + size_t data_n; + } string; + void *opaque; + } readable; + union + { + struct + { + gcry_ac_data_write_cb_t cb; + void *opaque; + } callback; + struct + { + unsigned char **data; + size_t *data_n; + } string; + void *opaque; + } writable; + } io _GCRY_ATTR_INTERNAL; +} +gcry_ac_io_t _GCRY_ATTR_INTERNAL; + +/* The caller of gcry_ac_key_pair_generate can provide one of these + structures in order to influence the key generation process in an + algorithm-specific way. */ +typedef struct gcry_ac_key_spec_rsa +{ + gcry_mpi_t e; /* E to use. */ +} gcry_ac_key_spec_rsa_t _GCRY_ATTR_INTERNAL; + +/* Structure used for passing data to the implementation of the + `EME-PKCS-V1_5' encoding method. */ +typedef struct gcry_ac_eme_pkcs_v1_5 +{ + size_t key_size; +} gcry_ac_eme_pkcs_v1_5_t _GCRY_ATTR_INTERNAL; + +typedef enum gcry_md_algos gcry_md_algo_t _GCRY_ATTR_INTERNAL; + +/* Structure used for passing data to the implementation of the + `EMSA-PKCS-V1_5' encoding method. */ +typedef struct gcry_ac_emsa_pkcs_v1_5 +{ + gcry_md_algo_t md; + size_t em_n; +} gcry_ac_emsa_pkcs_v1_5_t _GCRY_ATTR_INTERNAL; + +/* Structure used for passing data to the implementation of the + `SSA-PKCS-V1_5' signature scheme. */ +typedef struct gcry_ac_ssa_pkcs_v1_5 +{ + gcry_md_algo_t md; +} gcry_ac_ssa_pkcs_v1_5_t _GCRY_ATTR_INTERNAL; +#endif /* !GCRYPT_NO_DEPRECATED || !_GCRYPT_IN_LIBGCRYPT */ + + +#ifndef GCRYPT_NO_DEPRECATED +/* Returns a new, empty data set in DATA. */ +gcry_error_t gcry_ac_data_new (gcry_ac_data_t *data) + /* */ _GCRY_ATTR_INTERNAL; + +/* Destroy the data set DATA. */ +void gcry_ac_data_destroy (gcry_ac_data_t data) + /* */ _GCRY_ATTR_INTERNAL; + +/* Create a copy of the data set DATA and store it in DATA_CP. */ +gcry_error_t gcry_ac_data_copy (gcry_ac_data_t *data_cp, + gcry_ac_data_t data) + /* */ _GCRY_ATTR_INTERNAL; + +/* Return the number of named MPI values inside of the data set + DATA. */ +unsigned int gcry_ac_data_length (gcry_ac_data_t data) + /* */ _GCRY_ATTR_INTERNAL; + +/* Destroy any values contained in the data set DATA. */ +void gcry_ac_data_clear (gcry_ac_data_t data) + /* */ _GCRY_ATTR_INTERNAL; + +/* Add the value MPI to DATA with the label NAME. If FLAGS contains + GCRY_AC_FLAG_DATA_COPY, the data set will contain copies of NAME + and MPI. If FLAGS contains GCRY_AC_FLAG_DATA_DEALLOC or + GCRY_AC_FLAG_DATA_COPY, the values contained in the data set will + be deallocated when they are to be removed from the data set. */ +gcry_error_t gcry_ac_data_set (gcry_ac_data_t data, unsigned int flags, + const char *name, gcry_mpi_t mpi) + /* */ _GCRY_ATTR_INTERNAL; + +/* Store the value labelled with NAME found in DATA in MPI. If FLAGS + contains GCRY_AC_FLAG_COPY, store a copy of the MPI value contained + in the data set. MPI may be NULL. */ +gcry_error_t gcry_ac_data_get_name (gcry_ac_data_t data, unsigned int flags, + const char *name, gcry_mpi_t *mpi) + /* */ _GCRY_ATTR_INTERNAL; + +/* Stores in NAME and MPI the named MPI value contained in the data + set DATA with the index IDX. If FLAGS contains GCRY_AC_FLAG_COPY, + store copies of the values contained in the data set. NAME or MPI + may be NULL. */ +gcry_error_t gcry_ac_data_get_index (gcry_ac_data_t data, unsigned int flags, + unsigned int idx, + const char **name, gcry_mpi_t *mpi) + /* */ _GCRY_ATTR_INTERNAL; + +/* Convert the data set DATA into a new S-Expression, which is to be + stored in SEXP, according to the identifiers contained in + IDENTIFIERS. */ +gcry_error_t gcry_ac_data_to_sexp (gcry_ac_data_t data, gcry_sexp_t *sexp, + const char **identifiers) + /* */ _GCRY_ATTR_INTERNAL; + +/* Create a new data set, which is to be stored in DATA_SET, from the + S-Expression SEXP, according to the identifiers contained in + IDENTIFIERS. */ +gcry_error_t gcry_ac_data_from_sexp (gcry_ac_data_t *data, gcry_sexp_t sexp, + const char **identifiers) + /* */ _GCRY_ATTR_INTERNAL; + +/* Initialize AC_IO according to MODE, TYPE and the variable list of + arguments. The list of variable arguments to specify depends on + the given TYPE. */ +void gcry_ac_io_init (gcry_ac_io_t *ac_io, gcry_ac_io_mode_t mode, + gcry_ac_io_type_t type, ...) + /* */ _GCRY_ATTR_INTERNAL; + +/* Initialize AC_IO according to MODE, TYPE and the variable list of + arguments AP. The list of variable arguments to specify depends on + the given TYPE. */ +void gcry_ac_io_init_va (gcry_ac_io_t *ac_io, gcry_ac_io_mode_t mode, + gcry_ac_io_type_t type, va_list ap) + /* */ _GCRY_ATTR_INTERNAL; + +/* Create a new ac handle. */ +gcry_error_t gcry_ac_open (gcry_ac_handle_t *handle, + gcry_ac_id_t algorithm, unsigned int flags) + /* */ _GCRY_ATTR_INTERNAL; + +/* Destroy an ac handle. */ +void gcry_ac_close (gcry_ac_handle_t handle) + /* */ _GCRY_ATTR_INTERNAL; + +/* Initialize a key from a given data set. */ +gcry_error_t gcry_ac_key_init (gcry_ac_key_t *key, gcry_ac_handle_t handle, + gcry_ac_key_type_t type, gcry_ac_data_t data) + /* */ _GCRY_ATTR_INTERNAL; + +/* Generates a new key pair via the handle HANDLE of NBITS bits and + stores it in KEY_PAIR. In case non-standard settings are wanted, a + pointer to a structure of type gcry_ac_key_spec__t, + matching the selected algorithm, can be given as KEY_SPEC. + MISC_DATA is not used yet. */ +gcry_error_t gcry_ac_key_pair_generate (gcry_ac_handle_t handle, + unsigned int nbits, void *spec, + gcry_ac_key_pair_t *key_pair, + gcry_mpi_t **misc_data) + /* */ _GCRY_ATTR_INTERNAL; + +/* Returns the key of type WHICH out of the key pair KEY_PAIR. */ +gcry_ac_key_t gcry_ac_key_pair_extract (gcry_ac_key_pair_t key_pair, + gcry_ac_key_type_t which) + /* */ _GCRY_ATTR_INTERNAL; + +/* Returns the data set contained in the key KEY. */ +gcry_ac_data_t gcry_ac_key_data_get (gcry_ac_key_t key) + /* */ _GCRY_ATTR_INTERNAL; + +/* Verifies that the key KEY is sane via HANDLE. */ +gcry_error_t gcry_ac_key_test (gcry_ac_handle_t handle, gcry_ac_key_t key) + /* */ _GCRY_ATTR_INTERNAL; + +/* Stores the number of bits of the key KEY in NBITS via HANDLE. */ +gcry_error_t gcry_ac_key_get_nbits (gcry_ac_handle_t handle, + gcry_ac_key_t key, unsigned int *nbits) + /* */ _GCRY_ATTR_INTERNAL; + +/* Writes the 20 byte long key grip of the key KEY to KEY_GRIP via + HANDLE. */ +gcry_error_t gcry_ac_key_get_grip (gcry_ac_handle_t handle, gcry_ac_key_t key, + unsigned char *key_grip) + /* */ _GCRY_ATTR_INTERNAL; + +/* Destroy a key. */ +void gcry_ac_key_destroy (gcry_ac_key_t key) + /* */ _GCRY_ATTR_INTERNAL; + +/* Destroy a key pair. */ +void gcry_ac_key_pair_destroy (gcry_ac_key_pair_t key_pair) + /* */ _GCRY_ATTR_INTERNAL; + +/* Encodes a message according to the encoding method METHOD. OPTIONS + must be a pointer to a method-specific structure + (gcry_ac_em*_t). */ +gcry_error_t gcry_ac_data_encode (gcry_ac_em_t method, + unsigned int flags, void *options, + gcry_ac_io_t *io_read, + gcry_ac_io_t *io_write) + /* */ _GCRY_ATTR_INTERNAL; + +/* Decodes a message according to the encoding method METHOD. OPTIONS + must be a pointer to a method-specific structure + (gcry_ac_em*_t). */ +gcry_error_t gcry_ac_data_decode (gcry_ac_em_t method, + unsigned int flags, void *options, + gcry_ac_io_t *io_read, + gcry_ac_io_t *io_write) + /* */ _GCRY_ATTR_INTERNAL; + +/* Encrypt the plain text MPI value DATA_PLAIN with the key KEY under + the control of the flags FLAGS and store the resulting data set + into DATA_ENCRYPTED. */ +gcry_error_t gcry_ac_data_encrypt (gcry_ac_handle_t handle, + unsigned int flags, + gcry_ac_key_t key, + gcry_mpi_t data_plain, + gcry_ac_data_t *data_encrypted) + /* */ _GCRY_ATTR_INTERNAL; + +/* Decrypt the decrypted data contained in the data set DATA_ENCRYPTED + with the key KEY under the control of the flags FLAGS and store the + resulting plain text MPI value in DATA_PLAIN. */ +gcry_error_t gcry_ac_data_decrypt (gcry_ac_handle_t handle, + unsigned int flags, + gcry_ac_key_t key, + gcry_mpi_t *data_plain, + gcry_ac_data_t data_encrypted) + /* */ _GCRY_ATTR_INTERNAL; + +/* Sign the data contained in DATA with the key KEY and store the + resulting signature in the data set DATA_SIGNATURE. */ +gcry_error_t gcry_ac_data_sign (gcry_ac_handle_t handle, + gcry_ac_key_t key, + gcry_mpi_t data, + gcry_ac_data_t *data_signature) + /* */ _GCRY_ATTR_INTERNAL; + +/* Verify that the signature contained in the data set DATA_SIGNATURE + is indeed the result of signing the data contained in DATA with the + secret key belonging to the public key KEY. */ +gcry_error_t gcry_ac_data_verify (gcry_ac_handle_t handle, + gcry_ac_key_t key, + gcry_mpi_t data, + gcry_ac_data_t data_signature) + /* */ _GCRY_ATTR_INTERNAL; + +/* Encrypts the plain text readable from IO_MESSAGE through HANDLE + with the public key KEY according to SCHEME, FLAGS and OPTS. If + OPTS is not NULL, it has to be a pointer to a structure specific to + the chosen scheme (gcry_ac_es_*_t). The encrypted message is + written to IO_CIPHER. */ +gcry_error_t gcry_ac_data_encrypt_scheme (gcry_ac_handle_t handle, + gcry_ac_scheme_t scheme, + unsigned int flags, void *opts, + gcry_ac_key_t key, + gcry_ac_io_t *io_message, + gcry_ac_io_t *io_cipher) + /* */ _GCRY_ATTR_INTERNAL; + +/* Decrypts the cipher text readable from IO_CIPHER through HANDLE + with the secret key KEY according to SCHEME, @var{flags} and OPTS. + If OPTS is not NULL, it has to be a pointer to a structure specific + to the chosen scheme (gcry_ac_es_*_t). The decrypted message is + written to IO_MESSAGE. */ +gcry_error_t gcry_ac_data_decrypt_scheme (gcry_ac_handle_t handle, + gcry_ac_scheme_t scheme, + unsigned int flags, void *opts, + gcry_ac_key_t key, + gcry_ac_io_t *io_cipher, + gcry_ac_io_t *io_message) + /* */ _GCRY_ATTR_INTERNAL; + +/* Signs the message readable from IO_MESSAGE through HANDLE with the + secret key KEY according to SCHEME, FLAGS and OPTS. If OPTS is not + NULL, it has to be a pointer to a structure specific to the chosen + scheme (gcry_ac_ssa_*_t). The signature is written to + IO_SIGNATURE. */ +gcry_error_t gcry_ac_data_sign_scheme (gcry_ac_handle_t handle, + gcry_ac_scheme_t scheme, + unsigned int flags, void *opts, + gcry_ac_key_t key, + gcry_ac_io_t *io_message, + gcry_ac_io_t *io_signature) + /* */ _GCRY_ATTR_INTERNAL; + +/* Verifies through HANDLE that the signature readable from + IO_SIGNATURE is indeed the result of signing the message readable + from IO_MESSAGE with the secret key belonging to the public key KEY + according to SCHEME and OPTS. If OPTS is not NULL, it has to be an + anonymous structure (gcry_ac_ssa_*_t) specific to the chosen + scheme. */ +gcry_error_t gcry_ac_data_verify_scheme (gcry_ac_handle_t handle, + gcry_ac_scheme_t scheme, + unsigned int flags, void *opts, + gcry_ac_key_t key, + gcry_ac_io_t *io_message, + gcry_ac_io_t *io_signature) + /* */ _GCRY_ATTR_INTERNAL; + +/* Store the textual representation of the algorithm whose id is given + in ALGORITHM in NAME. This function is deprecated; use + gcry_pk_algo_name. */ +gcry_error_t gcry_ac_id_to_name (gcry_ac_id_t algorithm, + const char **name) + /* */ _GCRY_GCC_ATTR_DEPRECATED; +/* Store the numeric ID of the algorithm whose textual representation + is contained in NAME in ALGORITHM. This function is deprecated; + use gcry_pk_map_name. */ +gcry_error_t gcry_ac_name_to_id (const char *name, + gcry_ac_id_t *algorithm) + /* */ _GCRY_GCC_ATTR_DEPRECATED; +#endif /*GCRYPT_NO_DEPRECATED*/ + + +/****************************** + * * + * Key Derivation Functions * + * * + ******************************/ + +/* Algorithm IDs for the KDFs. */ +enum gcry_kdf_algos + { + GCRY_KDF_NONE = 0, + GCRY_KDF_SIMPLE_S2K = 16, + GCRY_KDF_SALTED_S2K = 17, + GCRY_KDF_ITERSALTED_S2K = 19, + GCRY_KDF_PBKDF1 = 33, + GCRY_KDF_PBKDF2 = 34 + }; + +/* Derive a key from a passphrase. */ +gpg_error_t gcry_kdf_derive (const void *passphrase, size_t passphraselen, + int algo, int subalgo, + const void *salt, size_t saltlen, + unsigned long iterations, + size_t keysize, void *keybuffer); + + + + +/************************************ + * * + * Random Generating Functions * + * * + ************************************/ + +/* The possible values for the random quality. The rule of thumb is + to use STRONG for session keys and VERY_STRONG for key material. + WEAK is usually an alias for STRONG and should not be used anymore + (except with gcry_mpi_randomize); use gcry_create_nonce instead. */ +typedef enum gcry_random_level + { + GCRY_WEAK_RANDOM = 0, + GCRY_STRONG_RANDOM = 1, + GCRY_VERY_STRONG_RANDOM = 2 + } +gcry_random_level_t; + +/* Fill BUFFER with LENGTH bytes of random, using random numbers of + quality LEVEL. */ +void gcry_randomize (void *buffer, size_t length, + enum gcry_random_level level); + +/* Add the external random from BUFFER with LENGTH bytes into the + pool. QUALITY should either be -1 for unknown or in the range of 0 + to 100 */ +gcry_error_t gcry_random_add_bytes (const void *buffer, size_t length, + int quality); + +/* If random numbers are used in an application, this macro should be + called from time to time so that new stuff gets added to the + internal pool of the RNG. */ +#define gcry_fast_random_poll() gcry_control (GCRYCTL_FAST_POLL, NULL) + + +/* Return NBYTES of allocated random using a random numbers of quality + LEVEL. */ +void *gcry_random_bytes (size_t nbytes, enum gcry_random_level level) + _GCRY_GCC_ATTR_MALLOC; + +/* Return NBYTES of allocated random using a random numbers of quality + LEVEL. The random numbers are created returned in "secure" + memory. */ +void *gcry_random_bytes_secure (size_t nbytes, enum gcry_random_level level) + _GCRY_GCC_ATTR_MALLOC; + + +/* Set the big integer W to a random value of NBITS using a random + generator with quality LEVEL. Note that by using a level of + GCRY_WEAK_RANDOM gcry_create_nonce is used internally. */ +void gcry_mpi_randomize (gcry_mpi_t w, + unsigned int nbits, enum gcry_random_level level); + + +/* Create an unpredicable nonce of LENGTH bytes in BUFFER. */ +void gcry_create_nonce (void *buffer, size_t length); + + + + + +/*******************************/ +/* */ +/* Prime Number Functions */ +/* */ +/*******************************/ + +/* Mode values passed to a gcry_prime_check_func_t. */ +#define GCRY_PRIME_CHECK_AT_FINISH 0 +#define GCRY_PRIME_CHECK_AT_GOT_PRIME 1 +#define GCRY_PRIME_CHECK_AT_MAYBE_PRIME 2 + +/* The function should return 1 if the operation shall continue, 0 to + reject the prime candidate. */ +typedef int (*gcry_prime_check_func_t) (void *arg, int mode, + gcry_mpi_t candidate); + +/* Flags for gcry_prime_generate(): */ + +/* Allocate prime numbers and factors in secure memory. */ +#define GCRY_PRIME_FLAG_SECRET (1 << 0) + +/* Make sure that at least one prime factor is of size + `FACTOR_BITS'. */ +#define GCRY_PRIME_FLAG_SPECIAL_FACTOR (1 << 1) + +/* Generate a new prime number of PRIME_BITS bits and store it in + PRIME. If FACTOR_BITS is non-zero, one of the prime factors of + (prime - 1) / 2 must be FACTOR_BITS bits long. If FACTORS is + non-zero, allocate a new, NULL-terminated array holding the prime + factors and store it in FACTORS. FLAGS might be used to influence + the prime number generation process. */ +gcry_error_t gcry_prime_generate (gcry_mpi_t *prime, + unsigned int prime_bits, + unsigned int factor_bits, + gcry_mpi_t **factors, + gcry_prime_check_func_t cb_func, + void *cb_arg, + gcry_random_level_t random_level, + unsigned int flags); + +/* Find a generator for PRIME where the factorization of (prime-1) is + in the NULL terminated array FACTORS. Return the generator as a + newly allocated MPI in R_G. If START_G is not NULL, use this as + teh start for the search. */ +gcry_error_t gcry_prime_group_generator (gcry_mpi_t *r_g, + gcry_mpi_t prime, + gcry_mpi_t *factors, + gcry_mpi_t start_g); + + +/* Convenience function to release the FACTORS array. */ +void gcry_prime_release_factors (gcry_mpi_t *factors); + + +/* Check wether the number X is prime. */ +gcry_error_t gcry_prime_check (gcry_mpi_t x, unsigned int flags); + + + +/************************************ + * * + * Miscellaneous Stuff * + * * + ************************************/ + +/* Log levels used by the internal logging facility. */ +enum gcry_log_levels + { + GCRY_LOG_CONT = 0, /* (Continue the last log line.) */ + GCRY_LOG_INFO = 10, + GCRY_LOG_WARN = 20, + GCRY_LOG_ERROR = 30, + GCRY_LOG_FATAL = 40, + GCRY_LOG_BUG = 50, + GCRY_LOG_DEBUG = 100 + }; + +/* Type for progress handlers. */ +typedef void (*gcry_handler_progress_t) (void *, const char *, int, int, int); + +/* Type for memory allocation handlers. */ +typedef void *(*gcry_handler_alloc_t) (size_t n); + +/* Type for secure memory check handlers. */ +typedef int (*gcry_handler_secure_check_t) (const void *); + +/* Type for memory reallocation handlers. */ +typedef void *(*gcry_handler_realloc_t) (void *p, size_t n); + +/* Type for memory free handlers. */ +typedef void (*gcry_handler_free_t) (void *); + +/* Type for out-of-memory handlers. */ +typedef int (*gcry_handler_no_mem_t) (void *, size_t, unsigned int); + +/* Type for fatal error handlers. */ +typedef void (*gcry_handler_error_t) (void *, int, const char *); + +/* Type for logging handlers. */ +typedef void (*gcry_handler_log_t) (void *, int, const char *, va_list); + +/* Certain operations can provide progress information. This function + is used to register a handler for retrieving these information. */ +void gcry_set_progress_handler (gcry_handler_progress_t cb, void *cb_data); + + +/* Register a custom memory allocation functions. */ +void gcry_set_allocation_handler ( + gcry_handler_alloc_t func_alloc, + gcry_handler_alloc_t func_alloc_secure, + gcry_handler_secure_check_t func_secure_check, + gcry_handler_realloc_t func_realloc, + gcry_handler_free_t func_free); + +/* Register a function used instead of the internal out of memory + handler. */ +void gcry_set_outofcore_handler (gcry_handler_no_mem_t h, void *opaque); + +/* Register a function used instead of the internal fatal error + handler. */ +void gcry_set_fatalerror_handler (gcry_handler_error_t fnc, void *opaque); + +/* Register a function used instead of the internal logging + facility. */ +void gcry_set_log_handler (gcry_handler_log_t f, void *opaque); + +/* Reserved for future use. */ +void gcry_set_gettext_handler (const char *(*f)(const char*)); + +/* Libgcrypt uses its own memory allocation. It is important to use + gcry_free () to release memory allocated by libgcrypt. */ +void *gcry_malloc (size_t n) _GCRY_GCC_ATTR_MALLOC; +void *gcry_calloc (size_t n, size_t m) _GCRY_GCC_ATTR_MALLOC; +void *gcry_malloc_secure (size_t n) _GCRY_GCC_ATTR_MALLOC; +void *gcry_calloc_secure (size_t n, size_t m) _GCRY_GCC_ATTR_MALLOC; +void *gcry_realloc (void *a, size_t n); +char *gcry_strdup (const char *string) _GCRY_GCC_ATTR_MALLOC; +void *gcry_xmalloc (size_t n) _GCRY_GCC_ATTR_MALLOC; +void *gcry_xcalloc (size_t n, size_t m) _GCRY_GCC_ATTR_MALLOC; +void *gcry_xmalloc_secure (size_t n) _GCRY_GCC_ATTR_MALLOC; +void *gcry_xcalloc_secure (size_t n, size_t m) _GCRY_GCC_ATTR_MALLOC; +void *gcry_xrealloc (void *a, size_t n); +char *gcry_xstrdup (const char * a) _GCRY_GCC_ATTR_MALLOC; +void gcry_free (void *a); + +/* Return true if A is allocated in "secure" memory. */ +int gcry_is_secure (const void *a) _GCRY_GCC_ATTR_PURE; + +/* Return true if Libgcrypt is in FIPS mode. */ +#define gcry_fips_mode_active() !!gcry_control (GCRYCTL_FIPS_MODE_P, 0) + + +/* Include support for Libgcrypt modules. */ +#include + +#if 0 /* (Keep Emacsens' auto-indent happy.) */ +{ +#endif +#ifdef __cplusplus +} +#endif +#endif /* _GCRYPT_H */ +/* +Local Variables: +buffer-read-only: t +End: +*/ diff --git a/grub-core/lib/libgcrypt-grub/src/hmac256.h b/grub-core/lib/libgcrypt-grub/src/hmac256.h new file mode 100644 index 000000000..df28e7272 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/hmac256.h @@ -0,0 +1,36 @@ +/* hmac256.h - Declarations for _gcry_hmac256 + * Copyright (C) 2008 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +#ifndef HMAC256_H +#define HMAC256_H + + +struct hmac256_context; +typedef struct hmac256_context *hmac256_context_t; + +hmac256_context_t _gcry_hmac256_new (const void *key, size_t keylen); +void _gcry_hmac256_update (hmac256_context_t hd, const void *buf, size_t len); +const void *_gcry_hmac256_finalize (hmac256_context_t hd, size_t *r_dlen); +void _gcry_hmac256_release (hmac256_context_t hd); + +int _gcry_hmac256_file (void *result, size_t resultsize, const char *filename, + const void *key, size_t keylen); + + +#endif /*HMAC256_H*/ diff --git a/grub-core/lib/libgcrypt-grub/src/mpi.h b/grub-core/lib/libgcrypt-grub/src/mpi.h new file mode 100644 index 000000000..5883196b1 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/mpi.h @@ -0,0 +1,266 @@ +/* mpi.h - Multi Precision Integers + * Copyright (C) 1994, 1996, 1998, + * 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * + * Note: This code is heavily based on the GNU MP Library. + * Actually it's the same code with only minor changes in the + * way the data is stored; this is to support the abstraction + * of an optional secure memory allocation which may be used + * to avoid revealing of sensitive data due to paging etc. + */ + +#ifndef G10_MPI_H +#define G10_MPI_H + +#include +#include +#include + +#include "types.h" +#include "../mpi/mpi-asm-defs.h" + +#include "g10lib.h" + +#ifndef _GCRYPT_IN_LIBGCRYPT +#error this file should only be used inside libgcrypt +#endif + +#ifndef BITS_PER_MPI_LIMB +#if BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_INT + typedef unsigned int mpi_limb_t; + typedef signed int mpi_limb_signed_t; +#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG + typedef unsigned long int mpi_limb_t; + typedef signed long int mpi_limb_signed_t; +#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG_LONG + typedef unsigned long long int mpi_limb_t; + typedef signed long long int mpi_limb_signed_t; +#elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_SHORT + typedef unsigned short int mpi_limb_t; + typedef signed short int mpi_limb_signed_t; +#else +#error BYTES_PER_MPI_LIMB does not match any C type +#endif +#define BITS_PER_MPI_LIMB (8*BYTES_PER_MPI_LIMB) +#endif /*BITS_PER_MPI_LIMB*/ + +#define DBG_MPI _gcry_get_debug_flag( 2 ); + +struct gcry_mpi +{ + int alloced; /* Array size (# of allocated limbs). */ + int nlimbs; /* Number of valid limbs. */ + int sign; /* Indicates a negative number and is also used + for opaque MPIs to store the length. */ + unsigned int flags; /* Bit 0: Array to be allocated in secure memory space.*/ + /* Bit 2: the limb is a pointer to some m_alloced data.*/ + mpi_limb_t *d; /* Array with the limbs */ +}; + +#define MPI_NULL NULL + +#define mpi_get_nlimbs(a) ((a)->nlimbs) +#define mpi_is_neg(a) ((a)->sign) + +/*-- mpiutil.c --*/ + +#ifdef M_DEBUG +# define mpi_alloc(n) _gcry_mpi_debug_alloc((n), M_DBGINFO( __LINE__ ) ) +# define mpi_alloc_secure(n) _gcry_mpi_debug_alloc_secure((n), M_DBGINFO( __LINE__ ) ) +# define mpi_free(a) _gcry_mpi_debug_free((a), M_DBGINFO(__LINE__) ) +# define mpi_resize(a,b) _gcry_mpi_debug_resize((a),(b), M_DBGINFO(__LINE__) ) +# define mpi_copy(a) _gcry_mpi_debug_copy((a), M_DBGINFO(__LINE__) ) + gcry_mpi_t _gcry_mpi_debug_alloc( unsigned nlimbs, const char *info ); + gcry_mpi_t _gcry_mpi_debug_alloc_secure( unsigned nlimbs, const char *info ); + void _gcry_mpi_debug_free( gcry_mpi_t a, const char *info ); + void _gcry_mpi_debug_resize( gcry_mpi_t a, unsigned nlimbs, const char *info ); + gcry_mpi_t _gcry_mpi_debug_copy( gcry_mpi_t a, const char *info ); +#else +# define mpi_alloc(n) _gcry_mpi_alloc((n) ) +# define mpi_alloc_secure(n) _gcry_mpi_alloc_secure((n) ) +# define mpi_free(a) _gcry_mpi_free((a) ) +# define mpi_resize(a,b) _gcry_mpi_resize((a),(b)) +# define mpi_copy(a) _gcry_mpi_copy((a)) + gcry_mpi_t _gcry_mpi_alloc( unsigned nlimbs ); + gcry_mpi_t _gcry_mpi_alloc_secure( unsigned nlimbs ); + void _gcry_mpi_free( gcry_mpi_t a ); + void _gcry_mpi_resize( gcry_mpi_t a, unsigned nlimbs ); + gcry_mpi_t _gcry_mpi_copy( gcry_mpi_t a ); +#endif + +#define gcry_mpi_copy _gcry_mpi_copy + +#define mpi_is_opaque(a) ((a) && ((a)->flags&4)) +#define mpi_is_secure(a) ((a) && ((a)->flags&1)) +#define mpi_clear(a) _gcry_mpi_clear ((a)) +#define mpi_alloc_like(a) _gcry_mpi_alloc_like((a)) +#define mpi_set(a,b) gcry_mpi_set ((a),(b)) +#define mpi_set_ui(a,b) gcry_mpi_set_ui ((a),(b)) +#define mpi_get_ui(a,b) _gcry_mpi_get_ui ((a),(b)) +#define mpi_alloc_set_ui(a) _gcry_mpi_alloc_set_ui ((a)) +#define mpi_m_check(a) _gcry_mpi_m_check ((a)) +#define mpi_swap(a,b) _gcry_mpi_swap ((a),(b)) +#define mpi_new(n) _gcry_mpi_new ((n)) +#define mpi_snew(n) _gcry_mpi_snew ((n)) + +void _gcry_mpi_clear( gcry_mpi_t a ); +gcry_mpi_t _gcry_mpi_alloc_like( gcry_mpi_t a ); +gcry_mpi_t _gcry_mpi_alloc_set_ui( unsigned long u); +gcry_err_code_t _gcry_mpi_get_ui (gcry_mpi_t w, ulong *u); +gcry_err_code_t gcry_mpi_get_ui (gcry_mpi_t w, ulong *u); +void _gcry_mpi_m_check( gcry_mpi_t a ); +void _gcry_mpi_swap( gcry_mpi_t a, gcry_mpi_t b); +gcry_mpi_t _gcry_mpi_new (unsigned int nbits); +gcry_mpi_t _gcry_mpi_snew (unsigned int nbits); + +/*-- mpicoder.c --*/ +void _gcry_log_mpidump( const char *text, gcry_mpi_t a ); +u32 _gcry_mpi_get_keyid( gcry_mpi_t a, u32 *keyid ); +byte *_gcry_mpi_get_buffer( gcry_mpi_t a, unsigned *nbytes, int *sign ); +byte *_gcry_mpi_get_secure_buffer( gcry_mpi_t a, unsigned *nbytes, int *sign ); +void _gcry_mpi_set_buffer ( gcry_mpi_t a, const void *buffer, + unsigned int nbytes, int sign ); + +#define log_mpidump _gcry_log_mpidump + +/*-- mpi-add.c --*/ +#define mpi_add_ui(w,u,v) gcry_mpi_add_ui((w),(u),(v)) +#define mpi_add(w,u,v) gcry_mpi_add ((w),(u),(v)) +#define mpi_addm(w,u,v,m) gcry_mpi_addm ((w),(u),(v),(m)) +#define mpi_sub_ui(w,u,v) gcry_mpi_sub_ui ((w),(u),(v)) +#define mpi_sub(w,u,v) gcry_mpi_sub ((w),(u),(v)) +#define mpi_subm(w,u,v,m) gcry_mpi_subm ((w),(u),(v),(m)) + + +/*-- mpi-mul.c --*/ +#define mpi_mul_ui(w,u,v) gcry_mpi_mul_ui ((w),(u),(v)) +#define mpi_mul_2exp(w,u,v) gcry_mpi_mul_2exp ((w),(u),(v)) +#define mpi_mul(w,u,v) gcry_mpi_mul ((w),(u),(v)) +#define mpi_mulm(w,u,v,m) gcry_mpi_mulm ((w),(u),(v),(m)) + + +/*-- mpi-div.c --*/ +#define mpi_fdiv_r_ui(a,b,c) _gcry_mpi_fdiv_r_ui((a),(b),(c)) +#define mpi_fdiv_r(a,b,c) _gcry_mpi_fdiv_r((a),(b),(c)) +#define mpi_fdiv_q(a,b,c) _gcry_mpi_fdiv_q((a),(b),(c)) +#define mpi_fdiv_qr(a,b,c,d) _gcry_mpi_fdiv_qr((a),(b),(c),(d)) +#define mpi_tdiv_r(a,b,c) _gcry_mpi_tdiv_r((a),(b),(c)) +#define mpi_tdiv_qr(a,b,c,d) _gcry_mpi_tdiv_qr((a),(b),(c),(d)) +#define mpi_tdiv_q_2exp(a,b,c) _gcry_mpi_tdiv_q_2exp((a),(b),(c)) +#define mpi_divisible_ui(a,b) _gcry_mpi_divisible_ui((a),(b)) + +ulong _gcry_mpi_fdiv_r_ui( gcry_mpi_t rem, gcry_mpi_t dividend, ulong divisor ); +void _gcry_mpi_fdiv_r( gcry_mpi_t rem, gcry_mpi_t dividend, gcry_mpi_t divisor ); +void _gcry_mpi_fdiv_q( gcry_mpi_t quot, gcry_mpi_t dividend, gcry_mpi_t divisor ); +void _gcry_mpi_fdiv_qr( gcry_mpi_t quot, gcry_mpi_t rem, gcry_mpi_t dividend, gcry_mpi_t divisor ); +void _gcry_mpi_tdiv_r( gcry_mpi_t rem, gcry_mpi_t num, gcry_mpi_t den); +void _gcry_mpi_tdiv_qr( gcry_mpi_t quot, gcry_mpi_t rem, gcry_mpi_t num, gcry_mpi_t den); +void _gcry_mpi_tdiv_q_2exp( gcry_mpi_t w, gcry_mpi_t u, unsigned count ); +int _gcry_mpi_divisible_ui(gcry_mpi_t dividend, ulong divisor ); + + +/*-- mpi-mod.c --*/ +#define mpi_mod(r,a,m) _gcry_mpi_mod ((r), (a), (m)) +#define mpi_barrett_init(m,f) _gcry_mpi_barrett_init ((m),(f)) +#define mpi_barrett_free(c) _gcry_mpi_barrett_free ((c)) +#define mpi_mod_barrett(r,a,c) _gcry_mpi_mod_barrett ((r), (a), (c)) +#define mpi_mul_barrett(r,u,v,c) _gcry_mpi_mul_barrett ((r), (u), (v), (c)) + +void _gcry_mpi_mod (gcry_mpi_t r, gcry_mpi_t dividend, gcry_mpi_t divisor); + +/* Context used with Barrett reduction. */ +struct barrett_ctx_s; +typedef struct barrett_ctx_s *mpi_barrett_t; + +mpi_barrett_t _gcry_mpi_barrett_init (gcry_mpi_t m, int copy); +void _gcry_mpi_barrett_free (mpi_barrett_t ctx); +void _gcry_mpi_mod_barrett (gcry_mpi_t r, gcry_mpi_t x, mpi_barrett_t ctx); +void _gcry_mpi_mul_barrett (gcry_mpi_t w, gcry_mpi_t u, gcry_mpi_t v, + mpi_barrett_t ctx); + + + +/*-- mpi-gcd.c --*/ + +/*-- mpi-mpow.c --*/ +#define mpi_mulpowm(a,b,c,d) _gcry_mpi_mulpowm ((a),(b),(c),(d)) +void _gcry_mpi_mulpowm( gcry_mpi_t res, gcry_mpi_t *basearray, gcry_mpi_t *exparray, gcry_mpi_t mod); + +/*-- mpi-cmp.c --*/ +#define mpi_cmp_ui(a,b) gcry_mpi_cmp_ui ((a),(b)) +#define mpi_cmp(a,b) gcry_mpi_cmp ((a),(b)) +int gcry_mpi_cmp_ui( gcry_mpi_t u, ulong v ); +int gcry_mpi_cmp( gcry_mpi_t u, gcry_mpi_t v ); + +/*-- mpi-scan.c --*/ +#define mpi_trailing_zeros(a) _gcry_mpi_trailing_zeros ((a)) +int _gcry_mpi_getbyte( gcry_mpi_t a, unsigned idx ); +void _gcry_mpi_putbyte( gcry_mpi_t a, unsigned idx, int value ); +unsigned _gcry_mpi_trailing_zeros( gcry_mpi_t a ); + +/*-- mpi-bit.c --*/ +#define mpi_normalize(a) _gcry_mpi_normalize ((a)) +#define mpi_get_nbits(a) gcry_mpi_get_nbits ((a)) +#define mpi_test_bit(a,b) gcry_mpi_test_bit ((a),(b)) +#define mpi_set_bit(a,b) gcry_mpi_set_bit ((a),(b)) +#define mpi_set_highbit(a,b) gcry_mpi_set_highbit ((a),(b)) +#define mpi_clear_bit(a,b) gcry_mpi_clear_bit ((a),(b)) +#define mpi_clear_highbit(a,b) gcry_mpi_clear_highbit ((a),(b)) +#define mpi_rshift(a,b,c) gcry_mpi_rshift ((a),(b),(c)) +#define mpi_lshift(a,b,c) gcry_mpi_lshift ((a),(b),(c)) + +void _gcry_mpi_normalize( gcry_mpi_t a ); + +/*-- mpi-inv.c --*/ +#define mpi_invm(a,b,c) gcry_mpi_invm ((a),(b),(c)) + +/*-- ec.c --*/ + +/* Object to represent a point in projective coordinates. */ +struct mpi_point_s; +typedef struct mpi_point_s mpi_point_t; +struct mpi_point_s +{ + gcry_mpi_t x; + gcry_mpi_t y; + gcry_mpi_t z; +}; + +/* Context used with elliptic curve functions. */ +struct mpi_ec_ctx_s; +typedef struct mpi_ec_ctx_s *mpi_ec_t; + +void _gcry_mpi_ec_point_init (mpi_point_t *p); +void _gcry_mpi_ec_point_free (mpi_point_t *p); +mpi_ec_t _gcry_mpi_ec_init (gcry_mpi_t p, gcry_mpi_t a); +void _gcry_mpi_ec_free (mpi_ec_t ctx); +int _gcry_mpi_ec_get_affine (gcry_mpi_t x, gcry_mpi_t y, mpi_point_t *point, + mpi_ec_t ctx); +void _gcry_mpi_ec_dup_point (mpi_point_t *result, + mpi_point_t *point, mpi_ec_t ctx); +void _gcry_mpi_ec_add_points (mpi_point_t *result, + mpi_point_t *p1, mpi_point_t *p2, + mpi_ec_t ctx); +void _gcry_mpi_ec_mul_point (mpi_point_t *result, + gcry_mpi_t scalar, mpi_point_t *point, + mpi_ec_t ctx); + + + +#endif /*G10_MPI_H*/ diff --git a/grub-core/lib/libgcrypt-grub/src/secmem.h b/grub-core/lib/libgcrypt-grub/src/secmem.h new file mode 100644 index 000000000..29e151af4 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/secmem.h @@ -0,0 +1,39 @@ +/* secmem.h - internal definitions for secmem + * Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef G10_SECMEM_H +#define G10_SECMEM_H 1 + +void _gcry_secmem_init (size_t npool); +void _gcry_secmem_term (void); +void *_gcry_secmem_malloc (size_t size) _GCRY_GCC_ATTR_MALLOC; +void *_gcry_secmem_realloc (void *a, size_t newsize); +void _gcry_secmem_free (void *a); +void _gcry_secmem_dump_stats (void); +void _gcry_secmem_set_flags (unsigned flags); +unsigned _gcry_secmem_get_flags(void); +int _gcry_private_is_secure (const void *p); + +/* Flags for _gcry_secmem_{set,get}_flags. */ +#define GCRY_SECMEM_FLAG_NO_WARNING (1 << 0) +#define GCRY_SECMEM_FLAG_SUSPEND_WARNING (1 << 1) +#define GCRY_SECMEM_FLAG_NOT_LOCKED (1 << 2) + +#endif /* G10_SECMEM_H */ diff --git a/grub-core/lib/libgcrypt-grub/src/stdmem.h b/grub-core/lib/libgcrypt-grub/src/stdmem.h new file mode 100644 index 000000000..b476e7e50 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/stdmem.h @@ -0,0 +1,32 @@ +/* stdmem.h - internal definitions for stdmem + * Copyright (C) 2000, 2002, 2005 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef G10_STDMEM_H +#define G10_STDMEM_H 1 + +void _gcry_private_enable_m_guard(void); + +void *_gcry_private_malloc (size_t n) _GCRY_GCC_ATTR_MALLOC; +void *_gcry_private_malloc_secure (size_t n) _GCRY_GCC_ATTR_MALLOC; +void *_gcry_private_realloc (void *a, size_t n); +void _gcry_private_check_heap (const void *a); +void _gcry_private_free (void *a); + +#endif /* G10_STDMEM_H */ diff --git a/grub-core/lib/libgcrypt-grub/src/types.h b/grub-core/lib/libgcrypt-grub/src/types.h new file mode 100644 index 000000000..f2c0abf93 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/types.h @@ -0,0 +1,128 @@ +/* types.h - some common typedefs + * Copyright (C) 1998, 2000, 2002, 2003 Free Software Foundation, Inc. + * + * This file is part of Libgcrypt. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser general Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef GCRYPT_TYPES_H +#define GCRYPT_TYPES_H + + +/* The AC_CHECK_SIZEOF() in configure fails for some machines. + * we provide some fallback values here */ +#if !SIZEOF_UNSIGNED_SHORT +#undef SIZEOF_UNSIGNED_SHORT +#define SIZEOF_UNSIGNED_SHORT 2 +#endif +#if !SIZEOF_UNSIGNED_INT +#undef SIZEOF_UNSIGNED_INT +#define SIZEOF_UNSIGNED_INT 4 +#endif +#if !SIZEOF_UNSIGNED_LONG +#undef SIZEOF_UNSIGNED_LONG +#define SIZEOF_UNSIGNED_LONG 4 +#endif + + +#include + + +#ifndef HAVE_BYTE_TYPEDEF +#undef byte /* maybe there is a macro with this name */ +/* Windows typedefs byte in the rpc headers. Avoid warning about + double definition. */ +#if !(defined(_WIN32) && defined(cbNDRContext)) + typedef unsigned char byte; +#endif +#define HAVE_BYTE_TYPEDEF +#endif + +#ifndef HAVE_USHORT_TYPEDEF +#undef ushort /* maybe there is a macro with this name */ + typedef unsigned short ushort; +#define HAVE_USHORT_TYPEDEF +#endif + +#ifndef HAVE_ULONG_TYPEDEF +#undef ulong /* maybe there is a macro with this name */ + typedef unsigned long ulong; +#define HAVE_ULONG_TYPEDEF +#endif + +#ifndef HAVE_U16_TYPEDEF +#undef u16 /* maybe there is a macro with this name */ +#if SIZEOF_UNSIGNED_INT == 2 + typedef unsigned int u16; +#elif SIZEOF_UNSIGNED_SHORT == 2 + typedef unsigned short u16; +#else +#error no typedef for u16 +#endif +#define HAVE_U16_TYPEDEF +#endif + +#ifndef HAVE_U32_TYPEDEF +#undef u32 /* maybe there is a macro with this name */ +#if SIZEOF_UNSIGNED_INT == 4 + typedef unsigned int u32; +#elif SIZEOF_UNSIGNED_LONG == 4 + typedef unsigned long u32; +#else +#error no typedef for u32 +#endif +#define HAVE_U32_TYPEDEF +#endif + +/**************** + * Warning: Some systems segfault when this u64 typedef and + * the dummy code in cipher/md.c is not available. Examples are + * Solaris and IRIX. + */ +#ifndef HAVE_U64_TYPEDEF +#undef u64 /* maybe there is a macro with this name */ +#if SIZEOF_UNSIGNED_INT == 8 + typedef unsigned int u64; +#define U64_C(c) (c ## U) +#define HAVE_U64_TYPEDEF +#elif SIZEOF_UNSIGNED_LONG == 8 + typedef unsigned long u64; +#define U64_C(c) (c ## UL) +#define HAVE_U64_TYPEDEF +#elif SIZEOF_UNSIGNED_LONG_LONG == 8 + typedef unsigned long long u64; +#define U64_C(c) (c ## ULL) +#define HAVE_U64_TYPEDEF +#elif SIZEOF_UINT64_T == 8 + typedef uint64_t u64; +#define U64_C(c) (UINT64_C(c)) +#define HAVE_U64_TYPEDEF +#endif +#endif + +typedef union { + int a; + short b; + char c[1]; + long d; +#ifdef HAVE_U64_TYPEDEF + u64 e; +#endif + + +} PROPERLY_ALIGNED_TYPE; + +#endif /*GCRYPT_TYPES_H*/ diff --git a/grub-core/lib/libgcrypt-grub/src/visibility.h b/grub-core/lib/libgcrypt-grub/src/visibility.h new file mode 100644 index 000000000..d1fb01810 --- /dev/null +++ b/grub-core/lib/libgcrypt-grub/src/visibility.h @@ -0,0 +1 @@ +# include diff --git a/grub-core/lib/libgcrypt/cipher/ChangeLog b/grub-core/lib/libgcrypt/cipher/ChangeLog new file mode 100644 index 000000000..1b3694f58 --- /dev/null +++ b/grub-core/lib/libgcrypt/cipher/ChangeLog @@ -0,0 +1,3990 @@ +2010-08-19 Werner Koch + + * cipher.c (gcry_cipher_open): Remove double release of the module. + Fixes bug#1263. + +2010-06-10 Jeff Johnson (wk) + + * ecc.c (ecc_generate_ext): Parse transient-key flag. + (generate_key): Add arg TRANSIENT_KEY and use it to set the random + level. + +2010-04-12 Brad Hards (wk) + + Spelling fixes. + +2010-03-26 Werner Koch + + * tiger.c (asn): Unfetter the old TIGER from an OID. + (TIGER_CONTEXT): Add field VARIANT. + (tiger_init): Factor code out to ... + (do_init): New. + (tiger1_init, tiger2_init): New. + (_gcry_digest_spec_tiger1, _gcry_digest_spec_tiger2): New. + * md.c (digest_table): Add TIGER1 and TIGER2 variants. + +2009-12-11 Werner Koch + + * sha256.c (Cho, Maj, Sum0, Sum1): Turn macros into inline + functions. + (transform): Partly unroll to interweave the chain variables + + * sha512.c (ROTR, Ch, Maj, Sum0, Sum1): Turn macros into inline + functions. + (transform): Partly unroll to interweave the chain variables. + Suggested by Christian Grothoff. + +2009-12-10 Werner Koch + + * Makefile.am (o_flag_munging): New. + (tiger.o, tiger.lo): Use it. + + * cipher.c (do_ctr_encrypt): Add arg OUTBUFLEN. Check for + suitable value. Add check for valid inputlen. Wipe temporary + memory. + (do_ctr_decrypt): Likewise. + (do_cbc_encrypt, do_cbc_decrypt): Add arg OUTBUFLEN. Check for + suitable value. Move check for valid inputlen to here; change + returned error from INV_ARG to INV_LENGTH. + (do_ecb_encrypt, do_ecb_decrypt): Ditto. + (do_cfb_encrypt, do_cfb_decrypt): Ditto. + (do_ofb_encrypt, do_ofb_decrypt): Ditto. + (cipher_encrypt, cipher_encrypt): Adjust for above changes. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Simplify. + +2009-12-09 Werner Koch + + * cipher.c (gcry_cipher_open): Allow for GCRY_CIPHER_MODE_AESWRAP. + (cipher_encrypt, cipher_decrypt): Ditto. + (do_aeswrap_encrypt, do_aeswrap_decrypt): New. + (struct gcry_cipher_handle): Add field marks. + (cipher_setkey, cipher_setiv): Update marks flags. + (cipher_reset): Reset marks. + (cipher_encrypt, cipher_decrypt): Add new arg OUTBUFLEN. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Pass outbuflen to + cipher_encrypt. Replace GPG_ERR_TOO_SHORT by + GPG_ERR_BUFFER_TOO_SHORT. + +2009-08-21 Werner Koch + + * dsa.c (dsa_generate_ext): Release retfactors array before + setting it to NULL. Reported by Daiko Ueno. + +2009-07-02 Werner Koch + + * md.c (md_read): Fix incomplete check for NULL. + Reported by Fabian Kail. + +2009-03-31 Werner Koch + + * rsa.c (rsa_check_secret_key): Return GPG_ERR_BAD_SECKEY and not + GPG_ERR_PUBKEY_ALGO. + +2009-02-16 Werner Koch + + * rsa.c (generate_x931): Do not initialize TBL with automatic + variables. + * whirlpool.c, tiger.c, sha256.c, sha1.c, rmd160.c, md5.c + * md4.c, crc.c: Remove memory.h. This is garbage from gnupg. + Reported by Dan Fandrich. + +2009-01-22 Werner Koch + + * ecc.c (compute_keygrip): Remove superfluous const. + +2009-01-06 Werner Koch + + * rmd160.c (oid_spec_rmd160): Add TeleTrust identifier. + +2008-12-10 Werner Koch + + * dsa.c (generate): Add arg DOMAIN and use it if specified. + (generate_fips186): Ditto. + (dsa_generate_ext): Parse and check the optional "domain" + parameter and pass them to the generate functions. + + * rijndael.c (rijndael_names): Add "AES128" and "AES-128". + (rijndael192_names): Add "AES-192". + (rijndael256_names): Add "AES-256". + +2008-12-05 Werner Koch + + * dsa.c (generate): Add arg TRANSIENT_KEY and use it to detrmine + the RNG quality needed. + (dsa_generate_ext): Parse the transient-key flag und pass it to + generate. + +2008-11-28 Werner Koch + + * dsa.c (generate_fips186): Add arg DERIVEPARMS and use the seed + value if available. + + * primegen.c (_gcry_generate_fips186_2_prime): Fix inner p loop. + +2008-11-26 Werner Koch + + * primegen.c (_gcry_generate_fips186_3_prime): New. + * dsa.c (generate_fips186): Add arg USE_FIPS186_2. + (dsa_generate_ext): Parse new flag use-fips183-2. + +2008-11-25 Werner Koch + + * dsa.c (generate_fips186): New. + (dsa_generate_ext): Use new function if derive-parms are given or + if in FIPS mode. + * primegen.c (_gcry_generate_fips186_2_prime): New. + +2008-11-24 Werner Koch + + * pubkey.c (gcry_pk_genkey): Insert code to output extrainfo. + (pubkey_generate): Add arg R_EXTRAINFO and pass it to the extended + key generation function. + * rsa.c (gen_x931_parm_xp, gen_x931_parm_xi): New. + (generate_x931): Generate params if not given. + (rsa_generate_ext): Parse use-x931 flag. Return p-q-swapped + indicator. + * dsa.c (dsa_generate_ext): Put RETFACTORS into R_EXTRAINFO if + possible. + + * pubkey.c (gcry_pk_genkey): Remove parsing of almost all + parameters and pass the parameter S-expression to pubkey_generate. + (pubkey_generate): Simplify by requitring modules to parse the + parameters. Remove the special cases for Elgamal and ECC. + (sexp_elements_extract_ecc): Add arg EXTRASPEC and use it. Fix + small memory leak. + (sexp_to_key): Pass EXTRASPEC to sexp_elements_extract_ecc. + (pubkey_table) [USE_ELGAMAL]: Add real extraspec. + * rsa.c (rsa_generate_ext): Adjust for new calling convention. + * dsa.c (dsa_generate_ext): Ditto. + * elgamal.c (_gcry_elg_generate): Ditto. Rename to elg_generate_ext. + (elg_generate): New. + (_gcry_elg_generate_using_x): Remove after merging code with + elg_generate_ext. + (_gcry_pubkey_extraspec_elg): New. + (_gcry_elg_check_secret_key, _gcry_elg_encrypt, _gcry_elg_sign) + (_gcry_elg_verify, _gcry_elg_get_nbits): Make static and remove + _gcry_ prefix. + * ecc.c (_gcry_ecc_generate): Rename to ecc_generate_ext and + adjust for new calling convention. + (_gcry_ecc_get_param): Rename to ecc_get_param and make static. + (_gcry_pubkey_extraspec_ecdsa): Add ecc_generate_ext and + ecc_get_param. + +2008-11-20 Werner Koch + + * pubkey.c (pubkey_generate): Add arg DERIVEPARMS. + (gcry_pk_genkey): Parse derive-parms and pass it to above. + * rsa.c (generate_x931): New. + (rsa_generate_ext): Add arg DERIVEPARMS and call new function in + fips mode or if DERIVEPARMS is given. + * primegen.c (_gcry_derive_x931_prime, find_x931_prime): New. + +2008-11-19 Werner Koch + + * rsa.c (rsa_decrypt): Use gcry_create_nonce for blinding. + (generate): Rename to generate_std. + +2008-11-05 Werner Koch + + * md.c (md_open): Use a switch to set the Bsize. + (prepare_macpads): Fix long key case for SHA384 and SHA512. + + * cipher.c (gcry_cipher_handle): Add field EXTRASPEC. + (gcry_cipher_open): Set it. + (gcry_cipher_ctl): Add private control code to disable weak key + detection and to return the current input block. + * des.c (_tripledes_ctx): Add field FLAGS. + (do_tripledes_set_extra_info): New. + (_gcry_cipher_extraspec_tripledes): Add new function. + (do_tripledes_setkey): Disable weak key detection. + +2008-10-24 Werner Koch + + * md.c (digest_table): Allow MD5 in fips mode. + (md_register_default): Take special action for MD5. + (md_enable, gcry_md_hash_buffer): Ditto. + +2008-09-30 Werner Koch + + * rijndael.c (do_setkey): Properly align "t" and "tk". + (prepare_decryption): Properly align "w". Fixes bug #936. + +2008-09-18 Werner Koch + + * pubkey.c (gcry_pk_genkey): Parse domain parameter. + (pubkey_generate): Add new arg DOMAIN and remove special case for + DSA with qbits. + * rsa.c (rsa_generate): Add dummy args QBITS, NAME and DOMAIN and + rename to rsa_generate_ext. Change caller. + (_gcry_rsa_generate, _gcry_rsa_check_secret_key) + (_gcry_rsa_encrypt, _gcry_rsa_decrypt, _gcry_rsa_sign) + (_gcry_rsa_verify, _gcry_rsa_get_nbits): Make static and remove + _gcry_ prefix. + (_gcry_pubkey_spec_rsa, _gcry_pubkey_extraspec_rsa): Adjust names. + * dsa.c (dsa_generate_ext): New. + (_gcry_dsa_generate): Replace code by a call to dsa_generate. + (_gcry_dsa_check_secret_key, _gcry_dsa_sign, _gcry_dsa_verify) + (_gcry_dsa_get_nbits): Make static and remove _gcry prefix. + (_gcry_dsa_generate2): Remove. + (_gcry_pubkey_spec_dsa): Adjust to name changes. + (_gcry_pubkey_extraspec_rsa): Add dsa_generate_ext. + +2008-09-16 Werner Koch + + * ecc.c (run_selftests): Add arg EXTENDED. + +2008-09-12 Werner Koch + + * rsa.c (test_keys): Do a bad case signature check. + * dsa.c (test_keys): Do a bad case check. + + * cipher.c (_gcry_cipher_selftest): Add arg EXTENDED and pass it + to the called tests. + * md.c (_gcry_md_selftest): Ditto. + * pubkey.c (_gcry_pk_selftest): Ditto. + * rijndael.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftest_fips_128): Add arg EXTENDED and run only one test + non-extended mode. + (selftest_fips_192): Add dummy arg EXTENDED. + (selftest_fips_256): Ditto. + * hmac-tests.c (_gcry_hmac_selftest): Ditto. + (run_selftests): Ditto. + (selftests_sha1): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha224, selftests_sha256): Ditto. + (selftests_sha384, selftests_sha512): Ditto. + * sha1.c (run_selftests): Add arg EXTENDED and pass it to the + called test. + (selftests_sha1): Add arg EXTENDED and run only one test + non-extended mode. + * sha256.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftests_sha224): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha256): Ditto. + * sha512.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftests_sha384): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha512): Ditto. + * des.c (run_selftests): Add arg EXTENDED and pass it to the + called test. + (selftest_fips): Add dummy arg EXTENDED. + * rsa.c (run_selftests): Add dummy arg EXTENDED. + + * dsa.c (run_selftests): Add dummy arg EXTENDED. + + * rsa.c (extract_a_from_sexp): New. + (selftest_encr_1024): Check that the ciphertext does not match the + plaintext. + (test_keys): Improve tests and return an error status. + (generate): Return an error if test_keys fails. + * dsa.c (test_keys): Add comments and return an error status. + (generate): Return an error if test_keys failed. + +2008-09-11 Werner Koch + + * rsa.c (_gcry_rsa_decrypt): Return an error instead of calling + BUG in case of a practically impossible condition. + (sample_secret_key, sample_public_key): New. + (selftest_sign_1024, selftest_encr_1024): New. + (selftests_rsa): Implement tests. + * dsa.c (sample_secret_key, sample_public_key): New. + (selftest_sign_1024): New. + (selftests_dsa): Implement tests. + +2008-09-09 Werner Koch + + * hmac-tests.c (selftests_sha1): Add tests. + (selftests_sha224, selftests_sha384, selftests_sha512): Make up tests. + + * hash-common.c, hash-common.h: New. + * sha1.c (selftests_sha1): Add 3 tests. + * sha256.c (selftests_sha256, selftests_sha224): Ditto. + * sha512.c (selftests_sha512, selftests_sha384): Ditto. + +2008-08-29 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Remove the special case for RSA + and check whether a custom computation function has been setup. + * rsa.c (compute_keygrip): New. + (_gcry_pubkey_extraspec_rsa): Setup this function. + * ecc.c (compute_keygrip): New. + (_gcry_pubkey_extraspec_ecdsa): Setup this function. + +2008-08-28 Werner Koch + + * cipher.c (cipher_decrypt, cipher_encrypt): Return an error if + mode NONE is used. + (gcry_cipher_open): Allow mode NONE only with a debug flag set and + if not in FIPS mode. + +2008-08-26 Werner Koch + + * pubkey.c (pubkey_generate): Add arg KEYGEN_FLAGS. + (gcry_pk_genkey): Implement new parameter "transient-key" and + pass it as flags to pubkey_generate. + (pubkey_generate): Make use of an ext_generate function. + * rsa.c (generate): Add new arg transient_key and pass appropriate + args to the prime generator. + (_gcry_rsa_generate): Factor all code out to ... + (rsa_generate): .. new func with extra arg KEYGEN_FLAGS. + (_gcry_pubkey_extraspec_ecdsa): Setup rsa_generate. + * primegen.c (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Add new arg RANDOM_LEVEL. + +2008-08-21 Werner Koch + + * primegen.c (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Use a constant macro for the random + level. + +2008-08-19 Werner Koch + + * pubkey.c (sexp_elements_extract_ecc) [!USE_ECC]: Do not allow + allow "curve" parameter. + +2008-08-15 Werner Koch + + * pubkey.c (_gcry_pk_selftest): New. + * dsa.c (selftests_dsa, run_selftests): New. + * rsa.c (selftests_rsa, run_selftests): New. + * ecc.c (selftests_ecdsa, run_selftests): New. + + * md.c (_gcry_md_selftest): New. + * sha1.c (run_selftests, selftests_sha1): New. + * sha256.c (selftests_sha224, selftests_sha256, run_selftests): New. + * sha512.c (selftests_sha384, selftests_sha512, run_selftests): New. + + * des.c (selftest): Remove static variable form selftest. + (des_setkey): No on-the-fly self test in fips mode. + (tripledes_set3keys): Ditto. + + * cipher.c (_gcry_cipher_setkey, _gcry_cipher_setiv): + + * dsa.c (generate): Bail out in fips mode if NBITS is less than 1024. + * rsa.c (generate): Return an error code if the the requested size + is less than 1024 and we are in fpis mode. + (_gcry_rsa_generate): Take care of that error code. + + * ecc.c (generate_curve): In fips mode enable only NIST curves. + + * cipher.c (_gcry_cipher_selftest): New. + + * sha512.c (_gcry_digest_extraspec_sha384) + (_gcry_digest_extraspec_sha512): New. + * sha256.c (_gcry_digest_extraspec_sha224) + (_gcry_digest_extraspec_sha256): New. + * sha1.c (_gcry_digest_extraspec_sha1): New. + * ecc.c (_gcry_pubkey_extraspec_ecdsa): New. + * dsa.c (_gcry_pubkey_extraspec_dsa): New. + * rsa.c (_gcry_pubkey_extraspec_rsa): New. + * rijndael.c (_gcry_cipher_extraspec_aes) + (_gcry_cipher_extraspec_aes192, _gcry_cipher_extraspec_aes256): New. + * des.c (_gcry_cipher_extraspec_tripledes): New. + + * cipher.c (gcry_cipher_register): Rename to _gcry_cipher_register. + Add arg EXTRASPEC. + (dummy_extra_spec): New. + (cipher_table_entry): Add extraspec field. + * md.c (_gcry_md_register): Rename to _gcry_md_register. Add + arg EXTRASPEC. + (dummy_extra_spec): New. + (digest_table_entry): Add extraspec field. + * pubkey.c (gcry_pk_register): Rename to _gcry_pk_register. Add + arg EXTRASPEC. + (dummy_extra_spec): New. + (pubkey_table_entry): Add extraspec field. + + * ac.c: Let most public functions return GPG_ERR_UNSUPPORTED in + fips mode. + + * pubkey.c (pubkey_table_entry): Add field FIPS_ALLOWED and mark + appropriate algorithms. + (dummy_generate, dummy_check_secret_key, dummy_encrypt) + (dummy_decrypt, dummy_sign, dummy_verify, dummy_get_nbits): Signal + a fips error when used. + (gcry_pk_register): In fips mode do not allow to register new + algorithms. + + * md.c (digest_table): Add field FIPS_ALLOWED and mark appropriate + algorithms. + (md_register_default): In fips mode register only fips algorithms. + (gcry_md_register): In fips mode do not allow to register new + algorithms. + (gcry_md_get): Signal a fips error if called. + (gcry_md_hash_buffer): Do not allow rmd160 when not in fips mode. + (md_start_debug): Disable in fips_mode. + + * md.c (gcry_md_register_default): Rename to .. + (md_register_default): .. this. + (md_digest): Remove this commented fucntion. + * pubkey.c (gcry_pk_register_default): Rename to .. + (pk_register_default): .. this. + + * cipher.c (cipher_table_entry): Add field FIPS_ALLOWED. + (gcry_cipher_register_default): Register only fips approved + algorithms. + (gcry_cipher_register): Do not allow to register new ciphers. + (cipher_setiv): Signal fips error. + + * cipher (gcry_cipher_register_default): Rename to .. + (cipher_register_default): .. this. + (REGISTER_DEFAULT_CIPHERS): Adjust for that change. + +2008-07-05 Werner Koch + + * random-daemon.c, random.h, rndhw.c, rndunix.c, rand-internal.h + * random.c, rndegd.c, rndlinux.c, rndw32.c: Move to ../cipher. + * Makefile.am: Remove random stuff. + +2008-06-24 Szakats Istvan (wk) + + * ac.c (_gcry_ac_key_destroy, _gcry_ac_key_pair_generate): Relase + some more memory. + +2008-04-22 Werner Koch + + * rijndael.c (_gcry_aes_cfb_enc, _gcry_aes_cbc_enc) + (_gcry_aes_cfb_dec, _gcry_aes_cbc_dec): Use Padlock if possible. + +2008-04-18 Werner Koch + + * sha1.c (transform_aligned): Remove. That is will obviosuly not + work because we need a scratch working area and our internal API + does not allow to modify the buffers. + + * rijndael.c: Factor tables out to .. + * rijndael-tables.h: .. new. + + * ac.c (ac_data_extract): Make static. + + * camellia.h [HAVE_CONFIG_H]: Include config.h. + + * rndw32.c (registry_poll): Only print the performance data + problem warning once. Suggested by Simon Josefsson. + +2008-03-19 Werner Koch + + * cipher.c (gcry_cipher_open) [USE_AES]: Init bulk encryption only + if requested. Suggested by Dirk Stoecker. + +2008-03-18 Werner Koch + + * sha1.c: Include stdint.h. + (transform): Add arg NBLOCKS so that we can work on more than one + block and avoid updates of the chaining variables. Changed all + callers to use 1. + (sha1_write): Replace loop around transform. + (transform_aligned) [WORDS_BIGENDIAN]: New. + (TRANSFORM): New macro to replace all direct calls of transform. + +2008-03-17 Werner Koch + + * rijndael.c (_gcry_aes_cfb_dec): New. + (do_encrypt): Factor code out to .. + (do_encrypt_aligned): .. New. + (_gcry_aes_cfb_enc, _gcry_aes_cfb_dec): Use new function. + (do_decrypt): Factor code out to .. + (do_decrypt_aligned): .. new. + (_gcry_aes_cbc_enc, _gcry_aes_cbc_dec): New. + * cipher.c (struct gcry_cipher_handle): Put field IV into new + union U_IV to enforce proper alignment. Change all users. + (do_cfb_decrypt): Optimize. + (do_cbc_encrypt, do_cbc_decrypt): Optimize. + +2008-03-15 Werner Koch + + * rijndael.c (_gcry_aes_cfb_enc): New. + * cipher.c (struct gcry_cipher_handle): Add field ALGO and BULK. + (gcry_cipher_open): Set ALGO and BULK. + (do_cfb_encrypt): Optimize. + +2008-02-18 Werner Koch + + * rsa.c (_gcry_rsa_verify) [IS_DEVELOPMENT_VERSION]: Print + intermediate results. + +2008-01-08 Werner Koch + + * random.c (add_randomness): Do not just increment + POOL_FILLED_COUNTER but update it by the actual amount of data. + +2007-12-13 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Support SHA-224. + +2007-12-05 Werner Koch + + * rijndael.c (USE_PADLOCK): Depend on ENABLE_PADLOCK_SUPPORT. + * rndhw.c (USE_PADLOCK): Ditto + + * rsa.c (secret): Fixed condition test for using CRT. Reported by + Dean Scarff. Fixes bug#864. + (_gcry_rsa_check_secret_key): Return an erro if the optional + parameters are missing. + * pubkey.c (sexp_elements_extract): Add arg ALGO_NAME. Changed all + callers to pass NULL. Add hack to allow for optional RSA + parameters. + (sexp_to_key): Pass algo name to sexp_elements_extract. + +2007-12-03 Werner Koch + + * random.c (gcry_random_add_bytes): Implement it. + * rand-internal.h (RANDOM_ORIGIN_EXTERNAL): New. + +2007-11-30 Werner Koch + + * rndhw.c: New. + * rndlinux.c (_gcry_rndlinux_gather_random): Try to read 50% + directly from the hwrng. + * random.c (do_fast_random_poll): Also run the hw rng fast poll. + (_gcry_random_dump_stats): Tell whether the hw rng failed. + +2007-11-29 Werner Koch + + * rijndael.c (USE_PADLOCK): Define new macro used for ia32. + (RIJNDAEL_context) [USE_PADLOCK]: Add fields USE_PADLOCK and + PADLOCK_KEY. + (do_setkey) [USE_PADLOCK]: Enable padlock if available for 128 bit + AES. + (do_padlock) [USE_PADLOCK]: New. + (rijndael_encrypt, rijndael_decrypt) [USE_PADLOCK]: Divert to + do_padlock. + * cipher.c (cipher_context_alignment_t): New. Use it in this + module in place of PROPERLY_ALIGNED_TYPE. + (NEED_16BYTE_ALIGNED_CONTEXT): Define macro for ia32. + (struct gcry_cipher_handle): Add field HANDLE_OFFSET. + (gcry_cipher_open): Take care of increased alignment requirements. + (gcry_cipher_close): Ditto. + +2007-11-28 Werner Koch + + * sha256.c (asn224): Fixed wrong template. It happened due to a + bug in RFC4880. SHA-224 is not in the stable version of libgcrypt + so the consequences are limited to users of this devel version. + +2007-10-31 Werner Koch + + * ac.c (gcry_ac_data_new): Remove due to the visibility wrapper. + (gcry_ac_data_destroy, gcry_ac_data_copy, gcry_ac_data_length) + (gcry_ac_data_set, gcry_ac_data_get_name, gcry_ac_data_get_index) + (gcry_ac_data_to_sexp, gcry_ac_data_from_sexp) + (gcry_ac_data_clear, gcry_ac_io_init, gcry_ac_open) + (gcry_ac_close, gcry_ac_key_init, gcry_ac_key_pair_generate) + (gcry_ac_key_pair_extract, gcry_ac_key_destroy) + (gcry_ac_key_pair_destroy, gcry_ac_key_data_get) + (gcry_ac_key_test, gcry_ac_key_get_nbits, gcry_ac_key_get_grip) + (gcry_ac_data_encrypt, gcry_ac_data_decrypt, gcry_ac_data_sign) + (gcry_ac_data_verify, gcry_ac_data_encode, gcry_ac_data_decode) + (gcry_ac_mpi_to_os, gcry_ac_mpi_to_os_alloc, gcry_ac_os_to_mpi) + (gcry_ac_data_encrypt_scheme, gcry_ac_data_decrypt_scheme) + (gcry_ac_data_sign_scheme, gcry_ac_data_verify_scheme) + (gcry_ac_io_init_va): Ditto. + (gcry_ac_id_to_name, gcry_ac_name_to_id): Remove as these + deprecated functions are now implemented by visibility.c. + +2007-10-26 Werner Koch + + * rndw32.c: Disable debug flag. + +2007-10-25 Werner Koch + + * rndw32.c: Updated from current cryptlib snapshot and modified + for our use. Removed support from pre NT systems. + (slow_gatherer_windows95): Remove. + (_gcry_rndw32_gather_random): Require an NT platform. + (init_system_rng, read_system_rng, read_mbm_data): New. + (slow_gatherer_windowsNT): Rename to ... + (slow_gatherer): .. this. Read system RNG and MBM. + (registry_poll): New with code factored out from slow_gatherer. + +2007-08-23 Werner Koch + + * random.c (pool_filled_counter): New. + (add_randomness): Use it. + +2007-08-22 Werner Koch + + * rndw32.c, rndunix.c: Switched to LGPL. + +2007-05-30 Werner Koch + + * camellia.h, camellia.c: Replace by new LGPL version and adjusted + camellia.h. + +2007-05-09 Marcus Brinkmann + + * ac.c (_gcry_ac_io_init_va, _gcry_ac_io_write, _gcry_ac_io_read): + Adjust users of gcry_ac_io_t because union is not anonymous + anymore. + +2007-05-02 Werner Koch + + * camellia-glue.c (camellia_setkey, camellia_encrypt) + (camellia_decrypt): Recalculated used stack size in called + functions. + * camellia.h: Redefine external symbols. + +2007-05-02 David Shaw + + * Makefile.am, cipher.c: Add Camellia. + + * camellia-glue.c: New. The necessary glue to interface libgcrypt + to the stock NTT Camellia distribution. + + * camellia.h, camellia.c: The stock NTT Camellia distribution + (GPL). + +2007-04-30 David Shaw + + * cipher.c: Use #if instead of #ifdef as configure defines the + USE_cipher defines as 0 for disabled. + +2007-04-30 Werner Koch + + * rndegd.c (_gcry_rndegd_set_socket_name): New. + +2007-04-30 Marcus Brinkmann + + * ecc.c (ec2os): Fix relocation of short numbers. + + * ecc.c (generate_key): Do not allocate D, which will be allocated + by GEN_K. Remove G. Fix test if g_x, g_y resp. q_x, q_y are + requested. + (_gcry_ecc_generate): Release unneeded members of SK. + * pubkey.c (sexp_to_key): Release NAME. + +2007-04-28 Marcus Brinkmann + + * ac.c (gcry_ac_mpi): Remove member NAME_PROVIDED. + (ac_data_mpi_copy, _gcry_ac_data_set, _gcry_ac_data_get_name) + (_gcry_ac_data_get_index, ac_data_construct): Adjust handling of + NAME accordingly. + +2007-04-20 Werner Koch + + * ecc.c (domain_parms): Add standard brainpool curves. + +2007-04-18 Werner Koch + + * ecc.c (generate_curve): Implement alias mechanism. + + * pubkey.c (sexp_elements_extract_ecc): New. + (sexp_to_key): Add special case for ecc. + (sexp_to_key, sexp_to_sig, sexp_to_enc, gcry_pk_genkey): Replace + name_terminated stuff by a call to _gcry_sexp_nth_string. + (gcry_pk_get_keygrip): Ditto. + +2007-04-16 Werner Koch + + * ecc.c (_gcry_ecc_generate): Renamed DUMMY to CURVE and use it. + +2007-04-13 Marcus Brinkmann + + * ac.c (ac_data_construct): Cast const away to suppress compiler + warning. + + * ecc.c (ecc_generate): Avoid compiler warning for unused argument + DUMMY. + (ecc_verify): Avoid compiler warning for unused arguments CMP and + OPAQUEV. + +2007-04-06 Werner Koch + + * sha1.c (oid_spec_sha1): Add another oid from X9.62. + +2007-03-28 Werner Koch + + * pubkey.c (gcry_pk_genkey): Do not issue misc-key-info if it is + empty. + (gcry_pk_genkey): New parameter "curve". + + * ecc.c: Entirely rewritten with only a few traces of the old + code left. + (_gcry_ecc_generate): New. + (generate_key) New arg NAME. + (generate_curve): Ditto. Return actual number of NBITS. + +2007-03-26 Werner Koch + + * pubkey.c (gcry_pk_genkey): Increase size of SKEY array and add a + runtime bounds check. + +2007-03-23 Werner Koch + + * ecc.c (ecc_ctx_init, ecc_ctx_free, ecc_mod, ecc_mulm): New. + (duplicate_point, sum_points, escalar_mult): Don't use a + copy of base->p. Replaced all mpi_mulm by ecc_mulm so that we can + experiment with different algorithms. + (generate_key, check_secret_key, sign, verify): Initialize a + computation context for use by ecc_mulm. + +2007-03-22 Werner Koch + + * pubkey.c (pubkey_table): Initialize ECC. + * Makefile.am (EXTRA_libcipher_la_SOURCES): Add ecc.c. + * ecc.c: New. Heavily reformatted and changed for use in libgcrypt. + (point_init): New. + (escalar_mult): Make arg R the first arg to be similar to the mpi + functions. + (duplicate_point): Ditto + (sum_points): Ditto + (sign, verify): Remove unneeded copy operations. + (sum_points): Removed memory leaks and optimized some compares. + (verify): Simplified input check. + +2007-03-14 Werner Koch + + * random.c (MASK_LEVEL): Removed macro as it was used only at one + place. Open coded it there. + (gcry_randomize, _gcry_update_random_seed_file) + (_gcry_fast_random_poll): Factor lock code out to .. + (lock_pool, unlock_pool): .. new. + (initialize): Look the pool while allocating. + (read_random_source, do_fast_random_poll): Moved intialization to ... + (initialize): .. here. + (_gcry_enable_quick_random_gen): No more need for initialization. + (is_initialized): Moved this global flag to .. + (initialize): .. here and changed all users to unconditionally call + initialize. + (add_randomness): Remove initalization here. It simply can't + happen. + + * random.c (enum random_origins): Moved to .. + * rand-internal.h: .. here. + * rndunix.c (_gcry_rndunix_gather_random): Use enum in prototype + for ORIGIN and renamed REQUESTOR to ORIGIN. + * rndegd.c (_gcry_rndegd_gather_random): Ditto. + * rndlinux.c (_gcry_rndlinux_gather_random): Ditto. + * rndw32.c (_gcry_rndw32_gather_random): Ditto. + (_gcry_rndw32_gather_random_fast): Ditto. + +2007-03-13 Werner Koch + + * random.c (enum random_origins): New. + (add_randomness): Renamed arg SOURCE to ORIGIN. + (read_random_source): Renamed arg REQUESTOR to ORIGIN. + (getfnc_gather_random): Removed static variable because this + function is only called one and thus we don't need this + optimization. + (_gcry_quick_random_gen): Removed and replaced by.. + (_gcry_enable_quick_random_gen): .. this. It is onlyu used to + enable it and it does not make sense to disable it later. Changed + the only one caller too. + (get_random_bytes): Removed. + (gcry_random_bytes, gcry_random_bytes_secure): Implement in terms + of gcry_randomize. + * random-daemon.c (_gcry_daemon_get_random_bytes): Removed. + +2007-02-23 Werner Koch + + * elgamal.c (generate): Removed unused variable TEMP. + (test_keys): New arg NODIE. + (generate_using_x, _gcry_elg_generate_using_x): New. + * pubkey.c (pubkey_generate): New arg XVALUE and direct call to + the new elgamal generate fucntion. + (gcry_pk_genkey): Parse the new "xvalue" tag. + +2007-02-22 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Handle dynamically allocated + algorithms. Suggested by Neil Dunbar. Fixes bug#596. + + * rndw32.c (_gcry_rndw32_gather_random_fast): Make it return void. + + * cipher.c (gcry_cipher_algo_name): Simplified. + + * random.c: Use the daemon only if compiled with USE_RANDOM_DAEMON. + + * Makefile.am (libcipher_la_SOURCES): Build random-daemon support + only if requested. + +2007-02-21 Werner Koch + + * random.c (rndpool, keypool): Make unsigned. + (mix_pool): Change char* variables to unsigned char*. + (gcry_randomize): Make arg BUFFER a void*. + (gcry_create_nonce): Ditto. + + * rmd160.c (gcry_rmd160_mixblock): Make BUFFER a void*. + (_gcry_rmd160_hash_buffer): Make OUTBUF and BUFFER void*. + * sha1.c (_gcry_sha1_hash_buffer): Ditto. + + * cipher.c (gcry_cipher_encrypt, cry_cipher_decrypt): Change + buffer args to void*. + (gcry_cipher_register): Make ALGORITHM_ID a int *. + + * md.c (md_start_debug): Make SUFFIX a const char*. Use snprintf. + (gcry_md_debug): New. + (gcry_md_ctl): Changed arg BUFFER from unsigned char*. + + * md.c (md_write): Make INBUF a const void*. + (gcry_md_write): Remove needless cast. + * crc.c (crc32_write): Make INBUF a const void* + (update_crc32, crc24rfc2440_write): Ditto. + * sha512.c (sha512_write, transform): Ditto. + * sha256.c (sha256_write, transform): Ditto. + * rmd160.c (rmd160_write, transform): Ditto. + * md5.c (md5_write, transform): Ditto. + * md4.c (md4_write, transform): Ditto. + * sha1.c (sha1_write, transform): Ditto. + + * tiger.c (tiger_write, transform): Ditto. + * whirlpool.c (whirlpool_write, whirlpool_add, transform): Ditto. + + * elgamal.c (elg_names): Change to a const*. + * dsa.c (dsa_names): Ditto. + * rsa.c (rsa_names): Ditto. + * pubkey.c (gcry_pk_lookup_func_name): Make ALIASES a const. + +2007-02-20 Werner Koch + + * rndlinux.c (open_device): Remove unsused arg MINOR. + +2007-01-30 Werner Koch + + * sha256.c (oid_spec_sha256): Add alias from pkcs#1. + * sha512.c (oid_spec_sha512): Ditto. + (oid_spec_sha384): Ditto. + +2006-12-18 Werner Koch + + * rndlinux.c (set_cloexec_flag): New. + (open_device): Set close-on-exit flags. Suggested by Max + Kellermann. Fixes Debian#403613. + + * Makefile.am (AM_CPPFLAGS, AM_CFLAGS): Splitted and merged + Moritz' changes. + (INCLUDES): Removed. + +2006-11-30 Werner Koch + + * serpent.c (byte_swap_32): Remove trailing semicolon. + +2006-11-15 Werner Koch + + * Makefile.am (INCLUDES): Include ../src/ + +2006-11-03 Werner Koch + + * random.c [HAVE_GETTIMEOFDAY]: Included sys/time.h and not + sys/times.h. Reported by Rafaël Carré. + +2006-11-05 Moritz Schulte + + * Makefile.am (AM_CFLAGS): Added -I$(top_builddir)/src so that the + new gcrypt.h is used, not the one installed in the system. + +2006-10-25 Werner Koch + + * primegen.c (prime_generate_internal): Tweaked use of secure + memory and entropy use. Safe unused primes from the pool. Allocate + at least a pool of 30. + (save_pool_prime, get_pool_prime): New. + +2006-10-23 Werner Koch + + * ac.c (_gcry_ac_data_from_sexp): Reset sexp_tmp for failsafe + means. Release sexp_cur if needed. Reported by Dirk Stoecker. + + * pubkey.c (pubkeys_registered_lock): Intialized it. It is not + realy needed because this is a mere initialization to 0 anyway. + Noted by Victor Stinner. + +2006-10-17 Werner Koch + + * dsa.c (_gcry_dsa_generate2): New. + (generate): New arg QBITS. Add sanity checks for reasonable qbits + and nbits. + * pubkey.c (gcry_pk_genkey): Parse an qbits element. + (pubkey_generate): New arg QBITS. Pass it to the DSA generation. + +2006-10-05 Werner Koch + + * md.c (gcry_md_algo_info) : Check that the algo is + available. + +2006-10-04 David Shaw (wk) + + * tiger.c (round): Rename to tiger_round as gcc 4 has a built-in + round function that this conflicts with. + +2006-09-11 Werner Koch + + * rndw32.c (slow_gatherer_windowsNT): While adding data use the + size of the diskPerformance and not its address. Has been fixed in + GnuPG more than a year ago. Noted by Lee Fisher. + +2006-08-30 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Need to allow "ripemd160" here as + this is the canonical name. + +2006-08-29 Hye-Shik Chang (wk) + + * seed.c: New. + +2006-08-03 Werner Koch + + * random-daemon.c (_gcry_daemon_initialize_basics): Don't + initialize the socket. Remove arg SOCKETNAME. + (connect_to_socket): Make sure that daemon is set to -1 on error. + (call_daemon): Initialize the socket on the first call. + (_gcry_daemon_randomize, _gcry_daemon_get_random_bytes) + (_gcry_daemon_create_nonce): New arg SOCKETNAME. + * random.c (initialize): Call new daemon initializator. + (get_random_bytes, gcry_randomize, gcry_create_nonce): Pass socket + name to daemon call and reset allow_daemon on failure. + +2006-07-26 Werner Koch + + * rmd160.c (_gcry_rmd160_mixblock): Add cast to transform call. + + * blowfish.c (selftest): Cast string to usnigned char*. + + * primegen.c (prime_generate_internal): Cast unsigned/char* + mismatch in calling m_out_of_n. + (is_prime): Changed COUNT to unsigned int *. + + * ac.c (_gcry_ac_data_copy): Initialize DATA_MPIS. + + * random.c (gcry_create_nonce): Update the pid after a fork. + Reported by Uoti Urpala. + +2006-07-04 Marcus Brinkmann + + * sha512.c: Fix typo in copyright notice. + +2006-06-21 Werner Koch + + * rsa.c (_gcry_rsa_generate): Replace xcalloc by calloc. + * pubkey.c (gcry_pk_encrypt, gcry_pk_sign): Ditto. + (sexp_to_key, sexp_to_sig, sexp_to_enc, gcry_pk_encrypt) + (gcry_pk_sign, gcry_pk_genkey, gcry_pk_get_keygrip): Ditto. + * md.c (md_copy): Ditto. + +2006-04-22 Moritz Schulte + + * random-daemon.c (_gcry_daemon_initialize_basics): New argument: + SOCKETNAME. Passing on to connect_to_socket() if non-NULL. + (connect_to_socket, writen, readn, call_daemon): New functions. + (_gcry_daemon_randomize, _gcry_daemon_get_random_bytes) + (_gcry_daemon_create_nonce): Call call_daemon(). + (RANDOM_DAEMON_SOCKET): New symbol. + (daemon_socket): New static variable. + + * random.h (_gcry_daemon_initialize_basics): New parameter: + SOCKETNAME. + (_gcry_set_random_daemon_socket): New declaration. + + * random.c (initialize_basics): Pass DAEMON_SOCKET_NAME to + _gcry_daemon_initialize_basics. + (_gcry_set_random_daemon_socket): New function, setting + DAEMON_SOCKET_NAME. + +2006-04-01 Moritz Schulte + + * ac.c (eme_pkcs_v1_5_encode): Use KEY_SIZE directly, no need to + call gcry_ac_key_get_nbits. + (eme_pkcs_v1_5_decode): Likewise. + (ac_es_dencode_prepare_pkcs_v1_5): Fill options_em structure with + key_size. + (_gcry_ac_data_dump, gcry_ac_data_dump): New functions. + (_gcry_ac_data_to_sexp, _gcry_ac_data_from_sexp): More or less + rewritten; changed S-Expression format so that it matches the one + used in pubkey.c. + +2006-03-15 Werner Koch + + * random-daemon.c: New. + * random.c (_gcry_use_random_daemon): New. + (get_random_bytes, gcry_randomize, gcry_create_nonce): Try + diverting to the daemon functions. + +2006-03-14 Werner Koch + + * random.c (lock_seed_file): New. + (read_seed_file, _gcry_update_random_seed_file): Use it. + + * random.c (gcry_create_nonce): Detect a fork and re-seed. + (read_pool): Fixed the fork detection; it used to work only for + multi-threaded processes. + +2006-03-12 Brad Hards (wk) + + * md.c (md_open): Use new variable macpads_Bsize instead of + hardwiring the block size. Changed at all places. + +2006-03-10 Brad Hards (wk, patch 2005-04-22) + + * md.c, sha256.c: Add support for SHA-224. + (sha224_init): New. + +2006-01-18 Brad Hards (wk 2006-03-07) + + * cipher.c (cipher_encrypt, cipher_decrypt, do_ofb_encrypt) + (do_ofb_decrypt, gcry_cipher_open): Implement Output Feedback Mode. + +2005-11-02 Moritz Schulte + + * pubkey.c (gcry_pk_algo_name): Return "?" instead of NULL for + unknown algorithm IDs. + * cipher.c (cipher_algo_to_string): Likewise. + +2005-11-01 Moritz Schulte + + * pubkey.c (gcry_pk_algo_info): Don't forget to break after switch + case. + +2005-09-19 Werner Koch + + * dsa.c (generate): Add preliminary support for 2 and 4 keys. + Return an error code if the key size is not supported. + (_gcry_dsa_generate): Return an error. + +2005-08-22 Werner Koch + + * primegen.c (check_prime): New arg RM_ROUNDS. + (prime_generate_internal): Call it here with 5 rounds as used + before. + (gcry_prime_check): But here with 64 rounds. + (is_prime): Make sure never to use less than 5 rounds. + +2005-04-16 Moritz Schulte + + * ac.c (_gcry_ac_init): New function. + +2005-04-12 Moritz Schulte + + * ac.c (_gcry_ac_io_write, _gcry_ac_io_read): Initialize err to + make the compiler happy. + Always use errno, now that gcry_malloc() is guaranteed to set + errno on failure. + (_gcry_ac_data_to_sexp): Don't forget to goto out after error in + loop. + (_gcry_ac_data_to_sexp): Remove unused variable: mpi_list; + (_gcry_ac_data_to_sexp): Always deallocate sexp_buffer. + (_gcry_ac_data_from_sexp): Don't forget to initialize data_set_new. + (_gcry_ac_data_from_sexp): Handle special case, which is + necessary, since gcry_sexp_nth() does not distinguish between + "element does not exist" and "element is the empty list". + (_gcry_ac_io_init_va): Use assert to make sure that mode and type + are correct. + Use gcry_error_t types where gcry_err_code_t types have been used + before. + +2005-04-11 Moritz Schulte + + * ac.c (_gcry_ac_data_sign_scheme): Don't forget to initialize + buffer. + + * whirlpool.c: New file. + * md.c (digest_table): Add whirlpool. + * Makefile.am (EXTRA_libcipher_la_SOURCES): Added: whirlpool.c. + +2005-03-30 Moritz Schulte + + * ac.c (_gcry_ac_data_from_sexp): Use length of SEXP_CUR, not + length of SEXP; do not forget to set SEXP_TMP to NULL after it has + been released. + + (struct gcry_ac_mpi): New member: name_provided. + (_gcry_ac_data_set): Rename variable `name_final' to `name_cp'; + remove const qualifier; change code to not cast away const + qualifiers; use name_provided member as well. + (_gcry_ac_data_set, _gcry_ac_data_get_name): Use name_provided + member of named mpi structure. + + (gcry_ac_name_to_id): Do not forget to initialize err. + (_gcry_ac_data_get_index): Do not forget to initialize mpi_return; + use gcry_free() instead of free(); remove unnecessary cast; rename + mpi_return and name_return to mpi_cp and name_cp; adjust code. + (ac_data_mpi_copy): Do not cast away const qualifier. + (ac_data_values_destroy): Likewise. + (ac_data_construct): Likewise. + + (ac_data_mpi_copy): Initialize flags to GCRY_AC_FLAG_DEALLOC. + (ac_data_extract): Use GCRY_AC_FLAG_DEALLOC instead of + GCRY_AC_FLAG_COPY. + + (_gcry_ac_io_init_va, _gcry_ac_io_init, gcry_ac_io_init) + (gcry_ac_io_init_va, _gcry_ac_io_write, _gcry_ac_io_read) + (_gcry_ac_io_read_all, _gcry_ac_io_process): New functions. + (gry_ac_em_dencode_t): Use gcry_ac_io_t in prototype instead of + memroy strings directly; adjust encode/decode functions to use io + objects. + (emsa_pkcs_v1_5_encode_data_cb): New function ... + (emsa_pkcs_v1_5_encode): ... use it here. + (ac_data_dencode): Use io objects. + (_gcry_ac_data_encode, _gcry_ac_data_decode, gcry_ac_data_encode) + (gcry_ac_data_decode): Likewise. + (_gcry_ac_data_encrypt_scheme, gcry_ac_data_encrypt_scheme) + (_gcry_ac_data_decrypt_scheme, gcry_ac_data_decrypt_scheme) + (_gcry_ac_data_sign_scheme, gcry_ac_data_sign_scheme) + (_gcry_ac_data_verify_scheme, gcry_ac_data_verify_scheme): + Likewise. + +2005-03-23 Werner Koch + + * rndw32.c (_gcry_rndw32_gather_random_fast): While adding data + use the size of the object and not the one of its address. Bug + reported by Sascha Kiefer. + +2005-03-19 Moritz Schulte + + * cipher.c (do_cbc_encrypt): Be careful to not overwrite data, + which is to be used later on. This happend, in case CTS is + enabled and OUTBUF is equal to INBUF. + +2005-02-25 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Allow for shadowed-private-key. + +2005-02-13 Moritz Schulte + + * serpent.c: Updated from 1.2 branch: + + s/u32_t/u32/ and s/byte_t/byte/. Too match what we have always + used and are using in all other files too + (serpent_test): Moved prototype out of a fucntion. + +2005-02-07 Moritz Schulte + + * ac.c: Major parts rewritten. + * pubkey.c (_gcry_pk_get_elements): New function. + +2004-12-09 Werner Koch + + * serpent.c (serpent_setkey): Moved prototype of serpent_test to + outer scope. + +2004-09-11 Moritz Schulte + + * pubkey.c (pubkey_table): Added an alias entry for GCRY_PK_ELG_E. + +2004-08-23 Moritz Schulte + + * ac.c: Do not include . + * rndegd.c: Likewise. + * sha1.c: Likewise. + * rndunix.c: Likewise. + * rndlinux.c: Likewise. + * rmd160.c: Likewise. + * md5.c: Likewise. + * md4.c: Likewise. + * cipher.c: Likewise. + * crc.c: Likewise. + * blowfish.c: Likewise. + + * pubkey.c (dummy_generate, dummy_check_secret_key) + (dummy_encrypt, dummy_decrypt, dummy_sign, dummy_verify): Return + err code GPG_ERR_NOT_IMPLEMENTED instead of aborting through + log_bug(). + (dummy_get_nbits): Return 0 instead of aborting though log_bug(). + +2004-08-19 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Changed the zero random byte + substituting code to actually do clever things. Thanks to + Matthias Urlichs for noting the implementation problem. + +2004-08-09 Moritz Schulte + + * pubkey.c (gcry_pk_sign): Fixed memory leak; fix provided by + Modestas Vainius. + +2004-07-16 Werner Koch + + * rijndael.c (do_encrypt): Fix alignment problem. Bugs found by + Matthias Urlichs. + (do_decrypt): Ditto. + (keySched, keySched2): Use 2 macros along with unions in the key + schedule context. + +2004-07-14 Moritz Schulte + + * rsa.c (_gcry_rsa_decrypt): Don't forget to free "a". Thanks to + Nikos Mavroyanopoulos. + +2004-05-09 Werner Koch + + * random.c (read_pool): Mix the PID in to better protect after a + fork. + +2004-07-04 Moritz Schulte + + * serpent.c: Use "u32_t" instead of "unsigned long", do not + declare S-Box variables as "register". Fixes failure on + OpenBSD/sparc64, reported by Nikolay Sturm. + +2004-05-07 Werner Koch + + * random.c (initialize): Factored out some code to .. + (initialize_basics): .. new function. + (_gcry_random_initialize): Just call initialize_basics unless the + new arg FULL is set to TRUE. + (_gcry_fast_random_poll): Don't do anything unless the random + system has been really initialized. + +2004-05-07 Moritz Schulte + + * ac.c (gcry_ac_open): Do not dereference NULL pointer. Reported + by Umberto Salsi. + +2004-02-20 Werner Koch + + * primegen.c (check_prime): New args CB_FUNC and CB_ARG; call them + at different stages. Pass these arguments through all callers. + +2004-02-06 Werner Koch + + * des.c: Add a new OID as used by pkcs#12. + + * rfc2268.c: New. Taken from libgcrypt. + * cipher.c: Setup the rfc2268 algorithm. + +2004-01-25 Moritz Schulte + + * primegen.c (prime_generate_internal): Do not forget to free + `q_factor'; fixed by Brieuc Jeunhomme. + (prime_generate_internal): Do not forget to free `prime'. + +2004-01-14 Moritz Schulte + + * ac.c (gcry_ac_data_set): New argument: flags; slightly + rewritten. + (gcry_ac_data_get_name, gcry_ac_data_get_index): Likewise. + (gcry_ac_key_pair_generate): New argument: misc_data; modified + order of arguments. + (gcry_ac_key_test): New argument: handle. + (gcry_ac_key_get_nbits, gcry_ac_key_get_grip): Likewise. + Use GCRY_AC_FLAG_NO_BLINDING instead of + GCRY_AC_DATA_FLAG_NO_BLINDING. + (gcry_ac_mpi): New member: flags. + (gcry_ac_data_search, gcry_ac_data_add): Removed functions. + +2003-12-22 Werner Koch + + * primegen.c (is_prime): Release A2. + +2003-12-19 Werner Koch + + * md.c: Moved a couple of functions down below the data structure + definitions. + (struct gcry_md_context): New field ACTUAL_HANDLE_SIZE. + (md_open): Set it here. + (strcut gcry_md_list): New field ACTUAL_STRUCT_SIZE. + (md_enable): Set it here. + (md_close): Wipe the context memory. + secure memory. + * cipher.c (struct gcry_cipher_handle): New field ACTUAL_HANDLE_SIZE. + (gcry_cipher_open): Set it here. + (gcry_cipher_close): Use it to always wipe out the handle data. + + * ac.c (gcry_ac_open): Make sure HANDLE gets initialized even when + the function is not successful. + (gcry_ac_close): Allow a NULL handle. + (gcry_ac_key_destroy, gcry_ac_key_pair_destroy): Ditto. + (gcry_ac_key_get_grip): Return INV_OBJ on error. + + * primegen.c (prime_generate_internal): Fixed error code for + failed malloc. Replaced the !err if chain by gotos. + (gcry_prime_group_generator): Remove the extra sanity check. + + * md.c: Minor code and comment cleanups. + +2003-12-16 Werner Koch + + * primegen.c (gen_prime): Doc fix. Thanks to Newton Hammet. + +2003-12-11 Werner Koch + + * rndunix.c (slow_poll): Don't use #warning but #error. + + * rndegd.c: Changed indentation. + (my_make_filename): Removd the var_arg cruft becuase we + don't need it here. Changed caller. + + * rndlinux.c: Changed indentation. + (open_device): Remove the superfluous stat call and clarify + comment. + + * rsa.c: Changed indentation. + (secret): Use the standard algorithm if p, q and u are not + available. + (rsa_blind, rsa_unblind): Renamed from _gcry_rsa_blind, + _gcry_rsa_unblind and moved more to the top. + + * md4.c: Changed indentation. Removed unnecessary casts. + * md5.c, rmd160.c, sha1.c, tiger.c: Ditto. + * rijndael.c, twofish.c: Ditto. + * serpent.c: Removed unnecessary casts. + * sha256.c, sha512.c: Ditto. + +2003-12-09 Werner Koch + + * dsa.c: Unified indentation style. + * elgamal.c: Ditto. + * des.c (des_key_schedule): Code beautifications. + * blowfish.c: Changed indentation style. + * cast5.c (do_cast_setkey): Ditto. + + * pubkey.c (gcry_pk_encrypt): Replaced the chain of if(!err) tests + by straightforward gotos. Other cleanups. + (gcry_pk_decrypt): Ditto. + (gcry_pk_sign): Ditto. + (gcry_pk_verify): Ditto. + (gcry_pk_genkey): Ditto. Use strtoul instead of strtol. + (gcry_pk_ctl): Use GPG_ERR_INV_ARG to indicate bad arguments. + +2003-12-07 Werner Koch + + * pubkey.c (gcry_pk_register_default): Undef the helper macro. + (gcry_pk_map_name): Allow NULL for string. + (sexp_to_key): Use memcpy and not strncpy. Use gcry_free and not + free. + (sexp_to_sig): Ditto. + (sexp_to_enc): Ditto. Replaced the chain of if(!err) tests by + straightforward gotos. + +2003-12-05 Werner Koch + + * cipher.c: Documentation cleanups. + (gcry_cipher_mode_from_oid): Allow NULL for STRING. + +2003-12-03 Werner Koch + + * elgamal.c (sign, do_encrypt, gen_k): Make sure that a small K is + only used for encryption. + +2003-11-18 Werner Koch + + * random.h (rndw32_set_dll_name): Removed unused prototype. + + * Makefile.am (EXTRA_DIST): Added Manifest. + +2003-11-11 Werner Koch + + * Manifest: New. + +2003-11-04 Werner Koch + + * md.c (gcry_md_hash_buffer): Use shortcut for SHA1 + * sha1.c (_gcry_sha1_hash_buffer): New. + + * random.c: Reformatted most functions. + (mix_pool): Moved the failsafe_digest from global + scope to here. + (do_fast_random_poll): Use the generic fucntions even if a fast + gathering function has been used. + (read_pool): Detect a fork and retry. + (gcry_randomize, get_random_bytes): Don't distinguish anymore + between weak and strong random. + (gcry_create_nonce): New. + +2003-10-31 Werner Koch + + * rndw32.c (slow_gatherer_windowsNT): Use a plain buffer for the + disk performance values and not the W32 API structure. + + * dsa.c (verify): s/exp/ex/ due to shadowing of a builtin. + * elgamal.c (verify): Ditto. + + * ac.c (gcry_ac_data_get_index): s/index/idx/ + (gcry_ac_data_copy_internal): Remove the cast in _gcry_malloc. + (gcry_ac_data_add): Must use gcry_realloc instead of realloc. + * pubkey.c (sexp_elements_extract): s/index/idx/ as tribute to the + forehackers. + (gcry_pk_encrypt): Removed shadowed definition of I. Reordered + arguments to malloc for clarity. + (gcry_pk_sign, gcry_pk_genkey): Ditto. + * primegen.c (prime_generate_internal): s/random/randomlevel/. + +2003-10-27 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Don't forget to deallocate pkey. + +2003-10-27 Werner Koch + + * random.c (gcry_random_add_bytes): Return if buflen is zero to + avoid gcc warning about unsed parameter. + (MASK_LEVEL): Simplified; does now work for signed and unsigned + w/o warnings. + + * md.c (md_start_debug): Removed the const from SUFFIX, because + this function is called from the control fucntion which does not + require const. + + Prefixed all (pubkey,digest,cipher}_spec_* globale variables with + _gcry_. + + * ac.c (ac_key_identifiers): Made static. + + * random.c (getfnc_gather_random,getfnc_fast_random_poll): Move + prototypes to .. + * rand-internal.h: .. here + * random.c (getfnc_gather_random): Include rndw32 gatherer. + * rndunix.c, rndw32.c, rndegd.c: Include them here. + * rndlinux.c (_gcry_rndlinux_gather_random): Prepend the _gcry_ + prefix. Changed all callers. + * rndegd.c (_gcry_rndegd_gather_random): Likewise. + (_gcry_rndegd_connect_socket): Likewise. + * rndunix.c (_gcry_rndunix_gather_random): Likewise. + (waitpid): Made static. + * rndw32.c: Removed the old and unused winseed.dll cruft. + (_gcry_rndw32_gather_random_fast): Renamed from + gather_random_fast. + (_gcry_rndw32_gather_random): Renamed from gather_random. Note, + that the changes 2003-04-08 somehow got lost. + + * sha512.c (sha512_init, sha384_init): Made static. + + * cipher.c (do_ctr_decrypt): Removed "return" from this void + function. + +2003-10-24 Moritz Schulte + + * serpent.c: Fix an issue on big-endian systems. + + * rndw32.c: Removed IS_MODULE -cruft. + * rndlinux.c (rndlinux_gather_random): Likewise. + +2003-10-10 Werner Koch + + * primegen.c (gen_prime): Bail out if NBITS is less than 16. + (prime_generate_internal): Initialize prime variable to suppress + compiler warning. Check pbits, initialize qbits when passed as + zero. + + * primegen.c (prime_generate_internal): New arg + ALL_FACTORS. Changed all callers. + (gcry_prime_generate): Make the factors arg optional. Request + all_factors. Make sure PRIME is set to NULL even on error. + (gcry_prime_group_generator): New. + (gcry_prime_release_factors): New. + +2003-10-06 Werner Koch + + * primegen.c (gen_prime): Assert that NBITS is never zero, it + would cause a segv. + +2003-09-28 Moritz Schulte + + * ac.c: Include "cipher.h". + +2003-09-27 Moritz Schulte + + * rndegd.c (do_read): Return nread instead of nbytes; thanks to + Michael Caerwyn. + +2003-09-04 Werner Koch + + * pubkey.c (_gcry_pk_aliased_algo_name): New. + * ac.c (gcry_ac_open): Use it here. + + * Makefile.am (EXTRA_libcipher_la_SOURCES): Add serpent.c + +2003-09-02 Moritz Schulte + + * primegen.c (gcry_prime_check, gcry_prime_generate): New + functions. + (prime_generate_internal): New function, based on + _gcry_generate_elg_prime. + (_gcry_generate_elg_prime): Rewritten as a wrapper for + prime_generate_internal. + +2003-08-28 Werner Koch + + * pubkey.c (gcry_pk_encrypt): Don't include the flags list in the + return value. This does not make sense and breaks any programs + parsing the output strictly (e.g. current gpgsm). + (gcry_pk_encrypt): If aliases for the algorithm name exists, take + the first one instead of the regular name to adhere to SPKI + conventions. + (gcry_pk_genkey): Ditto. + (gcry_pk_sign): Ditto. Removed unused KEY_ALGO_NAME. + +2003-08-19 Moritz Schulte + + * cipher.c: Add support for Serpent + * serpent.c: New file. + +2003-08-10 Moritz Schulte + + * rsa.c (_gcry_rsa_blind, _gcry_rsa_unblind): Declare static. + +2003-08-09 Timo Schulz + + * random.c (getfnc_gather_random): Don't check NAME_OF_DEV_RANDOM + two times, but also the NAME_OF_DEV_URANDOM device. + +2003-08-08 Moritz Schulte + + * pubkey.c (sexp_to_enc): Fixed extraction of S-Expression: do not + fail if no `flags' sub S-Expression is found. + +2003-07-27 Werner Koch + + * md.c (gcry_md_lookup_func_oid): Allow for empty OID lists. + +2003-07-23 Moritz Schulte + + * ac.c (gcry_ac_data_construct): New argument: include_flags, only + include `flags' S-expression, if include_flags is true. Adjust + callers. Thanks for triggering a bug caused by `flags' + sub-S-expression where they are not expected to Ralf Schneider. + +2003-07-21 Moritz Schulte + + * pubkey.c (gcry_pk_lookup_func_name): Use new member name + `aliases' instead of `sexp_names'. + + * ac.c (gcry_ac_key_data_get): New function. + + * cipher.c (gcry_cipher_lookup_func_name): Fix return value. + +2003-07-20 Moritz Schulte + + * blowfish.c: Adjusted for new gcry_cipher_spec_t structure. + * cast5.c: Likewise. + * twofish.c: Likewise. + * arcfour.c: Likewise. + * rijndael.c (rijndael_oids, rijndael192_oids, rijndael256_oids): + New variables, adjust for new gcry_cipher_spec_t structure. + * des.c (oids_tripledes): New variable, adjust for new + gcry_cipher_spec_t structure. + + * md.c (oid_table): Removed. + + * tiger.c (oid_spec_tiger): New variable. + (digest_spec_tiger): Adjusted for new gry_md_spec_t structure. + + * sha512.c (oid_spec_sha512): New variable. + (digest_spec_sha512): Adjusted for new gry_md_spec_t structure. + + * sha512.c (oid_spec_sha384): New variable. + (digest_spec_sha384): Adjusted for new gry_md_spec_t structure. + + * sha256.c (oid_spec_sha256): New variable. + (digest_spec_sha256): Adjusted for new gry_md_spec_t structure. + + * sha1.c (oid_spec_sha1): New variable. + (digest_spec_sha1): Adjusted for new gry_md_spec_t structure. + + * rmd160.c (oid_spec_rmd160): New variable. + (digest_spec_rnd160): Adjusted for new gry_md_spec_t structure. + + * md5.c (oid_spec_md5): New variable. + (digest_spec_md5): Adjusted for new gry_md_spec_t structure. + + * md4.c (oid_spec_md4): New variable. + (digest_spec_md4): Adjusted for new gry_md_spec_t structure. + + * crc.c (digest_spec_crc32, digest_spec_crc32_rfc1510, + digest_spec_crc32_rfc2440): Adjusted for new gry_md_spec_t + structure. + +2003-07-19 Moritz Schulte + + * md.c (gcry_md_lookup_func_oid): New function. + (search_oid): New function, copied from cipher.c. + (gcry_md_map_name): Adjust for new search_oid_interface. + + * cipher.c (oid_table): Removed table. + (gcry_cipher_lookup_func_oid): New function. + (search_oid): Rewritten to use the module functions. + (gcry_cipher_map_name): Adjust for new search_oid interface. + (gcry_cipher_mode_from_oid): Likewise. + +2003-07-18 Werner Koch + + * md.c (gcry_md_hash_buffer): Convert ERR to gpg_error_t in + gpg_strerror. + +2003-07-14 Moritz Schulte + + * cipher.c (gcry_cipher_lookup_func_name): Also check the cipher + name aliases, not just the primary name. + (gcry_cipher_map_name): Remove kludge for aliasing Rijndael to + AES. + + * arcfour.c, blowfish.c, cast5.c, des.c, twofish.c: Adjust cipher + specification structures. + + * rijndael.c (rijndael_names, rijndael192_names, + rijndael256_names): New variables, use them in the cipher + specifications. + + * rmd160test.c: Removed file. + + * ac.c, arcfour.c, blowfish.c, cast5.c, cipher.c, des.c, dsa.c, + elgamal.c, md.c, pubkey.c, random.c, rijndael.c, rsa.c, twofish.c: + Used gcry_err* wrappers for libgpg symbols. + + * primegen.c (gen_prime): Correct the order arguments to + extra_check. + +2003-07-12 Moritz Schulte + + * ac.c: Replaced all public occurences of gpg_error_t with + gcry_error_t. + * cipher.c: Likewise. + * md.c: Likewise. + * pubkey.c: Likewise. + * random.c: Likewise. + + * cipher.c: Added support for TWOFISH128. + +2003-07-08 Moritz Schulte + + * ac.c (gcry_ac_data_copy_internal): New function, based on + gcry_ac_data_copy. + (gcry_ac_data_copy): Made public, use gcry_ac_data_copy_internal. + (gcry_ac_key_init): Use gcry_ac_data_copy_internal. + +2003-07-07 Moritz Schulte + + * ac.c (gcry_ac_data_set): Only release old MPI value if it is + different from the new value. Bug reported by Simon Josefsson + . + + * pubkey.c (gcry_pk_list): New function. + * md.c (gcry_md_list): New function. + + * ac.c (gcry_ac_key_pair_generate): Fix calculation of format + string size. + +2003-07-05 Moritz Schulte + + * md.c: Named struct of digest_table `digest_table_entry'. + (digest_table_entry): New member: algorithm; filled in. + (digest_table_entry): Removed unused member: flags. + (gcry_md_register): New argument: algorithm_id, filled in. + (gcry_md_register_default): Used algorithm ID from module + structure. + (gcry_md_map_name): Likewise. + (md_enable): Likewise. + (md_read): Likewise. + (gcry_md_info): Likewise. + + * pubkey.c: Named truct for pubkey_table `pubkey_table_entry'. + (pubkey_table_entry): New member: algorithm; filled in. + (gcry_pk_register_default): Used algorithm ID from pubkey_table. + (gcry_pk_register): New argument: algorithm_id, filled in. + (gcry_pk_map_name): Used algorithm ID from module structure. + (gcry_pk_decrypt): Likewise. + (gcry_pk_encrypt): Likewise. + (gcry_pk_verify): Likewise. + (gcry_pk_sign): Likewise. + (gcry_pk_testkey): Likewise. + (gcry_pk_genkey): Likewise. + (gcry_pk_get_nbits): Likewise. + (sexp_to_key): Removed unused variable: algo. + (sexp_to_sig): Likewise. + + * cipher.c: Named struct for cipher_table `cipher_table_entry'. + (cipher_table_entry): New member: algorithm; filled in. + (gcry_cipher_register_default): Used algorithm ID from + cipher_table. + (gcry_cipher_register): New argument: algorithm_id, filled in. + (gcry_cipher_map_name): Used algorithm ID from module structure. + + * arcfour.c (cipher_spec_arcfour): Removed algorithm ID. + * blowfish.c (cipher_spec_blowfish): Likewise. + * cast5.c (cipher_spec_cast5): Likewise. + * crc.c (digest_spec_crc32): Likewise. + * crc.c (digest_spec_crc32_rfc1510): Likewise. + * crc.c (digest_spec_crc32_rfc2440): Likewise. + * des.c (cipher_spec_des): Likewise. + * des.c (cipher_spec_tripledes): Likewise. + * dsa.c (pubkey_spec_dsa): Likewise. + * elgamal.c (pubkey_spec_elg): Likewise. + * md4.c (digest_spec_md4): Likewise. + * md5.c (digest_spec_md5): Likewise. + * aes.c (cipher_spec_aes): Likewise. + * aes.c (cipher_spec_aes192): Likewise. + * aes.c (cipher_spec_aes256): Likewise. + * rsa.c (pubkey_spec_rsa): Likewise. + * sha1.c (digest_spec_sha1): Likewise. + * sha256.c (digest_spec_sha256): Likewise. + * sha512.c (digest_spec_sha512): Likewise. + * tiger.c (digest_spec_tiger): Likewise. + * twofish.c (cipher_spec_twofish): Likewise. + * twofish.c (cipher_spec_twofish128): Likewise. + + * Makefile.am (EXTRA_libcipher_la_SOURCES): Fix list of source + files; reported by Simon Josefsson . + + * pubkey.c: Replaced all occurences of `id' with `algorithm', + since `id' is a keyword in obj-c. + * md.c: Likewise. + * cipher.c: Likewise. + + * crc.c, md4.c, md5.c, rmd160.c, sha1.c, sha256.c, tiger.c: + Replaced all occurences of gcry_digest_spec_t with gcry_md_spec_t. + + * dsa.c, rsa.c, elgamal.c: Replaced all occurencens of + gcry_pubkey_spec_t with gcry_pk_spec_t. + + * md.c: Replaced all occurences of gcry_digest_spec_t with + gcry_md_spec_t. + (gcry_digest_register_default): Renamed to ... + (gcry_md_register_default): ... this; adjusted callers. + (gcry_digest_lookup_func_name): Renamed to ... + (gcry_md_lookup_func_name): ... this; adjusted callers. + (gcry_digest_lookup_name): Renamed to ... + (gcry_md_lookup_name): ... this; adjusted callers. + (gcry_digest_register): Renamed to ... + (gcry_md_register): ... this. + (gcry_digest_unregister): Renamed to ... + (gcry_md_unregister): ... this. + + * pubkey.c (gcry_pubkey_register): Renamed to ... + (gcry_pk_register): ... this. + (gcry_pubkey_unregister): Renamed to ... + (gcry_pk_unregister): ... this. + Replaced all occurences of gcry_pubkey_spec_t with gcry_pk_spec_t. + (gcry_pubkey_register_default): Renamed to ... + (gcry_pk_register_default): ... this; adjusted callers. + (gcry_pubkey_lookup_func_name): Renamed to ... + (gcry_pk_lookup_func_name): ... this; adjusted callers. + (gcry_pubkey_lookup_name): Renamed to ... + (gcry_pk_lookup_name): ... this; adjusted callers. + + * md.c (gcry_md_hash_buffer): Fix error checking. Thanks to Simon + Josefsson . + +2003-07-04 Moritz Schulte + + * cipher.c (gcry_cipher_list): New function. + +2003-07-01 Moritz Schulte + + * pubkey.c (sexp_to_sig): Accept a `flags' S-expression to be more + consistent with sexp_to_enc. + +2003-06-30 Moritz Schulte + + * Makefile.am (libcipher_la_SOURCES): Added: ac.c. + + * pubkey.c (_gcry_pk_module_lookup): New function. + (_gcry_pk_module_release): New function. + +2003-06-29 Moritz Schulte + + * ac.c: New file. + +2003-06-26 Werner Koch + + * md.c (gcry_md_hash_buffer): Trigger BUG correcly with new API. + +2003-06-19 Werner Koch + + * md.c (gcry_md_is_enabled): Fixed. + +2003-06-18 Werner Koch + + * cipher.c (gcry_cipher_get_algo_keylen): New. + (gcry_cipher_get_algo_blklen): New. + +2003-06-18 Moritz Schulte + + * arcfour.c, cipher.c, blowfish.c, md.c, cast5.c, pubkey.c, crc.c, + des.c, dsa.c, elgamal.c, md4.c, md5.c, random.c, rijndael.c, + rmd160.c, rsa.c, sha1.c, sha256.c, sha512.c, tiger.c, twofish.c: + Replaced older types GcryDigestSpec, GcryCipherSpec and + GcryPubkeySpec with newer types: gcry_digest_spec_t, + gcry_cipher_spec_t and gcry_pubkey_spec_t. + + * md.c (gcry_digest_id_new): Removed function. + (gcry_digest_register): Removed code for generating a new module + ID. + + * pubkey.c (gcry_pubkey_id_new): Removed function. + (gcry_pubkey_register): Removed code for generating a new module + ID. + + * cipher.c, md.c, pubkey.c: Replace old type GcryModule with newer + one: gcry_module_t. + (gcry_cipher_id_new): Removed function. + (gcry_cipher_register): Removed code for generating a new module + ID. + + * cipher.c (gcry_cipher_register): Adjust call to + _gcry_module_add. + (gcry_cipher_register_default): Likewise. + * pubkey.c (gcry_pubkey_register_default): Likewise. + (gcry_pubkey_register): Likewise. + * md.c (gcry_digest_register_default): Likewise. + (gcry_digest_register): Likewise. + + * md.c (gcry_digest_lookup_func_id): Removed function. + (gcry_digest_lookup_id): Likewise. + (gcry_digest_id_new): Use _gcry_module_lookup_id instead of + gcry_digest_lookup_id. + (digest_algo_to_string): Likewise. + (check_digest_algo): Likewise. + (md_enable): Likewise. + (md_digest_length): Likewise. + (md_asn_oid): Likewise. + + * pubkey.c (gcry_pubkey_lookup_id): Removed function. + (gcry_pubkey_lookup_func_id): Likewise. + (gcry_pubkey_id_new): Use _gcry_module_lookup_id instead of + gcry_pubkey_id_new. + (gcry_pk_algo_name): Likewise. + (disable_pubkey_algo): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_get_npkey): Likewise. + (pubkey_get_nskey): Likewise. + (pubkey_get_nsig): Likewise. + (pubkey_get_nenc): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (gcry_pk_algo_info): Likewise. + + * cipher.c (gcry_cipher_lookup_func_id): Removed function. + (gcry_cipher_lookup_id): Likewise. + (cipher_algo_to_string): use _gcry_module_lookup_id instead of + gcry_cipher_lookup_id. + (disable_cipher_algo): Likewise. + (check_cipher_algo): Likewise. + (cipher_get_blocksize): Likewise. + (gcry_cipher_open): Likewise. + (gcry_cipher_id_new): Likewise. + +2003-06-17 Moritz Schulte + + * Makefile.am (GCRYPT_MODULES): Set to @GCRYPT_CIPHERS@, + @GCRYPT_PUBKEY_CIPHERS@, @GCRYPT_DIGESTS@ and @GCRYPT_RANDOM@. + (libcipher_la_DEPENDENCIES): Set to $(GCRYPT_MODULES). + (libcipher_la_LIBADD): Likewise. + (AM_CFLAGS): Added: @GPG_ERROR_CFLAGS@. + (EXTRA_libcipher_la_SOURCES): Added all conditional sources. + + * md.c (md_open): Use _gcry_fast_random_poll instead of + fast_random_poll. + * cipher.c (gcry_cipher_open): Likewise. + + * random.h (fast_random_poll): Removed macro. + + * blowfish.c, md4.c, md5.c, rmd160.c, sha1.c, sha256.c, sha512.c, + tiger.c: Use Autoconf's WORDS_BIGENDIAN instead of our own + BIG_ENDIAN_HOST. + +2003-06-16 Moritz Schulte + + * random.c (getfnc_gather_random): Do not special-case + USE_ALL_RANDOM_MODULES, make it the default. + + * dsa.c: Replace last occurences of old type names with newer + names (i.e. replace MPI with gcry_mpi_t). + * elgamal.c: Likewise. + * primegen.c: Likewise. + * pubkey.c: Likewise. + * rsa.c: Likewise. + +2003-06-14 Moritz Schulte + + * des.c (des_setkey): Add selftest check. + (tripledes_set3keys): Likewise. + (do_tripledes_setkey): Remove selftest check. + (do_des_setkey): Likewise. + +2003-06-11 Moritz Schulte + + * md.c (_gcry_md_init): New function. + * cipher.c (_gcry_cipher_init): New function. + * pubkey.c (_gcry_pk_init): New function. + +2003-06-13 Werner Koch + + * md.c (gcry_md_get_algo): Reverted to old API. This is a + convenience function anyway and error checking is not approriate. + (gcry_md_is_secure): New. + (gcry_md_is_enabled): New. + +2003-06-12 Werner Koch + + * cipher.c (gcry_cipher_open): Make sure HANDLE is set to NULL on + error. + +2003-06-11 Werner Koch + + * md.c (gcry_md_open): Make sure H receives either NULL or an + valid handle. + (gcry_md_copy): Swapped arguments so that it is more in lione with + md_open and most other API fucntions like memcpy (destination + comes first). Make sure HANDLE is set to NULL on error. + + * rijndael.c (do_encrypt): Hack to force correct alignment. It + seems not to be not sufficient, though. We should rework this + fucntions and remove all these ugly casts. Let the compiler + optimize or have an assembler implementation. + +2003-06-09 Moritz Schulte + + * Makefile.am: Removed rules serpent, since that is not commited + yet. + +2003-06-08 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Improve calculation for size of the + format string. + +2003-06-07 Moritz Schulte + + * arcfour.c, bithelp.h, blowfish.c, cast5.c, cipher.c, crc.c, + des.c, dsa.c, elgamal.c, md4.c, md5.c, md.c, primegen.c, pubkey.c, + rand-internal.h, random.c, random.h, rijndael.c, rmd160.c, + rmd160test.c, rmd.h, rndeged.c, rndlinux.c, rndunix.c, rndw32.c, + rsa.c, sha1.c, sha256.c, sha512.c, tiger.c, twofish.c: Edited all + preprocessor instructions to remove whitespace before the '#'. + This is not required by C89, but there are some compilers out + there that don't like it. Replaced any occurence of the now + deprecated type names with the new ones. + +2003-06-04 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Construct an arg_list and use + gcry_sexp_build_array instead of gcry_sexp_build. + (gcry_pk_sign): Likewise. + (gcry_pk_genkey): Likewise. + +2003-06-01 Moritz Schulte + + * dsa.c (_gcry_dsa_generate): Do not check wether the algorithm ID + does indeed belong to DSA. + (_gcry_dsa_sign): Likewise. + (_gcry_dsa_verify): Likewise. + (_gcry_dsa_get_nbits): Likewise. + + * elgamal.c (_gcry_elg_check_secret_key): Do not check wether the + algorithm ID does indeed belong to ElGamal. + (_gcry_elg_encrypt): Likewise. + (_gcry_elg_decrypt): Likewise. + (_gcry_elg_sign): Likewise. + (_gcry_elg_verify): Likewise. + (_gcry_elg_get_nbits): Likewise. + (_gcry_elg_generate): Likewise. + + * rsa.c (_gcry_rsa_generate): Do not check wether the algorithm ID + does indeed belong to RSA. + (_gcry_rsa_encrypt): Likewise. + (_gcry_rsa_decrypt): Likewise. + (_gcry_rsa_sign): Likewise. + (_gcry_rsa_verify): Likewise. + (_gcry_rsa_get_nbits): Likewise. + +2003-05-30 Moritz Schulte + + * md.c (md_get_algo): Return zero in case to algorithm is enabled. + + * md.c (gcry_md_info): Adjusted for new no-errno-API. + (md_final): Likewise. + (gcry_md_get_algo): Likewise. + * pubkey.c (gcry_pk_get_keygrip): Likewise. + (gcry_pk_ctl): Likewise. + (gcry_pk_algo_info): Likewise. + * des.c (selftest): Likewise. + +2003-05-29 Moritz Schulte + + * md.c (md_enable): Do not forget to release module on error. + (gcry_md_open): Adjusted for new no-errno-API. + (md_open): Likewise. + (md_copy): Likewise. + (gcry_md_copy): Likewise. + (gcry_md_setkey): Likewise. + (gcry_md_algo_info): Likewise. + + * cipher.c (gcry_cipher_open): Adjusted for new no-errno-API and + also fixed a locking bug. + (gcry_cipher_encrypt): Adjusted for new no-errno-API. + (gcry_cipher_decrypt): Likewise. + (gcry_cipher_ctl): Likewise. + (gcry_cipher_info): Likewise. + (gcry_cipher_algo_info): Likewise. + +2003-05-28 Moritz Schulte + + * md.c (md_enable): Adjusted for libgpg-error. + (gcry_md_enable): Likewise. + (gcry_digest_register_default): Likewise. + (gcry_digest_register): Likewise. + (check_digest_algo): Likewise. + (prepare_macpads): Likewise. + (gcry_md_setkey): Likewise. + (gcry_md_ctl): Likewise. + (gcry_md_get): Likewise. + (gcry_md_algo_info): Likewise. + (gcry_md_info): Likewise. + * dsa.c (_gcry_dsa_generate): Likewise. + (_gcry_dsa_check_secret_key): Likewise. + (_gcry_dsa_sign): Likewie. + (_gcry_dsa_verify): Likewise. + * twofish.c (do_twofish_setkey): Likewise. + (twofish_setkey): Likewise. + * cipher.c (gcry_cipher_register): Likewise. + +2003-05-25 Moritz Schulte + + * rijndael.c (do_setkey): Adjusted for libgpg-error. + (rijndael_setkey): Likewise. + * random.c (gcry_random_add_bytes): Likewise. + * elgamal.c (_gcry_elg_generate): Likewise. + (_gcry_elg_check_secret_key): Likewise. + (_gcry_elg_encrypt): Likewise. + (_gcry_elg_decrypt): Likewise. + (_gcry_elg_sign): Likewise. + (_gcry_elg_verify): Likewise. + * rsa.c (_gcry_rsa_generate): Likewise. + (_gcry_rsa_check_secret_key): Likewise. + (_gcry_rsa_encrypt): Likewise. + (_gcry_rsa_decrypt): Likewise. + (_gcry_rsa_sign): Likewise. + (_gcry_rsa_verify): Likewise. + * pubkey.c (dummy_generate, dummy_check_secret_key, dummy_encrypt, + dummy_decrypt, dummy_sign, dummy_verify): Likewise. + (gcry_pubkey_register): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (sexp_elements_extract): Likewise. + (sexp_to_key): Likewise. + (sexp_to_sig): Likewise. + (sexp_to_enc): Likewise. + (sexp_data_to_mpi): Likewise. + (gcry_pk_encrypt): Likewise. + (gcry_pk_decrypt): Likewise. + (gcry_pk_sign): Likewise. + (gcry_pk_verify): Likewise. + (gcry_pk_testkey): Likewise. + (gcry_pk_genkey): Likewise. + (gcry_pk_ctl): Likewise. + * cipher.c (dummy_setkey): Likewise. + (check_cipher_algo): Likewise. + (gcry_cipher_open): Likewise. + (cipher_setkey): Likewise. + (gcry_cipher_ctl): Likewise. + (cipher_encrypt): Likewise. + (gcry_cipher_encrypt): Likewise. + (cipher_decrypt): Likewise. + (gcry_cipher_decrypt): Likewise. + (gcry_cipher_info): Likewise. + (gcry_cipher_algo_info): Likewise. + * cast5.c (cast_setkey): Likewise. + (do_cast_setkey): Likewise. + * arcfour.c (arcfour_setkey): Likewise. + (do_arcfour_setkey): Likewise. + * blowfish.c (do_bf_setkey): Likewise. + (bf_setkey): Likewise. + * des.c (do_des_setkey): Likewise. + (do_tripledes_setkey): Likewise. + +2003-05-22 Moritz Schulte + + * tiger.c: Merged code ussing the U64_C macro from GnuPG. + + * sha512.c: Likewise. + +2003-05-17 Moritz Schulte + + * pubkey.c (gcry_pk_genkey): Fix type: acquire a lock, instead of + releasing it. + +2003-05-11 Moritz Schulte + + * pubkey.c (gcry_pk_testkey): Call REGISTER_DEFAULT_CIPHERS. + (gcry_pk_ctl): Likewise. + +2003-04-27 Moritz Schulte + + * pubkey.c (gcry_pk_genkey): Release sexp after extracted data has + been used. + + * md.c (gcry_md_get_algo_dlen): Simplified, simply call + md_digest_length to do the job. + + * des.c (do_des_setkey): Check for selftest failure not only + during initialization. + (do_tripledes_setkey): Include check for selftest failure. + + * pubkey.c (gcry_pubkey_register_default): New macro + `pubkey_use_dummy', use it. + + * elgamal.c (elg_names): New variable. + (pubkey_spec_elg): Include elg_names. + + * dsa.c (dsa_names): New variable. + (pubkey_spec_dsa): Include dsa_names. + + * rsa.c (rsa_names): New variable. + (pubkey_spec_rsa): Include rsa_names. + + * pubkey.c (gcry_pubkey_lookup_func_name): Compare name also with + the names listed in `sexp_names'. + +2003-04-24 Moritz Schulte + + * pubkey.c (sexp_to_key): New variables: module, pubkey. Adjusted + to new module interface. + (sexp_to_key): Changend type of argument `retalgo' from `int *' to + `GcryModule **'. Adjusted all callers. Removed argument: + r_algotblidx. + (sexp_to_sig): Changend type of argument `retalgo' from `int *' to + `GcryModule **'. Adjusted all callers. + (sexp_to_enc): Likewise. + + (pubkey_get_npkey, pubkey_get_nskey, pubkey_get_nsig, + pubkey_get_nenc): Use strlen to find out the number. + + * rsa.c: Adjust pubkey_spec_rsa to new internal interface. + * dsa.c: Likewise. + * elgamal.c: Likewise. + +2003-04-17 Moritz Schulte + + * pubkey.c (sexp_elements_extract): New function. + * pubkey.c (sexp_to_key): Removed variable `idx', added `err', use + sexp_elements_extract. + (sexp_to_sig): Likewise. + (sexp_to_enc): Likewise. + + * pubkey.c: Terminate list correctly. + * md.c: Include sha512/sha384 in digest_table. + +2003-04-16 Moritz Schulte + + * Makefile.am: Include support for sha512.c. + + * sha512.c: New file, merged from GnuPG, with few modifications + for libgcrypt. + + * rand-internal.h: Removed declarations for constructor functions. + + * md.c (md_copy): Call _gcry_module_use for incrementing the usage + counter of the digest modules. + + * rsa.c: Do not include "rsa.h". + * dsa.c: Do not include "dsa.h". + * elgamal.c: Do not include "elgamal.h". + * des.c: Do not include "des.h". + * cast5.c: Do not include "cast5.h". + * blowfish.c: Do not include "blowfish.h". + * arcfour.c: Do not include "arcfour.h". + + * Makefile.am (libcipher_la_DEPENDENCIES): Removed. + (libcipher_la_LIBADD): Removed. + Use Automake conditionals for conditional compilation. + +2003-04-13 Moritz Schulte + + * cipher.c (gcry_cipher_open): Call REGISTER_DEFAULT_CIPHERS. + + * md.c (gcry_md_list): New member: module. + (md_enable): New variable: module, changed use of module and + digest. + (md_enable): Initialize member: module. + (md_close): Call _gcry_module_release. + + * cipher.c (gcry_cipher_open): New variable: module, changed use of + module and cipher. + (struct gcry_cipher_handle): New member: module. + (gcry_cipher_open): Initialize member: module. + (gcry_cipher_close): Call _gcry_module_release. + +2003-04-09 Moritz Schulte + + * cipher.c: Include "ath.h". + * md.c: Likewise. + * pubkey.c: Likewise. + + * cipher.c (ciphers_registered_lock): New variable. + * md.c (digests_registered_lock): New variable. + * pubkey.c (pubkeys_registered_lock): New variable. + + * rndlinux.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndlinux_constructor): Removed function. + + * rndegd.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndegd_constructor): Removed function. + + * rndunix.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndunix_constructor): Removed function. + + * rndw32.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndw32_constructor): Removed function. + + * rndegd.c (rndegd_connect_socket): Simplify code for creating the + egd socket address. + (rndegd_connect_socket): Call log_fatal use instead of + g10_log_fatal. + (egd_gather_random): Renamed to ... + (rndegd_gather_random): ... here. + +2003-04-08 Moritz Schulte + + * rndlinux.c: Do not include "dynload.h". + * rndunix.c: Likewise. + * rndw32.c: Likewise. + + * rndegd.c (rndegd_connect_socket): Factored out from ... + (egd_gather_random): here; call it. + (egd_socket): New variable. + (egd_gather_random): Initialize fd with egd_socket, do not declare + fd static. + (do_read): Merged few changes from GnuPG. FIXME - not finished? + Do not include "dynload.h". + + * rndw32.c (gather_random): Renamed to rndw32_gather_random, do + not declare static. + (gather_random_fast): Renamed to rndw32_gather_random_fast, do not + declare static. + + * rndunix.c (gather_random): Renamed to rndunix_gather_random, do + not declare static. + * rndegd.c (gather_random): Renamed to rndegd_gather_random, do + not declare static. + * rndlinux.c (gather_random): Renamed to rndlinux_gather_random, + do not declare static. + +2003-04-07 Moritz Schulte + + * Makefile.am (libcipher_la_SOURCES): Removed construct.c. + (libcipher_la_SOURCES): Added sha1.c, sha256.c, rmd160.c, md4.c, + md5.c, tiger.c and crc.c + (EXTRA_PROGRAMS): Removed sha1, sha256, rmd160, md4, md5, tiger + and crc. Removed definitions: EXTRA_md4_SOURCES, + EXTRA_md5_SOURCES, EXTRA_rmd160_SOURCES, EXTRA_sha1_SOURCES, + EXTRA_sha256_SOURCES, EXTRA_tiger_SOURCES and EXTRA_crc_SOURCES, + BUILT_SOURCES, DISTCLEANFILES. + + * pubkey.c: Do not include "elgamal.h", "dsa.h" and "rsa.h". + + * Makefile.am (libcipher_la_SOURCES): Removed rsa.h, elgamal.h, + dsa.h, des.h, cast5.h, arcfour.h and blowfish.h. + + * rsa.h: Removed file. + * elgamal.h: Removed file. + * dsa.h: Removed file. + * des.h: Removed file. + * cast5.h: Removed file. + * arcfour.h: Removed file. + * blowfish.h: Removed file. + + * Makefile.am (libcipher_la_SOURCES): Removed dynload.c and + dynload.h. + + * rsa.c (pubkey_spec_rsa): New variable. + * dsa.c (pubkey_spec_rsa): New variable. + * elgamal.c (pubkey_spec_elg): New variable. + + * rsa.c (_gcry_rsa_get_info): Removed function. + * elgamal.c (_gcry_elg_get_info): Removed function. + * dsa.c (_gcry_dsa_get_info): Removed function. + + * tiger.c (tiger_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_tiger_constructor): Removed function. + + * sha1.c (sha1_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_sha1_constructor): Removed function. + + * sha256.c (sha256_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_sha256_constructor): Removed function. + + * rmd160.c (rmd160_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rmd160_constructor): Removed function. + + * md5.c (md5_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_md5_constructor): Removed function. + + * md4.c (md4_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_md4_constructor): Removed function. + + * crc.c (crc_get_info): Removed function. + + * arcfour.c (do_arcfour_setkey): Changed type of context argument + to `void *', added local variable for cast, adjusted callers. + (arcfour_setkey): Likewise. + (encrypt_stream): Likewise. + * cast5.c (cast_setkey): Likewise. + (encrypt_block): Likewise. + * rijndael.c (rijndael_setkey): Likewise. + (rijndael_encrypt): Likewise. + (rijndael_decrypt): Likewise. + * twofish.c (twofish_setkey): Likewise. + (twofish_encrypt): Likewise. + (twofish_decrypt): Likewise. + * des.c (do_des_setkey): Likewise. + (do_des_encrypt): Likewise. + (do_des_encrypt): Likewise. + (do_tripledes_encrypt): Likewise. + (do_tripledes_encrypt): Likewise. + * blowfish.c (bf_setkey: Likewise. + (encrypt_block): Likewise. + (decrypt_block): Likewise. + + * arcfour.c (encrypt_stream): Likewise. + + * rijndael.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func) Removed function. + + * twofish.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func) Removed function. + + * cast5.c (CIPHER_ALGO_CAST5): Removed. + + * blowfish.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Removed macros. + (CIPHER_ALGO_BLOWFISH): Removed symbol. + * cast5.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Likewise. + * des.c (selftest_failed): Removed. + (initialized): New variable. + (do_des_setkey): Run selftest, if not yet done. + (FNCCAST_SETKEY, FNCCAST_CRYPT): Removed macros. + + * arcfour.c (_gcry_arcfour_get_info): Removed function. + * blowfish.c (_gcry_blowfish_get_info): Removed function. + * cast5.c (_gcry_cast5_get_info): Removed function. + * des.c (_gcry_des_get_info): Removed function. + * rijndael.c (_gcry_rijndael_get_info): Removed function. + * twofish.c (_gcry_twofish_get_info): Removed function. + + * arcfour.c (cipher_spec_arcfour): New variable. + * twofish.c (cipher_spec_twofish, cipher_spec_twofish128): New + variables. + * rijndael.c (cipher_spec_aes, cipher_spec_aes192, + cipher_spec256): New variables. + * des.c (cipher_spec_des, cipher_spec_tripledes): New variables. + * cast5.c (cipher_spec_cast5): New variable. + * blowfish.c (cipher_spec_blowfish): Likewise. + + * twofish.c: Do not include "dynload.h". + * rijndael.c: Likewise. + * des.c: Likewise. + * cast5.c: Likewise. + * blowfish.c: Likewise. + * cipher.c: Likewise. + * crc.c: Likewise. + * md4.c: Likewise. + * md5.c: Likewise. + * md.c: Likewise. + * pubkey.c: Likewise. + * rijndael.c: Likewise. + * sha1.c: Likewise. + * sha256.c: Likewise. + + * arcfour.c: Include "cipher.h". + * twofish.c: Likewise. + * rijndael.c: Likewise. + * des.c: Likewise. + * cast5.c: Likewise. + * blowfish.c: Likewise. + + * twofish.c (twofish_setkey): Declared argument `key' const. + (twofish_encrypt): Declared argument `inbuf' const. + (twofish_decrypt): Likewise. + + * rijndael.c (rijndael_setkey): Declared argument `key' const. + (rijndael_encrypt): Declared argument `inbuf' const. + (rijndael_decrypt): Likewise. + + * des.c (do_des_setkey): Declared argument `key' const. + (do_tripledes_setkey): Likewise. + (do_des_encrypt): Declared argument `inbuf' const. + (do_des_decrypt): Likewise. + (do_tripledes_encrypt): Likewise. + (do_tripledes_decrypt): Likewise. + + * cast5.c (encrypt_block): Declared argument `inbuf' const. + (decrypt_block): Likewise. + (cast_setkey): Declared argument `key' const. + + * blowfish.c (do_bf_setkey): Declared argument `key' const. + (encrypt_block): Declared argument `inbuf' const. + (encrypt_block): Likewise. + + + + * cipher.c: Remove CIPHER_ALGO_DUMMY related code. + Removed struct cipher_table_s. + Changed definition of cipher_table. + Removed definition of disabled_algos. + (ciphers_registered, default_ciphers_registered): New variables. + (REGISTER_DEFAULT_CIPHERS): New macro. + (dummy_setkey): Declared argument `key' const. + (dummy_encrypt_block): Declared argument `inbuf' const. + (dummy_encrypt_block): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_setkey): Use `unsigned char' instead of `byte'. + (dummy_encrypt_block): Likewise. + (dummy_decrypt_block): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_decrypt_stream): Likewise. + (gcry_cipher_register_default): New function. + (gcry_cipher_lookup_func_id): New function. + (gcry_cipher_lookup_func_name): New function. + (gcry_cipher_lookup_id): New function. + (gcry_cipher_lookup_name): New function. + (gcry_cipher_id_new): New function. + (gcry_cipher_register): New function. + (gcry_cipher_unregister): New function. + (setup_cipher_table): Removed function. + (load_cipher_modules): Removed function. + (gcry_cipher_map_name): Adjusted to use new module management. + (cipher_algo_to_string): Likewise. + (disable_cipher_algo): Likewise. + (check_cipher_algo): Likewise. + (cipher_get_keylen): Likewise. + (cipher_get_blocksize): Likewise. + (gcry_cipher_open): Likewise. + (struct gcry_cipher_handle): Replaced members algo, algo_index, + blocksize, setkey, encrypt, decrypt, stencrypt, stdecrypt with one + member: cipher. + (gcry_cipher_open): Adjusted code for new handle structure. + (cipher_setkey): Likewise. + (cipher_setiv): Likewise. + (cipher_reset): Likewise. + (do_ecb_encrypt): Likewise. + (do_ecb_decrypt): Likewise. + (do_cbc_encrypt): Likewise. + (do_cbc_decrypt): Likewise. + (do_cfb_encrypt): Likewise. + (do_cfb_decrypt): Likewise. + (do_ctr_encrypt): Likewise. + (cipher_encrypt): Likewise. + (gcry_cipher_encrypt): Likewise. + (cipher_decrypt): Likewise. + (gcry_cipher_decrypt): Likewise. + (cipher_sync): Likewise. + (gcry_cipher_ctl): Likewise. + + * pubkey.c: Removed struct pubkey_table_s. + Changed definition of pubkey_table. + Removed definition of disabled_algos. + (pubkeys_registered, default_pubkeys_registered): New variables. + (REGISTER_DEFAULT_PUBKEYS): New macro. + (setup_pubkey_table): Removed function. + (load_pubkey_modules): Removed function. + (gcry_pubkey_register_default): New function. + (gcry_pubkey_lookup_func_id): New function. + (gcry_pubkey_lookup_func_name): New function. + (gcry_pubkey_lookup_id): New function. + (gcry_pubkey_lookup_name): New function. + (gcry_pubkey_id_new): New function. + (gcry_pubkey_register): New function. + (gcry_pubkey_unregister): New function. + (gcry_pk_map_name): Adjusted to use new module management. + (gcry_pk_algo_name): Likewise. + (disable_pubkey_algo): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_get_npkey): Likewise. + (pubkey_get_nskey): Likewise. + (pubkey_get_nsig): Likewise. + (pubkey_get_nenc): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (gcry_pk_get_nbits): Likewise. + (gcry_pk_algo_info): Likewise. + + * md.c: Removed struct md_digest_list_s. + (digest_list): Changed definition. + (digests_registered, default_digests_registered): New variables. + (REGISTER_DEFAULT_DIGESTS): New macro. + (new_list_item): Removed function. + (setup_md_table): Removed function. + (load_digest_module): Removed function. + (gcry_digest_register_default): New function. + (gcry_digest_lookup_func_id): New function. + (gcry_digest_lookup_func_name): New function. + (gcry_digest_lookup_id): New function. + (gcry_digest_lookup_name): New function. + (gcry_digest_id_new): New function. + (gcry_digest_register): New function. + (gcry_digest_unregister): New function. + (GcryDigestEntry): New type. + (struct gcry_md_context): Adjusted type of `list'. + (gcry_md_map_name): Adjusted to use new module management. + (digest_algo_to_string): Likewise. + (check_digest_algo): Likewise. + (md_enable): Likewise. + (md_digest_length): Likewise. + (md_asn_oid): Likewise. + +2003-04-07 Moritz Schulte + + * pubkey.c: Replaced PUBKEY_ALGO_DSA with GCRY_PK_DSA, + PUBKEY_ALGO_RSA with GCRY_PK_RSA and PUBKEY_ALGO_ELGAMAL with + GCRY_PK_ELG. + + * dsa.c: Replaced PUBKEY_ALGO_DSA with GCRY_PK_DSA. + +2003-04-01 Moritz Schulte + + * des.c: Removed checks for GCRY_CIPHER_3DES and GCRY_CIPHER_DES. + +2003-03-31 Moritz Schulte + + * tiger.c (tiger_get_info): Do not declare static. + * sha256.c (sha256_get_info): Likewise. + * sha1.c (sha1_get_info): Likewise. + * rmd160.c (rmd160_get_info): Likewise. + * md5.c (md5_get_info): Likewise. + * md4.c (md4_get_info): Likewise. + * crc.c (crc_get_info): Likewise. + + * md.c (load_digest_module): Call setup_md_table during + initialization. + (new_list_item): Link new element into digest_list. + + * cipher.c (do_ctr_decrypt): Made do_ctr_encrypt act as a wrapper + for do_ctr_encrypt, since these functions are identical. + +2003-03-30 Simon Josefsson + + * cipher.c (struct gcry_cipher_handle): Add counter field. + (gcry_cipher_open): Add CTR. + (cipher_reset): Clear counter field. + (do_ctr_encrypt, do_ctr_decrypt): New functions. + (cipher_encrypt, cipher_decrypt): Call CTR functions. + (gcry_cipher_ctl): Add SET_CTR to set counter. + +2003-03-30 Moritz Schulte + + * rsa.c (_gcry_rsa_blind): New function. + (_gcry_rsa_unblind): New function. + (_gcry_rsa_decrypt): Use _gcry_rsa_blind and _gcry_rsa_decrypt. + +2003-03-26 Moritz Schulte + + * dynload.c (_gcry_enum_gnupgext_pubkeys): Adjust `encrypt' and + `decrypt' function arguments. + (_gcry_enum_gnupgext_pubkeys): Likewise. + * dynload.h: Likewise. + + * pubkey.c (dummy_decrypt): Add argument: int flags. + (dummy_encrypt): Likewise. + + * elgamal.c (_gcry_elg_encrypt): Add argument: int flags. + (_gcry_elg_decrypt): Likewise. + + * rsa.c (_gcry_rsa_encrypt): Add argument: int flags. + (_gcry_rsa_decrypt): Likewise. + + * pubkey.c: Add `flags' argument to members `encrypt' and + `decrypt' of struct `pubkey_table_s'. + + * rsa.h: Add `flags' argument to function declarations. + * elgamal.h: Likewise. + + * pubkey.c (sexp_data_to_mpi): New variable: int parsed_flags. + (sexp_data_to_mpi): Set `parsed_flags'. + (sexp_data_to_mpi): New argument: int *flags. + (gcry_pk_encrypt): New variable: int flags. + (gcry_pk_encrypt): Pass `flags' to pubkey_encrypt. + (pubkey_encrypt): New variable: int flags. + (pubkey_encrypt): Pass `flags' to pubkey encrypt function. + (pubkey_decrypt): Likewise. + (pubkey_decrypt): Pass `flags' to pubkey encrypt function. + (gcry_pk_encrypt): Include `flags' s-exp in return list. + (sexp_to_enc): New argument: int *flags. + (gcry_pk_decrypt): New variable: int flags. + (gcry_pk_decrypt): Pass `flags' to pubkey_decrypt. + (sexp_to_enc): New variable: int parsed_flags. + (sexp_to_enc): Set `parsed_flags'. + +2003-03-22 Simon Josefsson + + * cipher.c (gcry_cipher_open, do_cbc_encrypt) + (gcry_cipher_encrypt): Support GCRY_CIPHER_CBC_MAC. + (gcry_cipher_ctl): Support GCRYCTL_SET_CBC_MAC. + +2003-03-19 Werner Koch + + * primegen.c (gen_prime): New args EXTRA_CHECK and EXTRA_CHECK_ARG + to allow for a user callback. Changed all callers. + (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Ditto, pass them to gen_prime. + * rsa.c (check_exponent): New. + (generate): Use a callback to ensure that a given exponent is + actually generated. + +2003-03-12 Moritz Schulte + + * primegen.c: Initialize `no_of_small_prime_numbers' statically. + (gen_prime): Remove calculation of `no_of_small_prime_numbers'. + +2003-03-03 Moritz Schulte + + * md.c (gcry_md_ctl): Rewritten to use same style like the other + functions dispatchers. + +2003-03-02 Moritz Schulte + + * cipher.c (struct gcry_cipher_handle): New member: algo_index. + (gcry_cipher_open): Allocate memory for two cipher contexts. + Initialize algo_index. + (cipher_setkey): Duplicate context into reserved memory. + (cipher_reset): New function, which resets the context and clear + the IV. + (gcry_cipher_ctl): Call cipher_reset. + +2003-02-23 Moritz Schulte + + * cipher.c: Remove (bogus) `digitp' macro definition. + * md.c: Likewise. + + * blowfish.c (burn_stack): Removed. + * arcfour.c (burn_stack): Likewise. + * cast5.c (burn_stack): Likewise. + * des.c (burn_stack): Likewise. + * md4.c (burn_stack): Likewise. + * md5.c (burn_stack): Likewise. + * random.c (burn_stack): Likewise. + * rijndael.c (burn_stack): Likewise. + * rmd160.c (burn_stack): Likewise. + * sha1.c (burn_stack): Likewise. + * sha256.c (burn_stack): Likewise. + * tiger.c (burn_stack): Likewise. + * twofish.c (burn_stack): Likewise. + + * blowfish.c: Changed all occurences of burn_stack to + _gcry_burn_stack. + * arcfour.c: Likewise. + * cast5.c: Likewise. + * des.c: Likewise. + * md4.c: Likewise. + * md5.c: Likewise. + * random.c: Likewise. + * rijndael.c: Likewise. + * rmd160.c: Likewise. + * sha1.c: Likewise. + * sha256.c: Likewise. + * tiger.c: Likewise. + * twofish.c: Likewise. + + * arcfour.c (_gcry_arcfour_get_info): Use GCRY_CIPHER_ARCFOUR + instead of hard-coded value `301'. + +2003-01-24 Werner Koch + + * random.c (_gcry_register_random_progress): New. + (_gcry_random_progress): New. + + * rndlinux.c (gather_random): Call the random progress function. + +2003-01-23 Werner Koch + + * rsa.c (generate): New arg USE_E to request a specific public + exponent. + (_gcry_rsa_generate): Ditto. + * elgamal.c (_gcry_elg_generate): Must add an dummy argument + instead of USE_E. + * dsa.c (_gcry_dsa_generate): Ditto. + * pubkey.c (dummy_generate): Ditto. + (pubkey_generate): Add USE_E arg and pass it down. + (gcry_pk_genkey): Detect "rsa-use-e" parameter and pass it to generate. + + * pubkey.c (sexp_to_enc): New arg RET_MODERN. + (gcry_pk_decrypt): Make use of it to return a real S-expression. + Return better error codes. + (gcry_pk_verify): Return better error codes. + +2003-01-21 Werner Koch + + * random.c (gcry_random_add_bytes): Add QUALITY argument, let + function return an error code and disable its core for now. + +2003-01-21 Timo Schulz + + * random.c (gcry_random_add_bytes): New. Function to add external + random to the pool. + +2003-01-20 Simon Josefsson + + * crc.c: New. + * Makefile.am (EXTRA_PROGRAMS, EXTRA_crc_SOURCES): Add crc.c. + * md.c (gcry_md_get_algo_dlen): Add values for CRC. + +2003-01-20 Werner Koch + + * sha256.c: New. + * bithelp.h (ror): New. + * Makfile.am: Add sha256.c. + * md.c (oid_table): Add values for SHA256 et al. + (gcry_md_get_algo_dlen): Likewise + +2003-01-20 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Implemented keygrips for DSA + and ElGamal. + +2003-01-17 Werner Koch + + * cipher.c (gcry_cipher_encrypt): Reworked so that the output will + never contain the plaintext even if the caller did not checked the + return value. + + * md.c (gcry_md_get_algo): Changed error code to GCRYERR_GENERAL + because we don't have an invalid md algo but no algorithm enabled. + + * pubkey.c (gcry_pk_genkey): Changed error code for bounds check + of table parameters to GCRYERR_INTERNAL. + + * md.c (gcry_md_open): Partly reverted Timo's change from + 2002-10-10 by removing the check for the algorithm. An algorithm + of 0 is allowed and anyway we should not double check it or check + it using a different function. Also fixed the flags check. + + * pubkey.c (gcry_pk_encrypt): Make sure that R_CIPH points to NULL + on error. + (gcry_pk_decrypt): Ditto for R_PLAIN. + (gcry_pk_sign): Ditto for R_SIG. + (gcry_pk_genkey): Ditto for R_KEY. + +2003-01-16 Werner Koch + + * md.c (gcry_md_write): Changed 2nd argument type to void*. + (gcry_md_hash_buffer): Changed type of boths buffers to void*. + (gcry_md_setkey): Changed 2nd argument type to void*. + +2003-01-15 Werner Koch + + * pubkey.c (sexp_data_to_mpi): New. This handles pkcs1 padding. + (gcry_pk_sign, gcry_pk_verify): Use it here. + (gcry_pk_encrypt): And here. + (pubkey_verify): Add debug code. + (sexp_to_enc): Handle flags in the input and return the pkcs1 flag + in a new parameter. + (gcry_pk_decrypt): Prepare for future pkcs1 handling. + +2002-12-19 Werner Koch + + * random.c (_gcry_random_initialize): New. + +2002-12-16 Werner Koch + + * cipher.c: Added a Teletrust specific OID for 3DES. + +2002-12-12 Werner Koch + + * md.c: Added another oddball OIW OID (sha-1WithRSAEncryption). + +2002-11-23 Werner Koch + + * md.c (load_digest_module): Enlarged checked_algos bitmap. + * md4.c (func_table): Fixed entry for md4. + Both by Simon Josephson. + (transform): Copy data to get the alignment straight. Tested only + on i386. + +2002-11-10 Simon Josefsson + + * cipher.c (gcry_cipher_open): Don't reject CTS flag. + (do_cbc_encrypt, do_cbc_decrypt, cipher_encrypt) + (gcry_cipher_encrypt, cipher_decrypt) + (gcry_cipher_decrypt): Support CTS flag. + (gcry_cipher_ctl): Toggle CTS flag. + +2002-11-10 Werner Koch + + * md4.c: New. By Simon Josefsson. + * Makefile.am (EXTRA_PROGRAMS): Add md4.c. + * md.c (oid_table,gcry_md_get_algo_dlen): MD4 support. + +2002-10-14 Werner Koch + + * arcfour.c (do_encrypt_stream): Don't use increment op when + assigning to the same variable. + +2002-10-10 Timo Schulz + + * pubkey.c (gcry_pk_genkey): Check boundaries. + + * md.c (gcry_md_open): Check that algo is available and only + valid flag values are used. + (gcry_md_get_algo): Add error handling. + +2002-09-26 Werner Koch + + * md.c: Include an OID for TIGER. + * tiger.c (tiger_get_info): Use a regular OID. + +2002-09-17 Werner Koch + + * random.c: Replaced mutex.h by the new ath.h. Changed all calls. + +2002-09-16 Werner Koch + + * arcfour.c (do_encrypt_stream): Use register modifier and modulo. + According to Nikos Mavroyanopoulos this increases perfromace on + i386 system noticable. And I always tought gcc is clever enough. + * md5.c (transform): Use register modifier. + * rmd160.c (transform): Ditto. + * sha1.c (transform): Ditto. We hope that there are 6 free registers. + * random.c (gcry_randomize): Rewrote to avoid malloc calls. + + * rndlinux.c (gather_random): Replaced remaining fprintfs by log_*. + * arcfour.c (do_arcfour_setkey): Ditto. + * twofish.c (do_twofish_setkey): Ditto. + * rndegd.c (gather_random): Ditto. + * rijndael.c (do_setkey): Ditto. + * random.c (_gcry_random_dump_stats): Ditto. + * primegen.c (_gcry_generate_elg_prime): Ditto. + * des.c (_gcry_des_get_info): Ditto. + * cast5.c (do_cast_setkey): Ditto. + * blowfish.c (do_bf_setkey): Ditto. + +2002-08-26 Werner Koch + + * des.c (weak_keys): Fixed one entry in the table and compared + all entries against the literature. + (selftest): Checksum the weak key table. + +2002-08-21 Werner Koch + + * pubkey.c: Enable keygrip calculation for "openpgp-rsa". + +2002-08-17 Werner Koch + + * cipher.c (setup_cipher_table): Don't overwrite the DES entry + with the entry for DUMMY. + +2002-08-14 Werner Koch + + * des.c (do_des_setkey,do_des_encrypt, do_des_decrypt): New. + (_gcry_des_get_info): Support plain old DES. + * cipher.c (setup_cipher_table): Put DES into the table. + +2002-07-25 Werner Koch + + * rndunix.c (_gcry_rndunix_constructor): Prefixed with _gcry_. + Noted by Stephan Austermuehle. + +2002-07-08 Timo Schulz + + * rndw32.c: Replaced the m_ memory functions with the real + gcry_ functions. Renamed all g10_ prefixed functions to log_. + +2002-06-12 Werner Koch + + * rsa.c (generate): Use e = 65537 for now. + +2002-06-11 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Allow a "protected-private-key". + +2002-06-05 Timo Schulz + + * cipher.c (gcry_cipher_encrypt, gcry_cipher_decrypt): + Check that the input size is a multiple of the blocksize. + +2002-05-23 Werner Koch + + * md.c (oid_table): Add an rsadsi OID for MD5. + +2002-05-21 Werner Koch + + * primegen.c, elgamal.c, dsa.c (progress): Do not print anything + by default. Pass an extra identifying string to the callback and + reserved 2 argumenst for current and total counters. Changed the + register function prototype. + +2002-05-17 Werner Koch + + * rndegd.c (rndegd_constructor): Fixed name of register function + and prefixed the function name with _gcry_. + * rndw32.c (rndw32_constructor): Ditto. + * tiger.c (tiger_constructor): Ditto. + + * Makefile.am: Removed all dynamic loading stuff. + * dynload.c: Ditto. Now only used for the constructor system. + +2002-05-15 Werner Koch + + * random.c (gcry_random_bytes,gcry_random_bytes_secure) + (gcry_randomize): Make sure we are initialized. + +2002-05-14 Werner Koch + + Changed license of most files to the LGPL. + +2002-05-02 Werner Koch + + * random.c (_gcry_fast_random_poll): Initialize the module so the + mutex can be used. + + * primegen.c (small_prime_numbers): Moved table from smallprime.c + * smallprime.c: File removed. + + * des.c (leftkey_swap, rightkey_swap, working_memcmp): Made static. + + * cipher.c (gcry_cipher_map_name): Map "RIJNDAEL" to "AES". + * rijndael.c (rijndael_get_info): We do only support a 128 bit + blocksize so it makes sense to change the algorithm strings to + AES. + + * tiger.c (tiger_final): Removed superfluous token pasting operators. + * md5.c (md5_final): Ditto. + +2002-04-30 Werner Koch + + * cipher.c: Fixed list of copyright years. + +2002-03-18 Werner Koch + + * random.c (initialize): Initialize the new pool lock mutex. + (_gcry_fast_random_poll): Add locking and moved main + code out to... + (do_fast_random_poll): new function. + (read_pool): Use the new function here. + (get_random_bytes): Add locking. + (_gcry_update_random_seed_file): Ditto. + +2002-03-11 Werner Koch + + * md.c: Add rsaSignatureWithripemd160 to OID table. + +2002-02-20 Werner Koch + + * sha1.c: Removed a left over comment note. The code has been + rewritten from scratch in 1998. Thanks to Niels Möller for + reporting this misleading comment. + +2002-02-18 Werner Koch + + * rndunix.c (rndunix_constructor): Use the the new prefixed + function name. Reported by Jordi Mallach. + +2002-02-10 Werner Koch + + * random.c (mix_pool): Carry an extra failsafe_digest buffer + around to make the function more robust. + +2002-02-08 Werner Koch + + * random.c (add_randomness): Xor new data into the pool and not + just copy it. This avoids any choosen input attacks which are not + serious in our setting because an outsider won't be able to mix + data in and even then we keep going with a PRNG. Thanks to Stefan + Keller for pointing this out. + +2002-01-04 Werner Koch + + * pubkey.c (gcry_pk_genkey): Do not release skey - it is static. + + * primegen.c (gen_prime): Of course we should use set_bit + and not set_highbit to set the second high bit. + +2001-12-18 Werner Koch + + * rsa.c (generate): Loop until we find the exact modulus size. + Changed the exponent to 41. + (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings. + * primegen.c (gen_prime): Set 2 high order bits for secret primes. + + * Makefile.am (DISTCLEANFILES): Include construct.c. + +2001-12-17 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): New - experimental. + +2001-12-11 Werner Koch + + * cipher.c: Added OIDs for AES. + (gcry_cipher_mode_from_oid): New. + (gcry_cipher_map_name): Moved OID search code to .. + (search_oid): .. new function. + +2001-12-10 Werner Koch + + * pubkey.c (gcry_pk_encrypt): Find the signature algorithm by name + and not by number. + + * pubkey.c (gcry_pk_encrypt,gcry_pk_decrypt,gcry_pk_sign) + (gcry_pk_verify,gcry_pk_testkey, gcry_pk_genkey) + (gcry_pk_get_nbits): Release the arrays. Noted by Nikos + Mavroyanopoulos. + +2001-12-06 Werner Koch + + * cipher.c (gcry_cipher_map_name): Look also for OIDs prefixed + with "oid." or "OID.". + +2001-12-05 Werner Koch + + * pubkey.c (algo_info_table): Fixed entry for openpgp-rsa. + +2001-11-24 Werner Koch + + * pubkey.c: Added the rsaEncryption OID to the tables. + (sexp_to_key): Add an arg to return the index of the algorithm, + changed all callers. + (gcry_pk_sign): Find the signature algorithm by name and not by + number. + (gcry_pk_get_nbits): Fixed so that we can now really pass a secret + key to get the result. + + * md.c (gcry_md_map_name): Look also for OIDs prefixed with "oid." + or "OID." so that an OID string can be used as an S-Exp token. + +2001-11-20 Werner Koch + + * md.c (gcry_md_map_name): Lookup by OID if the the name begins + with a digit. + (oid_table): New. + +2001-11-16 Werner Koch + + * md.c (gcry_md_info): New operator GCRYCTL_IS_ALGO_ENABLED. + +2001-11-07 Werner Koch + + * md.c (gcry_md_hash_buffer): Close the handle which was left open + for algorithms other than rmd160. + +2001-08-08 Werner Koch + + * rndw32.c (gather_random): Use toolhelp in addition to the NT + gatherer for Windows2000. Suggested by Sami Tolvanen. + + * random.c (read_pool): Fixed length check, this used to be one + byte to strict. Made an assert out of it because the caller has + already made sure that only poolsize bytes are requested. + Reported by Marcus Brinkmann. + +2001-08-03 Werner Koch + + * cipher.c (cipher_encrypt, cipher_decrypt): Prepare to return + errors. We have to change the interface to all ciphers to make + this really work but we should do so to prepare for hardware + encryption modules. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Return the error and + set lasterr. + (gcry_cipher_ctl): Make sure that errors from setkey are returned. + +2001-08-02 Werner Koch + + * rndlinux.c (gather_random): casted a size_t arg to int so that + the format string is correct. Casting is okay here and avoids + translation changes. + + * random.c (fast_random_poll): Do not check the return code of + getrusage. + + * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7 + and 8. + + * tiger.c (print_abc,print_data): Removed. + + * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c, arcfour.c + (burn_stack): New. Add wrappers for most functions to be able to + call burn_stack after the function invocation. This methods seems + to be the most portable way to zeroise the stack used. It does + only work on stack frame based machines but it is highly portable + and has no side effects. Just setting the automatic variables at + the end of a function to zero does not work well because the + compiler will optimize them away - marking them as volatile would + be bad for performance. + * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise. + * random.c (burn_stack): New. + (mix_pool): Use it here to burn the stack of the mixblock function. + + * primegen.c (_gcry_generate_elg_prime): Freed q at 3 places. + Thanks to Tommi Komulainen. + + * arcfour.c (arcfour_setkey): Check the minimim keylength against + bytes and not bits. + (selftest): Must reset the key before decryption. + +2001-05-31 Werner Koch + + * sha1.c (sha1_init): Made static. + + Changed all g10_ prefixed function names as well as some mpi_ + function names to cope with the introduced naming changes. + + * md.c (prepare_macpads): Made key const. + +2001-05-28 Werner Koch + + * rndegd.c (gather_random): Removed the use of tty_printf. + +2001-03-29 Werner Koch + + * md5.c (md5_final): Fixed calculation of hashed length. Thanks + to disastry@saiknes.lv for pointing out that it was horrible wrong + for more than 512MB of input. + * sha1.c (sha1_final): Ditto. + * rmd160.c (rmd160_final): Ditto. + * tiger.c (tiger_final): Ditto. + + * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to + avoid name clashes with an encrypt function in stdlib.h of + Dynix/PIX. Thanks to Gene Carter. + * elgamal.c (encrypt,do_encrypt): Ditto. + + * twofish.c (gnupgext_enum_func): Use only when when compiled as a + module. + * rijndael.c (gnupgext_enum_func): Ditto. + + * tiger.c (tiger_get_info): Return "TIGER192" and not just + "TIGER". By Edwin Woudt. + + * random.c: Always include time.h - standard requirement. Thanks + to James Troup. + + * rndw32.c: Fixes to the macros. + +2001-01-11 Werner Koch + + * cipher.c (cipher_encrypt,gcry_cipher_encrypt): Use blocksize and + not 8. + +2000-12-19 Werner Koch + + Major change: + Removed all GnuPG stuff and renamed this piece of software + to gcrypt. + +2000-11-14 Werner Koch + + * dsa.c (test_keys): Replaced mpi_alloc by gcry_mpi_new and + mpi_free by gcry_mpi_release. + * elgamal.c (test_keys,generate): Ditto, also for mpi_alloc_secure. + * rsa.c (test_keys,generate,rsa_verify): Ditto. + * primegen.c (generate_elg_prime): Ditto. + (gen_prime): Ditto and removed nlimbs. + + * rsa.c (generate): Allocate 2 more vars in secure memory. + + * Makefile.am (OMIT_DEPENDENCIES): Hack to work around dependency + problems. + +2000-10-09 Werner Koch + + * arcfour.c, arcfour.h: New. + * cipher.c (cipher_encrypt, cipher_decrypt): Add stream mode. + (setup_cipher_table): Add Arcfour. + (gcry_cipher_open): Kludge to allow stream mode. + +Wed Oct 4 13:16:18 CEST 2000 Werner Koch + + * sha1.c (transform): Use rol() macro. Actually this is not needed + for a newer gcc but there are still aoter compilers. + + * rsa.c (test_keys): Use new random function. + + * md.c (gcry_md_setkey): New function to overcome problems with + const conflics. + (gcry_md_ctl): Pass set key to the new functions. + + * rijndael.c: New. + * cipher.c: Add Rijndael support. + +Mon Sep 18 16:35:45 CEST 2000 Werner Koch + + * rndlinux.c (open_device): Loose random device checking. + By Nils Ellmenreich. + + * random.c (fast_random_poll): Check ENOSYS for getrusage. + * rndunix.c: Add 2 sources for QNX. By Sam Roberts. + + * pubkey.c (gcry_pk_algo_info): Add GCRYCTL_GET_ALGO_USAGE. + + * rsa.c: Changed the comment about the patent. + (secret): Speed up by using the CRT. For a 2k keys this + is about 3 times faster. + (stronger_key_check): New but unused code to check the secret key. + * Makefile.am: Included rsa.[ch]. + * pubkey.c: Enabled RSA support. + (pubkey_get_npkey): Removed RSA workaround. + +Mon Jul 31 10:04:47 CEST 2000 Werner Koch + + * pubkey.c: Replaced all gcry_sexp_{car,cdr}_{data,mpi} by the new + gcry_sexp_nth_{data,mpi} functions. + +Tue Jul 25 17:44:15 CEST 2000 Werner Koch + + * pubkey.c (exp_to_key,sexp_to_sig,sexp_to_enc,gcry_pk_encrypt, + gcry_pk_decrypt,gcry_pk_sign,gcry_pk_genkey): Changed to work with + the new S-Exp interface. + +Mon Jul 17 16:35:47 CEST 2000 Werner Koch + + * random.c (gather_faked): Replaced make_timestamp by time(2) again. + +Fri Jul 14 19:38:23 CEST 2000 Werner Koch + + * md.c (gcry_md_ctl): Support GCRYCTL_{START,STOP}_DUMP. + + * Makefile.am: Never compile mingw32 as module. + + * Makefile.am: Tweaked module build and removed libtool + + * Makefile.am: Replaced -O1 by -O. Suggested by Alec Habig. + + * elgamal.c (sign): Removed inactive code. + + * rsa.c, rsa.h: New based on the old module version (only in CVS for now). + * pubkey.c (setup_pubkey_table): Added commented support for RSA. + + * rndunix.c (waitpid): New. For UTS 2.1. All by Dave Dykstra. + (my_popen): Do the FD_CLOEXEC only if it is available + (start_gatherer): Cope with missing _SC_OPEN_MAX + + * rndunix.c: Add some more headers for QNX. By Sam Roberts. + + * rndegd.c (gather_random): Shortcut level 0. + * rndunix.c (gather_random): Ditto. + * rndw32.c (gather_random): Ditto. + + * rndw32.c: Replaced with code from Cryptlib and commented the old stuff. + * rndw32.c: Add some debuging code enabled by an environment variable. + + * random.c (read_seed_file): Binary open for DOSish system + (update_random_seed_file): Ditto. + * random.c [MINGW32]: Include process.h for getpid. + * random.c (fast_random_poll): Add clock_gettime() as fallback for + system which support this POSIX.4 fucntion. By Sam Roberts. + + * random.c (read_seed_file): Removed the S_ISLNK test becuase it + is already covered by !S_ISREG and is not defined in Unixware. + Reported by Dave Dykstra. + (update_random_seed_file): Silently ignore update request when pool + is not filled. + + * random.c (read_seed_file): New. + (set_random_seed_file): New. + (read_pool): Try to read the seeding file. + (update_random_seed_file): New. + + (read_pool): Do an initial extra seeding when level 2 quality random + is requested the first time. This requestes at least POOLSIZE/2 bytes + of entropy. Compined with the seeding file this should make normal + random bytes cheaper and increase the quality of the random bytes + used for key generation. + + * random.c (read_pool): Print a more friendly error message in + cases when too much random is requested in one call. + + * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined; + this is not the case for some ESIX and Unixware, although they have + getrusage(). + + * primegen.c (generate_elg_prime): All primes are now generated with + the lowest random quality level. Because they are public anyway we + don't need stronger random and by this we do not drain the systems + entropy so much. + + * primegen.c (register_primegen_progress): New. + * dsa.c (register_pk_dsa_progress): New. + * elgamal.c (register_pk_elg_progress): New. + + * elgamal.c (wiener_map): New. + (gen_k): Use a much smaller k. + (generate): Calculate the qbits using the wiener map and + choose an x at a size comparable to the one choosen in gen_k + + * rmd160.c (rmd160_get_info): Moved casting to the left side due to a + problem with UTS4.3. Suggested by Dave Dykstra. + * sha1.c (sha1_get_info): Ditto. + * tiger.c (tiger_get_info): Ditto. + * md5.c (md5_get_info): Ditto + * des.c (des_get_info): Ditto. + * blowfish.c (blowfish_get_info): Ditto. + * cast5.c (cast5_get_info): Ditto. + * twofish.c (twofish_get_info): Ditto. + +Fri Mar 24 11:25:45 CET 2000 Werner Koch + + * md.c (md_open): Add hmac arg and allocate space for the pads. + (md_finalize): Add HMAC support. + (md_copy): Ditto. + (md_close): Ditto. + (gcry_md_reset): Ditto. + (gcry_md_ctl): Ditto. + (prepare_macpdas): New. + +Mon Mar 13 19:22:46 CET 2000 Werner Koch + + * md.c (gcry_md_hash_buffer): Add support for the other algorithms. + +Mon Jan 31 16:37:34 CET 2000 Werner Koch + + * genprime.c (generate_elg_prime): Fixed returned factors which never + worked for non-DSA keys. + +Thu Jan 27 18:00:44 CET 2000 Werner Koch + + * pubkey.c (sexp_to_key): Fixed mem leaks in case of errors. + +Mon Jan 24 22:24:38 CET 2000 Werner Koch + + * pubkey.c (gcry_pk_decrypt): Implemented. + (gcry_pk_encrypt): Implemented. + (gcry_pk_testkey): New. + (gcry_pk_genkey): New. + (pubkey_decrypt): Made static. + (pubkey_encrypt): Ditto. + (pubkey_check_secret_key): Ditto. + (pubkey_generate): Ditto. + +Mon Jan 24 13:04:28 CET 2000 Werner Koch + + * pubkey.c (pubkey_nbits): Removed and replaced by ... + (gcry_pk_get_nbits): this new one. + +Wed Dec 8 21:58:32 CET 1999 Werner Koch + + * dsa.c: s/mpi_powm/gcry_mpi_powm/g + * elgamal.c: Ditto. + * primegen.c: Ditto. + + * : Replaced g10_opt_verbose by g10_log_verbosity(). + + * Makefile.am (INCLUDES): removed intl, add ../gcrypt + +Fri Nov 19 17:15:20 CET 1999 Werner Koch + + * dynload.c (cmp_filenames): New to replaced compare_filename() in + module. + (register_cipher_extension): Removed the tilde expansion stuff. + * rndeg.c (my_make_filename): New. + + * : Replaced header util.h by g10lib.h + + * random.c (gather_faked): Replaced make_timestamp by time(2). + Disabled wrning printed with tty_printf. + * rndlinux.c (gather_random): Always use fprintf instead of tty_xxx; + this should be replaced by a callback function. + + * primegen.c (gen_prime): Use gcry_mpi_randomize. + (is_prime): Ditto. + * elgamal.c (test_keys): Ditto. + * dsa.c (test_keys): Ditto. + + * cipher.c (gcry_cipher_close): Die on invalid handle. + +Mon Nov 15 21:36:02 CET 1999 Werner Koch + + * elgamal.c (gen_k): Use the new random API. + (generate): Ditto. + * dsa.c (gen_k): Ditto. + (generate): Ditto. + +Sat Nov 13 17:44:23 CET 1999 Werner Koch + + * pubkey.c (disable_pubkey_algo): Made static. + (gcry_pk_ctl): New. + + * random.c (get_random_bits): Renamed to ... + (get_random_bytes): ... this and made static. + (gcry_random_bytes): New. + (gcry_random_bytes_secure): New. + (randomize_buffer): Renamed to ... + (gcry_randomize): ...this. + + * md.c (gcry_md_hash_buffer): New. + + * pubkey.c (gcry_pk_algo_info): 4 new commands. + (pubkey_get_npkey): Made static. + (pubkey_get_nskey): Made static. + (pubkey_get_nsig): Made static. + (pubkey_get_nenc): Made static. + + * pubkey.c: Removed all G10ERR_xxx. + * cipher.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_CIPHER_ALGO. + * md.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_MD_ALGO. + * cast5.c (cast_setkey): Changed errocodes to GCRYERR_xxx. + * blowfish.c: Ditto. + * des.c: Ditto. + * twofish.c: Ditto. + * dsa.c: Ditto. + * elgamal.c: Ditto. + + * g10c.c: Removed + + * cipher.c (gcry_cipher_open): Replaced alloc functions and return NULL + if we are out of core. + * dynload.c: Replaced all memory allocation functions. + * md.c: Ditto. + * primegen.c: Ditto. + * pubkey.c: Ditto. + * random.c: Ditto. + * rndw32.c: Ditto. + * elgamal.c: Ditto. + * dsa.c: Ditto. + +Tue Oct 26 14:10:21 CEST 1999 Werner Koch + + * elgamal.c (sign): Hugh found strange code here. Replaced by BUG(). + + * cipher.c: Merged with gcrypt/symapi.c. + + * pubkey.c (string_to_pubkey_algo): Renamed function to ... + (gcry_pk_map_name): ... this. + (pubkey_algo_to_string): Renamed function to ... + (gcry_pk_algo_name): ... this. + (gcry_pk_algo_info): New. + * pubkey.c: Merged with gcrypt/pkapi.c. + + * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for + fixing this bug. + + * md.c: Merged with gcrypt/mdapi.c + +Wed Sep 15 14:39:59 CEST 1999 Michael Roth + + * des.c: Various speed improvements: One bit pre rotation + trick after initial permutation (Richard Outerbridge). + Finished test of SSLeay Tripple-DES patterns. + +Wed Sep 15 16:22:17 CEST 1999 Werner Koch + + * rndw32.c: New. + +Mon Sep 13 10:51:29 CEST 1999 Werner Koch + + * bithelp.h: New. + * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h + +Tue Sep 7 16:23:36 CEST 1999 Werner Koch + + * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert. + +Mon Sep 6 19:59:08 CEST 1999 Werner Koch + + * des.c (selftest): Add some testpattern + +Mon Aug 30 20:38:33 CEST 1999 Werner Koch + + * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using + in place encryption. Pointed out by Frank Stajano. + +Mon Jul 26 09:34:46 CEST 1999 Werner Koch + + * md5.c (md5_final): Fix for a SCO cpp bug. + +Thu Jul 15 10:15:35 CEST 1999 Werner Koch + + * elgamal.c (elg_check_secret_key,elg_encrypt + elg_decrypt,elg_sign,elg_verify): Sanity check on the args. + * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto. + + * pubkey.c (disable_pubkey_algo): New. + (check_pubkey_algo2): Look at disabled algo table. + * cipher.c (disable_cipher_algo): New. + (check_cipher_algo): Look at disabled algo table. + +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + * Makefile.am: Support for libtool. + +Fri Jul 2 11:45:54 CEST 1999 Werner Koch + + * dsa.c (gen_k): Changed algorithm to consume less random bytes + * elgamal.c (gen_k): Ditto. + + * random.c (random_dump_stats): New. + +Thu Jul 1 12:47:31 CEST 1999 Werner Koch + + * primegen.c, elgamal.c, dsa.c (progess): New and replaced all + fputc with a call to this function. + +Sat Jun 26 12:15:59 CEST 1999 Werner Koch + + * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs. + + * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New. + + * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra). + * Makefile.am (install-exec-hook): Removed. + +Sun May 23 14:20:22 CEST 1999 Werner Koch + + * cipher.c (setup_cipher_table): Enable Twofish + + * random.c (fast_random_poll): Disable use of times() for mingw32. + +Mon May 17 21:54:43 CEST 1999 Werner Koch + + * dynload.c (register_internal_cipher_extension): Minor init fix. + +Tue May 4 15:47:53 CEST 1999 Werner Koch + + * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug + that we didn't correct for step when passing the prime to the + Rabin-Miller test which led to bad performance (Stefan Keller). + (check_prime): Add a first Fermat test. + +Sun Apr 18 10:11:28 CEST 1999 Werner Koch + + * cipher.c (cipher_setiv): Add ivlen arg, changed all callers. + + * random.c (randomize_buffer): alway use secure memory because + we can't use m_is_secure() on a statically allocated buffer. + + * twofish.c: Replaced some macros by a loop to reduce text size. + * Makefile.am (twofish): No more need for sed editing. + +Fri Apr 9 12:26:25 CEST 1999 Werner Koch + + * cipher.c (cipher_open): Reversed the changes for AUTO_CFB. + + * blowfish.c: Dropped the Blowfish 160 mode. + * cipher.c (cipher_open): Ditto. + (setup_cipher_table): Ditto. And removed support of twofish128 + +Wed Apr 7 20:51:39 CEST 1999 Werner Koch + + * random.c (get_random_bits): Can now handle requests > POOLSIZE + + * cipher.c (cipher_open): Now uses standard CFB for automode if + the blocksize is gt 8 (according to rfc2440). + + * twofish.c: Applied Matthew Skala's patches for 256 bit key. + +Tue Apr 6 19:58:12 CEST 1999 Werner Koch + + * random.c (get_random_bits): Can now handle requests > POOLSIZE + + * cipher.c (cipher_open): Now uses standard CFB for automode if + the blocksize is gt 8 (according to rfc2440). + +Sat Mar 20 11:44:21 CET 1999 Werner Koch + + * rndlinux.c (tty_printf) [IS_MODULE]: Removed. + + * rndegd.c (gather_random): Some fixes. + +Wed Mar 17 13:09:03 CET 1999 Werner Koch + + * rndegd.c (do_read): New. + (gather_random): Changed the implementation. + +Mon Mar 8 20:47:17 CET 1999 Werner Koch + + * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed. + +Fri Feb 26 17:55:41 CET 1999 Werner Koch + + * md.c: Nearly a total rewrote. + +Wed Feb 24 11:07:27 CET 1999 Werner Koch + + * cipher.c (context): Fixed alignment + * md.c: Ditto. + + * rndegd.c: New + +Mon Feb 22 20:04:00 CET 1999 Werner Koch + + * rndegd.c: New. + +Wed Feb 10 17:15:39 CET 1999 Werner Koch + + * Makefile.am: Modules are now figured out by configure + * construct.c: New. Generated by configure. Changed all modules + to work with that. + * sha1.h: Removed. + * md5.h: Removed. + + * twofish.c: Changed interface to allow Twofish/256 + + * rndunix.c (start_gatherer): Die on SIGPIPE. + +Wed Jan 20 18:59:49 CET 1999 Werner Koch + + * rndunix.c (gather_random): Fix to avoid infinite loop. + +Sun Jan 17 11:04:33 CET 1999 Werner Koch + + * des.c (is_weak_key): Replace system memcmp due to bugs + in SunOS's memcmp. + (des_get_info): Return error on failed selftest. + * twofish.c (twofish_setkey): Return error on failed selftest or + invalid keylength. + * cast5.c (cast_setkey): Ditto. + * blowfish.c (bf_setkey): Return error on failed selftest. + +Tue Jan 12 11:17:18 CET 1999 Werner Koch + + * random.c (random_is_faked): New. + + * tiger.c: Only compile if we have the u64 type + +Sat Jan 9 16:02:23 CET 1999 Werner Koch + + * rndunix.c (gather_random): check for setuid. + + * Makefile.am: Add a way to staically link random modules + +Thu Jan 7 18:00:58 CET 1999 Werner Koch + + * md.c (md_stop_debug): Do a flush first. + (md_open): size of buffer now depends on the secure parameter + +Sun Jan 3 15:28:44 CET 1999 Werner Koch + + * rndunix.c (start_gatherer): Fixed stupid ==/= bug + +1998-12-31 Geoff Keating + + * des.c (is_weak_key): Rewrite loop end condition. + +Tue Dec 29 14:41:47 CET 1998 Werner Koch + + * random.c: add unistd.h for getpid(). + (RAND_MAX): Fallback value for Sun. + +Wed Dec 23 17:12:24 CET 1998 Werner Koch + + * md.c (md_copy): Reset debug. + +Mon Dec 14 21:18:49 CET 1998 Werner Koch + + * random.c (read_random_source): Changed the interface to the + random gathering function. + (gather_faked): Use new interface. + * dynload.c (dynload_getfnc_fast_random_poll): Ditto. + (dynload_getfnc_gather_random): Ditto. + * rndlinux.c (gather_random): Ditto. + * rndunix.c (gather_random): Ditto. + +Sat Dec 12 18:40:32 CET 1998 Werner Koch + + * dynload.c (SYMBOL_VERSION): New to cope with system which needs + underscores. + + * rndunix.c: Rewrote large parts + +Thu Dec 10 20:15:36 CET 1998 Werner Koch + + * dynload.c (load_extension): increased needed verbosity level. + + * random.c (fast_random_poll): Fallback to a default fast random + poll function. + (read_random_source): Always use the faked entroy gatherer if no + gather module is available. + * rndlinux.c (fast_poll): Removed. + * rndunix.c (fast_poll): Removed. + + +Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-*.c: Removed. + * rndlinux.c : New. + * rndunix.c : New. + * random.c : Restructured the interface to the gather modules. + (intialize): Call constructor functions + (read_radnom_source): Moved to here. + * dynload.c (dynload_getfnc_gather_random): New. + (dynload_getfnc_fast_random_poll): New. + (register_internal_cipher_extension): New. + (register_cipher_extension): Support of internal modules. + +Sun Nov 8 17:44:36 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c (read_random_source): Removed the assert. + +Mon Oct 19 18:34:30 1998 me,,, (wk@tobold) + + * pubkey.c: Hack to allow us to give some info about RSA keys back. + +Thu Oct 15 11:47:57 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dynload.c: Support for DLD + +Wed Oct 14 12:13:07 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c: Now uses names from configure for /dev/random. + +1998-10-10 SL Baur + + * Makefile.am: fix sed -O substitutions to catch -O6, etc. + +Tue Oct 6 10:06:32 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-) + * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto. + +Mon Sep 28 13:23:09 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_digest): New. + (md_reset): New. + +Wed Sep 23 12:27:02 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned. + +Mon Sep 21 06:22:53 1998 Werner Koch (wk@(none)) + + * des.c: Some patches from Michael. + +Thu Sep 17 19:00:06 1998 Werner Koch (wk@(none)) + + * des.c : New file from Michael Roth + +Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none)) + + * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys. + +Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none)) + + * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined. + +Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none)) + + * Makefile.am: Fixes to allow a different build directory + +Thu Aug 6 17:25:38 1998 Werner Koch,mobil,,, (wk@tobold) + + * random.c (get_random_byte): Removed and changed all callers + to use get_random_bits() + +Mon Jul 27 10:30:22 1998 Werner Koch (wk@(none)) + + * cipher.c : Support for other blocksizes + (cipher_get_blocksize): New. + * twofish.c: New. + * Makefile.am: Add twofish module. + +Mon Jul 13 21:30:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (read_pool): Simple alloc if secure_alloc is not set. + (get_random_bits): Ditto. + +Thu Jul 9 13:01:14 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dynload.c (load_extension): Function now nbails out if + the program is run setuid. + +Wed Jul 8 18:58:23 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (rmd160_hash_buffer): New. + +Thu Jul 2 10:50:30 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c (cipher_open): algos >=100 use standard CFB + +Thu Jun 25 11:18:25 1998 Werner Koch (wk@isil.d.shuttle.de) + + * Makefile.am: Support for extensions + +Thu Jun 18 12:09:38 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (mix_pool): simpler handling for level 0 + +Mon Jun 15 14:40:48 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c: Removed from dist, will reappear as dynload module + +Sat Jun 13 14:16:57 1998 Werner Koch (wk@isil.d.shuttle.de) + + * pubkey.c: Major changes to allow extensions. Changed the inteface + of all public key ciphers and added the ability to load extensions + on demand. + + * misc.c: Removed. + +Wed Jun 10 07:52:08 1998 Werner Koch,mobil,,, (wk@tobold) + + * dynload.c: New. + * cipher.c: Major changes to allow extensions. + +Mon Jun 8 22:43:00 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: Major internal chnages to support extensions. + * blowfish.c (blowfish_get_info): New and made all internal + functions static, changed heder. + * cast5.c (cast5_get_info): Likewise. + +Mon Jun 8 12:27:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c (transform): Fix for big endian + + * cipher.c (do_cfb_decrypt): Big endian fix. + +Fri May 22 07:30:39 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_get_oid): Add a new one for TIGER. + +Thu May 21 13:24:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: Add support for a dummy cipher + +Thu May 14 15:40:36 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (transform): fixed sigbus - I should better + add Christian von Roques's new implemenation of rmd160_write. + +Fri May 8 18:07:44 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New + * random.c: Moved system specific functions to rand-****.c + +Fri May 8 14:01:17 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (fast_random_poll): add call to gethrtime. + +Tue May 5 21:28:55 1998 Werner Koch (wk@isil.d.shuttle.de) + + * elgamal.c (elg_generate): choosing x was not correct, could + yield 6 bytes which are not from the random pool, tsss, tsss.. + +Tue May 5 14:09:06 1998 Werner Koch (wk@isil.d.shuttle.de) + + * primegen.c (generate_elg_prime): Add arg mode, changed all + callers and implemented mode 1. + +Mon Apr 27 14:41:58 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c (cipher_get_keylen): New. + +Sun Apr 26 14:44:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c, tiger.h: New. + +Wed Apr 8 14:57:11 1998 Werner Koch (wk@isil.d.shuttle.de) + + * misc.c (check_pubkey_algo2): New. + +Tue Apr 7 18:46:49 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: New + * misc.c (check_cipher_algo): Moved to cipher.c + * cast5.c: Moved many functions to cipher.c + * blowfish.c: Likewise. + +Sat Apr 4 19:52:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cast5.c: Implemented and tested. + +Wed Apr 1 16:38:27 1998 Werner Koch (wk@isil.d.shuttle.de) + + * elgamal.c (elg_generate): Faster generation of x in some cases. + +Thu Mar 19 13:54:48 1998 Werner Koch (wk@isil.d.shuttle.de) + + * blowfish.c (blowfish_decode_cfb): changed XOR operation + (blowfish_encode_cfb): Ditto. + +Thu Mar 12 14:04:05 1998 Werner Koch (wk@isil.d.shuttle.de) + + * sha1.c (transform): Rewrote + + * blowfish.c (encrypt): Unrolled for rounds == 16 + (decrypt): Ditto. + +Tue Mar 10 16:32:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (transform): Unrolled the loop. + +Tue Mar 10 13:05:14 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (read_pool): Add pool_balance stuff. + (get_random_bits): New. + + * elgamal.c (elg_generate): Now uses get_random_bits to generate x. + + +Tue Mar 10 11:33:51 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_digest_length): New. + +Tue Mar 10 11:27:41 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dsa.c (dsa_verify): Works. + +Mon Mar 9 12:59:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dsa.c, dsa.h: Removed some unused code. + +Wed Mar 4 10:39:22 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_open): Add call to fast_random_poll. + blowfish.c (blowfish_setkey): Ditto. + +Tue Mar 3 13:32:54 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (rmd160_mixblock): New. + * random.c: Restructured to start with a new RNG implementation. + * random.h: New. + +Mon Mar 2 19:21:46 1998 Werner Koch (wk@isil.d.shuttle.de) + + * gost.c, gost.h: Removed because they did only contain trash. + +Sun Mar 1 16:42:29 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (fill_buffer): removed error message if n == -1. + +Fri Feb 27 16:39:34 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_enable): No init if called twice. + +Thu Feb 26 07:57:02 1998 Werner Koch (wk@isil.d.shuttle.de) + + * primegen.c (generate_elg_prime): Changed the progress printing. + (gen_prime): Ditto. + +Tue Feb 24 12:28:42 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md5.c, md.5 : Replaced by a modified version of md5.c from + GNU textutils 1.22. + +Wed Feb 18 14:08:30 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c, md.h : New debugging support + +Mon Feb 16 10:08:47 1998 Werner Koch (wk@isil.d.shuttle.de) + + * misc.c (cipher_algo_to_string): New + (pubkey_algo_to_string): New. + (digest_algo_to_string): New. + + + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. diff --git a/grub-core/lib/libgcrypt/cipher/ChangeLog-2011 b/grub-core/lib/libgcrypt/cipher/ChangeLog-2011 new file mode 100644 index 000000000..05516c99e --- /dev/null +++ b/grub-core/lib/libgcrypt/cipher/ChangeLog-2011 @@ -0,0 +1,4247 @@ +2011-12-01 Werner Koch + + NB: ChangeLog files are no longer manually maintained. Starting + on December 1st, 2011 we put change information only in the GIT + commit log, and generate a top-level ChangeLog file from logs at + "make dist". See doc/HACKING for details. + +2011-06-29 Werner Koch + + * cipher.c (cipher_get_keylen): Return zero for an invalid algorithm. + (cipher_get_blocksize): Ditto. + +2011-06-13 Werner Koch + + * dsa.c (selftest_sign_1024): Use the raw and not the pkcs1 flag. + + * pubkey.c (gcry_pk_sign): Special case output generation for PKCS1. + (sexp_data_to_mpi): Parse "random-override" for pkcs1 encryption. + (pkcs1_encode_for_encryption): Add args RANDOM_OVERRIDE and + RANDOM_OVERRIDE_LEN. + (gcry_pk_encrypt): Special case output generation for PKCS1. + (sexp_data_to_mpi): Use GCRYMPI_FMT_USG for raw encoding. + +2011-06-10 Werner Koch + + * pubkey.c (gcry_pk_sign): Use format specifier '%M' to avoid + leading zeroes. Special case output generation for PSS. + (gcry_pk_encrypt): Special case output generation for OAEP. + (sexp_data_to_mpi): Use GCRYMPI_FMT_USG for PSS verify. + +2011-06-09 Werner Koch + + * pubkey.c (oaep_decode): Make use of octet_string_from_mpi. + (sexp_to_enc): Skip "random-override". + + * pubkey.c (oaep_encode, pss_encode): Add args RANDOM_OVERRIDE and + RANDOM_OVERRIDE_LEN. + (sexp_data_to_mpi): Extract new random-override parameter. + + * pubkey.c (pss_encode, pss_verify): Use VALUE verbatim for MHASH. + (octet_string_from_mpi): Add arg SPACE. + +2011-06-08 Werner Koch + + * pubkey.c (pss_encode, pss_verify): Restructure and comment code + to match rfc-3447. Replace secure allocs by plain allocs and + wipememory. Use gcry_md_hash_buffer. + (octet_string_from_mpi): New. + +2011-06-03 Werner Koch + + * pubkey.c (oaep_decode): Add more comments and restructure to + match the description in RFC-3447. + (oaep_encode): Check for mgf1 error. s/dlen/hlen/. + +2011-05-31 Werner Koch + + * pubkey.c (mgf1): Optimize by using gcry_md_reset. Re-implement + for easier readability. + (oaep_encode): Add more comments and restructure to match the + description in RFC-3447. + + * pubkey.c (pkcs1_encode_for_signature, oaep_decode): Change + return value from one MPI to a buffer. + (gcry_pk_decrypt): Adjust for this change. + +2011-05-30 Werner Koch + + * pubkey.c (pkcs1_decode_for_encryption): Change handling of + leading zero byte. + +2011-05-27 Daiki Ueno + + * pubkey.c (gcry_pk_decrypt): Fix double-free when un-padding + invalid data. Thanks to Tom Ritter. + +2011-05-24 Daiki Ueno + + * rsa.c (rsa_verify): Use CMP if given, to check the decrypted + sig. + + * pubkey.c (sexp_to_enc, sexp_data_to_mpi): Factor out + CTX initialization to ... + (init_encoding_ctx): .. new. + (gcry_pk_verify): Pass verify func and the arg to pubkey_verify. + (pss_encode, pss_verify, pss_verify_cmp): New. + +2011-05-23 Daiki Ueno + + * pubkey.c (pkcs1_decode_for_encryption, oaep_decode): Fix memleak + when gcry_mpi_print fails. + +2011-05-18 Daiki Ueno + + * pubkey.c (sexp_data_to_mpi): Factor some code out to ... + (pkcs1_encode_for_encryption): .. new, + (pkcs1_encode_for_signature): .. new. + (pkcs1_decode_for_encryption): New. + (gcry_pk_decrypt): Do un-padding for PKCS#1 as well as OAEP. + (sexp_to_enc): Abolish "unpad" flag, which is not necessary since + we can do un-padding implicitly when "pkcs1" or "oaep" is given. + +2011-05-11 Werner Koch + + * pubkey.c (sexp_to_enc, sexp_data_to_mpi): Set LABEL to NULL + after free. + (sexp_to_enc, sexp_data_to_mpi): Do not allow multiple encoding + flags. + (oaep_encode, oaep_decode, sexp_to_key, sexp_to_sig) + (sexp_to_enc, sexp_data_to_mpi, gcry_pk_encrypt, gcry_pk_sign) + (gcry_pk_genkey, _gcry_pk_get_elements): Replace access to ERRNO + by gpg_err_code_from_syserror. + +2011-05-11 Daiki Ueno + + * pubkey.c (sexp_data_to_mpi): Factor some code out to ... + (get_hash_algo): .. new. + (mgf1, oaep_encode, oaep_decode): New. + (sexp_to_enc): Add arg CTX. Remove arg RET_WANT_PKCS1. Support + OAEP. + (sexp_data_to_mpi): Add arg CTX. Support OAEP. + (gcry_pk_encrypt): Pass a CTX to sexp_data_to_mpi. + (gcry_pk_decrypt): Pass a CTX tp sexp_to_enc and replace + WANT_PKCS1. Implement unpadding for OAEP. + (gcry_pk_sign): Pass NULL for CTX arg of sexp_data_to_mpi. + (gcry_pk_verify): Ditto. + +2011-04-19 Werner Koch + + * cipher.c (gcry_cipher_open): Replace gpg_err_code_from_errno by + gpg_err_code_from_syserror. + +2011-04-11 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Avoid double free of L2. + + * cipher.c (_gcry_cipher_setctr): Clear unused lastiv info. + (gcry_cipher_ctl) : Implement by calling + _gcry_cipher_setctr. + (do_ctr_encrypt): Save last counter and reuse it. + + * cipher.c (do_ctr_encrypt): Allow arbitrary length inputs to + match the 1.4 behaviour. + +2011-04-04 Werner Koch + + * ecc.c (compute_keygrip): Release L1 while parsing "curve". + + * pubkey.c (gcry_pk_get_keygrip): Always release NAME and L2. + Reported by Ben Kibbey. + +2011-03-28 Werner Koch + + * primegen.c (_gcry_generate_elg_prime): Make sure that PRIME is + NULL if the called func ever returns an error. + + * pubkey.c (gcry_pk_decrypt): Remove unused var PUBKEY. + +2011-03-09 Werner Koch + + * kdf.c: New. + +2011-02-22 Werner Koch + + * rijndael.c (aesni_cleanup_2_4): New. + (aesenc_xmm1_xmm0, do_aesni_ctr_4): New. + (_gcry_aes_ctr_enc): New. + * cipher.c (struct gcry_cipher_handle): Add CTR_ENC. Move field + CTR into an u_ctr union and adjust all users. + (gcry_cipher_open): Use _gcry_aes_ctr_enc. + (do_ctr_encrypt): Use bulk mode. + +2011-02-18 Werner Koch + + * rijndael.c (u32_a_t): New. + (do_encrypt_aligned, do_encrypt_aligned): Use the new type to + avoid problems with strict aliasing rules. + +2011-02-16 Werner Koch + + * rijndael.c (do_aesni_cfb) [USE_AESNI]: New. + (_gcry_aes_cfb_enc, _gcry_aes_cfb_dec) [USE_AESNI]: Use new fucntion. + +2011-02-15 Werner Koch + + * rijndael.c (do_aesni_enc_aligned, do_aesni_dec_aligned): Use + movdqa for the key but keep using movdqu for the data. + (do_aesni): Remove alignment detection. Don't burn the stack. + (aesni_prepare, aesni_cleanup): New macros. + (rijndael_encrypt, _gcry_aes_cfb_enc, _gcry_aes_cbc_enc) + (rijndael_decrypt, _gcry_aes_cfb_dec, _gcry_aes_cbc_dec): Use + these macros. Don't burn the stack in the USE_AESNI case. + (do_setkey): Add disabled code to use aeskeygenassist. + +2011-02-14 Werner Koch + + * rijndael.c (ATTR_ALIGNED_16): New + (do_aesni): Do not copy if already aligned. + (do_encrypt, do_decrypt): Ditto. + (rijndael_decrypt, rijndael_encrypt): Increase stack burning amount. + + * rijndael.c (RIJNDAEL_context): Reorder fields. Change fieldname + ROUNDS to rounds. Move padlock_key into u1. + (keySched, keySched2): Rename macros to keyscherr and keyschdec + and change all users. + (padlockkey): New macro. Change all users of padlock_key. + * cipher.c (NEED_16BYTE_ALIGNED_CONTEXT): Always define if using gcc. + (struct gcry_cipher_handle): Align U_IV to at least 16 byte. + +2011-02-13 Werner Koch + + * rijndael.c (USE_AESNI): New. Define for ia32 and gcc >= 4. + (m128i_t) [USE_AESNI]: New. + (RIJNDAEL_context) [USE_AESNI]: Add field use_aesni. + (do_setkey): Set USE_AESNI for all key lengths. + (prepare_decryption) [USE_AESNI]: Use aesimc instn if requested. + (do_aesni_enc_aligned, do_aesni_dec_aligned) + (do_aesni) [USE_AESNI]: New. + (rijndael_encrypt, _gcry_aes_cfb_enc, _gcry_aes_cbc_enc) + (rijndael_decrypt, _gcry_aes_cfb_dec) + (_gcry_aes_cbc_dec) [USE_AESNI]: Use do_aesni. + +2011-02-01 Werner Koch + + * pubkey.c (gcry_pk_get_curve): New. + (sexp_to_key): Add arg OVERRIDE_ELEMS. + (sexp_elements_extract_ecc): Allow for params only. + (gcry_pk_get_param): New. + * ecc.c (ecc_get_curve): New. + (ecc_get_param_sexp): New. + +2011-01-28 Werner Koch + + * pubkey.c (gcry_pk_genkey): Hack to insert the used curve name. + +2011-01-27 Werner Koch + + * ecc.c (fill_in_curve): Remove. + (generate_curve): Rename to .. + (fill_in_curve): this. Remove setting of NAME_OID. + (ecc_encrypt_raw): Change name of arg DATA to K for better + readability. Use ECC_public_key instead of ECC_secret_key. + Require a caller to pass a complete pkey array. + (ecc_decrypt_raw): Require a caller to pass a complete skey array. + (elliptic_curve_t): Add field NAME. + (fill_in_curve): Set field. + (generate_key): Add arg R_USED_CURVE. + (ecc_generate_ext): Return used curve name. + +2011-01-13 Andrey Jivsov (wk) + + * ecc.c (ec2os): Do not free passed parameters X and Y. Adjust + callers. + (ecc_encrypt_raw, ecc_decrypt_raw): New. + (ecdh_names, _gcry_pubkey_spec_ecdh): New. + * pubkey.c (pubkey_table): Support ECDH. + +2010-08-19 Werner Koch + + * cipher.c (gcry_cipher_open): Remove double release of the module. + Fixes bug#1263. + +2010-06-10 Jeff Johnson (wk) + + * ecc.c (ecc_generate_ext): Parse transient-key flag. + (generate_key): Add arg TRANSIENT_KEY and use it to set the random + level. + +2010-04-12 Brad Hards (wk) + + Spelling fixes. + +2010-03-26 Werner Koch + + * tiger.c (asn): Unfetter the old TIGER from an OID. + (TIGER_CONTEXT): Add field VARIANT. + (tiger_init): Factor code out to ... + (do_init): New. + (tiger1_init, tiger2_init): New. + (_gcry_digest_spec_tiger1, _gcry_digest_spec_tiger2): New. + * md.c (digest_table): Add TIGER1 and TIGER2 variants. + +2009-12-11 Werner Koch + + * sha256.c (Cho, Maj, Sum0, Sum1): Turn macros into inline + functions. + (transform): Partly unroll to interweave the chain variables + + * sha512.c (ROTR, Ch, Maj, Sum0, Sum1): Turn macros into inline + functions. + (transform): Partly unroll to interweave the chain variables. + Suggested by Christian Grothoff. + +2009-12-10 Werner Koch + + * Makefile.am (o_flag_munging): New. + (tiger.o, tiger.lo): Use it. + + * cipher.c (do_ctr_encrypt): Add arg OUTBUFLEN. Check for + suitable value. Add check for valid inputlen. Wipe temporary + memory. + (do_ctr_decrypt): Likewise. + (do_cbc_encrypt, do_cbc_decrypt): Add arg OUTBUFLEN. Check for + suitable value. Move check for valid inputlen to here; change + returned error from INV_ARG to INV_LENGTH. + (do_ecb_encrypt, do_ecb_decrypt): Ditto. + (do_cfb_encrypt, do_cfb_decrypt): Ditto. + (do_ofb_encrypt, do_ofb_decrypt): Ditto. + (cipher_encrypt, cipher_encrypt): Adjust for above changes. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Simplify. + +2009-12-09 Werner Koch + + * cipher.c (gcry_cipher_open): Allow for GCRY_CIPHER_MODE_AESWRAP. + (cipher_encrypt, cipher_decrypt): Ditto. + (do_aeswrap_encrypt, do_aeswrap_decrypt): New. + (struct gcry_cipher_handle): Add field marks. + (cipher_setkey, cipher_setiv): Update marks flags. + (cipher_reset): Reset marks. + (cipher_encrypt, cipher_decrypt): Add new arg OUTBUFLEN. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Pass outbuflen to + cipher_encrypt. Replace GPG_ERR_TOO_SHORT by + GPG_ERR_BUFFER_TOO_SHORT. + +2009-08-21 Werner Koch + + * dsa.c (dsa_generate_ext): Release retfactors array before + setting it to NULL. Reported by Daiko Ueno. + +2009-07-02 Werner Koch + + * md.c (md_read): Fix incomplete check for NULL. + Reported by Fabian Kail. + +2009-03-31 Werner Koch + + * rsa.c (rsa_check_secret_key): Return GPG_ERR_BAD_SECKEY and not + GPG_ERR_PUBKEY_ALGO. + +2009-02-16 Werner Koch + + * rsa.c (generate_x931): Do not initialize TBL with automatic + variables. + * whirlpool.c, tiger.c, sha256.c, sha1.c, rmd160.c, md5.c + * md4.c, crc.c: Remove memory.h. This is garbage from gnupg. + Reported by Dan Fandrich. + +2009-01-22 Werner Koch + + * ecc.c (compute_keygrip): Remove superfluous const. + +2009-01-06 Werner Koch + + * rmd160.c (oid_spec_rmd160): Add TeleTrust identifier. + +2008-12-10 Werner Koch + + * dsa.c (generate): Add arg DOMAIN and use it if specified. + (generate_fips186): Ditto. + (dsa_generate_ext): Parse and check the optional "domain" + parameter and pass them to the generate functions. + + * rijndael.c (rijndael_names): Add "AES128" and "AES-128". + (rijndael192_names): Add "AES-192". + (rijndael256_names): Add "AES-256". + +2008-12-05 Werner Koch + + * dsa.c (generate): Add arg TRANSIENT_KEY and use it to detrmine + the RNG quality needed. + (dsa_generate_ext): Parse the transient-key flag und pass it to + generate. + +2008-11-28 Werner Koch + + * dsa.c (generate_fips186): Add arg DERIVEPARMS and use the seed + value if available. + + * primegen.c (_gcry_generate_fips186_2_prime): Fix inner p loop. + +2008-11-26 Werner Koch + + * primegen.c (_gcry_generate_fips186_3_prime): New. + * dsa.c (generate_fips186): Add arg USE_FIPS186_2. + (dsa_generate_ext): Parse new flag use-fips183-2. + +2008-11-25 Werner Koch + + * dsa.c (generate_fips186): New. + (dsa_generate_ext): Use new function if derive-parms are given or + if in FIPS mode. + * primegen.c (_gcry_generate_fips186_2_prime): New. + +2008-11-24 Werner Koch + + * pubkey.c (gcry_pk_genkey): Insert code to output extrainfo. + (pubkey_generate): Add arg R_EXTRAINFO and pass it to the extended + key generation function. + * rsa.c (gen_x931_parm_xp, gen_x931_parm_xi): New. + (generate_x931): Generate params if not given. + (rsa_generate_ext): Parse use-x931 flag. Return p-q-swapped + indicator. + * dsa.c (dsa_generate_ext): Put RETFACTORS into R_EXTRAINFO if + possible. + + * pubkey.c (gcry_pk_genkey): Remove parsing of almost all + parameters and pass the parameter S-expression to pubkey_generate. + (pubkey_generate): Simplify by requitring modules to parse the + parameters. Remove the special cases for Elgamal and ECC. + (sexp_elements_extract_ecc): Add arg EXTRASPEC and use it. Fix + small memory leak. + (sexp_to_key): Pass EXTRASPEC to sexp_elements_extract_ecc. + (pubkey_table) [USE_ELGAMAL]: Add real extraspec. + * rsa.c (rsa_generate_ext): Adjust for new calling convention. + * dsa.c (dsa_generate_ext): Ditto. + * elgamal.c (_gcry_elg_generate): Ditto. Rename to elg_generate_ext. + (elg_generate): New. + (_gcry_elg_generate_using_x): Remove after merging code with + elg_generate_ext. + (_gcry_pubkey_extraspec_elg): New. + (_gcry_elg_check_secret_key, _gcry_elg_encrypt, _gcry_elg_sign) + (_gcry_elg_verify, _gcry_elg_get_nbits): Make static and remove + _gcry_ prefix. + * ecc.c (_gcry_ecc_generate): Rename to ecc_generate_ext and + adjust for new calling convention. + (_gcry_ecc_get_param): Rename to ecc_get_param and make static. + (_gcry_pubkey_extraspec_ecdsa): Add ecc_generate_ext and + ecc_get_param. + +2008-11-20 Werner Koch + + * pubkey.c (pubkey_generate): Add arg DERIVEPARMS. + (gcry_pk_genkey): Parse derive-parms and pass it to above. + * rsa.c (generate_x931): New. + (rsa_generate_ext): Add arg DERIVEPARMS and call new function in + fips mode or if DERIVEPARMS is given. + * primegen.c (_gcry_derive_x931_prime, find_x931_prime): New. + +2008-11-19 Werner Koch + + * rsa.c (rsa_decrypt): Use gcry_create_nonce for blinding. + (generate): Rename to generate_std. + +2008-11-05 Werner Koch + + * md.c (md_open): Use a switch to set the Bsize. + (prepare_macpads): Fix long key case for SHA384 and SHA512. + + * cipher.c (gcry_cipher_handle): Add field EXTRASPEC. + (gcry_cipher_open): Set it. + (gcry_cipher_ctl): Add private control code to disable weak key + detection and to return the current input block. + * des.c (_tripledes_ctx): Add field FLAGS. + (do_tripledes_set_extra_info): New. + (_gcry_cipher_extraspec_tripledes): Add new function. + (do_tripledes_setkey): Disable weak key detection. + +2008-10-24 Werner Koch + + * md.c (digest_table): Allow MD5 in fips mode. + (md_register_default): Take special action for MD5. + (md_enable, gcry_md_hash_buffer): Ditto. + +2008-09-30 Werner Koch + + * rijndael.c (do_setkey): Properly align "t" and "tk". + (prepare_decryption): Properly align "w". Fixes bug #936. + +2008-09-18 Werner Koch + + * pubkey.c (gcry_pk_genkey): Parse domain parameter. + (pubkey_generate): Add new arg DOMAIN and remove special case for + DSA with qbits. + * rsa.c (rsa_generate): Add dummy args QBITS, NAME and DOMAIN and + rename to rsa_generate_ext. Change caller. + (_gcry_rsa_generate, _gcry_rsa_check_secret_key) + (_gcry_rsa_encrypt, _gcry_rsa_decrypt, _gcry_rsa_sign) + (_gcry_rsa_verify, _gcry_rsa_get_nbits): Make static and remove + _gcry_ prefix. + (_gcry_pubkey_spec_rsa, _gcry_pubkey_extraspec_rsa): Adjust names. + * dsa.c (dsa_generate_ext): New. + (_gcry_dsa_generate): Replace code by a call to dsa_generate. + (_gcry_dsa_check_secret_key, _gcry_dsa_sign, _gcry_dsa_verify) + (_gcry_dsa_get_nbits): Make static and remove _gcry prefix. + (_gcry_dsa_generate2): Remove. + (_gcry_pubkey_spec_dsa): Adjust to name changes. + (_gcry_pubkey_extraspec_rsa): Add dsa_generate_ext. + +2008-09-16 Werner Koch + + * ecc.c (run_selftests): Add arg EXTENDED. + +2008-09-12 Werner Koch + + * rsa.c (test_keys): Do a bad case signature check. + * dsa.c (test_keys): Do a bad case check. + + * cipher.c (_gcry_cipher_selftest): Add arg EXTENDED and pass it + to the called tests. + * md.c (_gcry_md_selftest): Ditto. + * pubkey.c (_gcry_pk_selftest): Ditto. + * rijndael.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftest_fips_128): Add arg EXTENDED and run only one test + non-extended mode. + (selftest_fips_192): Add dummy arg EXTENDED. + (selftest_fips_256): Ditto. + * hmac-tests.c (_gcry_hmac_selftest): Ditto. + (run_selftests): Ditto. + (selftests_sha1): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha224, selftests_sha256): Ditto. + (selftests_sha384, selftests_sha512): Ditto. + * sha1.c (run_selftests): Add arg EXTENDED and pass it to the + called test. + (selftests_sha1): Add arg EXTENDED and run only one test + non-extended mode. + * sha256.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftests_sha224): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha256): Ditto. + * sha512.c (run_selftests): Add arg EXTENDED and pass it to the + called tests. + (selftests_sha384): Add arg EXTENDED and run only one test + non-extended mode. + (selftests_sha512): Ditto. + * des.c (run_selftests): Add arg EXTENDED and pass it to the + called test. + (selftest_fips): Add dummy arg EXTENDED. + * rsa.c (run_selftests): Add dummy arg EXTENDED. + + * dsa.c (run_selftests): Add dummy arg EXTENDED. + + * rsa.c (extract_a_from_sexp): New. + (selftest_encr_1024): Check that the ciphertext does not match the + plaintext. + (test_keys): Improve tests and return an error status. + (generate): Return an error if test_keys fails. + * dsa.c (test_keys): Add comments and return an error status. + (generate): Return an error if test_keys failed. + +2008-09-11 Werner Koch + + * rsa.c (_gcry_rsa_decrypt): Return an error instead of calling + BUG in case of a practically impossible condition. + (sample_secret_key, sample_public_key): New. + (selftest_sign_1024, selftest_encr_1024): New. + (selftests_rsa): Implement tests. + * dsa.c (sample_secret_key, sample_public_key): New. + (selftest_sign_1024): New. + (selftests_dsa): Implement tests. + +2008-09-09 Werner Koch + + * hmac-tests.c (selftests_sha1): Add tests. + (selftests_sha224, selftests_sha384, selftests_sha512): Make up tests. + + * hash-common.c, hash-common.h: New. + * sha1.c (selftests_sha1): Add 3 tests. + * sha256.c (selftests_sha256, selftests_sha224): Ditto. + * sha512.c (selftests_sha512, selftests_sha384): Ditto. + +2008-08-29 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Remove the special case for RSA + and check whether a custom computation function has been setup. + * rsa.c (compute_keygrip): New. + (_gcry_pubkey_extraspec_rsa): Setup this function. + * ecc.c (compute_keygrip): New. + (_gcry_pubkey_extraspec_ecdsa): Setup this function. + +2008-08-28 Werner Koch + + * cipher.c (cipher_decrypt, cipher_encrypt): Return an error if + mode NONE is used. + (gcry_cipher_open): Allow mode NONE only with a debug flag set and + if not in FIPS mode. + +2008-08-26 Werner Koch + + * pubkey.c (pubkey_generate): Add arg KEYGEN_FLAGS. + (gcry_pk_genkey): Implement new parameter "transient-key" and + pass it as flags to pubkey_generate. + (pubkey_generate): Make use of an ext_generate function. + * rsa.c (generate): Add new arg transient_key and pass appropriate + args to the prime generator. + (_gcry_rsa_generate): Factor all code out to ... + (rsa_generate): .. new func with extra arg KEYGEN_FLAGS. + (_gcry_pubkey_extraspec_ecdsa): Setup rsa_generate. + * primegen.c (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Add new arg RANDOM_LEVEL. + +2008-08-21 Werner Koch + + * primegen.c (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Use a constant macro for the random + level. + +2008-08-19 Werner Koch + + * pubkey.c (sexp_elements_extract_ecc) [!USE_ECC]: Do not allow + allow "curve" parameter. + +2008-08-15 Werner Koch + + * pubkey.c (_gcry_pk_selftest): New. + * dsa.c (selftests_dsa, run_selftests): New. + * rsa.c (selftests_rsa, run_selftests): New. + * ecc.c (selftests_ecdsa, run_selftests): New. + + * md.c (_gcry_md_selftest): New. + * sha1.c (run_selftests, selftests_sha1): New. + * sha256.c (selftests_sha224, selftests_sha256, run_selftests): New. + * sha512.c (selftests_sha384, selftests_sha512, run_selftests): New. + + * des.c (selftest): Remove static variable form selftest. + (des_setkey): No on-the-fly self test in fips mode. + (tripledes_set3keys): Ditto. + + * cipher.c (_gcry_cipher_setkey, _gcry_cipher_setiv): + + * dsa.c (generate): Bail out in fips mode if NBITS is less than 1024. + * rsa.c (generate): Return an error code if the the requested size + is less than 1024 and we are in fpis mode. + (_gcry_rsa_generate): Take care of that error code. + + * ecc.c (generate_curve): In fips mode enable only NIST curves. + + * cipher.c (_gcry_cipher_selftest): New. + + * sha512.c (_gcry_digest_extraspec_sha384) + (_gcry_digest_extraspec_sha512): New. + * sha256.c (_gcry_digest_extraspec_sha224) + (_gcry_digest_extraspec_sha256): New. + * sha1.c (_gcry_digest_extraspec_sha1): New. + * ecc.c (_gcry_pubkey_extraspec_ecdsa): New. + * dsa.c (_gcry_pubkey_extraspec_dsa): New. + * rsa.c (_gcry_pubkey_extraspec_rsa): New. + * rijndael.c (_gcry_cipher_extraspec_aes) + (_gcry_cipher_extraspec_aes192, _gcry_cipher_extraspec_aes256): New. + * des.c (_gcry_cipher_extraspec_tripledes): New. + + * cipher.c (gcry_cipher_register): Rename to _gcry_cipher_register. + Add arg EXTRASPEC. + (dummy_extra_spec): New. + (cipher_table_entry): Add extraspec field. + * md.c (_gcry_md_register): Rename to _gcry_md_register. Add + arg EXTRASPEC. + (dummy_extra_spec): New. + (digest_table_entry): Add extraspec field. + * pubkey.c (gcry_pk_register): Rename to _gcry_pk_register. Add + arg EXTRASPEC. + (dummy_extra_spec): New. + (pubkey_table_entry): Add extraspec field. + + * ac.c: Let most public functions return GPG_ERR_UNSUPPORTED in + fips mode. + + * pubkey.c (pubkey_table_entry): Add field FIPS_ALLOWED and mark + appropriate algorithms. + (dummy_generate, dummy_check_secret_key, dummy_encrypt) + (dummy_decrypt, dummy_sign, dummy_verify, dummy_get_nbits): Signal + a fips error when used. + (gcry_pk_register): In fips mode do not allow to register new + algorithms. + + * md.c (digest_table): Add field FIPS_ALLOWED and mark appropriate + algorithms. + (md_register_default): In fips mode register only fips algorithms. + (gcry_md_register): In fips mode do not allow to register new + algorithms. + (gcry_md_get): Signal a fips error if called. + (gcry_md_hash_buffer): Do not allow rmd160 when not in fips mode. + (md_start_debug): Disable in fips_mode. + + * md.c (gcry_md_register_default): Rename to .. + (md_register_default): .. this. + (md_digest): Remove this commented fucntion. + * pubkey.c (gcry_pk_register_default): Rename to .. + (pk_register_default): .. this. + + * cipher.c (cipher_table_entry): Add field FIPS_ALLOWED. + (gcry_cipher_register_default): Register only fips approved + algorithms. + (gcry_cipher_register): Do not allow to register new ciphers. + (cipher_setiv): Signal fips error. + + * cipher (gcry_cipher_register_default): Rename to .. + (cipher_register_default): .. this. + (REGISTER_DEFAULT_CIPHERS): Adjust for that change. + +2008-07-05 Werner Koch + + * random-daemon.c, random.h, rndhw.c, rndunix.c, rand-internal.h + * random.c, rndegd.c, rndlinux.c, rndw32.c: Move to ../cipher. + * Makefile.am: Remove random stuff. + +2008-06-24 Szakats Istvan (wk) + + * ac.c (_gcry_ac_key_destroy, _gcry_ac_key_pair_generate): Relase + some more memory. + +2008-04-22 Werner Koch + + * rijndael.c (_gcry_aes_cfb_enc, _gcry_aes_cbc_enc) + (_gcry_aes_cfb_dec, _gcry_aes_cbc_dec): Use Padlock if possible. + +2008-04-18 Werner Koch + + * sha1.c (transform_aligned): Remove. That is will obviosuly not + work because we need a scratch working area and our internal API + does not allow to modify the buffers. + + * rijndael.c: Factor tables out to .. + * rijndael-tables.h: .. new. + + * ac.c (ac_data_extract): Make static. + + * camellia.h [HAVE_CONFIG_H]: Include config.h. + + * rndw32.c (registry_poll): Only print the performance data + problem warning once. Suggested by Simon Josefsson. + +2008-03-19 Werner Koch + + * cipher.c (gcry_cipher_open) [USE_AES]: Init bulk encryption only + if requested. Suggested by Dirk Stoecker. + +2008-03-18 Werner Koch + + * sha1.c: Include stdint.h. + (transform): Add arg NBLOCKS so that we can work on more than one + block and avoid updates of the chaining variables. Changed all + callers to use 1. + (sha1_write): Replace loop around transform. + (transform_aligned) [WORDS_BIGENDIAN]: New. + (TRANSFORM): New macro to replace all direct calls of transform. + +2008-03-17 Werner Koch + + * rijndael.c (_gcry_aes_cfb_dec): New. + (do_encrypt): Factor code out to .. + (do_encrypt_aligned): .. New. + (_gcry_aes_cfb_enc, _gcry_aes_cfb_dec): Use new function. + (do_decrypt): Factor code out to .. + (do_decrypt_aligned): .. new. + (_gcry_aes_cbc_enc, _gcry_aes_cbc_dec): New. + * cipher.c (struct gcry_cipher_handle): Put field IV into new + union U_IV to enforce proper alignment. Change all users. + (do_cfb_decrypt): Optimize. + (do_cbc_encrypt, do_cbc_decrypt): Optimize. + +2008-03-15 Werner Koch + + * rijndael.c (_gcry_aes_cfb_enc): New. + * cipher.c (struct gcry_cipher_handle): Add field ALGO and BULK. + (gcry_cipher_open): Set ALGO and BULK. + (do_cfb_encrypt): Optimize. + +2008-02-18 Werner Koch + + * rsa.c (_gcry_rsa_verify) [IS_DEVELOPMENT_VERSION]: Print + intermediate results. + +2008-01-08 Werner Koch + + * random.c (add_randomness): Do not just increment + POOL_FILLED_COUNTER but update it by the actual amount of data. + +2007-12-13 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Support SHA-224. + +2007-12-05 Werner Koch + + * rijndael.c (USE_PADLOCK): Depend on ENABLE_PADLOCK_SUPPORT. + * rndhw.c (USE_PADLOCK): Ditto + + * rsa.c (secret): Fixed condition test for using CRT. Reported by + Dean Scarff. Fixes bug#864. + (_gcry_rsa_check_secret_key): Return an erro if the optional + parameters are missing. + * pubkey.c (sexp_elements_extract): Add arg ALGO_NAME. Changed all + callers to pass NULL. Add hack to allow for optional RSA + parameters. + (sexp_to_key): Pass algo name to sexp_elements_extract. + +2007-12-03 Werner Koch + + * random.c (gcry_random_add_bytes): Implement it. + * rand-internal.h (RANDOM_ORIGIN_EXTERNAL): New. + +2007-11-30 Werner Koch + + * rndhw.c: New. + * rndlinux.c (_gcry_rndlinux_gather_random): Try to read 50% + directly from the hwrng. + * random.c (do_fast_random_poll): Also run the hw rng fast poll. + (_gcry_random_dump_stats): Tell whether the hw rng failed. + +2007-11-29 Werner Koch + + * rijndael.c (USE_PADLOCK): Define new macro used for ia32. + (RIJNDAEL_context) [USE_PADLOCK]: Add fields USE_PADLOCK and + PADLOCK_KEY. + (do_setkey) [USE_PADLOCK]: Enable padlock if available for 128 bit + AES. + (do_padlock) [USE_PADLOCK]: New. + (rijndael_encrypt, rijndael_decrypt) [USE_PADLOCK]: Divert to + do_padlock. + * cipher.c (cipher_context_alignment_t): New. Use it in this + module in place of PROPERLY_ALIGNED_TYPE. + (NEED_16BYTE_ALIGNED_CONTEXT): Define macro for ia32. + (struct gcry_cipher_handle): Add field HANDLE_OFFSET. + (gcry_cipher_open): Take care of increased alignment requirements. + (gcry_cipher_close): Ditto. + +2007-11-28 Werner Koch + + * sha256.c (asn224): Fixed wrong template. It happened due to a + bug in RFC4880. SHA-224 is not in the stable version of libgcrypt + so the consequences are limited to users of this devel version. + +2007-10-31 Werner Koch + + * ac.c (gcry_ac_data_new): Remove due to the visibility wrapper. + (gcry_ac_data_destroy, gcry_ac_data_copy, gcry_ac_data_length) + (gcry_ac_data_set, gcry_ac_data_get_name, gcry_ac_data_get_index) + (gcry_ac_data_to_sexp, gcry_ac_data_from_sexp) + (gcry_ac_data_clear, gcry_ac_io_init, gcry_ac_open) + (gcry_ac_close, gcry_ac_key_init, gcry_ac_key_pair_generate) + (gcry_ac_key_pair_extract, gcry_ac_key_destroy) + (gcry_ac_key_pair_destroy, gcry_ac_key_data_get) + (gcry_ac_key_test, gcry_ac_key_get_nbits, gcry_ac_key_get_grip) + (gcry_ac_data_encrypt, gcry_ac_data_decrypt, gcry_ac_data_sign) + (gcry_ac_data_verify, gcry_ac_data_encode, gcry_ac_data_decode) + (gcry_ac_mpi_to_os, gcry_ac_mpi_to_os_alloc, gcry_ac_os_to_mpi) + (gcry_ac_data_encrypt_scheme, gcry_ac_data_decrypt_scheme) + (gcry_ac_data_sign_scheme, gcry_ac_data_verify_scheme) + (gcry_ac_io_init_va): Ditto. + (gcry_ac_id_to_name, gcry_ac_name_to_id): Remove as these + deprecated functions are now implemented by visibility.c. + +2007-10-26 Werner Koch + + * rndw32.c: Disable debug flag. + +2007-10-25 Werner Koch + + * rndw32.c: Updated from current cryptlib snapshot and modified + for our use. Removed support from pre NT systems. + (slow_gatherer_windows95): Remove. + (_gcry_rndw32_gather_random): Require an NT platform. + (init_system_rng, read_system_rng, read_mbm_data): New. + (slow_gatherer_windowsNT): Rename to ... + (slow_gatherer): .. this. Read system RNG and MBM. + (registry_poll): New with code factored out from slow_gatherer. + +2007-08-23 Werner Koch + + * random.c (pool_filled_counter): New. + (add_randomness): Use it. + +2007-08-22 Werner Koch + + * rndw32.c, rndunix.c: Switched to LGPL. + +2007-05-30 Werner Koch + + * camellia.h, camellia.c: Replace by new LGPL version and adjusted + camellia.h. + +2007-05-09 Marcus Brinkmann + + * ac.c (_gcry_ac_io_init_va, _gcry_ac_io_write, _gcry_ac_io_read): + Adjust users of gcry_ac_io_t because union is not anonymous + anymore. + +2007-05-02 Werner Koch + + * camellia-glue.c (camellia_setkey, camellia_encrypt) + (camellia_decrypt): Recalculated used stack size in called + functions. + * camellia.h: Redefine external symbols. + +2007-05-02 David Shaw + + * Makefile.am, cipher.c: Add Camellia. + + * camellia-glue.c: New. The necessary glue to interface libgcrypt + to the stock NTT Camellia distribution. + + * camellia.h, camellia.c: The stock NTT Camellia distribution + (GPL). + +2007-04-30 David Shaw + + * cipher.c: Use #if instead of #ifdef as configure defines the + USE_cipher defines as 0 for disabled. + +2007-04-30 Werner Koch + + * rndegd.c (_gcry_rndegd_set_socket_name): New. + +2007-04-30 Marcus Brinkmann + + * ecc.c (ec2os): Fix relocation of short numbers. + + * ecc.c (generate_key): Do not allocate D, which will be allocated + by GEN_K. Remove G. Fix test if g_x, g_y resp. q_x, q_y are + requested. + (_gcry_ecc_generate): Release unneeded members of SK. + * pubkey.c (sexp_to_key): Release NAME. + +2007-04-28 Marcus Brinkmann + + * ac.c (gcry_ac_mpi): Remove member NAME_PROVIDED. + (ac_data_mpi_copy, _gcry_ac_data_set, _gcry_ac_data_get_name) + (_gcry_ac_data_get_index, ac_data_construct): Adjust handling of + NAME accordingly. + +2007-04-20 Werner Koch + + * ecc.c (domain_parms): Add standard brainpool curves. + +2007-04-18 Werner Koch + + * ecc.c (generate_curve): Implement alias mechanism. + + * pubkey.c (sexp_elements_extract_ecc): New. + (sexp_to_key): Add special case for ecc. + (sexp_to_key, sexp_to_sig, sexp_to_enc, gcry_pk_genkey): Replace + name_terminated stuff by a call to _gcry_sexp_nth_string. + (gcry_pk_get_keygrip): Ditto. + +2007-04-16 Werner Koch + + * ecc.c (_gcry_ecc_generate): Renamed DUMMY to CURVE and use it. + +2007-04-13 Marcus Brinkmann + + * ac.c (ac_data_construct): Cast const away to suppress compiler + warning. + + * ecc.c (ecc_generate): Avoid compiler warning for unused argument + DUMMY. + (ecc_verify): Avoid compiler warning for unused arguments CMP and + OPAQUEV. + +2007-04-06 Werner Koch + + * sha1.c (oid_spec_sha1): Add another oid from X9.62. + +2007-03-28 Werner Koch + + * pubkey.c (gcry_pk_genkey): Do not issue misc-key-info if it is + empty. + (gcry_pk_genkey): New parameter "curve". + + * ecc.c: Entirely rewritten with only a few traces of the old + code left. + (_gcry_ecc_generate): New. + (generate_key) New arg NAME. + (generate_curve): Ditto. Return actual number of NBITS. + +2007-03-26 Werner Koch + + * pubkey.c (gcry_pk_genkey): Increase size of SKEY array and add a + runtime bounds check. + +2007-03-23 Werner Koch + + * ecc.c (ecc_ctx_init, ecc_ctx_free, ecc_mod, ecc_mulm): New. + (duplicate_point, sum_points, escalar_mult): Don't use a + copy of base->p. Replaced all mpi_mulm by ecc_mulm so that we can + experiment with different algorithms. + (generate_key, check_secret_key, sign, verify): Initialize a + computation context for use by ecc_mulm. + +2007-03-22 Werner Koch + + * pubkey.c (pubkey_table): Initialize ECC. + * Makefile.am (EXTRA_libcipher_la_SOURCES): Add ecc.c. + * ecc.c: New. Heavily reformatted and changed for use in libgcrypt. + (point_init): New. + (escalar_mult): Make arg R the first arg to be similar to the mpi + functions. + (duplicate_point): Ditto + (sum_points): Ditto + (sign, verify): Remove unneeded copy operations. + (sum_points): Removed memory leaks and optimized some compares. + (verify): Simplified input check. + +2007-03-14 Werner Koch + + * random.c (MASK_LEVEL): Removed macro as it was used only at one + place. Open coded it there. + (gcry_randomize, _gcry_update_random_seed_file) + (_gcry_fast_random_poll): Factor lock code out to .. + (lock_pool, unlock_pool): .. new. + (initialize): Look the pool while allocating. + (read_random_source, do_fast_random_poll): Moved intialization to ... + (initialize): .. here. + (_gcry_enable_quick_random_gen): No more need for initialization. + (is_initialized): Moved this global flag to .. + (initialize): .. here and changed all users to unconditionally call + initialize. + (add_randomness): Remove initalization here. It simply can't + happen. + + * random.c (enum random_origins): Moved to .. + * rand-internal.h: .. here. + * rndunix.c (_gcry_rndunix_gather_random): Use enum in prototype + for ORIGIN and renamed REQUESTOR to ORIGIN. + * rndegd.c (_gcry_rndegd_gather_random): Ditto. + * rndlinux.c (_gcry_rndlinux_gather_random): Ditto. + * rndw32.c (_gcry_rndw32_gather_random): Ditto. + (_gcry_rndw32_gather_random_fast): Ditto. + +2007-03-13 Werner Koch + + * random.c (enum random_origins): New. + (add_randomness): Renamed arg SOURCE to ORIGIN. + (read_random_source): Renamed arg REQUESTOR to ORIGIN. + (getfnc_gather_random): Removed static variable because this + function is only called one and thus we don't need this + optimization. + (_gcry_quick_random_gen): Removed and replaced by.. + (_gcry_enable_quick_random_gen): .. this. It is onlyu used to + enable it and it does not make sense to disable it later. Changed + the only one caller too. + (get_random_bytes): Removed. + (gcry_random_bytes, gcry_random_bytes_secure): Implement in terms + of gcry_randomize. + * random-daemon.c (_gcry_daemon_get_random_bytes): Removed. + +2007-02-23 Werner Koch + + * elgamal.c (generate): Removed unused variable TEMP. + (test_keys): New arg NODIE. + (generate_using_x, _gcry_elg_generate_using_x): New. + * pubkey.c (pubkey_generate): New arg XVALUE and direct call to + the new elgamal generate fucntion. + (gcry_pk_genkey): Parse the new "xvalue" tag. + +2007-02-22 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Handle dynamically allocated + algorithms. Suggested by Neil Dunbar. Fixes bug#596. + + * rndw32.c (_gcry_rndw32_gather_random_fast): Make it return void. + + * cipher.c (gcry_cipher_algo_name): Simplified. + + * random.c: Use the daemon only if compiled with USE_RANDOM_DAEMON. + + * Makefile.am (libcipher_la_SOURCES): Build random-daemon support + only if requested. + +2007-02-21 Werner Koch + + * random.c (rndpool, keypool): Make unsigned. + (mix_pool): Change char* variables to unsigned char*. + (gcry_randomize): Make arg BUFFER a void*. + (gcry_create_nonce): Ditto. + + * rmd160.c (gcry_rmd160_mixblock): Make BUFFER a void*. + (_gcry_rmd160_hash_buffer): Make OUTBUF and BUFFER void*. + * sha1.c (_gcry_sha1_hash_buffer): Ditto. + + * cipher.c (gcry_cipher_encrypt, cry_cipher_decrypt): Change + buffer args to void*. + (gcry_cipher_register): Make ALGORITHM_ID a int *. + + * md.c (md_start_debug): Make SUFFIX a const char*. Use snprintf. + (gcry_md_debug): New. + (gcry_md_ctl): Changed arg BUFFER from unsigned char*. + + * md.c (md_write): Make INBUF a const void*. + (gcry_md_write): Remove needless cast. + * crc.c (crc32_write): Make INBUF a const void* + (update_crc32, crc24rfc2440_write): Ditto. + * sha512.c (sha512_write, transform): Ditto. + * sha256.c (sha256_write, transform): Ditto. + * rmd160.c (rmd160_write, transform): Ditto. + * md5.c (md5_write, transform): Ditto. + * md4.c (md4_write, transform): Ditto. + * sha1.c (sha1_write, transform): Ditto. + + * tiger.c (tiger_write, transform): Ditto. + * whirlpool.c (whirlpool_write, whirlpool_add, transform): Ditto. + + * elgamal.c (elg_names): Change to a const*. + * dsa.c (dsa_names): Ditto. + * rsa.c (rsa_names): Ditto. + * pubkey.c (gcry_pk_lookup_func_name): Make ALIASES a const. + +2007-02-20 Werner Koch + + * rndlinux.c (open_device): Remove unsused arg MINOR. + +2007-01-30 Werner Koch + + * sha256.c (oid_spec_sha256): Add alias from pkcs#1. + * sha512.c (oid_spec_sha512): Ditto. + (oid_spec_sha384): Ditto. + +2006-12-18 Werner Koch + + * rndlinux.c (set_cloexec_flag): New. + (open_device): Set close-on-exit flags. Suggested by Max + Kellermann. Fixes Debian#403613. + + * Makefile.am (AM_CPPFLAGS, AM_CFLAGS): Splitted and merged + Moritz' changes. + (INCLUDES): Removed. + +2006-11-30 Werner Koch + + * serpent.c (byte_swap_32): Remove trailing semicolon. + +2006-11-15 Werner Koch + + * Makefile.am (INCLUDES): Include ../src/ + +2006-11-03 Werner Koch + + * random.c [HAVE_GETTIMEOFDAY]: Included sys/time.h and not + sys/times.h. Reported by Rafaël Carré. + +2006-11-05 Moritz Schulte + + * Makefile.am (AM_CFLAGS): Added -I$(top_builddir)/src so that the + new gcrypt.h is used, not the one installed in the system. + +2006-10-25 Werner Koch + + * primegen.c (prime_generate_internal): Tweaked use of secure + memory and entropy use. Safe unused primes from the pool. Allocate + at least a pool of 30. + (save_pool_prime, get_pool_prime): New. + +2006-10-23 Werner Koch + + * ac.c (_gcry_ac_data_from_sexp): Reset sexp_tmp for failsafe + means. Release sexp_cur if needed. Reported by Dirk Stoecker. + + * pubkey.c (pubkeys_registered_lock): Intialized it. It is not + realy needed because this is a mere initialization to 0 anyway. + Noted by Victor Stinner. + +2006-10-17 Werner Koch + + * dsa.c (_gcry_dsa_generate2): New. + (generate): New arg QBITS. Add sanity checks for reasonable qbits + and nbits. + * pubkey.c (gcry_pk_genkey): Parse an qbits element. + (pubkey_generate): New arg QBITS. Pass it to the DSA generation. + +2006-10-05 Werner Koch + + * md.c (gcry_md_algo_info) : Check that the algo is + available. + +2006-10-04 David Shaw (wk) + + * tiger.c (round): Rename to tiger_round as gcc 4 has a built-in + round function that this conflicts with. + +2006-09-11 Werner Koch + + * rndw32.c (slow_gatherer_windowsNT): While adding data use the + size of the diskPerformance and not its address. Has been fixed in + GnuPG more than a year ago. Noted by Lee Fisher. + +2006-08-30 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Need to allow "ripemd160" here as + this is the canonical name. + +2006-08-29 Hye-Shik Chang (wk) + + * seed.c: New. + +2006-08-03 Werner Koch + + * random-daemon.c (_gcry_daemon_initialize_basics): Don't + initialize the socket. Remove arg SOCKETNAME. + (connect_to_socket): Make sure that daemon is set to -1 on error. + (call_daemon): Initialize the socket on the first call. + (_gcry_daemon_randomize, _gcry_daemon_get_random_bytes) + (_gcry_daemon_create_nonce): New arg SOCKETNAME. + * random.c (initialize): Call new daemon initializator. + (get_random_bytes, gcry_randomize, gcry_create_nonce): Pass socket + name to daemon call and reset allow_daemon on failure. + +2006-07-26 Werner Koch + + * rmd160.c (_gcry_rmd160_mixblock): Add cast to transform call. + + * blowfish.c (selftest): Cast string to usnigned char*. + + * primegen.c (prime_generate_internal): Cast unsigned/char* + mismatch in calling m_out_of_n. + (is_prime): Changed COUNT to unsigned int *. + + * ac.c (_gcry_ac_data_copy): Initialize DATA_MPIS. + + * random.c (gcry_create_nonce): Update the pid after a fork. + Reported by Uoti Urpala. + +2006-07-04 Marcus Brinkmann + + * sha512.c: Fix typo in copyright notice. + +2006-06-21 Werner Koch + + * rsa.c (_gcry_rsa_generate): Replace xcalloc by calloc. + * pubkey.c (gcry_pk_encrypt, gcry_pk_sign): Ditto. + (sexp_to_key, sexp_to_sig, sexp_to_enc, gcry_pk_encrypt) + (gcry_pk_sign, gcry_pk_genkey, gcry_pk_get_keygrip): Ditto. + * md.c (md_copy): Ditto. + +2006-04-22 Moritz Schulte + + * random-daemon.c (_gcry_daemon_initialize_basics): New argument: + SOCKETNAME. Passing on to connect_to_socket() if non-NULL. + (connect_to_socket, writen, readn, call_daemon): New functions. + (_gcry_daemon_randomize, _gcry_daemon_get_random_bytes) + (_gcry_daemon_create_nonce): Call call_daemon(). + (RANDOM_DAEMON_SOCKET): New symbol. + (daemon_socket): New static variable. + + * random.h (_gcry_daemon_initialize_basics): New parameter: + SOCKETNAME. + (_gcry_set_random_daemon_socket): New declaration. + + * random.c (initialize_basics): Pass DAEMON_SOCKET_NAME to + _gcry_daemon_initialize_basics. + (_gcry_set_random_daemon_socket): New function, setting + DAEMON_SOCKET_NAME. + +2006-04-01 Moritz Schulte + + * ac.c (eme_pkcs_v1_5_encode): Use KEY_SIZE directly, no need to + call gcry_ac_key_get_nbits. + (eme_pkcs_v1_5_decode): Likewise. + (ac_es_dencode_prepare_pkcs_v1_5): Fill options_em structure with + key_size. + (_gcry_ac_data_dump, gcry_ac_data_dump): New functions. + (_gcry_ac_data_to_sexp, _gcry_ac_data_from_sexp): More or less + rewritten; changed S-Expression format so that it matches the one + used in pubkey.c. + +2006-03-15 Werner Koch + + * random-daemon.c: New. + * random.c (_gcry_use_random_daemon): New. + (get_random_bytes, gcry_randomize, gcry_create_nonce): Try + diverting to the daemon functions. + +2006-03-14 Werner Koch + + * random.c (lock_seed_file): New. + (read_seed_file, _gcry_update_random_seed_file): Use it. + + * random.c (gcry_create_nonce): Detect a fork and re-seed. + (read_pool): Fixed the fork detection; it used to work only for + multi-threaded processes. + +2006-03-12 Brad Hards (wk) + + * md.c (md_open): Use new variable macpads_Bsize instead of + hardwiring the block size. Changed at all places. + +2006-03-10 Brad Hards (wk, patch 2005-04-22) + + * md.c, sha256.c: Add support for SHA-224. + (sha224_init): New. + +2006-01-18 Brad Hards (wk 2006-03-07) + + * cipher.c (cipher_encrypt, cipher_decrypt, do_ofb_encrypt) + (do_ofb_decrypt, gcry_cipher_open): Implement Output Feedback Mode. + +2005-11-02 Moritz Schulte + + * pubkey.c (gcry_pk_algo_name): Return "?" instead of NULL for + unknown algorithm IDs. + * cipher.c (cipher_algo_to_string): Likewise. + +2005-11-01 Moritz Schulte + + * pubkey.c (gcry_pk_algo_info): Don't forget to break after switch + case. + +2005-09-19 Werner Koch + + * dsa.c (generate): Add preliminary support for 2 and 4 keys. + Return an error code if the key size is not supported. + (_gcry_dsa_generate): Return an error. + +2005-08-22 Werner Koch + + * primegen.c (check_prime): New arg RM_ROUNDS. + (prime_generate_internal): Call it here with 5 rounds as used + before. + (gcry_prime_check): But here with 64 rounds. + (is_prime): Make sure never to use less than 5 rounds. + +2005-04-16 Moritz Schulte + + * ac.c (_gcry_ac_init): New function. + +2005-04-12 Moritz Schulte + + * ac.c (_gcry_ac_io_write, _gcry_ac_io_read): Initialize err to + make the compiler happy. + Always use errno, now that gcry_malloc() is guaranteed to set + errno on failure. + (_gcry_ac_data_to_sexp): Don't forget to goto out after error in + loop. + (_gcry_ac_data_to_sexp): Remove unused variable: mpi_list; + (_gcry_ac_data_to_sexp): Always deallocate sexp_buffer. + (_gcry_ac_data_from_sexp): Don't forget to initialize data_set_new. + (_gcry_ac_data_from_sexp): Handle special case, which is + necessary, since gcry_sexp_nth() does not distinguish between + "element does not exist" and "element is the empty list". + (_gcry_ac_io_init_va): Use assert to make sure that mode and type + are correct. + Use gcry_error_t types where gcry_err_code_t types have been used + before. + +2005-04-11 Moritz Schulte + + * ac.c (_gcry_ac_data_sign_scheme): Don't forget to initialize + buffer. + + * whirlpool.c: New file. + * md.c (digest_table): Add whirlpool. + * Makefile.am (EXTRA_libcipher_la_SOURCES): Added: whirlpool.c. + +2005-03-30 Moritz Schulte + + * ac.c (_gcry_ac_data_from_sexp): Use length of SEXP_CUR, not + length of SEXP; do not forget to set SEXP_TMP to NULL after it has + been released. + + (struct gcry_ac_mpi): New member: name_provided. + (_gcry_ac_data_set): Rename variable `name_final' to `name_cp'; + remove const qualifier; change code to not cast away const + qualifiers; use name_provided member as well. + (_gcry_ac_data_set, _gcry_ac_data_get_name): Use name_provided + member of named mpi structure. + + (gcry_ac_name_to_id): Do not forget to initialize err. + (_gcry_ac_data_get_index): Do not forget to initialize mpi_return; + use gcry_free() instead of free(); remove unnecessary cast; rename + mpi_return and name_return to mpi_cp and name_cp; adjust code. + (ac_data_mpi_copy): Do not cast away const qualifier. + (ac_data_values_destroy): Likewise. + (ac_data_construct): Likewise. + + (ac_data_mpi_copy): Initialize flags to GCRY_AC_FLAG_DEALLOC. + (ac_data_extract): Use GCRY_AC_FLAG_DEALLOC instead of + GCRY_AC_FLAG_COPY. + + (_gcry_ac_io_init_va, _gcry_ac_io_init, gcry_ac_io_init) + (gcry_ac_io_init_va, _gcry_ac_io_write, _gcry_ac_io_read) + (_gcry_ac_io_read_all, _gcry_ac_io_process): New functions. + (gry_ac_em_dencode_t): Use gcry_ac_io_t in prototype instead of + memroy strings directly; adjust encode/decode functions to use io + objects. + (emsa_pkcs_v1_5_encode_data_cb): New function ... + (emsa_pkcs_v1_5_encode): ... use it here. + (ac_data_dencode): Use io objects. + (_gcry_ac_data_encode, _gcry_ac_data_decode, gcry_ac_data_encode) + (gcry_ac_data_decode): Likewise. + (_gcry_ac_data_encrypt_scheme, gcry_ac_data_encrypt_scheme) + (_gcry_ac_data_decrypt_scheme, gcry_ac_data_decrypt_scheme) + (_gcry_ac_data_sign_scheme, gcry_ac_data_sign_scheme) + (_gcry_ac_data_verify_scheme, gcry_ac_data_verify_scheme): + Likewise. + +2005-03-23 Werner Koch + + * rndw32.c (_gcry_rndw32_gather_random_fast): While adding data + use the size of the object and not the one of its address. Bug + reported by Sascha Kiefer. + +2005-03-19 Moritz Schulte + + * cipher.c (do_cbc_encrypt): Be careful to not overwrite data, + which is to be used later on. This happend, in case CTS is + enabled and OUTBUF is equal to INBUF. + +2005-02-25 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Allow for shadowed-private-key. + +2005-02-13 Moritz Schulte + + * serpent.c: Updated from 1.2 branch: + + s/u32_t/u32/ and s/byte_t/byte/. Too match what we have always + used and are using in all other files too + (serpent_test): Moved prototype out of a fucntion. + +2005-02-07 Moritz Schulte + + * ac.c: Major parts rewritten. + * pubkey.c (_gcry_pk_get_elements): New function. + +2004-12-09 Werner Koch + + * serpent.c (serpent_setkey): Moved prototype of serpent_test to + outer scope. + +2004-09-11 Moritz Schulte + + * pubkey.c (pubkey_table): Added an alias entry for GCRY_PK_ELG_E. + +2004-08-23 Moritz Schulte + + * ac.c: Do not include . + * rndegd.c: Likewise. + * sha1.c: Likewise. + * rndunix.c: Likewise. + * rndlinux.c: Likewise. + * rmd160.c: Likewise. + * md5.c: Likewise. + * md4.c: Likewise. + * cipher.c: Likewise. + * crc.c: Likewise. + * blowfish.c: Likewise. + + * pubkey.c (dummy_generate, dummy_check_secret_key) + (dummy_encrypt, dummy_decrypt, dummy_sign, dummy_verify): Return + err code GPG_ERR_NOT_IMPLEMENTED instead of aborting through + log_bug(). + (dummy_get_nbits): Return 0 instead of aborting though log_bug(). + +2004-08-19 Werner Koch + + * pubkey.c (sexp_data_to_mpi): Changed the zero random byte + substituting code to actually do clever things. Thanks to + Matthias Urlichs for noting the implementation problem. + +2004-08-09 Moritz Schulte + + * pubkey.c (gcry_pk_sign): Fixed memory leak; fix provided by + Modestas Vainius. + +2004-07-16 Werner Koch + + * rijndael.c (do_encrypt): Fix alignment problem. Bugs found by + Matthias Urlichs. + (do_decrypt): Ditto. + (keySched, keySched2): Use 2 macros along with unions in the key + schedule context. + +2004-07-14 Moritz Schulte + + * rsa.c (_gcry_rsa_decrypt): Don't forget to free "a". Thanks to + Nikos Mavroyanopoulos. + +2004-05-09 Werner Koch + + * random.c (read_pool): Mix the PID in to better protect after a + fork. + +2004-07-04 Moritz Schulte + + * serpent.c: Use "u32_t" instead of "unsigned long", do not + declare S-Box variables as "register". Fixes failure on + OpenBSD/sparc64, reported by Nikolay Sturm. + +2004-05-07 Werner Koch + + * random.c (initialize): Factored out some code to .. + (initialize_basics): .. new function. + (_gcry_random_initialize): Just call initialize_basics unless the + new arg FULL is set to TRUE. + (_gcry_fast_random_poll): Don't do anything unless the random + system has been really initialized. + +2004-05-07 Moritz Schulte + + * ac.c (gcry_ac_open): Do not dereference NULL pointer. Reported + by Umberto Salsi. + +2004-02-20 Werner Koch + + * primegen.c (check_prime): New args CB_FUNC and CB_ARG; call them + at different stages. Pass these arguments through all callers. + +2004-02-06 Werner Koch + + * des.c: Add a new OID as used by pkcs#12. + + * rfc2268.c: New. Taken from libgcrypt. + * cipher.c: Setup the rfc2268 algorithm. + +2004-01-25 Moritz Schulte + + * primegen.c (prime_generate_internal): Do not forget to free + `q_factor'; fixed by Brieuc Jeunhomme. + (prime_generate_internal): Do not forget to free `prime'. + +2004-01-14 Moritz Schulte + + * ac.c (gcry_ac_data_set): New argument: flags; slightly + rewritten. + (gcry_ac_data_get_name, gcry_ac_data_get_index): Likewise. + (gcry_ac_key_pair_generate): New argument: misc_data; modified + order of arguments. + (gcry_ac_key_test): New argument: handle. + (gcry_ac_key_get_nbits, gcry_ac_key_get_grip): Likewise. + Use GCRY_AC_FLAG_NO_BLINDING instead of + GCRY_AC_DATA_FLAG_NO_BLINDING. + (gcry_ac_mpi): New member: flags. + (gcry_ac_data_search, gcry_ac_data_add): Removed functions. + +2003-12-22 Werner Koch + + * primegen.c (is_prime): Release A2. + +2003-12-19 Werner Koch + + * md.c: Moved a couple of functions down below the data structure + definitions. + (struct gcry_md_context): New field ACTUAL_HANDLE_SIZE. + (md_open): Set it here. + (strcut gcry_md_list): New field ACTUAL_STRUCT_SIZE. + (md_enable): Set it here. + (md_close): Wipe the context memory. + secure memory. + * cipher.c (struct gcry_cipher_handle): New field ACTUAL_HANDLE_SIZE. + (gcry_cipher_open): Set it here. + (gcry_cipher_close): Use it to always wipe out the handle data. + + * ac.c (gcry_ac_open): Make sure HANDLE gets initialized even when + the function is not successful. + (gcry_ac_close): Allow a NULL handle. + (gcry_ac_key_destroy, gcry_ac_key_pair_destroy): Ditto. + (gcry_ac_key_get_grip): Return INV_OBJ on error. + + * primegen.c (prime_generate_internal): Fixed error code for + failed malloc. Replaced the !err if chain by gotos. + (gcry_prime_group_generator): Remove the extra sanity check. + + * md.c: Minor code and comment cleanups. + +2003-12-16 Werner Koch + + * primegen.c (gen_prime): Doc fix. Thanks to Newton Hammet. + +2003-12-11 Werner Koch + + * rndunix.c (slow_poll): Don't use #warning but #error. + + * rndegd.c: Changed indentation. + (my_make_filename): Removd the var_arg cruft becuase we + don't need it here. Changed caller. + + * rndlinux.c: Changed indentation. + (open_device): Remove the superfluous stat call and clarify + comment. + + * rsa.c: Changed indentation. + (secret): Use the standard algorithm if p, q and u are not + available. + (rsa_blind, rsa_unblind): Renamed from _gcry_rsa_blind, + _gcry_rsa_unblind and moved more to the top. + + * md4.c: Changed indentation. Removed unnecessary casts. + * md5.c, rmd160.c, sha1.c, tiger.c: Ditto. + * rijndael.c, twofish.c: Ditto. + * serpent.c: Removed unnecessary casts. + * sha256.c, sha512.c: Ditto. + +2003-12-09 Werner Koch + + * dsa.c: Unified indentation style. + * elgamal.c: Ditto. + * des.c (des_key_schedule): Code beautifications. + * blowfish.c: Changed indentation style. + * cast5.c (do_cast_setkey): Ditto. + + * pubkey.c (gcry_pk_encrypt): Replaced the chain of if(!err) tests + by straightforward gotos. Other cleanups. + (gcry_pk_decrypt): Ditto. + (gcry_pk_sign): Ditto. + (gcry_pk_verify): Ditto. + (gcry_pk_genkey): Ditto. Use strtoul instead of strtol. + (gcry_pk_ctl): Use GPG_ERR_INV_ARG to indicate bad arguments. + +2003-12-07 Werner Koch + + * pubkey.c (gcry_pk_register_default): Undef the helper macro. + (gcry_pk_map_name): Allow NULL for string. + (sexp_to_key): Use memcpy and not strncpy. Use gcry_free and not + free. + (sexp_to_sig): Ditto. + (sexp_to_enc): Ditto. Replaced the chain of if(!err) tests by + straightforward gotos. + +2003-12-05 Werner Koch + + * cipher.c: Documentation cleanups. + (gcry_cipher_mode_from_oid): Allow NULL for STRING. + +2003-12-03 Werner Koch + + * elgamal.c (sign, do_encrypt, gen_k): Make sure that a small K is + only used for encryption. + +2003-11-18 Werner Koch + + * random.h (rndw32_set_dll_name): Removed unused prototype. + + * Makefile.am (EXTRA_DIST): Added Manifest. + +2003-11-11 Werner Koch + + * Manifest: New. + +2003-11-04 Werner Koch + + * md.c (gcry_md_hash_buffer): Use shortcut for SHA1 + * sha1.c (_gcry_sha1_hash_buffer): New. + + * random.c: Reformatted most functions. + (mix_pool): Moved the failsafe_digest from global + scope to here. + (do_fast_random_poll): Use the generic fucntions even if a fast + gathering function has been used. + (read_pool): Detect a fork and retry. + (gcry_randomize, get_random_bytes): Don't distinguish anymore + between weak and strong random. + (gcry_create_nonce): New. + +2003-10-31 Werner Koch + + * rndw32.c (slow_gatherer_windowsNT): Use a plain buffer for the + disk performance values and not the W32 API structure. + + * dsa.c (verify): s/exp/ex/ due to shadowing of a builtin. + * elgamal.c (verify): Ditto. + + * ac.c (gcry_ac_data_get_index): s/index/idx/ + (gcry_ac_data_copy_internal): Remove the cast in _gcry_malloc. + (gcry_ac_data_add): Must use gcry_realloc instead of realloc. + * pubkey.c (sexp_elements_extract): s/index/idx/ as tribute to the + forehackers. + (gcry_pk_encrypt): Removed shadowed definition of I. Reordered + arguments to malloc for clarity. + (gcry_pk_sign, gcry_pk_genkey): Ditto. + * primegen.c (prime_generate_internal): s/random/randomlevel/. + +2003-10-27 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Don't forget to deallocate pkey. + +2003-10-27 Werner Koch + + * random.c (gcry_random_add_bytes): Return if buflen is zero to + avoid gcc warning about unsed parameter. + (MASK_LEVEL): Simplified; does now work for signed and unsigned + w/o warnings. + + * md.c (md_start_debug): Removed the const from SUFFIX, because + this function is called from the control fucntion which does not + require const. + + Prefixed all (pubkey,digest,cipher}_spec_* globale variables with + _gcry_. + + * ac.c (ac_key_identifiers): Made static. + + * random.c (getfnc_gather_random,getfnc_fast_random_poll): Move + prototypes to .. + * rand-internal.h: .. here + * random.c (getfnc_gather_random): Include rndw32 gatherer. + * rndunix.c, rndw32.c, rndegd.c: Include them here. + * rndlinux.c (_gcry_rndlinux_gather_random): Prepend the _gcry_ + prefix. Changed all callers. + * rndegd.c (_gcry_rndegd_gather_random): Likewise. + (_gcry_rndegd_connect_socket): Likewise. + * rndunix.c (_gcry_rndunix_gather_random): Likewise. + (waitpid): Made static. + * rndw32.c: Removed the old and unused winseed.dll cruft. + (_gcry_rndw32_gather_random_fast): Renamed from + gather_random_fast. + (_gcry_rndw32_gather_random): Renamed from gather_random. Note, + that the changes 2003-04-08 somehow got lost. + + * sha512.c (sha512_init, sha384_init): Made static. + + * cipher.c (do_ctr_decrypt): Removed "return" from this void + function. + +2003-10-24 Moritz Schulte + + * serpent.c: Fix an issue on big-endian systems. + + * rndw32.c: Removed IS_MODULE -cruft. + * rndlinux.c (rndlinux_gather_random): Likewise. + +2003-10-10 Werner Koch + + * primegen.c (gen_prime): Bail out if NBITS is less than 16. + (prime_generate_internal): Initialize prime variable to suppress + compiler warning. Check pbits, initialize qbits when passed as + zero. + + * primegen.c (prime_generate_internal): New arg + ALL_FACTORS. Changed all callers. + (gcry_prime_generate): Make the factors arg optional. Request + all_factors. Make sure PRIME is set to NULL even on error. + (gcry_prime_group_generator): New. + (gcry_prime_release_factors): New. + +2003-10-06 Werner Koch + + * primegen.c (gen_prime): Assert that NBITS is never zero, it + would cause a segv. + +2003-09-28 Moritz Schulte + + * ac.c: Include "cipher.h". + +2003-09-27 Moritz Schulte + + * rndegd.c (do_read): Return nread instead of nbytes; thanks to + Michael Caerwyn. + +2003-09-04 Werner Koch + + * pubkey.c (_gcry_pk_aliased_algo_name): New. + * ac.c (gcry_ac_open): Use it here. + + * Makefile.am (EXTRA_libcipher_la_SOURCES): Add serpent.c + +2003-09-02 Moritz Schulte + + * primegen.c (gcry_prime_check, gcry_prime_generate): New + functions. + (prime_generate_internal): New function, based on + _gcry_generate_elg_prime. + (_gcry_generate_elg_prime): Rewritten as a wrapper for + prime_generate_internal. + +2003-08-28 Werner Koch + + * pubkey.c (gcry_pk_encrypt): Don't include the flags list in the + return value. This does not make sense and breaks any programs + parsing the output strictly (e.g. current gpgsm). + (gcry_pk_encrypt): If aliases for the algorithm name exists, take + the first one instead of the regular name to adhere to SPKI + conventions. + (gcry_pk_genkey): Ditto. + (gcry_pk_sign): Ditto. Removed unused KEY_ALGO_NAME. + +2003-08-19 Moritz Schulte + + * cipher.c: Add support for Serpent + * serpent.c: New file. + +2003-08-10 Moritz Schulte + + * rsa.c (_gcry_rsa_blind, _gcry_rsa_unblind): Declare static. + +2003-08-09 Timo Schulz + + * random.c (getfnc_gather_random): Don't check NAME_OF_DEV_RANDOM + two times, but also the NAME_OF_DEV_URANDOM device. + +2003-08-08 Moritz Schulte + + * pubkey.c (sexp_to_enc): Fixed extraction of S-Expression: do not + fail if no `flags' sub S-Expression is found. + +2003-07-27 Werner Koch + + * md.c (gcry_md_lookup_func_oid): Allow for empty OID lists. + +2003-07-23 Moritz Schulte + + * ac.c (gcry_ac_data_construct): New argument: include_flags, only + include `flags' S-expression, if include_flags is true. Adjust + callers. Thanks for triggering a bug caused by `flags' + sub-S-expression where they are not expected to Ralf Schneider. + +2003-07-21 Moritz Schulte + + * pubkey.c (gcry_pk_lookup_func_name): Use new member name + `aliases' instead of `sexp_names'. + + * ac.c (gcry_ac_key_data_get): New function. + + * cipher.c (gcry_cipher_lookup_func_name): Fix return value. + +2003-07-20 Moritz Schulte + + * blowfish.c: Adjusted for new gcry_cipher_spec_t structure. + * cast5.c: Likewise. + * twofish.c: Likewise. + * arcfour.c: Likewise. + * rijndael.c (rijndael_oids, rijndael192_oids, rijndael256_oids): + New variables, adjust for new gcry_cipher_spec_t structure. + * des.c (oids_tripledes): New variable, adjust for new + gcry_cipher_spec_t structure. + + * md.c (oid_table): Removed. + + * tiger.c (oid_spec_tiger): New variable. + (digest_spec_tiger): Adjusted for new gry_md_spec_t structure. + + * sha512.c (oid_spec_sha512): New variable. + (digest_spec_sha512): Adjusted for new gry_md_spec_t structure. + + * sha512.c (oid_spec_sha384): New variable. + (digest_spec_sha384): Adjusted for new gry_md_spec_t structure. + + * sha256.c (oid_spec_sha256): New variable. + (digest_spec_sha256): Adjusted for new gry_md_spec_t structure. + + * sha1.c (oid_spec_sha1): New variable. + (digest_spec_sha1): Adjusted for new gry_md_spec_t structure. + + * rmd160.c (oid_spec_rmd160): New variable. + (digest_spec_rnd160): Adjusted for new gry_md_spec_t structure. + + * md5.c (oid_spec_md5): New variable. + (digest_spec_md5): Adjusted for new gry_md_spec_t structure. + + * md4.c (oid_spec_md4): New variable. + (digest_spec_md4): Adjusted for new gry_md_spec_t structure. + + * crc.c (digest_spec_crc32, digest_spec_crc32_rfc1510, + digest_spec_crc32_rfc2440): Adjusted for new gry_md_spec_t + structure. + +2003-07-19 Moritz Schulte + + * md.c (gcry_md_lookup_func_oid): New function. + (search_oid): New function, copied from cipher.c. + (gcry_md_map_name): Adjust for new search_oid_interface. + + * cipher.c (oid_table): Removed table. + (gcry_cipher_lookup_func_oid): New function. + (search_oid): Rewritten to use the module functions. + (gcry_cipher_map_name): Adjust for new search_oid interface. + (gcry_cipher_mode_from_oid): Likewise. + +2003-07-18 Werner Koch + + * md.c (gcry_md_hash_buffer): Convert ERR to gpg_error_t in + gpg_strerror. + +2003-07-14 Moritz Schulte + + * cipher.c (gcry_cipher_lookup_func_name): Also check the cipher + name aliases, not just the primary name. + (gcry_cipher_map_name): Remove kludge for aliasing Rijndael to + AES. + + * arcfour.c, blowfish.c, cast5.c, des.c, twofish.c: Adjust cipher + specification structures. + + * rijndael.c (rijndael_names, rijndael192_names, + rijndael256_names): New variables, use them in the cipher + specifications. + + * rmd160test.c: Removed file. + + * ac.c, arcfour.c, blowfish.c, cast5.c, cipher.c, des.c, dsa.c, + elgamal.c, md.c, pubkey.c, random.c, rijndael.c, rsa.c, twofish.c: + Used gcry_err* wrappers for libgpg symbols. + + * primegen.c (gen_prime): Correct the order arguments to + extra_check. + +2003-07-12 Moritz Schulte + + * ac.c: Replaced all public occurences of gpg_error_t with + gcry_error_t. + * cipher.c: Likewise. + * md.c: Likewise. + * pubkey.c: Likewise. + * random.c: Likewise. + + * cipher.c: Added support for TWOFISH128. + +2003-07-08 Moritz Schulte + + * ac.c (gcry_ac_data_copy_internal): New function, based on + gcry_ac_data_copy. + (gcry_ac_data_copy): Made public, use gcry_ac_data_copy_internal. + (gcry_ac_key_init): Use gcry_ac_data_copy_internal. + +2003-07-07 Moritz Schulte + + * ac.c (gcry_ac_data_set): Only release old MPI value if it is + different from the new value. Bug reported by Simon Josefsson + . + + * pubkey.c (gcry_pk_list): New function. + * md.c (gcry_md_list): New function. + + * ac.c (gcry_ac_key_pair_generate): Fix calculation of format + string size. + +2003-07-05 Moritz Schulte + + * md.c: Named struct of digest_table `digest_table_entry'. + (digest_table_entry): New member: algorithm; filled in. + (digest_table_entry): Removed unused member: flags. + (gcry_md_register): New argument: algorithm_id, filled in. + (gcry_md_register_default): Used algorithm ID from module + structure. + (gcry_md_map_name): Likewise. + (md_enable): Likewise. + (md_read): Likewise. + (gcry_md_info): Likewise. + + * pubkey.c: Named truct for pubkey_table `pubkey_table_entry'. + (pubkey_table_entry): New member: algorithm; filled in. + (gcry_pk_register_default): Used algorithm ID from pubkey_table. + (gcry_pk_register): New argument: algorithm_id, filled in. + (gcry_pk_map_name): Used algorithm ID from module structure. + (gcry_pk_decrypt): Likewise. + (gcry_pk_encrypt): Likewise. + (gcry_pk_verify): Likewise. + (gcry_pk_sign): Likewise. + (gcry_pk_testkey): Likewise. + (gcry_pk_genkey): Likewise. + (gcry_pk_get_nbits): Likewise. + (sexp_to_key): Removed unused variable: algo. + (sexp_to_sig): Likewise. + + * cipher.c: Named struct for cipher_table `cipher_table_entry'. + (cipher_table_entry): New member: algorithm; filled in. + (gcry_cipher_register_default): Used algorithm ID from + cipher_table. + (gcry_cipher_register): New argument: algorithm_id, filled in. + (gcry_cipher_map_name): Used algorithm ID from module structure. + + * arcfour.c (cipher_spec_arcfour): Removed algorithm ID. + * blowfish.c (cipher_spec_blowfish): Likewise. + * cast5.c (cipher_spec_cast5): Likewise. + * crc.c (digest_spec_crc32): Likewise. + * crc.c (digest_spec_crc32_rfc1510): Likewise. + * crc.c (digest_spec_crc32_rfc2440): Likewise. + * des.c (cipher_spec_des): Likewise. + * des.c (cipher_spec_tripledes): Likewise. + * dsa.c (pubkey_spec_dsa): Likewise. + * elgamal.c (pubkey_spec_elg): Likewise. + * md4.c (digest_spec_md4): Likewise. + * md5.c (digest_spec_md5): Likewise. + * aes.c (cipher_spec_aes): Likewise. + * aes.c (cipher_spec_aes192): Likewise. + * aes.c (cipher_spec_aes256): Likewise. + * rsa.c (pubkey_spec_rsa): Likewise. + * sha1.c (digest_spec_sha1): Likewise. + * sha256.c (digest_spec_sha256): Likewise. + * sha512.c (digest_spec_sha512): Likewise. + * tiger.c (digest_spec_tiger): Likewise. + * twofish.c (cipher_spec_twofish): Likewise. + * twofish.c (cipher_spec_twofish128): Likewise. + + * Makefile.am (EXTRA_libcipher_la_SOURCES): Fix list of source + files; reported by Simon Josefsson . + + * pubkey.c: Replaced all occurences of `id' with `algorithm', + since `id' is a keyword in obj-c. + * md.c: Likewise. + * cipher.c: Likewise. + + * crc.c, md4.c, md5.c, rmd160.c, sha1.c, sha256.c, tiger.c: + Replaced all occurences of gcry_digest_spec_t with gcry_md_spec_t. + + * dsa.c, rsa.c, elgamal.c: Replaced all occurencens of + gcry_pubkey_spec_t with gcry_pk_spec_t. + + * md.c: Replaced all occurences of gcry_digest_spec_t with + gcry_md_spec_t. + (gcry_digest_register_default): Renamed to ... + (gcry_md_register_default): ... this; adjusted callers. + (gcry_digest_lookup_func_name): Renamed to ... + (gcry_md_lookup_func_name): ... this; adjusted callers. + (gcry_digest_lookup_name): Renamed to ... + (gcry_md_lookup_name): ... this; adjusted callers. + (gcry_digest_register): Renamed to ... + (gcry_md_register): ... this. + (gcry_digest_unregister): Renamed to ... + (gcry_md_unregister): ... this. + + * pubkey.c (gcry_pubkey_register): Renamed to ... + (gcry_pk_register): ... this. + (gcry_pubkey_unregister): Renamed to ... + (gcry_pk_unregister): ... this. + Replaced all occurences of gcry_pubkey_spec_t with gcry_pk_spec_t. + (gcry_pubkey_register_default): Renamed to ... + (gcry_pk_register_default): ... this; adjusted callers. + (gcry_pubkey_lookup_func_name): Renamed to ... + (gcry_pk_lookup_func_name): ... this; adjusted callers. + (gcry_pubkey_lookup_name): Renamed to ... + (gcry_pk_lookup_name): ... this; adjusted callers. + + * md.c (gcry_md_hash_buffer): Fix error checking. Thanks to Simon + Josefsson . + +2003-07-04 Moritz Schulte + + * cipher.c (gcry_cipher_list): New function. + +2003-07-01 Moritz Schulte + + * pubkey.c (sexp_to_sig): Accept a `flags' S-expression to be more + consistent with sexp_to_enc. + +2003-06-30 Moritz Schulte + + * Makefile.am (libcipher_la_SOURCES): Added: ac.c. + + * pubkey.c (_gcry_pk_module_lookup): New function. + (_gcry_pk_module_release): New function. + +2003-06-29 Moritz Schulte + + * ac.c: New file. + +2003-06-26 Werner Koch + + * md.c (gcry_md_hash_buffer): Trigger BUG correcly with new API. + +2003-06-19 Werner Koch + + * md.c (gcry_md_is_enabled): Fixed. + +2003-06-18 Werner Koch + + * cipher.c (gcry_cipher_get_algo_keylen): New. + (gcry_cipher_get_algo_blklen): New. + +2003-06-18 Moritz Schulte + + * arcfour.c, cipher.c, blowfish.c, md.c, cast5.c, pubkey.c, crc.c, + des.c, dsa.c, elgamal.c, md4.c, md5.c, random.c, rijndael.c, + rmd160.c, rsa.c, sha1.c, sha256.c, sha512.c, tiger.c, twofish.c: + Replaced older types GcryDigestSpec, GcryCipherSpec and + GcryPubkeySpec with newer types: gcry_digest_spec_t, + gcry_cipher_spec_t and gcry_pubkey_spec_t. + + * md.c (gcry_digest_id_new): Removed function. + (gcry_digest_register): Removed code for generating a new module + ID. + + * pubkey.c (gcry_pubkey_id_new): Removed function. + (gcry_pubkey_register): Removed code for generating a new module + ID. + + * cipher.c, md.c, pubkey.c: Replace old type GcryModule with newer + one: gcry_module_t. + (gcry_cipher_id_new): Removed function. + (gcry_cipher_register): Removed code for generating a new module + ID. + + * cipher.c (gcry_cipher_register): Adjust call to + _gcry_module_add. + (gcry_cipher_register_default): Likewise. + * pubkey.c (gcry_pubkey_register_default): Likewise. + (gcry_pubkey_register): Likewise. + * md.c (gcry_digest_register_default): Likewise. + (gcry_digest_register): Likewise. + + * md.c (gcry_digest_lookup_func_id): Removed function. + (gcry_digest_lookup_id): Likewise. + (gcry_digest_id_new): Use _gcry_module_lookup_id instead of + gcry_digest_lookup_id. + (digest_algo_to_string): Likewise. + (check_digest_algo): Likewise. + (md_enable): Likewise. + (md_digest_length): Likewise. + (md_asn_oid): Likewise. + + * pubkey.c (gcry_pubkey_lookup_id): Removed function. + (gcry_pubkey_lookup_func_id): Likewise. + (gcry_pubkey_id_new): Use _gcry_module_lookup_id instead of + gcry_pubkey_id_new. + (gcry_pk_algo_name): Likewise. + (disable_pubkey_algo): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_get_npkey): Likewise. + (pubkey_get_nskey): Likewise. + (pubkey_get_nsig): Likewise. + (pubkey_get_nenc): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (gcry_pk_algo_info): Likewise. + + * cipher.c (gcry_cipher_lookup_func_id): Removed function. + (gcry_cipher_lookup_id): Likewise. + (cipher_algo_to_string): use _gcry_module_lookup_id instead of + gcry_cipher_lookup_id. + (disable_cipher_algo): Likewise. + (check_cipher_algo): Likewise. + (cipher_get_blocksize): Likewise. + (gcry_cipher_open): Likewise. + (gcry_cipher_id_new): Likewise. + +2003-06-17 Moritz Schulte + + * Makefile.am (GCRYPT_MODULES): Set to @GCRYPT_CIPHERS@, + @GCRYPT_PUBKEY_CIPHERS@, @GCRYPT_DIGESTS@ and @GCRYPT_RANDOM@. + (libcipher_la_DEPENDENCIES): Set to $(GCRYPT_MODULES). + (libcipher_la_LIBADD): Likewise. + (AM_CFLAGS): Added: @GPG_ERROR_CFLAGS@. + (EXTRA_libcipher_la_SOURCES): Added all conditional sources. + + * md.c (md_open): Use _gcry_fast_random_poll instead of + fast_random_poll. + * cipher.c (gcry_cipher_open): Likewise. + + * random.h (fast_random_poll): Removed macro. + + * blowfish.c, md4.c, md5.c, rmd160.c, sha1.c, sha256.c, sha512.c, + tiger.c: Use Autoconf's WORDS_BIGENDIAN instead of our own + BIG_ENDIAN_HOST. + +2003-06-16 Moritz Schulte + + * random.c (getfnc_gather_random): Do not special-case + USE_ALL_RANDOM_MODULES, make it the default. + + * dsa.c: Replace last occurences of old type names with newer + names (i.e. replace MPI with gcry_mpi_t). + * elgamal.c: Likewise. + * primegen.c: Likewise. + * pubkey.c: Likewise. + * rsa.c: Likewise. + +2003-06-14 Moritz Schulte + + * des.c (des_setkey): Add selftest check. + (tripledes_set3keys): Likewise. + (do_tripledes_setkey): Remove selftest check. + (do_des_setkey): Likewise. + +2003-06-11 Moritz Schulte + + * md.c (_gcry_md_init): New function. + * cipher.c (_gcry_cipher_init): New function. + * pubkey.c (_gcry_pk_init): New function. + +2003-06-13 Werner Koch + + * md.c (gcry_md_get_algo): Reverted to old API. This is a + convenience function anyway and error checking is not approriate. + (gcry_md_is_secure): New. + (gcry_md_is_enabled): New. + +2003-06-12 Werner Koch + + * cipher.c (gcry_cipher_open): Make sure HANDLE is set to NULL on + error. + +2003-06-11 Werner Koch + + * md.c (gcry_md_open): Make sure H receives either NULL or an + valid handle. + (gcry_md_copy): Swapped arguments so that it is more in lione with + md_open and most other API fucntions like memcpy (destination + comes first). Make sure HANDLE is set to NULL on error. + + * rijndael.c (do_encrypt): Hack to force correct alignment. It + seems not to be not sufficient, though. We should rework this + fucntions and remove all these ugly casts. Let the compiler + optimize or have an assembler implementation. + +2003-06-09 Moritz Schulte + + * Makefile.am: Removed rules serpent, since that is not commited + yet. + +2003-06-08 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Improve calculation for size of the + format string. + +2003-06-07 Moritz Schulte + + * arcfour.c, bithelp.h, blowfish.c, cast5.c, cipher.c, crc.c, + des.c, dsa.c, elgamal.c, md4.c, md5.c, md.c, primegen.c, pubkey.c, + rand-internal.h, random.c, random.h, rijndael.c, rmd160.c, + rmd160test.c, rmd.h, rndeged.c, rndlinux.c, rndunix.c, rndw32.c, + rsa.c, sha1.c, sha256.c, sha512.c, tiger.c, twofish.c: Edited all + preprocessor instructions to remove whitespace before the '#'. + This is not required by C89, but there are some compilers out + there that don't like it. Replaced any occurence of the now + deprecated type names with the new ones. + +2003-06-04 Moritz Schulte + + * pubkey.c (gcry_pk_encrypt): Construct an arg_list and use + gcry_sexp_build_array instead of gcry_sexp_build. + (gcry_pk_sign): Likewise. + (gcry_pk_genkey): Likewise. + +2003-06-01 Moritz Schulte + + * dsa.c (_gcry_dsa_generate): Do not check wether the algorithm ID + does indeed belong to DSA. + (_gcry_dsa_sign): Likewise. + (_gcry_dsa_verify): Likewise. + (_gcry_dsa_get_nbits): Likewise. + + * elgamal.c (_gcry_elg_check_secret_key): Do not check wether the + algorithm ID does indeed belong to ElGamal. + (_gcry_elg_encrypt): Likewise. + (_gcry_elg_decrypt): Likewise. + (_gcry_elg_sign): Likewise. + (_gcry_elg_verify): Likewise. + (_gcry_elg_get_nbits): Likewise. + (_gcry_elg_generate): Likewise. + + * rsa.c (_gcry_rsa_generate): Do not check wether the algorithm ID + does indeed belong to RSA. + (_gcry_rsa_encrypt): Likewise. + (_gcry_rsa_decrypt): Likewise. + (_gcry_rsa_sign): Likewise. + (_gcry_rsa_verify): Likewise. + (_gcry_rsa_get_nbits): Likewise. + +2003-05-30 Moritz Schulte + + * md.c (md_get_algo): Return zero in case to algorithm is enabled. + + * md.c (gcry_md_info): Adjusted for new no-errno-API. + (md_final): Likewise. + (gcry_md_get_algo): Likewise. + * pubkey.c (gcry_pk_get_keygrip): Likewise. + (gcry_pk_ctl): Likewise. + (gcry_pk_algo_info): Likewise. + * des.c (selftest): Likewise. + +2003-05-29 Moritz Schulte + + * md.c (md_enable): Do not forget to release module on error. + (gcry_md_open): Adjusted for new no-errno-API. + (md_open): Likewise. + (md_copy): Likewise. + (gcry_md_copy): Likewise. + (gcry_md_setkey): Likewise. + (gcry_md_algo_info): Likewise. + + * cipher.c (gcry_cipher_open): Adjusted for new no-errno-API and + also fixed a locking bug. + (gcry_cipher_encrypt): Adjusted for new no-errno-API. + (gcry_cipher_decrypt): Likewise. + (gcry_cipher_ctl): Likewise. + (gcry_cipher_info): Likewise. + (gcry_cipher_algo_info): Likewise. + +2003-05-28 Moritz Schulte + + * md.c (md_enable): Adjusted for libgpg-error. + (gcry_md_enable): Likewise. + (gcry_digest_register_default): Likewise. + (gcry_digest_register): Likewise. + (check_digest_algo): Likewise. + (prepare_macpads): Likewise. + (gcry_md_setkey): Likewise. + (gcry_md_ctl): Likewise. + (gcry_md_get): Likewise. + (gcry_md_algo_info): Likewise. + (gcry_md_info): Likewise. + * dsa.c (_gcry_dsa_generate): Likewise. + (_gcry_dsa_check_secret_key): Likewise. + (_gcry_dsa_sign): Likewie. + (_gcry_dsa_verify): Likewise. + * twofish.c (do_twofish_setkey): Likewise. + (twofish_setkey): Likewise. + * cipher.c (gcry_cipher_register): Likewise. + +2003-05-25 Moritz Schulte + + * rijndael.c (do_setkey): Adjusted for libgpg-error. + (rijndael_setkey): Likewise. + * random.c (gcry_random_add_bytes): Likewise. + * elgamal.c (_gcry_elg_generate): Likewise. + (_gcry_elg_check_secret_key): Likewise. + (_gcry_elg_encrypt): Likewise. + (_gcry_elg_decrypt): Likewise. + (_gcry_elg_sign): Likewise. + (_gcry_elg_verify): Likewise. + * rsa.c (_gcry_rsa_generate): Likewise. + (_gcry_rsa_check_secret_key): Likewise. + (_gcry_rsa_encrypt): Likewise. + (_gcry_rsa_decrypt): Likewise. + (_gcry_rsa_sign): Likewise. + (_gcry_rsa_verify): Likewise. + * pubkey.c (dummy_generate, dummy_check_secret_key, dummy_encrypt, + dummy_decrypt, dummy_sign, dummy_verify): Likewise. + (gcry_pubkey_register): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (sexp_elements_extract): Likewise. + (sexp_to_key): Likewise. + (sexp_to_sig): Likewise. + (sexp_to_enc): Likewise. + (sexp_data_to_mpi): Likewise. + (gcry_pk_encrypt): Likewise. + (gcry_pk_decrypt): Likewise. + (gcry_pk_sign): Likewise. + (gcry_pk_verify): Likewise. + (gcry_pk_testkey): Likewise. + (gcry_pk_genkey): Likewise. + (gcry_pk_ctl): Likewise. + * cipher.c (dummy_setkey): Likewise. + (check_cipher_algo): Likewise. + (gcry_cipher_open): Likewise. + (cipher_setkey): Likewise. + (gcry_cipher_ctl): Likewise. + (cipher_encrypt): Likewise. + (gcry_cipher_encrypt): Likewise. + (cipher_decrypt): Likewise. + (gcry_cipher_decrypt): Likewise. + (gcry_cipher_info): Likewise. + (gcry_cipher_algo_info): Likewise. + * cast5.c (cast_setkey): Likewise. + (do_cast_setkey): Likewise. + * arcfour.c (arcfour_setkey): Likewise. + (do_arcfour_setkey): Likewise. + * blowfish.c (do_bf_setkey): Likewise. + (bf_setkey): Likewise. + * des.c (do_des_setkey): Likewise. + (do_tripledes_setkey): Likewise. + +2003-05-22 Moritz Schulte + + * tiger.c: Merged code ussing the U64_C macro from GnuPG. + + * sha512.c: Likewise. + +2003-05-17 Moritz Schulte + + * pubkey.c (gcry_pk_genkey): Fix type: acquire a lock, instead of + releasing it. + +2003-05-11 Moritz Schulte + + * pubkey.c (gcry_pk_testkey): Call REGISTER_DEFAULT_CIPHERS. + (gcry_pk_ctl): Likewise. + +2003-04-27 Moritz Schulte + + * pubkey.c (gcry_pk_genkey): Release sexp after extracted data has + been used. + + * md.c (gcry_md_get_algo_dlen): Simplified, simply call + md_digest_length to do the job. + + * des.c (do_des_setkey): Check for selftest failure not only + during initialization. + (do_tripledes_setkey): Include check for selftest failure. + + * pubkey.c (gcry_pubkey_register_default): New macro + `pubkey_use_dummy', use it. + + * elgamal.c (elg_names): New variable. + (pubkey_spec_elg): Include elg_names. + + * dsa.c (dsa_names): New variable. + (pubkey_spec_dsa): Include dsa_names. + + * rsa.c (rsa_names): New variable. + (pubkey_spec_rsa): Include rsa_names. + + * pubkey.c (gcry_pubkey_lookup_func_name): Compare name also with + the names listed in `sexp_names'. + +2003-04-24 Moritz Schulte + + * pubkey.c (sexp_to_key): New variables: module, pubkey. Adjusted + to new module interface. + (sexp_to_key): Changend type of argument `retalgo' from `int *' to + `GcryModule **'. Adjusted all callers. Removed argument: + r_algotblidx. + (sexp_to_sig): Changend type of argument `retalgo' from `int *' to + `GcryModule **'. Adjusted all callers. + (sexp_to_enc): Likewise. + + (pubkey_get_npkey, pubkey_get_nskey, pubkey_get_nsig, + pubkey_get_nenc): Use strlen to find out the number. + + * rsa.c: Adjust pubkey_spec_rsa to new internal interface. + * dsa.c: Likewise. + * elgamal.c: Likewise. + +2003-04-17 Moritz Schulte + + * pubkey.c (sexp_elements_extract): New function. + * pubkey.c (sexp_to_key): Removed variable `idx', added `err', use + sexp_elements_extract. + (sexp_to_sig): Likewise. + (sexp_to_enc): Likewise. + + * pubkey.c: Terminate list correctly. + * md.c: Include sha512/sha384 in digest_table. + +2003-04-16 Moritz Schulte + + * Makefile.am: Include support for sha512.c. + + * sha512.c: New file, merged from GnuPG, with few modifications + for libgcrypt. + + * rand-internal.h: Removed declarations for constructor functions. + + * md.c (md_copy): Call _gcry_module_use for incrementing the usage + counter of the digest modules. + + * rsa.c: Do not include "rsa.h". + * dsa.c: Do not include "dsa.h". + * elgamal.c: Do not include "elgamal.h". + * des.c: Do not include "des.h". + * cast5.c: Do not include "cast5.h". + * blowfish.c: Do not include "blowfish.h". + * arcfour.c: Do not include "arcfour.h". + + * Makefile.am (libcipher_la_DEPENDENCIES): Removed. + (libcipher_la_LIBADD): Removed. + Use Automake conditionals for conditional compilation. + +2003-04-13 Moritz Schulte + + * cipher.c (gcry_cipher_open): Call REGISTER_DEFAULT_CIPHERS. + + * md.c (gcry_md_list): New member: module. + (md_enable): New variable: module, changed use of module and + digest. + (md_enable): Initialize member: module. + (md_close): Call _gcry_module_release. + + * cipher.c (gcry_cipher_open): New variable: module, changed use of + module and cipher. + (struct gcry_cipher_handle): New member: module. + (gcry_cipher_open): Initialize member: module. + (gcry_cipher_close): Call _gcry_module_release. + +2003-04-09 Moritz Schulte + + * cipher.c: Include "ath.h". + * md.c: Likewise. + * pubkey.c: Likewise. + + * cipher.c (ciphers_registered_lock): New variable. + * md.c (digests_registered_lock): New variable. + * pubkey.c (pubkeys_registered_lock): New variable. + + * rndlinux.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndlinux_constructor): Removed function. + + * rndegd.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndegd_constructor): Removed function. + + * rndunix.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndunix_constructor): Removed function. + + * rndw32.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rndw32_constructor): Removed function. + + * rndegd.c (rndegd_connect_socket): Simplify code for creating the + egd socket address. + (rndegd_connect_socket): Call log_fatal use instead of + g10_log_fatal. + (egd_gather_random): Renamed to ... + (rndegd_gather_random): ... here. + +2003-04-08 Moritz Schulte + + * rndlinux.c: Do not include "dynload.h". + * rndunix.c: Likewise. + * rndw32.c: Likewise. + + * rndegd.c (rndegd_connect_socket): Factored out from ... + (egd_gather_random): here; call it. + (egd_socket): New variable. + (egd_gather_random): Initialize fd with egd_socket, do not declare + fd static. + (do_read): Merged few changes from GnuPG. FIXME - not finished? + Do not include "dynload.h". + + * rndw32.c (gather_random): Renamed to rndw32_gather_random, do + not declare static. + (gather_random_fast): Renamed to rndw32_gather_random_fast, do not + declare static. + + * rndunix.c (gather_random): Renamed to rndunix_gather_random, do + not declare static. + * rndegd.c (gather_random): Renamed to rndegd_gather_random, do + not declare static. + * rndlinux.c (gather_random): Renamed to rndlinux_gather_random, + do not declare static. + +2003-04-07 Moritz Schulte + + * Makefile.am (libcipher_la_SOURCES): Removed construct.c. + (libcipher_la_SOURCES): Added sha1.c, sha256.c, rmd160.c, md4.c, + md5.c, tiger.c and crc.c + (EXTRA_PROGRAMS): Removed sha1, sha256, rmd160, md4, md5, tiger + and crc. Removed definitions: EXTRA_md4_SOURCES, + EXTRA_md5_SOURCES, EXTRA_rmd160_SOURCES, EXTRA_sha1_SOURCES, + EXTRA_sha256_SOURCES, EXTRA_tiger_SOURCES and EXTRA_crc_SOURCES, + BUILT_SOURCES, DISTCLEANFILES. + + * pubkey.c: Do not include "elgamal.h", "dsa.h" and "rsa.h". + + * Makefile.am (libcipher_la_SOURCES): Removed rsa.h, elgamal.h, + dsa.h, des.h, cast5.h, arcfour.h and blowfish.h. + + * rsa.h: Removed file. + * elgamal.h: Removed file. + * dsa.h: Removed file. + * des.h: Removed file. + * cast5.h: Removed file. + * arcfour.h: Removed file. + * blowfish.h: Removed file. + + * Makefile.am (libcipher_la_SOURCES): Removed dynload.c and + dynload.h. + + * rsa.c (pubkey_spec_rsa): New variable. + * dsa.c (pubkey_spec_rsa): New variable. + * elgamal.c (pubkey_spec_elg): New variable. + + * rsa.c (_gcry_rsa_get_info): Removed function. + * elgamal.c (_gcry_elg_get_info): Removed function. + * dsa.c (_gcry_dsa_get_info): Removed function. + + * tiger.c (tiger_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_tiger_constructor): Removed function. + + * sha1.c (sha1_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_sha1_constructor): Removed function. + + * sha256.c (sha256_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_sha256_constructor): Removed function. + + * rmd160.c (rmd160_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_rmd160_constructor): Removed function. + + * md5.c (md5_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_md5_constructor): Removed function. + + * md4.c (md4_get_info): Removed function. + (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func): Removed function. + (_gcry_md4_constructor): Removed function. + + * crc.c (crc_get_info): Removed function. + + * arcfour.c (do_arcfour_setkey): Changed type of context argument + to `void *', added local variable for cast, adjusted callers. + (arcfour_setkey): Likewise. + (encrypt_stream): Likewise. + * cast5.c (cast_setkey): Likewise. + (encrypt_block): Likewise. + * rijndael.c (rijndael_setkey): Likewise. + (rijndael_encrypt): Likewise. + (rijndael_decrypt): Likewise. + * twofish.c (twofish_setkey): Likewise. + (twofish_encrypt): Likewise. + (twofish_decrypt): Likewise. + * des.c (do_des_setkey): Likewise. + (do_des_encrypt): Likewise. + (do_des_encrypt): Likewise. + (do_tripledes_encrypt): Likewise. + (do_tripledes_encrypt): Likewise. + * blowfish.c (bf_setkey: Likewise. + (encrypt_block): Likewise. + (decrypt_block): Likewise. + + * arcfour.c (encrypt_stream): Likewise. + + * rijndael.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func) Removed function. + + * twofish.c (gnupgext_version, func_table): Removed definitions. + (gnupgext_enum_func) Removed function. + + * cast5.c (CIPHER_ALGO_CAST5): Removed. + + * blowfish.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Removed macros. + (CIPHER_ALGO_BLOWFISH): Removed symbol. + * cast5.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Likewise. + * des.c (selftest_failed): Removed. + (initialized): New variable. + (do_des_setkey): Run selftest, if not yet done. + (FNCCAST_SETKEY, FNCCAST_CRYPT): Removed macros. + + * arcfour.c (_gcry_arcfour_get_info): Removed function. + * blowfish.c (_gcry_blowfish_get_info): Removed function. + * cast5.c (_gcry_cast5_get_info): Removed function. + * des.c (_gcry_des_get_info): Removed function. + * rijndael.c (_gcry_rijndael_get_info): Removed function. + * twofish.c (_gcry_twofish_get_info): Removed function. + + * arcfour.c (cipher_spec_arcfour): New variable. + * twofish.c (cipher_spec_twofish, cipher_spec_twofish128): New + variables. + * rijndael.c (cipher_spec_aes, cipher_spec_aes192, + cipher_spec256): New variables. + * des.c (cipher_spec_des, cipher_spec_tripledes): New variables. + * cast5.c (cipher_spec_cast5): New variable. + * blowfish.c (cipher_spec_blowfish): Likewise. + + * twofish.c: Do not include "dynload.h". + * rijndael.c: Likewise. + * des.c: Likewise. + * cast5.c: Likewise. + * blowfish.c: Likewise. + * cipher.c: Likewise. + * crc.c: Likewise. + * md4.c: Likewise. + * md5.c: Likewise. + * md.c: Likewise. + * pubkey.c: Likewise. + * rijndael.c: Likewise. + * sha1.c: Likewise. + * sha256.c: Likewise. + + * arcfour.c: Include "cipher.h". + * twofish.c: Likewise. + * rijndael.c: Likewise. + * des.c: Likewise. + * cast5.c: Likewise. + * blowfish.c: Likewise. + + * twofish.c (twofish_setkey): Declared argument `key' const. + (twofish_encrypt): Declared argument `inbuf' const. + (twofish_decrypt): Likewise. + + * rijndael.c (rijndael_setkey): Declared argument `key' const. + (rijndael_encrypt): Declared argument `inbuf' const. + (rijndael_decrypt): Likewise. + + * des.c (do_des_setkey): Declared argument `key' const. + (do_tripledes_setkey): Likewise. + (do_des_encrypt): Declared argument `inbuf' const. + (do_des_decrypt): Likewise. + (do_tripledes_encrypt): Likewise. + (do_tripledes_decrypt): Likewise. + + * cast5.c (encrypt_block): Declared argument `inbuf' const. + (decrypt_block): Likewise. + (cast_setkey): Declared argument `key' const. + + * blowfish.c (do_bf_setkey): Declared argument `key' const. + (encrypt_block): Declared argument `inbuf' const. + (encrypt_block): Likewise. + + + + * cipher.c: Remove CIPHER_ALGO_DUMMY related code. + Removed struct cipher_table_s. + Changed definition of cipher_table. + Removed definition of disabled_algos. + (ciphers_registered, default_ciphers_registered): New variables. + (REGISTER_DEFAULT_CIPHERS): New macro. + (dummy_setkey): Declared argument `key' const. + (dummy_encrypt_block): Declared argument `inbuf' const. + (dummy_encrypt_block): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_setkey): Use `unsigned char' instead of `byte'. + (dummy_encrypt_block): Likewise. + (dummy_decrypt_block): Likewise. + (dummy_encrypt_stream): Likewise. + (dummy_decrypt_stream): Likewise. + (gcry_cipher_register_default): New function. + (gcry_cipher_lookup_func_id): New function. + (gcry_cipher_lookup_func_name): New function. + (gcry_cipher_lookup_id): New function. + (gcry_cipher_lookup_name): New function. + (gcry_cipher_id_new): New function. + (gcry_cipher_register): New function. + (gcry_cipher_unregister): New function. + (setup_cipher_table): Removed function. + (load_cipher_modules): Removed function. + (gcry_cipher_map_name): Adjusted to use new module management. + (cipher_algo_to_string): Likewise. + (disable_cipher_algo): Likewise. + (check_cipher_algo): Likewise. + (cipher_get_keylen): Likewise. + (cipher_get_blocksize): Likewise. + (gcry_cipher_open): Likewise. + (struct gcry_cipher_handle): Replaced members algo, algo_index, + blocksize, setkey, encrypt, decrypt, stencrypt, stdecrypt with one + member: cipher. + (gcry_cipher_open): Adjusted code for new handle structure. + (cipher_setkey): Likewise. + (cipher_setiv): Likewise. + (cipher_reset): Likewise. + (do_ecb_encrypt): Likewise. + (do_ecb_decrypt): Likewise. + (do_cbc_encrypt): Likewise. + (do_cbc_decrypt): Likewise. + (do_cfb_encrypt): Likewise. + (do_cfb_decrypt): Likewise. + (do_ctr_encrypt): Likewise. + (cipher_encrypt): Likewise. + (gcry_cipher_encrypt): Likewise. + (cipher_decrypt): Likewise. + (gcry_cipher_decrypt): Likewise. + (cipher_sync): Likewise. + (gcry_cipher_ctl): Likewise. + + * pubkey.c: Removed struct pubkey_table_s. + Changed definition of pubkey_table. + Removed definition of disabled_algos. + (pubkeys_registered, default_pubkeys_registered): New variables. + (REGISTER_DEFAULT_PUBKEYS): New macro. + (setup_pubkey_table): Removed function. + (load_pubkey_modules): Removed function. + (gcry_pubkey_register_default): New function. + (gcry_pubkey_lookup_func_id): New function. + (gcry_pubkey_lookup_func_name): New function. + (gcry_pubkey_lookup_id): New function. + (gcry_pubkey_lookup_name): New function. + (gcry_pubkey_id_new): New function. + (gcry_pubkey_register): New function. + (gcry_pubkey_unregister): New function. + (gcry_pk_map_name): Adjusted to use new module management. + (gcry_pk_algo_name): Likewise. + (disable_pubkey_algo): Likewise. + (check_pubkey_algo): Likewise. + (pubkey_get_npkey): Likewise. + (pubkey_get_nskey): Likewise. + (pubkey_get_nsig): Likewise. + (pubkey_get_nenc): Likewise. + (pubkey_generate): Likewise. + (pubkey_check_secret_key): Likewise. + (pubkey_encrypt): Likewise. + (pubkey_decrypt): Likewise. + (pubkey_sign): Likewise. + (pubkey_verify): Likewise. + (gcry_pk_get_nbits): Likewise. + (gcry_pk_algo_info): Likewise. + + * md.c: Removed struct md_digest_list_s. + (digest_list): Changed definition. + (digests_registered, default_digests_registered): New variables. + (REGISTER_DEFAULT_DIGESTS): New macro. + (new_list_item): Removed function. + (setup_md_table): Removed function. + (load_digest_module): Removed function. + (gcry_digest_register_default): New function. + (gcry_digest_lookup_func_id): New function. + (gcry_digest_lookup_func_name): New function. + (gcry_digest_lookup_id): New function. + (gcry_digest_lookup_name): New function. + (gcry_digest_id_new): New function. + (gcry_digest_register): New function. + (gcry_digest_unregister): New function. + (GcryDigestEntry): New type. + (struct gcry_md_context): Adjusted type of `list'. + (gcry_md_map_name): Adjusted to use new module management. + (digest_algo_to_string): Likewise. + (check_digest_algo): Likewise. + (md_enable): Likewise. + (md_digest_length): Likewise. + (md_asn_oid): Likewise. + +2003-04-07 Moritz Schulte + + * pubkey.c: Replaced PUBKEY_ALGO_DSA with GCRY_PK_DSA, + PUBKEY_ALGO_RSA with GCRY_PK_RSA and PUBKEY_ALGO_ELGAMAL with + GCRY_PK_ELG. + + * dsa.c: Replaced PUBKEY_ALGO_DSA with GCRY_PK_DSA. + +2003-04-01 Moritz Schulte + + * des.c: Removed checks for GCRY_CIPHER_3DES and GCRY_CIPHER_DES. + +2003-03-31 Moritz Schulte + + * tiger.c (tiger_get_info): Do not declare static. + * sha256.c (sha256_get_info): Likewise. + * sha1.c (sha1_get_info): Likewise. + * rmd160.c (rmd160_get_info): Likewise. + * md5.c (md5_get_info): Likewise. + * md4.c (md4_get_info): Likewise. + * crc.c (crc_get_info): Likewise. + + * md.c (load_digest_module): Call setup_md_table during + initialization. + (new_list_item): Link new element into digest_list. + + * cipher.c (do_ctr_decrypt): Made do_ctr_encrypt act as a wrapper + for do_ctr_encrypt, since these functions are identical. + +2003-03-30 Simon Josefsson + + * cipher.c (struct gcry_cipher_handle): Add counter field. + (gcry_cipher_open): Add CTR. + (cipher_reset): Clear counter field. + (do_ctr_encrypt, do_ctr_decrypt): New functions. + (cipher_encrypt, cipher_decrypt): Call CTR functions. + (gcry_cipher_ctl): Add SET_CTR to set counter. + +2003-03-30 Moritz Schulte + + * rsa.c (_gcry_rsa_blind): New function. + (_gcry_rsa_unblind): New function. + (_gcry_rsa_decrypt): Use _gcry_rsa_blind and _gcry_rsa_decrypt. + +2003-03-26 Moritz Schulte + + * dynload.c (_gcry_enum_gnupgext_pubkeys): Adjust `encrypt' and + `decrypt' function arguments. + (_gcry_enum_gnupgext_pubkeys): Likewise. + * dynload.h: Likewise. + + * pubkey.c (dummy_decrypt): Add argument: int flags. + (dummy_encrypt): Likewise. + + * elgamal.c (_gcry_elg_encrypt): Add argument: int flags. + (_gcry_elg_decrypt): Likewise. + + * rsa.c (_gcry_rsa_encrypt): Add argument: int flags. + (_gcry_rsa_decrypt): Likewise. + + * pubkey.c: Add `flags' argument to members `encrypt' and + `decrypt' of struct `pubkey_table_s'. + + * rsa.h: Add `flags' argument to function declarations. + * elgamal.h: Likewise. + + * pubkey.c (sexp_data_to_mpi): New variable: int parsed_flags. + (sexp_data_to_mpi): Set `parsed_flags'. + (sexp_data_to_mpi): New argument: int *flags. + (gcry_pk_encrypt): New variable: int flags. + (gcry_pk_encrypt): Pass `flags' to pubkey_encrypt. + (pubkey_encrypt): New variable: int flags. + (pubkey_encrypt): Pass `flags' to pubkey encrypt function. + (pubkey_decrypt): Likewise. + (pubkey_decrypt): Pass `flags' to pubkey encrypt function. + (gcry_pk_encrypt): Include `flags' s-exp in return list. + (sexp_to_enc): New argument: int *flags. + (gcry_pk_decrypt): New variable: int flags. + (gcry_pk_decrypt): Pass `flags' to pubkey_decrypt. + (sexp_to_enc): New variable: int parsed_flags. + (sexp_to_enc): Set `parsed_flags'. + +2003-03-22 Simon Josefsson + + * cipher.c (gcry_cipher_open, do_cbc_encrypt) + (gcry_cipher_encrypt): Support GCRY_CIPHER_CBC_MAC. + (gcry_cipher_ctl): Support GCRYCTL_SET_CBC_MAC. + +2003-03-19 Werner Koch + + * primegen.c (gen_prime): New args EXTRA_CHECK and EXTRA_CHECK_ARG + to allow for a user callback. Changed all callers. + (_gcry_generate_secret_prime) + (_gcry_generate_public_prime): Ditto, pass them to gen_prime. + * rsa.c (check_exponent): New. + (generate): Use a callback to ensure that a given exponent is + actually generated. + +2003-03-12 Moritz Schulte + + * primegen.c: Initialize `no_of_small_prime_numbers' statically. + (gen_prime): Remove calculation of `no_of_small_prime_numbers'. + +2003-03-03 Moritz Schulte + + * md.c (gcry_md_ctl): Rewritten to use same style like the other + functions dispatchers. + +2003-03-02 Moritz Schulte + + * cipher.c (struct gcry_cipher_handle): New member: algo_index. + (gcry_cipher_open): Allocate memory for two cipher contexts. + Initialize algo_index. + (cipher_setkey): Duplicate context into reserved memory. + (cipher_reset): New function, which resets the context and clear + the IV. + (gcry_cipher_ctl): Call cipher_reset. + +2003-02-23 Moritz Schulte + + * cipher.c: Remove (bogus) `digitp' macro definition. + * md.c: Likewise. + + * blowfish.c (burn_stack): Removed. + * arcfour.c (burn_stack): Likewise. + * cast5.c (burn_stack): Likewise. + * des.c (burn_stack): Likewise. + * md4.c (burn_stack): Likewise. + * md5.c (burn_stack): Likewise. + * random.c (burn_stack): Likewise. + * rijndael.c (burn_stack): Likewise. + * rmd160.c (burn_stack): Likewise. + * sha1.c (burn_stack): Likewise. + * sha256.c (burn_stack): Likewise. + * tiger.c (burn_stack): Likewise. + * twofish.c (burn_stack): Likewise. + + * blowfish.c: Changed all occurences of burn_stack to + _gcry_burn_stack. + * arcfour.c: Likewise. + * cast5.c: Likewise. + * des.c: Likewise. + * md4.c: Likewise. + * md5.c: Likewise. + * random.c: Likewise. + * rijndael.c: Likewise. + * rmd160.c: Likewise. + * sha1.c: Likewise. + * sha256.c: Likewise. + * tiger.c: Likewise. + * twofish.c: Likewise. + + * arcfour.c (_gcry_arcfour_get_info): Use GCRY_CIPHER_ARCFOUR + instead of hard-coded value `301'. + +2003-01-24 Werner Koch + + * random.c (_gcry_register_random_progress): New. + (_gcry_random_progress): New. + + * rndlinux.c (gather_random): Call the random progress function. + +2003-01-23 Werner Koch + + * rsa.c (generate): New arg USE_E to request a specific public + exponent. + (_gcry_rsa_generate): Ditto. + * elgamal.c (_gcry_elg_generate): Must add an dummy argument + instead of USE_E. + * dsa.c (_gcry_dsa_generate): Ditto. + * pubkey.c (dummy_generate): Ditto. + (pubkey_generate): Add USE_E arg and pass it down. + (gcry_pk_genkey): Detect "rsa-use-e" parameter and pass it to generate. + + * pubkey.c (sexp_to_enc): New arg RET_MODERN. + (gcry_pk_decrypt): Make use of it to return a real S-expression. + Return better error codes. + (gcry_pk_verify): Return better error codes. + +2003-01-21 Werner Koch + + * random.c (gcry_random_add_bytes): Add QUALITY argument, let + function return an error code and disable its core for now. + +2003-01-21 Timo Schulz + + * random.c (gcry_random_add_bytes): New. Function to add external + random to the pool. + +2003-01-20 Simon Josefsson + + * crc.c: New. + * Makefile.am (EXTRA_PROGRAMS, EXTRA_crc_SOURCES): Add crc.c. + * md.c (gcry_md_get_algo_dlen): Add values for CRC. + +2003-01-20 Werner Koch + + * sha256.c: New. + * bithelp.h (ror): New. + * Makfile.am: Add sha256.c. + * md.c (oid_table): Add values for SHA256 et al. + (gcry_md_get_algo_dlen): Likewise + +2003-01-20 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Implemented keygrips for DSA + and ElGamal. + +2003-01-17 Werner Koch + + * cipher.c (gcry_cipher_encrypt): Reworked so that the output will + never contain the plaintext even if the caller did not checked the + return value. + + * md.c (gcry_md_get_algo): Changed error code to GCRYERR_GENERAL + because we don't have an invalid md algo but no algorithm enabled. + + * pubkey.c (gcry_pk_genkey): Changed error code for bounds check + of table parameters to GCRYERR_INTERNAL. + + * md.c (gcry_md_open): Partly reverted Timo's change from + 2002-10-10 by removing the check for the algorithm. An algorithm + of 0 is allowed and anyway we should not double check it or check + it using a different function. Also fixed the flags check. + + * pubkey.c (gcry_pk_encrypt): Make sure that R_CIPH points to NULL + on error. + (gcry_pk_decrypt): Ditto for R_PLAIN. + (gcry_pk_sign): Ditto for R_SIG. + (gcry_pk_genkey): Ditto for R_KEY. + +2003-01-16 Werner Koch + + * md.c (gcry_md_write): Changed 2nd argument type to void*. + (gcry_md_hash_buffer): Changed type of boths buffers to void*. + (gcry_md_setkey): Changed 2nd argument type to void*. + +2003-01-15 Werner Koch + + * pubkey.c (sexp_data_to_mpi): New. This handles pkcs1 padding. + (gcry_pk_sign, gcry_pk_verify): Use it here. + (gcry_pk_encrypt): And here. + (pubkey_verify): Add debug code. + (sexp_to_enc): Handle flags in the input and return the pkcs1 flag + in a new parameter. + (gcry_pk_decrypt): Prepare for future pkcs1 handling. + +2002-12-19 Werner Koch + + * random.c (_gcry_random_initialize): New. + +2002-12-16 Werner Koch + + * cipher.c: Added a Teletrust specific OID for 3DES. + +2002-12-12 Werner Koch + + * md.c: Added another oddball OIW OID (sha-1WithRSAEncryption). + +2002-11-23 Werner Koch + + * md.c (load_digest_module): Enlarged checked_algos bitmap. + * md4.c (func_table): Fixed entry for md4. + Both by Simon Josephson. + (transform): Copy data to get the alignment straight. Tested only + on i386. + +2002-11-10 Simon Josefsson + + * cipher.c (gcry_cipher_open): Don't reject CTS flag. + (do_cbc_encrypt, do_cbc_decrypt, cipher_encrypt) + (gcry_cipher_encrypt, cipher_decrypt) + (gcry_cipher_decrypt): Support CTS flag. + (gcry_cipher_ctl): Toggle CTS flag. + +2002-11-10 Werner Koch + + * md4.c: New. By Simon Josefsson. + * Makefile.am (EXTRA_PROGRAMS): Add md4.c. + * md.c (oid_table,gcry_md_get_algo_dlen): MD4 support. + +2002-10-14 Werner Koch + + * arcfour.c (do_encrypt_stream): Don't use increment op when + assigning to the same variable. + +2002-10-10 Timo Schulz + + * pubkey.c (gcry_pk_genkey): Check boundaries. + + * md.c (gcry_md_open): Check that algo is available and only + valid flag values are used. + (gcry_md_get_algo): Add error handling. + +2002-09-26 Werner Koch + + * md.c: Include an OID for TIGER. + * tiger.c (tiger_get_info): Use a regular OID. + +2002-09-17 Werner Koch + + * random.c: Replaced mutex.h by the new ath.h. Changed all calls. + +2002-09-16 Werner Koch + + * arcfour.c (do_encrypt_stream): Use register modifier and modulo. + According to Nikos Mavroyanopoulos this increases perfromace on + i386 system noticable. And I always tought gcc is clever enough. + * md5.c (transform): Use register modifier. + * rmd160.c (transform): Ditto. + * sha1.c (transform): Ditto. We hope that there are 6 free registers. + * random.c (gcry_randomize): Rewrote to avoid malloc calls. + + * rndlinux.c (gather_random): Replaced remaining fprintfs by log_*. + * arcfour.c (do_arcfour_setkey): Ditto. + * twofish.c (do_twofish_setkey): Ditto. + * rndegd.c (gather_random): Ditto. + * rijndael.c (do_setkey): Ditto. + * random.c (_gcry_random_dump_stats): Ditto. + * primegen.c (_gcry_generate_elg_prime): Ditto. + * des.c (_gcry_des_get_info): Ditto. + * cast5.c (do_cast_setkey): Ditto. + * blowfish.c (do_bf_setkey): Ditto. + +2002-08-26 Werner Koch + + * des.c (weak_keys): Fixed one entry in the table and compared + all entries against the literature. + (selftest): Checksum the weak key table. + +2002-08-21 Werner Koch + + * pubkey.c: Enable keygrip calculation for "openpgp-rsa". + +2002-08-17 Werner Koch + + * cipher.c (setup_cipher_table): Don't overwrite the DES entry + with the entry for DUMMY. + +2002-08-14 Werner Koch + + * des.c (do_des_setkey,do_des_encrypt, do_des_decrypt): New. + (_gcry_des_get_info): Support plain old DES. + * cipher.c (setup_cipher_table): Put DES into the table. + +2002-07-25 Werner Koch + + * rndunix.c (_gcry_rndunix_constructor): Prefixed with _gcry_. + Noted by Stephan Austermuehle. + +2002-07-08 Timo Schulz + + * rndw32.c: Replaced the m_ memory functions with the real + gcry_ functions. Renamed all g10_ prefixed functions to log_. + +2002-06-12 Werner Koch + + * rsa.c (generate): Use e = 65537 for now. + +2002-06-11 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): Allow a "protected-private-key". + +2002-06-05 Timo Schulz + + * cipher.c (gcry_cipher_encrypt, gcry_cipher_decrypt): + Check that the input size is a multiple of the blocksize. + +2002-05-23 Werner Koch + + * md.c (oid_table): Add an rsadsi OID for MD5. + +2002-05-21 Werner Koch + + * primegen.c, elgamal.c, dsa.c (progress): Do not print anything + by default. Pass an extra identifying string to the callback and + reserved 2 argumenst for current and total counters. Changed the + register function prototype. + +2002-05-17 Werner Koch + + * rndegd.c (rndegd_constructor): Fixed name of register function + and prefixed the function name with _gcry_. + * rndw32.c (rndw32_constructor): Ditto. + * tiger.c (tiger_constructor): Ditto. + + * Makefile.am: Removed all dynamic loading stuff. + * dynload.c: Ditto. Now only used for the constructor system. + +2002-05-15 Werner Koch + + * random.c (gcry_random_bytes,gcry_random_bytes_secure) + (gcry_randomize): Make sure we are initialized. + +2002-05-14 Werner Koch + + Changed license of most files to the LGPL. + +2002-05-02 Werner Koch + + * random.c (_gcry_fast_random_poll): Initialize the module so the + mutex can be used. + + * primegen.c (small_prime_numbers): Moved table from smallprime.c + * smallprime.c: File removed. + + * des.c (leftkey_swap, rightkey_swap, working_memcmp): Made static. + + * cipher.c (gcry_cipher_map_name): Map "RIJNDAEL" to "AES". + * rijndael.c (rijndael_get_info): We do only support a 128 bit + blocksize so it makes sense to change the algorithm strings to + AES. + + * tiger.c (tiger_final): Removed superfluous token pasting operators. + * md5.c (md5_final): Ditto. + +2002-04-30 Werner Koch + + * cipher.c: Fixed list of copyright years. + +2002-03-18 Werner Koch + + * random.c (initialize): Initialize the new pool lock mutex. + (_gcry_fast_random_poll): Add locking and moved main + code out to... + (do_fast_random_poll): new function. + (read_pool): Use the new function here. + (get_random_bytes): Add locking. + (_gcry_update_random_seed_file): Ditto. + +2002-03-11 Werner Koch + + * md.c: Add rsaSignatureWithripemd160 to OID table. + +2002-02-20 Werner Koch + + * sha1.c: Removed a left over comment note. The code has been + rewritten from scratch in 1998. Thanks to Niels Möller for + reporting this misleading comment. + +2002-02-18 Werner Koch + + * rndunix.c (rndunix_constructor): Use the the new prefixed + function name. Reported by Jordi Mallach. + +2002-02-10 Werner Koch + + * random.c (mix_pool): Carry an extra failsafe_digest buffer + around to make the function more robust. + +2002-02-08 Werner Koch + + * random.c (add_randomness): Xor new data into the pool and not + just copy it. This avoids any choosen input attacks which are not + serious in our setting because an outsider won't be able to mix + data in and even then we keep going with a PRNG. Thanks to Stefan + Keller for pointing this out. + +2002-01-04 Werner Koch + + * pubkey.c (gcry_pk_genkey): Do not release skey - it is static. + + * primegen.c (gen_prime): Of course we should use set_bit + and not set_highbit to set the second high bit. + +2001-12-18 Werner Koch + + * rsa.c (generate): Loop until we find the exact modulus size. + Changed the exponent to 41. + (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings. + * primegen.c (gen_prime): Set 2 high order bits for secret primes. + + * Makefile.am (DISTCLEANFILES): Include construct.c. + +2001-12-17 Werner Koch + + * pubkey.c (gcry_pk_get_keygrip): New - experimental. + +2001-12-11 Werner Koch + + * cipher.c: Added OIDs for AES. + (gcry_cipher_mode_from_oid): New. + (gcry_cipher_map_name): Moved OID search code to .. + (search_oid): .. new function. + +2001-12-10 Werner Koch + + * pubkey.c (gcry_pk_encrypt): Find the signature algorithm by name + and not by number. + + * pubkey.c (gcry_pk_encrypt,gcry_pk_decrypt,gcry_pk_sign) + (gcry_pk_verify,gcry_pk_testkey, gcry_pk_genkey) + (gcry_pk_get_nbits): Release the arrays. Noted by Nikos + Mavroyanopoulos. + +2001-12-06 Werner Koch + + * cipher.c (gcry_cipher_map_name): Look also for OIDs prefixed + with "oid." or "OID.". + +2001-12-05 Werner Koch + + * pubkey.c (algo_info_table): Fixed entry for openpgp-rsa. + +2001-11-24 Werner Koch + + * pubkey.c: Added the rsaEncryption OID to the tables. + (sexp_to_key): Add an arg to return the index of the algorithm, + changed all callers. + (gcry_pk_sign): Find the signature algorithm by name and not by + number. + (gcry_pk_get_nbits): Fixed so that we can now really pass a secret + key to get the result. + + * md.c (gcry_md_map_name): Look also for OIDs prefixed with "oid." + or "OID." so that an OID string can be used as an S-Exp token. + +2001-11-20 Werner Koch + + * md.c (gcry_md_map_name): Lookup by OID if the the name begins + with a digit. + (oid_table): New. + +2001-11-16 Werner Koch + + * md.c (gcry_md_info): New operator GCRYCTL_IS_ALGO_ENABLED. + +2001-11-07 Werner Koch + + * md.c (gcry_md_hash_buffer): Close the handle which was left open + for algorithms other than rmd160. + +2001-08-08 Werner Koch + + * rndw32.c (gather_random): Use toolhelp in addition to the NT + gatherer for Windows2000. Suggested by Sami Tolvanen. + + * random.c (read_pool): Fixed length check, this used to be one + byte to strict. Made an assert out of it because the caller has + already made sure that only poolsize bytes are requested. + Reported by Marcus Brinkmann. + +2001-08-03 Werner Koch + + * cipher.c (cipher_encrypt, cipher_decrypt): Prepare to return + errors. We have to change the interface to all ciphers to make + this really work but we should do so to prepare for hardware + encryption modules. + (gcry_cipher_encrypt, gcry_cipher_decrypt): Return the error and + set lasterr. + (gcry_cipher_ctl): Make sure that errors from setkey are returned. + +2001-08-02 Werner Koch + + * rndlinux.c (gather_random): casted a size_t arg to int so that + the format string is correct. Casting is okay here and avoids + translation changes. + + * random.c (fast_random_poll): Do not check the return code of + getrusage. + + * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7 + and 8. + + * tiger.c (print_abc,print_data): Removed. + + * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c, arcfour.c + (burn_stack): New. Add wrappers for most functions to be able to + call burn_stack after the function invocation. This methods seems + to be the most portable way to zeroise the stack used. It does + only work on stack frame based machines but it is highly portable + and has no side effects. Just setting the automatic variables at + the end of a function to zero does not work well because the + compiler will optimize them away - marking them as volatile would + be bad for performance. + * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise. + * random.c (burn_stack): New. + (mix_pool): Use it here to burn the stack of the mixblock function. + + * primegen.c (_gcry_generate_elg_prime): Freed q at 3 places. + Thanks to Tommi Komulainen. + + * arcfour.c (arcfour_setkey): Check the minimim keylength against + bytes and not bits. + (selftest): Must reset the key before decryption. + +2001-05-31 Werner Koch + + * sha1.c (sha1_init): Made static. + + Changed all g10_ prefixed function names as well as some mpi_ + function names to cope with the introduced naming changes. + + * md.c (prepare_macpads): Made key const. + +2001-05-28 Werner Koch + + * rndegd.c (gather_random): Removed the use of tty_printf. + +2001-03-29 Werner Koch + + * md5.c (md5_final): Fixed calculation of hashed length. Thanks + to disastry@saiknes.lv for pointing out that it was horrible wrong + for more than 512MB of input. + * sha1.c (sha1_final): Ditto. + * rmd160.c (rmd160_final): Ditto. + * tiger.c (tiger_final): Ditto. + + * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to + avoid name clashes with an encrypt function in stdlib.h of + Dynix/PIX. Thanks to Gene Carter. + * elgamal.c (encrypt,do_encrypt): Ditto. + + * twofish.c (gnupgext_enum_func): Use only when when compiled as a + module. + * rijndael.c (gnupgext_enum_func): Ditto. + + * tiger.c (tiger_get_info): Return "TIGER192" and not just + "TIGER". By Edwin Woudt. + + * random.c: Always include time.h - standard requirement. Thanks + to James Troup. + + * rndw32.c: Fixes to the macros. + +2001-01-11 Werner Koch + + * cipher.c (cipher_encrypt,gcry_cipher_encrypt): Use blocksize and + not 8. + +2000-12-19 Werner Koch + + Major change: + Removed all GnuPG stuff and renamed this piece of software + to gcrypt. + +2000-11-14 Werner Koch + + * dsa.c (test_keys): Replaced mpi_alloc by gcry_mpi_new and + mpi_free by gcry_mpi_release. + * elgamal.c (test_keys,generate): Ditto, also for mpi_alloc_secure. + * rsa.c (test_keys,generate,rsa_verify): Ditto. + * primegen.c (generate_elg_prime): Ditto. + (gen_prime): Ditto and removed nlimbs. + + * rsa.c (generate): Allocate 2 more vars in secure memory. + + * Makefile.am (OMIT_DEPENDENCIES): Hack to work around dependency + problems. + +2000-10-09 Werner Koch + + * arcfour.c, arcfour.h: New. + * cipher.c (cipher_encrypt, cipher_decrypt): Add stream mode. + (setup_cipher_table): Add Arcfour. + (gcry_cipher_open): Kludge to allow stream mode. + +Wed Oct 4 13:16:18 CEST 2000 Werner Koch + + * sha1.c (transform): Use rol() macro. Actually this is not needed + for a newer gcc but there are still aoter compilers. + + * rsa.c (test_keys): Use new random function. + + * md.c (gcry_md_setkey): New function to overcome problems with + const conflics. + (gcry_md_ctl): Pass set key to the new functions. + + * rijndael.c: New. + * cipher.c: Add Rijndael support. + +Mon Sep 18 16:35:45 CEST 2000 Werner Koch + + * rndlinux.c (open_device): Loose random device checking. + By Nils Ellmenreich. + + * random.c (fast_random_poll): Check ENOSYS for getrusage. + * rndunix.c: Add 2 sources for QNX. By Sam Roberts. + + * pubkey.c (gcry_pk_algo_info): Add GCRYCTL_GET_ALGO_USAGE. + + * rsa.c: Changed the comment about the patent. + (secret): Speed up by using the CRT. For a 2k keys this + is about 3 times faster. + (stronger_key_check): New but unused code to check the secret key. + * Makefile.am: Included rsa.[ch]. + * pubkey.c: Enabled RSA support. + (pubkey_get_npkey): Removed RSA workaround. + +Mon Jul 31 10:04:47 CEST 2000 Werner Koch + + * pubkey.c: Replaced all gcry_sexp_{car,cdr}_{data,mpi} by the new + gcry_sexp_nth_{data,mpi} functions. + +Tue Jul 25 17:44:15 CEST 2000 Werner Koch + + * pubkey.c (exp_to_key,sexp_to_sig,sexp_to_enc,gcry_pk_encrypt, + gcry_pk_decrypt,gcry_pk_sign,gcry_pk_genkey): Changed to work with + the new S-Exp interface. + +Mon Jul 17 16:35:47 CEST 2000 Werner Koch + + * random.c (gather_faked): Replaced make_timestamp by time(2) again. + +Fri Jul 14 19:38:23 CEST 2000 Werner Koch + + * md.c (gcry_md_ctl): Support GCRYCTL_{START,STOP}_DUMP. + + * Makefile.am: Never compile mingw32 as module. + + * Makefile.am: Tweaked module build and removed libtool + + * Makefile.am: Replaced -O1 by -O. Suggested by Alec Habig. + + * elgamal.c (sign): Removed inactive code. + + * rsa.c, rsa.h: New based on the old module version (only in CVS for now). + * pubkey.c (setup_pubkey_table): Added commented support for RSA. + + * rndunix.c (waitpid): New. For UTS 2.1. All by Dave Dykstra. + (my_popen): Do the FD_CLOEXEC only if it is available + (start_gatherer): Cope with missing _SC_OPEN_MAX + + * rndunix.c: Add some more headers for QNX. By Sam Roberts. + + * rndegd.c (gather_random): Shortcut level 0. + * rndunix.c (gather_random): Ditto. + * rndw32.c (gather_random): Ditto. + + * rndw32.c: Replaced with code from Cryptlib and commented the old stuff. + * rndw32.c: Add some debuging code enabled by an environment variable. + + * random.c (read_seed_file): Binary open for DOSish system + (update_random_seed_file): Ditto. + * random.c [MINGW32]: Include process.h for getpid. + * random.c (fast_random_poll): Add clock_gettime() as fallback for + system which support this POSIX.4 fucntion. By Sam Roberts. + + * random.c (read_seed_file): Removed the S_ISLNK test becuase it + is already covered by !S_ISREG and is not defined in Unixware. + Reported by Dave Dykstra. + (update_random_seed_file): Silently ignore update request when pool + is not filled. + + * random.c (read_seed_file): New. + (set_random_seed_file): New. + (read_pool): Try to read the seeding file. + (update_random_seed_file): New. + + (read_pool): Do an initial extra seeding when level 2 quality random + is requested the first time. This requestes at least POOLSIZE/2 bytes + of entropy. Compined with the seeding file this should make normal + random bytes cheaper and increase the quality of the random bytes + used for key generation. + + * random.c (read_pool): Print a more friendly error message in + cases when too much random is requested in one call. + + * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined; + this is not the case for some ESIX and Unixware, although they have + getrusage(). + + * primegen.c (generate_elg_prime): All primes are now generated with + the lowest random quality level. Because they are public anyway we + don't need stronger random and by this we do not drain the systems + entropy so much. + + * primegen.c (register_primegen_progress): New. + * dsa.c (register_pk_dsa_progress): New. + * elgamal.c (register_pk_elg_progress): New. + + * elgamal.c (wiener_map): New. + (gen_k): Use a much smaller k. + (generate): Calculate the qbits using the wiener map and + choose an x at a size comparable to the one choosen in gen_k + + * rmd160.c (rmd160_get_info): Moved casting to the left side due to a + problem with UTS4.3. Suggested by Dave Dykstra. + * sha1.c (sha1_get_info): Ditto. + * tiger.c (tiger_get_info): Ditto. + * md5.c (md5_get_info): Ditto + * des.c (des_get_info): Ditto. + * blowfish.c (blowfish_get_info): Ditto. + * cast5.c (cast5_get_info): Ditto. + * twofish.c (twofish_get_info): Ditto. + +Fri Mar 24 11:25:45 CET 2000 Werner Koch + + * md.c (md_open): Add hmac arg and allocate space for the pads. + (md_finalize): Add HMAC support. + (md_copy): Ditto. + (md_close): Ditto. + (gcry_md_reset): Ditto. + (gcry_md_ctl): Ditto. + (prepare_macpdas): New. + +Mon Mar 13 19:22:46 CET 2000 Werner Koch + + * md.c (gcry_md_hash_buffer): Add support for the other algorithms. + +Mon Jan 31 16:37:34 CET 2000 Werner Koch + + * genprime.c (generate_elg_prime): Fixed returned factors which never + worked for non-DSA keys. + +Thu Jan 27 18:00:44 CET 2000 Werner Koch + + * pubkey.c (sexp_to_key): Fixed mem leaks in case of errors. + +Mon Jan 24 22:24:38 CET 2000 Werner Koch + + * pubkey.c (gcry_pk_decrypt): Implemented. + (gcry_pk_encrypt): Implemented. + (gcry_pk_testkey): New. + (gcry_pk_genkey): New. + (pubkey_decrypt): Made static. + (pubkey_encrypt): Ditto. + (pubkey_check_secret_key): Ditto. + (pubkey_generate): Ditto. + +Mon Jan 24 13:04:28 CET 2000 Werner Koch + + * pubkey.c (pubkey_nbits): Removed and replaced by ... + (gcry_pk_get_nbits): this new one. + +Wed Dec 8 21:58:32 CET 1999 Werner Koch + + * dsa.c: s/mpi_powm/gcry_mpi_powm/g + * elgamal.c: Ditto. + * primegen.c: Ditto. + + * : Replaced g10_opt_verbose by g10_log_verbosity(). + + * Makefile.am (INCLUDES): removed intl, add ../gcrypt + +Fri Nov 19 17:15:20 CET 1999 Werner Koch + + * dynload.c (cmp_filenames): New to replaced compare_filename() in + module. + (register_cipher_extension): Removed the tilde expansion stuff. + * rndeg.c (my_make_filename): New. + + * : Replaced header util.h by g10lib.h + + * random.c (gather_faked): Replaced make_timestamp by time(2). + Disabled wrning printed with tty_printf. + * rndlinux.c (gather_random): Always use fprintf instead of tty_xxx; + this should be replaced by a callback function. + + * primegen.c (gen_prime): Use gcry_mpi_randomize. + (is_prime): Ditto. + * elgamal.c (test_keys): Ditto. + * dsa.c (test_keys): Ditto. + + * cipher.c (gcry_cipher_close): Die on invalid handle. + +Mon Nov 15 21:36:02 CET 1999 Werner Koch + + * elgamal.c (gen_k): Use the new random API. + (generate): Ditto. + * dsa.c (gen_k): Ditto. + (generate): Ditto. + +Sat Nov 13 17:44:23 CET 1999 Werner Koch + + * pubkey.c (disable_pubkey_algo): Made static. + (gcry_pk_ctl): New. + + * random.c (get_random_bits): Renamed to ... + (get_random_bytes): ... this and made static. + (gcry_random_bytes): New. + (gcry_random_bytes_secure): New. + (randomize_buffer): Renamed to ... + (gcry_randomize): ...this. + + * md.c (gcry_md_hash_buffer): New. + + * pubkey.c (gcry_pk_algo_info): 4 new commands. + (pubkey_get_npkey): Made static. + (pubkey_get_nskey): Made static. + (pubkey_get_nsig): Made static. + (pubkey_get_nenc): Made static. + + * pubkey.c: Removed all G10ERR_xxx. + * cipher.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_CIPHER_ALGO. + * md.c: Changed all GCRYERR_INV_ALGO to GCRYERR_INV_MD_ALGO. + * cast5.c (cast_setkey): Changed errocodes to GCRYERR_xxx. + * blowfish.c: Ditto. + * des.c: Ditto. + * twofish.c: Ditto. + * dsa.c: Ditto. + * elgamal.c: Ditto. + + * g10c.c: Removed + + * cipher.c (gcry_cipher_open): Replaced alloc functions and return NULL + if we are out of core. + * dynload.c: Replaced all memory allocation functions. + * md.c: Ditto. + * primegen.c: Ditto. + * pubkey.c: Ditto. + * random.c: Ditto. + * rndw32.c: Ditto. + * elgamal.c: Ditto. + * dsa.c: Ditto. + +Tue Oct 26 14:10:21 CEST 1999 Werner Koch + + * elgamal.c (sign): Hugh found strange code here. Replaced by BUG(). + + * cipher.c: Merged with gcrypt/symapi.c. + + * pubkey.c (string_to_pubkey_algo): Renamed function to ... + (gcry_pk_map_name): ... this. + (pubkey_algo_to_string): Renamed function to ... + (gcry_pk_algo_name): ... this. + (gcry_pk_algo_info): New. + * pubkey.c: Merged with gcrypt/pkapi.c. + + * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for + fixing this bug. + + * md.c: Merged with gcrypt/mdapi.c + +Wed Sep 15 14:39:59 CEST 1999 Michael Roth + + * des.c: Various speed improvements: One bit pre rotation + trick after initial permutation (Richard Outerbridge). + Finished test of SSLeay Tripple-DES patterns. + +Wed Sep 15 16:22:17 CEST 1999 Werner Koch + + * rndw32.c: New. + +Mon Sep 13 10:51:29 CEST 1999 Werner Koch + + * bithelp.h: New. + * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h + +Tue Sep 7 16:23:36 CEST 1999 Werner Koch + + * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert. + +Mon Sep 6 19:59:08 CEST 1999 Werner Koch + + * des.c (selftest): Add some testpattern + +Mon Aug 30 20:38:33 CEST 1999 Werner Koch + + * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using + in place encryption. Pointed out by Frank Stajano. + +Mon Jul 26 09:34:46 CEST 1999 Werner Koch + + * md5.c (md5_final): Fix for a SCO cpp bug. + +Thu Jul 15 10:15:35 CEST 1999 Werner Koch + + * elgamal.c (elg_check_secret_key,elg_encrypt + elg_decrypt,elg_sign,elg_verify): Sanity check on the args. + * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto. + + * pubkey.c (disable_pubkey_algo): New. + (check_pubkey_algo2): Look at disabled algo table. + * cipher.c (disable_cipher_algo): New. + (check_cipher_algo): Look at disabled algo table. + +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + * Makefile.am: Support for libtool. + +Fri Jul 2 11:45:54 CEST 1999 Werner Koch + + * dsa.c (gen_k): Changed algorithm to consume less random bytes + * elgamal.c (gen_k): Ditto. + + * random.c (random_dump_stats): New. + +Thu Jul 1 12:47:31 CEST 1999 Werner Koch + + * primegen.c, elgamal.c, dsa.c (progess): New and replaced all + fputc with a call to this function. + +Sat Jun 26 12:15:59 CEST 1999 Werner Koch + + * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs. + + * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New. + + * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra). + * Makefile.am (install-exec-hook): Removed. + +Sun May 23 14:20:22 CEST 1999 Werner Koch + + * cipher.c (setup_cipher_table): Enable Twofish + + * random.c (fast_random_poll): Disable use of times() for mingw32. + +Mon May 17 21:54:43 CEST 1999 Werner Koch + + * dynload.c (register_internal_cipher_extension): Minor init fix. + +Tue May 4 15:47:53 CEST 1999 Werner Koch + + * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug + that we didn't correct for step when passing the prime to the + Rabin-Miller test which led to bad performance (Stefan Keller). + (check_prime): Add a first Fermat test. + +Sun Apr 18 10:11:28 CEST 1999 Werner Koch + + * cipher.c (cipher_setiv): Add ivlen arg, changed all callers. + + * random.c (randomize_buffer): alway use secure memory because + we can't use m_is_secure() on a statically allocated buffer. + + * twofish.c: Replaced some macros by a loop to reduce text size. + * Makefile.am (twofish): No more need for sed editing. + +Fri Apr 9 12:26:25 CEST 1999 Werner Koch + + * cipher.c (cipher_open): Reversed the changes for AUTO_CFB. + + * blowfish.c: Dropped the Blowfish 160 mode. + * cipher.c (cipher_open): Ditto. + (setup_cipher_table): Ditto. And removed support of twofish128 + +Wed Apr 7 20:51:39 CEST 1999 Werner Koch + + * random.c (get_random_bits): Can now handle requests > POOLSIZE + + * cipher.c (cipher_open): Now uses standard CFB for automode if + the blocksize is gt 8 (according to rfc2440). + + * twofish.c: Applied Matthew Skala's patches for 256 bit key. + +Tue Apr 6 19:58:12 CEST 1999 Werner Koch + + * random.c (get_random_bits): Can now handle requests > POOLSIZE + + * cipher.c (cipher_open): Now uses standard CFB for automode if + the blocksize is gt 8 (according to rfc2440). + +Sat Mar 20 11:44:21 CET 1999 Werner Koch + + * rndlinux.c (tty_printf) [IS_MODULE]: Removed. + + * rndegd.c (gather_random): Some fixes. + +Wed Mar 17 13:09:03 CET 1999 Werner Koch + + * rndegd.c (do_read): New. + (gather_random): Changed the implementation. + +Mon Mar 8 20:47:17 CET 1999 Werner Koch + + * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed. + +Fri Feb 26 17:55:41 CET 1999 Werner Koch + + * md.c: Nearly a total rewrote. + +Wed Feb 24 11:07:27 CET 1999 Werner Koch + + * cipher.c (context): Fixed alignment + * md.c: Ditto. + + * rndegd.c: New + +Mon Feb 22 20:04:00 CET 1999 Werner Koch + + * rndegd.c: New. + +Wed Feb 10 17:15:39 CET 1999 Werner Koch + + * Makefile.am: Modules are now figured out by configure + * construct.c: New. Generated by configure. Changed all modules + to work with that. + * sha1.h: Removed. + * md5.h: Removed. + + * twofish.c: Changed interface to allow Twofish/256 + + * rndunix.c (start_gatherer): Die on SIGPIPE. + +Wed Jan 20 18:59:49 CET 1999 Werner Koch + + * rndunix.c (gather_random): Fix to avoid infinite loop. + +Sun Jan 17 11:04:33 CET 1999 Werner Koch + + * des.c (is_weak_key): Replace system memcmp due to bugs + in SunOS's memcmp. + (des_get_info): Return error on failed selftest. + * twofish.c (twofish_setkey): Return error on failed selftest or + invalid keylength. + * cast5.c (cast_setkey): Ditto. + * blowfish.c (bf_setkey): Return error on failed selftest. + +Tue Jan 12 11:17:18 CET 1999 Werner Koch + + * random.c (random_is_faked): New. + + * tiger.c: Only compile if we have the u64 type + +Sat Jan 9 16:02:23 CET 1999 Werner Koch + + * rndunix.c (gather_random): check for setuid. + + * Makefile.am: Add a way to staically link random modules + +Thu Jan 7 18:00:58 CET 1999 Werner Koch + + * md.c (md_stop_debug): Do a flush first. + (md_open): size of buffer now depends on the secure parameter + +Sun Jan 3 15:28:44 CET 1999 Werner Koch + + * rndunix.c (start_gatherer): Fixed stupid ==/= bug + +1998-12-31 Geoff Keating + + * des.c (is_weak_key): Rewrite loop end condition. + +Tue Dec 29 14:41:47 CET 1998 Werner Koch + + * random.c: add unistd.h for getpid(). + (RAND_MAX): Fallback value for Sun. + +Wed Dec 23 17:12:24 CET 1998 Werner Koch + + * md.c (md_copy): Reset debug. + +Mon Dec 14 21:18:49 CET 1998 Werner Koch + + * random.c (read_random_source): Changed the interface to the + random gathering function. + (gather_faked): Use new interface. + * dynload.c (dynload_getfnc_fast_random_poll): Ditto. + (dynload_getfnc_gather_random): Ditto. + * rndlinux.c (gather_random): Ditto. + * rndunix.c (gather_random): Ditto. + +Sat Dec 12 18:40:32 CET 1998 Werner Koch + + * dynload.c (SYMBOL_VERSION): New to cope with system which needs + underscores. + + * rndunix.c: Rewrote large parts + +Thu Dec 10 20:15:36 CET 1998 Werner Koch + + * dynload.c (load_extension): increased needed verbosity level. + + * random.c (fast_random_poll): Fallback to a default fast random + poll function. + (read_random_source): Always use the faked entroy gatherer if no + gather module is available. + * rndlinux.c (fast_poll): Removed. + * rndunix.c (fast_poll): Removed. + + +Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-*.c: Removed. + * rndlinux.c : New. + * rndunix.c : New. + * random.c : Restructured the interface to the gather modules. + (intialize): Call constructor functions + (read_radnom_source): Moved to here. + * dynload.c (dynload_getfnc_gather_random): New. + (dynload_getfnc_fast_random_poll): New. + (register_internal_cipher_extension): New. + (register_cipher_extension): Support of internal modules. + +Sun Nov 8 17:44:36 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c (read_random_source): Removed the assert. + +Mon Oct 19 18:34:30 1998 me,,, (wk@tobold) + + * pubkey.c: Hack to allow us to give some info about RSA keys back. + +Thu Oct 15 11:47:57 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dynload.c: Support for DLD + +Wed Oct 14 12:13:07 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c: Now uses names from configure for /dev/random. + +1998-10-10 SL Baur + + * Makefile.am: fix sed -O substitutions to catch -O6, etc. + +Tue Oct 6 10:06:32 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-) + * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto. + +Mon Sep 28 13:23:09 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_digest): New. + (md_reset): New. + +Wed Sep 23 12:27:02 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned. + +Mon Sep 21 06:22:53 1998 Werner Koch (wk@(none)) + + * des.c: Some patches from Michael. + +Thu Sep 17 19:00:06 1998 Werner Koch (wk@(none)) + + * des.c : New file from Michael Roth + +Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none)) + + * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys. + +Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none)) + + * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined. + +Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none)) + + * Makefile.am: Fixes to allow a different build directory + +Thu Aug 6 17:25:38 1998 Werner Koch,mobil,,, (wk@tobold) + + * random.c (get_random_byte): Removed and changed all callers + to use get_random_bits() + +Mon Jul 27 10:30:22 1998 Werner Koch (wk@(none)) + + * cipher.c : Support for other blocksizes + (cipher_get_blocksize): New. + * twofish.c: New. + * Makefile.am: Add twofish module. + +Mon Jul 13 21:30:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (read_pool): Simple alloc if secure_alloc is not set. + (get_random_bits): Ditto. + +Thu Jul 9 13:01:14 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dynload.c (load_extension): Function now nbails out if + the program is run setuid. + +Wed Jul 8 18:58:23 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (rmd160_hash_buffer): New. + +Thu Jul 2 10:50:30 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c (cipher_open): algos >=100 use standard CFB + +Thu Jun 25 11:18:25 1998 Werner Koch (wk@isil.d.shuttle.de) + + * Makefile.am: Support for extensions + +Thu Jun 18 12:09:38 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (mix_pool): simpler handling for level 0 + +Mon Jun 15 14:40:48 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c: Removed from dist, will reappear as dynload module + +Sat Jun 13 14:16:57 1998 Werner Koch (wk@isil.d.shuttle.de) + + * pubkey.c: Major changes to allow extensions. Changed the inteface + of all public key ciphers and added the ability to load extensions + on demand. + + * misc.c: Removed. + +Wed Jun 10 07:52:08 1998 Werner Koch,mobil,,, (wk@tobold) + + * dynload.c: New. + * cipher.c: Major changes to allow extensions. + +Mon Jun 8 22:43:00 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: Major internal chnages to support extensions. + * blowfish.c (blowfish_get_info): New and made all internal + functions static, changed heder. + * cast5.c (cast5_get_info): Likewise. + +Mon Jun 8 12:27:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c (transform): Fix for big endian + + * cipher.c (do_cfb_decrypt): Big endian fix. + +Fri May 22 07:30:39 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_get_oid): Add a new one for TIGER. + +Thu May 21 13:24:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: Add support for a dummy cipher + +Thu May 14 15:40:36 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (transform): fixed sigbus - I should better + add Christian von Roques's new implemenation of rmd160_write. + +Fri May 8 18:07:44 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New + * random.c: Moved system specific functions to rand-****.c + +Fri May 8 14:01:17 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (fast_random_poll): add call to gethrtime. + +Tue May 5 21:28:55 1998 Werner Koch (wk@isil.d.shuttle.de) + + * elgamal.c (elg_generate): choosing x was not correct, could + yield 6 bytes which are not from the random pool, tsss, tsss.. + +Tue May 5 14:09:06 1998 Werner Koch (wk@isil.d.shuttle.de) + + * primegen.c (generate_elg_prime): Add arg mode, changed all + callers and implemented mode 1. + +Mon Apr 27 14:41:58 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c (cipher_get_keylen): New. + +Sun Apr 26 14:44:52 1998 Werner Koch (wk@isil.d.shuttle.de) + + * tiger.c, tiger.h: New. + +Wed Apr 8 14:57:11 1998 Werner Koch (wk@isil.d.shuttle.de) + + * misc.c (check_pubkey_algo2): New. + +Tue Apr 7 18:46:49 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cipher.c: New + * misc.c (check_cipher_algo): Moved to cipher.c + * cast5.c: Moved many functions to cipher.c + * blowfish.c: Likewise. + +Sat Apr 4 19:52:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * cast5.c: Implemented and tested. + +Wed Apr 1 16:38:27 1998 Werner Koch (wk@isil.d.shuttle.de) + + * elgamal.c (elg_generate): Faster generation of x in some cases. + +Thu Mar 19 13:54:48 1998 Werner Koch (wk@isil.d.shuttle.de) + + * blowfish.c (blowfish_decode_cfb): changed XOR operation + (blowfish_encode_cfb): Ditto. + +Thu Mar 12 14:04:05 1998 Werner Koch (wk@isil.d.shuttle.de) + + * sha1.c (transform): Rewrote + + * blowfish.c (encrypt): Unrolled for rounds == 16 + (decrypt): Ditto. + +Tue Mar 10 16:32:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (transform): Unrolled the loop. + +Tue Mar 10 13:05:14 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (read_pool): Add pool_balance stuff. + (get_random_bits): New. + + * elgamal.c (elg_generate): Now uses get_random_bits to generate x. + + +Tue Mar 10 11:33:51 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_digest_length): New. + +Tue Mar 10 11:27:41 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dsa.c (dsa_verify): Works. + +Mon Mar 9 12:59:08 1998 Werner Koch (wk@isil.d.shuttle.de) + + * dsa.c, dsa.h: Removed some unused code. + +Wed Mar 4 10:39:22 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_open): Add call to fast_random_poll. + blowfish.c (blowfish_setkey): Ditto. + +Tue Mar 3 13:32:54 1998 Werner Koch (wk@isil.d.shuttle.de) + + * rmd160.c (rmd160_mixblock): New. + * random.c: Restructured to start with a new RNG implementation. + * random.h: New. + +Mon Mar 2 19:21:46 1998 Werner Koch (wk@isil.d.shuttle.de) + + * gost.c, gost.h: Removed because they did only contain trash. + +Sun Mar 1 16:42:29 1998 Werner Koch (wk@isil.d.shuttle.de) + + * random.c (fill_buffer): removed error message if n == -1. + +Fri Feb 27 16:39:34 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c (md_enable): No init if called twice. + +Thu Feb 26 07:57:02 1998 Werner Koch (wk@isil.d.shuttle.de) + + * primegen.c (generate_elg_prime): Changed the progress printing. + (gen_prime): Ditto. + +Tue Feb 24 12:28:42 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md5.c, md.5 : Replaced by a modified version of md5.c from + GNU textutils 1.22. + +Wed Feb 18 14:08:30 1998 Werner Koch (wk@isil.d.shuttle.de) + + * md.c, md.h : New debugging support + +Mon Feb 16 10:08:47 1998 Werner Koch (wk@isil.d.shuttle.de) + + * misc.c (cipher_algo_to_string): New + (pubkey_algo_to_string): New. + (digest_algo_to_string): New. + + + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + + This file is free software; as a special exception the author gives + unlimited permission to copy and/or distribute it, with or without + modifications, as long as this notice is preserved. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY, to the extent permitted by law; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. diff --git a/grub-core/lib/libgcrypt/cipher/Makefile.am b/grub-core/lib/libgcrypt/cipher/Makefile.am new file mode 100644 index 000000000..76cdc96ad --- /dev/null +++ b/grub-core/lib/libgcrypt/cipher/Makefile.am @@ -0,0 +1,83 @@ +# Makefile for cipher modules +# Copyright (C) 1998, 1999, 2000, 2001, 2002, +# 2003, 2009 Free Software Foundation, Inc. +# +# This file is part of Libgcrypt. +# +# Libgcrypt is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# Libgcrypt is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, see . + +# Process this file with automake to produce Makefile.in + +EXTRA_DIST = Manifest + +# Need to include ../src in addition to top_srcdir because gcrypt.h is +# a built header. +AM_CPPFLAGS = -I../src -I$(top_srcdir)/src +AM_CFLAGS = $(GPG_ERROR_CFLAGS) + + +noinst_LTLIBRARIES = libcipher.la + +GCRYPT_MODULES = @GCRYPT_CIPHERS@ @GCRYPT_PUBKEY_CIPHERS@ @GCRYPT_DIGESTS@ + +libcipher_la_DEPENDENCIES = $(GCRYPT_MODULES) +libcipher_la_LIBADD = $(GCRYPT_MODULES) + +libcipher_la_SOURCES = \ +cipher.c pubkey.c ac.c md.c kdf.c \ +hmac-tests.c \ +bithelp.h \ +primegen.c \ +hash-common.c hash-common.h \ +rmd.h + +EXTRA_libcipher_la_SOURCES = \ +arcfour.c \ +blowfish.c \ +cast5.c \ +crc.c \ +des.c \ +dsa.c \ +elgamal.c \ +ecc.c \ +idea.c \ +md4.c \ +md5.c \ +rijndael.c rijndael-tables.h \ +rmd160.c \ +rsa.c \ +seed.c \ +serpent.c \ +sha1.c \ +sha256.c \ +sha512.c \ +tiger.c \ +whirlpool.c \ +twofish.c \ +rfc2268.c \ +camellia.c camellia.h camellia-glue.c + +if ENABLE_O_FLAG_MUNGING +o_flag_munging = sed -e 's/-O\([2-9s][2-9s]*\)/-O1/' -e 's/-Ofast/-O1/g' +else +o_flag_munging = cat +endif + + +# We need to lower the optimization for this module. +tiger.o: $(srcdir)/tiger.c + `echo $(COMPILE) -c $(srcdir)/tiger.c | $(o_flag_munging) ` + +tiger.lo: $(srcdir)/tiger.c + `echo $(LTCOMPILE) -c $(srcdir)/tiger.c | $(o_flag_munging) ` diff --git a/grub-core/lib/libgcrypt/cipher/Manifest b/grub-core/lib/libgcrypt/cipher/Manifest new file mode 100644 index 000000000..0cd64f71f --- /dev/null +++ b/grub-core/lib/libgcrypt/cipher/Manifest @@ -0,0 +1,73 @@ +# Manifest - checksums of the cipher directory +# Copyright 2003 Free Software Foundation, Inc. +# +# This file is part of Libgcrypt. +# +# Libgcrypt is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser general Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# Libgcrypt is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +# Checksums for all source files in this directory. Format is +# filename, blanks, base-64 part of an OpenPGP detached signature +# without the header lines. Blank lines and lines beginning with a +# hash mark are ignored. A tool to process this file is available by +# cvs -d :pserver:anoncvs@cvs.gnupg.org:/cvs/wk co misc-scripts/manifest-tool +# +# The special entry "$names$" holds a signature over all sorted +# filenames excluding itself. + + +# Algorithm API +cipher.c iQCVAwUAQDzrVjEAnp832S/7AQIPDgP+OVJ/YNWY5m7c09EBbPAzL/WsGoj6wrBNMmkRlMOqTHeh+OOtjuFHt1f9uhfM2Nzl7sJ5+h4ryZKLEZmQPRMTZTnAqkvGdsrJWJnigUA9QwYdV0ONqC9C63gpuG465gO9TZVOqlQu/FTxSRuTQYUulkaBNG71n8nZEOusBVwV2YA==58xH +pubkey.c iQCVAwUAP9XQ3jEAnp832S/7AQJ5UgQAyHfEBvPVJ8wTRg8c7ixS2GiVmIgwIo5tvQaiQJTPWASevvYrB+2Z2qa9cATyu50ACjLzbaquGBgPzjJV3dU/qttT1gCqRuN/LCNvXFe5qnIZezejc3RAadFNTw/pOTHq0wxD1Keg66ruei9R36Nba59pEQIWIBXTfubRft2hMYk==E09t +ac.c iQCVAwUAQDzsOzEAnp832S/7AQJCBQP/WI6EV/dsR4rmha6RVhvkjZo17kQ8z6pIl5J3cXOvqEkIFeD2HYu3HHrWST5l7yXlffhpDkVHkfMih4ruK76q6Fm0dxZ98pO4C/dVtgimlvvcy/wOQjpzsE0fYAe1BYdg81LJ09X33vW5x6C29lunfKROO2tPlV5i8ffeoFvmMF8==j26g +md.c iQCVAwUAP+NFGjEAnp832S/7AQJs8wP/Qdk0EAKsyr3O1/pmOSN8AG4rPKbd6KDTzvoBPAN4upFwKYY4hWwvy12Q3YU9DmECrzZkRCXHR7mljVQKs6B7CRZJKjFKmOELpcJDtKvu40vTs1bOH4k9iJYZpGgRA83nkQ+ELAcphAbCA+KIpVr2K4mCJAB0FhpC2uOQ50JHAko==BeF6 +primegen.c iQCVAwUAQDzsoDEAnp832S/7AQKYRwP/TqAQBm1rHTnF0HYE05PqXfWlOqa6EosqVpaOcs/OIW6PaqX0xH1UlrukK7jNOjK3xC4o1qNQ1UKzz2dvQaq1bMvNNizeavxAh10SJZc0hIc/ofc83IbjLh8SZVWQ67JxjsUd3DOXmSmhPZ+Pqd7cUIiw8fDoF+I9EZqy3COu1wY==1ebT + +# Algorithm implementations +arcfour.c iQCVAwUAP9XR/TEAnp832S/7AQJcRwP6AlvYEx++fpT4mIYo0xRDqKEQeqMQvbaRhIg2eV74JxItpHa3q5YsYIl+n1yUz5g35JRWWXSWmAZBwO5wLKsHii4kRUhgrKWnSoQZoPpl49L5+N3R58ON3S0ru5lsBiEJEze3xplf2vqwrH9v1QHVD+gU7UTlfNqrIJoOUXN+1O4==Tq+x +blowfish.c iQCVAwUAP9XTETEAnp832S/7AQJaEgQAgiqqfuO+zQtscgTB0rvOzVymIKjRKjYhFuLjVuc79G4z1RCAffvIn/YM2d7kt+Z/QF7zjcTAOgETCQL1XokpX2zz9HPAMi2tlDY5zsDufTNqj0n4WBL9nM7w6XAvsiwP1B3bqCTv9SjJV4KbxJ58vw1yQE+sqW74R/QIHFvC7mU==wZnX +cast5.c iQCVAwUAP9XT6DEAnp832S/7AQJ3xgP/ehLjEN3GELGudbqeo91Xd+PqitHrkuBbtRIYX7Udd/fyXLN+h8rMJVyIQX2m+mpxbBxudVU3x8/DNT8B0ZHAwK6qqJmEBLLhEYPgIuF76i9LMrP1KqUPhAwRZ2OppjIIugBQ+rP74aD4eLyd/aKQHNuXML8QGWR6KwQShohXM5I==/BRh +crc.c iQCVAwUAP7ouejEAnp832S/7AQIgwQQApg5Nm63tH5DQkbN+zPzMO9Ygoj3ukxfFTyTBPYSXYKMiTjEbESegaU40uN8jnz2vprcIQWcgZfzO4+opEJMcI35aPwzEk0vKOp0S/PrBLUY2rJfnDVkX5XgJFZa2Q7LLe826UEBzTVYW924utiCCe8oOaOEWVNpg1mqdknu3M9o==kz5D +des.c iQCVAwUAQCN2oDEAnp832S/7AQL/jwP6Auoq6nZCDBjpgc9tDzuIRwa9DqyuM3gX94uvgEpUwdHszb2bG43dz03kVmcYxtj1MzXbyCeCZOwox0b2SKmLgxIbrNP6yGbzVdTj6592gDYuf/ZXmc1ZNJ1DDldcPQ0n9fXUipUPwyPaNWo3mSZaNcMKSWWzdK0J6ciG6nk7SWI==9k/t +dsa.c iQCVAwUAP9XZHDEAnp832S/7AQLBRgP/XrBzTEYx5ccMj1MMb6sg37liEHdIyyy49zjvt6jUqxj4RuwVEN8S6v3u4q/QyJkHAi1E0EkREgENlyHW6PKWhYbcrd0vPIAN15yjnl2yqtrCrJImexUCoqJJewK0E4JOicGbabTil8MZjk+mbhEPnjJBqOkyP1w0i31pEDgE/8M==pC8s +elgamal.c iQCVAwUAP9XbYzEAnp832S/7AQLXagQA3HrvspZfbTGgmUH0IqLQTJ0exUPxJv5DET2TvoIy62trDmMN6lTAj5P+a7jQ8udcu0w+mR2vXUHcxUpNA2PxLaMwGzNSY4zRDNe9r3SFTDrFm6m4y9Ko2e8XtEA+WF6P/XLpck4Jn7vMEDmVGPwkNd22kXFFE8dBGwG6i5Hk1Mk==oBUs +md4.c iQCVAwUAP9h50DEAnp832S/7AQJhHgQAzNA/B6MWFDlCtPkIVaW8RpP1Eg0ZNMsy0s7SJkopOCBlu6CwXUOKe+8ppcSxhjYKh4i4uQr/QtfipYlBjzKJGnrafoF/NugXNCOHSTGT11TvK7mCiBuUMVgvZGAlOJImk6eTTfUjRrMfaXM/SWl8bdJ4ZpzdjEyVh89r7I5JrGk==x2UD +md5.c iQCVAwUAP9h7LzEAnp832S/7AQJUGQP/c0cbf6WZXCzmjufHxiE9FAQBzTsA0WtaNqdFcHl7fhmikGtknlaED8n5a7eYd/C481UQW6Wgq/oZdsvgoPWPhG3fOCy2CFP9cZVXITuMSf0ucyZTFUJNO15fnZ+nDfsUv+JPdv1aSeRinAUtfAcSKfkSyR9BCPZvkx+tgU6cphU==Zv+h +rijndael.c iQCVAwUAP9h9cTEAnp832S/7AQKF1AP+P2L/tPqDJRDg+/fwbOk8Ts0MNxnvvYEm3gE73TKuLt1S+B2+jkrZcKNvM5VGPnVMJbnS0lmIK04nmedHCOftGTOwhGulZAHHIaKGystT3Jql4iPws/JMgAjE7Fyxh5WZMtB9yEljKBpJ5XNqhrMvvxcHpnyP3+YzIXNwzk34V+c==dJ5k +rmd160.c iQCVAwUAP9h+bTEAnp832S/7AQK1OgP+PNKF6Nzi6X93easVlksdLqKEsArCAw2QjGWDGyxTnbiJM55qAl9JxR1mn3V+oOL7izLLwTt6EYK9evhzfcxY5N5Mni85RAcsLPsuAfQDEzjI6GUWHtQUKPbM+BaorzfhQjYFSZyvum/dZYJ/WfiwwwhqqIKyVU2ZFSqA38YGC/c==9jdA +rsa.c iQCVAwUAP9iHIzEAnp832S/7AQKAYwQAuWtnMte54QHN+Hij9t4sGuypXogajOb1vQQwGgS0fKsaBZsuSP2amze4o5diIvsQTsFQ4CzjvqoCVuBDoHM3xkSD8wGDizgvtCamAxkdbF7wmzldKFn8SpJqlVwWQMP6kk1IjXHEuYb4IDWGTbVMhfEu+eOlU8+PSK4IhZqNvt4==/3hp +serpent.c iQCVAwUAP9h/VzEAnp832S/7AQLyCwP/d1zbmb7l/PriZNa9/Z7mo01XFe5MnAqCfIwhl9GjeaMszcoS37jECNq5nLvrTTFIIJpm3rvBePwiCG4Wwx1I18HCxaP198pcSaR+BLOJ3Aj52EZPrxtqlDKuFr38ZOP5giyUqUYVYGVdrz4kRMNWAZQK53GeJnGhXCnhxojLEgA==ck46 +sha1.c iQCVAwUAP9iATTEAnp832S/7AQKcSwQAwAs/HnNqho3lU1ZUgCPNt5P2/Brm6W21+wWWGKJkSrra/c4NYVKJGDDwlsFE0b9ln1uZt7bHReFkKXK3JnrKTmNVcx/Cy64iCMRNMhaM72Mqy7wWx5yHBAmMBxzFGnNQKbmeY52zeGih5HsNLSibc2pPuOViWo2JPJ5Ci/wIwl8==/wtO +sha256.c iQCVAwUAP9iAtzEAnp832S/7AQJD2QP/UqvL0hhjG1wEFbGrdkV9tba1sMDXdnnK6X7HdLuRpVAgNiQiFf8JDmntd/dZ2Q71p4Uae2ctqve4WoEijPUZPjACnpuZfx0SEQL0lQBkwxzJp7lz9ujVtwQ2cM/aYexJkXcWgGcloJNLM3JbWPGIJnuYbr/IwJ6RQF9vgj0357o==UWO1 +sha512.c iQCVAwUAP9iBTDEAnp832S/7AQIPBAQA28CJSUQLiW0s2x9u8/OH2eKnxPjA4sZmb50WP7920Lem66P31C3BrOqwfBot4RLhjL+zh/+Uc4s3HPwApZuj9E4BxNMlqLv+Tqk++DAbdaOeYT4jeUt+mlhQQ6mH/RDsy32rZsNsGQ2bUGxazZmfG++PL3JyhawqCy00SUDr/o0==H+0X +tiger.c iQCVAwUAP9iCfjEAnp832S/7AQKufwP/fryv3MqSOYY+90325DH7X3/CtekxeooN0scGsHX0fxBakWSMecTNrj33KPddLS46gU/S89zIc2N/Bw/7EVIAXVFA3/3Ip+OrFOuIMO4Py1sCdB8o2Y+5ygv8iXLcsXIq1O0av79i9g774V3uaXa2qN9ZnXe0AEhcy8FHJ2i/wro==5XVB +twofish.c iQCVAwUAP9iD6TEAnp832S/7AQKUnQP/Rq8FaYeHTG7HbZuqAs9pbPitzjDbkdZddmInWR7NmevBkKvhsJALjVooc0KGQfo2lAAmy3Xi/4QQN8VPn51DVjDIgf7x+DQh/9TFJHMccxI9asUgi4+TNnmMqLU1k3N8S2PjyZ1sjeC8B79fKPpwCzj72WkqPkzZw3l2jArr+dU==NdJT +rfc2268.c iQCVAwUAQCN+3jEAnp832S/7AQLv1gQA1hJh29hAjKi4uLSGxXvJ6cyYmPdmevdKrbLnuHZWtHe4xvCgy/nTdEojEpxgLp/hL/ogasuWRC1W16Wiz9ryxf7YR0uhZWayO/bQNagpfU5MIkJTLuKqqgpwYumCSQfOugXVAqcgEzj+13eeyJaFVrzwrNa67sh84nmbjOjNjvE==0zBq + +# Random number related +random.c iQCVAwUAP7nsITEAnp832S/7AQK4SAQAtvfUgrtGOQ2PlxGMla0qJLPHjJacMwgq0ecusiI79elPdDsFfCCk6dK1Ug2kFbNm22nCGHNcUquqbX7noi7ZVQnmPBQXzyLNZd7GmrawRZfdlRerTUDBpSnR8V8ui/5+YYp627E7kKGC0hPSgqXFql6oBMIfno0LZwFJTjIevRY==L419 +random.h iQCVAwUAP7ovKDEAnp832S/7AQJ3bQQAjnPebnyTC7sphAv2I7uIz+yPgw1ZfbVhLv+OiWDlO9ish+fRyyMpy+HELBOgZjJdgRegqhlZC6qyns5arM/VglYi+PzvdLO3hIqHE/YFfpIFPz8wBrcmlqrYyd3CsGqcYsfjocXNttCBLeSWmoJ09ltKQH8yzJf3oAgN6X1yuc4==eNoU +rand-internal.h iQCVAwUAP7ouvDEAnp832S/7AQLYnAQAhdI7ERoJVCkV8GiV7MjaUxv1WIL7iZ+jIOvVhv4fNyhCGCGoEtTjkyput/lj7Nsh3FXEqRhypGGrCLf47x/gua5n+BwffogxVyUDqiOyyGhNTPpe3fQcNBvbPCtco8yMK4GJO5G3BqzlPyN+BMeogLymyV6Sm1mvh5LZDyAFbfQ==tZSE +rndlinux.c iQCVAwUAP9iPYTEAnp832S/7AQL6/AP/ZDrbOkVuB9qJ7sKeX1MImZEsz3mi0xPovJzaBtBU7a0idcUKrWYOvQFWRlLUeq0iCT6+h2l5bniP7q7hepzlKa+VPY9VWaQthqeJm2l5LN6QQ5PyMfBq04QuBncw9BJnCGmEyTLt3RxIXBAPdxmiVxtcRIFUqCBtQvoUXGLvemw==t37k +rndegd.c iQCVAwUAP9iPRDEAnp832S/7AQImBQP/WHKg+hKXcm1pQvilzML0jZpwK5PAMM4uBnnPJNIXWOYBO6I/Xg9d/tPLg8NlmmtyQCo2Eu0ybDSt+8mu+dWveAys+0LTi0MIqeP9BMzCKz8dnWH6+S8huLXwTF3m0IrqM0JLb6b71GK9SOq6sWQ22yW5vf61hXP8kH9dhIaoMZs==FaHV +rndunix.c iQCVAwUAP9iQlzEAnp832S/7AQL/KgQA29GnvcD4Xb5qjDMBgW9THEE4+4lfex/6k+Fh0IT61OLJsWVLJ7bJpRntburw4uQm4Tf7CO8vaiDFDYhKKrzXeOF1fmdpcL8hA+fNp9I/MUOc4e9kN9+YJ9wikVa0SZj1OBfhzgcFLd1xOtulkr3ii52HLF9vhrxzkgVwvD10Bi8==2cML +rndw32.c iQCVAwUAP9iRKDEAnp832S/7AQIuaAQA3AJr3WqnxNDsWCIdvehf8Suotthj+laX8nJsvDfFhXPKcXDpsg0wTTXSnnKgyED53+uYiMDnVRsxeWAyhKwvx1MjjlaSMMjzbH6isWTH8FaWpLgrxEkXoPeNqYf5FXpdUkcUxGX2RkQeuX/cIfiHLNE9CV0usaF2jysjBX2iERY==EEnO + +# Helper +bithelp.h iQCVAwUAP7ouPTEAnp832S/7AQKXggQAqjcgvihIF3WclOgw1JV2rbARw4ISIDRMFqdaNCqBRx6BwEz3UGsEIlz6+iR1sS/reqN61WvtjLb+D0+tujAkGrgQJhFLG85WtG2tB5UVoI3am1fpkwiRm+bR4rv0rGk0BYk81bC7+l4KrK9o5lVp4lCsrorlUKsd48lNmBHyAXM==mDDN +rmd.h iQCVAwUAP7oumjEAnp832S/7AQJiJQP/V4bJwjZaYndJzV+KRnIDbl1koHuw+ZK5heMYVu8Qk4ylqv//BGyeRa3jZCcfPHI35q6HilCs2VBm8hiBMjHSqY/VPn2ZQ0yg/lt6qEvl7YjsLmyMICvjG+ncszHoq9pRvnF3vTnM18sPIioXLk8fskuM0XOCNBs0ARBAQjY9UGI==olUN + +# Configuration +Makefile.am iQCVAwUAQCN33TEAnp832S/7AQKFJAQAz7BDkC814q+QiuE/jnutJHR5qlgbrm3ikGbQwdRzYUscst4bCCWy3uKL/sIPGLg+JQXtF5FnsQy3s4D9BOYhp72cA9ktYK65hhi4pNm/JQ0lXkZMNfk8Go5lNzKezlWwHvkMwRXR0Fep0wPdyeaKW5BfaW2ABvgep6Bp+hHEbyg==zSyi +$names$ iQCVAwUAQCN3EDEAnp832S/7AQJXLAP8DvHTpm5DkTF35EmzeKpi9ie59AZcZanD19ir/e/7+PaQxr2riuLHDGwFKTju+dcvvBsqrygXOC378GXVWzIF2OZwS4EdDcJ+pgojo9UpsqpKsJHouY4Ugx5cQialxba462kUn8hcihSBnMyc4LzbJ5WQ4puQuqy544d2x94+2ms==G4Ls diff --git a/grub-core/lib/libgcrypt/cipher/ac.c b/grub-core/lib/libgcrypt/cipher/ac.c new file mode 100644 index 000000000..f5e946a2d --- /dev/null +++ b/grub-core/lib/libgcrypt/cipher/ac.c @@ -0,0 +1,3301 @@ +/* ac.c - Alternative interface for asymmetric cryptography. + Copyright (C) 2003, 2004, 2005, 2006 + 2007, 2008 Free Software Foundation, Inc. + + This file is part of Libgcrypt. + + Libgcrypt is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser general Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + Libgcrypt is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, see . + */ + +#include +#include +#include +#include +#include +#include + +#include "g10lib.h" +#include "cipher.h" +#include "mpi.h" + + + +/* At the moment the ac interface is a wrapper around the pk + interface, but this might change somewhen in the future, depending + on how many people prefer the ac interface. */ + +/* Mapping of flag numbers to the according strings as it is expected + for S-expressions. */ +static struct number_string +{ + int number; + const char *string; +} ac_flags[] = + { + { GCRY_AC_FLAG_NO_BLINDING, "no-blinding" }, + }; + +/* The positions in this list correspond to the values contained in + the gcry_ac_key_type_t enumeration list. */ +static const char *ac_key_identifiers[] = + { + "private-key", + "public-key" + }; + +/* These specifications are needed for key-pair generation; the caller + is allowed to pass additional, algorithm-specific `specs' to + gcry_ac_key_pair_generate. This list is used for decoding the + provided values according to the selected algorithm. */ +struct gcry_ac_key_generate_spec +{ + int algorithm; /* Algorithm for which this flag is + relevant. */ + const char *name; /* Name of this flag. */ + size_t offset; /* Offset in the cipher-specific spec + structure at which the MPI value + associated with this flag is to be + found. */ +} ac_key_generate_specs[] = + { + { GCRY_AC_RSA, "rsa-use-e", offsetof (gcry_ac_key_spec_rsa_t, e) }, + { 0 } + }; + +/* Handle structure. */ +struct gcry_ac_handle +{ + int algorithm; /* Algorithm ID associated with this + handle. */ + const char *algorithm_name; /* Name of the algorithm. */ + unsigned int flags; /* Flags, not used yet. */ + gcry_module_t module; /* Reference to the algorithm + module. */ +}; + +/* A named MPI value. */ +typedef struct gcry_ac_mpi +{ + char *name; /* Self-maintained copy of name. */ + gcry_mpi_t mpi; /* MPI value. */ + unsigned int flags; /* Flags. */ +} gcry_ac_mpi_t; + +/* A data set, that is simply a list of named MPI values. */ +struct gcry_ac_data +{ + gcry_ac_mpi_t *data; /* List of named values. */ + unsigned int data_n; /* Number of values in DATA. */ +}; + +/* A single key. */ +struct gcry_ac_key +{ + gcry_ac_data_t data; /* Data in native ac structure. */ + gcry_ac_key_type_t type; /* Type of the key. */ +}; + +/* A key pair. */ +struct gcry_ac_key_pair +{ + gcry_ac_key_t public; + gcry_ac_key_t secret; +}; + + + +/* + * Functions for working with data sets. + */ + +/* Creates a new, empty data set and store it in DATA. */ +gcry_error_t +_gcry_ac_data_new (gcry_ac_data_t *data) +{ + gcry_ac_data_t data_new; + gcry_error_t err; + + if (fips_mode ()) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + data_new = gcry_malloc (sizeof (*data_new)); + if (! data_new) + { + err = gcry_error_from_errno (errno); + goto out; + } + + data_new->data = NULL; + data_new->data_n = 0; + *data = data_new; + err = 0; + + out: + + return err; +} + +/* Destroys all the entries in DATA, but not DATA itself. */ +static void +ac_data_values_destroy (gcry_ac_data_t data) +{ + unsigned int i; + + for (i = 0; i < data->data_n; i++) + if (data->data[i].flags & GCRY_AC_FLAG_DEALLOC) + { + gcry_mpi_release (data->data[i].mpi); + gcry_free (data->data[i].name); + } +} + +/* Destroys the data set DATA. */ +void +_gcry_ac_data_destroy (gcry_ac_data_t data) +{ + if (data) + { + ac_data_values_destroy (data); + gcry_free (data->data); + gcry_free (data); + } +} + +/* This function creates a copy of the array of named MPIs DATA_MPIS, + which is of length DATA_MPIS_N; the copy is stored in + DATA_MPIS_CP. */ +static gcry_error_t +ac_data_mpi_copy (gcry_ac_mpi_t *data_mpis, unsigned int data_mpis_n, + gcry_ac_mpi_t **data_mpis_cp) +{ + gcry_ac_mpi_t *data_mpis_new; + gcry_error_t err; + unsigned int i; + gcry_mpi_t mpi; + char *label; + + data_mpis_new = gcry_malloc (sizeof (*data_mpis_new) * data_mpis_n); + if (! data_mpis_new) + { + err = gcry_error_from_errno (errno); + goto out; + } + memset (data_mpis_new, 0, sizeof (*data_mpis_new) * data_mpis_n); + + err = 0; + for (i = 0; i < data_mpis_n; i++) + { + /* Copy values. */ + + label = gcry_strdup (data_mpis[i].name); + mpi = gcry_mpi_copy (data_mpis[i].mpi); + if (! (label && mpi)) + { + err = gcry_error_from_errno (errno); + gcry_mpi_release (mpi); + gcry_free (label); + break; + } + + data_mpis_new[i].flags = GCRY_AC_FLAG_DEALLOC; + data_mpis_new[i].name = label; + data_mpis_new[i].mpi = mpi; + } + if (err) + goto out; + + *data_mpis_cp = data_mpis_new; + err = 0; + + out: + + if (err) + if (data_mpis_new) + { + for (i = 0; i < data_mpis_n; i++) + { + gcry_mpi_release (data_mpis_new[i].mpi); + gcry_free (data_mpis_new[i].name); + } + gcry_free (data_mpis_new); + } + + return err; +} + +/* Create a copy of the data set DATA and store it in DATA_CP. */ +gcry_error_t +_gcry_ac_data_copy (gcry_ac_data_t *data_cp, gcry_ac_data_t data) +{ + gcry_ac_mpi_t *data_mpis = NULL; + gcry_ac_data_t data_new; + gcry_error_t err; + + if (fips_mode ()) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + /* Allocate data set. */ + data_new = gcry_malloc (sizeof (*data_new)); + if (! data_new) + { + err = gcry_error_from_errno (errno); + goto out; + } + + err = ac_data_mpi_copy (data->data, data->data_n, &data_mpis); + if (err) + goto out; + + data_new->data_n = data->data_n; + data_new->data = data_mpis; + *data_cp = data_new; + + out: + + if (err) + gcry_free (data_new); + + return err; +} + +/* Returns the number of named MPI values inside of the data set + DATA. */ +unsigned int +_gcry_ac_data_length (gcry_ac_data_t data) +{ + return data->data_n; +} + + +/* Add the value MPI to DATA with the label NAME. If FLAGS contains + GCRY_AC_FLAG_COPY, the data set will contain copies of NAME + and MPI. If FLAGS contains GCRY_AC_FLAG_DEALLOC or + GCRY_AC_FLAG_COPY, the values contained in the data set will + be deallocated when they are to be removed from the data set. */ +gcry_error_t +_gcry_ac_data_set (gcry_ac_data_t data, unsigned int flags, + const char *name, gcry_mpi_t mpi) +{ + gcry_error_t err; + gcry_mpi_t mpi_cp; + char *name_cp; + unsigned int i; + + name_cp = NULL; + mpi_cp = NULL; + + if (fips_mode ()) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + if (flags & ~(GCRY_AC_FLAG_DEALLOC | GCRY_AC_FLAG_COPY)) + { + err = gcry_error (GPG_ERR_INV_ARG); + goto out; + } + + if (flags & GCRY_AC_FLAG_COPY) + { + /* Create copies. */ + + flags |= GCRY_AC_FLAG_DEALLOC; + name_cp = gcry_strdup (name); + mpi_cp = gcry_mpi_copy (mpi); + if (! (name_cp && mpi_cp)) + { + err = gcry_error_from_errno (errno); + goto out; + } + } + + /* Search for existing entry. */ + for (i = 0; i < data->data_n; i++) + if (! strcmp (name, data->data[i].name)) + break; + if (i < data->data_n) + { + /* An entry for NAME does already exist. */ + if (data->data[i].flags & GCRY_AC_FLAG_DEALLOC) + { + gcry_mpi_release (data->data[i].mpi); + gcry_free (data->data[i].name); + } + } + else + { + /* Create a new entry. */ + + gcry_ac_mpi_t *ac_mpis; + + ac_mpis = gcry_realloc (data->data, + sizeof (*data->data) * (data->data_n + 1)); + if (! ac_mpis) + { + err = gcry_error_from_errno (errno); + goto out; + } + + if (data->data != ac_mpis) + data->data = ac_mpis; + data->data_n++; + } + + data->data[i].name = name_cp ? name_cp : ((char *) name); + data->data[i].mpi = mpi_cp ? mpi_cp : mpi; + data->data[i].flags = flags; + err = 0; + + out: + + if (err) + { + gcry_mpi_release (mpi_cp); + gcry_free (name_cp); + } + + return err; +} + +/* Stores the value labelled with NAME found in the data set DATA in + MPI. The returned MPI value will be released in case + gcry_ac_data_set is used to associate the label NAME with a + different MPI value. */ +gcry_error_t +_gcry_ac_data_get_name (gcry_ac_data_t data, unsigned int flags, + const char *name, gcry_mpi_t *mpi) +{ + gcry_mpi_t mpi_return; + gcry_error_t err; + unsigned int i; + + if (fips_mode ()) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + if (flags & ~(GCRY_AC_FLAG_COPY)) + { + err = gcry_error (GPG_ERR_INV_ARG); + goto out; + } + + for (i = 0; i < data->data_n; i++) + if (! strcmp (name, data->data[i].name)) + break; + if (i == data->data_n) + { + err = gcry_error (GPG_ERR_NOT_FOUND); + goto out; + } + + if (flags & GCRY_AC_FLAG_COPY) + { + mpi_return = gcry_mpi_copy (data->data[i].mpi); + if (! mpi_return) + { + err = gcry_error_from_errno (errno); /* FIXME? */ + goto out; + } + } + else + mpi_return = data->data[i].mpi; + + *mpi = mpi_return; + err = 0; + + out: + + return err; +} + +/* Stores in NAME and MPI the named MPI value contained in the data + set DATA with the index IDX. NAME or MPI may be NULL. The + returned MPI value will be released in case gcry_ac_data_set is + used to associate the label NAME with a different MPI value. */ +gcry_error_t +_gcry_ac_data_get_index (gcry_ac_data_t data, unsigned int flags, + unsigned int idx, + const char **name, gcry_mpi_t *mpi) +{ + gcry_error_t err; + gcry_mpi_t mpi_cp; + char *name_cp; + + name_cp = NULL; + mpi_cp = NULL; + + if (fips_mode ()) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + if (flags & ~(GCRY_AC_FLAG_COPY)) + { + err = gcry_error (GPG_ERR_INV_ARG); + goto out; + } + + if (idx >= data->data_n) + { + err = gcry_error (GPG_ERR_INV_ARG); + goto out; + } + + if (flags & GCRY_AC_FLAG_COPY) + { + /* Return copies to the user. */ + if (name) + { + name_cp = gcry_strdup (data->data[idx].name); + if (! name_cp) + { + err = gcry_error_from_errno (errno); + goto out; + } + } + if (mpi) + { + mpi_cp = gcry_mpi_copy (data->data[idx].mpi); + if (! mpi_cp) + { + err = gcry_error_from_errno (errno); + goto out; + } + } + } + + if (name) + *name = name_cp ? name_cp : data->data[idx].name; + if (mpi) + *mpi = mpi_cp ? mpi_cp : data->data[idx].mpi; + err = 0; + + out: + + if (err) + { + gcry_mpi_release (mpi_cp); + gcry_free (name_cp); + } + + return err; +} + +/* Convert the data set DATA into a new S-Expression, which is to be + stored in SEXP, according to the identifiers contained in + IDENTIFIERS. */ +gcry_error_t +_gcry_ac_data_to_sexp (gcry_ac_data_t data, gcry_sexp_t *sexp, + const char **identifiers) +{ + gcry_sexp_t sexp_new; + gcry_error_t err; + char *sexp_buffer; + size_t sexp_buffer_n; + size_t identifiers_n; + const char *label; + gcry_mpi_t mpi; + void **arg_list; + size_t data_n; + unsigned int i; + + sexp_buffer_n = 1; + sexp_buffer = NULL; + arg_list = NULL; + err = 0; + + if (fips_mode ()) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + /* Calculate size of S-expression representation. */ + + i = 0; + if (identifiers) + while (identifiers[i]) + { + /* For each identifier, we add "()". */ + sexp_buffer_n += 1 + strlen (identifiers[i]) + 1; + i++; + } + identifiers_n = i; + + if (! identifiers_n) + /* If there are NO identifiers, we still add surrounding braces so + that we have a list of named MPI value lists. Otherwise it + wouldn't be too much fun to process these lists. */ + sexp_buffer_n += 2; + + data_n = _gcry_ac_data_length (data); + for (i = 0; i < data_n; i++) + { + err = gcry_ac_data_get_index (data, 0, i, &label, NULL); + if (err) + break; + /* For each MPI we add "(


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 literal 0 HcmV?d00001 diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 000000000..938489bfd --- /dev/null +++ b/po/ca.po @@ -0,0 +1,7236 @@ +# Catalan translation for grub. +# Copyright (C) 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Robert Millan , 2009. +# Àngel Mompó , 2010, 2011, 2012, 2014, 2017 +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-04 15:26+0100\n" +"Last-Translator: Angel Mompo \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Poedit 1.8.4\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "no és compatible amb la velocitat del port sèrie" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "no és compatible amb la paritat del port sèrie" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "no és compatible amb el nombre de bits d'aturada" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "no és compatible amb la longitud de paraula del port sèrie" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"No carreguis les taules d'amfitrions especificades en llistes separades per " +"comes." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Carrega només les taules especificades en llistes separades per comes." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Exporta les taules de la versió 1 al SO." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Exporta les taules de la versió 2 i de la versió 3 al SO." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Aplica l'OEMID de l'RSDP, XSDT i l'RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Aplica l'identificador de l'OEMTABLE de l'RSDP, XSDT i l'RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Aplica la revisió de l'OEMTABLE de l'RSDP, XSDT i l'RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Aplica el camp creador de l'RSDP, XSDT i l'RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Aplica la revisió del creador de l'RSDP, XSDT i l'RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"No actualitzis l'EBDA. Pot corregir defectes o penjades a algunes BIOS, però " +"el fa ineficaç amb SO que no rebin el RSDP del GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "final del fitxer %s prematur" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TAULA1,TAULA2|--load-only=TAULA1,TAULA2] FITXER1 " +"[FITXER2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Carrega les taules d'amfitrions ACPI i les taules especificades per " +"arguments." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "error: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "s'ha acabat la memòria" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "no es pot llegir «%s» : %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Ha fallat l'ordre d'apagar per l'ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Llista els dispositius." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "s'esperava un nom de fitxer" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FITXER" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Mostra una llista de blocs." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "primer heu de carregar el nucli" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Arrenca un sistema operatiu." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "No hi ha disponible cap estadística del temps d'arrancada\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Mostra l'estadística del temps d'arrancada." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Estadístiques de la memòria cau del disc: encerts = %lu (%lu.%02lu%%), " +"errors = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "No hi ha disponible cap estadística de la memòria cau del disc\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Recupera la informació de la memòria cau del disc." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Accepta finals de línia CR/NL d'estil DOS." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Mostra el contingut d'un fitxer." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "s'esperaven dos arguments" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Compara el fitxer «%s» amb el «%s»:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Els fitxers tenen mides diferents: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Els fitxers són diferents a l'òfset %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Els fitxers són idèntics.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FITXER1 FITXER2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Compara dos fitxers." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Carrega un altre fitxer de configuració." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Carrega un altre fitxer de configuració sense canviar el context." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Carrega un altre fitxer de configuració agafant només les entrades del menú " +"però sense canviar el context." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "" +"Carrega un altre fitxer de configuració però agafa només les entrades del " +"menú." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[any-]mes-dia] [hora:minut[:segon]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Mostra/modifica el dia i l'hora actuals." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "No mostris els salts de línia." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Habilita la interpretació dels caràcters amb contrabarra." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] CADENA" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Mostra una línia de text." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Torna a engegar i ves al menú de configuració del microprogramari." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Corregeix un problema de vídeo." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Hi ha una imatge ROM." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "No es pot habilitar l'àrea ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Crea estructures semblants a una BIOS per mantenir la compatibilitat amb els " +"SO existents." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Carrega l'abocament de memòria de la BIOS." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "CADENA ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Analitza els arguments com a comandes del GRUB." + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Comprova si el FITXER pot engegar-se com un nucli i386 client sense " +"privilegis PAE del Xen" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Comprova si el FITXER pot engegar-se com un nucli X86_64 client sense " +"privilegis del Xen" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Comprova si el FITXER es pot fer servir com un nucli x86 amb privilegis del " +"Xen" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" +"Comprova si el FITXER es pot fer servir com un nucli x86 multiarrencada." + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" +"Comprova si el FITXER es pot fer servir com un nucli x86 multiarrencada 2." + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Comprova si el FITXER és un Linux ARM" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Comprova si el FITXER és un Linux ARM64" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Comprova si el FITXER és un Linux IA64" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Comprova si el FITXER és un Linux MIPS" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Comprova si el FITXER és un Linux MIPSEL" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Comprova si el FITXER és un Linux SPARC64" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Comprova si el FITXER és un Linux POWERPC" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Comprova si el FITXER és un Linux x86" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" +"Comprova si el FITXER és un Linux x86 amb suport per protocol de 32 bits" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Comprova si el FITXER és un kFreeBSD x86" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Comprova si el FITXER és un kFreeBSD i386" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Comprova si el FITXER és un kFreeBSD x86_64" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Comprova si el FITXER és un kNetBSD x86" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Comprova si el FITXER és un kNetBSD i386" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Comprova si el FITXER és un kNetBSD x86_64" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Comprova si el FITXER és un EFI i386" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Comprova si el FITXER és un EFI x86_64" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Comprova si el FITXER és un EFI iA64" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Comprova si el FITXER és un EFI ARM64" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Comprova si el FITXER és un EFI ARM" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Comprova si el FITXER és un hiberfil.sys en hibernació" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Comprova si el FITXER és un XNU x86_64 (nucli de Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Comprova si el FITXER és un XNU i386 (nucli de Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Comprova si el FITXER és una imatge hibernada de XNU (nucli de Mac OS X)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Comprova si el FITXER és un sector d'arrencada de BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "fals" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPCIONS FITXER" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Comprova si el FITXER és del tipus especificat." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "no s'ha trobat la partició" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "El nou MBR està escrit a «%s»\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DISPOSITIU [PARTICIÓ[+/-[TIPUS]]]" + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Omple l'MBR híbrid del DISPOSITIU unitat GPT. Les particions especificades " +"seran una part de l'MBR híbrid. Es permeten fins a 3 particions. TIPUS és un " +"tipus de MBR. + significa que la partició és activa. Només es pot activar " +"una partició." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Atura l'ordinador. Aquesta ordre no funciona en totes les implementacions de " +"microprogramari." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Especifica el hash que cal utilitzar." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Comprova el hash dels fitxers amb el FITXER de llista de hash." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Directori base per la llista de hash." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIR" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "No s'atura després del primer error." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Descomprimeix el fitxer abans de fer la suma de verificació" + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ERROR DE LECTURA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: EL HASH NO CONCORDA\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: CORRECTE\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FITXER [-p PREFIX]] [FITXER1 [FITXER2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Calcula o comprova la suma de comprovació del hash" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FITXER [-p PREFIX]] [FITXER1 [FITXER2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Configura el gestor avançat de consum\n" +"(1=baix, ..., 254=alt, 255=apagat)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Mostra el mode d'alimentació." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Congela la configuració de seguretat ATA fins que es reiniciï." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Mostra l'estat de salut SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Configura el gestor acústic automàtic\n" +"(0=apagat, 128=silenciós, ..., 254 ràpid)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Configura el temps màxim d'espera\n" +"(0=apagat, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Posa la unitat en mode d'espera." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Posa la unitat en mode descans." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Mostra la identificació i la configuració de la unitat." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Mostra el contingut cru del sector IDENTIFY ATA." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Habilita/deshabilita l'SMART (1/0)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "No mostris missatges." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "s'esperava un argument" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPCIONS] DISC" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Llegeix/escriu els paràmetres del disc ATA." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Forma d'ús:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[PATRÓ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Mostra un missatge de text." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Salta els bytes d'òfset des del principi del fitxer." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Llegeix només LONGITUD bytes." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPCIONS] FITXER_O_DISPOSITIU" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Mostra el contingut cru d'un fitxer o de la memòria." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Mostra el bolcat cru dels continguts del CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Comprova el bit a BYTE:BIT a CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Posa a 0 el bit BYTE:BIT del CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Posa a 1 el bit BYTE:BIT del CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Obté l'estadística del temps d'arrancada del coreboot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Llista les taules del coreboot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Comprova si la CPU és compatible amb el mode de 64 bits (llarg) (per " +"defecte)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Comprova si la CPU és compatible amb l'Extensió d'Adreça Física(PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Es comprova les característiques de la CPU." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Mostra els mapatges actuals." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Es reinicien tots els mapatges als valors per defecte." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Realitza ambdós mapatges, el directe i l'invers." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "No s'ha canviat el mapa de cap unitat" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "Disk d'SO #num ------> dispositiu de GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Gestiona els mapatges d'unitats de la BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "No utilitzis l'APM per aturar l'ordinador." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Atura el sistema, si pots, fent servir l'APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "no s'ha trobat l'APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"versió %u.%u\n" +"CS de 32 bits = 0x%x, long = 0x%x, òfset = 0x%x\n" +"CS de 16 bits = 0x%x, long = 0x%x\n" +"DS = 0x%x, long = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "és compatible amb la interfície protegida de 16 bits\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "no és compatible amb la interfície protegida de 16 bits\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "és compatible amb la interfície protegida de 32 bits\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "no és compatible amb la interfície protegida de 32 bits\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "La inactivitat de la CPU fa disminuir la velocitat del processador\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "" +"La inactivitat de la CPU no fa disminuir la velocitat del processador\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "L'APM està deshabilitat\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "L'APM està habilitat\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "L'APM està desocupat\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "L'APM està ocupat\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Mostra la informació de l'APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "s'esperava un nom de fitxer o un tempo i notes" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "El tempo no és vàlid a %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "el fitxer «%s» no s'ha trobat" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "número no reconegut" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FITXER | INTERVAL [TO1 DURADA1] [TO2 DURADA2] ..." + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Reprodueix una melodia." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "estableix el mode de la tecla de bloqueig del bloc numèric" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "estableix el mode de la tecla de fixació de majúscules." + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "estableix el mode de la tecla de fixació de desplaçament" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "estableix el mode de la tecla d'inserció." + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "estableix el mode de la tecla de pausa." + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "premeu la tecla de majúscules esquerra" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "premeu la tecla de majúscules de la dreta" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "premeu la tecla de petició de sistema (Pet Sis)" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "premeu la tecla de bloqueig del bloc numèric" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "premeu la tecla de bloqueig de majúscules" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "premeu la tecla de bloqueig de desplaçament" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "premeu la tecla d'inserció" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "premeu la tecla d'alternativa de l'esquerra" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "premeu la tecla d'alternativa de la dreta" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "premeu la tecla de control de l'esquerra" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "premeu la tecla de control de la dreta" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "no actualitza l'estat dels LEDs" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[PULSACIÓ1] [PULSACIÓ2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emula una seqüència de pulsació de tecles" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Executeu «go» per tornar al GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Torna a l'indicador IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Desa el valor llegit a la variable NOMVARIABLE." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "NOMVARIABLE" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Llegeix un valor de 8 bits del PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Llegeix un valor de 16 bits del PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Llegeix un valor de 32 bits del PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VALOR [MÀSCARA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Escriu un VALOR de 8 bits al PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Escriu un VALOR de 16 bits al PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VALOR [MÀSCARA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Escriu un VALOR de 32 bits al PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "la variable «%s» no està establerta" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Carrega una disposició de teclat." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Comprova la tecla de majúscules." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Comprova la tecla de control." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Comprova la tecla d'alternativa." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Comprova l'estat de la tecla modificadora." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "no s'ha pogut trobar l'ordre %s" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Introdueix la contrasenya: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Analitza la configuració anterior en l'antic context" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Analitza la configuració anterior en el nou context" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Analitza la configuració antiga en el mateix context agafant només les " +"entrades del menú" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Analitza la configuració antiga en el nou context agafant només les entrades " +"del menú" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TIPUS] FITXER [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simula una ordre «kernel» de la versió antiga del grub" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FITXER [ARG...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simula una ordre «initrd» de la versió antiga del grub" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simula una ordre «modulenounzip» de la versió antiga del grub" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] CONTRASENYA [FITXER]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simula una ordre «password» de la versió antiga del grub" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" +"Simula una ordre «password» de la versió antiga del grub al mode menú " +"d'entrada" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Especifica el nom del fitxer." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "No comprova la signatura del fitxer d'entorn." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FITXER] [-s|--skip-sig] [nom_de_variable_a_llista_blanca] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Carrega les variables del bloc del fitxer d'entorn." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FITXER]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Llista les variables del bloc del fitxer d'entorn." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FITXER] nom_de_variable [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Desa les variables al bloc del fitxer d'entorn." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Mostra una llista llarga amb informació més detallada." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Mostra les mides en un format llegible pels humans." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Llista tots els fitxers." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Protocols de xarxa:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FITXER...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Llista dispositius i fitxers." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Mostra només les taules de la versió 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Mostra només les taules de les versions 2 i 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Mostra la informació del ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM disponible" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM reservada" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM que pot reclamar l'ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "RAM d'emmagatzemament no volàtil de l'ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM defectuosa (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "RAM persistent" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "RAM persistent (antic)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "Taules del coreboot que suporten la RAM" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "codi del microprogramari que suporta la RAM" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, long = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, long = 0x%llx, tipus = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Llista el mapa de memòria proveït pel microprogramari." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Llista els dispositius PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" +"Fes arrencable (BLESS) el FITXER de HFS o la partició HFS+ per macs intel." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" +"Fes arrencable (Bless) el FITXER de HFS o la partició HFS+ per macs intel." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Llegeix un valor de 8 bits de ADDR." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Llegeix un valor de 16 bits de ADDR." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Llegeix un valor de 32 bits de ADDR." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Escriu un VALOR de 8 bits a ADDR." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Escriu un VALOR de 16 bits a ADDR." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Escriu un VALOR de 32 bits a ADDR." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Tipus de menú d'entrada." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "CADENA" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Llista d'usuaris que poden engegar aquesta entrada." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "NOMUSUARI[,NOMUSUARI]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tecla per arrencar ràpid aquesta entrada." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TECLAT_TECLA" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "utilitza STRING com a cos del menú d'entrada." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identificador del menú d'entrada." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Qualsevol usuari pot arrencar aquesta entrada." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOC" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Defineix una entrada del menú." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Defineix un submenú." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nom\tCont ref\tDependències\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Mostra aquest missatge." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADR [MIDA]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Mostra el contingut de la memòria." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MÒDUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Treu un mòdul." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Mostra els mòduls carregats." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Surt del GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "No s'ha trobat cap CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 a %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "L'espai I/O del controlador de bus de gestió del sistema és a 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "ranura de RAM número %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Bytes SPD escrits: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Mida total de la flash: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Tipus de memòria: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Nº de part: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Tipus de memòria: desconeguda" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Mostra la informació de la memòria." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s és compatible amb els UUIDs" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MÒDUL1 MÒDUL2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Canvia al controlador de discs nadiu. Si no s'especifica cap mòdul es fa " +"servir el conjunt per defecte (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Executa ORDRES a la partició.\n" +"Utilitzeu «parttool PARTICIÓ help» per obtenir la llista d'ordres " +"disponibles." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "No hi ha cap parttool disponible per %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "argument «%s» desconegut." + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "ORDRES DE PARTICIONAT" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "CONTRASENYA D'USUARI" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Estableix una contrasenya d'usuari (text pla). No recomanat i insegur." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "la contrasenya PBKDF2 no és vàlida" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "CONTRASENYA_PBKDF2 D'USUARI" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Estableix una contrasenya d'usuari (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Selecciona el dispositiu per proveïdor i IDs dels dispositius." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[proveïdor]:[dispositiu]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Selecciona el dispositiu per la seva posició al bus." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[ranura]:[.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "falta el símbol «%c»" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSICIÓ]... [-d DISPOSITIU]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Mostra el bolcat cru de l'espai de configuració del PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Estableix una variable per retornar un valor." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Determina el controlador." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Determina el tipus de mapa de particions." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Determina el tipus de sistema de fitxers." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Determina l'UUID del sistema de fitxers." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Determina l'etiqueta del sistema de fitxers." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "el sistema de fitxers «%s» no permet l'ús d'etiquetes" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DISPOSITIU" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Recupera la informació del dispositiu." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[VARENTORN]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Estableix la variable amb una entrada d'usuari." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Reinicia l'ordinador." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Desa el component coincident NÚMERO a NOMVARIABLE." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NÚMERO:]NOMDEVARIABLE" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "EXPREG CADENA" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Comprova si l'EXPREG coincideix amb la CADENA." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NOM [VARIABLE] [PISTES]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cerca dispositius pel fitxer. Si s'especifica VARIABLE, el nom del primer " +"dispositiu trobat s'escriu a la variable." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cerca dispositius per l'etiqueta. Si s'especifica VARIABLE, el nom del " +"primer dispositiu trobat s'escriu a la variable." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cerca dispositius per l'UUID. Si s'especifica VARIABLE, el nom del primer " +"dispositiu trobat s'escriu a la variable." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Cerca dispositius per un fitxer." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Cerca dispositius per una etiqueta del sistema de fitxers." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Cerca dispositius per un UUID del sistema de fitxers" + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Estableix una variable pel primer dispositiu trobat." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "No provis cap disquetera." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Primer prova el dispositiu PISTA. Si PISTA acaba en coma, també prova les " +"particions inferiors" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "PISTA" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Primer prova el dispositiu PISTA si s'executa sobre un IEEE1275. Si PISTA " +"acaba en coma, prova també les particions inferiors" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Primer prova el dispositiu PISTA si s'executa sobre una BIOS. Si PISTA acaba " +"en coma, també prova les particions inferiors" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Primer prova el dispositiu PISTA si és compatible amb l'accés directe al " +"maquinari. Si PISTA acaba en coma, també prova les particions inferiors" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Primer prova el dispositiu PISTA si s'executa sobre un EFI. Si PISTA acaba " +"en coma, també prova les particions inferiors" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Primer prova el dispositiu PISTA si s'executa sobre l'ARC. Si PISTA acaba en " +"coma, també prova les particions inferiors" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint PISTA [--hint PISTA] ...] NOM" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Cerca dispositius per fitxer o per etiqueta o UUID de sistema de fitxers. Si " +"s'especifica --set, el primer dispositiu trobat s'escriu a una variable. Si " +"no s'especifica cap nom de variable s'utilitza «root»." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "El registre %x de %x:%02x.%x és %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSICIÓ] [-d DISPOSITIU] [-v VAR] REGISTRE[=VALOR[:MÀSCARA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipula els dispositius PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Compte enrere detallat." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Permet interrompre amb ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NOMBRE_DE_SEGONS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Espera un nombre especificat de segons." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "directori arrel del disc syslinux [per defecte=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"el directori actual de syslinux [per defecte és el directori superior del " +"fitxer d'entrada]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "suposa que l'entrada és un fitxer de configuració isolinux." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "suposa que l'entrada és un fitxer de configuració pxelinux." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "S'assumeix que l'entrada és un fitxer de configuració de syslinux." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Executa la configuració de syslinux en el mateix context" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Executa la configuració de syslinux en el nou context" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Executa la configuració de syslinux en el mateix context agafant només les " +"entrades del menú" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Executa la configuració de syslinux en el nou context agafant només les " +"entrades del menú" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "no s'ha especificat cap terminal" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "no s'ha trobat el terminal «%s»" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Terminals d'entrada actius:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Terminals d'entrada disponibles:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Terminals de sortida actius:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Terminals de sortida disponibles:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Llista o selecciona un terminal d'entrada" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Llista o selecciona un terminal de sortida." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESSIÓ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Avalua una expressió." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESSIÓ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Carrega el mateix fitxer de diferents maneres." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Especifica la mida per cada operació de lectura" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "la mida del bloc no és vàlida" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Mida del fitxer: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Temps transcorregut: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Velocitat: %s\n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s MIDA] NOMFITXER" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Prova la velocitat de lectura del fitxer." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "No heu especificat cap ordre" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Temps transcorregut: %d.%03d segons \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "ORDRE [ARGS]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Mesura el temps que ha utilitzat l'ORDRE" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Tradueix a majúscules." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Tradueix a minúscules." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPCIONS] [GRUP1] [GRUP2] [CADENA]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Tradueix els caràcters del GRUP1 en els del GRUP2 a la CADENA." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "No facis res, amb èxit." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "No facis res, sense èxit." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Prova la compatibilitat amb USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "No comprovis la signatura del fitxer de clau publica." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "signatura errònia" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "no s'ha trobat la clau pública %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "el mòdul «%s» no està carregat" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FITXER FITXER_SIGNATURA [FITXER_CLAUPUB]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Comprova la signatura separada." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] FITXER_CLAUPUB" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Afegeix FITXER_CLAUPUB a les claus de confiança." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Mostra la llista de les claus de confiança." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_CLAUPUB" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Elimina ID_CLAUPUB de les claus de confiança." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Només text " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Color directe, màscara: %d/%d/%d/%d posició: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Amb paleta" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monocrom" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Mode de vídeo desconegut " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " La suma de verificació de l'EDID no és vàlida" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " Versió de l'EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Mode preferit: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " No hi ha cap mode preferit disponible\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "l'especificació «%s» del mode de vídeo no és vàlida" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Llista dels modes de vídeo compatibles:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Llegenda: màscara/posició=roig/verd/blau/reservat" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adaptador «%s»:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " No hi ha cap info disponible" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " No s'ha pogut inicialitzar l'adaptador" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[AmpladaxAlçada[xProfunditat]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Llista els modes de vídeo disponibles. Si es dona una resolució, mostra " +"només les modes que hi coincideixin." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[AmpladaxAlçada]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Prova els subsistema de vídeo en mode Ample x Alt." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Prova el subsistema de vídeo." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[DIR]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Llista la capacitat d'emmagatzematge de Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [NOMVARIABLE]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transforma un UUID de 64 bits a un format adient per XNU. Amb l'opció -l el " +"manté en minúscules tal i com fa blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "no s'ha pogut llegir el sector 0x%llx de «%s»" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "no s'ha pogut escriure el sector 0x%llx a «%s»" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Munta per UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Munta-ho tot." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Munta tots els volums amb el senyal «boot» activat." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "no es pot obrir «%s»: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "no es pot executar «seek» sobre «%s»: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "FONT|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Munta un dispositiu xifrat." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"No s'ha pogut trobar el volum físic «%s». Deuen faltar alguns mòduls a la " +"imatge del nucli." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "no s'ha trobat el volum físic %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "no hi ha cap mitjà a «%s»" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "No s'ha pogut carregar el sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "No s'ha pogut carregar el sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "no s'han pogut llegir les metadades ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "la versió o el màgic de les ELI són incorrectes" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "S'està intentant desxifrar la clau mestra..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Introduïu la contrasenya de %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "La ranura %d està oberta\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "s'ha intentat llegir o escriure fora del disc «%s»" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "no es pot escriure al CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Els controladors de disc nadius s'estan utilitzant. Es rebutja la " +"utilització del microprogramari de la interfície." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"la vostra partició LDM per incrustar és massa petita; no es podrà incrustar" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "Aquest LDM no té cap partició per incrustar; no es podrà incrustar" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Esborra el dispositiu de retrobucle especificat." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] NOMDISPOSITIU FITXER." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Fes una unitat virtual des d'un fitxer." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "la recolocació 0x%x encara no està implementada" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "no hi ha cap taula de símbols" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "aquest tipus de fitxer ELF no és correcte" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Carrega i inicia l'emulador EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "S'ha carregat l'emulador EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Descarrega l'emulador EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "no s'ha trobat el símbol «%s»" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Fonts carregades:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FITXER..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Especifiqueu un o més fitxers de fonts que vulgueu carregar." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Llista les fonts carregades." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "la profunditat dels enllaços simbòlics és excessiva" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "s'ha intentat llegir més enllà del final del fitxer" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"no s'ha pogut trobar el membre de dispositius necessari del sistema de " +"fitxers de dispositius múltiples" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "no és un directori" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "no és un fitxer regular" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "el vostre core.img és massa gran. No cabrà a l'àrea d'incrustació." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "el nom del fitxer «%s» no és vàlid" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "ha fallat la comprovació del valor de la suma de verificació" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "no hi ha disponible cap clau de xifrat" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "ha fallat la verificació de la MAC" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "S'assumeix que l'entrada és crua." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "S'assumeix que l'entrada és hexadecimal." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "S'assumeix que l'entrada és una contrasenya." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Introduïu la contrasenya ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FITXER]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importa la clau d'encapsulat ZFS desada al FITXER." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "S'ha tret el dispositiu virtual" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Ha fallat el dispositiu virtual" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "El dispositiu virtual està desconnectat" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "El dispositiu virtual està degradat" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "El dispositiu virtual està connectat" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Dispositiu virtual incorrecte: no hi ha cap tipus disponible" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Dispositiu leaf virtual (fitxer o disc)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Camí del directori d'arrencada: no disponible\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Camí del directori d'arrencada: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Camí: no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Camí: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Devid: no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Devid: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Aquest VDEV és un mirall" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Aquest VDEV és un RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "L'VEDV no és correcte" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV amb %d fills\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "El nombre d'elements %d de l'VDEV no és correcte\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Nombre d'element %d de l'VDEV:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "El tipus de dispositiu virtual és desconegut: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Estat del conjunt: actiu" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Estat del conjunt: exportat" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Estat del conjunt: destruït" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Estat del conjunt: reservat com a disc de recanvi" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Estat del conjunt: dispositiu de nivell 2 d'ARC" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Estat del conjunt: sense inicialitzar" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Estat del conjunt: no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Estat del conjunt: potencialment actiu" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Nom del conjunt: no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Nom del conjunt: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID del conjunt: no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID del conjunt: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "No es pot obtenir l'estat del conjunt" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "L'estat del conjunt no es reconeix" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "No hi ha cap arbre de dispositius virtuals disponible" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Mostra la informació ZFS sobre el DISPOSITIUS" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "SISTEMAFITXERS [VARIABLE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Mostra el ZFS-BOOTFSOBJ o l'emmagatzema a la VARIABLE" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Ara connecteu el depurador remot." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Inicia l'estub del GDB al port indicat" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Entra al GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Atura l'estub del GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "Final del fitxer prematur" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Tradueix la cadena amb la configuració actual." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Premeu enter per arrencar el SO seleccionat, «e» per editar les ordres abans " +"d'arrencar o «c» per una línia d'ordres. Premeu ESC per tornar al menú " +"anterior." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Premeu enter per arrencar el SO seleccionat, «e» per editar les ordres abans " +"d'arrencar o «c» per una línia d'ordres." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "introduïu: boot, «e»: opcions, «c»: línia de comandes" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "L'entrada realçada s'executarà automàticament d'aquí %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "Falten %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d s" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Menú d'arrencada del GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: el valor de %s és menor o igual que %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: el paràmetre ARGP_HELP_FMT necessita un valor" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: el paràmetre ARGP_HELP_FMT ha de ser positiu" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: el paràmetre ARGP_HELP_FMT és desconegut" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Hi ha brossa a ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Els arguments opcionals o obligatoris per les opcions llargues també ho són " +"per les opcions curtes corresponents." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " o: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPCIONS...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Proveu «%s --help» o «%s --usage» per a obtenir més informació.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Informeu de les fallades a %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Error de sistema desconegut" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "mostra aquesta llista d'ajuda" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "Mostra un missatge d'ús curt" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NOM" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "Estableix el nom del programa" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEGONS" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "atura durant SEGONS segons (per defecte 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "mostra la versió del programa" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ERROR DEL PROGRAMA) Versió desconeguda!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Massa arguments\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERROR DEL PROGRAMA) S'hauria de reconèixer les opcions!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: l'opció «%s» és ambigua; les possibilitats són:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: l'opció «--%s» no permet un argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: l'opció «%c%s» no permet un argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: l'opció «--%s» necessita un argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: l'opció «--%s» no és coneguda\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: l'opció «%c%s» no és coneguda\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: l'opció -- «%c» no és vàlida\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'opció -- «%c» necessita un argument\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: l'opció «-W %s» és ambigua\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: l'opció «-W %s» no permet un argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: l'opció «-W %s» necessita un argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Èxit" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "No s'ha trobat cap concordança" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "L'expressió regular no és vàlida" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "El caràcter de paginació no és vàlid" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "El nom de tipus de caràcter no és valid" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Contrabarra final" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "La referència anterior no és vàlida" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Falta el tancament d'un [ o d'un [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Falta el tancament d'un ( o d'un \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Falta el tancament d'un \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "El contingut de \\{\\} no és vàlid" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "El rang no és vàlid" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "S'ha esgotat la memòria" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "L'expressió regular precedent no és vàlida" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Final prematur de l'expressió regular" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "L'expressió regular és massa gran" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Falta la obertura d'un ) o d'un \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "error d'expressió regular desconegut" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "No hi cap expressió regular prèvia" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hola món" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Diu «Hola món»." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "s'ha intentat buscar fora del fitxer" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "no és compatible amb aquest format de gzip" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "el fitxer lzop és corrupte" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "el fitxer xz és corrupte o no és compatible amb les opcions del bloc" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "el màgic de l'ELF no és vàlid segons quina sigui l'arquitectura" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[VARENTORN=VALOR]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Assigna una variable d'entorn." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "VARENTORN" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Esborra una variable d'entorn." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Llista dispositius o fitxers." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Insereix un mòdul." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "no s'ha trobat el disc «%s»" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "s'ha intentat llegir o escriure fora de la partició" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "el màgic de l'ELF no és vàlid sigui quina sigui l'arquitectura" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "el recompte de dispositius ha excedit el límit" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "no es pot escriure a «%s»: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"L'entrada «%s» de device.map no és vàlida. S'ignora. Corregiu o esborreu el " +"device.map." + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"El nom de la unitat «%s» dins device.map no és correcte. Se substitueix per " +"%s. Utilitzeu la forma [hfc]d[0-9]* (ex. «hd0» o «cd»)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "no es pot obrir «%s»: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NOM_DISPOSITIU" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Indica el dispositiu arrel." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "utilitza el FITXER com un mapa de dispositius [per defecte=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "fes servir el FITXER com a memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "utilitza els fitxers de GRUB del directori DIR [per defecte=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "mostra els missatges detallats." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "espera fins que es connecti un depurador" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Argument extra «%s» desconegut." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Emulador del GRUB." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "" +"S'ha produït un error quan s'analitzava els arguments de la línia de " +"comandes\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Executa «gdb %s %d», i posa ARGS.HOLD a zero.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: avís:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: error:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "el fitxer «%s» és massa gran" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "sistema de fitxers desconegut" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "No s'ha pogut apagar" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "No s'ha pogut sortir" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "s'ha detectat un desbordament" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Es descarten les particions mal imbricades (%s, %s %s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "L'ordre «%s» és desconeguda.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Mostra aquesta ajuda i surt." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Mostra l'ús d'aquesta ordre i surt." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "falta una opció obligatòria per «%s»" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "l'argument «%s» necessita un enter" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "s'ha assignat un valor a l'argument «%s» que no en necessita cap" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Mostra la traça de la pila." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "El GRUB encara no sap com parar aquesta màquina!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "El servidor per defecte és ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "l'especificació «%s» del color no és vàlida" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "No s'ha pogut arrencar de nou" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LONGITUD]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Bolcat hexadecimal de dades aleatòries." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" +"Cal proporcionar un arbre de dispositius (vegeu la comanda «devicetree»)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "la zImage no és vàlid" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "l'arbre de dispositius no és vàlid" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Carrega el Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Carrega l'initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Carrega el fitxer DTB." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"No es permeten els nuclis l'ús de les imatges simples del nucli. Torneu-la " +"a muntar (build) amb CONFIG_(U)EFI_STUB habilitat" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "No s'ha pogut obtenir l'FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "primer heu de carregar l'hipervisor de XEN" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Carrega un hipervisor de xen." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Carrega un mòdul de xen." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPCIONS]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Arrenca el sistema basat en BIOS." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Carrega un altre gestor d'arrencada." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Mostra la sortida a totes les consoles." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Utilitza una consola sèrie." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Demana el nom del fitxer des d'on arrencar de nou." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Utilitza el CDROM com arrel." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Invoca el camí de la configuració d'usuari." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Entra en KDB a l'arrencar." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Utilitza el depurador remot GDB en comptes del DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Deshabilita totes les sortides d'arrencada." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Espera que es premi una tecla després de cada línia de sortida." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Utilitza el dispositiu root compilat internament." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Arrenca en mode simple." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Arrenca amb missatges detallats." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "No reiniciïs, només apaga." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Canvia els dispositius configurats." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNITAT[,VELOCITAT]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Deshabilita el SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Deshabilita l'ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "No mostris els missatges de diagnòstics de l'arrencada." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Arrenca amb missatges de depuració." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Suprimeix la sortida normal (conserva els avisos)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADREÇA|comUNITAT][,VELOCITAT]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nom" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tipus" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adreça" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "mida" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "S'arrenca en mode cec." + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Carrega el nucli del FreeBSD" + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Carrega el nucli del OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Carrega el nucli del NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Carrega l'entorn del FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Carrega el mòdul del nucli del FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Càrrega un mòdul del nucli NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Càrrega un mòdul del nucli NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Carrega el mòdul del nucli del FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Carrega disc de ram kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Carrega unes altres dades fonamentals de «coreboot»." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "no es permet l'ús de l'antic paràmetre «ask»." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"ja no és permet l'ús de %s. En canvi, utilitzeu set gfxpayload=%s abans de " +"l'ordre de linux.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"ja no es permet l'ús de %s. No es reconeix el mode VGA %d. En canvi, " +"utilitzeu set gfxpayload=AMPLADAxALÇADA[xPROFUNDITAT] abans de l'ordre de " +"linux.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FITXER" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "la mida de «%s» és massa gran" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Carrega el kernel.sys de FreeDOS." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Carrega el NTLDR o el BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Sobreescriu el mapa de dispositius Plan9 suposats." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "DISPOSITIUGRUB=DISPOSITIUPLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "ARGUMENTS KERNEL" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Carrega el nucli Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Carrega una imatge PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Carrega l'ISO truecrypt." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "l'initrd ja està carregat" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Carrega un mòdul." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Premeu una tecla per arrencar xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Carrega el bolcat de «device-properties»." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "No es pot trobar el controlador FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "el protocol FPSWA no ha pogut trobar la interfície" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "No s'ha trobat cap FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Revisió del FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FITXER [ARGUMENTS...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Mostra la versió del FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "AVÍS: el SO no tindrà cap consola disponible" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Carrega un nucli multiarrencada 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Carrega un mòdul multiarrencada 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Carrega un nucli multiarrencada." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Carrega un mòdul multiarrencada." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Mode d'imatge de fons." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "ampliat|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Carrega una imatge del XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Carrega una imatge del XNU de 64 bits." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Carrega un paquet d'extensió del XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Carrega una extensió del XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIRECTORI [NecessitaOSBundle]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Carrega el directori de les extensions del XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Carrega un disc ram XNU. Estarà disponible al SO com a md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Carrega una imatge de presentació pel XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Carrega una imatge de XNU hibernada." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADR1, MÀSC1, [,ADR2,MÀSC2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Declara regions de memòria com a memòria defectuosa (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "DES DE[K|M|G] A[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Esborra totes les regions de memòria del rang especificat." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "s'esperaven quatre arguments" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "no es reconeix la interfície de xarxa «%s»" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "no s'ha trobat cap informació DHCP" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "no s'ha trobat cap opció DHCP" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "no s'ha trobat cap opció DHCP %d" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "no es reconeix l'especificació del format de l'opció DHCP «%s»" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "no s'ha trobat cap tarja de xarxa" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "no s'ha pogut configurar automàticament %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[TARGETA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "executa la configuració automàtica de bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR INTERFÍCIE NÚMERO DESCRIPCIÓ" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "recupera l'opció DHCP i desa-la a VAR. Si VAR és - mostra el valor." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "no hi ha cap servidor DNS configurat" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "el component del nom de domini és massa llarg" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "no s'ha trobat cap registre de DNS" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "no s'ha rebut cap resposta de DNS" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "només ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "només ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "preferentment ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "preferentment ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "el paràmetre no és vàlid" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADREÇA SERVIDORDNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "executa una cerca de DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "SERVIDORDNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Afegeix un servidor DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Esborra un servidor DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Llista els servidors de DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "no s'ha pogut enviar un paquet de xarxa" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "l'intèrpret no és compatible" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "ha fallat la ubicació de memòria" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "ha fallat l'alliberament de memòria" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "no és compatible amb la resposta de l'HTTP" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "no és compatible amb l'error %d de l'HTTP :%s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "S'ha excedit el temps quan s'obria «%s»" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "temps excedit: no s'ha pogut resoldre l'adreça de maquinari" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "l'adreça %s no es pot resoldre" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "no es reconeix l'adreça de xarxa «%s»" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "no s'ha pogut accedir al destí" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "s'ha detectat un bucle de ruta" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "no s'ha trobat l'adreça" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "no podeu esborrar aquesta adreça" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "No és compatible amb l'ús del tipus de maquinari %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "No es permet el tipus d'adreça %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "s'esperaven tres arguments" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "no s'ha trobat la targeta" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporal" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "el tipus d'adreça %d és desconegut\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "no s'ha especificat cap servidor" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "s'ha excedit el temps de lectura de «%s»" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "NOMCURT TARGETA ADREÇA [ADREÇAFÍSICA]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Afegeix una adreça de xarxa." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[TARGETA [ADREÇAFÍSICA]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Executa la configuració automàtica de l'IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "NOMCURT" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Esborra una adreça de xarxa." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "NOMCURT XARXA [INTERFÍCIE] gw PASSARELA]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Afegeix una ruta de xarxa." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Esborra una ruta de xarxa." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "llista les rutes de xarxa" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "llista les targetes de xarxa" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "llista les adreces de xarxa" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "s'ha refusat la connexió" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "s'ha esgotat el temps de connexió" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Introdueix el nom d'usuari: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[LLISTAUSUARIS]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Comprova si l'usuari és a LLISTAUSUARIS." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Les ordres possibles són:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Els dispositius possibles són:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Els fitxers possibles són:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Les particions possibles són:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Els arguments possibles són:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Les possibilitats són:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Avís: error de sintaxi (falta una barra) a «%s»\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Avís: color de primer pla no vàlid «%s»\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Avís: color de fons no vàlid «%s»\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "VARENTORN [VARENTORN] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Exporta les variables." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Diumenge" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Dilluns" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Dimarts" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Dimecres" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Dijous" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Divendres" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Dissabte" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "no s'ha carregat el mòdul" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "Versió %s del GNU GRUB" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "En qualsevol moment ESC surt." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Es permet l'ús d'una línia d'edició mínima tipus BASH. Per la primera " +"paraula, TAB mostra les opcions per completar possibles. A qualsevol altre " +"lloc, TAB mostra completats de dispositius o fitxers possibles. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Neteja la pantalla." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Entra al mode normal." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Surt del mode normal." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Premeu una tecla per continuar..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "S'arrenca «%s»" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "S'arrenca alternativament «%s»" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "No ha pogut arrencar ni l'entrada per defecte ni l'alternativa.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "S'està arrencant una llista d'ordres" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Es permet l'ús d'una pantalla d'edició mínima semblant a l'Emacs. TAB llista " +"els completats. Premeu Ctrl+x o F10 per arrencar, Ctrl+c o F2 per una línia " +"d'ordres o ESC per descartar els canvis i tornar al menú del GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "" +"Utilitzeu les tecles %C i %C per seleccionar quina entrada voleu realçar." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partició %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Dispositiu %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "No es pot accedir al sistema de fitxers." + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Tipus de sistema de fitxers %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etiqueta «%s»" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Hora de la darrera modificació %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "No s'ha detectat cap sistema de fitxers conegut" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - La partició comença a %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "- Mida del sector %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Mida total desconeguda" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Mida total %llu%sKiB sectors" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MÉS--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "no es pot obrir el fitxer de configuració «%s»: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "No es pot comprimir en la vostra plataforma" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "la vostra plataforma no disposa de rutines IEEE1275" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "la vostra plataforma no disposa de rutines EFI" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "la vostra plataforma no disposa de rutines SGI" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "el vostre SO no disposa de generador de números aleatoris" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "No s'ha pogut crear l'arbre «device-mapper»" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "no s'ha pogut muntar el volum xifrat «%s»: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "no s'ha pogut obrir geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "no s'ha pogut trobar el consumidor de geli" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "no s'ha pogut obtenir l'UUID del geli" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "no s'ha trobat la classe «part» de geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "la mida del dispositiu no està alineada" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "s'està intentant llegir la imatge del nucli «%s» des del GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "" +"sestà intentant llegir la imatge del nucli «%s» des del GRUB un altre cop" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "no es pot llegir «%s» correctament" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "no s'ha pogut llegir els sectors de la imatge del nucli" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"no es pot obtenir una línia de comandes del traductor amb el camí «%s»: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "la línia de comandes del traductor pel camí «%s» està buida" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"el traductor «%s» pel camí «%s» conté diverses paraules que no són opcions, " +"com a mínim «%s» i «%s»" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"el traductor «%s» pel camí «%s» només te opcions. No es pot trobar la part " +"del dispositiu" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "La informació d'emmagatzemament de «%s» no inclou el tipus" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "«%s» no és un disc local" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"La informació d'emmagatzemament de «%s» no indica ni una partició senzilla " +"ni un disc senzill" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "no es poden recuperar les llistes de blocs: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "la mida del bloc no és divisible per 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "la mida del bloc zero no és vàlida" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "no es poden recuperar les llistes de blocs" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "error del ioctl RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "no és compatible amb la versió del RAID: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "error del ioctl GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "error del ioctl GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "No es pot obrir el flux de dades de %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "el tipus de dispositiu RAID «%s» és desconegut" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"no s'ha trobat «obppath» al directori de nivell superior de «%s», no s'ha " +"trobat un nom IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "no s'ha pogut aconseguir el camí canònic de «%s»" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "el tipus de dispositiu %s és desconegut" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Ús: %s DISPOSITIU\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "No s'ha pogut bifurcar: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "No s'ha pogut crear el conducte: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "no es pot restaurar el directori original" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "no es pot executar «stat» sobre «%s»: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "no es pot crear el fitxer temporal: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "no es pot crear el directori temporal: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"No s'ha pogut trobar el camí de dispositius IEEE1275 de %s.\n" +" Heu d'establir manualment la variable «boot-device»" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: No s'ha trobat" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"«nvsetenv» ha fallat.\n" +"Heu d'establir manualment la variable «boot-device». Al indicador de " +"IEEE1275, escriviu:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" +"Heu d'establir manualment les variables «SystemPartition» i «OSLoader»." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "no hi ha cap «/» al nom de fitxer canònic" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "ha fallat cygwin_conv_path()" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "no s'ha pogut obtenir dades aleatòries" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"No es disposa de prou permisos per accedir al microprogramari, es fa servir " +"la BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "quan es fa servir el mode BIOS no es disposa de rutines EFI" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "final de l'EFI inesperat" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "No s'ha pogut trobar una ranura BootNNNN lliure" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"aquesta etiqueta de partició GPT no té cap partició d'arrencada per a la " +"BIOS; no es podrà incrustar" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"Aquesta etiqueta de partició GPT és massa petita; no es podrà incrustar!" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"El sector %llu ja l'està utilitzant el controlador de raid «%s»; eviteu-lo. " +"Demaneu al fabricant que no desi dades a l'espai del MRB" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"El sector %llu ja l'està utilitzant el programa «%s»; eviteu-lo. Aquest " +"programa pot causar problemes d'arrencada o d'altres en un futur. Demaneu " +"als autors que no desin dades al sector d'arrencada" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"algun altre programa està fent servir l'àrea incrustada, i no hi ha prou " +"espai per al core.img. Aquests programes sovint proven d'emmagatzemar dades " +"de manera que no permeten la detecció. Us recomanem que ho investigueu" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"aquesta etiqueta de partició d'estil msdos no té espai després del MBR; no " +"es podrà incrustar" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"la vostra àrea d'incrustació és petita. El fitxer core.img no hi cabrà." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "activa la partició" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "no és una clau primaria" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "la partició %d està activa. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "S'ha netejat l'indicador d'actiu a %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Canvia el tipus de partició" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Activa l'indicador «oculta» al tipus de partició" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "el tipus de partició 0x%x no és vàlid" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "S'estableix el tipus de partició a 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "no es pot sortir de 0 bucles" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "no és el cos d'una funció" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "el nom de la variable «%s» no és vàlid" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "final del fitxer inesperat" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NÚMERO]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Surt dels bucles" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Continua els bucles" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Desplaça els paràmetres de posició." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALOR]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Estableix els paràmetres de posició." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Torna d'una funció." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (amplia|normal)] FITXER" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Carrega una imatge de fons al terminal actiu." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COLOR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Estableix el color de fons per al terminal actiu" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Mostra el contingut del terminal CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Indica la unitat sèrie." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Indica l'adreça del port sèrie." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Indica la velocitat del port sèrie." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Indica la longitud de paraula del port sèrie." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Indica la paritat del port sèrie." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Indica el nombre de bits d'aturada del port sèrie." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Indica la freqüència base." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Habilita/deshabilita RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "no s'ha trobat el port sèrie «%s»" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "el control de flux del port sèrie no està implementat" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPCIONS]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Configura el port sèrie." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "el tipus de terminfo «%s» és desconegut" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "ordenat visualment en UTF-8." + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Codificació desconeguda" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "tipus de terminfo actuals:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "El terminal és només ASCII [per defecte]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "El terminal està ordenat lògicament en UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "El Terminal està ordenat visualment en UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "El terminal té una geometria específica." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "AMPLADAxALÇADA" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "l'especificació de les dimensions del terminal no són correctes" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "no s'ha trobat el terminal %s o no és gestionat per terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g AMPLExALT] TERM [TIPUS]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Assigna el tipus de terminfo de TERM a TIPUS.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Mostra i executa el bloc d'arguments." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "el fitxer de mapa de bits «%s» té un format que no és permès" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " informació de la VBE: versió: %d.%d rev del programa OEM: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " memòria toal: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "no s'ha trobat cap mode de vídeo disponible" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "s'ha denegat l'accés" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MÒDULS" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "pre-carrega els MÒDULS especificats" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "només instal·la els MÒDULS i les seves dependències [per defecte=tot]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "THEMES" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "instal·la els TEMES [per defecte=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "FONTS" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "instal·la les FONTS [per defecte=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LOCALES" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "només instal·la la configuració LOCAL [per defecte=tot]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "comprimeix els fitxers del GRUB [opcional]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "escolliu la compressió que s'ha de fer servir com a imatge del núcli" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" +"utilitza les imatges i els mòduls que hi han a DIR [per defecte=%s/" +"]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "fa servir les traduccions que hi han a DIR [per defecte=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "fa servir els temes que hi han a DIR [per defecte=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "incrusta el FITXER com a clau públic per la comprovació de signatures" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "no es pot canviar el nom del fitxer %s per %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "el disc no existeix, per tant es torna a la partició %s del dispositiu" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Comandes:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Crea un fitxer de blocs d'entorn buit." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Llista les variables actuals." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NOM=VALOR...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Estableix les variables." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NOM ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Esborra les variables." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opcions:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Heu d'especificar com a mínim una ordre.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "NOMFITXER ORDRE" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Eina per editar el bloc d'entorn." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Si NOMFITXER és «-», es farà servir el valor per defecte %s.\n" +"\n" +"No hi ha comanda «delete»; si voleu esborrar el bloc d'entorn sencer,\n" +"feu servir «rm %s»." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "el bloc d'entorn no és vàlid" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "el paràmetre %s no és vàlid" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "el bloc de l'entorn és massa petit" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "ha fallat la lectura del disc a l'òfset %lld, longitud %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "valor %lld d'escapada no vàlid" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "error de lectura a l'òfset %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "no es pot obrir el fitxer de SO «%s»: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "no es pot escriure al stdout: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "ha fallat la comparació l'òfset %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "s'ha produït un error en obrir el fitxer %s del SO: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "ha fallat l'ordre «loopback»: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "ha fallat l'ordre «cryptomount»: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "no s'ha pogut obtenir el UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls CAMÍ" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Llista els fitxers a CAMÍ." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FITXER LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Copia el FITXER al fitxer local LOCAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FITXER" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "copia el FITXER a la sortida estàndard." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FITXER LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Compara el FITXER amb el fitxer local LOCAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FITXER" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Mostra el contingut de FITXER en hexadecimal." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FITXER" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Calcula la suma de verificació crc32 del FITXER." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FITXER" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Mostra la llista de blocs del FITXER." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid DISPOSITIU" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Calcula el UUID de XNU del dispositiu." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NÚMERO" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Salta N bytes del fitxer de sortida." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Tracta N bytes del fitxer de sortida." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Especifica el nombre de fitxers d'entrada." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Estableix la variable d'entorn de depuració." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Munta dispositius xifrats." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FITXER|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Carrega la clau de xifrat zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Descomprimeix les dades." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Compte de discs no vàlid.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "El compte de discs ha de precedir al llistat de discs.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "No heu especificat cap ordre.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "A l'ordre li falten paràmetres.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "L'ordre %s no és vàlida.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "CAMÍ_IMATGE COMANDES" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Eina de depuració pel controlador de sistemes de fitxers." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "estableix el nom del fitxer per la part de 32 bits." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "estableix el nom del fitxer per la part de 64 bits." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "estableix el fitxer de sortida. Per defecte és STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPCIONS]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Uneix els binaris de 32 i 64 bits en un d'universal Apple." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "No s'ha trobat el fitxer d'entrada\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "no es pot copiar «%s» a «%s»: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "no es pot comprimir «%s» a «%s»" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "no es pot obrir el directori «%s»: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "no es pot esborrar «%s»: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "el grub-mkimage no porta compilat la compatibilitat amb XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "El format de compressió %s és desconegut" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "No es reconeix la compressió «%s»" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "el format «%s» de l'objectiu és desconegut." + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "no s'ha pogut trobar la configuració local «%s»" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "No existeix %s. Especifiqueu --target o --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "el fitxer modinfo «%s» no és vàlid" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "La plataforma «%s-%s» és desconeguda" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Hi ha més d'un dispositiu d'instal·lació?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"instal·la imatges de GRUB al directori DIR/%s en comptes del directori %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "OBJECTIU" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"instal·la GRUB per la plataforma OBJECTIU [per defecte=%s]; objectius " +"vàlids: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"fa que la unitat es pugui arrencar també com un disquet (per defecte per " +"dispositius fdX). Pot fallar en algunes BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "esborra el mapa de dispositius si existeix" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "Instal·la encara que s'hagin detectat problemes" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" +"utilitza l'identificador de fitxers encara que estigui disponible l'UUID" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"mòdul de disc que cal utilitzar (biodisk o nadiu). Aquesta opció només està " +"disponible per a BIOS." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"no actualitza les variables «boot-device»/«Boot» del NVRAM. Aquesta opció " +"només està disponible per a EFI i IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "no comprovis el sistema de fitxers del DISPOSITIU" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "no instal·la el sector d'arrancada" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"No aplica cap codi reed-solomon quan incrusta el core-img. Aquesta opció " +"només està disponible per a BIOS x86." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"el dispositiu d'instal·lació és extraïble. Aquesta opció només està " +"disponible per a EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"l'ID del carregador d'arrencada. Aquesta opció només està disponible per a " +"EFI i Macs." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "utilitza el DIRECTORI com a partició arrel del sistema EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "fa servir el DIRECTORI com a instal·lador PPC MAC." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "utilitza el FITXER com a font per l'etiqueta" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "fa servir el COLOR per les etiquetes" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "fa servir el COLOR com a fons de les etiquetes" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "utilitza STRING com a versió del producte" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPCIÓ] [DISPOSITIU_INSTAL·LACIÓ]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Instal·la GRUB a la vostra unitat." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"DISPOSITIU_INSTAL·LACIÓ ha de ser el nom del fitxer d'un dispositiu de " +"sistema.\n" +"%s copia les imatges del GRUB a %s. A algunes plataformes, també instal·la " +"el GRUB al sector arrencada." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "la unitat %s està definida més d'un cop al mapa de dispositius %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "No s'ha pogut determinar la vostra plataforma. Utilitzeu --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "S'està instal·lant per la plataforma %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "no s'ha especificat el dispositiu d'instal·lació" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "no s'ha trobat el directori EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "no s'ha pogut trobar cap dispositiu anomenat %s (/dev està muntat?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"no s'ha pogut trobar cap unitat de disc anomenada %s. Comproveu el mapa de " +"dispositius" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s no sembla una partició EFI" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Heu trobat una errada" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "el sistema de fitxers de %s no és ni HFS ni HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"S'intenta instal·lar en un disc xifrat sense el cryptodisk habilitat. " +"Indiqueu «%s» al fitxer «%s»" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "No es pot crear el fitxer: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"no hi ha pistes disponibles per la vostra plataforma. És d'esperar un " +"rendiment reduït." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NO S'EXECUTA:" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "la partició escollida no és una partició PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "ha fallat al copiar Grub a la partició PRep" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"la partició PReP no està buida. Si esteu segur que la voleu utilitzar, " +"executeu dd per esborrar-la: «%s»" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "no s'ha especificat l'id del carregador d'arrencada EFI." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "AVÍS: no s'ha realitzat cap instal·lació per una plataforma específica" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Ha acabat la instal·lació. No s'ha reportat cap error." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "fa arrencable (bless) per macs basats en x86" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "fa arrencable (bless) per macs basats en ppc" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "No s'ha especificat cap camí ni cap dispositiu.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc CAMÍ|--x86 FITXER" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "fa servir el bless estil MAC en HFS o HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Ús: %s [FITXERENTRADA [FITXERSORTIDA]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" +"s'ha produït l'error %d del Freetype mentre es carregava 0x%x per U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (centrat)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (d'esquerra a dreta)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (de dreta a esquerra)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Substitució fora de rang (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Cerca fora de rang: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "No és compatible amb la substitució de tipus: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "No és compatible amb l'especificació de la substitució: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "No és compaible amb l'especificació de la cobertura: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "AVÍS: no és compatible amb la característica de la font: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "desa la sortida al FITXER [necessari]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "selecciona l'índex de l'aspecte" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "DESDE-FINS[,DESDE-FINS]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "estableix el rang de la font" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "estableix la família de la font" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "MIDA" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "estableix la mida de la font" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "estableix els descendents de la font." + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "estableix els ascendents de la font" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "converteix la font en negreta" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "força l'autohint" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "deshabilita l'autohint" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignora els mapes de bits preformats quan carreguis" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "el rang de la font no és vàlid" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPCIONS] FITXERS_FONT" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Converteix els fitxers de fonts comunes al format PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "heu d'especificar un fitxer de sortida" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "Ha fallat l'FT_Init_FreeType" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "no s'ha pogut obrir el fitxer %s, índex %d: error %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "no es pot establir la font a la mida %dx%d: error %d del Freetype: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "estableix el directori prefix" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"incrusta el FITXER com una imatge memdisk\n" +"implica «-p (memdisk)/boot/grub» i sobreescriu qualsevol prefix que s'hagi " +"indicat abans, però aquest prefix pot ser sobreescrit per opcions posteriors." + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "incrusta el FITXER com una configuració prèvia" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "afegeix el segment NOTA al CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "desa la imatge generada al FITXER [per defecte=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "genereu una imatge al FORMAT" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "formats disponibles:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "el format «%s» de l'objectiu és desconegut.\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPCIONS]...[MODULS]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Crea una imatge de GRUB que pot arrencar" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "No s'ha especificat el format de l'objectiu (utilitzeu l'opció -O)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "No s'ha especificat el prefix (utilitzeu l'opció -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"«%s» no està ben compilat: l'adreça inicial és 0x%llx en comptes de 0x%llx: " +"un error del ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "estableix el nom del fitxer d'entrada. Per defecte és STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "El símbol identificador de la tecla %s és desconegut\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "El número identificador de la tecla 0x%02x és desconegut\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"ERROR: no s'ha trobat cap distribució de teclat vàlida. Comproveu " +"l'entrada.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" +"Genera una distribució de teclat pel GRUB des de la de la consola de Linux" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "directori arrel o servidor TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "subdirectori relatiu del servidor de xarxa" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Prepara les imatges arrencables per xarxa al net_directory/subdir tenint en " +"compte que net_directory és l'arrel del TFTP." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "no és compatible amb la plataforma %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"s'ha creat el directori Netboot per %s. Configureu el vostre servidor de " +"DHCP de manera que apunti a %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Nombre d'iteracions de la PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Longitud del hash generat" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Longitud de sal" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Genera el hash PBKDF2 de la contrasenya" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "no s'ha pogut llegir la contrasenya" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Torna a introduir la contrasenya: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "la contrasenya no coincideix" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "no s'ha pogut obtenir dades aleatòries de sal" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "error de xifrat número %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "el hash PBKDF2 de la vostra contrasenya és %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "No heu especificat cap camí.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "CAMÍ" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Transforma un nom de fitxer del sistema en un del GRUB" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "Desa les imatges de ROM al DIRECTORI [opcional]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "utilitza el FITXER com a xorriso [opcional]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "fes servir la CADENA com un nom de producte" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"habilita l'arranc sparc. Deshabilita l'HFS+, l'APM, l'ARCS i arranca com una " +"imatge de disc per PC I386." + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"habilita l'arranc ARCS (màquines mips big-endian, sobretot SGI). Deshabilita " +"l'HFS+, l'APN i l'sparc64 i arranca com una imatge de disc per PC i386" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Fa una imatge de GRUB que pot arrencar des de CD-ROM. disc, llapis USB i " +"disquet." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Genera una imatge arrencable des de CD/USB/disquet. Els arguments que no són " +"opcions d'aquest programa es passen al xorriso i indiquen fitxers font, " +"directoris font o qualsevol de les opcions del mkisofs llistades amb la " +"sortida de «%s»." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Opció --canvia al mode de comandes nadiu de xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"Envieu les peticions de compatibilitat amb el xorriso a «bug-xorriso@gnu." +"org»." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPCIÓ] FONT..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "S'habilita la compatibilitat amb %s..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"El vostre xorriso no permet l'us de «--grub2-boot-info». S'han deshabilitat " +"algunes característiques. Feu servir xorriso 1.2.9 o posterior." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"El vostre xorriso no permet l'us de «--grub2-boot-info». la vostra imatge " +"del nucli és massa gran. S'ha deshabilitat l'arranc com a disc. Feu servir " +"xorriso 1.2.9 o posterior." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Genera una imatge independent (que conté tots els mòduls) amb el format " +"seleccionat" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Podeu fer servir la sintaxi Graft point (P.e. /boot/grub/grub.cfg=./grub.cfg)" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMATGE1 [IMATGE2 ...] PUNTMUNTATGE" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "necessita una imatge i un punt de muntatge" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "l'argument que s'ha donat és un dispositiu de sistema, no un camí" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "separa els elements a la sortida emprant caràcters ASCII NUL" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[per defecte=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "imprimeix OBJECTIU" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "objectius disponibles:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPCIONS]... [CAMÍ|DISPOSITIU]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Cerca informació del dispositiu en un camí especificat (o per un dispositiu, " +"si es dona l'opció -d)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "llegeix el text del FITXER." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "fa servir el COLOR pel text" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "fa servir el COLOR pel fons" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "estableix l'etiqueta que cal renderitzar" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "fa servir el FITXER com a font (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Renderitza el .disk_label d'Apple." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Falten arguments\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[CAMÍ]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Comprova els errors de sintaxi del fitxer d'script de configuració del GRUB." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Hi ha un error de sintaxi a la línia %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "L'script «%s» no conté comandes i no farà res\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "utilitza el FITXER com a imatge d'arrencada [per defecte=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "utilitza el FITXER com a imatge del nucli [per defecte=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "No s'ha especificat cap dispositiu.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Configura les imatges per arrencar des del DISPOSITIU\n" +"\n" +"Normalment no hauríeu de fer servir aquest programa directament. Utilitzeu " +"grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "El DISPOSITIU ha de ser un dispositiu del SO (p.e. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "El dispositiu «%s» no és vàlid.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "el directori arrel com es veurà en temps d'execució [per defecte=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"el directori actual de syslinux com es veurà en temps d'execució [per " +"defecte és el directori superior del fitxer d'entrada]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "escriu la sortida al FITXER [per defecte=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Transforma la configuració de syslinux en una de GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "no es pot comprimir la imatge del nucli" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "la compressió %d no és coneguda" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "El descompressor és massa gran" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "la imatge del nucli és massa gran (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "la imatge del nucli és massa gran (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "la mida de diskboot.img ha de ser de %u bytes" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img no té la versió bona coneguda. Assumiu el risc de continuar" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "la imatge del microprogramari és massa gran" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "el format de la línia no és vàlid: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "el primer sector del fitxer del nucli no està alineat amb el sector" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "s'han trobat dades no alineades amb el sector al fitxer del nucli" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "els sectors del fitxer del nucli estan massa fragmentats" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "la mida de «%s» no és %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "la mida de «%s» és massa petita" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Esteu intentant instal·lar el GRUB amb múltiples etiquetes de particions o " +"ambdues etiquetes de partició i de sistema de fitxers. Encara no se'n permet " +"l'ús." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"No s'ha pogut identificar el sistema de fitxers de %s; no es pot comprovar " +"la seguretat" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s sembla contenir un sistema de fitxers %s que no sé si pot reservar espai " +"pel sistema d'arrencada de l'estil del DOS. Instal·lar el GRUB pot DESTRUIR " +"EL SISTEMA DE FITXERS si el grub-setup sobreescriu dades importants (--skip-" +"fs-probe deshabilita la comprovació. Utilitzeu-la sota la vostra " +"responsabilitat)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s sembla contenir un mapa de particions %s que és sabut que no reserva " +"espai pel sistema d'arrencada de l'estil del DOS. Instal·lar-hi el GRUB pot " +"DESTRUIR EL SISTEMA DE FITXERS si el grub-setup sobreescriu dades importants " +"(--skip-fs-probe deshabilita la comprovació. Utilitzeu-la sota la vostra " +"responsabilitat)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s sembla contenir un LDM i un mapa de particions %s que no és una " +"combinació segura coneguda. Instal·lar-hi el GRUB pot DESTRUIR EL SISTEMA DE " +"FITXERS si el grub-setup sobreescriu dades importants (--skip-fs-probe " +"deshabilita la comprovació. Utilitzeu-la sota la vostra responsabilitat)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Esteu intentant instal·lar el GRUB a un disc sense particions o a una " +"partició. És una MALA idea." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Esteu intentant instal·lar el GRUB en un disc amb múltiples etiquetes de " +"particions. Encara no se'n permet l'ús." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "L'estil de partició «%s» no és compatible amb la incrustació" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "El sistema de fitxers «%s» no és compatible amb la incrustació" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"La vostra àrea d'incrustació és petita. El fitxer core.img no hi cabrà." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "no hi ha terminació a la imatge del nucli" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "la versió del core.img no es correspon" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"no s'ha pogut incrustar, però és necessari quan s'instal·la un RAID i un LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "no es pot determinar el sistema de fitxers a %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "el sistema de fitxers «%s» no és compatible amb les llistes de blocs" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"+No s'ha pogut incrustar, però es requereix quan grub s'instal·la en un disc " +"diferent del de la imatge" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"No s'ha pogut incrustar. El GRUB només es pot instal·lar d'aquesta manera " +"fent servir llistes de blocs. De tota manera, les llistes de blocs NO SÓN " +"FIABLES i es desaconsella la seva utilització." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "no continuarà amb la llista de blocs" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "les llistes de blocs no són vàlides" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "les llistes de blocs no estan complertes" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Ús: %s -0 SORTIDA CKBMAP_ARGUMENTS...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Fa un fitxer de distribució de teclat pel GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "mostra aquest missatge i surt" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "mostra informació sobre la versió i surt" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s genera una distribució de teclat pel GRUB fent servir ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Informeu dels errors a ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: l'opció necessita un argument -- «%s»\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Ús: %s [OPCIÓ]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Genera un fitxer de configuració del GRUB" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "envia la configuració generada al FITXER [per defecte=stdout] " + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "No es reconeix l'opció «%s»\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Heu d'executar-ho com a root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: No s'ha trobat.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Es genera un fitxer de configuració..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"S'han detectat errors de sintaxi al fitxer de configuració del GRUB " +"generat.\n" +"Assegureu-vos que no hi ha errors a /etc/default/grub o als fitxers\n" +" /etc/grub.d/* o bé envieu un informe d'error adjuntant el fitxer %s " + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "fet" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Avís:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Ús: %s [OPCIÓ] ENTRADA_MENÚ\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Estableix l'entrada del menú d'arrencada per defecte del GRUB, només per la " +"propera arrencada." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"s'esperaven imatges del GRUB al directori DIRECTORI/%s en comptes del " +"directori %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENU_ENTRY és un número, un títol d'objecte del menú o un identificador " +"d'aquest objecte. Tingueu en compte\n" +"que cal especificar els components del submenú i després el component de " +"l'objecte del mení en els objectes de \n" +"submenús o sub-submenús . Els títols s'han de separar fent servir el " +"caràcter «més gran que» (>) sense cap espai més.\n" +"En funció del vostre interpret d'ordre alguns caràcters com ara (>) poden " +"haver de ser escapats. Podeu trobar més \n" +"informació al manual de GRUB a la secció sobre la comanda «per defecte»." + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Més d'una entrada del menú?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "No s'ha especificat cap entrada del menú." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Estableix l'entrada del menú d'arrencada per defecte del GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Necessita configurar GRUB_DEFAULT=saved a %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ENTRADA_MENÚ és un número, el títol d'un element del menú o el seu " +"identificador." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"S'ha demanat un terminal sèrie, però no s'ha especificat el " +"GRUB_SERIAL_COMMAND. S'utilitzen els paràmetres per defecte." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "S'ha trobat el tema :%s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "S'ha trobat el fons: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "No és compatible amb el format de la imatge" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Ja no es permet establir GRUB_TIMEOUT a un valor diferent de zero quan " +"s'indica GRUB_HIDDEN_TIMEOUT." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "S'ha trobat un GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "S'ha trobat el mòdul del Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "S'ha trobat alguna cosa del Hurd, però no és suficient per arrencar." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, amb el Hurd %s (mode de restabliment)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, amb el Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"No utilitzeu l'antic títol «%s» per al GRUB_DEFAULT. Feu servir «%s» (per " +"versions anterior a la 2.00) o «%s» (per versions 2.00 o posteriors)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "S'està carregant el GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "S'està carregant el Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Opcions avançades de %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "S'està carregant el nucli de Illumos ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, amb el kFreeBSD %s (mode de restabliment)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, amb el kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "S'està carregant el nucli de FreeBSD %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "S'ha trobat un nucli de FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "S'ha trobat el directori de mòduls del nucli: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, amb el Linux %s (mode de restabliment)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, amb el Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "S'està carregant el Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "S'està carregant la ramdisk inicial ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "S'ha trobat una imatge de linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "s'ha trobat una imatge de initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, amb nucli %s (a traves de %s, mode de restabliment)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, amb nucli %s (a través de %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "S'ha trobat un nucli de NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (carregador)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (carregador)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "S'ha trobat %s a %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32 bits)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64 bits)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(a %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, amb Xen %s i Linux %s (mode de restabliment)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, amb Xen %s i Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, amb el Xen hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "S'està carregant el Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Hipervisor de Xen, versió %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Opcions avançades de %s (amb hypervisor de Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "S'ha trobat %s a %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "el grub-mkconfig encara no és compatible amb el %s.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "No és compatible amb la substitució del senyal: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "La característica gsub 0x%x (%s) de la font no és coneguda\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "El rang d'adreces no està associat amb la RAM" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "el vostre sistema no és compatible amb grub_memalign" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Si NOMFITXER és «-» s'utilitza el valor per defecte %s." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "desa només els mapes de bits ASCII" + +#~ msgid "create width summary file" +#~ msgstr "crea un fitxer de resum ample" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "L'opció --ascii-bitmaps no accepta rangs (sempre utilitza ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "AVÍS: no és segur que el vostre generador aleatori sigui segur\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "mostra el mòdul del sistema de fitxers, la unitat de disc del GRUB, el " +#~ "dispositiu de sistema, el mòdul del mapa de particions, el mòdul " +#~ "d'abstracció o l'UUID del contenidor de xifrat [per defecte=fs]" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "no s'ha pogut llegir el primer sector de la imatge del nucli" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "utilitza el FITXER com a grub-setup" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "utilitza el FITXER com a grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "utilitza el FITXER com a grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "DISPOSITIU_INSTAL·LACIÓ ha de ser un nom de dispositu d'instal·lació." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "El GRUB no pot llegir el camí «%s» en arrencar. La instal·lació no és " +#~ "possible. S'interromp.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Ha fallat la detecció automàtica d'un sistema de fitxers de %s.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Intenteu-ho amb --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Si el problema persisteix, informeu-ne juntament amb la sortida de %s a <" +#~ "%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "Ha fallat «%s».\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "No s'ha pogut trobar la unitat GRUB de %s; no es pot crear l'entrada al " +#~ "gestor d'arrencada de l'EFI.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Es genera grub.cfg ..." + +#~ msgid "" +#~ "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgstr "" +#~ "%s copia imatges de GRUB a net_directory/subdir/target_cpu-platform\\n" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "utilitza el FITXER com a grub-glue-efi" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "utilitza el FITXER com a grub-render-label" + +#~ msgid "Packed pixel " +#~ msgstr "Paquet de píxels" + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "" +#~ "utilitza les imatges de GRUB del DIR. Pren preferència sobre l'objectiu" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "La informació d'emmagatzemament de «%s» no inclou el nom" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "Longitud del nom falsa a la informació de l'emmagatzemament de «%s»" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "El nom d'emmagatzemament de «%s» no acaba amb NUL" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "" +#~ "No s'ha pogut trobar el volum físic «%s». Comproveu el mapa de dispositius" + +#~ msgid "Expose v1 tables." +#~ msgstr "Exposa les taules v1." + +#~ msgid "Fake BIOS." +#~ msgstr "Falsa BIOS." + +#~ msgid "Check hash list file." +#~ msgstr "Comprova el hash de la llista de fitxers" + +#~ msgid "DIRECTORY" +#~ msgstr "DRECTORI" + +#~ msgid "Unload PXE environment." +#~ msgstr "Treu l'entorn PXE." + +#~ msgid "Read word from PORT." +#~ msgstr "Llegeix una paraula del PORT," + +#~ msgid "Read dword from PORT." +#~ msgstr "Llegeix una paraula doble del PORT." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "Escriu paraula VALOR al PORT." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "Escriu una paraula doble VALOR al PORT." + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "Read word from ADDR." +#~ msgstr "Llegeix una paraula de ADDR." + +#~ msgid "Read dword from ADDR." +#~ msgstr "Llegeix una paraula doble de ADDR." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "Escriu una paraula VALOR a ADDR." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "Escriu una paraula doble VALOR a ADDR" + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Cadena de definició de l'entrada del menú." + +#~ msgid "[DEVICE]" +#~ msgstr "[DISPOSITIU]" + +#~ msgid "Variable names to update with matches." +#~ msgstr "Noms de les variables que cal actualitzar amb les concordances." + +#~ msgid "Load XNU hibernate image." +#~ msgstr "Carrega una imatge hibernada del XNU." + +#~ msgid "Authenticate users" +#~ msgstr "Autentica usuaris" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 visual" + +#~ msgid "write error" +#~ msgstr "error d'escriptura" + +#~ msgid "open error" +#~ msgstr "error en obrir" + +#~ msgid "seek error" +#~ msgstr "error en la cerca" + +#~ msgid "Hex dump FILE." +#~ msgstr "Fa el bolcat hexadecimal del fitxer." + +#~ msgid "Must use absolute path.\n" +#~ msgstr "Heu de fer servir un camí absolut.\n" + +#~ msgid "the core image is too small" +#~ msgstr "la imatge del nucli és massa petita" + +#~ msgid "prefix is too long" +#~ msgstr "el prefix és massa llarg" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Forma d'ús: %s [OPCIÓ]... [MÒDULS]\n" +#~ "\n" +#~ "Fa una imatge del GRUB que pot arrencar\n" +#~ "\n" +#~ " -d, --directory=DIR utilitza les imatges i els mòduls de DIR [per " +#~ "defecte=%s/@platform@]\n" +#~ " -p, --prefix=DIR utilitza el directori grub_prefix [per defecte=" +#~ "%s]\n" +#~ " -m, --memdisk=FITXER incrusta el FITXER com una imatge memdisk\n" +#~ " -c, --config=FITXER incrusta el FITXER com a configuració " +#~ "d'arrencada\n" +#~ " -n, --note afegeix un segment NOTA pel CHRP " +#~ "microprogramari obert\n" +#~ " -o, --outut=FITXER posa una imatge generada al FITXER [per " +#~ "defecte=stdout]\n" +#~ " -O, --format=FORMAT genera una imatge amb el format \n" +#~ " formats disponibles: %s\n" +#~ " -C, --compression=(xz|none|auto) escull la compressió que cal fer " +#~ "servir\n" +#~ " -h, --help mostra aquest missatge i surt\n" +#~ " -V, --version mostra la informació de la versió i surt\n" +#~ " -v, --verbose mostra els missatges detallats\n" +#~ "\n" +#~ "Informeu dels errors a <%s>.\n" + +#~ msgid "cannot open %s" +#~ msgstr "no es pot obrir %s" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "No s'ha pogut incrustar, però es requereix quan el dispositiu arrel és a " +#~ "una matriu RAID o a un volum LVM." + +#~ msgid "DEV" +#~ msgstr "DISPOSITIU" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "" +#~ "Fes servir el DISPOSITIU com a dispositiu del root [per defecte=deduït]" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "No es pot deduir el dispositiu arrel. Especifiqueu l'opció «--root-device»" + +#~ msgid "[class [handler]]" +#~ msgstr "[classe [gestor]]" + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "Llista les extensions de vídeo compatibles de VESA BIOS." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "Prova el suport per l'extensió 2.0+ de VESA BIOS." + +#~ msgid "Set the root device." +#~ msgstr "Estableix el dispositiu arrel." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "Simula un disc dur amb particions." + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "" +#~ "Esteu intentant instal·lar el GRUB a una partició en lloc de al MBR. És " +#~ "una MALA idea." + +#~ msgid "No DOS-style partitions found" +#~ msgstr "No s'ha trobat cap partició d'estil DOS" + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "Si realment voleu fer servir llistes de blocs, empreu --force." + +#~ msgid "" +#~ "Usage: %s [OPTION]... DEVICE\n" +#~ "\n" +#~ "Set up images to boot from DEVICE.\n" +#~ "DEVICE must be a GRUB device (e.g. `(hd0,1)').\n" +#~ "\n" +#~ " -b, --boot-image=FILE use FILE as the boot image [default=%s]\n" +#~ " -c, --core-image=FILE use FILE as the core image [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=guessed]\n" +#~ " -f, --force install even if problems are detected\n" +#~ " -s, --skip-fs-probe do not probe for filesystems in DEVICE\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Forma d'ús: %s [OPCIÓ]... DISPOSITIU\n" +#~ "\n" +#~ "Configura imatges per arrencar des del DISPOSITIU.\n" +#~ "DISPOSITIU ha de ser un dispositiu del GRUB (p.e. «(hd0,1)»).\n" +#~ "\n" +#~ " -b, --boot-image=FITXER usa FITXER com a imatge d'arrencada [per " +#~ "defecte=%s]\n" +#~ " -c, --core-image=FITXER usa FITXER com a imatge del nucli [per defecte=" +#~ "%s]\n" +#~ " -d, --directory=DIR usa els fitxers del GRUB del directori DIR [def=" +#~ "%s]\n" +#~ " -m, --device-map=FITXER usa el FITXER com a mapa del dispositiu [def=" +#~ "%s]\n" +#~ " -r, --root-device=DISP usa DISP com a dispositiu arrel [per " +#~ "defecte=dedueix]\n" +#~ " -f, --force instal·la encara que es detectin problemes\n" +#~ " -s, --skip-fs-probe no comprovis els sistemes de fitxers a " +#~ "DISPOSITIU\n" +#~ " -h, --help mostra aquest missatge i surt\n" +#~ " -V, --version mostra informació sobre la versió i surt\n" +#~ " -v, --verbose mostra els missatges detallats\n" +#~ "\n" +#~ "Informeu dels errors a <%s>.\n" diff --git a/po/cyrillic.sed b/po/cyrillic.sed new file mode 100644 index 000000000..ffad0ed8c --- /dev/null +++ b/po/cyrillic.sed @@ -0,0 +1,104 @@ +/^Project-Id-Version:/ b +/^Report-Msgid-Bugs-To:/ b +/^POT-Creation-Date:/ b +/^PO-Revision-Date:/ b +/^Last-Translator:/ b +/^Language-Team:/ b +/^Language:/ b +/^MIME-Version:/ b +/^Content-Type:/ b +/^Content-Transfer-Encoding:/ b +/^Plural-Forms:/ b + +s,a,а,g +s,b,б,g +s,c,ц,g +s,d,д,g +s,e,е,g +s,f,ф,g +s,g,г,g +s,h,х,g +s,i,и,g +s,j,й,g +s,k,к,g +s,l,л,g +s,m,м,g +s,n,н,g +s,o,о,g +s,p,п,g +s,q,ќ,g +s,r,р,g +s,s,с,g +s,t,т,g +s,u,у,g +s,v,в,g +s,w,ў,g +s,x,ѯ,g +s,y,ѝ,g +s,z,з,g +s,A,А,g +s,B,Б,g +s,C,Ц,g +s,D,Д,g +s,E,Е,g +s,F,Ф,g +s,G,Г,g +s,H,Х,g +s,I,И,g +s,J,Й,g +s,K,К,g +s,L,Л,g +s,M,М,g +s,N,Н,g +s,O,О,g +s,P,П,g +s,Q,Ќ,g +s,R,Р,g +s,S,С,g +s,T,Т,g +s,U,У,g +s,V,В,g +s,W,Ў,g +s,X,Ѯ,g +s,Y,Ѝ,g +s,Z,З,g +s,А,А,g +s,Б,Б,g +s,Ц,Ц,g +s,Д,Д,g +s,Е,Е,g +s,Ф,Ф,g +s,Г,Г,g +s,Х,Х,g +s,И,И,g +s,Й,Й,g +s,К,К,g +s,Л,Л,g +s,М,М,g +s,Н,Н,g +s,О,О,g +s,П,П,g +s,Ќ,Ќ,g +s,Р,Р,g +s,С,С,g +s,Т,Т,g +s,У,У,g +s,В,В,g +s,Ў,Ў,g +s,Ѯ,Ѯ,g +s,Ѝ,Ѝ,g +s,З,З,g + +s,%\([0-9]*\)Ц,%\1C,g +s,%\([0-9]*\)ц,%\1c,g +s,%\([0-9]*\)д,%\1d,g +s,%\([0-9]*\)лд,%\1ld,g +s,%\([0-9]*\)ллд,%\1lld,g + +s,%\([0-9\.\*]*\)с,%\1s,g +s,%\([0-9]*\)лу,%\1lu,g +s,%\([0-9]*\)у,%\1u,g +s,%\([0-9]*\)ллу,%\1llu,g +s,%\([0-9]*\)ѯ,%\1x,g +s,%\([0-9]*\)лѯ,%\1lx,g +s,%\([0-9]*\)ллѯ,%\1llx,g diff --git a/po/da.gmo b/po/da.gmo new file mode 100644 index 0000000000000000000000000000000000000000..fbafe854a7b80d4265e5865da45882d8b75f10c1 GIT binary patch literal 124649 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 bless +# boot -> start, boot - afhænger af om læseren kan gennemskue at 'start' refererer til boot +# boot sector -> bootsektor +# boot loader -> opstartsindlæser +# core file -> kernefil (se kernel nedenfor) +# core image -> kerneaftryk +# entry (oftest i opstartsmenu) -> (menu)punkt +# kernel -> kerne (pas på hvis det i nogen sammenhæng kan forveksles med core) +# +# Ask Hjorth Larsen , 2010-12, 2016, 2017. +# Fuld korrekturlæsning af scootergrisen, 2017. +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-16 21:11+0100\n" +"Last-Translator: Ask Hjorth Larsen \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Launchpad-Export-Date: 2010-12-18 15:32+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "uunderstøttet hastighed af serielport" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "uunderstøttet paritet af serielport" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "uunderstøttet stop-bittal for serielport" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "uunderstøttet ordlængde for serielport" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Indlæs ikke værtstabeller angivet i kommaadskilt liste." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Indlæs kun tabeller angivet i kommaadskilt liste." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Eksportér version 1-tabeller til operativsystemet." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Eksportér version 2- og version 3-tabeller til operativsystemet." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Indstil OEMID for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Indstil OEMTABLE ID for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Indstil revision af OEMTABLE for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Indstil skaberfeltet for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Indstil skaberrevision for RSDP, XSDT og RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Opdatér ikke EBDA. Vil måske rette fejl eller nedbrud med visse BIOS'er, men " +"forringer effektiviteten, da operativsystemet ikke modtager RSDP fra GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "filafslutning tidligere end ventet i %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABEL1,TABEL2|--load-only=TABEL1,TABEL2] FIL1 [FIL2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Indlæs ACPI-værtstabeller og tabeller angivet ved argumenter." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "fejl: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "løbet tør for hukommelse" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "kan ikke læse \"%s\": %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI-slukning mislykkedes" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Vis liste af enheder." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "filnavn forventet" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FIL" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Udskriv en blokliste." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "du skal først indlæse kernen" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Start et operativsystem." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Der er ingen tilgængelig statistik for opstartstider\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Vis statistik for opstartstid." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statistik for diskmellemlager: træffere = %lu (%lu.%02lu%%), forbiere = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Der er ingen tilgængelig statistik for diskmellemlager\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Hent oplysninger om diskmellemlager." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Acceptér CR/NL-linjeafslutninger i stil med DOS." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Vis indholdet af en fil." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "to argumenter forventet" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Sammenlign filen \"%s\" med \"%s\":\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Filerne har forskellig størrelse: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Filer er forskellige fra position %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Filerne er identiske.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FIL1 FIL2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Sammenlign to filer." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Indlæs endnu en konfigurationsfil." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Indlæs endnu en konfigurationsfil uden at ændre kontekst." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Indlæs endnu en konfigurationsfil uden at ændre kontekst, men hent kun " +"menuindgange." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Indlæs endnu en konfigurationsfil, men hent kun menuindgange." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[år-]måned-dag] [time:minut[:sekund]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Vis/indstil nuværende tidspunkt og dato." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Udskriv ikke afsluttende linjeskiftstegn." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Aktivér fortolkning af undvigesekvenser med omvendt skråstreg." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] STRENG" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Vis en linje af tekst." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Genstart og vis firmwareopsætningsmenu." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Fiks videoproblem." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM-aftryk er til stede." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Kan ikke aktivere ROM-område." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Opret BIOS-agtige strukturer til bagudkompatibilitet med eksisterende OS." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Indlæs BIOS-dump." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "STRENG ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Evaluér argumenter som GRUB-kommandoer" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "Kontrollér om FIL kan bootes som upriviligeret i386 PAE Xen-gæstekerne" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "Kontrollér om FIL kan bootes som upriviligeret x86_64 Xen-gæstekerne" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "Kontrollér om FIL kan bruges som priviligeret Xen x86-gæstekerne" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Kontrollér om FIL kan bruges som x86-multibootkerne" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Kontrollér om FIL kan bruges som x86-multiboot2-kerne" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Kontrollér om FIL er ARM-Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Kontrollér om FIL er ARM64-Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Kontrollér om FIL er IA64-Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Kontrollér om FIL er MIPS-Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Kontrollér om FIL er MIPSEL-Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Kontrollér om FIL er SPARC64-Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Kontrollér om FIL er POWERPC-Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Kontrollér om FIL er x86-Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Kontrollér om FIL er x86-Linux som understøtter 32-bit-protokol" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Kontrollér om FIL er x86-kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Kontrollér om FIL er i386-kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Kontrollér om FIL er x86_64-kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Kontrollér om FIL er x86-kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Kontrollér om FIL er i386-kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Kontrollér om FIL er x86_64-kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Kontrollér om FIL er i386 EFI-fil" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Kontrollér om FIL er x86_64 EFI-fil" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Kontrollér om FIL er IA64 EFI-fil" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Kontrollér om FIL er ARM64 EFI-fil" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Kontrollér om FIL er ARM EFI-fil" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Kontrollér om FIL er hiberfil.sys i dvaletilstand" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Kontrollér om FIL er x86_64 XNU (Mac OS X-kerne)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Kontrollér om FIL er i386 XNU (Mac OS X-kerne)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Kontrollér om FIL er XNU-dvaleaftryk (Mac OS X-kerne)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Kontrollér om FIL er BIOS-bootsektor" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "falsk" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "TILVALGSFIL" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Kontrollér om FIL er af den angivne type." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "ingen sådan partition" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Ny MBR skrives til \"%s\"\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ENHED [PARTITION[+/-[TYPE]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Udfyld hybrid-MBR for GPT-drevet ENHED. Angivne partitioner vil være en del " +"af hybrid-MBR. Der tillades op til tre partitioner. TYPE er en MBR-type. + " +"betyder at partitionen er aktiv. Kun én partition kan være aktiv." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Standser computeren. Denne kommando fungerer ikke på alle " +"firmwareimplementationer." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Angiv den hash, der skal bruges." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Kontrollér hashværdier for filer med hashliste fra FIL." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Rodkatalog for hashliste." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "KAT" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Stop ikke efter første fejl." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Udpak fil før tjeksumsberegning." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LÆSEFEJL\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: UOVERENSSTEMMELSE I HASH\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FIL [-p PRÆFIKS]] [FIL1 [FIL2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Udregn eller kontrollér hash-tjeksummen." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FIL [-p PRÆFIKS]] [FIL1 [FIL2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Indstil avanceret strømstyring (APM)\n" +"(1=lav, ..., 254=høj, 255=deaktiveret)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Vis strømtilstand." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Fastlås ATA-sikkerhedsindstillinger indtil nulstilling." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Vis SMART-helbredsstatus." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Indstil automatisk akustikstyring (AAM)\n" +"(0=deaktiveret, 128=stille, ..., 254=hurtig)." + +# fixmig: ved ikke hvilken 'standby' de taler om eller hvad oversættelsen bør være +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Indstil tidsudløb for hvile (standby)\n" +"(0=deaktiveret, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Sæt drevet i hviletilstand (standby)." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Sæt drevet i hviletilstand (sleep)." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Udskriv drevidentitet og indstillinger." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Vis ubehandlet indhold af ATA IDENTIFY-sektor." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Deaktivér/aktivér SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Udskriv ikke meddelelser." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "ét argument forventet" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[TILVALG] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Vis/angiv ATA-diskparametre." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Brug:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MØNSTER ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Vis en hjælpebesked." + +# jf. man-siden for hexdump, dog omskrevet til noget mere indirekte så der ikke kan opstå misforståelser +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Spring et antal byte over fra filens begyndelse." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Læs kun LÆNGDE byte." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[TILVALG] FIL_ELLER_ENHED" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Vis ubehandlet indhold af en fil eller hukommelsen." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Vis rå dump af CMOS-indholdet." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Test bit ved BYTE:BIT i CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Ryd bit ved BYTE:BIT i CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Angiv bit ved BYTE:BIT i CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Vis statistik for coreboot-opstartstid." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Vis coreboot-tabeller." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Kontrollér om CPU understøtter (lang) 64-bit-tilstand (standard)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Kontrollér om CPU understøtter fysisk adresseudvidelse." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Kontrollér for CPU-funktioner." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Vis de aktuelle afbildninger." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Nulstil alle afbildninger til standardværdierne." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Udfør både direkte og omvendte afbildninger." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Intet drev er blevet genafbildet" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS-disk #num ------> GRUB/BIOS-enhed" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Håndtér BIOS-drevafbildinger." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Brug ikke APM til at standse computeren." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Stands systemet, med APM hvis muligt." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "ingen APM fundet" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Version %u.%u\n" +"32-bit CS = 0x%x, længde = 0x%x, position = 0x%x\n" +"16-bit CS = 0x%x, længde = 0x%x\n" +"DS = 0x%x, længde = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bit beskyttet grænseflade understøttes\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bit beskyttet grænseflade understøttes ikke\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bit beskyttet grænseflade understøttes\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bit beskyttet grænseflade understøttes ikke\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Processor kører langsommere når CPU er ledig\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Processor kører ikke langsommere når CPU er ledig\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM slået fra\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM slået til\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM kører ikke\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM kører\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Vis APM-oplysninger." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "filnavn eller tempo samt noder forventet" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Ugyldigt tempo i %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "fil \"%s\" ikke fundet" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "ukendt tal" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FIL | TEMPO [TONEHØJDE1 VARIGHED1] [TONEHØJDE2 VARIGHED2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Afspil en melodi." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "sæt numlock-tilstand" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "sæt capslock-tilstand" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "sæt scrolllock-tilstand" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "sæt insert-tilstand" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "sæt pause-tilstand" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "tryk på venstre skift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "tryk på højre skift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "tryk på SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "tryk på NumLock-tasten" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "tryk på CapsLock-tasten" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "tryk på ScrollLock-tasten" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "tryk på Insert-tasten" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "tryk på venstre alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "tryk på højre alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "tryk på venstre ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "tryk på højre ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "opdatér ikke LED-tilstand" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[TASTETRYK1] [TASTETRYK2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emulér en følge af tastetryk" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Kør \"go\" for at genoptage GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Vend tilbage til IEEE1275-prompten." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Gem den læste værdi i variablen VARNAVN." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAVN" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Læs 8-bit-værdi fra PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Læs 16-bit-værdi fra PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Læs 32-bit-værdi fra PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VÆRDI [MASKE]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Skriv 8-bit-VÆRDI til PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Skriv 16-bit-VÆRDI til PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADR VÆRDI [MASKE]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Skriv 32-bit-VÆRDI til PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "variablen \"%s\" er ikke sat" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Indlæs et tastaturlayout." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Kontrollér skift-tasten." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Kontrollér Ctrl-tasten." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Kontrollér Alt-tasten." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Kontrollér status af modifikationstaster." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "kan ikke finde kommandoen \"%s\"" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Indtast adgangskode: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Fortolk ældre konfiguration i samme kontekst" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Fortolk ældre konfiguration i ny kontekst" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Fortolk ældre konfiguration i samme kontekst, og medtag kun menuindgange" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Fortolk ældre konfiguration i ny kontekst, og medtag kun menuindgange" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FIL [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simulér \"kerne\"-kommando til ældre grub" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FIL [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simulér \"initrd\"-kommando til ældre grub" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simulér \"modulenounzip\"-kommando til ældre grub" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] ADGANGSKODE [FIL]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simulér \"password\"-kommando til ældre grub" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simulér \"password\"-kommando til ældre grub i menuindgangsstilstand" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Angiv filnavn." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Spring signaturkontrol over for miljøfil." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FIL] [-s|--skip-sig] [variabelnavn_som_hvidlistes] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Indlæs variable fra miljøblokfil." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FIL]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Vis variable fra miljøblokfil." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FIL] variabelnavn [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Gem variable til miljøblokfil." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Vis en lang liste med mere detaljeret information." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Udskriv størrelser i læsevenligt format." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Vis liste af alle filer." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Netværksprotokoller:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FIL ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Vis liste af enheder og filer." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Vis kun version 1-tabeller." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Vis kun version 2- og version 3-tabeller." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Vis ACPI-oplysninger." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "tilgængelig RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "reserveret RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM som ACPI kan genvinde" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "RAM som ACPI bruger til ikke-flygtigt lager" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "fejlbehæftet RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "persistent RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "persistent RAM (ældre)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM som indeholder coreboot-tabeller" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM som indeholder firmwarekode" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, længde = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, længde = 0x%llx, type = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Vis hukommelsesafbildningen tilgængelig via firmware." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Vis liste af PCI-enheder." + +# ? +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Bless FIL for HFS eller HFS+-partition for intel-mac." + +# ? +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Bless KAT for HFS eller HFS+-partition for PPC-mac." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Læs 8-bit-værdi fra ADR." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Læs 16-bit-værdi fra ADR." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Læs 32-bit-værdi fra ADR." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Skriv 8-bit-VÆRDI til ADR." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Skriv 16-bit-VÆRDI til ADR." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Skriv 32-bit-VÆRDI til ADR." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Menuindgangstype." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRENG" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Liste af brugere, der har tilladelse til at starte op med dette punkt." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "BRUGERNAVN[,BRUGERNAVN]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tastegenvej til hurtigt at starte med dette punkt." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TAST" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Brug STRENG som menuindgangskrop." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identifikator for menuindgang." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Dette punkt kan startes op af enhver bruger." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Definér en menuindgang." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Definér en undermenu." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Navn\tAntal ref\tAfhængigheder\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Vis denne meddelelse." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADR [STØRRELSE]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Vis indholdet af hukommelsen." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Fjern et modul." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Vis indlæste moduler." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Gå ud af GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Ingen CS5536 fundet" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 på %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "I/O-pladsen for controlleren til systemhåndteringsbussen er 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM-sokkel nummer %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "SPD-byte skrevet: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Størrelse af flash i alt: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Hukommelsestype: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Delnummer: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Hukommelsestype: Ukendt." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Udskriv hukommelsesoplysninger." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s understøtter ikke UUID'er" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Skift til platformsspecifikke diskdrivere. Hvis der ikke er angivet nogen " +"moduler, bruges standardmodulerne (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Udfør KOMMANDOER på partition.\n" +"Kør \"parttool PARTITION help\" for at få en liste af tilgængelige " +"kommandoer." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Beklager, men der er ikke nogen parttool tilgængelig for %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "ukendt argument \"%s\"" + +# Så vidt jeg kan se er det to forskellige værdier, der angives på kommandolinjen, og derfor to ord +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITION KOMMANDOER" + +# Så vidt jeg kan se er det to forskellige værdier, der angives på kommandolinjen, og derfor to ord +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "BRUGER ADGANGSKODE" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Angiv brugeradgangskode (klartekst). Dette er usikkert og frarådes." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ugyldig PBKDF2-adgangskode" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "BRUGER PBKDF2-ADGANGSKODE" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Angiv adgangskode for bruger (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Vælg enhed efter forhandler og enheds-id'er." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[forhandler]:[enhed]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Vælg enhed efter dens position på bussen." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[plads][.funk]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "manglende \"%c\"-symbol" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSITION] [-d ENHED]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Vis rå dump af PCI-konfigurationsrummet." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Sæt en variabel til en returværdi." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Bestem driver." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Bestem type af partitionsafbildning." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Bestem type af filsystem." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Bestem UUID for filsystem." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Bestem etiket for filsystem." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "filsystemet \"%s\" understøtter ikke mærkater" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ENHED" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Hent enhedsinformation." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[MILJØVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Sæt variablen med brugerinddata." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Genstart computeren." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Gem matchet komponent NUMMER i VARNAVN." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMMER:]VARNAVN" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGUDTRYK STRENG" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Tjek om REGUDTRYK matcher STRENG." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAVN [VARIABEL] [FIF]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Søg i enheder efter fil. Hvis VARIABEL er angivet, vil variablen blive sat " +"til den først fundne enhed." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Søg i enheder efter etiket. Hvis VARIABEL er angivet, vil variablen blive " +"sat til den først fundne enhed." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Søg i enheder efter UUID. Hvis VARIABEL er angivet, vil variablen blive sat " +"til den først fundne enhed." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Søg efter enheder ud fra filnavn." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Søg efter enheder ud fra filsystemsetiket." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Søg efter enheder ud fra filsystems-UUID." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Sæt en variabel til den første enhed, der findes." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Undersøg ingen diskettedrev." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Prøv først enheden FIF. Hvis FIF slutter på komma, så prøv også " +"underpartitioner" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "FIF" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv først enheds-FIF, hvis der i øjeblikket køres med IEEE1275. Hvis FIF " +"slutter med komma, så prøv også underpartitioner" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv først enheds-FIF, hvis der i øjeblikket køres med BIOS. Hvis FIF " +"slutter med komma, så prøv også underpartitioner" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Prøv først enheden FIF, hvis der understøttes direkte hardwareadgang. Hvis " +"FIF slutter med komma, så prøv også underpartitioner" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv først enheds-FIF, hvis der i øjeblikket køres med EFI. Hvis FIF slutter " +"med komma, så prøv også underpartitioner" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv først enheds-FIF, hvis der i øjeblikket køres på ARC. Hvis FIF slutter " +"med komma, så prøv også underpartitioner" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint FIF [--hint FIF] ...] NAVN" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Søg efter enheder ud fra filnavn, filsystemsetiket eller filsystems-UUID. " +"Hvis --set er givet, vil den først fundne enhed blive sat til en variabel. " +"Hvis intet variabelnavn er givet, bruges \"root\"." + +# Sandsynligvis substantiv +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x for %x:%02x.%x er %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d ENHED] [-v VAR] REGISTER[=VÆRDI[:MASKE]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipulér PCI-enheder." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Ekstra udskrift ved nedtælling." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Tillad afbrydelse med ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ANTAL_SEKUNDER" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Vent et givet antal sekunder." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "rodkatalog for syslinux-disk [standard=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"nuværende katalog for syslinux [standard er inputfilens ophavskatalog]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "antag at input er en isolinux-konfigurationsfil." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "antag at input er en pxelinux-konfigurationsfil." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "antag at input er en syslinux-konfigurationsfil." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Kør syslinux-konfiguration i samme kontekst" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Kør syslinux-konfiguration i ny kontekst" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Kør syslinux-konfiguration i samme kontekst, og medtag kun menuindgange" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Kør syslinux-konfiguration i ny kontekst, og medtag kun menuindgange" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "ingen terminal angivet" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminalen \"%s\" ikke fundet" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktive inddataterminaler:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Tilgængelige inddataterminaler:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktive uddataterminaler:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Tilgængelige uddataterminaler:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Opskriv eller vælg en inputterminal." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Opskriv eller vælg en outputterminal." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "UDTRYK ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Evaluér et udtryk." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "UDTRYK" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Indlæs same fil på flere måder." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Angiv størrelse af hver læseoperation" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "ugyldig blokstørrelse" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Filstørrelse: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Forløbet tid: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Hastighed: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s STØRRELSE] FILNAVN" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Test fillæsehastighed." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "ingen kommando angivet" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Forløbet tid: %d.%03d sekunder \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "KOMMANDO [ARG]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Mål tiden, der bruges af KOMMANDO" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Skift til store bogstaver." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Skift til små bogstaver." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[TILVALG] [SÆT1] [SÆT2] [STRENG]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Erstat SÆT1-tegn med SÆT2-tegn i STRENG." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Gør intet, med succes." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Gør intet, fejlagtigt." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Test USB-understøttelse." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Spring signaturkontrol over i offentlig nøglefil." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "ugyldig signatur" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "offentlig nøgle %08x ikke fundet" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "modulet \"%s\" er ikke indlæst" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FIL SIGNATURFIL [OFFENTLIG_NØGLEFIL]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Verificér løs signatur." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] OFFENTLIG_NØGLEFIL" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Føj OFFENTLIG_NØGLEFIL til betroede nøgler." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Vis listen af betroede nøgler." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "OFFENTLIG_NØGLE_ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Fjern OFFENTLIG_NØGLE_ID fra betroede nøgler." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Kun tekst " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Direkte farve, maske: %d/%d/%d/%d, pos: %d/%d/%d/%d" + +# Det ville have været smart om de også havde skrevet hvordan ordet ville indgå i en sætning +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Palet " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Plan " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +# ? +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monokrom " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Ukendt videotilstand " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDID-tjeksum er ugyldig" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID-version: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Foretrukken tilstand: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Ingen foretrukken tilstand tilgængelig\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "ugyldig angivelse af videotilstand \"%s\"" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Liste af understøttede videotilstande:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Forklaring: maske/position=rød/grøn/blå/reserveret" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter \"%s\":\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Ingen tilgængelig info" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Kunne ikke klargøre videoadapteren" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[BxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Vis de tilgængelige videotilstande. Hvis der er givet en opløsning, vises " +"kun dertil svarende tilstande." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[BxH]" + +# WxH = width x height, metavariabel er oversat andetsteds +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Test videoundersystemet i tilstanden BxH." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Test videoundersystem." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[KAT]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Vis Xen-lager." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VARNAVN]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Konvertér 64-bit-UUID til format, der passer til XNU. Hvis -l er givet, så " +"behold det i små bogstaver jævnfør blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "kunne ikke læse sektor 0x%llx fra \"%s\"" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "kunne ikke skrive sektor 0x%llx til \"%s\"" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Montér efter UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Montér alle." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Montér alle diskenheder med \"boot\"-flaget." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "kan ikke åbne \"%s\": %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "kan ikke søge i \"%s\": %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "KILDE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Montér en kryptoenhed." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Kunne ikke finde fysisk diskenhed \"%s\". Visse moduler mangler måske fra " +"kerneaftrykket." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "fysisk diskenhed %s ikke fundet" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "intet medie i \"%s\"" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Kunne ikke indlæse sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Kunne ikke indlæse sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "kunne ikke læse ELI-metadata" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "forkert magisk tal eller version af ELI" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Forsøger at dekryptere hovednøgle..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Indtast adgangsfrase for %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Plads %d åbnet\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "forsøg på at læse eller skrive uden for disk \"%s\"" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "kan ikke skrive til CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Der er platformspecifikke diskdrivere i brug. Nægter at bruge " +"firmwarediskgrænseflade." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"din LDM-indlejringspartition er for lille; indlejring vil ikke være muligt" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"denne LDM har ingen indlejringspartition; indlejring vil ikke være muligt" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Fjern det angivne loopback-drev fra listen." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] ENHEDSNAVN FIL." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Opret et virtuelt drev fra en fil." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "relokering 0x%x er endnu ikke implementeret" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "ingen symboltabel" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "denne ELF-fil er ikke af den korrekte type" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Indlæs og klargør EFI-emulator." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Færdiggør indlæsning af EFI-emulator." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Afindlæs EFI-emulator." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "symbolet \"%s\" ikke fundet" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Indlæste skrifttyper:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FIL..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Angiv en eller flere skrifttypefiler der skal indlæses." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Vis de indlæste skrifttyper." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "indlejring af symlænker er for dyb" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "forsøg på at læse forbi filens slutpunkt" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "kunne ikke finde en nødvendig medlemsenhed fra et flerenhedsfilsystem" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "ikke et katalog" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "ikke en regulær fil" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"din core.img er usædvanligt stor. Den vil ikke passe ind i " +"indlejringsområdet" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "ugyldigt filnavn \"%s\"" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "verifikation af tjeksum mislykkedes" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "ingen dekrypteringsnøgle tilgængelig" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC-verifikation mislykkedes" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Antag at inddata er ubehandlede." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Antag at inddata er heks." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Antag at inddata er adgangsfrase." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Indtast ZFS-adgangskode: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FIL]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importér ZFS-omslagsnøgle gemt i FIL." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtuel enhed er fjernet" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Fejl på virtuel enhed" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtuel enhed er offline" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtuel enhed er degraderet" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtuel enhed er online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Forkert virtuel enhed: ingen type tilgængelig" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Virtuel bladknude-enhed (fil eller disk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Opstartssti: utilgængelig\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Opstartssti: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Sti: utilgængelig" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Sti: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Enheds-id: utilgængelig" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Enheds-id: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Denne VDEV er et spejl" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Denne VDEV er en RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Forkert VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV med %d underelementer\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV-element nummer %d er forkert\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV-element nummer %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Ukendt type af virtuel enhed: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Pool-tilstand: aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Pool-tilstand: eksporteret" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Pool-tilstand: ødelagt" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Pool-tilstand: reserveret som \"hot spare\"" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Pool-tilstand: ARC-enhed niveau 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Pool-tilstand: ikke klargjort" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Pool-tilstand: utilgængelig" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Pool-tilstand: potentielt aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Pool-navn: utilgængelig" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Pool-navn: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Pool-GUID: utilgængelig" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Pool-GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Kan ikke hente pool-tilstand" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Ukendt pool-tilstand" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Intet virtuelt enhedstræ tilgængeligt" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Udskriv ZFS-info om ENHED." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FILSYSTEM [VARIABEL]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Udskriv ZFS-BOOTFSOBJ eller gem det i VARIABEL" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Forbind nu venligst fjernfejlsøgeren." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Start GDB-stub på den givne port" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Bryd ind i GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Stop GDB-stub" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "for tidlig slutning af fil" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Oversætter strengen med de nuværende indstillinger." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Tryk på enter for at starte det valgte operativsystem, \"e\" for at redigere " +"kommandoerne inden opstart, eller \"c\" for at få en kommandolinje. ESC for " +"at vende tilbage til den forrige menu." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Tryk på enter for at starte det valgte operativsystem, \"e\" for at redigere " +"kommandoerne inden opstart, eller \"c\" for at få en kommandolinje." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: start op, \"e\": tilvalg, \"c\": kommandolinje" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Det fremhævede punkt køres automatisk om %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%d s tilbage." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d s" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB-opstartsmenu" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s-værdi er mindre end eller lig med %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT-parameter kræver en værdi" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT-parameter skal være positiv" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Ukendt ARGP_HELP_FMT-parameter" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Skrald i ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Obligatoriske eller valgfri argumenter til lange tilvalg er også " +"obligatoriske henholdsvis valgfri for tilsvarende korte tilvalg." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " eller: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [TILVALG...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Prøv \"%s --help\" eller \"%s --usage\" for at få yderligere information.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Rapportér fejl til %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Ukendt systemfejl" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "vis denne hjælpeliste" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "vis en kort brugsanvisning" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAVN" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "sæt programnavnet" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEK" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "hæng i SEK sekunder (standard er 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "vis programversion" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMFEJL) Ingen kendt version!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: For mange argumenter\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMFEJL) Tilvalget skulle have været genkendt!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: tilvalget \"%s\" er flertydigt; muligheder:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: tilvalget \"--%s\" tillader ikke noget argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: tilvalget \"%c%s\" tillader ikke noget argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: tilvalget \"--%s\" kræver et argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ukendt tilvalg \"--%s\"\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ukendt tilvalg \"%c%s\"\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ugyldigt tilvalg -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: tilvalg kræver et argument -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: tilvalget \"-W %s\" er flertydigt\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: tilvalget \"-W %s\" tillader ikke noget argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: tilvalget \"-W %s\" kræver et argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Succes" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Ingen træffere" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ugyldigt regulært udtryk" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ugyldigt sorteringstegn" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ugyldigt navn på tegnklasse" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Afsluttende omvendt skråstreg" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ugyldig tilbagereference" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Uparret [ eller [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Uparret ( eller \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Uparret \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ugyldigt indhold af \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ugyldig intervalafslutning" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Hukommelse opbrugt" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ugyldigt forudgående regulært udtryk" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Uventet slutning af regulært udtryk" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regulært udtryk er for stort" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Uparret ) eller \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "ukendt fejl i regulært udtryk" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Intet tidligere regulært udtryk" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hej verden" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Sig \"Hej verden\"." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "forsøg på at søge uden for filen" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "uunderstøttet gzip-format" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop-fil beskadiget" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz-fil beskadiget, eller uunderstøttede bloktilvalg" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "ugyldigt magisk tal for arkitekturafhængig ELF" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[MILJØVAR=VÆRDI]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Sæt en miljøvariabel." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "MILJØVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Fjern en miljøvariabel." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Vis enheder eller filer." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Indsæt et modul." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disk \"%s\" ikke fundet" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "forsøg på at læse eller skrive uden for partition" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "ugyldigt magisk tal for arkitekturuafhængig ELF" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "enhedstal overstiger grænsen" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "kan ikke skrive til \"%s\": %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"device.map-enhedsindgangen \"%s\" er ugyldig. Ignorerer den. Ret eller slet " +"venligst din device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"drevnavnet \"%s\" i device.map er forkert. Bruger %s i stedet. Brug venligst " +"formen [hfc]d[0-9]* (f.eks. \"hd0\" eller \"cd\")" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "kan ikke åbne \"%s\": %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "ENHEDSNAVN" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Sæt rodenhed." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "brug FIL som enhedskort [standard=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "brug FIL som memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "brug GRUB-filer i kataloget KAT [standard=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "udskriv uddybende meddelelser." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "vent til en fejlsøger tilsluttes" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Ukendt ekstra argument \"%s\"." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Fejl ved fortolkning af kommandolinjeargumenter\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Kør \"gdb %s %d\" og sæt ARGS.HOLD til nul.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: advarsel:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: fejl:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "filen \"%s\" er for stor" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "ukendt filsystem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Slukning mislykkedes" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Afslutning mislykkedes" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "overløb fundet" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Forkaster forkert indlejret partition (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Ukendt kommando \"%s\".\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Vis denne hjælp og afslut." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Vis brugsanvisning for denne kommando og afslut." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "mangler obligatorisk tilvalg til \"%s\"" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "argumentet \"%s\" kræver et heltal" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"der blev tildelt en værdi til argumentet \"%s\", men dette kræver ikke noget " +"argument" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Udskriv stakspor." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB ved endnu ikke hvordan denne maskine standses!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Standardserver er ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "ugyldig farvespecifikation \"%s\"" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Genstart mislykkedes" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LÆNGDE]" + +# hexdump skal nok forstås som imperativ +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Hexdump tilfældige data." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "enhedstræ skal være angivet (se kommandoen \"devicetree\")" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "ugyldigt zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "ugyldigt enhedstræ" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Indlæs Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Indlæs initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Indlæs DTB-fil." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"simpelt kerneaftryk understøttes ikke - genkompilér med CONFIG_(U)EFI_STUB " +"aktiveret" + +# ? +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "kunne ikke hente FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "du skal først indlæse Xen-Hypervisoren" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Indlæs en xen-hypervisor." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Indlæs et xen-modul." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[TILVALG]" + +# Denne relaterer vist til nedenstående strenge; man kan vist køre en opstartsindlæser for et andet ('legacy') system, der ligger på computeren +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Boot BIOS-baseret system." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Indlæs en anden opstartsindlæser." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Vis udskrift på alle konsoller." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Brug seriel konsol." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Spørg om et filnavn, der skal genstartes fra." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Brug cd-rom som root." + +# ??? +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Aktivér brugerkonfigurations-routing." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Gå ind i KDB ved opstart." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Brug GDBs fjernfejlfinder frem for DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Deaktivér al opstartsudskrift." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Vent på tastetryk efter hver udskrevet linje." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Brug indkompileret rodenhed." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Boot i single-tilstand." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Boot med uddybende meddelelser." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Stands kun, genstart ikke." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Ændr konfigurerede enheder." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comENHED[,HASTIGHED]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Deaktivér SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Deaktivér ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Vis ikke boot-diagnostikmeddelelser." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Start op med fejlsøgningsbeskeder." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Undertryk normal udskrift (advarsler vises stadig)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADR|comENHED][,HASTIGHED]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "navn" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "type" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adr" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "stør" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Booter i blindtilstand" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Indlæs FreeBSD-kerne." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Indlæs OpenBSD-kerne." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Indlæs NetBSD-kerne." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Indlæs FreeBSD-miljø." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Indlæs FreeBSD-kernemodul." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Indlæs NetBSD-kernemodul." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Indlæs NetBSD-kernemodul (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Indlæs FreeBSD-kernemodul (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Indlæs kOpenBSD-ramdisk." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Indlæs en anden coreboot-payload" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Den forældede parameter \"ask\" understøttes ikke længere." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s er forældet. Brug i stedet set gfxpayload=%s før linux-kommandoen.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s er forældet. VGA-tilstand %d genkendes ikke. Brug i stedet set " +"gfxpayload=BREDDExHØJDE[xDYBDE] før linux-kommandoen.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FIL" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "størrelsen af \"%s\" er for stor" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Indlæs kernel.sys fra FreeDOS." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Indlæs NTLDR eller BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Tilsidesæt gættet afbildning af Plan9-enheder." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBENHED=PLAN9ENHED" + +# er velsagtens to forskellige symboler i en kommandoskabelon +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNE ARGUMENTER" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Indlæs Plan9-kerne." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Indlæs et PXE-aftryk." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Indlæs Truecrypt-ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd allerede indlæst" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Indlæs modul." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Tryk på en tast for at starte xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Indlæs dump af \"device-properties\"." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Kunne ikke finde FPSWA-driver" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "FPSWA-protokol kunne ikke finde grænsefladen" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Ingen FPSWA fundet" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA-revision: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FIL [ARG...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Vis FPSWA-version." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "ADVARSEL: ingen konsol vil være tilgængelig for OS" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Indlæs en multiboot 2-kerne." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Indlæs et multiboot 2-modul." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Indlæs en multiboot-kerne." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Indlæs et multiboot-modul." + +# Se udviklerkommentaren nedenfor for "stretch|normal" +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Baggrundsbilledtilstand." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(=stræk)|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Indlæs XNU-aftryk." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Indlæs 64-bit XNU-aftryk." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Indlæs XNU-udvidelsespakke." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Indlæs XNU-udvidelse." + +# ? +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "KATALOG [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Indlæs XNU-udvidelseskatalog." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Indlæs XNU-ramdisk. Den vil kunne ses som md0 i OS." + +# ??? splash image lige pludselig? Det er vel så et billede og ikke et aftryk. Så vidt jeg kan se i koden er dette eneste forekomst af dén slags. -Ask +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Indlæs et startbillede for XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Indlæs et aftryk af XNU i dvaletilstand." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADR1,MASKE1[,ADR2,MASKE2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Erklær hukommelsesregioner som fejlbehæftede (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "FRA[K|M|G] TIL[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Fjern hukommelsesregioner i det angivne interval." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "fire argumenter forventet" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "ukendt netværksgrænseflade \"%s\"" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "ingen DHCP-info fundet" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "ingen DHCP-tilvalg fundet" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "intet DHCP-tilvalg %d fundet" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "ukendt formatangivelse \"%s\" for DHCP-tilvalg" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "intet netværkskort fundet" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "kunne ikke autokonfigurere %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KORT]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "udfør en bootp-autokonfiguration" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR GRÆNSEFLADE NUMMER BESKRIVELSE" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "hent DHCP-tilvalg og gem det i VAR. Hvis VAR er -, så udskriv værdien." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "ingen DNS-servere konfigureret" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "domænenavnskomponent er for lang" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "ingen DNS-fortegnelse fundet" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "intet DNS-svar modtaget" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "kun ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "kun ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "foretræk ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "foretræk ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "ugyldigt argument" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRESSE DNSSERVER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Udfør et DNS-opslag" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Tilføj en DNS-server" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Fjern en DNS-server" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Vis DNS-servere" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "kunne ikke sende netværkspakke" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "fortolk (interpret) understøttes ikke" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "alloc-mem mislykkedes" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "free-mem mislykkedes" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "uunderstøttet HTTP-svar" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "uunderstøttet HTTP-fejl %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "tidsudløb ved åbning af \"%s\"" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "tidsudløb: kunne ikke slå hardwareadresse op" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "adresse %s kan ikke slås op" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "ukendt netværksadresse \"%s\"" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "destination kan ikke nås" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "cyklisk rute fundet" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "adresse ikke fundet" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "kan ikke slette denne adresse" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Uunderstøttet hw-adressetype %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Uunderstøttet adressetype %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "tre argumenter forventet" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "kort ikke fundet" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "midlertidig" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Ukendt adressetype %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "ingen server angivet" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "tidsudløb ved læsning af \"%s\"" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KORTNAVN KORT ADRESSE [HWADRESSE]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Tilføj en netværksadresse." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KORT [HWADRESSE]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Udfør en IPV6-autokonfiguration" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KORTNAVN" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Slet en netværksadresse." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KORTNAVN NET [GRÆNSEFLADE| gw ADGANGSPUNKT]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Tilføj en netværksrute." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Slet en netværksrute." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "vis netværksruter" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "vis netværkskort" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "vis netværksadresser" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "forbindelse afvist" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "tidsudløb for forbindelse" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Indtast brugernavn: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[BRUGERLISTE]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Tjek om bruger findes i BRUGERLISTE." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Mulige kommandoer er:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Mulige enheder er:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Mulige filer er:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Mulige partitioner er:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Mulige argumenter er:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Mulige ting er:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Advarsel: syntaksfejl (manglende skråstreg) i \"%s\"\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Advarsel: ugyldig forgrundsfarve \"%s\"\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Advarsel: ugyldig baggrundsfarve \"%s\"\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "MILJØVAR [MILJØVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Eksportér variable." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Søndag" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Mandag" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Tirsdag" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Onsdag" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Torsdag" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Fredag" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Lørdag" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "modul er ikke indlæst" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB version %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC på ethvert tidspunkt afslutter." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimal BASH-agtig linjeredigering understøttes. For det første ord vil TAB " +"vise de mulige kommandofuldførelser. Alle andre steder vil TAB vise de " +"mulige fuldførelser af enheds- eller filnavne. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Ryd skærmen." + +# scootergrisen: måske "normaltilstand" eller "normal-tilstand" +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Gå i normaltilstand." + +# scootergrisen: måske "normaltilstand" eller "normal-tilstand" +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Afslut normaltilstand." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Tryk på en tast for at fortsætte..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Booter \"%s\"" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Falder tilbage på \"%s\"" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Kunne hverken boote standard- eller reservepunktet.\n" + +# ??? +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Booter en kommandoliste" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Der understøttes minimal Emacs-agtig skærmredigering. TAB viser " +"fuldførelser. Tryk på Ctrl-x eller F10 for at begynde opstart, Ctrl-c eller " +"F2 for at få en kommandolinje, eller ESC for at forkaste ændringerne og " +"vende tilbage til GRUB-menuen." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Brug tasterne %C og %C til at fremhæve et punkt." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partition %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Enhed %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Filsystem kan ikke tilgås" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Filsystemtype %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etiket \"%s\"" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Sidste modifikationstid %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Intet kendt filsystem fundet" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partitionsstart ved %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sektorstørrelse %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Samlet størrelse er ukendt" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Samlet størrelse %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MERE--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "kan ikke åbne konfigurationsfilen \"%s\": %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "ingen komprimering er tilgængelige til din platform" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "ingen IEEE1275-rutiner er tilgængelige til din platform" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "ingen EFI-rutiner er tilgængelige til din platform" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "ingen SGI-rutiner er tilgængelige til din platform" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "ingen tilfældig talgenerator er tilgængelig til dit OS" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Kunne ikke oprette \"device-mapper\"-træ" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "kan ikke montere krypteret diskenhed \"%s\": %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "kunne ikke åbne geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "kunne ikke finde geli-forbruger" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "kunne ikke hente geli-UUID" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "kunne ikke finde \"part\"-klasse for geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "enhedsstørrelse uden justering" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "forsøger at læse kerneaftrykket \"%s\" fra GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "forsøger at læse kerneaftrykket \"%s\" fra GRUB igen" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "kan ikke læse \"%s\" korrekt" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "kunne ikke læse kerneaftrykkets sektorer" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "kan ikke hente translatørkommandolinje for stien \"%s\": %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "translatørkommandolinje er tom for stien \"%s\"" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"translatøren \"%s\" for stien \"%s\" har adskillige ord som ikke er tilvalg, " +"i hvert fald \"%s\" og \"%s\"" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"translatøren \"%s\" for stien \"%s\" har kun tilvalg, kan ikke finde " +"enhedsdel" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Lagerinformation for \"%s\" inkluderer ikke type" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "\"%s\" er ikke en lokal disk" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Lageroplysninger for \"%s\" angiver hverken en simpel partition eller en " +"simpel disk" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "kan ikke hente bloklister: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "blokstørrelse kan ikke divideres med 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "ugyldig blokstørrelse på nul" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "kan ikke hente bloklister" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION-fejl: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "uunderstøttet RAID-version: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO-fejl: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO-fejl: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Kan ikke åbne strøm fra %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "ukendt type af RAID-enhed \"%s\"" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"\"obppath\" ikke fundet i overkataloger af \"%s\"; ingen IEEE1275-" +"navnedetektering" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "kunne ikke finde kanonisk sti for \"%s\"" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "ukendt enhedstype %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Brug: %s ENHED\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Kan ikke udføre fork: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Kan ikke oprette datakanal: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "kan ikke gendanne oprindeligt katalog" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "kan ikke køre stat på \"%s\": %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "kan ikke oprette midlertidig fil: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "kan ikke oprette midlertidigt katalog: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"kunne ikke finde IEEE1275-enheds-træ-sti for %s.\n" +"Du vil være nødt til at angive variablen \"boot-device\" manuelt" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: ikke fundet" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"\"nvsetenv\" mislykkedes.\n" +"Det vil være nødvendigt at angive variablen \"boot-device\" manuelt. Skriv " +"følgende i IEEE1275-prompten:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" +"Det vil være nødvendigt at angive \"SystemPartition\" og \"OSLoader\" " +"manuelt." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "ingen \"/\" i kanonisk filnavn" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() mislykkedes" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "kunne ikke hente tilfældige data" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Utilstrækkelige privilegier til at tilgå firmware; antager BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "ingen EFI-rutiner er tilgængelige ved kørsel i BIOS-tilstand" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "uventet EFI-fejl" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Kunne ikke finde en fri BootNNNN-plads" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"denne GPT-partitionsetiket har ingen BIOS-opstartspartition; indlejring vil " +"ikke være muligt" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"din BIOS-opstartspatition er for lille; indlejring vil ikke være muligt" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sektor %llu er allerede i brug af raid-controller \"%s\"; undgår den. Bed " +"venligst producenten om ikke at gemme data i MBR-pladsen" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sektoren %llu er allerede i brug af programmet \"%s\"; undgår den. Dette " +"program kan forårsage problemer med opstart med mere i fremtiden. Bed " +"venligst programmets forfattere om ikke at lagre data i opstartssporet" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"et andet program bruger indlejringsområdet, og der er ikke plads til core." +"img. Sådanne programmer forsøger ofte at skjule data i hemmelighed. Vi " +"anbefaler at du undersøger dette" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"denne msdos-agtige partitionsetiket har intet post-MBR-mellerum; indlejring " +"vil ikke være muligt" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"dit indlejringsområde er usædvanligt lille. Der er ikke plads til core.img." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Gør partition aktiv" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "ikke en primær partition" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partition %d er nu aktiv. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Fjernede aktiv-flaget på %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Ændr partitionstype" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Angiv \"skjult\"-flag i partitionstype" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "partitionstypen 0x%x er ugyldig" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Sætter partitionstype til 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "kan ikke bryde ud af 0 løkker" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "ikke i funktionskrop" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "ugyldigt variabelnavn \"%s\"" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "uventet filafslutning" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Afslut løkker" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Fortsæt løkker" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Skift positionsparametre." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VÆRDI]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Angiv positionsparametre." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Returnér fra en funktion." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FIL" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Indlæs baggrundsbillede til aktiv terminal." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "FARVE" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Angiv baggrundsfarve for aktiv terminal." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Vis CBMEM-konsolindhold." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Angiv den serielle enhed." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Angiv adressen for den serielle port." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Angiv hastigheden for den serielle port." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Angiv word-længden for den serielle port." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Angiv pariteten for den serielle port." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Angiv stop-bit for den serielle port." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Sæt basisfrekvensen." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Slå RTS/CTS til/fra." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "serielport \"%s\" ikke fundet" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "uunderstøttet flowkontrol for serielport" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[TILVALG...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Indstil serielport." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "ukendt terminfo-type \"%s\"" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "visuelt ordnet UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Ukendt kodning" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Nuværende terminfo-typer:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminal bruger kun ASCII [standard]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal bruger logisk ordnet UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminal bruger visuelt ordnet UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminal har angivet geometri." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "BREDDExHØJDE." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "ugyldig angivelse af terminalstørrelse" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "terminalen %s kan ikke findes, eller håndteres ikke af terminfo" + +# WxH = bredde x højde +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g BxH] TERM [TYPE]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Sæt terminfo-type for TERM til TYPE.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Udskriv og kør blokargument." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "bitmap-filen \"%s\" er ikke i et understøttet format" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE-info: version: %d.%d, OEM-softwarerevision: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " samlet hukommelse: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "ingen passende videotilstand fundet" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "adgang nægtet" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULER" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "forudindlæs angivne moduler MODULER" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "installér kun MODULER og deres afhængigheder [standard=alle]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEMAER" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "installér TEMAER [standard=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "SKRIFTTYPER" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "installér SKRIFTTYPER [standard=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "REGIONER" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "installér kun REGIONER [standard=alle]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "komprimér GRUB-filer [valgfri]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "vælg komprimeringen, der skal bruges til kerneaftryk" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "brug billeder og moduler under KAT [standard=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "brug oversættelser under KAT [standard=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "brug tema under KAT [standard=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "indlejr FIL som offentlig nøgle for signaturkontrol" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "kan ikke omdøbe filen %s til %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "disken findes ikke, så bruger i stedet partitionsenheden %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Kommandoer:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Opret en tom miljøblokfil." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Vis de nuværende variable." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAVN=VÆRDI ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Angiv variable." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAVN ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Slet variable." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Tilvalg:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Du skal angive mindst én kommando.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FILNAVN KOMMANDO" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Værktøj til at redigere miljøblokken." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Hvis FILNAVN er \"-\", bruges standardværdien %s.\n" +"\n" +"Der er ingen \"slet\"-kommando; hvis du vil slette hele miljøet, så\n" +"brug \"rm %s\"." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "ugyldig miljøblok" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "ugyldig parameter %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "miljøblok er for lille" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "disklæsning mislykkedes ved afsæt %lld, længde %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "ugyldig overspringsværdi %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "læsefejl ved afsæt %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "kan ikke åbne OS-filen \"%s\": %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "kan ikke skrive til stdout: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "fejl i sammenligning ved afsæt %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "OS-fejl ved åbning af fil %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "\"loopback\"-kommando slår fejl: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "\"cryptomount\"-kommando slår fejl: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "kunne ikke hente UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls STI" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Vis filer i STI." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FIL LOKAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopiér FIL til lokal fil LOKAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FIL" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Kopiér FIL til standard-ud." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FIL LOKAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Samenlign FIL med lokal fil LOKAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FIL" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Vis indholdet af FIL i heks." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FIL" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Beregn crc32-tjeksummen for FIL." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FIL" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Vis blokliste for FIL." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid ENHED" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Beregn XNU UUID for enheden." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Spring N byte over fra udskriftsfil." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Håndtér N byte i udskriftsfil." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Angiv antallet af inddatafiler." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Angiv miljøvariabel til fejlsøgning." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Montér kryptoenheder." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FIL|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Indlæs zfs-kryptonøgle." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Udpak komprimerede data." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Ugyldigt diskantal.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Diskantal skal stå foran diskliste.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Ingen kommando angivet.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Ikke nok parametre til kommando.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Ugyldig kommando %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "AFTRYKSSTI KOMMANDOER" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Fejlsøgningsværktøj til filsystemdriver." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "angiv inddatafilnavnet for 32-bit-delen." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "angiv inddatafilnavnet for 64-bit-delen." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "angiv uddatafilnavnet. Standard er STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[TILVALG]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Lim 32-bit- og 64-bit-binærfil sammen til en universal Apple-binærfil." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Mangler inputfil\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "kan ikke kopiere \"%s\" til \"%s\": %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "kan ikke komprimere \"%s\" til \"%s\"" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "kan ikke åbne kataloget \"%s\": %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "kan ikke slette \"%s\": %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage er kompileret uden understøttelse af XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Ukendt komprimeringsformat %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Ukendt komprimering \"%s\"" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "ukendt målformat %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "kan ikke finde regionaldata \"%s\"" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s findes ikke. Angiv venligst --target eller --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "ugyldig modinfo-fil \"%s\"" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Ukendt platform \"%s-%s\"" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Mere end én installationsenhed?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "installér GRUB-aftryk under kataloget KAT/%s frem for kataloget %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "MÅL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "installér GRUB til MÅL-platform [standard=%s]; mulige mål: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"gør at drevet kan bootes som diskettedrev (standard for fdX-enheder). Kan " +"ødelægge opstarten med visse BIOS'er." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "slet enhedsafbildning hvis den allerede findes" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "installér selvom der opdages problemer" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "brug identifikatorfil selv hvis UUID er tilgængelig" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"diskmodul der skal bruges (biosdisk eller platformsspecifik). Dette tilvalg " +"er kun tilgængeligt på BIOS-mål." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"opdatér ikke NVRAM-variablerne \"boot-device\"/\"Boot*\". Dette tilvalg er " +"kun tilgængeligt på EFI- og IEEE1275-mål." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "søg ikke efter filsystemer i ENHED" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "installér ikke bootsektor" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Anvend ikke nogen reed-solomon-koder ved indlejring af core.img. Dette " +"tilvalg er kun tilgængeligt på x86-BIOS-mål." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"installationsenheden er flytbar. Dette tilvalg er kun tilgængeligt på EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "Id" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"id for opstartsindlæseren. Dette tilvalg er kun tilgængeligt på EFI og Mac." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "brug KAT som rod på EFI-systempartitionen." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "brug KAT til PPC MAC-installation." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "brug FIL som skrifttype for etiket" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "brug FARVE til etiket" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "brug FARVE til etiketbaggrund" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "brug STRENG som produktversion" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[TILVALG] [INSTALLATIONSENHED]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Installér GRUB på dit drev." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALLATIONSENHED skal være filnavnet på en systemenhed.\n" +"%s kopierer GRUB-aftryk ind i %s. På visse platforme installeres GRUB også " +"i bootsektoren." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "drevet %s er defineret flere gange i enhedsafbildningen %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Kan ikke bestemme din platform. Brug --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installerer til %s-platformen.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "installationsenhed er ikke angivet" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "kan ikke finde EFI-katalog" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "kan ikke finde en enhed for %s (er /dev monteret?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "kan ikke finde et GRUB-drev til %s. Kontrollér din device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s ligner ikke en EFI-partition" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Du har fundet en programfejl" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "filsystemet på %s er hverken HFS eller HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"forsøg at installere på krypteret disk uden at cryptodisk er slået til. " +"Angiv \"%s\" i filen \"%s\"" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Kan ikke oprette fil: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "ingen tilgængelige fif til din platform. Forvent nedsat ydelse" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "KØRER IKKE: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "den valgte partition er ikke en PReP-partition" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "kunne ikke kopiere Grub til PReP-partition" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"PReP-partitionen er ikke tom. Hvis du er sikker på at du vil bruge den, så " +"kør dd for at rydde den: \"%s\"" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Id for EFI-opstartsindlæser er ikke angivet." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "ADVARSEL: ingen platformsspecifik installation blev gennemført" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installation fuldført. Ingen fejl rapporteret." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bless til x86-baserede mac-computere" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bless til ppc-baserede mac-computere" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Ingen sti eller enhed angivet.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc STI|--x86 FIL" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Mac-bless på HFS eller HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Brug: %s [INDFIL [UDFIL]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype-fejl %d ved indlæsning af glyf 0x%x for U+0x%x%s" + +# "eksisterer" vist som fremmedord på dansk men egt. ikke i RO +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (medial)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (længst til venstre)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (længst til højre)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Erstatning uden for interval (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Opslag uden for interval: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Erstatningstype understøttes ikke: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Erstatningsspecifikation understøttes ikke: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Dækningsspecifikation understøttes ikke: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "ADVARSEL: uunderstøttede parametre til skrifttypefunktioner: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "gem uddata i FIL [påkrævet]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "vælg skrifttypeindeks" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "FRA-TIL[,FRA-TIL]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "angiv skrifttypeinterval" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "angiv skriftfamilienavn" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "STØRRELSE" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "angiv skriftstørrelse" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "angiv underlængde for skrifttype" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "angiv overlængde for skrifttype" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "konvertér til fed skrift" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "tving autohint" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "deaktivér hinting" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignorér bitmap-dele ved indlæsning" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ugyldigt skrifttypeinterval" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[TILVALG] SKRIFTTYPEFILER" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Konvertér almindelige skrifttypefilformater til PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "udfil skal være angivet" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType fejler" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "kan ikke åbne filen %s, indeks %d: fejl %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "kan ikke sætte skriftstørrelse til %dx%d: Freetype-fejl %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "angiv præfiks-katalog" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"indlejr FIL som memdisk-aftryk\n" +"Medfører \"-p (memdisk)/boot/grub\" og tilsidesætter ethvert præfiks som " +"tidligere blev givet, men præfikset selv kan tilsidesættes af senere tilvalg" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "indlejr FIL som en tidlig konfiguration" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "tilføj NOTE-segment for CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "udskriv et genereret aftryk til FIL [standard=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "generér et aftryk i FORMAT" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "tilgængelige formater:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "ukendt målformat %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[TILVALG]... [MODULER]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Opret et opstartsaftryk af GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Målformatet er ikke angivet (brug tilvalget -O)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Præfiks ikke angivet (brug tilvalget -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"\"%s\" er forkert kompileret: startadresse er 0x%llx i stedet for 0x%llx: " +"fejl i ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "angiv inddatafilnavnet. Standard er STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Ukendt tastatur-skan-identifikation %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Ukendt tastatur-skan-kode 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "FEJL: intet gyldigt tastaturlayout fundet. Tjek inddata.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Generér GRUB-tastaturlayout fra et Linux-konsol-tastaturlayout." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "rodkatalog for TFTP-server" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relativt underkatalog på netværksserver" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Forbereder GRUB-netværksbootaftryk i netkatalog/underkatalog idet netkatalog " +"antages at være TFTP-rod." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "platform %s ikke understøttet" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Netboot-katalog for %s oprettet. Konfigurér din DHCP-server, så den peger på " +"%s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Antal PBKDF2-iterationer" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Længde af genereret hash" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Længde af saltnummer" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Generér PBKDF2-adgangskodehash." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "fejl ved læsning af adgangskode" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Indtast adgangskode igen: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "adgangskoder er ikke ens" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "kunne ikke hente tilfældige data til saltnummer" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "kryptografisk fejl nummer %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDF2-hash af din adgangskode er %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Ingen sti er angivet.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "STI" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Lav et systemfilnavn til et GRUB-filnavn." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "gem ROM-aftryk i KAT [valgfri]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "brug FIL som xorriso [valgfri]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "brug STRENG som produktnavn" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"aktivér sparc-boot. Deaktiverer HFS+, APM og ARCS samt boot som diskaftryk " +"for i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"så ARCS-boot til (big-endian mips-maskiner, oftest SGI). Deaktiverer HFS+, " +"APM og sparc64 samt boot som diskaftryk for i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "Opret GRUB-opstartsaftryk til cd-rom, disk, USB-nøgle eller diskette." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Genererer et cd-/USB-/disketteopstartsaftryk. Argumenter som ikke er " +"tilvalg til dette program videregives til xorriso, og angiver kildefiler, " +"kildekataloger eller tilvalg til mkisofs vist i udskriften fra \"%s\"." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Tilvalget -- skifter til systemspecifik xorriso-kommandotilstand." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Send forespørgsler om xorriso til ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[TILVALG] KILDE..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "aktiverer understøttelse af %s ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Din xorriso understøtter ikke \"--grub2-boot-info\". Nogle funktioner er " +"deaktiveret. Brug venligst xorriso 1.2.9 eller nyere." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Din xorriso understøtter ikke \"--grub2-boot-info\". Dit kerneaftryk er for " +"stort. Boot som disk er slået fra. Brug venligst xorriso 1.2.9 eller nyere." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Opret et selvstændigt aftryk (som indeholder alle moduler) i det valgte " +"format" + +# ? +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"\"Graft point\"-syntaks (f.eks. /boot/grub/grub.cfg=./grub.cfg) godtages" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "AFTRYK1 [AFTRYK2 ...] MONTERINGSPUNKT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "kræver et aftryk samt monteringspunkt" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "det givne argument er en systemenhed, ikke en sti" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "adskil elementer i udskrift med NUL-ASCII-tegn" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[standard=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "udskriv MÅL" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "tilgængelige mål:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[TILVALG]... [STI|ENHED]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Forespørg om enhedsoplysninger for en given sti (eller enhed, hvis tilvalget " +"-d er givet)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "læs tekst fra FIL." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "brug FARVE til tekst" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "brug FARVE til baggrund" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "sæt etiket som skal oprettes" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "brug FIL som skrifttype (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Opret .disk_label til Apple." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Mangler argumenter\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[STI]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Tjekker om der er syntaksfejl i GRUB-scriptkonfigurationsfil." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntaksfejl på linje %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Scriptet \"%s\" indeholder ingen kommandoer og vil intet gøre\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "brug FIL som opstartsaftryk [standard=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "brug FIL som kerneaftryk [standard=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Ingen enhed angivet.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Opsæt aftryk til at starte fra ENHED.\n" +"\n" +"Du bør normalt ikke køre dette program direkte. Brug i stedet grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "ENHED skal være en OS-enhed (f.eks. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Ugyldig enhed \"%s\".\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "rodkataloget, som det vil ses ved kørsel [standard=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"syslinux' nuværende katalog, som det ses ved kørsel [standard er inputfilens " +"ophavskatalog]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "skriv til FIL [standard=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Transformér syslinux-konfiguration til GRUB-konfiguration." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "kan ikke komprimere kerneaftryk" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "ukendt komprimering %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Dekomprimeringsinstans er for stor" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "kerneaftryk er for stort (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "kerneaftryk er for stort (0x%x > 0x%x)" + +# bemærk: omkringstående linjer har småt begyndelsesbogstav +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "størrelsen af diskboot.img skal være %u byte" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img svarer ikke til den acceptable kendte version. Fortsæt på eget " +"ansvar" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "firmwareaftryk er for stort" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ugyldigt linjeformat: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "første sektor af kernefilen er ikke sektorjusteret" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "ikke-sektorjusterede data fundet i kernefilen" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "sektorerne i kernefilen er for fragmenterede" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "størrelsen af \"%s\" er ikke %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "størrelsen af \"%s\" er for lille" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Forsøger at installere GRUB til en disk med flere partitionsetiketter, eller " +"både partitionsetiket og filsystem. Dette understøttes endnu ikke." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"kan ikke identificere noget filsystem i %s; sikkerhedstjek kan ikke udføres" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s synes at indeholde et %s-filsystem, for hvilket det ikke vides om der er " +"reserveret plads til DOS-agtig opstart. Installation af GRUB der vil måske " +"resultere i ØDELÆGGELSE AF FILSYSTEMET, hvis værdifulde data overskrives af " +"grub-setup (--skip-fs-probe deaktiverer denne kontrol - bruges på eget " +"ansvar)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s synes at indeholde et %s-partitionskort, hvilket vides ikke at reservere " +"plads til DOS-agtig opstart. Installation af GRUB dér kan resulterer i " +"DESTRUKTION AF FILSYSTEMET, hvis værdifulde data overskrives af grub-setup " +"(--skip-fs-probe deaktiverer dette tjek. Brug på eget ansvar)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s synes at indeholde et %s-partitionskort samt LDM, hvilket ikke vides at " +"være en sikker kombination. Installation af GRUB dér kan resultere i " +"DESTRUKTION AF FILSYSTEMET, hvis værdifulde data overskrives af grub-setup " +"(--skip-fs-probe deaktiverer dette tjek. Brug på eget ansvar)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Forsøger at installere GRUB til en partitionsløs disk eller en partition. " +"Dette er en DÅRLIG idé." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Forsøger at installere GRUB til en disk med flere partitionsetiketter. " +"Dette understøttes endnu ikke." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partitionsstilen \"%s\" understøtter ikke indlejring" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Filsystemet \"%s\" understøtter ikke indlejring" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Dit indlejringsområde er usædvanligt lille. Der er ikke plads til core.img." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "ingen terminator i kerneaftrykket" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img-version stemmer ikke" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"indlejring er ikke muligt, men dette kræves til RAID- og LVM-installationer" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "kan ikke bestemme filsystemet på %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "filsystemet \"%s\" understøtter ikke bloklister" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"indlejring er ikke muligt, men dette kræves til installation på tværs af " +"diske" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Indlejring er ikke muligt. GRUB kan kun installeres med denne opsætning ved " +"brug af bloklister. Dog er bloklister UPÅLIDELIGE, og deres brug frarådes." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "vil ikke fortsætte med bloklister" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "bloklister er ugyldige" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "bloklister er ufuldstændige" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Brug: %s -o UDDATA CKBMAP_ARGUMENTER...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Opret en GRUB-tastaturlayoutfil." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "vis denne hjælp og afslut" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "vis versionsoplysninger og afslut" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s genererer et tastaturlayout til GRUB ved brug af ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Rapportér fejl til ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: tilvalg kræver et argument -- \"%s\"\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Brug: %s [TILVALG]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Generér en grub-konfigurationsfil" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "udskriv genereret konfigurationsfil til FIL [standard=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Ukendt tilvalg \"%s\"\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Du skal køre dette som root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Ikke fundet.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Genererer en grub-konfigurationsfil ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Der blev fundet syntaksfejl i den genererede GRUB-\n" +"konfigurationsfil. Sikr dig at der ikke er nogen fejl\n" +"i filerne /etc/default/grub eller /etc/grub.d/*, eller\n" +"indsend venligst en fejlrapport med filen %s vedhæftet." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "færdig" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Advarsel:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Brug: %s [TILVALG] MENUINDGANG\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "Angiv standardmenuindgangen i GRUB, kun for næste opstart." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "forvent GRUB-aftryk under kataloget KAT/%s frem for kataloget %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENUINDGANG er et tal, titlen på et menupunkt eller identifikator for et " +"menupunkt. Bemærk venligst\n" +"at menupunkter i undermenuer eller under-undermenuer kræver at der angives " +"undermenukomponenter,\n" +"og dernæst menupunktskomponent. Titlerne skal adskilles med større end-tegn " +"(>) uden ekstra mellemrum.\n" +"Afhængigt af din skal, skal visse tegn inklusive > måske have " +"undvigesekvens. Yderligere oplysninger\n" +"om dette kan findes i GRUB-manualen i afsnittet om \"default\"-kommandoen." + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Mere end én menuindgang?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Menuindgang ikke angivet." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Sæt standardmenuindgangen for opstart i GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Dette kræver at GRUB_DEFAULT=saved angives i %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"MENUINDGANG er et tal, titlen på et menupunkt eller identifikator for et " +"menupunkt." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Bad om seriel terminal, men GRUB_SERIAL_COMMAND er ikke angivet. Der vil " +"blive brugt standardparametre." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Fandt tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Fandt baggrund: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Uunderstøttet billedformat" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Angivelse af GRUB_TIMEOUT til en værdi som ikke er nul, når " +"GRUB_HIDDEN_TIMEOUT er angivet, understøttes ikke længere." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Fandt GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Fandt Hurd-modul: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Noget Hurd-halløj fundet, men ikke nok til at starte op." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, med Hurd %s (genoprettelsestilstand)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, med Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Brug venligst ikke den gamle titel \"%s\" til GRUB_DEFAULT; brug \"%s\" (for " +"versioner før 2.00) eller \"%s\" (for 2.00 eller nyere)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Indlæser GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Indlæser Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Avancerede indstillinger for %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Indlæser Illumos-kerne ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, med kFreeBSD %s (genoprettelsestilstand)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, med kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Indlæser FreeBSD-kerne %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Fandt FreeBSD-kerne: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Fandt kernemodulkatalog: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, med Linux %s (genoprettelsestilstand)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, med Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Indlæser Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Indlæser start-ramdisk ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Fandt linux-aftryk: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Fandt initrd-aftryk: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, med kerne %s (via %s, genoprettelsestilstand)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, med kerne %s (via %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Fandt NetBSD-kerne: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (indlæser)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (indlæser)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Fandt %s på %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(på %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, med Xen %s og Linux %s (genoprettelsestilstand)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, med Xen %s og Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, med Xen hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Indlæser Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hypervisor, version %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Avancerede indstillinger for %s (med Xen hypervisor)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Fandt %s på %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s understøttes endnu ikke af grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Erstatningsflag understøttes ikke: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Ukendt gsub-funktion for skrifttype 0x%x (%s)\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Adresseinterval ikke tilknyttet RAM" + +#~ msgid "Packed pixel " +#~ msgstr "Paletfarve " + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign er ikke understøttet på dit system" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Hvis FILNAVN er \"-\", vil standardværdien %s blive brugt." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "gem kun ASCII-bitmapfilerne" + +#~ msgid "create width summary file" +#~ msgstr "opret breddeinformationsfil" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Tilvalget --ascii-bitmaps accepterer ikke intervaller (bruger altid " +#~ "ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "ADVARSEL: din tilfældige talgenerator vides ikke at være sikker\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "udskriv filsystemmodul, GRUB-drev, systemenhed, " +#~ "partitionsafbildningsmodul, abstraktionsmodul eller UUID for " +#~ "kryptografisk beholder [standard=fs]" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "kunne ikke læse første sektor af kerneaftrykket" + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "brug GRUB-aftryk fra KAT. Tilsidesætter mål" + +#~ msgid "use FILE as grub-mkimage" +#~ msgstr "brug FIL som grub-mkimage" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "brug FIL som grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "brug FIL som grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "INSTALLATIONSENHED skal være systemenhedsfilnavn." + +#~ msgid "" +#~ "%s copies GRUB images into %s, and uses grub-setup\n" +#~ "to install grub into the boot sector.\\n" +#~ msgstr "" +#~ "%s kopierer GRUB-aftryk ind i %s, og bruger grub-setup\n" +#~ "til at installere grub i første opstartssektor.\\n" + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Stien \"%s\" er ikke læselig af GRUB ved opstart. Installation er umulig. " +#~ "Afbryder.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Autodetektering af et filsystem på %s mislykkedes.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Prøv med --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Hvis problemet varer ved, så rapportér venligst dette sammen med " +#~ "udskriften af %s til <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "\"%s\" fejlede.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "Kan ikke finde GRUB-drev for %s; kan ikke oprette indgang til EFI-" +#~ "opstartshåndtering.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Genererer grub.cfg ..." + +#~ msgid "" +#~ "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgstr "" +#~ "%s kopierer GRUB-aftryk ind i netkatalog/undermappe/mål-cpu-platform\\n" diff --git a/po/de.gmo b/po/de.gmo new file mode 100644 index 0000000000000000000000000000000000000000..d8dbb2acbf5db03492dde0cbaaabd56c8ec453b5 GIT binary patch literal 129700 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 literal 0 HcmV?d00001 diff --git a/po/de.po b/po/de.po new file mode 100644 index 000000000..e2c453dc1 --- /dev/null +++ b/po/de.po @@ -0,0 +1,7814 @@ +# German translation for grub. +# Copyright (C) 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Mario Blättermann , 2010-2013, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-04 14:00+0100\n" +"Last-Translator: Mario Blättermann \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.11\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "Geschwindigkeit des seriellen Ports wird nicht unterstützt" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "Parität des seriellen Ports wird nicht unterstützt" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "Anzahl der Stop-Bits des seriellen Ports wird nicht unterstützt" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "Wortlänge des seriellen Ports wird nicht unterstützt" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Keine Host-Tabellen spezifiziert durch kommagetrennte Liste laden." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Nur Tabellen spezifiziert durch kommagetrennte Liste laden." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Version-1-Tabellen zum Betriebssystem exportieren." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Version-2- und Version-3-Tabellen zum Betriebssystem exportieren." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "OEMID von RSDP, XSDT und RSDT festlegen." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "OEMTABLE-ID von RSDP, XSDT and RSDT festlegen." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "OEMTABLE-Revision von RSDP, XSDT und RSDT festlegen." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Ersteller-Feld von RSDP, XSDT und RSDT festlegen." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Ersteller-Revision von RSDP, XSDT und RSDT festlegen." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"EBDA nicht aktualisieren. Könnte Fehler oder Hänger in manchen BIOS-" +"Versionen beseitigen, ist aber nicht effektiv bei Betriebssystemen, die kein " +"RSDP von GRUB empfangen. " + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "Unerwartetes Ende der Datei %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABELLE1,TABELLE2|--load-only=TABELLE1,TABELLE2] DATEI1 " +"[DATEI2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Host-ACPI-Tabellen und durch Argumente angegebene Tabellen laden." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "Fehler: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "Hauptspeicher erschöpft" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "»%s« ist nicht lesbar: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI-Herunterfahren ist gescheitert" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Geräte auflisten." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "Dateiname wurde erwartet" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "DATEI" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Eine Blockliste ausgeben." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "Sie müssen zuerst den Kernel laden" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Ein Betriebssystem starten." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Keine Statistiken für Boot-Zeiten verfügbar\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Statistiken für Boot-Zeiten erstellen." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statistiken des Plattenzwischenspeichers: Hits = %lu (%lu.%02lu%%), Misses = " +"%lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Keine Statistiken zum Paket-Zwischenspeicher verfügbar\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Informationen zum Platten-Zwischenspeicher holen." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "CR/NL-Zeilenenden im DOS-Stil akzeptieren." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Inhalt einer Datei anzeigen." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "Zwei Argumente wurden erwartet" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Datei »%s« mit »%s« vergleichen:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Dateigrößen sind unterschiedlich: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Dateien unterscheiden sich an Position %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Die Dateien sind identisch.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "DATEI1 DATEI2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Zwei Dateien vergleichen." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Eine andere Konfigurationsdatei laden." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Eine andere Konfigurationsdatei laden, ohne den Kontext zu ändern." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Eine andere Konfigurationsdatei laden, ohne den Kontext zu ändern. Es werden " +"nur Menüeinträge geladen." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Eine andere Konfigurationsdatei laden, aber nur deren Menüeinträge." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[Jahr-]Monat-Tag] [Stunde:Minute[:Sekunde]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Anzeigen/Festlegen des/der aktuellen Datums/Zeit." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Angehängte Zeilenumbrüche nicht ausgeben." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Auswertung der Backslash-Maskierungen ermöglichen." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] ZEICHENKETTE" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Eine Textzeile anzeigen." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "In das Firmware-Konfigurationsmenü neu starten." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Ein Videoproblem beheben." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM-Abbild ist vorhanden." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "ROM-Bereich kann nicht aktiviert werden." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"BIOS-Strukturen für Abwärtskompatibilität mit dem vorhandenen Betriebssystem " +"erstellen." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_SICHERUNG [INT10_SICHERUNG]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "BIOS-Sicherung laden." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "ZEICHENKETTE ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Argumente als GRUB-Befehle auffassen" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Überprüfen, ob DATEI als unprivilegierter i386-PAE-Xen-Gast-Kernel gebootet " +"werden kann" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Überprüfen, ob DATEI als unprivilegierter x86_64-Xen-Gast-Kernel gebootet " +"werden kann" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Überprüfen, ob DATEI als unprivilegierter x86-Xen-Gast-Kernel gebootet " +"werden kann" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Überprüfen, ob DATEI als x86-Multiboot-Kernel gebootet werden kann" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Überprüfen, ob DATEI als x86-Multiboot2-Kernel gebootet werden kann" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Überpüfen, ob DATEI ARM-Linux ist" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Überpüfen, ob DATEI ARM64-Linux ist" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Überpüfen, ob DATEI IA64-Linux ist" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Überpüfen, ob DATEI MIPS-Linux ist" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Überpüfen, ob DATEI MIPSEL-Linux ist" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Überpüfen, ob DATEI SPARC64-Linux ist" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Überpüfen, ob DATEI POWERPC-Linux ist" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Überpüfen, ob DATEI x86-Linux ist" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Überpüfen, ob DATEI x86-Linux mit 32-Bit-Protokollunterstützung ist" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Überpüfen, ob DATEI x86-kFreeBSD ist" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Überpüfen, ob DATEI i386-kFreeBSD ist" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Überpüfen, ob DATEI x86_64-kFreeBSD ist" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Überpüfen, ob DATEI x86-kNetBSD ist" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Überpüfen, ob DATEI i386-kNetBSD ist" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Überpüfen, ob DATEI x86_64-kNetBSD ist" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Überpüfen, ob DATEI eine i386-EFI-Datei ist" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Überpüfen, ob DATEI eine i386-EFI-Datei ist" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Überpüfen, ob DATEI eine IA64-EFI-Datei ist" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Überpüfen, ob DATEI eine ARM64-EFI-Datei ist" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Überpüfen, ob DATEI eine ARM-EFI-Datei ist" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Überpüfen, ob DATEI hiberfil.sys im Ruhezustand ist (hibernated)" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Überpüfen, ob DATEI x86_64-XNU ist (Mac-OSX-Kernel)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Überpüfen, ob DATEI XNU ist (Mac-OSX-Kernel)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Überpüfen, ob DATEI ein XNU-Ruhezustand-Abbild ist (Mac-OSX-Kernel)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Überpüfen, ob DATEI ein BIOS-Bootsektor ist" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "Falsch" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPTIONEN DATEI" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Überprüfen, ob DATEI den angegebenen Typ hat." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "Keine solche Partition" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Neuer MBR wurde nach »%s« geschrieben\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "GERÄT [PARTITION[+/-[TYP]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Hybrid-MBR des GPT-Gerätes GERÄT füllen. Angegebene Partitionen werden Teil " +"des Hybrid-MBR. Bis zu 3 Partitionen sind zulässig. TYP ist ein MBR-Typ. + " +"bedeutet, dass die Partition aktiv ist. Nur eine Partition kann aktiv sein." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Diesen Rechner anhalten. Dieser Befehl funktioniert nicht in allen Firmware-" +"Implementationen." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Zu verwendenden Hash angeben." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Prüfsummen der Dateien mit Liste in DATEI vergleichen." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Basisverzeichnis für Hash-Liste." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "VERZ" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Nach dem ersten Fehler nicht stoppen." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Datei entpacken, bevor Prüfsumme ermittelt wird." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LESEFEHLER\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HASH-FEHLER\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c DATEI [-p PRÄFIX]] [DATEI1 [DATEI2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Hash-Prüfsumme berechnen oder prüfen." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c DATEI [-p PRÄFIX]] [DATEI1 [DATEI2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Erweiterte Energieverwaltung setzen\n" +"(1=niedrig, ..., 254=hoch, 255=aus)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Energiemodus anzeigen." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "ATA-Sicherheitseinstellungen bis zum Zurücksetzen einfrieren." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Laufwerksstatus mit SMART anzeigen." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Automatische Klangverwaltung festlegen\n" +"(0=aus, 128=leise, ..., 254=schnell)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Wartezeit bis Standby festlegen\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Laufwerk in den Standby-Modus versetzen." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Laufwerk in den Schlafmodus versetzen." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Identität und Einstellungen des Laufwerks ausgeben." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Roh-Inhalt des ATA IDENTIFY-Sektors anzeigen." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART aktivieren/deaktivieren (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Keine Meldungen ausgeben." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "Ein Argument wurde erwartet" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIONEN] DATENTRÄGER" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA-Datenträgerparameter ermitteln/festlegen." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Aufruf:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MUSTER ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Eine Hilfemeldung anzeigen." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Offset-Bytes am Beginn der Datei überspringen." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Nur Bytes der Länge LENGTH lesen." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIONEN] DATEI_ODER_GERÄT" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Roh-Inhalt einer Datei oder des Speichers anzeigen." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Roh-Inhalt des CMOS anzeigen." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Bit bei BYTE:BIT im CMOS testen." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Bit bei BYTE:BIT im CMOS leeren." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Bit bei BYTE:BIT im CMOS setzen." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Bootzeit-Statistiken für Coreboot anzeigen." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Coreboot-Tabellen auflisten." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Überprüfen, ob der Prozessor den 64-Bit-(Lang-)Modus unterstützt (Vorgabe)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Überprüfen, ob der Prozessor die physikalische Adresserweiterung unterstützt." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Fähigkeiten der CPU überprüfen." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Alle aktuellen Zuordnungen anzeigen." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Alle Zuordnungen auf Standardwerte zurücksetzen." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Sowohl direkte als auch umgekehrte Zuordnungen ausführen." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Es wurden keine Laufwerke neu zugeordnet" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS Laufwerk #Num ------> GRUB/BIOS-Gerät" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "BIOS-Laufwerkszuordnungen verwalten." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Zum Abschalten des Rechners kein APM verwenden." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Das System anhalten, wenn möglich, mit APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "Kein APM gefunden" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Geschütze 16-bit-Schnittstelle unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Geschütze 16-bit-Schnittstelle nicht unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Geschütze 32-bit-Schnittstelle unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Geschütze 32-bit-Schnittstelle nicht unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU-Leerlauf verlangsamt den Prozessor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU-Leerlauf verlangsamt den Prozessor nicht\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM deaktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM aktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM deaktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM aktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "APM-Informationen anzeigen." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "Dateiname oder Tempo und Noten erwartet" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Ungültiges Tempo in %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "Datei »%s« nicht gefunden" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "Zahl nicht erkannt" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "DATEI | TEMPO [TONHÖHE1 DAUER1] [TONHÖHE2 DAUER2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Einen Klang abspielen." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "Numlock-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "Feststelltasten-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "Scrolllock-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "Einfügen-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "Pause-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "Linke Umschalttaste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "Rechte Umschalttaste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "SysRq-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "NumLock-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "CapsLock-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "ScrollLock-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "Einfg-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "Linke Alt-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "Rechte Alt-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "Linke Strg-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "Rechte Strg-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "LED-Status nicht aktualisieren" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KÜRZEL1] [KÜRZEL2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Eine Tastatursequenz emulieren" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Geben Sie »go« ein, um GRUB fortzusetzen." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Zum IEEE1275-Prompt zurückkehren." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Gelesenen Wert in Variable VARNAME speichern." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "8-bit-Wert von PORT lesen." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "16-bit-Wert von PORT lesen." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "32-bit-Wert von PORT lesen." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT WERT [MASKE]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "8-bit-Wert nach PORT schreiben." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "16-bit-Wert nach PORT schreiben." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR WERT [MASKE]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "32-bit-Wert nach PORT schreiben." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "Variable »%s« ist nicht gesetzt" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Eine Tastaturbelegung laden." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Umschalttaste überprüfen." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Strg-Taste überprüfen." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Alt-Taste überprüfen." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Status der Umschalttasten überprüfen." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "Befehl »%s« konnte nicht gefunden werden" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Passwort eingeben:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Alte Konfiguration im gleichen Kontext laden" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Alte Konfiguration im neuen Kontext laden" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Alte Konfiguration im gleichen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Alte Konfiguration im neuen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYP] DATEI [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "»kernel«-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "DATEI [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "»initrd«-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "»modulenounzip«-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSWORT [DATEI]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "»password«-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "»password«-Befehl von grub-legacy im Menüeintragsmodus simulieren" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Dateiname angeben." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Die Signaturüberprüfung der Umgebungsdatei überspringen." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f DATEI] [-s|--skip-sig] [Zu_überspringender_Variablenname] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Variablen aus Blockdatei der Umgebung laden." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f DATEI]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Variablen aus Blockdatei der Umgebung auflisten." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f DATEI] Variablenname [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Variablen in die Blockdatei speichern." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Lange Liste mit ausführlicheren Informationen anzeigen." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Größenwerte in menschenlesbarem Format ausgeben." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Alle Dateien auflisten." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Netzwerkprotokolle:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [DATEI …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Geräte und Dateien auflisten." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Nur Version-1-Tabellen darstellen." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Nur Version-2- und Version-3-Tabellen anzeigen." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "ACPI-Informationen anzeigen." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "verfügbarer RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "reservierter RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "Durch ACPI wiederverwendbarer Speicher" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "Durch ACPI beanspruchter Speicherbereich (für Energiesparmodi)" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "Fehlerhafter RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "Persistenter RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "Persistenter RAM (veraltet)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM enthält Coreboot-Tabellen" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM enthält Firmware-Code" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, Länge = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, Länge = 0x%llx, Typ = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Von Firmware bereitgestellte Speicherzuordnung auflisten." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCI-Geräte auflisten." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "8-bit-Wert aus ADDR lesen." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "16-bit-Wert aus ADDR lesen." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "32-bit-Wert aus ADDR lesen." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "8-bit-Wert nach ADDR schreiben." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "16-bit-Wert nach ADDR schreiben." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "32-bit-Wert nach ADDR schreiben." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Typ des Menüeintrags." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "ZEICHENKETTE" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Liste der Benutzer, die diesen Eintrag booten dürfen." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "BENUTZERNAME[,BENUTZERNAME]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tastenzuordnung für den Schnellstart dieses Eintrags." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TASTE" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "ZEICHENKETTE als Inhalt des Menüeintrags verwenden." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Bezeichner des Menüeintrags." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Dieser Eintrag kann von jedem Benutzer gebootet werden." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Einen Menüeintrag definieren." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Ein Untermenü definieren." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Name\tReferenzzähler\tAbhängigkeiten\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Diese Meldung anzeigen." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADRESSE [GRÖßE]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Inhalt des Speichers anzeigen." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Ein Modul entfernen." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Geladene Module anzeigen." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "GRUB beenden." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Kein CS5536 gefunden" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 in %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"Ein-/Ausgabebereich des Systemverwaltungsbus-Controllers ist bei 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM-Slotnummer %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Geschriebene SPD-Bytes: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Flash-Gesamtgröße: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Speichertyp: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Teil-Nummer: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Speichertyp: Unbekannt." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Speicher-Informationen anzeigen." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s unterstützt keine UUIDs" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Zu nativen Festplattentreibern wechseln. Falls keine Module angegeben " +"werden, wird die Vorgabe verwendet (pata,ahci,usbms,ohci,uhci,ehci)." + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"BEFEHLE auf Partition ausführen.\n" +"Rufen Sie »parttool PARTITION help« auf, um eine\n" +"Liste der verfügbaren Befehle zu erhalten." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=WERT" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Für %s ist leider kein Partitionierungswerkzeug verfügbar\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "Unbekanntes Argument »%s«" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITION BEFEHLE" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "BENUTZERPASSWORT" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Benutzerpasswort (Klartext) festlegen. Nicht empfohlen, da unsicher." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "Ungültiges PBKDF2-Passwort" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "BENUTZER PBKDF2_PASSWORT" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Benutzerpasswort festlegen (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Gerät nach Anbieter und Gerätekennungen auswählen." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[Anbieter]:[Gerät]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Gerät nach dessen Position auf dem Bus auswählen." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "Symbol »%c« fehlt" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSITION] [-d GERÄT]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Roh-Ausgabe des PCI-Konfigurationsraums anzeigen." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Eine Variable auf den Rückgabewert setzen." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Treiber ermitteln." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Typ der Partitionszuordnung bestimmen." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Dateisystemtyp ermitteln." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Dateisystem-UUID ermitteln." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Dateisystembezeichnung ermitteln." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "Dateisystem »%s« unterstützt keine Labels" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "GERÄT" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Info zum Gerät holen." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Variable durch Benutzereingabe setzen." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Den Rechner neu starten." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Entsprechende Komponenten-NUMMER in VARNAME speichern." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[ZAHL:]VARNAME" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP ZEICHENKETTE" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Prüfen, ob REGEXP auf ZEICHENKETTE passt." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAME [VARIABLE] [HINTWEISE]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Anhand von Dateien nach Geräten suchen. Falls VARIABLE angegeben wird, dann " +"wird das erste gefundene Gerät zum Setzen der Variable verwendet." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Anhand von Bezeichnungen nach Geräten suchen. Falls VARIABLE angegeben wird, " +"dann wird das erste gefundene Gerät zum Setzen der Variable verwendet." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Anhand von UUIDs nach Geräten suchen. Falls VARIABLE angegeben wird, dann " +"wird das erste gefundene Gerät zum Setzen der Variable verwendet." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Geräte nach Datei durchsuchen." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Geräte nach Dateisystembezeichnung durchsuchen." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Geräte nach Dateisystem-UUID durchsuchen." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Eine Variable auf das erste gefundene Gerät setzen." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Kein Diskettenlaufwerk überprüfen." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen. Falls HINWEIS mit Komma endet, auch " +"Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINWEIS" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen (bei IEEE1275). Falls HINWEIS mit Komma " +"endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen (für aktuell laufendes BIOS). Falls " +"HINWEIS mit Komma endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen, falls direkter Hardwarezugriff " +"unterstützt wird. Falls HINWEIS mit Komma endet, auch Unterpartitionen " +"versuchen" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen (für aktuell laufendes EFI). Falls " +"HINWEIS mit Komma endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen, falls aktuell laufende ARC. Falls " +"HINWEIS mit Komma endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINWEIS [--hint HINT] ...] NAME" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Anhand von Dateien, Dateisystembezeichnungen oder Dateisystem-UUIDs nach " +"Geräten suchen. Falls --set angegeben wird, dann wird das erste gefundene " +"Gerät zum Setzen der Variable verwendet. Falls keine Variable angegeben " +"wird, dann wird »root« verwendet" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x von %x:%02x.%x ist %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d GERÄT] [-v VAR] REGISTER[=WERT[:MASKE]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "PCI-Geräte bearbeiten." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Ausführlicher Countdown." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Unterbrechung mit ESC erlauben." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ANZAHL_DER_SEKUNDEN" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Die angegebene Anzahl an Sekunden warten." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "Wurzelverzeichnis der Syslinux-Disk [Vorgabe=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"Aktuelles Verzeichnis für Syslinux [Vorgabe ist das übergeordnete " +"Verzeichnis der Eingabedatei]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "Eingabe als Isolinux-Konfigurationsdatei auffassen." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "Eingabe als Pxelinux-Konfigurationsdatei auffassen." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "Eingabe als Syslinux-Konfigurationsdatei auffassen." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Syslinux-Konfiguration im gleichen Kontext laden" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Syslinux-Konfiguration im neuen Kontext laden" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Syslinux-Konfiguration im gleichen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Syslinux-Konfiguration im neuen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "Kein Terminal angegeben" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "Terminal »%s« wurde nicht gefunden" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktive Eingabeterminals:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Verfügbare Eingabeterminals:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktive Ausgabeterminals:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Verfügbare Ausgabeterminals:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Eingabeterminal listen oder wählen." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Ausgabeterminal listen oder wählen." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "AUSDRUCK ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Einen Ausdruck auswerten." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "AUSDRUCK" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Gleiche Datei mehrfach laden." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Größe für jeden Lesevorgang angeben" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "Ungültige Blockgröße" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Dateigröße: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Verstrichene Zeit: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Geschwindigkeit: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s GRÖßE] DATEINAME" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Dateilesegeschwindigkeit testen." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "Kein Befehl angegeben" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Verstrichene Zeit: %d.%03d Sekunden \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "BEFEHL [ARGUMENTE]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Von BEFEHL benötigte Zeit messen" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "In Großschreibung umwandeln." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "In Kleinschreibung umwandeln." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPTIONEN] [MENGE1] [MENGE2] [ZEICHENKETTE]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Zeichen der MENGE1 in Zeichen der MENGE2 in ZEICHENKETTE übersetzen." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Nichts tun, erfolgreich." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Nichts tun, nicht erfolgreich." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USB-Unterstützung überprüfen." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Die Signaturüberprüfung der öffentlichen Schlüsseldatei überspringen." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "Falsche Signatur" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "Öffentlicher Schlüssel %08x wurde nicht gefunden" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "Modul »%s« ist nicht geladen" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] DATEI SIGNATURDATEI [SCHLÜSSELDATEI]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Angehängte Signatur überprüfen." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] SCHLÜSSEL_DATEI" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "SCHLÜSSEL_DATEI zu vertrauenswürdigen Schlüsseln hinzufügen." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Vertrauenswürdige Schlüssel auflisten." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "SCHLÜSSEL_ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "SCHLÜSSEL_ID aus den vertrauenswürdigen Schlüsseln entfernen." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Nur Text" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Direkte Farbe, Maske: %d/%d/%d/%d Pos.: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Palettiert " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Schwarzweiß " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Unbekannter Videomodus" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDID-Prüfsumme ist ungültig" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID-Version: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Bevorzugter Modus: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Kein bevorzugter Modus verfügbar\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "Ungültige Angabe »%s« des Grafikmodus" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Liste der unterstützten Videomodi:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legende: Maske/Position=Rot/Grün/Blau/Reserviert" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter »%s«:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Keine Informationen verfügbar" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Grafikadapter konnte nicht initialisiert werden" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[BxH[xT]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Verfügbare Grafikmodi auflisten. Falls Auflösung angegeben ist, nur Modi " +"dieser Auflösung anzeigen." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[BxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Das Video-Subsystem im Modus BxH überprüfen." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Das Video-Subsystem überprüfen." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[VERZ]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Xen-Speicherung auflisten." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VARNAME]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"64-bit-UUID in ein von XNU verarbeitbares Format umwandeln. Falls -l " +"angegeben ist, bitte Kleinschreibung beibehalten (wie von blkid)" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "Lesen des Sektors 0x%llx von »%s« ist fehlgeschlagen" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "Schreiben des Sektors 0x%llx nach »%s« ist fehlgeschlagen" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Nach UUID einhängen." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Alles einhängen." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Alle Datenträger einhängen, für die das »boot«-Flag gesetzt ist." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "»%s« kann nicht geöffnet werden: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "»%s« kann nicht durchsucht werden: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "QUELLE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Ein verschlüsseltes Gerät einhängen." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Physischer Datenträger »%s« konnte nicht gefunden werden. Einige Module " +"könnten im Core-Abbild fehlen." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "Physischer Datenträger %s wurde nicht gefunden" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "Kein Medium in »%s«" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "sha256 konnte nicht geladen werden" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "sha512 konnte nicht geladen werden" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "ELI-Metadaten konnten nicht gelesen werden" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "Falsches ELI-Magic oder -Version" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Es wird versucht, den Master-Schlüssel zu entschlüsseln …" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Kennwort für %s%s%s angeben (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Slot %d geöffnet\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "Versuch, außerhalb der Platte »%s« zu lesen und zu schreiben" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "Auf CD-ROM kann nicht geschrieben werden" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Native Festplattentreiber werden verwendet. Nutzung der Firmware-" +"Schnittstelle wird verweigert." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"Die LDM-Einbettungspartition ist zu klein, Einbettung würde unmöglich sein" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"Dieses LDM hat keine Einbettungspartition, Einbettung würde unmöglich sein" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Das angegebene Loopback-Gerät löschen." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] GERÄTENAME DATEI." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Ein virtuelles Gerät aus einer Datei erstellen." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "Neuzuweisung 0x%x ist noch nicht implementiert" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "Keine Symboltabelle" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "Diese ELF-Datei ist vom falschen Typ" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "EFI-Emulator laden und initialisieren." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Laden des EFI-Emulators finalisieren." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "EFI-Umgebung entladen." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "Symbol »%s« nicht gefunden" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Geladene Schriften" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "DATEI…" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Eine oder mehrere zu ladende Schriftdateien angeben." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Die geladenen Schriften auflisten." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "Zu tief verschachtelte symbolische Verknüpfungen" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "Versuch, hinter dem Ende der Datei zu lesen" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"Teilgerät eines über mehrere Geräte verteilten Dateisystems konnte nicht " +"gefunden werden" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "Ist kein Verzeichnis" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "Keine reguläre Datei" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"Ihre Datei core.img ist ungewöhnlich groß. Sie würde nicht in den " +"Einbettungsbereich passen." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "Ungültiger Dateiname »%s«" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "Prüfsummenvergleich ist gescheitert" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "Kein Schlüssel verfügbar" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC-Überprüfung ist gescheitert" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Eingabe wird als Raw angenommen." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Eingabe wird als hexadezimal angenommen." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Eingabe wird als Kennwort angenommen." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "ZFS-Passwort eingeben:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [DATEI]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "In DATEI gespeicherten ZFS-Wrapping-Schlüssel importieren" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtuelles Gerät wurde entfernt" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtuelles Gerät ist gescheitert" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtuelles Gerät ist offline" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtuelles Gerät ist nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtuelles Gerät ist online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Inkorrektes virtuelles Gerät: kein Typ verfügbar" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Virtuelles Gerät durchsuchen (Datei oder Laufwerk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Boot-Pfad: nicht verfügbar\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Boot-Pfad: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Pfad: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Pfad: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Gerätekennung: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Gerätekennung: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Dieses VDEV ist ein Spiegel" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Dieses VDEV ist ein RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Ungültiges VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV mit %d Kindelementen\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV-Elementnummer %d ist nicht korrekt\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV-Elementnummer %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Typ des virtuellen Gerätes ist unbekannt: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Pool-Status: aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Pool-Status: exportiert" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Pool-Status: zerstört" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Pool-Status: für Hotspare reserviert" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Pool-Status: ARC-Gerät, Level 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Pool-Status: nicht initialisiert" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Pool-Status: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Pool-Status: potenziell aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Pool-Name: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Pool-Name: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Pool-GUID: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Pool-GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Pool-Status konnte nicht ermittelt werden" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Pool-Status nicht erkannt" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Kein Baum virtueller Geräte verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "ZFS-Info zu GERÄT ausgeben." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "DATEISYSTEM [VARIABLE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "ZFS-BOOTFSOBJ ausgeben oder als VARIABLE setzen" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Bitte verbinden Sie nun einen entfernten Debugger." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "GDB-Stub auf dem angegebenen Port starten" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Haltepunkt für GDB auslösen" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "GDB-Stub stoppen" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "Vorzeitiges Ende der Datei" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Übersetzt die Zeichenkette anhand den aktuellen Einstellungen." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"»Enter« zum Booten des markierten Betriebssystems, »e« zum Bearbeiten der " +"Befehle vor dem Booten oder »c« für eine Befehlszeile. Mit »ESC« kehren Sie " +"zum vorherigen Menü zurück." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"»Enter« zum Booten des markierten Betriebssystems, »e« zum Bearbeiten der " +"Befehle vor dem Booten oder »c« für eine Befehlszeile." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "Enter: Booten, »e«: Optionen, »c«: Befehlszeile" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Der hervorgehobene Eintrag wird automatisch in %ds ausgeführt." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds verbleibend." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB-Bootmenü" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: Wert %s ist kleiner oder gleich %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Parameter für ARGP_HELP_FMT benötigt einen Wert" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Parameter für ARGP_HELP_FMT muss positiv sein" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Unbekannter Parameter für ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Unsinn in ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Erforderliche oder optionale Argumente für lange Optionen sind ebenso " +"erforderlich bzw. optional für die entsprechenden Kurzoptionen." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " oder: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPTIONEN …]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Rufen Sie »%s --help« oder »%s --usage« auf, um weitere Informationen zu " +"erhalten.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Berichten Sie Fehler an %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Unbekannter Systemfehler" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "Diese Hilfe anzeigen" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "Eine kurze Hilfemeldung ausgeben" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "Programmname festlegen" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEK" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "für SEK Sekunden hängenbleiben (Voreinst.: 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "Programmversion ausgeben" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMMFEHLER) Keine Version bekannt!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Zu viele Argumente\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMMFEHLER) Option hätte erkannt werden müssen!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: Option »%s« ist mehrdeutig; Möglichkeiten:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: Option »--%s« erlaubt kein Argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: Option »%c%s« erlaubt kein Argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: Option »%s« erwartet ein Argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: Unbekannte Option »--%s«\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: Unbekannte Option »%c%s«\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: Ungültige Option -- »%c«\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: Option erfordert ein Argument -- »%c«\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: Option »-W %s« ist nicht eindeutig\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: Option »-W %s« erlaubt kein Argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: Option »-W %s« erfordert ein Argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Erfolg" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Keine Übereinstimmung" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ungültiger regulärer Ausdruck" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ungültiges Sortierzeichen" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ungültiger Zeichenklassenname" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Angehängter Backslash" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ungültige Rückreferenz" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Kein Gegenstück für [ oder [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Kein Gegenstück für ( oder \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Kein Gegenstück für \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ungültiger Inhalt von \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ungültiges Bereichsende" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Speicher ausgeschöpft" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ungültiger vorhergehender regulärer Ausdruck" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Vorzeitiges Ende des regulären Ausdrucks" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regulärer Ausdruck ist zu groß" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Nicht übereinstimmende ) oder \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "Unbekannter regexp-Fehler" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Kein vorhergehender regulärer Ausdruck" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hallo Welt" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "»Hallo Welt« ausgeben." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "Versuch, außerhalb der Datei zu suchen" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "Nicht unterstütztes gzip-Format" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop-Datei ist beschädigt" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz-Datei ist beschädigt oder Blockoptionen werden nicht unterstützt" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "Ungültiges ELF-Magic (architekturabhängig)" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[UMGVAR=WERT]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Eine Umgebungsvariable festlegen." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "UMGVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Eine Umgebungsvariable löschen." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Geräte oder Dateien auflisten." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Ein Modul einfügen." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "Laufwerk »%s« wurde nicht gefunden." + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "Versuch, außerhalb der Partition zu lesen oder zu schreiben" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "Ungültiges ELF-Magic (architekturunabhängig)" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "Geräteanzahl übersteigt die Grenzen" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "Auf »%s« kann nicht geschrieben werden: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"Der device.map-Eintrag »%s« ist ungültig, wird ignoriert. Bitte korrigieren " +"oder löschen Sie Ihre device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"Der Laufwerksname »%s« in device.map ist inkorrekt. %s wird stattdessen " +"verwendet. Bitte verwenden Sie die Form [hfc]d[0-9]* (z.B. »hd0« oder »cd«)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "»%s« kann nicht geöffnet werden: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "GERÄTENAME" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Root-Gerät festlegen." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "DATEI als Gerätezuordnung verwenden [Vorgabe=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "DATEI als Memdisk-Abbild verwenden" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "GRUB-Dateien im Verzeichnis VERZ verwenden [Vorgabe=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "Ausführliche Meldungen ausgeben." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "Warten, bis ein Debugger einklinkt" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Unbekanntes zusätzliches Argument »%s«." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-Emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Fehler beim Einlesen der Befehlszeilenargumente\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Rufen Sie »gdb %s %d« auf und setzen Sie ARGS.HOLD auf Null.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: Warnung:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: Info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: Fehler:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "Datei »%s« ist zu groß" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "Unbekanntes Dateisystem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Herunterfahren ist gescheitert" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Beenden ist gescheitert" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "Überlauf wurde erkannt" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Unsauber eingebettete Partition wird verworfen (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Unbekannter Befehl »%s«.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Diese Hilfe anzeigen und beenden." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Benutzung dieses Befehls anzeigen und beenden." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "Obligatorische Option für »%s« fehlt" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "Das Argument »%s« benötigt eine Ganzzahl" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "Ein Argument wurde »%s« zugeordnet, obwohl es kein Argument erwartet" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Backtrace ausgeben." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB weiß nicht, wie man diese Maschine stoppen kann!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Vorgegebener Server ist ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "Ungültige Angabe der Farbe »%s«" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Neu starten ist gescheitert" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LÄNGE]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Hexdump-Zufallsdaten." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "Gerätebaum muss angegeben werden (siehe Befehl »devicetree«)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "Ungültiges zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "Ungültiger Gerätebaum" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Linux laden." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "initrd laden." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "DTB-Datei laden." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "Beziehen des FDT fehlgeschlagen" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "Sie müssen zuerst den Xen-Hypervisor laden" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Einen Xen-Hypervisor laden." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Ein Xen-Modul laden." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTIONEN]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "BIOS-basiertes System booten." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Einen anderen Bootloader laden." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Ausgabe auf allen Konsolen anzeigen." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Serielle Konsole verwenden." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Nach dem Dateinamen für den Neustart fragen." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "CDROM als Root-Gerät verwenden." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Routing der Benutzerkonfiguration aufrufen." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "KDB beim Booten verwenden." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Entfernte GDB-Fehlerdiagnose anstatt DDB verwenden." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Alle Boot-Ausgaben deaktivieren." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Nach jeder ausgegebenen Zeile auf Tastendruck warten." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Einkompiliertes Root-Gerät verwenden." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "In den Single-User-Modus booten." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Mit ausführlichen Meldungen booten." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Nicht neu starten, nur herunterfahren." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Konfigurierte Geräte bearbeiten." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,GESCHW]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMP deaktivieren." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPI deaktivieren." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Keine Fehlerdiagnosemeldungen beim Booten anzeigen." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Mit Fehlerdiagnosemeldungen booten." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Normale Ausgaben unterdrücken (Warnungen verbleiben)" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADR|comUNIT][,GESCHW]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "Name" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "Typ" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "Adresse" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "Größe" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Im Blindmodus booten" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Kernel von FreeBSD laden." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Kernel von OpenBSD laden." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Kernel von NetBSD laden." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "FreeBSD-Umgebung laden." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "FreeBSD-Kernelmodul laden." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "NetBSD-Kernelmodul laden." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "NetBSD-Kernelmodul laden (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "FreeBSD-Kernelmodul laden (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Ramdisk von kOpenBSD laden." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Weiteres Coreboot-Payload laden" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Veralteter Parameter »%s« wird nicht mehr unterstützt." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s ist veraltet. Verwenden Sie stattdessen gfxpayload=%s vor dem Linux-" +"Befehl.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s ist veraltet. VGA-Modus %d wurde nicht erkannt. Verwenden Sie stattdessen " +"gfxpayload=BREITExHÖHE[xTIEFE] vor dem Linux-Befehl.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] GERÄT" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "»%s« ist zu groß" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "FreeDOS-kernel.sys laden." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "NTLDR oder BootMGR laden." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Die geschätzte Zuordnung von Plan9-Geräten überschreiben." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUB-GERÄT=PLAN9-GERÄT" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGUMENTE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Plan9-Kernel laden." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Ein PXE-Abbild laden." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Truecrypt-ISO laden." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd ist bereits geladen" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Modul laden." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Drücken Sie eine beliebige Taste, um xnu zu starten" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Inhalt von »device-properties« laden" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "FPSWA-Treiber konnte nicht gefunden werden" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Das FPSWA-Protokoll war nicht imstande, die Schnittstelle zu finden" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Kein FPSWA gefunden" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA-Revision: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "DATEI [ARGUMENTE …]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "FPSWA-Version anzeigen." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "WARNUNG: Im Betriebssystem wird keine Konsole verfügbar sein" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Einen Multiboot2-Kernel laden." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Ein Multiboot2-Modul laden." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Einen Multiboot-Kernel laden." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Ein Multiboot-Modul laden." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Modus des Hintergrundbildes." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(=ZOOM)|normal(=NORMAL)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "XNU-Abbild laden." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64-bit XNU-Abbild laden." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "XNU-Erweiterungspaket laden." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "XNU-Erweiterung laden." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "VERZEICHNIS [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "XNU-Erweiterungsverzeichnis laden." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "XNU-Ramdisk laden. Wird im Betriebssystem als md0 angezeigt." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Begrüßungsbildschirm für XNU laden." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Ein gespeichertes XNU-Abbild laden." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADR1,MASKE1[,ADR2,MASKE2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Speicherbereiche als »badram« deklarieren." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "VON[K|M|G] BIS[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Alle Speichersegmente im angegebenen Bereich löschen." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "Vier Argumente werden erwartet" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "Netzwerk-Schnittstelle »%s« wurde nicht erkannt" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "Keine DHCP-Informationen gefunden" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "Keine DHCP-Optionen gefunden" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "Keine DHCP-Option %d gefunden" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "Nicht erkannte Formatspezifikation für DHCP-Option »%s«" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "Keine Netzwerkkarte gefunden" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "%s konnte nicht automatisch konfiguriert werden" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KARTE]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "Eine bootp-Autokonfiguration ausführen" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VARIABLE SCHNITTSTELLE ZAHL BESCHREIBUNG" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"DHCP-Option holen und in VARIABLE speichern. Falls VARIABLE »-« ist, den " +"Wert ausgeben." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "Es wurden keine DNS-Server konfiguriert" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "Domainname-Komponente ist zu lang" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "Keine DNS-Angabe gefunden" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "Kein DNS-Antwort empfangen" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "nur ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "nur ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "ipv4 bevorzugen" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "ipv6 bevorzugen" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "Ungültiger Parameter" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADDRESSE DNS_SERVER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Eine DNS-Suche ausführen" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Einen DNS-Server hinzufügen" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Einen DNS-Server entfernen" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "DNS-Server auflisten" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "Netzwerkpaket konnte nicht gesendet werden" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "Interpretierung wird nicht unterstützt" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "Speicherzuweisung (alloc-mem) ist gescheitert" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "free-mem ist gescheitert" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "Nicht unterstützte HTTP-Antwort" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "Nicht unterstützter HTTP-Fehler %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "Zeitüberschreitung beim Öffnen von »%s«" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "Zeitüberschreitung: Hardware-Adresse konnte nicht aufgelöst werden" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "Nicht auflösbare Adresse %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "Nicht erkannte Netzwerkadresse »%s«" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "Ziel ist nicht erreichbar" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "Routenschleife entdeckt" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "Adresse nicht gefunden" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "Sie können diese Adresse nicht löschen" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Nicht unterstützter Hardware-Adresstyp %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Nicht unterstützter Adresstyp %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "Drei Argumente erwartet" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "Karte nicht gefunden" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporär" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Unbekannter Adresstyp %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "Kein Server angegeben" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "Zeitüberschreitung beim Lesen von »%s«" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KURZNAME KARDE ADRESSE [HW-ADRESSE]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Eine Netzwerkadresse hinzufügen." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "KARTE [HW-ADRESSE]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Eine IPV6-Autokonfiguration ausführen" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KURZNAME" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Eine Netzwerkadresse löschen." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KURZNAME NETZ [SCHNITTSTELLE| gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Eine Netzwerkroute hinzufügen." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Eine Netzwerkroute entfernen." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "Netzwerkrouten auflisten" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "Netzwerkkarten auflisten" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "Netzwerkadressen auflisten" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "Verbindung verweigert" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "Verbindungsabbruch wegen Zeitüberschreitung" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Benutzername eingeben:" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[BENUTZERLISTE]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Überprüfen Sie, ob der Benutzer in der BENUTZERLISTE aufgeführt ist." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Mögliche Befehle sind:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Mögliche Geräte sind:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Mögliche Dateien sind:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Mögliche Partitionen sind:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Mögliche Argumente sind:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Mögliche Dinge sind:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Warnung: Syntaxfehler (fehlender /) in »%s«\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Warnung: ungültige Vordergrundfarbe »%s«\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Warnung: ungültige Hintergrundfarbe »%s«\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "UMGVAR [UMGVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Variablen exportieren." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Sonntag" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Montag" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Dienstag" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Mittwoch" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Donnerstag" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Freitag" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Samstag" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "Modul ist nicht geladen" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB Version %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Beenden ist jederzeit mit ESC möglich." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimale BASH-ähnliche Zeilenbearbeitung wird unterstützt. Für das erste " +"Wort listet TAB die möglichen Befehlsvervollständigungen auf. Ansonsten " +"werden mit TAB die möglichen Geräte-oder Dateivervollständigungen angezeigt. " +"%s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Den Bildschirm leeren." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "In Normalmodus wechseln." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Normalmodus abbrechen." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Beliebige Taste drücken, um fortzusetzen …" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "»%s« wird gebootet" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Alternative »%s« wird verwendet" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" +"Sowohl Vorgabe- als auch Alternativeinträge konnten nicht gebootet werden.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Eine Befehlsliste booten" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimale Emacs-ähnliche Bildschirmbearbeitung wird unterstützt. TAB listet " +"Vervollständigungen auf. Drücken Sie Strg-X oder F10 zum Booten, Strg-C oder " +"F2 für eine Befehlszeile oder ESC, um abzubrechen und zum GRUB-Menü " +"zurückzukehren." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Verwenden Sie die Tasten %C und %C zum Markieren eines Eintrags." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partition %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Gerät %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Zugriff auf Dateisystem nicht möglich" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Dateisystemtyp %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Bezeichnung »%s«" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Letzte Änderungszeit %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Kein bekanntes Dateisystem erkannt" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partitionsbeginn bei %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sektorgröße %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Gesamtgröße unbekannt" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Gesamtgröße %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MEHR--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "Konfigurationsdatei »%s« kann nicht geöffnet werden: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "Auf Ihrer Plattform ist keine Kompression verfügbar" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "Für Ihre Plattform sind keine IEEE1275-Routinen verfügbar" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "Für Ihre Plattform sind keine EFI-Routinen verfügbar" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "Für Ihre Plattform sind keine SGI-Routinen verfügbar" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "Für Ihr Betriebssystem ist kein Zufallszahlengenerator verfügbar" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Baum für »device-mapper« konnte nicht erstellt werden" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "Verschlüsselter Datenträger »%s« konnte nicht eingebunden werden: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "»geom« konnte nicht geöffnet werden!" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "Geli-Nutzer konnte nicht gefunden werden" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "Geli-UUID konnte nicht ermittelt werden" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "»part«-Teil von »geom« konnte nicht geöffnet werden" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "Gerätegröße ist unausgerichtet" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "Es wird versucht, das Core-Abbild »%s« aus GRUB zu lesen" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "Es wird versucht, das Core-Abbild »%s« erneut aus GRUB zu lesen" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "»%s« kann nicht korrekt gelesen werden" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "Lesen der Sektoren des Core-Abbildes ist gescheitert" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"Übersetzer-Befehlszeilenpfad für Pfad »%s« konnte nicht ermittelt werden: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "Übersetzer-Befehlszeilenpfad für Pfad »%s« ist leer" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"Übersetzer »%s« für Pfad »%s« hat verschiedene Wörter, die keine Optionen " +"sind, mindestens »%s« und »%s«" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"Übersetzer »%s« für Pfad »%s« wurde nur Optionen übergeben, device-Teil " +"konnte nicht gefunden werden" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Speicherinfo für »%s« enthält keinen Typ" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "»%s« ist keine lokale Festplatte" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Speicherinformation für »%s« weist weder auf eine Partition noch einen " +"Datenträger hin" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "Blocklisten konnten nicht ermittelt werden: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "Blockgröße ist nicht durch 512 teilbar" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "Ungültige Blockgröße Null" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "Blocklisten konnten nicht ermittelt werden" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "RAID_VERSION-Fehler (ioctl): %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "Nicht unterstützte RAID-Version: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "GET_ARRAY_INFO-Fehler (ioctl): %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "GET_DISK_INFO-Fehler (ioctl): %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Datenstrom von %s konnte nicht geöffnet werden: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "Ungültiger Typ eines RAID-Geräts »%s«" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"»obppath« wurde in den übergeordneten Verzeichnissen von »%s« nicht " +"gefunden, keine IEEE1275-Namensermittlung" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "Kanonischer Pfad von »%s« konnte nicht ermittelt werden" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "Unbekannter Gerätetyp %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Aufruf: %s GERÄT\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Fork konnte nicht angelegt werden: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Weiterleitung konnte nicht angelegt werden: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "Originalverzeichnis kann nicht wiederhergestellt werden" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "Aufruf von stat für »%s« nicht möglich: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "Temporäre Datei kann nicht angelegt werden: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "Temporäres Verzeichnis konnte nicht erstellt werden: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"IEEE1275-Gerätepfad für %s konnte nicht gefunden werden.\n" +"Sie müssen die Variable »boot-device« manuell setzen." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: Nicht gefunden" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"»nvsetenv« ist fehlgeschlagen. \n" +"Sie müssen die Variable »boot-device« manuell setzen. Geben Sie am IEEE1275-" +"Prompt Folgendes ein:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "»SystemPartition« und »OSLoader« müssen manuell eingerichtet werden." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "Kanonischer Pfadname enthält keinen »/«" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() gescheitert" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "Zufallsdaten konnten nicht geholt werden" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Unzureichende Zugriffsrechte für Firmware, BIOS wird angenommen" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "Im BIOS-Modus sind keine EFI-Routinen verfügbar" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "Unerwarteter EFI-Fehler" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Es konnte keine freier BootNNNN-Slot ist" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"Diese GPT-Partitionsbezeichnung hat keine BIOS-Boot-Partition, Einbettung " +"würde unmöglich sein" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "Ihre BIOS-Boot-Partition ist zu klein, Einbettung würde unmöglich sein" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Der Sektor %llu wird bereits vom Raid-Controller »%s« verwendet und wird " +"daher übergangen. Bitte fragen Sie den Hersteller, ob es möglich ist, keine " +"Daten in der MBR-Lücke zu speichern." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Der Sektor %llu wird bereits vom Programm »%s« verwendet und wird daher " +"übergangen. Diese Software kann in Zukunft Start- oder andere Probleme " +"hervorrufen. Bitte fragen Sie dessen Autoren, ob es möglich ist, keine Daten " +"im Boot-Bereich zu speichern." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"Andere Software nutzt den Einbettungsbereich, wodurch nicht genug Platz für " +"core.img ist. Solche Software versucht häufig, Daten zu speichern, um sie " +"unauffindbar zu machen. Wir empfehlen Ihnen, dies zu untersuchen" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"Die MSDOS-Partitionsbezeichnung hat keinen Freiraum nach dem MBR, Einbettung " +"würde unmöglich sein" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Ihr Einbettungsbereich ist ungewöhnlich klein. core.img würde nicht " +"hineinpassen." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Partition als aktiv markieren" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "Keine primäre Partition" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partition %d ist nun aktiv. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "»active«-Flag auf %d wurde gelöscht. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Partitionstyp ändern" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "»hidden«-Flag im Partitionstyp setzen" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "Der Partitionstyp 0x%x ist ungültig" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Partitionstyp wird auf 0x%x gesetzt\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "0 Schleifen können nicht unterbrochen werden" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "außerhalb des Bereichs der Funktion" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "Ungültiger Variablenname »%s«" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "Unerwartetes Dateiende" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[ZAHL]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Schleifendurchlauf beenden" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Schleifen fortsetzen" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Positionsparameter anpassen." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[WERT]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Positionsparameter festlegen." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Aus einer Funktion zurückkehren." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] DATEI" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Hintergrundbild für aktives Terminal laden." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "FARBE" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Hintergrundfarbe für aktives Terminal festlegen." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Inhalt der CBMEM-Konsole anzeigen." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Einheit des seriellen Ports festlegen." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Adresse des seriellen Ports festlegen." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Geschwindigkeit des seriellen Ports festlegen." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Wortlänge des seriellen Ports festlegen." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Parität des seriellen Ports festlegen." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Stop-Bits des seriellen Ports festlegen." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Basisfrequenz festlegen." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "RTS/CTS aktivieren/deaktivieren." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "Serieller Port »%s« wurde nicht gefunden" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "Flusskontrolle des seriellen Ports wird nicht unterstützt" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIONEN…]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Serielle Schnittstelle konfigurieren." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "Unbekannter Terminfo-Typ »%s«" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "Visuelles UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Unbekannte Kodierung" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Aktuelle Terminfo-Typen:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminal ist nur ASCII [Vorgabe]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal ist logisches UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminal ist visuelles UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminalgeometrie wurde festgelegt." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "BREITExHÖHE." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "Ungültige Angabe der Terminalgeometrie" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" +"Terminal %s wurde nicht gefunden oder wird von terminfo nicht berücksichtigt" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g BxH] TERM [TYP]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "terminfo-Typ von TERM auf TYP setzen.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Blockargument ausgeben und ausführen." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "Bitmap-Datei »%s« besitzt ein nicht unterstütztes Format" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE-Info: Version: %d.%d OEM-Softwarerevision: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " Gesamtspeicher: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "Kein passender Videomodus gefunden" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "Zugriff verweigert" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULE" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "In MODULE angegebene Module vorladen" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "Nur MODULE und deren Abhängigkeiten installieren [Vorgabe=alle]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "THEMEN" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "THEMEN installieren [Vorgabe=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "SCHRIFTEN" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "SCHRIFTEN installieren [Vorgabe=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "SPRACHEN" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "Nur SPRACHEN installieren [Vorgabe=alle]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "GRUB-Dateien komprimieren [optional]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "Zu verwendende Kompression für Kernel-Abbild auswählen" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "Abbilder und Module in VERZEICHNIS verwenden [Vorgabe=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "Übersetzungen im Verzeichnis VERZ verwenden [Vorgabe=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "GRUB-Dateien im Verzeichnis VERZ verwenden [Vorgabe=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "DATEI als öffentlichen Schlüssel zur Signaturüberprüfung einbetten" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "Datei %s kann nicht in %s umbenannt werden" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" +"Platte existiert nicht, ersatzweise wird Partition des Geräts %s verwendet" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Befehle:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Eine leere Umgebungs-Blockdatei erstellen." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Aktuelle Variablen auflisten." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAME=WERT ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Variablen setzen." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAME ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Variablen löschen." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Optionen:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Sie müssen mindestens einen Befehl angeben.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "DATEINAME BEFEHL" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Werkzeug zum Bearbeiten einer Umgebungs-Blockdatei." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Falls DATEINAME als »-« angegeben ist, wird er Vorgabewert %s verwendet.\n" +"\n" +"Es gibt keinen »delete«-Befehl. Falls Sie den gesamten Umgebungsblock " +"löschen wollen,\n" +"verwenden Sie »rm %s«." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "Ungültiger Environment-Block" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "Ungültiger Parameter %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "Environment-Block ist zu klein" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "Lesen von Platte scheiterte bei %lld, Länge %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "Ungültiger Sprungwert %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "Lesefehler bei %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "OS-Datei »%s« kann nicht geöffnet werden: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "Schreiben in die Standardausgabe fehlgeschlagen: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "Vergleichsfehler bei %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Fehler beim Öffnen der OS-Datei %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "»loopback«-Befehl ist fehlgeschlagen: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "»cryptomount«-Befehl ist fehlgeschlagen: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "UUID konnte nicht ermittelt werden" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PFAD" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Dateien in PFAD auflisten." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp DATEI LOKAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "DATEI in lokale Datei LOKAL kopieren." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat DATEI" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "DATEI in die Standardausgabe kopieren." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp DATEI LOKAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "DATEI mit lokaler Datei LOKAL vergleichen." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex DATEI" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Den Inhalt der DATEI hexadezimal anzeigen." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc DATEI" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "crc32-Prüfsumme von DATEI berechnen." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist DATEI" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Blockliste von DATEI anzeigen." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid GERÄT" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "XNU-UUID des Geräts berechnen." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "ZAHL" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "N Bytes der Ausgabedatei überspringen." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "N Bytes in Ausgabedatei verarbeiten" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Die Anzahl der Eingabedateien angeben." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Debug-Umgebungsvariable setzen." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Verschlüsselte Geräte einhängen." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "DATEI|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "ZFS-Schlüssel laden." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Daten entpacken." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Ungültige Plattenanzahl.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Plattenanzahl muss Plattenliste vorangestellt sein.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Kein Befehl angegeben.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Zu wenige Parameter für den Befehl.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Ungültiger Befehl %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ABBILDPFAD BEFEHLE" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Diagnosewerkzeug für Dateisystemtreiber." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "Name der Eingabedatei für 32-bit festlegen." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "Name der Eingabedatei für 64-bit festlegen." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "Name der Ausgabedatei festlegen. Vorgabe ist STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPTIONEN]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "32-Bit- und 64-Bit-Binary zu Apple-Universal-Binary zusammenfügen." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Eingabedatei fehlt\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "»%s« kann nicht nach »%s« kopiert werden: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "Komprimieren von %s nach %s nicht möglich" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "Verzeichnis »%s« kann nicht geöffnet werden: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "»%s« kann nicht gelöscht werden: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage wurde ohne XZ-unterstützung kompiliert" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Unbekanntes Kompressionsformat %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Unbekannte Kompression »%s«" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "Unbekanntes Zielformat %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "Sprache »%s« kann nicht gefunden werden" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s existiert nicht. Bitte geben Sie --target oder --directory an" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "Ungültige modinfo-Datei »%s«" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Unbekannte Plattform »%s-%s«" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Mehr als ein Installationsgerät?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB-Abbilder in VERZEICHNIS/%s anstelle von %s installieren" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ZIEL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"GRUB für ZIEL-Plattform installieren [Vorgabe=%s]; verfügbare Ziele: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"Das Laufwerk auch als Diskette bootfähig machen (Vorgabe für fdX-Geräte). " +"Kann mit einigen BIOS-Varianten scheitern." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "Gerätezuordnung löschen, falls bereits vorhanden" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "Trotzdem installieren, auch wenn Probleme auftreten" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "ID-Datei auch dann verwenden, wenn eine UUID verfügbar ist" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"Zu verwendendes Platten-Modul (biosdisk oder native). Diese Option ist nur " +"für BIOS-Ziele verfügbar." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"Die NVRAM-Variable »boot-device«/»Boot*« nicht aktualisieren. Diese Option " +"ist nur für EFI- und IEEE1275-Ziele verfügbar." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "GERÄT nicht auf Dateisysteme überprüfen" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "Keinen Bootsektor installieren" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Keine Reed-Solomon-Codes beim Einbetten von core.img verwenden. Diese Option " +"ist nur für x86-BIOS-Ziele verfügbar." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"Das Installationsgerät ist ein Wechseldatenträger. Diese Option ist nur bei " +"EFI verfügbar." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "KENNUNG" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"Die Kennung des Bootloaders. Diese Option ist nur auf EFI-Systemen und Macs " +"verfügbar." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "VERZEICHNIS als Wurzel der EFI-Systempartition verwenden." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "VERZ für PPC-MAC-Installation verwenden." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "DATEI als Schriftart für Beschriftung verwenden" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "FARBE für Beschriftung verwenden." + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "FARBE für Beschriftungshintergrund verwenden." + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "ZEICHENKETTE als Produktversion verwenden" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPTION] [INSTALLATIONSGERÄT]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "GRUB auf Ihrem Laufwerk installieren." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALLATIONSGERÄT muss der Name des Geräts sein.\n" +"%s kopiert GRUB-Abbilder nach %s. Auf einigen Systemen\n" +"kann es auch GRUB in den Bootsektor installieren." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "Das Laufwerk %s wurde in der Gerätetabelle mehrfach %s definiert" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Ihre Plattform konnte nicht erkannt werden. Verwenden Sie --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "%s wird für Ihre Plattform installiert.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "Kein Installationsgerät angegeben" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "EFI-Verzeichnis kann nicht gefunden werden" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "Gerät für %s konnte nicht gefunden werden (ist /dev eingehängt?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"Für %s konnte kein GRUB-Laufwerk gefunden werden. Überprüfen Sie Ihre device." +"map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s scheint keine EFI-Partition zu sein" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Einen entdeckten Fehler berichten" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "Dateisystem auf %s ist weder HFS noch HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"Versuch, einen verschlüsselten Datenträger ohne aktiviertes Cryptodisk zu " +"installieren. Setzen Sie »%s« in Datei »%s«" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Datei »%s« kann nicht angelegt werden." + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"Keine Hinweise für Ihr Betriebssystem verfügbar. Verringerte Leistung ist zu " +"erwarten." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NICHT GESTARTET:" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "Die gewählte Partition ist keine PReP-Partition" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "GRUB konnte nicht in die PReP-Partition kopiert werden" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"Die PReP-Partition ist nicht leer. Falls Sie sicher sind, dass Sie sie " +"verwenden wollen, führen Sie dd aus, um sie zu leeren: »%s«" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Kennung des EFI-Bootloaders ist nicht angegeben." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "WARNUNG: Es wurde keine plattformspezifische Installation durchgeführt" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "installation beendet. Keine Fehler aufgetreten." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Kein Pfad oder Gerät wurde angegeben.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc PFAD|--x86 DATEI" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Aufruf: %s [EINGABEDATEI [AUSGABEDATEI]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype-Fehler %d beim Laden des Glyphs 0x%x für U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (mittig)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (ganz links)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (ganz rechts)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Ersetzung außerhalb des Bereichs (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Suche außerhalb des Bereichs: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Nicht unterstützter Ersetzungstyp: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Nicht unterstützte Ersetzungsangabe: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Nicht unterstützte Coverage-Spezifikation: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "WARNUNG: Nicht unterstützte Parameter für Schrifteigenschaften: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "Ausgabe in DATEI speichern [erforderlich]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "Schriftart-Index setzen" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "VON-BIS[,VON-BIS]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "Schriftbereich festlegen" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "Schriftfamilie festlegen" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "GRÖßE" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "Schriftgröße festlegen" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "Schriftauffüllung unten einstellen" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "Schriftauffüllung oben einstellen" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "In fette Schrift umwandeln" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "Automatisches Hinting erzwingen" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "Hinting deaktivieren" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "Bitmap-Strikes beim Laden ignorieren" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "Ungültiger Schriftbereich" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIONEN] SCHRIFTDATEIEN" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Übliche Schriftdateiformate in PF2 umwandeln" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "Ausgabedatei muss angegeben werden" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType ist gescheitert" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "%s kann nicht geöffnet werden, Index %d: Fehler %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "Schriftgröße %dx%d kann nicht gesetzt werden: Freetype-Fehler %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "Präfix-Verzeichnis festlegen" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"DATEI als Memdisk-Abbild einbetten\n" +"Impliziert »-p (memdisk)/boot/grub« und setzt jedes vorher angegebene Präfix " +"außer Kraft, aber das Präfix selbst kann durch später angegebene Optionen " +"wiederum außer Kraft gesetzt werden" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "DATEI als Anfangskonfiguration einbetten" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "NOTE-Segment für CHRP IEEE1275 hinzufügen" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "Ein erzeugtes Abbild in DATEI ausgeben [Vorgabe=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "Ein Abbild im FORMAT erzeugen" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "Verfügbare Formate:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "Unbekanntes Zielformat %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPTION]… [MODULE]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Ein bootfähiges GRUB-Abbild erstellen" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Zielformat wurde nicht angegeben (verwenden Sie die Option -0)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Präfix wurde nicht angegeben (verwenden Sie die Option -p)" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"»%s« ist fehlerhaft kompiliert: Dessen Startadresse ist 0x%llx anstelle von " +"0x%llx: Fehler in ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "Name der Eingabedatei festlegen. Vorgabe ist STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Ungültiger Bezeichner für Tastaturscan %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Ungültiger Code für Tastaturscan 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"FEHLER: Keine gültige Tastaturbelegung gefunden. Überprüfen Sie die " +"Eingabe.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "GRUB-Tastaturbelegung aus dem der Linux-Konsole erstellen." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "Wurzelverzeichnis auf dem TFTP-Server" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "Relativer Pfad zum Unterverzeichnis auf dem Netzwerkserver" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Bereitet GRUB-Netzwerk-Bootabbilder in net_directory/subdir vor, wobei " +"angenommen wird, dass net_directory das TFTP-Wurzelverzeichnis ist." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "Nicht unterstützte Plattform %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Netboot-Verzeichnis für %s wurde erstellt. Richten Sie Ihren DHCP-Server so " +"ein, dass er auf %s verweist\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Anzahl vor PBKDF2-Durchläufe" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Länge der erzeugten Prüfsumme" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Länge von Salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "PBKDF2-Passwort-Prüfsumme erzeugen. " + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "Passwort konnte nicht gelesen werden" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Passwort erneut eingeben:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "Die Passwörter stimmen nicht überein" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "Zufallsdaten für Salt konnten nicht geholt werden" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "Krytografiefehler Nummer %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDF2-Prüfsumme Ihres Passworts ist %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Kein Pfad angegeben.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "PFAD" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Einen Systemdateinamen in einen für GRUB umwandeln." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ROM-Abbilder in VERZEICHNIS speichern [optional]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "DATEI als xorriso benutzen [optional]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "ZEICHENKETTE als Produktname verwenden" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"Sparc-Bootvorgang aktivieren. Die deaktiviert HFS+, APM, ARCS und Booten als " +"Festplattenabbild für i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"Aktiviert ARCS-Boot (MIPS-Rechner mit Big-Endian-Bytereihenfolge, meist " +"SGI). HFS+, APM, sparc64 und Booten als Disk-Abbild für i386-pc werden " +"deaktiviert" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Bootfähiges GRUB-Abbild für CD-ROM, Festplatte, USB-Stick und Diskette " +"erstellen." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Erzeugt ein bootfähiges CD/USB/Diskettenabbild. Argumente, die nicht zu den " +"Optionen dieses Programms gehören, werden an Xorriso übergeben und " +"indizieren Quelldateien, Quellverzeichnisse oder eine beliebige mkisofs-" +"Option, die von »%s« ausgegeben wird." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Option -- wechselt in den nativen xorriso-Befehlsmodus." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Richten Sie Supportanfragen zu Xorriso an ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPTION] QUELLE …" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "Unterstützung für %s wird aktiviert …" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ihr Xorriso unterstützt »--grub2-boot-info« nicht. Einige Funktionen sind " +"deaktiviert. Bitte verwenden Sie Xorriso in Version 1.2.9 oder neuer." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ihr Xorriso unterstützt »--grub2-boot-info« nicht. Ihr Core-Abbild ist zu " +"groß. Booten als Festplatte ist deaktiviert. Bitte verwenden Sie Xorriso in " +"Version 1.2.9 oder neuer." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Ein lauffähiges Abbild einschließlich aller Module im gewählten Format " +"erstellen" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Graftpoint-Syntax (z.B. /boot/grub/grub.cfg=./grub.cfg) wird akzeptiert" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ABBILD1 [ABBILD2 ...] EINHÄNGEPUNKT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "Abbild und Einhängepunkt werden benötigt" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "Das angegebene Argument ist ein Systemgerät, kein Pfad" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "Einträge in der Ausgabe durch ASCII-NUL-Zeichen trennen" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[Vorgabe=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "ZIEL ausgeben" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "Verfügbare Ziele:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTIONEN]… [PFAD|GERÄT]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Geräteinformationen für einen angegebenen Pfad ermitteln (oder Gerät, falls " +"die Option -d angegeben ist)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "Text aus DATEI lesen." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "FARBE für Text verwenden" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "FARBE für Hintergrund verwenden" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "Anzuzeigende Beschriftung festlegen" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "DATEI als Schrift verwenden (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Apples .disk_label darstellen." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Argumente fehlen\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[PFAD]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Überprüft die GRUB-Skriptkonfiguration auf Syntaxfehler" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntaxfehler in Zeile %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Skript »%s« enthält nichts, es wird nichts ausgeführt\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "DATEI als Boot-Abbild verwenden [Vorgabe=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "DATEI als Kern-Abbild verwenden [Vorgabe=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Kein Gerät angegeben.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Abbilder zum Booten von GERÄT einrichten.\n" +"\n" +"Sie sollten dieses Programm normalerweise nicht direkt ausführen.\n" +"Verwenden Sie stattdessen grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "GERÄT muss ein OS-Gerät sein (z.B. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Ungültiges Gerät »%s«.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "Wurzelverzeichnis, wie es zur Laufzeit angezeigt wird [Vorgabe=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"Aktuelles Syslinux-Verzeichnis, wie es zur Laufzeit angezeigt wird [Vorgabe " +"ist das übergeordnete Verzeichnis der Eingabedatei]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "Ausgabe in DATEI schreiben [Vorgabe=stdout]" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Syslinux-Konfigurationsdatei in eine für GRUB umwandeln." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "Kernel-Abbild kann nicht komprimiert werden" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "Unbekannte Kompression %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Dekompressor ist zu groß" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "Core-Abbild ist zu groß (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "Kernel-Abbild ist zu groß (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "Die Größe von diskboot.img muss %u Bytes betragen" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img entspricht nicht der bekanntermaßen funktionierenden Version. " +"Verwenden Sie dies auf eigene Gefahr" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "Firmware-Abbild ist zu groß" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "Ungültiges Zeilenformat: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "Der erste Sektor der Core-Datei ist nicht sektor-ausgerichtet" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" +"Nicht an Sektoren ausgerichtete Daten wurden in der Core-Datei gefunden" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "Die Sektoren der Core-Datei sind zu stark fragmentiert" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "Die Größe von »%s« ist nicht %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "»%s« ist zu klein" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Es wird versucht, GRUB auf einer Platte mit mehreren Partitionsbezeichnungen " +"oder sowohl Partitionsbezeichnungen als auch Dateisystemen zu installieren. " +"Dies wird derzeit noch nicht unterstützt." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"Es kann kein Dateisystem in %s erkannt werden. Sicherheitsüberprüfung kann " +"nicht ausgeführt werden" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s enthält ein %s-Dateisystem, welches bekanntermaßen keinen Platz für einen " +"DOS-Betriebssystemstart bereithält. Die Installation von GRUB könnte die " +"ZERSTÖRUNG DES DATEISYSTEMS nach sich ziehen, sofern Daten durch grub-setup " +"überschrieben werden. Die Option --skip-fs-probe deaktiviert diese " +"Überprüfung, verwenden Sie dies auf eigene Gefahr." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s scheint eine %s-Partitionstabelle zu enthalten, welche bekanntermaßen " +"keinen Platz für einen DOS-Betriebssystemstart bereithält. Die Installation " +"von GRUB könnte die ZERSTÖRUNG DES DATEISYSTEMS nach sich ziehen, sofern " +"Daten durch grub-setup überschrieben werden. Die Option --skip-fs-probe " +"deaktiviert diese Überprüfung, verwenden Sie dies auf eigene Gefahr." + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s scheint eine %s-Partitionstabelle und LDM zu enthalten, welches " +"bekanntermaßen keine sichere Kombination ist. Die Installation von GRUB " +"könnte die ZERSTÖRUNG DES DATEISYSTEMS nach sich ziehen, sofern Daten durch " +"grub-setup überschrieben werden. Die Option --skip-fs-probe deaktiviert " +"diese Überprüfung, verwenden Sie dies auf eigene Gefahr." + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Es wird versucht, GRUB auf einer nicht partitionierten Platte oder in eine " +"Partition zu installieren. Das ist eine SCHLECHTE Idee." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Es wird versucht, GRUB auf einer Platte mit mehreren Partitionsbezeichnungen " +"zu installieren. Dies wird derzeit noch nicht unterstützt." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partitionstyp »%s« unterstützt keine Einbettungen" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Dateisystem »%s« unterstützt keine Einbettungen" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Ihr Einbettungsbereich ist ungewöhnlich klein. core.img würde nicht " +"hineinpassen." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "Kein Terminator im Core-Abbild" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "Version von core.img passt nicht" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"Einbettung ist nicht möglich, jedoch für die Installation mit RAID und LVM " +"erforderlich" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "Dateisystemtyp auf %s konnte nicht ermittelt werden" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "Dateisystem »%s« unterstützt keine Blocklisten" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"Einbettung ist nicht möglich, jedoch für die Installation auf mehreren " +"Laufwerken erforderlich" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Einbettung ist nicht möglich. GRUB kann in dieser Konfiguration nur mittels " +"Blocklisten installiert werden. Blocklisten sind allerdings UNZUVERLÄSSIG " +"und deren Verwendung wird daher nicht empfohlen." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "mit Blocklisten wird nicht fortgesetzt" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "Blocklisten sind ungültig" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "Blocklisten sind unvollständig" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Aufruf: %s -o AUSGABE CKBMAP_ARGUMENTE...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Eine GRUB-Tastaturlayoutdatei erstellen." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "Diese Meldung anzeigen und beenden" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "Versionsinformationen ausgeben und beenden" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s erstellt eine Tastaturbelegung für GRUB mittels ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Melden Sie Fehler an ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: Option erwartet ein Argument -- »%s«\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Aufruf: %s [OPTION]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Eine Grub-Konfigurationsdatei erstellen" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "Erstellte Konfiguration in DATEI ausgeben [Vorgabe=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Unerkannte Option »%s«\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Sie müssen dies als Root ausführen\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Nicht gefunden.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "GRUB-Konfigurationsdatei wird erstellt …" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"In der erzeugten GRUB-Konfigurationsdatei wurden\n" +"Syntaxfehler entdeckt. Stellen Sie sicher, das die Dateien\n" +"/etc/default/grub und /etc/grub.d/* fehlerfrei sind oder\n" +"erstellen Sie einen Fehlerbericht mit %s als Anhang." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "erledigt" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Warnung:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Aufruf: %s [OPTION] MENÜEINTRAG\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Den Standard-Booteintrag für GRUB festlegen (nur für den nächsten " +"Bootvorgang)." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB-Abbilder wurden im Verzeichnis VERZ/%s anstelle von %s erwartet" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Mehr als ein Menüeintrag?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Kein Menüeintrag angegeben." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Den voreingestellten Booteintrag für GRUB festlegen." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Dies erfordert die Einstellung GRUB_DEFAULT=saved in %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"MENÜEINTRAG ist eine Zahl, ein Titel oder Bezeichner eines Menüeintrags." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Serielles Terminal wurde angefordert, aber GRUB_SERIAL_COMMAND wurde nicht " +"angegeben. Standardparameter werden verwendet." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Thema gefunden: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Hintergrund gefunden: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Bildformat nicht unterstützt" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"GRUB_TIMEOUT auf einen von Null verschiedenen Wert setzen, wenn " +"GRUB_HIDDEN_TIMEOUT als nicht mehr unterstützt angegeben wird." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "GNU Mach wurde gefunden: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Hurd-Modul gefunden: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"Hurd-Bestandteile wurden gefunden, die aber zum Booten nicht ausreichen." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, mit Hurd %s (Wiederherstellungsmodus)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, mit Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Bitte verwenden Sie nicht den alten Titel »%s« für GRUB_DEFAULT, verwenden " +"Sie »%s« (für Versionen vor 2.00) oder »%s« (für 2.00 oder neuer)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "GNU Mach wird geladen …" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Hurd wird geladen …" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Erweiterte Optionen für %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Illumos-Kernel wird geladen …" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, mit kFreeBSD %s (Wiederherstellungsmodus)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, mit kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "FreeBSD-Kernel %s wird geladen …" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "FreeBSD-Kernel gefunden: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Kernel-Modulverzeichnis gefunden: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, mit Linux %s (Wiederherstellungsmodus)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, mit Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Linux %s wird geladen …" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Initiale Ramdisk wird geladen …" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Linux-Abbild gefunden: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "initrd-Abbild gefunden: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, mit Kernel %s (über %s, Wiederherstellungsmodus)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, mit Kernel %s (über %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "NetBSD-Kernel gefunden: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (Lader)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (Lader)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "%s auf %s gefunden (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(auf %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, mit Xen %s und Linux %s (Wiederherstellungsmodus)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, mit Xen %s und Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, mit Xen-Hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Xen %s wird geladen …" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen-Hypervisor, Version %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Erweiterte Optionen für %s (mit Xen-Hypervisor)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "%s auf %s gefunden\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s wird von grub-mkconfig noch nicht unterstützt.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Nicht unterstütztes Ersetzungs-Flag: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Unbekanntes gsub-Schriftmerkmal 0x%x (%s)\n" + +#~| msgid "Assume input is hex." +#~ msgid "assume isolinux." +#~ msgstr "Eingabe wird als hexadezimal angenommen." + +#~| msgid "Assume input is hex." +#~ msgid "assume pxelinux." +#~ msgstr "Eingabe wird als hexadezimal angenommen." + +#~| msgid "Assume input is hex." +#~ msgid "assume syslinux." +#~ msgstr "Eingabe wird als hexadezimal angenommen." + +#~| msgid "" +#~| "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "" +#~ "%s kopiert GRUB-Abbilder in Netz_Ordner/Unterordner/CPU-Zielplattform\\n" + +#~| msgid "" +#~| "%s generates a bootable rescue image with specified source files, source " +#~| "directories, or mkisofs options listed by the output of `%s'\\n" +#~ msgid "" +#~ "Generates a bootable rescue image with specified source files, source " +#~ "directories, or mkisofs options listed by the output of `%s'.\n" +#~ "\n" +#~ "Option -- switches to native xorriso command mode.\n" +#~ "\n" +#~ "Mail xorriso support requests to ." +#~ msgstr "" +#~ "%s erstellt ein bootfähiges Rettungs-Abbild aus den angegebenen " +#~ "Quelldateien, Quellordnern oder mkisofs-Optionen, welche die Ausgabe von " +#~ "»%s« auflistet\\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "Dateisystemmodul, GRUB-Laufwerk, Systemgerät, Partitionszuordnungsmodul, " +#~ "Abstraktionsmodul oder UUID des kryptografischen Containers ausgeben " +#~ "[Vorgabe=fs]" + +#~| msgid "set prefix directory [default=%s]" +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "Präfix-Ordner festlegen [Vorgabe=%s]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Adressbereich entspricht nicht dem RAM" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign wird auf Ihrem System nicht unterstützt" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Falls DATEINAME »-« ist, dann wird der Vorgabewert %s verwendet. " + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "Nur die ASCII-Bitmaps speichern" + +#~ msgid "create width summary file" +#~ msgstr "Breitendefinition in Datei speichern" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Die Option --ascii-bitmaps unterstützt keine Bereiche (verwendet stets " +#~ "ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "" +#~ "WARNUNG: Die Sicherheit Ihres Zufallszahlengenerators ist unbekannt\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "Lesen des ersten Sektors des Core-Abbildes ist gescheitert" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "DATEI als grub-setup verwenden" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "DATEI als grub-mkrelpath verwenden" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "DATEI als grub-probe verwenden" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "Installationsgerät muss als Name einer Systemdatei angegeben werden." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Pfad »%s« ist beim Booten von GRUB nicht lesbar. Die Installation ist " +#~ "unmöglich, wird abgebrochen.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Automatische Erkennung des Dateisystems von %s ist gescheitert.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Versuchen Sie mit --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Falls das Problem weiterhin besteht, melden Sie dies als Fehler zusammen " +#~ "mit der Ausgabe von %s an <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "»%s« ist fehlgeschlagen.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "GRUB-Laufwerk für %s konnte nicht gefunden werden. Der EFI-Bootmanager-" +#~ "Eintrag konnte nicht erstellt werden.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "grub.cfg wird erstellt …" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "DATEI als grub-glue-efi verwenden" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "DATEI als grub-render-label verwenden" + +#~ msgid "Packed pixel " +#~ msgstr "Gepackte Pixel " + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "" +#~ "GRUB-Abbilder in ORDNER verwenden. Erhält Vorrang gegenüber dem Ziel" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "Speicherinfo für »%s« enthält keinen Namen" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "Falsche Namenslänge für Speicherinfo für »%s«" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "Speichername für »%s« ist nicht NUL-terminiert" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "" +#~ "Physischer Datenträger %s konnte nicht gefunden werden. Überprüfen Sie " +#~ "Ihre device.map" + +#~ msgid "diskboot.img is not one sector size" +#~ msgstr "Die Größe von diskboot.img entspricht nicht einem Sektor" + +#~ msgid "loopback command fails" +#~ msgstr "Loopback-Befehls ist fehlgeschlagen." + +#~ msgid "cryptomount command fails: %s" +#~ msgstr "Cryptomount-Befehl ist fehlgeschlagen: %s" + +#~ msgid "%s: option requires an argument -- `%s'" +#~ msgstr "%s: Option erwartet ein Argument -- »%s«" + +#~ msgid "Make GRUB rescue image." +#~ msgstr "Ein Abbild eines GRUB-Rettungsmediums erstellen" + +#~ msgid "Show v2 and v3 tablesv only." +#~ msgstr "Nur v2- und v3-Tabellen darstellen." + +#~ msgid "Unknown " +#~ msgstr "Unbekannt" + +#~ msgid "Map table size exceeded" +#~ msgstr "Maximale Tabellengröße überschritten" + +#~ msgid "Try `%s --help' for more information.\n" +#~ msgstr "Rufen Sie »%s --help« auf, um weitere Informationen zu erhalten.\n" + +#~ msgid "" +#~ "Usage: %s [OPTION]...\n" +#~ "\n" +#~ "GRUB emulator.\n" +#~ "\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=host]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -v, --verbose print verbose messages\n" +#~ " -H, --hold[=SECONDS] wait until a debugger will attach\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Aufruf: %s [OPTION]...\n" +#~ "\n" +#~ "GRUB-Emulator.\n" +#~ "\n" +#~ " -r, --root-device=DEV GERÄT als Root-Gerät verwenden " +#~ "[Vorgabe=host]\n" +#~ " -m, --device-map=FILE DATEI als Gerätezuordnung verwenden [Vorgabe=" +#~ "%s]\n" +#~ " -d, --directory=DIR GRUB-Dateien in ORDNER verwenden [Vorgabe=" +#~ "%s]\n" +#~ " -v, --verbose Ausführliche Meldungen anzeigen\n" +#~ " -H, --hold[=SECONDS] Warten, bis sich ein Debugger einklinkt\n" +#~ " -h, --help Diese Meldung anzeigen und beenden\n" +#~ " -V, --version Versionsinformation anzeigen und beenden\n" +#~ "\n" +#~ "Fehler bitte an <%s> melden.\n" + +#~ msgid "" +#~ "%s is deprecated. Use set gfxpayload=text before linux command instead.\n" +#~ msgstr "" +#~ "%s ist veraltet. Verwenden Sie stattdessen gfxpayload=text vor dem Linux-" +#~ "Befehl.\n" + +#~ msgid "Serial terminal not available on this platform." +#~ msgstr "Ein serielles Terminal ist auf dieser Plattform nicht verfügbar." + +#~ msgid "Usage: %s [OPTION] install_device" +#~ msgstr "Aufruf: %s [OPTION] Installationsgerät" + +#~ msgid "Usage: %s [OPTION] [install_device]" +#~ msgstr "Aufruf: %s [OPTION] [Installationsgerät]" + +#~ msgid "the ID of bootloader." +#~ msgstr "Die Kennung des Bootloaders" + +#~ msgid "" +#~ "UUID needed with ata mod, but the filesystem containing %s does not " +#~ "support UUIDs.\\n" +#~ msgstr "" +#~ "Im ATA-Modus wird eine UUID benötigt, aber das Dateisystem %s unterstützt " +#~ "keine UUIDs.\\n" + +#~ msgid "" +#~ "UUID needed with cross-disk installs, but the filesystem containing %s " +#~ "does not support UUIDs.\\n" +#~ msgstr "" +#~ "Für plattenübergreifende Installationen wird eine UUID benötigt, aber das " +#~ "Dateisystem, welches %s enthält, unterstützt keine UUIDs.\\n" + +#~ msgid "No font for video terminal found." +#~ msgstr "Keine Schrift für Video-Terminal gefunden." + +#~ msgid "Usage: %s [OPTION] install_device\\n" +#~ msgstr "Aufruf: %s [OPTION] Installationsgerät\\n" + +#~ msgid "Usage: %s [OPTION] entry\\n" +#~ msgstr "Aufruf: %s [OPTION] Eingabe\\n" + +#, fuzzy +#~ msgid "file name expected" +#~ msgstr "Ein Argument wurde erwartet" + +#~ msgid "can't find command %s" +#~ msgstr "Befehl %s kann nicht gefunden werden." + +#~ msgid "Load an additional file." +#~ msgstr "Eine zusätzliche Datei laden." + +#~ msgid "can't open device" +#~ msgstr "Gerät kann nicht geöffnet werden" + +#, fuzzy +#~ msgid "unknown architecture type 0x%x" +#~ msgstr "Unbekannter Gerätetyp %s\n" + +#, fuzzy +#~ msgid "invalid ELF format" +#~ msgstr "Ungültiges Zeilenformat: %s" + +#, fuzzy +#~ msgid "start symbol is not defined" +#~ msgstr "Adresse nicht gefunden" + +#~ msgid "No open parenthesis found" +#~ msgstr "Keine öffnende Klammer gefunden" + +#~ msgid "No close parenthesis found" +#~ msgstr "Keine schließende Klammer gefunden" + +#~ msgid "No filename found" +#~ msgstr "Kein Dateiname gefunden" + +#, fuzzy +#~ msgid "unrecognised netword interface `%s'" +#~ msgstr "Nicht erkannte Schnittstelle %s" + +#~ msgid "At least 3 arguments are expected" +#~ msgstr "Es werden mindestens drei Argumente erwartet" + +#, fuzzy +#~ msgid "cannot seek the file `%s': %s" +#~ msgstr "Datei %s kann nicht durchsucht werden" + +#, fuzzy +#~ msgid "cannot read the file `%s': %s" +#~ msgstr "Datei %s kann nicht gelesen werden" + +#, fuzzy +#~ msgid "Read 8-bit from PORT." +#~ msgstr "byte aus PORT lesen." + +#, fuzzy +#~ msgid "Read 16-bit from PORT." +#~ msgstr "byte aus PORT lesen." + +#, fuzzy +#~ msgid "Read 32-bit from PORT." +#~ msgstr "byte aus PORT lesen." + +#~ msgid "Make partition hidden" +#~ msgstr "Partition als verborgen markieren" + +#~ msgid "Check hash list file." +#~ msgstr "Hash-Listendatei überprüfen." + +#~ msgid "BadRAM" +#~ msgstr "BadRAM" + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Definition des Menüeintrags als Zeichenkette." + +#~ msgid "Device %d\n" +#~ msgstr "Gerät %d\n" + +#~ msgid "Variable names to update with matches." +#~ msgstr "Zu aktualisierende Variablennamen anhand von Übereinstimmungen." + +#~ msgid " Failed" +#~ msgstr " Fehlgeschlagen" + +#~ msgid "Firmware is marked as tainted, refusing to initialize." +#~ msgstr "" +#~ "Firmware ist als fehlerhaft markiert, Initialisierung wird verweigert." + +#~ msgid "State: " +#~ msgstr "Status:" + +#~ msgid "removed " +#~ msgstr "entfernt" + +#~ msgid "offline " +#~ msgstr "offline " + +#~ msgid "online" +#~ msgstr "online" + +#~ msgid "Unknown VDEV type: %s\n" +#~ msgstr "Unbekannter VDEV-Typ: %s\n" + +#~ msgid "Authenticate users" +#~ msgstr "Benutzer legitimieren" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 visuell" + +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgid "Unknown key %s\n" +#~ msgstr "Unbekannter Schlüssel %s\n" + +#~ msgid "do not probe any floppy drive" +#~ msgstr "Kein Diskettenlaufwerk überprüfen" + +#~ msgid "Expose v1 tables." +#~ msgstr "v1-Tabellen darstellen." + +#~ msgid "" +#~ "\n" +#~ "Glyph #%d, U+%04x\n" +#~ msgstr "" +#~ "\n" +#~ "Glyph #%d, U+%04x\n" + +#~ msgid "Fake BIOS." +#~ msgstr "Fake-BIOS." + +#~ msgid "Read word from PORT." +#~ msgstr "word aus PORT lesen." + +#~ msgid "Read dword from PORT." +#~ msgstr "dword aus PORT lesen." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "word-WERT in PORT schreiben." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "dword-WERT in PORT schreiben." + +#~ msgid "Read word from ADDR." +#~ msgstr "word aus ADDR lesen." + +#~ msgid "Read dword from ADDR." +#~ msgstr "dword aus ADDR lesen." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "word-WERT in ADDR schreiben." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "dword-WERT in ADDR schreiben." + +#~ msgid "USERNAME" +#~ msgstr "BENUTZERNAME" + +#~ msgid "Dump memory." +#~ msgstr "Speicherinhalt sichern." + +#~ msgid "Hex dump FILE." +#~ msgstr "Hex-Dump von DATEI." + +#~ msgid "Error loading file %s: %s\n" +#~ msgstr "Fehler beim Laden der Datei %s: %s\n" + +#~ msgid "STR" +#~ msgstr "ZEICHENKETTE" + +#~ msgid "Use FILE as the device map [default=%s]" +#~ msgstr "DATEI als Geräteverzeichnis verwenden [Vorgabe=%s]" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "GERÄT als Root-Gerät verwenden [Vorgabe=Vermutung]" + +#~ msgid "Install even if problems are detected" +#~ msgstr "Trotzdem installieren, auch wenn Probleme auftreten" + +#~ msgid "DIRECTORY" +#~ msgstr "ORDNER" + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "KEY" +#~ msgstr "SCHLÜSSEL" + +#~ msgid "cannot get the real path of `%s'" +#~ msgstr "Realer Pfad von »%s« kann nicht ermittelt werden" + +#~ msgid "premature end of file %s: " +#~ msgstr "Unerwartetes Ende der Datei %s:" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "Print verbose messages." +#~ msgstr "Ausführliche Meldungen ausgeben." + +#~ msgid "no output file is specified" +#~ msgstr "Keine Ausgabedatei angegeben" + +#~ msgid "No terminator in the core image" +#~ msgstr "Kein Terminator im Core-Abbild" + +#~ msgid "DEV" +#~ msgstr "GERÄT" + +#~ msgid "output file must be given" +#~ msgstr "Ausgabedatei muss angegeben werden" + +#~ msgid "format must be specified" +#~ msgstr "Format muss angegeben werden" + +#~ msgid "fstat failed" +#~ msgstr "fstat gescheitert" + +#~ msgid "no device.map" +#~ msgstr "Keine device.map" + +#, fuzzy +#~ msgid "cannot stat `%s'" +#~ msgstr "»%s« kann nicht geöffnet werden" + +#~ msgid "write error" +#~ msgstr "Schreibfehler" + +#~ msgid "seek error" +#~ msgstr "Suchfehler" + +#~ msgid "Couldn't open %s for reading: %s\n" +#~ msgstr "»%s« konnte nicht zum Lesen geöffnet werden: %s\n" + +#~ msgid "Couldn't open %s for writing: %s\n" +#~ msgstr "»%s« konnte nicht zum Schreiben geöffnet werden: %s\n" + +#~ msgid "set output file" +#~ msgstr "Ausgabedatei festlegen" + +#~ msgid "the core image is too big" +#~ msgstr "Core-Abbild ist zu groß" + +#~ msgid "cannot open %s" +#~ msgstr "%s kann nicht geöffnet werden" + +#~ msgid "" +#~ "Usage: %s [OPTIONS]\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Aufruf: %s [OPTIONEN]\n" +#~ "\n" +#~ "Melden Sie Fehler an <%s>.\n" + +#~ msgid "Couldn't open input file: %s\n" +#~ msgstr "Eingabedatei kann nicht geöffnet werden: %s\n" + +#~ msgid "Couldn't open output file: %s\n" +#~ msgstr "Ausgabedatei kann nicht geöffnet werden: %s\n" + +#, fuzzy +#~ msgid "cannot open 'vendor' node of `%s'" +#~ msgstr "»%s« kann nicht geöffnet werden" + +#, fuzzy +#~ msgid "cannot read 'vendor' node of `%s'" +#~ msgstr "%llu Bytes können nicht aus %s gelesen werden" + +#, fuzzy +#~ msgid "cannot open SAS PHY ID `%s'\n" +#~ msgstr "»%s« kann nicht geöffnet werden" + +#~ msgid "fflush failed" +#~ msgstr "fflush gescheitert" + +#, fuzzy +#~ msgid "cannot stat %s" +#~ msgstr "%s kann nicht geöffnet werden" + +#~ msgid "read failed" +#~ msgstr "read gescheitert" + +#~ msgid "cannot read %s" +#~ msgstr "%s kann nicht gelesen werden" + +#~ msgid "write failed" +#~ msgstr "Schreibfehler" + +#~ msgid "Unload PXE environment." +#~ msgstr "PXE-Umgebung entladen." + +#~ msgid "[DEVICE]" +#~ msgstr "[GERÄT]" + +#~ msgid "open error" +#~ msgstr "Fehler beim Öffnen" + +#~ msgid "Must use absolute path.\n" +#~ msgstr "Absoluter Pfad ist notwendig.\n" + +#~ msgid "the core image is too small" +#~ msgstr "Core-Abbild ist zu klein" + +#~ msgid "prefix is too long" +#~ msgstr "Präfix ist zu lang" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Aufruf: %s [OPTION]... [MODULE]\n" +#~ "\n" +#~ "Erstellen eines bootfähigen GRUB-Abbildes.\n" +#~ "\n" +#~ " -d, --directory=ORDN Abbilder und Module in ORDN verwenden [Vorgabe=" +#~ "%s/@platform@]\n" +#~ " -p, --prefix=ORDN Ordner für grub_prefix festlegen [Vorgabe=%s]\n" +#~ " -m, --memdisk=DATEI DATEI als memdisk-Abbild einbetten\n" +#~ " -c, --config=DATEI DATEI als Boot-Konfiguration einbetten\n" +#~ " -n, --note NOTE-Segment für CHRP Open Firmware hinzufügen\n" +#~ " -o, --output=DATEI Erzeugtes Abbild in DATEI ausgeben " +#~ "[Vorgabe=stdout]\n" +#~ " -O, --format=FORMAT Abbild in FORMAT erzeugen [Vorgabe=stdout]\n" +#~ " Verfügbare Formate: %s\n" +#~ " -C, --compression=(xz|none|auto) Zu verwendende Kompression\n" +#~ " -h, --help Diese Meldung anzeigen und beenden\n" +#~ " -V, --version Versionsinformation anzeigen und beenden\n" +#~ " -v, --verbose Ausführliche Meldungen anzeigen\n" +#~ "\n" +#~ "Fehler bitte an <%s> melden.\n" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "Einbettung ist nicht möglich, jedoch erforderlich, wenn das Root-Gerät " +#~ "sich in einem RAID-Verbund oder einem LVM-Datenträger befindet." + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "Das Root-Gerät kann nicht ermittelt werden. Verwenden Sie die Option »--" +#~ "root-device«." + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "Kompatible VESA BIOS-Erweiterunsmodi für Video auflisten." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "Unterstützung für VESA BIOS-Erweiterung 2.0+ überprüfen." + +#~ msgid "Set the root device." +#~ msgstr "Root-Gerät festlegen." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "Einen Datenträger mit Partitionen simulieren." + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "" +#~ "Es wird versucht, GRUB in eine Partition anstelle in den MBR zu " +#~ "installieren. Das ist eine SCHLECHTE Idee." + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "" +#~ "Benutzen Sie --force, wenn Sie wirklich Blocklisten verwenden wollen." + +#~ msgid "A boot catalog exists and appears corrupted.\n" +#~ msgstr "Ein Boot-Katalog existiert, scheint aber beschädigt zu sein.\n" + +#~ msgid "Please check the following file: %s.\n" +#~ msgstr "Bitte überprüfen Sie folgende Datei: %s.\n" + +#~ msgid "This file must be removed before a bootable CD can be done.\n" +#~ msgstr "" +#~ "Diese Datei muss entfernt werden, bevor eine bootfähige CD erstellt " +#~ "werden kann.\n" + +#~ msgid "Error creating boot catalog (%s)" +#~ msgstr "Fehler beim Erstellen des Boot-Katalogs (%s)" + +#~ msgid "Error writing to boot catalog (%s)" +#~ msgstr "Fehler beim Speichern des Boot-Katalogs (%s)" + +#~ msgid "Boot catalog cannot be found!\n" +#~ msgstr "Boot-Katalog kann nicht gefunden werden!\n" + +#~ msgid "Boot image cannot be found!\n" +#~ msgstr "Boot-Abbild kann nicht gefunden werden!\n" + +#~ msgid "" +#~ "\n" +#~ "Size of boot image is %d sectors" +#~ msgstr "" +#~ "\n" +#~ "Das Boot-Abbild umfasst %d Sektoren" + +#~ msgid "No emulation\n" +#~ msgstr "Keine Emulation\n" + +#~ msgid "Emulating a 1.44 meg floppy\n" +#~ msgstr "Eine 1,44 MB-Diskette emulieren\n" + +#~ msgid "Emulating a 2.88 meg floppy\n" +#~ msgstr "Eine 2,88 MB-Diskette emulieren\n" + +#~ msgid "Emulating a 1.2 meg floppy\n" +#~ msgstr "Eine 1,2 MB-Diskette emulieren\n" + +#~ msgid "" +#~ "\n" +#~ "Error - boot image is not the an allowable size.\n" +#~ msgstr "" +#~ "\n" +#~ "Fehler - Boot-Abbild hat keine akzeptable Größe.\n" + +#~ msgid "Error opening boot catalog for update" +#~ msgstr "Fehler beim Öffnen des Boot-Katalogs zum Aktualisieren" + +#~ msgid "Error writing to boot catalog" +#~ msgstr "Fehler beim Schreiben in den Boot-Katalog" + +#~ msgid "Error opening boot image file '%s' for update" +#~ msgstr "Fehler beim Öffnen der Boot-Abbilddatei »%s« zum Aktualisieren" + +#~ msgid "Boot image file '%s' changed unexpectedly" +#~ msgstr "Boot-Abbilddatei »%s« wurde unerwartet geändert" + +#~ msgid "Error writing to boot image (%s)" +#~ msgstr "Fehler beim Schreiben in das Boot-Abbild (%s)" + +#~ msgid "Unable to generate sane path tables - too many directories (%d)\n" +#~ msgstr "" +#~ "Erzeugung der Sane-Pfadtabellen ist nicht möglich - zu viele Ordner (%d)\n" + +#~ msgid "Entry %d not in path tables\n" +#~ msgstr "Eintrag %d nicht in Pfadtabellen vorhanden\n" + +#~ msgid "Joliet path table lengths do not match %d %d\n" +#~ msgstr "Längen der Joliet-Pfadtabellen %d %d stimmen nicht überein\n" + +#~ msgid "Unable to locate relocated directory\n" +#~ msgstr "Geänderter Ordner kann nicht gefunden werden\n" + +#~ msgid "Fatal goof - unable to find directory location\n" +#~ msgstr "Fataler Fehler - Ort des Ordners kann nicht gefunden werden\n" + +#~ msgid "Unexpected joliet directory length %d %d %s\n" +#~ msgstr "Unerwartete Länge des Joliet-Ordners %d %d %s\n" + +#~ msgid "Using \"%s\"\n" +#~ msgstr "»%s« wird verwendet\n" + +#~ msgid "%s:%d: name required\n" +#~ msgstr "%s:%d: Name erforderlich\n" + +#~ msgid "%s:%d: equals sign required\n" +#~ msgstr "%s:%d: Gleichheitszeichen erforderlich\n" + +#~ msgid "%s:%d: field name \"%s\" unknown\n" +#~ msgstr "%s:%d: Feldname »%s« ist unbekannt\n" + +#~ msgid "Usage: %s [options] file...\n" +#~ msgstr "Aufruf: %s [Optionen] Datei...\n" + +#~ msgid "Required boot image pathname missing\n" +#~ msgstr "Pfadname des Boot-Abbildes ist notwendig, fehlt aber\n" + +#~ msgid "Required boot catalog pathname missing\n" +#~ msgstr "Pfadname des Boot-Katalogs ist notwendig, fehlt aber\n" + +#~ msgid "Ignoring -no-emul-boot (no-emulation is the default behaviour)\n" +#~ msgstr "" +#~ "-no-emul-boot wird ignoriert (no-emulation ist das Standardverhalten)\n" + +#~ msgid "Abstract filename string too long\n" +#~ msgstr "»Abstract«-Zeichenkette für Dateiname ist zu lang\n" + +#~ msgid "Application-id string too long\n" +#~ msgstr "»Application-id«-Zeichenkette ist zu lang\n" + +#~ msgid "Bibliographic filename string too long\n" +#~ msgstr "»Bibliographic«-Zeichenkette für Dateiname ist zu lang\n" + +#~ msgid "Copyright filename string too long\n" +#~ msgstr "»Copyright«-Zeichenkette für Dateiname ist zu lang\n" + +#~ msgid "Preparer string too long\n" +#~ msgstr "»Preparer«-Zeichenkette ist zu lang\n" + +#~ msgid "Publisher string too long\n" +#~ msgstr "»Publisher«-Zeichenkette ist zu lang\n" + +#~ msgid "System ID string too long\n" +#~ msgstr "»System ID«-Zeichenkette ist zu lang\n" + +#~ msgid "Volume ID string too long\n" +#~ msgstr "»Volume ID«-Zeichenkette ist zu lang\n" + +#~ msgid "Volume set ID string too long\n" +#~ msgstr "»Volume set ID«-Zeichenkette ist zu lang\n" + +#~ msgid "Volume set sequence number too big\n" +#~ msgstr "Sequenznummer des Datenträgersatzes ist zu groß\n" + +#~ msgid "date string must be 16 characters.\n" +#~ msgstr "Datumszeichenkette muss aus 16 Zeichen bestehen.\n" + +#~ msgid "Warning: setrlimit" +#~ msgstr "Warnung: setrlimit" + +#~ msgid "Multisession usage bug: Must specify -C if -M is used.\n" +#~ msgstr "" +#~ "Für Mehrfachsitzungen muss -C angegeben werden, falls -M benutzt wird.\n" + +#~ msgid "" +#~ "Warning: -C specified without -M: old session data will not be merged.\n" +#~ msgstr "" +#~ "Warnung: -C wurde ohne -M angegeben: alte Sitzungsdaten werden nicht " +#~ "berücksichtigt.\n" + +#~ msgid "re-directing all messages to %s\n" +#~ msgstr "Alle Meldungen werden zu %s umgeleitet\n" + +#~ msgid "Unable to open previous session image %s\n" +#~ msgstr "Abbild der vorherigen Sitzung %s kann nicht geöffnet werden\n" + +#~ msgid "Joliet tree sort failed.\n" +#~ msgstr "Sortierung des Joliet-Baums ist gescheitert.\n" + +#~ msgid "Unable to open /dev/null\n" +#~ msgstr "/dev/null kann nicht geöffnet werden\n" + +#~ msgid "Unable to open disc image file\n" +#~ msgstr "Abbilddatei der Platte kann nicht geöffnet werden\n" + +#~ msgid "%llu extents written (%llu MiB)\n" +#~ msgstr "%llu Einheiten geschrieben (%llu MiB)\n" + +#~ msgid "Seek error on old image\n" +#~ msgstr "Fehler beim Durchsuchen eines alten Abbildes\n" + +#~ msgid "**Bad RR version attribute" +#~ msgstr "**Falsches RR-Versionsattribut" + +#~ msgid "" +#~ "Warning: Neither Rock Ridge (-R) nor TRANS.TBL (-T) name translations " +#~ "were found on previous session. ISO (8.3) file names have been used " +#~ "instead.\n" +#~ msgstr "" +#~ "Warnung: Weder RockRidge (-R) noch TRANS.TBL (-T)-Namensübersetzungen " +#~ "wurden in der vorherigen Sitzung gefunden. ISO (8.3)-Dateinamen wurden " +#~ "stattdessen verwendet.\n" + +#~ msgid "Read error on old image %s\n" +#~ msgstr "Fehler beim Lesen des alten Abbildes %s\n" + +#~ msgid "Special parameters for cdwrite not specified with -C\n" +#~ msgstr "Spezielle Parameter für cdwrite wurden nicht mit -C angegeben\n" + +#~ msgid "Malformed cdwrite parameters\n" +#~ msgstr "Ungültige Parameter für cdwrite\n" + +#~ msgid "Unable to insert transparent compressed file - name conflict\n" +#~ msgstr "" +#~ "Transparente komprimierte Datei kann nicht eingefügt werden - " +#~ "Namenskonflikt\n" + +#~ msgid "Extension record too long\n" +#~ msgstr "Erweiterungsaufzeichnung ist zu lang\n" + +#~ msgid "Fatal goof\n" +#~ msgstr "Fataler Fehler\n" + +#~ msgid "Unable to generate unique name for file %s\n" +#~ msgstr "Eindeutiger Name für Datei %s kann nicht erzeugt werden\n" + +#~ msgid "Fatal error - RR overflow for file %s\n" +#~ msgstr "Fataler Fehler - RR-Überlauf für Datei %s\n" + +#~ msgid "Translation table size mismatch %d %d\n" +#~ msgstr "Größe der Übersetzungstabellen %d %d stimmt nicht überein\n" + +#~ msgid "Unable to locate directory parent\n" +#~ msgstr "Ort des Elternordners kann nicht bestimmt werden\n" + +#~ msgid "Scanning %s\n" +#~ msgstr "%s wird eingelesen\n" + +#~ msgid "Overflow of stat buffer\n" +#~ msgstr "Überlauf des stat-Zwischenspeichers\n" + +#~ msgid "Excluded by match: %s\n" +#~ msgstr "Ausgeschlossen nach Übereinstimmung: %s\n" + +#~ msgid "Excluded: %s\n" +#~ msgstr "Ausgeschlossen: %s\n" + +#~ msgid "Non-existant or inaccessible: %s\n" +#~ msgstr "Nicht vorhanden oder kein Zugriff möglich: %s\n" + +#~ msgid "Unable to stat file %s - ignoring and continuing.\n" +#~ msgstr "" +#~ "Statusermittlung der Datei %s nicht möglich - wird ignoriert und " +#~ "fortgesetzt.\n" + +#~ msgid "Symlink %s ignored - continuing.\n" +#~ msgstr "Symbolische Verknüpfung %s wird ignoriert und fortgesetzt.\n" + +#~ msgid "Already cached directory seen (%s)\n" +#~ msgstr "Bereits zwischengespeicherter Ordner erkannt (%s)\n" + +#~ msgid "File %s is not readable (%s) - ignoring\n" +#~ msgstr "Datei %s ist nicht lesbar (%s) - wird ignoriert\n" + +#~ msgid "Directory loop - fatal goof (%s %lx %lu).\n" +#~ msgstr "Ordnerschleife - fataler Fehler (%s %lx %lu).\n" + +#~ msgid "Unknown file type %s - ignoring and continuing.\n" +#~ msgstr "Unbekannter Dateityp %s - wird ignoriert und fortgesetzt.\n" + +#~ msgid "Hidden from ISO9660 tree: %s\n" +#~ msgstr "Im ISO9660-Baum verborgen: %s\n" + +#~ msgid "Hidden from Joliet tree: %s\n" +#~ msgstr "Im Joliet-Baum verborgen: %s\n" + +#~ msgid "Directories too deep %s\n" +#~ msgstr "Ordnertiefe %s zu groß\n" + +#~ msgid "Unable to delete non-empty directory\n" +#~ msgstr "Nicht leerer Ordner kann nicht entfernt werden\n" + +#~ msgid "Unable to locate child directory in parent list\n" +#~ msgstr "Kindordner kann in Elternliste nicht gefunden werden\n" + +#~ msgid "call to search_tree_file with an absolute path, stripping\n" +#~ msgstr "" +#~ "Aufruf von search_tree_file mit absolutem Pfad, wird abgeschnitten\n" + +#~ msgid "initial path separator. Hope this was intended...\n" +#~ msgstr "Anfänglicher Pfadtrenner. Hoffentlich war dies beabsichtigt...\n" + +#~ msgid "Cannot open '%s'" +#~ msgstr "»%s« kann nicht geöffnet werden" + +#~ msgid "cannot open %s\n" +#~ msgstr "%s kann nicht geöffnet werden\n" + +#~ msgid "%6.2f%% done, estimate finish %s" +#~ msgstr "%6.2f%% abgeschlossen, voraussichtlich beendet %s" + +#~ msgid "Unexpected directory length %d %d %s\n" +#~ msgstr "Unerwartete Ordnerlänge %d %d %s\n" + +#~ msgid "Path table lengths do not match %d %d\n" +#~ msgstr "Längen der Pfadtabellen %d %d stimmen nicht überein\n" + +#~ msgid "Total extents scheduled to be written = %llu\n" +#~ msgstr "Geplante zu schreibende Einheiten = %llu\n" + +#~ msgid "Total extents actually written = %llu\n" +#~ msgstr "Gesamte derzeit geschriebene Einheiten = %llu\n" + +#~ msgid "" +#~ "Number of extents written different than what was predicted. Please " +#~ "fix.\n" +#~ msgstr "" +#~ "Anzahl der zu schreibenden Einheiten anders als erwartet. Bitte " +#~ "berichtigen.\n" + +#~ msgid "Predicted = %d, written = %llu\n" +#~ msgstr "Erwartet = %d, geschrieben = %llu\n" + +#~ msgid "Total rockridge attributes bytes: %d\n" +#~ msgstr "Gesamtgröße der RockRidge-Attribute in Bytes: %d\n" + +#~ msgid "Path table size(bytes): %d\n" +#~ msgstr "Größe der Pfadtabelle in Bytes: %d\n" diff --git a/po/de@hebrew.gmo b/po/de@hebrew.gmo new file mode 100644 index 0000000000000000000000000000000000000000..d9ac98c64100e05b4a4c014ff0587db879b2d35f GIT binary patch literal 194683 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≫3+8AMb|Q}2f% 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 ZxG34=GLmgWM^eb9n0>v~(0axBe*+v4gsT7m literal 0 HcmV?d00001 diff --git a/po/de@hebrew.po b/po/de@hebrew.po new file mode 100644 index 000000000..6dcdca70a --- /dev/null +++ b/po/de@hebrew.po @@ -0,0 +1,7805 @@ +# German translation for grub. +# Copyright (C) 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Mario Blättermann , 2010-2013, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-04 14:00+0100\n" +"Last-Translator: Mario Blättermann \n" +"Language-Team: German \n" +"Language: de@hebrew\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"כּס-בּוּגש: רעפּוֹרת תראנשלאתִיוֹנ עררוֹרש תוֹ תהע לאנגוּאגע-תעאמ אדדרעשש.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"כּס-גענעראתוֹר: פּוֹעדִית 1.8.11\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "געשצהוִינדִיגכּעִית דעש שערִיעללענ פּוֹרתש וִירד נִיצהת וּנתערשתֻתזת" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "פּארִיתֶת דעש שערִיעללענ פּוֹרתש וִירד נִיצהת וּנתערשתֻתזת" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "אנזאהל דער שתוֹפּ-בִּיתש דעש שערִיעללענ פּוֹרתש וִירד נִיצהת וּנתערשתֻתזת" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "ווֹרתלֶנגע דעש שערִיעללענ פּוֹרתש וִירד נִיצהת וּנתערשתֻתזת" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "כּעִינע הוֹשת-תאבּעללענ שפּעזִיפִֿיזִיערת דוּרצה כּוֹממאגעתרעננתע לִישתע לאדענ." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "נוּר תאבּעללענ שפּעזִיפִֿיזִיערת דוּרצה כּוֹממאגעתרעננתע לִישתע לאדענ." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "בֿערשִיוֹנ-1-תאבּעללענ זוּמ בּעתרִיעבּששיִשתעמ עכּספּוֹרתִיערענ." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "בֿערשִיוֹנ-2- וּנד בֿערשִיוֹנ-3-תאבּעללענ זוּמ בּעתרִיעבּששיִשתעמ עכּספּוֹרתִיערענ." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "וֹעמִיד בֿוֹנ רשדפּ, כּסשדת וּנד רשדת פֿעשתלעגענ." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "וֹעמתאבּלע-ִיד בֿוֹנ רשדפּ, כּסשדת אנד רשדת פֿעשתלעגענ." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "וֹעמתאבּלע-רעבִֿישִיוֹנ בֿוֹנ רשדפּ, כּסשדת וּנד רשדת פֿעשתלעגענ." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "ערשתעללער-פֿעלד בֿוֹנ רשדפּ, כּסשדת וּנד רשדת פֿעשתלעגענ." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "ערשתעללער-רעבִֿישִיוֹנ בֿוֹנ רשדפּ, כּסשדת וּנד רשדת פֿעשתלעגענ." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"עבּדא נִיצהת אכּתוּאלִישִיערענ. כֵּננתע פֿעהלער וֹדער הֶנגער ִינ מאנצהענ בִּיוֹש-בֿערשִיוֹנענ " +"בּעשעִיתִיגענ, ִישת אבּער נִיצהת עפֿפֿעכּתִיבֿ בּעִי בּעתרִיעבּששיִשתעמענ, דִיע כּעִינ רשדפּ בֿוֹנ " +"גרוּבּ עמפּפֿאנגענ. " + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "וּנערוארתעתעש ענדע דער דאתעִי %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--עכּסצלוּדע=תאבּעללע1,תאבּעללע2|--לוֹאד-וֹנליִ=תאבּעללע1,תאבּעללע2] דאתעִי1 " +"[דאתעִי2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "הוֹשת-אצפִּי-תאבּעללענ וּנד דוּרצה ארגוּמענתע אנגעגעבּענע תאבּעללענ לאדענ." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "פֿעהלער: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "האוּפּתשפּעִיצהער ערשצהֵפּפֿת" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "»%s« ִישת נִיצהת לעשבּאר: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "אצפִּי-הערוּנתערפֿאהרענ ִישת געשצהעִיתערת" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "גערֶתע אוּפֿלִישתענ." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "דאתעִינאמע ווּרדע ערוארתעת" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "דאתעִי" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "עִינע בּלוֹצכּלִישתע אוּשגעבּענ." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "שִיע מֻששענ זוּערשת דענ כּערנעל לאדענ" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "עִינ בּעתרִיעבּששיִשתעמ שתארתענ." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "כּעִינע שתאתִישתִיכּענ פֻֿר בּוֹוֹת-זעִיתענ בֿערפֻֿגבּאר\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "שתאתִישתִיכּענ פֻֿר בּוֹוֹת-זעִיתענ ערשתעללענ." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"שתאתִישתִיכּענ דעש פּלאתתענזוִישצהענשפּעִיצהערש: הִיתש = %lu (%lu.%02lu%%), מִיששעש = " +"%lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "כּעִינע שתאתִישתִיכּענ זוּמ פּאכּעת-זוִישצהענשפּעִיצהער בֿערפֻֿגבּאר\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "ִינפֿוֹרמאתִיוֹנענ זוּמ פּלאתתענ-זוִישצהענשפּעִיצהער הוֹלענ." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "צר/נל-זעִילענענדענ ִימ דוֹש-שתִיל אכּזעפּתִיערענ." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "ִינהאלת עִינער דאתעִי אנזעִיגענ." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "זועִי ארגוּמענתע ווּרדענ ערוארתעת" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "דאתעִי »%s« מִית »%s« בֿערגלעִיצהענ:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "דאתעִיגרֵססענ שִינד וּנתערשצהִיעדלִיצה: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "דאתעִיענ וּנתערשצהעִידענ שִיצה אנ פּוֹשִיתִיוֹנ %llu: 0כּס%x [%s], 0כּס%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "דִיע דאתעִיענ שִינד ִידענתִישצה.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "דאתעִי1 דאתעִי2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "זועִי דאתעִיענ בֿערגלעִיצהענ." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "עִינע אנדערע כּוֹנפִֿיגוּראתִיוֹנשדאתעִי לאדענ." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "עִינע אנדערע כּוֹנפִֿיגוּראתִיוֹנשדאתעִי לאדענ, וֹהנע דענ כּוֹנתעכּסת זוּ ֶנדערנ." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"עִינע אנדערע כּוֹנפִֿיגוּראתִיוֹנשדאתעִי לאדענ, וֹהנע דענ כּוֹנתעכּסת זוּ ֶנדערנ. עש וערדענ " +"נוּר מענֻעִינתרֶגע געלאדענ." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "עִינע אנדערע כּוֹנפִֿיגוּראתִיוֹנשדאתעִי לאדענ, אבּער נוּר דערענ מענֻעִינתרֶגע." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[יאהר-]מוֹנאת-תאג] [שתוּנדע:מִינוּתע[:שעכּוּנדע]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "אנזעִיגענ/פֿעשתלעגענ דעש/דער אכּתוּעללענ דאתוּמש/זעִית." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "אנגעהֶנגתע זעִילענוּמבּרֻצהע נִיצהת אוּשגעבּענ." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "אוּשוערתוּנג דער בּאצכּשלאשה-מאשכִּיערוּנגענ ערמֵגלִיצהענ." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-ע|-נ] זעִיצהענכּעתתע" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "עִינע תעכּסתזעִילע אנזעִיגענ." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "ִינ דאש פִֿירמוארע-כּוֹנפִֿיגוּראתִיוֹנשמענֻ נעוּ שתארתענ." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "עִינ בִֿידעוֹפּרוֹבּלעמ בּעהעבּענ." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "רוֹמ-אבּבִּילד ִישת בֿוֹרהאנדענ." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "רוֹמ-בּערעִיצה כּאננ נִיצהת אכּתִיבִֿיערת וערדענ." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"בִּיוֹש-שתרוּכּתוּרענ פֻֿר אבּוֶרתשכּוֹמפּאתִיבִּילִיתֶת מִית דעמ בֿוֹרהאנדענענ בּעתרִיעבּששיִשתעמ " +"ערשתעללענ." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "בִּיוֹש_שִיצהערוּנג [ִינת10_שִיצהערוּנג]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "בִּיוֹש-שִיצהערוּנג לאדענ." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "זעִיצהענכּעתתע ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "ארגוּמענתע אלש גרוּבּ-בּעפֿעהלע אוּפֿפֿאששענ" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"ֻבּערפּרֻפֿענ, וֹבּ דאתעִי אלש וּנפּרִיבִֿילעגִיערתער ִי386-פּאע-כּסענ-גאשת-כּערנעל געבּוֹוֹתעת " +"וערדענ כּאננ" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"ֻבּערפּרֻפֿענ, וֹבּ דאתעִי אלש וּנפּרִיבִֿילעגִיערתער כּס86_64-כּסענ-גאשת-כּערנעל געבּוֹוֹתעת " +"וערדענ כּאננ" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"ֻבּערפּרֻפֿענ, וֹבּ דאתעִי אלש וּנפּרִיבִֿילעגִיערתער כּס86-כּסענ-גאשת-כּערנעל געבּוֹוֹתעת " +"וערדענ כּאננ" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "ֻבּערפּרֻפֿענ, וֹבּ דאתעִי אלש כּס86-מוּלתִיבּוֹוֹת-כּערנעל געבּוֹוֹתעת וערדענ כּאננ" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "ֻבּערפּרֻפֿענ, וֹבּ דאתעִי אלש כּס86-מוּלתִיבּוֹוֹת2-כּערנעל געבּוֹוֹתעת וערדענ כּאננ" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי ארמ-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי ארמ64-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי ִיא64-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי מִיפּש-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי מִיפּשעל-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי שפּארצ64-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי פּוֹוערפּצ-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּס86-לִינוּכּס ִישת" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּס86-לִינוּכּס מִית 32-בִּית-פּרוֹתוֹכּוֹללוּנתערשתֻתזוּנג ִישת" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּס86-כּפֿרעעבּשד ִישת" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי ִי386-כּפֿרעעבּשד ִישת" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּס86_64-כּפֿרעעבּשד ִישת" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּס86-כּנעתבּשד ִישת" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי ִי386-כּנעתבּשד ִישת" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּס86_64-כּנעתבּשד ִישת" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי עִינע ִי386-עפִֿי-דאתעִי ִישת" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי עִינע ִי386-עפִֿי-דאתעִי ִישת" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי עִינע ִיא64-עפִֿי-דאתעִי ִישת" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי עִינע ארמ64-עפִֿי-דאתעִי ִישת" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי עִינע ארמ-עפִֿי-דאתעִי ִישת" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי הִיבּערפִֿיל.שיִש ִימ רוּהעזוּשתאנד ִישת (הִיבּערנאתעד)" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּס86_64-כּסנוּ ִישת (מאצ-וֹשכּס-כּערנעל)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי כּסנוּ ִישת (מאצ-וֹשכּס-כּערנעל)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי עִינ כּסנוּ-רוּהעזוּשתאנד-אבּבִּילד ִישת (מאצ-וֹשכּס-כּערנעל)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "ֻבּערפֻּפֿענ, וֹבּ דאתעִי עִינ בִּיוֹש-בּוֹוֹתשעכּתוֹר ִישת" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "פֿאלשצה" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "וֹפּתִיוֹנענ דאתעִי" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "ֻבּערפּרֻפֿענ, וֹבּ דאתעִי דענ אנגעגעבּענענ תיִפּ האת." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "כּעִינע שוֹלצהע פּארתִיתִיוֹנ" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "נעוּער מבּר ווּרדע נאצה »%s« געשצהרִיעבּענ\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "גערֶת [פּארתִיתִיוֹנ[+/-[תיִפּ]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"היִבּרִיד-מבּר דעש גפּת-גערֶתעש גערֶת פֻֿללענ. אנגעגעבּענע פּארתִיתִיוֹנענ וערדענ תעִיל דעש " +"היִבּרִיד-מבּר. בִּיש זוּ 3 פּארתִיתִיוֹנענ שִינד זוּלֶששִיג. תיִפּ ִישת עִינ מבּר-תיִפּ. + " +"בּעדעוּתעת, דאשש דִיע פּארתִיתִיוֹנ אכּתִיבֿ ִישת. נוּר עִינע פּארתִיתִיוֹנ כּאננ אכּתִיבֿ שעִינ." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"דִיעשענ רעצהנער אנהאלתענ. דִיעשער בּעפֿעהל פֿוּנכּתִיוֹנִיערת נִיצהת ִינ אללענ פִֿירמוארע-ִ" +"ימפּלעמענתאתִיוֹנענ." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "זוּ בֿערוענדענדענ האשה אנגעבּענ." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "האשה" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "פּרֻפֿשוּממענ דער דאתעִיענ מִית לִישתע ִינ דאתעִי בֿערגלעִיצהענ." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "בּאשִישבֿערזעִיצהנִיש פֻֿר האשה-לִישתע." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "בֿערז" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "נאצה דעמ ערשתענ פֿעהלער נִיצהת שתוֹפּפּענ." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "דאתעִי ענתפּאצכּענ, בּעבֿוֹר פּרֻפֿשוּממע ערמִיתתעלת וִירד." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: לעשעפֿעהלער\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: האשה-פֿעהלער\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: וֹכּ\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-ה האשה [-צ דאתעִי [-פּ פּרֶפִֿיכּס]] [דאתעִי1 [דאתעִי2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "האשה-פּרֻפֿשוּממע בּערעצהנענ וֹדער פּרֻפֿענ." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-צ דאתעִי [-פּ פּרֶפִֿיכּס]] [דאתעִי1 [דאתעִי2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"ערועִיתערתע ענערגִיעבֿערואלתוּנג שעתזענ\n" +"(1=נִיעדרִיג, ..., 254=הוֹצה, 255=אוּש)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "ענערגִיעמוֹדוּש אנזעִיגענ." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "אתא-שִיצהערהעִיתשעִינשתעללוּנגענ בִּיש זוּמ זוּרֻצכּשעתזענ עִינפֿרִיערענ." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "לאוּפֿוערכּששתאתוּש מִית שמארת אנזעִיגענ." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"אוּתוֹמאתִישצהע כּלאנגבֿערואלתוּנג פֿעשתלעגענ\n" +"(0=אוּש, 128=לעִישע, ..., 254=שצהנעלל)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"וארתעזעִית בִּיש שתאנדבּיִ פֿעשתלעגענ\n" +"(0=וֹפֿפֿ, 1=5ש, 2=10ש, ..., 240=20מ, 241=30מ, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "לאוּפֿוערכּ ִינ דענ שתאנדבּיִ-מוֹדוּש בֿערשעתזענ." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "לאוּפֿוערכּ ִינ דענ שצהלאפֿמוֹדוּש בֿערשעתזענ." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "ִידענתִיתֶת וּנד עִינשתעללוּנגענ דעש לאוּפֿוערכּש אוּשגעבּענ." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "רוֹה-ִינהאלת דעש אתא ִידענתִיפֿיִ-שעכּתוֹרש אנזעִיגענ." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "שמארת אכּתִיבִֿיערענ/דעאכּתִיבִֿיערענ (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "כּעִינע מעלדוּנגענ אוּשגעבּענ." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "עִינ ארגוּמענת ווּרדע ערוארתעת" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[וֹפּתִיוֹנענ] דאתענתרֶגער" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "אתא-דאתענתרֶגערפּאראמעתער ערמִיתתעלנ/פֿעשתלעגענ." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "אוּפֿרוּפֿ:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[מוּשתער ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "עִינע הִילפֿעמעלדוּנג אנזעִיגענ." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "וֹפֿפֿשעת-בּיִתעש אמ בּעגִיננ דער דאתעִי ֻבּערשפּרִינגענ." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "נוּר בּיִתעש דער לֶנגע לענגתה לעשענ." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[וֹפּתִיוֹנענ] דאתעִי_וֹדער_גערֶת" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "רוֹה-ִינהאלת עִינער דאתעִי וֹדער דעש שפּעִיצהערש אנזעִיגענ." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "רוֹה-ִינהאלת דעש צמוֹש אנזעִיגענ." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "בּיִתע:בִּית" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "בִּית בּעִי בּיִתע:בִּית ִימ צמוֹש תעשתענ." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "בִּית בּעִי בּיִתע:בִּית ִימ צמוֹש לעערענ." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "בִּית בּעִי בּיִתע:בִּית ִימ צמוֹש שעתזענ." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "בּוֹוֹתזעִית-שתאתִישתִיכּענ פֻֿר צוֹרעבּוֹוֹת אנזעִיגענ." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "צוֹרעבּוֹוֹת-תאבּעללענ אוּפֿלִישתענ." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"ֻבּערפּרֻפֿענ, וֹבּ דער פּרוֹזעששוֹר דענ 64-בִּית-(לאנג-)מוֹדוּש וּנתערשתֻתזת (בֿוֹרגאבּע)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"ֻבּערפּרֻפֿענ, וֹבּ דער פּרוֹזעששוֹר דִיע פּהיִשִיכּאלִישצהע אדרעששערועִיתערוּנג וּנתערשתֻתזת." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "פֶֿהִיגכּעִיתענ דער צפּוּ ֻבּערפּרֻפֿענ." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "אללע אכּתוּעללענ זוּוֹרדנוּנגענ אנזעִיגענ." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "אללע זוּוֹרדנוּנגענ אוּפֿ שתאנדארדוערתע זוּרֻצכּשעתזענ." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "שוֹווֹהל דִירעכּתע אלש אוּצה וּמגעכּעהרתע זוּוֹרדנוּנגענ אוּשפֻֿהרענ." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "עש ווּרדענ כּעִינע לאוּפֿוערכּע נעוּ זוּגעוֹרדנעת" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "וֹש לאוּפֿוערכּ #נוּמ ------> גרוּבּ/בִּיוֹש-גערֶת" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-ל | -ר | [-ש] גרוּבּדעבֿ וֹשדִישכּ." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "בִּיוֹש-לאוּפֿוערכּשזוּוֹרדנוּנגענ בֿערואלתענ." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "זוּמ אבּשצהאלתענ דעש רעצהנערש כּעִינ אפּמ בֿערוענדענ." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "דאש שיִשתעמ אנהאלתענ, ועננ מֵגלִיצה, מִית אפּמ." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "כּעִינ אפּמ געפֿוּנדענ" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"בֿערשִיוֹנ %u.%u\n" +"32-בִּית צש = 0כּס%x, לענ = 0כּס%x, וֹפֿפֿשעת = 0כּס%x\n" +"16-בִּית צש = 0כּס%x, לענ = 0כּס%x\n" +"דש = 0כּס%x, לענ = 0כּס%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "געשצהֻתזע 16-בִּית-שצהנִיתתשתעללע וּנתערשתֻתזת\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "געשצהֻתזע 16-בִּית-שצהנִיתתשתעללע נִיצהת וּנתערשתֻתזת\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "געשצהֻתזע 32-בִּית-שצהנִיתתשתעללע וּנתערשתֻתזת\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "געשצהֻתזע 32-בִּית-שצהנִיתתשתעללע נִיצהת וּנתערשתֻתזת\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "צפּוּ-לעערלאוּפֿ בֿערלאנגשאמת דענ פּרוֹזעששוֹר\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "צפּוּ-לעערלאוּפֿ בֿערלאנגשאמת דענ פּרוֹזעששוֹר נִיצהת\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "אפּמ דעאכּתִיבִֿיערת\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "אפּמ אכּתִיבִֿיערת\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "אפּמ דעאכּתִיבִֿיערת\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "אפּמ אכּתִיבִֿיערת\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "אפּמ-ִינפֿוֹרמאתִיוֹנענ אנזעִיגענ." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "דאתעִינאמע וֹדער תעמפּוֹ וּנד נוֹתענ ערוארתעת" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "וּנגֻלתִיגעש תעמפּוֹ ִינ %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "דאתעִי »%s« נִיצהת געפֿוּנדענ" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "זאהל נִיצהת ערכּאננת" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "דאתעִי | תעמפּוֹ [תוֹנהֵהע1 דאוּער1] [תוֹנהֵהע2 דאוּער2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "עִינענ כּלאנג אבּשפִּיעלענ." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "נוּמלוֹצכּ-מוֹדוּש פֿעשתלעגענ" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "פֿעשתשתעללתאשתענ-מוֹדוּש פֿעשתלעגענ" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "שצרוֹלללוֹצכּ-מוֹדוּש פֿעשתלעגענ" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "עִינפֻֿגענ-מוֹדוּש פֿעשתלעגענ" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "פּאוּשע-מוֹדוּש פֿעשתלעגענ" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "לִינכּע וּמשצהאלתתאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "רעצהתע וּמשצהאלתתאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "שיִשרק-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "נוּמלוֹצכּ-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "צאפּשלוֹצכּ-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "שצרוֹלללוֹצכּ-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "עִינפֿג-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "לִינכּע אלת-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "רעצהתע אלת-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "לִינכּע שתרג-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "רעצהתע שתרג-תאשתע דרֻצכּענ" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "לעד-שתאתוּש נִיצהת אכּתוּאלִישִיערענ" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[כֻּרזעל1] [כֻּרזעל2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "עִינע תאשתאתוּרשעקוּענז עמוּלִיערענ" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "געבּענ שִיע »גוֹ« עִינ, וּמ גרוּבּ פֿוֹרתזוּשעתזענ." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "זוּמ ִיעעע1275-פּרוֹמפּת זוּרֻצכּכּעהרענ." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "געלעשענענ וערת ִינ בֿארִיאבּלע בֿארנאמע שפּעִיצהערנ." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "בֿארנאמע" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "פּוֹרת" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "8-בִּית-וערת בֿוֹנ פּוֹרת לעשענ." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "16-בִּית-וערת בֿוֹנ פּוֹרת לעשענ." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "32-בִּית-וערת בֿוֹנ פּוֹרת לעשענ." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "פּוֹרת וערת [מאשכּע]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "8-בִּית-וערת נאצה פּוֹרת שצהרעִיבּענ." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "16-בִּית-וערת נאצה פּוֹרת שצהרעִיבּענ." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "אדדר וערת [מאשכּע]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "32-בִּית-וערת נאצה פּוֹרת שצהרעִיבּענ." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "בֿארִיאבּלע »%s« ִישת נִיצהת געשעתזת" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "עִינע תאשתאתוּרבּעלעגוּנג לאדענ." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "וּמשצהאלתתאשתע ֻבּערפּרֻפֿענ." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "שתרג-תאשתע ֻבּערפּרֻפֿענ." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "אלת-תאשתע ֻבּערפּרֻפֿענ." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "שתאתוּש דער וּמשצהאלתתאשתענ ֻבּערפּרֻפֿענ." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "בּעפֿעהל »%s« כּוֹננתע נִיצהת געפֿוּנדענ וערדענ" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "פּאששווֹרת עִינגעבּענ:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "אלתע כּוֹנפִֿיגוּראתִיוֹנ ִימ גלעִיצהענ כּוֹנתעכּסת לאדענ" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "אלתע כּוֹנפִֿיגוּראתִיוֹנ ִימ נעוּענ כּוֹנתעכּסת לאדענ" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "אלתע כּוֹנפִֿיגוּראתִיוֹנ ִימ גלעִיצהענ כּוֹנתעכּסת לאדענ, נוּר מענֻעִינתרֶגע" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "אלתע כּוֹנפִֿיגוּראתִיוֹנ ִימ נעוּענ כּוֹנתעכּסת לאדענ, נוּר מענֻעִינתרֶגע" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--נוֹ-מעמ-וֹפּתִיוֹנ] [--תיִפּע=תיִפּ] דאתעִי [ארג ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "»כּערנעל«-בּעפֿעהל וִיע ִינ גרוּבּ-לעגאציִ שִימוּלִיערענ" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "דאתעִי [ארג ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "»ִינִיתרד«-בּעפֿעהל וִיע ִינ גרוּבּ-לעגאציִ שִימוּלִיערענ" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "»מוֹדוּלענוֹוּנזִיפּ«-בּעפֿעהל וִיע ִינ גרוּבּ-לעגאציִ שִימוּלִיערענ" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--מד5] פּאששווֹרת [דאתעִי]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "»פּאששווֹרד«-בּעפֿעהל וִיע ִינ גרוּבּ-לעגאציִ שִימוּלִיערענ" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "»פּאששווֹרד«-בּעפֿעהל בֿוֹנ גרוּבּ-לעגאציִ ִימ מענֻעִינתראגשמוֹדוּש שִימוּלִיערענ" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "דאתעִינאמע אנגעבּענ." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "דִיע שִיגנאתוּרֻבּערפּרֻפֿוּנג דער וּמגעבּוּנגשדאתעִי ֻבּערשפּרִינגענ." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-פֿ דאתעִי] [-ש|--שכִּיפּ-שִיג] [זוּ_ֻבּערשפּרִינגענדער_בֿארִיאבּלעננאמע] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "בֿארִיאבּלענ אוּש בּלוֹצכּדאתעִי דער וּמגעבּוּנג לאדענ." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-פֿ דאתעִי]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "בֿארִיאבּלענ אוּש בּלוֹצכּדאתעִי דער וּמגעבּוּנג אוּפֿלִישתענ." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-פֿ דאתעִי] בֿארִיאבּלעננאמע [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "בֿארִיאבּלענ ִינ דִיע בּלוֹצכּדאתעִי שפּעִיצהערנ." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "לאנגע לִישתע מִית אוּשפֻֿהרלִיצהערענ ִינפֿוֹרמאתִיוֹנענ אנזעִיגענ." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "גרֵססענוערתע ִינ מענשצהענלעשבּארעמ פֿוֹרמאת אוּשגעבּענ." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "אללע דאתעִיענ אוּפֿלִישתענ." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "נעתזוערכּפּרוֹתוֹכּוֹללע:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-ל|-ה|-א] [דאתעִי …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "גערֶתע וּנד דאתעִיענ אוּפֿלִישתענ." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "נוּר בֿערשִיוֹנ-1-תאבּעללענ דארשתעללענ." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "נוּר בֿערשִיוֹנ-2- וּנד בֿערשִיוֹנ-3-תאבּעללענ אנזעִיגענ." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "אצפִּי-ִינפֿוֹרמאתִיוֹנענ אנזעִיגענ." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "בֿערפֻֿגבּארער ראמ" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "רעשערבִֿיערתער ראמ" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "דוּרצה אצפִּי וִיעדערבֿערוענדבּארער שפּעִיצהער" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "דוּרצה אצפִּי בּעאנשפּרוּצהתער שפּעִיצהערבּערעִיצה (פֻֿר ענערגִיעשפּארמוֹדִי)" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "פֿעהלערהאפֿתער ראמ (בּאדראמ)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "פּערשִישתענתער ראמ" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "פּערשִישתענתער ראמ (בֿעראלתעת)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "ראמ ענתהֶלת צוֹרעבּוֹוֹת-תאבּעללענ" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "ראמ ענתהֶלת פִֿירמוארע-צוֹדע" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "בּאשע_אדדר = 0כּס%llx, לֶנגע = 0כּס%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "בּאשע_אדדר = 0כּס%llx, לֶנגע = 0כּס%llx, תיִפּ = 0כּס%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "בֿוֹנ פִֿירמוארע בּערעִיתגעשתעללתע שפּעִיצהערזוּוֹרדנוּנג אוּפֿלִישתענ." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "פּצִי-גערֶתע אוּפֿלִישתענ." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "אדדר" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "8-בִּית-וערת אוּש אדדר לעשענ." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "16-בִּית-וערת אוּש אדדר לעשענ." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "32-בִּית-וערת אוּש אדדר לעשענ." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "8-בִּית-וערת נאצה אדדר שצהרעִיבּענ." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "16-בִּית-וערת נאצה אדדר שצהרעִיבּענ." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "32-בִּית-וערת נאצה אדדר שצהרעִיבּענ." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "תיִפּ דעש מענֻעִינתראגש." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "זעִיצהענכּעתתע" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "לִישתע דער בּענוּתזער, דִיע דִיעשענ עִינתראג בּוֹוֹתענ דֻרפֿענ." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "בּענוּתזערנאמע[,בּענוּתזערנאמע]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "תאשתענזוּוֹרדנוּנג פֻֿר דענ שצהנעללשתארת דִיעשעש עִינתראגש." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "תאשתע" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "זעִיצהענכּעתתע אלש ִינהאלת דעש מענֻעִינתראגש בֿערוענדענ." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "בּעזעִיצהנער דעש מענֻעִינתראגש." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "דִיעשער עִינתראג כּאננ בֿוֹנ יעדעמ בּענוּתזער געבּוֹוֹתעת וערדענ." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "בּלוֹצכּ" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "עִינענ מענֻעִינתראג דעפִֿינִיערענ." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "עִינ וּנתערמענֻ דעפִֿינִיערענ." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "נאמע\tרעפֿערענזזֶהלער\tאבּהֶנגִיגכּעִיתענ\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "דִיעשע מעלדוּנג אנזעִיגענ." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "אדרעששע [גרֵססע]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "ִינהאלת דעש שפּעִיצהערש אנזעִיגענ." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "מוֹדוּל" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "עִינ מוֹדוּל ענתפֿערנענ." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "געלאדענע מוֹדוּלע אנזעִיגענ." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "גרוּבּ בּעענדענ." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "כּעִינ צש5536 געפֿוּנדענ" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "צש5536 ִינ %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"עִינ-/אוּשגאבּעבּערעִיצה דעש שיִשתעמבֿערואלתוּנגשבּוּש-צוֹנתרוֹללערש ִישת בּעִי 0כּס%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "ראמ-שלוֹתנוּממער %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "געשצהרִיעבּענע שפּד-בּיִתעש: %d בּ.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "פֿלאשה-געשאמתגרֵססע: %d בּ.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "שפּעִיצהערתיִפּ: דדר2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "תעִיל-נוּממער: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "שפּעִיצהערתיִפּ: וּנבּעכּאננת." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "שפּעִיצהער-ִינפֿוֹרמאתִיוֹנענ אנזעִיגענ." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s וּנתערשתֻתזת כּעִינע וּוִּידש" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[מוֹדוּל1 מוֹדוּל2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"זוּ נאתִיבֿענ פֿעשתפּלאתתענתרעִיבּערנ ועצהשעלנ. פֿאללש כּעִינע מוֹדוּלע אנגעגעבּענ " +"וערדענ, וִירד דִיע בֿוֹרגאבּע בֿערוענדעת (פּאתא,אהצִי,וּשבּמש,וֹהצִי,וּהצִי,עהצִי)." + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"בּעפֿעהלע אוּפֿ פּארתִיתִיוֹנ אוּשפֻֿהרענ.\n" +"רוּפֿענ שִיע »פּארתתוֹוֹל פּארתִיתִיוֹנ העלפּ« אוּפֿ, וּמ עִינע\n" +"לִישתע דער בֿערפֻֿגבּארענ בּעפֿעהלע זוּ ערהאלתענ." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=וערת" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "פֻֿר %s ִישת לעִידער כּעִינ פּארתִיתִיוֹנִיערוּנגשוערכּזעוּג בֿערפֻֿגבּאר\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "וּנבּעכּאננתעש ארגוּמענת »%s«" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "פּארתִיתִיוֹנ בּעפֿעהלע" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "בּענוּתזערפּאששווֹרת" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "בּענוּתזערפּאששווֹרת (כּלארתעכּסת) פֿעשתלעגענ. נִיצהת עמפּפֿוֹהלענ, דא וּנשִיצהער." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "וּנגֻלתִיגעש פּבּכּדפֿ2-פּאששווֹרת" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "בּענוּתזער פּבּכּדפֿ2_פּאששווֹרת" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "בּענוּתזערפּאששווֹרת פֿעשתלעגענ (פּבּכּדפֿ2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "גערֶת נאצה אנבִּיעתער וּנד גערֶתעכּעננוּנגענ אוּשוֶהלענ." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[אנבִּיעתער]:[גערֶת]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "גערֶת נאצה דעששענ פּוֹשִיתִיוֹנ אוּפֿ דעמ בּוּש אוּשוֶהלענ." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[בּוּש]:[שלוֹת][.פֿוּנצ]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "שיִמבּוֹל »%c« פֿעהלת" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-ש פּוֹשִיתִיוֹנ] [-ד גערֶת]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "רוֹה-אוּשגאבּע דעש פּצִי-כּוֹנפִֿיגוּראתִיוֹנשראוּמש אנזעִיגענ." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "עִינע בֿארִיאבּלע אוּפֿ דענ רֻצכּגאבּעוערת שעתזענ." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "תרעִיבּער ערמִיתתעלנ." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "תיִפּ דער פּארתִיתִיוֹנשזוּוֹרדנוּנג בּעשתִיממענ." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "דאתעִישיִשתעמתיִפּ ערמִיתתעלנ." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "דאתעִישיִשתעמ-וּוִּיד ערמִיתתעלנ." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "דאתעִישיִשתעמבּעזעִיצהנוּנג ערמִיתתעלנ." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "דאתעִישיִשתעמ »%s« וּנתערשתֻתזת כּעִינע לאבּעלש" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "גערֶת" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "ִינפֿוֹ זוּמ גערֶת הוֹלענ." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ענבֿבֿאר]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "בֿארִיאבּלע דוּרצה בּענוּתזערעִינגאבּע שעתזענ." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "דענ רעצהנער נעוּ שתארתענ." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "ענתשפּרעצהענדע כּוֹמפּוֹנענתענ-נוּממער ִינ בֿארנאמע שפּעִיצהערנ." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[זאהל:]בֿארנאמע" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "רעגעכּספּ זעִיצהענכּעתתע" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "פּרֻפֿענ, וֹבּ רעגעכּספּ אוּפֿ זעִיצהענכּעתתע פּאששת." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "נאמע [בֿארִיאבּלע] [הִינתועִישע]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"אנהאנד בֿוֹנ דאתעִיענ נאצה גערֶתענ שוּצהענ. פֿאללש בֿארִיאבּלע אנגעגעבּענ וִירד, דאננ " +"וִירד דאש ערשתע געפֿוּנדענע גערֶת זוּמ שעתזענ דער בֿארִיאבּלע בֿערוענדעת." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"אנהאנד בֿוֹנ בּעזעִיצהנוּנגענ נאצה גערֶתענ שוּצהענ. פֿאללש בֿארִיאבּלע אנגעגעבּענ וִירד, " +"דאננ וִירד דאש ערשתע געפֿוּנדענע גערֶת זוּמ שעתזענ דער בֿארִיאבּלע בֿערוענדעת." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"אנהאנד בֿוֹנ וּוִּידש נאצה גערֶתענ שוּצהענ. פֿאללש בֿארִיאבּלע אנגעגעבּענ וִירד, דאננ " +"וִירד דאש ערשתע געפֿוּנדענע גערֶת זוּמ שעתזענ דער בֿארִיאבּלע בֿערוענדעת." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "גערֶתע נאצה דאתעִי דוּרצהשוּצהענ." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "גערֶתע נאצה דאתעִישיִשתעמבּעזעִיצהנוּנג דוּרצהשוּצהענ." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "גערֶתע נאצה דאתעִישיִשתעמ-וּוִּיד דוּרצהשוּצהענ." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "עִינע בֿארִיאבּלע אוּפֿ דאש ערשתע געפֿוּנדענע גערֶת שעתזענ." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "כּעִינ דִישכּעתתענלאוּפֿוערכּ ֻבּערפּרֻפֿענ." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"זוּערשת דאש גערֶת הִינועִיש בֿערשוּצהענ. פֿאללש הִינועִיש מִית כּוֹממא ענדעת, אוּצה " +"וּנתערפּארתִיתִיוֹנענ בֿערשוּצהענ" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "הִינועִיש" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"זוּערשת דאש גערֶת הִינועִיש בֿערשוּצהענ (בּעִי ִיעעע1275). פֿאללש הִינועִיש מִית כּוֹממא " +"ענדעת, אוּצה וּנתערפּארתִיתִיוֹנענ בֿערשוּצהענ" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"זוּערשת דאש גערֶת הִינועִיש בֿערשוּצהענ (פֻֿר אכּתוּעלל לאוּפֿענדעש בִּיוֹש). פֿאללש הִינועִיש " +"מִית כּוֹממא ענדעת, אוּצה וּנתערפּארתִיתִיוֹנענ בֿערשוּצהענ" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"זוּערשת דאש גערֶת הִינועִיש בֿערשוּצהענ, פֿאללש דִירעכּתער הארדוארעזוּגרִיפֿפֿ וּנתערשתֻתזת " +"וִירד. פֿאללש הִינועִיש מִית כּוֹממא ענדעת, אוּצה וּנתערפּארתִיתִיוֹנענ בֿערשוּצהענ" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"זוּערשת דאש גערֶת הִינועִיש בֿערשוּצהענ (פֻֿר אכּתוּעלל לאוּפֿענדעש עפִֿי). פֿאללש הִינועִיש " +"מִית כּוֹממא ענדעת, אוּצה וּנתערפּארתִיתִיוֹנענ בֿערשוּצהענ" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"זוּערשת דאש גערֶת הִינועִיש בֿערשוּצהענ, פֿאללש אכּתוּעלל לאוּפֿענדע ארצ. פֿאללש הִינועִיש " +"מִית כּוֹממא ענדעת, אוּצה וּנתערפּארתִיתִיוֹנענ בֿערשוּצהענ" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-פֿ|-ל|-וּ|-ש|-נ] [--הִינת הִינועִיש [--הִינת הִינת] ...] נאמע" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"אנהאנד בֿוֹנ דאתעִיענ, דאתעִישיִשתעמבּעזעִיצהנוּנגענ וֹדער דאתעִישיִשתעמ-וּוִּידש נאצה " +"גערֶתענ שוּצהענ. פֿאללש --שעת אנגעגעבּענ וִירד, דאננ וִירד דאש ערשתע געפֿוּנדענע " +"גערֶת זוּמ שעתזענ דער בֿארִיאבּלע בֿערוענדעת. פֿאללש כּעִינע בֿארִיאבּלע אנגעגעבּענ וִירד, " +"דאננ וִירד »רוֹוֹת« בֿערוענדעת" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "רעגִישתער %x בֿוֹנ %x:%02x.%x ִישת %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-ש פּוֹשִיתִיוֹנ] [-ד גערֶת] [-בֿ בֿאר] רעגִישתער[=וערת[:מאשכּע]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "פּצִי-גערֶתע בּעארבּעִיתענ." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "אוּשפֻֿהרלִיצהער צוֹוּנתדוֹונ." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "וּנתערבּרעצהוּנג מִית עשצ ערלאוּבּענ." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "אנזאהל_דער_שעכּוּנדענ" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "דִיע אנגעגעבּענע אנזאהל אנ שעכּוּנדענ וארתענ." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "ווּרזעלבֿערזעִיצהנִיש דער שיִשלִינוּכּס-דִישכּ [בֿוֹרגאבּע=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"אכּתוּעללעש בֿערזעִיצהנִיש פֻֿר שיִשלִינוּכּס [בֿוֹרגאבּע ִישת דאש ֻבּערגעוֹרדנעתע בֿערזעִיצהנִיש " +"דער עִינגאבּעדאתעִי]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "עִינגאבּע אלש ִישוֹלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנשדאתעִי אוּפֿפֿאששענ." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "עִינגאבּע אלש פּכּסעלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנשדאתעִי אוּפֿפֿאששענ." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "עִינגאבּע אלש שיִשלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנשדאתעִי אוּפֿפֿאששענ." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "שיִשלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנ ִימ גלעִיצהענ כּוֹנתעכּסת לאדענ" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "שיִשלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנ ִימ נעוּענ כּוֹנתעכּסת לאדענ" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "שיִשלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנ ִימ גלעִיצהענ כּוֹנתעכּסת לאדענ, נוּר מענֻעִינתרֶגע" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "שיִשלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנ ִימ נעוּענ כּוֹנתעכּסת לאדענ, נוּר מענֻעִינתרֶגע" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "כּעִינ תערמִינאל אנגעגעבּענ" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "תערמִינאל »%s« ווּרדע נִיצהת געפֿוּנדענ" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "אכּתִיבֿע עִינגאבּעתערמִינאלש:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "בֿערפֻֿגבּארע עִינגאבּעתערמִינאלש:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "אכּתִיבֿע אוּשגאבּעתערמִינאלש:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "בֿערפֻֿגבּארע אוּשגאבּעתערמִינאלש:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--אפּפּענד|--רעמוֹבֿע] [תערמִינאל1] [תערמִינאל2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "עִינגאבּעתערמִינאל לִישתענ וֹדער וֶהלענ." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "אוּשגאבּעתערמִינאל לִישתענ וֹדער וֶהלענ." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "אוּשדרוּצכּ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "עִינענ אוּשדרוּצכּ אוּשוערתענ." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "אוּשדרוּצכּ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "גלעִיצהע דאתעִי מעהרפֿאצה לאדענ." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "גרֵססע פֻֿר יעדענ לעשעבֿוֹרגאנג אנגעבּענ" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "וּנגֻלתִיגע בּלוֹצכּגרֵססע" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "דאתעִיגרֵססע: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "בֿערשתרִיצהענע זעִית: %d.%03d ש \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "געשצהוִינדִיגכּעִית: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-ש גרֵססע] דאתעִינאמע" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "דאתעִילעשעגעשצהוִינדִיגכּעִית תעשתענ." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "כּעִינ בּעפֿעהל אנגעגעבּענ" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "בֿערשתרִיצהענע זעִית: %d.%03d שעכּוּנדענ \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "בּעפֿעהל [ארגוּמענתע]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "בֿוֹנ בּעפֿעהל בּענֵתִיגתע זעִית מעששענ" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "ִינ גרוֹססשצהרעִיבּוּנג וּמואנדעלנ." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "ִינ כּלעִינשצהרעִיבּוּנג וּמואנדעלנ." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[וֹפּתִיוֹנענ] [מענגע1] [מענגע2] [זעִיצהענכּעתתע]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "זעִיצהענ דער מענגע1 ִינ זעִיצהענ דער מענגע2 ִינ זעִיצהענכּעתתע ֻבּערשעתזענ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "נִיצהתש תוּנ, ערפֿוֹלגרעִיצה." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "נִיצהתש תוּנ, נִיצהת ערפֿוֹלגרעִיצה." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "וּשבּ-וּנתערשתֻתזוּנג ֻבּערפּרֻפֿענ." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "דִיע שִיגנאתוּרֻבּערפּרֻפֿוּנג דער ֵפֿפֿענתלִיצהענ שצהלֻששעלדאתעִי ֻבּערשפּרִינגענ." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "פֿאלשצהע שִיגנאתוּר" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "ֵפֿפֿענתלִיצהער שצהלֻששעל %08x ווּרדע נִיצהת געפֿוּנדענ" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "מוֹדוּל »%s« ִישת נִיצהת געלאדענ" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-ש|--שכִּיפּ-שִיג] דאתעִי שִיגנאתוּרדאתעִי [שצהלֻששעלדאתעִי]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "אנגעהֶנגתע שִיגנאתוּר ֻבּערפּרֻפֿענ." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-ש|--שכִּיפּ-שִיג] שצהלֻששעל_דאתעִי" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "שצהלֻששעל_דאתעִי זוּ בֿערתראוּענשוֻרדִיגענ שצהלֻששעלנ הִינזוּפֻֿגענ." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "בֿערתראוּענשוֻרדִיגע שצהלֻששעל אוּפֿלִישתענ." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "שצהלֻששעל_ִיד" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "שצהלֻששעל_ִיד אוּש דענ בֿערתראוּענשוֻרדִיגענ שצהלֻששעלנ ענתפֿערנענ." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "נוּר תעכּסת" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "דִירעכּתע פֿארבּע, מאשכּע: %d/%d/%d/%d פּוֹש.: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "פּאלעתתִיערת " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "יִוּבֿ " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "פּלאנאר " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "הערצוּלעש " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "צגא " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "נוֹנ-צהאִינ 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "שצהוארזועִיסס " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "וּנבּעכּאננתער בִֿידעוֹמוֹדוּש" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " עדִיד-פּרֻפֿשוּממע ִישת וּנגֻלתִיג" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " עדִיד-בֿערשִיוֹנ: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " בּעבֿוֹרזוּגתער מוֹדוּש: %uכּס%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " כּעִינ בּעבֿוֹרזוּגתער מוֹדוּש בֿערפֻֿגבּאר\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "וּנגֻלתִיגע אנגאבּע »%s« דעש גראפִֿיכּמוֹדוּש" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "לִישתע דער וּנתערשתֻתזתענ בִֿידעוֹמוֹדִי:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "לעגענדע: מאשכּע/פּוֹשִיתִיוֹנ=רוֹת/גרֻנ/בּלאוּ/רעשערבִֿיערת" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "אדאפּתער »%s«:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " כּעִינע ִינפֿוֹרמאתִיוֹנענ בֿערפֻֿגבּאר" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " גראפִֿיכּאדאפּתער כּוֹננתע נִיצהת ִינִיתִיאלִישִיערת וערדענ" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[בּכּסה[כּסת]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"בֿערפֻֿגבּארע גראפִֿיכּמוֹדִי אוּפֿלִישתענ. פֿאללש אוּפֿלֵשוּנג אנגעגעבּענ ִישת, נוּר מוֹדִי " +"דִיעשער אוּפֿלֵשוּנג אנזעִיגענ." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[בּכּסה]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "דאש בִֿידעוֹ-שוּבּשיִשתעמ ִימ מוֹדוּש בּכּסה ֻבּערפּרֻפֿענ." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "דאש בִֿידעוֹ-שוּבּשיִשתעמ ֻבּערפּרֻפֿענ." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[בֿערז]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "כּסענ-שפּעִיצהערוּנג אוּפֿלִישתענ." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-ל] גרוּבּוּוִּיד [בֿארנאמע]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"64-בִּית-וּוִּיד ִינ עִינ בֿוֹנ כּסנוּ בֿערארבּעִיתבּארעש פֿוֹרמאת וּמואנדעלנ. פֿאללש -ל " +"אנגעגעבּענ ִישת, בִּיתתע כּלעִינשצהרעִיבּוּנג בּעִיבּעהאלתענ (וִיע בֿוֹנ בּלכִּיד)" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "לעשענ דעש שעכּתוֹרש 0כּס%llx בֿוֹנ »%s« ִישת פֿעהלגעשצהלאגענ" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "שצהרעִיבּענ דעש שעכּתוֹרש 0כּס%llx נאצה »%s« ִישת פֿעהלגעשצהלאגענ" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "נאצה וּוִּיד עִינהֶנגענ." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "אללעש עִינהֶנגענ." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "אללע דאתענתרֶגער עִינהֶנגענ, פֻֿר דִיע דאש »בּוֹוֹת«-פֿלאג געשעתזת ִישת." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "»%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "»%s« כּאננ נִיצהת דוּרצהשוּצהת וערדענ: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "קוּעללע|-וּ וּוִּיד|-א|-בּ" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "עִינ בֿערשצהלֻששעלתעש גערֶת עִינהֶנגענ." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"פּהיִשִישצהער דאתענתרֶגער »%s« כּוֹננתע נִיצהת געפֿוּנדענ וערדענ. עִינִיגע מוֹדוּלע כֵּננתענ" +" ִימ צוֹרע-אבּבִּילד פֿעהלענ." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "פּהיִשִישצהער דאתענתרֶגער %s ווּרדע נִיצהת געפֿוּנדענ" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "כּעִינ מעדִיוּמ ִינ »%s«" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "שהא256 כּוֹננתע נִיצהת געלאדענ וערדענ" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "שהא512 כּוֹננתע נִיצהת געלאדענ וערדענ" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "עלִי-מעתאדאתענ כּוֹננתענ נִיצהת געלעשענ וערדענ" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "פֿאלשצהעש עלִי-מאגִיצ וֹדער -בֿערשִיוֹנ" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "עש וִירד בֿערשוּצהת, דענ מאשתער-שצהלֻששעל זוּ ענתשצהלֻששעלנ …" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "כּעננווֹרת פֻֿר %s%s%s אנגעבּענ (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "שלוֹת %d געֵפֿפֿנעת\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "בֿערשוּצה, אוּססערהאלבּ דער פּלאתתע »%s« זוּ לעשענ וּנד זוּ שצהרעִיבּענ" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "אוּפֿ צד-רוֹמ כּאננ נִיצהת געשצהרִיעבּענ וערדענ" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"נאתִיבֿע פֿעשתפּלאתתענתרעִיבּער וערדענ בֿערוענדעת. נוּתזוּנג דער פִֿירמוארע-" +"שצהנִיתתשתעללע וִירד בֿערועִיגערת." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"דִיע לדמ-עִינבּעתתוּנגשפּארתִיתִיוֹנ ִישת זוּ כּלעִינ, עִינבּעתתוּנג וֻרדע וּנמֵגלִיצה שעִינ" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"דִיעשעש לדמ האת כּעִינע עִינבּעתתוּנגשפּארתִיתִיוֹנ, עִינבּעתתוּנג וֻרדע וּנמֵגלִיצה שעִינ" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "דאש אנגעגעבּענע לוֹוֹפּבּאצכּ-גערֶת לֵשצהענ." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-ד] גערֶתענאמע דאתעִי." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "עִינ בִֿירתוּעללעש גערֶת אוּש עִינער דאתעִי ערשתעללענ." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "נעוּזוּועִישוּנג 0כּס%x ִישת נוֹצה נִיצהת ִימפּלעמענתִיערת" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "כּעִינע שיִמבּוֹלתאבּעללע" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "דִיעשע עלפֿ-דאתעִי ִישת בֿוֹמ פֿאלשצהענ תיִפּ" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "עפִֿי-עמוּלאתוֹר לאדענ וּנד ִינִיתִיאלִישִיערענ." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "לאדענ דעש עפִֿי-עמוּלאתוֹרש פִֿינאלִישִיערענ." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "עפִֿי-וּמגעבּוּנג ענתלאדענ." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "שיִמבּוֹל »%s« נִיצהת געפֿוּנדענ" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "געלאדענע שצהרִיפֿתענ" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "דאתעִי…" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "עִינע וֹדער מעהרערע זוּ לאדענדע שצהרִיפֿתדאתעִיענ אנגעבּענ." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "דִיע געלאדענענ שצהרִיפֿתענ אוּפֿלִישתענ." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "זוּ תִיעפֿ בֿערשצהאצהתעלתע שיִמבּוֹלִישצהע בֿערכּנֻפּפֿוּנגענ" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "בֿערשוּצה, הִינתער דעמ ענדע דער דאתעִי זוּ לעשענ" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"תעִילגערֶת עִינעש ֻבּער מעהרערע גערֶתע בֿערתעִילתענ דאתעִישיִשתעמש כּוֹננתע נִיצהת " +"געפֿוּנדענ וערדענ" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "ִישת כּעִינ בֿערזעִיצהנִיש" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "כּעִינע רעגוּלֶרע דאתעִי" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"ִיהרע דאתעִי צוֹרע.ִימג ִישת וּנגעוֵהנלִיצה גרוֹסס. שִיע וֻרדע נִיצהת ִינ דענ " +"עִינבּעתתוּנגשבּערעִיצה פּאששענ." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "וּנגֻלתִיגער דאתעִינאמע »%s«" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "פּרֻפֿשוּממענבֿערגלעִיצה ִישת געשצהעִיתערת" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "כּעִינ שצהלֻששעל בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "מאצ-ֻבּערפּרֻפֿוּנג ִישת געשצהעִיתערת" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "עִינגאבּע וִירד אלש ראו אנגענוֹממענ." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "עִינגאבּע וִירד אלש העכּסאדעזִימאל אנגענוֹממענ." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "עִינגאבּע וִירד אלש כּעננווֹרת אנגענוֹממענ." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "זפֿש-פּאששווֹרת עִינגעבּענ:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-ה|-פּ|-ר] [דאתעִי]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "ִינ דאתעִי געשפּעִיצהערתענ זפֿש-וראפּפִּינג-שצהלֻששעל ִימפּוֹרתִיערענ" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "בִֿירתוּעללעש גערֶת ווּרדע ענתפֿערנת" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "בִֿירתוּעללעש גערֶת ִישת געשצהעִיתערת" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "בִֿירתוּעללעש גערֶת ִישת וֹפֿפֿלִינע" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "בִֿירתוּעללעש גערֶת ִישת נִיצהת בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "בִֿירתוּעללעש גערֶת ִישת וֹנלִינע" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "ִינכּוֹררעכּתעש בִֿירתוּעללעש גערֶת: כּעִינ תיִפּ בֿערפֻֿגבּאר" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "בִֿירתוּעללעש גערֶת דוּרצהשוּצהענ (דאתעִי וֹדער לאוּפֿוערכּ)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "בּוֹוֹת-פּפֿאד: נִיצהת בֿערפֻֿגבּאר\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "בּוֹוֹת-פּפֿאד: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "פּפֿאד: נִיצהת בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "פּפֿאד: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "גערֶתעכּעננוּנג: נִיצהת בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "גערֶתעכּעננוּנג: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "דִיעשעש בֿדעבֿ ִישת עִינ שפִּיעגעל" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "דִיעשעש בֿדעבֿ ִישת עִינ ראִידז%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "וּנגֻלתִיגעש בֿדעבֿ" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "בֿדעבֿ מִית %d כִּינדעלעמענתענ\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "בֿדעבֿ-עלעמענתנוּממער %d ִישת נִיצהת כּוֹררעכּת\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "בֿדעבֿ-עלעמענתנוּממער %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "תיִפּ דעש בִֿירתוּעללענ גערֶתעש ִישת וּנבּעכּאננת: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "פּוֹוֹל-שתאתוּש: אכּתִיבֿ" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "פּוֹוֹל-שתאתוּש: עכּספּוֹרתִיערת" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "פּוֹוֹל-שתאתוּש: זערשתֵרת" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "פּוֹוֹל-שתאתוּש: פֻֿר הוֹתשפּארע רעשערבִֿיערת" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "פּוֹוֹל-שתאתוּש: ארצ-גערֶת, לעבֿעל 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "פּוֹוֹל-שתאתוּש: נִיצהת ִינִיתִיאלִישִיערת" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "פּוֹוֹל-שתאתוּש: נִיצהת בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "פּוֹוֹל-שתאתוּש: פּוֹתענזִיעלל אכּתִיבֿ" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "פּוֹוֹל-נאמע: נִיצהת בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "פּוֹוֹל-נאמע: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "פּוֹוֹל-גוִּיד: נִיצהת בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "פּוֹוֹל-גוִּיד: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "פּוֹוֹל-שתאתוּש כּוֹננתע נִיצהת ערמִיתתעלת וערדענ" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "פּוֹוֹל-שתאתוּש נִיצהת ערכּאננת" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "כּעִינ בּאוּמ בִֿירתוּעללער גערֶתע בֿערפֻֿגבּאר" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "זפֿש-ִינפֿוֹ זוּ גערֶת אוּשגעבּענ." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "דאתעִישיִשתעמ [בֿארִיאבּלע]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "זפֿש-בּוֹוֹתפֿשוֹבּי אוּשגעבּענ וֹדער אלש בֿארִיאבּלע שעתזענ" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "בִּיתתע בֿערבִּינדענ שִיע נוּנ עִינענ ענתפֿערנתענ דעבּוּגגער." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "גדבּ-שתוּבּ אוּפֿ דעמ אנגעגעבּענענ פּוֹרת שתארתענ" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "האלתעפּוּנכּת פֻֿר גדבּ אוּשלֵשענ" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "גדבּ-שתוּבּ שתוֹפּפּענ" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "בֿוֹרזעִיתִיגעש ענדע דער דאתעִי" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "ֻבּערשעתזת דִיע זעִיצהענכּעתתע אנהאנד דענ אכּתוּעללענ עִינשתעללוּנגענ." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"»ענתער« זוּמ בּוֹוֹתענ דעש מארכִּיערתענ בּעתרִיעבּששיִשתעמש, »ע« זוּמ בּעארבּעִיתענ דער " +"בּעפֿעהלע בֿוֹר דעמ בּוֹוֹתענ וֹדער »צ« פֻֿר עִינע בּעפֿעהלשזעִילע. מִית »עשצ« כּעהרענ שִיע " +"זוּמ בֿוֹרהערִיגענ מענֻ זוּרֻצכּ." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"»ענתער« זוּמ בּוֹוֹתענ דעש מארכִּיערתענ בּעתרִיעבּששיִשתעמש, »ע« זוּמ בּעארבּעִיתענ דער " +"בּעפֿעהלע בֿוֹר דעמ בּוֹוֹתענ וֹדער »צ« פֻֿר עִינע בּעפֿעהלשזעִילע." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "ענתער: בּוֹוֹתענ, »ע«: וֹפּתִיוֹנענ, »צ«: בּעפֿעהלשזעִילע" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "דער הערבֿוֹרגעהוֹבּענע עִינתראג וִירד אוּתוֹמאתִישצה ִינ %dש אוּשגעפֻֿהרת." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%dש בֿערבּלעִיבּענד." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dש" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "גרוּבּ-בּוֹוֹתמענֻ" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ארגפּ_העלפּ_פֿמת: וערת %s ִישת כּלעִינער וֹדער גלעִיצה %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: פּאראמעתער פֻֿר ארגפּ_העלפּ_פֿמת בּענֵתִיגת עִינענ וערת" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: פּאראמעתער פֻֿר ארגפּ_העלפּ_פֿמת מוּשש פּוֹשִיתִיבֿ שעִינ" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: וּנבּעכּאננתער פּאראמעתער פֻֿר ארגפּ_העלפּ_פֿמת" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "וּנשִיננ ִינ ארגפּ_העלפּ_פֿמת: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"ערפֿוֹרדערלִיצהע וֹדער וֹפּתִיוֹנאלע ארגוּמענתע פֻֿר לאנגע וֹפּתִיוֹנענ שִינד עבּענשוֹ " +"ערפֿוֹרדערלִיצה בּזו. וֹפּתִיוֹנאל פֻֿר דִיע ענתשפּרעצהענדענ כּוּרזוֹפּתִיוֹנענ." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " וֹדער: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [וֹפּתִיוֹנענ …]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"רוּפֿענ שִיע »%s --העלפּ« וֹדער »%s --וּשאגע« אוּפֿ, וּמ ועִיתערע ִינפֿוֹרמאתִיוֹנענ זוּ " +"ערהאלתענ.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "בּערִיצהתענ שִיע פֿעהלער אנ %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "וּנבּעכּאננתער שיִשתעמפֿעהלער" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "דִיעשע הִילפֿע אנזעִיגענ" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "עִינע כּוּרזע הִילפֿעמעלדוּנג אוּשגעבּענ" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "נאמע" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "פּרוֹגראממנאמע פֿעשתלעגענ" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "שעכּ" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "פֻֿר שעכּ שעכּוּנדענ הֶנגענבּלעִיבּענ (בֿוֹרעִינשת.: 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "פּרוֹגראממבֿערשִיוֹנ אוּשגעבּענ" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(פּרוֹגראממפֿעהלער) כּעִינע בֿערשִיוֹנ בּעכּאננת!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: זוּ בִֿיעלע ארגוּמענתע\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(פּרוֹגראממפֿעהלער) וֹפּתִיוֹנ הֶתתע ערכּאננת וערדענ מֻששענ!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: וֹפּתִיוֹנ »%s« ִישת מעהרדעוּתִיג; מֵגלִיצהכּעִיתענ:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: וֹפּתִיוֹנ »--%s« ערלאוּבּת כּעִינ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: וֹפּתִיוֹנ »%c%s« ערלאוּבּת כּעִינ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: וֹפּתִיוֹנ »%s« ערוארתעת עִינ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: וּנבּעכּאננתע וֹפּתִיוֹנ »--%s«\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: וּנבּעכּאננתע וֹפּתִיוֹנ »%c%s«\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: וּנגֻלתִיגע וֹפּתִיוֹנ -- »%c«\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: וֹפּתִיוֹנ ערפֿוֹרדערת עִינ ארגוּמענת -- »%c«\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: וֹפּתִיוֹנ »-ו %s« ִישת נִיצהת עִינדעוּתִיג\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: וֹפּתִיוֹנ »-ו %s« ערלאוּבּת כּעִינ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: וֹפּתִיוֹנ »-ו %s« ערפֿוֹרדערת עִינ ארגוּמענת\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "ערפֿוֹלג" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "כּעִינע ֻבּערעִינשתִיממוּנג" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "וּנגֻלתִיגער רעגוּלֶרער אוּשדרוּצכּ" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "וּנגֻלתִיגעש שוֹרתִיערזעִיצהענ" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "וּנגֻלתִיגער זעִיצהענכּלאששעננאמע" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "אנגעהֶנגתער בּאצכּשלאשה" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "וּנגֻלתִיגע רֻצכּרעפֿערענז" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "כּעִינ געגענשתֻצכּ פֻֿר [ וֹדער [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "כּעִינ געגענשתֻצכּ פֻֿר ( וֹדער \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "כּעִינ געגענשתֻצכּ פֻֿר \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "וּנגֻלתִיגער ִינהאלת בֿוֹנ \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "וּנגֻלתִיגעש בּערעִיצהשענדע" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "שפּעִיצהער אוּשגעשצהֵפּפֿת" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "וּנגֻלתִיגער בֿוֹרהערגעהענדער רעגוּלֶרער אוּשדרוּצכּ" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "בֿוֹרזעִיתִיגעש ענדע דעש רעגוּלֶרענ אוּשדרוּצכּש" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "רעגוּלֶרער אוּשדרוּצכּ ִישת זוּ גרוֹסס" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "נִיצהת ֻבּערעִינשתִיממענדע ) וֹדער \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "וּנבּעכּאננתער רעגעכּספּ-פֿעהלער" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "כּעִינ בֿוֹרהערגעהענדער רעגוּלֶרער אוּשדרוּצכּ" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "האללוֹ ועלת" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "»האללוֹ ועלת« אוּשגעבּענ." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "בֿערשוּצה, אוּססערהאלבּ דער דאתעִי זוּ שוּצהענ" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "נִיצהת וּנתערשתֻתזתעש גזִיפּ-פֿוֹרמאת" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "לזוֹפּ-דאתעִי ִישת בּעשצהֶדִיגת" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "כּסז-דאתעִי ִישת בּעשצהֶדִיגת וֹדער בּלוֹצכּוֹפּתִיוֹנענ וערדענ נִיצהת וּנתערשתֻתזת" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "וּנגֻלתִיגעש עלפֿ-מאגִיצ (ארצהִיתעכּתוּראבּהֶנגִיג)" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[וּמגבֿאר=וערת]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "עִינע וּמגעבּוּנגשבֿארִיאבּלע פֿעשתלעגענ." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "וּמגבֿאר" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "עִינע וּמגעבּוּנגשבֿארִיאבּלע לֵשצהענ." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ארג]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "גערֶתע וֹדער דאתעִיענ אוּפֿלִישתענ." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "עִינ מוֹדוּל עִינפֻֿגענ." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "לאוּפֿוערכּ »%s« ווּרדע נִיצהת געפֿוּנדענ." + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "בֿערשוּצה, אוּססערהאלבּ דער פּארתִיתִיוֹנ זוּ לעשענ וֹדער זוּ שצהרעִיבּענ" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "וּנגֻלתִיגעש עלפֿ-מאגִיצ (ארצהִיתעכּתוּרוּנאבּהֶנגִיג)" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "גערֶתעאנזאהל ֻבּערשתעִיגת דִיע גרענזענ" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "אוּפֿ »%s« כּאננ נִיצהת געשצהרִיעבּענ וערדענ: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"דער דעבִֿיצע.מאפּ-עִינתראג »%s« ִישת וּנגֻלתִיג, וִירד ִיגנוֹרִיערת. בִּיתתע כּוֹררִיגִיערענ " +"וֹדער לֵשצהענ שִיע ִיהרע דעבִֿיצע.מאפּ" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"דער לאוּפֿוערכּשנאמע »%s« ִינ דעבִֿיצע.מאפּ ִישת ִינכּוֹררעכּת. %s וִירד שתאתתדעששענ " +"בֿערוענדעת. בִּיתתע בֿערוענדענ שִיע דִיע פֿוֹרמ [הפֿצ]ד[0-9]* (ז.בּ. »הד0« וֹדער »צד«)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "»%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "גערֶתענאמע" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "רוֹוֹת-גערֶת פֿעשתלעגענ." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "דאתעִי אלש גערֶתעזוּוֹרדנוּנג בֿערוענדענ [בֿוֹרגאבּע=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "דאתעִי אלש מעמדִישכּ-אבּבִּילד בֿערוענדענ" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "גרוּבּ-דאתעִיענ ִימ בֿערזעִיצהנִיש בֿערז בֿערוענדענ [בֿוֹרגאבּע=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "אוּשפֻֿהרלִיצהע מעלדוּנגענ אוּשגעבּענ." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "וארתענ, בִּיש עִינ דעבּוּגגער עִינכּלִינכּת" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "וּנבּעכּאננתעש זוּשֶתזלִיצהעש ארגוּמענת »%s«." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "גרוּבּ-עמוּלאתוֹר." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "פֿעהלער בּעִימ עִינלעשענ דער בּעפֿעהלשזעִילענארגוּמענתע\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "רוּפֿענ שִיע »גדבּ %s %d« אוּפֿ וּנד שעתזענ שִיע ארגש.הוֹלד אוּפֿ נוּלל.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: וארנוּנג:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: ִינפֿוֹ:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: פֿעהלער:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "דאתעִי »%s« ִישת זוּ גרוֹסס" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "וּנבּעכּאננתעש דאתעִישיִשתעמ" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "הערוּנתערפֿאהרענ ִישת געשצהעִיתערת" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "בּעענדענ ִישת געשצהעִיתערת" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "ֻבּערלאוּפֿ ווּרדע ערכּאננת" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "וּנשאוּבּער עִינגעבּעתתעתע פּארתִיתִיוֹנ וִירד בֿערווֹרפֿענ (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "וּנבּעכּאננתער בּעפֿעהל »%s«.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "דִיעשע הִילפֿע אנזעִיגענ וּנד בּעענדענ." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "בּענוּתזוּנג דִיעשעש בּעפֿעהלש אנזעִיגענ וּנד בּעענדענ." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "וֹבּלִיגאתוֹרִישצהע וֹפּתִיוֹנ פֻֿר »%s« פֿעהלת" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "דאש ארגוּמענת »%s« בּענֵתִיגת עִינע גאנזזאהל" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "עִינ ארגוּמענת ווּרדע »%s« זוּגעוֹרדנעת, וֹבּווֹהל עש כּעִינ ארגוּמענת ערוארתעת" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "בּאצכּתראצע אוּשגעבּענ." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "גרוּבּ ועִיסס נִיצהת, וִיע מאנ דִיעשע מאשצהִינע שתוֹפּפּענ כּאננ!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "בֿוֹרגעגעבּענער שערבֿער ִישת ${נעת_דעפֿאוּלת_שערבֿער}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "וּנגֻלתִיגע אנגאבּע דער פֿארבּע »%s«" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "נעוּ שתארתענ ִישת געשצהעִיתערת" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[לֶנגע]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "העכּסדוּמפּ-זוּפֿאללשדאתענ." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "גערֶתעבּאוּמ מוּשש אנגעגעבּענ וערדענ (שִיעהע בּעפֿעהל »דעבִֿיצעתרעע«)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "וּנגֻלתִיגעש זִימאגע" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "וּנגֻלתִיגער גערֶתעבּאוּמ" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "לִינוּכּס לאדענ." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "ִינִיתרד לאדענ." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "דתבּ-דאתעִי לאדענ." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "בּעזִיעהענ דעש פֿדת פֿעהלגעשצהלאגענ" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "שִיע מֻששענ זוּערשת דענ כּסענ-היִפּערבִֿישוֹר לאדענ" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "עִינענ כּסענ-היִפּערבִֿישוֹר לאדענ." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "עִינ כּסענ-מוֹדוּל לאדענ." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[וֹפּתִיוֹנענ]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "בִּיוֹש-בּאשִיערתעש שיִשתעמ בּוֹוֹתענ." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "עִינענ אנדערענ בּוֹוֹתלוֹאדער לאדענ." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "אוּשגאבּע אוּפֿ אללענ כּוֹנשוֹלענ אנזעִיגענ." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "שערִיעללע כּוֹנשוֹלע בֿערוענדענ." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "נאצה דעמ דאתעִינאמענ פֻֿר דענ נעוּשתארת פֿראגענ." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "צדרוֹמ אלש רוֹוֹת-גערֶת בֿערוענדענ." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "רוֹוּתִינג דער בּענוּתזערכּוֹנפִֿיגוּראתִיוֹנ אוּפֿרוּפֿענ." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "כּדבּ בּעִימ בּוֹוֹתענ בֿערוענדענ." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "ענתפֿערנתע גדבּ-פֿעהלערדִיאגנוֹשע אנשתאתת דדבּ בֿערוענדענ." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "אללע בּוֹוֹת-אוּשגאבּענ דעאכּתִיבִֿיערענ." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "נאצה יעדער אוּשגעגעבּענענ זעִילע אוּפֿ תאשתענדרוּצכּ וארתענ." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "עִינכּוֹמפִּילִיערתעש רוֹוֹת-גערֶת בֿערוענדענ." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "ִינ דענ שִינגלע-וּשער-מוֹדוּש בּוֹוֹתענ." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "מִית אוּשפֻֿהרלִיצהענ מעלדוּנגענ בּוֹוֹתענ." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "נִיצהת נעוּ שתארתענ, נוּר הערוּנתערפֿאהרענ." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "כּוֹנפִֿיגוּרִיערתע גערֶתע בּעארבּעִיתענ." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "צוֹמוּנִית[,געשצהו]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "שמפּ דעאכּתִיבִֿיערענ." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "אצפִּי דעאכּתִיבִֿיערענ." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "כּעִינע פֿעהלערדִיאגנוֹשעמעלדוּנגענ בּעִימ בּוֹוֹתענ אנזעִיגענ." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "מִית פֿעהלערדִיאגנוֹשעמעלדוּנגענ בּוֹוֹתענ." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "נוֹרמאלע אוּשגאבּענ וּנתערדרֻצכּענ (וארנוּנגענ בֿערבּלעִיבּענ)" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[אדר|צוֹמוּנִית][,געשצהו]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "נאמע" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "תיִפּ" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "אדרעששע" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "גרֵססע" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "ִימ בּלִינדמוֹדוּש בּוֹוֹתענ" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "כּערנעל בֿוֹנ פֿרעעבּשד לאדענ." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "כּערנעל בֿוֹנ וֹפּענבּשד לאדענ." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "כּערנעל בֿוֹנ נעתבּשד לאדענ." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "פֿרעעבּשד-וּמגעבּוּנג לאדענ." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "פֿרעעבּשד-כּערנעלמוֹדוּל לאדענ." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "נעתבּשד-כּערנעלמוֹדוּל לאדענ." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "נעתבּשד-כּערנעלמוֹדוּל לאדענ (עלפֿ)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "פֿרעעבּשד-כּערנעלמוֹדוּל לאדענ (עלפֿ)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "ראמדִישכּ בֿוֹנ כּוֹפּענבּשד לאדענ." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "ועִיתערעש צוֹרעבּוֹוֹת-פּאיִלוֹאד לאדענ" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "בֿעראלתעתער פּאראמעתער »%s« וִירד נִיצהת מעהר וּנתערשתֻתזת." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s ִישת בֿעראלתעת. בֿערוענדענ שִיע שתאתתדעששענ גפֿכּספּאיִלוֹאד=%s בֿוֹר דעמ לִינוּכּס-" +"בּעפֿעהל.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s ִישת בֿעראלתעת. בֿגא-מוֹדוּש %d ווּרדע נִיצהת ערכּאננת. בֿערוענדענ שִיע שתאתתדעששענ " +"גפֿכּספּאיִלוֹאד=בּרעִיתעכּסהֵהע[כּסתִיעפֿע] בֿוֹר דעמ לִינוּכּס-בּעפֿעהל.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--פֿוֹרצע|--בּפּבּ] גערֶת" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "»%s« ִישת זוּ גרוֹסס" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "פֿרעעדוֹש-כּערנעל.שיִש לאדענ." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "נתלדר וֹדער בּוֹוֹתמגר לאדענ." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "דִיע געשצהֶתזתע זוּוֹרדנוּנג בֿוֹנ פּלאנ9-גערֶתענ ֻבּערשצהרעִיבּענ." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "גרוּבּ-גערֶת=פּלאנ9-גערֶת" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "כּערנעל ארגוּמענתע" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "פּלאנ9-כּערנעל לאדענ." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "עִינ פּכּסע-אבּבִּילד לאדענ." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "תרוּעצריִפּת-ִישוֹ לאדענ." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "ִינִיתרד ִישת בּערעִיתש געלאדענ" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "מוֹדוּל לאדענ." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "דרֻצכּענ שִיע עִינע בּעלִיעבִּיגע תאשתע, וּמ כּסנוּ זוּ שתארתענ" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "ִינהאלת בֿוֹנ »דעבִֿיצע-פּרוֹפּערתִיעש« לאדענ" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "פֿפּשוא-תרעִיבּער כּוֹננתע נִיצהת געפֿוּנדענ וערדענ" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "דאש פֿפּשוא-פּרוֹתוֹכּוֹלל ואר נִיצהת ִימשתאנדע, דִיע שצהנִיתתשתעללע זוּ פִֿינדענ" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "כּעִינ פֿפּשוא געפֿוּנדענ" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "פֿפּשוא-רעבִֿישִיוֹנ: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "דאתעִי [ארגוּמענתע …]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "פֿפּשוא-בֿערשִיוֹנ אנזעִיגענ." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "וארנוּנג: ִימ בּעתרִיעבּששיִשתעמ וִירד כּעִינע כּוֹנשוֹלע בֿערפֻֿגבּאר שעִינ" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "עִינענ מוּלתִיבּוֹוֹת2-כּערנעל לאדענ." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "עִינ מוּלתִיבּוֹוֹת2-מוֹדוּל לאדענ." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "עִינענ מוּלתִיבּוֹוֹת-כּערנעל לאדענ." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "עִינ מוּלתִיבּוֹוֹת-מוֹדוּל לאדענ." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "מוֹדוּש דעש הִינתערגרוּנדבִּילדעש." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "שתרעתצה(=זוֹוֹמ)|נוֹרמאל(=נוֹרמאל)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "כּסנוּ-אבּבִּילד לאדענ." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64-בִּית כּסנוּ-אבּבִּילד לאדענ." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "כּסנוּ-ערועִיתערוּנגשפּאכּעת לאדענ." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "כּסנוּ-ערועִיתערוּנג לאדענ." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "בֿערזעִיצהנִיש [וֹשבּוּנדלערעקוִּירעד]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "כּסנוּ-ערועִיתערוּנגשבֿערזעִיצהנִיש לאדענ." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "כּסנוּ-ראמדִישכּ לאדענ. וִירד ִימ בּעתרִיעבּששיִשתעמ אלש מד0 אנגעזעִיגת." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "בּעגרֻססוּנגשבִּילדשצהִירמ פֻֿר כּסנוּ לאדענ." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "עִינ געשפּעִיצהערתעש כּסנוּ-אבּבִּילד לאדענ." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "אדר1,מאשכּע1[,אדר2,מאשכּע2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "שפּעִיצהערבּערעִיצהע אלש »בּאדראמ« דעכּלארִיערענ." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "בֿוֹנ[כּ|מ|ג] בִּיש[כּ|מ|ג]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "אללע שפּעִיצהערשעגמענתע ִימ אנגעגעבּענענ בּערעִיצה לֵשצהענ." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "בִֿיער ארגוּמענתע וערדענ ערוארתעת" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "נעתזוערכּ-שצהנִיתתשתעללע »%s« ווּרדע נִיצהת ערכּאננת" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "כּעִינע דהצפּ-ִינפֿוֹרמאתִיוֹנענ געפֿוּנדענ" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "כּעִינע דהצפּ-וֹפּתִיוֹנענ געפֿוּנדענ" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "כּעִינע דהצפּ-וֹפּתִיוֹנ %d געפֿוּנדענ" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "נִיצהת ערכּאננתע פֿוֹרמאתשפּעזִיפִֿיכּאתִיוֹנ פֻֿר דהצפּ-וֹפּתִיוֹנ »%s«" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "כּעִינע נעתזוערכּכּארתע געפֿוּנדענ" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "%s כּוֹננתע נִיצהת אוּתוֹמאתִישצה כּוֹנפִֿיגוּרִיערת וערדענ" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[כּארתע]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "עִינע בּוֹוֹתפּ-אוּתוֹכּוֹנפִֿיגוּראתִיוֹנ אוּשפֻֿהרענ" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "בֿארִיאבּלע שצהנִיתתשתעללע זאהל בּעשצהרעִיבּוּנג" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"דהצפּ-וֹפּתִיוֹנ הוֹלענ וּנד ִינ בֿארִיאבּלע שפּעִיצהערנ. פֿאללש בֿארִיאבּלע »-« ִישת, דענ " +"וערת אוּשגעבּענ." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "עש ווּרדענ כּעִינע דנש-שערבֿער כּוֹנפִֿיגוּרִיערת" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "דוֹמאִיננאמע-כּוֹמפּוֹנענתע ִישת זוּ לאנג" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "כּעִינע דנש-אנגאבּע געפֿוּנדענ" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "כּעִינ דנש-אנתווֹרת עמפּפֿאנגענ" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "נוּר ִיפּבֿ4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "נוּר ִיפּבֿ6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "ִיפּבֿ4 בּעבֿוֹרזוּגענ" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "ִיפּבֿ6 בּעבֿוֹרזוּגענ" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "וּנגֻלתִיגער פּאראמעתער" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "אדדרעששע דנש_שערבֿער" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "עִינע דנש-שוּצהע אוּשפֻֿהרענ" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "דנששערבֿער" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "עִינענ דנש-שערבֿער הִינזוּפֻֿגענ" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "עִינענ דנש-שערבֿער ענתפֿערנענ" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "דנש-שערבֿער אוּפֿלִישתענ" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "נעתזוערכּפּאכּעת כּוֹננתע נִיצהת געשענדעת וערדענ" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "ִינתערפּרעתִיערוּנג וִירד נִיצהת וּנתערשתֻתזת" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "שפּעִיצהערזוּועִישוּנג (אללוֹצ-מעמ) ִישת געשצהעִיתערת" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "פֿרעע-מעמ ִישת געשצהעִיתערת" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "נִיצהת וּנתערשתֻתזתע התתפּ-אנתווֹרת" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "נִיצהת וּנתערשתֻתזתער התתפּ-פֿעהלער %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "זעִיתֻבּערשצהרעִיתוּנג בּעִימ ֵפֿפֿנענ בֿוֹנ »%s«" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "זעִיתֻבּערשצהרעִיתוּנג: הארדוארע-אדרעששע כּוֹננתע נִיצהת אוּפֿגעלֵשת וערדענ" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "נִיצהת אוּפֿלֵשבּארע אדרעששע %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "נִיצהת ערכּאננתע נעתזוערכּאדרעששע »%s«" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "זִיעל ִישת נִיצהת עררעִיצהבּאר" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "רוֹוּתענשצהלעִיפֿע ענתדעצכּת" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "אדרעששע נִיצהת געפֿוּנדענ" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "שִיע כֵּננענ דִיעשע אדרעששע נִיצהת לֵשצהענ" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "נִיצהת וּנתערשתֻתזתער הארדוארע-אדרעששתיִפּ %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "נִיצהת וּנתערשתֻתזתער אדרעששתיִפּ %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "דרעִי ארגוּמענתע ערוארתעת" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "כּארתע נִיצהת געפֿוּנדענ" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "תעמפּוֹרֶר" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "וּנבּעכּאננתער אדרעששתיִפּ %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "כּעִינ שערבֿער אנגעגעבּענ" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "זעִיתֻבּערשצהרעִיתוּנג בּעִימ לעשענ בֿוֹנ »%s«" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "כּוּרזנאמע כּארדע אדרעששע [הו-אדרעששע]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "עִינע נעתזוערכּאדרעששע הִינזוּפֻֿגענ." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "כּארתע [הו-אדרעששע]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "עִינע ִיפּבֿ6-אוּתוֹכּוֹנפִֿיגוּראתִיוֹנ אוּשפֻֿהרענ" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "כּוּרזנאמע" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "עִינע נעתזוערכּאדרעששע לֵשצהענ." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "כּוּרזנאמע נעתז [שצהנִיתתשתעללע| גו גאתעואיִ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "עִינע נעתזוערכּרוֹוּתע הִינזוּפֻֿגענ." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "עִינע נעתזוערכּרוֹוּתע ענתפֿערנענ." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "נעתזוערכּרוֹוּתענ אוּפֿלִישתענ" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "נעתזוערכּכּארתענ אוּפֿלִישתענ" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "נעתזוערכּאדרעששענ אוּפֿלִישתענ" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "בֿערבִּינדוּנג בֿערועִיגערת" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "בֿערבִּינדוּנגשאבּבּרוּצה ועגענ זעִיתֻבּערשצהרעִיתוּנג" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "בּענוּתזערנאמע עִינגעבּענ:" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[בּענוּתזערלִישתע]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "ֻבּערפּרֻפֿענ שִיע, וֹבּ דער בּענוּתזער ִינ דער בּענוּתזערלִישתע אוּפֿגעפֻֿהרת ִישת." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "מֵגלִיצהע בּעפֿעהלע שִינד:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "מֵגלִיצהע גערֶתע שִינד:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "מֵגלִיצהע דאתעִיענ שִינד:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "מֵגלִיצהע פּארתִיתִיוֹנענ שִינד:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "מֵגלִיצהע ארגוּמענתע שִינד:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "מֵגלִיצהע דִינגע שִינד:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "וארנוּנג: שיִנתאכּספֿעהלער (פֿעהלענדער /) ִינ »%s«\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "וארנוּנג: וּנגֻלתִיגע בֿוֹרדערגרוּנדפֿארבּע »%s«\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "וארנוּנג: וּנגֻלתִיגע הִינתערגרוּנדפֿארבּע »%s«\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "וּמגבֿאר [וּמגבֿאר] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "בֿארִיאבּלענ עכּספּוֹרתִיערענ." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "שוֹננתאג" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "מוֹנתאג" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "דִיענשתאג" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "מִיתתווֹצה" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "דוֹננערשתאג" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "פֿרעִיתאג" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "שאמשתאג" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "מוֹדוּל ִישת נִיצהת געלאדענ" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "גנוּ גרוּבּ בֿערשִיוֹנ %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "בּעענדענ ִישת יעדערזעִית מִית עשצ מֵגלִיצה." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"מִינִימאלע בּאשה-ֶהנלִיצהע זעִילענבּעארבּעִיתוּנג וִירד וּנתערשתֻתזת. פֻֿר דאש ערשתע ווֹרת " +"לִישתעת תאבּ דִיע מֵגלִיצהענ בּעפֿעהלשבֿערבֿוֹללשתֶנדִיגוּנגענ אוּפֿ. אנשוֹנשתענ וערדענ מִית " +"תאבּ דִיע מֵגלִיצהענ גערֶתע-וֹדער דאתעִיבֿערבֿוֹללשתֶנדִיגוּנגענ אנגעזעִיגת. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "גרוּבּ>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "דענ בִּילדשצהִירמ לעערענ." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "ִינ נוֹרמאלמוֹדוּש ועצהשעלנ." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "נוֹרמאלמוֹדוּש אבּבּרעצהענ." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "בּעלִיעבִּיגע תאשתע דרֻצכּענ, וּמ פֿוֹרתזוּשעתזענ …" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "»%s« וִירד געבּוֹוֹתעת" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "אלתערנאתִיבֿע »%s« וִירד בֿערוענדעת" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" +"שוֹווֹהל בֿוֹרגאבּע- אלש אוּצה אלתערנאתִיבֿעִינתרֶגע כּוֹננתענ נִיצהת געבּוֹוֹתעת וערדענ.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "עִינע בּעפֿעהלשלִישתע בּוֹוֹתענ" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"מִינִימאלע עמאצש-ֶהנלִיצהע בִּילדשצהִירמבּעארבּעִיתוּנג וִירד וּנתערשתֻתזת. תאבּ לִישתעת " +"בֿערבֿוֹללשתֶנדִיגוּנגענ אוּפֿ. דרֻצכּענ שִיע שתרג-כּס וֹדער פֿ10 זוּמ בּוֹוֹתענ, שתרג-צ וֹדער " +"פֿ2 פֻֿר עִינע בּעפֿעהלשזעִילע וֹדער עשצ, וּמ אבּזוּבּרעצהענ וּנד זוּמ גרוּבּ-מענֻ " +"זוּרֻצכּזוּכּעהרענ." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "בֿערוענדענ שִיע דִיע תאשתענ %C וּנד %C זוּמ מארכִּיערענ עִינעש עִינתראגש." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "בּ" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "כִּיבּ" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "מִיבּ" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "גִיבּ" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "תִיבּ" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "פִּיבּ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "כּ" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "מ" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "ג" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "ת" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "פּ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "בּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "כִּיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "מִיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "גִיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "תִיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "פִּיבּ/ש" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "פּארתִיתִיוֹנ %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "גערֶת %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "זוּגרִיפֿפֿ אוּפֿ דאתעִישיִשתעמ נִיצהת מֵגלִיצה" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "דאתעִישיִשתעמתיִפּ %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- בּעזעִיצהנוּנג »%s«" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- לעתזתע ֶנדערוּנגשזעִית %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "כּעִינ בּעכּאננתעש דאתעִישיִשתעמ ערכּאננת" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - פּארתִיתִיוֹנשבּעגִיננ בּעִי %llu%sכִּיבּ" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - שעכּתוֹרגרֵססע %uבּ" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - געשאמתגרֵססע וּנבּעכּאננת" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - געשאמתגרֵססע %llu%sכִּיבּ" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--מעהר--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "כּוֹנפִֿיגוּראתִיוֹנשדאתעִי »%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "אוּפֿ ִיהרער פּלאתתפֿוֹרמ ִישת כּעִינע כּוֹמפּרעששִיוֹנ בֿערפֻֿגבּאר" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "פֻֿר ִיהרע פּלאתתפֿוֹרמ שִינד כּעִינע ִיעעע1275-רוֹוּתִינענ בֿערפֻֿגבּאר" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "פֻֿר ִיהרע פּלאתתפֿוֹרמ שִינד כּעִינע עפִֿי-רוֹוּתִינענ בֿערפֻֿגבּאר" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "פֻֿר ִיהרע פּלאתתפֿוֹרמ שִינד כּעִינע שגִי-רוֹוּתִינענ בֿערפֻֿגבּאר" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "פֻֿר ִיהר בּעתרִיעבּששיִשתעמ ִישת כּעִינ זוּפֿאללשזאהלענגענעראתוֹר בֿערפֻֿגבּאר" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "בּאוּמ פֻֿר »דעבִֿיצע-מאפּפּער« כּוֹננתע נִיצהת ערשתעללת וערדענ" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "בֿערשצהלֻששעלתער דאתענתרֶגער »%s« כּוֹננתע נִיצהת עִינגעבּוּנדענ וערדענ: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "»געוֹמ« כּוֹננתע נִיצהת געֵפֿפֿנעת וערדענ!" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "געלִי-נוּתזער כּוֹננתע נִיצהת געפֿוּנדענ וערדענ" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "געלִי-וּוִּיד כּוֹננתע נִיצהת ערמִיתתעלת וערדענ" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "»פּארת«-תעִיל בֿוֹנ »געוֹמ« כּוֹננתע נִיצהת געֵפֿפֿנעת וערדענ" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "גערֶתעגרֵססע ִישת וּנאוּשגערִיצהתעת" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "עש וִירד בֿערשוּצהת, דאש צוֹרע-אבּבִּילד »%s« אוּש גרוּבּ זוּ לעשענ" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "עש וִירד בֿערשוּצהת, דאש צוֹרע-אבּבִּילד »%s« ערנעוּת אוּש גרוּבּ זוּ לעשענ" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "»%s« כּאננ נִיצהת כּוֹררעכּת געלעשענ וערדענ" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "לעשענ דער שעכּתוֹרענ דעש צוֹרע-אבּבִּילדעש ִישת געשצהעִיתערת" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"ֻבּערשעתזער-בּעפֿעהלשזעִילענפּפֿאד פֻֿר פּפֿאד »%s« כּוֹננתע נִיצהת ערמִיתתעלת וערדענ: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "ֻבּערשעתזער-בּעפֿעהלשזעִילענפּפֿאד פֻֿר פּפֿאד »%s« ִישת לעער" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"ֻבּערשעתזער »%s« פֻֿר פּפֿאד »%s« האת בֿערשצהִיעדענע וֵרתער, דִיע כּעִינע וֹפּתִיוֹנענ שִינד, " +"מִינדעשתענש »%s« וּנד »%s«" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"ֻבּערשעתזער »%s« פֻֿר פּפֿאד »%s« ווּרדע נוּר וֹפּתִיוֹנענ ֻבּערגעבּענ, דעבִֿיצע-תעִיל כּוֹננתע " +"נִיצהת געפֿוּנדענ וערדענ" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "שפּעִיצהערִינפֿוֹ פֻֿר »%s« ענתהֶלת כּעִינענ תיִפּ" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "»%s« ִישת כּעִינע לוֹכּאלע פֿעשתפּלאתתע" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"שפּעִיצהערִינפֿוֹרמאתִיוֹנ פֻֿר »%s« ועִישת ועדער אוּפֿ עִינע פּארתִיתִיוֹנ נוֹצה עִינענ " +"דאתענתרֶגער הִינ" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "בּלוֹצכּלִישתענ כּוֹננתענ נִיצהת ערמִיתתעלת וערדענ: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "בּלוֹצכּגרֵססע ִישת נִיצהת דוּרצה 512 תעִילבּאר" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "וּנגֻלתִיגע בּלוֹצכּגרֵססע נוּלל" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "בּלוֹצכּלִישתענ כּוֹננתענ נִיצהת ערמִיתתעלת וערדענ" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ראִיד_בֿערשִיוֹנ-פֿעהלער (ִיוֹצתל): %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "נִיצהת וּנתערשתֻתזתע ראִיד-בֿערשִיוֹנ: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "געת_ארראיִ_ִינפֿוֹ-פֿעהלער (ִיוֹצתל): %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "געת_דִישכּ_ִינפֿוֹ-פֿעהלער (ִיוֹצתל): %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "דאתענשתרוֹמ בֿוֹנ %s כּוֹננתע נִיצהת געֵפֿפֿנעת וערדענ: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "וּנגֻלתִיגער תיִפּ עִינעש ראִיד-גערֶתש »%s«" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"»וֹבּפּפּאתה« ווּרדע ִינ דענ ֻבּערגעוֹרדנעתענ בֿערזעִיצהנִיששענ בֿוֹנ »%s« נִיצהת געפֿוּנדענ, " +"כּעִינע ִיעעע1275-נאמענשערמִיתתלוּנג" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "כּאנוֹנִישצהער פּפֿאד בֿוֹנ »%s« כּוֹננתע נִיצהת ערמִיתתעלת וערדענ" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "וּנבּעכּאננתער גערֶתעתיִפּ %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "אוּפֿרוּפֿ: %s גערֶת\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "פֿוֹרכּ כּוֹננתע נִיצהת אנגעלעגת וערדענ: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "ועִיתערלעִיתוּנג כּוֹננתע נִיצהת אנגעלעגת וערדענ: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "וֹרִיגִינאלבֿערזעִיצהנִיש כּאננ נִיצהת וִיעדערהערגעשתעללת וערדענ" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "אוּפֿרוּפֿ בֿוֹנ שתאת פֻֿר »%s« נִיצהת מֵגלִיצה: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "תעמפּוֹרֶרע דאתעִי כּאננ נִיצהת אנגעלעגת וערדענ: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "תעמפּוֹרֶרעש בֿערזעִיצהנִיש כּוֹננתע נִיצהת ערשתעללת וערדענ: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"ִיעעע1275-גערֶתעפּפֿאד פֻֿר %s כּוֹננתע נִיצהת געפֿוּנדענ וערדענ.\n" +"שִיע מֻששענ דִיע בֿארִיאבּלע »בּוֹוֹת-דעבִֿיצע« מאנוּעלל שעתזענ." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: נִיצהת געפֿוּנדענ" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"»נבֿשעתענבֿ« ִישת פֿעהלגעשצהלאגענ. \n" +"שִיע מֻששענ דִיע בֿארִיאבּלע »בּוֹוֹת-דעבִֿיצע« מאנוּעלל שעתזענ. געבּענ שִיע אמ ִיעעע1275-" +"פּרוֹמפּת פֿוֹלגענדעש עִינ:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "»שיִשתעמפּארתִיתִיוֹנ« וּנד »וֹשלוֹאדער« מֻששענ מאנוּעלל עִינגערִיצהתעת וערדענ." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "כּאנוֹנִישצהער פּפֿאדנאמע ענתהֶלת כּעִינענ »/«" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "ציִגוִינ_צוֹנבֿ_פּאתה() געשצהעִיתערת" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "זוּפֿאללשדאתענ כּוֹננתענ נִיצהת געהוֹלת וערדענ" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "וּנזוּרעִיצהענדע זוּגרִיפֿפֿשרעצהתע פֻֿר פִֿירמוארע, בִּיוֹש וִירד אנגענוֹממענ" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "ִימ בִּיוֹש-מוֹדוּש שִינד כּעִינע עפִֿי-רוֹוּתִינענ בֿערפֻֿגבּאר" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "וּנערוארתעתער עפִֿי-פֿעהלער" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "עש כּוֹננתע כּעִינע פֿרעִיער בּוֹוֹתננננ-שלוֹת ִישת" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"דִיעשע גפּת-פּארתִיתִיוֹנשבּעזעִיצהנוּנג האת כּעִינע בִּיוֹש-בּוֹוֹת-פּארתִיתִיוֹנ, עִינבּעתתוּנג " +"וֻרדע וּנמֵגלִיצה שעִינ" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "ִיהרע בִּיוֹש-בּוֹוֹת-פּארתִיתִיוֹנ ִישת זוּ כּלעִינ, עִינבּעתתוּנג וֻרדע וּנמֵגלִיצה שעִינ" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"דער שעכּתוֹר %llu וִירד בּערעִיתש בֿוֹמ ראִיד-צוֹנתרוֹללער »%s« בֿערוענדעת וּנד וִירד " +"דאהער ֻבּערגאנגענ. בִּיתתע פֿראגענ שִיע דענ הערשתעללער, וֹבּ עש מֵגלִיצה ִישת, כּעִינע " +"דאתענ ִינ דער מבּר-לֻצכּע זוּ שפּעִיצהערנ." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"דער שעכּתוֹר %llu וִירד בּערעִיתש בֿוֹמ פּרוֹגראממ »%s« בֿערוענדעת וּנד וִירד דאהער ֻ" +"בּערגאנגענ. דִיעשע שוֹפֿתוארע כּאננ ִינ זוּכּוּנפֿת שתארת- וֹדער אנדערע פּרוֹבּלעמע " +"הערבֿוֹררוּפֿענ. בִּיתתע פֿראגענ שִיע דעששענ אוּתוֹרענ, וֹבּ עש מֵגלִיצה ִישת, כּעִינע דאתענ ִ" +"ימ בּוֹוֹת-בּערעִיצה זוּ שפּעִיצהערנ." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"אנדערע שוֹפֿתוארע נוּתזת דענ עִינבּעתתוּנגשבּערעִיצה, ווֹדוּרצה נִיצהת גענוּג פּלאתז פֻֿר " +"צוֹרע.ִימג ִישת. שוֹלצהע שוֹפֿתוארע בֿערשוּצהת הֶוּפִֿיג, דאתענ זוּ שפּעִיצהערנ, וּמ שִיע " +"וּנאוּפֿפִֿינדבּאר זוּ מאצהענ. וִיר עמפּפֿעהלענ ִיהנענ, דִיעש זוּ וּנתערשוּצהענ" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"דִיע משדוֹש-פּארתִיתִיוֹנשבּעזעִיצהנוּנג האת כּעִינענ פֿרעִיראוּמ נאצה דעמ מבּר, עִינבּעתתוּנג " +"וֻרדע וּנמֵגלִיצה שעִינ" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"ִיהר עִינבּעתתוּנגשבּערעִיצה ִישת וּנגעוֵהנלִיצה כּלעִינ. צוֹרע.ִימג וֻרדע נִיצהת " +"הִינעִינפּאששענ." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "פּארתִיתִיוֹנ אלש אכּתִיבֿ מארכִּיערענ" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "כּעִינע פּרִימֶרע פּארתִיתִיוֹנ" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "פּארתִיתִיוֹנ %d ִישת נוּנ אכּתִיבֿ. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "»אצתִיבֿע«-פֿלאג אוּפֿ %d ווּרדע געלֵשצהת. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "פּארתִיתִיוֹנשתיִפּ ֶנדערנ" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "»הִידדענ«-פֿלאג ִימ פּארתִיתִיוֹנשתיִפּ שעתזענ" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "דער פּארתִיתִיוֹנשתיִפּ 0כּס%x ִישת וּנגֻלתִיג" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "פּארתִיתִיוֹנשתיִפּ וִירד אוּפֿ 0כּס%x געשעתזת\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "0 שצהלעִיפֿענ כֵּננענ נִיצהת וּנתערבּרוֹצהענ וערדענ" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "אוּססערהאלבּ דעש בּערעִיצהש דער פֿוּנכּתִיוֹנ" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "וּנגֻלתִיגער בֿארִיאבּלעננאמע »%s«" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "וּנערוארתעתעש דאתעִיענדע" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[זאהל]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "שצהלעִיפֿענדוּרצהלאוּפֿ בּעענדענ" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "שצהלעִיפֿענ פֿוֹרתשעתזענ" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "פּוֹשִיתִיוֹנשפּאראמעתער אנפּאששענ." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[וערת]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "פּוֹשִיתִיוֹנשפּאראמעתער פֿעשתלעגענ." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "אוּש עִינער פֿוּנכּתִיוֹנ זוּרֻצכּכּעהרענ." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-מ (שתרעתצה|נוֹרמאל)] דאתעִי" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "הִינתערגרוּנדבִּילד פֻֿר אכּתִיבֿעש תערמִינאל לאדענ." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "פֿארבּע" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "הִינתערגרוּנדפֿארבּע פֻֿר אכּתִיבֿעש תערמִינאל פֿעשתלעגענ." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "ִינהאלת דער צבּמעמ-כּוֹנשוֹלע אנזעִיגענ." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "עִינהעִית דעש שערִיעללענ פּוֹרתש פֿעשתלעגענ." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "אדרעששע דעש שערִיעללענ פּוֹרתש פֿעשתלעגענ." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "געשצהוִינדִיגכּעִית דעש שערִיעללענ פּוֹרתש פֿעשתלעגענ." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "ווֹרתלֶנגע דעש שערִיעללענ פּוֹרתש פֿעשתלעגענ." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "פּארִיתֶת דעש שערִיעללענ פּוֹרתש פֿעשתלעגענ." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "שתוֹפּ-בִּיתש דעש שערִיעללענ פּוֹרתש פֿעשתלעגענ." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "בּאשִישפֿרעקוּענז פֿעשתלעגענ." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "רתש/צתש אכּתִיבִֿיערענ/דעאכּתִיבִֿיערענ." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "שערִיעללער פּוֹרת »%s« ווּרדע נִיצהת געפֿוּנדענ" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "פֿלוּששכּוֹנתרוֹללע דעש שערִיעללענ פּוֹרתש וִירד נִיצהת וּנתערשתֻתזת" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[וֹפּתִיוֹנענ…]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "שערִיעללע שצהנִיתתשתעללע כּוֹנפִֿיגוּרִיערענ." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "וּנבּעכּאננתער תערמִינפֿוֹ-תיִפּ »%s«" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "אשצִיִי" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "וּתפֿ-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "בִֿישוּעללעש וּתפֿ-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "וּנבּעכּאננתע כּוֹדִיערוּנג" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "אכּתוּעללע תערמִינפֿוֹ-תיִפּענ:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "תערמִינאל ִישת נוּר אשצִיִי [בֿוֹרגאבּע]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "תערמִינאל ִישת לוֹגִישצהעש וּתפֿ-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "תערמִינאל ִישת בִֿישוּעללעש וּתפֿ-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "תערמִינאלגעוֹמעתרִיע ווּרדע פֿעשתגעלעגת." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "בּרעִיתעכּסהֵהע." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "וּנגֻלתִיגע אנגאבּע דער תערמִינאלגעוֹמעתרִיע" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" +"תערמִינאל %s ווּרדע נִיצהת געפֿוּנדענ וֹדער וִירד בֿוֹנ תערמִינפֿוֹ נִיצהת בּערֻצכּשִיצהתִיגת" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-א|-וּ|-בֿ] [-ג בּכּסה] תערמ [תיִפּ]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "תערמִינפֿוֹ-תיִפּ בֿוֹנ תערמ אוּפֿ תיִפּ שעתזענ.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "בּלוֹצכּארגוּמענת אוּשגעבּענ וּנד אוּשפֻֿהרענ." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "בִּיתמאפּ-דאתעִי »%s« בּעשִיתזת עִינ נִיצהת וּנתערשתֻתזתעש פֿוֹרמאת" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " בֿבּע-ִינפֿוֹ: בֿערשִיוֹנ: %d.%d וֹעמ-שוֹפֿתוארערעבִֿישִיוֹנ: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " געשאמתשפּעִיצהער: %d כִּיבּ\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "כּעִינ פּאששענדער בִֿידעוֹמוֹדוּש געפֿוּנדענ" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "זוּגרִיפֿפֿ בֿערועִיגערת" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "מוֹדוּלע" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "ִינ מוֹדוּלע אנגעגעבּענע מוֹדוּלע בֿוֹרלאדענ" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "נוּר מוֹדוּלע וּנד דערענ אבּהֶנגִיגכּעִיתענ ִינשתאללִיערענ [בֿוֹרגאבּע=אללע]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "תהעמענ" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "תהעמענ ִינשתאללִיערענ [בֿוֹרגאבּע=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "שצהרִיפֿתענ" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "שצהרִיפֿתענ ִינשתאללִיערענ [בֿוֹרגאבּע=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "שפּראצהענ" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "נוּר שפּראצהענ ִינשתאללִיערענ [בֿוֹרגאבּע=אללע]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "גרוּבּ-דאתעִיענ כּוֹמפּרִימִיערענ [וֹפּתִיוֹנאל]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "זוּ בֿערוענדענדע כּוֹמפּרעששִיוֹנ פֻֿר כּערנעל-אבּבִּילד אוּשוֶהלענ" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "אבּבִּילדער וּנד מוֹדוּלע ִינ בֿערזעִיצהנִיש בֿערוענדענ [בֿוֹרגאבּע=%s/<פּלאתפֿוֹרמ>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "ֻבּערשעתזוּנגענ ִימ בֿערזעִיצהנִיש בֿערז בֿערוענדענ [בֿוֹרגאבּע=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "גרוּבּ-דאתעִיענ ִימ בֿערזעִיצהנִיש בֿערז בֿערוענדענ [בֿוֹרגאבּע=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "דאתעִי אלש ֵפֿפֿענתלִיצהענ שצהלֻששעל זוּר שִיגנאתוּרֻבּערפּרֻפֿוּנג עִינבּעתתענ" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "דאתעִי %s כּאננ נִיצהת ִינ %s וּמבּענאננת וערדענ" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" +"פּלאתתע עכּסִישתִיערת נִיצהת, ערשאתזועִישע וִירד פּארתִיתִיוֹנ דעש גערֶתש %s בֿערוענדעת" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "בּעפֿעהלע:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "עִינע לעערע וּמגעבּוּנגש-בּלוֹצכּדאתעִי ערשתעללענ." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "אכּתוּעללע בֿארִיאבּלענ אוּפֿלִישתענ." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "שעת [נאמע=וערת ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "בֿארִיאבּלענ שעתזענ." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "וּנשעת [נאמע ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "בֿארִיאבּלענ לֵשצהענ." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "וֹפּתִיוֹנענ:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "שִיע מֻששענ מִינדעשתענש עִינענ בּעפֿעהל אנגעבּענ.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "דאתעִינאמע בּעפֿעהל" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "וערכּזעוּג זוּמ בּעארבּעִיתענ עִינער וּמגעבּוּנגש-בּלוֹצכּדאתעִי." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"פֿאללש דאתעִינאמע אלש »-« אנגעגעבּענ ִישת, וִירד ער בֿוֹרגאבּעוערת %s בֿערוענדעת.\n" +"\n" +"עש גִיבּת כּעִינענ »דעלעתע«-בּעפֿעהל. פֿאללש שִיע דענ געשאמתענ וּמגעבּוּנגשבּלוֹצכּ לֵשצהענ " +"ווֹללענ,\n" +"בֿערוענדענ שִיע »רמ %s«." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "וּנגֻלתִיגער ענבִֿירוֹנמענת-בּלוֹצכּ" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "וּנגֻלתִיגער פּאראמעתער %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "ענבִֿירוֹנמענת-בּלוֹצכּ ִישת זוּ כּלעִינ" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "לעשענ בֿוֹנ פּלאתתע שצהעִיתערתע בּעִי %lld, לֶנגע %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "וּנגֻלתִיגער שפּרוּנגוערת %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "לעשעפֿעהלער בּעִי %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "וֹש-דאתעִי »%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "שצהרעִיבּענ ִינ דִיע שתאנדארדאוּשגאבּע פֿעהלגעשצהלאגענ: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "בֿערגלעִיצהשפֿעהלער בּעִי %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "פֿעהלער בּעִימ ֵפֿפֿנענ דער וֹש-דאתעִי %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "»לוֹוֹפּבּאצכּ«-בּעפֿעהל ִישת פֿעהלגעשצהלאגענ: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "»צריִפּתוֹמוֹוּנת«-בּעפֿעהל ִישת פֿעהלגעשצהלאגענ: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "וּוִּיד כּוֹננתע נִיצהת ערמִיתתעלת וערדענ" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "לש פּפֿאד" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "דאתעִיענ ִינ פּפֿאד אוּפֿלִישתענ." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "צפּ דאתעִי לוֹכּאל" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "דאתעִי ִינ לוֹכּאלע דאתעִי לוֹכּאל כּוֹפִּיערענ." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "צאת דאתעִי" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "דאתעִי ִינ דִיע שתאנדארדאוּשגאבּע כּוֹפִּיערענ." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "צמפּ דאתעִי לוֹכּאל" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "דאתעִי מִית לוֹכּאלער דאתעִי לוֹכּאל בֿערגלעִיצהענ." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "העכּס דאתעִי" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "דענ ִינהאלת דער דאתעִי העכּסאדעזִימאל אנזעִיגענ." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "צרצ דאתעִי" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "צרצ32-פּרֻפֿשוּממע בֿוֹנ דאתעִי בּערעצהנענ." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "בּלוֹצכּלִישת דאתעִי" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "בּלוֹצכּלִישתע בֿוֹנ דאתעִי אנזעִיגענ." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "כּסנוּ_וּוִּיד גערֶת" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "כּסנוּ-וּוִּיד דעש גערֶתש בּערעצהנענ." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "זאהל" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "נ בּיִתעש דער אוּשגאבּעדאתעִי ֻבּערשפּרִינגענ." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "נ בּיִתעש ִינ אוּשגאבּעדאתעִי בֿערארבּעִיתענ" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "דִיע אנזאהל דער עִינגאבּעדאתעִיענ אנגעבּענ." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "דעבּוּג-וּמגעבּוּנגשבֿארִיאבּלע שעתזענ." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "בֿערשצהלֻששעלתע גערֶתע עִינהֶנגענ." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "דאתעִי|פּרוֹמפּת" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "זפֿש-שצהלֻששעל לאדענ." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "דאתענ ענתפּאצכּענ." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "וּנגֻלתִיגע פּלאתתענאנזאהל.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "פּלאתתענאנזאהל מוּשש פּלאתתענלִישתע בֿוֹראנגעשתעללת שעִינ.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "כּעִינ בּעפֿעהל אנגעגעבּענ.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "זוּ וענִיגע פּאראמעתער פֻֿר דענ בּעפֿעהל.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "וּנגֻלתִיגער בּעפֿעהל %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "אבּבִּילדפּפֿאד בּעפֿעהלע" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "דִיאגנוֹשעוערכּזעוּג פֻֿר דאתעִישיִשתעמתרעִיבּער." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "נאמע דער עִינגאבּעדאתעִי פֻֿר 32-בִּית פֿעשתלעגענ." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "נאמע דער עִינגאבּעדאתעִי פֻֿר 64-בִּית פֿעשתלעגענ." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "נאמע דער אוּשגאבּעדאתעִי פֿעשתלעגענ. בֿוֹרגאבּע ִישת שתדוֹוּת" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[וֹפּתִיוֹנענ]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "32-בִּית- וּנד 64-בִּית-בִּינאריִ זוּ אפּפּלע-וּנִיבֿערשאל-בִּינאריִ זוּשאממענפֻֿגענ." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "עִינגאבּעדאתעִי פֿעהלת\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "»%s« כּאננ נִיצהת נאצה »%s« כּוֹפִּיערת וערדענ: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "כּוֹמפּרִימִיערענ בֿוֹנ %s נאצה %s נִיצהת מֵגלִיצה" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "בֿערזעִיצהנִיש »%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "»%s« כּאננ נִיצהת געלֵשצהת וערדענ: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "גרוּבּ-מכִּימאגע ווּרדע וֹהנע כּסז-וּנתערשתֻתזוּנג כּוֹמפִּילִיערת" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "וּנבּעכּאננתעש כּוֹמפּרעששִיוֹנשפֿוֹרמאת %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "וּנבּעכּאננתע כּוֹמפּרעששִיוֹנ »%s«" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "וּנבּעכּאננתעש זִיעלפֿוֹרמאת %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "שפּראצהע »%s« כּאננ נִיצהת געפֿוּנדענ וערדענ" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s עכּסִישתִיערת נִיצהת. בִּיתתע געבּענ שִיע --תארגעת וֹדער --דִירעצתוֹריִ אנ" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "וּנגֻלתִיגע מוֹדִינפֿוֹ-דאתעִי »%s«" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "וּנבּעכּאננתע פּלאתתפֿוֹרמ »%s-%s«" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "מעהר אלש עִינ ִינשתאללאתִיוֹנשגערֶת?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "גרוּבּ-אבּבִּילדער ִינ בֿערזעִיצהנִיש/%s אנשתעללע בֿוֹנ %s ִינשתאללִיערענ" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "זִיעל" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "גרוּבּ פֻֿר זִיעל-פּלאתתפֿוֹרמ ִינשתאללִיערענ [בֿוֹרגאבּע=%s]; בֿערפֻֿגבּארע זִיעלע: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"דאש לאוּפֿוערכּ אוּצה אלש דִישכּעתתע בּוֹוֹתפֶֿהִיג מאצהענ (בֿוֹרגאבּע פֻֿר פֿדכּס-גערֶתע). כּאננ " +"מִית עִינִיגענ בִּיוֹש-בֿארִיאנתענ שצהעִיתערנ." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "גערֶתעזוּוֹרדנוּנג לֵשצהענ, פֿאללש בּערעִיתש בֿוֹרהאנדענ" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "תרוֹתזדעמ ִינשתאללִיערענ, אוּצה ועננ פּרוֹבּלעמע אוּפֿתרעתענ" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "ִיד-דאתעִי אוּצה דאננ בֿערוענדענ, ועננ עִינע וּוִּיד בֿערפֻֿגבּאר ִישת" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"זוּ בֿערוענדענדעש פּלאתתענ-מוֹדוּל (בִּיוֹשדִישכּ וֹדער נאתִיבֿע). דִיעשע וֹפּתִיוֹנ ִישת נוּר " +"פֻֿר בִּיוֹש-זִיעלע בֿערפֻֿגבּאר." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"דִיע נבֿראמ-בֿארִיאבּלע »בּוֹוֹת-דעבִֿיצע«/»בּוֹוֹת*« נִיצהת אכּתוּאלִישִיערענ. דִיעשע וֹפּתִיוֹנ ִ" +"ישת נוּר פֻֿר עפִֿי- וּנד ִיעעע1275-זִיעלע בֿערפֻֿגבּאר." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "גערֶת נִיצהת אוּפֿ דאתעִישיִשתעמע ֻבּערפּרֻפֿענ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "כּעִינענ בּוֹוֹתשעכּתוֹר ִינשתאללִיערענ" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"כּעִינע רעעד-שוֹלוֹמוֹנ-צוֹדעש בּעִימ עִינבּעתתענ בֿוֹנ צוֹרע.ִימג בֿערוענדענ. דִיעשע וֹפּתִיוֹנ ִ" +"ישת נוּר פֻֿר כּס86-בִּיוֹש-זִיעלע בֿערפֻֿגבּאר." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"דאש ִינשתאללאתִיוֹנשגערֶת ִישת עִינ ועצהשעלדאתענתרֶגער. דִיעשע וֹפּתִיוֹנ ִישת נוּר בּעִי " +"עפִֿי בֿערפֻֿגבּאר." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "כּעננוּנג" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"דִיע כּעננוּנג דעש בּוֹוֹתלוֹאדערש. דִיעשע וֹפּתִיוֹנ ִישת נוּר אוּפֿ עפִֿי-שיִשתעמענ וּנד מאצש " +"בֿערפֻֿגבּאר." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "בֿערזעִיצהנִיש אלש ווּרזעל דער עפִֿי-שיִשתעמפּארתִיתִיוֹנ בֿערוענדענ." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "בֿערז פֻֿר פּפּצ-מאצ-ִינשתאללאתִיוֹנ בֿערוענדענ." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "דאתעִי אלש שצהרִיפֿתארת פֻֿר בּעשצהרִיפֿתוּנג בֿערוענדענ" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "פֿארבּע פֻֿר בּעשצהרִיפֿתוּנג בֿערוענדענ." + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "פֿארבּע פֻֿר בּעשצהרִיפֿתוּנגשהִינתערגרוּנד בֿערוענדענ." + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "זעִיצהענכּעתתע אלש פּרוֹדוּכּתבֿערשִיוֹנ בֿערוענדענ" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[וֹפּתִיוֹנ] [ִינשתאללאתִיוֹנשגערֶת]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "גרוּבּ אוּפֿ ִיהרעמ לאוּפֿוערכּ ִינשתאללִיערענ." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"ִינשתאללאתִיוֹנשגערֶת מוּשש דער נאמע דעש גערֶתש שעִינ.\n" +"%s כּוֹפִּיערת גרוּבּ-אבּבִּילדער נאצה %s. אוּפֿ עִינִיגענ שיִשתעמענ\n" +"כּאננ עש אוּצה גרוּבּ ִינ דענ בּוֹוֹתשעכּתוֹר ִינשתאללִיערענ." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "דאש לאוּפֿוערכּ %s ווּרדע ִינ דער גערֶתעתאבּעללע מעהרפֿאצה %s דעפִֿינִיערת" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "ִיהרע פּלאתתפֿוֹרמ כּוֹננתע נִיצהת ערכּאננת וערדענ. בֿערוענדענ שִיע --תארגעת." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "%s וִירד פֻֿר ִיהרע פּלאתתפֿוֹרמ ִינשתאללִיערת.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "כּעִינ ִינשתאללאתִיוֹנשגערֶת אנגעגעבּענ" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "עפִֿי-בֿערזעִיצהנִיש כּאננ נִיצהת געפֿוּנדענ וערדענ" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "גערֶת פֻֿר %s כּוֹננתע נִיצהת געפֿוּנדענ וערדענ (ִישת /דעבֿ עִינגעהֶנגת?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"פֻֿר %s כּוֹננתע כּעִינ גרוּבּ-לאוּפֿוערכּ געפֿוּנדענ וערדענ. ֻבּערפּרֻפֿענ שִיע ִיהרע דעבִֿיצע.מאפּ" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s שצהעִינת כּעִינע עפִֿי-פּארתִיתִיוֹנ זוּ שעִינ" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "עִינענ ענתדעצכּתענ פֿעהלער בּערִיצהתענ" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "דאתעִישיִשתעמ אוּפֿ %s ִישת ועדער הפֿש נוֹצה הפֿש+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"בֿערשוּצה, עִינענ בֿערשצהלֻששעלתענ דאתענתרֶגער וֹהנע אכּתִיבִֿיערתעש צריִפּתוֹדִישכּ זוּ ִ" +"ינשתאללִיערענ. שעתזענ שִיע »%s« ִינ דאתעִי »%s«" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "דאתעִי »%s« כּאננ נִיצהת אנגעלעגת וערדענ." + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"כּעִינע הִינועִישע פֻֿר ִיהר בּעתרִיעבּששיִשתעמ בֿערפֻֿגבּאר. בֿעררִינגערתע לעִישתוּנג ִישת זוּ " +"ערוארתענ." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "נִיצהת געשתארתעת:" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "דִיע געוֶהלתע פּארתִיתִיוֹנ ִישת כּעִינע פּרעפּ-פּארתִיתִיוֹנ" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "גרוּבּ כּוֹננתע נִיצהת ִינ דִיע פּרעפּ-פּארתִיתִיוֹנ כּוֹפִּיערת וערדענ" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"דִיע פּרעפּ-פּארתִיתִיוֹנ ִישת נִיצהת לעער. פֿאללש שִיע שִיצהער שִינד, דאשש שִיע שִיע " +"בֿערוענדענ ווֹללענ, פֻֿהרענ שִיע דד אוּש, וּמ שִיע זוּ לעערענ: »%s«" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "כּעננוּנג דעש עפִֿי-בּוֹוֹתלוֹאדערש ִישת נִיצהת אנגעגעבּענ." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "וארנוּנג: עש ווּרדע כּעִינע פּלאתתפֿוֹרמשפּעזִיפִֿישצהע ִינשתאללאתִיוֹנ דוּרצהגעפֻֿהרת" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "ִינשתאללאתִיוֹנ בּעענדעת. כּעִינע פֿעהלער אוּפֿגעתרעתענ." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "כּעִינ פּפֿאד וֹדער גערֶת ווּרדע אנגעגעבּענ.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--פּפּצ פּפֿאד|--כּס86 דאתעִי" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "אוּפֿרוּפֿ: %s [עִינגאבּעדאתעִי [אוּשגאבּעדאתעִי]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "פֿרעעתיִפּע-פֿעהלער %d בּעִימ לאדענ דעש גליִפּהש 0כּס%x פֻֿר וּ+0כּס%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (מִיתתִיג)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (גאנז לִינכּש)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (גאנז רעצהתש)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "ערשעתזוּנג אוּססערהאלבּ דעש בּערעִיצהש (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "שוּצהע אוּססערהאלבּ דעש בּערעִיצהש: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "נִיצהת וּנתערשתֻתזתער ערשעתזוּנגשתיִפּ: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "נִיצהת וּנתערשתֻתזתע ערשעתזוּנגשאנגאבּע: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "נִיצהת וּנתערשתֻתזתע צוֹבֿעראגע-שפּעזִיפִֿיכּאתִיוֹנ: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "וארנוּנג: נִיצהת וּנתערשתֻתזתע פּאראמעתער פֻֿר שצהרִיפֿתעִיגענשצהאפֿתענ: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "אוּשגאבּע ִינ דאתעִי שפּעִיצהערנ [ערפֿוֹרדערלִיצה]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "שצהרִיפֿתארת-ִינדעכּס שעתזענ" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "בֿוֹנ-בִּיש[,בֿוֹנ-בִּיש]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "שצהרִיפֿתבּערעִיצה פֿעשתלעגענ" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "שצהרִיפֿתפֿאמִילִיע פֿעשתלעגענ" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "גרֵססע" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "שצהרִיפֿתגרֵססע פֿעשתלעגענ" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "שצהרִיפֿתאוּפֿפֻֿללוּנג וּנתענ עִינשתעללענ" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "שצהרִיפֿתאוּפֿפֻֿללוּנג וֹבּענ עִינשתעללענ" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "ִינ פֿעתתע שצהרִיפֿת וּמואנדעלנ" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "אוּתוֹמאתִישצהעש הִינתִינג ערזוִינגענ" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "הִינתִינג דעאכּתִיבִֿיערענ" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "בִּיתמאפּ-שתרִיכּעש בּעִימ לאדענ ִיגנוֹרִיערענ" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "וּנגֻלתִיגער שצהרִיפֿתבּערעִיצה" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[וֹפּתִיוֹנענ] שצהרִיפֿתדאתעִיענ" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "ֻבּלִיצהע שצהרִיפֿתדאתעִיפֿוֹרמאתע ִינ פּפֿ2 וּמואנדעלנ" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "אוּשגאבּעדאתעִי מוּשש אנגעגעבּענ וערדענ" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "פֿת_ִינִית_פֿרעעתיִפּע ִישת געשצהעִיתערת" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "%s כּאננ נִיצהת געֵפֿפֿנעת וערדענ, ִינדעכּס %d: פֿעהלער %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "שצהרִיפֿתגרֵססע %dכּס%d כּאננ נִיצהת געשעתזת וערדענ: פֿרעעתיִפּע-פֿעהלער %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "פּרֶפִֿיכּס-בֿערזעִיצהנִיש פֿעשתלעגענ" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"דאתעִי אלש מעמדִישכּ-אבּבִּילד עִינבּעתתענ\n" +"ִימפּלִיזִיערת »-פּ (מעמדִישכּ)/בּוֹוֹת/גרוּבּ« וּנד שעתזת יעדעש בֿוֹרהער אנגעגעבּענע פּרֶפִֿיכּס " +"אוּססער כּראפֿת, אבּער דאש פּרֶפִֿיכּס שעלבּשת כּאננ דוּרצה שפֶּתער אנגעגעבּענע וֹפּתִיוֹנענ " +"וִיעדערוּמ אוּססער כּראפֿת געשעתזת וערדענ" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "דאתעִי אלש אנפֿאנגשכּוֹנפִֿיגוּראתִיוֹנ עִינבּעתתענ" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "נוֹתע-שעגמענת פֻֿר צהרפּ ִיעעע1275 הִינזוּפֻֿגענ" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "עִינ ערזעוּגתעש אבּבִּילד ִינ דאתעִי אוּשגעבּענ [בֿוֹרגאבּע=שתדוֹוּת]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "פֿוֹרמאת" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "עִינ אבּבִּילד ִימ פֿוֹרמאת ערזעוּגענ" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "בֿערפֻֿגבּארע פֿוֹרמאתע:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "וּנבּעכּאננתעש זִיעלפֿוֹרמאת %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[וֹפּתִיוֹנ]… [מוֹדוּלע]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "עִינ בּוֹוֹתפֶֿהִיגעש גרוּבּ-אבּבִּילד ערשתעללענ" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "זִיעלפֿוֹרמאת ווּרדע נִיצהת אנגעגעבּענ (בֿערוענדענ שִיע דִיע וֹפּתִיוֹנ -0)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "פּרֶפִֿיכּס ווּרדע נִיצהת אנגעגעבּענ (בֿערוענדענ שִיע דִיע וֹפּתִיוֹנ -פּ)" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"»%s« ִישת פֿעהלערהאפֿת כּוֹמפִּילִיערת: דעששענ שתארתאדרעששע ִישת 0כּס%llx אנשתעללע בֿוֹנ " +"0כּס%llx: פֿעהלער ִינ לד.גוֹלד?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "נאמע דער עִינגאבּעדאתעִי פֿעשתלעגענ. בֿוֹרגאבּע ִישת שתדִינ" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "וּנגֻלתִיגער בּעזעִיצהנער פֻֿר תאשתאתוּרשצאנ %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "וּנגֻלתִיגער צוֹדע פֻֿר תאשתאתוּרשצאנ 0כּס%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"פֿעהלער: כּעִינע גֻלתִיגע תאשתאתוּרבּעלעגוּנג געפֿוּנדענ. ֻבּערפּרֻפֿענ שִיע דִיע עִינגאבּע.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "גרוּבּ-תאשתאתוּרבּעלעגוּנג אוּש דעמ דער לִינוּכּס-כּוֹנשוֹלע ערשתעללענ." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "ווּרזעלבֿערזעִיצהנִיש אוּפֿ דעמ תפֿתפּ-שערבֿער" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "רעלאתִיבֿער פּפֿאד זוּמ וּנתערבֿערזעִיצהנִיש אוּפֿ דעמ נעתזוערכּשערבֿער" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"בּערעִיתעת גרוּבּ-נעתזוערכּ-בּוֹוֹתאבּבִּילדער ִינ נעת_דִירעצתוֹריִ/שוּבּדִיר בֿוֹר, ווֹבּעִי " +"אנגענוֹממענ וִירד, דאשש נעת_דִירעצתוֹריִ דאש תפֿתפּ-ווּרזעלבֿערזעִיצהנִיש ִישת." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "נִיצהת וּנתערשתֻתזתע פּלאתתפֿוֹרמ %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"נעתבּוֹוֹת-בֿערזעִיצהנִיש פֻֿר %s ווּרדע ערשתעללת. רִיצהתענ שִיע ִיהרענ דהצפּ-שערבֿער שוֹ " +"עִינ, דאשש ער אוּפֿ %s בֿערועִישת\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "אנזאהל בֿוֹר פּבּכּדפֿ2-דוּרצהלֶוּפֿע" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "לֶנגע דער ערזעוּגתענ פּרֻפֿשוּממע" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "לֶנגע בֿוֹנ שאלת" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "פּבּכּדפֿ2-פּאששווֹרת-פּרֻפֿשוּממע ערזעוּגענ. " + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "פּאששווֹרת כּוֹננתע נִיצהת געלעשענ וערדענ" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "פּאששווֹרת ערנעוּת עִינגעבּענ:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "דִיע פּאששוֵרתער שתִיממענ נִיצהת ֻבּערעִינ" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "זוּפֿאללשדאתענ פֻֿר שאלת כּוֹננתענ נִיצהת געהוֹלת וערדענ" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "כּריִתוֹגראפִֿיעפֿעהלער נוּממער %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "פּבּכּדפֿ2-פּרֻפֿשוּממע ִיהרעש פּאששווֹרתש ִישת %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "כּעִינ פּפֿאד אנגעגעבּענ.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "פּפֿאד" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "עִינענ שיִשתעמדאתעִינאמענ ִינ עִינענ פֻֿר גרוּבּ וּמואנדעלנ." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "רוֹמ-אבּבִּילדער ִינ בֿערזעִיצהנִיש שפּעִיצהערנ [וֹפּתִיוֹנאל]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "דאתעִי אלש כּסוֹררִישוֹ בּענוּתזענ [וֹפּתִיוֹנאל]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "זעִיצהענכּעתתע אלש פּרוֹדוּכּתנאמע בֿערוענדענ" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"שפּארצ-בּוֹוֹתבֿוֹרגאנג אכּתִיבִֿיערענ. דִיע דעאכּתִיבִֿיערת הפֿש+, אפּמ, ארצש וּנד בּוֹוֹתענ אלש " +"פֿעשתפּלאתתענאבּבִּילד פֻֿר ִי386-פּצ" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"אכּתִיבִֿיערת ארצש-בּוֹוֹת (מִיפּש-רעצהנער מִית בִּיג-ענדִיאנ-בּיִתערעִיהענפֿוֹלגע, מעִישת " +"שגִי). הפֿש+, אפּמ, שפּארצ64 וּנד בּוֹוֹתענ אלש דִישכּ-אבּבִּילד פֻֿר ִי386-פּצ וערדענ " +"דעאכּתִיבִֿיערת" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"בּוֹוֹתפֶֿהִיגעש גרוּבּ-אבּבִּילד פֻֿר צד-רוֹמ, פֿעשתפּלאתתע, וּשבּ-שתִיצכּ וּנד דִישכּעתתע " +"ערשתעללענ." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"ערזעוּגת עִינ בּוֹוֹתפֶֿהִיגעש צד/וּשבּ/דִישכּעתתענאבּבִּילד. ארגוּמענתע, דִיע נִיצהת זוּ דענ " +"וֹפּתִיוֹנענ דִיעשעש פּרוֹגראממש געהֵרענ, וערדענ אנ כּסוֹררִישוֹ ֻבּערגעבּענ וּנד ִינדִיזִיערענ " +"קוּעללדאתעִיענ, קוּעללבֿערזעִיצהנִיששע וֹדער עִינע בּעלִיעבִּיגע מכִּישוֹפֿש-וֹפּתִיוֹנ, דִיע בֿוֹנ " +"»%s« אוּשגעגעבּענ וִירד." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "וֹפּתִיוֹנ -- ועצהשעלת ִינ דענ נאתִיבֿענ כּסוֹררִישוֹ-בּעפֿעהלשמוֹדוּש." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "רִיצהתענ שִיע שוּפּפּוֹרתאנפֿראגענ זוּ כּסוֹררִישוֹ אנ <בּוּג-כּסוֹררִישוֹ@גנוּ.וֹרג>." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[וֹפּתִיוֹנ] קוּעללע …" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "וּנתערשתֻתזוּנג פֻֿר %s וִירד אכּתִיבִֿיערת …" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"ִיהר כּסוֹררִישוֹ וּנתערשתֻתזת »--גרוּבּ2-בּוֹוֹת-ִינפֿוֹ« נִיצהת. עִינִיגע פֿוּנכּתִיוֹנענ שִינד " +"דעאכּתִיבִֿיערת. בִּיתתע בֿערוענדענ שִיע כּסוֹררִישוֹ ִינ בֿערשִיוֹנ 1.2.9 וֹדער נעוּער." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"ִיהר כּסוֹררִישוֹ וּנתערשתֻתזת »--גרוּבּ2-בּוֹוֹת-ִינפֿוֹ« נִיצהת. ִיהר צוֹרע-אבּבִּילד ִישת זוּ " +"גרוֹסס. בּוֹוֹתענ אלש פֿעשתפּלאתתע ִישת דעאכּתִיבִֿיערת. בִּיתתע בֿערוענדענ שִיע כּסוֹררִישוֹ ִ" +"ינ בֿערשִיוֹנ 1.2.9 וֹדער נעוּער." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"עִינ לאוּפֿפֶֿהִיגעש אבּבִּילד עִינשצהלִיעססלִיצה אללער מוֹדוּלע ִימ געוֶהלתענ פֿוֹרמאת " +"ערשתעללענ" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"גראפֿתפּוִֹינת-שיִנתאכּס (ז.בּ. /בּוֹוֹת/גרוּבּ/גרוּבּ.צפֿג=./גרוּבּ.צפֿג) וִירד אכּזעפּתִיערת" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "אבּבִּילד1 [אבּבִּילד2 ...] עִינהֶנגעפּוּנכּת" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "אבּבִּילד וּנד עִינהֶנגעפּוּנכּת וערדענ בּענֵתִיגת" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "דאש אנגעגעבּענע ארגוּמענת ִישת עִינ שיִשתעמגערֶת, כּעִינ פּפֿאד" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "עִינתרֶגע ִינ דער אוּשגאבּע דוּרצה אשצִיִי-נוּל-זעִיצהענ תרעננענ" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[בֿוֹרגאבּע=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "זִיעל אוּשגעבּענ" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "בֿערפֻֿגבּארע זִיעלע:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[וֹפּתִיוֹנענ]… [פּפֿאד|גערֶת]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"גערֶתעִינפֿוֹרמאתִיוֹנענ פֻֿר עִינענ אנגעגעבּענענ פּפֿאד ערמִיתתעלנ (וֹדער גערֶת, פֿאללש דִיע " +"וֹפּתִיוֹנ -ד אנגעגעבּענ ִישת)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "תעכּסת אוּש דאתעִי לעשענ." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "פֿארבּע פֻֿר תעכּסת בֿערוענדענ" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "פֿארבּע פֻֿר הִינתערגרוּנד בֿערוענדענ" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "אנזוּזעִיגענדע בּעשצהרִיפֿתוּנג פֿעשתלעגענ" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "דאתעִי אלש שצהרִיפֿת בֿערוענדענ (פּפֿ2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "אפּפּלעש .דִישכּ_לאבּעל דארשתעללענ." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "ארגוּמענתע פֿעהלענ\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[פּפֿאד]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "ֻבּערפּרֻפֿת דִיע גרוּבּ-שכּרִיפּתכּוֹנפִֿיגוּראתִיוֹנ אוּפֿ שיִנתאכּספֿעהלער" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "שיִנתאכּספֿעהלער ִינ זעִילע %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "שכּרִיפּת »%s« ענתהֶלת נִיצהתש, עש וִירד נִיצהתש אוּשגעפֻֿהרת\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "דאתעִי אלש בּוֹוֹת-אבּבִּילד בֿערוענדענ [בֿוֹרגאבּע=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "דאתעִי אלש כּערנ-אבּבִּילד בֿערוענדענ [בֿוֹרגאבּע=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "כּעִינ גערֶת אנגעגעבּענ.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"אבּבִּילדער זוּמ בּוֹוֹתענ בֿוֹנ גערֶת עִינרִיצהתענ.\n" +"\n" +"שִיע שוֹללתענ דִיעשעש פּרוֹגראממ נוֹרמאלערועִישע נִיצהת דִירעכּת אוּשפֻֿהרענ.\n" +"בֿערוענדענ שִיע שתאתתדעששענ גרוּבּ-ִינשתאלל." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "גערֶת מוּשש עִינ וֹש-גערֶת שעִינ (ז.בּ. /דעבֿ/שדא)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "וּנגֻלתִיגעש גערֶת »%s«.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "ווּרזעלבֿערזעִיצהנִיש, וִיע עש זוּר לאוּפֿזעִית אנגעזעִיגת וִירד [בֿוֹרגאבּע=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"אכּתוּעללעש שיִשלִינוּכּס-בֿערזעִיצהנִיש, וִיע עש זוּר לאוּפֿזעִית אנגעזעִיגת וִירד [בֿוֹרגאבּע ִ" +"ישת דאש ֻבּערגעוֹרדנעתע בֿערזעִיצהנִיש דער עִינגאבּעדאתעִי]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "אוּשגאבּע ִינ דאתעִי שצהרעִיבּענ [בֿוֹרגאבּע=שתדוֹוּת]" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "שיִשלִינוּכּס-כּוֹנפִֿיגוּראתִיוֹנשדאתעִי ִינ עִינע פֻֿר גרוּבּ וּמואנדעלנ." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "כּערנעל-אבּבִּילד כּאננ נִיצהת כּוֹמפּרִימִיערת וערדענ" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "וּנבּעכּאננתע כּוֹמפּרעששִיוֹנ %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "דעכּוֹמפּרעששוֹר ִישת זוּ גרוֹסס" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "צוֹרע-אבּבִּילד ִישת זוּ גרוֹסס (0כּס%x > 0כּס%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "כּערנעל-אבּבִּילד ִישת זוּ גרוֹסס (0כּס%x > 0כּס%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "דִיע גרֵססע בֿוֹנ דִישכּבּוֹוֹת.ִימג מוּשש %u בּיִתעש בּעתראגענ" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"פֿושתארת.ִימג ענתשפּרִיצהת נִיצהת דער בּעכּאננתערמאססענ פֿוּנכּתִיוֹנִיערענדענ בֿערשִיוֹנ. " +"בֿערוענדענ שִיע דִיעש אוּפֿ עִיגענע געפֿאהר" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "פִֿירמוארע-אבּבִּילד ִישת זוּ גרוֹסס" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "וּנגֻלתִיגעש זעִילענפֿוֹרמאת: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "דער ערשתע שעכּתוֹר דער צוֹרע-דאתעִי ִישת נִיצהת שעכּתוֹר-אוּשגערִיצהתעת" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" +"נִיצהת אנ שעכּתוֹרענ אוּשגערִיצהתעתע דאתענ ווּרדענ ִינ דער צוֹרע-דאתעִי געפֿוּנדענ" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "דִיע שעכּתוֹרענ דער צוֹרע-דאתעִי שִינד זוּ שתארכּ פֿראגמענתִיערת" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "דִיע גרֵססע בֿוֹנ »%s« ִישת נִיצהת %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "»%s« ִישת זוּ כּלעִינ" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"עש וִירד בֿערשוּצהת, גרוּבּ אוּפֿ עִינער פּלאתתע מִית מעהרערענ פּארתִיתִיוֹנשבּעזעִיצהנוּנגענ " +"וֹדער שוֹווֹהל פּארתִיתִיוֹנשבּעזעִיצהנוּנגענ אלש אוּצה דאתעִישיִשתעמענ זוּ ִינשתאללִיערענ. " +"דִיעש וִירד דערזעִית נוֹצה נִיצהת וּנתערשתֻתזת." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"עש כּאננ כּעִינ דאתעִישיִשתעמ ִינ %s ערכּאננת וערדענ. שִיצהערהעִיתשֻבּערפּרֻפֿוּנג כּאננ " +"נִיצהת אוּשגעפֻֿהרת וערדענ" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s ענתהֶלת עִינ %s-דאתעִישיִשתעמ, ועלצהעש בּעכּאננתערמאססענ כּעִינענ פּלאתז פֻֿר עִינענ " +"דוֹש-בּעתרִיעבּששיִשתעמשתארת בּערעִיתהֶלת. דִיע ִינשתאללאתִיוֹנ בֿוֹנ גרוּבּ כֵּננתע דִיע " +"זערשתֵרוּנג דעש דאתעִישיִשתעמש נאצה שִיצה זִיעהענ, שוֹפֿערנ דאתענ דוּרצה גרוּבּ-שעתוּפּ ֻ" +"בּערשצהרִיעבּענ וערדענ. דִיע וֹפּתִיוֹנ --שכִּיפּ-פֿש-פּרוֹבּע דעאכּתִיבִֿיערת דִיעשע ֻבּערפּרֻפֿוּנג, " +"בֿערוענדענ שִיע דִיעש אוּפֿ עִיגענע געפֿאהר." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s שצהעִינת עִינע %s-פּארתִיתִיוֹנשתאבּעללע זוּ ענתהאלתענ, ועלצהע בּעכּאננתערמאססענ " +"כּעִינענ פּלאתז פֻֿר עִינענ דוֹש-בּעתרִיעבּששיִשתעמשתארת בּערעִיתהֶלת. דִיע ִינשתאללאתִיוֹנ " +"בֿוֹנ גרוּבּ כֵּננתע דִיע זערשתֵרוּנג דעש דאתעִישיִשתעמש נאצה שִיצה זִיעהענ, שוֹפֿערנ דאתענ " +"דוּרצה גרוּבּ-שעתוּפּ ֻבּערשצהרִיעבּענ וערדענ. דִיע וֹפּתִיוֹנ --שכִּיפּ-פֿש-פּרוֹבּע דעאכּתִיבִֿיערת " +"דִיעשע ֻבּערפּרֻפֿוּנג, בֿערוענדענ שִיע דִיעש אוּפֿ עִיגענע געפֿאהר." + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s שצהעִינת עִינע %s-פּארתִיתִיוֹנשתאבּעללע וּנד לדמ זוּ ענתהאלתענ, ועלצהעש " +"בּעכּאננתערמאססענ כּעִינע שִיצהערע כּוֹמבִּינאתִיוֹנ ִישת. דִיע ִינשתאללאתִיוֹנ בֿוֹנ גרוּבּ " +"כֵּננתע דִיע זערשתֵרוּנג דעש דאתעִישיִשתעמש נאצה שִיצה זִיעהענ, שוֹפֿערנ דאתענ דוּרצה " +"גרוּבּ-שעתוּפּ ֻבּערשצהרִיעבּענ וערדענ. דִיע וֹפּתִיוֹנ --שכִּיפּ-פֿש-פּרוֹבּע דעאכּתִיבִֿיערת דִיעשע ֻ" +"בּערפּרֻפֿוּנג, בֿערוענדענ שִיע דִיעש אוּפֿ עִיגענע געפֿאהר." + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"עש וִירד בֿערשוּצהת, גרוּבּ אוּפֿ עִינער נִיצהת פּארתִיתִיוֹנִיערתענ פּלאתתע וֹדער ִינ עִינע " +"פּארתִיתִיוֹנ זוּ ִינשתאללִיערענ. דאש ִישת עִינע שצהלעצהתע ִידעע." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"עש וִירד בֿערשוּצהת, גרוּבּ אוּפֿ עִינער פּלאתתע מִית מעהרערענ פּארתִיתִיוֹנשבּעזעִיצהנוּנגענ " +"זוּ ִינשתאללִיערענ. דִיעש וִירד דערזעִית נוֹצה נִיצהת וּנתערשתֻתזת." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "פּארתִיתִיוֹנשתיִפּ »%s« וּנתערשתֻתזת כּעִינע עִינבּעתתוּנגענ" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "דאתעִישיִשתעמ »%s« וּנתערשתֻתזת כּעִינע עִינבּעתתוּנגענ" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"ִיהר עִינבּעתתוּנגשבּערעִיצה ִישת וּנגעוֵהנלִיצה כּלעִינ. צוֹרע.ִימג וֻרדע נִיצהת " +"הִינעִינפּאששענ." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "כּעִינ תערמִינאתוֹר ִימ צוֹרע-אבּבִּילד" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "בֿערשִיוֹנ בֿוֹנ צוֹרע.ִימג פּאששת נִיצהת" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"עִינבּעתתוּנג ִישת נִיצהת מֵגלִיצה, יעדוֹצה פֻֿר דִיע ִינשתאללאתִיוֹנ מִית ראִיד וּנד לבֿמ " +"ערפֿוֹרדערלִיצה" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "דאתעִישיִשתעמתיִפּ אוּפֿ %s כּוֹננתע נִיצהת ערמִיתתעלת וערדענ" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "דאתעִישיִשתעמ »%s« וּנתערשתֻתזת כּעִינע בּלוֹצכּלִישתענ" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"עִינבּעתתוּנג ִישת נִיצהת מֵגלִיצה, יעדוֹצה פֻֿר דִיע ִינשתאללאתִיוֹנ אוּפֿ מעהרערענ " +"לאוּפֿוערכּענ ערפֿוֹרדערלִיצה" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"עִינבּעתתוּנג ִישת נִיצהת מֵגלִיצה. גרוּבּ כּאננ ִינ דִיעשער כּוֹנפִֿיגוּראתִיוֹנ נוּר מִיתתעלש " +"בּלוֹצכּלִישתענ ִינשתאללִיערת וערדענ. בּלוֹצכּלִישתענ שִינד אללערדִינגש וּנזוּבֿערלֶששִיג וּנד " +"דערענ בֿערוענדוּנג וִירד דאהער נִיצהת עמפּפֿוֹהלענ." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "מִית בּלוֹצכּלִישתענ וִירד נִיצהת פֿוֹרתגעשעתזת" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "בּלוֹצכּלִישתענ שִינד וּנגֻלתִיג" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "בּלוֹצכּלִישתענ שִינד וּנבֿוֹללשתֶנדִיג" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "אוּפֿרוּפֿ: %s -וֹ אוּשגאבּע צכּבּמאפּ_ארגוּמענתע...\\נ" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "עִינע גרוּבּ-תאשתאתוּרלאיִוֹוּתדאתעִי ערשתעללענ." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "דִיעשע מעלדוּנג אנזעִיגענ וּנד בּעענדענ" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "בֿערשִיוֹנשִינפֿוֹרמאתִיוֹנענ אוּשגעבּענ וּנד בּעענדענ" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s ערשתעללת עִינע תאשתאתוּרבּעלעגוּנג פֻֿר גרוּבּ מִיתתעלש צכּבּצוֹמפּ\\נ" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "מעלדענ שִיע פֿעהלער אנ <בּוּג-גרוּבּ@גנוּ.וֹרג>." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: וֹפּתִיוֹנ ערוארתעת עִינ ארגוּמענת -- »%s«\\נ" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ]\\נ" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "עִינע גרוּבּ-כּוֹנפִֿיגוּראתִיוֹנשדאתעִי ערשתעללענ" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "ערשתעללתע כּוֹנפִֿיגוּראתִיוֹנ ִינ דאתעִי אוּשגעבּענ [בֿוֹרגאבּע=שתדוֹוּת]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "וּנערכּאננתע וֹפּתִיוֹנ »%s«\\נ" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: שִיע מֻששענ דִיעש אלש רוֹוֹת אוּשפֻֿהרענ\\נ" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: נִיצהת געפֿוּנדענ.\\נ" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "גרוּבּ-כּוֹנפִֿיגוּראתִיוֹנשדאתעִי וִירד ערשתעללת …" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"ִינ דער ערזעוּגתענ גרוּבּ-כּוֹנפִֿיגוּראתִיוֹנשדאתעִי ווּרדענ\n" +"שיִנתאכּספֿעהלער ענתדעצכּת. שתעללענ שִיע שִיצהער, דאש דִיע דאתעִיענ\n" +"/עתצ/דעפֿאוּלת/גרוּבּ וּנד /עתצ/גרוּבּ.ד/* פֿעהלערפֿרעִי שִינד וֹדער\n" +"ערשתעללענ שִיע עִינענ פֿעהלערבּערִיצהת מִית %s אלש אנהאנג." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "ערלעדִיגת" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "וארנוּנג:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ] מענֻעִינתראג\\נ" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"דענ שתאנדארד-בּוֹוֹתעִינתראג פֻֿר גרוּבּ פֿעשתלעגענ (נוּר פֻֿר דענ נֶצהשתענ בּוֹוֹתבֿוֹרגאנג)." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "גרוּבּ-אבּבִּילדער ווּרדענ ִימ בֿערזעִיצהנִיש בֿערז/%s אנשתעללע בֿוֹנ %s ערוארתעת" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "מעהר אלש עִינ מענֻעִינתראג?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "כּעִינ מענֻעִינתראג אנגעגעבּענ." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "דענ בֿוֹרעִינגעשתעללתענ בּוֹוֹתעִינתראג פֻֿר גרוּבּ פֿעשתלעגענ." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"דִיעש ערפֿוֹרדערת דִיע עִינשתעללוּנג גרוּבּ_דעפֿאוּלת=שאבֿעד ִינ %s/דעפֿאוּלת/גרוּבּ.\\נ" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "מענֻעִינתראג ִישת עִינע זאהל, עִינ תִיתעל וֹדער בּעזעִיצהנער עִינעש מענֻעִינתראגש." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"שערִיעללעש תערמִינאל ווּרדע אנגעפֿוֹרדערת, אבּער גרוּבּ_שערִיאל_צוֹממאנד ווּרדע נִיצהת " +"אנגעגעבּענ. שתאנדארדפּאראמעתער וערדענ בֿערוענדעת." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "תהעמא געפֿוּנדענ: %s\\נ" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "הִינתערגרוּנד געפֿוּנדענ: %s\\נ" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "בִּילדפֿוֹרמאת נִיצהת וּנתערשתֻתזת" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"גרוּבּ_תִימעוֹוּת אוּפֿ עִינענ בֿוֹנ נוּלל בֿערשצהִיעדענענ וערת שעתזענ, ועננ " +"גרוּבּ_הִידדענ_תִימעוֹוּת אלש נִיצהת מעהר וּנתערשתֻתזת אנגעגעבּענ וִירד." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "גנוּ מאצה ווּרדע געפֿוּנדענ: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "הוּרד-מוֹדוּל געפֿוּנדענ: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"הוּרד-בּעשתאנדתעִילע ווּרדענ געפֿוּנדענ, דִיע אבּער זוּמ בּוֹוֹתענ נִיצהת אוּשרעִיצהענ." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, מִית הוּרד %s (וִיעדערהערשתעללוּנגשמוֹדוּש)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, מִית הוּרד %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"בִּיתתע בֿערוענדענ שִיע נִיצהת דענ אלתענ תִיתעל »%s« פֻֿר גרוּבּ_דעפֿאוּלת, בֿערוענדענ " +"שִיע »%s« (פֻֿר בֿערשִיוֹנענ בֿוֹר 2.00) וֹדער »%s« (פֻֿר 2.00 וֹדער נעוּער)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "גנוּ מאצה וִירד געלאדענ …" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "הוּרד וִירד געלאדענ …" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "ערועִיתערתע וֹפּתִיוֹנענ פֻֿר %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "ִיללוּמוֹש-כּערנעל וִירד געלאדענ …" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, מִית כּפֿרעעבּשד %s (וִיעדערהערשתעללוּנגשמוֹדוּש)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, מִית כּפֿרעעבּשד %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "פֿרעעבּשד-כּערנעל %s וִירד געלאדענ …" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "פֿרעעבּשד-כּערנעל געפֿוּנדענ: %s\\נ" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "כּערנעל-מוֹדוּלבֿערזעִיצהנִיש געפֿוּנדענ: %s\\נ" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, מִית לִינוּכּס %s (וִיעדערהערשתעללוּנגשמוֹדוּש)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, מִית לִינוּכּס %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "לִינוּכּס %s וִירד געלאדענ …" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "ִינִיתִיאלע ראמדִישכּ וִירד געלאדענ …" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "לִינוּכּס-אבּבִּילד געפֿוּנדענ: %s\\נ" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "ִינִיתרד-אבּבִּילד געפֿוּנדענ: %s\\נ" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, מִית כּערנעל %s (ֻבּער %s, וִיעדערהערשתעללוּנגשמוֹדוּש)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, מִית כּערנעל %s (ֻבּער %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "נעתבּשד-כּערנעל געפֿוּנדענ: %s\\נ" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "וִינדוֹוש בִֿישתא/7 (לאדער)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "וִינדוֹוש נת/2000/כּספּ (לאדער)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "%s אוּפֿ %s געפֿוּנדענ (%s)\\נ" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-בִּית)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-בִּית)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(אוּפֿ %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, מִית כּסענ %s וּנד לִינוּכּס %s (וִיעדערהערשתעללוּנגשמוֹדוּש)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, מִית כּסענ %s וּנד לִינוּכּס %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, מִית כּסענ-היִפּערבִֿישוֹר" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "כּסענ %s וִירד געלאדענ …" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "כּסענ-היִפּערבִֿישוֹר, בֿערשִיוֹנ %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "ערועִיתערתע וֹפּתִיוֹנענ פֻֿר %s (מִית כּסענ-היִפּערבִֿישוֹר)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "%s אוּפֿ %s געפֿוּנדענ\\נ" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s וִירד בֿוֹנ גרוּבּ-מכּצוֹנפִֿיג נוֹצה נִיצהת וּנתערשתֻתזת.\\נ" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "נִיצהת וּנתערשתֻתזתעש ערשעתזוּנגש-פֿלאג: 0כּס%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "וּנבּעכּאננתעש גשוּבּ-שצהרִיפֿתמערכּמאל 0כּס%x (%s)\n" + +#~| msgid "Assume input is hex." +#~ msgid "assume isolinux." +#~ msgstr "עִינגאבּע וִירד אלש העכּסאדעזִימאל אנגענוֹממענ." + +#~| msgid "Assume input is hex." +#~ msgid "assume pxelinux." +#~ msgstr "עִינגאבּע וִירד אלש העכּסאדעזִימאל אנגענוֹממענ." + +#~| msgid "Assume input is hex." +#~ msgid "assume syslinux." +#~ msgstr "עִינגאבּע וִירד אלש העכּסאדעזִימאל אנגענוֹממענ." + +#~| msgid "" +#~| "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "" +#~ "%s כּוֹפִּיערת גרוּבּ-אבּבִּילדער ִינ נעתז_וֹרדנער/וּנתערוֹרדנער/צפּוּ-זִיעלפּלאתתפֿוֹרמ\\נ" + +#~| msgid "" +#~| "%s generates a bootable rescue image with specified source files, source " +#~| "directories, or mkisofs options listed by the output of `%s'\\n" +#~ msgid "" +#~ "Generates a bootable rescue image with specified source files, source " +#~ "directories, or mkisofs options listed by the output of `%s'.\n" +#~ "\n" +#~ "Option -- switches to native xorriso command mode.\n" +#~ "\n" +#~ "Mail xorriso support requests to ." +#~ msgstr "" +#~ "%s ערשתעללת עִינ בּוֹוֹתפֶֿהִיגעש רעתתוּנגש-אבּבִּילד אוּש דענ אנגעגעבּענענ " +#~ "קוּעללדאתעִיענ, קוּעללוֹרדנערנ וֹדער מכִּישוֹפֿש-וֹפּתִיוֹנענ, ועלצהע דִיע אוּשגאבּע בֿוֹנ " +#~ "»%s« אוּפֿלִישתעת\\נ" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "דאתעִישיִשתעממוֹדוּל, גרוּבּ-לאוּפֿוערכּ, שיִשתעמגערֶת, פּארתִיתִיוֹנשזוּוֹרדנוּנגשמוֹדוּל, " +#~ "אבּשתראכּתִיוֹנשמוֹדוּל וֹדער וּוִּיד דעש כּריִפּתוֹגראפִֿישצהענ צוֹנתאִינערש אוּשגעבּענ " +#~ "[בֿוֹרגאבּע=פֿש]" + +#~| msgid "set prefix directory [default=%s]" +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "פּרֶפִֿיכּס-וֹרדנער פֿעשתלעגענ [בֿוֹרגאבּע=%s]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "אדרעששבּערעִיצה ענתשפּרִיצהת נִיצהת דעמ ראמ" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "גרוּבּ_מעמאלִיגנ וִירד אוּפֿ ִיהרעמ שיִשתעמ נִיצהת וּנתערשתֻתזת" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "פֿאללש דאתעִינאמע »-« ִישת, דאננ וִירד דער בֿוֹרגאבּעוערת %s בֿערוענדעת. " + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "נוּר דִיע אשצִיִי-בִּיתמאפּש שפּעִיצהערנ" + +#~ msgid "create width summary file" +#~ msgstr "בּרעִיתענדעפִֿינִיתִיוֹנ ִינ דאתעִי שפּעִיצהערנ" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "דִיע וֹפּתִיוֹנ --אשצִיִי-בִּיתמאפּש וּנתערשתֻתזת כּעִינע בּערעִיצהע (בֿערוענדעת שתעתש " +#~ "אשצִיִי)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "" +#~ "וארנוּנג: דִיע שִיצהערהעִית ִיהרעש זוּפֿאללשזאהלענגענעראתוֹרש ִישת וּנבּעכּאננת\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "לעשענ דעש ערשתענ שעכּתוֹרש דעש צוֹרע-אבּבִּילדעש ִישת געשצהעִיתערת" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "דאתעִי אלש גרוּבּ-שעתוּפּ בֿערוענדענ" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "דאתעִי אלש גרוּבּ-מכּרעלפּאתה בֿערוענדענ" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "דאתעִי אלש גרוּבּ-פּרוֹבּע בֿערוענדענ" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "ִינשתאללאתִיוֹנשגערֶת מוּשש אלש נאמע עִינער שיִשתעמדאתעִי אנגעגעבּענ וערדענ." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "פּפֿאד »%s« ִישת בּעִימ בּוֹוֹתענ בֿוֹנ גרוּבּ נִיצהת לעשבּאר. דִיע ִינשתאללאתִיוֹנ ִישת " +#~ "וּנמֵגלִיצה, וִירד אבּגעבּרוֹצהענ.\\נ" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "אוּתוֹמאתִישצהע ערכּעננוּנג דעש דאתעִישיִשתעמש בֿוֹנ %s ִישת געשצהעִיתערת.\\נ" + +#~ msgid "Try with --recheck." +#~ msgstr "בֿערשוּצהענ שִיע מִית --רעצהעצכּ." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "פֿאללש דאש פּרוֹבּלעמ ועִיתערהִינ בּעשתעהת, מעלדענ שִיע דִיעש אלש פֿעהלער זוּשאממענ " +#~ "מִית דער אוּשגאבּע בֿוֹנ %s אנ <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "»%s« ִישת פֿעהלגעשצהלאגענ.\\נ" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "גרוּבּ-לאוּפֿוערכּ פֻֿר %s כּוֹננתע נִיצהת געפֿוּנדענ וערדענ. דער עפִֿי-בּוֹוֹתמאנאגער-" +#~ "עִינתראג כּוֹננתע נִיצהת ערשתעללת וערדענ.\\נ" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "גרוּבּ.צפֿג וִירד ערשתעללת …" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "דאתעִי אלש גרוּבּ-גלוּע-עפִֿי בֿערוענדענ" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "דאתעִי אלש גרוּבּ-רענדער-לאבּעל בֿערוענדענ" + +#~ msgid "Packed pixel " +#~ msgstr "געפּאצכּתע פִּיכּסעל " + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "גרוּבּ-אבּבִּילדער ִינ וֹרדנער בֿערוענדענ. ערהֶלת בֿוֹרראנג געגענֻבּער דעמ זִיעל" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "שפּעִיצהערִינפֿוֹ פֻֿר »%s« ענתהֶלת כּעִינענ נאמענ" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "פֿאלשצהע נאמענשלֶנגע פֻֿר שפּעִיצהערִינפֿוֹ פֻֿר »%s«" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "שפּעִיצהערנאמע פֻֿר »%s« ִישת נִיצהת נוּל-תערמִינִיערת" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "" +#~ "פּהיִשִישצהער דאתענתרֶגער %s כּוֹננתע נִיצהת געפֿוּנדענ וערדענ. ֻבּערפּרֻפֿענ שִיע ִיהרע " +#~ "דעבִֿיצע.מאפּ" + +#~ msgid "diskboot.img is not one sector size" +#~ msgstr "דִיע גרֵססע בֿוֹנ דִישכּבּוֹוֹת.ִימג ענתשפּרִיצהת נִיצהת עִינעמ שעכּתוֹר" + +#~ msgid "loopback command fails" +#~ msgstr "לוֹוֹפּבּאצכּ-בּעפֿעהלש ִישת פֿעהלגעשצהלאגענ." + +#~ msgid "cryptomount command fails: %s" +#~ msgstr "צריִפּתוֹמוֹוּנת-בּעפֿעהל ִישת פֿעהלגעשצהלאגענ: %s" + +#~ msgid "%s: option requires an argument -- `%s'" +#~ msgstr "%s: וֹפּתִיוֹנ ערוארתעת עִינ ארגוּמענת -- »%s«" + +#~ msgid "Make GRUB rescue image." +#~ msgstr "עִינ אבּבִּילד עִינעש גרוּבּ-רעתתוּנגשמעדִיוּמש ערשתעללענ" + +#~ msgid "Show v2 and v3 tablesv only." +#~ msgstr "נוּר בֿ2- וּנד בֿ3-תאבּעללענ דארשתעללענ." + +#~ msgid "Unknown " +#~ msgstr "וּנבּעכּאננת" + +#~ msgid "Map table size exceeded" +#~ msgstr "מאכּסִימאלע תאבּעללענגרֵססע ֻבּערשצהרִיתתענ" + +#~ msgid "Try `%s --help' for more information.\n" +#~ msgstr "רוּפֿענ שִיע »%s --העלפּ« אוּפֿ, וּמ ועִיתערע ִינפֿוֹרמאתִיוֹנענ זוּ ערהאלתענ.\n" + +#~ msgid "" +#~ "Usage: %s [OPTION]...\n" +#~ "\n" +#~ "GRUB emulator.\n" +#~ "\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=host]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -v, --verbose print verbose messages\n" +#~ " -H, --hold[=SECONDS] wait until a debugger will attach\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ]...\n" +#~ "\n" +#~ "גרוּבּ-עמוּלאתוֹר.\n" +#~ "\n" +#~ " -ר, --רוֹוֹת-דעבִֿיצע=דעבֿ גערֶת אלש רוֹוֹת-גערֶת בֿערוענדענ [בֿוֹרגאבּע=הוֹשת]\n" +#~ " -מ, --דעבִֿיצע-מאפּ=פִֿילע דאתעִי אלש גערֶתעזוּוֹרדנוּנג בֿערוענדענ [בֿוֹרגאבּע=" +#~ "%s]\n" +#~ " -ד, --דִירעצתוֹריִ=דִיר גרוּבּ-דאתעִיענ ִינ וֹרדנער בֿערוענדענ [בֿוֹרגאבּע=" +#~ "%s]\n" +#~ " -בֿ, --בֿערבּוֹשע אוּשפֻֿהרלִיצהע מעלדוּנגענ אנזעִיגענ\n" +#~ " -ה, --הוֹלד[=שעצוֹנדש] וארתענ, בִּיש שִיצה עִינ דעבּוּגגער עִינכּלִינכּת\n" +#~ " -ה, --העלפּ דִיעשע מעלדוּנג אנזעִיגענ וּנד בּעענדענ\n" +#~ " -בֿ, --בֿערשִיוֹנ בֿערשִיוֹנשִינפֿוֹרמאתִיוֹנ אנזעִיגענ וּנד בּעענדענ\n" +#~ "\n" +#~ "פֿעהלער בִּיתתע אנ <%s> מעלדענ.\n" + +#~ msgid "" +#~ "%s is deprecated. Use set gfxpayload=text before linux command instead.\n" +#~ msgstr "" +#~ "%s ִישת בֿעראלתעת. בֿערוענדענ שִיע שתאתתדעששענ גפֿכּספּאיִלוֹאד=תעכּסת בֿוֹר דעמ " +#~ "לִינוּכּס-בּעפֿעהל.\n" + +#~ msgid "Serial terminal not available on this platform." +#~ msgstr "עִינ שערִיעללעש תערמִינאל ִישת אוּפֿ דִיעשער פּלאתתפֿוֹרמ נִיצהת בֿערפֻֿגבּאר." + +#~ msgid "Usage: %s [OPTION] install_device" +#~ msgstr "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ] ִינשתאללאתִיוֹנשגערֶת" + +#~ msgid "Usage: %s [OPTION] [install_device]" +#~ msgstr "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ] [ִינשתאללאתִיוֹנשגערֶת]" + +#~ msgid "the ID of bootloader." +#~ msgstr "דִיע כּעננוּנג דעש בּוֹוֹתלוֹאדערש" + +#~ msgid "" +#~ "UUID needed with ata mod, but the filesystem containing %s does not " +#~ "support UUIDs.\\n" +#~ msgstr "" +#~ "ִימ אתא-מוֹדוּש וִירד עִינע וּוִּיד בּענֵתִיגת, אבּער דאש דאתעִישיִשתעמ %s וּנתערשתֻתזת " +#~ "כּעִינע וּוִּידש.\\נ" + +#~ msgid "" +#~ "UUID needed with cross-disk installs, but the filesystem containing %s " +#~ "does not support UUIDs.\\n" +#~ msgstr "" +#~ "פֻֿר פּלאתתענֻבּערגרעִיפֿענדע ִינשתאללאתִיוֹנענ וִירד עִינע וּוִּיד בּענֵתִיגת, אבּער דאש " +#~ "דאתעִישיִשתעמ, ועלצהעש %s ענתהֶלת, וּנתערשתֻתזת כּעִינע וּוִּידש.\\נ" + +#~ msgid "No font for video terminal found." +#~ msgstr "כּעִינע שצהרִיפֿת פֻֿר בִֿידעוֹ-תערמִינאל געפֿוּנדענ." + +#~ msgid "Usage: %s [OPTION] install_device\\n" +#~ msgstr "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ] ִינשתאללאתִיוֹנשגערֶת\\נ" + +#~ msgid "Usage: %s [OPTION] entry\\n" +#~ msgstr "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ] עִינגאבּע\\נ" + +#, fuzzy +#~ msgid "file name expected" +#~ msgstr "עִינ ארגוּמענת ווּרדע ערוארתעת" + +#~ msgid "can't find command %s" +#~ msgstr "בּעפֿעהל %s כּאננ נִיצהת געפֿוּנדענ וערדענ." + +#~ msgid "Load an additional file." +#~ msgstr "עִינע זוּשֶתזלִיצהע דאתעִי לאדענ." + +#~ msgid "can't open device" +#~ msgstr "גערֶת כּאננ נִיצהת געֵפֿפֿנעת וערדענ" + +#, fuzzy +#~ msgid "unknown architecture type 0x%x" +#~ msgstr "וּנבּעכּאננתער גערֶתעתיִפּ %s\n" + +#, fuzzy +#~ msgid "invalid ELF format" +#~ msgstr "וּנגֻלתִיגעש זעִילענפֿוֹרמאת: %s" + +#, fuzzy +#~ msgid "start symbol is not defined" +#~ msgstr "אדרעששע נִיצהת געפֿוּנדענ" + +#~ msgid "No open parenthesis found" +#~ msgstr "כּעִינע ֵפֿפֿנענדע כּלאממער געפֿוּנדענ" + +#~ msgid "No close parenthesis found" +#~ msgstr "כּעִינע שצהלִיעססענדע כּלאממער געפֿוּנדענ" + +#~ msgid "No filename found" +#~ msgstr "כּעִינ דאתעִינאמע געפֿוּנדענ" + +#, fuzzy +#~ msgid "unrecognised netword interface `%s'" +#~ msgstr "נִיצהת ערכּאננתע שצהנִיתתשתעללע %s" + +#~ msgid "At least 3 arguments are expected" +#~ msgstr "עש וערדענ מִינדעשתענש דרעִי ארגוּמענתע ערוארתעת" + +#, fuzzy +#~ msgid "cannot seek the file `%s': %s" +#~ msgstr "דאתעִי %s כּאננ נִיצהת דוּרצהשוּצהת וערדענ" + +#, fuzzy +#~ msgid "cannot read the file `%s': %s" +#~ msgstr "דאתעִי %s כּאננ נִיצהת געלעשענ וערדענ" + +#, fuzzy +#~ msgid "Read 8-bit from PORT." +#~ msgstr "בּיִתע אוּש פּוֹרת לעשענ." + +#, fuzzy +#~ msgid "Read 16-bit from PORT." +#~ msgstr "בּיִתע אוּש פּוֹרת לעשענ." + +#, fuzzy +#~ msgid "Read 32-bit from PORT." +#~ msgstr "בּיִתע אוּש פּוֹרת לעשענ." + +#~ msgid "Make partition hidden" +#~ msgstr "פּארתִיתִיוֹנ אלש בֿערבּוֹרגענ מארכִּיערענ" + +#~ msgid "Check hash list file." +#~ msgstr "האשה-לִישתענדאתעִי ֻבּערפּרֻפֿענ." + +#~ msgid "BadRAM" +#~ msgstr "בּאדראמ" + +#~ msgid "Menu entry definition as a string." +#~ msgstr "דעפִֿינִיתִיוֹנ דעש מענֻעִינתראגש אלש זעִיצהענכּעתתע." + +#~ msgid "Device %d\n" +#~ msgstr "גערֶת %d\n" + +#~ msgid "Variable names to update with matches." +#~ msgstr "זוּ אכּתוּאלִישִיערענדע בֿארִיאבּלעננאמענ אנהאנד בֿוֹנ ֻבּערעִינשתִיממוּנגענ." + +#~ msgid " Failed" +#~ msgstr " פֿעהלגעשצהלאגענ" + +#~ msgid "Firmware is marked as tainted, refusing to initialize." +#~ msgstr "" +#~ "פִֿירמוארע ִישת אלש פֿעהלערהאפֿת מארכִּיערת, ִינִיתִיאלִישִיערוּנג וִירד בֿערועִיגערת." + +#~ msgid "State: " +#~ msgstr "שתאתוּש:" + +#~ msgid "removed " +#~ msgstr "ענתפֿערנת" + +#~ msgid "offline " +#~ msgstr "וֹפֿפֿלִינע " + +#~ msgid "online" +#~ msgstr "וֹנלִינע" + +#~ msgid "Unknown VDEV type: %s\n" +#~ msgstr "וּנבּעכּאננתער בֿדעבֿ-תיִפּ: %s\n" + +#~ msgid "Authenticate users" +#~ msgstr "בּענוּתזער לעגִיתִימִיערענ" + +#~ msgid "UTF-8 visual" +#~ msgstr "וּתפֿ-8 בִֿישוּעלל" + +#~ msgid "Unknown" +#~ msgstr "וּנבּעכּאננת" + +#~ msgid "Unknown key %s\n" +#~ msgstr "וּנבּעכּאננתער שצהלֻששעל %s\n" + +#~ msgid "do not probe any floppy drive" +#~ msgstr "כּעִינ דִישכּעתתענלאוּפֿוערכּ ֻבּערפּרֻפֿענ" + +#~ msgid "Expose v1 tables." +#~ msgstr "בֿ1-תאבּעללענ דארשתעללענ." + +#~ msgid "" +#~ "\n" +#~ "Glyph #%d, U+%04x\n" +#~ msgstr "" +#~ "\n" +#~ "גליִפּה #%d, וּ+%04x\n" + +#~ msgid "Fake BIOS." +#~ msgstr "פֿאכּע-בִּיוֹש." + +#~ msgid "Read word from PORT." +#~ msgstr "ווֹרד אוּש פּוֹרת לעשענ." + +#~ msgid "Read dword from PORT." +#~ msgstr "דווֹרד אוּש פּוֹרת לעשענ." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "ווֹרד-וערת ִינ פּוֹרת שצהרעִיבּענ." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "דווֹרד-וערת ִינ פּוֹרת שצהרעִיבּענ." + +#~ msgid "Read word from ADDR." +#~ msgstr "ווֹרד אוּש אדדר לעשענ." + +#~ msgid "Read dword from ADDR." +#~ msgstr "דווֹרד אוּש אדדר לעשענ." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "ווֹרד-וערת ִינ אדדר שצהרעִיבּענ." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "דווֹרד-וערת ִינ אדדר שצהרעִיבּענ." + +#~ msgid "USERNAME" +#~ msgstr "בּענוּתזערנאמע" + +#~ msgid "Dump memory." +#~ msgstr "שפּעִיצהערִינהאלת שִיצהערנ." + +#~ msgid "Hex dump FILE." +#~ msgstr "העכּס-דוּמפּ בֿוֹנ דאתעִי." + +#~ msgid "Error loading file %s: %s\n" +#~ msgstr "פֿעהלער בּעִימ לאדענ דער דאתעִי %s: %s\n" + +#~ msgid "STR" +#~ msgstr "זעִיצהענכּעתתע" + +#~ msgid "Use FILE as the device map [default=%s]" +#~ msgstr "דאתעִי אלש גערֶתעבֿערזעִיצהנִיש בֿערוענדענ [בֿוֹרגאבּע=%s]" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "גערֶת אלש רוֹוֹת-גערֶת בֿערוענדענ [בֿוֹרגאבּע=בֿערמוּתוּנג]" + +#~ msgid "Install even if problems are detected" +#~ msgstr "תרוֹתזדעמ ִינשתאללִיערענ, אוּצה ועננ פּרוֹבּלעמע אוּפֿתרעתענ" + +#~ msgid "DIRECTORY" +#~ msgstr "וֹרדנער" + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--שהִיפֿת] [--צתרל] [--אלת]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "KEY" +#~ msgstr "שצהלֻששעל" + +#~ msgid "cannot get the real path of `%s'" +#~ msgstr "רעאלער פּפֿאד בֿוֹנ »%s« כּאננ נִיצהת ערמִיתתעלת וערדענ" + +#~ msgid "premature end of file %s: " +#~ msgstr "וּנערוארתעתעש ענדע דער דאתעִי %s:" + +#~ msgid "[n]" +#~ msgstr "[נ]" + +#~ msgid "Print verbose messages." +#~ msgstr "אוּשפֻֿהרלִיצהע מעלדוּנגענ אוּשגעבּענ." + +#~ msgid "no output file is specified" +#~ msgstr "כּעִינע אוּשגאבּעדאתעִי אנגעגעבּענ" + +#~ msgid "No terminator in the core image" +#~ msgstr "כּעִינ תערמִינאתוֹר ִימ צוֹרע-אבּבִּילד" + +#~ msgid "DEV" +#~ msgstr "גערֶת" + +#~ msgid "output file must be given" +#~ msgstr "אוּשגאבּעדאתעִי מוּשש אנגעגעבּענ וערדענ" + +#~ msgid "format must be specified" +#~ msgstr "פֿוֹרמאת מוּשש אנגעגעבּענ וערדענ" + +#~ msgid "fstat failed" +#~ msgstr "פֿשתאת געשצהעִיתערת" + +#~ msgid "no device.map" +#~ msgstr "כּעִינע דעבִֿיצע.מאפּ" + +#, fuzzy +#~ msgid "cannot stat `%s'" +#~ msgstr "»%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ" + +#~ msgid "write error" +#~ msgstr "שצהרעִיבּפֿעהלער" + +#~ msgid "seek error" +#~ msgstr "שוּצהפֿעהלער" + +#~ msgid "Couldn't open %s for reading: %s\n" +#~ msgstr "»%s« כּוֹננתע נִיצהת זוּמ לעשענ געֵפֿפֿנעת וערדענ: %s\n" + +#~ msgid "Couldn't open %s for writing: %s\n" +#~ msgstr "»%s« כּוֹננתע נִיצהת זוּמ שצהרעִיבּענ געֵפֿפֿנעת וערדענ: %s\n" + +#~ msgid "set output file" +#~ msgstr "אוּשגאבּעדאתעִי פֿעשתלעגענ" + +#~ msgid "the core image is too big" +#~ msgstr "צוֹרע-אבּבִּילד ִישת זוּ גרוֹסס" + +#~ msgid "cannot open %s" +#~ msgstr "%s כּאננ נִיצהת געֵפֿפֿנעת וערדענ" + +#~ msgid "" +#~ "Usage: %s [OPTIONS]\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנענ]\n" +#~ "\n" +#~ "מעלדענ שִיע פֿעהלער אנ <%s>.\n" + +#~ msgid "Couldn't open input file: %s\n" +#~ msgstr "עִינגאבּעדאתעִי כּאננ נִיצהת געֵפֿפֿנעת וערדענ: %s\n" + +#~ msgid "Couldn't open output file: %s\n" +#~ msgstr "אוּשגאבּעדאתעִי כּאננ נִיצהת געֵפֿפֿנעת וערדענ: %s\n" + +#, fuzzy +#~ msgid "cannot open 'vendor' node of `%s'" +#~ msgstr "»%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ" + +#, fuzzy +#~ msgid "cannot read 'vendor' node of `%s'" +#~ msgstr "%llu בּיִתעש כֵּננענ נִיצהת אוּש %s געלעשענ וערדענ" + +#, fuzzy +#~ msgid "cannot open SAS PHY ID `%s'\n" +#~ msgstr "»%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ" + +#~ msgid "fflush failed" +#~ msgstr "פֿפֿלוּשה געשצהעִיתערת" + +#, fuzzy +#~ msgid "cannot stat %s" +#~ msgstr "%s כּאננ נִיצהת געֵפֿפֿנעת וערדענ" + +#~ msgid "read failed" +#~ msgstr "רעאד געשצהעִיתערת" + +#~ msgid "cannot read %s" +#~ msgstr "%s כּאננ נִיצהת געלעשענ וערדענ" + +#~ msgid "write failed" +#~ msgstr "שצהרעִיבּפֿעהלער" + +#~ msgid "Unload PXE environment." +#~ msgstr "פּכּסע-וּמגעבּוּנג ענתלאדענ." + +#~ msgid "[DEVICE]" +#~ msgstr "[גערֶת]" + +#~ msgid "open error" +#~ msgstr "פֿעהלער בּעִימ ֵפֿפֿנענ" + +#~ msgid "Must use absolute path.\n" +#~ msgstr "אבּשוֹלוּתער פּפֿאד ִישת נוֹתוענדִיג.\n" + +#~ msgid "the core image is too small" +#~ msgstr "צוֹרע-אבּבִּילד ִישת זוּ כּלעִינ" + +#~ msgid "prefix is too long" +#~ msgstr "פּרֶפִֿיכּס ִישת זוּ לאנג" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנ]... [מוֹדוּלע]\n" +#~ "\n" +#~ "ערשתעללענ עִינעש בּוֹוֹתפֶֿהִיגענ גרוּבּ-אבּבִּילדעש.\n" +#~ "\n" +#~ " -ד, --דִירעצתוֹריִ=וֹרדנ אבּבִּילדער וּנד מוֹדוּלע ִינ וֹרדנ בֿערוענדענ [בֿוֹרגאבּע=" +#~ "%s/@פּלאתפֿוֹרמ@]\n" +#~ " -פּ, --פּרעפִֿיכּס=וֹרדנ וֹרדנער פֻֿר גרוּבּ_פּרעפִֿיכּס פֿעשתלעגענ [בֿוֹרגאבּע=" +#~ "%s]\n" +#~ " -מ, --מעמדִישכּ=דאתעִי דאתעִי אלש מעמדִישכּ-אבּבִּילד עִינבּעתתענ\n" +#~ " -צ, --צוֹנפִֿיג=דאתעִי דאתעִי אלש בּוֹוֹת-כּוֹנפִֿיגוּראתִיוֹנ עִינבּעתתענ\n" +#~ " -נ, --נוֹתע נוֹתע-שעגמענת פֻֿר צהרפּ וֹפּענ פִֿירמוארע הִינזוּפֻֿגענ\n" +#~ " -וֹ, --וֹוּתפּוּת=דאתעִי ערזעוּגתעש אבּבִּילד ִינ דאתעִי אוּשגעבּענ " +#~ "[בֿוֹרגאבּע=שתדוֹוּת]\n" +#~ " -וֹ, --פֿוֹרמאת=פֿוֹרמאת אבּבִּילד ִינ פֿוֹרמאת ערזעוּגענ [בֿוֹרגאבּע=שתדוֹוּת]\n" +#~ " בֿערפֻֿגבּארע פֿוֹרמאתע: %s\n" +#~ " -צ, --צוֹמפּרעששִיוֹנ=(כּסז|נוֹנע|אוּתוֹ) זוּ בֿערוענדענדע כּוֹמפּרעששִיוֹנ\n" +#~ " -ה, --העלפּ דִיעשע מעלדוּנג אנזעִיגענ וּנד בּעענדענ\n" +#~ " -בֿ, --בֿערשִיוֹנ בֿערשִיוֹנשִינפֿוֹרמאתִיוֹנ אנזעִיגענ וּנד בּעענדענ\n" +#~ " -בֿ, --בֿערבּוֹשע אוּשפֻֿהרלִיצהע מעלדוּנגענ אנזעִיגענ\n" +#~ "\n" +#~ "פֿעהלער בִּיתתע אנ <%s> מעלדענ.\n" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "עִינבּעתתוּנג ִישת נִיצהת מֵגלִיצה, יעדוֹצה ערפֿוֹרדערלִיצה, ועננ דאש רוֹוֹת-גערֶת שִיצה ִ" +#~ "ינ עִינעמ ראִיד-בֿערבּוּנד וֹדער עִינעמ לבֿמ-דאתענתרֶגער בּעפִֿינדעת." + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "דאש רוֹוֹת-גערֶת כּאננ נִיצהת ערמִיתתעלת וערדענ. בֿערוענדענ שִיע דִיע וֹפּתִיוֹנ »--" +#~ "רוֹוֹת-דעבִֿיצע«." + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "כּוֹמפּאתִיבּלע בֿעשא בִּיוֹש-ערועִיתערוּנשמוֹדִי פֻֿר בִֿידעוֹ אוּפֿלִישתענ." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "וּנתערשתֻתזוּנג פֻֿר בֿעשא בִּיוֹש-ערועִיתערוּנג 2.0+ ֻבּערפּרֻפֿענ." + +#~ msgid "Set the root device." +#~ msgstr "רוֹוֹת-גערֶת פֿעשתלעגענ." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "עִינענ דאתענתרֶגער מִית פּארתִיתִיוֹנענ שִימוּלִיערענ." + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "" +#~ "עש וִירד בֿערשוּצהת, גרוּבּ ִינ עִינע פּארתִיתִיוֹנ אנשתעללע ִינ דענ מבּר זוּ ִ" +#~ "ינשתאללִיערענ. דאש ִישת עִינע שצהלעצהתע ִידעע." + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "" +#~ "בּענוּתזענ שִיע --פֿוֹרצע, ועננ שִיע וִירכּלִיצה בּלוֹצכּלִישתענ בֿערוענדענ ווֹללענ." + +#~ msgid "A boot catalog exists and appears corrupted.\n" +#~ msgstr "עִינ בּוֹוֹת-כּאתאלוֹג עכּסִישתִיערת, שצהעִינת אבּער בּעשצהֶדִיגת זוּ שעִינ.\n" + +#~ msgid "Please check the following file: %s.\n" +#~ msgstr "בִּיתתע ֻבּערפּרֻפֿענ שִיע פֿוֹלגענדע דאתעִי: %s.\n" + +#~ msgid "This file must be removed before a bootable CD can be done.\n" +#~ msgstr "" +#~ "דִיעשע דאתעִי מוּשש ענתפֿערנת וערדענ, בּעבֿוֹר עִינע בּוֹוֹתפֶֿהִיגע צד ערשתעללת וערדענ " +#~ "כּאננ.\n" + +#~ msgid "Error creating boot catalog (%s)" +#~ msgstr "פֿעהלער בּעִימ ערשתעללענ דעש בּוֹוֹת-כּאתאלוֹגש (%s)" + +#~ msgid "Error writing to boot catalog (%s)" +#~ msgstr "פֿעהלער בּעִימ שפּעִיצהערנ דעש בּוֹוֹת-כּאתאלוֹגש (%s)" + +#~ msgid "Boot catalog cannot be found!\n" +#~ msgstr "בּוֹוֹת-כּאתאלוֹג כּאננ נִיצהת געפֿוּנדענ וערדענ!\n" + +#~ msgid "Boot image cannot be found!\n" +#~ msgstr "בּוֹוֹת-אבּבִּילד כּאננ נִיצהת געפֿוּנדענ וערדענ!\n" + +#~ msgid "" +#~ "\n" +#~ "Size of boot image is %d sectors" +#~ msgstr "" +#~ "\n" +#~ "דאש בּוֹוֹת-אבּבִּילד וּמפֿאששת %d שעכּתוֹרענ" + +#~ msgid "No emulation\n" +#~ msgstr "כּעִינע עמוּלאתִיוֹנ\n" + +#~ msgid "Emulating a 1.44 meg floppy\n" +#~ msgstr "עִינע 1,44 מבּ-דִישכּעתתע עמוּלִיערענ\n" + +#~ msgid "Emulating a 2.88 meg floppy\n" +#~ msgstr "עִינע 2,88 מבּ-דִישכּעתתע עמוּלִיערענ\n" + +#~ msgid "Emulating a 1.2 meg floppy\n" +#~ msgstr "עִינע 1,2 מבּ-דִישכּעתתע עמוּלִיערענ\n" + +#~ msgid "" +#~ "\n" +#~ "Error - boot image is not the an allowable size.\n" +#~ msgstr "" +#~ "\n" +#~ "פֿעהלער - בּוֹוֹת-אבּבִּילד האת כּעִינע אכּזעפּתאבּלע גרֵססע.\n" + +#~ msgid "Error opening boot catalog for update" +#~ msgstr "פֿעהלער בּעִימ ֵפֿפֿנענ דעש בּוֹוֹת-כּאתאלוֹגש זוּמ אכּתוּאלִישִיערענ" + +#~ msgid "Error writing to boot catalog" +#~ msgstr "פֿעהלער בּעִימ שצהרעִיבּענ ִינ דענ בּוֹוֹת-כּאתאלוֹג" + +#~ msgid "Error opening boot image file '%s' for update" +#~ msgstr "פֿעהלער בּעִימ ֵפֿפֿנענ דער בּוֹוֹת-אבּבִּילדדאתעִי »%s« זוּמ אכּתוּאלִישִיערענ" + +#~ msgid "Boot image file '%s' changed unexpectedly" +#~ msgstr "בּוֹוֹת-אבּבִּילדדאתעִי »%s« ווּרדע וּנערוארתעת געֶנדערת" + +#~ msgid "Error writing to boot image (%s)" +#~ msgstr "פֿעהלער בּעִימ שצהרעִיבּענ ִינ דאש בּוֹוֹת-אבּבִּילד (%s)" + +#~ msgid "Unable to generate sane path tables - too many directories (%d)\n" +#~ msgstr "" +#~ "ערזעוּגוּנג דער שאנע-פּפֿאדתאבּעללענ ִישת נִיצהת מֵגלִיצה - זוּ בִֿיעלע וֹרדנער (%d)\n" + +#~ msgid "Entry %d not in path tables\n" +#~ msgstr "עִינתראג %d נִיצהת ִינ פּפֿאדתאבּעללענ בֿוֹרהאנדענ\n" + +#~ msgid "Joliet path table lengths do not match %d %d\n" +#~ msgstr "לֶנגענ דער יוֹלִיעת-פּפֿאדתאבּעללענ %d %d שתִיממענ נִיצהת ֻבּערעִינ\n" + +#~ msgid "Unable to locate relocated directory\n" +#~ msgstr "געֶנדערתער וֹרדנער כּאננ נִיצהת געפֿוּנדענ וערדענ\n" + +#~ msgid "Fatal goof - unable to find directory location\n" +#~ msgstr "פֿאתאלער פֿעהלער - וֹרת דעש וֹרדנערש כּאננ נִיצהת געפֿוּנדענ וערדענ\n" + +#~ msgid "Unexpected joliet directory length %d %d %s\n" +#~ msgstr "וּנערוארתעתע לֶנגע דעש יוֹלִיעת-וֹרדנערש %d %d %s\n" + +#~ msgid "Using \"%s\"\n" +#~ msgstr "»%s« וִירד בֿערוענדעת\n" + +#~ msgid "%s:%d: name required\n" +#~ msgstr "%s:%d: נאמע ערפֿוֹרדערלִיצה\n" + +#~ msgid "%s:%d: equals sign required\n" +#~ msgstr "%s:%d: גלעִיצההעִיתשזעִיצהענ ערפֿוֹרדערלִיצה\n" + +#~ msgid "%s:%d: field name \"%s\" unknown\n" +#~ msgstr "%s:%d: פֿעלדנאמע »%s« ִישת וּנבּעכּאננת\n" + +#~ msgid "Usage: %s [options] file...\n" +#~ msgstr "אוּפֿרוּפֿ: %s [וֹפּתִיוֹנענ] דאתעִי...\n" + +#~ msgid "Required boot image pathname missing\n" +#~ msgstr "פּפֿאדנאמע דעש בּוֹוֹת-אבּבִּילדעש ִישת נוֹתוענדִיג, פֿעהלת אבּער\n" + +#~ msgid "Required boot catalog pathname missing\n" +#~ msgstr "פּפֿאדנאמע דעש בּוֹוֹת-כּאתאלוֹגש ִישת נוֹתוענדִיג, פֿעהלת אבּער\n" + +#~ msgid "Ignoring -no-emul-boot (no-emulation is the default behaviour)\n" +#~ msgstr "" +#~ "-נוֹ-עמוּל-בּוֹוֹת וִירד ִיגנוֹרִיערת (נוֹ-עמוּלאתִיוֹנ ִישת דאש שתאנדארדבֿערהאלתענ)\n" + +#~ msgid "Abstract filename string too long\n" +#~ msgstr "»אבּשתראצת«-זעִיצהענכּעתתע פֻֿר דאתעִינאמע ִישת זוּ לאנג\n" + +#~ msgid "Application-id string too long\n" +#~ msgstr "»אפּפּלִיצאתִיוֹנ-ִיד«-זעִיצהענכּעתתע ִישת זוּ לאנג\n" + +#~ msgid "Bibliographic filename string too long\n" +#~ msgstr "»בִּיבּלִיוֹגראפּהִיצ«-זעִיצהענכּעתתע פֻֿר דאתעִינאמע ִישת זוּ לאנג\n" + +#~ msgid "Copyright filename string too long\n" +#~ msgstr "»צוֹפּיִרִיגהת«-זעִיצהענכּעתתע פֻֿר דאתעִינאמע ִישת זוּ לאנג\n" + +#~ msgid "Preparer string too long\n" +#~ msgstr "»פּרעפּארער«-זעִיצהענכּעתתע ִישת זוּ לאנג\n" + +#~ msgid "Publisher string too long\n" +#~ msgstr "»פּוּבּלִישהער«-זעִיצהענכּעתתע ִישת זוּ לאנג\n" + +#~ msgid "System ID string too long\n" +#~ msgstr "»שיִשתעמ ִיד«-זעִיצהענכּעתתע ִישת זוּ לאנג\n" + +#~ msgid "Volume ID string too long\n" +#~ msgstr "»בֿוֹלוּמע ִיד«-זעִיצהענכּעתתע ִישת זוּ לאנג\n" + +#~ msgid "Volume set ID string too long\n" +#~ msgstr "»בֿוֹלוּמע שעת ִיד«-זעִיצהענכּעתתע ִישת זוּ לאנג\n" + +#~ msgid "Volume set sequence number too big\n" +#~ msgstr "שעקוּענזנוּממער דעש דאתענתרֶגערשאתזעש ִישת זוּ גרוֹסס\n" + +#~ msgid "date string must be 16 characters.\n" +#~ msgstr "דאתוּמשזעִיצהענכּעתתע מוּשש אוּש 16 זעִיצהענ בּעשתעהענ.\n" + +#~ msgid "Warning: setrlimit" +#~ msgstr "וארנוּנג: שעתרלִימִית" + +#~ msgid "Multisession usage bug: Must specify -C if -M is used.\n" +#~ msgstr "" +#~ "פֻֿר מעהרפֿאצהשִיתזוּנגענ מוּשש -צ אנגעגעבּענ וערדענ, פֿאללש -מ בּענוּתזת וִירד.\n" + +#~ msgid "" +#~ "Warning: -C specified without -M: old session data will not be merged.\n" +#~ msgstr "" +#~ "וארנוּנג: -צ ווּרדע וֹהנע -מ אנגעגעבּענ: אלתע שִיתזוּנגשדאתענ וערדענ נִיצהת " +#~ "בּערֻצכּשִיצהתִיגת.\n" + +#~ msgid "re-directing all messages to %s\n" +#~ msgstr "אללע מעלדוּנגענ וערדענ זוּ %s וּמגעלעִיתעת\n" + +#~ msgid "Unable to open previous session image %s\n" +#~ msgstr "אבּבִּילד דער בֿוֹרהערִיגענ שִיתזוּנג %s כּאננ נִיצהת געֵפֿפֿנעת וערדענ\n" + +#~ msgid "Joliet tree sort failed.\n" +#~ msgstr "שוֹרתִיערוּנג דעש יוֹלִיעת-בּאוּמש ִישת געשצהעִיתערת.\n" + +#~ msgid "Unable to open /dev/null\n" +#~ msgstr "/דעבֿ/נוּלל כּאננ נִיצהת געֵפֿפֿנעת וערדענ\n" + +#~ msgid "Unable to open disc image file\n" +#~ msgstr "אבּבִּילדדאתעִי דער פּלאתתע כּאננ נִיצהת געֵפֿפֿנעת וערדענ\n" + +#~ msgid "%llu extents written (%llu MiB)\n" +#~ msgstr "%llu עִינהעִיתענ געשצהרִיעבּענ (%llu מִיבּ)\n" + +#~ msgid "Seek error on old image\n" +#~ msgstr "פֿעהלער בּעִימ דוּרצהשוּצהענ עִינעש אלתענ אבּבִּילדעש\n" + +#~ msgid "**Bad RR version attribute" +#~ msgstr "**פֿאלשצהעש רר-בֿערשִיוֹנשאתתרִיבּוּת" + +#~ msgid "" +#~ "Warning: Neither Rock Ridge (-R) nor TRANS.TBL (-T) name translations " +#~ "were found on previous session. ISO (8.3) file names have been used " +#~ "instead.\n" +#~ msgstr "" +#~ "וארנוּנג: ועדער רוֹצכּרִידגע (-ר) נוֹצה תראנש.תבּל (-ת)-נאמענשֻבּערשעתזוּנגענ " +#~ "ווּרדענ ִינ דער בֿוֹרהערִיגענ שִיתזוּנג געפֿוּנדענ. ִישוֹ (8.3)-דאתעִינאמענ ווּרדענ " +#~ "שתאתתדעששענ בֿערוענדעת.\n" + +#~ msgid "Read error on old image %s\n" +#~ msgstr "פֿעהלער בּעִימ לעשענ דעש אלתענ אבּבִּילדעש %s\n" + +#~ msgid "Special parameters for cdwrite not specified with -C\n" +#~ msgstr "שפּעזִיעללע פּאראמעתער פֻֿר צדורִיתע ווּרדענ נִיצהת מִית -צ אנגעגעבּענ\n" + +#~ msgid "Malformed cdwrite parameters\n" +#~ msgstr "וּנגֻלתִיגע פּאראמעתער פֻֿר צדורִיתע\n" + +#~ msgid "Unable to insert transparent compressed file - name conflict\n" +#~ msgstr "" +#~ "תראנשפּארענתע כּוֹמפּרִימִיערתע דאתעִי כּאננ נִיצהת עִינגעפֻֿגת וערדענ - " +#~ "נאמענשכּוֹנפֿלִיכּת\n" + +#~ msgid "Extension record too long\n" +#~ msgstr "ערועִיתערוּנגשאוּפֿזעִיצהנוּנג ִישת זוּ לאנג\n" + +#~ msgid "Fatal goof\n" +#~ msgstr "פֿאתאלער פֿעהלער\n" + +#~ msgid "Unable to generate unique name for file %s\n" +#~ msgstr "עִינדעוּתִיגער נאמע פֻֿר דאתעִי %s כּאננ נִיצהת ערזעוּגת וערדענ\n" + +#~ msgid "Fatal error - RR overflow for file %s\n" +#~ msgstr "פֿאתאלער פֿעהלער - רר-ֻבּערלאוּפֿ פֻֿר דאתעִי %s\n" + +#~ msgid "Translation table size mismatch %d %d\n" +#~ msgstr "גרֵססע דער ֻבּערשעתזוּנגשתאבּעללענ %d %d שתִיממת נִיצהת ֻבּערעִינ\n" + +#~ msgid "Unable to locate directory parent\n" +#~ msgstr "וֹרת דעש עלתערנוֹרדנערש כּאננ נִיצהת בּעשתִיממת וערדענ\n" + +#~ msgid "Scanning %s\n" +#~ msgstr "%s וִירד עִינגעלעשענ\n" + +#~ msgid "Overflow of stat buffer\n" +#~ msgstr "ֻבּערלאוּפֿ דעש שתאת-זוִישצהענשפּעִיצהערש\n" + +#~ msgid "Excluded by match: %s\n" +#~ msgstr "אוּשגעשצהלוֹששענ נאצה ֻבּערעִינשתִיממוּנג: %s\n" + +#~ msgid "Excluded: %s\n" +#~ msgstr "אוּשגעשצהלוֹששענ: %s\n" + +#~ msgid "Non-existant or inaccessible: %s\n" +#~ msgstr "נִיצהת בֿוֹרהאנדענ וֹדער כּעִינ זוּגרִיפֿפֿ מֵגלִיצה: %s\n" + +#~ msgid "Unable to stat file %s - ignoring and continuing.\n" +#~ msgstr "" +#~ "שתאתוּשערמִיתתלוּנג דער דאתעִי %s נִיצהת מֵגלִיצה - וִירד ִיגנוֹרִיערת וּנד " +#~ "פֿוֹרתגעשעתזת.\n" + +#~ msgid "Symlink %s ignored - continuing.\n" +#~ msgstr "שיִמבּוֹלִישצהע בֿערכּנֻפּפֿוּנג %s וִירד ִיגנוֹרִיערת וּנד פֿוֹרתגעשעתזת.\n" + +#~ msgid "Already cached directory seen (%s)\n" +#~ msgstr "בּערעִיתש זוִישצהענגעשפּעִיצהערתער וֹרדנער ערכּאננת (%s)\n" + +#~ msgid "File %s is not readable (%s) - ignoring\n" +#~ msgstr "דאתעִי %s ִישת נִיצהת לעשבּאר (%s) - וִירד ִיגנוֹרִיערת\n" + +#~ msgid "Directory loop - fatal goof (%s %lx %lu).\n" +#~ msgstr "וֹרדנערשצהלעִיפֿע - פֿאתאלער פֿעהלער (%s %lx %lu).\n" + +#~ msgid "Unknown file type %s - ignoring and continuing.\n" +#~ msgstr "וּנבּעכּאננתער דאתעִיתיִפּ %s - וִירד ִיגנוֹרִיערת וּנד פֿוֹרתגעשעתזת.\n" + +#~ msgid "Hidden from ISO9660 tree: %s\n" +#~ msgstr "ִימ ִישוֹ9660-בּאוּמ בֿערבּוֹרגענ: %s\n" + +#~ msgid "Hidden from Joliet tree: %s\n" +#~ msgstr "ִימ יוֹלִיעת-בּאוּמ בֿערבּוֹרגענ: %s\n" + +#~ msgid "Directories too deep %s\n" +#~ msgstr "וֹרדנערתִיעפֿע %s זוּ גרוֹסס\n" + +#~ msgid "Unable to delete non-empty directory\n" +#~ msgstr "נִיצהת לעערער וֹרדנער כּאננ נִיצהת ענתפֿערנת וערדענ\n" + +#~ msgid "Unable to locate child directory in parent list\n" +#~ msgstr "כִּינדוֹרדנער כּאננ ִינ עלתערנלִישתע נִיצהת געפֿוּנדענ וערדענ\n" + +#~ msgid "call to search_tree_file with an absolute path, stripping\n" +#~ msgstr "" +#~ "אוּפֿרוּפֿ בֿוֹנ שעארצה_תרעע_פִֿילע מִית אבּשוֹלוּתעמ פּפֿאד, וִירד אבּגעשצהנִיתתענ\n" + +#~ msgid "initial path separator. Hope this was intended...\n" +#~ msgstr "אנפֶֿנגלִיצהער פּפֿאדתרעננער. הוֹפֿפֿענתלִיצה ואר דִיעש בּעאבּשִיצהתִיגת...\n" + +#~ msgid "Cannot open '%s'" +#~ msgstr "»%s« כּאננ נִיצהת געֵפֿפֿנעת וערדענ" + +#~ msgid "cannot open %s\n" +#~ msgstr "%s כּאננ נִיצהת געֵפֿפֿנעת וערדענ\n" + +#~ msgid "%6.2f%% done, estimate finish %s" +#~ msgstr "%6.2פֿ%% אבּגעשצהלוֹששענ, בֿוֹראוּששִיצהתלִיצה בּעענדעת %s" + +#~ msgid "Unexpected directory length %d %d %s\n" +#~ msgstr "וּנערוארתעתע וֹרדנערלֶנגע %d %d %s\n" + +#~ msgid "Path table lengths do not match %d %d\n" +#~ msgstr "לֶנגענ דער פּפֿאדתאבּעללענ %d %d שתִיממענ נִיצהת ֻבּערעִינ\n" + +#~ msgid "Total extents scheduled to be written = %llu\n" +#~ msgstr "געפּלאנתע זוּ שצהרעִיבּענדע עִינהעִיתענ = %llu\n" + +#~ msgid "Total extents actually written = %llu\n" +#~ msgstr "געשאמתע דערזעִית געשצהרִיעבּענע עִינהעִיתענ = %llu\n" + +#~ msgid "" +#~ "Number of extents written different than what was predicted. Please " +#~ "fix.\n" +#~ msgstr "" +#~ "אנזאהל דער זוּ שצהרעִיבּענדענ עִינהעִיתענ אנדערש אלש ערוארתעת. בִּיתתע " +#~ "בּערִיצהתִיגענ.\n" + +#~ msgid "Predicted = %d, written = %llu\n" +#~ msgstr "ערוארתעת = %d, געשצהרִיעבּענ = %llu\n" + +#~ msgid "Total rockridge attributes bytes: %d\n" +#~ msgstr "געשאמתגרֵססע דער רוֹצכּרִידגע-אתתרִיבּוּתע ִינ בּיִתעש: %d\n" + +#~ msgid "Path table size(bytes): %d\n" +#~ msgstr "גרֵססע דער פּפֿאדתאבּעללע ִינ בּיִתעש: %d\n" diff --git a/po/de_CH.gmo b/po/de_CH.gmo new file mode 100644 index 0000000000000000000000000000000000000000..99bd67b4a645c13dde9906d965cc667d37094bc0 GIT binary patch literal 129707 zcmdqKcVJb;+PA$!??@A+E=nMjgx*0&g+Q7~Xd=Q+vQr?*4tpm+6ajk|8(2V8Y+zSx z*n3y3D0an$4OHyyy?!&ZQv`g@`M&4<=UvB@Yt23Fo|${uy{7=+QdH^PSS3D^cc0~;}Cc<^x#_94&DuW!DpcA z?MpZqHeF`*9|=3+PJ^l!KkN!mg#+OxsPeuDmHvmYDf|w$g}=hiu=#RZKfPcJ-0@KL zmj;#IEZ7=`pz>esc(dc%us`yq)jnS=90EN!AI89yj@Lt)-uE(8d;I3uc6b_m11^N~SNVKL!G~ZMc=&1?ZzNRxWI^?dY$!cuL6xHnsy)I` z@)fWV{WjD7$wb#qggWo{u-R2ZqFR_lPQ1Js$ z{wFzZf@5$$3YFilPCn>VJI+jp3cnO8{#w`vZiUk0O*jgE@BCvh2I-RmJ(v$=S0_97 z9Z-6|1{MDY*c-Mv-Hw05pz>P;)lbfVN^d>X_;N2){*OWF^BGiqH#)yP?|kkhAPO5(9hT9s)Jq z9SK{)m9QZ^6RI5N!shTssPK2ef$&YJ^ctLP$C)lr`6oct!)z$~FM$eo66_1tJO4)< zUxljIPoVn6-_G6j99!Peum$p5#|2RJw+O2JkB6<{t*{k*5NbSm4l2D}Q1<&bJOYk5 z*Xj|1s_%=T%6SWvp3g(+vkR)-|AOjIJ=R$J8V;52F;MMsEDXX+pxU|Fc{bg_Q0Y%Sy1i#3Ty)RLFw~591GiCVDp;>RZk0` z>R}O7e#@ZBaXwrRZ-**x`h~VUi=fKA4yyfbff^qkhwb4`sQkZ%hrqTMS$Z%A_b{mV zM?sZ81Z8jQ;AHq9R5|~IQ(*L3YiEV9E$)!xiBRov0c;1iK;?Ts917oujbPh#wtsYV z>;uOj9}b(sMX)6dLFu~^c7ki1{94!;_w7*ic@I?j55W#_4^;jQFShYI!9#Hmg2Q0~ zjD}UPBU}&Lz}uku#lvtk{1Og=y)LosnGRK-i{Z;~B~*XPywv9_fJ=0jZ$g#x8z=wE$=hwP?cX0t|9E&9oCDQPOQ0DaVQ1W1q00R{ z90uQm17O?BZ9R>HQMji-l{*2d+_T{jSm@mApz^yGc7qSVQE(?ze`veW+J79JfqOdK z3D-f{O~n<~|6-_ownC-z4Ai*vDOCIIhGXC!m<0P@Y3-xbaS4>&ErnTdBkTe9K-ou| ztL(Ve1uCDuumKzg6>cJwJ8;3L9T->#rA-{xje> zSPWG^o1AG6T%cToMg;dR(F z>;Pq-`B3GlhAQ{@ur=HarT5)18a@YA?|Y%KyX$TL7zd@-Jg9nF36;)ePVne)%&H;gLgscwFAno_rWOG{1&T6OPGYa4{QR9VN)1{ zW8gA40p1FG!mps}yXCF6eg;C>T^f{s9t^`1q00FaR6V!3&D!xGC_N`a#mj`MmjF~f zu7HQYbx{50de|7=2r&uY?eJcB)a^E%4tH3)=m(|$c-RugLzO!nD&56U`J4j#!ws+n zd;+$C+oAM%A2x#fp!EM0wubGtT77y#*;yZ`a*cx1U^YyH>tTEN1ynoy4%@=cciMdV zL-oJWP;G7a;L*qupFxY9tUIKMkqa= zcK*Ad^4|-U|DktVJ01#^Pd=1BrBM2u0%gxzpzP*#sPgTAs;Avh;l6e5_V?KO=?t4A zAK*9wO0P*!_OuWx-Uc`kJ_1$Ge?qleOBz}30Wc1Zfl99ss{SkBLU;T_@hr-=Z_TanEy4ymPw;${T$3f+n3Dpk@98ZEO z-zL}@J_!$p?>YC+Q0ce5-=@<0o$H4U=i*j zcrx4$m0#|IHe5N3#eEi3KHH$`=S6r3+ykYr?;+bC`oJS`&VXIvag9Uigrey|JfsZjNh2c^fU zQ2Jj6d%_!`%K1E$zQ00+>+q;8Uw@c~dpcCT-VCMxn^5|E1C>wX$Lzk$gKCd-DElsi zvb)8wH>`r{KbJuHKLn-!<51(zTTtW52T=X#OV|(o0F7NfZp)bjMHjtC z3!6M)^BDy1z-plJvg!Whckx=y>g6hYoLB;zOj)#Z7V8@Xo zq55+WE`%$g^!)%T{NGUhvfGQ+E=EA*n+lbF01k!6Lg{fM><*uTec&fh;hMc<<9CND z#|Wr)pAQx8WEcxKL*=^zD!m_I57=hAwToD&{HH*rb2MxVPleHNo#O*=Fz%0`+OzG; zw%lW&(hEW5cRm~nABIEVUf33Tuh?;QC{+9fupK-NsyvrE`7KcGwFCBszr&WW$E&s+ z17U02Q{iwp6CMdqhXdi;uqkZ(n(ZI0p~}?}2H_D3*dFG?0=N{ae%^sGu*qAtJ%>Pr zKiaVhs=VjI(ePoY`uqv1-v5FfVXK{X-0KCE|0t+(On{0%6Dt2xp~`(JRK45}4}m+O z+WAX(7;O8t?H4gn;U+_cn-68bF6YLD1hRXK?D0}?_s($;vYx7NlgK*D>((4Q;ySWL<-nK&J`yN#K zd!XXCe$VO^3#D%YRQj`^>|`bE1}}I1_rZy{UxFTN`MzzB!BBQF5~?1Kf``H|RK1@G zRi4XX8NAoI`+Z>BDc*4&RQxLEJ{PK7o8bufIvfU@eQ4W%Je0oEp!$0Sls#^Ql3(w* z9me7Q88(OgKC9Cyo)tvnhw!aW7bu9M+pSOHc3 z+h78G99F<4yQmYm3=V+}KC$gE9IBs9h0=FE%!Fq{wd1?azsaX|T<-=|oNoY&m+t@wg{I>AMuFp3i_?;r&qU`6g@(zl9374>o~K zKezHWunq2xQ0>qMN}s{bJsm3l9H{tzP zAEDZz*%vn5-catbPms;73}+WHv*WhYai2lJuq?PM4YH$c_nW3V6G0hQjLQ1;PzkJWb+ z^l%qK)#GVU`CS7Q{(d+Hz5(N4>%BIgiEt$DT&VJ&0eirkq0)H)%6@jk{_rp7-|suy z50at$7ecjT6_nmT@Vmc?Ln1Khv=UF2H>f)VQ(>D!qRDto{j5>E%K7^C~F4&w~ng zJyg9v4%HqXLFwDcJ&4v&H*@LDK++WutY4}fa#EU5g7q1x#rsPf(q zJHY4R1o#1*1-t%i$M+Caf7l3>?xRq8y#r-u4Suou_k|(c6QKIdE$~{n6-v*!zuJDX z3{Jy+JyieO3zxw$zuA6xE9{K>FDSb|^mkh?lVMBT^I$40g6api!*=i;*cW~S)voRT zu=X?=9)`OJ%5GM}#_&3*a^D0y!bhC@4XE^XL#6jSlwEp%+WBJ|lwM(YINSi+z`LRJ zeiEu)--BwGZ(vtA_Aguixls8AVJtie4uZEs>Gd8|zPq5>x!K>g{@X!?8woqXg;4Fe z6ehv*q4L`Sm0vGkl(FAQP~|=vsvS>+Y0X%6}_76g~?T?n9{besKOR8$_A5~te!e!3A3eLlQp>ywnve$-u%p!Y;hKhFtYy`8R@|g`=!Ahv~ zPk_?l0A3acGyWRj*-Y1~){TOOI_!%l*&sH|Q6qtrP2daNv z2^H^cI28T@Wj6y_+xnRVW#WP+;vdr1rq>fn&yi5|FwMyqLiLj>sPM-^)!!LV zc5?+B1Ghlc+ec92((iCSoN|cmzZ;>(=O>{0=XY=dOm7!u=7BSy(uryxW!?*pgDTG{ za0uK2HGb@bs^5K%?K{}=423h1&xTXr&G1P0EtFkN>1g$y3srwXsB!gVsCvH*X2Tbu z+SBV4W!5ugQ2lQMR6T5kn!oOas)xU!((81n4L1-<9`D?<9m}EY`V{EFOQ7OygVOIM zsQUXHs+>`sqs;k5H>iG<2~{6UpxS9IR6A{fYS%}h>g83aboN4x2Q3b>;RZS;K-tAn zPSdc>G?5Kzxm0r zM;Gf(fl99&s-K(#74IP^eRe{PlRv|;FuJR)hhw19TMd=pW~lag#QDDoJ>0)S*?E_4 zHr;rresDC5gQZaUtcNPcHmG{u1ruQ7?zWw$!DQTPpyY4BLmIHQ=wa=8fM@f`gi3EI zRJ~sWrPrNMbGtbY3>c4qV{iy<)eg>t_8Blg|BUJr7;`k0!d47T; zVUymr|4e`?Ul=xoo1pCDI=C>3^KLjF9@aO?7lKQp?fAF5pY1n|``hxQz)8d_gPHI~ zcoO^_D!)}RHvc=J>hB4te7=PP;onf>>c9a}X5X6vRUa#$?BYVG_Prj;e%^qi;P+7J z#0<3kXdKl1o(Wan*--6X1eMP!sQKUqsQSAbdhih_JN*bM+&-vw=sC!`kA$-K6;R{A zwNT}F1!|o7-7#jcbg7tP^4|m1FTR18nXgrxt*5qd1nx=By~Me%fQ^yA25C;;PBz}CZU`;LIJ&s_L8ya1jKXN`zrt;_lr zsz2t9v|J5UKO3R?#g)*5*Fe?ZlThvWJd~cVL+SY)R5~3-Sv`kA4|h831IwYt(+i;5 z_a3Nvc)__pg{r^bpwewV+NReJsy&jR@=t}b*G#B#=Ru8g=Rvj0y-@Y=g5!@+`t=xN z`^gljelZIw|8l5$Jq`ATS3}w3Q!oSm1+!rK*eKszxDn2Vzrb9WHO|iC*TQ7nUqbbZ zq2q12=R=J%CqT8!ZBTmeaBMWe*2{3m*--Yl0;*hBJ3bGU{tqw#j+2n=aJHG;(z%QW(zk@?y`$Rh~CP3L)2GqEc12s;Dpz31< zRJ&dWwQhI~O3!bg!go!w^UioE_e`k%Pzj~)1yJ^RKa~A$hqAkmq3rW7sC2z#Ti)@o z1#Ul7yi(}F)o>)d3M!o)P~+5Y=l?rYKkJra*NyS;NZiLm#oG>L|Ba?vyXXd0KU1Le zo(mO!IaIq|4rO0=Lg~2+YFukPEy`C3$3V>sH$mzD7F7K2q3XADs!e|?RQe0y2)GK$ zj<-U!?@v&6(0zK8?Uk^d$^DI<)U%+Qz zn=~tb6Dt3opa%!0+j7o;S~uiD)yMHr{bn6hJ>LgaA1^}b^$ApYJ7w7N4uP_VTo?~e zgbMcrOoBf`)%*BNyN=0*%5Nc5y2m+Q0Egq=0+r6YurchBW#{$2Q0wNAa4eh-RsNG; zYj`$11YQP}?v2pQzfktP9jZQe!bJEXlzsI*(%R8jsPv~p4=#jh@C2y*UV^<~(`*}l z0F=HHpxUz>j)S*Dwd+?<_Srrs%J&)U3)LY(m zUp{;gs=j;8wwwSpUd)8*M~k59_f)9)Vy3Yp8JF!ZxtsT)RGL59LmUvYRF84xQn6s*Mm^~ZVzk-dmL@;pf^;z#lWes6gGl)Lg~8=YMgo$9s|FHePH^0+dq~- z*})2^c0Ls<-Ug_CdkvJmKMOa&cj1Gu`WRcDF$=7Hg`nE~B&d418>*boL-qUbpvKK! z3+=jQ22}l=4b?xdg=(KCpxW&NsCxU^v4h|G4}q$O=}_^jq2`YZpyJ&DHU2yY)lNS_ z+5az4{ib=IZKt+S^_T)BpAOY;vY^I;xlnd{4pjX=4VBNYQ0wW#^KCf?K=rF5p!A;! zrAGxUgr`H<-yW!Pwkojc41%iH8Bp<#fy%EMs(rS?(eO>Ec4!l@906sobD-wArBLI_ zrBL2F130dqI_F5|m!^pyDlc{+C1LyA7&d zUUL55L+N>ViCqVcgC)3E!9=(lDxKIxHe4=LKd6N9@G7YBaTk=GeFs$^try#R><{Ih z0#!dpL5&ARQ2JgCO}~OF-?vch*{IaU>+CoTs{UudUN9f3{!W3?e=}74XQ1r$eW-9B z!s)OTQ!`CkDQ{~oAzdjl%m_fY+&d4<)hHT(j12lzew1IiBeEU|VI6|#DFf~xOsP~{s4 z)!u2aKP-aDa1B)aH=yd}bEtOz6KY)R6}Iiw56Zq1pyWAFb~*=Y+$n_%;016I{NDM` zuXO80D7(50D&DP7-!(7-B7D0sz!%6URD7$_KPJzv;ZM;+{edj^NuZAPxX;At-097AP z!PW3RXvUXgtz9mMj2 zgNoO5g>APU(8E0%O5fQ~^z)5LDE;1sYVUoHt&X?uzEJs2glgY8Q2oCgs=jW3 zXTsNEEL^bC*2g*UG~AED2jKKoR-dM;Z9j^Enh%qq@~?vGw`-v6@NTGjeGbY_{)VM+ z_z8C0yaKAL<7mfh$8xCnXF6UBWmk_l|6Ne?$=^`v4L!+n zI#jp<=)u$A6u22Gz1>j#snN;S|8O`O_jsuBehJh#avoGax*1l(9dH=TI>ol*iBRLi zrBM0Z4=2O-q3piLsn&j`!)CZMpvH&UQ0;OYls#PwrO(Y!>QL6mPD901k-9)U^lGbsN-7usmyO{jJA-%#V%z_r$HXG3FuQ2L$+N5F@n>fr~ddTh7O=9dVi$3m!bodPvJ z+ya&VQ&9bPH&nWZUu@lD9gCst{t~Ekw?maX>JqDG3RL`ZsPSYY)I9$-RDX`X)Y`{b zsPX*-DEUKB`o02X2YaCEvF~M;GoZ$)5L7#y4rT9mK-I_N@F=(!O1~NF?Yw*i^jrqRj8iN?{7_l*{dWa}I2Tdkt&?FM^ZddZ_;R4wRk#4W)Oljh2(4 zhkL%`O2;dp+V2slcKQk`ewQn3Kc5I?7s*ih3u#_{oD*Y!tGG? z_laZMYi+xahpML{D1AQ1*AojaHvnI0<(Kl)aq|Whbvgt&h6gWXlr+)vvOl?BjH({&>FQL(tf}^Y3!A z)vphfzDGb0&T?Glc!}dSsCIkX@i(aU?sAJwXB<>N&4rrp=E78X8dUjSfw}MpcmbSt zYm{#*d*aE%=HU7O1rB|Oj?6{o( z)$YeZ#XA?uF0X@X&j+E}XD8Hr{Dbq4+iL4G8G6W%gNnBSs()>TN_QJn`@aA+KD`dr zF7H6K!)~bbzjy9dciMGSC)fu00H}Clq2f)3Do;9;zH^}Lp#mzMbD-?`de{NJ236kA zq3WZ_U2YtJN@omI`U$WVOoeUXEZ7_tI#xiH>saW))ll|x6;wViLB;>rx%a?g+zs!x zc3le9?rWgNhX>(V@Cz7%mG{_j{d1^#i@VpBBOa>$%Ao4E3M!qmq59!{j^8@=-WKIM z4*4voaq(5C`K$eXHoZ*PANO%k?Rhnfhwnp;m)`xho`yl`kpd;33)P<&!J+U%H~~HZ zRbRdbtoxW zu>?ww%c0`E1Qq^Am;=3s?YLeEHJ;rIv*5>YEFAHO?N_Ca8=%s80UA4p!*RzwYRln= z>JMi^<#Qbz17Crv&*qO=J%>S+dm)s4oB>syyP@pwODMbg8}^0GAGi9%LDgdsRDCal zvggyG!fk>Yho6Q@_dTe3Zt;ZGI~sbp)1bzSG8l%J!+EgXlUA=XsPeCa(tA5pd47f( ze|tY=<;hUxD1)kpbx`4+h3c34pvuwkXEu_!Rk$C9&EVwcqkNyh zX;9^feZkt%EI1eUslLUX3!p3yOxCKi5JJZiTA%*P-lqH&&Rv?R*vuHQofF2XBJ1s~4f#Z!c6k^nJsw6Vjp5I~S_lcSDu) zRj7XdH$FeJNGK6a$O8n4|hT7^{R7!1640A-n8{G5GtQU=)nb0`mBZ; z@3ugt^8l1x?Svlu9V(q}Z`tq@q4Ehp)$?k{OJP&ocR2t1;4<8Azz#5dr!B7^s-4b& zn#VT7M(`1+c6}1IgL|R$Xz;czXJ07&5}@p60hAuqQ1y5bl)XIwH9r0TC&0e%SouPz z^e=|0*T1!B z_o1ziu~6gbLa6kYK#h;*K-u$yP~+~$j^9JoLxYd3{@tO{od~6GE>yV}LDl~WP~}<= zrQdB%{w!3z?Q(A4$2Q$AQ1&_sYCV$!70(aVF2_QZ>sqLGe+H@_ehH;V_gz+xQBdWc z0o6}Vg(~M=a4vibs=d5V?0B0GWe;aSrE{NizX~m83srA_KkzXJ_JrS}R{|N03^uh_3`{T%5SfC^U)7s8D&4gL-DVcIvg+_yokQ=fsV z|9vnC_W0J0@A)u{do9#_)O?S%`zok%-wYeV7hnLs3}r8)_uBO5K-E_Tl--{ORqt0j zJ_uF+Z$jn2$H@=>&W0NSRsZQw?OqIJZ>K}e-;YDh%e$e*&92|uc8G(r!x>QH(b3R@ zCp-7G&i$g}w@~S}{lShy)1k(zRd5QtAF96pfF2yN&)Q!ul-)0bD%W*z9DD?-JikHN zY2P1hJ5PmjFNdiahMS<~p)a89qTR37z9zwGxcyLebOT%fe}*}5 z_HXtah(~jcX+T{?vG0MpS~p_M#I5TVC)j%H09KJQsf#?zMIN z%aFh5{62znxO1KVI?_IbxXW=jryQ!+au`6C&GR*cJ(~L?WNTm<;TgVso-6ZU+#mA1 zk?`Y@|AzZkm-Zs$>v*1kOxIBSm%#w{V5P_X70;jIf1e982-z*%x*m75F6I%!@SB#n_S+%n?Kch4@U zuRjkrAPYLZI`e!v&kqweiF-5dS4iUxo{L-<<@qSj&pG!^glXv#oIyBUf58#>=fYud zfb;Ldv*xK+h@VL#yc9sF}}SK-$6GVW*w#XFIBFS+#FA=kAWwnetcg&BeSY2-7x zFGc-qw@t_H}jMAjJINO)bRJI+FWH*SynUYoE~O^!NOLxm#^t($)$%mCa8 zq|=ML3iBd}0r$dzgn1Re#@s!*n;}0A`7q=w zaF1~D8}K}u=S%Qk%JX>q$6`Y-AzMQDYGi3H?9cd}Ot{04k0eYB+}H8EnlLADzrwSw z^Wdr6+qruqAI-g%ut&kVm*)3ngc;9$1ot!CEFXNI!)Nge^4y0w&B?0|&!b4=1nzse zQ*eI_pTz$j?o{GTzbrg3dVRUJo^AWf9K|cH+A^iJrGtT#kQ}>F;Z>~$@Dm-4p zt?PLU-zlVdB5~d&OdQYK;O#JSX|43V{0K9h`(fNq<9?fTDhT%*?h>9KK&I<2o-292 zg0Q8qH)Z_+*;M?R68=dOiuOWw1OD?|Jc;iij^^;u#L;yHVeW-LAkT0*?ZN#D_ov)j zk$+DZUHa|D@h;4K812${&iO0M`GlE7oK`&FUMJuC2>&5>HnKAOZ&YBe2YA+Xj)m_= z!o(2fQ__6PrF$~65aCY4U0f%x2IRlq#ebCeo!s+Ym)0%B(^ZXpBKK#+?T>5@&stYS zuCB-u@ykK}5qbCL`A%fBoc<5vJ`eX0SKhINI}W$5E%@bg>-xmWtc&s!?owpE>d03{ zJnJxz=UBqTkq%2RvnTtSxQ%%3hYmL)zmhxM>7%G~T%OIG>@4^f_nCFlUFE{`MDInU zr)w^09z!^m&c1JOXL83oKlz_WoU!J@B9C*4 zAGuD&zcv2XAvlZYuXwKFneCmqB0;k!6L8-w9!J?{3%kA*|Ib$yFl*Csg7<+Ygj?I?Gi^OOJ6xZgqEM-Hwq@jr&oB2OV)rAzNH zo?k=uDBQu#cGTAhzv;w{Tx*eSbnXkB@FZlq4tKOJ`}Y)=b_sFzA-ah$JK=>cjRM>^ zxd>T2N4fBCBFo_Z96bt=_v1dDIBju{_MKj=a~X^ z%_p9&cex*RvI3Xa(fEDCeKT=SgMIP8%Y?o063 z)f4#)+$r#FWKGEXI(UTBYZp8Q_h-(nIKL477~Cgu`+5Ey|3=Qg60St1|L=vD;onZK zc#r81m-c?`@XI1kT^whaYbKmQ_*K^F>*4(647o6RKGwdiPImrhBKy$E6OrG_ zb2D`L2LH#MTxq<;-5d81Snkqm>HI%OHW&R`!eZ`u$dAX}ku*-jt;_G?{DR*gmv>vj zj70t;?k31bknb;qbwN$MUkURif<<+NJqQ=M`XcW|nC7HW!1G}I_VIih_Z{4a;kS%C z+Ufc-VRqxzwF7<$f8{YKL{H` zKC#HJ!u>n$`+2?;Hb%bIrP~qNg*^9n@mIr+go#`|@OzqjHgTSCVLIWtoqGZDPq_DT z>q;cdd*t5)u7;hteJ;*}Jl^DoPNcn=dlKOv$Nzf#HWP1%3v(2Hw<8~p|9Y493%K7#zLGHe2zxoV zuJO*lLmfK{5pD|dfrO3Xeun!hWFBFTBhCf5b&cW9Ae}+@9nXCm&krDb7S6}Lku=^` zK(4vS+7j-0T?`wsl8k(D`_FaY@@#Qh$5l8C!I;m&b+D$Gt~sod`)FXEm}I9;*m z*ATa^0Z#TM@xFC&pCis|+y&gXyKq+$?rXviQFvDeH@NWc)ycCdadfS7vZc=b7V+Lh z){VGPJWG5o_t`Go>q_?@S1bH>a(~Rdi@O2$`A(m0@Ot88lh6am-*ItEkxxOs1leF@ z-O2A-o^`F~?!rA?4zA_MyV^(dcS)V+&Q5QMmb&=6o&O)sFO|F&BYT+qDxCi3yD;(2 zeKYRE(P1X;c+%Me-*shJ$@8t;PjUAk&2fYaI=`QZHx=0u+-Gt>N8FnTr>h;|?nV}k z>{Y_dwqo=5YZqn*ey1YYfx9~#O}JBuGnVH;JYR^vu3gCXalg!S3({SIe3wh(TEZom zP|W?vkHS41zdH%9>ri+qvL)OP@!XO4=kPp==UMoF3D@E7Y(jIMfcpV%U1MDyRrvSe zF0^9%m%L6!rt2BPui*I*WWB7&e77^1_*?P2pZjJPwl91h_iKb}3hQ2H5dL@sUz5&v z@IJ!cgDjut(N32|F2ZEurs2Pxu)1`v`XX*!d4zqN=R+v#IKq9xa~s0Fj^AZ2ongqk z;NKqEU-;kZbjfl4N+%iF(eO-U6Jb2}i7wn(jscj!-H$R@+{=fb5AFH z8}e;|f2`udi@8tYz6SRj+~;to67NUSd6egG@rztPlEyE{n{#J!>-qv&7-28}2dqwRZBa$m0y2hojf`_?O^!f=hd$3)2Vpu`azkVQ=TZo9Ca2 ze>XgqxPu9w2s2-ERjjQj|f|4F!mxc_irUf?-_=MUf` z+)b1jSAXZ38Liod6+8Ox2$o;ExU(BE z$329*z=it|W)n6OSvt?vPW}UNZX>>~bo|HiJP_G-*c#cN$c`h;P)B#cerDm z%=*x0k)KKUkxqU!?l0YQ41w10d^!Fh3sg;HiNp3hKJ(!2+zIHX%H;oZsGiS^c4|ropblaJ%RfIWV#l> zKE$ggORpw=N`I+W7AOmbs>gfL1>TI3gcc@DM$oGW1quV9P@upo z3l;=C|5ATRsXwnYU;|{;^CfcC^5`mgB`2jOdHKbG{Kes_GOwh3slT+OAR=EH2!%_6 zc(vpHe(DN7gD=Gsa;-XDSc_EUB4#;LDBpcy)&+}@N zEr_EOUS@K-7Y-IyF7t;1UMR3sWy3@21w-RKpBGaaD6A|ChARi~Tox!GUp<9Nii#uR zSTD;Tszjw=xfibF(eqb&(WRwT(P3)I=f!$Cf&9u~$O}v3=qe-1H5Fs9ze{;~iS;FVQ{E4{pc zR}l=O&(gsE5IhuEQdJTPggw7UpZ=YB}{+KE2P&&7yqMV7@Zyq+ z*urpZMJPyB7LiK@ctPx*`UFtduI%M}j;F9`kkpUZT|^^#zRYXvi2*Z4_6}b^+2%sq03GNDdxn4ucH!W;*?T z(GTGH?dA89Dt3|6-T`kVT({w&k9-WczT88JLIuY^Te%;=HsAuBs`YIc0OwXXqM3A)9e zU2622?2GwFkW6bS;bOCpDE6}m$qUd~Yjsp4R(0wYv0j=#kFKK97zZmYmb)c|C5)C@ z`c;;cvAQdWjUGDO{_*rQzUB|9_+n$zGqaOpV|l2k$oI11bEmC{ja@!=v{}6PVi}Uu zo#w^n8vzd$URE~a`<(gny?I*T46_*SX*D?C7hCGB@M1&!nHL+LZx%8Ifu&wB%(7*1 zoG)&aZ`f$n4{P*bCDRBaVo5nG#X_yMYDUQx{}!sMyiPb%W_zY5LPz!#sClx_Za zq&qX&o0lG+Gh@D$%*#nVD%m~{8!Y*-d4m;xxN!`hH`vyvM9DchUQ$L*PIC6FWYWt@ zkE{XN7C2X+ya@H2J5VmQY8(-tx=VDn6=A!?))>NSQp-t(8YXy_;Owke2V)-bIf<#M zzWDt7Kt*MpRd8bVkc>1z{{GMFe7>H0-2Q*s0^`tz(80rC<6lcRSzrySe}QRpgd5yEErnMmaBl3cTKp6 zI7G$)MPBMJ&nGQAG_VPvq$=Qn8Ba;=uC#g%$pAxS}}3@@s#;kbfCMHVI`66s(od zq#%$Vsz#48KUEb{Rbe;(2&1(SlZo4^uosp6EVinbu~#XnK;xSA8tXEK6}BWHb~~&| z{^4Pk4YgY+_5r!thwxvWg(Vfus^@=2kNa@ z_sEX@05)CYwZB;>_!5SMeF>?VISZ0zre}HcQZsUg4K>g6eFPoyykEOaVX$lto{}BrY0r$5?QMI5;M~>v-z8z z9-ooq&Eu>gXTC2nYo?c4Kw%b47^3^tn!MUz?&Zto%Mw{ai zCPsVElIYh)C?7p4+5OX*rLWIQ?a1n7XQs0#laVAcXwq(WDPN@%CuX}6aC|w zvvwpK4jz<(n?1vxU8!)Q6f7?qV2r|xDF_t$84?B@EKXK&b(jT4smE}v@zzUT&Y6Wy z#_Gf{19(2R$kBnuKdOcGa>)pm61c9n3c?b9QoeR^q|D zbF$*I6AxadITN73fE`X1mFm*lav)H#A3Yxggz2|@M8F>W#f)s4aYS$Tj~ zF&2IBnm67D)Mo$8P1wk``C#4|fl4;j`}@-Q?NLn$rPDC;&%THS$#4(SP&HnWp+Q4> zoh5THKUlhdriyiNg^lmQ^u<$s_~13?0{n+{=R*IhGRkjpJ$)E|-F}I6lNz|HW=vgH z9MFlbPE|u%*O)tovnw}%5tn?p6$ zRP22?sg0}wly+izW=_PLd_7WS*XJY}v+UBku+(4VY4gV+6*HSX=wgM<6O&B9j+bWE zE)8mgHhQq&h)*La7skjmb=!GDPprKozO1C}EMg8!>I8^>4NJV50WP7Luy=pPe%L($x%Bo6d^JV^OO@3u1oXF6bwEm}% z)P`B-IgOO34l%uOv48le(Y3imgrkO0aJvvO3qEtc8fIIRZ?g1CD(bZ|#KNvd7_Q2bT#`~=i4lx6>hDWsu8yNNx7J&e>{36yOs|C`v290ZH3nW+Qm3ZWs}JI3c7O-*v(rm$9<}RRy-14q zY7NY?8M9$ITwquH?y=5t-dB*ZXpzdRk$prLc+ zq-WJSwAD4Mvq<-Mp@z8CJ14{0xn9iBA;Z-8CEitH5*VF|h%UO&zc_vT=FG$=-#V}=;*koE=pbgSl4MwO(!?%NVTMV?GN9tu49yDuTQMn)%wSt-{^4Tbd zd0oj;K2VkyC@>AE0XD9rj1k5hNw`yB^a_?MjoMASUH_Z4uYIwlUSso%Z0IRlWr$Ne z8Af?v8LZWbjf2{*X1na7Vm*3QimHXB!3yRh)BS2vW-;OEw2t|!m}WDxsRkZq*-#`< zG1(1f6~=*EI9ym&TB?!6C}w?hSXtjsb4Y<}BxCe^5KvUk=K&@8^)#%RYl`vnD(xHO z+C?L8rA*`T(ix*St7LoHkQ7wRP(W!9_7=%rrM=XW2j`+RX`zmu3QIzGnl~X4->M3= zrd}Fb{nrAU=BR#u$%#EU8m+Z2k)|R%qn>f$K^RWOq6vVz4^Z6 zQh$Z^qYA4Lj?rQS3jr2(2k~K&D(4di{A=tT%T`s`*FMbMo?Vn`<83S+Yjj6{WW+kt zbVB=80qt#Hx7LgaVWLl?mowB1whICo05c|&=**1l3FlMzu zLMH4G61OMpxj91;b8{q@sU4M)!|`1>%rwf};)E1%MpA-|Nv$6VTCRm89}1a+H5s;aSSx;6b3*l5=GY|8U zW@g80IXsNlVn#H)Ml{@vES`y{1+r2f=IQTn^Q^_M=T0|`zTW zeJPn4xjFpJ<^{LUZe;MO)F$0q<~Ku~=`+-V+0fWQif*G@}=Z1Naahn1$w!k%dWsQXxLZ#9h{kf%u55eMmE)5 z$dbaWShY09>KH6*qquX{g?57w%NmjuSbyf;0J;)Uc55P29PP7wDcW7@Gc~)Yv`+gq zm;7swgWV@CHOm7NQ{xr$Nk~JrDkfN1sO5(~jvMa{T^_yMn-?9PKe+Z0UA4K0M5F(? zyouq$DzbTWVXZQZ!Wx{lA}}*{punbNeYH+zeJoKaubA>eOf~5V*%}R}X64$IgJ(BK z>?~^*|1}Fz);@}<)Xj?wMXXJRFJ)MY2QlzE5j2ofp$zfNU)r!~^k%A1wr1Jx4PwRM zXOqO6KxUQ5_d6z-nSkTGOf95>40E-lmGjfq$VdP4;wya)c()*P3G9sxhx)KW=vClaKn+8o^W!xzgFsX-IKl%$Hd9G^dW#9w53i zWyx!j&=_T3<<%4G%V5rC%&AX35BDvT&4JN{^{hUrJ5U&H)))>s`K{+`*9H5h%&=yb zltwq=nW4rmTB3D)V7p~eX>~=h9p-d`GINjyKb4*s^xpW~couH-#uAQ77$NnRFU(6D zK89fFjer_v%<@?yZ%<84)`xeqMf&>;~UOJ~A)){$Ir!Q^2Vs3^gw-v&S%4h(s zpm=fI%Z9HVGnASg4JT!##b=DO&%UYtP@eXmjLP*sKvq5Zrn+wqt#13R<8>mJ7Fk+p zx2th2t~ORy!i=Pp;S6+knTev|;yT`b^J$9~NLrQ^GDp-#3>3r(I?>uOeyZ5%iV^LwqP4WE5q?&f%xN96}eC^ZM{v^B$W~ z>xx(?^Y>uw+_cZZFr|ChV$vw2r@1_}Zy|(HD0{XigGjxojI2Yl>nC%esf{#8f_e=N^Jp z@Kt%_-G)l--ht|~W+oAH+#Ju511B5hIvftOcd&L5VwcNSOFMset{;gk9U9- zf;T%DDn;8sDBm1r^R&F6s;t5b5t(kIkJjUSsY$-n^!Taz0L;*S0p_J=&dkWo%2XkZ zctIB5ltq@eIlk14oZR@dv<0>Y*PIeZPH)Z2b7OkiZN;@<=*|yTV05+@8=H4;1){ZM z&2&cx9Ew${>tLL0E_C{C76$dcd@+rysx-?~`@)lASgSINaN25NZ2!Tgz9TDGZQ`_4 zQ$y;NZd{8Nx#nws+?*1yaMiJHf7CQ*UlY`l)xj#3;#dlO%=()omlbQ6sdMn&!tB27 z*ZT`YW#rNyh04r6M|<35A(q4HDSB6>PtfRAw3zJ$spXt^Y1;5+QJKD4C+GT=`h?3a zt;|`5nFDGLzzEBBma_`?x`I6Gej$VnQGih7_{#Z3`e%6w-y5)k%m~`E9;O57tKGi~ zDTOtsP-l^5VabnYRUzLdmSBvvuiniF<(3i=qh&bKhf+#Li!x%`qZqRdFu&a~#|aT} zK1&i-pNxE*`13)645uazn<6Yj=L|K$>iF5yN(@Qr*-Xri7Y!L~jy~?_<7?z@ow`s> zR2$k1G#r1F>&P~eggwud`n+}EJcLi`YIgrMf#^z1Tr6g5B?k|z55Dx#8C9y_I#n^R zChhDK89VjXfL!DF$={6R>q{A)=O$#vXD2P-!8apvoF$9GI{CRx{$f_!rc0Qa zLYp*B9rZ&YZbnS=1~ECumlp8z!*sxME>FIFV*0MQ!by90q+J_a`3HKjzs@BZI^~KI* zd}J0HVx7#r@6x*%=6wAc&CJA+zU4wuk2OtEw|wKRu6WD7P|NNYWhwhvh$$8N*`E0H|}kV=|DRImxAdSVBeGuO^s1NUAfY)_a+mrnjqZ zir1TLyJqqku{r+Nw1yT6mXw=d>e@Nol3T;|KP2^+?lH+}DZEEANkrn*3sJ|9-;ue! zgT66w9%d2ho-=aOk~jninb*(hQ?nyt^WBGw>IQAEZpQWYB{ieE(J70!z2hReS~YV+ zRqm_N)SOJ0g=&WrMf)jN?SABdzWgq3vA>Abg2|v>%sR5Vb*(V0#xzRMh4j^-JG`iQ zCxaDJIh=!*6%2KWFtzG6qJH+qnUH?d!0AqHd-=VrIh2s!IXuGq_Uo#;6H)HFu?EB0I=s~Sft(wd@W~gQ| zafc0&^A)qRiwN!Jn?<6|#3Mq@%l{Cme)R#7tI>MF_p8@`My?Hz$|)^Bo30mK)nN{L zq(ZtcJw8!K7`4BkaW5>=lQU*6NY2RRs}v@DKH#Y06&!EL+!r4u`Xw>Hb)*&`1J0xtwSdshPx}=dWgY@HqTAQd9 z>s>*eH`H|^C@E54JmslApja@DaNf|aYvK}35#rZ}&+)TJNzeFHI zYK8E6F^>tc_RxnuCU3jm<`r~Rh~qc=w$St`&3&qC`_*2J3AU&a*(I)uiwx7^02BoC zi#bjVcs$E?%mJK^{@kwG*3;yF_}0v`)$-BTKADk=vlnEhEXYYt%*;s2@nx{bZk`?B_XN_gc~U^b54&>KXf5zGUu&4XvHb## z`leo(Zs<{Q9`WqA2b2_nY||cAnHc8t0KKY2%|NADz(md-`F@1%C~75yh+#FFS<4|<9A z$03Cju|RJ7uC>N#R5Rm*zQ1Cd$wy#jeu%7TO(Kz=rEVE{jmKF5$+_Nh01usB{`2#) z+RvA4WR0Qxf~?L@M9r&Hqp1CtEM%lL$7=Scmde)bO!c6j;+WB*zFJ01H6K(xjyIN; z@O$F}oo5O~>Xf)P8iotB?=IclS z+-D~?3I>ElsnDmD#!dj2u)0{sd>eLDXOPrWoGA^KlOjL>VBM= zn&iv!Ge_u%pQjKVm>==z*vD-tXxqARirJ5bKTHBZfm}DIr)-0pX}fYcuMvnHXB2YoG5p| zSs_~Pc80Y|4);YVOWFML#4w^7pYT1{$Z>D}SLp=1folfPbzUhZLg1MXWp-+t8U8`P z&E2_KSb0;z1URZX7z5#4tY`yU#Uavmhz>k@*7sfWa9A&IJSPV3T4d3k_6;%3HQb@Y zJ$0oNasD}{*nP4Dw}EiN|L%<{p$!0@`WFbkzPgr8ZNsyP9Gb_VDE>L#_%1NpwCNkf zelZFx&2O)41t6{&omQE;lSqQQ13&xq!`b`y?~1kC+g3%7^hDlgmv^fTd4@m1!I_o4 z|KQuf056x~S!?!HRhY3hLDce}H)@H_Q_Z)9w-=9q261+K2T*Cf#8Y5jL&jSV2h84} zekiAgps}su3&JoB&Z<_Y;#DVXdtyw+$PER!&o;aVl2?qF)wr#G~2Q z>3P~dV~>Nzj6F48GxjWRVdMTq%fQSsCVO|_`S^skq~Cg4dqkU>WCJd-1F#_m!n!1z zBWf5Gy@{7ohhCw`Cd>_k;~S$kU4~9M?sDNz_V#-aTYfYahgK;YPK0S|X=}r>eb^`v zMx|Z^fG*TS0WH!XT~aLy2Yc5;@=LuPUPl>A>!OJZ4}4-a{I2(A>L0Kp!Tu!5+xO=+ zh>fqej8d}o5B%)6<=r%ffA@ZpR2?#OmI+*d-Y^I0P=#ckRWOhFK6;64Tb>ndUl5Yp z0yTD7S1If)tgmk^_0|{uUT4}2U+xRcC=8p4He z@0O71ox1Mqx)~l1Y9V<&q$=|JlIan$c5;pC2^}QOn~sowpXynDE*E@?&$h#g!+==| zOum}tv-~8P<=6Il%1t27V^!JoN*{vJFnhQAwlM=jt1OGq@{6|;g)Ie8VG_n>_X)1Z zHCf1z>njB?yLL}!EZ&F>LvMUg9qBpT>}hdJ^JuoW7D`x%!iX50{N~NV;?3_YBgo_z zZsvZ^>LCtj%X8^71=P$PmYMwaD2GWG;ok`4hY&{#?{%U>nn>I!u$T^ITEB-J~t}PsZwyDzI(Ppaqd;U zryLg3z4Kr7V=S|^PMDIs>^yxDf9^Jw>$UEdWs&G^F3msgeyES%)KBKOx-aH`Pc4$j zRK4}>O$s{Kru2X4?0x9$S8>w)A45HRVxK}RdeRz2y;24k1zDzTBm%23GGyOc@NL*p3Kjph?_d0R;+&<>`2rc#`qo3%7aGp0{Qb5>KV z&EzKc2(~Wtq2zmHo)Tuqn)^Yi%f8Y>KUR~6Y{u??pK150`nOwF z%VuhR*nHF8Kzm!xTm~<(i3sFUd@P;~xPw6Rv@3sus&sy8oD~~=ol+j+x?uDK27e6- zC4uwO#8bAC3nKDMJJxMok3Uq3n_W3B%B<`GW# z$U62qN~lD|gL)pX8Vh18o4Bv4GxdXq-#x-{rB6UwZtaNtN6`o=bUj{Okzq6S_r1j} z8!JB%Rn!eN0Gn63^_SL5@e<Dj$>|{=XaKY9kgNfjf4%kGP$SW%OJ_$W`1r`$ ztVX8#XzZW*_EhtWCd$(dmCU3h z(dk}qJKkl5sHuHHrLi|uH2a~haC54NYRlyYq0~)a% zqCF1tk=gc!2iQo{^CYs^p=_)HwpNlFU>VH4S{UM);b&J8@0YjG)C`HtJPUKCv^0>i zkjca4d-97gBne@YUV}7VD78h90S&rrRfZ>ELiuprcpqE>F-wgim4}+nB)S+cFYQnd zr>1_7TV>=%6ky=dVc;Y=DQBXxuHG|KwWW-;Y|6^n;QrX-f{M7V2!Zo-QvgcGq5|%HkdL$UiXsn{IZD#yV)zB6T5$e>SP*nY!)t z$g9nKA_{GmZ?MONGT(gqcwv=n*RWdis29sM&C=dLZ&mNU!a%Mvmaa^W&(Un?QmOTL zN-jPVDfm9?P=4pjEX>yO((hRj$pp95beU7)pSN68GcRjKuk-VmtT4HUTk6Pm&A2Sn ziXkirjfQI27ps*tYRyR&b}jZoh2eB}mXX~2Uc!^xYHAd-+1jfZ2yGLB8FWe=rLu>1 zPSUSmC*PV>vz{w984Qvp;a7liSDFtb+nlKpb!xi=jq;}_UQB&0~FK; z+Zs9H3?lSRR5IDn)ztj$FI-%cvG2gp&8ROR344glV9F_KX>QDEW^{!^H#`dSC=ug~ zUqm_Vc|pJ#A3o~uW<;Arfy{)#?rE$PVsXOVdxioiLjY_7jfFSkiP@@X4=UO`RAh|~ zkcdUj8e}@Ej&M^?pq;VNKG8+4^YS5X7|cCrYTc(tr=&6QivWn_$ufWesApFxkd+Y1 zL*NP`av*wu{1n0fQ<;8Qy4Zqz*(fCbHxV1B!-K&!20aN7pME99=0N28cmTjo2>TR2 zDr8L9VSXw!$6Az?Mn+0c55%kiu(~;4JF`*sJ*!03V=V;`5IYNeA(mp%^RYjtBipe| zzh`tVLC9>NVkcn%HQQ=f{Y`;n<^8C!>MRyA1S#c}$R>$D;$G9BqI)xYCkLl9*Q0%+ zIL_@){in}=EQ&^|YSk-JY6;9YCl6i6Q5JYl@DQjl9r2-!)3{h@kW4>sQ(XcR7?=gU zYHDQ?VLwE8gXvrM`d0_{V!RgGGbNU9Peq?*5AXf8H3lO#F|(oLUnmFb9KME&aQc{(8M^P_XTV1}l?qpp|o^N)>y;W`D-rwb)r`=WD^S8jb znMuc@?I<==-56BX8-vPLLgzSO#j+gt@no?OfLwuYEfH|X@YbD}h~3$$tT8x0R$j;s zk{)w-SZ{AFb-rs?A?BR8l)<~3b+BC$*_Qm^^cGKURZXnaX3;<_zEksPPfyX$9O*u@ zeLo7sJBs~w78%%m(nXyi$@Po3_|IDdV>R^j?UjFcwFR9}x4ysJSimPE>Z?Th>_E4$ z@bRo7?raIW3|j<(Vp4C-yhrC;T0#%f{}sby>sxQmFE73nmZ4@_C1!SFBJf9628)$}{=)RU_h?z|B?3V|7XjtrGEX*)TqFDy7Pqia*Cq!iWf@}F45VH)k zA_f-T*HonRDxHq|12A3w(=s!;jnKGc!HTpbAoW^Z zr8Ojcq}O|~zPT8`Ebx`Ez2cz&;hh;()?d4o9qww|6T0wik;UQSRF05$Mn#FJu&e;Y z^~ysFre$$@s8B3fx>sbjc!33160ouj^T1&$`UJ3=ETlUfS~UPt9PPi*9yRkjP0FHU zY)p`y`p6HAc!W{aL?)nm21)Exx@sttWLNIxqLT_jP&5pYi7XylUkWvgJ!~U%Uo2eX z$jm=H&eb6*mwPZ8zh%N3%Z1rH7mr0xbtRgQy{YN0U8V6UWm=j_X|mP4?tjP~#9=U} zru@(;pOM4jSs6-blcAYc7m~BaGCOP!&qCOk79;$_G}Y1*^Vj&p-QvlP>g@dY;>jQW zfgeOP##Jnm$@84@2^xP<>Yf2MbL$jaY-@AXw*A98)SdGhz+eN+;PJDC)%lHA zhy>fXtCK2eR#d#H=^zRVm)|8ZxdKT^w8&}ZkKNr?sXNW>){XOftG&1aY}X#5teP{r zXt2;WjuEF@(lCNz>8}TIH1tJs_TnOTG1Utbm12Jyf9U=5Lr^FcYZpMZ4?7Un7L=z# zSe-15NJ|17`~?xpJ0#;mMB^V$iqYl>Q}aunoO{Ad3Z^|}l6 zL%Dra!OVBYtijJsS_{qL4xH4I??hDYR5iI4=~k`4XgV(uCO9CI_K?SsYu(~Wm8qN& zDH?%9a=;-b#Am(DisTd(*U^P}{c(>ZgOU$tgtq0sL!0!Xsj%=*tUI+hsRhQCoc_bP z0bbk3paEDip~#H56H6F~B=!mKAX-i?&<;`r=nLlFT#}K@W4W_{)u@y3A|i&%x`_yO z(vh=0hybQ!NrX+9?_Jq`aUlql9C17{t{1p6rx99Q-U>Baz1TwhmI zy?cLC6aXsslWU3Jg~Cd?W66t&W$xwSWwE&@zBgW0zUQtZ6JHxEYTg2`ta}@a?oJ}A zYZ9!&lA6%HnT%<{;(x#Wysm^y579y-!TRbWiX)s7O@db@!cRyI2n?!fih=oVt3F!W z4?Po4H-Jbi4*DyjUO%k&R%~X!LW>`o>NKnOzrrr>W^U6j^@teroE8xE)$SC$9$ve? zRgZ`l832Y00#$-c0zs6#@rWG@Q5F1dO(gH-l&2+l7da6+QggZB2-*%AK05zu*3%uQ z%Lq(mM)j9x5^nk7@Oce^PHjGzeK`BK;`ow!QBQt(hxUfPpz&M^51UyFmo)`IuJe%f zUo@1RP6zxGD4&~;oZ67XO~#z%wfPn0b4!1FBDaeA9IAsp)%P#8g9PS2(W_XUPYoPHLLme?HyP*>1 zM90bW@k(metE=-@aNMiD;N)gh>E%}4Jm#YhodM1)AJj6PGZ{FHUU~Mf@`t6>+pUcw z?{rQ+bS^%0E~%fUez0qLn`xGcb8*#WM~zc?FKVWlKdYyuVgQzXaMbH=UfEH-vEH*} z*BT9x;+6_qvv5lZwSKJWaaUjjN#nblJGxnFySp>DsvDsERl5MnW;#BhJ(DJ!^_HKk z&2MdQcKuSMo#KWhYos;zMPaog;`#xyv%R*wwYxLZ+vs)|c?AKH|C-lP;cXO;_=g1C z{MR$0`k3=i{vd?}(%Sm7u8u|ikaUh!~8S~_EuX0CtC{V})B&NkO6`cCgqshy&x zsZ1?y@Uk#Y!laS_Y)?0IZ(80Ke1t0Kq5s1MSc`oo9a{GYP+&V^*ZKy3;$BJZ3;yE2 zJM!V;1pLTwI>&;i$ipb}a%5Vk#yfnOI=g2GC?_5GG8GBOzMMmgC2#1?oXZ<(5j1gk zZb$y0yF0UTdE;3?c-)@J4|nIFjyrSgR$}?0q6h;?_?|QO5V*S1#)SGq4Ma_R>rJAP zI~jtDKbflshqK3W^9TR@U2aeY0vY^tJApyeKX_!?8R7~4NWmmMtt7m6RQ-^$olh(r z{s`{`hyvv>Yavk@Fo_A=)%ccw-B*omHuF?+Xt||+%=r($E2&;nHA9)IemLL1kn`?W z2CjyinE~*^Y%w{T8BlX)=8oK!!A*RvUsPGi!@~@^NS~yu!E)nbgS3_w9-zy3fsov>4N7LV6bXoJ>H2D9i%8#I~}gaaM*#oB3KCwD}pRy@7yA*>$tT6f1vhc0;-l#X2O< zxW~!>E$d1SP&uUMeOBUieIIhBn@s$f$fY5Uwj!*S?Hey^kWj5^KyXsv)615vH_^c2 zMWc?zUN3GPF(T>B8%V0R#-G`4=k5Xy&SC#88ckeR%U?0-jGpGHOGBDaQZz5k<<8+- zbR^T09rIU$3tKru7p*)0LQQ3!A8p{s&0v6;M&cF7o3F3XRxiKC7Q#}k-FR&CrX(mi zswcH(C3}wEyYHCjA^z-j{n+kddne7w8N)2wYwW#nZuEERX|@Aqk{_`c!L9m-zq{M2 zZd@(MN_>p$alpJolxgh2nY{_A0e(I&kkO;f4q2Jg}w<)U(+z+Q4rPLz(7(Xuz& zg`>p8d4==KQ=A`6a8S#-emthx2D-U(FfN?FM-x}=5k)V!247_gmBtoRw04U)SCK1ju($tb*=Mp=wS#XNuXQw32 z?O!C{H9ZGC;QJANbh?mt$m9|fK>Wn=;dIi$&vbgMiDLwznkiC%$K{POTo!+j7{DpO z778g%A8w~i_VwnG9SiPOU?f*WlU?nVMPbvD0z2Wc4dRwEh)zn>IpNKs)b^ca&dZ}D z7L3iEvL#@#?X&Xj-FWG+Lgj)MIPk>@K0{9MGaOzeV`W1xnBXiGCLKhKTzlDNXg}Fn ziN*~FM}to{g(QuXoUHAT1KociuTaa*Q2(-?-W|U=9lp~3f2Ex_eK!fjk;pUlhJ+EE z4d^$88*t$Vse3Ag0z;?lfL&v+0=Sn5%5%FDiD~9bL3cn4b=l9^=~XHMeZXBuH>{A> zUD(?|ZZgw+kFt#FZPmz{(A^5jR83>VPz>s^e!n)FSI{PVCI!Nt*%+16myc@a*3WWl z9Rr05+q>?(BSIiDHNAi8S9uG{bC)07Va-n=>~WIIZd|uxsTEvkob_gHvcE`*QI zPM3rknXfV_40)TmV{ny0z0Mw_M2d>pQkf(*MgCYejxyO^faiPB-Fq6Dxh^@hj7i0k zN$@%zBk&7FVdp)^Z%gqpz;n;ix$$jL2N&=DfIR)^piF8sgZ3%63xjsU!Duu-O2QTP zbhQ>I3n^o)wDdY;V`VcJ)-m^I^!gsH<69Y*WfRKN2w5-wf2hb}SeNEWWAnK3T)xVP z1cSj})X>2toppSUQ#0=SKooyZhvK*c)jVZV&Q31?PB`=kdC1&k9771Idry|{nn(L= zz37K_R6kwn{c1)xLUA5BeFt1nsWsO^HBh$Y0o1qXe$dXvLFEdqzwwC{ZCqd4oD@Yw zuLSoCk>UjOFXyZS3rn9%%gV0>cv&-73rJiDK#M!scNkrRtf9+rAXYefbId%To+% z$M6Q!qg5%CRgI+1yd-TGi{%?xW8?KiHB+@hw^YBS{;QEEzgA8KBe=BFL7O>^xjZw1 zB-;nd0ArG*m|uk)j^Q;Y!fyr-!z@9qqc;X&8aGL(nn|a&ecV^)`23u}SeIUB6}Tr> zEhc5kqAn08Xa4Idxs-BflR=8i+T}i+Br5k)Fml*9cLT8jSHDVAIn$L05Mgn4>0H)Tbs))QY za@W>Us}cA#fCV$^d(1sCWc&5|}H9?wF=;5NpyC!zR=p zRjtR$xH$I6?zZI_rc)&(8@wlO!X{cIPgYjvn#D@)r7*Gh!%WJQe!QYK)1_ig0ytxr0ZW*+GSXX=K(->lLjZ{YVOGRDqC+E@AM1c^SfpdicFr zN}l{GLr5uK&}bv*+BU%S>IqlP-Yt?*O>Zi&9UKr<-|18nx^d za>G=V6Pu96UPukm<`#m-d1V4g5_)xdjLTIe!>9mGOAMr6vg?wRDsIU-3?Y^-4R=nU z*&~O&cheh2suKp&taY^4wB~BQzTlSTpg_>^H=3g?2_>b7M~1jKa2!6G3|35l>xOS+ zDx}5;L0YhlOqcDScp+MT%DdIY$-9xMdtpICt<>`Po<>G8=c?vZC^X3KKMH}X5(EP4 zx2@6q{jHueQfYUkX?Nn&8rhTrB{b&#-xXypgLuTFWxtlEd9ZeUHdckSI;1cefB0^+ z`9GtLL7!`?bQ6mAVm}Yaom~DNDdsyKU{yIOU+~|>8~z}@B1f!fEcb`k@((m+|_(>?Ki*=WGEI-MRmrCk^zqGdFejD|e~q33f86dbq3D;LXkvM>^lD1?lF(I;vUy zL)(AZYHEBvn7BS&0at>I`Sx@9hgnn;|LPEQG-BPhu;zzrVnekOQ{wu!}A7qjWwqWiDm6>4y=7pPA2D|>hfl3Zn7Fd9iYEX3=&GW zTZLD?@;x&v*r$0SA)B6X!|-f3@wO9O3q-^>f29b$;vI_uuqewyM)S=fEA@^%?A)Er z{jl`#fD_2#zScSK(}pMkdv|Yi03m691L(IO9POQ*!WT@M$Zxr3k$;+mu3wEA!&DNH z|8Q9ryPCCbCe(>LYi_Fpj2NlX*g3te#pShVh?&4VoW2LSp#6a{l}Q*HZ-z(^Yv*E5 zSbuH?QX+UbZ$hg>Dt9PRyLs&(gM&o(G3kKsSzSF(gud9)~_MU*%Dr5 z2?Mh2^0rF}k}a;ja#9Y`!R>Z{s4z(jJ3BgW-n+3gG%U{mB*tPA{pBw}=T}K~( zLrZI2ZviH~`Q4NzT>yfV+kwwnPggz|vdW`}yZBOi7J1IUQro}8@HdOX{MxGQv zsNty}k15K-)TF90u^qf3j}CSZckXxocK5HjGHDi}>xYxW`(Md^^~1s8S9h&nPqGx) zZID7qX|94(pJB0H~A*Y;;Y9T2Dg!}>3&K2Bp*T>hc<~! zyGy|P5orey|D;7*eWgF(d(!giT-~{zSY*a7wp#zzQU~=7yA&2={l?V9l)0=R?;jeW zNLN`mpXHPR!7wKSG`(;^jA#R5Xps-UDa2`yQoziVY(3uU$|6Zo;e%)$-5m7rOBy&E z9iERmp0|5^c+oIDUUeeF+vkQPvu!$~1#oW0X9%u2*J!J15vp*oV2ilDpnQl~MXmxS zlp;`^50Dm``$3hcbjxQ97jNo?ZGYJ-vHTDEUUW<=9%L2m2ozZU)xsGs0b33Aj#c|Sx%3)tLlXOov z&>QC_ZMmuEkS@U-CR);Cept%+*F(1(q%GjnmY$ZF!kt6f@X9eM<|qg4OOJJ?eEj(l z*<8$BR9Ic2n6@zK9n@ULmB;AqI~HyvkaaD37%!O09VLe8m@AK!c>$HE=>w-xALBj9o=A@ekL3R3?Fp+GRavc;kj&A`h-5+ zB6YWG26BA#>bO=|UiR8bX%&+{*0u6Io9)nGcLon*n}63 z6&Mwt^sIFnI|)qMNC1GGXUzf zWsKk<cj*xP*5{9Tlh8M@a?}VO14M9Zy=+Ypfd~bFgI`TfDpS2t zIIcXv@Q;LS`gJkxBZkvI{u!0|i%B42*386f5!r>A+PyzRWrEMR?wUep0vDUD-r)Xl zjCBkjzCEmC5-igsllcGD^)30Et(_Y+!^o3saOWtOEqf$ob0X<4`*VC+4l-3hqS*wQOuEP~ zX(j=rdasFMWlxi5wRPW=l=s#sIz?7dG5{tb9P~UhpR>& zc2J3bJ>@ykJFBDP)5FdJ+0r{(TqVO+vvApz8GUMFeXH{rc~2lxXAx*)u6}s`!QXW5 zf8BZb4MEX!55N1>ePXGp*x5t~krlmF?;%y|2Vc+KzyGWI52&|7BuOWwkU7UqXBB2~ zUM~zj{*ibVIP-8={~eI{>G|ybU{6=|*t7q7jGx zo4@r@>72|?Z48J#8g!PBS;!kRys)36M-P94OMyxrO%Ln8dQ?BS`y0A?;&`}bb>rMJ z9X*)+ZuY^0sj6=M-;+MK5M9BBPjOMB@}0w)>$1JpGj0t*%KY*C^8NKOlV7hwmPeur zM<4%uyuWwp)fUEU(8~2&B{Qq*?&9)dXXEnYpO2K829N-+(Cgvx$3JtA?Qts4`|{59 ztiSf;a_{K$HIBsCQ7`M)_;mxM;o=0un=XGDaT_JhvVGEY4QWVY1qEp^S_nupP%1oM z=yp^*SMzr|2qqBK%A?%rVX+`D9Oe$+xgjm-BY>fpnW~;X-W$GGYJ=CKyZplCm5cSgF8oEp9UYm7<9mmmK$g1z0jwuinJ`C(bVU35L% z@4x1BTvc_1Z+6$}|L_0#e|M`pvwzLrfbNBPpM~OTgv}=#uby^SHeM~QZpkw@CCL5} zMVx@CFL-IcKm7P7z7``8^E|{vgBIlPZKuJoQlIL$B1xG3r)5FoIi*Q*TY-CUwoX3& zk?Rt)-N^7G(sJtB!wd^NU}NgaB>P~UZ)QxUN*l)p=r_zrU+E9Hn!2-KS(Nri-iCQf z@&2VU4yqsdE^4co=Z-@jKZ5C-yz=_vpKPxkQsX5K1zR8gi8}**#o zi#|UZL6rUemA%&>`?k#)4%_78KhwsA4iiVnk~h2&Hc6rfMyo2Al#ZAOS+5|4M|&qE zC}4u=mdWv@(*$R>$PDcF$t2H_Jgmj@-e22lV0Y0MeRA&Y<7FItc7C>>9K|`_|7Ug+ z1e9lY(yacU4gIg!(285*9@vk6zIuPJ`NoL*|b9C(7D* zv%M$t9p}}s^EX_Ul9*@z(x~Vc_PDUwUEb=xefsgAo_2TMZY_70y1Snk!<$pwc0@_T zvolQRx>YuKce!p#>!oN;rpNED2Gbb(T~EIta-@HWU}AI4ypE)@!DLfSn~A!3H9h!( zcjJz3qkR^zT{JVH?8{p0G+Ij@#EAiJ$n=%+>49ymY18W9ggPFR!^Bm5pA{ho>@^2&)yH zuCtGSwvFrTh;6?qL;^b;2jT=%nyva=y~NH%sIu2gDzm?~lVsShGgGX8{^`!a&;K%M zoc2ysRINLspZ|q($!&G}P8RY2{q3fzD(VQH^-nk)+)#S_n|k%*pN>fxeZski`}xrF z8y)fv{*uNy(69mUJjpa^n#M-ac~O6Hqp7Y2?Q$>;`^ax?6(xtm^NArCczmM@B(XK; zF$WXBDC#mbv966Um{u??j1O~CxzDYaEA1D@e6E^y>+;=d+D*v(v9Y=S1h<$~-->rb z>p(h z7A>NV0>?X~wDkXQN$0~u-KggOp|PsdS?xaE>~#3!;^Ls*SejoX*Uj7SzIAc3>YUhV zBt6Q3KjE(nOr0P9acTMcU9zE=)JZ}l``1&@>{gvY{h{t$@*i^d>>9xZsjEGtZMK^I zrb1yjI1z(P>B>4iz6VxhlvEO5!$PM%TidtXt?&3+eQ6I9YftLo(TgrO`2Mz9G-2BA zZ`kjnTVGt_Z6?LA7iy~s_i&kM+y)b>y3PFIV!VJtP@JNc~fjAB>fkKTADt&U7@kpnbz@ z6fUO4Wu9YxFk9?S^FpZ}Z{Ay5>AdXAwbT`g)3aKNRL@|?*YEpiD2Vzba-7%TK)ta8 zqB<}oLXk&o#`8d#s$j zVT+xZ5S`h+V!pb!ml+;VBR3QhfYQV=M|f}_oQRZ2)*%gN@F;!Dn$$>%bf)wQ?~cx- z)~)pkqJ@o^H9WptvkUx-q{X!BRuD24z6Zz$9wsDUXik&%jqQrh`okec5;*avYHe~C zNUH+zGA7g^fa%E1FjOuKL)Hb|YSt&zMovjyFu;had*f}Bhh0b2W|Z;{LDj5?5o?FF zpp#64c`ghF75mNk$>7#Hnvp#@q811Oud=_w?BbhP>VFK4MvaKyCZqn_e#5`(K%9U= z^W6VH8jz;br`To>Nkl}TnZ5}#Bey(Ap4HPq?LK}=7N%tk^_HnsM^IFA0s(*z=hB;0 zV4+gxbs_VwddrWWb`4Y^L)q4Y`^|&hYJsq!XVt>*x4Lr+%UhM}FsMTHQ!}ihSU|PO zGpjpo7WVL!g>d*T0b#d8`jo8gofW=;0js+XDSB)!@Go;SolInLnBeouO^}cxg+puB zW~*iS>j+mFLMuDlm>NT$N-wXnXI+NHza1B&5vHNRA!nSo$~sB#m0(HH>WxZH7X6r^ zqiSqdPQ+ZjBZ)iT5^Yw?XQ1Nusa;fS1Drzvu z9*4fHmsn`R*{Wxe6UMfJ%mm1S%ql)=K(n^w1t|6oxbBY<@`ly?0Nh{n&H+3F-?Tv< zl&j75a0{q3D?t`fHp{_+B(Y z=d{5d#p}wZCp75aAc}oG#8>!7WDjIEP9IK#3K8F!?{>sYpD>S|&~VfFNTRz|{N_+U z(K2H9E2iP!quqaXql~SyN?7!%Xux0k#jQpjenBf>$+2O4+KlkeZ?1NPd-*Yh{=_7Y zS5`g8TW+tD8f4nPut{ouL8E5n?TFTm%#%Ev ze74%gI;zCR`Ab%wA^(!`S-TlTyM6J!9ty!iZ?V`T zGNQCLz9^*Fi{Zrljj

MZ9>N6pmNdLHpb$Y3hi2qxFjXLX)q~U*mCJ&_|KW+rL1~ ze8GoWwHx0#KJH((CbVhv@|P`5y!B;cR{O7uVfO^1E0pT8Zn4tg7^5sXlz_*~^cJ{# z0n`IF;v96LySBZBDNo62yE2f0ateyXl8mt`mRH+B(JAh=)akvxJiWNW>|ErLliK2! za|w0tUskLp0>o*Zq*a}g$GYo~%U(@aUSu0BaO_}^ zblfal6h*U@NQXI2N$hq(N!C}Xu&CX$NRSBFjhNCDxr&x0By@8yVnE_v3wKJB3a?jd z6aq$Y6y+rcDQD%3rJKC0SGhOh>QDw@%5l|HbPXWd!}|J+*aO^&hA}rh_Nno&ikW$R zei0q{3~EoX$ZRqqq`5=h(Fz<4QnjUx-ivvBQe>VUb391sct{^o4Z|_PEk)dnOJC-A zw8sB+db)5>$9hBIdaP-z8vc?W|46h$T9|0WW%aR62(QK8fs`Q<*O<#NPlHRb*YN94 zgx$6z(>XfXd-%<_X+vBR}}+4UDG{ses3yjqBdkA{W@bhJY7?!5%~n5~{MbA4PAxtFTPwL0YC?>q)A6w8OlFe$bX z@TFryvpXwP#r+j#4NFZxxzVU09;-(FB#;^>d1$7@(AMPvQ%Qxqyi8AC35#P21 zCe8O$Yiv|@=+!ka3L`!r92>d>QePDK7+b|YkGDdCnoONghR`g(zw=ZfT3g^Qws|-z z@3~hNr!pi|_acJ{;E}DQndX}2Fp%-|7!~f*_@y{@Ns28NfU{=$g!Gg>VaGnAc5I~W)hC3gSN>1EY>Sb6SL- zL5LRo$l6!`54o^FR9sY&`R6P=4LAtfy~WLKAn)`?y<2JiK&3UIb~=>PiMXBnzb5V; zo!}G2IF*|J2DReghGrRyn)?l3M**v>p3$C5k*z}A(Jpch300DOW)x8MnUevDIoY0& zRMDkYIl-(lO`)PF!`i6cUVFKX9JTWCAA8&ZW7LZ2U~}*tq9Gcg*_aOZBp}DhVx2Mc z*q$`991Af*_Uhw;+b0g!c4h_jWfYuNi8Kh`>0;K7*eg{ipf8wxOu3re-0IzXOt!XL z_~C5za;b;U*Jxx0GiZcuptA?deY+~wpKCiYq$*3#B*BquZ9tf?AN7PnzD7-O!=rQh2(Yp-WudgAd^mb)bmm8`RV;QVcX9-|PCVUgwu29QRqaw(_RhL3hP45)wWb&|WSPC;~uRsC3 z9=u91cgl=+?$oD5J=`ffg|5lEY?e$*4xA z3mu40^l3&>ARtd|G)=+>F+#K1e%&ZdHYa@8`)gvFbV<@|4M1UAhrLiU5P=%A^{=2M z^5*Ny#RA%E;zXl*8K=@)v-O$+!o(AsQZsyd71M*N6~lWpItfNyn5D7-Vj!2VPLk=E zMeQARSBGl*bb0Ls5e~u=$ti*9$ZdZ~|KZRz-aQftmVMGA{wI!rnf(tMfF$IUK>a_Y%e3lpj0dnF zhcQs8LZgTRvvb!X4x%pq5i9Yp?gRQ&KZi`6!(jlM&Ny->u3}0gGuKaC{oDiEL^Jo) zA1mSE6U-qP(M~dC@9&6~R!?!ZH&>BCZp)s#g`+XZHm}fN;oQ=Ciy}q4(PG%|((u$I zg>Dx2?l@OSf8u*&vWTyUYTO2{| zyEw5+_1-!U+y0eU0Mj$SHQ(t;wZW%f8Th45^koZ^l)i7|^Q?Y(Ehyl%8v{h_juIeB z*QZx|$JG;C1C!6BM;O{e>n_E@Ne#%fpU`VyC08p5XhN+-S9Og?2%M$2M|Cy@*gQ!7 z%3Dc96WC9pu``E98!Pi`e;Yr9mz}x-)rzmP<+hh@sE>%>@QgE)*nQd&pmpDO3441M z3VwZ3nxZ!~QdSaCH1=Hvf6o75%;BPkdD=4y6hK0&y+7=0{6Y(t2df+-Uw z`ErxqjKVSpI(-5?lB-R|fb?-LgxQuhCC@Ed9TXMe9DYa16#@XIbZFCUu zBp&BlOx*m>iyhLij4!S$)`&4SKffU~UYr8F@p3$$f(t-GQa zf5&jDt$7?>Dsx(89g`u`mQ6=S*a-X5%ms<*cHJtBQ?=3)@IUxOZ)0;FNA0!h`S?zD zvxIAi^|YAKsdLq|QSS=llD$Qg89g-^Q*cw;grTbA^&d*V2lLKWD>7OgVi*;G+rO8P zgh!h&mM6%C!+Q&8q4zd{KFJLO38_}h4q>z90+P;e!*El%_->Cu$!wnjN0>*4wX2QC z%Lxk5$@8Z;!{C9MO!n6-Nl`S<*{<#5>8^Orr^n%zfTlDSV8W+GjnG=>=>==Iwc4hW zg5IGCr@lJcX+=%WgRx+Fe~8;Q5MVKeutgh>pD@H!Y@*O7%8M3LEq17JrlROM6PxG( zbVwpPv{Yg})FMq@vk{9oS6~aGI_W65cxK|_u#TM@uJH9CKJ9ic zcrLEZ2DAVrl6KHlM3I zN)GMJ=))7=D)vW(RJIS8B1f!{)~)@BXK?jN+a{haZY_kTZahf(UT%BrxvPy#@Abgj zAfM>U5*`5Q#Tym8ND*PL<=f#-q0y>)LB@}@t(C=1CkB!iR-bI9QMMG|34PyIJ}Xav z;om0ZHTv1Qy!KlQI?KKF)P*Lj+jyY2VngD+@hTU47>{pxzkJ+Y2eq=f=Xce4!-QKS z+sMY-4k(cv0xizXOseBT}00c`6DX36+C6@n=y zAM)(}-4vIFP?)s-?v_=&IyT!h+`Jj+Ml`z62f-!coBcSFvL}ridBV62)0F1Wht>{` zE6OZvZhSxz?y^KSns6LSaMK$zf+xu2w7@yNZy5(_HhSC+WCiwaxp}DGSETGjxqB8#`J!yA+{+nm3 z7tnI1g(Uxp+idK;vm9+UDJ5{F#rI`5B${`&GVK+0#Bo%94i;mZogJjRyN^SL2pXk9 z8$FyNVzW6ImewtuKr!~$>o_pT!#ip^1v5!7h}wh_Cpi-e#u{sFOyTc&TFs(J`o=%{RD0k@s_EHC&7stMpS^6qENxA44H7kowS0ogmWsz z%mlUa`LdrZ+=YVp-Kf##Ad?#b?&CJeL}G3#VT{J?*CwA#o zwc1_#_|GWQTbuJwl8FTm3WR!Gc_3k1R2u|y3Lil@FePl(<~Z*iBL>?|8UEjHwTVP8 zo-U=c=Q&sRz$9_WvDngtNdZs&opRpl6Vr0_q@SedZXLNO8 zeseQ5Fq(p|G1=>gBtWgf;DQRYV8+4TI}`^OEizbV6-_#tIDlNw_{|NS6{&vrc?MFEa279B~ ziNbKk_Mtq)TF)Bth>NWGt=@QN6%~&Ep~9^~F!4$0*9*$`0-ihcnMU&l6iHvIqhzPB zH0uDgC_GfgLE9ts3)FF!qIGe~f^?IN%Q2zhxX9viCk@J_c-pBFAyJ07EOY7ztXsz@ zSe)#I6B-KLq|@joliQ?a7pSB$=MU|kahE~yr3+ak`OMd9B&H)=$)Iq{H!PZ6f=>`7 zun5raot!K^xDR@oJp5+7>~WMm^j)Z9l%|Q1vnuw9_=C+5%z$|D{yIEI?98hOW+jP@9@%=Eu>nN)-B0Yn`_xI zB}0+e!itOiUAsoPC4c91f-RAGkH9WpG__}5oi@It9w&ghD8;~Nn~Pc02E+Xw0-3^L zI7Z5|V%BcF83dq}?OMVFi%%(^vS#IoVnF6Pl}BWL{f1CBJ}31K=<}A0-uR!a;p)GI zA3%?bfwsC^bJffFrz_R`n*MpU*xe*e$FuFVMIaGDuK#5dgqfvy|6YcY{^fs}-?y$( zfbSHwELTQD*O>~BD~Th(&JN@gv;Nh49Ym;MR;I`Dsn{8{S3m%CEER{BhvnZeO%#7MzoP$?bE*K9!wB#DgL6 z%yW-gyMgm(s2Tjup2wCPf8K813@v-8fH%!7Wk=nZ&&WEN0a=`talFMU-WSS7+`jdk zGF6To9dZX0W>v_#SBXrHOt}RYuC!v7OM+h$`!rC{J%T$#K@c!~972>YMa^`wZ>ff-!Ql*5@8S@}l(`V`M@uyIGK05L zaU2GT#foT1Xr56N_`yb%^@-MDsxk%)&l&m6OW!EDsOhT%fv7l`JhDJM}5jLbsg?2>L-^s21$9dQ*BB|D1pJI zjEqUjg1s-zZ?9~PC)JI5o>%NS?9}YTBDFQ?)9>GP8Lm}J&;79u!sXp+gO%t!Aw4M+ z;r@ef2Lqf=i)T01+R7whh)P9O|2es8&tjV9d_#K6=@DVjh~j@jH?~I8cE z`JP_{sXdCxokY^uo}`AEW!4nEkn>t^nINuf6+16bjr-i#)X0=jJn5;)S;j1jTxl)C zZXcl$UX1c=(JsmnxHcwhbq&|hbsxh*4#8a@?~LteQT+=zVP=V!tTCd zlO~NZIqTzNVv+iAF_hXI9+cl;zv$s!D5?3mskS9;SHKPd$=sTmI>SPO{0Ow9;Bui~ z^kLRSW0kfak{~EAl{9i}!%C$;M74sIa462eh6MMZKq_O|S-s?bY{e@s_~Kt^B~IFn zh-t^dgE%(!{rqi0c=oKSrwe(!ahGjQc_GG2V8FIU;!;bkZi((QoSu;6c5$+%S|p~5 zESCV+MBr)fZFoQYVN z7-qt9fWOO#?qCUd>e}9UYz89RrL6_A!Gnxd&F*8Zk|Y@;{_x!V9BmuSRh#6fVlT1? zZ<$~~^0!L%`gWF|nsbGdP({A}rH6=>aoRj|za>uFdPrS@-hMIxW++fvGMzcpsK$#S zm#N5oIFrJa>SsIi=*O@|7oqm%$&et+QQz-flq6psfKY47*W@cWs%Le>?yJEbrW#hD zN#DQ=1#X@kl4MvwqEqENu8Y4{X_+&T}cQSkrvm9HG(_6;iQBiW3@g+Bs6xDwI zsqyBtSxs!kGXcSd%@LTB2F6FQm5HfHAMAgF<@~o!Ghmiw7b1Bt-e|0h=!8BJCv*X1 zS%G)|spQa@8EZasSyaOT*7^{6Ge9o`X1e4$qG`s4{oVkq)k5`=9Kj)R!x zHHI;v+<~je1*8njpQ~CX-e|R5%tXlDGbJ`wyvM2#O~=bE?wA7_@bJ4w z_-~8|G0sh*V91x2#<)R@Yi&jAm9b)`{=T=kW&4qzTbSq~8;e!M*0{o5WH+jdTijYb z1ucI`A3y(ea(c-AP9`-(xr}QVEa}r^l4L>B5G8adHnqEDNtBQiGaCK|nXyRh_yj-l z_T#1GhS-Rn#dH**Z%2x(aHaf)3sLa~2N^J7LfXCDX~>|L1gPPY^aX3u&2RjYSvEsP z=jPX?aU?A@SrvMiO!tn?bbpO_!>!dMo9@3eH@jBFbe;sSh16P1i>_HonYD_?+^2CR zLpgIsbe+k)``k{Q_M>+9`4O1#gGb-6#~(g=aG!sCe}8@d(Zl;^JpB5>qhIR}9<$St zmT{@|Y-~2UTiwl7JL8IMj;~SxJ2~%;E+b(_?$GtFB!3%{1!J|8WEqTYhF4F^5zY#< zGlw7lh!kQl5MK*zfFKiiG#v-ZbamQx+Sd08}YdlXf=DBvOo* zljB%~j60vG_e7pZZxo4U8J<7aY>${j1z#y5@RRMz@dAaCPy1ZWF6MWw^k*7$kN{Rz zplmuM0R}N=p|}x`BSuMpqTF>-tUzXCL!lSz>}UxBTU27s-80-e|!YE}gX znE#~|RmF5V;?+QdMAqF38;0Amu$jjTtK63fz+$1R&Fk#H$W9iy@Da%&JrcjF6@5zW z7AJZBq#a@oNpeTHZA_4g+r0sj_(lh!0mT?SrmKBDMjDGKgGeGCc4KWPT&@^6>gJx7 zGsVU>pOkxpuBQBU#fzKgCrqZ|80|pT1Z>vJEd18;((m!R(Dk2)LwSOV>e^Jv;m))n z9q2FU;<1v?wp*M>A=Q>v3-WSnqhj2+LY!^$Mhv&?zbQ172*zwdZ4y8uvWR(aDskAy zU@WfllTqf2=R=1)7p@1}E>1~PxIVG@ER=GVPPBSKid^=RP-01W3PwrNn zV+>I|3_!M9?8u?Fckm9QPtG{?^G_ZF@#Xc!@?kCK*O<;OzWlWygrGd(fbiLY-F!oI zz5EU&!P1?}T^h=-TPrZw*gS_8tm5~VlBwU+scQY`2y)YLz;;h@5623I7kMxh*Of0^ zE~7r{4f=G9XN90Iv^vWZERkKWWFcx|U!Q*WYJd+r*|UCoe|)+IP%Gj`g+<@4Hz<^(#0gQ?*b+;s#2ZQGnwK%4eY{-~tLn3iY@@c!{?i45r`YwS6 zjp&Wj1RtynT%IHrArLO>GvrqGgn1b-O^cDNo_6^6;7qj+V<*dcT*Dm1guf+%!6Y* z9q{u4sPwF0;IU4FBUe(gn{w%+Uv1axIP>Z+b5i}T*h-pRq~%=KvhY&3Ijf9gMd{)1Ru zW;@p>zqHe#3%Zy6q&MM~5^Tnpi=RI~OH-|;n99RGWGAQJJx3Zw``4oai}F)1wN$d$RJB#TT<)$^TTiJryvgT$x&1@5yDTMtUxG)G@9-jqId?BbX;`RIs73R1VZNVQ~|b1Y{`0aetGfb9pFxL z|5FNJWfI86JzSeuVHcN-5?gncq(Qu0G+fL#t~}uIOY2R^;JizW24N_(bH$KNN7fpe zJ`%1^k4Aex_LWKnGTu6Gx(#*_nx^vvS=+)Ji~r$`h5f}DnJJQu_l1sH!PATM?l8%L zt`9(0CT#Ll%CFzoykR zR|6y>$!(dL2|2L4Z)or{*tDDkIOa-3FIb73Q0^x-Eh$j_>bl^*iB}BH%G8jAwLLj;#W5c zWE|X?N$=^`Ze;{60v*{7h9cv{2(1gPTsuc3Hh8L}oN6q4Myq}}dPntHX)}c@Sh{?i zlWbFm5AW@Oe{uVgv499`jV*RGxXSJJl_Q8wr73*2xrm6r2>KbYZ2 zARHFi6j%w=ci1*P^|mrsy3%KrG^aPF4mBE@x@UUvpn z$a7Mbv`i-OleGgH#CsquLXL`+wh zYrviJp|}h2D>v&mX$?E=wiPoL`_RW#b~CA^x|^K*M;u|K>`(OBROOg>y?IOK!VS9q zue7Mnc}+s_C-V#4`th@c)%lHAIlT)YJd;<{b=Vf}*}T3(5UgHy5Ns!!vR}Kq?V28C zv0In1v+eeGq6$wRFXCio;&N$ikWg$3&R@24wr{ig?I{tcJiR zS^}O#@d7k!VHM>|@ETo>!W}dKPJO>*K3PAC@g(mdwx)xXMcMN-Y*P=QFobnWRITqk zHVuP+B-gB_kXFNbaoEkNa*XGmB?(%}Neub)7NwVv7J=0ir=5u-7 zwr3=dA|>&pid@=cqM^`J1g2*Sv+=eRV};7XnLqJRT2VYU?cwE30Jo?!~h3KWVe+P0z0wLy~-e|y1nMAdVwnuYd2RfOT2Df5^J))>)pk+ zieY0s06@rZcT*&u*Eelmv<1Hbktk_k?03$^0A2#Ma*IS#8Jcz`&@W*b$qXpusTa9t zgtyZ!3HtgXe(<*iHsV(IttIg`m7tM^K_?vNfgR@C0|*s0m2FM_N_KmJ>oEz$aU5U| z<;+iv=ax@z1*|bwr9U`LiNA7piIhn6_TizMdz~FjO{|RS3V8FW$}L!7+Bhwz;)ylr_wV1sg_he;dEss@dd^ zWb+_5w>K2dAkumq?xIOHb>{&SP7N%gFXtzSq+y?w7%qBDnkR|vqlDLpoba0rrhoE? z_xiOIJ#N%Hz(_oMdPclECkFY)i4Kq-#ljY}plURwbSODLU(o3YaeCO1l8xc=NPd*o zM82jid3Z8fMUSAqnJa_1RB}PeEXepy>WS@|sPKc?hqHg{f*0<`x-{%B8l&^kx_@UFm`ySbBm#YMD6kmD{FsJ{-KeSsHDUywgUYwvfek8OTBE zt#eUta5df1^7q_8=hbp`c~9)B_F?)qyJ*f|o#i=SKHP1=T|7MUa=n-StamyiM#}9b z7abDH)6vW8S1s!dXY5t-)UmvZ%}{eAt@8XOM;|(a51s1|>Vd&9S)7floZ`Lsy=52Y z?AGQZywf@P(7E`~xlCWJ@ecS-;1CPdSHQii+dTiE+Iy+0UpcYUIjg5pbHRE~KDcAS z-I#Ei!gjgdvp7bL3I8y=08pLWQbMgCh0yQTAc?y7b93jBVp@0RR_A-qy0#8vE!h0{ zPoq&c`iU=T&#g<)TwJp@zqP&TzvSP%^6{U!`)?)h#r9iGg;!Ri+L>S6{BUr7wvAu( z?#>J;1|C0s!T6Et@t&S1+W?6O3Ww?)dqxG_K*&FSSCM@Jzq)JB^=;M8vycDG1%-B+ z;!k!Z`>fjGx*aehs#qeM2etk4Fy>kk>fCOUN_X^=nkn9z@U7xk`KRqgvg>^OM;4%Y zA?EMZx>6+g(v*dKsxI=di2w`F{jih{Y^6VRqDo~TcfDJ?ySQa7O6o|xGa)H%^9o-< z`|FF_x>%&?(;h1<`a|AB>AR_>0{&Uu){e0QTkRyY$gYp2P}^wN<`|%P=k1pE5`XdE z9eJ^Hc7D_*J+AeTD^&1}@;fQ1@b`Nsmz`a5a_lK>qmC|yG8pRIDwphB^>^k%1XG*X z7k1}%M%*E~yEBU+@_=W7!Qt=9j$E*ft5+LNLY0HdcNYNS(nJ~) zb{d<>@!WoEGU|xhgSZ{?3#tx(L<8v$e}wzqY>tTRQecr@muOw>iAFkppNhng5I=-+ z!uml_kYS81W6>TD$XLR*CpFh3pSdZ-BMCd_`xn^JPH4;(2xdvBsL|t;7J}dK_V+?` z$<8m=SmDaCST2Gzwq~Et+_?gOhj^U{bW@sq;m{4(<$Xp=O&$t4^S;6HNe;bguX#cC zD}?(i%#41OgGnQ(41@@;t#5U4OtJ7E2aq_q8+jgTSi$>isX2sdI%3jK|Aruyz9QRZ z-(SlL%dqQdG@SDT@oPkLHe9L4@kwTzlq|CGmN?Vl_1lTYL{tvHn9791{0;)=FMekk z-=#0XtxE3&+pwVIcX*@Y!TLw&Z?U;A8S1+YwNJl&teY-k1i2L2b64$7^V_ zrgQ7foyPAf_l*^aEr4M{874quElF5Ei=d0iFG~WT zQ`wm!SUI_Pq@Hi>NRxA_PCRl%Hzu3%tXX7Iaj=&UaVew5Oz^=bJmdj>`KuALce4dL z4IQ1YA*NEJP7lIzL{gjbq1{`_rEBa<>FLRRrP|*c^M0^uZF-aRx8F|h|C z4_{OfUxtLH$clQlcM)kyVlMXk+@(Z5B%Na?7Nu6gCR;MASGAv_a9w2d09<#sa$V$l zSf;g_R32)&7ln1Mz^6P@qb`q@DOcIc@0-7k-`{OlQ?r$dG45ZYb@K?17l>jdM~chS zGu!{knqdmf{T;-ytt)F3Nq<{(@|g?O)=sCJ8St ze7sQJC}gOo|^?^)Gz2{M;{m=9<10|%Xpidt_!@RUL=ZOWY`w&?+cod?{2 z%+;M3p3{b1Cwxg4w*5GHf8(EkFn~V_qLjrvr1x%)GY4a)wrwbGFfu}nT!PA=4HPf? zxKl7(s$P4l(sH#;j&p1=^-sI0nSv{)12+Lr+uYu5l!a#! zVKXiDGg2M!1+Hv2ssD#eohN>}A#=WLIajt!mo^V=;>KViYOOjryYPPMmGx)yD^+Oq zjZ)9f@;*ndgITbWJbWsnHnstbPA4MCj~&Ob_6BzQuQI4fW@hw=&nBDGXgnS5alxn( zC%uumS3Y@Id_g|pXH2AU&}tcP6kUm(OahHZN>$2Q+Mmc~h6i#7JeHpNw`TCM>l@4< zBt0c#rsjO*(_W1eyS*lsP8`Utsu1Xz_C(faoMQGHiZ$NS7}=cti?z9G3n7KcQ+zbC zQ-9=2nWbHpk4cO~vn+8Y3G=5eb&LrcW21ub4^GJuhT4deZ%Hl3D|#|6lv<4@^gg-q zp)iiU*CvD2&p&-hwZE#mE6bhLKFYitMaH=Q7+o?buGQ-}SMcxpf_mlkMmIX;hN`^q zt%`QCbO*;LUrA|>JU4%9ybuDZ;JNjKv9ov?P;B+=^4--r_lO;x8lPm9JfRyhRy7|n z3~iq0V+&0(yG--@{BW3DNV9#GTf`fO*_*lL=I3ND_N&v<5-ImH7n?L7e&S^bTG8?m{Slo4_kufLM zLK*0D(Gh@#w18-ghzn9}`%J-+^d*OU=M%JD(3MncU)d+mP-q(?WDp4e;8X6|NhYOq zIRcr@f)q>T)%Q$NggHTn1JJ&i(!DzkUl zgx|T2;0_FCmc87(dY~Gz1&u5ssfAHgj*$kZl@4ai%LyboOmi3q3$aKjH31-?RUkLX zU*5KhPy%GaYNfkq0avK@zCJADb-t#-hQIb)xsGmw>+b#hlLq?Nkj@DWd}@xRB^W%C z+0e}iCkuI>&`n%`b!oNP#a8=v#YfU`U?Q?K;%%Y(;_SXb<>$iaGYzbz>ArhU6K+oG z3{qB4SEOV^R|*43Yt6PNpDN5rN#qbOz<26rx>YZd*@)((V*LI0;ngNgxeh+MfUC9J zN?A!oTiALWva(ej{z9iKK5~9|#OjP7v&H>V`BRIE;!pB8xc|rHgBsz&>2U{q>~wEv=5>f8)1-J1@&%k( zC`#{%ZVZ09)ce&;O{C=v$s_hI55E1{zDqlso&|v}vXj!DGZJz7>+inpTpT1a*$_Y_ znx_dH6T8b}cw)GM7@;}^xx|jw^sR3h@3=wlhX|SZK9A@gUp}^+N2Y3VZD^22BbwylovWIu4A}Bo)1C0i7FGGk%))c?yDt>@Q})YkAVr& zZq?=x7|ln2IBRibS)Z zWVi0hlv8x8ciL(cfyAEtw><%4@*-zEbh8QVm-x+u4jeR%Wiw}_OM$NS^updD|K4?k zFX@SDAgLnlk~S;%G7FP)PM=rPIFl6^t2TProaB5_HS=l3-*~okQ zY-QW64z#x35Orb0>DxRCjpOHGXF7*f&Qv$SJp*^X97@8{J_Ul8=z|D}P$&D#bHtcz z)j@diTZ8gf5((9pt>wmcIeLStk1vXRU^r=t&r~3k&$6~&cIG}acbM}2R7u|1OJ&@z zor9xj7e&M~K5179w{>fk(-O|-()#A={FXk$t}#|=zkaQJqkQ7vh@3S8Q+%cS%M>S} z0I|u+ILMNY^$^x5kjbjxz?M9}HPLXKaJzQR&r|pqELO>Pr^8LZXM04V`}Q$|&G#=m z#TF20Yb>Vr(r+uHb)-epA#)7a;5+Wnz_Cc+#Wbc_`X)GOuKxA6BnGYsJ$IZSf%-k1 z2wyWvNN>8*Q*%i?>^ay80y4xk`^e3^HB76qB_aU?lmovik5#sHO(Hs{R;^WGXeVQO zX=uudgjtP^=-JmOKCNT2rTh_Zf8{rYSW1d!BH1i2@fZze+C^{`h_bfan?!fZF-2V5 z?VY;2c_{_3Axx9c3tw$<6~TL1rOK9(o*WwiY|nX+*p~7vVTu&zmF~4{z1PeV2D(01 zK~T}X2aHLw7A)7;1rMKWU|B4X3umNnXiFKF^kY_RwyR>@k@ps!EiQ3abkOEj85i_* zR`-ri53r&B_v3L>4Y-OaR!Cj%%U$*3A6*%P z)+fQ-k9Lxf4d9fz<@Z|Q%VBzn2(jbFLbHz!zwZP(f#{8BCJ$EQ65=Fwcd@IRoK`$G zL&e4kwD<08pZxi(pe2e%_`Ist_XnrPd!+4fx9v#iZNxNIT0$1-%I#vsc%%VyeZ0|WXH%I}BZiOV z@AgvWWW129v$4BdCAHGg&JS_3=DaBFj_CBztoFKyCS9CTB&|&fr|=k0onXebh9jB( ztb4;qfA>p~X{kX;D*5IwV_WjT-!FJ!Nt@#Kelk2Tsk6_#i*`40jN|%%$*724tgUcR zEt!0Q?*05PzM_RgwaY;B2vr&~v`SEub8B{$PmS5sJ$SC18Eu79M=vH#MUtt=lr7xL z_Al+DjkTg2nm0_;vpgO$yR1l;6-Uz!MrIG0lQUy|t^%TfJF57SYQUiHuO(S*td}ICX;=t$g|-%Kju-#B42 zq~$al&l?Om=2dof*>A_bQMWHd8fxq1v~n;gT!@-WYOK$tNK5R}dJ?C{6fC6_IKBAs z>ni^EmcSy3MNMi-#i0958{Le_B%gfUMBva>B8J23W82X0eFtVM6HAY8lrLP)ddcFN z!%)qsxdx~5^s#pPB9Sygq%O%|$-VPhdW|#*Ng!7gnHzcM zPoA zmUz;ktOJv=Z`~7QM%){>+?8ImP+0SH?w!ajo?8B)g)b0tiS z^r9oJGtp%aM`GJRAfP_OYJ-VjaUfl^CI6}M2bRS`!Sh$#d2;fO%32rS<;g?tPKt+0 z+aOriGI`6*S+_Y|IpY?{mUB*RKcoYG%hhpM@%!8IH>_Wl6j*z{S0h~25U`SNe4|W) z-{ZZD(F&LoUb%c>zS{yzD!8nCbz4s{B~7Z_J5XNQi6!qwoBwmXl@&r5(Ow5Pn)d>` zUT~~qFWEk0VwvZw_NX?=48zzbG#Dk5T8yGwnv{;1w{?{g|LHI)RLzK)v~x~*-`6E>J%w5RhX?K5#UHVVZ^!Pkw` ztJ&1W%PiTDZ~0Sf2LK%aIud-EOLF2+ne-O28Fo~@Te2W@2Y3Bt<&7;;4o3>0T!JkE zvjhD>)_C!SbeFV9+~queugfnoLq58PS@T8{H1D%uH^=mR3U1aCW6Oq6!P^aqRI`${ zEM^ff<;bpTwTQ2(xzU36H3bdA(9A;VJHgg5*`K;@#YsdQnp_$Ub}KfG)JaqoL}mHj z$vVPThQd3kQhyqDYSNjP<v$3Npsg8ZcfG{U>=HH{!Xsi-2RHmT0h-kBn& zZ?+%m_059hE7*)k>Wa+}Q`RsyMt5090CBF%O_jG-{`PC#7Si;1YvnW-h@+w6>16e` z7MItwZ1fCI2vs0=4UlstW5UhnX+*KW&YSalH##BVXSKm$>fdN7taL3m#M}<6BBn5L z2t?jqJETb@;)2I$9+_y}yq;*TX${Te|G%4ge5Wpb*`2Xg4;FZ~r>AGSy1Fi>PDh@1h>EGBCugr-t-p!F zsiP+^6=(e&XkqbUHzjFWRN^ge+Gk>FUxs4Y&g{-!i)axnWff3_1SMf;bGb%lL^&aD zRkq&S+S}LGfNYcBSUD18B^Q(`Qtcf($x3Of{bac`jr>6L2qQs(ax*on3!@l>@KIo(H$;9+lKJ*sC_ zviK`ogt~;K<1?^Y-Er5NB|c6#TV9QJL@a$nm$7@-w3CJ{7l>U645tG zsCbNSe6t4rw5|P8{Q9{B9oCsl@7tUbD83JfU!c~|K z_S}YDXXIm^D4hNF^5Vn!`1bMg$MbI&M|Z1dE9T~Me9SVi7bXJMVl;cu}g z$_$(M_|TcXoxxi`1nE@D2TB+qAI0vF)U{xdoDT->tNPJ)Xs*$TA70d7^VBSTv0N3P zcE43`uj3jnyl&#!*c!dji__ONvx;x%)|8aMCGbrbcZ=vqAJmrLEs*le@<-|R_B!DM zPPt$YAXs?3Zu+XXDcA1Q$p?0}SpRuUXsJ%XG~G3uDe1Rz6K^L$I7to@HAzy8~9pblVCa@)?_I`4fzyUq^Un$a|z*&2Jsx z8cb%rt7MN<_w%Ub0qf4w=8jC5k|w1oU+EusfJk&i#6Lx&>zl9`ho9D0sAE-T)7{tI zr*^-z1Ynt;jk6F!{9c-^5!2(_(K|(xDkYUiyjo9h`qp$Uvrso%;i{0Ay4pD&-hYi4 zkk5AvVmK2nv%ln{WQl8m6DT8a5ITTw4pV;mDDIwk>o#%8-t_BhP78Hmu+k-NoM`9G zA~i7Cz~&6Sp%?;A`M5$JCOXxTugqW2G3 zn9Iqc^XE@|n7ipkPlo)U2jU56hO~Wu{aA>(hu?EX#N2HsPyc{n%oMU9Cc(8+ZK|PZ z@T_%EP}fQMHPd9{Wur#kQ#*w9us+gaFQuoU_3oAA^Du&alxp{vUA*m6clukLo<3i$ zpFYQ@$L2{&rSb^egM#f0Z@G4}I66J~L1&5VHog z8luAfIsj#569{;3<51)k(S7e7ak@PbRAZ0rs!+O871A1Sn#h-Z?wQ_O{ssdx;=qpE zt6MYr%RT#?Z_$hvUU!o6HK5Mjsx(~3s0?oD2KNRR()}r`S>P9hSpaJJ5|K=0QJJf# ztgP|+w}MvsYUkklpKpl&X*2jmCl*p77~9(v#;^{j?c%&z24)C7t%vzvQ^&@VI{&V$-f474{R27DZir_{i@S?Ct8$38O6|ylR zf@VgjLQQ*Fji`$z)~*s1!={*TrAUZoao~98zqi|eldom?@2>F>-q$R@yJQA@_, 2010-2013, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-04 14:00+0100\n" +"Last-Translator: Mario Blättermann \n" +"Language-Team: German \n" +"Language: de_CH\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.11\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "Geschwindigkeit des seriellen Ports wird nicht unterstützt" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "Parität des seriellen Ports wird nicht unterstützt" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "Anzahl der Stop-Bits des seriellen Ports wird nicht unterstützt" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "Wortlänge des seriellen Ports wird nicht unterstützt" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Keine Host-Tabellen spezifiziert durch kommagetrennte Liste laden." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Nur Tabellen spezifiziert durch kommagetrennte Liste laden." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Version-1-Tabellen zum Betriebssystem exportieren." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Version-2- und Version-3-Tabellen zum Betriebssystem exportieren." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "OEMID von RSDP, XSDT und RSDT festlegen." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "OEMTABLE-ID von RSDP, XSDT and RSDT festlegen." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "OEMTABLE-Revision von RSDP, XSDT und RSDT festlegen." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Ersteller-Feld von RSDP, XSDT und RSDT festlegen." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Ersteller-Revision von RSDP, XSDT und RSDT festlegen." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"EBDA nicht aktualisieren. Könnte Fehler oder Hänger in manchen BIOS-" +"Versionen beseitigen, ist aber nicht effektiv bei Betriebssystemen, die kein " +"RSDP von GRUB empfangen. " + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "Unerwartetes Ende der Datei %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABELLE1,TABELLE2|--load-only=TABELLE1,TABELLE2] DATEI1 " +"[DATEI2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Host-ACPI-Tabellen und durch Argumente angegebene Tabellen laden." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "Fehler: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "Hauptspeicher erschöpft" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "«%s» ist nicht lesbar: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI-Herunterfahren ist gescheitert" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Geräte auflisten." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "Dateiname wurde erwartet" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "DATEI" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Eine Blockliste ausgeben." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "Sie müssen zuerst den Kernel laden" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Ein Betriebssystem starten." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Keine Statistiken für Boot-Zeiten verfügbar\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Statistiken für Boot-Zeiten erstellen." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statistiken des Plattenzwischenspeichers: Hits = %lu (%lu.%02lu%%), Misses = " +"%lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Keine Statistiken zum Paket-Zwischenspeicher verfügbar\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Informationen zum Platten-Zwischenspeicher holen." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "CR/NL-Zeilenenden im DOS-Stil akzeptieren." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Inhalt einer Datei anzeigen." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "Zwei Argumente wurden erwartet" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Datei «%s» mit «%s» vergleichen:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Dateigrössen sind unterschiedlich: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Dateien unterscheiden sich an Position %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Die Dateien sind identisch.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "DATEI1 DATEI2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Zwei Dateien vergleichen." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Eine andere Konfigurationsdatei laden." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Eine andere Konfigurationsdatei laden, ohne den Kontext zu ändern." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Eine andere Konfigurationsdatei laden, ohne den Kontext zu ändern. Es werden " +"nur Menüeinträge geladen." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Eine andere Konfigurationsdatei laden, aber nur deren Menüeinträge." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[Jahr-]Monat-Tag] [Stunde:Minute[:Sekunde]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Anzeigen/Festlegen des/der aktuellen Datums/Zeit." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Angehängte Zeilenumbrüche nicht ausgeben." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Auswertung der Backslash-Maskierungen ermöglichen." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] ZEICHENKETTE" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Eine Textzeile anzeigen." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "In das Firmware-Konfigurationsmenü neu starten." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Ein Videoproblem beheben." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM-Abbild ist vorhanden." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "ROM-Bereich kann nicht aktiviert werden." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"BIOS-Strukturen für Abwärtskompatibilität mit dem vorhandenen Betriebssystem " +"erstellen." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_SICHERUNG [INT10_SICHERUNG]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "BIOS-Sicherung laden." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "ZEICHENKETTE ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Argumente als GRUB-Befehle auffassen" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Überprüfen, ob DATEI als unprivilegierter i386-PAE-Xen-Gast-Kernel gebootet " +"werden kann" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Überprüfen, ob DATEI als unprivilegierter x86_64-Xen-Gast-Kernel gebootet " +"werden kann" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Überprüfen, ob DATEI als unprivilegierter x86-Xen-Gast-Kernel gebootet " +"werden kann" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Überprüfen, ob DATEI als x86-Multiboot-Kernel gebootet werden kann" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Überprüfen, ob DATEI als x86-Multiboot2-Kernel gebootet werden kann" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Überpüfen, ob DATEI ARM-Linux ist" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Überpüfen, ob DATEI ARM64-Linux ist" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Überpüfen, ob DATEI IA64-Linux ist" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Überpüfen, ob DATEI MIPS-Linux ist" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Überpüfen, ob DATEI MIPSEL-Linux ist" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Überpüfen, ob DATEI SPARC64-Linux ist" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Überpüfen, ob DATEI POWERPC-Linux ist" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Überpüfen, ob DATEI x86-Linux ist" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Überpüfen, ob DATEI x86-Linux mit 32-Bit-Protokollunterstützung ist" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Überpüfen, ob DATEI x86-kFreeBSD ist" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Überpüfen, ob DATEI i386-kFreeBSD ist" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Überpüfen, ob DATEI x86_64-kFreeBSD ist" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Überpüfen, ob DATEI x86-kNetBSD ist" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Überpüfen, ob DATEI i386-kNetBSD ist" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Überpüfen, ob DATEI x86_64-kNetBSD ist" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Überpüfen, ob DATEI eine i386-EFI-Datei ist" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Überpüfen, ob DATEI eine i386-EFI-Datei ist" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Überpüfen, ob DATEI eine IA64-EFI-Datei ist" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Überpüfen, ob DATEI eine ARM64-EFI-Datei ist" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Überpüfen, ob DATEI eine ARM-EFI-Datei ist" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Überpüfen, ob DATEI hiberfil.sys im Ruhezustand ist (hibernated)" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Überpüfen, ob DATEI x86_64-XNU ist (Mac-OSX-Kernel)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Überpüfen, ob DATEI XNU ist (Mac-OSX-Kernel)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Überpüfen, ob DATEI ein XNU-Ruhezustand-Abbild ist (Mac-OSX-Kernel)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Überpüfen, ob DATEI ein BIOS-Bootsektor ist" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "Falsch" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPTIONEN DATEI" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Überprüfen, ob DATEI den angegebenen Typ hat." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "Keine solche Partition" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Neuer MBR wurde nach «%s» geschrieben\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "GERÄT [PARTITION[+/-[TYP]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Hybrid-MBR des GPT-Gerätes GERÄT füllen. Angegebene Partitionen werden Teil " +"des Hybrid-MBR. Bis zu 3 Partitionen sind zulässig. TYP ist ein MBR-Typ. + " +"bedeutet, dass die Partition aktiv ist. Nur eine Partition kann aktiv sein." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Diesen Computer anhalten. Dieser Befehl funktioniert nicht in allen Firmware-" +"Implementationen." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Zu verwendenden Hash angeben." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Prüfsummen der Dateien mit Liste in DATEI vergleichen." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Basisverzeichnis für Hash-Liste." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "VERZ" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Nach dem ersten Fehler nicht stoppen." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Datei entpacken, bevor Prüfsumme ermittelt wird." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LESEFEHLER\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HASH-FEHLER\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c DATEI [-p PRÄFIX]] [DATEI1 [DATEI2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Hash-Prüfsumme berechnen oder prüfen." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c DATEI [-p PRÄFIX]] [DATEI1 [DATEI2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Erweiterte Energieverwaltung setzen\n" +"(1=niedrig, ..., 254=hoch, 255=aus)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Energiemodus anzeigen." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "ATA-Sicherheitseinstellungen bis zum Zurücksetzen einfrieren." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Laufwerksstatus mit SMART anzeigen." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Automatische Klangverwaltung festlegen\n" +"(0=aus, 128=leise, ..., 254=schnell)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Wartezeit bis Standby festlegen\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Laufwerk in den Standby-Modus versetzen." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Laufwerk in den Schlafmodus versetzen." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Identität und Einstellungen des Laufwerks ausgeben." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Roh-Inhalt des ATA IDENTIFY-Sektors anzeigen." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART aktivieren/deaktivieren (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Keine Meldungen ausgeben." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "Ein Argument wurde erwartet" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIONEN] DATENTRÄGER" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA-Datenträgerparameter ermitteln/festlegen." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Aufruf:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MUSTER ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Eine Hilfemeldung anzeigen." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Offset-Bytes am Beginn der Datei überspringen." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Nur Bytes der Länge LENGTH lesen." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIONEN] DATEI_ODER_GERÄT" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Roh-Inhalt einer Datei oder des Speichers anzeigen." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Roh-Inhalt des CMOS anzeigen." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Bit bei BYTE:BIT im CMOS testen." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Bit bei BYTE:BIT im CMOS leeren." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Bit bei BYTE:BIT im CMOS setzen." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Bootzeit-Statistiken für Coreboot anzeigen." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Coreboot-Tabellen auflisten." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Überprüfen, ob der Prozessor den 64-Bit-(Lang-)Modus unterstützt (Vorgabe)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Überprüfen, ob der Prozessor die physikalische Adresserweiterung unterstützt." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Fähigkeiten der CPU überprüfen." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Alle aktuellen Zuordnungen anzeigen." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Alle Zuordnungen auf Standardwerte zurücksetzen." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Sowohl direkte als auch umgekehrte Zuordnungen ausführen." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Es wurden keine Laufwerke neu zugeordnet" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS Laufwerk #Num ------> GRUB/BIOS-Gerät" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "BIOS-Laufwerkszuordnungen verwalten." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Zum Abschalten des Rechners kein APM verwenden." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Das System anhalten, wenn möglich, mit APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "Kein APM gefunden" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Geschütze 16-bit-Schnittstelle unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Geschütze 16-bit-Schnittstelle nicht unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Geschütze 32-bit-Schnittstelle unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Geschütze 32-bit-Schnittstelle nicht unterstützt\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU-Leerlauf verlangsamt den Prozessor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU-Leerlauf verlangsamt den Prozessor nicht\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM deaktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM aktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM deaktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM aktiviert\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "APM-Informationen anzeigen." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "Dateiname oder Tempo und Noten erwartet" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Ungültiges Tempo in %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "Datei «%s» nicht gefunden" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "Zahl nicht erkannt" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "DATEI | TEMPO [TONHÖHE1 DAUER1] [TONHÖHE2 DAUER2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Einen Klang abspielen." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "Numlock-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "Feststelltasten-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "Scrolllock-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "Einfügen-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "Pause-Modus festlegen" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "Linke Umschalttaste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "Rechte Umschalttaste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "SysRq-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "NumLock-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "CapsLock-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "ScrollLock-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "Insert-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "Linke Alt-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "Rechte Alt-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "Linke Ctrl-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "Rechte Ctrl-Taste drücken" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "LED-Status nicht aktualisieren" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KÜRZEL1] [KÜRZEL2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Eine Tastatursequenz emulieren" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Geben Sie «go» ein, um GRUB fortzusetzen." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Zum IEEE1275-Prompt zurückkehren." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Gelesenen Wert in Variable VARNAME speichern." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "8-bit-Wert von PORT lesen." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "16-bit-Wert von PORT lesen." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "32-bit-Wert von PORT lesen." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT WERT [MASKE]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "8-bit-Wert nach PORT schreiben." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "16-bit-Wert nach PORT schreiben." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR WERT [MASKE]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "32-bit-Wert nach PORT schreiben." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "Variable «%s» ist nicht gesetzt" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Eine Tastaturbelegung laden." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Umschalttaste überprüfen." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Ctrl-Taste überprüfen." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Alt-Taste überprüfen." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Status der Umschalttasten überprüfen." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "Befehl «%s» konnte nicht gefunden werden" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Passwort eingeben:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Alte Konfiguration im gleichen Kontext laden" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Alte Konfiguration im neuen Kontext laden" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Alte Konfiguration im gleichen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Alte Konfiguration im neuen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYP] DATEI [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "«kernel»-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "DATEI [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "«initrd»-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "«modulenounzip»-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSWORT [DATEI]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "«password»-Befehl wie in grub-legacy simulieren" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "«password»-Befehl von grub-legacy im Menüeintragsmodus simulieren" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Dateiname angeben." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Die Signaturüberprüfung der Umgebungsdatei überspringen." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f DATEI] [-s|--skip-sig] [Zu_überspringender_Variablenname] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Variablen aus Blockdatei der Umgebung laden." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f DATEI]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Variablen aus Blockdatei der Umgebung auflisten." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f DATEI] Variablenname [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Variablen in die Blockdatei speichern." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Lange Liste mit ausführlicheren Informationen anzeigen." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Grössenwerte in menschenlesbarem Format ausgeben." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Alle Dateien auflisten." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Netzwerkprotokolle:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [DATEI …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Geräte und Dateien auflisten." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Nur Version-1-Tabellen darstellen." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Nur Version-2- und Version-3-Tabellen anzeigen." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "ACPI-Informationen anzeigen." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "verfügbarer RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "reservierter RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "Durch ACPI wiederverwendbarer Speicher" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "Durch ACPI beanspruchter Speicherbereich (für Energiesparmodi)" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "Fehlerhafter RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "Persistenter RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "Persistenter RAM (veraltet)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM enthält Coreboot-Tabellen" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM enthält Firmware-Code" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, Länge = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, Länge = 0x%llx, Typ = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Von Firmware bereitgestellte Speicherzuordnung auflisten." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCI-Geräte auflisten." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "8-bit-Wert aus ADDR lesen." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "16-bit-Wert aus ADDR lesen." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "32-bit-Wert aus ADDR lesen." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "8-bit-Wert nach ADDR schreiben." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "16-bit-Wert nach ADDR schreiben." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "32-bit-Wert nach ADDR schreiben." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Typ des Menüeintrags." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "ZEICHENKETTE" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Liste der Benutzer, die diesen Eintrag booten dürfen." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "BENUTZERNAME[,BENUTZERNAME]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tastenzuordnung für den Schnellstart dieses Eintrags." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TASTE" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "ZEICHENKETTE als Inhalt des Menüeintrags verwenden." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Bezeichner des Menüeintrags." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Dieser Eintrag kann von jedem Benutzer gebootet werden." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Einen Menüeintrag definieren." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Ein Untermenü definieren." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Name\tReferenzzähler\tAbhängigkeiten\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Diese Meldung anzeigen." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADRESSE [GRÖssE]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Inhalt des Speichers anzeigen." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Ein Modul entfernen." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Geladene Module anzeigen." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "GRUB beenden." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Kein CS5536 gefunden" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 in %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"Ein-/Ausgabebereich des Systemverwaltungsbus-Controllers ist bei 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM-Slotnummer %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Geschriebene SPD-Bytes: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Flash-Gesamtgrösse: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Speichertyp: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Teil-Nummer: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Speichertyp: Unbekannt." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Speicher-Informationen anzeigen." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s unterstützt keine UUIDs" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Zu nativen Festplattentreibern wechseln. Falls keine Module angegeben " +"werden, wird die Vorgabe verwendet (pata,ahci,usbms,ohci,uhci,ehci)." + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"BEFEHLE auf Partition ausführen.\n" +"Rufen Sie «parttool PARTITION help» auf, um eine\n" +"Liste der verfügbaren Befehle zu erhalten." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=WERT" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Für %s ist leider kein Partitionierungswerkzeug verfügbar\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "Unbekanntes Argument «%s»" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITION BEFEHLE" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "BENUTZERPASSWORT" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Benutzerpasswort (Klartext) festlegen. Nicht empfohlen, da unsicher." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "Ungültiges PBKDF2-Passwort" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "BENUTZER PBKDF2_PASSWORT" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Benutzerpasswort festlegen (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Gerät nach Anbieter und Gerätekennungen auswählen." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[Anbieter]:[Gerät]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Gerät nach dessen Position auf dem Bus auswählen." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "Symbol «%c» fehlt" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSITION] [-d GERÄT]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Roh-Ausgabe des PCI-Konfigurationsraums anzeigen." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Eine Variable auf den Rückgabewert setzen." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Treiber ermitteln." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Typ der Partitionszuordnung bestimmen." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Dateisystemtyp ermitteln." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Dateisystem-UUID ermitteln." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Dateisystembezeichnung ermitteln." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "Dateisystem «%s» unterstützt keine Labels" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "GERÄT" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Info zum Gerät holen." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Variable durch Benutzereingabe setzen." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Den Computer neu starten." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Entsprechende Komponenten-NUMMER in VARNAME speichern." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[ZAHL:]VARNAME" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP ZEICHENKETTE" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Prüfen, ob REGEXP auf ZEICHENKETTE passt." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAME [VARIABLE] [HINTWEISE]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Anhand von Dateien nach Geräten suchen. Falls VARIABLE angegeben wird, dann " +"wird das erste gefundene Gerät zum Setzen der Variable verwendet." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Anhand von Bezeichnungen nach Geräten suchen. Falls VARIABLE angegeben wird, " +"dann wird das erste gefundene Gerät zum Setzen der Variable verwendet." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Anhand von UUIDs nach Geräten suchen. Falls VARIABLE angegeben wird, dann " +"wird das erste gefundene Gerät zum Setzen der Variable verwendet." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Geräte nach Datei durchsuchen." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Geräte nach Dateisystembezeichnung durchsuchen." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Geräte nach Dateisystem-UUID durchsuchen." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Eine Variable auf das erste gefundene Gerät setzen." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Kein Diskettenlaufwerk überprüfen." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen. Falls HINWEIS mit Komma endet, auch " +"Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINWEIS" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen (bei IEEE1275). Falls HINWEIS mit Komma " +"endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen (für aktuell laufendes BIOS). Falls " +"HINWEIS mit Komma endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen, falls direkter Hardwarezugriff " +"unterstützt wird. Falls HINWEIS mit Komma endet, auch Unterpartitionen " +"versuchen" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen (für aktuell laufendes EFI). Falls " +"HINWEIS mit Komma endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Zuerst das Gerät HINWEIS versuchen, falls aktuell laufende ARC. Falls " +"HINWEIS mit Komma endet, auch Unterpartitionen versuchen" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINWEIS [--hint HINT] ...] NAME" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Anhand von Dateien, Dateisystembezeichnungen oder Dateisystem-UUIDs nach " +"Geräten suchen. Falls --set angegeben wird, dann wird das erste gefundene " +"Gerät zum Setzen der Variable verwendet. Falls keine Variable angegeben " +"wird, dann wird «root» verwendet" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x von %x:%02x.%x ist %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d GERÄT] [-v VAR] REGISTER[=WERT[:MASKE]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "PCI-Geräte bearbeiten." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Ausführlicher Countdown." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Unterbrechung mit ESC erlauben." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ANZAHL_DER_SEKUNDEN" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Die angegebene Anzahl an Sekunden warten." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "Wurzelverzeichnis der Syslinux-Disk [Vorgabe=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"Aktuelles Verzeichnis für Syslinux [Vorgabe ist das übergeordnete " +"Verzeichnis der Eingabedatei]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "Eingabe als Isolinux-Konfigurationsdatei auffassen." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "Eingabe als Pxelinux-Konfigurationsdatei auffassen." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "Eingabe als Syslinux-Konfigurationsdatei auffassen." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Syslinux-Konfiguration im gleichen Kontext laden" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Syslinux-Konfiguration im neuen Kontext laden" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Syslinux-Konfiguration im gleichen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Syslinux-Konfiguration im neuen Kontext laden, nur Menüeinträge" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "Kein Terminal angegeben" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "Terminal «%s» wurde nicht gefunden" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktive Eingabeterminals:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Verfügbare Eingabeterminals:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktive Ausgabeterminals:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Verfügbare Ausgabeterminals:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Eingabeterminal listen oder wählen." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Ausgabeterminal listen oder wählen." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "AUSDRUCK ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Einen Ausdruck auswerten." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "AUSDRUCK" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Gleiche Datei mehrfach laden." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Grösse für jeden Lesevorgang angeben" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "Ungültige Blockgrösse" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Dateigrösse: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Verstrichene Zeit: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Geschwindigkeit: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s GRÖssE] DATEINAME" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Dateilesegeschwindigkeit testen." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "Kein Befehl angegeben" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Verstrichene Zeit: %d.%03d Sekunden \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "BEFEHL [ARGUMENTE]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Von BEFEHL benötigte Zeit messen" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "In Grossschreibung umwandeln." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "In Kleinschreibung umwandeln." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPTIONEN] [MENGE1] [MENGE2] [ZEICHENKETTE]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Zeichen der MENGE1 in Zeichen der MENGE2 in ZEICHENKETTE übersetzen." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Nichts tun, erfolgreich." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Nichts tun, nicht erfolgreich." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USB-Unterstützung überprüfen." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Die Signaturüberprüfung der öffentlichen Schlüsseldatei überspringen." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "Falsche Signatur" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "Öffentlicher Schlüssel %08x wurde nicht gefunden" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "Modul «%s» ist nicht geladen" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] DATEI SIGNATURDATEI [SCHLÜSSELDATEI]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Angehängte Signatur überprüfen." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] SCHLÜSSEL_DATEI" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "SCHLÜSSEL_DATEI zu vertrauenswürdigen Schlüsseln hinzufügen." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Vertrauenswürdige Schlüssel auflisten." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "SCHLÜSSEL_ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "SCHLÜSSEL_ID aus den vertrauenswürdigen Schlüsseln entfernen." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Nur Text" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Direkte Farbe, Maske: %d/%d/%d/%d Pos.: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Palettiert " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Schwarzweiss " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Unbekannter Videomodus" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDID-Prüfsumme ist ungültig" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID-Version: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Bevorzugter Modus: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Kein bevorzugter Modus verfügbar\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "Ungültige Angabe «%s» des Grafikmodus" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Liste der unterstützten Videomodi:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legende: Maske/Position=Rot/Grün/Blau/Reserviert" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter «%s»:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Keine Informationen verfügbar" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Grafikadapter konnte nicht initialisiert werden" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[BxH[xT]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Verfügbare Grafikmodi auflisten. Falls Auflösung angegeben ist, nur Modi " +"dieser Auflösung anzeigen." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[BxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Das Video-Subsystem im Modus BxH überprüfen." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Das Video-Subsystem überprüfen." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[VERZ]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Xen-Speicherung auflisten." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VARNAME]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"64-bit-UUID in ein von XNU verarbeitbares Format umwandeln. Falls -l " +"angegeben ist, bitte Kleinschreibung beibehalten (wie von blkid)" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "Lesen des Sektors 0x%llx von «%s» ist fehlgeschlagen" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "Schreiben des Sektors 0x%llx nach «%s» ist fehlgeschlagen" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Nach UUID einhängen." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Alles einhängen." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Alle Datenträger einhängen, für die das «boot»-Flag gesetzt ist." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "«%s» kann nicht geöffnet werden: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "«%s» kann nicht durchsucht werden: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "QUELLE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Ein verschlüsseltes Gerät einhängen." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Physischer Datenträger «%s» konnte nicht gefunden werden. Einige Module " +"könnten im Core-Abbild fehlen." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "Physischer Datenträger %s wurde nicht gefunden" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "Kein Medium in «%s»" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "sha256 konnte nicht geladen werden" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "sha512 konnte nicht geladen werden" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "ELI-Metadaten konnten nicht gelesen werden" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "Falsches ELI-Magic oder -Version" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Es wird versucht, den Master-Schlüssel zu entschlüsseln …" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Kennwort für %s%s%s angeben (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Slot %d geöffnet\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "Versuch, ausserhalb der Platte «%s» zu lesen und zu schreiben" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "Auf CD-ROM kann nicht geschrieben werden" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Native Festplattentreiber werden verwendet. Nutzung der Firmware-" +"Schnittstelle wird verweigert." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"Die LDM-Einbettungspartition ist zu klein, Einbettung würde unmöglich sein" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"Dieses LDM hat keine Einbettungspartition, Einbettung würde unmöglich sein" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Das angegebene Loopback-Gerät löschen." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] GERÄTENAME DATEI." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Ein virtuelles Gerät aus einer Datei erstellen." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "Neuzuweisung 0x%x ist noch nicht implementiert" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "Keine Symboltabelle" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "Diese ELF-Datei ist vom falschen Typ" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "EFI-Emulator laden und initialisieren." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Laden des EFI-Emulators finalisieren." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "EFI-Umgebung entladen." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "Symbol «%s» nicht gefunden" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Geladene Schriften" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "DATEI…" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Eine oder mehrere zu ladende Schriftdateien angeben." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Die geladenen Schriften auflisten." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "Zu tief verschachtelte symbolische Verknüpfungen" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "Versuch, hinter dem Ende der Datei zu lesen" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"Teilgerät eines über mehrere Geräte verteilten Dateisystems konnte nicht " +"gefunden werden" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "Ist kein Verzeichnis" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "Keine reguläre Datei" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"Ihre Datei core.img ist ungewöhnlich gross. Sie würde nicht in den " +"Einbettungsbereich passen." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "Ungültiger Dateiname «%s»" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "Prüfsummenvergleich ist gescheitert" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "Kein Schlüssel verfügbar" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC-Überprüfung ist gescheitert" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Eingabe wird als Raw angenommen." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Eingabe wird als hexadezimal angenommen." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Eingabe wird als Kennwort angenommen." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "ZFS-Passwort eingeben:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [DATEI]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "In DATEI gespeicherten ZFS-Wrapping-Schlüssel importieren" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtuelles Gerät wurde entfernt" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtuelles Gerät ist gescheitert" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtuelles Gerät ist offline" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtuelles Gerät ist nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtuelles Gerät ist online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Inkorrektes virtuelles Gerät: kein Typ verfügbar" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Virtuelles Gerät durchsuchen (Datei oder Laufwerk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Boot-Pfad: nicht verfügbar\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Boot-Pfad: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Pfad: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Pfad: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Gerätekennung: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Gerätekennung: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Dieses VDEV ist ein Spiegel" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Dieses VDEV ist ein RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Ungültiges VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV mit %d Kindelementen\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV-Elementnummer %d ist nicht korrekt\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV-Elementnummer %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Typ des virtuellen Gerätes ist unbekannt: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Pool-Status: aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Pool-Status: exportiert" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Pool-Status: zerstört" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Pool-Status: für Hotspare reserviert" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Pool-Status: ARC-Gerät, Level 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Pool-Status: nicht initialisiert" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Pool-Status: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Pool-Status: potenziell aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Pool-Name: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Pool-Name: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Pool-GUID: nicht verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Pool-GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Pool-Status konnte nicht ermittelt werden" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Pool-Status nicht erkannt" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Kein Baum virtueller Geräte verfügbar" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "ZFS-Info zu GERÄT ausgeben." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "DATEISYSTEM [VARIABLE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "ZFS-BOOTFSOBJ ausgeben oder als VARIABLE setzen" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Bitte verbinden Sie nun einen entfernten Debugger." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "GDB-Stub auf dem angegebenen Port starten" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Haltepunkt für GDB auslösen" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "GDB-Stub stoppen" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "Vorzeitiges Ende der Datei" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Übersetzt die Zeichenkette anhand den aktuellen Einstellungen." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"«Enter» zum Booten des markierten Betriebssystems, «e» zum Bearbeiten der " +"Befehle vor dem Booten oder «c» für eine Befehlszeile. Mit «ESC» kehren Sie " +"zum vorherigen Menü zurück." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"«Enter» zum Booten des markierten Betriebssystems, «e» zum Bearbeiten der " +"Befehle vor dem Booten oder «c» für eine Befehlszeile." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "Enter: Booten, «e»: Optionen, «c»: Befehlszeile" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Der hervorgehobene Eintrag wird automatisch in %ds ausgeführt." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds verbleibend." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB-Bootmenü" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: Wert %s ist kleiner oder gleich %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Parameter für ARGP_HELP_FMT benötigt einen Wert" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Parameter für ARGP_HELP_FMT muss positiv sein" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Unbekannter Parameter für ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Unsinn in ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Erforderliche oder optionale Argumente für lange Optionen sind ebenso " +"erforderlich bzw. optional für die entsprechenden Kurzoptionen." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " oder: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPTIONEN …]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Rufen Sie «%s --help» oder «%s --usage» auf, um weitere Informationen zu " +"erhalten.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Berichten Sie Fehler an %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Unbekannter Systemfehler" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "Diese Hilfe anzeigen" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "Eine kurze Hilfemeldung ausgeben" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "Programmname festlegen" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEK" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "für SEK Sekunden hängenbleiben (Voreinst.: 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "Programmversion ausgeben" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMMFEHLER) Keine Version bekannt!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Zu viele Argumente\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMMFEHLER) Option hätte erkannt werden müssen!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: Option «%s» ist mehrdeutig; Möglichkeiten:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: Option «--%s» erlaubt kein Argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: Option «%c%s» erlaubt kein Argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: Option «%s» erwartet ein Argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: Unbekannte Option «--%s»\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: Unbekannte Option «%c%s»\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: Ungültige Option -- «%c»\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: Option erfordert ein Argument -- «%c»\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: Option «-W %s» ist nicht eindeutig\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: Option «-W %s» erlaubt kein Argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: Option «-W %s» erfordert ein Argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Erfolg" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Keine Übereinstimmung" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ungültiger regulärer Ausdruck" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ungültiges Sortierzeichen" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ungültiger Zeichenklassenname" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Angehängter Backslash" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ungültige Rückreferenz" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Kein Gegenstück für [ oder [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Kein Gegenstück für ( oder \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Kein Gegenstück für \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ungültiger Inhalt von \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ungültiges Bereichsende" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Speicher ausgeschöpft" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ungültiger vorhergehender regulärer Ausdruck" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Vorzeitiges Ende des regulären Ausdrucks" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regulärer Ausdruck ist zu gross" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Nicht übereinstimmende ) oder \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "Unbekannter regexp-Fehler" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Kein vorhergehender regulärer Ausdruck" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hallo Welt" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "«Hallo Welt» ausgeben." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "Versuch, ausserhalb der Datei zu suchen" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "Nicht unterstütztes gzip-Format" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop-Datei ist beschädigt" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz-Datei ist beschädigt oder Blockoptionen werden nicht unterstützt" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "Ungültiges ELF-Magic (architekturabhängig)" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[UMGVAR=WERT]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Eine Umgebungsvariable festlegen." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "UMGVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Eine Umgebungsvariable löschen." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Geräte oder Dateien auflisten." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Ein Modul einfügen." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "Laufwerk «%s» wurde nicht gefunden." + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "Versuch, ausserhalb der Partition zu lesen oder zu schreiben" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "Ungültiges ELF-Magic (architekturunabhängig)" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "Geräteanzahl übersteigt die Grenzen" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "Auf «%s» kann nicht geschrieben werden: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"Der device.map-Eintrag «%s» ist ungültig, wird ignoriert. Bitte korrigieren " +"oder löschen Sie Ihre device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"Der Laufwerksname «%s» in device.map ist inkorrekt. %s wird stattdessen " +"verwendet. Bitte verwenden Sie die Form [hfc]d[0-9]* (z.B. «hd0» oder «cd»)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "«%s» kann nicht geöffnet werden: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "GERÄTENAME" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Root-Gerät festlegen." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "DATEI als Gerätezuordnung verwenden [Vorgabe=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "DATEI als Memdisk-Abbild verwenden" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "GRUB-Dateien im Verzeichnis VERZ verwenden [Vorgabe=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "Ausführliche Meldungen ausgeben." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "Warten, bis ein Debugger einklinkt" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Unbekanntes zusätzliches Argument «%s»." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-Emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Fehler beim Einlesen der Befehlszeilenargumente\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Rufen Sie «gdb %s %d» auf und setzen Sie ARGS.HOLD auf Null.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: Warnung:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: Info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: Fehler:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "Datei «%s» ist zu gross" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "Unbekanntes Dateisystem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Herunterfahren ist gescheitert" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Beenden ist gescheitert" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "Überlauf wurde erkannt" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Unsauber eingebettete Partition wird verworfen (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Unbekannter Befehl «%s».\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Diese Hilfe anzeigen und beenden." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Benutzung dieses Befehls anzeigen und beenden." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "Obligatorische Option für «%s» fehlt" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "Das Argument «%s» benötigt eine Ganzzahl" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "Ein Argument wurde «%s» zugeordnet, obwohl es kein Argument erwartet" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Backtrace ausgeben." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB weiss nicht, wie man diese Maschine stoppen kann!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Vorgegebener Server ist ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "Ungültige Angabe der Farbe «%s»" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Neu starten ist gescheitert" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LÄNGE]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Hexdump-Zufallsdaten." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "Gerätebaum muss angegeben werden (siehe Befehl «devicetree»)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "Ungültiges zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "Ungültiger Gerätebaum" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Linux laden." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "initrd laden." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "DTB-Datei laden." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "Beziehen des FDT fehlgeschlagen" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "Sie müssen zuerst den Xen-Hypervisor laden" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Einen Xen-Hypervisor laden." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Ein Xen-Modul laden." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTIONEN]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "BIOS-basiertes System booten." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Einen anderen Bootloader laden." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Ausgabe auf allen Konsolen anzeigen." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Serielle Konsole verwenden." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Nach dem Dateinamen für den Neustart fragen." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "CDROM als Root-Gerät verwenden." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Routing der Benutzerkonfiguration aufrufen." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "KDB beim Booten verwenden." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Entfernte GDB-Fehlerdiagnose anstatt DDB verwenden." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Alle Boot-Ausgaben deaktivieren." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Nach jeder ausgegebenen Zeile auf Tastendruck warten." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Einkompiliertes Root-Gerät verwenden." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "In den Single-User-Modus booten." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Mit ausführlichen Meldungen booten." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Nicht neu starten, nur herunterfahren." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Konfigurierte Geräte bearbeiten." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,GESCHW]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMP deaktivieren." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPI deaktivieren." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Keine Fehlerdiagnosemeldungen beim Booten anzeigen." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Mit Fehlerdiagnosemeldungen booten." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Normale Ausgaben unterdrücken (Warnungen verbleiben)" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADR|comUNIT][,GESCHW]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "Name" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "Typ" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "Adresse" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "Grösse" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Im Blindmodus booten" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Kernel von FreeBSD laden." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Kernel von OpenBSD laden." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Kernel von NetBSD laden." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "FreeBSD-Umgebung laden." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "FreeBSD-Kernelmodul laden." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "NetBSD-Kernelmodul laden." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "NetBSD-Kernelmodul laden (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "FreeBSD-Kernelmodul laden (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Ramdisk von kOpenBSD laden." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Weiteres Coreboot-Payload laden" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Veralteter Parameter «%s» wird nicht mehr unterstützt." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s ist veraltet. Verwenden Sie stattdessen gfxpayload=%s vor dem Linux-" +"Befehl.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s ist veraltet. VGA-Modus %d wurde nicht erkannt. Verwenden Sie stattdessen " +"gfxpayload=BREITExHÖHE[xTIEFE] vor dem Linux-Befehl.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] GERÄT" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "«%s» ist zu gross" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "FreeDOS-kernel.sys laden." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "NTLDR oder BootMGR laden." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Die geschätzte Zuordnung von Plan9-Geräten überschreiben." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUB-GERÄT=PLAN9-GERÄT" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGUMENTE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Plan9-Kernel laden." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Ein PXE-Abbild laden." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Truecrypt-ISO laden." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd ist bereits geladen" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Modul laden." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Drücken Sie eine beliebige Taste, um xnu zu starten" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Inhalt von «device-properties» laden" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "FPSWA-Treiber konnte nicht gefunden werden" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Das FPSWA-Protokoll war nicht imstande, die Schnittstelle zu finden" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Kein FPSWA gefunden" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA-Revision: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "DATEI [ARGUMENTE …]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "FPSWA-Version anzeigen." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "WARNUNG: Im Betriebssystem wird keine Konsole verfügbar sein" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Einen Multiboot2-Kernel laden." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Ein Multiboot2-Modul laden." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Einen Multiboot-Kernel laden." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Ein Multiboot-Modul laden." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Modus des Hintergrundbildes." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(=ZOOM)|normal(=NORMAL)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "XNU-Abbild laden." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64-bit XNU-Abbild laden." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "XNU-Erweiterungspaket laden." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "XNU-Erweiterung laden." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "VERZEICHNIS [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "XNU-Erweiterungsverzeichnis laden." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "XNU-Ramdisk laden. Wird im Betriebssystem als md0 angezeigt." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Begrüssungsbildschirm für XNU laden." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Ein gespeichertes XNU-Abbild laden." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADR1,MASKE1[,ADR2,MASKE2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Speicherbereiche als «badram» deklarieren." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "VON[K|M|G] BIS[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Alle Speichersegmente im angegebenen Bereich löschen." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "Vier Argumente werden erwartet" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "Netzwerk-Schnittstelle «%s» wurde nicht erkannt" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "Keine DHCP-Informationen gefunden" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "Keine DHCP-Optionen gefunden" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "Keine DHCP-Option %d gefunden" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "Nicht erkannte Formatspezifikation für DHCP-Option «%s»" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "Keine Netzwerkkarte gefunden" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "%s konnte nicht automatisch konfiguriert werden" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KARTE]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "Eine bootp-Autokonfiguration ausführen" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VARIABLE SCHNITTSTELLE ZAHL BESCHREIBUNG" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"DHCP-Option holen und in VARIABLE speichern. Falls VARIABLE «-» ist, den " +"Wert ausgeben." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "Es wurden keine DNS-Server konfiguriert" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "Domainname-Komponente ist zu lang" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "Keine DNS-Angabe gefunden" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "Kein DNS-Antwort empfangen" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "nur ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "nur ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "ipv4 bevorzugen" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "ipv6 bevorzugen" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "Ungültiger Parameter" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADDRESSE DNS_SERVER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Eine DNS-Suche ausführen" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Einen DNS-Server hinzufügen" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Einen DNS-Server entfernen" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "DNS-Server auflisten" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "Netzwerkpaket konnte nicht gesendet werden" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "Interpretierung wird nicht unterstützt" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "Speicherzuweisung (alloc-mem) ist gescheitert" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "free-mem ist gescheitert" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "Nicht unterstützte HTTP-Antwort" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "Nicht unterstützter HTTP-Fehler %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "Zeitüberschreitung beim Öffnen von «%s»" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "Zeitüberschreitung: Hardware-Adresse konnte nicht aufgelöst werden" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "Nicht auflösbare Adresse %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "Nicht erkannte Netzwerkadresse «%s»" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "Ziel ist nicht erreichbar" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "Routenschleife entdeckt" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "Adresse nicht gefunden" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "Sie können diese Adresse nicht löschen" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Nicht unterstützter Hardware-Adresstyp %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Nicht unterstützter Adresstyp %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "Drei Argumente erwartet" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "Karte nicht gefunden" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporär" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Unbekannter Adresstyp %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "Kein Server angegeben" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "Zeitüberschreitung beim Lesen von «%s»" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KURZNAME KARDE ADRESSE [HW-ADRESSE]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Eine Netzwerkadresse hinzufügen." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "KARTE [HW-ADRESSE]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Eine IPV6-Autokonfiguration ausführen" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KURZNAME" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Eine Netzwerkadresse löschen." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KURZNAME NETZ [SCHNITTSTELLE| gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Eine Netzwerkroute hinzufügen." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Eine Netzwerkroute entfernen." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "Netzwerkrouten auflisten" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "Netzwerkkarten auflisten" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "Netzwerkadressen auflisten" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "Verbindung verweigert" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "Verbindungsabbruch wegen Zeitüberschreitung" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Benutzername eingeben:" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[BENUTZERLISTE]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Überprüfen Sie, ob der Benutzer in der BENUTZERLISTE aufgeführt ist." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Mögliche Befehle sind:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Mögliche Geräte sind:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Mögliche Dateien sind:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Mögliche Partitionen sind:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Mögliche Argumente sind:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Mögliche Dinge sind:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Warnung: Syntaxfehler (fehlender /) in «%s»\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Warnung: ungültige Vordergrundfarbe «%s»\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Warnung: ungültige Hintergrundfarbe «%s»\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "UMGVAR [UMGVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Variablen exportieren." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Sonntag" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Montag" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Dienstag" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Mittwoch" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Donnerstag" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Freitag" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Samstag" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "Modul ist nicht geladen" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB Version %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Beenden ist jederzeit mit ESC möglich." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimale BASH-ähnliche Zeilenbearbeitung wird unterstützt. Für das erste " +"Wort listet TAB die möglichen Befehlsvervollständigungen auf. Ansonsten " +"werden mit TAB die möglichen Geräte-oder Dateivervollständigungen angezeigt. " +"%s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Den Bildschirm leeren." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "In Normalmodus wechseln." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Normalmodus abbrechen." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Beliebige Taste drücken, um fortzusetzen …" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "«%s» wird gebootet" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Alternative «%s» wird verwendet" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" +"Sowohl Vorgabe- als auch Alternativeinträge konnten nicht gebootet werden.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Eine Befehlsliste booten" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimale Emacs-ähnliche Bildschirmbearbeitung wird unterstützt. TAB listet " +"Vervollständigungen auf. Drücken Sie Ctrl-X oder F10 zum Booten, Ctrl-C oder " +"F2 für eine Befehlszeile oder ESC, um abzubrechen und zum GRUB-Menü " +"zurückzukehren." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Verwenden Sie die Tasten %C und %C zum Markieren eines Eintrags." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partition %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Gerät %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Zugriff auf Dateisystem nicht möglich" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Dateisystemtyp %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Bezeichnung «%s»" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Letzte Änderungszeit %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Kein bekanntes Dateisystem erkannt" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partitionsbeginn bei %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sektorgrösse %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Gesamtgrösse unbekannt" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Gesamtgrösse %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MEHR--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "Konfigurationsdatei «%s» kann nicht geöffnet werden: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "Auf Ihrer Plattform ist keine Kompression verfügbar" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "Für Ihre Plattform sind keine IEEE1275-Routinen verfügbar" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "Für Ihre Plattform sind keine EFI-Routinen verfügbar" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "Für Ihre Plattform sind keine SGI-Routinen verfügbar" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "Für Ihr Betriebssystem ist kein Zufallszahlengenerator verfügbar" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Baum für «device-mapper» konnte nicht erstellt werden" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "Verschlüsselter Datenträger «%s» konnte nicht eingebunden werden: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "«geom» konnte nicht geöffnet werden!" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "Geli-Nutzer konnte nicht gefunden werden" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "Geli-UUID konnte nicht ermittelt werden" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "«part»-Teil von «geom» konnte nicht geöffnet werden" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "Gerätegrösse ist unausgerichtet" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "Es wird versucht, das Core-Abbild «%s» aus GRUB zu lesen" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "Es wird versucht, das Core-Abbild «%s» erneut aus GRUB zu lesen" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "«%s» kann nicht korrekt gelesen werden" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "Lesen der Sektoren des Core-Abbildes ist gescheitert" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"Übersetzer-Befehlszeilenpfad für Pfad «%s» konnte nicht ermittelt werden: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "Übersetzer-Befehlszeilenpfad für Pfad «%s» ist leer" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"Übersetzer «%s» für Pfad «%s» hat verschiedene Wörter, die keine Optionen " +"sind, mindestens «%s» und «%s»" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"Übersetzer «%s» für Pfad «%s» wurde nur Optionen übergeben, device-Teil " +"konnte nicht gefunden werden" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Speicherinfo für «%s» enthält keinen Typ" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "«%s» ist keine lokale Festplatte" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Speicherinformation für «%s» weist weder auf eine Partition noch einen " +"Datenträger hin" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "Blocklisten konnten nicht ermittelt werden: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "Blockgrösse ist nicht durch 512 teilbar" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "Ungültige Blockgrösse Null" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "Blocklisten konnten nicht ermittelt werden" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "RAID_VERSION-Fehler (ioctl): %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "Nicht unterstützte RAID-Version: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "GET_ARRAY_INFO-Fehler (ioctl): %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "GET_DISK_INFO-Fehler (ioctl): %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Datenstrom von %s konnte nicht geöffnet werden: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "Ungültiger Typ eines RAID-Geräts «%s»" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"«obppath» wurde in den übergeordneten Verzeichnissen von «%s» nicht " +"gefunden, keine IEEE1275-Namensermittlung" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "Kanonischer Pfad von «%s» konnte nicht ermittelt werden" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "Unbekannter Gerätetyp %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Aufruf: %s GERÄT\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Fork konnte nicht angelegt werden: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Weiterleitung konnte nicht angelegt werden: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "Originalverzeichnis kann nicht wiederhergestellt werden" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "Aufruf von stat für «%s» nicht möglich: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "Temporäre Datei kann nicht angelegt werden: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "Temporäres Verzeichnis konnte nicht erstellt werden: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"IEEE1275-Gerätepfad für %s konnte nicht gefunden werden.\n" +"Sie müssen die Variable «boot-device» manuell setzen." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: Nicht gefunden" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"«nvsetenv» ist fehlgeschlagen. \n" +"Sie müssen die Variable «boot-device» manuell setzen. Geben Sie am IEEE1275-" +"Prompt Folgendes ein:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "«SystemPartition» und «OSLoader» müssen manuell eingerichtet werden." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "Kanonischer Pfadname enthält keinen «/»" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() gescheitert" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "Zufallsdaten konnten nicht geholt werden" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Unzureichende Zugriffsrechte für Firmware, BIOS wird angenommen" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "Im BIOS-Modus sind keine EFI-Routinen verfügbar" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "Unerwarteter EFI-Fehler" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Es konnte keine freier BootNNNN-Slot ist" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"Diese GPT-Partitionsbezeichnung hat keine BIOS-Boot-Partition, Einbettung " +"würde unmöglich sein" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "Ihre BIOS-Boot-Partition ist zu klein, Einbettung würde unmöglich sein" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Der Sektor %llu wird bereits vom Raid-Controller «%s» verwendet und wird " +"daher übergangen. Bitte fragen Sie den Hersteller, ob es möglich ist, keine " +"Daten in der MBR-Lücke zu speichern." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Der Sektor %llu wird bereits vom Programm «%s» verwendet und wird daher " +"übergangen. Diese Software kann in Zukunft Start- oder andere Probleme " +"hervorrufen. Bitte fragen Sie dessen Autoren, ob es möglich ist, keine Daten " +"im Boot-Bereich zu speichern." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"Andere Software nutzt den Einbettungsbereich, wodurch nicht genug Platz für " +"core.img ist. Solche Software versucht häufig, Daten zu speichern, um sie " +"unauffindbar zu machen. Wir empfehlen Ihnen, dies zu untersuchen" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"Die MSDOS-Partitionsbezeichnung hat keinen Freiraum nach dem MBR, Einbettung " +"würde unmöglich sein" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Ihr Einbettungsbereich ist ungewöhnlich klein. core.img würde nicht " +"hineinpassen." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Partition als aktiv markieren" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "Keine primäre Partition" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partition %d ist nun aktiv. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "«active»-Flag auf %d wurde gelöscht. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Partitionstyp ändern" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "«hidden»-Flag im Partitionstyp setzen" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "Der Partitionstyp 0x%x ist ungültig" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Partitionstyp wird auf 0x%x gesetzt\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "0 Schleifen können nicht unterbrochen werden" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "ausserhalb des Bereichs der Funktion" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "Ungültiger Variablenname «%s»" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "Unerwartetes Dateiende" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[ZAHL]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Schleifendurchlauf beenden" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Schleifen fortsetzen" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Positionsparameter anpassen." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[WERT]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Positionsparameter festlegen." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Aus einer Funktion zurückkehren." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] DATEI" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Hintergrundbild für aktives Terminal laden." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "FARBE" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Hintergrundfarbe für aktives Terminal festlegen." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Inhalt der CBMEM-Konsole anzeigen." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Einheit des seriellen Ports festlegen." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Adresse des seriellen Ports festlegen." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Geschwindigkeit des seriellen Ports festlegen." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Wortlänge des seriellen Ports festlegen." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Parität des seriellen Ports festlegen." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Stop-Bits des seriellen Ports festlegen." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Basisfrequenz festlegen." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "RTS/CTS aktivieren/deaktivieren." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "Serieller Port «%s» wurde nicht gefunden" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "Flusskontrolle des seriellen Ports wird nicht unterstützt" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIONEN…]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Serielle Schnittstelle konfigurieren." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "Unbekannter Terminfo-Typ «%s»" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "Visuelles UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Unbekannte Kodierung" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Aktuelle Terminfo-Typen:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminal ist nur ASCII [Vorgabe]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal ist logisches UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminal ist visuelles UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminalgeometrie wurde festgelegt." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "BREITExHÖHE." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "Ungültige Angabe der Terminalgeometrie" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" +"Terminal %s wurde nicht gefunden oder wird von terminfo nicht berücksichtigt" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g BxH] TERM [TYP]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "terminfo-Typ von TERM auf TYP setzen.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Blockargument ausgeben und ausführen." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "Bitmap-Datei «%s» besitzt ein nicht unterstütztes Format" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE-Info: Version: %d.%d OEM-Softwarerevision: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " Gesamtspeicher: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "Kein passender Videomodus gefunden" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "Zugriff verweigert" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULE" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "In MODULE angegebene Module vorladen" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "Nur MODULE und deren Abhängigkeiten installieren [Vorgabe=alle]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "THEMEN" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "THEMEN installieren [Vorgabe=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "SCHRIFTEN" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "SCHRIFTEN installieren [Vorgabe=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "SPRACHEN" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "Nur SPRACHEN installieren [Vorgabe=alle]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "GRUB-Dateien komprimieren [optional]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "Zu verwendende Kompression für Kernel-Abbild auswählen" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "Abbilder und Module in VERZEICHNIS verwenden [Vorgabe=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "Übersetzungen im Verzeichnis VERZ verwenden [Vorgabe=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "GRUB-Dateien im Verzeichnis VERZ verwenden [Vorgabe=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "DATEI als öffentlichen Schlüssel zur Signaturüberprüfung einbetten" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "Datei %s kann nicht in %s umbenannt werden" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" +"Platte existiert nicht, ersatzweise wird Partition des Geräts %s verwendet" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Befehle:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Eine leere Umgebungs-Blockdatei erstellen." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Aktuelle Variablen auflisten." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAME=WERT ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Variablen setzen." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAME ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Variablen löschen." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Optionen:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Sie müssen mindestens einen Befehl angeben.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "DATEINAME BEFEHL" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Werkzeug zum Bearbeiten einer Umgebungs-Blockdatei." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Falls DATEINAME als «-» angegeben ist, wird er Vorgabewert %s verwendet.\n" +"\n" +"Es gibt keinen «delete»-Befehl. Falls Sie den gesamten Umgebungsblock " +"löschen wollen,\n" +"verwenden Sie «rm %s»." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "Ungültiger Environment-Block" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "Ungültiger Parameter %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "Environment-Block ist zu klein" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "Lesen von Platte scheiterte bei %lld, Länge %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "Ungültiger Sprungwert %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "Lesefehler bei %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "OS-Datei «%s» kann nicht geöffnet werden: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "Schreiben in die Standardausgabe fehlgeschlagen: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "Vergleichsfehler bei %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Fehler beim Öffnen der OS-Datei %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "«loopback»-Befehl ist fehlgeschlagen: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "«cryptomount»-Befehl ist fehlgeschlagen: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "UUID konnte nicht ermittelt werden" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PFAD" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Dateien in PFAD auflisten." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp DATEI LOKAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "DATEI in lokale Datei LOKAL kopieren." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat DATEI" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "DATEI in die Standardausgabe kopieren." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp DATEI LOKAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "DATEI mit lokaler Datei LOKAL vergleichen." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex DATEI" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Den Inhalt der DATEI hexadezimal anzeigen." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc DATEI" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "crc32-Prüfsumme von DATEI berechnen." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist DATEI" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Blockliste von DATEI anzeigen." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid GERÄT" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "XNU-UUID des Geräts berechnen." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "ZAHL" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "N Bytes der Ausgabedatei überspringen." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "N Bytes in Ausgabedatei verarbeiten" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Die Anzahl der Eingabedateien angeben." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Debug-Umgebungsvariable setzen." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Verschlüsselte Geräte einhängen." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "DATEI|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "ZFS-Schlüssel laden." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Daten entpacken." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Ungültige Plattenanzahl.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Plattenanzahl muss Plattenliste vorangestellt sein.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Kein Befehl angegeben.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Zu wenige Parameter für den Befehl.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Ungültiger Befehl %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ABBILDPFAD BEFEHLE" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Diagnosewerkzeug für Dateisystemtreiber." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "Name der Eingabedatei für 32-bit festlegen." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "Name der Eingabedatei für 64-bit festlegen." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "Name der Ausgabedatei festlegen. Vorgabe ist STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPTIONEN]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "32-Bit- und 64-Bit-Binary zu Apple-Universal-Binary zusammenfügen." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Eingabedatei fehlt\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "«%s» kann nicht nach «%s» kopiert werden: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "Komprimieren von %s nach %s nicht möglich" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "Verzeichnis «%s» kann nicht geöffnet werden: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "«%s» kann nicht gelöscht werden: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage wurde ohne XZ-unterstützung kompiliert" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Unbekanntes Kompressionsformat %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Unbekannte Kompression «%s»" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "Unbekanntes Zielformat %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "Sprache «%s» kann nicht gefunden werden" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s existiert nicht. Bitte geben Sie --target oder --directory an" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "Ungültige modinfo-Datei «%s»" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Unbekannte Plattform «%s-%s»" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Mehr als ein Installationsgerät?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB-Abbilder in VERZEICHNIS/%s anstelle von %s installieren" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ZIEL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"GRUB für ZIEL-Plattform installieren [Vorgabe=%s]; verfügbare Ziele: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"Das Laufwerk auch als Diskette bootfähig machen (Vorgabe für fdX-Geräte). " +"Kann mit einigen BIOS-Varianten scheitern." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "Gerätezuordnung löschen, falls bereits vorhanden" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "Trotzdem installieren, auch wenn Probleme auftreten" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "ID-Datei auch dann verwenden, wenn eine UUID verfügbar ist" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"Zu verwendendes Platten-Modul (biosdisk oder native). Diese Option ist nur " +"für BIOS-Ziele verfügbar." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"Die NVRAM-Variable «boot-device»/«Boot*» nicht aktualisieren. Diese Option " +"ist nur für EFI- und IEEE1275-Ziele verfügbar." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "GERÄT nicht auf Dateisysteme überprüfen" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "Keinen Bootsektor installieren" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Keine Reed-Solomon-Codes beim Einbetten von core.img verwenden. Diese Option " +"ist nur für x86-BIOS-Ziele verfügbar." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"Das Installationsgerät ist ein Wechseldatenträger. Diese Option ist nur bei " +"EFI verfügbar." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "KENNUNG" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"Die Kennung des Bootloaders. Diese Option ist nur auf EFI-Systemen und Macs " +"verfügbar." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "VERZEICHNIS als Wurzel der EFI-Systempartition verwenden." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "VERZ für PPC-MAC-Installation verwenden." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "DATEI als Schriftart für Beschriftung verwenden" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "FARBE für Beschriftung verwenden." + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "FARBE für Beschriftungshintergrund verwenden." + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "ZEICHENKETTE als Produktversion verwenden" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPTION] [INSTALLATIONSGERÄT]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "GRUB auf Ihrem Laufwerk installieren." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALLATIONSGERÄT muss der Name des Geräts sein.\n" +"%s kopiert GRUB-Abbilder nach %s. Auf einigen Systemen\n" +"kann es auch GRUB in den Bootsektor installieren." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "Das Laufwerk %s wurde in der Gerätetabelle mehrfach %s definiert" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Ihre Plattform konnte nicht erkannt werden. Verwenden Sie --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "%s wird für Ihre Plattform installiert.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "Kein Installationsgerät angegeben" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "EFI-Verzeichnis kann nicht gefunden werden" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "Gerät für %s konnte nicht gefunden werden (ist /dev eingehängt?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"Für %s konnte kein GRUB-Laufwerk gefunden werden. Überprüfen Sie Ihre device." +"map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s scheint keine EFI-Partition zu sein" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Einen entdeckten Fehler berichten" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "Dateisystem auf %s ist weder HFS noch HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"Versuch, einen verschlüsselten Datenträger ohne aktiviertes Cryptodisk zu " +"installieren. Setzen Sie «%s» in Datei «%s»" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Datei «%s» kann nicht angelegt werden." + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"Keine Hinweise für Ihr Betriebssystem verfügbar. Verringerte Leistung ist zu " +"erwarten." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NICHT GESTARTET:" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "Die gewählte Partition ist keine PReP-Partition" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "GRUB konnte nicht in die PReP-Partition kopiert werden" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"Die PReP-Partition ist nicht leer. Falls Sie sicher sind, dass Sie sie " +"verwenden wollen, führen Sie dd aus, um sie zu leeren: «%s»" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Kennung des EFI-Bootloaders ist nicht angegeben." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "WARNUNG: Es wurde keine plattformspezifische Installation durchgeführt" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "installation beendet. Keine Fehler aufgetreten." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Kein Pfad oder Gerät wurde angegeben.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc PFAD|--x86 DATEI" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Aufruf: %s [EINGABEDATEI [AUSGABEDATEI]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype-Fehler %d beim Laden des Glyphs 0x%x für U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (mittig)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (ganz links)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (ganz rechts)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Ersetzung ausserhalb des Bereichs (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Suche ausserhalb des Bereichs: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Nicht unterstützter Ersetzungstyp: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Nicht unterstützte Ersetzungsangabe: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Nicht unterstützte Coverage-Spezifikation: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "WARNUNG: Nicht unterstützte Parameter für Schrifteigenschaften: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "Ausgabe in DATEI speichern [erforderlich]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "Schriftart-Index setzen" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "VON-BIS[,VON-BIS]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "Schriftbereich festlegen" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "Schriftfamilie festlegen" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "GRÖssE" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "Schriftgrösse festlegen" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "Schriftauffüllung unten einstellen" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "Schriftauffüllung oben einstellen" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "In fette Schrift umwandeln" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "Automatisches Hinting erzwingen" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "Hinting deaktivieren" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "Bitmap-Strikes beim Laden ignorieren" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "Ungültiger Schriftbereich" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIONEN] SCHRIFTDATEIEN" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Übliche Schriftdateiformate in PF2 umwandeln" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "Ausgabedatei muss angegeben werden" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType ist gescheitert" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "%s kann nicht geöffnet werden, Index %d: Fehler %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "Schriftgrösse %dx%d kann nicht gesetzt werden: Freetype-Fehler %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "Präfix-Verzeichnis festlegen" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"DATEI als Memdisk-Abbild einbetten\n" +"Impliziert «-p (memdisk)/boot/grub» und setzt jedes vorher angegebene Präfix " +"ausser Kraft, aber das Präfix selbst kann durch später angegebene Optionen " +"wiederum ausser Kraft gesetzt werden" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "DATEI als Anfangskonfiguration einbetten" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "NOTE-Segment für CHRP IEEE1275 hinzufügen" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "Ein erzeugtes Abbild in DATEI ausgeben [Vorgabe=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "Ein Abbild im FORMAT erzeugen" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "Verfügbare Formate:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "Unbekanntes Zielformat %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPTION]… [MODULE]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Ein bootfähiges GRUB-Abbild erstellen" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Zielformat wurde nicht angegeben (verwenden Sie die Option -0)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Präfix wurde nicht angegeben (verwenden Sie die Option -p)" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"«%s» ist fehlerhaft kompiliert: Dessen Startadresse ist 0x%llx anstelle von " +"0x%llx: Fehler in ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "Name der Eingabedatei festlegen. Vorgabe ist STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Ungültiger Bezeichner für Tastaturscan %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Ungültiger Code für Tastaturscan 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"FEHLER: Keine gültige Tastaturbelegung gefunden. Überprüfen Sie die " +"Eingabe.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "GRUB-Tastaturbelegung aus dem der Linux-Konsole erstellen." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "Wurzelverzeichnis auf dem TFTP-Server" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "Relativer Pfad zum Unterverzeichnis auf dem Netzwerkserver" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Bereitet GRUB-Netzwerk-Bootabbilder in net_directory/subdir vor, wobei " +"angenommen wird, dass net_directory das TFTP-Wurzelverzeichnis ist." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "Nicht unterstützte Plattform %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Netboot-Verzeichnis für %s wurde erstellt. Richten Sie Ihren DHCP-Server so " +"ein, dass er auf %s verweist\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Anzahl vor PBKDF2-Durchläufe" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Länge der erzeugten Prüfsumme" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Länge von Salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "PBKDF2-Passwort-Prüfsumme erzeugen. " + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "Passwort konnte nicht gelesen werden" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Passwort erneut eingeben:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "Die Passwörter stimmen nicht überein" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "Zufallsdaten für Salt konnten nicht geholt werden" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "Krytografiefehler Nummer %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDF2-Prüfsumme Ihres Passworts ist %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Kein Pfad angegeben.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "PFAD" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Einen Systemdateinamen in einen für GRUB umwandeln." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ROM-Abbilder in VERZEICHNIS speichern [optional]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "DATEI als xorriso benutzen [optional]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "ZEICHENKETTE als Produktname verwenden" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"Sparc-Bootvorgang aktivieren. Die deaktiviert HFS+, APM, ARCS und Booten als " +"Festplattenabbild für i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"Aktiviert ARCS-Boot (MIPS-Computer mit Big-Endian-Bytereihenfolge, meist " +"SGI). HFS+, APM, sparc64 und Booten als Disk-Abbild für i386-pc werden " +"deaktiviert" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Bootfähiges GRUB-Abbild für CD-ROM, Festplatte, USB-Stick und Diskette " +"erstellen." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Erzeugt ein bootfähiges CD/USB/Diskettenabbild. Argumente, die nicht zu den " +"Optionen dieses Programms gehören, werden an Xorriso übergeben und " +"indizieren Quelldateien, Quellverzeichnisse oder eine beliebige mkisofs-" +"Option, die von «%s» ausgegeben wird." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Option -- wechselt in den nativen xorriso-Befehlsmodus." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Richten Sie Supportanfragen zu Xorriso an ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPTION] QUELLE …" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "Unterstützung für %s wird aktiviert …" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ihr Xorriso unterstützt «--grub2-boot-info» nicht. Einige Funktionen sind " +"deaktiviert. Bitte verwenden Sie Xorriso in Version 1.2.9 oder neuer." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ihr Xorriso unterstützt «--grub2-boot-info» nicht. Ihr Core-Abbild ist zu " +"gross. Booten als Festplatte ist deaktiviert. Bitte verwenden Sie Xorriso in " +"Version 1.2.9 oder neuer." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Ein lauffähiges Abbild einschliesslich aller Module im gewählten Format " +"erstellen" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Graftpoint-Syntax (z.B. /boot/grub/grub.cfg=./grub.cfg) wird akzeptiert" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ABBILD1 [ABBILD2 ...] EINHÄNGEPUNKT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "Abbild und Einhängepunkt werden benötigt" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "Das angegebene Argument ist ein Systemgerät, kein Pfad" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "Einträge in der Ausgabe durch ASCII-NUL-Zeichen trennen" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[Vorgabe=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "ZIEL ausgeben" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "Verfügbare Ziele:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTIONEN]… [PFAD|GERÄT]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Geräteinformationen für einen angegebenen Pfad ermitteln (oder Gerät, falls " +"die Option -d angegeben ist)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "Text aus DATEI lesen." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "FARBE für Text verwenden" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "FARBE für Hintergrund verwenden" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "Anzuzeigende Beschriftung festlegen" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "DATEI als Schrift verwenden (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Apples .disk_label darstellen." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Argumente fehlen\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[PFAD]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Überprüft die GRUB-Skriptkonfiguration auf Syntaxfehler" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntaxfehler in Zeile %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Skript «%s» enthält nichts, es wird nichts ausgeführt\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "DATEI als Boot-Abbild verwenden [Vorgabe=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "DATEI als Kern-Abbild verwenden [Vorgabe=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Kein Gerät angegeben.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Abbilder zum Booten von GERÄT einrichten.\n" +"\n" +"Sie sollten dieses Programm normalerweise nicht direkt ausführen.\n" +"Verwenden Sie stattdessen grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "GERÄT muss ein OS-Gerät sein (z.B. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Ungültiges Gerät «%s».\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "Wurzelverzeichnis, wie es zur Laufzeit angezeigt wird [Vorgabe=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"Aktuelles Syslinux-Verzeichnis, wie es zur Laufzeit angezeigt wird [Vorgabe " +"ist das übergeordnete Verzeichnis der Eingabedatei]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "Ausgabe in DATEI schreiben [Vorgabe=stdout]" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Syslinux-Konfigurationsdatei in eine für GRUB umwandeln." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "Kernel-Abbild kann nicht komprimiert werden" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "Unbekannte Kompression %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Dekompressor ist zu gross" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "Core-Abbild ist zu gross (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "Kernel-Abbild ist zu gross (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "Die Grösse von diskboot.img muss %u Bytes betragen" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img entspricht nicht der bekanntermassen funktionierenden Version. " +"Verwenden Sie dies auf eigene Gefahr" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "Firmware-Abbild ist zu gross" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "Ungültiges Zeilenformat: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "Der erste Sektor der Core-Datei ist nicht sektor-ausgerichtet" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" +"Nicht an Sektoren ausgerichtete Daten wurden in der Core-Datei gefunden" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "Die Sektoren der Core-Datei sind zu stark fragmentiert" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "Die Grösse von «%s» ist nicht %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "«%s» ist zu klein" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Es wird versucht, GRUB auf einer Platte mit mehreren Partitionsbezeichnungen " +"oder sowohl Partitionsbezeichnungen als auch Dateisystemen zu installieren. " +"Dies wird derzeit noch nicht unterstützt." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"Es kann kein Dateisystem in %s erkannt werden. Sicherheitsüberprüfung kann " +"nicht ausgeführt werden" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s enthält ein %s-Dateisystem, welches bekanntermassen keinen Platz für " +"einen DOS-Betriebssystemstart bereithält. Die Installation von GRUB könnte " +"die ZERSTÖRUNG DES DATEISYSTEMS nach sich ziehen, sofern Daten durch grub-" +"setup überschrieben werden. Die Option --skip-fs-probe deaktiviert diese " +"Überprüfung, verwenden Sie dies auf eigene Gefahr." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s scheint eine %s-Partitionstabelle zu enthalten, welche bekanntermassen " +"keinen Platz für einen DOS-Betriebssystemstart bereithält. Die Installation " +"von GRUB könnte die ZERSTÖRUNG DES DATEISYSTEMS nach sich ziehen, sofern " +"Daten durch grub-setup überschrieben werden. Die Option --skip-fs-probe " +"deaktiviert diese Überprüfung, verwenden Sie dies auf eigene Gefahr." + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s scheint eine %s-Partitionstabelle und LDM zu enthalten, welches " +"bekanntermassen keine sichere Kombination ist. Die Installation von GRUB " +"könnte die ZERSTÖRUNG DES DATEISYSTEMS nach sich ziehen, sofern Daten durch " +"grub-setup überschrieben werden. Die Option --skip-fs-probe deaktiviert " +"diese Überprüfung, verwenden Sie dies auf eigene Gefahr." + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Es wird versucht, GRUB auf einer nicht partitionierten Platte oder in eine " +"Partition zu installieren. Das ist eine SCHLECHTE Idee." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Es wird versucht, GRUB auf einer Platte mit mehreren Partitionsbezeichnungen " +"zu installieren. Dies wird derzeit noch nicht unterstützt." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partitionstyp «%s» unterstützt keine Einbettungen" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Dateisystem «%s» unterstützt keine Einbettungen" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Ihr Einbettungsbereich ist ungewöhnlich klein. core.img würde nicht " +"hineinpassen." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "Kein Terminator im Core-Abbild" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "Version von core.img passt nicht" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"Einbettung ist nicht möglich, jedoch für die Installation mit RAID und LVM " +"erforderlich" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "Dateisystemtyp auf %s konnte nicht ermittelt werden" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "Dateisystem «%s» unterstützt keine Blocklisten" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"Einbettung ist nicht möglich, jedoch für die Installation auf mehreren " +"Laufwerken erforderlich" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Einbettung ist nicht möglich. GRUB kann in dieser Konfiguration nur mittels " +"Blocklisten installiert werden. Blocklisten sind allerdings UNZUVERLÄSSIG " +"und deren Verwendung wird daher nicht empfohlen." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "mit Blocklisten wird nicht fortgesetzt" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "Blocklisten sind ungültig" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "Blocklisten sind unvollständig" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Aufruf: %s -o AUSGABE CKBMAP_ARGUMENTE...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Eine GRUB-Tastaturlayoutdatei erstellen." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "Diese Meldung anzeigen und beenden" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "Versionsinformationen ausgeben und beenden" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s erstellt eine Tastaturbelegung für GRUB mittels ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Melden Sie Fehler an ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: Option erwartet ein Argument -- «%s»\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Aufruf: %s [OPTION]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Eine Grub-Konfigurationsdatei erstellen" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "Erstellte Konfiguration in DATEI ausgeben [Vorgabe=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Unerkannte Option «%s»\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Sie müssen dies als Root ausführen\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Nicht gefunden.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "GRUB-Konfigurationsdatei wird erstellt …" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"In der erzeugten GRUB-Konfigurationsdatei wurden\n" +"Syntaxfehler entdeckt. Stellen Sie sicher, das die Dateien\n" +"/etc/default/grub und /etc/grub.d/* fehlerfrei sind oder\n" +"erstellen Sie einen Fehlerbericht mit %s als Anhang." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "erledigt" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Warnung:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Aufruf: %s [OPTION] MENÜEINTRAG\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Den Standard-Booteintrag für GRUB festlegen (nur für den nächsten " +"Bootvorgang)." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB-Abbilder wurden im Verzeichnis VERZ/%s anstelle von %s erwartet" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Mehr als ein Menüeintrag?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Kein Menüeintrag angegeben." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Den voreingestellten Booteintrag für GRUB festlegen." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Dies erfordert die Einstellung GRUB_DEFAULT=saved in %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"MENÜEINTRAG ist eine Zahl, ein Titel oder Bezeichner eines Menüeintrags." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Serielles Terminal wurde angefordert, aber GRUB_SERIAL_COMMAND wurde nicht " +"angegeben. Standardparameter werden verwendet." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Thema gefunden: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Hintergrund gefunden: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Bildformat nicht unterstützt" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"GRUB_TIMEOUT auf einen von Null verschiedenen Wert setzen, wenn " +"GRUB_HIDDEN_TIMEOUT als nicht mehr unterstützt angegeben wird." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "GNU Mach wurde gefunden: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Hurd-Modul gefunden: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"Hurd-Bestandteile wurden gefunden, die aber zum Booten nicht ausreichen." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, mit Hurd %s (Wiederherstellungsmodus)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, mit Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Bitte verwenden Sie nicht den alten Titel «%s» für GRUB_DEFAULT, verwenden " +"Sie «%s» (für Versionen vor 2.00) oder «%s» (für 2.00 oder neuer)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "GNU Mach wird geladen …" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Hurd wird geladen …" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Erweiterte Optionen für %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Illumos-Kernel wird geladen …" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, mit kFreeBSD %s (Wiederherstellungsmodus)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, mit kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "FreeBSD-Kernel %s wird geladen …" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "FreeBSD-Kernel gefunden: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Kernel-Modulverzeichnis gefunden: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, mit Linux %s (Wiederherstellungsmodus)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, mit Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Linux %s wird geladen …" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Initiale Ramdisk wird geladen …" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Linux-Abbild gefunden: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "initrd-Abbild gefunden: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, mit Kernel %s (über %s, Wiederherstellungsmodus)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, mit Kernel %s (über %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "NetBSD-Kernel gefunden: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (Lader)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (Lader)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "%s auf %s gefunden (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(auf %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, mit Xen %s und Linux %s (Wiederherstellungsmodus)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, mit Xen %s und Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, mit Xen-Hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Xen %s wird geladen …" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen-Hypervisor, Version %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Erweiterte Optionen für %s (mit Xen-Hypervisor)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "%s auf %s gefunden\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s wird von grub-mkconfig noch nicht unterstützt.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Nicht unterstütztes Ersetzungs-Flag: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Unbekanntes gsub-Schriftmerkmal 0x%x (%s)\n" + +#~| msgid "Assume input is hex." +#~ msgid "assume isolinux." +#~ msgstr "Eingabe wird als hexadezimal angenommen." + +#~| msgid "Assume input is hex." +#~ msgid "assume pxelinux." +#~ msgstr "Eingabe wird als hexadezimal angenommen." + +#~| msgid "Assume input is hex." +#~ msgid "assume syslinux." +#~ msgstr "Eingabe wird als hexadezimal angenommen." + +#~| msgid "" +#~| "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "" +#~ "%s kopiert GRUB-Abbilder in Netz_Ordner/Unterordner/CPU-Zielplattform\\n" + +#~| msgid "" +#~| "%s generates a bootable rescue image with specified source files, source " +#~| "directories, or mkisofs options listed by the output of `%s'\\n" +#~ msgid "" +#~ "Generates a bootable rescue image with specified source files, source " +#~ "directories, or mkisofs options listed by the output of `%s'.\n" +#~ "\n" +#~ "Option -- switches to native xorriso command mode.\n" +#~ "\n" +#~ "Mail xorriso support requests to ." +#~ msgstr "" +#~ "%s erstellt ein bootfähiges Rettungs-Abbild aus den angegebenen " +#~ "Quelldateien, Quellordnern oder mkisofs-Optionen, welche die Ausgabe von " +#~ "«%s» auflistet\\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "Dateisystemmodul, GRUB-Laufwerk, Systemgerät, Partitionszuordnungsmodul, " +#~ "Abstraktionsmodul oder UUID des kryptografischen Containers ausgeben " +#~ "[Vorgabe=fs]" + +#~| msgid "set prefix directory [default=%s]" +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "Präfix-Ordner festlegen [Vorgabe=%s]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Adressbereich entspricht nicht dem RAM" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign wird auf Ihrem System nicht unterstützt" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Falls DATEINAME «-» ist, dann wird der Vorgabewert %s verwendet. " + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "Nur die ASCII-Bitmaps speichern" + +#~ msgid "create width summary file" +#~ msgstr "Breitendefinition in Datei speichern" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Die Option --ascii-bitmaps unterstützt keine Bereiche (verwendet stets " +#~ "ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "" +#~ "WARNUNG: Die Sicherheit Ihres Zufallszahlengenerators ist unbekannt\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "Lesen des ersten Sektors des Core-Abbildes ist gescheitert" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "DATEI als grub-setup verwenden" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "DATEI als grub-mkrelpath verwenden" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "DATEI als grub-probe verwenden" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "Installationsgerät muss als Name einer Systemdatei angegeben werden." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Pfad «%s» ist beim Booten von GRUB nicht lesbar. Die Installation ist " +#~ "unmöglich, wird abgebrochen.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Automatische Erkennung des Dateisystems von %s ist gescheitert.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Versuchen Sie mit --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Falls das Problem weiterhin besteht, melden Sie dies als Fehler zusammen " +#~ "mit der Ausgabe von %s an <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "«%s» ist fehlgeschlagen.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "GRUB-Laufwerk für %s konnte nicht gefunden werden. Der EFI-Bootmanager-" +#~ "Eintrag konnte nicht erstellt werden.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "grub.cfg wird erstellt …" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "DATEI als grub-glue-efi verwenden" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "DATEI als grub-render-label verwenden" + +#~ msgid "Packed pixel " +#~ msgstr "Gepackte Pixel " + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "" +#~ "GRUB-Abbilder in ORDNER verwenden. Erhält Vorrang gegenüber dem Ziel" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "Speicherinfo für «%s» enthält keinen Namen" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "Falsche Namenslänge für Speicherinfo für «%s»" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "Speichername für «%s» ist nicht NUL-terminiert" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "" +#~ "Physischer Datenträger %s konnte nicht gefunden werden. Überprüfen Sie " +#~ "Ihre device.map" + +#~ msgid "diskboot.img is not one sector size" +#~ msgstr "Die Grösse von diskboot.img entspricht nicht einem Sektor" + +#~ msgid "loopback command fails" +#~ msgstr "Loopback-Befehls ist fehlgeschlagen." + +#~ msgid "cryptomount command fails: %s" +#~ msgstr "Cryptomount-Befehl ist fehlgeschlagen: %s" + +#~ msgid "%s: option requires an argument -- `%s'" +#~ msgstr "%s: Option erwartet ein Argument -- «%s»" + +#~ msgid "Make GRUB rescue image." +#~ msgstr "Ein Abbild eines GRUB-Rettungsmediums erstellen" + +#~ msgid "Show v2 and v3 tablesv only." +#~ msgstr "Nur v2- und v3-Tabellen darstellen." + +#~ msgid "Unknown " +#~ msgstr "Unbekannt" + +#~ msgid "Map table size exceeded" +#~ msgstr "Maximale Tabellengrösse überschritten" + +#~ msgid "Try `%s --help' for more information.\n" +#~ msgstr "Rufen Sie «%s --help» auf, um weitere Informationen zu erhalten.\n" + +#~ msgid "" +#~ "Usage: %s [OPTION]...\n" +#~ "\n" +#~ "GRUB emulator.\n" +#~ "\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=host]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -v, --verbose print verbose messages\n" +#~ " -H, --hold[=SECONDS] wait until a debugger will attach\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Aufruf: %s [OPTION]...\n" +#~ "\n" +#~ "GRUB-Emulator.\n" +#~ "\n" +#~ " -r, --root-device=DEV GERÄT als Root-Gerät verwenden " +#~ "[Vorgabe=host]\n" +#~ " -m, --device-map=FILE DATEI als Gerätezuordnung verwenden [Vorgabe=" +#~ "%s]\n" +#~ " -d, --directory=DIR GRUB-Dateien in ORDNER verwenden [Vorgabe=" +#~ "%s]\n" +#~ " -v, --verbose Ausführliche Meldungen anzeigen\n" +#~ " -H, --hold[=SECONDS] Warten, bis sich ein Debugger einklinkt\n" +#~ " -h, --help Diese Meldung anzeigen und beenden\n" +#~ " -V, --version Versionsinformation anzeigen und beenden\n" +#~ "\n" +#~ "Fehler bitte an <%s> melden.\n" + +#~ msgid "" +#~ "%s is deprecated. Use set gfxpayload=text before linux command instead.\n" +#~ msgstr "" +#~ "%s ist veraltet. Verwenden Sie stattdessen gfxpayload=text vor dem Linux-" +#~ "Befehl.\n" + +#~ msgid "Serial terminal not available on this platform." +#~ msgstr "Ein serielles Terminal ist auf dieser Plattform nicht verfügbar." + +#~ msgid "Usage: %s [OPTION] install_device" +#~ msgstr "Aufruf: %s [OPTION] Installationsgerät" + +#~ msgid "Usage: %s [OPTION] [install_device]" +#~ msgstr "Aufruf: %s [OPTION] [Installationsgerät]" + +#~ msgid "the ID of bootloader." +#~ msgstr "Die Kennung des Bootloaders" + +#~ msgid "" +#~ "UUID needed with ata mod, but the filesystem containing %s does not " +#~ "support UUIDs.\\n" +#~ msgstr "" +#~ "Im ATA-Modus wird eine UUID benötigt, aber das Dateisystem %s unterstützt " +#~ "keine UUIDs.\\n" + +#~ msgid "" +#~ "UUID needed with cross-disk installs, but the filesystem containing %s " +#~ "does not support UUIDs.\\n" +#~ msgstr "" +#~ "Für plattenübergreifende Installationen wird eine UUID benötigt, aber das " +#~ "Dateisystem, welches %s enthält, unterstützt keine UUIDs.\\n" + +#~ msgid "No font for video terminal found." +#~ msgstr "Keine Schrift für Video-Terminal gefunden." + +#~ msgid "Usage: %s [OPTION] install_device\\n" +#~ msgstr "Aufruf: %s [OPTION] Installationsgerät\\n" + +#~ msgid "Usage: %s [OPTION] entry\\n" +#~ msgstr "Aufruf: %s [OPTION] Eingabe\\n" + +#, fuzzy +#~ msgid "file name expected" +#~ msgstr "Ein Argument wurde erwartet" + +#~ msgid "can't find command %s" +#~ msgstr "Befehl %s kann nicht gefunden werden." + +#~ msgid "Load an additional file." +#~ msgstr "Eine zusätzliche Datei laden." + +#~ msgid "can't open device" +#~ msgstr "Gerät kann nicht geöffnet werden" + +#, fuzzy +#~ msgid "unknown architecture type 0x%x" +#~ msgstr "Unbekannter Gerätetyp %s\n" + +#, fuzzy +#~ msgid "invalid ELF format" +#~ msgstr "Ungültiges Zeilenformat: %s" + +#, fuzzy +#~ msgid "start symbol is not defined" +#~ msgstr "Adresse nicht gefunden" + +#~ msgid "No open parenthesis found" +#~ msgstr "Keine öffnende Klammer gefunden" + +#~ msgid "No close parenthesis found" +#~ msgstr "Keine schliessende Klammer gefunden" + +#~ msgid "No filename found" +#~ msgstr "Kein Dateiname gefunden" + +#, fuzzy +#~ msgid "unrecognised netword interface `%s'" +#~ msgstr "Nicht erkannte Schnittstelle %s" + +#~ msgid "At least 3 arguments are expected" +#~ msgstr "Es werden mindestens drei Argumente erwartet" + +#, fuzzy +#~ msgid "cannot seek the file `%s': %s" +#~ msgstr "Datei %s kann nicht durchsucht werden" + +#, fuzzy +#~ msgid "cannot read the file `%s': %s" +#~ msgstr "Datei %s kann nicht gelesen werden" + +#, fuzzy +#~ msgid "Read 8-bit from PORT." +#~ msgstr "byte aus PORT lesen." + +#, fuzzy +#~ msgid "Read 16-bit from PORT." +#~ msgstr "byte aus PORT lesen." + +#, fuzzy +#~ msgid "Read 32-bit from PORT." +#~ msgstr "byte aus PORT lesen." + +#~ msgid "Make partition hidden" +#~ msgstr "Partition als verborgen markieren" + +#~ msgid "Check hash list file." +#~ msgstr "Hash-Listendatei überprüfen." + +#~ msgid "BadRAM" +#~ msgstr "BadRAM" + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Definition des Menüeintrags als Zeichenkette." + +#~ msgid "Device %d\n" +#~ msgstr "Gerät %d\n" + +#~ msgid "Variable names to update with matches." +#~ msgstr "Zu aktualisierende Variablennamen anhand von Übereinstimmungen." + +#~ msgid " Failed" +#~ msgstr " Fehlgeschlagen" + +#~ msgid "Firmware is marked as tainted, refusing to initialize." +#~ msgstr "" +#~ "Firmware ist als fehlerhaft markiert, Initialisierung wird verweigert." + +#~ msgid "State: " +#~ msgstr "Status:" + +#~ msgid "removed " +#~ msgstr "entfernt" + +#~ msgid "offline " +#~ msgstr "offline " + +#~ msgid "online" +#~ msgstr "online" + +#~ msgid "Unknown VDEV type: %s\n" +#~ msgstr "Unbekannter VDEV-Typ: %s\n" + +#~ msgid "Authenticate users" +#~ msgstr "Benutzer legitimieren" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 visuell" + +#~ msgid "Unknown" +#~ msgstr "Unbekannt" + +#~ msgid "Unknown key %s\n" +#~ msgstr "Unbekannter Schlüssel %s\n" + +#~ msgid "do not probe any floppy drive" +#~ msgstr "Kein Diskettenlaufwerk überprüfen" + +#~ msgid "Expose v1 tables." +#~ msgstr "v1-Tabellen darstellen." + +#~ msgid "" +#~ "\n" +#~ "Glyph #%d, U+%04x\n" +#~ msgstr "" +#~ "\n" +#~ "Glyph #%d, U+%04x\n" + +#~ msgid "Fake BIOS." +#~ msgstr "Fake-BIOS." + +#~ msgid "Read word from PORT." +#~ msgstr "word aus PORT lesen." + +#~ msgid "Read dword from PORT." +#~ msgstr "dword aus PORT lesen." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "word-WERT in PORT schreiben." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "dword-WERT in PORT schreiben." + +#~ msgid "Read word from ADDR." +#~ msgstr "word aus ADDR lesen." + +#~ msgid "Read dword from ADDR." +#~ msgstr "dword aus ADDR lesen." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "word-WERT in ADDR schreiben." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "dword-WERT in ADDR schreiben." + +#~ msgid "USERNAME" +#~ msgstr "BENUTZERNAME" + +#~ msgid "Dump memory." +#~ msgstr "Speicherinhalt sichern." + +#~ msgid "Hex dump FILE." +#~ msgstr "Hex-Dump von DATEI." + +#~ msgid "Error loading file %s: %s\n" +#~ msgstr "Fehler beim Laden der Datei %s: %s\n" + +#~ msgid "STR" +#~ msgstr "ZEICHENKETTE" + +#~ msgid "Use FILE as the device map [default=%s]" +#~ msgstr "DATEI als Geräteverzeichnis verwenden [Vorgabe=%s]" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "GERÄT als Root-Gerät verwenden [Vorgabe=Vermutung]" + +#~ msgid "Install even if problems are detected" +#~ msgstr "Trotzdem installieren, auch wenn Probleme auftreten" + +#~ msgid "DIRECTORY" +#~ msgstr "ORDNER" + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "KEY" +#~ msgstr "SCHLÜSSEL" + +#~ msgid "cannot get the real path of `%s'" +#~ msgstr "Realer Pfad von «%s» kann nicht ermittelt werden" + +#~ msgid "premature end of file %s: " +#~ msgstr "Unerwartetes Ende der Datei %s:" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "Print verbose messages." +#~ msgstr "Ausführliche Meldungen ausgeben." + +#~ msgid "no output file is specified" +#~ msgstr "Keine Ausgabedatei angegeben" + +#~ msgid "No terminator in the core image" +#~ msgstr "Kein Terminator im Core-Abbild" + +#~ msgid "DEV" +#~ msgstr "GERÄT" + +#~ msgid "output file must be given" +#~ msgstr "Ausgabedatei muss angegeben werden" + +#~ msgid "format must be specified" +#~ msgstr "Format muss angegeben werden" + +#~ msgid "fstat failed" +#~ msgstr "fstat gescheitert" + +#~ msgid "no device.map" +#~ msgstr "Keine device.map" + +#, fuzzy +#~ msgid "cannot stat `%s'" +#~ msgstr "«%s» kann nicht geöffnet werden" + +#~ msgid "write error" +#~ msgstr "Schreibfehler" + +#~ msgid "seek error" +#~ msgstr "Suchfehler" + +#~ msgid "Couldn't open %s for reading: %s\n" +#~ msgstr "«%s» konnte nicht zum Lesen geöffnet werden: %s\n" + +#~ msgid "Couldn't open %s for writing: %s\n" +#~ msgstr "«%s» konnte nicht zum Schreiben geöffnet werden: %s\n" + +#~ msgid "set output file" +#~ msgstr "Ausgabedatei festlegen" + +#~ msgid "the core image is too big" +#~ msgstr "Core-Abbild ist zu gross" + +#~ msgid "cannot open %s" +#~ msgstr "%s kann nicht geöffnet werden" + +#~ msgid "" +#~ "Usage: %s [OPTIONS]\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Aufruf: %s [OPTIONEN]\n" +#~ "\n" +#~ "Melden Sie Fehler an <%s>.\n" + +#~ msgid "Couldn't open input file: %s\n" +#~ msgstr "Eingabedatei kann nicht geöffnet werden: %s\n" + +#~ msgid "Couldn't open output file: %s\n" +#~ msgstr "Ausgabedatei kann nicht geöffnet werden: %s\n" + +#, fuzzy +#~ msgid "cannot open 'vendor' node of `%s'" +#~ msgstr "«%s» kann nicht geöffnet werden" + +#, fuzzy +#~ msgid "cannot read 'vendor' node of `%s'" +#~ msgstr "%llu Bytes können nicht aus %s gelesen werden" + +#, fuzzy +#~ msgid "cannot open SAS PHY ID `%s'\n" +#~ msgstr "«%s» kann nicht geöffnet werden" + +#~ msgid "fflush failed" +#~ msgstr "fflush gescheitert" + +#, fuzzy +#~ msgid "cannot stat %s" +#~ msgstr "%s kann nicht geöffnet werden" + +#~ msgid "read failed" +#~ msgstr "read gescheitert" + +#~ msgid "cannot read %s" +#~ msgstr "%s kann nicht gelesen werden" + +#~ msgid "write failed" +#~ msgstr "Schreibfehler" + +#~ msgid "Unload PXE environment." +#~ msgstr "PXE-Umgebung entladen." + +#~ msgid "[DEVICE]" +#~ msgstr "[GERÄT]" + +#~ msgid "open error" +#~ msgstr "Fehler beim Öffnen" + +#~ msgid "Must use absolute path.\n" +#~ msgstr "Absoluter Pfad ist notwendig.\n" + +#~ msgid "the core image is too small" +#~ msgstr "Core-Abbild ist zu klein" + +#~ msgid "prefix is too long" +#~ msgstr "Präfix ist zu lang" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Aufruf: %s [OPTION]... [MODULE]\n" +#~ "\n" +#~ "Erstellen eines bootfähigen GRUB-Abbildes.\n" +#~ "\n" +#~ " -d, --directory=ORDN Abbilder und Module in ORDN verwenden [Vorgabe=" +#~ "%s/@platform@]\n" +#~ " -p, --prefix=ORDN Ordner für grub_prefix festlegen [Vorgabe=%s]\n" +#~ " -m, --memdisk=DATEI DATEI als memdisk-Abbild einbetten\n" +#~ " -c, --config=DATEI DATEI als Boot-Konfiguration einbetten\n" +#~ " -n, --note NOTE-Segment für CHRP Open Firmware hinzufügen\n" +#~ " -o, --output=DATEI Erzeugtes Abbild in DATEI ausgeben " +#~ "[Vorgabe=stdout]\n" +#~ " -O, --format=FORMAT Abbild in FORMAT erzeugen [Vorgabe=stdout]\n" +#~ " Verfügbare Formate: %s\n" +#~ " -C, --compression=(xz|none|auto) Zu verwendende Kompression\n" +#~ " -h, --help Diese Meldung anzeigen und beenden\n" +#~ " -V, --version Versionsinformation anzeigen und beenden\n" +#~ " -v, --verbose Ausführliche Meldungen anzeigen\n" +#~ "\n" +#~ "Fehler bitte an <%s> melden.\n" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "Einbettung ist nicht möglich, jedoch erforderlich, wenn das Root-Gerät " +#~ "sich in einem RAID-Verbund oder einem LVM-Datenträger befindet." + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "Das Root-Gerät kann nicht ermittelt werden. Verwenden Sie die Option «--" +#~ "root-device»." + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "Kompatible VESA BIOS-Erweiterunsmodi für Video auflisten." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "Unterstützung für VESA BIOS-Erweiterung 2.0+ überprüfen." + +#~ msgid "Set the root device." +#~ msgstr "Root-Gerät festlegen." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "Einen Datenträger mit Partitionen simulieren." + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "" +#~ "Es wird versucht, GRUB in eine Partition anstelle in den MBR zu " +#~ "installieren. Das ist eine SCHLECHTE Idee." + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "" +#~ "Benutzen Sie --force, wenn Sie wirklich Blocklisten verwenden wollen." + +#~ msgid "A boot catalog exists and appears corrupted.\n" +#~ msgstr "Ein Boot-Katalog existiert, scheint aber beschädigt zu sein.\n" + +#~ msgid "Please check the following file: %s.\n" +#~ msgstr "Bitte überprüfen Sie folgende Datei: %s.\n" + +#~ msgid "This file must be removed before a bootable CD can be done.\n" +#~ msgstr "" +#~ "Diese Datei muss entfernt werden, bevor eine bootfähige CD erstellt " +#~ "werden kann.\n" + +#~ msgid "Error creating boot catalog (%s)" +#~ msgstr "Fehler beim Erstellen des Boot-Katalogs (%s)" + +#~ msgid "Error writing to boot catalog (%s)" +#~ msgstr "Fehler beim Speichern des Boot-Katalogs (%s)" + +#~ msgid "Boot catalog cannot be found!\n" +#~ msgstr "Boot-Katalog kann nicht gefunden werden!\n" + +#~ msgid "Boot image cannot be found!\n" +#~ msgstr "Boot-Abbild kann nicht gefunden werden!\n" + +#~ msgid "" +#~ "\n" +#~ "Size of boot image is %d sectors" +#~ msgstr "" +#~ "\n" +#~ "Das Boot-Abbild umfasst %d Sektoren" + +#~ msgid "No emulation\n" +#~ msgstr "Keine Emulation\n" + +#~ msgid "Emulating a 1.44 meg floppy\n" +#~ msgstr "Eine 1,44 MB-Diskette emulieren\n" + +#~ msgid "Emulating a 2.88 meg floppy\n" +#~ msgstr "Eine 2,88 MB-Diskette emulieren\n" + +#~ msgid "Emulating a 1.2 meg floppy\n" +#~ msgstr "Eine 1,2 MB-Diskette emulieren\n" + +#~ msgid "" +#~ "\n" +#~ "Error - boot image is not the an allowable size.\n" +#~ msgstr "" +#~ "\n" +#~ "Fehler - Boot-Abbild hat keine akzeptable Grösse.\n" + +#~ msgid "Error opening boot catalog for update" +#~ msgstr "Fehler beim Öffnen des Boot-Katalogs zum Aktualisieren" + +#~ msgid "Error writing to boot catalog" +#~ msgstr "Fehler beim Schreiben in den Boot-Katalog" + +#~ msgid "Error opening boot image file '%s' for update" +#~ msgstr "Fehler beim Öffnen der Boot-Abbilddatei «%s» zum Aktualisieren" + +#~ msgid "Boot image file '%s' changed unexpectedly" +#~ msgstr "Boot-Abbilddatei «%s» wurde unerwartet geändert" + +#~ msgid "Error writing to boot image (%s)" +#~ msgstr "Fehler beim Schreiben in das Boot-Abbild (%s)" + +#~ msgid "Unable to generate sane path tables - too many directories (%d)\n" +#~ msgstr "" +#~ "Erzeugung der Sane-Pfadtabellen ist nicht möglich - zu viele Ordner (%d)\n" + +#~ msgid "Entry %d not in path tables\n" +#~ msgstr "Eintrag %d nicht in Pfadtabellen vorhanden\n" + +#~ msgid "Joliet path table lengths do not match %d %d\n" +#~ msgstr "Längen der Joliet-Pfadtabellen %d %d stimmen nicht überein\n" + +#~ msgid "Unable to locate relocated directory\n" +#~ msgstr "Geänderter Ordner kann nicht gefunden werden\n" + +#~ msgid "Fatal goof - unable to find directory location\n" +#~ msgstr "Fataler Fehler - Ort des Ordners kann nicht gefunden werden\n" + +#~ msgid "Unexpected joliet directory length %d %d %s\n" +#~ msgstr "Unerwartete Länge des Joliet-Ordners %d %d %s\n" + +#~ msgid "Using \"%s\"\n" +#~ msgstr "«%s» wird verwendet\n" + +#~ msgid "%s:%d: name required\n" +#~ msgstr "%s:%d: Name erforderlich\n" + +#~ msgid "%s:%d: equals sign required\n" +#~ msgstr "%s:%d: Gleichheitszeichen erforderlich\n" + +#~ msgid "%s:%d: field name \"%s\" unknown\n" +#~ msgstr "%s:%d: Feldname «%s» ist unbekannt\n" + +#~ msgid "Usage: %s [options] file...\n" +#~ msgstr "Aufruf: %s [Optionen] Datei...\n" + +#~ msgid "Required boot image pathname missing\n" +#~ msgstr "Pfadname des Boot-Abbildes ist notwendig, fehlt aber\n" + +#~ msgid "Required boot catalog pathname missing\n" +#~ msgstr "Pfadname des Boot-Katalogs ist notwendig, fehlt aber\n" + +#~ msgid "Ignoring -no-emul-boot (no-emulation is the default behaviour)\n" +#~ msgstr "" +#~ "-no-emul-boot wird ignoriert (no-emulation ist das Standardverhalten)\n" + +#~ msgid "Abstract filename string too long\n" +#~ msgstr "«Abstract»-Zeichenkette für Dateiname ist zu lang\n" + +#~ msgid "Application-id string too long\n" +#~ msgstr "«Application-id»-Zeichenkette ist zu lang\n" + +#~ msgid "Bibliographic filename string too long\n" +#~ msgstr "«Bibliographic»-Zeichenkette für Dateiname ist zu lang\n" + +#~ msgid "Copyright filename string too long\n" +#~ msgstr "«Copyright»-Zeichenkette für Dateiname ist zu lang\n" + +#~ msgid "Preparer string too long\n" +#~ msgstr "«Preparer»-Zeichenkette ist zu lang\n" + +#~ msgid "Publisher string too long\n" +#~ msgstr "«Publisher»-Zeichenkette ist zu lang\n" + +#~ msgid "System ID string too long\n" +#~ msgstr "«System ID»-Zeichenkette ist zu lang\n" + +#~ msgid "Volume ID string too long\n" +#~ msgstr "«Volume ID»-Zeichenkette ist zu lang\n" + +#~ msgid "Volume set ID string too long\n" +#~ msgstr "«Volume set ID»-Zeichenkette ist zu lang\n" + +#~ msgid "Volume set sequence number too big\n" +#~ msgstr "Sequenznummer des Datenträgersatzes ist zu gross\n" + +#~ msgid "date string must be 16 characters.\n" +#~ msgstr "Datumszeichenkette muss aus 16 Zeichen bestehen.\n" + +#~ msgid "Warning: setrlimit" +#~ msgstr "Warnung: setrlimit" + +#~ msgid "Multisession usage bug: Must specify -C if -M is used.\n" +#~ msgstr "" +#~ "Für Mehrfachsitzungen muss -C angegeben werden, falls -M benutzt wird.\n" + +#~ msgid "" +#~ "Warning: -C specified without -M: old session data will not be merged.\n" +#~ msgstr "" +#~ "Warnung: -C wurde ohne -M angegeben: alte Sitzungsdaten werden nicht " +#~ "berücksichtigt.\n" + +#~ msgid "re-directing all messages to %s\n" +#~ msgstr "Alle Meldungen werden zu %s umgeleitet\n" + +#~ msgid "Unable to open previous session image %s\n" +#~ msgstr "Abbild der vorherigen Sitzung %s kann nicht geöffnet werden\n" + +#~ msgid "Joliet tree sort failed.\n" +#~ msgstr "Sortierung des Joliet-Baums ist gescheitert.\n" + +#~ msgid "Unable to open /dev/null\n" +#~ msgstr "/dev/null kann nicht geöffnet werden\n" + +#~ msgid "Unable to open disc image file\n" +#~ msgstr "Abbilddatei der Platte kann nicht geöffnet werden\n" + +#~ msgid "%llu extents written (%llu MiB)\n" +#~ msgstr "%llu Einheiten geschrieben (%llu MiB)\n" + +#~ msgid "Seek error on old image\n" +#~ msgstr "Fehler beim Durchsuchen eines alten Abbildes\n" + +#~ msgid "**Bad RR version attribute" +#~ msgstr "**Falsches RR-Versionsattribut" + +#~ msgid "" +#~ "Warning: Neither Rock Ridge (-R) nor TRANS.TBL (-T) name translations " +#~ "were found on previous session. ISO (8.3) file names have been used " +#~ "instead.\n" +#~ msgstr "" +#~ "Warnung: Weder RockRidge (-R) noch TRANS.TBL (-T)-Namensübersetzungen " +#~ "wurden in der vorherigen Sitzung gefunden. ISO (8.3)-Dateinamen wurden " +#~ "stattdessen verwendet.\n" + +#~ msgid "Read error on old image %s\n" +#~ msgstr "Fehler beim Lesen des alten Abbildes %s\n" + +#~ msgid "Special parameters for cdwrite not specified with -C\n" +#~ msgstr "Spezielle Parameter für cdwrite wurden nicht mit -C angegeben\n" + +#~ msgid "Malformed cdwrite parameters\n" +#~ msgstr "Ungültige Parameter für cdwrite\n" + +#~ msgid "Unable to insert transparent compressed file - name conflict\n" +#~ msgstr "" +#~ "Transparente komprimierte Datei kann nicht eingefügt werden - " +#~ "Namenskonflikt\n" + +#~ msgid "Extension record too long\n" +#~ msgstr "Erweiterungsaufzeichnung ist zu lang\n" + +#~ msgid "Fatal goof\n" +#~ msgstr "Fataler Fehler\n" + +#~ msgid "Unable to generate unique name for file %s\n" +#~ msgstr "Eindeutiger Name für Datei %s kann nicht erzeugt werden\n" + +#~ msgid "Fatal error - RR overflow for file %s\n" +#~ msgstr "Fataler Fehler - RR-Überlauf für Datei %s\n" + +#~ msgid "Translation table size mismatch %d %d\n" +#~ msgstr "Grösse der Übersetzungstabellen %d %d stimmt nicht überein\n" + +#~ msgid "Unable to locate directory parent\n" +#~ msgstr "Ort des Elternordners kann nicht bestimmt werden\n" + +#~ msgid "Scanning %s\n" +#~ msgstr "%s wird eingelesen\n" + +#~ msgid "Overflow of stat buffer\n" +#~ msgstr "Überlauf des stat-Zwischenspeichers\n" + +#~ msgid "Excluded by match: %s\n" +#~ msgstr "Ausgeschlossen nach Übereinstimmung: %s\n" + +#~ msgid "Excluded: %s\n" +#~ msgstr "Ausgeschlossen: %s\n" + +#~ msgid "Non-existant or inaccessible: %s\n" +#~ msgstr "Nicht vorhanden oder kein Zugriff möglich: %s\n" + +#~ msgid "Unable to stat file %s - ignoring and continuing.\n" +#~ msgstr "" +#~ "Statusermittlung der Datei %s nicht möglich - wird ignoriert und " +#~ "fortgesetzt.\n" + +#~ msgid "Symlink %s ignored - continuing.\n" +#~ msgstr "Symbolische Verknüpfung %s wird ignoriert und fortgesetzt.\n" + +#~ msgid "Already cached directory seen (%s)\n" +#~ msgstr "Bereits zwischengespeicherter Ordner erkannt (%s)\n" + +#~ msgid "File %s is not readable (%s) - ignoring\n" +#~ msgstr "Datei %s ist nicht lesbar (%s) - wird ignoriert\n" + +#~ msgid "Directory loop - fatal goof (%s %lx %lu).\n" +#~ msgstr "Ordnerschleife - fataler Fehler (%s %lx %lu).\n" + +#~ msgid "Unknown file type %s - ignoring and continuing.\n" +#~ msgstr "Unbekannter Dateityp %s - wird ignoriert und fortgesetzt.\n" + +#~ msgid "Hidden from ISO9660 tree: %s\n" +#~ msgstr "Im ISO9660-Baum verborgen: %s\n" + +#~ msgid "Hidden from Joliet tree: %s\n" +#~ msgstr "Im Joliet-Baum verborgen: %s\n" + +#~ msgid "Directories too deep %s\n" +#~ msgstr "Ordnertiefe %s zu gross\n" + +#~ msgid "Unable to delete non-empty directory\n" +#~ msgstr "Nicht leerer Ordner kann nicht entfernt werden\n" + +#~ msgid "Unable to locate child directory in parent list\n" +#~ msgstr "Kindordner kann in Elternliste nicht gefunden werden\n" + +#~ msgid "call to search_tree_file with an absolute path, stripping\n" +#~ msgstr "" +#~ "Aufruf von search_tree_file mit absolutem Pfad, wird abgeschnitten\n" + +#~ msgid "initial path separator. Hope this was intended...\n" +#~ msgstr "Anfänglicher Pfadtrenner. Hoffentlich war dies beabsichtigt...\n" + +#~ msgid "Cannot open '%s'" +#~ msgstr "«%s» kann nicht geöffnet werden" + +#~ msgid "cannot open %s\n" +#~ msgstr "%s kann nicht geöffnet werden\n" + +#~ msgid "%6.2f%% done, estimate finish %s" +#~ msgstr "%6.2f%% abgeschlossen, voraussichtlich beendet %s" + +#~ msgid "Unexpected directory length %d %d %s\n" +#~ msgstr "Unerwartete Ordnerlänge %d %d %s\n" + +#~ msgid "Path table lengths do not match %d %d\n" +#~ msgstr "Längen der Pfadtabellen %d %d stimmen nicht überein\n" + +#~ msgid "Total extents scheduled to be written = %llu\n" +#~ msgstr "Geplante zu schreibende Einheiten = %llu\n" + +#~ msgid "Total extents actually written = %llu\n" +#~ msgstr "Gesamte derzeit geschriebene Einheiten = %llu\n" + +#~ msgid "" +#~ "Number of extents written different than what was predicted. Please " +#~ "fix.\n" +#~ msgstr "" +#~ "Anzahl der zu schreibenden Einheiten anders als erwartet. Bitte " +#~ "berichtigen.\n" + +#~ msgid "Predicted = %d, written = %llu\n" +#~ msgstr "Erwartet = %d, geschrieben = %llu\n" + +#~ msgid "Total rockridge attributes bytes: %d\n" +#~ msgstr "Gesamtgrösse der RockRidge-Attribute in Bytes: %d\n" + +#~ msgid "Path table size(bytes): %d\n" +#~ msgstr "Grösse der Pfadtabelle in Bytes: %d\n" diff --git a/po/en@arabic.gmo b/po/en@arabic.gmo new file mode 100644 index 0000000000000000000000000000000000000000..541047ca509dced00f7dc8be218ac2b952451109 GIT binary patch literal 163001 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 GRUB/BIOS device" +msgstr "وس دִيسك #نوم ------> غروب/بִيوس دعوִيصع" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-ل | -ر | [-س] غروبدعو وسدִيسك." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "ماناغع تهع بִيوس درִيوع ماپ‎پ‎ִينغس." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "دو نوت وسع اپ‎م تو هالت تهع صومپ‎وتعر." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "هالت تهع سيستعم, ִيف پ‎وسسִيبلع وسִينغ اپ‎م." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "نو اپ‎م فووند" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"وعرسִيون %u.%u\n" +"32-بִيت صس = 0كس%x, لعن = 0كس%x, وففسعت = 0كس%x\n" +"16-بִيت صس = 0كس%x, لعن = 0كس%x\n" +"دس = 0كس%x, لعن = 0كس%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-بִيت پ‎روتعصتعد ִينتعرفاصع سوپ‎پ‎ورتعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-بִيت پ‎روتعصتعد ִينتعرفاصع ونسوپ‎پ‎ورتعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-بִيت پ‎روتعصتعد ִينتعرفاصع سوپ‎پ‎ورتعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-بִيت پ‎روتعصتعد ִينتعرفاصع ونسوپ‎پ‎ورتعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "صپ‎و ִيدلع سلووس دوون پ‎روصعسسور\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "صپ‎و ִيدلع دوعسن'ت سلوو دوون پ‎روصعسسور\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "اپ‎م دִيسابلعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "اپ‎م عنابلعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "اپ‎م دִيسعنغاغعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "اپ‎م عنغاغعد\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "سهوو اپ‎م ִينفورماتִيون." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "فִيلعنامع ور تعمپ‎و اند نوتعس عكسپ‎عصتعد" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "ִينوالִيد تعمپ‎و ִين %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "فִيلع `%s' نوت فووند" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "ونرعصوغنִيزعد نومبعر" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "فִيلع | تعمپ‎و [پ‎ִيتصه1 دوراتִيون1] [پ‎ִيتصه2 دوراتִيون2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "پ‎لاي ا تونع." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "سعت نوملوصك مودع" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "سعت صاپ‎سلوصك مودع" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "سعت سصرولللوصك مودع" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "سعت ִينسعرت مودع" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "سعت پ‎اوسع مودع" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "پ‎رعسس لعفت سهִيفت" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "پ‎رعسس رִيغهت سهִيفت" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "پ‎رعسس سيسرق" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "پ‎رعسس نوملوصك كعي" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "پ‎رعسس صاپ‎سلوصك كعي" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "پ‎رعسس سصرولللوصك كعي" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "پ‎رعسس ִينسعرت كعي" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "پ‎رعسس لعفت الت" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "پ‎رعسس رִيغهت الت" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "پ‎رعسس لعفت صترل" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "پ‎رعسس رִيغهت صترل" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "دون'ت وپ‎داتع لعد ستاتع" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[كعيستروكع1] [كعيستروكع2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "عمولاتع ا كعيستروكع سعقوعنصع" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "رون `غو' تو رعسومع غروب." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "رعتورن تو ִيععع1275 پ‎رومپ‎ت." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "ساوع رعاد والوع ִينتو وارִيابلع وارنامع." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "وارنامع" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "پ‎ورت" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "رعاد 8-بִيت والوع فروم پ‎ورت." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "رعاد 16-بִيت والوع فروم پ‎ورت." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "رعاد 32-بִيت والوع فروم پ‎ورت." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "پ‎ورت والوع [ماسك]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "ورִيتع 8-بִيت والوع تو پ‎ورت." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "ورִيتع 16-بִيت والوع تو پ‎ورت." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "اددر والوع [ماسك]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "ورִيتع 32-بִيت والوع تو پ‎ورت." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "وارִيابلع `%s' ִيسن'ت سعت" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "لواد ا كعيبوارد لايووت." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "صهعصك سهִيفت كعي." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "صهعصك صونترول كعي." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "صهعصك الت كعي." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "صهعصك كعي مودִيفִيعر ستاتوس." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "صان'ت فִيند صومماند `%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "عنتعر پ‎اسسوورد: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "پ‎ارسع لعغاصي صونفִيغ ִين سامع صونتعكست" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "پ‎ارسع لعغاصي صونفִيغ ִين نعو صونتعكست" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "پ‎ارسع لعغاصي صونفִيغ ִين سامع صونتعكست تاكִينغ ونلي معنو عنترִيعس" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "پ‎ارسع لعغاصي صونفִيغ ִين نعو صونتعكست تاكִينغ ونلي معنو عنترִيعس" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--نو-معم-وپ‎تִيون] [--تيپ‎ع=تيپ‎ع] فִيلع [ارغ ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "سִيمولاتع غروب-لعغاصي `كعرنعل' صومماند" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "فִيلع [ارغ ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "سִيمولاتع غروب-لعغاصي `ִينִيترد' صومماند" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "سִيمولاتع غروب-لعغاصي `مودولعنوونزִيپ‎' صومماند" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--مد5] پ‎اسسود [فִيلع]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "سִيمولاتع غروب-لعغاصي `پ‎اسسوورد' صومماند" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "سִيمولاتع غروب-لعغاصي `پ‎اسسوورد' صومماند ִين معنو عنتري مودع" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "سپ‎عصִيفي فִيلعنامع." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "سكִيپ‎ سִيغناتورع-صهعصكִينغ وف تهع عنوִيرونمعنت فִيلع." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-ف فִيلع] [-س|--سكִيپ‎-سִيغ] [وارִيابلع_نامع_تو_وهִيتعلִيست] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "لواد وارִيابلعس فروم عنوִيرونمعنت بلوصك فִيلع." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-ف فִيلع]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "لִيست وارִيابلعس فروم عنوִيرونمعنت بلوصك فִيلع." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-ف فִيلع] وارִيابلع_نامع [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "ساوع وارִيابلعس تو عنوִيرونمعنت بلوصك فִيلع." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "سهوو ا لونغ لִيست وִيته مورع دعتاִيلعد ִينفورماتִيون." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "پ‎رִينت سִيزعس ִين ا هومان رعادابلع فورمات." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "لִيست الل فִيلعس." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "نعتوورك پ‎روتوصولس:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-ل|-ه|-ا] [فִيلع ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "لִيست دعوִيصعس اند فִيلعس." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "سهوو وعرسִيون 1 تابلعس ونلي." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "سهوو وعرسִيون 2 اند وعرسִيون 3 تابلعس ونلي." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "سهوو اصپ‎ִي ִينفورماتִيون." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "اواִيلابلع رام" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "رعسعروعد رام" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "اصپ‎ִي رعصلاִيمابلع رام" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "اصپ‎ִي نون-وولاتִيلع ستوراغع رام" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "فاولتي رام (بادرام)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "پ‎عرسִيستعنت رام" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "پ‎عرسִيستعنت رام (لعغاصي)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "رام هولدִينغ صورعبووت تابلعس" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "رام هولدִينغ فִيرموارع صودع" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "باسع_اددر = 0كس%llx, لعنغته = 0كس%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "باسع_اددر = 0كس%llx, لعنغته = 0كس%llx, تيپ‎ع = 0كس%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "لִيست معموري ماپ‎ پ‎رووִيدعد بي فִيرموارع." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "لִيست پ‎صִي دعوִيصعس." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "بلعسس فִيلع وف هفس ور هفس+ پ‎ارتִيتִيون فور ִينتعل ماصس." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "بلعسس دִير وف هفس ور هفس+ پ‎ارتִيتִيون فور پ‎پ‎ص ماصس." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "اددر" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "رعاد 8-بִيت والوع فروم اددر." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "رعاد 16-بִيت والوع فروم اددر." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "رعاد 32-بִيت والوع فروم اددر." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "ورִيتع 8-بִيت والوع تو اددر." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "ورִيتع 16-بִيت والوع تو اددر." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "ورִيتع 32-بִيت والوع تو اددر." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "معنو عنتري تيپ‎ع." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "سترִينغ" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "لִيست وف وسعرس اللووعد تو بووت تهִيس عنتري." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "وسعرنامع[,وسعرنامع]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "كعيبوارد كعي تو قوִيصكلي بووت تهִيس عنتري." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "كعيبوارد_كعي" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "وسع سترִينغ اس معنو عنتري بودي." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "معنو عنتري ִيدعنتִيفִيعر." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "تهִيس عنتري صان بع بووتعد بي اني وسعر." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "بلوصك" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "دعفִينع ا معنو عنتري." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "دعفִينع ا سوبمعنو." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "نامع\tرعف صوونت\tدعپ‎عندعنصִيعس\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "سهوو تهִيس معسساغع." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "اددر [سִيزع]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "سهوو معموري صونتعنتس." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "مودولع" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "رعمووع ا مودولع." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "سهوو لوادعد مودولعس." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "عكسִيت فروم غروب." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "نو صس5536 فووند" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "صس5536 ات %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "سيستعم ماناغعمعنت بوس صونتروللعر ִي/و سپ‎اصع ִيس ات 0كس%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "رام سلوت نومبعر %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "ورִيتتعن سپ‎د بيتعس: %d ب.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "توتال فلاسه سִيزع: %d ب.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "معموري تيپ‎ع: ددر2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "پ‎ارت نو: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "معموري تيپ‎ع: ونكنوون." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "پ‎رִينت معموري ִينفورماتִيون." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s دوعس نوت سوپ‎پ‎ورت ووִيدس" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[مودولع1 مودولع2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"سوִيتصه تو ناتִيوع دִيسك درִيوعرس. ִيف نو مودولعس ارع سپ‎عصִيفִيعد دعفاولت سعت (پ‎اتا," +"اهصִي,وسبمس,وهصִي,وهصִي,عهصִي) ִيس وسعد" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"پ‎عرفورم صومماندس ون پ‎ارتִيتִيون.\n" +"وسع `پ‎ارتتوول پ‎ارتִيتִيون هعلپ‎' فور تهع لִيست وف اواִيلابلع صومماندس." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=وال" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "سورري, نو پ‎ارتتوول ִيس اواִيلابلع فور %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "ونكنوون ارغومعنت `%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "پ‎ارتִيتִيون صومماندس" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "وسعر پ‎اسسوورد" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "سعت وسعر پ‎اسسوورد (پ‎لاִينتعكست). ونرعصوممعندعد اند ִينسعصورع." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ִينوالִيد پ‎بكدف2 پ‎اسسوورد" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "وسعر پ‎بكدف2_پ‎اسسوورد" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "سعت وسعر پ‎اسسوورد (پ‎بكدف2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "سعلعصت دعوִيصع بي وعندور اند دعوִيصع ִيدس." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[وعندور]:[دعوִيصع]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "سعلعصت دعوִيصع بي ִيتس پ‎وسִيتִيون ون تهع بوس." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[بوس]:[سلوت][.فونص]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "مִيسسִينغ `%c' سيمبول" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-س پ‎وسִيتִيون] [-د دعوִيصع]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "سهوو راو دومپ‎ وف تهع پ‎صִي صونفִيغوراتִيون سپ‎اصع." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "سعت ا وارִيابلع تو رعتورن والوع." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "دعتعرمִينع درִيوعر." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "دعتعرمִينع پ‎ارتִيتִيون ماپ‎ تيپ‎ع." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "دعتعرمִينع فִيلعسيستعم تيپ‎ع." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "دعتعرمִينع فִيلعسيستعم ووִيد." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "دعتعرمִينع فִيلعسيستعم لابعل." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "فִيلعسيستعم `%s' دوعس نوت سوپ‎پ‎ورت لابعلس" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "دعوִيصع" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "رعترִيعوع دعوִيصع ִينفو." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[عنووار]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "سعت وارִيابلع وִيته وسعر ִينپ‎وت." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "رعبووت تهع صومپ‎وتعر." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "ستورع ماتصهعد صومپ‎ونعنت نومبعر ִين وارنامع." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[نومبعر:]وارنامع" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "رعغعكسپ‎ سترִينغ" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "تعست ִيف رعغعكسپ‎ ماتصهعس سترִينغ." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "نامع [وارִيابلع] [هִينتس]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"سعارصه دعوִيصعس بي فִيلع. ִيف وارִيابلع ִيس سپ‎عصִيفִيعد, تهع فִيرست دعوִيصع فووند ִيس " +"سعت تو ا وارִيابلع." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"سعارصه دعوִيصعس بي لابعل. ִيف وارִيابلع ִيس سپ‎عصִيفִيعد, تهع فִيرست دعوִيصع فووند ִيس " +"سعت تو ا وارִيابلع." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"سعارصه دعوִيصعس بي ووִيد. ִيف وارִيابلع ִيس سپ‎عصִيفִيعد, تهع فִيرست دعوִيصع فووند ִيس " +"سعت تو ا وارִيابلع." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "سعارصه دعوִيصعس بي ا فִيلع." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "سعارصه دعوִيصعس بي ا فִيلعسيستعم لابعل." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "سعارصه دعوִيصعس بي ا فִيلعسيستعم ووִيد." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "سعت ا وارִيابلع تو تهع فִيرست دعوִيصع فووند." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "دو نوت پ‎روبع اني فلوپ‎پ‎ي درִيوع." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"فִيرست تري تهع دعوִيصع هִينت. ִيف هִينت عندس ִين صومما, السو تري سوبپ‎ارتִيتִيونس" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "هִينت" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"فִيرست تري تهع دعوִيصع هִينت ִيف صوررعنتلي روننִينغ ون ִيععع1275. ִيف هִينت عندس ִين " +"صومما, السو تري سوبپ‎ارتִيتִيونس" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"فִيرست تري تهع دعوִيصع هִينت ִيف صوررعنتلي روننִينغ ون بִيوس. ִيف هִينت عندس ִين " +"صومما, السو تري سوبپ‎ارتִيتִيونس" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"فִيرست تري تهع دعوִيصع هִينت ִيف دִيرعصت هاردوارع اصصعسس ִيس سوپ‎پ‎ورتعد. ִيف هִينت " +"عندس ִين صومما, السو تري سوبپ‎ارتִيتִيونس" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"فִيرست تري تهع دعوִيصع هִينت ִيف صوررعنتلي روننִينغ ون عفִي. ִيف هִينت عندس ִين " +"صومما, السو تري سوبپ‎ارتִيتִيونس" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"فִيرست تري تهع دعوִيصع هִينت ִيف صوررعنتلي روننִينغ ون ارص. ִيف هִينت عندس ִين " +"صومما, السو تري سوبپ‎ارتִيتִيونس" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-ف|-ل|-و|-س|-ن] [--هִينت هִينت [--هִينت هִينت] ...] نامع" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"سعارصه دعوִيصعس بي فִيلع, فִيلعسيستعم لابعل ور فִيلعسيستعم ووִيد. ִيف --سعت ִيس " +"سپ‎عصִيفִيعد, تهع فִيرست دعوִيصع فووند ִيس سعت تو ا وارִيابلع. ִيف نو وارִيابلع نامع ִ" +"يس سپ‎عصִيفִيعد, `رووت' ִيس وسعد." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "رعغִيستعر %x وف %x:%02x.%x ִيس %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-س پ‎وسִيتִيون] [-د دعوִيصع] [-و وار] رعغִيستعر[=والوع[:ماسك]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "مانִيپ‎ولاتع پ‎صִي دعوִيصعس." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "وعربوسع صوونتدوون." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "اللوو تو ִينتعرروپ‎ت وִيته عسص." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "نومبعر_وف_سعصوندس" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "واִيت فور ا سپ‎عصִيفִيعد نومبعر وف سعصوندس." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "رووت دִيرعصتوري وف تهع سيسلִينوكس دִيسك [دعفاولت=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"صوررعنت دִيرعصتوري وف سيسلִينوكس [دعفاولت ִيس پ‎ارعنت دִيرعصتوري وف ִينپ‎وت فִيلع]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "اسسومع ִينپ‎وت ִيس ان ִيسولִينوكس صونفִيغوراتִيون فִيلع." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "اسسومع ִينپ‎وت ִيس ا پ‎كسعلִينوكس صونفִيغوراتִيون فִيلع." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "اسسومع ִينپ‎وت ִيس ا سيسلִينوكس صونفִيغوراتִيون فִيلع." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "عكسعصوتع سيسلִينوكس صونفִيغ ִين سامع صونتعكست" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "عكسعصوتع سيسلִينوكس صونفִيغ ִين نعو صونتعكست" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "عكسعصوتع سيسلִينوكس صونفִيغ ִين سامع صونتعكست تاكִينغ ونلي معنو عنترִيعس" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "عكسعصوتع سيسلִينوكس صونفִيغ ִين نعو صونتعكست تاكִينغ ونلي معنو عنترִيعس" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "نو تعرمִينال سپ‎عصִيفִيعد" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "تعرمִينال `%s' ִيسن'ت فووند" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "اصتִيوع ִينپ‎وت تعرمִينالس:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "اواִيلابلع ִينپ‎وت تعرمִينالس:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "اصتִيوع ووتپ‎وت تعرمִينالس:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "اواִيلابلع ووتپ‎وت تعرمִينالس:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--اپ‎پ‎عند|--رعمووع] [تعرمִينال1] [تعرمִينال2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "لִيست ور سعلعصت ان ִينپ‎وت تعرمִينال." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "لִيست ور سعلعصت ان ووتپ‎وت تعرمִينال." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "عكسپ‎رعسسִيون ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "عوالواتع ان عكسپ‎رعسسִيون." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "عكسپ‎رعسسִيون" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "لواد تهع سامع فִيلع ִين مولتִيپ‎لع وايس." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "سپ‎عصִيفي سִيزع فور عاصه رعاد وپ‎عراتִيون" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "ִينوالִيد بلوصك سִيزع" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "فִيلع سִيزع: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "علاپ‎سعد تִيمع: %d.%03d س \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "سپ‎ععد: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-س سִيزع] فִيلعنامع" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "تعست فִيلع رعاد سپ‎ععد." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "نو صومماند ִيس سپ‎عصִيفִيعد" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "علاپ‎سعد تִيمع: %d.%03d سعصوندس \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "صومماند [ارغس]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "معاسورع تִيمع وسعد بي صومماند" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "ترانسلاتع تو وپ‎پ‎عر صاسع." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "ترانسلاتع تو لووعر صاسع." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[وپ‎تִيونس] [سعت1] [سعت2] [سترִينغ]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "ترانسلاتع سعت1 صهاراصتعرس تو سعت2 ִين سترִينغ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "دو نوتهִينغ, سوصصعسسفوللي." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "دو نوتهִينغ, ونسوصصعسسفوللي." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "تعست وسب سوپ‎پ‎ورت." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "سكִيپ‎ سִيغناتورع-صهعصكִينغ وف تهع پ‎وبلִيص كعي فִيلع." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "باد سִيغناتورع" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "پ‎وبلִيص كعي %08x نوت فووند" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "مودولع `%s' ִيسن'ت لوادعد" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-س|--سكִيپ‎-سִيغ] فִيلع سִيغناتورع_فִيلع [پ‎وبكعي_فִيلع]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "وعرִيفي دعتاصهعد سִيغناتورع." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-س|--سكִيپ‎-سִيغ] پ‎وبكعي_فִيلع" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "ادد پ‎وبكعي_فִيلع تو تروستعد كعيس." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "سهوو تهع لִيست وف تروستعد كعيس." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "پ‎وبكعي_ִيد" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "رعمووع پ‎وبكعي_ִيد فروم تروستعد كعيس." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "تعكست-ونلي " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "دִيرعصت صولور, ماسك: %d/%d/%d/%d پ‎وس: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "پ‎العتتعد " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "يوو " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "پ‎لانار " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "هعرصولعس " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "صغا " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "نون-صهاִين 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "مونوصهرومع " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "ونكنوون وִيدعو مودع " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " عدִيد صهعصكسوم ִينوالִيد" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " عدִيد وعرسִيون: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " پ‎رعفعررعد مودع: %uكس%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " نو پ‎رعفعررعد مودع اواִيلابلع\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "ִينوالִيد وִيدعو مودع سپ‎عصִيفִيصاتִيون `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "لִيست وف سوپ‎پ‎ورتعد وִيدعو مودعس:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "لعغعند: ماسك/پ‎وسִيتִيون=رعد/غرععن/بلوع/رعسعروعد" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "اداپ‎تعر `%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " نو ִينفو اواִيلابلع" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " فاִيلعد تو ִينִيتִيالִيزع وִيدعو اداپ‎تعر" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[وكسه[كسد]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"لִيست اواִيلابلع وִيدعو مودعس. ִيف رعسولوتִيون ִيس غִيوعن سهوو ونلي مودعس ماتصهִينغ ִ" +"يت." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[وكسه]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "تعست وִيدعو سوبسيستعم ִين مودع وكسه." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "تعست وִيدعو سوبسيستعم." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[دִير]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "لִيست كسعن ستوراغع." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-ل] غروبووִيد [وارنامع]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"ترانسفورم 64-بִيت ووִيد تو فورمات سوִيتابلع فور كسنو. ִيف -ل ִيس غִيوعن كععپ‎ ִيت " +"لووعرصاسع اس دونع بي بلكִيد." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "فاִيلورع رعادִينغ سعصتور 0كس%llx فروم `%s'" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "فاִيلورع ورִيتִينغ سعصتور 0كس%llx تو `%s'" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "موونت بي ووִيد." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "موونت الل." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "موونت الل وولومعس وִيته `بووت' فلاغ سعت." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "صاننوت وپ‎عن `%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "صاننوت سععك `%s': %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "سوورصع|-و ووִيد|-ا|-ب" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "موونت ا صريپ‎تو دعوִيصع." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"صوولدن'ت فִيند پ‎هيسִيصال وولومع `%s'. سومع مودولعس ماي بع مִيسسִينغ فروم صورع ִ" +"يماغع." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "پ‎هيسִيصال وولومع %s نوت فووند" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "نو معدִيا ִين `%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "صوولدن'ت لواد سها256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "صوولدن'ت لواد سها512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "صوولدن'ت رعاد علִي معتاداتا" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "ورونغ علִي ماغִيص ور وعرسִيون" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "اتتعمپ‎تִينغ تو دعصريپ‎ت ماستعر كعي..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "عنتعر پ‎اسسپ‎هراسع فور %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "سلوت %d وپ‎عنعد\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "اتتعمپ‎ت تو رعاد ور ورִيتع ووتسִيدع وف دִيسك `%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "صاننوت ورִيتع تو صد-روم" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"ناتִيوع دִيسك درִيوعرس ارع ִين وسع. رعفوسִينغ تو وسع فִيرموارع دִيسك ִينتعرفاصع." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "يوور لدم عمبعددִينغ پ‎ارتִيتִيون ִيس توو سمالل; عمبعددִينغ وون'ت بع پ‎وسسִيبلع" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "تهִيس لدم هاس نو عمبعددִينغ پ‎ارتִيتִيون; عمبعددִينغ وون'ت بع پ‎وسسִيبلع" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "دعلعتع تهع سپ‎عصִيفִيعد لووپ‎باصك درִيوع." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-د] دعوִيصعنامع فִيلع." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "ماكع ا وִيرتوال درִيوع فروم ا فִيلع." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "رعلوصاتִيون 0كس%x ִيس نوت ִيمپ‎لعمعنتعد يعت" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "نو سيمبول تابلع" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "تهִيس علف فִيلع ִيس نوت وف تهع رִيغهت تيپ‎ع" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "لواد اند ִينִيتִيالִيزع عفִي عمولاتور." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "فִينالִيزع لوادִينغ وف عفִي عمولاتور." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "ونلواد عفִي عمولاتور." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "سيمبول `%s' نوت فووند" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "لوادعد فونتس:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "فִيلع..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "سپ‎عصִيفي ونع ور مورع فونت فִيلعس تو لواد." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "لִيست تهع لوادعد فونتس." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "توو دععپ‎ نعستִينغ وف سيملִينكس" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "اتتعمپ‎ت تو رعاد پ‎است تهع عند وف فִيلع" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "صوولدن'ت فִيند ا نعصعسساري معمبعر دعوִيصع وف مولتִي-دعوִيصع فִيلعسيستعم" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "نوت ا دִيرعصتوري" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "نوت ا رعغولار فִيلع" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "يوور صورع.ִيمغ ִيس ونوسواللي لارغع. ִيت وون'ت فִيت ִين تهع عمبعددִينغ ارعا" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "ִينوالִيد فִيلع نامع `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "صهعصكسوم وعرִيفִيصاتִيون فاִيلعد" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "نو دعصريپ‎تִيون كعي اواִيلابلع" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "ماص وعرִيفִيصاتִيون فاִيلعد" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "اسسومع ִينپ‎وت ִيس راو." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "اسسومع ִينپ‎وت ִيس هعكس." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "اسسومع ִينپ‎وت ִيس پ‎اسسپ‎هراسع." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "عنتعر زفس پ‎اسسوورد: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-ه|-پ‎|-ر] [فִيلع]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "ִيمپ‎ورت زفس وراپ‎پ‎ִينغ كعي ستورعد ִين فִيلع." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "وִيرتوال دعوִيصع ִيس رعمووعد" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "وִيرتوال دعوִيصع ִيس فاولتعد" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "وִيرتوال دعوִيصع ִيس وففلִينع" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "وִيرتوال دعوִيصع ִيس دعغرادعد" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "وִيرتوال دعوִيصع ִيس ونلִينع" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "ִينصوررعصت وִيرتوال دعوִيصع: نو تيپ‎ع اواִيلابلع" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "لعاف وִيرتوال دعوִيصع (فִيلع ور دִيسك)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "بووتپ‎اته: وناواִيلابلع\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "بووتپ‎اته: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "پ‎اته: وناواִيلابلع" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "پ‎اته: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "دعوִيد: وناواִيلابلع" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "دعوִيد: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "تهִيس ودعو ִيس ا مִيررور" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "تهִيس ودعو ִيس ا راִيدز%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "ִينصوررعصت ودعو" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "ودعو وִيته %d صهִيلدرعن\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "ودعو علعمعنت نومبعر %d ִيسن'ت صوررعصت\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "ودعو علعمعنت نومبعر %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "ونكنوون وִيرتوال دعوִيصع تيپ‎ع: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "پ‎وول ستاتع: اصتִيوع" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "پ‎وول ستاتع: عكسپ‎ورتعد" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "پ‎وول ستاتع: دعسترويعد" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "پ‎وول ستاتع: رعسعروعد فور هوت سپ‎ارع" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "پ‎وول ستاتع: لعوعل 2 ارص دعوִيصع" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "پ‎وول ستاتع: ونִينִيتִيالִيزعد" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "پ‎وول ستاتع: وناواִيلابلع" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "پ‎وول ستاتع: پ‎وتعنتִياللي اصتִيوع" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "پ‎وول نامع: وناواִيلابلع" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "پ‎وول نامع: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "پ‎وول غوִيد: وناواִيلابلع" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "پ‎وول غوִيد: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "ونابلع تو رعترִيعوع پ‎وول ستاتع" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "ونرعصوغنִيزعد پ‎وول ستاتع" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "نو وִيرتوال دعوִيصع ترعع اواִيلابلع" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "پ‎رִينت زفس ִينفو ابووت دعوִيصع." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "فִيلعسيستعم [وارִيابلع]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "پ‎رִينت زفس-بووتفسوبيِ ور ستورع ִيت ִينتو وارִيابلع" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "نوو صوننعصت تهع رعموتع دعبوغغعر, پ‎لعاسع." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "ستارت غدب ستوب ون غִيوعن پ‎ورت" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "برعاك ִينتو غدب" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "ستوپ‎ غدب ستوب" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "پ‎رعماتورع عند وف فִيلع" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "ترانسلاتعس تهع سترִينغ وִيته تهع صوررعنت سعتتִينغس." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"پ‎رعسس عنتعر تو بووت تهع سعلعصتعد وس, `ع' تو عدִيت تهع صومماندس بعفورع بووتִينغ " +"ور `ص' فور ا صومماند-لִينع. عسص تو رعتورن پ‎رعوִيووس معنو." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"پ‎رعسس عنتعر تو بووت تهع سعلعصتعد وس, `ع' تو عدִيت تهع صومماندس بعفورع بووتִينغ " +"ور `ص' فور ا صومماند-لִينع." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "عنتعر: بووت, `ع': وپ‎تִيونس, `ص': صمد-لִينع" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "تهع هִيغهلִيغهتعد عنتري وִيلل بع عكسعصوتعد اوتوماتִيصاللي ִين %dس." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%dس رعماִينִينغ." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dس" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "غروب بووت معنو" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ارغپ‎_هعلپ‎_فمت: %s والوع ִيس لعسس تهان ور عقوال تو %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ارغپ‎_هعلپ‎_فمت پ‎ارامعتعر رعقوִيرعس ا والوع" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ارغپ‎_هعلپ‎_فمت پ‎ارامعتعر موست بع پ‎وسִيتִيوع" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: ونكنوون ارغپ‎_هعلپ‎_فمت پ‎ارامعتعر" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "غارباغع ִين ارغپ‎_هعلپ‎_فمت: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"مانداتوري ور وپ‎تִيونال ارغومعنتس تو لونغ وپ‎تִيونس ارع السو مانداتوري ور " +"وپ‎تִيونال فور اني صوررعسپ‎وندִينغ سهورت وپ‎تִيونس." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ور: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [وپ‎تִيون...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "تري '%s --هعلپ‎' ور '%s --وساغع' فور مورع ִينفورماتִيون.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "رعپ‎ورت بوغس تو %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "ونكنوون سيستعم عررور" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "غִيوع تهִيس هعلپ‎ لִيست" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "غִيوع ا سهورت وساغع معسساغع" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "نامع" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "سعت تهع پ‎روغرام نامع" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "سعصس" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "هانغ فور سعصس سعصوندس (دعفاولت 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "پ‎رִينت پ‎روغرام وعرسִيون" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(پ‎روغرام عررور) نو وعرسִيون كنوون!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: توو ماني ارغومعنتس\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(پ‎روغرام عررور) وپ‎تִيون سهوولد هاوع بععن رعصوغنִيزعد!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: وپ‎تִيون '%s' ִيس امبִيغوووس; پ‎وسسִيبִيلִيتִيعس:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: وپ‎تִيون '--%s' دوعسن'ت اللوو ان ارغومعنت\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: وپ‎تִيون '%c%s' دوعسن'ت اللوو ان ارغومعنت\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: وپ‎تִيون '--%s' رعقوִيرعس ان ارغومعنت\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ونرعصوغنִيزعد وپ‎تִيون '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ونرعصوغنִيزعد وپ‎تִيون '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ִينوالִيد وپ‎تִيون -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: وپ‎تִيون رعقوִيرعس ان ارغومعنت -- '%c'\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: وپ‎تִيون '-و %s' ִيس امبִيغوووس\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: وپ‎تִيون '-و %s' دوعسن'ت اللوو ان ارغومعنت\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: وپ‎تִيون '-و %s' رعقوִيرعس ان ارغومعنت\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "سوصصعسس" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "نو ماتصه" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "ִينوالִيد رعغولار عكسپ‎رعسسִيون" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "ִينوالִيد صوللاتִيون صهاراصتعر" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "ִينوالִيد صهاراصتعر صلاسس نامع" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "تراִيلִينغ باصكسلاسه" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "ִينوالִيد باصك رعفعرعنصع" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "ونماتصهعد [ ور [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "ونماتصهعد ( ور \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "ونماتصهعد \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "ִينوالִيد صونتعنت وف \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "ִينوالִيد رانغع عند" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "معموري عكسهاوستعد" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "ִينوالִيد پ‎رعصعدִينغ رعغولار عكسپ‎رعسسִيون" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "پ‎رعماتورع عند وف رعغولار عكسپ‎رعسسִيون" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "رعغولار عكسپ‎رعسسִيون توو بִيغ" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "ونماتصهعد ) ور \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "ونكنوون رعغعكسپ‎ عررور" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "نو پ‎رعوִيووس رعغولار عكسپ‎رعسسִيون" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "هعللو وورلد" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "ساي `هعللو وورلد'." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "اتتعمپ‎ت تو سععك ووتسִيدع وف تهع فִيلع" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "ونسوپ‎پ‎ورتعد غزִيپ‎ فورمات" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "لزوپ‎ فִيلع صورروپ‎تعد" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "كسز فִيلع صورروپ‎تعد ور ونسوپ‎پ‎ورتعد بلوصك وپ‎تִيونس" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "ִينوالִيد ارصه-دعپ‎عندعنت علف ماغִيص" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[عنووار=والوع]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "سعت ان عنوִيرونمعنت وارִيابلع." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "عنووار" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "رعمووع ان عنوִيرونمعنت وارִيابلع." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ارغ]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "لִيست دعوִيصعس ور فִيلعس." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "ִينسعرت ا مودولع." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "دִيسك `%s' نوت فووند" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "اتتعمپ‎ت تو رعاد ور ورִيتع ووتسִيدع وف پ‎ارتִيتִيون" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "ִينوالִيد ارصه-ִيندعپ‎عندعنت علف ماغִيص" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "دعوִيصع صوونت عكسصععدس لִيمִيت" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "صاننوت ورִيتع تو `%s': %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"تهع دعوִيصع.ماپ‎ عنتري `%s' ִيس ִينوالִيد. ִيغنورִينغ ִيت. پ‎لعاسع صوررعصت ور دعلعتع " +"يوور دعوִيصع.ماپ‎" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"تهع درִيوع نامع `%s' ִين دعوִيصع.ماپ‎ ִيس ִينصوررعصت. وسִينغ %s ִينستعاد. پ‎لعاسع وسع " +"تهع فورم [هفص]د[0-9]* (ع.غ. `هد0' ور `صد')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "صان'ت وپ‎عن `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "دعوִيصع_نامع" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "سعت رووت دعوִيصع." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "وسع فִيلع اس تهع دعوִيصع ماپ‎ [دعفاولت=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "وسع فִيلع اس معمدִيسك" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "وسع غروب فִيلعس ִين تهع دִيرعصتوري دִير [دعفاولت=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "پ‎رִينت وعربوسع معسساغعس." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "واִيت ونتִيل ا دعبوغغعر وִيلل اتتاصه" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "ونكنوون عكسترا ارغومعنت `%s'." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "غروب عمولاتور." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "عررور ִين پ‎ارسִينغ صومماند لִينع ارغومعنتس\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "رون `غدب %s %d', اند سعت ارغس.هولد تو زعرو.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: وارنִينغ:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: ִينفو:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: عررور:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "فִيلع `%s' ִيس توو بִيغ" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "ونكنوون فִيلعسيستعم" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "سهوتدوون فاִيلعد" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "عكسִيت فاִيلعد" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "ووعرفلوو ִيس دعتعصتعد" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "دִيسصاردִينغ ִيمپ‎روپ‎عرلي نعستعد پ‎ارتִيتִيون (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "ونكنوون صومماند `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "دִيسپ‎لاي تهִيس هعلپ‎ اند عكسִيت." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "دִيسپ‎لاي تهع وساغع وف تهִيس صومماند اند عكسִيت." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "مִيسسִينغ مانداتوري وپ‎تִيون فور `%s'" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "تهع ارغومعنت `%s' رعقوִيرعس ان ִينتعغعر" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"ا والوع واس اسسִيغنعد تو تهع ارغومعنت `%s' وهִيلع ִيت دوعسن'ت رعقوִيرع ان " +"ارغومعنت" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "پ‎رִينت باصكتراصع." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "غروب دوعسن'ت كنوو هوو تو هالت تهִيس ماصهִينع يعت!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "دعفاولت سعروعر ִيس ${نعت_دعفاولت_سعروعر}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "ִينوالִيد صولور سپ‎عصִيفִيصاتִيون `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "رعبووت فاִيلعد" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[لعنغته]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "هعكسدومپ‎ راندوم داتا." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "دعوִيصع ترعع موست بع سوپ‎پ‎لִيعد (سعع `دعوִيصعترعع' صومماند)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "ִينوالִيد زִيماغع" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "ִينوالִيد دعوִيصع ترعع" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "لواد لִينوكس." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "لواد ִينִيترد." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "لواد دتب فִيلع." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"پ‎لاִين ִيماغع كعرنعل نوت سوپ‎پ‎ورتعد - رعبوִيلد وִيته صونفִيغ_(و)عفִي_ستوب عنابلعد" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "فاִيلعد تو غعت فدت" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "يوو نععد تو لواد تهع كسعن هيپ‎عروִيسور فִيرست" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "لواد ا كسعن هيپ‎عروִيسور." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "لواد ا كسعن مودولع." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[وپ‎تس]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "بووت بִيوس-باسعد سيستعم." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "لواد انوتهعر بووت لوادعر." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "دִيسپ‎لاي ووتپ‎وت ون الل صونسولعس." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "وسع سعرִيال صونسولع." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "اسك فور فִيلع نامع تو رعبووت فروم." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "وسع صد-روم اس رووت." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "ִينووكع وسعر صونفִيغوراتִيون رووتִينغ." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "عنتعر ִين كدب ون بووت." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "وسع غدب رعموتع دعبوغغعر ִينستعاد وف ددب." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "دִيسابلع الل بووت ووتپ‎وت." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "واִيت فور كعيپ‎رعسس افتعر عوعري لִينع وف ووتپ‎وت." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "وسع صومپ‎ִيلعد-ִين رووت دعوִيصع." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "بووت ִينتو سִينغلع مودع." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "بووت وִيته وعربوسع معسساغعس." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "دون'ت رعبووت, يِوست هالت." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "صهانغع صونفִيغورعد دعوִيصعس." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "صومونִيت[,سپ‎ععد]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "دִيسابلع سمپ‎." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "دִيسابلع اصپ‎ִي." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "دون'ت دִيسپ‎لاي بووت دִياغنوستִيص معسساغعس." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "بووت وִيته دعبوغ معسساغعس." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "سوپ‎پ‎رعسس نورمال ووتپ‎وت (وارنִينغس رعماִين)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[اددر|صومونִيت][,سپ‎ععد]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "نامع" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "تيپ‎ع" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "اددر" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "سִيزع" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "بووتִينغ ִين بلִيند مودع" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "لواد كعرنعل وف فرععبسد." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "لواد كعرنعل وف وپ‎عنبسد." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "لواد كعرنعل وف نعتبسد." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "لواد فرععبسد عنو." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "لواد فرععبسد كعرنعل مودولع." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "لواد نعتبسد كعرنعل مودولع." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "لواد نعتبسد كعرنعل مودولع (علف)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "لواد فرععبسد كعرنعل مودولع (علف)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "لواد كوپ‎عنبسد رامدִيسك." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "لواد انوتهعر صورعبووت پ‎ايلواد" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "لعغاصي `اسك' پ‎ارامعتعر نو لونغعر سوپ‎پ‎ورتعد." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s ִيس دعپ‎رعصاتعد. وسع سعت غفكسپ‎ايلواد=%s بعفورع لִينوكس صومماند ִينستعاد.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s ִيس دعپ‎رعصاتعد. وغا مودع %d ִيسن'ت رعصوغنִيزعد. وسع سعت " +"غفكسپ‎ايلواد=وִيدتهكسهعִيغهت[كسدعپ‎ته] بعفورع لִينوكس صومماند ִينستعاد.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--فورصع|--بپ‎ب] فִيلع" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "تهع سִيزع وف `%s' ִيس توو لارغع" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "لواد فرععدوس كعرنعل.سيس." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "لواد نتلدر ور بووتمغر." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "ووعررִيدع غوعسسعد ماپ‎پ‎ִينغ وف پ‎لان9 دعوִيصعس." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "غروبدعوִيصع=پ‎لان9دعوִيصع" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "كعرنعل ارغس" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "لواد پ‎لان9 كعرنعل." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "لواد ا پ‎كسع ִيماغع." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "لواد تروعصريپ‎ت ִيسو." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "ִينִيترد الرعادي لوادعد" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "لواد مودولع." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "پ‎رعسس اني كعي تو لاونصه كسنو" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "لواد `دعوִيصع-پ‎روپ‎عرتִيعس' دومپ‎." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "صوولد نوت لوصاتع فپ‎سوا درִيوعر" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "فپ‎سوا پ‎روتوصول واسن'ت ابلع تو فִيند تهع ִينتعرفاصع" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "نو فپ‎سوا فووند" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "فپ‎سوا رعوִيسִيون: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "فִيلع [ارغس...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "دִيسپ‎لاي فپ‎سوا وعرسִيون." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "وارنִينغ: نو صونسولع وִيلل بع اواִيلابلع تو وس" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "لواد ا مولتִيبووت 2 كعرنعل." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "لواد ا مولتִيبووت 2 مودولع." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "لواد ا مولتִيبووت كعرنعل." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "لواد ا مولتִيبووت مودولع." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "باصكغرووند ִيماغع مودع." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "سترعتصه|نورمال" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "لواد كسنو ִيماغع." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "لواد 64-بִيت كسنو ִيماغع." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "لواد كسنو عكستعنسִيون پ‎اصكاغع." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "لواد كسنو عكستعنسִيون." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "دִيرعصتوري [وسبوندلعرعقوִيرعد]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "لواد كسنو عكستعنسִيون دִيرعصتوري." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "لواد كسنو رامدִيسك. ִيت وִيلل بع اواִيلابلع ִين وس اس مد0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "لواد ا سپ‎لاسه ִيماغع فور كسنو." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "لواد ان ִيماغع وف هִيبعرناتعد كسنو." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "اددر1,ماسك1[,اددر2,ماسك2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "دعصلارع معموري رعغִيونس اس فاولتي (بادرام)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "فروم[ك|م|غ] تو[ك|م|غ]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "رعمووع اني معموري رعغִيونس ִين سپ‎عصִيفִيعد رانغع." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "فوور ارغومعنتس عكسپ‎عصتعد" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "ونرعصوغنִيسعد نعتوورك ִينتعرفاصع `%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "نو دهصپ‎ ִينفو فووند" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "نو دهصپ‎ وپ‎تִيونس فووند" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "نو دهصپ‎ وپ‎تִيون %d فووند" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "ونرعصوغنִيسعد دهصپ‎ وپ‎تִيون فورمات سپ‎عصִيفִيصاتִيون `%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "نو نعتوورك صارد فووند" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "صوولدن'ت اوتوصونفִيغورع %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[صارد]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "پ‎عرفورم ا بووتپ‎ اوتوصونفִيغوراتִيون" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "وار ִينتعرفاصع نومبعر دعسصرִيپ‎تִيون" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"رعترִيعوع دهصپ‎ وپ‎تִيون اند ساوع ִيت ִينتو وار. ִيف وار ִيس - تهعن پ‎رִينت تهع والوع." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "نو دنس سعروعرس صونفִيغورعد" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "دوماִين نامع صومپ‎ونعنت ִيس توو لونغ" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "نو دنس رعصورد فووند" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "نو دنس رعپ‎لي رعصعִيوعد" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "ونلي ִيپ‎و4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "ونلي ִيپ‎و6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "پ‎رعفعر ִيپ‎و4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "پ‎رعفعر ִيپ‎و6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "ִينوالִيد ارغومعنت" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "اددرعسس دنسسعروعر" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "پ‎عرفورم ا دنس لووكوپ‎" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "دنسسعروعر" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "ادد ا دنس سعروعر" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "رعمووع ا دنس سعروعر" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "لִيست دنس سعروعرس" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "صوولدن'ت سعند نعتوورك پ‎اصكعت" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-بִيت پ‎روتعصتعد ִينتعرفاصع سوپ‎پ‎ورتعد\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "ونسوپ‎پ‎ورتعد هتتپ‎ رعسپ‎ونسع" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "ونسوپ‎پ‎ورتعد هتتپ‎ عررور %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "تִيمع ووت وپ‎عنִينغ `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "تִيمعووت: صوولد نوت رعسولوع هاردوارع اددرعسس" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "ونرعسولوابلع اددرعسس %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "ونرعصوغنִيسعد نعتوورك اددرعسس `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "دعستִيناتִيون ونرعاصهابلع" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "رووتع لووپ‎ دعتعصتعد" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "اددرعسس نوت فووند" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "يوو صان'ت دعلعتع تهִيس اددرعسس" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "ونسوپ‎پ‎ورتعد هو اددرعسس تيپ‎ع %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "ونسوپ‎پ‎ورتعد اددرعسس تيپ‎ع %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "تهرعع ارغومعنتس عكسپ‎عصتعد" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "صارد نوت فووند" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "تعمپ‎وراري" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "ونكنوون اددرعسس تيپ‎ع %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "نو سعروعر ִيس سپ‎عصִيفִيعد" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "تִيمعووت رعادִينغ `%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "سهورتنامع صارد اددرعسس [هواددرعسس]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "ادد ا نعتوورك اددرعسس." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[صارد [هواددرعسس]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "پ‎عرفورم ان ִيپ‎و6 اوتوصونفִيغوراتִيون" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "سهورتنامع" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "دعلعتع ا نعتوورك اددرعسس." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "سهورتنامع نعت [ִينتعرفاصع| غو غاتعواي]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "ادد ا نعتوورك رووتع." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "دعلعتع ا نعتوورك رووتع." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "لִيست نعتوورك رووتعس" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "لִيست نعتوورك صاردس" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "لִيست نعتوورك اددرعسسعس" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "صوننعصتִيون رعفوسعد" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "صوننعصتִيون تִيمعووت" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "عنتعر وسعرنامع: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[وسعرلִيست]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "صهعصك وهعتهعر وسعر ִيس ִين وسعرلִيست." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "پ‎وسسִيبلع صومماندس ارع:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "پ‎وسسִيبلع دعوִيصعس ارع:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "پ‎وسسִيبلع فִيلعس ارع:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "پ‎وسسִيبلع پ‎ارتִيتִيونس ارع:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "پ‎وسسִيبلع ارغومعنتس ارع:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "پ‎وسسִيبلع تهִينغس ارع:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "وارنִينغ: سينتاكس عررور (مִيسسִينغ سلاسه) ִين `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "وارنִينغ: ִينوالִيد فورعغرووند صولور `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "وارنִينغ: ִينوالִيد باصكغرووند صولور `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "عنووار [عنووار] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "عكسپ‎ورت وارִيابلعس." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "سونداي" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "مونداي" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "توعسداي" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "وعدنعسداي" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "تهورسداي" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "فرִيداي" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "ساتورداي" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "مودولع ִيسن'ت لوادعد" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "غنو غروب وعرسִيون %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "عسص ات اني تִيمع عكسִيتس." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"مִينִيمال باسه-لִيكع لִينع عدִيتִينغ ִيس سوپ‎پ‎ورتعد. فور تهع فִيرست وورد, تاب لִيستس " +"پ‎وسسִيبلع صومماند صومپ‎لعتִيونس. انيوهعرع علسع تاب لִيستس پ‎وسسִيبلع دعوִيصع ور " +"فִيلع صومپ‎لعتִيونس. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "غروب>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "صلعار تهع سصرععن." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "عنتعر نورمال مودع." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "عكسִيت فروم نورمال مودع." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "پ‎رعسس اني كعي تو صونتִينوع..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "بووتִينغ `%s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "فاللִينغ باصك تو `%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "فاִيلعد تو بووت بوته دعفاولت اند فاللباصك عنترִيعس.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "بووتִينغ ا صومماند لִيست" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"مִينִيموم عماصس-لִيكع سصرععن عدִيتִينغ ִيس سوپ‎پ‎ورتعد. تاب لִيستس صومپ‎لعتִيونس. پ‎رعسس " +"صترل-كس ور ف10 تو بووت, صترل-ص ور ف2 فور ا صومماند-لִينع ور عسص تو دִيسصارد " +"عدִيتس اند رعتورن تو تهع غروب معنو." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "وسع تهع %C اند %C كعيس تو سعلعصت وهִيصه عنتري ִيس هִيغهلִيغهتعد." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "ب" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "كִيب" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "مִيب" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "غִيب" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "تִيب" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "پ‎ִيب" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "ك" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "م" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "غ" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "ت" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "پ‎" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "ب/س" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "كִيب/س" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "مִيب/س" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "غִيب/س" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "تִيب/س" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "پ‎ִيب/س" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "پ‎ارتִيتִيون %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "دعوִيصع %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "فִيلعسيستعم صاننوت بع اصصعسسعد" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "فִيلعسيستعم تيپ‎ع %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- لابعل `%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- لاست مودִيفִيصاتִيون تִيمع %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "نو كنوون فִيلعسيستعم دعتعصتعد" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - پ‎ارتִيتִيون ستارت ات %llu%sكִيب" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - سعصتور سִيزع %uب" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - توتال سִيزع ونكنوون" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - توتال سִيزع %llu%sكִيب" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--مورع--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "صاننوت وپ‎عن صونفִيغوراتִيون فִيلع `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "نو صومپ‎رعسسִيون ִيس اواִيلابلع فور يوور پ‎لاتفورم" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "نو ִيععع1275 رووتִينعس ارع اواִيلابلع فور يوور پ‎لاتفورم" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "نو عفִي رووتִينعس ارع اواִيلابلع فور يوور پ‎لاتفورم" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "نو سغִي رووتִينعس ارع اواִيلابلع فور يوور پ‎لاتفورم" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "نو راندوم نومبعر غعنعراتور ִيس اواִيلابلع فور يوور وس" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "فاִيلعد تو صرعاتع `دعوִيصع-ماپ‎پ‎عر' ترعع" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "صان'ت موونت عنصريپ‎تعد وولومع `%s': %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "صوولدن'ت وپ‎عن غعوم" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "صوولدن'ت فִيند غعلִي صونسومعر" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "صوولدن'ت رعترִيعوع غعلִي ووִيد" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "صوولدن'ت فִيند غعوم `پ‎ارت' صلاسس" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "ونالִيغنعد دعوִيصع سִيزع" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "اتتعمپ‎تִينغ تو رعاد تهع صورع ִيماغع `%s' فروم غروب" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "اتتعمپ‎تִينغ تو رعاد تهع صورع ִيماغع `%s' فروم غروب اغاִين" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "صاننوت رعاد `%s' صوررعصتلي" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "فاִيلعد تو رعاد تهع سعصتورس وف تهع صورع ִيماغع" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "صاننوت غعت ترانسلاتور صومماند لִينع فور پ‎اته `%s': %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "ترانسلاتور صومماند لִينع ִيس عمپ‎تي فور پ‎اته `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"ترانسلاتور `%s' فور پ‎اته `%s' هاس سعوعرال نون-وپ‎تִيون ووردس, ات لعاست `%s' " +"اند `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"ترانسلاتور `%s' فور پ‎اته `%s' ִيس غִيوعن ونلي وپ‎تִيونس, صاننوت فִيند دعوִيصع پ‎ارت" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "ستوراغع ִينفورماتִيون فور `%s' دوعس نوت ִينصلودع تيپ‎ع" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "`%s' ִيس نوت ا لوصال دִيسك" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"ستوراغع ִينفورماتִيون فور `%s' ִيندִيصاتعس نعִيتهعر ا پ‎لاִين پ‎ارتִيتִيون نور ا پ‎لاִين " +"دִيسك" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "صان'ت رعترִيعوع بلوصكلִيستس: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "بلوصكسִيزع ִيس نوت دִيوִيسִيبلع بي 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "ִينوالִيد زعرو بلوصكسִيزع" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "صان'ت رعترִيعوع بلوصكلִيستس" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ִيوصتل راִيد_وعرسִيون عررور: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "ونسوپ‎پ‎ورتعد راִيد وعرسִيون: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ִيوصتل غعت_ارراي_ִينفو عررور: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ִيوصتل غعت_دִيسك_ִينفو عررور: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "ونابلع تو وپ‎عن سترعام فروم %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "ونكنوون كִيند وف راִيد دعوִيصع `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "`وبپ‎پ‎اته' نوت فووند ִين پ‎ارعنت دִيرس وف `%s', نو ִيععع1275 نامع دִيسصووعري" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "فاִيلعد تو غعت صانونִيصال پ‎اته وف `%s'" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "ونكنوون دعوִيصع تيپ‎ع %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "وساغع: %s دعوִيصع\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "ونابلع تو فورك: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "ونابلع تو صرعاتع پ‎ִيپ‎ع: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "صاننوت رعستورع تهع ورִيغִينال دִيرعصتوري" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "صاننوت ستات `%s': %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "صاننوت ماكع تعمپ‎وراري فִيلع: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "صاننوت ماكع تعمپ‎وراري دִيرعصتوري: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"صوولدن'ت فִيند ִيععع1275 دعوִيصع پ‎اته فور %s.\n" +"يوو وִيلل هاوع تو سعت `بووت-دعوִيصع' وارִيابلع مانواللي" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: نوت فووند" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"`نوسعتعنو' فاִيلعد. \n" +"يوو وִيلل هاوع تو سعت `بووت-دعوִيصع' وارִيابلع مانواللي. ات تهع ִيععع1275 " +"پ‎رومپ‎ت, تيپ‎ع:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "يوو وִيلل هاوع تو سعت `سيستعمپ‎ارتִيتִيون' اند `وسلوادعر' مانواللي." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "نو `/' ִين صانونִيصال فִيلعنامع" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "صيغوִين_صونو_پ‎اته() فاִيلعد" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "صوولدن'ت رعترִيعوع راندوم داتا" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "ִينسوففִيصִيعنت پ‎رִيوִيلعغعس تو اصصعسس فִيرموارع, اسسومִينغ بִيوس" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "نو عفִي رووتִينعس ارع اواִيلابلع وهعن روننִينغ ִين بִيوس مودع" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "ونعكسپ‎عصتعد عفִي عررور" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "صوولدن'ت فִيند ا فرعع بووتنننن سلوت" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"تهִيس غپ‎ت پ‎ارتִيتִيون لابعل صونتاִينس نو بִيوس بووت پ‎ارتִيتִيون; عمبعددִينغ وون'ت بع " +"پ‎وسسִيبلع" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "يوور بִيوس بووت پ‎ارتִيتִيون ִيس توو سمالل; عمبعددִينغ وون'ت بع پ‎وسسִيبلع" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"سعصتور %llu ִيس الرعادي ִين وسع بي راִيد صونتروللعر `%s'; اووִيدִينغ ִيت. پ‎لعاسع " +"اسك تهع مانوفاصتورعر نوت تو ستورع داتا ִين مبر غاپ‎" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"سعصتور %llu ִيس الرعادي ִين وسع بي تهع پ‎روغرام `%s'; اووִيدִينغ ִيت. تهִيس " +"سوفتوارع ماي صاوسع بووت ور وتهعر پ‎روبلعمس ִين فوتورع. پ‎لعاسع اسك ִيتس اوتهورس " +"نوت تو ستورع داتا ִين تهع بووت تراصك" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"وتهعر سوفتوارع ִيس وسִينغ تهع عمبعددִينغ ارعا, اند تهعرع ִيس نوت عنووغه رووم فور " +"صورع.ִيمغ. سوصه سوفتوارع ִيس وفتعن تريִينغ تو ستورع داتا ִين ا واي تهات اووִيدس " +"دعتعصتִيون. وع رعصوممعند يوو ִينوعستִيغاتع" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"تهִيس مسدوس-ستيلع پ‎ارتִيتִيون لابعل هاس نو پ‎وست-مبر غاپ‎; عمبعددִينغ وون'ت بع " +"پ‎وسسִيبلع" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "يوور عمبعددִينغ ارعا ִيس ونوسواللي سمالل. صورع.ִيمغ وون'ت فִيت ִين ִيت." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "ماكع پ‎ارتִيتִيون اصتִيوع" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "نوت ا پ‎رִيماري پ‎ارتִيتִيون" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "پ‎ارتִيتִيون %d ִيس اصتִيوع نوو. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "صلعارعد اصتִيوع فلاغ ون %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "صهانغع پ‎ارتִيتִيون تيپ‎ع" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "سعت `هִيددعن' فلاغ ִين پ‎ارتִيتִيون تيپ‎ع" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "تهع پ‎ارتִيتִيون تيپ‎ع 0كس%x ִيسن'ت والִيد" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "سعتتִينغ پ‎ارتִيتִيون تيپ‎ع تو 0كس%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "صان'ت برعاك 0 لووپ‎س" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "نوت ִين فونصتִيون بودي" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "ִينوالִيد وارִيابلع نامع `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "ونعكسپ‎عصتعد عند وف فִيلع" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[نوم]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "عكسִيت فروم لووپ‎س" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "صونتִينوع لووپ‎س" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "سهִيفت پ‎وسִيتִيونال پ‎ارامعتعرس." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[والوع]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "سعت پ‎وسִيتִيونال پ‎ارامعتعرس." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "رعتورن فروم ا فونصتִيون." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-م (سترعتصه|نورمال)] فִيلع" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "لواد باصكغرووند ִيماغع فور اصتִيوع تعرمִينال." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "صولور" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "سعت باصكغرووند صولور فور اصتִيوع تعرمִينال." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "سهوو صبمعم صونسولع صونتعنت." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "سعت تهع سعرִيال ونִيت." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "سعت تهع سعرִيال پ‎ورت اددرعسس." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "سعت تهع سعرִيال پ‎ورت سپ‎ععد." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "سعت تهع سعرִيال پ‎ورت وورد لعنغته." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "سعت تهع سعرִيال پ‎ورت پ‎ارִيتي." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "سعت تهع سعرִيال پ‎ورت ستوپ‎ بִيتس." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "سعت تهع باسع فرعقوعنصي." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "عنابلع/دִيسابلع رتس/صتس." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "سعرִيال پ‎ورت `%s' ִيسن'ت فووند" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "ونسوپ‎پ‎ورتعد سعرִيال پ‎ورت فلوو صونترول" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[وپ‎تִيونس...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "صونفִيغورع سعرִيال پ‎ورت." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "ونكنوون تعرمִينفو تيپ‎ع `%s'" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "اسصִيִي" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "وتف-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "وִيسواللي-وردعرعد وتف-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "ونكنوون عنصودִينغ" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "صوررعنت تعرمִينفو تيپ‎عس:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "تعرمִينال ִيس اسصִيִي-ونلي [دعفاولت]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "تعرمִينال ִيس لوغִيصال-وردعرعد وتف-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "تعرمִينال ִيس وִيسواللي-وردعرعد وتف-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "تعرمִينال هاس سپ‎عصִيفִيعد غعومعتري." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "وִيدتهكسهعִيغهت." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "ִينصوررعصت تعرمִينال دִيمعنسִيونس سپ‎عصִيفִيصاتִيون" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "تعرمִينال %s ִيسن'ت فووند ور ִيت'س نوت هاندلعد بي تعرمִينفو" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-ا|-و|-و] [-غ وكسه] تعرم [تيپ‎ع]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "سعت تعرمִينفو تيپ‎ع وف تعرم تو تيپ‎ع.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "پ‎رִينت اند عكسعصوتع بلوصك ارغومعنت." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "بִيتماپ‎ فִيلع `%s' ִيس وف ونسوپ‎پ‎ورتعد فورمات" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " وبع ִينفو: وعرسִيون: %d.%d وعم سوفتوارع رعو: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " توتال معموري: %d كִيب\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "نو سوִيتابلع وִيدعو مودع فووند" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "اصصعسس دعنִيعد" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "مودولعس" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "پ‎رع-لواد سپ‎عصִيفִيعد مودولعس مودولعس" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "ִينستالل ونلي مودولعس اند تهعִير دعپ‎عندعنصִيعس [دعفاولت=الل]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "تهعمعس" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "ִينستالل تهعمعس [دعفاولت=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "فونتس" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "ִينستالل فونتس [دعفاولت=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "لوصالعس" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "ִينستالل ونلي لوصالعس [دعفاولت=الل]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "صومپ‎رعسس غروب فִيلعس [وپ‎تִيونال]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "صهووسع تهع صومپ‎رعسسִيون تو وسع فور صورع ִيماغع" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "وسع ִيماغعس اند مودولعس وندعر دִير [دعفاولت=%s/<پ‎لاتفورم>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "وسع ترانسلاتִيونس وندعر دִير [دعفاولت=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "وسع تهعمعس وندعر دִير [دعفاولت=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "عمبعد فִيلع اس پ‎وبلִيص كعي فور سִيغناتورع صهعصكִينغ" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "صاننوت رعنامع تهع فִيلع %s تو %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "دִيسك دوعس نوت عكسִيست, سو فاللִينغ باصك تو پ‎ارتִيتִيون دعوִيصع %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "صومماندس:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "صرعاتع ا بلانك عنوִيرونمعنت بلوصك فִيلع." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "لִيست تهع صوررعنت وارִيابلعس." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "سعت [نامع=والوع ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "سعت وارִيابلعس." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "ونسعت [نامع ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "دعلعتع وارִيابلعس." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "وپ‎تִيونس:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "يوو نععد تو سپ‎عصִيفي ات لعاست ونع صومماند.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "فִيلعنامع صومماند" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "توول تو عدִيت عنوִيرونمعنت بلوصك." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"ִيف فִيلعنامع ִيس `-', تهع دعفاولت والوع %s ִيس وسعد.\n" +"\n" +"تهعرع ִيس نو `دعلعتع' صومماند; ִيف يوو وانت تو دعلعتع تهع وهولع عنوִيرونمعنت\n" +"بلوصك, وسع `رم %s'." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "ִينوالִيد عنوִيرونمعنت بلوصك" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "ִينوالִيد پ‎ارامعتعر %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "عنوִيرونمعنت بلوصك توو سمالل" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "دִيسك رعاد فاִيلس ات وففسعت %lld, لعنغته %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "ִينوالִيد سكִيپ‎ والوع %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "رعاد عررور ات وففسعت %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "صاننوت وپ‎عن وس فִيلع `%s': %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "صاننوت ورִيتع تو تهع ستدووت: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "صومپ‎ارع فاִيل ات وففسعت %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "وس فִيلع %s وپ‎عن عررور: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "`لووپ‎باصك' صومماند فاִيلس: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "`صريپ‎توموونت' صومماند فاִيلس: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "صوولدن'ت رعترִيعوع ووִيد" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "لس پ‎اته" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "لִيست فִيلعس ִين پ‎اته." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "صپ‎ فִيلع لوصال" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "صوپ‎ي فִيلع تو لوصال فִيلع لوصال." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "صات فִيلع" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "صوپ‎ي فִيلع تو ستاندارد ووتپ‎وت." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "صمپ‎ فִيلع لوصال" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "صومپ‎ارع فִيلع وִيته لوصال فִيلع لوصال." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "هعكس فִيلع" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "سهوو صونتعنتس وف فִيلع ִين هعكس." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "صرص فִيلع" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "غعت صرص32 صهعصكسوم وف فִيلع." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "بلوصكلִيست فִيلع" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "دִيسپ‎لاي بلوصكلִيست وف فִيلع." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "كسنو_ووִيد دعوִيصع" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "صومپ‎وتع كسنو ووִيد وف تهع دعوִيصع." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "نوم" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "سكִيپ‎ ن بيتعس فروم ووتپ‎وت فִيلع." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "هاندلع ن بيتعس ִين ووتپ‎وت فִيلع." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "سپ‎عصִيفي تهع نومبعر وف ִينپ‎وت فִيلعس." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "سعت دعبوغ عنوִيرونمعنت وارִيابلع." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "موونت صريپ‎تو دعوִيصعس." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "فִيلع|پ‎رومپ‎ت" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "لواد زفس صريپ‎تو كعي." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "ونصومپ‎رعسس داتا." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "ִينوالִيد دִيسك صوونت.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "دִيسك صوونت موست پ‎رعصعدع دִيسكس لִيست.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "نو صومماند ִيس سپ‎عصִيفִيعد.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "نوت عنووغه پ‎ارامعتعرس تو صومماند.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "ִينوالִيد صومماند %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ִيماغع_پ‎اته صومماندس" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "دعبوغ توول فور فִيلعسيستعم درִيوعر." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "سعت ִينپ‎وت فִيلعنامع فور 32-بִيت پ‎ارت." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "سعت ִينپ‎وت فִيلعنامع فور 64-بִيت پ‎ارت." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "سعت ووتپ‎وت فִيلعنامع. دعفاولت ִيس ستدووت" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[وپ‎تִيونس]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "غلوع 32-بִيت اند 64-بִيت بִيناري ִينتو اپ‎پ‎لع ونִيوعرسال ونع." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "مִيسسִينغ ִينپ‎وت فִيلع\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "صاننوت صوپ‎ي `%s' تو `%s': %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "صان'ت صومپ‎رعسس `%s' تو `%s'" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "صاننوت وپ‎عن دִيرعصتوري `%s': %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "صاننوت دعلعتع `%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "غروب-مكִيماغع ִيس صومپ‎ִيلعد وִيتهووت كسز سوپ‎پ‎ورت" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "ونكنوون صومپ‎رعسسִيون فورمات %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "ونرعصوغنִيزعد صومپ‎رعسسִيون `%s'" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "ونكنوون تارغعت فورمات %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "صاننوت فִيند لوصالع `%s'" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s دوعسن'ت عكسִيست. پ‎لعاسع سپ‎عصִيفي --تارغعت ور --دִيرعصتوري" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "ִينوالִيد مودִينفو فִيلع `%s'" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "ونكنوون پ‎لاتفورم `%s-%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "مورع تهان ونع ִينستالل دعوִيصع?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"ִينستالل غروب ִيماغعس وندعر تهع دִيرعصتوري دִير/%s ִينستعاد وف تهع %s دִيرعصتوري" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "تارغعت" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "ִينستالل غروب فور تارغعت پ‎لاتفورم [دعفاولت=%s]; اواִيلابلع تارغعتس: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"ماكع تهع درִيوع السو بووتابلع اس فلوپ‎پ‎ي (دعفاولت فور فدكس دعوִيصعس). ماي برعاك " +"ون سومع بִيوسعس." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "دعلعتع دعوִيصع ماپ‎ ִيف ִيت الرعادي عكسִيستس" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "ִينستالل عوعن ִيف پ‎روبلعمس ارع دعتعصتعد" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "وسع ִيدعنتִيفִيعر فִيلع عوعن ִيف ووִيد ִيس اواִيلابلع" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"دִيسك مودولع تو وسع (بִيوسدִيسك ور ناتִيوع). تهִيس وپ‎تִيون ִيس ونلي اواִيلابلع ون " +"بִيوس تارغعت." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"دون'ت وپ‎داتع تهع `بووت-دعوִيصع'/`بووت*' نورام وارִيابلعس. تهִيس وپ‎تִيون ִيس ونلي " +"اواִيلابلع ون عفִي اند ִيععع1275 تارغعتس." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "دو نوت پ‎روبع فور فִيلعسيستعمس ִين دعوִيصع" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "دو نوت ִينستالل بووتسعصتور" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"دو نوت اپ‎پ‎لي اني رععد-سولومون صودعس وهعن عمبعددִينغ صورع.ִيمغ. تهִيس وپ‎تִيون ִيس " +"ونلي اواִيلابلع ون كس86 بִيوس تارغعتس." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"تهع ִينستاللاتִيون دعوִيصع ִيس رعمووابلع. تهִيس وپ‎تִيون ִيس ونلي اواִيلابلع ون عفִي." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ִيد" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "تهع ִيد وف بووتلوادعر. تهִيس وپ‎تִيون ִيس ونلي اواִيلابلع ون عفִي اند ماصس." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "وسع دִير اس تهع عفִي سيستعم پ‎ارتִيتִيون رووت." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "وسع دִير فور پ‎پ‎ص ماص ִينستالل." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "وسع فִيلع اس فونت فور لابعل" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "وسع صولور فور لابعل" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "وسع صولور فور لابعل باصكغرووند" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "وسع سترִينغ اس پ‎رودوصت وعرسִيون" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[وپ‎تִيون] [ִينستالل_دعوִيصع]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "ִينستالل غروب ون يوور درִيوع." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"ִينستالل_دعوִيصع موست بع سيستعم دعوִيصع فִيلعنامع.\n" +"%s صوپ‎ִيعس غروب ִيماغعس ִينتو %s. ون سومع پ‎لاتفورمس, ִيت ماي السو ִينستالل غروب ִ" +"ينتو تهع بووت سعصتور." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "تهع درִيوع %s ִيس دعفִينعد مولتִيپ‎لع تִيمعس ִين تهع دعوִيصع ماپ‎ %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "ونابلع تو دعتعرمִينع يوور پ‎لاتفورم. وسع --تارغعت." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "ִينستاللִينغ فور %s پ‎لاتفورم.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "ִينستالل دعوִيصع ִيسن'ت سپ‎عصִيفִيعد" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "صاننوت فִيند عفִي دִيرعصتوري" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "صاننوت فִيند ا دعوִيصع فور %s (ִيس /دعو موونتعد?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "صاننوت فִيند ا غروب درִيوع فور %s. صهعصك يوور دعوִيصع.ماپ‎" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s دوعسن'ت لووك لִيكع ان عفִي پ‎ارتִيتִيون" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "يوو'وع فووند ا بوغ" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "فִيلعسيستعم ون %s ִيس نعִيتهعر هفس نور هفس+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"اتتعمپ‎ت تو ִينستالل تو عنصريپ‎تعد دִيسك وִيتهووت صريپ‎تودִيسك عنابلعد. سعت `%s' ִين " +"فִيلع `%s'" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "صان'ت صرعاتع فִيلع: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "نو هִينتس اواִيلابلع فور يوور پ‎لاتفورم. عكسپ‎عصت رعدوصعد پ‎عرفورمانصع" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "نوت روننִينغ: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "تهع صهوسعن پ‎ارتִيتִيون ִيس نوت ا پ‎رعپ‎ پ‎ارتִيتִيون" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "فاִيلعد تو صوپ‎ي غروب تو تهع پ‎رعپ‎ پ‎ارتִيتִيون" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"تهع پ‎رعپ‎ پ‎ارتִيتִيون ִيس نوت عمپ‎تي. ִيف يوو ارع سورع يوو وانت تو وسع ִيت, رون دد " +"تو صلعار ִيت: `%s'" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "عفִي بووتلوادعر ִيد ִيسن'ت سپ‎عصִيفִيعد." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "وارنִينغ: نو پ‎لاتفورم-سپ‎عصִيفִيص ִينستالل واس پ‎عرفورمعد" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "ִينستاللاتִيون فִينִيسهعد. نو عررور رعپ‎ورتعد." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "بلعسس فور كس86-باسعد ماصس" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "بلعسس فور پ‎پ‎ص-باسعد ماصس" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "نو پ‎اته ور دعوִيصع ִيس سپ‎عصִيفִيعد.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--پ‎پ‎ص پ‎اته|--كس86 فִيلع" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "ماص-ستيلع بلعسس ون هفس ور هفس+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "وساغع: %s [ִينفִيلع [ووتفִيلع]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "فرععتيپ‎ع عررور %d لوادִينغ غليپ‎ه 0كس%x فور و+0كس%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (معدִيال)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (لعفتموست)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (رִيغهتموست)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "ووت وف رانغع سوبستִيتوتִيون (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "ووت وف رانغع لووكوپ‎: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "ونسوپ‎پ‎ورتعد سوبستִيتوتִيون تيپ‎ع: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "ونسوپ‎پ‎ورتعد سوبستִيتوتִيون سپ‎عصִيفִيصاتִيون: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "ونسوپ‎پ‎ورتعد صووعراغع سپ‎عصִيفִيصاتִيون: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "وارنִينغ: ونسوپ‎پ‎ورتعد فونت فعاتورع پ‎ارامعتعرس: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "ساوع ووتپ‎وت ִين فִيلع [رعقوִيرعد]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "سعلعصت فاصع ִيندعكس" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "فروم-تو[,فروم-تو]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "سعت فونت رانغع" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "سعت فونت فامִيلي نامع" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "سִيزع" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "سعت فونت سִيزع" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "سعت فونت دعسصعنت" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "سعت فونت اسصعنت" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "صونوعرت تو بولد فونت" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "فورصع اوتوهִينت" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "دִيسابلع هִينتִينغ" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ִيغنورع بִيتماپ‎ سترִيكعس وهعن لوادִينغ" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ִينوالִيد فونت رانغع" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[وپ‎تִيونس] فونت_فִيلعس" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "صونوعرت صوممون فونت فִيلع فورماتس ִينتو پ‎ف2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "ووتپ‎وت فִيلع موست بع سپ‎عصִيفִيعد" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "فت_ִينִيت_فرععتيپ‎ع فاִيلس" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "صان'ت وپ‎عن فִيلع %s, ִيندعكس %d: عررور %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "صان'ت سعت %dكس%d فونت سִيزع: فرععتيپ‎ع عررور %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "سعت پ‎رعفִيكس دִيرعصتوري" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"عمبعد فִيلع اس ا معمدִيسك ִيماغع\n" +"ִيمپ‎لִيعس `-پ‎ (معمدִيسك)/بووت/غروب' اند ووعررִيدعس اني پ‎رعفִيكس سوپ‎پ‎لִيعد " +"پ‎رعوִيووسلي, بوت تهع پ‎رعفִيكس ִيتسعلف صان بع ووعررִيددعن بي لاتعر وپ‎تִيونس" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "عمبعد فִيلع اس ان عارلي صونفִيغ" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "ادد نوتع سعغمعنت فور صهرپ‎ ִيععع1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "ووتپ‎وت ا غعنعراتعد ִيماغع تو فִيلع [دعفاولت=ستدووت]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "فورمات" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "غعنعراتع ان ִيماغع ִين فورمات" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "اواִيلابلع فورماتس:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "ونكنوون تارغعت فورمات %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[وپ‎تִيون]... [مودولعس]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "ماكع ا بووتابلع ִيماغع وف غروب." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "تارغعت فورمات نوت سپ‎عصִيفִيعد (وسع تهع -و وپ‎تִيون)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "پ‎رعفִيكس نوت سپ‎عصִيفִيعد (وسع تهع -پ‎ وپ‎تִيون)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"`%s' ִيس مִيسصومپ‎ִيلعد: ִيتس ستارت اددرعسس ִيس 0كس%llx ִينستعاد وف 0كس%llx: لد." +"غولد بوغ?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "سعت ִينپ‎وت فִيلعنامع. دعفاولت ִيس ستدִين" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "ونكنوون كعيبوارد سصان ִيدعنتִيفִيعر %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "ونكنوون كعيبوارد سصان صودع 0كس%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "عررور: نو والִيد كعيبوارد لايووت فووند. صهعصك تهع ִينپ‎وت.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "غعنعراتع غروب كعيبوارد لايووت فروم لִينوكس صونسولع ونع." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "رووت دִيرعصتوري وف تفتپ‎ سعروعر" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "رعلاتִيوع سوبدִيرعصتوري ون نعتوورك سعروعر" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"پ‎رعپ‎ارعس غروب نعتوورك بووت ִيماغعس ات نعت_دִيرعصتوري/سوبدִير اسسومִينغ " +"نعت_دִيرعصتوري بعִينغ تفتپ‎ رووت." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "ونسوپ‎پ‎ورتعد پ‎لاتفورم %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"نعتبووت دִيرعصتوري فور %s صرعاتعد. صونفִيغورع يوور دهصپ‎ سعروعر تو پ‎وִينت تو %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "نومبعر وف پ‎بكدف2 ִيتعراتִيونس" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "لعنغته وف غعنعراتعد هاسه" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "لعنغته وف سالت" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "غعنعراتع پ‎بكدف2 پ‎اسسوورد هاسه." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "فاִيلورع تو رعاد پ‎اسسوورد" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "رععنتعر پ‎اسسوورد: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "پ‎اسسووردس دون'ت ماتصه" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "صوولدن'ت رعترִيعوع راندوم داتا فور سالت" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "صريپ‎توغراپ‎هִيص عررور نومبعر %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "پ‎بكدف2 هاسه وف يوور پ‎اسسوورد ִيس %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "نو پ‎اته ִيس سپ‎عصִيفִيعد.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "پ‎اته" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "ترانسفورم ا سيستعم فִيلعنامع ִينتو غروب ونع." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ساوع روم ִيماغعس ִين دִير [وپ‎تִيونال]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "وسع فִيلع اس كسوررִيسو [وپ‎تִيونال]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "وسع سترִينغ اس پ‎رودوصت نامع" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"عنابلع سپ‎ارص بووت. دִيسابلعس هفس+, اپ‎م, ارصس اند بووت اس دִيسك ִيماغع فور ִي386-" +"پ‎ص" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"عنابلع ارصس (بִيغ-عندִيان مִيپ‎س ماصهִينعس, موستلي سغִي) بووت. دִيسابلعس هفس+, اپ‎م, " +"سپ‎ارص64 اند بووت اس دִيسك ִيماغع فور ִي386-پ‎ص" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "ماكع غروب صد-روم, دִيسك, پ‎عندرִيوع اند فلوپ‎پ‎ي بووتابلع ִيماغع." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"غعنعراتعس ا بووتابلع صد/وسب/فلوپ‎پ‎ي ִيماغع. ارغومعنتس وتهعر تهان وپ‎تִيونس تو " +"تهִيس پ‎روغرام ارع پ‎اسسعد تو كسوررִيسو, اند ִيندִيصاتع سوورصع فִيلعس, سوورصع " +"دִيرعصتورִيعس, ور اني وف تهع مكִيسوفس وپ‎تִيونس لִيستعد بي تهع ووتپ‎وت وف `%s'." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "وپ‎تִيون -- سوִيتصهعس تو ناتִيوع كسوررִيسو صومماند مودع." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "ماִيل كسوررִيسو سوپ‎پ‎ورت رعقوعستس تو <بوغ-كسوررִيسو@غنو.ورغ>." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[وپ‎تִيون] سوورصع..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "عنابلִينغ %s سوپ‎پ‎ورت ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"يوور كسوررִيسو دوعسن'ت سوپ‎پ‎ورت `--غروب2-بووت-ִينفو'. سومع فعاتورعس ارع " +"دִيسابلعد. پ‎لعاسع وسع كسوررִيسو 1.2.9 ور لاتعر." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"يوور كسوررִيسو دوعسن'ت سوپ‎پ‎ورت `--غروب2-بووت-ִينفو'. يوور صورع ִيماغع ִيس توو " +"بִيغ. بووت اس دִيسك ִيس دִيسابلعد. پ‎لعاسع وسع كسوررִيسو 1.2.9 ور لاتعر." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"غعنعراتع ا ستاندالونع ִيماغع (صونتاִينִينغ الل مودولعس) ִين تهع سعلعصتعد فورمات" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "غرافت پ‎وִينت سينتاكس (ع.غ. /بووت/غروب/غروب.صفغ=./غروب.صفغ) ִيس اصصعپ‎تعد" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ִيماغع1 [ִيماغع2 ...] موونتپ‎وִينت" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "نععد ان ִيماغع اند موونتپ‎وִينت" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "غִيوعن ارغومعنت ִيس ا سيستعم دعوִيصع, نوت ا پ‎اته" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "سعپ‎اراتع ִيتعمس ִين ووتپ‎وت وسִينغ اسصִيִي نول صهاراصتعرس" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[دعفاولت=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "پ‎رִينت تارغعت" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "اواִيلابلع تارغعتس:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[وپ‎تִيون]... [پ‎اته|دعوִيصع]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"پ‎روبع دعوִيصع ִينفورماتִيون فور ا غִيوعن پ‎اته (ور دعوִيصع, ִيف تهع -د وپ‎تִيون ִيس " +"غִيوعن)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "رعاد تعكست فروم فִيلع." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "وسع صولور فور تعكست" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "وسع صولور فور باصكغرووند" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "سعت تهع لابعل تو رعندعر" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "وسع فִيلع اس فونت (پ‎ف2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "رعندعر اپ‎پ‎لع .دִيسك_لابعل." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "مִيسسִينغ ارغومعنتس\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[پ‎اته]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "صهعصكس غروب سصرִيپ‎ت صونفִيغوراتִيون فִيلع فور سينتاكس عررورس." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "سينتاكس عررور ات لִينع %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "سصرִيپ‎ت `%s' صونتاִينس نو صومماندس اند وִيلل دو نوتهִينغ\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "وسع فִيلع اس تهع بووت ִيماغع [دعفاولت=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "وسع فִيلع اس تهع صورع ִيماغع [دعفاولت=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "نو دعوִيصع ִيس سپ‎عصִيفִيعد.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"سعت وپ‎ ִيماغعس تو بووت فروم دعوִيصع.\n" +"\n" +"يوو سهوولد نوت نورماللي رون تهִيس پ‎روغرام دִيرعصتلي. وسع غروب-ִينستالل ִينستعاد." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "دعوִيصع موست بع ان وس دعوִيصع (ع.غ. /دعو/سدا)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "ִينوالִيد دعوִيصع `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "رووت دִيرعصتوري اس ִيت وִيلل بع سععن ون رونتִيمع [دعفاولت=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"صوررعنت دִيرعصتوري وف سيسلִينوكس اس ִيت وִيلل بع سععن ون رونتִيمع [دعفاولت ִيس " +"پ‎ارعنت دִيرعصتوري وف ִينپ‎وت فִيلع]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "ورִيتع ووتپ‎وت تو فִيلع [دعفاولت=ستدووت]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "ترانسفورم سيسلִينوكس صونفִيغ ִينتو غروب ونع." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "صاننوت صومپ‎رعسس تهع كعرنعل ִيماغع" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "ونكنوون صومپ‎رعسسִيون %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "دعصومپ‎رعسسور ִيس توو بִيغ" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "صورع ִيماغع ִيس توو بִيغ (0كس%x > 0كس%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "كعرنعل ִيماغع ִيس توو بִيغ (0كس%x > 0كس%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "دִيسكبووت.ִيمغ سִيزع موست بع %u بيتعس" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"فوستارت.ִيمغ دوعسن'ت ماتصه تهع كنوون غوود وعرسִيون. پ‎روصععد ات يوور وون رִيسك" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "فִيرموارع ִيماغع ִيس توو بִيغ" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ִينوالִيد لִينع فورمات: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "تهع فִيرست سعصتور وف تهع صورع فִيلع ִيس نوت سعصتور-الִيغنعد" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "نون-سعصتور-الִيغنعد داتا ִيس فووند ִين تهع صورع فִيلع" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "تهع سعصتورس وف تهع صورع فִيلع ارع توو فراغمعنتعد" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "تهع سִيزع وف `%s' ִيس نوت %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "تهع سִيزع وف `%s' ִيس توو سمالل" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"اتتعمپ‎تִينغ تو ִينستالل غروب تو ا دִيسك وִيته مولتִيپ‎لع پ‎ارتִيتִيون لابعلس ور بوته " +"پ‎ارتִيتִيون لابعل اند فִيلعسيستعم. تهִيس ִيس نوت سوپ‎پ‎ورتعد يعت." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "ونابلع تو ִيدعنتִيفي ا فִيلعسيستعم ִين %s; سافعتي صهعصك صان'ت بع پ‎عرفورمعد" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s اپ‎پ‎عارس تو صونتاִين ا %s فִيلعسيستعم وهִيصه ִيسن'ت كنوون تو رعسعروع سپ‎اصع فور " +"دوس-ستيلع بووت. ִينستاللִينغ غروب تهعرع صوولد رعسولت ִين فִيلعسيستعم دعستروصتִيون" +" ִيف والوابلع داتا ִيس ووعرورִيتتعن بي غروب-سعتوپ‎ (--سكִيپ‎-فس-پ‎روبع دִيسابلعس " +"تهִيس صهعصك, وسع ات يوور وون رִيسك)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s اپ‎پ‎عارس تو صونتاִين ا %s پ‎ارتִيتִيون ماپ‎ وهִيصه ִيسن'ت كنوون تو رعسعروع سپ‎اصع " +"فور دوس-ستيلع بووت. ִينستاللִينغ غروب تهعرع صوولد رعسولت ִين فִيلعسيستعم " +"دعستروصتִيون ִيف والوابلع داتا ִيس ووعرورִيتتعن بي غروب-سعتوپ‎ (--سكִيپ‎-فس-پ‎روبع " +"دִيسابلعس تهִيس صهعصك, وسع ات يوور وون رִيسك)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s اپ‎پ‎عارس تو صونتاִين ا %s پ‎ارتִيتִيون ماپ‎ اند لدم وهִيصه ִيسن'ت كنوون تو بع ا " +"سافع صومبִيناتִيون. ִينستاللִينغ غروب تهعرع صوولد رعسولت ִين فִيلعسيستعم " +"دعستروصتִيون ִيف والوابلع داتا ִيس ووعرورִيتتعن بي غروب-سعتوپ‎ (--سكִيپ‎-فس-پ‎روبع " +"دִيسابلعس تهִيس صهعصك, وسع ات يوور وون رִيسك)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"اتتعمپ‎تִينغ تو ִينستالل غروب تو ا پ‎ارتִيتִيونلعسس دִيسك ور تو ا پ‎ارتִيتִيون. تهִيس ִ" +"يس ا باد ִيدعا." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"اتتعمپ‎تִينغ تو ִينستالل غروب تو ا دִيسك وִيته مولتִيپ‎لع پ‎ارتִيتִيون لابعلس. تهִيس ִ" +"يس نوت سوپ‎پ‎ورتعد يعت." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "پ‎ارتִيتִيون ستيلع `%s' دوعسن'ت سوپ‎پ‎ورت عمبعددִينغ" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "فִيلع سيستعم `%s' دوعسن'ت سوپ‎پ‎ورت عمبعددִينغ" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "يوور عمبعددִينغ ارعا ִيس ونوسواللي سمالل. صورع.ִيمغ وون'ت فִيت ִين ִيت." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "نو تعرمִيناتور ִين تهع صورع ִيماغع" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "صورع.ִيمغ وعرسִيون مִيسماتصه" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"عمبعددִينغ ִيس نوت پ‎وسسִيبلع, بوت تهִيس ִيس رعقوִيرعد فور راִيد اند لوم ִينستالل" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "صان'ت دعتعرمִينع فִيلعسيستعم ون %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "فִيلعسيستعم `%s' دوعسن'ت سوپ‎پ‎ورت بلوصكلִيستس" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "عمبعددִينغ ִيس نوت پ‎وسسִيبلع, بوت تهִيس ִيس رعقوִيرعد فور صروسس-دִيسك ִينستالل" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"عمبعددִينغ ִيس نوت پ‎وسسִيبلع. غروب صان ونلي بع ִينستاللعد ִين تهִيس سعتوپ‎ بي " +"وسִينغ بلوصكلִيستس. هووعوعر, بلوصكلִيستس ارع ونرعلִيابلع اند تهعִير وسع ִيس " +"دִيسصووراغعد." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "وִيلل نوت پ‎روصععد وִيته بلوصكلִيستس" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "بلوصكلִيستس ارع ִينوالִيد" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "بلوصكلִيستس ارع ִينصومپ‎لعتع" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "وساغع: %s -و ووتپ‎وت صكبماپ‎_ارغومعنتس...\\ن" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "ماكع غروب كعيبوارد لايووت فִيلع." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "پ‎رִينت تهִيس معسساغع اند عكسִيت" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "پ‎رִينت تهع وعرسִيون ִينفورماتִيون اند عكسִيت" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s غعنعراتعس ا كعيبوارد لايووت فور غروب وسִينغ صكبصومپ‎\\ن" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "رعپ‎ورت بوغس تو <بوغ-غروب@غنو.ورغ>." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: وپ‎تִيون رعقوִيرعس ان ارغومعنت -- `%s'\\ن" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "وساغع: %s [وپ‎تִيون]\\ن" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "غعنعراتع ا غروب صونفִيغ فִيلع" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "ووتپ‎وت غعنعراتعد صونفִيغ تو فִيلع [دعفاولت=ستدووت]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "ونرعصوغنִيزعد وپ‎تִيون `%s'\\ن" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: يوو موست رون تهִيس اس رووت\\ن" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: نوت فووند.\\ن" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "غعنعراتִينغ غروب صونفִيغوراتִيون فִيلع ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"سينتاكس عررورس ارع دعتعصتعد ִين غعنعراتعد غروب صونفִيغ فִيلع.\n" +"عنسورع تهات تهعرع ارع نو عررورس ִين /عتص/دعفاولت/غروب\n" +"اند /عتص/غروب.د/* فִيلعس ور پ‎لعاسع فִيلع ا بوغ رعپ‎ورت وִيته\n" +"%s فִيلع اتتاصهعد." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "دونع" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "وارنִينغ:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "وساغع: %s [وپ‎تִيون] معنو_عنتري\\ن" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "سعت تهع دعفاولت بووت معنو عنتري فور غروب, فور تهع نعكست بووت ونلي." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"عكسپ‎عصت غروب ִيماغعس وندعر تهع دִيرعصتوري دִير/%s ִينستعاد وف تهع %s دִيرعصتوري" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"معنو_عنتري ִيس ا نومبعر, ا معنو ִيتعم تִيتلع ور ا معنو ִيتعم ִيدعنتִيفִيعر. پ‎لعاسع " +"نوتع تهات معنو ִيتعمس ִين\n" +"سوبمعنوس ور سوب-سوبمعنوس رعقوִيرع سپ‎عصִيفيִينغ تهع سوبمعنو صومپ‎ونعنتس اند تهعن " +"تهع\n" +"معنو ִيتعم صومپ‎ونعنت. تهع تִيتلعس سهوولد بع سعپ‎اراتعد وسִينغ تهع غرعاتعر-تهان\n" +"صهاراصتعر (>) وִيته نو عكسترا سپ‎اصعس. دعپ‎عندִينغ ون يوور سهعلل سومع صهاراصتعرس ִ" +"ينصلودִينغ > ماي نععد عسصاپ‎ִينغ. مورع ִينفورماتִيون ابووت تهִيس ִيس اواִيلابلع\n" +"ִين تهع غروب مانوال ִين تهع سعصتִيون ابووت تهع 'دعفاولت' صومماند. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "مورع تهان ونع معنو عنتري?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "معنو عنتري نوت سپ‎عصִيفִيعد." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "سعت تهع دعفاولت بووت معنو عنتري فور غروب." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "تهִيس رعقوִيرعس سعتتִينغ غروب_دعفاولت=ساوعد ִين %s/دعفاولت/غروب.\\ن" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "معنو_عنتري ִيس ا نومبعر, ا معنو ִيتعم تִيتلع ور ا معنو ִيتعم ִيدعنتִيفִيعر." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"رعقوعستعد سعرִيال تعرمִينال بوت غروب_سعرִيال_صومماند ִيس ونسپ‎عصִيفִيعد. دعفاولت " +"پ‎ارامعتعرس وִيلل بع وسعد." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "فووند تهعمع: %s\\ن" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "فووند باصكغرووند: %s\\ن" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "ونسوپ‎پ‎ورتعد ִيماغع فورمات" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"سعتتִينغ غروب_تִيمعووت تو ا نون-زعرو والوع وهعن غروب_هִيددعن_تִيمعووت ִيس سعت ִيس " +"نو لونغعر سوپ‎پ‎ورتعد." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "فووند غنو ماصه: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "فووند هورد مودولع: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "سومع هورد ستوفف فووند, بوت نوت عنووغه تو بووت." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, وִيته هورد %s (رعصووعري مودع)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, وִيته هورد %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"پ‎لعاسع دون'ت وسع ولد تִيتلع `%s' فور غروب_دعفاولت, وسع `%s' (فور وعرسִيونس " +"بعفورع 2.00) ور `%s' (فور 2.00 ور لاتعر)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "لوادִينغ غنو ماصه ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "لوادִينغ تهع هورد ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "ادوانصعد وپ‎تִيونس فور %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "لوادִينغ كعرنعل وف ִيللوموس ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, وִيته كفرععبسد %s (رعصووعري مودع)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, وִيته كفرععبسد %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "لوادִينغ كعرنعل وف فرععبسد %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "فووند كعرنعل وف فرععبسد: %s\\ن" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "فووند كعرنعل مودولع دִيرعصتوري: %s\\ن" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, وִيته لִينوكس %s (رعصووعري مودع)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, وִيته لִينوكس %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "لوادִينغ لִينوكس %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "لوادִينغ ִينִيتִيال رامدִيسك ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "فووند لִينوكس ִيماغع: %s\\ن" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "فووند ִينִيترد ִيماغع: %s\\ن" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, وִيته كعرنعل %s (وִيا %s, رعصووعري مودع)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, وִيته كعرنعل %s (وִيا %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "فووند نعتبسد كعرنعل: %s\\ن" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "وִيندووس وִيستا/7 (لوادعر)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "وִيندووس نت/2000/كسپ‎ (لوادعر)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "فووند %s ون %s (%s)\\ن" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-بִيت)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-بִيت)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(ون %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, وִيته كسعن %s اند لִينوكس %s (رعصووعري مودع)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, وִيته كسعن %s اند لִينوكس %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, وִيته كسعن هيپ‎عروִيسور" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "لوادִينغ كسعن %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "كسعن هيپ‎عروִيسور, وعرسִيون %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "ادوانصعد وپ‎تִيونس فور %s (وִيته كسعن هيپ‎عروִيسور)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "فووند %s ون %s\\ن" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s ִيس نوت يعت سوپ‎پ‎ورتعد بي غروب-مكصونفִيغ.\\ن" diff --git a/po/en@boldquot.header b/po/en@boldquot.header new file mode 100644 index 000000000..fedb6a06d --- /dev/null +++ b/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/po/en@cyrillic.gmo b/po/en@cyrillic.gmo new file mode 100644 index 0000000000000000000000000000000000000000..78c81ec2bcc1258b1c92a0e14c93d7d46f537384 GIT binary patch literal 153821 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 literal 0 HcmV?d00001 diff --git a/po/en@cyrillic.po b/po/en@cyrillic.po new file mode 100644 index 000000000..92060cf0d --- /dev/null +++ b/po/en@cyrillic.po @@ -0,0 +1,6793 @@ +# English translations for grub package. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Automatically generated, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02~beta3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2016-02-28 14:23+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en@cyrillic\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "унсуппортед сериал порт спеед" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "унсуппортед сериал порт паритѝ" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "унсуппортед сериал порт стоп битс нумбер" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "унсуппортед сериал порт ўорд ленгтх" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Дон'т лоад хост таблес специфиед бѝ цомма-сепаратед лист." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Лоад онлѝ таблес специфиед бѝ цомма-сепаратед лист." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Еѯпорт версион 1 таблес то тхе ОС." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Еѯпорт версион 2 анд версион 3 таблес то тхе ОС." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Сет ОЕМИД оф РСДП, ѮСДТ анд РСДТ." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Сет ОЕМТАБЛЕ ИД оф РСДП, ѮСДТ анд РСДТ." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Сет ОЕМТАБЛЕ ревисион оф РСДП, ѮСДТ анд РСДТ." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Сет цреатор фиелд оф РСДП, ѮСДТ анд РСДТ." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Сет цреатор ревисион оф РСДП, ѮСДТ анд РСДТ." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Дон'т упдате ЕБДА. Маѝ фиѯ фаилурес ор хангс он соме БИОСес бут макес ит " +"инеффецтиве ўитх ОС нот рецеивинг РСДП фром ГРУБ." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "прематуре енд оф филе %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--еѯцлуде=ТАБЛЕ1,ТАБЛЕ2|--лоад-онлѝ=ТАБЛЕ1,ТАБЛЕ2] ФИЛЕ1 [ФИЛЕ2] " +"[...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Лоад хост АЦПИ таблес анд таблес специфиед бѝ аргументс." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "еррор: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "оут оф меморѝ" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "цаннот реад `%s': %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "АЦПИ схутдоўн фаилед" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Лист девицес." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "филенаме еѯпецтед" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ФИЛЕ" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Принт а блоцк лист." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "ѝоу неед то лоад тхе кернел фирст" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Боот ан оператинг сѝстем." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Но боот тиме статистицс ис аваилабле\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Схоў боот тиме статистицс." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "Диск цацхе статистицс: хитс = %lu (%lu.%02lu%%), миссес = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Но диск цацхе статистицс аваилабле\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Гет диск цацхе инфо." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Аццепт ДОС-стѝле ЦР/НЛ лине ендингс." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Схоў тхе цонтентс оф а филе." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "тўо аргументс еѯпецтед" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Цомпаре филе `%s' ўитх `%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Филес диффер ин сизе: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Филес диффер ат тхе оффсет %llu: 0ѯ%x [%s], 0ѯ%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Тхе филес аре идентицал.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ФИЛЕ1 ФИЛЕ2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Цомпаре тўо филес." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Лоад анотхер цонфиг филе." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Лоад анотхер цонфиг филе ўитхоут цхангинг цонтеѯт." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Лоад анотхер цонфиг филе ўитхоут цхангинг цонтеѯт бут таке онлѝ мену ентриес." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Лоад анотхер цонфиг филе бут таке онлѝ мену ентриес." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[ѝеар-]монтх-даѝ] [хоур:минуте[:сецонд]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Дисплаѝ/сет цуррент датетиме." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "До нот оутпут тхе траилинг неўлине." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Енабле интерпретатион оф бацксласх есцапес." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-е|-н] СТРИНГ" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Дисплаѝ а лине оф теѯт." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Ребоот инто фирмўаре сетуп мену." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Фиѯ видео проблем." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "РОМ имаге ис пресент." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Цан'т енабле РОМ ареа." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Цреате БИОС-лике струцтурес фор бацкўард цомпатибилитѝ ўитх еѯистинг ОС." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "БИОС_ДУМП [ИНТ10_ДУМП]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Лоад БИОС думп." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "СТРИНГ ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Евалуате аргументс ас ГРУБ цоммандс" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "Цхецк иф ФИЛЕ цан бе боотед ас и386 ПАЕ Ѯен унпривилегед гуест кернел" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "Цхецк иф ФИЛЕ цан бе боотед ас ѯ86_64 Ѯен унпривилегед гуест кернел" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "Цхецк иф ФИЛЕ цан бе усед ас Ѯен ѯ86 привилегед гуест кернел" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Цхецк иф ФИЛЕ цан бе усед ас ѯ86 мултибоот кернел" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Цхецк иф ФИЛЕ цан бе усед ас ѯ86 мултибоот2 кернел" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Цхецк иф ФИЛЕ ис АРМ Линуѯ" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Цхецк иф ФИЛЕ ис АРМ64 Линуѯ" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Цхецк иф ФИЛЕ ис ИА64 Линуѯ" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Цхецк иф ФИЛЕ ис МИПС Линуѯ" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Цхецк иф ФИЛЕ ис МИПСЕЛ Линуѯ" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Цхецк иф ФИЛЕ ис СПАРЦ64 Линуѯ" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Цхецк иф ФИЛЕ ис ПОЎЕРПЦ Линуѯ" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Цхецк иф ФИЛЕ ис ѯ86 Линуѯ" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Цхецк иф ФИЛЕ ис ѯ86 Линуѯ суппортинг 32-бит протоцол" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Цхецк иф ФИЛЕ ис ѯ86 кФрееБСД" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Цхецк иф ФИЛЕ ис и386 кФрееБСД" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Цхецк иф ФИЛЕ ис ѯ86_64 кФрееБСД" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Цхецк иф ФИЛЕ ис ѯ86 кНетБСД" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Цхецк иф ФИЛЕ ис и386 кНетБСД" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Цхецк иф ФИЛЕ ис ѯ86_64 кНетБСД" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Цхецк иф ФИЛЕ ис и386 ЕФИ филе" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Цхецк иф ФИЛЕ ис ѯ86_64 ЕФИ филе" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Цхецк иф ФИЛЕ ис ИА64 ЕФИ филе" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Цхецк иф ФИЛЕ ис АРМ64 ЕФИ филе" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Цхецк иф ФИЛЕ ис АРМ ЕФИ филе" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Цхецк иф ФИЛЕ ис хиберфил.сѝс ин хибернатед стате" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Цхецк иф ФИЛЕ ис ѯ86_64 ѮНУ (Мац ОС Ѯ кернел)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Цхецк иф ФИЛЕ ис и386 ѮНУ (Мац ОС Ѯ кернел)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Цхецк иф ФИЛЕ ис ѮНУ (Мац ОС Ѯ кернел) хибернатед имаге" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Цхецк иф ФИЛЕ ис БИОС боотсецтор" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "фалсе" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "ОПТИОНС ФИЛЕ" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Цхецк иф ФИЛЕ ис оф специфиед тѝпе." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "но суцх партитион" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Неў МБР ис ўриттен то `%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ДЕВИЦЕ [ПАРТИТИОН[+/-[ТЍПЕ]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Филл хѝбрид МБР оф ГПТ дриве ДЕВИЦЕ. Специфиед партитионс ўилл бе а парт оф " +"хѝбрид МБР. Уп то 3 партитионс аре аллоўед. ТЍПЕ ис ан МБР тѝпе. + меанс " +"тхат партитион ис ацтиве. Онлѝ оне партитион цан бе ацтиве." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Халтс тхе цомпутер. Тхис цомманд доес нот ўорк он алл фирмўаре " +"имплементатионс." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Специфѝ хасх то усе." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "ХАСХ" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Цхецк хасхес оф филес ўитх хасх лист ФИЛЕ." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Басе дирецторѝ фор хасх лист." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "ДИР" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Дон'т стоп афтер фирст еррор." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Унцомпресс филе бефоре цхецксумминг." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: РЕАД ЕРРОР\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: ХАСХ МИСМАТЦХ\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: ОК\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-х ХАСХ [-ц ФИЛЕ [-п ПРЕФИѮ]] [ФИЛЕ1 [ФИЛЕ2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Цомпуте ор цхецк хасх цхецксум." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-ц ФИЛЕ [-п ПРЕФИѮ]] [ФИЛЕ1 [ФИЛЕ2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Сет Адванцед Поўер Манагемент\n" +"(1=лоў, ..., 254=хигх, 255=офф)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Дисплаѝ поўер моде." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Фреезе АТА сецуритѝ сеттингс унтил ресет." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Дисплаѝ СМАРТ хеалтх статус." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Сет Аутоматиц Ацоустиц Манагемент\n" +"(0=офф, 128=ќуиет, ..., 254=фаст)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Сет стандбѝ тимеоут\n" +"(0=офф, 1=5с, 2=10с, ..., 240=20м, 241=30м, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Сет дриве то стандбѝ моде." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Сет дриве то слееп моде." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Принт дриве идентитѝ анд сеттингс." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Схоў раў цонтентс оф АТА ИДЕНТИФЍ сецтор." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Дисабле/енабле СМАРТ (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "До нот принт мессагес." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "оне аргумент еѯпецтед" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[ОПТИОНС] ДИСК" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Гет/сет АТА диск параметерс." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Усаге:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ПАТТЕРН ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Схоў а хелп мессаге." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Скип оффсет бѝтес фром тхе бегиннинг оф филе." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Реад онлѝ ЛЕНГТХ бѝтес." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[ОПТИОНС] ФИЛЕ_ОР_ДЕВИЦЕ" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Схоў раў цонтентс оф а филе ор меморѝ." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Схоў раў думп оф тхе ЦМОС цонтентс." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "БЍТЕ:БИТ" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Тест бит ат БЍТЕ:БИТ ин ЦМОС." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Цлеар бит ат БЍТЕ:БИТ ин ЦМОС." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Сет бит ат БЍТЕ:БИТ ин ЦМОС." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Схоў цоребоот боот тиме статистицс." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Лист цоребоот таблес." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Цхецк иф ЦПУ суппортс 64-бит (лонг) моде (дефаулт)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Цхецк иф ЦПУ суппортс Пхѝсицал Аддресс Еѯтенсион." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Цхецк фор ЦПУ феатурес." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Схоў тхе цуррент маппингс." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Ресет алл маппингс то тхе дефаулт валуес." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Перформ ботх дирецт анд реверсе маппингс." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Но дривес хаве беен ремаппед" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "ОС диск #нум ------> ГРУБ/БИОС девице" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-л | -р | [-с] грубдев осдиск." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Манаге тхе БИОС дриве маппингс." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "До нот усе АПМ то халт тхе цомпутер." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Халт тхе сѝстем, иф поссибле усинг АПМ." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "но АПМ фоунд" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Версион %u.%u\n" +"32-бит ЦС = 0ѯ%x, лен = 0ѯ%x, оффсет = 0ѯ%x\n" +"16-бит ЦС = 0ѯ%x, лен = 0ѯ%x\n" +"ДС = 0ѯ%x, лен = 0ѯ%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-бит протецтед интерфаце суппортед\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-бит протецтед интерфаце унсуппортед\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-бит протецтед интерфаце суппортед\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-бит протецтед интерфаце унсуппортед\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "ЦПУ Идле слоўс доўн процессор\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "ЦПУ Идле доесн'т слоў доўн процессор\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "АПМ дисаблед\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "АПМ енаблед\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "АПМ дисенгагед\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "АПМ енгагед\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Схоў АПМ информатион." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "филенаме ор темпо анд нотес еѯпецтед" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Инвалид темпо ин %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "филе `%s' нот фоунд" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "унрецогнизед нумбер" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "ФИЛЕ | ТЕМПО [ПИТЦХ1 ДУРАТИОН1] [ПИТЦХ2 ДУРАТИОН2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Плаѝ а туне." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "сет нумлоцк моде" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "сет цапслоцк моде" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "сет сцролллоцк моде" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "сет инсерт моде" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "сет паусе моде" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "пресс лефт схифт" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "пресс ригхт схифт" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "пресс СѝсРќ" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "пресс НумЛоцк кеѝ" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "пресс ЦапсЛоцк кеѝ" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "пресс СцроллЛоцк кеѝ" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "пресс Инсерт кеѝ" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "пресс лефт алт" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "пресс ригхт алт" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "пресс лефт цтрл" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "пресс ригхт цтрл" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "дон'т упдате ЛЕД стате" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[КЕЍСТРОКЕ1] [КЕЍСТРОКЕ2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Емулате а кеѝстроке сеќуенце" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Рун `го' то ресуме ГРУБ." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Ретурн то ИЕЕЕ1275 промпт." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Саве реад валуе инто вариабле ВАРНАМЕ." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "ВАРНАМЕ" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "ПОРТ" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Реад 8-бит валуе фром ПОРТ." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Реад 16-бит валуе фром ПОРТ." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Реад 32-бит валуе фром ПОРТ." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ПОРТ ВАЛУЕ [МАСК]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Ўрите 8-бит ВАЛУЕ то ПОРТ." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Ўрите 16-бит ВАЛУЕ то ПОРТ." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "АДДР ВАЛУЕ [МАСК]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Ўрите 32-бит ВАЛУЕ то ПОРТ." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "вариабле `%s' исн'т сет" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Лоад а кеѝбоард лаѝоут." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Цхецк Схифт кеѝ." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Цхецк Цонтрол кеѝ." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Цхецк Алт кеѝ." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Цхецк кеѝ модифиер статус." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "цан'т финд цомманд `%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Ентер пассўорд: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Парсе легацѝ цонфиг ин саме цонтеѯт" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Парсе легацѝ цонфиг ин неў цонтеѯт" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Парсе легацѝ цонфиг ин саме цонтеѯт такинг онлѝ мену ентриес" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Парсе легацѝ цонфиг ин неў цонтеѯт такинг онлѝ мену ентриес" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--но-мем-оптион] [--тѝпе=ТЍПЕ] ФИЛЕ [АРГ ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Симулате груб-легацѝ `кернел' цомманд" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ФИЛЕ [АРГ ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Симулате груб-легацѝ `инитрд' цомманд" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Симулате груб-легацѝ `модуленоунзип' цомманд" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--мд5] ПАССЎД [ФИЛЕ]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Симулате груб-легацѝ `пассўорд' цомманд" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Симулате груб-легацѝ `пассўорд' цомманд ин мену ентрѝ моде" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Специфѝ филенаме." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Скип сигнатуре-цхецкинг оф тхе енвиронмент филе." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-ф ФИЛЕ] [-с|--скип-сиг] [вариабле_наме_то_ўхителист] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Лоад вариаблес фром енвиронмент блоцк филе." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-ф ФИЛЕ]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Лист вариаблес фром енвиронмент блоцк филе." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-ф ФИЛЕ] вариабле_наме [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Саве вариаблес то енвиронмент блоцк филе." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Схоў а лонг лист ўитх море детаилед информатион." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Принт сизес ин а хуман реадабле формат." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Лист алл филес." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Нетўорк протоцолс:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-л|-х|-а] [ФИЛЕ ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Лист девицес анд филес." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Схоў версион 1 таблес онлѝ." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Схоў версион 2 анд версион 3 таблес онлѝ." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Схоў АЦПИ информатион." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "аваилабле РАМ" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "ресервед РАМ" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "АЦПИ рецлаимабле РАМ" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "АЦПИ нон-волатиле стораге РАМ" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "фаултѝ РАМ (БадРАМ)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "персистент РАМ" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "персистент РАМ (легацѝ)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "РАМ холдинг цоребоот таблес" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "РАМ холдинг фирмўаре цоде" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "басе_аддр = 0ѯ%llx, ленгтх = 0ѯ%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "басе_аддр = 0ѯ%llx, ленгтх = 0ѯ%llx, тѝпе = 0ѯ%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Лист меморѝ мап провидед бѝ фирмўаре." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Лист ПЦИ девицес." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Блесс ФИЛЕ оф ХФС ор ХФС+ партитион фор интел мацс." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Блесс ДИР оф ХФС ор ХФС+ партитион фор ППЦ мацс." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "АДДР" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Реад 8-бит валуе фром АДДР." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Реад 16-бит валуе фром АДДР." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Реад 32-бит валуе фром АДДР." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Ўрите 8-бит ВАЛУЕ то АДДР." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Ўрите 16-бит ВАЛУЕ то АДДР." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Ўрите 32-бит ВАЛУЕ то АДДР." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Мену ентрѝ тѝпе." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "СТРИНГ" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Лист оф усерс аллоўед то боот тхис ентрѝ." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "УСЕРНАМЕ[,УСЕРНАМЕ]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Кеѝбоард кеѝ то ќуицклѝ боот тхис ентрѝ." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "КЕЍБОАРД_КЕЍ" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Усе СТРИНГ ас мену ентрѝ бодѝ." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Мену ентрѝ идентифиер." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Тхис ентрѝ цан бе боотед бѝ анѝ усер." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "БЛОЦК" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Дефине а мену ентрѝ." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Дефине а субмену." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Наме\tРеф Цоунт\tДепенденциес\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Схоў тхис мессаге." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "АДДР [СИЗЕ]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Схоў меморѝ цонтентс." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "МОДУЛЕ" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Ремове а модуле." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Схоў лоадед модулес." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Еѯит фром ГРУБ." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Но ЦС5536 фоунд" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "ЦС5536 ат %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Сѝстем манагемент бус цонтроллер И/О спаце ис ат 0ѯ%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "РАМ слот нумбер %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Ўриттен СПД бѝтес: %d Б.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Тотал фласх сизе: %d Б.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Меморѝ тѝпе: ДДР2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Парт но: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Меморѝ тѝпе: Ункноўн." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Принт Меморѝ информатион." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s доес нот суппорт УУИДс" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[МОДУЛЕ1 МОДУЛЕ2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Сўитцх то нативе диск дриверс. Иф но модулес аре специфиед дефаулт сет (пата," +"ахци,усбмс,охци,ухци,ехци) ис усед" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Перформ ЦОММАНДС он партитион.\n" +"Усе `парттоол ПАРТИТИОН хелп' фор тхе лист оф аваилабле цоммандс." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=ВАЛ" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Соррѝ, но парттоол ис аваилабле фор %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "ункноўн аргумент `%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "ПАРТИТИОН ЦОММАНДС" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "УСЕР ПАССЎОРД" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Сет усер пассўорд (плаинтеѯт). Унрецоммендед анд инсецуре." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "инвалид ПБКДФ2 пассўорд" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "УСЕР ПБКДФ2_ПАССЎОРД" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Сет усер пассўорд (ПБКДФ2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Селецт девице бѝ вендор анд девице ИДс." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[вендор]:[девице]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Селецт девице бѝ итс поситион он тхе бус." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[бус]:[слот][.фунц]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "миссинг `%c' сѝмбол" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-с ПОСИТИОН] [-д ДЕВИЦЕ]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Схоў раў думп оф тхе ПЦИ цонфигуратион спаце." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Сет а вариабле то ретурн валуе." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Детермине дривер." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Детермине партитион мап тѝпе." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Детермине филесѝстем тѝпе." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Детермине филесѝстем УУИД." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Детермине филесѝстем лабел." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "филесѝстем `%s' доес нот суппорт лабелс" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ДЕВИЦЕ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Ретриеве девице инфо." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ЕНВВАР]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Сет вариабле ўитх усер инпут." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Ребоот тхе цомпутер." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Сторе матцхед цомпонент НУМБЕР ин ВАРНАМЕ." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[НУМБЕР:]ВАРНАМЕ" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "РЕГЕѮП СТРИНГ" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Тест иф РЕГЕѮП матцхес СТРИНГ." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "НАМЕ [ВАРИАБЛЕ] [ХИНТС]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Сеарцх девицес бѝ филе. Иф ВАРИАБЛЕ ис специфиед, тхе фирст девице фоунд ис " +"сет то а вариабле." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Сеарцх девицес бѝ лабел. Иф ВАРИАБЛЕ ис специфиед, тхе фирст девице фоунд ис " +"сет то а вариабле." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Сеарцх девицес бѝ УУИД. Иф ВАРИАБЛЕ ис специфиед, тхе фирст девице фоунд ис " +"сет то а вариабле." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Сеарцх девицес бѝ а филе." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Сеарцх девицес бѝ а филесѝстем лабел." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Сеарцх девицес бѝ а филесѝстем УУИД." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Сет а вариабле то тхе фирст девице фоунд." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "До нот пробе анѝ флоппѝ дриве." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Фирст трѝ тхе девице ХИНТ. Иф ХИНТ ендс ин цомма, алсо трѝ субпартитионс" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "ХИНТ" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Фирст трѝ тхе девице ХИНТ иф цуррентлѝ руннинг он ИЕЕЕ1275. Иф ХИНТ ендс ин " +"цомма, алсо трѝ субпартитионс" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Фирст трѝ тхе девице ХИНТ иф цуррентлѝ руннинг он БИОС. Иф ХИНТ ендс ин " +"цомма, алсо трѝ субпартитионс" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Фирст трѝ тхе девице ХИНТ иф дирецт хардўаре аццесс ис суппортед. Иф ХИНТ " +"ендс ин цомма, алсо трѝ субпартитионс" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Фирст трѝ тхе девице ХИНТ иф цуррентлѝ руннинг он ЕФИ. Иф ХИНТ ендс ин " +"цомма, алсо трѝ субпартитионс" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Фирст трѝ тхе девице ХИНТ иф цуррентлѝ руннинг он АРЦ. Иф ХИНТ ендс ин " +"цомма, алсо трѝ субпартитионс" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-ф|-л|-у|-с|-н] [--хинт ХИНТ [--хинт ХИНТ] ...] НАМЕ" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Сеарцх девицес бѝ филе, филесѝстем лабел ор филесѝстем УУИД. Иф --сет ис " +"специфиед, тхе фирст девице фоунд ис сет то а вариабле. Иф но вариабле наме " +"ис специфиед, `роот' ис усед." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Регистер %x оф %x:%02x.%x ис %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-с ПОСИТИОН] [-д ДЕВИЦЕ] [-в ВАР] РЕГИСТЕР[=ВАЛУЕ[:МАСК]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Манипулате ПЦИ девицес." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Вербосе цоунтдоўн." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Аллоў то интеррупт ўитх ЕСЦ." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "НУМБЕР_ОФ_СЕЦОНДС" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Ўаит фор а специфиед нумбер оф сецондс." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "роот дирецторѝ оф тхе сѝслинуѯ диск [дефаулт=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"цуррент дирецторѝ оф сѝслинуѯ [дефаулт ис парент дирецторѝ оф инпут филе]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "ассуме инпут ис ан исолинуѯ цонфигуратион филе." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "ассуме инпут ис а пѯелинуѯ цонфигуратион филе." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "ассуме инпут ис а сѝслинуѯ цонфигуратион филе." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Еѯецуте сѝслинуѯ цонфиг ин саме цонтеѯт" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Еѯецуте сѝслинуѯ цонфиг ин неў цонтеѯт" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Еѯецуте сѝслинуѯ цонфиг ин саме цонтеѯт такинг онлѝ мену ентриес" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Еѯецуте сѝслинуѯ цонфиг ин неў цонтеѯт такинг онлѝ мену ентриес" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "но терминал специфиед" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "терминал `%s' исн'т фоунд" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Ацтиве инпут терминалс:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Аваилабле инпут терминалс:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Ацтиве оутпут терминалс:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Аваилабле оутпут терминалс:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--аппенд|--ремове] [ТЕРМИНАЛ1] [ТЕРМИНАЛ2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Лист ор селецт ан инпут терминал." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Лист ор селецт ан оутпут терминал." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ЕѮПРЕССИОН ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Евалуате ан еѯпрессион." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ЕѮПРЕССИОН" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Лоад тхе саме филе ин мултипле ўаѝс." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Специфѝ сизе фор еацх реад оператион" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "инвалид блоцк сизе" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Филе сизе: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Елапсед тиме: %d.%03d с \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Спеед: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-с СИЗЕ] ФИЛЕНАМЕ" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Тест филе реад спеед." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "но цомманд ис специфиед" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Елапсед тиме: %d.%03d сецондс \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "ЦОММАНД [АРГС]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Меасуре тиме усед бѝ ЦОММАНД" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Транслате то уппер цасе." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Транслате то лоўер цасе." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[ОПТИОНС] [СЕТ1] [СЕТ2] [СТРИНГ]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Транслате СЕТ1 цхарацтерс то СЕТ2 ин СТРИНГ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "До нотхинг, суццессфуллѝ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "До нотхинг, унсуццессфуллѝ." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Тест УСБ суппорт." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Скип сигнатуре-цхецкинг оф тхе публиц кеѝ филе." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "бад сигнатуре" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "публиц кеѝ %08x нот фоунд" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "модуле `%s' исн'т лоадед" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-с|--скип-сиг] ФИЛЕ СИГНАТУРЕ_ФИЛЕ [ПУБКЕЍ_ФИЛЕ]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Верифѝ детацхед сигнатуре." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-с|--скип-сиг] ПУБКЕЍ_ФИЛЕ" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Адд ПУБКЕЍ_ФИЛЕ то трустед кеѝс." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Схоў тхе лист оф трустед кеѝс." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ПУБКЕЍ_ИД" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Ремове ПУБКЕЍ_ИД фром трустед кеѝс." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Теѯт-онлѝ " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Дирецт цолор, маск: %d/%d/%d/%d пос: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Палеттед " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "ЍУВ " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Планар " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Херцулес " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "ЦГА " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Нон-цхаин 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Моноцхроме " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Ункноўн видео моде " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " ЕДИД цхецксум инвалид" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " ЕДИД версион: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Преферред моде: %uѯ%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Но преферред моде аваилабле\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "инвалид видео моде специфицатион `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Лист оф суппортед видео модес:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Легенд: маск/поситион=ред/греен/блуе/ресервед" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Адаптер `%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Но инфо аваилабле" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Фаилед то инитиализе видео адаптер" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[ЎѯХ[ѯД]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Лист аваилабле видео модес. Иф ресолутион ис гивен схоў онлѝ модес матцхинг " +"ит." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[ЎѯХ]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Тест видео субсѝстем ин моде ЎѯХ." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Тест видео субсѝстем." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[ДИР]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Лист Ѯен стораге." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-л] ГРУБУУИД [ВАРНАМЕ]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Трансформ 64-бит УУИД то формат суитабле фор ѮНУ. Иф -л ис гивен кееп ит " +"лоўерцасе ас доне бѝ блкид." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "фаилуре реадинг сецтор 0ѯ%llx фром `%s'" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "фаилуре ўритинг сецтор 0ѯ%llx то `%s'" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Моунт бѝ УУИД." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Моунт алл." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Моунт алл волумес ўитх `боот' флаг сет." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "цаннот опен `%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "цаннот сеек `%s': %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "СОУРЦЕ|-у УУИД|-а|-б" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Моунт а црѝпто девице." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Цоулдн'т финд пхѝсицал волуме `%s'. Соме модулес маѝ бе миссинг фром цоре " +"имаге." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "пхѝсицал волуме %s нот фоунд" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "но медиа ин `%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Цоулдн'т лоад сха256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Цоулдн'т лоад сха512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "цоулдн'т реад ЕЛИ метадата" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "ўронг ЕЛИ магиц ор версион" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Аттемптинг то децрѝпт мастер кеѝ..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Ентер пасспхрасе фор %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Слот %d опенед\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "аттемпт то реад ор ўрите оутсиде оф диск `%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "цаннот ўрите то ЦД-РОМ" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Нативе диск дриверс аре ин усе. Рефусинг то усе фирмўаре диск интерфаце." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "ѝоур ЛДМ Ембеддинг Партитион ис тоо смалл; ембеддинг ўон'т бе поссибле" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "тхис ЛДМ хас но Ембеддинг Партитион; ембеддинг ўон'т бе поссибле" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Делете тхе специфиед лоопбацк дриве." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-д] ДЕВИЦЕНАМЕ ФИЛЕ." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Маке а виртуал дриве фром а филе." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "релоцатион 0ѯ%x ис нот имплементед ѝет" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "но сѝмбол табле" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "тхис ЕЛФ филе ис нот оф тхе ригхт тѝпе" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Лоад анд инитиализе ЕФИ емулатор." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Финализе лоадинг оф ЕФИ емулатор." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Унлоад ЕФИ емулатор." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "сѝмбол `%s' нот фоунд" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Лоадед фонтс:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "ФИЛЕ..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Специфѝ оне ор море фонт филес то лоад." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Лист тхе лоадед фонтс." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "тоо дееп нестинг оф сѝмлинкс" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "аттемпт то реад паст тхе енд оф филе" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "цоулдн'т финд а нецессарѝ мембер девице оф мулти-девице филесѝстем" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "нот а дирецторѝ" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "нот а регулар филе" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "ѝоур цоре.имг ис унусуаллѝ ларге. Ит ўон'т фит ин тхе ембеддинг ареа" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "инвалид филе наме `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "цхецксум верифицатион фаилед" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "но децрѝптион кеѝ аваилабле" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "МАЦ верифицатион фаилед" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Ассуме инпут ис раў." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Ассуме инпут ис хеѯ." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Ассуме инпут ис пасспхрасе." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Ентер ЗФС пассўорд: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-х|-п|-р] [ФИЛЕ]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Импорт ЗФС ўраппинг кеѝ сторед ин ФИЛЕ." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Виртуал девице ис ремовед" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Виртуал девице ис фаултед" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Виртуал девице ис оффлине" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Виртуал девице ис деградед" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Виртуал девице ис онлине" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Инцоррецт виртуал девице: но тѝпе аваилабле" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Леаф виртуал девице (филе ор диск)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Боотпатх: унаваилабле\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Боотпатх: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Патх: унаваилабле" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Патх: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Девид: унаваилабле" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Девид: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Тхис ВДЕВ ис а миррор" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Тхис ВДЕВ ис а РАИДЗ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Инцоррецт ВДЕВ" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "ВДЕВ ўитх %d цхилдрен\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "ВДЕВ елемент нумбер %d исн'т цоррецт\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "ВДЕВ елемент нумбер %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Ункноўн виртуал девице тѝпе: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Поол стате: ацтиве" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Поол стате: еѯпортед" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Поол стате: дестроѝед" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Поол стате: ресервед фор хот спаре" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Поол стате: левел 2 АРЦ девице" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Поол стате: унинитиализед" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Поол стате: унаваилабле" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Поол стате: потентиаллѝ ацтиве" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Поол наме: унаваилабле" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Поол наме: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Поол ГУИД: унаваилабле" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Поол ГУИД: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Унабле то ретриеве поол стате" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Унрецогнизед поол стате" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Но виртуал девице трее аваилабле" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Принт ЗФС инфо абоут ДЕВИЦЕ." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "ФИЛЕСЍСТЕМ [ВАРИАБЛЕ]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Принт ЗФС-БООТФСОБЙ ор сторе ит инто ВАРИАБЛЕ" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Ноў цоннецт тхе ремоте дебуггер, плеасе." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Старт ГДБ стуб он гивен порт" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Бреак инто ГДБ" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Стоп ГДБ стуб" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "прематуре енд оф филе" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Транслатес тхе стринг ўитх тхе цуррент сеттингс." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Пресс ентер то боот тхе селецтед ОС, `е' то едит тхе цоммандс бефоре боотинг " +"ор `ц' фор а цомманд-лине. ЕСЦ то ретурн превиоус мену." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Пресс ентер то боот тхе селецтед ОС, `е' то едит тхе цоммандс бефоре боотинг " +"ор `ц' фор а цомманд-лине." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "ентер: боот, `е': оптионс, `ц': цмд-лине" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Тхе хигхлигхтед ентрѝ ўилл бе еѯецутед аутоматицаллѝ ин %dс." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%dс ремаининг." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dс" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "ГРУБ Боот Мену" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "АРГП_ХЕЛП_ФМТ: %s валуе ис лесс тхан ор еќуал то %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: АРГП_ХЕЛП_ФМТ параметер реќуирес а валуе" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: АРГП_ХЕЛП_ФМТ параметер муст бе поситиве" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Ункноўн АРГП_ХЕЛП_ФМТ параметер" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Гарбаге ин АРГП_ХЕЛП_ФМТ: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Мандаторѝ ор оптионал аргументс то лонг оптионс аре алсо мандаторѝ ор " +"оптионал фор анѝ цорреспондинг схорт оптионс." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ор: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [ОПТИОН...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Трѝ '%s --хелп' ор '%s --усаге' фор море информатион.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Репорт бугс то %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Ункноўн сѝстем еррор" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "гиве тхис хелп лист" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "гиве а схорт усаге мессаге" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "НАМЕ" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "сет тхе програм наме" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "СЕЦС" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "ханг фор СЕЦС сецондс (дефаулт 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "принт програм версион" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ПРОГРАМ ЕРРОР) Но версион кноўн!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Тоо манѝ аргументс\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ПРОГРАМ ЕРРОР) Оптион схоулд хаве беен рецогнизед!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: оптион '%s' ис амбигуоус; поссибилитиес:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: оптион '--%s' доесн'т аллоў ан аргумент\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: оптион '%c%s' доесн'т аллоў ан аргумент\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: оптион '--%s' реќуирес ан аргумент\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: унрецогнизед оптион '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: унрецогнизед оптион '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: инвалид оптион -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: оптион реќуирес ан аргумент -- '%c'\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: оптион '-Ў %s' ис амбигуоус\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: оптион '-Ў %s' доесн'т аллоў ан аргумент\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: оптион '-Ў %s' реќуирес ан аргумент\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Суццесс" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Но матцх" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Инвалид регулар еѯпрессион" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Инвалид цоллатион цхарацтер" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Инвалид цхарацтер цласс наме" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Траилинг бацксласх" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Инвалид бацк референце" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Унматцхед [ ор [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Унматцхед ( ор \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Унматцхед \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Инвалид цонтент оф \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Инвалид ранге енд" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Меморѝ еѯхаустед" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Инвалид прецединг регулар еѯпрессион" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Прематуре енд оф регулар еѯпрессион" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Регулар еѯпрессион тоо биг" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Унматцхед ) ор \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "ункноўн регеѯп еррор" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Но превиоус регулар еѯпрессион" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Хелло Ўорлд" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Саѝ `Хелло Ўорлд'." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "аттемпт то сеек оутсиде оф тхе филе" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "унсуппортед гзип формат" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "лзоп филе цорруптед" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "ѯз филе цорруптед ор унсуппортед блоцк оптионс" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "инвалид арцх-депендент ЕЛФ магиц" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ЕНВВАР=ВАЛУЕ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Сет ан енвиронмент вариабле." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ЕНВВАР" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Ремове ан енвиронмент вариабле." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[АРГ]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Лист девицес ор филес." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Инсерт а модуле." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "диск `%s' нот фоунд" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "аттемпт то реад ор ўрите оутсиде оф партитион" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "инвалид арцх-индепендент ЕЛФ магиц" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "девице цоунт еѯцеедс лимит" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "цаннот ўрите то `%s': %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"тхе девице.мап ентрѝ `%s' ис инвалид. Игноринг ит. Плеасе цоррецт ор делете " +"ѝоур девице.мап" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"тхе дриве наме `%s' ин девице.мап ис инцоррецт. Усинг %s инстеад. Плеасе усе " +"тхе форм [хфц]д[0-9]* (Е.г. `хд0' ор `цд')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "цан'т опен `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "ДЕВИЦЕ_НАМЕ" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Сет роот девице." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "усе ФИЛЕ ас тхе девице мап [дефаулт=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "усе ФИЛЕ ас мемдиск" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "усе ГРУБ филес ин тхе дирецторѝ ДИР [дефаулт=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "принт вербосе мессагес." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "ўаит унтил а дебуггер ўилл аттацх" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Ункноўн еѯтра аргумент `%s'." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "ГРУБ емулатор." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Еррор ин парсинг цомманд лине аргументс\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Рун `гдб %s %d', анд сет АРГС.ХОЛД то зеро.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: ўарнинг:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: инфо:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: еррор:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "филе `%s' ис тоо биг" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "ункноўн филесѝстем" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Схутдоўн фаилед" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Еѯит фаилед" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "оверфлоў ис детецтед" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Дисцардинг импроперлѝ нестед партитион (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Ункноўн цомманд `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Дисплаѝ тхис хелп анд еѯит." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Дисплаѝ тхе усаге оф тхис цомманд анд еѯит." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "миссинг мандаторѝ оптион фор `%s'" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "тхе аргумент `%s' реќуирес ан интегер" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"а валуе ўас ассигнед то тхе аргумент `%s' ўхиле ит доесн'т реќуире ан " +"аргумент" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Принт бацктраце." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "ГРУБ доесн'т кноў хоў то халт тхис мацхине ѝет!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Дефаулт сервер ис ${нет_дефаулт_сервер}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "инвалид цолор специфицатион `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Ребоот фаилед" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[ЛЕНГТХ]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Хеѯдумп рандом дата." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "девице трее муст бе супплиед (сее `девицетрее' цомманд)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "инвалид зИмаге" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "инвалид девице трее" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Лоад Линуѯ." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Лоад инитрд." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Лоад ДТБ филе." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"плаин имаге кернел нот суппортед - ребуилд ўитх ЦОНФИГ_(У)ЕФИ_СТУБ енаблед" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "фаилед то гет ФДТ" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "ѝоу неед то лоад тхе Ѯен Хѝпервисор фирст" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Лоад а ѯен хѝпервисор." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Лоад а ѯен модуле." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[ОПТС]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Боот БИОС-басед сѝстем." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Лоад анотхер боот лоадер." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Дисплаѝ оутпут он алл цонсолес." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Усе сериал цонсоле." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Аск фор филе наме то ребоот фром." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Усе ЦД-РОМ ас роот." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Инвоке усер цонфигуратион роутинг." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Ентер ин КДБ он боот." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Усе ГДБ ремоте дебуггер инстеад оф ДДБ." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Дисабле алл боот оутпут." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Ўаит фор кеѝпресс афтер еверѝ лине оф оутпут." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Усе цомпилед-ин роот девице." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Боот инто сингле моде." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Боот ўитх вербосе мессагес." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Дон'т ребоот, йуст халт." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Цханге цонфигуред девицес." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "цомУНИТ[,СПЕЕД]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Дисабле СМП." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Дисабле АЦПИ." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Дон'т дисплаѝ боот диагностиц мессагес." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Боот ўитх дебуг мессагес." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Суппресс нормал оутпут (ўарнингс ремаин)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[АДДР|цомУНИТ][,СПЕЕД]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "наме" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "тѝпе" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "аддр" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "сизе" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Боотинг ин блинд моде" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Лоад кернел оф ФрееБСД." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Лоад кернел оф ОпенБСД." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Лоад кернел оф НетБСД." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Лоад ФрееБСД енв." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Лоад ФрееБСД кернел модуле." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Лоад НетБСД кернел модуле." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Лоад НетБСД кернел модуле (ЕЛФ)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Лоад ФрееБСД кернел модуле (ЕЛФ)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Лоад кОпенБСД рамдиск." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Лоад анотхер цоребоот паѝлоад" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Легацѝ `аск' параметер но лонгер суппортед." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s ис депрецатед. Усе сет гфѯпаѝлоад=%s бефоре линуѯ цомманд инстеад.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s ис депрецатед. ВГА моде %d исн'т рецогнизед. Усе сет " +"гфѯпаѝлоад=ЎИДТХѯХЕИГХТ[ѯДЕПТХ] бефоре линуѯ цомманд инстеад.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--форце|--бпб] ФИЛЕ" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "тхе сизе оф `%s' ис тоо ларге" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Лоад ФрееДОС кернел.сѝс." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Лоад НТЛДР ор БоотМГР." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Оверриде гуессед маппинг оф План9 девицес." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "ГРУБДЕВИЦЕ=ПЛАН9ДЕВИЦЕ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "КЕРНЕЛ АРГС" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Лоад План9 кернел." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Лоад а ПѮЕ имаге." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Лоад Труецрѝпт ИСО." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "инитрд алреадѝ лоадед" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Лоад модуле." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Пресс анѝ кеѝ то лаунцх ѯну" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Лоад `девице-пропертиес' думп." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Цоулд нот лоцате ФПСЎА дривер" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "ФПСЎА протоцол ўасн'т абле то финд тхе интерфаце" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Но ФПСЎА фоунд" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "ФПСЎА ревисион: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "ФИЛЕ [АРГС...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Дисплаѝ ФПСЎА версион." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "ЎАРНИНГ: но цонсоле ўилл бе аваилабле то ОС" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Лоад а мултибоот 2 кернел." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Лоад а мултибоот 2 модуле." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Лоад а мултибоот кернел." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Лоад а мултибоот модуле." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Бацкгроунд имаге моде." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "стретцх|нормал" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Лоад ѮНУ имаге." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Лоад 64-бит ѮНУ имаге." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Лоад ѮНУ еѯтенсион пацкаге." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Лоад ѮНУ еѯтенсион." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "ДИРЕЦТОРЍ [ОСБундлеРеќуиред]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Лоад ѮНУ еѯтенсион дирецторѝ." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Лоад ѮНУ рамдиск. Ит ўилл бе аваилабле ин ОС ас мд0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Лоад а спласх имаге фор ѮНУ." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Лоад ан имаге оф хибернатед ѮНУ." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "АДДР1,МАСК1[,АДДР2,МАСК2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Децларе меморѝ регионс ас фаултѝ (бадрам)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "ФРОМ[К|М|Г] ТО[К|М|Г]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Ремове анѝ меморѝ регионс ин специфиед ранге." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "фоур аргументс еѯпецтед" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "унрецогнисед нетўорк интерфаце `%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "но ДХЦП инфо фоунд" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "но ДХЦП оптионс фоунд" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "но ДХЦП оптион %d фоунд" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "унрецогнисед ДХЦП оптион формат специфицатион `%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "но нетўорк цард фоунд" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "цоулдн'т аутоцонфигуре %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[ЦАРД]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "перформ а боотп аутоцонфигуратион" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "ВАР ИНТЕРФАЦЕ НУМБЕР ДЕСЦРИПТИОН" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"ретриеве ДХЦП оптион анд саве ит инто ВАР. Иф ВАР ис - тхен принт тхе валуе." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "но ДНС серверс цонфигуред" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "домаин наме цомпонент ис тоо лонг" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "но ДНС рецорд фоунд" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "но ДНС реплѝ рецеивед" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "онлѝ ипв4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "онлѝ ипв6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "префер ипв4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "префер ипв6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "инвалид аргумент" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "АДДРЕСС ДНССЕРВЕР" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Перформ а ДНС лоокуп" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "ДНССЕРВЕР" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Адд а ДНС сервер" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Ремове а ДНС сервер" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Лист ДНС серверс" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "цоулдн'т сенд нетўорк пацкет" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-бит протецтед интерфаце суппортед\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "унсуппортед ХТТП респонсе" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "унсуппортед ХТТП еррор %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "тиме оут опенинг `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "тимеоут: цоулд нот ресолве хардўаре аддресс" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "унресолвабле аддресс %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "унрецогнисед нетўорк аддресс `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "дестинатион унреацхабле" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "роуте лооп детецтед" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "аддресс нот фоунд" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "ѝоу цан'т делете тхис аддресс" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Унсуппортед хў аддресс тѝпе %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Унсуппортед аддресс тѝпе %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "тхрее аргументс еѯпецтед" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "цард нот фоунд" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "темпорарѝ" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Ункноўн аддресс тѝпе %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "но сервер ис специфиед" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "тимеоут реадинг `%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "СХОРТНАМЕ ЦАРД АДДРЕСС [ХЎАДДРЕСС]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Адд а нетўорк аддресс." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[ЦАРД [ХЎАДДРЕСС]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Перформ ан ИПВ6 аутоцонфигуратион" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "СХОРТНАМЕ" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Делете а нетўорк аддресс." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "СХОРТНАМЕ НЕТ [ИНТЕРФАЦЕ| гў ГАТЕЎАЍ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Адд а нетўорк роуте." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Делете а нетўорк роуте." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "лист нетўорк роутес" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "лист нетўорк цардс" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "лист нетўорк аддрессес" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "цоннецтион рефусед" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "цоннецтион тимеоут" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Ентер усернаме: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[УСЕРЛИСТ]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Цхецк ўхетхер усер ис ин УСЕРЛИСТ." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Поссибле цоммандс аре:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Поссибле девицес аре:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Поссибле филес аре:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Поссибле партитионс аре:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Поссибле аргументс аре:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Поссибле тхингс аре:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Ўарнинг: сѝнтаѯ еррор (миссинг сласх) ин `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Ўарнинг: инвалид форегроунд цолор `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Ўарнинг: инвалид бацкгроунд цолор `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ЕНВВАР [ЕНВВАР] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Еѯпорт вариаблес." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Сундаѝ" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Мондаѝ" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Туесдаѝ" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Ўеднесдаѝ" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Тхурсдаѝ" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Фридаѝ" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Сатурдаѝ" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "модуле исн'т лоадед" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "ГНУ ГРУБ версион %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ЕСЦ ат анѝ тиме еѯитс." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Минимал БАСХ-лике лине едитинг ис суппортед. Фор тхе фирст ўорд, ТАБ листс " +"поссибле цомманд цомплетионс. Анѝўхере елсе ТАБ листс поссибле девице ор " +"филе цомплетионс. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "груб>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Цлеар тхе сцреен." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Ентер нормал моде." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Еѯит фром нормал моде." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Пресс анѝ кеѝ то цонтинуе..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Боотинг `%s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Фаллинг бацк то `%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Фаилед то боот ботх дефаулт анд фаллбацк ентриес.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Боотинг а цомманд лист" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Минимум Емацс-лике сцреен едитинг ис суппортед. ТАБ листс цомплетионс. Пресс " +"Цтрл-ѯ ор Ф10 то боот, Цтрл-ц ор Ф2 фор а цомманд-лине ор ЕСЦ то дисцард " +"едитс анд ретурн то тхе ГРУБ мену." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Усе тхе %C анд %C кеѝс то селецт ўхицх ентрѝ ис хигхлигхтед." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "Б" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "КиБ" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "МиБ" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "ГиБ" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "ТиБ" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "ПиБ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "К" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "М" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "Г" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "Т" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "П" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "Б/с" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "КиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "МиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "ГиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "ТиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "ПиБ/с" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Партитион %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Девице %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Филесѝстем цаннот бе аццессед" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Филесѝстем тѝпе %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Лабел `%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Ласт модифицатион тиме %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Но кноўн филесѝстем детецтед" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Партитион старт ат %llu%sКиБ" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Сецтор сизе %uБ" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Тотал сизе ункноўн" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Тотал сизе %llu%sКиБ" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--МОРЕ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "цаннот опен цонфигуратион филе `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "но цомпрессион ис аваилабле фор ѝоур платформ" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "но ИЕЕЕ1275 роутинес аре аваилабле фор ѝоур платформ" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "но ЕФИ роутинес аре аваилабле фор ѝоур платформ" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "но СГИ роутинес аре аваилабле фор ѝоур платформ" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "но рандом нумбер генератор ис аваилабле фор ѝоур ОС" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Фаилед то цреате `девице-маппер' трее" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "цан'т моунт енцрѝптед волуме `%s': %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "цоулдн'т опен геом" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "цоулдн'т финд гели цонсумер" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "цоулдн'т ретриеве гели УУИД" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "цоулдн'т финд геом `парт' цласс" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "уналигнед девице сизе" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "аттемптинг то реад тхе цоре имаге `%s' фром ГРУБ" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "аттемптинг то реад тхе цоре имаге `%s' фром ГРУБ агаин" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "цаннот реад `%s' цоррецтлѝ" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "фаилед то реад тхе сецторс оф тхе цоре имаге" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "цаннот гет транслатор цомманд лине фор патх `%s': %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "транслатор цомманд лине ис емптѝ фор патх `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"транслатор `%s' фор патх `%s' хас северал нон-оптион ўордс, ат леаст `%s' " +"анд `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"транслатор `%s' фор патх `%s' ис гивен онлѝ оптионс, цаннот финд девице парт" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Стораге информатион фор `%s' доес нот инцлуде тѝпе" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "`%s' ис нот а лоцал диск" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Стораге информатион фор `%s' индицатес неитхер а плаин партитион нор а плаин " +"диск" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "цан'т ретриеве блоцклистс: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "блоцксизе ис нот дивисибле бѝ 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "инвалид зеро блоцксизе" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "цан'т ретриеве блоцклистс" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "иоцтл РАИД_ВЕРСИОН еррор: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "унсуппортед РАИД версион: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "иоцтл ГЕТ_АРРАЍ_ИНФО еррор: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "иоцтл ГЕТ_ДИСК_ИНФО еррор: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Унабле то опен стреам фром %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "ункноўн кинд оф РАИД девице `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "`обппатх' нот фоунд ин парент дирс оф `%s', но ИЕЕЕ1275 наме дисцоверѝ" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "фаилед то гет цаноницал патх оф `%s'" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "ункноўн девице тѝпе %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Усаге: %s ДЕВИЦЕ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Унабле то форк: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Унабле то цреате пипе: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "цаннот ресторе тхе оригинал дирецторѝ" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "цаннот стат `%s': %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "цаннот маке темпорарѝ филе: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "цаннот маке темпорарѝ дирецторѝ: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"цоулдн'т финд ИЕЕЕ1275 девице патх фор %s.\n" +"Ѝоу ўилл хаве то сет `боот-девице' вариабле мануаллѝ" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: нот фоунд" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"`нвсетенв' фаилед. \n" +"Ѝоу ўилл хаве то сет `боот-девице' вариабле мануаллѝ. Ат тхе ИЕЕЕ1275 " +"промпт, тѝпе:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Ѝоу ўилл хаве то сет `СѝстемПартитион' анд `ОСЛоадер' мануаллѝ." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "но `/' ин цаноницал филенаме" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "цѝгўин_цонв_патх() фаилед" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "цоулдн'т ретриеве рандом дата" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Инсуффициент привилегес то аццесс фирмўаре, ассуминг БИОС" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "но ЕФИ роутинес аре аваилабле ўхен руннинг ин БИОС моде" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "унеѯпецтед ЕФИ еррор" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Цоулдн'т финд а фрее БоотНННН слот" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"тхис ГПТ партитион лабел цонтаинс но БИОС Боот Партитион; ембеддинг ўон'т бе " +"поссибле" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "ѝоур БИОС Боот Партитион ис тоо смалл; ембеддинг ўон'т бе поссибле" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Сецтор %llu ис алреадѝ ин усе бѝ раид цонтроллер `%s'; авоидинг ит. Плеасе " +"аск тхе мануфацтурер нот то сторе дата ин МБР гап" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Сецтор %llu ис алреадѝ ин усе бѝ тхе програм `%s'; авоидинг ит. Тхис " +"софтўаре маѝ цаусе боот ор отхер проблемс ин футуре. Плеасе аск итс аутхорс " +"нот то сторе дата ин тхе боот трацк" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"отхер софтўаре ис усинг тхе ембеддинг ареа, анд тхере ис нот еноугх роом фор " +"цоре.имг. Суцх софтўаре ис офтен трѝинг то сторе дата ин а ўаѝ тхат авоидс " +"детецтион. Ўе рецомменд ѝоу инвестигате" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"тхис мсдос-стѝле партитион лабел хас но пост-МБР гап; ембеддинг ўон'т бе " +"поссибле" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "ѝоур ембеддинг ареа ис унусуаллѝ смалл. цоре.имг ўон'т фит ин ит." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Маке партитион ацтиве" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "нот а примарѝ партитион" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Партитион %d ис ацтиве ноў. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Цлеаред ацтиве флаг он %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Цханге партитион тѝпе" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Сет `хидден' флаг ин партитион тѝпе" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "тхе партитион тѝпе 0ѯ%x исн'т валид" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Сеттинг партитион тѝпе то 0ѯ%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "цан'т бреак 0 лоопс" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "нот ин фунцтион бодѝ" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "инвалид вариабле наме `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "унеѯпецтед енд оф филе" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[НУМ]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Еѯит фром лоопс" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Цонтинуе лоопс" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Схифт поситионал параметерс." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ВАЛУЕ]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Сет поситионал параметерс." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Ретурн фром а фунцтион." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-м (стретцх|нормал)] ФИЛЕ" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Лоад бацкгроунд имаге фор ацтиве терминал." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "ЦОЛОР" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Сет бацкгроунд цолор фор ацтиве терминал." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Схоў ЦБМЕМ цонсоле цонтент." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Сет тхе сериал унит." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Сет тхе сериал порт аддресс." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Сет тхе сериал порт спеед." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Сет тхе сериал порт ўорд ленгтх." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Сет тхе сериал порт паритѝ." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Сет тхе сериал порт стоп битс." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Сет тхе басе фреќуенцѝ." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Енабле/дисабле РТС/ЦТС." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "сериал порт `%s' исн'т фоунд" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "унсуппортед сериал порт флоў цонтрол" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[ОПТИОНС...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Цонфигуре сериал порт." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "ункноўн терминфо тѝпе `%s'" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "АСЦИИ" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "УТФ-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "висуаллѝ-ордеред УТФ-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Ункноўн енцодинг" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Цуррент терминфо тѝпес:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Терминал ис АСЦИИ-онлѝ [дефаулт]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Терминал ис логицал-ордеред УТФ-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Терминал ис висуаллѝ-ордеред УТФ-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Терминал хас специфиед геометрѝ." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ЎИДТХѯХЕИГХТ." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "инцоррецт терминал дименсионс специфицатион" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "терминал %s исн'т фоунд ор ит'с нот хандлед бѝ терминфо" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-а|-у|-в] [-г ЎѯХ] ТЕРМ [ТЍПЕ]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Сет терминфо тѝпе оф ТЕРМ то ТЍПЕ.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Принт анд еѯецуте блоцк аргумент." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "битмап филе `%s' ис оф унсуппортед формат" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " ВБЕ инфо: версион: %d.%d ОЕМ софтўаре рев: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " тотал меморѝ: %d КиБ\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "но суитабле видео моде фоунд" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "аццесс дениед" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "МОДУЛЕС" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "пре-лоад специфиед модулес МОДУЛЕС" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "инсталл онлѝ МОДУЛЕС анд тхеир депенденциес [дефаулт=алл]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "ТХЕМЕС" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "инсталл ТХЕМЕС [дефаулт=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "ФОНТС" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "инсталл ФОНТС [дефаулт=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "ЛОЦАЛЕС" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "инсталл онлѝ ЛОЦАЛЕС [дефаулт=алл]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "цомпресс ГРУБ филес [оптионал]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "цхоосе тхе цомпрессион то усе фор цоре имаге" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "усе имагес анд модулес ундер ДИР [дефаулт=%s/<платформ>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "усе транслатионс ундер ДИР [дефаулт=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "усе тхемес ундер ДИР [дефаулт=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "ембед ФИЛЕ ас публиц кеѝ фор сигнатуре цхецкинг" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "цаннот ренаме тхе филе %s то %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "диск доес нот еѯист, со фаллинг бацк то партитион девице %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Цоммандс:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Цреате а бланк енвиронмент блоцк филе." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Лист тхе цуррент вариаблес." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "сет [НАМЕ=ВАЛУЕ ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Сет вариаблес." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "унсет [НАМЕ ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Делете вариаблес." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Оптионс:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Ѝоу неед то специфѝ ат леаст оне цомманд.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "ФИЛЕНАМЕ ЦОММАНД" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Тоол то едит енвиронмент блоцк." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Иф ФИЛЕНАМЕ ис `-', тхе дефаулт валуе %s ис усед.\n" +"\n" +"Тхере ис но `делете' цомманд; иф ѝоу ўант то делете тхе ўхоле енвиронмент\n" +"блоцк, усе `рм %s'." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "инвалид енвиронмент блоцк" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "инвалид параметер %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "енвиронмент блоцк тоо смалл" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "диск реад фаилс ат оффсет %lld, ленгтх %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "инвалид скип валуе %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "реад еррор ат оффсет %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "цаннот опен ОС филе `%s': %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "цаннот ўрите то тхе стдоут: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "цомпаре фаил ат оффсет %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "ОС филе %s опен еррор: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "`лоопбацк' цомманд фаилс: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "`црѝптомоунт' цомманд фаилс: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "цоулдн'т ретриеве УУИД" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "лс ПАТХ" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Лист филес ин ПАТХ." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "цп ФИЛЕ ЛОЦАЛ" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Цопѝ ФИЛЕ то лоцал филе ЛОЦАЛ." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "цат ФИЛЕ" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Цопѝ ФИЛЕ то стандард оутпут." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "цмп ФИЛЕ ЛОЦАЛ" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Цомпаре ФИЛЕ ўитх лоцал филе ЛОЦАЛ." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "хеѯ ФИЛЕ" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Схоў цонтентс оф ФИЛЕ ин хеѯ." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "црц ФИЛЕ" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Гет црц32 цхецксум оф ФИЛЕ." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "блоцклист ФИЛЕ" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Дисплаѝ блоцклист оф ФИЛЕ." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "ѯну_ууид ДЕВИЦЕ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Цомпуте ѮНУ УУИД оф тхе девице." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "НУМ" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Скип Н бѝтес фром оутпут филе." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Хандле Н бѝтес ин оутпут филе." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Специфѝ тхе нумбер оф инпут филес." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Сет дебуг енвиронмент вариабле." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Моунт црѝпто девицес." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "ФИЛЕ|промпт" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Лоад зфс црѝпто кеѝ." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Унцомпресс дата." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Инвалид диск цоунт.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Диск цоунт муст прецеде дискс лист.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Но цомманд ис специфиед.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Нот еноугх параметерс то цомманд.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Инвалид цомманд %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ИМАГЕ_ПАТХ ЦОММАНДС" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Дебуг тоол фор филесѝстем дривер." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "сет инпут филенаме фор 32-бит парт." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "сет инпут филенаме фор 64-бит парт." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "сет оутпут филенаме. Дефаулт ис СТДОУТ" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[ОПТИОНС]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Глуе 32-бит анд 64-бит бинарѝ инто Аппле универсал оне." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Миссинг инпут филе\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "цаннот цопѝ `%s' то `%s': %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "цан'т цомпресс `%s' то `%s'" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "цаннот опен дирецторѝ `%s': %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "цаннот делете `%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "груб-мкимаге ис цомпилед ўитхоут ѮЗ суппорт" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Ункноўн цомпрессион формат %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Унрецогнизед цомпрессион `%s'" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "ункноўн таргет формат %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "цаннот финд лоцале `%s'" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s доесн'т еѯист. Плеасе специфѝ --таргет ор --дирецторѝ" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "инвалид модинфо филе `%s'" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Ункноўн платформ `%s-%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Море тхан оне инсталл девице?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"инсталл ГРУБ имагес ундер тхе дирецторѝ ДИР/%s инстеад оф тхе %s дирецторѝ" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ТАРГЕТ" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "инсталл ГРУБ фор ТАРГЕТ платформ [дефаулт=%s]; аваилабле таргетс: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"маке тхе дриве алсо боотабле ас флоппѝ (дефаулт фор фдѮ девицес). Маѝ бреак " +"он соме БИОСес." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "делете девице мап иф ит алреадѝ еѯистс" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "инсталл евен иф проблемс аре детецтед" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "усе идентифиер филе евен иф УУИД ис аваилабле" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"диск модуле то усе (биосдиск ор нативе). Тхис оптион ис онлѝ аваилабле он " +"БИОС таргет." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"дон'т упдате тхе `боот-девице'/`Боот*' НВРАМ вариаблес. Тхис оптион ис онлѝ " +"аваилабле он ЕФИ анд ИЕЕЕ1275 таргетс." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "до нот пробе фор филесѝстемс ин ДЕВИЦЕ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "до нот инсталл боотсецтор" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"До нот апплѝ анѝ реед-соломон цодес ўхен ембеддинг цоре.имг. Тхис оптион ис " +"онлѝ аваилабле он ѯ86 БИОС таргетс." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"тхе инсталлатион девице ис ремовабле. Тхис оптион ис онлѝ аваилабле он ЕФИ." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ИД" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "тхе ИД оф боотлоадер. Тхис оптион ис онлѝ аваилабле он ЕФИ анд Мацс." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "усе ДИР ас тхе ЕФИ Сѝстем Партитион роот." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "усе ДИР фор ППЦ МАЦ инсталл." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "усе ФИЛЕ ас фонт фор лабел" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "усе ЦОЛОР фор лабел" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "усе ЦОЛОР фор лабел бацкгроунд" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "усе СТРИНГ ас продуцт версион" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[ОПТИОН] [ИНСТАЛЛ_ДЕВИЦЕ]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Инсталл ГРУБ он ѝоур дриве." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"ИНСТАЛЛ_ДЕВИЦЕ муст бе сѝстем девице филенаме.\n" +"%s цопиес ГРУБ имагес инто %s. Он соме платформс, ит маѝ алсо инсталл ГРУБ " +"инто тхе боот сецтор." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "тхе дриве %s ис дефинед мултипле тимес ин тхе девице мап %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Унабле то детермине ѝоур платформ. Усе --таргет." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Инсталлинг фор %s платформ.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "инсталл девице исн'т специфиед" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "цаннот финд ЕФИ дирецторѝ" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "цаннот финд а девице фор %s (ис /дев моунтед?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "цаннот финд а ГРУБ дриве фор %s. Цхецк ѝоур девице.мап" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s доесн'т лоок лике ан ЕФИ партитион" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Ѝоу'ве фоунд а буг" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "филесѝстем он %s ис неитхер ХФС нор ХФС+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"аттемпт то инсталл то енцрѝптед диск ўитхоут црѝптодиск енаблед. Сет `%s' ин " +"филе `%s'" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Цан'т цреате филе: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "но хинтс аваилабле фор ѝоур платформ. Еѯпецт редуцед перформанце" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "НОТ РУННИНГ: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "тхе цхосен партитион ис нот а ПРеП партитион" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "фаилед то цопѝ Груб то тхе ПРеП партитион" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"тхе ПРеП партитион ис нот емптѝ. Иф ѝоу аре суре ѝоу ўант то усе ит, рун дд " +"то цлеар ит: `%s'" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "ЕФИ боотлоадер ид исн'т специфиед." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "ЎАРНИНГ: но платформ-специфиц инсталл ўас перформед" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Инсталлатион финисхед. Но еррор репортед." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "блесс фор ѯ86-басед мацс" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "блесс фор ппц-басед мацс" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Но патх ор девице ис специфиед.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ппц ПАТХ|--ѯ86 ФИЛЕ" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Мац-стѝле блесс он ХФС ор ХФС+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Усаге: %s [ИНФИЛЕ [ОУТФИЛЕ]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Фреетѝпе Еррор %d лоадинг глѝпх 0ѯ%x фор У+0ѯ%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (медиал)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (лефтмост)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (ригхтмост)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Оут оф ранге субститутион (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Оут оф ранге лоокуп: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Унсуппортед субститутион тѝпе: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Унсуппортед субститутион специфицатион: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Унсуппортед цовераге специфицатион: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "ЎАРНИНГ: унсуппортед фонт феатуре параметерс: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "саве оутпут ин ФИЛЕ [реќуиред]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "селецт фаце индеѯ" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "ФРОМ-ТО[,ФРОМ-ТО]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "сет фонт ранге" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "сет фонт фамилѝ наме" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "СИЗЕ" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "сет фонт сизе" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "сет фонт десцент" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "сет фонт асцент" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "цонверт то болд фонт" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "форце аутохинт" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "дисабле хинтинг" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "игноре битмап стрикес ўхен лоадинг" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "инвалид фонт ранге" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[ОПТИОНС] ФОНТ_ФИЛЕС" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Цонверт цоммон фонт филе форматс инто ПФ2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "оутпут филе муст бе специфиед" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "ФТ_Инит_ФрееТѝпе фаилс" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "цан'т опен филе %s, индеѯ %d: еррор %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "цан'т сет %dѯ%d фонт сизе: Фреетѝпе еррор %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "сет префиѯ дирецторѝ" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"ембед ФИЛЕ ас а мемдиск имаге\n" +"Имплиес `-п (мемдиск)/боот/груб' анд оверридес анѝ префиѯ супплиед " +"превиоуслѝ, бут тхе префиѯ итселф цан бе оверридден бѝ латер оптионс" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "ембед ФИЛЕ ас ан еарлѝ цонфиг" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "адд НОТЕ сегмент фор ЦХРП ИЕЕЕ1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "оутпут а генератед имаге то ФИЛЕ [дефаулт=стдоут]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ФОРМАТ" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "генерате ан имаге ин ФОРМАТ" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "аваилабле форматс:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "ункноўн таргет формат %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[ОПТИОН]... [МОДУЛЕС]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Маке а боотабле имаге оф ГРУБ." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Таргет формат нот специфиед (усе тхе -О оптион)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Префиѯ нот специфиед (усе тхе -п оптион)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"`%s' ис мисцомпилед: итс старт аддресс ис 0ѯ%llx инстеад оф 0ѯ%llx: лд.голд " +"буг?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "сет инпут филенаме. Дефаулт ис СТДИН" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Ункноўн кеѝбоард сцан идентифиер %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Ункноўн кеѝбоард сцан цоде 0ѯ%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "ЕРРОР: но валид кеѝбоард лаѝоут фоунд. Цхецк тхе инпут.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Генерате ГРУБ кеѝбоард лаѝоут фром Линуѯ цонсоле оне." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "роот дирецторѝ оф ТФТП сервер" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "релативе субдирецторѝ он нетўорк сервер" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Препарес ГРУБ нетўорк боот имагес ат нет_дирецторѝ/субдир ассуминг " +"нет_дирецторѝ беинг ТФТП роот." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "унсуппортед платформ %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Нетбоот дирецторѝ фор %s цреатед. Цонфигуре ѝоур ДХЦП сервер то поинт то %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Нумбер оф ПБКДФ2 итератионс" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Ленгтх оф генератед хасх" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Ленгтх оф салт" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Генерате ПБКДФ2 пассўорд хасх." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "фаилуре то реад пассўорд" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Реентер пассўорд: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "пассўордс дон'т матцх" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "цоулдн'т ретриеве рандом дата фор салт" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "црѝптограпхиц еррор нумбер %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "ПБКДФ2 хасх оф ѝоур пассўорд ис %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Но патх ис специфиед.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ПАТХ" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Трансформ а сѝстем филенаме инто ГРУБ оне." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "саве РОМ имагес ин ДИР [оптионал]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "усе ФИЛЕ ас ѯоррисо [оптионал]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "усе СТРИНГ ас продуцт наме" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"енабле спарц боот. Дисаблес ХФС+, АПМ, АРЦС анд боот ас диск имаге фор и386-" +"пц" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"енабле АРЦС (биг-ендиан мипс мацхинес, мостлѝ СГИ) боот. Дисаблес ХФС+, АПМ, " +"спарц64 анд боот ас диск имаге фор и386-пц" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "Маке ГРУБ ЦД-РОМ, диск, пендриве анд флоппѝ боотабле имаге." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Генератес а боотабле ЦД/УСБ/флоппѝ имаге. Аргументс отхер тхан оптионс то " +"тхис програм аре пассед то ѯоррисо, анд индицате соурце филес, соурце " +"дирецториес, ор анѝ оф тхе мкисофс оптионс листед бѝ тхе оутпут оф `%s'." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Оптион -- сўитцхес то нативе ѯоррисо цомманд моде." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Маил ѯоррисо суппорт реќуестс то <буг-ѯоррисо@гну.орг>." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[ОПТИОН] СОУРЦЕ..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "енаблинг %s суппорт ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ѝоур ѯоррисо доесн'т суппорт `--груб2-боот-инфо'. Соме феатурес аре " +"дисаблед. Плеасе усе ѯоррисо 1.2.9 ор латер." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ѝоур ѯоррисо доесн'т суппорт `--груб2-боот-инфо'. Ѝоур цоре имаге ис тоо " +"биг. Боот ас диск ис дисаблед. Плеасе усе ѯоррисо 1.2.9 ор латер." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Генерате а стандалоне имаге (цонтаининг алл модулес) ин тхе селецтед формат" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "Графт поинт сѝнтаѯ (Е.г. /боот/груб/груб.цфг=./груб.цфг) ис аццептед" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ИМАГЕ1 [ИМАГЕ2 ...] МОУНТПОИНТ" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "неед ан имаге анд моунтпоинт" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "гивен аргумент ис а сѝстем девице, нот а патх" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "сепарате итемс ин оутпут усинг АСЦИИ НУЛ цхарацтерс" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[дефаулт=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "принт ТАРГЕТ" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "аваилабле таргетс:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[ОПТИОН]... [ПАТХ|ДЕВИЦЕ]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Пробе девице информатион фор а гивен патх (ор девице, иф тхе -д оптион ис " +"гивен)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "реад теѯт фром ФИЛЕ." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "усе ЦОЛОР фор теѯт" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "усе ЦОЛОР фор бацкгроунд" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "сет тхе лабел то рендер" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "усе ФИЛЕ ас фонт (ПФ2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Рендер Аппле .диск_лабел." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Миссинг аргументс\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ПАТХ]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Цхецкс ГРУБ сцрипт цонфигуратион филе фор сѝнтаѯ еррорс." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Сѝнтаѯ еррор ат лине %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Сцрипт `%s' цонтаинс но цоммандс анд ўилл до нотхинг\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "усе ФИЛЕ ас тхе боот имаге [дефаулт=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "усе ФИЛЕ ас тхе цоре имаге [дефаулт=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Но девице ис специфиед.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Сет уп имагес то боот фром ДЕВИЦЕ.\n" +"\n" +"Ѝоу схоулд нот нормаллѝ рун тхис програм дирецтлѝ. Усе груб-инсталл инстеад." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "ДЕВИЦЕ муст бе ан ОС девице (е.г. /дев/сда)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Инвалид девице `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "роот дирецторѝ ас ит ўилл бе сеен он рунтиме [дефаулт=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"цуррент дирецторѝ оф сѝслинуѯ ас ит ўилл бе сеен он рунтиме [дефаулт ис " +"парент дирецторѝ оф инпут филе]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "ўрите оутпут то ФИЛЕ [дефаулт=стдоут]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Трансформ сѝслинуѯ цонфиг инто ГРУБ оне." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "цаннот цомпресс тхе кернел имаге" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "ункноўн цомпрессион %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Децомпрессор ис тоо биг" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "цоре имаге ис тоо биг (0ѯ%x > 0ѯ%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "кернел имаге ис тоо биг (0ѯ%x > 0ѯ%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "дискбоот.имг сизе муст бе %u бѝтес" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"фўстарт.имг доесн'т матцх тхе кноўн гоод версион. процеед ат ѝоур оўн риск" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "фирмўаре имаге ис тоо биг" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "инвалид лине формат: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "тхе фирст сецтор оф тхе цоре филе ис нот сецтор-алигнед" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "нон-сецтор-алигнед дата ис фоунд ин тхе цоре филе" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "тхе сецторс оф тхе цоре филе аре тоо фрагментед" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "тхе сизе оф `%s' ис нот %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "тхе сизе оф `%s' ис тоо смалл" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Аттемптинг то инсталл ГРУБ то а диск ўитх мултипле партитион лабелс ор ботх " +"партитион лабел анд филесѝстем. Тхис ис нот суппортед ѝет." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "унабле то идентифѝ а филесѝстем ин %s; сафетѝ цхецк цан'т бе перформед" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s аппеарс то цонтаин а %s филесѝстем ўхицх исн'т кноўн то ресерве спаце фор " +"ДОС-стѝле боот. Инсталлинг ГРУБ тхере цоулд ресулт ин ФИЛЕСЍСТЕМ " +"ДЕСТРУЦТИОН иф валуабле дата ис оверўриттен бѝ груб-сетуп (--скип-фс-пробе " +"дисаблес тхис цхецк, усе ат ѝоур оўн риск)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s аппеарс то цонтаин а %s партитион мап ўхицх исн'т кноўн то ресерве спаце " +"фор ДОС-стѝле боот. Инсталлинг ГРУБ тхере цоулд ресулт ин ФИЛЕСЍСТЕМ " +"ДЕСТРУЦТИОН иф валуабле дата ис оверўриттен бѝ груб-сетуп (--скип-фс-пробе " +"дисаблес тхис цхецк, усе ат ѝоур оўн риск)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s аппеарс то цонтаин а %s партитион мап анд ЛДМ ўхицх исн'т кноўн то бе а " +"сафе цомбинатион. Инсталлинг ГРУБ тхере цоулд ресулт ин ФИЛЕСЍСТЕМ " +"ДЕСТРУЦТИОН иф валуабле дата ис оверўриттен бѝ груб-сетуп (--скип-фс-пробе " +"дисаблес тхис цхецк, усе ат ѝоур оўн риск)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Аттемптинг то инсталл ГРУБ то а партитионлесс диск ор то а партитион. Тхис " +"ис а БАД идеа." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Аттемптинг то инсталл ГРУБ то а диск ўитх мултипле партитион лабелс. Тхис " +"ис нот суппортед ѝет." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Партитион стѝле `%s' доесн'т суппорт ембеддинг" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Филе сѝстем `%s' доесн'т суппорт ембеддинг" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Ѝоур ембеддинг ареа ис унусуаллѝ смалл. цоре.имг ўон'т фит ин ит." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "но терминатор ин тхе цоре имаге" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "цоре.имг версион мисматцх" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"ембеддинг ис нот поссибле, бут тхис ис реќуиред фор РАИД анд ЛВМ инсталл" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "цан'т детермине филесѝстем он %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "филесѝстем `%s' доесн'т суппорт блоцклистс" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "ембеддинг ис нот поссибле, бут тхис ис реќуиред фор цросс-диск инсталл" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Ембеддинг ис нот поссибле. ГРУБ цан онлѝ бе инсталлед ин тхис сетуп бѝ " +"усинг блоцклистс. Хоўевер, блоцклистс аре УНРЕЛИАБЛЕ анд тхеир усе ис " +"дисцоурагед." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "ўилл нот процеед ўитх блоцклистс" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "блоцклистс аре инвалид" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "блоцклистс аре инцомплете" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Усаге: %s -о ОУТПУТ ЦКБМАП_АРГУМЕНТС...\\н" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Маке ГРУБ кеѝбоард лаѝоут филе." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "принт тхис мессаге анд еѯит" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "принт тхе версион информатион анд еѯит" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s генератес а кеѝбоард лаѝоут фор ГРУБ усинг цкбцомп\\н" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Репорт бугс то <буг-груб@гну.орг>." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: оптион реќуирес ан аргумент -- `%s'\\н" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Усаге: %s [ОПТИОН]\\н" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Генерате а груб цонфиг филе" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "оутпут генератед цонфиг то ФИЛЕ [дефаулт=стдоут]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Унрецогнизед оптион `%s'\\н" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Ѝоу муст рун тхис ас роот\\н" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Нот фоунд.\\н" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Генератинг груб цонфигуратион филе ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Сѝнтаѯ еррорс аре детецтед ин генератед ГРУБ цонфиг филе.\n" +"Енсуре тхат тхере аре но еррорс ин /етц/дефаулт/груб\n" +"анд /етц/груб.д/* филес ор плеасе филе а буг репорт ўитх\n" +"%s филе аттацхед." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "доне" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Ўарнинг:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Усаге: %s [ОПТИОН] МЕНУ_ЕНТРЍ\\н" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "Сет тхе дефаулт боот мену ентрѝ фор ГРУБ, фор тхе неѯт боот онлѝ." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"еѯпецт ГРУБ имагес ундер тхе дирецторѝ ДИР/%s инстеад оф тхе %s дирецторѝ" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"МЕНУ_ЕНТРЍ ис а нумбер, а мену итем титле ор а мену итем идентифиер. Плеасе " +"ноте тхат мену итемс ин\n" +"субменус ор суб-субменус реќуире специфѝинг тхе субмену цомпонентс анд тхен " +"тхе\n" +"мену итем цомпонент. Тхе титлес схоулд бе сепаратед усинг тхе греатер-тхан\n" +"цхарацтер (>) ўитх но еѯтра спацес. Депендинг он ѝоур схелл соме цхарацтерс " +"инцлудинг > маѝ неед есцапинг. Море информатион абоут тхис ис аваилабле\n" +"ин тхе ГРУБ Мануал ин тхе сецтион абоут тхе 'дефаулт' цомманд. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Море тхан оне мену ентрѝ?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Мену ентрѝ нот специфиед." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Сет тхе дефаулт боот мену ентрѝ фор ГРУБ." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Тхис реќуирес сеттинг ГРУБ_ДЕФАУЛТ=савед ин %s/дефаулт/груб.\\н" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "МЕНУ_ЕНТРЍ ис а нумбер, а мену итем титле ор а мену итем идентифиер." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Реќуестед сериал терминал бут ГРУБ_СЕРИАЛ_ЦОММАНД ис унспецифиед. Дефаулт " +"параметерс ўилл бе усед." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Фоунд тхеме: %s\\н" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Фоунд бацкгроунд: %s\\н" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Унсуппортед имаге формат" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Сеттинг ГРУБ_ТИМЕОУТ то а нон-зеро валуе ўхен ГРУБ_ХИДДЕН_ТИМЕОУТ ис сет ис " +"но лонгер суппортед." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Фоунд ГНУ Мацх: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Фоунд Хурд модуле: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Соме Хурд стуфф фоунд, бут нот еноугх то боот." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, ўитх Хурд %s (рецоверѝ моде)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, ўитх Хурд %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Плеасе дон'т усе олд титле `%s' фор ГРУБ_ДЕФАУЛТ, усе `%s' (фор версионс " +"бефоре 2.00) ор `%s' (фор 2.00 ор латер)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Лоадинг ГНУ Мацх ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Лоадинг тхе Хурд ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Адванцед оптионс фор %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Лоадинг кернел оф Иллумос ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, ўитх кФрееБСД %s (рецоверѝ моде)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, ўитх кФрееБСД %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Лоадинг кернел оф ФрееБСД %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Фоунд кернел оф ФрееБСД: %s\\н" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Фоунд кернел модуле дирецторѝ: %s\\н" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, ўитх Линуѯ %s (рецоверѝ моде)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, ўитх Линуѯ %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Лоадинг Линуѯ %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Лоадинг инитиал рамдиск ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Фоунд линуѯ имаге: %s\\н" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Фоунд инитрд имаге: %s\\н" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, ўитх кернел %s (виа %s, рецоверѝ моде)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, ўитх кернел %s (виа %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Фоунд НетБСД кернел: %s\\н" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Ўиндоўс Виста/7 (лоадер)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Ўиндоўс НТ/2000/ѮП (лоадер)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Фоунд %s он %s (%s)\\н" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-бит)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-бит)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(он %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, ўитх Ѯен %s анд Линуѯ %s (рецоверѝ моде)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, ўитх Ѯен %s анд Линуѯ %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, ўитх Ѯен хѝпервисор" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Лоадинг Ѯен %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Ѯен хѝпервисор, версион %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Адванцед оптионс фор %s (ўитх Ѯен хѝпервисор)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Фоунд %s он %s\\н" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s ис нот ѝет суппортед бѝ груб-мкцонфиг.\\н" diff --git a/po/en@greek.gmo b/po/en@greek.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9be0be3ca25260c4ea41060c9dbad6eeb150dca4 GIT binary patch literal 153818 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 TbG4&zI4u{29kV2JZ(RKi^qa)m literal 0 HcmV?d00001 diff --git a/po/en@greek.po b/po/en@greek.po new file mode 100644 index 000000000..78a89c5e1 --- /dev/null +++ b/po/en@greek.po @@ -0,0 +1,6793 @@ +# English translations for grub package. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Automatically generated, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02~beta3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2016-02-28 14:23+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en@greek\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "υνσυππορτεδ σεριαλ πορτ σπεεδ" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "υνσυππορτεδ σεριαλ πορτ παριτϋ" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "υνσυππορτεδ σεριαλ πορτ στοπ ϭιτσ νυμϭερ" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "υνσυππορτεδ σεριαλ πορτ ωορδ λενγτχ" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Δον'τ λοαδ χοστ ταϭλεσ σπεϲιφιεδ ϭϋ ϲομμα-σεπαρατεδ λιστ." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Λοαδ ονλϋ ταϭλεσ σπεϲιφιεδ ϭϋ ϲομμα-σεπαρατεδ λιστ." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Εξπορτ βερσιον 1 ταϭλεσ το τχε ΟΣ." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Εξπορτ βερσιον 2 ανδ βερσιον 3 ταϭλεσ το τχε ΟΣ." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Σετ ΟΕΜΙΔ οφ ΡΣΔΠ, ΞΣΔΤ ανδ ΡΣΔΤ." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Σετ ΟΕΜΤΑϬΛΕ ΙΔ οφ ΡΣΔΠ, ΞΣΔΤ ανδ ΡΣΔΤ." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Σετ ΟΕΜΤΑϬΛΕ ρεβισιον οφ ΡΣΔΠ, ΞΣΔΤ ανδ ΡΣΔΤ." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Σετ ϲρεατορ φιελδ οφ ΡΣΔΠ, ΞΣΔΤ ανδ ΡΣΔΤ." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Σετ ϲρεατορ ρεβισιον οφ ΡΣΔΠ, ΞΣΔΤ ανδ ΡΣΔΤ." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Δον'τ υπδατε ΕϬΔΑ. Μαϋ φιξ φαιλυρεσ ορ χανγσ ον σομε ϬΙΟΣεσ ϭυτ μακεσ ιτ " +"ινεφφεϲτιβε ωιτχ ΟΣ νοτ ρεϲειβινγ ΡΣΔΠ φρομ ΓΡΥϬ." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "πρεματυρε ενδ οφ φιλε %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--εξϲλυδε=ΤΑϬΛΕ1,ΤΑϬΛΕ2|--λοαδ-ονλϋ=ΤΑϬΛΕ1,ΤΑϬΛΕ2] ΦΙΛΕ1 [ΦΙΛΕ2] " +"[...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Λοαδ χοστ ΑϲΠΙ ταϭλεσ ανδ ταϭλεσ σπεϲιφιεδ ϭϋ αργυμεντσ." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "ερρορ: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "ουτ οφ μεμορϋ" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "ϲαννοτ ρεαδ `%s': %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ΑϲΠΙ σχυτδοων φαιλεδ" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Λιστ δεβιϲεσ." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "φιλεναμε εξπεϲτεδ" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ΦΙΛΕ" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Πριντ α ϭλοϲκ λιστ." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "ϋου νεεδ το λοαδ τχε κερνελ φιρστ" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Ϭοοτ αν οπερατινγ σϋστεμ." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Νο ϭοοτ τιμε στατιστιϲσ ισ αβαιλαϭλε\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Σχοω ϭοοτ τιμε στατιστιϲσ." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "Δισκ ϲαϲχε στατιστιϲσ: χιτσ = %lu (%lu.%02lu%%), μισσεσ = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Νο δισκ ϲαϲχε στατιστιϲσ αβαιλαϭλε\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Γετ δισκ ϲαϲχε ινφο." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Αϲϲεπτ ΔΟΣ-στϋλε ϲΡ/ΝΛ λινε ενδινγσ." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Σχοω τχε ϲοντεντσ οφ α φιλε." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "τωο αργυμεντσ εξπεϲτεδ" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "ϲομπαρε φιλε `%s' ωιτχ `%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Φιλεσ διφφερ ιν σιζε: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Φιλεσ διφφερ ατ τχε οφφσετ %llu: 0ξ%x [%s], 0ξ%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Τχε φιλεσ αρε ιδεντιϲαλ.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ΦΙΛΕ1 ΦΙΛΕ2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "ϲομπαρε τωο φιλεσ." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Λοαδ ανοτχερ ϲονφιγ φιλε." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Λοαδ ανοτχερ ϲονφιγ φιλε ωιτχουτ ϲχανγινγ ϲοντεξτ." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Λοαδ ανοτχερ ϲονφιγ φιλε ωιτχουτ ϲχανγινγ ϲοντεξτ ϭυτ τακε ονλϋ μενυ εντριεσ." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Λοαδ ανοτχερ ϲονφιγ φιλε ϭυτ τακε ονλϋ μενυ εντριεσ." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[ϋεαρ-]μοντχ-δαϋ] [χουρ:μινυτε[:σεϲονδ]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Δισπλαϋ/σετ ϲυρρεντ δατετιμε." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Δο νοτ ουτπυτ τχε τραιλινγ νεωλινε." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Εναϭλε ιντερπρετατιον οφ ϭαϲκσλασχ εσϲαπεσ." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-ε|-ν] ΣΤΡΙΝΓ" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Δισπλαϋ α λινε οφ τεξτ." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Ρεϭοοτ ιντο φιρμωαρε σετυπ μενυ." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Φιξ βιδεο προϭλεμ." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ΡΟΜ ιμαγε ισ πρεσεντ." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "ϲαν'τ εναϭλε ΡΟΜ αρεα." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"ϲρεατε ϬΙΟΣ-λικε στρυϲτυρεσ φορ ϭαϲκωαρδ ϲομπατιϭιλιτϋ ωιτχ εξιστινγ ΟΣ." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "ϬΙΟΣ_ΔΥΜΠ [ΙΝΤ10_ΔΥΜΠ]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Λοαδ ϬΙΟΣ δυμπ." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "ΣΤΡΙΝΓ ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Εβαλυατε αργυμεντσ ασ ΓΡΥϬ ϲομμανδσ" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ϲαν ϭε ϭοοτεδ ασ ι386 ΠΑΕ Ξεν υνπριβιλεγεδ γυεστ κερνελ" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ϲαν ϭε ϭοοτεδ ασ ξ86_64 Ξεν υνπριβιλεγεδ γυεστ κερνελ" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ϲαν ϭε υσεδ ασ Ξεν ξ86 πριβιλεγεδ γυεστ κερνελ" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ϲαν ϭε υσεδ ασ ξ86 μυλτιϭοοτ κερνελ" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ϲαν ϭε υσεδ ασ ξ86 μυλτιϭοοτ2 κερνελ" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΑΡΜ Λινυξ" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΑΡΜ64 Λινυξ" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΙΑ64 Λινυξ" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΜΙΠΣ Λινυξ" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΜΙΠΣΕΛ Λινυξ" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΣΠΑΡϲ64 Λινυξ" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΠΟΩΕΡΠϲ Λινυξ" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86 Λινυξ" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86 Λινυξ συππορτινγ 32-ϭιτ προτοϲολ" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86 κΦρεεϬΣΔ" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ι386 κΦρεεϬΣΔ" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86_64 κΦρεεϬΣΔ" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86 κΝετϬΣΔ" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ι386 κΝετϬΣΔ" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86_64 κΝετϬΣΔ" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ι386 ΕΦΙ φιλε" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86_64 ΕΦΙ φιλε" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΙΑ64 ΕΦΙ φιλε" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΑΡΜ64 ΕΦΙ φιλε" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΑΡΜ ΕΦΙ φιλε" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ χιϭερφιλ.σϋσ ιν χιϭερνατεδ στατε" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ξ86_64 ΞΝΥ (Μαϲ ΟΣ Ξ κερνελ)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ι386 ΞΝΥ (Μαϲ ΟΣ Ξ κερνελ)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ΞΝΥ (Μαϲ ΟΣ Ξ κερνελ) χιϭερνατεδ ιμαγε" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ ϬΙΟΣ ϭοοτσεϲτορ" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "φαλσε" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "ΟΠΤΙΟΝΣ ΦΙΛΕ" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "ϲχεϲκ ιφ ΦΙΛΕ ισ οφ σπεϲιφιεδ τϋπε." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "νο συϲχ παρτιτιον" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Νεω ΜϬΡ ισ ωριττεν το `%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ΔΕΒΙϲΕ [ΠΑΡΤΙΤΙΟΝ[+/-[ΤΫΠΕ]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Φιλλ χϋϭριδ ΜϬΡ οφ ΓΠΤ δριβε ΔΕΒΙϲΕ. Σπεϲιφιεδ παρτιτιονσ ωιλλ ϭε α παρτ οφ " +"χϋϭριδ ΜϬΡ. Υπ το 3 παρτιτιονσ αρε αλλοωεδ. ΤΫΠΕ ισ αν ΜϬΡ τϋπε. + μεανσ " +"τχατ παρτιτιον ισ αϲτιβε. Ονλϋ ονε παρτιτιον ϲαν ϭε αϲτιβε." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Χαλτσ τχε ϲομπυτερ. Τχισ ϲομμανδ δοεσ νοτ ωορκ ον αλλ φιρμωαρε " +"ιμπλεμεντατιονσ." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Σπεϲιφϋ χασχ το υσε." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "ΧΑΣΧ" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "ϲχεϲκ χασχεσ οφ φιλεσ ωιτχ χασχ λιστ ΦΙΛΕ." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Ϭασε διρεϲτορϋ φορ χασχ λιστ." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "ΔΙΡ" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Δον'τ στοπ αφτερ φιρστ ερρορ." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Υνϲομπρεσσ φιλε ϭεφορε ϲχεϲκσυμμινγ." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ΡΕΑΔ ΕΡΡΟΡ\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: ΧΑΣΧ ΜΙΣΜΑΤϲΧ\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: ΟΚ\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-χ ΧΑΣΧ [-ϲ ΦΙΛΕ [-π ΠΡΕΦΙΞ]] [ΦΙΛΕ1 [ΦΙΛΕ2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "ϲομπυτε ορ ϲχεϲκ χασχ ϲχεϲκσυμ." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-ϲ ΦΙΛΕ [-π ΠΡΕΦΙΞ]] [ΦΙΛΕ1 [ΦΙΛΕ2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Σετ Αδβανϲεδ Ποωερ Μαναγεμεντ\n" +"(1=λοω, ..., 254=χιγχ, 255=οφφ)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Δισπλαϋ ποωερ μοδε." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Φρεεζε ΑΤΑ σεϲυριτϋ σεττινγσ υντιλ ρεσετ." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Δισπλαϋ ΣΜΑΡΤ χεαλτχ στατυσ." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Σετ Αυτοματιϲ Αϲουστιϲ Μαναγεμεντ\n" +"(0=οφφ, 128=ϗυιετ, ..., 254=φαστ)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Σετ στανδϭϋ τιμεουτ\n" +"(0=οφφ, 1=5σ, 2=10σ, ..., 240=20μ, 241=30μ, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Σετ δριβε το στανδϭϋ μοδε." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Σετ δριβε το σλεεπ μοδε." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Πριντ δριβε ιδεντιτϋ ανδ σεττινγσ." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Σχοω ραω ϲοντεντσ οφ ΑΤΑ ΙΔΕΝΤΙΦΫ σεϲτορ." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Δισαϭλε/εναϭλε ΣΜΑΡΤ (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Δο νοτ πριντ μεσσαγεσ." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "ονε αργυμεντ εξπεϲτεδ" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[ΟΠΤΙΟΝΣ] ΔΙΣΚ" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Γετ/σετ ΑΤΑ δισκ παραμετερσ." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Υσαγε:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ΠΑΤΤΕΡΝ ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Σχοω α χελπ μεσσαγε." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Σκιπ οφφσετ ϭϋτεσ φρομ τχε ϭεγιννινγ οφ φιλε." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Ρεαδ ονλϋ ΛΕΝΓΤΧ ϭϋτεσ." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[ΟΠΤΙΟΝΣ] ΦΙΛΕ_ΟΡ_ΔΕΒΙϲΕ" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Σχοω ραω ϲοντεντσ οφ α φιλε ορ μεμορϋ." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Σχοω ραω δυμπ οφ τχε ϲΜΟΣ ϲοντεντσ." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "ϬΫΤΕ:ϬΙΤ" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Τεστ ϭιτ ατ ϬΫΤΕ:ϬΙΤ ιν ϲΜΟΣ." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "ϲλεαρ ϭιτ ατ ϬΫΤΕ:ϬΙΤ ιν ϲΜΟΣ." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Σετ ϭιτ ατ ϬΫΤΕ:ϬΙΤ ιν ϲΜΟΣ." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Σχοω ϲορεϭοοτ ϭοοτ τιμε στατιστιϲσ." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Λιστ ϲορεϭοοτ ταϭλεσ." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "ϲχεϲκ ιφ ϲΠΥ συππορτσ 64-ϭιτ (λονγ) μοδε (δεφαυλτ)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "ϲχεϲκ ιφ ϲΠΥ συππορτσ Πχϋσιϲαλ Αδδρεσσ Εξτενσιον." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "ϲχεϲκ φορ ϲΠΥ φεατυρεσ." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Σχοω τχε ϲυρρεντ μαππινγσ." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Ρεσετ αλλ μαππινγσ το τχε δεφαυλτ βαλυεσ." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Περφορμ ϭοτχ διρεϲτ ανδ ρεβερσε μαππινγσ." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Νο δριβεσ χαβε ϭεεν ρεμαππεδ" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "ΟΣ δισκ #νυμ ------> ΓΡΥϬ/ϬΙΟΣ δεβιϲε" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-λ | -ρ | [-σ] γρυϭδεβ οσδισκ." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Μαναγε τχε ϬΙΟΣ δριβε μαππινγσ." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Δο νοτ υσε ΑΠΜ το χαλτ τχε ϲομπυτερ." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Χαλτ τχε σϋστεμ, ιφ ποσσιϭλε υσινγ ΑΠΜ." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "νο ΑΠΜ φουνδ" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Βερσιον %u.%u\n" +"32-ϭιτ ϲΣ = 0ξ%x, λεν = 0ξ%x, οφφσετ = 0ξ%x\n" +"16-ϭιτ ϲΣ = 0ξ%x, λεν = 0ξ%x\n" +"ΔΣ = 0ξ%x, λεν = 0ξ%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-ϭιτ προτεϲτεδ ιντερφαϲε συππορτεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-ϭιτ προτεϲτεδ ιντερφαϲε υνσυππορτεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-ϭιτ προτεϲτεδ ιντερφαϲε συππορτεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-ϭιτ προτεϲτεδ ιντερφαϲε υνσυππορτεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "ϲΠΥ Ιδλε σλοωσ δοων προϲεσσορ\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "ϲΠΥ Ιδλε δοεσν'τ σλοω δοων προϲεσσορ\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "ΑΠΜ δισαϭλεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "ΑΠΜ εναϭλεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "ΑΠΜ δισενγαγεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "ΑΠΜ ενγαγεδ\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Σχοω ΑΠΜ ινφορματιον." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "φιλεναμε ορ τεμπο ανδ νοτεσ εξπεϲτεδ" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Ινβαλιδ τεμπο ιν %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "φιλε `%s' νοτ φουνδ" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "υνρεϲογνιζεδ νυμϭερ" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "ΦΙΛΕ | ΤΕΜΠΟ [ΠΙΤϲΧ1 ΔΥΡΑΤΙΟΝ1] [ΠΙΤϲΧ2 ΔΥΡΑΤΙΟΝ2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Πλαϋ α τυνε." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "σετ νυμλοϲκ μοδε" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "σετ ϲαπσλοϲκ μοδε" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "σετ σϲρολλλοϲκ μοδε" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "σετ ινσερτ μοδε" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "σετ παυσε μοδε" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "πρεσσ λεφτ σχιφτ" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "πρεσσ ριγχτ σχιφτ" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "πρεσσ ΣϋσΡϗ" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "πρεσσ ΝυμΛοϲκ κεϋ" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "πρεσσ ϲαπσΛοϲκ κεϋ" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "πρεσσ ΣϲρολλΛοϲκ κεϋ" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "πρεσσ Ινσερτ κεϋ" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "πρεσσ λεφτ αλτ" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "πρεσσ ριγχτ αλτ" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "πρεσσ λεφτ ϲτρλ" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "πρεσσ ριγχτ ϲτρλ" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "δον'τ υπδατε ΛΕΔ στατε" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[ΚΕΫΣΤΡΟΚΕ1] [ΚΕΫΣΤΡΟΚΕ2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Εμυλατε α κεϋστροκε σεϗυενϲε" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Ρυν `γο' το ρεσυμε ΓΡΥϬ." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Ρετυρν το ΙΕΕΕ1275 προμπτ." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Σαβε ρεαδ βαλυε ιντο βαριαϭλε ΒΑΡΝΑΜΕ." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "ΒΑΡΝΑΜΕ" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "ΠΟΡΤ" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Ρεαδ 8-ϭιτ βαλυε φρομ ΠΟΡΤ." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Ρεαδ 16-ϭιτ βαλυε φρομ ΠΟΡΤ." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Ρεαδ 32-ϭιτ βαλυε φρομ ΠΟΡΤ." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ΠΟΡΤ ΒΑΛΥΕ [ΜΑΣΚ]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Ωριτε 8-ϭιτ ΒΑΛΥΕ το ΠΟΡΤ." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Ωριτε 16-ϭιτ ΒΑΛΥΕ το ΠΟΡΤ." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ΑΔΔΡ ΒΑΛΥΕ [ΜΑΣΚ]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Ωριτε 32-ϭιτ ΒΑΛΥΕ το ΠΟΡΤ." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "βαριαϭλε `%s' ισν'τ σετ" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Λοαδ α κεϋϭοαρδ λαϋουτ." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "ϲχεϲκ Σχιφτ κεϋ." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "ϲχεϲκ ϲοντρολ κεϋ." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "ϲχεϲκ Αλτ κεϋ." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "ϲχεϲκ κεϋ μοδιφιερ στατυσ." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "ϲαν'τ φινδ ϲομμανδ `%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Εντερ πασσωορδ: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Παρσε λεγαϲϋ ϲονφιγ ιν σαμε ϲοντεξτ" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Παρσε λεγαϲϋ ϲονφιγ ιν νεω ϲοντεξτ" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Παρσε λεγαϲϋ ϲονφιγ ιν σαμε ϲοντεξτ τακινγ ονλϋ μενυ εντριεσ" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Παρσε λεγαϲϋ ϲονφιγ ιν νεω ϲοντεξτ τακινγ ονλϋ μενυ εντριεσ" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--νο-μεμ-οπτιον] [--τϋπε=ΤΫΠΕ] ΦΙΛΕ [ΑΡΓ ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Σιμυλατε γρυϭ-λεγαϲϋ `κερνελ' ϲομμανδ" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ΦΙΛΕ [ΑΡΓ ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Σιμυλατε γρυϭ-λεγαϲϋ `ινιτρδ' ϲομμανδ" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Σιμυλατε γρυϭ-λεγαϲϋ `μοδυλενουνζιπ' ϲομμανδ" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--μδ5] ΠΑΣΣΩΔ [ΦΙΛΕ]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Σιμυλατε γρυϭ-λεγαϲϋ `πασσωορδ' ϲομμανδ" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Σιμυλατε γρυϭ-λεγαϲϋ `πασσωορδ' ϲομμανδ ιν μενυ εντρϋ μοδε" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Σπεϲιφϋ φιλεναμε." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Σκιπ σιγνατυρε-ϲχεϲκινγ οφ τχε ενβιρονμεντ φιλε." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-φ ΦΙΛΕ] [-σ|--σκιπ-σιγ] [βαριαϭλε_ναμε_το_ωχιτελιστ] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Λοαδ βαριαϭλεσ φρομ ενβιρονμεντ ϭλοϲκ φιλε." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-φ ΦΙΛΕ]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Λιστ βαριαϭλεσ φρομ ενβιρονμεντ ϭλοϲκ φιλε." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-φ ΦΙΛΕ] βαριαϭλε_ναμε [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Σαβε βαριαϭλεσ το ενβιρονμεντ ϭλοϲκ φιλε." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Σχοω α λονγ λιστ ωιτχ μορε δεταιλεδ ινφορματιον." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Πριντ σιζεσ ιν α χυμαν ρεαδαϭλε φορματ." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Λιστ αλλ φιλεσ." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Νετωορκ προτοϲολσ:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-λ|-χ|-α] [ΦΙΛΕ ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Λιστ δεβιϲεσ ανδ φιλεσ." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Σχοω βερσιον 1 ταϭλεσ ονλϋ." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Σχοω βερσιον 2 ανδ βερσιον 3 ταϭλεσ ονλϋ." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Σχοω ΑϲΠΙ ινφορματιον." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "αβαιλαϭλε ΡΑΜ" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "ρεσερβεδ ΡΑΜ" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ΑϲΠΙ ρεϲλαιμαϭλε ΡΑΜ" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ΑϲΠΙ νον-βολατιλε στοραγε ΡΑΜ" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "φαυλτϋ ΡΑΜ (ϬαδΡΑΜ)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "περσιστεντ ΡΑΜ" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "περσιστεντ ΡΑΜ (λεγαϲϋ)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "ΡΑΜ χολδινγ ϲορεϭοοτ ταϭλεσ" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "ΡΑΜ χολδινγ φιρμωαρε ϲοδε" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "ϭασε_αδδρ = 0ξ%llx, λενγτχ = 0ξ%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "ϭασε_αδδρ = 0ξ%llx, λενγτχ = 0ξ%llx, τϋπε = 0ξ%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Λιστ μεμορϋ μαπ προβιδεδ ϭϋ φιρμωαρε." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Λιστ ΠϲΙ δεβιϲεσ." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Ϭλεσσ ΦΙΛΕ οφ ΧΦΣ ορ ΧΦΣ+ παρτιτιον φορ ιντελ μαϲσ." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Ϭλεσσ ΔΙΡ οφ ΧΦΣ ορ ΧΦΣ+ παρτιτιον φορ ΠΠϲ μαϲσ." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ΑΔΔΡ" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Ρεαδ 8-ϭιτ βαλυε φρομ ΑΔΔΡ." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Ρεαδ 16-ϭιτ βαλυε φρομ ΑΔΔΡ." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Ρεαδ 32-ϭιτ βαλυε φρομ ΑΔΔΡ." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Ωριτε 8-ϭιτ ΒΑΛΥΕ το ΑΔΔΡ." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Ωριτε 16-ϭιτ ΒΑΛΥΕ το ΑΔΔΡ." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Ωριτε 32-ϭιτ ΒΑΛΥΕ το ΑΔΔΡ." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Μενυ εντρϋ τϋπε." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "ΣΤΡΙΝΓ" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Λιστ οφ υσερσ αλλοωεδ το ϭοοτ τχισ εντρϋ." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "ΥΣΕΡΝΑΜΕ[,ΥΣΕΡΝΑΜΕ]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Κεϋϭοαρδ κεϋ το ϗυιϲκλϋ ϭοοτ τχισ εντρϋ." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "ΚΕΫϬΟΑΡΔ_ΚΕΫ" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Υσε ΣΤΡΙΝΓ ασ μενυ εντρϋ ϭοδϋ." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Μενυ εντρϋ ιδεντιφιερ." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Τχισ εντρϋ ϲαν ϭε ϭοοτεδ ϭϋ ανϋ υσερ." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "ϬΛΟϲΚ" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Δεφινε α μενυ εντρϋ." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Δεφινε α συϭμενυ." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Ναμε\tΡεφ ϲουντ\tΔεπενδενϲιεσ\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Σχοω τχισ μεσσαγε." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ΑΔΔΡ [ΣΙΖΕ]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Σχοω μεμορϋ ϲοντεντσ." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "ΜΟΔΥΛΕ" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Ρεμοβε α μοδυλε." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Σχοω λοαδεδ μοδυλεσ." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Εξιτ φρομ ΓΡΥϬ." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Νο ϲΣ5536 φουνδ" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "ϲΣ5536 ατ %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Σϋστεμ μαναγεμεντ ϭυσ ϲοντρολλερ Ι/Ο σπαϲε ισ ατ 0ξ%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "ΡΑΜ σλοτ νυμϭερ %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Ωριττεν ΣΠΔ ϭϋτεσ: %d Ϭ.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Τοταλ φλασχ σιζε: %d Ϭ.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Μεμορϋ τϋπε: ΔΔΡ2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Παρτ νο: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Μεμορϋ τϋπε: Υνκνοων." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Πριντ Μεμορϋ ινφορματιον." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s δοεσ νοτ συππορτ ΥΥΙΔσ" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[ΜΟΔΥΛΕ1 ΜΟΔΥΛΕ2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Σωιτϲχ το νατιβε δισκ δριβερσ. Ιφ νο μοδυλεσ αρε σπεϲιφιεδ δεφαυλτ σετ (πατα," +"αχϲι,υσϭμσ,οχϲι,υχϲι,εχϲι) ισ υσεδ" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Περφορμ ϲΟΜΜΑΝΔΣ ον παρτιτιον.\n" +"Υσε `παρττοολ ΠΑΡΤΙΤΙΟΝ χελπ' φορ τχε λιστ οφ αβαιλαϭλε ϲομμανδσ." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=ΒΑΛ" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Σορρϋ, νο παρττοολ ισ αβαιλαϭλε φορ %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "υνκνοων αργυμεντ `%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "ΠΑΡΤΙΤΙΟΝ ϲΟΜΜΑΝΔΣ" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "ΥΣΕΡ ΠΑΣΣΩΟΡΔ" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Σετ υσερ πασσωορδ (πλαιντεξτ). Υνρεϲομμενδεδ ανδ ινσεϲυρε." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ινβαλιδ ΠϬΚΔΦ2 πασσωορδ" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "ΥΣΕΡ ΠϬΚΔΦ2_ΠΑΣΣΩΟΡΔ" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Σετ υσερ πασσωορδ (ΠϬΚΔΦ2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Σελεϲτ δεβιϲε ϭϋ βενδορ ανδ δεβιϲε ΙΔσ." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[βενδορ]:[δεβιϲε]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Σελεϲτ δεβιϲε ϭϋ ιτσ ποσιτιον ον τχε ϭυσ." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[ϭυσ]:[σλοτ][.φυνϲ]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "μισσινγ `%c' σϋμϭολ" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-σ ΠΟΣΙΤΙΟΝ] [-δ ΔΕΒΙϲΕ]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Σχοω ραω δυμπ οφ τχε ΠϲΙ ϲονφιγυρατιον σπαϲε." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Σετ α βαριαϭλε το ρετυρν βαλυε." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Δετερμινε δριβερ." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Δετερμινε παρτιτιον μαπ τϋπε." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Δετερμινε φιλεσϋστεμ τϋπε." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Δετερμινε φιλεσϋστεμ ΥΥΙΔ." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Δετερμινε φιλεσϋστεμ λαϭελ." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "φιλεσϋστεμ `%s' δοεσ νοτ συππορτ λαϭελσ" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ΔΕΒΙϲΕ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Ρετριεβε δεβιϲε ινφο." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ΕΝΒΒΑΡ]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Σετ βαριαϭλε ωιτχ υσερ ινπυτ." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Ρεϭοοτ τχε ϲομπυτερ." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Στορε ματϲχεδ ϲομπονεντ ΝΥΜϬΕΡ ιν ΒΑΡΝΑΜΕ." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[ΝΥΜϬΕΡ:]ΒΑΡΝΑΜΕ" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "ΡΕΓΕΞΠ ΣΤΡΙΝΓ" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Τεστ ιφ ΡΕΓΕΞΠ ματϲχεσ ΣΤΡΙΝΓ." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "ΝΑΜΕ [ΒΑΡΙΑϬΛΕ] [ΧΙΝΤΣ]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Σεαρϲχ δεβιϲεσ ϭϋ φιλε. Ιφ ΒΑΡΙΑϬΛΕ ισ σπεϲιφιεδ, τχε φιρστ δεβιϲε φουνδ ισ " +"σετ το α βαριαϭλε." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Σεαρϲχ δεβιϲεσ ϭϋ λαϭελ. Ιφ ΒΑΡΙΑϬΛΕ ισ σπεϲιφιεδ, τχε φιρστ δεβιϲε φουνδ ισ " +"σετ το α βαριαϭλε." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Σεαρϲχ δεβιϲεσ ϭϋ ΥΥΙΔ. Ιφ ΒΑΡΙΑϬΛΕ ισ σπεϲιφιεδ, τχε φιρστ δεβιϲε φουνδ ισ " +"σετ το α βαριαϭλε." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Σεαρϲχ δεβιϲεσ ϭϋ α φιλε." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Σεαρϲχ δεβιϲεσ ϭϋ α φιλεσϋστεμ λαϭελ." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Σεαρϲχ δεβιϲεσ ϭϋ α φιλεσϋστεμ ΥΥΙΔ." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Σετ α βαριαϭλε το τχε φιρστ δεβιϲε φουνδ." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Δο νοτ προϭε ανϋ φλοππϋ δριβε." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Φιρστ τρϋ τχε δεβιϲε ΧΙΝΤ. Ιφ ΧΙΝΤ ενδσ ιν ϲομμα, αλσο τρϋ συϭπαρτιτιονσ" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "ΧΙΝΤ" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Φιρστ τρϋ τχε δεβιϲε ΧΙΝΤ ιφ ϲυρρεντλϋ ρυννινγ ον ΙΕΕΕ1275. Ιφ ΧΙΝΤ ενδσ ιν " +"ϲομμα, αλσο τρϋ συϭπαρτιτιονσ" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Φιρστ τρϋ τχε δεβιϲε ΧΙΝΤ ιφ ϲυρρεντλϋ ρυννινγ ον ϬΙΟΣ. Ιφ ΧΙΝΤ ενδσ ιν " +"ϲομμα, αλσο τρϋ συϭπαρτιτιονσ" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Φιρστ τρϋ τχε δεβιϲε ΧΙΝΤ ιφ διρεϲτ χαρδωαρε αϲϲεσσ ισ συππορτεδ. Ιφ ΧΙΝΤ " +"ενδσ ιν ϲομμα, αλσο τρϋ συϭπαρτιτιονσ" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Φιρστ τρϋ τχε δεβιϲε ΧΙΝΤ ιφ ϲυρρεντλϋ ρυννινγ ον ΕΦΙ. Ιφ ΧΙΝΤ ενδσ ιν " +"ϲομμα, αλσο τρϋ συϭπαρτιτιονσ" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Φιρστ τρϋ τχε δεβιϲε ΧΙΝΤ ιφ ϲυρρεντλϋ ρυννινγ ον ΑΡϲ. Ιφ ΧΙΝΤ ενδσ ιν " +"ϲομμα, αλσο τρϋ συϭπαρτιτιονσ" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-φ|-λ|-υ|-σ|-ν] [--χιντ ΧΙΝΤ [--χιντ ΧΙΝΤ] ...] ΝΑΜΕ" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Σεαρϲχ δεβιϲεσ ϭϋ φιλε, φιλεσϋστεμ λαϭελ ορ φιλεσϋστεμ ΥΥΙΔ. Ιφ --σετ ισ " +"σπεϲιφιεδ, τχε φιρστ δεβιϲε φουνδ ισ σετ το α βαριαϭλε. Ιφ νο βαριαϭλε ναμε " +"ισ σπεϲιφιεδ, `ροοτ' ισ υσεδ." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Ρεγιστερ %x οφ %x:%02x.%x ισ %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-σ ΠΟΣΙΤΙΟΝ] [-δ ΔΕΒΙϲΕ] [-β ΒΑΡ] ΡΕΓΙΣΤΕΡ[=ΒΑΛΥΕ[:ΜΑΣΚ]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Μανιπυλατε ΠϲΙ δεβιϲεσ." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Βερϭοσε ϲουντδοων." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Αλλοω το ιντερρυπτ ωιτχ ΕΣϲ." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ΝΥΜϬΕΡ_ΟΦ_ΣΕϲΟΝΔΣ" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Ωαιτ φορ α σπεϲιφιεδ νυμϭερ οφ σεϲονδσ." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "ροοτ διρεϲτορϋ οφ τχε σϋσλινυξ δισκ [δεφαυλτ=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"ϲυρρεντ διρεϲτορϋ οφ σϋσλινυξ [δεφαυλτ ισ παρεντ διρεϲτορϋ οφ ινπυτ φιλε]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "ασσυμε ινπυτ ισ αν ισολινυξ ϲονφιγυρατιον φιλε." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "ασσυμε ινπυτ ισ α πξελινυξ ϲονφιγυρατιον φιλε." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "ασσυμε ινπυτ ισ α σϋσλινυξ ϲονφιγυρατιον φιλε." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Εξεϲυτε σϋσλινυξ ϲονφιγ ιν σαμε ϲοντεξτ" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Εξεϲυτε σϋσλινυξ ϲονφιγ ιν νεω ϲοντεξτ" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Εξεϲυτε σϋσλινυξ ϲονφιγ ιν σαμε ϲοντεξτ τακινγ ονλϋ μενυ εντριεσ" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Εξεϲυτε σϋσλινυξ ϲονφιγ ιν νεω ϲοντεξτ τακινγ ονλϋ μενυ εντριεσ" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "νο τερμιναλ σπεϲιφιεδ" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "τερμιναλ `%s' ισν'τ φουνδ" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Αϲτιβε ινπυτ τερμιναλσ:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Αβαιλαϭλε ινπυτ τερμιναλσ:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Αϲτιβε ουτπυτ τερμιναλσ:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Αβαιλαϭλε ουτπυτ τερμιναλσ:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--αππενδ|--ρεμοβε] [ΤΕΡΜΙΝΑΛ1] [ΤΕΡΜΙΝΑΛ2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Λιστ ορ σελεϲτ αν ινπυτ τερμιναλ." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Λιστ ορ σελεϲτ αν ουτπυτ τερμιναλ." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ΕΞΠΡΕΣΣΙΟΝ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Εβαλυατε αν εξπρεσσιον." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ΕΞΠΡΕΣΣΙΟΝ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Λοαδ τχε σαμε φιλε ιν μυλτιπλε ωαϋσ." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Σπεϲιφϋ σιζε φορ εαϲχ ρεαδ οπερατιον" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "ινβαλιδ ϭλοϲκ σιζε" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Φιλε σιζε: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Ελαπσεδ τιμε: %d.%03d σ \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Σπεεδ: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-σ ΣΙΖΕ] ΦΙΛΕΝΑΜΕ" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Τεστ φιλε ρεαδ σπεεδ." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "νο ϲομμανδ ισ σπεϲιφιεδ" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Ελαπσεδ τιμε: %d.%03d σεϲονδσ \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "ϲΟΜΜΑΝΔ [ΑΡΓΣ]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Μεασυρε τιμε υσεδ ϭϋ ϲΟΜΜΑΝΔ" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Τρανσλατε το υππερ ϲασε." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Τρανσλατε το λοωερ ϲασε." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[ΟΠΤΙΟΝΣ] [ΣΕΤ1] [ΣΕΤ2] [ΣΤΡΙΝΓ]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Τρανσλατε ΣΕΤ1 ϲχαραϲτερσ το ΣΕΤ2 ιν ΣΤΡΙΝΓ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Δο νοτχινγ, συϲϲεσσφυλλϋ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Δο νοτχινγ, υνσυϲϲεσσφυλλϋ." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Τεστ ΥΣϬ συππορτ." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Σκιπ σιγνατυρε-ϲχεϲκινγ οφ τχε πυϭλιϲ κεϋ φιλε." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "ϭαδ σιγνατυρε" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "πυϭλιϲ κεϋ %08x νοτ φουνδ" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "μοδυλε `%s' ισν'τ λοαδεδ" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-σ|--σκιπ-σιγ] ΦΙΛΕ ΣΙΓΝΑΤΥΡΕ_ΦΙΛΕ [ΠΥϬΚΕΫ_ΦΙΛΕ]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Βεριφϋ δεταϲχεδ σιγνατυρε." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-σ|--σκιπ-σιγ] ΠΥϬΚΕΫ_ΦΙΛΕ" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Αδδ ΠΥϬΚΕΫ_ΦΙΛΕ το τρυστεδ κεϋσ." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Σχοω τχε λιστ οφ τρυστεδ κεϋσ." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ΠΥϬΚΕΫ_ΙΔ" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Ρεμοβε ΠΥϬΚΕΫ_ΙΔ φρομ τρυστεδ κεϋσ." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Τεξτ-ονλϋ " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Διρεϲτ ϲολορ, μασκ: %d/%d/%d/%d ποσ: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Παλεττεδ " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "ΫΥΒ " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Πλαναρ " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Χερϲυλεσ " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "ϲΓΑ " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Νον-ϲχαιν 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Μονοϲχρομε " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Υνκνοων βιδεο μοδε " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " ΕΔΙΔ ϲχεϲκσυμ ινβαλιδ" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " ΕΔΙΔ βερσιον: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Πρεφερρεδ μοδε: %uξ%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Νο πρεφερρεδ μοδε αβαιλαϭλε\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "ινβαλιδ βιδεο μοδε σπεϲιφιϲατιον `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Λιστ οφ συππορτεδ βιδεο μοδεσ:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Λεγενδ: μασκ/ποσιτιον=ρεδ/γρεεν/ϭλυε/ρεσερβεδ" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Αδαπτερ `%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Νο ινφο αβαιλαϭλε" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Φαιλεδ το ινιτιαλιζε βιδεο αδαπτερ" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[ΩξΧ[ξΔ]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Λιστ αβαιλαϭλε βιδεο μοδεσ. Ιφ ρεσολυτιον ισ γιβεν σχοω ονλϋ μοδεσ ματϲχινγ " +"ιτ." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[ΩξΧ]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Τεστ βιδεο συϭσϋστεμ ιν μοδε ΩξΧ." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Τεστ βιδεο συϭσϋστεμ." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[ΔΙΡ]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Λιστ Ξεν στοραγε." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-λ] ΓΡΥϬΥΥΙΔ [ΒΑΡΝΑΜΕ]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Τρανσφορμ 64-ϭιτ ΥΥΙΔ το φορματ συιταϭλε φορ ΞΝΥ. Ιφ -λ ισ γιβεν κεεπ ιτ " +"λοωερϲασε ασ δονε ϭϋ ϭλκιδ." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "φαιλυρε ρεαδινγ σεϲτορ 0ξ%llx φρομ `%s'" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "φαιλυρε ωριτινγ σεϲτορ 0ξ%llx το `%s'" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Μουντ ϭϋ ΥΥΙΔ." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Μουντ αλλ." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Μουντ αλλ βολυμεσ ωιτχ `ϭοοτ' φλαγ σετ." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "ϲαννοτ οπεν `%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "ϲαννοτ σεεκ `%s': %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "ΣΟΥΡϲΕ|-υ ΥΥΙΔ|-α|-Ï­" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Μουντ α ϲρϋπτο δεβιϲε." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"ϲουλδν'τ φινδ πχϋσιϲαλ βολυμε `%s'. Σομε μοδυλεσ μαϋ ϭε μισσινγ φρομ ϲορε " +"ιμαγε." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "πχϋσιϲαλ βολυμε %s νοτ φουνδ" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "νο μεδια ιν `%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "ϲουλδν'τ λοαδ σχα256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "ϲουλδν'τ λοαδ σχα512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "ϲουλδν'τ ρεαδ ΕΛΙ μεταδατα" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "ωρονγ ΕΛΙ μαγιϲ ορ βερσιον" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Αττεμπτινγ το δεϲρϋπτ μαστερ κεϋ..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Εντερ πασσπχρασε φορ %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Σλοτ %d οπενεδ\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "αττεμπτ το ρεαδ ορ ωριτε ουτσιδε οφ δισκ `%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "ϲαννοτ ωριτε το ϲΔ-ΡΟΜ" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Νατιβε δισκ δριβερσ αρε ιν υσε. Ρεφυσινγ το υσε φιρμωαρε δισκ ιντερφαϲε." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "ϋουρ ΛΔΜ Εμϭεδδινγ Παρτιτιον ισ τοο σμαλλ; εμϭεδδινγ ωον'τ ϭε ποσσιϭλε" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "τχισ ΛΔΜ χασ νο Εμϭεδδινγ Παρτιτιον; εμϭεδδινγ ωον'τ ϭε ποσσιϭλε" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Δελετε τχε σπεϲιφιεδ λοοπϭαϲκ δριβε." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-δ] ΔΕΒΙϲΕΝΑΜΕ ΦΙΛΕ." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Μακε α βιρτυαλ δριβε φρομ α φιλε." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "ρελοϲατιον 0ξ%x ισ νοτ ιμπλεμεντεδ ϋετ" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "νο σϋμϭολ ταϭλε" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "τχισ ΕΛΦ φιλε ισ νοτ οφ τχε ριγχτ τϋπε" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Λοαδ ανδ ινιτιαλιζε ΕΦΙ εμυλατορ." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Φιναλιζε λοαδινγ οφ ΕΦΙ εμυλατορ." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Υνλοαδ ΕΦΙ εμυλατορ." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "σϋμϭολ `%s' νοτ φουνδ" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Λοαδεδ φοντσ:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "ΦΙΛΕ..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Σπεϲιφϋ ονε ορ μορε φοντ φιλεσ το λοαδ." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Λιστ τχε λοαδεδ φοντσ." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "τοο δεεπ νεστινγ οφ σϋμλινκσ" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "αττεμπτ το ρεαδ παστ τχε ενδ οφ φιλε" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "ϲουλδν'τ φινδ α νεϲεσσαρϋ μεμϭερ δεβιϲε οφ μυλτι-δεβιϲε φιλεσϋστεμ" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "νοτ α διρεϲτορϋ" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "νοτ α ρεγυλαρ φιλε" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "ϋουρ ϲορε.ιμγ ισ υνυσυαλλϋ λαργε. Ιτ ωον'τ φιτ ιν τχε εμϭεδδινγ αρεα" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "ινβαλιδ φιλε ναμε `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "ϲχεϲκσυμ βεριφιϲατιον φαιλεδ" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "νο δεϲρϋπτιον κεϋ αβαιλαϭλε" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "ΜΑϲ βεριφιϲατιον φαιλεδ" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Ασσυμε ινπυτ ισ ραω." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Ασσυμε ινπυτ ισ χεξ." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Ασσυμε ινπυτ ισ πασσπχρασε." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Εντερ ΖΦΣ πασσωορδ: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-χ|-π|-ρ] [ΦΙΛΕ]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Ιμπορτ ΖΦΣ ωραππινγ κεϋ στορεδ ιν ΦΙΛΕ." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Βιρτυαλ δεβιϲε ισ ρεμοβεδ" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Βιρτυαλ δεβιϲε ισ φαυλτεδ" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Βιρτυαλ δεβιϲε ισ οφφλινε" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Βιρτυαλ δεβιϲε ισ δεγραδεδ" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Βιρτυαλ δεβιϲε ισ ονλινε" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Ινϲορρεϲτ βιρτυαλ δεβιϲε: νο τϋπε αβαιλαϭλε" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Λεαφ βιρτυαλ δεβιϲε (φιλε ορ δισκ)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Ϭοοτπατχ: υναβαιλαϭλε\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Ϭοοτπατχ: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Πατχ: υναβαιλαϭλε" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Πατχ: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Δεβιδ: υναβαιλαϭλε" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Δεβιδ: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Τχισ ΒΔΕΒ ισ α μιρρορ" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Τχισ ΒΔΕΒ ισ α ΡΑΙΔΖ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Ινϲορρεϲτ ΒΔΕΒ" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "ΒΔΕΒ ωιτχ %d ϲχιλδρεν\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "ΒΔΕΒ ελεμεντ νυμϭερ %d ισν'τ ϲορρεϲτ\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "ΒΔΕΒ ελεμεντ νυμϭερ %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Υνκνοων βιρτυαλ δεβιϲε τϋπε: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Ποολ στατε: αϲτιβε" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Ποολ στατε: εξπορτεδ" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Ποολ στατε: δεστροϋεδ" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Ποολ στατε: ρεσερβεδ φορ χοτ σπαρε" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Ποολ στατε: λεβελ 2 ΑΡϲ δεβιϲε" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Ποολ στατε: υνινιτιαλιζεδ" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Ποολ στατε: υναβαιλαϭλε" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Ποολ στατε: ποτεντιαλλϋ αϲτιβε" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Ποολ ναμε: υναβαιλαϭλε" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Ποολ ναμε: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Ποολ ΓΥΙΔ: υναβαιλαϭλε" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Ποολ ΓΥΙΔ: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Υναϭλε το ρετριεβε ποολ στατε" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Υνρεϲογνιζεδ ποολ στατε" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Νο βιρτυαλ δεβιϲε τρεε αβαιλαϭλε" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Πριντ ΖΦΣ ινφο αϭουτ ΔΕΒΙϲΕ." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "ΦΙΛΕΣΫΣΤΕΜ [ΒΑΡΙΑϬΛΕ]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Πριντ ΖΦΣ-ϬΟΟΤΦΣΟϬΪ ορ στορε ιτ ιντο ΒΑΡΙΑϬΛΕ" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Νοω ϲοννεϲτ τχε ρεμοτε δεϭυγγερ, πλεασε." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Σταρτ ΓΔϬ στυϭ ον γιβεν πορτ" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Ϭρεακ ιντο ΓΔϬ" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Στοπ ΓΔϬ στυϭ" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "πρεματυρε ενδ οφ φιλε" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Τρανσλατεσ τχε στρινγ ωιτχ τχε ϲυρρεντ σεττινγσ." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Πρεσσ εντερ το ϭοοτ τχε σελεϲτεδ ΟΣ, `ε' το εδιτ τχε ϲομμανδσ ϭεφορε ϭοοτινγ " +"ορ `ϲ' φορ α ϲομμανδ-λινε. ΕΣϲ το ρετυρν πρεβιουσ μενυ." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Πρεσσ εντερ το ϭοοτ τχε σελεϲτεδ ΟΣ, `ε' το εδιτ τχε ϲομμανδσ ϭεφορε ϭοοτινγ " +"ορ `ϲ' φορ α ϲομμανδ-λινε." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "εντερ: ϭοοτ, `ε': οπτιονσ, `ϲ': ϲμδ-λινε" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Τχε χιγχλιγχτεδ εντρϋ ωιλλ ϭε εξεϲυτεδ αυτοματιϲαλλϋ ιν %dσ." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%dσ ρεμαινινγ." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dσ" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "ΓΡΥϬ Ϭοοτ Μενυ" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ΑΡΓΠ_ΧΕΛΠ_ΦΜΤ: %s βαλυε ισ λεσσ τχαν ορ εϗυαλ το %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ΑΡΓΠ_ΧΕΛΠ_ΦΜΤ παραμετερ ρεϗυιρεσ α βαλυε" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ΑΡΓΠ_ΧΕΛΠ_ΦΜΤ παραμετερ μυστ ϭε ποσιτιβε" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Υνκνοων ΑΡΓΠ_ΧΕΛΠ_ΦΜΤ παραμετερ" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Γαρϭαγε ιν ΑΡΓΠ_ΧΕΛΠ_ΦΜΤ: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Μανδατορϋ ορ οπτιοναλ αργυμεντσ το λονγ οπτιονσ αρε αλσο μανδατορϋ ορ " +"οπτιοναλ φορ ανϋ ϲορρεσπονδινγ σχορτ οπτιονσ." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ορ: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [ΟΠΤΙΟΝ...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Τρϋ '%s --χελπ' ορ '%s --υσαγε' φορ μορε ινφορματιον.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Ρεπορτ ϭυγσ το %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Υνκνοων σϋστεμ ερρορ" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "γιβε τχισ χελπ λιστ" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "γιβε α σχορτ υσαγε μεσσαγε" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "ΝΑΜΕ" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "σετ τχε προγραμ ναμε" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "ΣΕϲΣ" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "χανγ φορ ΣΕϲΣ σεϲονδσ (δεφαυλτ 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "πριντ προγραμ βερσιον" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ΠΡΟΓΡΑΜ ΕΡΡΟΡ) Νο βερσιον κνοων!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Τοο μανϋ αργυμεντσ\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ΠΡΟΓΡΑΜ ΕΡΡΟΡ) Οπτιον σχουλδ χαβε ϭεεν ρεϲογνιζεδ!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: οπτιον '%s' ισ αμϭιγυουσ; ποσσιϭιλιτιεσ:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: οπτιον '--%s' δοεσν'τ αλλοω αν αργυμεντ\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: οπτιον '%c%s' δοεσν'τ αλλοω αν αργυμεντ\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: οπτιον '--%s' ρεϗυιρεσ αν αργυμεντ\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: υνρεϲογνιζεδ οπτιον '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: υνρεϲογνιζεδ οπτιον '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ινβαλιδ οπτιον -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: οπτιον ρεϗυιρεσ αν αργυμεντ -- '%c'\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: οπτιον '-Ω %s' ισ αμϭιγυουσ\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: οπτιον '-Ω %s' δοεσν'τ αλλοω αν αργυμεντ\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: οπτιον '-Ω %s' ρεϗυιρεσ αν αργυμεντ\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Συϲϲεσσ" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Νο ματϲχ" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ινβαλιδ ρεγυλαρ εξπρεσσιον" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ινβαλιδ ϲολλατιον ϲχαραϲτερ" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ινβαλιδ ϲχαραϲτερ ϲλασσ ναμε" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Τραιλινγ ϭαϲκσλασχ" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ινβαλιδ ϭαϲκ ρεφερενϲε" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Υνματϲχεδ [ ορ [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Υνματϲχεδ ( ορ \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Υνματϲχεδ \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ινβαλιδ ϲοντεντ οφ \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ινβαλιδ ρανγε ενδ" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Μεμορϋ εξχαυστεδ" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ινβαλιδ πρεϲεδινγ ρεγυλαρ εξπρεσσιον" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Πρεματυρε ενδ οφ ρεγυλαρ εξπρεσσιον" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Ρεγυλαρ εξπρεσσιον τοο ϭιγ" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Υνματϲχεδ ) ορ \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "υνκνοων ρεγεξπ ερρορ" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Νο πρεβιουσ ρεγυλαρ εξπρεσσιον" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Χελλο Ωορλδ" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Σαϋ `Χελλο Ωορλδ'." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "αττεμπτ το σεεκ ουτσιδε οφ τχε φιλε" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "υνσυππορτεδ γζιπ φορματ" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "λζοπ φιλε ϲορρυπτεδ" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "ξζ φιλε ϲορρυπτεδ ορ υνσυππορτεδ ϭλοϲκ οπτιονσ" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "ινβαλιδ αρϲχ-δεπενδεντ ΕΛΦ μαγιϲ" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ΕΝΒΒΑΡ=ΒΑΛΥΕ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Σετ αν ενβιρονμεντ βαριαϭλε." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ΕΝΒΒΑΡ" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Ρεμοβε αν ενβιρονμεντ βαριαϭλε." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ΑΡΓ]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Λιστ δεβιϲεσ ορ φιλεσ." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Ινσερτ α μοδυλε." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "δισκ `%s' νοτ φουνδ" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "αττεμπτ το ρεαδ ορ ωριτε ουτσιδε οφ παρτιτιον" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "ινβαλιδ αρϲχ-ινδεπενδεντ ΕΛΦ μαγιϲ" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "δεβιϲε ϲουντ εξϲεεδσ λιμιτ" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "ϲαννοτ ωριτε το `%s': %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"τχε δεβιϲε.μαπ εντρϋ `%s' ισ ινβαλιδ. Ιγνορινγ ιτ. Πλεασε ϲορρεϲτ ορ δελετε " +"ϋουρ δεβιϲε.μαπ" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"τχε δριβε ναμε `%s' ιν δεβιϲε.μαπ ισ ινϲορρεϲτ. Υσινγ %s ινστεαδ. Πλεασε υσε " +"τχε φορμ [χφϲ]δ[0-9]* (Ε.γ. `χδ0' ορ `ϲδ')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "ϲαν'τ οπεν `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "ΔΕΒΙϲΕ_ΝΑΜΕ" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Σετ ροοτ δεβιϲε." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "υσε ΦΙΛΕ ασ τχε δεβιϲε μαπ [δεφαυλτ=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "υσε ΦΙΛΕ ασ μεμδισκ" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "υσε ΓΡΥϬ φιλεσ ιν τχε διρεϲτορϋ ΔΙΡ [δεφαυλτ=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "πριντ βερϭοσε μεσσαγεσ." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "ωαιτ υντιλ α δεϭυγγερ ωιλλ ατταϲχ" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Υνκνοων εξτρα αργυμεντ `%s'." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "ΓΡΥϬ εμυλατορ." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Ερρορ ιν παρσινγ ϲομμανδ λινε αργυμεντσ\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Ρυν `γδϭ %s %d', ανδ σετ ΑΡΓΣ.ΧΟΛΔ το ζερο.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: ωαρνινγ:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: ινφο:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: ερρορ:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "φιλε `%s' ισ τοο ϭιγ" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "υνκνοων φιλεσϋστεμ" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Σχυτδοων φαιλεδ" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Εξιτ φαιλεδ" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "οβερφλοω ισ δετεϲτεδ" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Δισϲαρδινγ ιμπροπερλϋ νεστεδ παρτιτιον (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Υνκνοων ϲομμανδ `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Δισπλαϋ τχισ χελπ ανδ εξιτ." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Δισπλαϋ τχε υσαγε οφ τχισ ϲομμανδ ανδ εξιτ." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "μισσινγ μανδατορϋ οπτιον φορ `%s'" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "τχε αργυμεντ `%s' ρεϗυιρεσ αν ιντεγερ" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"α βαλυε ωασ ασσιγνεδ το τχε αργυμεντ `%s' ωχιλε ιτ δοεσν'τ ρεϗυιρε αν " +"αργυμεντ" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Πριντ ϭαϲκτραϲε." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "ΓΡΥϬ δοεσν'τ κνοω χοω το χαλτ τχισ μαϲχινε ϋετ!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Δεφαυλτ σερβερ ισ ${νετ_δεφαυλτ_σερβερ}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "ινβαλιδ ϲολορ σπεϲιφιϲατιον `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Ρεϭοοτ φαιλεδ" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[ΛΕΝΓΤΧ]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Χεξδυμπ ρανδομ δατα." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "δεβιϲε τρεε μυστ ϭε συππλιεδ (σεε `δεβιϲετρεε' ϲομμανδ)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "ινβαλιδ ζΙμαγε" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "ινβαλιδ δεβιϲε τρεε" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Λοαδ Λινυξ." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Λοαδ ινιτρδ." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Λοαδ ΔΤϬ φιλε." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"πλαιν ιμαγε κερνελ νοτ συππορτεδ - ρεϭυιλδ ωιτχ ϲΟΝΦΙΓ_(Î¥)ΕΦΙ_ΣΤΥϬ εναϭλεδ" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "φαιλεδ το γετ ΦΔΤ" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "ϋου νεεδ το λοαδ τχε Ξεν Χϋπερβισορ φιρστ" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Λοαδ α ξεν χϋπερβισορ." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Λοαδ α ξεν μοδυλε." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[ΟΠΤΣ]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Ϭοοτ ϬΙΟΣ-ϭασεδ σϋστεμ." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Λοαδ ανοτχερ ϭοοτ λοαδερ." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Δισπλαϋ ουτπυτ ον αλλ ϲονσολεσ." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Υσε σεριαλ ϲονσολε." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Ασκ φορ φιλε ναμε το ρεϭοοτ φρομ." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Υσε ϲΔ-ΡΟΜ ασ ροοτ." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Ινβοκε υσερ ϲονφιγυρατιον ρουτινγ." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Εντερ ιν ΚΔϬ ον ϭοοτ." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Υσε ΓΔϬ ρεμοτε δεϭυγγερ ινστεαδ οφ ΔΔϬ." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Δισαϭλε αλλ ϭοοτ ουτπυτ." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Ωαιτ φορ κεϋπρεσσ αφτερ εβερϋ λινε οφ ουτπυτ." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Υσε ϲομπιλεδ-ιν ροοτ δεβιϲε." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Ϭοοτ ιντο σινγλε μοδε." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Ϭοοτ ωιτχ βερϭοσε μεσσαγεσ." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Δον'τ ρεϭοοτ, ϊυστ χαλτ." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "ϲχανγε ϲονφιγυρεδ δεβιϲεσ." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "ϲομΥΝΙΤ[,ΣΠΕΕΔ]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Δισαϭλε ΣΜΠ." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Δισαϭλε ΑϲΠΙ." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Δον'τ δισπλαϋ ϭοοτ διαγνοστιϲ μεσσαγεσ." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Ϭοοτ ωιτχ δεϭυγ μεσσαγεσ." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Συππρεσσ νορμαλ ουτπυτ (ωαρνινγσ ρεμαιν)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ΑΔΔΡ|ϲομΥΝΙΤ][,ΣΠΕΕΔ]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "ναμε" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "τϋπε" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "αδδρ" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "σιζε" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Ϭοοτινγ ιν ϭλινδ μοδε" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Λοαδ κερνελ οφ ΦρεεϬΣΔ." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Λοαδ κερνελ οφ ΟπενϬΣΔ." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Λοαδ κερνελ οφ ΝετϬΣΔ." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Λοαδ ΦρεεϬΣΔ ενβ." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Λοαδ ΦρεεϬΣΔ κερνελ μοδυλε." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Λοαδ ΝετϬΣΔ κερνελ μοδυλε." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Λοαδ ΝετϬΣΔ κερνελ μοδυλε (ΕΛΦ)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Λοαδ ΦρεεϬΣΔ κερνελ μοδυλε (ΕΛΦ)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Λοαδ κΟπενϬΣΔ ραμδισκ." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Λοαδ ανοτχερ ϲορεϭοοτ παϋλοαδ" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Λεγαϲϋ `ασκ' παραμετερ νο λονγερ συππορτεδ." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s ισ δεπρεϲατεδ. Υσε σετ γφξπαϋλοαδ=%s ϭεφορε λινυξ ϲομμανδ ινστεαδ.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s ισ δεπρεϲατεδ. ΒΓΑ μοδε %d ισν'τ ρεϲογνιζεδ. Υσε σετ " +"γφξπαϋλοαδ=ΩΙΔΤΧξΧΕΙΓΧΤ[ξΔΕΠΤΧ] ϭεφορε λινυξ ϲομμανδ ινστεαδ.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--φορϲε|--ϭπϭ] ΦΙΛΕ" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "τχε σιζε οφ `%s' ισ τοο λαργε" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Λοαδ ΦρεεΔΟΣ κερνελ.σϋσ." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Λοαδ ΝΤΛΔΡ ορ ϬοοτΜΓΡ." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Οβερριδε γυεσσεδ μαππινγ οφ Πλαν9 δεβιϲεσ." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "ΓΡΥϬΔΕΒΙϲΕ=ΠΛΑΝ9ΔΕΒΙϲΕ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "ΚΕΡΝΕΛ ΑΡΓΣ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Λοαδ Πλαν9 κερνελ." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Λοαδ α ΠΞΕ ιμαγε." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Λοαδ Τρυεϲρϋπτ ΙΣΟ." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "ινιτρδ αλρεαδϋ λοαδεδ" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Λοαδ μοδυλε." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Πρεσσ ανϋ κεϋ το λαυνϲχ ξνυ" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Λοαδ `δεβιϲε-προπερτιεσ' δυμπ." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "ϲουλδ νοτ λοϲατε ΦΠΣΩΑ δριβερ" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "ΦΠΣΩΑ προτοϲολ ωασν'τ αϭλε το φινδ τχε ιντερφαϲε" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Νο ΦΠΣΩΑ φουνδ" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "ΦΠΣΩΑ ρεβισιον: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "ΦΙΛΕ [ΑΡΓΣ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Δισπλαϋ ΦΠΣΩΑ βερσιον." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "ΩΑΡΝΙΝΓ: νο ϲονσολε ωιλλ ϭε αβαιλαϭλε το ΟΣ" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Λοαδ α μυλτιϭοοτ 2 κερνελ." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Λοαδ α μυλτιϭοοτ 2 μοδυλε." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Λοαδ α μυλτιϭοοτ κερνελ." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Λοαδ α μυλτιϭοοτ μοδυλε." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Ϭαϲκγρουνδ ιμαγε μοδε." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "στρετϲχ|νορμαλ" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Λοαδ ΞΝΥ ιμαγε." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Λοαδ 64-ϭιτ ΞΝΥ ιμαγε." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Λοαδ ΞΝΥ εξτενσιον παϲκαγε." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Λοαδ ΞΝΥ εξτενσιον." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "ΔΙΡΕϲΤΟΡΫ [ΟΣϬυνδλεΡεϗυιρεδ]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Λοαδ ΞΝΥ εξτενσιον διρεϲτορϋ." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Λοαδ ΞΝΥ ραμδισκ. Ιτ ωιλλ ϭε αβαιλαϭλε ιν ΟΣ ασ μδ0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Λοαδ α σπλασχ ιμαγε φορ ΞΝΥ." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Λοαδ αν ιμαγε οφ χιϭερνατεδ ΞΝΥ." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ΑΔΔΡ1,ΜΑΣΚ1[,ΑΔΔΡ2,ΜΑΣΚ2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Δεϲλαρε μεμορϋ ρεγιονσ ασ φαυλτϋ (ϭαδραμ)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "ΦΡΟΜ[Κ|Μ|Γ] ΤΟ[Κ|Μ|Γ]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Ρεμοβε ανϋ μεμορϋ ρεγιονσ ιν σπεϲιφιεδ ρανγε." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "φουρ αργυμεντσ εξπεϲτεδ" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "υνρεϲογνισεδ νετωορκ ιντερφαϲε `%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "νο ΔΧϲΠ ινφο φουνδ" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "νο ΔΧϲΠ οπτιονσ φουνδ" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "νο ΔΧϲΠ οπτιον %d φουνδ" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "υνρεϲογνισεδ ΔΧϲΠ οπτιον φορματ σπεϲιφιϲατιον `%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "νο νετωορκ ϲαρδ φουνδ" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "ϲουλδν'τ αυτοϲονφιγυρε %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[ϲΑΡΔ]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "περφορμ α ϭοοτπ αυτοϲονφιγυρατιον" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "ΒΑΡ ΙΝΤΕΡΦΑϲΕ ΝΥΜϬΕΡ ΔΕΣϲΡΙΠΤΙΟΝ" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"ρετριεβε ΔΧϲΠ οπτιον ανδ σαβε ιτ ιντο ΒΑΡ. Ιφ ΒΑΡ ισ - τχεν πριντ τχε βαλυε." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "νο ΔΝΣ σερβερσ ϲονφιγυρεδ" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "δομαιν ναμε ϲομπονεντ ισ τοο λονγ" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "νο ΔΝΣ ρεϲορδ φουνδ" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "νο ΔΝΣ ρεπλϋ ρεϲειβεδ" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "ονλϋ ιπβ4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "ονλϋ ιπβ6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "πρεφερ ιπβ4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "πρεφερ ιπβ6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "ινβαλιδ αργυμεντ" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ΑΔΔΡΕΣΣ ΔΝΣΣΕΡΒΕΡ" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Περφορμ α ΔΝΣ λοοκυπ" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "ΔΝΣΣΕΡΒΕΡ" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Αδδ α ΔΝΣ σερβερ" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Ρεμοβε α ΔΝΣ σερβερ" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Λιστ ΔΝΣ σερβερσ" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "ϲουλδν'τ σενδ νετωορκ παϲκετ" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-ϭιτ προτεϲτεδ ιντερφαϲε συππορτεδ\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "υνσυππορτεδ ΧΤΤΠ ρεσπονσε" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "υνσυππορτεδ ΧΤΤΠ ερρορ %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "τιμε ουτ οπενινγ `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "τιμεουτ: ϲουλδ νοτ ρεσολβε χαρδωαρε αδδρεσσ" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "υνρεσολβαϭλε αδδρεσσ %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "υνρεϲογνισεδ νετωορκ αδδρεσσ `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "δεστινατιον υνρεαϲχαϭλε" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "ρουτε λοοπ δετεϲτεδ" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "αδδρεσσ νοτ φουνδ" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "ϋου ϲαν'τ δελετε τχισ αδδρεσσ" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Υνσυππορτεδ χω αδδρεσσ τϋπε %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Υνσυππορτεδ αδδρεσσ τϋπε %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "τχρεε αργυμεντσ εξπεϲτεδ" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "ϲαρδ νοτ φουνδ" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "τεμποραρϋ" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Υνκνοων αδδρεσσ τϋπε %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "νο σερβερ ισ σπεϲιφιεδ" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "τιμεουτ ρεαδινγ `%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "ΣΧΟΡΤΝΑΜΕ ϲΑΡΔ ΑΔΔΡΕΣΣ [ΧΩΑΔΔΡΕΣΣ]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Αδδ α νετωορκ αδδρεσσ." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[ϲΑΡΔ [ΧΩΑΔΔΡΕΣΣ]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Περφορμ αν ΙΠΒ6 αυτοϲονφιγυρατιον" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "ΣΧΟΡΤΝΑΜΕ" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Δελετε α νετωορκ αδδρεσσ." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "ΣΧΟΡΤΝΑΜΕ ΝΕΤ [ΙΝΤΕΡΦΑϲΕ| γω ΓΑΤΕΩΑΫ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Αδδ α νετωορκ ρουτε." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Δελετε α νετωορκ ρουτε." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "λιστ νετωορκ ρουτεσ" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "λιστ νετωορκ ϲαρδσ" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "λιστ νετωορκ αδδρεσσεσ" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "ϲοννεϲτιον ρεφυσεδ" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "ϲοννεϲτιον τιμεουτ" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Εντερ υσερναμε: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[ΥΣΕΡΛΙΣΤ]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "ϲχεϲκ ωχετχερ υσερ ισ ιν ΥΣΕΡΛΙΣΤ." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Ποσσιϭλε ϲομμανδσ αρε:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Ποσσιϭλε δεβιϲεσ αρε:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Ποσσιϭλε φιλεσ αρε:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Ποσσιϭλε παρτιτιονσ αρε:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Ποσσιϭλε αργυμεντσ αρε:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Ποσσιϭλε τχινγσ αρε:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Ωαρνινγ: σϋνταξ ερρορ (μισσινγ σλασχ) ιν `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Ωαρνινγ: ινβαλιδ φορεγρουνδ ϲολορ `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Ωαρνινγ: ινβαλιδ ϭαϲκγρουνδ ϲολορ `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ΕΝΒΒΑΡ [ΕΝΒΒΑΡ] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Εξπορτ βαριαϭλεσ." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Συνδαϋ" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Μονδαϋ" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Τυεσδαϋ" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Ωεδνεσδαϋ" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Τχυρσδαϋ" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Φριδαϋ" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Σατυρδαϋ" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "μοδυλε ισν'τ λοαδεδ" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "ΓΝΥ ΓΡΥϬ βερσιον %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ΕΣϲ ατ ανϋ τιμε εξιτσ." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Μινιμαλ ϬΑΣΧ-λικε λινε εδιτινγ ισ συππορτεδ. Φορ τχε φιρστ ωορδ, ΤΑϬ λιστσ " +"ποσσιϭλε ϲομμανδ ϲομπλετιονσ. Ανϋωχερε ελσε ΤΑϬ λιστσ ποσσιϭλε δεβιϲε ορ " +"φιλε ϲομπλετιονσ. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "γρυϭ>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "ϲλεαρ τχε σϲρεεν." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Εντερ νορμαλ μοδε." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Εξιτ φρομ νορμαλ μοδε." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Πρεσσ ανϋ κεϋ το ϲοντινυε..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Ϭοοτινγ `%s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Φαλλινγ ϭαϲκ το `%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Φαιλεδ το ϭοοτ ϭοτχ δεφαυλτ ανδ φαλλϭαϲκ εντριεσ.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Ϭοοτινγ α ϲομμανδ λιστ" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Μινιμυμ Εμαϲσ-λικε σϲρεεν εδιτινγ ισ συππορτεδ. ΤΑϬ λιστσ ϲομπλετιονσ. Πρεσσ " +"ϲτρλ-ξ ορ Φ10 το ϭοοτ, ϲτρλ-ϲ ορ Φ2 φορ α ϲομμανδ-λινε ορ ΕΣϲ το δισϲαρδ " +"εδιτσ ανδ ρετυρν το τχε ΓΡΥϬ μενυ." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Υσε τχε %C ανδ %C κεϋσ το σελεϲτ ωχιϲχ εντρϋ ισ χιγχλιγχτεδ." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "Ϭ" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "ΚιϬ" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "ΜιϬ" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "ΓιϬ" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "ΤιϬ" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "ΠιϬ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "Κ" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "Μ" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "Γ" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "Τ" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "Π" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "Ϭ/σ" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "ΚιϬ/σ" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "ΜιϬ/σ" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "ΓιϬ/σ" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "ΤιϬ/σ" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "ΠιϬ/σ" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Παρτιτιον %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Δεβιϲε %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Φιλεσϋστεμ ϲαννοτ ϭε αϲϲεσσεδ" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Φιλεσϋστεμ τϋπε %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Λαϭελ `%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Λαστ μοδιφιϲατιον τιμε %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Νο κνοων φιλεσϋστεμ δετεϲτεδ" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Παρτιτιον σταρτ ατ %llu%sΚιϬ" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Σεϲτορ σιζε %uϬ" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Τοταλ σιζε υνκνοων" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Τοταλ σιζε %llu%sΚιϬ" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--ΜΟΡΕ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "ϲαννοτ οπεν ϲονφιγυρατιον φιλε `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "νο ϲομπρεσσιον ισ αβαιλαϭλε φορ ϋουρ πλατφορμ" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "νο ΙΕΕΕ1275 ρουτινεσ αρε αβαιλαϭλε φορ ϋουρ πλατφορμ" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "νο ΕΦΙ ρουτινεσ αρε αβαιλαϭλε φορ ϋουρ πλατφορμ" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "νο ΣΓΙ ρουτινεσ αρε αβαιλαϭλε φορ ϋουρ πλατφορμ" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "νο ρανδομ νυμϭερ γενερατορ ισ αβαιλαϭλε φορ ϋουρ ΟΣ" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Φαιλεδ το ϲρεατε `δεβιϲε-μαππερ' τρεε" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "ϲαν'τ μουντ ενϲρϋπτεδ βολυμε `%s': %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "ϲουλδν'τ οπεν γεομ" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "ϲουλδν'τ φινδ γελι ϲονσυμερ" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "ϲουλδν'τ ρετριεβε γελι ΥΥΙΔ" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "ϲουλδν'τ φινδ γεομ `παρτ' ϲλασσ" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "υναλιγνεδ δεβιϲε σιζε" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "αττεμπτινγ το ρεαδ τχε ϲορε ιμαγε `%s' φρομ ΓΡΥϬ" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "αττεμπτινγ το ρεαδ τχε ϲορε ιμαγε `%s' φρομ ΓΡΥϬ αγαιν" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "ϲαννοτ ρεαδ `%s' ϲορρεϲτλϋ" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "φαιλεδ το ρεαδ τχε σεϲτορσ οφ τχε ϲορε ιμαγε" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "ϲαννοτ γετ τρανσλατορ ϲομμανδ λινε φορ πατχ `%s': %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "τρανσλατορ ϲομμανδ λινε ισ εμπτϋ φορ πατχ `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"τρανσλατορ `%s' φορ πατχ `%s' χασ σεβεραλ νον-οπτιον ωορδσ, ατ λεαστ `%s' " +"ανδ `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"τρανσλατορ `%s' φορ πατχ `%s' ισ γιβεν ονλϋ οπτιονσ, ϲαννοτ φινδ δεβιϲε παρτ" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Στοραγε ινφορματιον φορ `%s' δοεσ νοτ ινϲλυδε τϋπε" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "`%s' ισ νοτ α λοϲαλ δισκ" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Στοραγε ινφορματιον φορ `%s' ινδιϲατεσ νειτχερ α πλαιν παρτιτιον νορ α πλαιν " +"δισκ" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "ϲαν'τ ρετριεβε ϭλοϲκλιστσ: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "ϭλοϲκσιζε ισ νοτ διβισιϭλε ϭϋ 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "ινβαλιδ ζερο ϭλοϲκσιζε" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "ϲαν'τ ρετριεβε ϭλοϲκλιστσ" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ιοϲτλ ΡΑΙΔ_ΒΕΡΣΙΟΝ ερρορ: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "υνσυππορτεδ ΡΑΙΔ βερσιον: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ιοϲτλ ΓΕΤ_ΑΡΡΑΫ_ΙΝΦΟ ερρορ: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ιοϲτλ ΓΕΤ_ΔΙΣΚ_ΙΝΦΟ ερρορ: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Υναϭλε το οπεν στρεαμ φρομ %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "υνκνοων κινδ οφ ΡΑΙΔ δεβιϲε `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "`οϭππατχ' νοτ φουνδ ιν παρεντ διρσ οφ `%s', νο ΙΕΕΕ1275 ναμε δισϲοβερϋ" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "φαιλεδ το γετ ϲανονιϲαλ πατχ οφ `%s'" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "υνκνοων δεβιϲε τϋπε %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Υσαγε: %s ΔΕΒΙϲΕ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Υναϭλε το φορκ: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Υναϭλε το ϲρεατε πιπε: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "ϲαννοτ ρεστορε τχε οριγιναλ διρεϲτορϋ" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "ϲαννοτ στατ `%s': %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "ϲαννοτ μακε τεμποραρϋ φιλε: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "ϲαννοτ μακε τεμποραρϋ διρεϲτορϋ: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"ϲουλδν'τ φινδ ΙΕΕΕ1275 δεβιϲε πατχ φορ %s.\n" +"Ϋου ωιλλ χαβε το σετ `ϭοοτ-δεβιϲε' βαριαϭλε μανυαλλϋ" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: νοτ φουνδ" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"`νβσετενβ' φαιλεδ. \n" +"Ϋου ωιλλ χαβε το σετ `ϭοοτ-δεβιϲε' βαριαϭλε μανυαλλϋ. Ατ τχε ΙΕΕΕ1275 " +"προμπτ, τϋπε:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Ϋου ωιλλ χαβε το σετ `ΣϋστεμΠαρτιτιον' ανδ `ΟΣΛοαδερ' μανυαλλϋ." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "νο `/' ιν ϲανονιϲαλ φιλεναμε" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "ϲϋγωιν_ϲονβ_πατχ() φαιλεδ" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "ϲουλδν'τ ρετριεβε ρανδομ δατα" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Ινσυφφιϲιεντ πριβιλεγεσ το αϲϲεσσ φιρμωαρε, ασσυμινγ ϬΙΟΣ" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "νο ΕΦΙ ρουτινεσ αρε αβαιλαϭλε ωχεν ρυννινγ ιν ϬΙΟΣ μοδε" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "υνεξπεϲτεδ ΕΦΙ ερρορ" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "ϲουλδν'τ φινδ α φρεε ϬοοτΝΝΝΝ σλοτ" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"τχισ ΓΠΤ παρτιτιον λαϭελ ϲονταινσ νο ϬΙΟΣ Ϭοοτ Παρτιτιον; εμϭεδδινγ ωον'τ ϭε " +"ποσσιϭλε" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "ϋουρ ϬΙΟΣ Ϭοοτ Παρτιτιον ισ τοο σμαλλ; εμϭεδδινγ ωον'τ ϭε ποσσιϭλε" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Σεϲτορ %llu ισ αλρεαδϋ ιν υσε ϭϋ ραιδ ϲοντρολλερ `%s'; αβοιδινγ ιτ. Πλεασε " +"ασκ τχε μανυφαϲτυρερ νοτ το στορε δατα ιν ΜϬΡ γαπ" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Σεϲτορ %llu ισ αλρεαδϋ ιν υσε ϭϋ τχε προγραμ `%s'; αβοιδινγ ιτ. Τχισ " +"σοφτωαρε μαϋ ϲαυσε ϭοοτ ορ οτχερ προϭλεμσ ιν φυτυρε. Πλεασε ασκ ιτσ αυτχορσ " +"νοτ το στορε δατα ιν τχε ϭοοτ τραϲκ" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"οτχερ σοφτωαρε ισ υσινγ τχε εμϭεδδινγ αρεα, ανδ τχερε ισ νοτ ενουγχ ροομ φορ " +"ϲορε.ιμγ. Συϲχ σοφτωαρε ισ οφτεν τρϋινγ το στορε δατα ιν α ωαϋ τχατ αβοιδσ " +"δετεϲτιον. Ωε ρεϲομμενδ ϋου ινβεστιγατε" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"τχισ μσδοσ-στϋλε παρτιτιον λαϭελ χασ νο ποστ-ΜϬΡ γαπ; εμϭεδδινγ ωον'τ ϭε " +"ποσσιϭλε" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "ϋουρ εμϭεδδινγ αρεα ισ υνυσυαλλϋ σμαλλ. ϲορε.ιμγ ωον'τ φιτ ιν ιτ." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Μακε παρτιτιον αϲτιβε" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "νοτ α πριμαρϋ παρτιτιον" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Παρτιτιον %d ισ αϲτιβε νοω. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "ϲλεαρεδ αϲτιβε φλαγ ον %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "ϲχανγε παρτιτιον τϋπε" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Σετ `χιδδεν' φλαγ ιν παρτιτιον τϋπε" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "τχε παρτιτιον τϋπε 0ξ%x ισν'τ βαλιδ" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Σεττινγ παρτιτιον τϋπε το 0ξ%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "ϲαν'τ ϭρεακ 0 λοοπσ" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "νοτ ιν φυνϲτιον ϭοδϋ" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "ινβαλιδ βαριαϭλε ναμε `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "υνεξπεϲτεδ ενδ οφ φιλε" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[ΝΥΜ]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Εξιτ φρομ λοοπσ" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "ϲοντινυε λοοπσ" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Σχιφτ ποσιτιοναλ παραμετερσ." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ΒΑΛΥΕ]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Σετ ποσιτιοναλ παραμετερσ." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Ρετυρν φρομ α φυνϲτιον." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-μ (στρετϲχ|νορμαλ)] ΦΙΛΕ" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Λοαδ ϭαϲκγρουνδ ιμαγε φορ αϲτιβε τερμιναλ." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "ϲΟΛΟΡ" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Σετ ϭαϲκγρουνδ ϲολορ φορ αϲτιβε τερμιναλ." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Σχοω ϲϬΜΕΜ ϲονσολε ϲοντεντ." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Σετ τχε σεριαλ υνιτ." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Σετ τχε σεριαλ πορτ αδδρεσσ." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Σετ τχε σεριαλ πορτ σπεεδ." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Σετ τχε σεριαλ πορτ ωορδ λενγτχ." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Σετ τχε σεριαλ πορτ παριτϋ." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Σετ τχε σεριαλ πορτ στοπ ϭιτσ." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Σετ τχε ϭασε φρεϗυενϲϋ." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Εναϭλε/δισαϭλε ΡΤΣ/ϲΤΣ." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "σεριαλ πορτ `%s' ισν'τ φουνδ" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "υνσυππορτεδ σεριαλ πορτ φλοω ϲοντρολ" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[ΟΠΤΙΟΝΣ...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "ϲονφιγυρε σεριαλ πορτ." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "υνκνοων τερμινφο τϋπε `%s'" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ΑΣϲΙΙ" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "ΥΤΦ-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "βισυαλλϋ-ορδερεδ ΥΤΦ-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Υνκνοων ενϲοδινγ" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "ϲυρρεντ τερμινφο τϋπεσ:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Τερμιναλ ισ ΑΣϲΙΙ-ονλϋ [δεφαυλτ]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Τερμιναλ ισ λογιϲαλ-ορδερεδ ΥΤΦ-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Τερμιναλ ισ βισυαλλϋ-ορδερεδ ΥΤΦ-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Τερμιναλ χασ σπεϲιφιεδ γεομετρϋ." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ΩΙΔΤΧξΧΕΙΓΧΤ." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "ινϲορρεϲτ τερμιναλ διμενσιονσ σπεϲιφιϲατιον" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "τερμιναλ %s ισν'τ φουνδ ορ ιτ'σ νοτ χανδλεδ ϭϋ τερμινφο" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-α|-υ|-β] [-γ ΩξΧ] ΤΕΡΜ [ΤΫΠΕ]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Σετ τερμινφο τϋπε οφ ΤΕΡΜ το ΤΫΠΕ.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Πριντ ανδ εξεϲυτε ϭλοϲκ αργυμεντ." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "ϭιτμαπ φιλε `%s' ισ οφ υνσυππορτεδ φορματ" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " ΒϬΕ ινφο: βερσιον: %d.%d ΟΕΜ σοφτωαρε ρεβ: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " τοταλ μεμορϋ: %d ΚιϬ\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "νο συιταϭλε βιδεο μοδε φουνδ" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "αϲϲεσσ δενιεδ" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "ΜΟΔΥΛΕΣ" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "πρε-λοαδ σπεϲιφιεδ μοδυλεσ ΜΟΔΥΛΕΣ" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "ινσταλλ ονλϋ ΜΟΔΥΛΕΣ ανδ τχειρ δεπενδενϲιεσ [δεφαυλτ=αλλ]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "ΤΧΕΜΕΣ" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "ινσταλλ ΤΧΕΜΕΣ [δεφαυλτ=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "ΦΟΝΤΣ" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "ινσταλλ ΦΟΝΤΣ [δεφαυλτ=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "ΛΟϲΑΛΕΣ" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "ινσταλλ ονλϋ ΛΟϲΑΛΕΣ [δεφαυλτ=αλλ]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "ϲομπρεσσ ΓΡΥϬ φιλεσ [οπτιοναλ]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "ϲχοοσε τχε ϲομπρεσσιον το υσε φορ ϲορε ιμαγε" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "υσε ιμαγεσ ανδ μοδυλεσ υνδερ ΔΙΡ [δεφαυλτ=%s/<πλατφορμ>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "υσε τρανσλατιονσ υνδερ ΔΙΡ [δεφαυλτ=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "υσε τχεμεσ υνδερ ΔΙΡ [δεφαυλτ=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "εμϭεδ ΦΙΛΕ ασ πυϭλιϲ κεϋ φορ σιγνατυρε ϲχεϲκινγ" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "ϲαννοτ ρεναμε τχε φιλε %s το %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "δισκ δοεσ νοτ εξιστ, σο φαλλινγ ϭαϲκ το παρτιτιον δεβιϲε %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "ϲομμανδσ:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "ϲρεατε α ϭλανκ ενβιρονμεντ ϭλοϲκ φιλε." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Λιστ τχε ϲυρρεντ βαριαϭλεσ." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "σετ [ΝΑΜΕ=ΒΑΛΥΕ ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Σετ βαριαϭλεσ." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "υνσετ [ΝΑΜΕ ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Δελετε βαριαϭλεσ." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Οπτιονσ:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Ϋου νεεδ το σπεϲιφϋ ατ λεαστ ονε ϲομμανδ.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "ΦΙΛΕΝΑΜΕ ϲΟΜΜΑΝΔ" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Τοολ το εδιτ ενβιρονμεντ ϭλοϲκ." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Ιφ ΦΙΛΕΝΑΜΕ ισ `-', τχε δεφαυλτ βαλυε %s ισ υσεδ.\n" +"\n" +"Τχερε ισ νο `δελετε' ϲομμανδ; ιφ ϋου ωαντ το δελετε τχε ωχολε ενβιρονμεντ\n" +"ϭλοϲκ, υσε `ρμ %s'." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "ινβαλιδ ενβιρονμεντ ϭλοϲκ" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "ινβαλιδ παραμετερ %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "ενβιρονμεντ ϭλοϲκ τοο σμαλλ" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "δισκ ρεαδ φαιλσ ατ οφφσετ %lld, λενγτχ %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "ινβαλιδ σκιπ βαλυε %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "ρεαδ ερρορ ατ οφφσετ %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "ϲαννοτ οπεν ΟΣ φιλε `%s': %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "ϲαννοτ ωριτε το τχε στδουτ: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "ϲομπαρε φαιλ ατ οφφσετ %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "ΟΣ φιλε %s οπεν ερρορ: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "`λοοπϭαϲκ' ϲομμανδ φαιλσ: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "`ϲρϋπτομουντ' ϲομμανδ φαιλσ: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "ϲουλδν'τ ρετριεβε ΥΥΙΔ" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "λσ ΠΑΤΧ" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Λιστ φιλεσ ιν ΠΑΤΧ." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "ϲπ ΦΙΛΕ ΛΟϲΑΛ" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "ϲοπϋ ΦΙΛΕ το λοϲαλ φιλε ΛΟϲΑΛ." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "ϲατ ΦΙΛΕ" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "ϲοπϋ ΦΙΛΕ το στανδαρδ ουτπυτ." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "ϲμπ ΦΙΛΕ ΛΟϲΑΛ" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "ϲομπαρε ΦΙΛΕ ωιτχ λοϲαλ φιλε ΛΟϲΑΛ." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "χεξ ΦΙΛΕ" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Σχοω ϲοντεντσ οφ ΦΙΛΕ ιν χεξ." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "ϲρϲ ΦΙΛΕ" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Γετ ϲρϲ32 ϲχεϲκσυμ οφ ΦΙΛΕ." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "ϭλοϲκλιστ ΦΙΛΕ" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Δισπλαϋ ϭλοϲκλιστ οφ ΦΙΛΕ." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "ξνυ_υυιδ ΔΕΒΙϲΕ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "ϲομπυτε ΞΝΥ ΥΥΙΔ οφ τχε δεβιϲε." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "ΝΥΜ" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Σκιπ Ν ϭϋτεσ φρομ ουτπυτ φιλε." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Χανδλε Ν ϭϋτεσ ιν ουτπυτ φιλε." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Σπεϲιφϋ τχε νυμϭερ οφ ινπυτ φιλεσ." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Σετ δεϭυγ ενβιρονμεντ βαριαϭλε." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Μουντ ϲρϋπτο δεβιϲεσ." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "ΦΙΛΕ|προμπτ" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Λοαδ ζφσ ϲρϋπτο κεϋ." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Υνϲομπρεσσ δατα." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Ινβαλιδ δισκ ϲουντ.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Δισκ ϲουντ μυστ πρεϲεδε δισκσ λιστ.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Νο ϲομμανδ ισ σπεϲιφιεδ.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Νοτ ενουγχ παραμετερσ το ϲομμανδ.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Ινβαλιδ ϲομμανδ %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ΙΜΑΓΕ_ΠΑΤΧ ϲΟΜΜΑΝΔΣ" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Δεϭυγ τοολ φορ φιλεσϋστεμ δριβερ." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "σετ ινπυτ φιλεναμε φορ 32-ϭιτ παρτ." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "σετ ινπυτ φιλεναμε φορ 64-ϭιτ παρτ." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "σετ ουτπυτ φιλεναμε. Δεφαυλτ ισ ΣΤΔΟΥΤ" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[ΟΠΤΙΟΝΣ]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Γλυε 32-ϭιτ ανδ 64-ϭιτ ϭιναρϋ ιντο Αππλε υνιβερσαλ ονε." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Μισσινγ ινπυτ φιλε\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "ϲαννοτ ϲοπϋ `%s' το `%s': %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "ϲαν'τ ϲομπρεσσ `%s' το `%s'" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "ϲαννοτ οπεν διρεϲτορϋ `%s': %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "ϲαννοτ δελετε `%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "γρυϭ-μκιμαγε ισ ϲομπιλεδ ωιτχουτ ΞΖ συππορτ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Υνκνοων ϲομπρεσσιον φορματ %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Υνρεϲογνιζεδ ϲομπρεσσιον `%s'" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "υνκνοων ταργετ φορματ %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "ϲαννοτ φινδ λοϲαλε `%s'" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s δοεσν'τ εξιστ. Πλεασε σπεϲιφϋ --ταργετ ορ --διρεϲτορϋ" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "ινβαλιδ μοδινφο φιλε `%s'" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Υνκνοων πλατφορμ `%s-%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Μορε τχαν ονε ινσταλλ δεβιϲε?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"ινσταλλ ΓΡΥϬ ιμαγεσ υνδερ τχε διρεϲτορϋ ΔΙΡ/%s ινστεαδ οφ τχε %s διρεϲτορϋ" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ΤΑΡΓΕΤ" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "ινσταλλ ΓΡΥϬ φορ ΤΑΡΓΕΤ πλατφορμ [δεφαυλτ=%s]; αβαιλαϭλε ταργετσ: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"μακε τχε δριβε αλσο ϭοοταϭλε ασ φλοππϋ (δεφαυλτ φορ φδΞ δεβιϲεσ). Μαϋ ϭρεακ " +"ον σομε ϬΙΟΣεσ." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "δελετε δεβιϲε μαπ ιφ ιτ αλρεαδϋ εξιστσ" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "ινσταλλ εβεν ιφ προϭλεμσ αρε δετεϲτεδ" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "υσε ιδεντιφιερ φιλε εβεν ιφ ΥΥΙΔ ισ αβαιλαϭλε" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"δισκ μοδυλε το υσε (ϭιοσδισκ ορ νατιβε). Τχισ οπτιον ισ ονλϋ αβαιλαϭλε ον " +"ϬΙΟΣ ταργετ." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"δον'τ υπδατε τχε `ϭοοτ-δεβιϲε'/`Ϭοοτ*' ΝΒΡΑΜ βαριαϭλεσ. Τχισ οπτιον ισ ονλϋ " +"αβαιλαϭλε ον ΕΦΙ ανδ ΙΕΕΕ1275 ταργετσ." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "δο νοτ προϭε φορ φιλεσϋστεμσ ιν ΔΕΒΙϲΕ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "δο νοτ ινσταλλ ϭοοτσεϲτορ" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Δο νοτ αππλϋ ανϋ ρεεδ-σολομον ϲοδεσ ωχεν εμϭεδδινγ ϲορε.ιμγ. Τχισ οπτιον ισ " +"ονλϋ αβαιλαϭλε ον ξ86 ϬΙΟΣ ταργετσ." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"τχε ινσταλλατιον δεβιϲε ισ ρεμοβαϭλε. Τχισ οπτιον ισ ονλϋ αβαιλαϭλε ον ΕΦΙ." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ΙΔ" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "τχε ΙΔ οφ ϭοοτλοαδερ. Τχισ οπτιον ισ ονλϋ αβαιλαϭλε ον ΕΦΙ ανδ Μαϲσ." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "υσε ΔΙΡ ασ τχε ΕΦΙ Σϋστεμ Παρτιτιον ροοτ." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "υσε ΔΙΡ φορ ΠΠϲ ΜΑϲ ινσταλλ." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "υσε ΦΙΛΕ ασ φοντ φορ λαϭελ" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "υσε ϲΟΛΟΡ φορ λαϭελ" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "υσε ϲΟΛΟΡ φορ λαϭελ ϭαϲκγρουνδ" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "υσε ΣΤΡΙΝΓ ασ προδυϲτ βερσιον" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[ΟΠΤΙΟΝ] [ΙΝΣΤΑΛΛ_ΔΕΒΙϲΕ]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Ινσταλλ ΓΡΥϬ ον ϋουρ δριβε." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"ΙΝΣΤΑΛΛ_ΔΕΒΙϲΕ μυστ ϭε σϋστεμ δεβιϲε φιλεναμε.\n" +"%s ϲοπιεσ ΓΡΥϬ ιμαγεσ ιντο %s. Ον σομε πλατφορμσ, ιτ μαϋ αλσο ινσταλλ ΓΡΥϬ " +"ιντο τχε ϭοοτ σεϲτορ." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "τχε δριβε %s ισ δεφινεδ μυλτιπλε τιμεσ ιν τχε δεβιϲε μαπ %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Υναϭλε το δετερμινε ϋουρ πλατφορμ. Υσε --ταργετ." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Ινσταλλινγ φορ %s πλατφορμ.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "ινσταλλ δεβιϲε ισν'τ σπεϲιφιεδ" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "ϲαννοτ φινδ ΕΦΙ διρεϲτορϋ" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "ϲαννοτ φινδ α δεβιϲε φορ %s (ισ /δεβ μουντεδ?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "ϲαννοτ φινδ α ΓΡΥϬ δριβε φορ %s. ϲχεϲκ ϋουρ δεβιϲε.μαπ" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s δοεσν'τ λοοκ λικε αν ΕΦΙ παρτιτιον" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Ϋου'βε φουνδ α ϭυγ" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "φιλεσϋστεμ ον %s ισ νειτχερ ΧΦΣ νορ ΧΦΣ+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"αττεμπτ το ινσταλλ το ενϲρϋπτεδ δισκ ωιτχουτ ϲρϋπτοδισκ εναϭλεδ. Σετ `%s' ιν " +"φιλε `%s'" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "ϲαν'τ ϲρεατε φιλε: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "νο χιντσ αβαιλαϭλε φορ ϋουρ πλατφορμ. Εξπεϲτ ρεδυϲεδ περφορμανϲε" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "ΝΟΤ ΡΥΝΝΙΝΓ: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "τχε ϲχοσεν παρτιτιον ισ νοτ α ΠΡεΠ παρτιτιον" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "φαιλεδ το ϲοπϋ Γρυϭ το τχε ΠΡεΠ παρτιτιον" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"τχε ΠΡεΠ παρτιτιον ισ νοτ εμπτϋ. Ιφ ϋου αρε συρε ϋου ωαντ το υσε ιτ, ρυν δδ " +"το ϲλεαρ ιτ: `%s'" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "ΕΦΙ ϭοοτλοαδερ ιδ ισν'τ σπεϲιφιεδ." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "ΩΑΡΝΙΝΓ: νο πλατφορμ-σπεϲιφιϲ ινσταλλ ωασ περφορμεδ" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Ινσταλλατιον φινισχεδ. Νο ερρορ ρεπορτεδ." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "ϭλεσσ φορ ξ86-ϭασεδ μαϲσ" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "ϭλεσσ φορ ππϲ-ϭασεδ μαϲσ" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Νο πατχ ορ δεβιϲε ισ σπεϲιφιεδ.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ππϲ ΠΑΤΧ|--ξ86 ΦΙΛΕ" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Μαϲ-στϋλε ϭλεσσ ον ΧΦΣ ορ ΧΦΣ+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Υσαγε: %s [ΙΝΦΙΛΕ [ΟΥΤΦΙΛΕ]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Φρεετϋπε Ερρορ %d λοαδινγ γλϋπχ 0ξ%x φορ Î¥+0ξ%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (μεδιαλ)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (λεφτμοστ)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (ριγχτμοστ)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Ουτ οφ ρανγε συϭστιτυτιον (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Ουτ οφ ρανγε λοοκυπ: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Υνσυππορτεδ συϭστιτυτιον τϋπε: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Υνσυππορτεδ συϭστιτυτιον σπεϲιφιϲατιον: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Υνσυππορτεδ ϲοβεραγε σπεϲιφιϲατιον: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "ΩΑΡΝΙΝΓ: υνσυππορτεδ φοντ φεατυρε παραμετερσ: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "σαβε ουτπυτ ιν ΦΙΛΕ [ρεϗυιρεδ]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "σελεϲτ φαϲε ινδεξ" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "ΦΡΟΜ-ΤΟ[,ΦΡΟΜ-ΤΟ]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "σετ φοντ ρανγε" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "σετ φοντ φαμιλϋ ναμε" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "ΣΙΖΕ" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "σετ φοντ σιζε" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "σετ φοντ δεσϲεντ" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "σετ φοντ ασϲεντ" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "ϲονβερτ το ϭολδ φοντ" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "φορϲε αυτοχιντ" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "δισαϭλε χιντινγ" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ιγνορε ϭιτμαπ στρικεσ ωχεν λοαδινγ" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ινβαλιδ φοντ ρανγε" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[ΟΠΤΙΟΝΣ] ΦΟΝΤ_ΦΙΛΕΣ" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "ϲονβερτ ϲομμον φοντ φιλε φορματσ ιντο ΠΦ2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "ουτπυτ φιλε μυστ ϭε σπεϲιφιεδ" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "ΦΤ_Ινιτ_ΦρεεΤϋπε φαιλσ" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "ϲαν'τ οπεν φιλε %s, ινδεξ %d: ερρορ %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "ϲαν'τ σετ %dξ%d φοντ σιζε: Φρεετϋπε ερρορ %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "σετ πρεφιξ διρεϲτορϋ" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"εμϭεδ ΦΙΛΕ ασ α μεμδισκ ιμαγε\n" +"Ιμπλιεσ `-π (μεμδισκ)/ϭοοτ/γρυϭ' ανδ οβερριδεσ ανϋ πρεφιξ συππλιεδ " +"πρεβιουσλϋ, ϭυτ τχε πρεφιξ ιτσελφ ϲαν ϭε οβερριδδεν ϭϋ λατερ οπτιονσ" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "εμϭεδ ΦΙΛΕ ασ αν εαρλϋ ϲονφιγ" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "αδδ ΝΟΤΕ σεγμεντ φορ ϲΧΡΠ ΙΕΕΕ1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "ουτπυτ α γενερατεδ ιμαγε το ΦΙΛΕ [δεφαυλτ=στδουτ]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ΦΟΡΜΑΤ" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "γενερατε αν ιμαγε ιν ΦΟΡΜΑΤ" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "αβαιλαϭλε φορματσ:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "υνκνοων ταργετ φορματ %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[ΟΠΤΙΟΝ]... [ΜΟΔΥΛΕΣ]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Μακε α ϭοοταϭλε ιμαγε οφ ΓΡΥϬ." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Ταργετ φορματ νοτ σπεϲιφιεδ (υσε τχε -Ο οπτιον)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Πρεφιξ νοτ σπεϲιφιεδ (υσε τχε -π οπτιον)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"`%s' ισ μισϲομπιλεδ: ιτσ σταρτ αδδρεσσ ισ 0ξ%llx ινστεαδ οφ 0ξ%llx: λδ.γολδ " +"ϭυγ?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "σετ ινπυτ φιλεναμε. Δεφαυλτ ισ ΣΤΔΙΝ" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Υνκνοων κεϋϭοαρδ σϲαν ιδεντιφιερ %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Υνκνοων κεϋϭοαρδ σϲαν ϲοδε 0ξ%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "ΕΡΡΟΡ: νο βαλιδ κεϋϭοαρδ λαϋουτ φουνδ. ϲχεϲκ τχε ινπυτ.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Γενερατε ΓΡΥϬ κεϋϭοαρδ λαϋουτ φρομ Λινυξ ϲονσολε ονε." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "ροοτ διρεϲτορϋ οφ ΤΦΤΠ σερβερ" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "ρελατιβε συϭδιρεϲτορϋ ον νετωορκ σερβερ" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Πρεπαρεσ ΓΡΥϬ νετωορκ ϭοοτ ιμαγεσ ατ νετ_διρεϲτορϋ/συϭδιρ ασσυμινγ " +"νετ_διρεϲτορϋ ϭεινγ ΤΦΤΠ ροοτ." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "υνσυππορτεδ πλατφορμ %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Νετϭοοτ διρεϲτορϋ φορ %s ϲρεατεδ. ϲονφιγυρε ϋουρ ΔΧϲΠ σερβερ το ποιντ το %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Νυμϭερ οφ ΠϬΚΔΦ2 ιτερατιονσ" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Λενγτχ οφ γενερατεδ χασχ" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Λενγτχ οφ σαλτ" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Γενερατε ΠϬΚΔΦ2 πασσωορδ χασχ." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "φαιλυρε το ρεαδ πασσωορδ" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Ρεεντερ πασσωορδ: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "πασσωορδσ δον'τ ματϲχ" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "ϲουλδν'τ ρετριεβε ρανδομ δατα φορ σαλτ" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "ϲρϋπτογραπχιϲ ερρορ νυμϭερ %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "ΠϬΚΔΦ2 χασχ οφ ϋουρ πασσωορδ ισ %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Νο πατχ ισ σπεϲιφιεδ.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ΠΑΤΧ" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Τρανσφορμ α σϋστεμ φιλεναμε ιντο ΓΡΥϬ ονε." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "σαβε ΡΟΜ ιμαγεσ ιν ΔΙΡ [οπτιοναλ]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "υσε ΦΙΛΕ ασ ξορρισο [οπτιοναλ]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "υσε ΣΤΡΙΝΓ ασ προδυϲτ ναμε" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"εναϭλε σπαρϲ ϭοοτ. Δισαϭλεσ ΧΦΣ+, ΑΠΜ, ΑΡϲΣ ανδ ϭοοτ ασ δισκ ιμαγε φορ ι386-" +"πϲ" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"εναϭλε ΑΡϲΣ (ϭιγ-ενδιαν μιπσ μαϲχινεσ, μοστλϋ ΣΓΙ) ϭοοτ. Δισαϭλεσ ΧΦΣ+, ΑΠΜ, " +"σπαρϲ64 ανδ ϭοοτ ασ δισκ ιμαγε φορ ι386-πϲ" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "Μακε ΓΡΥϬ ϲΔ-ΡΟΜ, δισκ, πενδριβε ανδ φλοππϋ ϭοοταϭλε ιμαγε." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Γενερατεσ α ϭοοταϭλε ϲΔ/ΥΣϬ/φλοππϋ ιμαγε. Αργυμεντσ οτχερ τχαν οπτιονσ το " +"τχισ προγραμ αρε πασσεδ το ξορρισο, ανδ ινδιϲατε σουρϲε φιλεσ, σουρϲε " +"διρεϲτοριεσ, ορ ανϋ οφ τχε μκισοφσ οπτιονσ λιστεδ ϭϋ τχε ουτπυτ οφ `%s'." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Οπτιον -- σωιτϲχεσ το νατιβε ξορρισο ϲομμανδ μοδε." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Μαιλ ξορρισο συππορτ ρεϗυεστσ το <ϭυγ-ξορρισο@γνυ.οργ>." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[ΟΠΤΙΟΝ] ΣΟΥΡϲΕ..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "εναϭλινγ %s συππορτ ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ϋουρ ξορρισο δοεσν'τ συππορτ `--γρυϭ2-ϭοοτ-ινφο'. Σομε φεατυρεσ αρε " +"δισαϭλεδ. Πλεασε υσε ξορρισο 1.2.9 ορ λατερ." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ϋουρ ξορρισο δοεσν'τ συππορτ `--γρυϭ2-ϭοοτ-ινφο'. Ϋουρ ϲορε ιμαγε ισ τοο " +"ϭιγ. Ϭοοτ ασ δισκ ισ δισαϭλεδ. Πλεασε υσε ξορρισο 1.2.9 ορ λατερ." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Γενερατε α στανδαλονε ιμαγε (ϲονταινινγ αλλ μοδυλεσ) ιν τχε σελεϲτεδ φορματ" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "Γραφτ ποιντ σϋνταξ (Ε.γ. /ϭοοτ/γρυϭ/γρυϭ.ϲφγ=./γρυϭ.ϲφγ) ισ αϲϲεπτεδ" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ΙΜΑΓΕ1 [ΙΜΑΓΕ2 ...] ΜΟΥΝΤΠΟΙΝΤ" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "νεεδ αν ιμαγε ανδ μουντποιντ" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "γιβεν αργυμεντ ισ α σϋστεμ δεβιϲε, νοτ α πατχ" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "σεπαρατε ιτεμσ ιν ουτπυτ υσινγ ΑΣϲΙΙ ΝΥΛ ϲχαραϲτερσ" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[δεφαυλτ=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "πριντ ΤΑΡΓΕΤ" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "αβαιλαϭλε ταργετσ:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[ΟΠΤΙΟΝ]... [ΠΑΤΧ|ΔΕΒΙϲΕ]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Προϭε δεβιϲε ινφορματιον φορ α γιβεν πατχ (ορ δεβιϲε, ιφ τχε -δ οπτιον ισ " +"γιβεν)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "ρεαδ τεξτ φρομ ΦΙΛΕ." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "υσε ϲΟΛΟΡ φορ τεξτ" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "υσε ϲΟΛΟΡ φορ ϭαϲκγρουνδ" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "σετ τχε λαϭελ το ρενδερ" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "υσε ΦΙΛΕ ασ φοντ (ΠΦ2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Ρενδερ Αππλε .δισκ_λαϭελ." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Μισσινγ αργυμεντσ\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ΠΑΤΧ]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "ϲχεϲκσ ΓΡΥϬ σϲριπτ ϲονφιγυρατιον φιλε φορ σϋνταξ ερρορσ." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Σϋνταξ ερρορ ατ λινε %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Σϲριπτ `%s' ϲονταινσ νο ϲομμανδσ ανδ ωιλλ δο νοτχινγ\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "υσε ΦΙΛΕ ασ τχε ϭοοτ ιμαγε [δεφαυλτ=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "υσε ΦΙΛΕ ασ τχε ϲορε ιμαγε [δεφαυλτ=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Νο δεβιϲε ισ σπεϲιφιεδ.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Σετ υπ ιμαγεσ το ϭοοτ φρομ ΔΕΒΙϲΕ.\n" +"\n" +"Ϋου σχουλδ νοτ νορμαλλϋ ρυν τχισ προγραμ διρεϲτλϋ. Υσε γρυϭ-ινσταλλ ινστεαδ." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "ΔΕΒΙϲΕ μυστ ϭε αν ΟΣ δεβιϲε (ε.γ. /δεβ/σδα)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Ινβαλιδ δεβιϲε `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "ροοτ διρεϲτορϋ ασ ιτ ωιλλ ϭε σεεν ον ρυντιμε [δεφαυλτ=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"ϲυρρεντ διρεϲτορϋ οφ σϋσλινυξ ασ ιτ ωιλλ ϭε σεεν ον ρυντιμε [δεφαυλτ ισ " +"παρεντ διρεϲτορϋ οφ ινπυτ φιλε]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "ωριτε ουτπυτ το ΦΙΛΕ [δεφαυλτ=στδουτ]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Τρανσφορμ σϋσλινυξ ϲονφιγ ιντο ΓΡΥϬ ονε." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "ϲαννοτ ϲομπρεσσ τχε κερνελ ιμαγε" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "υνκνοων ϲομπρεσσιον %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Δεϲομπρεσσορ ισ τοο ϭιγ" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "ϲορε ιμαγε ισ τοο ϭιγ (0ξ%x > 0ξ%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "κερνελ ιμαγε ισ τοο ϭιγ (0ξ%x > 0ξ%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "δισκϭοοτ.ιμγ σιζε μυστ ϭε %u ϭϋτεσ" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"φωσταρτ.ιμγ δοεσν'τ ματϲχ τχε κνοων γοοδ βερσιον. προϲεεδ ατ ϋουρ οων ρισκ" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "φιρμωαρε ιμαγε ισ τοο ϭιγ" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ινβαλιδ λινε φορματ: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "τχε φιρστ σεϲτορ οφ τχε ϲορε φιλε ισ νοτ σεϲτορ-αλιγνεδ" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "νον-σεϲτορ-αλιγνεδ δατα ισ φουνδ ιν τχε ϲορε φιλε" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "τχε σεϲτορσ οφ τχε ϲορε φιλε αρε τοο φραγμεντεδ" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "τχε σιζε οφ `%s' ισ νοτ %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "τχε σιζε οφ `%s' ισ τοο σμαλλ" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Αττεμπτινγ το ινσταλλ ΓΡΥϬ το α δισκ ωιτχ μυλτιπλε παρτιτιον λαϭελσ ορ ϭοτχ " +"παρτιτιον λαϭελ ανδ φιλεσϋστεμ. Τχισ ισ νοτ συππορτεδ ϋετ." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "υναϭλε το ιδεντιφϋ α φιλεσϋστεμ ιν %s; σαφετϋ ϲχεϲκ ϲαν'τ ϭε περφορμεδ" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s αππεαρσ το ϲονταιν α %s φιλεσϋστεμ ωχιϲχ ισν'τ κνοων το ρεσερβε σπαϲε φορ " +"ΔΟΣ-στϋλε ϭοοτ. Ινσταλλινγ ΓΡΥϬ τχερε ϲουλδ ρεσυλτ ιν ΦΙΛΕΣΫΣΤΕΜ " +"ΔΕΣΤΡΥϲΤΙΟΝ ιφ βαλυαϭλε δατα ισ οβερωριττεν ϭϋ γρυϭ-σετυπ (--σκιπ-φσ-προϭε " +"δισαϭλεσ τχισ ϲχεϲκ, υσε ατ ϋουρ οων ρισκ)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s αππεαρσ το ϲονταιν α %s παρτιτιον μαπ ωχιϲχ ισν'τ κνοων το ρεσερβε σπαϲε " +"φορ ΔΟΣ-στϋλε ϭοοτ. Ινσταλλινγ ΓΡΥϬ τχερε ϲουλδ ρεσυλτ ιν ΦΙΛΕΣΫΣΤΕΜ " +"ΔΕΣΤΡΥϲΤΙΟΝ ιφ βαλυαϭλε δατα ισ οβερωριττεν ϭϋ γρυϭ-σετυπ (--σκιπ-φσ-προϭε " +"δισαϭλεσ τχισ ϲχεϲκ, υσε ατ ϋουρ οων ρισκ)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s αππεαρσ το ϲονταιν α %s παρτιτιον μαπ ανδ ΛΔΜ ωχιϲχ ισν'τ κνοων το ϭε α " +"σαφε ϲομϭινατιον. Ινσταλλινγ ΓΡΥϬ τχερε ϲουλδ ρεσυλτ ιν ΦΙΛΕΣΫΣΤΕΜ " +"ΔΕΣΤΡΥϲΤΙΟΝ ιφ βαλυαϭλε δατα ισ οβερωριττεν ϭϋ γρυϭ-σετυπ (--σκιπ-φσ-προϭε " +"δισαϭλεσ τχισ ϲχεϲκ, υσε ατ ϋουρ οων ρισκ)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Αττεμπτινγ το ινσταλλ ΓΡΥϬ το α παρτιτιονλεσσ δισκ ορ το α παρτιτιον. Τχισ " +"ισ α ϬΑΔ ιδεα." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Αττεμπτινγ το ινσταλλ ΓΡΥϬ το α δισκ ωιτχ μυλτιπλε παρτιτιον λαϭελσ. Τχισ " +"ισ νοτ συππορτεδ ϋετ." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Παρτιτιον στϋλε `%s' δοεσν'τ συππορτ εμϭεδδινγ" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Φιλε σϋστεμ `%s' δοεσν'τ συππορτ εμϭεδδινγ" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Ϋουρ εμϭεδδινγ αρεα ισ υνυσυαλλϋ σμαλλ. ϲορε.ιμγ ωον'τ φιτ ιν ιτ." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "νο τερμινατορ ιν τχε ϲορε ιμαγε" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "ϲορε.ιμγ βερσιον μισματϲχ" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"εμϭεδδινγ ισ νοτ ποσσιϭλε, ϭυτ τχισ ισ ρεϗυιρεδ φορ ΡΑΙΔ ανδ ΛΒΜ ινσταλλ" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "ϲαν'τ δετερμινε φιλεσϋστεμ ον %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "φιλεσϋστεμ `%s' δοεσν'τ συππορτ ϭλοϲκλιστσ" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "εμϭεδδινγ ισ νοτ ποσσιϭλε, ϭυτ τχισ ισ ρεϗυιρεδ φορ ϲροσσ-δισκ ινσταλλ" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Εμϭεδδινγ ισ νοτ ποσσιϭλε. ΓΡΥϬ ϲαν ονλϋ ϭε ινσταλλεδ ιν τχισ σετυπ ϭϋ " +"υσινγ ϭλοϲκλιστσ. Χοωεβερ, ϭλοϲκλιστσ αρε ΥΝΡΕΛΙΑϬΛΕ ανδ τχειρ υσε ισ " +"δισϲουραγεδ." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "ωιλλ νοτ προϲεεδ ωιτχ ϭλοϲκλιστσ" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "ϭλοϲκλιστσ αρε ινβαλιδ" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "ϭλοϲκλιστσ αρε ινϲομπλετε" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Υσαγε: %s -ο ΟΥΤΠΥΤ ϲΚϬΜΑΠ_ΑΡΓΥΜΕΝΤΣ...\\ν" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Μακε ΓΡΥϬ κεϋϭοαρδ λαϋουτ φιλε." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "πριντ τχισ μεσσαγε ανδ εξιτ" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "πριντ τχε βερσιον ινφορματιον ανδ εξιτ" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s γενερατεσ α κεϋϭοαρδ λαϋουτ φορ ΓΡΥϬ υσινγ ϲκϭϲομπ\\ν" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Ρεπορτ ϭυγσ το <ϭυγ-γρυϭ@γνυ.οργ>." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: οπτιον ρεϗυιρεσ αν αργυμεντ -- `%s'\\ν" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Υσαγε: %s [ΟΠΤΙΟΝ]\\ν" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Γενερατε α γρυϭ ϲονφιγ φιλε" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "ουτπυτ γενερατεδ ϲονφιγ το ΦΙΛΕ [δεφαυλτ=στδουτ]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Υνρεϲογνιζεδ οπτιον `%s'\\ν" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Ϋου μυστ ρυν τχισ ασ ροοτ\\ν" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Νοτ φουνδ.\\ν" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Γενερατινγ γρυϭ ϲονφιγυρατιον φιλε ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Σϋνταξ ερρορσ αρε δετεϲτεδ ιν γενερατεδ ΓΡΥϬ ϲονφιγ φιλε.\n" +"Ενσυρε τχατ τχερε αρε νο ερρορσ ιν /ετϲ/δεφαυλτ/γρυϭ\n" +"ανδ /ετϲ/γρυϭ.δ/* φιλεσ ορ πλεασε φιλε α ϭυγ ρεπορτ ωιτχ\n" +"%s φιλε ατταϲχεδ." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "δονε" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Ωαρνινγ:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Υσαγε: %s [ΟΠΤΙΟΝ] ΜΕΝΥ_ΕΝΤΡΫ\\ν" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "Σετ τχε δεφαυλτ ϭοοτ μενυ εντρϋ φορ ΓΡΥϬ, φορ τχε νεξτ ϭοοτ ονλϋ." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"εξπεϲτ ΓΡΥϬ ιμαγεσ υνδερ τχε διρεϲτορϋ ΔΙΡ/%s ινστεαδ οφ τχε %s διρεϲτορϋ" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"ΜΕΝΥ_ΕΝΤΡΫ ισ α νυμϭερ, α μενυ ιτεμ τιτλε ορ α μενυ ιτεμ ιδεντιφιερ. Πλεασε " +"νοτε τχατ μενυ ιτεμσ ιν\n" +"συϭμενυσ ορ συϭ-συϭμενυσ ρεϗυιρε σπεϲιφϋινγ τχε συϭμενυ ϲομπονεντσ ανδ τχεν " +"τχε\n" +"μενυ ιτεμ ϲομπονεντ. Τχε τιτλεσ σχουλδ ϭε σεπαρατεδ υσινγ τχε γρεατερ-τχαν\n" +"ϲχαραϲτερ (>) ωιτχ νο εξτρα σπαϲεσ. Δεπενδινγ ον ϋουρ σχελλ σομε ϲχαραϲτερσ " +"ινϲλυδινγ > μαϋ νεεδ εσϲαπινγ. Μορε ινφορματιον αϭουτ τχισ ισ αβαιλαϭλε\n" +"ιν τχε ΓΡΥϬ Μανυαλ ιν τχε σεϲτιον αϭουτ τχε 'δεφαυλτ' ϲομμανδ. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Μορε τχαν ονε μενυ εντρϋ?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Μενυ εντρϋ νοτ σπεϲιφιεδ." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Σετ τχε δεφαυλτ ϭοοτ μενυ εντρϋ φορ ΓΡΥϬ." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Τχισ ρεϗυιρεσ σεττινγ ΓΡΥϬ_ΔΕΦΑΥΛΤ=σαβεδ ιν %s/δεφαυλτ/γρυϭ.\\ν" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "ΜΕΝΥ_ΕΝΤΡΫ ισ α νυμϭερ, α μενυ ιτεμ τιτλε ορ α μενυ ιτεμ ιδεντιφιερ." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Ρεϗυεστεδ σεριαλ τερμιναλ ϭυτ ΓΡΥϬ_ΣΕΡΙΑΛ_ϲΟΜΜΑΝΔ ισ υνσπεϲιφιεδ. Δεφαυλτ " +"παραμετερσ ωιλλ ϭε υσεδ." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Φουνδ τχεμε: %s\\ν" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Φουνδ ϭαϲκγρουνδ: %s\\ν" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Υνσυππορτεδ ιμαγε φορματ" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Σεττινγ ΓΡΥϬ_ΤΙΜΕΟΥΤ το α νον-ζερο βαλυε ωχεν ΓΡΥϬ_ΧΙΔΔΕΝ_ΤΙΜΕΟΥΤ ισ σετ ισ " +"νο λονγερ συππορτεδ." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Φουνδ ΓΝΥ Μαϲχ: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Φουνδ Χυρδ μοδυλε: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Σομε Χυρδ στυφφ φουνδ, ϭυτ νοτ ενουγχ το ϭοοτ." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, ωιτχ Χυρδ %s (ρεϲοβερϋ μοδε)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, ωιτχ Χυρδ %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Πλεασε δον'τ υσε ολδ τιτλε `%s' φορ ΓΡΥϬ_ΔΕΦΑΥΛΤ, υσε `%s' (φορ βερσιονσ " +"ϭεφορε 2.00) ορ `%s' (φορ 2.00 ορ λατερ)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Λοαδινγ ΓΝΥ Μαϲχ ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Λοαδινγ τχε Χυρδ ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Αδβανϲεδ οπτιονσ φορ %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Λοαδινγ κερνελ οφ Ιλλυμοσ ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, ωιτχ κΦρεεϬΣΔ %s (ρεϲοβερϋ μοδε)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, ωιτχ κΦρεεϬΣΔ %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Λοαδινγ κερνελ οφ ΦρεεϬΣΔ %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Φουνδ κερνελ οφ ΦρεεϬΣΔ: %s\\ν" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Φουνδ κερνελ μοδυλε διρεϲτορϋ: %s\\ν" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, ωιτχ Λινυξ %s (ρεϲοβερϋ μοδε)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, ωιτχ Λινυξ %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Λοαδινγ Λινυξ %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Λοαδινγ ινιτιαλ ραμδισκ ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Φουνδ λινυξ ιμαγε: %s\\ν" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Φουνδ ινιτρδ ιμαγε: %s\\ν" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, ωιτχ κερνελ %s (βια %s, ρεϲοβερϋ μοδε)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, ωιτχ κερνελ %s (βια %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Φουνδ ΝετϬΣΔ κερνελ: %s\\ν" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Ωινδοωσ Βιστα/7 (λοαδερ)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Ωινδοωσ ΝΤ/2000/ΞΠ (λοαδερ)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Φουνδ %s ον %s (%s)\\ν" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-ϭιτ)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-ϭιτ)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(ον %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, ωιτχ Ξεν %s ανδ Λινυξ %s (ρεϲοβερϋ μοδε)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, ωιτχ Ξεν %s ανδ Λινυξ %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, ωιτχ Ξεν χϋπερβισορ" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Λοαδινγ Ξεν %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Ξεν χϋπερβισορ, βερσιον %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Αδβανϲεδ οπτιονσ φορ %s (ωιτχ Ξεν χϋπερβισορ)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Φουνδ %s ον %s\\ν" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s ισ νοτ ϋετ συππορτεδ ϭϋ γρυϭ-μκϲονφιγ.\\ν" diff --git a/po/en@hebrew.gmo b/po/en@hebrew.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9f190c23a47e262abea3306faf08e29a168f9126 GIT binary patch literal 176519 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 literal 0 HcmV?d00001 diff --git a/po/en@hebrew.po b/po/en@hebrew.po new file mode 100644 index 000000000..3cf01dae7 --- /dev/null +++ b/po/en@hebrew.po @@ -0,0 +1,6794 @@ +# English translations for grub package. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Automatically generated, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02~beta3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2016-02-28 14:23+0100\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en@hebrew\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "וּנשוּפּפּוֹרתעד שערִיאל פּוֹרת שפּעעד" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "וּנשוּפּפּוֹרתעד שערִיאל פּוֹרת פּארִיתיִ" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "וּנשוּפּפּוֹרתעד שערִיאל פּוֹרת שתוֹפּ בִּיתש נוּמבּער" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "וּנשוּפּפּוֹרתעד שערִיאל פּוֹרת ווֹרד לענגתה" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "דוֹנ'ת לוֹאד הוֹשת תאבּלעש שפּעצִיפִֿיעד בּיִ צוֹממא-שעפּאראתעד לִישת." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "לוֹאד וֹנליִ תאבּלעש שפּעצִיפִֿיעד בּיִ צוֹממא-שעפּאראתעד לִישת." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "עכּספּוֹרת בֿערשִיוֹנ 1 תאבּלעש תוֹ תהע וֹש." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "עכּספּוֹרת בֿערשִיוֹנ 2 אנד בֿערשִיוֹנ 3 תאבּלעש תוֹ תהע וֹש." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "שעת וֹעמִיד וֹפֿ רשדפּ, כּסשדת אנד רשדת." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "שעת וֹעמתאבּלע ִיד וֹפֿ רשדפּ, כּסשדת אנד רשדת." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "שעת וֹעמתאבּלע רעבִֿישִיוֹנ וֹפֿ רשדפּ, כּסשדת אנד רשדת." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "שעת צרעאתוֹר פִֿיעלד וֹפֿ רשדפּ, כּסשדת אנד רשדת." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "שעת צרעאתוֹר רעבִֿישִיוֹנ וֹפֿ רשדפּ, כּסשדת אנד רשדת." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"דוֹנ'ת וּפּדאתע עבּדא. מאיִ פִֿיכּס פֿאִילוּרעש וֹר האנגש וֹנ שוֹמע בִּיוֹשעש בּוּת מאכּעש ִית Ö´" +"ינעפֿפֿעצתִיבֿע וִיתה וֹש נוֹת רעצעִיבִֿינג רשדפּ פֿרוֹמ גרוּבּ." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "פּרעמאתוּרע ענד וֹפֿ פִֿילע %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--עכּסצלוּדע=תאבּלע1,תאבּלע2|--לוֹאד-וֹנליִ=תאבּלע1,תאבּלע2] פִֿילע1 [פִֿילע2] " +"[...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "לוֹאד הוֹשת אצפִּי תאבּלעש אנד תאבּלעש שפּעצִיפִֿיעד בּיִ ארגוּמענתש." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "עררוֹר: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "וֹוּת וֹפֿ מעמוֹריִ" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "צאננוֹת רעאד `%s': %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "אצפִּי שהוּתדוֹונ פֿאִילעד" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "לִישת דעבִֿיצעש." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "פִֿילענאמע עכּספּעצתעד" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "פִֿילע" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "פּרִינת א בּלוֹצכּ לִישת." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "יִוֹוּ נעעד תוֹ לוֹאד תהע כּערנעל פִֿירשת" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "בּוֹוֹת אנ וֹפּעראתִינג שיִשתעמ." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "נוֹ בּוֹוֹת תִימע שתאתִישתִיצש ִיש אבֿאִילאבּלע\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "שהוֹו בּוֹוֹת תִימע שתאתִישתִיצש." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "דִישכּ צאצהע שתאתִישתִיצש: הִיתש = %lu (%lu.%02lu%%), מִיששעש = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "נוֹ דִישכּ צאצהע שתאתִישתִיצש אבֿאִילאבּלע\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "געת דִישכּ צאצהע ִינפֿוֹ." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "אצצעפּת דוֹש-שתיִלע צר/נל לִינע ענדִינגש." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "שהוֹו תהע צוֹנתענתש וֹפֿ א פִֿילע." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "תווֹ ארגוּמענתש עכּספּעצתעד" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "צוֹמפּארע פִֿילע `%s' וִיתה `%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "פִֿילעש דִיפֿפֿער ִינ שִיזע: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "פִֿילעש דִיפֿפֿער את תהע וֹפֿפֿשעת %llu: 0כּס%x [%s], 0כּס%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "תהע פִֿילעש ארע ִידענתִיצאל.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "פִֿילע1 פִֿילע2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "צוֹמפּארע תווֹ פִֿילעש." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "לוֹאד אנוֹתהער צוֹנפִֿיג פִֿילע." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "לוֹאד אנוֹתהער צוֹנפִֿיג פִֿילע וִיתהוֹוּת צהאנגִינג צוֹנתעכּסת." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"לוֹאד אנוֹתהער צוֹנפִֿיג פִֿילע וִיתהוֹוּת צהאנגִינג צוֹנתעכּסת בּוּת תאכּע וֹנליִ מענוּ " +"ענתרִיעש." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "לוֹאד אנוֹתהער צוֹנפִֿיג פִֿילע בּוּת תאכּע וֹנליִ מענוּ ענתרִיעש." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[יִעאר-]מוֹנתה-דאיִ] [הוֹוּר:מִינוּתע[:שעצוֹנד]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "דִישפּלאיִ/שעת צוּררענת דאתעתִימע." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "דוֹ נוֹת וֹוּתפּוּת תהע תראִילִינג נעולִינע." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "ענאבּלע ִינתערפּרעתאתִיוֹנ וֹפֿ בּאצכּשלאשה עשצאפּעש." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-×¢|-× ] שתרִינג" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "דִישפּלאיִ א לִינע וֹפֿ תעכּסת." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "רעבּוֹוֹת ִינתוֹ פִֿירמוארע שעתוּפּ מענוּ." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "פִֿיכּס בִֿידעוֹ פּרוֹבּלעמ." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "רוֹמ ִימאגע ִיש פּרעשענת." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "צאנ'ת ענאבּלע רוֹמ ארעא." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"צרעאתע בִּיוֹש-לִיכּע שתרוּצתוּרעש פֿוֹר בּאצכּוארד צוֹמפּאתִיבִּילִיתיִ וִיתה עכּסִישתִינג וֹש." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "בִּיוֹש_דוּמפּ [ִינת10_דוּמפּ]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "לוֹאד בִּיוֹש דוּמפּ." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "שתרִינג ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "עבֿאלוּאתע ארגוּמענתש אש גרוּבּ צוֹממאנדש" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "צהעצכּ ִיפֿ פִֿילע צאנ בּע בּוֹוֹתעד אש ִי386 פּאע כּסענ וּנפּרִיבִֿילעגעד גוּעשת כּערנעל" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "צהעצכּ ִיפֿ פִֿילע צאנ בּע בּוֹוֹתעד אש כּס86_64 כּסענ וּנפּרִיבִֿילעגעד גוּעשת כּערנעל" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "צהעצכּ ִיפֿ פִֿילע צאנ בּע וּשעד אש כּסענ כּס86 פּרִיבִֿילעגעד גוּעשת כּערנעל" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "צהעצכּ ִיפֿ פִֿילע צאנ בּע וּשעד אש כּס86 מוּלתִיבּוֹוֹת כּערנעל" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "צהעצכּ ִיפֿ פִֿילע צאנ בּע וּשעד אש כּס86 מוּלתִיבּוֹוֹת2 כּערנעל" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ארמ לִינוּכּס" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ארמ64 לִינוּכּס" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ִיא64 לִינוּכּס" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש מִיפּש לִינוּכּס" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש מִיפּשעל לִינוּכּס" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש שפּארצ64 לִינוּכּס" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש פּוֹוערפּצ לִינוּכּס" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86 לִינוּכּס" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86 לִינוּכּס שוּפּפּוֹרתִינג 32-בִּית פּרוֹתוֹצוֹל" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86 כּפֿרעעבּשד" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ִי386 כּפֿרעעבּשד" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86_64 כּפֿרעעבּשד" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86 כּנעתבּשד" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ִי386 כּנעתבּשד" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86_64 כּנעתבּשד" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ִי386 עפִֿי פִֿילע" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86_64 עפִֿי פִֿילע" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ִיא64 עפִֿי פִֿילע" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ארמ64 עפִֿי פִֿילע" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ארמ עפִֿי פִֿילע" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש הִיבּערפִֿיל.שיִש ִינ הִיבּערנאתעד שתאתע" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּס86_64 כּסנוּ (מאצ וֹש כּס כּערנעל)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש ִי386 כּסנוּ (מאצ וֹש כּס כּערנעל)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש כּסנוּ (מאצ וֹש כּס כּערנעל) הִיבּערנאתעד ִימאגע" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש בִּיוֹש בּוֹוֹתשעצתוֹר" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "פֿאלשע" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "וֹפּתִיוֹנש פִֿילע" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "צהעצכּ ִיפֿ פִֿילע ִיש וֹפֿ שפּעצִיפִֿיעד תיִפּע." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "נוֹ שוּצה פּארתִיתִיוֹנ" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "נעו מבּר ִיש ורִיתתענ תוֹ `%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "דעבִֿיצע [פּארתִיתִיוֹנ[+/-[תיִפּע]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"פִֿילל היִבּרִיד מבּר וֹפֿ גפּת דרִיבֿע דעבִֿיצע. שפּעצִיפִֿיעד פּארתִיתִיוֹנש וִילל בּע א פּארת וֹפֿ " +"היִבּרִיד מבּר. וּפּ תוֹ 3 פּארתִיתִיוֹנש ארע אללוֹועד. תיִפּע ִיש אנ מבּר תיִפּע. + מעאנש " +"תהאת פּארתִיתִיוֹנ ִיש אצתִיבֿע. וֹנליִ וֹנע פּארתִיתִיוֹנ צאנ בּע אצתִיבֿע." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"האלתש תהע צוֹמפּוּתער. תהִיש צוֹממאנד דוֹעש נוֹת ווֹרכּ וֹנ אלל פִֿירמוארע Ö´" +"ימפּלעמענתאתִיוֹנש." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "שפּעצִיפֿיִ האשה תוֹ וּשע." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "האשה" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "צהעצכּ האשהעש וֹפֿ פִֿילעש וִיתה האשה לִישת פִֿילע." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "בּאשע דִירעצתוֹריִ פֿוֹר האשה לִישת." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "דִיר" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "דוֹנ'ת שתוֹפּ אפֿתער פִֿירשת עררוֹר." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "וּנצוֹמפּרעשש פִֿילע בּעפֿוֹרע צהעצכּשוּממִינג." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: רעאד עררוֹר\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: האשה מִישמאתצה\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: וֹכּ\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-ה האשה [-צ פִֿילע [-פּ פּרעפִֿיכּס]] [פִֿילע1 [פִֿילע2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "צוֹמפּוּתע וֹר צהעצכּ האשה צהעצכּשוּמ." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-צ פִֿילע [-פּ פּרעפִֿיכּס]] [פִֿילע1 [פִֿילע2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"שעת אדבֿאנצעד פּוֹוער מאנאגעמענת\n" +"(1=לוֹו, ..., 254=הִיגה, 255=וֹפֿפֿ)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "דִישפּלאיִ פּוֹוער מוֹדע." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "פֿרעעזע אתא שעצוּרִיתיִ שעתתִינגש וּנתִיל רעשעת." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "דִישפּלאיִ שמארת העאלתה שתאתוּש." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"שעת אוּתוֹמאתִיצ אצוֹוּשתִיצ מאנאגעמענת\n" +"(0=וֹפֿפֿ, 128=קוִּיעת, ..., 254=פֿאשת)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"שעת שתאנדבּיִ תִימעוֹוּת\n" +"(0=וֹפֿפֿ, 1=5ש, 2=10ש, ..., 240=20מ, 241=30מ, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "שעת דרִיבֿע תוֹ שתאנדבּיִ מוֹדע." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "שעת דרִיבֿע תוֹ שלעעפּ מוֹדע." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "פּרִינת דרִיבֿע ִידענתִיתיִ אנד שעתתִינגש." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "שהוֹו ראו צוֹנתענתש וֹפֿ אתא ִידענתִיפֿיִ שעצתוֹר." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "דִישאבּלע/ענאבּלע שמארת (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "דוֹ נוֹת פּרִינת מעששאגעש." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "וֹנע ארגוּמענת עכּספּעצתעד" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[וֹפּתִיוֹנש] דִישכּ" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "געת/שעת אתא דִישכּ פּאראמעתערש." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "וּשאגע:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[פּאתתערנ ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "שהוֹו א העלפּ מעששאגע." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "שכִּיפּ וֹפֿפֿשעת בּיִתעש פֿרוֹמ תהע בּעגִיננִינג וֹפֿ פִֿילע." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "רעאד וֹנליִ לענגתה בּיִתעש." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[וֹפּתִיוֹנש] פִֿילע_וֹר_דעבִֿיצע" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "שהוֹו ראו צוֹנתענתש וֹפֿ א פִֿילע וֹר מעמוֹריִ." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "שהוֹו ראו דוּמפּ וֹפֿ תהע צמוֹש צוֹנתענתש." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "בּיִתע:בִּית" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "תעשת בִּית את בּיִתע:בִּית ִינ צמוֹש." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "צלעאר בִּית את בּיִתע:בִּית ִינ צמוֹש." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "שעת בִּית את בּיִתע:בִּית ִינ צמוֹש." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "שהוֹו צוֹרעבּוֹוֹת בּוֹוֹת תִימע שתאתִישתִיצש." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "לִישת צוֹרעבּוֹוֹת תאבּלעש." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "צהעצכּ ִיפֿ צפּוּ שוּפּפּוֹרתש 64-בִּית (לוֹנג) מוֹדע (דעפֿאוּלת)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "צהעצכּ ִיפֿ צפּוּ שוּפּפּוֹרתש פּהיִשִיצאל אדדרעשש עכּסתענשִיוֹנ." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "צהעצכּ פֿוֹר צפּוּ פֿעאתוּרעש." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "שהוֹו תהע צוּררענת מאפּפִּינגש." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "רעשעת אלל מאפּפִּינגש תוֹ תהע דעפֿאוּלת בֿאלוּעש." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "פּערפֿוֹרמ בּוֹתה דִירעצת אנד רעבֿערשע מאפּפִּינגש." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "נוֹ דרִיבֿעש האבֿע בּעענ רעמאפּפּעד" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "וֹש דִישכּ #נוּמ ------> גרוּבּ/בִּיוֹש דעבִֿיצע" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-ל | -ר | [-ש] גרוּבּדעבֿ וֹשדִישכּ." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "מאנאגע תהע בִּיוֹש דרִיבֿע מאפּפִּינגש." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "דוֹ נוֹת וּשע אפּמ תוֹ האלת תהע צוֹמפּוּתער." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "האלת תהע שיִשתעמ, ִיפֿ פּוֹששִיבּלע וּשִינג אפּמ." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "נוֹ אפּמ פֿוֹוּנד" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"בֿערשִיוֹנ %u.%u\n" +"32-בִּית צש = 0כּס%x, לענ = 0כּס%x, וֹפֿפֿשעת = 0כּס%x\n" +"16-בִּית צש = 0כּס%x, לענ = 0כּס%x\n" +"דש = 0כּס%x, לענ = 0כּס%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-בִּית פּרוֹתעצתעד ִינתערפֿאצע שוּפּפּוֹרתעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-בִּית פּרוֹתעצתעד ִינתערפֿאצע וּנשוּפּפּוֹרתעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-בִּית פּרוֹתעצתעד ִינתערפֿאצע שוּפּפּוֹרתעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-בִּית פּרוֹתעצתעד ִינתערפֿאצע וּנשוּפּפּוֹרתעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "צפּוּ ִידלע שלוֹוש דוֹונ פּרוֹצעששוֹר\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "צפּוּ ִידלע דוֹעשנ'ת שלוֹו דוֹונ פּרוֹצעששוֹר\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "אפּמ דִישאבּלעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "אפּמ ענאבּלעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "אפּמ דִישענגאגעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "אפּמ ענגאגעד\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "שהוֹו אפּמ ִינפֿוֹרמאתִיוֹנ." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "פִֿילענאמע וֹר תעמפּוֹ אנד נוֹתעש עכּספּעצתעד" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "ִינבֿאלִיד תעמפּוֹ ִינ %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "פִֿילע `%s' נוֹת פֿוֹוּנד" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "וּנרעצוֹגנִיזעד נוּמבּער" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "פִֿילע | תעמפּוֹ [פִּיתצה1 דוּראתִיוֹנ1] [פִּיתצה2 דוּראתִיוֹנ2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "פּלאיִ א תוּנע." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "שעת נוּמלוֹצכּ מוֹדע" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "שעת צאפּשלוֹצכּ מוֹדע" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "שעת שצרוֹלללוֹצכּ מוֹדע" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "שעת ִינשערת מוֹדע" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "שעת פּאוּשע מוֹדע" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "פּרעשש לעפֿת שהִיפֿת" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "פּרעשש רִיגהת שהִיפֿת" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "פּרעשש שיִשרק" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "פּרעשש נוּמלוֹצכּ כּעיִ" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "פּרעשש צאפּשלוֹצכּ כּעיִ" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "פּרעשש שצרוֹלללוֹצכּ כּעיִ" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "פּרעשש ִינשערת כּעיִ" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "פּרעשש לעפֿת אלת" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "פּרעשש רִיגהת אלת" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "פּרעשש לעפֿת צתרל" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "פּרעשש רִיגהת צתרל" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "דוֹנ'ת וּפּדאתע לעד שתאתע" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[כּעיִשתרוֹכּע1] [כּעיִשתרוֹכּע2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "עמוּלאתע א כּעיִשתרוֹכּע שעקוּענצע" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "רוּנ `גוֹ' תוֹ רעשוּמע גרוּבּ." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "רעתוּרנ תוֹ ִיעעע1275 פּרוֹמפּת." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "שאבֿע רעאד בֿאלוּע ִינתוֹ בֿארִיאבּלע בֿארנאמע." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "בֿארנאמע" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "פּוֹרת" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "רעאד 8-בִּית בֿאלוּע פֿרוֹמ פּוֹרת." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "רעאד 16-בִּית בֿאלוּע פֿרוֹמ פּוֹרת." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "רעאד 32-בִּית בֿאלוּע פֿרוֹמ פּוֹרת." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "פּוֹרת בֿאלוּע [מאשכּ]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "ורִיתע 8-בִּית בֿאלוּע תוֹ פּוֹרת." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "ורִיתע 16-בִּית בֿאלוּע תוֹ פּוֹרת." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "אדדר בֿאלוּע [מאשכּ]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "ורִיתע 32-בִּית בֿאלוּע תוֹ פּוֹרת." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "בֿארִיאבּלע `%s' ִישנ'ת שעת" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "לוֹאד א כּעיִבּוֹארד לאיִוֹוּת." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "צהעצכּ שהִיפֿת כּעיִ." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "צהעצכּ צוֹנתרוֹל כּעיִ." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "צהעצכּ אלת כּעיִ." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "צהעצכּ כּעיִ מוֹדִיפִֿיער שתאתוּש." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "צאנ'ת פִֿינד צוֹממאנד `%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "ענתער פּאששווֹרד: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "פּארשע לעגאציִ צוֹנפִֿיג ִינ שאמע צוֹנתעכּסת" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "פּארשע לעגאציִ צוֹנפִֿיג ִינ נעו צוֹנתעכּסת" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "פּארשע לעגאציִ צוֹנפִֿיג ִינ שאמע צוֹנתעכּסת תאכִּינג וֹנליִ מענוּ ענתרִיעש" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "פּארשע לעגאציִ צוֹנפִֿיג ִינ נעו צוֹנתעכּסת תאכִּינג וֹנליִ מענוּ ענתרִיעש" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--נוֹ-מעמ-וֹפּתִיוֹנ] [--תיִפּע=תיִפּע] פִֿילע [ארג ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "שִימוּלאתע גרוּבּ-לעגאציִ `כּערנעל' צוֹממאנד" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "פִֿילע [ארג ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "שִימוּלאתע גרוּבּ-לעגאציִ `ִינִיתרד' צוֹממאנד" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "שִימוּלאתע גרוּבּ-לעגאציִ `מוֹדוּלענוֹוּנזִיפּ' צוֹממאנד" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--מד5] פּאששוד [פִֿילע]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "שִימוּלאתע גרוּבּ-לעגאציִ `פּאששווֹרד' צוֹממאנד" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "שִימוּלאתע גרוּבּ-לעגאציִ `פּאששווֹרד' צוֹממאנד ִינ מענוּ ענתריִ מוֹדע" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "שפּעצִיפֿיִ פִֿילענאמע." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "שכִּיפּ שִיגנאתוּרע-צהעצכִּינג וֹפֿ תהע ענבִֿירוֹנמענת פִֿילע." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-פֿ פִֿילע] [-ש|--שכִּיפּ-שִיג] [בֿארִיאבּלע_נאמע_תוֹ_והִיתעלִישת] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "לוֹאד בֿארִיאבּלעש פֿרוֹמ ענבִֿירוֹנמענת בּלוֹצכּ פִֿילע." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-פֿ פִֿילע]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "לִישת בֿארִיאבּלעש פֿרוֹמ ענבִֿירוֹנמענת בּלוֹצכּ פִֿילע." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-פֿ פִֿילע] בֿארִיאבּלע_נאמע [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "שאבֿע בֿארִיאבּלעש תוֹ ענבִֿירוֹנמענת בּלוֹצכּ פִֿילע." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "שהוֹו א לוֹנג לִישת וִיתה מוֹרע דעתאִילעד ִינפֿוֹרמאתִיוֹנ." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "פּרִינת שִיזעש ִינ א הוּמאנ רעאדאבּלע פֿוֹרמאת." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "לִישת אלל פִֿילעש." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "נעתווֹרכּ פּרוֹתוֹצוֹלש:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-ל|-ה|-א] [פִֿילע ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "לִישת דעבִֿיצעש אנד פִֿילעש." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "שהוֹו בֿערשִיוֹנ 1 תאבּלעש וֹנליִ." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "שהוֹו בֿערשִיוֹנ 2 אנד בֿערשִיוֹנ 3 תאבּלעש וֹנליִ." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "שהוֹו אצפִּי ִינפֿוֹרמאתִיוֹנ." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "אבֿאִילאבּלע ראמ" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "רעשערבֿעד ראמ" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "אצפִּי רעצלאִימאבּלע ראמ" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "אצפִּי נוֹנ-בֿוֹלאתִילע שתוֹראגע ראמ" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "פֿאוּלתיִ ראמ (בּאדראמ)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "פּערשִישתענת ראמ" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "פּערשִישתענת ראמ (לעגאציִ)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "ראמ הוֹלדִינג צוֹרעבּוֹוֹת תאבּלעש" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "ראמ הוֹלדִינג פִֿירמוארע צוֹדע" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "בּאשע_אדדר = 0כּס%llx, לענגתה = 0כּס%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "בּאשע_אדדר = 0כּס%llx, לענגתה = 0כּס%llx, תיִפּע = 0כּס%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "לִישת מעמוֹריִ מאפּ פּרוֹבִֿידעד בּיִ פִֿירמוארע." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "לִישת פּצִי דעבִֿיצעש." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "בּלעשש פִֿילע וֹפֿ הפֿש וֹר הפֿש+ פּארתִיתִיוֹנ פֿוֹר ִינתעל מאצש." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "בּלעשש דִיר וֹפֿ הפֿש וֹר הפֿש+ פּארתִיתִיוֹנ פֿוֹר פּפּצ מאצש." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "אדדר" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "רעאד 8-בִּית בֿאלוּע פֿרוֹמ אדדר." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "רעאד 16-בִּית בֿאלוּע פֿרוֹמ אדדר." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "רעאד 32-בִּית בֿאלוּע פֿרוֹמ אדדר." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "ורִיתע 8-בִּית בֿאלוּע תוֹ אדדר." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "ורִיתע 16-בִּית בֿאלוּע תוֹ אדדר." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "ורִיתע 32-בִּית בֿאלוּע תוֹ אדדר." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "מענוּ ענתריִ תיִפּע." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "שתרִינג" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "לִישת וֹפֿ וּשערש אללוֹועד תוֹ בּוֹוֹת תהִיש ענתריִ." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "וּשערנאמע[,וּשערנאמע]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "כּעיִבּוֹארד כּעיִ תוֹ קוִּיצכּליִ בּוֹוֹת תהִיש ענתריִ." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "כּעיִבּוֹארד_כּעיִ" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "וּשע שתרִינג אש מענוּ ענתריִ בּוֹדיִ." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "מענוּ ענתריִ ִידענתִיפִֿיער." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "תהִיש ענתריִ צאנ בּע בּוֹוֹתעד בּיִ אניִ וּשער." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "בּלוֹצכּ" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "דעפִֿינע א מענוּ ענתריִ." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "דעפִֿינע א שוּבּמענוּ." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "נאמע\tרעפֿ צוֹוּנת\tדעפּענדענצִיעש\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "שהוֹו תהִיש מעששאגע." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "אדדר [שִיזע]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "שהוֹו מעמוֹריִ צוֹנתענתש." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "מוֹדוּלע" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "רעמוֹבֿע א מוֹדוּלע." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "שהוֹו לוֹאדעד מוֹדוּלעש." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "עכּסִית פֿרוֹמ גרוּבּ." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "נוֹ צש5536 פֿוֹוּנד" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "צש5536 את %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "שיִשתעמ מאנאגעמענת בּוּש צוֹנתרוֹללער ִי/וֹ שפּאצע ִיש את 0כּס%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "ראמ שלוֹת נוּמבּער %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "ורִיתתענ שפּד בּיִתעש: %d בּ.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "תוֹתאל פֿלאשה שִיזע: %d בּ.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "מעמוֹריִ תיִפּע: דדר2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "פּארת נוֹ: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "מעמוֹריִ תיִפּע: וּנכּנוֹונ." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "פּרִינת מעמוֹריִ ִינפֿוֹרמאתִיוֹנ." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s דוֹעש נוֹת שוּפּפּוֹרת וּוִּידש" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[מוֹדוּלע1 מוֹדוּלע2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"שוִיתצה תוֹ נאתִיבֿע דִישכּ דרִיבֿערש. ִיפֿ נוֹ מוֹדוּלעש ארע שפּעצִיפִֿיעד דעפֿאוּלת שעת (פּאתא," +"אהצִי,וּשבּמש,וֹהצִי,וּהצִי,עהצִי) ִיש וּשעד" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"פּערפֿוֹרמ צוֹממאנדש וֹנ פּארתִיתִיוֹנ.\n" +"וּשע `פּארתתוֹוֹל פּארתִיתִיוֹנ העלפּ' פֿוֹר תהע לִישת וֹפֿ אבֿאִילאבּלע צוֹממאנדש." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=בֿאל" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "שוֹרריִ, נוֹ פּארתתוֹוֹל ִיש אבֿאִילאבּלע פֿוֹר %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "וּנכּנוֹונ ארגוּמענת `%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "פּארתִיתִיוֹנ צוֹממאנדש" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "וּשער פּאששווֹרד" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "שעת וּשער פּאששווֹרד (פּלאִינתעכּסת). וּנרעצוֹממענדעד אנד ִינשעצוּרע." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ִינבֿאלִיד פּבּכּדפֿ2 פּאששווֹרד" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "וּשער פּבּכּדפֿ2_פּאששווֹרד" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "שעת וּשער פּאששווֹרד (פּבּכּדפֿ2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "שעלעצת דעבִֿיצע בּיִ בֿענדוֹר אנד דעבִֿיצע ִידש." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[בֿענדוֹר]:[דעבִֿיצע]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "שעלעצת דעבִֿיצע בּיִ ִיתש פּוֹשִיתִיוֹנ וֹנ תהע בּוּש." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[בּוּש]:[שלוֹת][.פֿוּנצ]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "מִיששִינג `%c' שיִמבּוֹל" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-ש פּוֹשִיתִיוֹנ] [-ד דעבִֿיצע]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "שהוֹו ראו דוּמפּ וֹפֿ תהע פּצִי צוֹנפִֿיגוּראתִיוֹנ שפּאצע." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "שעת א בֿארִיאבּלע תוֹ רעתוּרנ בֿאלוּע." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "דעתערמִינע דרִיבֿער." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "דעתערמִינע פּארתִיתִיוֹנ מאפּ תיִפּע." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "דעתערמִינע פִֿילעשיִשתעמ תיִפּע." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "דעתערמִינע פִֿילעשיִשתעמ וּוִּיד." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "דעתערמִינע פִֿילעשיִשתעמ לאבּעל." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "פִֿילעשיִשתעמ `%s' דוֹעש נוֹת שוּפּפּוֹרת לאבּעלש" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "דעבִֿיצע" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "רעתרִיעבֿע דעבִֿיצע ִינפֿוֹ." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ענבֿבֿאר]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "שעת בֿארִיאבּלע וִיתה וּשער ִינפּוּת." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "רעבּוֹוֹת תהע צוֹמפּוּתער." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "שתוֹרע מאתצהעד צוֹמפּוֹנענת נוּמבּער ִינ בֿארנאמע." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[נוּמבּער:]בֿארנאמע" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "רעגעכּספּ שתרִינג" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "תעשת ִיפֿ רעגעכּספּ מאתצהעש שתרִינג." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "נאמע [בֿארִיאבּלע] [הִינתש]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"שעארצה דעבִֿיצעש בּיִ פִֿילע. ִיפֿ בֿארִיאבּלע ִיש שפּעצִיפִֿיעד, תהע פִֿירשת דעבִֿיצע פֿוֹוּנד ִיש " +"שעת תוֹ א בֿארִיאבּלע." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"שעארצה דעבִֿיצעש בּיִ לאבּעל. ִיפֿ בֿארִיאבּלע ִיש שפּעצִיפִֿיעד, תהע פִֿירשת דעבִֿיצע פֿוֹוּנד ִיש " +"שעת תוֹ א בֿארִיאבּלע." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"שעארצה דעבִֿיצעש בּיִ וּוִּיד. ִיפֿ בֿארִיאבּלע ִיש שפּעצִיפִֿיעד, תהע פִֿירשת דעבִֿיצע פֿוֹוּנד ִיש " +"שעת תוֹ א בֿארִיאבּלע." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "שעארצה דעבִֿיצעש בּיִ א פִֿילע." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "שעארצה דעבִֿיצעש בּיִ א פִֿילעשיִשתעמ לאבּעל." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "שעארצה דעבִֿיצעש בּיִ א פִֿילעשיִשתעמ וּוִּיד." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "שעת א בֿארִיאבּלע תוֹ תהע פִֿירשת דעבִֿיצע פֿוֹוּנד." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "דוֹ נוֹת פּרוֹבּע אניִ פֿלוֹפּפּיִ דרִיבֿע." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"פִֿירשת תריִ תהע דעבִֿיצע הִינת. ִיפֿ הִינת ענדש ִינ צוֹממא, אלשוֹ תריִ שוּבּפּארתִיתִיוֹנש" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "הִינת" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"פִֿירשת תריִ תהע דעבִֿיצע הִינת ִיפֿ צוּררענתליִ רוּננִינג וֹנ ִיעעע1275. ִיפֿ הִינת ענדש ִינ " +"צוֹממא, אלשוֹ תריִ שוּבּפּארתִיתִיוֹנש" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"פִֿירשת תריִ תהע דעבִֿיצע הִינת ִיפֿ צוּררענתליִ רוּננִינג וֹנ בִּיוֹש. ִיפֿ הִינת ענדש ִינ " +"צוֹממא, אלשוֹ תריִ שוּבּפּארתִיתִיוֹנש" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"פִֿירשת תריִ תהע דעבִֿיצע הִינת ִיפֿ דִירעצת הארדוארע אצצעשש ִיש שוּפּפּוֹרתעד. ִיפֿ הִינת " +"ענדש ִינ צוֹממא, אלשוֹ תריִ שוּבּפּארתִיתִיוֹנש" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"פִֿירשת תריִ תהע דעבִֿיצע הִינת ִיפֿ צוּררענתליִ רוּננִינג וֹנ עפִֿי. ִיפֿ הִינת ענדש ִינ " +"צוֹממא, אלשוֹ תריִ שוּבּפּארתִיתִיוֹנש" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"פִֿירשת תריִ תהע דעבִֿיצע הִינת ִיפֿ צוּררענתליִ רוּננִינג וֹנ ארצ. ִיפֿ הִינת ענדש ִינ " +"צוֹממא, אלשוֹ תריִ שוּבּפּארתִיתִיוֹנש" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-פֿ|-ל|-וּ|-ש|-× ] [--הִינת הִינת [--הִינת הִינת] ...] נאמע" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"שעארצה דעבִֿיצעש בּיִ פִֿילע, פִֿילעשיִשתעמ לאבּעל וֹר פִֿילעשיִשתעמ וּוִּיד. ִיפֿ --שעת ִיש " +"שפּעצִיפִֿיעד, תהע פִֿירשת דעבִֿיצע פֿוֹוּנד ִיש שעת תוֹ א בֿארִיאבּלע. ִיפֿ נוֹ בֿארִיאבּלע נאמע Ö´" +"יש שפּעצִיפִֿיעד, `רוֹוֹת' ִיש וּשעד." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "רעגִישתער %x וֹפֿ %x:%02x.%x ִיש %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-ש פּוֹשִיתִיוֹנ] [-ד דעבִֿיצע] [-בֿ בֿאר] רעגִישתער[=בֿאלוּע[:מאשכּ]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "מאנִיפּוּלאתע פּצִי דעבִֿיצעש." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "בֿערבּוֹשע צוֹוּנתדוֹונ." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "אללוֹו תוֹ ִינתעררוּפּת וִיתה עשצ." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "נוּמבּער_וֹפֿ_שעצוֹנדש" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "ואִית פֿוֹר א שפּעצִיפִֿיעד נוּמבּער וֹפֿ שעצוֹנדש." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "רוֹוֹת דִירעצתוֹריִ וֹפֿ תהע שיִשלִינוּכּס דִישכּ [דעפֿאוּלת=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"צוּררענת דִירעצתוֹריִ וֹפֿ שיִשלִינוּכּס [דעפֿאוּלת ִיש פּארענת דִירעצתוֹריִ וֹפֿ ִינפּוּת פִֿילע]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "אששוּמע ִינפּוּת ִיש אנ ִישוֹלִינוּכּס צוֹנפִֿיגוּראתִיוֹנ פִֿילע." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "אששוּמע ִינפּוּת ִיש א פּכּסעלִינוּכּס צוֹנפִֿיגוּראתִיוֹנ פִֿילע." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "אששוּמע ִינפּוּת ִיש א שיִשלִינוּכּס צוֹנפִֿיגוּראתִיוֹנ פִֿילע." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "עכּסעצוּתע שיִשלִינוּכּס צוֹנפִֿיג ִינ שאמע צוֹנתעכּסת" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "עכּסעצוּתע שיִשלִינוּכּס צוֹנפִֿיג ִינ נעו צוֹנתעכּסת" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "עכּסעצוּתע שיִשלִינוּכּס צוֹנפִֿיג ִינ שאמע צוֹנתעכּסת תאכִּינג וֹנליִ מענוּ ענתרִיעש" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "עכּסעצוּתע שיִשלִינוּכּס צוֹנפִֿיג ִינ נעו צוֹנתעכּסת תאכִּינג וֹנליִ מענוּ ענתרִיעש" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "נוֹ תערמִינאל שפּעצִיפִֿיעד" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "תערמִינאל `%s' ִישנ'ת פֿוֹוּנד" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "אצתִיבֿע ִינפּוּת תערמִינאלש:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "אבֿאִילאבּלע ִינפּוּת תערמִינאלש:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "אצתִיבֿע וֹוּתפּוּת תערמִינאלש:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "אבֿאִילאבּלע וֹוּתפּוּת תערמִינאלש:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--אפּפּענד|--רעמוֹבֿע] [תערמִינאל1] [תערמִינאל2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "לִישת וֹר שעלעצת אנ ִינפּוּת תערמִינאל." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "לִישת וֹר שעלעצת אנ וֹוּתפּוּת תערמִינאל." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "עכּספּרעששִיוֹנ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "עבֿאלוּאתע אנ עכּספּרעששִיוֹנ." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "עכּספּרעששִיוֹנ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "לוֹאד תהע שאמע פִֿילע ִינ מוּלתִיפּלע ואיִש." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "שפּעצִיפֿיִ שִיזע פֿוֹר עאצה רעאד וֹפּעראתִיוֹנ" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "ִינבֿאלִיד בּלוֹצכּ שִיזע" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "פִֿילע שִיזע: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "עלאפּשעד תִימע: %d.%03d ש \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "שפּעעד: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-ש שִיזע] פִֿילענאמע" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "תעשת פִֿילע רעאד שפּעעד." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "נוֹ צוֹממאנד ִיש שפּעצִיפִֿיעד" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "עלאפּשעד תִימע: %d.%03d שעצוֹנדש \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "צוֹממאנד [ארגש]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "מעאשוּרע תִימע וּשעד בּיִ צוֹממאנד" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "תראנשלאתע תוֹ וּפּפּער צאשע." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "תראנשלאתע תוֹ לוֹוער צאשע." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[וֹפּתִיוֹנש] [שעת1] [שעת2] [שתרִינג]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "תראנשלאתע שעת1 צהאראצתערש תוֹ שעת2 ִינ שתרִינג." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "דוֹ נוֹתהִינג, שוּצצעששפֿוּלליִ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "דוֹ נוֹתהִינג, וּנשוּצצעששפֿוּלליִ." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "תעשת וּשבּ שוּפּפּוֹרת." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "שכִּיפּ שִיגנאתוּרע-צהעצכִּינג וֹפֿ תהע פּוּבּלִיצ כּעיִ פִֿילע." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "בּאד שִיגנאתוּרע" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "פּוּבּלִיצ כּעיִ %08x נוֹת פֿוֹוּנד" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "מוֹדוּלע `%s' ִישנ'ת לוֹאדעד" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-ש|--שכִּיפּ-שִיג] פִֿילע שִיגנאתוּרע_פִֿילע [פּוּבּכּעיִ_פִֿילע]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "בֿערִיפֿיִ דעתאצהעד שִיגנאתוּרע." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-ש|--שכִּיפּ-שִיג] פּוּבּכּעיִ_פִֿילע" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "אדד פּוּבּכּעיִ_פִֿילע תוֹ תרוּשתעד כּעיִש." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "שהוֹו תהע לִישת וֹפֿ תרוּשתעד כּעיִש." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "פּוּבּכּעיִ_ִיד" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "רעמוֹבֿע פּוּבּכּעיִ_ִיד פֿרוֹמ תרוּשתעד כּעיִש." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "תעכּסת-וֹנליִ " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "דִירעצת צוֹלוֹר, מאשכּ: %d/%d/%d/%d פּוֹש: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "פּאלעתתעד " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "יִוּבֿ " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "פּלאנאר " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "הערצוּלעש " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "צגא " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "נוֹנ-צהאִינ 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "מוֹנוֹצהרוֹמע " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "וּנכּנוֹונ בִֿידעוֹ מוֹדע " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " עדִיד צהעצכּשוּמ ִינבֿאלִיד" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " עדִיד בֿערשִיוֹנ: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " פּרעפֿעררעד מוֹדע: %uכּס%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " נוֹ פּרעפֿעררעד מוֹדע אבֿאִילאבּלע\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "ִינבֿאלִיד בִֿידעוֹ מוֹדע שפּעצִיפִֿיצאתִיוֹנ `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "לִישת וֹפֿ שוּפּפּוֹרתעד בִֿידעוֹ מוֹדעש:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "לעגענד: מאשכּ/פּוֹשִיתִיוֹנ=רעד/גרעענ/בּלוּע/רעשערבֿעד" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "אדאפּתער `%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " נוֹ ִינפֿוֹ אבֿאִילאבּלע" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " פֿאִילעד תוֹ ִינִיתִיאלִיזע בִֿידעוֹ אדאפּתער" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[וכּסה[כּסד]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"לִישת אבֿאִילאבּלע בִֿידעוֹ מוֹדעש. ִיפֿ רעשוֹלוּתִיוֹנ ִיש גִיבֿענ שהוֹו וֹנליִ מוֹדעש מאתצהִינג Ö´" +"ית." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[וכּסה]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "תעשת בִֿידעוֹ שוּבּשיִשתעמ ִינ מוֹדע וכּסה." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "תעשת בִֿידעוֹ שוּבּשיִשתעמ." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[דִיר]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "לִישת כּסענ שתוֹראגע." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-ל] גרוּבּוּוִּיד [בֿארנאמע]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"תראנשפֿוֹרמ 64-בִּית וּוִּיד תוֹ פֿוֹרמאת שוִּיתאבּלע פֿוֹר כּסנוּ. ִיפֿ -ל ִיש גִיבֿענ כּעעפּ ִית " +"לוֹוערצאשע אש דוֹנע בּיִ בּלכִּיד." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "פֿאִילוּרע רעאדִינג שעצתוֹר 0כּס%llx פֿרוֹמ `%s'" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "פֿאִילוּרע ורִיתִינג שעצתוֹר 0כּס%llx תוֹ `%s'" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "מוֹוּנת בּיִ וּוִּיד." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "מוֹוּנת אלל." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "מוֹוּנת אלל בֿוֹלוּמעש וִיתה `בּוֹוֹת' פֿלאג שעת." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "צאננוֹת וֹפּענ `%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "צאננוֹת שעעכּ `%s': %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "שוֹוּרצע|-וּ וּוִּיד|-א|-בּ" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "מוֹוּנת א צריִפּתוֹ דעבִֿיצע." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"צוֹוּלדנ'ת פִֿינד פּהיִשִיצאל בֿוֹלוּמע `%s'. שוֹמע מוֹדוּלעש מאיִ בּע מִיששִינג פֿרוֹמ צוֹרע Ö´" +"ימאגע." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "פּהיִשִיצאל בֿוֹלוּמע %s נוֹת פֿוֹוּנד" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "נוֹ מעדִיא ִינ `%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "צוֹוּלדנ'ת לוֹאד שהא256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "צוֹוּלדנ'ת לוֹאד שהא512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "צוֹוּלדנ'ת רעאד עלִי מעתאדאתא" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "ורוֹנג עלִי מאגִיצ וֹר בֿערשִיוֹנ" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "אתתעמפּתִינג תוֹ דעצריִפּת מאשתער כּעיִ..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "ענתער פּאששפּהראשע פֿוֹר %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "שלוֹת %d וֹפּענעד\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "אתתעמפּת תוֹ רעאד וֹר ורִיתע וֹוּתשִידע וֹפֿ דִישכּ `%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "צאננוֹת ורִיתע תוֹ צד-רוֹמ" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"נאתִיבֿע דִישכּ דרִיבֿערש ארע ִינ וּשע. רעפֿוּשִינג תוֹ וּשע פִֿירמוארע דִישכּ ִינתערפֿאצע." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "יִוֹוּר לדמ עמבּעדדִינג פּארתִיתִיוֹנ ִיש תוֹוֹ שמאלל; עמבּעדדִינג ווֹנ'ת בּע פּוֹששִיבּלע" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "תהִיש לדמ האש נוֹ עמבּעדדִינג פּארתִיתִיוֹנ; עמבּעדדִינג ווֹנ'ת בּע פּוֹששִיבּלע" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "דעלעתע תהע שפּעצִיפִֿיעד לוֹוֹפּבּאצכּ דרִיבֿע." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-ד] דעבִֿיצענאמע פִֿילע." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "מאכּע א בִֿירתוּאל דרִיבֿע פֿרוֹמ א פִֿילע." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "רעלוֹצאתִיוֹנ 0כּס%x ִיש נוֹת ִימפּלעמענתעד יִעת" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "נוֹ שיִמבּוֹל תאבּלע" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "תהִיש עלפֿ פִֿילע ִיש נוֹת וֹפֿ תהע רִיגהת תיִפּע" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "לוֹאד אנד ִינִיתִיאלִיזע עפִֿי עמוּלאתוֹר." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "פִֿינאלִיזע לוֹאדִינג וֹפֿ עפִֿי עמוּלאתוֹר." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "וּנלוֹאד עפִֿי עמוּלאתוֹר." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "שיִמבּוֹל `%s' נוֹת פֿוֹוּנד" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "לוֹאדעד פֿוֹנתש:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "פִֿילע..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "שפּעצִיפֿיִ וֹנע וֹר מוֹרע פֿוֹנת פִֿילעש תוֹ לוֹאד." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "לִישת תהע לוֹאדעד פֿוֹנתש." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "תוֹוֹ דעעפּ נעשתִינג וֹפֿ שיִמלִינכּש" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "אתתעמפּת תוֹ רעאד פּאשת תהע ענד וֹפֿ פִֿילע" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "צוֹוּלדנ'ת פִֿינד א נעצעששאריִ מעמבּער דעבִֿיצע וֹפֿ מוּלתִי-דעבִֿיצע פִֿילעשיִשתעמ" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "נוֹת א דִירעצתוֹריִ" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "נוֹת א רעגוּלאר פִֿילע" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "יִוֹוּר צוֹרע.ִימג ִיש וּנוּשוּאלליִ לארגע. ִית ווֹנ'ת פִֿית ִינ תהע עמבּעדדִינג ארעא" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "ִינבֿאלִיד פִֿילע נאמע `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "צהעצכּשוּמ בֿערִיפִֿיצאתִיוֹנ פֿאִילעד" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "נוֹ דעצריִפּתִיוֹנ כּעיִ אבֿאִילאבּלע" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "מאצ בֿערִיפִֿיצאתִיוֹנ פֿאִילעד" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "אששוּמע ִינפּוּת ִיש ראו." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "אששוּמע ִינפּוּת ִיש העכּס." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "אששוּמע ִינפּוּת ִיש פּאששפּהראשע." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "ענתער זפֿש פּאששווֹרד: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-ה|-פּ|-ר] [פִֿילע]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "ִימפּוֹרת זפֿש וראפּפִּינג כּעיִ שתוֹרעד ִינ פִֿילע." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "בִֿירתוּאל דעבִֿיצע ִיש רעמוֹבֿעד" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "בִֿירתוּאל דעבִֿיצע ִיש פֿאוּלתעד" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "בִֿירתוּאל דעבִֿיצע ִיש וֹפֿפֿלִינע" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "בִֿירתוּאל דעבִֿיצע ִיש דעגראדעד" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "בִֿירתוּאל דעבִֿיצע ִיש וֹנלִינע" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "ִינצוֹררעצת בִֿירתוּאל דעבִֿיצע: נוֹ תיִפּע אבֿאִילאבּלע" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "לעאפֿ בִֿירתוּאל דעבִֿיצע (פִֿילע וֹר דִישכּ)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "בּוֹוֹתפּאתה: וּנאבֿאִילאבּלע\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "בּוֹוֹתפּאתה: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "פּאתה: וּנאבֿאִילאבּלע" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "פּאתה: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "דעבִֿיד: וּנאבֿאִילאבּלע" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "דעבִֿיד: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "תהִיש בֿדעבֿ ִיש א מִיררוֹר" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "תהִיש בֿדעבֿ ִיש א ראִידז%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "ִינצוֹררעצת בֿדעבֿ" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "בֿדעבֿ וִיתה %d צהִילדרענ\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "בֿדעבֿ עלעמענת נוּמבּער %d ִישנ'ת צוֹררעצת\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "בֿדעבֿ עלעמענת נוּמבּער %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "וּנכּנוֹונ בִֿירתוּאל דעבִֿיצע תיִפּע: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "פּוֹוֹל שתאתע: אצתִיבֿע" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "פּוֹוֹל שתאתע: עכּספּוֹרתעד" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "פּוֹוֹל שתאתע: דעשתרוֹיִעד" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "פּוֹוֹל שתאתע: רעשערבֿעד פֿוֹר הוֹת שפּארע" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "פּוֹוֹל שתאתע: לעבֿעל 2 ארצ דעבִֿיצע" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "פּוֹוֹל שתאתע: וּנִינִיתִיאלִיזעד" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "פּוֹוֹל שתאתע: וּנאבֿאִילאבּלע" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "פּוֹוֹל שתאתע: פּוֹתענתִיאלליִ אצתִיבֿע" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "פּוֹוֹל נאמע: וּנאבֿאִילאבּלע" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "פּוֹוֹל נאמע: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "פּוֹוֹל גוִּיד: וּנאבֿאִילאבּלע" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "פּוֹוֹל גוִּיד: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "וּנאבּלע תוֹ רעתרִיעבֿע פּוֹוֹל שתאתע" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "וּנרעצוֹגנִיזעד פּוֹוֹל שתאתע" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "נוֹ בִֿירתוּאל דעבִֿיצע תרעע אבֿאִילאבּלע" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "פּרִינת זפֿש ִינפֿוֹ אבּוֹוּת דעבִֿיצע." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "פִֿילעשיִשתעמ [בֿארִיאבּלע]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "פּרִינת זפֿש-בּוֹוֹתפֿשוֹבּי וֹר שתוֹרע ִית ִינתוֹ בֿארִיאבּלע" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "נוֹו צוֹננעצת תהע רעמוֹתע דעבּוּגגער, פּלעאשע." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "שתארת גדבּ שתוּבּ וֹנ גִיבֿענ פּוֹרת" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "בּרעאכּ ִינתוֹ גדבּ" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "שתוֹפּ גדבּ שתוּבּ" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "פּרעמאתוּרע ענד וֹפֿ פִֿילע" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "תראנשלאתעש תהע שתרִינג וִיתה תהע צוּררענת שעתתִינגש." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"פּרעשש ענתער תוֹ בּוֹוֹת תהע שעלעצתעד וֹש, `×¢' תוֹ עדִית תהע צוֹממאנדש בּעפֿוֹרע בּוֹוֹתִינג " +"וֹר `צ' פֿוֹר א צוֹממאנד-לִינע. עשצ תוֹ רעתוּרנ פּרעבִֿיוֹוּש מענוּ." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"פּרעשש ענתער תוֹ בּוֹוֹת תהע שעלעצתעד וֹש, `×¢' תוֹ עדִית תהע צוֹממאנדש בּעפֿוֹרע בּוֹוֹתִינג " +"וֹר `צ' פֿוֹר א צוֹממאנד-לִינע." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "ענתער: בּוֹוֹת, `×¢': וֹפּתִיוֹנש, `צ': צמד-לִינע" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "תהע הִיגהלִיגהתעד ענתריִ וִילל בּע עכּסעצוּתעד אוּתוֹמאתִיצאלליִ ִינ %dש." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%dש רעמאִינִינג." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dש" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "גרוּבּ בּוֹוֹת מענוּ" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ארגפּ_העלפּ_פֿמת: %s בֿאלוּע ִיש לעשש תהאנ וֹר עקוּאל תוֹ %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ארגפּ_העלפּ_פֿמת פּאראמעתער רעקוִּירעש א בֿאלוּע" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ארגפּ_העלפּ_פֿמת פּאראמעתער מוּשת בּע פּוֹשִיתִיבֿע" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: וּנכּנוֹונ ארגפּ_העלפּ_פֿמת פּאראמעתער" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "גארבּאגע ִינ ארגפּ_העלפּ_פֿמת: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"מאנדאתוֹריִ וֹר וֹפּתִיוֹנאל ארגוּמענתש תוֹ לוֹנג וֹפּתִיוֹנש ארע אלשוֹ מאנדאתוֹריִ וֹר " +"וֹפּתִיוֹנאל פֿוֹר אניִ צוֹררעשפּוֹנדִינג שהוֹרת וֹפּתִיוֹנש." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " וֹר: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [וֹפּתִיוֹנ...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "תריִ '%s --העלפּ' וֹר '%s --וּשאגע' פֿוֹר מוֹרע ִינפֿוֹרמאתִיוֹנ.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "רעפּוֹרת בּוּגש תוֹ %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "וּנכּנוֹונ שיִשתעמ עררוֹר" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "גִיבֿע תהִיש העלפּ לִישת" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "גִיבֿע א שהוֹרת וּשאגע מעששאגע" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "נאמע" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "שעת תהע פּרוֹגראמ נאמע" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "שעצש" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "האנג פֿוֹר שעצש שעצוֹנדש (דעפֿאוּלת 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "פּרִינת פּרוֹגראמ בֿערשִיוֹנ" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(פּרוֹגראמ עררוֹר) נוֹ בֿערשִיוֹנ כּנוֹונ!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: תוֹוֹ מאניִ ארגוּמענתש\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(פּרוֹגראמ עררוֹר) וֹפּתִיוֹנ שהוֹוּלד האבֿע בּעענ רעצוֹגנִיזעד!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: וֹפּתִיוֹנ '%s' ִיש אמבִּיגוּוֹוּש; פּוֹששִיבִּילִיתִיעש:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: וֹפּתִיוֹנ '--%s' דוֹעשנ'ת אללוֹו אנ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: וֹפּתִיוֹנ '%c%s' דוֹעשנ'ת אללוֹו אנ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: וֹפּתִיוֹנ '--%s' רעקוִּירעש אנ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: וּנרעצוֹגנִיזעד וֹפּתִיוֹנ '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: וּנרעצוֹגנִיזעד וֹפּתִיוֹנ '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ִינבֿאלִיד וֹפּתִיוֹנ -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: וֹפּתִיוֹנ רעקוִּירעש אנ ארגוּמענת -- '%c'\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: וֹפּתִיוֹנ '-ו %s' ִיש אמבִּיגוּוֹוּש\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: וֹפּתִיוֹנ '-ו %s' דוֹעשנ'ת אללוֹו אנ ארגוּמענת\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: וֹפּתִיוֹנ '-ו %s' רעקוִּירעש אנ ארגוּמענת\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "שוּצצעשש" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "נוֹ מאתצה" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "ִינבֿאלִיד רעגוּלאר עכּספּרעששִיוֹנ" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "ִינבֿאלִיד צוֹללאתִיוֹנ צהאראצתער" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "ִינבֿאלִיד צהאראצתער צלאשש נאמע" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "תראִילִינג בּאצכּשלאשה" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "ִינבֿאלִיד בּאצכּ רעפֿערענצע" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "וּנמאתצהעד [ וֹר [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "וּנמאתצהעד ( וֹר \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "וּנמאתצהעד \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "ִינבֿאלִיד צוֹנתענת וֹפֿ \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "ִינבֿאלִיד ראנגע ענד" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "מעמוֹריִ עכּסהאוּשתעד" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "ִינבֿאלִיד פּרעצעדִינג רעגוּלאר עכּספּרעששִיוֹנ" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "פּרעמאתוּרע ענד וֹפֿ רעגוּלאר עכּספּרעששִיוֹנ" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "רעגוּלאר עכּספּרעששִיוֹנ תוֹוֹ בִּיג" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "וּנמאתצהעד ) וֹר \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "וּנכּנוֹונ רעגעכּספּ עררוֹר" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "נוֹ פּרעבִֿיוֹוּש רעגוּלאר עכּספּרעששִיוֹנ" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "העללוֹ ווֹרלד" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "שאיִ `העללוֹ ווֹרלד'." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "אתתעמפּת תוֹ שעעכּ וֹוּתשִידע וֹפֿ תהע פִֿילע" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "וּנשוּפּפּוֹרתעד גזִיפּ פֿוֹרמאת" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "לזוֹפּ פִֿילע צוֹררוּפּתעד" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "כּסז פִֿילע צוֹררוּפּתעד וֹר וּנשוּפּפּוֹרתעד בּלוֹצכּ וֹפּתִיוֹנש" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "ִינבֿאלִיד ארצה-דעפּענדענת עלפֿ מאגִיצ" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ענבֿבֿאר=בֿאלוּע]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "שעת אנ ענבִֿירוֹנמענת בֿארִיאבּלע." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ענבֿבֿאר" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "רעמוֹבֿע אנ ענבִֿירוֹנמענת בֿארִיאבּלע." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ארג]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "לִישת דעבִֿיצעש וֹר פִֿילעש." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "ִינשערת א מוֹדוּלע." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "דִישכּ `%s' נוֹת פֿוֹוּנד" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "אתתעמפּת תוֹ רעאד וֹר ורִיתע וֹוּתשִידע וֹפֿ פּארתִיתִיוֹנ" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "ִינבֿאלִיד ארצה-ִינדעפּענדענת עלפֿ מאגִיצ" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "דעבִֿיצע צוֹוּנת עכּסצעעדש לִימִית" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "צאננוֹת ורִיתע תוֹ `%s': %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"תהע דעבִֿיצע.מאפּ ענתריִ `%s' ִיש ִינבֿאלִיד. ִיגנוֹרִינג ִית. פּלעאשע צוֹררעצת וֹר דעלעתע " +"יִוֹוּר דעבִֿיצע.מאפּ" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"תהע דרִיבֿע נאמע `%s' ִינ דעבִֿיצע.מאפּ ִיש ִינצוֹררעצת. וּשִינג %s ִינשתעאד. פּלעאשע וּשע " +"תהע פֿוֹרמ [הפֿצ]ד[0-9]* (×¢.ג. `הד0' וֹר `צד')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "צאנ'ת וֹפּענ `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "דעבִֿיצע_נאמע" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "שעת רוֹוֹת דעבִֿיצע." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "וּשע פִֿילע אש תהע דעבִֿיצע מאפּ [דעפֿאוּלת=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "וּשע פִֿילע אש מעמדִישכּ" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "וּשע גרוּבּ פִֿילעש ִינ תהע דִירעצתוֹריִ דִיר [דעפֿאוּלת=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "פּרִינת בֿערבּוֹשע מעששאגעש." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "ואִית וּנתִיל א דעבּוּגגער וִילל אתתאצה" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "וּנכּנוֹונ עכּסתרא ארגוּמענת `%s'." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "גרוּבּ עמוּלאתוֹר." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "עררוֹר ִינ פּארשִינג צוֹממאנד לִינע ארגוּמענתש\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "רוּנ `גדבּ %s %d', אנד שעת ארגש.הוֹלד תוֹ זערוֹ.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: וארנִינג:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: ִינפֿוֹ:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: עררוֹר:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "פִֿילע `%s' ִיש תוֹוֹ בִּיג" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "וּנכּנוֹונ פִֿילעשיִשתעמ" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "שהוּתדוֹונ פֿאִילעד" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "עכּסִית פֿאִילעד" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "וֹבֿערפֿלוֹו ִיש דעתעצתעד" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "דִישצארדִינג ִימפּרוֹפּערליִ נעשתעד פּארתִיתִיוֹנ (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "וּנכּנוֹונ צוֹממאנד `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "דִישפּלאיִ תהִיש העלפּ אנד עכּסִית." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "דִישפּלאיִ תהע וּשאגע וֹפֿ תהִיש צוֹממאנד אנד עכּסִית." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "מִיששִינג מאנדאתוֹריִ וֹפּתִיוֹנ פֿוֹר `%s'" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "תהע ארגוּמענת `%s' רעקוִּירעש אנ ִינתעגער" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"א בֿאלוּע ואש אששִיגנעד תוֹ תהע ארגוּמענת `%s' והִילע ִית דוֹעשנ'ת רעקוִּירע אנ " +"ארגוּמענת" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "פּרִינת בּאצכּתראצע." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "גרוּבּ דוֹעשנ'ת כּנוֹו הוֹו תוֹ האלת תהִיש מאצהִינע יִעת!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "דעפֿאוּלת שערבֿער ִיש ${נעת_דעפֿאוּלת_שערבֿער}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "ִינבֿאלִיד צוֹלוֹר שפּעצִיפִֿיצאתִיוֹנ `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "רעבּוֹוֹת פֿאִילעד" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[לענגתה]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "העכּסדוּמפּ ראנדוֹמ דאתא." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "דעבִֿיצע תרעע מוּשת בּע שוּפּפּלִיעד (שעע `דעבִֿיצעתרעע' צוֹממאנד)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "ִינבֿאלִיד זִימאגע" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "ִינבֿאלִיד דעבִֿיצע תרעע" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "לוֹאד לִינוּכּס." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "לוֹאד ִינִיתרד." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "לוֹאד דתבּ פִֿילע." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"פּלאִינ ִימאגע כּערנעל נוֹת שוּפּפּוֹרתעד - רעבּוִּילד וִיתה צוֹנפִֿיג_(וּ)עפִֿי_שתוּבּ ענאבּלעד" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "פֿאִילעד תוֹ געת פֿדת" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "יִוֹוּ נעעד תוֹ לוֹאד תהע כּסענ היִפּערבִֿישוֹר פִֿירשת" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "לוֹאד א כּסענ היִפּערבִֿישוֹר." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "לוֹאד א כּסענ מוֹדוּלע." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[וֹפּתש]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "בּוֹוֹת בִּיוֹש-בּאשעד שיִשתעמ." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "לוֹאד אנוֹתהער בּוֹוֹת לוֹאדער." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "דִישפּלאיִ וֹוּתפּוּת וֹנ אלל צוֹנשוֹלעש." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "וּשע שערִיאל צוֹנשוֹלע." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "אשכּ פֿוֹר פִֿילע נאמע תוֹ רעבּוֹוֹת פֿרוֹמ." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "וּשע צד-רוֹמ אש רוֹוֹת." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "ִינבֿוֹכּע וּשער צוֹנפִֿיגוּראתִיוֹנ רוֹוּתִינג." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "ענתער ִינ כּדבּ וֹנ בּוֹוֹת." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "וּשע גדבּ רעמוֹתע דעבּוּגגער ִינשתעאד וֹפֿ דדבּ." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "דִישאבּלע אלל בּוֹוֹת וֹוּתפּוּת." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "ואִית פֿוֹר כּעיִפּרעשש אפֿתער עבֿעריִ לִינע וֹפֿ וֹוּתפּוּת." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "וּשע צוֹמפִּילעד-ִינ רוֹוֹת דעבִֿיצע." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "בּוֹוֹת ִינתוֹ שִינגלע מוֹדע." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "בּוֹוֹת וִיתה בֿערבּוֹשע מעששאגעש." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "דוֹנ'ת רעבּוֹוֹת, יוּשת האלת." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "צהאנגע צוֹנפִֿיגוּרעד דעבִֿיצעש." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "צוֹמוּנִית[,שפּעעד]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "דִישאבּלע שמפּ." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "דִישאבּלע אצפִּי." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "דוֹנ'ת דִישפּלאיִ בּוֹוֹת דִיאגנוֹשתִיצ מעששאגעש." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "בּוֹוֹת וִיתה דעבּוּג מעששאגעש." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "שוּפּפּרעשש נוֹרמאל וֹוּתפּוּת (וארנִינגש רעמאִינ)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[אדדר|צוֹמוּנִית][,שפּעעד]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "נאמע" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "תיִפּע" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "אדדר" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "שִיזע" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "בּוֹוֹתִינג ִינ בּלִינד מוֹדע" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "לוֹאד כּערנעל וֹפֿ פֿרעעבּשד." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "לוֹאד כּערנעל וֹפֿ וֹפּענבּשד." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "לוֹאד כּערנעל וֹפֿ נעתבּשד." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "לוֹאד פֿרעעבּשד ענבֿ." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "לוֹאד פֿרעעבּשד כּערנעל מוֹדוּלע." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "לוֹאד נעתבּשד כּערנעל מוֹדוּלע." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "לוֹאד נעתבּשד כּערנעל מוֹדוּלע (עלפֿ)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "לוֹאד פֿרעעבּשד כּערנעל מוֹדוּלע (עלפֿ)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "לוֹאד כּוֹפּענבּשד ראמדִישכּ." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "לוֹאד אנוֹתהער צוֹרעבּוֹוֹת פּאיִלוֹאד" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "לעגאציִ `אשכּ' פּאראמעתער נוֹ לוֹנגער שוּפּפּוֹרתעד." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s ִיש דעפּרעצאתעד. וּשע שעת גפֿכּספּאיִלוֹאד=%s בּעפֿוֹרע לִינוּכּס צוֹממאנד ִינשתעאד.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s ִיש דעפּרעצאתעד. בֿגא מוֹדע %d ִישנ'ת רעצוֹגנִיזעד. וּשע שעת " +"גפֿכּספּאיִלוֹאד=וִידתהכּסהעִיגהת[כּסדעפּתה] בּעפֿוֹרע לִינוּכּס צוֹממאנד ִינשתעאד.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--פֿוֹרצע|--בּפּבּ] פִֿילע" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "תהע שִיזע וֹפֿ `%s' ִיש תוֹוֹ לארגע" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "לוֹאד פֿרעעדוֹש כּערנעל.שיִש." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "לוֹאד נתלדר וֹר בּוֹוֹתמגר." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "וֹבֿעררִידע גוּעששעד מאפּפִּינג וֹפֿ פּלאנ9 דעבִֿיצעש." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "גרוּבּדעבִֿיצע=פּלאנ9דעבִֿיצע" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "כּערנעל ארגש" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "לוֹאד פּלאנ9 כּערנעל." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "לוֹאד א פּכּסע ִימאגע." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "לוֹאד תרוּעצריִפּת ִישוֹ." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "ִינִיתרד אלרעאדיִ לוֹאדעד" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "לוֹאד מוֹדוּלע." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "פּרעשש אניִ כּעיִ תוֹ לאוּנצה כּסנוּ" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "לוֹאד `דעבִֿיצע-פּרוֹפּערתִיעש' דוּמפּ." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "צוֹוּלד נוֹת לוֹצאתע פֿפּשוא דרִיבֿער" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "פֿפּשוא פּרוֹתוֹצוֹל ואשנ'ת אבּלע תוֹ פִֿינד תהע ִינתערפֿאצע" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "נוֹ פֿפּשוא פֿוֹוּנד" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "פֿפּשוא רעבִֿישִיוֹנ: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "פִֿילע [ארגש...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "דִישפּלאיִ פֿפּשוא בֿערשִיוֹנ." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "וארנִינג: נוֹ צוֹנשוֹלע וִילל בּע אבֿאִילאבּלע תוֹ וֹש" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "לוֹאד א מוּלתִיבּוֹוֹת 2 כּערנעל." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "לוֹאד א מוּלתִיבּוֹוֹת 2 מוֹדוּלע." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "לוֹאד א מוּלתִיבּוֹוֹת כּערנעל." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "לוֹאד א מוּלתִיבּוֹוֹת מוֹדוּלע." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "בּאצכּגרוֹוּנד ִימאגע מוֹדע." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "שתרעתצה|נוֹרמאל" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "לוֹאד כּסנוּ ִימאגע." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "לוֹאד 64-בִּית כּסנוּ ִימאגע." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "לוֹאד כּסנוּ עכּסתענשִיוֹנ פּאצכּאגע." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "לוֹאד כּסנוּ עכּסתענשִיוֹנ." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "דִירעצתוֹריִ [וֹשבּוּנדלערעקוִּירעד]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "לוֹאד כּסנוּ עכּסתענשִיוֹנ דִירעצתוֹריִ." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "לוֹאד כּסנוּ ראמדִישכּ. ִית וִילל בּע אבֿאִילאבּלע ִינ וֹש אש מד0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "לוֹאד א שפּלאשה ִימאגע פֿוֹר כּסנוּ." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "לוֹאד אנ ִימאגע וֹפֿ הִיבּערנאתעד כּסנוּ." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "אדדר1,מאשכּ1[,אדדר2,מאשכּ2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "דעצלארע מעמוֹריִ רעגִיוֹנש אש פֿאוּלתיִ (בּאדראמ)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "פֿרוֹמ[כּ|מ|ג] תוֹ[כּ|מ|ג]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "רעמוֹבֿע אניִ מעמוֹריִ רעגִיוֹנש ִינ שפּעצִיפִֿיעד ראנגע." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "פֿוֹוּר ארגוּמענתש עכּספּעצתעד" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "וּנרעצוֹגנִישעד נעתווֹרכּ ִינתערפֿאצע `%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "נוֹ דהצפּ ִינפֿוֹ פֿוֹוּנד" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "נוֹ דהצפּ וֹפּתִיוֹנש פֿוֹוּנד" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "נוֹ דהצפּ וֹפּתִיוֹנ %d פֿוֹוּנד" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "וּנרעצוֹגנִישעד דהצפּ וֹפּתִיוֹנ פֿוֹרמאת שפּעצִיפִֿיצאתִיוֹנ `%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "נוֹ נעתווֹרכּ צארד פֿוֹוּנד" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "צוֹוּלדנ'ת אוּתוֹצוֹנפִֿיגוּרע %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[צארד]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "פּערפֿוֹרמ א בּוֹוֹתפּ אוּתוֹצוֹנפִֿיגוּראתִיוֹנ" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "בֿאר ִינתערפֿאצע נוּמבּער דעשצרִיפּתִיוֹנ" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"רעתרִיעבֿע דהצפּ וֹפּתִיוֹנ אנד שאבֿע ִית ִינתוֹ בֿאר. ִיפֿ בֿאר ִיש - תהענ פּרִינת תהע בֿאלוּע." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "נוֹ דנש שערבֿערש צוֹנפִֿיגוּרעד" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "דוֹמאִינ נאמע צוֹמפּוֹנענת ִיש תוֹוֹ לוֹנג" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "נוֹ דנש רעצוֹרד פֿוֹוּנד" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "נוֹ דנש רעפּליִ רעצעִיבֿעד" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "וֹנליִ ִיפּבֿ4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "וֹנליִ ִיפּבֿ6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "פּרעפֿער ִיפּבֿ4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "פּרעפֿער ִיפּבֿ6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "ִינבֿאלִיד ארגוּמענת" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "אדדרעשש דנששערבֿער" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "פּערפֿוֹרמ א דנש לוֹוֹכּוּפּ" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "דנששערבֿער" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "אדד א דנש שערבֿער" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "רעמוֹבֿע א דנש שערבֿער" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "לִישת דנש שערבֿערש" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "צוֹוּלדנ'ת שענד נעתווֹרכּ פּאצכּעת" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-בִּית פּרוֹתעצתעד ִינתערפֿאצע שוּפּפּוֹרתעד\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "וּנשוּפּפּוֹרתעד התתפּ רעשפּוֹנשע" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "וּנשוּפּפּוֹרתעד התתפּ עררוֹר %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "תִימע וֹוּת וֹפּענִינג `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "תִימעוֹוּת: צוֹוּלד נוֹת רעשוֹלבֿע הארדוארע אדדרעשש" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "וּנרעשוֹלבֿאבּלע אדדרעשש %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "וּנרעצוֹגנִישעד נעתווֹרכּ אדדרעשש `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "דעשתִינאתִיוֹנ וּנרעאצהאבּלע" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "רוֹוּתע לוֹוֹפּ דעתעצתעד" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "אדדרעשש נוֹת פֿוֹוּנד" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "יִוֹוּ צאנ'ת דעלעתע תהִיש אדדרעשש" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "וּנשוּפּפּוֹרתעד הו אדדרעשש תיִפּע %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "וּנשוּפּפּוֹרתעד אדדרעשש תיִפּע %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "תהרעע ארגוּמענתש עכּספּעצתעד" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "צארד נוֹת פֿוֹוּנד" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "תעמפּוֹראריִ" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "וּנכּנוֹונ אדדרעשש תיִפּע %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "נוֹ שערבֿער ִיש שפּעצִיפִֿיעד" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "תִימעוֹוּת רעאדִינג `%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "שהוֹרתנאמע צארד אדדרעשש [הואדדרעשש]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "אדד א נעתווֹרכּ אדדרעשש." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[צארד [הואדדרעשש]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "פּערפֿוֹרמ אנ ִיפּבֿ6 אוּתוֹצוֹנפִֿיגוּראתִיוֹנ" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "שהוֹרתנאמע" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "דעלעתע א נעתווֹרכּ אדדרעשש." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "שהוֹרתנאמע נעת [ִינתערפֿאצע| גו גאתעואיִ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "אדד א נעתווֹרכּ רוֹוּתע." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "דעלעתע א נעתווֹרכּ רוֹוּתע." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "לִישת נעתווֹרכּ רוֹוּתעש" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "לִישת נעתווֹרכּ צארדש" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "לִישת נעתווֹרכּ אדדרעששעש" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "צוֹננעצתִיוֹנ רעפֿוּשעד" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "צוֹננעצתִיוֹנ תִימעוֹוּת" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "ענתער וּשערנאמע: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[וּשערלִישת]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "צהעצכּ והעתהער וּשער ִיש ִינ וּשערלִישת." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "פּוֹששִיבּלע צוֹממאנדש ארע:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "פּוֹששִיבּלע דעבִֿיצעש ארע:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "פּוֹששִיבּלע פִֿילעש ארע:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "פּוֹששִיבּלע פּארתִיתִיוֹנש ארע:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "פּוֹששִיבּלע ארגוּמענתש ארע:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "פּוֹששִיבּלע תהִינגש ארע:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "וארנִינג: שיִנתאכּס עררוֹר (מִיששִינג שלאשה) ִינ `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "וארנִינג: ִינבֿאלִיד פֿוֹרעגרוֹוּנד צוֹלוֹר `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "וארנִינג: ִינבֿאלִיד בּאצכּגרוֹוּנד צוֹלוֹר `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ענבֿבֿאר [ענבֿבֿאר] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "עכּספּוֹרת בֿארִיאבּלעש." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "שוּנדאיִ" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "מוֹנדאיִ" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "תוּעשדאיִ" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "ועדנעשדאיִ" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "תהוּרשדאיִ" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "פֿרִידאיִ" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "שאתוּרדאיִ" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "מוֹדוּלע ִישנ'ת לוֹאדעד" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "גנוּ גרוּבּ בֿערשִיוֹנ %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "עשצ את אניִ תִימע עכּסִיתש." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"מִינִימאל בּאשה-לִיכּע לִינע עדִיתִינג ִיש שוּפּפּוֹרתעד. פֿוֹר תהע פִֿירשת ווֹרד, תאבּ לִישתש " +"פּוֹששִיבּלע צוֹממאנד צוֹמפּלעתִיוֹנש. אניִוהערע עלשע תאבּ לִישתש פּוֹששִיבּלע דעבִֿיצע וֹר " +"פִֿילע צוֹמפּלעתִיוֹנש. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "גרוּבּ>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "צלעאר תהע שצרעענ." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "ענתער נוֹרמאל מוֹדע." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "עכּסִית פֿרוֹמ נוֹרמאל מוֹדע." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "פּרעשש אניִ כּעיִ תוֹ צוֹנתִינוּע..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "בּוֹוֹתִינג `%s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "פֿאללִינג בּאצכּ תוֹ `%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "פֿאִילעד תוֹ בּוֹוֹת בּוֹתה דעפֿאוּלת אנד פֿאללבּאצכּ ענתרִיעש.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "בּוֹוֹתִינג א צוֹממאנד לִישת" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"מִינִימוּמ עמאצש-לִיכּע שצרעענ עדִיתִינג ִיש שוּפּפּוֹרתעד. תאבּ לִישתש צוֹמפּלעתִיוֹנש. פּרעשש " +"צתרל-כּס וֹר פֿ10 תוֹ בּוֹוֹת, צתרל-צ וֹר פֿ2 פֿוֹר א צוֹממאנד-לִינע וֹר עשצ תוֹ דִישצארד " +"עדִיתש אנד רעתוּרנ תוֹ תהע גרוּבּ מענוּ." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "וּשע תהע %C אנד %C כּעיִש תוֹ שעלעצת והִיצה ענתריִ ִיש הִיגהלִיגהתעד." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "בּ" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "כִּיבּ" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "מִיבּ" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "גִיבּ" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "תִיבּ" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "פִּיבּ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "כּ" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "מ" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "ג" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "ת" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "פּ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "בּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "כִּיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "מִיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "גִיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "תִיבּ/ש" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "פִּיבּ/ש" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "פּארתִיתִיוֹנ %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "דעבִֿיצע %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "פִֿילעשיִשתעמ צאננוֹת בּע אצצעששעד" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "פִֿילעשיִשתעמ תיִפּע %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- לאבּעל `%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- לאשת מוֹדִיפִֿיצאתִיוֹנ תִימע %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "נוֹ כּנוֹונ פִֿילעשיִשתעמ דעתעצתעד" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - פּארתִיתִיוֹנ שתארת את %llu%sכִּיבּ" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - שעצתוֹר שִיזע %uבּ" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - תוֹתאל שִיזע וּנכּנוֹונ" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - תוֹתאל שִיזע %llu%sכִּיבּ" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--מוֹרע--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "צאננוֹת וֹפּענ צוֹנפִֿיגוּראתִיוֹנ פִֿילע `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "נוֹ צוֹמפּרעששִיוֹנ ִיש אבֿאִילאבּלע פֿוֹר יִוֹוּר פּלאתפֿוֹרמ" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "נוֹ ִיעעע1275 רוֹוּתִינעש ארע אבֿאִילאבּלע פֿוֹר יִוֹוּר פּלאתפֿוֹרמ" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "נוֹ עפִֿי רוֹוּתִינעש ארע אבֿאִילאבּלע פֿוֹר יִוֹוּר פּלאתפֿוֹרמ" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "נוֹ שגִי רוֹוּתִינעש ארע אבֿאִילאבּלע פֿוֹר יִוֹוּר פּלאתפֿוֹרמ" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "נוֹ ראנדוֹמ נוּמבּער גענעראתוֹר ִיש אבֿאִילאבּלע פֿוֹר יִוֹוּר וֹש" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "פֿאִילעד תוֹ צרעאתע `דעבִֿיצע-מאפּפּער' תרעע" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "צאנ'ת מוֹוּנת ענצריִפּתעד בֿוֹלוּמע `%s': %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "צוֹוּלדנ'ת וֹפּענ געוֹמ" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "צוֹוּלדנ'ת פִֿינד געלִי צוֹנשוּמער" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "צוֹוּלדנ'ת רעתרִיעבֿע געלִי וּוִּיד" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "צוֹוּלדנ'ת פִֿינד געוֹמ `פּארת' צלאשש" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "וּנאלִיגנעד דעבִֿיצע שִיזע" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "אתתעמפּתִינג תוֹ רעאד תהע צוֹרע ִימאגע `%s' פֿרוֹמ גרוּבּ" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "אתתעמפּתִינג תוֹ רעאד תהע צוֹרע ִימאגע `%s' פֿרוֹמ גרוּבּ אגאִינ" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "צאננוֹת רעאד `%s' צוֹררעצתליִ" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "פֿאִילעד תוֹ רעאד תהע שעצתוֹרש וֹפֿ תהע צוֹרע ִימאגע" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "צאננוֹת געת תראנשלאתוֹר צוֹממאנד לִינע פֿוֹר פּאתה `%s': %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "תראנשלאתוֹר צוֹממאנד לִינע ִיש עמפּתיִ פֿוֹר פּאתה `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"תראנשלאתוֹר `%s' פֿוֹר פּאתה `%s' האש שעבֿעראל נוֹנ-וֹפּתִיוֹנ ווֹרדש, את לעאשת `%s' " +"אנד `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"תראנשלאתוֹר `%s' פֿוֹר פּאתה `%s' ִיש גִיבֿענ וֹנליִ וֹפּתִיוֹנש, צאננוֹת פִֿינד דעבִֿיצע פּארת" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "שתוֹראגע ִינפֿוֹרמאתִיוֹנ פֿוֹר `%s' דוֹעש נוֹת ִינצלוּדע תיִפּע" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "`%s' ִיש נוֹת א לוֹצאל דִישכּ" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"שתוֹראגע ִינפֿוֹרמאתִיוֹנ פֿוֹר `%s' ִינדִיצאתעש נעִיתהער א פּלאִינ פּארתִיתִיוֹנ נוֹר א פּלאִינ " +"דִישכּ" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "צאנ'ת רעתרִיעבֿע בּלוֹצכּלִישתש: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "בּלוֹצכּשִיזע ִיש נוֹת דִיבִֿישִיבּלע בּיִ 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "ִינבֿאלִיד זערוֹ בּלוֹצכּשִיזע" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "צאנ'ת רעתרִיעבֿע בּלוֹצכּלִישתש" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ִיוֹצתל ראִיד_בֿערשִיוֹנ עררוֹר: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "וּנשוּפּפּוֹרתעד ראִיד בֿערשִיוֹנ: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ִיוֹצתל געת_ארראיִ_ִינפֿוֹ עררוֹר: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ִיוֹצתל געת_דִישכּ_ִינפֿוֹ עררוֹר: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "וּנאבּלע תוֹ וֹפּענ שתרעאמ פֿרוֹמ %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "וּנכּנוֹונ כִּינד וֹפֿ ראִיד דעבִֿיצע `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "`וֹבּפּפּאתה' נוֹת פֿוֹוּנד ִינ פּארענת דִירש וֹפֿ `%s', נוֹ ִיעעע1275 נאמע דִישצוֹבֿעריִ" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "פֿאִילעד תוֹ געת צאנוֹנִיצאל פּאתה וֹפֿ `%s'" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "וּנכּנוֹונ דעבִֿיצע תיִפּע %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "וּשאגע: %s דעבִֿיצע\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "וּנאבּלע תוֹ פֿוֹרכּ: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "וּנאבּלע תוֹ צרעאתע פִּיפּע: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "צאננוֹת רעשתוֹרע תהע וֹרִיגִינאל דִירעצתוֹריִ" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "צאננוֹת שתאת `%s': %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "צאננוֹת מאכּע תעמפּוֹראריִ פִֿילע: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "צאננוֹת מאכּע תעמפּוֹראריִ דִירעצתוֹריִ: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"צוֹוּלדנ'ת פִֿינד ִיעעע1275 דעבִֿיצע פּאתה פֿוֹר %s.\n" +"יִוֹוּ וִילל האבֿע תוֹ שעת `בּוֹוֹת-דעבִֿיצע' בֿארִיאבּלע מאנוּאלליִ" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: נוֹת פֿוֹוּנד" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"`נבֿשעתענבֿ' פֿאִילעד. \n" +"יִוֹוּ וִילל האבֿע תוֹ שעת `בּוֹוֹת-דעבִֿיצע' בֿארִיאבּלע מאנוּאלליִ. את תהע ִיעעע1275 " +"פּרוֹמפּת, תיִפּע:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "יִוֹוּ וִילל האבֿע תוֹ שעת `שיִשתעמפּארתִיתִיוֹנ' אנד `וֹשלוֹאדער' מאנוּאלליִ." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "נוֹ `/' ִינ צאנוֹנִיצאל פִֿילענאמע" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "ציִגוִינ_צוֹנבֿ_פּאתה() פֿאִילעד" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "צוֹוּלדנ'ת רעתרִיעבֿע ראנדוֹמ דאתא" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "ִינשוּפֿפִֿיצִיענת פּרִיבִֿילעגעש תוֹ אצצעשש פִֿירמוארע, אששוּמִינג בִּיוֹש" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "נוֹ עפִֿי רוֹוּתִינעש ארע אבֿאִילאבּלע והענ רוּננִינג ִינ בִּיוֹש מוֹדע" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "וּנעכּספּעצתעד עפִֿי עררוֹר" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "צוֹוּלדנ'ת פִֿינד א פֿרעע בּוֹוֹתננננ שלוֹת" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"תהִיש גפּת פּארתִיתִיוֹנ לאבּעל צוֹנתאִינש נוֹ בִּיוֹש בּוֹוֹת פּארתִיתִיוֹנ; עמבּעדדִינג ווֹנ'ת בּע " +"פּוֹששִיבּלע" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "יִוֹוּר בִּיוֹש בּוֹוֹת פּארתִיתִיוֹנ ִיש תוֹוֹ שמאלל; עמבּעדדִינג ווֹנ'ת בּע פּוֹששִיבּלע" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"שעצתוֹר %llu ִיש אלרעאדיִ ִינ וּשע בּיִ ראִיד צוֹנתרוֹללער `%s'; אבֿוִֹידִינג ִית. פּלעאשע " +"אשכּ תהע מאנוּפֿאצתוּרער נוֹת תוֹ שתוֹרע דאתא ִינ מבּר גאפּ" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"שעצתוֹר %llu ִיש אלרעאדיִ ִינ וּשע בּיִ תהע פּרוֹגראמ `%s'; אבֿוִֹידִינג ִית. תהִיש " +"שוֹפֿתוארע מאיִ צאוּשע בּוֹוֹת וֹר וֹתהער פּרוֹבּלעמש ִינ פֿוּתוּרע. פּלעאשע אשכּ ִיתש אוּתהוֹרש " +"נוֹת תוֹ שתוֹרע דאתא ִינ תהע בּוֹוֹת תראצכּ" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"וֹתהער שוֹפֿתוארע ִיש וּשִינג תהע עמבּעדדִינג ארעא, אנד תהערע ִיש נוֹת ענוֹוּגה רוֹוֹמ פֿוֹר " +"צוֹרע.ִימג. שוּצה שוֹפֿתוארע ִיש וֹפֿתענ תריִִינג תוֹ שתוֹרע דאתא ִינ א ואיִ תהאת אבֿוִֹידש " +"דעתעצתִיוֹנ. וע רעצוֹממענד יִוֹוּ ִינבֿעשתִיגאתע" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"תהִיש משדוֹש-שתיִלע פּארתִיתִיוֹנ לאבּעל האש נוֹ פּוֹשת-מבּר גאפּ; עמבּעדדִינג ווֹנ'ת בּע " +"פּוֹששִיבּלע" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "יִוֹוּר עמבּעדדִינג ארעא ִיש וּנוּשוּאלליִ שמאלל. צוֹרע.ִימג ווֹנ'ת פִֿית ִינ ִית." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "מאכּע פּארתִיתִיוֹנ אצתִיבֿע" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "נוֹת א פּרִימאריִ פּארתִיתִיוֹנ" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "פּארתִיתִיוֹנ %d ִיש אצתִיבֿע נוֹו. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "צלעארעד אצתִיבֿע פֿלאג וֹנ %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "צהאנגע פּארתִיתִיוֹנ תיִפּע" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "שעת `הִידדענ' פֿלאג ִינ פּארתִיתִיוֹנ תיִפּע" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "תהע פּארתִיתִיוֹנ תיִפּע 0כּס%x ִישנ'ת בֿאלִיד" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "שעתתִינג פּארתִיתִיוֹנ תיִפּע תוֹ 0כּס%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "צאנ'ת בּרעאכּ 0 לוֹוֹפּש" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "נוֹת ִינ פֿוּנצתִיוֹנ בּוֹדיִ" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "ִינבֿאלִיד בֿארִיאבּלע נאמע `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "וּנעכּספּעצתעד ענד וֹפֿ פִֿילע" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[נוּמ]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "עכּסִית פֿרוֹמ לוֹוֹפּש" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "צוֹנתִינוּע לוֹוֹפּש" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "שהִיפֿת פּוֹשִיתִיוֹנאל פּאראמעתערש." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[בֿאלוּע]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "שעת פּוֹשִיתִיוֹנאל פּאראמעתערש." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "רעתוּרנ פֿרוֹמ א פֿוּנצתִיוֹנ." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-מ (שתרעתצה|נוֹרמאל)] פִֿילע" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "לוֹאד בּאצכּגרוֹוּנד ִימאגע פֿוֹר אצתִיבֿע תערמִינאל." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "צוֹלוֹר" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "שעת בּאצכּגרוֹוּנד צוֹלוֹר פֿוֹר אצתִיבֿע תערמִינאל." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "שהוֹו צבּמעמ צוֹנשוֹלע צוֹנתענת." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "שעת תהע שערִיאל וּנִית." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "שעת תהע שערִיאל פּוֹרת אדדרעשש." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "שעת תהע שערִיאל פּוֹרת שפּעעד." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "שעת תהע שערִיאל פּוֹרת ווֹרד לענגתה." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "שעת תהע שערִיאל פּוֹרת פּארִיתיִ." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "שעת תהע שערִיאל פּוֹרת שתוֹפּ בִּיתש." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "שעת תהע בּאשע פֿרעקוּענציִ." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "ענאבּלע/דִישאבּלע רתש/צתש." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "שערִיאל פּוֹרת `%s' ִישנ'ת פֿוֹוּנד" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "וּנשוּפּפּוֹרתעד שערִיאל פּוֹרת פֿלוֹו צוֹנתרוֹל" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[וֹפּתִיוֹנש...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "צוֹנפִֿיגוּרע שערִיאל פּוֹרת." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "וּנכּנוֹונ תערמִינפֿוֹ תיִפּע `%s'" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "אשצִיִי" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "וּתפֿ-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "בִֿישוּאלליִ-וֹרדערעד וּתפֿ-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "וּנכּנוֹונ ענצוֹדִינג" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "צוּררענת תערמִינפֿוֹ תיִפּעש:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "תערמִינאל ִיש אשצִיִי-וֹנליִ [דעפֿאוּלת]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "תערמִינאל ִיש לוֹגִיצאל-וֹרדערעד וּתפֿ-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "תערמִינאל ִיש בִֿישוּאלליִ-וֹרדערעד וּתפֿ-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "תערמִינאל האש שפּעצִיפִֿיעד געוֹמעתריִ." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "וִידתהכּסהעִיגהת." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "ִינצוֹררעצת תערמִינאל דִימענשִיוֹנש שפּעצִיפִֿיצאתִיוֹנ" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "תערמִינאל %s ִישנ'ת פֿוֹוּנד וֹר ִית'ש נוֹת האנדלעד בּיִ תערמִינפֿוֹ" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-א|-וּ|-בֿ] [-ג וכּסה] תערמ [תיִפּע]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "שעת תערמִינפֿוֹ תיִפּע וֹפֿ תערמ תוֹ תיִפּע.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "פּרִינת אנד עכּסעצוּתע בּלוֹצכּ ארגוּמענת." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "בִּיתמאפּ פִֿילע `%s' ִיש וֹפֿ וּנשוּפּפּוֹרתעד פֿוֹרמאת" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " בֿבּע ִינפֿוֹ: בֿערשִיוֹנ: %d.%d וֹעמ שוֹפֿתוארע רעבֿ: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " תוֹתאל מעמוֹריִ: %d כִּיבּ\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "נוֹ שוִּיתאבּלע בִֿידעוֹ מוֹדע פֿוֹוּנד" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "אצצעשש דענִיעד" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "מוֹדוּלעש" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "פּרע-לוֹאד שפּעצִיפִֿיעד מוֹדוּלעש מוֹדוּלעש" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "ִינשתאלל וֹנליִ מוֹדוּלעש אנד תהעִיר דעפּענדענצִיעש [דעפֿאוּלת=אלל]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "תהעמעש" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "ִינשתאלל תהעמעש [דעפֿאוּלת=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "פֿוֹנתש" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "ִינשתאלל פֿוֹנתש [דעפֿאוּלת=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "לוֹצאלעש" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "ִינשתאלל וֹנליִ לוֹצאלעש [דעפֿאוּלת=אלל]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "צוֹמפּרעשש גרוּבּ פִֿילעש [וֹפּתִיוֹנאל]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "צהוֹוֹשע תהע צוֹמפּרעששִיוֹנ תוֹ וּשע פֿוֹר צוֹרע ִימאגע" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "וּשע ִימאגעש אנד מוֹדוּלעש וּנדער דִיר [דעפֿאוּלת=%s/<פּלאתפֿוֹרמ>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "וּשע תראנשלאתִיוֹנש וּנדער דִיר [דעפֿאוּלת=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "וּשע תהעמעש וּנדער דִיר [דעפֿאוּלת=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "עמבּעד פִֿילע אש פּוּבּלִיצ כּעיִ פֿוֹר שִיגנאתוּרע צהעצכִּינג" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "צאננוֹת רענאמע תהע פִֿילע %s תוֹ %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "דִישכּ דוֹעש נוֹת עכּסִישת, שוֹ פֿאללִינג בּאצכּ תוֹ פּארתִיתִיוֹנ דעבִֿיצע %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "צוֹממאנדש:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "צרעאתע א בּלאנכּ ענבִֿירוֹנמענת בּלוֹצכּ פִֿילע." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "לִישת תהע צוּררענת בֿארִיאבּלעש." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "שעת [נאמע=בֿאלוּע ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "שעת בֿארִיאבּלעש." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "וּנשעת [נאמע ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "דעלעתע בֿארִיאבּלעש." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "וֹפּתִיוֹנש:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "יִוֹוּ נעעד תוֹ שפּעצִיפֿיִ את לעאשת וֹנע צוֹממאנד.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "פִֿילענאמע צוֹממאנד" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "תוֹוֹל תוֹ עדִית ענבִֿירוֹנמענת בּלוֹצכּ." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"ִיפֿ פִֿילענאמע ִיש `-', תהע דעפֿאוּלת בֿאלוּע %s ִיש וּשעד.\n" +"\n" +"תהערע ִיש נוֹ `דעלעתע' צוֹממאנד; ִיפֿ יִוֹוּ ואנת תוֹ דעלעתע תהע והוֹלע ענבִֿירוֹנמענת\n" +"בּלוֹצכּ, וּשע `רמ %s'." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "ִינבֿאלִיד ענבִֿירוֹנמענת בּלוֹצכּ" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "ִינבֿאלִיד פּאראמעתער %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "ענבִֿירוֹנמענת בּלוֹצכּ תוֹוֹ שמאלל" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "דִישכּ רעאד פֿאִילש את וֹפֿפֿשעת %lld, לענגתה %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "ִינבֿאלִיד שכִּיפּ בֿאלוּע %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "רעאד עררוֹר את וֹפֿפֿשעת %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "צאננוֹת וֹפּענ וֹש פִֿילע `%s': %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "צאננוֹת ורִיתע תוֹ תהע שתדוֹוּת: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "צוֹמפּארע פֿאִיל את וֹפֿפֿשעת %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "וֹש פִֿילע %s וֹפּענ עררוֹר: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "`לוֹוֹפּבּאצכּ' צוֹממאנד פֿאִילש: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "`צריִפּתוֹמוֹוּנת' צוֹממאנד פֿאִילש: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "צוֹוּלדנ'ת רעתרִיעבֿע וּוִּיד" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "לש פּאתה" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "לִישת פִֿילעש ִינ פּאתה." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "צפּ פִֿילע לוֹצאל" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "צוֹפּיִ פִֿילע תוֹ לוֹצאל פִֿילע לוֹצאל." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "צאת פִֿילע" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "צוֹפּיִ פִֿילע תוֹ שתאנדארד וֹוּתפּוּת." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "צמפּ פִֿילע לוֹצאל" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "צוֹמפּארע פִֿילע וִיתה לוֹצאל פִֿילע לוֹצאל." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "העכּס פִֿילע" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "שהוֹו צוֹנתענתש וֹפֿ פִֿילע ִינ העכּס." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "צרצ פִֿילע" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "געת צרצ32 צהעצכּשוּמ וֹפֿ פִֿילע." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "בּלוֹצכּלִישת פִֿילע" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "דִישפּלאיִ בּלוֹצכּלִישת וֹפֿ פִֿילע." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "כּסנוּ_וּוִּיד דעבִֿיצע" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "צוֹמפּוּתע כּסנוּ וּוִּיד וֹפֿ תהע דעבִֿיצע." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "נוּמ" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "שכִּיפּ ×  בּיִתעש פֿרוֹמ וֹוּתפּוּת פִֿילע." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "האנדלע ×  בּיִתעש ִינ וֹוּתפּוּת פִֿילע." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "שפּעצִיפֿיִ תהע נוּמבּער וֹפֿ ִינפּוּת פִֿילעש." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "שעת דעבּוּג ענבִֿירוֹנמענת בֿארִיאבּלע." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "מוֹוּנת צריִפּתוֹ דעבִֿיצעש." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "פִֿילע|פּרוֹמפּת" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "לוֹאד זפֿש צריִפּתוֹ כּעיִ." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "וּנצוֹמפּרעשש דאתא." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "ִינבֿאלִיד דִישכּ צוֹוּנת.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "דִישכּ צוֹוּנת מוּשת פּרעצעדע דִישכּש לִישת.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "נוֹ צוֹממאנד ִיש שפּעצִיפִֿיעד.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "נוֹת ענוֹוּגה פּאראמעתערש תוֹ צוֹממאנד.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "ִינבֿאלִיד צוֹממאנד %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ִימאגע_פּאתה צוֹממאנדש" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "דעבּוּג תוֹוֹל פֿוֹר פִֿילעשיִשתעמ דרִיבֿער." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "שעת ִינפּוּת פִֿילענאמע פֿוֹר 32-בִּית פּארת." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "שעת ִינפּוּת פִֿילענאמע פֿוֹר 64-בִּית פּארת." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "שעת וֹוּתפּוּת פִֿילענאמע. דעפֿאוּלת ִיש שתדוֹוּת" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[וֹפּתִיוֹנש]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "גלוּע 32-בִּית אנד 64-בִּית בִּינאריִ ִינתוֹ אפּפּלע וּנִיבֿערשאל וֹנע." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "מִיששִינג ִינפּוּת פִֿילע\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "צאננוֹת צוֹפּיִ `%s' תוֹ `%s': %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "צאנ'ת צוֹמפּרעשש `%s' תוֹ `%s'" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "צאננוֹת וֹפּענ דִירעצתוֹריִ `%s': %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "צאננוֹת דעלעתע `%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "גרוּבּ-מכִּימאגע ִיש צוֹמפִּילעד וִיתהוֹוּת כּסז שוּפּפּוֹרת" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "וּנכּנוֹונ צוֹמפּרעששִיוֹנ פֿוֹרמאת %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "וּנרעצוֹגנִיזעד צוֹמפּרעששִיוֹנ `%s'" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "וּנכּנוֹונ תארגעת פֿוֹרמאת %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "צאננוֹת פִֿינד לוֹצאלע `%s'" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s דוֹעשנ'ת עכּסִישת. פּלעאשע שפּעצִיפֿיִ --תארגעת וֹר --דִירעצתוֹריִ" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "ִינבֿאלִיד מוֹדִינפֿוֹ פִֿילע `%s'" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "וּנכּנוֹונ פּלאתפֿוֹרמ `%s-%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "מוֹרע תהאנ וֹנע ִינשתאלל דעבִֿיצע?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"ִינשתאלל גרוּבּ ִימאגעש וּנדער תהע דִירעצתוֹריִ דִיר/%s ִינשתעאד וֹפֿ תהע %s דִירעצתוֹריִ" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "תארגעת" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "ִינשתאלל גרוּבּ פֿוֹר תארגעת פּלאתפֿוֹרמ [דעפֿאוּלת=%s]; אבֿאִילאבּלע תארגעתש: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"מאכּע תהע דרִיבֿע אלשוֹ בּוֹוֹתאבּלע אש פֿלוֹפּפּיִ (דעפֿאוּלת פֿוֹר פֿדכּס דעבִֿיצעש). מאיִ בּרעאכּ " +"וֹנ שוֹמע בִּיוֹשעש." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "דעלעתע דעבִֿיצע מאפּ ִיפֿ ִית אלרעאדיִ עכּסִישתש" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "ִינשתאלל עבֿענ ִיפֿ פּרוֹבּלעמש ארע דעתעצתעד" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "וּשע ִידענתִיפִֿיער פִֿילע עבֿענ ִיפֿ וּוִּיד ִיש אבֿאִילאבּלע" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"דִישכּ מוֹדוּלע תוֹ וּשע (בִּיוֹשדִישכּ וֹר נאתִיבֿע). תהִיש וֹפּתִיוֹנ ִיש וֹנליִ אבֿאִילאבּלע וֹנ " +"בִּיוֹש תארגעת." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"דוֹנ'ת וּפּדאתע תהע `בּוֹוֹת-דעבִֿיצע'/`בּוֹוֹת*' נבֿראמ בֿארִיאבּלעש. תהִיש וֹפּתִיוֹנ ִיש וֹנליִ " +"אבֿאִילאבּלע וֹנ עפִֿי אנד ִיעעע1275 תארגעתש." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "דוֹ נוֹת פּרוֹבּע פֿוֹר פִֿילעשיִשתעמש ִינ דעבִֿיצע" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "דוֹ נוֹת ִינשתאלל בּוֹוֹתשעצתוֹר" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"דוֹ נוֹת אפּפּליִ אניִ רעעד-שוֹלוֹמוֹנ צוֹדעש והענ עמבּעדדִינג צוֹרע.ִימג. תהִיש וֹפּתִיוֹנ ִיש " +"וֹנליִ אבֿאִילאבּלע וֹנ כּס86 בִּיוֹש תארגעתש." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"תהע ִינשתאללאתִיוֹנ דעבִֿיצע ִיש רעמוֹבֿאבּלע. תהִיש וֹפּתִיוֹנ ִיש וֹנליִ אבֿאִילאבּלע וֹנ עפִֿי." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ִיד" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "תהע ִיד וֹפֿ בּוֹוֹתלוֹאדער. תהִיש וֹפּתִיוֹנ ִיש וֹנליִ אבֿאִילאבּלע וֹנ עפִֿי אנד מאצש." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "וּשע דִיר אש תהע עפִֿי שיִשתעמ פּארתִיתִיוֹנ רוֹוֹת." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "וּשע דִיר פֿוֹר פּפּצ מאצ ִינשתאלל." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "וּשע פִֿילע אש פֿוֹנת פֿוֹר לאבּעל" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "וּשע צוֹלוֹר פֿוֹר לאבּעל" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "וּשע צוֹלוֹר פֿוֹר לאבּעל בּאצכּגרוֹוּנד" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "וּשע שתרִינג אש פּרוֹדוּצת בֿערשִיוֹנ" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[וֹפּתִיוֹנ] [ִינשתאלל_דעבִֿיצע]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "ִינשתאלל גרוּבּ וֹנ יִוֹוּר דרִיבֿע." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"ִינשתאלל_דעבִֿיצע מוּשת בּע שיִשתעמ דעבִֿיצע פִֿילענאמע.\n" +"%s צוֹפִּיעש גרוּבּ ִימאגעש ִינתוֹ %s. וֹנ שוֹמע פּלאתפֿוֹרמש, ִית מאיִ אלשוֹ ִינשתאלל גרוּבּ Ö´" +"ינתוֹ תהע בּוֹוֹת שעצתוֹר." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "תהע דרִיבֿע %s ִיש דעפִֿינעד מוּלתִיפּלע תִימעש ִינ תהע דעבִֿיצע מאפּ %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "וּנאבּלע תוֹ דעתערמִינע יִוֹוּר פּלאתפֿוֹרמ. וּשע --תארגעת." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "ִינשתאללִינג פֿוֹר %s פּלאתפֿוֹרמ.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "ִינשתאלל דעבִֿיצע ִישנ'ת שפּעצִיפִֿיעד" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "צאננוֹת פִֿינד עפִֿי דִירעצתוֹריִ" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "צאננוֹת פִֿינד א דעבִֿיצע פֿוֹר %s (ִיש /דעבֿ מוֹוּנתעד?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "צאננוֹת פִֿינד א גרוּבּ דרִיבֿע פֿוֹר %s. צהעצכּ יִוֹוּר דעבִֿיצע.מאפּ" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s דוֹעשנ'ת לוֹוֹכּ לִיכּע אנ עפִֿי פּארתִיתִיוֹנ" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "יִוֹוּ'בֿע פֿוֹוּנד א בּוּג" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "פִֿילעשיִשתעמ וֹנ %s ִיש נעִיתהער הפֿש נוֹר הפֿש+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"אתתעמפּת תוֹ ִינשתאלל תוֹ ענצריִפּתעד דִישכּ וִיתהוֹוּת צריִפּתוֹדִישכּ ענאבּלעד. שעת `%s' ִינ " +"פִֿילע `%s'" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "צאנ'ת צרעאתע פִֿילע: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "נוֹ הִינתש אבֿאִילאבּלע פֿוֹר יִוֹוּר פּלאתפֿוֹרמ. עכּספּעצת רעדוּצעד פּערפֿוֹרמאנצע" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "נוֹת רוּננִינג: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "תהע צהוֹשענ פּארתִיתִיוֹנ ִיש נוֹת א פּרעפּ פּארתִיתִיוֹנ" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "פֿאִילעד תוֹ צוֹפּיִ גרוּבּ תוֹ תהע פּרעפּ פּארתִיתִיוֹנ" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"תהע פּרעפּ פּארתִיתִיוֹנ ִיש נוֹת עמפּתיִ. ִיפֿ יִוֹוּ ארע שוּרע יִוֹוּ ואנת תוֹ וּשע ִית, רוּנ דד " +"תוֹ צלעאר ִית: `%s'" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "עפִֿי בּוֹוֹתלוֹאדער ִיד ִישנ'ת שפּעצִיפִֿיעד." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "וארנִינג: נוֹ פּלאתפֿוֹרמ-שפּעצִיפִֿיצ ִינשתאלל ואש פּערפֿוֹרמעד" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "ִינשתאללאתִיוֹנ פִֿינִישהעד. נוֹ עררוֹר רעפּוֹרתעד." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "בּלעשש פֿוֹר כּס86-בּאשעד מאצש" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "בּלעשש פֿוֹר פּפּצ-בּאשעד מאצש" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "נוֹ פּאתה וֹר דעבִֿיצע ִיש שפּעצִיפִֿיעד.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--פּפּצ פּאתה|--כּס86 פִֿילע" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "מאצ-שתיִלע בּלעשש וֹנ הפֿש וֹר הפֿש+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "וּשאגע: %s [ִינפִֿילע [וֹוּתפִֿילע]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "פֿרעעתיִפּע עררוֹר %d לוֹאדִינג גליִפּה 0כּס%x פֿוֹר וּ+0כּס%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (מעדִיאל)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (לעפֿתמוֹשת)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (רִיגהתמוֹשת)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "וֹוּת וֹפֿ ראנגע שוּבּשתִיתוּתִיוֹנ (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "וֹוּת וֹפֿ ראנגע לוֹוֹכּוּפּ: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "וּנשוּפּפּוֹרתעד שוּבּשתִיתוּתִיוֹנ תיִפּע: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "וּנשוּפּפּוֹרתעד שוּבּשתִיתוּתִיוֹנ שפּעצִיפִֿיצאתִיוֹנ: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "וּנשוּפּפּוֹרתעד צוֹבֿעראגע שפּעצִיפִֿיצאתִיוֹנ: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "וארנִינג: וּנשוּפּפּוֹרתעד פֿוֹנת פֿעאתוּרע פּאראמעתערש: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "שאבֿע וֹוּתפּוּת ִינ פִֿילע [רעקוִּירעד]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "שעלעצת פֿאצע ִינדעכּס" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "פֿרוֹמ-תוֹ[,פֿרוֹמ-תוֹ]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "שעת פֿוֹנת ראנגע" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "שעת פֿוֹנת פֿאמִיליִ נאמע" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "שִיזע" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "שעת פֿוֹנת שִיזע" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "שעת פֿוֹנת דעשצענת" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "שעת פֿוֹנת אשצענת" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "צוֹנבֿערת תוֹ בּוֹלד פֿוֹנת" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "פֿוֹרצע אוּתוֹהִינת" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "דִישאבּלע הִינתִינג" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ִיגנוֹרע בִּיתמאפּ שתרִיכּעש והענ לוֹאדִינג" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ִינבֿאלִיד פֿוֹנת ראנגע" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[וֹפּתִיוֹנש] פֿוֹנת_פִֿילעש" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "צוֹנבֿערת צוֹממוֹנ פֿוֹנת פִֿילע פֿוֹרמאתש ִינתוֹ פּפֿ2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "וֹוּתפּוּת פִֿילע מוּשת בּע שפּעצִיפִֿיעד" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "פֿת_ִינִית_פֿרעעתיִפּע פֿאִילש" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "צאנ'ת וֹפּענ פִֿילע %s, ִינדעכּס %d: עררוֹר %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "צאנ'ת שעת %dכּס%d פֿוֹנת שִיזע: פֿרעעתיִפּע עררוֹר %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "שעת פּרעפִֿיכּס דִירעצתוֹריִ" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"עמבּעד פִֿילע אש א מעמדִישכּ ִימאגע\n" +"ִימפּלִיעש `-פּ (מעמדִישכּ)/בּוֹוֹת/גרוּבּ' אנד וֹבֿעררִידעש אניִ פּרעפִֿיכּס שוּפּפּלִיעד " +"פּרעבִֿיוֹוּשליִ, בּוּת תהע פּרעפִֿיכּס ִיתשעלפֿ צאנ בּע וֹבֿעררִידדענ בּיִ לאתער וֹפּתִיוֹנש" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "עמבּעד פִֿילע אש אנ עארליִ צוֹנפִֿיג" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "אדד נוֹתע שעגמענת פֿוֹר צהרפּ ִיעעע1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "וֹוּתפּוּת א גענעראתעד ִימאגע תוֹ פִֿילע [דעפֿאוּלת=שתדוֹוּת]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "פֿוֹרמאת" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "גענעראתע אנ ִימאגע ִינ פֿוֹרמאת" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "אבֿאִילאבּלע פֿוֹרמאתש:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "וּנכּנוֹונ תארגעת פֿוֹרמאת %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[וֹפּתִיוֹנ]... [מוֹדוּלעש]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "מאכּע א בּוֹוֹתאבּלע ִימאגע וֹפֿ גרוּבּ." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "תארגעת פֿוֹרמאת נוֹת שפּעצִיפִֿיעד (וּשע תהע -וֹ וֹפּתִיוֹנ)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "פּרעפִֿיכּס נוֹת שפּעצִיפִֿיעד (וּשע תהע -פּ וֹפּתִיוֹנ)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"`%s' ִיש מִישצוֹמפִּילעד: ִיתש שתארת אדדרעשש ִיש 0כּס%llx ִינשתעאד וֹפֿ 0כּס%llx: לד." +"גוֹלד בּוּג?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "שעת ִינפּוּת פִֿילענאמע. דעפֿאוּלת ִיש שתדִינ" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "וּנכּנוֹונ כּעיִבּוֹארד שצאנ ִידענתִיפִֿיער %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "וּנכּנוֹונ כּעיִבּוֹארד שצאנ צוֹדע 0כּס%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "עררוֹר: נוֹ בֿאלִיד כּעיִבּוֹארד לאיִוֹוּת פֿוֹוּנד. צהעצכּ תהע ִינפּוּת.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "גענעראתע גרוּבּ כּעיִבּוֹארד לאיִוֹוּת פֿרוֹמ לִינוּכּס צוֹנשוֹלע וֹנע." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "רוֹוֹת דִירעצתוֹריִ וֹפֿ תפֿתפּ שערבֿער" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "רעלאתִיבֿע שוּבּדִירעצתוֹריִ וֹנ נעתווֹרכּ שערבֿער" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"פּרעפּארעש גרוּבּ נעתווֹרכּ בּוֹוֹת ִימאגעש את נעת_דִירעצתוֹריִ/שוּבּדִיר אששוּמִינג " +"נעת_דִירעצתוֹריִ בּעִינג תפֿתפּ רוֹוֹת." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "וּנשוּפּפּוֹרתעד פּלאתפֿוֹרמ %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"נעתבּוֹוֹת דִירעצתוֹריִ פֿוֹר %s צרעאתעד. צוֹנפִֿיגוּרע יִוֹוּר דהצפּ שערבֿער תוֹ פּוִֹינת תוֹ %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "נוּמבּער וֹפֿ פּבּכּדפֿ2 ִיתעראתִיוֹנש" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "לענגתה וֹפֿ גענעראתעד האשה" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "לענגתה וֹפֿ שאלת" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "גענעראתע פּבּכּדפֿ2 פּאששווֹרד האשה." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "פֿאִילוּרע תוֹ רעאד פּאששווֹרד" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "רעענתער פּאששווֹרד: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "פּאששווֹרדש דוֹנ'ת מאתצה" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "צוֹוּלדנ'ת רעתרִיעבֿע ראנדוֹמ דאתא פֿוֹר שאלת" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "צריִפּתוֹגראפּהִיצ עררוֹר נוּמבּער %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "פּבּכּדפֿ2 האשה וֹפֿ יִוֹוּר פּאששווֹרד ִיש %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "נוֹ פּאתה ִיש שפּעצִיפִֿיעד.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "פּאתה" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "תראנשפֿוֹרמ א שיִשתעמ פִֿילענאמע ִינתוֹ גרוּבּ וֹנע." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "שאבֿע רוֹמ ִימאגעש ִינ דִיר [וֹפּתִיוֹנאל]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "וּשע פִֿילע אש כּסוֹררִישוֹ [וֹפּתִיוֹנאל]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "וּשע שתרִינג אש פּרוֹדוּצת נאמע" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"ענאבּלע שפּארצ בּוֹוֹת. דִישאבּלעש הפֿש+, אפּמ, ארצש אנד בּוֹוֹת אש דִישכּ ִימאגע פֿוֹר ִי386-" +"פּצ" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"ענאבּלע ארצש (בִּיג-ענדִיאנ מִיפּש מאצהִינעש, מוֹשתליִ שגִי) בּוֹוֹת. דִישאבּלעש הפֿש+, אפּמ, " +"שפּארצ64 אנד בּוֹוֹת אש דִישכּ ִימאגע פֿוֹר ִי386-פּצ" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "מאכּע גרוּבּ צד-רוֹמ, דִישכּ, פּענדרִיבֿע אנד פֿלוֹפּפּיִ בּוֹוֹתאבּלע ִימאגע." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"גענעראתעש א בּוֹוֹתאבּלע צד/וּשבּ/פֿלוֹפּפּיִ ִימאגע. ארגוּמענתש וֹתהער תהאנ וֹפּתִיוֹנש תוֹ " +"תהִיש פּרוֹגראמ ארע פּאששעד תוֹ כּסוֹררִישוֹ, אנד ִינדִיצאתע שוֹוּרצע פִֿילעש, שוֹוּרצע " +"דִירעצתוֹרִיעש, וֹר אניִ וֹפֿ תהע מכִּישוֹפֿש וֹפּתִיוֹנש לִישתעד בּיִ תהע וֹוּתפּוּת וֹפֿ `%s'." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "וֹפּתִיוֹנ -- שוִיתצהעש תוֹ נאתִיבֿע כּסוֹררִישוֹ צוֹממאנד מוֹדע." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "מאִיל כּסוֹררִישוֹ שוּפּפּוֹרת רעקוּעשתש תוֹ <בּוּג-כּסוֹררִישוֹ@גנוּ.וֹרג>." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[וֹפּתִיוֹנ] שוֹוּרצע..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "ענאבּלִינג %s שוּפּפּוֹרת ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"יִוֹוּר כּסוֹררִישוֹ דוֹעשנ'ת שוּפּפּוֹרת `--גרוּבּ2-בּוֹוֹת-ִינפֿוֹ'. שוֹמע פֿעאתוּרעש ארע " +"דִישאבּלעד. פּלעאשע וּשע כּסוֹררִישוֹ 1.2.9 וֹר לאתער." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"יִוֹוּר כּסוֹררִישוֹ דוֹעשנ'ת שוּפּפּוֹרת `--גרוּבּ2-בּוֹוֹת-ִינפֿוֹ'. יִוֹוּר צוֹרע ִימאגע ִיש תוֹוֹ " +"בִּיג. בּוֹוֹת אש דִישכּ ִיש דִישאבּלעד. פּלעאשע וּשע כּסוֹררִישוֹ 1.2.9 וֹר לאתער." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"גענעראתע א שתאנדאלוֹנע ִימאגע (צוֹנתאִינִינג אלל מוֹדוּלעש) ִינ תהע שעלעצתעד פֿוֹרמאת" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "גראפֿת פּוִֹינת שיִנתאכּס (×¢.ג. /בּוֹוֹת/גרוּבּ/גרוּבּ.צפֿג=./גרוּבּ.צפֿג) ִיש אצצעפּתעד" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ִימאגע1 [ִימאגע2 ...] מוֹוּנתפּוִֹינת" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "נעעד אנ ִימאגע אנד מוֹוּנתפּוִֹינת" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "גִיבֿענ ארגוּמענת ִיש א שיִשתעמ דעבִֿיצע, נוֹת א פּאתה" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "שעפּאראתע ִיתעמש ִינ וֹוּתפּוּת וּשִינג אשצִיִי נוּל צהאראצתערש" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[דעפֿאוּלת=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "פּרִינת תארגעת" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "אבֿאִילאבּלע תארגעתש:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[וֹפּתִיוֹנ]... [פּאתה|דעבִֿיצע]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"פּרוֹבּע דעבִֿיצע ִינפֿוֹרמאתִיוֹנ פֿוֹר א גִיבֿענ פּאתה (וֹר דעבִֿיצע, ִיפֿ תהע -ד וֹפּתִיוֹנ ִיש " +"גִיבֿענ)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "רעאד תעכּסת פֿרוֹמ פִֿילע." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "וּשע צוֹלוֹר פֿוֹר תעכּסת" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "וּשע צוֹלוֹר פֿוֹר בּאצכּגרוֹוּנד" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "שעת תהע לאבּעל תוֹ רענדער" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "וּשע פִֿילע אש פֿוֹנת (פּפֿ2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "רענדער אפּפּלע .דִישכּ_לאבּעל." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "מִיששִינג ארגוּמענתש\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[פּאתה]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "צהעצכּש גרוּבּ שצרִיפּת צוֹנפִֿיגוּראתִיוֹנ פִֿילע פֿוֹר שיִנתאכּס עררוֹרש." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "שיִנתאכּס עררוֹר את לִינע %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "שצרִיפּת `%s' צוֹנתאִינש נוֹ צוֹממאנדש אנד וִילל דוֹ נוֹתהִינג\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "וּשע פִֿילע אש תהע בּוֹוֹת ִימאגע [דעפֿאוּלת=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "וּשע פִֿילע אש תהע צוֹרע ִימאגע [דעפֿאוּלת=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "נוֹ דעבִֿיצע ִיש שפּעצִיפִֿיעד.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"שעת וּפּ ִימאגעש תוֹ בּוֹוֹת פֿרוֹמ דעבִֿיצע.\n" +"\n" +"יִוֹוּ שהוֹוּלד נוֹת נוֹרמאלליִ רוּנ תהִיש פּרוֹגראמ דִירעצתליִ. וּשע גרוּבּ-ִינשתאלל ִינשתעאד." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "דעבִֿיצע מוּשת בּע אנ וֹש דעבִֿיצע (×¢.ג. /דעבֿ/שדא)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "ִינבֿאלִיד דעבִֿיצע `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "רוֹוֹת דִירעצתוֹריִ אש ִית וִילל בּע שעענ וֹנ רוּנתִימע [דעפֿאוּלת=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"צוּררענת דִירעצתוֹריִ וֹפֿ שיִשלִינוּכּס אש ִית וִילל בּע שעענ וֹנ רוּנתִימע [דעפֿאוּלת ִיש " +"פּארענת דִירעצתוֹריִ וֹפֿ ִינפּוּת פִֿילע]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "ורִיתע וֹוּתפּוּת תוֹ פִֿילע [דעפֿאוּלת=שתדוֹוּת]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "תראנשפֿוֹרמ שיִשלִינוּכּס צוֹנפִֿיג ִינתוֹ גרוּבּ וֹנע." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "צאננוֹת צוֹמפּרעשש תהע כּערנעל ִימאגע" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "וּנכּנוֹונ צוֹמפּרעששִיוֹנ %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "דעצוֹמפּרעששוֹר ִיש תוֹוֹ בִּיג" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "צוֹרע ִימאגע ִיש תוֹוֹ בִּיג (0כּס%x > 0כּס%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "כּערנעל ִימאגע ִיש תוֹוֹ בִּיג (0כּס%x > 0כּס%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "דִישכּבּוֹוֹת.ִימג שִיזע מוּשת בּע %u בּיִתעש" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"פֿושתארת.ִימג דוֹעשנ'ת מאתצה תהע כּנוֹונ גוֹוֹד בֿערשִיוֹנ. פּרוֹצעעד את יִוֹוּר וֹונ רִישכּ" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "פִֿירמוארע ִימאגע ִיש תוֹוֹ בִּיג" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ִינבֿאלִיד לִינע פֿוֹרמאת: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "תהע פִֿירשת שעצתוֹר וֹפֿ תהע צוֹרע פִֿילע ִיש נוֹת שעצתוֹר-אלִיגנעד" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "נוֹנ-שעצתוֹר-אלִיגנעד דאתא ִיש פֿוֹוּנד ִינ תהע צוֹרע פִֿילע" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "תהע שעצתוֹרש וֹפֿ תהע צוֹרע פִֿילע ארע תוֹוֹ פֿראגמענתעד" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "תהע שִיזע וֹפֿ `%s' ִיש נוֹת %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "תהע שִיזע וֹפֿ `%s' ִיש תוֹוֹ שמאלל" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"אתתעמפּתִינג תוֹ ִינשתאלל גרוּבּ תוֹ א דִישכּ וִיתה מוּלתִיפּלע פּארתִיתִיוֹנ לאבּעלש וֹר בּוֹתה " +"פּארתִיתִיוֹנ לאבּעל אנד פִֿילעשיִשתעמ. תהִיש ִיש נוֹת שוּפּפּוֹרתעד יִעת." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "וּנאבּלע תוֹ ִידענתִיפֿיִ א פִֿילעשיִשתעמ ִינ %s; שאפֿעתיִ צהעצכּ צאנ'ת בּע פּערפֿוֹרמעד" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s אפּפּעארש תוֹ צוֹנתאִינ א %s פִֿילעשיִשתעמ והִיצה ִישנ'ת כּנוֹונ תוֹ רעשערבֿע שפּאצע פֿוֹר " +"דוֹש-שתיִלע בּוֹוֹת. ִינשתאללִינג גרוּבּ תהערע צוֹוּלד רעשוּלת ִינ פִֿילעשיִשתעמ דעשתרוּצתִיוֹנ" +" ִיפֿ בֿאלוּאבּלע דאתא ִיש וֹבֿערורִיתתענ בּיִ גרוּבּ-שעתוּפּ (--שכִּיפּ-פֿש-פּרוֹבּע דִישאבּלעש " +"תהִיש צהעצכּ, וּשע את יִוֹוּר וֹונ רִישכּ)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s אפּפּעארש תוֹ צוֹנתאִינ א %s פּארתִיתִיוֹנ מאפּ והִיצה ִישנ'ת כּנוֹונ תוֹ רעשערבֿע שפּאצע " +"פֿוֹר דוֹש-שתיִלע בּוֹוֹת. ִינשתאללִינג גרוּבּ תהערע צוֹוּלד רעשוּלת ִינ פִֿילעשיִשתעמ " +"דעשתרוּצתִיוֹנ ִיפֿ בֿאלוּאבּלע דאתא ִיש וֹבֿערורִיתתענ בּיִ גרוּבּ-שעתוּפּ (--שכִּיפּ-פֿש-פּרוֹבּע " +"דִישאבּלעש תהִיש צהעצכּ, וּשע את יִוֹוּר וֹונ רִישכּ)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s אפּפּעארש תוֹ צוֹנתאִינ א %s פּארתִיתִיוֹנ מאפּ אנד לדמ והִיצה ִישנ'ת כּנוֹונ תוֹ בּע א " +"שאפֿע צוֹמבִּינאתִיוֹנ. ִינשתאללִינג גרוּבּ תהערע צוֹוּלד רעשוּלת ִינ פִֿילעשיִשתעמ " +"דעשתרוּצתִיוֹנ ִיפֿ בֿאלוּאבּלע דאתא ִיש וֹבֿערורִיתתענ בּיִ גרוּבּ-שעתוּפּ (--שכִּיפּ-פֿש-פּרוֹבּע " +"דִישאבּלעש תהִיש צהעצכּ, וּשע את יִוֹוּר וֹונ רִישכּ)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"אתתעמפּתִינג תוֹ ִינשתאלל גרוּבּ תוֹ א פּארתִיתִיוֹנלעשש דִישכּ וֹר תוֹ א פּארתִיתִיוֹנ. תהִיש Ö´" +"יש א בּאד ִידעא." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"אתתעמפּתִינג תוֹ ִינשתאלל גרוּבּ תוֹ א דִישכּ וִיתה מוּלתִיפּלע פּארתִיתִיוֹנ לאבּעלש. תהִיש Ö´" +"יש נוֹת שוּפּפּוֹרתעד יִעת." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "פּארתִיתִיוֹנ שתיִלע `%s' דוֹעשנ'ת שוּפּפּוֹרת עמבּעדדִינג" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "פִֿילע שיִשתעמ `%s' דוֹעשנ'ת שוּפּפּוֹרת עמבּעדדִינג" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "יִוֹוּר עמבּעדדִינג ארעא ִיש וּנוּשוּאלליִ שמאלל. צוֹרע.ִימג ווֹנ'ת פִֿית ִינ ִית." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "נוֹ תערמִינאתוֹר ִינ תהע צוֹרע ִימאגע" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "צוֹרע.ִימג בֿערשִיוֹנ מִישמאתצה" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"עמבּעדדִינג ִיש נוֹת פּוֹששִיבּלע, בּוּת תהִיש ִיש רעקוִּירעד פֿוֹר ראִיד אנד לבֿמ ִינשתאלל" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "צאנ'ת דעתערמִינע פִֿילעשיִשתעמ וֹנ %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "פִֿילעשיִשתעמ `%s' דוֹעשנ'ת שוּפּפּוֹרת בּלוֹצכּלִישתש" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "עמבּעדדִינג ִיש נוֹת פּוֹששִיבּלע, בּוּת תהִיש ִיש רעקוִּירעד פֿוֹר צרוֹשש-דִישכּ ִינשתאלל" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"עמבּעדדִינג ִיש נוֹת פּוֹששִיבּלע. גרוּבּ צאנ וֹנליִ בּע ִינשתאללעד ִינ תהִיש שעתוּפּ בּיִ " +"וּשִינג בּלוֹצכּלִישתש. הוֹועבֿער, בּלוֹצכּלִישתש ארע וּנרעלִיאבּלע אנד תהעִיר וּשע ִיש " +"דִישצוֹוּראגעד." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "וִילל נוֹת פּרוֹצעעד וִיתה בּלוֹצכּלִישתש" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "בּלוֹצכּלִישתש ארע ִינבֿאלִיד" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "בּלוֹצכּלִישתש ארע ִינצוֹמפּלעתע" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "וּשאגע: %s -וֹ וֹוּתפּוּת צכּבּמאפּ_ארגוּמענתש...\\× " + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "מאכּע גרוּבּ כּעיִבּוֹארד לאיִוֹוּת פִֿילע." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "פּרִינת תהִיש מעששאגע אנד עכּסִית" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "פּרִינת תהע בֿערשִיוֹנ ִינפֿוֹרמאתִיוֹנ אנד עכּסִית" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s גענעראתעש א כּעיִבּוֹארד לאיִוֹוּת פֿוֹר גרוּבּ וּשִינג צכּבּצוֹמפּ\\× " + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "רעפּוֹרת בּוּגש תוֹ <בּוּג-גרוּבּ@גנוּ.וֹרג>." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: וֹפּתִיוֹנ רעקוִּירעש אנ ארגוּמענת -- `%s'\\× " + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "וּשאגע: %s [וֹפּתִיוֹנ]\\× " + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "גענעראתע א גרוּבּ צוֹנפִֿיג פִֿילע" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "וֹוּתפּוּת גענעראתעד צוֹנפִֿיג תוֹ פִֿילע [דעפֿאוּלת=שתדוֹוּת]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "וּנרעצוֹגנִיזעד וֹפּתִיוֹנ `%s'\\× " + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: יִוֹוּ מוּשת רוּנ תהִיש אש רוֹוֹת\\× " + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: נוֹת פֿוֹוּנד.\\× " + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "גענעראתִינג גרוּבּ צוֹנפִֿיגוּראתִיוֹנ פִֿילע ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"שיִנתאכּס עררוֹרש ארע דעתעצתעד ִינ גענעראתעד גרוּבּ צוֹנפִֿיג פִֿילע.\n" +"ענשוּרע תהאת תהערע ארע נוֹ עררוֹרש ִינ /עתצ/דעפֿאוּלת/גרוּבּ\n" +"אנד /עתצ/גרוּבּ.ד/* פִֿילעש וֹר פּלעאשע פִֿילע א בּוּג רעפּוֹרת וִיתה\n" +"%s פִֿילע אתתאצהעד." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "דוֹנע" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "וארנִינג:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "וּשאגע: %s [וֹפּתִיוֹנ] מענוּ_ענתריִ\\× " + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "שעת תהע דעפֿאוּלת בּוֹוֹת מענוּ ענתריִ פֿוֹר גרוּבּ, פֿוֹר תהע נעכּסת בּוֹוֹת וֹנליִ." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"עכּספּעצת גרוּבּ ִימאגעש וּנדער תהע דִירעצתוֹריִ דִיר/%s ִינשתעאד וֹפֿ תהע %s דִירעצתוֹריִ" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"מענוּ_ענתריִ ִיש א נוּמבּער, א מענוּ ִיתעמ תִיתלע וֹר א מענוּ ִיתעמ ִידענתִיפִֿיער. פּלעאשע " +"נוֹתע תהאת מענוּ ִיתעמש ִינ\n" +"שוּבּמענוּש וֹר שוּבּ-שוּבּמענוּש רעקוִּירע שפּעצִיפֿיִִינג תהע שוּבּמענוּ צוֹמפּוֹנענתש אנד תהענ " +"תהע\n" +"מענוּ ִיתעמ צוֹמפּוֹנענת. תהע תִיתלעש שהוֹוּלד בּע שעפּאראתעד וּשִינג תהע גרעאתער-תהאנ\n" +"צהאראצתער (>) וִיתה נוֹ עכּסתרא שפּאצעש. דעפּענדִינג וֹנ יִוֹוּר שהעלל שוֹמע צהאראצתערש Ö´" +"ינצלוּדִינג > מאיִ נעעד עשצאפִּינג. מוֹרע ִינפֿוֹרמאתִיוֹנ אבּוֹוּת תהִיש ִיש אבֿאִילאבּלע\n" +"ִינ תהע גרוּבּ מאנוּאל ִינ תהע שעצתִיוֹנ אבּוֹוּת תהע 'דעפֿאוּלת' צוֹממאנד. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "מוֹרע תהאנ וֹנע מענוּ ענתריִ?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "מענוּ ענתריִ נוֹת שפּעצִיפִֿיעד." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "שעת תהע דעפֿאוּלת בּוֹוֹת מענוּ ענתריִ פֿוֹר גרוּבּ." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "תהִיש רעקוִּירעש שעתתִינג גרוּבּ_דעפֿאוּלת=שאבֿעד ִינ %s/דעפֿאוּלת/גרוּבּ.\\× " + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "מענוּ_ענתריִ ִיש א נוּמבּער, א מענוּ ִיתעמ תִיתלע וֹר א מענוּ ִיתעמ ִידענתִיפִֿיער." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"רעקוּעשתעד שערִיאל תערמִינאל בּוּת גרוּבּ_שערִיאל_צוֹממאנד ִיש וּנשפּעצִיפִֿיעד. דעפֿאוּלת " +"פּאראמעתערש וִילל בּע וּשעד." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "פֿוֹוּנד תהעמע: %s\\× " + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "פֿוֹוּנד בּאצכּגרוֹוּנד: %s\\× " + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "וּנשוּפּפּוֹרתעד ִימאגע פֿוֹרמאת" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"שעתתִינג גרוּבּ_תִימעוֹוּת תוֹ א נוֹנ-זערוֹ בֿאלוּע והענ גרוּבּ_הִידדענ_תִימעוֹוּת ִיש שעת ִיש " +"נוֹ לוֹנגער שוּפּפּוֹרתעד." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "פֿוֹוּנד גנוּ מאצה: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "פֿוֹוּנד הוּרד מוֹדוּלע: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "שוֹמע הוּרד שתוּפֿפֿ פֿוֹוּנד, בּוּת נוֹת ענוֹוּגה תוֹ בּוֹוֹת." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, וִיתה הוּרד %s (רעצוֹבֿעריִ מוֹדע)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, וִיתה הוּרד %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"פּלעאשע דוֹנ'ת וּשע וֹלד תִיתלע `%s' פֿוֹר גרוּבּ_דעפֿאוּלת, וּשע `%s' (פֿוֹר בֿערשִיוֹנש " +"בּעפֿוֹרע 2.00) וֹר `%s' (פֿוֹר 2.00 וֹר לאתער)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "לוֹאדִינג גנוּ מאצה ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "לוֹאדִינג תהע הוּרד ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "אדבֿאנצעד וֹפּתִיוֹנש פֿוֹר %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "לוֹאדִינג כּערנעל וֹפֿ ִיללוּמוֹש ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, וִיתה כּפֿרעעבּשד %s (רעצוֹבֿעריִ מוֹדע)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, וִיתה כּפֿרעעבּשד %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "לוֹאדִינג כּערנעל וֹפֿ פֿרעעבּשד %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "פֿוֹוּנד כּערנעל וֹפֿ פֿרעעבּשד: %s\\× " + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "פֿוֹוּנד כּערנעל מוֹדוּלע דִירעצתוֹריִ: %s\\× " + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, וִיתה לִינוּכּס %s (רעצוֹבֿעריִ מוֹדע)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, וִיתה לִינוּכּס %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "לוֹאדִינג לִינוּכּס %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "לוֹאדִינג ִינִיתִיאל ראמדִישכּ ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "פֿוֹוּנד לִינוּכּס ִימאגע: %s\\× " + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "פֿוֹוּנד ִינִיתרד ִימאגע: %s\\× " + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, וִיתה כּערנעל %s (בִֿיא %s, רעצוֹבֿעריִ מוֹדע)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, וִיתה כּערנעל %s (בִֿיא %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "פֿוֹוּנד נעתבּשד כּערנעל: %s\\× " + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "וִינדוֹוש בִֿישתא/7 (לוֹאדער)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "וִינדוֹוש נת/2000/כּספּ (לוֹאדער)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "פֿוֹוּנד %s וֹנ %s (%s)\\× " + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-בִּית)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-בִּית)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(וֹנ %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, וִיתה כּסענ %s אנד לִינוּכּס %s (רעצוֹבֿעריִ מוֹדע)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, וִיתה כּסענ %s אנד לִינוּכּס %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, וִיתה כּסענ היִפּערבִֿישוֹר" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "לוֹאדִינג כּסענ %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "כּסענ היִפּערבִֿישוֹר, בֿערשִיוֹנ %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "אדבֿאנצעד וֹפּתִיוֹנש פֿוֹר %s (וִיתה כּסענ היִפּערבִֿישוֹר)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "פֿוֹוּנד %s וֹנ %s\\× " + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s ִיש נוֹת יִעת שוּפּפּוֹרתעד בּיִ גרוּבּ-מכּצוֹנפִֿיג.\\× " diff --git a/po/en@piglatin.gmo b/po/en@piglatin.gmo new file mode 100644 index 0000000000000000000000000000000000000000..71d1ef62d61187b4768cc32f9ca5a47f6d29d333 GIT binary patch literal 136462 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Ðy$BiZG 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 $y!#`tS&~NOYlM0M0B@C{xJJ@b?Y-D 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 literal 0 HcmV?d00001 diff --git a/po/en@piglatin.header b/po/en@piglatin.header new file mode 100644 index 000000000..0da96543e --- /dev/null +++ b/po/en@piglatin.header @@ -0,0 +1,4 @@ +# This catalog in addition to fixing quoting like en@quot translates the +# messages into Pig Latin. Can be useful for testing that all strings are +# marked even before any translation is available or without knowing any +# specific language besides English. diff --git a/po/en@piglatin.po b/po/en@piglatin.po new file mode 100644 index 000000000..af8b088fe --- /dev/null +++ b/po/en@piglatin.po @@ -0,0 +1,6953 @@ +# English translations for grub package. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Automatically generated, 2017. +# +# This catalog in addition to fixing quoting like en@quot translates the +# messages into Pig Latin. Can be useful for testing that all strings are +# marked even before any translation is available or without knowing any +# specific language besides English. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-04-25 16:28+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en@piglatin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "unsupportedway erialsay ortpay eedspay" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "unsupportedway erialsay ortpay aritypay" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "unsupportedway erialsay ortpay opstay itsbay umbernay" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "unsupportedway erialsay ortpay ordway engthlay" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"onDay'tay oadlay osthay ablestay ecifiedspay ybay ommacay-eparatedsay istlay." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "oadLay onlyway ablestay ecifiedspay ybay ommacay-eparatedsay istlay." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Exportway ersionvay 1 ablestay otay ethay OSway." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Exportway ersionvay 2 andway ersionvay 3 ablestay otay ethay OSway." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "etSay OEMIDway ofway RSDPay, XSDTay andway RSDTay." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "etSay OEMTABLEway IDway ofway RSDPay, XSDTay andway RSDTay." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "etSay OEMTABLEway evisionray ofway RSDPay, XSDTay andway RSDTay." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "etSay eatorcray ieldfay ofway RSDPay, XSDTay andway RSDTay." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "etSay eatorcray evisionray ofway RSDPay, XSDTay andway RSDTay." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"onDay'tay updateway EBDAway. ayMay ixfay ailuresfay orway angshay onway " +"omesay IOSesBay utbay akesmay itway ineffectiveway ithway OSway otnay " +"eceivingray RSDPay omfray UBGRay." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "ematurepray endway ofway ilefay %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--excludeway=ABLETay1,ABLETay2|--oadlay-onlyway=ABLETay1,ABLETay2] " +"ILEFay1 [ILEFay2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"oadLay osthay ACPIway ablestay andway ablestay ecifiedspay ybay argumentsway." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "errorway: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "outway ofway emorymay" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "annotcay eadray ‘%s’: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPIway utdownshay ailedfay" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "istLay evicesday." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "ilenamefay expectedway" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ILEFay" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "intPray away ockblay istlay." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "you eednay otay oadlay ethay ernelkay irstfay" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "ootBay anway operatingway ystemsay." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "oNay ootbay imetay atisticsstay isway availableway\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "owShay ootbay imetay atisticsstay." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"iskDay achecay atisticsstay: itshay = %lu (%lu.%02lu%%), issesmay = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "oNay iskday achecay atisticsstay availableway\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "etGay iskday achecay infoway." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Acceptway OSDay-ylestay CRay/NLay inelay endingsway." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "owShay ethay ontentscay ofway away ilefay." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "otway argumentsway expectedway" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "ompareCay ilefay ‘%s’ ithway ‘%s’:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "ilesFay ifferday inway izesay: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "ilesFay ifferday atway ethay offsetway %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "eThay ilesfay areway identicalway.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ILEFay1 ILEFay2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "ompareCay otway ilesfay." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "oadLay anotherway onfigcay ilefay." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "oadLay anotherway onfigcay ilefay ithoutway angingchay ontextcay." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"oadLay anotherway onfigcay ilefay ithoutway angingchay ontextcay utbay " +"aketay onlyway enumay entriesway." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "" +"oadLay anotherway onfigcay ilefay utbay aketay onlyway enumay entriesway." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[year-]onthmay-ayday] [ourhay:inutemay[:econdsay]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "isplayDay/etsay urrentcay atetimeday." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "oDay otnay outputway ethay ailingtray ewlinenay." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Enableway interpretationway ofway ackslashbay escapesway." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-eway|-nay] INGSTRay" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "isplayDay away inelay ofway exttay." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "ebootRay intoway irmwarefay etupsay enumay." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "ixFay ideovay oblempray." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "OMRay imageway isway esentpray." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "anCay'tay enableway OMRay areaway." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"eateCray IOSBay-ikelay ucturesstray orfay ackwardbay ompatibilitycay ithway " +"existingway OSway." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "IOSBay_UMPDay [INTway10_UMPDay]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "oadLay IOSBay umpday." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "INGSTRay ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Evaluateway argumentsway asway UBGRay ommandscay" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"eckChay ifway ILEFay ancay ebay ootedbay asway iway386 AEPay enXay " +"unprivilegedway uestgay ernelkay" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"eckChay ifway ILEFay ancay ebay ootedbay asway xay86_64 enXay " +"unprivilegedway uestgay ernelkay" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"eckChay ifway ILEFay ancay ebay usedway asway enXay xay86 ivilegedpray " +"uestgay ernelkay" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" +"eckChay ifway ILEFay ancay ebay usedway asway xay86 ultibootmay ernelkay" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" +"eckChay ifway ILEFay ancay ebay usedway asway xay86 ultibootmay2 ernelkay" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "eckChay ifway ILEFay isway ARMway inuxLay" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "eckChay ifway ILEFay isway ARMway64 inuxLay" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "eckChay ifway ILEFay isway IAway64 inuxLay" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "eckChay ifway ILEFay isway IPSMay inuxLay" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "eckChay ifway ILEFay isway IPSELMay inuxLay" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "eckChay ifway ILEFay isway ARCSPay64 inuxLay" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "eckChay ifway ILEFay isway OWERPCPay inuxLay" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "eckChay ifway ILEFay isway xay86 inuxLay" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" +"eckChay ifway ILEFay isway xay86 inuxLay upportingsay 32-itbay otocolpray" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "eckChay ifway ILEFay isway xay86 eeBSDkFray" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "eckChay ifway ILEFay isway iway386 eeBSDkFray" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "eckChay ifway ILEFay isway xay86_64 eeBSDkFray" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "eckChay ifway ILEFay isway xay86 etBSDkNay" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "eckChay ifway ILEFay isway iway386 etBSDkNay" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "eckChay ifway ILEFay isway xay86_64 etBSDkNay" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "eckChay ifway ILEFay isway iway386 EFIway ilefay" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "eckChay ifway ILEFay isway xay86_64 EFIway ilefay" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "eckChay ifway ILEFay isway IAway64 EFIway ilefay" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "eckChay ifway ILEFay isway ARMway64 EFIway ilefay" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "eckChay ifway ILEFay isway ARMway EFIway ilefay" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "eckChay ifway ILEFay isway iberfilhay.yssay inway ibernatedhay atestay" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "eckChay ifway ILEFay isway xay86_64 UXNay (acMay OSway Xay ernelkay)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "eckChay ifway ILEFay isway iway386 UXNay (acMay OSway Xay ernelkay)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"eckChay ifway ILEFay isway UXNay (acMay OSway Xay ernelkay) ibernatedhay " +"imageway" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "eckChay ifway ILEFay isway IOSBay ootsectorbay" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "alsefay" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPTIONSway ILEFay" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "eckChay ifway ILEFay isway ofway ecifiedspay ypetay." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "onay uchsay artitionpay" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "ewNay MBRay isway ittenwray otay ‘%s’\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "EVICEDay [ARTITIONPay[+/-[YPETay]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"illFay ybridhay MBRay ofway GPTay ivedray EVICEDay. ecifiedSpay artitionspay " +"illway ebay away artpay ofway ybridhay MBRay. Upway otay 3 artitionspay " +"areway allowedway. YPETay isway anway MBRay ypetay. + eansmay atthay " +"artitionpay isway activeway. Onlyway oneway artitionpay ancay ebay activeway." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"altsHay ethay omputercay. isThay ommandcay oesday otnay orkway onway allway " +"irmwarefay implementationsway." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "ecifySpay ashhay otay useway." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "ASHHay" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "eckChay asheshay ofway ilesfay ithway ashhay istlay ILEFay." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "aseBay irectoryday orfay ashhay istlay." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "IRDay" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "onDay'tay opstay afterway irstfay errorway." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Uncompressway ilefay eforebay ecksummingchay." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: EADRay ERRORway\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: ASHHay ISMATCHMay\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OKway\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-hay ASHHay [-cay ILEFay [-pay EFIXPRay]] [ILEFay1 [ILEFay2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "omputeCay orway eckchay ashhay ecksumchay." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-cay ILEFay [-pay EFIXPRay]] [ILEFay1 [ILEFay2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"etSay Advancedway owerPay anagementMay\n" +"(1=owlay, ..., 254=ighhay, 255=offway)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "isplayDay owerpay odemay." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "eezeFray ATAway ecuritysay ettingssay untilway esetray." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "isplayDay ARTSMay ealthhay atusstay." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"etSay Automaticway Acousticway anagementMay\n" +"(0=offway, 128=uietqay, ..., 254=astfay)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"etSay andbystay imeouttay\n" +"(0=offway, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "etSay ivedray otay andbystay odemay." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "etSay ivedray otay eepslay odemay." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "intPray ivedray identityway andway ettingssay." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "owShay awray ontentscay ofway ATAway IDENTIFYway ectorsay." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "isableDay/enableway ARTSMay (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "oDay otnay intpray essagesmay." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "oneway argumentway expectedway" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIONSway] ISKDay" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "etGay/etsay ATAway iskday arameterspay." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Usageway:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ATTERNPay ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "owShay away elphay essagemay." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "ipSkay offsetway ytesbay omfray ethay eginningbay ofway ilefay." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "eadRay onlyway ENGTHLay ytesbay." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIONSway] ILEFay_ORway_EVICEDay" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "owShay awray ontentscay ofway away ilefay orway emorymay." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "owShay awray umpday ofway ethay OSCMay ontentscay." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "YTEBay:ITBay" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "estTay itbay atway YTEBay:ITBay inway OSCMay." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "earClay itbay atway YTEBay:ITBay inway OSCMay." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "etSay itbay atway YTEBay:ITBay inway OSCMay." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "owShay orebootcay ootbay imetay atisticsstay." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "istLay orebootcay ablestay." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "eckChay ifway UCPay upportssay 64-itbay (onglay) odemay (efaultday)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "eckChay ifway UCPay upportssay ysicalPhay Addressway Extensionway." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "eckChay orfay UCPay eaturesfay." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "owShay ethay urrentcay appingsmay." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "esetRay allway appingsmay otay ethay efaultday aluesvay." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "erformPay othbay irectday andway everseray appingsmay." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "oNay ivesdray avehay eenbay emappedray" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OSway iskday #umnay ------> UBGRay/IOSBay eviceday" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-lay | -ray | [-say] ubdevgray osdiskway." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "anageMay ethay IOSBay ivedray appingsmay." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "oDay otnay useway APMway otay althay ethay omputercay." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "altHay ethay ystemsay, ifway ossiblepay usingway APMway." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "onay APMway oundfay" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"ersionVay %u.%u\n" +"32-itbay CSay = 0x%x, enlay = 0x%x, offsetway = 0x%x\n" +"16-itbay CSay = 0x%x, enlay = 0x%x\n" +"DSay = 0x%x, enlay = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-itbay otectedpray interfaceway upportedsay\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-itbay otectedpray interfaceway unsupportedway\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-itbay otectedpray interfaceway upportedsay\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-itbay otectedpray interfaceway unsupportedway\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "UCPay Idleway owsslay ownday ocessorpray\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "UCPay Idleway oesnday'tay owslay ownday ocessorpray\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APMway isabledday\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APMway enabledway\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APMway isengagedday\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APMway engagedway\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "owShay APMway informationway." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "ilenamefay orway empotay andway otesnay expectedway" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Invalidway empotay inway %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "ilefay ‘%s’ otnay oundfay" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "unrecognizedway umbernay" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "ILEFay | EMPOTay [ITCHPay1 URATIONDay1] [ITCHPay2 URATIONDay2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "ayPlay away unetay." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "etsay umlocknay odemay" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "etsay apslockcay odemay" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "etsay olllockscray odemay" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "etsay insertway odemay" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "etsay ausepay odemay" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "esspray eftlay iftshay" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "esspray ightray iftshay" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "esspray ysRqSay" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "esspray umLockNay eykay" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "esspray apsLockCay eykay" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "esspray ollLockScray eykay" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "esspray Insertway eykay" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "esspray eftlay altway" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "esspray ightray altway" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "esspray eftlay ctrlay" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "esspray ightray ctrlay" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "onday'tay updateway EDLay atestay" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[EYSTROKEKay1] [EYSTROKEKay2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emulateway away eystrokekay equencesay" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "unRay ‘ogay’ otay esumeray UBGRay." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "eturnRay otay IEEEway1275 omptpray." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "aveSay eadray aluevay intoway ariablevay ARNAMEVay." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "ARNAMEVay" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "ORTPay" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "eadRay 8-itbay aluevay omfray ORTPay." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "eadRay 16-itbay aluevay omfray ORTPay." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "eadRay 32-itbay aluevay omfray ORTPay." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ORTPay ALUEVay [ASKMay]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "iteWray 8-itbay ALUEVay otay ORTPay." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "iteWray 16-itbay ALUEVay otay ORTPay." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDRway ALUEVay [ASKMay]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "iteWray 32-itbay ALUEVay otay ORTPay." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "ariablevay ‘%s’ isnway'tay etsay" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "oadLay away eyboardkay ayoutlay." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "eckChay iftShay eykay." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "eckChay ontrolCay eykay." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "eckChay Altway eykay." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "eckChay eykay odifiermay atusstay." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "ancay'tay indfay ommandcay ‘%s’" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Enterway asswordpay: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "arsePay egacylay onfigcay inway amesay ontextcay" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "arsePay egacylay onfigcay inway ewnay ontextcay" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"arsePay egacylay onfigcay inway amesay ontextcay akingtay onlyway enumay " +"entriesway" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"arsePay egacylay onfigcay inway ewnay ontextcay akingtay onlyway enumay " +"entriesway" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--onay-emmay-optionway] [--ypetay=YPETay] ILEFay [ARGway ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "imulateSay ubgray-egacylay ‘ernelkay’ ommandcay" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ILEFay [ARGway ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "imulateSay ubgray-egacylay ‘initrdway’ ommandcay" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "imulateSay ubgray-egacylay ‘odulenounzipmay’ ommandcay" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--mday5] ASSWDPay [ILEFay]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "imulateSay ubgray-egacylay ‘asswordpay’ ommandcay" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" +"imulateSay ubgray-egacylay ‘asswordpay’ ommandcay inway enumay entryway " +"odemay" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "ecifySpay ilenamefay." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "ipSkay ignaturesay-eckingchay ofway ethay environmentway ilefay." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "" +"[-fay ILEFay] [-say|--ipskay-igsay] [ariablevay_amenay_otay_itelistwhay] " +"[...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "oadLay ariablesvay omfray environmentway ockblay ilefay." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-fay ILEFay]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "istLay ariablesvay omfray environmentway ockblay ilefay." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-fay ILEFay] ariablevay_amenay [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "aveSay ariablesvay otay environmentway ockblay ilefay." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "owShay away onglay istlay ithway oremay etailedday informationway." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "intPray izessay inway away umanhay eadableray ormatfay." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "istLay allway ilesfay." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "etworkNay otocolspray:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-lay|-hay|-away] [ILEFay ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "istLay evicesday andway ilesfay." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "owShay ersionvay 1 ablestay onlyway." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "owShay ersionvay 2 andway ersionvay 3 ablestay onlyway." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "owShay ACPIway informationway." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "availableway AMRay" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "eservedray AMRay" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPIway eclaimableray AMRay" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPIway onnay-olatilevay oragestay AMRay" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "aultyfay AMRay (adRAMBay)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "ersistentpay AMRay" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "ersistentpay AMRay (egacylay)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "AMRay oldinghay orebootcay ablestay" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "AMRay oldinghay irmwarefay odecay" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "asebay_addrway = 0x%llx, engthlay = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "asebay_addrway = 0x%llx, engthlay = 0x%llx, ypetay = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "istLay emorymay apmay ovidedpray ybay irmwarefay." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "istLay IPCay evicesday." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" +"essBlay ILEFay ofway HFSay orway HFSay+ artitionpay orfay intelway acsmay." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "essBlay IRDay ofway HFSay orway HFSay+ artitionpay orfay PPCay acsmay." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDRway" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "eadRay 8-itbay aluevay omfray ADDRway." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "eadRay 16-itbay aluevay omfray ADDRway." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "eadRay 32-itbay aluevay omfray ADDRway." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "iteWray 8-itbay ALUEVay otay ADDRway." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "iteWray 16-itbay ALUEVay otay ADDRway." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "iteWray 32-itbay ALUEVay otay ADDRway." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "enuMay entryway ypetay." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "INGSTRay" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "istLay ofway usersway allowedway otay ootbay isthay entryway." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "USERNAMEway[,USERNAMEway]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "eyboardKay eykay otay uicklyqay ootbay isthay entryway." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "EYBOARDKay_EYKay" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Useway INGSTRay asway enumay entryway odybay." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "enuMay entryway identifierway." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "isThay entryway ancay ebay ootedbay ybay anyway userway." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "OCKBLay" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "efineDay away enumay entryway." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "efineDay away ubmenusay." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "ameNay\tefRay ountCay\tependenciesDay\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "owShay isthay essagemay." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADDRway [IZESay]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "owShay emorymay ontentscay." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "ODULEMay" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "emoveRay away odulemay." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "owShay oadedlay odulesmay." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Exitway omfray UBGRay." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "oNay CSay5536 oundfay" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CSay5536 atway %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"ystemSay anagementmay usbay ontrollercay Iway/Oway acespay isway atway 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "AMRay otslay umbernay %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "ittenWray SPDay ytesbay: %d Bay.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "otalTay ashflay izesay: %d Bay.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "emoryMay ypetay: DDRay2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "artPay onay: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "emoryMay ypetay: Unknownway." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "intPray emoryMay informationway." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s oesday otnay upportsay UUIDsway" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[ODULEMay1 ODULEMay2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"itchSway otay ativenay iskday iversdray. Ifway onay odulesmay areway " +"ecifiedspay efaultday etsay (atapay,ahciway,usbmsway,ohciway,uhciway," +"ehciway) isway usedway" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"erformPay OMMANDSCay onway artitionpay.\n" +"Useway ‘arttoolpay ARTITIONPay elphay’ orfay ethay istlay ofway availableway " +"ommandscay." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=ALVay" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "orrySay, onay arttoolpay isway availableway orfay %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "unknownway argumentway ‘%s’" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "ARTITIONPay OMMANDSCay" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "USERway ASSWORDPay" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"etSay userway asswordpay (aintextplay). Unrecommendedway andway insecureway." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "invalidway PBKDFay2 asswordpay" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USERway PBKDFay2_ASSWORDPay" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "etSay userway asswordpay (PBKDFay2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "electSay eviceday ybay endorvay andway eviceday IDsway." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[endorvay]:[eviceday]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "electSay eviceday ybay itsway ositionpay onway ethay usbay." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[usbay]:[otslay][.uncfay]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "issingmay ‘%c’ ymbolsay" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-say OSITIONPay] [-day EVICEDay]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "owShay awray umpday ofway ethay IPCay onfigurationcay acespay." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "etSay away ariablevay otay eturnray aluevay." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "etermineDay iverdray." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "etermineDay artitionpay apmay ypetay." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "etermineDay ilesystemfay ypetay." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "etermineDay ilesystemfay UUIDway." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "etermineDay ilesystemfay abellay." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "ilesystemfay ‘%s’ oesday otnay upportsay abelslay" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "EVICEDay" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "etrieveRay eviceday infoway." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVARway]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "etSay ariablevay ithway userway inputway." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "ebootRay ethay omputercay." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "oreStay atchedmay omponentcay UMBERNay inway ARNAMEVay." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[UMBERNay:]ARNAMEVay" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "EGEXPRay INGSTRay" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "estTay ifway EGEXPRay atchesmay INGSTRay." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "AMENay [ARIABLEVay] [INTSHay]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"earchSay evicesday ybay ilefay. Ifway ARIABLEVay isway ecifiedspay, ethay " +"irstfay eviceday oundfay isway etsay otay away ariablevay." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"earchSay evicesday ybay abellay. Ifway ARIABLEVay isway ecifiedspay, ethay " +"irstfay eviceday oundfay isway etsay otay away ariablevay." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"earchSay evicesday ybay UUIDway. Ifway ARIABLEVay isway ecifiedspay, ethay " +"irstfay eviceday oundfay isway etsay otay away ariablevay." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "earchSay evicesday ybay away ilefay." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "earchSay evicesday ybay away ilesystemfay abellay." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "earchSay evicesday ybay away ilesystemfay UUIDway." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "etSay away ariablevay otay ethay irstfay eviceday oundfay." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "oDay otnay obepray anyway oppyflay ivedray." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"irstFay ytray ethay eviceday INTHay. Ifway INTHay endsway inway ommacay, " +"alsoway ytray ubpartitionssay" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "INTHay" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"irstFay ytray ethay eviceday INTHay ifway urrentlycay unningray onway " +"IEEEway1275. Ifway INTHay endsway inway ommacay, alsoway ytray " +"ubpartitionssay" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"irstFay ytray ethay eviceday INTHay ifway urrentlycay unningray onway " +"IOSBay. Ifway INTHay endsway inway ommacay, alsoway ytray ubpartitionssay" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"irstFay ytray ethay eviceday INTHay ifway irectday ardwarehay accessway " +"isway upportedsay. Ifway INTHay endsway inway ommacay, alsoway ytray " +"ubpartitionssay" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"irstFay ytray ethay eviceday INTHay ifway urrentlycay unningray onway " +"EFIway. Ifway INTHay endsway inway ommacay, alsoway ytray ubpartitionssay" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"irstFay ytray ethay eviceday INTHay ifway urrentlycay unningray onway " +"ARCway. Ifway INTHay endsway inway ommacay, alsoway ytray ubpartitionssay" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "" +"[-fay|-lay|-uway|-say|-nay] [--inthay INTHay [--inthay INTHay] ...] AMENay" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"earchSay evicesday ybay ilefay, ilesystemfay abellay orway ilesystemfay " +"UUIDway. Ifway --etsay isway ecifiedspay, ethay irstfay eviceday oundfay " +"isway etsay otay away ariablevay. Ifway onay ariablevay amenay isway " +"ecifiedspay, ‘ootray’ isway usedway." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "egisterRay %x ofway %x:%02x.%x isway %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" +"[-say OSITIONPay] [-day EVICEDay] [-vay ARVay] EGISTERRay[=ALUEVay[:ASKMay]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "anipulateMay IPCay evicesday." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "erboseVay ountdowncay." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Allowway otay interruptway ithway ESCway." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "UMBERNay_OFway_ECONDSSay" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "aitWay orfay away ecifiedspay umbernay ofway econdssay." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "ootray irectoryday ofway ethay yslinuxsay iskday [efaultday=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"urrentcay irectoryday ofway yslinuxsay [efaultday isway arentpay irectoryday " +"ofway inputway ilefay]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "assumeway inputway isway anway isolinuxway onfigurationcay ilefay." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "assumeway inputway isway away elinuxpxay onfigurationcay ilefay." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "assumeway inputway isway away yslinuxsay onfigurationcay ilefay." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Executeway yslinuxsay onfigcay inway amesay ontextcay" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Executeway yslinuxsay onfigcay inway ewnay ontextcay" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Executeway yslinuxsay onfigcay inway amesay ontextcay akingtay onlyway " +"enumay entriesway" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Executeway yslinuxsay onfigcay inway ewnay ontextcay akingtay onlyway enumay " +"entriesway" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "onay erminaltay ecifiedspay" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "erminaltay ‘%s’ isnway'tay oundfay" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Activeway inputway erminalstay:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Availableway inputway erminalstay:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Activeway outputway erminalstay:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Availableway outputway erminalstay:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--appendway|--emoveray] [ERMINALTay1] [ERMINALTay2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "istLay orway electsay anway inputway erminaltay." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "istLay orway electsay anway outputway erminaltay." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESSIONway ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Evaluateway anway expressionway." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESSIONway" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "oadLay ethay amesay ilefay inway ultiplemay aysway." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "ecifySpay izesay orfay eachway eadray operationway" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "invalidway ockblay izesay" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "ileFay izesay: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Elapsedway imetay: %d.%03d say \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "eedSpay: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-say IZESay] ILENAMEFay" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "estTay ilefay eadray eedspay." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "onay ommandcay isway ecifiedspay" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Elapsedway imetay: %d.%03d econdssay \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "OMMANDCay [ARGSway]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "easureMay imetay usedway ybay OMMANDCay" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "anslateTray otay upperway asecay." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "anslateTray otay owerlay asecay." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPTIONSway] [ETSay1] [ETSay2] [INGSTRay]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "anslateTray ETSay1 aracterschay otay ETSay2 inway INGSTRay." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "oDay othingnay, uccessfullysay." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "oDay othingnay, unsuccessfullyway." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "estTay USBway upportsay." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "ipSkay ignaturesay-eckingchay ofway ethay ublicpay eykay ilefay." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "adbay ignaturesay" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "ublicpay eykay %08x otnay oundfay" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "odulemay ‘%s’ isnway'tay oadedlay" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-say|--ipskay-igsay] ILEFay IGNATURESay_ILEFay [UBKEYPay_ILEFay]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "erifyVay etachedday ignaturesay." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-say|--ipskay-igsay] UBKEYPay_ILEFay" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Addway UBKEYPay_ILEFay otay ustedtray eyskay." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "owShay ethay istlay ofway ustedtray eyskay." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "UBKEYPay_IDway" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "emoveRay UBKEYPay_IDway omfray ustedtray eyskay." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "extTay-onlyway " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "irectDay olorcay, askmay: %d/%d/%d/%d ospay: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "alettedPay " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "anarPlay " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "erculesHay " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "ACGay " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "onNay-ainchay 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "onochromeMay " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Unknownway ideovay odemay " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDIDway ecksumchay invalidway" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDIDway ersionvay: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " eferredPray odemay: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " oNay eferredpray odemay availableway\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "invalidway ideovay odemay ecificationspay ‘%s’" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "istLay ofway upportedsay ideovay odesmay:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "egendLay: askmay/ositionpay=edray/eengray/ueblay/eservedray" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapterway ‘%s’:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " oNay infoway availableway" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " ailedFay otay initializeway ideovay adapterway" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[WxHay[xDay]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"istLay availableway ideovay odesmay. Ifway esolutionray isway ivengay owshay " +"onlyway odesmay atchingmay itway." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxHay]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "estTay ideovay ubsystemsay inway odemay WxHay." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "estTay ideovay ubsystemsay." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[IRDay]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "istLay enXay oragestay." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-lay] UBUUIDGRay [ARNAMEVay]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"ansformTray 64-itbay UUIDway otay ormatfay uitablesay orfay UXNay. Ifway -" +"lay isway ivengay eepkay itway owercaselay asway oneday ybay idblkay." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "ailurefay eadingray ectorsay 0x%llx omfray ‘%s’" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "ailurefay itingwray ectorsay 0x%llx otay ‘%s’" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "ountMay ybay UUIDway." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "ountMay allway." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "ountMay allway olumesvay ithway ‘ootbay’ agflay etsay." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "annotcay openway ‘%s’: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "annotcay eeksay ‘%s’: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "OURCESay|-uway UUIDway|-away|-bay" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "ountMay away yptocray eviceday." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"ouldnCay'tay indfay ysicalphay olumevay ‘%s’. omeSay odulesmay aymay ebay " +"issingmay omfray orecay imageway." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "ysicalphay olumevay %s otnay oundfay" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "onay ediamay inway ‘%s’" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "ouldnCay'tay oadlay ashay256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "ouldnCay'tay oadlay ashay512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "ouldncay'tay eadray ELIway etadatamay" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "ongwray ELIway agicmay orway ersionvay" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Attemptingway otay ecryptday astermay eykay..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Enterway assphrasepay orfay %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "otSlay %d openedway\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "attemptway otay eadray orway itewray outsideway ofway iskday ‘%s’" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "annotcay itewray otay CDay-OMRay" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"ativeNay iskday iversdray areway inway useway. efusingRay otay useway " +"irmwarefay iskday interfaceway." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"your LDMay Embeddingway artitionPay isway ootay allsmay; embeddingway " +"onway'tay ebay ossiblepay" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"isthay LDMay ashay onay Embeddingway artitionPay; embeddingway onway'tay " +"ebay ossiblepay" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "eleteDay ethay ecifiedspay oopbacklay ivedray." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-day] EVICENAMEDay ILEFay." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "akeMay away irtualvay ivedray omfray away ilefay." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "elocationray 0x%x isway otnay implementedway yet" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "onay ymbolsay abletay" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "isthay ELFway ilefay isway otnay ofway ethay ightray ypetay" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "oadLay andway initializeway EFIway emulatorway." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "inalizeFay oadinglay ofway EFIway emulatorway." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Unloadway EFIway emulatorway." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "ymbolsay ‘%s’ otnay oundfay" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "oadedLay ontsfay:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "ILEFay..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "ecifySpay oneway orway oremay ontfay ilesfay otay oadlay." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "istLay ethay oadedlay ontsfay." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "ootay eepday estingnay ofway ymlinkssay" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "attemptway otay eadray astpay ethay endway ofway ilefay" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"ouldncay'tay indfay away ecessarynay embermay eviceday ofway ultimay-" +"eviceday ilesystemfay" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "otnay away irectoryday" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "otnay away egularray ilefay" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"your orecay.imgway isway unusuallyway argelay. Itway onway'tay itfay inway " +"ethay embeddingway areaway" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "invalidway ilefay amenay ‘%s’" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "ecksumchay erificationvay ailedfay" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "onay ecryptionday eykay availableway" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "ACMay erificationvay ailedfay" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Assumeway inputway isway awray." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Assumeway inputway isway exhay." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Assumeway inputway isway assphrasepay." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Enterway ZFSay asswordpay: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-hay|-pay|-ray] [ILEFay]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importway ZFSay appingwray eykay oredstay inway ILEFay." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "irtualVay eviceday isway emovedray" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "irtualVay eviceday isway aultedfay" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "irtualVay eviceday isway offlineway" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "irtualVay eviceday isway egradedday" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "irtualVay eviceday isway onlineway" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Incorrectway irtualvay eviceday: onay ypetay availableway" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "eafLay irtualvay eviceday (ilefay orway iskday)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "ootpathBay: unavailableway\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "ootpathBay: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "athPay: unavailableway" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "athPay: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "evidDay: unavailableway" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "evidDay: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "isThay EVVDay isway away irrormay" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "isThay EVVDay isway away AIDZRay%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Incorrectway EVVDay" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "EVVDay ithway %d ildrenchay\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "EVVDay elementway umbernay %d isnway'tay orrectcay\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "EVVDay elementway umbernay %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Unknownway irtualvay eviceday ypetay: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "oolPay atestay: activeway" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "oolPay atestay: exportedway" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "oolPay atestay: estroyedday" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "oolPay atestay: eservedray orfay othay arespay" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "oolPay atestay: evellay 2 ARCway eviceday" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "oolPay atestay: uninitializedway" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "oolPay atestay: unavailableway" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "oolPay atestay: otentiallypay activeway" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "oolPay amenay: unavailableway" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "oolPay amenay: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "oolPay UIDGay: unavailableway" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "oolPay UIDGay: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Unableway otay etrieveray oolpay atestay" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Unrecognizedway oolpay atestay" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "oNay irtualvay eviceday eetray availableway" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "intPray ZFSay infoway aboutway EVICEDay." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "ILESYSTEMFay [ARIABLEVay]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "intPray ZFSay-OOTFSOBJBay orway orestay itway intoway ARIABLEVay" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "owNay onnectcay ethay emoteray ebuggerday, easeplay." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "artStay GDBay ubstay onway ivengay ortpay" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "eakBray intoway GDBay" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "opStay GDBay ubstay" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "ematurepray endway ofway ilefay" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "anslatesTray ethay ingstray ithway ethay urrentcay ettingssay." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"essPray enterway otay ootbay ethay electedsay OSway, ‘eway’ otay editway " +"ethay ommandscay eforebay ootingbay orway ‘cay’ orfay away ommandcay-inelay. " +"ESCway otay eturnray eviouspray enumay." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"essPray enterway otay ootbay ethay electedsay OSway, ‘eway’ otay editway " +"ethay ommandscay eforebay ootingbay orway ‘cay’ orfay away ommandcay-inelay." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enterway: ootbay, ‘eway’: optionsway, ‘cay’: cmday-inelay" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "" +"eThay ighlightedhay entryway illway ebay executedway automaticallyway inway " +"%ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds emainingray." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "UBGRay ootBay enuMay" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" +"ARGPway_ELPHay_FMTay: %s aluevay isway esslay anthay orway equalway otay %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*say: ARGPway_ELPHay_FMTay arameterpay equiresray away aluevay" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*say: ARGPway_ELPHay_FMTay arameterpay ustmay ebay ositivepay" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*say: Unknownway ARGPway_ELPHay_FMTay arameterpay" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "arbageGay inway ARGPway_ELPHay_FMTay: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"andatoryMay orway optionalway argumentsway otay onglay optionsway areway " +"alsoway andatorymay orway optionalway orfay anyway orrespondingcay ortshay " +"optionsway." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " orway: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPTIONway...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"yTray ‘%s --elphay’ orway ‘%s --usageway’ orfay oremay informationway.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "eportRay ugsbay otay %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Unknownway ystemsay errorway" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "ivegay isthay elphay istlay" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "ivegay away ortshay usageway essagemay" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "AMENay" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "etsay ethay ogrampray amenay" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "ECSSay" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "anghay orfay ECSSay econdssay (efaultday 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "intpray ogrampray ersionvay" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(OGRAMPRay ERRORway) oNay ersionvay ownknay!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: ooTay anymay argumentsway\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(OGRAMPRay ERRORway) Optionway ouldshay avehay eenbay ecognizedray!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: optionway ‘%s’ isway ambiguousway; ossibilitiespay:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: optionway ‘--%s’ oesnday'tay allowway anway argumentway\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: optionway ‘%c%s’ oesnday'tay allowway anway argumentway\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: optionway ‘--%s’ equiresray anway argumentway\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: unrecognizedway optionway ‘--%s’\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: unrecognizedway optionway ‘%c%s’\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: invalidway optionway -- ‘%c’\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: optionway equiresray anway argumentway -- ‘%c’\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: optionway ‘-Way %s’ isway ambiguousway\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: optionway ‘-Way %s’ oesnday'tay allowway anway argumentway\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: optionway ‘-Way %s’ equiresray anway argumentway\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "uccessSay" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "oNay atchmay" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Invalidway egularray expressionway" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Invalidway ollationcay aracterchay" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Invalidway aracterchay assclay amenay" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "ailingTray ackslashbay" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Invalidway ackbay eferenceray" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Unmatchedway [ orway [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Unmatchedway ( orway \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Unmatchedway \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Invalidway ontentcay ofway \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Invalidway angeray endway" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "emoryMay exhaustedway" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Invalidway ecedingpray egularray expressionway" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "ematurePray endway ofway egularray expressionway" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "egularRay expressionway ootay igbay" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Unmatchedway ) orway \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "unknownway egexpray errorway" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "oNay eviouspray egularray expressionway" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "elloHay orldWay" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "aySay ‘elloHay orldWay’." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "attemptway otay eeksay outsideway ofway ethay ilefay" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "unsupportedway ipgzay ormatfay" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "oplzay ilefay orruptedcay" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xzay ilefay orruptedcay orway unsupportedway ockblay optionsway" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "invalidway archway-ependentday ELFway agicmay" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVARway=ALUEVay]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "etSay anway environmentway ariablevay." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVARway" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "emoveRay anway environmentway ariablevay." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARGway]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "istLay evicesday orway ilesfay." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Insertway away odulemay." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "iskday ‘%s’ otnay oundfay" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "attemptway otay eadray orway itewray outsideway ofway artitionpay" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "invalidway archway-independentway ELFway agicmay" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "eviceday ountcay exceedsway imitlay" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "annotcay itewray otay ‘%s’: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"ethay eviceday.apmay entryway ‘%s’ isway invalidway. Ignoringway itway. " +"easePlay orrectcay orway eleteday your eviceday.apmay" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"ethay ivedray amenay ‘%s’ inway eviceday.apmay isway incorrectway. Usingway " +"%s insteadway. easePlay useway ethay ormfay [hfcay]day[0-9]* (Eway.gay. " +"‘hday0’ orway ‘cday’)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "ancay'tay openway ‘%s’: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "EVICEDay_AMENay" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "etSay ootray eviceday." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "useway ILEFay asway ethay eviceday apmay [efaultday=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "useway ILEFay asway emdiskmay" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "useway UBGRay ilesfay inway ethay irectoryday IRDay [efaultday=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "intpray erbosevay essagesmay." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "aitway untilway away ebuggerday illway attachway" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Unknownway extraway argumentway ‘%s’." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "UBGRay emulatorway." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Errorway inway arsingpay ommandcay inelay argumentsway\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "unRay ‘gdbay %s %d’, andway etsay ARGSway.OLDHay otay erozay.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: arningway:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: infoway:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: errorway:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "ilefay ‘%s’ isway ootay igbay" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "unknownway ilesystemfay" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "utdownShay ailedfay" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Exitway ailedfay" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "overflowway isway etectedday" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "iscardingDay improperlyway estednay artitionpay (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Unknownway ommandcay ‘%s’.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "isplayDay isthay elphay andway exitway." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "isplayDay ethay usageway ofway isthay ommandcay andway exitway." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "issingmay andatorymay optionway orfay ‘%s’" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "ethay argumentway ‘%s’ equiresray anway integerway" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"away aluevay asway assignedway otay ethay argumentway ‘%s’ ilewhay itway " +"oesnday'tay equireray anway argumentway" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "intPray acktracebay." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "UBGRay oesnday'tay owknay owhay otay althay isthay achinemay yet!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "efaultDay erversay isway ${etnay_efaultday_erversay}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "invalidway olorcay ecificationspay ‘%s’" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "ebootRay ailedfay" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[ENGTHLay]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "exdumpHay andomray ataday." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" +"eviceday eetray ustmay ebay uppliedsay (eesay ‘evicetreeday’ ommandcay)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "invalidway Imagezay" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "invalidway eviceday eetray" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "oadLay inuxLay." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "oadLay initrdway." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "oadLay DTBay ilefay." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"ainplay imageway ernelkay otnay upportedsay - ebuildray ithway " +"ONFIGCay_(Uway)EFIway_UBSTay enabledway" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "ailedfay otay etgay FDTay" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "you eednay otay oadlay ethay enXay ypervisorHay irstfay" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "oadLay away enxay ypervisorhay." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "oadLay away enxay odulemay." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTSway]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "ootBay IOSBay-asedbay ystemsay." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "oadLay anotherway ootbay oaderlay." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "isplayDay outputway onway allway onsolescay." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Useway erialsay onsolecay." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Askway orfay ilefay amenay otay ebootray omfray." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Useway CDay-OMRay asway ootray." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Invokeway userway onfigurationcay outingray." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Enterway inway KDBay onway ootbay." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Useway GDBay emoteray ebuggerday insteadway ofway DDBay." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "isableDay allway ootbay outputway." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "aitWay orfay eypresskay afterway everyway inelay ofway outputway." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Useway ompiledcay-inway ootray eviceday." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "ootBay intoway inglesay odemay." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "ootBay ithway erbosevay essagesmay." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "onDay'tay ebootray, ustjay althay." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "angeChay onfiguredcay evicesday." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "omUNITcay[,EEDSPay]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "isableDay SMPay." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "isableDay ACPIway." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "onDay'tay isplayday ootbay iagnosticday essagesmay." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "ootBay ithway ebugday essagesmay." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "uppressSay ormalnay outputway (arningsway emainray)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADDRway|omUNITcay][,EEDSPay]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "amenay" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "ypetay" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "addrway" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "izesay" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "ootingBay inway indblay odemay" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "oadLay ernelkay ofway eeBSDFray." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "oadLay ernelkay ofway OpenBSDway." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "oadLay ernelkay ofway etBSDNay." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "oadLay eeBSDFray envway." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "oadLay eeBSDFray ernelkay odulemay." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "oadLay etBSDNay ernelkay odulemay." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "oadLay etBSDNay ernelkay odulemay (ELFway)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "oadLay eeBSDFray ernelkay odulemay (ELFway)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "oadLay OpenBSDkay amdiskray." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "oadLay anotherway orebootcay ayloadpay" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "egacyLay ‘askway’ arameterpay onay ongerlay upportedsay." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s isway eprecatedday. Useway etsay ayloadgfxpay=%s eforebay inuxlay " +"ommandcay insteadway.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s isway eprecatedday. AVGay odemay %d isnway'tay ecognizedray. Useway etsay " +"ayloadgfxpay=IDTHxHEIGHTWay[EPTHxDay] eforebay inuxlay ommandcay " +"insteadway.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--orcefay|--bpbay] ILEFay" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "ethay izesay ofway ‘%s’ isway ootay argelay" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "oadLay eeDOSFray ernelkay.yssay." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "oadLay NTLDRay orway ootMGRBay." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Overrideway uessedgay appingmay ofway anPlay9 evicesday." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "UBDEVICEGRay=ANPLay9DEVICE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "ERNELKay ARGSway" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "oadLay anPlay9 ernelkay." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "oadLay away EPXay imageway." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "oadLay uecryptTray ISOway." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrdway alreadyway oadedlay" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "oadLay odulemay." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "essPray anyway eykay otay aunchlay uxnay" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "oadLay ‘eviceday-opertiespray’ umpday." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "ouldCay otnay ocatelay AFPSWay iverdray" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "AFPSWay otocolpray asnway'tay ableway otay indfay ethay interfaceway" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "oNay AFPSWay oundfay" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "AFPSWay evisionray: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "ILEFay [ARGSway...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "isplayDay AFPSWay ersionvay." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "ARNINGWay: onay onsolecay illway ebay availableway otay OSway" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "oadLay away ultibootmay 2 ernelkay." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "oadLay away ultibootmay 2 odulemay." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "oadLay away ultibootmay ernelkay." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "oadLay away ultibootmay odulemay." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "ackgroundBay imageway odemay." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "etchstray|ormalnay" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "oadLay UXNay imageway." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "oadLay 64-itbay UXNay imageway." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "oadLay UXNay extensionway ackagepay." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "oadLay UXNay extensionway." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "IRECTORYDay [OSBundleRequiredway]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "oadLay UXNay extensionway irectoryday." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" +"oadLay UXNay amdiskray. Itway illway ebay availableway inway OSway asway " +"mday0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "oadLay away ashsplay imageway orfay UXNay." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "oadLay anway imageway ofway ibernatedhay UXNay." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADDRway1,ASKMay1[,ADDRway2,ASKMay2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "eclareDay emorymay egionsray asway aultyfay (adrambay)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "OMFRay[Kay|May|Gay] OTay[Kay|May|Gay]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "emoveRay anyway emorymay egionsray inway ecifiedspay angeray." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "ourfay argumentsway expectedway" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "unrecognisedway etworknay interfaceway ‘%s’" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "onay DHCPay infoway oundfay" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "onay DHCPay optionsway oundfay" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "onay DHCPay optionway %d oundfay" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "unrecognisedway DHCPay optionway ormatfay ecificationspay ‘%s’" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "onay etworknay ardcay oundfay" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "ouldncay'tay autoconfigureway %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[ARDCay]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "erformpay away ootpbay autoconfigurationway" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "ARVay INTERFACEway UMBERNay ESCRIPTIONDay" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"etrieveray DHCPay optionway andway avesay itway intoway ARVay. Ifway ARVay " +"isway - enthay intpray ethay aluevay." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "onay DNSay erverssay onfiguredcay" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "omainday amenay omponentcay isway ootay onglay" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "onay DNSay ecordray oundfay" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "onay DNSay eplyray eceivedray" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "onlyway ipvway4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "onlyway ipvway6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "eferpray ipvway4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "eferpray ipvway6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "invalidway argumentway" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADDRESSway ERVERDNSSay" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "erformPay away DNSay ookuplay" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "ERVERDNSSay" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Addway away DNSay erversay" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "emoveRay away DNSay erversay" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "istLay DNSay erverssay" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "ouldncay'tay endsay etworknay acketpay" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "interpretway isway otnay upportedsay" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "allocway-emmay ailedfay" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "eefray-emmay ailedfay" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "unsupportedway HTTPay esponseray" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "unsupportedway HTTPay errorway %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "imetay outway openingway ‘%s’" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "imeouttay: ouldcay otnay esolveray ardwarehay addressway" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "unresolvableway addressway %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "unrecognisedway etworknay addressway ‘%s’" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "estinationday unreachableway" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "outeray ooplay etectedday" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "addressway otnay oundfay" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "you ancay'tay eleteday isthay addressway" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Unsupportedway hway addressway ypetay %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Unsupportedway addressway ypetay %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "eethray argumentsway expectedway" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "ardcay otnay oundfay" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "emporarytay" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Unknownway addressway ypetay %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "onay erversay isway ecifiedspay" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "imeouttay eadingray ‘%s’" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "ORTNAMESHay ARDCay ADDRESSway [ADDRESSHWay]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Addway away etworknay addressway." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[ARDCay [ADDRESSHWay]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "erformPay anway IPVway6 autoconfigurationway" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "ORTNAMESHay" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "eleteDay away etworknay addressway." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "ORTNAMESHay ETNay [INTERFACEway| gway ATEWAYGay]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Addway away etworknay outeray." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "eleteDay away etworknay outeray." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "istlay etworknay outesray" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "istlay etworknay ardscay" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "istlay etworknay addressesway" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "onnectioncay efusedray" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "onnectioncay imeouttay" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Enterway usernameway: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[USERLISTway]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "eckChay etherwhay userway isway inway USERLISTway." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "ossiblePay ommandscay areway:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "ossiblePay evicesday areway:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "ossiblePay ilesfay areway:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "ossiblePay artitionspay areway:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "ossiblePay argumentsway areway:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "ossiblePay ingsthay areway:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "arningWay: yntaxsay errorway (issingmay ashslay) inway ‘%s’\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "arningWay: invalidway oregroundfay olorcay ‘%s’\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "arningWay: invalidway ackgroundbay olorcay ‘%s’\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVARway [ENVVARway] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Exportway ariablesvay." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "undaySay" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "ondayMay" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "uesdayTay" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "ednesdayWay" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "ursdayThay" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "idayFray" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "aturdaySay" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "odulemay isnway'tay oadedlay" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "UGNay UBGRay ersionvay %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESCway atway anyway imetay exitsway." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"inimalMay ASHBay-ikelay inelay editingway isway upportedsay. orFay ethay " +"irstfay ordway, ABTay istslay ossiblepay ommandcay ompletionscay. " +"Anywhereway elseway ABTay istslay ossiblepay eviceday orway ilefay " +"ompletionscay. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "ubgray>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "earClay ethay eenscray." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Enterway ormalnay odemay." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Exitway omfray ormalnay odemay." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "essPray anyway eykay otay ontinuecay..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "ootingBay ‘%s’" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "allingFay ackbay otay ‘%s’" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "ailedFay otay ootbay othbay efaultday andway allbackfay entriesway.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "ootingBay away ommandcay istlay" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"inimumMay Emacsway-ikelay eenscray editingway isway upportedsay. ABTay " +"istslay ompletionscay. essPray Ctrlay-xay orway Fay10 otay ootbay, Ctrlay-" +"cay orway Fay2 orfay away ommandcay-inelay orway ESCway otay iscardday " +"editsway andway eturnray otay ethay UBGRay enumay." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "" +"Useway ethay %C andway %C eyskay otay electsay ichwhay entryway isway " +"ighlightedhay." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "Bay" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "iBKay" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "iBMay" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "iBGay" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "iBTay" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "iBPay" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "Kay" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "May" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "Gay" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "Tay" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "Pay" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "Bay/say" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "iBKay/say" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "iBMay/say" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "iBGay/say" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "iBTay/say" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "iBPay/say" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "artitionPay %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "eviceDay %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "ilesystemFay annotcay ebay accessedway" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "ilesystemFay ypetay %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- abelLay ‘%s’" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- astLay odificationmay imetay %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "oNay ownknay ilesystemfay etectedday" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - artitionPay artstay atway %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - ectorSay izesay %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - otalTay izesay unknownway" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - otalTay izesay %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--OREMay--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "annotcay openway onfigurationcay ilefay ‘%s’: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "onay ompressioncay isway availableway orfay your atformplay" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "onay IEEEway1275 outinesray areway availableway orfay your atformplay" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "onay EFIway outinesray areway availableway orfay your atformplay" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "onay ISGay outinesray areway availableway orfay your atformplay" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "onay andomray umbernay eneratorgay isway availableway orfay your OSway" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "ailedFay otay eatecray ‘eviceday-appermay’ eetray" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "ancay'tay ountmay encryptedway olumevay ‘%s’: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "ouldncay'tay openway eomgay" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "ouldncay'tay indfay eligay onsumercay" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "ouldncay'tay etrieveray eligay UUIDway" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "ouldncay'tay indfay eomgay ‘artpay’ assclay" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "unalignedway eviceday izesay" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "attemptingway otay eadray ethay orecay imageway ‘%s’ omfray UBGRay" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "" +"attemptingway otay eadray ethay orecay imageway ‘%s’ omfray UBGRay againway" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "annotcay eadray ‘%s’ orrectlycay" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "ailedfay otay eadray ethay ectorssay ofway ethay orecay imageway" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "annotcay etgay anslatortray ommandcay inelay orfay athpay ‘%s’: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "anslatortray ommandcay inelay isway emptyway orfay athpay ‘%s’" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"anslatortray ‘%s’ orfay athpay ‘%s’ ashay everalsay onnay-optionway ordsway, " +"atway eastlay ‘%s’ andway ‘%s’" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"anslatortray ‘%s’ orfay athpay ‘%s’ isway ivengay onlyway optionsway, " +"annotcay indfay eviceday artpay" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "orageStay informationway orfay ‘%s’ oesday otnay includeway ypetay" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "‘%s’ isway otnay away ocallay iskday" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"orageStay informationway orfay ‘%s’ indicatesway eithernay away ainplay " +"artitionpay ornay away ainplay iskday" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "ancay'tay etrieveray ocklistsblay: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "ocksizeblay isway otnay ivisibleday ybay 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "invalidway erozay ocksizeblay" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "ancay'tay etrieveray ocklistsblay" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctlway AIDRay_ERSIONVay errorway: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "unsupportedway AIDRay ersionvay: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctlway ETGay_ARRAYway_INFOway errorway: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctlway ETGay_ISKDay_INFOway errorway: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Unableway otay openway eamstray omfray %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "unknownway indkay ofway AIDRay eviceday ‘%s’" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"‘obppathway’ otnay oundfay inway arentpay irsday ofway ‘%s’, onay " +"IEEEway1275 amenay iscoveryday" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "ailedfay otay etgay anonicalcay athpay ofway ‘%s’" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "unknownway eviceday ypetay %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Usageway: %s EVICEDay\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Unableway otay orkfay: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Unableway otay eatecray ipepay: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "annotcay estoreray ethay originalway irectoryday" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "annotcay atstay ‘%s’: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "annotcay akemay emporarytay ilefay: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "annotcay akemay emporarytay irectoryday: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"ouldncay'tay indfay IEEEway1275 eviceday athpay orfay %s.\n" +"You illway avehay otay etsay ‘ootbay-eviceday’ ariablevay anuallymay" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: otnay oundfay" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"‘etenvnvsay’ ailedfay. \n" +"You illway avehay otay etsay ‘ootbay-eviceday’ ariablevay anuallymay. Atway " +"ethay IEEEway1275 omptpray, ypetay:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" +"You illway avehay otay etsay ‘ystemPartitionSay’ andway ‘OSLoaderway’ " +"anuallymay." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "onay ‘/’ inway anonicalcay ilenamefay" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "ygwincay_onvcay_athpay() ailedfay" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "ouldncay'tay etrieveray andomray ataday" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Insufficientway ivilegespray otay accessway irmwarefay, assumingway IOSBay" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" +"onay EFIway outinesray areway availableway enwhay unningray inway IOSBay " +"odemay" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "unexpectedway EFIway errorway" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "ouldnCay'tay indfay away eefray ootNNNNBay otslay" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"isthay GPTay artitionpay abellay ontainscay onay IOSBay ootBay artitionPay; " +"embeddingway onway'tay ebay ossiblepay" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"your IOSBay ootBay artitionPay isway ootay allsmay; embeddingway onway'tay " +"ebay ossiblepay" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"ectorSay %llu isway alreadyway inway useway ybay aidray ontrollercay ‘%s’; " +"avoidingway itway. easePlay askway ethay anufacturermay otnay otay orestay " +"ataday inway MBRay apgay" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"ectorSay %llu isway alreadyway inway useway ybay ethay ogrampray ‘%s’; " +"avoidingway itway. isThay oftwaresay aymay ausecay ootbay orway otherway " +"oblemspray inway uturefay. easePlay askway itsway authorsway otnay otay " +"orestay ataday inway ethay ootbay acktray" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"otherway oftwaresay isway usingway ethay embeddingway areaway, andway " +"erethay isway otnay enoughway oomray orfay orecay.imgway. uchSay oftwaresay " +"isway oftenway yingtray otay orestay ataday inway away ayway atthay " +"avoidsway etectionday. eWay ecommendray you investigateway" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"isthay osmsday-ylestay artitionpay abellay ashay onay ostpay-MBRay apgay; " +"embeddingway onway'tay ebay ossiblepay" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"your embeddingway areaway isway unusuallyway allsmay. orecay.imgway " +"onway'tay itfay inway itway." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "akeMay artitionpay activeway" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "otnay away imarypray artitionpay" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "artitionPay %d isway activeway ownay. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "earedClay activeway agflay onway %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "angeChay artitionpay ypetay" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "etSay ‘iddenhay’ agflay inway artitionpay ypetay" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "ethay artitionpay ypetay 0x%x isnway'tay alidvay" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "ettingSay artitionpay ypetay otay 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "ancay'tay eakbray 0 oopslay" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "otnay inway unctionfay odybay" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "invalidway ariablevay amenay ‘%s’" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "unexpectedway endway ofway ilefay" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[UMNay]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Exitway omfray oopslay" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "ontinueCay oopslay" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "iftShay ositionalpay arameterspay." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ALUEVay]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "etSay ositionalpay arameterspay." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "eturnRay omfray away unctionfay." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-may (etchstray|ormalnay)] ILEFay" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "oadLay ackgroundbay imageway orfay activeway erminaltay." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "OLORCay" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "etSay ackgroundbay olorcay orfay activeway erminaltay." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "owShay EMCBMay onsolecay ontentcay." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "etSay ethay erialsay unitway." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "etSay ethay erialsay ortpay addressway." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "etSay ethay erialsay ortpay eedspay." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "etSay ethay erialsay ortpay ordway engthlay." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "etSay ethay erialsay ortpay aritypay." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "etSay ethay erialsay ortpay opstay itsbay." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "etSay ethay asebay equencyfray." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Enableway/isableday RTSay/CTSay." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "erialsay ortpay ‘%s’ isnway'tay oundfay" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "unsupportedway erialsay ortpay owflay ontrolcay" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIONSway...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "onfigureCay erialsay ortpay." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "unknownway erminfotay ypetay ‘%s’" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCIIway" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTFway-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "isuallyvay-orderedway UTFway-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Unknownway encodingway" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "urrentCay erminfotay ypestay:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "erminalTay isway ASCIIway-onlyway [efaultday]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "erminalTay isway ogicallay-orderedway UTFway-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "erminalTay isway isuallyvay-orderedway UTFway-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "erminalTay ashay ecifiedspay eometrygay." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "IDTHxHEIGHTWay." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "incorrectway erminaltay imensionsday ecificationspay" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" +"erminaltay %s isnway'tay oundfay orway itway'say otnay andledhay ybay " +"erminfotay" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-away|-uway|-vay] [-gay WxHay] ERMTay [YPETay]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "etSay erminfotay ypetay ofway ERMTay otay YPETay.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "intPray andway executeway ockblay argumentway." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "itmapbay ilefay ‘%s’ isway ofway unsupportedway ormatfay" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " EVBay infoway: ersionvay: %d.%d OEMway oftwaresay evray: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " otaltay emorymay: %d iBKay\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "onay uitablesay ideovay odemay oundfay" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "accessway eniedday" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "ODULESMay" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "epray-oadlay ecifiedspay odulesmay ODULESMay" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" +"installway onlyway ODULESMay andway eirthay ependenciesday [efaultday=allway]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "EMESTHay" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "installway EMESTHay [efaultday=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "ONTSFay" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "installway ONTSFay [efaultday=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "OCALESLay" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "installway onlyway OCALESLay [efaultday=allway]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "ompresscay UBGRay ilesfay [optionalway]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "oosechay ethay ompressioncay otay useway orfay orecay imageway" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" +"useway imagesway andway odulesmay underway IRDay [efaultday=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "useway anslationstray underway IRDay [efaultday=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "useway emesthay underway IRDay [efaultday=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "embedway ILEFay asway ublicpay eykay orfay ignaturesay eckingchay" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "annotcay enameray ethay ilefay %s otay %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" +"iskday oesday otnay existway, osay allingfay ackbay otay artitionpay " +"eviceday %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "ommandsCay:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "eateCray away ankblay environmentway ockblay ilefay." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "istLay ethay urrentcay ariablesvay." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "etsay [AMENay=ALUEVay ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "etSay ariablesvay." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unsetway [AMENay ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "eleteDay ariablesvay." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Optionsway:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "You eednay otay ecifyspay atway eastlay oneway ommandcay.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "ILENAMEFay OMMANDCay" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "oolTay otay editway environmentway ockblay." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Ifway ILENAMEFay isway ‘-’, ethay efaultday aluevay %s isway usedway.\n" +"\n" +"ereThay isway onay ‘eleteday’ ommandcay; ifway you antway otay eleteday " +"ethay olewhay environmentway\n" +"ockblay, useway ‘rmay %s’." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "invalidway environmentway ockblay" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "invalidway arameterpay %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "environmentway ockblay ootay allsmay" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "iskday eadray ailsfay atway offsetway %lld, engthlay %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "invalidway ipskay aluevay %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "eadray errorway atway offsetway %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "annotcay openway OSway ilefay ‘%s’: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "annotcay itewray otay ethay outstday: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "omparecay ailfay atway offsetway %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "OSway ilefay %s openway errorway: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "‘oopbacklay’ ommandcay ailsfay: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "‘yptomountcray’ ommandcay ailsfay: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "ouldncay'tay etrieveray UUIDway" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "lsay ATHPay" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "istLay ilesfay inway ATHPay." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cpay ILEFay OCALLay" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "opyCay ILEFay otay ocallay ilefay OCALLay." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "atcay ILEFay" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "opyCay ILEFay otay andardstay outputway." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmpay ILEFay OCALLay" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "ompareCay ILEFay ithway ocallay ilefay OCALLay." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "exhay ILEFay" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "owShay ontentscay ofway ILEFay inway exhay." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crcay ILEFay" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "etGay crcay32 ecksumchay ofway ILEFay." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "ocklistblay ILEFay" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "isplayDay ocklistblay ofway ILEFay." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "uxnay_uuidway EVICEDay" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "omputeCay UXNay UUIDway ofway ethay eviceday." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "UMNay" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "ipSkay Nay ytesbay omfray outputway ilefay." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "andleHay Nay ytesbay inway outputway ilefay." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "ecifySpay ethay umbernay ofway inputway ilesfay." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "etSay ebugday environmentway ariablevay." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "ountMay yptocray evicesday." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "ILEFay|omptpray" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "oadLay zfsay yptocray eykay." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Uncompressway ataday." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Invalidway iskday ountcay.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "iskDay ountcay ustmay ecedepray isksday istlay.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "oNay ommandcay isway ecifiedspay.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "otNay enoughway arameterspay otay ommandcay.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Invalidway ommandcay %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGEway_ATHPay OMMANDSCay" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "ebugDay ooltay orfay ilesystemfay iverdray." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "etsay inputway ilenamefay orfay 32-itbay artpay." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "etsay inputway ilenamefay orfay 64-itbay artpay." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "etsay outputway ilenamefay. efaultDay isway OUTSTDay" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPTIONSway]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" +"ueGlay 32-itbay andway 64-itbay inarybay intoway Appleway universalway " +"oneway." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "issingMay inputway ilefay\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "annotcay opycay ‘%s’ otay ‘%s’: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "ancay'tay ompresscay ‘%s’ otay ‘%s’" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "annotcay openway irectoryday ‘%s’: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "annotcay eleteday ‘%s’: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "ubgray-imagemkay isway ompiledcay ithoutway XZay upportsay" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Unknownway ompressioncay ormatfay %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Unrecognizedway ompressioncay ‘%s’" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "unknownway argettay ormatfay %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "annotcay indfay ocalelay ‘%s’" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" +"%s oesnday'tay existway. easePlay ecifyspay --argettay orway --irectoryday" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "invalidway odinfomay ilefay ‘%s’" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Unknownway atformplay ‘%s-%s’" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "oreMay anthay oneway installway eviceday?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"installway UBGRay imagesway underway ethay irectoryday IRDay/%s insteadway " +"ofway ethay %s irectoryday" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ARGETTay" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"installway UBGRay orfay ARGETTay atformplay [efaultday=%s]; availableway " +"argetstay: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"akemay ethay ivedray alsoway ootablebay asway oppyflay (efaultday orfay " +"fdXay evicesday). ayMay eakbray onway omesay IOSesBay." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "eleteday eviceday apmay ifway itway alreadyway existsway" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "installway evenway ifway oblemspray areway etectedday" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "useway identifierway ilefay evenway ifway UUIDway isway availableway" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"iskday odulemay otay useway (iosdiskbay orway ativenay). isThay optionway " +"isway onlyway availableway onway IOSBay argettay." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"onday'tay updateway ethay ‘ootbay-eviceday’/‘ootBay*’ AMNVRay ariablesvay. " +"isThay optionway isway onlyway availableway onway EFIway andway IEEEway1275 " +"argetstay." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "oday otnay obepray orfay ilesystemsfay inway EVICEDay" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "oday otnay installway ootsectorbay" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"oDay otnay applyway anyway eedray-olomonsay odescay enwhay embeddingway " +"orecay.imgway. isThay optionway isway onlyway availableway onway xay86 " +"IOSBay argetstay." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"ethay installationway eviceday isway emovableray. isThay optionway isway " +"onlyway availableway onway EFIway." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "IDway" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"ethay IDway ofway ootloaderbay. isThay optionway isway onlyway availableway " +"onway EFIway andway acsMay." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "useway IRDay asway ethay EFIway ystemSay artitionPay ootray." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "useway IRDay orfay PPCay ACMay installway." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "useway ILEFay asway ontfay orfay abellay" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "useway OLORCay orfay abellay" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "useway OLORCay orfay abellay ackgroundbay" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "useway INGSTRay asway oductpray ersionvay" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPTIONway] [INSTALLway_EVICEDay]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Installway UBGRay onway your ivedray." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALLway_EVICEDay ustmay ebay ystemsay eviceday ilenamefay.\n" +"%s opiescay UBGRay imagesway intoway %s. Onway omesay atformsplay, itway " +"aymay alsoway installway UBGRay intoway ethay ootbay ectorsay." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" +"ethay ivedray %s isway efinedday ultiplemay imestay inway ethay eviceday " +"apmay %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Unableway otay etermineday your atformplay. Useway --argettay." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installingway orfay %s atformplay.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "installway eviceday isnway'tay ecifiedspay" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "annotcay indfay EFIway irectoryday" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "annotcay indfay away eviceday orfay %s (isway /evday ountedmay?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"annotcay indfay away UBGRay ivedray orfay %s. eckChay your eviceday.apmay" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s oesnday'tay ooklay ikelay anway EFIway artitionpay" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "You'evay oundfay away ugbay" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "ilesystemfay onway %s isway eithernay HFSay ornay HFSay+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"attemptway otay installway otay encryptedway iskday ithoutway yptodiskcray " +"enabledway. etSay ‘%s’ inway ilefay ‘%s’" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "anCay'tay eatecray ilefay: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"onay intshay availableway orfay your atformplay. Expectway educedray " +"erformancepay" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "OTNay UNNINGRay: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "ethay osenchay artitionpay isway otnay away ePPRay artitionpay" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "ailedfay otay opycay ubGray otay ethay ePPRay artitionpay" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"ethay ePPRay artitionpay isway otnay emptyway. Ifway you areway uresay you " +"antway otay useway itway, unray dday otay earclay itway: ‘%s’" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "EFIway ootloaderbay idway isnway'tay ecifiedspay." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "ARNINGWay: onay atformplay-ecificspay installway asway erformedpay" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installationway inishedfay. oNay errorway eportedray." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "essblay orfay xay86-asedbay acsmay" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "essblay orfay ppcay-asedbay acsmay" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "oNay athpay orway eviceday isway ecifiedspay.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppcay ATHPay|--xay86 ILEFay" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "acMay-ylestay essblay onway HFSay orway HFSay+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Usageway: %s [INFILEway [OUTFILEway]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "eetypeFray Errorway %d oadinglay yphglay 0x%x orfay Uway+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (edialmay)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (eftmostlay)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (ightmostray)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Outway ofway angeray ubstitutionsay (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Outway ofway angeray ookuplay: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Unsupportedway ubstitutionsay ypetay: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Unsupportedway ubstitutionsay ecificationspay: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Unsupportedway overagecay ecificationspay: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "ARNINGWay: unsupportedway ontfay eaturefay arameterspay: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "avesay outputway inway ILEFay [equiredray]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "electsay acefay indexway" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "OMFRay-OTay[,OMFRay-OTay]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "etsay ontfay angeray" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "etsay ontfay amilyfay amenay" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "IZESay" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "etsay ontfay izesay" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "etsay ontfay escentday" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "etsay ontfay ascentway" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "onvertcay otay oldbay ontfay" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "orcefay autohintway" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "isableday intinghay" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignoreway itmapbay ikesstray enwhay oadinglay" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "invalidway ontfay angeray" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIONSway] ONTFay_ILESFay" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "onvertCay ommoncay ontfay ilefay ormatsfay intoway PFay2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "outputway ilefay ustmay ebay ecifiedspay" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FTay_Initway_eeTypeFray ailsfay" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "ancay'tay openway ilefay %s, indexway %d: errorway %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "ancay'tay etsay %dx%d ontfay izesay: eetypeFray errorway %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "etsay efixpray irectoryday" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"embedway ILEFay asway away emdiskmay imageway\n" +"Impliesway ‘-pay (emdiskmay)/ootbay/ubgray’ andway overridesway anyway " +"efixpray uppliedsay eviouslypray, utbay ethay efixpray itselfway ancay ebay " +"overriddenway ybay aterlay optionsway" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "embedway ILEFay asway anway earlyway onfigcay" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "addway OTENay egmentsay orfay CHRPay IEEEway1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "outputway away eneratedgay imageway otay ILEFay [efaultday=outstday]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ORMATFay" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "enerategay anway imageway inway ORMATFay" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "availableway ormatsfay:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "unknownway argettay ormatfay %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPTIONway]... [ODULESMay]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "akeMay away ootablebay imageway ofway UBGRay." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "argetTay ormatfay otnay ecifiedspay (useway ethay -Oway optionway)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "efixPray otnay ecifiedspay (useway ethay -pay optionway)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"‘%s’ isway iscompiledmay: itsway artstay addressway isway 0x%llx insteadway " +"ofway 0x%llx: lday.oldgay ugbay?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "etsay inputway ilenamefay. efaultDay isway INSTDay" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Unknownway eyboardkay anscay identifierway %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Unknownway eyboardkay anscay odecay 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"ERRORway: onay alidvay eyboardkay ayoutlay oundfay. eckChay ethay inputway.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "enerateGay UBGRay eyboardkay ayoutlay omfray inuxLay onsolecay oneway." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "ootray irectoryday ofway TFTPay erversay" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "elativeray ubdirectorysay onway etworknay erversay" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"eparesPray UBGRay etworknay ootbay imagesway atway etnay_irectoryday/" +"ubdirsay assumingway etnay_irectoryday eingbay TFTPay ootray." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "unsupportedway atformplay %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"etbootNay irectoryday orfay %s eatedcray. onfigureCay your DHCPay erversay " +"otay ointpay otay %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "umberNay ofway PBKDFay2 iterationsway" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "engthLay ofway eneratedgay ashhay" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "engthLay ofway altsay" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "enerateGay PBKDFay2 asswordpay ashhay." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "ailurefay otay eadray asswordpay" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "eenterRay asswordpay: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "asswordspay onday'tay atchmay" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "ouldncay'tay etrieveray andomray ataday orfay altsay" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "yptographiccray errorway umbernay %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDFay2 ashhay ofway your asswordpay isway %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "oNay athpay isway ecifiedspay.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ATHPay" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "ansformTray away ystemsay ilenamefay intoway UBGRay oneway." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "avesay OMRay imagesway inway IRDay [optionalway]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "useway ILEFay asway orrisoxay [optionalway]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "useway INGSTRay asway oductpray amenay" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"enableway arcspay ootbay. isablesDay HFSay+, APMway, ARCSway andway ootbay " +"asway iskday imageway orfay iway386-pcay" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"enableway ARCSway (igbay-endianway ipsmay achinesmay, ostlymay ISGay) " +"ootbay. isablesDay HFSay+, APMway, arcspay64 andway ootbay asway iskday " +"imageway orfay iway386-pcay" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"akeMay UBGRay CDay-OMRay, iskday, endrivepay andway oppyflay ootablebay " +"imageway." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"eneratesGay away ootablebay CDay/USBway/oppyflay imageway. Argumentsway " +"otherway anthay optionsway otay isthay ogrampray areway assedpay otay " +"orrisoxay, andway indicateway ourcesay ilesfay, ourcesay irectoriesday, " +"orway anyway ofway ethay isofsmkay optionsway istedlay ybay ethay outputway " +"ofway ‘%s’." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Optionway -- itchessway otay ativenay orrisoxay ommandcay odemay." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"ailMay orrisoxay upportsay equestsray otay ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPTIONway] OURCESay..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "enablingway %s upportsay ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Your orrisoxay oesnday'tay upportsay ‘--ubgray2-ootbay-infoway’. omeSay " +"eaturesfay areway isabledday. easePlay useway orrisoxay 1.2.9 orway aterlay." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Your orrisoxay oesnday'tay upportsay ‘--ubgray2-ootbay-infoway’. Your orecay " +"imageway isway ootay igbay. ootBay asway iskday isway isabledday. easePlay " +"useway orrisoxay 1.2.9 orway aterlay." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"enerateGay away andalonestay imageway (ontainingcay allway odulesmay) inway " +"ethay electedsay ormatfay" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"aftGray ointpay yntaxsay (Eway.gay. /ootbay/ubgray/ubgray.cfgay=./ubgray." +"cfgay) isway acceptedway" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMAGEway1 [IMAGEway2 ...] OUNTPOINTMay" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "eednay anway imageway andway ountpointmay" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "ivengay argumentway isway away ystemsay eviceday, otnay away athpay" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" +"eparatesay itemsway inway outputway usingway ASCIIway ULNay aracterschay" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[efaultday=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "intpray ARGETTay" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "availableway argetstay:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTIONway]... [ATHPay|EVICEDay]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"obePray eviceday informationway orfay away ivengay athpay (orway eviceday, " +"ifway ethay -day optionway isway ivengay)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "eadray exttay omfray ILEFay." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "useway OLORCay orfay exttay" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "useway OLORCay orfay ackgroundbay" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "etsay ethay abellay otay enderray" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "useway ILEFay asway ontfay (PFay2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "enderRay Appleway .iskday_abellay." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "issingMay argumentsway\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ATHPay]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"ecksChay UBGRay iptscray onfigurationcay ilefay orfay yntaxsay errorsway." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "yntaxSay errorway atway inelay %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" +"iptScray ‘%s’ ontainscay onay ommandscay andway illway oday othingnay\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "useway ILEFay asway ethay ootbay imageway [efaultday=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "useway ILEFay asway ethay orecay imageway [efaultday=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "oNay eviceday isway ecifiedspay.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"etSay upway imagesway otay ootbay omfray EVICEDay.\n" +"\n" +"You ouldshay otnay ormallynay unray isthay ogrampray irectlyday. Useway " +"ubgray-installway insteadway." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "EVICEDay ustmay ebay anway OSway eviceday (eway.gay. /evday/asday)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Invalidway eviceday ‘%s’.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" +"ootray irectoryday asway itway illway ebay eensay onway untimeray " +"[efaultday=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"urrentcay irectoryday ofway yslinuxsay asway itway illway ebay eensay onway " +"untimeray [efaultday isway arentpay irectoryday ofway inputway ilefay]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "itewray outputway otay ILEFay [efaultday=outstday]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "ansformTray yslinuxsay onfigcay intoway UBGRay oneway." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "annotcay ompresscay ethay ernelkay imageway" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "unknownway ompressioncay %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "ecompressorDay isway ootay igbay" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "orecay imageway isway ootay igbay (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "ernelkay imageway isway ootay igbay (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "iskbootday.imgway izesay ustmay ebay %u ytesbay" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"artfwstay.imgway oesnday'tay atchmay ethay ownknay oodgay ersionvay. " +"oceedpray atway your ownway iskray" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "irmwarefay imageway isway ootay igbay" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "invalidway inelay ormatfay: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "" +"ethay irstfay ectorsay ofway ethay orecay ilefay isway otnay ectorsay-" +"alignedway" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" +"onnay-ectorsay-alignedway ataday isway oundfay inway ethay orecay ilefay" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "ethay ectorssay ofway ethay orecay ilefay areway ootay agmentedfray" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "ethay izesay ofway ‘%s’ isway otnay %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "ethay izesay ofway ‘%s’ isway ootay allsmay" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Attemptingway otay installway UBGRay otay away iskday ithway ultiplemay " +"artitionpay abelslay orway othbay artitionpay abellay andway ilesystemfay. " +"isThay isway otnay upportedsay yet." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"unableway otay identifyway away ilesystemfay inway %s; afetysay eckchay " +"ancay'tay ebay erformedpay" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s appearsway otay ontaincay away %s ilesystemfay ichwhay isnway'tay ownknay " +"otay eserveray acespay orfay OSDay-ylestay ootbay. Installingway UBGRay " +"erethay ouldcay esultray inway ILESYSTEMFay ESTRUCTIONDay ifway aluablevay " +"ataday isway overwrittenway ybay ubgray-etupsay (--ipskay-fsay-obepray " +"isablesday isthay eckchay, useway atway your ownway iskray)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s appearsway otay ontaincay away %s artitionpay apmay ichwhay isnway'tay " +"ownknay otay eserveray acespay orfay OSDay-ylestay ootbay. Installingway " +"UBGRay erethay ouldcay esultray inway ILESYSTEMFay ESTRUCTIONDay ifway " +"aluablevay ataday isway overwrittenway ybay ubgray-etupsay (--ipskay-fsay-" +"obepray isablesday isthay eckchay, useway atway your ownway iskray)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s appearsway otay ontaincay away %s artitionpay apmay andway LDMay ichwhay " +"isnway'tay ownknay otay ebay away afesay ombinationcay. Installingway " +"UBGRay erethay ouldcay esultray inway ILESYSTEMFay ESTRUCTIONDay ifway " +"aluablevay ataday isway overwrittenway ybay ubgray-etupsay (--ipskay-fsay-" +"obepray isablesday isthay eckchay, useway atway your ownway iskray)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Attemptingway otay installway UBGRay otay away artitionlesspay iskday orway " +"otay away artitionpay. isThay isway away ADBay ideaway." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Attemptingway otay installway UBGRay otay away iskday ithway ultiplemay " +"artitionpay abelslay. isThay isway otnay upportedsay yet." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "artitionPay ylestay ‘%s’ oesnday'tay upportsay embeddingway" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "ileFay ystemsay ‘%s’ oesnday'tay upportsay embeddingway" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Your embeddingway areaway isway unusuallyway allsmay. orecay.imgway " +"onway'tay itfay inway itway." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "onay erminatortay inway ethay orecay imageway" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "orecay.imgway ersionvay ismatchmay" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"embeddingway isway otnay ossiblepay, utbay isthay isway equiredray orfay " +"AIDRay andway LVMay installway" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "ancay'tay etermineday ilesystemfay onway %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "ilesystemfay ‘%s’ oesnday'tay upportsay ocklistsblay" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"embeddingway isway otnay ossiblepay, utbay isthay isway equiredray orfay " +"osscray-iskday installway" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Embeddingway isway otnay ossiblepay. UBGRay ancay onlyway ebay installedway " +"inway isthay etupsay ybay usingway ocklistsblay. oweverHay, ocklistsblay " +"areway UNRELIABLEway andway eirthay useway isway iscouragedday." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "illway otnay oceedpray ithway ocklistsblay" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "ocklistsblay areway invalidway" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "ocklistsblay areway incompleteway" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Usageway: %s -oway OUTPUTway APCKBMay_ARGUMENTSway...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "akeMay UBGRay eyboardkay ayoutlay ilefay." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "intpray isthay essagemay andway exitway" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "intpray ethay ersionvay informationway andway exitway" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" +"%s eneratesgay away eyboardkay ayoutlay orfay UBGRay usingway ompckbcay\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "eportRay ugsbay otay ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: optionway equiresray anway argumentway -- ‘%s’\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Usageway: %s [OPTIONway]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "enerateGay away ubgray onfigcay ilefay" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "outputway eneratedgay onfigcay otay ILEFay [efaultday=outstday]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Unrecognizedway optionway ‘%s’\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: You ustmay unray isthay asway ootray\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: otNay oundfay.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "eneratingGay ubgray onfigurationcay ilefay ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"yntaxSay errorsway areway etectedday inway eneratedgay UBGRay onfigcay " +"ilefay.\n" +"Ensureway atthay erethay areway onay errorsway inway /etcway/efaultday/" +"ubgray\n" +"andway /etcway/ubgray.day/* ilesfay orway easeplay ilefay away ugbay " +"eportray ithway\n" +"%s ilefay attachedway." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "oneday" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "arningWay:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Usageway: %s [OPTIONway] ENUMay_ENTRYway\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"etSay ethay efaultday ootbay enumay entryway orfay UBGRay, orfay ethay " +"extnay ootbay onlyway." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"expectway UBGRay imagesway underway ethay irectoryday IRDay/%s insteadway " +"ofway ethay %s irectoryday" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"ENUMay_ENTRYway isway away umbernay, away enumay itemway itletay orway away " +"enumay itemway identifierway. easePlay otenay atthay enumay itemsway inway\n" +"ubmenussay orway ubsay-ubmenussay equireray ecifyingspay ethay ubmenusay " +"omponentscay andway enthay ethay\n" +"enumay itemway omponentcay. eThay itlestay ouldshay ebay eparatedsay " +"usingway ethay eatergray-anthay\n" +"aracterchay (>) ithway onay extraway acesspay. ependingDay onway your " +"ellshay omesay aracterschay includingway > aymay eednay escapingway. oreMay " +"informationway aboutway isthay isway availableway\n" +"inway ethay UBGRay anualMay inway ethay ectionsay aboutway ethay ‘efaultday’ " +"ommandcay. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "oreMay anthay oneway enumay entryway?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "enuMay entryway otnay ecifiedspay." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "etSay ethay efaultday ootbay enumay entryway orfay UBGRay." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"isThay equiresray ettingsay UBGRay_EFAULTDay=avedsay inway %s/efaultday/" +"ubgray.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ENUMay_ENTRYway isway away umbernay, away enumay itemway itletay orway away " +"enumay itemway identifierway." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"equestedRay erialsay erminaltay utbay UBGRay_ERIALSay_OMMANDCay isway " +"unspecifiedway. efaultDay arameterspay illway ebay usedway." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "oundFay emethay: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "oundFay ackgroundbay: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Unsupportedway imageway ormatfay" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"ettingSay UBGRay_IMEOUTTay otay away onnay-erozay aluevay enwhay " +"UBGRay_IDDENHay_IMEOUTTay isway etsay isway onay ongerlay upportedsay." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "oundFay UGNay achMay: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "oundFay urdHay odulemay: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "omeSay urdHay uffstay oundfay, utbay otnay enoughway otay ootbay." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, ithway urdHay %s (ecoveryray odemay)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, ithway urdHay %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"easePlay onday'tay useway oldway itletay ‘%s’ orfay UBGRay_EFAULTDay, useway " +"‘%s’ (orfay ersionsvay eforebay 2.00) orway ‘%s’ (orfay 2.00 orway aterlay)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "oadingLay UGNay achMay ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "oadingLay ethay urdHay ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Advancedway optionsway orfay %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "oadingLay ernelkay ofway Illumosway ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, ithway eeBSDkFray %s (ecoveryray odemay)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, ithway eeBSDkFray %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "oadingLay ernelkay ofway eeBSDFray %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "oundFay ernelkay ofway eeBSDFray: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "oundFay ernelkay odulemay irectoryday: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, ithway inuxLay %s (ecoveryray odemay)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, ithway inuxLay %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "oadingLay inuxLay %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "oadingLay initialway amdiskray ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "oundFay inuxlay imageway: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "oundFay initrdway imageway: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, ithway ernelkay %s (iavay %s, ecoveryray odemay)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, ithway ernelkay %s (iavay %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "oundFay etBSDNay ernelkay: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "indowsWay istaVay/7 (oaderlay)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "indowsWay NTay/2000/XPay (oaderlay)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "oundFay %s onway %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-itbay)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-itbay)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(onway %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, ithway enXay %s andway inuxLay %s (ecoveryray odemay)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, ithway enXay %s andway inuxLay %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, ithway enXay ypervisorhay" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "oadingLay enXay %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "enXay ypervisorhay, ersionvay %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Advancedway optionsway orfay %s (ithway enXay ypervisorhay)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "oundFay %s onway %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s isway otnay yet upportedsay ybay ubgray-onfigmkcay.\\n" diff --git a/po/en@quot.gmo b/po/en@quot.gmo new file mode 100644 index 0000000000000000000000000000000000000000..b9105d95fdf6f5ddfeeb81cc3b61daa687b38304 GIT binary patch literal 120502 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 GRUB/BIOS device" +msgstr "OS disk #num ------> GRUB/BIOS device" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Manage the BIOS drive mappings." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Do not use APM to halt the computer." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Halt the system, if possible using APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "no APM found" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bit protected interface supported\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bit protected interface unsupported\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bit protected interface supported\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bit protected interface unsupported\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU Idle slows down processor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU Idle doesn't slow down processor\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM disabled\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM enabled\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM disengaged\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM engaged\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Show APM information." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "filename or tempo and notes expected" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Invalid tempo in %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "file ‘%s’ not found" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "unrecognized number" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Play a tune." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "set numlock mode" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "set capslock mode" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "set scrolllock mode" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "set insert mode" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "set pause mode" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "press left shift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "press right shift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "press SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "press NumLock key" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "press CapsLock key" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "press ScrollLock key" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "press Insert key" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "press left alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "press right alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "press left ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "press right ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "don't update LED state" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KEYSTROKE1] [KEYSTROKE2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emulate a keystroke sequence" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Run ‘go’ to resume GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Return to IEEE1275 prompt." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Save read value into variable VARNAME." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Read 8-bit value from PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Read 16-bit value from PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Read 32-bit value from PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VALUE [MASK]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Write 8-bit VALUE to PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Write 16-bit VALUE to PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VALUE [MASK]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Write 32-bit VALUE to PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "variable ‘%s’ isn't set" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Load a keyboard layout." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Check Shift key." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Check Control key." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Check Alt key." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Check key modifier status." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "can't find command ‘%s’" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Enter password: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Parse legacy config in same context" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Parse legacy config in new context" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Parse legacy config in same context taking only menu entries" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Parse legacy config in new context taking only menu entries" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simulate grub-legacy ‘kernel’ command" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simulate grub-legacy ‘initrd’ command" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simulate grub-legacy ‘modulenounzip’ command" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSWD [FILE]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simulate grub-legacy ‘password’ command" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simulate grub-legacy ‘password’ command in menu entry mode" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Specify filename." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Skip signature-checking of the environment file." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Load variables from environment block file." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FILE]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "List variables from environment block file." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FILE] variable_name [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Save variables to environment block file." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Show a long list with more detailed information." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Print sizes in a human readable format." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "List all files." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Network protocols:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FILE ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "List devices and files." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Show version 1 tables only." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Show version 2 and version 3 tables only." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Show ACPI information." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "available RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "reserved RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI reclaimable RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPI non-volatile storage RAM" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "faulty RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "persistent RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "persistent RAM (legacy)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM holding coreboot tables" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM holding firmware code" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, length = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "List memory map provided by firmware." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "List PCI devices." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Bless FILE of HFS or HFS+ partition for intel macs." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Bless DIR of HFS or HFS+ partition for PPC macs." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Read 8-bit value from ADDR." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Read 16-bit value from ADDR." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Read 32-bit value from ADDR." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Write 8-bit VALUE to ADDR." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Write 16-bit VALUE to ADDR." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Write 32-bit VALUE to ADDR." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Menu entry type." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRING" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "List of users allowed to boot this entry." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "USERNAME[,USERNAME]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Keyboard key to quickly boot this entry." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "KEYBOARD_KEY" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Use STRING as menu entry body." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Menu entry identifier." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "This entry can be booted by any user." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Define a menu entry." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Define a submenu." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Name\tRef Count\tDependencies\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Show this message." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADDR [SIZE]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Show memory contents." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULE" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Remove a module." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Show loaded modules." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Exit from GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "No CS5536 found" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 at %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "System management bus controller I/O space is at 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM slot number %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Written SPD bytes: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Total flash size: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Memory type: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Part no: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Memory type: Unknown." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Print Memory information." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s does not support UUIDs" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODULE1 MODULE2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Perform COMMANDS on partition.\n" +"Use ‘parttool PARTITION help’ for the list of available commands." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Sorry, no parttool is available for %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "unknown argument ‘%s’" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITION COMMANDS" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "USER PASSWORD" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Set user password (plaintext). Unrecommended and insecure." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "invalid PBKDF2 password" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USER PBKDF2_PASSWORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Set user password (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Select device by vendor and device IDs." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[vendor]:[device]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Select device by its position on the bus." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "missing ‘%c’ symbol" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSITION] [-d DEVICE]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Show raw dump of the PCI configuration space." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Set a variable to return value." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Determine driver." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Determine partition map type." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Determine filesystem type." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Determine filesystem UUID." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Determine filesystem label." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "filesystem ‘%s’ does not support labels" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DEVICE" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Retrieve device info." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Set variable with user input." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Reboot the computer." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Store matched component NUMBER in VARNAME." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMBER:]VARNAME" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP STRING" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Test if REGEXP matches STRING." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAME [VARIABLE] [HINTS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Search devices by a file." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Search devices by a filesystem label." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Search devices by a filesystem UUID." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Set a variable to the first device found." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Do not probe any floppy drive." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINT" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, ‘root’ is used." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x of %x:%02x.%x is %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipulate PCI devices." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Verbose countdown." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Allow to interrupt with ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NUMBER_OF_SECONDS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Wait for a specified number of seconds." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "root directory of the syslinux disk [default=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"current directory of syslinux [default is parent directory of input file]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "assume input is an isolinux configuration file." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "assume input is a pxelinux configuration file." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "assume input is a syslinux configuration file." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Execute syslinux config in same context" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Execute syslinux config in new context" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Execute syslinux config in same context taking only menu entries" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Execute syslinux config in new context taking only menu entries" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "no terminal specified" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminal ‘%s’ isn't found" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Active input terminals:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Available input terminals:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Active output terminals:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Available output terminals:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "List or select an input terminal." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "List or select an output terminal." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESSION ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Evaluate an expression." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESSION" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Load the same file in multiple ways." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Specify size for each read operation" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "invalid block size" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "File size: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Elapsed time: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Speed: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s SIZE] FILENAME" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Test file read speed." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "no command is specified" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Elapsed time: %d.%03d seconds \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "COMMAND [ARGS]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Measure time used by COMMAND" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Translate to upper case." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Translate to lower case." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPTIONS] [SET1] [SET2] [STRING]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Translate SET1 characters to SET2 in STRING." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Do nothing, successfully." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Do nothing, unsuccessfully." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Test USB support." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Skip signature-checking of the public key file." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "bad signature" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "public key %08x not found" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "module ‘%s’ isn't loaded" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Verify detached signature." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] PUBKEY_FILE" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Add PUBKEY_FILE to trusted keys." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Show the list of trusted keys." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "PUBKEY_ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Remove PUBKEY_ID from trusted keys." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Text-only " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Paletted " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monochrome " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Unknown video mode " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDID checksum invalid" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID version: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Preferred mode: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " No preferred mode available\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "invalid video mode specification ‘%s’" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "List of supported video modes:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legend: mask/position=red/green/blue/reserved" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter ‘%s’:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " No info available" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Failed to initialize video adapter" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[WxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"List available video modes. If resolution is given show only modes matching " +"it." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Test video subsystem in mode WxH." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Test video subsystem." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[DIR]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "List Xen storage." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VARNAME]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "failure reading sector 0x%llx from ‘%s’" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "failure writing sector 0x%llx to ‘%s’" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Mount by UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Mount all." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Mount all volumes with ‘boot’ flag set." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "cannot open ‘%s’: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "cannot seek ‘%s’: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "SOURCE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Mount a crypto device." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Couldn't find physical volume ‘%s’. Some modules may be missing from core " +"image." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "physical volume %s not found" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "no media in ‘%s’" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Couldn't load sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Couldn't load sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "couldn't read ELI metadata" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "wrong ELI magic or version" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Attempting to decrypt master key..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Enter passphrase for %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Slot %d opened\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "attempt to read or write outside of disk ‘%s’" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "cannot write to CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Native disk drivers are in use. Refusing to use firmware disk interface." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "your LDM Embedding Partition is too small; embedding won't be possible" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "this LDM has no Embedding Partition; embedding won't be possible" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Delete the specified loopback drive." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] DEVICENAME FILE." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Make a virtual drive from a file." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "relocation 0x%x is not implemented yet" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "no symbol table" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "this ELF file is not of the right type" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Load and initialize EFI emulator." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Finalize loading of EFI emulator." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Unload EFI emulator." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "symbol ‘%s’ not found" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Loaded fonts:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FILE..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Specify one or more font files to load." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "List the loaded fonts." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "too deep nesting of symlinks" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "attempt to read past the end of file" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "couldn't find a necessary member device of multi-device filesystem" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "not a directory" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "not a regular file" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "your core.img is unusually large. It won't fit in the embedding area" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "invalid file name ‘%s’" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "checksum verification failed" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "no decryption key available" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC verification failed" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Assume input is raw." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Assume input is hex." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Assume input is passphrase." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Enter ZFS password: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FILE]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Import ZFS wrapping key stored in FILE." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtual device is removed" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtual device is faulted" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtual device is offline" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtual device is degraded" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtual device is online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Incorrect virtual device: no type available" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Leaf virtual device (file or disk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Bootpath: unavailable\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Bootpath: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Path: unavailable" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Path: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Devid: unavailable" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Devid: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "This VDEV is a mirror" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "This VDEV is a RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Incorrect VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV with %d children\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV element number %d isn't correct\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV element number %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Unknown virtual device type: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Pool state: active" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Pool state: exported" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Pool state: destroyed" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Pool state: reserved for hot spare" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Pool state: level 2 ARC device" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Pool state: uninitialized" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Pool state: unavailable" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Pool state: potentially active" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Pool name: unavailable" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Pool name: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Pool GUID: unavailable" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Pool GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Unable to retrieve pool state" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Unrecognized pool state" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "No virtual device tree available" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Print ZFS info about DEVICE." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FILESYSTEM [VARIABLE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Print ZFS-BOOTFSOBJ or store it into VARIABLE" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Now connect the remote debugger, please." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Start GDB stub on given port" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Break into GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Stop GDB stub" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "premature end of file" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Translates the string with the current settings." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Press enter to boot the selected OS, ‘e’ to edit the commands before booting " +"or ‘c’ for a command-line. ESC to return previous menu." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Press enter to boot the selected OS, ‘e’ to edit the commands before booting " +"or ‘c’ for a command-line." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: boot, ‘e’: options, ‘c’: cmd-line" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "The highlighted entry will be executed automatically in %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds remaining." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB Boot Menu" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s value is less than or equal to %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parameter requires a value" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT parameter must be positive" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Unknown ARGP_HELP_FMT parameter" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Garbage in ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " or: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPTION...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Try ‘%s --help’ or ‘%s --usage’ for more information.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Report bugs to %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Unknown system error" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "give this help list" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "give a short usage message" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "set the program name" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SECS" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "hang for SECS seconds (default 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "print program version" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAM ERROR) No version known!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Too many arguments\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAM ERROR) Option should have been recognized!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: option ‘%s’ is ambiguous; possibilities:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: option ‘--%s’ doesn't allow an argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: option ‘%c%s’ doesn't allow an argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: option ‘--%s’ requires an argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: unrecognized option ‘--%s’\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: unrecognized option ‘%c%s’\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: invalid option -- ‘%c’\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: option requires an argument -- ‘%c’\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: option ‘-W %s’ is ambiguous\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: option ‘-W %s’ doesn't allow an argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: option ‘-W %s’ requires an argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Success" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "No match" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Invalid regular expression" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Invalid collation character" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Invalid character class name" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Trailing backslash" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Invalid back reference" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Unmatched [ or [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Unmatched ( or \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Unmatched \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Invalid content of \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Invalid range end" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memory exhausted" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Invalid preceding regular expression" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Premature end of regular expression" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regular expression too big" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Unmatched ) or \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "unknown regexp error" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "No previous regular expression" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hello World" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Say ‘Hello World’." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "attempt to seek outside of the file" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "unsupported gzip format" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop file corrupted" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz file corrupted or unsupported block options" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "invalid arch-dependent ELF magic" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VALUE]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Set an environment variable." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Remove an environment variable." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "List devices or files." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Insert a module." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disk ‘%s’ not found" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "attempt to read or write outside of partition" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "invalid arch-independent ELF magic" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "device count exceeds limit" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "cannot write to ‘%s’: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"the device.map entry ‘%s’ is invalid. Ignoring it. Please correct or delete " +"your device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"the drive name ‘%s’ in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. ‘hd0’ or ‘cd’)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "can't open ‘%s’: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "DEVICE_NAME" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Set root device." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "use FILE as the device map [default=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "use FILE as memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "use GRUB files in the directory DIR [default=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "print verbose messages." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "wait until a debugger will attach" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Unknown extra argument ‘%s’." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Error in parsing command line arguments\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Run ‘gdb %s %d’, and set ARGS.HOLD to zero.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: warning:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: error:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "file ‘%s’ is too big" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "unknown filesystem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Shutdown failed" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Exit failed" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "overflow is detected" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Discarding improperly nested partition (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Unknown command ‘%s’.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Display this help and exit." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Display the usage of this command and exit." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "missing mandatory option for ‘%s’" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "the argument ‘%s’ requires an integer" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"a value was assigned to the argument ‘%s’ while it doesn't require an " +"argument" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Print backtrace." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB doesn't know how to halt this machine yet!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Default server is ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "invalid color specification ‘%s’" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Reboot failed" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LENGTH]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Hexdump random data." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "device tree must be supplied (see ‘devicetree’ command)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "invalid zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "invalid device tree" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Load Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Load initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Load DTB file." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "failed to get FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "you need to load the Xen Hypervisor first" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Load a xen hypervisor." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Load a xen module." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTS]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Boot BIOS-based system." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Load another boot loader." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Display output on all consoles." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Use serial console." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Ask for file name to reboot from." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Use CD-ROM as root." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Invoke user configuration routing." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Enter in KDB on boot." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Use GDB remote debugger instead of DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Disable all boot output." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Wait for keypress after every line of output." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Use compiled-in root device." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Boot into single mode." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Boot with verbose messages." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Don't reboot, just halt." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Change configured devices." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,SPEED]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Disable SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Disable ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Don't display boot diagnostic messages." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Boot with debug messages." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Suppress normal output (warnings remain)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADDR|comUNIT][,SPEED]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "name" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "type" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "addr" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "size" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Booting in blind mode" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Load kernel of FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Load kernel of OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Load kernel of NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Load FreeBSD env." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Load FreeBSD kernel module." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Load NetBSD kernel module." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Load NetBSD kernel module (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Load FreeBSD kernel module (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Load kOpenBSD ramdisk." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Load another coreboot payload" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Legacy ‘ask’ parameter no longer supported." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FILE" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "the size of ‘%s’ is too large" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Load FreeDOS kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Load NTLDR or BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Override guessed mapping of Plan9 devices." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBDEVICE=PLAN9DEVICE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGS" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Load Plan9 kernel." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Load a PXE image." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Load Truecrypt ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd already loaded" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Load module." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Press any key to launch xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Load ‘device-properties’ dump." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Could not locate FPSWA driver" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "FPSWA protocol wasn't able to find the interface" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "No FPSWA found" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA revision: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FILE [ARGS...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Display FPSWA version." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "WARNING: no console will be available to OS" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Load a multiboot 2 kernel." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Load a multiboot 2 module." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Load a multiboot kernel." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Load a multiboot module." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Background image mode." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Load XNU image." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Load 64-bit XNU image." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Load XNU extension package." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Load XNU extension." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIRECTORY [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Load XNU extension directory." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Load XNU ramdisk. It will be available in OS as md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Load a splash image for XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Load an image of hibernated XNU." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADDR1,MASK1[,ADDR2,MASK2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Declare memory regions as faulty (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "FROM[K|M|G] TO[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Remove any memory regions in specified range." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "four arguments expected" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "unrecognised network interface ‘%s’" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "no DHCP info found" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "no DHCP options found" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "no DHCP option %d found" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "unrecognised DHCP option format specification ‘%s’" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "no network card found" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "couldn't autoconfigure %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[CARD]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "perform a bootp autoconfiguration" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR INTERFACE NUMBER DESCRIPTION" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "no DNS servers configured" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "domain name component is too long" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "no DNS record found" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "no DNS reply received" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "only ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "only ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "prefer ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "prefer ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "invalid argument" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADDRESS DNSSERVER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Perform a DNS lookup" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Add a DNS server" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Remove a DNS server" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "List DNS servers" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "couldn't send network packet" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "interpret is not supported" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "alloc-mem failed" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "free-mem failed" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "unsupported HTTP response" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "unsupported HTTP error %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "time out opening ‘%s’" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "timeout: could not resolve hardware address" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "unresolvable address %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "unrecognised network address ‘%s’" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "destination unreachable" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "route loop detected" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "address not found" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "you can't delete this address" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Unsupported hw address type %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Unsupported address type %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "three arguments expected" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "card not found" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporary" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Unknown address type %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "no server is specified" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "timeout reading ‘%s’" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "SHORTNAME CARD ADDRESS [HWADDRESS]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Add a network address." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[CARD [HWADDRESS]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Perform an IPV6 autoconfiguration" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "SHORTNAME" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Delete a network address." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "SHORTNAME NET [INTERFACE| gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Add a network route." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Delete a network route." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "list network routes" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "list network cards" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "list network addresses" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "connection refused" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "connection timeout" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Enter username: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[USERLIST]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Check whether user is in USERLIST." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Possible commands are:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Possible devices are:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Possible files are:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Possible partitions are:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Possible arguments are:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Possible things are:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Warning: syntax error (missing slash) in ‘%s’\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Warning: invalid foreground color ‘%s’\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Warning: invalid background color ‘%s’\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Export variables." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Sunday" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Monday" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Tuesday" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Wednesday" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Thursday" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Friday" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Saturday" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "module isn't loaded" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB version %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC at any time exits." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Clear the screen." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Enter normal mode." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Exit from normal mode." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Press any key to continue..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Booting ‘%s’" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Falling back to ‘%s’" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Failed to boot both default and fallback entries.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Booting a command list" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Use the %C and %C keys to select which entry is highlighted." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partition %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Device %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Filesystem cannot be accessed" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Filesystem type %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Label ‘%s’" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "No known filesystem detected" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partition start at %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sector size %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Total size unknown" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Total size %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MORE--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "cannot open configuration file ‘%s’: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "no compression is available for your platform" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "no IEEE1275 routines are available for your platform" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "no EFI routines are available for your platform" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "no SGI routines are available for your platform" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "no random number generator is available for your OS" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Failed to create ‘device-mapper’ tree" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "can't mount encrypted volume ‘%s’: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "couldn't open geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "couldn't find geli consumer" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "couldn't retrieve geli UUID" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "couldn't find geom ‘part’ class" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "unaligned device size" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "attempting to read the core image ‘%s’ from GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "attempting to read the core image ‘%s’ from GRUB again" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "cannot read ‘%s’ correctly" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "failed to read the sectors of the core image" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "cannot get translator command line for path ‘%s’: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "translator command line is empty for path ‘%s’" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"translator ‘%s’ for path ‘%s’ has several non-option words, at least ‘%s’ " +"and ‘%s’" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"translator ‘%s’ for path ‘%s’ is given only options, cannot find device part" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Storage information for ‘%s’ does not include type" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "‘%s’ is not a local disk" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Storage information for ‘%s’ indicates neither a plain partition nor a plain " +"disk" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "can't retrieve blocklists: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "blocksize is not divisible by 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "invalid zero blocksize" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "can't retrieve blocklists" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION error: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "unsupported RAID version: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO error: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO error: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Unable to open stream from %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "unknown kind of RAID device ‘%s’" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "‘obppath’ not found in parent dirs of ‘%s’, no IEEE1275 name discovery" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "failed to get canonical path of ‘%s’" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "unknown device type %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Usage: %s DEVICE\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Unable to fork: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Unable to create pipe: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "cannot restore the original directory" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "cannot stat ‘%s’: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "cannot make temporary file: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "cannot make temporary directory: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set ‘boot-device’ variable manually" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: not found" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"‘nvsetenv’ failed. \n" +"You will have to set ‘boot-device’ variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "You will have to set ‘SystemPartition’ and ‘OSLoader’ manually." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "no ‘/’ in canonical filename" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() failed" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "couldn't retrieve random data" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Insufficient privileges to access firmware, assuming BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "no EFI routines are available when running in BIOS mode" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "unexpected EFI error" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Couldn't find a free BootNNNN slot" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "your BIOS Boot Partition is too small; embedding won't be possible" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sector %llu is already in use by raid controller ‘%s’; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sector %llu is already in use by the program ‘%s’; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "your embedding area is unusually small. core.img won't fit in it." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Make partition active" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "not a primary partition" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partition %d is active now. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Cleared active flag on %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Change partition type" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Set ‘hidden’ flag in partition type" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "the partition type 0x%x isn't valid" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Setting partition type to 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "can't break 0 loops" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "not in function body" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "invalid variable name ‘%s’" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "unexpected end of file" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Exit from loops" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Continue loops" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Shift positional parameters." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALUE]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Set positional parameters." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Return from a function." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FILE" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Load background image for active terminal." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COLOR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Set background color for active terminal." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Show CBMEM console content." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Set the serial unit." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Set the serial port address." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Set the serial port speed." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Set the serial port word length." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Set the serial port parity." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Set the serial port stop bits." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Set the base frequency." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Enable/disable RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "serial port ‘%s’ isn't found" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "unsupported serial port flow control" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIONS...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Configure serial port." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "unknown terminfo type ‘%s’" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "visually-ordered UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Unknown encoding" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Current terminfo types:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminal is ASCII-only [default]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal is logical-ordered UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminal is visually-ordered UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminal has specified geometry." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "WIDTHxHEIGHT." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "incorrect terminal dimensions specification" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "terminal %s isn't found or it's not handled by terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Set terminfo type of TERM to TYPE.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Print and execute block argument." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "bitmap file ‘%s’ is of unsupported format" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE info: version: %d.%d OEM software rev: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " total memory: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "no suitable video mode found" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "access denied" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULES" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "pre-load specified modules MODULES" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "install only MODULES and their dependencies [default=all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "THEMES" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "install THEMES [default=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "FONTS" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "install FONTS [default=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LOCALES" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "install only LOCALES [default=all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "compress GRUB files [optional]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "choose the compression to use for core image" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "use images and modules under DIR [default=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "use translations under DIR [default=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "use themes under DIR [default=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "embed FILE as public key for signature checking" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "cannot rename the file %s to %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "disk does not exist, so falling back to partition device %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Commands:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Create a blank environment block file." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "List the current variables." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAME=VALUE ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Set variables." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAME ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Delete variables." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Options:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "You need to specify at least one command.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FILENAME COMMAND" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Tool to edit environment block." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"If FILENAME is ‘-’, the default value %s is used.\n" +"\n" +"There is no ‘delete’ command; if you want to delete the whole environment\n" +"block, use ‘rm %s’." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "invalid environment block" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "invalid parameter %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "environment block too small" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "disk read fails at offset %lld, length %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "invalid skip value %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "read error at offset %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "cannot open OS file ‘%s’: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "cannot write to the stdout: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "compare fail at offset %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "OS file %s open error: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "‘loopback’ command fails: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "‘cryptomount’ command fails: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "couldn't retrieve UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PATH" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "List files in PATH." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FILE LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Copy FILE to local file LOCAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FILE" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Copy FILE to standard output." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FILE LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Compare FILE with local file LOCAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FILE" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Show contents of FILE in hex." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FILE" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Get crc32 checksum of FILE." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FILE" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Display blocklist of FILE." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid DEVICE" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Compute XNU UUID of the device." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Skip N bytes from output file." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Handle N bytes in output file." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Specify the number of input files." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Set debug environment variable." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Mount crypto devices." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FILE|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Load zfs crypto key." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Uncompress data." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Invalid disk count.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Disk count must precede disks list.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "No command is specified.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Not enough parameters to command.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Invalid command %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE_PATH COMMANDS" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Debug tool for filesystem driver." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "set input filename for 32-bit part." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "set input filename for 64-bit part." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "set output filename. Default is STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPTIONS]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Glue 32-bit and 64-bit binary into Apple universal one." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Missing input file\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "cannot copy ‘%s’ to ‘%s’: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "can't compress ‘%s’ to ‘%s’" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "cannot open directory ‘%s’: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "cannot delete ‘%s’: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage is compiled without XZ support" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Unknown compression format %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Unrecognized compression ‘%s’" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "unknown target format %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "cannot find locale ‘%s’" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s doesn't exist. Please specify --target or --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "invalid modinfo file ‘%s’" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Unknown platform ‘%s-%s’" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "More than one install device?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"install GRUB images under the directory DIR/%s instead of the %s directory" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "TARGET" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "install GRUB for TARGET platform [default=%s]; available targets: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "delete device map if it already exists" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "install even if problems are detected" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "use identifier file even if UUID is available" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"don't update the ‘boot-device’/‘Boot*’ NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "do not probe for filesystems in DEVICE" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "do not install bootsector" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"the installation device is removable. This option is only available on EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "the ID of bootloader. This option is only available on EFI and Macs." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "use DIR as the EFI System Partition root." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "use DIR for PPC MAC install." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "use FILE as font for label" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "use COLOR for label" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "use COLOR for label background" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "use STRING as product version" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPTION] [INSTALL_DEVICE]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Install GRUB on your drive." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "the drive %s is defined multiple times in the device map %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Unable to determine your platform. Use --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installing for %s platform.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "install device isn't specified" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "cannot find EFI directory" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "cannot find a device for %s (is /dev mounted?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "cannot find a GRUB drive for %s. Check your device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s doesn't look like an EFI partition" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "You've found a bug" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "filesystem on %s is neither HFS nor HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"attempt to install to encrypted disk without cryptodisk enabled. Set ‘%s’ in " +"file ‘%s’" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Can't create file: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "no hints available for your platform. Expect reduced performance" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NOT RUNNING: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "the chosen partition is not a PReP partition" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "failed to copy Grub to the PReP partition" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: ‘%s’" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "EFI bootloader id isn't specified." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "WARNING: no platform-specific install was performed" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installation finished. No error reported." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bless for x86-based macs" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bless for ppc-based macs" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "No path or device is specified.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc PATH|--x86 FILE" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Mac-style bless on HFS or HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Usage: %s [INFILE [OUTFILE]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype Error %d loading glyph 0x%x for U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (medial)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (leftmost)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (rightmost)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Out of range substitution (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Out of range lookup: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Unsupported substitution type: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Unsupported substitution specification: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Unsupported coverage specification: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "WARNING: unsupported font feature parameters: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "save output in FILE [required]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "select face index" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "FROM-TO[,FROM-TO]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "set font range" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "set font family name" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "SIZE" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "set font size" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "set font descent" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "set font ascent" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "convert to bold font" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "force autohint" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "disable hinting" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignore bitmap strikes when loading" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "invalid font range" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIONS] FONT_FILES" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Convert common font file formats into PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "output file must be specified" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType fails" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "can't open file %s, index %d: error %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "can't set %dx%d font size: Freetype error %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "set prefix directory" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"embed FILE as a memdisk image\n" +"Implies ‘-p (memdisk)/boot/grub’ and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "embed FILE as an early config" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "add NOTE segment for CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "output a generated image to FILE [default=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "generate an image in FORMAT" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "available formats:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "unknown target format %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPTION]... [MODULES]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Make a bootable image of GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Target format not specified (use the -O option)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Prefix not specified (use the -p option)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"‘%s’ is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "set input filename. Default is STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Unknown keyboard scan identifier %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Unknown keyboard scan code 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "ERROR: no valid keyboard layout found. Check the input.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Generate GRUB keyboard layout from Linux console one." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "root directory of TFTP server" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relative subdirectory on network server" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "unsupported platform %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Number of PBKDF2 iterations" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Length of generated hash" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Length of salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Generate PBKDF2 password hash." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "failure to read password" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Reenter password: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "passwords don't match" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "couldn't retrieve random data for salt" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "cryptographic error number %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDF2 hash of your password is %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "No path is specified.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "PATH" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Transform a system filename into GRUB one." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "save ROM images in DIR [optional]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "use FILE as xorriso [optional]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "use STRING as product name" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of ‘%s’." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Option -- switches to native xorriso command mode." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Mail xorriso support requests to ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPTION] SOURCE..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "enabling %s support ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Your xorriso doesn't support ‘--grub2-boot-info’. Some features are " +"disabled. Please use xorriso 1.2.9 or later." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Your xorriso doesn't support ‘--grub2-boot-info’. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Generate a standalone image (containing all modules) in the selected format" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMAGE1 [IMAGE2 ...] MOUNTPOINT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "need an image and mountpoint" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "given argument is a system device, not a path" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "separate items in output using ASCII NUL characters" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[default=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "print TARGET" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "available targets:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTION]... [PATH|DEVICE]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Probe device information for a given path (or device, if the -d option is " +"given)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "read text from FILE." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "use COLOR for text" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "use COLOR for background" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "set the label to render" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "use FILE as font (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Render Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Missing arguments\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[PATH]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Checks GRUB script configuration file for syntax errors." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntax error at line %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Script ‘%s’ contains no commands and will do nothing\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "use FILE as the boot image [default=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "use FILE as the core image [default=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "No device is specified.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "DEVICE must be an OS device (e.g. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Invalid device ‘%s’.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "root directory as it will be seen on runtime [default=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "write output to FILE [default=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Transform syslinux config into GRUB one." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "cannot compress the kernel image" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "unknown compression %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Decompressor is too big" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "core image is too big (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "kernel image is too big (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img size must be %u bytes" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img doesn't match the known good version. proceed at your own risk" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "firmware image is too big" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "invalid line format: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "the first sector of the core file is not sector-aligned" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "non-sector-aligned data is found in the core file" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "the sectors of the core file are too fragmented" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "the size of ‘%s’ is not %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "the size of ‘%s’ is too small" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "unable to identify a filesystem in %s; safety check can't be performed" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partition style ‘%s’ doesn't support embedding" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "File system ‘%s’ doesn't support embedding" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Your embedding area is unusually small. core.img won't fit in it." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "no terminator in the core image" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img version mismatch" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"embedding is not possible, but this is required for RAID and LVM install" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "can't determine filesystem on %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "filesystem ‘%s’ doesn't support blocklists" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "embedding is not possible, but this is required for cross-disk install" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "will not proceed with blocklists" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "blocklists are invalid" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "blocklists are incomplete" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Make GRUB keyboard layout file." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "print this message and exit" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "print the version information and exit" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s generates a keyboard layout for GRUB using ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Report bugs to ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: option requires an argument -- ‘%s’\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Usage: %s [OPTION]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Generate a grub config file" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "output generated config to FILE [default=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Unrecognized option ‘%s’\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: You must run this as root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Not found.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Generating grub configuration file ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "done" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Warning:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Usage: %s [OPTION] MENU_ENTRY\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "Set the default boot menu entry for GRUB, for the next boot only." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the ‘default’ command. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "More than one menu entry?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Menu entry not specified." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Set the default boot menu entry for GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "MENU_ENTRY is a number, a menu item title or a menu item identifier." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Found theme: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Found background: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Unsupported image format" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Found GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Found Hurd module: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Some Hurd stuff found, but not enough to boot." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, with Hurd %s (recovery mode)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, with Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Please don't use old title ‘%s’ for GRUB_DEFAULT, use ‘%s’ (for versions " +"before 2.00) or ‘%s’ (for 2.00 or later)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Loading GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Loading the Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Advanced options for %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Loading kernel of Illumos ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, with kFreeBSD %s (recovery mode)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, with kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Loading kernel of FreeBSD %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Found kernel of FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Found kernel module directory: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, with Linux %s (recovery mode)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, with Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Loading Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Loading initial ramdisk ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Found linux image: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Found initrd image: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, with kernel %s (via %s, recovery mode)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, with kernel %s (via %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Found NetBSD kernel: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (loader)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (loader)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Found %s on %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(on %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, with Xen %s and Linux %s (recovery mode)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, with Xen %s and Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, with Xen hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Loading Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hypervisor, version %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Advanced options for %s (with Xen hypervisor)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Found %s on %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s is not yet supported by grub-mkconfig.\\n" diff --git a/po/eo.gmo b/po/eo.gmo new file mode 100644 index 0000000000000000000000000000000000000000..335e5e11e386fb4053ffb1d97712f1719c2cf497 GIT binary patch literal 44202 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 cRkkFGFE, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.0.0-pre4\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2012-04-05 21:52+0200\n" +"Last-Translator: Kristjan SCHMIDT \n" +"Language-Team: Esperanto \n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "nesubtenata rapideco de seria pordo" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "nesubtenata pareco de seria pordo" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "nesubtenata nombro da seriaj stop-bitoj" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "nesubtenata vortlongo de seria pordo" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Ne ŝargi gastigajn tabelojn specifitajn per perkome disigita listo." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Ŝargi nur la tabelojn donitajn en komo-dispartigita listo." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Eksporti versio-1-tabelojn al la operaciumo." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Eksporti versio-2- kaj versio-3-tabelojn al la operaciumo." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Agordi OEMID de RSDP, XSDT kaj RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Agordi OEMTABLE ID de RSDP, XSDT kaj RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Agordi OEMTABLE-revizion de RSDP, XSDT kaj RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Agordi kampon 'creator' de RSDP, XSDT kaj RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Agordi revizion 'creator' de RSDP, XSDT kaj RSDT" + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +#, fuzzy +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Ne ĝisdatigi na EBDA. Eblas ripari fiaskojn sed ankaÅ­ paraliziĝi pro kelkaj. " +"BIOS-oj, sed neefikigas ĝin kun operaciumoj ne ricevantaj RSDP de Grubo." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "neatendita fino de dosiero %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABELO1,TABELO2|--load-only=tabelo1,tabelo2] DOSIERO1 " +"[DOSIERO2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Ŝargi gastigajn ACPI-tabelojn kaj tabelojn specifigitajn per argumentoj." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "eraro: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "memormanko" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "ne eblas legi na '%s': %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI-elŝalto malsukcesis" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Listigi aparatojn." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "atendis dosiernomon" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "DOSIERO" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Presi liston de blokoj." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "unue vi ŝargu la kernon" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Startigi operaciumon." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "" + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Akcepti DOS-specajn CR/NL-linfinojn." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Montri la enhavon de dosiero." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "atendis du argumentojn" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Kompari dosieron '%s' kun '%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "La dosieroj estas identaj.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "DOSIERO1 DOSIERO2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Kompari du dosierojn." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Ŝargi alian agordan dosieron." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Ŝargi alian agordodosieron sen ŝanĝi la kuntekston." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Ŝargi alian agordodosieron sen ŝanĝo de kunteksto sed kun nur menu-" +"elektebloj." + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "" +"Ŝargi alian agordodosieron sen ŝanĝo de kunteksto sed kun nur menu-" +"elektebloj." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[jaro-]monato-tago] [horo:minuto[:sekundo]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Ne eligi finajn malplenajn liniojn." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Aktivigi interpretadon de retro-stangaj kombinaĵoj." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] SIGNOĈENO" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Montri linion da teksto." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Korekti videobildan problemon." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Ŝargi BIOS-nekropsion" + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "SIGNOĈENO" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Ŝargi multiboot-kernon." + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Ŝargi multiboot-2-kernon." + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "false" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[OPCIOJ] TIPAR_DOSIEROJ" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "APARATO [SUBDISKO[+/-[TIPO]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Plenigi hibridan MBR de GPT-aparato APARATO. Elektitaj subdiskoj estos parto " +"de hibrida MBR. Rajtas esti maksimume 3 subdiskoj. TIPO estas MBR-tipo. + " +"signifas ke subdisko estas aktiva. Nur unu subdisko povas esti aktiva." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Haltigi la komputilon. Tiu ĉi komando funkcias ne kun ĉiuj firm-programaĵoj." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Specifi uzendan haketon." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HAKETO" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Baza dosierujo por haketlisto." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DOSIERUJO" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Ne ĉesi post la unua eraro." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Malkompaktigi dosieron antaÅ­ kalkulo de kontrolsumo." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LEGERARO\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: Haketo-miskongruo\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: Akcepti\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c DOSIERO [-p PREFIKSO]] [DOSIERO1 [DOSIERO2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Kalkuli aÅ­ kontroli haketan kontrolsumon." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c DOSIERO [-p PREFIKSO]] [DOSIERO1 [DOSIERO2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Agordi altnivelan energi-mastrumadon\n" +"(1=malalta, ..., 254=alta, 255=malaktiva)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Montri energi-reĝimon." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Frostigi sekurecagordojn de ATA ĝis restartigo." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Kontroli sanstaton de SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Agordi AÅ­tomatan Akustikan Mastrumadon\n" +"(0=for, 128=kvieta, ..., 254=rapida)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Agordi limtempon de preteco\n" +"(0=neaktiva, 1=5 sek, 2=10 sek, ..., 240=20 min, 241=30 min, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Agordi aparaton al atendada reĝimo." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Agordi aparaton al dormeta reĝimo." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Montri identon kaj agordojn de aparato." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Montri krudan enhavon de ATA-IDENTIFY-sektoro." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Elŝalti/Enŝalti na SMART (0/1)" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Ne presi mesaĝojn." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "atendis unu argumenton" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPCIOJ] DISKO" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Akiri/agordi parametrojn de ATA-disko." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Uzado:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ŜABLONO ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Montri helpan mesaĝon." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Transsalti \"offset\" da bajtoj komence de la dosiero." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Legi nur bajtojn de longo LENGTH." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPCIOJ] DOSIERO_AŬ_APARATO" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Montri krudajn enhavojn de dosiero aÅ­ memoro." + +#: grub-core/commands/i386/cmosdump.c:58 +#, fuzzy +msgid "Show raw dump of the CMOS contents." +msgstr "Montri la enhavon de memoro." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +#, fuzzy +msgid "List coreboot tables." +msgstr "Listigi la nunajn variablojn." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Kontroli por ĉefprocesoraj trajtoj." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Montri la nunajn mapigojn." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Agordi ĉiujn mapigojn al defaÅ­ltaj valoroj." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Plenumi mapigojn kaj direktajn kaj inversajn." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Mastrumi la mapigojn de BIOS-datumportilo." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Ne uzi na APM por haltigi la komputilon." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Haltigi la sistemon, se eblas per APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Montri APM-informojn." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Nevalida komando ‘%s’.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "DOSIERO | RAPIDO [GRADO1 DAŬRO1] [GRADO2 DAŬRO2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Ludi sonon." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Konservi legitan valoron en variablon VARNOMO." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNOMO" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORDO" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Legi 8-bitan valoron el PORDO." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Legi 16-bitan valoron el PORDO." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Legi 32-bitan valoron el PORDO." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORDVALORO [MASKO]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Skribi 8-bitan VALOROn al PORDO." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Skribi 16-bitan VALOROn al PORDO." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VALORO [MASKO]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Skribi 32-bitan VALOROn al PORDO." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Ŝargi klavarfasonon." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Kontroli majuskligan klavon." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Kontroli stirklavon." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Kontroli Alt-klavon." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Kontroli staton de klavmodifilo." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "ne eblas trovi komandon ‘%s’" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Entajpu pasvorton:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Sintakse analizi heredaĵagordojn en sama kunteksto" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Sintakse analizi heredaĵagordojn en nova kunteksto" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=SPECO] DOSIERO [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simuli komandon »kernel« kiel en grub-heredaĵo" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "DOSIERO [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simuli initrd-komandon de grub-heredaĵo" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simuli ‘modulenounzip’-komandon de grub-heredaĵo" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASVORTO [DOSIERO]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Sumuli pasvort-komandon de grub-heredaĵo" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simuli pasvortkomandon de grub-heredaĵo en reĝimo menuenigo" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Specifi dosiernomon." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f DOSIERO] variabla_nomo [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Ŝargi variablojn el ĉirkaÅ­aĵa blokdosiero." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f DOSIERO]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Listigi variablojn el ĉirkaÅ­aĵa blokdosiero." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f DOSIERO] variabla_nomo [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Konservi variablojn al ĉirkaÅ­aĵa blokdosiero." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Montri longan liston kun pli detalaj informoj." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Montri grandojn en home legebla formo." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Listigi ĉiujn dosierojn." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [DOSIERO ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Listigi aparatojn kaj dosierojn." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Montri nur versio-1-tabelojn." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Montri nur versio-2- kaj versio-3-tabelojn." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Montri ACPI-informojn." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Listigi memormapon provizitan de firmprogramo." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Listigi PCI-aparatojn." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Legi 8-bitan valoron de ADDR." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Legi 16-bitan valoron de ADDR." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Legi 32-bitan valoron de ADDR." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Skribi 8-bitan valoron al ADDR." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Skribi 16-bitan valoron al ADDR." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Skribi 32-bitan valoron al ADDR." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Tipo de menuenigo." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "SIGNOĈENO" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Listo de uzantoj kiuj rajtas startigi tiun eron." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identigilo de menuenigo." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOKO" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Difini menueron." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Difini submenuon." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Montri tiun mesaĝon." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Montri la enhavon de memoro." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULO" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Forigi modulon." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Montri ŝargitajn modulojn." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Eliri el Grubo." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Parto-nr.: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Montri memoro-informojn." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "nekonata argumento '%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "SUBDISKAJ KOMANDOJ" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "UZANTPASVORTO" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Agordi uzantpasvorton (simpla teksto). Nerekomendate kaj nesekure." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "UZANTO PBKDF2_PASVORTO" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Agordi pasvorton por uzanto (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "" + +#: grub-core/commands/pcidump.c:168 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[OPCIO]... [VOJO|APARATO]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "" + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Determini pelilon." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Determini subdiskmapan tipon." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Determini dosiersisteman tipon." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Determini na UUID de dosiersistemo." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Determini dosiersisteman etikedon." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "APARATO" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Ricevi aparatinformojn." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Agordi variablon kun uzanto-enigo." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Restartigi la komputilon." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMERO:]VARNOMO" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP SIGNOĈENO" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Testi ĉu REGESPR egalas al SIGNOĈENO." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NOMO [VARIABLO] [SUGESTOJ]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Serĉi aparatojn perdosiere. Se VARIABLO estas specifita, la unue trovita " +"aparato estas agordita al variablo." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Serĉi aparatojn peretikede. Se VARIABLO estas specifita, la unue trovita " +"aparato estas agordita al variablo." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Serĉi aparatojn per UUID. Se VARIABLO estas specifita, la unue trovita " +"aparato estas agordita al variablo." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Serĉu aparatojn per dosiero." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Serĉu aparatojn per etikedo de dosiersistemo." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Serĉu aparatojn per UUID de dosiersistemo." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Agordi variablon al la unue trovita aparato" + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Ne sondi ajnan disketilon." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Unue provi la aparaton SUGESTO. Se SUGESTO finas je komo, provi ankaÅ­ " +"subdiskojn." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "SUGESTO" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Unue provi la aparaton SUGESTO (je IEEE1275). Se SUGESTO finas je komo, " +"provi ankaÅ­ subdiskojn." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Unue provi la aparaton SUGESTO (je BIOS). Se SUGESTO finas je komo, provi " +"ankaÅ­ subdiskojn." + +#: grub-core/commands/search_wrap.c:55 +#, fuzzy +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Unue provi la aparaton SUGESTO. Se SUGESTO finas je komo, provi ankaÅ­ " +"subdiskojn." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Unue provi la aparaton SUGESTO (je EFI). Se SUGESTO finas je komo, provi " +"ankaÅ­ subdiskojn." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Unue provi la aparaton SUGESTO (je ARC). Se SUGESTO finas je komo, provi " +"ankaÅ­ subdiskojn." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint SUGESTO [--hint SUGESTO] ...] NOMO" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Serĉi aparatojn per dosiero, dosiersistema etikedo aÅ­ UUID de dosiersistemo. " +"Se --set estas specifita la unue trovita dosiero estas agordota al variablo. " +"Se neniu variablo-nomo estas specifita, \"ĉefuzanto\" estas uzota." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POZICIO] [-d APARATO [-v VARIABLO] [REĜISTRO][=VALORO[:MASKO]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipuli PCI-aparatojn" + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "" + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Interrompebla per ESK." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NOMBRO_DA_SEKUNDOJ" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Atendi specifan nombron da sekundoj." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +#, fuzzy +msgid "Execute syslinux config in same context" +msgstr "Sintakse analizi heredaĵagordojn en sama kunteksto" + +#: grub-core/commands/syslinuxcfg.c:195 +#, fuzzy +msgid "Execute syslinux config in new context" +msgstr "Sintakse analizi heredaĵagordojn en nova kunteksto" + +#: grub-core/commands/syslinuxcfg.c:201 +#, fuzzy +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Ŝargi alian agordodosieron sen ŝanĝo de kunteksto sed kun nur menu-" +"elektebloj." + +#: grub-core/commands/syslinuxcfg.c:207 +#, fuzzy +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Ŝargi alian agordodosieron sen ŝanĝo de kunteksto sed kun nur menu-" +"elektebloj." + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "neniu terminalo estas specifita" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktivaj enigoterminaloj:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Disponeblaj enigoterminaloj:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktivaj eligoterminaloj:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Haveblaj eligoterminaloj:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINALO1] [TERMINALO2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Listigi aÅ­ elekti enigoterminalon." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Listigi aÅ­ elekti eligoterminalon." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ESPRIMO ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Taksi esprimon." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ESPRIMO" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Ŝargi la saman dosieron plurmaniere." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +#, fuzzy +msgid "invalid block size" +msgstr "nevalida ĉirkaÅ­aĵa bloko" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:92 +#, fuzzy, c-format +msgid "Speed: %s \n" +msgstr "Aparat-identigilo: %s\n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "neniu komando estas specifita" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Fari nenion, sukcese." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Fari nenion, nesukcese." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Testi USB-subtenon." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr "" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Testi video-subsistemon en reĝimo AxL." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Testi video-subsistemon." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VARNOMO]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "ne eblas malfermi na '%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "" + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] APARATNOMO DOSIERO." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Fari virtualan aparaton el dosiero." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Ŝargi kaj pravalorizi EFI-imitilon." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Finigi ŝargadon de EFI-imitilo." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Malŝargi EFI-imitilon." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Ŝargitaj tiparoj:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "DOSIERO..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Specifigi unu aÅ­ plurajn ŝargotajn tipardosierojn." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Listigi la ŝargitajn tiparojn." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "ne estas dosierujo" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "ne estas regula dosiero" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "nevalida dosiernomo ‘%s’" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Entajpu ZFS-pasvorton: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [DOSIERO]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Vojo: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Aparat-identigilo: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "neatendita fino de dosiero" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Tradukas la signoĉenon per la nunaj agordoj." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Premu ‘enigi’ por praŝargi la elektitan operaciumon, ‘e’ por modifi la " +"komandojn antaÅ­ praŝargo aÅ­ ‘c’ por komandlinio. ‘Esk’ por reiri al antaÅ­a " +"menuo." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Premu ‘enigi’ por praŝargi la elektitan operaciumon, ‘e’ por modifi la " +"komandojn antaÅ­ praŝargo aÅ­ ‘c’ por komandlinio." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "La elektita ero estos aÅ­tomate lanĉata post %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds restas." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr "" + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPCIOJ...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Provu na '%s --help' aÅ­ na `%s --usage' por pli da informoj.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "montri ĉi tiun helpon" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NOMO" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Saluton mondo" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Diri \"Saluton mondo\"." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ĈIRKVAR=VALORO]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Agordi ĉirkaÅ­aĵan variablon." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ĈIRKVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Forigi ĉirkaÅ­aĵan variablon." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Listigi aparatojn aÅ­ dosierojn." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Enmeti modulon." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "nombro da aparatoj superas limon" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "ne eblas skribi al '%s':%s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "ne eblas malfermi na `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "APARAT_NOMO" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Agordi radikan aparaton." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "uzi DOSIERO-n kiel aparatdosierujon [defaÅ­lte=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "Uzi GRUB-dosierojn en la dosierujo DOSIERUJO [defaÅ­lte=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "eldoni ampleksajn mesaĝojn." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Nekonata aldona argumento ‘%s’." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-imitilo." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Eraro dum analizo de komandliniaj argumentoj\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: averto:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: informoj:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: eraro:" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "la grando de ‘%s’ tro grandas" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "Nekonata dosiersistemo" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Nekonata komando ‘%s’.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Montri ĉi tiun helpon kaj eliri." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Montri la uzon de tiu komando kaj eliri." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "Nevalida aparato ‘%s’.\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Ŝarĝado de Linukso." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Ŝarĝado de initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "Ŝargi XNU-bildon." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "unue vi ŝargu la kernon" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Ŝargi kernmodulon de NetBSD." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPCIOJ]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Ŝargi alian praŝargilon." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Montri eligon sur ĉiuj konzoloj." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Uzi serian konzolon." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Demandi por dosiernomo el kiu okazu restartigo." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Uzi KD-ROM-on kiel radikon." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Alvoki enkursigon de uzantagordado." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Eniri KDB dum praŝargo." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Uzi GDB-sencimigilon anstataÅ­ DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Elŝalti ĉiun praŝargan eligon." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Atendi klavofrapon post ĉiu eliga linio." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Praŝargi en unuopan reĝimon." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Praŝargi kun ampleksaj mesaĝoj." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Ne restartigi, nur haltigi." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Ŝanĝi agorditajn aparatojn." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,RAPIDO]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Elŝalti na SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Elŝalti na ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Ne montri dumpraŝargajn diagnozajn mesaĝojn." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Praŝargi kun sencimigo-mesaĝoj." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Subpremi normalan eligon (avertoj restos)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADR|comUNIT][,RAPIDO]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Ŝarĝado de kerno de FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Ŝarĝado de kerno de OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Ŝarĝado de kerno de NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Ŝarĝado de ĉirkaÅ­aĵo de FreeBSD" + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Ŝarĝado de kerna modulo de FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Ŝargi kernmodulon de NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Ŝargi kernmodulon de NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Ŝarĝado de kerna modulo de FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "la grando de ‘%s’ tro grandas" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Ŝarĝado de 'kernel.sys' de FreeBSD." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Ŝarĝado de NTLDR na BootMGR" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "" + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Ŝargi PXE-bildon." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "Forigi modulon." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "DOSIERO [ARGS...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Ŝargi multiboot-2-kernon." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Ŝargi multiboot-2-modulon." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Ŝargi multiboot-kernon." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Ŝargi multiboot-modulon." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Ŝargi XNU-bildon." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Ŝargi 64-bitan XNU-bildon." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Ŝargi XNU-aldonpakaĵon." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Ŝargi XNU-aldonaĵon." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DOSIERUJO [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Ŝargi dosierujon de XNU-etendaĵoj." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Ŝargi salutŝildon por XNU." + +#: grub-core/loader/xnu.c:1501 +#, fuzzy +msgid "Load an image of hibernated XNU." +msgstr "Ŝargi salutŝildon por XNU." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADR1,MASKO1[,ADR2,MASKO2[,...]]" + +#: grub-core/mmap/mmap.c:539 +#, fuzzy +msgid "Declare memory regions as faulty (badram)." +msgstr "Deklari memorregionojn neuzeblaj." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "DE[K|M|G] AL[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Forigi ĉiujn memorregionojn en la specifita amplekso." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +#, fuzzy +msgid "invalid argument" +msgstr "nevalida parametro %s" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Listigi DNS-servilojn" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "dumtempe" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "neniu servilo estas specifita" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Enigu uzantnomon: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[UZANTLISTO]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Eblaj komandoj:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Eblaj aparatoj:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Eblaj dosieroj:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Eblaj subdiskoj:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Eblaj argumentoj:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Eblaj aĵoj:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Atenton: sintaksa eraro (mankanta oblikvo (‘/’) en ‘%s’\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Averto: nevalida fonkoloro ‘%s’\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Averto: nevalida malfonkoloro ‘%s’\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ĈIRKVAR [ĈIRKVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Eksporti variablojn." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Dimanĉo" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Lundo" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Mardo" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Merkredo" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Ä´aÅ­do" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Vendredo" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Sabato" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "neŝargita" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB versio %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "‘Esk’ ĉiam elirigas." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimuma ‘BASH’-eca linimodifado estas subtenata. Por la unua vorto, TABO " +"listigas eblajn komandojn. Aliloke TABO listigas eblajn aparatojn aÅ­ " +"dosierojn. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grubo>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Vakigi la ekranon." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Starti normalreĝimon." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Foriri el normalreĝimo." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Premu klavon por daÅ­rigi ..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Ŝargas na ‘%s’" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Refalas al ‘%s’" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Praŝargo de kaj defaÅ­lta kaj refala eroj malsukcesis.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Praŝargas komandliston" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimuma Emacs-eca ekranmodifado estas subtenata. ‘Tabo’ listigas " +"kompletaĵojn. Premu ‘Stir-x’ aÅ­ ‘F10’ por praŝargi, ‘Stir-c’ aÅ­ ‘F2’ por " +"komandlinio aÅ­ ‘Esk’ por forĵeti modifojn kaj reiri al la GRUB-menuo." + +#: grub-core/normal/menu_text.c:170 +#, fuzzy, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Uzu la klavojn ‘%C’ kaj ‘%C’ por elekti eron." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Subdisko ‘%s’:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Aparato ‘%s’:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Ne eblis atingi dosiersistemon" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Dosiersistema tipo: ‘%s’" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etikedo “%s”" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Laste modifiĝis je %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Detektis neniun konatan dosiersistemon" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr "" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr "" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr "" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--PLI--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "ne eblas malfermi OS-dosieron %s:%s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "ne eblas malfermi na Geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "provas legi la kernbildon ‘%s’ el Grubo" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "provas relegi la kernbildon ‘%s’ el Grubo denove" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "ne eblas legi ‘%s’ korekte" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "fiaskis legi la restantajn sektorojn de la kernbildo" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "nevalida ĉirkaÅ­aĵa bloko" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "nekonata argumento '%s'" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "ne eblas alinomi la dosieron %s al %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "ne eblas alinomi la dosieron %s al %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, fuzzy, c-format +msgid "%s: not found" +msgstr "%s: informoj:" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +#, fuzzy +msgid "unexpected EFI error" +msgstr "neatendita fino de dosiero" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "neatendita fino de dosiero" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Eliri iteraciojn" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "DaÅ­rigi iteraciojn" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Ŝovi poziciajn parametrojn." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALORO]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Agordi poziciajn parametrojn." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Reiri de funkcio." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] DOSIERO" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Ŝargi fonbildon por aktiva terminalo." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "KOLORO" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Ŝargi fonbildon por aktiva terminalo." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +#, fuzzy +msgid "Show CBMEM console content." +msgstr "Montri la enhavon de memoro." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Agordi la serian unuon." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Agordi la adreson de seria pordo." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Agordi la rapidon de seria pordo." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Agordi la vortlongon de seria pordo." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Agordi la parecon de seria pordo." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Agordi la seriajn stop-bitojn." + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "Agordi la serian unuon." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +#, fuzzy +msgid "unsupported serial port flow control" +msgstr "nesubtenata vortlongo de seria pordo" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPCIOJ...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Agordi serian pordon." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASKIO" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +#, fuzzy +msgid "Unknown encoding" +msgstr "Nekonata kodo" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminalo estas nur-ASKIA [defaÅ­lte]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminalo estas UTF-8 en logika ordo." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminalo estas UTF-8 en vida ordo." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminalo havas specifitan geometrion" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "LARĜOxALTO." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g LxA] TERM [TIPO]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Agordi ‘terminfo’-tipon de TERM al TIPO.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Eldoni kaj lanĉi blokargumenton." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr "" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULOJ" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "ne eblas densigi la kernbildon" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, fuzzy, c-format +msgid "use translations under DIR [default=%s]" +msgstr "Uzi GRUB-dosierojn en la dosierujo DOSIERUJO [defaÅ­lte=%s]" + +#: include/grub/util/install.h:58 +#, fuzzy, c-format +msgid "use themes under DIR [default=%s]" +msgstr "Uzi GRUB-dosierojn en la dosierujo DOSIERUJO [defaÅ­lte=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "ne eblas alinomi la dosieron %s al %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Komandoj:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Krei malplenan ĉirkaÅ­aĵan blokdosieron." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Listigi la nunajn variablojn." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "agordi [NOMO=VALORO ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Agordi variablojn." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Forigi variablojn." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opcioj:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Vi specifu almenaÅ­ unu komandon.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "DOSIERNOMO KOMANDO" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Ilo por modifi ĉirkaÅ­aĵan blokon." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "nevalida ĉirkaÅ­aĵa bloko" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "nevalida parametro %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, fuzzy, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "disklegado fiaskis je deŝovo %lld, longo %d" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "nevalida transsalt-valoro %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "legeraro je deŝovo %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "ne eblas malfermi OS-dosieron %s:%s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "komparado fiaskis je deŝovo %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "`loopback'-komando fiaskis: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "`cryptomount'-komando malsukcesis: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls VOJO" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Listigi dosierojn en VOJO." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp DOSIERO LOKA" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopii DOSIERO-n al loka dosiero LOKA." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat DOSIERO" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp DOSIERO LOKA" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Kompari DOSIERO-n kun loka dosiero LOKA." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex DOSIERO" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Montri la enhavon de dosiero deksesume." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc DOSIERO" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Akiri ‘crc32’-kontrolsumon de DOSIERO." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist DOSIERO" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Montri blokliston de DOSIERO." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Transsalti N bajtojn de elira dosiero" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Trakti N bajtojn en elira dosiero" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Agordi variablon de sencimiga ĉirkaÅ­aĵo." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "" + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Nevalida diskonombro.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Diskonombro estu antaÅ­ la diskolisto.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Neniu komando estas specifita.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "La komando ne havas sufiĉe da parametroj.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Nevalida komando ‘%s’.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "BILDO_VOJO-KOMANDOJ" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Sencimigilo por dosiersistema pelilo." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPCIOJ]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "ne eblas malfermi na '%s': %s" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "ne eblas malfermi na `%s': %s" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "ne eblas malfermi na '%s': %s" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "ne eblas malfermi na '%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "nekonata argumento '%s'" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "ne eblas trovi komandon ‘%s’" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "nevalida dosiernomo ‘%s’" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "nekonata argumento '%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"igi la diskilon praŝargebla ankaÅ­ kiel disketilon (defaÅ­lto por fdX-" +"aparatoj). Eblas kadukiĝi je kelkaj BIOS-oj." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "Instali eĉ se detektiĝis problemoj" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "ne sondi por dosiersistemoj en APARATO" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +#, fuzzy +msgid "use FILE as font for label" +msgstr "Uzi DOSIERO-n kiel kernbildon [defaÅ­lte=%s]" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "Uzo: %s [OPCIO] [INSTAL_APARATO]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "Instal-aparato ne estas specifita." + +#: util/grub-install.c:1043 +#, fuzzy +msgid "cannot find EFI directory" +msgstr "ne estas dosierujo" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "ne eblas alinomi la dosieron %s al %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "Instal-aparato ne estas specifita." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Neniu vojo aÅ­ aparato estas specifita.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "GRANDO" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPCIOJ] TIPAR_DOSIEROJ" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "elig-dosiero estu specifita" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "ne estas dosierujo" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "nesubtenata rapideco de seria pordo" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Reenigu pasvorton: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Neniu vojo estas specifita.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "VOJO" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "[OPCIOJ...]" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPCIO]... [VOJO|APARATO]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "Eblaj argumentoj:" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[VOJO]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "Uzi DOSIERO-n kiel la praŝargilan bildon [defaÅ­lte=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "Uzi DOSIERO-n kiel kernbildon [defaÅ­lte=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Neniu aparato estas specifita.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Agordi bildojn kiuj praŝargiĝu de APARATO.\n" +"\n" +"Normale vi ne lanĉu ĉi tiun programon rekte. Uzu ‘grub-install’ anstataÅ­e." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "APARATO estu operaciuma aparato (ekz. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Nevalida aparato ‘%s’.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "ne eblas densigi la kernbildon" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "nekonata argumento '%s'" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "kernbildo tro grandas (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "kernbildo tro grandas (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "grando de ‘diskboot.img’ estu %u bajtoj" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "nevalida linia formo: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "la unua sektoro de la kern-dosiero ne estas sektor-alliniigita" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "ne-sektor-aliniigitaj datumoj troviĝis en la kern-dosiero" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "la sektoroj de la kern-dosiero estas tro fragmentitaj" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "la grando de ‘%s’ ne estas %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "la grando de ‘%s’ tro malgrandas" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Provas instali Grubon al disko kun pluraj subdisketikedoj aÅ­ kun kaj " +"subdisketikedo kaj dosiersistemo. Tio ankoraÅ­ ne estas subtenata." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "ne eblas rekoni dosiersistemon en ‘%s’; sekurkontrolo ne lanĉeblas" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"‘%s’ ŝajne enhavas ‘%s’-dosiersistemon kiu ne estas konata pro rezervado de " +"loko por DOS-eca praŝargo. Instalo de Grubo en ĝin povas rezultiĝi en " +"DOSIERSISTEMA DETRUO se valoraj datumoj anstataÅ­iĝas fare de ‘grub-" +"setup’ (‘--skip-fs-probe’ malŝaltas tiun kontrolon, uzu ĝin proprariske)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"‘%s’ ŝajne enhavas ‘%s’-subdisktabelon kiu ne estas konata pro rezervado de " +"loko por DOS-eca praŝargo. Instalo de Grubo en ĝin povas rezultiĝi en " +"DOSIERSISTEMA DETRUO se valoraj datumoj anstataÅ­iĝas fare de ‘grub-" +"setup’ (‘--skip-fs-probe’ malŝaltas tiun kontrolon, uzu ĝin proprariske)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"‘%s’ ŝajne enhavas ‘%s’-subdisktabelon kiu ne estas konata pro rezervado de " +"loko por DOS-eca praŝargo. Instalo de Grubo en ĝin povas rezultiĝi en " +"DOSIERSISTEMA DETRUO se valoraj datumoj anstataÅ­iĝas fare de ‘grub-" +"setup’ (‘--skip-fs-probe’ malŝaltas tiun kontrolon, uzu ĝin proprariske)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Provas instali Grubon al sensubdiska disko aÅ­ al subdisko. Tio estas MALBONA " +"ideo." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Provas instali Grubon al disko kun pluraj subdisketikedoj aÅ­ kun kaj " +"subdisketikedo kaj dosiersistemo. Tio ankoraÅ­ ne estas subtenata." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "ĉenfinilo mankas en la kernbildo" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"enkorpigo ne eblas, sed tio estas postulata por instaldo per RAID kaj LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "enkorpigo ne eblas, sed tio estas postulata por krucdiska instalo" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Enkorpigo ne eblas. Uzante tiujn agordojn Grubo instaleblas nur se " +"bloklistoj estas uzataj. Tamen, bloklistoj estas MALFIDINDAJ kaj ilia uzo " +"estas malkonsilata." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "montri tiun mesaĝon kaj eliri" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Generi agordan dosieron de Grubo." + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "" + +#: util/grub-mkconfig.in:238 +#, fuzzy +msgid "Generating grub configuration file ..." +msgstr "Generi agordan dosieron de Grubo." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Averto:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, kun Hurdo %s (riparreĝimo)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, kun Hurdo %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Ŝarĝado de kerno de Ilumoso..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, kun kFreeBSD %s (riparreĝimo)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, kun kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Trovis kernon de FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, kun Linukso %s (riparreĝimo)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, kun Linukso %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, kun kerno %s (per %s, riparreĝimo)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, kun kerno %s (per %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Trovis kernon de NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Se DOSIERNOMO estas ‘-’ la defaÅ­lta valoro %s estos uzata." + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "fiaskis legi la unuan sektoron de la kernbildo" + +#, fuzzy +#~ msgid "loopback command fails" +#~ msgstr "\"loopback\" komando fiaskis" + +#, fuzzy +#~ msgid "cryptomount command fails: %s" +#~ msgstr "\"cryptomount\" komando fiaskis" diff --git a/po/es.gmo b/po/es.gmo new file mode 100644 index 0000000000000000000000000000000000000000..16d6c09d2421016547082957ca7f1d18bc938156 GIT binary patch literal 131141 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, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2014-01-08 18:59+0100\n" +"Last-Translator: Miguel Ángel Arruga Vivas \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "velocidad del puerto serie no soportada" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "paridad del puerto serie no soportada" + +# Miguel: ¿Alguien con más conocimientos sobre puertos serie? +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "número de bits de parada del puerto serie no soportados" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "longitud de palabra del puerto serie no soportada" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"No carga las tablas de máquinas especificadas en la lista separada por comas." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" +"Carga únicamente las tablas especificadas en la lista separada por comas." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Exporta la versión 1 de las tablas al SO." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Exporta las versiones 2 y 3 de las tablas al SO." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Establece OEMID en RSDP, XSDT y RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Establece OEMTABLE ID en RDSP, XSDT y RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Establece la revisión de OEMTABLE en RDSP, XSDT y RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Establece el campo 'creador' en RDSP, XSDT y RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Establece la revisión del campo 'creador' en RDSP, XSDT y RSDT." + +# Miguel: Cuelgue es un poco barriobajero, ¿algún término más correcto? +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"No actualizar EBDA. Puede solucionar fallos o cuelgues en algunas BIOS pero " +"se vuelve inefectivo con sistemas operativos que no reciben RSDP de GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "fin prematuro del fichero %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABLA1,TABLA2|--load-only=TABLA1,TABLA2] FICHERO1 " +"[FICHERO2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Carga las tablas ACPI de la máquina y las tablas especificadas en los " +"argumentos." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "error: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "sin memoria" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "no se puede leer «%s»: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Falló el apagado ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Lista de dispositivos." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "nombre de fichero esperado" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FICHERO" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Imprime una lista de bloques." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "se debe cargar primero el núcleo" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Arranca un sistema operativo." + +# Miguel: El tiempo que tarda en arrancar es el tiempo de arranque, ¿me +# equivoco? +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "No hay estadísticas disponibles del tiempo de arranque\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Muestra estadísticas de tiempo de arranque." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Estadísticas de la caché del disco: aciertos = %lu (%lu.%02lu%%), fallos = " +"%lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "No hay estadísticas disponibles de la caché del disco\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Obtiene información de la caché del disco." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Acepta saltos de línea en formato DOS (CR/NL)." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Muestra el contenido de un fichero." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "se esperaban dos parámetros" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Compara el fichero «%s» con «%s»:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Los ficheros difieren en tamaño: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" +"Los ficheros difieren en el desplazamiento %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Los ficheros son idénticos.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FICHERO1 FICHERO2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Compara dos ficheros." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Carga otro fichero de configuración." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Carga otro fichero de configuración sin cambiar de contexto." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Carga otro fichero de configuración tomando únicamente sus entradas de menú " +"sin cambiar de contexto." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "" +"Carga otro fichero de configuración pero tomando únicamente sus entradas de " +"menú." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[año-]mes-dia] [hora:minuto[:segundo]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Muestra/cambia la fecha actual." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "No imprime el salto de línea final." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Activa la interpretación de secuencias escapadas por una barra." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] CADENA" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Muestra una línea de texto." + +# Miguel: Reiniciar: ¿hacia? ¿en? ¿mejor aún salta al menú...? +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Reinicia en el menú de configuración del firmware" + +# Miguel: He tomado el plural al ser algo genérico. +# También he usado vídeo y no video, creo que hispanoamérica, +# aunque es la forma más usada, se recomienda también +# la pronunciación llana. +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Repara problemas de vídeo." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "La imagen ROM está presente." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "No se puede activar el área ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Crea estructuras tipo BIOS por compatibilidad con sistemas operativos " +"existentes." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "VOLCADO_BIOS [VOLCADO_INT10]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Carga un volcado de la BIOS." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "CADENA ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Evalua los parámetros como órdenes de GRUB" + +# Miguel: Me odio a mi mismo por esto... +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Comprueba si FICHERO puede ser arrancado como un núcleo Xen invitado sin " +"privilegios i386 PAE" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Comprueba si FICHERO puede ser arrancado como un núcleo Xen invitado sin " +"privilegios x86_64" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Comprueba si FICHERO puede ser arrancado como un núcleo Xen invitado " +"privilegiado x86" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Comprueba si FICHERO puede ser usado como un núcleo multiboot x86" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Comprueba si FICHERO puede ser usado como un núcleo multiboot2 x86" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Comprueba si FICHERO es Linux ARM" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Comprueba si FICHERO es Linux ARM64" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Comprueba si FICHERO es Linux IA64" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Comprueba si FICHERO es Linux MIPS" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Comprueba si FICHERO es Linux MIPSEL" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Comprueba si FICHERO es Linux SPARC64" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Comprueba si fichero es Linux POWERPC" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Comprueba si FICHERO es Linux x86" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Comprueba si FICHERO es Linux x86 con soporte del protocolo de 32 bits" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Comprueba si FICHERO es kFreeBSD x86" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Comprueba si FICHERO es kFreeBSD i386" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Comprueba si FICHERO es kFreeBSD x86_64" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Comprueba si FICHERO es kNetBSD x86" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Comprueba si FICHERO es kNetBSD i386" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Comprueba si FICHERO es kNetBSD x86_64" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Comprueba si FICHERO es EFI i386" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Comprueba si FICHERO es EFI x86_64" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Comprueba si FICHERO es EFI IA64" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Comprueba si FICHERO es EFI ARM64" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Comprueba si FICHERO es EFI ARM" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Comprueba si FICHERO es hiberfil.sys en estado hibernado" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Comprueba si FICHERO es XNU x86_64 (núcleo de Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Comprueba si FICHERO es XNU i386 (núcleo de Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Comprueba si FICHERO es una imagen hibernada de XNU (núcleo de Mac OS X)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Comprueba si FICHERO es un sector de arranque BIOS" + +# Miguel: Falso en castellano tiene género, lo cual es un "TODO" +# en toda regla para Gettext. +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "falso" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPCIONES FICHERO" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Comprueba si FICHERO es del tipo especificado." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "no existe tal partición" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "El nuevo registro de arranque (MBR) se escribirá en «%s»\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DISPOSITIVO [PARTICION[+/-[TIPO]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Rellena el registro de arranque híbrido de la unidad GPT DISPOSITIVO. Las " +"particiones especificadas formarán parte del registro de arranque híbrido. " +"Se permiten hasta 3 particiones. TIPO es un tipo del registro de arranque. + " +"significa que esa partición está activada. Sólo una partición puede estar " +"activada." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Detiene el ordenador. Esta orden no funciona en todas las implementaciones " +"de firmware." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Especifica el hash a usar." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" +"Comprueba el hash de los ficheros con el FICHERO con la lista de valores " +"hash." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Directorio base para la lista de hash." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIRECTORIO" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "No se detiene ante el primer error." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Descomprime fichero antes de comprobarlo." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ERROR DE LECTURA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: EL HASH DIFIERE\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: BIEN\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FICHERO [-p PREFIJO]] [FICHERO1 [FICHERO2 ..]]" + +# Miguel: Dicho y hecho. :) +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Calcula o comprueba el hash." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FICHERO [-p PREFIJO]] [FICHERO1 [FICHERO2 ...]]" + +# Miguel: APM se usa en el resto de la traducción. +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Cambia la Gestión Avanzada de Energía (APM en inglés)\n" +"(1=baja, ..., 254=alta, 255=apagada)." + +# Miguel: Es el estado del disco duro, el clásico "suspendido", "activo" +# o "apagado", desconozco si en las herramientas de modificación +# de datos del disco duro se traduce de otro modo. +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Muestra el modo de energía." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Congela las configuraciones de seguridad ATA hasta el reinicio." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Muestra el estado de salud SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Cambia la Gestión Automática de Sonido (AAM en ingés)\n" +"(0=apagado, 128=silencioso, ..., 254=rápido)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Cambia el plazo de finalización del estado de espera\n" +"(0=apagado, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Cambia la unidad a estado de espera." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Cambia la unidad a estado dormido." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Imprime la identidad y la configuración de la unidad." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Muestra el contenido crudo del sector ATA IDENTIFY." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Desactivar/activar SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "No imprime mensajes." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "se esperaba un parámetro" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPCIONES] DISCO" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Obtiene/cambia parámetros del disco ATA." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Uso:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[PATRÓN ..]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Muestra un mensaje de ayuda." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Descarta bytes de desplazamiento del inicio del fichero." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Lee únicamente LONGITUD bytes." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPCIONES] FICHERO_O_DISPOSITIVO" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Muestra el contenido crudo de un fichero o de la memoria." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Muestra el volcado de los contenidos crudos de la CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Comprueba el bit de la CMOS en BYTE:BIT." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Desactiva el bit de la CMOS en BYTE:BIT." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Activa el bit de la CMOS en BYTE:BIT." + +# Miguel: Mantengo coreboot por ser el nombre del "firmware". +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Muestra las estadísticas de tiempo de arranque de coreboot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Enumera las tablas de coreboot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Comprueba si la CPU soporta el modo de 64 bits (predeterminada)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Comprueba si la CPU soporta la Extensión de Direcciones Físicas (PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Comprueba las características de la CPU." + +# Miguel: Mapeado no me gusta mucho, pero tampoco encuentro +# una palabra más adecuada. Esto y hash tienen bastantes puntos para +# poder ser traducidos mejor. +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Muestra los mapeados actuales." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Reinicia todos los mapeados a los valores predeterminados." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Realizar ambos mapeados, directos e inversos." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "No se han remapeado unidades" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "Disco del SO ------> Dispositivo GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] disco_grub disco_so." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Gestiona los mapas de dispositivos de la BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "No usa la APM para detener el ordenador." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Detiene el sistema, si es posible usando la APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "no se encontró la APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versión %u.%u\n" +"32-bit CS = 0x%x, longitud = 0x%x, desplazamiento = 0x%x\n" +"16-bit CS = 0x%x, longitud = 0x%x\n" +"DS = 0x%x, longitud = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Interfaz protegida de 16 bits permitida\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Interfaz protegida de 16 bits no permitida\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Interfaz protegida de 32 bits permitida\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Interfaz protegida de 32 bits no permitida\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Poner en espera a la CPU ralentiza al procesador\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Poner en espera a la CPU no ralentiza al procesador\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM deshabilitada\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM habilitada\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM desactivada\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM activada\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Muestra la información de la APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "se esperaba un nombre de fichero o un tempo y unas notas" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Orden %s no válida.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "fichero «%s» no encontrado" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "número no reconocido" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FICHERO | TEMPO [TONO1 DURACIÓN1] [TONO2 DURACIÓN2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Toca una melodía." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "cambia el modo del teclado numérico" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "cambia el estado de las mayúsculas" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "cambia el estado del bloqueo de desplazamiento" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "cambia el modo de inserción" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "cambia el modo de pausa" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "presione la tecla «Shift» de la izquierda" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "presione la tecla «Shift» de la derecha" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "pulse «Pet Sis»" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "pulse la tecla «Bloq Num»" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "pulse la tecla «Bloq Mayús»" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "pulse la tecla «Bloq Despl»" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "pulse la tecla «Insert»" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "pulse la tecla «Alt»" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "pulse la tecla «Alt Gr»" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "pulse la tecla «Ctrl» de la izquierda" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "pulse la tecla «Ctrl» de la derecha" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "no actualiza el estado de los LED" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[PULSACIÓNDETECLA1] [PULSACIÓNDETECLA2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emula una secuencia de pulsaciones de teclas" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Ejecute «go» para continuar con GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Vuelve a la línea de órdenes IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Guarda el valor leído en la variable NOMBRE_DE_VARIABLE." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "NOMBRE_DE_VARIABLE" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PUERTO" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Lee un valor de 8 bits del PUERTO." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Lee un valor de 16 bits del PUERTO." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Lee un valor de 32 bits del PUERTO." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PUERTO VALOR [MÁSCARA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Escribe el VALOR de 8 bits al PUERTO." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Escribe el VALOR de 16 bits al PUERTO." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "DIRECCIÓN VALOR [MÁSCARA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Escribe el VALOR de 32 bits al PUERTO." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "no se ha fijado la variable «%s»" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Carga una distribución de teclado." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Comprueba la tecla «Shift»." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Comprueba la tecla «Control»." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Comprueba la tecla «Alt»." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Comprueba el estado de los modificadores del teclado." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "no se puede encontrar la orden «%s»" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Introduzca la contraseña: " + +# Miguel: He preferido clarificar legacy con GRUB1, porque +# puede que en el futuro GRUB2 sea también obsoleto aunque no +# se llame GRUB-legacy. +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Procesa la configuración de GRUB1 en el mismo contexto" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Procesa la configuración de GRUB1 en un nuevo contexto" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Procesa la configuración de GRUB 1 en el mismo contexto tomando únicamente " +"las entradas del menú" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Procesa la configuración de GRUB1 en un nuevo contexto tomando únicamente " +"las entradas del menú" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TIPO] FICHERO [PARÁMETRO ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simula la orden «kernel» de GRUB1" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FICHERO [PARÁMETRO ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simula la orden «initrd» de GRUB1" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simula la orden «modulenounzip» de GRUB1" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] CONTRASEÑA [FICHERO]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simula la orden «password» de GRUB1" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simula la orden «pasword» de GRUB1 en modo de entrada de menú" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Especifique el nombre de fichero." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Ignora la comprobación de firma del fichero de entorno." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FICHERO] [-s|--skip-sig] [nombre_de_variable] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Carga variables de un fichero de bloques de entorno." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FICHERO]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Muestra las variables de un fichero de bloques de entorno." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FICHERO] nombre_de_variable [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Guarda las variables a un fichero de bloques de entorno." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Muestra una larga lista con información más detallada." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Imprime los tamaños en un formato legible por un humano." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Enumera todos los ficheros." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Protocolos de red:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FICHERO ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Enumera dispositivos y ficheros." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Muestra únicamente las tablas de la versión 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Muestra únicamente las tablas de las versiones 2 y 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Muestra la información ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM disponible" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM reservada" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM reclamable por ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "Almacenamiento ACPI no volátil en RAM" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM defectuosa (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM con las tablas de coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM con código del firmware" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "dirección_base = 0x%llx, longitud = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "dirección_base = 0x%llx, longitud = 0x%llx, tipo = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Enumerar los mapeados de memoria proporcionados por el firmware." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Enumerar los dispositivos PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Bendice el FICHERO de la partición HFS o HFS+ para macs intel." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Bendice el DIRECTORIO de la partición HFS o HFS+ para macs PPC-" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "DIRECCIÓN" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Lee un valor de 8 bits de DIRECCIÓN." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Lee un valor de 16 bits de DIRECCIÓN." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Lee un valor de 32 bits de DIRECCIÓN." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Escribe el VALOR de 8 bits en DIRECCIÓN." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Escribe el VALOR de 16 bits en DIRECCIÓN." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Escribe el VALOR de 32 bits en DIRECCIÓN." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Tipo de entrada de menú." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "CADENA" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Lista de usuarios con permiso para arrancar con esta entrada." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "USUARIO[,USUARIO]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tecla para arrancar rápidamente con esta entrada." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TECLA" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Usa CADENA como el cuerpo de la entrada del menú." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identificador de la entrada del menú." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Esta entrada puede ser usada por cualquier usuario para arrancar." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOQUE" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Define una entrada en el menú." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Define un sub-menú." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nombre\tNúm Ref.\tDependencias\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Muestra este mensaje." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "DIRECCIÓN [TAMAÑO]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Muestra los contenidos de la memoria." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MÓDULO" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Elimina un módulo." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Muestra los módulos cargados." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Sale de GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "No se encontró ningún CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 en %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"El espacio del sistema de gestión de control del bus I/O está en 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Zócalo de RAM número %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Bytes SPD escritos: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Tamaño total de flash: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Tipo de memoria: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Número de pieza: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Tipo de memoria: Desconocido." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Imprime información de la memoria." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s no soporta UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODULO1 MODULO2 ...]" + +# Miguel: «Switch» es una palabra bastante difícil de traducir al +# castellano... Si alguien tiene una idea mejor estoy abierto a +# opiniones :) +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Utiliza los controladores de disco nativos. Si no se especifíca ningún " +"módulo se utilizará el conjunto por defecto (pata, ahci, usbms, ohci, ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Realiza las ÓRDENES en la partición.\n" +"Use «parttool PARTICIÓN help»' para obtener una lista de las órdenes " +"disponibles." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VALOR" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Lo siento, no hay ningún \"parttool\" disponible para %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "parámetro «%s» desconocido" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTICIÓN ÓRDENES" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "USUARIO CONTRASEÑA" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Cambia la contraseña del usuario (texto plano). No recomendado e inseguro." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "contraseña PBKDF2 no válida" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USUARIO CONTRASEÑA_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Cambia la contraseña del usuario (PBKDF2)." + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Selecciona un dispositivo por ID de fabricante y dispositivo." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[fabricante]:[dispositivo]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Selecciona un dispositivo por su posición en el bus." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[zócalo][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "Falta el símbolo «%c»" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSICIÓN] [-d DISPOSITIVO]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Muestra el volcado en crudo del espacio de configuración PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Cambia una variable al valor devuelto." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Determina el controlador." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Determina el tipo de mapa de particiones." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Determina el tipo del sistema de ficheros." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Determina el UUID del sistema de ficheros." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Determina la etiqueta del sistema de ficheros." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "el sistema de ficheros «%s» no soporta las etiquetas" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DISPOSITIVO" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Obtiene información del dispositivo." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[VARIABLE_DE_ENTORNO]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Cambia la variable a partir de la entrada del usuario." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Reinicia el ordenador." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Almacena la componente correspondiente NÚMERO en VARIABLE." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NÚMERO:]VARIABLE" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "EXPR_REGULAR CADENA" + +# Miguel: Los autómatas finitos aceptan cadenas, ¿hay alguna forma +# menos técnica de decirlo? +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Comprueba si la EXPR_REGULAR acepta la CADENA." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NOMBRE [VARIABLE] [INDICACIONES]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Busca dispositivos por fichero. Si se especifica VARIABLE, se cambiará al " +"primer dispositivo encontrado." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Busca dispositivos por etiqueta. Si se especifica VARIABLE, se cambiará al " +"primer dispositivo encontrado." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Busca dispositivos por UUID. Si se especifica VARIABLE, se cambiará al " +"primer dispositivo encontrado." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Busca dispositivos por fichero." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Busca dispositivos por la etiqueta del sistema de ficheros." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Busca dispositivos por el UUID del sistema de ficheros." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Cambia una variable al primer dispositivo encontrado." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "No prueba ninguna unidad de discos extraíbles." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Prueba primero el dispositivo INDICACIÓN. Si INDICACIÓN termina en una coma, " +"prueba también subparticiones" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "INDICACIÓN" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prueba primero el dispositivo INDICACIÓN si se está corriendo sobre " +"IEEE1275. Si INDICACIÓN termina en una coma, prueba también subparticiones" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prueba primero el dispositivo INDICACIÓN si se está corriendo sobre BIOS. Si " +"INDICACIÓN termina en una coma, prueba también subparticiones" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Prueba primero el dispositivo INDICACIÓN si está permitido el acceso directo " +"al hadware. Si INDICACIÓN termina en una coma, prueba también subparticiones" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prueba primero el dispositivo INDICACIÓN si se está corriendo sobre EFI. Si " +"INDICACIÓN termina en una coma, prueba también subparticiones" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prueba primero el dispositivo INDICACIÓN si se está corriendo sobre ARC. Si " +"INDICACIÓN termina en una coma, prueba también subparticiones" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint INDICACIÓN [--hint INDICACIÓN] ...] NOMBRE" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Busca dispositivos por fichero, la etiqueta del sistema de ficheros o el " +"UUID. En caso de especificar --set, el primer dispositivo encontrado se " +"almacena en una variable. Si no se especifica un nombre de variable se usará " +"«root»." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Registro %x de %x:%02x.%x es %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" +"[-s POSICIÓN] [-d DISPOSITIVO] [-v VARIABLE] REGISTRO[=VALOR[:MÁSCARA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipula dispositivos PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Cuenta atrás prolija." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Permite la interrupción con ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NÚMERO_DE_SEGUNDOS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Espera el número de segundos especificado." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "directorio raiz del disco syslinux [predeterminado=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +#, fuzzy +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"directorio actual de syslinux [por defecto el directorio superior al fichero " +"de entrada]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "considera la entrada como un fichero de configuración isolinux." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "considera la entrada como un fichero de configuración pxelinux." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "considera la entrada como un fichero de configuración syslinux." + +# Miguel: He preferido clarificar legacy con GRUB1, porque +# puede que en el futuro GRUB2 sea también obsoleto aunque no +# se llame GRUB-legacy. +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Ejecuta la configuración de syslinux en el mismo contexto" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Procesa la configuración de syslinux en un nuevo contexto" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Procesa la configuración de syslinux en el mismo contexto tomando únicamente " +"las entradas del menú" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Procesa la configuración de syslinux en un nuevo contexto tomando únicamente " +"las entradas del menú" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "no se ha especificado terminal" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "no se encuentra el terminal «%s»" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Terminales de entrada activos:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Terminales de entrada disponibles:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Terminales de salida activos:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Terminales de salida disponibles:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Selecciona un terminal de entrada o los enumera." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Selecciona un terminal de salida o los enumera." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESIÓN ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Evalúa una expresión." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESIÓN" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Carga el mismo fichero de múltiples formas." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Especifica el tamaño para cada operación de lectura" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "tamaño de bloque no válido" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Tamaño del fichero: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Tiempo transcurrido: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Velocidad: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s TAMAÑO] FICHERO" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Prueba la velocidad de lectura de fichero." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "no se ha especificado una orden" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Tiempo transcurrido: %d.%03d segundos\n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "ORDEN [PARÁMETROS]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Mide el tiempo usado por la ORDEN" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Transcribe a mayúsculas." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Transcribe a minúsculas." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPCIONES] [CONJUNTO1] [CONJUNTO2] [CADENA]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" +"Transcribe los caracteres del CONJUNTO1 a los del CONJUNTO2 en la CADENA." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "No hace nada, con respuesta satisfactoria." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "No hace nada, sin respuesta satisfactoria." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Comprueba el soporte USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Ignora la comprobación de firma del fichero de clave pública." + +# Miguel: (TODO: Unificar con traducción de gnupg) +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "firma incorrecta" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "no se encontró la clave pública %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "el módulo «%s» no está cargado" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FICHERO FICHERO_DE_FIRMA [CLAVE_PÚBLICA]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Verifica la firma extraida." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] CLAVE_PÚBLICA" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Añade CLAVE_PÚBLICA a las claves de confianza." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Muestra las claves de confianza." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_CLAVE" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Elimina ID_CLAVE de las claves de confianza." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Solo texto " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Color en memoria, máscara: %d/%d/%d/%d posición: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Indexado " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 (modo no encadenado de 256 colores) " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monocromo " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Modo de vídeo desconocido " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " comprobación de suma EDID no válida" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " versión EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Modo preferido: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " No hay un modo preferido disponible\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "especificación de modo de vídeo «%s» no válida" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Lista de modos de vídeo admitidos:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Leyenda: máscara/posición=rojo/verde/azul/reservado" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adaptador «%s»:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " No hay información disponible" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " No se pudo inicializar el adaptador de vídeo" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[ANCHOxALTO[xPROFUNDO]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Enumera los modos de vídeo disponibles. Si se proporciona una resolución " +"muestra únicamente los modos que se adecuen a ella." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[ANCHOxALTO]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Prueba el subsistema de vídeo con modo ANCHOxALTO" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Prueba el subsistema de vídeo." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[DIRECTORIO]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Enumera el almacenamiento de Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] UUID_DE_GRUB [VARIABLE]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transforma el UUID de 64 bits a un formato adecuado para XNU. Será en " +"minúsculas si se proporciona -l como hace blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "fallo leyendo sector 0x%llx de «%s»" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "fallo escribiendo sector 0x%llx en «%s»" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Monta por UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Monta todos." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Monta todos los volúmenes con la etiqueta «boot» activada." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "no se puede abrir «%s»: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "no se puede buscar «%s»: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "FUENTE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Monta un dispositivo cifrado." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"No se pudo encontrar el volumen físico «%s». Algunos módulos pueden faltar " +"en la imagen principal." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "no se encontró el volumen físico %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "expiró el plazo leyendo «%s»" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "No se pudo cargar sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "No se pudo cargar sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "no se pudieron leer los metadatos ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "versión o número mágico ELI erroneos" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Intentando descifrar la clave principal..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Introduzca la clave para %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Abierto zócalo %d\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "intento de leer o escribir fuera del disco «%s»" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "no se puede escribir en el CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Los controladores de disco nativos están en uso. Rechazando usar la interfaz " +"de disco del firmware." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"su Partición de Embebido de su LDM es demasiado pequeña; el embebido no será " +"posible" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "este LDM no tiene Partición de Embebido; el embebido no será posible" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Borra la unidad de imagen en memoria especificada." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] NOMBRE_DE_DISPOSITIVO FICHERO." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Crea una unidad virtual a partir de un fichero." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "la reubicación 0x%x no está implementada todavía" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "ninguna tabla de símbolos" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "este fichero ELF no es del tipo adecuado" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Carga e inicializa el emulador EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Termina de cargar el emulador EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Descarga el emulador EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "no se ha encontrado el símbolo «%s»" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Fuentes cargadas:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FICHERO..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Especifique uno o más ficheros de fuentes a cargar." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Enumera las fuentes cargadas." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "demasiada profundidad de enlaces simbólicos" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "intento de leer más allá del fin del fichero" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"no se pudo encontrar el dispositivo miembro necesario de un sistema de " +"ficheros multidispositivo" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "no es un directorio" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "no es un fichero normal" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"su core.img es extraordinariamente grande. No entrará en el área de embebido" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "nombre de fichero «%s» no válido" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "falló la verificación de la suma de comprobación" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "no hay ninguna clave de descifrado disponible" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "falló la verificación MAC" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Asume que la entrada es raw." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Asume que la entrada es hex." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Asume que la entrada es una clave." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Introduzca la clave ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FICHERO]" + +# Miguel: ¿Alguien que controle ZFS? +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importa una clave de cobertura ZFS almacenada en el FICHERO." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "El dispositivo virtual se ha retirado" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "El dispositivo virtual ha fallado" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "El dispositivo virtual está desconectado" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "El dispositivo virtual está degradado (falta algún componente)" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "El dispositivo virtual está conectado" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Dispositivo virtual incorrecto: ningún tipo disponible" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Dispositivo hoja virtual (fichero o disco)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Ruta de arranque: no disponible\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Ruta de arranque: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Ruta: no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Ruta: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Identificador de dispositivo: no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Identificador de dispositivo: %s\n" + +# Miguel: Mantengo VDEV por desconocimiento de las traducciones de ZFS. +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Este VDEV es un espejo." + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Este VDEV es un RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "VDEV incorrecto" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV con %d hijos\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "El elemento VDEV número %d no está correcto\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Elemento VDEV número %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Tipo de dispositivo virtual desconocido: %s\n" + +# Miguel: Con más razón, ¿alguien que use ZFS? +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Estado del \"pool\": activo" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Estado del \"pool\": exportado" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Estado del \"pool\": destruido" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Estado del \"pool\": reservado para arranque rápido" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Estado del \"pool\": dispositivo ARC de nivel 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Estado del \"pool\": no inicializado" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Estado del \"pool\": no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Estado del \"pool\": potencialmente activo" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Nombre del \"pool\": no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Nombre del \"pool\": %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID del \"pool\": no disponible" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID del \"pool\": %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Imposible obtener el estado del \"pool\"" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Estado del \"pool\" no reconocido" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Ningún árbol de dispositivos virtuales disponible" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Imprime información ZFS acerca del DISPOSITIVO." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "SISTEMA_DE_FICHEROS [VARIABLE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Imprime ZFS-BOOTFSOBJ o lo almacena en la VARIABLE" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Conecte ahora el depurador remoto, por favor." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Inicia el soporte de GDB en el puerto proporcionado" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Salta (con un punto de parada) a GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Para el soporte de GFB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "fin prematuro del fichero" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Traduce la cadena con las opciones actuales." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Pulse «Intro» para arrancar el SO seleccionado, «e» para editar las órdenes " +"antes de arrancar o «c» para una línea de órdenes. «ESC» para volver al menú " +"anterior." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Pulse «Intro» para arrancar el SO seleccionado, «e» para editar los órdenes " +"antes de arrancar o «c» para una línea de órdenes." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "intro: arrancar, «e»: opciones, «c»: línea de órdenes" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "La entrada marcada se ejecutará automáticamente en %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "faltan %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d s" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Menú de arranque de GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: el valor %s es menor o igual que %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: El parámetro ARGP_HELP_FMT necesita un valor" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: El parámetro ARGP_HELP_FMT debe ser positivo" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Parámetro ARGP_HELP_FMT desconocido" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Incongruencia en ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Los argumentos obligatorios u opcionales para las opciones largas son " +"también obligatorios u opcionales para las opciones cortas correspondientes." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " o: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPCIÓN...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Pruebe «%s --help» o «%s --usage» para más información.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Notifique errores a %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Error desconocido del sistema" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "proporciona esta lista de ayuda" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "proporciona un mensaje corto sobre el uso" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NOMBRE" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "cambia el nombre del programa" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEGUNDOS" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "espera durante SEGUNDOS segundos (predeterminado 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "imprime la versión del programa" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ERROR DEL PROGRAMA) ¿¡Ninguna versión conocida!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Demasiados parámetros\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERROR DEL PROGRAMA) ¿¡Deberían haberse reconocido las opciones!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: la opción «%s» es ambigua; posibilidades:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: la opción «--%s» no permite un parámetro\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: la opción «%c%s» no permite un parámetro\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: la opción «--%s» necesita un parámetro\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opción «--%s» no reconocida\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opción «%c%s» no reconocida\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opción no válida -- «%c»\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: la opción necesita un parámetro -- «%c»\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: la opción «-W %s» es ambigua\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: la opción «-W %s» no permite un parámetro\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: la opción «-W %s» necesita un parámetro\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Éxito" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Ninguna coincidencia" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expresión regular no válida" + +# Miguel: Robando traducción de Christian Othón en gawk. ;) Gracias. +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Carácter de ordenación inválido" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nombre de clase de carácter no válido" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barra invertida extra al final" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referencia pasada no válida" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ o [^ desemparejado" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( o \\( desemparejado" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ desemparejado" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contenido de \\{\\} no válido" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Fin de rango no válido" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memoria agotada" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Expresión regular predecesora no válida" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fin prematuro de la expresión regular" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expresión regular demasiado grande" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") o \\) desemparejado" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "error de expresiones regulares desconocido" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Ninguna expresión regular previa" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hola mundo" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Dice «Hola mundo»." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "intento de buscar fuera del fichero" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "formato de gzip no soportado" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "fichero lzop corrupto" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "fichero xz corrupto u opciones de bloque no soportadas" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "número mágico ELF dependiente de la arquitectura no válido" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[VARIABLE_DE_ENTORNO=VALOR]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Cambia una variable de entorno." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "VARIABLE_DE_ENTORNO" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Elimina una variable de entorno." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[PARÁMETRO]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Enumera dispositivos o ficheros." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Inserta un módulo." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disco «%s» no encontrado" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "intento de leer o escribir fuera de la partición" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "número mágico independiente de la arquitectura ELF no válido" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "el número de dispositivos supera el límite" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "no se puede escribir en «%s»: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"La entrada «%s» de device.map no es válida. Ignorándola. Por favor, " +"corríjala o bórrela de su device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"El nombre de unidad «%s» en device.map es incorrecto. Usando %s. Por favor, " +"use el formato [hfc]d[0-9]* (Por ejemplo: «hd0» o «cd»)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "no se puede abrir «%s»: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NOMBRE_DE_DISPOSITIVO" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Cambia el dispositivo raíz." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "usa el FICHERO como el mapa de dispositivos [predeterminado=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +#, fuzzy +msgid "use FILE as memdisk" +msgstr "embebe el FICHERO como una imagen de disco de memoria" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "usa los ficheros de GRUB del directorio DIRECTORIO [predeterminado=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "imprime mensajes prolijos." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "espera hasta que se una un depurador" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Parámetro extra «%s» desconocido." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Emulador de GRUB." + +# Miguel: Estra traducción no me acaba de gustar... :( +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Error procesando los parámetros de la línea de órdenes\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Ejecute «gdb %s %d», y cambie ARGS.HOLD a cero.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: aviso:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: información:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: error:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "el fichero «%s» es demasiado grande" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "sistema de ficheros desconocido" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Falló al apagar" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Falló al salir" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "desbordamiento detectado" + +# Miguel: Las tablas de partición BSD están embebidas en una +# partición tradicional. Desconozco si existe un termino ampliamente +# aceptado para "nested" en este caso. +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Descartando partición impropiamente embebida (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Orden «%s» desconocida.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Muestra esta ayuda y finaliza." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Muestra el uso de esta orden y termina." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "falta una opción obligatoria para «%s»" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "el parámetro «%s» necesita un entero." + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "se asignó un valor al parámetro «%s» cuando no lo requiere" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Imprime pila de llamadas" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "¡GRUB todavía no sabe como parar esta máquina!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "El servidor predeterminado es ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "especificación de color «%s» no válida" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Falló el reinicio" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" +"un árbol de dispositivos debe ser suministrado (véase la orden «devicetree»)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "zImage no válida" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "árbol de dispositivos no válido" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Carga Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Carga initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Carga un fichero DTB (árboles de dispositivos)." + +#: grub-core/loader/arm64/linux.c:57 +#, fuzzy +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"núcleo Image a secas no soportado - reconstruyalo con CONFIG_(U)EFI_STUB " +"activado" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "se debe cargar primero el núcleo" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, con el hipervisor Xen" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Carga un módulo." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPCIONES]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Arranca un sistema basado en BIOS." + +# Miguel: "Chainload" lo he traducido como salto a otro cargador +# de arranque, es el concepto más cercano que se me ocurre. +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Salta a otro cargador de arranque." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Muestra la salida en todas las consolas." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Usa la consola serie." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Pregunta por un nombre de fichero para reiniciar desde él." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Usa el CD-ROM como raíz." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Invoca la configuración de encaminado del usuario." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Entra en el KDB al arrancar." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Usar el depurador remoto de GDB en vez de DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Desactiva toda la salida durante el arranque." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Espera una pulsación de tecla después de la impresión de cada línea." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Usa el dispositivo raíz compilado internamente." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Arranca en modo no-multiusuario (single)." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Arranca con mensajes prolijos." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "No reinicia, simplemente apaga." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Cambia los dispositivos configurados." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comNÚMERO[,VELOCIDAD]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Deshabilita SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Deshabilita ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "No muestra mensajes de diagnóstico del arranque." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Arranca con mensajes de depuración." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Silencia la salida normal (los avisos permanecen)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[DIRECCION|comNÚMERO][,VELOCIDAD]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nombre" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tipo" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "dirección" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "tamaño" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Arrancando en modo ciego" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Carga el núcleo de FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Carga el núcleo de OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Carga el núcleo de NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Carga el entorno de FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Carga un módulo del núcleo de FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Carga un módulo del núcleo de NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Carga módulo del núcleo de NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Carga módulo del núcleo de FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Carga una imagen de memoria de kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Carga otro \"payload\" de coreboot." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "El parámetro de GRUB1 «ask» ya no está soportado." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "%s está obsoleto. Use «set gfxpayload=%s» antes de la orden «linux».\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s está obsoleto. No se reconoce el modo VGA %d. Use «set " +"gfxpayload=ANCHOxALTO[xPROFUNDO] antes de la orden «linux»\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FICHERO" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "el tamaño de «%s» es demasiado grande" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Carga el kernel.sys de FreeDOS." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Carga NTLDR o BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Fuerza el mapeado de dispositivos de Plan9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "DISPOSITIVOGRUB=DISPOSITIVOPLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "NÚCLEO PARÁMETROS" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Carga el núcleo de Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Carga una imagen PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Carga una ISO Truecrypt." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd ya está cargado" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Carga un módulo." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Pulse cualquier tecla para lanzar xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Carga un volcado de «device-properties»." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "No se ha podido encontrar el controlador de FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "El protocolo FPSWA no pudo encontrar la interfaz" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "No se ha encontrado ningún FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Revisión de FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FICHERO [PARÁMETROS...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Muestra la versión de FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "AVISO: no habrá ninguna consola disponible para el SO" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Carga un núcleo «multiboot 2»." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Carga un módulo «multiboot 2»." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Carga un núcleo «multiboot»." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Carga un módulo «multiboot»." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Modo de imagen de fondo. (Entre paréntesis su traducción)" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(estirada)|normal(en la esquina superior izquierda)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Carga una imagen de XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Carga una imagen de 64 bits de XNU." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Carga un paquete de extensión XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Carga una extensión XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIRECTORIO [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Carga un directorio de extensión XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Carga un disco de memoria de XNU. Estará disponible en el SO como md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Carga una imagen de inicio para XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Carga una imagen de XNU hibernado." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "DIRECCIÓN1,MÁSCARA1[,DIRECCIÓN2,MÁSCARA2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Declara regiones de memoria como defectuosas (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "DE[K|M|G] A[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Elimina cualquier región de memoria en el rango especificado." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "se esperaban cuatro argumentos" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "interfaz de red «%s» no reconocida" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "no se ha encontrado información DHCP" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "no se han encontrado opciones DHCP" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "no se ha encontrado la opción DHCP %d" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "especificación de formato de opción DHCP «%s» no reconocida" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "no se han encontrado tarjetas de red" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "no se pudo auto-configurar %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[TARJETA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "realizar una autoconfiguración de bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VARIABLE INTERFAZ NÚMERO DESCRIPCIÓN" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"obtiene la opción DHCP y la almacena en VARIABLE. Si VARIABLE es «-» se " +"imprime el valor." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "no se han configurado servidores DNS" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "la componente del nombre de dominio es demasiado larga" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "no se ha encontrado ningún registro DNS" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "no se ha recibido ninguna respuesta DNS" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "sólo ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "sólo ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "preferir ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "preferir ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "parámetro no válido" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "DIRECCIÓN SERVIDOR_DNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Realiza una busqueda DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "SERVIDOR_DNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Añade un servidor DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Elimina un servidor DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Enumera los servidores DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "no se pudo enviar el paquete por la red" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "Interfaz protegida de 16 bits permitida\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "respuesta HTTP no soportada" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "error HTTP %d no soportado: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "expiró el plazo abriendo «%s»" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "expiración del plazo: no se pudo resolver la dirección hardware" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "dirección %s irresoluble" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "dirección de red «%s» no reconocida" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "destino no alcanzable" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "ruta cíclica detectada" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "dirección no encontrada" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "no puede borrar esta dirección" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Tipo de dirección hardware %d no soportado\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Tipo de dirección %d no soportado\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "se esperaban tres parámetros" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "tarjeta no encontrada" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporal" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Tipo de dirección %d desconocido\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "no se ha especificado un servidor" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "expiró el plazo leyendo «%s»" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "NOMBRE_CORTO TARJETA DIRECCIÓN [DIRECCIÓN_HW]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Añade una dirección de red." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[TARJETA [DIRECCIÓN_HW]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Realiza una autoconfiguración IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "NOMBRE_CORTO" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Borra una dirección de red." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "NOMBRE_CORTO RED [INTERFAZ| gw PASARELA]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Añade una ruta de red." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Borra una ruta de red." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "enumera las rutas de red" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "enumera las tarjetas de red" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "enumera las direcciones de red" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "conexión rechazada" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "conexión expirada" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Introduzca el nombre de usuario: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[LISTA_DE_USUARIOS]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Comprobar si el usuario está en la LISTA_DE_USUARIOS." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Las órdenes posibles son:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Los dispositivos posibles son:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Los ficheros posibles son:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Las particiones posibles son:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Los parámetros posibles son:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Objetos posibles:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Aviso: error de sintaxis (falta una barra) en «%s»\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Aviso: color de principal «%s» no válido\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Aviso: color de fondo «%s» no válido\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "VARIABLE_DE_ENTORNO [VARIABLE_DE_ENTORNO] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Exporta variables." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Domingo" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Lunes" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Martes" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Miércoles" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Jueves" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Viernes" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Sábado" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "el módulo no está cargado" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB versión %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Se puede salir en cualquier momento pulsando «ESC»." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Se soporta una edición de línea mínima al estilo de BASH. «TAB» enumera las " +"posibles órdenes a completar para la primera palabra. En cualquier otro lado " +"«TAB» muestra una lista de posibles dispositivos o ficheros a completar. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr "es>" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub_es>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Limpia la pantalla." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Entrar en el modo normal." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Salir del modo normal." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Presione cualquier tecla para continuar..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Arrancando «%s»" + +# Miguel: He traducido "fallback" por entrada de reserva, +# puesto que en el menú se puede seleccionar una entrada por +# si falla la predeterminada. +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Arrancando la entrada de reserva «%s»" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "No se pudo arrancar la entrada predeterminada ni la de reserva.\n" + +# Miguel: Prefier añadir la preposición «con» para especificar que se usa, +# lo que el usuario ve que arranca es el sistema operativo normalmente. +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Arrancando con una lista de órdenes" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Se soporta una edición de pantalla mínima al estilo de Emacs. «TAB» enumera " +"las posibles palabras a completar. Pulse «Ctrl-x» o «F10» para arrancar, " +"«Ctrl-c» o «F2» para una línea de órdenes o «ESC» para descartar las " +"ediciones y volver al menú de GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Use las teclas %C y %C para seleccionar la entrada marcada." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partición %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Dispositivo %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "No se puede acceder al sistema de ficheros" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Sistema de ficheros de tipo %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etiqueta «%s»" + +# Miguel: La fecha se muestra en el formato usado habitualmente en +# castellano: "día/mes/año", la hora se mantiene igual y el día de +# la semana se pasa al principio. +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "" +"- Fecha de la última modificación %7$s %3$02d/%2$02d/%1$d %4$02d:%5$02d:" +"%6$02d" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "No se han detectado sistemas de ficheros conocidos" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - La partición comienza en %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Tamaño del sector %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Tamaño total desconocido" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Tamaño total %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +# Madre, yo al oro me humillo, +# él es mi amante y mi amado, +# pues de puro enamorado +# de continuo anda amarillo... +# (Fco. de Quevedo) +# +# Ah, creo que no se referían a esto... ;) +# En serio, ¿como puede dar para más de una línea? +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MÁS--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "no se puede abrir el fichero de configuración «%s»: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "no hay compresión disponible en su plataforma" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "no hay rutinas IEEE1275 disponibles para su plataforma" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "no hay rutinas EFI disponibles para su plataforma" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "no hay rutinas SGI disponibles para su plataforma" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "no hay disponible un generador de números aleatorios para su SO" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "No se pudo crear el árbol de «device-mapper»" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "no se puede montar el volumen cifrado «%s»: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "no se pudo abrir «geom»" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "no se pudo encontrar el cliente «geli»" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "no se pudo obtener el UUID «geli»" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "no se pudo encontrar la clase «part» de «geom»" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "tamaño de dispositivo desalineado" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "intentado leer la imagen principal «%s» de GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "intentado leer de nuevo la imagen principal «%s» de GRUB" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "no se puede leer «%s» correctamente" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "falló la lectura de sectores de la imagen principal" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"no se pudo obtener la línea de órdenes del traductor para la ruta «%s»: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "la línea de órdenes del traductor está vacía para la ruta «%s»" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"el traductor «%s» tiene varias palabras que no son opciones para la ruta " +"«%s», al menos «%s» y «%s»" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"el traductor «%s» tiene únicamente opciones para la ruta «%s», no se pudo " +"encontrar el parámetro del dispositivo" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "La información de almacenamiento para «%s» no incluye el tipo" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "«%s» no es un disco local" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"La información de almacenamiento para «%s» no indica ni una partición ni un " +"disco" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "no se pudieron obtener las listas de bloques: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "el tamaño de bloque no es divisible por 512" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "tamaño de bloque no válido" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "no se pudieron obtener las listas de bloques" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "error en ioctl RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "versión de RAID no soportada: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "error de ioctl GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "error de ioctl GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "No se pudo abrir el flujo de %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "Dispositivo de RAID «%s» de tipo desconocido" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"no se encontró 'obppath' en los directorios superiores a %s, no se ha " +"descubierto ningún nombre IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "no se pudo obtener la ruta canónica de «%s»" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "tipo de dispositivo %s desconocido\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Uso: %s DISPOSITIVO\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "No se pudo bifurcar (fork) el proceso: %s" + +# Miguel: Tanto pipe como fork se usan bastantes, además +# he leido algún comentario sobre discusiones sobre fork en +# otras traducciones (¿o era stat?), así que he optado por especificar +# el término inglés entre paréntesis. Cualquier idea es bienvenida. +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "No se pudo crear una tubería (pipe): %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "no se puede restituir el directorio original" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "no se puede hacer stat() sobre «%s»: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "no se pudo crear el fichero temporal: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "no se pudo crear el directorio temporal: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"No se pudo encontrar la ruta del árbol de dispositivos de IEEE1275 para %s.\n" +"Tendrá que fijar la variable «boot-device» manualmente." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: no encontrado" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"«nvsetenv» falló.\n" +"Tendrá que fijar la variable «boot-device» manualmente. Escriba en la línea " +"de órdenes IEEE1275:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Tendrá que fijar «SystemPartition» and «OSLoader» manualmente." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "ninguna barra «/» en el nombre canónico del fichero" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "falló cygwin_conv_path()" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "no se pudieron obtener datos aleatorios" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Privilegios insuficientes para acceder al firmware, asumiendo BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "las rutinas EFI no están disponibles cuando se ejecuta en modo BIOS" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "error EFI inesperado" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "No se pudo encontrar una ranura BootNNNN disponible" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"esta etiqueta de partición GPT no contiene ninguna Partición de Arranque " +"BIOS; el embebido no será posible" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"su Partición de Arranque BIOS es demasiado pequeña; el embebido no será " +"posible" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"El sector %llu está actualmente en uso por el controlador raid «%s»; " +"evitándolo. Por favor, pida al fabricante que no almacene datos en el " +"espacio posterior al sector de arranque." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"El sector %llu está actualmente en uso por el programa «%s»; evitándolo. " +"Este programa puede causar problemas de arranque o de otro tipo en el " +"futuro. Por favor, pida a los autores que no almacenen datos en la pista de " +"arranque." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"otro programa está usando el área de embebido, y no hay espacio suficiente " +"para core.img. Dicho programa intenta almacenar datos habitualmente " +"evitando ser detectado. Le recomendamos que investigue" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"esta etiqueta de partición de tipo msdos no tiene espacio después del sector " +"de arranque; el embebido no será posible" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"su área de embebido es extraordinariamente pequeña. core.img no entrará en " +"ella." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Cambia una partición a activa" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "no es una partición primaria" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "La partición %d ahora es activa. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Desactivada la marca de activa en %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Cambia el tipo de partición" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Cambia la etiqueta «hidden» en el tipo de partición" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "el tipo de partición 0x%x no es válido" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Cambiando el tipo de partición a 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "no se puede salir de 0 bucles" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "fuera del cuerpo de una función" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "nombre de variable «%s» no válido" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "final de fichero inesperado" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NÚMERO]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Sale de bucles" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Continúa bucles" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Rota los parámetros posicionales." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALOR]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Cambia los parámetros posicionales." + +# Miguel: Tengo que mirar también las traducciones de Bash... +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Vuelve de una función." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FICHERO" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Carga la imagen de fondo para el terminal activo." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COLOR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Cambia el color de fondo para el terminal activo." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Muestra los contenidos de la consola CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Establece la unidad serie." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Establece la dirección del puerto serie." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Establece la velocidad del puerto serie." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Establece la longitud de palabra del puerto serie." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Establece la paridad del puerto serie." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Establece los bits de parada del puerto serie." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Establece la frecuencia base." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Activa/desactiva RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "Puerto serie «%s» no encontrado" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "control de flujo del puerto serie no soportado" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPCIONES...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Configura puerto serie." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "tipo de «terminfo» «%s» desconocido" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "UTF-8 visualmente ordenado" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Codificación desconocida" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Tipos actuales de «terminfo»:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "El terminal es únicamente ASCII [predeterminado]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "El terminal es UTF-8 lógicamente ordenado." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "El terminal es UTF-8 visualmente ordenado." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "El terminal ha especificado su geometría." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ANCHURAxALTURA." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "especificación incorrecta de las dimensiones del terminal" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "no se ha encontrado el terminal %s o no es manejado por «terminfo»" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g ANCHOxALTO] TERMINAL [TIPO]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Establece el tipo del TERMINAL de «terminfo» en TIPO.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Imprime y ejecuta el bloque pasado como parámetro." + +# Miguel: Imágen visual, si produce alguna confusión con +# fichero imágen (de disco, por ejemplo) se puede cambiar por +# mapa de bits. +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "no está soportado el formato de la imágen «%s»" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" +" Información VBE: versión: %d.%d Revisión del software del vendedor: %d." +"%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " memoria total: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "no se encontró un modo de vídeo apropiado" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "acceso denegado" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MÓDULOS" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "pre-carga los módulos MÓDULOS especificados" + +# Miguel: Será all o todas? +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "instala únicamente MODULOS y sus dependencias [predeterminado=all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEMAS" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "install TEMAS [predeterminado=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "FUENTES" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "install FUENTES [predeterminado=%s]" + +# Miguel: ¿¿LOCALES?? +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LOCALES" + +# Miguel: ¿¿LOCALES?? +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "instala únicamente LOCALES [predeterminado=all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "comprime los ficheros de GRUB [opcional]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "selecciona la compresión a usar para la imagen principal" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" +"usa imágenes y módulos en el DIRECTORO [predeterminado=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "usa las traducciónes en el DIRECTORO [predeterminado=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "usa los temas en el DIRECTORO [predeterminado=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "embebe el FICHERO como una clave pública para comprobación de firmas" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "no se pudo renombrar el fichero %s a %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "no existe el disco, por lo que se usa la partición de reserva %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Órdenes:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Crea un fichero de bloques de entorno limpio." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Enumera las variables actuales." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NOMBRE=VALOR ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Cambia variables." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NOMBRE ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Borra variables." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opciones:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Se debe especificar al menos una orden.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FICHERO ORDEN" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Herramienta para editar bloques de entorno." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Si FICHERO es «-», el valor por defecto %s es usado.\n" +"\n" +"No existe la orden «borrar»; si quiere borrar el bloque de entorno entero\n" +"use «rm %s»." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "bloque de entorno no válido" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "parámetro %s no válido" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "bloque de entorno demasiado pequeño" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "la lectura del disco falló en el desplazamiento %lld, longitud %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "valor de desplazamiento %lld no válido" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "error de lectura en el desplazamiento %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "no se puede abrir el fichero del SO «%s»: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "no se puede escribir en la salida estándar: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "falló la comparación en el desplazamiento %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "error de apertura en el fichero del SO %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "la orden «loopback» ha fallado: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "la orden «cryptmount» ha fallado: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "no se pudo obtener el UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls RUTA" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Enumera los archivos en la RUTA. " + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FICHERO LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Copia el FICHERO al fichero local LOCAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FICHERO" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Copia el FICHERO a la salida estándar." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FICHERO LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Compara el FICHERO con el fichero local LOCAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FICHERO" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Muestra los contenidos del FICHERO en hexadecimal." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FICHERO" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Obtiene una comprobación de suma crc32 del FICHERO." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FICHERO" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Muestra una lista de bloques del fichero." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid DISPOSITIVO" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Calcula el UUID de XNU del dispositivo." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NÚMERO" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Salta N bytes del archivo de salida." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Maneja N bytes del fichero de salida." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Especifica el número de ficheros de entrada." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Cambia la variable de entorno de depuración." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Monta un dispositivo cifrado." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FICHERO|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "No se pudo cargar la clave de cifrado de zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Descomprime datos." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Número de discos no válido.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "El número de discos debe preceder a la lista de discos.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Ninguna orden especificada.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Parámetros insuficientes para la orden.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Orden %s no válida.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "RUTA_DE_LA_IMAGEN ÓRDENES" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Herramienta de depuración para controladores de sistemas de archivos." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "establece el fichero de entrada para la partición de 32 bits." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "establece el fichero de entrada para la partición de 64 bits." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "establece el nombre del archivo de salida. El predeterminado es STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPCIONES]" + +# Miguel: Traducción libre, lo se. ¿Alguna que suene mejor en castellano? +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Une en un archivo extendido de Apple los ejecutables de 32 y 64 bits." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Falta un archivo de entrada\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "no se puede copiar «%s» a «%s»: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "no se puede comprimir «%s» en «%s»" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "no se puede abrir el directorio «%s»: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "no se puede borrar «%s»: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "«grub-mkimage» está compilado sin soporte para XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Formato de compresión %s desconocido" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Compresión «%s» no reconocida" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "formato objetivo %s desconocido\n" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "no se puede encontrar la localización «%s»" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s no existe. Por favor, especifique --target o --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "fichero modinfo «%s» no válido" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Plataforma «%s-%s» desconocida" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "¿Más de un dispositivo de instalación?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"instala las imágenes de GRUB bajo el directorio DIRECTORIO/%s en vez de en " +"el directorio %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "OBJETIVO" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, fuzzy, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "instala GRUB para la plataforma OBJETIVO [predeterminado=%s]" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"hace que la unidad sea arrancable como disco extraíble (predeterminado para " +"dispositivos fdX). Puede provocar fallos en algunas BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "borra el mapa de dispositivos si existe" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "instala aunque se encuentren problemas" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" +"usa el fichero de identificación, incluso aunque el UUID esté disponible" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"módulo de disco a usar (biosdisk o native). Esta opción únicamente está " +"disponible en objetivos con BIOS." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"no actualiza las variables de la NVRAM «boot-device/Boot*». Esta opción está " +"únicamente disponible en los objetivos con EFI o IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "no busca sistemas de ficheros en DISPOSITIVO" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "no instala el sector de arranque" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +" No aplicar ningún código reed-solomon cuando se embebe core.img. Esta " +"opción únicamente está disponible en objetivos x86 con BIOS." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"el dispositivo de instalación es extraíble. Esta opción únicamente está " +"disponible en EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "IDENTIFICADOR" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"el IDENTIFICADOR del cargador de arranque. Esta opción únicamente está " +"disponible en EFI y Macs." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "usa DIRECTORIO como la raíz de la partición del sistema EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "usa DIRECTORIO para la instalación de MAC PPC." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "usa FICHERO como fuente para la etiqueta" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "usa el COLOR para la etiqueta" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "usa el COLOR para el fondo de la etiqueta" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "Usa CADENA como versión del producto" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPCIÓN] [DISPOSITIVO_DE_INSTALACIÓN]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Instala GRUB en su dispositivo." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"DISPOSITIVO_DE_INSTALACIÓN debe ser el nombre del sistema de un " +"dispositivo.\n" +"%s copia las imágenes de GRUB en %s. En algunas plataformas, también puede " +"instalar GRUB en el sector de arranque." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "la unidad %s está definida varias veces en el mapa de dispositivos %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Imposible determinar su plataforma. Use --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Instalando para plataforma %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "no se ha especificado el dispositivo de instalación" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "no se puede encontrar el directorio EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "no se pudo encontrar un dispositivo para %s (¿está montado /dev?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"no se pudo encontrar una unidad de GRUB para %s. Compruebe su device.map" + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s no parece una partición EFI.\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Has encontrado un error" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "el sistema de ficheros en %s no es HFS ni HFS+" + +#: util/grub-install.c:1273 +#, fuzzy, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"se intentó intalar en un disco cifrado sin habilitar cpytodisc. Fije «%s» en " +"el fichero «%s»." + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "No se pudo crear el fichero: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"no hay indicaciones disponibles para su plataforma. Espere un rendimiento " +"reducido" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NO EJECUTANDOSE: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "la partición seleccionada no es una partición PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "no se ha podido copiar Grub a la partición PReP" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"La partición PReP no está vacía. Si está seguro de que desea usarla, ejecute " +"dd para limpiarla: «%s»" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "No se ha especificado el identificador EFI del cargador de arranque." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" +"AVISO: no se ha realizado una instalación específica para la plataforma" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Instalación terminada. No se notificó ningún error." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bendice para macs basados en x86" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bendice para macs basados en ppc" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "No se ha especificado una ruta o un dispositivo.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc RUTA|--x86 FICHERO" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Bendición estilo Mac sobre HFS o HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Uso: %s [FICHERO_DE_ENTRADA [FICHERO_DE_SALIDA]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Error de Freetype %d cargando el símbolo 0x%x para U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (altura de minúsculas)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (margen izquierdo)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (margen derecho)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Sustitución fuera de rango (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Búsqueda fuera de rango: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Tipo de sustitución no soportado: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Especificación de sustitución no soportada: %d\n" + +# Miguel: No tengo mucha idea de esto, ¿alguien tiene mejor +# conocimiento de Unicode sobre este asunto? +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Especificación de cobertura no soportada: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "AVISO: parámetros de características de fuente no soportados: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "almacena la salida en FICHERO [requerida]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "seleccione el índice de la tipografía" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "DE-A[,DE-A]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "cambia el rango de fuentes" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "cambia el nombre de la familia tipográfica" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "TAMAÑO" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "cambia el tamaño de las fuentes" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "cambia el espacio inferior entre líneas" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "cambia el espacio superior entre líneas" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "convertir a fuente en negrita" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "fuerza auto-indicaciones" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "deshabilita indicaciones" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignora los mapas de bits existentes al cargar" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "rango de fuentes no válido" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPCIONES] FICHEROS_DE_FUENTES" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Convierte formatos de ficheros de fuentes comunes a PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "el fichero de salida debe ser especificado" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "falló FT_Init_FreeType" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "no se puede abrir el fichero %s, índice %d: error %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" +"no se pudo establecer en %dx%d el tamaño de la fuente: Error Freetype %d: %s" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "cambia el directorio prefijo [predeterminado=%s]" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"embebe el FICHERO como una imagen de disco de memoria\n" +"Implica «-p (disco_de_memoria)/boot/grub» y se impone sobre cualquier " +"prefijo anteriormente proporcionado, pero el prefijo puede ser modificado " +"por opciones posteriores" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "embebe el FICHERO como una configuración temprana" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "añade un segmento «NOTE» para el CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "imprimir la imagen generada en el FICHERO [predeterminado=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMATO" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "genera una imagen en el FORMATO deseado" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "formatos disponibles:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "formato objetivo %s desconocido\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPCIÓN]... [MÓDULOS]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Genera una imagen arrancable de GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "No se ha especificado el formato objetivo (use la opción -O)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "No se ha especificado el formato objetivo (use la opción -O)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"«%s» está mal compilado: su dirección de inicio es 0x%llx en vez de 0x%llx: " +"¿error en ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "establece el fichero de salida. El predeterminado es STDOUT" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Identificador de tecla %s desconocido\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Código de tecla 0x%02x desconocido\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"ERROR: no se ha encontrado ninguna distribución de teclado válida. Compruebe " +"la entrada.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" +"Genera una distribución de teclado de GRUB a partir de una de consola de " +"Linux." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "directorio raíz del servidor TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "directorio relativo en el servidor de red" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Prepara las imágenes de arranque en red de GRUB en directorio_red/" +"subdirectorio asumiendo que directorio_red es la raiz de TFTP." + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "plataforma %s no soportada\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Creado directorio «Netboot» para %s. Configure su servidor DHCP para que " +"apunte a %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Número de iteraciones PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Longitud del hash generado" + +# Miguel: De nuevo a vueltas con el hash. 'Salt' es un número o +# una cadena aleatoria que se añade para aumentar el tamaño de +# los datos a cifrar/calcular el hash. +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Longitud del 'salt'" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Genera un hash de contraseña PBKDF2." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "falló al leer la contraseña" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Reintroduzca la contraseña: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "las contraseñas no coinciden" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "no se pudieron obtener datos aleatorios para el «salt»" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "error criptográfico número %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "El hash PBKDF2 de su contraseña es %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "No se ha especificado ninguna ruta.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "RUTA" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Transforma un nombre de fichero del sistema en uno de GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "almacena las imagenes ROM en el DIRECTORIO [opcional]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "usar FICHERO como xorriso [opcional]" + +# Miguel: FIXME!! +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "usa la CADENA como nombre de producto" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"activa el arranque sparc. Deshabilita HFS+, APM, ARCS y el arranque como una " +"imágen de disco para i386-pc" + +# Miguel: ¿La ordenación de los bytes en castellano tiene un nombre más +# corto? +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"habilíta el arranque ARCS (máquinas mips «big-endian», principalmente SGI). " +"Deshabilita HFS+, APM, sparc64 y el arranque como una imágen de disco en " +"i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Crea una imagen arrancable de GRUB desde CD-ROM, disco duro y extraíble." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Fenera una imagen arrancable de CD/USB/disquete. Otros parámetros además de " +"las opciones de este programa son pasados a xorriso, e indican los ficheros " +"y directorios fuente, o las opciones de mkisofs enumeradas por en la salida " +"de «%s»." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "La opción -- cambia al modo de órdenes nativo de xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Envíe las peticiones de soporte para xorriso a ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPCIÓN] FUENTE..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "activando el soporte de %s..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Su xorriso no admite «--grub2-boot-info». Algunas características están " +"deshabilitadas. Por favor, use xorriso 1.2.9 o una versión posterior." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Su xorriso no admite «--grub2-boot-info». El arranque como disco está " +"deshabilitado. Por favor, use xorriso 1.2.9 o una versión posterior.<" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Crea una imagen (que contiene todos los módulos) en el formato seleccionado" + +# Miguel: ¿Metáfora del transplante con las ramas? Me he perdido.... +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "Se acepta sintáxis de punto (e.g. /boot/grub/grub.cfg=./grub.cfg)" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMAGEN1 [IMAGEN2 ...] PUNTO_DE_MONTADO" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "se necesita una imagen y un punto de montado" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "el parámetro pasado es un dispositivo del sistema, no una ruta" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, fuzzy, c-format +msgid "[default=%s]" +msgstr "install FUENTES [predeterminado=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "imprime OBJETIVO" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "objetivos disponibles:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPCIÓN]... [RUTA|DISPOSITIVO]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Comprueba la información del dispositivo para una ruta dada (o dispositivo, " +"si se proporciona la opción -d)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "lee texto del FICHERO." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "usa COLOR para el texto" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "usa COLOR para el fondo" + +# Miguel: Pintar es lo más aproximado que se me ocurre. 8-) +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "fija la etiqueta a pintar" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "usa el FICHERO como tipografías (PF2)." + +# Miguel: ??? No soy muy de manzanas y estas cosas me suenan a chino. +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Pinta la «.disk_label.» de Apple" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Faltan parámetros\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[RUTA]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Comprueba el fichero de configuración de GRUB buscando errores de sintaxis." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Error de sintaxis en la línea %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "El guión «%s» no contiene órdenes y no hará nada\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "usa el FICHERO como la imagen de arranque [predeterminado=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "usa el FICHERO como la imagen principal [predeterminado=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "No se ha especificado un dispositivo.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Configura las imágenes para arrancar desde DISPOSITIVO.\n" +"\n" +"Normalmente no debería ejecutar este programa directamente. Use grub-" +"install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" +"DISPOSITIVO debe ser un dispositivo del sistema operativo (por ejemplo /dev/" +"sda2)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Dispositivo «%s» no válido.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" +"directorio raíz que será visto en tiempo de ejecución [predeterminado=/]." + +#: util/grub-syslinux2cfg.c:69 +#, fuzzy +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"directorio actual de syslinux como será visto en tiempo de ejecución [por " +"defecto es el directorio superior al fichero de entrada]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "escribe la salida al FICHERO [predeterminado=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Transforma configuración syslinux a GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "no se puede comprimir la imagen del núcleo" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "compresión %d desconocida\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "El descompresor es demasiado grande" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "la imagen principal es demasiado grande (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "la imagen del núcleo es demasiado grande (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "el tamaño de diskboot.img debe ser de %u bytes" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img no coincide con la versión buena conocida. Continúe bajo su " +"responsabilidad" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "la imagen del firmware es demasiado grande" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "formato de línea no válido: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "el primer sector del fichero principal no está alineado al sector" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "se han encontrado datos no alineados al sector en el fichero principal" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "los sectores del fichero principal están demasiado fragmentados" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "el tamaño de «%s» no es %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "el tamaño de «%s» es demasiado pequeño" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Intentando instalar GRUB en un disco con múltiples etiquetas de partición o " +"con etiqueta de partición y sistema de ficheros. Todavía no está soportado." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"imposible identificar un sistema de ficheros en %s; no se puede realizar la " +"comprobación de seguridad" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Parece que %s contiene un sistema de ficheros %s del que se sabe que no " +"reserva espacio para un arranque tipo DOS. Instalar GRUB ahí puede provocar " +"la DESTRUCCIÓN DEL SISTEMA DE FICHEROS si algún dato importante es " +"sobrescrito por grub-setup (--skip-fs-probe deshabilita esta comprobación, " +"úselo bajo su responsabilidad)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Parece que %s contiene un mapa de particiones %s del que se sabe que no " +"reserva espacio para un arranque tipo DOS. Instalar GRUB ahí puede provocar " +"la DESTRUCCIÓN DEL SISTEMA DE FICHEROS si algún dato importante es " +"sobrescrito por grub-setup (--skip-fs-probe deshabilita esta comprobación, " +"úselo bajo su responsabilidad)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Parece que %s contiene un mapa de particiones %s y LDM y no se tiene " +"constancia de que sea una combinación segura. Instalar GRUB ahí puede " +"provocar la DESTRUCCIÓN DEL SISTEMA DE FICHEROS si algún dato importante es " +"sobrescrito por grub-setup (--skip-fs-probe deshabilita esta comprobación, " +"úselo bajo su responsabilidad)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Intentando instalar GRUB en un disco sin particiones o en una partición. Es " +"una MALA idea." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Intentando instalar GRUB en un disco con múltiples etiquetas de partición. " +"Todavía no está soportado." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "El tipo de particiones «%s» no permite el embebido" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "El sistema de ficheros «%s» no permite el embebido" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Su área de embebido es excepcionalmente pequeña. core.img no entrará en " +"ella." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "ninguna finalización en la imagen principal" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "versión incorrecta de core.img" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"el embebido no es posible, pero se requiere para la instalación en RAID y LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "no se pudo determinar el sistema de ficheros en %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "el sistema de ficheros «%s» no soporta las listas de bloques" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"el embebido no es posible, pero esto es necesario para una instalación en " +"múltiples particiones" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"El embebido no es posible. GRUB podrá ser instalado con esta configuración " +"únicamente usando listas de bloques. No obstante, las listas de bloques son " +"INSEGURAS y su uso está desaconsejado." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "no se procederá con las listas de bloques" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "las listas de bloques no son válidas" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "las listas de bloques están incompletas" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Uso: %s -o SALIDA ARGUMENTOS_DE_CKBMAP...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Genera un fichero de distribución de teclado de GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "imprime este mensaje y termina" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "imprime la información de la versión y termina" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s genera una distribución de teclado para GRUB usando «ckbcomp»\\n" + +# Miguel: He añadido esta línea, pero tiene poco sentido +# si la lista no permite mensajes de nadie que no esté inscrito, +# desde mi humilde punto de vista. +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" +"Notifique los errores a .\n" +"Notifique los errores de traducción a ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: la opción necesita un parámetro -- «%s»\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Uso: %s [OPCIÓN]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Genera un fichero de configuración de grub" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" +"salida del fichero generado de configuración al FICHERO " +"[predeterminado=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Opción «%s» no reconocida\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Debe ejecutarse como root\\n" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s: no encontrado" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Generando un fichero de configuración de grub..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Se han detectado errores de sintaxis en el fichero de\n" +"configuración de GRUB generado.\n" +"Asegurese de que no hay errores en /etc/default/grub\n" +"en los ficheros /etc/grub.d/* o, por favor, abra una\n" +"notificación de errores con el fichero %s adjunto." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "hecho" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Aviso:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Uso: %s [OPCIÓN] ENTRADA_DEL_MENÚ\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Cambia la entrada predeterminada del menú de GRUB, únicamente para el " +"próximo arranque." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"se esperaban las imágenes de GRUB en el directorio DIRECTORIO/%s en vez de " +"en el directorio %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"ENTRADA_DEL_MENÚ es un número, el título o un identificador de un\n" +"elemento del menú. Por favor, tenga en cuenta que los elementos\n" +"dentro de submenús o en sub-submenús requieren especificar los\n" +"componentes del submenú y luego el componente del menú. Los títulos\n" +"deben ser separados usando el carácter «mayor que» (>) sin espacios\n" +"extra. Dependiendo de su shell algunos caracteres incluyendo > deben\n" +"ser escapados. Más información sobre esto está disponible en el Manual\n" +"de GRUB en la sección acerca de la orden «default»." + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "¿Más de una entrada del menú?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "No se ha especificado una entrada del menú." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Establece la entrada del menú predeterminada para GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Esto requere establecer GRUB_DEFAULT=saved en %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ENTRADA_DEL_MENÚ es un número, un título de un elemento del menú o un " +"identificador." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Se ha solicitado un terminal serie pero GRUB_SERIAL_COMMAND no está " +"especificado. Se usarán los parámetros predeterminados." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Encontrado tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Encontrado fondo de pantalla: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Formato de imagen no soportado" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Ya no se soporta fijar GRUB_TIMEOUT a un valor no nulo cuando " +"GRUB_HIDDEN_TIMEOUT está fijado." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Encontrado GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Encontrado módulo del Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"Se han encontrado algunas partes del Hurd, pero no las suficientes para " +"arrancar." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, con Hurd %s (modo de recuperación)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, con Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Por favor, no use el antiguo título «%s» en GRUB_DEFAULT, use «%s» (para " +"versiones previas a la 2.00) o «%s» (para la 2.00 y posteriores)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Cargando GNU Mach..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Cargando el Hurd..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Opciones avanzadas para %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Cargando núcleo de Illumos..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, con kFreeBSD %s (modo de recuperación)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, con kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Cargando núcleo de FreeBSD %s..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Encontrado núcleo de FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Encontrado directorio de módulos del núcleo: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, con Linux %s (modo de recuperación)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, con Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Cargando Linux %s..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Cargando imagen de memoria inicial..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Encontrada imagen de linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Encontrada imagen de memoria inicial: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, con núcleo %s (vía %s, modo de recuperación)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, con núcleo %s (vía %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Encontrado núcleo NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (cargador de arranque)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (cargador de arranque)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Encontrado %s en %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32 bits)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64 bits)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(en %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, con Xen %s y Linux %s (modo de recuperación)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, con Xen %s y Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, con el hipervisor Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Cargando Xen %s..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Hipervisor Xen, versión %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Opciones avanzadas para %s (con el hipervisor Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Encontrado %s en %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "grub-mkconfig todavía no soporta %s.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Etiqueta de sustitución no soportada: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Se desconoce la característica gsub 0x%x de la fuente (%s)\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Rango de direcciones no asociado con la RAM" + +#~ msgid "PUBKEY_FILE" +#~ msgstr "CLAVE_PÚBLICA" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign no está soportado en su sistema" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Si FICHERO es «-», se usará el valor predeterminado %s." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "almacena únicamente los mapas de bits ASCII" + +#~ msgid "create width summary file" +#~ msgstr "crea un fichero con las anchuras" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "La opción --ascii-bitmaps no acepta rangos (siempre se usa ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "AVISO: no se sabe si su generador aleatorio es seguro\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "imprime el módulo del sistema de ficheros, la unidad de GRUB, el " +#~ "dispositivo del sistema, el módulo del mapa de particiones, el módulo de " +#~ "abstracción o el UUID del contenedor criptográfico [predeterminado=fs]" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "la lectura del primer sector de la imagen principal falló" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "usa FICHERO como grub-setup" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "usa FICHERO como grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "usa FICHERO como grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "DISPOSITIVO_DE_INSTALACIÓN debe ser un nombre de fichero de un " +#~ "dispositivo del sistema." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "La ruta «%s» no es accesible por GRUB en el arranque. La instalación es " +#~ "imposible. Cancelando.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "" +#~ "Ha fallado la detección automática del sistema de ficheros de %s.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Pruebe con --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Si el problema persiste, por favor, notifíquelo junto a la salida de %s a " +#~ "<%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "«%s» falló.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "No se pudo encontrar la unidad GRUB para %s; no se pudo crear la entrada " +#~ "del gestor de arranque EFI.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Generando grub.cfg..." + +#~ msgid "" +#~ "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgstr "" +#~ "%s copia las imágenes de grub en el directorio_de_red/subdirectorio/" +#~ "cpu_objetivo-plataforma\\n" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "usa FICHERO como grub-glue-efi" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "usa FICHERO como grub-render-label" + +#~ msgid "Packed pixel " +#~ msgstr "Píxel empaquetado " + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "" +#~ "usa las imagenes de GRUB del DIRECTORIO. Tiene preferencia ante el " +#~ "objetivo." diff --git a/po/exclude.pot b/po/exclude.pot new file mode 100644 index 000000000..0a9b215ea --- /dev/null +++ b/po/exclude.pot @@ -0,0 +1,7496 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-05-12 14:21+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "GPLv3+" +msgstr "" + +#: grub-core/bus/usb/serial/common.c:62 +#, c-format +msgid "usb%d" +msgstr "" + +#: grub-core/commands/acpi.c:373 +msgid "RSDT" +msgstr "" + +#: grub-core/commands/acpi.c:427 +msgid "XSDT" +msgstr "" + +#: grub-core/commands/acpi.c:539 +msgid "facp" +msgstr "" + +#: grub-core/commands/acpi.c:558 grub-core/commands/acpi.c:559 +msgid "dsdt" +msgstr "" + +#: grub-core/commands/acpi.c:678 grub-core/commands/acpihalt.c:371 +msgid "DSDT" +msgstr "" + +#: grub-core/commands/acpihalt.c:218 +msgid "_S5_" +msgstr "" + +#: grub-core/commands/acpihalt.c:218 +msgid "\\_S5_" +msgstr "" + +#: grub-core/commands/acpihalt.c:302 grub-core/kern/emu/hostfs.c:112 +#: grub-core/lib/reed_solomon.c:428 grub-core/lib/reed_solomon.c:445 +#: util/grub-editenv.c:151 util/grub-editenv.c:156 util/grub-fstest.c:309 +#: util/grub-fstest.c:561 util/grub-mkpasswd-pbkdf2.c:176 +#: util/grub-mount.c:477 util/grub-setup.c:734 util/misc.c:111 util/misc.c:135 +msgid "rb" +msgstr "" + +#: grub-core/commands/acpihalt.c:359 include/grub/acpi.h:61 +msgid "FACP" +msgstr "" + +#: grub-core/commands/acpihalt.c:376 +msgid "SSDT" +msgstr "" + +#: grub-core/commands/arc/lsdev.c:33 grub-core/commands/cacheinfo.c:43 +#: grub-core/commands/xnu_uuid.c:90 grub-core/font/font_cmd.c:56 +#: grub-core/fs/zfs/zfsinfo.c:402 grub-core/gettext/gettext.c:492 +#: grub-core/hello/hello.c:36 grub-core/lib/arg.c:147 +#: grub-core/lib/hexdump.c:63 grub-core/loader/ia64/efi/linux.c:123 +#: grub-core/loader/ia64/efi/linux.c:130 grub-core/net/bootp.c:381 +#: grub-core/net/bootp.c:417 grub-core/net/dns.c:628 grub-core/net/dns.c:644 +#: grub-core/net/net.c:1086 util/grub-mkfont.c:770 util/grub-mkimage.c:1967 +#: util/grub-mkrelpath.c:99 util/ieee1275/grub-ofpathname.c:46 +#: util/ieee1275/grub-ofpathname.c:51 +#, c-format +msgid "%s\n" +msgstr "" + +#: grub-core/commands/blocklist.c:46 grub-core/commands/minicmd.c:162 +#: grub-core/disk/geli.c:427 grub-core/disk/luks.c:334 +#: grub-core/disk/lvm.c:496 grub-core/normal/completion.c:172 +msgid "," +msgstr "" + +#: grub-core/commands/blocklist.c:48 +#, c-format +msgid "%llu" +msgstr "" + +#: grub-core/commands/blocklist.c:50 +#, c-format +msgid "+%u" +msgstr "" + +#: grub-core/commands/blocklist.c:52 +#, c-format +msgid "[%u-%u]" +msgstr "" + +#: grub-core/commands/cacheinfo.c:37 +#, c-format +msgid "(%lu.%lu%%)\n" +msgstr "" + +#: grub-core/commands/cat.c:66 grub-core/commands/minicmd.c:59 +#: grub-core/commands/read.c:52 grub-core/normal/auth.c:188 +#: util/spkmodem-recv.c:101 +#, c-format +msgid "%c" +msgstr "" + +msgid "\n" +msgstr "" + +#: grub-core/commands/cat.c:75 grub-core/commands/minicmd.c:63 +#, c-format +msgid "<%x>" +msgstr "" + +#: grub-core/commands/configfile.c:38 +msgid "extract_entries_" +msgstr "" + +#: grub-core/commands/echo.c:116 grub-core/commands/parttool.c:131 +#: grub-core/commands/videoinfo.c:54 grub-core/disk/cryptodisk.c:1029 +#: grub-core/fs/zfs/zfsinfo.c:38 grub-core/kern/emu/misc.c:74 +#: grub-core/kern/emu/misc.c:90 grub-core/kern/emu/misc.c:105 +#: grub-core/lib/arg.c:145 grub-core/normal/cmdline.c:367 +#: grub-core/normal/cmdline.c:474 grub-core/normal/completion.c:137 +#: grub-core/normal/completion.c:348 grub-core/normal/completion.c:358 +#: grub-core/normal/completion.c:364 grub-core/normal/completion.c:366 +#: grub-core/normal/completion.c:380 grub-core/normal/completion.c:451 +#: grub-core/normal/misc.c:97 grub-core/normal/misc.c:102 +#: grub-core/normal/misc.c:130 grub-core/normal/misc.c:145 +#: grub-core/script/execute.c:309 util/grub-probe.c:515 util/grub-probe.c:524 +#: util/grub-probe.c:533 +#, c-format +msgid " " +msgstr "" + +#: grub-core/commands/efi/efifwsetup.c:41 +#: grub-core/commands/efi/efifwsetup.c:47 +msgid "OsIndications" +msgstr "" + +#: grub-core/commands/efi/efifwsetup.c:66 +msgid "OsIndicationsSupported" +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:39 +msgid "Intel 945GM" +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:40 +msgid "Intel 965GM" +msgstr "" + +#: grub-core/commands/hashsum.c:46 grub-core/commands/verify.c:127 +msgid "sha1" +msgstr "" + +#: grub-core/commands/hashsum.c:47 grub-core/commands/verify.c:126 +msgid "md5" +msgstr "" + +#: grub-core/commands/hashsum.c:124 grub-core/commands/ls.c:125 +#: util/grub-mount.c:304 util/misc.c:82 +#, c-format +msgid "%s/%s" +msgstr "" + +#: grub-core/commands/hashsum.c:249 grub-core/disk/geli.c:192 +#: grub-core/loader/i386/xnu.c:767 util/grub-probe.c:721 +#, c-format +msgid "%02x" +msgstr "" + +#: grub-core/commands/hashsum.c:250 +#, c-format +msgid " %s\n" +msgstr "" + +#: grub-core/commands/help.c:51 +#, c-format +msgid "%s %s" +msgstr "" + +#: grub-core/commands/help.c:126 grub-core/normal/menu.c:682 +#: grub-core/normal/menu.c:694 grub-core/normal/menu_entry.c:1128 +msgid "" +"\n" +"\n" +msgstr "" + +#: grub-core/commands/help.c:132 +#, c-format +msgid "" +"%s %s %s\n" +"%s\n" +msgstr "" + +#: grub-core/commands/hexdump.c:53 +msgid "(mem)" +msgstr "" + +#: grub-core/commands/i386/cmosdump.c:38 +#, c-format +msgid "%02x: " +msgstr "" + +#: grub-core/commands/i386/cmosdump.c:44 grub-core/commands/testload.c:129 +#: grub-core/fs/reiserfs.c:306 grub-core/fs/reiserfs.c:334 +#: grub-core/lib/hexdump.c:42 +#, c-format +msgid "%02x " +msgstr "" + +#: grub-core/commands/i386/cpuid.c:34 grub-core/efiemu/i386/coredetect.c:24 +#: grub-core/efiemu/runtime/efiemu.c:187 grub-core/gdb/i386/idt.c:53 +#: grub-core/loader/i386/xnu.c:145 grub-core/loader/i386/xnu.c:155 +#: grub-core/video/i386/pc/vbe.c:63 grub-core/video/i386/pc/vbe.c:67 +#: include/grub/i386/io.h:31 include/grub/i386/io.h:40 +#: include/grub/i386/io.h:49 include/grub/i386/tsc.h:52 +#: include/grub/i386/tsc.h:73 include/grub/i386/tsc.h:96 +msgid "=a" +msgstr "" + +#: grub-core/commands/i386/cpuid.c:35 grub-core/efiemu/i386/coredetect.c:25 +#: grub-core/net/tftp.c:347 grub-core/net/tftp.c:348 grub-core/net/tftp.c:349 +#: grub-core/normal/menu.c:188 grub-core/script/execute.c:1051 +#: grub-core/video/i386/pc/vbe.c:64 +msgid "0" +msgstr "" + +#: grub-core/commands/i386/cpuid.c:76 grub-core/efiemu/i386/coredetect.c:41 +msgid "i" +msgstr "" + +#: grub-core/commands/i386/cpuid.c:98 +msgid "[-l]" +msgstr "" + +#: grub-core/commands/i386/pc/halt.c:118 +msgid "[-n]" +msgstr "" + +#: grub-core/commands/iorw.c:50 +msgid "in" +msgstr "" + +#: grub-core/commands/iorw.c:67 grub-core/commands/memrw.c:44 +#: grub-core/commands/setpci.c:124 +msgid "XXXXXXXX" +msgstr "" + +#: grub-core/commands/iorw.c:68 grub-core/commands/memrw.c:67 +#: grub-core/commands/setpci.c:125 +#, c-format +msgid "%x" +msgstr "" + +#: grub-core/commands/iorw.c:72 grub-core/commands/memrw.c:71 +#, c-format +msgid "0x%x\n" +msgstr "" + +#: grub-core/commands/iorw.c:92 +msgid "out" +msgstr "" + +#: grub-core/commands/keylayouts.c:214 +#, c-format +msgid "%s/layouts/%s.gkb" +msgstr "" + +#: grub-core/commands/keystatus.c:104 +msgid "[--shift] [--ctrl] [--alt]" +msgstr "" + +#: grub-core/commands/legacycfg.c:127 grub-core/commands/legacycfg.c:712 +#: grub-core/commands/legacycfg.c:717 grub-core/commands/legacycfg.c:724 +msgid "legacy" +msgstr "" + +#: grub-core/commands/legacycfg.c:203 +msgid "extract_legacy_entries_" +msgstr "" + +#: grub-core/commands/legacycfg.c:204 +msgid "legacy_" +msgstr "" + +#: grub-core/commands/legacycfg.c:251 +msgid "--no-mem-option" +msgstr "" + +#: grub-core/commands/legacycfg.c:262 +msgid "--type=linux" +msgstr "" + +#: grub-core/commands/legacycfg.c:263 +msgid "--type=biglinux" +msgstr "" + +#: grub-core/commands/legacycfg.c:271 +msgid "--type=multiboot" +msgstr "" + +#: grub-core/commands/legacycfg.c:279 +msgid "--type=freebsd" +msgstr "" + +#: grub-core/commands/legacycfg.c:287 +msgid "--type=openbsd" +msgstr "" + +#: grub-core/commands/legacycfg.c:295 +msgid "--type=netbsd" +msgstr "" + +#: grub-core/commands/legacycfg.c:380 +msgid "adXXXXXXXXXXXXsXXXXXXXXXXXXYYY" +msgstr "" + +#: grub-core/commands/legacycfg.c:384 +#, c-format +msgid "ad%ds%d%c" +msgstr "" + +#: grub-core/commands/legacycfg.c:387 +#, c-format +msgid "ad%ds%d" +msgstr "" + +#: grub-core/commands/legacycfg.c:390 +#, c-format +msgid "ad%d" +msgstr "" + +#: grub-core/commands/legacycfg.c:409 +msgid "wdXXXXXXXXXXXXY" +msgstr "" + +#: grub-core/commands/legacycfg.c:417 +msgid "-r" +msgstr "" + +#: grub-core/commands/legacycfg.c:424 +#, c-format +msgid "wd%d%c" +msgstr "" + +#: grub-core/commands/legacycfg.c:512 grub-core/loader/multiboot.c:290 +msgid "--nounzip" +msgstr "" + +#: grub-core/commands/legacycfg.c:645 +msgid "--md5" +msgstr "" + +#: grub-core/commands/loadenv.c:154 grub-core/kern/corecmd.c:43 +#: util/grub-editenv.c:190 +#, c-format +msgid "%s=%s\n" +msgstr "" + +#: grub-core/commands/ls.c:55 grub-core/kern/corecmd.c:95 +#, c-format +msgid "(%s) " +msgstr "" + +#: grub-core/commands/ls.c:75 grub-core/commands/terminal.c:55 +#: grub-core/commands/terminal.c:59 grub-core/commands/terminal.c:78 +#: grub-core/disk/cryptodisk.c:756 grub-core/disk/cryptodisk.c:758 +#: grub-core/disk/cryptodisk.c:760 grub-core/disk/cryptodisk.c:762 +#: grub-core/disk/cryptodisk.c:764 grub-core/disk/cryptodisk.c:766 +#: grub-core/disk/cryptodisk.c:773 grub-core/disk/diskfilter.c:365 +#: grub-core/net/net.c:1128 util/grub-probe.c:89 util/grub-probe.c:310 +#, c-format +msgid "%s " +msgstr "" + +#: grub-core/commands/ls.c:102 grub-core/kern/corecmd.c:105 +#, c-format +msgid "%s%s " +msgstr "" + +#: grub-core/commands/ls.c:102 grub-core/commands/ls.c:168 +#: grub-core/commands/test.c:116 grub-core/commands/wildcard.c:451 +#: grub-core/disk/ieee1275/ofdisk.c:240 grub-core/fs/iso9660.c:624 +#: grub-core/fs/iso9660.c:640 grub-core/fs/zfs/zfs.c:2950 +#: grub-core/gfxmenu/gui_string_util.c:129 +#: grub-core/gfxmenu/gui_string_util.c:203 grub-core/kern/corecmd.c:105 +#: grub-core/kern/emu/hostfs.c:53 grub-core/kern/fs.c:73 +#: grub-core/kern/fs.c:97 grub-core/kern/ieee1275/cmain.c:65 +#: grub-core/kern/ieee1275/mmap.c:35 grub-core/kern/ieee1275/openfw.c:156 +#: grub-core/loader/xnu.c:241 grub-core/loader/xnu.c:252 +#: grub-core/loader/xnu.c:1209 grub-core/normal/completion.c:312 +#: include/grub/emu/misc.h:37 include/grub/emu/misc.h:39 +#: util/grub-editenv.c:36 util/grub-fstest.c:288 util/grub-fstest.c:290 +#: util/grub-mount.c:183 +msgid "/" +msgstr "" + +#: grub-core/commands/ls.c:123 grub-core/commands/menuentry.c:100 +#: grub-core/commands/wildcard.c:310 grub-core/kern/main.c:169 +#: grub-core/kern/main.c:173 grub-core/net/drivers/ieee1275/ofnet.c:46 +#: util/grub-menulst2cfg.c:106 +#, c-format +msgid "%s%s" +msgstr "" + +#: grub-core/commands/ls.c:142 +#, c-format +msgid "%-12llu" +msgstr "" + +#: grub-core/commands/ls.c:144 grub-core/commands/ls.c:150 +#, c-format +msgid "%-12s" +msgstr "" + +#: grub-core/commands/ls.c:168 +#, c-format +msgid "%s%s\n" +msgstr "" + +#: grub-core/commands/memrw.c:50 +msgid "read_" +msgstr "" + +#: grub-core/commands/memrw.c:91 +msgid "write_" +msgstr "" + +#: grub-core/commands/menuentry.c:59 +msgid "f1" +msgstr "" + +#: grub-core/commands/menuentry.c:60 +msgid "f2" +msgstr "" + +#: grub-core/commands/menuentry.c:61 +msgid "f3" +msgstr "" + +#: grub-core/commands/menuentry.c:62 +msgid "f4" +msgstr "" + +#: grub-core/commands/menuentry.c:63 +msgid "f5" +msgstr "" + +#: grub-core/commands/menuentry.c:64 +msgid "f6" +msgstr "" + +#: grub-core/commands/menuentry.c:65 +msgid "f7" +msgstr "" + +#: grub-core/commands/menuentry.c:66 +msgid "f8" +msgstr "" + +#: grub-core/commands/menuentry.c:67 +msgid "f9" +msgstr "" + +#: grub-core/commands/menuentry.c:68 +msgid "f10" +msgstr "" + +#: grub-core/commands/menuentry.c:69 +msgid "f11" +msgstr "" + +#: grub-core/commands/menuentry.c:70 +msgid "f12" +msgstr "" + +#: grub-core/commands/menuentry.c:247 +msgid "'\\''" +msgstr "" + +#: grub-core/commands/nativedisk.c:37 +msgid "ehcipata" +msgstr "" + +#: grub-core/commands/nativedisk.c:143 +#, c-format +msgid "(%s)/%s" +msgstr "" + +#: grub-core/commands/nativedisk.c:226 grub-core/commands/parttool.c:190 +#: grub-core/efiemu/main.c:239 grub-core/kern/dl.c:721 +#: grub-core/normal/autofs.c:73 grub-core/normal/completion.c:146 +#: grub-core/normal/crypto.c:89 grub-core/normal/dyncmd.c:103 +#: grub-core/normal/term.c:325 +#, c-format +msgid "%s/" +msgstr "" + +#: grub-core/commands/nativedisk.c:226 grub-core/commands/parttool.c:190 +#: grub-core/efiemu/main.c:239 grub-core/kern/dl.c:721 +#: grub-core/kern/main.c:186 grub-core/kern/main.c:187 +#: grub-core/kern/main.c:188 grub-core/kern/main.c:189 +#: grub-core/loader/xnu.c:949 grub-core/loader/xnu.c:1253 +#: grub-core/loader/xnu.c:1259 grub-core/normal/autofs.c:73 +#: grub-core/normal/crypto.c:89 grub-core/normal/dyncmd.c:103 +#: grub-core/normal/term.c:325 util/grub-editenv.c:296 +msgid "-" +msgstr "" + +#: grub-core/commands/nativedisk.c:226 grub-core/kern/dl.c:721 +#, c-format +msgid "/%s.mod" +msgstr "" + +#: grub-core/commands/parttool.c:34 grub-core/lib/pbkdf2.c:26 +#: grub-core/parttool/msdospart.c:32 +msgid "GPLv2+" +msgstr "" + +#: grub-core/commands/parttool.c:118 +msgid "+/-" +msgstr "" + +#: grub-core/commands/parttool.c:191 +msgid "/parttool.lst" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:95 +#: grub-core/commands/password_pbkdf2.c:96 +#: grub-core/commands/password_pbkdf2.c:99 +msgid "grub.pbkdf2.sha512." +msgstr "" + +#: grub-core/commands/pcidump.c:65 +#, c-format +msgid "%08x " +msgstr "" + +#: grub-core/commands/search.c:80 grub-core/kern/main.c:198 +#, c-format +msgid "(%s)%s" +msgstr "" + +#: grub-core/commands/search.c:160 grub-core/normal/cmdline.c:204 +#, c-format +msgid " %s" +msgstr "" + +#: grub-core/commands/search.c:179 grub-core/disk/efi/efidisk.c:855 +#: grub-core/kern/device.c:123 grub-core/normal/completion.c:114 +#: util/grub-fstest.c:755 util/grub-mount.c:579 util/grub-probe.c:269 +#, c-format +msgid "%s,%s" +msgstr "" + +#: grub-core/commands/search_file.c:3 +msgid "search.file" +msgstr "" + +#: grub-core/commands/search_label.c:3 +msgid "search.fs_label" +msgstr "" + +#: grub-core/commands/search_uuid.c:3 +msgid "search.fs_uuid" +msgstr "" + +#: grub-core/commands/search_wrap.c:164 +msgid "--hint-" +msgstr "" +#: util/grub-mkpasswd-pbkdf2.c:146 +#, c-format +msgid "" +"\n" +"%s" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:176 +msgid "/dev/urandom" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:223 util/grub-mkpasswd-pbkdf2.c:225 +msgid "grub.pbkdf2.sha512.XXXXXXXXXXXXXXXXXXX.S.S" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:227 +#, c-format +msgid "grub.pbkdf2.sha512.%d.%s.%s" +msgstr "" + +#: util/grub-probe.c:250 +#, c-format +msgid "ata%d" +msgstr "" + +#: util/grub-probe.c:256 +#, c-format +msgid "ahci%d" +msgstr "" + +#: util/grub-probe.c:296 +#, c-format +msgid "lvm " +msgstr "" + +#: util/grub-probe.c:300 +#, c-format +msgid "ldm " +msgstr "" + +#: util/grub-probe.c:308 +#, c-format +msgid "diskfilter " +msgstr "" + +#: util/grub-probe.c:313 +#, c-format +msgid "raid5rec " +msgstr "" + +#: util/grub-probe.c:315 +#, c-format +msgid "raid6rec " +msgstr "" + +#: util/grub-probe.c:421 +msgid "false\n" +msgstr "" + +#: util/grub-probe.c:429 +msgid "true\n" +msgstr "" + +#: util/grub-probe.c:504 +#, c-format +msgid "--hint-ieee1275='" +msgstr "" + +#: util/grub-probe.c:513 +#, c-format +msgid "--hint-bios=" +msgstr "" + +#: util/grub-probe.c:522 +#, c-format +msgid "--hint-efi=" +msgstr "" + +#: util/grub-probe.c:531 +#, c-format +msgid "--hint-baremetal=" +msgstr "" + +#: util/grub-probe.c:542 +#, c-format +msgid "--hint='" +msgstr "" + +#: util/grub-probe.c:740 +msgid "" +"(fs|fs_uuid|fs_label|drive|device|partmap|abstraction|cryptodisk_uuid|" +"msdos_parttype)" +msgstr "" + +#: util/grub-probe.c:791 +msgid "fs_uuid" +msgstr "" + +#: util/grub-probe.c:793 +msgid "fs_label" +msgstr "" + +#: util/grub-probe.c:795 +msgid "drive" +msgstr "" + +#: util/grub-probe.c:801 +msgid "abstraction" +msgstr "" + +#: util/grub-probe.c:803 +msgid "cryptodisk_uuid" +msgstr "" + +#: util/grub-probe.c:805 +msgid "msdos_parttype" +msgstr "" + +#: util/grub-probe.c:807 +msgid "hints_string" +msgstr "" + +#: util/grub-probe.c:809 +msgid "bios_hints" +msgstr "" + +#: util/grub-probe.c:811 +msgid "ieee1275_hints" +msgstr "" + +#: util/grub-probe.c:813 +msgid "baremetal_hints" +msgstr "" + +#: util/grub-probe.c:815 +msgid "efi_hints" +msgstr "" + +#: util/grub-probe.c:817 +msgid "arc_hints" +msgstr "" + +#: util/grub-probe.c:819 +msgid "compatibility_hint" +msgstr "" + +#: util/grub-probe.c:821 +msgid "zero_check" +msgstr "" + +#: util/grub-render-label.c:273 +#, c-format +msgid "(host)/%s" +msgstr "" + +#: util/grub-setup.c:87 +msgid "core.img" +msgstr "" + +#: util/grub-setup.c:147 util/grub-setup.c:173 +#, c-format +msgid ",%u,%u>" +msgstr "" + +#: util/grub-setup.c:665 +msgid "dump.img" +msgstr "" + +#: util/grub-setup.c:672 +msgid "dump2.img" +msgstr "" + +#: util/grub-setup.c:896 +msgid "r+b" +msgstr "" + +#: util/ieee1275/grub-ofpathname.c:44 +msgid "--version" +msgstr "" + +#: util/resolve.c:148 util/resolve.c:170 +msgid ".mod" +msgstr "" + +#: util/resolve.c:175 +#, c-format +msgid "%s.mod" +msgstr "" + +#: util/spkmodem-recv.c:90 +#, c-format +msgid "%d %d %d @%d\n" +msgstr "" + +#: util/spkmodem-recv.c:99 +#, c-format +msgid "<%c, %x>" +msgstr "" + +#: util/grub-mkimage.c:764 +msgid "moddep.lst" +msgstr "" + +#: util/grub-mkimage.c:766 +msgid "kernel.img" +msgstr "" + +#: util/grub-mkimage.c:973 +msgid "xz_decompress.img" +msgstr "" + +#: util/grub-mkimage.c:976 +msgid "lzma_decompress.img" +msgstr "" + +#: util/grub-mkimage.c:979 +msgid "none_decompress.img" +msgstr "" + +#: util/grub-mkimage.c:1079 +msgid "pxeboot.img" +msgstr "" + +#: util/grub-mkimage.c:1101 util/grub-mkimage.c:1380 +msgid "diskboot.img" +msgstr "" + +#: util/grub-mkimage.c:1158 +msgid "PE" +msgstr "" + +#: util/grub-mkimage.c:1263 +msgid ".data" +msgstr "" + +#: util/grub-mkimage.c:1275 +msgid ".bss" +msgstr "" + +#: util/grub-mkimage.c:1289 +msgid "mods" +msgstr "" + +#: util/grub-mkimage.c:1300 +msgid ".reloc" +msgstr "" + +#: util/grub-mkimage.c:1321 util/grub-setup.c:86 +msgid "boot.img" +msgstr "" + +#: util/grub-mkimage.c:1435 +msgid "fwstart_fuloong2f.img" +msgstr "" + +#: util/grub-mkimage.c:1440 +msgid "fwstart.img" +msgstr "" + +#: util/grub-mkimage.c:1766 +msgid "(xz|none|auto)" +msgstr "" + +#: util/grub-mkimage.c:1798 +#, c-format +msgid "" +"%s\n" +"%s %s" +msgstr "" + + +#: util/grub-mkimage.c:113 util/grub-mkimage.c:114 +msgid "i386-coreboot" +msgstr "" + +#: util/grub-mkimage.c:132 util/grub-mkimage.c:133 +msgid "i386-multiboot" +msgstr "" + +#: util/grub-mkimage.c:151 util/grub-mkimage.c:152 util/grub-mkimage.c:167 +msgid "i386-pc" +msgstr "" + +#: util/grub-mkimage.c:168 +msgid "i386-pc-pxe" +msgstr "" + +#: util/grub-mkimage.c:183 util/grub-mkimage.c:184 +msgid "i386-efi" +msgstr "" + +#: util/grub-mkimage.c:199 util/grub-mkimage.c:200 +msgid "i386-ieee1275" +msgstr "" + +#: util/grub-mkimage.c:218 util/grub-mkimage.c:219 +msgid "i386-qemu" +msgstr "" + +#: util/grub-mkimage.c:233 util/grub-mkimage.c:234 +msgid "x86_64-efi" +msgstr "" + +#: util/grub-mkimage.c:249 util/grub-mkimage.c:267 util/grub-mkimage.c:285 +msgid "mipsel-loongson" +msgstr "" + +#: util/grub-mkimage.c:250 +msgid "mipsel-yeeloong-flash" +msgstr "" + +#: util/grub-mkimage.c:268 +msgid "mipsel-fuloong2f-flash" +msgstr "" + +#: util/grub-mkimage.c:286 +msgid "mipsel-loongson-elf" +msgstr "" + +#: util/grub-mkimage.c:286 +msgid "mipsel-yeeloong-elf" +msgstr "" + +#: util/grub-mkimage.c:287 +msgid "mipsel-fuloong2f-elf" +msgstr "" + +#: util/grub-mkimage.c:287 +msgid "mipsel-fuloong2e-elf" +msgstr "" + +#: util/grub-mkimage.c:288 +msgid "mipsel-fuloong-elf" +msgstr "" + +#: util/grub-mkimage.c:305 util/grub-mkimage.c:306 +msgid "powerpc-ieee1275" +msgstr "" + +#: util/grub-mkimage.c:324 util/grub-mkimage.c:339 util/grub-mkimage.c:354 +msgid "sparc64-ieee1275" +msgstr "" + +#: util/grub-mkimage.c:325 +msgid "sparc64-ieee1275-raw" +msgstr "" + +#: util/grub-mkimage.c:340 +msgid "sparc64-ieee1275-cdcore" +msgstr "" + +#: util/grub-mkimage.c:355 +msgid "sparc64-ieee1275-aout" +msgstr "" + +#: util/grub-mkimage.c:369 util/grub-mkimage.c:370 +msgid "ia64-efi" +msgstr "" + +#: util/grub-mkimage.c:385 util/grub-mkimage.c:386 +msgid "mips-arc" +msgstr "" + +#: util/grub-mkimage.c:403 util/grub-mkimage.c:404 +msgid "mipsel-arc" +msgstr "" + +#: util/grub-mkimage.c:421 util/grub-mkimage.c:457 +msgid "mipsel-qemu_mips" +msgstr "" + +#: util/grub-mkimage.c:422 +msgid "mipsel-qemu_mips-elf" +msgstr "" + +#: util/grub-mkimage.c:439 util/grub-mkimage.c:475 +msgid "mips-qemu_mips" +msgstr "" + +#: util/grub-mkimage.c:440 +msgid "mips-qemu_mips-flash" +msgstr "" + +#: util/grub-mkimage.c:458 +msgid "mipsel-qemu_mips-flash" +msgstr "" + +#: util/grub-mkimage.c:476 +msgid "mips-qemu_mips-elf" +msgstr "" + + +#: grub-core/commands/terminal.c:85 grub-core/commands/terminal.c:145 +msgid "--append" +msgstr "" + +#: grub-core/commands/terminal.c:86 grub-core/commands/terminal.c:166 +msgid "--remove" +msgstr "" + +#: grub-core/commands/terminal.c:99 grub-core/commands/terminal.c:105 +#: grub-core/commands/terminal.c:116 grub-core/commands/terminal.c:151 +#: grub-core/commands/terminal.c:172 grub-core/commands/terminal.c:192 +#: grub-core/commands/terminal.c:212 grub-core/loader/i386/linux.c:552 +msgid "ofconsole" +msgstr "" + +#: grub-core/commands/terminal.c:129 grub-core/commands/terminal.c:130 +msgid "serial_usb" +msgstr "" + +#: grub-core/commands/test.c:168 +msgid "=" +msgstr "" + +#: grub-core/commands/test.c:169 +msgid "==" +msgstr "" + +#: grub-core/commands/test.c:177 +msgid "!=" +msgstr "" + +#: grub-core/commands/test.c:186 grub-core/fs/reiserfs.c:569 +#: grub-core/kern/emu/argp_common.c:38 util/grub-editenv.c:66 +msgid "<" +msgstr "" + +#: grub-core/commands/test.c:194 +msgid "<=" +msgstr "" + +#: grub-core/commands/test.c:210 +msgid ">=" +msgstr "" + +#: grub-core/commands/test.c:219 +msgid "-eq" +msgstr "" + +#: grub-core/commands/test.c:227 +msgid "-ge" +msgstr "" + +#: grub-core/commands/test.c:235 +msgid "-gt" +msgstr "" + +#: grub-core/commands/test.c:243 +msgid "-le" +msgstr "" + +#: grub-core/commands/test.c:251 +msgid "-lt" +msgstr "" + +#: grub-core/commands/test.c:259 +msgid "-ne" +msgstr "" + +#: grub-core/commands/test.c:269 grub-core/commands/test.c:283 +msgid "-pgt" +msgstr "" + +#: grub-core/commands/test.c:270 +msgid "-plt" +msgstr "" + +#: grub-core/commands/test.c:295 grub-core/commands/test.c:311 +msgid "-nt" +msgstr "" + +#: grub-core/commands/test.c:296 +msgid "-ot" +msgstr "" + +#: grub-core/commands/test.c:330 util/grub-fstest.c:492 util/grub-mount.c:422 +msgid "-d" +msgstr "" + +#: grub-core/commands/test.c:338 +msgid "-e" +msgstr "" + +#: grub-core/commands/test.c:346 +msgid "-f" +msgstr "" + +#: grub-core/commands/test.c:355 util/grub-mount.c:552 +msgid "-s" +msgstr "" + +#: grub-core/commands/test.c:369 +msgid "-n" +msgstr "" + +#: grub-core/commands/test.c:376 +msgid "-z" +msgstr "" + +#: grub-core/commands/test.c:387 grub-core/normal/completion.c:120 +#: grub-core/normal/completion.c:178 util/grub-mkimagexx.c:349 +msgid ")" +msgstr "" + +#: grub-core/commands/test.c:393 +msgid "(" +msgstr "" + +#: grub-core/commands/test.c:400 grub-core/script/execute.c:917 +msgid "!" +msgstr "" + +#: grub-core/commands/test.c:406 util/grub-fstest.c:408 util/grub-mount.c:383 +msgid "-a" +msgstr "" + +#: grub-core/commands/test.c:411 +msgid "-o" +msgstr "" + +#: grub-core/commands/test.c:432 +msgid "]" +msgstr "" + +#: grub-core/commands/verify.c:128 +msgid "ripemd160" +msgstr "" + +#: grub-core/commands/verify.c:130 +msgid "sha384" +msgstr "" + +#: grub-core/commands/verify.c:132 +msgid "sha224" +msgstr "" + +#: grub-core/commands/verify.c:142 grub-core/commands/verify.c:143 +msgid "rsa" +msgstr "" + +#: grub-core/commands/verify.c:144 +msgid "dsa" +msgstr "" + +#: grub-core/commands/verify.c:258 +msgid "™" +msgstr "" + +#: grub-core/commands/verify.c:531 +msgid "gcry_dsa" +msgstr "" + +#: grub-core/commands/verify.c:587 +#, c-format +msgid "%02x%02x " +msgstr "" + +#: grub-core/commands/verify.c:696 +msgid "verified_read" +msgstr "" + +#: grub-core/commands/verify.c:714 grub-core/commands/verify.c:718 +msgid ".sig" +msgstr "" + +#: grub-core/commands/verify.c:771 grub-core/commands/verify.c:836 +msgid "enforce" +msgstr "" + +#: grub-core/commands/verify.c:771 grub-core/commands/verify.c:836 +#: grub-core/term/serial.c:217 +msgid "no" +msgstr "" + +#: grub-core/commands/videoinfo.c:48 +msgid " " +msgstr "" + +#: grub-core/commands/videoinfo.c:52 grub-core/script/execute.c:254 +#: grub-core/script/execute.c:296 +msgid "*" +msgstr "" + +#: grub-core/commands/videoinfo.c:55 +#, c-format +msgid " 0x%03x " +msgstr "" + +#: grub-core/commands/videoinfo.c:57 +#, c-format +msgid "%4d x %4d x %2d (%4d) " +msgstr "" + +#: grub-core/commands/videotest.c:56 grub-core/loader/i386/linux.c:48 +#: grub-core/loader/i386/xnu.c:41 grub-core/loader/multiboot.c:57 +#: grub-core/loader/multiboot.c:212 grub-core/term/gfxterm.c:36 +#: grub-core/video/video.c:437 util/grub-mkimage.c:1907 +msgid "auto" +msgstr "" + +#: grub-core/commands/videotest.c:82 grub-core/commands/videotest.c:83 +#: grub-core/commands/videotest.c:84 grub-core/gfxmenu/gui_label.c:261 +#: grub-core/gfxmenu/gui_list.c:594 grub-core/gfxmenu/gui_progress_bar.c:391 +#: grub-core/gfxmenu/view.c:74 +msgid "Unknown Regular 16" +msgstr "" + +#: grub-core/commands/videotest.c:85 +msgid "Fixed 20" +msgstr "" + +#: grub-core/commands/wildcard.c:234 util/grub-probe.c:387 +#, c-format +msgid "(%s)" +msgstr "" + +#: grub-core/commands/wildcard.c:301 grub-core/fs/affs.c:421 +#: grub-core/fs/hfsplus.c:829 grub-core/fs/iso9660.c:557 +#: grub-core/fs/iso9660.c:731 grub-core/fs/reiserfs.c:938 +#: grub-core/fs/squash4.c:536 grub-core/fs/udf.c:886 grub-core/fs/xfs.c:522 +#: grub-core/gfxmenu/gui_string_util.c:98 grub-core/normal/completion.c:142 +#: util/grub-fstest.c:286 +msgid ".." +msgstr "" + +#: grub-core/commands/xnu_uuid.c:51 +msgid "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +msgstr "" + +#: grub-core/commands/xnu_uuid.c:59 util/grub-fstest.c:463 +msgid "-l" +msgstr "" + +#: grub-core/commands/xnu_uuid.c:75 grub-core/fs/jfs.c:924 +#: grub-core/fs/nilfs2.c:1135 +#, c-format +msgid "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x" +msgstr "" + +#: grub-core/disk/ahci.c:968 +msgid ", %x, %x (%" +msgstr "" + +#: grub-core/disk/ahci.c:969 grub-core/fs/btrfs.c:720 +#: grub-core/fs/zfs/zfs.c:1307 +msgid ")\n" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:117 +msgid "partition(0)" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:119 +msgid "partition(10)" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:166 +msgid "arc/" +msgstr "" + +#: grub-core/disk/ata.c:426 grub-core/disk/scsi.c:445 +#: grub-core/loader/xnu.c:576 +#, c-format +msgid "%s%d" +msgstr "" + +#: grub-core/disk/cryptodisk.c:467 +#, c-format +msgid "crypto%lu" +msgstr "" + +#: grub-core/disk/cryptodisk.c:483 grub-core/disk/cryptodisk.c:486 +msgid "cryptouuid/" +msgstr "" + +#: grub-core/disk/cryptodisk.c:753 +#, c-format +msgid "cryptodisk %s " +msgstr "" + +#: grub-core/disk/cryptodisk.c:1006 grub-core/disk/cryptodisk.c:1026 +msgid "luks_mount " +msgstr "" + +#: grub-core/disk/cryptodisk.c:1037 +msgid "-ecb" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1040 +msgid "-cbc" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1043 +msgid "-pcbc" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1046 +msgid "-xts" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1049 +msgid "-lrw" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1056 +msgid "-null" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1059 +msgid "-plain" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1062 +msgid "-plain64" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1065 +msgid "-benbi" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1068 +msgid "-essiv:" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1089 grub-core/disk/cryptodisk.c:1101 +msgid "luks_script" +msgstr "" + +#: grub-core/disk/diskfilter.c:118 grub-core/disk/diskfilter.c:431 +msgid "md" +msgstr "" + +#: grub-core/disk/diskfilter.c:119 grub-core/disk/diskfilter.c:432 +#: grub-core/disk/lvm.c:369 grub-core/disk/lvm.c:374 grub-core/disk/lvm.c:375 +#: util/grub-probe.c:295 +msgid "lvm/" +msgstr "" + +#: grub-core/disk/diskfilter.c:120 grub-core/disk/diskfilter.c:433 +#: util/grub-probe.c:299 +msgid "ldm/" +msgstr "" + +#: grub-core/disk/diskfilter.c:396 grub-core/disk/diskfilter.c:398 +msgid "mduuid/" +msgstr "" + +#: grub-core/disk/diskfilter.c:688 +msgid "raid6rec" +msgstr "" + +#: grub-core/disk/diskfilter.c:698 +msgid "raid5rec" +msgstr "" + +#: grub-core/disk/diskfilter.c:892 +#, c-format +msgid "%s_%d" +msgstr "" + +#: grub-core/disk/diskfilter.c:978 +#, c-format +msgid "md/%s" +msgstr "" + +#: grub-core/disk/dmraid_nvidia.c:173 +msgid "dmraid_nv" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:419 grub-core/disk/i386/pc/biosdisk.c:284 +#: util/grub-probe.c:192 util/grub-probe.c:221 +#, c-format +msgid "hd%d" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:428 grub-core/disk/i386/pc/biosdisk.c:284 +#: util/grub-probe.c:198 util/grub-probe.c:227 +#, c-format +msgid "fd%d" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:436 +#, c-format +msgid "cd%d" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:718 +msgid "XdXXXXXXXXXX" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:729 +#, c-format +msgid "d%d" +msgstr "" + +#: grub-core/disk/geli.c:103 +msgid "GEOM::ELI" +msgstr "" + +#: grub-core/disk/geli.c:127 +msgid "des" +msgstr "" + +#: grub-core/disk/geli.c:128 +msgid "3des" +msgstr "" + +#: grub-core/disk/geli.c:129 +msgid "blowfish" +msgstr "" + +#: grub-core/disk/geli.c:130 +msgid "cast5" +msgstr "" + +#: grub-core/disk/geli.c:132 grub-core/disk/geli.c:135 +msgid "aes" +msgstr "" + +#: grub-core/disk/geli.c:134 +msgid "camellia128" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:281 +msgid "cd" +msgstr "" + +#: grub-core/disk/ieee1275/nand.c:84 grub-core/disk/ieee1275/nand.c:85 +msgid "nand/" +msgstr "" + +#: grub-core/disk/ieee1275/nand.c:105 grub-core/disk/ieee1275/ofdisk.c:597 +msgid "block-size" +msgstr "" + +#: grub-core/disk/ieee1275/nand.c:173 +msgid "pio-read" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:162 +msgid "vscsi" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:182 +msgid "vscsi-report-luns" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:205 +msgid "/disk@%" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:215 grub-core/disk/ieee1275/ofdisk.c:235 +#: grub-core/disk/ieee1275/ofdisk.c:370 grub-core/kern/ieee1275/openfw.c:422 +msgid "block" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:281 +msgid "sdmmc" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:292 grub-core/disk/ieee1275/ofdisk.c:295 +#: grub-core/disk/ieee1275/ofdisk.c:347 grub-core/disk/ieee1275/ofdisk.c:350 +#: grub-core/kern/ieee1275/openfw.c:482 grub-core/kern/ieee1275/openfw.c:492 +#: grub-core/term/ieee1275/serial.c:233 grub-core/term/ieee1275/serial.c:238 +#: grub-core/term/serial.c:156 grub-core/term/serial.c:158 +#: util/grub-probe.c:500 util/grub-probe.c:502 util/grub-probe.c:617 +#: util/grub-probe.c:619 +msgid "ieee1275/" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:541 grub-core/kern/ieee1275/init.c:115 +#: grub-core/net/drivers/ieee1275/ofnet.c:207 +msgid "network" +msgstr "" + +#: grub-core/disk/ldm.c:53 +msgid "VBLK" +msgstr "" + +#: grub-core/disk/ldm.c:89 +msgid "PRIVHEAD" +msgstr "" + +#: grub-core/disk/ldm.c:362 +#, c-format +msgid "ldm/%s/%s" +msgstr "" + +#: grub-core/disk/ldm.c:1004 +msgid "Volume5" +msgstr "" + +#: grub-core/disk/luks.c:40 +msgid "LUKSº¾" +msgstr "" + +#: grub-core/disk/luks.c:150 +msgid "ecb" +msgstr "" + +#: grub-core/disk/luks.c:156 grub-core/disk/luks.c:218 +msgid "plain" +msgstr "" + +#: grub-core/disk/luks.c:162 grub-core/disk/luks.c:165 +msgid "cbc-" +msgstr "" + +#: grub-core/disk/luks.c:167 grub-core/disk/luks.c:170 +msgid "pcbc-" +msgstr "" + +#: grub-core/disk/luks.c:172 grub-core/disk/luks.c:175 +msgid "xts-" +msgstr "" + +#: grub-core/disk/luks.c:197 grub-core/disk/luks.c:200 +msgid "lrw-" +msgstr "" + +#: grub-core/disk/luks.c:220 +msgid "plain64" +msgstr "" + +#: grub-core/disk/luks.c:222 +msgid "benbi" +msgstr "" + +#: grub-core/disk/luks.c:233 +msgid "null" +msgstr "" + +#: grub-core/disk/luks.c:235 +msgid "essiv:" +msgstr "" + +#: grub-core/disk/luks.c:40 +msgid "LUKSº¾" +msgstr "" + +#: grub-core/disk/mdraid_linux.c:250 +#, c-format +msgid "md%d" +msgstr "" + +#: grub-core/disk/mdraid_linux.c:263 +msgid "mdraid09_be" +msgstr "" + +#: grub-core/disk/memdisk.c:49 +msgid "mdsk" +msgstr "" + +#: grub-core/disk/scsi.c:459 +#, c-format +msgid "%s%d%c" +msgstr "" + +#: grub-core/efiemu/i386/coredetect.c:43 grub-core/efiemu/i386/coredetect.c:50 +#: grub-core/efiemu/i386/coredetect.c:55 grub-core/efiemu/i386/coredetect.c:58 +msgid "efiemu32.o" +msgstr "" + +#: grub-core/efiemu/i386/coredetect.c:58 +msgid "efiemu64.o" +msgstr "" + +#: grub-core/efiemu/i386/pc/cfgtables.c:63 +msgid "_SM_" +msgstr "" + +#: grub-core/efiemu/loadcore.c:166 grub-core/efiemu/runtime/efiemu.c:52 +msgid ".text-physical" +msgstr "" + +#: grub-core/efiemu/main.c:239 +#, c-format +msgid "/%s" +msgstr "" + +#: grub-core/efiemu/pnvram.c:129 grub-core/efiemu/pnvram.c:130 +#: grub-core/efiemu/pnvram.c:133 +msgid "EfiEmu.pnvram." +msgstr "" + +#: grub-core/efiemu/runtime/efiemu.c:50 +msgid "_text-physical, _text-physical" +msgstr "" + +#: grub-core/efiemu/runtime/efiemu.c:116 +msgid "EFIEMULOG" +msgstr "" + +#: grub-core/fs/affs.c:205 +msgid "DOS" +msgstr "" + +#: grub-core/fs/bfs.c:1096 +msgid "be:volume_id" +msgstr "" + +#: grub-core/fs/bfs.c:1099 +msgid "%016" +msgstr "" + +#: grub-core/fs/btrfs.c:34 +msgid "_BHRfS_M" +msgstr "" + +#: grub-core/fs/btrfs.c:414 grub-core/fs/btrfs.c:446 grub-core/fs/btrfs.c:499 +msgid " %x %" +msgstr "" + +#: grub-core/fs/btrfs.c:663 grub-core/loader/i386/pc/plan9.c:211 +msgid " %" +msgstr "" + +#: grub-core/fs/btrfs.c:663 +msgid " \n" +msgstr "" + +#: grub-core/fs/btrfs.c:718 grub-core/fs/btrfs.c:813 grub-core/fs/btrfs.c:1074 +msgid "+0x%" +msgstr "" + +#: grub-core/fs/cpio.c:36 +msgid "070707" +msgstr "" + +#: grub-core/fs/cpio.c:53 grub-core/loader/linux.c:66 +msgid "070701" +msgstr "" + +#: grub-core/fs/cpio.c:54 +msgid "070702" +msgstr "" + +#: grub-core/fs/cpio.c:76 +msgid "qÇ" +msgstr "" + +#: grub-core/fs/cpio.c:78 +msgid "Çq" +msgstr "" + +#: grub-core/fs/cpio.c:96 +msgid "ustar" +msgstr "" + +#: grub-core/fs/cpio.c:246 grub-core/loader/linux.c:193 +#: grub-core/loader/linux.c:214 grub-core/loader/linux.c:268 +#: grub-core/loader/linux.c:290 +msgid "TRAILER!!!" +msgstr "" + +#: grub-core/fs/fat.c:245 +msgid "EXFAT " +msgstr "" + +#: grub-core/fs/fat.c:1164 +#, c-format +msgid "%04x-%04x" +msgstr "" + +#: grub-core/fs/hfsplus.c:1145 grub-core/fs/ntfs.c:1233 +#: grub-core/fs/zfs/zfs.c:3484 +#, c-format +msgid "%016llx" +msgstr "" + +#: grub-core/fs/iso9660.c:287 +msgid "ST" +msgstr "" + +#: grub-core/fs/iso9660.c:291 +msgid "CE" +msgstr "" + +#: grub-core/fs/iso9660.c:352 +msgid "ER" +msgstr "" + +#: grub-core/fs/iso9660.c:402 +msgid "SP" +msgstr "" + +#: grub-core/fs/iso9660.c:458 grub-core/fs/udf.c:96 +msgid "CD001" +msgstr "" + +#: grub-core/fs/iso9660.c:549 +msgid "NM" +msgstr "" + +#: grub-core/fs/iso9660.c:586 +msgid "PX" +msgstr "" + +#: grub-core/fs/iso9660.c:608 +msgid "SL" +msgstr "" + +#: grub-core/fs/iso9660.c:632 +msgid "./" +msgstr "" + +#: grub-core/fs/iso9660.c:636 +msgid "../" +msgstr "" + +#: grub-core/fs/jfs.c:364 +msgid "JFS1" +msgstr "" + +#: grub-core/fs/minix.c:670 +msgid "minix3_be" +msgstr "" + +#: grub-core/fs/minix.c:672 +msgid "minix2_be" +msgstr "" + +#: grub-core/fs/minix.c:674 +msgid "minix_be" +msgstr "" + +#: grub-core/fs/ntfs.c:483 +msgid "ntfscomp" +msgstr "" + +#: grub-core/fs/ntfs.c:757 +msgid "/??/" +msgstr "" + +#: grub-core/fs/ntfs.c:894 +msgid "INDX" +msgstr "" + +#: grub-core/fs/ntfs.c:938 grub-core/loader/i386/pc/chainloader.c:93 +msgid "NTFS" +msgstr "" + +#: grub-core/fs/ntfs.c:1167 +msgid "/$Volume" +msgstr "" + +#: grub-core/fs/reiserfs.c:57 +msgid "ReIsEr" +msgstr "" + +#: grub-core/fs/reiserfs.c:58 +msgid "ReIsErLB" +msgstr "" + +#: grub-core/fs/romfs.c:32 +msgid "-rom1fs-" +msgstr "" + +#: grub-core/fs/sfs.c:377 +msgid "SFS" +msgstr "" + +#: grub-core/fs/udf.c:94 +msgid "BEA01" +msgstr "" + +#: grub-core/fs/udf.c:95 +msgid "BOOT2" +msgstr "" + +#: grub-core/fs/udf.c:97 +msgid "CDW02" +msgstr "" + +#: grub-core/fs/udf.c:98 +msgid "NSR02" +msgstr "" + +#: grub-core/fs/udf.c:99 +msgid "NSR03" +msgstr "" + +#: grub-core/fs/udf.c:100 +msgid "TEA01" +msgstr "" + +#: grub-core/fs/ufs.c:798 +#, c-format +msgid "%08x%08x" +msgstr "" + +#: grub-core/fs/ufs.c:847 +msgid "ufs1_be" +msgstr "" + +#: grub-core/fs/xfs.c:271 +msgid "IN" +msgstr "" + +#: grub-core/fs/xfs.c:325 +msgid "BMAP" +msgstr "" + +#: grub-core/fs/xfs.c:674 +msgid "XFSB" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:60 +msgid "bootfs" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:318 grub-core/fs/zfs/zfs.c:367 +#: grub-core/gfxmenu/gui_list.c:432 grub-core/gfxmenu/gui_list.c:443 +msgid "inherit" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:319 grub-core/fs/zfs/zfs.c:368 +msgid "on" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:320 grub-core/fs/zfs/zfs.c:369 +#: grub-core/loader/ia64/efi/linux.c:429 +msgid "off" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:321 +msgid "lzjb" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:322 +msgid "empty" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:323 +msgid "gzip-1" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:324 +msgid "gzip-2" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:325 +msgid "gzip-3" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:326 +msgid "gzip-4" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:327 +msgid "gzip-5" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:328 +msgid "gzip-6" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:329 +msgid "gzip-7" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:330 +msgid "gzip-8" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:331 +msgid "gzip-9" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:332 +msgid "zle" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:371 +msgid "gang_header" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:372 +msgid "zilog" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:373 +msgid "fletcher2" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:374 +msgid "fletcher4" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:375 grub-core/lib/xzembed/xz_dec_stream.c:445 +msgid "SHA256" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:376 +msgid "zilog2" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:377 +msgid "SHA256+MAC" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:623 grub-core/loader/i386/xnu.c:776 +msgid "guid" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:631 +msgid "ashift" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:677 +msgid "nparity" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1305 +msgid "+%u (%" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1305 +msgid ", %" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1306 +msgid ") -> (0x%" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1306 grub-core/kern/mm.c:594 +msgid ", 0x%" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1637 +msgid "zfscrypt" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:2464 +msgid "casesensitivity" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:3940 grub-core/script/execute.c:255 +#: grub-core/script/execute.c:317 +msgid "@" +msgstr "" + +#: grub-core/gdb/cstub.c:281 grub-core/gdb/cstub.c:293 +#: grub-core/gdb/cstub.c:299 grub-core/gdb/cstub.c:327 +msgid "OK" +msgstr "" + +#: grub-core/gdb/cstub.c:315 +msgid "E01" +msgstr "" + +#: grub-core/gdb/cstub.c:332 +msgid "E02" +msgstr "" + +#: grub-core/gdb/i386/idt.c:64 grub-core/gdb/i386/idt.c:65 +#: grub-core/gdb/i386/idt.c:71 +msgid "m" +msgstr "" + +#: grub-core/gettext/gettext.c:353 +#, c-format +msgid "%s%s/%s.mo" +msgstr "" + +#: grub-core/gettext/gettext.c:364 +#, c-format +msgid "%s%s/%s.mo.gz" +msgstr "" + +#: grub-core/gettext/gettext.c:375 +#, c-format +msgid "%s%s/%s.gmo" +msgstr "" + +#: grub-core/gettext/gettext.c:403 +msgid "/locale" +msgstr "" + +#: grub-core/gfxmenu/gfxmenu.c:78 +#, c-format +msgid "%s/themes/%s" +msgstr "" + +#: grub-core/gfxmenu/gui_box.c:83 grub-core/gfxmenu/gui_canvas.c:75 +#: grub-core/gfxmenu/gui_circular_progress.c:71 +#: grub-core/gfxmenu/gui_image.c:65 grub-core/gfxmenu/gui_label.c:79 +#: grub-core/gfxmenu/gui_list.c:157 grub-core/gfxmenu/gui_progress_bar.c:79 +msgid "component" +msgstr "" + +#: grub-core/gfxmenu/gui_box.c:84 grub-core/gfxmenu/gui_canvas.c:76 +#: grub-core/gfxmenu/gui_util.c:44 grub-core/gfxmenu/gui_util.c:82 +#: grub-core/gfxmenu/theme_loader.c:503 +msgid "container" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:237 +msgid "deg" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:249 +msgid "num_ticks" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:253 +msgid "start_angle" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:257 +msgid "ticks_disappear" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:261 +msgid "center_bitmap" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:267 +msgid "tick_bitmap" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:273 +#: grub-core/gfxmenu/gui_image.c:210 grub-core/gfxmenu/gui_list.c:520 +#: grub-core/gfxmenu/gui_progress_bar.c:339 +#: grub-core/gfxmenu/theme_loader.c:458 +msgid "theme_dir" +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:30 +msgid "center" +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:164 grub-core/hook/datehook.c:81 +#: grub-core/kern/emu/hostdisk.c:713 grub-core/kern/ieee1275/openfw.c:509 +#: grub-core/kern/partition.c:265 grub-core/normal/menu.c:111 +#: grub-core/script/execute.c:801 grub-core/script/execute.c:956 +#: grub-core/script/execute.c:1004 grub-core/term/tparm.c:544 +#, c-format +msgid "%d" +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:182 +msgid "@KEYMAP_LONG@" +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:186 +msgid "@KEYMAP_MIDDLE@" +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:190 +msgid "@KEYMAP_SHORT@" +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:205 +msgid "align" +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:217 grub-core/gfxmenu/gui_list.c:484 +msgid "visible" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:401 grub-core/gfxmenu/gui_list.c:403 +msgid "Typical OS" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:426 +msgid "item_font" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:430 +msgid "selected_item_font" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:437 +msgid "item_color" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:441 +msgid "selected_item_color" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:454 +msgid "icon_width" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:461 +msgid "icon_height" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:468 +msgid "item_height" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:472 +msgid "item_padding" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:476 +msgid "item_icon_space" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:480 +msgid "item_spacing" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:488 +msgid "menu_pixmap_style" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:494 +msgid "selected_item_pixmap_style" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:500 +msgid "scrollbar_frame" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:506 +msgid "scrollbar_thumb" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:512 +msgid "scrollbar_width" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:516 +msgid "scrollbar" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:259 +msgid "XXXXXXXXXX" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:289 +msgid "@TIMEOUT_NOTIFICATION_LONG@" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:292 +msgid "@TIMEOUT_NOTIFICATION_MIDDLE@" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:297 +msgid "@TIMEOUT_NOTIFICATION_SHORT@" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:309 +msgid "text_color" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:313 +msgid "border_color" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:317 +msgid "bg_color" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:321 +msgid "fg_color" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:325 +msgid "bar_style" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:332 +msgid "highlight_style" +msgstr "" + +#: grub-core/gfxmenu/icon_manager.c:32 grub-core/video/readers/png.c:948 +msgid ".png" +msgstr "" + +#: grub-core/gfxmenu/icon_manager.c:201 +msgid "icons/" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:126 +msgid "title-font" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:128 +msgid "message-font" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:130 +msgid "terminal-font" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:137 +msgid "title-color" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:139 +msgid "message-color" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:141 +msgid "message-bg-color" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:143 +msgid "desktop-image" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:172 +msgid "desktop-color" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:174 +msgid "terminal-box" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:181 +msgid "title-text" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:418 +msgid "image" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:422 +msgid "vbox" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:426 +msgid "hbox" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:430 +msgid "canvas" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:434 +msgid "progress_bar" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:438 +msgid "circular_progress" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:442 +msgid "boot_menu" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:459 +msgid "theme_path" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:552 +msgid "top" +msgstr "" + +#: grub-core/gfxmenu/view.c:82 +msgid "Fixed 10" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:38 +msgid "nw" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:38 +msgid "ne" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:38 +msgid "se" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:38 +msgid "sw" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:40 +msgid "n" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:40 +msgid "e" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:40 +msgid "s" +msgstr "" + +#: grub-core/gfxmenu/widget-box.c:40 util/grub-menulst2cfg.c:61 +msgid "w" +msgstr "" + +#: grub-core/hook/datehook.c:31 +msgid "YEAR" +msgstr "" + +#: grub-core/hook/datehook.c:32 +msgid "MONTH" +msgstr "" + +#: grub-core/hook/datehook.c:33 +msgid "DAY" +msgstr "" + +#: grub-core/hook/datehook.c:34 +msgid "HOUR" +msgstr "" + +#: grub-core/hook/datehook.c:35 +msgid "MINUTE" +msgstr "" + +#: grub-core/hook/datehook.c:36 +msgid "SECOND" +msgstr "" + +#: grub-core/hook/datehook.c:37 +msgid "WEEKDAY" +msgstr "" + +#: grub-core/kern/dl.c:412 +msgid "grub_mod_init" +msgstr "" + +#: grub-core/kern/dl.c:414 +msgid "grub_mod_fini" +msgstr "" + +#: grub-core/kern/dl.c:457 +msgid ".module_license" +msgstr "" + +#: grub-core/kern/dl.c:459 +msgid "LICENSE=GPLv3" +msgstr "" + +#: grub-core/kern/dl.c:460 +msgid "LICENSE=GPLv3+" +msgstr "" + +#: grub-core/kern/dl.c:461 +msgid "LICENSE=GPLv2+" +msgstr "" + +#: grub-core/kern/dl.c:481 +msgid ".modname" +msgstr "" + +#: grub-core/kern/dl.c:508 +msgid ".moddeps" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:147 +msgid "/dev/.devfsd" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:460 +msgid "linear" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:539 +msgid "part" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:561 util/grub-mkimagexx.c:131 +msgid "start" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:579 grub-core/kern/emu/hostdisk.c:581 +#: grub-core/kern/emu/hostdisk.c:877 +msgid "/dev/" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:694 +msgid "/disc" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:697 +#, c-format +msgid "part%d" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:699 grub-core/kern/emu/hostdisk.c:700 +msgid "/dev/disk/by-id/" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:703 +#, c-format +msgid "-part%d" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:708 +#, c-format +msgid "p%d" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:833 grub-core/kern/emu/hostdisk.c:834 +#: grub-core/kern/emu/hostdisk.c:835 grub-core/kern/emu/hostdisk.c:1347 +#: grub-core/kern/emu/hostdisk.c:1348 grub-core/kern/emu/hostdisk.c:1349 +msgid "hostdisk/" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:954 grub-core/kern/emu/hostdisk.c:961 +#: grub-core/kern/emu/hostdisk.c:1003 +msgid "kern.geom.debugflags" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:1250 grub-core/kern/emu/hostdisk.c:1257 +#: grub-core/kern/emu/hostdisk.c:1265 grub-core/kern/emu/hostdisk.c:1310 +#, c-format +msgid "%s:%d: %s" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:1335 include/grub/util/lvm.h:26 +msgid "/dev/mapper/" +msgstr "" + +#: grub-core/kern/emu/misc.c:78 grub-core/kern/emu/misc.c:94 +#: grub-core/kern/emu/misc.c:109 +#, c-format +msgid ".\n" +msgstr "" + +#: grub-core/kern/i386/coreboot/mmap.c:29 +msgid "LBIO" +msgstr "" + +#: grub-core/kern/i386/pc/init.c:91 +#, c-format +msgid "%cd%u" +msgstr "" + +#: grub-core/kern/i386/pc/init.c:97 grub-core/kern/i386/pc/init.c:101 +#, c-format +msgid ",%u" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:66 grub-core/term/ieee1275/console.c:107 +msgid "/options" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:67 +msgid "/openprom" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:76 grub-core/kern/ieee1275/cmain.c:77 +msgid "SmartFirmware(tm)" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:82 +msgid "OLPC" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:87 +msgid "Emulated PC" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:90 +msgid "IBM" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:101 +msgid "PowerBook3,3" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:111 grub-core/kern/ieee1275/cmain.c:112 +#: grub-core/kern/ieee1275/cmain.c:113 +msgid "MacRISC" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:145 +msgid "1.0" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:146 +msgid "1.1" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:147 +msgid "1.2" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:148 +msgid "1.3" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:189 +msgid "/rom/boot-rom" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:190 +msgid "/boot-rom" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:193 grub-core/kern/ieee1275/cmain.c:194 +msgid "PPC Open Hack'Ware" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:208 +msgid "/chosen" +msgstr "" + +#: grub-core/kern/ieee1275/ieee1275.c:581 +msgid "color!" +msgstr "" + +#: grub-core/kern/ieee1275/mmap.c:45 +msgid "/memory" +msgstr "" + +#: grub-core/kern/ieee1275/openfw.c:169 +msgid "/aliases" +msgstr "" + +#: grub-core/kern/ieee1275/openfw.c:410 +#, c-format +msgid "\\%s" +msgstr "" + +#: grub-core/kern/ieee1275/openfw.c:483 +msgid ",XXXXXXXXXXXX" +msgstr "" + +#: grub-core/kern/ieee1275/openfw.c:509 +msgid "XXXXXXXXXXXX" +msgstr "" + +#: grub-core/kern/mips/dl.c:254 +msgid "__gnu_local_gp" +msgstr "" + +#: grub-core/kern/misc.c:172 +#, c-format +msgid "%s:%d: " +msgstr "" + +#: grub-core/kern/misc.c:919 +msgid "0x" +msgstr "" + +#: grub-core/kern/misc.c:1018 +msgid "(null)" +msgstr "" + +#: grub-core/lib/backtrace.c:47 +#, c-format +msgid "%p" +msgstr "" + +#: grub-core/lib/crc64.c:100 grub-core/lib/xzembed/xz_dec_stream.c:444 +msgid "CRC64" +msgstr "" + +#: grub-core/lib/crypto.c:450 +msgid "/dev/tty" +msgstr "" + +#: grub-core/lib/crypto.c:450 +msgid "w+c" +msgstr "" + +#: grub-core/lib/i386/backtrace.c:60 grub-core/lib/i386/backtrace.c:63 +msgid "grub_backtrace_pointer" +msgstr "" + +#: grub-core/lib/ieee1275/cmos.c:41 +msgid "m5819" +msgstr "" + +#: grub-core/lib/ieee1275/datetime.c:37 +msgid "rtc" +msgstr "" + +#: grub-core/lib/ieee1275/datetime.c:87 +msgid "get-time" +msgstr "" + +#: grub-core/lib/ieee1275/datetime.c:139 +msgid "set-time" +msgstr "" + +#: grub-core/lib/ieee1275/halt.c:28 +msgid "power-off" +msgstr "" + +#: grub-core/lib/ieee1275/halt.c:29 +msgid "shut-down" +msgstr "" + +#: grub-core/lib/ieee1275/halt.c:30 +msgid "poweroff" +msgstr "" + +#: grub-core/lib/ieee1275/reboot.c:25 +msgid "reset-all" +msgstr "" + +#: grub-core/lib/ieee1275/cmos.c:41 +msgid "m5819" +msgstr "" + +#: grub-core/lib/ieee1275/datetime.c:37 +msgid "rtc" +msgstr "" + +#: grub-core/lib/ieee1275/datetime.c:87 +msgid "get-time" +msgstr "" + +#: grub-core/lib/ieee1275/datetime.c:139 +msgid "set-time" +msgstr "" + +#: grub-core/lib/ieee1275/halt.c:28 +msgid "power-off" +msgstr "" + +#: grub-core/lib/ieee1275/halt.c:29 +msgid "shut-down" +msgstr "" + +#: grub-core/lib/ieee1275/halt.c:30 +msgid "poweroff" +msgstr "" + +#: grub-core/lib/ieee1275/reboot.c:25 +msgid "reset-all" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:32 grub-core/lib/posix_wrap/wctype.h:42 +msgid "xdigit" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:39 +msgid "alnum" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:39 +msgid "cntrl" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:39 +msgid "lower" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:40 +msgid "alpha" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:40 +msgid "digit" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:41 +msgid "print" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:41 +msgid "upper" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:41 +msgid "blank" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:42 +msgid "graph" +msgstr "" + +#: grub-core/lib/posix_wrap/wctype.h:42 +msgid "punct" +msgstr "" + +#: grub-core/lib/reed_solomon.c:64 grub-core/lib/reed_solomon.c:65 +#: grub-core/lib/reed_solomon.c:66 grub-core/lib/reed_solomon.c:67 +#: grub-core/lib/reed_solomon.c:68 grub-core/lib/reed_solomon.c:69 +#: grub-core/lib/reed_solomon.c:70 grub-core/lib/reed_solomon.c:71 +#: grub-core/lib/reed_solomon.c:72 grub-core/lib/reed_solomon.c:73 +#: include/grub/mips/loongson/kernel.h:31 +#: include/grub/mips/loongson/memory.h:46 +#: include/grub/mips/loongson/memory.h:47 include/grub/mips/loongson/time.h:25 +#: include/grub/mips/qemu_mips/memory.h:33 include/grub/mips/time.h:29 +#: util/grub-mkimage.c:1253 util/grub-mkimage.c:1564 +msgid ".text" +msgstr "" + +#: grub-core/lib/reed_solomon.c:428 +msgid "tst.bin" +msgstr "" + +#: grub-core/lib/reed_solomon.c:441 grub-core/lib/reed_solomon.c:445 +msgid "tst_rs.bin" +msgstr "" + +#: grub-core/lib/reed_solomon.c:441 grub-core/lib/reed_solomon.c:460 +#: grub-core/lib/reed_solomon.c:465 util/grub-editenv.c:121 +#: util/grub-editenv.c:209 util/grub-fstest.c:202 util/grub-glue-efi.c:199 +#: util/grub-mkfont.c:782 util/grub-mkfont.c:819 util/grub-mkfont.c:843 +#: util/grub-mkimage.c:1975 util/grub-render-label.c:257 util/grub-setup.c:665 +#: util/grub-setup.c:672 +msgid "wb" +msgstr "" + +#: grub-core/lib/reed_solomon.c:460 +msgid "tst_dam.bin" +msgstr "" + +#: grub-core/lib/reed_solomon.c:465 +msgid "tst_rec.bin" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:142 +msgid "Core Duo/Solo" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:143 +msgid "Mac Pro" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:144 +msgid "MBP" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:145 +msgid "MBA" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:146 +msgid "MB NV" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:147 +msgid "MB NV2" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:148 +msgid "MBP2011" +msgstr "" + +#: grub-core/loader/efi/appleloader.c:149 +msgid "MBP2012" +msgstr "" + +#: grub-core/loader/i386/bsd.c:135 +msgid "wdXY" +msgstr "" + +#: grub-core/loader/i386/bsd.c:428 grub-core/loader/i386/bsd.c:429 +msgid "/boot/zfs/zpool.cache" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1606 grub-core/loader/i386/bsd.c:1609 +#: grub-core/loader/i386/bsd.c:1700 grub-core/loader/i386/bsd.c:1708 +#: grub-core/loader/i386/bsd.c:1710 +msgid "com" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1735 +msgid "pc" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1825 +#, c-format +msgid "kFreeBSD.%s" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1892 +msgid "type=" +msgstr "" + +#: grub-core/loader/i386/bsdXX.c:369 +msgid "_DYNAMIC" +msgstr "" + +#: grub-core/loader/i386/bsdXX.c:604 +msgid "rd_root_image" +msgstr "" + +#: grub-core/loader/i386/bsdXX.c:606 +msgid "rd_root_size" +msgstr "" + +#: grub-core/loader/i386/linux.c:550 grub-core/term/i386/pc/vga_text.c:256 +#: grub-core/term/i386/pc/vga_text.c:281 +msgid "vga_text" +msgstr "" + +#: grub-core/loader/i386/linux.c:900 grub-core/loader/i386/pc/linux.c:244 +msgid "vga=" +msgstr "" + +#: grub-core/loader/i386/linux.c:913 grub-core/loader/i386/pc/linux.c:252 +msgid "ext" +msgstr "" + +#: grub-core/loader/i386/linux.c:915 grub-core/loader/i386/pc/linux.c:254 +msgid "ask" +msgstr "" + +#: grub-core/loader/i386/linux.c:985 grub-core/loader/i386/pc/linux.c:264 +msgid "mem=" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:104 +msgid "FAT12" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:105 +msgid "FAT16" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:106 +msgid "FAT32" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:256 +msgid "--force" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:263 +msgid "--bpb" +msgstr "" + +#: grub-core/loader/i386/pc/linux.c:235 +msgid "bzImage" +msgstr "" + +#: grub-core/loader/i386/pc/linux.c:235 +msgid "zImage" +msgstr "" + +#: include/grub/util/lvm.h:28 +msgid "/dev/linux_lvm/" +msgstr "" + +#: include/grub/zfs/dmu.h:110 +msgid "root_dataset" +msgstr "" + +#: include/grub/zfs/dmu.h:111 +msgid "sync_bplist" +msgstr "" + +#: include/grub/zfs/dmu.h:112 +msgid "errlog_scrub" +msgstr "" + +#: include/grub/zfs/dmu.h:113 +msgid "errlog_last" +msgstr "" + +#: include/grub/zfs/dmu.h:114 +msgid "spares" +msgstr "" + +#: include/grub/zfs/dmu.h:115 +msgid "deflate" +msgstr "" + +#: include/grub/zfs/dmu.h:116 +msgid "history" +msgstr "" + +#: include/grub/zfs/dmu.h:117 +msgid "pool_props" +msgstr "" + +#: include/grub/zfs/dmu.h:118 +msgid "l2cache" +msgstr "" + +#: include/grub/zfs/zfs_znode.h:29 +msgid "ROOT" +msgstr "" + +#: include/grub/zfs/zfs_znode.h:30 +msgid "VERSION" +msgstr "" + +#: include/grub/zfs/zfs_znode.h:31 +msgid "SA_ATTRS" +msgstr "" + +#: util/grub-editenv.c:106 util/grub-setup.c:1117 +msgid "\v" +msgstr "" + +#: util/grub-editenv.c:120 +#, c-format +msgid "%s.new" +msgstr "" + +#: util/grub-fstest.c:547 util/grub-mount.c:463 +msgid "prompt" +msgstr "" + +#: util/grub-fstest.c:666 +msgid "cp" +msgstr "" + +#: util/grub-fstest.c:747 util/grub-mount.c:571 +msgid "loop0" +msgstr "" + +#: util/grub-fstest.c:747 util/grub-mount.c:571 +msgid "md0" +msgstr "" + +#: util/grub-mkfont.c:981 +msgid "ascii-bitmaps" +msgstr "" + +#: util/grub-mkfont.c:982 +msgid "width-spec" +msgstr "" + +#: util/grub-mkfont.c:1003 +msgid "no-hinting" +msgstr "" + +#: util/grub-mkfont.c:1004 +msgid "no-bitmap" +msgstr "" + +#: util/grub-mkimage.c:574 +msgid "PowerPC" +msgstr "" + +#: util/grub-mkimage.c:1878 +msgid "(memdisk)/boot/grub" +msgstr "" + +#: util/grub-mkimage.c:1896 +msgid "xz" +msgstr "" + +#: util/misc.c:312 +msgid "PHYSICALDRIVE" +msgstr "" + +#: grub-core/term/ns8250.c:268 +#, c-format +msgid "com%d" +msgstr "" + +#: grub-core/term/ns8250.c:315 grub-core/term/serial.c:190 +#, c-format +msgid "port%lx" +msgstr "" + +#: grub-core/term/serial.c:183 +#, c-format +msgid "com%ld" +msgstr "" + +#: grub-core/term/serial.c:199 grub-core/term/serial.c:268 +msgid "com0" +msgstr "" + +#: grub-core/term/serial.c:219 +msgid "odd" +msgstr "" + +#: grub-core/term/serial.c:221 +msgid "even" +msgstr "" + +#: grub-core/term/serial.c:230 +msgid "1" +msgstr "" + +#: grub-core/term/serial.c:232 +msgid "2" +msgstr "" + +#: grub-core/term/serial.c:234 +msgid "1.5" +msgstr "" + +#: grub-core/term/serial.c:269 +msgid "com2" +msgstr "" + +#: grub-core/term/serial.c:270 +msgid "com1" +msgstr "" + +#: grub-core/term/serial.c:295 +#, c-format +msgid "serial_%s" +msgstr "" + +#: grub-core/term/serial.c:338 grub-core/term/serial.c:339 +#: grub-core/term/serial.c:343 grub-core/term/serial.c:344 +#: grub-core/term/serial.c:347 grub-core/term/serial.c:348 +msgid "serial_*" +msgstr "" + +#: grub-core/term/usb_keyboard.c:217 +#, c-format +msgid "usb_keyboard%d" +msgstr "" + +#: grub-core/video/efi_gop.c:308 +msgid "agp-internal-edid" +msgstr "" + +#: grub-core/video/efi_uga.c:134 +msgid "VMEM" +msgstr "" + +#: grub-core/video/efi_uga.c:134 +msgid "MMIO" +msgstr "" + +#: grub-core/video/ieee1275.c:74 +msgid "display" +msgstr "" + +#: grub-core/video/readers/jpeg.c:802 +msgid ".jpg" +msgstr "" + +#: grub-core/video/readers/jpeg.c:808 +msgid ".jpeg" +msgstr "" + +#: grub-core/video/readers/tga.c:477 +msgid ".tga" +msgstr "" + +#: grub-core/video/video.c:516 grub-core/video/video.c:545 +msgid "keep" +msgstr "" + +#: grub-core/video/video.c:517 +msgid "keep," +msgstr "" + +#: grub-core/video/video.c:518 +msgid "keep;" +msgstr "" + +#: include/grub/acpi.h:27 +msgid "RSD PTR " +msgstr "" + +#: include/grub/acpi.h:76 +msgid "APIC" +msgstr "" + +#: include/grub/dl.h:82 +msgid ", _" +msgstr "" + +#: include/grub/dl.h:113 include/grub/dl.h:121 include/grub/dl.h:128 +msgid "LICENSE=" +msgstr "" + +#: include/grub/dl.h:129 +msgid "\\license" +msgstr "" + +#: include/grub/efi/api.h:465 include/grub/types.h:78 include/grub/types.h:96 +#: include/grub/types.h:97 +msgid "lx" +msgstr "" + +#: include/grub/elf.h:117 +msgid "ELF" +msgstr "" + +#: include/grub/elf.h:968 +msgid "SUNW Solaris" +msgstr "" + +#: include/grub/elf.h:971 +msgid "GNU" +msgstr "" + +#: include/grub/emu/misc.h:42 +msgid "/device.map" +msgstr "" + +#: include/grub/fontformat.h:23 +msgid "PFF2" +msgstr "" + +#: include/grub/fontformat.h:26 +msgid "PTSZ" +msgstr "" + +#: include/grub/fontformat.h:27 +msgid "WEIG" +msgstr "" + +#: include/grub/fontformat.h:28 +msgid "MAXW" +msgstr "" + +#: include/grub/fontformat.h:29 +msgid "MAXH" +msgstr "" + +#: include/grub/fontformat.h:30 +msgid "ASCE" +msgstr "" + +#: include/grub/fontformat.h:31 +msgid "DESC" +msgstr "" + +#: include/grub/fontformat.h:32 +msgid "CHIX" +msgstr "" + +#: include/grub/fontformat.h:33 +msgid "DATA" +msgstr "" + +#: include/grub/fontformat.h:34 +msgid "FAMI" +msgstr "" + +#: include/grub/fontformat.h:35 +msgid "SLAN" +msgstr "" + +#: include/grub/gcrypt/gcrypt.h:55 +msgid "@VERSION@" +msgstr "" + +#: include/grub/gui.h:32 +msgid "__timeout__" +msgstr "" + +#: include/grub/i386/bsd.h:48 +msgid "elf kernel" +msgstr "" + +#: include/grub/i386/bsd.h:49 +msgid "elf64 kernel" +msgstr "" + +#: include/grub/i386/bsd.h:50 +msgid "elf module" +msgstr "" + +#: include/grub/i386/bsd.h:51 +msgid "elf obj module" +msgstr "" + +#: include/grub/i386/pc/pxe.h:166 +msgid "PXENV+" +msgstr "" + +#: include/grub/i386/pc/pxe.h:193 +msgid "!PXE" +msgstr "" + +#: include/grub/keyboard_layouts.h:22 +msgid "GRUBLAYO" +msgstr "" + +#: grub-core/video/sm712.c:263 +#, c-format +msgid " {-1, 0x%x, 0x5},\n" +msgstr "" + +#: grub-core/video/sm712.c:248 +#, c-format +msgid " {1, 0x%x, 0x%x},\n" +msgstr "" + +#: grub-core/video/sm712.c:250 +#, c-format +msgid " .byte 0x%02x, 0x%02x\n" +msgstr "" + +#: include/grub/types.h:74 include/grub/types.h:113 include/grub/types.h:114 +msgid "x" +msgstr "" + +#: include/grub/types.h:75 include/grub/types.h:115 +msgid "u" +msgstr "" + +#: include/grub/types.h:79 include/grub/types.h:98 +msgid "lu" +msgstr "" + +#: include/grub/types.h:82 include/grub/types.h:101 include/grub/types.h:102 +msgid "llx" +msgstr "" + +#: include/grub/types.h:83 include/grub/types.h:103 +msgid "llu" +msgstr "" + +#: include/grub/types.h:99 +msgid "ld" +msgstr "" + +#: include/grub/types.h:104 +msgid "lld" +msgstr "" + +#: util/grub-fstest.c:363 +#, c-format +msgid "%08x\n" +msgstr "" + +#: util/grub-fstest.c:387 util/grub-fstest.c:488 util/grub-mount.c:363 +#: util/grub-mount.c:418 +#, c-format +msgid "loop%d" +msgstr "" + +#: util/grub-fstest.c:391 util/grub-mount.c:367 +#, c-format +msgid "(host)%s" +msgstr "" + +#: util/grub-menulst2cfg.c:95 util/grub-menulst2cfg.c:112 +#, c-format +msgid "" +"}\n" +"\n" +msgstr "" + +#: util/grub-menulst2cfg.c:99 +#, c-format +msgid "menuentry '%s' {\n" +msgstr "" + +#: util/grub-mkfont.c:159 util/grub-mkfont.c:1203 +#, c-format +msgid ": %s\n" +msgstr "" + +#: util/grub-mkfont.c:171 +#, c-format +msgid "%x\n" +msgstr "" + +#: grub-core/loader/i386/xnu.c:181 grub-core/loader/i386/xnu.c:186 +#: include/grub/i386/tsc.h:45 include/grub/i386/tsc.h:48 +#: include/grub/i386/tsc.h:127 include/grub/i386/tsc.h:133 +msgid "%rax" +msgstr "" + +#: grub-core/loader/i386/xnu.c:459 +msgid "device-properties" +msgstr "" + +#: grub-core/loader/i386/xnu.c:658 +msgid "firmware-revision" +msgstr "" + +#: grub-core/loader/i386/xnu.c:668 +msgid "firmware-vendor" +msgstr "" + +#: grub-core/loader/i386/xnu.c:679 +msgid "firmware-abi" +msgstr "" + +#: grub-core/loader/i386/xnu.c:682 grub-core/loader/i386/xnu.c:687 +msgid "EFI32" +msgstr "" + +#: grub-core/loader/i386/xnu.c:689 +msgid "EFI64" +msgstr "" + +#: grub-core/loader/i386/xnu.c:693 +msgid "platform" +msgstr "" + +#: grub-core/loader/i386/xnu.c:698 +msgid "FSBFrequency" +msgstr "" + +#: grub-core/loader/i386/xnu.c:720 +msgid "configuration-table" +msgstr "" + +#: grub-core/loader/i386/xnu.c:761 +#, c-format +msgid "%08x-%04x-%04x-%02x%02x-" +msgstr "" + +#: grub-core/loader/i386/xnu.c:786 grub-core/loader/i386/xnu.c:820 +msgid "table" +msgstr "" + +#: grub-core/loader/i386/xnu.c:804 +msgid "alias" +msgstr "" + +#: grub-core/loader/i386/xnu.c:817 +msgid "runtime-services" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:343 +msgid "b" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:522 include/grub/lib/cmdline.h:25 +msgid "BOOT_IMAGE=" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:539 +msgid "BOOT_IMAGE" +msgstr "" + +#: grub-core/loader/linux.c:164 +msgid "newc:" +msgstr "" + +#: grub-core/loader/macho32.c:18 +msgid "32" +msgstr "" + +#: grub-core/loader/macho64.c:18 +msgid "64" +msgstr "" + +#: grub-core/loader/mips/linux.c:46 +msgid "machtype=lemote-yeeloong-2f-8.9inches" +msgstr "" + +#: grub-core/loader/mips/linux.c:47 +msgid "machtype=lemote-fuloong-2f-box" +msgstr "" + +#: grub-core/loader/mips/linux.c:48 +msgid "machtype=lemote-fuloong-2e-unknown" +msgstr "" + +#: grub-core/loader/mips/linux.c:280 grub-core/loader/mips/linux.c:357 +#: grub-core/loader/mips/linux.c:466 +msgid "rd_start=0xXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/loader/mips/linux.c:281 grub-core/loader/mips/linux.c:362 +msgid "rd_size=0xXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/loader/mips/linux.c:286 grub-core/loader/mips/linux.c:374 +msgid "memsize=XXXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/loader/mips/linux.c:287 grub-core/loader/mips/linux.c:380 +msgid "highmemsize=XXXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/loader/mips/linux.c:288 grub-core/loader/mips/linux.c:387 +msgid "busclock=XXXXXXXXXX" +msgstr "" + +#: grub-core/loader/mips/linux.c:289 grub-core/loader/mips/linux.c:392 +msgid "cpuclock=XXXXXXXXXX" +msgstr "" + +#: grub-core/loader/mips/linux.c:375 +#, c-format +msgid "memsize=%lld" +msgstr "" + +#: grub-core/loader/mips/linux.c:381 +#, c-format +msgid "highmemsize=%lld" +msgstr "" + +#: grub-core/loader/mips/linux.c:388 +#, c-format +msgid "busclock=%d" +msgstr "" + +#: grub-core/loader/mips/linux.c:393 +#, c-format +msgid "cpuclock=%d" +msgstr "" + +#: grub-core/loader/mips/linux.c:456 +msgid "%s rd_start=0x%" +msgstr "" + +#: grub-core/loader/mips/linux.c:457 +msgid " rd_size=0x%" +msgstr "" + +#: grub-core/loader/mips/linux.c:466 +#, c-format +msgid "rd_start=0x%llx" +msgstr "" + +#: grub-core/loader/mips/linux.c:473 +msgid "rd_size=0xXXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/loader/mips/linux.c:473 +#, c-format +msgid "rd_size=0x%llx" +msgstr "" + +#: grub-core/loader/multiboot.c:207 +#, c-format +msgid "%dx%dx%d,%dx%d,auto" +msgstr "" + +#: grub-core/loader/multiboot.c:210 +#, c-format +msgid "%dx%d,auto" +msgstr "" + +#: grub-core/loader/sparc64/ieee1275/linux.c:454 +msgid "/virtual-memory" +msgstr "" + +#: grub-core/loader/xnu.c:222 grub-core/loader/xnu.c:568 +msgid "memory-map" +msgstr "" + +#: grub-core/loader/xnu.c:229 +msgid "DeviceTree" +msgstr "" + +#: grub-core/loader/xnu.c:617 +msgid "/Contents/" +msgstr "" + +#: grub-core/loader/xnu.c:748 +msgid "Driver-" +msgstr "" + +#: grub-core/loader/xnu.c:867 +msgid "DriversPackage-" +msgstr "" + +#: grub-core/loader/xnu.c:907 +msgid "RAMDisk" +msgstr "" + +#: grub-core/loader/xnu.c:961 +msgid "OSBundleRequired" +msgstr "" + +#: grub-core/loader/xnu.c:964 +msgid "CFBundleExecutable" +msgstr "" + +#: grub-core/loader/xnu.c:998 +msgid "key" +msgstr "" + +#: grub-core/loader/xnu.c:1000 grub-core/net/bootp.c:373 +msgid "string" +msgstr "" + +#: grub-core/loader/xnu.c:1002 +msgid "/key" +msgstr "" + +#: grub-core/loader/xnu.c:1043 +msgid ".kext" +msgstr "" + +#: grub-core/loader/xnu.c:1128 +msgid "Contents" +msgstr "" + +#: grub-core/loader/xnu.c:1133 +msgid "Plugins" +msgstr "" + +#: grub-core/loader/xnu.c:1139 +msgid "MacOS" +msgstr "" + +#: grub-core/loader/xnu.c:1143 +msgid "Info.plist" +msgstr "" + +#: grub-core/loader/xnu.c:1204 grub-core/loader/xnu.c:1207 +msgid "/MacOS/" +msgstr "" + +#: grub-core/loader/xnu.c:1283 +msgid "console,root,local-root,network-root" +msgstr "" + +#: grub-core/loader/xnu.c:1344 grub-core/loader/xnu.c:1345 +#: grub-core/loader/xnu.c:1348 +msgid "XNU.DeviceTree." +msgstr "" + +#: grub-core/net/bootp.c:40 +msgid "net_" +msgstr "" + +#: grub-core/net/bootp.c:40 include/grub/dl.h:82 include/grub/symbol.h:34 +msgid "_" +msgstr "" + +#: grub-core/net/bootp.c:43 +#, c-format +msgid "net_%s_%s" +msgstr "" + +#: grub-core/net/bootp.c:102 +msgid ":default" +msgstr "" + +#: grub-core/net/bootp.c:109 +#, c-format +msgid "%s:default" +msgstr "" + +#: grub-core/net/bootp.c:127 +msgid "hostname" +msgstr "" + +#: grub-core/net/bootp.c:131 +msgid "domain" +msgstr "" + +#: grub-core/net/bootp.c:135 +msgid "rootpath" +msgstr "" + +#: grub-core/net/bootp.c:139 +msgid "extensionspath" +msgstr "" + +#: grub-core/net/bootp.c:183 +msgid ":gw" +msgstr "" + +#: grub-core/net/bootp.c:190 +#, c-format +msgid "%s:gw" +msgstr "" + +#: grub-core/net/bootp.c:200 +msgid "boot_file" +msgstr "" + +#: grub-core/net/bootp.c:206 grub-core/net/net.c:713 +#, c-format +msgid "%d.%d.%d.%d" +msgstr "" + +#: grub-core/net/bootp.c:216 +#, c-format +msgid "tftp,%d.%d.%d.%d" +msgstr "" + +#: grub-core/net/bootp.c:226 +msgid "dhcp_server_name" +msgstr "" + +#: grub-core/net/bootp.c:235 +#, c-format +msgid "tftp,%s" +msgstr "" + +#: grub-core/net/bootp.c:277 +#, c-format +msgid "%s:dhcp" +msgstr "" + +#: grub-core/net/bootp.c:294 +msgid ":dhcp_tmp" +msgstr "" + +#: grub-core/net/bootp.c:387 +msgid "number" +msgstr "" + +#: grub-core/net/bootp.c:394 +#, c-format +msgid "%llu\n" +msgstr "" + +#: grub-core/net/bootp.c:398 +#, c-format +msgid "%lld\n" +msgstr "" + +#: grub-core/net/bootp.c:460 +#, c-format +msgid "%s:dhcp_tmp" +msgstr "" + +#: grub-core/net/drivers/arc/arcnet.c:89 +#, c-format +msgid "<%lu>" +msgstr "" + +#: grub-core/net/drivers/efi/efinet.c:205 +#, c-format +msgid "efinet%d" +msgstr "" + +#: grub-core/net/drivers/emu/emunet.c:104 +msgid "/dev/net/tun" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:43 +#: grub-core/net/drivers/ieee1275/ofnet.c:47 +msgid ":speed=auto,duplex=auto,1.1.1.1,dummy,1.1.1.1,1.1.1.1,5,5,1.1.1.1,512" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:135 +msgid "bootp-response" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:136 +msgid "dhcp-response" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:137 +msgid "bootpreply-packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:266 +msgid "alloc-mem" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:291 +#, c-format +msgid "ofnet_%s" +msgstr "" + +#: grub-core/net/http.c:103 grub-core/net/http.c:109 +msgid "HTTP/1.1 " +msgstr "" + +#: grub-core/net/http.c:133 grub-core/net/http.c:136 +msgid "Content-Length: " +msgstr "" + +#: grub-core/net/http.c:141 grub-core/net/http.c:142 +msgid "Transfer-Encoding: chunked" +msgstr "" + +#: grub-core/net/http.c:317 grub-core/net/http.c:330 grub-core/net/http.c:336 +msgid "GET " +msgstr "" + +#: grub-core/net/http.c:319 grub-core/net/http.c:349 grub-core/net/http.c:355 +#: grub-core/net/http.c:356 +msgid "" +" HTTP/1.1\r\n" +"Host: " +msgstr "" + +#: grub-core/net/http.c:321 grub-core/net/http.c:370 grub-core/net/http.c:377 +#: grub-core/net/http.c:378 +msgid "" +"\r\n" +"User-Agent: " +msgstr "" + +#: grub-core/net/http.c:322 grub-core/net/http.c:370 grub-core/net/http.c:377 +#: grub-core/net/http.c:378 grub-core/net/http.c:392 +msgid "\r\n" +msgstr "" + +#: grub-core/net/http.c:323 grub-core/net/http.c:383 +msgid "" +"Range: bytes=XXXXXXXXXXXXXXXXXXXX-\r\n" +"\r\n" +msgstr "" + +#: grub-core/net/http.c:386 +msgid "Range: bytes=%" +msgstr "" + +#: grub-core/net/http.c:386 +msgid "" +"-\r\n" +"\r\n" +msgstr "" + +#: grub-core/net/icmp6.c:416 +msgid ":XXXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/net/icmp6.c:417 +#, c-format +msgid "%s:%d" +msgstr "" + +#: grub-core/net/net.c:230 grub-core/net/net.c:238 +msgid ":slaac" +msgstr "" + +#: grub-core/net/net.c:253 grub-core/net/net.c:276 +msgid ":link" +msgstr "" + +#: grub-core/net/net.c:822 +msgid "net__mac" +msgstr "" + +#: grub-core/net/net.c:825 +#, c-format +msgid "net_%s_mac" +msgstr "" + +#: grub-core/net/net.c:835 +msgid "net__ip" +msgstr "" + +#: grub-core/net/net.c:838 +#, c-format +msgid "net_%s_ip" +msgstr "" + +#: grub-core/net/net.c:908 +#, c-format +msgid "%s:local" +msgstr "" + +#: grub-core/net/net.c:1054 +msgid "gw" +msgstr "" + +#: grub-core/net/net.c:1091 +#, c-format +msgid "%d.%d.%d.%d/%d " +msgstr "" + +#: grub-core/net/net.c:1184 grub-core/net/net.c:1188 +msgid "pxe:" +msgstr "" + +#: grub-core/net/tftp.c:180 grub-core/net/tftp.c:181 grub-core/net/tftp.c:343 +#: grub-core/net/tftp.c:344 grub-core/net/tftp.c:345 +msgid "tsize" +msgstr "" + +#: grub-core/net/tftp.c:183 grub-core/net/tftp.c:184 grub-core/net/tftp.c:335 +#: grub-core/net/tftp.c:336 grub-core/net/tftp.c:337 +msgid "blksize" +msgstr "" + +#: grub-core/net/tftp.c:331 grub-core/net/tftp.c:332 grub-core/net/tftp.c:333 +msgid "octet" +msgstr "" + +#: grub-core/net/tftp.c:339 grub-core/net/tftp.c:340 grub-core/net/tftp.c:341 +msgid "1024" +msgstr "" + +#: grub-core/net/tftp.c:431 grub-core/net/tftp.c:437 +msgid "closed" +msgstr "" + +#: grub-core/normal/auth.c:178 +msgid "\b" +msgstr "" + +#: grub-core/normal/autofs.c:74 +msgid "/fs.lst" +msgstr "" + +#: grub-core/normal/completion.c:133 +msgid "\" " +msgstr "" + +#: grub-core/normal/completion.c:135 util/grub-probe.c:506 +#: util/grub-probe.c:544 +#, c-format +msgid "' " +msgstr "" + +#: grub-core/normal/completion.c:337 +msgid "- " +msgstr "" + +#: grub-core/normal/completion.c:348 +msgid "-u" +msgstr "" + +#: grub-core/normal/completion.c:364 util/ieee1275/grub-ofpathname.c:39 +msgid "--help" +msgstr "" + +#: grub-core/normal/completion.c:366 +msgid "--usage" +msgstr "" + +#: grub-core/normal/crypto.c:90 +msgid "/crypto.lst" +msgstr "" + +#: grub-core/normal/dyncmd.c:104 +msgid "/command.lst" +msgstr "" + +#: grub-core/normal/main.c:363 +#, c-format +msgid "%s/grub.cfg" +msgstr "" + +#: grub-core/normal/main.c:516 +msgid "feature_chainloader_bpb" +msgstr "" + +#: grub-core/normal/main.c:516 +msgid "feature_ntldr" +msgstr "" + +#: grub-core/normal/main.c:516 +msgid "feature_platform_search_hint" +msgstr "" + +#: grub-core/normal/main.c:517 +msgid "feature_default_font_path" +msgstr "" + +#: grub-core/normal/main.c:517 +msgid "feature_all_video_module" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "feature_menuentry_id" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "feature_menuentry_options" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "feature_200_final" +msgstr "" + +#: grub-core/normal/main.c:519 +msgid "feature_nativedisk_cmd" +msgstr "" + +#: grub-core/normal/main.c:568 +msgid "white/black" +msgstr "" + +#: grub-core/normal/main.c:569 +msgid "black/white" +msgstr "" + +#: grub-core/normal/term.c:326 +msgid "/terminal.lst" +msgstr "" + +#: grub-core/partmap/amiga.c:34 +msgid "RDSK" +msgstr "" + +#: grub-core/partmap/amiga.c:51 +msgid "PART" +msgstr "" + +#: grub-core/term/at_keyboard.c:642 grub-core/term/at_keyboard.c:654 +msgid "at_keyboard" +msgstr "" + +#: grub-core/term/efi/serial.c:170 grub-core/term/efi/serial.c:173 +msgid "efiXXXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/term/efi/serial.c:174 +#, c-format +msgid "efi%d" +msgstr "" + +#: grub-core/term/emu/console.c:166 +msgid "vt100-color" +msgstr "" + +#: grub-core/term/i386/pc/vga_text.c:254 grub-core/term/i386/pc/vga_text.c:279 +msgid "mda_text" +msgstr "" + +#: grub-core/term/ieee1275/console.c:152 +msgid "cursor-on" +msgstr "" + +#: grub-core/term/ieee1275/console.c:154 +msgid "cursor-off" +msgstr "" + +#: grub-core/term/ieee1275/console.c:179 +msgid "output-device output" +msgstr "" + +#: grub-core/term/ieee1275/console.c:255 +msgid "dumb" +msgstr "" + +#: grub-core/term/ieee1275/console.c:257 +msgid "ieee1275-nocursor" +msgstr "" + +#: grub-core/term/ieee1275/console.c:259 +msgid "ieee1275" +msgstr "" + +#: grub-core/term/ieee1275/escc.c:229 +#, c-format +msgid "escc-ch-%c" +msgstr "" + +#: grub-core/term/ieee1275/escc.c:250 +msgid "mac-io" +msgstr "" + +#: grub-core/term/ieee1275/escc.c:269 +msgid "escc" +msgstr "" + +#: grub-core/term/morse.c:126 +msgid "audio" +msgstr "" + +#: include/grub/lvm.h:32 +msgid "LABELONE" +msgstr "" + +#: include/grub/lvm.h:33 +msgid "LVM2 001" +msgstr "" + +#: include/grub/macho.h:127 +msgid "complzss" +msgstr "" + +#: include/grub/net.h:459 +msgid "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX" +msgstr "" + +#: include/grub/net.h:466 +msgid "XX:XX:XX:XX:XX:XX" +msgstr "" + +#: include/grub/symbol.h:44 +msgid "function" +msgstr "" + +#: include/grub/symbol.h:45 +msgid "object" +msgstr "" + +#: grub-core/lib/adler32.c:84 +msgid "ADLER32" +msgstr "" + +#: grub-core/lib/arg.c:123 +msgid "-h, " +msgstr "" + +#: grub-core/lib/arg.c:125 +msgid "-u, " +msgstr "" + +#: grub-core/lib/arg.c:127 +msgid " " +msgstr "" + +#: grub-core/lib/arg.c:131 grub-core/normal/completion.c:376 +#, c-format +msgid "--%s" +msgstr "" + +#: grub-core/lib/arg.c:136 +#, c-format +msgid "=%s" +msgstr "" + +#: grub-core/loader/i386/xnu.c:55 +msgid "ACPI_20" +msgstr "" + +#: grub-core/loader/i386/xnu.c:56 grub-core/loader/i386/xnu.c:644 +#: grub-core/loader/i386/xnu.c:645 grub-core/loader/i386/xnu.c:649 +#: grub-core/loader/i386/xnu.c:650 +msgid "ACPI" +msgstr "" + +#: grub-core/net/net.c:1132 +msgid "gw " +msgstr "" + +#: grub-core/kern/rescue_reader.c:40 +msgid "> " +msgstr "" + +#: grub-core/kern/rescue_reader.c:40 +msgid "grub rescue> " +msgstr "" + +#: grub-core/term/arc/console.c:87 grub-core/term/arc/console.c:88 +#: grub-core/term/arc/console.c:89 grub-core/term/arc/console.c:91 +msgid "line" +msgstr "" + +#: grub-core/term/arc/console.c:120 +msgid "ConsoleOut" +msgstr "" + +#: grub-core/term/arc/console.c:206 grub-core/term/serial.c:252 +#: grub-core/term/serial.c:334 +msgid "vt100" +msgstr "" + +#: grub-core/term/arc/console.c:208 +msgid "arc" +msgstr "" + +#: grub-core/parttool/msdospart.c:88 +msgid "hidden" +msgstr "" + +#: grub-core/loader/xnu.c:1422 grub-core/term/gfxterm.c:1153 +msgid "stretch" +msgstr "" + +#: grub-core/loader/machoXX.c:326 grub-core/loader/machoXX.c:328 +#: grub-core/loader/machoXX.c:329 grub-core/loader/machoXX.c:331 +#: grub-core/loader/machoXX.c:333 +msgid "Darwin Kernel Version " +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:267 +#, c-format +msgid "sdB%u" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:270 +#, c-format +msgid "fd%u" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:290 +msgid "sdZ0" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:296 grub-core/loader/i386/pc/plan9.c:299 +#: grub-core/loader/i386/pc/plan9.c:308 grub-core/loader/i386/pc/plan9.c:311 +msgid "ata0" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:300 grub-core/loader/i386/pc/plan9.c:313 +#, c-format +msgid "sd%c%d" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:320 +#, c-format +msgid "sd0%u" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:331 grub-core/loader/i386/pc/plan9.c:346 +#: grub-core/loader/i386/pc/plan9.c:347 +msgid "part=" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:416 +#, c-format +msgid "%s!%s!%s" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:419 +#, c-format +msgid "%s!%s" +msgstr "" + +#: grub-core/commands/wildcard.c:83 +msgid "*.\\|+{}[]?" +msgstr "" + +#: grub-core/disk/dmraid_nvidia.c:71 +msgid "NVIDIA" +msgstr "" + +#: grub-core/commands/sleep.c:45 +#, c-format +msgid "%d " +msgstr "" + +#: grub-core/commands/verify.c:258 +msgid "™" +msgstr "" + +#: grub-core/disk/cryptodisk.c:576 +msgid " sectors from sector 0x%" +msgstr "" + +#: grub-core/disk/cryptodisk.c:577 grub-core/disk/cryptodisk.c:626 +msgid " with offset of %" +msgstr "" + +#: grub-core/disk/cryptodisk.c:625 +msgid " sectors to sector 0x%" +msgstr "" + +#: grub-core/disk/geli.c:469 +msgid "" +msgstr "" + +#: grub-core/disk/luks.c:40 +msgid "LUKSº¾" +msgstr "" + +#: grub-core/font/font.c:450 grub-core/font/font.c:454 +msgid "/fonts/" +msgstr "" + +#: grub-core/font/font.c:450 grub-core/font/font.c:456 +msgid ".pf2" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:117 +msgid "path" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:389 +#, c-format +msgid "zfs-bootfs=%s/%llu%s%s%s%s%s%s" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:391 +msgid ",bootpath=\"" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:393 grub-core/fs/zfs/zfsinfo.c:396 +msgid "\"" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:394 +msgid ",diskdevid=\"" +msgstr "" + +#: grub-core/gdb/cstub.c:26 +msgid "0123456789abcdef" +msgstr "" + +#: grub-core/lib/i386/halt.c:26 +msgid "Shutdown" +msgstr "" + +#: grub-core/lib/minilzo/lzoconf.h:48 +msgid "2.05" +msgstr "" + +#: grub-core/lib/minilzo/lzoconf.h:49 +msgid "Apr 23 2011" +msgstr "" + +#: grub-core/lib/minilzo/lzoconf.h:80 grub-core/lib/minilzo/lzoconf.h:233 +#: grub-core/lib/minilzo/minilzo.h:68 include/grub/gcrypt/gcrypt.h:44 +msgid "C" +msgstr "" + +#: grub-core/loader/i386/bsd.c:611 grub-core/loader/i386/bsd.c:613 +#: grub-core/loader/i386/bsd.c:657 grub-core/loader/i386/bsd.c:659 +msgid "kFreeBSD." +msgstr "" + +#: grub-core/loader/i386/bsd.c:939 grub-core/loader/i386/linux.c:497 +#: grub-core/loader/i386/xnu.c:870 grub-core/loader/multiboot.c:106 +#: grub-core/term/gfxterm.c:378 +#, c-format +msgid "%s;" +msgstr "" + +#: grub-core/loader/i386/linux.c:966 +#, c-format +msgid "%ux%ux%u,%ux%u" +msgstr "" + + +#: grub-core/loader/i386/pc/plan9.c:119 +msgid "linuxswap" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:146 grub-core/partmap/plan.c:46 +#: grub-core/partmap/plan.c:55 +msgid "part " +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:196 +#, c-format +msgid "%s.%d" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:457 grub-core/loader/i386/pc/plan9.c:479 +msgid "bootfile=" +msgstr "" + +#: grub-core/loader/i386/xnu.c:149 +msgid "ineIntel" +msgstr "" + +#: grub-core/loader/i386/xnu.c:159 +msgid "GenuineIntel" +msgstr "" + +#: grub-core/loader/i386/bsd.c:50 +msgid "800x600" +msgstr "" + +#: util/misc.c:151 +#, c-format +msgid " bytes at offset 0x%llx" +msgstr "" + +#: util/misc.c:165 +msgid " bytes" +msgstr "" + +#: include/grub/lib/envblk.h:22 +msgid "# GRUB Environment Block\n" +msgstr "" + +#: include/grub/lib/envblk.h:23 +msgid "grubenv" +msgstr "" + +#: grub-core/normal/misc.c:120 +msgid "ext*" +msgstr "" + +#: grub-core/partmap/msdos.c:86 +msgid "HP Backup and Recovery Manager (?)" +msgstr "" + +#: grub-core/partmap/msdos.c:94 +msgid "ycgl" +msgstr "" + +#: grub-core/partmap/msdos.c:100 +msgid "Acer registration utility (?)" +msgstr "" + +#: grub-core/partmap/msdos.c:101 +msgid "GREGRegDone.Tag" +msgstr "" + +#: grub-core/script/execute.c:253 grub-core/script/execute.c:289 +msgid "#" +msgstr "" + +#: grub-core/script/execute.c:292 grub-core/script/execute.c:489 +#, c-format +msgid "%u" +msgstr "" + +#: grub-core/script/execute.c:693 +msgid "{" +msgstr "" + +#: grub-core/script/execute.c:705 +msgid "}" +msgstr "" + +#: grub-core/term/usb_keyboard.c:410 +#, c-format +msgid " report: 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:47 +msgid "ZORT 0\r\n" +msgstr "" + +#: grub-core/loader/i386/bsd.c:486 +#, c-format +msgid " %-18s %-18s%14s%14s\n" +msgstr "" + +#: grub-core/loader/i386/bsd.c:495 +#, c-format +msgid " %-18s" +msgstr "" + +#: grub-core/loader/i386/bsd.c:502 +#, c-format +msgid " 0x%08x" +msgstr "" + +#: grub-core/loader/i386/bsd.c:510 +#, c-format +msgid " 0x%08x\n" +msgstr "" + +#: grub-core/loader/i386/bsd.c:552 +#, c-format +msgid " %-18s%14s%14s%14s\n" +msgstr "" + +#: grub-core/loader/i386/bsd.c:556 +#, c-format +msgid " %-18s 0x%08x 0x%08x 0x%08x" +msgstr "" + +#: grub-core/loader/mips/linux.c:271 grub-core/loader/mips/linux.c:324 +#: grub-core/loader/mips/linux.c:328 +msgid "a0" +msgstr "" + +#: grub-core/fs/btrfs.c:719 grub-core/fs/btrfs.c:814 +msgid " (%d stripes (%d substripes) of %" +msgstr "" + +#: grub-core/fs/btrfs.c:815 +msgid ") stripe %" +msgstr "" + +#: grub-core/fs/btrfs.c:816 +msgid " maps to 0x%" +msgstr "" + +#: grub-core/fs/btrfs.c:824 +msgid " for laddr 0x%" +msgstr "" + +#: grub-core/fs/btrfs.c:1671 grub-core/fs/ext2.c:961 +#: grub-core/fs/reiserfs.c:1363 grub-core/fs/xfs.c:881 +#, c-format +msgid "%04x%04x-%04x-%04x-%04x-%04x%04x%04x" +msgstr "" + +#: grub-core/lib/arg.c:109 grub-core/net/net.c:1169 +#, c-format +msgid "%s %s %s\n" +msgstr "" + +#: grub-core/lib/arg.c:121 +#, c-format +msgid "-%c%c " +msgstr "" + +#: grub-core/lib/arg.c:159 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" + +#: grub-core/normal/menu.c:680 grub-core/normal/menu_entry.c:1126 +#: util/grub-menulst2cfg.c:106 +msgid " " +msgstr "" + +#: grub-core/normal/menu.c:692 +msgid "" +"\n" +" " +msgstr "" + +#: grub-core/normal/menu.c:708 +msgid "" +"\n" +" " +msgstr "" + +#: grub-core/normal/menu_entry.c:1052 +msgid "" +"\n" +" " +msgstr "" + +#: grub-core/normal/misc.c:76 +msgid ".%02" +msgstr "" + +#: grub-core/normal/misc.c:80 +#, c-format +msgid "%llu%s" +msgstr "" + +#: grub-core/normal/misc.c:95 +msgid "\t" +msgstr "" + +#: grub-core/normal/main.c:573 +msgid "y" +msgstr "" + +#: grub-core/normal/menu.c:300 grub-core/normal/menu.c:572 +msgid "fallback" +msgstr "" + +#: grub-core/net/net.c:737 +#, c-format +msgid "%02x:" +msgstr "" + +#: grub-core/net/net.c:1105 +#, c-format +msgid "%s/%d " +msgstr "" + +#: grub-core/net/net.c:1152 +#, c-format +msgid "%s %s\n" +msgstr "" + +#: grub-core/net/net.c:234 grub-core/net/net.c:272 grub-core/net/net.c:696 +#: grub-core/net/net.c:703 +msgid ":" +msgstr "" + +#: grub-core/net/ip.c:427 grub-core/net/ip.c:685 +msgid ", expected %" +msgstr "" + +#: grub-core/disk/geli.c:151 +#, c-format +msgid " keysize=%d\n" +msgstr "" + +#: grub-core/disk/scsi.c:619 +#, c-format +msgid ", blocksize=%u\n" +msgstr "" + +#: grub-core/fs/iso9660.c:1045 +#, c-format +msgid "%c%c%c%c-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1492 +msgid "big-endian gang\n" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1660 +msgid ", %p) for txg %" +msgstr "" + +#: include/grub/lvm.h:65 +msgid " LVM2 x[5A%r0N*>" +msgstr "" + +#: grub-core/video/sm712.c:267 +#, c-format +msgid " .byte 0x%04x, 0x00\n" +msgstr "" + +#: grub-core/kern/efi/mm.c:429 +#, c-format +msgid "MD: t=%x, p=%llx, v=%llx, n=%llx, a=%llx\n" +msgstr "" + +#: grub-core/kern/mm.c:402 +#, c-format +msgid "%s:%d: q=%p, q->size=0x%x, q->magic=0x%x\n" +msgstr "" + +#: grub-core/kern/mm.c:501 grub-core/kern/mm.c:529 +#, c-format +msgid "F:%p:%u:%p\n" +msgstr "" + +#: grub-core/kern/mm.c:516 +#, c-format +msgid "called at line %u\n" +msgstr "" + +#: grub-core/kern/mm.c:533 +#, c-format +msgid "A:%p:%u\n" +msgstr "" + +#: grub-core/kern/mm.c:548 +msgid "%s:%d: malloc (0x%" +msgstr "" + +#: grub-core/kern/mm.c:548 grub-core/kern/mm.c:561 grub-core/kern/mm.c:580 +#: grub-core/kern/mm.c:595 +msgid ") = " +msgstr "" + +#: grub-core/kern/mm.c:551 grub-core/kern/mm.c:564 grub-core/kern/mm.c:583 +#: grub-core/kern/mm.c:598 +#, c-format +msgid "%p\n" +msgstr "" + +#: grub-core/kern/mm.c:561 +msgid "%s:%d: zalloc (0x%" +msgstr "" + +#: grub-core/kern/mm.c:572 +#, c-format +msgid "%s:%d: free (%p)\n" +msgstr "" + +#: grub-core/kern/mm.c:580 +msgid "%s:%d: realloc (%p, 0x%" +msgstr "" + +#: grub-core/kern/mm.c:594 +msgid "%s:%d: memalign (0x%" +msgstr "" + +#: grub-core/lib/hexdump.c:49 grub-core/normal/menu_entry.c:1023 +msgid " " +msgstr "" + +#: grub-core/lib/hexdump.c:71 +msgid "*\n" +msgstr "" + +#: grub-core/lib/i386/backtrace.c:38 +#, c-format +msgid "%p: " +msgstr "" + +#: grub-core/lib/i386/backtrace.c:40 +msgid " (" +msgstr "" + +#: grub-core/lib/i386/backtrace.c:42 +#, c-format +msgid "%p," +msgstr "" + +#: grub-core/lib/i386/backtrace.c:43 +#, c-format +msgid "%p)\n" +msgstr "" + +#: grub-core/net/net.c:738 +msgid "XX:" +msgstr "" + +#: util/grub-mkimagexx.c:131 +msgid "_start" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:240 +msgid "°" +msgstr "" + +#: grub-core/kern/emu/argp_common.c:33 util/grub-editenv.c:61 +#: util/grub-fstest.c:531 util/grub-mount.c:449 +#, c-format +msgid "%s (%s) %s\n" +msgstr "" + +#: grub-core/video/sm712.c:252 grub-core/video/sm712.c:266 +#, c-format +msgid "FAIL\n" +msgstr "" + +#: grub-core/lib/hexdump.c:34 +#, c-format +msgid "%08lx " +msgstr "" + +#: grub-core/lib/backtrace.c:41 +msgid "%s.%x+%" +msgstr "" + +#: grub-core/commands/minicmd.c:113 +#, c-format +msgid "%x%x " +msgstr "" + +#: grub-core/commands/minicmd.c:158 +#, c-format +msgid "%s\t%d\t\t" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:238 grub-core/disk/arc/arcdisk.c:275 +#, c-format +msgid " failed: %ld\n" +msgstr "" + +#: grub-core/lib/xzembed/xz_stream.h:38 +msgid "YZ" +msgstr "" + +#: grub-core/font/font.c:197 +msgid "" +msgstr "" + +#: grub-core/font/font.c:635 +msgid "Unknown" +msgstr "" + +#: grub-core/lib/crypto.c:83 grub-core/lib/libgcrypt_wrap/mem.c:99 +msgid "gcrypt" +msgstr "" + +#: grub-core/lib/crypto.c:85 +msgid "gcrypt error: " +msgstr "" + +#: grub-core/commands/acpihalt.c:217 +msgid "\\" +msgstr "" + +#: grub-core/commands/minicmd.c:85 +#, c-format +msgid "%s (%d%c)\t%s\n" +msgstr "" + +#: grub-core/commands/probe.c:77 grub-core/commands/probe.c:91 +#: util/grub-mkimage.c:1905 +msgid "none" +msgstr "" + +#: grub-core/lib/libgcrypt_wrap/mem.c:101 +msgid "gcrypt: " +msgstr "" + +#: grub-core/lib/libgcrypt_wrap/mem.c:113 +msgid "gcrypt bug: " +msgstr "" + +#: grub-core/lib/posix_wrap/assert.h:30 +#, c-format +msgid "Assertion failed at %s:%d\n" +msgstr "" + +#: include/grub/list.h:42 +msgid "bad type cast between incompatible grub types" +msgstr "" + +#: grub-core/kern/mm.c:117 +#, c-format +msgid "Using memory for heap: start=%p, end=%p\n" +msgstr "" + +#: grub-core/loader/efi/chainloader.c:263 +msgid "file path: " +msgstr "" + +#: grub-core/net/net.c:720 +#, c-format +msgid "Unknown address type %d" +msgstr "" + +#: grub-core/normal/misc.c:164 +#, c-format +msgid ", UUID %s" +msgstr "" + +#: grub-core/video/readers/jpeg.c:817 +msgid "Tests loading of JPEG bitmap." +msgstr "" + +#: grub-core/video/readers/png.c:959 +msgid "Tests loading of PNG bitmap." +msgstr "" + +#: grub-core/video/readers/tga.c:485 +msgid "Tests loading of TGA bitmap." +msgstr "" + +#: util/grub-mkimagexx.c:107 +#, c-format +msgid "undefined symbol %s" +msgstr "" + +#: util/grub-mkimagexx.c:112 +#, c-format +msgid "section %d does not exist" +msgstr "" + +#: util/grub-mkimagexx.c:348 +msgid "trampoline offset too big (%" +msgstr "" + +#: util/grub-mkimagexx.c:395 +#, c-format +msgid " at the offset 0x%llx" +msgstr "" + +#: util/grub-mkimagexx.c:412 +#, c-format +msgid "unknown architecture type %d" +msgstr "" + +#: util/grub-mkimagexx.c:502 +msgid "too many fixup entries" +msgstr "" + +#: util/grub-mkimagexx.c:584 +msgid "can't add fixup entry for R_X86_64_32(S)" +msgstr "" + +#: util/grub-mkimagexx.c:639 +#, c-format +msgid "unknown machine type 0x%x" +msgstr "" + +#: util/grub-mkimagexx.c:828 +msgid "invalid ELF header" +msgstr "" + +#: util/grub-mkimagexx.c:946 +msgid "start symbol is not defined" +msgstr "" + +#: grub-core/commands/acpihalt.c:132 grub-core/commands/acpihalt.c:284 +#, c-format +msgid "Unknown opcode 0x%x\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:176 +#, c-format +msgid "Unexpected extended opcode: 0x%x\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:226 +#, c-format +msgid "Unknown opcode in _S5: 0x%x\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:245 +#, c-format +msgid "Unknown data type in _S5: 0x%x\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:301 +#, c-format +msgid "Usage: %s FILE\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:305 +#, c-format +msgid "Couldn't open file\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:326 +#, c-format +msgid "Sleep type = %d\n" +msgstr "" + +#: grub-core/loader/sparc64/ieee1275/linux.c:456 +msgid "Cannot find /virtual-memory node.\n" +msgstr "" + +#: grub-core/loader/sparc64/ieee1275/linux.c:462 +msgid "Cannot find /virtual-memory/translations size.\n" +msgstr "" + +#: grub-core/loader/sparc64/ieee1275/linux.c:469 +msgid "Cannot allocate translations buffer.\n" +msgstr "" + +#: grub-core/loader/sparc64/ieee1275/linux.c:475 +msgid "Cannot fetch /virtual-memory/translations property.\n" +msgstr "" + +#: grub-core/mmap/efi/mmap.c:87 +#, c-format +msgid "Unknown memory type %d, considering reserved\n" +msgstr "" + +#: grub-core/gdb/cstub.c:215 +#, c-format +msgid "Unhandled exception 0x%x at " +msgstr "" + +#: grub-core/gfxmenu/view.c:476 +#, c-format +msgid "Booting '%s'" +msgstr "" + +#: grub-core/gfxmenu/view.c:494 +#, c-format +msgid "Falling back to '%s'" +msgstr "" + +#: grub-core/disk/ieee1275/ofdisk.c:524 grub-core/kern/ieee1275/init.c:98 +msgid "/chosen/bootpath property missing!\n" +msgstr "" + +#: grub-core/commands/videotest.c:95 grub-core/commands/videotest.c:100 +msgid "The quick brown fox jumped over the lazy dog." +msgstr "" + +#: grub-core/commands/videotest.c:122 +msgid "Unicode test: happy☺ £ 5.00 ¡τäu! ℤ⊆ℝ" +msgstr "" + +#: grub-core/kern/i386/multiboot_mmap.c:51 +#, c-format +msgid "" +"WARNING: Memory map size exceeds limit (0x%x > 0x%x); it will be truncated\n" +msgstr "" + +#: grub-core/kern/main.c:261 +msgid "" +"Welcome to GRUB!\n" +"\n" +msgstr "" + +#: grub-core/kern/misc.c:1105 +msgid "" +"\n" +"Aborted." +msgstr "" + +#: grub-core/kern/misc.c:1111 +msgid " Press any key to exit." +msgstr "" + +#: grub-core/kern/err.c:131 +msgid "assert: error stack overflow detected!\n" +msgstr "" + +#: grub-core/kern/ieee1275/init.c:202 +msgid "Warning: attempt to claim over our own code!\n" +msgstr "" + +#: grub-core/lib/arg.c:177 +#, c-format +msgid "" +"\n" +"Report bugs to <%s>.\n" +msgstr "" + +#: grub-core/lib/i386/backtrace.c:48 +#, c-format +msgid "Invalid stack frame at %p (%p)\n" +msgstr "" + +#: grub-core/kern/efi/mm.c:511 +msgid "printing memory map\n" +msgstr "" + +#: grub-core/bus/emu/pci.c:58 +#, c-format +msgid "mapping 0x%x failed (error %d)\n" +msgstr "" + +#: grub-core/bus/usb/ehci.c:1572 +#, c-format +msgid "%s: prev not found, queues are corrupt\n" +msgstr "" + +#: grub-core/commands/boottime.c:46 +#, c-format +msgid "%3d.%03ds %2d.%03ds %s:%d %s\n" +msgstr "" + +#: grub-core/commands/date.c:49 +#, c-format +msgid "%d-%02d-%02d %02d:%02d:%02d %s\n" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:195 +#, c-format +msgid "%cD #%-3u (0x%02x) %cd%d\n" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:259 +msgid "Swapping" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:259 +msgid "Mapping" +msgstr "" + +#: grub-core/kern/rescue_parser.c:71 +msgid "Try `help' for usage\n" +msgstr "" + +#: grub-core/kern/rescue_reader.c:81 +msgid "Entering rescue mode...\n" +msgstr "" + +#: grub-core/kern/corecmd.c:153 +#, c-format +msgid "(%s): Filesystem is %s.\n" +msgstr "" + +#: grub-core/kern/corecmd.c:154 +msgid "unknown" +msgstr "" + +#: grub-core/commands/ls.c:157 +#, c-format +msgid " %d-%02d-%02d %02d:%02d:%02d %-11s " +msgstr "" + +#: grub-core/commands/ls.c:163 +#, c-format +msgid " %04d%02d%02d%02d%02d%02d " +msgstr "" + +#: grub-core/commands/testload.c:72 +#, c-format +msgid "Reading %s sequentially" +msgstr "" + +#: grub-core/commands/testload.c:76 grub-core/commands/testload.c:101 +#: grub-core/commands/testload.c:140 +msgid " Done.\n" +msgstr "" + +#: grub-core/commands/testload.c:79 +#, c-format +msgid "Reading %s sequentially again" +msgstr "" + +#: grub-core/commands/testload.c:96 grub-core/commands/testload.c:125 +#, c-format +msgid "" +"\n" +"Differs in %lld\n" +msgstr "" + +#: grub-core/commands/testload.c:104 +#, c-format +msgid "Reading %s backwards" +msgstr "" + +#: grub-core/commands/keylayouts.c:177 +#, c-format +msgid "Unknown key 0x%x detected\n" +msgstr "" + +#: grub-core/commands/videotest.c:203 +#, c-format +msgid "color %d: %08x\n" +msgstr "" + +#: grub-core/kern/efi/mm.c:196 +msgid "Trying to terminate EFI services again\n" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:639 +#, c-format +msgid "cannot get disk label of `%s'" +msgstr "" + +#: grub-core/term/at_keyboard.c:370 +msgid "No supported scancode set found\n" +msgstr "" + +#: grub-core/term/usb_keyboard.c:402 +#, c-format +msgid "%s failed. Stopped\n" +msgstr "" + +#: util/grub-setup.c:343 +#, c-format +msgid "guessing the root device failed, because of `%s'" +msgstr "" + +#: grub-core/commands/keylayouts.c:177 +#, c-format +msgid "Unknown key 0x%x detected\n" +msgstr "" + +#: grub-core/commands/videotest.c:203 +#, c-format +msgid "color %d: %08x\n" +msgstr "" + +#: grub-core/kern/efi/mm.c:196 +msgid "Trying to terminate EFI services again\n" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:639 +#, c-format +msgid "cannot get disk label of `%s'" +msgstr "" + +#: grub-core/term/at_keyboard.c:370 +msgid "No supported scancode set found\n" +msgstr "" + +#: grub-core/term/usb_keyboard.c:402 +#, c-format +msgid "%s failed. Stopped\n" +msgstr "" + +#: util/grub-setup.c:343 +#, c-format +msgid "guessing the root device failed, because of `%s'" +msgstr "" + +#: grub-core/commands/cat.c:106 +#, c-format +msgid "%C" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:284 +msgid "org.illumos:lz4_compress" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:350 +msgid "lz4" +msgstr "" + +#: include/grub/cbfs_core.h:125 +msgid "LARCHIVE" +msgstr "" + +#: include/grub/zfs/dmu.h:162 +msgid "features_for_read" +msgstr "" + +#: util/grub-mkimage.c:495 util/grub-mkimage.c:496 +msgid "arm-uboot" +msgstr "" + +#: util/grub-mkimage.c:514 util/grub-mkimage.c:515 +msgid "arm-efi" +msgstr "" + +#: grub-core/fs/newc.c:61 +msgid "newc" +msgstr "" + +#: grub-core/fs/odc.c:49 +msgid "odc" +msgstr "" + +#: grub-core/fs/cpio.c:49 +msgid "cpiofs" +msgstr "" + +#: grub-core/fs/cpio_be.c:49 +msgid "cpiofs_be" +msgstr "" + +#: grub-core/fs/cpio_common.c:153 +msgid " filesystem" +msgstr "" + +#: include/grub/uboot/api_public.h:65 +msgid "UBootAPI" +msgstr "" + +#: grub-core/net/drivers/uboot/ubootnet.c:146 +#, c-format +msgid "ubnet_%d" +msgstr "" + +#: grub-core/loader/arm/linux.c:103 +msgid "linux,initrd-start" +msgstr "" + +#: grub-core/loader/arm/linux.c:107 +msgid "linux,initrd-end" +msgstr "" + +#: grub-core/kern/uboot/init.c:131 +msgid "grub_bootdev" +msgstr "" + +#: grub-core/kern/uboot/init.c:141 +msgid "grub_bootpath" +msgstr "" + +#: grub-core/kern/arm/dl_helper.c:106 +msgid "BLX" +msgstr "" + +#: grub-core/kern/arm/dl_helper.c:106 +msgid "BL" +msgstr "" + +#: grub-core/term/uboot/console.c:130 +msgid "grub_term" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:203 +msgid "terminal-border" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:209 +msgid "terminal-left" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:219 +msgid "terminal-top" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:229 +msgid "terminal-width" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:239 +msgid "terminal-height" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:181 +msgid "desktop-image-scale-method" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:186 +msgid "crop" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:189 +msgid "padding" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:192 +msgid "fitwidth" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:195 +msgid "fitheight" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:203 +msgid "desktop-image-h-align" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:216 +msgid "desktop-image-v-align" +msgstr "" + +#: grub-core/gfxmenu/theme_loader.c:222 +msgid "bottom" +msgstr "" + +#: include/grub/emu/misc.h:29 +msgid "C:\\" +msgstr "" + +#: grub-core/disk/diskfilter.c:120 util/grub-probe.c:298 +msgid "lvmid/" +msgstr "" + +#: grub-core/kern/emu/hostdisk_devmapper.c:112 +msgid "LVM-" +msgstr "" + +#: grub-core/kern/emu/hostdisk_devmapper.c:113 +msgid "mpath-" +msgstr "" + +#: grub-core/kern/emu/hostdisk_devmapper.c:114 +msgid "DMRAID-" +msgstr "" + +#: util/grub-probe.c:749 +#, c-format +msgid "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x" +msgstr "" + +#: util/grub-probe.c:843 +msgid "gpt_parttype" +msgstr "" + +#: grub-core/kern/uboot/init.c:85 +msgid "invalid U-Boot API version\n" +msgstr "" + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "source %s/grub.cfg" +msgstr "" + +#: util/grub-mknetdir.c:149 +msgid "core" +msgstr "" + +#: util/grub-mknetdir.c:174 +msgid "/srv/tftp" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:188 +msgid "XXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: util/grub-mkrescue.c:71 +#, c-format +msgid "%s=%s" +msgstr "" + +#: util/grub-mkrescue.c:97 +msgid "rom-directory" +msgstr "" + +#: util/grub-mkrescue.c:99 util/grub-mkrescue.c:373 +msgid "xorriso" +msgstr "" + +#: util/grub-mkrescue.c:102 +msgid "grub-glue-efi" +msgstr "" + +#: util/grub-mkrescue.c:103 +msgid "grub-render-label" +msgstr "" + +#: util/grub-mkrescue.c:104 +msgid "label-font" +msgstr "" + +#: util/grub-mkrescue.c:105 +msgid "label-color" +msgstr "" + +#: util/grub-mkrescue.c:106 +msgid "label-bgcolor" +msgstr "" + +#: util/grub-mkrescue.c:107 +msgid "product-name" +msgstr "" + +#: util/grub-mkrescue.c:108 +msgid "product-version" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "sparc-boot" +msgstr "" + +#: util/grub-mkrescue.c:110 +msgid "arcs-boot" +msgstr "" + +#: util/grub-mkrescue.c:120 +msgid "xorriso -as mkisofs -help" +msgstr "" + +#: util/grub-mkrescue.c:236 +#, c-format +msgid "insmod %s\n" +msgstr "" + +#: util/grub-mkrescue.c:258 +#, c-format +msgid "search --fs-uuid --set=root %s" +msgstr "" + +#: util/grub-mkrescue.c:259 +#, c-format +msgid "set prefix=(${root})/boot/grub" +msgstr "" + +#: util/grub-mkrescue.c:266 util/grub-mkrescue.c:479 util/grub-mkrescue.c:523 +msgid "/boot/grub" +msgstr "" + +#: util/grub-mkrescue.c:305 +msgid "()/boot/grub" +msgstr "" + +#: util/grub-mkrescue.c:322 util/grub-mkrescue.c:382 +msgid "-as" +msgstr "" + +#: util/grub-mkrescue.c:323 util/grub-mkrescue.c:383 +msgid "mkisofs" +msgstr "" + +#: util/grub-mkrescue.c:324 +msgid "-help" +msgstr "" + +#: util/grub-mkrescue.c:374 +msgid "unicode.pf2" +msgstr "" + +#: util/grub-mkrescue.c:384 +msgid "-graft-points" +msgstr "" + +#: util/grub-mkrescue.c:390 +msgid "roms" +msgstr "" + +#: util/grub-mkrescue.c:442 +#, c-format +msgid "%04d-%02d-%02d-%02d-%02d-%02d-00" +msgstr "" + +#: util/grub-mkrescue.c:454 +msgid "--modification-date=" +msgstr "" + +#: util/grub-mkrescue.c:468 +msgid "eltorito.img" +msgstr "" + +#: util/grub-mkrescue.c:471 +msgid "BIOS" +msgstr "" + +#: util/grub-mkrescue.c:481 util/mkimage.c:180 +msgid "i386-pc-eltorito" +msgstr "" + +#: util/grub-mkrescue.c:484 +msgid "boot/grub/i386-pc/eltorito.img" +msgstr "" + +#: util/grub-mkrescue.c:485 +msgid "-no-emul-boot" +msgstr "" + +#: util/grub-mkrescue.c:486 +msgid "-boot-load-size" +msgstr "" + +#: util/grub-mkrescue.c:487 +msgid "4" +msgstr "" + +#: util/grub-mkrescue.c:488 +msgid "-boot-info-table" +msgstr "" + +#: util/grub-mkrescue.c:491 +msgid "grub2-boot-info" +msgstr "" + +#: util/grub-mkrescue.c:494 +msgid "boot_hybrid.img" +msgstr "" + +#: util/grub-mkrescue.c:495 +msgid "--grub2-boot-info" +msgstr "" + +#: util/grub-mkrescue.c:496 +msgid "--grub2-mbr" +msgstr "" + +#: util/grub-mkrescue.c:537 util/grub-mkrescue.c:742 +msgid "-G" +msgstr "" + +#: util/grub-mkrescue.c:550 +msgid "i386-multiboot/core.elf" +msgstr "" + +#: util/grub-mkrescue.c:555 +msgid "ofwx86.elf" +msgstr "" + +#: util/grub-mkrescue.c:565 +msgid "System" +msgstr "" + +#: util/grub-mkrescue.c:565 +msgid "Library" +msgstr "" + +#: util/grub-mkrescue.c:565 +msgid "CoreServices" +msgstr "" + +#: util/grub-mkrescue.c:568 +msgid "mach_kernel" +msgstr "" + +#: util/grub-mkrescue.c:573 +msgid "SystemVersion.plist" +msgstr "" + +#: util/grub-mkrescue.c:587 +msgid ".disk_label" +msgstr "" + +#: util/grub-mkrescue.c:589 +msgid "white" +msgstr "" + +#: util/grub-mkrescue.c:590 +msgid "black" +msgstr "" + +#: util/grub-mkrescue.c:592 +msgid ".disk_label.contentDetails" +msgstr "" + +#: util/grub-mkrescue.c:600 +msgid "-hfsplus" +msgstr "" + +#: util/grub-mkrescue.c:601 +msgid "-apm-block-size" +msgstr "" + +#: util/grub-mkrescue.c:602 +msgid "2048" +msgstr "" + +#: util/grub-mkrescue.c:603 util/grub-mkrescue.c:702 +msgid "-hfsplus-file-creator-type" +msgstr "" + +#: util/grub-mkrescue.c:604 util/grub-mkrescue.c:692 util/grub-mkrescue.c:703 +msgid "chrp" +msgstr "" + +#: util/grub-mkrescue.c:605 +msgid "tbxj" +msgstr "" + +#: util/grub-mkrescue.c:606 +msgid "/System/Library/CoreServices/.disk_label" +msgstr "" + +#: util/grub-mkrescue.c:611 util/grub-mkrescue.c:706 +msgid "-hfs-bless-by" +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "/System/Library/CoreServices/boot.efi" +msgstr "" + +#: util/grub-mkrescue.c:630 +msgid "bootia64.efi" +msgstr "" + +#: util/grub-mkrescue.c:634 +msgid "bootx64.efi" +msgstr "" + +#: util/grub-mkrescue.c:637 +msgid "bootia32.efi" +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "bootarm.efi" +msgstr "" + +#: util/grub-mkrescue.c:646 util/grub-mkrescue.c:653 +msgid "boot.efi" +msgstr "" + +#: util/grub-mkrescue.c:668 util/grub-mkrescue.c:673 +msgid "efi.img" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "mformat" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "-C" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "2880" +msgstr "" + +#: util/grub-mkrescue.c:669 +msgid "16" +msgstr "" + +#: util/grub-mkrescue.c:669 util/grub-mkrescue.c:671 +msgid "-i" +msgstr "" + +#: util/grub-mkrescue.c:670 +msgid "::" +msgstr "" + +#: util/grub-mkrescue.c:671 +msgid "mcopy" +msgstr "" + +#: util/grub-mkrescue.c:671 +msgid "::/" +msgstr "" + +#: util/grub-mkrescue.c:672 +msgid "--efi-boot" +msgstr "" + +#: util/grub-mkrescue.c:674 +msgid "-efi-boot-part" +msgstr "" + +#: util/grub-mkrescue.c:675 +msgid "--efi-boot-image" +msgstr "" + +#: util/grub-mkrescue.c:683 +msgid "powerpc-ieee1275/core.elf" +msgstr "" + +#: util/grub-mkrescue.c:688 +msgid "grub.chrp" +msgstr "" + +#: util/grub-mkrescue.c:690 util/grub-mkrescue.c:693 +msgid "bootinfo.txt" +msgstr "" + +#: util/grub-mkrescue.c:691 +msgid "BootX" +msgstr "" + +#: util/grub-mkrescue.c:692 util/grub-mkrescue.c:693 +msgid "ppc" +msgstr "" + +#: util/grub-mkrescue.c:697 +msgid "/System/Library/CoreServices/grub.elf" +msgstr "" + +#: util/grub-mkrescue.c:697 util/grub-mkrescue.c:698 +msgid "/boot/grub/powerpc-ieee1275/core.elf" +msgstr "" + +#: util/grub-mkrescue.c:698 +msgid "/boot/grub/powerpc.elf" +msgstr "" + +#: util/grub-mkrescue.c:704 +msgid "tbxi" +msgstr "" + +#: util/grub-mkrescue.c:705 +msgid "/System/Library/CoreServices/BootX" +msgstr "" + +#: util/grub-mkrescue.c:707 +msgid "p" +msgstr "" + +#: util/grub-mkrescue.c:708 +msgid "/System/Library/CoreServices" +msgstr "" + +#: util/grub-mkrescue.c:710 +msgid "-sysid" +msgstr "" + +#: util/grub-mkrescue.c:711 +msgid "PPC" +msgstr "" + +#: util/grub-mkrescue.c:715 +msgid "sparc64-ieee1275/core.img" +msgstr "" + +#: util/grub-mkrescue.c:725 util/mkimage.c:1361 +msgid "cdboot.img" +msgstr "" + +#: util/grub-mkrescue.c:746 +msgid "--grub2-sparc-core" +msgstr "" + +#: util/grub-mkrescue.c:747 +msgid "/boot/grub/sparc64-ieee1275/core.img" +msgstr "" + +#: util/grub-mkrescue.c:750 +msgid "mips-arc/core.img" +msgstr "" + +#: util/grub-mkrescue.c:754 util/grub-mkrescue.c:765 +msgid "/boot/grub/mips-arc/grub" +msgstr "" + +#: util/grub-mkrescue.c:754 util/grub-mkrescue.c:755 util/grub-mkrescue.c:756 +msgid "/boot/grub/mips-arc/core.img" +msgstr "" + +#: util/grub-mkrescue.c:755 util/grub-mkrescue.c:761 +msgid "/boot/grub/mips-arc/sashARCS" +msgstr "" + +#: util/grub-mkrescue.c:756 util/grub-mkrescue.c:763 +msgid "/boot/grub/mips-arc/sash" +msgstr "" + +#: util/grub-mkrescue.c:760 util/grub-mkrescue.c:762 util/grub-mkrescue.c:764 +msgid "-mips-boot" +msgstr "" + +#: util/grub-mkrescue.c:768 +msgid "arc.exe" +msgstr "" + +#: util/grub-mkrescue.c:771 util/grub-mkrescue.c:799 +msgid "roms/mipsel-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:773 util/grub-mkrescue.c:800 +msgid "loongson.elf" +msgstr "" + +#: util/grub-mkrescue.c:775 util/grub-mkrescue.c:801 +msgid "mipsel-yeeloong.bin" +msgstr "" + +#: util/grub-mkrescue.c:776 +msgid "mipsel-fuloong2f.bin" +msgstr "" + +#: util/grub-mkrescue.c:778 util/grub-mkrescue.c:803 +msgid "roms/mips-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:782 util/grub-mkrescue.c:804 +msgid "roms/qemu.img" +msgstr "" + +#: util/grub-mkrescue.c:786 util/grub-mkrescue.c:805 +msgid "roms/coreboot.elf" +msgstr "" + +#: util/grub-mkrescue.c:799 +msgid "mipsel-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:800 +msgid "mipsel-loongson.elf" +msgstr "" + +#: util/grub-mkrescue.c:801 +msgid "roms/mipsel-yeeloong.bin" +msgstr "" + +#: util/grub-mkrescue.c:802 +msgid "roms/mipsel-fulong.bin" +msgstr "" + +#: util/grub-mkrescue.c:802 +msgid "mipsel-fulong.bin" +msgstr "" + +#: util/grub-mkrescue.c:803 +msgid "mips-qemu_mips.elf" +msgstr "" + +#: util/grub-mkrescue.c:804 +msgid "qemu.img" +msgstr "" + +#: util/grub-mkrescue.c:805 +msgid "coreboot.elf" +msgstr "" + +#: util/grub-mkrescue.c:816 +msgid "--protective-msdos-label" +msgstr "" + +#: util/grub-mkrescue.c:821 util/grub-mkrescue.c:824 +msgid "--sort-weight" +msgstr "" + +#: util/grub-mkrescue.c:826 +msgid "/boot" +msgstr "" + +#: util/grub-mkstandalone.c:227 util/grub-mkstandalone.c:257 +msgid "0000600" +msgstr "" + +#: util/grub-mkstandalone.c:228 util/grub-mkstandalone.c:229 +#: util/grub-mkstandalone.c:258 util/grub-mkstandalone.c:259 +msgid "0001750" +msgstr "" + +#: util/grub-mkstandalone.c:234 util/grub-mkstandalone.c:264 +msgid "ustar " +msgstr "" + +#: util/grub-mkstandalone.c:346 +msgid "tar" +msgstr "" + +#: util/mkimage.c:261 util/mkimage.c:262 +msgid "i386-xen" +msgstr "" + +#: util/mkimage.c:280 util/mkimage.c:281 +msgid "x86_64-xen" +msgstr "" + +#: grub-core/commands/verify.c:170 grub-core/commands/verify.c:171 +msgid "gcry_rsa" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:46 grub-core/commands/xen/lsxen.c:60 +msgid "domid" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:49 +#, c-format +msgid "/local/domain/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:82 +#, c-format +msgid "%s/sectors" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:90 +#, c-format +msgid "%s/sector-size" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:280 +#, c-format +msgid "device/vbd/%s/backend" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:285 +#, c-format +msgid "%s/dev" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:291 +#, c-format +msgid "xenid/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:295 +#, c-format +msgid "xen/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:301 +#, c-format +msgid "device/vbd/%s/backend-id" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:331 +#, c-format +msgid "device/vbd/%s/ring-ref" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:337 +#, c-format +msgid "device/vbd/%s/event-channel" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:343 +#, c-format +msgid "device/vbd/%s/protocol" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:353 +#, c-format +msgid "device/vbd/%s/state" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:354 +msgid "3" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:360 grub-core/disk/xen/xendisk.c:422 +#: grub-core/disk/xen/xendisk.c:428 grub-core/disk/xen/xendisk.c:454 +#, c-format +msgid "%s/state" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:373 +#, c-format +msgid "device/vbd/%s" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:396 grub-core/disk/xen/xendisk.c:405 +msgid "device/vbd" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:424 grub-core/disk/xen/xendisk.c:433 +msgid "6" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:440 +#, c-format +msgid "%s/ring-ref" +msgstr "" + +#: grub-core/disk/xen/xendisk.c:444 +#, c-format +msgid "%s/event-channel" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:747 +msgid "item_pixmap_style" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:787 +msgid "scrollbar_thumb_overlay" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:795 +msgid "scrollbar_slice" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:797 +msgid "west" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:801 +msgid "east" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:804 +msgid "scrollbar_left_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:808 +msgid "scrollbar_right_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:812 +msgid "scrollbar_top_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_list.c:816 +msgid "scrollbar_bottom_pad" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:377 +msgid "highlight_overlay" +msgstr "" + +#: grub-core/kern/mips/dl.c:267 +msgid "_gp_disp" +msgstr "" + +#: grub-core/lib/progress.c:81 +#, c-format +msgid " [ %.20s %s %llu%% " +msgstr "" + +#: grub-core/lib/progress.c:88 +#, c-format +msgid "%s ]" +msgstr "" + +#: grub-core/lib/reed_solomon.c:74 +msgid "_text,_text" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1571 +msgid "wd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1572 +msgid "fd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1573 grub-core/osdep/linux/ofpath.c:415 +msgid "sd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1575 +msgid "vnd" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1576 +msgid "rd" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:45 +msgid "PAE=no," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:55 +msgid "PAE=yes," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:65 grub-core/loader/i386/xen_fileXX.c:66 +msgid "PAE=yes[extended-cr3]," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:77 +msgid "PAE=bimodal," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:87 grub-core/loader/i386/xen_fileXX.c:88 +msgid "PAE=bimodal[extended-cr3]," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:99 +msgid "PAE=yes,bimodal," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:109 +#: grub-core/loader/i386/xen_fileXX.c:110 +msgid "PAE=yes[extended-cr3],bimodal," +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:121 +#: grub-core/loader/i386/xen_fileXX.c:123 +msgid "VIRT_BASE=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:128 +#: grub-core/loader/i386/xen_fileXX.c:130 +msgid "VIRT_ENTRY=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:135 +#: grub-core/loader/i386/xen_fileXX.c:137 +msgid "HYPERCALL_PAGE=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:143 +#: grub-core/loader/i386/xen_fileXX.c:145 +msgid "ELF_PADDR_OFFSET=" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:191 util/mkimage.c:712 +msgid "Xen" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:220 util/grub-mkimagexx.c:207 +#: util/grub-mkimagexx.c:212 util/grub-mkimagexx.c:213 +msgid "generic" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:231 util/grub-mkimagexx.c:258 +#: util/grub-mkimagexx.c:259 +msgid "yes" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:237 +msgid "bimodal" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:243 util/grub-mkimagexx.c:253 +msgid "yes,bimodal" +msgstr "" + +#: grub-core/loader/i386/xen_fileXX.c:327 +#: grub-core/loader/i386/xen_fileXX.c:338 +#: grub-core/loader/i386/xen_fileXX.c:339 +msgid "__xen_guest" +msgstr "" + +#: grub-core/loader/multiboot.c:244 +msgid "--quirk-bad-kludge" +msgstr "" + +#: grub-core/loader/multiboot.c:251 +msgid "--quirk-modules-after-kernel" +msgstr "" + +#: grub-core/net/dns.c:712 +msgid "--only-ipv4" +msgstr "" + +#: grub-core/net/dns.c:714 +msgid "--only-ipv6" +msgstr "" + +#: grub-core/net/dns.c:716 +msgid "--prefer-ipv4" +msgstr "" + +#: grub-core/net/dns.c:718 +msgid "--prefer-ipv6" +msgstr "" + +#: grub-core/normal/main.c:538 +msgid "feature_timeout_style" +msgstr "" + +#: grub-core/normal/main.c:587 +msgid "light-gray/black" +msgstr "" + +#: grub-core/normal/main.c:588 +msgid "black/light-gray" +msgstr "" + +#: grub-core/normal/menu.c:53 +msgid "menu" +msgstr "" + +#: grub-core/normal/menu.c:54 +msgid "countdown" +msgstr "" + +#: grub-core/osdep/aros/config.c:39 grub-core/osdep/unix/config.c:39 +#: util/grub-install.c:739 util/grub-install.c:1395 util/grub-install.c:1540 +#: util/grub-mkrescue.c:388 util/grub-mkstandalone.c:235 +#: util/grub-mkstandalone.c:236 util/grub-mkstandalone.c:265 +#: util/grub-mkstandalone.c:266 util/grub-mkstandalone.c:311 +msgid "grub" +msgstr "" + +#: grub-core/osdep/aros/config.c:46 grub-core/osdep/unix/config.c:46 +msgid "pkgdatadir" +msgstr "" + +#: grub-core/osdep/aros/config.c:73 grub-core/osdep/unix/config.c:77 +#: grub-core/osdep/windows/config.c:40 +msgid "GRUB_ENABLE_CRYPTODISK" +msgstr "" + +#: grub-core/osdep/aros/config.c:77 grub-core/osdep/unix/config.c:81 +#: grub-core/osdep/windows/config.c:44 +msgid "GRUB_DISTRIBUTOR" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:109 grub-core/osdep/linux/hostdisk.c:127 +msgid "udevadm" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:110 +msgid "info" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:111 +msgid "--query" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:113 +msgid "--name" +msgstr "" + +#: grub-core/osdep/linux/hostdisk.c:139 +#, c-format +msgid "/sys%s/%s" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:105 +msgid "/obppath" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:117 +#, c-format +msgid "%s/obppath" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:125 +#, c-format +msgid "%s/devspec" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:132 +msgid "/sys" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:182 grub-core/osdep/linux/ofpath.c:185 +msgid "/sys/block/" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:189 grub-core/osdep/linux/ofpath.c:191 +msgid "/device" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:237 +#, c-format +msgid "/disk@%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:244 +#, c-format +msgid "/disk@%d:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:277 +#, c-format +msgid "vdc-port-%d-%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:295 +#, c-format +msgid "%d.%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:311 +msgid "/vendor" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:315 +#, c-format +msgid "%s/vendor" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:334 grub-core/osdep/linux/ofpath.c:345 +msgid "end_device" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:353 grub-core/osdep/linux/ofpath.c:355 +#, c-format +msgid "%s/sas_device/%s/phy_identifier" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:368 +#, c-format +msgid "%s/sas_device/%s/sas_address" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:376 +#, c-format +msgid "%lx" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:391 grub-core/osdep/linux/ofpath.c:412 +msgid "/fp@0,0" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:396 +#, c-format +msgid "%d:%d:%d:%d" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:411 +msgid "qlc" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:414 +msgid "sbus" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:420 +msgid "/vdevice/" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:425 +#, c-format +msgid "/%s@%04lx000000000000" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:433 +#, c-format +msgid "/%s@%04lx000000000000:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:445 +#, c-format +msgid "/sas/%s@%x" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:453 +#, c-format +msgid "/sas/%s@%x:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:468 +#, c-format +msgid "%02x%02x%02x%02x00000000" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:473 +#, c-format +msgid "/sas/%s@%lx,%lu" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:481 +#, c-format +msgid "/sas/%s@%lx,%lu:%c" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:529 +msgid "floppy" +msgstr "" + +#: grub-core/osdep/linux/platform.c:60 util/grub-install-common.c:650 +#: util/grub-install-common.c:652 +msgid "x86_64" +msgstr "" + +#: grub-core/osdep/linux/platform.c:73 grub-core/osdep/unix/platform.c:151 +msgid "modprobe" +msgstr "" + +#: grub-core/osdep/linux/platform.c:73 grub-core/osdep/unix/platform.c:151 +msgid "efivars" +msgstr "" + +#: grub-core/osdep/linux/platform.c:74 grub-core/osdep/unix/exec.c:153 +msgid "/dev/null" +msgstr "" + +#: grub-core/osdep/linux/platform.c:77 +msgid "/sys/firmware/efi" +msgstr "" + +#: grub-core/osdep/linux/platform.c:87 +msgid "/proc/device-tree" +msgstr "" + +#: grub-core/osdep/unix/compress.c:25 +msgid "gzip" +msgstr "" + +#: grub-core/osdep/unix/compress.c:25 +msgid "--best" +msgstr "" + +#: grub-core/osdep/unix/compress.c:26 grub-core/osdep/unix/compress.c:33 +msgid "--stdout" +msgstr "" + +#: grub-core/osdep/unix/compress.c:33 +msgid "--lzma2=dict=128KiB" +msgstr "" + +#: grub-core/osdep/unix/compress.c:33 +msgid "--check=none" +msgstr "" + +#: grub-core/osdep/unix/compress.c:39 +msgid "lzop" +msgstr "" + +#: grub-core/osdep/unix/compress.c:39 +msgid "-9" +msgstr "" + +#: grub-core/osdep/unix/compress.c:39 grub-core/osdep/unix/config.c:90 +#: grub-core/osdep/unix/platform.c:160 grub-core/osdep/unix/platform.c:166 +msgid "-c" +msgstr "" + +#: grub-core/osdep/unix/config.c:89 +msgid "sh" +msgstr "" + +#: grub-core/osdep/unix/config.c:95 +msgid ". '" +msgstr "" + +#: grub-core/osdep/unix/exec.c:126 grub-core/osdep/unix/exec.c:184 +#: grub-core/osdep/unix/exec.c:229 +msgid "LC_ALL" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:296 grub-core/osdep/unix/hostdisk.c:314 +msgid "TMPDIR" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:300 grub-core/osdep/unix/hostdisk.c:318 +msgid "/tmp" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:302 grub-core/osdep/unix/hostdisk.c:304 +#: grub-core/osdep/unix/hostdisk.c:305 grub-core/osdep/unix/hostdisk.c:320 +#: grub-core/osdep/unix/hostdisk.c:322 grub-core/osdep/unix/hostdisk.c:323 +msgid "/grub.XXXXXX" +msgstr "" + +#: grub-core/osdep/unix/platform.c:41 grub-core/osdep/unix/platform.c:179 +#: grub-core/osdep/unix/platform.c:183 +msgid "ofpathname" +msgstr "" + +#: grub-core/osdep/unix/platform.c:85 grub-core/osdep/unix/platform.c:92 +#: grub-core/osdep/unix/platform.c:100 grub-core/osdep/unix/platform.c:122 +#: grub-core/osdep/unix/platform.c:125 grub-core/osdep/unix/platform.c:142 +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:159 +#: grub-core/osdep/unix/platform.c:165 +msgid "efibootmgr" +msgstr "" + +#: grub-core/osdep/unix/platform.c:113 grub-core/osdep/unix/platform.c:114 +#: grub-core/osdep/unix/platform.c:115 grub-core/osdep/unix/platform.c:119 +msgid "Boot" +msgstr "" + +#: grub-core/osdep/unix/platform.c:122 grub-core/osdep/unix/platform.c:151 +#: grub-core/osdep/unix/platform.c:159 +msgid "-q" +msgstr "" + +#: grub-core/osdep/unix/platform.c:123 grub-core/osdep/unix/platform.c:126 +#: util/grub-mkrescue.c:483 +msgid "-b" +msgstr "" + +#: grub-core/osdep/unix/platform.c:123 grub-core/osdep/unix/platform.c:126 +#: util/grub-mkrescue.c:744 +msgid "-B" +msgstr "" + +#: grub-core/osdep/unix/platform.c:161 grub-core/osdep/unix/platform.c:167 +msgid "-p" +msgstr "" + +#: grub-core/osdep/unix/platform.c:161 grub-core/osdep/unix/platform.c:167 +msgid "-w" +msgstr "" + +#: grub-core/osdep/unix/platform.c:162 grub-core/osdep/unix/platform.c:168 +#: util/grub-mkrescue.c:669 +msgid "-L" +msgstr "" + +#: grub-core/osdep/unix/platform.c:195 grub-core/osdep/unix/platform.c:199 +msgid "XXXXXXXXXXXXXXXXXXXX" +msgstr "" + +#: grub-core/osdep/unix/platform.c:215 +msgid "nvsetenv" +msgstr "" + +#: grub-core/osdep/unix/platform.c:215 +msgid "boot-device" +msgstr "" + +#: grub-core/osdep/unix/platform.c:218 +#, c-format +msgid "setenv boot-device %s" +msgstr "" + +#: grub-core/osdep/unix/platform.c:231 +msgid "dvhtool" +msgstr "" + +#: grub-core/osdep/unix/platform.c:232 +msgid "--unix-to-vh" +msgstr "" + +#: grub-core/osdep/unix/relpath.c:109 +#, c-format +msgid "/%s/@" +msgstr "" + +#: grub-core/osdep/unix/relpath.c:141 +#, c-format +msgid "/%s/@%s" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:494 +#: grub-core/osdep/windows/hostdisk.c:495 +msgid "\\GRUB." +msgstr "" + +#: grub-core/osdep/windows/init.c:50 +msgid "GetCurrentConsoleFont" +msgstr "" + +#: grub-core/osdep/windows/init.c:71 grub-core/osdep/windows/platform.c:73 +msgid "kernel32.dll" +msgstr "" + +#: grub-core/osdep/windows/init.c:81 +msgid "SetCurrentConsoleFontEx" +msgstr "" + +#: grub-core/osdep/windows/init.c:93 grub-core/osdep/windows/init.c:94 +msgid "Lucida Console" +msgstr "" + +#: grub-core/osdep/windows/init.c:105 +msgid "SetConsoleFont" +msgstr "" + +#: grub-core/osdep/windows/init.c:123 util/grub-mknetdir.c:139 +msgid "grub.cfg" +msgstr "" + +#: grub-core/osdep/windows/init.c:181 util/grub-install-common.c:702 +msgid "locale" +msgstr "" + +#: grub-core/osdep/windows/platform.c:28 +msgid "{8be4df61-93ca-11d2-aa0d-00e098032b8c}" +msgstr "" + +#: grub-core/osdep/windows/platform.c:81 +msgid "GetFirmwareEnvironmentVariableW" +msgstr "" + +#: grub-core/osdep/windows/platform.c:83 +msgid "SetFirmwareEnvironmentVariableW" +msgstr "" + +#: grub-core/osdep/windows/platform.c:85 +msgid "GetNativeSystemInfo" +msgstr "" + +#: grub-core/osdep/windows/platform.c:101 +#: grub-core/osdep/windows/platform.c:238 +#: grub-core/osdep/windows/platform.c:409 +msgid "BootOrder" +msgstr "" + +#: grub-core/osdep/windows/platform.c:185 +#: grub-core/osdep/windows/platform.c:196 +msgid "Boot0000" +msgstr "" + +#: include/grub/i386/cpuid.h:42 include/grub/i386/cpuid.h:65 +msgid "%rcx" +msgstr "" + +#: include/grub/osdep/hostfile_aros.h:110 +msgid "SYS:" +msgstr "" + +#: include/grub/util/install.h:32 +msgid "install-modules" +msgstr "" + +#: include/grub/util/install.h:35 util/grub-install-common.c:64 +#: util/grub-install-common.c:812 util/grub-install-common.c:823 +msgid "themes" +msgstr "" + +#: include/grub/util/install.h:37 util/grub-install-common.c:703 +msgid "fonts" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "locales" +msgstr "" + +#: include/grub/util/install.h:41 +msgid "compress" +msgstr "" + +#: include/grub/util/install.h:42 +msgid "no,xz,gz,lzo" +msgstr "" + +#: include/grub/util/install.h:44 +msgid "core-compress" +msgstr "" + +#: include/grub/util/install.h:50 +msgid "override-directory" +msgstr "" + +#: include/grub/util/install.h:53 +msgid "locale-directory" +msgstr "" + +#: include/grub/util/install.h:56 +msgid "themes-directory" +msgstr "" + +#: include/grub/util/install.h:59 +msgid "grub-mkimage" +msgstr "" + +#: util/config.c:35 util/config.c:36 util/config.c:38 +msgid "GRUB_ENABLE_CRYPTODISK=" +msgstr "" + +#: util/config.c:45 util/config.c:46 util/config.c:51 +msgid "GRUB_DISTRIBUTOR=" +msgstr "" + +#: util/grub-install-common.c:55 util/grub-install-common.c:804 +msgid "starfield" +msgstr "" + +#: util/grub-install-common.c:57 util/grub-install-common.c:840 +msgid "unicode" +msgstr "" + +#: util/grub-install-common.c:193 +msgid ".lst" +msgstr "" + +#: util/grub-install-common.c:194 util/grub-mknetdir.c:97 +msgid ".img" +msgstr "" + +#: util/grub-install-common.c:195 util/grub-install-common.c:617 +#: util/grub-install-common.c:623 util/grub-install-common.c:628 +#: util/grub-install-common.c:629 util/grub-install-common.c:758 +#: util/grub-install-common.c:771 util/grub-install-common.c:774 +#: util/grub-install-common.c:787 +msgid ".mo" +msgstr "" + +#: util/grub-install-common.c:196 +msgid "menu.lst" +msgstr "" + +#: util/grub-install-common.c:370 +msgid "gz" +msgstr "" + +#: util/grub-install-common.c:380 +msgid "lzo" +msgstr "" + +#: util/grub-install-common.c:404 util/grub-install-common.c:411 +msgid "gcry_crc" +msgstr "" + +#: util/grub-install-common.c:430 +msgid "lzma" +msgstr "" + +#: util/grub-install-common.c:453 +msgid "--memdisk '" +msgstr "" + +#: util/grub-install-common.c:460 +msgid "--config '" +msgstr "" + +#: util/grub-install-common.c:467 +msgid "--pubkey '" +msgstr "" + +#: util/grub-install-common.c:488 +msgid "--note" +msgstr "" + +#: util/grub-install-common.c:618 +msgid ".gmo" +msgstr "" + +#: util/grub-install-common.c:628 util/grub-install-common.c:785 +msgid "LC_MESSAGES" +msgstr "" + +#: util/grub-install-common.c:644 util/grub-install-common.c:645 +#: util/grub-install-common.c:646 util/grub-install-common.c:647 +#: util/grub-install-common.c:648 util/grub-install-common.c:649 +#: util/grub-install-common.c:651 +msgid "i386" +msgstr "" + +#: util/grub-install-common.c:646 +msgid "qemu" +msgstr "" + +#: util/grub-install-common.c:647 +msgid "coreboot" +msgstr "" + +#: util/grub-install-common.c:653 util/grub-install-common.c:654 +#: util/grub-install-common.c:656 +msgid "mipsel" +msgstr "" + +#: util/grub-install-common.c:653 +msgid "loongson" +msgstr "" + +#: util/grub-install-common.c:654 util/grub-install-common.c:655 +msgid "qemu_mips" +msgstr "" + +#: util/grub-install-common.c:655 util/grub-install-common.c:657 +msgid "mips" +msgstr "" + +#: util/grub-install-common.c:658 +msgid "sparc64" +msgstr "" + +#: util/grub-install-common.c:659 +msgid "powerpc" +msgstr "" + +#: util/grub-install-common.c:660 +msgid "ia64" +msgstr "" + +#: util/grub-install-common.c:661 util/grub-install-common.c:663 +msgid "arm" +msgstr "" + +#: util/grub-install-common.c:662 +msgid "arm64" +msgstr "" + +#: util/grub-install-common.c:663 +msgid "uboot" +msgstr "" + +#: util/grub-install-common.c:669 util/grub-install-common.c:697 +#: util/grub-install.c:1317 util/grub-install.c:1339 util/grub-install.c:1351 +#, c-format +msgid "%s-%s" +msgstr "" + +#: util/grub-install-common.c:736 +msgid "command.lst" +msgstr "" + +#: util/grub-install-common.c:737 +msgid "fs.lst" +msgstr "" + +#: util/grub-install-common.c:737 util/grub-mkrescue.c:224 +msgid "partmap.lst" +msgstr "" + +#: util/grub-install-common.c:738 +msgid "parttool.lst" +msgstr "" + +#: util/grub-install-common.c:739 +msgid "video.lst" +msgstr "" + +#: util/grub-install-common.c:739 +msgid "crypto.lst" +msgstr "" + +#: util/grub-install-common.c:740 +msgid "terminal.lst" +msgstr "" + +#: util/grub-install-common.c:757 util/grub-install-common.c:769 +msgid "po" +msgstr "" + +#: util/grub-install-common.c:818 +msgid "theme.txt" +msgstr "" + +#: util/grub-install-common.c:874 +msgid "modinfo.sh" +msgstr "" + +#: util/grub-install-common.c:882 util/grub-install-common.c:888 +msgid "grub_modinfo_target_cpu=" +msgstr "" + +#: util/grub-install-common.c:885 util/grub-install-common.c:889 +msgid "grub_modinfo_platform=" +msgstr "" + +#: util/grub-install.c:118 +msgid "setup" +msgstr "" + +#: util/grub-install.c:212 +msgid "boot-directory" +msgstr "" + +#: util/grub-install.c:214 +msgid "root-directory" +msgstr "" + +#: util/grub-install.c:221 +msgid "grub-setup" +msgstr "" + +#: util/grub-install.c:222 +msgid "grub-mkrelpath" +msgstr "" + +#: util/grub-install.c:223 +msgid "grub-mkdevicemap" +msgstr "" + +#: util/grub-install.c:224 +msgid "grub-probe" +msgstr "" + +#: util/grub-install.c:225 +msgid "grub-editenv" +msgstr "" + +#: util/grub-install.c:231 +msgid "recheck" +msgstr "" + +#: util/grub-install.c:235 +msgid "force-file-id" +msgstr "" + +#: util/grub-install.c:237 +msgid "disk-module" +msgstr "" + +#: util/grub-install.c:240 +msgid "no-nvram" +msgstr "" + +#: util/grub-install.c:245 +msgid "no-bootsector" +msgstr "" + +#: util/grub-install.c:247 util/grub-setup.c:91 +msgid "no-rs-codes" +msgstr "" + +#: util/grub-install.c:253 util/grub-mknetdir.c:46 +msgid "debug-image" +msgstr "" + +#: util/grub-install.c:254 +msgid "removable" +msgstr "" + +#: util/grub-install.c:257 +msgid "bootloader-id" +msgstr "" + +#: util/grub-install.c:259 +msgid "efi-directory" +msgstr "" + +#: util/grub-install.c:280 util/mkimage.c:586 util/mkimage.c:587 +msgid "arm64-efi" +msgstr "" + +#: util/grub-install.c:341 +msgid "part_bsd" +msgstr "" + +#: util/grub-install.c:345 +#, c-format +msgid "part_%s" +msgstr "" + +#: util/grub-install.c:471 +#, c-format +msgid "cryptomount -u %s\n" +msgstr "" + +#: util/grub-install.c:788 util/grub-install.c:1067 +msgid "native" +msgstr "" + +#: util/grub-install.c:842 +msgid "device.map" +msgstr "" + +#: util/grub-install.c:885 util/grub-install.c:998 +msgid "EFI" +msgstr "" + +#: util/grub-install.c:948 +msgid "BOOT" +msgstr "" + +#: util/grub-install.c:952 +msgid "BOOTIA32.EFI" +msgstr "" + +#: util/grub-install.c:955 +msgid "BOOTX64.EFI" +msgstr "" + +#: util/grub-install.c:958 +msgid "BOOTIA64.EFI" +msgstr "" + +#: util/grub-install.c:961 +msgid "BOOTARM.EFI" +msgstr "" + +#: util/grub-install.c:964 +msgid "BOOTAARCH64.EFI" +msgstr "" + +#: util/grub-install.c:979 +msgid "grubia32.efi" +msgstr "" + +#: util/grub-install.c:982 +msgid "grubx64.efi" +msgstr "" + +#: util/grub-install.c:985 +msgid "grubia64.efi" +msgstr "" + +#: util/grub-install.c:988 +msgid "grubarm.efi" +msgstr "" + +#: util/grub-install.c:991 +msgid "grubarm64.efi" +msgstr "" + +#: util/grub-install.c:994 util/grub-install.c:1404 util/grub-install.c:1545 +msgid "grub.efi" +msgstr "" + +#: util/grub-install.c:1062 +msgid "GRUB_ENABLE_CRYPTODISK=1" +msgstr "" + +#: util/grub-install.c:1097 util/grub-mknetdir.c:111 +msgid "load.cfg" +msgstr "" + +#: util/grub-install.c:1105 util/grub-mknetdir.c:126 +#, c-format +msgid "set debug='%s'\n" +msgstr "" + +#: util/grub-install.c:1155 +#, c-format +msgid "search.fs_uuid %s root " +msgstr "" + +#: util/grub-install.c:1157 +msgid "search_fs_uuid" +msgstr "" + +#: util/grub-install.c:1174 +#, c-format +msgid "search.file %s root " +msgstr "" + +#: util/grub-install.c:1176 +msgid "search_fs_file" +msgstr "" + +#: util/grub-install.c:1232 +#, c-format +msgid "ieee1275/%s" +msgstr "" + +#: util/grub-install.c:1315 +msgid "core.efi" +msgstr "" + +#: util/grub-install.c:1324 util/grub-install.c:1337 +msgid "core.elf" +msgstr "" + +#: util/grub-install.c:1326 +#, c-format +msgid "%s-%s-elf" +msgstr "" + +#: util/grub-install.c:1386 +msgid "grub.elf" +msgstr "" + +#: util/grub-install.c:1449 util/grub-install.c:1476 +msgid "--allow-floppy " +msgstr "" + +#: util/grub-install.c:1450 util/grub-install.c:1477 +msgid "--verbose " +msgstr "" + +#: util/grub-install.c:1451 util/grub-install.c:1478 +msgid "--force " +msgstr "" + +#: util/grub-install.c:1452 util/grub-install.c:1479 +msgid "--skip-fs-probe" +msgstr "" + +#: util/grub-install.c:1453 +msgid "--no-rs-codes" +msgstr "" + +#: util/grub-install.c:1510 +#, c-format +msgid "dd if=/dev/zero of=%s" +msgstr "" + +#: util/grub-install.c:1568 +#, c-format +msgid "\\EFI\\%s\\%s" +msgstr "" + +#: util/grub-mkimagexx.c:95 util/grub-mkimagexx.c:352 +#: util/grub-mkimagexx.c:354 +msgid ".xen" +msgstr "" + +#: util/grub-mkimagexx.c:218 util/grub-mkimagexx.c:223 +#: util/grub-mkimagexx.c:224 +msgid "xen-3.0" +msgstr "" + +#: util/grub-mknetdir.c:41 +msgid "net-directory" +msgstr "" + +#: util/grub-mknetdir.c:43 +msgid "subdir" +msgstr "" + +#: util/grub-mknetdir.c:96 +msgid ".0" +msgstr "" + +#: util/grub-mknetdir.c:98 util/grub-mknetdir.c:99 +msgid ".elf" +msgstr "" + +#: util/grub-mknetdir.c:100 util/grub-mknetdir.c:101 util/grub-mknetdir.c:102 +#: util/grub-mknetdir.c:103 +msgid ".efi" +msgstr "" + +#: util/grub-mkrescue.c:259 +#, c-format +msgid "set prefix=(${root})/boot/grub\n" +msgstr "" + +#: util/grub-mkrescue.c:258 +#, c-format +msgid "search --fs-uuid --set=root %s\n" +msgstr "" + +#: util/grub-mkrescue.c:575 +#, c-format +msgid "\n" + "\n" + " ProductBuildVersion\n" + " \n" + " ProductName\n" + " %s\n" + " ProductVersion\n" + " %s\n" + "\n" + "\n" +msgstr "" + + +#: util/grub-install.c:1264 +#, c-format +msgid "set prefix=($root)'%s'\n" +msgstr "" + +#: grub-core/osdep/unix/config.c:108 +#, c-format +msgid "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\n\", " + "\"$GRUB_ENABLE_CRYPTODISK\", \"$GRUB_DISTRIBUTOR\"" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "upcase" +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "downcase" +msgstr "" + +#: grub-core/commands/tr.c:38 +msgid "abcdefghijklmnopqrstuvwxyz" +msgstr "" + +#: grub-core/commands/tr.c:39 +msgid "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +msgstr "" + +#: grub-core/net/dns.c:694 +#, c-format +msgid "%s (%s)\n" +msgstr "" + +#: grub-core/osdep/aros/hostdisk.c:570 +#, c-format +msgid "T:grub.%d.%d.%d.%d" +msgstr "" + +#: util/grub-install.c:1722 +msgid "\\\\BootX" +msgstr "" + +#: util/grub-install.c:1816 +msgid "\\System\\Library\\CoreServices" +msgstr "" + +#: util/grub-install.c:1702 util/grub-install.c:1802 +msgid "r+" +msgstr "" + +#: util/grub-install.c:1128 +msgid "macppc" +msgstr "" + +#: util/grub-install.c:296 +msgid "macppc-directory" +msgstr "" +#: grub-core/term/xen/xen_kbd.c:468 grub-core/term/xen/xen_kbd.c:477 +msgid "xen_keyboard" +msgstr "" + +#: grub-core/video/xen/xenfb.c:79 +#, c-format +msgid "device/vfb/%s/backend" +msgstr "" + +#: grub-core/video/xen/xenfb.c:87 +#, c-format +msgid "device/vfb/%s/backend-id" +msgstr "" + +#: grub-core/video/xen/xenfb.c:102 +#, c-format +msgid "device/vfb/%s/page-ref" +msgstr "" + +#: grub-core/video/xen/xenfb.c:108 +#, c-format +msgid "device/vfb/%s/protocol" +msgstr "" + +#: grub-core/video/xen/xenfb.c:120 +#, c-format +msgid "device/vfb/%s/event-channel" +msgstr "" + +#: grub-core/video/xen/xenfb.c:131 +#, c-format +msgid "device/vfb/%s" +msgstr "" + +#: grub-core/video/xen/xenfb.c:172 +#, c-format +msgid "device/vfb/%s/state" +msgstr "" + +#: grub-core/video/xen/xenfb.c:270 +msgid "device/vfb" +msgstr "" + +#: include/grub/emu/misc.h:46 +msgid "I64u" +msgstr "" + +#: include/grub/emu/misc.h:47 +msgid "I64x" +msgstr "" +#: grub-core/term/xen/xen_kbd.c:143 +#, c-format +msgid "device/vkbd/%s/backend" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:151 +#, c-format +msgid "device/vkbd/%s/backend-id" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:166 +#, c-format +msgid "device/vkbd/%s/page-ref" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:172 +#, c-format +msgid "device/vkbd/%s/protocol" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:184 +#, c-format +msgid "device/vkbd/%s/event-channel" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:195 +#, c-format +msgid "device/vkbd/%s" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:204 +#, c-format +msgid "device/vkbd/%s/state" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:267 grub-core/video/xen/xenfb.c:239 +#, c-format +msgid "%s/page-ref" +msgstr "" + +#: grub-core/term/xen/xen_kbd.c:291 +msgid "device/vkbd" +msgstr "" + +#: grub-core/commands/fileXX.c:51 grub-core/commands/fileXX.c:62 +#: grub-core/commands/fileXX.c:63 +msgid ".note.netbsd.ident" +msgstr "" + +#: grub-core/commands/legacycfg.c:484 +msgid "initrd16initrd" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:146 +msgid "extract_syslinux_entries_" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:147 +msgid "syslinux_" +msgstr "" +#: grub-core/commands/file.c:41 +msgid "is-x86_64-xen-domu" +msgstr "" + +#: grub-core/commands/file.c:69 +msgid "is-x86_64-kfreebsd" +msgstr "" + +#: grub-core/commands/file.c:76 +msgid "is-x86_64-knetbsd" +msgstr "" + +#: grub-core/commands/file.c:81 +msgid "is-x86_64-efi" +msgstr "" + +#: grub-core/commands/file.c:89 +msgid "is-x86_64-xnu" +msgstr "" + +#: grub-core/commands/file.c:506 +msgid "hibr" +msgstr "" + +#: grub-core/commands/file.c:508 +msgid "HIBR" +msgstr "" + +#: grub-core/disk/diskfilter.c:1060 +msgid ",%" +msgstr "" + +#: grub-core/disk/diskfilter.c:1061 +#, c-format +msgid ") into %s (%s)\n" +msgstr "" + +#: grub-core/osdep/windows/blocklist.c:88 +msgid ", first_lcn=%" +msgstr "" + +#: util/grub-mkimagexx.c:438 +msgid " (0x%" +msgstr "" + +#: util/grub-mkimagexx.c:666 util/grub-mkimagexx.c:679 +#: util/grub-mkimagexx.c:702 util/grub-mkimagexx.c:728 +#: util/grub-mkimagexx.c:812 +msgid " at the offset 0x%" +msgstr "" + +#: util/misc.c:149 +msgid " bytes at offset 0x%" +msgstr "" + +#: grub-core/term/serial.c:64 +msgid "on|off" +msgstr "" + +#: util/grub-mkimagexx.c:898 +msgid "jump24 relocation out of range" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:48 +#, c-format +msgid "ofpath: error: " +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:61 +#, c-format +msgid "ofpath: info: " +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:119 +#, c-format +msgid "Trying %s\n" +msgstr "" + +#: grub-core/osdep/windows/blocklist.c:108 +#, c-format +msgid "FSCTL_GET_RETRIEVAL_POINTERS fails: %s" +msgstr "" + +#: grub-core/osdep/windows/blocklist.c:84 +#, c-format +msgid "unsupported fs for blocklist on windows: %s" +msgstr "" + +#: include/grub/util/install.h:45 util/grub-mkstandalone.c:45 +msgid "xz|none|auto" +msgstr "" + +#: util/grub-mkimagexx.c:845 +msgid "CALL26 Relocation out of range" +msgstr "" + +#: grub-core/commands/verify.c:313 +msgid "\x99" +msgstr "" + +#: grub-core/commands/videotest.c:122 +msgid "Unicode test: happy\xE2\x98\xBA \xC2\xA3 5.00" + " \xC2\xA1\xCF\x84\xC3\xA4u! " + " \xE2\x84\xA4\xE2\x8A\x86\xE2\x84\x9D" +msgstr "" + +#: grub-core/disk/luks.c:40 +msgid "LUKS\xBA\xBE" +msgstr "" + +#: grub-core/disk/lvmparse.c:67 grub-core/disk/lvmparse.c:69 +msgid " = [" +msgstr "" + +#: grub-core/disk/lvmparse.c:115 grub-core/disk/lvmparse.c:123 +#: grub-core/disk/lvmparse.c:167 grub-core/disk/lvmparse.c:170 +msgid "id = \"" +msgstr "" + +#: grub-core/disk/lvmparse.c:127 +msgid "extent_size = " +msgstr "" + +#: grub-core/disk/lvmparse.c:143 grub-core/disk/lvmparse.c:146 +msgid "physical_volumes {" +msgstr "" + +#: grub-core/disk/lvmparse.c:174 +msgid "pe_start = " +msgstr "" + +#: grub-core/disk/lvmparse.c:199 +msgid "logical_volumes" +msgstr "" + +#: grub-core/disk/lvmparse.c:202 +msgid "logical_volumes = " +msgstr "" + +#: grub-core/disk/lvmparse.c:226 grub-core/disk/lvmparse.c:227 +msgid "status" +msgstr "" + +#: grub-core/disk/lvmparse.c:226 +msgid "VISIBLE" +msgstr "" + +#: grub-core/disk/lvmparse.c:227 +msgid "PVMOVE" +msgstr "" + +#: grub-core/disk/lvmparse.c:228 +msgid "segment_count = " +msgstr "" + +#: grub-core/disk/lvmparse.c:246 +msgid "segment" +msgstr "" + +#: grub-core/disk/lvmparse.c:255 +msgid "start_extent = " +msgstr "" + +#: grub-core/disk/lvmparse.c:263 +msgid "extent_count = " +msgstr "" + +#: grub-core/disk/lvmparse.c:272 grub-core/disk/lvmparse.c:275 +msgid "type = \"" +msgstr "" + +#: grub-core/disk/lvmparse.c:277 grub-core/disk/lvmparse.c:278 +msgid "striped\"" +msgstr "" + +#: grub-core/disk/lvmparse.c:282 +msgid "stripe_count = " +msgstr "" + +#: grub-core/disk/lvmparse.c:292 grub-core/disk/lvmparse.c:396 +msgid "stripe_size = " +msgstr "" + +#: grub-core/disk/lvmparse.c:299 grub-core/disk/lvmparse.c:307 +msgid "stripes = [" +msgstr "" + +#: grub-core/disk/lvmparse.c:332 +msgid "mirror\"" +msgstr "" + +#: grub-core/disk/lvmparse.c:336 +msgid "mirror_count = " +msgstr "" + +#: grub-core/disk/lvmparse.c:350 grub-core/disk/lvmparse.c:358 +msgid "mirrors = [" +msgstr "" + +#: grub-core/disk/lvmparse.c:375 grub-core/disk/lvmparse.c:376 +#: grub-core/disk/lvmparse.c:377 grub-core/disk/lvmparse.c:384 +msgid "raid" +msgstr "" + +#: grub-core/disk/lvmparse.c:378 +msgid "raidX" +msgstr "" + +#: grub-core/disk/lvmparse.c:386 +msgid "device_count = " +msgstr "" + +#: grub-core/disk/lvmparse.c:410 grub-core/disk/lvmparse.c:418 +msgid "raids = [" +msgstr "" + +#: grub-core/fs/cpio.c:24 +msgid "\xc7\x71" +msgstr "" + +#: grub-core/fs/cpio_be.c:23 +msgid "\x71\xc7" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:244 +msgid "\xc2\xb0" +msgstr "" + +#: grub-core/kern/ieee1275/cmain.c:88 +msgid "IBM pSeries (emulated by qemu)" +msgstr "" + +#: grub-core/lib/all_video.c:36 +msgid "/video.lst" +msgstr "" + +#: grub-core/osdep/unix/config.c:108 +#, c-format +msgid "" +"'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\n\" " +"\"$GRUB_ENABLE_CRYPTODISK\" \"$GRUB_DISTRIBUTOR\"" +msgstr "" + +#: include/grub/dl.h:141 +msgid "license" +msgstr "" + +#: util/grub-install.c:1106 +msgid "BOOTAA64.EFI" +msgstr "" + +#: util/grub-install.c:1133 +msgid "grubaa64.efi" +msgstr "" + +#: util/grub-install.c:1274 +msgid "GRUB_ENABLE_CRYPTODISK=y" +msgstr "" + +#: util/grub-mkrescue.c:656 +msgid "part_gpt" +msgstr "" + +#: util/grub-mkrescue.c:657 +msgid "part_msdos" +msgstr "" + +#: util/grub-mkrescue.c:663 util/grub-mkrescue.c:668 util/grub-mkrescue.c:723 +msgid "part_apple" +msgstr "" + +#: util/grub-mkrescue.c:677 +msgid "bootaa64.efi" +msgstr "" + +#: util/grub-probe.c:136 util/grub-probe.c:151 util/grub-probe.c:190 +#: util/grub-probe.c:247 +#, c-format +msgid "%s%c" +msgstr "" + +#: util/grub-probe.c:233 +#, c-format +msgid "lvm%c" +msgstr "" + +#: util/grub-probe.c:237 +#, c-format +msgid "ldm%c" +msgstr "" + +#: util/grub-probe.c:245 +#, c-format +msgid "diskfilter%c" +msgstr "" + +#: util/grub-probe.c:250 +#, c-format +msgid "raid5rec%c" +msgstr "" + +#: util/grub-probe.c:252 +#, c-format +msgid "raid6rec%c" +msgstr "" + +#: util/grub-mkrescue.c:136 +#, c-format +msgid "%s\n\n%s\n\n%s" +msgstr "" + +#: grub-core/kern/arm/cache.c:133 +msgid "couldn't get memory map, not enabling caches" +msgstr "" + +#: grub-core/kern/arm/cache.c:149 +#, c-format +msgid "%d crossers\n" +msgstr "" + +#: grub-core/kern/arm/cache.c:154 +msgid "couldn't allocate place for MMU table, not enabling caches" +msgstr "" + +#: grub-core/kern/arm/cache.c:212 +msgid "MMU tables generated\n" +msgstr "" + +#: grub-core/kern/arm/cache.c:216 +msgid "enabling MMU\n" +msgstr "" + +#: grub-core/kern/arm/cache.c:218 +msgid "MMU enabled\n" +msgstr "" + +#: grub-core/commands/verify.c:313 +msgid "™" +msgstr "" + +#: grub-core/commands/videotest.c:122 +msgid "Unicode test: happy☺ £ 5.00 ¡τäu! ℤ⊆ℝ" +msgstr "" + +#: grub-core/disk/luks.c:40 +msgid "LUKSº¾" +msgstr "" + +#: grub-core/fs/cpio.c:24 +msgid "Çq" +msgstr "" + +#: grub-core/fs/cpio_be.c:23 +msgid "qÇ" +msgstr "" + +#: grub-core/gfxmenu/gui_circular_progress.c:244 +msgid "°" +msgstr "" + +#: grub-core/lib/xzembed/xz_stream.h:35 +msgid "ý7zXZ" +msgstr "" + +#: grub-core/partmap/msdos.c:74 +msgid "ÔA õ" +msgstr "" + +#: grub-core/partmap/msdos.c:80 +msgid "ØA õ" +msgstr "" + +#: grub-core/partmap/msdos.c:87 +msgid "pŠ]F5Å“®=†ý±U>à" +msgstr "" + +#: grub-core/io/lzopio.c:30 +msgid "" +"‰LZO\n" +"\n" +msgstr "" + +#: grub-core/bus/emu/pci.c:58 +#, c-format +msgid "mapping 0x%llx failed (error %d)" +msgstr "" + +#: grub-core/disk/dmraid_nvidia.c:175 +msgid "nv" +msgstr "" + +#: grub-core/fs/xfs.c:478 +msgid ") - %" +msgstr "" + +#: grub-core/fs/xfs.c:478 +#, c-format +msgid ", %d +" +msgstr "" + +#: grub-core/fs/xfs.c:550 +msgid "BMA3" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:284 +msgid "com.delphix:hole_birth" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:285 +msgid "com.delphix:embedded_data" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:286 +msgid "com.delphix:extensible_dataset" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:287 +msgid "org.open-zfs:large_blocks" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:1877 +msgid "/%" +msgstr "" + +#: grub-core/osdep/linux/platform.c:73 +msgid "/sys/firmware/efi/fw_platform_size" +msgstr "" + +#: util/grub-mkrescue.c:454 +msgid "-output" +msgstr "" + +#: util/grub-mkrescue.c:455 +msgid "--output" +msgstr "" diff --git a/po/fi.gmo b/po/fi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..7b06d73a5f8d67773cedd4e1ace9584bda2f8351 GIT binary patch literal 128422 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 z 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, 2010-2013. +# Lasse Liehu , 2014. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2014-01-22 19:36+0200\n" +"Last-Translator: Lasse Liehu \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.5\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "tukematon sarjaporttinopeus" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "tukematon sarjaportin pariteetti" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "tukematon sarjaportin stop-bittimäärä" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "tukematon sarjaportin sanapituus" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Älä lataa pilkulla erotetulla luettelolla määriteltyä tietokonetauluja." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Lataa vain pilkulla erotetulla luettelolla määriteltyjä tauluja." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Vie version 1 taulut käyttöjärjestelmään." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Vie version 2 ja version 3 taulut käyttöjärjestelmään." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Aseta RSDP:n, XSDT:n ja RSDT:n OEMID-kenttä." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Aseta RSDP:n, XSDT:n ja RSDT:n OEMTABLE-tunniste." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Aseta RSDP:n, XSDT:n ja RSDT:n OEMTABLE-versio." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Aseta RSDP:n, XSDT:n ja RSDT:n luojakenttä." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Aseta RSDP:n, XSDT:n ja RSDT:n luojaversio." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Älä päivitä EBDA:ta. Saattaa korjata virheet tai jää roikkumaan joissain " +"BIOS:seissa, mutta on tehoton käyttöjärjestelmillä, jotka eivät vastaanota " +"RSDP:tä GRUB:sta." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "ennenaikainen tiedoston %s loppu" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TAULU1,TAULU2|--load-only=TAULU1,TAULU2] TIEDOSTO1 " +"[TIEDOSTO2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Lataa tietokoneen ACPI-taulut ja argumenttien määrittelemät taulut." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "virhe: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "muisti loppui" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "kohteen ”%s” lukeminen epäonnistui: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI-sulkeutuminen epäonnistui" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Luettele laitteet." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "odotettiin tiedostonimeä" + +# Parametri pitkille valitsimelle, esim.: --abstract=FILE Aseta abstrakti tiedostonimi +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "TIEDOSTO" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Tulosta lohkoluettelo." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "sinun on ladattava ydin ensin" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Käynnistä käyttöjärjestelmä." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Käynnistyksen aikaiset tilastot eivät ole käytettävissä\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Näytä käynnistyksen aikaiset tilastot." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Levyvälimuistitilasto: osumia = %lu (%lu.%02lu%%), ohilaukauksia = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Levyvälimuistitilasto ei ole käytettävissä\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Hae levyvälimuistitiedot." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Hyväksy DOS-tyyliset CR/NL-riviloput." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Näytä tiedoston sisältö." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "odotettiin kahta argumenttia" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Vertaa tiedostoa ”%s” tiedostoon ”%s”:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Tiedostot ovat erikokoisia: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Tiedostot eroavat siirrososoitteessa %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Tiedostot ovat identtiset.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "TIEDOSTO1 TIEDOSTO2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Vertaa kahta tiedostoa." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Lataa toinen config-tiedosto." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Lataa toinen config-tiedosto muuttamatta asiayhteyttä." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Lataa toinen config-tiedosto muuttamatta asiayhteyttä, mutta hae vain " +"valikkorivit." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Lataa toinen config-tiedosto, mutta hae vain valikkorivit." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[vuosi-]kuukausi-päivä] [tunti:minuutti[:sekunti]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Näytä/aseta nykyinen päiväys." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Älä tulosta perässä olevia rivinvaihtoja." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Ota käyttöön kenoviivakoodinvaihtomerkkien tulkinta." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] MERKKIJONO" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Näytä tekstirivi." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Käynnistä laiteohjelmiston asetusvalikkoon." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Korjaa video-ongelma." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM-levykuva on läsnä." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "ROM-alueen käyttöönotto epäonnistui." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Luo BIOS-kaltainen rakenne olemassa olevan käyttöjärjestelmän " +"taaksepäinyhteensopivuutta varten." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Lataa BIOS-vedos." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "MERKKIJONO ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Arvioi argumentit GRUB-komentoina" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Tarkista, että voidaanko TIEDOSTO käynnistää i386 PAE Xen-etuoikeudettomana " +"vierasytimenä" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Tarkista, että voidaanko TIEDOSTO käynnistää x86_64 Xen-etuoikeudettomana " +"vierasytimenä" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Tarkista, että voidaanko TIEDOSTO alkuladata Xen x86-etuoikeudellisena " +"vierasytimenä" + +# Multiboot viitannee Multiboot-määrittelyyn. Katso http://www.gnu.org/software/grub/manual/multiboot/multiboot.html +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Tarkista, että voidaanko TIEDOSTOa käyttää x86-multiboot-ytimenä" + +# Multiboot viitannee Multiboot-määrittelyyn. Katso http://www.gnu.org/software/grub/manual/multiboot/multiboot.html +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Tarkista, että voidaanko TIEDOSTOa käyttää x86-multiboot2-ytimenä" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Tarkista, että onko TIEDOSTO ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Tarkista, että onko TIEDOSTO ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Tarkista, että onko TIEDOSTO IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Tarkista, että onko TIEDOSTO MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Tarkista, että onko TIEDOSTO MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Tarkista, että onko TIEDOSTO SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Tarkista, että onko TIEDOSTO POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Tarkista, että onko TIEDOSTO x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" +"Tarkista, että onko TIEDOSTO x86 Linux, joka tukee 32-bittistä " +"yhteiskäytäntöä" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Tarkista, että onko TIEDOSTO x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Tarkista, että onko TIEDOSTO i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Tarkista, että onko TIEDOSTO x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Tarkista, että onko TIEDOSTO x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Tarkista, että onko TIEDOSTO i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Tarkista, että onko TIEDOSTO x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Tarkista, että onko TIEDOSTO i386 EFI-tiedosto" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Tarkista, että onko TIEDOSTO x86_64 EFI-tiedosto" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Tarkista, että onko TIEDOSTO IA64 EFI-tiedosto" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Tarkista, että onko TIEDOSTO ARM64 EFI-tiedosto" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Tarkista, että onko TIEDOSTO ARM EFI-tiedosto" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Tarkista, että onko TIEDOSTO hiberfil.sys lepotilassa" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Tarkista, että onko TIEDOSTO x86_64 XNU (Mac OS X-ydin)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Tarkista, että onko TIEDOSTO i386 XNU (Mac OS X-ydin)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Tarkista, että onko TIEDOSTO XNU (Mac OS X-ydin) lepotilalevykuva" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Tarkista, että onko TIEDOSTO BIOS-käynnistyssektori" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "epätosi" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "VALITSIMET TIEDOSTO" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Tarkista, että onko TIEDOSTO määriteltyä tyyppiä." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "sellaista osiota ei ole" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Uusi MBR on kirjoitettu levylle ”%s”\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "LAITE [OSIO[+/-[TYYPPI]]] ..." + +# Hybridi MBR (Master Boot Record) voidaan luoda, jotta sellaiset (vanhat) käyttöjärjestelmät, jotka eivät ymmärrä GPT (GUID Partition Type)-standardia, voivat käyttää GPT-levyasemia. +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Täytä GPT-aseman LAITE hybridi-MBR. Määritellyt osiot ovat osa hybridi-MBR:" +"ää. Korkeintaan 3 osiota sallitaan. TYYPPI on MBR-tyyppi. + tarkoittaa, että " +"osio on aktiivinen. Vain yksi osio voi olla aktiivinen." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Pysäyttää tietokoneen. Tämä komento ei toimi kaikissa " +"laiteohjelmistototeutuksissa." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Määritä käytettävä hajakoodaus." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HAJAKOODAUS" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Tarkista tiedostohajakoodaukset hajakoodausluettelo-TIEDOSTOlla." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Perushakemisto hajakoodausluettelolle." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "HAKEMISTO" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Älä pysähdy ensimmäisen virheen jälkeen." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Pura tiedoston tiivistys ennen tarkistussumman laskemista." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LUKUVIRHE\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HAJAKOODAUSTÄSMÄÄMÄTTÖMYYS\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: VALMIS\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HAJAKOODAUS [-c TIEDOSTO [-p ETULIITE]] [TIEDOSTO1 [TIEDOSTO2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Laske tai tarkista hajakoodaustarkistussumma." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c TIEDOSTO [-p ETULIITE]] [TIEDOSTO1 [TIEDOSTO2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Aseta kehittynyt virranhallinta (APM)\n" +"(1=matala, ..., 254=korkea, 255=pois käytöstä)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Näytä virtatila." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Jäädytä ATA-turvallisuusasetukset uudelleenkäynnistykseen asti." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Näytä SMART-terveystila." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Aseta automaattinen akustinen hallinta (AAM)\n" +"(0=pois, 128=hiljaa, ..., 254=nopea)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Aseta valmiustila-aikakatkaisu\n" +"(0=pois, 1=5 s, 2=10 s, ..., 240=20 min., 241=30 min., ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Aseta asema valmiustilaan." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Aseta asema lepotilaan." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Tulosta aseman identiteetti ja asetukset." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Näytä ATA IDENTIFY-sektorin raakasisältö." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Ota pois käytöstä/ota käyttöön SMART (0/1)" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Älä tulosta viestejä." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "odotettiin yhtä argumenttia" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[VALITSIMET] LEVY" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Hae/aseta ATA-levyparametrit." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Käyttö:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MALLI ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Näytä opasteviesti." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Hyppää siirrososoitetavujen yli tiedoston alusta." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Lue vain LENGTH-tavua." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[VALITSIN] TIEDOSTO_TAI_LAITE" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Näytä tiedoston tai muistin raakasisältö." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Näytä CMOS-sisällön raakavedos." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Testaa bitti BYTE:BIT CMOS-muistissa." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Nollaa bitti BYTE:BIT CMOS-muistissa." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Aseta bitti BYTE:BIT CMOS-muistissa." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Näytä corebootin käynnistyksen aikaiset tilastot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Luettele coreboot-taulukot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Tarkista, että tukeeko prosessori 64-bittistä (long)tilaa (oletus)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Tarkista, että tukeeko prosessori fyysistä osoitelaajennusta." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Tarkista suoritinominaisuudet." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Näytä nykyiset kuvaukset." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Palauta kaikki kuvaukset oletusarvoihin." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Suorita sekä suorat että käänteiset kuvaukset." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Yhtään kiintolevyä ei ole kuvattu uudelleen" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "Käyttöjärjestelmälevy #num ------> GRUB/BIOS-laite" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grub-laite käyttöjärjestelmälevy." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Hallinnoi BIOS-asemakuvauksia." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Älä käytä APM:ia tietokoneen pysäyttämiseen." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Pysäytä järjestelmä, jos mahdollista käyttäen APM:ia." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "APM ei löytynyt" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versio %u.%u\n" +"32-bittinen CS = 0x%x, pituus = 0x%x, siirrososoite = 0x%x\n" +"16-bittinen CS = 0x%x, pituus = 0x%x\n" +"DS = 0x%x, pituus = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bittinen suojattu rajapinta tuettu\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bittinen suojattu rajapinta tukematon\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bittinen suojattu rajapinta tuettu\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bittinen suojattu rajapinta tukematon\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU Idle-tila hidastaa prosessorin\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU Idle-tila ei hidasta prosessoria\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM otettu pois käytöstä\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM otettu käyttöön\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM irrotettu\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM liitetty\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Näytä APM-tiedot." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "otaksuttiin tiedostonimeä tai tahtia ja nuotteja" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Virheellinen komento %s.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "tiedostoa ”%s” ei löytynyt" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "tunnistamaton numero" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "TIEDOSTO | TAHTI [PISTEJAKO1 KESTO1] [PISTEJAKO2 KESTO2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Soita sävelmä." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "aseta numlock-tila" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "aseta capslock-tila" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "aseta scrolllock-tila" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "aseta insert-tila" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "aseta pause-tila" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "paina vasemmanpuoleista vaihtonäppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "paina oikeanpuoleista vaihtonäppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "paina sysRq-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "paina NumLock-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "paina CapsLock-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "paina ScrollLock-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "paina Insert-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "paina vasemmanpuoleita alt-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "paina oikeanpuoleista alt-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "paina vasemmanpuoleista ctrl-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "paina oikeanpuoleista ctrl-näppäintä" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "älä päivitä LED-tilaa" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[NÄPPÄINLYÖNTI1] [NÄPPÄINLYÖNTI2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Matki näppäinlyöntisekvenssiä" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Suorita ”go” GRUB:in aloittamiseksi uudelleen." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Palaa IEEE1275 -kehotteelle." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Tallenna luettu arvo muuttujaan MUUTTUJANIMI." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "MUUTTUJANIMI" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORTTI" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Lue 8-bittinen arvo portista PORTTI." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Lue 16-bittinen arvo portista PORTTI." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Lue 32-bittinen arvo portista PORTTI." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORTTI ARVO [PEITE]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Kirjoita 8-bittinen ARVO porttiin PORTTI." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Kirjoita 16-bittinen ARVO porttiin PORTTI." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "OSOITE ARVO [PEITE]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Kirjoita 32-bittinen ARVO porttiin PORTTI." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "muuttujaa ”%s” ei ole asetettu" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Lataa näppäimistösijoittelu." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Tarkista vaihtonäppäin." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Tarkista Control-näppäin." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Tarkista Alt-näppäin." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Tarkista muokkausnäppäinten tila." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "komennon ”%s” etsiminen epäonnistui" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Kirjoita salasana: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Jäsennä perinneasetus samassa asiayhteydessä" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Jäsennä perinneasetus uudessa asiayhteydessä" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Jäsennä perinneasetus samassa asiayhteydessä ottaen vain valikkorivit" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Jäsennä perinneasetus uudessa asiayhteydessä ottaen vain valikkorivit" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYYPPI] TIEDOSTO [ARGUMENTTI ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simuloi grub-legacy ”kernel” -komentoa" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "TIEDOSTO [ARGUMENTTI ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simuloi grub-legacy ”initrd” -komentoa" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simuloi grub-legacy ”modulenounzip” -komentoa" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] SALASANA [TIEDOSTO]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simuloi grub-legacy ”password” -komentoa" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simuloi grub-legacy ”password” -komentoa valikkorivitilassa" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Määrittele tiedostonimi." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Ohita ympäristötiedoston allekirjoitustarkistus." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f TIEDOSTO] [-s|--skip-sig] [muuttujanimi_valkolistalle] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Lataa muuttujat ympäristölohkotiedostosta." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f TIEDOSTO]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Luettele muuttujat ympäristölohkotiedostosta." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f TIEDOSTO] muuttuja_nimi [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Tallenna muuttujat ympäristölohkotiedostoon." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Näytä pitkä luettelo yksityiskohtatiedoilla." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Tulosta koot ihmisen luettavassa muodossa." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Luettele kaikki tiedostot." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Verkkoyhteyskäytännöt:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [TIEDOSTO ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Luettele laitteet ja tiedostot." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Näytä vain versio 1:n taulut." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Näytä vain version 2 ja version 3 taulut." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Näytä ACPI-tiedot." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "käytettävissä oleva RAM-muisti" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "varattu RAM-muisti" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI uudelleen käyttöön otettava RAM-muisti" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPI ei-lyhytkestoinen tallennuspaikka-RAM-muisti" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "viallinen RAM-muisti (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "coreboot-taulukkoja pitävä RAM-muisti" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "laiteohjelmistokoodia pitävä RAM-muisti" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, pituus = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, pituus = 0x%llx, tyyppi = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Luettele laiteohjelmiston tarjoama muistikuvaus." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Luettele PCI-laitteet." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "HFS- tai HFS+-osion Bless-tiedosto intel mac-tietokoneille." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "HFS- tai HFS+-osion Bless-HAKEMISTO PPC mac-tietokoneille." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "OSOITE" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Lue 8-bittinen arvo OSOITTEESTA." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Lue 16-bittinen arvo OSOITTEESTA." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Lue 32-bittinen arvo OSOITTEESTA." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Kirjoita 8-bittinen ARVO OSOITTEESEEN." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Kirjoita 16-bittinen ARVO OSOITTEESEEN." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Kirjoita 32-bittinen ARVO OSOITTEESEEN." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Valikkorivin tyyppi." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "MERKKIJONO" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Luettelo käyttäjistä, joiden sallitaan käynnistää tämä kohde." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "KÄYTTÄJÄNIMI[,KÄYTTÄJÄNIMI]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Näppäimistönäppäin tämän rivin nopeaa käynnistystä varten." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "NÄPPÄIMISTÖ_NÄPPÄIN" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Käytä MERKKIJONOa valikkorivirunkona." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Valikkorivin tunniste." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Kuka tahansa käyttäjä voi käynnistää tämän kohteen." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "LOHKO" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Määritä valikkorivi." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Määritä alivalikko." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nimi\tViitelaskuri\tRiippuvuudet\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Näytä tämä viesti." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "OSOITE [KOKO]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Näytä muistisisältö." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUULI" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Poista moduuli." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Näytä ladatut moduulit." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Poistu GRUB:sta." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "CS5536 ei löytynyt" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 osoitteessa %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Järjestelmähallintaväyläohjain siirräntätila on osoitteessa 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM-välinumero %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Kirjoitettu SPD-tavuja: %d tavua.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Flash-muistin kokonaiskoko: %d tavua.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Muistityyppi: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Osanumero: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Muistityyppi: Tuntematon." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Tulosta muistitiedot." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s ei tue UUID-tunnisteita" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUULI1 MODUULI2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Vaihda alkuperäisiin levyajureihin. Jos yhtään moduulia ei ole määritelty, " +"käytetään oletusjoukkoa (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Suorita KOMENNOT osiolla.\n" +"Käytä ”parttool OSIO help” käytettävissä olevien komentojen luetteloimiseksi." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=ARVO" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Ositustyökalua ei ole käytettävissä levyosiolle %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "tuntematon argumentti ”%s”" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "OSIOKOMENNOT" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "KÄYTTÄJÄ SALASANA" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Aseta käyttäjän salasana (pelkkänä tekstinä). Ei suositella turvattomana." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "vääränmuotoinen PBKDF2-salasana" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "KÄYTTÄJÄ PBKDF2_SALASANA" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Aseta käyttäjäsalasana (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Valitse laite myyjä- ja laitetunnisteiden avulla." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[myyjä]:[laite]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Valitse laite sen väyläsijainnin avulla." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[väylä]:[väli][.funktio]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "puuttuva ”%c”-symboli" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s SIJAINTI] [-d LAITE]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Näytä PCI-asetusavaruuden raakavedos." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Aseta muuttuja paluuarvoon." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Määrittele ajuri." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Määrittele osiokuvaustyyppi." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Määrittele tiedostojärjestelmätyyppi." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Määrittele tiedostojärjestelmän UUID." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Määrittele tiedostojärjestelmänimiö." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "tiedostojärjestelmä ”%s” ei tue nimiöitä" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "LAITE" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Nouda laitetiedot." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Aseta muuttuja käyttäjäsyötteellä." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Käynnistä tietokone uudelleen." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Tallenna täsmäävä komponentti-NUMERO muuttujaan VARNAME." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMERO:]MUUTTUJANIMI" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP-lauseke MERKKIJONO" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Koesta, jos REGEXP-lauseke täsmää MERKKIJONOon." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NIMI [MUUTTUJA] [VIHJEET]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Etsi laitteita tiedoston avulla. Jos MUUTTUJA on määritelty, ensimmäinen " +"löydetty laite asetetaan muuttujaan." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Etsi laitteita nimiön avulla. Jos MUUTTUJA on määritelty, ensimmäinen " +"löydetty laite asetetaan muuttujaan." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Etsi laitteita UUID:n avulla. Jos MUUTTUJA on määritelty, ensimmäinen " +"löydetty laite asetetaan muuttujaan." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Etsi laitteita tiedoston avulla." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Etsi laitteita tiedostojärjestelmänimiön avulla." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Etsi laitteita tiedostojärjestelmän UUID-tunnisteen avulla." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Aseta muuttuja ensimmäiseen löydettyyn laitteeseen." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Älä koesta mitään levykeasemaa." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Ensimmäinen yritys laitteelle VIHJE. Jos VIHJE loppuu pilkkuun, yritä myös " +"aliosioita" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "VIHJE" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Ensimmäinen yritys laitteelle VIHJE, jos suoritetaan kohteella IEEE1275. Jos " +"VIHJE loppuu pilkkuun, yritä myös aliosioita" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Yritä ensimmäiseksi laitteella VIHJE, jos suoritetaan tällä hetkellä BIOS:" +"ssa. Jos VIHJE loppuu pilkkuun, yritä myös aliosioita" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Ensimmäinen yritys laitteelle VIHJE, jos suoraa laitepääsyä tuetaan. Jos " +"VIHJE loppuu pilkkuun, yritä myös aliosioita" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Yritä ensimmäiseksi laitteella VIHJE, jos suoritetaan kohteella EFI. Jos " +"VIHJE loppuu pilkkuun, yritä myös aliosioita" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Yritä ensimmäiseksi laitteella VIHJE, jos suoritetaan kohteella ARC. Jos " +"VIHJE loppuu pilkkuun, yritä myös aliosioita" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint VIHJE [--hint VIHJE] ...] NIMI" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Etsi laitteita tiedoston, tiedostojärjestelmänimiön tai tiedostojärjestelmän " +"UUID-tunnisteen avulla. Jos valitsin --set on määritelty, ensimmäinen " +"löydetty laite asetetaan muuttujaan. Jos mitään muuttujanimeä ei ole " +"määritelty, käytetään arvoa ”root”." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Rekisteri %x / %x:%02x.%x on %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s SIJAINTI] [-d LAITE] [-v MUUTTUJA] REKISTERI[=ARVO[:PEITE]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Käsittele PCI-laitteita." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Lavea loppulaskenta." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Salli keskeytys ESC-näppäimellä." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "SEKUNTIEN_MÄÄRÄ" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Odota tietty sekuntimäärä." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "syslinux-levyn juurihakemisto [oletus=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +#, fuzzy +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "nykyinen syslinux-hakemisto [oletus on syötetiedoston äitihakemisto]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "otaksu, että syöte on isolinux-asetustiedosto." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "otaksu, että syöte on pxelinux-asetustiedosto." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "otaksu, että syöte on syslinux-asetustiedosto." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Suorita syslinux-asetus samassa asiayhteydessä" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Suorita syslinux-asetus uudessa asiayhteydessä" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Suorita syslinux-asetus samassa asiayhteydessä ottaen vain valikkorivit" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Suorita syslinux-asetus uudessa asiayhteydessä ottaen vain valikkorivit" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "päätettä ei ole määritelty" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "pääteikkunaa ”%s” ei löytynyt" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktivoi syötepäätteet:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Saatavilla olevat syötepäätteet:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktivoi tulostepäätteet:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Saatavilla olevat tulostepäätteet:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [PÄÄTE1] [PÄÄTE2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Luettele tai valitse syötepääte." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Luettele tai valitse tulostepääte." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "LAUSEKE ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Arvioi lauseke." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "LAUSEKE" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Lataa sama tiedosto useilla tavoilla." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Määritä koko jokaiselle lukutoiminnolle" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "virheellinen lohkokoko" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Tiedostokoko: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Kulunut aika: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Nopeus: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s KOKO] TIEDOSTONIMI" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Testaa tiedoston lukunopeus" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "komentoa ei ole määritelty" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Kulunut aika: %d.%03d sekuntia \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "KOMENTO [ARGUMENTIT]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "KOMENNON käyttämä mitattu aika" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Käännä suuriksi kirjaimiksi." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Käännä pieniksi kirjaimiksi." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[VALITSIMET] [JOUKKO1] [JOUKKO2] [MERKKIJONO]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Käännä JOUKKO1-merkit JOUKKO2-merkeiksi MERKKIJONOssa" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Älä tee mitään, onnistuneesti." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Älä tee mitään, epäonnistuneesti." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Koesta USB-tuki." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Ohita julkisen avaintiedoston allekirjoitustarkistus." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "virheellinen allekirjoitus" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "julkista avainta %08x ei löydy" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "moduulia ”%s” ei ole ladattu" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" +"[-s|--skip-sig] TIEDOSTO ALLEKIRJOITUS_TIEDOSTO [JULKISEN_AVAIMEN_TIEDOSTO]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Varmista ulkopuolinen allekirjoitus." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] JULKISEN_AVAIMEN_TIEDOSTO" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Lisää PUBKEY_FILE luotettaviin avaimiin." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Näytä luotettujen avaimien luettelo." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "JULKISEN_AVAIMEN_TUNNISTE" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Poista PUBKEY_ID luotettuista avaimista." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Vain teksti " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Ohjausväri, peite: %d/%d/%d/%d sijainti: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Pakattu " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Ei-ketju 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Kaksivärinäyttö " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Tuntematon videotila " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDID-tarkistussumma virheellinen" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID-versio: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Ensisijainen tila: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Ensisijaista tilaa ei ole käytettävissä\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "virheellinen videotilamäärittely ”%s”" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Tuettujen videotilojen luettelo:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Selite: mask/position=red/green/blue/reserved" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Sovitin ”%s”:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Tietoa ei ole saatavilla" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Videosovittimen alustaminen epäonnistui" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[WxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Luettele käytettävissä olevat videotilat. Jos resoluutio on annettu, näytä " +"vain tiloja, jotka täsmäävät siihen." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Koesta video-alijärjestelmä WxH-tilassa." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Koesta video-alijärjestelmä." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[HAKEMISTO]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Luettele Xen-varasto." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [MUUTTUJANIMI]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Muunna 64-bittiset UUID:t XNU:lle sopivaan muotoon. Jos valitsin -l on " +"annettu, pidä se pienenä kirjaimena kuten blkid tekee." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "häiriö luettaessa sektoria 0x%llx kohteesta ”%s”" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "häiriö kirjoitettaessa sektoria 0x%llx kohteeseen ”%s”" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "UUID:n liittämä." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Liitä kaikki." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Liitä kaikki taltiot ”boot”-lippu asetettuna." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "kohteen ”%s” avaaminen epäonnistui: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "”%s”-haku epäonnistui: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "SOURCE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Liitä salauslaite." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Fyysisen taltion ”%s” löytäminen epäonnistui. Jotkut moduulit voivat puuttua " +"ydinlevykuvasta." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "fyysistä taltiota %s ei löydy" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "aikavalvonta laukesi luettaessa kohdetta ”%s”" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Sha256-algoritmian lataus epäonnistui" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Sha512-algoritmin lataus epäonnistui" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "ELI-metatietojen lukeminen epäonnistui" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "väärä ELI-maaginen luku tai versio" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Yritettiin purkaa master-avaimen salausta..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Kirjoita salasana kohteelle %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Väli %d avattu\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "yritetään lukea tai kirjoittaa levyn ”%s” ulkopuolella" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "CD-ROM -levylle kirjoittaminen epäonnistui" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Alkuperäiset levyajurit ovat käytössä. Kieltäydytään käyttämästä " +"laiteohjelmistolevyrajapintaa." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"sinun LDM-upotettava osiosi on liian pieni; upottaminen ei ole mahdollista" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"tällä LDM:llä ei ole upotettavaa osiota; upottaminen ei ole mahdollista!" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Poista määritelty silmukkalaitelevyasema." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] LAITENIMI TIEDOSTO." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Tee tiedostosta virtuaalinen levyasema." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "relocation 0x%x ei ole vielä toteutettu" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "ei symbolitaulua" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "tämä ELF-tiedosto ei ole oikeaa tyyppiä" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Lataa ja alusta EFI-emulaattori." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Päätä EFI-emulaattorin lataus." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Poista EFI-emulaattorilataus." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "symbolia ”%s” ei löytynyt" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Ladatut kirjasimet:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "TIEDOSTO..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Määritä yksi tai useampia kirjasintiedostoja ladattavaksi." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Luettele ladatut kirjasimet." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "symboliset linkit liian syvässä sisäkkäin" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "yritys lukea tiedoston lopun jäljestä" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"monilaitetiedostojärjestelmän välttämättömän jäsenlaiteen löytäminen " +"epäonnistui" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "ei ole hakemisto" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "ei ole tavallinen tiedosto" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "tiedostosi core.img on epätavallisen iso. Se ei sovi upotusalueelle." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "virheellinen tiedostonimi ”%s”" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "tarkistussummatodentaminen epäonnistui" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "salausavainta ei ole saatavilla" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC-todentaminen epäonnistui" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Otaksu, että syöte on raaka." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Otaksu, että syöte on heksadesimaali." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Otaksu, että syöte on salasana." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Kirjoita ZFS-salasana: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [TIEDOSTO]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Tuo ZFS-käärinavain, joka on tallennettu TIEDOSTOon." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtuaalilaite poistettiin" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtuaalilaite vioittui" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtuaalilaite ei ole verkossa" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtuaalilaite on taantunut" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtuaalilaite on verkossa" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Virheellinen virtuaalilaite: tyyppiä ei ole käytettävissä" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Lehtivirtuaalilaite (tiedosto tai levy)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Käynnistyspolku: ei ole saatavilla\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Käynnistyspolku: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Polku: ei ole saatavilla" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Polku: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Laitetunniste: ei ole saatavilla" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Laitetunniste: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Tämä VDEV on peili." + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Tämä VDEV on RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Virheellinen VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV %d:lla lapsella\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV-elementtinumero %d on väärä\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV-elementtinumero %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Tuntematon virtuaalilaitetyyppi: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Varantotila: aktiivinen" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Varantotila: viety" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Varantotila: tuhottu" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Varantotila: varattu kuumalle varaosalle" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Varantotila: taso 2 ARC-laite" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Varantotila: alustamaton" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Varantotila: ei saatavilla" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Varantotila: potentiaalisesti aktiivinen" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Varantonimi: ei saatavilla" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Varantonimi: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Varanto-GUID: ei saatavilla" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Varanto-GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Ei kyetä noutamaan varantotilaa" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Tunnistamaton varantotila" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Ei virtuaalilaitepuuta saatavilla" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Tulosta ZFS-tiedot laitteesta LAITE." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "TIEDOSTOJÄRJESTELMÄ [MUUTTUJA]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Tulosta ZFS-BOOTFSOBJ tai tallenna se MUUTTUJAan" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Yhdistä nyt etävikajäljitin." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Käynnistä GDB-tynkä annetussa portissa" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Hyppää GDB:hen" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Pysäytä GDB-tynkä" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "ennenaikainen tiedoston loppu" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Käännä merkkijonot nykyisillä asetuksilla." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Enter käynnistää valitun käyttöjärjestelmän, ”e” siirtyy muokkaamaan " +"komentoja ennen käynnistystä ja ”c” siirtyy komentoriville. ESC palaa " +"edelliseen valikkoon." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Enter käynnistää valitun käyttöjärjestelmän, ”e” siirtyy muokkaamaan " +"komentoja ennen käynnistystä ja ”c” siirtyy komentoriville." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: käynnistys, ”e”: valitsimet, ”c”: komentorivi" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "" +"Korostettu valikkorivi suoritetaan automaattisesti %d sekunnin kuluttua." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%d s jäljellä." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d s" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB-käynnistysvalikko" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s-arvo on pienempi tai yhtäsuuri kuin %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT-parametri vaatii arvon" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT-parametrin on oltava positiivinen" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Tuntematon ARGP_HELP_FMT-parametri" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Roskaa kohteessa ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Pakolliset tai valinnaiset argumentit pitkille valitsimille ovat pakollisia " +"tai valinnaisia myös kaikille vastaaville lyhyille valitsimille." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " tai: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr "[VALITSIN...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Lisätietoja komennolla ’%s --help’ tai ’%s --usage’.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Ilmoita vioista (englanniksi) osoitteeseen %s.\n" +"Ilmoita käännösvirheistä osoitteeseen .\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Tuntematon järjestelmävirhe" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "anna tämä opasteluettelo" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "anna lyhyt käyttöviesti" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NIMI" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "aseta ohjelman nimi" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEKUNTIA" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "jumittuu SECS sekuntia (oletus 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "tulosta ohjelman versio" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(OHJELMAVIRHE) Versiota ei tiedetä!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Liian monta argumenttia\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(OHJELMAVIRHE) Valitsin pitäisi olla tunnistettu!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: valitsin ’--%s’ vaatii argumentin\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: unnistamaton valitsin ’--%s’\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: tunnistamaton valitsin ’%c%s’\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: virheellinen valitsin -- ’%c’\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: valitsin vaatii argumentin -- ’%c’\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Onnistui" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Ei täsmäystä" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Virheellinen säännöllinen lauseke" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Virheellinen tietojen keräysmerkki" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Virheellinen merkkiluokkanimi" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Jäljessä oleva kenoviiva" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Virheellinen paluuviite" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Pariton [ tai [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Pariton ( tai \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Pariton \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Virheellinen \\{\\}-sisältö" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Virheellinen lukualueen loppu" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Muisti loppui" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Virheellinen edeltävä säännöllinen lauseke" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Ennenaikainen säännöllisen lausekkeen loppu" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Säännöllinen lauseke on liian suuri" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Pariton ) tai \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "tuntematon säännöllisen lausekkeen virhe" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Ei edellistä säännöllistä lauseketta" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hei Maailma" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Sano ”Hei Maailma”." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "yritys etsiä tiedoston ulkopuolella" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "tukematon gzip-muoto" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop-tiedosto turmeltunut" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz-tiedosto vaurioitunut tai tukemattomat lohkovalitsimet" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "virheellinen arch-riippuvainen ELF magic" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=ARVO]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Aseta ympäristömuuttuja." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Poista ympäristömuuttuja." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARGUMENTTI]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Luettele laitteet tai tiedostot." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Lisää moduuli." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "levyä ”%s” ei löytynyt" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "yritys lukea tai kirjoittaa osion ulkopuolelle" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "virheellinen arch-riippumaton ELF magic" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "laitelukumäärä ylittää rajan" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "kohteeseen ”%s” kirjoittaminen epäonnistui: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"rivi device.map ”%s” on virheellinen. Ohita se. Korjaa tai poista se device." +"map-tiedostostasi" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"levyasemanimi ”%s” tiedostossa device.map on virheellinen. Sen sijasta " +"käytetään %s. Käytä muotoa [hfc]d[0-9]* (Esim.: ”hd0” tai ”cd”)" + +# avattava kohden on parametrinä saatava tuloste(tiedosto) +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "tulostekohteen ”%s” avaaminen epäonnistui: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "LAITE_NIMI" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Aseta juurilaite." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "käytä TIEDOSTOa laitekuvauksena [oletus=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +#, fuzzy +msgid "use FILE as memdisk" +msgstr "upota TIEDOSTO memdisk-levykuvana" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "käytä GRUB-tiedostoja hakemistossa HAKEMISTO [oletus=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "tulosta laveilla viesteillä." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "odota kunnes vianjäljittäjä liittyy" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Tuntematon ylimääräinen argumentti ”%s”." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-emulaattori." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Virhe jäsennettäessä komentoriviargumentteja\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Suorita ”gdb %s %d”, ja aseta ARGS.HOLD nollaksi.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: varoitus:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: tiedot:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: virhe:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "tiedosto ”%s” on liian iso" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "tuntematon tiedostojärjestelmä" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Sulkeutuminen epäonnistui" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Poistuminen epäonnistui" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "ylivuoto havaittu" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Hylätään väärin sisäkkäiset osiot (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Tuntematon komento ”%s”.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Näytä tämä opaste ja poistu." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Näytä tämän komennon käyttöopaste ja poistu." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "puuttuva pakollinen valitsin kohteelle ”%s”" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "argumentti ”%s” vaatii kokonaisluvun" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "arvo liitettiin argumenttiin ”%s” vaikka se ei vaadi argumenttia" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Tulosta paluujälki." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB ei vielä tiedä, kuinka tämä kone pysäytetään!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Oletuspalvelin on ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "virheellinen värimäärittely ”%s”" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Uudelleenkäynnistys epäonnistui" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "laitepuu on tarjottava (katso ”devicetree”-komentoa)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "virheellinen zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "virheellinen laitepuu" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Lataa Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Lataa initrd-tiedosto." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Lataa DTB-tiedosto." + +#: grub-core/loader/arm64/linux.c:57 +#, fuzzy +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"pelkkää levyvedosydintä ei tueta - rakenna uudelleen CONFIG_(U)EFI_STUB-" +"asetus käyttöönotettuna" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "sinun on ladattava ydin ensin" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, jakeluversiolla Xen hypervisor" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Lataa moduuli." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[VALITSIMET]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Käynnistä BIOS-perustainen järjestelmä." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Lataa toinen käynnistyslatain." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Näytä tuloste kaikissa pääteikkunoissa." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Käytä sarjapääteikkunaa." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Kysy tiedostonimeä, josta käynnistetään." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Käytä CD-ROM:ia juurena." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Kutsu esiin käyttäjäasetusreititys." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Siirry KDB:hen käynnistyksen yhteydessä." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Käytä GDB-etävianjäljitintä eikä DDB:tä." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Ota pois käytöstä kaikki käynnistyksen tulosteet." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Odota näppäimen painallusta jokaisen tulosterivin jälkeen." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Käytä sisäänkäännettyä root-laitetta." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Käynnistä yhden käyttäjän tilaan." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Käynnistä laveilla viesteillä." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Älä käynnisty uudelleen; vain pysähdy." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Vaihda asetettuja laitteita." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comYKSIKKÖ[,NOPEUS]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Ota SMP pois käytöstä." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Ota ACPI pois käytöstä." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Älä näytä käynnistyksen diagnostiikkaviestejä." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Käynnistä vianjäljitysviesteillä." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Vaienna normaalituloste (varoitukset jäävät)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[OSOITE|comYKSIKKÖ][,NOPEUS]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nimi" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tyyppi" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "osoite" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "koko" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Käynnistä sokkona" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Lataa FreeBSD-käyttöjärjestelmäydin." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Lataa OpenBSD-käyttöjärjestelmäydin." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Lataa NetBSD-käyttöjärjestelmäydin." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Lataa FreeBSD-ymp." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Lataa FreeBSD-ydinmoduuli." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Lataa NetBSD-ydinmoduuli." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Lataa NetBSD-ydinmoduuli (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Lataa FreeBSD-ydinmoduuli (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Lataa kOpenBSD-ramlevy." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Lataa toinen coreboot-kuorma" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Perinne-”ask”-parametriä ei enää tueta." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s on vanhentunut. Käytä sen sijaan ”set gfxpayload=%s” ennen linux-" +"komentoa.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s on vanhentunut. VGA-tilaa %d ei tunnistettu. Käytä sen sijaan ”set " +"gfxpayload=LEVEYSxKORKEUS[xSYVYYS]” ennen linux-komentoa.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] TIEDOSTO" + +# paikankorvaajasta tulee "core_path" +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "ydinpolun ”%s” koko on liian suuri" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Lataa FreeDOS-kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Lataa NTLDR tai BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Ohita Plan9-laitteiden arvattu kuvaus." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBDEVICE=PLAN9DEVICE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "YDIN ARGUMENTIT" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Lataa Plan9-ydin." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Lataa PXE-levykuva." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Lataa Truecrypt ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd on jo ladattu" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Lataa moduuli." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Käynnistä xnu painamalla mitä tahansa näppäintä" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Lataa ”device-properties”-vedos." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "FPSWA-ajurin paikantaminen epäonnistui" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "FPSWA-yhteyskäytäntö ei kykene löytämään rajapintaa" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "FPSWAta ei löytynyt" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA-korjausversio: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "TIEDOSTO [ARGUMENTIT ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Näytä FPSWA-versio." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "VAROITUS: pääteikkunaa ei ole saatavissa käyttöjärjestelmään" + +# Multiboot viittaa Multiboot-määrittelyyn. Katso http://www.gnu.org/software/grub/manual/multiboot/multiboot.html +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Lataa multiboot2-ydin." + +# Multiboot viittaa Multiboot-määrittelyyn. Katso http://www.gnu.org/software/grub/manual/multiboot/multiboot.html +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Lataa multiboot2-moduuli." + +# Multiboot viittaa Multiboot-määrittelyyn. Katso http://www.gnu.org/software/grub/manual/multiboot/multiboot.html +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Lataa multiboot-ydin." + +# Multiboot viittaa Multiboot-määrittelyyn. Katso http://www.gnu.org/software/grub/manual/multiboot/multiboot.html +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Lataa multiboot-moduuli." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Taustakuvatila." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Lataa XNU-levykuva." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Lataa 64-bittinen XNU-levykuva." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Lataa XNU-laajennuspakkaus." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Lataa XNU-laajennus." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "HAKEMISTO [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Lataa XNU-laajennushakemisto." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" +"Lataa XNU-ramlevy. Käyttöjärjestelmässä se on käytettävissä nimellä md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Lataa tervetulokuva XNU:lle." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Lataa XNU-lepotilalevykuva." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "OSOITE,PEITE1[,OSOITE2,PEITE2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Esittele muistialueet viallisena (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "KOHTEESTA[K|M|G] KOHTEESEEN[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Poista kaikki muistialueet määritellyltä alueelta." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "odotettiin neljä argumenttia" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "tunnistamaton verkkorajapinta ”%s”" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "DHCP-tietoja ei löytynyt" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "DHCP-valitsimia ei löytynyt" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "DHCP-valitsinta %d ei löytynyt" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "tunnistamaton DHCP-valitsinmuotomäärittely ”%s”" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "verkkokorttia ei löytynyt" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "kohteen %s asettaminen automaattisesti epäonnistui" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KORTTI]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "suorita automaattinen bootp-asetus" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "MUUTTUJA RAJAPINTA NUMERO KUVAUS" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"nouda DHCP-valitsin ja tallenna se MUUTTUJAan. Jos MUUTTUJA on - niin " +"tulosta arvo." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "DNS-palvelimia ei ole asetettu" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "verkkotunnuskomponentti on liian pitkä" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "DNS-tietuetta ei löytynyt" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "ei vastaanotettu DNS-vastausta" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "vain ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "vain ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "etusija ipv4:lle" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "etusija ipv6:lle" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "virheellinen argumentti" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "OSOITE DNSPALVELIN" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Suorita DNS-haku" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Lisää DNS-palvelin" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Poista DNS-palvelin" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Luettele DNS-palvelimet" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "verkkopaketin lähettäminen epäonnistui" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-bittinen suojattu rajapinta tuettu\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +#, fuzzy +msgid "alloc-mem failed" +msgstr "muistivaraus epäonnistui" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "tukematon HTTP-vastaus" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "tukematon HTTP-virhe %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "aikavalvonta avattaessa kohdetta ”%s”" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "aikavalvonta: laitteisto-osoiteen ratkaiseminen epäonnistui" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "ratkaisematon osoite %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "tunnistamaton verkko-osoite ”%s”" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "kohde saavuttamaton" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "reittisilmukka havaittu" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "osoitetta ei löytynyt" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "tämän osoitteen poistaminen epäonnistui" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Tukematon laitteisto-osoitetyyppi %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Tukematon osoitetyyppi %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "odotettiin kolmea argumenttia" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "korttia ei löytynyt" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "tilapäinen" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Tuntematon osoitetyyppi %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "palvelinta ei ole määritelty" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "aikavalvonta laukesi luettaessa kohdetta ”%s”" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "LYHYTNIMI KORTTI OSOITE [LAITTEISTO-OSOITE]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Lisää verkko-osoite." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KORTTI [LAITTEISTO-OSOITE]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Suorita automaattinen IPV6-asetus" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "LYHYTNIMI" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Poista verkko-osoite." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "LYHYTNIMI NET [RAJAPINTA] gw YHDYSKÄYTÄVÄ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Lisää verkkoreitti." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Poista verkkoreitti." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "luettele verkkoreitit" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "luettele verkkokortit" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "luettele verkko-osoitteet" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "yhteys kielletty" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "yhteysaikavalvonta" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Kirjoita käyttäjänimi: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[KÄYTTÄJÄLUETTELO]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Tarkista onko käyttäjä USERLIST-luettelossa." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Mahdollisia komentoja ovat:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Mahdollisia laitteita ovat:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Mahdollisia tiedostoja ovat:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Mahdollisia osioita ovat:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Mahdollisia argumentteja ovat:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Mahdollisia asioita ovat:" + +# edustavärin ja taustavärin välissä kauttaviiva väriparissa +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Varoitus: syntaksivirhe (puuttuu /-merkki) värinimiparissa ”%s”\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Varoitus: virheellinen edustaväri ”%s”\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Varoitus: virheellinen taustaväri ”%s”\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Vie muuttujat." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Sunnuntai" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Maanantai" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Tiistai" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Keskiviikko" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Torstai" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Perjantai" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Lauantai" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "moduulia ei ole ladattu" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB -versio %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Poistuu aina ESC-näppäimellä." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimaalista BASHin kaltaista rivimuokkausta tuetaan. Ensimmäisen sanan " +"kohdalla SARKAIN luettelee mahdolliset komentojen täydennykset. Kaikkialla " +"muualla SARKAIN luettelee mahdolliset laite- tai tiedostotäydennykset. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Tyhjennä näyttö." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Siirry normaalitilaan." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Poistu normaalitilasta." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Jatka painamalla mitä tahansa näppäintä..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Käynnistetään ”%s”" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Palataan takaisin kohteeseen ”%s”" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Sekä oletus- että varmistuslevyjen käynnistys epäonnistui.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Käynnistetään komentoluettelo" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimaalista Emacsin kaltaista näyttömuokkausta tuetaan. SARKAIN luettelee " +"täydennykset. Käynnistä painamalla Ctrl-x tai F10, siirry komentoriville " +"painamalla Ctrl-c tai F2 tai hylkää muokkaukset ja palaa valikkoon " +"painamalla ESC." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "%C ja %C valitsee korostetun valikkorivin." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "kibitavua" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "mebitavua" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "gibitavua" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "tebitavua" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "pebitavua" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "Ki" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "Mi" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "Gi" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "Ti" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "Pi" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "kibitavua/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "mebitavua/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "gibitavua/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "tebitavus/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "pebitavua/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Osio %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Laite %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Tiedostojärjestelmään ei päästä" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Tiedostojärjestelmätyyppi %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Nimiö ”%s”" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Viimeinen muokkausaika %3$d.%2$d.%1$d %4$d:%5$d:%6$d %7$s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Tuntematon tiedostojärjestelmä havaittu" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Osiotaulu alkaa osoitteesta %llu%s kibitavua" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sektorikoko %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Kokonaiskoko tuntematon" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Kokonaiskoko %llu%s kibitavua" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--LISÄÄ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "asetustiedoston ”%s” avaus epäonnistui: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "alustallesi ei ole saatavissa tiivistystä" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "alustallesi ei ole saatavissa IEEE1275-rutiineja" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "alustallesi ei ole saatavissa EFI-rutiineja" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "alustallesi ei ole saatavissa SGI-rutiineja" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "käyttöjärjestelmällesi ei ole saatavissa satunnaislukugeneraattoria" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Epäonnistunut ”device-mapper”-puun luominen" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "salaustaltion ”%s” liittäminen epäonnistui: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "geom-laitteen avaus epäonnistui" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "geli-kuluttajan löytäminen epäonnistui" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "geli UUID -tunnisteen noutaminen epäonnistui" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "geom ”part” -luokan avaus epäonnistui" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "tasaamaton laitekoko" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "yritetään lukea ydinlevykuvaa ”%s” GRUB:sta" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "yritetään lukea ydinlevykuvaa ”%s” GRUB:sta uudelleen" + +# Ydinlevykuvan luku GRUBista epäonnistui maksimiyrityskertojen määrän +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "ydinlevykuvan ”%s” lukeminen oikein epäonnistui" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "ydinlevykuvan sektoreiden lukeminen epäonnistui" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "translator-komentorivin saaminen polulle ”%s” epäonnistui: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "translator-komentorivi on tyhjä polulle ”%s”" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"translator ”%s” polulle ”%s” on useita ei-valitsinsanoja, ainakin ”%s” ja " +"”%s”" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"translator ”%s” polulle ”%s” annetaan vain valitsimia, laiteosan löytäminen " +"epäonnistui" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Tallennusvälinetieto ”%s” ei sisällä tyyppiä" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "”%s” ei ole paikallinen levy" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Varastotieto kohteelle ”%s” ei osoita pelkkää osioita eikä pelkkää levyä" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "lohkoluetteloiden noutaminen epäonnistui: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "lohkokoko ei ole jaollinen numerolla 512" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "virheellinen lohkokoko" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "lohkoluetteloiden noutaminen epäonnistui" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION -virhe: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "tukematon RAID-versio: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO -virhe: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO -virhe: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Ei kyetä avamaan virtaa kohteelta %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "väärän tyyppinen RAID-laite ”%s”" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"”obppath” ei löytynyt kohteen ”%s” äitihakemistoista, ei ole havaittu " +"IEEE1275-nimeä" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "sääntöjen mukaisen ”%s”-polun saaminen epäonnistui" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "tuntematon laitetyyppi %s\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Käyttö: %s LAITE\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Ei kyetä fork-kutsumaan: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Ei kyetä luomaan putkea: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "alkuperäisen hakemiston palauttaminen epäonnistui" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "stat ”%s”-kutsu epäonnistui: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "tilapäisen tiedoston tekeminen epäonnistui: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "tilapäisen hakemiston tekeminen epäonnistui: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"IEEE1275-laitepolun löytäminen kohteelle %s epäonnistui.\n" +"Muuttuja ”boot-device” on asetettava manuaalisesti" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: ei löytynyt" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"”nvsetenv” epäonnistui. \n" +"Muuttuja ”boot-device” on asetettava manuaalisesti. Kirjoita IEEE1275-" +"kehotteella:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Muuttujat ”SystemPartition” ja ”OSLoader” on asetettava manuaalisesti." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "kauttaviiva ”/” puuttuu sääntöjenmukaisesta tiedostonimestä" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() epäonnistui" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "satunnaisdatan noutaminen epäonnistui" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Riittämättömästi käyttöoikeuksia laiteohjelmistoon pääsemiseksi, otaksutaan " +"BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "suoritettaessa BIOS-tilassa EFI-rutiinit eivät ole saatavilla" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "odottamaton EFI-virhe" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Vapaan BootNNNN-välin löytäminen epäonnistui" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"tämä GPT-osionimiö ei sisällä BIOS-käynnistysosiota; upottaminen ei ole " +"mahdollista" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"sinun BIOS-käynnistysosiosi on liian pieni; upottaminen ei ole mahdollista" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sektori %llu on jo raid-ohjaimen ”%s” käyttämä, vältä sektoria. Pyydä " +"valmistajaa olemaan tallentamatta tietoja MBR-väliin" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sektori %llu on jo ohjelman ”%s” käyttämä, vältä sektoria. Tämä ohjelmisto " +"saattaa aiheuttaa tulevaisuudessa ongelmia käyttöjärjestelmän " +"käynnistämisessä tai muualla. Pyydä ohjelman tekijöitä olemaan tallentamatta " +"tietoja käynnistyssektorille." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"jokin toinen ohjelmisto käyttää upotusaluetta ja siinä ei ole kylliksi tilaa " +"core.img -tiedostolle. Sellainen ohjelmisto yrittää usein tallentaa tietoja " +"välttääkseen havaitsemista. Suosittelemme tutkimaan asiaa" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"tässä msdos-tyylisessä osionimiössä ei ole MBR:n jälkeistä aukkoa; " +"upottaminen ei ole mahdollista" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"upotettava alueesi on epätavallisen pieni. Tiedosto core.img ei mahdu " +"siihen." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Tee osiosta aktiivinen" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "ei ole ensisijainen osio" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Osio %d on nyt aktiivinen. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Nollattu aktiivilippu kohteessa %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Vaihda osiotyyppi" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Aseta ”hidden”-lippu osiotyypissä" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "osiotyyppi 0x%x ei ole kelvollinen" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Asetetaan osiotyypiksi 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "break 0 -silmukasta uloshyppääminen epäonnistui" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "ei ole funktion sisällä" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "virheellinen muuttujanimi ”%s”" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "odottamaton tiedoston loppu" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Poistu silmukoista" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Jatka silmukoita" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Vaihda sijaintiparametreja." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ARVO]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Aseta sijaintiparametrit." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Palaa funktiosta." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] TIEDOSTO" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Lataa taustakuva aktiivipäätteelle." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "VÄRI" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Aseta taustaväri aktiivipäätteelle." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Näytä CBMEM-pääteikkunasisältö." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Aseta sarjayksikkö." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Aseta sarjaporttiosoite." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Aseta sarjaporttinopeus." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Aseta sarjaportin sanapituus." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Aseta sarjaportin pariteetti." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Aseta sarjaportin stop-bitit." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Aseta perustaajuus." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Ota käyttöön/poista käytöstä RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "sarjaporttia ”%s” ei löytynyt" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "tukematon sarjaporttivirtaohjaus" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[VALITSIMET...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Aseta sarjaportti." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "tuntematon terminfo-tyyppi ”%s”" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "visuaalisesti järjestetty UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Tuntematon koodaus" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Nykyiset terminfo-tyypit:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Pääte on vain ASCII-pääte [oletus]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Pääte on loogisesti järjestetty UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Pääte on visuaalisesti järjestetty UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Päätteellä on määritelty geometria." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "LEVEYSxKORKEUS." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "virheellinen pääteikkunamittasuhdemäärittely" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "pääteikkuna %s ei löytynyt tai terminfo ei ole käsitellyt sitä" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] PÄÄTE [TYYPPI]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Aseta TERM-terminfo-tyypiksi TYYPPI.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Tulosta ja suorita lohkoargumentti." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "bittikartta ”%s” on tukematonta muotoa" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE-tiedot: versio: %d.%d OEM-ohjelmistoversio: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " muistia yhteensä: %d kibitavua\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "sopivaa videotilaa ei löytynyt" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "pääsy kielletty" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODUULIT" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "esilataa määritellyt moduulit MODUULIT" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "asenna vain MODUULIT ja niiden riippuvuudet [oletus=all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEEMAT" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "asenna TEEMAT [oletus=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "KIRJASIMET" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "asenna KIRJASIMET [oletus=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "PAIKALLISASETUKSET" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "asenna vain PAIKALLISASETUKSET [oletus=all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "tiivistä GRUB-tiedostot [valinnainen]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "valitse ydinlevykuvalle käytettävä tiivistys" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" +"käytä levykuvia ja moduuleja hakemiston HAKEMISTO alla [oletus=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "käytä käännöksiä hakemiston HAKEMISTO alla [oletus=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "käytä teemoja hakemiston HAKEMISTO alla [oletus=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "upota TIEDOSTO julkisena avaimena allekirjoitustarkistukseen" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "tiedoston %s nimeäminen nimellä %s epäonnistui" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "levyä ei ole olemassa, joten palataan takaisin osiolaitteeseen %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Komennot:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Luo tyhjä ympäristölohkotiedosto." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Luettele nykyiset muuttujat." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NIMI=ARVO ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Aseta muuttujat." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NIMI ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Poista muuttujat." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Valitsimet:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Sinun on määriteltävä vähintään yksi komento.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "TIEDOSTONIMI KOMENTO" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Työkalu ympäristölohkon muokkaamiseen." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Jos TIEDOSTONIMI on ”-”, käytetään oletusarvoa %s.\n" +"\n" +"Komentoa ”delete” ei ole olemassa; jos haluat poistaa koko ympäristölohkon,\n" +"käytä ”rm %s”." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "virheellinen ympäristölohko" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "virheellinen parametri %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "ympäristölohko on liian pieni" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "levyluku epäonnistuu siirrososoitteessa %lld, pituus %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "virheellinen ohitusarvo %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "lukuvirhe siirrososoitteessa %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "käyttöjärjestelmätiedoston ”%s” avaaminen epäonnistui: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "vakiotulosteeseen kirjoittaminen epäonnistui: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "vertailu epäonnistui siirrososoitteessa %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Käyttöjärjestelmätiedoston %s avausvirhe: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "”loopaback”-komento epäonnistui: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "”cryptomount”-komento epäonnistuu: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "UUID-tunnisteen noutaminen epäonnistui" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls POLKU" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Luettele tiedostot PATH-muuttujassa." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp TIEDOSTO PAIKALLINEN" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopioi TIEDOSTO paikalliseen tiedotoon PAIKALLINEN" + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat TIEDOSTO" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Kopioi TIEDOSTO vakiotulosteeseen." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp TIEDOSTO PAIKALLINEN" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Vertaa TIEDOSTOa paikalliseen tiedostoon PAIKALLINEN." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex TIEDOSTO" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Näytä TIEDOSTOn sisältö heksadesimaalisena." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc TIEDOSTO" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Hae TIEDOSTOn crc32-tarkistussumma." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist TIEDOSTO" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Näytä TIEDOSTOn lohkoluettelo." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid LAITE" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Laske laitteen XNU UUID." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Ohita N tavua tulostetiedostosta." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Käsittele N tavua tulostetiedostossa." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Määritä syötetiedostojen lukumäärä." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Aseta vianjäljitysympäristömuuttuja." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Liitä salauslaitteet." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "TIEDOSTO|kehote" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Lataa zfs-salausavain." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Pura tiedoston tiivistys." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Virheellinen levylukumäärä.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" +"Valinnaisen levylukumäärän on oltava sitä käytettäesä levyluettelon edessä.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Komentoa ei ole määritelty.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Komennolle ei ole riittävästi parametreja.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Virheellinen komento %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE_PATH KOMENNOT" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Vianjäljitystyökalu tiedostojärjestelmäajurille." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "aseta syötetiedostonimi 32-bittiselle komponentille." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "aseta syötetiedostonimi 64-bittiselle komponentille" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "aseta tulostetiedostonimi. Oletus on STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[VALITSIMET]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Liimaa 32-bittinen ja 64-binääri Apple universal one-pakkaukseksi." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Puuttuva syötetiedosto\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "kohteen ”%s” kopioiminen kohteeseen ”%s” epäonnistui: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "kohteen ”%s” tiivistys kohteeseen ”%s” epäonnistui" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "hakemiston ”%s” avaaminen epäonnistui: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "kohteen ”%s” poistaminen epäonnistui: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage on käännetty ilman XZ-tukea" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Tuntematon tiivistysmuoto %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Tunnistamaton tiivistys ”%s”" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "tuntematon kohdemuoto %s\n" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "paikallisasetusta ”%s” ei löytynyt" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s ei ole olemassa. Määritä --target tai --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "virheellinen modinfo-tiedosto ”%s”" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Tuntematon alusta ”%s-%s”" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Useampi kuin yksi asennuslaite?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "asenna GRUB-levykuvat hakemistoon HAKEMISTO/%s eikä %s-hakemistoon" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "KOHDE" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, fuzzy, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "asenna GRUB KOHDE-alustalle [oletus=%s]" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"tee levyasemasta käynnistettävä myös levykkeenä (oletus fdX-laitteille). " +"Saattaa rikkoutua joissakin BIOS:eissa" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "poista laitekuvaus, jos se on jo olemassa" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "asenna myös silloin kun havaittiin ongelmia" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "käytä tunnistetiedostoa vieläpä kun UUID on käytettävissä" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"käytettävä levyasemamoduuli (biosdisk tai alkuperäinen). Tämä valitsin on " +"käytettävissä vain BIOS-kohteella." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"älä päivitä ”boot-device”/”Boot*” NVRAM-muuttujaa. Tämä valitsin on " +"käytettävissä vain IEEE1275-kohteilla." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "älä koesta tiedostojärjestelmiä laitteessa LAITE" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "älä asenna käynnistyssektoria" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Älä toteuta mitään reed-solomon-koodeja upotettaessa core.img-levykuvaa. " +"Tämä valitsin on käytettävissä vain BIOS-kohteilla." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"asennuslaite on irrotettava. Tämä valitsin on käytettävissä vain EFI-osiolla." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "TUNNISTE" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"käynnistyslataimen TUNNISTE. Tämä valitsin on käytettävissä vain EFI- ja " +"Macs-osioilla." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "käytä HAKEMISTO EFI-järjestelmäosion juurena." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "käytä HAKEMISTO PPC MAC-asennuksille." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "käytä TIEDOSTOa nimiön kirjasimena" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "käytä COLOR-muuttuja-asetusta nimiössä" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "käytä COLOR-muuttuja-asetusta nimiötaustana" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "Käytä MERKKIJONOa tuoteversiona." + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[VALITSIN] [ASENNUS_LAITE]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Asenna GRUB levyasemaasi." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"ASENNUS_LAITE on oltava järjestelmälaitteen tiedostonimi.\n" +"%s kopioi GRUB-levykuvan kohteeseen %s. Joillakin alustoilla se voi myös " +"asentaa GRUBin käynnistyssektoriin." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "levyasema %s on määritelty useita kertoja laitekuvauksessa %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Alustasi määritteleminen epäonnistui. Käytä valitsinta --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Asennetaan %s-alustalle.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "asennuslaitetta ei ole määritelty" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "EFI-hakemiston etsiminen epäonnistui" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "kohteen %s laitteen etsiminen epäonnistui (onko /dev -liitetty?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"GRUB-levyaseman etsiminen kohteelle %s epäonnistui. Tarkista device.map-" +"tiedostosi" + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s ei näytä EFI-osiolta.\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Löysit ohjelmistovian" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "tiedostojärjestelmä kohteessa %s ei ole HFS eikä HFS+" + +#: util/grub-install.c:1273 +#, fuzzy, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"yritys asentaa salauslevylle ilman että salauslevy on otettu käyttöön. Aseta " +"”%s” tiedostossa ”%s”." + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Tiedoston luominen epäonnistui: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"vihjeitä ei ole käytettävissä alustallasi. Otaksu alentunut suorituskyky" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "EI SUORITETA: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "valittu osio ei ole PReP-osio" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "Grub-kopiointi PReP-osiolle epäonnistui" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"PReP-osiosi ei ole tyhjä. Jos olet varma, että haluat käyttää sitä, suorita " +"dd-komento sen tyhjentämiseksi: ”%s”" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "EFI-käynnistystunnistetta ei ole määritelty." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "VAROITUS: alustakohtaista asennusta ei ole suoritettu" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Asennus on päättynyt. Virheitä ei löytynyt." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bless-tiedosto x86-perustaisille mac-tietokoneille" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bless-tiedosto ppc-perustaisille mac-tietokoneille" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Polkua tai laitetta ei ole määritelty.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc POLKU|--x86 TIEDOSTO" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Mac-tyylinen bless-tiedosto HFS- tai HFS+-tiedostojärjestelmässä" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Käyttö: %s [SYÖTETIEDOSTO [TULOSTETIEDOSTO]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype-virhe %d ladattaessa glyph 0x%x kohteelle U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (sisäpuolinen)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (vasemmaisin)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (oikeammaisin)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Korvautumisalueen ulkopuolella (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Hakualueen ulkopuolella: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Tukematon korvaustyyppi: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Tukematon korvausmäärittely: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Tukematon peittomäärittely: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "VAROITUS: tukemattomat kirjasinominaisuusparametrit: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "tallenna tuloste TIEDOSTOon [vaadittu]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "valitse face-indeksi" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "KOHTEESTA-KOHTEESEEN[,KOHTEESTA-KOHTEESEEN]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "aseta kirjasinlukualue" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "aseta kirjasinperheen nimi" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "KOKO" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "aseta kirjasinkoko" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "aseta kirjasinsukulinja alaspäin" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "aseta kirjasinsukulinja ylöspäin" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "muunna vahvennetuksi kirjasimeksi" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "pakota automaattivihjeet" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "ota vihjeet pois käytöstä" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ohiys bittikartta-strikes-määrittelyt ladatessa" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "virheellinen kirjasinlukualue" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[VALITSIMET] KIRJASIN_TIEDOSTOT" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Muunna yleiset kirjasintiedostomuodot PF2-muotoon" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "tulostetiedosto on määriteltävä" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType epäonnistuu" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "tiedoston %s avaaminen epäonnistui, indeksi %d: virhe %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "%dx%d-kirjasinkoon asettaminen epäonnistui: Freetype-virhe %d: %s" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "aseta prefix-hakemisto [oletus=%s]" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"upota TIEDOSTO memdisk-levykuvana\n" +"Edellyttää ”-p (muistilevy)/boot/grub” ja korvaa kaikki aiemmin tarjotut " +"prefiksit, mutta prefiksi itse voidaan korvata myöhemmillä valitsimilla" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "upota TIEDOSTO kuin aikaisena asetuksena" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "lisää NOTE-segmentti kohteelle CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "tulosta tuotettu levykuva tiedostoon [oletus=vakiotuloste]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "MUOTO" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "tuota levykuva muodossa MUOTO" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "käytettävissä olevat muodot:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "tuntematon kohdemuoto %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[VALITSIN]... [MODUULIT]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Tee käynnistettävä GRUB-levykuva." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Kohdemuotoa ei ole määritelty (käytä valitsinta -O)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "Kohdemuotoa ei ole määritelty (käytä valitsinta -O)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"”%s” on käännetty väärin: sen alkuosoite on 0x%llx eikä 0x%llx: ld.gold-" +"ohjelmistovika?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "aseta syötetiedostonimi. Oletus on STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Tuntematon näppäimistön etsintätunniste %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Tuntematon näppäimistön etsintäkoodi 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "VIRHE: kevollista näppäimistöasettelua ei löytynyt. Tarkista syöte.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Tuota GRUB-näppäimistöasettelu Linux-pääteikkuna-asettelusta." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "TFTP-palvelimen juurihakemisto" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "verkkopalvelimelle suhteellinen alihakemisto" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Esikäsittelee GRUB-verkkokäynnistysvedoksen hakemistossa verkko_hakemisto/" +"alihakemisto otaksuen verkko_hakemiston olevan TFTP-juuri." + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "tukematon alusta %s\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Alustalle %s on luotu verkkokäynnistyshakemisto. Aseta DHCP-palvelimesi " +"osoittamaan tiedostoa %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "PBKDF2-iteraatioiden lukumäärä" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Tuotetun hajakoodausmerkkijonon pituus" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Salt-siemenen pituus" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Tuota PBKDF2-salasanahajakoodausmerkkijono." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "häiriö salasanan lukemisessa" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Kirjoita salasana uudelleen: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "salasanat eivät täsmää" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "satunnaisdatan noutaminen salt-siemeneksi epäonnistui" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "salausvirhenumero %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "Salasanasi PBKDF2-hajakoodaus on %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Polkua ei ole määritelty.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "POLKU" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Muunna järjestelmätiedostonimi GRUB-tiedostonimeksi." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "tallenna ROM-levykuvat hakemistoon HAKEMISTO [valinnainen]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "käytä TIEDOSTOa niin kuin xorriso-ohjelma [valinnainen]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "käytä MERKKIJONOa tuotenimenä" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"ota käyttöön sparc-alkulataus. Ottaa pois käytöstä HFS+, APM, ARCS ja " +"käynnistyksen levykuvana i386-pc:lle" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"ota käyttöön ARCS (big-endian mips-koneet, useimmiten SGI) -käynnistys. " +"Ottaa pois käytöstä HFS+, APM, sparc64 ja käynnistyksen levykuvana i386-pc:" +"lle" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Tee GRUB CD-ROM-, levy-, muistitikku- ja levykekäynnistettävä levykuva." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Tuottaa käynnistettävän CD/USB/levyke-vedoksen. Argumentit muille " +"valitsimille kuin tälle ohjelmalle välitetään xorriso-ohjelmalle ja ne " +"osoittavat lähdetiedostot, lähdehakemistot tai kaikki ”%s”-tulosteessa " +"luetellut mkisoft-valitsimet" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Valitsin -- vaihtaa alkuperäiseen xorriso-komentotilaan." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Sähköposti-xorriso-tuki vaatii osoitteen ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[VALITSIN] LÄHDE..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "otetaan käyttöön %s-tuki ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Xorriso-ohjelmasi ei tue valitsinta ”--grub2-boot-info”. Jotkut ominaisuudet " +"ovat poissa käytöstä. Käytä xorriso-ohjelmaversiota 1.2.9 tai sitä " +"myöhäisempää." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Xorriso-ohjelmasi ei tue valitsinta ”--grub2-boot-info”. Ydinvedoskuvasi on " +"liian suuri. Käynnistys levynä on otettu pois käytöstä. Käytä xorriso-" +"ohjelmaversiota 1.2.9 tai sitä myöhäisempää." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Tuota erillinen levykuva (sisältäen kaikki moduulit) valitussa muodossa" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Liitoskohtasyntaksi (Esim.: /boot/grub/grub.cfg=./grub.cfg) hyväksytään" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "LEVYKUVA1 [LEVYKUVA2 ...] LIITÄNTÄPISTE" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "tarvitsee levykuvan ja liitäntäpisteen" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "annettu argumentti on järjestelmälaite, ei polku" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, fuzzy, c-format +msgid "[default=%s]" +msgstr "asenna KIRJASIMET [oletus=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "tulosta KOHDE" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "käytettävissä olevat kohteet:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[VALITSIN]... [POLKU|LAITE]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Koesta laitetiedot annetulle polulle (tai laitteelle, jos valitsin -d on " +"annettu)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "lue teksti TIEDOSTOsta." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "käytä COLOR-muuttuja-asetusta tekstivärinä" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "käytä COLOR-muuttuja-asetusta taustavärinä" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "aseta renderoitava nimiö" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "käytä TIEDOSTOa kirjasimena (PF2)" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Renderoi Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Puuttuvat argumentit\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[POLKU]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Tarkista GRUB-skriptiasetustiedosto syntaksivirheiden varalta." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntaksivirhe rivillä %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Skripti ”%s” ei sisällä komentoja eikä tee mitään\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "käytä TIEDOSTOa käynnistyslevykuvana [oletus=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "käytä TIEDOSTOa ydinlevykuvana [oletus=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Laitetta ei ole annettu.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Aseta levykuvat käynnistymään laitteesta LAITE.\n" +"\n" +"Tätä ohjelmaa ei pitäisi normaalisti suorittaa itse. Käytä sen sijaan " +"ohjelmaa grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "LAITTEEN on oltava käyttöjärjestelmälaite (esim. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Virheellinen laite ”%s”.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "juurihakemisto, kuten se nähdään ajoaikana [oletus=/]." + +#: util/grub-syslinux2cfg.c:69 +#, fuzzy +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"nykyinen syslinux-hakemisto, kuten se nähdään ajoaikana [oletus on " +"syötetiedoston äitihakemisto]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "kirjoita tuloste TIEDOSTOon [oletus=vakiotuloste]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Muunna syslinux-asetustiedostonimi GRUB-tiedostonimeksi." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "käyttöjärjestelmäytimen levykuvan tiivistäminen epäonnistui" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "tuntematon tiivitys %d\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Tiivistyksen purkaja on liian iso" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "ydinlevykuva on liian iso (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "käyttöjärjestelmäydinlevykuva on liian iso (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img:n koon on oltava %u tavua" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img ei täsmää tunnettuun hyvään versioon, etene omalla riskillä" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "laiteohjelmistolevykuva on liian iso" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "virheellinen rivimuoto: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "ydintiedoston ensimmäinen sektori ei ole sektoritasattu" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "ei-sektoritasattua dataa löytyi ydintiedostosta" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "ydintiedoston sektorit ovat liian hajallaan" + +# paikankorvaajasta tulee "boot_path" +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "alkulatauspolun ”%s” koko ei ole %u" + +# paikankorvaajasta tulee "core_path" +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "ydinpolun ”%s” koko on liian pieni" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Yritetään asentaa GRUB levyasemalle, jossa on useita osionimiöitä tai sekä " +"osionimiö että tiedostojärjestelmä. Tätä ei vielä tueta." + +# dest_dev->disk->name eli kohdelevyaseman nimi +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"tiedostojärjestelmän tunnistaminen levyasemassa %s epäonnistui; " +"turvatarkistus epäonnistui" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s vaikuttaa sisältävän %s-tiedostojärjestelmän, jonka ei tiedetä varaavan " +"tilaa DOS-tyyliselle käynnistykselle. GRUB-ohjelman asentaminen sinne voi " +"aiheuttaa TIEDOSTOJÄRJESTELMÄN TUHOUTUMISEN, jos grub-setup korvaa arvokasta " +"tietoa (valitsin --skip-fs-probe ottaa pois käytöstä tämän tarkistuksen, " +"käytä sitä omalla vastuullasi)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s vaikuttaa sisältävän %s-osiokuvauksen, jonka ei tiedetä varaavan tilaa " +"DOS-tyyliselle käynnistykselle. GRUB-ohjelman asentaminen sinne voi " +"aiheuttaa TIEDOSTOJÄRJESTELMÄN TUHOUTUMISEN, jos grub-setup korvaa arvokasta " +"tietoa (valitsin --skip-fs-probe ottaa pois käytöstä tämän tarkistuksen, " +"käytä sitä omalla vastuullasi)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s vaikuttaa sisältävän %s-osiokuvauksen ja LDM:n, jonka tiedetään olevan " +"turvaton yhdistelmä. GRUB-ohjelman asentaminen sinne voi aiheuttaa " +"TIEDOSTOJÄRJESTELMÄN TUHOUTUMISEN, jos grub-setup korvaa arvokasta tietoa " +"(valitsin --skip-fs-probe ottaa pois käytöstä tämän tarkistuksen, käytä sitä " +"omalla vastuullasi)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Yritetään asentaa GRUB osioimattomalle levyasemalle tai osiolle. Tämä on " +"HUONO ajatus." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Yritetään asentaa GRUB levyasemalle, jossa on useita osionimiöitä. Tätä ei " +"vielä tueta." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Osiotyyli ”%s” ei tue upotusta" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Tiedostojärjestelmä ”%s” ei tue upotusta" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Upotettava alueesi on epätavallisen pieni. Tiedosto core.img ei mahdu " +"siihen." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "ei päätöslohkoa ydinlevykuvassa" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img -versiotäsmäämättömyys" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"upottaminen ei ole mahdollista, mutta sitä vaaditaan RAID- ja LVM-" +"asennuksessa" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "tiedostojärjestelmän määritteleminen kohteessa %s epäonnistui" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "tiedostojärjestelmä ”%s” ei tue lohkoluetteloja" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"upottaminen ei ole mahdollista, mutta sitä vaaditaan asennuksessa kahdelle " +"eri levyasemalle" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Upottaminen ei ole mahdollista. GRUB voidaan asentaa tällä asetuksella vain " +"käyttäen lohkoluetteloja. Lohkoluettelot ovat kuitenkin EPÄLUOTETTAVIA ja " +"niiden käyttöä ei suositella." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "ei jatka lohkoluetteloasennusta" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "lohkoluettelot ovat virheellisiä" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "lohkoluettelot eivät ole täydellisiä" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Käyttö: %s -o TULOSTE CKBMAP_ARGUMENTIT...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Tee GRUB-näppäimistösijoittelutiedosto." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "tulosta tämä viesti ja poistu" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "tulosta versiotiedot ja poistu" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s tuottaa näppäimistösijoittelun ckbcomp:ia käyttävälle GRUB:lle\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" +"Ilmoita vioista (englanniksi) osoitteeseen . Ilmoita " +"käännösvirheistä osoitteeseen ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: valitsin vaatii argumentin -- ”%s”\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Käyttö: %s [VALITSIN]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Tuota grub config-tiedosto" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "tulostetuotettu asetus TIEDOSTOon [oletus=vakiotuloste]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Tunnistamaton valitsin ”%s”\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Sinun on suoritettava tämä root-käyttäjänä\\n" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s: ei löytynyt" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Tuottaa grub-asetustiedoston ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Syntaksivirheita havaittu tuotettaessa GRUB-asetustiedostoa.\n" +"Varmista, että tiedostoissa /etc/default/grub ja /etc/grub.d/*\n" +"ei ole mitään virheitä tai tee vikailmoitus tiedosto %s\n" +"liitteenä." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "valmis" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Varoitus:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Käyttö: %s [VALITSIN] VALIKKORIVI\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Aseta käynnistyksen oletusvalikkorivi GRUB:lle, vain seuraavaa käynnistystä " +"varten." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"oleta GRUB-levykuvien olevan hakemiston HAKEMISTO/%s alla eikä %s-hakemiston" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENU_ENTRY on numero, valikkoriviotsikko tai valikkorivitunniste. Huomaa, " +"että valikkorivit\n" +"alivalikoissa tai alivalikkojen alivalikoissa vaativat " +"alivalikkokomponenttien määrittelemistä\n" +"ja sitten valikkorivikomponentin. Otsikot pitäisi erotella käyttäen suurempi " +"kuin -merkkiä (>)\n" +"ilman ylimääräisiä välilyöntejä. Käyttöjärjestelmän pääteikkunasta riippuen " +"jotkut merkit, joihin\n" +"sisältyy >, saattavat tarvita koodinvaihtomerkkejä. Lisätietoja tästä on " +"saatavilla GRUB-\n" +"käsikirjassa 'default'-komentoa käsittelevässä kappaleessa. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Useampi kuin yksi valikkorivi?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Valikkoriviä ei ole määritelty." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Aseta käynnistyksen oletusvalikkorivi GRUB:lle" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Tämä vaatii asetuksen GRUB_DEFAULT=saved tiedostossa %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "VALIKKORIVI on numero tai valikkoriviotsikko tai valikkorivitunniste." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Pyydettiin sarjapääteikkuna, mutta GRUB_SERIAL_COMMAND on määrittelemätön. " +"Käytetään oletusparametreja." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Teema löytyi: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Tausta löytyi: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Tukematon levykuvamuoto" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Ei tueta enää GRUB_TIMEOUT-arvon asettamista ei-nollaksi, kun " +"GRUB_HIDDEN_TIMEOUT on asetettu." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "GNU Mach löytyi: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Hurd-moduuli löytyi: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Löytyi jotain Hurd-materiaalia, mutta ei kylliksi käynnistykseen." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, jakeluversiolla Hurd %s (toipumistila)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, jakeluversiolla Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Älä käytä vanhaa otsikkoa ”%s” GRUB_DEFAULT-määrittelyksi, käytä " +"”%s” (versioille ennen 2.00) tai ”%s” (versiolla 2.00 ja myöhäisemmille)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Ladataan GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Ladataan Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Lisävalitsimet kohteelle ”%s”" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Ladataan Illumos-käyttöjärjestelmäydin ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, jakeluversiolla kFreeBSD %s (toipumistila)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, jakeluversiolla kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Ladataan FreeBSD %s käyttöjärjestelmäydin ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "FreeBSD-käyttöjärjestelmäydin löytyi: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Käyttöjärjestelmämoduulihakemisto löytyi: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, jakeluversiolla Linux %s (toipumistila)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, jakeluversiolla Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Ladataan Linux %s käyttöjärjestelmäydin ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Ladataan alustavaa ramlevyä ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Linux-levykuva löytyi: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Löytyi initrd-levykuva: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, jakeluversiolla ydin %s (%s-kautta, toipumistila)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, jakeluversiolla ydin %s (%s-kautta)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "NetBSD-käyttöjärjestelmäydin löytyi: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (-lataaja)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (-lataaja)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Löytyi %s kohteelta %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bittinen)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bittinen)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(kohteella %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, jakeluversioilla Xen %s ja Linux %s (toipumistila)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, jakeluversioilla Xen %s ja Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, jakeluversiolla Xen hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Ladataan Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hypervisor, versio %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Lisävalitsimet kohteelle %s (Xen hypervisor -jakeluversiolla)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Löytyi %s kohteella %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "grub-mkconfig ei vielä tue kohdetta %s.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Tukematon korvauslippu: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Tuntematon gsub-kirjasinominaisuus 0x%x (%s)\n" + +# PAE tarkoittaa ilmeisesti Physical Address Extension +#~ msgid "Check if FILE can be booted as i386 PAE xen unprivilegied guest" +#~ msgstr "" +#~ "Tarkista, että voidaanko TIEDOSTO alkuladata i386 PAE xen-" +#~ "etuoikeudettomana vieraana" + +#~ msgid "Check if FILE can be booted as x86_64 xen unprivilegied guest" +#~ msgstr "" +#~ "Tarkista, että voidaanko TIEDOSTO alkuladata x86_64 xen-etuoikeudettomana " +#~ "vieraana" + +#~ msgid "Check if FILE can be used as xen x86 privilegied guest kernel" +#~ msgstr "" +#~ "Tarkista, että voidaanko TIEDOSTO alkuladata xen x86-etuoikeudellisena " +#~ "vierasytimenä" + +#~ msgid "root directory of the syslinux disk (default /)." +#~ msgstr "syslinux-levyn juurihakemisto (oletus /)." + +#~ msgid "assume isolinux." +#~ msgstr "otaksu isolinux." + +#~ msgid "assume pxelinux." +#~ msgstr "otaksu pxelinux." + +#~ msgid "assume syslinux." +#~ msgstr "otaksu syslinux." + +#~ msgid "%s is neither hfs nor hfsplus" +#~ msgstr "%s ei ole hfs eikä hfsplus" + +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "" +#~ "kopioi GRUB-levykuvat kohteeseen net_directory/subdir/target_cpu-platform." + +#~ msgid "" +#~ "Generates a bootable rescue image with specified source files, source " +#~ "directories, or mkisofs options listed by the output of `%s'.\n" +#~ "\n" +#~ "Option -- switches to native xorriso command mode.\n" +#~ "\n" +#~ "Mail xorriso support requests to ." +#~ msgstr "" +#~ "Tuottaa alkuladattavan pelastuslevykuvan määrätyillä lähdetiedostoilla, " +#~ "lähdehakemistoilla, tai ”%s”-tulosteessa luetelluilla mkisofs-" +#~ "valitsimilla.\n" +#~ "\n" +#~ "Valitsin -- vaihtaa alkuperäiseen xorriso-komentotilaan.\n" +#~ "\n" +#~ "Lähetä xorriso-tukipyynnöt osoitteeseen ." + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "tulosta tiedostojärjestelmämoduuli, GRUB-levyasema, järjestelmälaite, " +#~ "osiokuvausmoduuli, abstraktiomoduuli tai salaussäiliön UUID [oletus=fs]" + +#~ msgid "current directory of the syslinux disk [default=$pwd]." +#~ msgstr "syslinux-levyn nykyinen hakemisto [oletus=$pwd]." + +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "käytä HAKEMISTO-hakemistoa juurihakemistona [oletus=/]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Osoitealue ei liity RAM-muistiin" + +#~ msgid "PUBKEY_FILE" +#~ msgstr "JULKISEN_AVAIMEN_TIEDOSTO" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign ei tueta järjestelmässäsi" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Jos TIEDOSTONIMI on ”-”, käytetään oletusarvo %s." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "tallenna vain ASCII-bittikartoissa" + +#~ msgid "create width summary file" +#~ msgstr "luo leveysyhteenvetotiedosto" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Valitsin --ascii-bitmaps ei hyväksy lukualueita (se käyttää aina ASCII:a)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "VAROITUS: satunnaislukugeneraattorisi on tunnetusti turvaton\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "ydinlevykuvan ensimmäisen sektorin lukeminen epäonnistui" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "käytä TIEDOSTOa grub-setup -asetuksena" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "käytä TIEDOSTOa grub-mkrelpath -kohteena" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "käytä TIEDOSTOa grub-probe -kohteena" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "INSTALL_DEVICE on oltava järjestelmälaitteen tiedostonimi." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "GRUB ei pysty lukemaan polkua ”%s” alkulatauksen yhteydessä. Asennus on " +#~ "mahdotonta. Keskeytetään.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Tiedostojärjestelmän %s automaattihavaitseminen epäonnistui.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Yritä valitsinta --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Jos pulma on pysyvä, ilmoita tästä yhdessä %s-tulosteen kanssa " +#~ "osoitteeseen <%s>." + +#~ msgid "`%s' failed.\\n" +#~ msgstr "”%s” epäonnistui.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "GRUB-levyaseman etsiminen kohteelle %s epäonnistui; ei kyetä luomaan EFI-" +#~ "alkulataushallintariviä.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Tuotetaan tiedosto grub.cfg ..." + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "käytä TIEDOSTOa grub-glue-efi -levykuvana" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "käytä TIEDOSTOa grub-render-label -kohteena" + +#~ msgid "Packed pixel " +#~ msgstr "Pakattu pikseli " + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "" +#~ "käytä GRB-levykuvia hakemistosta HAKEMISTO. Ottaa etusijan kohteen sijasta" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "" +#~ "Fyysisen taltion ”%s” löytäminen epäonnistui. Tarkista device.map-" +#~ "tiedostosi" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "Tallennusvälinetieto ”%s” ei sisällä nimeä" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "Tallennusvälinetiedon valenimipituus kohteelle ”%s”" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "Tallennusvälinenimi kohteelle ”%s” ei ole NUL-päätteinen" + +#~ msgid "diskboot.img is not one sector size" +#~ msgstr "diskboot.img ei ole yhden sektorin kokoinen" + +#~ msgid "loopback command fails" +#~ msgstr "takaisinkytkentäkomento epäonnistui" + +#~ msgid "cryptomount command fails: %s" +#~ msgstr "salauslaitteen liitäntäkomento epäonnistuu: %s" + +#~ msgid "%s: option requires an argument -- `%s'" +#~ msgstr "%s: valitsin vaatii argumentin -- ”%s”" + +#~ msgid "Legend: P=Packed pixel, D=Direct color, mask/pos=R/G/B/reserved" +#~ msgstr "" +#~ "Selite: P=Pakattu pikseli, D=Suora väri, peite/sijainti=R/G/B/reserved" + +#~ msgid "FIXME: no / in buf. (make_system_path_relative_to_its_root)" +#~ msgstr "" +#~ "KORJAA MINUT: numero / puskurissa. (make_system_path_relative_to_its_root)" + +#~ msgid "Make GRUB rescue image." +#~ msgstr "Tee GRUB-pelastuslevykuva." + +# Tässä on luultavasti typo sanassa "tablesv" +#~ msgid "Show v2 and v3 tablesv only." +#~ msgstr "Näytä vain v2- ja v3-taulut." + +#~ msgid "Unknown " +#~ msgstr "Tuntematon " + +#~ msgid "Map table size exceeded" +#~ msgstr "Kuvaustaulukoko ylitettiin" + +#~ msgid "Try `%s --help' for more information.\n" +#~ msgstr "Lisätietoja komennolla ”%s --help”.\n" + +#~ msgid "" +#~ "Usage: %s [OPTION]...\n" +#~ "\n" +#~ "GRUB emulator.\n" +#~ "\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=host]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory HAKEMISTO " +#~ "[default=%s]\n" +#~ " -v, --verbose print verbose messages\n" +#~ " -H, --hold[=SECONDS] wait until a debugger will attach\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Käyttö: %s [VALITSIN]...\n" +#~ "\n" +#~ "GRUB-emulaattori.\n" +#~ "\n" +#~ " -r, --root-device=DEV käytä DEV root-laitteena [oletus=tietokone]\n" +#~ " -m, --device-map=FILE käytä tiedostoa FILE laitekuvauksena [oletus=" +#~ "%s]\n" +#~ " -d, --directory=HAKEMISTO käytä GRUB-tiedostoja hakemistossa " +#~ "HAKEMISTO [oletus=%s]\n" +#~ " -v, --verbose tulosta sanomat laveasti\n" +#~ " -H, --hold[=SEKUNTIA] odota kunnes vikajäljitin liittyy\n" +#~ " -h, --help näytä tämä sanoma ja poistu\n" +#~ " -V, --version tulosta versiotiedot ja poistu\n" +#~ "\n" +#~ "Ilmoita vioista (englanniksi) osoitteeseen <%s>.\n" +#~ "Ilmoita käännösvirheistä osoitteeseen .\n" + +#~ msgid "" +#~ "%s is deprecated. Use set gfxpayload=text before linux command instead.\n" +#~ msgstr "" +#~ "%s on vanhentunut. Käytä sen sijaan ”set gfxpayload=text” ennen linux-" +#~ "komentoa.\n" + +#~ msgid "Transform a sytem filename into GRUB one." +#~ msgstr "Muunna järjestelmätiedostonimi GRUB-tiedostonimeksi." + +#~ msgid "Serial terminal not available on this platform." +#~ msgstr "Sarjapääteikkuna ei ole käytettävissä tällä alustalla." + +#~ msgid "Usage: %s [OPTION] install_device" +#~ msgstr "Käyttö: %s [VALITSIN] install_device" + +#~ msgid "Usage: %s [OPTION] [install_device]" +#~ msgstr "Käyttö: %s [VALITSIN] [install_device]" + +#~ msgid "the ID of bootloader." +#~ msgstr "alkulatauslataajatunniste." + +#~ msgid "" +#~ "UUID needed with ata mod, but the filesystem containing %s does not " +#~ "support UUIDs.\\n" +#~ msgstr "" +#~ "UUID tarvittu ata mod -tilassa, mutta tiedostojärjestelmä, joka sisältää " +#~ "kohteen %s, ei tue UUID-tunnisteita.\\n" + +#~ msgid "" +#~ "UUID needed with cross-disk installs, but the filesystem containing %s " +#~ "does not support UUIDs.\\n" +#~ msgstr "" +#~ "UUID tarvittu levyjen välisiin asennuksiin, mutta tiedostojärjestelmä, " +#~ "joka sisältää kohteen %s, ei tue UUID-tunnisteita.\\n" + +#~ msgid "No font for video terminal found." +#~ msgstr "Kirjasimia videopääteikkunaan ei löytynyt." + +#~ msgid "Usage: %s [OPTION] install_device\\n" +#~ msgstr "Käyttö: %s [VALITSIN} install_device\\n" + +#~ msgid "Usage: %s [OPTION] entry\\n" +#~ msgstr "Käyttö: %s [VALITSIN] rivi\\n" + +#~ msgid "Expose v1 tables." +#~ msgstr "Paljasta v1-taulut." + +#~ msgid "Fake BIOS." +#~ msgstr "Vale-BIOS." + +#~ msgid "Check hash list file." +#~ msgstr "Tarkista hajakoodausluettelotiedosto." + +#~ msgid "DIRECTORY" +#~ msgstr "HAKEMISTO" + +#~ msgid "Unload PXE environment." +#~ msgstr "Pura PXE-ympäristö." + +#~ msgid "Read word from PORT." +#~ msgstr "Lue word-data portista PORTTI." + +#~ msgid "Read dword from PORT." +#~ msgstr "Lue dword-data portista PORTTI." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "Kirjoita word-ARVO porttiin PORTTI." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "kirjoita dword-ARVO porttiin PORTTI." + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "Read word from ADDR." +#~ msgstr "Lue word-data OSOITTEESTA" + +#~ msgid "Read dword from ADDR." +#~ msgstr "Lue dword-data OSOITTEESTA." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "Kirjoita word-data ARVO OSOITTEESEEN." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "kirjoita dword-data ARVO OSOITTEESEEN." + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Valikkorivimäärittely merkkijonona." + +#~ msgid "[DEVICE]" +#~ msgstr "[LAITE]" + +#~ msgid "Variable names to update with matches." +#~ msgstr "Täsmäyksillä päivitettävät muuttujanimet." + +#~ msgid "Authenticate users" +#~ msgstr "Todenna käyttäjät" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 visuaalinen" + +#~ msgid "write error" +#~ msgstr "kirjoitusvirhe" + +#~ msgid "open error" +#~ msgstr "avausvirhe" + +#~ msgid "seek error" +#~ msgstr "hakuvirhe" + +#~ msgid "Hex dump FILE." +#~ msgstr "Heksadesimaalivedos TIEDOSTO." + +#~ msgid "Must use absolute path.\n" +#~ msgstr "On käytettävä absoluuttista polkua.\n" + +#~ msgid "the core image is too small" +#~ msgstr "ydinlevykuva on liian pieni" + +#~ msgid "prefix is too long" +#~ msgstr "etuliite on liian pitkä" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Käyttö: %s [VALITSIN]... [MODUULIT]\n" +#~ "\n" +#~ "Tee alkuladattava GRUB-levykuva.\n" +#~ "\n" +#~ " -d, --directory=HAKEMISTO käytä levykuvia ja moduuleja hakemiston " +#~ "HAKEMISTO alla [oletus=%s/@platform@]\n" +#~ " -p, --prefix=HAKEMISTO aseta grub_prefix-hakemisto [oletus=%s]\n" +#~ " -m, --memdisk=TIEDOSTO upota TIEDOSTO memdisk-levykuvana\n" +#~ " -c, --config=TIEDOSTO upota TIEDOSTO alkulatausasetuksena\n" +#~ " -n, --note lisää NOTE-segmentti CHRP-avoimelle mikro-" +#~ "ohjelmistolle\n" +#~ " -o, --output=TIEDOSTO tulosta tuotettu levykuva TIEDOSTOon " +#~ "[oletus=vakiotuloste]\n" +#~ " -O, --format=MUOTO tuota levykuva muodossa\n" +#~ " käytettävissä olevat muodot: %s\n" +#~ " -C, --compression=(xz|none|auto) valitse käytettävä tiivistys\n" +#~ " -h, --help näytä tämä viesti ja poistu\n" +#~ " -V, --version tulosta versiotiedot ja poistu\n" +#~ " -v, --verbose tulosta viestit laveasti\n" +#~ "\n" +#~ "Ilmoita virheistä (englanniksi) osoitteeseen <%s>.\n" +#~ "Ilmoita käännösvirheistä osoitteeseen \n" + +#~ msgid "(N/A)" +#~ msgstr "(-/-)" diff --git a/po/fr.gmo b/po/fr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..99e7c1bd4725636d42c36b22c33660524ce2c4f8 GIT binary patch literal 134517 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 literal 0 HcmV?d00001 diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 000000000..7f42ddc53 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,7129 @@ +# translation of grub to French. +# Copyright (C) 2010, 2012, 2013, 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# Nicolas Provost , 2011. +# David Prévot , 2012-2014. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2014-01-22 16:10-0400\n" +"Last-Translator: David Prévot \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "vitesse de port série non valable" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "parité de port série non valable" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "nombre de bits d'arrêt du port série non valable" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "taille de trame du port série non valable" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Ne pas charger les tables d'hôte indiquées dans la liste, séparées par des " +"virgules." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" +"Ne charger que les tables indiquées dans la liste, séparées par des virgules." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Exporter les tables en version 1 vers le système d'exploitation." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "" +"Exporter les tables en version 2 et version 3 vers le système d'exploitation." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Définir l'OEMID de RSDP, XSDT et RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Définir l'identifiant OEMTABLE de RSDP, XSDT et RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Définir la révision OEMTABLE de RSDP, XSDT et RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Définir l'identifiant du fabriquant de RSDP, XSDT et RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Définir la révision du fabriquant de RSDP, XSDT et RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Ne pas mettre à jour l'EBDA. Cela peut corriger des dysfonctionnements sur " +"certains BIOS, mais est souvent inefficace si le système d'exploitation ne " +"reçoit pas de RSDP du GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "fin prématurée du fichier %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FICHIER1 " +"[FICHIER2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Charger les tables ACPI de l'hôte et les tables indiquées par les arguments." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "erreur : %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "mémoire épuisée" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "impossible de lire « %s » : %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Échec d'arrêt avec l'ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Afficher les périphériques." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "nom de fichier attendu" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FICHIER" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Afficher une liste de blocs." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "le noyau doit d'abord être chargé" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Démarrer un système d'exploitation." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Aucune statistique de temps de démarrage n'est disponible\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Afficher les statistiques de temps de démarrage." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statistiques de cache du disque : atteints = %lu (%lu.%02lu%%), ratés = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Aucune statistique de cache du disque disponible\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Obtenir les renseignements de cache du disque." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Accepter les fins de ligne de type DOS RC/PAL." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Afficher le contenu d'un fichier." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "deux arguments attendus" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Comparer le fichier « %s » par rapport à « %s » :\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Les fichiers sont de tailles différentes : %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" +"Les fichiers sont différents à la position %llu : 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Les fichiers sont identiques.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FICHIER1 FICHIER2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Comparer deux fichiers." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Charger un autre fichier de configuration." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Charger un autre fichier de configuration sans modifier le contexte." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Charger un autre fichier de configuration sans modifier le contexte, mais ne " +"prendre que les entrées de menu." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "" +"Charger un autre fichier de configuration, mais ne prendre que les entrées " +"de menu." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[année-]mois-jour] [heure:minute[:seconde]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Afficher ou définir la date et l'heure actuelle." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Ne pas afficher le changement de ligne final." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "" +"Activer l'interprétation des séquences d'échappement par barre oblique " +"inversée." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] CHAÎNE" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Afficher une ligne de texte." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" +"Redémarrer dans le menu de configuration de microprogramme (« firmware »)." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Corriger un problème vidéo." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Une image ROM est présente." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Impossible d'activer la zone de ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Créer des structures de type BIOS pour compatibilité ascendante avec le " +"système d'exploitation existant." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "COPIE_BIOS [COPIE_INT10]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Charger la copie du BIOS." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "CHAÎNE ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Évaluer les arguments comme des commandes GRUB" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Vérifier si FICHIER peut être démarré comme un noyau de client Xen PAE i386 " +"sans droit" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Vérifier si FICHIER peut être démarré comme un noyau de client Xen PAE " +"x86_64 sans droit" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Vérifier si FICHIER peut être utilisé comme un noyau de client Xen x86 avec " +"droits" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Vérifier si FICHIER peut être utilisé comme un noyau Multiboot x86" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Vérifier si FICHIER peut être utilisé comme un noyau Multiboot 2 x86" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Vérifier si FICHIER est un Linux ARM" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Vérifier si FICHIER est un Linux ARM64" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Vérifier si FICHIER est un Linux IA-64" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Vérifier si FICHIER est un Linux MIPS" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Vérifier si FICHIER est un Linux MIPSEL" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Vérifier si FICHIER est un Linux SPARC-64" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Vérifier si FICHIER est un Linux PowerPC" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Vérifier si FICHIER est un Linux x86" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Vérifier si FICHIER est un Linux x86 acceptant le protocole 32 bits" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Vérifier si FICHIER est un kFreeBSD x86" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Vérifier si FICHIER est un kFreeBSD i386" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Vérifier si FICHIER est un kFreeBSD x86_64" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Vérifier si FICHIER est un kNetBSD x86" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Vérifier si FICHIER est un kNetBSD i386" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Vérifier si FICHIER est un kNetBSD x86_64" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Vérifier si FICHIER est un fichier EFI i386" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Vérifier si FICHIER est un fichier EFI x86_64" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Vérifier si FICHIER est un fichier EFI IA-64" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Vérifier si FICHIER est un fichier EFI ARM64" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Vérifier si FICHIER est un fichier EFI ARM" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Vérifier si FICHIER est hiberfil.sys en état d’hibernation" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Vérifier si FICHIER est un XNU x86_64 (noyau de Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Vérifier si FICHIER est un XNU i386 (noyau de Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Vérifier si FICHIER est une image XNU (noyau de Mac OS X) d’hibernation" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Vérifier si FICHIER est un secteur d’amorçage BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "faux" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPTIONS FICHIER" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Vérifier si FICHIER est du type indiqué." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "cette partition n'existe pas" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Le nouveau secteur d'amorçage principal (MBR) est écrit sur « %s »\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "PÉRIPHÉRIQUE [PARTITION[+/-[TYPE]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Remplir le secteur d'amorçage principal (MBR) hybride du disque GPT " +"PÉRIPHÉRIQUE. Les partitions indiquées feront partie du secteur d'amorçage " +"principal hybride. Jusqu'à trois partitions sont permises. TYPE est un type " +"de secteur d'amorçage principal. + signifie que la partition est active. Une " +"seule partition peut être active." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Arrête l'ordinateur. Cette commande ne fonctionne pas avec toutes les " +"implémentations de microprogramme (« firmware »)." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Indiquer le hachage à utiliser." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HACHAGE" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" +"Comparer les hachages de fichiers avec le FICHIER de liste de hachages." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Répertoire de base pour la liste des hachages." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "RÉP" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Ne pas s'arrêter après la première erreur." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Décompresser le fichier avant de calculer la somme de contrôle." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s : erreur de lecture\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s : hachage non correspondant\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s : succès\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HACHAGE [-c FICHIER [-p PRÉFIXE]] [FICHIER1 [FICHIER2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Calculer ou vérifier la somme de contrôle du hachage." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FICHIER [-p PRÉFIXE]] [FICHIER1 [FICHIER2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Définir la gestion étendue de l'alimentation (APM)\n" +"(1=basse, ..., 254=haute, 255=arrêt)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Afficher le mode d'alimentation." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Figer les paramètres de sécurité ATA jusqu'au redémarrage." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Afficher l'état de santé d'après SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Définir la gestion acoustique automatique (AAM)\n" +"(0=arrêt, 128=silencieux, ..., 254=rapide)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Définir le délai de veille\n" +"(0=off, 1=5 s, 2=10 s, ..., 240=20 min, 241=30 min, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Placer le lecteur en mode veille." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Placer le lecteur en mode sommeil." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Afficher les paramètres et l'identité du disque." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Afficher le contenu brut du secteur ATA IDENTIFY." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Désactiver ou activer SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Ne pas afficher les messages." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "un argument attendu" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIONS] DISQUE" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Obtenir ou définir les paramètres ATA du disque." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Utilisation :" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MOTIF ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Afficher un message d'aide." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Sauter plusieurs octets au début du fichier." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Lire seulement LONGUEUR octets." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIONS] FICHIER_OU_PERIPH" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Afficher le contenu brut d'un fichier ou de la mémoire." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Afficher la copie brute du contenu du CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "OCTET:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Tester le bit à OCTET:BIT du CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Désactiver le bit à OCTET:BIT du CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Activer le bit à OCTET:BIT du CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Afficher les statistiques de temps de démarrage de coreboot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Afficher les tables de coreboot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Vérifier si le processeur accepte le mode 64 bits (long, option par défaut)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Vérifier si le processeur accepte l’extension d’adresses physiques (PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Tester les capacités du processeur." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Afficher les correspondances actuelles." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Réinitialiser toutes les correspondances aux valeurs par défaut." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Activer les correspondances dans les deux sens (directe et inverse)." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Aucune correspondance de disque n'a été refaite." + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" +"disque nº num du système d'exploitation ------> périphérique GRUB ou BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] périph_grub dique_se." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Gérer les correspondances de disques BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Ne pas utiliser l'APM pour arrêter l'ordinateur." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Arrêter le système, si possible avec l'APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "pas d'APM disponible" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Version %u.%u\n" +"CS 32 bits = 0x%x, longueur = 0x%x, position = 0x%x\n" +"CS 16 bits = 0x%x, longueur = 0x%x\n" +"DS = 0x%x, longueur = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Interface 16 bits protégée prise en charge\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Interface 16 bits protégée non prise en charge\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Interface 32 bits protégée prise en charge\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Interface 32 bits protégée non prise en charge\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "La veille ralentit le processeur\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "La veille ne ralentit pas le processeur\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM désactivée\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM activée\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM débrayée\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM embrayée\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Afficher les renseignements d'APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "nom de fichier ou mesure et notes attendus" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Commande %s incorrecte.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "fichier « %s » non disponible" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "nombre non reconnu" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FICHIER | MESURE [DEGRÉ1 DURÉE1] [DEGRÉ2 DURÉE2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Émettre un son." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "définir le mode de verrouillage numérique" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "définir le mode de verrouillage majuscule" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "définir le mode de verrouillage défilement" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "définir le mode d'insertion" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "définir le mode de pause" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "appuyez sur la touche majuscule gauche" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "appuyez sur la touche majuscule droite" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "appuyez sur la touche Syst" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "appuyez sur la touche Verr Num" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "appuyez sur la touche de verrouillage majuscule" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "appuyez sur la touche Arrêt défil" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "appuyez sur la touche d'insertion" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "appuyez sur la touche Alt gauche" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "appuyez sur la touche Alt droite" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "appuyez sur la touche Ctrl gauche" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "appuyez sur la touche Ctrl droite" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "ne pas mettre à jour l'état de la DEL" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[SEQ_FRAPPE1] [SEQ_FRAPPE2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Émuler une séquence de frappe" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Exécuter « go » pour revenir à GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Retourner à l'invite IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Sauver la valeur lue dans la variable NOM_VAR." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "NOM_VAR" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Lire la valeur 8 bits du PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Lire la valeur 16 bits du PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Lire la valeur 32 bits du PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VALEUR [MASQUE]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Écrire la VALEUR 8 bits sur PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Écrire la VALEUR 16 bits sur PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADRESSE VALEUR [MASQUE]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Écrire la VALEUR 32 bits sur PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "la variable « %s » n'est pas définie" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Charger une disposition de clavier." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Vérifier l'état de la touche majuscule." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Vérifier l'état de la touche Ctrl." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Vérifier l'état de la touche Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Vérifier l'état des touches spéciales (Maj, Alt, Ctrl)." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "impossible de trouver la commande « %s »" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Entrez le mot de passe : " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Analyser l'ancienne configuration dans le même contexte" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Analyser l'ancienne configuration dans le nouveau contexte" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Analyser l'ancienne configuration dans le même contexte en ne prenant que " +"les entrées de menu" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Analyser l'ancienne configuration dans le nouveau contexte en ne prenant que " +"les entrées de menu" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FICHIER [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simuler la commande « kernel » de l'ancien GRUB" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FICHIER [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simuler la commande « initrd » de l'ancien GRUB" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simuler la commande « modulenounzip » de l'ancien GRUB" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] MOT_DE_PASSE [FICHIER]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simuler la commande « password » de l'ancien GRUB" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" +"Simuler la commande « password » de l'ancien GRUB en mode d'entrée de menu" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Indiquer le nom de fichier." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Sauter la vérification de signature du fichier d’environnement." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FICHIER] [-s|--skip-sig] [nom_de_variable_à_autoriser] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Charger les variables depuis un fichier de bloc d'environnement." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FICHIER]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Afficher les variables depuis un fichier de bloc d'environnement." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FICHIER] nom_de_variable [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Sauver les variables dans un fichier de bloc d'environnement." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Afficher une longue liste de renseignements plus détaillées." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Afficher les tailles au format lisible par un humain." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Afficher tous les fichiers." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Protocoles réseau :" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FICHIER ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Afficher les périphériques et fichiers." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "N'afficher que les tables en version 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "N'afficher que les tables en version 2 et version 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Afficher les renseignements d'ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM disponible" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM réservée" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM de l'ACPI récupérable" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "RAM de stockage non volatile de l'ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM défectueuse (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM contenant les tables de coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM contenant le code de microprogramme (« firmware »)" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "adr_base = 0x%llx, longueur = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "adr_base = 0x%llx, longueur = 0x%llx, type = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "" +"Afficher la carte de mémoire transmise par le microprogramme (« firmware »)." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Afficher les périphériques PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Rendre FICHIER de partition HFS ou HFS+ amorçable pour les Mac Intel." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Rendre RÉP de partition HFS ou HFS+ amorçable pour les Mac PowerPC." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADRESSE" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Lire la valeur 8 bits d'ADRESSE." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Lire la valeur 16 bits d'ADRESSE." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Lire la valeur 32 bits d'ADRESSE." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Écrire la VALEUR 8 bits sur ADRESSE." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Écrire la VALEUR 16 bits sur ADRESSE." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Écrire la VALEUR 32 bits sur ADRESSE." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Type d'entrée de menu." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "CHAÎNE" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Liste d'utilisateurs autorisés à démarrer cette entrée." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "UTILISATEUR[,UTILISATEUR]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Touche clavier pour démarrer rapidement cette entrée." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TOUCHE_CLAVIER" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Utiliser CHAÎNE comme corps d'entrée de menu." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identifiant d'entrée de menu." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Cette entrée peut être démarrée par n'importe quel utilisateur." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOC" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Définir une entrée de menu." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Définir un sous-menu." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nom\tNombre Réf.\tDépendances\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Afficher ce message." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADRESSE [TAILLE]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Afficher le contenu de la mémoire." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULE" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Retirer un module." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Afficher les modules chargés." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Quitter GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Pas de CS5536 disponible" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 à %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "L'espace d'E/S du contrôleur de bus du système de gestion est à 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Connecteur de RAM numéro %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Octets SPD écrits : %d o.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Taille flash totale : %d o.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Type de mémoire : DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Numéro de modèle : %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Type de mémoire : inconnu." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Afficher les renseignements sur la mémoire." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s ne prend pas en charge les UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODULE1 MODULE2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Basculer vers les pilotes natifs de disque. Si aucun module n'est indiqué, " +"l'ensemble par défaut (pata,ahci,usbms,ohci,uhci,ehci) est utilisé" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Exécuter les COMMANDES sur une partition.\n" +"Utiliser « parttool PARTITION help » pour obtenir la liste des commandes " +"disponibles." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Désolé, aucun parttool n'est disponible pour %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "argument « %s » inconnu" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITION COMMANDES" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "UTILISATEUR MOTDEPASSE" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Définir le mot de passe utilisateur (texte en clair). Non recommandé et non " +"sécurisé." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "mot de passe PBKDF2 non conforme" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "UTILISATEUR MOTDEPASSE_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Définir un mot de passe utilisateur (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" +"Sélectionner le périphérique par identifiants de constructeur et de " +"périphérique." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[constructeur]:[périphérique]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Sélectionner le périphérique en fonction de sa position sur le bus." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[connecteur][.fonc]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "symbole « %c » manquant" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSITION] [-d PÉRIPHÉRIQUE]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Afficher la copie brute de l'espace de configuration PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Définir une variable pour renvoyer la valeur." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Déterminer le pilote utilisé." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Déterminer le type de plan de partition." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Déterminer le type de système de fichiers." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Déterminer l'UUID du système de fichiers." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Déterminer l'étiquette du système de fichiers." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "le système de fichier « %s » ne prend pas en charge les étiquettes" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "PÉRIPHÉRIQUE" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Récupérer les renseignements du périphérique." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[VAR_ENV]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Définir la variable avec la saisie de l'utilisateur." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Redémarrer l'ordinateur." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Sauver le composant NOMBRE correspondant dans NOM_VAR." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NOMBRE:]NOM_VAR" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "EXPR_RAT CHAÎNE" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Tester si l'expression rationnelle EXPR_RAT correspond à CHAÎNE." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NOM [VARIABLE] [CONSEILS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Chercher des périphériques par fichier. Si VARIABLE est indiquée, le premier " +"périphérique trouvé est enregistré dans une variable." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Chercher des périphériques par étiquette. Si VARIABLE est indiquée, le " +"premier périphérique trouvé est enregistré dans une variable." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Chercher des périphériques par UUID. Si VARIABLE est indiquée, le premier " +"périphérique trouvé est enregistré dans une variable." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Chercher les périphériques par fichier." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Chercher les périphériques par étiquette de système de fichiers." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Chercher les périphériques par UUID de système de fichiers." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Définir une variable au premier périphérique trouvé." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "N'examiner aucun lecteur de disquettes." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Essayer d'abord le CONSEIL (« hint ») de périphérique. Si CONSEIL se finit " +"par une virgule, essayer aussi les sous-partitions." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "CONSEIL" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Essayer d'abord le CONSEIL (« hint ») de périphérique si exécuté sur une " +"plate-forme IEEE1275. Si CONSEIL se finit par une virgule, essayer aussi les " +"sous-partitions." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Essayer d'abord le CONSEIL (« hint ») de périphérique si exécuté sur une " +"plate-forme BIOS. Si CONSEIL se finit par une virgule, essayer aussi les " +"sous-partitions." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Essayer d'abord le CONSEIL (« hint ») de périphérique seulement si exécuté " +"sur une plate-forme permettant un accès matériel direct. Si CONSEIL se finit " +"par une virgule, essayer aussi les sous-partitions." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Essayer d'abord le CONSEIL (« hint ») de périphérique seulement si exécuté " +"sur une plate-forme EFI. Si CONSEIL se finit par une virgule, essayer aussi " +"les sous-partitions." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Essayer d'abord le CONSEIL (« hint ») de périphérique seulement si exécuté " +"sur une plate-forme ARC. Si CONSEIL se finit par une virgule, essayer aussi " +"les sous-partitions." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint CONSEIL [--hint CONSEIL] ...] NOM" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Chercher des périphériques par nom de fichier, étiquette ou UUID de système " +"de fichiers. Si --set est indiqué, le premier périphérique trouvé est " +"enregistré dans une variable. Si aucun nom de variable n'est indiqué, " +"« root » est utilisé." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Registre %x de %x:%02x.%x est %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d PÉRIPHÉRIQUE] [-v VAR] REGISTRE[=VALEUR[:MASQUE]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipuler les périphériques PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Décompte détaillé." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Permettre l'interruption avec Échap." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NOMBRE_DE_SECONDES" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Attendre le temps indiqué en seconde." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "répertoire racine du disque syslinux [/ par défaut]" + +# NOTE: s/the // +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +#, fuzzy +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"répertoire actuel de syslinux [répertoire parent du fichier d’entrée par " +"défaut]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "l’entrée est supposée être un fichier de configuration d’isolinux." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "l’entrée est supposée être un fichier de configuration de pxelinux." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "l’entrée est supposée être un fichier de configuration de syslinux." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Exécuter la configuration de syslinux dans le même contexte" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Exécuter la configuration de syslinux dans le nouveau contexte" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Exécuter la configuration de syslinux dans le même contexte en ne prenant " +"que les entrées de menu" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Exécuter la configuration de syslinux dans le nouveau contexte en ne prenant " +"que les entrées de menu" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "aucun terminal indiqué" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminal « %s » non disponible" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Terminaux actifs en entrée :" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Terminaux disponibles en entrée :" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Terminaux actifs en sortie :" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Terminaux disponibles en sortie :" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Afficher ou sélectionner un terminal d'entrée." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Afficher ou sélectionner un terminal de sortie." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESSION ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Évaluer une expression." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESSION" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Charger le même fichier de différentes façons." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Indiquer la taille pour toutes les opérations de lecture" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "taille de bloc incorrecte" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Taille de fichier : %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Temps écoulé : %d,%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Vitesse : %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s TAILLE] FICHIER" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Tester la vitesse de lecture du fichier." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "aucune commande n'est indiquée" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Temps écoulé : %d,%03d secondes \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "COMMANDE [ARGUMENTS]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Mesurer le temps utilisé par COMMANDE" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Convertir en majuscule." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Convertir en minuscule." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPTIONS] [ENSEMBLE1] [ENSEMBLE2] [CHAÎNE]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Convertir les caractères d’ENSEMBLE1 vers ENSEMBLE2 dans CHAÎNE." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Ne rien faire, avec succès." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Ne rien faire, avec échec." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Tester la prise en charge de l'USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Sauter la vérification de signature du fichier de clef publique." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "mauvaise signature" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "clef publique %08x non disponible" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "le module « %s » n'est pas chargé" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FICHIER FICHIER_SIGNATURE [FICHIER_CLEF_PUBLIQUE]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Vérifier la signature détachée." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] FICHIER_CLEF_PUBLIQUE" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Ajouter FICHIER_CLEF_PUBLIQUE aux clefs de confiance." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Afficher la liste des clefs de confiance." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "IDENTIFIANT_CLEF_PUBLIQUE" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Supprimer IDENTIFIANT_CLEF_PUBLIQUE des clefs de confiance." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Texte seul " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Couleur directe, masque : %d/%d/%d/%d position : %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Palette de couleurs " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Par plan " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monochrome " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Mode vidéo inconnu " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " Somme de contrôle EDID incorrecte" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " Version d'EDID : %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Mode préféré : %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Pas de mode préféré disponible\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "spécification « %s » de mode vidéo incorrecte" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Liste des mode vidéo possibles :" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Légende : masque/position=rouge/vert/bleu/réservé" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adaptateur « %s » :\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Aucun renseignement disponible" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Échec d'initialisation de l'adaptateur vidéo" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[LARGxHAUT[xPROF]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Afficher les modes vidéo. Si une résolution est donnée, n'afficher que les " +"modes correspondants." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[LARGxHAUT]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Tester le sous-système vidéo en mode LARG×HAUT." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Tester le sous-système vidéo." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[RÉP]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Afficher le stockage Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] UUIDGRUB [NOM_VAR]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transformer un UUID 64 bits au format convenable pour XNU. Si -l est donnée, " +"le garder en minuscule comme avec blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "échec de lecture du secteur 0x%llx de « %s »" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "échec d'écriture du secteur 0x%llx sur « %s »" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Monter par UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Tous les monter." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Monter tous les volumes avec l'attribut d'amorçage (« boot ») défini." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "impossible d'ouvrir « %s » : %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "impossible de parcourir « %s » : %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "SOURCE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Monter un périphérique chiffré." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Impossible de trouver le volume physique « %s ». Certains modules risquent " +"de manquer dans l'image de base." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "volume physique %s non disponible" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "délai dépassé lors de la lecture de « %s »" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Impossible de charger sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Impossible de charger sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "impossible de lire les métadonnées ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "mauvaise version ou numéro magique ELI" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Tentative de déchiffrement de la clef principale…" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Entrez le mot de passe pour %s%s%s (%s) : " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Emplacement de clef %d ouvert\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "tentative de lecture ou d'écriture en dehors du disque « %s »" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "impossible d'écrire sur le CD" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Utilisation des pilotes natifs du disque. Refus d'utiliser l'interface " +"disque du microprogramme (« firmware »)." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"la partition LDM d'embarquage est trop petite ; l'embarquage ne sera pas " +"possible" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"ce LDM n'a pas de partition d'embarquage ; l'embarquage ne sera pas possible" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Supprimer le périphérique boucle indiqué." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] NOM_PÉRIPH FICHIER." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Faire un disque virtuel à partir d'un fichier." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "la délocalisation 0x%x n'est pas encore implémentée" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "aucune table de symbole" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "ce fichier ELF n'est pas du type adéquat" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Charger et initialiser l'émulateur EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Terminer le chargement de l'émulateur EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Décharger l'émulateur EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "symbole « %s » non disponible" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Polices chargées :" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FICHIER ..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Indiquer un ou plusieurs fichiers de police à charger." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Afficher les polices chargées." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "trop de niveaux de liens symboliques" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "tentative de lecture après la fin du fichier" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"impossible de trouver un périphérique membre nécessaire d'un système de " +"fichiers multipériphérique" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "pas un répertoire" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "pas un fichier normal" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"core.img est exceptionnellement grand. Il ne tiendra pas dans la zone " +"d'embarquage" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "nom de fichier « %s » incorrect" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "échec de vérification de somme de contrôle" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "pas de clef de déchiffrement disponible" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "échec de vérification de MAC" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Entrée supposée brute." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Entrée supposée hexadécimale." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Mot de passe supposé en entrée." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Entrez le mot de passe ZFS : " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FICHIER]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importer la clef de chiffrement ZFS stockée dans FICHIER." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Le périphérique virtuel est retiré" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Le périphérique virtuel est en défaut" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Le périphérique virtuel est hors ligne" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Le périphérique virtuel est dégradé" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Le périphérique virtuel est en ligne" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Périphérique virtuel incorrect : pas de type disponible" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Périphérique virtuel feuille (fichier ou disque)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Chemin d'amorçage : indisponible\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Chemin d'amorçage : %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Chemin : indisponible" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Chemin : %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Identifiant de périphérique : indisponible" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Identifiant de périphérique : %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Ce VDEV est un miroir" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Ce VDEV est un RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "VDEV incorrect" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV avec %d enfants\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "L'élément %d du VDEV n'est pas correct\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Élément %d du VDEV :\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Type de périphérique virtuel inconnu : %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "État du pool : actif" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "État du pool : exporté" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "État du pool : détruit" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "État du pool : réservé pour échange à chaud" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "État du pool : périphérique ARC niveau 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "État du pool : non initialisé" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "État du pool : indisponible" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "État du pool : potentiellement actif" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Nom du pool : indisponible" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Nom du pool : %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID du pool : indisponible" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID du pool : %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Impossible de récupérer l'état du pool" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "État du pool non reconnu" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Pas d'arborescence de périphériques virtuels disponible" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Afficher les renseignements ZFS à propos de PÉRIPHÉRIQUE." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "SYS_FIC [VARIABLE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Afficher ZFS-BOOTFSOBJ ou la sauver dans VARIABLE" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Veuillez connecter le débogueur distant maintenant." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Démarrer la session GDB sur le port indiqué." + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Pause dans GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Arrêter la session GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "fin prématurée de fichier" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Traduit la chaîne en fonction de la configuration actuelle." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Appuyez sur Entrée pour démarrer le système sélectionné, « e » pour éditer " +"les commandes avant de démarrer ou « c » pour obtenir une invite de " +"commandes. Échap pour revenir au menu précédent." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Appuyez sur Entrée pour démarrer le système sélectionné, « e » pour éditer " +"les commandes avant de démarrer ou « c » pour obtenir une invite de " +"commandes." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "Entrée : démarrage, « e » : option, « c » : invite de commandes" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "L'entrée sélectionnée sera exécutée automatiquement dans %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "Plus que %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d s" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Menu de démarrage GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "FMT_AIDE_ARGP : la valeur %s est inférieure ou égale à %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s : le paramètre FMT_AIDE_ARGP nécessite une valeur" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s : le paramètre FMT_AIDE_ARGP doit être strictement positif" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s : paramètre FMT_AIDE_ARGP inconnu" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Rien d'utilisable dans FMT_AIDE_ARGP : %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Les arguments obligatoires ou facultatifs des options longues sont aussi " +"obligatoires ou facultatifs pour les options courtes correspondantes." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ou : " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPTION ...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Utilisez « %s --help » ou « %s --usage » pour obtenir de plus amples " +"renseignements.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Signaler les bogues à %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Erreur système inconnue" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "afficher cette liste d'aide" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "afficher un court message d'utilisation" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NOM" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "définir le nom du programme" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEC" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "suspendre pendant SEC secondes (3600 par défaut)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "afficher la version du programme" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(Erreur du programme) version inconnue." + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s : trop d'arguments\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(Erreur du programme) l'option aurait due être reconnue." + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s : l'option « %s » est ambiguë ; possibilités :" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s : l'option « --%s » n'accepte pas d'argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s : l'option « %c%s » n'accepte pas d'argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s : l'option « --%s » nécessite un argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s : option « --%s » non reconnue\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s : option « %c%s » non reconnue\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s : option incorrecte — « %c »\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s : l'option nécessite un argument — « %c »\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s : l'option « -W %s » est ambiguë\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s : l'option « -W %s » n'accepte pas d'argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s : l'option « -W %s » nécessite un argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Réussite" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Pas de correspondance" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expression rationnelle incorrecte" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Caractère de collation incorrect" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nom de classe de caractères incorrect" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barre oblique finale" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Référence arrière incorrecte" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ ou [^ sans correspondance" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( sans correspondance" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ sans correspondance" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contenu de \\{\\} incorrect" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Fin d'intervalle incorrecte" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Mémoire épuisée" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Expression rationnelle précédente incorrecte" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fin prématurée d'expression rationnelle" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expression rationnelle trop grosse" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) sans correspondance" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "Erreur d'expression rationnelle inconnue" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Pas d'expression rationnelle précédente" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Bonjour à tous" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Dire « Bonjour à tous »." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "tentative de recherche en dehors du fichier" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "format gzip non pris en charge" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "fichier lzop corrompu" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "fichier XZ corrompu ou options de bloc non prises en charge" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "numéro magique ELF dépendant de l'architecture incorrect" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[VAR_ENV=VALEUR]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Définir une variable d'environnement." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "VAR_ENV" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Retirer une variable d'environnement." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Afficher les périphériques ou fichiers." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Charger un module." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disque « %s » non disponible" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "tentative de lecture ou d'écriture en dehors de la partition" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "numéro magique ELF indépendant de l'architecture incorrect" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "le nombre de périphériques dépasse la limite" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "impossible d'écrire sur « %s » : %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"L'entrée « %s » de device.map est incorrecte. Elle est ignorée. Veuillez " +"corriger ou supprimer device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"Le nom de périphérique « %s » dans device.map est incorrect. Utilisation de " +"%s à la place. Veuillez utiliser le format [hfc]d[0-9]* (par exemple « hd0 » " +"ou « cd »)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "impossible d'ouvrir « %s » : %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NOM_PÉRIPH" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Définir le périphérique racine." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "utiliser FICHIER comme carte de périphériques [%s par défaut]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +#, fuzzy +msgid "use FILE as memdisk" +msgstr "embarquer FICHIER comme une image de disque mémoire" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "utiliser les fichiers GRUB dans le répertoire RÉP [%s par défaut]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "afficher les messages bavards." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "attendre qu'un débogueur soit attaché" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Argument facultatif « %s » inconnu." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Émulateur GRUB" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Erreur d'analyse des arguments de la ligne de commandes\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Exécutez « gdb %s %d », et configurez ARGS.HOLD à zéro.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s : attention :" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s : information :" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s : erreur :" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "le fichier « %s » est trop grand" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "système de fichiers inconnu" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Échec d'arrêt" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Échec de sortie" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "un dépassement est détectée" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Abandon de partition imbriquée de façon incorrecte (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Commande « %s » inconnue.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Afficher cette aide et quitter." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Afficher l'aide de cette commande et quitter." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "option obligatoire pour « %s » manquante" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "l'argument « %s » nécessite un entier" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"une valeur a été affectée à l'argument « %s » alors qu'il n'a pas besoin " +"d'argument" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Afficher la pile d'appel." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB ne sait pas encore comment arrêter cette machine." + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Le serveur par défaut est ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "spécification de couleur « %s » incorrecte" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Échec de redémarrage" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" +"L’arborescence de périphériques doit être fournie (consultez la command " +"« devicetree »)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "zImage incorrecte" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "arborescence de périphériques incorrecte" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Charger Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Charger l'image mémoire initiale." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Charger le fichier DTB." + +# s/Image/image/ +#: grub-core/loader/arm64/linux.c:57 +#, fuzzy +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"simple image de noyau non prise en charge – reconstruisez avec " +"CONFIG_(U)EFI_STUB activé" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "le noyau doit d'abord être chargé" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, avec hyperviseur Xen" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Charger un module." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTIONS]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Démarrer le système en utilisant le BIOS." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Charger un autre gestionnaire de démarrage." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Afficher les messages sur toutes les consoles." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Utiliser la console série." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Demander le nom du fichier sur lequel redémarrer." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Utiliser le CD comme racine." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Accomplir la configuration de routage par utilisateur." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Entrer dans KDB au démarrage." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Utiliser le débogueur distant GDB à la place de DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Désactiver toutes les sorties au démarrage." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "" +"Rester en attente d'appui sur une touche avant d'afficher la ligne suivante." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Utiliser le périphérique racine intégré." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Démarrer en mode mono-utilisateur." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Démarrer en affichant plus de messages." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Ne pas redémarrer, arrêter seulement." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Modifier les périphériques configurés." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNITÉ[,VITESSE]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Désactiver le SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Désactiver l'ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Ne pas afficher les messages de diagnostic au démarrage." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Démarrer avec les messages de débogage." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Supprimer la sortie normale (les avertissements sont conservés)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADRESSE|comUNITÉ][,VITESSE]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nom" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "type" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adresse" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "taille" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Démarrage en mode aveugle" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Charger le noyau FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Charger le noyau OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Charger le noyau NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Charger l'environnement FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Charger le module noyau FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Charger le module noyau NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Charger le module noyau NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Charger le module noyau FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Charger le disque mémoire kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Charger une autre charge utile (« payload ») coreboot." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "L'ancien paramètre « ask » n'est plus permis." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s est obsolète. Utilisez plutôt « set gfxpayload=%s » avant la commande " +"« linux ».\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s est obsolète. Le mode VGA %d n'est pas reconnu. Utilisez plutôt « set " +"gfxpayload=LARGxHAUT[xPROF] » avant la commande « linux ».\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FICHIER" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "la taille de « %s » est trop grande" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Charger de kernel.sys de FreeDOS." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Charger NTLDR ou BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Redéfinir l'équivalent supposé des périphériques Plan 9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "PÉRIPHÉRIQUE_GRUB=PÉRIPHÉRIQUE_PLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "NOYAU ARGUMENTS" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Charger un noyau de type Plan 9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Charger une image PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Charger l’ISO Truecrypt." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "image mémoire initiale déjà chargée" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Charger un module." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Appuyez une touche pour démarrer XNU" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Charger la copie « device-properties »." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Impossible de trouver le pilote FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Le protocole FPSWA n'a pas pu trouver l'interface" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Pas de FPSWA disponible" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Révision FPSWA : %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FICHIER [ARGUMENTS ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Afficher la version FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" +"Attention : aucune console ne sera disponible pour ce système d'exploitation" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Charger un noyau Multiboot 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Charger un module Multiboot 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Charger un noyau Multiboot." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Charger un module Multiboot." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Mode de l'image d'arrière-plan." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "« stretch » (étiré) ou « normal »" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Charger l'image XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Charger l'image 64 bits XNU." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Charger le paquet d'extension XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Charger l'extension XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "RÉPERTOIRE [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Charger le répertoire d'extensions XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" +"Charger le disque mémoire XNU. Il sera disponible dans le système " +"d'exploitation sous le nom md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Charger l'image d'accueil pour XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Charger l'image d'hibernation XNU." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADRESSE1,MASQUE1[,ADRESSE2,MASQUE2] ..." + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Déclarer des régions de mémoire comme défectueuses (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "DE[K|M|G] À[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Retirer toutes les régions de mémoire dans l'intervalle indiqué." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "quatre arguments attendus" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "interface réseau « %s » non reconnue" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "aucun renseignement DHCP disponible" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "aucune option DHCP disponible" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "aucune option %d DHCP disponible" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "spécification « %s » de format d'option DHCP non reconnue" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "aucune carte réseau disponible" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "impossible de configurer %s automatiquement" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[CARTE]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "effectuer une configuration bootp automatique" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR INTERFACE NUMÉRO DESCRIPTION" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"récupérer l'option DHCP et la sauver dans VAR. Si VAR est -, afficher la " +"valeur." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "aucun serveur DNS configuré" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "composant de nom de domaine trop long" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "aucun enregistrement DNS disponible" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "aucune réponse DNS reçue" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "IPv4 seulement" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "IPv6 seulement" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "IPv4 préférée" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "IPv6 préférée" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "argument incorrect" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRESSE SERVEURDNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Effectuer une résolution DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "SERVEURDNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Ajouter un serveur DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Retirer un serveur DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Afficher les serveurs DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "impossible d'envoyer un paquet réseau" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "Interface 16 bits protégée prise en charge\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +#, fuzzy +msgid "alloc-mem failed" +msgstr "échec d'allocation mémoire" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "réponse HTTP non prise en charge" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "erreur %d HTTP non prise en charge : %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "délai dépassé lors de l'ouverture de « %s »" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "délai dépassé : impossible de résoudre l'adresse matérielle" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "adresse %s non résoluble" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "adresse réseau « %s » non reconnue" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "destination inaccessible" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "boucle de route détectée" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "adresse indisponible" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "impossible d'effacer cette adresse" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "type %d d'adresse matérielle non valable\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "type %d d'adresse non valable\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "trois arguments attendus" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "carte indisponible" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporaire" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "type %d d'adresse inconnu\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "aucun serveur n'est indiqué" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "délai dépassé lors de la lecture de « %s »" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "NOMCOURT CARTE ADRESSE [ADRESSEMATÉRIELLE]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Ajouter une adresse réseau." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[CARTE [ADRESSEMATÉRIELLE]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Effectuer une configuration IPV6 automatique" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "NOMCOURT" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Supprimer une adresse réseau." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "NOMCOURT RÉS [INTERFACE| gw PASSERELLE]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Ajouter une route réseau." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Supprimer une route réseau." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "afficher les routes réseau" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "afficher les cartes réseau" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "afficher les adresses réseau" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "connexion refusée" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "délai de connexion dépassé" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Entrez le nom d'utilisateur : " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[LISTE_UTILISATEURS]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Vérifier si l'utilisateur fait partie de LISTE_UTILISATEURS." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Les commandes possibles sont :" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Les périphériques possibles sont :" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Les fichiers possibles sont :" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Les partitions possibles sont :" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Les arguments possibles sont :" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Les choses possibles sont :" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Attention : erreur de syntaxe (barre oblique manquante) dans « %s »\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Attention : couleur de premier plan « %s » incorrecte\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Attention : couleur d'arrière-plan « %s » incorrecte\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "VAR_ENV [VAR_ENV] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Exporter les variables." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "dimanche" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "lundi" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "mardi" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "mercredi" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "jeudi" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "vendredi" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "samedi" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "le module n'est pas chargé" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB version %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Échap à tout moment pour quitter." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Édition de ligne basique de type Bash possible. Pour le premier mot, Tab " +"affiche les complètements de commande possibles. Ailleurs, Tab affiche les " +"complètements de périphériques ou fichiers possibles. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Effacer l'écran." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Passer en mode normal." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Sortir du mode normal." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Appuyez une touche pour continuer…" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Démarrage de « %s »" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Repli vers « %s »" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Échec de démarrage de l'entrée par défaut et des entrées de repli.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Démarrage d'une liste de commandes" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Édition basique à l'écran de type Emacs possible. Tab affiche les " +"complètements. Appuyez sur Ctrl-x ou F10 pour démarrer, Ctrl-c ou F2 pour " +"une invite de commandes ou Échap pour revenir au menu GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Utilisez les touches %C et %C pour sélectionner une entrée." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr " o" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr " Kio" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr " Mio" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr " Gio" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr " Tio" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr " Pio" + +# NOTE: s/$/i/ +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr " Ki" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr " Mi" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr " Gi" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr " Ti" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr " Pi" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr " o/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr " Kio/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr " Mio/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr " Gio/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr " Tio/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr " Pio/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partition %s :" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Périphérique %s :" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Le système de fichiers est inaccessible" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Type de système de fichiers %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Étiquette « %s »" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "" +"- Dernière date de modification %7$s %3$02d/%2$02d/%1$d %4$02d:%5$02d:%6$02d" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Aucun système de fichiers connu détecté" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - La partition commence à %llu%s Kio" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Taille de secteur %u o" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Taille totale inconnue" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Taille totale %llu%s Kio" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "— Plus —" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "impossible d'ouvrir le fichier de configuration « %s » : %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "pas de compression disponible pour cette plate-forme" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "pas de routine IEEE1275 disponible pour cette plate-forme" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "pas de routine EFI disponible pour cette plate-forme" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "pas de routine SGI disponible pour cette plate-forme" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" +"aucun générateur de nombres aléatoires n’est disponible pour ce système " +"d’exploitation" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Échec de création de l'arborescence « device-mapper »" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "impossible de monter le volume chiffré « %s » : %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "impossible d'ouvrir GEOM" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "impossible de trouver l'utilisateur geli" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "impossible de récupérer l'UUID geli" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "impossible de trouver la classe « part » de GEOM" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "taille de périphérique non alignée" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "tentative de lecture de l'image de base « %s » par GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "nouvelle tentative de lecture de l'image de base « %s » par GRUB" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "impossible de lire « %s » correctement" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "échec de lecture des secteurs de l'image de base" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"impossible d'obtenir la ligne de commande de traducteur pour le chemin " +"« %s » : %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "la ligne de commande de traducteur est vide pour le chemin « %s »" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"plusieurs arguments fournis au traducteur « %s » pour le chemin « %s » ne " +"sont pas des options, au moins « %s » et « %s »" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"seules des options ont été fournies au traducteur « %s » pour le chemin " +"« %s », impossible de trouver la partie relative au périphérique." + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Les renseignements de stockage pour « %s » ne contiennent pas le type" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "« %s » n'est pas un disque local" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Les renseignements de stockage pour « %s » n’indiquent ni une simple " +"partition, ni un simple disque" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "impossible de récupérer les listes de blocs : %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "la taille de bloc n'est pas divisible par 512" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "taille de bloc incorrecte" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "impossible de récupérer les listes de blocs" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "erreur d'ioctl RAID_VERSION : %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "version RAID non prise en charge : %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "erreur d'ioctl GET_ARRAY_INFO : %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "erreur d'ioctl GET_DISK_INFO : %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Impossible d'ouvrir le flux de %s : %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "type de périphérique RAID « %s » inconnu" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"« obppath » non disponible dans les répertoire parents de « %s », pas de " +"recherche de nom IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "impossible d'obtenir le chemin canonique de « %s »" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "type de périphérique %s inconnu\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Utilisation : %s PÉRIPHÉRIQUE\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Impossible de bifurquer (« fork ») : %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Impossible de créer le tube : %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "impossible de restaurer le répertoire d'origine" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "impossible d'obtenir l'état de « %s » : %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "impossible de créer un ficher temporaire : %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "impossible de créer un répertoire temporaire : %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"impossible de trouver le chemin de périphériques IEEE1275 pour %s.\n" +"Veuillez définir la variable « boot-device » vous-même." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s : non disponible" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"Échec de « nvsetenv »\n" +"Veuillez définir la variable « boot-device » vous-même. À l'invite IEEE1275, " +"entrez :\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Veuillez définir « SystemPartition » et « OSLoader » vous-même." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "pas de « / » dans le nom de fichier canonique" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "échec de cygwin_conv_path() " + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "impossible de récupérer les données aléatoires" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Droits insuffisants pour accéder au microprogramme (« firmware »), BIOS " +"supposé" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "pas de routine EFI disponible lors d’une exécution en mode BIOS" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "erreur EFI inattendue" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Impossible de trouver un emplacement BootNNNN libre" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"cette étiquette de partition GPT ne contient pas de partition d'amorçage " +"BIOS ; l'embarquage ne sera pas possible" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"la partition d'amorçage BIOS est trop petite ; l'embarquage ne sera pas " +"possible" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Le secteur %llu est déjà utilisé par le contrôleur RAID « %s » ; à éviter. " +"Veuillez demander au fabriquant de ne pas sauver de données dans la piste " +"d'amorçage" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Le secteur %llu est déjà utilisé par le programme « %s » ; à éviter. Ce " +"logiciel risque de poser des problèmes d'amorçage ou autre à l'avenir. " +"Veuillez demander à ses auteurs de ne pas sauver de données dans la piste " +"d'amorçage" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"un autre logiciel utilise la zone d'embarquage, et il n'y a pas assez de " +"place pour core.img. Ce genre de logiciel essaye souvent de sauver des " +"données de façon à éviter les détections. Vous devriez examiner cela" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"cette étiquette de partition de type MSDOS n'a pas d'espace dans la piste " +"d'amorçage ; l'embarquage ne sera pas possible" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"la zone d'embarquage est exceptionnellement petite. core.img n'y tiendra pas." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Activer la partition" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "pas une partition primaire" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "La partition %d est maintenant active. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Attribut actif effacé de %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Modifier le type de partition" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Définir l'attribut « caché » dans le type de partition" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "le type de partition 0x%x n'est pas valable" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Changement du type de partition à 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "l'argument de break doit être un entier strictement positif" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "n'est pas dans le corps d'une fonction" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "nom de variable « %s » incorrect" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "fin de fichier inattendue" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Sortir des boucles." + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Continuer les boucles" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Décaler les paramètres positionnels." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALEUR] ..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Définir les paramètres positionnels." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Terminer une fonction." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FICHIER" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Charger l'image d'arrière-plan pour le terminal actif." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COULEUR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Définir la couleur d'arrière-plan pour le terminal actif." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Afficher le contenu de la console CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Définir le port série (unité)." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Définir l'adresse du port série." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Définir la vitesse du port série." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Définir la taille de trame du port série." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Définir la parité du port série." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Définir les bits d'arrêt du port série." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Définir la fréquence de référence." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Activer ou désactiver RTS/CTS" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "le port série « %s » est indisponible" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "contrôle de débit de port série non valable" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIONS ...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Configurer le port série." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "type « %s » de terminfo inconnu" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "UTF-8 ordonné visuellement" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Encodage inconnu" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Types de terminfo actuels :" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Le terminal est en ASCII seulement [par défaut]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Le terminal est en UTF-8 ordonné logiquement." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Le terminal est en UTF-8 ordonné visuellement." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Le terminal a la géométrie indiquée." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "LARGEURxHAUTEUR." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "spécification des dimensions de terminal incorrecte" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" +"Le terminal %s est indisponible ou n'est pas pris en charge par terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g LARGxHAUT] TERMINAL [TYPE]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Définir le type de terminfo du TERMINAL à TYPE.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Afficher et exécuter l'argument de bloc." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "le fichier image « %s » n'est pas d'un format pris en charge" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" +" renseignements VBE : version : %d.%d révision de logiciel OEM : %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " mémoire totale : %d Kio\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "aucun mode vidéo approprié disponible" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "accès refusé" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULES" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "précharger les modules MODULES indiqués" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "n’installer que les MODULES et leurs dépendances [tout par défaut]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "THÈMES" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "installer les THÈMES [%s par défaut]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "POLICES" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "installer les POLICES [%s par défaut]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LOCALES" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "n’installer que les LOCALES [tout par défaut]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "compresser les fichiers GRUB [facultatif]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "choisir la compression à utiliser pour l'image de base" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" +"utiliser les images et modules présents dans RÉP [%s/ par " +"défaut]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "utiliser les traductions présentes dans RÉP [%s par défaut]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "utiliser les thèmes présents dans RÉP [%s par défaut]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" +"embarquer FICHIER comme clef publique pour la vérification de signatures" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "impossible de renommer le fichier %s en %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" +"le disque n'existe pas, donc repli vers le périphérique de partition %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Commandes :" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Créer un fichier de bloc d'environnement vierge." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Afficher les variables actuelles." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NOM=VALEUR ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Définir les variables." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NOM ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Supprimer les variables." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Options :" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Vous devez indiquer au moins une commande.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FICHIER COMMANDE" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Outil pour éditer un bloc d'environnement." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Si FICHIER est « - », la valeur par défaut %s est utilisée.\n" +"\n" +"Il n’y a pas de commande « delete ». Si vous voulez supprimer tous\n" +"l’environnement, utilisez « rm %s »." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "bloc d'environnement incorrect" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "paramètre %s incorrect" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "bloc d'environnement trop petit" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "échec de lecture du disque à la position %lld, longueur %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "valeur de saut %lld incorrecte" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "erreur de lecture à la position %llu : %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "impossible d'ouvrir le fichier « %s » du système d'exploitation : %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "impossible d'écrire sur la sortie standard : %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "échec de comparaison à la position %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "erreur d'ouverture du fichier %s de système d'exploitation : %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "échec de la commande « loopback » : %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "échec de la commande « cryptomount » : %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "impossible de récupérer l'UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls CHEMIN" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Afficher les fichiers dans CHEMIN." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FICHIER LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Copier FICHIER vers le fichier local LOCAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FICHIER" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Copier FICHIER sur la sortie standard." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FICHIER LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Comparer FICHIER avec le fichier LOCAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FICHIER" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Afficher le contenu de FICHIER en hexadécimal." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FICHIER" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Calculer la somme de contrôle CRC32 de FICHIER." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FICHIER" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Affiche la liste des blocs de FICHIER." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid PÉRIPHÉRIQUE" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Calculer l'UUID XNU du périphérique." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Sauter N octets du fichier de sortie." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Traiter N octets du fichier de sortie." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Indiquer le nombre de fichiers d'entrée." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Définir la variable d'environnement de débogage." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Monter les périphériques chiffrés." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FICHIER|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Charger la clef de chiffrement ZFS." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Décompresser les données." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Décompte de disques incorrect.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Le décompte des disques doit précéder la liste des disques.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Aucune commande indiquée.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Paramètres manquants pour la commande.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Commande %s incorrecte.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "CHEMIN_IMAGE COMMANDES" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Outil de débogage du pilote de système de fichier." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "définir le nom de fichier d'entrée pour la partie 32 bits." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "définir le nom de fichier d'entrée pour la partie 64 bits." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "définir le nom de fichier de sortie. STDOUT par défaut" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPTIONS]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" +"Coller des binaires 32 et 64 bits dans un seul binaire universel Apple." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Fichier d'entrée manquant\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "impossible de copier « %s » vers « %s » : %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "impossible de compresser « %s » vers « %s »" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "impossible d'ouvrir le répertoire « %s » : %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "impossible de supprimer « %s » : %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage est compilé sans prise en charge de XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Format de compression %s inconnu" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Compression « %s » non reconnue" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "format cible %s inconnu\n" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "impossible de trouver la locale « %s »" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s n'existe pas. Veuillez utiliser --target ou --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "fichier modinfo « %s » incorrect" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Plate-forme « %s-%s » inconnue" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Plus d'un disque d'installation, alors qu'un seul est attendu." + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"installer les images GRUB dans le répertoire RÉP/%s au lieu du répertoire %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "CIBLE" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, fuzzy, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "installer GRUB pour la plate-forme CIBLE [%s par défaut]" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"rendre aussi le disque amorçable, comme une disquette (par défaut pour les " +"périphériques fdX). Ce paramètre risque de poser des problèmes avec certains " +"BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "effacer la carte de périphériques si elle existe déjà" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "installer même si des problèmes sont détectés" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "utiliser le ficher d'identifiant même si l'UUID est disponible" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"le module de disque à utiliser (biosdisk ou native). Cette option n'est " +"disponible que sur la cible BIOS." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"ne pas mettre à jour les variables NVRAM « boot-device » ou « Boot* ». Cette " +"option n'est disponible que sur les cibles EFI et IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "ne pas chercher de systèmes de fichiers sur PÉRIPHÉRIQUE" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "ne pas installer le secteur d’amorçage" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Ne pas appliquer le code Reed-Solomon lors de l’embarquage de core.img. " +"Cette option n'est disponible que sur les cibles BIOS x86." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"le périphérique d'installation est amovible. Cette option n'est disponible " +"que sur EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "IDENTIFIANT" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"l'IDENTIFIANT du chargeur d'amorçage. Cette option n'est disponible que sur " +"EFI et Mac." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "utiliser RÉP comme racine de la partition système EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "Utiliser RÉP pour l’installation Mac PowerPC." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "utiliser FICHIER comme police pour l'étiquette" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "utiliser COULEUR pour l'étiquette" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "utiliser COULEUR pour l'arrière-plan d'étiquette" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "utiliser CHAÎNE comme version de produit" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPTION] [PÉRIPHÉRIQUE_INSTALLATION]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Installer GRUB sur le disque." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"PÉRIPHÉRIQUE_INSTALLATION doit être un nom de fichier de périphérique " +"système.\n" +"%s copie les images GRUB sur %s. Sur certaines plates-formes, cela pourrait " +"aussi installer GRUB sur le secteur d'amorçage." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" +"le disque %s est défini plusieurs fois dans la carte de périphériques %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Impossible de déterminer la plate-forme. Utilisez --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installation pour la plate-forme %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "le périphérique d'installation n'est pas indiqué" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "impossible de trouver le répertoire EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "impossible de trouver un périphérique pour %s (/dev est-il monté ?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"impossible de trouver un périphérique GRUB pour %s. Vérifiez device.map." + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s ne ressemble pas à une partition EFI.\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Vous avez découvert un bogue" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "Le système de fichiers sur %s n’est ni HFS, ni HFS+" + +#: util/grub-install.c:1273 +#, fuzzy, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"tentative d’installer sur un disque chiffré sans cryptodisk activé. " +"Définissez « %s » dans le fichier « %s »." + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Impossible de créer le fichier : %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"pas de conseil (« hint ») disponible pour cette plate-forme. Performances " +"réduites attendus" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "Non exécuté : " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "la partition choisie n'est pas une partition PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "échec de copie de GRUB sur la partition PReP" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"la partition PReP n'est pas vide. Si vous voulez vraiment l'utiliser, " +"utilisez dd pour l'effacer : « %s »" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "L'identifiant de chargeur d'amorçage EFI n'est pas indiqué." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" +"Attention : aucune installation spécifique à la plate-forme n'a été effectuée" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installation terminée, sans erreur." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bless pour les Mac x86" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bless pour les Mac PowerPC" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Aucun chemin ni aucun périphérique n'est indiqué.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc CHEMIN|--x86 FICHIER" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "bless de type mac pour HFS ou HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Utilisation : %s [FICHIER_ENTRÉE [FICHIER_SORTIE]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Erreur %d de Freetype en chargeant glyphe 0x%x pour U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (médiane)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (initiale, ou finale pour les écritures de droite à gauche)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (finale, ou initiale pour les écritures de droite à gauche)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Substitution hors limites (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Recherche hors limites : %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Type de substitution non pris en charge : %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Spécification de substitution non prise en charge : %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Spécification de couverture non prise en charge : %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" +"Attention : paramètres de fonctionnalité de police non pris en charge : %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "sauver la sortie dans FICHIER [nécessaire]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "sélectionner l'indice de police d'écriture" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "DE-À[,DE-À]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "définir l'intervalle de caractères" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "définir le nom de famille de la police" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "TAILLE" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "définir la taille de police" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "définir le talus de pied de la police" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "définir le talus de tête de la police" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "convertir en police grasse" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "forcer l'optimisation (« hinting ») automatique" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "désactiver l'optimisation (« hinting »)" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ne pas utiliser les tracés bitmap déjà existants" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "intervalle de caractères incorrect" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIONS] FICHIERS_POLICE" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Convertir les formats de fichier de police habituels en PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "le fichier de destination doit être indiqué" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "échec de FT_Init_FreeType" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "impossible d'ouvrir le fichier %s, index %d : erreur %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" +"impossible de définir la taille de police %dx%d : erreur %d de Freetype : %s" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "définir le répertoire de préfixe [%s par défaut]" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"embarquer FICHIER comme une image de disque en mémoire (memdisk)\n" +"Implique « -p (memdisk)/boot/grub » et substitue tous les préfixes fournis " +"précédemment, mais le préfixe lui-même peut être substitué par les options " +"suivantes" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "embarquer FICHIER comme une configuration de départ" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "ajouter le segment NOTE pour CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "envoyer l'image générée dans FICHIER [stdout par défaut]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "générer une image au FORMAT" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "formats disponibles :" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "format cible %s inconnu\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPTIONS] ... [MODULES]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Faire une image de GRUB amorçable." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Format cible non indiqué (utiliser l'option -O)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "Format cible non indiqué (utiliser l'option -O)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"« %s » est mal compilé : son adresse de départ est 0x%llx au lieu de 0x" +"%llx : peut-être est-ce dû à un bogue de ld.gold." + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "définir le nom de fichier d'entrée. STDIN par défaut" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Identifiant de touche %s inconnu\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Code de touche 0x%02x inconnu\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"Erreur : pas de disposition de clavier disponible. Vérifiez l'entrée.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" +"Générer une disposition de clavier GRUB à partir de celle de la console " +"Linux." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "répertoire racine du serveur TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "sous-répertoire relatif sur le serveur réseau" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Prépare les images d’amorçage en réseau GRUB dans net_directory/subdir en " +"supposant que net_directory est la racine TFTP." + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "plate-forme %s non prise en charge\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"répertoire Netboot créé pour %s. Configurez le serveur DHCP pour pointer " +"vers %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Nombre d'itérations PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Longueur du hachage généré." + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Longueur du salage." + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Générer un hachage PBKDF2 du mot de passe." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "échec de lecture du mot de passe" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Entrez de nouveau le mot de passe : " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "les mots de passe ne correspondent pas" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "impossible de récupérer les données aléatoires pour le salage" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "erreur cryptographique numéro %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "Le hachage PBKDF2 du mot de passe est %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Aucun chemin indiqué.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "CHEMIN" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Transformer un nom de fichier système vers le format GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "sauver les images ROM dans RÉP [facultatif]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "utiliser FICHIER à la place de xorriso [facultatif]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "utiliser CHAÎNE comme nom de produit" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"activer le démarrage SPARC. Désactiver HFS+, APM, ARCS et démarrer comme une " +"image disque pour i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"activer le démarrage ARCS (machines MIPS gros-boutistes, surtout SGI). " +"Désactiver HFS+, APM, sparc64 et démarrer comme une image disque pour i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Faire une image GRUB amorçable de CD, de disque, de clef USB ou de disquette." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Créer une image amorçable de CD, USB ou disquette. Les arguments qui ne sont " +"pas des options de ce programme sont passées à xorriso, et indiquent les " +"fichiers source, répertoires source ou n’importe quelles options de mkisofs " +"affichées en sortie de « %s »." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "L'option -- bascule en mode natif de commande xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Envoyer les demandes d'aide sur xorriso à ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPTION] SOURCE ..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "activation de la prise en charge de %s…" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Cette version de xorriso ne permet pas d'utiliser « --grub2-boot-info ». " +"Certaines fonctionnalités sont désactivées. Veuillez utiliser au moins la " +"version 1.2.9 de xorriso." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Cette version de xorriso ne permet pas d'utiliser « --grub2-boot-info ». " +"L'image de base est trop grande. Le démarrage en tant que disque est " +"désactivé. Veuillez utiliser au moins la version 1.2.9 de xorriso." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "Créer une image autonome (contenant tous les modules) au format choisi" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"La syntaxe de point de greffe (par exemple /boot/grub/grub.cfg=./grub.cfg) " +"est acceptée" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMAGE1 [IMAGE2 ...] POINT_DE_MONTAGE" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "une image et un point de montage sont nécessaires" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "l'argument donné est un périphérique système, pas un chemin" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, fuzzy, c-format +msgid "[default=%s]" +msgstr "installer les POLICES [%s par défaut]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "afficher la CIBLE" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "cibles disponibles :" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTIONS] ... [CHEMIN|PÉRIPHÉRIQUE]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Examiner les renseignements du périphérique pour un chemin (ou un " +"périphérique avec l'option -d) donné." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "lire le texte depuis le FICHIER." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "utiliser COULEUR pour le texte" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "utiliser COULEUR pour l'arrière-plan" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "définir l'étiquette à fournir" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "utiliser FICHIER comme police (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Fournir le .disk_label Apple." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Arguments manquants\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[CHEMIN]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Vérifie les erreurs de syntaxe dans le fichier de configuration de script " +"GRUB." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Erreur de syntaxe à la ligne %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Le script « %s » ne contient aucune commande et ne fera rien\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "utiliser FICHIER comme image de démarrage [%s par défaut]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "utiliser FICHIER comme image de base [%s par défaut]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Aucun périphérique n'est indiqué.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Préparer les images pour démarrer depuis PÉRIPHÉRIQUE.\n" +"\n" +"Vous ne devriez normalement pas exécuter ce programme directement. Utilisez " +"plutôt grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" +"PÉRIPHÉRIQUE doit être un périphérique du système d'exploitation (par " +"exemple /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Périphérique « %s » incorrect.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "répertoire racine tel qu’il sera vu en fonctionnement [/ par défaut]" + +# NOTE: s/the // +#: util/grub-syslinux2cfg.c:69 +#, fuzzy +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"répertoire actuel de syslinux tel qu’il sera vu en fonctionnement " +"[répertoire parent du fichier d’entrée par défaut]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "écrire la sortie vers FICHIER [stdout par défaut]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Transformer une configuration de syslinux vers le format GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "impossible de compresser l'image du noyau" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "compression %d inconnue\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Le décompresseur est trop grand" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "L'image de base est trop grande (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "L'image de noyau est trop grande (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "la taille de diskboot.img doit être de %u octets" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img ne correspond pas à la bonne version connue. Poursuivez à vos " +"risques et périls" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "l'image de microprogramme (« firmware ») est trop grande" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "format de ligne incorrect : %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "" +"le premier secteur du fichier de l'image de base n'est pas aligné sur un " +"secteur" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" +"données non alignées sur des secteurs trouvées dans le fichier de l'image de " +"base" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "les secteurs du fichier de l'image de base sont trop dispersés" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "la taille de « %s » n'est pas égale à %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "la taille de « %s » est trop petite" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Tentative d'installation de GRUB sur un disque ayant plusieurs étiquettes de " +"partition, ou à la fois une étiquette de partition et un système de fichier. " +"Ce n'est pas encore possible." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"impossible d'identifier le système de fichiers sur %s ; impossible " +"d'effectuer un contrôle de sécurité" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s a l'air de contenir un système de fichiers %s qui pourrait ne pas " +"réserver de place pour un amorçage de type DOS. Installer GRUB à cet endroit " +"risque de DÉTRUIRE le système de fichiers si des données importantes sont " +"écrasées lors de l'installation de GRUB (--skip-fs-probe désactive ce " +"contrôle, à utiliser à vos risques et périls)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s a l'air de contenir un plan de partition %s qui pourrait ne pas réserver " +"de place pour un amorçage de type DOS. Installer GRUB à cet endroit risque " +"de DÉTRUIRE le système de fichiers si des données importantes sont écrasées " +"lors de l'installation de GRUB (--skip-fs-probe désactive ce contrôle, à " +"utiliser à vos risques et périls)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s a l'air de contenir un plan de partition %s et un LDM, ce qui n'est pas " +"souvent une association fiable. Installer GRUB à cet endroit risque de " +"DÉTRUIRE le système de fichiers si des données importantes sont écrasées " +"lors de l'installation de GRUB (--skip-fs-probe désactive ce contrôle, à " +"utiliser à vos risques et périls)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Tentative d'installation de GRUB sur un disque sans partition ou sur une " +"partition. C'est une très mauvaise idée." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Tentative d'installation de GRUB sur un disque ayant plusieurs étiquettes de " +"partition. Ce n'est pas encore possible." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Le style de partition « %s » ne prend pas en charge l'embarquage" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Le système de fichiers « %s » ne prend pas en charge l'embarquage" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"La zone d'embarquage est exceptionnellement petite. core.img n'y tiendra pas." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "pas de terminateur dans l'image de base" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "la version de core.img ne correspond pas" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"l'embarquage est impossible, il est pourtant nécessaire pour les " +"installations RAID et LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "impossible de déterminer le système de fichiers sur %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" +"le système de fichier « %s » ne prend pas en charge les listes de blocs " + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"l'embarquage est impossible, il est pourtant nécessaire pour les " +"installations interdisques" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"L'embarquage est impossible. GRUB ne peut être installé sur cette " +"configuration qu'en utilisant les listes de blocs. Cependant, les listes de " +"blocs ne sont PAS fiables et leur utilisation est déconseillée." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "refus de continuer avec les listes de blocs" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "les listes de blocs sont incorrectes" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "les listes de blocs sont incomplets" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Utilisation : %s -o SORTIE ARGUMENTS_CKBMAP ...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Faire un ficher de disposition de clavier GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "afficher ce message et quitter" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "afficher la version du logiciel et quitter" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" +"%s crée un fichier de disposition de clavier pour GRUB en utilisant ckbcomp" +"\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Signaler les bogues à ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s : l'option nécessite un argument — « %s »\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Utilisation : %s [OPTION]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Créer un fichier de configuration GRUB" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "envoyer la configuration créée vers FICHIER [stdout par défaut]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Option « %s » non reconnue\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s : seul le superutilisateur peut exécuter cela\\n" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s : non disponible" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Création du fichier de configuration GRUB…" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Des erreurs de syntaxe sont détectées dans le fichier de configuration\n" +"de GRUB. Veuillez vérifier qu'il n'y a pas d'erreur dans les fichiers\n" +"/etc/default/grub et /etc/grub.d/*. Sinon veuillez signaler un bogue\n" +"en joignant le fichier %s." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "fait" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Attention :" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Utilisation : %s [OPTION] ENTRÉE_MENU\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Configurer l'entrée de menu par défaut pour GRUB, seulement pour le prochain " +"démarrage." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"chercher les images GRUB dans le répertoire RÉP/%s au lieu du répertoire %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"ENTRÉE_MENU est un numéro, un titre d'entrée de menu ou un identifiant " +"d'entrée de menu.\n" +"Veuillez noter que les entrées de menu dans les sous-menus et sous-sous-" +"menus nécessitent d’indiquer le composant de sous-menu puis le composant " +"d’entrée de menu.\n" +"Les titres devrait être séparés en utilisant le caractères supérieur (>) " +"sans espace supplémentaire.\n" +"Suivant l’interpréteur de commandes, certains caractères, y compris >, ont " +"besoin d’être protégés.\n" +"Plus de renseignements à ce sujet sont disponibles dans le manuel de GRUB à " +"la section sur la commande « default »." + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Plus d'une entrée de menu, alors qu'une seule est attendue." + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Aucune entrée de menu indiquée." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Configurer l'entrée de menu par défaut pour GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Cela nécessite de configurer GRUB_DEFAULT=saved dans %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ENTRÉE_MENU est un numéro, un titre d'entrée de menu ou un identifiant " +"d'entrée de menu." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Un terminal série est demandé, mais GRUB_SERIAL_COMMAND n'est pas indiqué. " +"Les paramètres par défaut seront utilisés." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Thème trouvé : %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Arrière-plan trouvé : %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Format d'image non pris en charge" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Définir GRUB_TIMEOUT à une valeur non nulle si GRUB_HIDDEN_TIMEOUT est " +"définie n’est plus possible." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "GNU Mach trouvé : %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Module Hurd trouvé : %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"Certains morceaux du Hurd sont disponibles, mais pas assez pour démarrer." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, avec Hurd %s (mode de dépannage)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, avec Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Veuillez ne pas utiliser l'ancien titre « %s » pour GRUB_DEFAULT, utilisez " +"« %s » (avant la version 2.00) ou « %s » (depuis la version 2.00)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Chargement de GNU Mach…" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Chargement du Hurd…" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Options avancées pour %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Chargement du noyau d'Illumos…" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, avec kFreeBSD %s (mode de dépannage)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, avec kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Chargement du noyau FreeBSD %s…" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Noyau de FreeBSD trouvé : %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Répertoire de modules noyau trouvé : %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, avec Linux %s (mode de dépannage)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, avec Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Chargement de Linux %s…" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Chargement du disque mémoire initial…" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Image Linux trouvée : %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Image mémoire initiale trouvée : %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, avec le noyau %s (à l'aide de %s, mode de dépannage)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, avec le noyau %s (à l'aide de %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Noyau NetBSD trouvé : %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (chargeur)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (chargeur)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "%s trouvé sur %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32 bits)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64 bits)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(sur %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, avec Xen %s et Linux %s (mode de dépannage)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, avec Xen %s et Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, avec hyperviseur Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Chargement de Xen %s…" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Hyperviseur Xen, version %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Option avancée pour %s (avec hyperviseur Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "%s trouvé sur %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s n'est pas encore pris en charge par grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Attribut de substitution non pris en charge : 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "fonctionnalité gsub 0x%x inconnue (%s)\n" + +#~ msgid "root directory of the syslinux disk (default /)." +#~ msgstr "répertoire racine du disque syslinux (/ par défaut)." + +#~ msgid "assume isolinux." +#~ msgstr "isolinux supposé." + +#~ msgid "assume pxelinux." +#~ msgstr "pxelinux supposé." + +#~ msgid "assume syslinux." +#~ msgstr "syslinux supposé." + +#~ msgid "%s is neither hfs nor hfsplus" +#~ msgstr "%s n’est ni hfs, ni hfsplus" + +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "" +#~ "copie les images GRUB dans net_directory/subdir/target_cpu-platform." + +#~ msgid "" +#~ "Generates a bootable rescue image with specified source files, source " +#~ "directories, or mkisofs options listed by the output of `%s'.\n" +#~ "\n" +#~ "Option -- switches to native xorriso command mode.\n" +#~ "\n" +#~ "Mail xorriso support requests to ." +#~ msgstr "" +#~ "Créer une image de dépannage amorçable avec les fichiers source indiqués, " +#~ "répertoires source ou options mkisofs affichées en sortie de « %s ».\n" +#~ "\n" +#~ "L'option -- bascule en mode natif de commande xorriso.\n" +#~ "\n" +#~ "Envoyer les demandes d'aide sur xorriso à ." + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "afficher le module de système de fichiers, le disque GRUB, le " +#~ "périphérique système, le module de plan de partition, le module " +#~ "d'abstraction ou l'UUID du conteneur cryptographique [fs par défaut]" + +#~ msgid "current directory of the syslinux disk [default=$pwd]." +#~ msgstr "répertoire actuel du disque syslinux [$pwd par défaut]" + +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "utiliser RÉP comme répertoire racine [/ par défaut]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "L'intervalle d'adresses n'est pas associé à la RAM." + +#~ msgid "PUBKEY_FILE" +#~ msgstr "FICHIER_CLEF_PUBLIQUE" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign n'est pas pris en charge par le système" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Si FICHIER est « - », la valeur par défaut %s est utilisée." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "ne sauver que les images ASCII" + +#~ msgid "create width summary file" +#~ msgstr "créer un fichier résumé de largeur" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "L'option --ascii-bitmaps n'accepte pas d'intervalle (elle utilise " +#~ "toujours ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "" +#~ "Attention : la fiabilité du générateur de nombres aléatoires n'est pas " +#~ "assurée\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "échec de lecture du premier secteur de l'image de base" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "utiliser FICHIER à la place de grub-setup" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "utiliser FICHIER à la place de grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "utiliser FICHIER à la place de grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "PÉRIPHÉRIQUE_INSTALLATION doit être un nom de fichier de périphérique " +#~ "système." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Le chemin « %s » n'est pas lisible par GRUB au démarrage. L'installation " +#~ "est impossible. Abandon.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Échec de la détection automatique de système de fichiers sur %s.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Essayez avec --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Si le problème persiste, veuillez le signaler avec la sortie de %s à <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "Échec de « %s ».\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "Impossible de trouver le disque GRUB pour %s ; impossible de créer " +#~ "l'entrée du gestionnaire d'amorçage EFI.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Création de grub.cfg…" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "utiliser FICHIER à la place de grub-glue-efi" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "utiliser FICHIER à la place de grub-render-label" + +#~ msgid "Packed pixel " +#~ msgstr "Palette de couleurs " + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "utiliser les images GRUB de RÉP. Est prioritaire sur la cible" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "" +#~ "Les renseignements de stockage pour « %s » ne contiennent pas le nom" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "Longueur de nom erronée des renseignements de stockage pour « %s »" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "Le nom de stockage pour « %s » ne se termine pas par NUL" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "" +#~ "Impossible de trouver le volume physique « %s ». Vérifiez device.map." + +#~ msgid "diskboot.img is not one sector size" +#~ msgstr "diskboot.img ne tient pas sur un secteur" + +#~ msgid "loopback command fails" +#~ msgstr "échec de la commande loopback" + +#~ msgid "cryptomount command fails: %s" +#~ msgstr "échec de la commande cryptomount : %s" + +#~ msgid "%s: option requires an argument -- `%s'" +#~ msgstr "%s : l'option nécessite un argument — « %s »" diff --git a/po/gl.gmo b/po/gl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..0b8491978ae56c101649e652ac8e5763539067a5 GIT binary patch literal 108680 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

|ph1Hr{F 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, 2010. +# Antón Méixome , 2010, 2013. +msgid "" +msgstr "" +"Project-Id-Version: grub-2.00+20130519\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2013-09-26 11:40+0200\n" +"Last-Translator: Anton Meixome \n" +"Language-Team: Galician \n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Virtaal 0.7.0\n" +"X-Launchpad-Export-Date: 2013-07-03 10:56+0000\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "velocidade do porto serie incompatíbel" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "paridade do porto serie incompatíbel" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "número de bits de parada do porto serie incompatíbel" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "largura de palabra do porto serie incompatíbel" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Non carga as táboas do servidor especificadas en lista separada por comas." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Só carga as táboas especificadas en lista separada por comas." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Exportar a versión 1 das táboa ao SO." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Exportar a versión 2 e versión 3 das táboas ao SO." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Estabelecer OEMID de RSDP, XSDT e RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Estabelecer OEMTABLE ID de RSDP, XSDT e RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Estabelecer a revisión OEMTABLE de RSDP, XSDT e RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Estabelecer o campo creador para RSDP, CSDT e RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Estabelecer a revisión do creador de RSDP, CSDT e RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Non actualizar EBDA. Podería corrixir fallos ou paradas nalgúns BIOS, pero " +"faise ineficaz se o SO non recibe RSDP do GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "fin do ficheiro prematura %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TÁBOA1,TÁBOA2|--load-only=TÁBOBA1, TÁBOA2] FICHEIRO1 " +"[FICHEIRO2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Cargar as táboas ACPI do servidor e as especificadas mediante argumentos." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "erro: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "sen memoria" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "non foi posíbel ler «%s»: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Fallou o apagado ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Listar dispositivos." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "agardábase o nome do ficheiro" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FICHEIRO" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Imprimir unha lista de bloques." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "cómpre cargar o núcleo primeiro" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Arrancar un sistema operativo." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Non hai estatísticas dispoñíbeis sobre a duración do arranque\n" + +#: grub-core/commands/boottime.c:59 +#, fuzzy +msgid "Show boot time statistics." +msgstr "Obter estatísticas da duración do arranque." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "Estatísticas da caché de disco = %lu (%lu.%02lu%%), perdidos = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Non hai estatísticas dispoñíbeis sobre a caché do disco\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Obter información sobre a caché do disco." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Aceptar os finais de liña estilo-DOS CR/NL." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Amosar o contido dun ficheiro." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "agardábanse dous argumentos" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Comparar o ficheiro «%s» con «%s»:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Os ficheiros difiren en tamaño: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Os ficheiros difiren no desprazamento %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Os ficheiros son idénticos.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FICHEIRO1 FICHEIRO2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Comparar dous ficheiros." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Cargar outro ficheiro de configuración." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Cargar outro ficheiro de configuración sen cambiar de contexto." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Cargar outro ficheiro de configuración sen cambiar o contexto e tomar del " +"soamente as entradas de menú." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Cargar outro ficheiro de configuración e tomar só as entradas de menú." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[ano-]mes-día] [hora:minuto[:segundo]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Amosar/definir a data e hora actual." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Non amosar nova liña ao final." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Activar que se interpreten os escapes coa barra invertida." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] CADEA" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Presentar unha liña de texto." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Reiniciar no menú de configuración do firmware." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Corrixir o problema de vídeo." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "A imaxe da ROM está presente." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Non se pode activar a área da ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "Crear estruturas tipo BIOS para retrocompatibilidade co SO existente." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Cargar o envorcado do BIOS." + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "CADEA" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Cargar un núcleo multiarranque." + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Cargar o núcleo multiarranque 2." + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "falso" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[OPCIÓNS] FICHEIROS_LETRAS" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "non existe tal partición" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Escribiuse un novo MBR en «%s»\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DISPOSITIVO [PARTICIÓN[+/-[TIPO]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Completar o MBR híbrido da unidade GPT do DISPOSITIVO. As particións " +"especificadas serán unha parte do MBR híbrido. Permítense ata tres " +"particións. O TIPO é un forma de MBR. + significa que esa partición está " +"activa. Soamente pode estar activan unha partición." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Detén o equipo. Esta orde non funciona en todas os sistemas de firmware." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Especificar o hash para usar." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Comprobar os hashes de ficheiros co FICHEIRO da lista de hashes." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Cartafol base da lista de hashes." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "CARTAFOL" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Non parar tras o primeiro erro." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Descomprimir o ficheiro antes da suma de comprobación." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ERRO DE LECTURA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: NON COINCIDE O HASH\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: Aceptar\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FICHEIRO [-p PREFIXO]] [FICHEIRO1 [FICHEIRO2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Calcular ou comprobar a suma de comprobación do hash." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FICHEIRO [-p PREFIXO]] [FICHEIRO1 [FICHEIRO2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Estabelecer o xestor avanzado de enerxía\n" +"(1=baixo, ..., 254=alto, 255=apagado)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Amosar o modo de enerxía." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Conxelar a configuración ATA de seguranza ata reiniciar." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Amosar o estado de sanidade SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Estabelecer o xestor automático de acústica\n" +"(0=apagado, 128=silencioso, ..., 254=rápido)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Estabelecer a caducidade do tempo de espera\n" +"(0=apagado, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Estabelecer o controlador do modo de espera." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Estabelecer a unidade en modo dormente." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Imprime a identidade do controlador e a configuración." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Amosar o contido en bruto do sector ATA IDENTIFY." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Desactivar/activar SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Non imprimir mensaxes." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "agardábase un argumento" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPCIÓNS] DISCO" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Obter/estabelecer parámetros ATA do disco." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Utilización:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MODELO ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Amosa unha mensaxe de axuda." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Omitir o desprazamento de octetos desde o comezo do ficheiro." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Ler só LENGTH bytes." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPCIÓNS] FICHEIRO_OU_DISPOSITIVO" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Amosar os contidos en bruto dun ficheiro ou da memoria." + +#: grub-core/commands/i386/cmosdump.c:58 +#, fuzzy +msgid "Show raw dump of the CMOS contents." +msgstr "Envorcar os contidos CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Probar bit en BYTE:BIT no CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +#, fuzzy +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Limpar bit en BYTE:BIT no CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +#, fuzzy +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Probar bit en BYTE:BIT no CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +#, fuzzy +msgid "Show coreboot boot time statistics." +msgstr "Obter estatísticas da duración do arranque do núcleo." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Listar táboas do arranque do núcleo." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Probar se a CPU é compatíbel co modo (predeterminado) de 64 bit (longo)." + +#: grub-core/commands/i386/cpuid.c:37 +#, fuzzy +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Probar se a CPU é compatíbel co modo (predeterminado) de 64 bit (longo)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Comprobar as funcionalidades da CPU." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Amosar as asignacións actuais." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Restabelecer todas as asignacións nos valores predeterminados." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Realizar asignacións directas e inversas." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Non se reasignaron controladores" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "SO disco #núm ------> dispositivo GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Xestionar o controlador de asignacións do BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Non usar APM para deter o computador." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Deter o sistema, se é posíbel usando APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "non se atopu APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versión %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "compatíbel coa interface protexida de 16 bit\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "non compatíbel coa interface protexida de 16 bit\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "compatíbel coa interface protexida de 32 bit\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "non compatíbel coa inteface protexida de 32 bit\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "A CPU inactiva ralentiza o procesador\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "A CPU inactiva non ralentiza o procesador\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "Desactivado o APM\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "Activado o APM\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "Sen o APM\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "Co APM\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Amosar a información APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "nome do ficheiro ou tempo e notas esperábeis" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "A orde %s é incorrecta.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "non se atopou o ficheiro «%s»" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "número non recoñecido" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FICHEIRO | TEMPO [PITCH1 DURACIÓN1] [PITCH2 DURACIÓN2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Afinar." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "definir o modo de BloqNúm" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "definir o modo de BloqMaiús" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "definir o modo de BloqDespr" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "definir o modo de inserción" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "definir o modo de pausa" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "premer a maiúscula esquerda" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "premer a maiúscula dereita" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "premer PetSis" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "premer a tecla de BloqNúm" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "premer a tecla de BloqM" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "premer a tecla de BloqD" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "premer a tecla de inserción" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "premer Alt esquerda" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "premer Alt dereita" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "premer Ctrl esquerda" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "premer Ctrl dereita" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "non actualizar o estado LED" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KEYSTROKE1] [KEYSTROKE2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emular a secuencia de atallo de teclado" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Executar «go» para retomar o GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Volver ao indicador IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Gardar o valor lido na variábel VARNAME." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Ler o valor de 8 bit de PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Ler o valor de 16 bit de PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Ler o valor de 32 bit de PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORTO VALOR [MÁSCARA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Escribir o VALOR de 8 bit en PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Escribir o VALOR de 16 bit en PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ENDEREZO VALOR [MÁSCARA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Escribir o VALOR de 32 bit en PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "a variábel «%s» non está definida" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Cargar un mapa de teclado." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Comprobar a tecla Maiús." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Comprobar a tecla Control." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Comprobar a tecla Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Comprobar o estado do modificador de tecla." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "non é posíbel atopar a orde «%s»" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Introduza o contrasinal: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Procesa a configuración legada no mesmo contexto" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Procesa a configuración legada en novo contexto" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"A análise da configuración legada no mesmo contexto collendo só as entradas " +"do menú" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"A análise da configuración legada en contexto novo collendo só as entradas " +"do menú" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TIPO] FICHEIRO [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simula a antiga orde de grub «kernel»" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FICHEIRO [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simula a antiga orde de grub «initrd»" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simula a antiga orde de grub «modulenounzip»" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] CONTRASINAL [FICHEIRO]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simula a antiga orde de grub «password»" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simula a antiga orde de grub «password» no modo de entrada de menú" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Especifique o nome do ficheiro." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FICHEIRO] nome_variábel [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Carga variábeis procedentes do ficheiro de bloque de entorno." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FICHEIRO]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Lista de variábeis procedentes do ficheiro de bloque de entorno." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FICHEIRO] nome_variábel [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Garda as variábeis no ficheiro de bloque de entorno." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Amosa unha lista longa con información máis detallada." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Imprime os tamaños nun formato lexíbel por humanos." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Lista todos os ficheiros." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Protocolos de rede:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FICHEIRO ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Lista dispositivos e ficheiros." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Amosa soamente as táboas da versión 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Amosa soamente as táboas das versións 2 e 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Amosar a información da ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM dispoñíbel" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM reservada" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM reclamábel da ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "RAM non volátil de almacenamento da ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM defectuosa (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM que contén táboas do arranque de núcleo" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM que contén código firmware" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "ender_base = 0x%llx, tamaño = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "ender_base = 0x%llx, tamaño = 0x%llx, tipo = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Lista o mapa de memoria fornecido polo firmware." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Lista os dispositivos PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ENDEREZO" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Le o valor de 8 bit de ENDEREZO." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Le o valor de 16 bit de ENDEREZO." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Le o valor de 32 bit de ENDEREZO." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Escribe o VALOR de 8 bit de ENDEREZO." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Escribe o VALOR de 16 bit de ENDEREZO." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Escribe o VALOR de 32 bit de ENDEREZO." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Tipo de entrada de menú." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "CADEA" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Lista de usuarios aos que se lles permite arrancar con esta entrada." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "USUARIO[,USUARIO]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tecla para arrancar rapidamente con esta entrada." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TECLA" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Utilice CADEA como corpo da entrada de menú." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identificador da entrada de menú." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Calquera usuario pode arrancar con esta entrada." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOQUE" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Defina unha entrada de menú." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Defina un submenú." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nome\tContador Ref\tDependencias\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Amosar esta mensaxe." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ENDEREZO [TAMAÑO]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Amosar contido da memoria." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MÓDULO" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Retirar un módulo." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Amosar os módulos cargados." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Saír do GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "No foi posíbel atopar CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 en %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"O espazo do sistema de xestión do controlador de bus de E/S está en 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Rañura da RAM número %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Bytes SPD escritos: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Tamaño total da flash: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Tipo de memoria: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Parte núm: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Tipo de memoria: Descoñecida." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Imprime información da memoria." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s non é compatíbel con UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MÓDULO1,MÓDULO2...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Trocar para utilizar controladores de disco nativos. De non especificar " +"módulos, utilizarase o conxunto predeterminado (pata, ahci, usbms, ohci, " +"uhci, ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Leva a efecto as ORDES na partición.\n" +"Utilice a «axuda da ferramenta partool para PARTICIÓN» para obter a lista " +"das ordes dispoñíbeis." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, fuzzy, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" +"Desculpe pero non hai ningunha ferramenta parttool dispoñíbel para %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "o argumento «%s» é descoñecido" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "ORDES DE PARTICIÓN" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "CONTRASINAL DE USUARIO" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Estabelecer o contrasinal de usuario (texto simple). Non recomendado e " +"inseguro." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "contrasinal PBKDF2 inpropiado" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USUARIO CONTRASINAL_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Estabelecer o contrasinal de usuario (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Selecciona o dispositivo por fabricante e por ID." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[fabricante]:[dispositivo]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Selecciona o dispositivo pola súa posición no bus." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[rañuña][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "falta o símbolo «%c»" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSICIÓN] [-d DISPOSITIVO]" + +#: grub-core/commands/pcidump.c:169 +#, fuzzy +msgid "Show raw dump of the PCI configuration space." +msgstr "Envorca o espazo de configuración da PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Estabelecer unha variábel para devolver o valor." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Determinar o controlador." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Determinar o tipo de mapa de particións." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Determinar o tipo de sistema de ficheiros." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Determinar o UUID do sistema de ficheiros." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Determinar a etiqueta do sistema de ficheiros." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "o sistema de ficheiros «%s» non admite etiquetas" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DISPOSITIVO" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Recuperar a información do dispositivo." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[VARIABELENTORNO]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Estabelecer a variábel co usuario de entrada." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Reiniciar o computador." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Gardar o compoñente de NÚMERO EN NOMEVARIBEL." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NÚMERO:]NOMEVARIABEL" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "CADEA REGEXP" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Probar se REGEXP coincide con CADEA." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NOME [VARIABEL] [SUXESTIONS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Buscar dispositivos por ficheiro. Se se especificou VARIÁBEL, o primeiro " +"dispositivo atopado gárdase nunha variábel." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Buscar dispositivos por etiqueta. Se se especificou VARIÁBEL, o primeiro " +"dispositivo atopado gárdase nunha variábel." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Buscar dispositivos por UUID. Se se especificou VARIÁBEL, o primeiro " +"dispositivo atopado gárdase nunha variábel." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Buscar dispositivos por un ficheiro." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Buscar dispositivos por etiqueta de sistema de ficheiros." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Buscar dispositivos por UUID de sistema de ficheiros." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Estabeleza unha variábel para o primeiro dispositivo atopado." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Non probar ningún dispositivo de disquete." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Primeiro, tente o HINT do dispositivo. Se HINT termina en coma, tente tamén " +"subparticións" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "SUXESTIÓN" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Proba primeiro o dispositivo SUXESTIÓN se se estiver a executar en IEEE1275. " +"Se SUXESTIÓN remata en coma, probe tamén as subparticións" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Proba primeiro o dispositivo SUXESTIÓN se se estiver a executar no BIOS. Se " +"SUXESTIÓN remata en coma, probe tamén as subparticións" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Proba primeiro o dispositivo SUXESTIÓN se admitir o acceso directo ao " +"hardware. Se SUXESTIÓN remata en coma, probe tamén as subparticións" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Proba primeiro o dispositivo SUXESTIÓN se se estiver a executar en EFI. Se " +"SUXESTIÓN remata en coma, probe tamén as subparticións" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Proba primeiro o dispositivo SUXESTIÓN se se estiver a executar en ARC. Se " +"SUXESTIÓN remata en coma, probe tamén as subparticións" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint SUXESTIÓN [--hint SUXESTIÓN] ...] NOME" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Buscar dispositivos por ficheiro, etiqueta de sistema de ficheiros ou UUID " +"de sistema de ficheiros. Se --set estiver especificado, o primeiro " +"dispositivo encontrado estabelécese como variábel. Se o nome da variábel non " +"se especifica, úsase «root»." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Rexistro %x de %x:%02x.%x é %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSICIÓN] [-d DISPOSITIVO] [-v VAR] [REXISTRO][=VALOR[:MÁSCARA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipular dispositivos PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Conta atrás prolixa." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Permitir a interrupción con ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NÚMERO_DE_SEGUNDOS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Agardar un número específico de segundos." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +#, fuzzy +msgid "assume input is a syslinux configuration file." +msgstr "Suponse que a entrada é unha frase de paso." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +#, fuzzy +msgid "Execute syslinux config in same context" +msgstr "Procesa a configuración legada no mesmo contexto" + +#: grub-core/commands/syslinuxcfg.c:195 +#, fuzzy +msgid "Execute syslinux config in new context" +msgstr "Procesa a configuración legada en novo contexto" + +#: grub-core/commands/syslinuxcfg.c:201 +#, fuzzy +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"A análise da configuración legada no mesmo contexto collendo só as entradas " +"do menú" + +#: grub-core/commands/syslinuxcfg.c:207 +#, fuzzy +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"A análise da configuración legada en contexto novo collendo só as entradas " +"do menú" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "non se especificou ningún terminal" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "non se atopou o terminal «%s»" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Terminais de entrada activos:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Terminais de entrada dispoñíbeis:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Terminais de saída activos:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Terminais de saída dispoñíbeis:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Liste ou seleccione un terminal de entrada." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Liste ou seleccione un terminal de saída." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESIÓN ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Avaliar unha expresión." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESIÓN" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Carga o mesmo ficheiro de múltiplas maneiras." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Especifica o tamaño de cada operación de lectura" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "tamaño de bloque incorrecto" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Tamaño do ficheiro: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Tempo transcorrido: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Velocidade: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s TAMAÑO] NOMEDOFICHEIRO" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Velocidade de lectura do ficheiro de proba." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "sen orde especificada" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Tempo transcorrido: %d.%03d segundos \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "ORDE [ARGUMENTOS]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Medida de tempo utilizado por ORDE" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Non fai nada, resultado satisfactorio." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Non fai nada, resultado non satisfactorio." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Comprobar se é compatíbel con USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "mala sinatura" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "non se atopou a chave pública %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "o módulo «%s» non está cargado" + +#: grub-core/commands/verify.c:1020 +#, fuzzy +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "FICHEIRO FICHEIRODESINATURA [FICHEIRODECHAVEPÚBLICA]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Comprobar a sinatura extraída." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +#, fuzzy +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Engadir a chave PKFILE ás chaves de confianza." + +#: grub-core/commands/verify.c:1029 +#, fuzzy +msgid "Show the list of trusted keys." +msgstr "Lista as chaves de confianza." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "IDDECHAVEPÚBLICA" + +#: grub-core/commands/verify.c:1032 +#, fuzzy +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Retirar o IDDECHAVE das chaves de confianza." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Só texto " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Cor directa, máscara: %d/%d/%d/%d pos: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "En paleta " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hércules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 (modo de vídeo de 256 cores) " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monocromo " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Modo de vídeo descoñecido " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " a suma de comprobación EDID non é correcta" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " Versión de EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Modo favorito: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Non hai dispoñíbel ningún modo favorito\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "a especificación de vídeo «%s» é incorrecta" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Lista de modos de vídeo compatíbeis:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Lenda: máscara/posición=vermello/verde/azul/reservado" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adaptador «%s»:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Non hai ningunha suxestión dispoñíbel" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Fallou a inicialización do adaptador de vídeo" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[LARGOxALTO[xFONDO]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Relacione os modos de vídeos dispoñíbeis. No caso de dar a resolución, " +"amosar só os modos que sexan coincidentes." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[LARGOxALTO]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Probar o subsistema de vídeo en modo LARGOxALTO." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Comprobar o subsistema de vídeo." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] UUIDDOGRUB [NOMEDAVARIÁBEL]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transformar o UUID de 64 bits a formato adecuado para XNU. No caso de dar -l " +"mantelo en minúsculas como o dá blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "fallo ao ler o sector 0x%llx de «%s»" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "fallo ao escribir o sector 0x%llx de «%s»" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Montar por UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Montar todos." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Montar todos os volumes que teñan unha indicación «boot» estabelecida." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "non se pode abrir «%s»: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "non se pode procurar «%s»: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "ORIXE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Monta un dispositivo cifrado." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Non foi posíbel atopar o volume físico «%s». Algúns módulos da imaxe do " +"núcleo deben faltar." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "non se atopou o volume físico %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "esgotouse o tempo de lectura de «%s»" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Non foi posíbel cargar sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Non foi posíbel cargar sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "non foi posíbel ler os metadatos ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "non é o ELI máxico ou a versión" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Tentando descifrar a chave mestra..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Introducir frase de contrasinal de %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Rañura %d aberta\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "tenta ler ou escribir fóra do disco «%s»" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "non se pode escribir no CDROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Están a utilizarse os controladores nativos do disco. Desbótase utilizar a " +"interface do disco de firmware." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +#, fuzzy +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"a súa partición de incorporación LDM é demasiado pequena; a incorporación " +"non será posíbel" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"este LDM non ten partición de incorporación; a incorporación non será posíbel" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Eliminar o controlador de bucle de retorno especificado." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] NOMEDISPOSITIVO FICHEIRO." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Facer unha unidade virtual cun ficheiro." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "a relocación 0x%x aínda non está implementada" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "sen táboa de símbolo" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "este ficheiro ELF non é do tipo apropiado" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Cargar e inicializar o emulador EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Finalizar a carga do emulador EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Non se cargou o emulador EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "non se atopou o símbolo «%s»" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Tipos de letra cargados:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FICHEIRO..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Especifique un ou máis ficheiros de tipos de letra para cargar." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Lista os tipos de letra cargados." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "demasiada profundiade do aniñamento de ligazóns simbólicas" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "intenta ler pasado o remate do ficheiro" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"non foi posíbel atopar un dispositivo membro necesario do sistema de " +"ficheiros multidispositivo" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "non é un cartafol" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "non é un ficheiro regular" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"o seu core.img é inusualmente longo. Non se vai axustar á área de " +"incorporación" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "o nome do ficheiro «%s» é incorrecto" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "produciuse un fallo na verificación da suma de comprobación" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "non hai ningunha chave de descifrado dispoñíbel" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "Produciuse un fallo na comprobación do MAC" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Suponse que a entrada está en bruto." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Suponse que a entrada está en hexadecimal." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Suponse que a entrada é unha frase de paso." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Escriba o contrasinal ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FICHEIRO]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importar a chave ZFS de embalaxe almacenada no FICHEIRO." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Retirouse o dispositivo virtual" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Falta o dispositivo virtual" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "O dispositivo virtual está desconectado" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "O dispositivo virtual no está óptimo" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "O dispositivo virtual está conectado" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Dispositivo virtual incorrecto: non hai un tipo dispoñíbel" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Dispositivo virtual como folla (sexa ficheiro ou disco)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Ruta de arranque: non está dispoñíbel\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Ruta de arranque: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Camiño: non está dispoñíbel" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Camiño : %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "DevId: non está dispoñíbel" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Devid: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +#, fuzzy +msgid "Incorrect VDEV" +msgstr "Réplica incorrecta" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, fuzzy, c-format +msgid "VDEV with %d children\n" +msgstr "Réplica con %d fillo\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, fuzzy, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "O número %d do elemento da réplica non é correcto\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, fuzzy, c-format +msgid "VDEV element number %d:\n" +msgstr "Número %d do elemento da réplica:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Tipo de dispositivo virtual descoñecido: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Estado do grupo: activo" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Estado do grupo: exportado" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Estado do grupo: estragado" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Estado do grupo: reservado para repoñer en quente" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Estado do grupo: dispositivo ARC de nivel 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Estado do grupo: desinicializado" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Estado do grupo: non dispoñíbel" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Estado do grupo: potencialmente activo" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Nome do grupo: non dispoñíbel" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Nome do grupo: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID do grupo: non dispoñíbel" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID do grupo: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Non foi posíbel obter o estado do grupo" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "O estado do grupo é irrecoñecíbel" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Non hai ningunha árbore virtual de dispositivos dispoñíbel" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Imprimir info de ZFS verbo do DISPOSITIVO." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "SISTEMAFICHEIROS [VARIÁBEL]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Imprimir ZFS-BOOTFSOBJ ou almacenala en VARIÁBEL" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Agora conecte o depurador remoto, por favor." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Arrancar o servizo GDB no porto dado" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Alto dentro do GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Deter o servizo GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "remate do ficheiro prematuro" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Traduza a cadea que contén a configuración actual." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Prema a tecla Intro para arrancar o sistema operativo seleccionado, «e» para " +"editar as ordes antes de arrancar ou «c» para obter unha liña de ordes. ESC " +"para volver ao menú anterior." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Prema a tecla Intro para arrincar o sistema operativo seleccionado, «e» para " +"editar as ordes antes de arrancar ou «c» para obter unha liña de ordes." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "intro: arranque, «e»: opcións, «c»: liña cmd" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "A entrada realzada executarase automaticamente en %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds restantes." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Menú de arranque GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s o valor é menor que ou igual a %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT o parámetro require un valor" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT o parámetro debe ser positivo" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Descoñécese o parámetro ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Lixo en ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Os parámetros obrigatorios ou opcionais das opcións longas son tamén " +"obrigatorios ou opcionais para calquera das opcións curtas que se " +"correspondan." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ou: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPCIÓN...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Probe '%s --help' ou '%s --usage' para máis información.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Informe dos erros a %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Produciuse un erro descoñecido do sistema" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "dar esta lista de axuda" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "dar unha mensaxe curta sobre o uso" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NOME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "estabelecer o nome do programa" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEGS" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "agardar durante SEGS segundos (predeterminado 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "imprimir versión do programa" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ERRO DE PROGRAMA) Non se coñece a versión!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Demasiados argumentos\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERRO DE PROGRAMA) Deberíase ter sido recoñecida!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: a opción «%s» é ambigua; posibilidades:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a opción «--%s» non permite un argumento\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a opción «%c%s» non permite un argumento\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a opción «--%s» require un argumento\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opción non recoñecida «--%s»\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opción non recoñecida '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opción incorrecta -- «%c»\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a opción require un argumento -- «%c»\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a opción «-W %s» é ambigua\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a opción «-W %s» non permite un argumento\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a opción «-W %s» require un argumento\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Correcto" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Non hai coincidencias" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expresión regular incorrecta" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Carácter de ordenación incorrecto" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nome de clase de carácter incorrecto" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barra invertida na fin de liña" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Referencia cara atrás incorrecta" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Non hai coincidencia con [ ou [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Non hai coincidencia con ( ou \\C" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Non hai coincidencia \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "O contido de \\{\\} é incorrecto" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Fin de intervalo incorrecto" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Esgotouse a memoria" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "A expresión regular precedente é incorrecta" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Remate de expresión regular prematuro" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "A expresión regular é demasiado grande" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Non hai coincidencia con ) ou \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "Erro de expresión regular descoñecido" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Non hai expresión regular anterior" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Ola mundo" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Diga «Ola mundo»." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "tenta procurar fóra do ficheiro" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "O formato gzip non é compatíbel" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "O ficheiro lzop está corrupto" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "O ficheiro xz está corrupto ou ten opcións de bloque incompatíbeis" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "incorrecto ELF máxico dependente da arquitectura" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VALOR]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Defina unha variábel de entorno." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Retirar unha variábel de entorno." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Lista de dispositivos ou ficheiros." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Insira un módulo." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "Non se atopou o disco «%s»" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "tenta ler ou escribir fóra da partición" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "incorrecto ELF máxico independente da arquitectura" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "a conta do dispositivo excede o límite" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "non é posíbel escribir en «%s»: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"a entrada «%s» do device.map é incorrecta. Ignórase. Corrixa ou elimine o " +"seu device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"o nome da unidade «%s» en device.map é incorrecto. Utilice %s no seu lugar. " +"Utilice a forma [hfc]d[0-9]* (i.e. «hd0» ou «cd»)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "non se puido abrir «%s»: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NOME_DO_DISPOSITIVO" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Estabelecer o dispositivo raíz." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "utilice FICHEIRO como mapa de dispositivos [predeterminado=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +#, fuzzy +msgid "use FILE as memdisk" +msgstr "utilizar FICHEIRO como grub-glue-efi" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "utilice os ficheiros GRUB no cartafol DIR [predeterminado=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "imprimir mensaxes prolixas." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "agardar ata que un depurador o enganche" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "O argumento extra «%s» é descoñecido." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "emulador GRUB." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Produciuse un erro ao procesar os argumentos da liña de ordes\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Execute «gdb %s %d» e estabeleza os ARGS.HOLD a cero.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: aviso:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: erro:" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "a imaxe do firmware é demasiado grande" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "sistema de ficheiros descoñecido" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Fallou o apagado" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Fallou a saída" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "detectouse desbordamento" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Descartando a partición aniñada impropiamente (%s, %s, %s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Orde «%s» descoñecida.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Presentar esta axuda e saír." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Presentar a utilización desta orde e saír." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "falta a opción obrigatoria «%s»" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "o argumento «%s» require un enteiro" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"asignouse un valor ao argumento «%s» malia que non require un argumento" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Imprimir traza marcha atrás." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB aínda non sabe como deter esta máquina!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "especificación de cor incorrecta «%s»" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Fallou o reinicio" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +#, fuzzy +msgid "invalid zImage" +msgstr "intervalo de tipo de letra incorrecto" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "Dispositivo incorrecto «%s».\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Cargar Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Cargar initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "Cargar imaxe XNU." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "cómpre cargar o núcleo primeiro" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, co hipervisor (VMM ou monitor de máquina virtual) Xen" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Cargar o módulo do núcleo NetBSD." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPCS]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Sistema de inicio por BIOS." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Cargar outro cargador de arranque." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Presentar a saída en todas as consolas." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Usar a consola serie." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Preguntar polo nome do ficheiro desde o que reiniciar." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Utilizar o CDROM como root." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Invocar a configuración de enrutamento do usuario." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Entrar no KDB ao iniciar." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Usar o depurador remoto GDB en lugar do DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Desactivar toda a saída de arranque." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Agardar por cada tecla presionada despois de cada liña de saída." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Utilizar o dispositivo raíz integrado." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Arrancar no modo de usuario único." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Arrancar con mensaxes prolixas." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Non reiniciar, só deter." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Cambiar os dispositivos configurados." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIDADE[,VELOCIDADE]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Desactivar SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Desactivar ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Non presentar as mensaxes de diagnóstico do arranque." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Arrancar con mensaxes de depuración." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Suprimir a saída normal (permanecen os avisos)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ENDEREZO|comUNIDADE][,VELOCIDADE]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nome" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tipo" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "enderezo" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "tamaño" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Arranque no modo cego" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Cargar o núcleo de FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Cargar o núcleo de OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Cargar o núcleo de NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Cargar o entorno FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Cargar o módulo do núcleo FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Cargar o módulo do núcleo NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Cargar o módulo do núcleo NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Cargar o módulo do núcleo FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Cargar o disco de memoria kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Cargar outra carga útil en arranque do núcleo" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "O antigo parámetro «ask» xa non se admite." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s é obsoleto. Utilice gfxpayload=%s antes da orde linux no seu lugar.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s é obsoleto. O modo VGA %d xa non se recoñece. Utilice " +"gfxpayload=LARGOxALTO[xFONDO] antes da orde linux no seu lugar.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FICHEIRO" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "o tamaño de «%s» é demasiado grande" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Cargar FreeDOS kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Cargar NTLDR ou BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Sobrescribir a suposición dos dispositivos Plan9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "DISPOSITIVOGRUB=DISPOSITIVOPLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "ARGUMENTOS DO NÚCLEO" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Cargar o núcleo de Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Cargar unha imaxe PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +#, fuzzy +msgid "Load Truecrypt ISO." +msgstr "Cargar a chave de cifrado zfs." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "Retirar un módulo." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Prema calquera chave para arrincar xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Cargar o envorcado «propiedades-do-dispositivo»." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Non foi posíbel localizar o controlador FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "O protocolo FPSWA non foi quen de atoar a interface" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Non se atopou FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Revisión de FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FICHEIRO [ARGUMENTOS...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Presentar a versión FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "AVISO: non haberá consola para o sistema operativo" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Cargar o núcleo multiarranque 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Cargar un módulo multiarranque 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Cargar un núcleo multiarranque." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Cargar un módulo multiarranque." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Modo de imaxe de fondo." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(=%ESTENDIDA%)|normal(=%NORMAL%)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Cargar imaxe XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Cargar imaxe XNU de 64-bit." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Cargar paquete de extensión XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Cargar extensión XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "CARTAFOL [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Cargar o cartafol de extensión XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Cargar o disco de memoria XNU. Está dispoñíbel no SO como md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Cargar unha imaxe de benvida para XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Cargar unha imaxe de hibernación XNU." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ENDEREZO1,MASCARA1[,ENDEREZO2,MASCARA2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Declarar rexións de memoria como defectuosas (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "DE[K|M|G] A[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Retirar calquera rexión de memoria dentro dun intervalo especificado." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "agardábanse catro argumentos" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "a interface de rede «%s» é descoñecida" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "non se atopou información de DHCP" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "non se atoparon opcións de DHCP" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "non se atopou a opción %d de DHCP" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "non se recoñece a especificación «%s» do formato de opción DHCP" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "non se atopou a tarxeta de rede" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "non foi posíbel autoconfigurar %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[TARXETA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "realizar unha configuración automática bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR INTERFACE NÚMERO DESCRICIÓN" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"recuperar a opción DHCP e gardala en VAR. Se VAR xa está - entón imprimir o " +"valor." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "non se configuraron servidores DNS" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "o compoñente de nome de dominio é demasiado longo" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "non se atopou ningún rexistro de DNS" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "Non se recibiu ningunha resposta de DNS" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +#, fuzzy +msgid "invalid argument" +msgstr "o parámetro %s non é correcto" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADDRESS DNSSERVER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Realizar unha procura de DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Engadir un servidor de DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Retirar un servidor de DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Listas os servidores de DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "non foi posíbel enviar un paquete de rede" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "compatíbel coa interface protexida de 16 bit\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "A resposta HTTP non é compatíbel" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "O erro HTTP %d: %s non é compatíbel" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "esgotouse o tempo ao abrir «%s»" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "esgotado: non foi posíbel resolver o enderezo de hardware" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "non se pode resolver o enderezo %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "non se recoñece o enderezo de rede «%s»" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "non se pode acadar o destino" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "detectouse o bucle de rutas" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "non se atopou o enderezo" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "non pode eliminar este enderezo" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "O tipo %d de enderezo de hw non é compatíbel\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "O tipo %d de enderezo non é compatíbel\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "agardábanse tres argumentos" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "non se atopou a tarxeta" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporal" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "O tipo de enderezo %d é descoñecido\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "non se especificou ningún servidor" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "esgotouse o tempo de lectura de «%s»" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "NOMECURTO TARXETA ENDEREZO [HWADDRESS]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Engadir un enderezo de rede." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[TARXETA [HWADDRESS]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Realizar unha autoconfiguración IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "NOMECURTO" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Eliminar un enderezo de rede." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "NOMECURTO REDE [INTERFACE] gw PASARELA]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Engadir unha ruta de rede." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Retirar unha ruta de rede." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "listas rutas de rede" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "listar tarxetas de rede" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "listar enderezos de rede" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "conexión rexeitada" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "conexión esgotada" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Escriba o seu nome de usuario: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[LISTAUSUARIOS]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Comprobar se o usuario está na LISTAUSUARIOS." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "As ordes posíbeis son:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Os dispositivos posíbeis son:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Os ficheiros posíbeis son:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "As particións posíbeis son:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Os argumentos posíbeis son:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "As cousas posíbeis son:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Aviso: erro de sintaxe (falta a barra) en «%s»\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Aviso: a cor de primeiro plano «%s» non é válida\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Aviso: a cor de fondo «%s» non é válida\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Exportar variábeis." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Domingo" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Luns" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Martes" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Mércores" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Xoves" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Venres" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Sábado" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "o módulo non está cargado" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "Versión do GNU GRUB %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC en calquera momento para saír." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"aAdmítese unha liña de edición mínima tipo BASH. Para a primeira palabra, " +"TAB lista as posíbeis ordes de compleción. En calquera outra posición, TAB " +"lista os dispositivos posíbeis ou os ficheiros que completar. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Despexar a pantalla." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Entrar no modo normal." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Saír do modo normal." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Prema calquera tecla para continuar..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Arranque de «%s»" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Volta a «%s»" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" +"Produciuse un fallo no arranque de ambas as entradas, a predeterminada e a " +"proba de fallos.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Arranque dunha lista de ordes" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"É compatíbel co modo mínimo de edición en pantalla estilo Emacs. Completado " +"de listas con TAB. Prema Ctrl-x ou F10 para iniciar, Ctrl-c ou F2 para a " +"liña de ordes ou ESC para descartar cambios e volver ao menú do GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Use as teclas %C e %C para seleccionar que entrada realzar." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partición %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Dispositivo %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Non se pode acceder ao sistema de ficheiros" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Sistema de ficheiros de tipo %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etiqueta «%s»" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Hora da última modificación %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Non se detectou ningún sistema de ficheiros coñecido" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - A partición comeza en %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Tamaño do sector %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Tamaño total descoñecido" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Tamaño total %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MÁIS INFORMACIÓN--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "non é posíbel abrir o ficheiro do SO «%s»: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +#, fuzzy +msgid "no compression is available for your platform" +msgstr "" +"Non hai suxestións dispoñíbeis para a súa plataforma. Espérase un rendemento " +"reducido." + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Fallou ao crear a árbore do «device-mapper»" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "non pode montar o volume cifrado «%s»: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "non foi posíbel abrir o geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "non foi posíbel atopar un consumidor geli" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "non foi posíbel recuperar o UUID geli" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "non foi posíbel atopar a clase «part» do geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "tamaño de dispositivo non aliñado" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "tentando ler a imaxe principal «%s» desde o GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "tentando ler a imaxe principal «%s» desde o GRUB de novo" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "non é posíbel ler correctamente «%s»" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "fallou a lectura do resto de sectores da imaxe principal" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "non pode obter liña de ordes de tradutor para a ruta «%s»: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "a liña de ordes de tradutor está baleira na ruta «%s»" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"o tradutor «%s» na ruta «%s» ten varias palabras sen opción, cando menos " +"«%s» e «%s»" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"o tradutor «%s» para a ruta «%s» dáse só con opcións, non pode atopar a " +"parte do dispositivo" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "non é posíbel recuperar as listas de bloques: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "o tamaño do bloque non se pode dividir entre 512" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "tamaño de bloque incorrecto" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "non é posíbel recuperar as listas de bloques" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "erro de ioctl RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "versión de RAID incompatíbel: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "erro de ioctl GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "erro de ioctl GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Non é posíbel abrir o fluxo de %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "o dispositivo RAID «%s» é dun tipo descoñecido" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"non se atopou «obppath» nos cartafoles superiores de «%s», non se descubre " +"ningún nome IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "produciuse un fallo ao obter a ruta canónica de «%s»" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "tipo de dispositivo descoñecido %s\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Utilización: %s DISPOSITIVO\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Non é posíbel ramificar: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Non é posíbel crear a canalización: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "non se pode restaurar o cartafol orixinal" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "non pode iniciar «%s»: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "non é posíbel renomear o ficheiro de %s a %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "non se pode restaurar o cartafol orixinal" + +#: grub-core/osdep/unix/platform.c:77 +#, fuzzy, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"Non é posíbel atopar a ruta á árbore do dispositivo IEEE1275 para %s.\\n " +"Deberá estabelecer a variábel «boot-device» manualmente.\\n" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, fuzzy, c-format +msgid "%s: not found" +msgstr "%s: Non atopado.\\n" + +#: grub-core/osdep/unix/platform.c:219 +#, fuzzy, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"Terá que estabelecer a variábel «boot-device» manualmente. No indicador " +"IEEE1275, escriba:" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Terá que estabelecer «SystemPartition» e «OSLoader» manualmente." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "falta «/» no nome canónico do ficheiro" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "fallou a cygwin_conv_path()" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +#, fuzzy +msgid "couldn't retrieve random data" +msgstr "non se poden recuperar datos aleatorios para o salgado (salt)" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +#, fuzzy +msgid "unexpected EFI error" +msgstr "remate de ficheiro inesperado" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"esta etiqueta de partición GPT non contén unha partición de arranque do " +"BIOS; non será posíbel a incorporación" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"a súa partición de arranque do BIOS é demasiado pequena, non será posíbel a " +"incorporación" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"O sector %llu xa o utiliza o controlador de raid «%s»; evítase. Pregúntelle " +"ao fabricante para non almacenar datos na fenda MBR" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"O sector %llu xa o utiliza o programa «%s»; evítase. Este software pode " +"provocar no arranque ou noutros sitios problemas no futuro. Consúltelles aos " +"seus autores para non almacenar datos no sector de inicio" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"xa outro software está a usar a área de incorporación, e non sitio para o " +"core.img. Tal software adoita tentar gardar datos de formas que evitan a " +"detección. Recomendámoslle que investigue" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"esta etiqueta de partición con estilo msdos non ten o salto posterior ao " +"MBR; non será posíbel a incoporaciónl" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"a súa área de incorporación é estrañamente pequena. Core.img non vai caber " +"nela." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Facer activa a partición" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "non é unha partición primaria" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "A partición %d está activa agora. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Despexada a marca activa en %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Cambiar o tipo de partición" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Estabelecer a marca «agochada» no tipo de partición" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "o tipo de partición 0x%x non é correcto" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Estabelecendo o tipo de partición como 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "non pode romper 0 bucles" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "non está no corpo da función" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "non é correcto o nome da variábel «%s»" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "remate de ficheiro inesperado" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Saír de bucles" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Continuar bucles" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Modificar parámetros posicionais." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALOR]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Estabelecer parámetros posicionais." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Volver desde unha función." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FICHEIRO" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Cargar imaxe de fondo no terminal activo." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Estabelecer cor de fondo no terminal activo." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Amosar o contido da consola CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Estabelecer a unidade serie." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Estabelecer o enderezo do porto serie." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Estabelecer a velocidade do porto serie." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Estabelecer a lonxitude da palabra no porto serie." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Estabelecer a paridade do porto serie." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Estabelecer o bit de parada do porto serie." + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "Estabelecer a unidade serie." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "non se atopou o porto serie «%s»" + +#: grub-core/term/serial.c:254 +#, fuzzy +msgid "unsupported serial port flow control" +msgstr "largura de palabra do porto serie incompatíbel" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPCIÓNS...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Configurar o porto serie." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "tipo de terminfo descoñecido «%s»" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "UTF-8 visualmente ordenado" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Codificación descoñecida" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Tipos de terminfo actuais:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "O terminal só é ASCII [predeterminado]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "O terminal é un UTF-8 ordenado loxicamente." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "O terminal é un UTF-8 visualmente ordenado." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "O terminal especificou a xeometría." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "LARGURAxALTURA." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "a especificación de dimensións do terminal é incorrecta" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "non se atopou o terminal %s ou non o manexa o terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] TERM [TIPO]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Estabelecer o tipo terminfo de TERM como TYPE.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Imprimir e executar argumento de bloque." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "o ficheiro bitmap «%s» ten un formato incompatíbel" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE info: versión: %d.%d OEM software rev: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " memorial total: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "non se atopou o modo apropiado de vídeo" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "acceso denegado" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +#, fuzzy +msgid "MODULES" +msgstr "MÓDULO" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "escoller a compresión que se vai utilizar nas imaxes principais" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "utilice imaxes e módulos baixo DIR [predeterminado=%s/]" + +#: include/grub/util/install.h:55 +#, fuzzy, c-format +msgid "use translations under DIR [default=%s]" +msgstr "utilice imaxes e módulos baixo DIR [predeterminado=%s/]" + +#: include/grub/util/install.h:58 +#, fuzzy, c-format +msgid "use themes under DIR [default=%s]" +msgstr "utilice imaxes e módulos baixo DIR [predeterminado=%s/]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "incorpora FICHEIRO como chave pública para a comprobación de sinaturas" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "non é posíbel renomear o ficheiro de %s a %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "o disco non existe, volvendo atrás ao dispositivo da partición %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Ordes:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Crear un ficheiro baleiro de bloque de entorno." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Listar as variábeis actuais." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "estabelecer [NOME=VALOR ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Estabelecer as variábeis." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "sen definir [NOME ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Eliminar variábeis." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opcións:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Cómpre especificar cando menos unha orde.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "NOMEDOFICHEIRO ORDE" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Ferramenta para editar bloques de entorno." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "o bloque de entorno non é correcto" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "o parámetro %s non é correcto" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "bloque de entorno demasiado pequeno" + +#: util/grub-fstest.c:107 +#, fuzzy, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "falla a lectura do disco no desprazamento %lld, tamaño %d" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "o valor %lld de escape non é correcto" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "erro de lectura no desprazamento %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "non é posíbel abrir o ficheiro do SO «%s»: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "non pode escribir na stdout: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "comparar fallo no desprazamento %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Erro na apertura do ficheiro do SO %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "a orde «loopback» falla: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "a orde «cryptomount» falla: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "non foi posíbel recuperar o UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls RUTA" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Listar ficheiros nA RUTA." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FICHEIRO LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Copiar FICHEIRO no ficheiro local LOCAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FICHEIRO" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Copiar FICHEIRO na saída estándar." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FICHEIRO LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Comparar FICHEIRO co ficheiro local LOCAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "FICHEIRO hex" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Amosar os contidos do FICHEIRO en hex." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "FICHEIRO crc" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Obter a suma de comprobación CRC32 do FICHEIRO." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "FICHEIRO da lista de bloqueo" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Amosar a lista de bloqueo do FICHEIRO." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "DISPOSITIVO xnu_uuid" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Contar UUID XNU do dispositivo." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NÚMERO" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Saltar N bytes do ficheiro de saída." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Manexar N bytes no ficheiro de saída." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Especificar o número de ficheiros de entrada." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Estabelecer a variábel do entorno de depuración." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Montar os dispositivos cifrados." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FICHEIRO|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Cargar a chave de cifrado zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Datos sen comprimir." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Conta de disco incorrecta.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "A conta de discos debe preceder a lista de discos.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Sen ordes especificadas.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Non hai parámetros abondo para a orde.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "A orde %s é incorrecta.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ORDES de IMAGE_PATH" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Ferramenta de depuración para o controlador do sistema de ficheiros." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "estabelecer o nome do ficheiro de entrada para a parte de 32 bits." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "estabelecer o nome do ficheiro de entrada para a parte de 64 bits." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "estabelecer o nome do ficheiro de saída. O predeterminado é STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPCIÓNS]" + +#: util/grub-glue-efi.c:95 +#, fuzzy +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Xunta os executábeis de 32 e 64 bits nun único gran binario de Apple." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Falta o ficheiro de entrada\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "non se pode abrir «%s»: %s" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "non se puido abrir «%s»: %s" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "non se pode abrir «%s»: %s" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "non se pode procurar «%s»: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage compílase sen compatibilidade con XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Formato de compresión descoñecido %s" + +#: util/grub-install-common.c:389 +#, fuzzy, c-format +msgid "Unrecognized compression `%s'" +msgstr "A opción «%s» non se recoñece\\n" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "formato de destino descoñecido %s\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "non é posíbel atopar a orde «%s»" + +#: util/grub-install-common.c:914 +#, fuzzy, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s non existe. Especifique --target ou --directory\\n" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "o nome do ficheiro «%s» é incorrecto" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "o argumento «%s» é descoñecido" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Máis ca un dispositivo de instalación?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"instalar as imaxes do GRUB no cartafol DIR/%s en lugar de facelo no cartafol " +"%s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "DESTINO" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, fuzzy, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "instalar GRUB na plataforma DESTINO [predeterminada=actual]" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"facer a unidade tamén ser arrancábel como disquete (o predeterminado con " +"dispositivos fdX). A unidade pode estropearse con algúns BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "eliminar o mapa do dispositivo se xa existe" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "instalar incluso no caso de detectar problemas" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "utilizar o ficheiro identificador incluso se o UUID está dispoñíbel" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"módulo do disco para utilizar (biodisco ou nativo). Esta opción só está " +"dispoñíbel no BIOS de destino." + +#: util/grub-install.c:279 +#, fuzzy +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"non actualiza a variábel NVRAM «boot-device». Esta opción só está dispoñíbel " +"nos destinos IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "non facer probas de sistemas de ficheiros no DISPOSITIVO" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +#, fuzzy +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"módulo do disco para utilizar (biodisco ou nativo). Esta opción só está " +"dispoñíbel no BIOS de destino." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"o dispositivo de instalación é retirábel. Esta opción só está dispoñíbel en " +"EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +#, fuzzy +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"o ID do cargador de arranque (bootloader). Esta opción só está dispoñíbel en " +"EFI." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "utilice CARTAFOL como a raíz da partición do sistema EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "utilizar FICHEIRO como fonte para a etiqueta" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "utilizar COR para etiqueta" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "utilizar COR para fondo de etiqueta" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "utilizar CADEA como versión de produto" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "Utilización: %s [OPCIÓN] [INSTALAR_SEU_DISPOSITIVO]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Instalar o GRUB na súa unidade." + +#: util/grub-install.c:363 +#, fuzzy, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"%s copia as imaxes do GRUB en %s. Nalgunhas plataformas, tamén\n" +"pode instalar o GRUB no sector de arranque.\\n" + +#: util/grub-install.c:668 +#, fuzzy, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" +"A unidade %s está definida múltiplas veces no mapa de dispositivos %s\\n" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Non é posíbel determinar a súa plataforma. Utilice --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "Non se especificou o dispositivo de instalación." + +#: util/grub-install.c:1043 +#, fuzzy +msgid "cannot find EFI directory" +msgstr "non é un cartafol" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "non foi posíbel atopar un dispositivo para %s (está montado /dev?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"non foi posíbel atopar unha unidade GRUB para %s. Comprobe o seu device.map" + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s non parece unha partición EFI.\\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "Non é posíbel crear a canalización: %s" + +#: util/grub-install.c:1461 +#, fuzzy +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"Non hai suxestións dispoñíbeis para a súa plataforma. Espérase un rendemento " +"reducido." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +#, fuzzy +msgid "the chosen partition is not a PReP partition" +msgstr "A partición escollida non é uha partición PReP." + +#: util/grub-install.c:1772 +#, fuzzy +msgid "failed to copy Grub to the PReP partition" +msgstr "Fallou a copia do Grub á partición PReP." + +#: util/grub-install.c:1777 +#, fuzzy, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"A partición PReP non está baleira. De estar seguro que a quere utilizar, " +"execute dd para limpala:" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "O id do distribuidor EFI non está especificado." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" +"AVISO: non se realizou ningunha instalación específica para ningunha " +"plataforma" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "A instalación finalizou. Non se informou de ningún erro." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Non se especificou ruta nin dispositivo.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Utilización: %s [FICHEIRO_ENTRADA [FICHEIRO_SAÍDA]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Erro %d de Freetype ao cargar o glifo 0x%x para U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (medial)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (de esquerda a dereita)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (de dereita a esquerda)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Fóra do intervalo de substitución (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Fóra do intervalo de procura: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Tipo de substitución non compatíbel: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Especificación de substitución non compatíbel: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Especificación de cobertura non compatíbel: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" +"AVISO: parámetros de funcionalidades do tipo de letra non compatíbeis: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "gardar a saída en FICHEIRO [requirido]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "seleccionar o índice da faciana" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "DESDE-ATA[,DESDE-ATA]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "estabelecer o intervalo do tipo de letra" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "estabelecer o nome da familia" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "TAMAÑO" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "estabelecer tamaño de letra" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "estabelecer a medida descendente da letra" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "estabelecer a medida ascendente da letra" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "converter en letra grosa" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "forzar o autosuavizado" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "desactivar o suavizado" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignorar os bitmap prefacturados ao cargar" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "intervalo de tipo de letra incorrecto" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPCIÓNS] FICHEIROS_LETRAS" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Converter os formatos comúns de tipos de letra en PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "debe especificarse o ficheiro de saída" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "Fallou FT_Init_FreeType" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "non se pode abrir o ficheiro %s, índice %d: erro %d" + +#: util/grub-mkfont.c:1229 +#, fuzzy, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "non se pode estabelecer o tamaño %dx%d do tipo de letra" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "estabeleza o prefixo do cartafol [predeterminado=%s]" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +#, fuzzy +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"incorpora FICHEIRO como unha imaxe do disco de memoria\n" +"Implica «-p (memdisk)/boot/grub» pero o prefixo pódese sobrescribir con " +"opcións posteriores" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "incorpora FICHEIRO como configuración adiantada" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "engadir o segmento NOTA para CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "imprime unha imaxe xerada no FICHEIRO [predeterminado=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMATO" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "xerar unha imaxe en FORMATO" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "formatos dispoñíbeis:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "formato de destino descoñecido %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPCIÓN]... [MÓDULOS]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Facer unha imaxe arrancábel de GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Formato de destino non especificado (utilice a opción -O)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "Formato de destino non especificado (utilice a opción -O)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "estabelecer o nome de ficheiro de entrada. O predeterminado é STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Identificador do teclado descoñecido %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Código de teclado descoñecido 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"ERRO: non se atopou un deseño de teclado correcto. Comprobe a entrada.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Xerar un deseño de teclado GRUB a partir do da consola." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "cartafol raíz no servidor TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "cartafol relativo no servidor de rede" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "Plataforma non compatíbel %s\\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, fuzzy, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Creouse o cartafol de arranque desde rede para %s. Configure o seu servidor " +"DHCP para apuntar a %s\\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Número de iteracións PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Tamaño do hash xerado" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Tamaño do salgado (salt)" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Xerar o hash dun contrasinal PBKDF2." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "fallo ao ler o contrasinal" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Reescribir o contrasinal: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "os contrasinais non coinciden" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "non se poden recuperar datos aleatorios para o salgado (salt)" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "erro de cifrado número %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "O hash do PBKDF2 do seu contrasinal é %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Non se especificou a ruta.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "RUTA" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Transformar un nome de ficheiro do sistema nun de GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "gardar imaxes ROM no CARTAFOL [opcional]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "utilizar FICHEIRO como xorriso [opcional]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "utilizar CADEA como nome de produto" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"activar arranque sparc. Desactiva HFS+, APM, ARCS e arranca como imaxe de " +"disco para PC i386" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"activa o arranque ARCS (máquinas mips tipo big-endian, maiormente SGI). " +"Desactiva HFS+, APM, sparc64 e arranca como imaxe de disco en PC i386" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Facer imaxe de do GRUB en CD-ROM, disco, dispositivo USB ou disquete " +"arrancábel." + +#: util/grub-mkrescue.c:130 +#, fuzzy, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"%s xera unha imaxe de rescate arrancábel con ficheiros de orixe específicos, " +"cartafoles de orixe ou as opcións mkisofs listadas na saída de «%s»\\n" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Opción -- troca o modo de ordes ao nativo de xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"O enderezo de correo para solicitudes de apoio técnico a ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "Utilización: %s [OPCIÓN] ORIXE...\\n" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, fuzzy, c-format +msgid "enabling %s support ..." +msgstr "Activando o apoio de %s ...\\n" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"O seu xorriso non admite «--grub2-boot-info». Algunhas funcionalidades están " +"desactivadas. Utilice xorriso 1.2.9 ou posterior." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"O seu xorriso non admite «--grub2-boot-info». A imaxe principal é demasiado " +"grande. Arrancar como disco está desactivado. Utilice xorriso 1.2.9 ou " +"posterior." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Xerar unha imaxe independente (que conteña todos os módulos) no formato " +"seleccionado" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMAXE1 [IMAXE2 ...] PUNTO_DE_MONTAXE" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "necesita unha imaxe e un punto de montaxe" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "o argumento dado é un dispositivo do sistema, non unha ruta" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +#, fuzzy +msgid "print TARGET" +msgstr "DESTINO" + +#: util/grub-probe.c:709 +#, fuzzy +msgid "available targets:" +msgstr "formatos dispoñíbeis:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPCIÓN]... [RUTA|DISPOSITIVO]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Comproba a información do dispositivo nunha ruta dada (ou nun dispositivo, " +"no caso de ter a opción -d)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "ler o texto do FICHEIRO." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "utilizar COR para texto" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "utilizar COR de fondo" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +#, fuzzy +msgid "set the label to render" +msgstr "estabelecer a etiqueta que renderizar." + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "utilizar FICHEIRO como tipo de letra (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Renderizar a .disk_label de Apple." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Faltan argumentos\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[RUTA]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Comproba o ficheiro de configuración do script de GRUB en busca de erros de " +"sintaxe." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Erro sintáctico na liña %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "utilizar FICHEIRO como imaxe de arranque [predeterminado=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "utilizar FICHEIRO como imaxe principal [predeterminado=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Non se especificou ningún dispositivo.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Configurar imaxes de arranque desde o DISPOSITIVO.\n" +"\n" +"Non debería executar este programa directamente de modo ordinario. Utilice " +"grub-install maiormente." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "O DISPOSITIVO debe ser un de sistema operativo (i.e. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Dispositivo incorrecto «%s».\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +#, fuzzy +msgid "write output to FILE [default=stdout]." +msgstr "imprime unha configuración xerada no FICHEIRO [predeterminado=stdout]" + +#: util/grub-syslinux2cfg.c:148 +#, fuzzy +msgid "Transform syslinux config into GRUB one." +msgstr "Transformar un nome de ficheiro do sistema nun de GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "non é posíbel comprimir a imaxe do núcleo" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "compresión descoñecida %d\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "O descompresor é demasiado grande" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "a imaxe principal é demasiado grande (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "a imaxe do núcleo é demasiado grande (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "o tamaño de diskboot.img debe ser de %u bytes" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img non acha a versión boa coñecida. Proceda segundo o seu propio " +"criterio" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "a imaxe do firmware é demasiado grande" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "formato de liña incorrecto: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "o primeiro sector do ficheiro principal non está aliñado co sector" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "atopáronse datos do sector non aliñado no ficheiro principal" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "os sectores do ficheiro principal están demasiado fragmentados" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "o tamaño de «%s» non é %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "o tamaño de «%s» é demasiado pequeno" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Tentando instalar o GRUB nun disco con múltiplas etiquetas de partición ou " +"tanto con etiquetas de partición e sistema de ficheiros. Aínda non se " +"permite iso." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"non é posíbel identificar un sistema de ficheiros en %s; non se pode facer a " +"proba de seguranza" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"parece que %s contén un sistema de ficheiros %s que non se sabe se reserva " +"ningún espazo para un arranque de tipo DOS. Instalar GRUB pode conducir á " +"DESTRUCIÓN do SISTEMA_DE_FICHEIROS se datos valiosos se sobrescriben coa " +"instalación de grub (--skip-fs-probe desactiva esta comprobación, utilícea " +"segundo o seu propio criterio)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s parece conter un mapa de partición %s que non se sabe se reserva espazo " +"para o arranque de estilo DOS. Instalar o GRUB alí pode conducir á " +"DESTRUCIÓN do SISTEMA_ DE_FICHEIROS se datos valiosos se sobrescriben coa " +"instalación do grub (--ignore-fs-examine desactiva esta comprobación; " +"utilícea segundo o seu propio criterio)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s parece conter un mapa de partición %s e LDM que non se sabe se ten unha " +"combinación segura. Instalar o GRUB alí pode conducir á DESTRUCIÓN do " +"SISTEMA_ DE_FICHEIROS se determinados datos valiosos se sobrescriben coa " +"instalación do grub (--skip-fs-probe desactiva esta comprobación; utilícea " +"segundo o seu propio criterio)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Tentar instalar o GRUB nun disco sen particionar ou nunha partición. É moi " +"MALA idea." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Tentar instalar o GRUB nun disco con múltiplas etiquetas de partición. Isto " +"aínda non é quen de facelo." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "O estilo de partición «%s» non admite a incorporación" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "O sistema de ficheiro «%s» non admite a incorporación" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"A súa área de incorporación é estrañamente pequena. A core.img no caberá " +"nela." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "non hai terminador na imaxe principal" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "non coincide a versión da core.img" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"a incorporación non é posíbel pero resulta requirida para instalación RAID e " +"LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "non se pode determinar o sistema de ficheiros de %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "o sistema de ficheiros «%s» non admite listas de bloques" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"non é posíbel a incorporación pero resulta requirido para a instalación " +"entre particións (cross-disk)" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Non é posíbel a incorporación. GRUB só se pode instalar nesta configuración " +"mediante o uso de listas de bloques. Porén, as listas de bloques non son " +"FIÁBEIS e non se recomenda o seu uso." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "non se procederá mediante listas de bloques" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "as listas de bloques non son correctas" + +#: util/setup.c:767 +#, fuzzy +msgid "blocklists are incomplete" +msgstr "as listas de bloques non son correctas" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Utilización: %s -o SAÍDA ARGUMENTOS_CKBMAP...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Facer un ficheiro co deseño do teclado GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "imprimir esta mensaxe e saír" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "imprimir a versión da información e saír" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s xera un deseño de teclado para GRUB utilizando ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Informe dos erros a ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: a opción require un argumento -- «%s»\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Utilización: %s [OPCIÓN]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Xerar un ficheiro de configuración do GRUB" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "imprime unha configuración xerada no FICHEIRO [predeterminado=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "A opción «%s» non se recoñece\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Debe executar isto como root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Non atopado.\\n" + +#: util/grub-mkconfig.in:238 +#, fuzzy +msgid "Generating grub configuration file ..." +msgstr "Xerar un ficheiro de configuración do GRUB" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Detectáronse erros sintácticos no ficheiro de configuración do GRUB xerado.\n" +"Asegúrese de que non hai erros en /etc/default/grub\n" +"e nos ficheiros /etc/grub.d/* ou escriba un informe de erro co\n" +"%s ficheiro anexado." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "feito" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Aviso:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Utilización: %s [OPCIÓN] ENTRADA_DE_MENÚ\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Estabelecer a entrada predeterminada do menú de arranque no GRUB, só para o " +"seguinte arranque." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"esperábanse as imaxes do GRUB no cartafol CARTAFOL//%s en lugar do cartafol " +"%s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Máis ca unha entrada do menú?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "A entrada do menú non está especificada." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Estabelecer a entrada predeterminada do menú de arranque no GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Isto require a opción GRUB_PREDETERMINADO=gardada en %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ENTRADA_DE_MENÚ é un número, un elemento do menú ou un identificador dun " +"elemento do menú." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Solicitouse o terminal serie pero non está especificado GRUB_SERIAL_COMMAND. " +"Utilizaranse os parámetros predeterminados." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Atopouse o tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Atopouse o fondo: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Formato de imaxe incompatíbel" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Atopouse o micronúcleo GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Atopouse o módulo Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Atopouse algo máis de Hurd pero non chega para arrancar." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, co Hurd %s (modo restauración)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, co Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Non use o vello título «%s» para GRUB_DEFAULT, utilice «%s» (para versións " +"anteriores á 2.00) ou «%s» (para a 2.00 ou posteriores)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Cargando GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Cargando o Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Opcións avanzadas para %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Cargando o núcleo de Illumos ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, con kFreeBSD %s (modo restauración)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, con kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Cargando o núcleo de FreeBSD %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Atopouse o núcleo de FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Atopouse o cartafol do módulo núcleo: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, con Linux %s (modo restauración)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, con Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Cargando Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Cargando o ramdisk inicial ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Atopouse a imaxe de linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Atopouse a imaxe initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, con núcleo %s (vía %s, modo de restauración)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, con núcleo %s (vía %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Atopouse o núcleo NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (cargador)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (cargador)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Atopouse %s en %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(en %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, con Xen %s e Linux %s (modo restauración)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, con Xen %s e Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, co hipervisor (VMM ou monitor de máquina virtual) Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Cargando Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Hipervisor Xen, versión %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Opcións avanzadas de %s (co hipervisor Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Atopouse %s en %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s aínda non é compatíbel con grub-mkconfig.\\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Intervalo de enderezos non asociado coa RAM" + +#~ msgid "PUBKEY_FILE" +#~ msgstr "FICHEIRODECHAVEPÚBLICA" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign non é compatíbel co seu sistema" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Se o NOMEDOFICHEIRO é '-', utilizarase o valor predeterminado %s." + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Marca de substitución non compatíbel: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Descoñécese a funcionalidade 0x%x (%s) do tipo de letra gsub\n" + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "gardar soamente os bitmaps ASCII" + +#~ msgid "create width summary file" +#~ msgstr "crear o ficheiro de resumo de largura" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Opción --ascii-bitmaps non acepta intervalos (sempre utiliza ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "AVISO: non se sabe se o xerador aleatorio é seguro\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "imprimir un módulo do sistema de ficheiros, unidade de GRUB, dispositivo " +#~ "do sistema, módulo do mapa de particións, módulo de abstracción ou " +#~ "contedor UUID cifrado [predeterminado=fs]" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "fallou a lectura do primeiro sector da imaxe principal" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "" +#~ "utilizar FICHEIRO como configuración de instalación do grub (grub-setup)" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "utilizar FICHEIRO como grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "utilizar FICHEIRO como comprobación do grub (grub-probe)" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "DISPOSITIVO_DE_INSTALACIÓN debe ser o nome do ficheiro do sistema do " +#~ "dispositivo." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "A ruta «%s» non é lexíbel para o GRUB no arranque. A instalación resulta " +#~ "imposíbel. Abortándoa.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Fallou a autodetección dun sistema de ficheiros de %s.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Tentar con --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "Se o problema subsiste, informe del e achegue a saída de %s a <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "fallou «%s».\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "No se pode atopar a unidade GRUB para %s; non é posíbel crear a entrada " +#~ "do xestor de arranque EFI.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Xerando o grub.cfg ..." + +#~ msgid "" +#~ "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgstr "" +#~ "%s copia imaxes do GRUB dentro de cartafol_de_rede/subcartafol/" +#~ "plataforma_de_cpu_destino\\n" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "utilizar FICHEIRO como grub-render-label" + +#~ msgid "[-s POSITION] [-d DEVICE] [-v VAR] [REGISTER][=VALUE[:MASK]]" +#~ msgstr "" +#~ "[-s POSICIÓN] [-d DISPOSITIVO] [-v VAR] [REXISTRO][=VALOR[:MÁSCARA]]" + +#~ msgid " - Partition start at %llu" +#~ msgstr " - A partición comeza en %llu" + +#~ msgid " - Total size %llu sectors" +#~ msgstr " - Tamaño total %llu sectores" diff --git a/po/greek.sed b/po/greek.sed new file mode 100644 index 000000000..93556c386 --- /dev/null +++ b/po/greek.sed @@ -0,0 +1,106 @@ +/^Project-Id-Version:/ b +/^Report-Msgid-Bugs-To:/ b +/^POT-Creation-Date:/ b +/^PO-Revision-Date:/ b +/^Last-Translator:/ b +/^Language-Team:/ b +/^Language:/ b +/^MIME-Version:/ b +/^Content-Type:/ b +/^Content-Transfer-Encoding:/ b +/^Plural-Forms:/ b + +s,%\([0-9]*\)C,%\1#,g + +s,a,α,g +s,b,ϭ,g +s,c,ϲ,g +s,d,δ,g +s,e,ε,g +s,f,φ,g +s,g,γ,g +s,h,χ,g +s,i,ι,g +s,j,ϊ,g +s,k,κ,g +s,l,λ,g +s,m,μ,g +s,n,ν,g +s,o,ο,g +s,p,π,g +s,q,ϗ,g +s,r,ρ,g +s,s,σ,g +s,t,τ,g +s,u,υ,g +s,v,β,g +s,w,ω,g +s,x,ξ,g +s,y,ϋ,g +s,z,ζ,g +s,A,Α,g +s,B,Ϭ,g +s,C,ϲ,g +s,D,Δ,g +s,E,Ε,g +s,F,Φ,g +s,G,Γ,g +s,H,Χ,g +s,I,Ι,g +s,J,Ϊ,g +s,K,Κ,g +s,L,Λ,g +s,M,Μ,g +s,N,Ν,g +s,O,Ο,g +s,P,Π,g +s,Q,Ϗ,g +s,R,Ρ,g +s,S,Σ,g +s,T,Τ,g +s,U,Υ,g +s,V,Β,g +s,W,Ω,g +s,X,Ξ,g +s,Y,Ϋ,g +s,Z,Ζ,g +s,А,А,g +s,Б,Б,g +s,Ц,Ц,g +s,Д,Д,g +s,Е,Е,g +s,Ф,Ф,g +s,Г,Г,g +s,Х,Х,g +s,И,И,g +s,Й,Й,g +s,К,К,g +s,Л,Л,g +s,М,М,g +s,Н,Н,g +s,О,О,g +s,П,П,g +s,Ќ,Ќ,g +s,Р,Р,g +s,С,С,g +s,Т,Т,g +s,У,У,g +s,В,В,g +s,Ў,Ў,g +s,Ѯ,Ѯ,g +s,Ѝ,Ѝ,g +s,З,З,g + +s,%\([0-9]*\)#,%\1C,g +s,%\([0-9]*\)ϲ,%\1c,g +s,%\([0-9]*\)δ,%\1d,g +s,%\([0-9]*\)λδ,%\1ld,g +s,%\([0-9]*\)λλδ,%\1lld,g + +s,%\([0-9\.\*]*\)σ,%\1s,g +s,%\([0-9]*\)λυ,%\1lu,g +s,%\([0-9]*\)υ,%\1u,g +s,%\([0-9]*\)λλυ,%\1llu,g +s,%\([0-9]*\)ξ,%\1x,g +s,%\([0-9]*\)λξ,%\1lx,g +s,%\([0-9]*\)λλξ,%\1llx,g diff --git a/po/grub.d.sed b/po/grub.d.sed new file mode 100644 index 000000000..9fd729474 --- /dev/null +++ b/po/grub.d.sed @@ -0,0 +1,2 @@ +/^#: util\/grub\.d\//a\ +#, c-format diff --git a/po/grub.pot b/po/grub.pot new file mode 100644 index 000000000..bace7e03e --- /dev/null +++ b/po/grub.pot @@ -0,0 +1,6603 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "" + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "" + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "" + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "" + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "" + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "" + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "" + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "" + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "" + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "" + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "" + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "" + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "" + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "" + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "" + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "" + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "" + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "" + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "" + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "" + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "" + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "" + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "" + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "" + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "" + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "" + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "" + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "" + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "" + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "" + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "" + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "" + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "" + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "" + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "" + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "" + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "" + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "" + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "" + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "" + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "" + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "" + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "" + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "" + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "" + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "" + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "" + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "" + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "" + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "" + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "" + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "" + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "" + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "" + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "" + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "" + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "" + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "" + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "" + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "" + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "" + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "" + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "" + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "" + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "" + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "" + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "" + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "" + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "" + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "" + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "" + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "" + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "" + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "" + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "" + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "" + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "" + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "" + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "" + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "" + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "" + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "" + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "" + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "" + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "" + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "" + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "" + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr "" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "" + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "" + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "" + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "" + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr "" + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "" + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "" + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "" + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "" + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "" + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "" + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "" + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "" + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "" + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "" + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "" + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "" + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "" + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "" + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "" + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "" + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "" + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "" + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "" + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "" + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "" + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "" + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "" + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "" + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "" + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "" + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "" + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "" + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "" + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "" + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "" + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "" + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "" + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "" + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "" + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "" + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "" + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "" + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "" + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "" + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "" + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "" + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "" + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "" + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr "" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr "" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr "" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "" + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "" + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "" + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "" + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "" + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "" + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "" + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "" + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "" + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr "" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "" + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "" + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "" + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "" + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "" + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "" + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "" + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "" + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "" + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "" + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" diff --git a/po/hebrew.sed b/po/hebrew.sed new file mode 100644 index 000000000..a47bc6a28 --- /dev/null +++ b/po/hebrew.sed @@ -0,0 +1,89 @@ +/^Project-Id-Version:/ b +/^Report-Msgid-Bugs-To:/ b +/^POT-Creation-Date:/ b +/^PO-Revision-Date:/ b +/^Last-Translator:/ b +/^Language-Team:/ b +/^Language:/ b +/^MIME-Version:/ b +/^Content-Type:/ b +/^Content-Transfer-Encoding:/ b +/^Plural-Forms:/ b + +s,%\([0-9]*\)C,%\1#,g + +s,a,א,g +s,b,בּ,g +s,c,צ,g +s,d,ד,g +s,e,ע,g +s,f,פֿ,g +s,g,ג,g +s,h,ה,g +s,i,ִי,g +s,j,י,g +s,k,כּ,g +s,l,ל,g +s,m,מ,g +s,n,נ,g +s,o,וֹ,g +s,p,פּ,g +s,q,ק,g +s,r,ר,g +s,s,ש,g +s,t,ת,g +s,u,וּ,g +s,v,בֿ,g +s,w,ו,g +s,x,כּס,g +s,y,יִ,g +s,z,ז,g +s,ü,ֻ,g +s,ä,ֶ,g +s,ö,ֵ,g +s,ß,סס,g + +s,A,א,g +s,B,בּ,g +s,C,צ,g +s,D,ד,g +s,E,ע,g +s,F,פֿ,g +s,G,ג,g +s,H,ה,g +s,I,ִי,g +s,J,י,g +s,K,כּ,g +s,L,ל,g +s,M,מ,g +s,N,נ,g +s,O,וֹ,g +s,P,פּ,g +s,Q,ק,g +s,R,ר,g +s,S,ש,g +s,T,ת,g +s,U,וּ,g +s,V,בֿ,g +s,W,ו,g +s,X,כּס,g +s,Y,יִ,g +s,Z,ז,g +s,Ü,ֻ,g +s,Ä,ֶ,g +s,Ö,ֵ,g +s,ß,סס,g + +s,%\([0-9]*\)#,%\1C,g +s,%\([0-9]*\)צ,%\1c,g +s,%\([0-9]*\)ד,%\1d,g +s,%\([0-9]*\)לד,%\1ld,g +s,%\([0-9]*\)ללד,%\1lld,g + +s,%\([0-9\.\*]*\)ש,%\1s,g +s,%\([0-9]*\)לוּ,%\1lu,g +s,%\([0-9]*\)וּ,%\1u,g +s,%\([0-9]*\)ללוּ,%\1llu,g +s,%\([0-9]*\)כּס,%\1x,g +s,%\([0-9]*\)לכּס,%\1lx,g +s,%\([0-9]*\)ללכּס,%\1llx,g diff --git a/po/hr.gmo b/po/hr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..3e51ec3ade9beb6eada001e9f4eb29c7f3932a66 GIT binary patch literal 127626 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 WDWYEFYlJmRv-l>dVX&<-m;49Vq1Xoi literal 0 HcmV?d00001 diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 000000000..6f9e987d2 --- /dev/null +++ b/po/hr.po @@ -0,0 +1,6834 @@ +# Translation of grub to Croatian. +# This file is distributed under the same license as the grub package. +# Copyright (C) 2005 Free Software Foundation, Inc. +# gogo , 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-03-24 00:51+0100\n" +"Last-Translator: gogo \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 1.8.7.1\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "nepodržana brzina serijskog ulaza" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "nepodržan paritet serijskog ulaza" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "nepodržan broj bita zaustavljanja serijskog ulaza" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "nepodržana duljina riječi serijskog ulaza" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Ne učitavaj tablice računala određene u zarezom odvojenom popisu" + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Učitaj samo tablice određene u zarezom odvojenom popisu." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Izvezi inačicu 1 tablica u OS." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Izvezi inačicu 2 i inačicu 3 tablica u OS." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Postavi OEMID od RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Postavi OEMTABLE ID od RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Postavi OEMTABLE izdanje od RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Postavi polje stvaratelja od RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Postavi izdanje stvaratelja od RSDP, XSDT i RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Ne nadopunjuj EBDA. Može popraviti kvarove ili prestati raditi na nekim BIOS-" +"ima ali čini ih neuspješnima kada OS ne prima RSDP GRUB-a." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "prijevremeni kraj datoteke %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABLICA1,TABLICA1|--load-only=TABLICA1,TABLICA1] " +"DATOTEKA1 [DATOTEKA2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Učitaj ACPI tablice računala i tablice određene argumentima." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "greška: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "nedovoljno memorije" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "nemoguće čitati `%s': %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI isključivanje neuspjelo" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Popis uređaja." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "očekivan naziv datoteke" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "DATOTEKA" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Ispiši popis bloka." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "prvo morate učitati kernel" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Pokreni operativni sustav." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Nema dostupne statistike vremena pokretanja\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Prikaži statistiku vremena pokretanja." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statistika predmemorije diska: pogodaka = %lu (%lu.%02lu%%), promašaja = " +"%lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Nema dostupne statistike predmemorije diska\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Dobij statistiku predmemorije diska." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Prihvati DOS-stil CR/NL retke završetka." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Prikaži sadržaj datoteke." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "dva argumenta očekivana" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Usporedi datoteku `%s' s `%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Datoteke se razlikuju u veličini: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Datoteke se razlikuju u pomaku %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Datoteke su identične.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "DATOTEKA1 DATOTEKA2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Usporedi dvije datoteke." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Učitaj drugu datoteku podešavanja." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Učitaj drugu datoteku podešavanja bez promjene sadržaja." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Učitaj drugu datoteku podešavanja bez promjene sadržaja osim unosa izbornika." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Učitaj drugu datoteku podešavanja promijeni samo unosa izbornika." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[godina-]mjesec-dan] [sat:minuta[:sekunda]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Prikaži/Postavi trenutni datum i vrijeme." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Ne izlazi prateći novi redak." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Omogući tumačenje obrnute kose crte" + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] NIZ" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Prikaži redak teksta." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Ponovno pokreni u izbornik podešavanja frimvera." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Popravi video problem." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM slika je prisutna." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Nemoguće omogućavanje ROM područja." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Stvori strukturu sličnu BIOS-u za zastarjelu kompatibilnost s postojećim OS-" +"om." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_ISPIS [INT10_ISPIS]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Učitaj BIOS sadržaj ispisivanja." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "NIZ ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Vrednuj argumente kao GRUB naredbe" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Provjeri može li se DATOTEKA pokrenuti kao i386 PAE Xen neovlašteni gost " +"kernel" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Provjeri može li se DATOTEKA pokrenuti kao x86_64 Xen neovlašteni gost " +"kernel" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Provjeri može li se DATOTEKA koristiti kao Xen x86 ovlašteni gost kernel" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" +"Provjeri može li se DATOTEKA koristiti kao x86 kernel višestrukog pokretanja" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" +"Provjeri može li se DATOTEKA koristiti kao x86 kernel višestrukog pokretanja " +"2" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Provjeri je li DATOTEKA ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Provjeri je li DATOTEKA ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Provjeri je li DATOTEKA IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Provjeri je li DATOTEKA MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Provjeri je li DATOTEKA MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Provjeri je li DATOTEKA SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Provjeri je li DATOTEKA POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Provjeri je li DATOTEKA x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Provjeri je li DATOTEKA x86 Linux koji podržava 32-bitni protokol" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Provjeri je li DATOTEKA x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Provjeri je li DATOTEKA i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Provjeri je li DATOTEKA x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Provjeri je li DATOTEKA x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Provjeri je li DATOTEKA i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Provjeri je li DATOTEKA x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Provjeri je li DATOTEKA i386 EFI datoteka" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Provjeri je li DATOTEKA x86_64 EFI datoteka" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Provjeri je li DATOTEKA IA64 EFI datoteka" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Provjeri je li DATOTEKA ARM64 EFI datoteka" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Provjeri je li DATOTEKA ARM EFI datoteka" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Provjeri je li DATOTEKA hiberfil.sys u hiberniranom stanju" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Provjeri je li DATOTEKA x86_64 XNU (Mac OS X kernel)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Provjeri je li DATOTEKA i386 XNU (Mac OS X kernel)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Provjeri je li DATOTEKA XNU (Mac OS X kernel) hibernirana slika" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Provjeri je li DATOTEKA BIOS sektor pokretanja" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "false" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "MOGUĆNOSTI DATOTEKE" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Provjeri je li DATOTEKA određene vrste." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "nema takve particije" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Novi MBR je zapisan u `%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "UREĐAJ [PARTICIJA[+/-[VRSTA]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Popunjuje hibridni MBR od GPT pogona UREĐAJA. Određena particija biti će dio " +"hibridne MBR. Do 3 particije su dopuštene. VRSTA je MBR vrsta. + znači da " +"je particija aktivna. Samo jedna particija može biti aktivna." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Zaustavlja računalo. Ova naredba ne radi na svim implementacijama firmvera." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Odredite jedinstvenu vrijednost za korištenje." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "JEDINSTVENA-VRIJEDNOST" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" +"Provjeri jedinstvene vrijednosti datoteka pomoću popisa jedinstvenih " +"vrijednosti." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Temeljni direktorij za popis jedinstvene vrijednosti." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIR" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Ne zaustavljaj se nakon prve greške." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Raspakiraj datoteku prije provjere jedinstene vrijednosti." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: GREŠKA ČITANJA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: NEPODUDARAJUĆA JEDINSTVENA VRIJEDNOST\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: U REDU\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "" +"-h JEDINSTVENA VRIJEDNOST [-c DATOTEKA [-p PREFIKS]] [DATOTEKA1 " +"[DATOTEKA2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Proračunaj ili provjeri zbroj jedinstvene vrijednosti" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c DATOTEKA [-p PREFIKA]] [DATOTEKA1 [DATOTEKA2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Postavi napredno upravljanje energijom\n" +"(1=nisko, ..., 254=visoko, 255=isključeno)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Prikaži način rada energije." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Zaustavlja ATA sigurnosne postavke do ponovno pokretanja." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Prikaži SMART stanje zdravlja." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Postavi automatsko zvučno upravljanje\n" +"(0=isključeno, 128=tiše, ..., 254=brže)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Postavi istek vremena pripravnosti\n" +"(0=isključeno, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Postavi uređaj u pripravan način rada." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Postavi uređaj u način rada spavanja." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Ispis identiteta i postavki uređaja." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Prikaži osnovni sadržaj sektora ATA IDENTIFIKACIJE." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Onemogući/Omogući SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Ne ispisuj poruke." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "potreban je jedan argument" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[MOGUĆNOSTI] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Nabavi/Postavi parametre ATA diska." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Upotreba:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[OBRAZAC ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Prikaži poruku pomoći." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Preskoči pomak bitova na početku datoteke." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Bajtovi DULJINE samo-za-čitanje" + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[MOGUĆNOSTI] DATOTEKA_ILI_UREĐAJ" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Prikaži osnovni sadržaj datoteke ili memorije." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Prikaži osnovni ispis CMOS sadržaja" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BAJT:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Testiraj bit na BYTE:BIT u CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Obriši bit na BYTE:BIT u CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Postavi bit na BYTE:BIT u CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Prikaži coreboot statistiku vremena pokretanja." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Prikaži coreboot tablice." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Provjerite podržava li CPU 64-bit (dulji) način (uobičajeno)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Provjerite podržava li CPU Proširenje fizičke adrese." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Provjeri CPU značajke." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Prikaži trenutna mapiranja." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Vrati sva mapiranja na zadane vrijednosti." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Izvedi oba, izravno i obrnuto mapiranje." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Nema ponovno mapiranih uređaja" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS disk broj ------> GRUB/BIOS uređaj" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Upravljanje mapiranjem BIOS uređaja." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Ne koristi APM za zaustavljanje računala." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Zaustavi sustav, po mogućnosti koristeći APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "APM nije pronađen" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Inačica %u.%u\n" +"32-bitno CS = 0x%x, dulj = 0x%x, pomak = 0x%x\n" +"16-bitno CS = 0x%x, dulj = 0x%x\n" +"DS = 0x%x, dulj = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bitno zaštićeno sučelje podržano\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bitno zaštićeno sučelje nepodržano\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bitno zaštićeno sučelje podržano\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bitno zaštićeno sučelje nepodržano\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU mirovanje usporava procesor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU mirovanje neusporava procesor\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM onemogućen\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM omogućen\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM odkopčan\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM prikopčan\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Prikaži APM informacije." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "naziv datoteke ili tempo i zabilješke potrebni" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Neispravan tempo u %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "datoteka `%s' nije pronađena" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "neprepoznat broj" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "DATOTEKA | TEMPO [VISINA TRAJANJE] [VISINA TRAJANJE] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Sviraj melodiju." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "postavi način brojeva" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "postavi način velikih slova" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "postavi način pomicanja" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "postavi način umetanja" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "postavi način pauziranja" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "pritisni lijevi shift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "pritisni desni shift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "pritisni SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "pritisni NumLock tipku" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "pritisni CapsLock tipku" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "pritisni ScrollLock tipku" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "pritisni Insert tipku" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "pritisni lijevi alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "pritisni desni alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "pritisni lijevi ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "pritisni desni ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "ne nadopunjuj LED stanje" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[PRITISAK TIPKE1] [PRITISAK TIPKE2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emuliraj slijed pritiska tipke" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Pokreni `go' za pokretanje GRUB-a." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Vrati se u IEEE1275 naredbeni radak." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Spremi vrijednosti čitanja u varijablu VARNAZIV." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAZIV" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "ULAZ" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Čitaj 8-bitnu vrijednost s ULAZA." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Čitaj 16-bitnu vrijednost s ULAZA." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Čitaj 32-bitnu vrijednost s ULAZA." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ULAZ VRIJEDNOST [MASKA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Zapisuj 8-bitnu VRIJEDNOST u ULAZ." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Zapisuj 16-bitnu VRIJEDNOST u ULAZ." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "VRIJEDNOST ADRESE [MASKA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Zapisuj 32-bitnu VRIJEDNOST u ULAZ." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "varijabla `%s' nije postavljena" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Učitaj raspored tipkovnice." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Provjeri Shift tipku." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Provjeri Control tipku." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Provjeri Alt tipku." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Provjeri tipku izmjenjivača." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "nemoguće pronaći naredbu `%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Upišite lozinku: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Obradi zastarjelo podešavanje u istom kontekstu" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Obradi zastarjelo podešavanje u novom kontekstu" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Obradi zastarjelo podešavanje u istom kontekstu koristeći samo izbornike " +"unosa" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Obradi zastarjelo podešavanje u novom kontekstu koristeći samo izbornike " +"unosa" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=VRSTA] DATOTEKA [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simuliraj grub-legacy `kernel' naredbu" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "DATOTEKA [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simuliraj grub-legacy `initrd' naredbu" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simuliraj grub-legacy `modulenounzip' naredbu" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] LOZINKA [DATOTEKA]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simuliraj grub-legacy `password' naredbu" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simuliraj grub-legacy `password' naredbu u načinu unosa izbornika" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Odredi naziv datoteke." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Preskoči provjeru potpisa datoteke okruženja." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FILE] [-s|--skip-sig] [varijabla_naziv_u_popis_dopuštenih] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Učitaj varijablu s datoteke bloka okruženja." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f DATOTEKA]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Ispiši varijable iz datoteke bloka okružja." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f DATOTEKA] varijabla_naziv [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Spremi varijable u datoteku bloka okruženja." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Prikaži dulji popis s opširnijim informacijama." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Ispiši veličine u ljudima čitljivom obliku." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Popis svih datoteka." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Mrežni protokol:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [DATOTEKA ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Popis uređaja i datoteka." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Prikaži inačicu 1 tablica." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Prikaži samo inačicu 2 i inačicu 3 tablica ." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Prikaži ACPI informacije." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "dostupan RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "rezerviran RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI pokretajući RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPI nenasilna pohrana RAM-a" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "pokvareni RAM (Pokvaren RAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "trajan RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "trajan RAM (zastarjelo)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM drži coreboot tablice" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM drži kôd firmvera" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, duljina = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, duljina = 0x%llx, vrsta = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Ispiši mapu memorije osiguranu frimverom." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Popis PCI uređaja." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Dopusti DATOTEKU od HFS-a ili HFS+ particija za intel macove." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Dopusti DIR od HFS-a ili HFS+ particija PPC macove." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Čitaj 8-bitnu vrijednost s ADDR." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Čitaj 16-bitnu vrijednost s ADDR." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Čitaj 32-bitnu vrijednost s ADDR." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Zapisuj 8-bitnu VRIJEDNOST u ADDR." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Zapisuj 16-bitnu VRIJEDNOST u ADDR." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Zapisuj 32-bitnu VRIJEDNOST u ADDR." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Vrsta unosa izbornika." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "NIZ" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Popis korisnika kojima je dopušteno pokretanje ovog unosa." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "KORISNIČKO IME[,KORISNIČKO IME]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tipka tipkovnice za brzo pokretanje ovog unosa." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TIPKA_TIPKOVNICE" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Koristi NIZ kao osnovu unosa izbornika." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identifikator stavke izbornika." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Ovaj unos može pokrenuti bilo koji korisnik." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Odredi stavku izbornika." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Odredi podizbornik." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Naziv\tRef broj\tZavisnosti\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Prikaži ovu poruku." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADDR [VELIČINA]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Prikaži sadržaj memorije." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Ukloni modul." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Prikaži učitane module." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Izađi iz GRUB-a." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "CS5536 nije pronađen" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 na %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Kontroler sabirnice Upravitelja sustava I/O prostor je na 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Broj RAM utora %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Zapisani SPD bajtovi: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Ukupna veličina upisivanja: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Vrsta memorije: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Dio broj: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Vrsta memorije: nepoznata." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Ispiši informaciju memorije." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s ne podržava UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Prebacuje na izvorni upravljački program diska. Ako nema modul određenih " +"zadanom skupinom (pata,ahci,usbms,ohci,uhci,ehci) koja se koristi" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Pokreni NAREDBE na particiji.\n" +"Koristite `parttool PARTICIJA help' za popis dostupnih naredbi.." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Nažalost, nema dostupnog parttoola za %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "nepoznat argument `%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTICIJA NAREDBE" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "KORISNIČKA LOZINKA" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Postavite korisničku lozinku (običan tekst). Nepreporučljivo i nesigurno." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "neispravna PBKDF2 lozinka" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "KORISNIČKA PBKDF2_LOZINKA" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Postavite korisničku lozinku (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Odaberite uređaj prema proizvođaču i ID-u uređaja." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[proizvođač]:[uređaj]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Odaberite uređaj prema njihovom položaju na sabirnici." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[sabirnica]:[utor][.funk]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "nedostaje `%c' simbol" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POLOŽAJ] [-d UREĐAJ]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Prikaži osnovni zapis prostora PCI podešavanja." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Postavite varijablu za povratnu vrijednost." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Odredi upravljački program." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Odredi vrstu particijske mape." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Odredi vrstu datotečnog sustava." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Odredi datotečni sustav UUID-a." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Odredi naziv datotečni sustava." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "datotečni sustav `%s' ne podržava nazive" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "UREĐAJ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Preuzmi informacije uređaja." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Postavite variajblu s korisničkim unosom." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Ponovno pokrenite računalo." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Spremi podudarajući BROJ komponente u VARIJABLU-NAZIVA." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[BROJ:]NAZIV VAR" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGULARAN-IZRAZ NIZ" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Testiraj je li se REGULARAN-IZRAZ poklapa s NIZOM." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAZIV [VARIJABLA] [OPIS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Pretraži uređaje prema datoteci. Ako je VARIJABLA određena, prvi pronađeni " +"uređaj je postavljen u varijablu." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Pretraži uređaje prema nazivu. Ako je VARIJABLA određena, prvi pronađeni " +"uređaj je postavljen u varijablu." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Pretraži uređaje prema UUID-u. Ako je VARIJABLA određena, prvi pronađeni " +"uređaj je postavljen u varijablu." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Pretraži uređaje prema datoteci" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Pretraži uređaje prema nazivu datotečnog sustava." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Pretraži uređaje prema UUID-u datotečnog sustava." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Postavi varijablu na prvi pronađeni uređaj." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Ne sondiraj disketne uređaje." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Prvo pokušajte OPIS uređaja. Ako OPIS završi sa zarezom, pokušajte s " +"podparticijama" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "OPIS" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prvo pokušaj OPIS uređaja ako je trenutno pokrenut na IEEE1275. Ako OPIS " +"završava sa zarezom, pokušajte s podparticijama" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prvo pokušaj OPIS uređaja ako je trenutno pokrenut na BIOSU. Ako OPIS " +"završava sa zarezom, pokušajte s podparticijama" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Prvo pokušaj OPIS uređaja ako je podržan izravan pristup hardveru. Ako OPIS " +"završava sa zarezom, pokušajte s podparticijama" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prvo pokušaj OPIS uređaja ako je trenutno pokrenut na EFIU. Ako OPIS " +"završava sa zarezom, pokušajte s podparticijama" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prvo pokušaj OPIS uređaja ako je trenutno pokrenut na ARC. Ako OPIS završava " +"sa zarezom, pokušajte s podparticijama" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint OPIS [--hint OPIS] ...] NAZIV" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Pretraži uređaj prema datoteci, nazivu datotečnog sustava ili UUID-u " +"datotečnog sustava. Ako je --set određen, prvi pronađeni uređaj je " +"postavljen u varijablu. Ako naziv varijable nije određen, `root' se koristi." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Registracija %x od %x:%02x.%x je %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POLOŽAJ] [-d UREĐAJ] [-v VAR] REGISTER[=VRIJEDNOST[:MASKA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipuliraj PCI uređajima." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Opširnije odbrojavanje." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Dopusti prekid s ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "BROJ_SEKUNDA" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Čekajte određeni broj sekundi." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "korijenski direktorij syslinux diska [zadano=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"trenutni direktorij syslinuxa [zadani je sadržajni direktorij ulazne " +"datoteke]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "pretpostavljeni ulaz je isolinux datoteka podešavanja." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "pretpostavljeni ulaz je pxelinux datoteka podešavanja." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "pretpostavljeni ulaz je syslinux datoteka podešavanja." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Pokreni syslinux podešavanje u istom sadržaju" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Pokreni syslinux podešavanje u novom sadržaju" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Pokreni syslinux podešavanje u istom sadržaju uzimajući samo stavke izbornika" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Pokreni syslinux podešavanje u novom sadržaju uzimajući samo stavke izbornika" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "nema određenog terminala" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminal `%s' nije pronađen" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktivni ulazni terminali:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Dostupni ulazni terminali:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktivni izlazni terminali:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Dostupni izlazni terminali:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Prikaži ili odaberi ulazni terminal." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Prikaži ili odaberi izlazni terminal." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "IZRAZ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Procjeni izraz." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "IZRAZ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Učitaj istu datotekau na više načina." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Odredi veličinu za svaku radnju čitanja" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "neispravna veličina bloka" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Veličina datoteke: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Preostalo vrijeme: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Brzina: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s VELIČINA] NAZIV DATOTEKE" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Testiraj brzinu čitanja datoteke." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "nema određene naredbe" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Preostalo vrijeme: %d.%03d sekunda \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "NAREDBA [ARGUMENTI]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Mjeri vrijeme koristeći NAREDBU" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Prevedi u velika slova." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Prevedi u mala slova." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[MOGUĆNOSTI] [POSTAVKA1] [POSTAVKA2] [NIZ]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Prevedi POSTAVKA1 znakove u POSTAVKA2 u NIZU." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Ne čini ništa, uspješno." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Ne čini ništa, neuspješno." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Testiraj USB podršku." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Preskoči provjeru potpisa datoteke javnog ključa." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "nevaljani potpis" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "javni ključ %08x nije pronađen" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "modul `%s' nije učitan" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] DATOTEKA DATOTEKA_POTPISA [DATOTEKA_JAVNOG KLJUČA]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Provjeri odvojeni potpis." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] DATOTEKA_JAVNOG KLKUČA" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Dodaj PUBKEY_DATOTEKU u pouzdane ključeve." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Prikaži popis pouzdanih ključeva" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_JAVNOG KLJUČA" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Ukloni PUBKEY_ID s pouzdanih ključeva." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Samo-tekst " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Izravna boja, maska: %d/%d/%d/%d položaj: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Paleta " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planer " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Herkul " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Ne-ulančani način 4" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Crno bijelo " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Nepoznat video način rada " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " neispravan EDID zbroj jedinstvene vrijednosti" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID inačica: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Poželjan način: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Poželjan način nije dostupan\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "neispravna pojedinost video načina rada `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Popis podržanih video načina rada" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legenda: maska/položaj=crvena/zelena/plava/rezervirano" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Uređaj `%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Nema dostupnih informacija" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Neuspjelo pokretanje video uređaja" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[ŠxV[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Popis dostupnih video načina rada. Ako je razlučivost zadana prikazuje se " +"samo odgovarajući načini rada." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[ŠxV]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Testiraj video podsustav u načinu rada ŠxV." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Testiraj video podsustav." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[DIR]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Prikaži Xen pohranu." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VAR NAZIV]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Pretvori 64-bitni UUID u format prikladan za XNU. Ako je -l zadan zadrži " +"mala slova kako je zadano s blkid-om." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "neuspjelo čitanje sektora 0x%llx s `%s'" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "neuspjelo zapisivanje sektora 0x%llx u `%s'" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Montiraj prema UUID-u." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Montiraj sve." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Montiraj sve uređaje s postavljenom`boot' oznakom." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "nemoguće otvoriti `%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "nemoguća pretraga `%s': %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "IZVOR|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Montiraj šifrirani uređaj." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Nemoguć pronalazak fizičkog uređaja `%s'. Neki moduli možda nedostaju u " +"slici jezgre." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "fizički uređaj %s nije pronađen" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "nema medija u `%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Nemoguće učitavanje sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Nemoguće učitavanje sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "nemoguće čitanje ELI meta podataka" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "pogrešan ELI magic ili inačica" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Pokušaj dešifriranja glavnog ključa..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Upišite lozinku za %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Utor %d je otvoren\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "pokušaj čitanja ili zapisivanja izvan diska `%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "nemoguće zapisivanje na CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Izvorni upravljački program diska se koristi. Odbijanje korištenja sučelja " +"firmvera diska." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "vaša LDM particija umetanja je premala; ugradnja neće biti moguća" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "ovaj LDM nema particije umetanja; ugradnja neće biti moguća" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Obriši određeni virtualni disk." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] DATOTEKA NAZIVA UREĐAJA." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Stvori virtualni uređaj iz datoteke" + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "izdvajanje 0x%x još nije implementirano" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "nema tablice simbola" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "ova ELF datoteka nije ispravne vrste" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Učitaj i pokreni EFI emulator." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Završi učitavanje EFI emulatora." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Ukloni EFI emulator." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "simbol `%s' nije pronađen" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Učitana slova:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "DATOTEKA..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Odredi jedno ili više slova za učitavanje." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Prikaži učitana slova." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "preduboko ugniježđenje simboličke poveznice" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "pokušaj čitanja završetka kraja datoteke" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"nemoguć pronalazak potrebnog člana uređaja višestrukog datotečnog sustava" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "nije direktorij" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "nije obična datoteka" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "vaša core.img je neobično velika. Neće stati u područje ugradnje" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "neispravan naziv datoteke `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "neuspjela provjera zbroja jedinstvene vrijednosti" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "ključ dešifriranja je nedostupan" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC provjera neuspjela" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Pretpostavi da je ulaz osnovan." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Pretpostavi da je ulaz heksadecimalan." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Pretpostavi da je ulaz lozinka." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Upiši ZFS lozinku: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [DATOTEKA]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Uvezi ZFS upakirani ključ spermljen u DATOTECI." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtualni uređaj je uklonjen" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtualni uređaj je oštećen" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtualni uređaj je isključen" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtualni uređaj je degradiran" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtualni uređaj je uključen" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Neispravan virtualni uređaj: vrsta nije dostupna" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Stvarni virtualni uređaji (datoteka ili disk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Putanja pokretanja: nedostupna\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Putanja pokretanja: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Putanja: nedostupna" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Putanja: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "ID uređaja: nedostupan" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "ID uređaja: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Ovaj virtualni uređaj je zrcalni" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Ovaj virtualni uređaj je RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Neispravan virtualni uređaj" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "Virtualni uređaj s %d podređenim\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "Broj elementa virtualnog uređaja %d nije ispravan\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Broj elementa virtualnog uređaja %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Nepoznata vrsta virtualnog uređaja: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Stanje prostora pohrane: aktivno" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Stanje prostora pohrane: izvezeno" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Stanje prostora pohrane: uništeno" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Stanje prostora pohrane: rezervirano za oštećenje diska" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Stanje prostora pohrane: razina 2 ARC uređaja" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Stanje prostora pohrane: nepokrenuto" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Stanje prostora pohrane: nedostupno" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Stanje prostora pohrane: potencijalno aktivno" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Naziv prostora pohrane: nedostupan" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Naziv prostora pohrane: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID prostora pohrane: nedostupan" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID prostora pohrane: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Neuspjelo primanje stanja prostora pohrane" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Neprepoznato stanje prostora pohrane" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Nema dostupnog stabla virtualnog uređaja" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Ispiši ZFS informacije o UREĐAJU." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "DATOTEČNI UREĐAJ [VARIJABLA]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Prikaži ZFS-BOOTFSOBJ ili spremi u VARIJABLU" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Sada povežite udaljeni program pronalaženja grešaka." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Pokreni GDB stub na danom ulazu" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Uđi u GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Zaustavi GDB stub" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "prijevremeni završetak datoteke" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Prevađa znakovni niz s trenutnim postavkama." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Pritisnite Enter za pokretanje odabranog OS-a, `e' za uređivanje naredbi " +"prije pokretanja ili `c' za naredbeni redak. ESC za povratak u prijašnji " +"izbornik." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Pritisnite Enter za pokretanje odabranog OS-a, `e' za uređivanje naredbi " +"prije pokretanja ili `c' za naredbeni redak." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: pokretanje, `e': mogućnosti, `c': naredbeni-redak" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Odabrana stavka će se automatski pokrenuti za %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds preostalo." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB izbornik pokretanja sustava" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s vrijednost je manja od ili jednaka %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parametar zahtijeva vrijednost" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT parametar mora biti pozitivan" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: nepoznat ARGP_HELP_FMT parametar" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Smeće u ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Obavezni ili izborni argumenti dugačkih mogućnosti također su obavezni ili " +"izborni za odgovarajuće kratke mogućnosti." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ili: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [MOGUĆNOST...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Pokušajte '%s --help' ili '%s --usage' za više informacija.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Prijavite greške na %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Nepoznata greška sustava" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "daje ovaj popis pomoći" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "daje kratku poruku korištenja" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAZIV" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "postavi naziv programa" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEK" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "zaustavi na SEK sekundi (zadano 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "ispiši inačicu programa" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(GREŠKA PROGRAMA) Nema poznate inačice!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: previše argumenata\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(GREŠKA PROGRAMA) Mogućnost je trebala biti prepoznata!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: mogućnost „%s” je neodređena, mogućnosti:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: mogućnost `--%s' ne dopušta argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: mogućnost '%c%s' ne dopušta argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: mogućnost '--%s' zahtijeva argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neprepoznata mogućnost '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: nepoznata mogućnost '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: neispravna mogućnost -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: mogućnost zahtijeva argument -- %c\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: mogućnost `-W %s' je neodređena\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: mogućnost '-W %s' ne dopušta argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: mogućnost '-W %s' zahtijeva argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Uspješno" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Nema podudarnosti" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Neispravan regularni izraz" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Neispravan znak razvrstavanja" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Neispravan naziv razreda znakova" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Obrnuta kosa crta" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Neispravna povratna referenca" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Neuparena [ ili [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Neuparena ( ili \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Neuparena \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Neispravan sadržaj \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Neispravan kraj raspona" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memorija iscrpljena" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Neispravan prijašnji regularni izraz" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Preuranjen završetak regularnog izraza" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regularni izraz je prevelik" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Neuparena ) ili \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "nepoznata greška regularnog izraza" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Nedostaje prijašnji regularni izraz" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Pozdrav svijete" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Reci 'Pozdrav svijete'" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "pokušaj pretrage izvan datoteke" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "nepodržan gzip format" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop datoteka oštećena" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz datoteka oštećena ili ima nepodržanu mogućnost bloka" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "neispravan arch-dependent ELF magic" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VARIJABLA]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Postavi varijablu okruženja." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Ukloni varijablu okruženja." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Prikaži uređaje ili datoteke." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Umetni modul." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disk `%s' nije pronađen" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "pokušaj čitanja i zapisivanja izvan particije" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "neispravan arch-independent ELF magic" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "ograničenje broja uređaja dostignuto" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "nemoguće zapisati `%s': %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"device.map unos `%s' je neisprvan. Zanemarujem ga. Ispravite ili obrišite " +"vaš device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"naziv uređaja `%s' u device.map je neispravan. Koristite %s u zamjenu. " +"Koristite oblik [hfc]d[0-9]* (Npr. `hd0' ili `cd')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "nemoguće otvaranje `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NAZIV_UREĐAJA" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Postavi korijenski uređaj." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "koristi DATOTEKU kao mapu uređaja [uobičajeno=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "koristi DATOTEKU kao memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "koristi GRUB datoteke u direktoriju DIR [zadano=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "ispiši opširnije poruke." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "čekaj dok se program otklanjanja greške poveže" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Nepoznati dodatni `%s' argument." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Greška obrade argumenta naredbenog redka\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Pokreni `gdb %s %d', i postavi ARGS.HOLD na nulu.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: upozorenje:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: informacije:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: greška:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "datoteka `%s' je prevelika" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "nepoznat datotečni sustav" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Neuspjelo isključivanje" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Neuspjeli izlaz" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "prekoračenje otkriveno" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Odbacivanje nepravilno smještene particije (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Nepoznata naredba `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Prikaži ovu pomoć i izađi." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Prikaži upotrebu ove naredbe i izađi." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "nedostaje obavezna mogućnost `%s'" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "argument `%s' zahtijeva cijeli broj" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "vrijednost je dodijeljena argumentu `%s' dok ne zahtijeva argument" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Ispis povratnog praćenja." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB ne zna kako zaustaviti ovaj sustav još!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Zadani poslužitelj ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "neispravne specifikacije boje `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Neuspjelo ponovno pokretanje" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[DULJINA]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Naizmjenični podaci heksadecimalnog ispisa." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "stablo uređaja mora biti dostupno (pogledajte `devicetree' naredbu)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "neispravan zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "neispravno stablo uređaja" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Učitaj Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Učitaj initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Učitaj DTB datoteku." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"obična slika kernela nije podržana - izgradite sa omogućenim " +"CONFIG_(U)EFI_STUB" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "neuspjelo FDT dobivanje" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "prvo morate učitati Xen Hipervizora" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Učitaj xen hipervizora." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Učitaj xen modul." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[MOGUĆNOSTI]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Pokreni BIOS temeljeni sustav." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Učitaj dodatni učitač pokretanja." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Prikaži izlaz na svom konzolama." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Koristi serijsku konzolu." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Pitaj za naziv datoteke ponovnog pokretanja" + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Koristi CD-ROM kao 'root'." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Pozovi usmjeravanje podešeno korisnikom." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Uđi u KDB pri pokretanju." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Koristi GDB udaljeni program otklanjanja grešaka umjesto DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Onemogući sve izlaze pokretanja." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Čekaj pritisak tipke nakon svakog redka izlaza." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Koristi sastavljeni korijenski uređaj." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Pokretanje u jednostrukom načinu." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Pokreni s opširnijim porukama." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Nemoj ponovno pokrenuti , samo zaustavi." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Promijeni podešene uređaje." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comJEDINICA[,BRZINA]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Onemogući SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Onemogući ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Ne prikazuj poruku dijagnostike pokretanja." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Pokreni s porukama otklanjanja grešaka." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Izostavi normalan izlaz (upozorenja ostaju)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADRESA|comJEDINICA][,BRZINA]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "naziv" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "vrsta" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adresa" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "veličina" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Pokretanje u slijepom načinu" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Učitaj FreeBSD kernel." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Učitaj OpenBSD kernel." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Učitaj NetBSD kernel." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Učitaj FreeBSD okružje." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Učitaj FreeBSD kernel modul." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Učitaj NetBSD kernel module." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Učitaj NetBSD kernel module (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Učitaj FreeBSD kernel modul (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Učitaj kOpenBSD ramdisk." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Učitaj drugi coreboot payload" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Zastarjeli `ask' parametar nije više podržan." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s je zastarjelo. Umjesto koristite gfxpayload=%s prije linux naredbe.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s je zastarjelo. VGA način rada %d nije prepoznat. Umjesto koristite " +"gfxpayload=ŠIRINAxVISINA[xDUBINA] prije linux naredbe.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] DATOTEKA" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "veličina `%s' je prevelika" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Učitaj FreeDOS kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Učitaj NTLDR ili BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Zaobiđi pretpostavljeno mapiranje Plan9 uređaja." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBUREĐAJ=PLAN9UREĐAJ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGUMENTI" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Učitaj Plan9 kernel." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Učitaj PXE sliku." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Učitaj Truecrypt ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd je već učitan" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Učitaj modul." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Pritisnite bilo koju tipku za pokretanje xnu-a" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Učitaj `device-properties' sadržaj ispisivanja." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Nemoguće lociranje FPSWA upravljačkog programa" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "FPSWA protokol nije mogao pronaći sučelje" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Nema pronađenog FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA inačica: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "DATOTEKA [ARGUMENTI...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Prikaži FPSWA inačicu." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "UPOZORENJE: neće biti dostupnih konzola u OS-u" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Učitaj kernel višestrukog pokretanja 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Učitaj modul višestrukog pokretanja 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Učitaj kernel višestrukog pokretanja." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Učitaj modul višestrukog pokretanja." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Način prikaza pozadinske slike." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "razvučen|normalan" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Učitaj XNU sliku." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Učitaj 64-bitnu XNU sliku." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Učitaj XNU paket proširenja." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Učitaj XNU proširenje." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIREKTORIJ [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Učitaj XNU direktorij proširenja." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Učitaj XNU ramdisk. Biti će dostupan u OS-u kao md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Učitaj splash sliku za XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Učitaj sliku hiberniranog XNU-a." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADRESA1,MASKA1[,ADRESA2,MASKA2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Proglasi područja memorije neispravnim (pokvareni ram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "OD[K|M|G] DO[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Ukloni bilo koje područje memorije u određenom rasponu." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "četiri argumenata očekivano" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "nepoznato mrežno sučelje `%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "nema pronađenih DHCP informacija" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "nema pronađenih DHCP mogućnosti" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "nema prnađenih DHCP mogućnosti %d" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "neprepoznata DHCP pojedinost mogućnosti formata `%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "nema pronađenih mrežnih kartica" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "nemoguće automatsko podešavanje %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KARTICA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "pokreni bootp automatsko podešavanje" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR SUČELJE BROJ OPIS" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"Preuzmi DHCP mogućnost i spremi ju u VAR. Ako VAR postoji - tada ispiši " +"vrijednost." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "nema podešenih DNS poslužitelja" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "naziv komponente domene je predugačak" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "nema DNS zapisa pronađenih" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "nije primljen DNS odgovor" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "samo ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "samo ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "preferiraj ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "preferiraj ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "neispravan argument" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRESA DNS-POSLUŽITELJA" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Pokreni DNS pretraživanje" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNS POSLUŽITELJ" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Dodaj DNS poslužitelja" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Ukloni DNS poslužitelja" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Prikaži DNS poslužitelje" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "neuspjelo slanje mrežnog paketa" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "interpretator nije podržan" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "neuspjela promjena lokacije memorije" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "neuspjelo oslobađanje memorije" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "nepodržan HTTP odgovor" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "nepodržana HTTP greška %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "isteklo vrijeme otvaranja `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "isteklo vrijeme: hardverska adresa nije razrješena" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "nerazrješiva adresa %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "neprepoznata mrežna adresa `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "odredište nedostupno" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "ponavljajuća ruta otkrivena" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "adresa nije prnađena" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "ne možete obrisati ovu adresu" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Nepodržana hardverska vrsta adrese %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Nepodržana vrsta adrese %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "očekivana su tri argumenta" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "kartica nije pronađena" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "privremeno" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Nepoznata vrsta adrese %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "poslužitelj nije određen" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "vrijeme isteka čitanja `%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KRATAK NAZIV ADRESE KARTICE [HARDV. ADRESA]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Dodaj adresu mreže." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KARTICA [HARD. ADRESA]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Izvedi IPV6 automatsko podešavanje" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KRATAK NAZIV" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Obriši adresu mreže" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KRATAK NAZIV MREŽE [SUČELJE| gw PRISTUPNIK]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Dodaj rutu mreže." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Obriši rutu mreže" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "prikaži rute mreže" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "prikaži mrežne kartice" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "prikaži mrežne adrese" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "povezivanje odbijeno" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "istek povezivanja" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Upišite korisničko ime: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[POPIS KORISNIKA]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Provjerite je li korisnik na POPISU KORISNIKA." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Dostupne naredbe su:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Dostupni uređaji su:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Dostupne datoteke su:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Dostupne particije su:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Dostupni argumenti su:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Dostupne stvari su::" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Upozorenje: greška sintakse (nedostaje kosa crta) u `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Upozorenje: pogrešna boja `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Upozorenje: pogrešna boja pozadine `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Izvezi vrijable." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Nedjelja" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Ponedjeljak" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Utorak" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Srijeda" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Četvrtak" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Petak" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Subota" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "module nije učitan" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB inačica %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Pritisnite ESC za izlazak u bilo koje vrijeme." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Uređivanje u načinu rada minimalnog BASH-a podržano. Za prvu riječ, TAB " +"ispisuje dostupne naredbe. Bilo gdje drugdje TAB ispisiva dostupne uređaje " +"ili dostupne datoteke. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Očisti zaslon." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Uđi u uobičajen način rada." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Izađi iz uobičajeog načina rada." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Pritisnite bilo koju tipku za nastavak..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Pokretanje `%s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Vraćanje natrag na `%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Neuspjelo pokretanje obje stavke (zadane stavke i stavke oporavka).\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Popis naredbi pokretanja" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Uređivanje u načinu rada minimalnog Emacsa podržano. TAB ispis dostupnih " +"naredba. Pritisnite Ctrl-x ili F10 za pokretanje, Ctrl-c ili F2 za naredbeni " +"redak ESC za odbacivanje promjena i povratak u GRUB izbornik." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Koristite %C i %C tipke za odabir željene stavke." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Particija %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Uređaj %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Nemoguć pristup datotečnom sustavu" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Vrsta datotečnog sustava %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Oznaka `%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Vrijeme zadnje promjene %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Nema otkrivenog poznatog datotečnog sustava" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Particija počinje na %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Veličina sektora %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Ukupna veličina nepoznata" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Ukupna veličina %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--VIŠE--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "nemoguće otvaranje datoteke podešavanja `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "nema dostupnog sažimanja za vašu platformu" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "nema IEEE1275 dostupnih rutina za vašu platformu" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "nema EFI rutine dostupne za vašu platformu" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "nema SGI dostupnih rutina za vašu platformu" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "nema naizmjeničnog broja generatora dostupnog za vaš OS" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Neuspjelo stvaranje `device-mapper' stabla" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "neuspjelo montiranje uređaja `%s': %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "neuspjelo otvaranje geoma" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "nemoguće je pronaći geli korisnika" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "nemoguće je preuzeti geli UUID" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "nemoguće je pronaći geom `part' razred" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "neporavnana veličina uređaja" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "pokušaj čitanja slike jezgre `%s' s GRUBA" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "Ponovni pokušaj čitanja slike jezgre `%s' s GRUBA" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "nemoguće ispravno čitanje `%s'" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "neuspješno čitanje sektora slike jezgre" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"nemoguće dobivanje naredbenog redka datotečnog sustava za putanju `%s': %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "naredbeni redak datotečnog sustava je prazan za putanju `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"datotečni sustav `%s' za putanju `%s' ima nekoliko riječi koje ne pripadaju " +"u mogućnosti, barem `%s' i `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"datotečni sustav `%s' za putanju `%s' ima zadane samo mogućnosti, nemoguć " +"pronalazak putanje uređaja" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Informacije pohrane za `%s' ne uključuju vrstu" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "`%s' nije lokalni disk" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Informacija pohrane za `%s' ne sadržava običnu particiju niti običan disk" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "nemoguće primanje popisa blokiranih: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "veličina bloka nije djeljiva sa 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "neispravna veličina nultog bloka" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "ne može primiti popise blokiranih" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION greška: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "nepodržana RAID inačica: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO greška: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO greška: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Neuspjelo otvaranje toka s %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "nepoznata vrsta RAID uređaja `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"`obppath' nije pronađena u sadržajnom direktoriju `%s', nema IEEE1275 naziva " +"otkrivanja" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "neuspjelo dobivanje canonical putanje za `%s'" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "nepoznata vrsta uređaja %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Upotreba: %s UREĐAJ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Nemoguće razdvojiti: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Nemoguće stvaranje slivnika: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "nemoguća obnova izvornog direktorija" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "nepoznato stanje `%s': %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "nemoguće stvaranje privremene datoteke: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "nemoguće stvaranje privremenog direktorija: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"nemoguć pronalazak IEEE1275 putanje uređaja za %s.\n" +"Morate postaviti `boot-device' varijablu ručno." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: nije pronađen" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"`nvsetenv' neuspjelo. \n" +"Morate postaviti `boot-device' varijablu ručno. Na IEEE1275 upit, upišite:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Morate postaviti `SystemPartition' i `OSLoader' ručno." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "nema `/' u canonical nazivu datoteke" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() neuspio" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "nemoguće primanje naizmjeničnih podataka" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Nedovoljne ovlasti za pristup firmveru, pod pretpostavkom BIOS-a" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "nema dostupnih EFI rutina pri pokretanju u BIOS načinu" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "neočekivana EFI greška" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Nemoguć pronalazak slobodnog BootNNNN utora" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"ovaj naziv GPT particije ne sadrži BIOS Particiju Pokretača; ugradnja neće " +"biti moguća" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "vaša BIOS Particija Pokretača je premalena; ugradnja neće biti moguća" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sektor %llu već koristi raid kontroler `%s'; izbjegavajte ga. Zatražite od " +"proizvođača da ne sprema podatke u MBR prostor" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sektor %llu već koristi program `%s'; izbjegavate ga. Ovaj softver može " +"izazvati probleme pokretanja sustava ili druge probleme u budućnosti. " +"Zatražite od autora da ne spremaju podatke u zapisu pokretanja" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"ostali softver koristi ugrađeno područje i zato nema dovoljno prostora za " +"core.img. Takav softver često pokušava spremiti podatke na način da " +"izbjegne otkrivanje. Preporučujemo da to istražite" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"ovaj msdos format naziv particije nema post-MBR prostor; ugradnja neće biti " +"moguća" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"vaš prostor ugradnje je neobično mali. core.img neće pristajati u njega." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Učini particiju aktivnom" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "nije primarna particija" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Particija %d je sada aktivna. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Uklonjena aktivna oznaka na %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Promijeni vrstu particije" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Postavi `hidden' oznaku u vrstu particije" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "vrsta particije 0x%x nije valjana" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Postavljanje vrste particije na 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "nemoguće prekidanje 0 ponavljanja" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "nije u funkciji sadržaja" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "neispravan naziv varijable `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "neočekivani završetak datoteke" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[BROJ]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Izađi iz ponavljanja" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Nastavi ponavljanja" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Shift parametri položaja." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VRIJEDNOST]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Postavi parametre položaja." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Vrati se iz funkcije." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] DATOTEKA" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Učitaj sliku pozadine za aktivni terminal." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "BOJA" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Postavi boju pozadine za aktivni terminal." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Prikaži sadržaj CBMEM konzole." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Postavi serijski priključak." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Postavi adresu serijskog priključka." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Postavi brzinu serijskog priključka." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Postavi duljinu riječi serijskog priključka." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Postavi paritet serijskog priključka." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Postavi bit zaustavljanja serijskog priključka." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Postavi osnovnu frekvenciju." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Omogući/Onemogući RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "serijski priključak `%s' nije pronađen" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "nepodržano upravljanje protokom serijskog priključka" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[MOGUĆNOSTI...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Podesi serijski priključak." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "nepoznata vrsta izraza informacije `%s'" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "vizualno-poredan UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Nepoznato enkôdiranje" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Trenutna vrsta izraza informacija:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminal je ASCII-samo [uobičajeno]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal je logično-poredan UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminal je vizualno-poredan UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminal ima određenu geometriju." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ŠIRINAxVISINA." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "neispravne specifikacije dimenzija terminala" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "terminal %s nije pronađen ili nije rukovan s izrazom informacije" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g ŠxV] IZRAZ [VRSTA]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Postavite vrstu informacije izraza iz IZRAZ U VRSTU.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Prikaži i pokreni argumente bloka." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "bitmap datoteka `%s' je nepodržanog formata" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE info: inačica: %d.%d OEM softver rev: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " ukupno memorije: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "nema pronađenog prikladnog video načina rada" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "pristup odbijen" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULI" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "predučitaj određene module MODULI" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "instaliraj samo MODULE i njihove zavisnosti [zadano=sve]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEME" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "instaliraj TEME [uobičajeno=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "SLOVA" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "instaliraj SLOVA [uobičajena=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LOKALIZACIJA" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "instaliraj samo LOKALIZACIJU [zadano=sva]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "sažmi GRUB datoteke [neobavezno]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "odaberite sažimanje koje će koristiti slika jezgre" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "koristi slike i module u DIR [uobičajeno=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "koristi prijevode u DIR [uobičajeni=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "koristi teme u DIR [uobičajeno=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "postavi DATOTEKU kao javni ključ za provjeru potpisa" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "nemoguće preimenovanje datoteke %s u %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "disk ne postoji, stoga se vraćam natrag na uređaj particije %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Naredbe:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Stvori praznu datoteku bloka okruženja." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Popiši trenutne varijable." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "postavi [NAZIV=VRIJEDNOST...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Postavi varijable." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "ukloni [NAZIV...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Obriši varijable." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Mogućnosti:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Morate zadati bar jednu naredbu.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "NAREDBA NAZIVA DATOTEKE" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Alat za uređivanje bloka okruženja." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Ako je NAZIV DATOTEKE `-', zadana vrijednost %s se koristi.\n" +"\n" +"Ne postoji `delete' naredba, ako želite obrisati cijeli blok\n" +"okruženja, korsitite `rm %s'." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "Neispravan blok okruženja" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "Neispravan parametar %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "blok okruženja je premali" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "čitanje diska neuspjelo na pomaku %lld, duljini %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "neispravna vrijednost preskoka %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "greška čitanja na pomaku %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "nemoguće otvaranje datoteke OS-a `%s': %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "nemoguće zapisivanje u stdout: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "usporedi neuspjeh na pomaku %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Datoteka OS-a %s greška otvaranja: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "`loopback' naredba neuspjela: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "`cryptomount' naredba neuspjela: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "nemoguće primanje UUID-a" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PUTANJA" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Prikaži datoteke u PUTANJI." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp LOKALNA DATOTEKA" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopiraj DATOTEKU u lokalnu datoteku LOKALNO." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat DATOTEKA" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Kopiraj DATOTEKU u standardni izlaz." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp LOKALNA DATOTEKA" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Usporedi DATOTEKU s lokalnom datotekom LOKALNO." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex DATOTEKA" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Prikaži sadržaj DATOTEKE heksadecimalno." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc DATOTEKA" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Provjera crc32 jedinstvene vrijednosti DATOTEKE." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist DATOTEKA" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Prikaži popis blokiranih DATOTEKE." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid UREĐAJ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Izračunaj XNU UUID uređaja." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "BROJ" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Preskoči N bitove u izlaznoj datoteci." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Rukovanje N bitovima u izlaznoj datoteci." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Odredi broj ulaznih datoteka." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Postavi varijablu okruženja otkrivanja grešaka." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Montiraj uređaje za šifriranje." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "DATOTEKA|upit" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Učitaj zfs ključ šifriranja." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Nesažeti podaci." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Neispravan broj diska.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Broj diska mora prednjačiti popisu diskova.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Naredba nije navedena.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Nema dovoljno parametara za naredbu.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Neispravna naredba %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "NAREDBE PUTANJE_SLIKE" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Alat otklanjanja grešaka za upravljački program datotečnog sustava." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "postavi naziv datoteke ulaza za 32-bitni dio." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "postavi naziv datoteke ulaza za 64-bitni dio." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "postavi naziv datoteke izlaza. Zadano je STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[MOGUĆNOSTI]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Spoji 32-bitnu i 64-bitnu binarnu datoteku u jednu Apple univerzalnu." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Nedostaje ulazna datoteka\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "nemoguće kopiranje `%s' u `%s': %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "nemoguće sažimanje `%s' u `%s'" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "nemoguće otvaranje direktorija `%s': %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "nemoguće brisanje `%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage je kompajlirana bez XZ podrške" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Nepoznat format sažimanja %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "neprepoznato sažimanje `%s'" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "nepoznat format odredišta %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "nemoguće pronaći lokalni `%s'" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s ne postoji. Odredite --target ili --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "neispravna modinfo datoteka `%s'" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Nepoznata platforma `%s-%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Instaliraj više od jednog uređaja?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "instaliraj GRUB slike u direktorij DIR/%s umjesto u %s direktorji" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ODREDIŠTE" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"instaliraj GRUB za ODREDIŠNU platformu [zadano=%s]; dostupna odredišta: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"učini uređaj pokretljiv s diskete (uobičajeno za fdX uređaje). Može se " +"slomiti na određenim BIOS-ima." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "obriši mapu uređaja ako već postoji" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "instaliraj iako su problemi otkriveni" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "koristi datoteku identifikacije iako je UUID dostupan" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"disk modul za korištenje (biosdisk ili izvoran). Ova mogućnost je samo " +"dostupna na BIOS odredištu." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"ne nadopunjuj `boot-device'/`Boot*' NVRAM varijable. Ova mogućnost je samo " +"dostupna na EFI i IEEE1275 odredištima." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "ne sondiraj datotečne sustave u UREĐAJIMA." + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "nemoj instalirati sektor pokretanja" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Ne primjenjuj nikakve reed-solomon kôdove pri ugrađivanju core.img. Ta " +"mogućnost je samo moguća na x86 BIOS sustavima." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"instalacijski uređaj je uklonjiv. Ova mogućnost je dostupna samo na EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"ID učitača pokretanja sustava. Ova mogućnost je samo dostupna na EFI i " +"Macovima." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "koristi DIR kao EFI korijensku particiju sustava." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "koristi DIR za PPC MAC instalaciju." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "koristi DATOTEKU kao slova naziva" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "koristi BOJU za nazive" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "koristi BOJU za pozadinu naziva" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "koristi ZNAK kao inačicu proizvoda" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[MOGUĆNOST] [UREĐAJ_INSTALACIJE]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Instalirajte GRUB na vaš uređaj." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"UREĐAJ_INSTALACIJE mora biti naziv datoteke uređaja sustava.\n" +"%s kopira GRUB slike u %s. Na nekim platformama, može instalirati GRUB u " +"sektor pokretanja." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "uređaj %s je određen više puta u mapi uređaja %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Nemoguće otkrivanje vaše platforme. Koristite --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Instalacija za %s platforme.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "instalacijski uređaj nije određen" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "nemoguć pronalazak EFI direktorija" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "nemoguće pronalazak uređaja za %s (je li /dev montiran?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "nemoguć pronalazak GRUB uređaja za %s. Provjerite svoj device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s ne izgleda poput EFI particije" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Pronašli ste grešku" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "datotečni sustav na %s nije ni HFS ni HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"pokušaj instalacije na šifrirani disk bez omogućenog cryptodiska. Postavi `" +"%s' u datoteci `%s'" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Nemoguće stvaranje datoteke: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "nema dostupnih opisa za vašu plaformu. Očekujte smanjene performanse" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NIJE POKRENUTO: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "odabrana particija nije PReP particija" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "neuspjelo kopiranje Gruba u PReP particiju" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"PReP particija nije prazna. Ako ju sigurno želite koristiti, pokrenite dd " +"kako bi ju obrisali: `%s'" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "ID EFI učitač pokretanja nije određen." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "UPOZORENJE: nije izvedena instalacija određene platforme" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Instalacija završena. Nema prijavljenih grešaka." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "dopusti za x86-temeljene macove" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "dopusti za ppc-temeljene macove" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Nema određenih putanja ili uređaja.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc PUTANJA|--x86 DATOTEKA" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Mac format dopusti na HFS ili HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Upotreba: %s [ULAZNA DATOTEKA [IZLAZNA DATOTEKA]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype greška %d učitava slikovni znak 0x%x za U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (srednji)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (najljeviji)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (najdesniji)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Izvan raspona zamjene (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Izvan raspona pretrage: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Nepodržana vrsta zamjene: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Nepodržan opis zamjene: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Nepodržan opseg zamjene: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "UPOZORENJE: nepodržani parametri značajke slova: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "spremi izlaz u DATOTEKU [potrebno]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "odaberi sadržaj slova" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "OD-DO[,OD-DO]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "postavi raspon slova" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "postavi naziv slova" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "VELIČINA" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "postavi veličinu slova" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "postavi silazak slova" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "postavi uspon slova" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "pretvori u podebljana slova" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "prisli auto naglašavanje" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "onemogući naglašavanje" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "zanemari bitmap prikaz pri učitavanju" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "neispravan raspon slova" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[MOGUĆNOSTI] DATOTEKA_SLOVA" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Pretvori uobičajen format datoteke slova u PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "Izlazna datoteka mora biti određena" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType neuspjelo" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "nemoguće otvaranje datoteke %s, sadržaj %d: greška %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "nemoguće postavljanje %dx%d veličine slova: Freetype greška %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "postavi prefiks direktorija" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"postavi DATOTEKU kao memdisk sliku\n" +"Uključuje `-p (memdisk)/boot/grub' i zaobilazi bilo koji prefiks prije " +"omogućen, ali sam prefiks može se zaobići kasnijim mogućnostima" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "ugradi DATOTEKU kao početno podešavanje" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "dodaj segment NAPOMENE za CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "izlaz stvara sliku u DATOTECI [zadano=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "stvara sliku u FORMATU" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "dostupni formati:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "nepoznat format odredišta %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[MOGUĆNOST]... [MODULI]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Stvori sliku pokretanja GRUBA." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Odredišni format nije određen (koristi -O mogućnost)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Prefiks nije određen (koristi -p mogućnost)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"`%s' je nepotpuno: početna adresa je 0x%llx umjesto 0x%llx: ld.gold greška?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "postavi naziv ulazne datoteke. Zadan je STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Nepoznat identifikator skeniranja tipkovnice %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Nepoznat kôd skeniranja tipkovnice 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"Greška: nije pronađen valjani raspored tipkovnice. Provjerite raspored.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Generiraj GRUB raspored tipkovnice s prve Linux konzole." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "korijenski direktorij TFTP poslužitelja" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relativan poddirektorij na mrežnom poslužitelju" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Priprema GRUB mrežne slike pokretanja na mrežnom_direktoriju/poddirektoriju " +"pod pretpostavkom da je mrežni_direktorij TFTP root." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "nepodržana platforma %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Direktorij mrežnog pokretanja za %s je stvoren. Podesite svoj DHCP " +"poslužitelj za točku u %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Broj PBKDF2 ponavljanja" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Duljina stvorene jedinstvene vrijednosti" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Duljina soli podataka" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Stvori PBKDF2 jedinstvenu vrijednost lozinke." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "neuspjelo čitanje lozinke" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Ponovno upišite lozinku: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "lozinke se ne podudaraju" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "nemoguće primanje naizmjeničnih sol podataka" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "broj greške šifriranja %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDF2 jedinstvena vrijednost vaše lozinke je %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Nema određene putanje.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "PUTANJA" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Pretvori naziv datoteke sustava u GRUB naziv." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "spremi ROM slike u DIR [neobavezno]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "koristi DATOTEKU kao xorriso [neobavezno]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "koristi ZNAK kao naziv proizvoda" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"omogući sparc pokretanje. Onemogućuje HFS+, APM, ARCS i pokretanje kao slike " +"diska za i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"omogući ARCS (big-endian mips machines, većinu SGI) pokretanje. Onemogućuje " +"HFS+, APM, sparc64 i pokretanje kao slike diska za i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "Napravi GRUB CD-ROM, disk, USB i disketnu sliku pokretanja." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Stvara CD/USB/disketnu sliku. Argumenti drugačiji od mogućnosti ovog " +"programa su proslijeđeni u xorriso, i označuju izvorišne datoteke, izvorišne " +"direktorije, ili bilo koju od mkisofs mogućnosti prikazanu u `%s' izlazu." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Mogućnost -- zamjenjuje izvoran xorriso način naredbenog redka." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Pošta zahtijeva xorriso podrške ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[MOGUĆNOST] IZVOR..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "omogućavanje %s podrške..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Vaš xorriso ne podržava `--grub2-boot-info'. Neke značajke su onemogućene. " +"Koristite xorriso 1.2.9 ili noviji." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Vaš xorriso ne podržava `--grub2-boot-info'. Vaša slika jezgre je prevelika. " +"Pokretanje diska onemogućeno. Koristite xorriso 1.2.9 ili noviji." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "Stvara samostojeću sliku (sadrži sve module) u odabranom formatu" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Sintaksa točke grafa (npr. /boot/grub/grub.cfg=./grub.cfg) je prihvaćena" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "SLIKA1 [SLIKA2 ...] TOČKA MONTIRANJA" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "potrebna je slika i točka montiranja" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "dani argument je uređaj sustava, nije putanja" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "odvoji stavke u izlazu pomoću ASCII NUL znakova" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[zadano=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "ispiši ODREDIŠTE" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "dostupna odredišta:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[MOGUĆNOST]... [PUTANJA|UREĐAJ]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Informacije sondiranja uređaja za zadanu putanju (ili uređaja, ako je -d " +"mogućnost zadana)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "čitaj tekst iz DATOTEKE." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "koristi OBOJANI tekst" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "koristi OBOJANU pozadinu" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "postavi oznaku za prikaz" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "koristi DATOTEKU kao slovo (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Prikaži Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Nedostajući argumenti\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[PUTANJA]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Provjerava datoteku skripta podešavanja GRUBA za greške sintaksa." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Greška sintakse u redku %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Skripta `%s' ne sadrži naredbe i ne izvršava ništa\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "koristi DATOTEKU kao sliku pokretanja [zadano=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "koristi DATOTEKU kao sliku jezgre [zadano=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Nema određenog uređaja.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Postavite slike za pokretanje s UREĐAJA.\n" +"\n" +"Uobičajeno ne biste trebali pokretati ovaj program izravno. U zamjenu " +"koristite grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "UREĐAJ mora biti OS uređaj (npr. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Neispravan uređaj `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" +"korijenski direktorij kako će biti viđen za vrijeme pokretanja [zadano=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"trenutni direktorij syslinuxa kako će biti viđen u vrijeme pokretanja " +"[zadan je sadržajni direktorij ulazne datoteke]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "zapiši izlaz u DATOTEKU [zadano=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Pretvori syslinux podešavanje u GRUB podešavanje." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "nemoguće sažimanje slike kernela" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "nepoznato sažimanje %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Raspakiravanje je preveliko" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "datoteka jezgre je prevelika (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "slika kernela je prevelika (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img veličina mora biti %u bajta" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img se ne podudara s poznatom valjanom inačicom. Nastavljate na " +"vlastit rizik." + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "slika firmvera je prevelika" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "neispravan format redka: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "prvi sektor jezgre datoteke nije poravnan sa sektorom" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "nesektorski poravnat podatak je pronađen u datoteci jezgre" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "sektori jezgre datoteke su preusitnjeni" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "veličina `%s' nije %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "veličina `%s' je premala" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Pokušaj instalacije GRUBA na disk s višestrukim nazivom particija ili oboje " +"naziva particija i datotečnih sustava. To još nije podržano." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"neuspjela identifikacija datotečnog sustava u %s; sigurnosna provjera se ne " +"može izvesti" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Čini se kako %s sadrži %s datotečni sustav koji nije poznat da rezervira " +"prostor za DOS izgled pokretanja sustava. Instalacija GRUBA tamo može " +"rezultirati UNIŠTENJEM DATOTEČNOG SUSTAVA ako su vrijedni podaci prebrisani " +"s grub-setup (--skip-fs-probe onemogućuje ovu provjeru, koristite ju na " +"vlastitu odgovornost)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Čini se kako %s sadrži %s mapu particije koja nije poznata da rezervira " +"prostor za DOS izgled pokretanja sustava. Instalacija GRUBA tamo može " +"rezultirati UNIŠTENJEM DATOTEČNOG SUSTAVA ako su vrijedni podaci prebrisani " +"s grub-setup (--skip-fs-probe onemogućuje ovu provjeru, koristite ju na " +"vlastitu odgovornost)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Čini se kako %s sadrži %s mapu particije i LDM koji nije poznat da je " +"sigurna kombinacija. Instalacija GRUBA tamo može rezultirati UNIŠTENJEM " +"DATOTEČNOG SUSTAVA ako su vrijedni podaci prebrisani s grub-setup (--skip-fs-" +"probe onemogućuje ovu provjeru, koristite ju na vlastitu odgovornost)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Pokušaj instalacije GRUBA na particijski disk ili particiju. To nije dobra " +"ideja." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Pokušaj instalacije GRUBA na disk s više particijskih naziva. To još nije " +"podržano." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Stil particije `%s' ne podržava ugradnju" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Datotečni sustav `%s' ne podržava ugradnju" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Vaše područje ugradnje je neobično malo. core.img neće stati u njega." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "nema zaključnika u jezgri" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img nepodudaranje inačice" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "ugradnja nije moguća, ali je potrebna za RAID i LVM instalaciju" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "nemoguće otkrivanje datotečnog sustava na %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "datotečni sustav `%s' ne podržava popis blokiranih" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "ugradnja nije moguća, ali je potrebna za unakrsnu disk instalaciju" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Ugradnja nije moguća, GRUB može jedino biti instaliran u ove postavke " +"koristeći popise blokiranih. Ipak, popisi blokiranih su NEPOUZDANI i njihovo " +"korištenje je obeshrabrujuće." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "neće nastavit s popisima blokiranih" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "popisi blokiranih su neispravni" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "popisi blokiranih su nepotpuni" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Upotreba: %s -o IZLAZ CKBMAP_ARGUMENTI...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Napravi datoteku rasporeda tipkovnice GRUBA." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "ispiši ovu poruku i izađi" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "ispiši informaciju inačice i izađi" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s stvara raspored tipkovnice za GRUB pomoću ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Prijavite greške na ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: mogućnost zahtijeva argument -- `%s'\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Upotreba: %s [MOGUĆNOST]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Stvori grub datoteku podešavanja" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "spremi stvoreno podešavanje u DATOTEKU [zadano=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Neprepoznata mogućnost `%s'\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Morate biti pokrenuti kao korijenski korisnik\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Nije pronađeno.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Stvaranje grub datoteke podešavanja ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Greške sintakse su otkrivene u stvorenoj GRUB datoteci podešavanja.\n" +"Pobrinite se da ne postoje greške u /etc/default/grub\n" +"i /etc/grub.d/* datotekama ili pošaljite izvješće greške s\n" +"%s priloženoj datoteci." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "Završeno" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Upozorenje:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Upotreba: %s [MOGUĆNOST] NAVOD_IZBORNIKA\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "Postavi zadanu stavku pokretanja za GRUB, samo za sljedeće pokretanje." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "očekujte GRUB slike u direktoriju DIR/%s umjesto u %s direktoriju" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"STAVKA_IZBORNIKA je broj, naslov stavke izbornika ili identifikator stavke " +"izbornika. Zapamtite da stavke izbornika u\n" +"podizbornicima ili pod-podizbornicima zahtijevaju određivanje komponenti " +"podizbornika a zatim\n" +"komponentu stavke izbornika. Naslovi trebaju biti odvojeni upotrebom znaka \n" +"većim-od (>) bez dodatnih razmaka. Ovisno o vašoj ljusci neki znakovi " +"uključujući > možda trebaju esc. Više informacija o ovome je dostupno\n" +"u GRUB Priručniku u odjeljku o 'zadanim' naredbama. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Više od jedne stavke izbornika?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Stavka izbornika nije navedena." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Postavi zadanu stavku izbornika pokretanja za GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Ovo zahtijeva postavku GRUB_DEFAULT=spremljenju u %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"STAVKA_IZBORNIKA je broj, naslov stavke izbornika ili identifikator stavke " +"izbornika." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Zahtjevan je serijski terminal ali GRUB_SERIAL_COMMAND nije određena. Zadani " +"parametar će se koristiti." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Pronađena tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Pronađena pozadina: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Nepodržan format slike" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Postavljanje GRUB_TIMEOUT u vrijednost bez nule kada je GRUB_HIDDEN_TIMEOUT " +"postavljen nije više podržan." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Pronađen GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Pronađen Hurd modul: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Neke Hurd stvari su pronađene, ali nedovoljne za pokretanje." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, s Hurdom %s (oporavak sustava)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, s Hurdom %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Ne koristite stari naslov `%s' za GRUB_DEFAULT, koristite `%s' (za inačice " +"prije 2.00) ili `%s' (za 2.00 ili novije)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Učitavanje GNU Macha ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Učitavanje Hurda..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Napredne mogućnosti za %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Učitavanje kernela Illumosa ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, s kFreeBSD %s (oporavak sustava)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, s kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Učitavanje kernela FreeBSD %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Pronađen kernel FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Pronađen direktorij kernel modula: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, s Linuxom %s (oporavak sustava)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, s Linuxom %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Učitavanje Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Učitavanje početnog ramdiska ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Pronađena linux slika: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Pronađena initrd slika: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, s kernelom %s (pomoću %s, oporavak sustava)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, s kernelom %s (pomoću %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Pronađen NetBSD kernel: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (učitač pokretanja sustava)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (učitač pokretanja sustava)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Pronađen %s na %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bitni)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bitni)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(na %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, s Xenom %s i Linuxom %s (oporavak sustava)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, s Xenom %s i Linuxom %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, s Xen hipervizor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Učitavanje Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hipervizor, inačica %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Napredne mogućnosti za %s (s Xen hipervizorom)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Pronađen %s na %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s još nije podržan u grub-mkconfig.\\n" diff --git a/po/hu.gmo b/po/hu.gmo new file mode 100644 index 0000000000000000000000000000000000000000..eb8627f7efbdf0c968fd52013558f1553dd7d0bb GIT binary patch literal 135043 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 literal 0 HcmV?d00001 diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 000000000..73beb3875 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,7036 @@ +# Hungarian translation for grub. +# Copyright (C) 2010, 2011, 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# Gabor Kelemen , 2010, 2011, 2017. +# Balázs Úr , 2014. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-05 15:31+0100\n" +"Last-Translator: Gabor Kelemen \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "nem támogatott soros port sebesség" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "nem támogatott soros port paritás" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "nem támogatott soros port stop bitszám" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "nem támogatott soros port szóhossz" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Ne töltse be a vesszőkkel elválasztott listán megadott gazdatáblázatokat." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Csak a vesszőkkel elválasztott listán megadott táblázatok betöltése." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Az 1-es verziójú táblázatok exportálása az operációs rendszernek." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "" +"A 2-es és 3-as verziójú táblázatok exportálása az operációs rendszernek." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Az RSDP, XSDT és RSDT OEMID-jának beállítása." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Az RSDP, XSDT és RSDT OEMTABLE ID-jának beállítása." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Az RSDP, XSDT és RSDT OEMTABLE revíziójának beállítása." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Az RSDP, XSDT és RSDT létrehozó mezőjének beállítása." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Az RSDP, XSDT és RSDT létrehozó revíziójának beállítása." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Ne frissítse az EBDA-t. Egyes BIOS-ok esetén hibákat vagy fagyásokat " +"javíthat, de hatástalan, ha az OS nem fogadja az RSDP-t a GRUB-ból." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "túl korai fájlvége: %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TÁBLÁZAT1,TÁBLÁZAT2|--load-only=TÁBLÁZAT1,TÁBLÁZAT2] " +"FÁJL1 [FÁJL2] […]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Gazda ACPI-táblázatok és a paraméterben megadott táblázatok betöltése." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "hiba: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "nincs elég memória" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "„%s” nem olvasható: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI leállítás nem sikerült" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Eszközök felsorolása." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "fájlnévnek kellett volna következnie" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FÁJL" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Blokklista kiírása." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "először a kernelt kell betöltenie" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Operációs rendszer elindítása." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Nem érhető el rendszerindítás idejű statisztika\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Rendszerindítás idejű statisztika megjelenítése." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Lemezgyorsító statisztika: találatok = %lu (%lu.%02lu%%), mulasztások = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Nem érhető el lemezgyorsító statisztika\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Lemezgyorsító információk lekérése." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "DOS-stílusú CR/NL sorvégek elfogadása." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Fájl tartalmának megjelenítése." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "két argumentumot kell megadni" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "A(z) „%s” fájl összehasonlítása ezzel: „%s”:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "A fájlok mérete eltér: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "A fájlok eltérők a(z) %llu eltolásnál: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "A fájlok teljesen egyformák.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FÁJL1 FÁJL2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Két fájl összehasonlítása." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Másik beállítófájl betöltése." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Másik beállítófájl betöltése a környezet módosítása nélkül." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Másik beállítófájl betöltése a környezet módosítása nélkül, de csak a " +"menübejegyzések átvételével." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Másik beállítófájl betöltése, de csak a menübejegyzések átvételével." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[év-]hónap-nap] [óra:perc[:másodperc]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Aktuális dátum és idő megjelenítése/beállítása." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Ne írja ki a záró új sort." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Visszaper fedések értelmezésének engedélyezése." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] SZÖVEG" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Egy sornyi szöveg megjelenítése." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Újraindítás a firmware beállító menübe." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Videoprobléma javítása." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM kép meg van adva." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Nem sikerült engedélyezni a ROM területet." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"BIOS-szerű szerkezetek létrehozása a meglévő operációs rendszerekkel való " +"visszafelé kompatibilitáshoz." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "BIOS-kiíratás betöltése." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "SZÖVEG …" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Argumentumok kiértékelése GRUB parancsokként" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Ellenőrzés, hogy a FÁJL indítható-e i386 PAE Xen nem kiváltságos " +"vendégkernelként" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Ellenőrzés, hogy a FÁJL indítható-e x86_64 Xen nem kiváltságos " +"vendégkernelként" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Ellenőrzés, hogy a FÁJL használható-e Xen x86 kiváltságos vendégkernelként" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Ellenőrzés, hogy a FÁJL használható-e x86 multiboot kernelként" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Ellenőrzés, hogy a FÁJL használható-e x86 multiboot2 kernelként" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Ellenőrzés, hogy a FÁJL ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Ellenőrzés, hogy a FÁJL ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Ellenőrzés, hogy a FÁJL IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Ellenőrzés, hogy a FÁJL MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Ellenőrzés, hogy a FÁJL MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Ellenőrzés, hogy a FÁJL SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Ellenőrzés, hogy a FÁJL POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Ellenőrzés, hogy a FÁJL x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Ellenőrzés, hogy a FÁJL x86 Linux 32-bites protokoll támogatással" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Ellenőrzés, hogy a FÁJL kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Ellenőrzés, hogy a FÁJL i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Ellenőrzés, hogy a FÁJL x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Ellenőrzés, hogy a FÁJL x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Ellenőrzés, hogy a FÁJL i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Ellenőrzés, hogy a FÁJL x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Ellenőrzés, hogy a FÁJL EFI-fájl" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Ellenőrzés, hogy a FÁJL x86_64 EFI-fájl" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Ellenőrzés, hogy a FÁJL IA64 EFI-fájl" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Ellenőrzés, hogy a FÁJL ARM64 EFI-fájl" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Ellenőrzés, hogy a FÁJL ARM EFI-fájl" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Ellenőrzés, hogy a FÁJL hibernált állapotban lévő hiberfil.sys" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Ellenőrzés, hogy a FÁJL x86_64 XNU (Mac OS X kernel)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Ellenőrzés, hogy a FÁJL i386 XNU (Mac OS X kernel)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Ellenőrzés, hogy a FÁJL XNU (Mac OS X kernel) hibernált lemezkép" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Ellenőrzés, hogy a FÁJL BIOS bootsector" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "hamis" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "KAPCSOLÓK FÁJL" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Ellenőrzés, hogy a FÁJL egy megadott típusú." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "nincs ilyen partíció" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Az új MBR kiírva ide: „%s”\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ESZKÖZ [PARTÍCIÓ[+/-[TÍPUS]]] …" + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"A GPT meghajtó ESZKÖZÉNEK feltöltése hibrid MBR-el. A megadott partíciók " +"részei lesznek a hibrid MBR-nek. Maximum 3 partíció engedélyezett. A TÍPUS " +"egy MBR típus. A + jelzi, hogy az adott partíció aktív. Egyszerre csak egy " +"partíció lehet aktív." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Leállítja a számítógépet. Ez a parancs nem működik minden firmware-" +"megvalósításon." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Használandó hash megadása." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "A fájlok hash-einek ellenőrzése a hash-lista FÁJLLAL." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "A hash-lista alapkönyvtára." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "KVT" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Ne álljon meg az első hiba után." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Fájl kibontása az ellenőrzőösszeg számolása előtt." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: OLVASÁSI HIBA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HASH ELTÉRÉS\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FÁJL [-p ELŐTAG]] [FÁJL1 [FÁJL2 …]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Hash ellenőrzőösszeg kiszámolása vagy ellenőrzése." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FÁJL [-p ELŐTAG]] [FÁJL1 [FÁJL2 …]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Speciális energiakezelés (APM) beállítása\n" +"(1=alacsony, …, 254=magas, 255=ki)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Energia mód megjelenítése." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Az ATA biztonsági beállítások fagyasztása az újraindításig." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "A SMART egészségi állapot megjelenítése." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Automatikus zajkezelés (AAM) beállítása\n" +"(0=ki, 128=csendes, …, 254=gyors)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Készenléti időkorlát beállítása\n" +"(0=ki, 1=5mp, 2=10mp, …, 240=20p, 241=30p, …)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Meghajtó készenléti módba állítása." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Meghajtó alvó módba állítása." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Meghajtó azonosítójának és beállításainak kiírása." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Az ATA IDENTIFY szektor nyers tartalmának megjelenítése." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART letiltása/engedélyezése (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Ne írjon ki üzeneteket." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "egy argumentumot kell megadni" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[KAPCSOLÓK] LEMEZ" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA lemezparaméterek lekérése/beállítása." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Használat:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MINTA …]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Súgóüzenet megjelenítése." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Eltolásbájtok kihagyása a fájl kezdetétől." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Csak HOSSZ bájt beolvasása." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[KAPCSOLÓK] FÁJL_VAGY_ESZKÖZ" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Egy fájl vagy a memória nyers tartalmának megjelenítése." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "A CMOS tartalom nyers kiírásának megjelenítése." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BÁJT:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Bit tesztelése a CMOS BÁJT:BIT helyén." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Bit törlése a CMOS BÁJT:BIT helyén." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Bit beállítása a CMOS BÁJT:BIT helyén." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "A magindítás rendszerindítás idejű statisztikájának megjelenítése." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Magindítási táblázatok listázása." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Ellenőrzés, hogy a CPU támogatja-e a 64-bites (hosszú) módot " +"(alapértelmezett)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Ellenőrzés, hogy a CPU támogatja-e a fizikai címkiterjesztést (PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "CPU szolgáltatásainak ellenőrzése." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Az aktuális társítások megjelenítése." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Minden társítás visszaállítása az alapértelmezett értékekre." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Közvetlen és fordított társítások végrehajtása egyaránt." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Nem lettek meghajtók újratársítva" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS lemez #szám ------> GRUB/BIOS eszköz" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubeszköz oslemez." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "A BIOS meghajtótársítások kezelése." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Ne használja az APM-et a számítógép leállítására." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "A rendszer leállítása, ha lehet, akkor APM használatával." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "nem található APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"%u.%u verzió\n" +"32-bit CS = 0x%x, hossz = 0x%x, eltolás = 0x%x\n" +"16-bit CS = 0x%x, hossz = 0x%x\n" +"DS = 0x%x, hossz = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "a 16-bites védett felület támogatott\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "a 16-bites védett felület nem támogatott\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "a 32-bites védett felület támogatott\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "a 32-bites védett felület nem támogatott\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "a CPU üresjárat lelassítja a processzort\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "a CPU üresjárat nem lassítja le a processzort\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM letiltva\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM engedélyezve\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM szabad\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM elfoglalt\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "APM-információk megjelenítése." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "fájlnévnek vagy ütemnek és hangjegynek kellett volna következnie" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Érvénytelen ütem itt: %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "a(z) „%s” fájl nem található" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "azonosítatlan szám" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FÁJL | ÜTEM [MAGASSÁG1 HOSSZ1] [MAGASSÁG2 HOSSZ2] … " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Dallam lejátszása." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "numlock mód beállítása" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "capslock mód beállítása" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "scrolllock mód beállítása" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "beszúró mód beállítása" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "szünet mód beállítása" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "nyomja meg a bal shift billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "nyomja meg a jobb shift billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "nyomja meg a SysRq billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "nyomja meg a NumLock billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "nyomja meg a CapsLock billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "nyomja meg a ScrollLock billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "nyomja meg az Insert billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "nyomja meg a bal alt billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "nyomja meg a jobb alt billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "nyomja meg a bal ctrl billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "nyomja meg a jobb ctrl billentyűt" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "ne frissítse a LED állapotot" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[GOMBNYOMÁS1] [GOMBNYOMÁS2] …" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Egy gombnyomás-sorozat emulálása" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "A „go” futtatása a GRUB folytatásához." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Visszatérés az IEEE1275 prompthoz." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Beolvasott érték mentése a VÁLTOZÓNÉV változóba." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VÁLTOZÓNÉV" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "8-bites érték olvasása a PORTRÓL." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "16-bites érték olvasása a PORTRÓL." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "32-bites érték olvasása a PORTRÓL." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT ÉRTÉK [MASZK]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "8-bites ÉRTÉK írása a PORTRA." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "16-bites ÉRTÉK írása a PORTRA." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "CÍM ÉRTÉK [MASZK]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "32-bites ÉRTÉK írása a PORTRA." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "a(z) „%s” változó nincs beállítva" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Egy billentyűzetkiosztás betöltése." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Shift billentyű ellenőrzése." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Control billentyű ellenőrzése." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Alt billentyű ellenőrzése." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Billentyűmódosító állapotának ellenőrzése." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "nem található a parancs: „%s”" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Adja meg a jelszót: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Örökölt beállítások feldolgozása ugyanabban a környezetben" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Örökölt beállítások feldolgozása új környezetben" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Örökölt beállítások feldolgozása ugyanabban a környezetben csak a " +"menübejegyzések átvételével" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Örökölt beállítások feldolgozása új környezetben csak a menübejegyzések " +"átvételével" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TÍPUS] FÁJL [ARG …]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Örökölt grub „kernel” parancs szimulálása" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FÁJL [ARG …]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Örökölt grub „initrd” parancs szimulálása" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Örökölt grub „modulenounzip” parancs szimulálása" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] JELSZÓ [FÁJL]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Örökölt grub „password” parancs szimulálása" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Örökölt grub „password” parancs szimulálása menübejegyzés módban" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Fájlnév megadása." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "A környezetfájl aláírás-ellenőrzésének kihagyása." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FÁJL] [-s|--skip-sig] [változónév_a_fehérlistához] […]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Változók betöltése a környezeti blokkfájlból." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FÁJL]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Változók felsorolása a környezeti blokkfájlból." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FÁJL] változónév […]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Változók mentése a környezeti blokkfájlba." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Hosszú lista megjelenítése részletesebb információkkal." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Méretek kiírása emberek által olvasható formátumban." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Minden fájl felsorolása." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Hálózati protokollok:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FÁJL …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Eszközök és fájlok felsorolása." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Csak az 1-es verziójú táblázatok megjelenítése." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Csak a 2-es és 3-as verziójú táblázatok megjelenítése." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "ACPI információ megjelenítése." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "elérhető RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "foglalt RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI visszanyerhető RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPI nem illékony tároló RAM" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "hibás RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "állandó RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "állandó RAM (örökölt)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "magindítási táblázatokat tartó RAM" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "firmware kódot tartó RAM" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "alap_cím = 0x%llx, hossz = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "alap_cím = 0x%llx, hossz = 0x%llx, típus = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "A firmware által biztosított memóriatérkép kiírása." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCI eszközök felsorolása." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Intel mac-ek HFS vagy HFS+ partíciójának bless FÁJLJA." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "PPC mac-ek HFS vagy HFS+ partíciójának bless KÖNYVTÁRA." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "CÍM" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "8-bites érték olvasása a CÍMRŐL." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "16-bites érték olvasása a CÍMRŐL." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "32-bites érték olvasása a CÍMRŐL." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "8-bites ÉRTÉK írása a CÍMRE." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "16-bites ÉRTÉK írása a CÍMRE." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "32-bites ÉRTÉK írása a CÍMRE." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Menübejegyzés típusa." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "SZÖVEG" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Felhasználók listája, akiknek engedélyezett ezen bejegyzés indítása." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "FELHASZNÁLÓNÉV[,FELHASZNÁLÓNÉV]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Billentyűzetgomb ezen bejegyzés gyors indításához." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "BILLENTYŰZETGOMB" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "SZÖVEG használata menübejegyzés törzsként." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Menübejegyzés azonosító." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Ezt a bejegyzést bármely felhasználó indíthatja." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOKK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Egy menübejegyzés meghatározása." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Egy almenü meghatározása." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Név\tHivatkozások száma\tFüggőségek\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Ezen üzenet megjelenítése." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "CÍM [MÉRET]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Memóriatartalmak megjelenítése." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Egy modul eltávolítása." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Betöltött modulok megjelenítése." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Kilépés a GRUB-ból." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "CS5536 nem található" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 itt: %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Rendszerkezelő buszvezérlő I/O tér van itt: 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM foglalat szám: %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Kiírt SPD bájtok: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Teljes flash méret: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Memóriatípus: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Rész szám: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Memóriatípus: Ismeretlen." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Memória-információk kiírása." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s nem támogatja az UUID-kat" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Átváltás natív lemezmeghajtókra. Ha nincs modul megadva, az alapértelmezett " +"beállítás (pata,ahci,usbms,ohci,uhci,ehci) lesz használva" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"PARANCS végrehajtása a partíción.\n" +"Használja a „parttool PARTÍCIÓ help” parancsot az elérhető parancsok " +"listájához." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Elnézést, nincs elérhető parttool ehhez: %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "ismeretlen argumentum: „%s”" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTÍCIÓ PARANCSOK" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "FELHASZNÁLÓ JELSZÓ" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"A felhasználó jelszavának (egyszerű szöveg) beállítása. Nem ajánlott és nem " +"biztonságos." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "érvénytelen PBKDF2 jelszó" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "FELHASZNÁLÓ PBKDF2_JELSZÓ" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "A felhasználó jelszavának beállítása (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Eszköz kiválasztása gyártó és eszközazonosítók alapján." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[gyártó]:[eszköz]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Eszköz kiválasztása a buszon lévő pozíciója alapján." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[busz]:[tárolóhely][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "hiányzó „%c” szimbólum" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POZÍCIÓ] [-d ESZKÖZ]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "A PCI beállítási tér nyers kiírásának megjelenítése." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Változó beállítása a visszatérési értékre." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Meghajtó meghatározása." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Partíciótérkép típusának meghatározása." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Fájlrendszer típusának meghatározása." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Fájlrendszer UUID meghatározása." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Fájlrendszer címkéjének meghatározása." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "a(z) „%s” fájlrendszer nem támogatja a címkéket" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ESZKÖZ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Eszközinformációk lekérése." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[KÖRNYVÁLT]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Változó beállítása felhasználói bemenettel." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "A számítógép újraindítása." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Az egyező komponens SZÁM tárolása a VÁLTOZÓNÉVBEN." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[SZÁM:]VÁLTOZÓNÉV" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGKIF SZÖVEG" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Annak tesztelése, hogy a REGKIF illeszkedik-e a SZÖVEGRE." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NÉV [VÁLTOZÓ] [TIPPEK]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Eszközök keresése fájl alapján. Ha a VÁLTOZÓ meg van adva, akkor az elsőként " +"megtalált eszköz bekerül a változóba." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Eszközök keresése címke alapján. Ha a VÁLTOZÓ meg van adva, akkor az " +"elsőként megtalált eszköz bekerül a változóba." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Eszközök keresése UUID alapján. Ha a VÁLTOZÓ meg van adva, akkor az elsőként " +"megtalált eszköz bekerül a változóba." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Eszközök keresése fájl alapján." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Eszközök keresése fájlrendszercímke alapján." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Eszközök keresése fájlrendszer-UUID alapján." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Változó beállítása az első megtalált eszközhöz." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Ne vizsgálja meg a hajlékonylemez-meghajtókat." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Elsőnek próbálja a TIPP eszközt. Ha a TIPP vesszőre végződik, próbálja az " +"alpartíciókat is." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "TIPP" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Elsőnek próbálja a TIPP eszközt, ha jelenleg IEEE1275-ön fut. Ha a TIPP " +"vesszőre végződik, próbálja az alpartíciókat is." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Elsőnek próbálja a TIPP eszközt, ha jelenleg BIOS-on fut. Ha a TIPP vesszőre " +"végződik, próbálja az alpartíciókat is." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Elsőnek próbálja a TIPP eszközt, ha a közvetlen hardverhozzáférés támogatva " +"van. Ha a TIPP vesszőre végződik, próbálja az alpartíciókat is." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Elsőnek próbálja a TIPP eszközt, ha jelenleg EFI-n fut. Ha a TIPP vesszőre " +"végződik, próbálja az alpartíciókat is." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Elsőnek próbálja a TIPP eszközt, ha jelenleg ARC-n fut. Ha a TIPP vesszőre " +"végződik, próbálja az alpartíciókat is." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint TIPP [--hint TIPP] …] NÉV" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Eszközök keresése fájl, fájlrendszercímke vagy fájlrendszer-UUID alapján. Ha " +"a --set meg van adva, akkor az elsőként megtalált eszköz bekerül egy " +"változóba. Ha nincs megadva változónév, akkor a „root” lesz használva." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "%x regisztere ennek: %x:%02x.%x = %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POZÍCIÓ] [-d ESZKÖZ] [-v VÁLTOZÓ] REGISZTER[=ÉRTÉK[:MASZK]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "PCI-eszközök kezelése." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Részletes visszaszámlálás." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Megszakítás engedélyezése az ESC használatával." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "MÁSODPERCEK_SZÁMA" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Várakozás a megadott másodpercig." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "a syslinux lemez gyökér könyvtára [alapértelmezett=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"a syslinux aktuális könyvtára [alapértelmezetten a bemeneti fájl " +"szülőkönyvtára]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "a feltételezett bemenet egy isolinux konfigurációs fájl." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "a feltételezett bemenet egy pxelinux konfigurációs fájl." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "a feltételezett bemenet egy syslinux konfigurációs fájl." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "A syslinux beállítás végrehajtása ugyanabban a környezetben" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "A syslinux beállítás végrehajtása új környezetben" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"A syslinux beállítás végrehajtása ugyanabban a környezetben csak a " +"menübejegyzések átvételével" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"A syslinux beállítás végrehajtása új környezetben csak a menübejegyzések " +"átvételével" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "nincs megadva terminál" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "a(z) „%s” terminál nem található" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktív beviteli terminálok:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Elérhető beviteli terminálok:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktív kimeneti terminálok:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Elérhető kimeneti terminálok:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINÁL1] [TERMINÁL2] …" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Bemeneti terminál felsorolása vagy kiválasztása." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Kimeneti terminál felsorolása vagy kiválasztása." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "KIFEJEZÉS ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Egy kifejezés kiértékelése." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "KIFEJEZÉS" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Ugyanazon fájl betöltése több módon." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Méret meghatározása minden olvasási műveletnél" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "érvénytelen blokkméret" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Fájlméret: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Eltelt idő: %d.%03d mp \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Sebesség: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s MÉRET] FÁJLNÉV" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Fájl olvasási sebességének tesztelése." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "nincs megadva parancs" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Eltelt idő: %d.%03d másodperc \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "PARANCS [ARGUMENTUMOK]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Idő mérése a PARANCS használatával" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Fordítás nagybetűsre." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Fordítás kisbetűsre." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[KAPCSOLÓK] [HALMAZ1] [HALMAZ2] [SZÖVEG]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "A HALMAZ1 karakterek fordítása HALMAZ2-re a SZÖVEGBEN." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Nem csinál semmit, sikeresen." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Nem csinál semmit, sikertelenül." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USB-támogatás tesztelése." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "A nyilvános kulcsfájl aláírás-ellenőrzésének kihagyása." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "hibás aláírás" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "a(z) %08x nyilvános kulcs nem található" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "a(z) „%s” modul nincs betöltve" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FÁJL ALÁÍRÁS_FÁJL [NYILVÁNOS_KULCS_FÁJL]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Leválasztott aláírás ellenőrzése." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] NYILVÁNOS_KULCS_FÁJL" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "A NYILVÁNOS_KULCS_FÁJL hozzáadása a megbízható kulcsokhoz." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "A megbízható kulcsok listájának megjelenítése." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "NYILVÁNOS_KULCS_AZONOSÍTÓ" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "A NYILVÁNOS_KULCS_AZONOSÍTÓ eltávolítása a megbízható kulcsok közül." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Csak szöveg " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Közvetlen szín, maszk: %d/%d/%d/%d pozíció: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Palettázott " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Sík " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Fekete-fehér " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Ismeretlen videomód " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDID ellenőrzőösszeg érvénytelen" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID verzió: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Elsődleges mód: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Nem érhető el elsődleges mód\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "érvénytelen videomód meghatározás: „%s”" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "A támogatott videomódok listája:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Jelmagyarázat: maszk/pozíció=vörös/zöld/kék/foglalt" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter „%s”:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Nincs elérhető információ" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " A videoadapter előkészítése meghiúsult" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[SzxM[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Elérhető videomódok felsorolása. Ha meg van adva felbontás, akkor csak az " +"arra illeszkedő módok felsorolása." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[SzxM]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Videoalrendszer tesztelése SzxM módban." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Videoalrendszer tesztelése." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[KVT]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Xen tároló felsorolása." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VÁLTOZÓNÉV]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"64 bites UUID átalakítása XNU-hoz megfelelő formátumba. Ha a -l meg van " +"adva, tartsa kisbetűsen, ahogy a blkid elkészítette." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "a 0x%llx szektor olvasási hiba innen: „%s”" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "a 0x%llx szektor írási hiba ide: „%s”" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Csatolás UUID alapján." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Összes csatolása." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Az összes kötet csatolása beállított „boot” jelzővel." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "„%s” nem nyitható meg: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "„%s” nem pozicionálható: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "FORRÁS|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Egy titkosított eszköz csatolása." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Nem található a(z) „%s” fizikai kötet. Néhány modul hiányozhat a mag " +"lemezképből." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "a(z) %s fizikai kötet nem található" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "nincs adathordozó itt: „%s”" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Az sha256 betöltése nem sikerült" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Az sha512 betöltése nem sikerült" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "az ELI metaadatok olvasása nem sikerült" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "hibás ELI varázslat vagy verzió" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Kísérlet a mesterkulcs visszafejtésére…" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Adja meg a jelszót ehhez: %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "A(z) %d. tárolóhely nyitva\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "kísérlet a(z) „%s” lemezen kívüli olvasására vagy írásra" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "nem lehet írni a CD-ROM-ra" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Natív lemezmeghajtók vannak használatban. A firmware lemezcsatoló " +"használatának visszautasítása." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"az LDM beágyazott partíciója túl kicsi, a beágyazás nem lesz lehetséges" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"ez az LDM nem rendelkezik beágyazott partícióval, a beágyazás nem lesz " +"lehetséges" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "A megadott visszacsatolási meghajtó törlése." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] ESZKÖZNÉV FÁJL." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Virtuális meghajtó készítése egy fájlból." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "0x%x áthelyezése még nincs megvalósítva" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "nincs szimbólumtáblázat" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "ez az ELF fájl nem a megfelelő típusú" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "EFI-emulátor betöltése és előkészítése." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "EFI-emulátor betöltésének befejezése." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "EFI-emulátor eltávolítása a memóriából." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "a(z) „%s” szimbólum nem található" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Betöltött betűkészletek:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FÁJL…" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Adjon meg legalább egy betöltendő betűkészletfájlt." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Betöltött betűkészletek felsorolása." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "a szimbolikus linkek egymásba ágyazása túl mély" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "kísérlet a fájl végének olvasására" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "nem található a többeszközös fájlrendszer egy szükséges tageszköze" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "nem könyvtár" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "nem szabályos fájl" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "a core.img szokatlanul nagy. Nem fog beférni a beágyazási területere" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "érvénytelen fájlnév: „%s”" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "az ellenőrzőösszeg ellenőrzés meghiúsult" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "nem érhető el visszafejtő kulcs" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "a MAC ellenőrzés meghiúsult" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "A feltételezett bemenet nyers." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "A feltételezett bemenet hex." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "A feltételezett bemenet jelszó." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Adja meg a ZFS jelszót: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FÁJL]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "A FÁJLBAN tárolt ZFS csomagolókulcs importálása." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "A virtuális eszköz eltávolítva" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "A virtuális eszköz hibázott" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "A virtuális eszköz offline" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "A virtuális eszköz lefokozva" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "A virtuális eszköz online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Helytelen virtuális eszköz: típus nem érhető el" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Levél virtuális eszköz (fájl vagy lemez)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Rendszerindító útvonal: nem érhető el\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Rendszerindító útvonal: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Útvonal: nem érhető el" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Útvonal: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Eszköz-azonosító: nem érhető el" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Eszköz-azonosító: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Ez a VDEV egy tükör" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Ez a VDEV egy RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Helytelen VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV %d gyermekkel\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "A VDEV elemszám (%d) nem helyes\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "%d VDEV elemszám:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Ismeretlen virtuális eszköztípus: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Tárolóállapot: aktív" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Tárolóállapot: exportálva" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Tárolóállapot: megsemmisítve" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Tárolóállapot: lefoglalva a meleg tartalékhoz" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Tárolóállapot: 2. szintű ARC eszköz" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Tárolóállapot: előkészítetlen" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Tárolóállapot: nem érhető el" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Tárolóállapot: potenciálisan aktív" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Tárolónév: nem érhető el" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Tárolónév: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Tároló GUID: nem érhető el" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Tároló GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Nem lehet lekérni a tárolóállapotot" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Azonosítatlan tárolóállapot" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Nem érhető el virtuális eszköz fa" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "ZFS információk kiírása az ESZKÖZRŐL." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FÁJLRENDSZER [VÁLTOZÓ]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "A ZFS-BOOTFSOBJ kiírása vagy tárolás a VÁLTOZÓBAN" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Most csatlakoztassa a távoli hibakeresőt." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "GDB csonk indítása a megadott porton" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Töréspont a GDB-be" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "GDB csonk leállítása" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "túl korai fájlvég" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Lefordítja a karakterláncot a jelenlegi beállításokkal." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Nyomja meg az Enter billentyűt a kijelölt rendszer indításához, az „e” " +"billentyűt a parancsok szerkesztéséhez indítás előtt, vagy a „c” billentyűt " +"a parancssor eléréséhez. Az ESC visszaviszi az előző menübe." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Nyomja meg az Enter billentyűt a kijelölt rendszer indításához, az „e” " +"billentyűt a parancsok szerkesztéséhez indítás előtt, vagy a „c” billentyűt " +"a parancssor eléréséhez." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: indítás, „e”: beállítások, „c”: parancssor" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "A kijelölt bejegyzés automatikusan elindul %d másodperc múlva." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%dmp van hátra." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dmp" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB rendszerindítási menü" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s értéke nem nagyobb mint %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Az ARGP_HELP_FMT paraméter értéket igényel" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Az ARGP_HELP_FMT paraméternek pozitívnak kell lennie" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Ismeretlen ARGP_HELP_FMT paraméter" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Szemét az ARGP_HELP_FMT-ben: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"A hosszú kapcsolók kötelező vagy opcionális argumentumai szintén kötelezők " +"vagy opcionálisak bármely megfelelő rövid kapcsolónál." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " vagy: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [KAPCSOLÓ…]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"További információkért próbálja a(z) „%s --help” vagy „%s --usage” " +"parancsot.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "A hibák itt jelenthetők: %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Ismeretlen rendszerhiba" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "ezen súgólista megjelenítése" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "rövid használati utasítás megjelenítése" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NÉV" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "a program nevének beállítása" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "MP" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "szünet MP másodpercre (alapértelmezetten 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "a programverzió kiírása" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMHIBA) A verzió nem ismert!" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Túl sok argumentum\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMHIBA) A kapcsolót ismerni kellene?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: a(z) „%s” kapcsoló nem egyértelmű, lehetőségek:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a(z) „--%s” kapcsoló nem enged meg argumentumot\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a(z) „%c%s” kapcsoló nem enged meg argumentumot\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a(z) „--%s” kapcsolóhoz egy argumentum szükséges\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ismeretlen „--%s” kapcsoló\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ismeretlen „%c%s” kapcsoló\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: érvénytelen kapcsoló -- „%c”\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a kapcsoló egy argumentumot igényel -- „%c”\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a „-W %s” kapcsoló nem egyértelmű\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a „-W %s” kapcsoló nem enged meg argumentumot\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a „-W %s” kapcsolóhoz egy argumentum szükséges\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Sikerült" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Nincs találat" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Érvénytelen reguláris kifejezés" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Érvénytelen egyeztető karakter" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Érvénytelen karakterosztálynév" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Záró visszaper" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Érvénytelen visszahivatkozás" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Pár nélküli [ vagy [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Pár nélküli ( vagy \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Pár nélküli \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "A \\{\\} tartalma érvénytelen" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Érvénytelen tartományvég" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Elfogyott a memória" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Érvénytelen megelőző reguláris kifejezés" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "A reguláris kifejezés túl korán véget ért" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "A reguláris kifejezés túl nagy" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Pár nélküli ) vagy \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "ismeretlen reguláris kifejezés hiba" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Nincs előző reguláris kifejezés" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Helló, világ" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "A világ üdvözlése." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "kísérlet a fájlon kívüli pozicionálásra" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "nem támogatott gzip formátum" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "az lzop fájl sérült" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "az xz fájl sérült vagy nem támogatott blokk kapcsolók" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "érvénytelen architektúra-függő ELF varázslat" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[KÖRNYVÁLT=ÉRTÉK]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Egy környezeti változó beállítása." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "KÖRNYVÁLT" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Egy környezeti változó eltávolítása." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Eszközök vagy fájlok felsorolása." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Modul behelyezése." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "a(z) „%s” lemez nem található" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "kísérlet a partíción kívüli olvasására vagy írásra" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "érvénytelen architektúra-független ELF varázslat" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "az eszközszám túllépi a korlátot" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "„%s” nem írható: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"a(z) „%s” device.map bejegyzés érvénytelen. Mellőzés. Javítsa vagy törölje a " +"device.map bejegyzést." + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"a(z) „%s” eszköznév a device.map bejegyzésben érvénytelen. %s érték " +"használata helyette. Használja a [hfc]d[0-9]* formát (például „hd0” vagy " +"„cd”)." + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "„%s” nem nyitható meg: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "ESZKÖZNÉV" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Gyökéreszköz beállítása." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "a FÁJL használata eszköztérképként [alapértelmezés=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "a FÁJL használata memórialemezként" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "a KVT könyvtárban lévő GRUB fájlok használata [alapértelmezés=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "részletes üzenetek kiírása." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "várakozás, amíg a hibakereső csatolni fog" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Ismeretlen extra argumentum: „%s”." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB emulátor." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Hiba a parancssori argumentumok feldolgozásakor\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "A „gdb %s %d” futtatása, és az ARGS.HOLD beállítása nullára.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: figyelmeztetés:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: hiba:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "a(z) „%s” fájl túl nagy" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "ismeretlen fájlrendszer" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Leállítás meghiúsult" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Kilépés meghiúsult" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "túlcsordulás észlelhető" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "A helytelenül egymásba ágyazott partíciók eldobása (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Ismeretlen parancs: „%s”.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Ezen súgó megjelenítése és kilépés." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "A parancs használatának megjelenítése és kilépés." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "hiányzó kötelező kapcsoló ehhez: „%s”" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "a(z) „%s” argumentum egy egész számot igényel" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"egy érték hozzá lett rendelve a(z) „%s” argumentumhoz, miközben az nem " +"igényel argumentumot" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Visszakövetés kiírása." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "A GRUB még nem tudja, hogy hogyan kell ezt a gépet leállítani!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Az alapértelmezett kiszolgáló: ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "érvénytelen színspecifikáció: „%s”" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Újraindítás meghiúsult" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[HOSSZ]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Véletlenszerű adatok hexdumpja." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "az eszközfát meg kell adni (lásd „devicetree” parancs)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "érvénytelen zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "érvénytelen eszközfa" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Linux betöltése." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Initrd betöltése." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "DTB fájl betöltése." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"egyszerű lemezkép kernel nem támogatott - fordítsa újra engedélyezett " +"CONFIG_(U)EFI_STUB használatával" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "az FDT elérése sikertelen" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "először a Xen hipervizort kell betöltenie" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Töltsön be egy Xen hipervizort" + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Xen modul betöltése." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[KAPCSOLÓK]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "BIOS-alapú rendszer indítása." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Másik rendszerbetöltő betöltése." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Kimenet megjelenítése minden konzolon." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Soros konzol használata." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Fájlnév bekérése, amelyből újra kell indulni." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "CD-ROM használata gyökérként." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Felhasználói beállításirányítás hívása." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Indításkor belépés a KDB-be." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "GDB távoli hibakereső használata DDB helyett." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Minden indítási kimenet letiltása." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Várakozás billentyűnyomásra minden kimeneti sor után." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Befordított gyökéreszköz használata." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Indítás egy felhasználós módban." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Indítás részletes üzenetekkel." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Ne induljon újra, csak álljon le." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Beállított eszközök módosítása." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comEGYSÉG[,SEBESSÉG]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMP letiltása." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPI letiltása." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Ne jelenítsen meg rendszerindítási diagnosztikai üzeneteket." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Indítás hibakeresési üzenetekkel." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Normál kimenet elnyomása (a figyelmeztetések maradnak)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[CÍM|comEGYSÉG][,SEBESSÉG]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "név" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "típus" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "cím" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "méret" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Indítás vak módban" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "FreeBSD kernel betöltése." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "OpenBSD kernel betöltése." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "NetBSD kernel betöltése." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "FreeBSD környezet betöltése." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "FreeBSD kernelmodul betöltése." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "NetBSD kernelmodul betöltése." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "NetBSD kernelmodul (ELF) betöltése." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "FreeBSD kernelmodul betöltése (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "kOpenBSD memórialemez betöltése." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Másik magindítási tartalom betöltése." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Az örökölt „ask” paraméter többé nem támogatott." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s elavult. Használja helyette a gfxpayload=%s beállítást a linux parancs " +"előtt.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s elavult. A(z) %d VGA mód nem azonosítható. Használja helyette a " +"gfxpayload=SZÉLESSÉGxMAGASSÁG[xMÉLYSÉG] beállítást a linux parancs előtt.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FÁJL" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "„%s” mérete túl nagy" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "FreeDOS kernel.sys betöltése." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "NTLDR vagy BootMGR betöltése." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "A Plan9 eszközök kitalált leképezésének felülbírálása." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBESZKÖZ=PLAN9ESZKÖZ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGS" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Plan9 kernel betöltése." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Egy PXE lemezkép betöltése." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Truecrypt ISO betöltése." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "az initrd már be van töltve" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Modul betöltése." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Nyomjon meg egy billentyűt az xnu indításához" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "„device-properties” kiíratás betöltése." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Nem található az FPSWA meghajtó" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Az FPSWA protokoll nem volt képes megtalálni a csatolót" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Nem található FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA kiadás: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FÁJL [ARGOK…]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "FPSWA verzió megjelenítése." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "FIGYELEM: nem lesz elérhető konzol az OS-hez" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Multiboot 2 kernel betöltése." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Multiboot 2 modul betöltése." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Multiboot kernel betöltése." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Multiboot modul betöltése." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Háttérkép mód." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "XNU rendszerkép betöltése." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64-bites XNU rendszerkép betöltése." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "XNU kiterjesztéscsomag betöltése." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "XNU kiterjesztés betöltése." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "KÖNYVTÁR [OSCsomagSzükséges]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "XNU kiterjesztéskönyvtár betöltése." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "XNU memórialemez betöltése. Elérhető lesz az OS-ben md0-ként." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Indítókép betöltése az XNU-hoz." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Egy hibernált XNU rendszerképének betöltése." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "CÍM1,MASZK1[,CÍM2,MASZK2[,…]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Memóriaterületek hibássá nyilvánítása (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "ETTŐL[K|M|G] EDDIG[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Memóriaterületek eltávolítása a megadott tartományból." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "négy argumentumot kell megadni" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "azonosítatlan hálózati csatoló: „%s”" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "nem található DHCP információ" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "nem találhatók DHCP kapcsolók" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "nem található %d DHCP kapcsoló" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "azonosítatlan DHCP kapcsolóformátum specifikáció: „%s”" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "nem található hálózati kártya" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "%s automatikus beállítása nem sikerült" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KÁRTYA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "egy bootp automatikus beállítás végrehajtása" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VÁLTOZÓ CSATOLÓ SZÁM LEÍRÁS" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"DHCP kapcsoló lekérése és elmentése a VÁLTOZÓBA. Ha a VÁLTOZÓ -, akkor " +"kiírja az értéket." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "nincsenek beállított DNS kiszolgálók" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "a tartománynév komponens túl hosszú" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "nem található DNS rekord" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "nem érkezett DNS válasz" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "csak ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "csak ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "ipv4 előnyben részesítése" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "ipv6 előnyben részesítése" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "érvénytelen argumentum" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "CÍM DNSKISZOLGÁLÓ" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Egy DNS keresés végrehajtása" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSKISZOLGÁLÓ" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Egy DNS kiszolgáló hozzáadása" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Egy DNS kiszolgáló eltávolítása" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "DNS kiszolgálók felsorolása" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "nem sikerült elküldeni a hálózati csomagot" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "az interpret nem támogatott" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "az alloc-mem sikertelen" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "a free-mem sikertelen" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "nem támogatott HTTP válasz" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "nem támogatott %d HTTP hiba: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "„%s” megnyitása túllépte az időkorlátot" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "időtúllépés: nem sikerült feloldani a hardvercímet" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "feloldhatatlan cím: %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "azonosítatlan hálózati cím: „%s”" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "a cél elérhetetlen" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "úthurok észlelhető" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "a cím nem található" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "nem törölheti ezt a címet" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Nem támogatott hardvercím típus: %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Nem támogatott címtípus: %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "három argumentumot kell megadni" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "nem található kártya" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "átmeneti" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Ismeretlen címtípus: %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "nincs kiszolgáló megadva" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "„%s” olvasása túllépte az időkorlátot" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "RÖVIDNÉV KÁRTYA CÍM [HARDVERCÍM]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Egy hálózati cím hozzáadása." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KÁRTYA [HARDVERCÍM]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Egy IPv6 automatikus beállítás végrehajtása" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "RÖVIDNÉV" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Egy hálózati cím törlése." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "RÖVIDNÉV NET [CSATOLÓ| gw ÁTJÁRÓ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Egy hálózati út hozzáadása." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Egy hálózati út törlése." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "hálózati utak felsorolása" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "hálózati kártyák felsorolása" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "hálózati címek felsorolása" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "kapcsolat visszautasítva" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "kapcsolati időtúllépés" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Adja meg a felhasználónevet: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[FELHASZNÁLÓLISTA]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Ellenőrzés, hogy a felhasználó rajta van-e a FELHASZNÁLÓLISTÁN." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "A lehetséges parancsok:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "A lehetséges eszközök:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "A lehetséges fájlok:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "A lehetséges partíciók:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "A lehetséges argumentumok:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "A lehetséges dolgok:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Figyelmeztetés: szintaktikai hiba (hiányzó perjel) itt: „%s”\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Figyelmeztetés: érvénytelen előtérszín: „%s”\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Figyelmeztetés: érvénytelen háttérszín: „%s”\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "KÖRNYVÁLT [KÖRNYVÁLT] …" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Változók exportálása." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Vasárnap" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Hétfő" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Kedd" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Szerda" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Csütörtök" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Péntek" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Szombat" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "a modul nincs betöltve" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB %s verzió" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Az ESC mindig kilép." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimális BASH-szerű szerkesztés támogatott. Az első szóhoz a TAB felsorolja " +"a lehetséges parancskiegészítéseket. Bárhol máshol a TAB felsorolja a " +"lehetséges eszköz- vagy fájlkiegészítéseket. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "A képernyő törlése." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Belépés a normál módba." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Kilépés a normál módból." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Nyomjon meg egy billentyűt a folytatáshoz…" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "„%s” indítása" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Visszaváltás erre: „%s”" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Az alapértelmezett és a tartalék bejegyzések indítása is sikertelen.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Parancslista indítása" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimális Emacs-szerű képernyőszerkesztés támogatott. A TAB felsorolja a " +"kiegészítési lehetőségeket. Nyomja meg a Ctrl-x kombinációt vagy az F10-et " +"az indításhoz, a Ctrl-c kombinációt vagy az F2-t a parancssorhoz, vagy az " +"ESC-t a szerkesztések eldobásához és visszatéréshez a GRUB menübe." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "A kiemelt elem kijelöléséhez használja a(z) %C és %C billentyűket." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "%s partíció:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "%s eszköz:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "A fájlrendszer nem hozzáférhető" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Fájlrendszer típusa: %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Címke: „%s”" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Utolsó módosítás ideje: %d-%02d-%02d %02d.%02d.%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Nem található ismert fájlrendszer" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partíció kezdete: %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Szektorméret: %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Teljes méret ismeretlen" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Teljes méret: %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--TOVÁBB--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "nem nyitható meg a(z) „%s” konfigurációs fájl: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "nem érhető el tömörítés a platformhoz" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "nem érhetők el IEEE1275 rutinok a platformhoz" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "nem érhetők el EFI rutinok a platformhoz" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "nem érhetők el SGI rutinok a platformhoz" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "nem érhető el véletlen szám generátor az operációs rendszerhez" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "A „device-mapper” fa előállítása sikertelen" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "nem lehet csatolni a titkosított „%s” kötetet: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "a geom megnyitása nem sikerült" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "nem található geli fogyasztó" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "a geli UUID lekérése nem sikerült" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "nem található geom „part” osztály" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "igazítatlan eszközméret" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "kísérlet a(z) „%s” magkép beolvasására a GRUB-ból" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "kísérlet a(z) „%s” magkép beolvasására a GRUB-ból újra" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "„%s” nem olvasható be megfelelően" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "a magkép szektorainak beolvasása meghiúsult" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "nem lehet a fordító parancssort megszerezni a(z) „%s” útvonalhoz: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "a fordító parancssor üres a(z) „%s” útvonalnál" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"a(z) „%s” fordítónak a(z) „%s” útvonalnál számos nem kapcsoló szavai vannak, " +"legalább „%s” és „%s”" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"a(z) „%s” fordító a(z) „%s” útvonalnál csak kapcsolókat adott meg, nem " +"található az eszközrész" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "A(z) „%s” tároló-információi nem tartalmaznak típust" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "„%s” nem helyi lemez" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"A(z) „%s” tároló-információi nem jeleznek sem egyszerű partíciót, sem " +"egyszerű lemezt" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "nem lehet lekérni a blokklistákat: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "a blokkméret nem osztható 512-vel" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "érvénytelen nulla blokkméret" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "nem lehet lekérni a blokklistákat" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION hiba: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "nem támogatott RAID verzió: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO hiba: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO hiba: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Nem lehet megnyitni a folyamot innen: %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "a RAID eszköz fajtája ismeretlen: „%s”" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"az „obppath” nem található a(z) „%s” szülő könyvtáraiban, nincs IEEE1275 név " +"felderítés" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "„%s” egyszerűsített útvonalának lekérése sikertelen" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "ismeretlen eszköztípus: %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Használat: %s ESZKÖZ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Nem lehet elágazni: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Nem lehet csövet létrehozni: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "nem lehet visszaállítani az eredeti könyvtárat" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "nem lehet elérni: „%s”: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "nem hozható létre átmeneti fájl: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "nem hozható létre átmeneti könyvtár: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"nem található az IEEE1275 eszköz útvonala ehhez: %s.\n" +"Kézzel kell majd beállítania a „boot-device” változót." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: nem található" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"az „nvsetenv” meghiúsult.\n" +"Kézzel kell majd beállítania a „boot-device” változót. Az IEEE1275 " +"parancssorba gépelje be:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" +"Kézzel kell majd beállítania a „SystemPartition” és az „OSLoader” értékét." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "nincs „/” az egyszerűsített fájlnévben" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() sikertelen" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "nem sikerült lekérni a véletlen adatokat" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Nincs megfelelő jogosultság a firmware hozzáféréséhez, BIOS feltételezve" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "nem érhetők el EFI rutinok a BIOS módban való futtatáskor" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "váratlan EFI hiba" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Nem található szabad BootNNNN tárolóhely" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"ez a GPT partíciós címke nem tartalmaz BIOS indítási partíciót, a beágyazás " +"nem lesz lehetséges" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "a BIOS indítási partíciója túl kicsi, a beágyazás nem lesz lehetséges" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"A(z) %llu szektort a(z) „%s” raid-vezérlő már használja, elkerülés. Kérje " +"meg a gyártót, hogy ne tároljon adatokat az MBR résben." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"A(z) %llu szektort a(z) „%s” program már használja, elkerülés. Ez a szoftver " +"indítási vagy egyéb problémákat okozhat a jövőben. Kérje meg a szerzőit, " +"hogy ne tároljanak adatokat az indítási sávban." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"más szoftverek használják a beágyazási területet, és nincs elég hely a core." +"img számára. Az ilyen szoftverek gyakran oly módon próbálnak adatokat " +"tárolni, amely elkerüli a felismerést. Azt javasoljuk, hogy nyomozza ki." + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"ennek az msdos-stílusú partíciós címkének nincs utó-MBR rése, a beágyazás " +"nem lesz lehetséges" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "a beágyazási területe szokatlanul kicsi. A core.img nem fog beleférni." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Partíció aktívvá tétele" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "nem elsődleges partíció" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "A(z) %d. partíció most már aktív.\n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Aktív jelző törölve ezen: %d.\n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Partíciótípus módosítása" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "A „hidden” jelző beállítása a partíciótípusban" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "a 0x%x partíciótípus nem érvényes" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Partíciótípus beállítása 0x%x értékre\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "nem lehet megszakítani 0 ciklust" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "nincs a függvénytörzsben" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "érvénytelen változónév: „%s”" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "nem várt fájlvége" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[SZÁM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Kilépés ciklusokból" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Ciklusok folytatása" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Helyzeti paraméterek eltolása." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ÉRTÉK]…" + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Helyzeti paraméterek beállítása." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Visszatérés egy függvényből." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FÁJL" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Háttérkép betöltése az aktív terminálhoz." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "SZÍN" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Háttérszín beállítása az aktív terminálhoz." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "CBMEM konzoltartalom megjelenítése." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "A soros egység beállítása." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "A soros port címének beállítása." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "A soros port sebességének beállítása." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "A soros port szóhosszának beállítása." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "A soros port paritásának beállítása." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "A soros port stop bitjeinek beállítása." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Az alapfrekvencia beállítása." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "RTS/CTS engedélyezése/letiltása." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "a(z) „%s” soros port nem található" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "nem támogatott soros port folyamvezérlés" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[KAPCSOLÓK…]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Soros port beállítása." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "ismeretlen terminfo típus: „%s”" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "vizuális sorrendű UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Ismeretlen kódolás" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Jelenlegi terminfo típusok:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "A terminál csak ASCII [alapértelmezett]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "A terminál logikai sorrendű UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "A terminál vizuális sorrendű UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "A terminálnak adott geometriája van." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "SZÉLESSÉGxMAGASSÁG." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "hibás terminál dimenzió specifikáció" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "a(z) %s terminál nem található vagy nem kezeli a terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g SzxM] TERM [TÍPUS]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "A TERM terminfo típusának beállítása a TÍPUSRA.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Blokkargumentum kiírása és végrehajtása." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "a(z) %s bitmap fájl nem támogatott formátumú" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE info: verzió: %d.%d OEM szoftver rev: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " összes memória: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "nem található megfelelő videomód" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "hozzáférés megtagadva" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULOK" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "a megadott MODULOK modulok előtöltése" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" +"csak a MODULOK és azok függőségeinek telepítése [alapértelmezett=összes]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TÉMÁK" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "TÉMÁK telepítése [alapértelmezett=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "BETŰK" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "BETŰK telepítése [alapértelmezett=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "TERÜLETI_BEÁLLÍTÁSOK" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "csak a TERÜLETI_BEÁLLÍTÁSOK telepítése [alapértelmezett=összes]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "GRUB fájlok tömörítése [opcionális]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "a magképhez használt tömörítés kiválasztása" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" +"a KVT könyvtárban lévő lemezképek és modulok használata [alapértelmezett=%s/" +"]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "a KVT könyvtárban lévő fordítások használata [alapértelmezett=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "a KVT könyvtárban lévő témák használata [alapértelmezett=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "beágyazott FÁJL mint nyilvános kulcs az aláírás-ellenőrzéshez" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "nem lehet átnevezni a(z) %s fájlt erre: %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "a lemez nem létezik, így visszatérés a(z) %s partícióeszközre" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Parancsok:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Üres környezetblokk-fájl létrehozása." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "A jelenlegi változók felsorolása." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NÉV=ÉRTÉK …]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Változók beállítása." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NÉV …]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Változók törlése." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Kapcsolók:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Legalább egy parancsot meg kell adnia.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FÁJLNÉV PARANCS" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Környezetblokk szerkesztésére szolgáló eszköz." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Ha a FÁJLNÉV „-”, akkor az alapértelmezett %s érték lesz használva.\n" +"\n" +"Nincs „delete” parancs, ha az egész környezetblokkot törölni szeretné, " +"használja az „rm %s” parancsot." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "érvénytelen környezetblokk" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "érvénytelen %s paraméter" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "a környezetblokk túl kicsi" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "a lemezolvasás meghiúsul a(z) %lld eltolásnál, %lld hosszan" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "érvénytelen ugrási érték: %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "olvasási hiba a(z) %llu eltolásnál: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "a(z) „%s” OS fájl nem nyitható meg: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "nem lehet írni a szabványos kimenetre: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "összehasonlítási hiba a(z) %llu eltolásnál" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "a(z) %s OS fájl megnyitási hiba: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "a „loopback” parancs meghiúsult: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "a „cryptomount” parancs meghiúsult: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "az UUID lekérése nem sikerült" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls ÚTVONAL" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Fájlok felsorolása az ÚTVONALON." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FÁJL HELYI" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "A FÁJL átmásolása a HELYI helyi fájlba." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FÁJL" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "A FÁJL átmásolása a szabványos kimenetre." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FÁJL HELYI" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "A FÁJL összehasonlítása a HELYI helyi fájllal." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FÁJL" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "A FÁJL tartalmának megjelenítése hexadecimálisan." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FÁJL" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "A FÁJL crc32 ellenőrző-összegének lekérése." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FÁJL" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "A FÁJL blokklistájának megjelenítése." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid ESZKÖZ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Az eszköz XNU UUID-jának kiszámítása." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "SZÁM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "N bájt átugrása a kimeneti fájlból." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "N bájt kezelése a kimeneti fájlban." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "A bemeneti fájlok számának megadása." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Hibakeresési környezeti változó beállítása." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Titkosított eszközök csatolása." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FÁJL|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Zfs titkosító kulcs betöltése." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Adatok kibontása." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Érvénytelen lemezszám.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "A lemezszámnak meg kell előznie a lemezek listáját.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Nincs megadva parancs.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Nincs elég paraméter a parancshoz.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Érvénytelen parancs: %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "KÉP_ÚTVONAL PARANCSOK" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Hibakeresési eszköz a fájlrendszer-illesztőprogramhoz." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "bemeneti fájlnév beállítása 32-bites részhez." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "bemeneti fájlnév beállítása 64-bites részhez." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "kimeneti fájlnév beállítása. Az alapértelmezett az STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[KAPCSOLÓK]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" +"32-bites és 64-bites binárisok ragasztása egyetlen univerzális Apple-be." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Hiányzó bemeneti fájl\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "a(z) „%s” nem másolható ide: „%s”: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "a(z) „%s” nem tömöríthető ide: „%s”" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "a(z) „%s” könyvtár nem nyitható meg: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "a(z) „%s” nem törölhető: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "a grub-mkimage XZ támogatás nélkül lett lefordítva" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Ismeretlen tömörítési formátum: %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Azonosítatlan tömörítés: „%s”" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "ismeretlen célformátum: %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "nem található a területi beállítás: „%s”" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s nem létezik. Adja meg a --target vagy --directory kapcsolókat." + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "érvénytelen modinfo fájl: „%s”" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Ismeretlen platform: „%s-%s”" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Több mint egy telepítési eszköz?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"a GRUB lemezképek telepítése a KVT/%s könyvtárba a(z) %s könyvtár helyett" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "CÉL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"a GRUB telepítése a CÉL platformhoz [alapértelmezett=%s]; elérhető célok: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"a meghajtó indíthatóvá tétele floppyként (fdX eszközök esetén " +"alapértelmezett). Egyes BIOS-okkal lehet, hogy nem működik." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "eszköztérkép törlése, ha az már létezik" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "telepítés akkor is, ha problémák észlelhetők" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "azonosítófájl használata akkor is, ha UUID érhető el" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"a használandó lemezmodul (biosdisk vagy natív). Ez a lehetőség csak BIOS " +"célnál érhető el." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"ne frissítse a „boot-device”/„Boot*” NVRAM változókat. Ez a lehetőség csak " +"EFI és IEEE1275 céloknál érhető el." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "ne vizsgálja a fájlrendszereket az ESZKÖZÖN" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "ne telepítsen indítószektort" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Ne alkalmazzon semmilyen reed-solomon kódot a core.img beágyazásakor. Ez a " +"lehetőség csak x86 BIOS céloknál érhető el." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"a telepítési eszköz eltávolítható. Ez a lehetőség csak EFI esetén érhető el." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "AZONOSÍTÓ" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"a rendszerbetöltő AZONOSÍTÓJA. Ez a lehetőség csak EFI és Mac-ek esetén " +"érhető el." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "KVT használata az EFI rendszerpartíció gyökereként." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "KVT használat PPC MAC telepítésnél." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "FÁJL használata a címke betűkészleteként" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "SZÍN használata a címkénél" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "SZÍN használata a címke hátterénél" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "SZÖVEG használata termékverzióként" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[KAPCSOLÓ] [TELEPÍTÉSI_ESZKÖZ]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "GRUB telepítése a meghajtójára." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"A TELEPÍTÉSI_ESZKÖZNEK rendszereszköz fájlnévnek kell lennie.\n" +"A(z) %s átmásolja a GRUB lemezképeket ebbe: %s. Néhány platformon a indítási " +"szektorba is telepítheti a GRUB-ot." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "a(z) %s meghajtó többször van megadva a(z) %s eszköztérképen" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Nem lehet meghatározni a platformot. Használja a --target kapcsolót." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Telepítés a(z) %s platformhoz.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "a telepítési eszköz nincs megadva" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "nem található az EFI könyvtár" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "nem található eszköz ehhez: %s (a /dev csatolva van?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"nem található GRUB meghajtó ehhez: %s. Ellenőrizze a device.map bejegyzéseit." + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "a(z) %s nem EFI partíciónak néz ki." + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Egy hibát talált" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "a(z) %s fájlrendszere sem HFS, sem HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"kísérlet a titkosított lemezre telepíteni cryptodisk engedélyezés nélkül. " +"Állítsa be „%s” értékét a(z) „%s” fájlban" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Nem lehet létrehozni a fájlt: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "nem érhető el tipp a platformhoz. Csökkentett teljesítmény várható." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NEM FUT: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "a választott partíció nem egy PReP partíció" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "a GRUB átmásolása nem sikerült a PReP partícióra" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"a PReP partíció nem üres. Ha biztos benne, hogy azt szeretné használni, " +"futtassa a dd parancsot a törléséhez: „%s”" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "az EFI rendszerbetöltő-azonosító nincs megadva." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "FIGYELMEZTETÉS: nem lett platform-specifikus telepítés végrehajtva" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "A telepítés befejeződött. Nem jelentettek hibát." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bless az x86-alapú mac-ekhez" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bless a ppc-alapú mac-ekhez" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Nincs megadva útvonal vagy eszköz.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc ÚTVONAL|--x86 FÁJL" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Mac-stílusú bless ezen: HFS vagy HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Használat: %s [BEFÁJL [KIFÁJL]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype hiba (%d) a 0x%x glyph betöltésekor ehhez: U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (középső)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (bal szélső)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (jobb szélső)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Tartományon kívüli helyettesítés (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Tartományon kívüli keresés: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Nem támogatott helyettesítési típus: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Nem támogatott helyettesítési specifikáció: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Nem támogatott kiterjedés specifikáció: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "FIGYELEM: nem támogatott betűkészlet szolgáltatás paraméterek: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "kimenet mentése FÁJLBA [szükséges]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "betűkép index kiválasztása" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "TÓL-IG[,TÓL-IG]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "betűtartomány beállítása" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "betűcsaládnév beállítása" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "MÉRET" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "betűméret beállítása" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "betűleszállítás beállítása" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "betűemelkedés beállítása" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "átalakítás félkövér betűre" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "automatikus javaslat erőltetése" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "javaslatok tiltása" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "bitmap strikes mellőzése betöltéskor" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "érvénytelen betűtartomány" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[KAPCSOLÓK] BETŰ_FÁJLOK" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "A gyakori betűfájl formátumok átalakítása PF2 formátumra" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "a kimeneti fájlt meg kell adni" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType meghiúsult" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "nem lehet megnyitni a(z) %s fájlt, %d indexet: hiba %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "nem lehet beállítani a(z) %dx%d betűméretet: Freetype hiba %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "előtagkönyvtár beállítása" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"beágyazott FÁJL mint memórialemez-kép\n" +"Magába foglalja a „-p (memdisk)/boot/grub” parancsot és felülbírál minden " +"korábban megadott előtagot, de maga az előtag felülbírálható a későbbi " +"kapcsolókkal" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "beágyazott FÁJL mint egy korai beállítás" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "JEGYZET rész hozzáadása ennél: CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" +"egy előállított kép létrehozása a FÁJLBA [alapértelmezett=szabványos kimenet]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMÁTUM" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "egy kép előállítása FORMÁTUMBAN" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "elérhető formátumok:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "ismeretlen célformátum: %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[KAPCSOLÓ]… [MODULOK]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Egy indítható GRUB lemezkép készítése." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "A célformátum nincs megadva (használja a -O kapcsolót)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Az előtag nincs megadva (használja a -p kapcsolót)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"A(z) „%s” tévesen van összeállítva: a kezdőcíme 0x%llx a 0x%llx helyett: ld." +"gold hiba?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "bemeneti fájlnév beállítása. Az alapértelmezett: STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Ismeretlen billentyűzet vizsgáló azonosító: %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Ismeretlen billentyűzet vizsgálókód: 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"HIBA: nem található érvényes billentyűzet-kiosztás. Ellenőrizze a " +"bemenetet.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "GRUB billentyűzet-kiosztás előállítása a Linux konzolról." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "a TFTP kiszolgáló gyökérkönyvtára" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relatív alkönyvtár a hálózati kiszolgálón" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Előkészíti a hálózati GRUB rendszerindító lemezképet a hálózati_könyvtár/" +"alkönyvtár helyen, feltételezve, hogy a hálózati_könyvtár a TFTP gyökere." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "nem támogatott platform: %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Hálózati indító könyvtár létrehozva ehhez: %s. Állítsa be a DHCP " +"kiszolgálót, hogy ide mutasson: %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "A PBKDF2 iterációk száma" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Az előállított hash hossza" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "A só hossza" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "PBKDF2 jelszó hash előállítása." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "nem sikerült a jelszó olvasása" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Jelszó újra megadása: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "a jelszavak nem egyeznek" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "nem sikerült véletlen adatokat lekérni a sóhoz" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "kriptográfiai hibaszám %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "a jelszavának PBKDF2 hash kódja: %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Nincs útvonal megadva.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ÚTVONAL" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Egy rendszer fájlnév átalakítása GRUB fájlnévre." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ROM lemezképek mentése a KÖNYVTÁRBA [opcionális]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "FÁJL használata mint xorriso [opcionális]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "SZÖVEG használata terméknévként" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"sparc rendszerindítás engedélyezése. Letiltja a HFS+, APM, ARCS és a " +"lemezképként való rendszerindítást az i386-pc esetén" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"ARCS (big-endian mips gépek, főleg SGI) rendszerindítás engedélyezése. " +"Letiltja a HFS+, APM, sparc64 és a lemezképként való rendszerindítást az " +"i386-pc esetén" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "GRUB CD-ROM, lemez, pendrive és floppy indítható lemezkép készítése." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Egy indítható CD/USB/floppy lemezképet állít elő. A program kapcsolóitól " +"eltérő argumentumok át lesznek adva a xorriso programnak, és forrásfájlok, " +"forráskönyvtárak vagy a(z) „%s” kimenete által listázott mkisofs kapcsolók " +"bármelyikének jelzése." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "A -- kapcsoló átvált a natív xorriso parancsmódra." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"A xorriso támogatási kéréseket erre a címre küldje: ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[KAPCSOLÓ] FORRÁS…" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "%s támogatás engedélyezése…" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"A xorriso nem támogatja a „--grub2-boot-info” kapcsolót. Néhány funkció le " +"van tiltva. Használja a xorriso 1.2.9 vagy későbbi verzióját." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"A xorriso nem támogatja a „--grub2-boot-info” kapcsolót. A mag lemezképe túl " +"nagy. A lemezként való indítás le van tiltva. Használja a xorriso 1.2.9 vagy " +"későbbi verzióját." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Egy egyedülálló (minden modult tartalmazó) lemezkép előállítása a kijelölt " +"formátumban" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Graft pont szintaxis (például /boot/grub/grub.cfg=./grub.cfg) elfogadott" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "KÉPFÁJL1 [KÉPFÁJL2 …] CSATOLÁSI_PONT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "egy képfájl és egy csatolási pont szükséges" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "a megadott argumentum egy rendszereszköz, nem egy útvonal" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "az elemek elválasztása a kimenetben ASCII NULL karakterekkel" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[alapértelmezett=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "CÉL kiírása" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "elérhető célok:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[KAPCSOLÓ]… [ÚTVONAL|ESZKÖZ]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Eszköz-információk megvizsgálása egy adott útvonalhoz (vagy eszközhöz, ha a -" +"d kapcsoló meg van adva)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "szöveg olvasása FÁJLBÓL." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "SZÍN használata a szöveghez" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "SZÍN használata a háttérhez" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "címke beállítása a létrehozáshoz" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "FÁJL használata betűkészletként (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Apple .disk_label létrehozása." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Hiányzó argumentumok\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ÚTVONAL]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Ellenőrzi a GRUB parancsfájl beállítófájljának szintaktikai hibáit." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Szintaktikai hiba a(z) %u. sorban\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" +"A(z) „%s” parancsfájl nem tartalmaz parancsokat és semmit sem fog csinálni\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "FÁJL használata rendszerindító képként [alapértelmezett=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "FÁJL használata magképként [alapértelmezett=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Nincs megadva eszköz.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Képfájlok beállítása az ESZKÖZRŐL történő rendszerindításhoz.\n" +"\n" +"Ezt a programot általában nem kell közvetlenül futtatnia. Használja a grub-" +"install parancsot helyette." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "Az ESZKÖZNEK OS eszköznek kell lennie (például /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Érvénytelen eszköz: „%s”.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "gyökérkönyvtár, ahogy futási időben látható lesz [alapértelmezett=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"a syslinux aktuális könyvtára, ahogy futási időben látható lesz " +"[alapértelmezetten a bemeneti fájl szülőkönyvtára]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "kimenet írása FÁJLBA [alapértelmezett=szabványos kimenet]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "A syslinux beállítás átalakítása GRUB beállításra." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "a rendszermagkép nem tömöríthető" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "ismeretlen tömörítés: %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "A kibontó túl nagy" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "a magkép túl nagy (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "a rendszermagkép túl nagy (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "a diskboot.img mérete %u bájt kell legyen" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"Az fwstart.img nem egyezik az ismert jó verzióval. Folytatás csak saját " +"felelősségre." + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "a firmware lemezkép túl nagy" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "érvénytelen sorformátum: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "a magfájl első szektora nincs szektorokhoz igazítva" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "a magfájlban nem szektorokhoz igazított adatok találhatók" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "a magfájl szektorai túlzottan töredezettek" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "a(z) „%s” mérete nem %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "a(z) „%s” mérete túl kicsi" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Kísérlet a GRUB telepítésére több partíciócímkével vagy partíciócímkével és " +"fájlrendszerrel egyaránt rendelkező lemezre. Ez még nem támogatott." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"nem azonosítható a fájlrendszer ezen: %s, a biztonsági ellenőrzés nem " +"hajtható végre" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s úgy tűnik, hogy %s fájlrendszert tartalmaz, amely nem tart fenn helyet a " +"DOS-stílusú rendszerindításnak. A GRUB oda telepítése a FÁJLRENDSZER " +"MEGSEMMISÜLÉSÉT okozhatja, ha a grub-setup értékes adatokat ír felül (a --" +"skip-fs-probe kihagyja ezt az ellenőrzést, saját felelősségre használja)." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s úgy tűnik, hogy %s partíció-térképet tartalmaz, amely nem tart fenn " +"helyet a DOS-stílusú rendszerindításnak. A GRUB oda telepítése a " +"FÁJLRENDSZER MEGSEMMISÜLÉSÉT okozhatja, ha a grub-setup értékes adatokat ír " +"felül (a --skip-fs-probe kihagyja ezt az ellenőrzést, saját felelősségre " +"használja)." + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s úgy tűnik, hogy %s partíció-térképet és LDM-et tartalmaz, amely nem " +"biztonságos kombinációként ismert. A GRUB oda telepítése a FÁJLRENDSZER " +"MEGSEMMISÜLÉSÉT okozhatja, ha a grub-setup értékes adatokat ír felül (a --" +"skip-fs-probe kihagyja ezt az ellenőrzést, saját felelősségre használja)." + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Kísérlet a GRUB telepítésére partíciók nélküli lemezre vagy partícióra. Ez " +"egy ROSSZ ötlet." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Kísérlet a GRUB telepítésére több partíciócímkével rendelkező lemezre. Ez " +"még nem támogatott." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "A(z) „%s” partícióstílus nem támogatja a beágyazást" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "A(z) „%s” fájlrendszer nem támogatja a beágyazást" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "A beágyazási területe szokatlanul kicsi. A core.img nem fog beleférni." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "nincs befejező a magképben" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "a core.img verzió nem megfelelő" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"a beágyazás nem lehetséges, noha ez szükséges a RAID és LVM telepítéshez" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "nem lehet meghatározni a fájlrendszert ezen: %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "a(z) „%s” fájlrendszer nem támogatja a blokklistákat" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"a beágyazás nem lehetséges, noha ez szükséges a lemezek közti telepítéshez" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Beágyazás nem lehetséges. A GRUB ezen telepítés során kizárólag blokklisták " +"segítségével települhet, viszont a blokklisták NEM MEGBÍZHATÓAK és " +"használatuk nem javallott." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "nem folytatom a blokklistákkal" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "a blokklisták érvénytelenek" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "a blokklisták nem teljesek" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Használat: %s -o KIMENET CKBMAP_ARGUMENTUMOK…\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "GRUB billentyűzet-kiosztás fájl készítése." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "ezen üzenet kiírása és kilépés" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "a verzióinformációk kiírása és kilépés" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" +"A(z) %s előállít egy billentyűzet-kiosztást a GRUB-hoz a ckbcomp " +"használatával\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "A hibákat ide jelentse: ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: a kapcsoló egy argumentumot igényel -- „%s”\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Használat: %s [KAPCSOLÓ]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Egy GRUB beállítófájl előállítása" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" +"az előállított beállítás kiírása FÁJLBA [alapértelmezett=szabványos kimenet]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Ismeretlen „%s” kapcsoló\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Ezt rendszergazdaként kell futtatnia\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: nem található.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "GRUB beállítófájl előállítása…" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Szintaktikai hibák találhatók az előállított GRUB beállítófájlban.\n" +"Győződjön meg arról, hogy nincsenek hibák a /etc/default/grub\n" +"és a /etc/grub.d/* fájlokban, vagy küldjön egy hibajelentést a(z)\n" +"%s fájllal mellékelve." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "kész" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Figyelem:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Használat: %s [KAPCSOLÓ] MENÜBEJEGYZÉS\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"A GRUB alapértelmezett rendszerindítási menübejegyzésének beállítása, " +"kizárólag a következő rendszerindításhoz." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"a GRUB lemezképek elvárása a KVT/%s könyvtárban a(z) %s könyvtár helyett" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"A MENÜBEJEGYZÉS egy szám, egy menüelem címe vagy egy menüelem azonosítója. " +"Ne feledje, hogy az almenükben vagy al-almenükben lévő menüelemek az almenü " +"komponens, majd a menüelem komponens megadását igénylik. A címeket a nagyobb " +"mint (>) karakter használatával kell elválasztani extra szóközök nélkül. A " +"parancsértelmezőjétől függően néhány karaktert - beleértve a > karaktert is " +"- esetleg el kell fedni. További információk érhetők el erről a GRUB " +"kézikönyvében az „alapértelmezett” parancsról szóló fejezetben. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Egynél több menübejegyzés?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "A menübejegyzés nincs megadva." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "A GRUB alapértelmezett rendszerindítási menübejegyzésének beállítása." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Ez a GRUB_DEFAULT=saved beállítást igényli a(z) %s/default/grub fájlban.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"A MENÜBEJEGYZÉS egy szám, egy menüelem címe vagy egy menüelem azonosítója." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Egy soros terminál lett kérve, de a GRUB_SERIAL_COMMAND nincs megadva. Az " +"alapértelmezett paraméterek lesznek használva." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Megtalált téma: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Megtalált háttér: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Nem támogatott képformátum" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"A GRUB_TIMEOUT beállítása egy nem nulla értékre, ha a beállított " +"GRUB_HIDDEN_TIMEOUT többé nem támogatott." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Megtalált GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Megtalált Hurd modul: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Néhány Hurd dolog található, de nem elegendő a rendszerindításhoz." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, Hurd %s verzióval (helyreállítási mód)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, Hurd %s verzióval" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Ne használja a régi „%s” címet a GRUB_DEFAULT értékénél, használja ezeket: " +"„%s” (a 2.00 előtti verzióknál) vagy „%s” (2.00 vagy későbbi verzióknál)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "GNU Mach betöltése…" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "A Hurd betöltése…" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Speciális beállítások ehhez: %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Az Illumos kernelének betöltése…" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, kFreeBSD %s verzióval (helyreállítási mód)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, kFreeBSD %s verzióval" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "A FreeBSD %s kernelének betöltése…" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Megtalált FreeBSD kernel: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Megtalált kernelmodul könyvtár: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, Linux %s verzióval (helyreállítási mód)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, Linux %s verzióval" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Linux %s betöltése…" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Kiinduló ramdisk betöltése…" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Megtalált linux lemezkép: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Megtalált initrd lemezkép: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, %s kernellel (%s közvetítésével, helyreállítási mód)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, %s kernellel (%s közvetítésével)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Megtalált NetBSD kernel: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (betöltő)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (betöltő)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Megtalált %s ezen: %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(ezen: %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, Xen %s és Linux %s verzióval (helyreállítási mód)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, Xen %s és Linux %s verzióval" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, Xen hypervisorral" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Xen %s betöltése…" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hypervisor, %s verzió" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Speciális beállítások ehhez: %s (Xen hypervisorral)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Megtalált %s ezen: %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "A(z) %s rendszert még nem támogatja a grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Nem támogatott helyettesítési jelző: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Ismeretlen gsub betűkészlet szolgáltatás 0x%x (%s)\n" + +#~ msgid "Expose v1 tables." +#~ msgstr "v1 táblák megjelenítése." + +#~ msgid "Fake BIOS." +#~ msgstr "BIOS hamisítása." + +#~ msgid "Check hash list file." +#~ msgstr "Hashlista-fájl ellenőrzése" + +#~ msgid "DIRECTORY" +#~ msgstr "MAPPA" + +#~ msgid "Unload PXE environment." +#~ msgstr "PXE környezet eltávolítása." + +#~ msgid "Read word from PORT." +#~ msgstr "Szó olvasása a PORTRÓL." + +#~ msgid "Read dword from PORT." +#~ msgstr "Dupla szó olvasása a PORTRÓL" + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "Szó ÉRTÉK írása a PORTRA." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "Dupla szó ÉRTÉK írása a PORTRA." + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "Read word from ADDR." +#~ msgstr "Szó olvasása a CÍMRŐL." + +#~ msgid "Read dword from ADDR." +#~ msgstr "Duplaszó olvasása a CÍMRŐL." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "A szó ÉRTÉK kiírása a CÍMRE." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "A duplaszó ÉRTÉK kiírása a CÍMRE." + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Menübejegyzés-definíció karakterláncként." + +#~ msgid "[DEVICE]" +#~ msgstr "[ESZKÖZ]" + +#~ msgid "Variable names to update with matches." +#~ msgstr "Ezen változónevek aktualizálása a találatokkal." + +#~ msgid "Load XNU hibernate image." +#~ msgstr "XNU hibernálási rendszerkép betöltése." + +#~ msgid "Authenticate users" +#~ msgstr "Felhasználók hitelesítése" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 vizuális" + +#~ msgid "If FILENAME is '-', the default value %s is used." +#~ msgstr "Ha a FÁJLNÉV „-”, akkor az alap %s érték kerül felhasználásra." + +#~ msgid "write error" +#~ msgstr "írási hiba" + +#~ msgid "open error" +#~ msgstr "megnyitási hiba" + +#~ msgid "seek error" +#~ msgstr "pozicionálási hiba" + +#~ msgid "Hex dump FILE." +#~ msgstr "A FÁJL hexa kiíratása." + +#~ msgid "Must use absolute path.\n" +#~ msgstr "Abszolút elérési utat kell használni.\n" + +#~ msgid "the core image is too small" +#~ msgstr "a magkép túl kicsi" + +#~ msgid "prefix is too long" +#~ msgstr "az előtag túl hosszú" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Használat: %s [KAPCSOLÓ]… [MODULOK]\n" +#~ "\n" +#~ "Indítható memóriakép készítése a GRUB-ból.\n" +#~ "\n" +#~ " -d, --directory=KÖNYVTÁR a KÖNYVTÁR alatti memóriaképek és modulok\n" +#~ " használata [alapértelmezett=%s]\n" +#~ " -p, --prefix=KÖNYVTÁR a grub_prefix könyvtár beállítása " +#~ "[alapértelmezett=%s]\n" +#~ " -m, --memdisk=FÁJL a FÁJL beágyazása memórialemez-képként\n" +#~ " -f, --font=FÁJL a FÁJL beágyazása rendszerindítási " +#~ "betűkészletként\n" +#~ " -c, --config=FÁJL a FÁJL beágyazása rendszerindítási " +#~ "konfigurációként\n" +#~ " -o, --output=FÁJL az előállított memóriaképfájl kiírása a FÁJLBA\n" +#~ " [alapértelmezett=stdout]\n" +#~ " -O, --format=FORMÁTUM memóriaképfájl előállítása a FORMÁTUMBA\n" +#~ " elérhető formátumok: %s\n" +#~ " -C, --compression=(xz|none|auto) használandó tömörítés\n" +#~ " -h, --help ezen üzenet kiírása és kilépés\n" +#~ " -V, --version verzióinformációk kiírása és kilépés\n" +#~ " -v, --verbose részletes üzenetek kiírása\n" +#~ "\n" +#~ "A hibákat itt jelentheti: <%s>.\n" + +#~ msgid "cannot open %s" +#~ msgstr "%s nem nyitható meg" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "A beágyazás nem lehetséges, noha ez szükséges, ha a gyökéreszköz RAID " +#~ "tömbön vagy LVM köteten van." + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "a magkép első szektorának beolvasása meghiúsult" + +#~ msgid "DEV" +#~ msgstr "ESZK" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "Az ESZK használata gyökéreszközként [alap=felismert]" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "A gyökéreszköz nem határozható meg. Adja meg a „--root-device” kapcsolót." diff --git a/po/id.gmo b/po/id.gmo new file mode 100644 index 0000000000000000000000000000000000000000..3953b7d3a750a689f02560878ecf705fda43acd4 GIT binary patch literal 28647 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 BX5s(< literal 0 HcmV?d00001 diff --git a/po/id.po b/po/id.po new file mode 100644 index 000000000..251ac4fd3 --- /dev/null +++ b/po/id.po @@ -0,0 +1,7580 @@ +# Pesan Bahasa Indonesia untuk grub. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Arif E. Nugroho , 2009, 2010, 2011, 2012, 2013, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2014-08-04 16:30+0700\n" +"Last-Translator: Arif E. Nugroho \n" +"Language-Team: Indonesian \n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +#, fuzzy +msgid "unsupported serial port speed" +msgstr "Set kecepatan port serial." + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +#, fuzzy +msgid "unsupported serial port parity" +msgstr "Set pariti dari port serial." + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +#, fuzzy +msgid "unsupported serial port stop bits number" +msgstr "Set stop bit dari port serial." + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +#, fuzzy +msgid "unsupported serial port word length" +msgstr "Set panjang kata port serial." + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Jangan muat tabel komputer yang dispesifikasikan oleh daftar yang dipisahkan " +"dengan koma." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" +"Hanya muat tabel yang dispesifikasikan oleh daftar yang dipisahkan dengan " +"koma." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Export version 1 tables to the OS." + +#: grub-core/commands/acpi.c:47 +#, fuzzy +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Tampilkan tabel v2 dan v3." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Set OEMID dari RSDP, XSDT dan RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Set OEMTABLE ID dari RSDP, XSDT dan RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Set revisi OEMTABLE dari RSDP, XSDT dan RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Set bagian pembuat dari RSDP, XSDT dan RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Set revisi pembuat dari RSDP, XSDT dan RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +#, fuzzy +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Jangan perbarui EBDA. Mungkin memperbaiki kegagalan atau berhenti di " +"beberapa BIOS tetapi membuat itu tidak efektif dengan OS mendapatkan RSDP " +"dari GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, fuzzy, c-format +msgid "premature end of file %s" +msgstr "tidak dapat membuka berkas log: %s" + +#: grub-core/commands/acpi.c:779 +#, fuzzy +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABEL1,TABEL2|--load-only=tabel1,tabel2] BERKAS1 " +"[BERKAS2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Muat tabel ACPI komputer dan tabel yang dispesifikasikan oleh argumen." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "error: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +#, fuzzy +msgid "out of memory" +msgstr "Tampilkan memori." + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, fuzzy, c-format +msgid "cannot read `%s': %s" +msgstr "tidak dapat membaca `%s' secara benar" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI shutdown failed" + +#: grub-core/commands/arc/lsdev.c:51 +#, fuzzy +msgid "List devices." +msgstr "Tampilkan perangkat PCI." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +#, fuzzy +msgid "filename expected" +msgstr "Abaikan nama berkas (ditinggalkan)" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "BERKAS" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Tampilkan daftar blok." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "you need to load the kernel first" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Boot sistem operasi." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "No boot time statistics is available\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Show boot time statistics." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "Disck cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "No disk cache statistics available\n" + +#: grub-core/commands/cacheinfo.c:56 +#, fuzzy +msgid "Get disk cache info." +msgstr "Dapatkan informasi perangkat." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Accept DOS-style CR/NL line endings." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Tampilkan isi dari berkas." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "two arguments expected" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Compare file `%s' with `%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Files differ in size: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "The files are identical.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "BERKAS1 BERKAS2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Bandingkan dua berkas." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Muat berkas konfigurasi lain." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Muat berkas konfigurasi lain tanpa mengubah konteks." + +#: grub-core/commands/configfile.c:75 +#, fuzzy +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "Muat berkas konfigurasi lain tanpa mengubah konteks." + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "Muat berkas konfigurasi lain tanpa mengubah konteks." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[tahun-]bulan-hari] [jam:menit[:detik]]" + +#: grub-core/commands/date.c:142 +#, fuzzy +msgid "Display/set current datetime." +msgstr "Perintah untuk menampilkan/menset tanggal dan waktu saat ini." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Jangan keluarkan akhiran baris baru." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Aktifkan interpretasi 'escape backslash'." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] KATA-KATA" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Tampilkan baris dari teks." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Reboot into firmware setup menu." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Perbaiki masalah video." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM image is present." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Can't enable ROM area." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Create BIOS-like structures for backward compatibility with existing OS." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Muat BIOS 'dump'." + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "[POLA ...]" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Evaluate arguments as GRUB commands" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "Check if FILE can be used as Xen x86 privileged guest kernel" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Muat sebuah kernel multiboot." + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Muat sebuah kernel multiboot 2." + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Check if FILE is ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Check if FILE is ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Check if FILE is IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Check if FILE is MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Check if FILE is MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Check if FILE is SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Check if FILE is POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Check if FILE is x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Check if FILE is x86 Linux supporting 32-bit protocol" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Check if FILE is x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Check if FILE is i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Check if FILE is x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Check if FILE is x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Check if FILE is i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Check if FILE is x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Check if FILE is i386 EFI file" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Check if FILE is x86_64 EFI file" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Check if FILE is IA64 EFI file" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Check if FILE is ARM64 EFI file" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Check if FILE is ARM EFI file" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Check if FILE is hiberfil.sys in hibernated state" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Check if FILE is x86_64 XNU (Mac OS X kernel)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Check if FILE is i386 XNU (Mac OS X kernel)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Check if FILE is XNU (Mac OS X kernel) hibernated image" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Check if FILE is BIOS bootsector" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "false" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[PILIHAN] DISK" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Check if FILE is of specified type." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +#, fuzzy +msgid "no such partition" +msgstr "tidak ditemukan gaya partisi DOS" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "New MBR is written to `%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "PERANGKAT [PARTISI[+/-[TIPE]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +#, fuzzy +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Isi hybrid MBR dari GPT drive PERANGKAT. partisi yang dispesifikasikan akan " +"menjadi bagian dari hybrid mbr. sampai 3 partisi diperbolehkan. TYPE dalah " +"sebuah tipe MBR. + berarti partisi itu aktif. Hanya satu partisi yang boleh " +"aktif." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Hentikan komputer. Perintah ini mungkin tidak bekerja di semua implementasi " +"'firmware'." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Specify hash to use." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Check hashes of files with hash list FILE." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Base directory for hash list." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIR" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Don't stop after first error." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Uncompress file before checksumming." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: READ ERROR\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HASH MISMATCH\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Compute or check hash checksum." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Set Advanced Power Management\n" +"(1=rendah, ..., 254=tinggi, 255=tidak nyala)." + +#: grub-core/commands/hdparm.c:36 +#, fuzzy +msgid "Display power mode." +msgstr "Periksa mode power." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Hentikan konfigurasi keamanan ATA sampai reset." + +#: grub-core/commands/hdparm.c:39 +#, fuzzy +msgid "Display SMART health status." +msgstr "Periksa keadaan kesehatan SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Set Automatic Acoustic Management\n" +"(0=tidak nyala, 128=pelan, ..., 254=cepat)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Set waktu habis standby\n" +"(0=tidak nyala, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Set drive ke mode standby." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Set drive ke mode tidur." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Tampilkan konfigurasi dan identitas drive." + +#: grub-core/commands/hdparm.c:50 +#, fuzzy +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Tampilkan isi dari sektor IDENTIFIKASI ATA." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Nonaktifkan/aktifkan SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Jangan tampilkan pesan." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "one argument expected" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[PILIHAN] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Get/set parameter disk ATA." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Penggunaan:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[POLA ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Tampilkan pesan bantuan." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Lewati byte ofset dari awal berkas." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Baca saja PANJANG bytes." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[PILIHAN] BERKAS_ATAU_PERANGKAT" + +#: grub-core/commands/hexdump.c:126 +#, fuzzy +msgid "Show raw contents of a file or memory." +msgstr "Tampilkan isi dari sebuah berkas atau memori." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Show raw dump of the CMOS contents." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Test bit at BYTE:BIT in CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Clear bit at BYTE:BIT in CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Set bit at BYTE:BIT in CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Show coreboot boot time statistics." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +#, fuzzy +msgid "List coreboot tables." +msgstr "Tampilkan atau pilih pengendali." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +#, fuzzy +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Periksa untuk tanda mode panjang (baku)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Check if CPU supports Physical Address Extension." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Periksa kapabilitas CPU." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Tampilkan pemetaan saat ini." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Reset seluruh pemetaan ke nilai baku." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Lakukan baik pemetaan secara langsung dan terbalik." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "No drives have been remapped" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS disk #num ------> GRUB/BIOS device" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Pelihara pemetaan drive BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Jangan gunakan APM untuk menghentikan komputer." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Hentikan sistem, jika memungkinkan gunakan APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "no APM found" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bit protected interface supported\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bit protected interface unsupported\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bit protected interface supported\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bit protected interface unsupported\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU Idle slows down processor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU Idle doesn't slow down processor\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM disabled\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM enabled\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM disengaged\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM engaged\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Show APM information." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "filename or tempo and notes expected" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Node tidak valid -%s\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "berkas `%s' tidak ditemukan" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "angka tidak diketahui" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "BERKAS | JEDA [PITCH1 DURASI1] [PITCH2 DURASI2] ..." + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Mainkan sebuah nada." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "tentukan mode numlock" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "tentukan mode capslock" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "tentukan mode scrolllock" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "tentukan mode insert" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "tentukan mode pause" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "tekan shift kiri" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "tekan shift kanan" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "tekan SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "tekan tombol NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "tekan tombol CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "tekan tombol ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "tekan tombol Insert" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "tekan alt kiri" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "tekan alt kanan" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "tekan ctrl kiri" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "tekan ctrl kanan" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "jangan ubah status LED" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[TOMBOL1 TERTEKAN] [TOMBOL2 TERTEKAN] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emulasi urutan tertekan tombol" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Jalankan `go' untuk melanjutkan GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +#, fuzzy +msgid "Return to IEEE1275 prompt." +msgstr "Kembalikan ke prompt Open Firmware." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Simpan nilai terbaca kedalam variabel NAMAVAR." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Baca 8-bit nilai dari PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Baca 16-bit nilai dari PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Baca 32-bit nilai dari PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ALAMAT NILAI [TOPENG]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Tulis 8-bit NILAI ke PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Tulis 16-bit NILAI ke PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ALAMAT NILAI [TOPENG]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Tulis 32-bit NILAI ke PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "variabel `%s' tidak diset" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Muat sebuah layout keyboard" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Periksa tombol Shift." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Periksa tombol Control." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Periksa tombol Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Periksa keadaan tombol pemodifikasi." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "tidak dapat menemukan perintah `%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Masukan kata sandi : " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Masukkan konfigurasi standar dalam konteks yang sama" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Masukkan konfigurasi standar dalam konteks yang baru" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Masukkan konfigurasi standar dalam konteks yang sama yang hanya mengambil " +"masukan menu" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Masukkan konfigurasi standar dalam konteks yang baru yang hanya mengambil " +"masukan menu" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Spesifikasikan nama berkas." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f BERKAS] nama_variabel [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Muat variabel dari berkas blok lingkungan." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f BERKAS]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Tampilkan variabel dari berkas blok lingkungan." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f BERKAS] nama_variabel [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Simpan variabel ke berkas blok lingkungan." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Tampilkan sebuah daftar panjang dengan informasi yang lengkap." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Tampilkan ukuran dalam format yang mudah dibaca." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Tampilkan seluruh berkas." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "" + +#: grub-core/commands/ls.c:286 +#, fuzzy +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [BERKAS]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Tampilkan perangkat dan berkas." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "" + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Tampilkan peta memori yang disediakan oleh firmware." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Tampilkan perangkat PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ALAMAT" + +#: grub-core/commands/memrw.c:125 +#, fuzzy +msgid "Read 8-bit value from ADDR." +msgstr "Baca byte dari ALAMAT." + +#: grub-core/commands/memrw.c:129 +#, fuzzy +msgid "Read 16-bit value from ADDR." +msgstr "Baca byte dari ALAMAT." + +#: grub-core/commands/memrw.c:133 +#, fuzzy +msgid "Read 32-bit value from ADDR." +msgstr "Baca byte dari ALAMAT." + +#: grub-core/commands/memrw.c:138 +#, fuzzy +msgid "Write 8-bit VALUE to ADDR." +msgstr "Tulis NILAI byte ke ALAMAT." + +#: grub-core/commands/memrw.c:142 +#, fuzzy +msgid "Write 16-bit VALUE to ADDR." +msgstr "Tulis NILAI byte ke ALAMAT." + +#: grub-core/commands/memrw.c:146 +#, fuzzy +msgid "Write 32-bit VALUE to ADDR." +msgstr "Tulis NILAI byte ke ALAMAT." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +#, fuzzy +msgid "STRING" +msgstr "[-e|-n] KATA-KATA" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Tampilkan pesan ini." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "" + +#: grub-core/commands/minicmd.c:201 +#, fuzzy +msgid "Show memory contents." +msgstr "Tampilkan isi dari berkas." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Hapus sebuah modul." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Tampilkan modul termuat." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Keluar dari GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, fuzzy, c-format +msgid "Total flash size: %d B.\n" +msgstr "Total besar tabel terjemahan: %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, fuzzy, c-format +msgid "Part no: %s.\n" +msgstr "Partisi %s:" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +#, fuzzy +msgid "Print Memory information." +msgstr "Tampilkan informasi versi dan keluar" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, fuzzy, c-format +msgid "unknown argument `%s'" +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PERINTAH PARTISI" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "KATA SANDI PENGGUNA" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Set kata sandi pengguna (teks-terbuka). Tidak direkomendasikan dan tidak " +"aman." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:202 +#, fuzzy +msgid "USER PBKDF2_PASSWORD" +msgstr "KATA SANDI PENGGUNA" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "" + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Set sebuah variabel ke nilai kembali." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Tentukan driver." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Tentukan tipe peta partisi." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Tentukan tipe sistem berkas." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Tentukan UUID sistem berkas." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Tentukan nama sistem berkas." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "PERANGKAT" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Dapatkan informasi perangkat." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Set variabel dengan masukan pengguna." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Reboot komputer." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "" + +#: grub-core/commands/search.c:324 +#, fuzzy +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAMA [VARIABEL]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cari perangkat dengan berkas. Jika VARIABEL dispesifikasikan, perangkat " +"pertama yang ditemukan diset ke variabel." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cari perangkat berdasarkan nama. Jika VARIABEL dispesifikasikan, perangkat " +"pertama yang ditemukan diset ke variabel." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cari perangkat dengan UUID. Jika VARIABEL dispesifikasikan, perangkat " +"pertama yang ditemukan diset ke sebuah variabel." + +#: grub-core/commands/search_wrap.c:34 +#, fuzzy +msgid "Search devices by a file." +msgstr "Buat perangkat dari berkas." + +#: grub-core/commands/search_wrap.c:35 +#, fuzzy +msgid "Search devices by a filesystem label." +msgstr "Tentukan nama sistem berkas." + +#: grub-core/commands/search_wrap.c:37 +#, fuzzy +msgid "Search devices by a filesystem UUID." +msgstr "Tentukan UUID sistem berkas." + +#: grub-core/commands/search_wrap.c:40 +#, fuzzy +msgid "Set a variable to the first device found." +msgstr "Set sebuah variabel ke nilai kembali." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "" + +#: grub-core/commands/search_wrap.c:209 +#, fuzzy +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Cari perangkat berdasarkan nama. Jika VARIABEL dispesifikasikan, perangkat " +"pertama yang ditemukan diset ke variabel." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" + +#: grub-core/commands/setpci.c:335 +#, fuzzy +msgid "Manipulate PCI devices." +msgstr "Tampilkan perangkat PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Hitung mundur secara detail." + +#: grub-core/commands/sleep.c:33 +#, fuzzy +msgid "Allow to interrupt with ESC." +msgstr "Dapat diinterupsi dengan ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "JUMLAH_DARI_DETIK" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Tunggu selama jumlah dari detik yang dispesifikasikan." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/terminal.c:90 +#, fuzzy +msgid "no terminal specified" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "" + +#: grub-core/commands/terminal.c:273 +#, fuzzy +msgid "List or select an input terminal." +msgstr "Tampilkan atau pilih pengendali." + +#: grub-core/commands/terminal.c:278 +#, fuzzy +msgid "List or select an output terminal." +msgstr "Tampilkan atau pilih pengendali." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EKSPRESI ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Evaluasi sebuah ekspresi." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EKSPRESI" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +#, fuzzy +msgid "no command is specified" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Tidak melakukan apapun, sukses." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Tidak melakukan apapun, tidak sukses." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Coba dukungan USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, fuzzy, c-format +msgid "invalid video mode specification `%s'" +msgstr "perangkat root `%s' tidak valid" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr "" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +#, fuzzy +msgid "Test video subsystem in mode WxH." +msgstr "Coba subsistem video." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Coba subsistem video." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +#, fuzzy +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "GRUBUUID [NAMAVAR]" + +#: grub-core/commands/xnu_uuid.c:111 +#, fuzzy +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "Transformasikan 64-bit UUID ke format yang sesuai untuk XNU." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, fuzzy, c-format +msgid "cannot open `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, fuzzy, c-format +msgid "cannot seek `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1145 +#, fuzzy +msgid "Mount a crypto device." +msgstr "Set perangkat root." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, fuzzy, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Menggunakan %s untuk %s%s%s (%s)\n" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, fuzzy, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "mencoba untuk membaca image core `%s' dari GRUB" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +#, fuzzy +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"Label partisi gaya msdos ini tidak memiliki post-MBR gap; penempatan tidak " +"memungkinkan!" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +#, fuzzy +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"Label partisi GPT ini tidak memiliki partisi boot BIOS; penempatan tidak " +"memungkinkan!" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +#, fuzzy +msgid "Delete the specified loopback drive." +msgstr "Hapus masukan perangkat loopback." + +#: grub-core/disk/loopback.c:236 +#, fuzzy +msgid "[-d] DEVICENAME FILE." +msgstr "[-d|-p] NAMAPERANGKAT BERKAS." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +#, fuzzy +msgid "Make a virtual drive from a file." +msgstr "Buat perangkat dari berkas." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:320 +#, fuzzy +msgid "Unload EFI emulator." +msgstr "Bongkar-muat lingkungan PXE." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "" + +#: grub-core/font/font_cmd.c:74 +#, fuzzy +msgid "FILE..." +msgstr "BERKAS" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +#, fuzzy +msgid "not a directory" +msgstr "Total bytes direktori: %d\n" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +#, fuzzy +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"Besar core.img anda sangat besar. Ini tidak akan masuk dalam area penempatan." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, fuzzy, c-format +msgid "invalid file name `%s'" +msgstr "perangkat root `%s' tidak valid" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:304 +#, fuzzy +msgid "MAC verification failed" +msgstr "Paksa tanggal modifikasi" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +#, fuzzy +msgid "Enter ZFS password: " +msgstr "Masukan kata sandi : " + +#: grub-core/fs/zfs/zfscrypt.c:476 +#, fuzzy +msgid "[-h|-p|-r] [FILE]" +msgstr "[-l|-h|-a] [BERKAS]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, fuzzy, c-format +msgid "Devid: %s\n" +msgstr "Perankat %s:" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +#, fuzzy +msgid "FILESYSTEM [VARIABLE]" +msgstr "NAMA [VARIABEL]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Tekan enter untuk mem-boot OS yang dipilih, 'e' untuk mengubah perintah " +"sebelum booting atau 'c' untuk sebuah baris perintah. ESC kembali ke menu " +"sebelumnya.\n" + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Tekan enter untuk mem-boot OS yang dipilih, 'e' untuk mengubah perintah " +"sebelum booting atau 'c' untuk sebuah baris perintah.\n" + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Masukan yang disoroti akan diboot secara otomatis dalam %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr "" + +#: grub-core/gnulib/argp-help.c:1662 +#, fuzzy +msgid " [OPTION...]" +msgstr "[POLA ...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +#, fuzzy +msgid "Unknown system error" +msgstr "Sistem berkas tidak diketahui" + +#: grub-core/gnulib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr "Tampilkan bantuan ini dan keluar." + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: grub-core/gnulib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "Evaluasi sebuah ekspresi." + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "Node tidak valid -%s\n" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "" + +#: grub-core/hello/hello.c:36 +#, fuzzy +msgid "Hello World" +msgstr "Katakan \"Hi Dunia\"." + +#: grub-core/hello/hello.c:45 +#, fuzzy +msgid "Say `Hello World'." +msgstr "Katakan \"Hi Dunia\"." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +#, fuzzy +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR]" + +#: grub-core/kern/corecmd.c:179 +#, fuzzy +msgid "Set an environment variable." +msgstr "Simpan variabel ke berkas blok lingkungan." + +#: grub-core/kern/corecmd.c:183 +#, fuzzy +msgid "ENVVAR" +msgstr "[ENVVAR]" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "" + +#: grub-core/kern/corecmd.c:186 +#, fuzzy +msgid "List devices or files." +msgstr "Tampilkan perangkat dan berkas." + +#: grub-core/kern/corecmd.c:188 +#, fuzzy +msgid "Insert a module." +msgstr "Hapus sebuah modul." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, fuzzy, c-format +msgid "cannot write to `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, fuzzy, c-format +msgid "can't open `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +#, fuzzy +msgid "DEVICE_NAME" +msgstr "PERANGKAT" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Set perangkat root." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +#, fuzzy +msgid "print verbose messages." +msgstr "Boot dengan pesan detail." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, fuzzy, c-format +msgid "Unknown extra argument `%s'." +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "ukuran dari `%s' terlalu besar" + +#: grub-core/kern/fs.c:120 +#, fuzzy +msgid "unknown filesystem" +msgstr "Sistem berkas tidak diketahui" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, fuzzy, c-format +msgid "Unknown command `%s'.\n" +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Tampilkan bantuan ini dan keluar." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Tampilkan penggunaan dari perintah ini dan keluar." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +#, fuzzy +msgid "Print backtrace." +msgstr "Tampilkan daftar blok." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, fuzzy, c-format +msgid "invalid color specification `%s'" +msgstr "perangkat root `%s' tidak valid" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "Perangkat `%s' tidak valid.\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Muat Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Muat initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "Muat image XNU." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "you need to load the kernel first" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, dengan Linux %s" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Hapus sebuah modul." + +#: grub-core/loader/efi/appleloader.c:231 +#, fuzzy +msgid "[OPTS]" +msgstr "[PILIHAN] DISK" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +#, fuzzy +msgid "Boot BIOS-based system." +msgstr "Boot sistem sesungguhnya." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Muat 'boot loader' lain." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Tampilkan keluaran di semua konsol." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Gunakan konsol serial." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Tanya untuk nama berkas untuk direboot dari." + +#: grub-core/loader/i386/bsd.c:105 +#, fuzzy +msgid "Use CD-ROM as root." +msgstr "Gunakan CDROM sebagai root." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Panggil konfigurasi routing pengguna." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Masuk dalam KDB pada waktu boot." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Gunakan GDB remote debugger daripada DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Tampilkan seluruh keluaran boot." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Tunggu untuk penekanan tombol setelah setiap baris dari keluaran." + +#: grub-core/loader/i386/bsd.c:113 +#, fuzzy +msgid "Use compiled-in root device." +msgstr "Gunakan compiled-in rootdev." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Boot kedalam mode tunggal." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Boot dengan pesan detail." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Jangan reboot, hanya hentikan." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Ubah konfigurasi perangkat." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Non-aktifkan SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "No-aktifkan ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Jangan tampilkan pesan diagnosa boot." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Boot dengan pesan debug." + +#: grub-core/loader/i386/bsd.c:167 +#, fuzzy +msgid "Suppress normal output (warnings remain)." +msgstr "Tekan keluaran normal (peringatan tetap)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +#, fuzzy +msgid "Booting in blind mode" +msgstr "Boot kedalam mode tunggal." + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Muat kernel dari FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Muat kernal dari OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Muat kernel dari NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Muat lingkungan FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Muat modul kernel FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +#, fuzzy +msgid "Load NetBSD kernel module." +msgstr "Muat modul kernel FreeBSD." + +#: grub-core/loader/i386/bsd.c:2150 +#, fuzzy +msgid "Load NetBSD kernel module (ELF)." +msgstr "Muat modul kernel (ELF) FreeBSD." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Muat modul kernel (ELF) FreeBSD." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +#, fuzzy +msgid "Load kOpenBSD ramdisk." +msgstr "Muat kernal dari OpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +#, fuzzy +msgid "Load another coreboot payload" +msgstr "Muat 'boot loader' lain." + +#: grub-core/loader/i386/linux.c:900 +#, fuzzy +msgid "Legacy `ask' parameter no longer supported." +msgstr "pilihan -i tidak lagi didukung.\n" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "ukuran dari `%s' terlalu besar" + +#: grub-core/loader/i386/pc/freedos.c:183 +#, fuzzy +msgid "Load FreeDOS kernel.sys." +msgstr "Muat modul kernel FreeBSD." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +#, fuzzy +msgid "Load Plan9 kernel." +msgstr "Muat sebuah kernel multiboot." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +#, fuzzy +msgid "Load a PXE image." +msgstr "Muat image XNU." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "Hapus sebuah modul." + +#: grub-core/loader/i386/xnu.c:1003 +#, fuzzy +msgid "Press any key to launch xnu" +msgstr "Tekan tombol apapun untuk melanjutkan..." + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +#, fuzzy +msgid "Load `device-properties' dump." +msgstr "Muat properti-perangkat dump." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Muat sebuah kernel multiboot 2." + +#: grub-core/loader/multiboot.c:440 +#, fuzzy +msgid "Load a multiboot 2 module." +msgstr "Muat sebuah modul multiboot." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Muat sebuah kernel multiboot." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Muat sebuah modul multiboot." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Muat image XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Muat image 64-bit XNU." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Muat paket ekstensi XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Muat ekstensi XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIREKTORI [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Muat ekstensi direktori XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +#, fuzzy +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Muat XNU ramdisk. Ini akan kelihatan seperti md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Muat sebuah gambar singkat untuk XNU." + +#: grub-core/loader/xnu.c:1501 +#, fuzzy +msgid "Load an image of hibernated XNU." +msgstr "Muat sebuah gambar singkat untuk XNU." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +#, fuzzy +msgid "no DHCP options found" +msgstr "tidak ditemukan gaya partisi DOS" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, fuzzy, c-format +msgid "no DHCP option %d found" +msgstr "tidak ditemukan gaya partisi DOS" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "" + +#: grub-core/net/dns.c:768 +#, fuzzy +msgid "List DNS servers" +msgstr "Tampilkan perangkat PCI." + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +#, fuzzy +msgid "couldn't send network packet" +msgstr "tidak dapat membuka image core" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-bit protected interface supported\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, fuzzy, c-format +msgid "time out opening `%s'" +msgstr "tidak dapat membuka `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "" + +#: grub-core/net/net.c:1190 +#, fuzzy, c-format +msgid "Unknown address type %d\n" +msgstr "Sistem berkas tidak diketahui" + +#: grub-core/net/net.c:1298 +#, fuzzy +msgid "no server is specified" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "" + +#: grub-core/net/net.c:1771 +#, fuzzy +msgid "Delete a network address." +msgstr "Set alamat port serial." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Masukan nama pengguna: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Perintah yang memungkinkan adalah:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Perangkat yang memungkinkan adalah:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Berkas yang memungkinkan adalah:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Partisi yang memungkinkan adalah:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Argumen yang memungkinkan adalah:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Hal yang memungkinkan adalah:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Peringatan: kesalahan dalam sintaks (hilang slash) dalam `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Peringatan: warna depan tidak valid `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Peringatan: nama belakang tidak valid `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "" + +#: grub-core/normal/context.c:207 +#, fuzzy +msgid "Export variables." +msgstr "Tampilkan tabel v1." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "" + +#: grub-core/normal/dyncmd.c:187 +#, fuzzy +msgid "module isn't loaded" +msgstr "tidak termuat" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB versi %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC di waktu apapun keluar." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Penyuntingan minimal bergaya BASH didukung. Untuk kata pertama, TAB " +"menampilkan pelengkapan perintah yang memungkin. Dimanapun TAB menampilkan " +"perangkat yang memungkinkan atau pelengkapan berkas. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Bersihkan layar." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "" + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Tekan tombol apapun untuk melanjutkan..." + +#: grub-core/normal/menu.c:814 +#, fuzzy, c-format +msgid "Booting `%s'" +msgstr "Mem-boot '%s'" + +#: grub-core/normal/menu.c:826 +#, fuzzy, c-format +msgid "Falling back to `%s'" +msgstr "Kembali ke '%s'" + +#: grub-core/normal/menu.c:842 +#, fuzzy +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Gagal untuk mem-boot masukan baku.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Mem-boot dari sebuah daftar perintah" + +#: grub-core/normal/menu_text.c:160 +#, fuzzy +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Penyuntingan layar minimum bergaya Emacs didukung. TAB menampilkan " +"pelengkapan. Tekan Ctrl-x untuk boot, Ctrl-c untuk baris perintah atau ESC " +"untuk kembali ke menu." + +#: grub-core/normal/menu_text.c:170 +#, fuzzy, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "" +"Gunakan tombol-tombol %C dan %C untuk memiliki masukan mana yang disoroti.\n" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +#, fuzzy +msgid "PiB" +msgstr "PUB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partisi %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Perankat %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Sistem berkas tidak dapat diakses" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Tipe sistem berkas %s" + +#: grub-core/normal/misc.c:131 +#, fuzzy, c-format +msgid "- Label `%s'" +msgstr "- Label \"%s\"" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Waktu modifikasi terakhir %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +#, fuzzy +msgid "No known filesystem detected" +msgstr "Sistem berkas tidak diketahui" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr "" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr "" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr "" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "tidak dapat membuka berkas log: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +#, fuzzy +msgid "couldn't open geom" +msgstr "tidak dapat membuka image core" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +#, fuzzy +msgid "couldn't find geli consumer" +msgstr "tidak dapat membuka image core" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +#, fuzzy +msgid "unaligned device size" +msgstr "Perangkat `%s' tidak valid.\n" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "mencoba untuk membaca image core `%s' dari GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "mencoba untuk membaca image core `%s' dari GRUB lagi" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "tidak dapat membaca `%s' secara benar" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "gagal untuk membaca sektor selanjutnya dari image core" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "Tampilkan variabel dari berkas blok lingkungan." + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, fuzzy, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Tidak dapat membuka direktori %s\n" + +#: grub-core/osdep/linux/getroot.c:1033 +#, fuzzy, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "perangkat root `%s' tidak valid" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, fuzzy, c-format +msgid "Unable to fork: %s" +msgstr "Tidak dapat membuka %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, fuzzy, c-format +msgid "Unable to create pipe: %s" +msgstr "Tidak dapat membuka %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +#, fuzzy +msgid "cannot restore the original directory" +msgstr "tidak dapat mengkompress image kernel" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, fuzzy, c-format +msgid "cannot stat `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "tidak dapat membuka berkas log: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "Tidak dapat mengurutkan direktori %s\n" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +#, fuzzy +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"Label partisi GPT ini tidak memiliki partisi boot BIOS; penempatan tidak " +"memungkinkan!" + +#: grub-core/partmap/gpt.c:196 +#, fuzzy +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"Label partisi GPT ini tidak memiliki partisi boot BIOS; penempatan tidak " +"memungkinkan!" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +#, fuzzy +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"Label partisi gaya msdos ini tidak memiliki post-MBR gap; penempatan tidak " +"memungkinkan!" + +#: grub-core/partmap/msdos.c:404 +#, fuzzy +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "Penempatan anda sangat kecil. core.img tidak akan masuk disana." + +#: grub-core/parttool/msdospart.c:39 +#, fuzzy +msgid "Make partition active" +msgstr "Partisi yang memungkinkan adalah:" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +#, fuzzy +msgid "Change partition type" +msgstr "Tentukan tipe peta partisi." + +#: grub-core/parttool/msdospart.c:88 +#, fuzzy +msgid "Set `hidden' flag in partition type" +msgstr "Tentukan tipe peta partisi." + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, fuzzy, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Tentukan tipe peta partisi." + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, fuzzy, c-format +msgid "invalid variable name `%s'" +msgstr "perangkat root `%s' tidak valid" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +#, fuzzy +msgid "Exit from loops" +msgstr "Keluar dari GRUB." + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "" + +#: grub-core/script/main.c:65 +#, fuzzy +msgid "Set positional parameters." +msgstr "Get/set parameter disk ATA." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Set satuan serial." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Set alamat port serial." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Set kecepatan port serial." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Set panjang kata port serial." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Set pariti dari port serial." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Set stop bit dari port serial." + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "Set satuan serial." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "" + +#: grub-core/term/serial.c:429 +#, fuzzy +msgid "[OPTIONS...]" +msgstr "[PILIHAN] DISK" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "" + +#: grub-core/term/terminfo.c:184 +#, fuzzy, c-format +msgid "unknown terminfo type `%s'" +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +#, fuzzy +msgid "Print and execute block argument." +msgstr "Tampilkan daftar blok." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr "" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +#, fuzzy +msgid "MODULES" +msgstr "MODUL" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "tidak dapat mengkompress image kernel" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, fuzzy, c-format +msgid "cannot rename the file %s to %s" +msgstr "tidak dapat membaca %llu bytes dari %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "" + +#: util/grub-editenv.c:47 +#, fuzzy +msgid "Create a blank environment block file." +msgstr "Simpan variabel ke berkas blok lingkungan." + +#: util/grub-editenv.c:49 +#, fuzzy +msgid "List the current variables." +msgstr "Tampilkan pemetaan saat ini." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "" + +#: util/grub-editenv.c:52 +#, fuzzy +msgid "Set variables." +msgstr "Set variabel dengan masukan pengguna." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "" + +#: util/grub-editenv.c:57 +#, fuzzy +msgid "Options:" +msgstr "Pilihan:\n" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "" + +#: util/grub-editenv.c:114 +#, fuzzy +msgid "Tool to edit environment block." +msgstr "Simpan variabel ke berkas blok lingkungan." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +#, fuzzy +msgid "invalid environment block" +msgstr "Tampilkan variabel dari berkas blok lingkungan." + +#: util/grub-editenv.c:216 +#, fuzzy, c-format +msgid "invalid parameter %s" +msgstr "perangkat root `%s' tidak valid" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "" + +#: util/grub-fstest.c:210 +#, fuzzy, c-format +msgid "cannot open OS file `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, fuzzy, c-format +msgid "cannot write to the stdout: %s" +msgstr "tidak dapat membaca %llu bytes dari %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "" + +#: util/grub-fstest.c:507 +#, fuzzy +msgid "List files in PATH." +msgstr "Tampilkan seluruh berkas." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:509 +#, fuzzy +msgid "cat FILE" +msgstr "BERKAS" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:510 +#, fuzzy +msgid "Compare FILE with local file LOCAL." +msgstr "Bandingkan dua berkas." + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "hex FILE" +msgstr "BERKAS" + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "Show contents of FILE in hex." +msgstr "Tampilkan isi dari berkas." + +#: util/grub-fstest.c:512 +#, fuzzy +msgid "crc FILE" +msgstr "BERKAS" + +#: util/grub-fstest.c:512 +#, fuzzy +msgid "Get crc32 checksum of FILE." +msgstr "Hitung 'checksum' crc32 dari berkas." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "" + +#: util/grub-fstest.c:513 +#, fuzzy +msgid "Display blocklist of FILE." +msgstr "Tampilkan baris dari teks." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +#, fuzzy +msgid "Skip N bytes from output file." +msgstr "Lewati byte ofset dari awal berkas." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +#, fuzzy +msgid "Mount crypto devices." +msgstr "Set perangkat root." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "" + +#: util/grub-fstest.c:605 +#, fuzzy +msgid "Invalid disk count.\n" +msgstr "Perangkat `%s' tidak valid.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" + +#: util/grub-fstest.c:633 +#, fuzzy +msgid "No command is specified.\n" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "" + +#: util/grub-fstest.c:711 +#, fuzzy, c-format +msgid "Invalid command %s.\n" +msgstr "Node tidak valid -%s\n" + +#: util/grub-fstest.c:724 +#, fuzzy +msgid "IMAGE_PATH COMMANDS" +msgstr "PERINTAH PARTISI" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +#, fuzzy +msgid "Debug tool for filesystem driver." +msgstr "Tentukan tipe sistem berkas." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +#, fuzzy +msgid "set output filename. Default is STDOUT" +msgstr "Set nama berkas keluaran" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +#, fuzzy +msgid "[OPTIONS]" +msgstr "[PILIHAN] DISK" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "tidak dapat membuka `%s'" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "tidak dapat membuka `%s'" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "tidak dapat membuka `%s'" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "perangkat root `%s' tidak valid" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[PILIHAN] BERKAS_ATAU_PERANGKAT" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "tidak dapat membuka berkas log: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +#, fuzzy +msgid "the chosen partition is not a PReP partition" +msgstr "partisi dos adalah %d, partisi bsd adalah %d" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +#, fuzzy +msgid "No path or device is specified.\n" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +#, fuzzy +msgid "set font family name" +msgstr "Set nama berkas keluaran" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "" + +#: util/grub-mkfont.c:950 +#, fuzzy +msgid "set font size" +msgstr "Set Volume set ukuran" + +#: util/grub-mkfont.c:951 +#, fuzzy +msgid "set font descent" +msgstr "Set perangkat root." + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "" + +#: util/grub-mkfont.c:1151 +#, fuzzy +msgid "[OPTIONS] FONT_FILES" +msgstr "[PILIHAN] DISK" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +#, fuzzy +msgid "output file must be specified" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, fuzzy, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "tidak dapat membuka berkas log: %s" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "Total bytes direktori: %d\n" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, fuzzy, c-format +msgid "unknown target format %s\n" +msgstr "Argumen ekstra `%s' tidak diketahui.\n" + +#: util/grub-mkimage.c:233 +#, fuzzy +msgid "[OPTION]... [MODULES]" +msgstr "[PILIHAN] DISK" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "Set kecepatan port serial." + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:146 +#, fuzzy +msgid "Reenter password: " +msgstr "Masukan kata sandi : " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +#, fuzzy +msgid "No path is specified.\n" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "[PILIHAN] DISK" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +#, fuzzy +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[PILIHAN] BERKAS_ATAU_PERANGKAT" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +#, fuzzy +msgid "read text from FILE." +msgstr "Baca byte dari ALAMAT." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "Argumen yang memungkinkan adalah:" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Perangkat tidak dispesifikasikan.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Perangkat `%s' tidak valid.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "tidak dapat mengkompress image kernel" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "Sistem berkas tidak diketahui" + +#: util/mkimage.c:985 +#, fuzzy +msgid "Decompressor is too big" +msgstr "image core terlalu besar" + +#: util/mkimage.c:1030 +#, fuzzy, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "Image core terlalu besar (%p >%p)" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "Image core terlalu besar (%p >%p)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "besar diskboot.img seharusnya %u bytes" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +#, fuzzy +msgid "firmware image is too big" +msgstr "image core terlalu besar" + +#: util/resolve.c:93 +#, fuzzy, c-format +msgid "invalid line format: %s" +msgstr "Node tidak valid -%s\n" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "sektor pertama dari berkas core tidak selaras secara sektor" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "sektor-tidak-selaras data ditemukan dalam berkas core" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "sektor dari berkas core terlalu terpotong potong" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "ukuran dari `%s' bukan %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "ukuran dari `%s' terlalu kecil" + +#: util/setup.c:425 +#, fuzzy +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Mencoba memasang GRUB ke sebuah disk yang tidak berpartisi. Ini mungkin " +"bukan ide baik." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"tidak dapat mengidentifikasikan sebuah sistem berkas dalam %s; pemeriksaan " +"keamanan tidak dapat dilakukan" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s sepertinya berisi sebuah sistem berkas %s yang tidak diketahui untuk " +"mereserve ruang untuk boot gaya-DOS. Memasang GRUB disana dapat berakibat " +"KERUSAKAN SISTEM BERKAS jika data berharga dipaksa tulis oleh grub-setup (--" +"skip-fs-probe menonaktifkan pemeriksaan ini, gunakan sesuai resiko anda)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s sepertinya berisi sebuah sistem berkas %s yang tidak diketahui untuk " +"mereserve ruang untuk boot gaya-DOS. Memasang GRUB disana dapat berakibat " +"KERUSAKAN SISTEM BERKAS jika data berharga dipaksa tulis oleh grub-setup (--" +"skip-fs-probe menonaktifkan pemeriksaan ini, gunakan sesuai resiko anda)" + +#: util/setup.c:462 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s sepertinya berisi sebuah sistem berkas %s yang tidak diketahui untuk " +"mereserve ruang untuk boot gaya-DOS. Memasang GRUB disana dapat berakibat " +"KERUSAKAN SISTEM BERKAS jika data berharga dipaksa tulis oleh grub-setup (--" +"skip-fs-probe menonaktifkan pemeriksaan ini, gunakan sesuai resiko anda)" + +#: util/setup.c:475 +#, fuzzy +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Mencoba memasang GRUB ke sebuah disk yang tidak berpartisi. Ini mungkin " +"bukan ide baik." + +#: util/setup.c:480 +#, fuzzy +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Mencoba memasang GRUB ke sebuah disk yang tidak berpartisi. Ini mungkin " +"bukan ide baik." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Penempatan anda sangat kecil. core.img tidak akan masuk disana." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "tidak ada pengakhir dalam image core" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "" + +#: util/setup.c:610 +#, fuzzy +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"penempatan tidak memungkinkan, tetapi ini dibutuhkan ketika perangkat root " +"berada di sebuah array RAID atau volume LVM." + +#: util/setup.c:617 +#, fuzzy, c-format +msgid "can't determine filesystem on %s" +msgstr "Tentukan tipe sistem berkas." + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +#, fuzzy +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"penempatan tidak memungkinkan, tetapi ini dibutuhkan ketika perangkat root " +"berada di sebuah array RAID atau volume LVM." + +#: util/setup.c:635 +#, fuzzy +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Penempatan tidak memungkinkan. GRUB hanya dapat dipasang di konfigurasi ini " +"dengan menggunakan blocklists. Akan tetapi, blocklists TIDAK DAPAT DIJAGAKAN " +"dan penggunaan ini tidak disarankan." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +#, fuzzy +msgid "print this message and exit" +msgstr "Tampilkan bantuan ini dan keluar." + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +#, fuzzy +msgid "print the version information and exit" +msgstr "Tampilkan informasi versi dan keluar" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "" + +#: util/grub-mkconfig.in:58 +#, fuzzy +msgid "Generate a grub config file" +msgstr "Muat berkas konfigurasi lain." + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "berkas `%s' tidak ditemukan" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "" + +#: util/grub-mkconfig_lib.in:47 +#, fuzzy +msgid "Warning:" +msgstr "Peringatan: getrlimit" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +#, fuzzy +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, dengan Linux %s (mode penyembuhan)" + +#: util/grub.d/10_hurd.in:94 +#, fuzzy +msgid "%s, with Hurd %s" +msgstr "%s, dengan Linux %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +#, fuzzy +msgid "Loading GNU Mach ..." +msgstr "Memuat Linux %s ..." + +#: util/grub.d/10_hurd.in:128 +#, fuzzy +msgid "Loading the Hurd ..." +msgstr "Memuat inisial ramdisk ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "" + +#: util/grub.d/10_illumos.in:40 +#, fuzzy +msgid "Loading kernel of Illumos ..." +msgstr "Memuat kernel dari FreeBSD %s ..." + +#: util/grub.d/10_kfreebsd.in:79 +#, fuzzy +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, dengan Linux %s (mode penyembuhan)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, dengan kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Memuat kernel dari FreeBSD %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +#, fuzzy +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Muat kernel dari FreeBSD." + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, dengan Linux %s (mode penyembuhan)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, dengan Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Memuat Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Memuat inisial ramdisk ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "" + +#: util/grub.d/10_netbsd.in:105 +#, fuzzy +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, dengan Linux %s (mode penyembuhan)" + +#: util/grub.d/10_netbsd.in:107 +#, fuzzy +msgid "%s, with kernel %s (via %s)" +msgstr "%s, dengan kFreeBSD %s" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:85 +#, fuzzy +msgid "Found %s on %s (%s)\\n" +msgstr "Menggunakan %s untuk %s%s%s (%s)\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:93 +#, fuzzy +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, dengan Linux %s (mode penyembuhan)" + +#: util/grub.d/20_linux_xen.in:95 +#, fuzzy +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, dengan Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +#, fuzzy +msgid "%s, with Xen hypervisor" +msgstr "%s, dengan Linux %s" + +#: util/grub.d/20_linux_xen.in:116 +#, fuzzy +msgid "Loading Xen %s ..." +msgstr "Memuat Linux %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" + +#~ msgid "Fake BIOS." +#~ msgstr "Palsukan BIOS." + +#~ msgid "[class [handler]]" +#~ msgstr "[kelas [pengendali]]" + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "Tampilkan ekstensi mode video yang kompatibel dengan VESA BIOS." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "Coba dukungan ekstensi VESA BIOS 2.0+." + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "Read word from ADDR." +#~ msgstr "Baca word dari ALAMAT." + +#~ msgid "Read dword from ADDR." +#~ msgstr "Baca dword dari ALAMAT." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "Tulis NILAI word ke ALAMAT." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "Tulis NILAI dword ke ALAMAT." + +#~ msgid "[DEVICE]" +#~ msgstr "[PERANGKAT]" + +#~ msgid "Set the root device." +#~ msgstr "Set perangkat root." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "Simulasikan sebuah hard drive dengan partisi." + +#~ msgid "Load XNU hibernate image." +#~ msgstr "Muat berkas hibernate XNU." + +#~ msgid "Partition table" +#~ msgstr "Tabel partisi" + +#~ msgid "the core image is too small" +#~ msgstr "image core terlalu kecil" + +#~ msgid "prefix is too long" +#~ msgstr "awalan terlalu panjang" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -f, --font=FILE embed FILE as a boot font\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format [default=" +#~ msgstr "" +#~ "Penggunaan: %s [PILIHAN]... [MODUL]\n" +#~ "\n" +#~ "Buat sebuah image GRUB yang dapat diboot.\n" +#~ "\n" +#~ " -d, --directory=DIR gunakan image dan modul dibawah DIR [baku=%s]\n" +#~ " -p, --prefix=DIR set direktori grub_prefix [baku=%s]\n" +#~ " -m, --memdisk=BERKAS tempatkan BERKAS sebagai sebuah image memdisk\n" +#~ " -f, --font=BERKAS tempatkan BERKAS sebagai font boot\n" +#~ " -c, --config=BERKAS tempatkan BERKAS sebagai konfigurasi boot\n" +#~ " -o, --output=BERKAS keluarkan sebuah image yang dihasilkan ke " +#~ "BERKAS [baku=stdout]\n" +#~ " -O, --format=FORMAT hasilkan sebuah image dalam format [baku=" + +#~ msgid "cannot open %s" +#~ msgstr "tidak dapat membuka %s" + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "" +#~ "Mencoba memasang GRUB ke sebuah partisi daripada MBR. Ini mungkin bukan " +#~ "ide baik." + +#~ msgid "No DOS-style partitions found" +#~ msgstr "Tidak ditemukan gaya partisi DOS" + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "jika anda benar benar menginginkan blocklists, gunakan --force." + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "gagal untuk membaca sektor pertama dari core image" + +#~ msgid "" +#~ "Usage: %s [OPTION]... DEVICE\n" +#~ "\n" +#~ "Set up images to boot from DEVICE.\n" +#~ "DEVICE must be a GRUB device (e.g. `(hd0,1)').\n" +#~ "\n" +#~ " -b, --boot-image=FILE use FILE as the boot image [default=%s]\n" +#~ " -c, --core-image=FILE use FILE as the core image [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=guessed]\n" +#~ " -f, --force install even if problems are detected\n" +#~ " -s, --skip-fs-probe do not probe for filesystems in DEVICE\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Penggunaan: %s [PILIHAN]... PERANGKAT\n" +#~ "\n" +#~ "Konfigurasi image untuk boot dari PERANGKAT.\n" +#~ "PERANGKAT harus berupa sebuah perangkat GRUB (e.g. ``(hd0,1)'').\n" +#~ "\n" +#~ " -b, --boot-image=BERKAS gunakan BERKAS sebagai image boot [baku=%s]\n" +#~ " -c, --core-image=BERKAS gunakan BERKAS sebagai image core [baku=%s]\n" +#~ " -d, --directory=DIR gunakan berkas GRUB dalam direktori DIR [baku=" +#~ "%s]\n" +#~ " -m, --device-map=BERKAS gunakan BERKAS sebagai peta perangkat [baku=" +#~ "%s]\n" +#~ " -r, --root-device=DEV gunakan DEV sebagai perangkat root " +#~ "[baku=ditebak]\n" +#~ " -f, --force pasang walaupun masalah terdeteksi\n" +#~ " -s, --skip-fs-probe jangan periksa untuk sistem berkas dalam " +#~ "PERANGKAT\n" +#~ " -h, --help tampilkan pesan bantuan ini dan keluar\n" +#~ " -V, --version tampilkan informasi versi dan keluar\n" +#~ " -v, --verbose tampilkan informasi secara detail\n" +#~ "\n" +#~ "Laporkan bugs ke <%s>.\n" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "tidak dapat menebak perangkat root. Spesifikasikan pilihan ``--root-" +#~ "device''." + +#~ msgid "A boot catalog exists and appears corrupted.\n" +#~ msgstr "Sebuah katalog boot ada dan mungkin terkorupsi.\n" + +#~ msgid "Please check the following file: %s.\n" +#~ msgstr "Mohon periksa berkas berikut: %s.\n" + +#~ msgid "This file must be removed before a bootable CD can be done.\n" +#~ msgstr "" +#~ "Berkas ini mungkin telah terhapus sebelum sebuah CD bootable dapat " +#~ "dilakukan.\n" + +#~ msgid "Error creating boot catalog (%s)" +#~ msgstr "Error membuat katalog boot (%s)" + +#~ msgid "Error writing to boot catalog (%s)" +#~ msgstr "Error menulis katalog boot (%s)" + +#~ msgid "Boot catalog cannot be found!\n" +#~ msgstr "Katalog boot tidak dapat ditemukan!\n" + +#~ msgid "Boot image cannot be found!\n" +#~ msgstr "Image boot tidak dapat ditemukan!\n" + +#~ msgid "" +#~ "\n" +#~ "Size of boot image is %d sectors" +#~ msgstr "" +#~ "\n" +#~ "Ukuran dari boot image adalah %d sektor" + +#~ msgid "No emulation\n" +#~ msgstr "Tidak ada emulasi\n" + +#~ msgid "Emulating a 1.44 meg floppy\n" +#~ msgstr "Mengemulasikan sebuah 1.44 meg floppy\n" + +#~ msgid "Emulating a 2.88 meg floppy\n" +#~ msgstr "Mengemulasikan sebuah 2.88 meg floppy\n" + +#~ msgid "Emulating a 1.2 meg floppy\n" +#~ msgstr "Mengemulasikan sebuah 1.2 meg floppy\n" + +#~ msgid "" +#~ "\n" +#~ "Error - boot image is not the an allowable size.\n" +#~ msgstr "" +#~ "\n" +#~ "Error - image boot tidak berukuran yang diperbolehkan.\n" + +#~ msgid "Error opening boot catalog for update" +#~ msgstr "Error membuka katalog boot untuk diperbarui" + +#~ msgid "Error writing to boot catalog" +#~ msgstr "Error menulis ke katalog boot" + +#~ msgid "Error opening boot image file '%s' for update" +#~ msgstr "Error membuka berkas boot image '%s' untuk diperbarui" + +#~ msgid "Odd alignment at non-end-of-file in boot image '%s'" +#~ msgstr "Penyesuaian janggal di akhir-dari-berkas dalam image boot '%s'" + +#~ msgid "Boot image file '%s' changed unexpectedly" +#~ msgstr "Berkas image boot '%s' berubah secara tidak terduga" + +#~ msgid "Error writing to boot image (%s)" +#~ msgstr "Error menulis ke boot image (%s)" + +#~ msgid "Unable to generate sane path tables - too many directories (%d)\n" +#~ msgstr "" +#~ "Tidak dapat menghasilkan tabel jalur yang masuk akal - terlalu banyak " +#~ "direktori (%d)\n" + +#~ msgid "Entry %d not in path tables\n" +#~ msgstr "Masukan %d tidak dalam tabel jalur\n" + +#~ msgid "Fatal goof - directory has amnesia\n" +#~ msgstr "Fatal goof - direktori memiliki amnesia\n" + +#~ msgid "Joliet path table lengths do not match %d %d\n" +#~ msgstr "Panjang tabel jalur joliet tidak cocok %d %d\n" + +#~ msgid "Unable to locate relocated directory\n" +#~ msgstr "Tidak dapat menempatkan direktori yang ditempatkan\n" + +#~ msgid "Fatal goof - unable to find directory location\n" +#~ msgstr "Fatal goof - tidak dapat menemukan lokasi direktori\n" + +#~ msgid "Unexpected joliet directory length %d %d %s\n" +#~ msgstr "Panjang direktori joliet tidak terduga %d %d %s\n" + +#~ msgid "Process all files (don't skip backup files)" +#~ msgstr "Proses seluruh berkas (jangan lewatkan berkas cadangan)" + +#~ msgid "Set Application ID" +#~ msgstr "Set ID Aplikasi" + +#~ msgid "Set Bibliographic filename" +#~ msgstr "Set nama berkas bibliographic" + +#~ msgid "Set Copyright filename" +#~ msgstr "Set nama berkas Hak Cipta" + +#~ msgid "Set embedded boot image name" +#~ msgstr "Set nama image embedded boot" + +#~ msgid "Patch a protective DOS-style label in the image" +#~ msgstr "Patch sebuah label proteksi bergaya DOS dalam image" + +#~ msgid "Set El Torito boot image name" +#~ msgstr "Set nama El Torito boot image" + +#~ msgid "Set El Torito boot catalog name" +#~ msgstr "Set nama katalog boot El Torito" + +#~ msgid "Patch Boot Info Table in El Torito boot image" +#~ msgstr "Patch Tabel Informasi boot dalam image boot El Torito" + +#~ msgid "Dummy option for backward compatibility" +#~ msgstr "Pilihan dummy untuk kompabilitas kebelakang" + +#~ msgid "Enable floppy drive emulation for El Torito" +#~ msgstr "Aktifkan emulasi drive floppy untuk El Torito" + +#~ msgid "PARAMS" +#~ msgstr "PARAMETER" + +#~ msgid "Magic parameters from cdrecord" +#~ msgstr "Majik parameter dari cdrecord" + +#~ msgid "Omit trailing periods from filenames" +#~ msgstr "Abaikan sisa titik dari nama berkas" + +#~ msgid "Disable deep directory relocation" +#~ msgstr "Non aktifkan relokasi dalam direktori" + +#~ msgid "Follow symbolic links" +#~ msgstr "Ikuti link simbolik" + +#~ msgid "Print option help" +#~ msgstr "Tampilkan pilihan bantuan" + +#~ msgid "GLOBFILE" +#~ msgstr "GLOBFILE" + +#~ msgid "Hide ISO9660/RR file" +#~ msgstr "Sembunyikan berkas ISO9660/RR" + +#~ msgid "Hide Joliet file" +#~ msgstr "Sembunyikan berkas Joliet" + +#~ msgid "ADD_FILES" +#~ msgstr "ADD_FILES" + +#~ msgid "No longer supported" +#~ msgstr "Tidak lagi didukung" + +#~ msgid "Generate Joliet directory information" +#~ msgstr "Hasilkan informasi direktori Joliet" + +#~ msgid "Allow full 32 character filenames for iso9660 names" +#~ msgstr "Ijinkan panjang nama berkas 32 karakter untuk nama iso9660" + +#~ msgid "Allow iso9660 filenames to start with '.'" +#~ msgstr "Ijinkan nama berkas iso9660 dimulai dengan '.'" + +#~ msgid "LOG_FILE" +#~ msgstr "LOG_FILE" + +#~ msgid "Re-direct messages to LOG_FILE" +#~ msgstr "Alihkan pesan ke LOG_FILE" + +#~ msgid "Exclude file name" +#~ msgstr "Nama berkas yang diabaikan" + +#~ msgid "Set path to previous session to merge" +#~ msgstr "Set jalur untuk sesi sebelumnya untuk digabungkan" + +#~ msgid "Omit version number from iso9660 filename" +#~ msgstr "Abaikan nomor versi dari nama berkas iso9660" + +#~ msgid "Inhibit splitting symlink components" +#~ msgstr "Halangi pembagian komponen simlink" + +#~ msgid "Inhibit splitting symlink fields" +#~ msgstr "Halangi pembagian daerah simlink" + +#~ msgid "PREP" +#~ msgstr "PREP" + +#~ msgid "Set Volume preparer" +#~ msgstr "Set penyiap Volume" + +#~ msgid "Print estimated filesystem size and exit" +#~ msgstr "Tampilkan perkiraan besar sistem berkas dan keluar" + +#~ msgid "Set Volume publisher" +#~ msgstr "Set Volume penerbit" + +#~ msgid "Run quietly" +#~ msgstr "Jalankan dengan diam" + +#~ msgid "Generate rationalized Rock Ridge directory information" +#~ msgstr "Hasilkan informasi direktori Rock Ridge secara rasional" + +#~ msgid "Generate Rock Ridge directory information" +#~ msgstr "Hasilkan informasi direktori Rock Ridge" + +#~ msgid "Split output into files of approx. 1GB size" +#~ msgstr "Bagi keluaran kedalam berkas kira kira sebesar 1GB" + +#~ msgid "Set System ID" +#~ msgstr "Set ID Sistem" + +#~ msgid "" +#~ "Generate translation tables for systems that don't understand long " +#~ "filenames" +#~ msgstr "" +#~ "Hasilkan tabel terjemahan untuk sistem yang tidak mengerti nama berkas " +#~ "panjang" + +#~ msgid "Verbose" +#~ msgstr "Detail" + +#~ msgid "Set Volume ID" +#~ msgstr "Set ID Volume" + +#~ msgid "Set Volume set ID" +#~ msgstr "Set Volume ID set" + +#~ msgid "Set Volume set sequence number" +#~ msgstr "Set Volume set nomor urutan" + +#~ msgid "Override creation date" +#~ msgstr "Paksa tanggal pembuatan" + +#~ msgid "Override expiration date" +#~ msgstr "Paksa tanggal ekpirasi" + +#~ msgid "Override effective date" +#~ msgstr "Paksa tanggal efektif" + +#~ msgid "Using \"%s\"\n" +#~ msgstr "Menggunakan \"%s\"\n" + +#~ msgid "%s:%d: name required\n" +#~ msgstr "%s:%d: nama dibutuhkan\n" + +#~ msgid "%s:%d: equals sign required\n" +#~ msgstr "%s:%d: tanda sama dibutuhkan\n" + +#~ msgid "%s:%d: field name \"%s\" unknown\n" +#~ msgstr "%s:%d: nama daerah \"%s\" tidak diketahui\n" + +#~ msgid "Usage: %s [options] file...\n" +#~ msgstr "Penggunaan: %s [pilihan] berkas...\n" + +#~ msgid "Required boot image pathname missing" +#~ msgstr "Nama jalur boot image yang dibutuhkan hilang" + +#~ msgid "Required boot catalog pathname missing\n" +#~ msgstr "Nama jalur katalog boot yang dibutuhkan hilang\n" + +#~ msgid "Ignoring -no-emul-boot (no-emulation is the default behaviour)\n" +#~ msgstr "Mengabaikan -no-emul-boot (no-emulation adalah perilaku baku)\n" + +#~ msgid "Abstract filename string too long\n" +#~ msgstr "String nama berkas abstrak terlalu panjang\n" + +#~ msgid "Application-id string too long\n" +#~ msgstr "String ID-Aplikasi terlalu panjang\n" + +#~ msgid "Bibliographic filename string too long\n" +#~ msgstr "String nama berkas bibliographic terlalu panjang\n" + +#~ msgid "Copyright filename string too long\n" +#~ msgstr "String nama berkas Hak Cipta terlalu panjang\n" + +#~ msgid "Preparer string too long\n" +#~ msgstr "String penyiap terlalu panjang\n" + +#~ msgid "Publisher string too long\n" +#~ msgstr "String penerbit terlalu panjang\n" + +#~ msgid "System ID string too long\n" +#~ msgstr "String ID sistem terlalu panjang\n" + +#~ msgid "Volume ID string too long\n" +#~ msgstr "String ID volume terlalu penjang\n" + +#~ msgid "Volume set ID string too long\n" +#~ msgstr "String ID set volume terlalu panjang\n" + +#~ msgid "Volume set sequence number too big\n" +#~ msgstr "Set urutan nomor volume terlalu besar\n" + +#~ msgid "date string must be 16 characters.\n" +#~ msgstr "string tanggal harus berupa 16 karakter.\n" + +#~ msgid "Warning: setrlimit" +#~ msgstr "Peringatan: setrlimit" + +#~ msgid "Multisession usage bug: Must specify -C if -M is used.\n" +#~ msgstr "" +#~ "Bug penggunaan multi sesi: Harus menspesifikasikan -C jika -M digunakan.\n" + +#~ msgid "" +#~ "Warning: -C specified without -M: old session data will not be merged.\n" +#~ msgstr "" +#~ "Peringatan: -C dispesifikasikan tanpa -M: data sesi lama tidak akan " +#~ "digabungkan.\n" + +#~ msgid "re-directing all messages to %s\n" +#~ msgstr "menredireksikan seluruh pesan ke %s\n" + +#~ msgid "can't open logfile: %s\n" +#~ msgstr "tidak dapat membuka berkas log: %s\n" + +#~ msgid "Unable to open previous session image %s\n" +#~ msgstr "Tidak dapat membuka sesi image sebelumnya %s\n" + +#~ msgid "Joliet tree sort failed.\n" +#~ msgstr "Pengurutan pohon joliet gagal.\n" + +#~ msgid "Unable to open /dev/null\n" +#~ msgstr "Tidak dapat membuka /dev/null\n" + +#~ msgid "Unable to open disc image file\n" +#~ msgstr "Tidak dapat membuka berkas image disk\n" + +#~ msgid "Max brk space used %x\n" +#~ msgstr "Ruang maksimal brk yang digunakan %x\n" + +#~ msgid "%llu extents written (%llu MiB)\n" +#~ msgstr "%llu ekstensi ditulis (%llu MiB)\n" + +#~ msgid "Seek error on old image\n" +#~ msgstr "Error pencarian dalam image lama\n" + +#~ msgid "**Bad RR version attribute" +#~ msgstr "**Atribut versi RR buruk" + +#~ msgid "" +#~ "Warning: Neither Rock Ridge (-R) nor TRANS.TBL (-T) name translations " +#~ "were found on previous session. ISO (8.3) file names have been used " +#~ "instead.\n" +#~ msgstr "" +#~ "Peringatan: Bukan Rock Ridge (-R) ataupun TRANS.TBL (-T) nama terjemahan " +#~ "ditemukan dalam sesi sebelumnya. ISO (8.3) nama berkas yang telah " +#~ "digunakan.\n" + +#~ msgid "Read error on old image %s\n" +#~ msgstr "Error membaca dalam image lama %s\n" + +#~ msgid "Special parameters for cdwrite not specified with -C\n" +#~ msgstr "Parameter spesial untuk cdwrite tidak dispesifikasikan dengan -C\n" + +#~ msgid "Malformed cdwrite parameters\n" +#~ msgstr "Parameter cdwrite salah format\n" + +#~ msgid "symbolic link ``%s'' to long for one SL System Use Field, splitting" +#~ msgstr "" +#~ "link simbolik ``%s'' terlalu panjang untuk satu SL Sistem Menggunakan " +#~ "Field, dipisahkan" + +#~ msgid "Unable to insert transparent compressed file - name conflict\n" +#~ msgstr "" +#~ "Tidak dapat memasukan berkas terkompress secara transparan - konflik " +#~ "nama\n" + +#~ msgid "Extension record too long\n" +#~ msgstr "Rekaman ekstensi terlalu panjang\n" + +#~ msgid "Fatal goof\n" +#~ msgstr "Fatal goof\n" + +#~ msgid "Unable to generate unique name for file %s\n" +#~ msgstr "Tidak dapat menghasilkan nama unik untuk berkas %s\n" + +#~ msgid "Fatal error - RR overflow for file %s\n" +#~ msgstr "Fatal error -RR overflow untuk berkas %s\n" + +#~ msgid "Translation table size mismatch %d %d\n" +#~ msgstr "Besar tabel terjemahan tidak cocok %d %d\n" + +#~ msgid "Unable to locate directory parent\n" +#~ msgstr "Tidak dapat menempatkan direktori atasnya\n" + +#~ msgid "Scanning %s\n" +#~ msgstr "Memindai %s\n" + +#~ msgid "Ignoring file %s\n" +#~ msgstr "Mengabaikan berkas %s\n" + +#~ msgid "Overflow of stat buffer\n" +#~ msgstr "Overflow dari penyangga statistik\n" + +#~ msgid "Excluded by match: %s\n" +#~ msgstr "Diabaikan oleh kecocokan: %s\n" + +#~ msgid "Excluded: %s\n" +#~ msgstr "Diabaikan: %s\n" + +#~ msgid "Non-existant or inaccessible: %s\n" +#~ msgstr "Tidak ada atau tidak dapat diakses: %s\n" + +#~ msgid "Unable to stat file %s - ignoring and continuing.\n" +#~ msgstr "" +#~ "Tidak dapat memperoleh statistik berkas %s - mengabaikan dan " +#~ "melanjutkan.\n" + +#~ msgid "Symlink %s ignored - continuing.\n" +#~ msgstr "Link simbolik %s diabaikan - melanjutkan.\n" + +#~ msgid "Already cached directory seen (%s)\n" +#~ msgstr "Direktori yang telah dicache terlihat (%s)\n" + +#~ msgid "File %s is not readable (%s) - ignoring\n" +#~ msgstr "Berkas %s tidak dapat dibaca (%s) - mengabaikan\n" + +#~ msgid "Directory loop - fatal goof (%s %lx %lu).\n" +#~ msgstr "Loop direktori - fatal goof (%s %lx %lu).\n" + +#~ msgid "Unknown file type %s - ignoring and continuing.\n" +#~ msgstr "Tipe berkas %s tidak diketahui - mengabaikan dan melanjutkan.\n" + +#~ msgid "Hidden from ISO9660 tree: %s\n" +#~ msgstr "Tersembunyi dari pohon ISO9660: %s\n" + +#~ msgid "Hidden from Joliet tree: %s\n" +#~ msgstr "Tersembunyi dari pohon joliet: %s\n" + +#~ msgid "Directories too deep %s\n" +#~ msgstr "Direktori terlalu dalam %s\n" + +#~ msgid "Unable to delete non-empty directory\n" +#~ msgstr "Tidak dapat menghapus direktori yang tidak kosong\n" + +#~ msgid "Unable to locate child directory in parent list\n" +#~ msgstr "Tidak dapat menemukan direktori anak dalam daftar orang-tua\n" + +#~ msgid "call to search_tree_file with an absolute path, stripping\n" +#~ msgstr "" +#~ "memanggil ke search_tree_file dengan sebuah jalur absolut, dipotong\n" + +#~ msgid "initial path separator. Hope this was intended...\n" +#~ msgstr "jalur pemisah awal. Semoga ini yang diinginkan...\n" + +#~ msgid "Cannot open '%s'" +#~ msgstr "Tidak dapat membuka '%s'" + +#~ msgid "cannot fwrite %llu*%llu\n" +#~ msgstr "tidak dapat fwrite %llu*%llu\n" + +#~ msgid "cannot open %s\n" +#~ msgstr "tidak dapat membuka %s\n" + +#~ msgid "%6.2f%% done, estimate finish %s" +#~ msgstr "%6.2f%% selesai, kira kira selesai %s" + +#~ msgid "Cache hit for %s%s%s\n" +#~ msgstr "Cache kena untuk %s%s%s\n" + +#~ msgid "Unexpected directory length %d %d %s\n" +#~ msgstr "Panjang direktori tidak terduga %d %d %s\n" + +#~ msgid "Continuation entry record length mismatch (%d %d).\n" +#~ msgstr "Panjang masukan rekaman lanjutan tidak cocok (%d %d).\n" + +#~ msgid "Path table lengths do not match %d %d\n" +#~ msgstr "Panjang jalur tabel tidak cocok %d %d\n" + +#~ msgid "Total extents scheduled to be written = %llu\n" +#~ msgstr "Total ekstensi telah terjadwal untuk ditulis = %llu\n" + +#~ msgid "Total extents actually written = %llu\n" +#~ msgstr "Total ekstensi yang sebenarnya tertulis = %llu\n" + +#~ msgid "" +#~ "Number of extents written different than what was predicted. Please " +#~ "fix.\n" +#~ msgstr "" +#~ "Jumlah dari ekstensi yang ditulis berbeda dari apa yang direncanakan. " +#~ "Mohon betulkan.\n" + +#~ msgid "Predicted = %d, written = %llu\n" +#~ msgstr "Diperkirakan = %d, tertulis = %llu\n" + +#~ msgid "Total rockridge attributes bytes: %d\n" +#~ msgstr "Total atribut rockridge bytes: %d\n" + +#~ msgid "Path table size(bytes): %d\n" +#~ msgstr "Ukuran tabel jalur(bytes): %d\n" + +#~ msgid "ESC to return previous menu." +#~ msgstr "ESC kembali ke menu sebelumnya." + +#~ msgid "the size of memory disk is 0x%x" +#~ msgstr "besar dari disk memori 0x%0x" + +#~ msgid "the size of config file is 0x%x" +#~ msgstr "besar dari berkas konfig adalah 0x%x" + +#~ msgid "the total module size is 0x%x" +#~ msgstr "total besar modul adalah 0x%x" + +#~ msgid "the core size is 0x%x" +#~ msgstr "besar core adalah 0x%x" + +#~ msgid "the first sector is <%llu,%u,%u>" +#~ msgstr "sektor pertama adalah <%llu,%u,%u>" + +#~ msgid "saving <%llu,%u,%u> with the segment 0x%x" +#~ msgstr "menyimpan <%llu,%u,%u> dengan bagian 0x%x" + +#~ msgid "the core image will be embedded at sector 0x%llx" +#~ msgstr "core image akan di ditempatkan di sektor 0x%llx" + +#~ msgid "" +#~ "succeeded in opening the core image but the size is different (%d != %d)" +#~ msgstr "sukses dalam membuka image core tetapi ukurannya berbeda (%d != %d)" + +#~ msgid "succeeded in opening the core image but cannot read %d bytes" +#~ msgstr "sukses dalam membuka image core tetapi tidak dapat membaca %d bytes" + +#~ msgid "succeeded in opening the core image but the data is different" +#~ msgstr "sukses dalam membuka image core tetapi data berbeda" + +#~ msgid "error message = %s" +#~ msgstr "pesan error = %s" + +#~ msgid "opening the core image `%s'" +#~ msgstr "membuka image core `%s'" + +#~ msgid "guessing the root device failed, because of `%s'" +#~ msgstr "pendeteksian perangkat root gagal, karena `%s'" diff --git a/po/insert-header.sin b/po/insert-header.sin new file mode 100644 index 000000000..b26de01f6 --- /dev/null +++ b/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/it.gmo b/po/it.gmo new file mode 100644 index 0000000000000000000000000000000000000000..1d98af1a8c5951ae2f04e410ba959c5ba25611d0 GIT binary patch literal 128135 zcmdqJcVJY-`?tMOii9E{O+YyyfdEP99fUL>l4cS*2%BV6B*})|1PF=+K}8h1qGCa% z*n1Z%V#A6e_TCE?#IDcvnVC(Y`1^j}_xJqs96h3q4p3JHtz0M|cP90H1|D;Ro@a@Tw}|Rb)4e34E84cHW&}zfF5kT#OI5Jy&SV(AKZ(f%DdL_2`Kr0 z1P_6`9Djv9a7Ufs^9_MLq3S;aD!v~MhZRuiHbC{~ZEzrb3LXi6fd|13C))lv9IC$K zoV(b$&w-8bzX#Htz6aqE@L?!9zvZ|KDqf?dwx60o>0KA7cJ+4t6QSfb14`b-Q1xEq zxEv0~eLiGp_@095$LFE?<$Kr(9&(b^yYA4#JpigdkA)pzK2-f`pwg{|>W2-mD|`(~ zkA8rPci73cUt^)%DNy5Y20Q~Uh4WzJQ+&Reun2aBkHaqT9Vq$y3NYtmS>T|pEzZb^fehMB5zlO3S(Wlw`j)cm82vmC~JO3i6d{2ZLPphEhe-%{y zZ-W|dPeZlqM=1U4wcO`Rh0|d&yb6wiA3=q8TjBE!g2zJ1XE{{4*TQaaGgSY*3qANd zRK2^LZsjt{aVk{$5LEbij<><#xL<@SuL+&2@DWgUXPR@L29^F=cocjLsve)fq3|CU zKJ-jmpIqqSUkRmW=R5bKQ1$)*D!p%|9lu@R2%JYlmA?qKftNtFZxd_=pMom?C8+xR z1SRh_XW4vvI;KGNQz2BpoB;d4v!L?78!G*F#~)x1+=s4Wj(~%p^!_x*HEINQ!ELt%H^V_+OS4mO9Y;KA@xsCHZdo5A~`;y(fV!cU;`JM)<*b{DY;V(G84<*+hpvGZ~)z%#g)!t+n4gHQ~Q1V*@)&FO~mhfTN0zL<2 zU*3Sq?|UfyZE-Gr1;<0x<76m#Uk}yJhoI`Y6RJMnL-l*}^Xz!)2m9e32bJ%9sQR4& zgK#}mKes>M<~tIq-?E{~3qr}`BB=DY!rt&XI1>H{Rqwb9Y`&>*3GM=@etr)&fl(LQ z`WynKe_f&4F$GFaWl(Zh1XbR0sCHZhuYiw0wRh%4wmplW+I<~V|2+g{hhBzl;b&0g z{{~ybt`}Rz!&ux$L!~c02cLs#XY?h=9u9)ivoJgqp6qxo?11}f*aqGU zRqiuz0Q?#@f?Y3l^M>O9I2`|Ruqj*wmH)|5^<4$q!?n);PS_atBT(|(0+s*s@G$r% zRQavf*mON$2izmzAeaSX;4;__Zi21gW~gzo4Gx39KO8S8c(w? zXRN@JU;uvX+-Y=HDehaL^sCcaJD$&k%I6iRc6|cX&flGX^DC|Yk??T*hd|Xo6Lx|D zsD3&L9s#d~9pPh8?cNCo!mpt0PuHugoF>31+!;{q&Vp)pA?y#s&V3zJd3VCD@L4z% zeg=<(U9YzKKN?QPJq^AIuY=N?rPtW->!Hed3@V@3q3qI+Q2ny79J^q};!5~@9?L$&)VD0_VmRK1^sG4Ks2x&H-?-fgnuV**sY zN}%Ml3M!wCQ1yJoxxa!cKk5cs&o)r?^I&&42r7LZRC_9+4_*${j)$Pe^}A5z{Q@&!+|AZLErANZ1**PJ!@lrSI0Cl5#p**ER5??j>R0aE zE1Y{RY=QsXa4>uvO8(!PZY#J4V9ha6FV8(xLJ_9;%$>us6H{M#CpzEBGR858s82;7?HX{}oF9t?#wSaDmA?zB{Pqu6z3vZHPCo1e=R?(J zIh1~Hf~bpcJ5>8#hmzA5Q1QNX?luov`E-EI@Q-yI1XZswQ2I0%D%}-u415$y&VNGn zTl7QL9Sak14};1t044t*oCi;Z(({jCclZnJ0}p@L_E$2L{!D~TVFr|(roaU-A07r@ zgOcwTQ2OwXbGO=T+ZzL=A0wd3%Y>4Df#Wi$_N{{*;TCu}e8;)>K;_@+5t~m8RJo&} z;`XyYUguM_5BqpUfV6UeZ62l z?ldU5-V9a$9Z>c82CAG!PuYE1H>mzdhmBwWO7D(`Jzy1#ftNysZ-%P>6HxZ&4JfkZ99|UQ2eLDBxD7meMlIKRpC!qT4U6=~LgKFQ97p(kez(m{&pvt`qs@!*>^yhb|{5rg7 z$J;>Y;m(GV`vRzOd^%LRU*Ra&{v~TivSBOS6>uJ03RU0tpyK}xH7>inZ1rLgRJoI& z@-Kt~U=36~ZiGj`r{GcWW2ksdU$N=CLbYQM>;-2-#XAkg!;Mhoz7Cb&kMKy?@>Q!B zaZu%tgUV+XJQS{gG4Nu?hhQA;525BZ`@>yO`E`5E+SUG0 z>5qeL;OVd(T;u$2f$Fco*!o-p4_;XBkv~ zT?E_1JE7$B3{<+$oqw}8?YQj*H4gj2F)+osPlZZ<1yn!W0gr}nK#lVbZ`t{#8*GgG zC@4Ma13SSq*cRr)LRbwYpSNHvZ2Y$E&jhIWvmC3S+ItR^Tpodv=g&}b{|mN*&EK(h z&x0y|2s|8)f=ZtURsIU7cCUew%Y(2r+zHjsUqY4N>Rmf7dPBuK8YBCu2 z>285a_bOC_z|Qa{*b#1pD)&7oef+*d-iXDuv;_c?dWN4B5FJI;hkU*+8AK(%Wl z91OR^fw1Yvw*N;$)psJ)cn?D9f)sfgaorRsL?MerWo&&9^(0dpK0Rj&+<4WiRH!XjtyJ z7^=L}pz3iB><%x4ec(M%djCFD{eFUyr|%nk?$Z{keg#nD=|pJ83#`EX0Gt40zh%t~ zgHZK&1onX2p!8-JRKB~R_ z=BuzJZ1%mCTSv#fQ2t|KESwD0?^RIk-vHIVmmR-^t#BXogOzg|D81+hCATCfc@;wG z&0^@mi=g!H9vA~(fQt7M>;;?tX!A>e(w9ka04#zYyc9~V_d}KUI#fS@1Bb&VKUsMl z4OLD#90FHB$>TvNd-fhwK7T>!Q|H~*e)NY5p9VE97Q%M$e5iii09Eg;&i@<7sGn_p zIzY)O9x9&+P;v@Dje{zva+kt5c)1II8Xk&!2b8=%gGztU9@|gd9f!bn_)mmt&upmn zpW=8qoQwNzC_B^c7n|QSsQQOtTX-Q<`!>K1@NuYecS6a1H&lPL{ngfYB$R$kg=$A3 zRJ?L{3|s|E;SQ+!jQ`E1p9wqSJ{79G%iwT$H&lDSfrr6A;b_?UcdOUwupjR0pvK2b z@NoDeRJ~gKVfAbJ!pEcEiVTiiMs-- z-RD5%a~B*5cR;0Y&Bq|BcR%RCWT<$Bur)jbN?+Hw@SC9OzYVJWA3*j0?@;mDG`9Km zgbE)6CEuyee?C;Xr$N>0Dk%AFfy!q)RK34~(wk;YqRe>h4HZ8HD&Fx><(&#upNn8q zxXHP1hqG{Rac+-~Tx1uAKyaooV)2E zww*`7{`e1v!(lNT0LVgwl^^&*-7VVc z=P;=JCPC?204jbp>;_lCf$%05{w`EIzJ+R6>nE^E~EQ0FaO;Gu4hLZDksDAw!s@z5`ZGF2!>FG!)JzEYnt~WZ~1(naEQ2q2e zRDHjLl1o%8+y1st<@SV1KN70ER494mLB%h0?rP^=0c9^Pf$HZ?Q03hNW!IjE>W?3x z>fP#4+rPb_+C3hs+~c6^LKrID6;Sy-0n_12P~)s?YnyH=l)S2-^k+SkoF0JE_qUGPoK zAAm}KHdJ|6K-KehC^>9#{_jAImmi?w?}3tEf2dX_$9qc%ZfwCi0p!%iKaWzzXZiZ9fb~qmP z=@@0s1CEE%tB0ZL{W?^8zlO4}zD`!|aWDsG8dQI-g$eLWsBzfoa4U!Ya02cjQ2Ctz zmEZYL@isXB&Cb2u@hd33j_PdfZab)SL!s(-43zu|pxU_<4uWf-^yYaed3+1iPi?x` zeu{zW*RfD?$%M+M49YH?4%MF<93O$wiycsU_y<(F&Ry+1Hv+00KUBR|K$UkDRQx-k z+VKk1eEbQNU21iNEvFw;{ga{69S1dTLXMX^J^_v0hZ-l%j0x44KNPA3lE0Tz3jMc1(T`w5pW>%_m1*q z!3$$;KY!fE+WSAD z4|hS?!Ovk+7&pMmX9!d~Q=#g+5K2y`K&87JYFxYs4}#x9wex$Zc66fic_@|?R@G%b$1||1TpvFm?A+{Yupu*=s z`Byvl8Yum_9d3kg!$t74p;5kS_y?38EEs0T%lT09xf4nbcSF_Ze%J)Q1l5l_p!Dy3 zcoh5-j)C6rD08kf2P)qyq3XXGO1?Xx))Buub{Jvv9|YCjG$?yo?EFuG%KuX5{}5C^ zz6MpFH=+9D1K1OO2R(S$NIMROK)4pjMjp!)mJQPvI( zg%fdCK(+H;mZ$}W5dRsZ&5ZGA^M z&VU~Ni=pa&nd3t+8TY$T>x1q`+w^mw?DjIK_;)}LZigBNyP@jgjkEPU8Y=t*sQRph zs?Wnv`uZ`H{M(JUdNl${|7JnWYiGhtcqjB=RHC)hJ)p`N3Z*Z(Q1zMZcoLL7zXnQ= z?t+s4%TW6A71X$DoMi272dH?Hpz0HFTnSa5Ti{&y7L^mfzpq=p!)Y2 zsB(PATKhK!Dt@A4HdJ|YVN-ZMlpHRD8b|A)oo+b-=;zJM-a+RoDJ1)>!Iw=lThRD zJE;CUB;U$A7HS{Hj{t^Uq}9`0pOa=H$t!ktj_!;$l?eBz+W zOL6Ww&Rq>PzE{H}cr{e}KZ45dkTP43u~2fF0j0m?jw_(%iz}h(e;1VgZHH>-uTbea zms@>JfYOHnPR$dFB+Pem-KW~82tH+?~{~nYb`WvcUM}+J+8VohQhQr(8SokFT4l4gU z!&WX^q2`VTN1l-5K=CB4zt}CGAb0w6WyU+PQ3{}o+P~-Xw zsPXv?RQ$hT9_&d$ohv+=W_;)kL7XE{{;FNA8}jZowF8R!1OxtpA3 z^{5xrxK4)Zw|uDjoCsC!`B3tI0!ltRpa;K$8V83ixAhzZC4WEE_*(=e@0Bna-U6k! zKR`2HR#3)v2L+OquL;2qcRo{1^ zT^aW6Qb2=Ob?}4)W-$2Fhbgq^A7%08Shmy}Scr3gON{(Mc^;f&|tod=G`PlXIcw)r;Xucq^3Nj<_Jo{4Qw@lzqDuO5fgw8YkaF zCH4!1#te-2f@Loc#&ii4V;=R(P81ysD-q0;Y!>c1bL`mOcFww@_a z^;iN&z>QGxK7d`|KTvY(a*5T)aZvg<4XV5vsQOR6d_T$;)@Gwbx^z#?>q+`7ML8 zr#C^#aWnMb*HHS<;yN3@H#Sb34?$@Dr5W+FWnTNr0-~G^lz7 z9alMSbm31z>DAj%`Tgy90w2-NuA4%NQDp~~s8(Z4`8B)KuFnsJYEM_F ze0o9Edl*!`GNJ5QF;u=Qp$D&a?#H0ozXK|tpP~BuAJ`H`-(~H0C#d@LhKe^BsvcvZ z@=u2SU;t`-oDWss^-%J^7nZ>1q2w~;Zfhs9p~lT3cmliv7Ql}8*!9Q>Q1i#rP~&t5 zJQ)51)t-azwQ@ZiN?!*!7CNqhrTA}yvd_crv*Tj{RDExSvg>a_^bH&pt*57_q2c3ccq|BImVxz6!^sB!iJRQr7oTK0s>can2g zL+SNpP;z?)s-2&>@J15!M_kH{ew_;_H(HIZSk;m_k)SJv!V3=0w}xm9GnEd zh5g~M&DL%fLD`A(pvr#^s=c2<^+(r7Y(J(#*@ZGF`?(S-pF5!P{}9H&MvvO@(HDBS zkAZ66d?@>OIXnd30#)yO;Sl&bRDVQ2X8XM})VwqRdT^TaUks&xtD)@9wNUv#0VR(g zpzLmk$D@3w!$g=4pMk1h`zNgYMnjFG66nEGpxVFAxi>@g+j~&$Jm^WAeh^fDPlswp zF_hh?gn4iktb!jv)o;oco4y*Vz3ZXmx&=;z-$Lol(5I~a9Ro+>_QUD$N+`YF10|<{ zTWxtoQ1v_2aXpkheij}NKZhE>IZsFVHpA&qV*1ld3 zC67O$#!si`Y=qh3QB$zQ1!bCY8*WbRlo0`#@%ig z-h7+w|2|OtJPxW~bD`#u#f}@G#=&bYJn98IZhJx5#oqU$*%r zK)Gi^%`c}y$@x(zJ$f6epZ7rNLBCgQImJ-p??kA6zYI!lo1ygVH5a}cYCN`i)#f_{ zDqS{Id&{BXuYg7$oqG#xga0S6JKW>^J8ie|MnLu7G^qZrhRSyXl)RsW8o%$r=I|RR z`Tq)+!B($X_xVuca3fT@7oht2GuR0J4%NPYpz=HFbz7goP;#0ARqg^PeOnDxuT73y z;V|5vzzML+4lBoeDF3VA2>3dbyj#6t?PMP)yWxk^;Mq{}`UFZ&e?pCuE<0_xB~bET z24&|jgR0*)sQP^Y)y~FmTK(z=CEpULcuS!4=MpG;a1)d~UW1x{zjgctzJNRGEvw%z z!4%vdz&U0>_B;e7$Iqbh-vd>@L*KFUNgR|uEQ7LZ*E-$-)h~}h z$>}xN8t#IspYL6_et^oq6I8#)LfQEtQ0XT^>A@_h^b4Tsxy*%MPT51$5Augy^DcS56oP~~*_*m5L1822=&ewzi=zsJL9cp6NEtD*9H8A@-y zhBM%RPi+2YLCND*I2(Qpli>JI?K#S6Fd28t&+L1>W1-}=3HFDtK*=NOb8FYSL-pSz z$4WR4_ZpZ6e}nlj`3tN68=%_vkmFlWa`+9(P7eOk>gh~46Zh><_P6<0HvKp#yO9T# z?+mE=JPg%e??8>SAED&X^lLl*dO*qZXed3J4K<#spzO+3PM~h?<;_u;}$n(vvfKj*uxOLs*@@oZACtn-<`|+GdSRwZx z_~}~AeHPEZP*y&-uGzRx<-VWivq*P7&kvB6;pj_(Pr?EC-@!ePIMv+JvG&Lk**B)-B8z`j=A`q zZN1FjG5BAOUjSE<%Rd{Qi2HLFuLk!E#OV%GoZmWEe>tlN+xsdf?r8EJM%Wte;poF+ z+_UlD<{}T^xy9ZIoqIlEO-Uy`zmT$S!hH^W$Az~iFRc-D{mrwk6vAio{EDm3RNOz| zPKD>-mq8x&ulI3>2ph(IB=<-4!uz^B75^gqn-l&ud;+$iEgE0C2I7vxpCyI4p2w|g z2uvrB*2LA-4EIRf7r;e|@A413_=+=vJT~G#ndfn&t0Ziz@*sXko||%is)$?xmu?ne z&0Suv;Gd0uA?^|velvNNn-t6sa3=0U3F|@rYn}f@N8x?KPKSNr9ddIY!W|^fAGxRV zypBB1CVT_@1NSZX|Bkzey69?yKT8_lO#FLVFZ1^V{9fkPl?*Q;d=<|Jk?s}Jw|D8U zBdm{m?gWS9{*Zep&!e0?ujaWsY2V_$jkJ;LUi`a|udW#GpGl|d1pGI{Ti^}cZ*Z3q zwvl@^&rfqVc6lrQQ{?d|yokIX;92XR?Zlbr^4r6+uFnWtPn^qfU%+#B^0)){G~6tg ze4XpnEd}@8Hkt2f$46aw$hn10?)e25b~AZBNZua2hp;ob6J6MVdUaN^(M|>4Xo5x>ggX3I4x8mNjO- zwVbp!xx7c;&*V*hwgt#9M}+u8W<2(D5plz8q@4UCI3^apMV(cWE9c{SxlT zwVSYqao_0D%D*ddkHc>;_Y*E%BF~R<>(bgGat(3m<`eHhJa6Fs-34wU?|#Uk5BJA} zAHqF|JkH`ilyp-F-^BA3_`k;e7w!c7FD3l|o{#4_3jc?Qb05#W@eA-A$1{)STb@aT zHzNNG+^=&_C2R~##s4`)a#t?y_PAFPuImHym+^C> z;PT?p$1#NONaBx|gDaCbAHkv2L)RX{-{E-<&tDO5F86!5--EiIA^u8kU02}ug-h4f z)l2^0;Wy8f`2jqe_*$FmI?rOCzqgZDdza>I(m#RwSJ)W8??`_V&pRR80pI;RcOi$z zcuwNJfM>Q9<~p9gyIuXpl1DN3FT~e%Fm=4pKKiy2f1P{&jpvmv&TaVp%-zJf&nEpy zm$#yyg8ypV1(b0Kw;%UW#2G=}*Qq?hdUE$BtcI}1Tt02_dr29%s}=5ti1Ry~L!86l zy>K&rk8@Awc_wj_c)nZt^SpukR-T)>JO&eII^nv`!~X=H+rez|%7MReccEU>h_{e9 zZ28O?LNELVb3aG?iNxtlSdKE;>pBPb@q}Lo?{(#zOkOQWy9@UxJoo4Rf;iJ~FCqVf zUAz_e>pG1)7XJnKzY9Nsec)x>FB3M8crn}$<9>#F2jP#A-&Vpl;{Pnqx~_Bi-cOt) z+|O_?Bz%hkx$efl7~Vs?&s~~hcB2_oJja*QKd~w-fjSWq!@`_izts%HRX|Uj-k*eIEBR?v40W;-~9IcnxX3 z!v8zm9Y$YoxyV<{=ahnjr&vFtBG?POy+)yTUR5viv03jIoDcm-*_iC?ay^>BK#)e zE#vtX?gXA6ae2&xakwYDJhtFIfilbROU3U6sOv?Z4=3z0+_QK-1;3MA8in6Tnv38h z?$3E%NZdyVpT_+qZe71xn7_^3^CHLh$@fm4`L6`!tZJx z?!x^R@tfGl+b@ z;#t?b+;6z&Ka@9D6yYaxe~JGr{HnQkQ|2kSKY^oNUo?08z@@(*UQ4<|iSrT9Ghq+X zUW(r}a69*4o*$wNKVg|X7vlFeai8Wn$bBwh9}?z=A9HVWdGlzl=lT0M@lGU;u8urM zyEwb8m+uK~T`?g+rC*nSjuw-~8`E4L9 z&g6{!f-x>nc^$?*4Edkz(!T`HBYZ09TX4U~{V{%x;mzDT2@At#x!aKTC+>7^U5|4Q zBW_FXb==)uT}>c=+T!=UEBg`LG2}4=&Vi?KA0CMa|H2(rFMT|Iy>Q>-(r1y^Pux%8 z--o#W@LWyUJ#Z;^Ul&hV&cIz$&s~Z;a-Hb>@4~MM&*#Gm@*7E6qq#riPQzUaTe`T{ zyTomg+ivIgHhw#Z^9Jsorm1*;eLyIC}D?_W(Z*(VV@`h*Gk;SleRx${fU>2 z-(2oA1#;c%%2*FCCA`wP6;?%B{?|VN=<7gwUC$AIH2HNTZY%sA;#pT3e2cL0O2F0I z<FwA|2oyVXW@Ayc@KlPx(K7lZ>bCag0wq%&fz|Z@Jk3gmisks zT@wh;BK>mQr*nVp(s}s3;htZ{e?9I?i2E7$ES~$pZloXS@(JP2ApSza&gS_P?v}Vm z5Z=PY8IJpC!p|h^Or8@-UxHg#C)YpLRrfc@<9DQ=Pntc%jfPjkEu?>y=OalMA!@%T|16}Z&6m{ zx)OKT#f$hw_yA!Y$Scw1FaP$`cOvP#xjZsRdmqm=g!SiMh`S6faCwg8xtnX_ndEaV zdEQC<*4zuYcjBG^ZzKLu@JZYs!(H6E{=_}XKAOKrk=Iu)@8#r|Q?G7{P~^h&JeIis z5Wa!DTEkt0ozC-L3UpU0`S0M?wSxOJJ-f1dyLv0^Tj!_ZVu^D=(@ceUfWStJkVzXNwW;$PwX<$VNc^YQzOyza#RMfik^ ze;xj1+-+UnM-!&&aN?cI^R9_Fs(evtS>T)gGD$GCbH@tnY|E1Ec$l2%uRg>O9WFI>9ra2)ruE^G{CMRQk^ zZV~yV5Z0GxT^I8F3eT;q)At17WAW>PU#u&`1^EWye=?56_`keYnBu%n_}%!w$n$9O zxe+$!eht5Excd>_nCD8U>t~+l;D0l$e_iR^U*UNianHbg6wkw4y5aCv(*245!PN6r z-0`&U9M`5O*od&_iE|n0R^h&Z=bwp}iT~l;{c)4T_W{q(!A;8BYj9NstNdkNd7wNP zsu|_Q6nc|OlcG(W%%E2p3KRuGp+KQm9xM!a{)PV1GJk$qz(&Y!5K7|e#WB?iN=->i z@d`=;1@ptzD~j-m)B(S#NvXzjl;?SM*%l_y3NI@)!wUzCsuuY}0WTC-sJ0QH>IFli zJf9a^7AUGJ4~DDy@LV1!q+C6PN{dS(-tk_xKU77Pf)!r4ibv01<;9ehRmX&plFy6x zasvfb!H^eLjbo~fSDq25^{F4Vo_}@4{EFbB3ZFMCD?2YOD>ES>VU8~*p>KGUmzXm# zd+wyv^z6A4GV;7if5=}RKmcBOb-2pQ4|tWqF!fm&_#dK&0t>23LxHg8_Yi({B>EIv z@PSJ4#T15hBd>BleNj=I;EN%T%F2L06jlcn1S_ftAzS>5=(cc8xGGTYEh;H3DDg_e z6}_uG(>6t>{6J`7zzbLU3j$sda!Sd{jSpAVlm)!}V6ZB|^U^AiYgrj3c@uM{BzaXO z0lKRoSY1}A z!RnAl7kQ!5@ccgiCIq_3X-K)h((_jodg&<{`3nph!b_cyCL3TCOtFds6@ieyiqiew{6I~9&>t%F%KWHn zl^I}W5LJgYo(ksYqh^(}E0hieFAQMK3rJg-;7w7Ts77(o;!1x_S6rs~BmES0&g*VcW);xM**iDi^GDKU4Fmywp6k(ie}N!>q+Nmy!DT~TO- zJ<7|PYy)yq6H~m@oSdv2>&^=XJ=CYhL*1*(0~J+a>pvq{ZKtwOb%nLNer6ly0@Hb; zJQf?w&ZaEQ_K_#EfbfEqW+sl0_j<<^^tKsFFHDV08W)4$m~ijfvB(4yT%_R?sfT$*26#!MRs+d4!d$H)H{Iorr}bMb*{5I>Fn`H$=CV%M*7 z!v?ts|6{rPi-1|GCtcU-14W!itzE}eSJVytNJrUjuyxySxRH+yXPKt;#wcIx;6d^E zr7X%~hYfKL**RGga}qPGe)Z8x&@J}tQltAgU+i8{vaF_rOUy!|#LprmKfqwEtD_RJ zs?)HD_tO3O3>CG;I9O@1+$}9C#ae3VS5;ch>aH+8X22l($J5iO+CSvti;vI9%1Mon z=b^H)z{^g|n{;A){NfSA%;Lotk4e&SniXGQJb0+|vU9NS)91|bW@&*l&|;9M)!-ao ze3^Hm7a!u!toZO8vydqaEcAk5mM!xWd{0bm3IXjJcvLb$AunbwUP75>N`HKS{{b@t#k}`j3 zxmm>3dWK7?s|vOJDl%IGUt&s1j``z}@03(;Rz_m(skymcN@i|uYR=SD^2^SMtO3~;I9H&enCdxqphDHEbwonyFVWdngzXYr zHiXrrmXnwoCU}{GW8d6y3Wlu?(oH}E!)Jheo3bA`YL0B=U03!G$ z2bKUV&qL0mB2cv`7@E(PtB{p#(3`#DXf4EK;oUv=TapmF9o8g!1(;<+-4=>{K%Vv?{9kWjiJ)2a{IAsG|6c*M zl{YGGnoYZqo4>AI^-A!2Nh}E1!uzRvWXHZAovsbqSFMwLN&UmVq_nKuxhYdJvb|Yp znRx>TnCCgZr1Y%h$-bl+d8wn4((-&s{(||%XsFh!L}2!u0bY6c6KsKQNVz(3Cy7S*A!A}j#O+KX{{O&pHF29 zJ-c5fFZs((u;#-uqJs@W$Rfz8LPaqO<=UbIW{?yH@~ewEu?dH1sj5{Q!eGu1(&UC= z%6y*YHbs=fU%R-MAZoqYXy;>!>{*ZTt@Kxw$iPL{b5&Q=p1|N83i#)15C^@9DM`L$ z_5;4;tn{oL{$^w(W~O+vIMB$Q<4ew-;-wYRn8^MptRIdfz9XfcJIfG&LwWm4Be(kmjs7Dn?3|I`+*JpjL`Sx5jXJADq6CcC62%qphL z!{*DVd#Q^#7}4=ty%a{F3(!T*CuC$13ybp7!K_`f6H`6e?&^xlQ0YRX%hc!tCz9-xP!Pp9B+~n8R|E z&ABvgFB!N{vwPfc5c2rfq=X+JvFwQHqOdtP*f;mI#DC4)1Ro&pjI`|B1C^_=)bs;| zW@k-H&A~_>AmiNZ#GK>+t?`>oBsg`2pMz4?KHGXquZ-1iM-@Z0mCQd%c7v-em;gQU0z zkY{aB#5BmH*ISnd3xZ|)7OGSSuCNI`P<;v17(TG%T!jBnb}sh6Rz~H`Z%`lXuiKQd zI8z5#*V@!YB>^29>*zM5v6E zPfRiaYcI`wUKW&vHuYdtlbB9cE{^fj)NSVpJ+Z)#gtA<>vxrT=^4wDw=qOSXjOu2m zx4Lj9yHMWI#?5}x>Ax1iN=d6GWamyx^a`1Q z*sPdP&G|)Is`%Lv1OlE`Hkn)=3x}$`qEtraK=z>8HAspHUT%;_R#w$|0Z{I*(d1WN z%CQfFNt+BBi8Rb&($z?1>ZH^Qm-q(_9adLL#B=CC8g3UNX2E9;al`Dr3d|C~C|N!W zRgO9eB|}zM_K>N@cCR@yR{2K1Y({>TWd4fz><$-}hJqD3Ny8_|Nfp`71m~scoyn|z{o`ll&B#uj!?A-lI5uMK>m^nJ*kP+SUTh$t zIKk_WtADuA&mzM{o|~DNLDp$Gx>J+$vT|ndA}cqE)puDS$G&(foa3w8Xs4J3YgLdn zlh#G5xqEG7`;?4z2!OopYezf)cHs4>!t1#7pgUWJFvbAE=XeV1n zX)*pLs@u~lq~{6jUFW(b(p#q8hnYg;?0tdWNg>06WG^!5}WVV?H2(!~m zT^V)jTfMD{glY}UvKh5uIb3L0{O+;da^II?-dCWyWx-IKHp=sfTG&7Gzo&E420o-P zuh=}D15rcg%FW2Gb7((pR%emn?_%|Lt9Oo{bMm~{0sRN6^Gm}8j2;b=Qj|cOr?MKl z$eeD}wJnxYee-`zVIQTL?-ls5duHBX$5UEBHA_k{SYvscTkXa2CxO#E-s{Hnp<$Q- zjDiV^cFEaVax|cKuzHCS;9Ynj*>d2cour9W$y*p_sW4M^iA~YQ+qR)3;4kACAToJH z0{!;9 z+`#yd8P}@|-PoRbMVl9*C4n;gKC?ksf4w#;a8`$xt^pm6QnR2j*t{vGKXmSoRW6LD zT0zYe1?VRfwZPDMm$L5v;2d8wd4W?RMEEMSJuTvHwdK#4Qg0B z*OU--p6U?%^Ess~_s{2vr4n*4 zDq?S<15C5FVKUJ~t}(;@k>1J4P06+stX@?n__V52Z8eE%`Nn$Ryg#j7ArmEY>eR#> z2XB^j+S$vzaT-MtI)WuFtHixtiRxXIXSeYh0p?Vd0n0(7)^+NBbGk1bN3Bw)b0(jg z%S2i4(VOE-E%R4uKdQL0a9E4MECg8C9Uz2Bs)Fw*2(Q(5G+Uyu@0OUmJ-aB?#@lE- z+UU*~DTsBZ8HD!J1^U~*)2+1$VUkZ`lw)e*?1DfFz>LWxIwdnFH9ajcDLvH;ZJJ$b z7RQin551>@+MQu67!zj8PKpVb#b6T%WqaSWNTiYYdx)Eu|_h`GVT9iG=}?p zjTEC4wTl#9ME+a)u#U<9gL3M}`?rD^%kI@nDkG!8fUR}gO+j6F!_Hf5zKf{0&`EVZ zc5?IvM$8%(RwGl3-o2s>GWzRgQ*ZEo5@=fVnUg1-GnzMNb`J2OAbf4YG5K^U0y0^%0Or04sNWpAqtdU~a=sliGz}IV~?vuI2 z(Y^_sXU6Ac&5Cmml!wo($tPx*cdc*X z?4r^-?I&XjuR9KQ-_g`A4@^qgE9R4sOtl0PEGp9SLto&H@&+u9S?tY<3D1eEd!(+~ zTtt#F{#@ClaB-E`Ji55HGFV|5XRQd#j2$SnIoVLHlUX0jtBm(p`5~s7j3o2kU}AQj zT{(DmbHvWFcJW`kAZ6{Nl*-+_T#y;9%ZAT!Sc(Tx@OlYk$Pp+ep7~1~Hd$|`3KeUX z?Os1t41P9Ayl!MxiF_nvqL~Re!OPM@Du|h@3w6i5_KX7M*1JW0yQt~c7@Z<>&J!>* zLy(ou1hY&)4l{RjW;Ta#9K{sAY)8r94!j# zZDb9Lru^DUNv>Lq{5OSY@$rAZ6c#7{_X|l&O-&s*X!y|o)spN>FIH@!Lh}Kv)oLk6 z?JNKPwetS^j264Ed$k5H3-CgBf_ZhvypI03*`4o78v53HOyrO&gZ-RLii=}D_p+xs z^?dCCqB~QTe{B}BQTBad18;qP%-M`N^=S~`KA5s4U|m?x>bt%D#nEOBbI8eWgHXFJ z*f(d)npsksx{=P98oOwT(eZ&Dmc?Z?l_l29=>%m;KN&x@o)nDU#JofnZj8oKj!LkQ zddnB)r43(Pu=K_Q31hSTHT;8{lAc+;)P6)mKE@-7g_xJY>4$Yj-qh)HUay236Xmu- zs8Kl`pcNEvr@Pzubv8q}S!*~pJ3TRTq@t&zhD+)N`_1<=S|DjzR>T}pmy}O(%?Tv$)u@|! zdmO8kl>GqO?67UWhx@4Nnuo$14w)}*?7?SkURY?eoHa9ga!UUxxk>%q?$VwldR}7f zDw0nE0=z*tAB&jJm2{Sc8{sl8iaG5vt9dm^JCC5ZI2ht<Sr6$~C!d#0@7v}jTmX3rZrgVASw#?zc6NORdX%-0mf5|(uj+lh&M zThHAet>Dx3$h!@-+PwqSx6@1_=D0bLBL_}4Ds(s;X76D2BE&A2t(JEF?p!}M)f{GO z(bHc|F@F*Yii*c3)IQR|bfNi3hXsH>*z#!>^G%AJ0N7*8IL&>LeVp5waaNFE;%P!Q zA9&lN0{2yi+bWp#j@bs9GexYO4sh6umm4e1nHJ`dg_jX8l9)uJXU(FTy?D5n`)Y~uhHtsnqW0caWsW7X2VUEi%Mi>>K(jC zo87nliNL&2Ii>WbLgi+kqdo4T5X)hW6uqm`cWw+Tdd!Z3v=& zz7w-cD|41%=78D*FygYE<*dTJuAt2NpCO?`G$0f?zH(ua@mW#I_XeyWGlTZ5hv`7| z)$ZTLRE0ICAhSrfu;eGOx`+=TOHszUSMSC`xurxzX)#Co8cW$|QASF86l1ml<_ALN zI3eO)z>A#bUP3=fIKmRhhnQL!^qX zQx)@S(#}2++o`t(l$yZ5A2&HQCzIFf`cj7H8A(}*IVp2_@J)^!XGx>bPJYu1zq14^fK!1vTD0&hdNK*?A z`x&Le1{5<*ke8M-_I$;hO!M+ms~HY#SSgwObU1CLY|dVtuT?AU!wT($yO%$rHS=&o zZ|5>0QVW?_=jYyc>0JzSzJBs%X5z@$arJ*@Gx?0SIsVtQMlBRAB`?Xy+Bw~lTjqK%pN32K*wpk1yhk!wMA9^fQ7?=i ztGT^{zAMI*elL4EXBg#mHQDC}OfDnlIekiN zG&u4B)_#NRs(e2|wnO(5uvZGboZ}eVRLabOG`u#|V(diSC(8}I8)m~uQmbU`>V36T zFDtWJ$6)%+NsC^1)NPeapZGa?(q6zcxeV>rE2ah^^)@c%g$qZ-+5s^Y)IT8pmqdCQ z!*JHTT2U-ZXJ*dDoOtOY^Z%{f4qSnKLY#SZzdp0At=pB?>l61m4J!uoA-v1TycaXS zE^sf$WRmyyo-Fc{pUC*NTYQ(x{H)4Ag??QX(RN!8XAtO6XCfle?N6%kwSyOXhZ{}^roEaF}?kw`x8l?Zmwk~1cXTEX|YK>~E$&6!6 zHIs=uY>1q%n4Mk3({8?5B~fi2%|e7Ab1D&Cn|oahj*bzUX)Pyz_SaCHLf5@EwyzbHJL@=(6GHJikch5b zetWS;_pxtsSr#(mgg7l>LebhPCBWdZhsJIT!d8Qc!n_==%|IM>b67uR!0YYygS8vI z1kaa|l`@65MHaa}P7otMMQ0glP9E$127qAB&fJMhWc9^bl9!`;&B_XE3?Jdgy9ncp z`D7>z>Ye)OVf$Y6GDst0eU0OzG!}r)`yKlnl zoiNqTJ1Wl=&F}pqi+)p_`Ie2ZzrHTnH=#D0I*&5@;V_zPbOYsNkLwPlOqr#X_U&|o z?LY=Ur`BhR=B2$h_&T_Xyp78+|A+-@TH-gqck($8?Wae1`biiW+c?(C{c{NNjeHBH z->lSGfjV!!9jf*YKzg}2z~;> zkl`hHY`S&?eIm->(n%Zw!4^Y>-dNs%?n;llzORfr)#V?kIOc*#IvIB{;-UY^c zkXd5Y{`Q0dkqYtkDF!OUYEz$fnX;{65QE;nA2wr3CQh=p-)YvWV05jQ-PEYL z_@P=Hd4pg<2?xjlY=Df7J#y7yuRBMvavHZ+s4=Hzf2|OG|3%&P6EU3ubQH-?X)?3& zyqqbSnQ565`Mx1@N`~&F)SS6l6XxcoCTC@)RcV$J;1?vSVKZy0Ifr3Y9!;S6 zKF6Gf*l!Mzw=u%nM<#frbJIdl9@0&FJZVyx4?^^Enra5B%#t;7+RPV2^d}1f`Zkr%g|4iVx;&wc`Q zUcL7Rh4m&XlUO#CA12oO<*|8LZYpa3ffOle?Ln&j1+P+?vj{!t$5+N$G_02KM$8AS z9tT&Dxpwq66)Quzn3}f%AqJ2~N*6r4@3e!P&ouZzC98|M$HS)D@5XYS%-*JDqyMWyI^#R;*kr5Z^@5)2YLv1IOM4fZK)fV1=&j zQzDL=ON>**|F$aN(*UMx*C{RD1!Lo8N*kaWBO9C)Jc1}wP*D436YKrRxZitKcF0b| zt4Gnn^C~vSBEndS-I{FF0u*&q_ICFV>_6>b=!p5<+^F{Y&r;S9^*Dc!o6<#qUbkUNUQLS-8-uv$&Dp&Y^(Yb^ag*3 zs+IjS_-j=s6}au$8{-)vt*s`vEgKVN&VHtKDg_CwUuJSdqk-#G9w^L6cTpTTW~#B# znyIo3!qY<_ddYpjr^AAS7jTRFtrrC&0%~$tILD4k6*dskCEgrK$FS(Eg@iWD3Pv_& z?jk6@5o(iVn3U_TppE2Vu>!K?M`L4Z)dFxrOb1U7_AH5vtpa9L;zgKDq~}rylXM2o zsTP%I{hJHYmc75Yi8_wfSrca-_{41L-|a2cKVmtA{E3yf@6TrtfUjPLDFOWxzx!=| zH?86CK2PGRgNM#Mfiuv1<`N&GP$7G3c`}*HnyKQD#ohW_RCb>1?jAht?LPUBy3=Or zbnkCAC%Hk!PzqpDxRUT+8bL^E7%sD3n}9sEkR}jagP2TTk;~35o8jZ45t5%vY9dcR zX&XRmZ*CAh!GmNE)D;r;?%V8^_RSfe;*$W`7FOlX6rXtPbn`%d8{cw zudFnfiA{o?G8wh%G7GIp2&++`TBxRs!`SaW!}+`>xgC6crI2-(?wO3kn*cD(#s}4r z^~DX{Cf%G{EjnqML**hwz@md@F_442Cc-dR_N;D zm)ZLB9&xaw>vKqr208#PTSQ;%V{z0yO^gv@&^{4kmbU|+P^j$P_sY)mewkllnxHN; zm@@8ilRa{5AD$K7F!N7tq-y6(i8igYDY+~udQ$=HXc4ZL6twzwn@9-g+|>{%&<&`~ z(ucF3YJH)I2={MU7EgQ}kzV^|!$)-wmgdG8Z!}eA+9|oY6sjqO=6R$PBA9fv?4jw@ z%?Mxwp0L@?wXNfnyn($Vh9%1%sQf&}4kVtWfn*zkB;Zr9FK07%nF{7Z3)Jbg95mp0 z_J{H=X4{h-V{So|O5{&UE3mV49o9Nj0m)lZ_EP+-sUnfskEerIYy%ewcaXphW=>yz zzPq)dCHy?R8pA<)%bEICPc|LNL#_hWtfQ~hl1p!>txpJ+vHqN=z1VxNl6jS2l9JN=KHS5@3}|Ht&) zJ&{joEP9d}g}qW@A%)c@FcN~*8d!)!*(|ElI9<-t$fUGr_jp_e{M65D~hkh-iFS zZ~y}52`axsR2q+rvf`CdCu0iEDuz!W@Hc3o#Bg32dkQEyBO-q{jV;a5Y5x+S`poP? zPhb=CxSTihfm||kDq(r6ouFS1$25S%jkk;-UuNS#Uf*b4?L{lx6d4XRx5t6atXIo$ zwiCwZEz6dVX+n=|k_JegHxfauy|N(8w8X__z`AsU*jo7stDoeF1CapuY&e8dGbNhV(^SZ#8klXW z66C^mG~9!KqL5txsuv)hTW=|Eu>~$HCb)Y14IZP99zT4*KMq-6KY0A;!8wIrKYaX^ z{-8L(%=Zx?#@s2{oP#b&dvvS{r-2#JitQ5hxy-N4ws&!YRXmj^mc=e*V-2vg64wC9 zVDB};1(s32yW)7ie1xWDaAf97niKG)g_Mu(AZm$8ED?}9OqFw8oWfHw{#|N9+-Q5=l&b273rMODQlFP9Lw_B^{n;RS5o#WJ4 zw1XM>2ckdgSjlQ^f;KMF6bkVGNG-G2ZMR2$jOGPXNV9x{6%)KZTe|*anKJ(*h_b1Y`nrIC@+6GE9+SMBC}L1rWB zdmfRh$5~22K(sXK3y~Ddmk{u|7)i8c`aNfIF+yeo6*&nDsM%J->Td!hC+}B{Q|GYY zA$X}ksf!Z(BkHw?ROVvNV{uawRjXc+L`}+kbMnwDFJ*<# z1PuWTGZ7!!gb9d*2FmpNw$LRMg@u^|owimc5#S*LT1?(r8D5{P#Ck25Ye6L6N`;@6 z2P?m^!5{>%6K?GiAafo{rHWNT&PO6|3Ssh^>uVs=*eRF)5jgRZlBh%<#W`hZb#rCc z(YlB{-|U3@pgJI+qsu?fyW0e09H8T7CtVk9SFzdZ#-Os>7*r0Dc8&{H9LwntPZkUM z$PJj*@=JG2-+CAuakN~OEzZWL$^_bh(_;?@^^1e2o!_;akYxa`y0Z_nZLnPu%b5J& z)Qgf^MH8#FT{I;Y->H4H(h>5RYr4-3?kAz~j%t7OM+SD^bYW*ua{a@5A|`BrsTL}I zf9)S$9e^h^t;3fa3;1MMebq>wJ=5bpd_1R!J6qCShAjd{F^RWk-eYp!!eIu<|BBkO z^R4&SHaGq(U518j)tryyh2W(=LxkIlqhVGABI$m`ZpNtL>1ixt!)Jz>_3;D+pIwi; zlNNOA@r8poH&-NO`%oQV+vR^Nlj=a0Qf|7Lr%J+Nsz7G6hl%h?!sk8GA`I#$+MSd- zNn)v`c2UvAM6jCTF{J*|-~qprn~}RNiayBK-85r(WTp_Cw~`DolPQD2)kz--3n<3I z43Q*$>Fn)D5RoUrtJDu%$L9($%PA~mK%cTH4M8epjulpASfgnuD|6lJ9z1N~$c*+- z^hoH&m988_Bxve&x=Lh8z)-LE!|wh@{IXDI0yT?5DTEJ~)L4HVRd%_n z7oNh0Z;QMgmm@hs-klUR!osow5XmhMEr^yyW+FmyWa+t@<)Q-zuC#CE80LY)RtyPQ zHeN_ig|u3rNO5idrC`*|?+hu6j*&5`>@-I%Fys+NRb!b@)w4*V<I<*|jNtrt96T>L9?XnvN~EuFp);YO85t9m=n_TD`D; zIET73u2C55p)*+j!;|f`y<=E{7sM8j9BWxvylLr56b>%;CEvY5he@r;ZRU@oqgJgu z%^lTEq(W=Fcvt~4eVlS7bYr2do}*h zuf_wkP^uObfVBr55Nk`7r%FhjERAqWQaE@AA2xA6^o-o;7ZgW!eTyJgZhBUv_!CkGq7E@8KFe)ZC8wx(pjv+ia%VEwk`i1 z(xg`{goS@@+l7sJBe1sQ^dHU*(Apse4U{Ews?3Nxw}yp?W1rIp)^dJ@AV@L4Kd|@a zk_=}a$DJ9hMx2Be5hGr52@~a1_rc{EE{988Y8}rOr9W6b3PH?S zGb(;zNEQ_xayyp9Nl8d&+eoZx2(xHcrlsbc%5Z%*F3s|h#IVBwSy06>{D3T~#}jrA zRvtZg@L&a}5}phI5^%dqbuUrN^;iC(s6eSaOs*yV#11FrjwL_Lt#dCAuM6Ow+i$wA z?B}i{bGuDdHNDVR*1f$AcPA0nH4avRXic!@Qr2lf;{WvGWnD=#ZE;6@m7hMWILs;0 zBzR@Q`~=qk!=R=n7?|(2+9S37*faKY4;6_;zTY$K_2X`D%Xao2QoI6^r2D7;J?!#s z<~I3KMPwDoi69YQ?WxL}iyN1>>Iv~8XDGv^0#!;>0zs6n^ED6)QkDAMhDhGaDKk&d zF0x>BBo zgw{h}(0DF|hs|>RL?#{y0CJrNt^cZ}9CkYBKT+lLpq67Bvi8ZCv$?ajr3`-QZ%^G< z(Vk0nGNk#d%U4J4R!-sh;F}}orFoXbD5{!Xj60}#JI<{z7(6fZ{ITW8wyySsiR?;8 zG=KQ9!z?r!zE@Nm?PRBXxMcr4Vn$sx6Gz)MzKZn37bC=YU-}x@VP|j@h89t{NGfvJ z;Uh1Of$dJbG)bN6>O-S;Qlh3Yt#}yDqC5$cN(``-?&&$c3>JKZ8mQ3!0RVOa z&Ll(Yy!JzRBuLnES1JX$@JKj_in@@rh)C<_%HkFxT^-8pFE&KyUTNWQQr z%s^tkSIs>Hs;)#qA^y+;RukWPysJbrWCf@1Iuk z@Gyfeh4!3IcbY3T#>#xp8pXmp~-q0NIg$SteLmW1C4I`xX9sdsh{x-b=| zCY*>NU4Op6SEuEu$(8-b_50#k72gJfFg_8bN_lxL>yly^WtrlrF*v*jjW?RHlxRr0 zl;vu+`II8xp8mfM^@%i(6+q`^?zb5FN_kG&HVOQ8tYlXmN;nYKkIH{%Xau z8I3WKUz6dn0L&#%P=m>#%GG4DrxoZfeNjVGuY}B6VGO`Z-5i}jl1*$2Yg%W;d1JW} z;PX&wyo#p?<3YO-E^G$oU$id0nGB6&!@pP9lHmY#E&s)+{<2J}quX z@iL8}RUh8es_HdeX7_{lEx2lf;d^ADcsH59V%1sS+U(WsHO26fb?y${BUPDX?N$OM zL9w$oeWXq2U#P9j`y-H#{2iuZ(|q25w-xjix*X-#*g;r2zL{d%Hzmr+aX@J_tLeMG z-@VNQNO-{4^}4;)_d&9jlagfsa;jgrLwcWj5pck;@(vpl^ldo!{ry&Rql1Bn;$vjN zyOz}gDT#U0(MmPq5DopA`I>X3gs`M=SISzMzbWmzHe#xcPPnW#P)ISa)0;R0CmPTS zQE3#eCk8fiJLe_MtlhAg`baia`ogmhX^(PMxlj~ka%WDsk(1G}H{ilmV&lBQ_-cf^ zgs~bLnFJGQXhXHrE0xt?W_?Z#n8FpDX@FcjJxH$53MafVd~+Sk#{o|J=F}GDvWtz$ z_%Juq%*mUvUfXnJ->AY_jU;OUStAZtCuHO_k-;+bRe+8-|IGO79?7mPPN`=0PzlP; zsJ4!S%*est64h;49ZX7(ZQb3g?LHJhr3M z>ff89k}E+QQ%ca?G@7uTW;LLOhq{C~%h*&)l%8wsz9!x#?j?#kZb{tRzltMlW)6J7 z_d`^4yWo(>_LF9U0$I+aPP+IRPfrbT3hPv}MG6VInyJId@kcQZ+ybnpVE6RlcFSau zZ;I?%@csrXxhDSXx?fg>6-*-UoMKzVEp;HBl+1Nb&!W~g*0L++RT4c0aHsqV*m#GW zd>b0CToF+@Yli0d@(o@_j_|Vry-McI24AqjnU73Ti%7p<*|~1N+2REn#~oY~K0Oq? zH+*%n&w~#1MvDAMEuTaE>t_0J`qSv*Snz)=$XmRhSm;Rh8n7Yu1@{EzO#uo#3PZA= zO2Nb6DZ5}dSh!I2i)p3Y-pyj0`BL;jcsb}nsPoZvszP6ZgO6U}QPL&s$Y*k_S>$_^ ziB`SUBFj$qD|lIpSd>CV=E%(37P!gEByw1ptx+9}5LIgrn zi?2rhro5DY?j(c*t$8+t1y7vZ%#%!(jKSH=Wgpf6U+4?Ati)e9pSfqT-fb9ITgiKd zQj94}8+7-^wYrr@9A!a5t=(ZW)hO1&5v(CY)6JSAkc;>m&o5cl8Hr8wbTC16@7d;k^MNN3nqS&Ut;fTc^lBLQ zk=u8|Bc?iY9aN+Iwp@|=7QG?cxjd;{1oj@E7}3`CrNc?Ig!M`W0_m{00mG|Ro4^9u zSJScb>jV+w2o#np zETu3ktDchFq;l<$5E9wLKh)2#W$1_6?d=cuL`>Z5QnVB&{&eGDsstb&U)Y1!#$!Nq z!~hnJ3`uEVM<^zv>Sx0USz|dIs;TzTTP9VSN%475b4(1GKlvc%0mN(04#0;+cd~ZT z)}FT%I$3%MmEqK2Rnb<0M7=D)?|r zwfV7xX7LcrQVsU{CsTSFHA#9n<4z5H+`H#=JSLRZxz}Zd`iWGFNSUyxN9K7~;cbL!_A4YRFEJA zV}&d8q32x&Lk+YQ$znqlf9ndfKmIvwy0!hjQWjT3h>BYlgxYI!i^*m8t8YobQoTVp zU7G!(ZJO?($l*;m`P=5C_S%BGR+$gL|c0$C2>h+Tpmzr z*q9B&yCrjIrom2CF1`Q??irh%&04J$_X!hWY*12T)vzwDLH>34CJp7DxvkmrG{G}X zJw}+T@df}$cm*OweM)vq9?iLxu}zVYy_p7@b<}PWMhl}BU?cLK3@o{(XKb74$q_-j zBc>?dN3MVJJ(zk8C6_CB8&OEMR53*4!iKQn7Tj(it2e4EGtLGt8L=F%=b(4|gyXB}EJvz{L7g4$CXEcx@xK27$Jq zuwX|W#@u&9=F%_&7|)u9NgSVZmaTCL@4QcZ_s^TU<9WFjKW6(UMz|V{(XZ6_jN>M@ zzxJnN9Kd#q%w|osOm6dQ<(z!{vb(P*EQ_wCVy-~CQR;1yiY85L-<5ZEo ze@q$1R;4gI`#;*S8qXQU1w*neTXfxTMow?kK|+oCjRL4;Ey4>Ob|%6 z3A=XvEP`P1{^)X*Tw;E_OUj+ehjX+WxeOB$BDke4^|Wvr*v>74ApOmTh^z%3i;7m6 zV6QU&kxUvyS50kbNenBTp7dI*YmfM0nGPM~%zTrILZrGYc2;JccDdBzsdT3Y2f_}P zEv-y1>{7#fs%)(KQ;M6N=v%Pja3xkFp~Ih<0No2gHJDZVVALuEms z(By>9C0G&;YyRr-rDG&NeKl!)JdY1s;>O^e)i8PO7uYJ#>{rLb{xoW41X_beskGmm z#uV$Um{@0*JNUqv93IdNZuVMVX98Wn*;*-0w1X;{Y zH6xGIO1@l)Yiu}Pqr;=icVAP_?cuL)E6>`H(>k!kCKqH?;BjBsK+=j{k4|yYs$@!)g40q7>6a|Qq_K*Z)CR%CGNtLAlhW+5tG$m>4@1>S z2h*H&jMt3jV!poMmf^ra;PIcdN0}2!LJ>u#adE|Qcy+Q^5dog0p2=-UiwTUhxD**X z+duJJw2YSbtIIbZCMNEM1r4!M$Kx;!Y6Cu;s}2IF$`D_;p&d5&)eY{w#%Pn@5r^w% z$BQrSg9wj%2gIJZY(A)9x6HGvxnPP*vgfvfcT*F+RBBMx{Qa%U`Dh7>Iz!IOfOl?b z4Vy~^*3osIo8D5|H1JRqZTc%vO~KC1`BW2f`j9_my70qf|3AkVXG2~^)5AMHi~T$y zadY{5qJZ-#z(Dh+?BKtP9$t{T$O|lj-u%(^6z?Ch7o)0)kVcdM&s-n&M>tm`6?LX2 z_htZ62wBs0bblq&OH|{wTj-naKKPwyEOan1k>54hExja9$gX=d#Q2FlqqYb-+W1NwADdrAAu zw_6rH3#q~vOZTaxO~aR^*+2QHuu!R%GWL{`=@V-6i~v^9zfbi9E-i~<`mpx6)auZ( zrr-2tQ^V=~YZ=a)yKf(qGugR*c5}b9Tv>}iG+b53D@oyZR7FUDl1;NKn7Szuzs^kf zfOx8%=@`#290eTe*;ue;Tu|UyVh?q#IF^@Rt_lTefNDw23E@Zfm2b z89YxLkkdQZ*xZSM*a3d)?+8-EODg316Ob11gcGIRl}!A&)$m zs6D(O$TUkLAy|h{6sbYJV&~Uj_-s_KGP42&aMs-!4zVfM_na!A zG~qEt^s&%ei+OuJZu-qYhL+{&heV@HIJo*1ivDdpT9zvf(pF(+4ua%$eCe0qye+dLwNlG3N(H^#1=;IOU_T6Gylqi1HvJ|M@FN=`xHOA2mV1D0xxfDJ#D zR?(kYoi%phT;3CqEXB#j-Y}wx$E;ckC9yNg%oWb$Nq@wShh5F&i)Jt%+foPFA<+!$ zE$5M6wUKep(1boLR0LWDXxd7wuiX@15!+%$G+QdLo|RaNUexk5j|Vj6WolD3n8*$; znXgZd28Rzi|9JEpUg%nefBW&x;K4na!hSp%+`Dh{dWNS^0|zP;!{i3 zd`~)F-K)DdbF0j52B-~ht#$i=sX?VyvUy``V#}OYkRuU;P^FjCo6mC00FRk75t@kk zM1*KB>Hoj08_wKAB(PW|vyqRwwLwN!=pX`2H%DCjngPxygYhI@hM8Vo49twzok%bD zxh2U0obG6$gEu=i2-o~{1gbiODtt8n5jQ=Qg;;3hbzuB048`~iZlQVJ+g*Muozp;( z*O;oz_Q2kQI#G+gKHB{Sy2 zlFz@na1%rV0pGS%TB;}R4j985$EKLi9k?$Q>rVOla}lXzOs0_9FJVkOnA8V}nRVqg z`uMI^Hx$UZ7Bfs&EaZt2!F2Q!Q%E#D<%L-`qGV=;S{XM)$>5J?yChyZ6pd+Tia}Eg zQL-!J0^6hf%*3uJVV!;_T%i~a@b+cmvy8)Y-mY{=eSSdRaF-0^L+Q=&(y*lPwbe2z z-UArw%6_)nA;HjXuxw}7$d#vLEQ;N2^-H?8>6uCn)g)-4K^Ul3=duykg(PsdR!A3a;6^X6a?aA}L%YvbnyywYzVZu!(J)sxT}*udE1%oT^sFHY>tVECEK8 zN!P092_Z7-Mp>x9Wi3Q4g$wrf)@!{27lhU;O^A?6S?v1a-qS~9!BMAHxq3HiO;zDq z(Q2;chye^eLKb=ynNbd_cE%LAzTuPY;(m*@xwT!2%Pai+G+p5V2oBSvnen!5nHjGM z-iF6UF-aCEDYG@!Y*oOt)fPDmjF=~jmxXJAlCv(=Tg$FNA?PS6M%)=dXH_g}<)6|e z_}=%APY}~Lw{f%x8iR`9)^^!2BLoow02jZSpV6lJNwL6kCd1Vdv`Gw%o;x;oGa?Rf z^{DJ`F+}W|S&J5FqQ`}Cd*p{oG@T54!(1tr;A48iM%e2Y7I&ge* zL!@vxExrHQxh65vW;Idc@)EnDEy!pkNx?~0ezRPs5{!UqQ^2ca7XuYV$v%fXUa>8V zZG5ebGt)BEWw`}U-14@!hjBJHlKHZ0$fx-r69vSY&Ed%;i~O2lbj!@#ProLFmWR7} zZvYRlkRU6F=qgcI)Ti~qIZxO-RQ{~fJRXLHbb>3#*PJfO%Mj=Xd7sDnuS)q*Ev z?`%&_M}y82Qnhyuc*h1%vsm4fmVIGw_n@=Rs-#5fY@pg$tsgyj_z#^2Uw0mTLqzuK zqu>4Z0fF2!?CisY$ROWp_o(xLc8^xS{_3|69@1`$FqTfrUo*zzXM1#pdvqUP1uhaH zGyjBwV*DTUpJkzf@9A-Idc*bY9FV|el^ulXL4N$F>&yQj)8AwnF6`$0^60v0s&KP~ zZPH;jpZ{?A!NNK?7x|)dps*~2?Dy9zriA^@^f6q>$Cj9;X{W1=*0j@&{41;V@9 zzdU|;|2rmn=Gt;?)ZW-KCvk+YaNT{hP}QyfGd(*doNJ{~vVq#zD5`;DWUN@#Q7TZk}WyY24_S{{ezU6bFp1`u8a^E7-+Y ze@3l6&7-0S zxmn+hKi}(WgcISAD~Lh|v7NO?pWCL=AMnn?+0$W6x2cb0*DG|12;wvLlRMa zcCY^q7gCrlELgyDy|LRv6Xae$>S3%2X}{SJ{5oElWPXK20XUwW@o)w~wfiq@k2QE} zeXInC9l>LX_wMs$z}&?t#{-nTyF%&8O`>psbxT;5lP4GPV#Kw-o`7-fWfwVOj<|pQ z+FrVlUDz1uv$3A6vZaWiqee#qNyO)y(b$qj-?E3?XA%#HLm(@C1DYdk^{^H>yM0%M z4G`~M;W+N#jGYS9^FQ&9-M&|V)c@QN2t4VkhZqKs6O3YUAW<N zpIHc~(ol{U0!0ZJ3(SgmrFL%G1y=-(Lb+kogM+$;iQpYXWyx zq`4rq6r+Gma2G>r$I#C$i)JkF4!5*Eef>V3c*hg)4wnzqW!Ikp;70T&%gh)ci-wNA ze71&!o$wYIG~?`arKjiF0#!fn{`t>q@7J~t^zY&Oz5QL>5;ryve)+FQx2-`3z_;M8 zL2B516rjn3bk5&0H;(Sg+oj-3e))6c=nbZRL+3J$zZ&t;QpQ2_QnM|Kqb~ZTg3on~ z2iHM9(<98(d~T>FT~1BkytKFR=K_I0MmBzvoNk&|?2`XAzVxf2m6!s) z&n2wy+&#H7vqI~6b}#jyjV^*ZDm4IX+VslGwzL#XLPp@w;a)95LKNTDzNLlXdE@vBGjt-fC^67b=F1RQR3w=l5nKEs7&d+mN^yF&vYg;8Qam#fA3 zeYP^>4B&)}tqP>Bc-TH{Oly$I4Tp8V>eO8xX?bJdb%)cV;Kdo%1;ebQcRt~24mzZ) z^#AY(=OeV3=|2onbvj_r{oPK7zlhVX_qzLB#ojInZHUe{bw|~CG9-U;Z9OLG?sK zr62ZI1A?oB(mTL{btR< zjurxE_j5co>}U3hd38`p^tF?b)!FS6&J#XGq?!1HR?Ko^1Nl-vdhcY&w^*lX-O#64TA3)BDt+Rim26&|-?aS~b#X@{$Iq`J!NiCzBLUfbE&wKR)I z)%xCxdJ{J-yN#%7IcV^wRBxGG_CPsTo$A{>%=j*I{-(M@~afJB;g-j+IHpJNJd>{3Ko`O zPD$5j6!F8IEd{xo>36nfyDtT9(?y>lXGn0V}(;xVW&X4N3y`hBQ34<7!|DIof_fWuRlG;E%l6|uM7`7!>c8D*=bHKcXREQv3$Lssovh)>wRLSs_t%m zqQTzo58ZvJOSwwh$-H5`J>vOqS>nyby-W)KxbvbO+#8Y7Ch3tE1LQ@)Fvv>r5O(cqr;#R>``uJ^2ex+8wrZ)5`zSRYVQWNMj-%arVL1&qx#w- ze7S+Xg2i2(kF5w`7lA+PpW?n~0*SOE160oIrhJB#h1wGKAr8ZiSJ*fmkB4m+Ei{(s zr!iG(sXve?n=uBkp=wgC_s@VML9{ezkQE)=zA(bWKn` z4hIiT85D7LsW$mY*V`1_sha(-|BQF(arkQ;dz=4KZ5aP5WFztM9TJD|7GLtq|7g`= zmS#fokf@@ooL@9&Z)cT3P35#MDAj;UVVQ9mVWyN$xv})&n~)ml|Qe!*Q5cv7rH{W-Nf3W z$;z7D>wewa=5~=KVddfdst5Wom3t%AnUHEX6D6PE9jru%JgUQfy@;{T{{QZPzS4+= zkamK9p^0jIBTDa8c(rTN@7_JTq0bpUJr5q??{fD(pN=%|HAt^ubZCIUUuZ*ARQ?No zxq)pW&gG19b}vcxxe4^{r9JE?{~%Eo=!V2BRG@~k%gV$C*msxRbRA4P%WjcO2sBl8 zL+znhFH00b1JRgPecEd1jy9iVni#4lfm-cK`BKNi#bQ%kd)R7t@5c2J+0Da@$-I0A z$|c;sSX;C}cIM1y>sO2haa`<+9hqV2$1pOPxp#RRc2jfv9-%h))=k z;~jq!S+nuB!kr8(KyT=`z<|HZTk$)0Ny*k6P*9;N0iTF@aix*TW199|acuV(st;a6 zz7{{AYB)A%P%J8Gh{jemoM21f$ZWyFOom`Q%Z4>T9<+oN!peO!K!`SS-9^`6?XIlV zYm}m}0@(G*C1Bc@sbX}tWks>zv>v{)Pqdg|Uoab2P0M$REKnc~2j=H`jy2M;2VRG2EMkcY3O>H$XPvjw{U7xacB8NQQ~ z(|&JbPv2$iuDB!*H#9$ZH7vv(9+q0elJq40sr7IMKb_#a3DFJY0GL>M{1weoo?*eD zZl0@$+p(AHb=N@QP^-IOb^%ZbRt39T;wAz1GZgJ??KuYom0zZMZ@=49)|qbkcYTC5 z87@!O6>uF|ME4YY@D=gSJO}WJTFYrQq6q|Efm~^Cvl4IF%><=tD47tr>e_j``(_Vt zw%TP1yK2C{?rTO{%k`F2$O(zrrt4&Yz?%!ksrwx1z(_AP1n#)sbh!|c+7N$PqbOh{ zT=MK`Y-8b3t~sU!@F%cIsHBXcaDgfj8ErB*4kR9^4lvVoD0_g``j-w*3cm11I%9y9 zjfV8?AM{q%4|*6!B{^_{DFH+M=cm2Zs*7?Fj^U#I18={HV|L2t#gfHJ42<=TcZuMk z(pc1LIJf_V>FVx8z8=_|S7+KOexxV`xtKA^1xFl2yLJ&x1iZ)Ny5?TQilv)O-UW#b zOr(e7(78d;h<^vRQI!y&leRgPwns1|;vGkR!@^>~*|p#zJuE7@^5SNUL4_7h?0$8R z>JAJ`guovvv-_~#zZ29Whq|2{Nk=aI=tHgH%o ztg^>rJYC*|0Yz`FJ)!lH6@P@F5YJfg$j{mVuf}Xvo@8)WOkSacGWIN?Jy*|gbF-&p zl9&U15FdxfM3rI$g1ZCV@)F+0T4(KWN&h|K@54WQ-2V9Ns7`-WPY;f9A-_JB>z7>j z+fcA>lC$CY*m8s8MxN?(8X!1axJJWM_k&2T3(~b9OgrKgR=d|fljvXHaVfMT2ixJ5 zdlzK~^_Rv)xyoANzpya;mX8mc&RQI;N+#h8d9Z?=D+CnR(HIiStkuyqQgc5ML9`UvBP3q3T)A3DS}lYtSg zd62=X?Y!V*n*oW1b#iB}1#&}y(PU@1X3cot)zU6VdZurZ3mN0P`nM+e!Xb;bF*1?e z_-Sq0H!+c7a;NOFCHeMt>_ZR(<432Uk7FbSlnMKCW8E`{QZCIq7ld8X?7evQ4Du;L zhk5JdCJ6rxR*ZF)LFk(rBmo*2uvIx%$vS;F)J*yqcFtt|W*dI(q|P1wThGew{M&zO zN^kvlpBY5r0tq+86a{vPb3DA5-?;hGA^aWp{%S2aAU1-A1?}*3xVgB>n@Wmn zXS48PoGvelo?$e=F!V-9F}E`fDZURkuw!L;7?RxXqMBkL_rGWra>0^%RW@E9EO(KD zA1wqIlQ$S#CF|q2#uz7qE%+@Qja&7_9QYpGyib*+&+Nb@ zxJ}qV6sMLdLt^fW-|A2H<%x8!#+)eL1i~uxV2qi?Xbhz$f&3>72(FWnoM2LgiVc4G zf2wDd_Su}2vMz;jx1|kq0oVCVYauH12IxxX$LD0a^r+xrRIr#woozmU~QHG%g0K@ z+KJ4V00rs}r}H$JITd8-!ZXgMI=0LR8>c+Q-fE`hrdgx0R|+`91N3I}Kxd9viDCd{ z5uX$Qb>B`n89S65N(Tomm^a?~#>$J{lNCN0EG~VYxeb_uQ~j(ZVd#K>56mmfiRh6| z0V)8m1;{&T)Te5L`}xUK(HAs9edwf<@i8H&46#&P1^iX44BbH^HIso2Ry+9^vq|KB zCS#x_e%9`b9r0{_)QJH~JLYukQ(FsLn(Ry506raAkyyf$s}tN=b?Ky<+lM6b#S#Q< zHy!?E^pTQDRF88Pw497{+pH)9NKmhkLt1yFdPYo13y#o=UmwQk-$u*VOU zPhOusUe15sHxEAdE=6^&FoH_NKD=y=NeB_6309GeCeK&MMAj~p9nyVVO`t)6sSgA? z>L4||5nMF z`*?Hv84(upzuF9I5ov{c2WwkfYbjE%Wjk_jQaRTFBBs=55wV}k3y>%h_+v+8aX~9w z;?~*gjjrB}Ys}bZG$z-5K_7qL{PHitkHB40;DCe-CkdseFi&POZH0m!2@TnX!P)BS zxbJlC@ZxhJGXVMFh};M%V=Z7|VTVIHxko3yAe|zzh+dCl5W(HhtvRf~?F0;F8o%*^ z@!ZK+m!pqJBV{*Kie$;W=Hxo!nL@HVpmRZ$K?zQRpfh&C?w`FcFW5mNX3R^nkidan zo2ztLi8>D*0P78oTjH>Jv4z6LtyPXAv8hHtrthEbbeNZxbCqKe0X3hEhHxoO;F?i3 z{1gTpygJ=Q+XISd&Q2cPhQczV8-5IvMYcZ8Bn5^%^q!#S*_4p;L;HyXfe!s++l#W zDV4lx(#F+h#;@%Ed@|+UTfc-$X$TcmbP|14ZZZQ2lC4 z?+2NWG-l@rD&TVC3p;m^qNgibbAd(b-o>x+0&(5&o@Zx1ZHRiQ{R)@UKU9CpT6)TUQBKjCjMzFIQXSGr}oh)y#q`nVWg6=Um1s(2~J$ z<<;5E3ZlINnc)q#a8rC^Je}QNV_O)*fUaGMh>S~SSFXk8c)@7q?H?t9@b=a>Q=7Qj z7C#q_633!1OwGWCaKs#zOcfo~YYCG}?6KH3Pvdd>63DS34tXMA|?U)05@fqk@hrtpGyN7h|bkeLCX~Car z7$i7`q;u9^N{eA+HtIxo6XxMB_`uc)H2r)77|N}rLJloT0>h@>thwQaTl$esVhTB`FHZIngV<8w) z!;lFeRhnyE`muAcwXqN9D~s0lv;9;&cRAtx_xaU$!!%aNuzP3yi+@aIo4wuo;OfSc zxu-&@of-*sAg7U}MP##^RtP~SAu-(6mVVT_t%-6I@ z(9pONap=luwP6 zaabBU9e?_kQuS_^8rr0grFm`)X(y=V*!7g71VTtHSQ}ztA~G(7el1%x=}T#g2_?Xl zV)5{4>`OAyfWbMR*wAt=^hulnPs&8uy2^5QpN8|FD)$rw)1~Pw;wBEK>*GL#2NFq| z9lB_=iG2lzXnGiFH&wQcnl2)3wn+^rcDS)C?XGu^x4S#P{GVaNAbBLlDBjVQo7=Ul z6S7aFoS`D=KsX1WLe9^(MKqMZaQu7uw;d0M1{6~<&uD@7)57#%v$3?Mq;Nmv^Ellh z&npfsamF1(q-|^&y{jV_r|D z(1FZa=Je$|mA&h*>;G&b6}rYJM;Xq>6H3xD?9C1JGvPK1cyfRNUJN(*Q;)L-v0wkw zbV9iAxodJiF1f+1y3}a)1!!pf!E5On5u*5F#VuQmJZev1C49YXtROlCFOV34G~gG^ znVQ5CPFbd7DclZCfv!-5P^X(rkes%VeZNtAu{kC!m}j+cy(t0B{gr!V-0fP*)KQOL z5rW8DCkhYe2|w4EB1jocp{ExB$|mFCJqx4*FRn`xMxjkxM#^0%z9!Z+tK$mkZX35d zDMv-Kq4BI+-EmRIYIjr~W2(@qzg(b@8jNyB2I zo7}|`u4#K6zbt)_4V~p1e%)^dZ+F^88s~pV<2|>6A##C#O>3x65MA+LM0pX4*gQc| z>NmLMm zv`JsQ;O@B+?0;f$d<~h_g}c^y;iU7PJMr}413SSGBA2{|q@4BBM-EbrlWTm|QjMdF zce*fFNXBEkVgu1w!oA3YkYeOqL)6Qtjw98KFc0!!O;LGRo3r|CR3j3zt>=>5t_dKs&^D86@`Ua=tPmv z6(e&;iUPug-6n?S#78kLX#5RJl2Euim`8cY8N&0yV~orr#{N_Kzto3P#vhqyCWAG` zdECKvUTo`s-TmF;4W8fW@*EFZX=(fZopf^G)Yt!RW8@DL{>;wxbk!NeT!Hm801poc z7n0ys3&9t{{p#E?ChC$V!c}f4Jdwrn{pLPxWFzLq@LC&UXD`JzNSO;K??@K_IB^ld zNDA?Mea~D3(PIDde~0Bl+EJ9FDXL7I9NIrJe9BwJ9n9o_kvs{N;?6!u+Qo&+b2QfL z9?5LZKAcIEKHdAFx0WoTQ3yp#UgjbBxtbXIBcE-2NVEV`q36*9$_qykW#o!U0`MAq z)70HMmoWN_5h;x*kTfM2`gg5Wx6M3&_%lsvv?`onpyHmNQQ7*=hNjN*wMkHJR9`>m z-XJ$B;GpL%T1V-%FfDGqnAc1g9ib~cH|MBp(^A8giA{~sf+lL8vve;|@91^7X)HJ0(6C|m z;ormNk}*mD_kF$LA1*Fp#i(r<(&fl>uMbb=a|X+h^%6>d1$N%b{_CW>GK;9QbKt|! zZ?dQaRCW&qiizJ@PI*pNtF7_)Eh!vd--xuE`zxCJGxHAC&4wslhu6+@6P!(XQJ$a* z+MSR`V`U~2ON0*0 z+I8OD$LzVM|IW+Dvr(j!sSbG2?QG0asC=&!5;EI*hAe4VVP>5EQLxBZ@FnFHy~c4(MWra58e&YiV}GgVzTY2 zK1z6m_`s)YFSZUEgF1bz#iE*MPIItP_=TYZGAuv157*VSQ3(YROad*xUp-Ug>?OO& z={$J&?b#WAtVNk{W_d^&CvPK%Dyl4EP>cK=ThLZ&2uYB27Yf{J z>&O(ZLPA>KfiK4OqgDe@5t=$RO-oS7mITM~zPV=cRP+g(qWPy7r zNnqhcFR^H~s7c^AU7pC|RC6cFQ-y+dyM0nqOb?HoABB1zOgb$sv>>k-u zQeX*J&a@IK^K6jR*#mi+*Mtf#sf1`3356XMolU6M^78y9Tr}LXxfrDVukJ`yFuvo~ zEMp@>{huvZ*W>T%JHtCk(BSR{S;by>=j0A%DJQ&Bff37pzoD5IQRt3~J6YH%tl0Qv zctBdIiV0*HBJtc7a+1iJk??4Xk*MlC+1)*O+S`5dAHfgYujEdlQ_X($X+1R z$g+|?n(fGa?$3a8&gat*?egiw6tUe)n1Tk9)Ph7@{bD^lrMTdfic%Q`pUn z^LVkcez-De10#DQ_fQ!OG2P!%YuwaKedJ%frFT<1zxVGfSHvxyb7k4rH27ODc075o zd1pZuOlkiN zesOm6l2@}03MIfxIom3jLRS&_MJlgwisUv#5-b=xaaEkAB5|cOBGyG@4L*SU_PQc; zY?^cQx42~nc3?QuHHon448rpey=#=Cfr5)8v?#yG?mVG@?9S=n6kvfq8#ZT_m2mULrHw|#Se z^Ur@Ko+|(O{0Fo?IPF=NdcS)>9#b*`cK4sIt*>vceXLJ^s-LYLbbna;6ERAg+f{FO z|Cv%gf9%{?E`yJq{>RR%DxskGS0P;$f&a#t_0K#CB+w7uZJe|qt%O%C0>V-CtTo4y zKv|0V2*|n3Q-dTG>}27ec?Ut3oHOjubrW-x(XUxGg#XR9;BH>vN@bcx?PTgi{LP#o zloUXz8%Xv(YzUk#e*uAJu@XC-$wKId)GjOVIMLQsot_GUXTD~lRRw8ED=DhAAYF7f zOhyujsf9PqKap8ts*j*cQ!kbII@{Ag_2$-A!5SULF=^tiM^xNe4D4~ zgn$sGDRz_3FAiK74*YYM^}i`+Ah&n?`uZm^=K0x@6COCWf)w}9+KdfY0vKiDz{6j( z|Md;Xy!CzNnt)UeVsE}pLjJG&wjSmd_bF$?LL_6;lj^#u{N`ql(U(^$TmF?nQ2 ziyqa=m9SL*vA1!+9`oZMPkVNc7PP})g=6@qn@ThU^o%q4vMwBjn@Qe`2H5QG7`1Sh zY@;w)9B%fsg?%M51z}=oDEl!Rjq}=Pn$E-Sx3q3^V4E(ghz-ZI6aEXIam7h}_(nx) z^y}FiYef^>l(34LK_rI%#F>;Et;_qx-4aen*X6m7871-^w4^xyq`C0ew&FB zoW1&xTebMO2$Vvt-PGsXDBNEbr-yqv*%)+Tu>kVN-|$|@qsI>)@Q+`iuOB>q^x&Mr zuOB}CN`Fw?06XVkkOg~WZwxuNN-$gBB5)&|m|F{H^IC6yoBJ4(3q|C0iS21wj|cID zQ^RzEM!4(Z>7ame=Fm@O&x$yvRLWoQZGhFU8noz!Ee`dH=SlbbV$l-8eV4;?kvtvN zr<)mq_-sSA1c0_<;nhH0I3gZUhSdi-u+aPe11OO3Axsh7*%*QZmGYhzK_f z>Q$@0JQU={EbkEB#p=G?T<;Q^67;B{TB3*3k3Km22-%XZDkYuLbLS#h_BK{niHoh5 z8a<2{?&VMN-6wz8;APahz3a6Yr7ePH?tR9I5wtHqiwOWi%h1f}t zXYHSFZt!Hxaq3nw#*lAk^=85g0?OTC){(m*g=A*vTR169yLoE11-}AeY`epLOUq+# zKtu&w(yrUv#*%JM{#-sWRl^I5KrwjLUMu`^{mFJWw*$SW6idcDS%RxH2$klsVTnW9 zQ`sjE1Ud@EAjx>l3);#V%49Zc8;nz{_Ub&GP4Sx|mBBGN zA*KPQ=Sn)n)UVvA(<>r8*arwqVp$czyQxQmHlO}!?vSaEIa!#7+Xet|XJ;}W?9@S2 ztUMx5LfR~AsxeqKp3$?fZ<%luOwx2LM$L;#)trB!KZsC-=vr8odJ@+#5j8OCHgAo9B*M^OFO`g zb)QTSNjQ6rEQNq6%0l0GIc6~98A7dLBA(o4a8kg7g6|buY&OxtSZ6(Ca_uFhns|;2 z*;;gieGhV#C&v|zH?gefq{OnYEOM2y`>XqveVS?S7)8dkW-zudCu^~F=mmSc0>h8O z=#3OdSf7e+T3&X#NOO5m(Mt&`;zQhuye7&H6UduJJaix-A#)rqfc2}VdaNZkLGRth z(0oObf}IYD9-FCDS1hav=I+a?M5BJi2svO~@9lD27rNQwloR{!;(V$!O_j^6GrDG`2tWpCSLb zpE65u3^^X%T$at$rU!S;W5%TV+(5QYasDWS!&3>7KS0@uUWxXzBXWvET&~w}H`4o{ zn98}J&Qak^ht-~e(KfrA%)-j>`h?`X=A&#e@5sPbCX~87SosYn8R5I|gPf_U$jz4s z#%KY6G2q3$!W5VOy6fi3uH8Fy2(ebv>40>!0FO(8eM-E~LACp2lLz)TUlJRNR9-!8 z(obWMBA2mTe!s-vyNk_gQ(m^paf}XLc`~>yr$ZnIEem%f-CO*_S`Aqagv--B*7l@S zeb`7fV;;IHho!Z>J1sCJC!GveO0Z0JgU>YsH03$oWHcX1Hp0{brmS(aZdFLqm=&C{ z6}YdhIO2pWw6%d{9NpzsI{dJ&v#KLF3hPs9|_XEB81mgekhZgz~Cf zRps%d{|;4`mN{wNCq3?oy^2bFau4v6;eT?Y&iSl`jM-p2Qmz<>;MoCOu1R(L+aKla$4g^B3$xcKc{)L>Wxq-AbBa+M21;ci9bu=pCG zyp9Ds5FQAKo8zwhzRBjNGX`t32s~c6*fMau9Sw>}`4A((iMS=GVv9s(fmcaYIGpEY z0?#n4jW-(}A1Q;Pb@Ftk98AtsUr=XSBnu9U>2(ht3dFkyN>d++?S1_;%%3o?&K||# z^RzJYUt(DZQaq$&%X9w_bfqcF58rQ5ynEtuI6w$1h6AEd;2+H+iC>V9Q+zLU)C7@m ze;xbUDTpNNQk=ur7?9YT2VGpgdc7ZZ_cyAk-^byXDe~x5hfB@hM>K!h`JD^G?YD_8 zadj3;(W*mmb7aZN`OqR013G}_>D}};a3}#{;LM}(A#Z1f4&P5nD>(7@&jlpm^=VRZ z3_{WZ%N?TyILQMzpmg%5B0Yk!CxAYpvGn)Y645~0H8H@FR#O}pkYFz)_zeQ*S(+Ly z8;V6ax+hf;m!*i7P;!QlCgjss)NmkA6BS}`^SB5HUe32@$OsYo&=lgHncYHiz*2ap zHLcKrsV@dV;{@fUPd+JZ^X2ep=GyTb?jzJ*1FnWh-k$vg#rxffJ>1&N1jpo=Q49Lp z)XFbEIomqQZ|eGWY$3bvu4y?;r)gvvv~cMNYd*qbPBNv8dW&3xzbwKd)sEoYnqQm2Pa5Si1awHvgjos>S$ zt%j|s;mB@n7~az_^d_zTBXfUeT%$DGLvMzm9~6W- zKEA$7rfdC2b7Y>!5w7dgi4f4ulVc|yf6By-%R_c$NHWm|DYNl{u$0(IINEArEKIgkRNqkB0}8FK@|$>++9KUwGX@IC#x(ys$BM41f3m zG@4P6sdnk;uO!Vch0d1vL$eKGUu4r?aw z$unclet?x2|1_z04ptsLc<^8aAI8PdGh@2EU#0q&h`Ifhe`r_s@aw^g4m1-FF9*0Y zk^C8Nt0t?XyA{qfh`V)L|ERvbzq>8o*4=A!?T_YLb(n5wOFfLXREH4n z-Uq1>_TZVx2sOrdPT6j6YuqRK*Bu;(NgF5Sqo5Cs1tuU6tMQ4R`k#B2G>#*lO*+E` zZ!=UGGAAsL&QFc{Ho~F;5tEKS#84Aj9n}Hn?~StwEkz0pxzp)Lk@Bb`6=p{!nmen0 zrIDN>&!4ApG8q|#SxQbcZ1LY|@Q2Hfmj4mHD4SF92{e)TuU!i&t>k*E50~~UHU<>R zbp~69jn`!>h|zM;?Dh;rZa3BNvV~oR>IK(+j!u2S9=XsMsYQN z__4z*G#b7?IlCFqZtY2TYisS{QvC6VS(Uh@1M>ecTkESy579GHjQi!U)*p5TN2cL) zJ}G@2U(4!~OX6YYwN+@z@fVApu(rwD(PamFDN{?xKF*d={sJ}jnQidvBaTyF2!xh<}KsPMqFPTc-YV{B(1Fdo9@2#_QRJYMp>JZW>f_QT@nmd9ky3 z@XLQaI$V0$B{abPuJmXCBZOOP%b7J7^9SCp{FhJSAr^hg?!GqJfAfc>(X%_Fe0u4= zWKVNic&>?uwg2lGJF7$2t*;&>=1~PSjtEaboA}WbAMyTmkN34xGe4$>;2l{`@JJde|Z0#{~pSDm}~P+KzdqJeZ-3oIM>8` zd9;u}cjpNE=&)mt0*z@3id~iV>3Vdy8jO?1L{WaUdN?6S;^=T0x^O~Sp?!YL!vWPH z*pOgnMxd!nCP!6fZ$Qa_+@*^r!SlO(;$iDa{}GX0hUnqO34(*oAr?>E(TN6n#G8+nZDk&O+bQ4B&_2H5TLae8R{Y&Ib=3CPZC>s_QQ=v{{ITDS-FQxX%*~bbN1!bZYno%po(L?0mziWq?^-s1a-zsypLXa;Jae zQ$q#ij~KRDImdV^as>F$-?2T~{w1kv#B9J`;N}3H9c6EM+XVJ1Cs^f}#NQ)Xkp+ji z1Lsh}iw|iFHpMeN1n2sS6ikx}cLK1uoTx$kXPf~?zDVjpoi^rhAlw)}-I8F=~ z>Wv1h{9Yw{n|@WTnea6@RVENPG2`j^6Fmb<@ZfR@TYg3Uny!-P#Mqi#c+0$&7lnrC z`U@L(YmLdD*U*4u`S$vxKAk`KG*4)o0nmxK&+nlqbH_GZ}N`@;bOeOP0@c zMaUSo8wS6rV%IYWT%E-!U|3Fyu22A0r<}}mi;@F6ZAqRNLt_o3>f9` zo3X2J*F;x3*nMuHr*qP!Bb|)ACjm|Y%?ooWg9I3ZHHReX@*?f8Yk-p zXrx_}lb(ll=18g{Eh8lTt9Py!^@y-Q+Cbxa{QLWJ`>{Mo19{QxBU{F2`^CsDO{L!Yih$z;tD2o{ zz%U|hHNv8kTA<+}vPY@?hEhi~VfX43>#Lg*@gWI0eK^a|?pTzRdpE9yT# zfLl7t$Ixv<^t1>t+3;ljiZpIc640u-+eb2Pwwbiv$q>c88F39WBqNxZMGrm#unR;X zZBKPV{$~?-~I#A=l%oPd9pEHhk5tn79gGEniy*XlZS=^?n%XH=Hz^XAbH0g3Z4?>Y04*R_v!$k6v zK-BU;lXpf#YmyY&@c!y({-XptXJK{Tpxkkp$`C_I1P;04mSM4P9c||xQ zgYt|8Jc%VjV^zQ64e%;?2R17UOfDN^iOETZ*2FELAsS4}70*a(PXf64~^=r?uO0M)D{6jZ9UP-ohPj9H+Sltmx!ldxTCPWSe(-1gq1nLk**h#f+uI+ zX{uecEDVE=b$koZ4tx3iPUo^-jKcfP6I3!}O~&t_bZ#qb(q5ns^t?ymnzukfJojQY zF;j1_YfZbGU;ZUQejYNM^-_wYY)8_g%(JV{bkMJ%Ia}dIJHKr^3c&CuI4iR)B8uTH zaO(@)_6?k}>$&8#A({oXFB6rDL$la$-j92^{jVR(1DH@~zQKs?PlI@jA|5U{B480# zrZUtl=cCIB(SN5M%vczgm)L5g^U-B8O7@;@-e1zq4V6+&O6T7$=^-$5gxvCzZ@=br z&BGPs1#D;F@H?q*-CM6mU!f0ZFT{G^HngqsOUI3+`FV!k!d|jM@oqV!Fi*-U){;f7 zrsT$!B5HM7Rx*VIUTe#*f4J8sJNxckNJ3u1yM-?j`&tFvx8)1WfPTb1 zJ-$bbfvFSkNcd{?$v6~6uZM++y90aXlVlY4u1LtW!Ml>;#J$oWH1DAI={fqjeTpn9 zSJ1D77A%&;5aZN%A-c4CyzZajrQ({m*P0*Sro|`y0VN2~p{lWEH0afBzm+kId4l}JNON0f zHQ97)b^_SZ+3`^qDA1K%J^uY|DLzQ6XvrF8J|5j9al7#G@c*Ls{@o*mgkG~1O)k8O zfa&3^*8KHPuvk~u^TZ7i+`?cl_Txm-kT44I)&7*T{szG)Q>{?b+&3u|5t5$z#^XeO z$O<-=(*xNEz*sOoMgqY~M8NPRWiF(M;Pdj*^pN-@_N0*~7$KApOSZApq+3&2{2gyj za-ThkirF~8abb{h-%n07W1N2d$3I)Q?}Ze2qYd4>@E?hQxFzfe(=8Szu==ZSN%2^{ z8NPREc=Hs)v0;(W$0lBuN!%aDY#>!~HUWJwV%C(}wFO91oQNQWt1C}AAkQA7_0%NE zw+H0Naq8Gcbuw{owit9X(&bi$pCVSP@XgJEE;C)f6X8ftc)4~Y&B(O~{L;dEpFx#* zDdZU>sAguuDsiAw)Ky!Nc1?DrJPwXg>>_NsV$KzwlmnB1RP^5G^B~a?j~)Dr-RFI^FMtKUi!=n(icTEy7$79%~{wCrFu3 zT{$mT8VT!)O}pmwk%*d3aG35+X`RN_OPXU}9Ec6K>D&7@raWz_tzukd2y~^gg~w%! zM&5Qd0C2Qi8yWA#XT+(Q;8KhmO8+(~F6v8c-4LBvlgo7|BVF0y6jbtf~3sY{!3 z160HN3Sq&$X=ZGwGnOGC%s|L7C;x~N3acPtQ;VQcPG}1*OuLB|M|Y+J*){LqO>fiB zn}&<>O8awm-pn0Ei;&Ytxl1}wgm1lYFs$qk2yl{BinlwQR_M$t073F{ zKL3ocqeADK%LG&?b99~I=h5NdsbH+0n**}0tkUDX>X~>R4-p0Vd*&%;pEs1F-&^#n zv`Q-s_v=)bdbirND>+u^58h5Yy_rc(ODTPgDiMu_@1!G*s8tjjh*(yYr8N*?n$n-> z9M%$88v^4ly+;4p%7#9Dwp--GKuj+*M*M27qoshKo;?Z5f6Wq*s=mBiMqZ9t6d;G) z2vrn}l3|pFzo$fqEA1n2Zd#v=gNscRBU89ECo=unU4*6(6{t(ACzg3B%i*Rthcx@- zM*akf@H2S)+zbe5tP?Rx(Y;z)3P!uaEt+e;+>9HcrJRvnmvk~=X$X9hp*Vmlg%LY~ z_V6UO))>tBhXEa(wov6YIE0oPTZn92MC+*=uNwzeM}23yAa6f3!S^BrDc0-Aaj56lJ+i zU}n@%VxWCa%S4zg}$1n=5s7WSZYz4L1=jM!^A(SzIv0jm2L z`amk|W?-Cj$lz>hfs}#3x6%cIWN!DQOWIN;fwN1nT;uU2!ARjKQkf<_66XXHj?VbT zZ__f~`BTp(A-P>3Gr=_zo$b%wBM+LLt9%42fV|&kF(=mp`W#iIR%w2w#xe z1WCkvi%MT8OH9U6W9m|`{y5E&ULmO!BL<263Gp9=aO6!ANU*nIrGn*7nN$T;8QVKj zY0OlnX}vUwpTo(QOB#UUcfE+|rGN4P>zKP&pj?#RBe*obeQ^K5Mj@ZEGJ#)kFIrn> zys>yIM$W`N4v3}k7RJug&1c7pFYZHnj(Z0<0fg=e#JYDi>^M<|e=r}_%|hlFRiHFI z+s#l0xvihy!pA_o?VeEKdELD%|Fnf#i@OsIhOX@iu5H^E+ZzQ4Aw|{B&3W;Q@PVtV z_}%+3+5gY+Hx~!c1Gw0pDAHR{(`7!-bg4Sas?qM+Dv6F!*7NM=S!T?+!3*7iP6Sp9 zg$-OyYEW<~pe|Aar+|#%0J`1eBo75Zqa~QCPZgTsjGX(UDkxe?^}<66zk6?Z(cz_E z*t(LgOz5jH6B{$UWtqFRb`QQo5vJ=2iUOf_8o~BzNVpxZy-7#|$r`5LOO~i>+*rS3oz}W@p{CHSxU%PY?FyOrRF7HlAxP)R-B$oQzIj zkwxAV%?I01k=ln{krk~dKZc3fB|uvH1pSJC#{nG6F2GX)j-Eu%yP!QgE7QOBrkhT(Z9UOVmqf zuq7~rZO8Prg+v1P2F!BL-Nd=wKM|%a7}jiK0VBSScN)H17Ub-pJI+{v01#;N;xhctkb>EMqXe)+*4HsF7CdP6W&@(c=aqsp8vP@q%ocY3%C5 zH?L2Q28Rzi|9JG9dT}^eX6N4w9+(%w$pF6wRw5CEBi9T%sDx~o)j5Ar)DU~j8Zj;Q zXbgiO^W*?Fr!>m+*9`B>bK}bm>~=FOJwnSzq9pX841{^K#cPKP0Sr(^Wa28wV*u&< zT!;yNLeNp-UXSBQn|=4@mU=!T#tQS;{9&4AZUXIB!Dbl-m*P3#7O*sD^K`o2j?nK0 z^BD3f?%uOKH)29DJtdE{Ew%g?>ODmaDELtkn;zsE^CT&2m=?0N;mR$NV@=&1BP-tf zyVfvx5R#|88ELD;kJGCJL%~^`PX=Q*!Pz{1or5AO68!8QY1cooSd(bkB7iVSvm?iw z=se{n=p0RYVo*0}wi*`4@A7PQgnJ}^Z$*@Vw_pH`iSfk3DH%s)2X8ugNlnhegqq<5 z%i6^SF_!?=wnCqrQ_)s}+WCj`4L@R$CB1ADs6tp(X;?WY0$0Vxk_SE_q75;)zx|hw zYN$JpWE46+&**_ZF7XVGWMXKD$+R1^FuQwSOn*eOgAQ(52g5~m`WQ2Mx-Y#6%(O|b z(RlgXoqU(>L58Y26ARi4#3NIsG&-cRBOz-`iyzojP@d3JmOn(itO5=c>vtnD=E8oJ zpemHdFaYUs(5j{ILz&yu^((uxnWRWwZfZ3X2O6JQmaCUi#0m2xI$%yLcF;}B`~?u9 z;rq+>*b$1tlwxa&%y>8#F2bR<94Ko&lGZZE!kDOJ3)gl^^3U0IlBohJ z;HC;6cd8vOa?+iO z&Ib;?p{co{VfCyz8qct7(r+l~~0x8&sI%0mQM z6KT^lt8rt8Z`RL3B=#dEio}s0BmtMSsj2i$<%Ieb$pm-Z6wq3yrI5^DC+{RMp?~Fd zUFURqXd(3Zg5q*q1a+@?FrNmHFm=qvsM?&ElqD3ko2$UvK?=#h<5ZDRcm=45^{axf zgnz^_VHMQfAAUALk8Y#UJX%hOMN) tW}!P?buK46K@%RKSG9JKz03J@;r4DWH>%e2Ed~YAjnI{#n8V*ablxC?qO|}3 literal 0 HcmV?d00001 diff --git a/po/it.po b/po/it.po new file mode 100644 index 000000000..4c2addad5 --- /dev/null +++ b/po/it.po @@ -0,0 +1,6907 @@ +# Italian translations for grub package +# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# transparent compression -> compressione immediata +# non avendo trovato molto in giro, ho cercato un sinonimo di +# "trasparente". Praticamente la "transparent compression" è una +# compressione on-the-fly, "trasparente" all'utente, da qui +# "immediata", visto che non si nota +# boot catalog -> lasciato invariato, dovrebbe essere il file boot.catalog, non so +# se tradurlo con "catalogo di boot" sia comprensibile... +# Joliet -> usato sempre con la maiuscola +# +# http://en.wikipedia.org/wiki/Transparency_(computing) +# http://en.wikipedia.org/wiki/Rock_Ridge +# http://en.wikipedia.org/wiki/Joliet_(file_system) +# http://www.linux.com/archive/feature/151485 +# Milo Casagrande , 2009, 2010, 2011, 2012, 2013, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-05 12:43+0100\n" +"Last-Translator: Milo Casagrande \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Poedit 2.0beta2\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "velocità della porta seriale non supportata" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "parità della porta seriale non supportata" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "numero di bit di stop della porta seriale non supportati" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "lunghezza della parola della porta seriale non supportata" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Non carica le tabelle host specificate come elenco separato da virgole" + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Carica solo le tabelle specificate come elenco separato da virgole" + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Espone la versione 1 delle tabelle al sistema operativo" + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Espone le versioni 2 e 3 delle tabelle al sistema operativo" + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Imposta OEMID di RSDP, XSDT e RSDT" + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Imposta l'ID OEMTABLE di RSDP, XSDT e RSDT" + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Imposta la revisione OEMTABLE di RSDP, XSDT e RSDT" + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Imposta il campo creatore di RSDP, XSDT e RSDT" + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Imposta la revisione del creatore di RSDP, XSDT e RSDT" + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Non aggiorna EBDA: potrebbe risolvere dei problemi o dei blocchi con alcuni " +"BIOS, ma non è efficace con sistemi operativi che non ricevono RSDP da GRUB" + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "fine prematura del file %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABELLA1,TABELLA2|--load-only=TABELLA1,TABELLA2] FILE1 " +"[FILE2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Carica le tabelle ACPI dell'host e quelle specificate dagli argomenti" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "errore: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "memoria esaurita" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "impossibile leggere \"%s\": %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Arresto tramite ACPI non riuscito" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Elenca i device" + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "atteso nome di file" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FILE" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Stampa una blocklist" + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "è necessario caricare il kernel prima" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Avvia un sistema operativo" + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Nessuna statistica disponibile sui tempi di avvio\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Mostra statistiche dei tempi di avvio" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "Statistiche cache del disco: hit = %lu (%lu.%02lu%%), miss = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Nessuna statistica disponibile della cache del disco\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Recupera informazioni sulla cache del disco" + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Accetta terminatori di riga in stile DOS (CR/NL)" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Mostra il contenuto di un file" + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "attesi due argomenti" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Confronta il file \"%s\" con \"%s\":\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "I file differiscono nella dimensione: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "I file differiscono all'offset %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "I file sono identici.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FILE1 FILE2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Confronta due file" + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Carica un altro file di configurazione" + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Carica un altro file di configurazione senza cambiare contesto" + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Carica un altro file di configurazione senza cambiare contesto ma prende " +"solo le voci di menù" + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Carica un altro file di configurazione, ma prende solo le voci di menù" + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[anno-]mese-giorno] [ore:minuti[:secondi]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Visualizza/Imposta la data e l'ora correnti" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Non visualizza l'a capo finale" + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Abilita l'interpretazione delle sequenze di escape con backslash" + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] STRINGA" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Visualizza una riga di testo" + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Riavvia nel menù di configurazione del firmware" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Corregge problemi video" + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Immagine ROM presente." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Impossibile abilitare l'area ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Crea strutture simil BIOS per retro-compatibilità con sistemi operativi " +"esistenti" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "DUMP_BIOS [DUMP_INT10]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Carica un dump BIOS" + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "STRINGA ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Valuta gli argomenti come comandi GRUB" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Verifica se FILE può essere avviato come kernel guest Xen i386 PAE senza " +"privilegi" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Verifica se FILE può essere avviato come kernel guest Xen x86_64 senza " +"privilegi" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Verifica se FILE può essere avviato come kernel guest Xen i386 PAE con " +"privilegi" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Verifica se FILE può essere usato come kernel multiboot x86" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Verifica se FILE può essere usato come kernel multiboot2 x86" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Verifica se FILE è Linux ARM" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Verifica se FILE è Linux ARM64" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Verifica se FILE è Linux IA64" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Verifica se FILE è Linux MIPS" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Verifica se FILE è Linux MIPSEL" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Verifica se file è Linux SPARC64" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Verifica se FILE è Linux POWERPC" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Verifica se file è Linux x86" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Verifica se FILE è Linux x86 con supporto protocollo 32-bit" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Verifica se FILE è kFreeBSD x86" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Verifica se FILE è kFreeBSD i386" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Verifica se FILE è kFreeBSD x86_64" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Verifica se FILE è kNetBSD x86" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Verifica se FILE è kNetBSD i386" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Verifica se FILE è kNetBSD x86_64" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Verifica se FILE è un file EFI i386" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Verifica se FILE è un file EFI x86_64" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Verifica se FILE è un file EFI IA64" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Verifica se FILE è un file EFI ARM64" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Verifica se FILE è un file EFI ARM" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Verifica se FILE è hiberfil.sys in uno stato d'ibernazione" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Verifica se FILE è XNU x86_64 (kernel Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Verifica se FILE è XNU i386 (kernel Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Verifica se FILE è un'immagine XNU d'ibernazione (kernel Mac OS X)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Verifica se FILE è un bootsector BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "falso" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPZIONI FILE" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Verifica se il FILE è del tipo specificato" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "partizione inesistente" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Il nuovo MBR viene scritto in \"%s\"\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DEVICE [PARTIZIONE[+/-[TIPO]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Riempie l'MBR ibrido dell'unità GPT DEVICE: le partizioni specificate " +"saranno parte di un MBR ibrido; sono consentite fino a 3 partizioni; TIPO è " +"un tipo di MBR; + indica che la partizione è attiva, solo una partizione può " +"essere attiva" + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Arresta il computer: questo comando non funziona con tutte le " +"implementazioni firmware" + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Specifica l'hash da usare" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Verifica gli hash dei file con gli hash presenti in FILE" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Directory di base per l'elenco hash" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIR" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Non si ferma al primo errore" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Estrae il file prima di calcolare il checksum" + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ERRORE LETTURA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HASH NON CORRISPONDENTE\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FILE [-p PREFISSO]] [FILE1 [FILE2 ...]]" + +# (ndt) hmmm.... +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Calcola o verifica l'hash" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FILE [-p PREFISSO]] [FILE1 [FILE2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Imposta \"Advanced Power Management\"\n" +"(1=basso, ..., 254=elevato, 255=spento)" + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Visualizza la modalità di alimentazione" + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Blocca le impostazioni di sicurezza ATA fino a un reset" + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Visualizza lo stato SMART" + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Imposta \"Automatic Acoustic Management\"\n" +"(0=spento, 128=silenzioso, ..., 254=veloce)" + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Imposta il timeout di standby\n" +"(0=spento, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)" + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Imposta l'unità in modalità standby" + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Imposta l'unità in modalità pausa" + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Stampa informazioni e impostazioni dell'unità" + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Mostra il contenuto grezzo del settore ATA IDENTIFY" + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Disabilita/Abilita SMART (0/1)" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Non stampa alcun messaggio" + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "atteso un solo argomento" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPZIONI] DISCO" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Recupera/Imposta parametri ATA" + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Uso:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MODELLO ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Mostra un messaggio di aiuto" + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Salta un offset di byte dall'inizio del file" + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Legge solo LUNGHEZZA byte" + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPZIONI] FILE_O_DEVICE" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Mostra il contenuto grezzo di un file o della memoria" + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Mostra il dump grezzo del contenuto del CMOS" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Verifica il bit BYTE:BIT nel CMOS" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Pulisce il bit BYTE:BIT nel CMOS" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Imposta il bit a BYTE:BIT nel CMOS" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Mostra statistiche di avvio di coreboot" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Elenca le tabelle coreboot" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Verifica se la CPU supporta la modalità (lunga) a 64 bit (predefinito)" + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Verifica se la CPU supporta PAE (Physical Address Extension)" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Verifica le caratteristiche della CPU" + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Mostra le mappature attuali" + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Ripristina le mappature ai valori predefiniti" + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Esegue mappature sia dirette sia inverse" + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Nessuna unità è stata ri-mappata" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "Disco #num ------> Device GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] devgrub discoos" + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Gestisce le mappature delle unità del BIOS" + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Non usa APM per arrestare il computer" + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Arresta il sistema, utilizzando APM se possibile" + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "APM non trovato" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versione %u.%u\n" +"32 bit CS = 0x%x, lung = 0x%x, offset = 0x%x\n" +"16 bit CS = 0x%x, lung = 0x%x\n" +"DS = 0x%x, lung = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Interfaccia 16 bit protetta supportata\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Interfaccia 16 bit protetta non supportata\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Interfaccia 32 bit protetta supportata\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Interfaccia 32 bit protetta non supportata\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU Idle rallenta il processore\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU Idle non rallenta il processore\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM disabilitato\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM abilitato\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM disattivato\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM attivato\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Mostra le informazioni APM" + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "nome file oppure tempo e note attesi" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Tempo non valido in %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "file \"%s\" non trovato" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "numero non riconosciuto" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FILE | TEMPO [TONO1 DURATA1] [TONO2 DURATA2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Riproduce un suono" + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "imposta la modalità blocnum" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "imposta la modalità blocmaiusc" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "imposta la modalità blocscorr" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "imposta la modalità inserimento" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "imposta la modalità pausa" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "preme Maiusc sinistro" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "preme Maiusc destro" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "preme SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "preme BlocNum" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "preme BlocMaiusc" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "preme BlocScorr" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "preme Ins" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "preme Alt sinistro" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "preme Alt destro" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "preme Ctrl sinistro" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "preme Ctrl destro" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "non aggiorna lo stato dei LED" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[TASTO1] [TASTO2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Simula la pressione di sequenze di tasti" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Esegue \"go\" per ripristinare GRUB" + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Ritorna al prompt IEEE1275" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Salva il valore letto nella variabile NOMEVAR" + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "NOMEVAR" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORTA" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Legge un valore 8 bit da PORTA" + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Legge un valore 16 bit da PORTA" + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Legge un valore 32 bit da PORTA" + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORTA VALORE [MASCHERA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Scrive il VALORE 8 bit su PORTA" + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Scrive il VALORE 16 bit su PORTA" + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "IND VALORE [MASCHERA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Scrive il VALORE 32 bit su PORTA" + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "la variabile \"%s\" non è impostata" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Carica una disposizione di tastiera" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Verifica il tasto Maiusc" + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Verifica il tasto Control" + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Verifica il tasto Alt" + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Verifica lo stato dei modificatori dei tasti" + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "impossibile trovare il comando \"%s\"" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Inserire la password:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Analizza configurazioni grub-legacy nello stesso contesto" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Analizza configurazioni grub-legacy nel nuovo contesto" + +# +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Analizza configurazioni grub-legacy nello stesso contesto utilizzando solo " +"le voci di menù" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Analizza configurazioni grub-legacy nel nuovo contesto utilizzando solo le " +"voci di menù" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TIPO] FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simula il comando \"kernel\" di grub-legacy" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simula il comando \"initrd\" di grub-legacy" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simula il comando \"modulenounzip\" di grub-legacy" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSWD [FILE]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simula il comando \"password\" di grub-legacy" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simula il comando \"password\" di grub-legacy nelle voci di menù" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Specifica il nome del file" + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Salta il controllo della firma del file dell'ambiente" + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FILE] [-s|--skip-sig] [nome_variabile_valida] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Carica le variabili dal file a blocchi dell'ambiente" + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FILE]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Elenca le variabili dal file a blocchi dell'ambiente" + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FILE] nome_variabile [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Salva le variabili sul file a blocchi dell'ambiente" + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Mostra un elenco con informazioni più dettagliate" + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Stampa le dimensioni in un formato comprensibile" + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Elenca tutti i file" + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Protocolli di rete:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FILE ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Elenca device e file" + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Mostra solo le tabelle versione 1" + +# +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Mostra solo le tabelle versione 2 e 3" + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Mostra informazioni ACPI" + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM disponibile" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM riservata" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM ACPI riutilizzabile" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "Archivio non volatile della RAM per ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM difettosa (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "RAM persistente" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "RAM persistente (legacy)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM che contiene le tabelle coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM che contiene il codice firmware" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "indirizzo base = 0x%llx, lungh = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "indirizzo base = 0x%llx, lungh = 0x%llx, tipo = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Elenca la mappa della memoria fornita dal firmware" + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Elenca device PCI" + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Esegue bless su FILE di una partizione HFS o HFS+ per Mac Intel" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Esegue bless su DIR di una partizione HFS o HFS+ per Mac PPC" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "IND" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Legge un valore 8 bit da IND" + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Legge un valore 16 bit da IND" + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Legge un valore 32 bit da IND" + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Scrive il VALORE 8 bit in IND" + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Scrive il VALORE 16 bit in IND" + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Scrive il VALORE 32 bit in IND" + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Tipo di voce di menù" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRINGA" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Elenco di utenti abilitati ad avviare questa voce" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "NOMEUTENTE[,NOMEUTENTE]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tasto rapido per avviare questa voce" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TASTO" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Usa STRINGA come testo per il menù" + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identificatore di voce di menù" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Questa voce può essere avviata da tutti gli utenti." + +# (ndt) hmmm... +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCCO" + +# (ndt) o che vada lasciato menuentry? +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Definisce una voce di menù" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Definisce un sotto-menù" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nome\tCont rif\tDipendenze\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Mostra questo messaggio" + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "IND [DIM]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Mostra il contenuto di memoria" + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULO" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Rimuove un modulo" + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Mostra i moduli caricati" + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Esce da GRUB" + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Nessun CS5536 trovato" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 in %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Lo spazio I/O del bus di controllo di sistema è a 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Slot RAM n° %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Byte SPD scritti: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Dimensione totale flash: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Tipo di memoria: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Parte n° %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Tipo di memoria: sconosciuto." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Stampa informazioni sulla memoria" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s non supporta gli UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODULO1 MODULO2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Passa ai driver disco nativi; se nessun modulo è specificato viene usato " +"l'insieme predefinito (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Esegue COMANDI sulla partizione.\n" +"Usare \"parttool PARTIZIONE help\" per l'elenco dei comandi disponibili." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Nessun parttool disponibile per %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "argomento \"%s\" sconosciuto" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTIZIONE COMANDI" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "UTENTE PASSWORD" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Imposta la password per l'utente (testo in chiaro): non consigliato e non " +"sicuro" + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "password PBKDF2 non valida" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "UTENTE PASSWORD_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Imposta la password utente (PBKDF2) " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Seleziona il device tramite ID fornitore e ID device" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[fornitore]:[device]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Seleziona il device in base alla sua posizione nel bus" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "simbolo \"%c\" mancante" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSIZIONE] [-d DEVICE]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Mostra il dump grezzo dello spazio di configurazione PCI" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Imposta una variabile al valore di ritorno" + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Determina il driver" + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Determina il tipo della mappa delle partizioni" + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Determina il tipo di file system" + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Determina lo UUID del file system" + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Determina l'etichetta del file system" + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "il file system \"%s\" non supporta le etichette" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DEVICE" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Recupera informazioni sul device" + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[VARAMB]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Imposta la variabile con l'input dell'utente" + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Riavvia il computer" + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Archivia il corrispondente componente NUMERO in NOMEVAR" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMERO:]NOMEVAR" + +# (ndt) lascio REGEXP, tanto è abbastanza tecnica la cosa... +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP STRINGA" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Verifica che REGEXP corrisponda a STRINGA" + +# (ndt) sugg?? +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NOME [VARIABILE] [SUGG]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cerca i device per file: se VARIABILE è specificata, il primo device trovato " +"è impostato a una variabile" + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cerca i device per etichetta: se VARIABILE è specificata, il primo device " +"trovato è impostato a una variabile" + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Cerca i device per UUID: se VARIABILE è specificata, il primo device trovato " +"è impostato a una variabile" + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Cerca i device tramite un file" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Cerca i device tramite un'etichetta del file system" + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Cerca i device tramite un UUID del file system" + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Imposta una variabile al primo device trovato" + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Non esamina alcuna unità floppy" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Prima prova il device SUGG, se SUGG termina con una virgola, prova anche le " +"sotto-partizioni" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "SUGG" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prima prova il device SUGG se in esecuzione su IEEE1275, se SUGG termina con " +"una virgola, prova anche le sotto-partizioni" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prima prova il device SUGG se in esecuzione su BIOS, se SUGG termina con una " +"virgola, prova anche le sotto-partizioni" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Prima prova il device SUGG se l'accesso diretto all'hardware è supportato, " +"se SUGG termina con una virgola, prova anche le sotto-partizioni" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prima prova il device SUGG se in esecuzione su EFI, se SUGG termina con una " +"virgola, prova anche le sotto-partizioni" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prima prova il device SUGG se in esecuzione su ARC, se SUGG termina con una " +"virgola, prova anche le sotto-partizioni" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint SUGG [--hint SUGG] ...] NOME" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Cerca i device per file, etichetta del file system o UUID del file system. " +"Se è specificato --set, il primo device trovato è impostato a una variabile, " +"se non è indicata alcuna variabile, viene usata \"root\"" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Registro %x di %x:%02x.%x è %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSIZIONE] [-d DEVICE] [-v VAR] REGISTRO[=VAL[:MASCHERA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Gestisce device PCI" + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Conto alla rovescia esplicito" + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Consente di essere fermato con ESC" + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NUMERO_DI_SECONDI" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Attende per un determinato numero di secondi" + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "Directory di root del disco syslinux [predefinito=/]" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"Directory attuale di syslinux [predefinito la directory superiore del file " +"di input]" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "Assume l'input come file di configurazione isolinux" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "Assume l'input come file di configurazione pxelinux" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "Assume l'input come file di configurazione syslinux" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Esegue configurazione syslinux nello stesso contesto" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Esegue configurazione syslinux nel nuovo contesto" + +# +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Esegue configurazione syslinux nello stesso contesto utilizzando solo le " +"voci di menù" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Esegue configurazione syslinux nel nuovo contesto utilizzando solo le voci " +"di menù" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "nessun terminale specificato" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminale \"%s\" non trovato" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Terminali di input attivi:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Terminali di input disponibili:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Terminali di output attivi:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Terminali di output disponibili:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINALE1] [TERMINALE2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Elenca o seleziona un terminale di input" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Elenca o seleziona un terminale di output" + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ESPRESSIONE ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Valuta un'espressione" + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ESPRESSIONE" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Carica lo stesso file in modi diversi" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Specifica la dimensione per ogni operazione di lettura" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "dimensione blocco non valida" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Dimensione file: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Tempo trascorso: %d.%03d s. \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Velocità: %s\n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s DIMENSIONE] NOMEFILE" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Verifica la velocità di lettura file" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "nessun comando specificato" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Tempo trascorso: %d.%03d secondi \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "COMANDO [ARG]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Misura il tempo utilizzato per COMANDO" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Converte tutto in maiuscolo" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Converte tutto in minuscolo" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPZIONI] [SET1] [SET2] [STRINGA]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Converte i caratteri in STRINGA da SET1 a SET2" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Non fa nulla, successo" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Non fa nulla, insuccesso" + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Verifica il supporto USB" + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Salta il controllo firma del file della chiave pubblica" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "firma non valida" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "chiave pubblica %08x non trovata" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "modulo \"%s\" non caricato" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FILE FILE_FIRMA [FILE_CHIAVE_PUB]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Verifica la firma scollegata" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] FILE_CHIAVE_PUB" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Aggiunge FILE_CHIAVE_PUB tra le chiavi fidate" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Mostra l'elenco delle chiavi fidate" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_CHIAVE_PUB" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Rimuove ID_CHIAVE_PUBBLICA dalle chiavi fidate" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Solo testo" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Colore diretto, maschera: %d/%d/%d/%d pos: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Tavolozza" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planare " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monocromatico " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Modalità video sconosciuta " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " Checksum EDID non valido" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " Versione EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Modalità preferita: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Nessuna modalità preferita disponibile\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "modalità video \"%s\" non valida" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Elenco modalità video supportate:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legenda: masc/posizione=rosso/verde/blu/riservato" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adattatore \"%s\":\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Nessuna informazione disponibile" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Inizializzazione adattatore video non riuscita" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[LxA[xP]]" + +# (ndt) questa è lunga... chissà come viene a video... +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Elenca le modalità video disponibili; se viene fornita la risoluzione, " +"mostra solo le modalità corrispondenti" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Verifica il sottosistema video in modalità W×H" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Verifica il sottosistema video" + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[DIR]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Elenca archivi Xen" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] UUIDGRUB [NOMEVAR]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Trasforma UUID 64-bit in un formato adatto per XNU; se viene passato -l " +"mantiene tutto minuscolo come fatto da blkid" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "lettura del settore 0x%llx da \"%s\" non riuscita" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "scrittura del settore 0x%llx su \"%s\" non riuscita" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Monta in base allo UUID" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Monta tutto" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Monta tutti i volumi col flag \"boot\" impostato" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "impossibile aprire \"%s\": %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "impossibile eseguire seek \"%s\": %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "SORGENTE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Monta un device crypto" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Impossibile trovare il volume fisico \"%s\": potrebbero mancare alcuni " +"moduli dall'immagine core." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "volume fisico %s non trovato" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "nessun supporto in \"%s\"" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Impossibile caricare sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Impossibile caricare sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "impossibile leggere metadati ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "versione o numero magic ELI errato" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Tentativo di decifrazione chiave master..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Inserire la passphrase per %s%s%s (%s):" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Slot %d aperto\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "tentativo di leggere o scrivere al di fuori del disco \"%s\"" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "impossibile scrivere sul CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Sono in uso driver disco nativi: l'interfaccia disco firmware non verrà " +"utilizzata." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"la partizione di embed LDM è troppo piccola; l'embed non sarà possibile" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"questo LDM non ha una partizione per l'embed; l'embed non sarà possibile" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Elimina l'unità di loopback specificata" + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] NOMEDEVICE FILE" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Crea un drive virtuale da un file" + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "la rilocazione 0x%x non è ancora implementata" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "nessuna tabella dei simboli" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "questo file ELF non è di tipo corretto" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Carica e inizializza l'emulatore EFI" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Finalizza il caricamento dell'emulatore EFI" + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Rimuove l'emulatore EFI" + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "simbolo \"%s\" non trovato" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Caratteri caricati:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FILE..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Specifica uno o più file di caratteri da caricare" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Elenca i caratteri caricati" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "troppi collegamenti simbolici annidati" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "tentativo di leggere oltre la fine del file" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"impossibile trovare un device membro necessario per file system multi-device" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "non una directory" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "non un file regolare" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"l'immagine core è stranamente grande. Non può essere mantenuta nell'area " +"embed" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "nome di file \"%s\" non valido" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "verifica checksum non riuscita" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "nessuna chiave di decifrazione disponibile" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "verifica MAC non riuscita" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Assume l'input come raw" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Assume l'input come hex" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Assume l'input come una passphrase" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Inserire password ZFS:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FILE]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importa chiavi wrap ZFS archiviate in FILE" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Device virtuale rimosso" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Device virtuale danneggiato" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Device virtuale offline" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Device virtuale degradato" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Device virtuale online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Device virtuale non corretto: nessun tipo disponibile" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Dispositivo virtuale foglia (file o disco)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Percorso di avvio: non disponibile\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Percorso di avvio: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Percorso: non disponibile" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Percorso: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Devid: non disponibile" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Devid: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Questo VDEV è un mirror" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Questo VDEV è un RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "VDEV non corretto" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV con %d figli\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "L'elemento VDEV numero %d non è corretto\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Elemento VDEV numero %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Tipo di device virtuale sconosciuto: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Stato pool: attivo" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Stato pool: esportato" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Stato pool: distrutto" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Stato pool: riservato per hot spare" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Stato pool: device ARC livello 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Stato pool: non inizializzato" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Stato pool: non disponibile" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Stato pool: potenzialmente attivo" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Nome pool: non disponibile" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Nome pool: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID pool: non disponibile" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID pool: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Impossibile recuperare lo stato del pool" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Stato del pool non riconosciuto" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Nessun albero di device virtuali disponibile" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Stampa informazioni ZFS riguardo DEVICE" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FILESYSTEM [VARIABILE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Stampa ZFS-BOOTFSOBJ o lo archivia in VARIABILE" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Collegare il debugger remoto." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Avvia stub GDB sulla porta fornita" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Attiva breakpoint in GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Ferma stub GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "fine file prematura" + +# (ndt) suggerimenti per "translate" +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Traduce la stringa con le impostazioni attuali" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"\"Invio\" avvia il sistema selezionato; \"e\" modifica i comandi; \"c\" va " +"alla riga di comando; \"Esc\" torna al menù precedente." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"\"Invio\" avvia il sistema selezionato; \"e\" modifica i comandi; \"c\" va " +"alla riga di comando." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "Invio: avvia; \"e\": opzioni; \"c\": riga di comando" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "La voce selezionata verrà avviata automaticamente in %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds rimanenti." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Menù avvio GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: il valore %s è minore o uguale a %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: il parametro ARGP_HELP_FMT richiede un valore" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: il parametro ARGP_HELP_FMT deve essere positivo" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: parametro ARGP_HELP_FMT non conosciuto" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Dati errati in ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Argomenti obbligatori od opzionali per le opzioni lunghe lo sono anche per " +"le corrispondenti opzioni corte." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " oppure: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPZIONE...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Provare \"%s --help\" o \"%s --usage\" per ulteriori informazioni.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Segnalare i bug a %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Errore di sistema sconosciuto" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "Visualizza questo aiuto" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "Visualizza un breve messaggio di aiuto" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NOME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "Imposta il nome del programma" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEC" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "Si ferma per SEC secondi (predefinito 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "Stampa la versione del programma" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ERRORE DEL PROGRAMMA) Nessuna versione conosciuta." + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: troppi argomenti\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERRORE DEL PROGRAMMA) L'opzione dovrebbe essere stata riconosciuta." + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: l'opzione \"%s\" è ambigua; possibilità:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: l'opzione \"--%s\" non accetta argomenti\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: l'opzione \"%c%s\" non accetta argomenti\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: l'opzione \"--%s\" richiede un argomento\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opzione \"--%s\" non riconosciuta\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opzione \"%c%s\" non riconosciuta\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opzione non valida -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'opzione richiede un argomento -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: l'opzione \"-W %s\" è ambigua\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: l'opzione \"-W %s\" non accetta un argomento\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: l'opzione \"-W %s\" richiede un argomento\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Successo" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Nessuna corrispondenza" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Espressione regolare non valida" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Carattere di collazione non valido" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nome classe di caratteri non valido" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Backslash finale" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Riferimento all'indietro non valido" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ o [^ senza corrispondenza" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( o \\( senza corrispondenza" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ senza corrispondenza" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Contenuto di \\{\\} non valido" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Limite massimo non valido" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memoria esaurita" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Espressione regolare precedente non valida" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fine prematura dell'espressione regolare" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Espressione regolare troppo grande" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") o \\) senza corrispondenza" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "errore regexp sconosciuto" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Nessuna espressione regolare precedente" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hello World" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Dice \"Hello World\"" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "tentativo di posizionamento al di fuori del file" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "formato gzip non supportato" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "file lzop danneggiato" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "file xz danneggiato o opzioni a livello di blocco non supportate" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "numero magic ELF basato sull'architettura non valido" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[VARAMB=VALORE]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Imposta una variabile dell'ambiente" + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "VARAMB" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Rimuove una variabile dell'ambiente" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Elenca device o file" + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Inserisce un modulo" + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disco \"%s\" non trovato" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "tentativo di leggere o scrivere al di fuori della partizione" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "numero magico ELF indipendente dall'architettura non valido" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "il conteggio dei device supera il limite" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "impossibile scrivere su \"%s\": %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"La voce \"%s\" di device.map non è valida, viene ignorata. Correggere o " +"eliminare device.map." + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"Il nome \"%s\" dell'unità in device.map non è corretto, viene usato %s al " +"suo posto. Utilizzare la forma [hfc]d[0-9]* (es.: \"hd0\" o \"cd\")" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "impossibile aprire \"%s\": %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NOME_DEVICE" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Imposta il device root" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "Usa FILE come mappa dei device [predefinito=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "Usa FILE come memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "Usa i file GRUB nella directory DIR [predefinito=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "Stampa messaggi prolissi" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "Attende fino al collegamento di un debugger" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Argomento aggiuntivo \"%s\" sconosciuto." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Emulatore GRUB" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Errore nell'analizzare gli argomenti della riga di comando\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Eseguire \"gdb %s %d\" e impostare ARGS.HOLD a zero.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: avviso:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: errore:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "il file \"%s\" è troppo grande" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "file system sconosciuto" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Arresto non riuscito" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Chiusura non riuscita" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "rilevato overflow" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Scartata partizione non correttamente annidata (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Comando \"%s\" sconosciuto.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Visualizza questo aiuto ed esce" + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Visualizza l'uso di questo comando ed esce" + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "manca l'opzione obbligatoria per \"%s\"" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "l'argomento \"%s\" richiede un intero" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"è stato assegnato un valore all'argomento \"%s\" benché non ne richieda uno" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Stampa backtrace" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB non ha ancora informazioni su come spegnere questo computer." + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Il server predefinito è ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "specifica di colore \"%s\" non valida" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Riavvio non riuscito" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LUNGHEZZA]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Vista esadecimale di dati casuali" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" +"deve essere fornito un device tree (consultare il comando \"devicetree\")" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "zImage non valida" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "device tree non valido" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Carica Linux" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Carica initrd" + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Carica file DTB" + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"Image normale del kernel non supportata: ricompilare con CONFIG_(U)EFI_STUB " +"abilitato" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "Recupero FDT non riuscito" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "è necessario caricare l'hypervisor Xen prima" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Carica un hypervisor Xen" + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Carica un modulo Xen" + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPZIONI]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Avvia un sistema basato su BIOS" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Carica un altro boot loader" + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Visualizza l'output su tutte le console" + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Usa console seriale" + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Chiede il nome del file da cui riavviare" + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Usa CD-ROM come root" + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Invoca il routing della configurazione utente" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Entra in KDB all'avvio" + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Usa il debugger remoto GDB al posto di DDB" + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Disabilita tutto l'output di avvio" + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Attende la pressione di un tasto dopo ogni riga di output" + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Usa un device di root compilato internamente" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Avvia in modalità singolo utente" + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Avvia con messaggi prolissi" + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Non riavvia, arresta solamente" + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Modifica i device configurati" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNITÀ[,VELOCITÀ]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Disabilita SMP" + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Disabilita ACPI" + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Non visualizza messaggi diagnostici di avvio" + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Avvia con messaggi di debug" + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Elimina l'output normale (gli avvisi restano)" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[IND|comUNITÀ][,VELOCITÀ]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nome" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tipo" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "ind" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "dim" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Avvia in modalità blind" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Carica il kernel FreeBSD" + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Carica il kernel OpenBSD" + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Carica il kernel NetBSD" + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Carica ambiente FreeBSD" + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Carica un modulo del kernel FreeBSD" + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Carica un modulo del kernel NetBSD" + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Carica un modulo del kernel NetBSD (ELF)" + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Carica un modulo del kernel FreeBSD (ELF)" + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Carica ramdisk kOpenBSD" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Carica un altro payload coreboot" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Parametro legacy \"ask\" non più supportato." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "%s è deprecata, utilizzare \"set gfxpayload=%s\" prima del comando.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s è deprecata, la modalità VGA %d non è riconosciuta, usare \"set " +"gfxpayload=LARGHEZZAxALTEZZA[xPROFONDITÀ] prima del comando.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FILE" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "La dimensione di \"%s\" è troppo grande" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Carica kernel.sys di FreeDOS" + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Carica NTLDR o BootMGR" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Scavalca la mappatura ipotizzata dei device Plan9" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBDEVICE=PLAN9DEVICE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARG" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Carica kernel Plan9" + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Carica un'immagine PXE" + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Carica ISO Truecrypt" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd già caricato" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Carica un modulo" + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Premere un tasto per lanciare xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Carica il dump \"device-properties\"" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Impossibile trovare il driver FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Il protocollo FPSWA non è stato in grado di trovare l'interfaccia" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Nessun FPWSA trovato" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Revisione FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FILE [ARG ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Visualizza la versione FPSWA" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "ATTENZIONE: nessuna console sarà disponibile per il sistema" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Carica un kernel multiboot 2" + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Carica un modulo multiboot 2" + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Carica un kernel multiboot" + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Carica un modulo multiboot" + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Modalità immagine di sfondo" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Carica un'immagine XNU" + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Carica un'immagine XNU 64-bit" + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Carica un pacchetto estensione XNU" + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Carica un'estensione XNU" + +# (ndt) quella cosa tra quadre sembra essere un qualche cosa di specifico da Mac/OS X +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIRECTORY [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Carica una directory d'estensione XNU" + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Carica un ramdisk XNU, sarà disponibile nel sistema come md0" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Carica un'immagine splash per XNU" + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Carica un'immagine XNU ibernata" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "IND1,MASCHERA1[,IND2,MASCHERA2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Dichiara regioni della memoria come danneggiate (badram)" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "DA[K|M|G] A[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Rimuove qualsiasi regione della memoria nell'intervallo specificato" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "attesi quattro argomenti" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "interfaccia di rete \"%s\" non riconosciuta" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "nessuna informazione DHCP trovata" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "nessuna opzione DHCP trovata" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "opzione DHCP %d non trovata" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "specificazione di formato DHCP \"%s\" non riconosciuta" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "nessuna scheda di rete trovata" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "impossibile configurare automaticamente %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[SCHEDA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "Esegue una configurazione automatica bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR INTERFACCIA NUMERO DESCRIZIONE" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"Recupera l'opzione DHCP e la salva in VAR, se VAR è - allora stampa il valore" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "nessun server DNS configurato" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "il nome del dominio è troppo lungo" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "nessun record DNS trovato" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "nessuna risposta DNS ricevuta" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "solo ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "solo ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "preferire ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "preferire ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "argomento non valido" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "IND SERVERDNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Esegue un lookup DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "SERVERDNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Aggiunge un server DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Rimuove un server DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Elenca server DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "impossibile inviare pacchetto di rete" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "interpret non è supportato" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "alloc-mem non riuscita" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "free-mem non riuscita" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "risposta HTTP non supportata" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "errore HTTP %d non supportato: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "tempo scaduto nell'aprire \"%s\"" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "tempo scaduto: impossibile risolvere l'indirizzo hardware" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "indirizzo %s non risolvibile" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "indirizzo di rete \"%s\" non riconosciuto" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "destinazione non raggiungibile" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "rilevato ciclo nella rotta" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "indirizzo non trovato" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "impossibile eliminare questo indirizzo" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Tipo d'indirizzo hardware %d non supportato\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Tipo d'indirizzo %d non supportato\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "attesi tre argomenti" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "scheda non trovata" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporaneo" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Tipo d'indirizzo %d sconosciuto\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "nessun server specificato" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "tempo scaduto nel leggere \"%s\"" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "NOMEBREVE SCHEDA INDIRIZZO [INDIRIZZOHW]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Aggiunge un indirizzo di rete" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[SCHEDA [INDIRIZZOHW]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Esegue una configurazione automatica IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "NOMEBREVE" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Elimina un indirizzo di rete" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "NOMEBREVE RETE [INTERFACCIA| gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Aggiunge una rotta di rete" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Elimina una rotta di rete" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "Elenca le rotte" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "Elenca le schede di rete" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "Elenca gli indirizzi di rete" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "connessione rifiutata" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "connessione scaduta" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Inserire il nome utente: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[ELENCOUTENTI]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Verifica che l'utente sia in ELENCOUTENTI" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Possibili comandi sono:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Possibili device sono:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Possibili file sono:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Possibili partizioni sono:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Possibili argomenti sono:" + +# (ndt) interessante... +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Possibili cose sono:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Attenzione: errore di sintassi (manca \"/\") in \"%s\"\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Attenzione: colore di primo piano \"%s\" non valido\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Attenzione: colore di sfondo \"%s\" non valido\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "VARAMB [VARAMB] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Esporta le variabili" + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "domenica" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "lunedì" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "martedì" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "mercoledì" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "giovedì" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "venerdì" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "sabato" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "modulo non caricato" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB versione %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC esce in qualsiasi momento." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Supporto minimale per modifica in stile BASH. Per la prima parola, TAB " +"elenca i completamenti del comando. In altre parti elenca i completamenti " +"possibili per device o file. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Pulisce lo schermo" + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Entra nella modalità normale" + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Esce dalla modalità normale" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Premere un tasto per continuare..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Avvio di \"%s\" in corso" + +# (ndt) qualche cosa di meglio... +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Viene usato \"%s\" come ripiego" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Caricamento delle voci predefinita e di ripiego non riuscito.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Avvio di un elenco di comandi" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Supporto minimale per modifica in stile Emacs. TAB elenca i completamenti. " +"Premere Ctrl-x o F10 per avviare, Ctrl-c o F2 per la riga di comando, Esc " +"per annullare le modifiche e tornare al menù." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Usare i tasti %C e %C per selezionare la voce da evidenziare." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partizione %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Device %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Impossibile accedere al file system" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "File system di tipo %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etichetta \"%s\"" + +# (ndt) lasiato il trattino: la data è nel formato YYYY-MM-DD, l'ultimo è il giorno della settimana +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Ultima modifica %d-%02d-%02d %02d.%02d.%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Nessun file system conosciuto rilevato" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - La partizione inizia a %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Dimensione settore %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Dimensione totale sconosciuta" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Dimensione totale %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--ALTRO--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "impossibile aprire il file di configurazione \"%s\": %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "nessuna compressione disponibile per questa piattaforma" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "nessuna routine IEEE1275 disponibile per questa piattaforma" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "nessuna routine EFI disponibile per questa piattaforma" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "nessuna routine SGI disponibile per questa piattaforma" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" +"nessun generatore di numeri casuali disponibile per questo sistema operativo" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Creazione dell'albero \"device-mapper\" non riuscita" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "impossibile montare il volume cifrato \"%s\": %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "impossibile aprire geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "impossibile trovare utilizzatore geli" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "impossibile recuperare UUID geli" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "impossibile trovare la classe \"part\" di geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "dimensione device non allineata" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "tentativo di leggere l'immagine core \"%s\" da GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "tentativo di leggere nuovamente l'immagine core \"%s\" da GRUB" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "Impossibile leggere \"%s\" correttamente" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "lettura dei settori dell'immagine core non riuscita" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" +"Impossibile recuperare mount da riga di comando per il percorso \"%s\": %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "Mount da riga di comando vuoto per il percorso \"%s\"" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"Mount \"%s\" per il percorso \"%s\" presenta molte parole non-opzioni, " +"almeno \"%s\" e \"%s\"" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"Mount \"%s\" per il percorso \"%s\" presenta solo opzioni, impossibile " +"trovare la parte device" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Le informazioni di archiviazione per \"%s\" non comprendono il tipo" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "\"%s\" non è un disco locale" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Le informazioni di archiviazione per \"%s\" indicano una partizione o un " +"disco normale" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "impossibile recuperare le blocklist: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "la dimensione del blocco non è divisibile per 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "dimensione blocco zero non valida" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "impossibile recuperare le blocklist" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "errore ioctl RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "versione RAID non supportata: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "errore ioctl GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "errore ioctl GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Impossibile aprire lo stream da %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "tipologia di device RAID \"%s\" sconosciuta" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"\"obppath\" non trovato nelle directory superiori di \"%s\", scoperta dei " +"nomi IEEE1275 non disponibile" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "recupero del percorso canonico di \"%s\" non riuscito" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "tipo di device %s sconosciuto" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Uso: %s DEVICE\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Impossibile eseguire fork: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Impossibile creare pipe: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "impossibile ripristinare la directory originale" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "impossibile eseguire stat su \"%s\": %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "impossibile creare un file temporaneo: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "impossibile creare una directory temporanea: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"Impossibile trovare il percorso dell'albero di device IEEE1275 per %s.\n" +"È necessario impostare la variabile \"boot-device\" manualmente." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: non trovato" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"\"nvsetenv\" non riuscita.\n" +"È necessario impostare la variabile \"boot-device\" manualmente. Al prompt " +"IEEE1275 digitare:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "È necessario impostare manualmente \"SystemPartition\" e \"OSLoader\"." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "nessun carattere di slash (/) nel nome canonico del file" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() non riuscita" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "impossibile recuperare dati casuali" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Permessi non sufficienti per accedere al firmware, viene considerato BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "nessuna routine EFI disponibile quando in esecuzione in modalità BIOS" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "errore EFI non atteso" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Impossibile trovare uno slot BootNNNN libero" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"questa etichetta della partizione GPT non contiene BIOS Boot Partition, " +"l'embed non è possibile" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "BIOS Boot Partition è troppo piccola, l'embed non è possibile" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Il settore %llu è già in uso dal controller RAID \"%s\", viene saltato. " +"Informare il costruttore e avvisarlo di non archiviare dati nell'intervallo " +"del MBR." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Il settore %llu è già in uso dal programma \"%s\", viene saltato. Questo " +"software potrebbe causare problemi di avvio, o altri, nel futuro. Informare " +"gli autori e avvisarli di non archiviare dati nell'intervallo del MBR." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"Altro software sta utilizzando l'area di embed e non c'è abbastanza spazio " +"per core.img. Tale software solitamente archivia dati senza possibilità di " +"rilevamento. È consigliato verificare la situazione." + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"L'etichetta della partizione stile msdos non ha un intervallo dopo l'MBR, " +"l'embed non è possibile" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"L'area di embed è troppo piccola. Il file core.img non può esservi contenuto." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Rende la partizione attiva" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "non una partizione primaria" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "La partizione %d è ora attiva.\n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Pulito il flag attivo su %d.\n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Modifica il tipo di partizione" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Imposta il flag \"hidden\" sul tipo della partizione" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "il tipo di partizione 0x%x non è valido" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Impostazione tipo di partizione a 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "impossibile interrompere zero cicli" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "non all'interno del corpo della funzione" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "nome variabile \"%s\" non valido" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "fine file non attesa" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Esce dai cicli" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Continua i cicli" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Cambia i parametri posizionali" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALORE]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Imposta i parametri posizionali" + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Ritorna da una funzione" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FILE" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Carica un'immagine di sfondo per il terminale attivo" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COLORE" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Imposta un colore di sfondo per il terminale attivo" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Mostra il contenuto della console CBMEM" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Imposta l'unità seriale" + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Imposta l'indirizzo della porta seriale" + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Imposta la velocità della porta seriale" + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Imposta la lunghezza della parola della porta seriale" + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Imposta la parità della porta seriale" + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Imposta i bit di stop della porta seriale" + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Imposta la frequenza di base" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Abilita/Disabilita RTS/CTS" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "porta seriale \"%s\" non trovata" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "velocità di controllo della porta seriale non supportata" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPZIONI...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Configura la porta seriale" + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "tipo di terminfo \"%s\" sconosciuto" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "UTF-8 in ordine visuale" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Codifica sconosciuta" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Tipologie di terminfo correnti:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Il terminale è solamente ASCII [predefinito]" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Il terminale è UTF-8 in ordine logico" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Il terminale è UTF-8 in ordine visuale" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Il terminale ha la geometria specificata" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "LARGHEZZAxALTEZZA" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "specifiche di dimensioni del terminale non corrette" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "il terminale %s non è stato trovato o non è gestito da terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g LxA] TERM [TIPO]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Imposta il tipo TERM di terminfo a TIPO\n" + +# (ndt) non molto chiara +# guardando il codice, pare sia assieme a una stringa BLOCK che è tradotta da un'altra parte, ma potrebbe essere anche il "blocco d'ambiente" di poco dopo... +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Stampa ed esegue l'argomento BLOCCO" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "il formato del file bitmap \"%s\" non è supportato" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " Info VBE: versione: %d.%d Rev. software OEM: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " memoria totale: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "non è stata trovata alcuna modalità video adatta" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "accesso negato" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULI" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "Pre-carica i MODULI specificati" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "Installa solo i MODULI e le loro dipendenze [predefinito=all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEMI" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "Installa i TEMI [predefinito=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "CARATTERI" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "Installa i CARATTERI [predefinito=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LINGUE" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "Installa solo LINGUE [predefinito=all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "Comprime i file GRUB [opzionale]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "Sceglie la compressione da usare per l'immagine core" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "Usa immagini e moduli in DIR [predefinito=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "Usa le traduzioni in DIR [predefinito=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "Usa i temi in DIR [predefinito=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "Incorpora FILE come chiave pubblica per la verifica della firma" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "impossibile rinominare il file %s in %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "il disco non esiste, viene usato il device di partizione %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Comandi:" + +# (ndt) vedi nota poco sotto su environment block... +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Crea un file di blocco dell'ambiente vuoto" + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Elenca le variabili attuali" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NOME=VALORE ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Imposta le variabili" + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NOME ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Elimina le variabili" + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opzioni:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "È necessario specificare almeno un comando.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "NOMEFILE COMANDO" + +# (ndt) blocco d'ambiente fa un po' pena devo dire... forse è il caso di lasciare "environment block", è una cosa abbastanza tecnica... +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Strumento per modificare il blocco dell'ambiente." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Se NOMEFILE è \"-\", viene usato il valore predefinito %s.\n" +"\n" +"Non c'è un comando \"delete\", per eliminare tutto il blocco\n" +"dell'ambiente, usare \"rm %s\"." + +# (ndt) blocco d'ambiente fa un po' pena devo dire... forse è il caso di lasciare "environment block", è una cosa abbastanza tecnica... +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "blocco dell'ambiente non valido" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "parametro %s non valido" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "blocco dell'ambiente troppo piccolo" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "lettura disco non riuscita all'offset %lld, lunghezza %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "valore di salto %lld non valido" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "errore di lettura all'offset %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "impossibile aprire il file \"%s\" del sistema operativo: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "impossibile scrivere sullo standard output: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "confronto non riuscito all'offset %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Errore nell'aprire il file di sistema %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "comando \"loopback\" non riuscito: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "comando \"cryptomount\" non riuscito: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "impossibile recuperare UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PERCORSO" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Elenca i file in PERCORSO" + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FILE LOCALE" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Copia FILE su un file LOCALE" + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FILE" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Copia il file sullo standard output" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FILE LOCALE" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Confronta FILE con un file LOCALE" + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FILE" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Mostra il contenuto di FILE in esadecimale" + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FILE" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Calcola il checksum crc32 di FILE" + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FILE" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Visualizza la blocklist di FILE" + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid DEVICE" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Calcola l'UUID XNU di DEVICE" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Salta N byte dal file di output" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Gestisce N byte nel file di output" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Specifica il numero di file di input" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Imposta la variabile di debug dell'ambiente" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Monta dispositivi cifrati" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FILE|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Carica chiave cifratura ZFS" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Decomprime i dati" + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Conteggio dischi non valido.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Il conteggio dei dischi deve precedere l'elenco dei dischi.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Nessun comando specificato.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Parametri del comando non sufficienti.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Comando %s non valido.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "PERCORSO_IMG COMANDI" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Strumento di debug per il driver del file system." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "Imposta il nome del file di input per la parte 32-bit" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "Imposta il nome del file di input per la parte 64-bit" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "Imposta il nome del file di output, predefinito è STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPZIONI]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Agglomera binari 32-bit e 64-bit in un binario Apple universale" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "File di input mancante\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "impossibile copiare \"%s\" su \"%s\": %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "impossibile comprimere \"%s\" in \"%s\"" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "impossibile aprire la directory \"%s\": %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "impossibile eliminare \"%s\": %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage è stato compilato senza il supporto a XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Formato di compressione %s sconosciuto" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Compressione \"%s\" non riconosciuta" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "formato %s dell'obiettivo sconosciuto" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "impossibile trovare la lingua \"%s\"" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s non esiste: specificare --target o --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "file modinfo \"%s\" non valido" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Piattaforma \"%s-%s\" sconosciuta" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Più di un device d'installazione?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "installa le immagini GRUB nella directory DIR/%s invece che %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "OBIETTIVO" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"Installa GRUB sulla piattaforma OBIETTIVO [predefinito=%s]; disponibili: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"Rende l'unità avviabile anche come un floppy (predefinito per i device fdX); " +"potrebbe provocare malfunzionamenti con alcuni BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "Elimina la mappa dei dispositivi se esiste già" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "Installa anche se vengono rilevati problemi" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "Usa il file identificativo anche se è disponibile lo UUID" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"Modulo disco da usare (\"biosdisk\" o \"native\"); quest'opzione è " +"disponibile solo su BIOS" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"Non aggiorna le variabili \"boot-device\"/\"Boot*\" NVRAM; quest'opzione è " +"disponibile solo su EFI e IEEE1275" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "Non esamina i file system in DEVICE" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "Non installa il bootsector" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Non applica alcun codice reed-solomon quando viene incorporata core.img; " +"quest'opzione è disponibile solo su BIOS x86" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"Il dispositivo d'installazione è rimovibile; quest'opzione è disponibile " +"solo su EFI" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "L'ID del bootloader, questa opzione è disponibile solo su EFI e Mac" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "Usa DIR come radice EFI System Partition" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "Usa DIR per installazione PPC MAC" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "Usa FILE come carattere per l'etichetta" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "Usa COLORE per l'etichetta" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "Usa COLORE per lo sfondo dell'etichetta" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "Usa STRINGA come versione del prodotto" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPZIONI] [DEVICE_INSTALLAZIONE]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Installa GRUB sull'unità." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"DEVICE_INSTALLAZIONE deve essere un nome di un device di sistema.\n" +"%s copia le immagini GRUB in %s. Su alcune piattaforme può anche installare " +"GRUB nel settore di avvio." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "l'unità %s è definita molteplici volte nella mappa dei device %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Impossibile determinare la piattaforma. Utilizzare --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installazione per la piattaforma %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "device d'installazione non specificato" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "impossibile trovare la directory EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "impossibile trovare un device per %s (/dev è montato?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "impossibile trovare un'unità GRUB per %s, controllare device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s non sembra essere una partizione EFI" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Scoperto un bug" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "il file system su %s non è né HFS né HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"tentativo di installare su un disco cifrato, ma con cryptodisk disabilitato: " +"impostare \"%s\" nel file \"%s\"" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Impossibile creare il file: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"nessun suggerimento disponibile per questa piattaforma: aspettarsi " +"prestazioni ridotte." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "Non in esecuzione: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "la partizione selezionata non è una partizione PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "copia di GRUB nella partizione PReP non riuscita" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"la partizione PReP non è vuota; per utilizzarla veramente, eseguire dd per " +"pulirla: \"%s\"" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Bootloader EFI non specificato." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" +"Attenzione: non è stata eseguita alcuna installazione specifica per la " +"piattaforma" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installazione completata, nessun errore segnalato." + +# (ndt) bless inteso come il comando bless di grub. +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bless per mac basati su x86" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bless per mac basati su ppc" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Nessun percorso o device specificato.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc PERCORSO|--x86 FILE" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Comando bless su HFS o HFS+ per Mac" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Uso: %s [FILE_IN [FILE_OUT]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Errore Freetype %d nel caricare il glifo 0x%x per U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (mediano)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (più a sinistra)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (più a destra)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Sostituzione fuori intervallo (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Lookup fuori intervallo: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Tipo di sostituzione non supportato: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Specifica di sostituzione non supportata: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Specifica di coverage non supportata: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "Attenzione: parametri del carattere non supportati: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "Salva l'output su FILE [richiesto]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "Seleziona l'indice del carattere" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "DA-A[,DA-A]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "Imposta l'intervallo dei caratteri" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "Imposta la famiglia del carattere" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "DIM" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "Imposta la dimensione del carattere" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "Imposta il tratto discendente" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "Imposta il tratto ascendente" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "Converte in carattere grassetto" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "Forza l'autohint" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "Disabilita l'hinting" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "Ignora le bitmap durante il caricamento" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "intervallo di caratteri non valido" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPZIONI] FILE_CARATTERE" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Converte il formato del file del carattere in PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "deve essere specificato un file di output" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType non riuscita" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "impossibile aprire il file %s, indice %d: errore %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" +"impossibile impostare la dimensione del carattere a %d×%d: errore %d di " +"Freetype: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "Imposta il prefisso della directory" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"Incorpora FILE come immagine memdisk\n" +"Implica \"-p (memdisk)/boot/grub\" e sovrascrive qualsiasi prefisso passato\n" +"precedentemente, ma il prefisso può essere sovrascritto da opzione successive" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "Incorpora FILE come configurazione primaria" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "Aggiunge segmento NOTA per CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "Fornisce in output su FILE un'immagine generata [predefinito=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMATO" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "Genera un'immagine nel FORMATO" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "Formati disponibili:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "formato %s dell'obiettivo sconosciuto\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPZIONE]... [MODULI]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Crea un'immagine avviabile di GRUB" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Formato dell'obiettivo non specificato (usare l'opzione -O)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Prefisso non specificato (usare l'opzione -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"\"%s\" non è compilato correttamente: l'indirizzo iniziale è 0x%llx invece " +"di\n" +"0x%llx: un bug di ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "Imposta il nome del file di input, predefinito è STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Identificatore tasto %s sconosciuto\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Codice numerico 0x%02x sconosciuto\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"ERRORE: non è stata trovata alcuna disposizione di tastiera valida. " +"Controllare l'input.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" +"Genera disposizione di tastiera GRUB a partire da quella della console Linux" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "directory root del server TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "sotto-directory relativa sul server di rete" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Prepara le immagini GRUB avviabili da rete in directory_di_rete/sottodir, " +"assumendo directory_di_rete come root di TFTP" + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "piattaforma non supportata %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Directory netboot per %s creata. Configurare il server DHCP affinché punti a " +"%s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Numero di iterazioni PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Lunghezza dell'hash generato" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Lunghezza del salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Genera hash password PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "lettura password non riuscita" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Reinserire la password:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "le password non corrispondono" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "impossibile recuperare dati casuali per il salt" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "errore di cifratura n° %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "L'hash PBKDF2 della password è %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Nessun percorso specificato.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "PERCORSO" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Trasforma il nome file di sistema in uno di GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "Salva le immagini ROM in DIR [opzionale]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "Usa FILE come xorriso [opzionale]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "Usa STRINGA come nome del prodotto" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"Abilita avvio sparc, disabilita HFS+, APM, ARCS e avvia come immagine disco " +"per PC i386" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"Abilita avvio ARCS (macchine mips big-endian, principalmente SGI), " +"disabilita HFS+, APM, sparc64 e avvia come immagine disco per PC i386" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Crea un'immagine avviabile di GRUB da CD-ROM, disco, chiavetta USB o floppy" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Genera un'immagine CD/USB/dischetto avviabile. Gli argomenti non pertinenti " +"a questo programma sono passati a xorriso e indicano file sorgenti, " +"directory sorgenti o qualsiasi altra opzione di mkisofs come dall'output di " +"\"%s\"." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "L'opzione -- passa alla modalità di comando nativa di xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"Inviare le richieste di supporto riguardo xorriso a ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPZIONE] SORGENTE..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "abilitazione supporto %s..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Questa versione di xorriso non supporta \"--grub2-boot-info\": alcune " +"funzionalità sono disabilitate. Utilizzare xorriso 1.2.9 o successivi." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Questa versione di xorriso non supporta \"--grub2-boot-info\": l'immagine " +"core è troppo grande, l'avvio come disco è disabilitato. Usare xorriso 1.2.9 " +"o successivi." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Genera un'immagine autonoma (contenente tutti i moduli) nel formato " +"selezionato" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"La sintassi per i punti d'innesto (es.: /boot/grub/grub.cfg=./grub.cfg) è " +"accettata" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMMAGINE1 [IMMAGINE2 ...] PUNTODIMOUNT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "immagine e punto di mount necessari" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "l'argomento fornito è un device di sistema, non un percorso" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "Separa gli elementi nell'output con caratteri ASCII NUL" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[predefinito=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "Stampa OBIETTIVO" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "Obiettivi disponibili:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPZIONE]... [PERCORSO|DEVICE]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Cerca informazioni sul device per un percorso fornito (o device se usato con " +"l'opzione -d)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "Legge del testo da FILE" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "Usa COLORE per il testo" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "Usa COLORE per lo sfondo" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "Imposta l'etichetta da creare" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "Utilizza FILE come tipo di carattere (PF2)" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Visualizza .disk_label Apple" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Argomenti mancanti\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[PERCORSO]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Verifica la presenza di errori di sintassi nello script di configurazione " +"GRUB" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Errore di sintassi alla riga %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Lo script \"%s\" non contiene alcun comando e non eseguirà nulla\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "Usa FILE come immagine di avvio [predefinito=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "Usa FILE come immagine core [predefinito=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Nessun device specificato.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Imposta le immagini affinché vengano avviate da DEVICE.\n" +"\n" +"Questo programma non dovrebbe essere eseguito direttamente. Usare grub-" +"install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "DEVICE deve essere un device del sistema operativo (come /dev/sda)" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Device \"%s\" non valido.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "Directory di root come vista durante l'esecuzione [predefinito=/]" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"Directory attuale di syslinux come vista durante l'esecuzione [predefinito " +"la directory superiore del file di input]" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "Scrive l'output su FILE [predefinito=stdout]" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Trasforma la configurazione syslinux in una GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "impossibile comprimere l'immagine del kernel" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "compressione %d sconosciuta" + +# (ndt) boh... +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "L'estrattore è troppo grande" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "l'immagine core è troppo grande (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "l'immagine kernel è troppo grande (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "la dimensione di diskboot.img deve essere di %u byte" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img non corrisponde alla versione consciuta, procedere a proprio " +"rischio" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "l'immagine firmware è troppo grande" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "formato riga non valido: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "Il primo settore del file core non è allineato rispetto al settore" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "Trovati dati non allineati rispetto al settore nel file core" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "I settori del file core sono troppo frammentati" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "La dimensione di \"%s\" non è %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "La dimensione di \"%s\" è troppo piccola" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Tentativo di installare GRUB su un disco con molteplici etichette di " +"partizioni o sia con etichetta di partizione e file system. Tale pratica non " +"è ancora supportata." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"Impossibile identificare un file system in %s; non è possibile eseguire un " +"controllo di sicurezza" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Sembra che %s contenga un file system %s di cui non è noto se sia in grado " +"di riservare dello spazio per l'avvio in stile DOS. Installare GRUB qui " +"potrebbe portare alla DISTRUZIONE del file system se dati importanti vengono " +"sovrascritti da grub-setup (--skip-fs-probe disabilita questo controllo, " +"usare a proprio rischio)." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Sembra che %s contenga una mappa delle partizioni %s di cui non è noto se " +"sia in grado di riservare dello spazio per l'avvio in stile DOS. Installare " +"GRUB qui potrebbe portare alla DISTRUZIONE del file system se dati " +"importanti vengono sovrascritti da grub-setup (--skip-fs-probe disabilita " +"questo controllo, usare a proprio rischio)." + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Sembra che %s contenga una mappa delle partizioni %s e LDM di cui non è noto " +"se sia una combinazione sicura. Installare GRUB qui potrebbe portare alla " +"DISTRUZIONE del file system se dati importanti vengono sovrascritti da grub-" +"setup (--skip-fs-probe disabilita questo controllo, usare a proprio rischio)." + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Tentativo di installare GRUB su un disco privo di partizioni o su una " +"partizione. Tale pratica non è raccomandabile." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Tentativo di installare GRUB su un disco con molteplici etichette di " +"partizioni. Tale pratica non è ancora supportata." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "La partizione in stile \"%s\" non supporta l'embed" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Il file system \"%s\" non supporta l'embed" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"L'area di embed è troppo piccola. Il file core.img non può esservi contenuto." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "Nessun terminatore nell'immagine core" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "versione core.img non corrispondente" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"L'embed non è possibile, ma è richiesto per l'installazione su RAID e LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "impossibile determinare il file system su %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "il file system \"%s\" non supporta le blocklist" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"L'embed non è possibile, ma è richiesto per l'installazione su più dischi" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"L'embed non è possibile. GRUB può essere installato con questa " +"configurazione solo usando blocklist. Le blocklist non sono comunque " +"affidabili e ne viene sconsigliato l'uso." + +# (ndt) un po' libera... +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "impossibile procedere con le blocklist" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "blocklist non valide" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "blocklist incomplete" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Uso: %s -o OUTPUT ARGOMENTI_CKBMAP...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Crea file disposizione tastiera di GRUB" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "Stampa questo messaggio ed esce" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "Stampa informazioni di versione ed esce" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s genera una disposizione di tastiera per GRUB utilizzando ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Segnalare i bug a ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: l'opzione richiede un argomento -- \"%s\"\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Uso: %s [OPZIONE]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Genera un file di configurazione GRUB." + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "Invia la configurazione creata su FILE [predefinito=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Opzione \"%s\" non riconosciuta\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: è necessario eseguirlo come root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: non trovato\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Generazione file di configurazione GRUB..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Errori di sintassi sono stati rilevati nel file di configurazione\n" +"di GRUB generato. Assicurarsi che non vi siano errori in\n" +"/etc/default/grub e /etc/grub.d/* o segnalare un bug allegando\n" +"il file %s." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "fatto" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Attenzione:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Uso: %s [OPZIONE] VOCE_MENÙ\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Imposta la voce di menù d'avvio predefinita per GRUB, solo per il successivo " +"avvio." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "Si aspetta le immagini GRUB nella directory DIR/%s invece che %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"VOCE_MENÙ è un numero, il titolo o un identificatore di un elemento del " +"menù. Gli elementi\n" +"nei sotto-menù o nei sotto-sotto-menù richiedono di specificare prima il " +"sotto-menù\n" +"e quindi l'elemento del menù. I titoli devono essere separati usando il " +"simbolo di\n" +"maggiore (>) senza spazi aggiuntivi. In base alla propria shell, alcuni " +"simboli come\n" +"> possono necessitare di escape. Per maggiori informazioni, consultare il " +"manuale\n" +"di GRUB nella sezione sul comando \"default.\"" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Più di una voce di menù?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Voce di menù non specificata." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Imposta la voce di menù d'avvio predefinita per GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Ciò necessita l'impostazione di GRUB_DEFAULT=saved in %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"VOCE_MENÙ è un numero, il titolo o un identificatore di un elemento del menù" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Richiesto terminale seriale, ma GRUB_SERIAL_COMMAND non è specificata. " +"Verranno usati i parametri predefiniti." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Tema trovato: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Trovato sfondo: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Formato immagine non supportato" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"L'impostazione di GRUB_TIMEOUT a un valore diverso da zero quando " +"GRUB_HIDDEN_TIMEOUT è impostato, non è più supportato." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Trovato GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Trovato modulo Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Trovati alcuni elementi di Hurd, ma troppo pochi per eseguire il boot." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, con Hurd %s (modalità ripristino)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, con Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Non usare il vecchio titolo \"%s\" per GRUB_DEFAULT, utilizzare \"%s\" (per " +"versioni prima di 2.00) o \"%s\" (per 2.00 o successive)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Caricamento GNU Mach..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Caricamento Hurd..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Opzioni avanzate per %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Caricamento kernel per Illumos..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, con kFreeBSD %s (modalità ripristino)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, con kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Caricamento kernel per FreeBSD %s..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Trovato kernel di FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Trovata directory moduli kernel: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, con Linux %s (modalità ripristino)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, con Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Caricamento Linux %s..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Caricamento ramdisk iniziale..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Trovata immagine linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Trovata immagine initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, con kernel %s (via %s, modalità ripristino)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, con kernel %s (via %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Trovato kernel NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (caricatore)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (caricatore)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Trovato %s su %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32 bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64 bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(su %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, con Xen %s e Linux %s (modalità ripristino)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, con Xen %s e Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, con hypervisor Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Caricamento Xen %s..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Hypervisor Xen, versione %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Opzioni avanzate per %s (con hypervisor Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Trovato %s su %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s non è ancora supportato da grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Flag di sostituzione non supportato: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Caratteristica 0x%x di gsub sconosciuta (%s)\n" diff --git a/po/ja.gmo b/po/ja.gmo new file mode 100644 index 0000000000000000000000000000000000000000..67e67987650fd1153fca1f374e7a43b9530348ab GIT binary patch literal 23326 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 ID7T;g1Af5m4gdfE literal 0 HcmV?d00001 diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 000000000..8dd933238 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,7012 @@ +# Japanese messages for grub +# Copyright (C) 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Yasuaki Taniguchi , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.0.0-pre6\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2012-10-11 05:55+0900\n" +"Last-Translator: Takeshi Hamasaki \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "サポートされていないシリアルポートの速度です" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "サポートされていないシリアルポートのパリティです" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "サポートされていないシリアルポートのストップビット値です" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "サポートされていないシリアルポートのワード長です" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "カンマ区切りのリストで指定されたホストテーブルをロードしません。" + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "カンマ区切りのリストで指定されたテーブルのみロードします。" + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "バージョン1 テーブルをOSにエクスポートします。" + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "バージョン2, バージョン3 テーブルをOSにエクスポートします。" + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT, RSDT の OEMID を設定する" + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT, RSDT の OEMTABLE ID を設定する" + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT, RSDT の OEMTABLE リビジョンを設定する" + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT, RSDT の製造者フィールドを設定する" + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT, RSDT の製造者リビジョンを設定する" + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +#, fuzzy +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"EBDAをアップデートしないで下さい。この操作により、欠陥が直ることも、BIOSがハ" +"ングすることもあるかもしれません。GRUBからRSDPを受け取っていないOSでは、この" +"操作は無効です。" + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, fuzzy, c-format +msgid "premature end of file %s" +msgstr "コメント内でファイル終端 (EOF) に達しました" + +#: grub-core/commands/acpi.c:779 +#, fuzzy +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=table1,table2] FILE1 [FILE2] " +"[...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "引数で指定されたテーブルとホスト ACPI テーブルをロードしてください。" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "エラー: %s。\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +#, fuzzy +msgid "out of memory" +msgstr "メモリをダンプする" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, fuzzy, c-format +msgid "cannot read `%s': %s" +msgstr " @FILE オプションを FILE から読み込む\n" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI シャットダウン失敗" + +#: grub-core/commands/arc/lsdev.c:51 +#, fuzzy +msgid "List devices." +msgstr "Bluetooth デバイス" + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FILE" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "ブロックリストを表示します。" + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "まずカーネルをロードする必要があります" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "オペレーティングシステムを起動します。" + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "ディスクキャッシュ情報を取得します。" + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "DOSスタイルのCR/NL行末コードを受け付けます。" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "ファイルの内容を表示します。" + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "2つの引数が必要です" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "ファイル `%s' と `%s' を比較:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "2つのファイルは同じものです。\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FILE1 FILE2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "2つのファイルを比較します。" + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "他の設定ファイルをロードします。" + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "コンテキストを変更せずに他の設定ファイルをロードします。" + +#: grub-core/commands/configfile.c:75 +#, fuzzy +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"コンテキストを変えずメニューエントリのみを使って別の設定ファイルを読み込みま" +"す。" + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "" +"コンテキストを変えずメニューエントリのみを使って別の設定ファイルを読み込みま" +"す。" + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[年-]月-日] [時:分[:秒]]" + +#: grub-core/commands/date.c:142 +#, fuzzy +msgid "Display/set current datetime." +msgstr "現在日時を表示/設定するコマンド。" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "末尾の改行を出力しない。" + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "バックスラッシュによるエスケープを有効にする。" + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] 文字列" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "1行のテキストを表示する。" + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "ビデオ出力の問題を修正する。" + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROMイメージが存在します。" + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "ROM領域を有効にできません。" + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "BIOSのダンプリストをロードする。" + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "STRING" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "-- カーネルのバイナリパッケージ:" + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "multiboot 2のカーネルをロードする" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr " @FILE オプションを FILE から読み込む\n" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +#, fuzzy +msgid "no such partition" +msgstr " -W --no-warn 警告を抑止する\n" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DEVICE [PARTITION[+/-[TYPE]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"GPTドライブ DEVICE のハイブリッドMBRを埋めます。指定したパーティションがハイ" +"ブリッドMBRの一部になります。3パーティションまで利用が可能です。TYPEはMBRの" +"タイプを示します。+はパーティションがアクティブな事を示します。アクティブに" +"なれるのはただ一つのパーティションのみです。" + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"コンピュータを停止します。このコマンドはすべてのファームウェア実装で動作する" +"とは限りません。" + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "利用するハッシュを指定してください。" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "ハッシュリストのベースディレクトリ" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "最初のエラーの後停止しません。" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "チェックサムを計算する前にファイルを解凍します。" + +#: grub-core/commands/hashsum.c:165 +#, fuzzy, c-format +msgid "%s: READ ERROR\n" +msgstr "libnotify の初期化に失敗しました" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "" + +#: grub-core/commands/hashsum.c:284 +#, fuzzy +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "ハッシュチェックサムを計算または確認します。" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Advanced Power Management を設定します。\n" +"(1=low, ..., 254=high, 255=off)" + +#: grub-core/commands/hdparm.c:36 +#, fuzzy +msgid "Display power mode." +msgstr "エミュレーションモード名がありません" + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "リセットするまで ATA セキュリティ設定を凍結します。" + +#: grub-core/commands/hdparm.c:39 +#, fuzzy +msgid "Display SMART health status." +msgstr "SMART のヘルスステータスを確認してください。" + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Automatic Acoustic Management を設定します。\n" +"(0=off, 128=quiet, ..., 254=fast)" + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"スタンバイのタイムアウトを設定します。\n" +"(0=off, 1=5秒, 2=10秒, ..., 240=20分, 241=30分, ...)" + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "ドライブをスタンバイモードに設定します。" + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "ドライブをスリープモードに設定します。" + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "ドライブ ID と設定を印刷します。" + +#: grub-core/commands/hdparm.c:50 +#, fuzzy +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "ATA IDENTIFY セクタの内容をダンプします。" + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART を無効/有効にします。(0/1)" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "メッセージを表示しません。" + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +#, fuzzy +msgid "one argument expected" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIONS] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA ディスクの設定値を取得/設定します。" + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "使い方:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[PATTERN ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "ヘルプを表示します。" + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "ファイルの始めからoffsetバイトをスキップします。" + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "LENGTH バイトだけ読み出す" + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIONS] FILE_OR_DEVICE" + +#: grub-core/commands/hexdump.c:126 +#, fuzzy +msgid "Show raw contents of a file or memory." +msgstr "ファイルまたはメモリの内容をダンプします。" + +#: grub-core/commands/i386/cmosdump.c:58 +#, fuzzy +msgid "Show raw dump of the CMOS contents." +msgstr " --target-help ターゲット固有のオプションを表示する\n" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +#, fuzzy +msgid "List coreboot tables." +msgstr "信頼のデバイスよりファイル送信を許可" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +#, fuzzy +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "ロングモードフラグを確認する(既定値)" + +#: grub-core/commands/i386/cpuid.c:37 +#, fuzzy +msgid "Check if CPU supports Physical Address Extension." +msgstr "ロングモードフラグを確認する(既定値)" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "CPUの仕様を確認する" + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "現在のマッピングを表示します。" + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "全てのマッピングを既定値にリセットする" + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "直接と反転マッピングの両方をおこなう" + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "BIOS ドライブマッピングを管理します。" + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "コンピュータを停止するのに APM を使用しません。" + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "APM が使えるなら、コンピュータを停止してください。" + +#: grub-core/commands/i386/pc/lsapm.c:75 +#, fuzzy +msgid "no APM found" +msgstr " -W --no-warn 警告を抑止する\n" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +#, fuzzy +msgid "APM enabled\n" +msgstr "サウンドを有効にするかどうか" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "APM情報を表示する。" + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, fuzzy, c-format +msgid "file `%s' not found" +msgstr "%s はディレクトリではありません!" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +#, fuzzy +msgid "unrecognized number" +msgstr "アンカーの数" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "曲を鳴らす" + +#: grub-core/commands/i386/pc/sendkey.c:39 +#, fuzzy +msgid "set numlock mode" +msgstr " VALUE 設定する値\n" + +#: grub-core/commands/i386/pc/sendkey.c:40 +#, fuzzy +msgid "set capslock mode" +msgstr " VALUE 設定する値\n" + +#: grub-core/commands/i386/pc/sendkey.c:41 +#, fuzzy +msgid "set scrolllock mode" +msgstr " VALUE 設定する値\n" + +#: grub-core/commands/i386/pc/sendkey.c:42 +#, fuzzy +msgid "set insert mode" +msgstr " VALUE 設定する値\n" + +#: grub-core/commands/i386/pc/sendkey.c:43 +#, fuzzy +msgid "set pause mode" +msgstr " VALUE 設定する値\n" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:47 +#, fuzzy +msgid "press NumLock key" +msgstr " KEY スキーマ内のキー\n" + +#: grub-core/commands/i386/pc/sendkey.c:48 +#, fuzzy +msgid "press CapsLock key" +msgstr " KEY スキーマ内のキー\n" + +#: grub-core/commands/i386/pc/sendkey.c:49 +#, fuzzy +msgid "press ScrollLock key" +msgstr " KEY スキーマ内のキー\n" + +#: grub-core/commands/i386/pc/sendkey.c:50 +#, fuzzy +msgid "press Insert key" +msgstr " KEY スキーマ内のキー\n" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +#, fuzzy +msgid "Emulate a keystroke sequence" +msgstr " 出力をエミュレートする (デフォルト %s)\n" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:45 +#, fuzzy +msgid "Return to IEEE1275 prompt." +msgstr "メインメニューに戻るには「取消」を選びます。" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "読出し値を変数VARNAMEに保存します。" + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +#, fuzzy +msgid "Read 8-bit value from PORT." +msgstr "PORT からバイトを読み込む。" + +#: grub-core/commands/iorw.c:127 +#, fuzzy +msgid "Read 16-bit value from PORT." +msgstr "PORT からバイトを読み込む。" + +#: grub-core/commands/iorw.c:131 +#, fuzzy +msgid "Read 32-bit value from PORT." +msgstr "PORT からバイトを読み込む。" + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VALUE [MASK]" + +#: grub-core/commands/iorw.c:136 +#, fuzzy +msgid "Write 8-bit VALUE to PORT." +msgstr "バイト値 VALUE を PORT へ書き込む。" + +#: grub-core/commands/iorw.c:140 +#, fuzzy +msgid "Write 16-bit VALUE to PORT." +msgstr "バイト値 VALUE を PORT へ書き込む。" + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VALUE [MASK]" + +#: grub-core/commands/iorw.c:144 +#, fuzzy +msgid "Write 32-bit VALUE to PORT." +msgstr "バイト値 VALUE を PORT へ書き込む。" + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "変数 `%s' が設定されていません" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "キーボード配列を読み込む。" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Shift キーを検査する。" + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Control キーを検査する。" + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Alt キーを検査する。" + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "キー修飾子の状態をチェックする" + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, fuzzy, c-format +msgid "can't find command `%s'" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "パスワードを入力してください: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "" + +#: grub-core/commands/legacycfg.c:847 +#, fuzzy +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"コンテキストを変えずメニューエントリのみを使って別の設定ファイルを読み込みま" +"す。" + +#: grub-core/commands/legacycfg.c:852 +#, fuzzy +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"コンテキストを変えずメニューエントリのみを使って別の設定ファイルを読み込みま" +"す。" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +#, fuzzy +msgid "FILE [ARG ...]" +msgstr "ファイルの選択" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +#, fuzzy +msgid "[--md5] PASSWD [FILE]" +msgstr "ファイルの共有 (FTP)" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "ファイル名を指定する" + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FILE] variable_name [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "環境ブロックファイルから変数をロードする" + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FILE]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "環境ブロックファイルから変数をリスト表示する" + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FILE] variable_name [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "環境ブロックファイルに変数を保存する" + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "" + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "" + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "すべてのファイルをリスト表示する" + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "ネットワークプロトコル:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FILE ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "デバイスとファイルをリスト表示する" + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:306 +#, fuzzy +msgid "Show ACPI information." +msgstr " -g --gen-debug デバッグ情報を生成する\n" + +#: grub-core/commands/lsmmap.c:31 +#, fuzzy +msgid "available RAM" +msgstr "E: X サーバーが使用できなければいけません。" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "ファームウエアによって規定されたメモリマップを表示する" + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCIデバイスをリスト表示する" + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +#, fuzzy +msgid "Read 8-bit value from ADDR." +msgstr "ADDR からバイトを読み込む。" + +#: grub-core/commands/memrw.c:129 +#, fuzzy +msgid "Read 16-bit value from ADDR." +msgstr "ADDR からバイトを読み込む。" + +#: grub-core/commands/memrw.c:133 +#, fuzzy +msgid "Read 32-bit value from ADDR." +msgstr "ADDR からバイトを読み込む。" + +#: grub-core/commands/memrw.c:138 +#, fuzzy +msgid "Write 8-bit VALUE to ADDR." +msgstr "バイト値 VALUE を ADDR に書き込む。" + +#: grub-core/commands/memrw.c:142 +#, fuzzy +msgid "Write 16-bit VALUE to ADDR." +msgstr "バイト値 VALUE を ADDR に書き込む。" + +#: grub-core/commands/memrw.c:146 +#, fuzzy +msgid "Write 32-bit VALUE to ADDR." +msgstr "バイト値 VALUE を ADDR に書き込む。" + +#: grub-core/commands/menuentry.c:31 +#, fuzzy +msgid "Menu entry type." +msgstr "チェック・メニュー項目" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRING" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:36 +#, fuzzy +msgid "KEYBOARD_KEY" +msgstr " KEY スキーマ内のキー\n" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +#, fuzzy +msgid "Menu entry identifier." +msgstr "チェック・メニュー項目" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCK" + +#: grub-core/commands/menuentry.c:323 +#, fuzzy +msgid "Define a menu entry." +msgstr "チェック・メニュー項目" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "このメッセージを表示する" + +#: grub-core/commands/minicmd.c:201 +#, fuzzy +msgid "ADDR [SIZE]" +msgstr "現在のサイズ:" + +#: grub-core/commands/minicmd.c:201 +#, fuzzy +msgid "Show memory contents." +msgstr " --target-help ターゲット固有のオプションを表示する\n" + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULE" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "モジュールを削除する" + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "ロードされたモジュールを表示する" + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "GRUBを終了する" + +#: grub-core/commands/mips/loongson/lsspd.c:42 +#, fuzzy +msgid "No CS5536 found" +msgstr " -W --no-warn 警告を抑止する\n" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, fuzzy, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "%s: `%s' は `%s' にマウントされています\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, fuzzy, c-format +msgid "RAM slot number %d\n" +msgstr "アクセス可能な HyperText リンクの数" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +#, fuzzy +msgid "Memory type: DDR2." +msgstr "IM $IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を削除。" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, fuzzy, c-format +msgid "Part no: %s.\n" +msgstr "(名前無し)" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +#, fuzzy +msgid "Memory type: Unknown." +msgstr "不明なエスケープ '\\%c' が文字列内にあります。無視されました" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +#, fuzzy +msgid "Print Memory information." +msgstr " -g --gen-debug デバッグ情報を生成する\n" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, fuzzy, c-format +msgid "unknown argument `%s'" +msgstr "不明で余分な引数 `%s' です。\n" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "ユーザーパスワード" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"ユーザーパスワード(プレーンテキスト)を設定する。非推奨で安全ではありません" + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +#, fuzzy +msgid "invalid PBKDF2 password" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/commands/password_pbkdf2.c:202 +#, fuzzy +msgid "USER PBKDF2_PASSWORD" +msgstr "ユーザー間の切り替えを許可するかどうか" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "" + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +#, fuzzy +msgid "[vendor]:[device]" +msgstr "デバイスを追加中。。。" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +#, fuzzy +msgid "[bus]:[slot][.func]" +msgstr "インテリジェントインプットバス (IBus)を有効にする" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, fuzzy, c-format +msgid "missing `%c' symbol" +msgstr "設定ファイルの欠落。" + +#: grub-core/commands/pcidump.c:168 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE]" +msgstr "%(service)s on %(device)s" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "戻り値に変数を設定する" + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "ドライバーを決定する" + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "パーティションマップの形式を決定する" + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "ファイルシステムの形式を決定する" + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "ファイルシステムのUUIDを決定する" + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "ファイルシステムのラベルを決定する" + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DEVICE" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "デバイス情報を取得する" + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "ユーザー入力により変数を設定する" + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "コンピュータを再起動する" + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMBER:]VARNAME" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP STRING" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "REGEXP が STRING に一致するかどうかの検査を行う。" + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAME [VARIABLE] [HINTS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"デバイスをファイル名で探す。VARIABLE が指定されれば、最初に見つかったデバイス" +"が変数にセットされます。" + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"デバイスをラベル名で探す。VARIABLE が指定されれば、最初に見つかったデバイスが" +"変数にセットされます。" + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"デバイスをUUID名で探す。VARIABLE が指定されれば、最初に見つかったデバイスが変" +"数にセットされます。" + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "デバイスをファイルで検索する。" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "デバイスをファイルシステムラベルで検索する。" + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "デバイスをファイルシステム UUID で検索する。" + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "" + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINT" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" + +#: grub-core/commands/search_wrap.c:209 +#, fuzzy +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"デバイスをラベル名で探す。VARIABLE が指定されれば、最初に見つかったデバイスが" +"変数にセットされます。" + +#: grub-core/commands/setpci.c:132 +#, fuzzy, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "%s、%s は何?" + +#: grub-core/commands/setpci.c:333 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d DEVICE] [-v VAR] [REGISTER][=VALUE[:MASK]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "PCI デバイスを操作する" + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "" + +#: grub-core/commands/sleep.c:33 +#, fuzzy +msgid "Allow to interrupt with ESC." +msgstr "ESCキーで中断できます" + +#: grub-core/commands/sleep.c:109 +#, fuzzy +msgid "NUMBER_OF_SECONDS" +msgstr "アンカーの数" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "指定した秒数の間待つ" + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:201 +#, fuzzy +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"コンテキストを変えずメニューエントリのみを使って別の設定ファイルを読み込みま" +"す。" + +#: grub-core/commands/syslinuxcfg.c:207 +#, fuzzy +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"コンテキストを変えずメニューエントリのみを使って別の設定ファイルを読み込みま" +"す。" + +#: grub-core/commands/terminal.c:90 +#, fuzzy +msgid "no terminal specified" +msgstr " -W --no-warn 警告を抑止する\n" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "" + +#: grub-core/commands/terminal.c:244 +#, fuzzy +msgid "Active input terminals:" +msgstr "中国語インプットメソッド (gcin) を有効にする" + +#: grub-core/commands/terminal.c:245 +#, fuzzy +msgid "Available input terminals:" +msgstr "E: X サーバーが使用できなければいけません。" + +#: grub-core/commands/terminal.c:261 +#, fuzzy +msgid "Active output terminals:" +msgstr " 出力をエミュレートする (デフォルト %s)\n" + +#: grub-core/commands/terminal.c:262 +#, fuzzy +msgid "Available output terminals:" +msgstr " 出力をエミュレートする (デフォルト %s)\n" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "" + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "式を評価する" + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +#, fuzzy +msgid "invalid block size" +msgstr "%(service)s on %(device)s" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:92 +#, fuzzy, c-format +msgid "Speed: %s \n" +msgstr "デバイス %s:" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +#, fuzzy +msgid "no command is specified" +msgstr "存在しない設定ファイルが指定された。" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "" + +#: grub-core/commands/time.c:61 +#, fuzzy +msgid "COMMAND [ARGS]" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "何もしないでください。成功しました。" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "何もしないでください。失敗しました。" + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USBのサポートをテストする" + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, fuzzy, c-format +msgid "public key %08x not found" +msgstr "%s はディレクトリではありません!" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "" + +#: grub-core/commands/videoinfo.c:97 +#, fuzzy +msgid "Unknown video mode " +msgstr "エミュレーションモード名がありません" + +#: grub-core/commands/videoinfo.c:111 +#, fuzzy +msgid " EDID checksum invalid" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/commands/videoinfo.c:116 +#, fuzzy, c-format +msgid " EDID version: %u.%u\n" +msgstr "\t不明なバージョンです。\n" + +#: grub-core/commands/videoinfo.c:120 +#, fuzzy, c-format +msgid " Preferred mode: %ux%u\n" +msgstr "エミュレーションモード名がありません" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, fuzzy, c-format +msgid "invalid video mode specification `%s'" +msgstr "無効なルートデバイス `%s' です" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, fuzzy, c-format +msgid "Adapter `%s':\n" +msgstr "アダプタの選択" + +#: grub-core/commands/videoinfo.c:180 +#, fuzzy +msgid " No info available" +msgstr "E: X サーバーが使用できなければいけません。" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "ビデオのサブシステムをテストする" + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "" + +#: grub-core/commands/xnu_uuid.c:111 +#, fuzzy +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "64ビットUUIDからXNUに適した形式に変換する" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +#, fuzzy +msgid "Mount by UUID." +msgstr "%s: `%s' はマウントポイントではありません\n" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +#, fuzzy +msgid "Mount all." +msgstr "%s: `%s' はマウントポイントではありません\n" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, fuzzy, c-format +msgid "cannot open `%s': %s" +msgstr "%s: `%s' がオープンできません\n" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, fuzzy, c-format +msgid "cannot seek `%s': %s" +msgstr "`%s' を開けません" + +#: grub-core/disk/cryptodisk.c:1144 +#, fuzzy +msgid "SOURCE|-u UUID|-a|-b" +msgstr "%s (ソース) インストール済み (V: %s):" + +#: grub-core/disk/cryptodisk.c:1145 +#, fuzzy +msgid "Mount a crypto device." +msgstr "%(service)s on %(device)s" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "" + +#: grub-core/disk/geli.c:75 +#, fuzzy +msgid "Couldn't load sha256" +msgstr "%s/linux シンボリックリンクを作成できませんでした!" + +#: grub-core/disk/geli.c:85 +#, fuzzy +msgid "Couldn't load sha512" +msgstr "%s/linux シンボリックリンクを作成できませんでした!" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, fuzzy, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "-- カーネルのバイナリパッケージ:" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +#, fuzzy +msgid "cannot write to CD-ROM" +msgstr "%s: CD-ROM 速度を %d倍速に設定しています\n" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +#, fuzzy +msgid "Delete the specified loopback drive." +msgstr "ループバックデバイスのエントリーを削除する" + +#: grub-core/disk/loopback.c:236 +#, fuzzy +msgid "[-d] DEVICENAME FILE." +msgstr "ファイルの選択" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +#, fuzzy +msgid "Make a virtual drive from a file." +msgstr "ファイルデバイスを一つ作る" + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +#, fuzzy +msgid "no symbol table" +msgstr "アクセス可能な表のタイトル" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "EFI エミュレーターをアンロードする。" + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, fuzzy, c-format +msgid "symbol `%s' not found" +msgstr "%s はディレクトリではありません!" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FILE..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +#, fuzzy +msgid "not a directory" +msgstr "%s はディレクトリではありません!" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +#, fuzzy +msgid "not a regular file" +msgstr "ファイルの共有 (FTP)" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, fuzzy, c-format +msgid "invalid file name `%s'" +msgstr "認識できないエミュレーション名 `%s' です" + +#: grub-core/fs/zfs/zfs.c:453 +#, fuzzy +msgid "checksum verification failed" +msgstr "%s: SCSI イジェクト失敗\n" + +#: grub-core/fs/zfs/zfscrypt.c:292 +#, fuzzy +msgid "no decryption key available" +msgstr "証明書に秘密鍵がありません" + +#: grub-core/fs/zfs/zfscrypt.c:304 +#, fuzzy +msgid "MAC verification failed" +msgstr "%s: SCSI イジェクト失敗\n" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +#, fuzzy +msgid "Enter ZFS password: " +msgstr "パスワードを入力してください: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +#, fuzzy +msgid "[-h|-p|-r] [FILE]" +msgstr "ファイル:" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +#, fuzzy +msgid "Virtual device is removed" +msgstr "%s: `%s' はマルチパーティションデバイスではありません\n" + +#: grub-core/fs/zfs/zfsinfo.c:57 +#, fuzzy +msgid "Virtual device is faulted" +msgstr "%s: `%s' はマルチパーティションデバイスではありません\n" + +#: grub-core/fs/zfs/zfsinfo.c:63 +#, fuzzy +msgid "Virtual device is offline" +msgstr "%s: `%s' はマルチパーティションデバイスではありません\n" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +#, fuzzy +msgid "Virtual device is degraded" +msgstr "%s: `%s' はマルチパーティションデバイスではありません\n" + +#: grub-core/fs/zfs/zfsinfo.c:73 +#, fuzzy +msgid "Virtual device is online" +msgstr "%s: `%s' はマルチパーティションデバイスではありません\n" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +#, fuzzy +msgid "Bootpath: unavailable\n" +msgstr "音声デバイスが利用できません" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:120 +#, fuzzy +msgid "Path: unavailable" +msgstr "音声デバイスが利用できません" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:127 +#, fuzzy +msgid "Devid: unavailable" +msgstr "音声デバイスが利用できません" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, fuzzy, c-format +msgid "Devid: %s\n" +msgstr "デバイス %s:" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, fuzzy, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "アクセス可能な HyperText リンクの数" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, fuzzy, c-format +msgid "VDEV element number %d:\n" +msgstr "アクセス可能な HyperText リンクの数" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +#, fuzzy +msgid "Pool state: unavailable" +msgstr "音声デバイスが利用できません" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +#, fuzzy +msgid "Pool name: unavailable" +msgstr "音声デバイスが利用できません" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, fuzzy, c-format +msgid "Pool name: %s\n" +msgstr "(名前無し)" + +#: grub-core/fs/zfs/zfsinfo.c:313 +#, fuzzy +msgid "Pool GUID: unavailable" +msgstr "音声デバイスが利用できません" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +#, fuzzy +msgid "Unrecognized pool state" +msgstr "認識できないエミュレーション名 `%s' です" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +#, fuzzy +msgid "Break into GDB" +msgstr "キーボードをウィンドウへ埋め込めるようにするかどうか" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +#, fuzzy +msgid "premature end of file" +msgstr "コメント内でファイル終端 (EOF) に達しました" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Enter キーで選択した OS を起動します。 'e' で 起動コマンド の 編集画面 にな" +"ります。 'c' で コマンドライン を開きます。 ESC で 前の画面に 戻ります。\n" + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Enter キーで選択した OS を起動します。 'e' で 起動コマンド の 編集画面 にな" +"ります。 'c' で コマンドライン を開きます。\n" + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "ハイライトされた項目が %d 秒後に自動実行されます。" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "" + +#: grub-core/gfxmenu/view.c:103 +#, fuzzy +msgid "GRUB Boot Menu" +msgstr "チェック・メニュー項目" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr "" + +#: grub-core/gnulib/argp-help.c:1662 +#, fuzzy +msgid " [OPTION...]" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "詳しくは `%s --help' を実行してください。\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, fuzzy, c-format +msgid "Report bugs to %s.\n" +msgstr " VALUE 設定する値\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +#, fuzzy +msgid "Unknown system error" +msgstr "libnotify の初期化に失敗しました" + +#: grub-core/gnulib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr " --help このメッセージを表示して終了する\n" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +#, fuzzy +msgid "NAME" +msgstr "(名前無し)" + +#: grub-core/gnulib/argp-parse.c:83 +#, fuzzy +msgid "set the program name" +msgstr "認識できないエミュレーション名 `%s' です" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:142 +#, fuzzy +msgid "print program version" +msgstr "\t[プログラム割込みを要求: %s]\n" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:612 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: 引数が多すぎます\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s はディレクトリではありません!" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, fuzzy, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, fuzzy, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, fuzzy, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, fuzzy, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, fuzzy, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, fuzzy, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, fuzzy, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, fuzzy, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s はディレクトリではありません!" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, fuzzy, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, fuzzy, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "" + +#: grub-core/gnulib/regcomp.c:134 +#, fuzzy +msgid "No match" +msgstr "(名前無し)" + +#: grub-core/gnulib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/regcomp.c:140 +#, fuzzy +msgid "Invalid collation character" +msgstr "エスケープ文字内でファイル終端 (EOF) に達しました" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +#, fuzzy +msgid "Invalid back reference" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +#, fuzzy +msgid "Invalid range end" +msgstr "コメント内でファイル終端 (EOF) に達しました" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: grub-core/gnulib/regcomp.c:553 +#, fuzzy +msgid "unknown regexp error" +msgstr "libnotify の初期化に失敗しました" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "" + +#: grub-core/hello/hello.c:36 +#, fuzzy +msgid "Hello World" +msgstr "\"Hello World\"と表示する。" + +#: grub-core/hello/hello.c:45 +#, fuzzy +msgid "Say `Hello World'." +msgstr "\"Hello World\"と表示する。" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "" + +#: grub-core/io/lzopio.c:509 +#, fuzzy +msgid "lzop file corrupted" +msgstr "ファイルの共有 (FTP)" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VALUE]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "環境変数を設定する。" + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "環境変数を削除する。" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +#, fuzzy +msgid "List devices or files." +msgstr "信頼のデバイスよりファイル送信を許可" + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "" + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, fuzzy, c-format +msgid "disk `%s' not found" +msgstr "%s はディレクトリではありません!" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, fuzzy, c-format +msgid "cannot write to `%s': %s" +msgstr " VALUE 設定する値\n" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, fuzzy, c-format +msgid "can't open `%s': %s" +msgstr "%s: `%s' がオープンできません\n" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +#, fuzzy +msgid "DEVICE_NAME" +msgstr "%s: デバイス名は `%s' です\n" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +#, fuzzy +msgid "Set root device." +msgstr "%(service)s on %(device)s" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +#, fuzzy +msgid "print verbose messages." +msgstr " -D アセンブラデバッグメッセージを生成する\n" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, fuzzy, c-format +msgid "Unknown extra argument `%s'." +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/kern/emu/main.c:185 +#, fuzzy +msgid "GRUB emulator." +msgstr "EFI エミュレーターをアンロードする。" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, fuzzy, c-format +msgid "%s: warning:" +msgstr "%s: 警告:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: 情報:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: エラー:" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "コアイメージが大きすぎます" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +#, fuzzy +msgid "Shutdown failed" +msgstr "%s: `%s' のアンマウントに失敗\n" + +#: grub-core/kern/mips/arc/init.c:285 +#, fuzzy +msgid "Exit failed" +msgstr "%s: `%s' のアンマウントに失敗\n" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +#, fuzzy +msgid "overflow is detected" +msgstr "%s はディレクトリではありません!" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, fuzzy, c-format +msgid "Unknown command `%s'.\n" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "このヘルプを表示して終了する。" + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "このコマンドの使用法を表示して終了する" + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, fuzzy, c-format +msgid "the argument `%s' requires an integer" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "バックトレースを表示します。" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, fuzzy, c-format +msgid "invalid color specification `%s'" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +#, fuzzy +msgid "Reboot failed" +msgstr "%s: `%s' のアンマウントに失敗\n" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +#, fuzzy +msgid "invalid zImage" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "無効なデバイス `%s' です。\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Linuxをロードする" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "initrdをロードする" + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "XNUイメージをロードする" + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "まずカーネルをロードする必要があります" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "現在のカーネル用にモジュールパッケージをコンパイル" + +#: grub-core/loader/efi/appleloader.c:231 +#, fuzzy +msgid "[OPTS]" +msgstr "[OPTIONS] DISK" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "BIOSベースのシステムを起動します。" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "他のブートローダーをロードする" + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "すべての端末の出力を表示する" + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "シリアルコンソールを使う" + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "再起動するファイル名を確認する" + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "CDROM をルートとして使用します。" + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "起動時にKDBに入る" + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "DDBの代わりにGDBリモートデバッガを使う" + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "すべての起動時の出力を表示しない" + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "" + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "シングルモードで起動する" + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "" + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "" + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +#, fuzzy +msgid "Change configured devices." +msgstr "信頼のデバイスよりファイル送信を許可" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMPを使用しない" + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPIを使用しない" + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "起動時の診断メッセージを表示しない" + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "デバッグメッセージを表示して起動する" + +#: grub-core/loader/i386/bsd.c:167 +#, fuzzy +msgid "Suppress normal output (warnings remain)." +msgstr "通常の出力を抑える(警告のみ)" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADDR|comUNIT][,SPEED]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +#, fuzzy +msgid "name" +msgstr "(名前無し)" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +#, fuzzy +msgid "addr" +msgstr "使用法: %s [option(s)] [addr(s)]\n" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +#, fuzzy +msgid "size" +msgstr "現在のサイズ:" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +#, fuzzy +msgid "Booting in blind mode" +msgstr " -M,--mri MRI 互換モードでアセンブルを行う\n" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "FreeBSDのカーネルをロードする" + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "OpenBSDのカーネルをロードする" + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "NetBSDのカーネルをロードする" + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "FreeBSDのカーネルモジュールをロードする" + +#: grub-core/loader/i386/bsd.c:2147 +#, fuzzy +msgid "Load NetBSD kernel module." +msgstr "現在のカーネル用にモジュールパッケージをコンパイル" + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "FreeBSDのカーネルモジュールをロードする(ELF)" + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +#, fuzzy +msgid "Load kOpenBSD ramdisk." +msgstr "OpenBSDのカーネルをロードする" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +#, fuzzy +msgid "Load another coreboot payload" +msgstr "他のブートローダーをロードする" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +#, fuzzy +msgid "[--force|--bpb] FILE" +msgstr "ファイルの共有 (FTP)" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "`%s' のサイズが大きすぎます" + +#: grub-core/loader/i386/pc/freedos.c:183 +#, fuzzy +msgid "Load FreeDOS kernel.sys." +msgstr "FreeBSDのカーネルモジュールをロードする" + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +#, fuzzy +msgid "KERNEL ARGS" +msgstr "-- カーネルのバイナリパッケージ:" + +#: grub-core/loader/i386/pc/plan9.c:588 +#, fuzzy +msgid "Load Plan9 kernel." +msgstr "-- カーネルのバイナリパッケージ:" + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +#, fuzzy +msgid "Load a PXE image." +msgstr "XNUイメージをロードする" + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "モジュールを削除する" + +#: grub-core/loader/i386/xnu.c:1003 +#, fuzzy +msgid "Press any key to launch xnu" +msgstr "続けるには何かキーを押してください..." + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +#, fuzzy +msgid "No FPSWA found" +msgstr " -W --no-warn 警告を抑止する\n" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:627 +#, fuzzy +msgid "FILE [ARGS...]" +msgstr "ファイルの選択" + +#: grub-core/loader/ia64/efi/linux.c:633 +#, fuzzy +msgid "Display FPSWA version." +msgstr "GNU アセンブラ バージョン %s (%s)、BFD バージョン %s を使用\n" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "multiboot 2のカーネルをロードする" + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "multiboot 2のモジュールをロードする" + +#: grub-core/loader/multiboot.c:443 +#, fuzzy +msgid "Load a multiboot kernel." +msgstr "-- カーネルのバイナリパッケージ:" + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "" + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +#, fuzzy +msgid "Background image mode." +msgstr "エミュレーションモード名がありません" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "XNUイメージをロードする" + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64ビットXNUイメージをロードする" + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "" + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "" + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +#, fuzzy +msgid "DIRECTORY [OSBundleRequired]" +msgstr "フォルダー・ペイン" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "" + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "" + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +#, fuzzy +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "接続:" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "" + +#: grub-core/net/bootp.c:324 +#, fuzzy +msgid "four arguments expected" +msgstr "%s: 引数が多すぎます\n" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +#, fuzzy +msgid "no DHCP info found" +msgstr "DHCPサーバがインストールされていません" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +#, fuzzy +msgid "no DHCP options found" +msgstr "DHCPサーバがインストールされていません" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, fuzzy, c-format +msgid "no DHCP option %d found" +msgstr "DHCPサーバがインストールされていません" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, fuzzy, c-format +msgid "couldn't autoconfigure %s" +msgstr "%s/linux シンボリックリンクを作成できませんでした!" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +#, fuzzy +msgid "no DNS servers configured" +msgstr "DHCPサーバがインストールされていません" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +#, fuzzy +msgid "invalid argument" +msgstr "無効なルートデバイス `%s' です" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:763 +#, fuzzy +msgid "Add a DNS server" +msgstr "CDDBサーバ名" + +#: grub-core/net/dns.c:766 +#, fuzzy +msgid "Remove a DNS server" +msgstr "CDDBサーバ名" + +#: grub-core/net/dns.c:768 +#, fuzzy +msgid "List DNS servers" +msgstr "DHCPサーバがインストールされていません" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +#, fuzzy +msgid "unsupported HTTP response" +msgstr "HTTP サーバへ接続中..." + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, fuzzy, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "libnotify の初期化に失敗しました" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, fuzzy, c-format +msgid "time out opening `%s'" +msgstr "`%s' を開けません" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +#, fuzzy +msgid "address not found" +msgstr "%s はディレクトリではありません!" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, fuzzy, c-format +msgid "Unsupported address type %d\n" +msgstr "IM $IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を削除。" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +#, fuzzy +msgid "three arguments expected" +msgstr "%s: 引数が多すぎます\n" + +#: grub-core/net/net.c:1023 +#, fuzzy +msgid "card not found" +msgstr "%s はディレクトリではありません!" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "" + +#: grub-core/net/net.c:1190 +#, fuzzy, c-format +msgid "Unknown address type %d\n" +msgstr "IM $IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を削除。" + +#: grub-core/net/net.c:1298 +#, fuzzy +msgid "no server is specified" +msgstr "存在しない設定ファイルが指定された。" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +#, fuzzy +msgid "Add a network address." +msgstr "機器の追加に失敗しました" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +#, fuzzy +msgid "SHORTNAME" +msgstr "VARNAME" + +#: grub-core/net/net.c:1771 +#, fuzzy +msgid "Delete a network address." +msgstr "シリアルポートのアドレスを設定します" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +#, fuzzy +msgid "Add a network route." +msgstr "機器の追加に失敗しました" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +#, fuzzy +msgid "connection refused" +msgstr "接続を拒否されました:" + +#: grub-core/net/tcp.c:684 +#, fuzzy +msgid "connection timeout" +msgstr "接続を拒否されました:" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "利用可能なコマンド一覧:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "利用可能なデバイス一覧:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "利用可能なファイル一覧:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "利用可能なパーティション一覧:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "利用可能な引数一覧:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "利用可能なものの一覧:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "警告:入力エラー `%s'の(スラッシュが抜けています)\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "" + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "" + +#: grub-core/normal/dyncmd.c:187 +#, fuzzy +msgid "module isn't loaded" +msgstr "ロードされませんでした" + +#: grub-core/normal/main.c:211 +#, fuzzy, c-format +msgid "GNU GRUB version %s" +msgstr "GNU アセンブラ バージョン %s (%s)、BFD バージョン %s を使用\n" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC キーでいつでも終了します。" + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"BASH に似た最小限の行編集機能がサポートされています。最初の単語では、TAB で利" +"用可能なコマンド補完の一覧が表示されます。その他には、TAB で利用可能なデバイ" +"スまたはファイル補完の一覧が表示されます。%s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "画面表示を消す" + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "ノーマルモードに入ります" + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "ノーマルモードを抜けます" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "続けるには何かキーを押してください..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "" + +#: grub-core/normal/menu.c:826 +#, fuzzy, c-format +msgid "Falling back to `%s'" +msgstr " VALUE 設定する値\n" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "コマンドリストを起動します" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" + +#: grub-core/normal/menu_text.c:170 +#, fuzzy, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "" +"ハイライトするエントリを選択するには %C ならびに %C キーを使ってください。\n" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "パーティション %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "デバイス %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "ファイルシステムにアクセスできません" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "ファイルシステムの種類 %s" + +#: grub-core/normal/misc.c:131 +#, fuzzy, c-format +msgid "- Label `%s'" +msgstr "アクセラレータのラベル" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr "" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +#, fuzzy +msgid " - Total size unknown" +msgstr "不明なエスケープ '\\%c' が文字列内にあります。無視されました" + +#: grub-core/normal/misc.c:182 +#, fuzzy, c-format +msgid " - Total size %llu%sKiB" +msgstr "不明なエスケープ '\\%c' が文字列内にあります。無視されました" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "%s を開けません" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +#, fuzzy +msgid "couldn't open geom" +msgstr "%s: `%s' がオープンできません\n" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +#, fuzzy +msgid "unaligned device size" +msgstr "%(service)s on %(device)s" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:116 +#, fuzzy, c-format +msgid "cannot read `%s' correctly" +msgstr " @FILE オプションを FILE から読み込む\n" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "コアファイルのセクターがひどく断片化しています" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, fuzzy, c-format +msgid "can't retrieve blocklists: %s" +msgstr "%s: `%s' は `%s' にマウントできます\n" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +#, fuzzy +msgid "can't retrieve blocklists" +msgstr "%s: `%s' は `%s' にマウントできます\n" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, fuzzy, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "GNU アセンブラ バージョン %s (%s)、BFD バージョン %s を使用\n" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, fuzzy, c-format +msgid "Unable to open stream from %s: %s" +msgstr "%s: /etc/fstab がオープンできません: %s\n" + +#: grub-core/osdep/linux/getroot.c:1033 +#, fuzzy, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "無効なルートデバイス `%s' です" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "%(service)s on %(device)s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, fuzzy, c-format +msgid "Usage: %s DEVICE\n" +msgstr "使い方: ボリューム名 [<デバイスファイル>]\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, fuzzy, c-format +msgid "Unable to fork: %s" +msgstr "%s: フォークできません: %s\n" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, fuzzy, c-format +msgid "Unable to create pipe: %s" +msgstr ".glade ファイルを特定できません: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +#, fuzzy +msgid "cannot restore the original directory" +msgstr "カーネルイメージを圧縮できません" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, fuzzy, c-format +msgid "cannot stat `%s': %s" +msgstr "`%s' を開けません" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr ".glade ファイルを特定できません: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "カーネルイメージを圧縮できません" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, fuzzy, c-format +msgid "%s: not found" +msgstr "%s はディレクトリではありません!" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +#, fuzzy +msgid "couldn't retrieve random data" +msgstr "%s/linux シンボリックリンクを作成できませんでした!" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +#, fuzzy +msgid "unexpected EFI error" +msgstr "コメント内でファイル終端 (EOF) に達しました" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: grub-core/parttool/msdospart.c:39 +#, fuzzy +msgid "Make partition active" +msgstr "利用可能なパーティション一覧:" + +#: grub-core/parttool/msdospart.c:51 +#, fuzzy +msgid "not a primary partition" +msgstr "%s はディレクトリではありません!" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +#, fuzzy +msgid "Change partition type" +msgstr "IM $IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を削除。" + +#: grub-core/parttool/msdospart.c:88 +#, fuzzy +msgid "Set `hidden' flag in partition type" +msgstr "パーティションマップの形式を決定する" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, fuzzy, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "" +"$IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を $IM_CONFIG_ACTIVE と設定す" +"る。" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +#, fuzzy +msgid "can't break 0 loops" +msgstr "%s: `%s' は `%s' にマウントできます\n" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, fuzzy, c-format +msgid "invalid variable name `%s'" +msgstr "認識できないエミュレーション名 `%s' です" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +#, fuzzy +msgid "unexpected end of file" +msgstr "コメント内でファイル終端 (EOF) に達しました" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +#, fuzzy +msgid "Exit from loops" +msgstr " @FILE オプションを FILE から読み込む\n" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "" + +#: grub-core/script/main.c:64 +#, fuzzy +msgid "[VALUE]..." +msgstr "アクセス可能な値" + +#: grub-core/script/main.c:65 +#, fuzzy +msgid "Set positional parameters." +msgstr " VALUE 設定する値\n" + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +#, fuzzy +msgid "Return from a function." +msgstr " @FILE オプションを FILE から読み込む\n" + +#: grub-core/term/gfxterm_background.c:176 +#, fuzzy +msgid "[-m (stretch|normal)] FILE" +msgstr "ファイルの共有 (FTP)" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +#, fuzzy +msgid "COLOR" +msgstr "色の選択" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +#, fuzzy +msgid "Show CBMEM console content." +msgstr " --target-help ターゲット固有のオプションを表示する\n" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "シリアルユニットを設定します" + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "シリアルポートのアドレスを設定します" + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "シリアルポートの速度を設定します" + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "シリアルポートのワード長を設定します" + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "シリアルポートのパリティを設定します" + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "シリアルポートのストップビットを設定します" + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "シリアルユニットを設定します" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +#, fuzzy +msgid "unsupported serial port flow control" +msgstr "サポートされていないシリアルポートのワード長です" + +#: grub-core/term/serial.c:429 +#, fuzzy +msgid "[OPTIONS...]" +msgstr "全般のオプション" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "シリアルポートを設定します" + +#: grub-core/term/terminfo.c:184 +#, fuzzy, c-format +msgid "unknown terminfo type `%s'" +msgstr "IM $IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を削除。" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +#, fuzzy +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "IM $IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を削除。" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr "" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +#, fuzzy +msgid "MODULES" +msgstr "MODULE" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "使用するペアリング方法を選択してください:" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, fuzzy, c-format +msgid "cannot rename the file %s to %s" +msgstr ".glade ファイルを特定できません: %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "" + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +#, fuzzy +msgid "set [NAME=VALUE ...]" +msgstr " VALUE 設定する値\n" + +#: util/grub-editenv.c:52 +#, fuzzy +msgid "Set variables." +msgstr " VALUE 設定する値\n" + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +#, fuzzy +msgid "unset [NAME ...]" +msgstr "(名前無し)" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "" + +#: util/grub-editenv.c:57 +#, fuzzy +msgid "Options:" +msgstr "全般のオプション" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "" + +#: util/grub-editenv.c:113 +#, fuzzy +msgid "FILENAME COMMAND" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "" + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +#, fuzzy +msgid "invalid environment block" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: util/grub-editenv.c:216 +#, fuzzy, c-format +msgid "invalid parameter %s" +msgstr "無効なルートデバイス `%s' です" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "" + +#: util/grub-fstest.c:210 +#, fuzzy, c-format +msgid "cannot open OS file `%s': %s" +msgstr "%s を開けません" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, fuzzy, c-format +msgid "`loopback' command fails: %s" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, fuzzy, c-format +msgid "`cryptomount' command fails: %s" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +#, fuzzy +msgid "couldn't retrieve UUID" +msgstr "%s/linux シンボリックリンクを作成できませんでした!" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "" + +#: util/grub-fstest.c:508 +#, fuzzy +msgid "cp FILE LOCAL" +msgstr "ファイルの共有 (FTP)" + +#: util/grub-fstest.c:508 +#, fuzzy +msgid "Copy FILE to local file LOCAL." +msgstr ".glade ファイルを特定できません: %s" + +#: util/grub-fstest.c:509 +#, fuzzy +msgid "cat FILE" +msgstr "ファイルの選択" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +#, fuzzy +msgid "cmp FILE LOCAL" +msgstr "ファイルの共有 (FTP)" + +#: util/grub-fstest.c:510 +#, fuzzy +msgid "Compare FILE with local file LOCAL." +msgstr "" +" -L,--keep-locals 局所シンボル (例: `L' で開始するもの) を保持する\n" + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "hex FILE" +msgstr "ファイルの選択" + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "Show contents of FILE in hex." +msgstr "ファイルの内容を表示します。" + +#: util/grub-fstest.c:512 +#, fuzzy +msgid "crc FILE" +msgstr "ファイルの選択" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "" + +#: util/grub-fstest.c:513 +#, fuzzy +msgid "blocklist FILE" +msgstr "ファイルの選択" + +#: util/grub-fstest.c:513 +#, fuzzy +msgid "Display blocklist of FILE." +msgstr "ファイルの共有 (FTP)" + +#: util/grub-fstest.c:514 +#, fuzzy +msgid "xnu_uuid DEVICE" +msgstr "%(service)s on %(device)s" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +#, fuzzy +msgid "Mount crypto devices." +msgstr "%s: `%s' はマウントポイントではありません\n" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +#, fuzzy +msgid "FILE|prompt" +msgstr "ファイルの選択" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "" + +#: util/grub-fstest.c:605 +#, fuzzy +msgid "Invalid disk count.\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" + +#: util/grub-fstest.c:633 +#, fuzzy +msgid "No command is specified.\n" +msgstr "存在しない設定ファイルが指定された。" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "" + +#: util/grub-fstest.c:711 +#, fuzzy, c-format +msgid "Invalid command %s.\n" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "" + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +#, fuzzy +msgid "[OPTIONS]" +msgstr "全般のオプション" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "%s: `%s' がオープンできません\n" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "%s: `%s' がオープンできません\n" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "%s: `%s' がオープンできません\n" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "`%s' を開けません" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, fuzzy, c-format +msgid "Unknown compression format %s" +msgstr "不明なエスケープ '\\%c' が文字列内にあります。無視されました" + +#: util/grub-install-common.c:389 +#, fuzzy, c-format +msgid "Unrecognized compression `%s'" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr " --target-help ターゲット固有のオプションを表示する\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr " COMMAND 対象のコマンド (任意)\n" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "認識できないエミュレーション名 `%s' です" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "不明で余分な引数 `%s' です。\n" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "使い方: ボリューム名 [<デバイスファイル>]\n" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "デバイスが指定されていません。\n" + +#: util/grub-install.c:1043 +#, fuzzy +msgid "cannot find EFI directory" +msgstr "%s はディレクトリではありません!" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr ".glade ファイルを特定できません: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "デバイスが指定されていません。\n" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +#, fuzzy +msgid "No path or device is specified.\n" +msgstr "デバイスが指定されていません。\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, fuzzy, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, fuzzy, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "IM $IM_CONFIG_XINPUTRC_TYPE $IM_CONFIG_XINPUTRC を削除。" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +#, fuzzy +msgid "select face index" +msgstr "AtkHyperlink オブジェクトの終端インデックスです" + +#: util/grub-mkfont.c:943 +#, fuzzy +msgid "FROM-TO[,FROM-TO]" +msgstr "接続:" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +#, fuzzy +msgid "set font range" +msgstr " VALUE 設定する値\n" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "" + +#: util/grub-mkfont.c:950 +#, fuzzy +msgid "SIZE" +msgstr "現在のサイズ:" + +#: util/grub-mkfont.c:950 +#, fuzzy +msgid "set font size" +msgstr " VALUE 設定する値\n" + +#: util/grub-mkfont.c:951 +#, fuzzy +msgid "set font descent" +msgstr " VALUE 設定する値\n" + +#: util/grub-mkfont.c:952 +#, fuzzy +msgid "set font ascent" +msgstr " VALUE 設定する値\n" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +#, fuzzy +msgid "invalid font range" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: util/grub-mkfont.c:1151 +#, fuzzy +msgid "[OPTIONS] FONT_FILES" +msgstr " @FILE オプションを FILE から読み込む\n" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +#, fuzzy +msgid "output file must be specified" +msgstr "デバイスが指定されていません。\n" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "%s はディレクトリではありません!" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +#, fuzzy +msgid "available formats:" +msgstr "E: X サーバーが使用できなければいけません。" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, fuzzy, c-format +msgid "unknown target format %s\n" +msgstr " --target-help ターゲット固有のオプションを表示する\n" + +#: util/grub-mkimage.c:233 +#, fuzzy +msgid "[OPTION]... [MODULES]" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "サポートされていないシリアルポートの速度です" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +#, fuzzy +msgid "Number of PBKDF2 iterations" +msgstr "アクセス可能な HyperText リンクの数" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:146 +#, fuzzy +msgid "Reenter password: " +msgstr "パスワードを入力してください: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +#, fuzzy +msgid "passwords don't match" +msgstr " --warn 警告を抑止しない\n" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, fuzzy, c-format +msgid "cryptographic error number %d" +msgstr "libnotify の初期化に失敗しました" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +#, fuzzy +msgid "No path is specified.\n" +msgstr "存在しない設定ファイルが指定された。" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "使用法: %s [OPTION] SOURCE...\\n" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +#, fuzzy +msgid "available targets:" +msgstr "E: X サーバーが使用できなければいけません。" + +#: util/grub-probe.c:791 +#, fuzzy +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "%(service)s on %(device)s" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "%s: 引数が多すぎます\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "デバイスが指定されていません。\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "DEVICE は OS のデバイスでなければいけません (例: /dev/sda)。" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "無効なデバイス `%s' です。\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "カーネルイメージを圧縮できません" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "不明なエスケープ '\\%c' が文字列内にあります。無視されました" + +#: util/mkimage.c:985 +#, fuzzy +msgid "Decompressor is too big" +msgstr "コアイメージが大きすぎます" + +#: util/mkimage.c:1030 +#, fuzzy, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "コアイメージが大きすぎます (%p > %p)" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "コアイメージが大きすぎます (%p > %p)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img のサイズは %u バイトである必要があります" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +#, fuzzy +msgid "firmware image is too big" +msgstr "コアイメージが大きすぎます" + +#: util/resolve.c:93 +#, fuzzy, c-format +msgid "invalid line format: %s" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "コアファイルの最初のセクターがセクター順に整列していません" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "セクター順に整列していないデータがコアファイル中に見つかりました" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "コアファイルのセクターがひどく断片化しています" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "`%s' のサイズが %u ではありません" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "`%s' のサイズが小さすぎます" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" + +#: util/setup.c:617 +#, fuzzy, c-format +msgid "can't determine filesystem on %s" +msgstr "ファイルシステムの形式を決定する" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +#, fuzzy +msgid "blocklists are invalid" +msgstr "\tコードページ設定は無視されます。\n" + +#: util/setup.c:767 +#, fuzzy +msgid "blocklists are incomplete" +msgstr "\tコードページ設定は無視されます。\n" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "GRUB キーボード配列を作成する。" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +#, fuzzy +msgid "print this message and exit" +msgstr " --help このメッセージを表示して終了する\n" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +#, fuzzy +msgid "print the version information and exit" +msgstr "" +" --version アセンブラのバージョン番号を表示して終了する\n" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +#, fuzzy +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: --auto/-a オプションに対して不当な引数\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "使用法: %s [OPTION]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "grub 設定ファイルを生成する" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +#, fuzzy +msgid "Unrecognized option `%s'\\n" +msgstr "使用法: %s [option...] [asmfile...]\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s はディレクトリではありません!" + +#: util/grub-mkconfig.in:238 +#, fuzzy +msgid "Generating grub configuration file ..." +msgstr "grub 設定ファイルを生成する" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "完了" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "テーマを見つけました: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "GNU Mach を見つけました: %s\\n" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_hurd.in:94 +#, fuzzy +msgid "%s, with Hurd %s" +msgstr "%s が完了しました。" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "GNU Mach をロード中..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "the Hurd をロード中..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +#, fuzzy +msgid "Advanced options for %s" +msgstr "-- カーネルのバイナリパッケージ:" + +#: util/grub.d/10_illumos.in:40 +#, fuzzy +msgid "Loading kernel of Illumos ..." +msgstr "-- カーネルのバイナリパッケージ:" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:81 +#, fuzzy +msgid "%s, with kFreeBSD %s" +msgstr "%s が完了しました。" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "FreeBSD %s のカーネルをロード中..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "FreeBSD カーネルを見つけました: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +#, fuzzy +msgid "Found kernel module directory: %s\\n" +msgstr "現在のカーネル用にモジュールパッケージをコンパイル" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_linux.in:87 +#, fuzzy +msgid "%s, with Linux %s" +msgstr "%s が完了しました。" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Linux %s をロード中..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "初期 RAM ディスクをロード中..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Linux イメージを見つけました: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "" + +#: util/grub.d/10_netbsd.in:107 +#, fuzzy +msgid "%s, with kernel %s (via %s)" +msgstr "-- カーネルのバイナリパッケージ:" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "NetBSD カーネルを見つけました: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:85 +#, fuzzy +msgid "Found %s on %s (%s)\\n" +msgstr "依存プラグイン:" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +#, fuzzy +msgid "(on %s)" +msgstr "依存プラグイン:" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Xen %s をロード中..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +#, fuzzy +msgid "Xen hypervisor, version %s" +msgstr "GNU アセンブラ バージョン %s (%s)、BFD バージョン %s を使用\n" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "" + +#: util/grub.d/30_os-prober.in:144 +#, fuzzy +msgid "Found %s on %s\\n" +msgstr "依存プラグイン:" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" + +#, fuzzy +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "%s: CD-ROM 自動イジェクトコマンド失敗: %s\n" + +#, fuzzy +#~ msgid "`%s' failed.\\n" +#~ msgstr "%s: `%s' のアンマウントに失敗\n" + +#~ msgid "Expose v1 tables." +#~ msgstr "V1 テーブルを表示する" + +#~ msgid "Fake BIOS." +#~ msgstr "BIOSのふりをします。" + +#~ msgid "Check hash list file." +#~ msgstr "ハッシュリストファイルを確認してください。" + +#~ msgid "DIRECTORY" +#~ msgstr "ディレクトリ" + +#~ msgid "Unload PXE environment." +#~ msgstr "PXE 環境を取り除く" + +#~ msgid "Read word from PORT." +#~ msgstr "PORT からワードを読み込む。" + +#~ msgid "Read dword from PORT." +#~ msgstr "PORT から2倍ワードを読み込む。" + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "ワード値 VALUE を PORT へ書き込む。" + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "2倍ワード値 VALUE を PORT へ書き込む。" + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "Read word from ADDR." +#~ msgstr "ADDR からワードを読み込む。" + +#~ msgid "Read dword from ADDR." +#~ msgstr "ADDR から2倍ワードを読み込む。" + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "ワード値 VALUE を ADDR に書き込む。" + +#~ msgid "[DEVICE]" +#~ msgstr "[DEVICE]" + +#~ msgid "the core image is too small" +#~ msgstr "コアイメージが小さすぎます" + +#~ msgid "prefix is too long" +#~ msgstr "プレフィックスが長すぎます" + +#~ msgid "cannot open %s" +#~ msgstr "%s を開けません" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "ルートデバイスを推測できません。`--root-device' オプションで指定してくださ" +#~ "い" diff --git a/po/ko.gmo b/po/ko.gmo new file mode 100644 index 0000000000000000000000000000000000000000..eb93584a045d04ef021e7f0d88cc59ce8e5738a5 GIT binary patch literal 19698 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 OHLGezUF=!PA^#H=;CHP6 literal 0 HcmV?d00001 diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 000000000..af0bcf14f --- /dev/null +++ b/po/ko.po @@ -0,0 +1,7016 @@ +# GRUB의 한국어 번역. +# Copyright (C) 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# Exported from Launchpad (2010-10-16 22:52+0000), Ubuntu Korean-team +# : +# +# Kang Bundo , 2010. +# Para, 2010 +# +# Revised: +# +# Changwoo Ryu , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 1.97+20100124\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2010-10-24 23:37+0900\n" +"Last-Translator: Changwoo Ryu \n" +"Language-Team: Korean \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +#, fuzzy +msgid "unsupported serial port speed" +msgstr "시리얼 포트 속도를 정합니다." + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +#, fuzzy +msgid "unsupported serial port parity" +msgstr "시리얼 포트 패리티를 정합니다." + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +#, fuzzy +msgid "unsupported serial port stop bits number" +msgstr "시리얼 포트 스톱 비트를 정합니다." + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +#, fuzzy +msgid "unsupported serial port word length" +msgstr "시리얼 포트 워드 길이를 정합니다." + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "쉼표(,)로 구분한 호스트 테이블을 읽어들이지 않습니다." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "쉼표(,)로 구분한 테이블을 읽어들입니다." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "" + +#: grub-core/commands/acpi.c:47 +#, fuzzy +msgid "Export version 2 and version 3 tables to the OS." +msgstr "v2와 v3 테이블을 보여줍니다." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "RSDP와 XSDT, RSDT의 OEMID를 설정합니다." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "RSDP와 XSDT, RSDT의 OEMTABLE ID를 설정합니다." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "RSDP와 XSDT, RSDT의 OEMTABLE 수정 사항을 설정합니다." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "RSDP와 XSDT, RSDT의 생성자 필드를 설정합니다." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "RSDP와 XSDT, RSDT의 생성자 수정 사항을 설정합니다." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +#, fuzzy +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"EBDA를 업데이트 하지 않습니다. 장애를 수리하거나 어떤 것은 멈출수도 있습니" +"다. BIOS는 OS가 GRUB에서 RSDP를 못 받게하여 이것을 무력화합니다." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "" + +#: grub-core/commands/acpi.c:779 +#, fuzzy +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=<테이블1>,<테이블2>|--load-only=<테이블1>,<테이블2>] <파일" +"1> [<파일2>] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "호스트 ACPI 테이블과 인자로 주어진 테이블을 읽어들입니다." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +#, fuzzy +msgid "out of memory" +msgstr "메모리를 덤프합니다." + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, fuzzy, c-format +msgid "cannot read `%s': %s" +msgstr "올바르게 `%s'을(를) 읽을 수 없습니다" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "" + +#: grub-core/commands/arc/lsdev.c:51 +#, fuzzy +msgid "List devices." +msgstr "PCI 장치를 열거합니다." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "<파일>" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "블럭 목록을 출력합니다." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "운영 체제를 부팅합니다." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:56 +#, fuzzy +msgid "Get disk cache info." +msgstr "장치 정보를 검색합니다." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "파일의 내용을 표시합니다." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "<파일1> <파일2>" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "두개의 파일을 비교합니다." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "다른 설정파일을 읽어들입니다." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "문맥의 변환없이 다른 설정 파일을 읽어들입니다." + +#: grub-core/commands/configfile.c:75 +#, fuzzy +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "문맥의 변환없이 다른 설정 파일을 읽어들입니다." + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "문맥의 변환없이 다른 설정 파일을 읽어들입니다." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[년-]월-일] [시:분[:초]]" + +#: grub-core/commands/date.c:142 +#, fuzzy +msgid "Display/set current datetime." +msgstr "현재 일시를 표시/설정하는 명령." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "쓸모없는 새 행을 출력하지 않습니다." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "역슬래쉬 이스케입문자의 해석을 가능케합니다." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] 문자열" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "텍스트의 줄을 표시합니다." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "비디오 문제를 수정합니다." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "바이오스 덤프를 읽어들입니다." + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "[패턴 ...]" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "multiboot 커널을 읽어들입니다." + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "multiboot 2 커널을 읽어들입니다." + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[옵션] 디스크" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +#, fuzzy +msgid "no such partition" +msgstr "도스 방식의 파티션이 발견되지 않았습니다." + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "<장치> [<파티션>[+/-[<유형>]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +#, fuzzy +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"GPT 드라이브 장치의 하이브리드 MBR을 채우시오. 특정한 파티션은 하이브리드 MBR" +"의 일부가 될 것입니다. 3개의 파티션까지 허용되니다. TYPE은 MBR 형식입니다. " +"+는 파티션이 활성화되었다는 것을 의미합니다. 한 개의 파티션만을 활성화할 수 " +"있습니다." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"컴퓨터를 정지시킵니다. 이 명령은 구현된 모든 펌웨어 상에서 작동하지 않습니다." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "" + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"고급 전원관리 설정\n" +"(1=low, ..., 254=high, 255=off)." + +#: grub-core/commands/hdparm.c:36 +#, fuzzy +msgid "Display power mode." +msgstr "절전 모드를 확인하십시오." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "리셋하기 전까지 ATA 보안 설정을 정지시킵니다." + +#: grub-core/commands/hdparm.c:39 +#, fuzzy +msgid "Display SMART health status." +msgstr "SMART 건강 상태를 체크합니다." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"자동 소음 관리를 설정합니다.\n" +"(0=끔, 128=조용, ..., 254=빠름)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"대기시간 설정\n" +"(0=끔, 1=5초, 2=10초, ..., 240=20분, 241=30분, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "드라이브를 대기모드로 설정." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "드라이브를 수면모드로 설정." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "드라이브 ID와 설정을 출력합니다." + +#: grub-core/commands/hdparm.c:50 +#, fuzzy +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "ATA IDENTIFY 영역의 내용을 덤프합니다." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART를 해제하거나 활성화 합니다 (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "메시지를 출력하지 마십시오." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[옵션] 디스크" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA 디스크 매개 변수를 얻거나 설정합니다." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "사용법:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[패턴 ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "도움말 표시." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "파일 첫부분의 오프셋 바이트를 건너뜁니다." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "단지 LENGTH 바이트를 읽습니다." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[옵션] <파일또는장치>" + +#: grub-core/commands/hexdump.c:126 +#, fuzzy +msgid "Show raw contents of a file or memory." +msgstr "파일 또는 메모리의 내용을 덤프합니다." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +#, fuzzy +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "긴 모드 플래그에 대해 확인합니다 (기본값)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "CPU 기능을 확인." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "현재의 매핑을 보입니다." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "기본값에 대한 모든 매핑을 리셋합니다." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "순 매핑과 역 매핑 둘 다 수행합니다." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "BIOS 드라이브 매핑을 관리합니다." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "컴퓨터를 멈추기 위해 APM을 사용하지 않습니다." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "APM이 사용 가능하다면 시스템을 중지시킵니다." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "" + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "유효하지 않은 장치 `%s'.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "<파일> | <간격> [<높낮이1> <시간>] [<높낮이2> <시간>] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "소리를 재생합니다." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:45 +#, fuzzy +msgid "Return to IEEE1275 prompt." +msgstr "오픈 펌웨어 프롬프트로 되돌아 갑니다." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "읽어들인 값을 <변수이름> 변수로 저장합니다." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "" + +#: grub-core/commands/iorw.c:123 +#, fuzzy +msgid "Read 8-bit value from PORT." +msgstr "<주소>에서 바이트를 읽습니다." + +#: grub-core/commands/iorw.c:127 +#, fuzzy +msgid "Read 16-bit value from PORT." +msgstr "<주소>에서 바이트를 읽습니다." + +#: grub-core/commands/iorw.c:131 +#, fuzzy +msgid "Read 32-bit value from PORT." +msgstr "<주소>에서 바이트를 읽습니다." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +#, fuzzy +msgid "PORT VALUE [MASK]" +msgstr "<주소> <값> [마스크]" + +#: grub-core/commands/iorw.c:136 +#, fuzzy +msgid "Write 8-bit VALUE to PORT." +msgstr "<주소>에 <값> 바이트를 씁니다." + +#: grub-core/commands/iorw.c:140 +#, fuzzy +msgid "Write 16-bit VALUE to PORT." +msgstr "<주소>에 <값> 바이트를 씁니다." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "<주소> <값> [마스크]" + +#: grub-core/commands/iorw.c:144 +#, fuzzy +msgid "Write 32-bit VALUE to PORT." +msgstr "<주소>에 <값> 바이트를 씁니다." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Shift키를 확인합니다." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Control키를 확인합니다." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "ALt 키를 확인합니다." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "키 수정자 상태를 확인." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, fuzzy, c-format +msgid "can't find command `%s'" +msgstr "'%s'을(를) 열 수 없습니다." + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "암호를 입력하십시오: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "파일 이름을 지정합니다." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f <파일>] <변수_이름> [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "환경 블록 파일로부터 값을 읽어들입니다." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f <파일>]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "환경 블록 파일로부터 값을 열거합니다." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f <파일>] <변수_이름> [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "값을 환경 블록 파일로 저장합니다." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "더 상세한 정보를 담은 긴 리스트를 보여줍니다." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "사람이 읽을 수 있는 형식으로 크기를 출력합니다." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "파일의 목록을 보여줍니다." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "" + +#: grub-core/commands/ls.c:286 +#, fuzzy +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [<파일>]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "장치와 파일을 목록으로 만듭니다." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "" + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "" + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "펌웨어에 의해 제공된 메모리 맵을 열거합니다." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCI 장치를 열거합니다." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "<주소>" + +#: grub-core/commands/memrw.c:125 +#, fuzzy +msgid "Read 8-bit value from ADDR." +msgstr "<주소>에서 바이트를 읽습니다." + +#: grub-core/commands/memrw.c:129 +#, fuzzy +msgid "Read 16-bit value from ADDR." +msgstr "<주소>에서 바이트를 읽습니다." + +#: grub-core/commands/memrw.c:133 +#, fuzzy +msgid "Read 32-bit value from ADDR." +msgstr "<주소>에서 바이트를 읽습니다." + +#: grub-core/commands/memrw.c:138 +#, fuzzy +msgid "Write 8-bit VALUE to ADDR." +msgstr "<주소>에 <값> 바이트를 씁니다." + +#: grub-core/commands/memrw.c:142 +#, fuzzy +msgid "Write 16-bit VALUE to ADDR." +msgstr "<주소>에 <값> 바이트를 씁니다." + +#: grub-core/commands/memrw.c:146 +#, fuzzy +msgid "Write 32-bit VALUE to ADDR." +msgstr "<주소>에 <값> 바이트를 씁니다." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +#, fuzzy +msgid "STRING" +msgstr "[-e|-n] 문자열" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "이 메시지를 보여줍니다." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "" + +#: grub-core/commands/minicmd.c:201 +#, fuzzy +msgid "Show memory contents." +msgstr "파일의 내용을 표시합니다." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "<모듈>" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "모듈을 제거합니다." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "읽어들인 모듈을 보여줍니다." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "GRUB에서 나갑니다." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, fuzzy, c-format +msgid "Part no: %s.\n" +msgstr "파티션 %s:" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +#, fuzzy +msgid "Print Memory information." +msgstr "더 많은 정보를 보려면 `%s --help' 하십시오.\n" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, fuzzy, c-format +msgid "unknown argument `%s'" +msgstr "알 수 없는 추가적인 인자 값 `%s'.\n" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "파티션 명령어" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "사용자 암호" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "사용자 암호 (평문)를 설정합니다. 권장하지 않으며, 보안에 취약합니다." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:202 +#, fuzzy +msgid "USER PBKDF2_PASSWORD" +msgstr "사용자 암호" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "" + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "어떤 값을 리턴 값으로 설정합니다." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "드라이버를 결정합니다." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "파티션 맵 유형을 결정합니다." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "파일 시스템의 종류를 결정합니다." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "파일 시스템 UUID를 결정합니다." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "파일 시스템의 라벨(label)을 결정합니다." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "<장치>" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "장치 정보를 검색합니다." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[환경변수]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "변수를 사용자 입력으로 지정합니다." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "컴퓨터를 재부팅합니다." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "" + +#: grub-core/commands/search.c:324 +#, fuzzy +msgid "NAME [VARIABLE] [HINTS]" +msgstr "<이름> [<변수>]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"파일로 장치를 찾습니다. 만약 <변수>가 명시되지 않으면, 첫 번째로 발견되는 장" +"치가 변수로 지정됩니다." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"레이블로 장치를 찾습니다. 만약 <변수>가 명시되지 않으면, 첫 번째로 발견되는 " +"장치가 변수로 지정됩니다." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"UUID로 장치를 찾습니다. 만약 <변수>가 명시되지 않으면, 첫 번째로 발견되는 장" +"치가 변수로 지정됩니다." + +#: grub-core/commands/search_wrap.c:34 +#, fuzzy +msgid "Search devices by a file." +msgstr "파일 장치를 만듭니다." + +#: grub-core/commands/search_wrap.c:35 +#, fuzzy +msgid "Search devices by a filesystem label." +msgstr "파일 시스템의 라벨(label)을 결정합니다." + +#: grub-core/commands/search_wrap.c:37 +#, fuzzy +msgid "Search devices by a filesystem UUID." +msgstr "파일 시스템 UUID를 결정합니다." + +#: grub-core/commands/search_wrap.c:40 +#, fuzzy +msgid "Set a variable to the first device found." +msgstr "어떤 값을 리턴 값으로 설정합니다." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "" + +#: grub-core/commands/search_wrap.c:209 +#, fuzzy +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"레이블로 장치를 찾습니다. 만약 <변수>가 명시되지 않으면, 첫 번째로 발견되는 " +"장치가 변수로 지정됩니다." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" + +#: grub-core/commands/setpci.c:335 +#, fuzzy +msgid "Manipulate PCI devices." +msgstr "PCI 장치를 열거합니다." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "자세한 카운트 다운." + +#: grub-core/commands/sleep.c:33 +#, fuzzy +msgid "Allow to interrupt with ESC." +msgstr "ESC로 중단 가능." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "<초 수>" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "지정된 초 만큼 기다립니다." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/terminal.c:90 +#, fuzzy +msgid "no terminal specified" +msgstr "알려진 장치가 없음.\n" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "" + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "표현식 ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "표현식으로 평가함." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "표현식" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +#, fuzzy +msgid "no command is specified" +msgstr "알려진 장치가 없음.\n" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "성공적으로 아무일도 하지 않습니다." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "불행하게도 아무일도 하지 않습니다." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USB 지원여부를 테스트 합니다." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, fuzzy, c-format +msgid "invalid video mode specification `%s'" +msgstr "유효하지 않은 루트 장치 `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr "" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +#, fuzzy +msgid "Test video subsystem in mode WxH." +msgstr "비디오 서브시스템을 테스트 합니다." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "비디오 서브시스템을 테스트 합니다." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +#, fuzzy +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "GRUBUUID [<변수이름>]" + +#: grub-core/commands/xnu_uuid.c:111 +#, fuzzy +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "64-bit UUID를 XNU에 알맞는 포맷으로 변환합니다." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, fuzzy, c-format +msgid "cannot open `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, fuzzy, c-format +msgid "cannot seek `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1145 +#, fuzzy +msgid "Mount a crypto device." +msgstr "루트 장치를 정합니다." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "'%s'을(를) 열 수 없습니다." + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, fuzzy, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "GRUB의 `%s' 코어 이미지 읽기를 시도합니다" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +#, fuzzy +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"이러한 msdos-방식의 파티션 레이블은 post-MBR 공간이 없습니다; 끼워넣기가 불" +"가능합니다!" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +#, fuzzy +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"GPT 파티션 라벨이 BIOS 부트 파티션을 가지고 있지 않습니다;임베딩이 불가능합니" +"다!" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +#, fuzzy +msgid "Delete the specified loopback drive." +msgstr "루프백 장치 엔트리를 제거합니다." + +#: grub-core/disk/loopback.c:236 +#, fuzzy +msgid "[-d] DEVICENAME FILE." +msgstr "[-d|-p] <장치이름> <파일>." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +#, fuzzy +msgid "Make a virtual drive from a file." +msgstr "파일 장치를 만듭니다." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:320 +#, fuzzy +msgid "Unload EFI emulator." +msgstr "PXE 환경 제거." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "" + +#: grub-core/font/font_cmd.c:74 +#, fuzzy +msgid "FILE..." +msgstr "<파일>" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +#, fuzzy +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "core.img가 비정상적으로 큽니다. 끼워넣기 공간에 맞지 않습니다." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, fuzzy, c-format +msgid "invalid file name `%s'" +msgstr "유효하지 않은 루트 장치 `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +#, fuzzy +msgid "Enter ZFS password: " +msgstr "암호를 입력하십시오: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +#, fuzzy +msgid "[-h|-p|-r] [FILE]" +msgstr "[-l|-h|-a] [<파일>]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, fuzzy, c-format +msgid "Devid: %s\n" +msgstr "장치 %s:" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +#, fuzzy +msgid "FILESYSTEM [VARIABLE]" +msgstr "<이름> [<변수>]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Enter 키를 누르면 선택된 OS로 부팅되며, 부팅전에 'e' 키를 누르면 옵션을 편집" +"할 수 있고 'c' 키를 누르면 명령어를 직접 입력할 수 있습니다. 이전 메뉴로 돌아" +"가려면 ESC 키를 누르십시오.\n" + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Enter 키를 누르면 선택된 OS로 부팅되며, 부팅전에 'e' 키를 누르면 옵션을 편집" +"할 수 있고 'c' 키를 누르면 명령어를 직접 입력할 수 있습니다.\n" + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "%d초 후에 밝게 표시된 항목을 자동으로 실행합니다." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr "" + +#: grub-core/gnulib/argp-help.c:1662 +#, fuzzy +msgid " [OPTION...]" +msgstr "[옵션...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "더 많은 정보를 보려면 `%s --help' 하십시오.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +#, fuzzy +msgid "Unknown system error" +msgstr "알 수 없는 파일 시스템" + +#: grub-core/gnulib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr "이 도움말을 보이고 종료합니다." + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: grub-core/gnulib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "표현식으로 평가함." + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "" + +#: grub-core/hello/hello.c:36 +#, fuzzy +msgid "Hello World" +msgstr "인사합니다 \"여러분 안녕\"." + +#: grub-core/hello/hello.c:45 +#, fuzzy +msgid "Say `Hello World'." +msgstr "인사합니다 \"여러분 안녕\"." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +#, fuzzy +msgid "[ENVVAR=VALUE]" +msgstr "[환경변수]" + +#: grub-core/kern/corecmd.c:179 +#, fuzzy +msgid "Set an environment variable." +msgstr "값을 환경 블록 파일로 저장합니다." + +#: grub-core/kern/corecmd.c:183 +#, fuzzy +msgid "ENVVAR" +msgstr "[환경변수]" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "" + +#: grub-core/kern/corecmd.c:186 +#, fuzzy +msgid "List devices or files." +msgstr "장치와 파일을 목록으로 만듭니다." + +#: grub-core/kern/corecmd.c:188 +#, fuzzy +msgid "Insert a module." +msgstr "모듈을 제거합니다." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, fuzzy, c-format +msgid "cannot write to `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, fuzzy, c-format +msgid "can't open `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +#, fuzzy +msgid "DEVICE_NAME" +msgstr "<장치>" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "루트 장치를 정합니다." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +#, fuzzy +msgid "print verbose messages." +msgstr "부팅시 자세한 메시지를 출력합니다." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, fuzzy, c-format +msgid "Unknown extra argument `%s'." +msgstr "알 수 없는 추가적인 인자 값 `%s'.\n" + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "'%s'의 크기가 너무 큽니다." + +#: grub-core/kern/fs.c:120 +#, fuzzy +msgid "unknown filesystem" +msgstr "알 수 없는 파일 시스템" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, fuzzy, c-format +msgid "Unknown command `%s'.\n" +msgstr "알 수 없는 추가적인 인자 값 `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "이 도움말을 보이고 종료합니다." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "이 명령의 사용법을 보이고 종료합니다." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +#, fuzzy +msgid "Print backtrace." +msgstr "블럭 목록을 출력합니다." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, fuzzy, c-format +msgid "invalid color specification `%s'" +msgstr "유효하지 않은 루트 장치 `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "유효하지 않은 장치 `%s'.\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "리눅스를 읽어들입니다." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "initrd를 읽어들입니다." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "XNU 이미지를 읽어들입니다." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "multiboot 모듈을 읽어들입니다." + +#: grub-core/loader/efi/appleloader.c:231 +#, fuzzy +msgid "[OPTS]" +msgstr "[옵션...]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +#, fuzzy +msgid "Boot BIOS-based system." +msgstr "레거시 시스템을 부팅합니다." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "또 다른 부트로더를 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "모든 콘솔상의 출력을 보입니다." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "시리얼 콘솔을 사용합니다." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "재부팅할 파일명을 묻습니다." + +#: grub-core/loader/i386/bsd.c:105 +#, fuzzy +msgid "Use CD-ROM as root." +msgstr "루트사용자로 CDROM을 사용합니다." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "사용자 설정 라우팅을 호출합니다." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "부팅시 KDB 모드로 진입합니다." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "DDB 대신 GDB 원격 디버거를 사용합니다." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "모든 부팅 메시지 출력을 하지 않습니다." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "출력 행마다 키 입력을 기다립니다." + +#: grub-core/loader/i386/bsd.c:113 +#, fuzzy +msgid "Use compiled-in root device." +msgstr "compiled-in rootdev를 사용합니다." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "단일 모드로 부트합니다." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "부팅시 자세한 메시지를 출력합니다." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "재부팅 하지 마십시오, 단지 중지만 시키십시오." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "구성된 장치를 변경합니다." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMP 비활성화." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPI 비활성화." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "부트 진단 메시지를 보이지 마십시요." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "부팅시 디버그 메시지를 표시합니다." + +#: grub-core/loader/i386/bsd.c:167 +#, fuzzy +msgid "Suppress normal output (warnings remain)." +msgstr "일반 출력 메시지를 안보이게 합니다( 경고는 남습니다)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +#, fuzzy +msgid "Booting in blind mode" +msgstr "단일 모드로 부트합니다." + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "FreeBSD 커널을 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "OpenBSD 커널을 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "NetBSD 커널을 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "FreeBSD env를 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "FreeBSD 커널 모듈을 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:2147 +#, fuzzy +msgid "Load NetBSD kernel module." +msgstr "FreeBSD 커널 모듈을 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:2150 +#, fuzzy +msgid "Load NetBSD kernel module (ELF)." +msgstr "FreeBSD 커널 모듈을 (ELF) 읽어들입니다." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "FreeBSD 커널 모듈을 (ELF) 읽어들입니다." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +#, fuzzy +msgid "Load kOpenBSD ramdisk." +msgstr "OpenBSD 커널을 읽어들입니다." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +#, fuzzy +msgid "Load another coreboot payload" +msgstr "또 다른 부트로더를 읽어들입니다." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "'%s'의 크기가 너무 큽니다." + +#: grub-core/loader/i386/pc/freedos.c:183 +#, fuzzy +msgid "Load FreeDOS kernel.sys." +msgstr "FreeBSD 커널 모듈을 읽어들입니다." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +#, fuzzy +msgid "Load Plan9 kernel." +msgstr "multiboot 커널을 읽어들입니다." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +#, fuzzy +msgid "Load a PXE image." +msgstr "XNU 이미지를 읽어들입니다." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "모듈을 제거합니다." + +#: grub-core/loader/i386/xnu.c:1003 +#, fuzzy +msgid "Press any key to launch xnu" +msgstr "계속하려면 아무 키나 누르십시오..." + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +#, fuzzy +msgid "Load `device-properties' dump." +msgstr "device-properties 덤프를 읽어들입니다." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "multiboot 2 커널을 읽어들입니다." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "멀티부트 2 모듈을 불러옵니다." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "multiboot 커널을 읽어들입니다." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "multiboot 모듈을 읽어들입니다." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "XNU 이미지를 읽어들입니다." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64-bit XNU 이미지를 읽어들입니다." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "XNU 확장 패키지를 읽어들입니다." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "XNU 확장팩을 읽어들입니다." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "디렉터리 [OS요구번들]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "XNU 확장 디렉터리를 읽어들입니다." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "XNU의 스플래시 화면이미지를 읽어들입니다." + +#: grub-core/loader/xnu.c:1501 +#, fuzzy +msgid "Load an image of hibernated XNU." +msgstr "XNU의 스플래시 화면이미지를 읽어들입니다." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +#, fuzzy +msgid "no DHCP options found" +msgstr "도스 방식의 파티션이 발견되지 않았습니다." + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, fuzzy, c-format +msgid "no DHCP option %d found" +msgstr "도스 방식의 파티션이 발견되지 않았습니다." + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "" + +#: grub-core/net/dns.c:768 +#, fuzzy +msgid "List DNS servers" +msgstr "PCI 장치를 열거합니다." + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, fuzzy, c-format +msgid "time out opening `%s'" +msgstr "'%s'을(를) 열 수 없습니다." + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "" + +#: grub-core/net/net.c:1190 +#, fuzzy, c-format +msgid "Unknown address type %d\n" +msgstr "알 수 없는 파일 시스템" + +#: grub-core/net/net.c:1298 +#, fuzzy +msgid "no server is specified" +msgstr "알려진 장치가 없음.\n" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "" + +#: grub-core/net/net.c:1771 +#, fuzzy +msgid "Delete a network address." +msgstr "시리얼 포트 주소를 정합니다." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "사용자 이름을 입력하십시오: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "가능한 명령은:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "가능한 장치는:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "가능한 파일은:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "가능한 파티션은:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "가능한 인자값은:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "가능한 것은:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "경고: 문법 에러 (슬레쉬 없음) `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "경고: 잘못된 전경 색 `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "경고: 잘못된 배경 색 `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "" + +#: grub-core/normal/context.c:207 +#, fuzzy +msgid "Export variables." +msgstr "v1 테이블을 보여줍니다." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "" + +#: grub-core/normal/dyncmd.c:187 +#, fuzzy +msgid "module isn't loaded" +msgstr "로드 안됨." + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB 버전 %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC 언제든지 종료합니다." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"최소한의 BASH 형태의 라인 편집을 지원합니다. TAB을 누르시면 사용 가능한 명령" +"어 목록을 표시합니다. 장치나 파일도 마찬가지로 어느 곳에서든지 TAB을 통해 목" +"록을 보실 수 있습니다. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "화면을 지웁니다." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "일반 모드에 진입합니다." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "일반 모드에서 나갑니다." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "계속하려면 아무 키나 누르십시오..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "명령행을 부팅" + +#: grub-core/normal/menu_text.c:160 +#, fuzzy +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"이맥스와 같은 편집 기능을 최소한으로 지원합니다. 탭은 완성 기능을 지원합니" +"다. F1은 부팅, F2=Ctrl-a, F3=Ctrl-e, F4는 명령행 또는 ESC는 현재 편집한 것을 " +"취소하고 GRUB으로 되돌아갑니다." + +#: grub-core/normal/menu_text.c:170 +#, fuzzy, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "%C 및 %C 키를 이용하여 원하는 항목이 밝게 표시되도록 선택하십시오.\n" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "파티션 %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "장치 %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "파일 시스템에 접근할 수 없습니다." + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "파일 시스템 종류 %s" + +#: grub-core/normal/misc.c:131 +#, fuzzy, c-format +msgid "- Label `%s'" +msgstr "- 레이블 \"%s\"" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- 마지막으로 수정된 시간 %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +#, fuzzy +msgid "No known filesystem detected" +msgstr "알 수 없는 파일 시스템" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr "" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr "" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr "" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +#, fuzzy +msgid "unaligned device size" +msgstr "유효하지 않은 장치 `%s'.\n" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "GRUB의 `%s' 코어 이미지 읽기를 시도합니다" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "다시한번 GRUB의 `%s' 코어 이미지 읽기를 시도합니다" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "올바르게 `%s'을(를) 읽을 수 없습니다" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "코어 이미지의 나머지 섹터 부분읽기에 실패 했습니다" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:1033 +#, fuzzy, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "유효하지 않은 루트 장치 `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +#, fuzzy +msgid "cannot restore the original directory" +msgstr "커널 이미지 압축을 할 수 없습니다" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, fuzzy, c-format +msgid "cannot stat `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +#, fuzzy +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"GPT 파티션 라벨이 BIOS 부트 파티션을 가지고 있지 않습니다;임베딩이 불가능합니" +"다!" + +#: grub-core/partmap/gpt.c:196 +#, fuzzy +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"GPT 파티션 라벨이 BIOS 부트 파티션을 가지고 있지 않습니다;임베딩이 불가능합니" +"다!" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +#, fuzzy +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"이러한 msdos-방식의 파티션 레이블은 post-MBR 공간이 없습니다; 끼워넣기가 불" +"가능합니다!" + +#: grub-core/partmap/msdos.c:404 +#, fuzzy +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "끼워넣기 공간이 비정상적으로 작습니다. core.img가 맞지 않습니다." + +#: grub-core/parttool/msdospart.c:39 +#, fuzzy +msgid "Make partition active" +msgstr "가능한 파티션은:" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +#, fuzzy +msgid "Change partition type" +msgstr "파티션 맵 유형을 결정합니다." + +#: grub-core/parttool/msdospart.c:88 +#, fuzzy +msgid "Set `hidden' flag in partition type" +msgstr "파티션 맵 유형을 결정합니다." + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, fuzzy, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "파티션 맵 유형을 결정합니다." + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, fuzzy, c-format +msgid "invalid variable name `%s'" +msgstr "유효하지 않은 루트 장치 `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +#, fuzzy +msgid "Exit from loops" +msgstr "GRUB에서 나갑니다." + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "" + +#: grub-core/script/main.c:65 +#, fuzzy +msgid "Set positional parameters." +msgstr "ATA 디스크 매개 변수를 얻거나 설정합니다." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "시리얼 유닛을 정합니다." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "시리얼 포트 주소를 정합니다." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "시리얼 포트 속도를 정합니다." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "시리얼 포트 워드 길이를 정합니다." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "시리얼 포트 패리티를 정합니다." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "시리얼 포트 스톱 비트를 정합니다." + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "시리얼 유닛을 정합니다." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[옵션...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "직렬 포트를 설정합니다." + +#: grub-core/term/terminfo.c:184 +#, fuzzy, c-format +msgid "unknown terminfo type `%s'" +msgstr "알 수 없는 추가적인 인자 값 `%s'.\n" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +#, fuzzy +msgid "Print and execute block argument." +msgstr "블럭 목록을 출력합니다." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr "" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +#, fuzzy +msgid "MODULES" +msgstr "<모듈>" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "커널 이미지 압축을 할 수 없습니다" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "" + +#: util/grub-editenv.c:47 +#, fuzzy +msgid "Create a blank environment block file." +msgstr "값을 환경 블록 파일로 저장합니다." + +#: util/grub-editenv.c:49 +#, fuzzy +msgid "List the current variables." +msgstr "현재의 매핑을 보입니다." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "" + +#: util/grub-editenv.c:52 +#, fuzzy +msgid "Set variables." +msgstr "변수를 사용자 입력으로 지정합니다." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "" + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "" + +#: util/grub-editenv.c:114 +#, fuzzy +msgid "Tool to edit environment block." +msgstr "값을 환경 블록 파일로 저장합니다." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +#, fuzzy +msgid "invalid environment block" +msgstr "환경 블록 파일로부터 값을 열거합니다." + +#: util/grub-editenv.c:216 +#, fuzzy, c-format +msgid "invalid parameter %s" +msgstr "유효하지 않은 루트 장치 `%s'" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "" + +#: util/grub-fstest.c:210 +#, fuzzy, c-format +msgid "cannot open OS file `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "" + +#: util/grub-fstest.c:507 +#, fuzzy +msgid "List files in PATH." +msgstr "파일의 목록을 보여줍니다." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:509 +#, fuzzy +msgid "cat FILE" +msgstr "<파일>" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:510 +#, fuzzy +msgid "Compare FILE with local file LOCAL." +msgstr "두개의 파일을 비교합니다." + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "hex FILE" +msgstr "<파일>" + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "Show contents of FILE in hex." +msgstr "파일의 내용을 표시합니다." + +#: util/grub-fstest.c:512 +#, fuzzy +msgid "crc FILE" +msgstr "<파일>" + +#: util/grub-fstest.c:512 +#, fuzzy +msgid "Get crc32 checksum of FILE." +msgstr "파일의 CRC32 체크섬을 계산합니다." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "" + +#: util/grub-fstest.c:513 +#, fuzzy +msgid "Display blocklist of FILE." +msgstr "텍스트의 줄을 표시합니다." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +#, fuzzy +msgid "Skip N bytes from output file." +msgstr "파일 첫부분의 오프셋 바이트를 건너뜁니다." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +#, fuzzy +msgid "Mount crypto devices." +msgstr "루트 장치를 정합니다." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "" + +#: util/grub-fstest.c:605 +#, fuzzy +msgid "Invalid disk count.\n" +msgstr "유효하지 않은 장치 `%s'.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" + +#: util/grub-fstest.c:633 +#, fuzzy +msgid "No command is specified.\n" +msgstr "알려진 장치가 없음.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "" + +#: util/grub-fstest.c:711 +#, fuzzy, c-format +msgid "Invalid command %s.\n" +msgstr "유효하지 않은 장치 `%s'.\n" + +#: util/grub-fstest.c:724 +#, fuzzy +msgid "IMAGE_PATH COMMANDS" +msgstr "파티션 명령어" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +#, fuzzy +msgid "Debug tool for filesystem driver." +msgstr "파일 시스템의 종류를 결정합니다." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +#, fuzzy +msgid "[OPTIONS]" +msgstr "[옵션...]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "'%s'을(를) 열 수 없습니다." + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "'%s'을(를) 열 수 없습니다." + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "알 수 없는 추가적인 인자 값 `%s'.\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "'%s'을(를) 열 수 없습니다." + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "유효하지 않은 루트 장치 `%s'" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "알 수 없는 추가적인 인자 값 `%s'.\n" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[옵션] <파일또는장치>" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "알려진 장치가 없음.\n" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "알려진 장치가 없음.\n" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +#, fuzzy +msgid "No path or device is specified.\n" +msgstr "알려진 장치가 없음.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "" + +#: util/grub-mkfont.c:951 +#, fuzzy +msgid "set font descent" +msgstr "루트 장치를 정합니다." + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "" + +#: util/grub-mkfont.c:1151 +#, fuzzy +msgid "[OPTIONS] FONT_FILES" +msgstr "[옵션] 디스크" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +#, fuzzy +msgid "output file must be specified" +msgstr "알려진 장치가 없음.\n" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, fuzzy, c-format +msgid "unknown target format %s\n" +msgstr "알 수 없는 추가적인 인자 값 `%s'.\n" + +#: util/grub-mkimage.c:233 +#, fuzzy +msgid "[OPTION]... [MODULES]" +msgstr "[옵션...]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:146 +#, fuzzy +msgid "Reenter password: " +msgstr "암호를 입력하십시오: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +#, fuzzy +msgid "No path is specified.\n" +msgstr "알려진 장치가 없음.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "[옵션...]" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +#, fuzzy +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[옵션] <파일또는장치>" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +#, fuzzy +msgid "read text from FILE." +msgstr "<주소>에서 바이트를 읽습니다." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "가능한 인자값은:" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "알려진 장치가 없음.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "유효하지 않은 장치 `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "커널 이미지 압축을 할 수 없습니다" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "" + +#: util/mkimage.c:985 +#, fuzzy +msgid "Decompressor is too big" +msgstr "코어 이미지가 너무 큽니다" + +#: util/mkimage.c:1030 +#, fuzzy, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "코어 이미지가 너무 큽니다 (%p > %p)" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "코어 이미지가 너무 큽니다 (%p > %p)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img 크기는 반드시 %u 바이트이어야 합니다" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +#, fuzzy +msgid "firmware image is too big" +msgstr "코어 이미지가 너무 큽니다" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "코어 파일의 첫 섹터 부분이 sector-aligned가 아닙니다" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" +"Copy text \t\r\n" +"non-sector-aligned 데이터가 코어 파일에서 발견되었습니다" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "코어 파일의 섹터가 너무 잘려져 있습니다" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "'%s'의 크기는 %u이(가) 아닙니다." + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "'%s'의 크기가 너무 작습니다." + +#: util/setup.c:425 +#, fuzzy +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "파티션되지 않은 디스크에 GRUB 설치를 시도합니다. 좋지 않은 방법입니다." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "%s 상의 파일 시스템을 알 수 없습니다; 안전 점검을 수행할 수 없습니다" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s에 %s 파일 시스템이 포함된 것처럼 보입니다. 이것은 DOS 방식의 부팅을 위한 " +"공간확보를 하는지 알 수 없습니다.\\r\n" +"GRUB 설치는 만약 귀중한 데이터가 grub-setup에 의해 덮어 씌워진다면 " +"FILESYSTEM DESTRUCTION 파일 시스템 파괴를 가져올 수 있습니다.(--skip-fs-" +"probe 옵션은 이러한 점검을 하지 않습니다. 책임은 전적으로 당신에게 있습니다)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s에 %s 파일 시스템이 포함된 것처럼 보입니다. 이것은 DOS 방식의 부팅을 위한 " +"공간확보를 하는지 알 수 없습니다.\\r\n" +"GRUB 설치는 만약 귀중한 데이터가 grub-setup에 의해 덮어 씌워진다면 " +"FILESYSTEM DESTRUCTION 파일 시스템 파괴를 가져올 수 있습니다.(--skip-fs-" +"probe 옵션은 이러한 점검을 하지 않습니다. 책임은 전적으로 당신에게 있습니다)" + +#: util/setup.c:462 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s에 %s 파일 시스템이 포함된 것처럼 보입니다. 이것은 DOS 방식의 부팅을 위한 " +"공간확보를 하는지 알 수 없습니다.\\r\n" +"GRUB 설치는 만약 귀중한 데이터가 grub-setup에 의해 덮어 씌워진다면 " +"FILESYSTEM DESTRUCTION 파일 시스템 파괴를 가져올 수 있습니다.(--skip-fs-" +"probe 옵션은 이러한 점검을 하지 않습니다. 책임은 전적으로 당신에게 있습니다)" + +#: util/setup.c:475 +#, fuzzy +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "파티션되지 않은 디스크에 GRUB 설치를 시도합니다. 좋지 않은 방법입니다." + +#: util/setup.c:480 +#, fuzzy +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "파티션되지 않은 디스크에 GRUB 설치를 시도합니다. 좋지 않은 방법입니다." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "끼워넣기 공간이 비정상적으로 작습니다. core.img가 맞지 않습니다." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "코어 이미지내에 종료문자가 없습니다" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "" + +#: util/setup.c:610 +#, fuzzy +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"끼워넣기가 불가능합니다, 하지만 루트 장치가 RAID 어레이 혹은 LVM 볼륨에 들어 " +"있다면 끼워넣기가 필요합니다." + +#: util/setup.c:617 +#, fuzzy, c-format +msgid "can't determine filesystem on %s" +msgstr "파일 시스템의 종류를 결정합니다." + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +#, fuzzy +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"끼워넣기가 불가능합니다, 하지만 루트 장치가 RAID 어레이 혹은 LVM 볼륨에 들어 " +"있다면 끼워넣기가 필요합니다." + +#: util/setup.c:635 +#, fuzzy +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"임베딩이 불가능합니다. 차단목록을 사용하여 이 설정으로 GRUB을 설치만 할 수 있" +"습니다. 하지만, 차단목록을 신뢰할 수 없고 이것의 사용을 불허합니다." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +#, fuzzy +msgid "print this message and exit" +msgstr "이 도움말을 보이고 종료합니다." + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "" + +#: util/grub-mkconfig.in:58 +#, fuzzy +msgid "Generate a grub config file" +msgstr "다른 설정파일을 읽어들입니다." + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +#, fuzzy +msgid "Loading GNU Mach ..." +msgstr "리눅스를 읽어들입니다." + +#: util/grub.d/10_hurd.in:128 +#, fuzzy +msgid "Loading the Hurd ..." +msgstr "initrd를 읽어들입니다." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "" + +#: util/grub.d/10_illumos.in:40 +#, fuzzy +msgid "Loading kernel of Illumos ..." +msgstr "FreeBSD 커널을 읽어들입니다." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:101 +#, fuzzy +msgid "Loading kernel of FreeBSD %s ..." +msgstr "FreeBSD 커널을 읽어들입니다." + +#: util/grub.d/10_kfreebsd.in:164 +#, fuzzy +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "FreeBSD 커널을 읽어들입니다." + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +#, fuzzy +msgid "Loading Linux %s ..." +msgstr "리눅스를 읽어들입니다." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +#, fuzzy +msgid "Loading initial ramdisk ..." +msgstr "initrd를 읽어들입니다." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "" + +#: util/grub.d/20_linux_xen.in:116 +#, fuzzy +msgid "Loading Xen %s ..." +msgstr "리눅스를 읽어들입니다." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" + +#~ msgid "Fake BIOS." +#~ msgstr "바이오스를 흉내냅니다." + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "호환 가능한 VESA BIOS 확장 비디오 모드를 열거함." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "VESA BIOS 확장 2.0+ 지원여부 테스트." + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "Read word from ADDR." +#~ msgstr "<주소>에서 워드를 읽습니다." + +#~ msgid "Read dword from ADDR." +#~ msgstr "<주소>에서 더블 워드를 읽습니다." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "<주소>에 <값> 워드를 씁니다." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "<주소>에 <값> 더블 워드를 씁니다." + +#~ msgid "[DEVICE]" +#~ msgstr "[<장치>]" + +#~ msgid "Set the root device." +#~ msgstr "루트 장치를 설정합니다." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "파티션을 가진 하드 드라이브 흉내를 냅니다." + +#~ msgid "Load XNU hibernate image." +#~ msgstr "XNU 최대절전모드 이미지를 읽어들입니다." + +#, fuzzy +#~ msgid "" +#~ "Minimum Emacs-like screen editing is supported. TAB lists completions. " +#~ "Press Ctrl-x to boot, Ctrl-c for a command-line or ESC to return menu." +#~ msgstr "" +#~ "이맥스와 같은 편집 기능을 최소한으로 지원합니다. 탭은 완성 기능을 지원합니" +#~ "다. Ctrl-x는 부팅, Ctrl-c는 명령행 또는 ESC는 현재 편집한 것을 취소하고 " +#~ "GRUB으로 되돌아갑니다." + +#~ msgid "Partition table" +#~ msgstr "파티션 테이블" + +#~ msgid "the core image is too small" +#~ msgstr "코어 이미지가 너무 작습니다" + +#~ msgid "prefix is too long" +#~ msgstr "접두어가 너무 깁니다." + +#, fuzzy +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -f, --font=FILE embed FILE as a boot font\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format [default=" +#~ msgstr "" +#~ "사용법: %s [옵션]... [모듈]\n" +#~ "\n" +#~ "GRUB의 부트용 이미지를 만들니다.\n" +#~ "\n" +#~ " -d, --directory=<디렉터리> 디렉터리 내에 있는 이미지와 모듈을\n" +#~ " 사용합니다. [기본=%s/@platform@]\n" +#~ " -p, --prefix=<디렉터리> grub_prefix 디렉터리를 설정합니다. [기본=" +#~ "%s]\n" +#~ " -m, --memdisk=<파일> <파일>을 memdisk 이미지로 포함합니다\n" +#~ " -f, --font=<파일> <파일>을 부팅 글꼴로 포함합니다\n" +#~ " -c, --config=<파일> <파일>을 부팅 설정으로 포함합니다\n" +#~ " -n, --note CHRP 오픈 펌웨어에 NOTE 세그먼트 추가\n" +#~ " -o, --output=<파일> 생성한 이미지를 파일로 출력합니다. [기본" +#~ "=stdout]\n" +#~ " -O, --format=<형식> 주어진 형식으로 이미지를 생성합니다.\n" +#~ " 사용가능한 형식: %s\n" +#~ " -h, --help 현재 메시지를 보여주고 종료합니다.\n" +#~ " -V, --version 버전 정보를 출력하고 종료합니다.\n" +#~ " -v, --verbose 더욱 다양한 메시지를 출력합니다.\n" +#~ "\n" +#~ "문제점은 <%s> 주소로 보내 주십시오.\n" + +#~ msgid "cannot open %s" +#~ msgstr "%s을(를) 열 수 없습니다." + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "파티션에 MBR 대신 GRUB 설치를 시도합니다. 좋지 않은 방법입니다." + +#~ msgid "No DOS-style partitions found" +#~ msgstr "도스 방식의 파티션이 발견되지 않았습니다." + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "만약 블록리스트 사용을 원한다면, --force 옵션을 사용하십시요." + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "코어 이미지의 첫 섹터 부분읽기에 실패 했습니다" + +#, fuzzy +#~ msgid "" +#~ "Usage: %s [OPTION]... DEVICE\n" +#~ "\n" +#~ "Set up images to boot from DEVICE.\n" +#~ "DEVICE must be a GRUB device (e.g. `(hd0,1)').\n" +#~ "\n" +#~ " -b, --boot-image=FILE use FILE as the boot image [default=%s]\n" +#~ " -c, --core-image=FILE use FILE as the core image [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=guessed]\n" +#~ " -f, --force install even if problems are detected\n" +#~ " -s, --skip-fs-probe do not probe for filesystems in DEVICE\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "사용법: %s [옵션]... <장치>\n" +#~ "\n" +#~ "<장치>로부터 부팅할 이미지를 설정합니다.\n" +#~ "<장치>는 GRUB용 장치이여야 합니다. (예. `(hd0,1)').\n" +#~ "\n" +#~ "일반적으로 %s 명령을 직접 실행하지 말아야 합니다. 대신\n" +#~ "grub-install을 사용하십시오.\n" +#~ "\n" +#~ " -b, --boot-image=<파일> 부트 이미지로 파일을 사용합니다 [기본=%s]\n" +#~ " -c, --core-image=<파일> 코어 이미지로 파일을 사용합니다 [기본=%s]\n" +#~ " -d, --directory=<디렉터리> <디렉터리>의 GRUB 파일을 사용합니다 [기본=" +#~ "%s]\n" +#~ " -m, --device-map=<파일> 장치 맵으로 파일을 사용합니다 [기본=%s]\n" +#~ " -r, --root-device=<장치> 루트 장치로 <장치>를 사용합니다 [기본" +#~ "=guessed]\n" +#~ " -f, --force 문제를 발견하여도 설치합니다\n" +#~ " -s, --skip-fs-probe 장치 내의 파일 시스템 검증을 하지 않습니다\n" +#~ " -h, --help 현재 메시지를 보여주고 종료합니다\n" +#~ " -V, --version 버전 정보를 출력하고 종료합니다\n" +#~ " -v, --verbose 더욱 다양한 메시지를 보여줍니다\n" +#~ "\n" +#~ "문제점은 <%s> 주소로 보내 주십시오.\n" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "루트 장치같지 않음. `--root-device' 옵션을 사용해 지정하십시오." diff --git a/po/lt.gmo b/po/lt.gmo new file mode 100644 index 0000000000000000000000000000000000000000..bb0af438e874096570249c8f6d70169bd72cda41 GIT binary patch literal 102706 zcmcG%2Vj-e{r`U>paP153smGm2n5K00D=f&LIOmx%wQNI+$1;2mE_)d2N1S5IEg+52CZ~}Z8 zZVR)P*>n$qgV9fhBVj4r6}G`#cr-Nmf!m{h3MxNu!d+mW<$=I>I07oY`@$_?Bisgt zp!_G{2zW9a0DlXW@4KPGc^GaD--L?y6USjetDg(UVjhQi@IvUpr(h2Jo8xv(fxtNQ zGoj*ZbvzcT+^&XO!rL70g}bAF3{HU`L8X6qvvr>hr=c%|@^>IqJ;dQ8cs$$5ebGM&RX^*Y+RIx`|1nf~{R^s` z2Zn5VcX7;t{V<;jN5j3K>R~w?3Rgq5o715OFN10q4?(rt7opPgS15l!L6!TCt+suX zz>(;KQ0|U`s>k!3{&qMD{Znu){1h&S$+kdXfA~kJ{xYfE`YVSjk9ODx9tf3=2L-pgoLxt1lKpXBbsQgTXGG74YKM2(?x}eJUD5&(F1;@i1;AHp;RC^k@ zf<6dm!8!0KI1@erW#6}hwg~rt%6}Lt-nCHe{c@=O`!Mw2TTtl^blUP5;kXx+|3y&t zNyoF`H1xMY#rLr@A0DytV*p zRJtF7^8W!;e++b4IW`I^zNJw8;1H<%oecZK>!8wcJ5)Kp2o>H3Q1#vKAX^W+!g1&) zK)J7XjKga5r$e>lcOAcl^U-e=v+}wgs=Y6Tx$rPJ5MB?}UhjfR&pIe~k3rS*hfw|g zXQ=SU#%(@kLbcaQD0l5p{qzWDf0g51(3C4wdw$>P0|}dtUEl!B_jD|QL(o^jNw5iS z4bOsG!ONlg|4mTgJqahn_u<}fXws%*5mfoDfhzAaq0)IXRQWy$w}T(S3Gkm#;pMEf z=_-M07fn#%91B&C7enRqUTFF&l)oRL%4w%nA7{K8Q2tbyCYOC4{9Ip`mP zJHfv}<#RITI~)x6go<|ooCqUOa_Ley z2wv%U8=QvzVYmhS0V@2>)>!#72uhBPhMU9jP~lC2Dz7G}_*TLl;BiptxC9o$JD|$r zBdB=)1;@j!4n_9BX;AeZfvTSipvvuT_IH`y55DVr@*gleuqNI zf$>n~QU|kO15|z+q4FDp1@K6xzXeW3{~+82eghZ4Ax8xQe}V@<)&KOPZ8*!|uILl6 z4?G>JKF)@H;f0QuLA8^sU^QG1Rgb$JW97+sxEcB>Q2l2bRQ)Z4@^>Iqde4BWk6%NT z*LtXQz6q7zAE44R`dG^%sQexPRX%a3c5tFI|1}(q{!X|v{4-QJeFN2>zJuxq{npz2 z<->mH3*i=UI@}%Z110a9q3Y*!sPtV2)&ABwu7~OuZ^0_~cc}EtKF+4E9;%)@q2$@o zP~~t2%!XG(mCv(K`TZD(=iRo|NcEL~Q04e2RJ#5E<^Kbya@^ts zoBmNy^)nMHy!p_B%b?2X2&i^?AyoQqgldNmLxuCUGyf-4yxX2==bau@`s<x4< zcrS4JTb=$XD0lC`$?!9%_ObgZwmj#-tlX{#yVCpkD+B!6w)j9t4%%l~Cn+3RL_T!NKq{sC?WC=fmgW5IFQKTh0^U zHt6R;g}VrZ- z9_GO3ocXs<@%BB(hBqE6zR55PE`mz;5~zH4I35I*&y}!0JkIe9sCX`ds{aR|!ut`< zgd@(i<+T*5eI4lZ$H9E`=Rk$`7*zPr!{zWDxIHXB&$gdMa2)z>*auz#Rqxk8wZq>+ z<@*kJ5PTSJ2dA8G%WFPVxi5422vk0gfjhwSpyIm`syrWYd>1NzSr^#)9}S10pXu}q z;g0AdP~jW{74L;`D7*$aq3?Hz4QDv? z&`*HMPdQZi1)X^U?u`CysC?cGmEM=2`s+tf{r-EXbPl`J+E0ec&pfF5JrF9rXF=<#Hudxx4^XUVnos_kLH~_3MsM z<+&6V!30$JcS42tHdOup3(EhnYixZ_f$C57Q0|_9GvNDhI2?h{Rlk}AmF{w={?Gwc zk4Hh(!})L`yb&t=x1jR-gR|f5H`e`RsC1RVF)$A0?gFTCx*sYXpFoAv|2o@WM?=-$ z9H@LOgyUcgO730+v*8VnFG7{ucW^AszTW1m0xF*4pwfFMEPx+Eg|pKQR&I@j^0yF5 zZXE`d&(oawRd6)=^>85k5*EUr;C^t@Z|%5$6x;&+jc{{#CsexcgHiY)RJ|^`k+l=- zf_uR6H(7Zdg!0!6)vgYNO3z79^>YbSJ=_a-gD*n4`@)%TceCvm!8Z@DJXgJCR99MLgnK-sC@2xn{DsYp~}4sD*Omkdt3`mdBAPa-wV}_)UECOH$m0kN@&UvntFqZ?;W@! z`~ePugYUBG9Su9t&vyFXLbZn{9p8oW|4*mi;clDm0yr7-1~>_x3RQ0pLFM;(sCM$L z)2k87JO}2(YSsC2dM$u* zHwEUyxsFL#fc{FD2VZjB>|rYxCPIxT^-$q;L*;L+(_a83udaovhZmso-RBY8Z-&E> z=%+x{&qCRwO74|F4<_NR@EoZAc^j1br{OgC zK2$z;eayzQ0FFZ640nTTq3Z2wsQ$IinZE~jM!(tP)_yn~fxZxC!y2ggRzsEdsZj0V zTB!DP7gV|)gp%KHK*cxU30rRC9A`qsUj>z}7O39-Va4h;Gp~~eqQ04V7><2%BivKgHd~f!Q)$at=E+@dza28ZJO>jIs z0V@7Gpz`@9RJy){`@(IXwe6|_D!;3s;yDAVJzotcz?Y!X5m;~I*&J?(b^=uYoC4*4 zU#M_HQ0?_*sQP;rDnB1XmD}Lw>^|=lsPsgj#>r!$`p3D@gV#Z&=NYK-eG4j{Z=k{( z{JiBfDEmez{|P96YvC5~LZ`pN@h+%-^$b*bf9lLP|GllhouS&{2)GrT2^DS`RC<>} zj%=_kKn{Wrrr%nyMor{6$@_ZXZE{|uF%ZCBjcgG*0+->oaEzjX_2>LzXwy+EihWo?qVF#4|BjF%;GE}}Uf^vU@ z)8FUx>!JL=2^G)hQ2llDmu>mwLFK;;s{Dg+dw2*`e>e@w{oPRY`4-$0egY*I#{ALA zN2qp@glf0vLWOfDRQ%64{Too__a&743A|!C8mb@8hssYURDKSHivJX-{N4e#gO9?U z;Hyyad=4c)`n_uNIRL8OJg9t)hmEiVs{LOMbK#S)0e%fv!TtVZ)AJNmJNy)?-wc1v z=6AZ|La1~l;6Cs|I267PcYt3*rEB1ytsL;6+Ce$o5r(1Cdjy;dkAZUkth0XyDxB}2 z+QXpNZNDA~<*pd2yca>0V>eW}Tntq%w?Ng;Q&9Q;5NbThdc)d}gevbnq3Y`ZI2;}d zCHF3b3inZ{e0>BJe%71T{SHv+ngSKyJh(Gl2Gwp3cD&s2X}BBaUqbbh!Eagj#c(+K zMmQZF0+p}Zp~CqiRQNwZmG_QsTYs})KKjK_{?|hJy9yS=C!or8z&mzby&shMxp3}g z?4v@3H}ZWePv*nj(XWIf;rUSYv<}MMi*N+|9!h=>`@r_Y-5v9x+Vu>W4d+9pI|5ZM z$HHCUuc6xaeNggsJygGX87lsF;Uw7aFO(^q1`mOUL#69SsD3c~Lt8(&P~la>(Qr9b zeIEl=K9@rIdk(6;K8IsrpO0+0O@NB83@X2ezya_KsCITSRQ=xyUJr={g;2}bvrS&%wsyt@HKClR?J(a@E;ZnF2Y=$cTE~s)p0V+Sg zg^GVY%!VIB)&Jms*m|4}mF{w=@=QSG_f+V?t6*RFI8=PkK$XvnQ2F=}sy>H&W&7n! zsPxxC#eWb~J3bvM-FHH@)AcY1Zt=C{M3{?y37iX$g$v{kR>5K4Fowb~Tn3+k4RFG@ zR=*Z5NB<#IxbwfW{rDiLbe;{B{|8|q{0mgNhkb9;H^;FZs(em{Dwo?GUxx>v@B4$5 zAI(tyuZPp&%TVqI{pk7?R5}`=ChLTrbK((Jy zKhsy>TqyUyaeN*Yq5m4HzfPlds=SKf6c~ns;U#cOcr#S{yay_t$KkH*rO<<2a5y|2PKGx@wV(H(2Y-Mg;4YhGneyEW%6ysA9{~rUztWlC2GtH;g8RUq z;WlueK3S$5s-cJe0H|;ehtuGtunfKemA{dFvy9wc2zNpsb^5hX?ff#h3w#W!KHq^V z_g(vCnfj@4TnTr;{8Cr|?|>@j51_&wxOtZ8&!eE^)GW9+Tmco&bx`H_JiG;d0zG)i z7PcH8fb#bTSPrwc%rg6nl~DC|3{<_G235`%!`p1+X5jg+=fU*Z@ZiwBa5C)ow0uya9UX?}x+STTt!i zdpHZ`Y?Wo?Q7cq=bwag|W1#xuMNs|VWvF_73#wlJ4%IFPZf&_eRQnwcRUai#?)Qhv z$AM7c9}ZQY=R(EvBHR}K6{?(naP~QavWy&ShAOAipvviXxI-5G8A?vPw@sFgb^`;q z%?g|WFNV@j9Gn$62R;n1g-eEH1!8cs?Xpb2OhT2%c~Jf3R;YA8?#y3@9{O*f(!bO8 zwmx&A@{`$A{`J6MGNHK=y6D~Tn!fpJjrOn?e+HdK4AgOWSPz?twosQkVR z_l4g>L`0xuN1NZ0ooxC$pxXJVun)Wg_JjAp&EW%3_4YU{gujP1u+LCi-V34Xrwwif zS3%|LV5s`N21;H$0@aScg_65F4YTcQDOCT7K=r#bq3Y)msPw-MRlk9qZN2XVJ+uW- z{iGTy{0Nksyd0{W9)n8v6L1=Q0V;p}cd_}~8mirG2PeT@q1sa=RD8!nwX@5h`qSM| z>3SKezCVLqaLZk7KD(jfKO2sNcSE^<7kcnVsPS{x;kJFZ!#U_rg^K?VQ03ciH`@-T zLzTxOsB%~f74P*>_5YaD{|PF-e?Yk#KEkG_2x>fObov!A2mM;8blwaV-XEay`ziEb zU(d#$4P{;ecZLmcHe3l+zjr$O_n^Z20V*BCN80?&gX&iisQNv}>DNJp_a2-Je}W-c zy1Q++*F&|(kD%nspi$P{EU0#NG*o?@1=YT8feLTE(|-gd2l|e->D>V;UG-4qc{m&l zZ-T1dhoJKLC#Zh=IaE1qo^8vs0FFdo3svq(sP=U{R60(C3*ohJ3-~isyV_!mZFk$k zGW7GIJ78>8x zya`U8L5*YOus>V`m7X9}xvzpN;5ATkYP($9?#DpQ3l>AQ*EXp5l2GZq6dHLA74Lee z{C@>io`dsjx@JSU-w&$2wL;mS2o>HvQ1QM8C5OI&YF|6%+xAilIB-%{pdF5cs;3j6>gim#2mBrE1HXW(_phPS^CMJ$7*LoMI2`T*mEH@X z;=LP64!j0c-(Nw=)uEHE{T@)|xfo7{heGwwTcG6CD^UIhOtH*|DyJH#_7Z|>zpJ3q zbE31q0IEO#7EXuvL524XoC?R$SkHmW;Hxr+9(;ZeJ8%3P%Ka|WYU#xLJ)RHM zj~;=g@Lj0(ku%-)qghb-tb=kNgA?FIPXDCSe+eZIcH7g&I}b|U#Gv}!$x!w38>n_Q zWQGm55UQN2q5AnssCm*QP;%#WsB-xVdT`6VY{2e+-qs zJ~Ok-{jS~NKIm6KwSya=%KK)ha2|ka7hgd6{}xJKZ8OWZvz?&Y-zcc|HwnsL5UQP> z31`AP;bHI}&OElaou`})r(pgH{2XpIJImY`_!m3~edj*5Uf+VMj~$9^e`tX9=x=~~ z!p(}U+@1*)-x^o~?|~Y3eu8R;6Xw`@Sq3MfKMtxr+yfQPCs6*!l-PP}hAPKXpz?no zjKY_p%CWRG%dBHtU=jL9q3Uh(xwd`eL+KYog>wY_6}$;5-oklV=3FoYRSvg9#q(FF zewH=g_Onq?@@y7VybGbqISJKXu7L`Fy|e!(RR7$i%;tM4RDQ!y?ezjE|Bpk-iSMA= z<)D3Sza0-1UlmmP+o9yeX>bU90;<2g=D6(wTW)jVG|Z2J`@wZk{ zB-p3Q_P5jE9q4a{b+EPC%IkGda_>H<{`(wMzx@`f{S4X9md{+M_PzqD-CPLO|6YcY zv;TmS8-W^|-yNXBtAi@fL!s*XD!31P4XWSmQfvF+c&L7t4{w1}pyK!1hUgUWy3B{tq|q1xjFsD97{m7i0f>hF4}{66K( zzk%wf+wE`1_qkC1_k)V}IH-7Ufy&p*P~m(I4~Byp?09}WRQg|n%FkEOgF7y@oCas3 zUkuf*&x2}LFG01(L5()QBcR$>8B{tKLet-14f=IZ{bSGpHr!pI(lZMxy$w+LKHBMT zcKSa-m0Q1MwjT4K%4IQ>c@p-87em$C1OLG_2_ zQ0b0C$<=e9*1C#2vsfzLY4c$Q1P7(q4mY#6!@7A3^22f5h64fohlKQ1)$5^>ZB5`rra6|5rhcOV2{}ug#*iU5tmy z&puG~(+m~=N~rR>4o-lN!%FxiRCPwad^bb2lXX!3UWRH%SqE8nL!rub zCe(Pp6iTinq0)7^Gk+R-=--2CFMVS+-&?`?=*L0Hr5G%RheO5pFjTww460tT<2HY_ zQ1&Zfe|R~R{S8q0d<`l+-$3=3Z4$PAvZ2yf1=TLrIP)8!((x)(`x=?dGUpAmp~~Y_ zsQlapRbGFFlCOc4HXSpd&bx`dr0#$y; zL)Gh<&ip#4^gRYuo}WVHqyNEnel#4)el%3Ql|v6MfogvTL*@5ksCmGBQ1$VmGyfPW zUjq-Z{Zc4*zjEdm!jb47cl-!eqaU!w=A!|sT#``baiTN79V$Q1LG^iHFDC)#ov0o7h-L)FXvP;%uYsQS1Y&VcVi)#vb& zZ2zc)8h=}yJ_(i16QRoM3aE5E0VV%FfeL5L$##4WLdA2w(?15~{$Eh-X!ldB{40S4 z=#PVHe|JNb+uKn2?SHCGcL9|A4?^YhJg9bX7p#DSxR*psvU4Md)E4McsscJ@oow5C4SQKV$z8&s)P|U6@Ud zYvKLa{e*fHH5q?9;qG^+Yp`2Rc#<18qY&wVccFd*dG17I{%&;oA22K=Ed447?=-@h z37?0*a^{Gmz_#f1+ZTm(AdcM&n04^{H1Y&aZjaw9vzMD}%=H_J z*<&WhZ(MKu=R@2ajlF4{U`O;CWA&RyoUfrj4D|=xXpNHjy9muQ z#IL($qjCEHZl2=#J`_VpV2(@UweV`({tNr-Q4_KEe>>nW^Vc8!>P!QkSK}ue^E#;C zZ&8oA=QE87^-mntxaq=t9GpWOccJ!1e*?T3KI;59FM-`Le;cLWO2;_p} z*x!rNyzM^X`Ui?>kNHV9F5&rJ)IF#=)L7DR9p+c!{~Pp2y70$fzM5x0Df#HX!Cez> zc8AYncOvR~)Me-&Lw$m}6#Mz8%-@p)l8xD}gwX=?(eKQ&ekbAI|6RgE82fkpNS(!C z7v9d8zmC$}%>Uit>`urCM|M>%jB?Dk=XtTS-xc>Ou>T2l66W7wJ`VLhsvl;m#r+DDer1?xe7+pD2sItGC1zU@?(mH8-pA}q{FK8HsC`fm zpx2moG@J(g-vRjR#(oV33!S093zqroMspSJF2>z)_}A}dINUu;|4-~MfMMLMlL5cq zIQxUJ(>k#U{W{bUs4sE%Cg%QcjLgvI!8@JdUZf*|JN^EM-P^DX^&{$i)U((GwJ6EAwRkjKps>_6=yCLd|k^XW;*@s8$!p$BwctbY&31?+pA7#%!7MHy*PS zQO~3Ph}n6l3wic`f8lvgryoQ()mSVe>|uoC|AIXKj5-+eW8fIv4~Cng4#m+p=f55M zk(lXsAZA~}D>Bll`Ko>=pf1GxaCn{b`>`ze4Z(l03!^`79&z^f@Z5=c2>m~Jo@1Q{ zZs7TI%wNWQZ}=444Kw{}onOr}uR`61`5$oej4a*nTDS$~4Ve4CTAmy6dl~9fo+rT} zxcRFKPwq}}?w`Z_O`daH9X!eN*O+aC{y^OA1e?(xg3|8_=WizZ5@+_fqjh2Lxo(BK zYcO~Op5y#nihh7g!!h`|8nqBTON2nq24N_yf8wt{c8Bo%obz`h?v6wMFiP{$L73m^ z{QlOt`5trq-gV~h!B4RJi_8eK8vRW4Potmb{9MfQWYkHhS8#JH+zh)d$^XkdYt7J( z`S~dQzQ^uQsDV7c;o{lXmEm&d#yI3pAM_u>-)ES2;CDLiSyl(CQD+gx*|;foVV&mO zevX}fA3ExJEN&ih`l*ERqH}vX9E<&Y)Zci15I1G;x6b}n=;3z_N^9$W&U^;?CvjVn z5eL?Rvz`5Kc;1QU@38Mfd^@AR4gH_-_Znu$@_ZoA7sEH?af9Ffm>-MT&$!X=ZTx)U zo~18B(ReU+rmrS`{HJeGjGFfpA0v0cP;iGV73Ii7M@3t&SLcQ(8pZZ zzjl7+JN=n(AKcaBUccX21RjBZ!R#*Q{w)|s{|e?2{0!jv7R)MLIP#`7bJV&22>aDM zPr`m*)EU?fB%V>2>$ev5FU;>l{{;LC>es0EFdvEf7QdHZ#};6q5cON0TQI*L<^RsX zT>C~BVK)?|-z>s-74tJu6H&u4Z?;x}9e57u8FT$2sNKvHW4_9Y=OeJ&4z&S${EkO8IQM5M92f2+9>=65WP`|ASZx@~q#Z12`sC%59^v|Qd)dRm@q0U7e zOE}ALbBlBLXBfr*AF!+8d6bJ6ZD15?g$sMQ%ip$`U5dNQow?iX{fWDop3h(Zbl6u%u?s>b!T5nIQsn+^@OvNelutO3TEB- z-QA_;u&Ao!h&4eipR^H%sw%AkWjV+mWz$ zM&FA03|NHu`*1CM(1rJ^<7T+M9=mO^D~0~=Fv7VBGyS$e%`{K+9n5~?+^ux!kk#fc zKYg9q*O(=6yEXbM*obG}VYdam47=gDY3KO^p5JqBCh)A^ zUkPgo&woUH&-1tNIcsJ9{(zZ&55jX`6Dp3HNccy%Fb;RThOlEi4|4h=akl{F|6b&w z!iDFX9go|uF#F2+`4?eK=D8jRpTH{gPoNIK&33L_rt`cWv(0f6Mzy=ZzQg@27fyCY zJio$h5c+*kC-eLjeqZPLY1CUN{n#20>_PYoP@nRA3+|?%9>8uM)UN<@{nn$u9DnEY zJlpxtfqNKR#w|D)Hv!nzQ*w>$f7czzbU+u;uIT-?k@=~ssSa#SDmRrnhZPe=WP*>~7q zNf--IcN^EV3HUece?(2yvopUH_j_Pg=i)4Jya=9--S1H!p>9HbkGmMW3XUYs8wulh z+_gGC^D(;ud;fPX&)cFVI)k?y&%pga!Z;3f67~ncV*Khi3cG`0A!dI^Rq^}~)bBbt z2JVBO#XN71+xy{c%qHOf6ZCI6x6^Q=U&QHO#!kO2;f|OsN1cY7sm|Rz?7l#qC`bGX zTzWot{;er-;(io%i{MKbu7Ky^W^c^)&v5%Fc1L2jtqaHZ|0m)<0e4$s=l}NLc@5?Z zF#mz)fAHKN%Mg4Az5{2#4mbgJqV#(Z_q!1Op73AjZ^Q35xVZp*!0Yi#L=(XduQSvc zjdjoPvRk|b;ox{O9yx_`UxFguq5wZ@dd)VSRxjH*3tJ0FP z60f;E)Vv~|?DWEsmBEg1i*LR%6pM$W5joGd&gT*;Q6!=`4JX1lJ~-s947Y@$Ua%$D zl?cV~OKQTAR!safU>1$d@B&^=N2oQ?8I32#@!T0|Apkwa!foxoah_Klj3o#=8u8)@ z9=%|~%kJn%X2;2Hz{~S$L(Pe3%!@1P?4&WOGbLk9GM#3aCnGB&(N&Rv*HBemS5{S- zpP%0t$Zm;Cd9hGukPJoI@;SryTB4!27l|gkc(SW2N($=h%Sv!)Z6ae6UTAeVp2+vA zJ3_&D$cuM{n!~N#US1yQZ3`vHEYB_Bm`P~2JcjWbqKcY>iBL!Yl|hD@;X;EM#|m#s4EX+T|*LfTcgN%*+5gL0GWOfSC4ru{4qMTo>xG5Lw|9pNtUjqFtsF=H+=~vzy1-0M!gyqsd5% z@#9=zogE)*x{caku%jcoib_c(#(GUT#;Fq0*%WR|Mw9Wqysl_G9&QSE(CI^Qn+D%; zUfzEZvUMB_9h9W&sab3y1$m38j{i8l&UI#zduGTv__y))<^Va7QMxYIn{v3ERJ)2x zM$$dquP9p$Hf_DyoAR;ttAa6!yBUF;$%T1MVdQbn9#h;ybxqa0nxYEZzQ#$KyK%rX z5_IJ3K+XnEs%%S%w?~s5Ena(YWeA}{-%O`bo)GBj1$kb1u!)|b+!zhblOZeI8b&xu z>L@sXv4g$jhs!swvIOr1_cilW*Djn<^0wru}W`&?RE>y=d2)|S>REX93wg-2m2WXi$mLXkG2cluBy z!!m7CJEyEHP}JNU>PmPeRkeBXL^p|>Q&Uh`uCXxWg(5Aq)p$OR5@Fg_IMS6&cocqT zI1=nYVmR|?GO?kBos*chHiJa9w0PC^#S2Q8EK?KEG$s*4JW`n}Lfwi02SMeD(K$w| zcLtGAVpTM@f+)Bh7?myKx*r8B<%`gt?bvMoJA+>5*q#pvXv1 zGr=N4O*%S*6je+`MW5NgjixCGes5k)eX;xm)fQIR zq<1De65%dV+?ATyF*OZ!#5GZBiZWf;z`~5^%458n7(4SluTEnZ|7Xm~C}<`m|C4n5 z|BE1%c+$%>PuV74rVLV688HOCVg_%f%t6xb&yag*(U3N4zG)fnDDi)2?8mowW&b9eK67WF)of7!a7l{5UYD zs=TU(zZDfll_g$7QO&&C#=xBFdata7CaJl;CM|KzS&R%sz&DflXbk_pE7@xHkBH2) zuAMq{@*ZY=!tm6RpN*WG6I5u;u@Dn|Pfb_}bf#ARc{NoPOiWb$bJ~LuYQ)Z;lUlnm z=7fnoWtD0`UV_;v9$2V(MI8y#37vLMG?Iu#J2H)G+rzCr+(;BDH?5?Lh)e_uN_Eau zDcWk%8n^v5)ey|sskF#xxYdN<#;~|&=L;<9qLH?7b{Ue>5^4?7*~e|lPj!2DoMFDh zL(oc+dZnuqp@`O)89t0?Zl;wrF^!;NDHdj};mHi{)kUSA1ZFbQ6$`JVbQxQ`wq%GY zgq>5T)7pC|%n+9CG3EbD7)kX5(xK=z&-kwr;Cq%wBMp_WUrchZJ_>vHf?O=BVZJuE z%+%rrW#DYh0;yLk%HtQkV!sK`k`Shf;%240ap+}5zZkf&-bC0HW!1HtidS}}<(smt zu3A)DQ$1%>*0t3|HFGwdr^S`^UQR`@*&}Ot0i{apcCWzgFFpb!8~QN_JygI=|h)2$MUBnGO3Q zX;s7BL`9{n{AsX+b;iUs+8piJI8yoAbb^iTrqYY0`tYVp&N=uG%g(v}#l$GS6+P0! zB*?8=m=URhlPQ_Hsy&ow$CNG{)0~CIP|qB>ysWm)m2BKjlj6;>Fw-hu{M*%!nc7KQ z$Ganm;A*=>SJ><|FMG96+PE89tqS{>Z=2q7(D)L$w9+JEL-5Pc}!|X`Vj5VhwiR8u1om_MZPyggVrb&qr`zTwnKB->5_%p|HKyh2N{ zShCp+zGk-7#Jr4Ec#BGasf*qJ=(dG#wigw@YPO_wVcDEg2d@F?Rad4B%!UaCc@1?- zs!JPL(rQ9(9oqdK^1uL!2(uFkFDI1WmhTmyD~PuQ8K14=WtBx01YK4WNU!5c%=|48 zWk#W9n4X5aLd7pzc%5u!YLcV|j$0aL8|G&8cWWovj6Q@l(lR$ISZ3E$hsvFnbwMVA zktD0TM66qZI>UIfN#-)?2vMOyk1%>Jzc#XQD==qndV$%Kl|)l}Q(@cWr-EG>q;axV zrE8TCjnd| z1=-;4laV28x*{C)mp;a*Lh6$<)EVT}EUa2x89J;;Mj%XL6)wKCk$P8MZ_HK~1 z?UWTc(E7wk{Fv{ko#=8I?b))4$6J#f9qPU&Vb(@lQ$6h@Fh`g+MO~>T_mr@BsEmlDb!9)ZArBqPP9XkAJFVYC7~fh(*)*~b{*==Eu2&?Tv$}& z;5AsS74>H8e+E%_cB`J*NK;gU2|a+ef#7DnpYPd)o2t-knQ?~1E|TUCIw~;RtZI)) zz|zHRj@H&Ps$@KRje*jRV3*cCax1Yy7oE(o#{^;%HjE4r&eO1GnWIt-GKFRnCl=KR z$j*F-9kM{F*$C7SABxeLB@!rI`itaryhHmCA*4)~gmbAJdHc_;Ws@i#XBU&j z3LJ=<4Grrqy|ZNouk5(~L%PJrrF?A^jOJ z+E+A!6i$t&oTL1b|G0Jz|ATlk-ThKT^Z>VWTuOWD(ackNJMBx`_pH3t=A1QSOfGdM zR*rjqcLSvFn z%5t=|RU@Dd{%3d-S7)#G8nWY!x#>qzp$%f+8=c3+jSuHmp3S3kYZJrHl0>rxK{H5& zT5L$xR|N2C$)h)co*j%Z(Qc=7Qa+6{Gv?%bRqFmx zWK`PL?V#D^A1za7CAu=95ywc3R7MiO(b@*1~$yZ`EoXspH1~S$zL}K&##DAWb_vILZmkHAfK)%CsLh zG;^li(==r;kIlFW)(sLV&W*WQVwdX~rgm?}ZP&>>6@+AzJ^$!otm{k6m&~%hhlRVF zVPinLFooj`RrjsZVLCT-ZFfDShpipdHx3!GW@b?)9Aq$kv8b+ySrL6JoS>tG5<35g zv%AgNEptZ3nHYm&Z6;T+X0}>i(CW0_Yeyk)++3bU(MfS? zGQ-)~Nb5c=0p^7wI@bx=cs80;YBQwVpRs5uB#DzBNcjqyV{=U`G@WThJZIY3ts71Y z+-8cGqZx?3c4gLAw#eh-G!fDe5NG{w4%+ROP%12hqnSFJVRBAML49p;fm_SiT^i3T zO3l7FU1U%}aO%)X(@bqwpr<5gl5MeIr;)#!6l$Iu^;Sn?G422%z*w%aYouEVq$Qe+ zAq|x$ZZtWa-#8c)bG1&;teQ5Vw0Eu`j8+=Ci&M)K!e;>^TYp{IYDUIX2}-K!N|h_Y zq>k9=C5qH+@XTXCWEJHvrFCOReiLS`sHS8r5w=Y4m@qJTp2v+jR6#tT>kt76^T2$6 zS!a*#awXmE4IH9LnprOkzg#OudJ)CQi6@~vTCk)cR)9lGS|&%9$3VIaq$6EW+-cy0Ev9K|4dcG8{`JSv=Tb&Mc+O z(4RUz#4YOrmP&4KP+`%8$)V|UO zYluMhClYGnOsvZ6{Y!RJsYKd7Tdb^xIQFJS)0S>OAzM?iln<>MSnt#RmL9V7(3H6w z#+PfWGws^8BJHST7}{+WB`g+dWAzrxSlOh)>&0q8fD0AHRYf%=%XkPZ@YkZM4>}aL zv6@#fZ!oh<)A2NsWXnL;IZ-rDPOOW{OKSt=pml18co)m8nl+z!*^gR!fAcN{T zW$6=GW1`bOcZVk5y0LBCYy%k=sRrW)I;}?IW}GAy>@%A#jI?QEZ-B5QkL_Ab?#M<$ z;+VxBqTYn3-DX=_x{LQdw#afGJl4Yl_s_u=d*`%NJS#hq3ZO{8VepHz*{QWI=#m703 zEHe8glmX2hkz&G5ts3pZGZdi(MI(|tTo{P5@vHpfRy+3Y&{{`BZb#o3n}f`jWM`Li zR#I1->C3+aO3==MZ_;zNkW*Sdmn~8gWUnqV?6~RVrYkxzbQWfGbVuEy6{3vrEu6c>1>(k0$FYwdLC_+4QJgG z<^E>6zJgx$VwO#v>6Dm#r_4Pu7ZBoHw~ zHndGAz}cjy;I@j)z~_!78RN_?KIhcz`meWPi+@7!M1Mw;2avyrh2&YAb9XHy-$CD2TgHrl8*H7_}4w${whMr$`sQWxY_ z1yiEnzmRH(ZX*wo%5H7%uba%Y(KobHcP1R#sPYXpz-?fpqSU#qE4&`gH!8vnJ*OR% zvHQZS9zDD(=Vk$?Bvb?{isooBlfL@vb`dK|E9;k)R@T)lF?$?dB*|V8=Uwi^FwC7m zwxkmj7~(P0kYS9qQ)@WHc1A^2Nj>|07PWy2j!FE2T7HaX~janE+C|EAFVDBu5a0X6kMSHsg_@UejcT8tlVec6+|Z zjHiOPS#)l1P6im*&5XcJxdRpEwIjxb_Mo{j>lIzB^4`%->P{B+QRS@TIghJ}z3T5s5JaeqhYMUFvEi_rpqIzt4%%ydx z#WAU2a;Kw%T(7RE*qj(L?KW>6(1!fw45Sa5HDbP36zS$32Zg~k)lhG~+{BtFOfT-? zIolyfmZ^vy)?Zu2uq&1zc9wAjTiHv)560wfF)oSc>Cr$JxS-IA@*%%jEnd;|- z2q_iZ>%51y&0woTTNAgPL~`nqjIqwP+v%o#Yfz!^-PMPbfE|!Bvhy}&7cj% z=5{s)LLSd*J7%R#IB{W+8g#BbQ@75+{&>pg;Vjkgzz^!7qV$f-4s^(=A1&GL-bJS1CK zZV|G1MZ|OoyS+eE_H_wan$?aTbXV7O)}F~S#$MxGZ~S!~*Vz`ijx#1*$E2Jo4q)TN*F4v5xrf$FN7I`gOJiyH17hq97Dbr6ZBohP1RG*NEM2Ag$? z-rI@ezjw0fL%>b=%{)QeR1z}X{9*(N4!pI~O5G5hdq*@|C+GepH+DRAyDh_(B2Me< zn3iQBokmrsZk5}o%t&}i9e zM;+Q~pw3gh%5QTF&3**-B^1s~S0uaAh7qrms@S$Xl*gqCM46M+^(}zEmLgDg9eLbC8cwV z>dWhLjo>p@IkI!duc>!g3-c#V9H)UO?LC6*W6?(jFZhoM>j4 z^(cKgwI}tu^lw~Q?MAL7yqK2QMTT|hjM#PIHbOVj%J_GtoZ*}OxgLfclwOBdsADcC zl6qKoAq|+#u=hdvnRB=v*8V1xsrPm>!(s5~;bc?EPIAEJFCCRmy&lO#B{d{#6rx@G z=1ydp!70PoO3@8XHGFSqmTJNqTCiQG0|^_QUXs@RMZJ$@WY)&Jgm${3eQ>w=rv;~O zeQLhHk!43P8EJ0!R!5S~j^boNj1act8+|2p22fR->n#tBm8B+orX!{D?OvRgFUfN0- zQ%1Vbg=JoGRaM>G+N$Dxl~uFlZ7(5FIQ~Tg=bFWZ*#eWyQSKFjUAEY%ILA(s6aLYY z??gxG<}f$twI{i}h9KefezifH*!+NA5N$^|sJu7Wvg~1(niDm%-)U@kmj*#@R&)$+ z0|GUr^SFNG)z;N8Q48qh7`qHYs#9)p>WbKi-g7Tt>gJ7G1{JaF*rcV#MrY}6qxbG} zW6KPm)6F}dy?flqF2kSM7AP;RoX4R>Q+I+LVe(*FwOisk9rdAm9&X-9H6**t%sJ&; z0|xC}H?CRJ*09B`E|PJFsV3A$-D1WS2?mwy)p}8Obv`-@FdJctgAF$G=|uLzZVfXU zmXxXKf?Ztpd?nJk>G4)%%FN#i@eQ~Pm9hKkZ(%6i%&KEvQI|G3@-;tN=B~`vn1c~E zq!2R{g&Ev8Ff$8tor`6x%4>8uYEKQ_&?et1EdT0?sWVgTy0t_p4b)cE*UTwhlb19L zpEY^GHF-?|*JUisK1;0xwAN*{nw+cC>VhEM#k4cOJ|rX*d%kt%8=DHqtiR0N^I9ee z%QH^!#^Tw&zFp{H2_(k@&K!$I2kr z)T&*=yDBuxAmfPAr_9+RahJJC)JDPkdnKE)aqASjp!_$ET%+CCl}6Rv%w>;pDe-K^ zTYI<2M4^o4u`kG_(Tru;f0s*zK|%Yuwr>LW3~sr;@-S9$FpJ~ZvG*jKbE^NFVz)*0 zzpGZ=1@QYYjYe0;{o_B)!qxSg^bSs~xiygCl4G|P>OsStYd?IQuR2;nXR!+WAC{o~F*?W*TQa#yj(Hjoi&%Q8SBDJ!A$kQBHHc zNrlsAaRwSnWQ5kro766ls?rL+z=P!04dGmGacxPRNh?~0FGYh3c8AJKz5mpme?9OQ zLtWk;Zegdx?X$2bPE7*stEP%M-LcfoVpe7vfnrnE(_U4uaX)n~H#IUSnvC-S^J0VD z%d)qr8QI+VfN{ypuh-X~WNBWyH9aoGqUD!L)OYzG6_lMWk^gu{D8%S&ZW}AUw1r+u zqD`i))cIU%v-xM4VVr2shB@7U9KUhQn#$dg!da6h0^8W8Oq^9Xu@l27lV(lU1IDhc zm_{CCRn}@Yt|QHyqAMkt0>&1(WC7JE0phpm-QW--&VTdE)G zHZ0?)ZW5T2vK}i4Ys?EA8=Eqh*Q+M(jS!Nf5P0>4_qXkygh>(~7t>sc(Oe(;+Bg(b z`WtLLy0B8~fM0Oap@UBI4!^GdIFIf!f+i6NU*D83Q81UVM(WPG;Z#<_u~6CEC9GI< zEzkMi(4`&nHTv3+Go0zrSb?b{=*`Jg44ZJH0}>Kp-e@$7G`3Q?i0xb}l*}Zi<{IYO zoh;oOJe{cx7*p!<=Whe`oNha7#_gW<v*`0*SqPaY!UOd1G9}_TS?}OSd+Pb z>!B;jcPg6A4v2HF6)*dgTwRFhTR7&8Q*#U&Pb6DOhIaXL&7r(b!rZnrJzf2X=(xew zovR6-WP#aQq-8l>Cp+5sG~4Ul=E{>K2jV7esEe5DA?oj`*Kdu0 zRUb{e(_VlXJ3`zXwQCC9!LS>T#1JxXE3)fa>%KLVAv26Wvp`7Q6%0q3JCeM-r<1*3 z_Tpc@WKj{~A_MZ6EALmz;#Hy+K~a06H|t5K5n1Z~KS`gTRc))FVxnsICLZbT_x zGU=eI%L=Njq*W=9XFKTC1?uLPR&Z0W&P@wtTci(2<(VCq2AAH(d|a^0&edT5tlybz z@&$V1-lWnjo89chm~uhZZBp5G6?dCeE=c?NOP$@=Oi3UyN%R)2=CYj$U;`I2U7fHg z4%8u(6s@g4yDP^RQrJU~jg}o9`Z^|!nNs3)3jexP$i79!9K&CQn2l&6=Yy8Spc~G* z^J>b^t0^ig*2h4mf>0<+@m zJeUi(+3_B&N1unRYfr{_{k%I+$0-D=ARegWbY~;u_BBpOGgrPA1pFOE+I)rAu`iJ z@RRA3+N7gpzMi+SL-UGbZE4-4^o?C3K`|;+7qnY5E>z=~Fic8$9a_TJq|CQK0MYU{ zupm6z0cRE(lFSTEdVgNwsz4P^+Zann%geK;O%#{anwOF7Zn%;48RA)ujQcOD5q+V8 z`=Pb9i>hi$oX*U7xp@>`iREi4c^hJk94}BEk|N^X%5bO6LZeCbXgWNP6 zkYTd)5H#F}cOQv01Ek7bWubApr>%W^!C26HdwA?od+9sE?hARDb&<9-AAZ%%B!nv; z%yr*;q2{=9pKV!$R`@tqjs-AJcwW?k*!4nFS{!PtHAjqS0B`NAX->b@Ue z9bkoNrf8{&x3Mw}(SB{(oy*Lr><$9nO@jHGu9CXyVxv;-Eh4R0a&_-NN7nVlF0{I|`ZMXM8KvP4(?(;53nTS6}FbY${}aA38s=N?k>_$6#k}*W%Jfz$a31zQk5Cy@fO^nFNaF_Wl zBt9JOuBe$W1(?^xT(F@QzC)tXY!Pb*eX*~yuAp$@#EAu*FY=u_eQ9A_%5EXYX2F7K z85ZnSh5S=S`{7f{-kvco>ebF3_*pyGTzmDmp0d3jnZ@QGoBTb^bfV|i;@w*~zV z5t?-e>n9y9^TL$7f5L1tbys&%eqsKe8pt$FVh;M>M`(N~2kDb#cLJJkUal}RMqPZ9 z4ES%7(vX+Oz7AV`e0$h-YQ7LqS6Wk1R#{Z8uLbze_A>zi+|$yVLpX2hYHG9>#xU$` znc8S4Uwoj_3@LINiRQ6=m1hTG0^{@YjE1w!C!dU0^D#?p4>#g`(waPC!BJ?nSzymH zX9kmU4GM`-?cc09dfM1j_+LXN1Q*_a`r+h;yp~2cNNP&x-n(naBa@LvH1#Uu2y;k+o)wFUxh2JY0w9p>q{GEROmy?)~or>vMElN&Ys0(rXaOt z^D2w#>T62v_lz4dK5lFR=~2KLmH~YL0~hAdIpeU|83Dct#$Wr*8JoD2mIvPRW0F#} zpj3@KrSV(2y>dUvv$QXC1{&-R%#22V#vucOa+fDv zsesGHF5*UGTCLBI+Z0(FIgp_R6g^8?4;_jdO-E=FyuD-hK*OnKm0k3`DxH&E9D;5ofzbhY4o?Ph}Wjhf5#M z{zccR6P=A*vk7hw!x&N&uGYSpj^d#Z-w9)7-fL~cKcaoWv}n}ZERzvh}PKb zF}wEH!UwbLeMdHM^d&|1qs$t_?GTu@N^O|(wszX}v>)&@J85`l2)$8hzNnIEeDE zCFxr}=}h~DV&xJZ?WV#;#!8TjmGgCF*S=7~7cT5n)Zbt0^`*S#_NYGIt~B~>O}j=! zr`ft{KRv|`_%3V%F}>1jurt|UM0?+@<6;ud+lO=! z^FbuUvUy!I&u_xoyEhUi9k{9E((*FACb&17_f%ef z>6SYslagssBtcSYtJxf-s47z>UaG=ksYS;D^3Z;pc?w|1z+hlKH(&wd=k!a8UnHMo ze*d-B-shZRk(9cPpfl4}@tl1-`?4EL*-QV>NpK4Z~Vmf+0b1h|Ei_;q;;A5dJ7Y7VHfj zii#Q_JKvzY@Fz*$20Y0{3ikrm;d!R?#`jT@^@rM7Tkoz_7S38p+f^#zz7HgqaRYUA zBCN3NdMc`q_L4dkuyhCHMFes=y0li4^*z53DLLB!#iKewk(4Ep{zMW-Idiw&;oob8 zaYU7oG@0CttB2L5(KB08pHm1xegY*i%5G>THM&DKr6xWK1+;Fx1#*Wo*6g82-@Yd<~=rh{zPeZ@A+v`jn0KV8D!Z%oc?#T7LeU zG^j33C?IiZAQx*MW=??Xa@3ht$Gp5q=TnN%4{*C`U9Y1tCXWY*=9yzTtz zCpd+v7dI+T?NHe`Nao8G8we&lFt!jYXd*bz^S#OGtt>*h*!p6&29 ziY83PNpgF$%cw^Xyy2GOJSV7Jck1RDf&%k07F}eRG zsetVRAe*{f38Iql+RM@p$RDk;Ti(*#-Mo{o0=r(&di(b@L zxs=6A2f-e}Oi~aGGEwKGkOM^`AQk&HBGntbe4qDhB7S{XhzCe0w%iZ;OI}l?0?Y}w zoOK{O7-X4g`4EHP=y*HTurry2zv{c9y{a|DUu73Ozd7ccY=FPhoM$?mXd{nIR&-@x z@;(S8G)<3BJ1znSnOAe1UAlrw7Zg#(TAPpR_lJ5;2a?0;IL_3k<<+5zE5`$wwwINy zirpBGmOKMp^swAD#@?|0&wgg}X4<*)D`NZOO*qIKLy+diabj$;9lLJDU}AKhgF< zkHc>)O~o=oWksqaAtoV+_J;XWL}>23GLe|=yfSm;LU>NHHXEA@ODoY3D?%QA-0kdd zXmfMG@zo+O8qQ=hcyL&~L0cF`ZiY-PoT_F^S_Kd4GNnmspHWGzy)HzU}g|!ZEOCcKYrKNiE|{TN1&179=OVq zC(rEKpx*Jki&|agH>K_QdF{uuF+^LLS`BBtDCi zZ?Y((=DG)SVZ&yeth|!Iq))R&0>LmYT{Y%yTlON`Ox`M=mSIJW3XfuMi0BJTUkV)$ z-8*-s<<(cQ9S<;-eDQ3%vvqU!7u$bF>O9?y^N-IvH~&@x`NwCSzrAMtW}fNJOhFi= zL^^P-=B8=l#>lifQh&eT_EovmAZS^6`BHP>)AVRrua2g^GIWEb>Yn@7Z1cQj3dlR? zLTzl7Kn9#v3o`a%%L@c;L#YrU7PHZRjbn+j-#`4Q<_X|teqflCC5Z+sn@Ucsn^kfn zaGW#4PK6ohR0_N63MP@p<{-<@f3HuA8HQ1YRGSBD>wfb9#wbhf$fHgud{pPQX$NQV)i zgS+6Fmu&4}owbiV)m0vnPeFRB4dHzk=@Ib-9-)R?ZtUh}9RxJG_vEqE3XeUdlH7pKi-m-|mazH}$H*z^n z5&-y_uE%V=-z6%<&SU$y@f?btgUd{iL*mo@mgg4Ypb}(u?rUU8PG5aw^&Y_02f9^_ zLt!Zi&MjDrNh?H6>{?NczvkpL@xs`}v}fm6v70~CyfJBxsxj9Y?m;8&;LLONUUibH zh|maA4V)+o3j$B-O{g4{GkL{aST0}y5%_b>~aA%r}8q;4Tp;K>7(LnJt#oF(4b9i>5n;XAOir~jSBMb@=w47QvO2|!J z!lV+2pHnX5A3AO@Cc_&M8?(7siVs!B&k&#PPPbhD0zFAr`hI0l`@Ku1b(~R(E^e)i%luLd;fV*%;5o z+`^g=yP3jg-nAL+QG-zFzVb{XKQ(D*OUocz_es+RYkIW#_cWhr3{_i~d%3M0^Y-k-hsi`m;Z%Ud7J zzxV#nZoWskWt;|PQyf7bo5n+!OMA2n@wkh7=OLo)9>0GnljV?OGPh4G`sihEG`H90 zVwZo|#k{gV2YB)^O&#uzfRAT4@!y{>mx;O>kt-6(@RxhQzEAg$|6vdHn{XjA54;QN$x;1z6$|oMdIlGAzG7oa`>i7nyuZOguBaCl1?%XQ>=5I>Ro*Nq&fg#3xvf`L?B*}Y!}!%# zUXB;!xcU`$6tR@oK4PTz9sAH?EccmZNqx8GKDbhpjsM$0hEQn1FDcmxd48UV3d>85$h@=eG(JD!IkVU99gV+z(Y?lRu&&Y3iU00&PhV>| z_SbC5p6y}6!jFBxJ@rU(9a5B$mCxlHJ+RpxTfFR?pc*r5d+sxv9}@SJ zt2AF7c2EDmR7gUWC_5mPO_i+3jwKjUEf7q9oEQhzF z3E%zV)u4SMY7LiUMtV$^!T^a*;$Xt?#$RKeJk!o&?my2PhEF)e?R(JH7ZYSt^>Wlc zeSJbN^={UdSDA=ctw#?|zvsu+tNTyzTiZUj?=TYuI>!~QwRysJO0;!rxjt{T{BpvbgbR zv-NPTr7baE-d{u%_n#XNT1%Tx9a+j)*Z<=^>23xc z7;D1IjsJJA-Sc8shZJN#Il*Hv41jjdjyHFp)~%AxmAQ71X9T-pJ){Pyi>15}i$Su7^hi;dq52e1g(9zKmT@7cKYMB zVut&<)6cc_)%*A&a1MNvUn8q~5P27#qd$>r^iQndMhSpQ;ncA@p? z{!;7F>@2?rgJG;i2*&jX?pbV!fu76P6`p_q_1o!34kgNDb zuN;oQ9=2iU!Sp0>Tv#r%N0m$~bXkiRmTR|zy5{8PF^0cuk z@h^`2F)G~Q;hE!aw)3m4g(vv1SASz|CH?gJMK)A^wY-ScG}9aM0SD|{n7} z2d6*2U?@lJJr1olmIM#3uv$xHD?{}7P4!fQ>%OE-U?$|8GcT}kp1wXB9qZl3$a+28 z?GBM8kq2Sf=~!R*vYbISkz_EP)$8IRn`GSUkJ=+~pZiBM<2R>&)C67=3w+6hkw1N{ z&2J?G!z&meZI8R%^X*=Q?0EJ{Goi(2GBJ|Q zm7AcvbzxCyOaA<^T-IQ#r}9iOpZzRP8`&9g+Q6=0hwNJ$ z!Ik0@w5DQXt+o8PRXkXI*jibD=MpdVh=}gZ*3vcv2q(Q^=$-9jPVSI9z9p2D2o2aP zMl1tV3kG;mQEjKHWMup|Iao-*ydmZ!+;^5EIbt}1ny_L6&H^6-ou1pZz= z*?o@(nev&iB>fd4ye4X&Yd&u8cT_b<{~fXu!wCWmvMeZH}Us zH5eQu(bqudMi-59sr9x)u#%UJ;NjBR#-+nlp~dA(i>Gt=PX9dbr(XXWgbDJ#(>XZ?VS+2TzQPamPe>{c+s6jE_AZ*qOB;FKBa8(@ zobDUEU{@Hec&kleC8vMY3HtH*o6{;Li0smGD|X}I1;r9k7vqvTF_m=bQ0Sarwu5pR z?sqZbj&y?{l{HkT|8ak>zu(}HbsCvEdW-Kfx^wC0QA(ust(GLp{wa$RRo`yd8qnUE zk;{XMygqyALK3=MCxQX{K5mKzHf2UAff*q3nzohJqlMMY)z41<-_wop@7G(W-!Gn7 zPLtV(aAVZE7XtpXXd|-&XT`aAi11RI_W&y?CXn*<$GKt&;Ts77@c_g~!cG@MSxu_O zWu>=w`uYHI_Y+X0zeORbs&w~Yk^UivC~PKWoc{5I!e|fJQUTfZA*fX+FOjXtiul0r z`965nJy(4aR#XB_=ih8K$t(tJnTQ$^Oa}>{Y7*0011TTyY186N4jbg1?lKNvp9hcd zSCjdANIv*;?V)?UfUrm@f7zDRpxDIXz+61*?P*Joe-KV85fPOduTU1xEIN9^L}MO0 zw(e;Ip9Gs2VF)HPtqM0YwUW0GG^~(Ft5P!&VaRvWLx4%*Y#*AZj;Oh|@#|IzeLLC% zQ)i{BBB;5B^Cp3aY}@@jWpm{NA#C(02@gL3gLJZTi!6_)o0Cl}OosZF$494sKy{z1 zx){H4C5VL>K5yUt;6n+Z-dg{>Qp6mRCdvX+VBEt`0Lyhv9$7JqxO?*1%UN9IzHLh`q_=yt<9x1L420FqFzjM z9zq{{B?5DU>d`kCSQ1d=!E=_f5tHIG@Kxw`m29ok0)Cc zPIG9rk&sIJw0eazue}v%IDOq_e%VGC%GsiIsL1utTp(W6!J=CAU?E7@d%b34)Y)e-xq(_8t%!po>~qfCWCxL`HuZP)0y@uZ**v{=D?qJ*$@c-V zT-b(bZ1qkm?4lgv;wIBolmQV--*W;{8vhWQAc{s@&ghoRQK-uo7HDYB#U`Y**N2R0 z_DGYw|FVzGZx6U^{H;{l8|nYUTKiwhnk++e^;lae5LY3)wzcB#jfZO-N7+)DVpDFg zs)|}<+5+Rx)o%nu+AB96w$?WZB)V~n1JF8FJgzhf_MThAbrMD3AZk30S<~Ucv}gaH z3)qSUATZQ|KF}fvm`EEE0i=o1??C0ieR||gxVn!4kN?a8?qhGhdX2BdufR2Mdws=P z(%J_hH%mhglvW?*MqR;eD&gQL8(-WYzS~Kqo9LYf#S8yRxGYn`KFJl1yL517td3cI*Czk7AC*$HN}m=ur@*IKqJtM&?tS9=XVOq@P^YiOfZ8alJH{L`5_Db#V|8StiUUSCmX{P_szI%E>BR7~_)>O- z!`+Nbr>QUM&zDsjC}C8R2asYCS|Mm`Xn47BYAuBu3etgr)u?I;e*d6V z`&kOLY-7|!+A~vwp`rNX-h2-?7sS*J9LAU`P(~dqU9*^8;sbM~SOf`i!LyR;Swi9_ z7%d9^_y;Y$7%{6TH5OS@WXx7oaGelpP*U*67X$@NbNu@zrdUXr0jllNk*+davM$KvfSTf8{f!e!u}A0B{BRO&lB5az_2SGnG(pATmV{YD z;rvgp%^{ks?O1FPkZfg{*zm}$GtZZ>?`@~zUy(=*&mgWC+gx2~ZQLq1*B?E=nr_(& z_2hPX;@RBFs3;quw|uMge{b90Qq`5h?jbgkifnEpC$BHv!&*{!jskQHmtGQlVnUd) z3s(bSO}H7bQc;WqsiZ`BVP26WCWW5Oj(^y??*DG<@2v-4J^bqacFAM^RovTry2QPi zPn9Q0?xxPH+OR6;u}<-&baJ79{QV`d_h0nIMC2tvwioH({n+!m$L;=+*?6U?arTnB zZmK-&SuTgN!(2(ay$kj2T#$z0G9su{=aLyT3;4Q~hS`ZP!~1%iHueUQHk|l9j-2we z&wC`|7Eb%utDn&6R43GgGzO}aURbs5XTx^n7A`)0LcM5?oLz{Tz}jG2dUX0n5|nQd5w4veU#Aw(rx`A{<~p2}aGUDNlLXd4c{#=?*?+3fd^;zW z#N+j46GnTSEAR6UQy+XAO1j5nf%}NHL~CN9rW>1DsVlYZ3+A*2Ka-vgA_D2{wXb8G zBO{7eL&Vn@GEO6T$h>WbwGy^H!v`n;9nFdyDVRu!5M8lFbNmz%g+wL|!PwXu;*zmt z(-0`W#`QJpORb0F-|HjI`Zj*Un7X}PxVU+XQ9)PDCW`X{_x8{1wbw-;LEj+xleSC< zcq3gKVnR;p2P%@K zd(Cr^_;}iL|7AxAahIyz(1hdR*|Gz?!s~j2IBU2ULj55W@t7PP*~BwhDH&xs%^Btd zqQNm2cdp68Vtscv$PA6HD5v7HV{obR+}_#)=s$k>lI9JK_D=u>Vwxq)>J~0}2acfD z!j#d<`E(IxBdEu6QP3t+*e9Nm4*lbcMDz(BP52ezmQvg=G`9xjvlh zGwTk|;ZGKBaC^;-03q-Oa4ee|735HH&QXt0sH9r7!5ajOCr2g+YqBs5yS1^NNDc2E zu}wPoHFK%Sdz>QK|MQHlkRmJfzU8*bHQg8uq^s2xI+7 zbJuWqBaUkBRQ(S-ZZ}<@Prbc8_OC{hF#1qCr+#TIen(9-(mBT`v!JRN6A zQSU)PiQ%RI5Wq315 zz7Ti`+r%ia2NrN-6djYZuL*AK9td@Ur4S?~qB|Bf{x-@>+=niuDA9HgO`!IXB83nq z>Oxb@xQO+tgVLVMfuoVY)SAjl#3|AKr}eT3jA~vr)u#8;ynkuYdhFuo)I-Mx=#*jfm(|+fc$~V&JhM z5?^8#gd53ba0drm()hG*ocyg+_9sPyg7}I=2Tp`D?CI3s`MVYc*Izqhcd1a2VzK=#9Y{4+P5K58&>lv7Lns zOz!0R2Zzl)Sp75~-^nSOtU*VUj=z&t9M)&v01Yv~Yi=837ziX_k_h=0LC_N6YQfg6 zjFHK+7at7^iqXAkOsee{j6D0A!c@l8JAFTKUMvIKI=xxgylbs%fazHhFYzK~6w}@$ z!81v#kmVV&lUzI7#@Uk1G74w#uyi>rRqsqb%OhIZTwYjrx}jk8hxga3lF-+>EPVcu z&MjEAwT2nv7g?;X&*0|KsB8Jd%cYIgs)Efqv(2p1amY#a8EY26gia(;ZK`Xp>%CpD zlzOFPtfHT^RIVxpMxZevzUFSvff5&&?1dpmQuIORW;J3MkEeMco?SlQQk5iMOx+!8 zpD$J-Y1PKLLUyePd}7kkl0dFdSnA(8%_Z}8#sAZ$oL1~@o6EvPY7DB#f?>WiHH zBkNx(hosANy0RimbnW2ytLd6TU0yV@j#Afv*(ZBAx0x=%WzK)4l(?n0vXHT6@?7T}dwnK)MZ z%{*pXUN*U4$*#u6Dxy|bfA4V|4n+=XM;3%Z_w1_v}$K|mX=}K@Gmpf zrj_#jCY4b%pUo%Zv<$qc*d6|@eQJ#x==3V+<1Evt$~&h~@R#-F>Q@3kEL(Pd9@;U& zv2?KfcxaB_XP?6AM}5>!=>`%+@q=>dZnAn>0GddX3C(YIu>`O!6LeKzvK6~iS+yP( zlImqwmoSmc`wv@OjfYNKR9EvEXe^M_WR>eWjLGDM%8h9TQC|U`#>nd@^{l%Lz3Orp zY{vdCwvPpvZBnX5D=-9{9Q2t6pcFGf{!-~dB5zL05c2U{h8#@8@nrtjU30~2(y~Pm z(4pg?$z&H)I6%e;kZg3!6L@hE0^;Fm;ysPhPTK^^XXv3S5o#O)NRk5Cm)dG3kHpzG z5*i3J0ezbYv=-uKGKYpPaSaUxXflIs`xs;-3CUlv^wZ_`t9%}CJ z0_P(%U9FrnTT)4!XnL&?z!10D)9VhoD8OX|+VJ1pj_Oz}RBdtPequ);G=kiP+65e) z`Ynqj0&wrY)%rUg__ z97CO&8HI|i$1OZsm#}0N?ts8;cJf ztt{|BAt}2BTsB;A96q6X3)lyU6DOJS5Er z1ym#nhj1fP=3F>ewk}mxy^@=+1?mX}4@{8w)?yRJi-MNT-Y{9Zm&1ECtt zkTLztKoAj$8y|e|-iI`9wu&&3r@vMVDtkfx9aEi?CDtjU;Cb^^?CZO;160DNK#`Jv zCn`ame7Ub813&BaNVx&vvSs$UQYi6{Qo4yY+vmTel5F>Yg7oM<+?p8QoQ%<6d`*53 z6F=9O{{2e~<=A5flS`)>F$#;s9ml;Y+0P&P*-d*H!9m};Gh!ri=;Hzj^PfwA7sN~k z60sp3>i1p;yQZRkzZq+2^k{Yqb2_Os6lMRDcIVtGDzR6aO=E%pP|NFQU z;kjXqG!58-dIH#=SL7$Vnni`ca)ZPUUo&&Ha~-#?Yj~8}kuu-%3i)*;xBx9)a~)@Mjo+5@8I>q7^PuBG`&u(ylZrnZ04^%0|tji9<8t$Mn-R_122f zpFaF^T$XVC0J|W02Czf26NGZCRL{ZBIMR4G%j21> z6412-P1{aC>(=tXPN+H~>?MBdOyt<=>=74X)f-|jAs`a9e#Hp0@pXFQ3>}kgaKFrP z5T))g(UCJul^yMTogV?^;)098Lf*zpgrM)qa}~(9Xkmf_^gtLCjRG4^Mm!Txm)1yP z-#S*p1sqK9!AdrBz8IvNi(QV9c5zn}l4BgPl33S}=J=naIl*zSk4G}}!ISS3C5EYj zyy6{sLd!;COu;_RWBPO`xMcEP>(TONP1UGoIk18>AC_yQoROuKq=PrZYTC!a(Il6= zHZ%5?alb_SurwG4fa#lkp{3Z=$e+W3e6+N{I^DeWA@>3yb4+>JT)1WlA=7Sqo~)bR zTvR(u!t=iIdK10pw?o`{EyAjOUJ1P0-B_hC;qwYfiNnXMRD2bH0{%5Mg4z76+_hu& zxP%#kabC-I0MI)2lz-%y961N@6f;4b`%U#}Ij>nbWdfiuiOYJxKte#2j&6@2s!86D zClW^^lp~jNZ?D>)>8#ZrVd+2NSj-pe-Ca2|O`43%<%m7QAly0L{I3mF0^H1-m#Gr$r&KI9ve?gN_p~TIk%JljT$CR%e_Vt2 z20+hQhjpe7u8VqgDUnRLXbNtNHciV&flsLnTdkg2%-3d9Ma za2zJ!@ej4OC^~z0b#?RJ#_HYAVxp0WWc`9-h70LuEllY)uWpnJV@HsA(bL?ui$=}Z zB`6*AFMFq8)jcs~8Cfp;5#a&|WHOpaILuxfM85!_%Qr*v>4Y(jLr@482R?7+m2#Vs zl8+>k(1v-zaKs8~CN7;&ne>a*7ReixK@%TTi-^10xl(W!^i!;^;k#chE-gRW9Dh?h zksUmV+e1t55qOLsKjO|fycT$tvvTDSPy=KvL)Gfrlni;VSvJQ#U)t(9C8xIf^DsRpu2(t-Pf9fD0G9ED`B>AxrLdzB8l7WRPZuYR_grFJF;wG(Jqf)9-wRC-R9E)HBS zTba?7rmK3MA@AC=3_ZJva{M(GD4}ldnkONtH5ibte@^H4sU@i%44a!24(YrVDkH2&T$EVUiJ{;lOrU>!0Rjw~teSGvD^r${6$ z{x!7T(wk*Jz{;%lSZ5b*hQO`NXhIV7VrVZ=ZCf zvYFty%hoBYzz9kX>E`(Oyvb{TA>$PX1Btjk(ms)hnZSgkXyl!uO$BnhKRrG0q}#_Z zu{@$EkW7#v1t2AcsO>M$nOk?{BqZq_72|q&`-AuI;5a7Lj7PUW_}~sa&QNfi%jylvLs#&Cu&DMP{n#&W zeEjv5nVYqW*UMYCe}3oq#Qb1$H@i?QdTF$}zOk@&z5IM*VN>76Uz=4}DratW@gZs0 zGo`DK=kl7EgO(S|Kezr7w+npf=mZQ~Nlb87L6(Kmg`NmFWI{xH$Xb$f5+MX)`MlR5 zQviG35Qbh`IK%i`^8I8f9t+9WLV4SA63yROJCf`Q$eIZQLDwjl)?d3SH{~Z#$5>)P zn6ayewUW6X3Wn!Fc090*8{r~1&G(?%U2mNermAwudMT~BWfR5*VaAeouUT8Em88H( zUgEP5@RHDafU9dgyWRywca$d8;`JT#5T}e`8LO<8B0uNYOS@s6lCQsaZGmxT+iM&f zPR*SUbO`UgXLJWOGhr>*TNh0O3 zt@gpxawhbREST()l16@fZW584+G5y@A+P%oOw*x>Lt|k>p>&>CO@=82<51$4R_Cr< zS6^XR0cKL5x6YjC8BQU%E#R!`6ywVR0-Q!63u7h;^oF%SsR+EdR#UM z5AQx$xQEwQ8|pp&y0JgJ+p|>+upM#uvHgq`goraL0V{?H@Bs*Q_!TRNTL!vnZYyS= zNeR0qK2E)uo`wU?*-9x5jMPzCA|r<;8w94f8{mqvf0U{Vk2@#37nW<47W8jq!RW_96`5p|sVgtO_b z8M-lJXk%So9asjpU&K7@g90cm#eBq0nr~fvrz^xk*^|*53LTmxKa5luI=;|-K`aCN zV-WT{O}lH?hWXN4Vjqw!nGQ3D_wyvp%jJ_JsFv}NsGuBM!52i5^_m?jp3VzQ?tbxy z{P}PbK&odFd@5_DwIZs)xp4sEpzqfK_;Dw^9*pb0$ygR_Nvf1qb{X?9qbes|jm!!S zmbJ(1ftphD|9ZQ+cuVMGP&Xxu6UjtNST>Ica`92ZViderdn##=K$Z$0L7!n`jE3ws zjw81-l9Pm4Ss{rv_YR03HGmadXoQPGYqO6Lyxu1?<-!onv+OkeawcAhvgA8Ch+br3 zLlhXa+0*coG{QUx|~J;gNFa82k)o*(CcB83rG7D-a2fQf^ebr z(&_7zeSnZvoqcn3bs>V8V!=3?Fav3H}6Q-H(3205Bp)U68H3QQPJZ1>9%$Dzl6 zZ;UZQhRC;J6A8rXmtFnmx9PU48X3R1ru@71T+n2eQeF?umeG`sklKuY*yariN@+u- zq@iUOfzn?>80)^47TpUa7UMncWjS#q2i7GuiL-CqvSIT*bW05GHrMD zKO84E+5E#u!PhHu$kJ5gkG?II30h9LDTDW5Yc^VGU`^T~x&Zm{i0w;y?yHQ!j4mUtU zzh-BX|4y>5+r!b2y9-$^j*2o)R1S$IB}XD8l5H#BrBnz-6yG^62c!@HA%q?BZQe7Enc%RR~lWf!dY2V2jA6b)H;%cgZ1x#;bf@Ke0$+uRyJY8iKk}FqwNt`^m zl5|d}qaO#=*H_r!<)1=w+&<2E)gyFt_{_e1<}q(3-;&DnNV)P-?HmNHvv76j_o7uz zRmKCi*VW!MLo?fD^$ITKVc?!MC)`%zOjl*N`6(mtMD+9)UrV~BY59#U7${IqT3>8MQK zw%HdN)LeGwpR5g{2go7f2Yj1bte;tGZRAqRnyNjJOIAi|_`dP=bDGr3=cp^nrX5pn z3{PA6j`H@hPIJKssjzJ;0WfZ8Ghxtwvn8`X$de5QUlr4_!7Z+MMhClV}VqAW6 z`hD}!_V(Fo*dzVQ&h3(*o~1`hJ3!j-)`r$$qKm3*ddbQ5=o%;X7`XS)t`PXGDsMx4 z@Yg!uIVCakD|pEi6ZJ#kgt<8%i0mOQkpurh5>0Sb_UA*@Fiqy_Cqkw8FQ>;Ykb*vk z4~();MmmL7EuX^DYGU5(N_hlF%JIXTghAJFSr&#%s@c6=XVWzZIigKYFB}kcY=PX2 zhzOC&8jltw6h#v?ASp{~JjCOhPZ!e_QipGYWpIT6dabBM&FVpaD% z*8f0Vbm6ZJ=^};{hr#`q6=zg9Lshd@Sm-+%8#Ik?y|f;=N+$HinY?vaIGC5<;GD&j z8$1$wsB4#=%rQy4zs8c${~bqm^9Hwj-@Nhp8X4Lp{(B0gcVq=mf0TSUyTk|>`~=VgsfFF3u?psY zwk=(v<*M&tH!u*6ngnX@t-FUZ&IuAWKG!?gwXL>45RniunX``A(-GUr>o_>tDYJGX z{OwsK>cAB8g*oJu4`^Izl7vL*NC{<@CMjVD8I?rLAST9`jB})xZ_VAF`-O`&$>ICE z_+}Adeek=DBWh&h8*_lHtQ)^$Hfla)b0ufmMO_Z>AmUW)re60<`V&UHH9OlL5Ubtc z{?j8e*T3v?uj%IE`opD_)-oAO8-IC{(t)lQ;B^-?b2})b4(Z469qSx4xRCXNq@UJ=^DEhdav{D;CLf zbL)Egb(^v1!tUAr;r_|A_i2>XWv#S`4O9br=L=r9W;@D+n(mQ^q0iCO;a9VKS?HAf z{YAV}H~DwTwXlqroj;fz_I4S_4q3k-axeN%!ywUrn(bpx-OIlkZq?3Ynfygxd^Nj| zd)Qa%$7lLEL^iTw!q*tVZ1ag_)ZQ-Rs*0`I=U>eZzM4IvS6^Ly!2Y)B*aj9f($Dhh zE7fS{;xaF*%8))6#@}$KIj?3rwMo0=Eu~-9oVB)zio)G=lN%tns!M6N=HvQTZ_KZL zt+r!xl0(u(E=6Qr&4RD_X)5`+Icjq0heq94oyih~k^obz^4LS3_Ps!gujH*)FTn2y zSlO0W?_2v*5}H@vMA<3t)k4Y>r8AlTNJlcF;cu1k!?TeUTLD4OZ`b5pyX$1E5Kj%# zW%?%@zGC^$`m5~{EI>DxRHf5-dfHmQ+p4D@s~5q)nzY13kJ{WXHL7npn)1X*O!}>3 z9*3vuUwbDzJvQ4&^ZtZ8JeSxY4<8ZBnnpl9IXP^l1OaE?#LdrDD^-yvnj3%554z_@ zQ1Ug$zD`(2b#;<0Y+}9NsAI;_6v?(;-G4&Df^Buue8ZD1IdO7eU+SFf21fcSL8RN{ zk>)PCbS(|Vb+<-ub{j7u6row6I68b_)OJP0Jcba8=l6Cs_n?S86>Wrpm+zewK#g$`He;%6KEdBtyjesZke&kZY_)0bvlqM3jh947vu& zGVS;!xKGn^nc7LfTSM`*zh!oO`_hJXgxY$gI20VE50bH~8K}Y-vc59qoeD=5aqTio zy2?%Kf+D$NimG5WN@0>W`fwD$6jOzunVzST25XwNswcr$lP$H%tQ^dCZcm#QS(A-m zm$ytdW4=m}E`U$NsmE@P2JxuhzhzKqG+D<}Q)}nF_btHPIv7hkKqvwmNbx7z8Bjr| z8l^>YPE2V3lGpW46>l#gJ7VuS42C7INmb=oxjPSVGlBKRZUcw|T z!Q8PKQx-h0*W5vSkcOMuu$_{qDqqG0zjkMs2w6DG{_0w)q|`OqI_%pvE}s?ZnF{!n zp~a{W021gqigFr%^ZSUyohWBpqgg1S^l5IVznx~dt&Yv~I(SzQ@pfLR02$1`GE=ZL zi1f9#!ytRM#nQ{@&4?2l8gfKZN#dFK?BixtxTi)fd?al)dhztp0$sY6v|`~5euKt0&;OV>}U{sg(0TF6&bLE>Q}m8 zW9v`C+r4edX>%!K2YZ);04!t#ySFR7kzx7ktc~N(I9LtXldAwF+y*gZXRdNcD1t7=y4ZoWd8lRyw`yyRwV=XQ(;bny7)GSOStH_0%LJE21 zs7v;t$;nds3K&Ylg!F~D$;mJAxL-UwN{VLj>}2!U{u%NgBu2%p{nxaK0&;0}^Hju3}B>2KI%V`ZHPS zmRak&Ar=e;gZbe_gXAQ$J)ajc$9-H?CK=hwK|MVQW0L9Y~Nt@ zRztSX{6Vo)j7f&s7Q-&!1Xq~c%f$~?K zYvM%?x!I4#l!ckXd1wuyBK0K|c5yS{9BNF8h?F%yCRr9fy|>~1W&HSAQA7NY3(ULQ z&u3e*HZ(=7ghTG>d(VW%X85r7?a&{vPQEVbVfxwW?T63uq!jWDo8>D|hoM-=kHiSug=@66(=9*$ z4Fo|;PBs=R`?2CT8`cxux`>{JMLfA?mG6Cc^X9eUdG}Rf{jdmKHNmyX3`FL2&OuI~ z?$F31khs*q9WEc5Br5Q7nTA}L$&}*~s*?L?`k0;RD`M{~0hSw}Do#pzqv#leDIPYk zMDx)xj2!I=DxiA?*+#iH4o7ME#~14#)!yHqxr4Ef%qiQ=vJT5IDteIPEbN0;J#knU z879w5YNAIASr}_lrLrEkAd$^v3zK*9)~G+N>4Mc`H*djX8ix2x2&#gWaZ*R>KxwP= z673mJOHaHnvfyEiM#uhbYAYGOO^h#56ydC0civu_TRhvjHQ%IspFuv+9M@WK5r`vW7td^IHB1aWqK zHs@)`mgHmDJJ>-g?l)gq0%Z09Fc!+M*tk1<(7net)OdodL~*FnJ0rgC;a50lZm<-7 zRTY~yf=?GN@iMXCSZM3qCQ)Wivf{#y*>xGk!l$3C)qRcS?c)leTxi(=RsfCHhwBVt zT9Ik*72PjdF86WTm5|x?j+IP_ffG>Oucy*C`}2fsoa|27vW#Y7%tiWaMaq(`DcPS> zsT?_fdC`sg^#;S67z$!TP7&Pg;)UD6YU9a1KI{zENob!*YX#!6VIFNu^2v_w47ef%cimRsl-DH&S(TE@4p>BmxJ}jB-<2LOA;T!Ej z?YNX{RXMLA$hl(T)Q7Dzd3p=)DRw^}+mb~7yqNX(Di1gn>mVQTe4)xp7mSoAGI9z5@}=pJT?u2>&AGC>SQblJf-fBvcn zH@nL6K*x5ZR_6-t7&#^)NJbxJ-ZV9q-$9RuMj=mtRX9t2Gb4oDU?9Iw%&(WmHx?3B zT^=)CAuNz^edR-Pj~wYB^J565m=a$Q$Vu zt2qIH7v+WkPn(DIh2oNm<-2&g(qg4Ao-30I!mdiAT79%x9~LiCHC>`q4U8;xUrIl` za9B<@QFf-4ic=h%)dHxQI>R7HHd5~@MSycGtMxUwtq4h@AvXt-=gdYTMiqIKnM%l9 zWZJBuP`F~cC~`c4{1C5@g33I%pJ;iYiuGigolZb$j9wXcG+$&vJjQP^byuVxSpWfw z4mn^b2Wn9%EuuO_;aCIZG0gxHkR_lPTXVogWs5PU+6@KPB{Zt%p8Yi2Cuvc4N%!PI z>w-NXc2e#XW??qmgwjr$d)}ot_mfRZBGLQOL|!1}`XsV)3=gES=7qNP{EKJXovoX* zzu5jeEw*f!BU~3>en|!vzT|o5CQQqR$e+)|A+HrNLx`w@En^#BG^9d!idf^q)YxD9WR_Zk~&-Fz~gVgJ! z%G==kDuO-C?~QiC?GcX3=KO6rv%K)|nySDkAQxIR$!2*1K8lAYn%b;mOT-1Y6>=E2 z9Vamul}xe~=Q#N(iW2DHP+#VB@g7kvS>V!6x}XZ=L6k_fE-%eJeJ*c8#dK)eRjTI% z1hS;2xc3b++y%p8xd3GN8kCPX`>YBdYl+%XbgOUe!2gB2)IQduX6xOOdgfSx5EgYa z31Rk!r0-AGF-PK=r?{=u;6n~6w7JkC+7w%S3B-<#TYK1)c5^UH1J}#*m0#N~Vf>Ev zwNajt*SRHaXaTsc)I2AkoybVMd_2$z}q#7TU+3~}K zpbcr_ki9p^z|_R5qRm4X-!NZv=EC%!Ywi-+pL{zsqFmLs4zyq*txCjkLCDDo)$Ht? z8W0bhbKb73#hn_ccG);w`C+a6>b3f$URJf9pM}0Q)>_MtQC5>(42SnouUKT`da8AM z-ztLta-_^7KAuii4l%k21vs_Ik`EBZCI{+C)AUM&^JEd4eIHjDHZ0mT zQOtmH6sHbmY#CQW=1KDgDfXcA?@*khP;7lP^XM)@jf&iDdJ)sXF-31e@p5dD-+6ZE z{>Cpevi0%ylr|c-I#1M{Qr`H7a+cKl*e)t~I1w3>iMS2bTn&<}*)AX-mq9M5M2V9^ zR?Nsv-Z+Ini=*XZH7mQ8orDTZDMG`&r@sX$_!X= zOlU~bLQrPFJ-QNp?y|`_l0%G@^+_%clE1{yXr~^>5Y|hQFfiTb, 2013. +# Mindaugas Baranauskas , 2014. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2014-09-20 15:34+0300\n" +"Last-Translator: Mindaugas Baranauskas \n" +"Language-Team: Lithuanian \n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" +"%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Lokalize 1.5\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "nepalaikomas nuosekliojo prievado greitis" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "nepalaikomas nuosekliojo prievado lyginumas" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "nepalaikomas nuosekliojo prievado pabaigos bitų skaičius" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "nepalaikomas nuosekliojo prievado žodžio ilgis" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Neįkelti lentelių, nurodytų kableliais atskirtame sąraše." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Įkelti tik lenteles, nurodytas kableliais atskirtame sąraše." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Eksportuoti pirmosios versijos lenteles į OS." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Eksportuoti antrosios ir trečiosios versijų lenteles į OS." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Nustatyti RSDP, XSDT ir RSDT struktūrų OEMID reikšmę." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Nustatyti RSDP, XSDT ir RSDT struktūrų OEMTABLE ID reikšmę." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Nustatyti RSDP, XSDT ir RSDT struktūrų OEMTABLE reviziją." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Nustatyti RSDP, XSDT ir RSDT struktūrų kūrėjo lauką." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Nustatyti RSDP, XSDT ir RSDT struktūrų kūrėjo reviziją." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Nenaujinti EBDA. Tai gali pašalinti nesklandumus ar strigtis, pasitaikančias " +"su kai kuriomis BIOS realizacijomis, tačiau neefektyvu, nes OS negauna RSDP " +"struktūros iš GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "priešlaikinė failo „%s“ pabaiga" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=LENTELĖ1,LENTELĖ2|--load-only=LENTELĖ1,LENTELĖ2] FAILAS1 " +"[FAILAS2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Įkelti kompiuterio ACPI lenteles ir lenteles, nurodytas argumentuose." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "klaida: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "nepakanka atminties" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "nepavyko nuskaityti „%s“: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Išjungti per ACPI nepavyko" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Išvardinti įrenginius." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "tikėtasi failo vardo" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FAILAS" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Spausdinti blokų sąrašą." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "pirma turite įkelti branduolį" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Paleisti operacinę sistemą." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Nėra jokios paleidimo laiko statistikos\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Parodyti paleidimo laiko statistiką." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Disko podėlio statistika: bandymai = %lu (%lu.%02lu%%), praleisti = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Disko podėlio statistika neprieinama\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Gauti disko podėlio informaciją." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Leisti DOS stiliaus CR/NL eilučių pabaigas." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Rodyti failo turinį." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "tikėtasi dviejų argumentų" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Failų „%s“ ir „%s“ palyginimas:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Skiriasi failų dydis: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Failai skiriasi ties poslinkiu %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Failai yra vienodi.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FAILAS1 FAILAS2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Palyginti du failus." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Įkelti kitą konfigūracijos failą." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Įkelti kitą konfigūracijos failą, nekeičiant konteksto." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Įkelti kitą konfigūracijos failą, nekeičiant konteksto, tačiau iš jo imti " +"tik meniu elementus." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Įkelti kitą konfigūracijos failą, naudojant tik jo meniu įrašus." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[metai-]mėnuo-diena] [valandos:minutės[:sekundės]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Parodyti arba nustatyti datą ir laiką." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Neišvesti eilutės pabaigos failo gale." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Įgalinti kaitos sekų su kairiniu pasviruoju brūkšniu interpretavimą." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-n|-n] EILUTĖ" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Parodyti teksto eilutę." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" +"Iš naujo paleisti ir įeiti į programinės aparatinės įrangos (angl. firmware) " +"konfigūravimo meniu." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Pašalinti nesklandumus su vaizdu." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Yra prieinamas ROM atvaizdis." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Negalima įgalinti ROM srities." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "Kurti BIOS tipo struktūras atbuliniam suderinamumui su esama OS." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Įkelti BIOS išklotinę." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "EILUTĖ ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Argumentus vertinti kaip GRUB komandas" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Patikrinti, ar FAILAS gali būti paleistas kaip i386 PAE Xen " +"neprivilegijuotas svečio branduolys" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Patikrinti, ar FAILAS gali būti paleistas kaip x86_64 Xen neprivilegijuotas " +"svečio branduolys" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Patikrinti, ar FAILAS gali būti naudojamas kaip Xen x86 privilegijuotas " +"svečio branduolys" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" +"Patikrinti, ar FAILAS gali būti naudojamas kaip x86 keleriopo paleidimo " +"(multiboot) branduolys" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" +"Patikrinti, ar FAILAS gali būti naudojamas kaip x86 keleriopo paleidimo " +"(multiboot2) branduolys" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Patikrinti, ar FAILAS yra ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Patikrinti, ar FAILAS yra ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Patikrinti, ar FAILAS yra IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Patikrinti, ar FAILAS yra MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Patikrinti, ar FAILAS yra MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Patikrinti, ar FAILAS yra SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Patikrinti, ar FAILAS yra POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Patikrinti, ar FAILAS yra x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Patikrinti, ar FAILAS yra x86 Linux, palaikantis 32 bitų protokolą" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Patikrinti, ar FAILAS yra x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Patikrinti, ar FAILAS yra i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Patikrinti, ar FAILAS yra x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Patikrinti, ar FAILAS yra x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Patikrinti, ar FAILAS yra i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Patikrinti, ar FAILAS yra x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Patikrinti, ar FAILAS yra i386 EFI failas" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Patikrinti, ar FAILAS yra x86_64 EFI failas" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Patikrinti, ar FAILAS yra IA64 EFI failas" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Patikrinti, ar FAILAS yra ARM64 EFI failas" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Patikrinti, ar FAILAS yra ARM EFI failas" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Patikrinti, ar FAILAS yra sustabdytos į atmintį būsenos hiberfil.sys" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Patikrinti, ar FAILAS yra x86_64 XNU (Mac OS X branduolys)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Patikrinti, ar FAILAS yra i386 XNU (Mac OS X branduolys)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Patikrinti, ar FAILAS yra XNU (Mac OS X branduolio) sustabdytos į atmintį " +"būsenos atvaizdis" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Patikrinti, ar FAILAS yra BIOS paleidimo sektorius" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "neigiamas" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "PARINKTYS FAILAS" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Patikrinti, ar FAILAS yra nurodyto tipo." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "tokio skaidinio nėra" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Naujas paleidimo įrašas įrašytas į „%s“\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ĮRENGINYS [SKAIDINYS[+/-[TIPAS]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Užpildyti GPT disko ĮRENGINYS hibridinį paleidimo įrašą (MBR). Nurodytieji " +"skaidiniai bus hibridinio paleidimo įrašo dalis. Galima nurodyti iki trijų " +"skaidinių. TIPAS yra MBR tipas. „+“ reiškia, jog skaidinys bus aktyvus. Tik " +"vienas skaidinys gali būti aktyvus." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Išjungti kompiuterį. Ši komanda veikia ne su visa programine aparatine " +"įranga." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Nurodykite naudotiną maišą." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "MAIŠA" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Palyginti failų maišas su nurodytomis maišų sąrašo faile FAILAS." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Bazinis maišų sąrašo aplankas." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "APLANKAS" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Nesustoti po pirmos klaidos." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Išskleisti failą prieš tikrinant maišą." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: SKAITYMO KLAIDA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: MAIŠOS NESUTAMPA\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: GERAI\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h MAIŠA [-c FAILAS [-p PREFIKSAS]] [FAILAS1 [FAILAS2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Apskaičiuoti arba patikrinti maišos reikšmę." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FAILAS [-p PREFIKSAS]] [FAILAS1 [FAILAS2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Nustatyti energijos valdymo lygį\n" +"(1=žemas, ..., 254=aukštas, 255=išjungtas)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Rodyti maitinimo veikseną." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Įrašyti ATA saugumo nuostatas iki bus atkurta pradinė būsena." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Parodyti SMART būklę." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Nustatyti automatinį akustinį valdymą\n" +"(0=išjungtas, 128=tylus, ..., 254=greitas)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Nustatyti laiką iki bus pereita į budėjimo būseną\n" +"(0=išjungta, 1=5s, 2=10s, ..., 240=20m, 241=30m, ... )." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Nurodyti diskui pereiti į budėjimo būseną." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Nurodyti diskui pereiti į miego būseną." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Parodyti disko identifikatorių ir nuostatas." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Rodyti neapdorotą ATA IDENTIFY sektoriaus turinį." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Išjungti/įjungti SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Nerodyti pranešimų." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "tikėtasi vieno argumento" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[PARINKTYS] DISKAS" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Gauti/nustatyti ATA disko parametrus." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Naudojimas:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ŠABLONAS ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Rodyti pagalbinį pranešimą." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Praleisti nurodytą kiekį baitų nuo failo pradžios." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Skaityti tik ILGIS baitų." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[PARINKTYS] FAILAS_ARBA_ĮRENGINYS" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Rodyti neapdorotą failo arba atminties turinį." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Rodyti CMOS atminties išklotinės turinį." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BAITAS:BITAS" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Patikrinti bito ties BAITAS:BITAS reikšmę CMOS'e." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Išvalyti bito ties BAITAS:BITAS reikšmę CMOS'e." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Nustatyti bito ties BAITAS:BITAS reikšmę CMOS'e." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Parodyti coreboot paleidimo laiko statistiką." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Pateikti coreboot lenteles." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Patikrinti, ar centrinis procesorius palaiko 64 bitų veikseną (numatyta)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Patikrinti, ar centrinis procesorius palaiko fizinio adreso išplėtimą (PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Patikrinti centrinio procesoriaus galimybes." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Parodyti esamus susiejimus." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Atstatyti visų susiejimų pradines reikšmes." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Atlikti ir tiesioginius, ir atvirkštinius susiejimus." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Jokie diskai nebuvo persieti" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS disko Nr. ------> GRUB/BIOS įrenginys" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grub_įr os_diskas." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Tvarkyti BIOS diskų susiejimus." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Nenaudoti APM kompiuteriui išjungti." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Išjungti sistemą, jeigu įmanoma, naudojant APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "APM nerastas" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versija %u.%u\n" +"32 bitų CS = 0x%x, ilgis = 0x%x, poslinkis = 0x%x\n" +"16 bitų CS = 0x%x, ilgis = 0x%x\n" +"DS = 0x%x, ilgis = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16 bitų apsaugotoji sąsaja palaikoma\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16 bitų apsaugotoji sąsaja nepalaikoma\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32 bitų apsaugotoji sąsaja palaikoma\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32 bitų apsaugotoji sąsaja nepalaikoma\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Procesoriaus atlaisvinimas jį sulėtina\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Procesoriaus atlaisvinimas jo nesulėtina\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM išjungtas\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM įgalintas\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM išjungtas\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM įjungtas\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Rodyti APM informaciją." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "tikėtasi failo vardo arba tempo ir natų" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Netinkama komanda %s.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "failas „%s“ nerastas" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "nežinomas skaičius" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FAILAS | TEMPAS [TONAS1 TRUKMĖ1] [TONAS2 TRUKMĖ2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Groti melodiją." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "nustatyti skaitmenų klavišo būseną" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "nustatyti didžiųjų raidžių klavišo būseną" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "nustatyti slinkties klavišo būseną" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "nustatyti įterpimo klavišo būseną" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "nustatyti pauzės klavišo būseną" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "nuspausti kairįjį klavišą „Lyg2“" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "nuspausti dešinįjį klavišą „Lyg2“" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "nuspausti klavišą „Sist“" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "nuspausti klavišą „Skaitm“" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "nuspausti klavišą „Didž“" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "nuspausti klavišą „Slinkti“" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "nuspausti klavišą „Įterpti“" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "nuspausti kairįjį klavišą „Alt“" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "nuspausti dešinįjį klavišą „Alt“ („Lyg3“)" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "nuspausti kairįjį klavišą „Vald“" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "nuspausti dešinįjį klavišą „Vald“" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "nekeisti šviesos diodo būsenos" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KLAVIŠAS1] [KLAVIŠAS2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emuliuoti klavišų paspaudimus" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Kai norėsite tęsti GRUB darbą, įvykdykite komandą „go“." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Grįžti į IEEE1275 sąsają." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Įrašyti nuskaitytą reikšmę į KINTAMĄJĮ." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "KINTAMASIS" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PRIEVADAS" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Nuskaityti 8 bitų reikšmę iš PRIEVADO." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Nuskaityti 16 bitų reikšmę iš PRIEVADO." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Nuskaityti 32 bitų reikšmę iš PRIEVADO." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PRIEVADAS REIKŠMĖ [KAUKĖ]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Nusiųsti 8 bitų REIKŠMĘ į PRIEVADĄ. " + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Nusiųsti 16 bitų REIKŠMĘ į PRIEVADĄ. " + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADRESAS REIKŠMĖ [KAUKĖ]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Nusiųsti 32 bitų REIKŠMĘ į PRIEVADĄ. " + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "kintamojo „%s“ reikšmė nenustatyta" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Įkelti klaviatūros išdėstymą." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Patikrinti „Lyg2“ klavišo būseną." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Patikrinti „Vald“ klavišo būseną." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Patikrinti „Alt“ (arba „Lyg3“) klavišo būseną." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Patikrinti modifikavimo klavišų būseną." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "nepavyko rasti komandos „%s“" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Įveskite slaptažodį: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "" +"Analizuoti senosios GRUB versijos konfigūracinį failą tame pačiame kontekste" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "" +"Analizuoti senosios GRUB versijos konfigūracinį failą naujame kontekste" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Analizuoti senosios GRUB versijos konfigūracinį failą tame pačiame " +"kontekste, tačiau iš jo imti tik meniu elementus" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Analizuoti senosios GRUB versijos konfigūracinį failą naujame kontekste, " +"tačiau iš jo imti tik meniu elementus" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TIPAS] FAILAS [ARGUMENTAS ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Imituoti senosios GRUB versijos „kernel“ komandą" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FAILAS [ARGUMENTAS ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Imituoti senosios GRUB versijos „initrd“ komandą" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Imituoti senosios GRUB versijos „modulenounzip“ komandą" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] SLAPTAŽODIS [FAILAS]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Imituoti senosios GRUB versijos „password“ komandą" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" +"Imituoti senosios GRUB versijos „password“ komandą meniu elemento veiksenoje" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Nurodyti failo vardą." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Praleisti aplinkos failų skaitmeninių parašų tikrinimą." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FAILAS] [-s|--skip-sig] [baltojojo_sąrašo_kintamojo_vardas] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Įkelti kintamuosius iš aplinkos blokų failo." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FAILAS]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Išvardinti aplinkos blokų failo kintamuosius." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FAILAS] kintamojo_vardas [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Įrašyti kintamuosius į aplinkos blokų failą." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Rodyti ilgą sąrašą su išsamesne informacija." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Dydžius nurodyti suprantamesniu formatu." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Išvardinti visus failus." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Tinklo protokolai:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FAILAS ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Išvardinti įrenginius ir failus." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Rodyti tik pirmosios versijos lenteles." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Rodyti tik antrosios ir trečiosios versijų lenteles." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Rodyti ACPI informaciją." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "laisva operatyvioji atmintis" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "rezervuota operatyvioji atmintis" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI lentelių užimama operatyvioji atmintis" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPI išliekamoji užimta operatyvioji atmintis" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "sugedusi operatyvioji atmintis („BadRAM“)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM turimos coreboot lentelės" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "operatyvioji atmintis, kurioje laikoma aparatinė programinė įranga" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "bazinis_adresas = 0x%llx, ilgis = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "bazinis_adresas = 0x%llx, ilgis = 0x%llx, tipas = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Parodyti aparatinės programinės įrangos pateiktą atminties žemėlapį." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Išvardinti PCI įrenginius." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADRESAS" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Nuskaityti 8 bitų reikšmę iš ADRESO." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Nuskaityti 16 bitų reikšmę iš ADRESO." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Nuskaityti 32 bitų reikšmę iš ADRESO." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Įrašyti 8 bitų REIKŠMĘ į ADRESĄ." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Įrašyti 16 bitų REIKŠMĘ į ADRESĄ." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Įrašyti 32 bitų REIKŠMĘ į ADRESĄ." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Meniu elemento tipas." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "EILUTĖ" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Sąrašas naudotojų, kuriems leidžiama iškviesti šį elementą." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "NAUDOTOJAS[,NAUDOTOJAS]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Klaviatūros klavišas, iškviečiantis šį elementą." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "KLAVIŠAS" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Naudoti EILUTĘ kaip meniu elemento tekstą." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Meniu elemento identifikatorius." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Šį elementą gali iškviesti bet kuris naudotojas." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOKAS" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Aprašyti meniu elementą." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Aprašyti submeniu." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Pavadinimas\tNuorodų skaičius\tPriklausomybės\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Rodyti šį pranešimą." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADRESAS [DYDIS]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Rodyti atminties turinį." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULIS" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Pašalinti modulį." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Išvardinti įkeltus modulius." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Išeiti iš GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "CS5536 nerasta" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 rasta: %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"Sistemos valdymo magistralės valdiklio įvesties/išvesties erdvė yra adresu 0x" +"%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "OA lizdo numeris %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Įrašyta SPD baitų: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Atminties tipas: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Dalies Nr.: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Atminties tipas: nežinomas." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Parodyti atminties informaciją." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s nepalaiko UUID identifikatorių" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODULIS1 MODULIS2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Naudoti paprastas disko įtaisų tvarkykles. Jei nenurodomi jokie moduliai, " +"naudojamas numatytasis rinkinys (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Vykdyti KOMANDAS su skaidiniu.\n" +"Naudokite „parttool SKAIDINYS help“ galimų komandų sąrašui gauti." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=REIKŠMĖ" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Deja, „parttool“ nėra skirtas naudoti su %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "nežinomas argumentas „%s“" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "SKAIDINYS KOMANDOS" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "NAUDOTOJAS SLAPTAŽODIS" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Nustatyti naudotojo slaptažodį (atviru tekstu). Nesaugu ir nerekomenduojama." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "negalima slaptažodžio PBKDF2 maiÅ¡a" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "NAUDOTOJAS PBKDF2_SLAPTAŽODIS" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Nustatyti naudotojo slaptažodį (PBKDF2 maišą)." + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Pasirinkti įrenginį pagal gamintojo ir įrenginio identifikatorius." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[gamintojas]:[įrenginys]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Parinkti įrenginį pagal jo poziciją magistralėje." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[magistralė]:[lizdas][.funkcija]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "trÅ«ksta „%c“ simbolio" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s PADĖTIS] [-d Ä®RENGINYS]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Parodyti PCI konfigÅ«racijos erdvės iÅ¡klotinę." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Priskirti grąžinamą reikÅ¡mę kintamajam." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Nustatyti naudotiną tvarkyklę." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Nustatyti skaidinių schemos tipą." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Nustatyti failų sistemos tipą." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Nustatyti failų sistemos UUID." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Nustatyti failų sistemos etiketę." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "failų sistema „%s“ nepalaiko etikečių" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "Ä®RENGINYS" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Nuskaityti įrenginio informaciją." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[APLINKOS_KINTAMASIS]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Nustatyti kintamojo reikÅ¡mę į naudotojo įvestį." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "IÅ¡ naujo paleisti kompiuterį." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Ä®raÅ¡yti atitikusį komponentą NUMERIS į KINTAMĄJÄ®." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMERIS:]KINTAMASIS" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REG_IÅ RAIÅ KA EILUTĖ" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Patikrinti, ar REG_IÅ RAIÅ KA atitinka EILUTĘ." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "VARDAS [KINTAMASIS] [PATARIMAI]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"IeÅ¡koti įrenginių pagal failą. Jeigu nurodytas KINTAMASIS, jam bus " +"priskirtas pirmasis surastas įrenginys." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"IeÅ¡koti įrenginių pagal etiketę. Jeigu nurodytas KINTAMASIS, jam bus " +"priskirtas pirmasis surastas įrenginys." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"IeÅ¡koti įrenginių pagal UUID identifikatorių. Jeigu nurodytas KINTAMASIS, " +"jam bus priskirtas pirmasis surastas įrenginys." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "IeÅ¡koti įrenginių pagal failą." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "IeÅ¡koti įrenginių pagal failų sistemos etiketę." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "IeÅ¡koti įrenginių pagal failų sistemos UUID identifikatorių." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Pirmąjį surastą įrenginį priskirti kintamajam." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Netikrinti lanksčiųjų diskelių įrenginių." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Pirma iÅ¡bandyti PATARIAMĄ įrenginį. Jeigu PATARIMAS baigiasi kableliu, bus " +"iÅ¡bandyti ir įrenginio skaidiniai" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "PATARIMAS" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Pirma iÅ¡bandyti PATARIAMĄ įrenginį, jeigu veikiama IEEE1275 veiksenoje. " +"Jeigu PATARIMAS baigiasi kableliu, bus iÅ¡bandyti ir įrenginio skaidiniai" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Pirma iÅ¡bandyti PATARIAMĄ įrenginį, jeigu veikiama BIOS veiksenoje. Jeigu " +"PATARIMAS baigiasi kableliu, bus iÅ¡bandyti ir įrenginio skaidiniai" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Pirma iÅ¡bandyti PATARIAMĄ įrenginį, jeigu palaikoma tiesioginė prieiga prie " +"įrenginių. Jeigu PATARIMAS baigiasi kableliu, bus iÅ¡bandyti ir įrenginio " +"skaidiniai" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Pirma iÅ¡bandyti PATARIAMĄ įrenginį, jeigu veikiama EFI veiksenoje. Jeigu " +"PATARIMAS baigiasi kableliu, bus iÅ¡bandyti ir įrenginio skaidiniai" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Pirma iÅ¡bandyti PATARIAMĄ įrenginį, jeigu veikiama ARC veiksenoje. Jeigu " +"PATARIMAS baigiasi kableliu, bus iÅ¡bandyti ir įrenginio skaidiniai" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint PATARIMAS [--hint PATARIMAS] ...] VARDAS" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"IeÅ¡koti įrenginių pagal failą, failų sistemos etiketę arba jos UUID " +"identifikatorių. Nurodžius --set, parametrą, Å¡iam kintamajam bus priskirtas " +"pirmasis surastas įrenginys. Nenurodžius kintamojo vardo, bus naudojamas " +"„root“." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "%x registras (iÅ¡ %x:%02x.%x) yra %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" +"[-s PADĖTIS] [-d Ä®RENGINYS] [-v KINTAMASIS] REGISTRAS[=REIKÅ MĖ[:KAUKĖ]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipuliuoti PCI įrenginiais." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Detali atbulinė atskaita." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Leisti nutraukti Gr(įžties) klaviÅ¡u." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "SEKUNDŽIŲ_SKAIČIUS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Palaukti nurodytą sekundžių skaičių." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "syslinux disko Å¡akninis katalogas [numatytasis=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +#, fuzzy +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"veikiamasis syslinux katalogas [numatytasis yra vienu lygiu aukščiau nei " +"įvedimo failas]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "įvedimą priimti kaip isolinux konfigÅ«racijos failą." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "įvedimą priimti kaip pxelinux konfigÅ«racijos failą." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "įvedimą priimti kaip syslinux konfigÅ«racijos failą." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "syslinux konfigÅ«racinį failą įvykdyti tame pačiame kontekste" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "syslinux konfigÅ«racinį failą įvykdyti naujame kontekste" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"syslinux konfigÅ«racinį failą įvykdyti tame pačiame kontekste, imant tik " +"meniu įraÅ¡us" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"syslinux konfigÅ«racinį failą įvykdyti naujame kontekste, imant tik meniu " +"įraÅ¡us" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "nenurodytas terminalas" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminalas „%s“ nerastas" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "AktyvÅ«s įvesties terminalai:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Galimi įvesties terminalai:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "AktyvÅ«s iÅ¡vesties terminalai:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Galimi iÅ¡vesties terminalai:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINALAS1] [TERMINALAS2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "IÅ¡vardinti arba pasirinkti įvesties terminalą." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "IÅ¡vardinti arba pasirinkti iÅ¡vesties terminalą." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "IÅ RAIÅ KA ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Vykdyti iÅ¡raiÅ¡ką." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "IÅ RAIÅ KA" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Ä®kelti tą patį failą keliais bÅ«dais." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Nurodyti kiekvienos skaitymo operacijos dydį" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "netinkamas bloko dydis" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Failo dydis: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Praėjęs laikas: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Greitis: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s DYDIS] FAILAS" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Patikrinti failo nuskaitymo greitį." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "nenurodyta jokia komanda" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "SugaiÅ¡ta laiko: %d.%03d sek.\n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "KOMANDA [ARGUMENTAI]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Paskaičiuoti, kiek laiko vykdoma KOMANDA" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "IÅ¡versti į didžiąsias raides." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "IÅ¡versti į mažąsias raides." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[PARINKTYS] [RINKINYS1] [RINKINYS2] [EILUTĖ]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "EILUTĖJE RINKINIO1 raÅ¡menis iÅ¡versti į RINKINIO2 raÅ¡menis." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Nieko nedaryti, pavyko." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Nieko nedaryti, nepavyko." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "IÅ¡bandyti USB palaikymą." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Praleisti viešųjų raktų skaitmeninių parašų tikrinimą." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "blogas paraÅ¡as" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "neradome vieÅ¡ojo rakto %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "modulis „%s“ neįkeltas" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FAILAS PARAÅ O_FAILAS [VIEÅ ASIS_RAKTAS]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Patikrinti atsietą parašą." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] VIEÅ ASIS_RAKTAS" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "VIEŠĄJÄ®_RAKTĄ pridėti prie patikimųjų raktų sąraÅ¡o." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Pateikti patikimų raktų sąrašą." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "VIEÅ _RAKTO_ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "VIEÅ OJO_RAKTO_ID paÅ¡alinti iÅ¡ patikimųjų raktų sąraÅ¡o" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Tik tekstas " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Tiesioginės spalvos, kaukė: %d/%d/%d/%d, pozicija: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Paletės " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "PlokÅ¡tuminė " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "„Hercules“ " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "„Non-chain 4“ " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Vienspalvė " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Nežinoma vaizdo veiksena " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " netinkama EDID kontrolinė suma" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID versija: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Pageidaujama veiksena: %u×%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Nė viena pageidaujama veiksena negalima\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "negalimas vaizdo veiksenos apraÅ¡as: „%s“" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Palaikomų vaizdo veiksenų sąraÅ¡as:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legenda: kaukė/pozicija=raudona/žalia/mėlyna/rezervuota" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapteris „%s“:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Jokia informacija neprieinama" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Nepavyko inicijuoti vaizdo adapterio" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[PLOTISxAUKÅ TIS[xGYLIS]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"IÅ¡vardinti galimas vaizdo veiksenas. Jeigu nurodyta skiriamoji geba, " +"vardinti tik ją atitinkančias veiksenas." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[PLOTISxAUKÅ TIS]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "IÅ¡bandyti vaizdo posistemę PLOTIS×AUKÅ TIS veiksenoje." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "IÅ¡bandyti vaizdo posistemę." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[KATALOGAS]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Parodyti Xen atmintinę." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [KINTAMASIS]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transformuoti 64 bitų UUID identifikatorių į XNU tinkamą formatą. Nurodžius " +"„-l“ parametrą, grąžinamą reikÅ¡mę sudarys mažosios raidės, kaip „blkid“ " +"atveju." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "klaida skaitant sektorių 0x%llx iÅ¡ „%s“" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "klaida raÅ¡ant sektorių 0x%llx į „%s“" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Prijungti pagal UUID identifikatorių." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Prijungti viską." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Prijungti visus tomus su paleidimo žyme." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "nepavyko atverti „%s“: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "Å ALTINIS|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Prijungti kriptografinį įrenginį" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Nepavyko aptikti fizinio tomo „%s“. Kai kurių modulių pagrindiniame " +"atvaizdyje gali trÅ«kti." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "nepavyko rasti fizinio tomo %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "baigėsi skirtasis laikas nuskaitant „%s“" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Nepavyko įkelti „sha256“ modulio" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Nepavyko įkelti „sha512“ modulio" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "nepavyko nuskaityti ELI metaduomenų" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "netinkamas ELI magiÅ¡kasis skaičius arba versija" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Bandoma iÅ¡Å¡ifruoti pagrindinį raktą..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Ä®veskite %s%s%s (%s) slaptafrazę:" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Atvertas %d lizdas\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "bandoma skaityti arba raÅ¡yti už disko „%s“ ribų" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "raÅ¡yti į CD-ROM negalima" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Naudojamos prigimtinės disko tvarkyklės. Aparatinės programinės įrangos " +"disko sąsaja nebus naudojama." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"jÅ«sų loginio disko tvarkytuvės (LDM) įtaisomas skaidinys per mažas; " +"įtaisymas negalimas" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"Å¡i loginio disko tvarkytuvė (LDM) neturi įtaisomo skaidinio; įtaisymas " +"negalimas" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "PaÅ¡alinti nurodytą kilpinės jungties įrenginį." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] Ä®RENGINYS FAILAS." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Sukurti virtualų įrenginį iÅ¡ failo." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "perkėlimas 0x%x dar nerealizuotas" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "nėra simbolių lentelės" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "Å¡is ELF failas yra netinkamo tipo" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Ä®kelti ir inicijuoti EFI emuliatorių." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Užbaigti EFI emuliatoriaus įkėlimą." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "IÅ¡kelti EFI emuliatorių." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "simbolis „%s“ nerastas" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Ä®kelti Å¡riftai:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FAILAS..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Nurodyti vieną ar daugiau įkeltinų failų." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "IÅ¡vardinti įkeltus Å¡riftus." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "per giliai įdėtos simbolinės nuorodos" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "bandyti skaityti už failo pabaigos" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"nepavyko rasti reikiamo įrenginio–nario kelių įrenginių failų sistemoje" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "tai nėra aplankas" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "tai nėra paprastas failas" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"jÅ«sų „core.img“ failas neįprastai didelis. Jis nesutilps į įtaisymui skirtą " +"erdvę" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "netaisyklingas failo vardas – „%s“" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "kontrolinės sumos patikrinti nepavyko" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "iÅ¡Å¡ifravimo raktas neprieinamas" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "nepavyko patikrinti MAC kodo" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Ä®vestį laikyti neapdorota." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Ä®vestį laikyti Å¡eÅ¡ioliktaine." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Ä®vestį laikyti slaptafraze." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Ä®veskite ZFS slaptažodį: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FAILAS]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importuoti ZFS gaubiantįjį raktą laikomą FAILE." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtualus įrenginys paÅ¡alintas" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtualus įrenginys defektyvus" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtualus įrenginys neprijungtas" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "" +"Virtualiam įrenginiui trÅ«ksta komponento, bet jį vistiek galima naudoti" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtualus įrenginys pasiekiamas" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Neteisingas virtualus įrenginys: nė vienas tipas nėra pasiekiamas" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Virtualus įrenginys–lapas (failas arba diskas)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Paleidimo kelias: nepasiekiamas\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Paleidimo kelias: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Kelias: nepasiekiamas" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Kelias: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Ä®renginio identifikatorius: nepasiekiamas" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Ä®renginio identifikatorius: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Å is VIRTUALUS_Ä®RENGINYS yra veidrodis" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Å is VIRTUALUS_Ä®RENGINYS yra RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Netinkamas VIRTUALUS_Ä®RENGINYS" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VIRTUALUS_Ä®RENGINYS su %d vaikais\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VIRTUALAUS_Ä®RENGINIO elementas Nr. %d yra netinkamas\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VIRTUALAUS_Ä®RENGINIO elementas Nr. %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Nežinomas virtualaus įrenginio tipas: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Tomų grupės bÅ«sena: aktyvi" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Tomų grupės bÅ«sena: eksportuojama" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Tomų grupės bÅ«sena: sunaikinta" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Tomų grupės bÅ«sena: laikoma karÅ¡tajam rezervui" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Tomų grupės bÅ«sena: antrojo lygio ARC įrenginys" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Tomų grupės bÅ«sena: neinicijuota" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Tomų grupės bÅ«sena: nepasiekiama" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Tomų grupės bÅ«sena: galimai aktyvi" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Tomų grupės vardas: nepasiekiamas" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Tomų grupės vardas: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Tomų grupės GUID: nepasiekiamas" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Tomų grupės GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Nepavyko sužinoti tomų grupės bÅ«senos" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Nežinoma tomų grupės bÅ«sena" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Virtualių įrenginių medis neprieinamas" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Parodyti ZFS informaciją apie Ä®RENGINÄ®." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FAILŲ_SISTEMA [KINTAMASIS]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Parodyti ZFS-BOOTFSOBJ, arba priskirti KINTAMAJAM." + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Dabar praÅ¡om prijungti nuotolinę derintuvę." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "prieÅ¡laikinė failo pabaiga" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "IÅ¡verčia eilutę pagal esamas nuostatas." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Spauskite „Įvesti“ („Enter“) pasirinktai OS paleisti, „e“, jeigu norite " +"paredaguoti komandas, arba „c“ komandinei eilutei iÅ¡kviesti. Paspaudę " +"„Gr“ („Escape“), grįšite į ankstesnį meniu." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Spauskite „Įvesti“ („Enter“) pasirinktai OS paleisti, „e“, jeigu norite " +"paredaguoti komandas, arba „c“ komandinei eilutei iÅ¡kviesti." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "„įvesti“: paleisti, „e“: parinktys, „c“: komandinė eilutė" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Pasirinktasis elementas bus paleistas automatiÅ¡kai po %d sek." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "liko %d sek." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d sek." + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB paleidimo meniu" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " arba: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [PARINKTIS...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Daugiau informacijos rasite įvykdę „%s --help“ arba „%s --usage“.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Apie klaidas praneÅ¡kite %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Nežinoma sistemos klaida" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "parodyti šį pagalbinį praneÅ¡imą" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "pateikti trumpą naudojimo instrukciją" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "PAVADINIMAS" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "nustatyti programos pavadinimą" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEK" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "SEK sekundžių trukmės (numatyta 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "parodyti programos versiją" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMOS KLAIDA) Nežinoma versija!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: per daug argumentų\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMOS KLAIDA) Parinktys turėjo bÅ«ti atpažintos!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: parinktis „%s“ yra daugiaprasmė; galimi variantai:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: parinkčiai „--%s“ negalima nurodyti argumentų\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: parinkčiai „%c%s“ negalima pateikti argumentų\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: parinkčiai „--%s“ reikia argumento\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neatpažinta parinktis „--%s“\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: neatpažinta parinktis „%c%s“\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: netinkama parinktis -- „%c“\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: parinkčiai reikia argumento -- „%c“\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: parinktis „-W %s“ yra daugiaprasmė\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: parinkčiai „-W %s“ negalima nurodyti argumentų\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: parinkčiai „-W %s“ reikia argumento\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Pavyko" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Nėra atitikmenų" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Netinkamas reguliarusis reiÅ¡kinys" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Netinkamas raÅ¡menų klasės vardas" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Neuždarytas [ arba [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Neuždarytas ( arba \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Neuždarytas \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Netinkamas \\{\\} turinys" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Atmintis iÅ¡naudota" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Netinkamas pirmiau einantis reguliarusis reiÅ¡kinys" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Reguliarusis reiÅ¡kinys baigėsi anksčiau nei tikėtasi" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Reguliarusis reiÅ¡kinys yra per didelis" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Neuždarytas ) arba \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "nežinoma reguliariosios iÅ¡raiÅ¡kos klaida" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Nebuvo ankstesnių reguliariųjų reiÅ¡kinių" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Sveikas, pasauli" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Pasakykite „Sveikas, pasauli“." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "bandoma pasiekti už failo ribų" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "nepalaikomas gzip formatas" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop failas sugadintas" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz failas sugadintas arba nepalaikomos bloko parinktys" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[APLINKOS_KINTAMASIS=REIKÅ MĖ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Aplinkos kintamajam priskirti reikÅ¡mę." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "APLINKOS_KINTAMASIS" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "PaÅ¡alinti aplinkos kintamąjį." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Pateikti įrenginių ar failų sąrašą." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Ä®terpti modulį." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "Diskas „%s“ nerastas" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "mėginate skaityti arba raÅ¡yti už skaidinio ribų" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "įrenginių kiekis virÅ¡ija limitą" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "negalima raÅ¡yti į „%s“: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"device.map faile yra netinkamas „%s“ įraÅ¡as. Jis ignoruojamas. Pataisykite " +"arba paÅ¡alinkite device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"device.map faile yra netinkamas „%s“ įrenginio vardas. Vietoj jo naudosimas " +"%s. Naudokite [hfc]d[0-9]* pavidalu (pvz., „hd0“ arba „cd“)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "nepavyksta atverti „%s“: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "Ä®RENGINIO_VARDAS" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Nustatykite įrenginį." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "FAILĄ naudoti kaip įrenginių planą [numatytasis=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "Naudoti KATALOGE esančius GRUB failus [numatytasis=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "rodyti iÅ¡samius praneÅ¡imus." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Nežinomas papildomas argumentas „%s“." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB emuliatorius." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Klaida analizuojant komandinės eilutės argumentus\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Ä®vykdykite „gdb %s %d“, o ARGS.HOLD reikÅ¡mę prilyginkite nuliui.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: įspėjimas:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: informacija:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: klaida:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "failas „%s“ per didelis" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "nežinoma failų sistema" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Nepavyko iÅ¡jungti" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Nepavyko iÅ¡eiti iÅ¡ programos" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "perpildyta" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Atmetamas netinkamai suformuotas skaidinys (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Nežinoma komanda „%s“.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Parodyti šį pagalbinį praneÅ¡imą ir iÅ¡eiti." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Parodyti Å¡ios komandos naudojimo instrukciją ir iÅ¡eiti." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "trÅ«ksta „%s“ privalomos parinkties" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "„%s“ argumentui reikia sveikojo skaičiaus" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "reikÅ¡mę priskyrėte „%s“ argumentui, bet jam jos nereikia" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB dar nežino, kaip iÅ¡jungti Å¡ią maÅ¡iną!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Numatytasis serveris yra ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "netinkama spalvos specifikacija „%s“" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "IÅ¡ naujo paleisti nepavyko" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "netinkamas įrenginių medis" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Ä®kelti Linux" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Ä®kelti initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Ä®kelti DTB failą." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "pirma turite įkelti branduolį" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, su Xen sistemos prižiÅ«rykle" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Ä®kelti modulį." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[PARINKTYS]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Ä®kelti sistemą BIOS pagrindu." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Ä®kelti kitą paleidyklę." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "IÅ¡vedimą rodyti visose konsolėse." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Naudoti nuoseklią konsolę." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Paklausti, iÅ¡ kurio failo paleisti iÅ¡ naujo." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Naudoti CD-ROM kaip Å¡akninį" + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "" + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "" + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Nerodyti paleidyklės iÅ¡vedimo." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "" + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "" + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Paleisti rodant iÅ¡samius praneÅ¡imus." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Tik iÅ¡jungti, nepaleisti iÅ¡ naujo." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Keisti sukonfigÅ«ruotus įrenginius." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "IÅ¡jungti SMP" + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "IÅ¡jungti ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Nerodyti paleidimo diagnostinių praneÅ¡imų." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Paleisti rodant derinimo praneÅ¡imus." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Nerodyti įprasto iÅ¡vedimo (rodyti tik įspėjimus)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "vardas" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tipas" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adresas" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "dydis" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Paleisti akloje veiksenoje" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Ä®kelti FreeBSD branduolį." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Ä®kelti OpenBSD branduolį." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Ä®kelti NetBSD branduolį." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Ä®kelti FreeBSD aplinką." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Ä®kelti FreeBSD branduolio modulį." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Ä®kelti NetBSD branduolio modulį." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Ä®kelti NetBSD branduolio modulį (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Ä®kelti FreeBSD branduolio modulį (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Ä®kelti kOpenBSD RAM diską." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "%s yra pasenęs. SiÅ«lome naudoti gfxpayload=%s prieÅ¡ linux komandą.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s yra pasenęs. VGA veiksena %d neatpažinta. SiÅ«lome raÅ¡yti " +"gfxpayload=PLOTISxAUKÅ TIS[xGYLIS] prieÅ¡ linux komandą.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FAILAS" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "„%s“ yra per didelis" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Ä®kelti FreeDOS kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Ä®kelti NTLDR arba BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Ä®kelti Plan9 branduolį." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Ä®kelti PXE atvaizdį." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Ä®kelti Truecrypt ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd jau įkeltas" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Ä®kelti modulį." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Norėdami paleisti xnu, spauskite bet kurį klavišą" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Ä®kelti „device-properties“ iÅ¡klotinę." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Nepavyko surasti FPSWA tvarkyklės" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "FPSWA protokolas negali rasti sąsajos" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "FPSWA nerasta" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA poversijis: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FAILAS [ARGUMENTAI...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Parodyti FPSWA versiją." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "Ä®SPĖJIMAS: operacinei sistemai nebus prieinama jokia konsolė" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Ä®kelti keleriopo paleidimo 2 branduolį." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Ä®kelti keleriopo paleidimo 2 modulį." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Ä®kelti keleriopo paleidimo branduolį." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Ä®kelti keleriopo paleidimo modulį." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Su foniniu paveikslėliu." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Ä®kelti XNU paveikslėlį." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Ä®kelti 64 bitų XNU paveikslėlį." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Ä®kelti XNU plėtinio paketą." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Ä®kelti XNU plėtinį." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Ä®kelti XNU plėtinio katalogą." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Ä®kelti XNU RAM diską. Operacinė sistemą jį matys kaip md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "" + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "IÅ [K|M|G] Ä®[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "tikėtasi keturių argumentų" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "neatpažinta tinklo sąsaja „%s“" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "Nerasta jokios DHCP informacijos" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "Nerasta jokių DHCP parinkčių" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "Nerasta jokių DHCP %d parinkčių" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "nerasta jokių tinklo plokščių" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "nepavyksta automatiÅ¡kai sukonfigÅ«ruoti %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[PLOKÅ TĖ]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "DNS serveriai nesukonfigÅ«ruoti" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "srities vardas per ilgas" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "Nerasta DNS įrašų" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "Negauta jokio DNS atsako" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "tik ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "tik ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "ipv4 pirmenybė" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "ipv6 pirmenybė" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "netinkamas argumentas" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRESAS DNS_SERVERIS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "IeÅ¡koti DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNS_SERVERIS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Pridėti DNS serverį" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "PaÅ¡alinti DNS serverį" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "DNS serverių sąraÅ¡as" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "nepavyksta iÅ¡siųsti tinklo paketo" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16 bitų apsaugotoji sąsaja palaikoma\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "nepalaikomas HTTP atsakas" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "nepalaikoma HTTP klaida %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "baigėsi skirtasis laikas bandant atverti „%s“" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "baigėsi skirtasis laikas: nepavyksta iÅ¡analizuoti aparatinio adreso" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "neiÅ¡sprendžiamas adresas %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "neatpažintas tinklo adresas „%s“" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "paskirtis nepasiekiama" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "adresas nerastas" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "negalite iÅ¡trinti Å¡io adreso" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Nepalaikomas aparatinio adreso tipas %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Nepalaikomas adreso tipas %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "tikėtasi trijų argumentų" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "plokÅ¡tė nerasta" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "laikinas" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Nežinomo adreso tipas %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "nenurodytas joks serveris" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "baigėsi skirtasis laikas nuskaitant „%s“" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "TRUMPAS_VARDAS PLOKÅ TĖ ADRESAS [APARAT_ADRESAS]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Pridėti tinklo adresą." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[PLOKÅ TĖ [Ä®RENGINIO_ADRESAS]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "AutomatiÅ¡kai sukonfigÅ«ruoti IPv6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "TRUMPAS_VARDAS" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "PaÅ¡alinti visus tinklo adresus." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Pridėti tinklo marÅ¡rutą." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "PaÅ¡alinti tinklo marÅ¡rutą." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "parodyti tinklo marÅ¡rutus" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "parodyti tinklo plokÅ¡tes" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "parodyti tinklo adresus" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "sujungimas atÅ¡auktas" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "baigėsi sujungimui skirtas laikas" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Ä®veskite naudotojo vardą: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[NAUDOTOJŲ_SĄRAÅ AS]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Patikrinti, ar naudotojas yra NAUDOTOJŲ_SĄRAÅ E." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Galimos komandos:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Galimi įrenginiai:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Galimi failai:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Galimi skaidiniai:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Galimi argumentai:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Galimi dalykai:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "" +"Ä®spėjimas: sintaksės klaida (trÅ«ksta pasvirojo brÅ«kÅ¡nio) „%s“ eilutėje\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Ä®spėjimas: netinkama priekinio plano spalva „%s“\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Ä®spėjimas: netinkama fono spalva „%s“\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "APLINKOS_KINTAMASIS [APLINKOS_KINTAMASIS] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Eksportuoti kintamuosius." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "sekmadienis" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "pirmadienis" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "antradienis" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "trečiadienis" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "ketvirtadienis" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "penktadienis" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Å¡eÅ¡tadienis" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "modulis nepaleistas" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB %s versija" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Gr(įžties) (angl. Escape) klaviÅ¡u visada iÅ¡eisite." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Palaikomas minimalus BASH tipo redagavimas. TAB ties pirmuoju žodžiu " +"pateikia komandos užbaigimo pasiÅ«lymus. TAB nuspaudimas bet kur kitur " +"pateikia pasiekiamų įrenginių arba failų užbaigimus. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "IÅ¡valyti ekraną." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Ä®eiti į įprastą veikseną." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "IÅ¡eiti iÅ¡ įprastos veiksenos." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Norėdami tęsti, spauskite bet kurį klavišą..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Ä®keliamas „%s“" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Grįžtama į „%s“" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Nepavyko paleisti nei numatytojo, nei atsarginio įraÅ¡o.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Paleidžiama vykdant komandų sąrašą" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Palaikomas minimalus Emacs tipo redagavimas. TAB pateikia užbaigimo " +"pasiÅ«lymus. Norėdami paleisti sistemą, spauskite Vald+X arba F10; norėdami " +"patekti į komandinę eilutę, spauskite Vald+C arba F2; norėdami atmesti " +"pakeitimus ir grįžti į GRUB meniu, spauskite Gr(įžties) klavišą (angl. " +"escape)." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Ä®raÅ¡o pasirinkimui naudokite %C ir %C klaviÅ¡us." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "%s skaidinys:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "%s įrenginys:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Nepavyksta pasiekti failų sistemos" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Failų sistemos tipas %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- etiketė „%s“" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- paskiausiai keista %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Neaptikta nei vienos žinomos failų sistemos" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - skaidinys prasideda ties %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - sektoriaus dydis %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - bendras dydis nežinomas" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - bendras dydis %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--DAUGIAU--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "nepavyko atverti konfigÅ«racijos failo „%s“: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "jÅ«sų platformai glaudinimas neprieinamas" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "JÅ«sų platformai nėra IEEE1275 palaikymo" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "JÅ«sų platformai nėra EFI palaikymo" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "JÅ«sų platformai nėra SGI palaikymo" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" +"jÅ«sų operacinei sistemai atsitiktinių skaičių generatorius nėra prieinamas" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "nepavyko prijungti užšifruoto tomo „%s“: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "nepavyko tinkamai perskaityti „%s“" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "nepavyko perskaityti pagrindinio atvaizdžio sektorių" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Atminties įtaiso „%s“ informacijoje nepaminėtas tipas" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "„%s“ nėra vietinis diskas" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Atminties įtaiso „%s“ informacija nurodo, kad tai nei grynas skaidinys, nei " +"grynas diskas" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "nepavyko gauti blokų sąraÅ¡o: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "bloko dydis nesidalija iÅ¡ 512" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "netinkamas bloko dydis" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "nepavyko gauti blokų sąraÅ¡o" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "nepalaikoma RAID versija: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Nepavyksta atverti srauto iÅ¡ %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "Nežinomos rÅ«Å¡ies RAID įrenginys „%s“" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "Nežinomas įrenginio tipas: %s\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Naudojimas: %s Ä®RENGINYS\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "nepavyko atkurti originalaus katalogo" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "nepavyko sukurti laikinojo failo: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "nepavyksta sukurti laikinojo katalogo: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: nerastas" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() klaida" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "nepavyko gauti atsitiktinių duomenų" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "netikėta EFI klaida" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"jÅ«sų BIOS paleidimo skaidinys yra per mažas; įtalpinimas į jį negalimas" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"įtalpinimui skirta sritis yra neįprastai maža. Failas core.img netilps į jį." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Aktyvuoti skaidinį" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "ne pirminis skaidinys" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Nuo Å¡iol %d skaidinys aktyvus. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Panaikinti žymę, kad %d yra aktyvus. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Keisti skaidinio tipą" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Pažymėti, kad skaidinys yra paslėptas („hidden“ vėliavėlė)" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "skaidinio tipas 0x%x nėra tinkamas" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Skaidinio tipą pakeisti į 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "tai nepriklauso funkcijai" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "netinkamas kintamojo vardas „%s“" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "netikėta failo pabaiga" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[SKAIČIUS]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "IÅ¡eiti iÅ¡ ciklo" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Tęsti ciklą" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[REIKÅ MĖ]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "" + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Grįžti iÅ¡ funkcijos." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Aktyviame terminale rodyti fono paveikslėlį." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "SPALVA" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Aktyviam terminalui suteikti fono paveikslėlį." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "" + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Nustatyti nuosekliojo prievado adresą." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Nustatyti nuosekliojo prievado greitį." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Nustatyti nuosekliojo prievado žodžio ilgį." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Nustatyti nuosekliojo prievado lyginumą." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "" + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Nustatyti pagrindinį dažnį." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "nepalaikomas nuosekliojo prievado srauto valdymas" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[PARINKTYS...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "KonfigÅ«ruoti nuoseklųjį prievadą." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Nežinoma koduotė" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminalas yra grynai ASCII [numatytas]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "PLOTISxAUKÅ TIS." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g PLOTISxAUKÅ TIS] TERM [TIPAS]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " bendra atmintis: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "nepavyko rasti tinkamos vaizdo veiksenos" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "prieiga nesuteikta" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULIAI" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "įkeliami nurodyti MODULIAI" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "įdiegti tik MODULIUS ir jų priklausomybes [numatyta=all(=visi)]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "APIPAVIDALINIMAI" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "įdiegti APIPAVIDALINIMUS [numatyta=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "Å RIFTAI" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "įdiegti Å RIFTUS [numatyta=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LOKALĖS" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "įdiegti tik LOKALES [numatyta=all(=visos)]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "suglaudinti GRUB failus [pasirinktinai]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "pasirinkite pagrindinio atvaizdžio glaudinimo bÅ«dą" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "KATALOGE naudoti atvaizdžius ir modulius [numatyta=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "KATALOGE naudoti vertimus [numatyta=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "KATALOGE naudoti apipavidalinimus [numatyta=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "negalima %s pervadinti į %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "disko nėra, tad pareinama prie skaidinio %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Komandos:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "" + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [VARDAS=KINTAMASIS ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Nustatyti kintamuosius." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Å alinti kintamuosius." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Parinktys:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "" + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls KELIAS" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Parodyti KELYJE esančius failus" + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FAILAS" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "IÅ¡vesti FAILO turinį į standartinį iÅ¡vedimą" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FAILAS" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "" + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FAILAS" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "" + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "" + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "SKAIČIUS" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "IÅ¡pakuoti duomenis." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Netinkamas diskų skaičius.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Diskų skaičius turi eiti prieÅ¡ diskų sąrašą.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Nenurodyta komanda.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Komandai nepakanka parametrų.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Netinkama komanda %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ATVAIZDŽIO_KELIAS KOMANDOS" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Failų sistemos tvarkyklės derinimo įrankis." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "nurodyti įvedimo failą 32 bitų daliai." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "nurodyti įvedimo failą 64 bitų daliai." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" +"nurodyti iÅ¡vedimo failą. numatytasis yra STDOUT (standartinis iÅ¡vedimas)" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[PARINKTYS]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "TrÅ«ksta įvedimo failo\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "nepavyko „%s“ nukopijuoti į „%s“: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "nepavyko „%s“ suglaudinti į „%s“" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "nepavyko atverti aplanko „%s“: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "nepavyko paÅ¡alinti „%s“: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage sukompiliuotas be XZ palaikymo" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Nežinomas glaudinimo formatas %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Neatpažintas glaudinimo bÅ«das „%s“" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "Nežinomas glaudinimo formatas %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "nepavyko rasti lokalės „%s“" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s nerastas. Nurodykite --target arba --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "nežinoma platforma „%s-%s“" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB atvaizdžius diegti į kataloge KATALOGAS/%s, o ne kataloge %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "paÅ¡alinti įrenginių planą, jei toks yra" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "diegti ir tuomet, kai yra nesklandumų" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "etiketės Å¡riftui naudojamas FAILAS" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "Etiketės SPALVA" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "etiketės fono SPALVA" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "produkto versijai naudoti EILUTĘ" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[PARINKTYS] [Ä®RENGINYS_DIEGIMUI]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "GRUB įdiegti į atminties įtaisą." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Diegiama %s platformai.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "Nenurodytas diegimo įrenginys" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "nepavyko rasti EFI katalogo" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "nepavyksta rasti %s įrenginio (ar /dev prijungtas?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "nepavyksta rasta GRUB %s atminties įtaiso. Patikrinkite device.map" + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s nepanaÅ¡us į EFI skaidinį.\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "JÅ«s aptikote defektą" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "%s failų sistema nėra nei HFS, nei HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Nepavyksta sukurti failo: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NEVEIKIA: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "Pasirinktas skaidinys nėra PReP skaidinys" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "nepavyko Grub nukopijuoti į PReP skaidinį" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"PReP skaidinys nėra tuščias. Jei norite jį naudoti, naudokite dd komandą jam " +"iÅ¡valyti: „%s“" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "nenurodytas EFI paleidyklės ID." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "Ä®SPĖJIMAS: neatliktas joks su platforma susijęs diegimas" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Diegimas užbaigtas. Nesklandumų nepasitaikė." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Nenurodytas kelias arba įrenginys.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc KELIAS|--x86 FAILAS" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Naudojimas: %s [Ä®VEDAMAS_FAILAS [IÅ VEDAMAS_FAILAS]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (viduryje)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (kairėje)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (deÅ¡inėje)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Keitinys už ribų (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Nepalaikomas keitinio tipas: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Nepalaikoma keitinio specifikacija: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Nepalaikoma aprėpties specifikacija: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "Ä®SPĖJIMAS: nepalaikomi Å¡rifto savybių parametrai: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "iÅ¡vedimą raÅ¡yti į FAILĄ [bÅ«tina]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "IÅ -Ä®[,IÅ -Ä®]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "nurodyti Å¡riftų Å¡eimos pavadinimą" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "DYDIS" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "nustatyti Å¡rifto dydį" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "pusjuodis Å¡riftas" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "nenaudoti taÅ¡kinės korekcijos" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[PARINKTYS] Å RIFTŲ_FAILAI" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Ä®prastus Å¡riftų formatus konvertuoti į PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "reikia nurodyti iÅ¡vedimą" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType klaida" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "nepavyksta atverti failo %s, indeksu %d: klaida %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "nepavyko nustatyti %dx%d Å¡rifto dydžio: Freetype klaida %d: %s" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "tai nėra aplankas" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" +"sukurtą atvaizdį iÅ¡vesti į FAILĄ [numatyta=stdout(=į standartinę iÅ¡vestį)]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMATAS" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "sukurti tam tikro formato atvaizdį" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "galimi formatai:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[PARINKTIS]... [MODULIAI]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Sukurti GRUB paleidimo atvaizdį." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" +"nurodyti failą įvedimui. Numatytuoju atveju yra STDIN (standartinė įvestis)" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "KLAIDA: nerasta tinkamų klaviatÅ«ros iÅ¡dėstymų. Patikrinkite įvedimą.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "GRUB klaviatÅ«ros iÅ¡dėstymą sukurti pagal Linux konsolę." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "TFTP serverio Å¡akninis katalogas" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "santykinis pakatalogis tinklo serveryje" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "%s platforma nepalaikoma\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "sukurtos maiÅ¡os ilgis" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "nepavyko nuskaityti slaptažodžio" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Vėl įveskite slaptažodį: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "slaptažodžiai nesutampa" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Nenurodytas kelias.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "KELIAS" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Sistemos failo pavadinimą konvertuoti į GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ROM atvaizdį įraÅ¡yti KATALOGE [pasirinktinai]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "FAILĄ naudoti kaip xorriso [pasirinktinai]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "produkto pavadinimui naudoti eilutę" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Sukurti GRUB CD-ROM, disko, atmintuko ir diskelio paleidimo atvaizdžius." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Sukuria CD/USB/diskelio atvaizdį kompiuterio paleidimui. Argumentai, kurie " +"nėra Å¡ios programos parinktys, perduodami į xorriso; jie nurodo Å¡altinius " +"failus, Å¡altinius katalogus arba kitas mkisofs parinktis, kurias galite " +"pamatyti įvykdę „%s“." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Dėl xorriso palaikymo raÅ¡ykite ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[PARINKTIS] Å ALTINIS" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "įgalinamas %s palaikymas..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"JÅ«sų xorriso nepalaiko „--grub2-boot-info“. Kai kurios savybės yra " +"uždraustos. Naudokite xorriso 1.2.9 arba vėlesnę versiją." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"JÅ«sų xorriso nepalaiko „--grub2-boot-info“. JÅ«sų pagrindinis atvaizdis yra " +"per didelis. Paleisti kaip disko negalėsite. Naudokite xorriso 1.2.9 arba " +"vėlesnę versiją." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Pasirinktu formatu sukurti autonominį atvaizdį (turintį visus modulius)" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ATVAIZDIS1 [ATVAIZDIS2 ...] PRIJUNGIMO_VIETA" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "reikia atvaizdžio ir prijungimo vietos" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "pateiktas argumentas yra sistemos įrenginys, o ne kelias" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, fuzzy, c-format +msgid "[default=%s]" +msgstr "įdiegti Å RIFTUS [numatyta=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[PARINKTIS]... [KELIAS|Ä®RENGINYS]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "tekstą skaityti iÅ¡ FAILO." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "SPALVĄ naudoti tekstą" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "SPALVĄ naudoti fonui" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "nurodyti atvaizduojamą etiketę" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "FAILĄ naudoti kaip Å¡riftą (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Atvaizduoti Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "TrÅ«ksta argumentų\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[KELIAS]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Patikrinti, ar GRUB scenarijaus konfigÅ«racijos faile nėra sintaksės klaidų." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Sintaksės klaida %u eilutėje\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "„%s“ scenarijuje nėra komandų, tad jis nieko neatliks\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "FAILĄ naudoti kaip atvaizdį paleidimui [numatytasis=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "FAILĄ naudoti kaip pagrindinį atvaizdį [numatytasis=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Ä®renginys nenurodytas.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Parengti atvaizdžius paleidimui iÅ¡ Ä®RENGINIO.\n" +"\n" +"Nereikėtų tiesiogiai naudoti Å¡ios programos. Verčiau naudokite grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "Ä®RENGINYS turi bÅ«ti OS įrenginys (pvz. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Netinkamas įrenginys „%s“.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "Å¡akninis katalogas, kuris bus matomas vykdant [numatytasis=/]." + +#: util/grub-syslinux2cfg.c:69 +#, fuzzy +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"veikiamasis syslinux katalogas, kuris bus matomas vykdant [numatytasis yra " +"vienu lygiu aukščiau nei įvedimo failas]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "iÅ¡vesti į FAILĄ [numatyta=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "syslinux konfigÅ«raciją transformuoti į GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "nepavyksta suglaudinti branduolio atvaizdžio" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "nežinomas glaudinimas %d\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "IÅ¡pakavimas yra per didelis" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "pagrindinis atvaizdis yra per didelis (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "branduolio atvaizdis yra per didelis (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img dydis turi bÅ«ti %u baitų" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img neatitinka žinomos patikimos versijos. Prisiimkite galimą riziką" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "per didelis programinės aparatinės įrangos (angl. firmware) atvaizdis" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "pagrindinio failo sektoriai yra pernelyg fragmentuoti" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "„%s“ dydis nėra %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "„%s“ dydis yra per mažas" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Bandote GRUB įdiegti į diską su keliomis skaidinių etiketėmis arba tiek su " +"skaidinio etikete, tiek failų sistema. To dar nepalaikome." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"nepavyksta identifikuoti %s failų sistemos; negalima atlikti saugumo " +"patikrinimo" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Bandote įdiegti GRUB į diską, kuriame nėra skaidinių, arba į skaidinį. Tai " +"PRASTAS sumanymas." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Bandote GRUB įdiegti į diską su keliomis skaidinių etiketėmis. To dar " +"nepalaikome." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Skaidymo stilius „%s“ nepalaiko įtalpinimo" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Failų sistema „%s“ nepalaiko įtalpinimo" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Ä®talpinimui skirta sritis yra neįprastai maža. Failas core.img netilps į jį." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img versija neatitinka" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "nepavyksta aptikti %s failų sistemos" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "„%s“ failų sistema nepalaiko bloko sąrašų" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "netinkamas blokų sąraÅ¡as" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "neužbaigtas blokų sąraÅ¡as" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Sukurti GRUB klaviatÅ«ros iÅ¡dėstymo failą." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "parodyti šį praneÅ¡imą ir iÅ¡eiti" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "parodyti versiją ir iÅ¡eiti" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Apie nesklandumus praneÅ¡kite ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: parinkčiai reikia argumento -- „%s“\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Naudojimas: %s [PARINKTIS]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Sukurti grub konfigÅ«racijos failą" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" +"sukurta konfigÅ«racija iÅ¡vedama į FAILĄ [numatyta=stdout(=į standartinį " +"iÅ¡vedimą)]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Neatpažinta parinktis „%s“\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: privalote paleisti root teisėmis\\n" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s: nerastas" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Kuriamas grub konfigÅ«racijos failas..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Sukurtame GRUB konfigÅ«racijos faile aptikta klaidų.\n" +"Ä®sitikinkite, ar nėra klaidų /etc/default/grub\n" +"ir /etc/grub.d/* failuose arba praneÅ¡kite apie klaidą\n" +"prisegdami %s failą." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "atlikta" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Ä®spėjimas:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Naudojimas: %s [PARINKTIS] MENIU_Ä®RAÅ AS\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Nurodyti numatytąjį numatytąjį paleidimo GRUB meniu įrašą, galios tik vienam " +"paleidimui." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB atvaizdžių tikėtis kataloge KATALOGAS/%s, o ne kataloge %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Daugiau nei vienas meniu įraÅ¡as?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Meniu įraÅ¡as nenurodytas." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Nurodyti numatytąjį numatytąjį paleidimo GRUB meniu įrašą." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Tam reikia įraÅ¡yti GRUB_DEFAULT=saved faile %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"MENU_ENTRY yra skaičius, menu įraÅ¡o antraÅ¡tė arba meniu įraÅ¡o " +"identifikatorius." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Aptiktas apipavidalinimas: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Aptiktas fonas: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Nepalaikomas paveikslėlio formatas" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Aptiktas GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Aptikti Hurd moduliai: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Aptikta Hurd elementų, tačiau nepakankamai sistemai paleisti." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, su Hurd %s (atkÅ«rimo veiksena)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, su Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Nenaudokite senos GRUB_DEFAULT antraÅ¡tės „%s“, naudokite „%s“ (iki 2.00 " +"versijos) arba „%s“ (2.00 ir vėlesnėms)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Ä®keliamas GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Ä®keliamas Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Sudėtingesnės %s parinktys" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Ä®keliamas Illumos branduolys ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, su kFreeBSD %s (atkÅ«rimo veiksena)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, su kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Ä®keliamas FreeBSD %s branduolys..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Aptiktas FreeBSD branduolys: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Aptiktas branduolio modulių katalogas: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, su Linux %s (atkÅ«rimo veiksena)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, su Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Ä®keliama Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Ä®keliamas paruoÅ¡iamasis ram diskas ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Aptiktas linux atvaizdis: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Aptiktas initrd atvaizdis: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, su %s branduoliu (per %s, atkÅ«rimo veiksena)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, su %s branduoliu (per %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Aptiktas NetBSD branduolys: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (paleidyklė)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (paleidyklė)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Aptikta %s ties %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32 bitų)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64 bitų)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(ties %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, su Xen %s ir Linux %s (atkÅ«rimo veiksena)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, su Xen %s ir Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, su Xen sistemos prižiÅ«rykle" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Ä®keliamas Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen sistemos prižiÅ«ryklė, %s versija" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Sudėtingesnės %s parinktys (su Xen sistemos prižiÅ«rykle)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "%s rastas ties %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "grub-mkconfig dar nepalaiko %s.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Nepalaikoma keitinio vėliavėlė: 0x%x\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Adresų diapazonas, nesusietas su operatyviąja atmintimi" diff --git a/po/nb.gmo b/po/nb.gmo new file mode 100644 index 0000000000000000000000000000000000000000..ee7d0bac3678e8c24d8aad4c071222c967551858 GIT binary patch literal 125517 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 V0$QutWLspQ_j}XeqaNs`T>!l{p1c46 literal 0 HcmV?d00001 diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 000000000..1887b4008 --- /dev/null +++ b/po/nb.po @@ -0,0 +1,6842 @@ +# Norwegian bokmÃ¥l translation of GNU grub. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Åka Sikrom , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-10 10:09+0100\n" +"Last-Translator: Åka Sikrom \n" +"Language-Team: Norwegian Bokmaal \n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.4\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "denne seriellport-hastigheten støttes ikke" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "denne seriellport-pariteten støttes ikke" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "dette «stop bits»-tallet for seriellport støttes ikke" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "denne seriellport-ordlengden støttes ikke" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Ikke last inn vertstabeller som er nevnt i kommaseparert liste." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Bare last inn tabeller som er nevnt i kommaseparert liste." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Eksporter versjon 1-tabeller til operativsystemet." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Eksporter versjon 2- og versjon 3-tabeller til operativsystemet." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Velg OEMID for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Velg OEMTABLE-ID for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Velg OEMTABLE-revisjon for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Velg «creator»-felt for RSDP, XSDT og RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Velg «creator»-revisjon for RSDP, XSDT og RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Ikke oppdater EBDA. Dette kan løse hengeproblemer med enkelte BIOS-er, men " +"medfører at operativsystemet ikke mottar RSDP fra GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "fila %s sluttet for tidlig" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABELL1,TABELL2|--load-only=TABELL1,TABELL2] FIL1 [FIL2] " +"[…]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Last inn ACPI-vertstabeller og evt. argumenterte tabeller." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "feil: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "minnet er oppbrukt" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "klarte ikke Ã¥ lese «%s». %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI-systemstans mislyktes" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Vis enheter." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "forventet et filnavn" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FIL" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Skriv ut en blokkliste." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "du mÃ¥ laste inn kjernen først" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Start opp et operativsystem." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Ingen statistikk for oppstartstid er tilgjengelig\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Vis statistikk for oppstartstid." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statistikk for disk-hurtiglager: treff = %lu (%lu.%02lu%%). bom = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Ingen statistikk for disk-hurtiglager er tilgjengelig\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Hent informasjon om disk-hurtiglager." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Godta CR-/NL-linjeavslutninger i DOS-stil." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Vis innholdet i en fil." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "forventet to argumenter" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Sammenlikning av fil «%s» og «%s»:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Filene har ulik størrelse: %llu (%s), og %llu (%s)\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Filene er ulike ved punktet %llu: 0x%x (%s), og 0x%x (%s)\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Filene er identiske.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FIL1 FIL2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Sammenlikn to filer." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Last inn en annen oppsettsfil." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Last inn en annen oppsettsfil uten Ã¥ endre kontekst." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Last inn en annen oppsettsfil uten Ã¥ endre kontekst, men bare ta med " +"menyoppføringer." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Last inn en annen oppsettsfil, men bare ta med menyoppføringer." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[Ã¥r-]mÃ¥ned-dag] [time:minutt[:sekund]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Vis/still gjeldende dato og klokkeslett." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Ikke avslutt med linjeskift." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "SlÃ¥ pÃ¥ tolkning av skrÃ¥strek-skiftetegn." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] STRENG" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Vis en tekstlinje." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Start pÃ¥ nytt og kjør fastvare-oppsettsmeny." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Løs videoproblem." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM-bilde er tilstede." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Klarte ikke Ã¥ aktivere ROM-omrÃ¥de." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Lag BIOS-lignende strukturer for bakover-kompatiblitet med eksisterende " +"operativsystemer." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Last inn BIOS-dump." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "STRENG …" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Regn argumenter som GRUB-kommandoer" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Sjekk om FIL kan startes opp som en i386 PAE Xen uprivilegert gjestekjerne" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Sjekk om FIL kan startes opp som en X86_64 Xen uprivilegert gjestekjerne" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "Sjekk om FIL kan brukes som en Xen x86 privilegert gjestekjerne" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Sjekk om FIL kan brukes som en x86 «multiboot»-kjerne" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Sjekk om FIL kan brukes som en x86 «multiboot2»-kjerne" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Sjekk om FIL er en ARM Linux-kjerne" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Sjekk om FIL er en ARM64 Linux-kjerne" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Sjekk om FIL er en IA64 Linux-kjerne" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Sjekk om FIL er en MIPS Linux-kjerne" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Sjekk om FIL er en MIPSEL Linux-kjerne" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Sjekk om FIL er en SPARC64 Linux-kjerne" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Sjekk om FIL er en POWERPC Linux-kjerne" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Sjekk om FIL er en x86 Linux-kjerne" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Sjekk om FIL er en x86 Linux-kjerne som støtter 32-bitprotokoll" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Sjekk om FIL er en x86 kFreeBSD-kjerne" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Sjekk om FIL er en i386 kFreeBSD-kjerne" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Sjekk om FIL er en x86_64 kFreeBSD-kjerne" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Sjekk om FIL er en x86 kNetBSD-kjerne" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Sjekk om FIL er en i386 kNetBSD-kjerne" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Sjekk om FIL er en x86_64 kNetBSD-kjerne" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Sjekk om FIL er en i386 EFI-fil" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Sjekk om FIL er en x86_64 EFI-fil" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Sjekk om FIL er en IA64 EFI-fil" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Sjekk om FIL er en ARM64 EFI-fil" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Sjekk om FIL er en ARM EFI-fil" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Sjekk om FIL er hiberfil.sys i dvalemodus" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Sjekk om FIL er en x86_64 XNU(Mac OS X)-kjerne" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Sjekk om FIL er en i386 XNU(Mac OS X)-kjerne" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Sjekk om FIL er et XNU(MAC OS X)-bilde i dvalemodus" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Sjekk om FIL er en BIOS-oppstartssektor" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "usant" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "VALG FIL" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Sjekk om FIL er av valgt type." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "partisjonen finnes ikke" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Ny MBR er skrevet til «%s»\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ENHET [PARTISJON[+/-[TYPE]]] …" + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Fyll hybrid-MBR for GPT-enheten ENHET. Valgte partisjoner inngÃ¥r i hybrid-" +"MBR. Du kan bruke opptil 3 partisjoner. TYPE er en MBR-type. «+» betyr at en " +"partisjon er aktiv. Kun én partisjon kan være aktiv." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Stanser datamaskinen. Denne kommandoen virker ikke med alle fastvare-" +"implementasjoner." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Velg hvilken nøkkel som skal brukes." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "NØKKEL" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Sjekk nøkkelsummer («hash») av filer mot valgt nøkkelliste-FIL." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Grunnmappe for nøkkelsum-liste." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "MAP" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Ikke stopp etter første feil." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Pakk ut fila før sjekksummer kontrolleres." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LESEFEIL\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: NØKKEL SAMSVARER IKKE\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h NØKKEL [-c FIL [-p PREFIKS]] [FIL1 [FIL2 …]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Regn ut eller kontroller nøkkelsum." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FIL [-p PREFIKS]] [FIL1 [FIL2 …]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Still inn avansert strømstyring\n" +"(1=lav, …, 254=høy, 255=av)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Vis strømmodus." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "LÃ¥s ATA-sikkerhetsinnstillinger til maskinen startes pÃ¥ nytt." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Vis SMART-tilstand." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Still inn automatisk akustikkhÃ¥ndtering\n" +"(0=av, 128=stille, …, 254=rask)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Still inn tidsavbrudd for ventemodus\n" +"(0=av, 1=5s, 2=10s, …, 240=20m, 241=30m, …)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Sett lagringsenheten i ventemodus." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Sett lagringsenheten i dvalemodus." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Skriv ut lagringsenhetens identitet og oppsett." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Vis rÃ¥data fra ATA IDENTIFY-sektor." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SlÃ¥ av/pÃ¥ SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Ikke skriv ut meldinger." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "forventet ett argument" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[VALG] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Hent/velg ATA-diskparametre." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Bruk:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MØNSTER …]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Vis en hjelpemelding." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Hopp over forskyvningsbyte i begynnelsen av fila." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Skrivebeskyttede «LENGTH»-byte." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[VALG] FIL_ELLER_ENHET" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Vis rÃ¥data i en fil eller i minnet." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Vis rÃ¥innholdet pÃ¥ CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Test bit ved BYTE:BIT i CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Tøm bit ved BYTE:BIT i CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Still inn bit ved BYTE:BIT i CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Vis statistikk for coreboot-oppstartstid." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Vis coreboot-tabeller." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Sjekk om prosessoren støtter (lang) 64-bitmodus (standard)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Sjekk om prosessoren støtter fysisk adresseutvidelse (PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Vis informasjon om prosessoren." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Vis gjeldende koblinger." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Tilbakestill alle koblinger til standardverdier." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Lag bÃ¥de direkte og omvendte koblinger." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Ingen lagringsenheter er omkoblet" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS-disk #num ------> GRUB-/BIOS-enhet" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "HÃ¥ndter koblinger av BIOS-lagringsenheten." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Ikke bruk APM for Ã¥ stanse maskinen." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Stans systemet, med APM hvis mulig." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "fant ingen APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versjon %u.%u\n" +"32-bit CS = 0x%x, lengde = 0x%x, punkt = 0x%x\n" +"16-bit CS = 0x%x, lengde = 0x%x\n" +"DS = 0x%x, lengde = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bit beskyttet grensesnitt støttes\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bit beskyttet grensesnitt støttes ikke\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bit beskyttet grensesnitt støttes\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bit beskyttet grensesnitt støttes ikke\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "«CPU Idle» skrur ned hastigheten pÃ¥ prosessoren\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "«CPU Idle» skrur ikke ned hastigheten pÃ¥ prosessoren\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM deaktivert\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM aktivert\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM er ikke klar\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM er klar\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Vis informasjon om APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "forventet enten filnavn eller tempo og notes" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Ugyldig tempo i %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "fant ikke fila «%s»" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "ukjent tall" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FIL | TEMPO [TONE1 VARIGHET1] [TONE2 VARIGHET2] … " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Spill en sang." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "velg numlock-modus" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "velg capslock-modus" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "velg scrollock-modus" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "velg insert-modus" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "velg pause-modus" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "trykk pÃ¥ venstre shift-knapp" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "trykk pÃ¥ høyre shift-knapp" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "trykk pÃ¥ SysRq-knappen" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "trykk pÃ¥ NumLock-knappen" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "trykk pÃ¥ CapsLock-knappen" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "trykk pÃ¥ ScrollLock-knappen" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "trykk pÃ¥ Insert-knappen" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "trykk pÃ¥ venstre alt-knapp" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "trykk pÃ¥ høyre alt-knapp" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "trykk pÃ¥ venstre ctrl-knapp" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "trykk pÃ¥ høyre ctrl-knapp" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "ikke oppdater LED-tilstand" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KNAPPETRYKK1] [KNAPPETRYKK2] …" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Etterlikn en knappetrykk-sekvens" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Kjør «go» for Ã¥ gÃ¥ tilbake til GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "GÃ¥ tilbake til IEEE1275-ledetekst." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Lagre innlest verdi i variabelen VARNAVN" + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAVN" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Les 8-bit-verdi fra valgt PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Les 16-bit-verdi fra valgt PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Les 32-bit-verdi fra valgt PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VERDI [MASKE]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Skriv 8-bit-VERDI til valgt PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Skriv 16-bit-VERDI til valgt PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADR VERDI [MASKE]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Skriv 32-bit-VERDI til valgt PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "variabelen «%s» har ingen verdi" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Last inn en tastaturutforming." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Kontroller Shift-knappen." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Kontroller Control-knappen." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Kontroller Alt-knappen." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Kontroller knappeendringsstatus." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "fant ikke kommandoen «%s»" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Skriv inn passord:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Tolk gammelutformet oppsett i samme kontekst" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Tolk gammelutformet oppsett i ny kontekst" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Tolk gammelutformet oppsett i samme kontekst, og bare ta med menyoppføringer" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Tolk gammelutformet oppsett i ny kontekst, og bare ta med menyoppføringer" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FIL [ARG …]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simuler «kernel»-kommando fra grub-legacy" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FIL [ARG …]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simuler «initrd»-kommando fra grub-legacy" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simuler «modulenounzip»-kommando fra grub-legacy" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSORD [FIL]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simuler «password»-kommando fra grub-legacy" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simuler «password»-kommando fra grub-legacy i menyoppføringsmodus" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Velg filnavn." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Hopp over signaturkontroll av miljøfila." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FIL] [-s|--skip-sig] [variabelnavn_som_skal_hvitelistes] […]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Last inn variabler fra miljø-blokkfil." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FIL]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Vis variabler fra miljø-blokkfil." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FIL] variabelnavn […]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Lagre variabler i miljø-blokkfil." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Vis en lang liste med mer detaljert informasjon." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Skriv ut størrelser i et menneskevennlig format." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Vis alle filer." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Nettverksprotokoller:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FIL …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Vis enheter og filer." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Bare vis versjon 1-tabeller." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Bare vis versjon 2- og versjon 3-tabeller." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Vis ACPI-informasjon." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "tilgjengelig RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "reservert RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI-tilbakeførbar RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPI ikke-flyktig RAM" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM med feil (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "tilstandsbevarende RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "tilstandsbevarende RAM (gammel type)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM med coreboot-tabeller" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM med fastvarekode" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, lengde = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, lengde = 0x%llx, type = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Vis minnekart fra fastvare." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Vis PCI-enheter." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" +"Marker FIL av HFS- eller HFS+-partisjon for bruk med intel-basert mac-maskin." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" +"Marker FIL av HFS- eller HFS+-partisjon for bruk med PPC-basert mac-maskin." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Les 8-bit-verdi fra valgt ADR." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Les 16-bit-verdi fra valgt ADR." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Les 32-bit-verdi fra valgt ADR." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Skriv 8-bit-VERDI til ADR." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Skriv 16-bit-VERDI til ADR." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Skriv 32-bit-VERDI til ADR." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Type menyoppføring." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRENG" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "" +"Lister over brukere som har tillatelse til Ã¥ starte opp denne oppføringa." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "BRUKERNAVN[,BRUKERNAVN]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Knapp som starter denne oppføringa raskt." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TASTATUR_KNAPP" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Bruk valgt STRENG som menyoppføring." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Menyoppførings-ID." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Denne oppføringa kan startes opp av alle brukere." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOKK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Lag en menyoppføring." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Definer en undermeny." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Navn\tReferanseantall\tAvhengigheter\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Vis denne meldinga." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADR [STØRR]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Vis innhold i minnet." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Fjern en modul." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Vis innlastede moduler." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Avslutt GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Fant ingen CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 ved %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"Inn-/utdataomrÃ¥de for kontrollenhet for systemhÃ¥ndteringsbuss ligger ved 0x" +"%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM-kortplass nr. %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Skrevne SPD-byte: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Total kortstørrelse: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Minnetype: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Delnummer: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Minnetype: Ukjent." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Skriv ut informasjon om minnet." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s støtter ikke UUID-er" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Bytt til innebygde diskdrivere. Hvis ingen moduler er valgt, brukes " +"standardsett (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Utfør KOMMANDOER pÃ¥ partisjon.\n" +"Bruk «parttool PARTISJON help» for Ã¥ se en liste over tilgjengelige " +"kommandoer." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Ingen partisjonsverktøy er tilgjengelig for %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "«%s» er et ukjent argument" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTISJON KOMMANDOER" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "BRUKER PASSORD" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Velg passord for en bruker (ren tekst). Dette er usikkert, og anbefales ikke." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ugyldig PBKDF2-passord" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "BRUKER PBKDF2-PASSORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Velg passord for en bruker (PBKDF2)." + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Velg enhet ut i fra produsent- og enhets-ID-er." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[produsent]:[enhet]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Velg enhet etter hvor pÃ¥ bussen den ligger." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[buss]:[kortplass][.funk]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "det mangler et «%c»-symbol" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSISJON] [-d ENHET]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Vis rÃ¥dump av PCI-oppsettsomrÃ¥det." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Gi verdi til en variabel for Ã¥ hente verdi." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Vis driver." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Vis partisjonskart-type." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Vis filsystemtype." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Vis filsystem-UUID." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Vis filsystem-etikett." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "filsystemet «%s» støtter ikke etiketter" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ENHET" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Hent enhetsinfo." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[MILJØVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Gi verdi til en variabel med inndata fra bruker." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Start maskinen pÃ¥ nytt." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Lagre samsvarende komponent-TALL i VARNAVN." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[TALL:]VARNAVN" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REG_UTTR STRENG" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Sjekk om REG_UTTR samsvarer med STRENG." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAVN [VARIABEL] [HINT]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Finn enheter ved Ã¥ søke etter filer som ligger pÃ¥ dem. Hvis VARIABEL er " +"valgt, blir den første samsvarende enheten brukt som variabelverdi." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Finn enheter ved Ã¥ søke etter en etikett. Hvis VARIABEL er valgt, blir den " +"første samsvarende enheten brukt som variabelverdi." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Finn enheter ved hjelp av UUID. Hvis VARIABEL er valgt, blir den første " +"samsvarende enheten brukt som variabelverdi." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Finn enheter ved Ã¥ søke etter en fil." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Fin enheter ved Ã¥ søke etter en filsystem-etikett." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Finn enheter ved Ã¥ søke etter en filsystem-UUID." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Bruk første funnede enhet som verdi for en variabel." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Ikke søk gjennom diskettstasjoner." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Prøv enheten HINT først. Prøv ogsÃ¥ underpartisjoner hvis HINT slutter pÃ¥ " +"komma" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINT" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv enheten HINT først hvis systemet kjører pÃ¥ IEEE1275. Prøv ogsÃ¥ " +"underpartisjoner hvis HINT slutter pÃ¥ komma" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv enheten HINT først hvis systemet kjører pÃ¥ BIOS. Prøv ogsÃ¥ " +"underpartisjoner hvis HINT slutter pÃ¥ komma" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Prøv enheten HINT først hvis direkte maskinvaretilgang støttes. Prøv ogsÃ¥ " +"underpartisjoner hvis HINT slutter pÃ¥ komma" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv enheten HINT først hvis systemet kjører pÃ¥ EFI. Prøv ogsÃ¥ " +"underpartisjoner hvis HINT slutter pÃ¥ komma" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prøv enheten HINT først hvis systemet kjører pÃ¥ ARC. Prøv ogsÃ¥ " +"underpartisjoner hvis HINT slutter pÃ¥ komma" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] …] NAVN" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Finn enheter ved Ã¥ søke etter filer som ligger pÃ¥ dem, filsystem-etikett " +"eller UUID. Første funnede enhet brukes som verdi for en variabel hvis «--" +"set» er valgt. Variabelnavnet «root» brukes hvis du ikke velger et annet." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x av %x:%02x.%x er %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSISJON] [-d ENHET] [-v VAR] REGISTER[=VERDI[:MASKE]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipuler PCI-enheter." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Detaljert nedtelling." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Tillat avbrudd ved bruk av ESC-knappen." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ANTALL_SEKUNDER" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Vent i valgt antall sekunder." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "syslinux-diskens rotmappe (standard=/)." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"gjeldende plassering av syslinux (standard er inndatafilas foreldermappe)." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "forvent at inndata er en isolinux-oppsettsfil." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "forvent at inndata er en pxelinux-oppsettsfil." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "forvent at inndata er en syslinux-oppsettsfil." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Kjør syslinux-oppsett i samme kontekst" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Kjør syslinux-oppsett i ny kontekst" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Kjør syslinux-oppsett i samme kontekst, og bare ta med menyoppføringer" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Kjør syslinux-oppsett i ny kontekst, og bare ta med menyoppføringer" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "ingen terminal er valgt" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "fant ikke terminal «%s»" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktive inndata-terminaler:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Tilgjengelige inndata-terminaler:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktive utdata-terminaler:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Tilgjengelige utdata-terminaler:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] …" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Vis eller velg en inndata-terminal." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Vis eller velg en utdata-terminal." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "UTTRYKK ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Vurder et uttrykk." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "UTTRYKK" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Last inn samme fil pÃ¥ flere mÃ¥ter." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Velg hvor stor hver leseoperasjon skal være" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "ugyldig blokkstørrelse" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Filstørrelse: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "MedgÃ¥tt tid: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Hastighet: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s STØRR] FILNAVN" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Test lesehastighet pÃ¥ fil." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "ingen kommando er valgt" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "MedgÃ¥tt tid: %d.%03d sekunder \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "KOMMANDO [ARGU]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "MÃ¥l hvor lang tid valgt KOMMANDO bruker" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Gjør alle bokstaver store." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Gjør alle bokstaver smÃ¥." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[VALG] [SETT1] [SETT2] [STRENG]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Gjør om tegn i SETT1 til SETT2 i STRENG." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Gjør ingenting, med vellykket («true») status." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Gjør ingenting, med mislykket («false») status." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Test USB-støtte." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Hopp over signaturkontroll av offentlig nøkkelfil." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "ubrukelig signatur" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "fant ikke offentlig nøkkel %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "modulen «%s» er ikke lastet inn" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FIL SIGNATURFIL [OFF_NØKKELFIL]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Bekreft løs signatur." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] OFF_NØKKELFIL" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Legg til OFF_NØKKELFIL i lista over godkjente nøkeler." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Vis lista over godkjente nøkler." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "NØKKEL_ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Fjern valgt NØKKEL_ID fra lista over godkjente nøkler." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Bare tekst" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Direktefarge, maske: %d/%d/%d/%d pos.: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "I palett" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monokromatisk" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Ukjent videomodus" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " Ugyldig EDID-kontrollsum" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID-versjon: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Foretrukket modus: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Ingen foretrukket modus tilgjengelig\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "«%s» er et ugyldig videomodus-valg" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Liste over støttede videomoduser:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Forklaring: maske/posisjon=rød/grønn/blÃ¥/reservert" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter «%s»:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Ingen informasjon tilgjengelig om denne enheten" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Klarte ikke Ã¥ starte opp videoadapter" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[WxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Vis tilgjengelige videomoduser. Hvis oppløsning er valgt, vises kun moduser " +"som samsvarer med den." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Test video-undersystem i modus BreddexHøyde." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Test video-undersystem." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[MAPPE]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Vis Xen-lagringsenheter." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUB-UUID [VARNAVN]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Gjør om 64-bit-UUID til et format som kan brukes med XNU. Resultatet skrives " +"ut med smÃ¥ bokstaver - som med blkid - hvis «-l» er valgt." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "det oppstod en feil ved lesing av sektor 0x%llx fra «%s»" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "det oppstod en feil ved skriving av sektor 0x%llx til «%s»" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Monter etter UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Monter alle." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Monter alle volum med «boot»-flagg." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "klarte ikke Ã¥ Ã¥pne «%s». %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "klarte ikke Ã¥ søke etter «%s». %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "KILDE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Monter en kryptert enhet." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Fant ikke det fysiske volumet «%s». Det er mulig at kjernebildet mangler " +"enkelte moduler." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "fant ikke fysisk volum %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "det er ingen medium i «%s»" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Klarte ikke Ã¥ laste inn sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Klarte ikke Ã¥ laste inn sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "klarte ikke Ã¥ lese ELI-metadata" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "feil ELI-magi eller -versjon" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Prøver Ã¥ dekryptere hovednøkkel …" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Skriv inn passordfrase for %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Skuff %d er Ã¥pnet\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "forsøk Ã¥ lese eller skrive utenfor disken «%s»" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "klarte ikke Ã¥ skrive til CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Du bruker lokale diskdrivere. Disk-grensesnitt pÃ¥ fastvare blir ikke brukt." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "LDM-innebyggingspartisjonen er for liten. Innebygging kan ikke utføres" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"denne LDM-enheten har ingen innebyggingspartisjon. Innebygging kan ikke " +"utføres" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Slett valgt filmonteringsenhet." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] ENHETSNAVN FIL." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Lag en virtuell enhet av en fil." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "flytting av 0x%x er ikke implementert ennÃ¥" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "ingen symboltabell" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "denne ELF-fila er av feil type" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Last inn og start opp EFI-emulator." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Ferdigstill innlasting av EFI-emulator." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "SlÃ¥ av EFI-emulator." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "fant ikke symbolet «%s»" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Skrifttyper i bruk:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FIL …" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Velg én eller flere skrifttype-filer som skal lastes inn." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Vis en liste over skrifttyper som er i bruk." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "det er for mange nivÃ¥er av symbolske metalenker" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "prøv Ã¥ lese forbi slutten av fila" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "fant ikke et nødvendig medlem av tverrenhet-filsystem" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "ikke en mappe" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "ikke en vanlig fil" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"core.img-fila di er unormalt stor. Den kan ikke legges i innebyggingsomrÃ¥det" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "«%s» er et ugyldig filnavn" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "bekreftelse av kontrollsum mislyktes" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "ingen dekrypteringsnøkkel tilgjengelig" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC-bekreftelse mislyktes" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Forvent rÃ¥-inndata." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Forvent heksadesimal inndata." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Forvent at inndata er en passordfrase." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Skriv inn ZFS-passord:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FIL]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importer ZFS-innpakningsnøkkel som ligger i valgt FIL." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtuell enhet er fjernet" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtuell enhet har problemer" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtuell enhet er frakoblet" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtuell enhet er degradert" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtuell enhet er tilkoblet" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Feil virtuell enhet: ingen type tilgjengelig" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Virtuell blad-enhet (fil eller disk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Oppstartssti: utilgjengelig\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Oppstartssti: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Sti: utilgjengelig" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Sti: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Enhet-id: utilgjengelig" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Enhet-id: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Denne VDEV-en er et speil" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Denne VDEV-en er en RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Feil VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV med %d avkom\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV-element nummer %d er feil\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV-element nummer %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Ukjent virtuell enhetstype: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Pool-status: aktivt" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Pool-status: eksportert" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Pool-status: ødelagt" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Pool-status: reservert" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Pool-status: ARC-enhet pÃ¥ nivÃ¥ 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Pool-status: ikke lastet inn" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Pool-status: utilgjengelig" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Pool-status: potensielt aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Pool-status: utilgjengelig" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Pool-navn: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Pool-GUID: utilgjengelig" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Pool-GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Klarte ikke Ã¥ hente pool-status" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Ukjent pool-status" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Intet virtuelt enhetstre tilgjengelig" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Skriv ut ZFS-info om valgt ENHET" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FILSYSTEM [VARIABEL]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Skriv ut ZFS-BOOTFSOBJ, eller lagre informasjonen i valgt VARIABEL" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "NÃ¥ kan du koble til den eksterne feilsøkeren." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Start GDB-test pÃ¥ valgt port" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Bryt inn i GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Stans GDB-testing" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "for tidlig slutt pÃ¥ fil" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "OVersetter strengen med gjeldende oppsett." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Trykk enter for Ã¥ starte valgt OS, «e» for Ã¥ redigere kommandoer før " +"oppstart eller «c» for en kommandolinje. ESC tar deg tilbake til forrige " +"meny." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Trykk enter for Ã¥ starte valgt OS, «e» for Ã¥ redigere kommandoer før " +"oppstart eller «c» for en kommandolinje." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: start opp, «e»: valg, «c»: kmnd.linje" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Valgt oppføring startes automatisk om %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds gjenstÃ¥r." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB oppstartsmeny" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: verdien av %s er lavere eller lik %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: «ARGP_HELP_FMT»-parameteret krever en verdi" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: «ARGP_HELP_FMT»-parameteret mÃ¥ være positivt" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Ukjent «ARGP_HELP_FMT»-parameter" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Søppel i «ARGP_HELP_FMT»: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Valg er enten obligatoriske bÃ¥de for fullstendige valg og tilsvarende " +"forkortede valg." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " or: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [VALG …]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Prøv «%s --help» eller «%s --usage» for ytterligere informasjon.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Rapporter feil til %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Ukjent systemfeil" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "vis denne hjelpelista" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "vis en kortfattet bruksanvisning" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "velg programmets navn" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SECS" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "heng i valgt (SECS) antall sekunder (standard: 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "skriv ut programversjon" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMFEIL) Ingen kjent versjon!" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: For mange argumenter\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMFEIL) Valget skulle ha blitt gjenkjent!" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: valget «%s» er flertydig, og kan bety følgende:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: valget «--%s» tillater ikke bruk av argumenter\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: valget «%c%s» tillater ikke bruk av argumenter\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: valget «--%s» krever et argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: «--%s» er et ukjent valg\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: «%c%s» er et ukjent valg\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: «%c» er et ugyldig valg\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: valget «%c» krever et argument\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: valget «-W %s» er flertydig\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: valget «-W %s» tillater ikke bruk av argumenter\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: valget «-W %s» krever et argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Vellykket" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Ingen treff" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ugyldig regulært uttrykk" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ugyldig sorteringstegn" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ugyldig tegnklassenavn" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Avsluttende omvendt skrÃ¥strek" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ugyldig bakover-referanse" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Ingen treff pÃ¥ «[» eller «[^»" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Ingen treff pÃ¥ «(» eller «\\(»" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Ingen treff pÃ¥ «\\{»" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ugyldig innhold i «\\{\\}»" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ugyldig slutt pÃ¥ rekkevidde" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Minnet er oppbrukt" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ugyldig foregÃ¥ende regulæruttrykk" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "For tidlig slutt pÃ¥ regulæruttrykk" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Regulæruttrykket er for stort" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Ingen treff pÃ¥ «)» eller «\\)»" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "ukjent reg.uttrykk-feil" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Ingen tidligere regulæruttrykk" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hei, verden" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Si «Hei, verden»." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "prøv Ã¥ søke utenfor fila" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "gzip-formatet støttes ikke" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop-fil er ødelagt" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz-fil er ødelagt, eller blokkvalgene støttes ikke" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "ugyldig arkitektur-avhengig ELF-magi" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VERDI]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Gi verdi til en miljøvariabel" + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Fjern en miljøvariabel." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Vis enheter eller files." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Sett inn en modul." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "fant ikke disken «%s»" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "prøv Ã¥ lese eller skrive utenfor partisjonen" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "ugyldig arkitektur-uavhengig ELF-magi" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "det finnes flere enheter enn grensa tillater" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "klarte ikke Ã¥ skrive til «%s». %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"device.map-oppføringa «%s» er ugyldig, og blir ignorert. Du bør korrigere " +"eller slette device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"enhetsnavnet «%s» i device.map er feil. Bruker %s i stedet. Bruk formen " +"[hfc]d[0-9]* (F.eks. «hd0» eller «cd»)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "klarte ikke Ã¥ Ã¥pne «%s». %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "DEVICE_NAME" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Velg rotenhet." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "bruk valgt FIL som enhetskart [standard=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "bruk valgt FIL som minnedisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "bruk GRUB-filer i mappa DIR [standard=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "skriv ut detaljerte meldinger" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "vent pÃ¥ en feilsøker" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "«%s» er et ukjent ekstraargument." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Feil ved tolking av kommandolinje-argumenter\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Kjør «gdb %s %d» og velg null for «ARGS.HOLD».\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: advarsel:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: feil:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "fila «%s» er for stor" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "ukjent filsystem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Klarte ikke Ã¥ skru av maskinen" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Klarte ikke Ã¥ avslutte" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "oppdaget overbelastning" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Avviser feilplassert partisjon (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "«%s» er en ukjent kommando.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Vis denne hjelpeteksten og avslutt." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Vis bruksanvisning for denne kommandoen og avslutt.." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "«%s» mangler obligatorisk valg" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "argumentet «%s» mÃ¥ oppgis i heltallsform" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"argumentet «%s» fikk en verdi, men aktuelt valg krever ikke et argument" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Skriv ut tilbakesporing." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB vet ikke hvordan den skal stanse denne maskinen ennÃ¥!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Standardtjener er ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "«%s» er et ugyldig fargeoppsett" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Omstart mislyktes" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LENGDE]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "VilkÃ¥rlige data fra heks-utskrift." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "enhetstre mÃ¥ legges ved (se kommandoen «devicetree»)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "ugyldig zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "ugyldig device tree" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Last inn Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Last inn initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Last inn DTB-fil." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"renbilde-kjerne støttes ikke. Bygg kjernen pÃ¥ nytt og slÃ¥ pÃ¥ valget " +"«CONFIG_(U)EFI_STUB»" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "klarte ikke Ã¥ hente FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "du mÃ¥ laste inn xen-hypervisor først" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Last inn xen-hypervisor." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Last inn xen-modul." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTS]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Start opp BIOS-basert system." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Last inn en annen oppstartslaster." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Vis utdata pÃ¥ alle skjermer." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Bruk seriellkonsoll" + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Spør etter filnavn Ã¥ starte pÃ¥ nytt fra." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Bruk CD-ROM som rot." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Start brukeroppsett-ruting." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "GÃ¥ inn i KDB ved oppstart." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Bruk GDB ekstern feilsøking i stedet for DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "SlÃ¥ av all oppstartsutskrift." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Vent pÃ¥ knappetrykk for hver utskriftslinje." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Bruk innebygd rotenhet." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Start opp i enkeltbrukermodus." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Start opp med detaljerte meldinger." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Ikke start pÃ¥ nytt, bare stans systemet." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Endre enhetsoppsett." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,SPEED]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SlÃ¥ av SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "SlÃ¥ av ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Ikke vis feilsøkingsmeldinger ved oppstart." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Start opp med feilsøkingsmeldinger." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Ikke vis vanlig utskrift (advarsler skrives fremdeles ut)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADDR|comUNIT][,SPEED]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "navn" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "type" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adr" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "størrelse" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Starter opp i blindemodus" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Last inn FreeBSD-kjerne." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Last inn OpenBSD-kjerne." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Last inn NetBSD-kjerne." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Last inn FreeBSD-miljø." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Last inn FreeBSD-kjernemodul." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Last inn NetBSD-kjernemodul." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Last inn NetBSD-kjernemodul (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Last inn FreeBSD-kjernemodul (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Last inn kOpenBSD-ramdisk." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Last inn en annen coreboot-«payload»" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "«ask» er et utgÃ¥tt parameter, og støttes ikke." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "%s er utgÃ¥tt. Bruk heller «set gfxpayload=%s» før Linux-kommandoen.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s er utgÃ¥tt. VGA-modus %d gjenkjennes ikke. Bruk heller «set " +"gfxpayload=BREDDExHØYDE[xDYBDE] før Linux-kommandoen.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FIL" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "«%s» er for stor" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Last inn FreeDOS kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Last inn NTLDR eller BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Overstyr gjetningsbasert kobling av Plan9-enheter." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBDEVICE=PLAN9DEVICE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL-ARG" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Last inn Plan9-kjerne." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Last inn et PXE-bilde." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Last inn Truecrypt-ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd er allerede lastet inn" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Last inn modul." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Trykk pÃ¥ en knapp for Ã¥ starte xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Last inn «device-properties»-dump." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Fant ikke FPSWA-driver" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "FPSWA-protokollen fant ikke grensesnittet" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Fant ingen FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA-revisjon: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FIL [ARG …]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Vis FPSWA-versjon." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "ADVARSEL: OS-et fÃ¥r ingen konsoll" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Last inn en multiboot 2-kjerne." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Last inn en multiboot 2-modul." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Last inn en multiboot-kjerne." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Last inn en multiboot-modul." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Bakgrunnsbilde-modus." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(strukket)|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Last inn XNU-bilde." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Last inn 64-bits XNU-bilde." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Last inn XNU-utvidelsespakke." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Last inn XNU-utvidelse." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "MAPPE [OSPakkePÃ¥krevet]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Last inn bibliotek over XNU-utvidelser." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Last inn XNU-ramdisk. Denne dukker opp i OS-et som «md0»." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Last inn et splash-bilde for XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Last inn et bilde av XNU i dvale." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADR1,MASKE1[,ADR2,MASKE2[,…]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Erklær minneomrÃ¥der som defekt (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "FRA[K|M|G] TIL[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Fjern minneregioner innenfor valgt omrÃ¥de." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "forventer fire argumenter" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "«%s» er et ukjent nettverksgrensesnitt" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "fant ingen DHCP-info" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "fant ingen DHCP-valg" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "fant ikke DHCP-valget %d" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "«%s» er en ukjent formatspesifikasjon av DHCP-valg" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "fant ingen nettverkskort" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "klarte ikke Ã¥ sette opp %s automatisk" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KORT]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "lag et automatisk bootp-oppsett" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR GRENSESNITT NUMMER BESKR" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"hent et DHCP-valg og lagre det i valgt VARiabel. Hvis VAR er «-», skrives " +"verdien ut." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "ingen DNS-tjener er satt opp" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "domenenavn-komponenten er for lang" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "fant ingen DNS-oppføring" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "fikk ingen DNS-svar" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "kun ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "kun ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "foretrekk ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "foretrekk ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "ugyldig argument" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRESSE DNSTJENER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Gjør oppslag i DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSTJENER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Legg til en DNS-tjener" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Fjern en DNS-tjener" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Vis DNS-tjenere" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "klarte ikke Ã¥ sende nettverkspakke" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "«interpret» støttes ikke" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "«alloc-mem» mislyktes" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "«free-mem» mislyktes" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "HTTP-responsen støttes ikke" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "Feil ved ustøttet HTTP-kode %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "tidsavbrudd ved Ã¥pning av «%s»" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "tidsavbrudd: klarte ikke Ã¥ gjøre oppslag pÃ¥ maskinvareadresse" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "adressen %s er ubrukelig" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "«%s» er en ukjent nettverksadresse" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "mÃ¥let ble ikke nÃ¥dd" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "oppdaget ruteløkke" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "fant ikke adressen" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "du kan ikke slette denne adressen" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Maskinvareadresse-typen %d støttes ikke\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Adressetypen %d støttes ikke\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "forventet tre argumenter" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "fant ikke kortet" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "midlertidig" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "%d er en ukjent adressetype\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "ingen tjener er valgt" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "tidsavbrudd ved lesing av «%s»" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "HURTIGNAVN KORT ADRESSE [MASKINVAREADRESSE]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Legg til en nettverksadresse" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KORT [MASKINVAREADRESSE]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Sett opp IPV6 automatisk" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "HURTIGNAVN" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Slett en nettverksadresse." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "HURTIGNAVN NETT [GRENSESNITT| gw PORTNER]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Legg til en nettverksrute." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Slett en nettverksrute." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "vis ruter pÃ¥ nettverket" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "vis nettverkskort" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "vis nettverksadresser" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "tilkobling ble nektet" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "tidsavbrudd ved tilkobling" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Skriv inn brukernavn:" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[BRUKERLISTE]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Sjekk om brukeren finnes i valgt BRUKERLISTE." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Følgende kommandoer er gyldige:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Følgende enheter er gyldige:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Følgende filer er gyldige:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Følgende partisjoner er gyldige:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Følgende argumenter er gyldige:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Følgende er gyldig:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Advarsel: syntaksfeil (skrÃ¥strek mangler) i «%s»\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Advarsel: «%s» er en ugyldig forgrunnsfarge\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Advarsel: «%s» er en ugyldig bakgrunnsfarge\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "MILJØVAR [MILJØVAR] …" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Eksporter variabler." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "søndag" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "mandag" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "tirsdag" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "onsdag" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "torsdag" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "fredag" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "lørdag" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "modulen er ikke lastet inn" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB versjon %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Avslutt nÃ¥r som helst med ESC." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Du kan redigere linjer i BASH-stil. Første ord pÃ¥ hver linje kan " +"autofullføres til kommandonavn med TAB. Andre ord kan TAB-es til Ã¥ fullføre " +"enhets- eller filnavn. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Tøm skjermen." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Bruk normalmodus." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Avslutt normalmodus." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Trykk pÃ¥ en tast for Ã¥ fortsette …" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Starter opp «%s»" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Kjører reserveoppføring «%s»" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Klarte hverken Ã¥ starte opp standard- eller reserveoppføring.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Starter opp en kommandoliste" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Du kan redigere dette skjermbildet i forenklet Emacs-stil. Bruk TAB for Ã¥ " +"vise mulige autofullføringer av ord. Trykk Ctrl-X (evt. F10) for Ã¥ starte " +"opp, Ctrl-C (evt. F2) for kommandolinje eller ESC for Ã¥ forkaste endringer " +"og gÃ¥ tilbake til GRUB-menyen." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Bruk %C og %C for Ã¥ velge oppføring." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partisjon %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Enhet %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Fikk ikke tilgang til filsystemet" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Filsystem-type %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etikett «%s»" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Sist endret %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Fant ingen kjente filsystemer" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partisjonen starter ved %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sektorstørrelse %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Ukjent total størrelse" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Total størrelse %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MER--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "klarte ikke Ã¥ Ã¥pne oppsettsfila «%s». %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "plattformen din støtter ingen kjente komprimeringsmetoder" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "plattformen din støtter ingen IEEE1275-rutiner" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "plattformen din støtter ingen EFI-rutiner" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "plattformen din støtter ingen SGI-rutiner" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" +"operativsystemet ditt har, sÃ¥ langt GRUB vet, ingen tilgjengelig " +"vilkÃ¥rlighetsgenerator" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Klarte ikke Ã¥ lage «device-mapper»-tre" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "klarte ikke Ã¥ montere det krypterte volumet «%s». %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "klarte ikke Ã¥ Ã¥pne geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "fant ikke geli-forbruker" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "klarte ikke Ã¥ hente geli-UUID" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "fant ikke «part»-klasse i geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "uordnet enhetsstørrelse" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "prøver Ã¥ lese kjernebildet «%s» fra GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "prøver Ã¥ lese kjernebildet «%s» fra GRUB igjen" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "klarte ikke Ã¥ lese «%s» skikkelig" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "klarte ikke Ã¥ lese kjernebildets sektorer" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "klarte ikke Ã¥ hente «translator»-kommandolinje for stien «%s». %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "stien «%s» har en tom «translator»-kommandolinje" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"«translator»-kommando «%s» for stien «%s» inneholder ord som ikke er gyldige " +"valg (minst «%s» og «%s»)" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"«translator»-kommando «%s» for stien «%s» inneholder kun valg (finner ikke " +"enhetsdelen av linja)" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Lagringsinformasjon for «%s» inneholder ikke type" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "«%s» er ikke en lokal disk" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Lagringsinformasjon for «%s» tilsier hverken ren partisjon eller ren disk" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "klarte ikke Ã¥ hente blokkeringslister. %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "blokkstørrelse kan ikke deles pÃ¥ 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "ugyldig null-blokkstørrelse" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "klarte ikke Ã¥ hente blokklister" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION-feil: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "RAID-versjon %d støttes ikke.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO-feil: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO-feil: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Klarte ikke Ã¥ Ã¥pne strøm fra %s. %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "RAID-enheten «%s» er av ukjent type" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "Fant ikke «obppath» i foreldermapper av «%s». Ingen IEEE1275-navn" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "fant ikke fullstendig sti til «%s»" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "enhetstype %s er ukjent" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Bruk: %s ENHET\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Klarte ikke Ã¥ kopiere: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Klarte ikke Ã¥ lage datarør: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "klarte ikke Ã¥ gjenopprette opprinnelig mappe" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "klarte ikke Ã¥ hente statistikk om «%s». %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "klarte ikke Ã¥ lage midlertidig fil: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "klarte ikke Ã¥ lage midlertidig mappe: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"fant ikke IEEE1275-enhetssti til %s.\n" +"Du mÃ¥ gi variabelen «boot-device» en verdi manuelt" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: ikke funnet" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"«nvsetenv» mislyktes. \n" +"Du mÃ¥ gi variabelen «boot-device» en verdi manuelt. Skriv følgende ved " +"IEEE1275-ledeteksten:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" +"Du mÃ¥ gi verdier til variablene «SystemPartition» og «OSLoader» manuelt." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "ingen «/» i fullstendig filnavn" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() mislyktes" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "klarte ikke Ã¥ hente vilkÃ¥rlighetsdata" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Manger tilstrekkelige privilegier for Ã¥ bruke fastvare. Bruker BIOS-modus" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "ingen EFI-rutiner er tilgjengelig i BIOS-modus" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "uforventet EFI-feil" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Fant ingen ledig BootNNNN-plass" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"denne GPT-partisjonsetiketten mangler BIOS-oppstartspartisjon. Innebygging " +"er ikke mulig" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "BIOS-oppstartspartisjonen er for liten. Innebygging er ikke mulig" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sektor %llu brukes allerede av RAID-kontroller «%s», og blir unngÃ¥tt. Du bør " +"be fabrikanten om Ã¥ ikke lagre data i oppstartsomrÃ¥det, ettersom dette fører " +"til problemer" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sektor %llu brukes allerede av programmet «%s», og blir unngÃ¥tt. Dette " +"programmet kan forÃ¥rsake problemer med oppstart og/eller annet senere. Du " +"bør be programutviklerne om Ã¥ ikke lagre data i oppstartsomrÃ¥det, ettersom " +"dette fører til problemer" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"innebyggingsomrÃ¥det brukes av annen programvare, og det er ikke nok plass " +"til core.img. Slik programvare prøver ofte Ã¥ lagre data pÃ¥ en mÃ¥te som gjør " +"at du ikke oppdager det. Du oppfordres til Ã¥ undersøke hva som ligger pÃ¥ " +"omrÃ¥det" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"denne msdos-partisjonsetiketten mangler gap etter MBR-omrÃ¥det. Innebygging " +"er ikke mulig" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"innebyggingsomrÃ¥det ditt er uvanlig smÃ¥tt, og har ikke plass til core.img." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Gjør partisjon aktiv" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "ikke en primærpartisjon" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partisjon %d er nÃ¥ aktiv. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Fjernet «active»-flagg pÃ¥ %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Endre partisjonstype" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "SlÃ¥ pÃ¥ «hidden»-flagg under partisjonstype" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "0x%x er en ugyldig partisjonstype" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Velger 0x%x som partisjonstype\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "du kan ikke bryte 0 sløyfer" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "dette finnes ikke i funksjonen" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "«%s» er et ugyldig variabelnavn" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "uforventet slutt pÃ¥ fil" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "GÃ¥ ut av løkker" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Fortsett løkker" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Endre posisjonsparametre" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VERDI] …" + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Velg posisjonsparametre." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "GÃ¥ ut av en funksjon." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FIL" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Last inn bakgrunnsbilde for aktiv terminal." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COLOR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Velg bakgrunnsfarge for aktiv terminal." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Vis CBMEM-konsollinnhold" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Velg seriellenhet." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Velg seriellport-adresse." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Velg seriellport-hastighet." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Velg seriellport-ordlengde." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Velg seriellport-paritet." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Velg seriellport-stoppebiter." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Velg frekvens." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "SlÃ¥ pÃ¥/av RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "fant ikke seriellporten «%s»" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "seriellport-flytkontrollen støttes ikke" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[VALG …]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Sett opp seriellport." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "«%s» er en ukjent terminfo-type" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "visuelt sortert UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Ukjent koding" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Gjeldende terminfo-typer:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminalen bruker kun ASCII [standard]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminalen bruker logisk sortert UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminalen bruker visuelt sortert UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminalen har spesifisert størrelse." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "BREDDExHØYDE." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "feilaktig spesifikasjon av terminalstørrelse" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "terminal %s finnes ikke, eller hÃ¥ndteres ikke av terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g BxH] TERM [TYPE]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Velg terminfo-type for TERM med TYPE.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "SKriv ut og kjør blokkargument." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "punktgrafikk-fila «%s» er av en type som ikke støttes" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE-info: versjon: %d.%d OEM-programvare-revisjon: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " minne totalt: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "fant ingen passende videomodus" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "ingen tilgang" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULER" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "last inn valgte MODULER pÃ¥ forhÃ¥nd" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" +"bare installer valgte MODULER og ting de er avhengige av (standard=alle)" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEMAER" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "installer TEMAER (standard=%s)" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "SKRIFTTYPER" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "installer SKRIFTTYPER (standard=%s)" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "REGIONER" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "bare installer valgte REGIONER (standard=alle)" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "komprimer GRUB-filer (valgfritt)" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "velg komprimeringsmetoden som skal brukes pÃ¥ kjernebildet" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "use images and modules under DIR [default=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "bruk oversettelser i valgt mappe (DIR) (standard=%s)" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "bruk temaer i valgt mappe (DIR) (standard=%s)" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "bruk valgt FIL som offentlig nøkkel for signaturkontroll" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "klarte ikke Ã¥ gi fila %s det nye navnet %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "disken finnes ikke, sÃ¥ partisjonsenheten %s brukes som reserve" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Kommandoer:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Lag en tom miljø-blokkfil." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Vis gjeldende variabler." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAVN=VERDI …]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Velg («set») verdier for variabler." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAVN …]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Fjern variabler." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Valg:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Du mÃ¥ velge minst én kommando.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FILNAVN KOMMANDO" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Verktøy for Ã¥ redigere miljøblokk." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Hvis FILNAVN er «-», brukes standardverdien %s.\n" +"\n" +"Det finnes ingen «delete»-kommando. Bruk «rm %s» hvis du\n" +"vil slette hele miljøblokka." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "ugyldig miljøblokk" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "%s er et gyldig parameter" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "miljøblokka er for liten" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "lesefeil pÃ¥ disken ved posisjon %lld, lengde %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "%lld er en ugyldig ignoreringsverdi" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "lesefeil ved posisjon %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "klarte ikke Ã¥ Ã¥pne OS-fila «%s»: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "klarte ikke Ã¥ skrive til standard utkanal: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "sammenlikningsfeil ved posisjon %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Feil ved Ã¥pning av OS-fila %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "«loopback»-kommando mislyktes: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "«cryptomount»-kommando mislyktes: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "klarte ikke Ã¥ hente UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls STI" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Vis filer pÃ¥ valgt STI." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FIL LOKAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopier FIL til valgt LOKAL fil." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FIL" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Kopier valgt FIL til standardutdata." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FIL LOKAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Sammenlikn FIL med valgt LOKAL fil." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FIL" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Vis innhold i valgt FIL i heksadesimal form." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FIL" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Beregn crc32-kontrollsum av valgt FIL." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FIL" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Vis blokkliste av valgt FIL." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid ENHET" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Lag XNU-UUID for valgt enhet." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Hopp over N byte i utdatafil." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "HÃ¥ndter N antall byte i utdatafil." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Velg antall inndatafiler." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Gi miljøvariabelen for feilsøking («debug») en verdi." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Monter krypterte enheter." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FIL|ledetekst" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Last inn zfs-krypteringsnøkkel." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Pakk ut data." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Ugyldig diskantall.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Diskantall mÃ¥ komme før diskliste.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Ingen kommando er gitt.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Kommandoen mangler parametre.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "%s er en ugyldig kommando.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "BILDE-STI KOMMANDOER" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Feilsøkingsverktøy for filsystem-driver." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "velg inndata-filnavn for 32-bit-del." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "velg inndata-filnavn for 64-bit-del." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "velg utdata-filnavn. Standard er STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[VALG]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Lim 32-bit- og 64-bit-binærfil sammen til en universell Apple-fil." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Inndatafil mangler\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "klarte ikke Ã¥ kopiere «%s» til «%s». %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "klarte ikke Ã¥ komprimere «%s» til «%s»" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "klarte ikke Ã¥ Ã¥pne mappa «%s». %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "klarte ikke Ã¥ slette «%s». %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage er installert uten XZ-støtte" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "%s er et ukjent komprimeringsformat" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "«%s» er en ukjent komprimeringsmetode" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "mÃ¥lformat %s er ukjent" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "fant ikke regionen «%s»" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s finnes ikke. Velg «--target» (mÃ¥l) eller «--directory» (mappe)" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "«%s» er en ugyldig modinfo-fil" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "«%s-%s» er en ukjent plattform" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Flere enn én installasjonsenhet?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "installer GRUB-bilder under mappa DIR/%s i stedet for mappa %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "MÅL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"installer GRUB pÃ¥ valgt MÅLplattform (standard=%s). Tilgjengelige mÃ¥l: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"la enheten starte opp i diskettmodus (standard for fdX-enheter). Dette " +"fungerer ikke med alle BIOS-er." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "slett enhetskart hvis det finnes allerede" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "ikke stans installasjonen selv om problemer oppstÃ¥r" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "bruk identifikasjonsfil selv hvis UUID er tilgjengelig" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"diskmoduler som skal brukes (biosdisk eller innebygd). Dette valget er bare " +"tilgjengelig pÃ¥ BIOS-mÃ¥l." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"ikke oppdater NVRAM-variablene «boot-device» og «Boot*». Dette valget er " +"bare tilgjengelig pÃ¥ EFI- og IEEE1275-mÃ¥l." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "ikke undersøk filsystemer pÃ¥ valgt ENHET" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "ikke installer oppstartssektor" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Ikke bruk reed-solomon-koder ved innbygging av core.img. Dette valget er " +"bare tilgjengelig pÃ¥ x86-BIOS-mÃ¥l." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"installasjonsenheten kan fjernes. Dette valget er bare tilgjengelig for EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"oppstartslasterens ID. Dette valget er bare tilgjengelig pÃ¥ EFI og Mac." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "bruk valgt MAPPE som rot av EFI-systempartisjon." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "bruk valgt MAPPE til PPC MAC-installasjon." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "bruk valgt FIL som skrifttype pÃ¥ etikett" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "bruk valgt FARGE pÃ¥ etikett" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "bruk valgt FARGE pÃ¥ etikett-forgrunnen" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "bruk STRENG som produktversjon" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[VALG] [INSTALLASJONSENHET]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Installer GRUB pÃ¥ lagringsenheten." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALLASJONSENHETen mÃ¥ være et enhetsnavn fra systemet.\n" +"Bruk %s for Ã¥ kopiere GRUB-bilder til %s. Dette installerer ogsÃ¥ GRUB i " +"oppstartssektoren pÃ¥ enkelte plattformer." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "enheten %s er definert flere ganger pÃ¥ enhetskartet %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Klarte ikke Ã¥ finne ut hvilken plattform du bruker. Bruk «--target»." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installerer for plattformen %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "du har ikke valgt installasjonsenhet" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "fant ikke EFI-mappe" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "fant ingen enhet for %s (er /dev montert?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "fant ingen GRUB-enhet for %s. Sjekk fila «device.map»" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s ser ikke ut som en EFI-partisjon" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Du har funnet en programfeil" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "filsystemet pÃ¥ %s er hverken HFS eller HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"du forsøkte Ã¥ installere pÃ¥ kryptert disk uten Ã¥ slÃ¥ pÃ¥ cryptodisk først. " +"Endre eller legg til «%s» i fila «%s»" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Klarte ikke Ã¥ opprette fil: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"fant ingen hint om plattformen du bruker. Redusert ytelse kan forventes" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "KJØRER IKKE:" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "valgt partisjon er ikke en PReP-partisjon" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "klarte ikke Ã¥ kopiere Grub til PReP-partisjonen" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"PReP-partisjonen er ikke tom. Kjør dd hvis du er sikker pÃ¥ at du vil bruke " +"den: «%s»" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Du har ikke oppgitt ID pÃ¥ EFI-oppstartslasteren." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "ADVARSEL: ingen plattform-spesifikk installasjon er utført" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installasjonen er ferdig. Ingen programfeil oppstod." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "kontroller om programmet fungerer med x86-baserte mac-maskiner" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "kontroller om programmet fungerer med ppc-baserte mac-maskiner" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Ingen sti eller enhet er valgt.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc STI|--x86 FIL" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "ForhÃ¥ndssjekk i Mac-stil pÃ¥ HFS eller HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Bruk: %s [INNFIL [UTFIL]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype-feil %d oppstod ved innlasting av tegnet 0x%x for U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (medial)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (lengst til venstre)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (lengst til høyre)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Erstatninga er utenfor rekkevidde (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "«lookup» %d er utenfor rekkevidde\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Erstatningstype %d støttes ikke\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Erstaningsspesifikasjon %d støttes ikke\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Dekningsspesifikasjon %d støttes ikke\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "ADVARSEL: funksjonsparametre %x for skrifttype støttes ikke\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "lagre utdata i valgt FIL (pÃ¥krevet)" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "velg variantindeks («face») for skrifttype " + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "FRA-TIL[,FRA-TIL]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "velg skriftrekkevidde" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "velg navn pÃ¥ skriftfamilie" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "STØRRELSE" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "velg skriftstørrelse" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "velg underlengde for skrifttype" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "velg overlengde for skrifttype" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "konverter til fet skrift" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "tving auto-hint" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "slÃ¥ av hinting" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignorer punktgrafikk ved innlasting" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ugyldig skriftrekkevidde" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[VALG] SKRIFTFILER" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Konverter vanlige skrift-filformater til PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "du mÃ¥ velge utdatafil" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType mislyktes" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "klarte ikke Ã¥ Ã¥pne %s, indeks %d: feil %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "klarte ikke Ã¥ velge skriftstørrelse for %dx%d: Freetype-feil %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "velg prefiks-mappe" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"legg inn valgt FIL som et memdisk-bilde\n" +"Dette impliserer valget «-p (memdisk)/boot/grub», og overstyrer evt. " +"tidligere prefiks. Dette prefikset kan i seg selv overstyres av senere valg" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "legg inn valgt FIL som et tidlig oppsett" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "legg til NOTE-segment for CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "skriv ut et generert bilde til FIL (standard=stdout)" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "lag et bilde i valgt FORMAT" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "tilgjengelige formater:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "%s er et ukjent mÃ¥lformat\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[VALG] … [MODULER]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Lag et bilde av GRUB som maskinen kan starte opp." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Du har ikke valgt mÃ¥lformat (bruk valget «-O»)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Du har ikke valgt prefiks (bruk valget «-p»)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"«%s» er satt sammen feil. Første adresse er «0x%llx» i stedet for «0x%llx». " +"Kanskje du har funnet en ld.gold-programfeil?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "velg inndata-filnavn. Standard er STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "%s er et ukjent tastaturknapp-navn\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "0x%02x er en ukjent tastatur-knappkode\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "FEIL: fant ingen gyldig tastaturutforming. Sjekk inndata.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Lag en GRUB-tastaturutforming basert pÃ¥ en som Linux-konsollen bruker." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "TFTP-tjenerens rotmappe" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relativ undermappe pÃ¥ nettverkstjener" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Forbereder GRUB-bilder for nettverksoppstart pÃ¥ net_directory/subdir og " +"legger til grunn at net_directory er TFTP-rotmappe." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "plattform %s støttes ikke" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Nettverksoppstart-mappe for %s er opprettet. Be aktuell DHCP-tjener om Ã¥ " +"peke pÃ¥ %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Antall PBKDF2-gjentakelser" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Lengde pÃ¥ generert nøkkel" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Lengde pÃ¥ salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Lag PBKDF2-nøkkelsum av passord." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "klarte ikke Ã¥ lese passord" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Skriv inn passordet pÃ¥ nytt:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "passordene er ulike" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "klarte ikke Ã¥ hente vilkÃ¥rlighetsdata til salting" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "kryptografi-feil nummer %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDF2-summen av passordet ditt er %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Ingen sti er valgt.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "STI" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Konverter et system-filnavn til et GRUB-filnavn." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "lagre ROM-bilder i valgt MAPPE (valgfritt)" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "bruk FIL som xorriso (valgfritt)" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "bruk STRENG som produktnavn" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"slÃ¥ pÃ¥ sparc-oppstart. Dette slÃ¥r av HFS+, APM, ARCS oppstart av i386-pc som " +"diskbilde" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"slÃ¥ pÃ¥ ARCS-oppstart (for store mips-maskiner, stort sett SGI). Dette slÃ¥r " +"av HFS+, APM, sparc64 og oppstart av i386-pc som diskbilde" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "Lag oppstartbart GRUB-bilde for CD-ROM, disk, minnepenn og diskett." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Lager et CD-/USB-/diskettbilde som kan starte maskinen. Argumenter - " +"bortsett fra valg som gjelder dette programmet - videresendes til xorriso, " +"og bestemmer kildefiler, kildemapper og andre mkisofs-valg (se utskriften av " +"«%s»)." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Valget «--» bytter til xorrisos egen kommandomodus." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Send e-post til for Ã¥ fÃ¥ hjelp til xorriso." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[VALG] KILDE …" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "slÃ¥r pÃ¥ støtte for %s …" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Din versjon av xorriso støtter ikke «--grub2-boot-info», og enkelte " +"funksjoner er slÃ¥tt av. Bruk helst 1.2.9 eller nyere versjon av xorriso." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Din versjon av xorriso støtter ikke «--grub2-boot-info». Kjernebildet er for " +"stort, sÃ¥ du kan ikke starte opp dette som en disk. Bruk helst 1.2.9 eller " +"nyere versjon av xorriso." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "Lag et " + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "Graft-syntaks (f.eks. /boot/grub/grub.cfg=./grub.cfg) kan brukes" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "BILDE1 [BILDE2 …] MONTERINGSPUNKT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "bilde og monteringspunkt er pÃ¥krevet" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "argumentet er ikke en sti, men en systemenhet" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "skill utskriftselementer ved Ã¥ bruk ASCII NUL-tegn" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[standard=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "skriv ut MÅL" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "tilgjengelige mÃ¥l:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[VALG] … [STI|ENHET]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Finn enhetsinformasjon ut i fra en gitt sti (eller, ved bruk av «-d», en " +"enhet)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "les tekst fra valgt FIL." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "bruk valgt tekstFARGE" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "bruk valgt bakgrunnsFARGE" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "velg etikett" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "bruk valgt skriftFIL (PF2) som skrifttype." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Bruk Apple-«.disk_label»." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Argumenter mangler\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[STI]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Kontroller at oppsettsfila for GRUB-skript ikke inneholder syntaksfeil." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntaksfeil ved linje %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Skriptet «%s» inneholder ingen kommandoer, og gir ingen effekt\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "bruk valgt FIL som oppstartsbilde (standard: %s)" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "bruk valgt FIL som kjernebilde (standard: %s)" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Ingen enhet er valgt.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Velg hvilken ENHET bilder skal startes opp fra.\n" +"\n" +"Du bør vanligvis ikke kjøre dette programmet direkte. Bruk heller «grub-" +"install»." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "ENHET mÃ¥ være en OS-enhet (f.eks. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "«%s» er en ugyldig enhet.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "rotmappa, slik den blir vist ved kjøring (standard: «/»)." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"gjeldende syslinux-mappe slik den ser ut ved kjøring (standard er " +"inndatafilas foreldermappe)." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "skriv utskrift til valgt FIL (standard: stdout)." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Konverter syslinux-oppsett til GRUB-oppsett." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "du kan ikke komprimere kjernebildet" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "komprimeringsmetode %d er ukjent" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Utpakkeren er for stor" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "kjernebildet er for stort (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "kjernebildet er for stort (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "størrelsen pÃ¥ diskboot.img skal være %u byte" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img samsvarer ikke med den kjente, brukbare versjonen. Du fortsetter " +"nÃ¥ pÃ¥ egen risiko" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "fastvarebildet er for stort" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ugyldig linjeformat: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "første sektor i kjernefila er ikke stilt opp som en sektor" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "fant data i kjernefila som ikke er stilt opp som sektor(er)" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "sektorene i kjernefila er for fragmenterte" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "størrelsen pÃ¥ «%s» er ikke %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "«%s» er for liten" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Prøver Ã¥ installere GRUB pÃ¥ en disk som enten har flere partisjonsetiketter " +"eller bÃ¥de etikett og filsystem. Dette støttes ikke enda." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "fant ingen filsystem(er) i %s. Kan derfor ikke utføre sikkerhetssjekk" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s ser ut til Ã¥ inneholde et %s-filsystem som ikke reserverer plass til " +"oppstart i DOS-stil. FILSYSTEMET KAN BLI ØDELAGT hvis du kjører grub-setup " +"her (du kan fjerne denne sperra for egen regning ved Ã¥ bruke valget «--skip-" +"fs-probe»)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s ser ut til Ã¥ inneholde et %s-partisjonskart som ikke reserverer plass til " +"oppstart i DOS-stil. FILSYSTEMET KAN BLI ØDELAGT hvis du kjører grub-setup " +"her (du kan fjerne denne sperra for egen regning ved Ã¥ bruke valget «--skip-" +"fs-probe»)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s ser ut til Ã¥ inneholde et %s-partisjonskart og LDM. Dette er kjent som en " +"farlig kombinasjon. FILSYSTEMET KAN BLI ØDELAGT hvis du kjører grub-setup " +"her (du kan fjerne denne sperra for egen regning ved Ã¥ bruke valget «--skip-" +"fs-probe»)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Prøver Ã¥ installere GRUB pÃ¥ en partisjonsløs disk eller direkte pÃ¥ en " +"partisjon. Dette er IKKE EN GOD IDÉ." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Prøver Ã¥ installere GRUB pÃ¥ en disk med flere partisjonsetiketter. Dette " +"støtter ikke ennÃ¥." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partisjonsstilen «%s» støtter ikke innebygging" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Filsystemet «%s» støtter ikke innebygging" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"InnebyggingsomrÃ¥det ditt er uvanlig trangt, og har ikke plass til «core.img»." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "kjernebildet mangler avslutningsdel" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img-versjonene samsvarer ikke" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"innebygging er ikke mulig. Samtidig er det pÃ¥krevet for Ã¥ bruke RAID og LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "klarte ikke Ã¥ finne ut hva slags filsystem som ligger pÃ¥ %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "filsystemet «%s» støtter ikke blokklister" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"innebygging er ikke mulig. Samtidig er det pÃ¥krevet for Ã¥ installere pÃ¥ " +"tvers av disker" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Innebygging er ikke mulig. GRUB kan bare installeres pÃ¥ dette oppsettet ved " +"bruk av blokklister, som frarÃ¥des fordi de er UPÅLITELIGE." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "fortsetter ikke med blokklister" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "blokklistene er ugyldige" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "blokklistene er ufullstendige" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Bruk: %s -o UTDATA CKBMAP-ARGUMENTER …\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Lag tastatur-utformingsfil for GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "skriv ut denne meldinga og avslutt" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "skriv ut versjon og avslutt" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s lager en tastaturutforming for GRUB ved hjelp av ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Rapporter feil til ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: valget «%s» krever et argument\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Bruk: %s [VALG]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Lag en grub-oppsettsfil" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "skriv ut generert oppsett til valgt FIL (standard: stdout)" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "«%s» er et ukjent valg\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Du mÃ¥ kjøre dette programmet som rotbruker\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "Fant ikke %s.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Lager grub-oppsettsfil …" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Generert GRUB-oppsettsfil inneholder syntaksfeil.\n" +"Kontroller at grunnlaget i /etc/default/grub og /etc/grub.d/*\n" +"ikke innheholder feil, og send inn en feilrapport\n" +"med %s vedlagt hvis du fremdeles har problemer." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "ferdig" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Advarsel:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Bruk: %s [VALG] MENYOPPFØRING\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Velg standardoppføring pÃ¥ GRUB-oppstartsmenyen (gjelder kun for neste " +"oppstart)." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "forvent at GRUB-bilder ligger i mappa DIR/%s i stedet for %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENYOPPFØRING er enten er nummer, en tittel eller en menyoppførings-ID. Vær " +"oppmerksom pÃ¥ at\n" +"undermeny-komponenter mÃ¥ oppgis ved valg av oppføringer pÃ¥ undermenyer.\n" +"Titler holdes adskilt ved Ã¥ bruke større-enn-tegnet (>) uten ekstra " +"mellomrom.\n" +"Enkelte tegn (som «>») kan kreve at du bruker skiftetegn, avhengig av " +"skallet ditt. Du finner ytterligere informasjon om dette i\n" +"GRUB-bruksanvisninga, under delen om «default»-kommandoen. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Flere enn én menyoppføring?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Du har ikke valgt menyoppføring." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Velg standardoppføring pÃ¥ GRUB-oppstartsmenyen." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Dette krever at du gir en verdi til «GRUB_DEFAULT=» i fila %s/default/grub." +"\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"MENYOPPFØRING er enten et nummer, en tittel eller en menyoppførings-ID." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Ba om seriell terminal, men «GRUB_SERIAL_COMMAND» er ikke oppgitt. Bruker " +"derfor standardparametre." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Fant tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Fant bakgrunn: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Bildeformatet støttes ikke" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Du kan ikke lenger gi «GRUB_TIMEOUT» en annen verdi enn null nÃ¥r " +"«GRUB_HIDDEN_TIMEOUT» har en verdi." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Fant GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Fant Hurd-modul: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Fant noen Hurd-greier, men ikke nok til Ã¥ starte opp." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, med Hurd %s (gjenopprettelsesmodus)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, med Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Ikke gi GRUB_DEFAULT det gamle tittelformatet «%s». Bruk «%s» med eldre " +"versjoner enn 2.00, og «%s» med versjon 2.00 eller nyere" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Laster inn GNU Mach …" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Laster inn Hurd …" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Avanserte valg for %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Laster inn Illumos-kjerne …" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, med kFreeBSD %s (gjenopprettelsesmodus)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, med kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Laster inn FreeBSD-kjerne %s …" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Fant FreeBSD-kjerne: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Fant mappe med kjernemoduler: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, med Linux %s (gjenopprettelsesmodus)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, med Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Laster inn Linux %s …" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Laster inn minnedisk for oppstart …" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Fant linux-bilde: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Fant initrd-bilde: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, med kjerne %s (via %s, gjenopprettelsesmodus)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, med kjerne %s (via %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Fant NetBSD-kjerne: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (oppstartslaster)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (oppstartslaster)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Fant %s pÃ¥ %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(pÃ¥ %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, med Xen %s og Linux %s (gjenopprettelsesmodus)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, med Xen %s og Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, med Xen hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Laster inn Xen %s …" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hypervisor, versjon %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Avanserte valg for %s (med Xen hypervisor)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Fant %s pÃ¥ %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s støttes ikke av grub-mkconfig ennÃ¥.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Erstatningsvalg 0x%x støttes ikke\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "0x%x (%s) er en ukjent gsub-skrifttypefunksjon\n" diff --git a/po/nl.gmo b/po/nl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..a2503af8700746db4cba0e1fa53fad3b879e66de GIT binary patch literal 129410 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í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%0AVWI5w zBk*n}J>o~rO%^5i{~9}&)+mA~3inTOnU#Xu1ec9NhuTqnHMnF4A7NOqi)?L3tXn!TGmL zS_x;QaKZe)j%->5eXj+>%IAUz26p&NPCLf>TJe1}U7b2^nDLpW+7H*Ug%E6pUX(Og zNV9<9bnS7Gvm(S5P%6v9{ZhwI6)bXZd>eD^`bPZfu^o4QVcF$6N&vuo;M_yZS5y9_ zggHAYqB~ZzM{zF-KuG?s+Sn~XUj5E{eBLXiaL{I~5;fBPz9^Qlg=aUo6==zH@arun zJN5xw<@M)FBAg0T(O6!s?`snffZfA$LPDB+^}5f>a1dSO8ECNyOs6TW)b4N+kMv!A z^DVafkv8R>cr>g8cOM#jA*b~lruEP*nstJ`%uIh z;irWanV^Kd%(H2%0^Gx0*T%Nv9Cxr*zs~X`p}KhtYok_t?-O5s8N8{dIL!cgb-+6nBB(>2v&YGsNGJ`O4eqo1 z8z~nulJ^&|KZ|!4>7M(ro1SioY2Zbf*8un{b_g7hZ@ zY8AD0vJsm#DOpz5u!<)3dI$a}7O-1cD0xflK6+&Tv}i{-NyBTyxQc!+7j%o!llQ#c z8YWon5T)79!H0J@zlWHN(9Hfyj7NA6qo$}MDGk%hzx~hs9w4q7$^7HG9xP+{2<;k| z&QmT|_`O;bya>h!A<5|yy3xUmyp4>S@$(a^uW@y(H?duBdK?}ZBEkT^s2D*4O@-(1 z#tx#szp9Yp^E~7U&y;#uDb6H&ay0$QW{sRSL3Qzz5 literal 0 HcmV?d00001 diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 000000000..78b6ac145 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,7526 @@ +# Dutch translations for the GNU boot loader GRUB. +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# « Pli helpas guto da feliĉo, ol barelo da saĝo. » +# +# Erwin Poeze , 2009, 2010. +# Benno Schulenberg , 2010, 2011, 2012, 2013, 2017. +msgid "" +msgstr "" +"Project-Id-Version: grub-2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-04 19:27+0100\n" +"Last-Translator: Benno Schulenberg \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "niet-ondersteunde snelheid van seriële poort" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "niet-ondersteunde pariteit van seriële poort" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "niet-ondersteund aantal stopbits van seriële poort" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "niet-ondersteunde woordlengte van seriële poort" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Host-tabellen die bestaan uit een kommagescheiden lijst niet laden." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Alleen tabellen die bestaan uit een kommagescheiden lijst laden." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Versie-1-tabellen naar beheersysteem exporteren." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Versie-2- en versie-3-tabellen naar beheersysteem exporteren." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "OEMID van RSDP, XSDT en RSDT instellen." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "OEMTABLE-ID van RSDP, XSDT en RSDT instellen." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "OEMTABLE-revisie van RSDP, XSDT en RSDT instellen." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Het 'creator'-veld van RSDP, XSDT en RSDT instellen." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "De 'creator'-revisie van RSDP, XSDT en RSDT instellen." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"EBDA niet bijwerken. Dit kan storingen en vastlopers op sommige BIOS'en " +"verhelpen, maar maakt het functieloos bij besturingssystemen die geen RSDP " +"van GRUB ontvangen." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "voortijdig einde van bestand %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABEL1,TABEL2|--load-only=TABEL1,TABEL2] BESTAND1 " +"[BESTAND2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Host-ACPI-tabellen laden, en tabellen opgegeven via argumenten." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "fout: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "onvoldoende geheugen beschikbaar" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "kan '%s' niet lezen: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "uitschakeling via ACPI is mislukt" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Apparaten tonen." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "bestandsnaam werd verwacht" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "BESTAND" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Een blokkenlijst tonen." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "u dient eerst de kernel te laden" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Een besturingssysteem opstarten." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Er zijn geen opstart-statistieken beschikbaar\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Opstart-statistieken tonen." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Schijfcache-statistieken: treffers = %lu (%lu.%02lu%%), missers = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Er zijn geen schijfcache-statistieken beschikbaar\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Schijfcache-informatie ophalen." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "DOS-regeleinden (CR+LF) accepteren." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "De inhoud van een bestand tonen." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "twee argumenten werden verwacht" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Bestand '%s' vergelijken met '%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Bestanden verschillen in grootte: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Bestanden verschillen op positie %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "De bestanden zijn identiek.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "BESTAND1 BESTAND2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Twee bestanden vergelijken." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Nog een configuratiebestand laden." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Nog een configuratiebestand laden zonder de context te wijzigen." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Nog een configuratiebestand laden zonder de context te wijzigen, maar alleen " +"menu-items nemen." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Nog een configuratiebestand laden, maar alleen menu-items nemen." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[jaar-]maand-dag] [uur:minuut[:seconde]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "De huidige datum en tijd tonen/instellen." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Het laatste regeleinde niet weergeven." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Verwerking van 'backslash escapes' inschakelen." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] TEKENREEKS" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Een regel tekst tonen." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Herstarten naar instellingenmenu van firmware." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Videoprobleem oplossen." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM-image is aanwezig." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Kan ROM-gebied niet inschakelen." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"BIOS-achtige structuren aanmaken voor terugwaartse compatibiliteit met " +"bestaande beheersystemen." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS-DUMP [INT10-DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "BIOS-dump laden." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "TEKENREEKS..." + +# XXX add period? +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Argumenten evalueren als GRUB-opdrachten." + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Controleren of BESTAND als ongeprivilegieerde i386-PAE-Xen-gast-kernel " +"gestart kan worden" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Controleren of BESTAND als ongeprivilegieerde x86_64-Xen-gast-kernel gestart " +"kan worden" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Controleren of BESTAND als geprivilegieerde x86-Xen-gast-kernel gebruikt kan " +"worden" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Controleren of BESTAND als x86-multiboot-kernel gebruikt kan worden" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Controleren of BESTAND als x86-multiboot2-kernel gebruikt kan worden" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Controleren of BESTAND een ARM-Linux-bestand is" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Controleren of BESTAND een ARM64-Linux-bestand is" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Controleren of BESTAND een IA64-Linux-bestand is" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Controleren of BESTAND een MIPS-Linux-bestand is" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Controleren of BESTAND een MIPSEL-Linux-bestand is" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Controleren of BESTAND een SPARC64-Linux-bestand is" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Controleren of BESTAND een POWERPC-Linux-bestand is" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Controleren of BESTAND een x86-Linux-bestand is" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" +"Controleren of BESTAND een x86-Linux-bestand is dat het 32-bits-protocol " +"ondersteunt" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Controleren of BESTAND een x86-kFreeBSD-bestand is" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Controleren of BESTAND een i386-kFreeBSD-bestand is" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Controleren of BESTAND een x86_64-kFreeBSD-bestand is" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Controleren of BESTAND een x86-kNetBSD-bestand is" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Controleren of BESTAND een i386-kNetBSD-bestand is" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Controleren of BESTAND een x86_64-kNetBSD-bestand is" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Controleren of BESTAND een i386-EFI-bestand is" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Controleren of BESTAND een x86_64-EFI-bestand is" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Controleren of BESTAND een IA64-EFI-bestand is" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Controleren of BESTAND een ARM64-EFI-bestand is" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Controleren of BESTAND een ARM-EFI-bestand is" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Controleren of BESTAND een hiberfil.sys-bestand in slaaptoestand is" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Controleren of BESTAND een x86_64-XNU-bestand is (een Mac OS X-kernel)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Controleren of BESTAND een i386-XNU-bestand is (een Mac OS X-kernel)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Controleren of BESTAND een XNU-bestand (Mac OS X-kernel) in slaaptoestand is" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Controleren of BESTAND een BIOS-opstartsector is" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "onwaar" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPTIES BESTAND" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Controleert of BESTAND van het aangegeven type is." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "die partitie bestaat niet" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Nieuwe MBR is geschreven naar '%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "APPARAAT [PARTITIE[+/-[TYPE]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Hybride MBR van GPT-APPARAAT vullen. Opgegeven partities zullen onderdeel " +"zijn van de hybride MBR. Maximaal drie partities zijn toegestaan. TYPE is " +"een MBR-soort; + betekent dat de partitie actief is; slechts één partitie " +"kan actief zijn." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Stopt de computer. Deze opdracht werkt niet met alle firmware-" +"implementaties." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Te gebruiken hash." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" +"Hashes van bestanden controleren aan de hand van dit hash-lijstbestand." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Basismap voor hash-lijst." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "MAP" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Niet stoppen na de eerste fout." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Bestand decomprimeren vóór berekenen van controlesom." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LEESFOUT\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: NIET-OVEREENKOMENDE HASH\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c BESTAND [-p VOORVOEGSEL]] [BESTAND1 [BESTAND2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Hash-controlesom berekenen of controleren." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c BESTAND [-p VOORVOEGSEL]] [BESTAND1 [BESTAND2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Advanced Power Management instellen\n" +"(1=laag, ..., 254=hoog, 255=uit)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Energiemodus tonen." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "ATA-beveiligingsinstellingen bevriezen tot herstart." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "SMART-gezondheidstoestand tonen." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Automatic Acoustic Management instellen\n" +"(0=uit, 128=stil, ..., 254=snel)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Standby-wachttijd instellen\n" +"(0=uit, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Schijf in standby-toestand zetten." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Schijf in slaaptoestand zetten." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Schijfidentiteit en -instellingen tonen." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Onbewerkte inhoud van ATA IDENTIFY-sector tonen." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART in-/uitschakelen (1/0)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Geen meldingen tonen." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "één argument werd verwacht" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIES] SCHIJF" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA-schijfparameters tonen/instellen" + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Gebruik: " + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[PATROON ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Een hulptekst tonen." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Dit aantal bytes vanaf begin van bestand overslaan." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Dit aantal bytes lezen." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIES] BESTAND|APPARAAT" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Onbewerkte inhoud van bestand of geheugen tonen." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Onbewerkte inhoud van CMOS tonen." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Een bit testen op positie BYTE:BIT in CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Een bit wissen op positie BYTE:BIT in CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Een bit zetten op positie BYTE:BIT in CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Opstart-statistieken van coreboot tonen." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "De coreboot-tabellen tonen." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Controleren of de CPU 64-bits (\"lang\") ondersteunt (standaard)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Controleren of de CPU verlenging van het fysieke adres (PAE) ondersteunt." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Beschikbare CPU-functies achterhalen." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "De huidige verwijzingen tonen." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Alle verwijzingen op de standaardwaarden instellen." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Zowel directe als inverse verwijzingen uitvoeren." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Er zijn geen schijven herverwezen" + +# XXX should translation have length equal to original? +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "beheersyteemschijfnummer ------> GRUB-/BIOS-apparaat" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] GRUBAPPARAAT BEHEERSYSTEEMSCHIJF" + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "De BIOS-schijftoewijzingen beheren." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Geen APM gebruiken om de computer te stoppen." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Het systeem stoppen, zo mogelijk met APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "geen APM gevonden" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versie %u.%u\n" +"32-bit CS = 0x%x, lengte = 0x%x, positie = 0x%x\n" +"16-bit CS = 0x%x, lengte = 0x%x\n" +"DS = 0x%x, lengte = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bits beveiligde interface wordt ondersteund\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bits beveiligde interface wordt niet ondersteund\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bits beveiligde interface wordt ondersteund\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bits beveiligde interface wordt niet ondersteund\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "'CPU Idle' vertraagt de processor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "'CPU Idle' vertraagt de processor niet\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM is uitgeschakeld\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM is ingeschakeld\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM wordt niet gebruikt\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM wordt gebruikt\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "APM-informatie tonen." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "bestandsnaam of tempo plus tonen werden verwacht" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Ongeldig tempo in %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "bestand '%s' is niet gevonden" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "niet-herkend getal" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "BESTAND | TEMPO [HOOGTE1 DUUR1 [HOOGTE2 DUUR2] ...] " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Een deuntje afspelen." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "NumLock-modus instellen" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "CapsLock-modus instellen" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "ScrollLock-modus instellen" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "Insert-toetsmodus instellen" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "Pause-toetsmodus instellen" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "linker Shift indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "rechter Shift indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "SysRq-toets indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "NumLock-toets indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "CapsLock-toets indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "ScrollLock-toets indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "Insert-toets indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "linker Alt indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "rechter Alt indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "linker Ctrl indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "rechter Ctrl indrukken" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "LED-toestand niet bijwerken" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[TOETSAANSLAG1] [TOETSAANSLAG2 ...]" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Een reeks toetsaanslagen emuleren" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Typ 'go' om GRUB te hervatten." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Naar de IEEE1275-prompt terugkeren." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Ingelezen waarde in variabele VARNAAM opslaan." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAAM" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "POORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Een 8-bits waarde lezen uit POORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Een 16-bits waarde lezen uit POORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Een 32-bits waarde lezen uit POORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "POORT WAARDE [MASKER]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Deze 8-bits WAARDE schrijven naar POORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Deze 16-bits WAARDE schrijven naar POORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADRES WAARDE [MASKER]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Deze 32-bits WAARDE schrijven naar POORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "variabele '%s' is niet ingesteld" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Een toetsenbordindeling laden." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Shift-toets controleren." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Control-toets controleren." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Alt-toets controleren." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Toestand van toetsaanpasser controleren." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "kan opdracht '%s' niet vinden" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Voer wachtwoord in: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Een verouderde configuratie ontleden in dezelfde context" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Een verouderde configuratie ontleden in nieuwe context" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Een verouderde configuratie ontleden in dezelfde context, maar alleen menu-" +"items nemen" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Een verouderde configuratie ontleden in nieuwe context, maar alleen menu-" +"items nemen" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] BESTAND [ARGUMENT...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Een 'kernel'-opdracht van grub-legacy simuleren" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "BESTAND [ARGUMENT...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Een 'initrd'-opdracht van grub-legacy simuleren" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Een 'modulenounzip'-opdracht van grub-legacy simuleren" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] WACHTWOORD [BESTAND]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Een 'password'-opdracht van grub-legacy simuleren" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Een 'password'-opdracht van grub-legacy in menu-itemmodus simuleren" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Bestandsnaam opgeven." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Vingerafdrukcontrole van omgevingsbestand overslaan." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f BESTAND] [-s|--skip-sig] [TOE-TE-STANE-VARIABELENAAM...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Variabelen uit omgevingsblokbestand laden." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f BESTAND]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Variabelen uit omgevingsblokbestand tonen." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f BESTAND] VARIABELENAAM..." + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Variabelen in omgevingsblokbestand opslaan." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Een lijst met uitgebreidere informatie tonen." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Grootten in leesbare vorm weergeven." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Alle bestanden tonen." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Netwerkprotocollen:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [BESTAND ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Apparaten en bestanden tonen." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Alleen de versie-1-tabellen tonen." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Alleen de versie-2- en versie-3-tabellen tonen." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "ACPI-informatie tonen." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "beschikbare RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "gereserveerde RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "herbruikbare ACPI-RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "door ACPI gebruikte persistente RAM" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "beschadigde RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "persistente RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "persistente RAM (verouderd)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM die coreboot-tabellen bevat" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM die firmware bevat" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "basisadres = 0x%llx, lengte = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "basisadres = 0x%llx, lengte = 0x%llx, type = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Geheugentoewijzing geleverd door firmware tonen." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCI-apparaten tonen." + +# XXX s/intel macs/Intel Macs/ +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "BESTAND op HFS- or HFS+-partitie \"zegenen\" voor Intel-Macs." + +# XXX what the donkey is a bless? +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "MAP op HFS- or HFS+-partitie \"zegenen\" voor PPC-Macs." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADRES" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Een 8-bits waarde lezen van ADRES." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Een 16-bits waarde lezen van ADRES." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Een 32-bits waarde lezen van ADRES." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Deze 8-bits WAARDE schrijven naar ADRES." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Deze 16-bits WAARDE schrijven naar ADRES." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Deze 32-bits WAARDE schrijven naar ADRES." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Menu-itemsoort." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "TEKENREEKS" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Lijst van gebruikers die dit item mogen starten." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "GEBRUIKERSNAAM[,GEBRUIKERSNAAM...]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Toetsenbordtoets waarmee dit item direct gestart kan worden." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TOETS" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Deze TEKENREEKS gebruiken als body van menu-item." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Menu-itemnaam." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Dit item kan gestart worden door elke gebruiker." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Een menu-item definiëren." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Een submenu definiëren." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Naam\tVerwijzingen\tAfhankelijkheden\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Deze tekst tonen." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADRES [GROOTTE]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Inhoud van geheugen tonen." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULE" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Een module verwijderen." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Geladen modules tonen." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "GRUB verlaten." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Geen CS5536 gevonden" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 is op %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "I/O-ruimte van SMBus-controller is op 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM-sleufnummer %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Aantal geschreven SPD-bytes: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Totale flash-grootte: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Geheugentype: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Onderdeelnummer: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Geheugentype: (onbekend)." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Geheugeninformatie tonen." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s ondersteunt geen UUID's" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODULE1 MODULE2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Naar originele schijfstuurprogramma's overschakelen. Als er geen modules " +"gegeven zijn, dan wordt de standaardset (pata,ahci,usbms,ohci,uhci,ehci) " +"gebruikt." + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Voert OPDRACHTEN uit op partitie.\n" +"Gebruik 'parttool PARTITIE help' voor een lijst van beschikbare opdrachten." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=WAARDE" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Sorry, 'parttool' werkt niet voor %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "onbekend argument '%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITIE OPDRACHTEN" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "GEBRUIKERSNAAM WACHTWOORD" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Gebruikerswachtwoord instellen (platte tekst). Afgeraden en onveilig." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ongeldig PBKDF2-wachtwoord" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "GEBRUIKERSNAAM PBKDF2-WACHTWOORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Gebruikerswachtwoord instellen (met PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Apparaat selecteren via ID's van producent en/of apparaat." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[PRODUCENT]:[APPARAAT]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Apparaat selecteren via de positie ervan op de bus." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[BUS]:[SLEUF][.FUNC]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "ontbrekend '%c'-symbool" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSITIE] [-d APPARAAT]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Onbewerkte inhoud van PCI-instellingenruimte tonen." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "De afsluitwaarde aan variabele toekennen." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Stuurprogramma achterhalen." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Soort partitietabel achterhalen." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Soort bestandssysteem achterhalen." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "UUID van bestandssysteem achterhalen." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Label van bestandssysteem achterhalen." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "bestandssysteem '%s' ondersteunt geen labels" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "APPARAAT" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Apparaatinformatie ophalen." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[OMGEVINGSVARIABELE]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Variabele met gebruikersinvoer instellen." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Computer herstarten." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Overeenkomende component (met dit NUMMER) opslaan in VARNAAM." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMMER:]VARNAAM" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP TEKENREEKS" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Controleren of reguliere expressie REGEXP overeenkomt met TEKENREEKS." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAAM [VARIABELE] [HINTS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Apparaten doorzoeken naar bestand. Als VARIABELE opgegeven is, wordt de " +"naam van het eerstgevonden apparaat daaraan toegekend." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Apparaten op label zoeken. Als VARIABELE opgegeven is, wordt de naam van " +"het eerstgevonden apparaat daaraan toegekend." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Apparaten op UUID zoeken. Als VARIABELE opgegeven is, wordt de naam van het " +"eerstgevonden apparaat daaraan toegekend." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Apparaten zoeken aan hand van bestand." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Apparaten zoeken aan hand van bestandssysteemlabel." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Apparaten zoeken aan hand van bestandssysteem-UUID." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Eerstgevonden apparaat aan variabele toekennen." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Geen floppy-apparaten polsen." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Eerst apparaat HINT proberen. Als HINT eindigt op een komma, ook " +"subpartities proberen." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINT" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Eerst apparaat HINT proberen, wanneer draaiend op IEE1275. Als HINT eindigt " +"op een komma, ook subpartities proberen." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Eerst apparaat HINT proberen, wanneer draaiend op BIOS. Als HINT eindigt op " +"een komma, ook subpartities proberen." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Eerst apparaat HINT proberen wanneer directe hardwaretoegang ondersteund " +"wordt. Als HINT eindigt op een komma, ook subpartities proberen." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Eerst apparaat HINT proberen, wanneer draaiend op EFI. Als HINT eindigt op " +"een komma, ook subpartities proberen." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Eerst apparaat HINT proberen, wanneer draaiend op ARC. Als HINT eindigt op " +"een komma, ook subpartities proberen." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT]...] NAAM" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Apparaten op bestand, label of UUID zoeken. Als '--set' gegeven is, dan " +"wordt het eerstgevonden apparaat toegekend aan een variabele; als geen " +"variabelenaam gegeven is, dan wordt hiervoor 'root' gebruikt." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x van %x:%02x.%x is %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITIE] [-d APPARAAT] [-v VARIABELE] REGISTER[=WAARDE[:MASKER]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "PCI-apparaten manipuleren." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Uitgebreid aftellen." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Afbreken met ESC toestaan." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "AANTAL_SECONDEN" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Een opgegeven aantal seconden wachten." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "hoofdmap van de syslinux-schijf [standaard=/]" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"huidige map van syslinux [standaard is de oudermap van het invoerbestand]" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "aannemen dat invoer een isolinux-configuratiebestand is" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "aannemen dat invoer een pxelinux-configuratiebestand is" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "aannemen dat invoer een syslinux-configuratiebestand is" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Een syslinux-configuratie uitvoeren in dezelfde context" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Een syslinux-configuratie uitvoeren in nieuwe context" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Een syslinux-configuratie uitvoeren in dezelfde context, maar alleen menu-" +"items nemen" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Een syslinux-configuratie uitvoeren in nieuwe context, maar alleen menu-" +"items nemen" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "geen terminal opgegeven" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminal '%s' is niet gevonden" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Actieve invoerterminals:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Beschikbare invoerterminals:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Actieve uitvoerterminals:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Beschikbare uitvoerterminals:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1 [TERMINAL2 ...]]" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Een invoerterminal tonen of selecteren." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Een uitvoerterminal tonen of selecteren." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESSIE ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Een expressie evalueren." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESSIE" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Hetzelfde bestand op meerdere manieren laden." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Grootte opgeven voor elke leesoperatie" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "ongeldige blokgrootte" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Bestandsgrootte: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Verstreken tijd: %d.%03d seconden \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Snelheid: %s\n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s GROOTTE] BESTANDSNAAM" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Leessnelheid van bestanden testen." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "geen opdracht opgegeven" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Verstreken tijd: %d.%03d seconden \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "OPDRACHT [ARGUMENTEN]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "De tijd meten die OPDRACHT duurt" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Omzetten naar hoofdletters." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Omzetten naar kleine letters." + +# XXX how can SET1 be optional? +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPTIE...] SET1 [SET2] [TEKENREEKS]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "In TEKENREEKS de tekens in SET1 omzetten naar SET2." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Niets doen, met succes." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Niets doen, met mislukking." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USB-ondersteuning testen." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Vingerafdrukcontrole van publiekesleutelbestand overslaan." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "onjuiste vingerafdruk" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "publieke sleutel %08x is niet gevonden" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "module '%s' is niet geladen" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] BESTAND VINGERAFDRUKBESTAND [PUBLIEKESLEUTELBESTAND]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Een losse vingerafdruk controleren." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] PUBLIEKESLEUTELBESTAND" + +# XXX should this not say: "add key *from* given file"? +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Sleutel uit gegeven bestand aan vertrouwde sleutels toevoegen." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Lijst van vertrouwde sleutels tonen." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "PUBLIEKESLEUTEL-ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" +"Sleutel met gegeven PUBLIEKESLEUTEL-ID uit vertrouwde sleutels verwijderen." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Alleen tekst " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Direct-color, masker: %d/%d/%d/%d positie: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Gepaletteerd " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monochroom " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "(onbekende videomodus) " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " EDID-controlesom is ongeldig" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID-versie: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Voorkeursmodus: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Geen voorkeursmodus aanwezig\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "ongeldige specificatie '%s' van videomodus" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Lijst van ondersteunde videomodi:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legenda: masker/positie=rood/groen/blauw/gereserveerd" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter '%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Geen info beschikbaar" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Initialiseren van video-adapter is mislukt" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[BxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Beschikbare videomodi tonen. Als een resolutie gegeven is, alleen " +"overeenkomende modi tonen." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[BxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Video-subsysteem testen in modus BxH." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Video-subsysteem testen." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[MAP]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Xen-opslag tonen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUB-UUID [VARNAAM]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Een 64-bit UUID geschikt maken voor XNU. Als optie '-l' gegeven is, dan " +"alleen in kleine letters zoals 'blkid' doet." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "lezen van sector 0x%llx van '%s' is mislukt" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "schrijven van sector 0x%llx naar '%s' is mislukt" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Aankoppelen via UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Alles aankoppelen." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Alle volumens aankoppelen die 'opstart'-vlag gezet hebben." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "kan '%s' niet openen: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "kan niet springen in '%s': %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "BRON|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Een versleuteld apparaat aankoppelen." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Kan fysiek volumen '%s' niet vinden. Mogelijk ontbreken er modules in de " +"core-image." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "fysiek volumen %s is niet gevonden" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "geen medium in '%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Kan sha256 niet laden" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Kan sha512 niet laden" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "kan ELI-metagegevens niet lezen" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "foutief magisch getal of verkeerde versie van ELI" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Poging tot ontsleutelen van hoofdsleutel..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Voer wachtwoordzin in voor %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Sleuf %d is geopend\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "poging tot lezen of schrijven buiten schijf '%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "kan niet naar CD-rom schrijven" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"De eigen schijfstuurprogramma's worden gebruikt. De firmware-interface is " +"afgewezen." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "uw LDM-inbeddende partitie is te klein; inbedding is niet mogelijk" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "deze LDM heeft geen inbeddende partitie; inbedding is niet mogelijk" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Het gegeven lus-apparaat verwijderen." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] APPARAATNAAM BESTAND" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Van een bestand een virtuele schijf maken." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "relocatie 0x%x is nog niet geïmplenteerd" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "geen symbolentabel" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "dit ELF-bestand is niet van het juiste type" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "EFI-emulator laden en initialiseren." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Het laden van de EFI-emulator afmaken." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "De EFI-emulator de-activeren." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "symbool '%s' is niet gevonden" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Geladen lettertypes:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "BESTAND..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Te laden lettertypebestanden." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "De geladen lettertypes tonen." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "te diepe nesting van symbolische koppelingen" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "poging tot lezen voorbij einde van bestand" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"kan een benodigd deelapparaat van een multi-apparaat-bestandssysteem niet " +"vinden" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "is geen map" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "is geen normaal bestand" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"Uw core.img is ongebruikelijk groot. Het zal niet in de inbeddingsruimte " +"passen." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "ongeldige bestandsnaam '%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "controle van controlesom is mislukt" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "er is geen onsleutelingssleutel beschikbaar" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC-controle is mislukt" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Aannemen dat de invoer onbewerkt is." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Aannemen dat de invoer hexadecimaal is." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Aannemen dat de invoer een wachtwoordzin is." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Voer ZFS-wachtwoord in: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [BESTAND]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "De ZFS-inpaksleutel opgeslagen in BESTAND importeren." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtueel apparaat is verwijderd" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtueel apparaat is in fouttoestand" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtueel apparaat is offline" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtueel apparaat is beperkt functioneel" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtueel apparaat is online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Onjuist virtueel apparaat: geen type bekend" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Feitelijk virtueel apparaat (bestand of schijf)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Opstartpad: (niet beschikbaar)\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Opstartpad: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Pad: (niet beschikbaar)" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Pad: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Apparaat-ID: (niet beschikbaar)" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Apparaat-ID: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Deze VDEV is een mirror" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Deze VDEV is een RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Onjuiste VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV met %d dochters\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV-elementnummer %d is niet correct\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV-elementnummer %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Onbekend virtueel apparaattype: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Pool-status: actief" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Pool-status: geëxporteerd" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Pool-status: vernietigd" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Pool-status: gereserveerd als vervanger" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Pool-status: niveau-2 ARC-apparaat" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Pool-status: ongeïnitialiseerd" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Pool-status: (niet beschikbaar)" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Pool-status: potentieel actief" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Pool-naam: (niet beschikbaar)" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Pool-naam: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Pool-GUID: (niet beschikbaar)" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Pool-GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Kan pool-status niet verkrijgen" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Onbekende pool-status" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Er is geen virtueleapparatenboom beschikbaar" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "ZFS-informatie tonen over APPARAAT." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "BESTANDSSYSTEEM [VARIABELE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Het ZFS-BOOTFSOBJ tonen of opslaan in VARIABELE" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Sluit nu de debugger op afstand aan." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "GDB-stub starten op de gegeven poort" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "In GDB inbreken" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "GDB-stub stoppen" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "voortijdig einde van bestand" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Vertaalt de tekenreeks met de huidige instellingen." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Druk op Enter om het geselecteerde systeem te starten, 'e' om de opdrachten " +"te bewerken, of 'c' voor een opdrachtregel. Druk op ESC voor het vorige " +"menu." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Druk op Enter om het geselecteerde systeem te starten, 'e' om de opdrachten " +"te bewerken, of 'c' voor een opdrachtregel." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "Enter: starten, 'e': opties, 'c': opdrachtregel" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Over %d seconden wordt het geselecteerde item automatisch gestart." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "Nog %d seconden." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB Opstartmenu" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: waarde voor '%s' is kleiner of gelijk aan %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Parameter in ARGP_HELP_FMT vereist een waarde" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Parameter in ARGP_HELP_FMT moet positief zijn" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Onbekende parameter in ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Rommel in ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Een argument dat verplicht of optioneel is voor een lange optie,\n" +"is dat ook voor de overeenkomstige korte optie." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " of: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPTIE...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Typ '%s --help' of '%s --usage' voor meer informatie.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Rapporteer gebreken in het programma aan %s;\n" +"meld fouten in de vertaling aan .\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Onbekende systeemfout" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "deze hulptekst tonen" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "een korte gebruikssamenvatting tonen" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAAM" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "de programmanaam instellen" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SECONDEN" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "dit aantal seconden pauzeren (standaard 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "programmaversie tonen" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "**Interne programmafout**: geen versie bekend!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Te veel argumenten\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "**Interne programmafout**: optie had herkend moeten worden!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: optie '%s' is niet eenduidig; mogelijkheden zijn:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: optie '--%s' staat geen argument toe\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: optie '%c%s' staat geen argument toe\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: optie '--%s' vereist een argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: onbekende optie '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: onbekende optie '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ongeldige optie -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: optie vereist een argument -- '%c'\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: optie '-W %s' is niet eenduidig\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: optie '-W %s' staat geen argument toe\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: optie '-W %s' vereist een argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Gelukt" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Geen overeenkomsten" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ongeldige reguliere expressie" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ongeldig samengesteld teken" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ongeldige tekenklassenaam" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Backslash aan het eind" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ongeldige terugverwijzing" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Ongepaarde [ of [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Ongepaarde ( of \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Ongepaarde \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ongeldige inhoud van \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ongeldig bereikeinde" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Onvoldoende geheugen beschikbaar" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ongeldige voorafgaande reguliere expressie" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Voortijdig einde van reguliere expressie" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Reguliere expressie is te groot" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Ongepaarde ) of \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "Onbekende fout in reguliere expressie" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Geen eerdere reguliere expressie" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hallo wereld" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "\"Hallo wereld\" melden." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "poging tot springen buiten het bestand" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "niet-ondersteunde GZIP-indeling" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "LZOP-bestand is beschadigd" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "XZ-bestand is beschadigd of gebruikt niet-ondersteunde blokopties" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "ongeldig architectuur-afhankelijk magisch getal in ELF-bestand" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[OMGEVINGSVARIABELE=WAARDE]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Een omgevingsvariabele instellen." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "OMGEVINGSVARIABELE" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Een omgevingsvariabele verwijderen." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARGUMENT]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Apparaten of bestanden tonen." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Een module laden." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "schijf '%s' is niet gevonden" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "poging tot lezen of schrijven buiten partitie" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "ongeldig architectuur-onafhankelijk magisch getal in ELF-bestand" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "aantal apparaten overschrijdt limiet" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "kan niet schrijven naar '%s': %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"het item '%s' in 'device.map' is ongeldig; het wordt genegeerd; corrigeer of " +"verwijder uw 'device.map'" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"apparaatnaam '%s' in 'device.map' is onjuist; daarvoor in de plaats wordt %s " +"gebruikt; gebruik de vorm [hfc]d[0-9]* (bijvoorbeeld 'hd0' of 'cd')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "kan '%s' niet openen: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "APPARAATNAAM" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Root-apparaat instellen." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "BESTAND als apparaattoewijzingstabel gebruiken [standaard %s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "BESTAND gebruiken als geheugenschijf" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "de GRUB-bestanden uit MAP gebruiken [standaard %s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "uitgebreide meldingen tonen" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "wachten tot een debugger zich aanhecht" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Onbekend extra argument '%s'." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Fout tijdens ontleden van de opdrachtregelargumenten.\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Voer 'gdb %s %d' uit, en zet ARGS.HOLD op nul.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: waarschuwing:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: informatie:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: fout:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "bestand '%s' is te groot" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "onbekend bestandssysteem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Uitschakeling is mislukt" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Afsluiten is mislukt" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "overloop is gedetecteerd" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Onjuist geneste partitie (%s,%s,%s%d) wordt weggelaten" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Opdracht '%s' is onbekend.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Deze hulptekst tonen en stoppen." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Gebruikssamenvatting van deze opdracht tonen en stoppen." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "verplichte optie voor '%s' ontbreekt" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "het argument '%s' vereist een geheel getal" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"er werd een waarde gegeven voor argument '%s' terwijl het geen waarde vereist" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Een backtrace tonen." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB weet nog niet hoe deze machine te stoppen!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Standaardserver is ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "ongeldige kleurindicatie '%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Herstarten is mislukt" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LENGTE]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Willekeurige gegevens genereren." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "apparatenboom moet gegeven zijn (zie opdracht 'devicetree')" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "ongeldige zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "ongeldige apparatenboom" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Linux laden." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Een initiële RAM-schijf laden." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Een DTB-bestand laden." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"een gewone image-kernel wordt niet ondersteund; hercompileer grub met " +"'CONFIG_(U)EFI_STUB' ingeschakeld" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "verkrijgen van FDT is mislukt" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "u dient eerst de Xen-hypervisor te laden" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Een Xen-hypervisor laden." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Een Xen-module laden." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTIES]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Een BIOS-gebaseerd systeem opstarten." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Een andere boot-loader laden." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Uitvoer op alle consoles tonen." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Een seriële console gebruiken." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Vragen om naam van bestand waarvan herstart moet worden." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Een CD-ROM als root-apparaat gebruiken." + +# (doet momenteel niets) +#: grub-core/loader/i386/bsd.c:106 +#, fuzzy +msgid "Invoke user configuration routing." +msgstr "(doet momenteel niets)" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "KDB binnengaan bij opstarten." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "GDB-debugger op afstand gebruiken in plaats van DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Alle opstartuitvoer onderdrukken." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Op een toetsaanslag wachten na elke uitvoerregel." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Het bij compilatie aangegeven root-apparaat gebruiken." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Opstarten in ééngebruikermodus." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Opstarten met uitgebreide meldingen." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Niet herstarten, computer alleen stoppen." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Ingestelde apparaten wijzigen." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comNUMMER[,SNELHEID]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMP uitschakelen." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPI uitschakelen." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Geen diagnostische meldingen tonen." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Opstarten met debug-meldingen." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Gewone uitvoer onderdrukken (maar waarschuwingen niet)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADRES|comNUMMER][,SNELHEID]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "naam" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "type" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adres" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "grootte" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Opstarten in blinde modus." + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Een FreeBSD-kernel laden." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Een OpenBSD-kernel laden." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Een NetBSD-kernel laden." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Een FreeBSD-omgeving laden." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Een FreeBSD-kernelmodule laden." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Een NetBSD-kernelmodule laden." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Een NetBSD-kernelmodule (ELF) laden." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Een FreeBSD-kernelmodule (ELF) laden." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Een kOpenBSD-RAM-schijf laden." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Een andere payload van 'coreboot' laden." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Verouderde parameter 'ask' wordt niet meer ondersteund." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s wordt afgeraden. Gebruik in plaats daarvan 'set gfxpayload=%s' vóór de " +"'linux'-opdracht.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s wordt afgeraden. VGA-modus %d wordt niet herkend. Gebruik in plaats " +"daarvan 'set gfxpayload=BREEDTExHOOGTE[xDIEPTE]' vóór de 'linux'-opdracht.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] BESTAND" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "de grootte van '%s' is te groot" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Het kernel.sys-bestand van FreeDOS laden." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "NTLDR of BootMGR laden." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Een Plan9-apparaatovereenkomst aanpassen." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUB-APPARAAT=PLAN9-APPARAAT" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGUMENTEN" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Een Plan9-kernel laden." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Een PXE-image laden." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Een Truecrypt-ISO laden." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd is al geladen" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Module laden." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Druk op een toets om XNU te starten" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Een dump van 'device-properties' laden." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Kan FPSWA-stuurprogramma niet vinden" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Het FPSWA-protocol kan de interface niet vinden" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Geen FPSWA gevonden" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA-revisie: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "BESTAND [ARGUMENT...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "FPSWA-versie tonen" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" +"WAARSCHUWING: er zal geen console beschikbaar zijn voor het beheersysteem" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Een multiboot-2-kernel laden." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Een multiboot-2-module laden." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Een multiboot-kernel laden." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Een multiboot-module laden." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Modus voor achtergrondafbeelding." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch (=uitgerekt) | normal (=normaal)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Een XNU-image laden." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Een 64-bit XNU-image laden." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Een XNU-extensiepakket laden." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Een XNU-extensie laden." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "MAP [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Een XNU-extensiemap laden." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Een XNU-RAM-schijf laden. Het zal beschikbaar zijn als 'md0'." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Een XNU-splash-afbeelding laden." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Een image van een slapende XNU laden." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADRES1,MASKER1[,ADRES2,MASKER2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Geheugengebieden als slecht ('badram') declareren." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "VAN[K|M|G] TOT[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Geheugengebieden in deze bereiken verwijderen." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "vier argumenten werden verwacht" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "onbekende netwerkinterface '%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "geen DHCP-info gevonden" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "geen DHCP-opties gevonden" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "DHCP-optie %d is niet gevonden" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "onbekende DHCP-optie-opmaakspecificatie '%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "geen netwerkkaart gevonden" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "kan %s niet automatisch configureren" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KAART]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "een 'bootp'-autoconfiguratie uitvoeren" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR INTERFACE NUMMER OMSCHRIJVING" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"een DHCP-optie ophalen en opslaan in VAR; als VAR '-' is, dan de waarde tonen" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "geen DNS-servers geconfigureerd" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "component van domeinnaam is te lang" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "geen DNS-record gevonden" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "geen DNS-antwoord ontvangen" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "alleen IPv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "alleen IPv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "IPv4 de voorkeur geven" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "IPv6 de voorkeur geven" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "ongeldig argument" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRES DNS-SERVER" + +# XXX add period? +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Een DNS-lookup uitvoeren." + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNS-SERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Een DNS-server toevoegen" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Een DNS-server verwijderen" + +# XXX add period? +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "DNS-servers tonen." + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "kan netwerkpakketje niet verzenden" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "'interpret' wordt niet ondersteund" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "onvoldoende geheugen beschikbaar" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "functie 'free-mem()' is mislukt" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "niet-ondersteund HTTP-antwoord" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "niet-ondersteunde HTTP-fout %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "tijdslimiet is overschreden tijdens openen van '%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "tijdslimiet is overschreden: kan hardware-adres niet herleiden" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "niet-herleidbaar adres %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "onbekend netwerkadres '%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "doel is niet bereikbaar" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "lus in de routering gedetecteerd" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "adres is niet gevonden" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "kan dit adres niet verwijderen" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Niet-ondersteund hardware-adrestype %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Niet-ondersteund adrestype %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "drie argumenten werden verwacht" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "kaart is niet gevonden" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "tijdelijk" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Onbekend adrestype %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "geen server opgegeven" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "tijdslimiet is overschreden tijdens lezen van '%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KORTE-NAAM KAART ADRES [HARDWARE-ADRES]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Een netwerkadres toevoegen." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KAART [HARDWARE-ADRES]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Een IPv6-autoconfiguratie uitvoeren." + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KORTE-NAAM" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Een netwerkadres verwijderen." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KORTE-NAAM NETWERK [INTERFACE | gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Een netwerkroute toevoegen." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Een netwerkroute verwijderen." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "Netwerkroutes tonen" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "Netwerkkaarten tonen" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "Netwerkadressen tonen" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "verbinding is geweigerd" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "verbindingstijdslimiet is overschreden" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Voer gebruikersnaam in: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[GEBRUIKERSLIJST]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Controleren of gebruiker in GEBRUIKERSLIJST staat." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Mogelijke opdrachten zijn:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Mogelijke apparaten zijn:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Mogelijke bestanden zijn:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Mogelijke partities zijn:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Mogelijke argumenten zijn:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Mogelijke dingen zijn:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Waarschuwing: syntaxfout (ontbrekende '/') in '%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Waarschuwing: ongeldige voorgrondkleur '%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Waarschuwing: ongeldige achtergrondkleur '%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "OMGEVINGSVARIABELE [OMGEVINGSVARIABELE ...]" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Variabelen exporteren." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "zondag" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "maandag" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "dinsdag" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "woensdag" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "donderdag" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "vrijdag" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "zaterdag" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "module is niet geladen" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB versie %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC annuleert op elk moment." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimale Bash-achtige regelbewerking is mogelijk. Voor het eerste woord " +"toont TAB de mogelijke opdrachten. Elders toont TAB de mogelijke apparaten " +"of bestanden. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Scherm wissen." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Op normale modus overgaan." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Normale modus verlaten." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Druk op een toets om verder te gaan..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Opstarten van '%s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Terugvallend op '%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" +"Het opstarten van zowel het standaard- als het terugvalitem is mislukt.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Opstarten van een opdrachtenlijst" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimale Emacs-achtige tekstbewerking is mogelijk. TAB toont de mogelijke " +"completeringen. Druk op Ctrl-x of F10 om op te starten, Ctrl-c of F2 voor " +"een opdrachtregel, of ESC voor het vorige menu." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Gebruik de %C- en %C-toetsen om een item te selecteren." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partitie %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Apparaat %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Toegang tot bestandssysteem is onmogelijk." + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Bestandssysteemsoort %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Label \"%s\"" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Laatst gewijzigd op %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Er is geen bekend bestandssysteem gedetecteerd" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partitie begint op %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sectorgrootte is %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Totale grootte is onbekend" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Totale grootte is %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--Meer--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "kan configuratiebestand '%s' niet openen: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "er is geen compressie beschikbaar voor uw platform" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "er zijn geen IEEE1275-routines beschikbaar voor uw platform" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "er zijn geen EFI-routines beschikbaar voor uw platform" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "er zijn geen SGI-routines beschikbaar voor uw platform" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "er is geen willekeuriggetalgenerator beschikbaar voor uw beheersysteem" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Aanmaken van apparaattoewijzingsboom is mislukt" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "kan versleuteld volumen '%s' niet aankoppelen: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "kan GEOM niet openen" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "kan GELI-consument niet vinden" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "kan GELI-UUID niet verkrijgen" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "kan GEOM 'part'-klasse niet vinden" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "onuitgelijnde apparaatgrootte" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "poging om de core-image '%s' uit GRUB te lezen" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "poging om de core-image '%s' uit GRUB opnieuw te lezen" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "kan '%s' niet foutloos lezen" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "lezen van de sectoren van de core-image is mislukt" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "kan de translator-opdrachtregel voor pad '%s' niet verkrijgen: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "de translator-opdrachtregel is leeg voor pad '%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"translator '%s' voor pad '%s' bevat meerdere argumenten die geen opties " +"zijn, in elk geval '%s' en '%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"translator '%s' voor pad '%s' bevat alleen opties, geen apparaatcomponent" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Opslaginformatie voor '%s' bevat niet het type" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "'%s' is geen lokale schijf" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Opslaginformatie voor '%s' geeft noch een gewone partitie noch een gewone " +"schijf aan" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "kan bloklijsten niet verkrijgen: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "blokgrootte is niet deelbaar door 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "ongeldige blokgrootte nul" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "kan bloklijsten niet verkrijgen" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl(RAID_VERSION)-fout: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "niet-ondersteunde RAID-versie: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl(GET_ARRAY_INFO)-fout: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl(GET_DISK_INFO)-fout: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Kan gegevensstroom uit %s niet openen: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "onbekend soort RAID-apparaat '%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"'obppath' is niet gevonden in de omvattende mappen van '%s'; geen IEEE1275-" +"naamsherleiding" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "kan canoniek pad van '%s' niet achterhalen" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "onbekend apparaattype %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Gebruik: %s APPARAAT\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Kan geen nieuw proces starten: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Kan geen pijp aanmaken: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "kan de originele map niet herstellen" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "kan status van '%s' niet opvragen: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "kan geen tijdelijk bestand aanmaken: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "kan geen tijdelijke map aanmaken: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"Kan geen IEEE1275-apparatenboompad vinden voor %s.\n" +"U zult de variabele 'boot-device' met de hand moeten instellen." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: niet gevonden" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"Functie 'nvsetenv()' is mislukt.\n" +"U zult de variabele 'boot-device' met de hand moeten instellen.\n" +"Typ het volgende na de IEEE1275-prompt:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "U zult 'SystemPartition' en 'OSLoader' met de hand moeten instellen." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "geen '/' in canonieke bestandsnaam" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() is mislukt" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "kan geen willekeurige gegevens verkrijgen" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "onvoldoende rechten voor toegang tot firmware; BIOS wordt aangenomen" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "EFI-routines zijn niet beschikbaar in BIOS-modus" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "onverwachte EFI-fout" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Kan geen vrije BootNNNN-plek vinden" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"dit GPT-partitielabel bevat geen BIOS-opstartpartitie; inbedding is niet " +"mogelijk" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "uw BIOS-opstartpartitie is te klein; inbedding is niet mogelijk" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sector %llu wordt reeds gebruikt door de RAID-controller '%s'; de sector " +"wordt ontweken. Vraag de fabrikant om geen gegevens in het MBR-gat op te " +"slaan." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sector %llu wordt reeds gebruikt door het programma '%s'; de sector wordt " +"ontweken. Deze software kan in de toekomst (opstart-)problemen " +"veroorzaken. Vraag de auteurs om geen gegevens in het opstartspoor op te " +"slaan." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"Andere software gebruikt het inbeddingsgebied en er is niet genoeg ruimte " +"voor 'core.img'. Zulke software probeert meestal om gegevens op te slaan op " +"een manier die niet gedetecteerd wordt. We raden u aan om dit nader te " +"onderzoeken." + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"dit MSDOS-achtige partitielabel heeft geen ruimte na de MBR; inbedding is " +"niet mogelijk" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Uw inbeddingsgebied is ongebruikelijk klein; core.img zal er niet in passen." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Partitie actief maken" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "is geen primaire partitie" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partitie %d is nu actief. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "De 'actief'-vlag op %d is gewist. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Partitietype wijzigen" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "De 'verborgen'-vlag in partitietype zetten" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "partitietype 0x%x is ongeldig" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Instellen van partitietype op 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "kan niet nul lussen verbreken" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "valt niet binnen een functie" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "ongeldige variabelenaam '%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "onverwacht einde van bestand" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUMMER]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Een lus verlaten." + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Doorgaan met een lus." + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Positionele parameters opschuiven." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[WAARDE...]" + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Positionele parameters instellen." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Terugkeren uit een functie." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] BESTAND" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "De achtergrondafbeelding voor de actieve terminal laden." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "KLEUR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "De achtergrondkleur voor de actieve terminal instellen." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Inhoud van CBMEM-console tonen." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "De seriële eenheid instellen." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Het adres van de seriële poort instellen." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "De snelheid van de seriële poort instellen." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "De woordlengte van de seriële poort instellen." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "De pariteit van de seriële poort instellen." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "De stopbits van de seriële poort instellen." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "De basisfrequentie instellen." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "RTS/CTS inschakelen/uitschakelen." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "seriële poort '%s' is niet gevonden" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "niet-ondersteunde flow-control van seriële poort" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIE...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Seriële poort instellen." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "onbekend 'terminfo'-type '%s'" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "visueel-geordende UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "(onbekende codering)" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Huidige 'terminfo'-types:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "De terminal is alleen-ASCII [standaard]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "De terminal is logisch-geordende UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "De terminal is visueel-geordende UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "De terminal heeft de gegeven afmetingen." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "BREEDTExHOOGTE" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "onjuiste opgave van terminalafmetingen" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "terminal '%s' is niet gevonden of wordt niet behandeld door 'terminfo'" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g BxH] TERMINAL [TYPE]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Het 'terminfo'-type van TERMINAL op TYPE instellen.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Een blokargument tonen en uitvoeren." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "bitkaartbestand '%s' heeft een niet-ondersteunde opmaak" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE-info: versie: %d.%d OEM-softwarerevisie: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " totaal geheugen: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "geen geschikte videomodus gevonden" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "toegang is geweigerd" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULES" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "de gegeven MODULES vooraf laden" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" +"alleen deze MODULES en hun benodigdheden installeren [standaard allemaal]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "THEMA'S" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "deze THEMA'S installeren [standaard %s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "LETTERTYPES" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "deze LETTERTYPES installeren [standaard %s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "TAALREGIO'S" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "alleen deze TAALREGIO'S installeren [standaard is allemaal]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "GRUB-bestanden comprimeren [optioneel]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "te gebruiken soort compressie voor core-image" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "images en modules onder MAP gebruiken [standaard %s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "vertalingen onder MAP gebruiken [standaard %s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "thema's onder MAP gebruiken [standaard %s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "BESTAND inbedden als publieke sleutel voor vingerafdrukcontrole" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "kan bestand %s niet naar %s hernoemen" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "schijf bestaat niet; teruggevallen op partitie-apparaat %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Opdrachten:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Een leeg omgevingsblokbestand aanmaken." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "De huidige variabelen tonen." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAAM=WAARDE ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Variabelen instellen." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAAM ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Variabelen verwijderen." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opties:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "U dient minstens één opdracht te geven.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "BESTANDSNAAM OPDRACHT" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Gereedschap om omgevingsblok mee te bewerken." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Als BESTANDSNAAM '-' is, dan wordt de standaardwaarde %s gebruikt.\n" +"\n" +"Er is geen 'delete'-opdracht; als u het gehele omgevingsblok\n" +"wilt verwijderen, gebruik dan 'rm %s'." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "ongeldig omgevingsblok" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "ongeldige parameter %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "omgevingsblok is te klein" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "lezen van schijf is mislukt op positie %lld, lengte %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "ongeldige sprongwaarde %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "leesfout op positie %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "kan bestand '%s' op beheersysteem niet openen: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "kan niet naar standaarduitvoer schrijven: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "vergelijking is mislukt op positie %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "beheersysteemfout bij openen van bestand %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "de 'loopback'-opdracht is mislukt: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "de 'cryptomount'-opdracht is mislukt: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "kan UUID niet verkrijgen" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PAD" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "De bestanden in de map PAD tonen." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp BESTAND DEZE" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "BESTAND naar lokaal bestand DEZE kopiëren." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat BESTAND" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Dit BESTAND naar standaarduitvoer kopiëren." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp BESTAND DEZE" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "BESTAND met lokaal bestand DEZE vergelijken." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex BESTAND" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "De inhoud van BESTAND in hexadecimaal tonen." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc BESTAND" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "De CRC32-controlesom van BESTAND berekenen." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist BESTAND" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "De blokkenlijst van BESTAND tonen." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid APPARAAT" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "De XNU-UUID van APPARAAT berekenen." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUMMER" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "N bytes in uitvoerbestand overslaan." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "N bytes in uitvoerbestand verwerken." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Te gebruiken aantal invoerbestanden." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Een debug-omgevingsvariabele instellen." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Versleutelde apparaten aankoppelen." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "BESTAND|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "De ZFS-versleutelingsleutel laden." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Gegevens decomprimeren." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Ongeldig schijvenaantal.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Schijvenaantal moet voorafgaan aan schijvenlijst.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Geen opdracht gegeven.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Te weinig parameters voor de opdracht.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Ongeldige opdracht: %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE-PAD OPDRACHTEN" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Debug-gereedschap voor bestandssysteem-stuurprogramma." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "invoerbestandsnaam voor 32-bit deel instellen" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "invoerbestandsnaam voor 64-bit deel instellen" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "uitvoerbestandsnaam instellen (standaard is standaarduitvoer)" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPTIE...]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" +"Een 32-bit en een 64-bit programma samenplakken tot een Apple «universele»." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Invoerbestand ontbreekt\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "kan '%s' niet kopiëren naar '%s': %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "kan '%s' niet comprimeren naar '%s'" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "kan map '%s' niet openen: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "kan '%s' niet verwijderen: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "'grub-mkimage' is gecompileerd zonder ondersteuning voor XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Onbekende compressiespecificatie %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Onbekende compressie '%s'" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "onbekende doelindeling %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "kan taalregio '%s' niet vinden" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s bestaat niet; gebruik optie '--target' of '--directory'" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "ongeldig 'modinfo'-bestand '%s'" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "onbekend platform '%s-%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Meer dan één installatie-apparaat?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB-images installeren onder MAP/%s in plaats van de map %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "DOEL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"GRUB installeren voor het platform DOEL [standaard=%s]; beschikbare doelen: " +"%s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"de schijf ook opstartbaar maken als floppy (standaard voor fdX-apparaten); " +"kan falen op sommige BIOS'en" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "de apparaattoewijzingstabel verwijderen als deze reeds bestaat" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "ook installeren als er problemen gevonden worden" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "ID-bestand gebruiken zelfs als UUID beschikbaar is" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"te gebruiken schijfmodule ('biosdisk' of 'native'); deze optie is alleen " +"beschikbaar op een BIOS-doel" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"de variabelen 'boot-device' en 'Boot*' in NVRAM niet bijwerken; deze optie " +"is alleen beschikbaar op EFI en IEEE1275" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "niet naar bestandssystemen zoeken op APPARAAT" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "geen bootsector installeren" + +# XXX capitalize Reed-Solomon +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"geen Reed-Solomoncodes toepassen bij inbedden van core.img; deze optie is " +"alleen beschikbaar op x86 BIOS-doelen" + +# XXX use semicolon +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"het installatie-apparaat is verwijderbaar; deze optie is alleen beschikbaar " +"op EFI" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"het ID van de opstartlader; deze optie is alleen beschikbaar op EFI en Macs" + +# XXX no period +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "deze MAP gebruiken als hoofdmap van EFI-systeempartitie" + +# XXX s/MAC/Mac/; no period +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "deze MAP gebruiken voor PPC Mac-installatie" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "dit BESTAND gebruiken als lettertype voor label" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "KLEUR gebruiken voor label" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "KLEUR gebruiken voor label-achtergrond" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "TEKENREEKS gebruiken voor productversie" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPTIE] [INSTALLATIE-APPARAAT]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "GRUB installeren op uw schijf." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALLATIE-APPARAAT dient de naam van een systeemapparaat te zijn.\n" +"%s kopieert GRUB-images naar %s. Op sommige platformen\n" +"installeert het ook GRUB in de opstartsector.\\n" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" +"schijf %s is meerdere keren gedefinieerd in apparaattoewijzingstabel %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Kan uw platform niet achterhalen. Gebruik optie '--target'." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installeren voor %s-platform.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "geen installatie-apparaat opgegeven" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "kan EFI-map niet vinden" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "kan geen apparaat vinden voor %s (is /dev wel aangekoppeld?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "Kan geen GRUB-schijf vinden voor %s. Controleer uw 'device.map'." + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s ziet er niet uit als een EFI-partitie" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "U hebt een programmafout gevonden." + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "bestandssysteem op %s is noch HFS noch HFS+" + +# XXX start with capital? +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"Poging tot installeren op een versleutelde schijf zonder dat 'cryptodisk' " +"ingeschakeld is. Zet '%s' in bestand '%s'." + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Kan geen bestand aanmaken: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"Er zijn geen hints beschikbaar voor uw platform. Verwacht gereduceerde " +"prestaties." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "DRAAIT NIET: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "de gekozen partitie is geen PReP-partitie" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "het kopiëren van GRUB naar de PReP-partitie is mislukt" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"De PReP-partitie is niet leeg. Als u zeker weet dat u deze wilt gebruiken, " +"wis deze dan met 'dd': '%s'" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Geen EFI-opstartlader-ID opgegeven." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "WAARSCHUWING: er werd geen platformspecifieke installatie uitgevoerd" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installatie is afgerond. Er werden geen fouten gerapporteerd." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "zegenen voor Macs die x86 gebruiken" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "zegenen voor Macs die PPC gebruiken" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Geen pad of apparaat gegeven.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc PAD | --x86 BESTAND" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "een HFS of HFS+ \"zegenen\" zoals op een Mac" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Gebruik: %s [INVOERBESTAND [UITVOERBESTAND]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype-fout %d bij laden van glyph 0x%x voor U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (centrum)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (uiterst links)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (uiterst rechts)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Vervanging valt buiten bereik (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Het gezochte valt buiten bereik: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Niet-ondersteund vervangingstype: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Niet-ondersteunde vervangingsspecificatie: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Niet-ondersteunde dekkingsspecificatie: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "WAARSCHUWING: niet-ondersteunde lettertypefunctieparameters: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "uitvoer opslaan in BESTAND [vereist]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "index van sublettertype" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "VAN-TOT[,VAN-TOT]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "lettertypebereik instellen" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "naam van lettertypefamilie instellen" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "GROOTTE" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "grootte van lettertype instellen" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "staarten van lettertype instellen" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "stokken van lettertype instellen" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "lettertype omzetten naar vet" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "autohinting afdwingen" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "hinting uitschakelen" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "voorgebakken bitkaarten negeren" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ongeldig lettertypebereik" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIES] LETTERTYPEBESTANDEN" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Gewone indelingen van lettertypebestanden omzetten naar PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "er moet een uitvoerbestand gegeven worden" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType() is mislukt" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "kan bestand %s niet openen, index %d: fout %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "kan lettertypegrootte %dx%d niet instellen: Freetype-fout %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "de voorvoegmap instellen" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"BESTAND inbedden als een geheugenschijf-image;\n" +"dit impliceert '-p (geheugenschijf)/boot/grub' en overstijgt een eerder " +"gegeven\n" +"voorvoegsel, maar het voorvoegsel zelf kan gewijzigd worden door latere " +"opties" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "BESTAND inbedden als een vroege configuratie" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "een 'NOTE'-segment toevoegen voor CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" +"een gegenereerde image uitvoeren naar BESTAND [standaard is " +"standaarduitvoer]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "INDELING" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "een image in de gegeven indeling genereren" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "Beschikbare indelingen zijn:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "onbekende doelindeling %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPTIE...] [MODULES]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Een opstartbare image maken van GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Doelindeling is niet gegeven (gebruik optie '-O')." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Voorvoegsel is niet gegeven (gebruik optie '-p')." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"miscompilatie van '%s': diens startadres is 0x%llx in plaats van 0x%llx: een " +"programmafout in ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "invoerbestandsnaam instellen [standaard is standaardinvoer]" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Onbekende toetsnaam %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Onbekende scancode 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"FOUT: Geen geldige toetsenbordindeling gevonden. Controleer de invoer.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Een GRUB-toetsenbordindeling genereren vanuit Linux-console één." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "hoofdmap van TFTP-server" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relatieve submap op netwerkserver" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Maakt GRUB-netwerkopstart-images in 'netwerkmap/submap/', aannemend dat " +"'netwerkmap' de TFTP-hoofdmap is." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "niet-ondersteund platform %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Een Netboot-map voor %s is aangemaakt. Laat uw DHCP-server naar %s wijzen.\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Aantal PBKDF2-iteraties" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Lengte van gegenereerde hash" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Lengte van startwaarde ('salt')" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Een PBKDF2-wachtwoord-hash genereren." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "lezen van wachtwoord is mislukt" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Voer wachtwoord opnieuw in: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "de wachtwoorden komen niet overeen" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "kan geen willekeurige gegevens verkrijgen voor startwaarde ('salt')" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "versleutelingsfout, nummer %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "de PBKDF2-hash van uw wachtwoord is %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Geen pad gegeven.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "PAD" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Een bestandsnaam uit het systeem omzetten naar eentje voor GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ROM-images opslaan in MAP [optioneel]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "dit BESTAND gebruiken als 'xorriso' [optioneel]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "TEKENREEKS gebruiken voor productnaam" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"SPARC-opstart inschakelen -- schakelt HFS+, APM, ARCS en opstarten als " +"schijf-image voor i386-pc uit" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"ARCS-opstart inschakelen (big-endian MIPS-machines, meest SGI) -- schakelt " +"HFS+, APM, sparc64 en opstarten als schijf-image voor i386-pc uit" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Een opstartbare GRUB-image maken voor CD-rom, USB-stick, harde schijf, en " +"floppy." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Genereert een opstartbare image voor CD of USB of floppy.\n" +"Argumenten die geen opties van dit programma zijn worden doorgegeven aan\n" +"'xorriso'; het zijn bronbestanden, bronmappen, of opties van 'mkisofs'\n" +"(zoals getoond door de uitvoer van '%s')." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" +"Optie '--' schakelt over naar de standaard opdrachtenmodus van 'xorriso'." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Stuur hulpvragen over 'xorriso' aan ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPTIE] BRON..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "inschakelen van ondersteuning voor %s..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Uw 'xorriso' ondersteunt '--grub2-boot-info' niet. Sommige functies zijn " +"uitgeschakeld. Gebruik xorriso-1.2.9 of nieuwer." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Uw 'xorriso' ondersteunt '--grub2-boot-info' niet. Uw core-image is te " +"groot. Opstarten als schijf is uitgeschakeld. Gebruik xorriso-1.2.9 of " +"nieuwer." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Een complete image (inclusief alle modules) genereren in de gekozen indeling." + +# XXX lowercase "e.g.", plus period +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Entpunt-syntax (bijvoorbeeld '/boot/grub/grub.cfg=./grub.cfg') wordt " +"geaccepteerd." + +# XXX transform to IMAGE... +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMAGE... AANKOPPELINGSPUNT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "een image en een aankoppelingspunt zijn vereist" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "gegeven argument is een systeemapparaat, niet een pad" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "items in uitvoer scheiden met ASCII NUL-tekens" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[standaard %s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "DOEL printen" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "beschikbare doelen zijn:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTIE...] [PAD|APPARAAT]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Zoekt naar apparaatinformatie voor een gegeven pad (of apparaat met optie '-" +"d')." + +# XXX no period +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "tekst lezen uit BESTAND" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "KLEUR gebruiken voor tekst" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "KLEUR gebruiken voor achtergrond" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "het te gebruiken label" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "dit BESTAND gebruiken als lettertype (PF2)" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Een Apple .disk_label weergeven." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Ontbrekende argumenten\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[PAD]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Controleert een GRUB-scriptconfiguratiebestand op syntaxfouten." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntaxfout in regelnummer %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Script '%s' bevat geen opdrachten en zal dus niets doen\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "BESTAND als opstart-image gebruiken [standaard %s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "BESTAND als core-image gebruiken [standaard %s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Geen apparaat opgegeven.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Images instellen om op te starten vanaf APPARAAT.\n" +"\n" +"Dit programma gebruikt u normaliter niet direct. Gebruik 'grub-install'." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" +"APPARAAT moet een besturingssyssteemnaam hebben (bijvoorbeeld /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Ongeldig apparaat '%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "hoofdmap tijdens draaien [standaard=/]." + +# XXX *at* runtime; single space; no period +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"huidige map van syslinux tijdens draaien [standaard is de oudermap van het " +"invoerbestand]" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "uitvoer schrijven naar BESTAND [standaard is standaarduitvoer]" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Een syslinux-configuratiebestand omzetten naar eentje voor GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "de kernel-image kan niet worden gecomprimeerd" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "onbekende compressie %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Decompressor is te groot" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "de core-image is te groot (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "de kernel-image is te groot (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "de grootte van diskboot.img moet %u bytes zijn" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img is niet de bekend-goede versie; doorgaan is op eigen risico" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "de firmware-image is te groot" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ongeldige regelopmaak: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "de eerste sector van het core-bestand is niet sector-uitgelijnd" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "niet-sector-uitgelijnde gegevens gevonden in het core-bestand" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "de sectoren van het core-bestand zijn te gefragmenteerd" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "de grootte van '%s' is niet %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "de grootte van '%s' is te klein" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Poging om GRUB op een schijf te installeren met meerdere partitielabels of " +"met zowel partitielabel als een bestandssysteem. Dit wordt nog niet " +"ondersteund." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"bestandssysteem in %s wordt niet herkend; veiligheidscontrole kan niet " +"worden uitgevoerd" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s blijkt een %s-bestandssysteem te bevatten waarvan bekend is dat er geen " +"ruimte voor DOS-achtig opstarten wordt gereserveerd. Installeren van GRUB " +"daarin kan VERNIELING VAN HET BESTANDSSYSTEEM tot gevolg hebben als " +"waardevolle gegevens worden overschreven door grub-setup. (Optie '--skip-fs-" +"probe' schakelt deze controle uit, op uw eigen risico.)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s blijkt een %s-partitietabel te bevatten waarvan bekend is dat er geen " +"ruimte voor DOS-achtig opstarten wordt gereserveerd. Installeren van GRUB " +"daarin kan VERNIELING VAN HET BESTANDSSYSTEEM tot gevolg hebben als " +"waardevolle gegevens worden overschreven door grub-setup. (Optie '--skip-fs-" +"probe' schakelt deze controle uit, op uw eigen risico.)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s blijkt een %s-partitietabel én een LDM te bevatten; dit is geen veilige " +"combinatie. Installeren van GRUB daarin kan VERNIELING VAN HET " +"BESTANDSSYSTEEM tot gevolg hebben als waardevolle gegevens overschreven " +"worden door 'grub-setup'. (Optie '--skip-fs-probe' schakelt deze controle " +"uit, op uw eigen risico.)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Poging om GRUB op een schijf zonder partities te installeren, of op een " +"partitie. Dit is een SLECHT idee." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Poging om GRUB op een schijf te installeren met meerdere partitielabels. " +"Dit wordt nog niet ondersteund." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partitiestijl '%s' kent geen inbedding" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Bestandssysteem '%s' kent geen inbedding" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Uw inbeddingsruimte is ongebruikelijk klein; core.img zal er niet in passen." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "de core-image bevat geen eindteken" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "Versie van core.img komt niet overeen" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"inbedding is niet mogelijk, maar dit is wel vereist bij RAID- en LVM-" +"installatie" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "kan bestandssysteem op %s niet achterhalen" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "bestandssysteem '%s' ondersteunt geen bloklijsten" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"inbedding is niet mogelijk, maar dit is wel vereist bij installatie over " +"meerdere schijven" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Inbedden is niet mogelijk. GRUB kan in deze configuratie alleen worden " +"geïnstalleerd met bloklijsten. Bloklijsten zijn echter ONBETROUWBAAR en het " +"gebruik ervan wordt ontraden." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "zal niet verder gaan met bloklijsten" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "bloklijsten zijn ongeldig" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "bloklijsten zijn incompleet" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Gebruik: %s -o UITVOERBESTAND CKBMAP-ARGUMENTEN...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Een GRUB-toetsenbordindelingsbestand maken." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "deze hulptekst tonen en stoppen" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "programmaversie tonen en stoppen" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" +"%s genereert een toetsenbordindeling voor GRUB met behulp van 'ckbcomp'\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" +"Rapporteer gebreken in het programma aan ;\n" +"meld fouten in de vertaling aan ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: optie vereist een argument -- '%s'\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Gebruik: %s [OPTIE]\\n" + +# XXX add period? +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Een GRUB-configuratiebestand aanmaken." + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" +"gegenereerd configuratiebestand uitvoeren naar BESTAND [standaard is " +"standaarduitvoer]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Onbekende optie '%s'\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: U moet dit uitvoeren als root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Niet gevonden.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Aanmaken van GRUB-configuratiebestand..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Er zijn syntaxfouten gevonden in het aangemaakte GRUB-configuratiebestand.\n" +"Verzeker u ervan dat er geen fouten zitten in het bestand /etc/default/grub\n" +"noch in de bestanden in /etc/grub.d/. Rapporteer anders een fout, met het\n" +"bestand %s als bijlage." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "voltooid" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Waarschuwing:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Gebruik: %s [OPTIE] MENU-ITEM\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Het standaardmenu-item voor GRUB instellen, alleen voor de volgende start." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "GRUB-images zoeken onder MAP/%s in plaats van de map %s" + +# XXX why such overlong lines? wrap at before eighty colums? +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENU-ITEM is het nummer, de titel, of het ID van een menu-item.\n" +"Voor items in submenu's of subsubmenu's dient eerst de submenu-component\n" +"en dan de item-component vermeld te worden. De titels dienen gescheiden\n" +"te worden met een groterdan-teken (>) zonder extra spaties. Afhankelijk\n" +"van uw shell dienen sommige tekens (waaronder >) aangehaald te worden.\n" +"Meer informatie hierover vindt u in de Grub-handleiding, in de sectie\n" +"over het 'default'-commando. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Meer dan één menu-item?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Geen menu-item gegeven." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Het standaardmenu-item voor GRUB instellen." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" +"Dit vereist het instellen van GRUB_DEFAULT=saved in %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "MENU-ITEM is het nummer, de titel, of het ID van een menu-item." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Een seriële terminal werd verzocht maar GRUB_SERIAL_COMMAND is niet " +"gegeven. Standaard parameters worden gebruikt." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Gevonden thema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Gevonden achtergrond: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Niet-ondersteunde image-indeling" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Het instellen van GRUB_TIMEOUT ongelijk aan nul terwijl GRUB_HIDDEN_TIMEOUT " +"ingesteld is, wordt niet langer ondersteund." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "GNU Mach gevonden: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Hurd-module gevonden: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"Enige Hurd-dingen zijn gevonden, maar niet genoeg om te kunnen starten." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, met Hurd %s (herstelmodus)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, met Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Gebruik niet de oude titel '%s' voor GRUB_DEFAULT; gebruik of '%s' (voor " +"versies vóór 2.00) of '%s' (voor 2.00 of later)." + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Laden van GNU Mach..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Laden van de Hurd..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Geavanceerde opties voor %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Laden van kernel van Illumos..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, met kFreeBSD %s (herstelmodus)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, met kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Laden van kernel van FreeBSD %s..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Kernel van FreeBSD gevonden: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Map voor kernelmodules gevonden: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, met Linux %s (herstelmodus)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, met Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Laden van Linux %s..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Laden van initiële RAM-schijf..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Linux-image gevonden: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Initiële RAM-schijf-image gevonden: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, met kernel %s (via %s, herstelmodus)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, met kernel %s (via %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Kernel van NetBSD gevonden: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (lader)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (lader)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "%s gevonden op %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bits)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bits)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(op %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, met Xen %s en Linux %s (herstelmodus)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, met Xen %s en Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, met Xen-hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Laden van Xen %s..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen-hypervisor, versie %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Geavanceerde opties voor %s (met Xen-hypervisor)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "%s gevonden op %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s wordt nog niet ondersteund door 'grub-mkconfig'.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Niet-ondersteunde vervangingsvlag: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Onbekende 'gsub'-lettertypefunctie 0x%x (%s)\n" + +#~ msgid "assume isolinux." +#~ msgstr "isolinux aannemen" + +#~ msgid "assume pxelinux." +#~ msgstr "pxelinux aannemen" + +#~ msgid "assume syslinux." +#~ msgstr "syslinux aannemen" + +#~ msgid "%s is neither hfs nor hfsplus" +#~ msgstr "%s is noch 'hfs' noch 'hfsplus'" + +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "Kopieert GRUB-images naar netwerkmap/submap/doelcpu-platform." + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "tonen van bestandssysteemmodule, GRUB-schijf, systeemapparaat, " +#~ "partitietabelmodule, abstractiemodule, of UUID van " +#~ "versleutelingscontainer [standaard is 'fs' (bestandssysteem)]" + +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "MAP gebruiken als hoofdmap [standaard=/]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Adresbereik waar geen RAM aanwezig is" + +#~ msgid "PUBKEY_FILE" +#~ msgstr "PUBLIEKESLEUTELBESTAND" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "'grub_memalign' wordt niet ondersteund op uw systeem" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Als BESTANDSNAAM '-' is, wordt de standaardwaarde %s gebruikt." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "alleen de ASCII-bitkaarten opslaan" + +#~ msgid "create width summary file" +#~ msgstr "een breedtesamenvattingsbestand aanmaken" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Optie '--ascii-bitmaps' accepteert geen bereiken (het gebruikt altijd " +#~ "ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "" +#~ "WAARSCHUWING: het is niet zeker dat uw generator van willekeurige " +#~ "gegevens veilig is\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "lezen van de eerste sector van de core-image is mislukt" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "dit BESTAND gebruiken als 'grub-setup'" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "dit BESTAND gebruiken als 'grub-mkrelpath'" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "dit BESTAND gebruiken als 'grub-probe'" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "INSTALLATIE-APPARAAT moet een systeemapparaat-bestandsnaam zijn" + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Pad '%s' is bij opstarten niet leesbaar voor GRUB. Installatie is " +#~ "onmogelijk. Gestopt.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Automatische detectie van bestandssysteem van %s is mislukt.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Probeer het met optie '--recheck'." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Als de fout blijft optreden, rapporteer dit dan aan <%2$s> samen met de " +#~ "uitvoer van '%$1s'." + +#~ msgid "`%s' failed.\\n" +#~ msgstr "'%s' is mislukt.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "Kan geen GRUB-schijf vinden voor %s; kan geen EFI-opstartmanager-item " +#~ "aanmaken.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Aanmaken van 'grub.cfg'..." + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "dit BESTAND gebruiken als 'grub-glue-efi'" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "dit BESTAND gebruiken als 'grub-render-label'" + +#~ msgid "Packed pixel " +#~ msgstr "Packed pixel " + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "GRUB-images uit MAP gebruiken; gaat voor DOEL" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "Opslaginfo voor '%s' bevat niet de naam" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "Ongeldige naamlengte voor opslaginfo voor '%s'" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "Opslagnaam voor '%s' eindigt niet op NUL-teken" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "Kan fysiek volumen '%s' niet vinden. Controleer uw 'device.map'." + +#~ msgid "diskboot.img is not one sector size" +#~ msgstr "de grootte van diskboot.img is niet één sector" + +#~ msgid "loopback command fails" +#~ msgstr "het 'loopback'-commando is mislukt" + +#~ msgid "cryptomount command fails: %s" +#~ msgstr "het 'cryptomount'-commando is mislukt: %s" + +#~ msgid "%s: option requires an argument -- `%s'" +#~ msgstr "%s: optie vereist een argument -- '%s'" + +#~ msgid "Make GRUB rescue image." +#~ msgstr "Een noodhulpafbeelding van GRUB maken." + +#~ msgid "Show v2 and v3 tablesv only." +#~ msgstr "Alleen de v2- en v3-tabellen tonen." + +#~ msgid "Unknown " +#~ msgstr "(onbekend) " + +#~ msgid "Try `%s --help' for more information.\n" +#~ msgstr "Typ '%s --help' voor meer informatie.\n" + +#~ msgid "Usage: %s [OPTION] install_device" +#~ msgstr "Gebruik: %s [OPTIE] INSTALLATIE-APPARAAT" + +#~ msgid "Usage: %s [OPTION] [install_device]" +#~ msgstr "Gebruik: %s [OPTIE] [INSTALLATIE-APPARAAT]" + +#~ msgid "Usage: %s [OPTION] install_device\\n" +#~ msgstr "Gebruik: %s [OPTIE] INSTALLATIE-APPARAAT\\n" + +#~ msgid "Usage: %s [OPTION] entry\\n" +#~ msgstr "Gebruik: %s [OPTIE] ITEM\\n" + +#~ msgid "Expose v1 tables." +#~ msgstr "De v1-tabellen tonen." + +#~ msgid "Fake BIOS." +#~ msgstr "Nep-BIOS." + +#~ msgid "Check hash list file." +#~ msgstr "Hash-lijstbestand controleren." + +#~ msgid "DIRECTORY" +#~ msgstr "MAP" + +#~ msgid "Unload PXE environment." +#~ msgstr "PXE-omgeving de-activeren." + +#~ msgid "Read word from PORT." +#~ msgstr "Een word lezen uit POORT." + +#~ msgid "Read dword from PORT." +#~ msgstr "Een dword lezen uit POORT." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "Het word WAARDE schrijven naar POORT." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "Het dword WAARDE schrijven naar POORT." + +#~ msgid "Read word from ADDR." +#~ msgstr "Een word lezen uit ADRES." + +#~ msgid "Read dword from ADDR." +#~ msgstr "Een dword lezen uit ADRES." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "Het word WAARDE schrijven naar ADRES." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "Het dword WAARDE schrijven naar ADRES." + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Definitie van menu-item (in vorm van tekenreeks)." + +#~ msgid "[DEVICE]" +#~ msgstr "[APPARAAT]" + +#~ msgid "Variable names to update with matches." +#~ msgstr "Met overeenkomsten bij te werken variabelenamen." + +#~ msgid "Authenticate users" +#~ msgstr "Gebruikers authenticeren" + +#~ msgid "UTF-8 visual" +#~ msgstr "visuele UTF-8" + +#~ msgid "write error" +#~ msgstr "schrijffout" + +#~ msgid "open error" +#~ msgstr "fout bij openen" + +#~ msgid "seek error" +#~ msgstr "'seek'-fout" + +#~ msgid "Hex dump FILE." +#~ msgstr "Een hex-dump tonen van BESTAND." + +#~ msgid "Must use absolute path.\n" +#~ msgstr "U dient een absoluut pad te gebruiken.\n" + +#~ msgid "the core image is too small" +#~ msgstr "de core-afbeelding is te klein" + +#~ msgid "prefix is too long" +#~ msgstr "voorvoegsel is te lang" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Gebruik: %s [OPTIE...] [MODULES]\n" +#~ "\n" +#~ "Maakt een opstartbare afbeelding van GRUB.\n" +#~ "\n" +#~ " -d, --directory=MAP afbeeldingen en modules onder MAP gebruiken;\n" +#~ " [standaard=%s]\n" +#~ " -p, --prefix=MAP de grub_prefix-MAP instellen [standaard=%s]\n" +#~ " -m, --memdisk=BESTAND BESTAND als een memdisk-afbeelding inbedden\n" +#~ " -c, --config=BESTAND BESTAND als boot-configuratie inbedden\n" +#~ " -n, --note een NOTE-segment toevoegen voor CHRP Open " +#~ "Firmware\n" +#~ " -o, --output=BESTAND een aangemaakte afbeelding naar BESTAND " +#~ "schrijven;\n" +#~ " [standaard=standaarduitvoer]\n" +#~ " -O, --format=INDELING een afbeelding in INDELING aanmaken;\n" +#~ " mogelijk zijn: %s\n" +#~ " -C, --compression=(xz|none|auto) de te gebruiken compressie\n" +#~ " -h, --help deze hulptekst tonen en stoppen\n" +#~ " -V, --version programmaversie tonen en stoppen\n" +#~ " -v, --verbose uitgebreide meldingen weergeven\n" +#~ "\n" +#~ "Rapporteer programmafouten aan <%s>.\n" + +#~ msgid "cannot open %s" +#~ msgstr "kan %s niet openen" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "inbedding is niet mogelijk, maar dit is wel vereist als het root-device " +#~ "op een RAID-array of LVM-volumen staat" + +#~ msgid "DEV" +#~ msgstr "APP" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "APP als root-apparaat gebruiken [standaard is raden (guessed)]" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "kan het root-apparaat niet raden; gebruik de optie '--root-device'" + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "Met VESA-BIOS compatibele video-modussen tonen." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "VESA BIOS Extension 2.0+-ondersteuning testen." + +#~ msgid "Set the root device." +#~ msgstr "Het root-apparaat instellen." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "Een harde schijf met partities nabootsen." + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "" +#~ "Poging om GRUB in een partitie te installeren in plaats van de MBR. Dit " +#~ "is een SLECHT idee." + +#~ msgid "No DOS-style partitions found" +#~ msgstr "Geen DOS-achtige partities gevonden" + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "wanneer u toch echt bloklijsten wilt, gebruik dan optie '--force'" + +#~ msgid "A boot catalog exists and appears corrupted.\n" +#~ msgstr "Een opstartcatalogus bestaat en lijkt misvormd.\n" + +#~ msgid "Please check the following file: %s.\n" +#~ msgstr "Controleer het volgende bestand: %s.\n" + +#~ msgid "This file must be removed before a bootable CD can be done.\n" +#~ msgstr "" +#~ "Dit bestand moet worden verwijderd voordat een opstartbare CD gemaakt kan " +#~ "worden.\n" + +#~ msgid "Error creating boot catalog (%s)" +#~ msgstr "Aanmaken van boot-catalogus is mislukt (%s)" + +#~ msgid "Error writing to boot catalog (%s)" +#~ msgstr "Schrijven naar boot-catalogus is mislukt (%s)" + +#~ msgid "Boot catalog cannot be found!\n" +#~ msgstr "Boot-catalogus is niet gevonden!\n" + +#~ msgid "Boot image cannot be found!\n" +#~ msgstr "Boot-afbeelding is niet gevonden!\n" + +#~ msgid "" +#~ "\n" +#~ "Size of boot image is %d sectors" +#~ msgstr "" +#~ "\n" +#~ "Grootte van boot-afbeelding is %d sectoren" + +#~ msgid "No emulation\n" +#~ msgstr "Geen emulatie\n" + +#~ msgid "Emulating a 1.44 meg floppy\n" +#~ msgstr "Emuleren van een 1.44 Mb floppy\n" + +#~ msgid "Emulating a 2.88 meg floppy\n" +#~ msgstr "Emuleren van een 2.88 Mb floppy\n" + +#~ msgid "Emulating a 1.2 meg floppy\n" +#~ msgstr "Emuleren van een 1.2 Mb floppy\n" + +#~ msgid "" +#~ "\n" +#~ "Error - boot image is not the an allowable size.\n" +#~ msgstr "" +#~ "\n" +#~ "Fout -- grootte boot-afbeelding is niet toegestaan.\n" + +#~ msgid "Error opening boot catalog for update" +#~ msgstr "Openen van boot-catalogus voor bijwerken is mislukt" + +#~ msgid "Error writing to boot catalog" +#~ msgstr "Schrijven naar boot-catalogus is mislukt" + +#~ msgid "Error opening boot image file '%s' for update" +#~ msgstr "Openen van boot-afbeeldingsbestand `%s' voor bijwerken is mislukt" + +#~ msgid "Odd alignment at non-end-of-file in boot image '%s'" +#~ msgstr "" +#~ "Vreemde uitlijning bij niet-einde-van-bestand in boot-afbeelding `%s'" + +#~ msgid "Boot image file '%s' changed unexpectedly" +#~ msgstr "Boot-afbeeldingsbestand `%s' is onverwacht gewijzigd" + +#~ msgid "Error writing to boot image (%s)" +#~ msgstr "Schrijven naar boot-afbeelding (%s) is mislukt" + +#~ msgid "Unable to generate sane path tables - too many directories (%d)\n" +#~ msgstr "" +#~ "Genereren van degelijke padtabellen is mislukt - te veel mappen (%d)\n" + +#~ msgid "Entry %d not in path tables\n" +#~ msgstr "Invoer %d niet in padtabellen\n" + +#~ msgid "Fatal goof - directory has amnesia\n" +#~ msgstr "Fatale flater - map leidt aan geheugenverlies\n" + +#~ msgid "Joliet path table lengths do not match %d %d\n" +#~ msgstr "Lengten Joliet-padtabel komen niet overeen met %d %d\n" + +#~ msgid "Unable to locate relocated directory\n" +#~ msgstr "Kan verplaatste map niet vinden\n" + +#~ msgid "Fatal goof - unable to find directory location\n" +#~ msgstr "Fatale flater - maplocatie is niet gevonden\n" + +#~ msgid "Unexpected joliet directory length %d %d %s\n" +#~ msgstr "Onverwachte Joliet-maplengte %d %d %s\n" + +#~ msgid "Using \"%s\"\n" +#~ msgstr "Gebruikt \"%s\"\n" + +#~ msgid "%s:%d: name required\n" +#~ msgstr "%s:%d: naam is vereist\n" + +#~ msgid "%s:%d: equals sign required\n" +#~ msgstr "%s:%d: gelijkteken is vereist\n" + +#~ msgid "%s:%d: field name \"%s\" unknown\n" +#~ msgstr "%s:%d: veldnaam \"%s\" is onbekend\n" + +#~ msgid "Usage: %s [options] file...\n" +#~ msgstr "Gebruik: %s [opties] bestand...\n" + +#~ msgid "Required boot image pathname missing\n" +#~ msgstr "Vereiste padnaam van boot-afbeelding ontbreekt\n" + +#~ msgid "Required boot catalog pathname missing\n" +#~ msgstr "Vereiste padnaam boot-catalogus ontbreekt\n" + +#~ msgid "Ignoring -no-emul-boot (no-emulation is the default behaviour)\n" +#~ msgstr "-no-emul-boot negeren (geen emulatie is het standaardgedrag)\n" + +#~ msgid "Application-id string too long\n" +#~ msgstr "Tekenreeks voor Applicatie-ID is te lang\n" + +#~ msgid "Bibliographic filename string too long\n" +#~ msgstr "Tekenreeks voor Bibliografische bestandsnaam is te lang\n" + +#~ msgid "Copyright filename string too long\n" +#~ msgstr "Tekenreeks voor Copyright-bestandsnaam is te lang\n" + +#~ msgid "Preparer string too long\n" +#~ msgstr "Tekenreeks voor Voorbereider is te lang\n" + +#~ msgid "Publisher string too long\n" +#~ msgstr "Tekenreeks voor Uitgever is te lang\n" + +#~ msgid "System ID string too long\n" +#~ msgstr "Tekenreeks voor Systeem-ID is te lang\n" + +#~ msgid "Volume ID string too long\n" +#~ msgstr "Tekenreeks voor Schijf-ID is te lang\n" + +#~ msgid "Volume set ID string too long\n" +#~ msgstr "Tekenreeks voor Schijvenset-ID is te lang\n" + +#~ msgid "Volume set sequence number too big\n" +#~ msgstr "Volgordenummer schijvenset is te groot\n" + +#~ msgid "date string must be 16 characters.\n" +#~ msgstr "datumtekenreeks dient 16 tekens te bedragen.\n" + +#~ msgid "Multisession usage bug: Must specify -C if -M is used.\n" +#~ msgstr "" +#~ "Fout in gebruik multisessie: -C moet worden opgegeven bij gebruik van -" +#~ "M.\n" + +#~ msgid "" +#~ "Warning: -C specified without -M: old session data will not be merged.\n" +#~ msgstr "" +#~ "Waarschuwing: -C opgegeven zonder -M: oude sessiegegevens worden niet " +#~ "samengevoegd.\n" + +#~ msgid "re-directing all messages to %s\n" +#~ msgstr "alle meldingen worden doorgestuurd naar %s\n" + +#~ msgid "can't open logfile: %s\n" +#~ msgstr "kan logbestand %s niet openen\n" + +#~ msgid "Unable to open previous session image %s\n" +#~ msgstr "Openen van vorige sessieafbeelding %s is mislukt\n" + +#~ msgid "Joliet tree sort failed.\n" +#~ msgstr "Sorteren van Joliet-boom is mislukt.\n" + +#~ msgid "Unable to open /dev/null\n" +#~ msgstr "Kan /dev/null niet openen\n" + +#~ msgid "Unable to open disc image file\n" +#~ msgstr "Kan bestand met schijfafbeelding niet openen\n" + +#~ msgid "Max brk space used %x\n" +#~ msgstr "Maximaal gebruikte brk-ruimte %x\n" + +#~ msgid "%llu extents written (%llu MiB)\n" +#~ msgstr "%llu extents geschreven (%llu MiB)\n" + +#~ msgid "Seek error on old image\n" +#~ msgstr "Zoekfout op oude afbeelding\n" + +#~ msgid "**Bad RR version attribute" +#~ msgstr "**Slecht RR-versieattribuut" + +#~ msgid "" +#~ "Warning: Neither Rock Ridge (-R) nor TRANS.TBL (-T) name translations " +#~ "were found on previous session. ISO (8.3) file names have been used " +#~ "instead.\n" +#~ msgstr "" +#~ "Waarschuwing: noch Rock Ridge (-R), noch TRANS.TBL (-T) naamvertalingen " +#~ "zijn gevonden bij de vorige sessie. In plaats daarvan zijn ISO (8.3) " +#~ "bestandsnamen gebruikt.\n" + +#~ msgid "Read error on old image %s\n" +#~ msgstr "Leesfout op oude afbeelding %s\n" + +#~ msgid "Special parameters for cdwrite not specified with -C\n" +#~ msgstr "Speciale parameter voor cdwrite niet opgegeven met -C\n" + +#~ msgid "Malformed cdwrite parameters\n" +#~ msgstr "Misvormde cdwrite-parameters\n" + +#~ msgid "symbolic link ``%s'' to long for one SL System Use Field, splitting" +#~ msgstr "" +#~ "symbolische koppeling ``%s'' te lang voor een SL System Use Field, wordt " +#~ "opgesplitst" + +#~ msgid "Unable to insert transparent compressed file - name conflict\n" +#~ msgstr "" +#~ "Kan transparant gecomprimeerd bestand niet invoegen - naamconflict\n" + +#~ msgid "Extension record too long\n" +#~ msgstr "Extensie-record is te lang\n" + +#~ msgid "Fatal goof\n" +#~ msgstr "Fatale flater\n" + +#~ msgid "Unable to generate unique name for file %s\n" +#~ msgstr "Genereren unieke naam voor bestand %s is mislukt\n" + +#~ msgid "Fatal error - RR overflow for file %s\n" +#~ msgstr "Fatale fout - RR-overloop voor bestand %s\n" + +#~ msgid "Translation table size mismatch %d %d\n" +#~ msgstr "Grootte vertaaltabel komt niet overeen %d %d\n" + +#~ msgid "Unable to locate directory parent\n" +#~ msgstr "Vinden van bovenliggende map is mislukt\n" + +#~ msgid "Overflow of stat buffer\n" +#~ msgstr "Overloop van stat-buffer\n" + +#~ msgid "Excluded by match: %s\n" +#~ msgstr "Uitgesloten via overeenkomst: %s\n" + +#~ msgid "Excluded: %s\n" +#~ msgstr "Uitgesloten: %s\n" + +#~ msgid "Non-existant or inaccessible: %s\n" +#~ msgstr "Niet-bestaand of ontoegankelijk: %s\n" + +#~ msgid "Symlink %s ignored - continuing.\n" +#~ msgstr "Symbolische koppeling %s genegeerd - doorgaan.\n" + +#~ msgid "Already cached directory seen (%s)\n" +#~ msgstr "Reeds gebufferde map gezien (%s)\n" + +#~ msgid "File %s is not readable (%s) - ignoring\n" +#~ msgstr "Bestand %s is niet leesbaar (%s) - negeren\n" + +#~ msgid "Directory loop - fatal goof (%s %lx %lu).\n" +#~ msgstr "Mappenlus - fatale flater (%s %lx %lu).\n" + +#~ msgid "Unknown file type %s - ignoring and continuing.\n" +#~ msgstr "Onbekend bestandstype %s - negeren en doorgaan.\n" + +#~ msgid "Hidden from ISO9660 tree: %s\n" +#~ msgstr "Verborgen voor ISO9660-boom: %s\n" + +#~ msgid "Hidden from Joliet tree: %s\n" +#~ msgstr "Verborgen voor Joliet-boom: %s\n" + +#~ msgid "Directories too deep %s\n" +#~ msgstr "Mappenstructuur is te diep %s\n" + +#~ msgid "Unable to delete non-empty directory\n" +#~ msgstr "Kan gevulde map niet verwijderen\n" + +#~ msgid "Unable to locate child directory in parent list\n" +#~ msgstr "Kan kind-map niet vinden in ouder-lijst\n" + +#~ msgid "Cannot open '%s'" +#~ msgstr "Openen van '%s' is mislukt" + +#~ msgid "%6.2f%% done, estimate finish %s" +#~ msgstr "%6.2f%% gedaan, verwachte afronding %s" + +#~ msgid "Cache hit for %s%s%s\n" +#~ msgstr "Bufferovereenkomst voor %s%s%s\n" + +#~ msgid "Unexpected directory length %d %d %s\n" +#~ msgstr "Onverwachte maplengte %d %d %s\n" + +#~ msgid "Continuation entry record length mismatch (%d %d).\n" +#~ msgstr "Recordlengtes van voortzettingsitem komt niet overeen (%d %d).\n" + +#~ msgid "Path table lengths do not match %d %d\n" +#~ msgstr "Lengtes van padtabel komen niet overeen %d %d\n" + +#~ msgid "Predicted = %d, written = %llu\n" +#~ msgstr "Verwacht = %d, weggeschreven = %llu\n" + +#~ msgid "Path table size(bytes): %d\n" +#~ msgstr "Grootte van padtabel (bytes): %d\n" diff --git a/po/pa.gmo b/po/pa.gmo new file mode 100644 index 0000000000000000000000000000000000000000..2960f0c58749f6fdde4d31ef2ca940403b7ba353 GIT binary patch literal 65330 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 KOqfj{S$_e?z++JW literal 0 HcmV?d00001 diff --git a/po/pa.po b/po/pa.po new file mode 100644 index 000000000..ed2deef6f --- /dev/null +++ b/po/pa.po @@ -0,0 +1,6695 @@ +# Punjabi Translation for grub +# Copyright (C) 2012 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# A S Alam , 2012. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.0.0-pre6\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2012-05-19 19:45+0530\n" +"Last-Translator: A S Alam \n" +"Language-Team: Punjabi \n" +"Language: pa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 1.4\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਸੀਰੀਅਲ ਪੋਰਟ ਸਪੀਡ" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਸੀਰੀਅਲ ਪੋਰਟ ਸਟਾਪ ਬਿੱਟ ਨੰਬਰ" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਸੀਰੀਅਲ ਪੋਰਟ ਸ਼ਬਦ ਲੰਬਾਈ" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "ਕਾਮਿਆਂ ਨਾਲ ਵੱਖ ਕੀਤੀ ਲਿਸਟ ਤੋਂ ਹੋਸਟ ਟੇਬਲ ਲੋਡ ਨਾ ਕਰੋ।" + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "ਕਾਮਿਆਂ-ਨਾਲ ਵੱਖ ਕੀਤੀ ਸੂਚੀ ਰਾਹੀਂ ਦਿੱਤੇ ਟੇਬਲ ਹੀ ਲੋਡ ਕਰੋ" + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "ਵਰਜਨ 1 ਟੇਬਲ ਨੂੰ OS ਲਈ ਐਕਸਪੋਰਟ ਕਰੋ।" + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "OS ਲਈ ਵਰਜਨ 2 ਅਤੇ ਵਰਜਨ 3 ਟੇਬਲ ਐਕਸਪੋਰਟ ਕਰੋ।" + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ਅਤੇ RSDT ਦਾ OEMID ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "" + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "" + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ਅਤੇ RSDT ਲਈ ਕਰੀਏਟਰ ਖੇਤਰ ਦਿਉ।" + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ਅਤੇ RSDT ਲਈ ਕਰੀਏਟਰ ਰੀਵਿਜ਼ਨ ਸੈੱਟ ਕਰੋ" + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "ਫਾਇਲ %s ਦਾ ਅਧੂਰਾ ਅੰਤ" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "ਗਲਤੀ: %s\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "ਮੈਮੋਰੀ ਖਤਮ ਹੋਈ" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "`%s' ਨੂੰ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI ਬੰਦ ਕਰਨਾ ਫੇਲ੍ਹ ਹੈ" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "ਜੰਤਰ ਦੀ ਸੂਚੀ।" + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "ਫਾਇਲ-ਨਾਂ ਦੀ ਲੋੜ ਸੀ" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ਫਾਇਲ" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "ਬਲਾਕ ਲਿਸਟ ਪਰਿੰਟ ਕਰੋ।" + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਕਰਨਲ ਲੋਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਬੂਟ ਕਰੋ।" + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +#, fuzzy +msgid "No boot time statistics is available\n" +msgstr "ਕੋਈ ਡਿਸਕ ਕੈਸ਼ ਅੰਕੜੇ ਉਪਲੱਬਧ ਨਹੀਂ ਹਨ\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "ਡਿਸਕ ਕੈਸ਼ ਅੰਕੜੇ: ਸਹੀ = %lu (%lu.%02lu%%), ਖੁੰਝੇ = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "ਕੋਈ ਡਿਸਕ ਕੈਸ਼ ਅੰਕੜੇ ਉਪਲੱਬਧ ਨਹੀਂ ਹਨ\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "ਡਿਸਕ ਕੈਸ਼ ਜਾਣਕਾਰੀ ਲਵੋ।" + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "ਫਾਇਲ ਦੀ ਸਮੱਗਰੀ ਵੇਖੋ।" + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "ਦੋ ਆਰਗੂਮੈਂਟ ਦੀ ਲੋੜ ਹੈ" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "`%s' ਫਾਇਲ ਦੀ `%s' ਨਾਲ ਤੁਲਨਾ:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "ਫਾਇਲ ਆਕਾਰ ਵਿੱਚ ਅੰਤਰ: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "ਫਾਇਲਾਂ ਇਕੋ ਜੇਹੀਆਂ ਹਨ।\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ਫਾਇਲ1 ਫਾਇਲ2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "ਦੋ ਫਾਇਲਾਂ ਦੀ ਤੁਲਨਾ।" + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "ਹੋਰ ਸੰਰਚਨਾ ਫਾਇਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "ਬਿਨਾਂ ਪਰਸੰਗ ਬਦਲੇ ਹੋਰ ਸੰਰਚਨਾ ਫਾਇਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "ਬਿਨਾਂ ਪਰਸੰਗ ਬਦਲੇ ਬਿਨਾਂ, ਪਰ ਕੇਵਲ ਮੇਨੂ ਐਟਰੀਆਂ ਨਾਲ ਹੋਰ ਸੰਰਚਨਾ ਫਾਇਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "ਬਿਨਾਂ ਪਰਸੰਗ ਬਦਲੇ ਬਿਨਾਂ, ਪਰ ਕੇਵਲ ਮੇਨੂ ਐਟਰੀਆਂ ਨਾਲ ਹੋਰ ਸੰਰਚਨਾ ਫਾਇਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[year-]month-day] [hour:minute[:second]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "ਮੌਜੂਦਾ ਸਮਾਂ-ਮਿਤੀ ਵੇਖਾਓ/ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "" + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "" + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] ਲਾਈਨ" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "ਟੈਕਸਟ ਦੀ ਲਾਈਨ ਵੇਖੋ।" + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "ਵਿਡੀਓ ਸਮੱਸਿਆ ਠੀਕ ਕਰੋ।" + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM ਈਮੇਜ਼ ਮੌਜੂਦ ਹੈ।" + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "ROM ਖੇਤਰ ਚਾਲੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।" + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "BIOS ਡੰਪ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "STRING" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "ਗਲਤ" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[OPTIONS] FONT_FILES" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "ਇੰਝ ਦਾ ਕੋਈ ਭਾਗ ਨਹੀਂ" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "ਨਵਾਂ MBR `%s' ਉੱਤੇ ਲਿਖਿਆ ਗਿਆ ਹੈ\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DEVICE [PARTITION[+/-[TYPE]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "ਕੰਪਿਊਟਰ ਬੰਦ ਕਰਦੀ ਹੈ। ਇਹ ਕਮਾਂਡ ਸਭ ਫਿਰਮਵੇਅਰ ਸਥਾਪਨ ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰਦੀ ਹੈ।" + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "ਵਰਤਣ ਲਈ ਹੈਸ਼ ਦਿਉ।" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "ਹੈਸ਼" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "ਹੈਸ਼ ਲਿਸਟ ਲਈ ਮੁੱਢਲੀ ਡਾਇਰੈਕਟਰੀ।" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "ਡਾਇ" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "ਪਹਿਲੀ ਗਲਤੀ ਦੇ ਬਾਅਦ ਨਾ ਰੁਕੋ।" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "ਚੈਕ-ਸਮ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਫਾਇਲ ਅਣ-ਕੰਪਰੈਸ ਕਰੋ।" + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ਪੜ੍ਹਨ ਗਲਤੀ\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: ਹੈਸ਼ ਮਿਲਦਾ ਨਹੀਂ\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: ਠੀਕ ਹੈ\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "ਹੈਸ਼ ਚੈਕ-ਸਮ ਕੱਢੋ ਜਾਂ ਚੈਕ ਕਰੋ।" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"ਤਕਨੀਕੀ ਪਾਵਰ ਪਰਬੰਧ ਸੈੱਟ ਕਰੋ\n" +"(1=ਘੱਟ, ..., 254=ਵੱਧ, 255=ਬੰਦ)" + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "ਪਾਵਰਡ ਮੋਡ ਵੇਖਾਉ।" + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "ATA ਸੁਰੱਖਿਆ ਸੈਟਿੰਗ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਤੱਕ ਫਰੀਜ਼ ਕਰੋ।" + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "ਸਮਾਰਟ ਹੈਲਥ ਹਾਲਤ ਵੇਖਾਉ।" + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"ਆਟੋਮੈਟਿਕ ਅਕੁਟਿਕ ਪਰਬੰਧ ਸੈੱਟ ਕਰੋ\n" +"(0=ਬੰਦ, 128=ਸ਼ਾਤ, ..., 254=ਤੇਜ਼)।" + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"ਸਟੈਂਡਬਾਏ ਸਮਾਂ-ਸਮਾਪਤੀ ਸੈੱਟ\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "ਸਟੈਂਡਬਾਏ ਮੋਡ ਲਈ ਡਰਾਇਵ ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "ਸਲੀਪ ਮੋਡ ਲਈ ਡਰਾਇਵ ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "ਡਰਾਇਵ ਪਛਾਣ ਅਤੇ ਸੈਟਿੰਗ ਪਰਿੰਟ ਕਰੋ।" + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "" + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART ਬੰਦ/ਚਾਲੂ (0/1)।" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "ਸੁਨੇਹੇ ਪਰਿੰਟ ਨਾ ਕਰੋ।" + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "ਇੱਕ ਆਰਗੂਮੈਂਟ ਚਾਹੀਦੀ ਸੀ" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIONS] ਡਿਸਕ" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA ਡਿਸਕ ਪੈਰਾਮੀਟਰ ਲਵੋ/ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "ਵਰਤੋਂ:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ਪੈਟਰਨ ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "ਮੱਦਦ ਸੁਨੇਹਾ ਵੇਖਾਉ।" + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "ਫਾਇਲ ਦੇ ਸ਼ੁਰੂ ਤੋਂ ਆਫਸੈੱਟ ਬਾਈਟ ਛੱਡੋ।" + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "ਕੇਵਲ LENGTH ਬਾਈਟ ਪੜ੍ਹੋ।" + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIONS] FILE_OR_DEVICE" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "ਫਾਇਲ ਜਾਂ ਮੈਮੋਰੀ ਦੀ ਕੱਚੀ ਸਮੱਗਰੀ ਵੇਖਾਉ।" + +#: grub-core/commands/i386/cmosdump.c:58 +#, fuzzy +msgid "Show raw dump of the CMOS contents." +msgstr "ਮੈਮੋਰੀ ਸਮੱਗਰੀ ਵੇਖਾਉ।" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +#, fuzzy +msgid "List coreboot tables." +msgstr "ਮੌਜੂਦਾ ਵੇਰੀਬਲ ਵੇਖਾਓ।" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "ਚੈੱਕ ਕਰੋ ਕਿ ਕੀ CPU 64-ਬਿੱਟ (ਲੰਮਾ) ਮੋਡ ਲਈ ਸਹਾਇਕ ਹੈ (ਡਿਫਾਲਟ)।" + +#: grub-core/commands/i386/cpuid.c:37 +#, fuzzy +msgid "Check if CPU supports Physical Address Extension." +msgstr "ਚੈੱਕ ਕਰੋ ਕਿ ਕੀ CPU 64-ਬਿੱਟ (ਲੰਮਾ) ਮੋਡ ਲਈ ਸਹਾਇਕ ਹੈ (ਡਿਫਾਲਟ)।" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "CPU ਫੀਚਰਾਂ ਲਈ ਚੈੱਕ ਕਰੋ।" + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "ਮੌਜੂਦਾ ਮੈਪਿੰਗ ਵੇਖੋ।" + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "ਸਭ ਮੈਪਿੰਗ ਲਈ ਡਿਫਾਲਟ ਮੁੱਲ ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "ਸਿੱਧੀ ਅਤੇ ਉਲਟ ਮੈਪਿੰਗ ਵਰਤੋਂ।" + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "ਕੋਈ ਡਰਾਇਵ ਮੁੜ-ਮੈਪ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS ਡਿਸਕ #num ------> GRUB/BIOS ਜੰਤਰ" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "BIOS ਡਰਾਇਵ ਮੈਪਿੰਗ ਪਰਬੰਧ।" + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "APM ਨੂੰ ਕੰਪਿਊਟਰ ਬੰਦ ਕਰਨ ਨਾ ਵਰਤੋਂ।" + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "ਜੇ APM ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸੰਭਵ ਹੋਵੇ ਤਾਂ ਸਿਸਟਮ ਬੰਦ ਕਰੋ।" + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "APM ਨਹੀਂ ਲੱਭਿਆ" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"ਵਰਜਨ %u.%u\n" +"32-ਬਿੱਟ CS = 0x%x, len = 0x%x, ਆਫਸੈਟ = 0x%x\n" +"16-ਬਿੱਟ CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-ਬਿੱਟ ਸੁਰੱਖਿਅਤ ਇੰਟਰਫੇਸ ਸਹਾਇਕ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-ਬਿੱਟ ਸੁਰੱਖਿਅਤ ਇੰਟਰਫੇਸ ਗ਼ੈਰ-ਸਹਾਇਕ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-ਬਿੱਟ ਸੁਰੱਖਿਅਤ ਇੰਟਰਫੇਸ ਸਹਾਇਕ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-ਬਿੱਟ ਸੁਰੱਖਿਅਤ ਇੰਟਰਫੇਸ ਗ਼ੈਰ-ਸਹਾਇਕ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU ਆਈਡਲ ਪਰੋਸੈਸਰ ਨੂੰ ਹੌਲੀ ਕਰਦਾ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU ਆਈਡਲ ਪਰੋਸੈਸਰ ਨੂੰ ਹੌਲੀ ਨਹੀਂ ਕਰਦਾ\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM ਬੰਦ ਕਰੋ\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM ਚਾਲੂ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM ਰੁੱਝਿਆ ਨਹੀ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM ਰੁੱਝਿਆ ਹੈ\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "APM ਜਾਣਕਾਰੀ ਵੇਖਾਉ।" + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "ਗਲਤ ਕਮਾਂਡ %s।\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "ਫਾਇਲ `%s' ਨਹੀਂ ਲੱਭੀ" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "ਬੇਪਛਾਣ ਨੰਬਰ" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "ਟਿਊਨ ਚਲਾਉ।" + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "numlock ਮੋਡ ਸੈੱਟ ਕਰੋ" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "capslock ਮੋਡ ਸੈੱਟ ਕਰੋ" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "scrolllock ਮੋਡ ਸੈੱਟ ਕਰੋ" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "ਖੱਬੀ ਸਿਫਟ ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "ਸੱਜੀ ਸਿਫਟ ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "SysRq ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "NumLock ਸਵਿੱਚ ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "CapsLock ਸਵਿੱਚ ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "ScrollLock ਸਵਿੱਚ ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "Insert ਸਵਿੱਚ ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "ਖੱਬੀ alt ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "ਸੱਜੀ alt ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "ਖੱਬੀ ctrl ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "ਸੱਜੀ ctrl ਦੱਬੋ" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "LED ਹਾਲਤ ਅੱਪਡੇਟ ਨਾ ਕਰੋ" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KEYSTROKE1] [KEYSTROKE2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "GRUB ਨੂੰ ਮੁੜ-ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ `go' ਚਲਾਉ।" + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "" + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "ਪੋਰਟ ਤੋਂ 8-ਬਿੱਟ ਮੁੱਲ ਪੜ੍ਹੋ।" + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "ਪੋਰਟ ਤੋਂ 16-ਬਿੱਟ ਮੁੱਲ ਪੜ੍ਹੋ।" + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "ਪੋਰਟ ਤੋਂ 32-ਬਿੱਟ ਮੁੱਲ ਪੜ੍ਹੋ।" + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VALUE [MASK]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "ਪੋਰਟ ਉੱਤੇ 8-ਬਿੱਟ ਮੁੱਲ ਲਿਖੋ।" + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "ਪੋਰਟ ਉੱਤੇ 16-ਬਿੱਟ ਮੁੱਲ ਲਿਖੋ।" + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VALUE [MASK]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "ਪੋਰਟ ਉੱਤੇ 32-ਬਿੱਟ ਮੁੱਲ ਲਿਖੋ।" + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "ਵੇਰੀਬਲ `%s' ਸੈਟ ਨਹੀਂ ਹੈ।" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "ਕੀਬੋਰਡ ਲੇਆਉਟ ਲੋਡ ਕਰੋ।" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "ਸਿਫ਼ਟ ਸਵਿੱਚ ਵੇਖੋ।" + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "ਕੰਟਰੋਲ ਸਵਿੱਚ ਵੇਖੋ।" + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "ਆਲਟ ਸਵਿੱਚ ਵੇਖੋ।" + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "" + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "ਕਮਾਂਡ `%s' ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕਦੀ।" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "ਪਾਸਵਰਡ ਦਿਓ: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ਫਾਇਲ [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSWD [ਫਾਇਲ]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "ਫਾਇਲ-ਨਾਂ ਦਿਉ।" + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FILE] variable_name [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "ਇੰਵਾਇਰਨਮੈਂਟ ਬਲਾਕ ਫਾਇਲ ਤੋਂ ਵੇਰੀਬਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f ਫਾਇਲ]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "ਇੰਵਾਇਰਨਮੈਂਟ ਬਲਾਕ ਫਾਇਲ ਤੋਂ ਵੇਰੀਬਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FILE] variable_name [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "" + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "ਹੋਰ ਵੇਰਵੇ ਸਮੇਤ ਜਾਣਕਾਰੀ ਲਈ ਲੰਮੀ ਸੂਚੀ ਵੇਖੋ।" + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "ਮਨੁੱਖੀ ਪੜਨਯੋਗ ਫਾਰਮੈਟ 'ਚ ਆਕਾਰ ਪਰਿੰਟ ਕਰੋ।" + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "ਸਭ ਫਾਇਲਾਂ ਦੀ ਸੂਚੀ" + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "ਨੈਟਵਰਕ ਪਰੋਟੋਕਾਲ:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [ਫਾਇਲ ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "ਜੰਤਰ ਅਤੇ ਫਾਇਲਾਂ ਵੇਖੋ।" + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "ਕੇਵਲ ਵਰਜਨ 1 ਟੇਬਲ ਹੀ ਵੇਖੋ।" + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "ਕੇਵਲ ਵਰਜਨ 2 ਅਤੇ ਵਰਜਨ 3 ਟੇਬਲ ਹੀ ਵੇਖੋ।" + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "ACPI ਜਾਣਕਾਰੀ ਵੇਖੋ।" + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "ਉਪਲੱਬਧ RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "ਰਾਖਵੀਂ RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI ਵਲੋਂ ਮੁੜ-ਦਾਅਵੇ-ਯੋਗ RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "ਖਰਾਬ RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +#, fuzzy +msgid "RAM holding coreboot tables" +msgstr "RAM ਕੋਲ ਫਿਰਮਵੇਅਰ ਕੋਡ ਹੈ" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM ਕੋਲ ਫਿਰਮਵੇਅਰ ਕੋਡ ਹੈ" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, ਲੰਬਾਈ = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, ਲੰਬਾਈ = 0x%llx, type = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "ਫਿਰਮਵੇਅਰ ਵਲੋਂ ਦਿੱਤੇ ਮੈਮੋਰੀ ਮੈਪ ਵੇਖਾਓ।" + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCI ਜੰਤਰਾਂ ਦੀ ਸੂਚੀ।" + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "ਮੇਨੂ ਐਂਟਰੀ ਕਿਸਮ।" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRING" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "ਇਹ ਐਂਟਰੀ ਨੂੰ ਬੂਟ ਕਰਨ ਦੇ ਯੋਗ ਯੂਜ਼ਰ ਦੀ ਸੂਚੀ।" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "USERNAME[,USERNAME]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "KEYBOARD_KEY" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "ਮੇਨੂ ਐਂਟਰੀ ਪਛਾਣਕਰਤਾ।" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "ਇਹ ਐਂਟਰੀ ਨੂੰ ਕਿਸੇ ਵੀ ਯੂਜ਼ਰ ਵਲੋਂ ਬੂਟ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "ਬਲਾਕ" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "ਮੇਨੂ ਐਂਟਰੀ ਦਿਉ।" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "ਸਬ-ਮੇਨੂ ਦਿਉ।" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "ਇਹ ਸੁਨੇਹਾ ਵੇਖਾਉ।" + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADDR [SIZE]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "ਮੈਮੋਰੀ ਸਮੱਗਰੀ ਵੇਖਾਉ।" + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "ਮੋਡੀਊਲ" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "ਮੋਡੀਊਲ ਹਟਾਉ।" + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "ਲੋਡ ਕੀਤੇ ਮੋਡੀਊਲ ਵੇਖਾਉ।" + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "ਗਰੱਬ ਤੋਂ ਬਾਹਰ ਆਉ।" + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s UUID ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "ਅਣਜਾਣ ਆਰਗੂਮੈਂਟ `%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "ਪਾਰਟੀਸ਼ਨ ਕਮਾਂਡ" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "ਯੂਜ਼ਰ ਪਾਸਵਰਡ" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "ਯੂਜ਼ਰ ਪਾਸਵਰਡ ਦਿਉ (ਪਲੇਨ-ਟੈਕਸਟ)। ਗ਼ੈਰ-ਸਿਫਾਰਸ਼ੀ ਅਤੇ ਅਸੁਰੱਖਿਅਤ" + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ਗਲਤ PBKDF2 ਪਾਸਵਰਡ" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USER PBKDF2_PASSWORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "ਯੂਜ਼ਰ ਪਾਸਵਰਡ (PBKDF2) ਦਿਉ। " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[vendor]:[device]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "ਜੰਤਰ ਨੂੰ ਬਸ ਉੱਤੇ ਇਸ ਦੀ ਸਥਿਤੀ ਨਾਲ ਚੁਣੋ।" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "ਨਾ-ਮੌਜੂਦ `%c' ਨਿਸ਼ਾਨ" + +#: grub-core/commands/pcidump.c:168 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[OPTION]... [PATH|DEVICE]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "" + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "ਡਰਾਇਵਰ ਜਾਣੋ।" + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "" + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "ਫਾਇਲ ਸਿਸਟਮ ਕਿਸਮ ਜਾਣੋ।" + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "ਫਾਇਲ ਸਿਸਟਮ UUID ਜਾਣੋ।" + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "ਫਾਇਲ ਸਿਸਟਮ ਲੇਬਲ ਜਾਣੋ।" + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "ਫਾਇਲ ਸਿਸਟਮ `%s' ਲੇਬਲ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ਜੰਤਰ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "ਜੰਤਰ ਜਾਣਕਾਰੀ ਲਵੋ।" + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "ਯੂਜ਼ਰ ਇੰਪੁੱਟ ਨਾਲ ਵੇਰੀਬਲ ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "ਕੰਪਿਊਟਰ ਮੁੜ-ਚਾਲੂ ਕਰੋ।" + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMBER:]VARNAME" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP STRING" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "" + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAME [VARIABLE] [HINTS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "ਜੰਤਰ ਫਾਇਲ ਨਾਲ ਲੱਭੋ।" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "ਫਾਇਲ-ਸਿਸਟਮ ਲੇਬਲ ਰਾਹੀਂ ਜੰਤਰ ਲੱਭੋ।" + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "ਫਾਇਲ-ਸਿਸਟਮ UUID ਰਾਹੀਂ ਜੰਤਰ ਲੱਭੋ।" + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "ਪਹਿਲੇ ਲੱਭੇ ਜੰਤਰ ਲਈ ਵੇਰੀਬਲ ਸੈੱਟ ਕਰੋ।" + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "ਕਿਸੇ ਫਲਾਪੀ ਡਰਾਇਵ ਦੀ ਖੋਜ ਨਾ ਕਰੋ।" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINT" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] ਨਾਂ" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d DEVICE] [-v VAR] [REGISTER][=VALUE[:MASK]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "" + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "ਵਰਬੋਸ ਗਿਣਤੀ।" + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "" + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NUMBER_OF_SECONDS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "ਦਿੱਤੇ ਸਕਿੰਟ ਲਈ ਉਡੀਕੋ ਜੀ।" + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +#, fuzzy +msgid "assume input is a syslinux configuration file." +msgstr "ਇੰਪੁੱਟ ਨੂੰ ਵਾਕ ਮੰਨੋ।" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:201 +#, fuzzy +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "ਬਿਨਾਂ ਪਰਸੰਗ ਬਦਲੇ ਬਿਨਾਂ, ਪਰ ਕੇਵਲ ਮੇਨੂ ਐਟਰੀਆਂ ਨਾਲ ਹੋਰ ਸੰਰਚਨਾ ਫਾਇਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/syslinuxcfg.c:207 +#, fuzzy +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "ਬਿਨਾਂ ਪਰਸੰਗ ਬਦਲੇ ਬਿਨਾਂ, ਪਰ ਕੇਵਲ ਮੇਨੂ ਐਟਰੀਆਂ ਨਾਲ ਹੋਰ ਸੰਰਚਨਾ ਫਾਇਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "ਕੋਈ ਟਰਮੀਨਲ ਨਹੀਂ ਦਿੱਤਾ।" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "ਟਰਮੀਨਲ `%s' ਨਹੀਂ ਲੱਭਿਆ" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "ਸਰਗਰਮ ਇੰਪੁੱਟ ਟਰਮੀਨਲ:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "ਉਪਲੱਬਧ ਇੰਪੁੱਟ ਟਰਮੀਨਲ:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "ਉਪਲੱਬਧ ਆਉਟਪੁੱਟ ਟਰਮੀਨਲ:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "ਉਪਲੱਬਧ ਆਉਟਪੁੱਟ ਟਰਮੀਨਲ:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "ਇੰਪੁੱਟ ਟਰਮੀਨਲ ਵੇਖਾਉ ਜਾਂ ਚੁਣੋ।" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "ਆਉਟਪੁੱਟ ਟਰਮੀਨਲ ਵੇਖਾਉ ਜਾਂ ਚੁਣੋ।" + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ਸਮੀਕਰਨ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "" + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ਸਮੀਕਰਨ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "ਇੱਕੋ ਫਾਇਲ ਨੂੰ ਕੋਈ ਢੰਗਾਂ ਨਾਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +#, fuzzy +msgid "invalid block size" +msgstr "ਗਲਤ ਫੋਂਟ ਰੇਜ਼" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, fuzzy, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "ਬਾਕੀ ਸਮਾਂ: %d.%03d ਸਕਿੰਟ \n" + +#: grub-core/commands/testspeed.c:92 +#, fuzzy, c-format +msgid "Speed: %s \n" +msgstr "Devid: %s\n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "ਕੋਈ ਕਮਾਂਡ ਨਹੀਂ ਦਿੱਤੀ" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "ਬਾਕੀ ਸਮਾਂ: %d.%03d ਸਕਿੰਟ \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "COMMAND [ARGS]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "ਕੁਝ ਨਾ ਕਰੋ, ਸਫ਼ਲ ਰਿਹਾ।" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "ਕੁਝ ਨਾ ਕਰੋ, ਅਸਫ਼ਲ ਰਿਹਾ।" + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USB ਸਹਿਯੋਗ ਟੈਸਟ ਕਰੋ।" + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, fuzzy, c-format +msgid "public key %08x not found" +msgstr "ਫਿਜ਼ੀਕਲ ਵਾਲੀਅਮ %s ਨਹੀਂ ਲੱਭਿਆ" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "ਮੋਡੀਊਲ `%s' ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "ਕੇਵਲ ਟੈਕਸਟ " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "ਸਿੱਧਾ ਰੰਗ, ਮਾਸਕ: %d/%d/%d/%d pos: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "ਪਲੇਨਰ " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "ਹਰੀਕੁਲਸ " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "ਗੈਰ-ਚੇਨ 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "ਇਕਹੇਰਾ ਰੰਗ " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "ਅਣਜਾਣ ਵਿਡੀਓ ਮੋਡ " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID ਵਰਜਨ: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " ਪਸੰਦੀਦਾ ਮੋਡ: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " ਕੋਈ ਪਸੰਦੀਦਾ ਮੋਡ ਉਪਲੱਬਧ ਨਹੀਂ\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "ਗਲਤ ਵਿਡੀਓ ਮੋਡ ਹਦਾਇਤ `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "ਸਹਾਇਕ ਵਿਡੀਓ ਮੋਡ ਦੀ ਸੂਚੀ:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "ਸੰਕੇਤ: ਮਾਸਕ/ਸਥਿਤੀ=ਲਾਲ/ਹਰਾ/ਨੀਲਾ/ਰਾਖਵਾਂ" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "ਅਡੈਪਟਰ `%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " ਕੋਈ ਜਾਣਕਾਰੀ ਨਹੀਂ" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " ਵਿਡੀਓ ਅਡੈਪਟਰ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[WxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "ਵਿਡੀਓ ਸਬ-ਸਿਸਟਮ ਟੈਸਟ।" + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VARNAME]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "UUID ਰਾਹੀਂ ਮਾਊਂਟ।" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "ਸਭ ਮਾਊਂਟ।" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "`%s' ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "SOURCE|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "ਕ੍ਰਿਪਟੂ ਜੰਤਰ ਮਾਊਂਟ ਕਰੋ।" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "ਫਿਜ਼ੀਕਲ ਵਾਲੀਅਮ %s ਨਹੀਂ ਲੱਭਿਆ" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "sha256 ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "sha512 ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "ELI ਮੇਟਾਡਾਟਾ ਪੜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "...ਮਾਸਟਰ ਕੁੰਜੀ ਡਿ-ਕ੍ਰਿਪਟ ਦੀ ਕੋਸ਼ਿਸ਼ ਜਾਰੀ" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "%s%s%s (%s) ਲਈ ਸ਼ਬਦ ਦਿਉ: " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "ਸਲਾਟ %d ਖੁੱਲ੍ਹੀ ਹੈ\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "ਡਿਸਕ `%s' ਤੋਂ ਬਾਹਰ ਪੜਨ ਜਾਂ ਲਿਖਣ ਦੀ ਕੋਸ਼ਿਸ਼" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "CD-ROM ਉੱਤੇ ਲਿਖਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "ਦਿੱਤਾ ਲੂਪ-ਬੈਕ ਜੰਤਰ ਹਟਾਉ।" + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] DEVICENAME ਫਾਇਲ।" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "ਫਾਇਲ ਤੋਂ ਵਰਚੁਅਲ ਡਰਾਇਵ ਬਣਾਉ।" + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "ਕੋਈ ਸਿੰਬਲ ਟੇਬਲ ਨਹੀਂ" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "" + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "" + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "ਸਿੰਬਲ `%s' ਨਹੀਂ ਲੱਭਿਆ" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "ਲੋਡ ਕੀਤੇ ਫੋਂਟ:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "...ਫਾਇਲ" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "ਲੋਡ ਕਰਨ ਲਈ ਇੱਕ ਜਾਂ ਵੱਧ ਫੋਂਟ ਫਾਇਲਾਂ ਦਿਉ।" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "ਲੋਡ ਕੀਤੇ ਫੋਂਟ ਦੀ ਸੂਚੀ।" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਹੈ" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "ਨਿਯਮਤ ਫਾਇਲ ਨਹੀਂ" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "ਗਲਤ ਫਾਇਲ ਨਾਂ `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "ਚੈਕਸਮ ਜਾਂਚ ਫੇਲ੍ਹ ਹੋਈ" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "ਕੋਈ ਡਿ-ਕ੍ਰਿਪਟਸ਼ਨ ਕੁੰਜੀ ਉਪਲੱਬਧ ਨਹੀਂ" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC ਜਾਂਚ ਫੇਲ੍ਹ ਹੋਈ" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "ਇੰਪੁੱਟ ਨੂੰ ਰਾਅ ਮੰਨੋ।" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "ਇੰਪੁੱਟ ਨੂੰ ਹੈਕਸਾ ਮੰਨੋ।" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "ਇੰਪੁੱਟ ਨੂੰ ਵਾਕ ਮੰਨੋ।" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "ZFS ਪਾਸਵਰਡ ਦਿਉ: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FILE]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "ਵਰਚੁਅਲ ਜੰਤਰ ਹਟਾਇਆ ਗਿਆ" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "ਵਰਚੁਅਲ ਜੰਤਰ ਖਰਾਬ ਹੈ" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "ਵਰਚੁਅਲ ਜੰਤਰ ਆਫਲਾਈਨ ਹੈ" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "ਵਰਚੁਅਲ ਜੰਤਰ ਡੀ-ਗਰੇਡ ਕੀਤਾ" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "ਵਰਚੁਅਲ ਜੰਤਰ ਆਨਲਾਈਨ ਹੈ" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "ਗਲਤ ਵਰਚੁਅਲ ਜੰਤਰ: ਕੋਈ ਕਿਸਮ ਉਪਲੱਬਧ ਨਹੀਂ" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "ਬੂਟ-ਪਾਥ: ਨਾ-ਉਪਲੱਬਧ\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "ਬੂਟ-ਪਾਥ: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "ਪਾਥ: ਨਾ-ਉਪਲੱਬਧ" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "ਪਾਥ: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Devid: ਨਾ-ਉਪਲੱਬਧ" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Devid: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +#, fuzzy +msgid "Incorrect VDEV" +msgstr "ਗਲਤ ਮਿੱਰਰ" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "ਅਣਜਾਣ ਵਰਚੁਅਲ ਜੰਤਰ ਕਿਸਮ: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "ਪੂਲ ਹਾਲਤ: ਸਰਗਰਮ" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "ਪੂਲ ਹਾਲਤ: ਐਕਸਪੋਰਟ" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "ਪੂਲ ਹਾਲਤ: ਨਸ਼ਟ ਕੀਤਾ" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "ਪੂਲ ਹਾਲਤ: ਨਾ-ਉਪਲੱਬਧ" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "ਪੂਲ ਨਾਂ: ਨਾ-ਉਪਲੱਬਧ" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "ਪੂਲ ਨਾਂ: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "ਪੂਲ GUID: ਨਾ-ਮੌਜੂਦ" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "ਪੂਲ GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "ਪੂਲ ਹਾਲਤ ਲੈਣ ਲਈ ਅਸਮਰੱਥ" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "ਕੋਈ ਵਰਚੁਅਲ ਜੰਤਰ ਟਰੀ ਉਪਲੱਬਧ ਨਹੀਂ" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FILESYSTEM [VARIABLE]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "ਫਾਇਲ ਦਾ ਅੰਤ ਅਚਾਨਕ ਹੈ।" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "ਲਾਈਨਾਂ ਨੂੰ ਮੌਜੂਦਾ ਸੈਟਿੰਗ ਨਾਲ ਅਨੁਵਾਦ ਕਰੋ।" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"ਚੁਣੇ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ (OS) ਵਿੱਚ ਬੂਟ ਕਰਨ ਲਈ Enter, ਬੂਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਕਮਾਂਡ ਸੋਧਣ ਲਈ `e' ਜਾਂ " +"ਕਮਾਂਡ-ਲਾਈਨ ਲਈ `c' ਦੱਬੋ।" + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: ਬੂਟ, `e': ਚੋਣਾਂ, `c': ਕਮਾਂਡ-ਲਾਈਨ" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds ਬਾਕੀ।" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "ਗਰੱਬ ਬੂਟ ਮੇਨੂ" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ਜਾਂ: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr "[ਚੋਣ...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ `%s --help' ਜਾਂ `%s --usage' ਨਾਲ ਕੋਸ਼ਿਸ਼ ਕਰੋ।\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "ਬੱਗ ਜਾਣਕਾਰੀ %s ਨੂੰ ਭੇਜੋ।\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "ਅਣਜਾਣ ਸਿਸਟਮ ਗਲਤੀ" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "ਇਹ ਮੱਦਦ ਸੂਚੀ ਦਿਉ" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "ਸੰਖੇਪ ਵਰਤੋਂ ਸੁਨੇਹਾ ਦਿਉ" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "ਨਾਂ" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "ਪਰੋਗਰਾਮ ਨਾਂ ਸੈੱਟ ਕਰੋ" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "ਸਕਿੰਟ" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "ਸਕਿੰਟ ਸਕਿੰਟਾਂ ਲਈ ਰੋਕੋ (ਮੂਲ 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "ਪਰੋਗਰਾਮ ਵਰਜਨ ਛਾਪੋ" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAM ERROR) ਕੋਈ ਜਾਣਿਆ ਵਰਜਨ ਨਹੀਂ!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: ਬਹੁਤ ਆਰਗੂਮੈਂਟ\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: ਚੋਣ '%s' ਗਲਤ ਹੈ\n" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: ਚੋਣ '--%s' ਇੱਕ ਆਰਗੂਮੈਂਟ ਨਹੀਂ ਲੈਂਦੀ\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "'%s: ਚੋਣ '%c%s' ਇੱਕ ਆਰਗੂਮੈਂਟ ਨਹੀਂ ਲੈਂਦੀ\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: ਚੋਣ '--%s' ਲਈ ਇੱਕ ਆਰਗੂਮੈਂਟ ਚਾਹੀਦਾ\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: ਬੇ-ਪਛਾਣ ਚੋਣ '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: ਬੇ-ਪਛਾਣ ਚੋਣ '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ਗਲਤ ਚੋਣ -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: ਚੋਣ ਲਈ ਆਰਗੂਮੈਂਟ ਚਾਹੀਦਾ ਹੈ --'%c'\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: ਚੋਣ '-W %s' ਸਧਾਰਨ ਹੈ।\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: ਚੋਣ '-W %s' ਲਈ ਇੱਕ ਆਰਗੂਮੈਂਟ ਨਹੀਂ ਚਾਹੀਦਾ\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "ਸਫ਼ਲ" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "ਕੋਈ ਮੇਲ ਨਹੀਂ" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "ਗਲਤ ਰੈਗੂਲਰ ਸਮੀਕਰਨ" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "ਗਲਤ ਕਰੈਕਟਰ ਕਲਾਸ ਨਾਂ" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "ਨਾ ਮਿਲਦੇ [ ਜਾਂ [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "ਨਾ ਮਿਲਦੇ ( ਜਾਂ \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "ਨਾ-ਮਿਲਦੇ \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "ਗਲਤ ਅੰਤ ਰੇਜ਼" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "ਮੈਮੋਰੀ ਖਤਮ ਹੋਈ" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "ਨਿਯਮਤ ਸਮੀਕਰਨ ਬਹੁਤ ਵੱਡੀ ਹੈ" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "ਨਾ ਮਿਲਦੇ ) ਜਾਂ \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "ਅਣਜਾਣ regexp ਗਲਤੀ" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "ਕੋਈ ਪਿਛਲਾ ਨਿਯਮਤ ਸਮੀਕਰਨ ਨਹੀਂ" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "ਹੈਲੋ ਵਰਲਡ" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "`Hello World' ਕਹੋ।" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ gzip ਫਾਰਮੈਟ" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop ਫਾਇਲ ਨਿਕਾਰਾ ਹੈ" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VALUE]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "ਇੰਵਾਇਰਨਮੈਂਟ ਵੇਰੀਬਲ ਸੈੱਟ ਕਰੋ।" + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "ਇੰਵਾਇਰਨਮੈਂਟ ਵੇਰੀਬਲ ਹਟਾਉ।" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "ਜੰਤਰ ਜਾਂ ਫਾਇਲਾਂ ਦੀ ਸੂਚੀ।" + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "ਮੋਡੀਊਲ ਸ਼ਾਮਿਲ ਕਰੋ।" + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "ਡਿਸਕ `%s' ਨਹੀਂ ਲੱਭੀ" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "`%s' ਉੱਤੇ ਲਿਖਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "`%s' ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "DEVICE_NAME" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "ਰੂਟ ਜੰਤਰ ਸੈੱਟ ਕਰੋ।" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "ਵੇਰਵੇ ਸਮੇਤ ਸੁਨੇਹੇ ਛਾਪੋ।" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "" + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "ਕਮਾਂਡ ਲਾਈਨ ਆਰਗੂਮੈਂਟ ਪਾਰਸ ਕਰਨ ਵਿੱਚ ਗਲਤੀ।\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: ਚੇਤਾਵਨੀ:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: ਜਾਣਕਾਰੀ:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: ਗਲਤੀ:" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "ਫਿਰਮਵੇਅਰ ਈਮੇਜ਼ ਬਹੁਤ ਵੱਡਾ ਹੈ" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "ਅਣਜਾਣ ਫਾਇਲ ਸਿਸਟਮ" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "ਬੰਦ ਕਰਨਾ ਫੇਲ੍ਹ ਹੈ" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "ਬਾਹਰ ਜਾਣ ਲਈ ਫੇਲ੍ਹ" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "ਓਵਰਫਲੋ ਖੋਜਿਆ" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "ਅਣਜਾਣ ਕਮਾਂਡ `%s'।\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "ਇਹ ਮੱਦਦ ਵੇਖਾਉ ਅਤੇ ਬੰਦ ਕਰੋ।" + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "ਇਸ ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ ਵੇਖਾਉ ਅਤੇ ਬੰਦ ਕਰੋ।" + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "ਗਰੱਬ ਨਹੀਂ ਜਾਣਦਾ ਹੈ ਕਿ ਇਹ ਮਸ਼ੀਨ ਨੂੰ ਕਿਵੇਂ ਰੋਕਣਾ ਹੈ!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "ਮੁੜ-ਚਾਲੂ ਕਰਨ ਲਈ ਫੇਲ੍ਹ" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +#, fuzzy +msgid "invalid zImage" +msgstr "ਗਲਤ ਫੋਂਟ ਰੇਜ਼" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "ਗਲਤ ਜੰਤਰ `%s'।\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "ਲੀਨਕਸ ਲੋਡ ਕਰੋ।" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "initrd ਲੋਡ ਕਰੋ।" + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "XNU ਈਮੇਜ਼ ਲੋਡ ਕਰੋ।" + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਕਰਨਲ ਲੋਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, Xen ਹਾਈਪਰਵਾਈਜ਼ਰ ਨਾਲ" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "ਮੋਡੀਊਲ ਹਟਾਉ।" + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPTS]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "BIOS-ਅਧਾਰਿਤ ਸਿਸਟਮ ਬੂਟ ਕਰੋ।" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "ਹੋਰ ਬੂਟ ਲੋਡਰ ਲੋਡ ਕਰੋ।" + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "ਸਭ ਕਨਸੋਲ ਉੱਤੇ ਆਉਟਪੁੱਟ ਵੇਖੋ।" + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "ਸੀਰੀਅਥ ਕਨਸੋਲ ਵਰਤੋਂ।" + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "ਮੁੜ-ਚਾਲੂ ਕਰਨ ਲਈ ਫਾਇਲ ਨਾਂ ਪੁੱਛੋ।" + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "CD-ROM ਨੂੰ ਰੂਟ ਵਜੋਂ ਵਰਤੋਂ।" + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "" + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "" + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "ਸਭ ਬੂਟ ਆਉਟਪੁੱਟ ਬੰਦ ਕਰੋ।" + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "" + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "ਸਿੰਗਲ ਮੋਡ ਵਿੱਚ ਬੂਟ ਕਰੋ।" + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "" + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "ਮੁੜ-ਚਾਲੂ ਨਾ ਕਰੋ, ਸਿਰਫ਼ ਰੋਕੋ।" + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "ਸੰਰਚਿਤ ਜੰਤਰ ਬਦਲੋ।" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,SPEED]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMP ਬੰਦ।" + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPI ਬੰਦ।" + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "ਬੂਟ ਜਾਂਚ-ਪੜਤਾਲ ਸੁਨੇਹੇ ਨਾ ਵੇਖਾਉ।" + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "ਡੀਬੱਗ ਸੁਨੇਹਿਆਂ ਨਾਲ ਬੂਟ ਕਰੋ।" + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADDR|comUNIT][,SPEED]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "ਨਾਂ" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "ਕਿਸਮ" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "addr" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "ਸਾਈਜ਼" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "" + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "" + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "ਹੋਰ ਕੋਰਬੂਟ ਪਲੇਅਲੋਡ ਲੋਡ ਕਰੋ" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FILE" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "`%s' ਦਾ ਆਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "" + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "NTLDR ਜਾਂ BootMGR ਲੋਡ ਕਰੋ।" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBDEVICE=PLAN9DEVICE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGS" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Plan9 ਕਰਨਲ ਲੋਡ ਕਰੋ।" + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "" + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "ਮੋਡੀਊਲ ਹਟਾਉ।" + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "xnu ਚਲਾਉਣ ਲਈ ਕੋਈ ਵੀ ਸਵਿੱਚ ਦੱਬੋ।" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "FPSWA ਨਹੀਂ ਲੱਭਿਆ" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA ਰੀਵਿਜ਼ਨ: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FILE [ARGS...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "FPSWA ਵਰਜਨ ਵੇਖਾਉ।" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "" + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "" + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "" + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "" + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "ਬੈਕਗਰਾਊਂਡ ਚਿੱਤਰ ਮੋਡ।" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "XNU ਈਮੇਜ਼ ਲੋਡ ਕਰੋ।" + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64-ਬਿੱਜ਼ XNU ਈਮੇਜ਼ ਲੋਡ ਕਰੋ।" + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "" + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "" + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "ਡਾਇਰੈਕਟਰੀ [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "" + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "" + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADDR1,MASK1[,ADDR2,MASK2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "ਤੋਂ[K|M|G] ਤੱਕ[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "ਦਿੱਤੀ ਰੇਜ਼ ਵਿੱਚ ਕੋਈ ਵੀ ਮੈਮੋਰੀ ਖੇਤਰ ਹਟਾਉ।" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "DHCP ਜਾਣਕਾਰੀ ਨਹੀਂ ਲੱਭੀ" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[CARD]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "ਬੂਟ ਆਟੋ-ਸੰਰਚਨਾ ਕਰੋ" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +#, fuzzy +msgid "invalid argument" +msgstr "ਗਲਤ ਪੈਰਾਮੀਟਰ %s" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADDRESS DNSSERVER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-ਬਿੱਟ ਸੁਰੱਖਿਅਤ ਇੰਟਰਫੇਸ ਸਹਾਇਕ ਹੈ\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "ਟਿਕਾਣਾ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "ਰੂਟ ਲੂਪ ਖੋਜਿਆ" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "ਐਡਰੈਸ ਨਹੀਂ ਲੱਭਿਆ" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "ਕਾਰਡ ਨਹੀਂ ਲੱਭਿਆ" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "ਆਰਜ਼ੀ" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "ਅਣਜਾਣ ਐਡਰੈਸ ਕਿਸਮ %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "ਕੁਨੈਕਸ਼ਨ ਤੋਂ ਇਨਕਾਰ ਕੀਤਾ" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "ਕੁਨੈਕਸ਼ਨ ਸਮਾਂ-ਸਮਾਪਤ" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "ਯੂਜ਼ਰ ਨਾਂ ਦਿਉ: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[USERLIST]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "ਸੰਭਾਵਿਤ ਕਮਾਂਡ ਹਨ:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "ਸੰਭਾਵਿਤ ਜੰਤਰ:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "ਸੰਭਾਵਿਤ ਫਾਇਲਾਂ:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "ਸੰਭਾਵਿਤ ਪਾਰਟੀਸ਼ਨ:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "ਸੰਭਾਵਿਤ ਆਰਗੂਮੈਂਟ:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "" + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "ਐਤਵਾਰ" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "ਸੋਮਵਾਰ" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "ਮੰਗਲਵਾਰ" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "ਬੁੱਧਵਾਰ" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "ਵੀਰਵਾਰ" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "ਸ਼ੁੱਕਰਵਾਰ" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "ਸ਼ਨਿੱਚਰਵਾਰ" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "ਮੋਡੀਊਲ ਲੋਡ ਨਹੀਂ ਹੈ" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "ਗਨੂ ਗਰਬ ਵਰਜਨ %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ਕਿਸੇ ਵੀ ਸਮੇਂ ਬਾਹਰ ਜਾਣ ਲਈ ESC।" + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "ਸਕਰੀਨ ਸਾਫ਼ ਕਰੋ।" + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "ਸਧਾਰਨ ਮੋਡ 'ਚ ਜਾਉ।" + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "ਸਧਾਰਨ ਮੋਡ ਵਿੱਚੋਂ ਬਾਹਰ ਆਉ।" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "ਜਾਰੀ ਰੱਖਣ ਲਈ ਕੋਈ ਵੀ ਸਵਿੱਚ ਦੱਬੋ..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "`%s' ਬੂਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "`%s' ਲਈ ਫਾਲਬੈਕ" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "ਕਮਾਂਡ ਸੂਚੀ ਬੂਟ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "ਪਾਰਟੀਸ਼ਨ %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "ਜੰਤਰ %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "ਫਾਇਲ-ਸਿਸਟਮ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "ਫਾਇਲ ਸਿਸਟਮ ਕਿਸਮ %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- ਲੇਬਲ `%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- ਆਖਰੀ ਸੋਧ ਸਮਾਂ %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "ਅਣਜਾਣ ਫਾਇਲ ਸਿਸਟਮ ਕਿਸਮ ਖੋਜੀ" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr "" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - ਕੁੱਲ ਆਕਾਰ ਅਣਜਾਣ" + +#: grub-core/normal/misc.c:182 +#, fuzzy, c-format +msgid " - Total size %llu%sKiB" +msgstr " - ਕੁੱਲ ਆਕਾਰ %llu ਸੈਕਟਰ" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--ਹੋਰ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "OS ਫਾਇਲ `%s' ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +#, fuzzy +msgid "no compression is available for your platform" +msgstr "ਤੁਹਾਡੇ ਪਲੇਟਫਾਰਮ ਲਈ ਕੋਈ ਇਸ਼ਾਰਾ ਨਹੀਂ ਹੈ। ਕਾਰਗੁਜ਼ਾਰੀ ਘਟਣ ਦੀ ਉਮੀਦ ਹੈ।" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "ਇੰਕ੍ਰਿਪਟ ਕੀਤੇ ਵਾਲੀਅਮ `%s' ਨੂੰ ਮਾਊਂਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "geom ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਸਕਿਆ" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "`%s' ਨੂੰ ਠੀਕ ਤਰ੍ਹਾਂ ਪੜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "ਕੋਰ ਈਮੇਜ਼ ਵਿੱਚ ਕੋਈ ਟਰਮੀਨੇਟਰ ਨਹੀਂ ਹੈ" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION ਗਲਤੀ: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਰੇਡ ਵਰਜਨ: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO ਗਲਤੀ: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO ਗਲਤੀ: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "%s ਤੋਂ ਸਟਰੀਮ ਖੋਲ੍ਹਣ ਲਈ ਅਸਮਰੱਥ: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "ਅਣਜਾਣ ਜੰਤਰ ਕਿਸਮ %s\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "ਵਰਤੋਂUsage: %s ਜੰਤਰ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "ਪਾਈਪ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "ਅਸਲੀ ਡਾਇਰੈਕਟਰੀ ਰੀ-ਸਟੋਰ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "ਫਾਇਲ %s ਦਾ ਨਾਂ %s ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "ਅਸਲੀ ਡਾਇਰੈਕਟਰੀ ਰੀ-ਸਟੋਰ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, fuzzy, c-format +msgid "%s: not found" +msgstr "%s: ਨਹੀਂ ਲੱਭਿਆ\\n" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "ਤੁਹਾਨੂੰ `SystemPartition' ਅਤੇ `OSLoader' ਖੁਦ ਸੈੱਟ ਕਰਨਾ ਪਵੇਗਾ।" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() ਫੇਲ੍ਹ ਹੈ" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +#, fuzzy +msgid "couldn't retrieve random data" +msgstr "ELI ਮੇਟਾਡਾਟਾ ਪੜਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +#, fuzzy +msgid "unexpected EFI error" +msgstr "ਫਾਇਲ ਦਾ ਅਸਧਾਰਨ ਅੰਤ" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "ਪਾਰਟੀਸ਼ ਨੂੰ ਐਕਟਿਵ ਬਣਾਓ" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "ਕੋਈ ਪ੍ਰਾਈਮਰੀ ਪਾਰਟੀਸ਼ਨ ਨਹੀਂ" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "ਪਾਰਟੀਸ਼ਨ ਕਿਸਮ ਬਦਲੋ" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "ਗਲਤ ਵੇਰੀਬਲ ਨਾਂ `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "ਫਾਇਲ ਦਾ ਅਸਧਾਰਨ ਅੰਤ" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "ਲੂਪਾਂ ਤੋਂ ਬਾਹਰ" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "ਲੂਪਾਂ ਨਾਲ ਜਾਰੀ" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALUE]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "" + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] ਫਾਇਲ" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "ਰੰਗ" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +#, fuzzy +msgid "Show CBMEM console content." +msgstr "ਮੈਮੋਰੀ ਸਮੱਗਰੀ ਵੇਖਾਉ।" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "ਸੀਰੀਅਲ ਯੂਨਿਟ ਦਿਉ।" + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "" + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "" + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "" + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "" + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "" + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "ਸੀਰੀਅਲ ਯੂਨਿਟ ਦਿਉ।" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +#, fuzzy +msgid "unsupported serial port flow control" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਸੀਰੀਅਲ ਪੋਰਟ ਸ਼ਬਦ ਲੰਬਾਈ" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIONS...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "ਸੀਰੀਅਲ ਪੋਰਟ ਸੰਰਚਨਾ।" + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "ਅਣਜਾਣ ਇੰਕੋਡਿੰਗ" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "WIDTHxHEIGHT" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " ਕੁੱਲ ਮੈਮੋਰੀ: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "ਕੋਈ ਢੁੱਕਵਾਂ ਵਿਡੀਓ ਮੋਡ ਨਹੀਂ ਲੱਭਿਆ" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "ਅਸੈੱਸ ਪਾਬੰਦੀ ਹੈ" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "ਮੋਡੀਊਲ" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "ਵਰਤਣ ਲਈ ਕੰਪਰੈਸ਼ਨ ਚੁਣੋ" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "ਫਾਇਲ %s ਦਾ ਨਾਂ %s ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "ਡਿਸਕ ਮੌਜੂਦ ਨਹੀਂ ਹੈ, ਪਾਰਟੀਸ਼ਨ ਜੰਤਰ %s ਉੱਤੇ ਵਾਪਸ ਆਇਆ ਜਾ ਰਿਹਾ ਹੈ" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "ਕਮਾਂਡਾਂ:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "" + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "ਮੌਜੂਦਾ ਵੇਰੀਬਲ ਵੇਖਾਓ।" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAME=VALUE ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "ਵੇਰੀਬਲ ਸੈੱਟ।" + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAME ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "ਵੇਰੀਬਲ ਹਟਾਓ।" + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "ਚੋਣਾਂ:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "ਤੁਹਾਨੂੰ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਕਮਾਂਡ ਦੇਣਾ ਪਵੇਗੀ।\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FILENAME COMMAND" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "" + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "ਗਲਤ ਪੈਰਾਮੀਟਰ %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "OS ਫਾਇਲ `%s' ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "stdout ਲਈ ਲਿਖਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "OS ਫਾਇਲ %s ਖੋਲ੍ਹਣ 'ਚ ਗਲਤੀ: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PATH" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "" + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FILE LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FILE" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FILE LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "" + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FILE" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "" + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FILE" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "" + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FILE" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "" + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid ਜੰਤਰ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "" + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "ਇੰਪੁੱਟ ਫਾਇਲਾਂ ਦੀ ਗਿਣਤੀ ਦਿਉ।" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "ਡੀਬੱਗ ਇੰਵਾਇਰਨਮੈਂਟ ਵੇਰੀਬਲ ਦਿਉ।" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "ਕ੍ਰਿਪਟੂ ਜੰਤਰ ਮਾਊਂਟ ਕਰੋ।" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FILE|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "ਅਣ-ਕੰਪਰੈਸ ਡਾਟਾ।" + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "ਗਲਤ ਡਿਸਕ ਗਿਣਤੀ।\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "ਕਮਾਂਡ ਨਹੀਂ ਦਿੱਤੀ।\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "ਕਮਾਂਡ ਲਈ ਲੋੜੀਦੇ ਪੈਰਾਮੀਟਰ ਨਹੀਂ।\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "ਗਲਤ ਕਮਾਂਡ %s।\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE_PATH COMMANDS" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "ਫਾਇਲ-ਸਿਸਟਮ ਡਰਾਇਵਰ ਲਈ ਡੀਬੱਗ ਟੂਲ।" + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[ਚੋਣਾਂ]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "`%s' ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "`%s' ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "`%s' ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "`%s' ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "ਅਣਜਾਣ ਕੰਪਰੈਸ਼ਨ ਫਾਰਮੈਟ %s" + +#: util/grub-install-common.c:389 +#, fuzzy, c-format +msgid "Unrecognized compression `%s'" +msgstr "%s: ਬੇ-ਪਛਾਣ ਚੋਣ '--%s'\n" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "ਅਣਜਾਣ ਟਾਰਗੇਟ ਫਾਰਮੈਟ %s\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "ਕਮਾਂਡ `%s' ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕਦੀ।" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "ਗਲਤ ਫਾਇਲ ਨਾਂ `%s'" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "ਅਣਜਾਣ ਆਰਗੂਮੈਂਟ `%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "ਇੱਕ ਤੋਂ ਵੱਧ ਇੰਸਟਾਲ ਜੰਤਰ ਹਨ?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ਟਾਰਗੇਟ" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "ਜੰਤਰ ਮੈਪ ਜੇ ਮੌਜੂਦ ਹੋਵੇ ਤਾਂ ਹਟਾ ਦਿਉ" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "ਭਾਵੇਂ ਸਮੱਸਿਆ ਆਵੇ ਤਾਂ ਵੀ ਇੰਸਟਾਲ ਕਰੋ" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "ਜੰਤਰ ਵਿੱਚ ਫਾਇਲ-ਸਿਸਟਮ ਲਈ ਜਾਂਚ ਨਾ ਕਰੋ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +#, fuzzy +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "ਬੂਟ ਲੋਡ ਦਾ ID ਹੈ। ਇਹ ਚੋਣ ਕੇਵਲ EFI ਲਈ ਹੀ ਉਪਲੱਬਧ ਹੈ।" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "ਵਰਤੋ: %s [OPTION] [INSTALL_DEVICE]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "ਆਪਣੀ ਡਰਾਇਵ ਉੱਤੇ ਗਰਬ ਇੰਸਟਾਲ ਕਰੋ" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "ਇੰਸਟਾਲ ਜੰਤਰ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।" + +#: util/grub-install.c:1043 +#, fuzzy +msgid "cannot find EFI directory" +msgstr "ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਹੈ" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "%s ਲਈ ਜੰਤਰ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ (ਕੀ /dev ਮਾਊਂਟ ਹੈ?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "%s ਲਈ ਗਰਬ ਡਰਾਇਵ ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕਦੀ। ਆਪਣੀ device.map ਵੇਖੋ" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "ਪਾਈਪ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ: %s" + +#: util/grub-install.c:1461 +#, fuzzy +msgid "no hints available for your platform. Expect reduced performance" +msgstr "ਤੁਹਾਡੇ ਪਲੇਟਫਾਰਮ ਲਈ ਕੋਈ ਇਸ਼ਾਰਾ ਨਹੀਂ ਹੈ। ਕਾਰਗੁਜ਼ਾਰੀ ਘਟਣ ਦੀ ਉਮੀਦ ਹੈ।" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "ਇੰਸਟਾਲ ਜੰਤਰ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "ਇੰਸਟਾਲੇਸ਼ਨ ਪੂਰੀ ਹੋਈ। ਕੋਈ ਗਲਤੀ ਨਹੀਂ ਮਿਲੀ।" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "ਕੋਈ ਪਾਥ ਜਾਂ ਜੰਤਰ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "ਵਰਤੋ: %s [INFILE [OUTFILE]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "FROM-TO[,FROM-TO]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "ਫੋਂਟ ਰੇਜ਼ ਦਿਓ" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "ਫੋਂਟ ਫੈਮਲੀ ਨਾਂ ਦਿਓ" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "ਆਕਾਰ" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "ਫੋਂਟ ਆਕਾਰ ਸੈੱਟ ਕਰੋ" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "ਗੂੜੇ ਫੋਂਟ ਵਿੱਚ ਬਦਲੋ" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "ਆਟੋ-ਹਿੰਟ ਲਈ ਮਜ਼ਬੂਰ" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "ਹਿੰਟਿੰਗ ਬੰਦ ਹੈ" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਬਿਟਮੈਪ ਅਣਡਿੱਠਾ ਕਰੋ" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ਗਲਤ ਫੋਂਟ ਰੇਜ਼" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIONS] FONT_FILES" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "ਆਉਟਪੁੱਟ ਫਾਇਲ ਦੇਣਾ ਲਾਜ਼ਮੀ ਹੈ" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType ਫੇਲ੍ਹ ਹੈ" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "ਫਾਇਲ %s, ਇੰਡੈਕਸ %d ਖੋਲੀ ਨਹੀਂ ਜਾ ਸਕਦੀ: ਗਲਤੀ %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਹੈ" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ਫਾਰਮੈਟ" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "ਫਾਰਮੈਟ ਵਿੱਚ ਈਮੇਜ਼ ਤਿਆਰ ਕੀਤਾ" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "ਉਪਲੱਬਧ ਫਾਰਮੈਟ:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "ਅਣਜਾਣ ਟਾਰਗੇਟ ਫਾਰਮੈਟ %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPTION]... [MODULES]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "ਗਰਬ ਦਾ ਬੂਟ ਹੋਣਯੋਗ ਈਮੇਜ਼ ਬਣਾਉ।" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "TFP ਸਰਵਰ ਲਈ ਰੂਟ ਡਾਇਰੈਕਟਰੀ" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "ਗੈਰ ਸਹਾਇਕ ਪਲੇਟਫਾਰਮ %s\\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "ਤਿਆਰ ਕੀਤੇ ਹੈਸ਼ ਦੀ ਲੰਬਾਈ" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "ਸਾਲਟ ਦੀ ਲੰਬਾਈ" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "PBKDF2 ਪਾਸਵਰਡ ਹੈਸ਼ ਬਣਾਉ।" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "ਪਾਸਵਰਡ ਪੜ੍ਹਨ ਲਈ ਫੇਲ੍ਹ ਹੈ" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "ਪਾਸਵਰਡ ਮੁੜ-ਦਿਓ: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "ਪਾਸਵਰਡ ਮੇਲ ਨਹੀਂ ਖਾ ਰਿਹਾ" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "ਕ੍ਰਿਪਟੋਗਰਾਫਿਕ ਗਲਤੀ ਨੰਬਰ %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦਾ PBKDF2 ਹੈਸ਼ %s ਹੈ\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "ਕੋਈ ਪਾਥ ਨਹੀਂ ਦਿੱਤਾ।\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ਪਾਥ" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "ਸਿਸਟਮ ਫਾਇਲ-ਨਾਂ ਨੂੰ ਗਰਬ ਵਿੱਚ ਬਦਲੋ।" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "ਵਰਤੋਂ: %s [OPTION] SOURCE...\\n" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, fuzzy, c-format +msgid "enabling %s support ..." +msgstr "%s ਸਹਿਯੋਗ ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ ...\\n" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "IMAGE1 [IMAGE2 ...] MOUNTPOINT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "ਈਮੇਜ਼ ਅਤੇ ਮਾਊਂਟ-ਪੁਆਇੰਟ ਚਾਹੀਦਾ ਹੈ" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "ਦਿੱਤਾ ਆਰਗੂਮੈਂਟ ਸਿਸਟਮ ਜੰਤਰ ਹੈ ਨਾ ਕਿ ਪਾਥ" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +#, fuzzy +msgid "print TARGET" +msgstr "ਟਾਰਗੇਟ" + +#: util/grub-probe.c:709 +#, fuzzy +msgid "available targets:" +msgstr "ਉਪਲੱਬਧ ਫਾਰਮੈਟ:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTION]... [PATH|DEVICE]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "%s: ਬਹੁਤ ਆਰਗੂਮੈਂਟ\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ਪਾਥ]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "ਲਾਈਨ %u ਉੱਤੇ ਸੰਟੈਕਸ ਗਲਤੀ\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "ਕੋਈ ਜੰਤਰ ਨਹੀਂ ਦਿੱਤਾ।\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "ਜੰਤਰ OS ਜੰਤਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ (ਜਿਵੇਂ ਕਿ /dev/sda)।" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "ਗਲਤ ਜੰਤਰ `%s'।\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +#, fuzzy +msgid "Transform syslinux config into GRUB one." +msgstr "ਸਿਸਟਮ ਫਾਇਲ-ਨਾਂ ਨੂੰ ਗਰਬ ਵਿੱਚ ਬਦਲੋ।" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "ਕਰਨਲ ਈਮੇਜ਼ ਕੰਪਰੈਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "ਅਣਜਾਣ ਕੰਪਰੈਸ਼ਨ %d\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "ਫਿਰਮਵੇਅਰ ਈਮੇਜ਼ ਬਹੁਤ ਵੱਡਾ ਹੈ" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "ਫਿਰਮਵੇਅਰ ਈਮੇਜ਼ ਬਹੁਤ ਵੱਡਾ ਹੈ" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ਗਲਤ ਲਾਈਨ ਫਾਰਮੈਟ: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "`%s' ਦਾ ਆਕਾਰ ਬਹੁਤ ਛੋਟਾ ਹੈ" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "ਫਾਇਲ ਸਿਸਟਮ `%s' ਇੰਬੈਡ ਕਰਨ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "ਕੋਰ ਈਮੇਜ਼ ਵਿੱਚ ਕੋਈ ਟਰਮੀਨੇਟਰ ਨਹੀਂ ਹੈ" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img ਵਰਜਨ ਮਿਲਦਾ ਨਹੀਂ ਹੈ" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "%s ਉੱਤੇ ਫਾਇਲ-ਸਿਸਟਮ ਜਾਣਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "ਫਾਇਲ-ਸਿਸਟਮ `%s' ਬਲਾਕ-ਲਿਸਟ ਲਈ ਸਹਾਇਕ ਨਹੀਂ ਹੈ" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "ਵਰਤੋ: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "GRUB ਕੀਬੋਰਡ ਲੇਆਉਟ ਫਾਇਲ ਬਣਾਉ।" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "ਇਹ ਸੁਨੇਹਾ ਛਾਪੋ ਅਤੇ ਬੰਦ ਕਰੋ" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "ਵਰਜਨ ਜਾਣਕਾਰੀ ਛਾਪੋ ਅਤੇ ਬੰਦ ਕਰੋ" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "ਬੱਗ ਜਾਣਕਾਰੀ ਨੂੰ ਭੇਜੋ" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "ਵਰਤੋ: %s [OPTION]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "grub ਸੰਰਚਨਾ ਫਾਇਲ ਤਿਆਰ ਕਰੋ" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: ਇਹ ਚਲਾਉਣ ਲਈ ਤੁਹਾਨੂੰ ਰੂਟ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: ਨਹੀਂ ਲੱਭਿਆ\\n" + +#: util/grub-mkconfig.in:238 +#, fuzzy +msgid "Generating grub configuration file ..." +msgstr "grub ਸੰਰਚਨਾ ਫਾਇਲ ਤਿਆਰ ਕਰੋ" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "ਸਮਾਪਤ" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "ਚੇਤਾਵਨੀ:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "ਵਰਤੋ: %s [OPTION] MENU_ENTRY\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "ਗਰਬ ਲਈ ਮੂਲ ਬੂਟ ਮੇਨੂ ਐਂਟਰੀ ਸੈੱਟ ਕਰੋ, ਕੇਵਲ ਅਗਲੇ ਬੂਟ ਲਈ ਹੀ।" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "ਇੱਕ ਤੋਂ ਵੱਧ ਮੇਨੂ ਐਂਟਰੀਆਂ?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "ਮੇਨੂ ਐਂਟਰੀ ਨਹੀਂ ਦਿੱਤੀ ਗਈ।" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "ਗਰਬ ਲਈ ਮੂਲ ਬੂਟ ਮੇਨੂ ਐਂਟਰੀ ਸੈੱਟ ਕਰੋ।" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "ਥੀਮ ਲੱਭਿਆ: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "ਬੈਕਗਰਾਊਂਡ ਲੱਭੀ: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ ਈਮੇਜ਼ ਫਾਰਮੈਟ" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "ਗਨੂ ਮੈਸ਼ ਲੱਭਿਆ: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "ਹੁਰਡ ਮੋਡੀਊਲ ਲੱਭਿਆ: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "...ਗਨੂ ਮੈਸ਼ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "% ਲਈ ਤਕਨੀਕੀ ਚੋਣਾਂ" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "ਕਰਨਲ ਮੋਡੀਊਲ ਡਾਇਰੈਕਟਰੀ ਲੱਭੀ: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, ਲੀਨਕਸ %s ਨਾਲ (ਰਿਕਵਰੀ ਮੋਡ)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, ਲੀਨਕਸ %s ਨਾਲ" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "ਲੀਨਕਸ %s ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "initial ramdisk ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "linux ਈਮੇਜ਼ ਲੱਭਿਆ: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "initrd ਈਮੇਜ਼ ਲੱਭਿਆ: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (ਲੋਡਰ)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (ਲੋਡਰ)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "%2$s (%3$s) ਉੱਤੇ %1$s ਲੱਭਿਆ\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-ਬਿੱਟ)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-ਬਿੱਟ)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(%s ਉੱਤੇ)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, Xen ਹਾਈਪਰਵਾਈਜ਼ਰ ਨਾਲ" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Xen %s ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen ਹਾਈਪਰਵਾਈਜ਼ਰ, ਵਰਜਨ %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "%s ਲਈ ਤਕਨੀਕੀ ਚੋਣਾਂ (Xen ਹਾਈਪਰਵਾਈਜ਼ਰ ਨਾਲ)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "%2$s ਉੱਤੇ %1$s ਲੱਭਿਆ\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "ਐਡਰੈਸ ਰੇਜ਼ RAM ਨਾਲ ਸਬੰਧਿਤ ਨਹੀਂ ਹੈ" + +#~ msgid "Packed pixel " +#~ msgstr "ਪੈਕ ਕੀਤੇ ਪਿਕਸਲ " + +#~ msgid "create width summary file" +#~ msgstr "ਚੌੜਾਈ ਸਾਰ ਫਾਇਲ ਬਣਾਓ" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "INSTALL_DEVICE ਸਿਸਟਮ ਜੰਤਰ ਫਾਇਲ-ਨਾਂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।" + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "ਬੂਟ (boot) ਉੱਤੇ ਪਾਥ `%s' ਗਰਬ ਵਲੋਂ ਪੜਨਯੋਗ ਨਹੀਂ ਹੈ। ਇੰਸਟਾਲੇਸ਼ਨ ਅਸੰਭਵ ਹੈ। ਅਧੂਰਾ ਛੱਡਿਆ।\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "%s ਦੇ ਫਾਇਲ-ਸਿਸਟਮ ਦੀ ਆਪੇ-ਖੋਜ ਫੇਲ੍ਹ ਹੋਈ।\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "--recheck ਨਾਲ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "`%s' ਫੇਲ੍ਹ ਹੈ\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "...grub.cfg ਤਿਆਰ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ" diff --git a/po/piglatin.sed b/po/piglatin.sed new file mode 100644 index 000000000..041688c7d --- /dev/null +++ b/po/piglatin.sed @@ -0,0 +1,21 @@ +/^Project-Id-Version:/ b +/^Report-Msgid-Bugs-To:/ b +/^POT-Creation-Date:/ b +/^PO-Revision-Date:/ b +/^Last-Translator:/ b +/^Language-Team:/ b +/^Language:/ b +/^MIME-Version:/ b +/^Content-Type:/ b +/^Content-Transfer-Encoding:/ b +/^Plural-Forms:/ b + +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g + +s,\(^\|[^a-zA-Z0-9%\\]\)\([aoeuiAOEUI]\)\([a-zA-Z]*\),\1\2\3way,g +s,\(^\|[^a-zA-Z0-9%\\]\)\([bcdfghj-np-tvwxzBCDFGHJ-NP-TVWXZ][bcdfghj-np-tvwxzBCDFGHJ-NP-TVWXZ]*\)\([a-zA-Z]*\),\1\3\2ay,g diff --git a/po/pl.gmo b/po/pl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..80dddf61e4fdc252e2c1b259c097d237c97e2924 GIT binary patch literal 130829 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, 2010. +# Jakub Bogusz , 2010-2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-04 21:30+0100\n" +"Last-Translator: Jakub Bogusz \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "nie obsługiwana prędkość portu szeregowego" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "nie obsługiwany tryb parzystości portu szeregowego" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "nie obsługiwana liczba bitów stopu portu szeregowego" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "nie obsługiwana długość słowa portu szeregowego" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Bez wczytywania tablic komputera podanych przez listę tablic oddzielonych " +"przecinkami." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" +"Wczytuje tylko tablice podane przez listę tablic oddzielonych przecinkami." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Eksportuje tablice w wersji 1 do OS." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Eksportuje tablic w wersjach 2 i 3 do OS." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Ustawia OEMID z RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Ustawia identyfikator OEMTABLE z RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Ustawia wersję OEMTABLE z RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Ustawia pole twórcy z RSDP, XSDT i RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Ustawia wersję twórcy z RSDP, XSDT i RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Bez aktualizowania EBDA. Może naprawić niektóre błędy lub awarie w " +"niektórych BIOS-ach, ale jest bezużyteczne w systemach operacyjnych nie " +"pobierających RSDP z programu GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "przedwczesny koniec pliku %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABLICA1,TABLICA2|--load-only=TABLICA1,TABLICA2] PLIK1 " +"[PLIK2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Wczytuje tablice ACPI komputera i tablice podane w parametrach." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "błąd: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "brak pamięci" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "nie można odczytać \"%s\": %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Wyłączenie przez ACPI nie powiodło się" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Wyświetla listę urządzeń." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "oczekiwano nazwy pliku" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "PLIK" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Wyświetla listę bloków." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "najpierw należy wczytać jądro" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Uruchamia system operacyjny." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Brak dostępnych statystyk czasu rozruchu\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Pokazuje statystyki czasu rozruchu." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statystyki bufora dysku: trafienia = %lu (%lu.%02lu%%), chybienia = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Brak dostępnych statystyk bufora dysku\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Pobiera informacje o buforze dysku." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Akceptuje znaki końca wiersza CR/NL w stylu systemu DOS." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Wyświetla zawartość pliku." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "oczekiwano dwóch argumentów" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Porównuje plik \"%s\" z \"%s\":\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Pliki różnią się rozmiarem: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Pliki różnią się na pozycji %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Pliki są identyczne.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "PLIK1 PLIK2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Porównuje dwa pliki." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Wczytuje inny plik konfiguracji." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Wczytuje inny plik konfiguracji bez zmieniania kontekstu." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Wczytuje inny plik konfiguracji bez zmieniania kontekstu, ale przyjmuje " +"tylko wpisy menu." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Wczytuje inny plik konfiguracji, ale przyjmuje tylko wpisy menu." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[rok-]miesiąc-dzień] [godzina:minuta[:sekunda]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Wyświetla/ustawia bieżącą datę i czas." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Bez wyświetlania końcowych znaków nowych wierszy." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Włącza interpretowanie sekwencji sterujących lewego ukośnika." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] CIĄG" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Wyświetla wiersz tekstu." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Przeładowuje do menu konfiguracji firmware." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Naprawia problem obrazu." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Obraz ROM jest dostępny." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Nie można włączyć obszaru ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Tworzy struktury BIOS-owe dla wstecznej kompatybilności z istniejącym OS." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "ZRZUT_BIOSU [ZRZUT_INT10]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Wczytuje zrzut BIOS-u." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "ŁAŃCUCH ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Wykonuje argumenty jako poleceń GRUB-a" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Sprawdza, czy PLIK może być uruchomiony jako nieuprzywilejowane jądro gościa " +"Xen i386 PAE" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Srawdza, czy PLIK może być uruchomiony jako nieuprzywilejowane jądro gościa " +"Xen x86_64" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Sprawdza, czy PLIK może być użyty jako uprzywilejowane jądro gościa Xen x86" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Sprawdza, czy PLIK może być użyty jako jądro multiboot x86" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Sprawdza, czy PLIK może być użyty jako jądro multiboot2 x86" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na ARM" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na ARM64" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na IA64" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na MIPS" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na MIPSEL" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na SPARC64" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na POWERPC" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Sprawdza, czy PLIK jest Linuksem na x86" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" +"Sprawdza, czy PLIK jest Linuksem na x86 z obsługą protokołu 32-bitowego" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Sprawdza, czy PLIK jest kFreeBSD na x86" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Sprawdza, czy PLIK jest kFreeBSD na i386" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Sprawdza, czy PLIK jest kFreeBSD na x86_64" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Sprawdza, czy PLIK jest kNetBSD na x86" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Sprawdza, czy PLIK jest kNetBSD na i386" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Sprawdza, czy PLIK jest kNetBSD na x86_64" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Sprawdza, czy PLIK jest plikiem EFI i386" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Sprawdza, czy PLIK jest plikiem EFI x86_64" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Sprawdza, czy PLIK jest plikiem EFI IA64" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Sprawdza, czy PLIK jest plikiem EFI ARM64" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Sprawdza, czy PLIK jest plikiem EFI ARM" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Sprawdza, czy PLIK to hiberfil.sys w stanie hibernacji" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Sprawdza, czy PLIK to XNU (jądro Mac OS X) x86_64" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Sprawdza, czy PLIK to XNU (jądro Mac OS X) i386" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Sprawdza, czy PLIK to obraz zahibernowanego XNU (jądra Mac OS X)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Sprawdza, czy PLIK to rekord rozruchowy BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "fałsz" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPCJE PLIK" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Sprawdza, czy PLIK jest określonego typu." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "partycja nie istnieje" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Zapisano nowy MBR do \"%s\"\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "URZĄDZENIE [PARTYCJA[+/-[TYP]]]..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Wypełnia hybrydę MBR napędu GPT URZĄDZENIA. Podane partycje będą częścią " +"hybrydy MBR. Dozwolone jest do 3 partycji. TYP jest typem MBR. + oznacza, że " +"partycja jest aktywna. Tylko jedna partycja może być aktywna." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Wyłącza komputer. To polecenie nie działa ze wszystkimi implementacjami " +"oprogramowania sprzętu." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Podaje sumę do użycia." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "SUMA" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Sprawdza skróty plików z listą skrótów z PLIKU." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Podstawowy katalog dla listy sum." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "KATALOG" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Bez zatrzymywania po pierwszym błędzie." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Dekompresuje plik przed sprawdzeniem sum." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: BŁĄD ODCZYTU\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: NIEZGODNOŚĆ SKRÓTU\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h SKRÓT [-c PLIK [-p PRZEDROSTEK]] [PLIK1 [PLIK2...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Oblicza lub sprawdza sumę kontrolną." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c PLIK [-p PRZEDROSTEK]] [PLIK1 [PLIK2...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Ustawia APM (Zaawansowane zarządzanie zasilaniem)\n" +"(1=niskie, ..., 254=wysokie, 255=wyłączone)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Wyświetla tryb zasilania." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Zatrzymuje ustawienia bezpieczeństwa ATA do czasu przywrócenia." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Wyświetla stan SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Ustawia AAM (Automatyczne zarządzanie akustyką)\n" +"(0=wyłączone, 128=ciche, ..., 254=szybkie)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Ustawia czas oczekiwania przed przejściem do stanu oczekiwania\n" +"(0=wyłączone, 1=5 sekund, 2=10 sekund, ..., 240=20 minut, 241=30 minut, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Ustawia napęd w trybie oczekiwania." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Ustawia napęd w tryb uśpienia." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Wyświetla tożsamość i ustawienia napędu." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Pokazuje surową zawartość sektora IDENTIFY ATA." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Wyłącza/włącza SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Bez wyświetlania komunikatów." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "oczekiwano jednego argumentu" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPCJE] DYSK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Uzyskuje/ustawia parametry dysku ATA." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Składnia:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[WZORZEC...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Wyświetla komunikat pomocy." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Pomija bajty wyrównania z początku pliku." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Odczytuje tylko bajty DŁUGOŚCI." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPCJE] PLIK_LUB_URZĄDZENIE" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Pokazuje surową zawartość pliku lub pamięci." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Pokazuje surowy zrzut zawartości CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BAJT:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Sprawdza bit BAJT:BIT w CMOS-ie." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Zeruje bit BAJT:BIT w CMOS-ie." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Ustawia bit BAJT:BIT w CMOS-ie." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Pokazuje statystyki czasu rozruchu coreboot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Wyświetla listę tablic coreboot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Sprawdza flagę 64-bitowego trybu procesora (domyślne)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Sprawdza, czy procesor obsługuje Physical Address Extension." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Sprawdza funkcje procesora." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Wyświetla bieżące mapowania." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Przywraca wszystkie mapowania do domyślnych wartości." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Wykonuje bezpośrednie i odwrotne mapowania." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Nie przemapowano żadnych dysków" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "Numer dysku OS ---> Urządzenie GRUB-a/BIOS-u" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] urządzenie_gruba dysk_systemu_operacyjnego." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Zarządza mapowaniami napędów BIOS-u." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Bez używania APM do wyłączania komputera." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Wyłącza komputer, jeśli to możliwe używa APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "nie znaleziono APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Wersja %u.%u\n" +"32-bitowy CS = 0x%x, długość = 0x%x, offset = 0x%x\n" +"16-bitowy CS = 0x%x, długość = 0x%x\n" +"DS = 0x%x, długość = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "interfejs 16-bitowego trybu chronionego jest obsługiwany\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "interfejs 16-bitowego trybu chronionego nie jest obsługiwany\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "interfejs 32-bitowego trybu chronionego jest obsługiwany\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "interfejs 32-bitowego trybu chronionego nie jest obsługiwany\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Stan bezczynności spowalnia procesor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Stan bezczynności nie spowalnia procesora\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM wyłączony\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM włączony\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM odłączony\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM podłączony\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Wyświetla informacje APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "oczekiwano nazwy pliku lub tempa i nut" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Nieprawidłowe tempo w %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "nie znaleziono pliku \"%s\"" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "nierozpoznana liczba" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "PLIK | TEMPO [TONACJA1 CZAS_TRWANIA1] [TONACJA2 CZAS_TRWANIA2]... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Odtwarza dźwięk." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "ustawia tryb NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "ustawia tryb CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "ustawia tryb ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "ustawia tryb wstawiania" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "ustawia tryb pauzy" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "wciska lewy Shift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "wciska prawy Shift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "wciska SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "wciska klawisz NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "wciska klawisz CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "wciska klawisz ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "wciska klawisz Insert" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "wciska lewy Alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "wciska prawy Alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "wciska lewy Ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "wciska prawy Ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "pomija uaktualnienie stanu diod" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[KLAWISZ1] [KLAWISZ2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emuluje sekwencję klawiszy" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Wpisanie \"go\" wznowi GRUB-a." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Wraca do znaku zachęty IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Zapisuje odczytaną wartość do zmiennej NAZWA_ZMIENNEJ." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "NAZWA_ZMIENNEJ" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Odczytuje z PORTU wartość 8-bitową." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Odczytuje z PORTU wartość 16-bitową." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Odczytuje z PORTU wartość 32-bitową." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT WARTOŚĆ [MASKA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Zapisuje WARTOŚĆ 8-bitową do PORTU." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Zapisuje WARTOŚĆ 16-bitową do PORTU." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADRES WARTOŚĆ [MASKA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Zapisuje WARTOŚĆ 32-bitową do PORTU." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "zmienna \"%s\" nie jest ustawiona" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Wczytuje układ klawiatury." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Sprawdza klawisz Shift." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Sprawdza klawisz Ctrl." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Sprawdza klawisz Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Sprawdza stan klawisza modyfikacji." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "nie można odnaleźć polecenia \"%s\"" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Hasło: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Przetwarza przestarzałą konfigurację w tym samym kontekście" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Przetwarza przestarzałą konfigurację w nowym kontekście" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Przetwarza przestarzałą konfigurację w tym samym kontekście, przyjmując " +"tylko wpisy menu" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Przetwarza przestarzałą konfigurację w nowym kontekście, przyjmując tylko " +"wpisy menu" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYP] PLIK [PARAMETR...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Symuluje polecenie \"kernel\" programu grub-legacy" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "PIK [PARAMETR...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Symuluje polecenie \"initrd\" programu grub-legacy" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Symuluje polecenie \"modulenounzip\" programu grub-legacy" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] HASŁO [PLIK]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Symuluje polecenie \"password\" programu grub-legacy" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" +"Symuluje polecenie \"password\" programu grub-legacy w trybie wpisu menu" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Podaje nazwę pliku." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Pomija sprawdzanie podpisu pliku środowiska." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f PLIK] [-s|--skip-sig] [nazwa_zmiennej_do_zezwolenia] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Wczytuje zmienne z pliku blokowego środowiska." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f PLIK]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Wyświetla listę zmiennych z pliku blokowego środowiska." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f PLIK] nazwa_zmiennej [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Zapisuje zmienne do pliku blokowego środowiska." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Wyświetla długą listę z bardziej szczegółowymi informacjami." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Wyświetla rozmiary w formacie czytelnym dla człowieka." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Wyświetla listę wszystkich plików." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Protokoły sieciowe:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [PLIK...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Wyświetla listę urządzeń i plików." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Wyświetla tylko tablice w wersji 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Wyświetla tylko tablice w wersjach 2 i 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Wyświetla informacje ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM dostępny" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM zarezerwowany" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM dostępny dla ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "RAM na dane nieulotne ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "wadliwy RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "trwały RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "trwały RAM (tradycyjny)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM przechowujący tablice coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM przechowujący kod firmware" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "adres_pocz = 0x%llx, długość = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "adres_pocz = 0x%llx, długość = 0x%llx, typ = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "" +"Wyświetla listę map pamięci dostarczanych przez oprogramowanie sprzętu." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Wyświetla listę urządzeń PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Błogosławi PLIK na partycji HFS lub HFS+ dla Maców opartych na Intelu" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Błogosławi KATALOG na partycji HFS lub HFS+ dla Maców opartych na PPC" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADRES" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Odczytuje spod ADRESU wartość 8-bitową." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Odczytuje spod ADRESU wartość 16-bitową." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Odczytuje spod ADRESU wartość 32-bitową." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Zapisuje WARTOŚĆ 8-bitową pod ADRES." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Zapisuje WARTOŚĆ 16-bitową pod ADRES." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Zapisuje WARTOŚĆ 32-bitową pod ADRES." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Typ wpisu menu." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "CIĄG" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Lista użytkowników, którzy mogą uruchamiać ten wpis." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "UŻYTKOWNIK[,UŻYTKOWNIK]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Klawisz do szybkiego wystartowania tego wpisu." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "KLAWISZ" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Użycie ŁAŃCUCHA jako ciała wpisu menu." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identyfikator wpisu menu." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Ta pozycja może być uruchomiona przez dowolnego użytkownika." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Określa wpis menu." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Określa podmenu." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nazwa\tLiczba użyć\tZależności\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Wyświetla ten komunikat." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADRES [ROZMIAR]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Wyświetla zawartość pamięci." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUŁ" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Usuwa moduł." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Wyświetla wczytane moduły." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Kończy działanie programu GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Nie znaleziono CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 pod %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Przestrzeń we/wy kontrolera SM-bus jest pod 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Slot RAM numer %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Zapisano bajty SPD: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Całkowity rozmiar flasha: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Rodzaj pamięci: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Nr części: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Rodzaj pamięci: nieznany." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Wyświetla informacje o pamięci." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s nie obsługuje UUID-ów" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUŁ1 MODUŁ2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Przełącza na natywne sterowniki dysku. Jeśli nie podano modułów, używany " +"jest zestaw domyślny (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Wykonuje POLECENIA na partycji.\n" +"\"parttool PARTYCJA help\" wyświetli listę dostępnych poleceń." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=WARTOŚĆ" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Niestety parttool nie jest dostępny dla %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "nieznany argument \"%s\"" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTYCJA POLECENIA" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "UŻYTKOWNIK HASŁO" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Ustawia hasło użytkownika (w zwykłym tekście). Niezalecane i potencjalnie " +"niebezpieczne." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "błędne hasło PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "UŻYTKOWNIK HASŁO_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Ustawia hasło użytkownika (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Wybiera urządzenie wg ID producenta i urządzenia." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[producent]:[urządzenie]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Wybiera urządzenie wg położenia na szynie." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[szyna]:[slot][.funkcja]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "brak symbolu \"%c\"" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POŁOŻENIE] [-d URZĄDZENIE]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Pokazuje surowy zrzut przestrzeni konfiguracji PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Ustawia zmienną na wartość zwrotną." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Określa sterownik." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Określa typ mapy partycji." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Określa typ systemu plików." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Określa UUID systemu plików." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Określa etykietę systemu plików." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "system plików \"%s\" nie obsługuje etykiet" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "URZĄDZENIE" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Pobiera informacje o urządzeniu." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ZMIENNA_ŚRODOWISKOWA]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Ustawia zmienną za pomocą danych wprowadzonych przez użytkownika." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Ponownie uruchamia komputer." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Zapisuje NUMER dopasowanego elementu w ZMIENNEJ." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMER:]NAZWA_ZMIENNEJ" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "WYRAŻENIE_REGULARNE CIĄG" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Testuje, czy WYRAŻENIE_REGULARNE pasuje do CIĄGU." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAZWA [ZMIENNA] [WSKAZÓWKI]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Wyszukuje urządzenia według pliku. Jeśli podano ZMIENNĄ, pierwsze " +"odnalezione urządzenie jest ustawiane na ZMIENNĄ." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Wyszukuje urządzenia według etykiety. Jeśli podano ZMIENNĄ, pierwsze " +"odnalezione urządzenie jest ustawiane na ZMIENNĄ." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Wyszukuje urządzenia według UUID. Jeśli podano ZMIENNĄ, pierwsze odnalezione " +"urządzenie jest ustawiane na ZMIENNĄ." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Wyszukuje urządzenia według pliku." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Wyszukuje urządzenia według etykiety systemu plików." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Wyszukuje urządzenia według UUID systemu plików." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Ustawia zmienną na pierwsze odnalezione urządzenie." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Bez wykrywania napędu dyskietek." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Najpierw wypróbowuje WSKAZÓWKĘ urządzenia. Jeśli WSKAZÓWKA kończy się " +"przecinkiem, próbuje także podpartycje" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "WSKAZÓWKA" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najpierw wypróbowuje WSKAZÓWKĘ urządzenia, jeśli uruchomiono przez IEEE1275. " +"Jeśli WSKAZÓWKA kończy się przecinkiem, próbuje także podpartycje" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najpierw wypróbowuje WSKAZÓWKĘ urządzenia, jeśli uruchomiono przez BIOS. " +"Jeśli WSKAZÓWKA kończy się przecinkiem, próbuje także podpartycje" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Najpierw wypróbowuje WSKAZÓWKĘ urządzenia, jeśli obsługiwany jest " +"bezpośredni dostęp do sprzętu. Jeśli WSKAZÓWKA kończy się przecinkiem, " +"próbuje także podpartycje" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najpierw wypróbowuje WSKAZÓWKĘ urządzenia, jeśli uruchomiono przez EFI. " +"Jeśli WSKAZÓWKA kończy się przecinkiem, próbuje także podpartycje" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najpierw wypróbowuje WSKAZÓWKĘ urządzenia, jeśli uruchomiono przez ARC. " +"Jeśli WSKAZÓWKA kończy się przecinkiem, próbuje także podpartycje" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint WSKAZÓWKA [--hint WSKAZÓWKA]...] NAZWA" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Wyszukuje urządzenia według pliku, etykiety systemu plików lub UUID systemu " +"plików. Jeśli podano --set, pierwsze odnalezione urządzenie jest ustawiane " +"na ZMIENNĄ. Jeśli nie podano nazwy zmiennej, to zostanie użyta \"root\"." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Rejestr %x urządzenia %x:%02x.%x zawiera %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POŁOŻENIE] [-d URZĄDZENIE] [-v ZMIENNA] REJESTR[=WARTOŚĆ[:MASKA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipuluje urządzeniami PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Widoczne odliczanie." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Zezwala na przerwanie za pomocą klawisza Esc." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "LICZBA_SEKUND" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Czeka przez podaną liczbę sekund." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "katalog główny na dysku syslinuksa [domyślnie=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"katalog bieżący syslinuksa [domyślnie katalog nadrzędny do pliku " +"wejściowego]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "przyjęcie wejścia jako pliku konfiguracyjnego isolinuksa." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "przyjęcie wejścia jako pliku konfiguracyjnego pxelinuksa." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "przyjęcie wejścia jako pliku konfiguracyjnego syslinuksa." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Wykonuje konfigurację syslinuksa w tym samym kontekście" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Wykonuje konfigurację syslinuksa w nowym kontekście" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Wykonuje konfigurację syslinuksa w tym samym kontekście, przyjmując tylko " +"wpisy menu" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Wykonuje konfigurację syslinuksa w nowym kontekście, przyjmując tylko wpisy " +"menu" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "nie podano terminala" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "nie znaleziono terminala \"%s\"" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktywne terminale wejściowe:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Dostępne terminale wejściowe:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktywne terminale wyjściowe:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Dostępne terminale wyjściowe:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2]..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Wyświetla listę terminali wejściowych lub wybiera jeden." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Wyświetla listę terminali wyjściowych lub wybiera jeden." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "WYRAŻENIE ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Oblicza wyrażenie." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "WYRAŻENIE" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Wczytuje ten sam plik na różne sposoby." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Określa rozmiar dla każdej operacji odczytu" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "błędny rozmiar bloku" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Rozmiar pliku: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Minął czas: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Szybkość: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s ROZMIAR] NAZWA_PLIKU" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Testuje szybkość odczytu pliku." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "nie podano polecenia" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Minął czas: %d.%03d s\n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "POLECENIE [ARGUMENTY]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Mierzenie czasu wykonania POLECENIA" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Tłumaczy na wielkie litery." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Tłumaczy na małe litery." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[OPCJE] [ZBIÓR1] [ZBIÓR2] [ŁAŃCUCH]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Tłumaczy znaki ZBIÓR1 na ZBIÓR2 w ŁAŃCUCHU." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Nic nie robi, pomyślnie kończąc działanie." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Nic nie robi, niepomyślnie kończąc działanie." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Testuje obsługę USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Pomija sprawdzanie podpisu pliku klucza publicznego." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "błędny podpis" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "nie znaleziono klucza publicznego %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "moduł \"%s\" nie jest załadowany" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] PLIK PLIK_PODPISUU [PLIK_KLUCZA_PUBLICZNEGO]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Sprawdza oddzielony podpis." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] PLIK_KLUCZA_PUBLICZNEGO" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Dodaje PLIK_KP do zaufanych kluczy." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Wypisuje listę zaufanych kluczy." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_KLUCZA_PUBLICZNEGO" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Usuwa ID_KP z zaufanych kluczy." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Tylko tekst" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Bezpośredni kolor, maska: %d/%d/%d/%d poz: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Z paletą " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planowy " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Nie-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monochromatyczny " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Nieznany tryb obrazu " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " błędna suma kontrolna EDID" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " Wersja EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Preferowany tryb: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Tryb preferowany niedostępny\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "błędne określenie trybu graficznego \"%s\"" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Lista obsługiwanych trybów graficznych:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legenda: maska/pozycja=czerwień/zieleń/błękit/zarezerwowane" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Karta \"%s\":\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Informacje niedostępne" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Nie udało się zainicjować karty graficznej" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[SZERxWYS[xGŁĘB]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Wyświetla listę dostępnych trybów obrazu. Jeśli podano rozdzielczość, to " +"wyświetla tylko tryby pasujące do niej." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[SZERxWYS]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Testuje podsystem obrazu w trybie SxW." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Testuje podsystem obrazu." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[KATALOG]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Wyświetla listę przestrzeni danych Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] UUID_GRUBA [NAZWA_ZMIENNEJ]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Przekształca 64-bitowy UUID do formatu odpowiedniego dla XNU. Jeśli podano -" +"l, zachowuje małe litery, jak blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "błąd podczas odczytu sektora 0x%llx z \"%s\"" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "błąd podczas zapisu sektora 0x%llx na \"%s\"" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Montuje wg UUID-a." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Montuje wszystko." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Montuje wszystkie wolumeny z ustawioną flagą \"boot\"." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "nie można otworzyć \"%s\": %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "nie można przemieścić się w \"%s\": %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "ŹRÓDŁO|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Montuje urządzenie kryptograficzne." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Nie udało się odnaleźć wolumenu fizycznego \"%s\". Na obrazie core może " +"brakować niektórych modułów." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "nie znaleziono wolumenu fizycznego %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "brak nośnika w \"%s\"" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Nie udało się załadować sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Nie udało się załadować sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "nie udało się odczytać metadanych ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "błędny znacznik magiczny lub wersja ELI" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Próba odszyfrowania klucza głównego..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Hasło dla %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Slot %d otwarty\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "próba odczytu lub zapisu poza dyskiem \"%s\"" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "nie można zapisać na CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Używane są natywne sterowniki dysku. Odmowa użycia interfejsu firmware dysku." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "partycja osadzająca LDM jest zbyt mała; osadzanie nie będzie możliwe" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "ten LDM nie ma partycji osadzającej; osadzanie nie będzie możliwe" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Usuwa podany wpis urządzenia loopback." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] NAZWA_URZĄDZENIA PLIK." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Tworzy urządzenie wirtualne z pliku." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "relokacja 0x%x jeszcze nie jest zaimplementowana" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "brak tablicy symboli" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "ten plik ELF jest jest właściwego typu" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Wczytuje i inicjuje emulator EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Kończy wczytywanie emulatora EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Usuwa emulator EFI z pamięci." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "nie znaleziono symbolu \"%s\"" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Wczytane fonty:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "PLIK..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Podaje jeden lub więcej plików czcionek do wczytania." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Wyświetla listę wczytanych czcionek." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "za duże zagnieżdżenie dowiązań symbolicznych" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "próba odczytu za końcem pliku" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"nie udało się odnaleźć wymaganego urządzenia składowego systemu plików na " +"wielu urządzeniach" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "to nie jest katalog" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "to nie jest zwykły plik" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "ten core.img jest niezwykle duży. Nie zmieści się w obszarze osadzenia" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "nieprawidłowa nazwa pliku \"%s\"" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "weryfikacja sumy kontrolnej nie powiodła się" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "niedostępny klucz deszyfrujący" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "weryfikacja MAC nie powiodła się" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Zakłada surowe wejście." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Zakłada wejście szesnastkowe." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Zakłada, że wejście jest hasłem." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Hasło ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [PLIK]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importuje klucz obudowujący ZFS zapisany w PLIKU." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Urządzenie wirtualne usunięte" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Urządzenie wirtualne zawiodło" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Urządzenie wirtualne odłączone" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Urządzenie wirtualne zdegradowane" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Urządzenie wirtualne podłączone" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Niepoprawne urządzenie wirtualne; typ niedostępny" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Końcowe urządzenie wirtualne (plik lub dysk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Ścieżka rozruchowa: niedostępna\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Ścieżka rozruchowa: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Ścieżka: niedostępna" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Ścieżka: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "ID urządzenia: niedostępny" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "ID urządzenia: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "To VDEV jest kopią lustrzaną" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "To VDEV to RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Niepoprawne VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV o %d potomkach\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "Element VDEV %d jest niepoprawny\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Element VDEV %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Nieznany typ urządzenia wirtualnego: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Stan puli: aktywna" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Stan puli: wyeksportowana" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Stan puli: zniszczona" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Stan puli: zarezerwowana dla hot spare'a" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Stan puli: urządzenie ARC poziomu 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Stan puli: nie zainicjowana" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Stan puli: niedostępna" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Stan puli: potencjalnie aktywna" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Nazwa puli: niedostępna" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Nazwa puli: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID puli: niedostępny" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID puli: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Nie można pobrać stanu puli" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Nieznany stan puli" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Brak dostępnego drzewa urządzeń wirtualnych" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Wypisuje informacje ZFS o URZĄDZENIU." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "SYSTEM_PLIKÓW [ZMIENNA]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Wypisuje ZFS-BOOTFSOBJ lub zapisuje do ZMIENNEJ" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Teraz proszę podłączyć zdalny debugger." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Uruchamia zaślepkę GDB na podanym porcie" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Zatrzymuje w GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Zatrzymuje zaślepkę GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "przedwczesny koniec pliku" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Tłumaczy ciąg za pomocą bieżących ustawień." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Naciśnięcie klawisza Enter uruchamia wybrany system operacyjny, \"e\" " +"modyfikuje polecenia przed uruchomieniem, a \"c\" przechodzi do wiersza " +"poleceń. Klawisz Esc powoduje przejście do poprzedniego menu." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Naciśnięcie klawisza Enter uruchamia wybrany system operacyjny, \"e\" " +"modyfikuje polecenia przed uruchomieniem, a \"c\" przechodzi do wiersza " +"poleceń." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "Enter: uruchomienie, \"e\": opcje, \"c\": linia poleceń" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Wyróżniony wpis zostanie wykonany automatycznie za %ds." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "Pozostało: %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d s" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Menu startowe GRUB-a" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: wartość %s jest mniejsza lub równa %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: Parametr ARGP_HELP_FMT wymaga podania wartości" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: Parametr ARGP_HELP_FMT musi być dodatni" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Nieznany parametr ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Błędne dane w ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Argumenty obowiązkowe lub opcjonalne dla długich opcji są również " +"obowiązkowe lub opcjonalne dla odpowiednich krótkich opcji." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " lub: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPCJA...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Polecenie \"%s --help\" lub \"%s --usage\" pozwoli uzyskać więcej " +"informacji.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Prosimy zgłaszać błędy na adres %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Nieznany błąd systemowy" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "wyświetla ten tekst pomocy" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "wyświetla krótką informację o składni polecenia" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAZWA" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "określa nazwę programu" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEK" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "zatrzymuje na SEK sekund (domyślnie 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "wyświetla wersję programu" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(BŁĄD PROGRAMU) Nieznana wersja!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Za dużo argumentów\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(BŁĄD PROGRAMU) Opcja powinna zostać rozpoznana!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: opcja \"%s\" jest niejednoznaczna; możliwości:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: opcja \"--%s\" nie może mieć argumentów\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: opcja \"%c%s\" nie może mieć argumentów\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: opcja \"%s\" musi mieć argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: nieznana opcja \"--%s\"\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: nieznana opcja \"%c%s\"\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: błędna opcja -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: opcja musi mieć argument -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: opcja \"-W %s\" jest niejednoznaczna\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: opcja \"-W %s\" nie może mieć argumentów\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: opcja \"-W %s\" musi mieć argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Sukces" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Nic nie pasuje" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Błędne wyrażenie regularne" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Błędny znak sortowany" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Błędna nazwa klasy znaków" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Kończący znak \"\\\"" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Błędne odniesienie wstecz" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Niesparowane [ lub [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Niesparowane ( lub \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Niesparowane \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Błędna zawartość \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Błędny koniec zakresu" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Pamięć wyczerpana" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Błędne poprzedzające wyrażenie regularne" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Przedwczesny koniec wyrażenia regularnego" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Wyrażenie regularne zbyt duże" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Niesparowane ) lub \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "nieznany błąd wyrażenia regularnego" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Brak poprzedniego wyrażenia regularnego" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Witaj, Świecie" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Wypisuje tekst \"Witaj, Świecie\"." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "próba ustawienia poza plikiem" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "nie obsługiwany format gzip" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "plik lzop uszkodzony" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "plik xz uszkodzony lub nie obsługiwane opcje bloku" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "błędny znacznik magiczny ELF zależny od architektury" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ZMIENNA_ŚRODOWISKOWA=WARTOŚĆ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Ustawia zmienną środowiskową." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ZMIENNA_ŚRODOWISKOWA" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Usuwa zmienną środowiskową." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[PARAMETR]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Wyświetla listę urządzeń lub plików." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Wstawia moduł." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "nie znaleziono dysku \"%s\"" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "próba odczytu lub zapisu poza partycją" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "błędny znacznik magiczny ELF niezależny od architektury" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "licznik urządzenia przekracza ograniczenie" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "nie można zapisać do \"%s\": %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"wpis device.map \"%s\" jest błędny - zignorowano go. Proszę poprawić lub " +"usunąć device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"nazwa napędu \"%s\" w device.map jest błędna. Zamiast niej użyto %s. Proszę " +"użyć postaci [hfc]d[0-9]* (np. \"hd0\" lub \"cd\")" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "nie można otworzyć \"%s\": %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NAZWA_URZĄDZENIA" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Ustawia urządzenie główne." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "używa PLIKU jako mapy urządzeń [domyślnie=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "używa PLIKU jako dysku w pamięci" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "używa plików programu GRUB w KATALOGU [domyślnie=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "wyświetla więcej komunikatów." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "czeka na podłączenie debuggera" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Nieznany dodatkowy parametr \"%s\"." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Emulator GRUB-a." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Błąd podczas przetwarzania parametrów wiersza poleceń\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Proszę uruchomić \"gdb %s %d\" i ustawić ARGS.HOLD na zero.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: uwaga:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: informacja:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: błąd:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "plik \"%s\" jest zbyt duży" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "nieznany system plików" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Zamknięcie nie powiodło się" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Wyjście nie powiodło się" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "wykryto przepełnienie" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Porzucanie niewłaściwie zagnieżdżonej partycji (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Nieznane polecenie \"%s\".\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Wyświetla tę pomoc i kończy działanie." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Wyświetla użycie tego polecenia i kończy działanie." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "brak obowiązkowej opcji dla \"%s\"" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "argument \"%s\" wymaga liczby całkowitej" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"przypisano argumentowi \"%s\" wartość, podczas gdy nie wymaga on wartości" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Wyświetla stos wywołań." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB nie wie jeszcze, jak wytrzymać tę maszynę!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Domyślny serwer to ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "nieprawidłowe określenie koloru \"%s\"" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Restart nie powiódł się" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[DŁUGOŚĆ]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Zrzut szesnastkowy danych losowych." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "drzewo urządzeń musi być podane (p. polecenie \"devicetree\")" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "błędny zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "nieprawidłowe drzewo urządzeń" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Wczytuje system Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Wczytuje obraz initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Wczytuje plik DTB." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"zwykły obraz jądra nie jest obsługiwany - należy przebudować z włączoną " +"opcją CONFIG_(U)EFI_STUB" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "nie udało się pobrać FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "najpierw należy wczytać hipernadzorcę Xen" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Wczytuje hipernadzorcę xen." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Wczytuje moduł xen." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPCJE]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Uruchamia system oparty na BIOS-ie." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Wczytuje inny program startowy." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Wyświetla wyjście na wszystkich konsolach." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Używa konsoli szeregowej." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Pyta, z jakiego pliku uruchomić." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Używa napędu CD-ROM jako root." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Wywołuje trasowanie konfiguracji użytkownika." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Przechodzi do KDB podczas uruchamiania." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Używa zdalnego debuggera GDB zamiast DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Wyłącza całe wyjście uruchamiania." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Czeka na naciśnięcie klawisza po każdym wierszu wyjścia." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Używa wkompilowanego urządzenia root." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Uruchamia w trybie pojedynczego użytkownika." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Uruchamia z większą ilością komunikatów." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Nie uruchamia ponownie, tylko wyłącza." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Zmienia skonfigurowane urządzenia." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comJEDNOSTKA[,PRĘDKOŚĆ]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Wyłącza SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Wyłącza ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Bez wyświetlania komunikatów diagnostycznych uruchamiania." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Uruchamia z komunikatami debugowania." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Ogranicza zwykłe wyjście (ostrzeżenia pozostają)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADRES|comJEDNOSTKA][,PRĘDKOŚĆ]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nazwa" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "typ" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adres" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "rozmiar" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Uruchamia w trybie ślepym" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Wczytuje jądro systemu FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Wczytuje jądro systemu OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Wczytuje jądro systemu NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Wczytuje środowisko systemu FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Wczytuje moduł jądra FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Wczytuje moduł jądra NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Wczytuje moduł jądra NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Wczytuje moduł jądra FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Wczytuje ramdysk kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Wczytuje inny payload coreboot." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Przestarzały parametr \"ask\" nie jest już obsługiwany." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s jest przestarzały. Zamiast tego należy ustawić gfxpayload=%s przed " +"polecenim \"linux\".\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s jest przestarzały. Tryb VGA %d nie został rozpoznany. Zamiast tego należy " +"ustawić gfxpayload=SZERxWYS[xGŁĘB] przed poleceniem \"linux\".\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] PLIK" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "rozmiar \"%s\" jest za duży" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Wczytuje kernel.sys FreeDOS-a." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Wczytuje NTLDR lub BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Nadpisuje odgadnięte mapowania urządzeń Plan9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "URZĄDZENIE_GRUBA=URZĄDZENIE_PLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "JĄDRO ARGUMENTY" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Wczytuje jądro Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Wczytuje obraz PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Wczytuje ISO Truecrypta." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd już wczytane" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Wczytuje moduł." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Naciśnięcie dowolnego klawisza uruchomi xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Wczytuje zrzut \"device-properties\"." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Nie udało się zlokalizować sterownika FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Protokół FPSWA nie mógł odnaleźć interfejsu" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Nie znaleziono FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Wersja FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "PLIK [ARGUMENTY...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Wyświetla wersję FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "UWAGA: konsola nie będzie dostępna dla systemu operacyjnego" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Wczytuje jądro Multiboot 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Wczytuje moduł Multiboot 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Wczytuje jądro Multiboot." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Wczytuje moduł Multiboot." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Tryb obrazu w tle." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Wczytuje obraz systemu XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Wczytuje 64 bitowy obraz systemu XNU." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Wczytuje pakiet rozszerzeń systemu XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Wczytuje rozszerzenie systemu XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "KATALOG [zmienna OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Wczytuje katalog rozszerzeń systemu XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" +"Wczytuje ramdysk XNU. Będzie dostępny dla systemu operacyjnego jako md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Wczytuje obraz powitalny dla systemu XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Wczytuje obraz zahibernowanego systemu XNU." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADRES1,MASKA1[,ADRES2,MASKA2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Określa obszary pamięci jako wadliwe (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "OD[K|M|G] DO[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Usuwa wszystkie obszary pamięci w podanym zakresie." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "oczekiwano czterech argumentów" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "nieznany interfejs sieciowy \"%s\"" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "nie znaleziono informacji DHCP" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "nie znaleziono opcji DHCP" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "nie znaleziono opcji DHCP %d" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "nieznane określenie formatu opcji DHCP \"%s\"" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "nie znaleziono karty sieciowej" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "nie udało się automatycznie skonfigurować %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KARTA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "wykonuje autokonfigurację bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "ZMIENNA INTERFEJS NUMER OPIS" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"pobiera opcję DHCP i zapisuje do ZMIENNEJ. Jeśli ZMIENNA to -, wypisuje " +"wartość." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "brak skonfigurowanych serwerów DNS" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "element nazwy domeny jest zbyt długi" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "nie znaleziono rekordu DNS" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "nie otrzymano odpowiedzi DNS" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "tylko IPv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "tylko IPv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "preferowane IPv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "preferowane IPv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "błędny argument" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRES SERWER_DNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Wykonuje zapytanie DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "SERWER_DNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Dodaje serwer DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Usuwa serwer DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Wyświetla listę serwerów DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "nie udało się wysłać pakietu sieciowego" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "interpret nie jest obsługiwane" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "alloc-mem nie powiodło się" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "free-mem nie powiodło się" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "nie obsługiwana odpowiedź HTTP" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "nie obsługiwany błąd HTTP %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "przekroczony limit czasu przy otwieraniu \"%s\"" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "przekroczony limit czasu: nie udało się rozwiązać adresu sprzętowego" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "adres niemożliwy do rozwiązania: %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "nieznany adres sieciowy \"%s\"" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "cel nieosiągalny" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "wykryto pętlę na trasie" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "nie znaleziono adresu" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "tego adresu nie można usunąć" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Nie obsługiwany typ adresu sprzętowego %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Nie obsługiwany typ adresu %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "oczekiwano trzech argumentów" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "nie znaleziono karty" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "tymczasowy" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Nieznany typ adresu %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "nie podano serwera" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "przekroczony limit czasu podczas odczytu \"%s\"" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KRÓTKA_NAZWA KARTA ADRES [ADRES_SPRZĘTOWY]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Dodaje adres sieciowy." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KARTA [ADRES_SPRZĘTOWY]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Wykonuje autokonfigurację IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KRÓTKA_NAZWA" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Usuwa adres sieciowy." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KRÓTKA_NAZWA SIEĆ [INTERFEJS| gw BRAMKA]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Dodaje trasę sieciową." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Usuwa trasę sieciową." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "wypisuje listę tras" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "wypisuje karty sieciowe" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "wypisuje adresy sieciowe" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "połączenie odrzucone" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "przekroczony limit czasu połączenia" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Nazwa użytkownika: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[LISTA_UŻYTKOWNIKÓW]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Sprawdza, czy użytkownik jest na LIŚCIE_UŻYTKOWNIKÓW." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Możliwe polecenia:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Możliwe urządzenia:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Możliwe pliki:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Możliwe partycje:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Możliwe parametry:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Możliwe są:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Ostrzeżenie: błąd składni (brak ukośnika) w \"%s\"\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Ostrzeżenie: nieprawidłowy kolor tekstu \"%s\"\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Ostrzeżenie: nieprawidłowy kolor tła \"%s\"\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ZMIENNA_ŚRODOWISKOWA [ZMIENNA_ŚRODOWISKOWA]..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Eksportuje zmienne." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Niedziela" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Poniedziałek" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Wtorek" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Środa" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Czwartek" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Piątek" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Sobota" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "nie wczytano modułu" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB wersja %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Wciśnięcie klawisza Esc w każdej chwili powoduje zakończenie." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Obsługiwane jest minimalne modyfikowanie wierszy w stylu powłoki Bash. " +"Naciśnięcie klawisza Tab wyświetla listę możliwych uzupełnień polecenia po " +"wpisaniu pierwszego słowa. W innych miejscach naciśnięcie klawisza Tab " +"wyświetla listę możliwych uzupełnień urządzeń lub plików. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Czyści ekran." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Przechodzi do zwykłego trybu." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Wychodzi ze zwykłego trybu." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Naciśnięcie dowolnego klawisza kontynuuje..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Uruchamianie \"%s\"" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Powracanie do \"%s\"" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Uruchomienie domyślnych i zapasowych wpisów się nie powiodło.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Uruchamianie listy poleceń" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Obsługiwane jest minimalne modyfikowanie ekrany w stylu programu Emacs. " +"Naciśnięcie klawisza Tab wyświetla uzupełnienia. Naciśnięcie Ctrl-X " +"uruchamia, Ctrl-C lub F2 powoduje przejście do wiersza poleceń, a Esc " +"odrzuca zmiany i powoduje powrót do menu programu GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Należy użyć klawiszy %C i %C, aby wybrać wyróżniony wpis." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "k" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partycja %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Urządzenie %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Nie można uzyskać dostępu do systemu plików" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Typ systemu plików %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- etykieta \"%s\"" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- czas ostatniej modyfikacji %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Nie wykryto żadnego znanego systemu plików" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - partycja zaczyna się od %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - rozmiar sektora %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - całkowity rozmiar jest nieznany" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - całkowity rozmiar w sektorach: %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--DALEJ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "nie można otworzyć pliku konfiguracyjnego \"%s\": %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "brak kompresji dla tej platformy" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "brak funkcji IEEE1275 dla tej platformy" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "brak funkcji EFI dla tej platformy" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "brak funkcji SGI dla tej platformy" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "brak generatora liczb losowych dla tego systemu operacyjnego" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Nie udało się utworzyć drzewa device-mappera" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "nie można zamontować zaszyfrowanego wolumenu \"%s\": %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "nie udało się otworzyć geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "nie udało się odnaleźć konsumenta geli" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "nie udało się odczytać UUID-a geli" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "nie udało się odnaleźć klasy \"part\" geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "niewyrównany rozmiar urządzenia" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "próba odczytania obrazu core \"%s\" z programu GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "ponowna próba odczytania obrazu core \"%s\" z programu GRUB" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "nie można poprawnie odczytać \"%s\"" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "odczytanie sektorów obrazu core nie powiodło się" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "nie można uzyskać linii poleceń translatora dla ścieżki \"%s\": %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "linia poleceń translatora dla ścieżki \"%s\" jest pusta" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"translator \"%s\" dla ścieżki \"%s\" ma kilka parametrów nie będących " +"opcjami, co najmniej \"%s\" i \"%s\"" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"translator \"%s\" dla ścieżki \"%s\" ma tylko opcje, nie znaleziono " +"urządzenia" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Informacje o przestrzeni danych dla \"%s\" nie zawierają typu" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "\"%s\" nie jest dyskiem lokalnym" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Informacje o przestrzeni danych dla \"%s\" nie określają zwykłej partycji " +"ani zwykłego dysku" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "nie udało się odczytać list bloków: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "rozmiar bloku nie jest podzielny przez 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "błędny zerowy rozmiar bloku" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "nie udało się odczytać list bloków" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "błąd ioctl-a RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "nie obsługiwana wersja RAID: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "błąd ioctl-a GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "błąd ioctl-a GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Nie udało się otworzyć strumienia z polecenia %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "nieznany rodzaj urządzenia RAID \"%s\"" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"nie znaleziono \"obppath\" w katalogach powyżej %s ani przy wykrywaniu nazw " +"IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "nie udało się uzyskać znormalizowanej ścieżki \"%s\"" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "nieznany typ urządzenia %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Składnia: %s URZĄDZENIE\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Nie udało się utworzyć procesu: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Nie udało się utworzyć potoku: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "nie można przywrócić pierwotnego katalogu" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "nie można wykonać stat na \"%s\": %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "nie można utworzyć pliku tymczasowego: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "nie można utworzyć katalogu tymczasowego: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"nie udało się odnaleźć ścieżki urządzenia IEEE1275 dla %s.\n" +"Należy ręcznie ustawić zmienną \"boot-device\"" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: nie odnaleziono" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"\"nvsetenv\" nie powiodło się.\n" +"Należy ręcznie ustawić zmienną \"boot-device\". Po znaku zachęty IEEE1275 " +"proszę wpisać:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Należy ręcznie ustawić \"SystemPartition\" i \"OSLoader\"." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "brak \"/\" w znormalizowanej nazwie pliku" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() nie powiodło się" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "nie udało się odczytać danych losowych" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Niewystarczające uprawnienia do dostępu do firmware, przyjęcie trybu BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "funkcje EFI nie są dostępne przy działaniu w trybie BIOS" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "nieoczekiwany błąd EFI" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Nie udało się odnaleźć wolnego miejsca BootNNNN" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"ta etykieta partycji GPT nie ma BIOS-wej partycji rozruchowej; osadzanie nie " +"będzie możliwe" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"BIOS-owa partycja rozruchowa jest zbyt mała; osadzanie nie będzie możliwe" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sektor %llu jest już używany przez kontroler RAID \"%s\"; pominięto go. " +"Proszę skontaktować się z producentem, aby nie zapisywał danych w odstępie " +"za MBR" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sektor %llu jest już używany przez program \"%s\"; pominięto go. To " +"oprogramowanie może powodować w przyszłości problemy z uruchomieniem systemu " +"lub innego rodzaju. Proszę poprosić autorów o nie zapisywanie danych na " +"ścieżce rozruchowej" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"inne oprogramowanie używa obszaru osadzania i nie ma wystarczająco dużo " +"miejsca na core.img. Takie oprogramowanie zwykle próbuje zapisać dane w " +"sposób zapobiegający wykryciu. Zalecamy to wyjaśnić" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"ta etykieta partycji typu MSDOS nie ma przerwy za MBR; osadzanie nie będzie " +"możliwe" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "obszar osadzania jest niezwykle mały. core.img nie zmieści się w nim." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Czyni partycję aktywną" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "to nie jest partycja główna" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partycja %d jest teraz aktywna. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Usunięto flagę aktywności z %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Zmienia typ partycji" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Ustawia flagę partycji ukrytej" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "typ partycji 0x%x jest nieprawidłowy" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Ustawia typ partycji na 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "nie można przerwać 0 pętli" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "poza ciałem funkcji" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "błędna nazwa zmiennej \"%s\"" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "nieoczekiwany koniec pliku" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[LICZBA]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Kończy działanie pętli" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Kontynuuje pętle" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Przesuwa parametry pozycyjne." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[WARTOŚĆ]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Ustawia parametry pozycyjne." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Powraca z funkcji." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] PLIK" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Wczytuje obraz tła dla aktywnego terminala." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "KOLOR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Ustawia kolor tła dla aktywnego terminala." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Wyświetla zawartość konsoli CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Ustawia jednostkę szeregową." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Ustawia adres portu szeregowego." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Ustawia prędkość portu szeregowego." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Ustawia długość słowa portu szeregowego." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Ustawia parzystość portu szeregowego." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Ustawia bity zatrzymania portu szeregowego." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Ustawia częstotliwość podstawową." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Włącza/wyłącza RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "nie znaleziono portu szeregowego \"%s\"" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "nie obsługiwane sterowanie przepływem danych dla portu szeregowego" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPCJE...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Konfiguruje port szeregowy." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "nieznany typ terminfo \"%s\"" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "wizualnie porządkowane UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Nieznane kodowanie" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Obecne typy terminfo:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminal obsługuje tylko ASCII [domyślne]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal obsługuje logicznie porządkowane UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminal obsługuje wizualnie porządkowane UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminal posiada podane wymiary." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "SZEROKOŚĆxWYSOKOŚĆ" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "błędne określenie wymiarów terminala" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "nie znaleziono terminala %s lub nie jest obsługiwany przez terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g SxW] TERMINAL [TYP]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Ustawia TYP terminfo TERMINALA.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Wyświetla i wykonuje parametr blokowy." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "plik bitmapy \"%s\" nie jest w obsługiwanym formacie" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " informacje VBE: wersja %d.%d wer.oprogramowania OEM: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " pamięć całkowita: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "nie znaleziono pasującego trybu graficznego" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "brak dostępu" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODUŁY" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "załadowanie na początku podanych MODUŁÓW" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "instaluje tylko MODUŁY i ich zależności [domyślnie=wszystkie]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "MOTYWY" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "instaluje MOTYWY [domyślnie=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "FONTY" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "instaluje FONTY [domyślnie=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "LOKALIZACJE" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "instaluje tylko LOKALIZACJE [domyślnie=wszystkie]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "kompresuje pliki GRUB-a [opcjonalne]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "wybiera rodzaj kompresji dla obrazu core" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" +"używa obrazów i modułów umieszczonych w KATALOGU [domyślny=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "używa tłumaczy umieszczonych w KATALOGU [domyślny=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "używa motywów umieszczonych w KATALOGU [domyślny=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "osadza PLIK jako klucz publiczny do kontroli podpisu" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "nie można zmienić nazwy pliku %s na %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "dysk nie istnieje, więc próba przejścia do partycji %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Polecenia:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Tworzy pusty plik blokowy środowiska." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Wyświetla listę bieżących zmiennych." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAZWA=WARTOŚĆ ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Ustawia zmienne." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAZWA ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Usuwa zmienne." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opcje:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Należy podać co najmniej jedno polecenie.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "NAZWA_PLIKU POLECENIE" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Narzędzie do modyfikacji pliku blokowego środowiska." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Jeśli NAZWA_PLIKU to \"-\", używana jest domyślna wartość %s.\n" +"\n" +"Nie ma polecenia \"delete\"; aby usunąć cały blok środowiska, należy użyć\n" +"\"rm %s\"." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "błędny blok środowiska" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "błędny parametr %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "blok środowiska zbyt mały" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "odczyt dysku się nie powiódł w offsecie %lld, długości %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "nieprawidłowa wartość pominięcia %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "błąd odczytu w offsecie %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "nie można otworzyć pliku OS \"%s\": %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "nie można pisać na standardowe wyjście: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "porównanie się nie powiodło w offsecie %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "błąd otwarcia pliku OS %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "polecenie \"loopback\" nie powiodło się: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "polecenie \"cryptomount\" nie powiodło się: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "nie udało się uzyskać UUID-a" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls ŚCIEŻKA" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Wyświetla listę plików w ŚCIEŻCE." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp PLIK LOKALNY" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopiuje PLIK do LOKALNEGO pliku." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat PLIK" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Kopiuje PLIK na standardowe wyjście." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp PLIK LOKALNY" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Porównuje PLIK z LOKALNYM plikiem." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex PLIK" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Wyświetla szesnastkowo zawartość PLIKU." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc PLIK" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Uzyskuje sumę kontrolną CRC32 PLIKU." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist PLIK" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Wyświetla listę blokową PLIKU." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid URZĄDZENIE" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Liczy UUID XNU urządzenia." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "LICZBA" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Pomija N bajtów z pliku wyjściowego." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Obsługuje N bajtów w pliku wyjściowym." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Podaje liczbę plików wejściowych." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Ustawia zmienną środowiskową debugowania." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Montuje urządzenia kryptograficzne." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "PLIK|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Wczytuje klucz kryptograficzny zfs" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Dekompresuje dane." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Nieprawidłowy licznik dysku.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Licznik dysku musi poprzedzać listę dysków.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Nie podano polecenia.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Za mało parametrów dla polecenia.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Nieprawidłowe polecenie %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ŚCIEŻKA_DO_OBRAZU POLECENIA" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Narzędzie debugowania sterownika systemu plików." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "ustawia nazwę pliku wejściowego dla części 32-bitowej." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "ustawia nazwę pliku wejściowego dla części 64-bitowej." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "ustawia nazwę pliku wyjściowego. Domyślny to standardowe wyjście" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPCJE]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Skleja 32-bitową i 64-bitową binarkę do uniwersalnej binarki Apple'a." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Brak pliku wejściowego\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "nie można skopiować \"%s\" do \"%s\": %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "nie można skompresować \"%s\" do \"%s\"" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "nie można otworzyć katalogu \"%s\": %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "nie można usunąć \"%s\": %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage został skompilowany bez obsługi XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Nieznany format kompresji %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Nieznana kompresja \"%s\"" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "nieznany format docelowy %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "nie można odnaleźć lokalizacji \"%s\"" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s nie istnieje. Proszę określić --target lub --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "nieprawidłowy plik modinfo \"%s\"" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Nieznana platforma \"%s-%s\"" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Więcej niż jedno urządzenie instalacji?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "instaluje obrazy GRUB-a poniżej KATALOGU/%s zamiast katalogu %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "CEL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"instaluje GRUB-a dla platformy DOCELOWEJ [domyślnie=%s]; dostępne platformy: " +"%s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"sprawia, żeby napęd był uruchamialny także jako dyskietka (domyślne dla " +"urządzeń fdX). Może źle działać z niektórymi BIOS-ami." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "usuwa mapę urządzeń, jeśli już istnieje" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "instaluje nawet, jeśli wykryto problemy" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "używa pliku ID nawet jeśli dostępny jest UUID" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"moduł dysku do użycia (biosdisk lub natywny). Ta opcja jest dostępna tylko " +"na platformach z BIOS-em." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"bez uaktualniania zmiennych NVRAM \"boot-device\"/\"Boot*\". Ta opcja jest " +"dostępna tylko na platformach EFI i IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "nie wykrywa systemów plików w URZĄDZENIU" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "bez instalowania sektora rozruchowego" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Bez stosowania kodów reeda-solomona przy osadzaniu core.img. Ta opcja jest " +"dostępna tylko na platformach z BIOS-em." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"urządzenie instalacji jest wymienne. Ta opcja jest dostępna tylko na " +"platformach z EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"IDentyfikator bootloadera. Ta opcja jest dostępna tylko na platformach EFI i " +"Mac." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "używa KATALOGU jako głównego partycji systemowej EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "używa KATALOGU do instalacji PPC MAC." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "używa PLIKU jako fontu dla etykiety" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "używa KOLORU dla etykiety" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "używa KOLORU dla tła etykiety" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "używa ŁAŃCUCHA jako wersji produktu" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPCJA] [URZĄDZENIE_INSTALACJI]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Instaluje GRUB-a na dysku." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"URZĄDZENIE_INSTALACJI musi być nazwą pliku urządzenia systemowego.\n" +"%s kopiuje obrazy GRUB-a do %s. Na niektórych platformach może także " +"instalować GRUB-a w sektorze rozruchowym." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "napęd %s jest zdefiniowany wielokrotnie w mapie urządzeń %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Nie udało się określić platformy. Proszę użyć --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Instalowanie dla platformy %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "nie podano urządzenia instalacji" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "nie można odnaleźć katalogu EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "nie można odnaleźć urządzenia dla %s (czy /dev jest zamontowany?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" +"nie można odnaleźć urządzenia GRUB-a dla %s. Proszę sprawdzić device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s nie wygląda na partycję EFI" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Znaleziono błąd" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "system plików na %s nie jest typu HFS ani HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"próba instalacji na dysk zaszyfrowany bez włączonej opcji cryptodisk. Proszę " +"ustawić \"%s\" w pliku \"%s\"" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Nie można utworzyć pliku: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"brak podpowiedzi dla tej platformy. Można oczekiwać mniejszej wydajności." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "BEZ URUCHAMIANIA: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "wybrana partycja nie jest partycją PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "nie udało się skopiować Gruba na partycję PReP" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"partycja PReP nie jest pusta. Jeżeli na pewno ma być użyta, proszę wyczyścić " +"ją przy użyciu dd: \"%s\"" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Nie podano identyfikatora bootloadera EFI." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "UWAGA: nie wykonano instalacji specyficznej dla platformy" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Instalacja zakończona. Nie zgłoszono błędów." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "błogosławi dla Maców opartych na x86" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "błogosławi dla Maców opartych na PPC" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Nie podano ścieżki ani urządzenia.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc ŚCIEŻKA|--x86 ŚCIEŻKA" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Macowe błogosławienie na HFS lub HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Składnia: %s [PLIK_WEJŚCIOWY [PLIK_WYJŚCIOWY]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Błąd Freetype %d podczas ładowania glifu 0x%x dla U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (środkowego)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (lewego)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (prawego)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Podstawienie spoza zakresu (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Wyszukiwanie spoza zakresu: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Nie obsługiwany rodzaj podstawienia: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Nie obsługiwane określenie podstawienia: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Nie obsługiwane określenie pokrycia: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "UWAGA: nie obsługiwane parametry cechy fontu: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "zapisuje wyjście do PLIKU [wymagane]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "wybiera indeks fontu" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "OD-DO[,OD-DO]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "ustawia zakres fontu" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "ustawia nazwę rodziny fontu" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "ROZMIAR" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "ustawia rozmiar fontu" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "ustawia opuszczenie fontu" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "ustawia podniesienie fontu" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "przekształca do fontu pogrubionego" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "wymusza autohinting" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "wyłącza hinting" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignoruje bitmapy przy wczytywaniu" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "błędny zakres fontu" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPCJE] PLIKI_FONTÓW" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Konwertuje fonty z popularnych formatów plików do PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "plik wyjściowy musi być podany" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType nie powiodło się" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "nie można otworzyć pliku %s, indeks %d: błąd %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "nie można ustawić rozmiaru fontu %dx%d: błąd Freetype %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "ustawia katalog przedrostka" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"osadza PLIK jako obraz ramdysku\n" +"Włącza \"-p (memdisk)/boot/grub\" i nadpisuje prefiks podany wcześniej, ale " +"prefiks może być nadpisany późniejszymi opcjami" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "osadza plik jako wczesną konfigurację" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "dodaje segment NOTE dla CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" +"zapisuje wygenerowany obraz do PLIKU [domyślnie na standardowe wyjście]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "generuje obraz w FORMACIE" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "dostępne formaty:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "nieznany format docelowy %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPCJA]... [MODUŁY]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Tworzy rozruchowy obraz GRUB-a." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Nie określono formatu docelowego (opcji -O)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Nie określono przedrostka (opcji -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"\"%s\" jest błędnie skompilowany: adres startowy to 0x%llx zamiast 0x%llx: " +"błąd ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "ustawia nazwę pliku wejściowego. Domyślny to standardowe wejście" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Nieznany identyfikator kodu klawisza %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Nieznany kod skaningowy klawisza 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"BŁĄD: nie znaleziono poprawnego układu klawiatury. Proszę sprawdzić " +"wejście.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Generuje układ klawiatury GRUB-a z układu dla konsoli Linuksa." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "katalog główny serwera TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "podkatalog względny na serwerze sieciowym" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Przygotowuje obrazy GRUB-a do rozruchu sieciowego w katalogu_sieciowym/" +"podkatalogu, gdzie katalog_sieciowy to główny katalog TFTP." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "nie obsługiwana platforma %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Utworzono katalog rozruchu sieciowego dla %s. Proszę skonfigurować serwer " +"DHCP, aby wskazywał na %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Liczba iteracji PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Długość wygenerowanego skrótu" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Długość zarodka" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Generuje skrót hasła PBKDF2." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "nie udało się odczytać hasła" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Potwierdzenie hasła: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "hasła nie zgadzają się" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "nie udało się odczytać danych losowych na zarodek" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "błąd kryptograficzny numer %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "skrót PBKDF2 hasła to %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Nie podano ścieżki.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ŚCIEŻKA" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Przekształca nazwę pliku w systemie na nazwę dla GRUB-a." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "zapisuje obrazy ROM do KATALOGU [opcjonalne]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "używa PLIKU jako programu xorriso [opcjonalne]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "używa ŁAŃCUCHA jako nazwy produktu" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"włącza rozruch typu sparc; wyłącza HFS+, APM, ARCS oraz rozruch jako obraz " +"dysku dla i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"włącza rozruch ARCS (maszyny mips big-endian, głównie SGI); wyłącza HFS+, " +"APM, sparc64 i rozruch jako obraz dysku dla i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Tworzy uruchamialny obraz płyty CD, dysku, pendrive'a lub dyskietki z GRUB-" +"em." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Generuje uruchamialny obraz CD/USB/dyskietki. Argumenty inne niż opcje tego " +"programu są przekazywane do xorriso i oznaczają pliki źródłowe, katalogi " +"źródłowe lub dowolne opcje mkisofs wymienione w wyjściu \"%s\"." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Opcja -- przełącza w natywny tryb polecenia xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "W sprawie xorriso prosimy pisać na adres ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[OPCJA] ŹRÓDŁO..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "włączanie obsługi %s..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Zainstalowana wersja xorriso nie obsługuje \"--grub2-boot-info\". Niektóre " +"opcje są wyłączone. Proszę użyć xorriso 1.2.9 lub nowszego." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Zainstalowana wersja xorriso nie obsługuje \"--grub2-boot-info\". Obraz core " +"jest zbyt duży. Rozruch jako dysk jest wyłączony. Proszę użyć xorriso 1.2.9 " +"lub nowszego." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Generuje samodzielny (zawierający wszystkie moduły) obraz w wybranym formacie" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Akceptowana jest składnia z punktem podmiany (np. /boot/grub/grub.cfg=./grub." +"cfg)" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "OBRAZ1 [OBRAZ2 ...] PUNKT_MONTOWANIA" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "wymagany jest obraz i punkt montowania" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "podany argument jest urządzeniem systemowym, a nie ścieżką" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "oddziela elementy wyjścia przy użyciu znaków ASCII NUL" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[domyślnie=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "wypisuje CEL" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "dostępne cele:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPCJA]... [PLIK|URZĄDZENIE]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Wyszukanie informacji o urządzeniu dla podanej ścieżki (lub urządzenia, " +"jeśli podano -d)" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "czyta tekst z PLIKU." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "używa KOLORU dla tekstu" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "używa KOLORU dla tła" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "ustawia etykietę do renderowania" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "używa PLIKU jako fontu (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Renderowanie .disk_label Apple'a." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Za mało argumentów\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ŚCIEŻKA]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Sprawdza plik konfiguracyjny skryptu GRUB-a pod kątem błędów składni." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Błąd składni w linii %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Skrypt \"%s\" nie zawiera poleceń, więc niczego nie zrobi\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "używa PLIKU jako obrazu startowego [domyślny=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "używa PLIKU jako obrazu core [domyślny=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Nie podano urządzenia.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Ustawia obrazy do uruchomienia z URZĄDZENIA.\n" +"\n" +"Zwykle ten problem nie powinien być bezpośrednio uruchamiany. Proszę użyć " +"programu grub-install zamiast tego." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "URZĄDZENIE musi być urządzeniem systemu operacyjnego (np. /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Nieprawidłowe urządzenie \"%s\".\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "katalog główny, jaki będzie widziany w czasie działania [domyślnie=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"katalog bieżący syslinuksa, jaki będzie widziany w czasie działania " +"[domyślnie: katalog rodzica pliku wejściowego]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "zapisuje wyjście do PLIKU [domyślnie=standardowe wyjście]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Przekształca konfigurację syslinuksa na konfigurację GRUB-a." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "nie można skompresować obrazu jądra" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "nieznana kompresja %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Dekompresor zbyt duży" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "obraz core jest za duży (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "obraz jądra jest za duży (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "rozmiar pliku diskboot.img musi wynosić %u bajtów" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img nie pasuje do żadnej znanej dobrej wersji. Ewentualna " +"kontynuacja na własne ryzyko" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "obraz firmware jest za duży" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "błędny format linii: %sn" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "pierwszy sektor pliku core nie jest wyrównany do sektora" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "odnaleziono dane nie wyrównane do sektora w pliku core" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "sektory pliku core są zbyt pofragmentowane" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "rozmiar \"%s\" nie wynosi %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "rozmiar \"%s\" jest za mały" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Próba zainstalowania programu GRUB na dysku z wieloma etykietami partycji " +"lub zarówno z etykietą, jak i systemem plików. To nie jest jeszcze " +"obsługiwane." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"nie można zidentyfikować systemu plików w %s; nie można wykonać sprawdzania " +"bezpieczeństwa" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s zawiera system plików %s, który nie jest znany z rezerwowania miejsca na " +"uruchamianie w stylu systemu DOS. Instalowanie programu GRUB może spowodować " +"USZKODZENIE SYSTEMU PLIKÓW, jeśli ważne dane zostaną zastąpione przez " +"program grub-setup (parametr --skip-fs-probe wyłącza to sprawdzanie; należy " +"go używać na własne ryzyko)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s zawiera mapę partycji %s, która nie jest znana z rezerwowania miejsca na " +"uruchamianie w stylu systemu DOS. Instalowanie programu GRUB może spowodować " +"USZKODZENIE SYSTEMU PLIKÓW, jeśli ważne dane zostaną zastąpione przez " +"program grub-setup (parametr --skip-fs-probe wyłącza to sprawdzanie; należy " +"go używać na własne ryzyko)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s zawiera mapę partycji %s oraz LDM, co nie jest znane jako bezpieczne " +"połączenie. Instalowanie programu GRUB może spowodować USZKODZENIE SYSTEMU " +"PLIKÓW, jeśli ważne dane zostaną zastąpione przez program grub-setup " +"(parametr --skip-fs-probe wyłącza to sprawdzanie; należy go używać na własne " +"ryzyko)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Próba zainstalowania programu GRUB na dysku bez partycji lub na partycji. To " +"jest ZŁY pomysł." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Próba zainstalowania programu GRUB na dysku z wieloma etykietami partycji. " +"To nie jest jeszcze obsługiwane." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partycje typu \"%s\" nie obsługują osadzania" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "System plików \"%s\" nie obsługuje osadzania" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Obszar osadzania jest niezwykle mały, nie pomieści core.img." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "brak odstępu w obrazie core" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "niezgodność wersji core.img" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"osadzanie nie jest możliwe, ale jest wymagane przy instalacji na RAID-ie lub " +"LVM-ie" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "nie można określić systemu plików na %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "system plików \"%s\" nie obsługuje list bloków" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"osadzanie nie jest możliwe, ale jest wymagane dla instalacji na wielu dyskach" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Osadzanie nie jest możliwe. Program GRUB może być instalowany z tymi " +"ustawieniami tylko używając list blokowania. Jednakże, listy blokowania są " +"NIEPEWNE, a ich używanie jest niezalecane." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "nie zostanie kontynuowane za pomocą list blokowania" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "listy bloków są błędne" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "niekompletne listy bloków" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Składnia: %s -o WYJŚCIE ARGUMENTY_CKBMAP...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Tworzy plik układu klawiatury GRUB-a." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "wyświetla ten komunikat i kończy działanie" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "wyświetla informację o wersji i kończy działanie" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s generuje układ klawiatury dla GRUB-a przy użyciu ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Prosimy zgłaszać błędy na adres ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: opcja musi mieć argument - \"%s\"\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Składnia: %s [OPCJA]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Generuje plik konfiguracyjny GRUB-a." + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" +"zapisuje wygenerowaną konfigurację do PLIKU [domyślnie na standardowe " +"wyjście]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Nieznana opcja \"%s\"\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: To musi być uruchomione jako root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Nie odnaleziono.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Generowanie pliku konfiguracyjnego GRUB-a..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"W wygenerowanym pliku konfiguracyjnym GRUB-a wykryto błędy składni.\n" +"Proszę się upewnić, że w plikach /etc/default/grub oraz /etc/grub.d/*\n" +"nie ma błędów lub wypełnić raport o błędzie z załączonym plikiem %s." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "gotowe" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Uwaga:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Składnia: %s [OPCJA] WPIS_MENU\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Ustawia domyślny wpis rozruchowy dla GRUB-a tylko dla następnego " +"uruchomienia." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "oczekuje obrazów GRUB-a poniżej KATALOGU/%s zamiast katalogu %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"WPIS_MENU to liczba, tytuł elementu menu lub identyfikator elementu menu.\n" +"Należy zauważyć, że elementy menu w podmenu lub podpodmenu wymagają " +"określania\n" +"składnika podmenu, a następnie składnika elementu menu. Tytuły powinny być\n" +"oddzielone przy użyciu znaku większości (>) bez dodatkowych spacji.\n" +"W zależności od powłoki, niektóre znaki, w tym >, mogą wymagać cytowania.\n" +"Więcej informacji na ten temat można znaleźć w podręczniku do GRUB-a, w " +"sekcji\n" +"dotyczącej polecenia \"default\". " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Więcej niż jeden wpis menu?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Nie podano wpisu menu." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Ustawia domyślny wpis menu rozruchowego dla GRUB-a." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "To wymaga ustawienia GRUB_DEFAULT=saved w %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "WPIS_MENU to numer, tytuł lub identyfikator wpisu z menu." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Żądano terminala szeregowego, ale nie podano GRUB_SERIAL_COMMAND. Użyte " +"zostaną parametry domyślne." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Znaleziono motyw: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Znaleziono tło: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Nie obsługiwany format obrazu" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Ustawienie GRUB_TIMEOUT na wartość niezerową przy ustawionym " +"GRUB_HIDDEN_TIMEOUT nie jest już obsługiwane." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Znaleziono system GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Znaleziono moduł Hurda: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Znaleziono elementy systemu Hurd, ale za mało do uruchomienia." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, za pomocą systemu Hurd %s (tryb ratunkowy)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, za pomocą systemu Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Proszę nie używać starego tytułu \"%s\" dla GRUB_DEFAULT, ale \"%s\" (dla " +"wersji starszych niż 2.00) lub \"%s\" (dla 2.00 lub nowszych)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Wczytywanie systemu GNU Mach..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Wczytywanie systemu Hurd..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Opcje zaawansowane dla systemu %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Wczytywanie jądra systemu Illumos..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, za pomocą systemu kFreeBSD %s (tryb ratunkowy)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, za pomocą systemu kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Wczytywanie jądra systemu FreeBSD %s..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Znaleziono jądro systemu FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Znaleziono katalog modułów jądra: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, za pomocą systemu Linux %s (tryb ratunkowy)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, za pomocą systemu Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Wczytywanie systemu Linux %s..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Wczytywanie początkowego dysku RAM..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Znaleziono obraz Linuksa: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Znaleziono obraz initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, za pomocą jądra %s (przez %s, tryb ratunkowy)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, za pomocą jądra %s (przez %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Znaleziono jądro systemu NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (loader)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (loader)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Znaleziono %s na %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bitowy)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bitowy)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(na %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, za pomocą systemu Xen %s i Linux %s (tryb ratunkowy)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, za pomocą systemu Xen %s i Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, za pomocą hipernadzorcy Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Wczytywanie systemu Xen %s..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Hipernadzorca Xen, wersja %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Opcje zaawansowane dla systemu %s (z użyciem hipernadzorcy Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Znaleziono %s na %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s nie jest jeszcze obsługiwany przez grub-mkconfig.\\n" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo new file mode 100644 index 0000000000000000000000000000000000000000..bc8690f757c35fdaf7f68adfbcb878715da3c167 GIT binary patch literal 88255 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, 2012, 2013, 2014. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2016-10-21 14:29-0200\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.8.11\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "velocidade de porta serial não suportada" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "paridade de porta serial não suportada" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "bit de parada de porta serial não suportada" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "tamanho de palavra de porta serial não suportada" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Não carregar tabelas de host especificado por lista separada por vírgulas." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" +"Carregar apenas as tabelas especificadas pela lista separada por vírgulas." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Exportar tabelas versão 1 para o SO." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Exportar tabelas versão 2 e 3 para o SO." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Definir OEMID de RSDP, XSDT e RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Definir ID do OEMTABLE de RSDP, XSDT e RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Definir revisão OEMTABLE de RSDP, XSDT e RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Definir o campo do criador de RSDP, XSDT e RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Definir a revisão do criador de RSDP, XSDT e RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Não atualizar EBDA. Pode corrigir as falhas ou travamentos em algumas BIOS, " +"mas, torna-se ineficaz em um SO que não recebe RSDP do GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "fim de arquivo prematuro %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--excluir=TABELA1,TABELA2|--carregar somente=TABELA1,TABELA2] " +"ARQUIVO1 [ARQUIVO2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Carregar tabelas de host ACPI e tabelas especificadas pelos argumentos." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "erro: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "memória insuficiente" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "não foi possível ler '%s': %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Falhar ao desligar via ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Lista de dispositivos." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "é esperado o nome de arquivo" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ARQUIVO" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Imprimir uma lista de bloco." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "você precisa carregar o kernel primeiro" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Iniciar um sistema operacional." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Nenhuma estatística de tempo de inicialização está disponível\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Exibir as estatísticas do tempo de inicialização." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Estatísticas de cache do disco: acertos = %lu (%lu.%02lu%%), erros = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Nenhuma estatística de cache do disco disponível\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Obter informações do cache do disco." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Aceitar finais de linha CR/NL estilo DOS." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Exibe os conteúdos de um arquivo." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "são esperados dois argumentos" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Comparar arquivo '%s' com '%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Os arquivos diferem no tamanho: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Os arquivos diferem no deslocamento %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Os arquivos são idênticos.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ARQUIVO1 ARQUIVO2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Comparar dois arquivos." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Carregar outro arquivo de configuração." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Carregar outro arquivo de configuração sem alterar o contexto." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Carregar outro arquivo de configuração sem alterar o contexto mas obter " +"apenas as entradas de menu." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "" +"Carregar outro arquivo de configuração mas obter apenas as entradas de menu." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[ano-]mês-dia] [hora:minuto[:segundo]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Exibir/definir a data e hora atual." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Não exibir a nova linha final." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Habilitar a interpretação invertida de escapes." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] TEXTO" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Exibe uma linha de texto." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Reiniciar no menu de configuração do firmware." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Corrigir problema de vídeo." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "A imagem ROM está presente." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Não foi possível habilitar a área ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Criar estruturas parecidas com a BIOS para compatibilidade com SO existente." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Carregar dump da BIOS." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "TEXTO ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Avaliar argumentos como comandos GRUB" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Verificar se o ARQUIVO pode ser iniciado como kernel convidado sem " +"privilégios i386 PAE Xen" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Verificar se o ARQUIVO pode ser iniciado como kernel convidado sem " +"privilégios x86_64 Xen" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Verificar se o ARQUIVO pode ser usado como kernel convidado com privilégios " +"x86 Xen" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Verificar se o ARQUIVO pode ser usado como um kernel multiboot x86" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Verificar se o ARQUIVO pode ser usado como um kernel multiboot2 x86" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Verificar se o ARQUIVO é ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Verificar se o ARQUIVO é ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Verificar se o ARQUIVO é IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Verificar se o ARQUIVO é MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Verificar se o ARQUIVO é MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Verificar se o ARQUIVO é SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Verificar se o ARQUIVO é POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Verificar se o ARQUIVO é x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Verificar se o ARQUIVO é x86 Linux com suporte ao protocolo 32-bit" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Verificar se o ARQUIVO é x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Verificar se o ARQUIVO é i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Verificar se o ARQUIVO é x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Verificar se o ARQUIVO é x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Verificar se o ARQUIVO é i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Verificar se o ARQUIVO é x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Verificar se o ARQUIVO é i386 arquivo EFI" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Verificar se o ARQUIVO é x86_64 arquivo EFI" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Verificar se o ARQUIVO é IA64 arquivo EFI" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Verificar se o ARQUIVO é ARM64 arquivo EFI" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Verificar se o ARQUIVO é ARM arquivo EFI" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Verificar se o ARQUIVO é hiberfil.sys no estado de hibernação" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Verificar se o ARQUIVO é x86_64 XNU (kernel do Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Verificar se o ARQUIVO é i386 XNU (kernel do Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Verificar se o ARQUIVO é XNU (kernel do Mac OS X) imagem hibernada" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Verificar se o ARQUIVO é o setor de inicialização da BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "falso" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "OPÇÕES ARQUIVO" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Verificar se o ARQUIVO é do tipo especificado." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "nenhuma partição" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "A nova MBR está escrita em '%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DISPOSITIVO [PARTIÇÃO[+/-[TIPO]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Preencha a MBR híbrida do DISPOSITIVO da unidade GPT. Partições " +"especificadas serão uma parte da MBR híbrida. Até 3 partições são " +"permitidas. TIPO é um tipo de MBR. + significa que a partição está ativa. " +"Somente uma partição pode estar ativa." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Desliga o computador. Este comando não funciona em todas as implementações " +"de firmware." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Especifica o hash (soma de verificação) a utilizar." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Verifica os hashes dos arquivos com a lista de hash em ARQUIVO." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "O diretório base para a lista de hash." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIRETÓRIO" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Não parar após o primeiro erro." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Descompactar o arquivo antes de verificar o hash." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ERRO DE LEITURA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HASH COINCIDE\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c ARQUIVO [-p PREFIXO]] [ARQUIVO1 [ARQUIVO2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Computar ou verificar o hash." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c ARQUIVO [-p PREFIXO]] [ARQUIVO1 [ARQUIVO2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Definir o gerenciamento avançado de energia (APM)\n" +"(1=baixo, ..., 254=alto, 255=desligado)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Exibir o modo de energia." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Congelar as configurações de segurança do ATA até ser reiniciado." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Exibir o status da saúde do SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Definir o gerenciamento acústico automático\n" +"(0=desligado, 128=silencioso, ..., 254=rápido)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Definir o tempo limite de espera\n" +"(0=desligado, 1=5s, 2=10s, ..., 240=20min, 241=30min, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Definir a unidade para o modo de espera." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Definir a unidade para o modo suspenso." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Configurações e identidade da unidade de impressão." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Exibir o conteúdo bruto do setor ATA IDENTIFY." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Habilitar/desabilitar o SMART (0/1)" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Não exibir mensagens." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "é esperado um parâmetro" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPÇÕES] DISCO" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Obter/definir os parâmetros ATA do disco." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Uso:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[PADRÃO ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Exibe uma mensagem de ajuda." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Ignorar os deslocamentos de bytes do início do arquivo." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Ler apenas o COMPRIMENTO dos bytes." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPÇÕES] ARQUIVO_OU_DISPOSITIVO" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Exibir os conteúdos brutos de um arquivo ou memória." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Exibir o dump bruto dos conteúdos do CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Bit de teste em BYTE:BIT na CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Bit de limpeza em BYTE:BIT na CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Bit de configuração em BYTE:BIT na CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Exibir as estatísticas de tempo de inicialização do coreboot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Lista as tabelas coreboot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Verifica se a CPU suporta o modo (padrão) de 64-bit (longo)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Verifica se a CPU suporta o PAE (Physical Address Extension)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Verifica as funcionalidades da CPU." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Exibe os mapeamentos atuais." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Redefinir todos os mapeamentos para os valores padrões." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Executar ambos os mapeamentos direto e inverso." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Nenhuma unidade foi remapeada." + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS disco #número ------> Dispositivo GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] dispositivo_grub disco_so." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Gerenciar os mapeamento de unidades da BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Não usar o APM para desligar o computador." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Desligar o sistema, se possível usando o APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "APM não encontrado" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Versão %u.%u\n" +"32 bit CS = 0x%x, comp. = 0x%x, desloc. = 0x%x\n" +"16 bit CS = 0x%x, comp. = 0x%x\n" +"DS = 0x%x, comp. = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Interface 16 bits protegida suportada\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Interface 16 bits protegida não suportada\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Interface 32 bits protegida suportada\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Interface 32 bits protegida não suportada\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "A CPU inativa desacelera o processador\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "A CPU inativa não desacelera o processador\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM desabilitado\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM habilitado\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM desengajdado\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM engajado\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Exibir informações APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "é esperado nome de arquivo ou tempo e notas" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Comando inválido %s.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "arquivo '%s' não encontrado" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "número não reconhecido" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "ARQUIVO | TEMPO [TIMBRE1 DURAÇÃO1] [TIMBRE2 DURAÇÃO2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Reproduzir um tom." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "definir o modo NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "definir o modo CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "definir o modo ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "definir o modo Insert" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "definir o modo Pause" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "pressionar o Shift esquerdo" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "pressionar o Shift direito" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "pressionar SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "pressionar a tecla NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "pressionar a tecla CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "pressionar a tecla ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "pressionar a tecla Insert" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "pressionar o Alt esquerdo" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "pressionar o Alt direito" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "pressionar o Ctrl esquerdo" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "pressionar o Ctrl direito" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "não atualizar o estado do LED" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[COMBINAÇÃO_DE_TECLAS1] [COMBINAÇÃO_DE_TECLAS2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emula um sequencia de teclas" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Execute 'go' para continuar o GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Retorna ao prompt IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Salvar o valor lido para dentro da variável NOMEDAVAR." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "NOMEDAVAR" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORTA" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Ler valor 8 bit da PORTA." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Ler valor 16 bit da PORTA." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Ler valor 32 bit da PORTA." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORTA VALOR [MÁSCARA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Gravar VALOR 8 bit para a PORTA." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Gravar VALOR 16 bit para a PORTA." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "VALOR DO ENDEREÇO [MÁSCARA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Gravar VALOR 32 bit para a PORTA." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "a variável '%s' não está definida" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Carregar um leiaute de teclado." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Verificar a tecla Shift." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Verificar a tecla Ctrl." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Verificar a tecla Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Verificar o status da tecla modificadora." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "não foi possível encontrar o comando '%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Digite a senha: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Analisar a configuração antiga no mesmo contexto." + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Analisar a configuração antiga no novo contexto." + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Analisar a configuração antiga no mesmo contexto apenas para as entradas de " +"menu" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Analisar a configuração antiga no novo contexto apenas para as entradas de " +"menu" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TIPO] ARQUIVO [ARGUMENTO ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simular o comando 'kernel' do grub-legacy" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ARQUIVO [ARGUMENTO ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simular o comando 'initrd' do grub-legacy" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simular o comando 'modulenounzip' do grub-legacy" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] SENHA [ARQUIVO]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simular o comando 'password' do grub-legacy" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simular o comando 'password' do grub-legacy no modo de entrada do menu" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Especificar um nome de arquivo." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Ignorar a verificação de assinatura do arquivo de ambiente." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "" +"[-f ARQUIVO] [-s|--skip-sig] [nome_da_variável_para_a_lista_branca] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Carregar as variáveis do arquivo de bloco de ambiente." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f ARQUIVO]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Listar as variáveis do arquivo de bloco de ambiente." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f ARQUIVO] nome_da_variável [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Salvar as variáveis no arquivo de bloco de ambiente." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Exibir uma lista longa com informações mais detalhadas." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Imprimir tamanhos de forma legível." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Listar todos os arquivos." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Protocolos de rede:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [ARQUIVO ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Listar os dispositivos e arquivos." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Exibir apenas as tabelas versão 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Exibir apenas as tabelas versão 2 e 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Exibir informações ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM disponível" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM reservada" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "RAM recuperável da ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "Armazenamento RAM não volátil da ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM com problemas (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM armazenando tabelas de coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM armazenando código de firmware" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "endereço_base = 0x%llx, comprimento = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "endereço_base = 0x%llx, comprimento = 0x%llx, tipo = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Listar mapa de memória fornecido pelo firmware." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Listar dispositivos PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ENDEREÇO" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Ler valor 8 bit do ENDEREÇO." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Ler valor 16 bit do ENDEREÇO;" + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Ler valor 32 bit do ENDEREÇO." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Gravar VALOR 8 bit para o ENDEREÇO." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Gravar VALOR 16 bit para o ENDEREÇO." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Gravar VALOR 32 bit para o ENDEREÇO." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Tipo de entrada do menu." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "TEXTO" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Lista de usuários com permissão de iniciar esta entrada." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "NOME_DE_USUÁRIO[,NOME_DE_USUÁRIO]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tecla para iniciar rapidamente esta entrada." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TECLA" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Use TEXTO como corpo da entrada do menu." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Identificador de entrada do menu." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Esta entrada pode ser iniciada por qualquer usuário." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCO" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Definir uma entrada do menu." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Definir um submenu." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Nome\tContador Ref\tDependências\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Exibir esta mensagem." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ENDEREÇO [TAMANHO]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Exibir o conteúdo da memória." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MÓDULO" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Remover um módulo." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Exibir os módulos carregados." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Sair do GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Nenhum CS5536 encontrado." + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 em %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Número de slot da RAM %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Bytes SPD gravados: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Tamanho total da flash: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Tipo de memória: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Número da parte: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Tipo de memória: desconhecido." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Exibir informação de memória." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s não suporta UUIDs" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MÓDULO1 MÓDULO2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Executa COMANDOS na partição.\n" +"Use 'parttool PARTIÇÃO help' para a lista de comandos disponíveis." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VALOR" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Desculpe, nenhum parttool disponível para %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "argumento desconhecido '%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "COMANDOS DA PARTIÇÃO" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "SENHA DO USUÁRIO" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Definir senha de usuário (texto puro). Desaconselhado e inseguro." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "senha PBKDF2 inválida" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USUÁRIO SENHA_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Definir senha de usuário (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Selecionar dispositivo pelo fabricante e ID do dispositivo." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[fabricante]:[dispositivo]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Selecionar dispositivo por sua posição no barramento." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[barramento]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "símbolo '%c' faltando" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSIÇÃO] [-d DISPOSITIVO]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Definir uma variável para retornar valor." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Determinar driver." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Determinar o tipo de mapa da partição." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Determinar o tipo de sistema de arquivos." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Determinar o UUID do de sistema de arquivos." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Determinar o rótulo do sistema de arquivos." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "o sistema de arquivos '%s' não suporta rótulos" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DISPOSITIVO" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Obter informações do dispositivo." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[VARIÁVEL_DO_AMBIENTE]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Definir variável com entrada do usuário." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Reiniciar o computador." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Armazenar NÚMERO de componente correspondente em NOME_DE_VARIÁVEL." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NÚMERO:]NOME_DA_VARIÁVEL" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "EXPRESSÃO_REGULAR TEXTO" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Testa se a EXPRESSÃO_REGULAR corresponde ao TEXTO." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NOME [VARIÁVEL] [DICAS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Procurar dispositivos pelo arquivo. Se a VARIÁVEL estiver especificada, o " +"primeiro dispositivo encontrado é definido para uma variável." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Procurar dispositivos pelo rótulo. Se a VARIÁVEL estiver especificada, o " +"primeiro dispositivo encontrado é definido para uma variável." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Procurar dispositivos pelo UUID. Se a VARIÁVEL estiver especificada, o " +"primeiro dispositivo encontrado é definido para uma variável." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Procurar dispositivos pelo arquivo." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Procurar dispositivos pelo rótulo do sistema de arquivos." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Procurar dispositivos pelo UUID do sistema de arquivos." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Definir uma variável para o primeiro dispositivo encontrado." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Não testar nenhuma unidade de disquete." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Tentar primeiro a DICA do dispositivo. Se a DICA terminar em vírgula, tentar " +"também subpartições." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "DICA" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Tentar primeiro a DICA do dispositivo se executando em IEEE1275. Se a DICA " +"terminar em vírgula, tentar também subpartições." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Tentar primeiro a DICA do dispositivo se executando na BIOS. Se a DICA " +"terminar em vírgula, tentar também subpartições." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Tentar primeiro a DICA do dispositivo se o acesso direto ao hardware for " +"suportado. Se a DICA terminar em vírgula, tentar também subpartições." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Tentar primeiro a DICA do dispositivo se executando no EFI. Se a DICA " +"terminar em vírgula, tentar também subpartições." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Tentar primeiro a DICA do dispositivo se executando no ARC. Se a DICA " +"terminar em vírgula, tentar também subpartições." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint DICA [--hint DICA] ...] NOME" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Procurar dispositivos pelo arquivo, sistema de arquivos ou UUID do sistema " +"de arquivos. Se '--set' for especificado, o primeiro dispositivo encontrado " +"é definido para uma variável. Se nenhum nome de variável for especificado, " +"'root' é usado." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Registro %x de %x:%02x.%x é %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSIÇÃO] [-d DISPOSITIVO] [-v VARIÁVEL] REGISTRO[=VALOR[:MÁSCARA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipular dispositivos PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Contagem regressiva detalhada." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Permitir interromper com ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NÚMERO_DE_SEGUNDOS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Aguardar por um número de segundos especificado." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "assumir que a entrada é um arquivo de configuração do syslinux." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Executar configuração syslinux no mesmo contexto." + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Executar configuração syslinux no novo contexto." + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Executar configuração syslinux no mesmo contexto apenas para as entradas de " +"menu" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Executar configuração syslinux no novo contexto apenas para as entradas de " +"menu" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "nenhum terminal especificado" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminal '%s' não foi encontrado" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Terminais de entrada ativos:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Terminais de entrada disponíveis:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Terminais de saída ativos:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Terminais de saída disponíveis:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Listar ou selecionar um terminal de entrada." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Listar ou selecionar um terminal de saída." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESSÃO ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Avaliar uma expressão." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESSÃO" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Carregar o mesmo arquivo de várias formas." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "tamanho de bloco inválido" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Tamanho do arquivo: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Tempo decorrido %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Velocidade: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s TAMANHO] NOME_DO_ARQUIVO" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Testa a velocidade de leitura do arquivo." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "nenhuma comando foi especificado" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Tempo decorrido: %d.%03d segundos \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "COMANDO [ARGUMENTOS]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Tempo medido usado pelo COMANDO" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Traduzir para maiúsculas." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Traduzir para minúsculas." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Não fazer nada, sucesso." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Não fazer nada, sem sucesso." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Testar suporte USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Ignorar a verificação de assinatura do arquivo de chave público." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "assinatura ruim" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "chave pública %08x não encontrads" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "módulo '%s' não está carregado" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] ARQUIVO ARQUIVO_ASSINATURA [ARQUIVO_CHAVE_PÚBLICA]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] ARQUIVO_CHAVE_PÚBLICA" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Adiciona o ARQUIVO_CHAVE_PÚBLICA as chaves confiáveis." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Exibe a lista de chaves confiáveis." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_CHAVE_PÚBLICA" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Remove a ID_CHAVE_PÚBLICA das chaves confiáveis." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Somente texto" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Cor direta, máscara: %d/%d/%d/%d posição: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Na paleta" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Planar" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +#, fuzzy +msgid "Non-chain 4 " +msgstr "Cadeia de chamadas:" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monocromático" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Modo de vídeo desconhecido " + +#: grub-core/commands/videoinfo.c:111 +#, fuzzy +msgid " EDID checksum invalid" +msgstr "Chamada de procedimento incorreta." + +#: grub-core/commands/videoinfo.c:116 +#, fuzzy, c-format +msgid " EDID version: %u.%u\n" +msgstr "Versão atual" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Modo preferencial: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Nenhum modo preferencial disponível\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "especificação de modo de vídeo inválida '%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Lista dos modos de vídeo suportados:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legenda: máscara/posição=vermelho/verde/azul/reservado" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adaptador '%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Nenhuma informação disponível" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Falha ao iniciar o adaptador de vídeo" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[LxA[xP]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Lista os modos de vídeo disponíveis. Se a resolução for dada exibe apenas os " +"modos correspondentes." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[LxA]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Testar subsistema de vídeo no modo LxA" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Testar subsistema de vídeo." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[DIRETÓRIO]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Listar o armazenamento Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] UUID_DO_GRUB [NOME_DA_VARIÁVEL]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transforma UUID de 64 bit num formato adequado ao XNU. Se '-l' for usado " +"mantem as letras minúsculas como feito pelo blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "falha ao ler o setor 0x%llx de '%s'" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "falha ao gravar o setor 0x%llx para '%s'" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Montar pelo UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Montar tudo." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "não foi possível abrir '%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "não foi possível procurar '%s': %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "ORIGEM|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Montar um dispositivo criptografado." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Não foi possível encontrar o volume físico '%s'. Alguns módulos poderão " +"faltar na imagem core." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "volume físico %s não encontrado" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "tempo de espera excedido ao ler `%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Não foi possível carregar sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Não foi possível carregar sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "Não foi possível ler os metadados ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "versão ou magia ELI incorretas" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Tentando descriptografar a chave mestre..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Digitar frase secreta para %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Slot %d aberto\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "tentar ler ou gravar fora do disco '%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "não foi possível gravar no CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Unidades de disco nativas estão em uso. Recusando usar firmware da interface " +"de disco." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +#, fuzzy +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "sua partição de embutir LDM é muito pequena; não será possível embutir" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "este LDM não tem partição de embutir; não será possível embutir" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Remover a unidade de loopback especificada." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] NOME_DO_DISPOSITIVO ARQUIVO." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Fazer uma unidade virtual a partir de um arquivo." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "realocação de 0x%x ainda não está implementada" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "nenhuma tabela de símbolo" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "este arquivo ELF não é do tipo correto" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Carregar e inicializar o emulador de EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Finalizar o carregamento do emulador de EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Descarregar o emulador de EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "símbolo '%s' não foi encontrado" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Fontes carregadas:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "ARQUIVO..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Especificar um ou mais arquivos de fontes a serem carregados." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Listar as fontes carregadas." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "encadeamento de link simbólico muito profundo" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "tentar ler após o final do arquivo" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"não foi possível encontrar um dispositivo membro necessário do sistema de " +"arquivos multi-dispositivos." + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "não é um diretório" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "não é um arquivo comum" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"seu core.img está maior que de costume. Ele não caberá na área de embutir." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "nome de arquivo inválido '%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "falha na soma de verificação" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "nenhuma chave de descriptografia disponível" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "falha na verificação do MAC" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Assumir que a entrada é bruta." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Assumir que a entrada é hexadecimal." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Assumir que a entrada é frase secreta." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Digitar a senha ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [ARQUIVO]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "O dispositivo virtual está removido" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "O dispositivo virtual está com falhas" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "O dispositivo virtual está desconectado" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "O dispositivo virtual está degradado" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "O dispositivo virtual está conectado" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Dispositivo virtual incorreto: nenhum tipo disponível" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Dispositivo virtual folha (arquivo ou disco)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Caminho de inicialização: não disponível\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Caminho de inicialização: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Caminho: não disponível" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Caminho: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "ID do dispositivo: não disponível" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "ID do dispositivo: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Este VDEV é um espelho" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Este VDEV é um RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "VDEV incorreto" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV com %d filhos\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "O elemento VDEV número %d não está correto\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "O elemento VDEV número %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Tipo de dispositivo virtual desconhecido: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Estado da fila: ativo" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Estado da fila: exportado" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Estado da fila: destruído" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Estado da fila: reservado para disco de reserva" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Estado da fila: dispositivo de nível 2 ARC" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Estado da fila: não inicializada" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Estado da fila: não disponível" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Estado da fila: potencialmente ativa" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Nome da fila: não disponível" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Nome da fila: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID da fila: não disponível" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID da fila: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Não foi possível obter o estado da fila" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Estado da fila não reconhecido" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Nenhuma árvore de dispositivos virtuais disponível" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Exibir informação ZFS sobre o DISPOSITIVO." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "SISTEMA_DE_ARQUIVOS [VARIÁVEL]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Exibir ZFS-BOOTFSOBJ ou armazená-lo na VARIÁVEL" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Agora conecte o depurador remoto por favor." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Iniciar o stub GDB na porta fornecida" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Parar no GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Parar o stub GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "fim prematuro do arquivo" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Traduzir o texto com as configurações atuais." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Pressione 'Enter' para iniciar o SO selecionado, 'e' para editar os comandos " +"antes da inicialização or 'c' para a linha de comando. ESC para retornar ao " +"menu anterior." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Pressione 'Enter' para iniciar o SO selecionado, 'e' para editar os comandos " +"antes da inicialização or 'c' para linha de comando." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "'Enter': inicializa, 'e': opções, 'c': linha de comando" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "A entrada destacada será executada automaticamente em %d s." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%d s restantes." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d s" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Menu de inicialização GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: O valor %s é menor do que ou igual a %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: O parâmetro ARGP_HELP_FMT exige um valor" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: O parâmetro ARGP_HELP_FMT deve ser positivo" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Parâmetro ARGP_HELP_FMT desconhecido" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Lixo em ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Argumentos obrigatórios ou opcionais para opções longas também o são para " +"quaisquer opções curtas correspondentes." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ou: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [OPÇÃO...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Tente \"%s --help\" ou \"%s --usage\" para mais informação.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Relate erros para %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Erro desconhecido de sistema" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "fornece esta lista de ajuda" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "fornece uma mensagem de uso curta" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NOME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "define o nome do programa" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEGS" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "segura por SEGS segundos (padrão 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "mostra a versão do programa" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMA ERRO) Nenhuma versão conhecida!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Número excessivo de argumentos\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ERRO NO PROGRAMA) A opção deveria ter sido reconhecida!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: a opção \"%s\" é ambígua; possibilidades:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: a opção \"--%s\" não permite um argumento\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: a opção \"%c%s\" não permite um argumento\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: a opção \"--%s\" exige um argumento\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: opção não reconhecida '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: opção desconhecida \"%c%s\"\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opção inválida -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a opção exige um argumento -- \"%c\"\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: a opção \"-W %s\" é ambígua\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: a opção \"-W %s\" não permite um argumento\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: a opção \"-W %s\" exige um argumento\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Sucesso" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Nenhuma ocorrência do padrão" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Expressão regular inválida" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Caractere de combinação inválido" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Nome inválido de categoria de caracteres" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Barra invertida no final" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Retrorreferência inválida" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "[ ou [^ sem correspondente" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( sem correspondente" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "\\{ sem correspondente" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Conteúdo inválido de \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Fim de intervalo inválido" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Memória esgotada" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Expressão regular precedente inválida" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Fim prematuro da expressão regular" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Expressão regular grande demais" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) sem correspondente" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "expressão regular desconhecida" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Nenhuma expressão regular anterior" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Olá mundo!" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Diz 'Olá mundo!'." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "tentar procurar fora do arquivo" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "formato gzip não suportado" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "arquivo lzop corrompido" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "arquivo xz corrompido ou com opções de bloco não suportadas" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "magia ELF dependente de arquitetura inválida" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[VARIÁVEL_DO_AMBIENTE=VALOR]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Definir uma variável do ambiente." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "VARIÁVEL_DO_AMBIENTE" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Remover uma variável do ambiente" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARGUMENTO]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Listar dispositivos ou arquivos." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Inserir um módulo." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disco '%s' não encontrado" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "tentar ler ou escrever fora da partição" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "magia ELF independente de arquitetura inválida" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "o contador de dispositivo excedeu o limite" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "não foi possível gravar para '%s': %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "não foi possível abrir `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "NOME_DO_DISPOSITIVO" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Definir dispositivo raiz." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +#, fuzzy +msgid "use FILE as memdisk" +msgstr "Usar uma imagem como imagem de fundo de tela." + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "exibe mensagens detalhadas." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "aguarda até o depurador anexar" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Argumento extra desconhecido `%s'." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Emulador do GRUB." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Erro ao analisar os argumentos da linha de comando\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: aviso:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: informação:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: erro:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "arquivo `%s' é muito grande" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "sistema de arquivos desconhecido" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Falhar ao desligar" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Falha ao sair" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +#, fuzzy +msgid "overflow is detected" +msgstr "Criptografia detectada como: %1" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Comando desconhecido '%s'\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Exibe esta ajuda e sai." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Exibe o uso desse comando e sair." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "faltando opção obrigatória para '%s'" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "o argumento '%s' requer um inteiro" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"um valor foi atribuído ao argumento '%s' enquanto ele não requer um argumento" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "O servidor padrão é ${servidor_padrão_rede}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "especificação de cor inválida: '%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Falha ao reiniciar" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" +"a árvore de dispositivos deve ser fornecida (veja o comando `devicetree')" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "zImage inválida" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "árvore de dispositivo inválida" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Carregar Linux" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Carregar initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Arquivo DTB local." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "você precisa carregar o kernel primeiro" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, com o hipervisor Xen" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Carregar módulo." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[OPÇÕES]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Iniciar o sistema baseado na BIOS." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Carregar outro carregador de inicialização." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Exibir a saída em todos os consoles." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Usar console serial." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Perguntar pelo nome de arquivo para reinicializar." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Usar CD-ROM como root." + +#: grub-core/loader/i386/bsd.c:106 +#, fuzzy +msgid "Invoke user configuration routing." +msgstr "A configuração de roteamento foi salva com sucesso." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Entrar no KDB na inicialização." + +#: grub-core/loader/i386/bsd.c:108 +#, fuzzy +msgid "Use GDB remote debugger instead of DDB." +msgstr "Usar GDB depurador remote em vez de DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Desabilitar todas as saídas de inicialização." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Aguardar pressionamento de tecla depois de cada linha de saída." + +#: grub-core/loader/i386/bsd.c:113 +#, fuzzy +msgid "Use compiled-in root device." +msgstr "Usar o diretório atual no caminho do usuário root" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Iniciar no modo único." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Iniciar com mensagens detalhadas." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Não reiniciar, apenas desligar." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Alterar os dispositivos configurados." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIDADE[,VELOCIDADE]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Desabilitar SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Desabilitar ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Não exibir mensagens de diagnósticos da inicialização." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Iniciar com mensagens de depuração." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Suprimir a saída normal (as advertências permanecem)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ENDEREÇO|comUNIDADE][,VELOCIDADE]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "nome" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tipo" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "endereço" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "tamanho" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Iniciando no modo cego" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Carregar o kernel do FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Carregar o kernel do OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Carregar o kernel do NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Carregar o ambiente FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Carregar o módulo do kernel do FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Carregar o módulo do kernel do NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Carregar o módulo do kernel do NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Carregar o módulo do kernel do FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Carregar ramdisk do kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +#, fuzzy +msgid "Load another coreboot payload" +msgstr "Carregar outro arquivo de configuração." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "O parâmetro antigo 'ask' não é mais suportado." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s está obsoleto. Ao invés, use 'set gfxpayload=%s' antes do comando " +"'linux'.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s está obsoleto. O modo VGA %d não é reconhecido. Ao invés, use 'set " +"gfxpayload=LARGURAxALTURA[xPROFUNDIDADE' antes do comando 'linux'.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] ARQUIVO" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "o tamanho de `%s' é muito grande" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Carregar o kernel.sys do FreeBSD." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Carregar o NTLDR ou BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL ARGUMENTOS" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Carregar o kernel do Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Carregar uma imagem PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Carrega ISO Truecrypt." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd já carregado" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Carregar módulo." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Pressione qualquer tecla para iniciar o xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +#, fuzzy +msgid "Load `device-properties' dump." +msgstr "Adicionar Novo Dispositivo de Dump" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Não foi possível encontrar o driver FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "O protocolo FPSWA não conseguiu encontrar a interface" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Nenhum FPSWA encontrado" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA revisão: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "ARQUIVO [ARGUMENTOS...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Exibir a versão do FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "AVISO: nenhum console estará disponível no SO" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Carregar um kernel multiboot 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Carregar um módulo multiboot 2" + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Carregar um kernel multiboot." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Carregar um módulo multiboot." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Modo de imagem de fundo." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Carregar imagem XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Carregar imagem XNU 64 bit." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Carregar pacote de extensão XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Carregar extensão XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIRETÓRIO [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Carregar o diretório de extensões do XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Carregar ramdisk do XNU. Ela estará disponível no SO como md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Carregar uma imagem de apresentação para o XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Carregar uma imagem do XNU hibernado." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ENDEREÇO1,MÁSCARA1[,ENDEREÇO2,MÁSCARA2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Declarar regiões da memória como problemática (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "DE[K|M|G] PARA[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Remover qualquer região da memória na faixa especificada." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "quatro argumentos esperados" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "interface de rede não reconhecida '%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "nenhuma informação de DHCP encontrada" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "nenhuma opção de DHCP encontrada" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "nenhuma opção DHCP %d encontrada" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "especificação de formato da opção DHCP não reconhecida `%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "nenhuma placa de rede encontrada" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "não foi possível autoconfigurar %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[PLACA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "executar uma configuração automática do bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VARIÁVEL INTERFACE NÚMERO DESCRIÇÃO" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"obter a opção DHCP e salvá-la na VARIÁVEL. Se a VARIÁVEL for - então exibir " +"o valor." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "nenhum servidor DNS configurado" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "o nome de domínio do componente é muito extenso" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "nenhum registro DNS encontrado" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "nenhuma resposta DNS recebida" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "apenas ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "apenas ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "preferir ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "preferir ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "argumento inválido" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ENDEREÇO SERVIDOR_DNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Executar uma consulta DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "SERVIDOR_DNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Adicionar um servidor DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Remover um servidor DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Listar servidores DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "não foi possível enviar um pacotes de rede" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "Interface 16 bits protegida suportada\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "resposta HTTP não suportada" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "erro HTTP não suportado %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "tempo de espera excedido ao abrir `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" +"tempo de espera excedido: não foi possível resolver o endereço de hardware" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "endereço não resolvido %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "endereço de rede não reconhecido `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "destino inacessível" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "loop de rota detectado" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "endereço não encontrado" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "você não pode remover este endereço" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Tipo de endereço de hardware não suportado %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Tipo de endereço não suportado %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "três argumentos esperados" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "placa não encontrada" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporário" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Tipo de endereço desconhecido %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "nenhum servidor especificado" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "tempo de espera excedido ao ler `%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "NOME_CURTO PLACA ENDEREÇO [ENDEREÇO_HARDWARE]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Adiciona um endereço de rede." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[PLACA [ENDEREÇO_HARDWARE]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Executa uma configuração automática IPv6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "NOME_CURTO" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Remover um endereço da rede." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "NOME_CURTO REDE [INTERFACE| gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Adicionar uma rota da rede." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Remover uma rota da rede." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "listar as rotas da rede" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "listar as placas de rede" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "listar os endereços de rede" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "conexão recusada" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "tempo de espera excedido na conexão" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Digitar nome de usuário: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[LISTA_DE_USUÁRIOS]" + +#: grub-core/normal/auth.c:270 +#, fuzzy +msgid "Check whether user is in USERLIST." +msgstr "Marque se este ponto está em um polígono" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Os comandos possíveis são:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Os dispositivos possíveis são:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Os arquivos possíveis são:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "As partições possíveis são:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Os argumentos possíveis são:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "As coisas possíveis são:" + +#: grub-core/normal/color.c:81 +#, fuzzy, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Alerta: erro de sintax (faltando barra '/') em '%s'\n" + +#: grub-core/normal/color.c:90 +#, fuzzy, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Coluna do nome da cor do primeiro plano" + +#: grub-core/normal/color.c:96 +#, fuzzy, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Coluna do nome da cor do segundo plano" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "VARIÁVEL_DO_AMBIENTE [VARIÁVEL_DO_AMBIENTE]..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Exportar variáveis." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Domingo" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Segunda-feira" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Terça-feira" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Quarta-feira" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Quinta-feira" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Sexta-feira" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Sábado" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "O módulo não está carregado" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB versão %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC em qualquer momento sai." + +#: grub-core/normal/main.c:363 +#, fuzzy, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Edição mínima de linha tipo BASH é suportada. Para a primeira palavra, TAB " +"lista as possibilidades de complementação do comando. Em qualquer outro " +"lugar TAB lista as conclusões possíveis de arquivo ou dispositivo. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Limpar a tela." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Entrar no modo normal." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Sair do modo normal." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Pressione qualquer tecla para continuar..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Iniciando '%s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Alternando para `%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Falha ao inicializar ambas as entradas, padrão e alternativa.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Iniciando uma lista de comandos" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Edição da tela no estilo Emacs é suportada. TAB para listar completações. " +"Pressione F1 para inicializar, F2=Ctrl-a, F3=Ctrl-e, F4 para linha de " +"comando ou ESC para descartar as alterações e retornar para o menu do GRUB." + +#: grub-core/normal/menu_text.c:170 +#, fuzzy, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Use as teclas %C e %C para selecionar qual a entrada está destacada.\n" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partição %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Dispositivo %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "O sistema de arquivos não pode ser acessado" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Tipo de sistema de arquivos %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Rótulo '%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Hora da última modificação %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Nenhum sistema de arquivos conhecido foi detectado" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - A partição começa em %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Tamanho do setor %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Tamanho total desconhecido" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Tamanho total %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MAIS--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "não foi possível abrir o arquivo de configuração `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "nenhuma compressão está disponível em sua plataforma" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "nenhuma rotina IEEE1275 está disponível para sua plataforma" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "nenhuma rotina EFI está disponível para sua plataforma" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "nenhuma rotina SGI está disponível para sua plataforma" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "nenhum gerador de número aleatório está disponível para o seu SO" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Falha ao criar a árvore `device-mapper'" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "não foi possível montar o volume criptografado `%s': %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "não foi possível abrir o geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +#, fuzzy +msgid "couldn't find geli consumer" +msgstr "Impossível encontrar arquivo pixmap: %s" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "não foi possível encontrar a classe 'part' do geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "tamanho de dispositivo não alinhado" + +#: grub-core/osdep/generic/blocklist.c:56 +#, fuzzy, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "tentando ler a imagem de núcleo `%s' do GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, fuzzy, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "tentando ler a imagem de núcleo `%s' do GRUB novamente" + +#: grub-core/osdep/generic/blocklist.c:116 +#, fuzzy, c-format +msgid "cannot read `%s' correctly" +msgstr "%s não pode ler \"%s\" a partir de %s." + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "falha na leitura dos setores de repouso da imagem de núcleo" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "`%s' não é um disco local" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, fuzzy, c-format +msgid "can't retrieve blocklists: %s" +msgstr "Não foi possível obter arquivo %s\n" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "tamanho de bloco inválido" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +#, fuzzy +msgid "can't retrieve blocklists" +msgstr "Não foi possível obter arquivo %s\n" + +#: grub-core/osdep/linux/getroot.c:154 +#, fuzzy, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "Erro no protocolo SOCKS versão 5" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, fuzzy, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "Versão do RAID exibe a versão do RAID." + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, fuzzy, c-format +msgid "Unable to open stream from %s: %s" +msgstr "" +"Não foi possível ler de \"%s\"\n" +"\n" +"Detalhes: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, fuzzy, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "Dispositivo de CD-ROM desconhecido" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, fuzzy, c-format +msgid "failed to get canonical path of `%s'" +msgstr "Falha ao obter o arquivo do caminho de configuração a partir de \"%s\"" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "Tipo de dispositivo desconhecido" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Uso: %s DISPOSITIVO\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Não foi possível bifurcar: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, fuzzy, c-format +msgid "Unable to create pipe: %s" +msgstr "Falha ao criar um pipe para '%s': %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +#, fuzzy +msgid "cannot restore the original directory" +msgstr "Restaura o papel de parede original" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "não foi possível obter o status '%s': %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "Não foi possível renomear o arquivo '%1' para '%2'." + +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "Restaura o papel de parede original" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: não encontrado" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +#, fuzzy +msgid "no `/' in canonical filename" +msgstr "" +"\n" +"Falta um nome de arquivo em --file\n" +"\n" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "Falha no cygwin_conv_path()" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +#, fuzzy +msgid "couldn't retrieve random data" +msgstr "Não foi possível recuperar a consulta." + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "nenhuma rotina EFI está disponível quando executando no modo BIOS" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "erro EFI inesperado" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +#, fuzzy +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"Este rótulo de partição GPT não tem Partição de Boot BIOS: não será possível " +"embuti-lo!" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +#, fuzzy +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"Este rótulo de partição estilo msdos não tem espaço vago pós-MBR; não será " +"possível embuti-lo!" + +#: grub-core/partmap/msdos.c:404 +#, fuzzy +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Sua área de embutidura está menor que de costume. O core.img não caberá nela." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Tornar a partição ativa" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "não é uma partição primária" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "A partição %d está ativa agora. \n" + +#: grub-core/parttool/msdospart.c:74 +#, fuzzy, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Texto ativo no plano de fundo normal" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Alterar tipo de partição" + +#: grub-core/parttool/msdospart.c:88 +#, fuzzy +msgid "Set `hidden' flag in partition type" +msgstr "" +"Definir indicador &ativo na tabela de partição para a partição de " +"inicialização" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "o tipo de partição 0x%x não é válido" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, fuzzy, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Configurando o tipo da partição de caminhos múltiplos %1$s como %2$X" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +#, fuzzy +msgid "can't break 0 loops" +msgstr "Caracteres após a quebra" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +#, fuzzy +msgid "not in function body" +msgstr "A função '%1' não foi encontrada no script: %2" + +#: grub-core/script/execute.c:370 +#, fuzzy, c-format +msgid "invalid variable name `%s'" +msgstr "&Copiar o nome da variável" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +#, fuzzy +msgid "unexpected end of file" +msgstr "fim de arquivo inesperado" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NÚMERO]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Sair dos loops" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Continuar os loops" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +#, fuzzy +msgid "Shift positional parameters." +msgstr "Atualizar os parâmetros dos juros (Shift+Enter)" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALOR]..." + +#: grub-core/script/main.c:65 +#, fuzzy +msgid "Set positional parameters." +msgstr "Define os parâmetros a passar à folha de estilo." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Retornar de uma função" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] ARQUIVO" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "COR" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Exibir o conteúdo do console CBMEM" + +#: grub-core/term/serial.c:57 +#, fuzzy +msgid "Set the serial unit." +msgstr "Exibição da unidade de medida" + +#: grub-core/term/serial.c:58 +#, fuzzy +msgid "Set the serial port address." +msgstr "Varre as portas de um endereço de rede" + +#: grub-core/term/serial.c:59 +#, fuzzy +msgid "Set the serial port speed." +msgstr "Gerenciamento de configurações de portas serial" + +#: grub-core/term/serial.c:60 +#, fuzzy +msgid "Set the serial port word length." +msgstr "Definir o tamanho de palavra da porta serial" + +#: grub-core/term/serial.c:61 +#, fuzzy +msgid "Set the serial port parity." +msgstr "Gerenciamento de configurações de portas serial" + +#: grub-core/term/serial.c:62 +#, fuzzy +msgid "Set the serial port stop bits." +msgstr "Definir os bits de parada da porta serial" + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "Exibição da unidade de medida" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Habilitar/desabilitar RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "porta serial '%s' não encontrada" + +#: grub-core/term/serial.c:254 +#, fuzzy +msgid "unsupported serial port flow control" +msgstr "tamanho de palavra de porta serial não suportada" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPÇÕES...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Configurar porta serial." + +#: grub-core/term/terminfo.c:184 +#, fuzzy, c-format +msgid "unknown terminfo type `%s'" +msgstr "Controle (tipo desconhecido)" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "UTF-8, visualmente ordenado" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Codificação desconhecida" + +#: grub-core/term/terminfo.c:684 +#, fuzzy +msgid "Current terminfo types:" +msgstr "Contagem de tipos de controle" + +#: grub-core/term/terminfo.c:699 +#, fuzzy +msgid "Terminal is ASCII-only [default]." +msgstr "" +"Servir como um ActivationContext (padrão é como um ObjectDirectory apenas)" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "" + +#: grub-core/term/terminfo.c:703 +#, fuzzy +msgid "Terminal has specified geometry." +msgstr "<%s> geometria \"%s\" não foi definida" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "LARGURAxALTURA" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] TERMINAL [TIPO]]" + +#: grub-core/term/terminfo.c:786 +#, fuzzy +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Configurar o tipo da partição de caminhos múltiplos %1$s como %2$X" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, fuzzy, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "O formato da imagem de destino \"%1\" não é suportado." + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " Informação VBE: versão: %d.%d Software OEM rev: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " memória total: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +#, fuzzy +msgid "no suitable video mode found" +msgstr "Nenhum dado em Modo Final encontrado." + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "acesso negado" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MÓDULOS" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "pré-carregar os módulos MÓDULOS especificados" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "instalar apenas os MÓDULOS e suas dependências [padrão=todas]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEMAS" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "instalar TEMAS [padrão=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "FONTES" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "instalar FONTES [padrão=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "IDIOMAS" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "instalar apenas IDIOMAS [padrão=todos]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "comprimir arquivos do GRUB [opcional]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "escolha a compressão a usar" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "usar imagens e módulos no DIRETÓRIO [padrão=%s/]" + +#: include/grub/util/install.h:55 +#, fuzzy, c-format +msgid "use translations under DIR [default=%s]" +msgstr "Defina o diretório padrão de saída" + +#: include/grub/util/install.h:58 +#, fuzzy, c-format +msgid "use themes under DIR [default=%s]" +msgstr "Usar este arquivo como imagem de fundo" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, fuzzy, c-format +msgid "cannot rename the file %s to %s" +msgstr "Não foi possível renomear o arquivo '%1' para '%2'." + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Comandos:" + +#: util/grub-editenv.c:47 +#, fuzzy +msgid "Create a blank environment block file." +msgstr "Carregar variáveis do arquivo de bloco de ambiente" + +#: util/grub-editenv.c:49 +#, fuzzy +msgid "List the current variables." +msgstr "Lista de endereços atual: %1" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +#, fuzzy +msgid "set [NAME=VALUE ...]" +msgstr "Mapa nome-valor: %1" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Definir variáveis." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +#, fuzzy +msgid "unset [NAME ...]" +msgstr "unset NAME" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Remover variáveis." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Opções:" + +#: util/grub-editenv.c:84 +#, fuzzy +msgid "You need to specify at least one command.\n" +msgstr "Você precisa adicionar pelo menos um servidor à rede." + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "NOME_DE_ARQUIVO COMANDO" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Ferramenta para editar o bloco do ambiente." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "bloco do ambiente inválido" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "parâmetro inválido %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "bloco do ambiente muito pequeno" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, fuzzy, c-format +msgid "invalid skip value %lld" +msgstr "Valor fornecido de link simbólico inválido" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, fuzzy, c-format +msgid "read error at offset %llu: %s" +msgstr "Erro: falha ao ler o arquivo temporário em %1" + +#: util/grub-fstest.c:210 +#, fuzzy, c-format +msgid "cannot open OS file `%s': %s" +msgstr "Visualizar: Não foi possível abrir o arquivo %s: %s\n" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "não foi possível gravar na saída padrão: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, fuzzy, c-format +msgid "OS file %s open error: %s" +msgstr "%s: erro: não é possível abrir o arquivo \"%s\"" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "Falha no comando `loopback': %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "Falha no comando `cryptomount': %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +#, fuzzy +msgid "couldn't retrieve UUID" +msgstr "Não foi possível recuperar a consulta." + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls CAMINHO" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Listar arquivos no CAMINHO." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp ARQUIVO LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Copiar ARQUIVO para o arquivo local LOCAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat ARQUIVO" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Copiar ARQUIBO para a saída padrão." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp ARQUIVO LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Comparar ARQUIVO com o arquivo local LOCAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex ARQUIVO" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Exibir o conteúdo do ARQUIVO no modo hexadecimal." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc ARQUIVO" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Obter a soma de verificação crc32 do ARQUIVO." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist ARQUIVO" + +#: util/grub-fstest.c:513 +#, fuzzy +msgid "Display blocklist of FILE." +msgstr "Exibir o arquivo agora" + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid DISPOSITIVO" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NÚMERO" + +#: util/grub-fstest.c:517 +#, fuzzy +msgid "Skip N bytes from output file." +msgstr "Misturando saída do diff de %1 para o arquivo %2" + +#: util/grub-fstest.c:518 +#, fuzzy +msgid "Handle N bytes in output file." +msgstr " Incluir notas no arquivo de saída" + +#: util/grub-fstest.c:519 +#, fuzzy +msgid "Specify the number of input files." +msgstr "Modificar arquivos de entrada originais" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +#, fuzzy +msgid "Set debug environment variable." +msgstr "Configura o ambiente do programa a ser depurado" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +#, fuzzy +msgid "Mount crypto devices." +msgstr "Carregando lista de dispositivos..." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "ARQUIVO|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +#, fuzzy +msgid "Load zfs crypto key." +msgstr "Carrega um conjunto de associações de teclas" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Descomprimir dados" + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Contagem de discos inválida.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Nenhum comando foi especificado.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Sem parâmetros suficientes para o comando.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Comando inválido %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "CAMINHO_DA_IMAGEM COMANDOS" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "" + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[OPÇÕES]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Arquivo de entrada faltante\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "não foi possível abrir '%s': %s" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "não foi possível abrir o arquivo \"%s\": %s" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "não foi possível abrir '%s': %s" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "não foi possível procurar '%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage está compilado sem suporta a arquivos XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Formato de compressão desconhecido %s" + +#: util/grub-install-common.c:389 +#, fuzzy, c-format +msgid "Unrecognized compression `%s'" +msgstr "Opção não reconhecida '%s'\\n" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "formato de destino desconhecido %s\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "não foi possível encontrar o comando '%s'" + +#: util/grub-install-common.c:914 +#, fuzzy, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s não existe. Por favor especifique --target ou --directory\\n" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "nome de arquivo inválido '%s'" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Plataforma desconhecida `%s-%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Mais de um dispositivo de instalação?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"instalar as imagens do GRUB no diretório DIRETÓRIO/%s ao invés do diretório " +"%s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "DESTINO" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, fuzzy, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "instalar o GRUB para a plataforma de DESTINO [padrão=%s]" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "remover mapa de dispositivos se já existir" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "instalar mesmo se problemas forem encontrados" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "não instalar o setor de inicialização" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"o ID do carregador de inicialização. Esta opção somente está disponível no " +"EFI e Macs." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "usar o DIRETÓRIO como a partição raiz do sistema EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "usar o DIRETÓRIO para a instalação do PPC MAC." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "usar ARQUIVO como fonte para rótulo" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "usar COR para rótulo" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "usar TEXTO como versão do produto" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPÇÃO] [DISPOSITIVO_DE_INSTALAÇÃO]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Instalar o GRUB na sua unidade." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Não foi possível determinar sua plataforma. Usar --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Instalando para a plataforma %s.\n" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "O dispositivo de instalação não foi especificado." + +#: util/grub-install.c:1043 +#, fuzzy +msgid "cannot find EFI directory" +msgstr "não é um diretório" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Você encontrou um bug" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "Falha ao criar um pipe para '%s': %s" + +#: util/grub-install.c:1461 +#, fuzzy +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"Nenhuma dica disponível para a sua plataforma. É esperado uma performance " +"reduzida." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "NÃO EXECUTANDO:" + +#: util/grub-install.c:1767 +#, fuzzy +msgid "the chosen partition is not a PReP partition" +msgstr "A partição é criptografada: a verificação não é suportada" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "O dispositivo de instalação não foi especificado." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +#, fuzzy +msgid "Installation finished. No error reported." +msgstr "Erro na instalação: Lista de temas não foi encontrada" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Nenhum caminho ou dispositivo está especificado.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc CAMINHO|--x86 ARQUIVO" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Uso: %s [ARQUIVO_ENTRADA [ARQUIVO_SAÍDA]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +#, fuzzy +msgid " (medial)" +msgstr "Triacontaedro disdiakis medial" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (mais a esquerda)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (mais a direita)" + +#: util/grub-mkfont.c:481 +#, fuzzy, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "%s: valor fora dos limites" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, fuzzy, c-format +msgid "Out of range lookup: %d\n" +msgstr "%s: valor fora dos limites" + +#: util/grub-mkfont.c:514 +#, fuzzy, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Tipo de gráfico sem suporte" + +#: util/grub-mkfont.c:550 +#, fuzzy, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Especificação de geometria não suportada" + +#: util/grub-mkfont.c:582 +#, fuzzy, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Especificação de geometria não suportada" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +#, fuzzy +msgid "save output in FILE [required]" +msgstr " Incluir notas no arquivo de saída" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +#, fuzzy +msgid "select face index" +msgstr "Selecione uma nova aparência:" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "DE-PARA[,DE-PARA]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +#, fuzzy +msgid "set font range" +msgstr "Definir família da fonte" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +#, fuzzy +msgid "set font family name" +msgstr "Fonte para os números das linhas" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "TAMANHO" + +#: util/grub-mkfont.c:950 +#, fuzzy +msgid "set font size" +msgstr "Definir o tamanho da fonte" + +#: util/grub-mkfont.c:951 +#, fuzzy +msgid "set font descent" +msgstr "Definir família da fonte" + +#: util/grub-mkfont.c:952 +#, fuzzy +msgid "set font ascent" +msgstr "Definir família da fonte" + +#: util/grub-mkfont.c:953 +#, fuzzy +msgid "convert to bold font" +msgstr "Configurar série de fontes com negrito." + +#: util/grub-mkfont.c:954 +#, fuzzy +msgid "force autohint" +msgstr "Forçar visibilidade" + +#: util/grub-mkfont.c:955 +#, fuzzy +msgid "disable hinting" +msgstr "Hinting do Xft" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +#, fuzzy +msgid "invalid font range" +msgstr "Faixa de portas inválido '%1'" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPÇÕES] ARQUIVOS_DE_FONTES" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "o arquivo de saída deve ser especificado" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "Falha no FT_Init_FreeType" + +#: util/grub-mkfont.c:1199 +#, fuzzy, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "Erro: Não foi possível abrir arquivo local %s: %s\n" + +#: util/grub-mkfont.c:1229 +#, fuzzy, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "Define o tamanho da fonte do documento." + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "Defina o diretório padrão de saída" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMATO" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "gerar uma imagem no FORMATO" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "formatos disponíveis:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "formato de destino desconhecido %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[OPÇÃO]... [MÓDULOS]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Fazer uma imagem inicializável do GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Formato de destino não especificado (use a opção -O)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "Formato de destino não especificado (use a opção -O)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "diretório raiz do servidor TFTP" + +#: util/grub-mknetdir.c:49 +#, fuzzy +msgid "relative subdirectory on network server" +msgstr "A porta de rede em que o servidor está esperando pedidos." + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "plataforma não suportada %s\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +#, fuzzy +msgid "Number of PBKDF2 iterations" +msgstr "1: Iterações até bailout" + +#: util/grub-mkpasswd-pbkdf2.c:47 +#, fuzzy +msgid "Length of generated hash" +msgstr "Hash regenerado" + +#: util/grub-mkpasswd-pbkdf2.c:48 +#, fuzzy +msgid "Length of salt" +msgstr "Counta|salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +#, fuzzy +msgid "Generate PBKDF2 password hash." +msgstr "Método hash de senha LDAP" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +#, fuzzy +msgid "failure to read password" +msgstr "Por favor, digite a senha para ler o documento:" + +#: util/grub-mkpasswd-pbkdf2.c:146 +#, fuzzy +msgid "Reenter password: " +msgstr "Digite novamente a senha: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +#, fuzzy +msgid "passwords don't match" +msgstr "As senhas não conferem" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, fuzzy, c-format +msgid "cryptographic error number %d" +msgstr "Número de erro desconhecido: %1." + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, fuzzy, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "é baseada na sua senha" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Nenhum caminho está especificado.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "CAMINHO" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Transformar um nome de arquivo do sistema em um do GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "salvar imagens ROM no DIRETÓRIO [opcional]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "usar ARQUIVO como xorriso [opcional]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"Envie um e-mail de pedido de suporte do xorriso para ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "Uso: %s [OPÇÃO] ORIGEM...\\n" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, fuzzy, c-format +msgid "enabling %s support ..." +msgstr "Habilitando o suporte a %s...\\n" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +#, fuzzy +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" +"A desmontagem de \"%1\" falhou.\n" +"%2" + +#: util/grub-mount.c:575 +#, fuzzy +msgid "need an image and mountpoint" +msgstr "Imagem e rótulo personalizados:" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, fuzzy, c-format +msgid "[default=%s]" +msgstr "instalar FONTES [padrão=%s]" + +#: util/grub-probe.c:708 +#, fuzzy +msgid "print TARGET" +msgstr "DESTINO" + +#: util/grub-probe.c:709 +#, fuzzy +msgid "available targets:" +msgstr "formatos disponíveis:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPÇÃO]... [CAMINHO|DISPOSITIVO]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "ler texto do ARQUIVO." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "usar COR para texto" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "usar ARQUIVO como fonte (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "%s: Excesso de argumentos\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[CAMINHO]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, fuzzy, c-format +msgid "Syntax error at line %u\n" +msgstr "Erro de sintaxe na linha" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, fuzzy, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "Usar este arquivo como imagem de fundo" + +#: util/grub-setup.c:81 +#, fuzzy, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "Usar este arquivo como imagem de fundo" + +#: util/grub-setup.c:210 +#, fuzzy +msgid "No device is specified.\n" +msgstr "O dispositivo especificado é inválido." + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" + +#: util/grub-setup.c:297 +#, fuzzy, c-format +msgid "Invalid device `%s'.\n" +msgstr "dispositivo inválido" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Transformar a configuração do syslinux em uma do GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +#, fuzzy +msgid "cannot compress the kernel image" +msgstr "Não foi possível criar a imagem ISO %1." + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "compressão desconhecida %d\n" + +#: util/mkimage.c:985 +#, fuzzy +msgid "Decompressor is too big" +msgstr "A imagem é muito grande!" + +#: util/mkimage.c:1030 +#, fuzzy, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "A imagem é muito grande para o segmento de memória compartilhado" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "A imagem é muito grande para o segmento de memória compartilhado" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, fuzzy, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "O tamanho do volume deve ter pelo menos 10240 bytes." + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "imagem de firmware é muito grande" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "formato de linha inválido: %s" + +#: util/setup.c:160 +#, fuzzy +msgid "the first sector of the core file is not sector-aligned" +msgstr "" +"A partição %1 não está alinhada adequadamente (primeiro " +"setor: %2, módulo: %3)." + +#: util/setup.c:170 +#, fuzzy +msgid "non-sector-aligned data is found in the core file" +msgstr "dados não alinhados com o setor encontrados no arquivo de núcleo" + +#: util/setup.c:192 +#, fuzzy +msgid "the sectors of the core file are too fragmented" +msgstr "os setores do arquivo de núcleo estão fragmentados demais" + +#: util/setup.c:277 +#, fuzzy, c-format +msgid "the size of `%s' is not %u" +msgstr "'<1>' não é um diretório!" + +#: util/setup.c:289 +#, fuzzy, c-format +msgid "the size of `%s' is too small" +msgstr "O inteiro \"%s\" é muito grande ou pequeno" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" + +#: util/setup.c:438 +#, fuzzy, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"não foi possível identificar um sistema de arquivos em %s; a verificação de " +"segurança não pode ser feita" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s parece conter um sistema de arquivos %s que não se sabe se reserva espaço " +"para iniciar estilo DOS. Instalar o GRUB lá pode resultar na DESTRUIÇÃO DO " +"SISTEMA DE ARQUIVOS se dados valiosos forem sobrescritos pelo grub-setup (--" +"skip-fs-probe desativa esta verificação, use por sua conta e risco)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, fuzzy, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Ver informação de suporte aos sistemas de arquivos" + +#: util/setup.c:522 +#, fuzzy +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Sua área de embutidura está menor que de costume. O core.img não caberá nela." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +#, fuzzy +msgid "no terminator in the core image" +msgstr "" +"Nenhum vetor encontrado na imagem:\n" +"'%s'" + +#: util/setup.c:577 +#, fuzzy +msgid "core.img version mismatch" +msgstr "" +"Incompatibilidade na versão do KGame!\n" +"Versão esperada: %1\n" +"Versão recebida: %2\n" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" + +#: util/setup.c:617 +#, fuzzy, c-format +msgid "can't determine filesystem on %s" +msgstr "Aumentando o sistema de arquivos ISO 9660 no %1." + +#: util/setup.c:620 +#, fuzzy, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "O GPGME não tem suporte a OpenPGP: %s" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" + +#: util/setup.c:635 +#, fuzzy +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Incorporação não permitida. O GRUB só pode ser instalado neste setup usando " +"blocklists. Porém. blocklists são INSTÁVEIS e seu uso não é aconselhado." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +#, fuzzy +msgid "will not proceed with blocklists" +msgstr "Prosseguir com o relatório do erro" + +#: util/setup.c:737 util/setup.c:757 +#, fuzzy +msgid "blocklists are invalid" +msgstr "Chamada de procedimento incorreta." + +#: util/setup.c:767 +#, fuzzy +msgid "blocklists are incomplete" +msgstr "Chamada de procedimento incorreta." + +#: util/grub-kbdcomp.in:24 +#, fuzzy +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" +" Uso:\n" +"\tzypper [--opções-globais] [--opções-do-comando] [argumentos]\n" + +#: util/grub-kbdcomp.in:25 +#, fuzzy +msgid "Make GRUB keyboard layout file." +msgstr "" +"Arquivo Editar a Disposição do Teclado..." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "exibir esta mensagem de ajuda e sair" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "exibir a informação da versão e sair" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Relate erros em ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: a opção requer um argumento -- '%s'\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Uso: %s [OPÇÃO]\\n" + +#: util/grub-mkconfig.in:58 +#, fuzzy +msgid "Generate a grub config file" +msgstr "O arquivo de configuração \"%s\" está vazio" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Opção não reconhecida '%s'\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: você deve executar isto como root\\n" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s: não encontrado" + +#: util/grub-mkconfig.in:238 +#, fuzzy +msgid "Generating grub configuration file ..." +msgstr "O arquivo de configuração \"%s\" está vazio" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "concluído" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Aviso:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Uso: %s [OPÇÃO] ENTRADA_DO_MENU\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Definir a entrada do menu padrão para o GRUB, para a próxima inicialização " +"apenas." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Mais de uma entrada do menu?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Entrada do menu não especificada." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Definir a entrada do menu padrão para o GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ENTRADA_DO_MENU é um número, um título de item do menu ou um identificador " +"de item do menu." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Tema encontrado: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Plano de fundo encontrado: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Formato de imagem não suportado" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "GNU Mach encontrado: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Módulo do Hurd encontrado: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"Algumas partes do Hurd encontrado, mas não o suficiente para inicializar." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, com o Hurd %s (modo de recuperação)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, com o Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Por favor, não use o título antigo '%s' para o GRUB_DEFAULT, use '%s' (para " +"versões antes da 2.00) ou '%s' (para a 2.00 ou posterior)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Carregando o GNU Mach..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Carregando o Hurd..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Opções avançadas para %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Carregando o kernel do Illumos..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, com o kFreeBSD %s (modo de recuperação)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, com o kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Carregando o kernel do FreeBSD %s..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Kernel do FreeBSD encontrado: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Diretório de módulos do kernel encontrado: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, com o Linux %s (modo de recuperação)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, com o Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Carregando o Linux %s..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Carregando o ramdisk inicial..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Imagem Linux encontrada: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Imagem initrd encontrada: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, com o kernel %s (via %s, modo de recuperação)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, com o kernel %s (via %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Kernel NetBSD encontrado: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (carregador)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (carregador)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "%s encontrado em %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32 bits)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64 bits)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(em %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, com o Xen %s e Linux %s (modo de recuperação)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, com o Xen %s e Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, com o hipervisor Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Carregando o XEN %s..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Hipervisor xen, versão %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Opções avançadas para %s (com o hipervisor Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Encontrado %s em %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s ainda não está suportado pelo grub-mkconfig.\\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Faixa de endereços não associados com a RAM" + +#, fuzzy +#~ msgid "Packed pixel " +#~ msgstr "Modo de pixel" + +#, fuzzy +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "Tamanho de saída (salvar apenas)" + +#, fuzzy +#~ msgid "create width summary file" +#~ msgstr "Salvar Resumo em Arquivo" + +#, fuzzy +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "falha na leitura do primeiro setor da imagem de núcleo" + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "" +#~ "usar as imagens do GRUB a partir do DIRETÓRIO. Tem precedência sobre o " +#~ "destino" + +#~ msgid "use FILE as grub-mkimage" +#~ msgstr "usar ARQUIVO como grub-mkimage" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "usar ARQUIVO como grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "usar ARQUIVO como grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "o DISPOSITIVO_DE_INSTALAÇÃO deve ser o nome do arquivo do dispositivo do " +#~ "sistema." + +#~ msgid "" +#~ "%s copies GRUB images into %s, and uses grub-setup\n" +#~ "to install grub into the boot sector.\\n" +#~ msgstr "" +#~ "%s copia as imagens do GRUB em %s e usa o grub-setup\n" +#~ "para instalar o grub no setor de inicialização.\\n" + +#, fuzzy +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "%1 porque o serviço de IP automático falhou" + +#~ msgid "Try with --recheck." +#~ msgstr "Tente com --recheck." + +#~ msgid "`%s' failed.\\n" +#~ msgstr "`%s' falhou.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Gerando grub.cfg..." diff --git a/po/quot.sed b/po/quot.sed new file mode 100644 index 000000000..0122c4631 --- /dev/null +++ b/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin new file mode 100644 index 000000000..2436c49e7 --- /dev/null +++ b/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/ru.gmo b/po/ru.gmo new file mode 100644 index 0000000000000000000000000000000000000000..49e23f10b1ad67cdece52eefdc08ec0150889546 GIT binary patch literal 168062 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, 2009, 2010, 2011, 2012, 2013, 2014, 2017. +# Vladimir 'φ-coder/phcoder' Serbinenko , 2012. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-17 21:25+0300\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "неподдерживаемая скорость последовательного порта" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "неподдерживаемая чётность последовательного порта" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "неподдерживаемое количество стоп-битов последовательного порта" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "неподдерживаемая длина слова последовательного порта" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Не загружать таблицы компьютера, указанные через запятую." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Загружать только таблицы, указанные через запятую." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Экспортировать таблицы версии 1 в ОС." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Экспортировать таблицы версии 2 и 3 в ОС." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Задать OEMID в RSDP, XSDT и RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Задать OEMTABLE ID в RSDP, XSDT и RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Задать ревизию OEMTABLE в RSDP, XSDT и RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Задать название создавшей программы в RSDP, XSDT и RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Задать версию редакции создавшей программы в RSDP, XSDT и RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Не обновлять EBDA. Может помочь при ошибках и подвисаниях с некоторыми BIOS, " +"но не оказывает влияния, если ОС не принимает RSDP от GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "преждевременный конец файла %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=ТАБЛИЦА1,ТАБЛИЦА2|--load-only=ТАБЛИЦА1,ТАБЛИЦА2] ФАЙЛ1 " +"[ФАЙЛ2] […]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Загружать таблицы ACPI машины и таблицы, указанные в параметрах." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "ошибка: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "недостаточно памяти" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "не удалось прочитать «%s»: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Не удалось выключить через ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Вывести список устройств." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "ожидается имя файла" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ФАЙЛ" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Показать список блоков." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "сначала вам нужно загрузить ядро" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Загрузить операционную систему." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Нет статистики по времени загрузки\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Показать статистику по загрузке." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Статистика дискового кэша: попаданий = %lu (%lu.%02lu%%), промахов = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Нет статистики по дисковому кэшу\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Получить информацию о кэше диска." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Использовать DOS-стиль CR/NL для окончаний строк." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Показать содержимое файла." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "ожидается два аргумента" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Сравнить файл «%s» с «%s»:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Файлы различаются по размеру: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Файлы различаются начиная со смещения %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Файлы одинаковы.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ФАЙЛ1 ФАЙЛ2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Сравнить два файла." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Загрузить другой файл настройки." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Загрузить другой файл настройки без смены контекста." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Загрузить другой файл настройки без смены контекста, но взять только пункты " +"меню." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Загрузить другой файл настройки, но взять только пункты меню." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[год-]месяц-день] [часы:минуты[:секунды]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Показать/настроить текущую дату/время." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Не выдавать конечный символ новой строки." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Включить обработку экранирующих символов обратной косой черты." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] СТРОКА" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Показать строку текста." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Перезагрузить машину в меню настройки микропрограммы." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Исправить проблему с видео." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Обнаружен образ ROM." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Не удалось включить область ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Создать BIOS-подобные структуры для обратной совместимости с существующей ОС." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "ДАМП_BIOSа [ДАМП_INT10]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Загрузить дамп BIOS." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "СТРОКА …" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Вычислить аргументы как команды GRUB" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Проверить, можно ли загрузить ФАЙЛ как непривилегированное гостевое ядро " +"i386 PAE Xen" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Проверить, можно ли загрузить ФАЙЛ как непривилегированное гостевое ядро " +"x86_64 Xen" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Проверить, можно ли использовать ФАЙЛ как привилегированное гостевое ядро " +"Xen x86" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Проверить, можно ли использовать ФАЙЛ как ядро x86 multiboot" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Проверить, можно ли использовать ФАЙЛ как ядро x86 multiboot2" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Проверить, является ли ФАЙЛ ядром ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Проверить, является ли ФАЙЛ ядром ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Проверить, является ли ФАЙЛ ядром IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Проверить, является ли ФАЙЛ ядром MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Проверить, является ли ФАЙЛ ядром MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Проверить, является ли ФАЙЛ ядром SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Проверить, является ли ФАЙЛ ядром POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Проверить, является ли ФАЙЛ ядром x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" +"Проверить, является ли ФАЙЛ ядром x86 Linux с поддержкой 32-битного протокола" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Проверить, является ли ФАЙЛ ядром x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Проверить, является ли ФАЙЛ ядром i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Проверить, является ли ФАЙЛ ядром x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Проверить, является ли ФАЙЛ ядром x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Проверить, является ли ФАЙЛ ядром i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Проверить, является ли ФАЙЛ ядром x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Проверить, является ли ФАЙЛ файлом i386 EFI" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Проверить, является ли ФАЙЛ файлом x86_64 EFI" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Проверить, является ли ФАЙЛ файлом IA64 EFI" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Проверить, является ли ФАЙЛ файлом ARM64 EFI" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Проверить, является ли ФАЙЛ файлом ARM EFI" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Проверить, является ли ФАЙЛ hiberfil.sys с состоянием спящего режима" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Проверить, является ли ФАЙЛ файлом x86_64 XNU (ядро Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Проверить, является ли ФАЙЛ файлом i386 XNU (ядро Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Проверить, является ли ФАЙЛ образом XNU в спящем режиме (ядро Mac OS X)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Проверить, является ли ФАЙЛ загрузочным сектором BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "ложь" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "ПАРАМЕТРЫ ФАЙЛ" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Проверить, имеет ли ФАЙЛ указанный тип." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "нет такого раздела" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Новый MBR записан в «%s»\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "УСТРОЙСТВО [РАЗДЕЛ[+/-[ТИП]]] …" + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Укомплектовать GPT гибридным MBR для УСТРОЙСТВА. Указанные разделы будут " +"частью гибридного MBR. Можно указать до 3 разделов. В ТИПЕ задаётся тип MBR. " +"Символ + означает, что раздел активный. Активным может быть только один " +"раздел." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "Остановить компьютер. Эта команда работает не везде." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Использовать указанный хэш." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "ХЭШ" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Проверить хэши файлов по списку хэшей из ФАЙЛА." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Базовый каталог для списка хэшей." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "КАТАЛОГ" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Не останавливаться после первой ошибки." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Расжать файл перед проверкой контрольной суммы." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ОШИБКА ЧТЕНИЯ\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: НЕСОВПАДЕНИЕ ХЭША\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h ХЭШ [-c ФАЙЛ [-p ПРЕФИКС]] [ФАЙЛ1 [ФАЙЛ2 …]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Вычислить и проверить хэш контрольной суммы." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c ФАЙЛ [-p ПРЕФИКС]] [ФАЙЛ1 [ФАЙЛ2 …]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Настроить Advanced Power Management\n" +"(1=мин, …, 254=макс, 255=выкл)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Показать режим питания." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Зафиксировать настройки безопасности ATA до перезагрузки." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Показать состояние работоспособности по SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Настроить Automatic Acoustic Management\n" +"(0=выкл, 128=тихо, …, 254=быстро)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Настроить задержку до перехода в дежурный режим (standby)\n" +"(0=выкл, 1=5с, 2=10с, …, 240=20мин, 241=30мин, …)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Перевести устройство в дежурный режим." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Перевести устройство в спящий (sleep) режим." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Показать идентификационную информацию и настройки устройства." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Показать необработанное содержимое сектора ATA IDENTIFY." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Выключить/включить SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Не показывать сообщения." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "ожидается один аргумент" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[ПАРАМЕТРЫ] ДИСК" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Получить/Задать параметры ATA-диска." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Использование:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ШАБЛОН …]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Показать справочное сообщение." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Пропустить указанное число байт от начала файла." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Прочитать только ЗАДАННОЕ число байт." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[ПАРАМЕТРЫ] ФАЙЛ_ИЛИ_УСТРОЙСТВО" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Показать необработанное содержимое файла или памяти." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Показать дамп содержимого CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "БАЙТ:БИТ" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Проверить бит по адресу БАЙТ:БИТ в CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Сбросить бит по адресу БАЙТ:БИТ в CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Установить бит по адресу БАЙТ:БИТ в CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Показать статистику по загрузке coreboot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Список таблиц coreboot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Проверить, поддерживается ли процессором 64-битный («длинный») режим (по " +"умолчанию)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Проверить, поддерживается ли процессором расширение физических адресов (PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Проверить возможности ЦП." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Показать текущие переназначения." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Сбросить все переназначения в значения по умолчанию." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Выполнить прямые и обратные переназначения." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Преобразованные устройства отсутствуют" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "диск #ном ОС ------> устройство GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] устройство_grub диск_ос." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Управлять BIOS переназначениями устройств." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Не использовать APM для останова компьютера." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Остановить систему, если возможно, с помощью APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "APM не найден" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Версия %u.%u\n" +"32-битный CS = 0x%x, длина = 0x%x, смещение = 0x%x\n" +"16-битный CS = 0x%x, длина = 0x%x\n" +"DS = 0x%x, длина = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "поддерживается 16-битный защищённый интерфейс\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-битный защищённый интерфейс не поддерживается\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "поддерживается 32-битный защищённый интерфейс\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-битный защищённый интерфейс не поддерживается\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU Idle замедляет процессор\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU Idle не замедляет процессор\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM запрещён\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM разрешён\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM не активирован\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM активирован\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Показать информацию APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "ожидается имя файла или темп и ноты" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Неверный темп в %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "файл «%s» не найден" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "нераспознанное число" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "ФАЙЛ | ТЕМП [ТОН1 ДЛИТЕЛЬНОСТЬ1] [ТОН2 ДЛИТЕЛЬНОСТЬ2] … " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Проиграть мелодию." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "включить режим numlock" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "включить режим capslock" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "включить режим scrolllock" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "включить режим вставки" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "включить режим паузы" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "нажать левый shift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "нажать правый shift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "нажать SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "нажать клавишу NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "нажать клавишу CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "нажать клавишу ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "нажать клавишу Insert" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "нажать левый alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "нажать правый alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "нажать левый ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "нажать правый ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "не обновлять состояние светодиодов" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[НАБОРНАЖАТИЙ1] [НАБОРНАЖАТИЙ2] …" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Эмулировать набор нажатий" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Введите «go» для возобновления работы GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Вернуться в приглашение IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Сохранить прочитанное значение в переменную ИМЯ_ПЕРЕМЕННОЙ." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "ИМЯ_ПЕРЕМЕННОЙ" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "ПОРТ" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Прочитать 8-битное значение из ПОРТА." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Прочитать 16-битное значение из ПОРТА." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Прочитать 32-битное значение из ПОРТА." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ПОРТ ЗНАЧЕНИЕ [МАСКА]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Записать 8-битное ЗНАЧЕНИЕ в ПОРТ." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Записать 16-битное ЗНАЧЕНИЕ в ПОРТ." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "АДРЕС ЗНАЧЕНИЕ [МАСКА]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Записать 32-битное ЗНАЧЕНИЕ в ПОРТ." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "переменная «%s» не определена" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Загрузить раскладку клавиатуры." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Проверить клавишу Shift." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Проверить клавишу Control." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Проверить клавишу Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Проверить состояние модификаторов клавиш." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "не удалось найти команду «%s»" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Введите пароль: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Разобрать старый формат настройки в том же контексте" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Разобрать старый формат настройки в новом контексте" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Разобрать старый формат настройки в том же контексте, взяв только пункты меню" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Разобрать старый формат настройки в новом контексте, взяв только пункты меню" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=ТИП] ФАЙЛ [АРГУМЕНТ …]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Имитировать команду «kernel» как в grub-legacy" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ФАЙЛ [АРГУМЕНТ …]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Имитировать команду «initrd» как в grub-legacy" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Имитировать команду «modulenounzip» как в grub-legacy" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] ПАРОЛЬ [ФАЙЛ]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Имитировать команду «password» как в grub-legacy" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Имитировать команду «password» как в grub-legacy в режиме пункта меню" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Указать имя файла." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Пропустить проверку подписи файла окружения." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f ФАЙЛ] [-s|--skip-sig] [имя_переменной_для_белого_списка] […]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Загрузить переменные из файла блока окружения." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f ФАЙЛ]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Показать список переменных из файла блока окружения." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f ФАЙЛ] имя_переменной […]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Сохранить переменные в файл блока окружения." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Показать длинный список с более подробной информацией." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Показать размеры в понятном человеку формате." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Показать список всех файлов." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Сетевые протоколы:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [ФАЙЛ …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Вывести список устройств и файлов." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Показать только таблицы версии 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Показать только таблицы версии 2 и 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Показать информацию ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "доступная память" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "зарезервированная память" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "память, регенерируемая ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "память долговременного хранения ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "сбойная память (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "сохраняющаяся память" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "сохраняющаяся память (старая)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "память, содержащая таблицы coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "память, содержащая микропрограмму" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "базовый_адрес = 0x%llx, длина = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "базовый_адрес = 0x%llx, длина = 0x%llx, тип = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Показать карту памяти, предоставляемую микропрограммой (firmware)." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Вывести список устройств PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Сделать ФАЙЛ на разделе HFS или HFS+ загрузочным для Intel Mac." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Сделать КАТ на разделе HFS или HFS+ загрузочным для PPC Mac." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "АДРЕС" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Прочитать 8-битное значение по АДРЕСУ." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Прочитать 16-битное значение по АДРЕСУ." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Прочитать 32-битное значение по АДРЕСУ." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Записать 8-битное ЗНАЧЕНИЕ по АДРЕСУ." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Записать 16-битное ЗНАЧЕНИЕ по АДРЕСУ." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Записать 32-битное ЗНАЧЕНИЕ по АДРЕСУ." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Тип пункта меню." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "СТРОКА" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Список пользователей, которым разрешено загружать этот пункт." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "ИМЯ_ПОЛЬЗОВАТЕЛЯ[,ИМЯ_ПОЛЬЗОВАТЕЛЯ]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Клавиша клавиатуры для быстрого запуска этого пункта." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "КЛАВИША_КЛАВИАТУРЫ" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Использовать СТРОКУ в качестве содержимого элемента меню." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Идентификатор пункта меню." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Этот пункт может быть загружен любым пользователем." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "БЛОК" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Определить пункт меню." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Определить подменю." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Имя\tСчётчик ссылок\tЗависимости\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Показать это сообщение." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "АДРЕС [РАЗМЕР]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Показать содержимое памяти." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "МОДУЛЬ" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Удалить модуль." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Показать загруженные модули." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Выйти из GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "CS5536 не найден" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 по адресу %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"Контроллер системной шины управления вводом-выводом находится по адресу 0x" +"%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Слот памяти № %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Записано байт SPD: %d Б.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Общий размер флэш: %d Б.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Тип памяти: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Номер по каталогу: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Тип памяти: неизвестен." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Показать информацию о памяти." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s не поддерживает UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[МОДУЛЬ1 МОДУЛЬ2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Перейти на родные дисковые драйверы. Если модули не указаны, то используется " +"набор по умолчанию (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Выполнить КОМАНДЫ для раздела.\n" +"Список возможных команд доступен по команде «parttool РАЗДЕЛ help»." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=ЗНАЧЕНИЕ" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Команда parttool недоступна для %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "неизвестный аргумент «%s»" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "КОМАНДЫ РАБОТЫ С РАЗДЕЛАМИ" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Задать пароль пользователя (в открытом виде). Не рекомендуется и небезопасно." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "некорректный формат пароля PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "ПОЛЬЗОВАТЕЛЬ ПАРОЛЬ_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Задать пароль пользователя (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Выбрать устройство по производителю и ID устройства." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[производитель]:[устройство]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Выбрать устройство по его расположению на шине." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[шина]:[слот][.функция]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "отсутствует символ «%c»" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s ПОЗИЦИЯ] [-d УСТРОЙСТВО]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Показать дамп пространства настроек PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Задать переменную для возврата значения." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Определить драйвер." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Определить тип карты разделов." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Определить тип файловой системы." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Определить UUID файловой системы." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Определить метку файловой системы." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "файловая система «%s» не поддерживает метки" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "УСТРОЙСТВО" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Получить информацию об устройстве." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ПЕРЕМ_ОКРУЖ]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Задать переменную с введёнными данными пользователя." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Перезагрузить компьютер." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Сохранить совпавший компонент с НОМЕРОМ в ИМЯ_ПЕРЕМЕННОЙ." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[НОМЕР:]ИМЯ_ПЕРЕМЕННОЙ" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ СТРОКА" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Проверить, совпадает ли РЕГВЫР со СТРОКОЙ." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "ИМЯ [ПЕРЕМЕННАЯ] [ПОДСКАЗКА]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Искать устройства по файлу. Если указана ПЕРЕМЕННАЯ, то ей присвоится первое " +"найденное устройство." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Искать устройства по метке. Если указана ПЕРЕМЕННАЯ, то ей присвоится первое " +"найденное устройство." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Искать устройства по UUID. Если указана ПЕРЕМЕННАЯ, то ей присвоится первое " +"найденное устройство." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Искать устройства по файлу." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Искать устройства по метке файловой системы." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Искать устройства по UUID файловой системы." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Задать переменную для первого найденного устройства." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Не проверять дисководы гибких дисков." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Сначала попробовать устройство согласно ПОДСКАЗКЕ. Если ПОДСКАЗКА " +"заканчивается запятой, то также попробовать подразделы." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "ПОДСКАЗКА" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Сначала попробовать устройство согласно ПОДСКАЗКЕ, если в данный момент " +"работает в IEEE1275. Если ПОДСКАЗКА заканчивается запятой, то также " +"попробовать подразделы." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Сначала попробовать устройство согласно ПОДСКАЗКЕ, если в данный момент " +"работает в BIOS. Если ПОДСКАЗКА заканчивается запятой, то также попробовать " +"подразделы." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Сначала попробовать устройство согласно ПОДСКАЗКЕ, если поддерживается " +"прямой доступ к оборудованию. Если ПОДСКАЗКА заканчивается запятой, то также " +"попробовать подразделы." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Сначала попробовать устройство согласно ПОДСКАЗКЕ, если в данный момент " +"работает в EFI. Если ПОДСКАЗКА заканчивается запятой, то также попробовать " +"подразделы." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Сначала попробовать устройство согласно ПОДСКАЗКЕ, если в данный момент " +"работает в ARC. Если ПОДСКАЗКА заканчивается запятой, то также попробовать " +"подразделы." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint ПОДСКАЗКА [--hint ПОДСКАЗКА] …] ИМЯ" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Искать устройства по файлу, по метке или UUID файловой системы. Если указан " +"параметр --set, то переменной присвоится первое найденное устройство. Если " +"имя переменной не указано, то используется «root»." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Регистр %x у %x:%02x.%x равен %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" +"[-s ПОЗИЦИЯ] [-d УСТРОЙСТВО] [-v ПЕРЕМЕННАЯ] РЕГИСТР[=ЗНАЧЕНИЕ[:МАСКА]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Управлять устройствами PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Детальный обратный отсчёт." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Разрешить прерывание по ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ЧИСЛО_СЕКУНД" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Подождать указанное число секунд." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "корневой каталог диска syslinux [по умолчанию /]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"текущий каталог syslinux [по умолчанию родительский каталог входного файла]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "считать входные данные файлом настройки isolinux." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "считать входные данные файлом настройки pxelinux." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "считать входные данные файлом настройки syslinux." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Выполнить настройки syslinux в том же контексте" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Выполнить настройки syslinux в новом контексте" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Выполнить настройки syslinux в том же контексте, взяв только пункты меню" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Выполнить настройки syslinux в новом контексте, взяв только пункты меню" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "не указан терминал" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "терминал «%s» не найден" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Активные терминалы ввода:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Доступные терминалы ввода:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Активные терминалы вывода:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Доступные терминалы вывода:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [ТЕРМИНАЛ1] [ТЕРМИНАЛ2] …" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Показать или выбрать терминал ввода." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Показать или выбрать терминал вывода." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ВЫРАЖЕНИЕ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Вычислить выражение." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ВЫРАЖЕНИЕ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Загрузить один и тот же файл несколькими способами." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Укажите объём данных каждой операции чтения" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "неверный размер блока" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Размер файла: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Затраченное время: %d.%03d с \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Скорость: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s РАЗМЕР] ИМЯФАЙЛА" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Тест скорости чтения файла." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "команда не указана" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Затраченное время: %d.%03d секунд \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "КОМАНДА [АРГУМЕНТЫ]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Замерить время, затраченное КОМАНДОЙ" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Привести к верхнему регистру." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Привести к нижнему регистру." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[ПАРАМЕТРЫ] [НАБОР1] [НАБОР2] [СТРОКА]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Преобразовать символы в СТРОКЕ из НАБОРА1 в символы из НАБОРА2." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Ничего не делать, успешное завершение." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Ничего не делать, неудачное завершение." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Протестировать поддержку USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Пропустить проверку подписи файла открытого ключа." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "некорректная подпись" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "открытый ключ %08x не найден" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "модуль «%s» не загружен" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] ФАЙЛ ФАЙЛ_С_ПОДПИСЬЮ [ФАЙЛ_С_ОТКРЫТЫМ_КЛЮЧОМ]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Проверить отсоединённую подпись." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] ФАЙЛ_С_ОТКРЫТЫМ_КЛЮЧОМ" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Добавить ФАЙЛ_С_ОТКРЫТЫМ_КЛЮЧОМ к доверительным ключам." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Показать список доверительных ключей." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_ОТКРЫТОГО_КЛЮЧА" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Удалить ID_ОТКРЫТОГО_КЛЮЧА из доверительных ключей." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Только-текст " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Явно заданный цвет, маска: %d/%d/%d/%d положение: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Из палитры " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Планарный " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Монохромный " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Неизвестный видео-режим" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " некорректная контрольная сумма для EDID" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " версия EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Предпочтительный режим: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Предпочтительный режим недоступен\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "неправильное указание видео-режима экрана «%s»" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Список поддерживаемых видео-режимов:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Обозначения: маска/положение=красный/зеленый/синий/зарезервированный" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Адаптер «%s»:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Информация недоступна" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Не удалось инициализировать видеоадаптер" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[ШxВ[xГ]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Список доступных видео-режимов. Если указано разрешение, то показываются " +"только подходящие режимы." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[ШхВ]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Тест видеоподсистемы в режиме ШxВ." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Тест видеоподсистемы." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[КАТ]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Вывести хранилище Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [ИМЯ_ПЕРЕМЕННОЙ]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Преобразовать 64-бит UUID в формат, пригодный для XNU. Если указан -l, то " +"оставить в нижнем регистре, как это делает blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "ошибка при чтении сектора 0x%llx на «%s»" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "ошибка записи в сектор 0x%llx на «%s»" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Смонтировать по UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Смонтировать всё." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Смонтировать все тома с установленным флагом «boot»." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "не удалось открыть «%s»: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "невозможно сместиться в «%s»: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "ИСТОЧНИК|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Смонтировать крипто-устройство." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Невозможно найти физический том «%s». Некоторые модули в базовом образе " +"могут отсутствовать." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "физический том %s не найден" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "нет носителя в «%s»" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Невозможно загрузить sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Невозможно загрузить sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "невозможно прочитать метаданные ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "неверный отличительный символ ELI или версия" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Выполняется попытка расшифровать мастер-ключ…" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Введите ключевую фразу для %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Открыт слот %d\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "попытка чтения или записи вне пределов диска «%s»" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "невозможно записать на компакт-диск" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Используются родные дисковые драйверы. Использование микропрограммного " +"интерфейса диска отклоняется." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "LDM Embedding Partition слишком мал; встраивание невозможно" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "данный LDM не содержит встраиваемого раздела; встраивание невозможно" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Удалить указанный привод обратной петли." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] ИМЯ_УСТРОЙСТВА ФАЙЛ." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Создать виртуальный привод из файла." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "возможность перемещения 0x%x ещё не реализована" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "отсутствует таблица символов" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "ELF-файл неправильного типа" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Загрузить и инициализировать эмулятор EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Завершить загрузку эмулятора EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Выгрузить эмулятор EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "символ «%s» не найден" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Загруженные шрифты:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "ФАЙЛ…" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Указать один или несколько файлов шрифтов для загрузки." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Вывести список загруженных шрифтов." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "слишком большая вложенность символьных ссылок" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "попытка чтения за концом файла" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"невозможно найти необходимое устройство-компонент в файловой системе с " +"несколькими устройствами" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "не каталог" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "не обычный файл" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"данный core.img необычно большого размера. Он не влезет во встраиваемую " +"область" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "неверное имя файла «%s»" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "ошибка при сверке контрольной суммы" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "недоступен ключ расшифровки" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "ошибка сверки MAC" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Предполагать, что ввод не обработан." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Предполагать, что ввод в шестнадцатеричной системе." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Предполагать, что ввод является ключевой фразой." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Введите пароль ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [ФАЙЛ]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Импортировать обёрточный ключ ZFS, хранящийся в ФАЙЛЕ." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Виртуальное устройство удалено" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Сбой виртуального устройства" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Виртуальное устройство не в работе" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Виртуальное устройство деградировано" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Виртуальное устройство в работе" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Некорректное виртуальное устройство: тип недоступен" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Виртуальное устройство-лист (файл или диск)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Bootpath: недоступен\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Bootpath: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Path: недоступен" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Path: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Devid: недоступен" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Devid: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Данное VDEV является зеркалом" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Данное VDEV является RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Некорректное VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV с %d потомками\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "Элемент VDEV №%d некорректен\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Элемент VDEV №%d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Неизвестный тип виртуального устройства: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Состояние пула: активен" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Состояние пула: экспортирован" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Состояние пула: разрушен" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Состояние пула: зарезервирован как горячая замена" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Состояние пула: уровень 2 устройства ARC" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Состояние пула: не инициализирован" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Состояние пула: недоступен" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Состояние пула: потенциально активен" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Имя пула: недоступно" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Имя пула: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Пул GUID: недоступен" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Пул GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Не удалось получить состояние пула" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Нераспознанное состояние пула" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Недоступно дерево виртуальных устройств" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Показать информацию ZFS об УСТРОЙСТВЕ." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "ФАЙЛОВАЯ_СИСТЕМА [ПЕРЕМЕННАЯ]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Показать ZFS-BOOTFSOBJ или сохранить его значение в ПЕРЕМЕННОЙ" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Теперь подключитесь удалённым отладчиком." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Запустить заглушку GDB на указанном порту" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Прерваться в GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Остановить заглушку GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "преждевременный конец файла" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Перевести строку с текущими настройками." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Нажмите «enter» для загрузки выбранной ОС, «e» для редактирования команд до " +"загрузки или «c» для получения командной строки. По ESC осуществляется " +"возврат в предыдущее меню." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Нажмите «enter» для загрузки выбранной ОС, «e» для редактирования команд до " +"загрузки или «c» для получения командной строки." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "«enter»: загрузка, «e»: параметры, «c»: командная строка" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Выделенный пункт будет выполнен автоматически через %dс." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "осталось %dс." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dс" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Загрузочное меню GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: значение %s меньше или равно %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: параметр ARGP_HELP_FMT требует значение" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: значение параметра ARGP_HELP_FMT должно быть положительным" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: неизвестный параметр ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Мусор в ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Обязательные или необязательные аргументы для длинных параметров также " +"являются обязательными или необязательными для соответствующих коротких " +"параметров." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " или: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [ПАРАМЕТР…]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Попробуйте «%s --help» или «%s --usage» для получения более подробного " +"описания.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Сообщения об ошибках отправляйте на %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Неизвестная системная ошибка" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "показать эту справку" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "показать короткую справку по использованию" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "ИМЯ" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "задать имя программы" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "СЕКУНД" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "остановиться на заданное число СЕКУНД (по умолчанию 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "показать номер версии программы" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ОШИБКА ПРОГРАММЫ) Версия неизвестна!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Слишком много аргументов\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ОШИБКА ПРОГРАММЫ) Параметр должен быть распознан!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: двусмысленный параметр «%s»; возможные варианты:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: у параметра «--%s» не может быть аргумента\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: у параметра «%c%s» не может быть аргумента\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: для параметра «--%s» требуется аргумент\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: неизвестный параметр «--%s»\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: неизвестный параметр «%c%s»\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: неверный параметр «%c»\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: параметру требуется аргумент «%c»\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: двусмысленный параметр «-W %s»\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: у параметра «-W %s» не может быть аргумента\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: параметру «-W %s» требуется аргумент\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Успешно" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Нет совпадения" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Неправильное регулярное выражение" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Неправильный символ сравнения" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Неправильное имя класса символов" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Обратная косая черта в конце" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Неправильная обратная ссылка" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Непарная [ или [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Непарная ( или \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Непарная \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Неверное содержимое \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Неверный конец диапазона" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Закончилась память" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Неверное предшествующее регулярное выражение" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Преждевременный конец регулярного выражения" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Регулярное выражение слишком велико" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Непарная ) или \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "неизвестная ошибка в регулярном выражении" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Отсутствует предыдущее регулярное выражение" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Привет, мир" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Сказать «Привет, мир»." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "попытка перемещения за пределы файла" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "неподдерживаемый формат gzip" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "файл lzop повреждён" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "файл xz повреждён или имеются неподдерживаемые параметры блока" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "неверный архитектурно-зависимый отличительный идентификатор ELF" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ=ЗНАЧЕНИЕ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Задать переменную окружения." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Удалить переменную окружения." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[АРГУМЕНТ]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Вывести список устройств или файлов." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Вставить модуль." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "диск «%s» не найден" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "попытка чтения или записи вне пределов раздела" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "неверный архитектурно-независимый отличительный идентификатор ELF" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "превышен предел счётчика устройств" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "невозможно записать в «%s»: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"некорректная запись «%s» в device.map. Игнорируется. Исправьте или удалите " +"device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"некорректное имя устройства «%s» в device.map. Вместо него будет " +"использовано %s. Используйте формат [hfc]d[0-9]* (например «hd0» или «cd»)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "не удалось открыть «%s»: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "ИМЯ_УСТРОЙСТВА" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Задать корневое устройство." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "использовать ФАЙЛ в качестве карты устройств [по умолчанию %s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "использовать ФАЙЛ как memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "использовать файлы GRUB в каталоге, заданном в КАТ [по умолчанию %s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "показывать подробные сообщения." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "подождать пока подключиться отладчик" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Неизвестный дополнительный параметр «%s»." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Эмулятор GRUB." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Ошибка при разборе аргументов командной строки\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Запустите «gdb %s %d», и установите значение ARGS.HOLD равным нулю.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: предупреждение:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: информация:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: ошибка:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "файл «%s» слишком большой" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "неизвестная файловая система" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Не удалось выполнить выключение" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Не удалось выполнить выход" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "обнаружено переполнение" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Отбрасывается неправильно вложенный раздел (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Неизвестная команда «%s».\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Показать эту справку и закончить работу." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Показать справку по этой команде и закончить работу." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "отсутствует обязательный параметр для «%s»" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "для аргумента «%s» требуется целое число" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"для аргумента «%s» назначено значение, но это не требуется для аргумента" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Показать стек вызовов." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB пока не знает как остановить эту машину!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Сервер по умолчанию — ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "неправильное указание цвета «%s»" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Не удалось выполнить перезагрузку" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[ДЛИНА]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Шестнадцатеричный дамп произвольных данных." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "должно быть указано дерево устройств (смотрите команду «devicetree»)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "неверный zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "неверное дерево устройств" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Загрузить Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Загрузить initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Загрузить файл DTB." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"обычный образ ядра не поддерживается — пересоберите его с включённым " +"параметром CONFIG_(U)EFI_STUB" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "не удалось получить FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "сначала нужно загрузить Xen Hypervisor" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Загрузить гипервизор xen." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Загрузить модуль xen." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[ПАРАМЕТРЫ]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Загрузить систему, указанную в BIOS" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Загрузить другой загрузчик." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Выводить сообщения на всех консолях." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Использовать консоль на последовательном порту." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Запросить имя файла для перезагрузки." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Использовать компакт-диск в качестве корня." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Выполнить пользовательскую настройку маршрутизации." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Войти в KDB при загрузке." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Использовать удалённый отладчик GDB вместо DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Выключить вывод при загрузке." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Ждать нажатия любой клавиши после каждой выводимой строки." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Использовать вкомпилированное корневое устройство." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Загрузиться в однопользовательский режим." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Показывать подробные сообщения при загрузке." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Не перезагружаться, а выполнить останов." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Изменить настроенные устройства." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comНОМЕР[,СКОРОСТЬ]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Выключить SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Выключить ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Не выводить отладочные загрузочные сообщения." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Загружаться с выводом отладочных сообщений." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Не показывать обычные сообщения (только предупреждения)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[АДРЕС|comНОМЕР][,СКОРОСТЬ]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "имя" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "тип" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "адрес" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "размер" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Загрузка в слепом режиме" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Загрузить ядро FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Загрузить ядро OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Загрузить ядро NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Загрузить окружение FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Загрузить модуль ядра FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Загрузить модуль ядра NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Загрузить модуль ядра NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Загрузить модуль ядра FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Загрузить виртуальный диск kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Загрузить другой coreboot payload" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Устаревший параметр «ask» больше не поддерживается." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s устарел. Используйте вместо него set gfxpayload=%s до команды linux.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s устарел. Режим VGA %d не распознан. Используйте вместо него set " +"gfxpayload=ШИРИНАxВЫСОТА[xГЛУБИНА] до команды linux.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] ФАЙЛ" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "размер «%s» слишком велик" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Загрузить FreeBSD kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Загрузить NTLDR или BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Заменить предугаданное соответствие устройств Plan9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "УСТРОЙСТВО_GRUB=УСТРОЙСТВО_PLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "АРГУМЕНТЫ ЯДРА" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Загрузить ядро Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Загрузить образ PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Загрузить Truecrypt ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd уже загружен" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Загрузить модуль." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Нажмите любую клавишу для запуска xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Загрузить дамп «device-properties»." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Не удалось найти драйвер FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Протоколом FPSWA не удалось найти интерфейс" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "FPSWA не найден" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Редакция FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "ФАЙЛ [АРГУМЕНТЫ…]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Показать версию FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "ПРЕДУПРЕЖДЕНИЕ: консоль в ОС будет недоступна" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Загрузить ядро multiboot 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Загрузить модуль multiboot 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Загрузить ядро multiboot." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Загрузить модуль multiboot." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Режим фонового изображения." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Загрузить образ XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Загрузить 64-битный образ XNU." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Загрузить пакет расширения XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Загрузить расширение XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "КАТАЛОГ [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Загрузить каталог расширений XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Загрузить виртуальный диск XNU. Он будет доступен в ОС как md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Загрузить образ заставки для XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Загрузить образ XNU, находящегося в спящем режиме." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "АДРЕС1,МАСКА1[,АДРЕС2,МАСКА2[,…]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Объявить области памяти как сбойную (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "С[K|M|G] ПО[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Удалить все области памяти в указанном диапазоне." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "ожидается четыре аргумента" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "нераспознанный сетевой интерфейс «%s»" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "информация о DHCP не найдена" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "параметры DHCP не найдены" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "параметр DHCP %d не найден" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "неопознанный формат указания параметра DHCP «%s»" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "сетевая карта не найдена" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "не удалось выполнить автоматическую настройку %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[КАРТА]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "выполнить автоматическую настройку по bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "ПЕРЕМЕННАЯ ИНТЕРФЕЙС НОМЕР ОПИСАНИЕ" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"получить параметр DHCP и сохранить его в ПЕРЕМЕННУЮ. Если значение " +"ПЕРЕМЕННОЙ равно -, то показать значение." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "не настроены серверы DNS" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "компонент доменного имени слишком длинен" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "не найдена DNS-запись" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "не получен ответ DNS" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "только ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "только ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "предпочитать ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "предпочитать ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "неверный аргумент" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "АДРЕС СЕРВЕР_DNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Выполнить поиск в DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "СЕРВЕР_DNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Добавить сервер DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Удалить сервер DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Список серверов DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "не удалось послать сетевой пакет" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "интерпретация не поддерживается" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "ошибка в alloc-mem" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "ошибка в free-mem" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "неподдерживаемый ответ HTTP" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "неподдерживаемая ошибка HTTP %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "истекло время ожидания при открытии «%s»" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "истекло время ожидания: невозможно определить аппаратный адрес" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "неопределимый адрес %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "нераспознанный сетевой адрес «%s»" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "пункт назначения недоступен" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "обнаружено зацикливание маршрута" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "адрес не найден" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "вы не можете удалить этот адрес" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Неподдерживаемый тип аппаратного адреса %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Неподдерживаемый тип адреса %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "ожидается три аргумента" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "карта не найдена" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "временный" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Неизвестный тип адреса %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "сервер не указан" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "истекло время ожидания при чтении «%s»" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "КОРОТКОЕ_ИМЯ КАРТА АДРЕС [АППАРАТНЫЙ_АДРЕС]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Добавить сетевой адрес." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[КАРТА [АППАРАТНЫЙ_АДРЕС]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Выполнить автоматическую настройку IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "КОРОТКОЕ_ИМЯ" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Удалить сетевой адрес." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "КОРОТКОЕ_ИМЯ СЕТЬ [ИНТЕРФЕЙС| gw ШЛЮЗ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Добавить сетевой маршрут." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Удалить сетевой маршрут." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "вывести список сетевых маршрутов" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "вывести список сетевых карт" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "вывести список сетевых адресов" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "в соединении отказано" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "истекло время ожидания соединения" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Введите имя пользователя: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[СПИСОК_ПОЛЬЗОВАТЕЛЕЙ]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Проверьте, что пользователь в СПИСКЕ_ПОЛЬЗОВАТЕЛЕЙ." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Возможные команды:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Возможные устройства:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Возможные файлы:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Возможные разделы:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Возможные параметры:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Возможные элементы:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "" +"Предупреждение: синтаксическая ошибка (отсутствует косая черта) в «%s»\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Предупреждение: неправильный цвет текста (foreground) «%s»\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Предупреждение: неправильный цвет фона (background) «%s»\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ [ПЕРЕМЕННАЯ_ОКРУЖЕНИЯ] …" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Экспортировать переменные." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Воскресенье" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Понедельник" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Вторник" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Среда" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Четверг" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Пятница" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Суббота" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "модуль не загружен" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB, версия %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Для выхода нажмите ESC в любой момент." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Поддерживается несколько BASH-подобных команд редактирования строки. Есть " +"вывод списка команд по TAB для дополнения. Также есть везде, где возможно, " +"вывод списка по TAB для устройств или файлов. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Очистить экран." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Войти в нормальный режим." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Выйти из нормального режима." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Нажмите любую клавишу для продолжения…" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Загружается «%s»" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Откат к резервному «%s»" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Не удалось загрузиться согласно пунктам по умолчанию и резервному.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Загружается список команд" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Поддерживается несколько Emacs-подобных команд редактирования на экране. " +"Есть списки дополнений по TAB. Нажмите Ctrl-x или F10 для загрузки, Ctrl-c " +"или F2 для получения командной строки или ESC для отмены изменений и " +"возврата в меню GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Используйте клавиши %C и %C для перемещения по пунктам." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "Б" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "КиБ" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "МиБ" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "ГиБ" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "ТиБ" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "ПиБ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "К" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "М" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "Г" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "Т" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "П" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "Б/с" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "КиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "МиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "ГиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "ТиБ/с" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "ПиБ/с" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Раздел %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Устройство %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Файловая система недоступна" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Тип файловой системы %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Метка «%s»" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Время последнего изменения %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Обнаружена неизвестная файловая система" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Раздел начинается с %llu%sКиБ" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Размер сектора %uБ" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Общий размер неизвестен" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Общий размер %llu%sКиБ" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--ДАЛЬШЕ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "не удалось открыть файл настройки «%s»: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "для вашей платформы сжатие не поддерживается" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "для вашей платформы процедуры IEEE1275 не поддерживаются" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "для вашей платформы процедуры EFI не поддерживаются" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "для вашей платформы процедуры SGI не поддерживаются" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "для вашей ОС генератор случайных чисел недоступен" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Не удалось создать дерево «device-mapper»" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "не удалось смонтировать шифрованный том «%s»: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "не удалось открыть geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "не удалось найти потребителя geli" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "не удалось получить geli UUID" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "не удалось найти класс geom «part»" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "невыровненный размер устройства" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "попытка прочитать базовый образ «%s» из GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "повторная попытка прочитать базовый образ «%s» из GRUB" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "не удалось прочитать «%s» правильно" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "не удалось прочитать секторы базового образа" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "не удалось получить командную строку транслятора для пути «%s»: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "командная строка транслятора для пути «%s» пуста" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"транслятору «%s» для пути «%s» передаётся несколько слов, не параметров, по " +"крайней мере «%s» и «%s»" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"транслятору «%s» для пути «%s» переданы только параметры, не удалось найти " +"часть, относящуюся к устройству" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Информация о хранилище «%s» не содержит тип" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "«%s» не является локальным диском" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"В информации о хранилище для «%s» должен быть указан обычный раздел или " +"обычный диск" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "не удалось получить список блоков: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "размер блока не делится на 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "неверный нулевой размер блока" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "не удалось получить список блоков" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ошибка ioctl RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "неподдерживаемая версия RAID: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ошибка ioctl GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ошибка ioctl GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Не удалось открыть поток из %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "неизвестный тип RAID-устройства «%s»" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"«obppath» не найден в родительских каталогах «%s», обнаружение имени по " +"IEEE1275 отсутствует" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "не удалось получить канонический путь «%s»" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "неизвестный тип устройства %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Использование: %s УСТРОЙСТВО\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Не удалось выполнить fork: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Не удалось создать канал: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "не удалось восстановить первоначальный каталог" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "невозможно выполнить stat «%s»: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "не удалось создать временный файл: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "не удалось создать временный каталог: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"не удалось найти путь дерева устройств IEEE1275 для %s.\n" +"Вам придётся установить переменную «boot-device» вручную" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: не найдено" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"ошибка в «nvsetenv». \n" +"Вам нужно установить переменную «boot-device» вручную.\n" +"В приглашении IEEE1275 наберите:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Вам нужно установить «SystemPartition» и «OSLoader» вручную." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "в каноническом имени файла отсутствует «/»" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() завершилась с ошибкой" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "не удалось получить произвольные данные" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Недостаточно прав для доступа к микропрограмме, считаем что BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "процедуры EFI недоступны при работе в режиме BIOS" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "неожиданная ошибка EFI" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Невозможно найти свободный слот BootNNNN" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "метка раздела GPT не имеет BIOS Boot Partition; встраивание невозможно" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "BIOS Boot Partition слишком мал; встраивание невозможно" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Сектор %llu уже используется raid-контроллером «%s»; пропускаем его. " +"Попросите производителя не хранить данные в промежутке MBR" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Сектор %llu уже используется программой «%s»; пропускаем его. Данное ПО в " +"будущем может создать проблемы с загрузкой. Попросите его авторов не хранить " +"данные на загрузочной дорожке" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"другое ПО использует встраиваемую область, и в ней недостаточно места для " +"core.img. Подобное ПО таким способом часто пытается сохранить данные, чтобы " +"их не обнаружили. Мы рекомендуем вам исследовать это" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"метка раздела в стиле msdos не имеет промежутка после MBR; встраивание " +"невозможно" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"встраиваемая область необычно маленького размера. core.img не влезет в неё." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Сделать раздел активным" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "не основной раздел" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Раздел %d сделан активным. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Флаг активности на разделе %d сброшен. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Изменить тип раздела" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Установить флаг «hidden» в типе раздела" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "некорректный тип раздела 0x%x" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Назначение типа раздела равным 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "невозможно разорвать 0 циклов" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "не в функции" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "некорректное имя переменной «%s»" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "неожиданный конец файла" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[НОМЕР]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Выйти из циклов" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Продолжить циклы" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Сдвинуть позиционные параметры." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ЗНАЧЕНИЕ]…" + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Задать позиционные параметры." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Вернуться из функции." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] ФАЙЛ" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Загрузить фоновое изображение на активный терминал." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "ЦВЕТ" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Назначить цвет фона активного терминала." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Показать содержимое консоли CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Задать номер последовательного порта." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Задать адрес последовательного порта." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Задать скорость последовательного порта." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Задать длину слова последовательного порта." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Задать чётность последовательного порта." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Задать количество стоп-битов последовательного порта." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Задать базовую частоту." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Включить/выключить RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "последовательный порт «%s» не найден" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "управление потоком последовательного порта не поддерживается" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[ПАРАМЕТРЫ…]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Настроить последовательный порт." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "неизвестный terminfo-тип «%s»" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "визуально упорядоченная UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Неизвестная кодировка" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Текущие типы terminfo:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Терминал только в ASCII [по умолчанию]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Терминал в логически упорядоченной UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Терминал в визуально упорядоченной UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Терминал имеет указанные размеры." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ШИРИНАxВЫСОТА." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "неверное задание размеров терминала" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "терминал %s не найден или не поддерживается terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g ШxВ] TERM [ТИП]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Задать тип terminfo type для TERM равным TYPE.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Показать и выполнить блочный аргумент." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "Файл битовой карты «%s» неподдерживаемого формата" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " Информация VBE: версия: %d.%d издание ПО OEM: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " всего памяти: %d КиБ\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "не найден подходящий видео-режим" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "доступ запрещён" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "МОДУЛИ" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "заранее загрузить указанные МОДУЛИ" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "установить только МОДУЛИ и их зависимости [по умолчанию all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "ТЕМЫ" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "установить ТЕМЫ [по умолчанию %s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "ШРИФТЫ" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "установить ШРИФТЫ [по умолчанию %s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "ЛОКАЛИ" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "установить только ЛОКАЛИ [по умолчанию all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "сжимать файлы GRUB [необязательно]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "выбрать алгоритм сжатия, применяемый для базового образа" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "использовать образы и модули из КАТАЛОГА [по умолчанию %s/<платформа>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "использовать переводы из КАТАЛОГА [по умолчанию %s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "использовать темы из КАТАЛОГА [по умолчанию %s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "встраивать ФАЙЛ как открытый ключ для проверки подписи" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "не удалось переименовать файл %s в %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "диск не существует, переходим обратно к разделу диска %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Команды:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Создать пустой файл блока окружения." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Показать текущие переменные." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [ИМЯ=ЗНАЧЕНИЕ …]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Задать переменные." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [ИМЯ …]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Удалить переменные." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Параметры:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Вам нужно указать хотя бы одну команду.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "ИМЯ_ФАЙЛА КОМАНДА" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Инструмент редактирования блока окружения." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Если ИМЯ_ФАЙЛА равно «-», то используется значение по умолчанию %s.\n" +"\n" +"Здесь команда «delete» не работает; если вы хотите удалить блок окружения\n" +"целиком, используйте «rm %s»." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "неправильный блок окружения" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "некорректный параметр %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "блок окружения слишком мал" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "ошибка при чтении диска по смещению %lld, длина %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "неверное значение пропуска %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "ошибка при чтении по смещению %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "не удалось открыть файл ОС «%s»: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "не удалось записать в stdout: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "сравнение по смещению %llu завершилось неудачно" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Ошибка открытия файла ОС %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "команда «loopback» завершилась с ошибкой: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "команда «cryptomount» завершилась с ошибкой: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "не удалось получить UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls ПУТЬ" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Вывести список файлов в ПУТИ." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp ФАЙЛ ЛОКАЛЬНЫЙ_ФАЙЛ" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Скопировать ФАЙЛ в ЛОКАЛЬНЫЙ_ФАЙЛ." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat ФАЙЛ" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Скопировать ФАЙЛ в стандартный вывод." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp ФАЙЛ ЛОКАЛЬНЫЙ_ФАЙЛ" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Сравнить ФАЙЛ с ЛОКАЛЬНЫМ_ФАЙЛОМ." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex ФАЙЛ" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Показать содержимое ФАЙЛА в шестнадцатеричном коде." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc ФАЙЛ" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Вычислить контрольную сумму crc32 для ФАЙЛА." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist ФАЙЛ" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Показать список блоков ФАЙЛА." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid УСТРОЙСТВО" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Вычислить XNU UUID для устройства." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "НОМЕР" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Пропустить N байт из выходного файла." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Обработать N байт выходного файла." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Задать количество входных файлов." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Задать переменную окружения отладки." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Смонтировать крипто-устройства." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "ФАЙЛ|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Загрузить ключ шифрования zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Расжать данные." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Неверное количество дисков.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Количество дисков должно быть перед списком дисков.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Не указана команда.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Недостаточно параметров для команды.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Неверная команда %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ПУТЬ_К_ОБРАЗУ КОМАНДЫ" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Инструмент отладки драйвера файловой системы." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "задать имя входного файла для 32-битной части." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "задать имя входного файла для 64-битной части." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "задать имя выходного файла. По умолчанию STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[ПАРАМЕТРЫ]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" +"Объединить 32-битный и 64-битный двоичный файл в один универсальный в " +"формате Apple." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Отсутствует входной файл\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "не удалось скопировать «%s» в «%s»: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "не удалось сжать «%s» в «%s»" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "не удалось открыть каталог «%s»: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "не удалось удалить «%s»: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage собран без поддержки XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Неизвестный формат сжатия %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Тип сжатия «%s» не распознано" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "неизвестный целевой формат %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "не удалось найти локаль «%s»" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s не существует. Укажите --target или --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "некорректный файл modinfo «%s»" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Неизвестная платформа «%s-%s»" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Более одного устройства для установки?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "устанавливать образы GRUB в каталог КАТ/%s, а не в каталог %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ЦЕЛЬ" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"установить GRUB для ЦЕЛЕВОЙ платформы [по умолчанию %s]; доступные " +"платформы: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"сделать устройство загрузочным как дискета (по умолчанию для устройств fdX). " +"Может не работать с некоторыми BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "удалить карту устройств, если она уже существует" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "установить даже если обнаружены проблемы" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "использовать файл идентификации даже если доступен UUID" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"используемый дисковый модуль (biosdisk или native). Этот параметр доступен " +"только для BIOS цели." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"не обновлять переменные «boot-device/Boot*» в NVRAM. Этот параметр доступен " +"только для целей EFI и IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "не проверять файловые системы на УСТРОЙСТВЕ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "не устанавливать загрузочный сектор" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Не применять любые коды Рида-Соломона при встраивании core.img. Этот " +"параметр доступен только для целей x86 BIOS." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"устройство, на которое производится установка, является переносным. Этот " +"параметр доступен только для EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "ID системного загрузчика. Этот параметр доступен только для EFI и Mac." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "использовать КАТАЛОГ в качестве корня системного раздела EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "использовать КАТАЛОГ для установки PPC MAC." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "использовать ФАЙЛ в качестве файла шрифта для метки" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "использовать ЦВЕТ для метки" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "использовать ЦВЕТ для фона метки" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "использовать СТРОКУ в качестве версии продукта" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[ПАРАМЕТР] [УСТРОЙСТВО_ДЛЯ_УСТАНОВКИ]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Устанавливает GRUB на устройство." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"В значении УСТРОЙСТВО_ДЛЯ_УСТАНОВКИ должно задаваться имя файла системного\n" +"устройства. %s копирует образы GRUB на %s.\n" +"На некоторых платформах он также может установить GRUB в загрузочный сектор." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "привод %s объявлен несколько раз в карте устройств %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Не удалось определить вашу платформу. Используйте --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Выполняется установка для платформы %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "не указано устройство, на которое нужно выполнить установку" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "не удалось найти каталог EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "не удалось найти устройство для %s (/dev смонтирован?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "не удалось найти привод GRUB для %s. Проверьте device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s не похоже на раздел EFI" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Вы нашли ошибку" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "файловая система на %s не является HFS или HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"попытка установки на шифрованный диск без включённого cryptodisk. Задайте " +"«%s» в файле «%s»" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Не удалось создать файл: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"для вашей платформы нет рекомендаций. Ожидается снижение производительности" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "НЕ ЗАПУЩЕНО: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "выбранный раздел не является разделом PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "не удалось скопировать Grub на раздел PReP" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"раздел PReP не пуст. Если вы уверены, что хотите использовать его, запустите " +"dd для его очистки: «%s»" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Не указан загрузчик EFI." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" +"ПРЕДУПРЕЖДЕНИЕ: никаких специальных установок для платформы не произведено" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Установка завершена. Ошибок нет." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "загрузка для mac на основе x86" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "загрузка для mac на основе ppc" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Не указан путь или устройство.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc ПУТЬ|--x86 ФАЙЛ" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Загрузка в стиле Mac с HFS или HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Использование: %s [ВХОДНОЙ_ФАЙЛ [ВЫХОДНОЙ_ФАЙЛ]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Ошибка Freetype %d при загрузке образа символа 0x%x для U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (серединный)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (крайний слева)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (крайний справа)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Подстановка вне диапазона (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Поиск вне диапазона: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Неподдерживаемый тип подстановки: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Неподдерживаемое подстановочное обозначение: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Неподдерживаемая подстановочная зона действия: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "ПРЕДУПРЕЖДЕНИЕ: неподдерживаемые параметры свойств шрифта: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "сохранить вывод в ФАЙЛ [требуется]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "выбрать индекс начертания" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "ИЗ-В[,ИЗ-В]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "назначить диапазон шрифта" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "назначить гарнитуру шрифта" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "РАЗМЕР" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "назначить размер шрифта" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "назначить спуск шрифта" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "назначить подъём шрифта" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "преобразовать в жирный шрифт" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "принудительный автохинтинг" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "отключить хинтинг" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "игнорировать заданный в битовой карте размер при загрузке" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "неверный диапазон шрифта" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[ПАРАМЕТРЫ] ФАЙЛЫ_ШРИФТА" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Преобразует файлы шрифтов распространённых форматов в PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "требуется указать выходной файл" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType завершилась с ошибкой" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "не удалось открыть файл %s, индекс %d: ошибка %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "не удалось задать размер шрифта %dx%d: ошибка Freetype %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "назначить префикс-каталог" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"встраивать ФАЙЛ как образ виртуального диска\n" +"Означает «-p (memdisk)/boot/grub» и заменяет любой префикс, указанный " +"ранее,\n" +"но префикс всё ещё можно изменить в последующих параметрах" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "встраивать ФАЙЛ как файл ранней настройки" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "добавить сегмент NOTE в CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" +"записать сгенерированный образ в ФАЙЛ [по умолчанию: на стандартный вывод]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ФОРМАТ" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "генерировать образ в ФОРМАТЕ" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "Доступные форматы:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "неизвестный целевой формат %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[ПАРАМЕТР]… [МОДУЛИ]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Создаёт загрузочный образ GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Целевой формат не указан (используйте параметр -O)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Префикс не указан (используйте параметр -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"некорректная компиляция «%s»: начальный адрес равен 0x%llx вместо 0x%llx: " +"ошибка в ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "задать имя входного файла. По умолчанию STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Неизвестный скан-идентификатор клавиатуры %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Неизвестный скан-код клавиатуры 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "ОШИБКА: допустимая раскладка клавиатуры не найдена. Проверьте ввод.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Генерирует раскладку клавиатуры GRUB из консоли Linux." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "корневой каталог сервера TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "относительный подкаталог на сетевом сервере" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Подготавливает образы для сетевой загрузки GRUB в net_directory/subdir; " +"предполагается, что net_directory является корнем TFTP." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "неподдерживаемая платформа %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Создан каталог netboot для %s. Настройте сервер DHCP так, чтобы он указывал " +"на %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Количество итераций PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Длина генерируемого хэша" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Длина соли" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Генерирует хэш пароля PBKDF2." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "не удалось прочитать пароль" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Повторно введите пароль: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "пароли не совпадают" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "не удалось получить произвольные данные для соли" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "номер ошибки шифрования %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "Хэш PBKDF2 вашего пароля: %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Не указан путь.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ПУТЬ" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Преобразовать системное имя файла в имя файла GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "сохранить образы ROM в КАТАЛОГ [необязательный]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "в качестве xorriso использовать ФАЙЛ [необязательный]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "использовать СТРОКУ в качестве имени продукта" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"включить sparc boot. Выключить HFS+, APM, ARCS и boot из дискового образа " +"для i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"включить ARCS (машины с big-endian mips, в основном SGI) boot. Выключить HFS" +"+, APM, sparc64 и boot из дискового образа для i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Создать загрузочный образ GRUB для компакт-диска, диска, USB-накопителя или " +"дискеты." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Генерирует загрузочный образ CD/USB/дискеты. Аргументы, отличные от " +"параметров этой программы, передаются xorriso, и задают исходные файлы, " +"каталоги или любые параметры mkisofs, перечисленные в выводе «%s»." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Параметр -- переключает в родной режим команд xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Отправляйте запросы поддержки xorriso по адресу ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[ПАРАМЕТР] ИСХОДНЫЕ…" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "включение поддержки %s …" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Имеющийся xorriso не поддерживает «--grub2-boot-info». Некоторые " +"возможности отключены. Используйте xorriso 1.2.9 или новее." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Имеющийся xorriso не поддерживает «--grub2-boot-info». Базовый образ " +"слишком большой. Загрузка с диска отключена. Используйте xorriso 1.2.9 или " +"новее." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Сгенерировать автономный образ (содержащий все модули) в заданном формате" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Принимается синтаксис с начальной точкой (например, /boot/grub/grub.cfg=./" +"grub.cfg)" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ОБРАЗ1 [ОБРАЗ2 …] ТОЧКА_МОНТИРОВАНИЯ" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "требуется образ и точка монтирования" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "указанный аргумент является системным устройством, а не путём" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "разделение элементов в выводе символами ASCII NUL" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[по умолчанию %s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "печатать ЦЕЛЬ" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "доступные цели:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[ПАРАМЕТР]… [ПУТЬ|УСТРОЙСТВО]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Собирает информацию об устройстве для заданного пути (или устройства, если " +"указан параметр -d)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "прочитать текст из ФАЙЛА." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "использовать ЦВЕТ для текста" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "Использовать ЦВЕТ для фона" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "задать ярлык для генерации" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "использовать ФАЙЛ как файл со шрифтом (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Сгенерировать Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Отсутствуют аргументы\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ПУТЬ]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Проверяет файл сценария настройки GRUB на синтаксические ошибки." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Синтаксическая ошибка в строке %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" +"Сценарий «%s» не содержит команд; никаких действие выполнено не будет\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "использовать ФАЙЛ в качестве загрузочного образа [по умолчанию %s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "использовать ФАЙЛ в качестве базового образа [по умолчанию %s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Не указано устройство.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Установка образов для загрузки с УСТРОЙСТВА.\n" +"\n" +"Обычно не нужно вызывать эту программу вручную. Вместо неё используйте grub-" +"install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "" +"УСТРОЙСТВО должно задаваться в формате операционной системы (например, /dev/" +"sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Неверное устройство «%s».\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" +"корневой каталог — как он будет виден во время выполнения [по умолчанию /]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"текущий каталог syslinux, как он будет виден во время выполнения [по " +"умолчанию родительский каталог входного файла]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "записать вывод в ФАЙЛ [по умолчанию stdout]" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Преобразовать настройки syslinux в GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "не удалось сжать образ ядра" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "неизвестный тип сжатия %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Декомпрессор слишком большой" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "базовый образ слишком большой (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "образ ядра слишком большой (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "размер diskboot.img должен быть %u байт" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img не подходит ни под одну проверенную версию. Продолжаем на ваш " +"страх и риск" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "размер образа микропрограммы слишком большой" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "неверный формат строки: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "первый сектор базового файла не выровнен посекторно" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "в базовом файле найдены не выровненные посекторно данные" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "секторы базового файла слишком фрагментированы" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "размер «%s» не равен %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "размер «%s» слишком мал" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Попытка установить GRUB на диск с несколькими разметками разделов или с " +"разметкой разделов и файловой системой. Лучше этого НЕ ДЕЛАТЬ." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"не удалось определить файловую систему в %s; невозможно выполнить безопасную " +"проверку" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Кажется, что %s содержит файловую систему %s, на которой неизвестно о " +"наличии места для загрузчика в стиле DOS. Установка GRUB в этом случае может " +"привести к ПОВРЕЖДЕНИЮ ФАЙЛОВОЙ СИСТЕМЫ, если важные данные будут " +"перезаписаны grub-setup (параметр --skip-fs-probe выключает эту проверку, но " +"вас предупредили)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Кажется, что %s содержит карту разделов %s, на которой неизвестно о наличии " +"места для загрузчика в стиле DOS. Установка GRUB в этом случае может " +"привести к ПОВРЕЖДЕНИЮ ФАЙЛОВОЙ СИСТЕМЫ, если важные данные будут " +"перезаписаны grub-setup (параметр --skip-fs-probe выключает эту проверку, но " +"вас предупредили)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Кажется, что %s содержит карту разделов %s и LDM, что не является безопасной " +"комбинацией. Установка GRUB в этом случае может привести к ПОВРЕЖДЕНИЮ " +"ФАЙЛОВОЙ СИСТЕМЫ, если важные данные будут перезаписаны grub-setup (параметр " +"--skip-fs-probe выключает эту проверку, но вас предупредили)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Попытка установить GRUB на диск без разделов или на раздел. Лучше этого НЕ " +"ДЕЛАТЬ." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Попытка установить GRUB на диск с несколькими разметками разделов. Это пока " +"не поддерживается." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Стиль раздела «%s» не поддерживает встраивание" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Файловая система «%s» не поддерживает встраивание" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Встраиваемая область необычно маленького размера. core.img не влезет в неё." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "в базовом образе нет метки окончания" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "Несоответствие версии core.img" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "встраивание невозможно, но оно необходимо при установке на RAID и LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "невозможно определить тип файловой системы на %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "файловая система «%s» не поддерживает списки блоков" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "встраивание невозможно, но оно необходимо для междисковой установки" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Встраивание невозможно. При имеющихся параметрах GRUB можно установить " +"только с помощью списка блоков (blocklists). Однако, список блоков является " +"НЕНАДЁЖНЫМ механизмом и его лучше не использовать." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "не будет продолжена с использованием blocklists" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "некорректный список блоков" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "незавершённый список блоков" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Использование: %s -o ВЫВОД АРГУМЕНТЫ_CKBMAP…\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Создаёт файл раскладки клавиатуры GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "показать эту справку и закончить работу" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "показать информацию о версии и завершить работу" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s генерирует раскладку клавиатуры GRUB с помощью ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Сообщения об ошибках отправляйте на ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: параметр должен использоваться с аргументом — «%s»\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Использование: %s [ПАРАМЕТР]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Генерирует файл настройки grub" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "вывести сгенерированные настройки в ФАЙЛ [по умолчанию stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Неизвестный параметр «%s»\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Вы должны запускать программу имея права суперпользователя\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: не найдено.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Генерируется файл настройки grub …" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"В сгенерированном файле настроек GRUB обнаружены синтаксические ошибки.\n" +"Убедитесь, что в файлах /etc/default/grub\n" +"и /etc/grub.d/* ошибки отсутствуют или пошлите сообщение об ошибке\n" +"в прикреплённым файлом %s." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "завершено" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Предупреждение:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Использование: %s [ПАРАМЕТР] ПУНКТ_МЕНЮ\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Назначает пункт меню в GRUB для загрузки по умолчанию, только для следующей " +"загрузки." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "образы GRUB находятся в каталоге КАТ/%s, а не в каталоге %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"ПУНКТ_МЕНЮ — это число, заголовок или идентификатор пункта меню.\n" +"Заметим, что пункты меню в подменю или под-подменю требуют указания\n" +"компонентов подменю и самого компонента пункта меню. Заголовки должны\n" +"отделяться с помощью символа «больше» (>) без дополнительных пробелов.\n" +"В зависимости от вашей оболочки некоторые символы, включая >, могут\n" +"экранироваться. Дополнительную информацию об этом можно найти в\n" +"руководстве GRUB, в разделе о команде «default». " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Более одного пункта меню?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Пункт меню не задан." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Назначает пункт меню GRUB для загрузки по умолчанию." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Для этого требуется строка GRUB_DEFAULT=saved в %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ПУНКТ_МЕНЮ задаётся номером, заголовком или идентификатором пункта меню." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Запрашивается последовательный терминал, но GRUB_SERIAL_COMMAND не задана. " +"Будут использованы параметры по умолчанию." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Найдена тема: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Найден фон: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Неподдерживаемый формат изображения" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Назначение GRUB_TIMEOUT ненулевого значения при заданной GRUB_HIDDEN_TIMEOUT " +"больше не поддерживается." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Найден GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Найден модуль Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" +"Найдены некоторые компоненты Hurd, но их недостаточно для загрузки системы." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, с Hurd %s (режим восстановления)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, с Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Не используйте старое название «%s» для GRUB_DEFAULT, используйте «%s» (для " +"версий старее 2.00) или «%s» (для 2.00 или новее)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Загружается GNU Mach …" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Загружается Hurd …" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Дополнительные параметры для %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Загружается ядро Illumos …" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, с kFreeBSD %s (режим восстановления)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, с kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Загружается ядро FreeBSD %s …" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Найдено ядро FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Найден каталог модулей ядра: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, с Linux %s (режим восстановления)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, с Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Загружается Linux %s …" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Загружается начальный виртуальный диск …" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Найден образ linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Найден образ initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, с ядром %s (с использованием %s, режим восстановления)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, с ядром %s (с использованием %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Найдено ядро NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (загрузчик)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (загрузчик)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Найден %s на %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-бит)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-бит)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(на %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, с Xen %s и Linux %s (режим восстановления)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, с Xen %s и Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, с гипервизором Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Загружается Xen %s …" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Гипервизор Xen, версия %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Дополнительные параметры для %s (с гипервизором Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Найден %s на %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s пока не поддерживается grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Неподдерживаемый флаг подстановки: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Неизвестное шрифтовое свойство gsub 0x%x (%s)\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Адресный диапазон не сопоставленный с памятью" + +#~ msgid "PUBKEY_FILE" +#~ msgstr "ФАЙЛ_С_ОТКРЫТЫМ_КЛЮЧОМ" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign не поддерживается в вашей системе" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "" +#~ "Если в ИМЕНИ_ФАЙЛА указано «-», то используется значение по умолчанию %s." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "сохранить только битовые карты ASCII" + +#~ msgid "create width summary file" +#~ msgstr "создать широкий обзорный файл" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Параметр --ascii-bitmaps не воспринимает диапазоны (всегда используется " +#~ "ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "ПРЕДУПРЕЖДЕНИЕ: возможно небезопасный генератор случайных чисел\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "показать модуль файловой системы, привод GRUB, системное устройство, " +#~ "модуль карты разделов, модуль абстракции или UUID зашифрованного " +#~ "контейнера [по умолчанию fs]" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "не удалось прочитать первый сектор базового образа" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "в качестве grub-setup использовать ФАЙЛ" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "в качестве grub-mkrelpath использовать ФАЙЛ" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "в качестве grub-probe использовать ФАЙЛ" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "Значение УСТРОЙСТВА_ДЛЯ_УСТАНОВКИ должно быть именем файла системного " +#~ "устройства." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "GRUB не может прочитать путь «%s» при загрузке. Установка невозможна. " +#~ "Выполнение остановлено.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Автоопределение файловой системы %s завершилось с ошибкой.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Попробуйте с --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Если проблема осталась, пошлите сообщение об ошибке вместе с выводом %s " +#~ "по адресу <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "«%s» завершилась с ошибкой.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "Не удалось найти привод GRUB для %s; невозможно создать элемент EFI Boot " +#~ "Manager.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Генерируется grub.cfg …" + +#~ msgid "" +#~ "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgstr "" +#~ "%s копирует образы GRUB в net_directory/subdir/target_cpu-platform\\n" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "в качестве grub-glue-efi использовать ФАЙЛ" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "в качестве grub-render-label использовать ФАЙЛ" + +#~ msgid "Packed pixel " +#~ msgstr "Упакованный пиксель" + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "" +#~ "использовать образы GRUB из КАТАЛОГА. Имеет преимущество перед параметром " +#~ "ЦЕЛИ" + +#~ msgid "Storage info for `%s' does not include name" +#~ msgstr "Информация о хранилище «%s» не содержит имени" + +#~ msgid "Bogus name length for storage info for `%s'" +#~ msgstr "Поддельная длина имени информации о хранилище «%s»" + +#~ msgid "Storage name for `%s' not NUL-terminated" +#~ msgstr "Имя хранилища для «%s» не заканчивается NUL" + +#~ msgid "Couldn't find physical volume `%s'. Check your device.map" +#~ msgstr "Невозможно найти физический том «%s». Проверьте device.map" + +#~ msgid "diskboot.img is not one sector size" +#~ msgstr "размер diskboot.img не равен размеру одного сектора" + +#~ msgid "loopback command fails" +#~ msgstr "команда loopback завершилась неудачно" + +#~ msgid "cryptomount command fails: %s" +#~ msgstr "команда cryptomount завершилась с ошибкой: %s" + +#~ msgid "%s: option requires an argument -- `%s'" +#~ msgstr "%s: параметру требуется аргумент — «%s»" + +#~ msgid "Legend: P=Packed pixel, D=Direct color, mask/pos=R/G/B/reserved" +#~ msgstr "" +#~ "Обозначения: P=Упакованный пиксель, D=Прямой цвет, маска/положение=R/G/B/" +#~ "reserved" + +#~ msgid "FIXME: no / in buf. (make_system_path_relative_to_its_root)" +#~ msgstr "FIXME: no / in buf. (make_system_path_relative_to_its_root)" + +#~ msgid "Make GRUB rescue image." +#~ msgstr "Создаёт образ восстановления GRUB." + +#~ msgid "Show v2 and v3 tablesv only." +#~ msgstr "Показать только tablesv v2 и v3." + +#~ msgid "Unknown " +#~ msgstr "Неизвестно " + +#~ msgid "Map table size exceeded" +#~ msgstr "Превышен размер таблицы отображения" + +#~ msgid "Try `%s --help' for more information.\n" +#~ msgstr "По команде «%s --help» можно получить дополнительную информацию.\n" + +#~ msgid "" +#~ "Usage: %s [OPTION]...\n" +#~ "\n" +#~ "GRUB emulator.\n" +#~ "\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=host]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -v, --verbose print verbose messages\n" +#~ " -H, --hold[=SECONDS] wait until a debugger will attach\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Использование: %s [ПАРАМЕТР]…\n" +#~ "\n" +#~ "Эмулятор GRUB.\n" +#~ "\n" +#~ " -r, --root-device=УСТР использовать УСТРойство в качестве корневого\n" +#~ " устройства [по умолчанию — узел]\n" +#~ " -m, --device-map=ФАЙЛ использовать ФАЙЛ в качестве карты устройства\n" +#~ " [по умолчанию — %s]\n" +#~ " -d, --directory=КАТ использовать файлы GRUB из КАТалога\n" +#~ " [по умолчанию — %s]\n" +#~ " -v, --verbose выводить доп. информацию при работе\n" +#~ " -H, --hold[=СЕКУНД] ждать присоединения отладчика\n" +#~ " -h, --help показать эту справку и завершить работу\n" +#~ " -V, --version показать версию и завершить работу\n" +#~ "\n" +#~ "Сообщения об ошибках направляйте на <%s>.\n" + +#~ msgid "" +#~ "%s is deprecated. Use set gfxpayload=text before linux command instead.\n" +#~ msgstr "" +#~ "%s устарел. Используйте вместо него set gfxpayload=text до команды " +#~ "linux.\n" + +#~ msgid "Serial terminal not available on this platform." +#~ msgstr "Последовательный терминал недоступен на этой платформе." + +#~ msgid "Usage: %s [OPTION] install_device" +#~ msgstr "Использование: %s [ПАРАМЕТР] install_device" + +#~ msgid "Usage: %s [OPTION] [install_device]" +#~ msgstr "Использование: %s [ПАРАМЕТР] [install_device]" + +#~ msgid "the ID of bootloader." +#~ msgstr "ID системного загрузчика." + +#~ msgid "" +#~ "UUID needed with ata mod, but the filesystem containing %s does not " +#~ "support UUIDs.\\n" +#~ msgstr "" +#~ "Для модуля ata требуется UUID, но файловая система на %s не поддерживает " +#~ "UUID.\\n" + +#~ msgid "" +#~ "UUID needed with cross-disk installs, but the filesystem containing %s " +#~ "does not support UUIDs.\\n" +#~ msgstr "" +#~ "Для установки на несколько дисков требуется UUID, но файловая система на " +#~ "%s не поддерживает UUID.\\n" + +#~ msgid "No font for video terminal found." +#~ msgstr "Не найден шрифт для видеотерминала." + +#~ msgid "Usage: %s [OPTION] install_device\\n" +#~ msgstr "Использование: %s [ПАРАМЕТР] install_device\\n" + +#~ msgid "Usage: %s [OPTION] entry\\n" +#~ msgstr "Использование: %s [ПАРАМЕТР] элемент\\n" + +#~ msgid "Expose v1 tables." +#~ msgstr "Обработать таблицы v1." + +#~ msgid "(N/A)" +#~ msgstr "(Н/Д)" + +#~ msgid "Fake BIOS." +#~ msgstr "Ненастоящий BIOS." + +#~ msgid "Check hash list file." +#~ msgstr "Проверить файл со списком хэшей." + +#~ msgid "DIRECTORY" +#~ msgstr "КАТАЛОГ" + +#~ msgid "Read word from PORT." +#~ msgstr "Прочитать слово из ПОРТа." + +#~ msgid "Read dword from PORT." +#~ msgstr "Прочитать двойное слово из ПОРТа." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "Записать ЗНАЧЕНИЕ размером с слово в ПОРТ." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "Записать ЗНАЧЕНИЕ размером с двойное слово в ПОРТ." + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "BadRAM" +#~ msgstr "BadRAM" + +#~ msgid "hole" +#~ msgstr "дыра" + +#~ msgid "Read word from ADDR." +#~ msgstr "Прочитать слово по АДРЕСУ." + +#~ msgid "Read dword from ADDR." +#~ msgstr "Прочитать двойное слово по АДРЕСУ." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "Записать ЗНАЧЕНИЕ размером с слово по АДРЕСУ." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "Записать ЗНАЧЕНИЕ размером с двойное слово по АДРЕСУ." + +#~ msgid "USERNAME" +#~ msgstr "ИМЯ_ПОЛЬЗОВАТЕЛЯ" + +#~ msgid "KEY" +#~ msgstr "КЛАВИША" + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Определение пункта меню в виде строки." + +#~ msgid "Dump memory." +#~ msgstr "Сделать дамп памяти." + +#~ msgid "SMB base = 0x%x\n" +#~ msgstr "База SMB = 0x%x\n" + +#~ msgid "Device %d\n" +#~ msgstr "Устройство %d\n" + +#~ msgid "Variable names to update with matches." +#~ msgstr "Имена переменной для обновления с совпадениями." + +#~ msgid " Failed" +#~ msgstr " Завершилось неудачно" + +#~ msgid "Firmware is marked as tainted, refusing to initialize." +#~ msgstr "" +#~ "Микропрограмма помечена как бойкотируемая, отклонение инициализации." + +#~ msgid "State: " +#~ msgstr "Состояние: " + +#~ msgid "removed " +#~ msgstr "удалён " + +#~ msgid "offline " +#~ msgstr "не в работе " + +#~ msgid "degraded " +#~ msgstr "разрушен " + +#~ msgid "online" +#~ msgstr "в работе" + +#~ msgid "Leaf VDEV" +#~ msgstr "Слой VDEV" + +#~ msgid "Unknown VDEV type: %s\n" +#~ msgstr "Неизвестный тип VDEV: %s\n" + +#~ msgid "fstat failed" +#~ msgstr "fstat завершился неудачно" + +#~ msgid "no device.map" +#~ msgstr "отсутствует device.map" + +#~ msgid "No open parenthesis found" +#~ msgstr "Не найдена открывающая скобка" + +#~ msgid "No close parenthesis found" +#~ msgstr "Не найдена закрывающая скобка" + +#~ msgid "No filename found" +#~ msgstr "Не найдено имя файла" + +#~ msgid "cannot get the real path of `%s'" +#~ msgstr "невозможно получить реальный путь «%s»" + +#~ msgid "relocate is %s\n" +#~ msgstr "перемещение равно %s\n" + +#~ msgid "Load an additional file." +#~ msgstr "Загрузить дополнительный файл." + +#~ msgid "[on|off|force]" +#~ msgstr "[on|off|force]" + +#~ msgid "Set relocate feature." +#~ msgstr "Настроить свойство перемещения." + +#~ msgid "premature end of file %s: " +#~ msgstr "преждевременный конец файла %s: " + +#~ msgid "At least 3 arguments are expected" +#~ msgstr "Ожидается не менее 3 аргументов" + +#~ msgid "Authenticate users" +#~ msgstr "Аутентификация пользователей" + +#~ msgid "Make partition hidden" +#~ msgstr "Сделать раздел скрытым" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 видимая" + +#~ msgid "Unknown" +#~ msgstr "Неизвестно" + +#~ msgid "cannot stat `%s'" +#~ msgstr "невозможно выполнить stat «%s»" + +#~ msgid "Print verbose messages." +#~ msgstr "Показывать подробные сообщения." + +#~ msgid "cannot seek the file %s" +#~ msgstr "не удалось сместится по файлу %s" + +#~ msgid "cannot read the file %s" +#~ msgstr "не удалось прочитать файл %s" + +#~ msgid "can't open device" +#~ msgstr "не удалось открыть устройство" + +#~ msgid "write error" +#~ msgstr "ошибка записи" + +#~ msgid "seek error" +#~ msgstr "ошибка позиционирования" + +#~ msgid "Hex dump FILE." +#~ msgstr "Шестнадцатеричный дамп ФАЙЛА." + +#~ msgid "Error loading file %s: %s\n" +#~ msgstr "Ошибка загрузки файла %s: %s\n" + +#~ msgid "Couldn't open %s for reading: %s\n" +#~ msgstr "Не удалось открыть %s для чтения: %s\n" + +#~ msgid "Couldn't open %s for writing: %s\n" +#~ msgstr "Не удалось открыть %s для записи: %s\n" + +#~ msgid "" +#~ "\n" +#~ "Glyph #%d, U+%04x\n" +#~ msgstr "" +#~ "\n" +#~ "Глиф #%d, U+%04x\n" + +#~ msgid "Width %d, Height %d, X offset %d, Y offset %d, Device width %d\n" +#~ msgstr "" +#~ "Ширина %d, Высота %d, X-смещение %d, Y-смещение %d, Ширина устройства %d\n" + +#~ msgid "set output file" +#~ msgstr "задать выходной файл" + +#~ msgid "STR" +#~ msgstr "СТРОКА" + +#~ msgid "no output file is specified" +#~ msgstr "не указан выходной файл" + +#~ msgid "the core image is too big" +#~ msgstr "базовый образ слишком большой" + +#~ msgid "use images and modules under DIR [default=%s/@platform@]" +#~ msgstr "" +#~ "использовать образы и модули из КАТАЛОГА [по умолчанию %s/@platform@]" + +#~ msgid "" +#~ "generate an image in format.\n" +#~ "available formats: %s" +#~ msgstr "" +#~ "генерирует образ в заданном формате.\n" +#~ "доступные форматы: %s" + +#~ msgid "cannot open %s" +#~ msgstr "не удалось открыть %s" + +#~ msgid "" +#~ "Usage: %s [OPTIONS]\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Использование: %s [ПАРАМЕТРЫ]\n" +#~ "\n" +#~ "Сообщения об ошибках: <%s>.\n" + +#~ msgid "Unknown key %s\n" +#~ msgstr "Неизвестная клавиша %s\n" + +#~ msgid "Couldn't open input file: %s\n" +#~ msgstr "Не удалось открыть входной файл: %s\n" + +#~ msgid "Couldn't open output file: %s\n" +#~ msgstr "Не удалось открыть выходной файл: %s\n" + +#~ msgid "Your PBKDF2 is grub.pbkdf2.sha512.%d.%s.%s\n" +#~ msgstr "Ваш PBKDF2 — grub.pbkdf2.sha512.%d.%s.%s\n" + +#~ msgid "Make a system path relative to its root." +#~ msgstr "Делает системный путь относительным его корня." + +#~ msgid "No terminator in the core image" +#~ msgstr "В базовом образе нет метки окончания" + +#~ msgid "Use FILE as the device map [default=%s]" +#~ msgstr "Использовать ФАЙЛ в качестве карты устройства [по умолчанию %s]" + +#~ msgid "DEV" +#~ msgstr "УСТР" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "" +#~ "Использовать УСТР в качестве корневого устройства [по умолчанию " +#~ "выполняется определение]" + +#~ msgid "Install even if problems are detected" +#~ msgstr "Установить даже если обнаружены проблемы" + +#~ msgid "cannot open 'vendor' node of `%s'" +#~ msgstr "не удалось открыть узел «vendor» у «%s»" + +#~ msgid "cannot read 'vendor' node of `%s'" +#~ msgstr "не удалось прочитать узел «vendor» у «%s»" + +#~ msgid "cannot open SAS PHY ID `%s'\n" +#~ msgstr "не удалось открыть SAS PHY ID «%s»\n" + +#~ msgid "fflush failed" +#~ msgstr "операция fflush завершилась неудачно" + +#~ msgid "cannot stat %s" +#~ msgstr "не удалось выполнить stat для %s" + +#~ msgid "read failed" +#~ msgstr "чтение завершилось неудачно" + +#~ msgid "write failed" +#~ msgstr "запись завершилась неудачно" + +#~ msgid "do not probe any floppy drive" +#~ msgstr "не проверять дисководы гибких дисков" + +#~ msgid "output file must be given" +#~ msgstr "должен быть указан выходной файл" + +#~ msgid "format must be specified" +#~ msgstr "требуется указать формат" + +#~ msgid "Unload PXE environment." +#~ msgstr "Выгрузить окружение PXE." + +#~ msgid "[DEVICE]" +#~ msgstr "[УСТРОЙСТВО]" + +#~ msgid "open error" +#~ msgstr "ошибка открытия" + +#~ msgid "Must use absolute path.\n" +#~ msgstr "Должен использоваться абсолютный путь.\n" + +#~ msgid "the core image is too small" +#~ msgstr "базовый образ слишком мал" + +#~ msgid "prefix is too long" +#~ msgstr "слишком длинный префикс" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Использование: %s [ПАРАМЕТР]... [МОДУЛИ]\n" +#~ "\n" +#~ "Создаёт загрузочный образ GRUB.\n" +#~ "\n" +#~ " -d, --directory=КАТ использовать образы и модули из КАТалога\n" +#~ " [по умолчанию %s/@platform@]\n" +#~ " -p, --prefix=КАТ задать каталог для grub_prefix [по умолчанию " +#~ "%s]\n" +#~ " -m, --memdisk=ФАЙЛ встроить ФАЙЛ в качестве образа memdisk\n" +#~ " -c, --config=ФАЙЛ встроить ФАЙЛ в качестве загрузочного\n" +#~ " файла настройки\n" +#~ " -n, --note добавить сегмент NOTE для CHRP Open Firmware\n" +#~ " -o, --output=ФАЙЛ записать созданный образ в ФАЙЛ\n" +#~ " [по умолчанию stdout]\n" +#~ " -O, --format=ФОРМАТ сгенерировать образ в указанном ФОРМАТЕ\n" +#~ " доступные форматы: %s\n" +#~ " -C, --compression=(xz|none|auto) алгоритм сжатия\n" +#~ " -h, --help показать эту справку и закончить работу\n" +#~ " -V, --version показать информацию о версии и закончить " +#~ "работу\n" +#~ " -v, --verbose выводить подробные сообщения\n" +#~ "\n" +#~ "Отправляйте сообщения об ошибках по адресу <%s>.\n" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "встраивание невозможно, но оно необходимо, если корневое устройство " +#~ "располагается в RAID-массиве или томе LVM." + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "не удалось вычислить корневое устройство. Укажите его параметром --root-" +#~ "device." + +#~ msgid "[class [handler]]" +#~ msgstr "[класс [обработчик]]" + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "Показать список видеорежимов расширения VESA BIOS." + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "Провести тест поддержки VESA BIOS Extension 2.0+." + +#~ msgid "Set the root device." +#~ msgstr "Задать корневое устройство." + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "Имитировать жёсткий диск с разделами." + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "" +#~ "Попытка установить GRUB на раздел вместо MBR. Лучше этого НЕ ДЕЛАТЬ." + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "" +#~ "если вы всё равно хотите использовать список блоков, укажите --force." diff --git a/po/sl.gmo b/po/sl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..2f57b4b8fa70f63cca52dda3d61d0a416c3b8d1f GIT binary patch literal 98923 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, 2010-2012. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-2.0.0-pre6\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2012-12-11 21:02+0100\n" +"Last-Translator: Andrej Žnidaršič \n" +"Language-Team: Slovenian \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" +"X-Launchpad-Export-Date: 2012-12-03 07:20+0000\n" +"X-Generator: Poedit 1.5.4\n" +"X-Poedit-SourceCharset: utf-8\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "nepodprta hitrost zaporednih vrat" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "nepodprta parnost zaporednih vrat" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "nepodprto število zaustavitvenih bitov zaporednih vrat" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "nepodprta dolžina besede zaporednih vrat" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Ne naloži preglednic gostitelja, navedenih v seznamu z vejico ločenih " +"vrednosti." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" +"Naloži le preglednice gostitelja, navedene v seznamu z vejico ločenih " +"vrednosti." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Izvozi preglednice različice 1 v OS." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Izvozi preglednice različice 2 in 3 v OS." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Nastavi OEMID podatkovnih struktur RSDP, XSDT in RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Nastavi OEMTABLE ID podatkovnih struktur RSDP, XSDT in RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Nastavi predelavo OEMTABLE podatkovnih struktur RSDP, XSDT in RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Nastavi polje ustvarjalca podatkovnih struktur RSDP, XSDT in RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Nastavi predelavo ustvarjalca podatkovnih struktur RSDP, XSDT in RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Ne posodobi polja EBDA. Možnost lahko odpravi napake in zastoje v delovanju " +"na nekaterih sistemih BIOS, vendar jih naredi neučinkovite, ker operacijski " +"sistem ne sprejema podatkov RSDP iz nalagalnika GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "predčasen konec datoteke %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=PREGLEDNICA1,PREGLEDNICA2|--load-only=PREGLEDNICA1," +"PREGLEDNICA2] DATOTEKA1 [DATOTEKA2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Naloži gostiteljeve preglednice ACPI in preglednice navedene z argumenti." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "napaka: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "primanjkuje pomnilnika" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "ni mogoče prebrati `%s': %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Izklop ACPI je spodletel" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Izpiši naprave." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "pričakovano je ime datoteke" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "DATOTEKA" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Izpiši seznam blokov." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "najprej je treba naložiti jedro" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Zaženi operacijski sistem." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +#, fuzzy +msgid "No boot time statistics is available\n" +msgstr "Statistika predpomnjenja diskov ni na voljo.\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Statistika predpomniknka diska: zadetki = %lu (%lu.%02lu%%), zgrešeno = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Statistika predpomnjenja diskov ni na voljo.\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Pridobi podatke o predpomnilniku diska." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Sprejmi končanje vrstic CR/NL v slogu DOS" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Pokaži vsebino datoteke." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "pričakovana sta dva argumenta" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Primerjaj datoteko `%s' z `%s':\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Datoteki se razlikujeta v velikosti: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Datoteki sta različni pri odmiku %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Datoteki sta enaki.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "DATOTEKA1 DATOTEKA2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Primerjaj dve datoteki." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Naloži dodatno datoteko z nastavitvami." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Naloži dodatno datoteko z nastavitvami brez spreminjanja konteksta." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Naloži dodatno nastavitveno datoteko brez spreminjanja vsebine, vzemi pa " +"vnose menija." + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "" +"Naloži dodatno nastavitveno datoteko brez spreminjanja vsebine, vzemi pa " +"vnose menija." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[leto-]mesec-dan] [ura:minuta[:sekunda]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Prikaži/nastavi trenutni datum in čas." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Ne izpisuj sledeče nove vrstice." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Omogoči tolmačenje leve poševnice kot ubežnega znaka." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] NIZ" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Prikaži vrstico besedila." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Popravi težavo z videom." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Prisoten je odtis ROM." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Ni mogoče omogočiti področja ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Ustvari strukture, podobne strukturam BIOS, za povratno združljivost z " +"obstoječim operacijskim sistemom." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_IZPIS [INT10_IZPIS]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Naloži izpis nalagalnika BIOS." + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "NIZ" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Naloži jedro multiboot." + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Naloži jedro multiboot 2." + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "napak" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[MOŽNOSTI] DATOTEKE_PISAVE" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "ni takšnega razdelka" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Novi MBR ja zapisan na `%s'\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "NAPRAVA [RAZDELEK[+/-[VRSTA]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Zapolnite hibridni MBR pogona NAPRAVE GPT. Navedeni razdelki bodo del " +"hibridnega zapisa MBR. Dovoljeni so do 3 razdelki. VRSTA je vrsta MBR. Znak " +"+ pomeni, da je razdelek dejaven. Dejaven je lahko le en razdelek." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Ustavi računalnik. Ukaz ne deluje na vseh izvedbah programske strojne opreme." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Navedite razpršilo za uporabo." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "RAZPRŠILO" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Preveri razpršila datotek z datoteko seznama razpršil DATOTEK:" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Osnovna mapa za seznam razpršil." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "MAPA" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Ne zaustavi po prvi napaki" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Razširi datoteko pred izračunom nadzorne vsote." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: NAPAKA BRANJA\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: NEUJEMANJE RAZPRŠIL\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: v redu\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h RAZPRŠILO [-c DATOTEKA [-p PRIPONA]] [DATOTEKA1 [DATOTEKA2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Izračunaj ali preveri navzorno vsoto razpršila." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c DATOTEKA [-p PREDPONA]] [DATOTEKA1 [DATOTEKA2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Nastavi napredno upravljanje porabe\n" +"(1=nizko, ..., 254=visoko, 255=izključeno)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Prikaz način porabe." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Zamrzni varnostne nastavitve ATA do ponastavitve." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Prikaži stanje zdravja SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Nastavi samodejno akustično upravljanje\n" +"(0 = izklopljeno, 128 = tiho, ..., 254 = hitro)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Nastavi zakasnitev pripravljenosti.\n" +"(0=izklopljeno, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Nastavi pogon v način pripravljenosti." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Nastavi pogon v pripravljenost." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Izpiši identiteto in nastavitve pogona." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Pokaži surovo vsebino odseka ATA IDENTIFY." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Onemogoči/Omogoči SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Ne izpisuj sporočil." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "pričakovan je en argument" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[MOŽNOSTI] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Pridobi/Nastavi parametre diskov ATA." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Uporaba:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[VZOREC ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Prikaži sporočilo pomoči." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Preskoči bajte odmika na začetku datoteke." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Beri le bajte DOLŽINE." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[MOŽNOSTI] DATOTEKA_ALI_NAPRAVA" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Pokaži surovo vsebino datoteke ali pomnilnika." + +#: grub-core/commands/i386/cmosdump.c:58 +#, fuzzy +msgid "Show raw dump of the CMOS contents." +msgstr "Pokaži vsebino pomnilnika." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BAJT:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Preizkusi bit na BAJT:BIT v CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +#, fuzzy +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Počisti bit na BAJT:BIT v CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +#, fuzzy +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Preizkusi bit na BAJT:BIT v CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +#, fuzzy +msgid "List coreboot tables." +msgstr "Izpiše trenutne spremenljivke." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Preveri, ali CPE podpira 64-bitni (dolgi) način (privzeto)." + +#: grub-core/commands/i386/cpuid.c:37 +#, fuzzy +msgid "Check if CPU supports Physical Address Extension." +msgstr "Preveri, ali CPE podpira 64-bitni (dolgi) način (privzeto)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Preveri zmožnosti CPE." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Pokaži trenutne preslikave." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Ponastavi vse preslikave na privzete vrednosti." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Izvedi neposredne in povratne preslikave." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Pogoni niso bili preslikani" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS disk #št ------> naprava GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Uredi preslikave pogona BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Ne uporabljaj APM za ustavljanje računalnika." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Ustavi sistem z uporabo APM, če je mogoče." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "Sistema APM ni mogoče najti" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Različica %u.%u\n" +"32-bitni CS = 0x%x, dolžina = 0x%x, odmik = 0x%x\n" +"16-bitni CS = 0x%x, dolžina = 0x%x\n" +"DS = 0x%x, dolžina = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "32-bitni zaščiten vmesnik je podprt\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bitni zaščiten vmesnik ni podprt\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bitni zaščiten vmesnik je podprt\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bitni zaščiten vmesnik ni podprt\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Nedejavna CPE upočasni delovanje procesorja\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Nedejavna CPE ne upočasni delovanja procesorja\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "Upravljanje APM je onemogočeno.\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "Upravljanje APM je omogočeno.\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM je izklopljen\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "Upravljanje APM je vklopljeno.\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Pokaži podrobnosti APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "pričakovano je ime datoteke oziroma tempo in note" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Neveljaven ukaz %s.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "datoteke`%s' ni bilo mogoče najti" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "neprepoznano število" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "" +"DATOTEKA | TEMPO [VIŠINA_TONA1 TRAJANJE1] [VIŠINA_TONA2 TRAJANJE2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Predvajaj melodijo." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "nastavi način zaklepa številčnice" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "zakleni način zaklepa velikih črk" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "nastavi način zaklepa drsenja" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "nastavi način vstavljanja" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "nastavi način premora" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "pritisnite levo tipko Shift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "pritisnite desno tipko Shift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "pritisnite tipko SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "pritisnite tipko NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "pritisnite tipko CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "pritisnite tipko ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "pritisnite tipko Insert" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "pritisnite levo tipko Alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "pritisnite desno tipko Alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "pritisnite levo tipko Ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "pritisnite desno tipko Ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "ne posodobi stanja LED" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[PRITISKTIPKE1] [[PRITISKTIPKE2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Posnemaj zaporedje pritiska tipk" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Zaženite `go' za nadaljevanje nalagalnika GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Vrni se na poziv IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Shrani vrednost branja v spremenljivko IME_SPREMENLJIVKE." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "IME_SPREMENLJIVKE" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "VRATA" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Preberi 8-bitno vrednost z VRAT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Preberi 16-bitno vrednost z VRAT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Preberi 32-bitno vrednost z VRAT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "VREDNOST VRAT [MASKA]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Zapiši 8-bitno VREDNOST na VRATA." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Zapiši 16-bitno VREDNOST na VRATA." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VREDNOST [MASKA]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Zapiši 32-bitno VREDNOST na VRATA." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "spremenljivka `%s' ni nastavljena" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Naloži razporeditev tipk." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Preverite tipko Shift." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Preverite tipko Control." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Preverite tipko Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Preverite stanje pomožnih tipk" + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "ni mogoče najti ukaza `%s'" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Vnesite geslo: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Razčleni opuščeno nastavitev v enaki vsebini." + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Razčleni opuščeno nastavitev v novi vsebini." + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Razčleni opuščeno nastavitev v enaki vsebini in vzame le vnose menija" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Razčleni opuščeno nastavitev v novi vsebini in vzame le vnose menija" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=VRSTA] DATOTEKA [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simulira ukaz `kernel' grub-legacy" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "DATOTEKA [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simulira ukaz `initrd' grub-legacy" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simulira ukaz `modulenounzip' grub-legacy" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSWD [DATOTEKA]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simulira ukaz `password' grub-legacy" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simulira ukaz `password' grub-legacy v načinu vnosa menijev" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Navedite ime datoteke." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f DATOTEKA] ime_spremenljivke [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Naloži spremenljivke iz okoljske bločne datoteke." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f DATOTEKA]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Izpiši spremenljivke iz okoljske bločne datoteke." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f DATOTEKA] ime_spremenljivke [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Shrani spremenljivke v okoljsko bločno datoteko." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Prikaži dolg seznam s podrobnejšimi podatki." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Izpiši velikosti v človeku berljivi obliki." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Natisni vse datoteke." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Omrežni protokoli:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [DATOTEKA ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Izpiši naprave in datoteke." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Pokaži le preglednice različice 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Pokaži le preglednice različic 2 in 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Pokaži podrobnosti ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "razpoložljivi RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "rezerviran RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "dodeljiv RAM za ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "obstojni pomnilnik RAM za ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "okvarjen RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +#, fuzzy +msgid "RAM holding coreboot tables" +msgstr "strojna programska oprema za RAM" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "strojna programska oprema za RAM" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, dolžina = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "base_addr = 0x%llx, dolžina = 0x%llx, vrsta = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "" +"Navedi preslikavo pomnilnika, zagotovljenega s strani programske strojne " +"opreme." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Izpiši naprave PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Preberi 8-bitno vrednost in NASLOVA." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Preberi 16-bitno vrednost in NASLOVA." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Preberi 32-bitno vrednost in NASLOVA." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Zapiši 8-bitno VREDNOST na NASLOV." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Zapiši 16-bitno VREDNOST na NASLOV." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Zapiši 32-bitno VREDNOST na NASLOV." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Vrsta vnosa menija." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "NIZ" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Seznamov uporabnikov, ki lahko zaženejo ta vnos." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "UPORABNIŠKO_IME[,UPORABNIŠKO_IME]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tipka za hiter zagon tega vnosa." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TIPKA" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Uporabi NIZ kot telo vnosa menija." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Določilo vnosa menija." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Ta vnos lahko zažene katerikoli uporabnik." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Določi vnos menija." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Določi podrejeni meni." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Ime\tSklicno število\tOdvisnosti\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Pokaži to sporočilo." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADDR [VELIKOST]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Pokaži vsebino pomnilnika." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Odstrani modul." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Pokaži naložene module." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Končaj zaganjalnik GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Ni najdene naprave CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "Naprava CS5536 pri %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Prostor V/I nadzornika upravljanja vodila je na 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Številka %d mesta RAM\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Zapisani bajti SPD: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Celotna velikost bliskovnega pogona: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Vrsta pomnilnika: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Del št.: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Vrsta pomnilnika: neznana." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Izpiši podrobnosti o pomnilniku." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s ne podpira vrednosti UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Izvedi UKAZE na razdelku.\n" +"Uporabi `parttool RAZDELEK help' za seznam razpoložljivih ukazov." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VREDNOST" + +#: grub-core/commands/parttool.c:136 +#, fuzzy, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Orodje parttool za %s ni na voljo.\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "neznan argument `%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "RAZDELEK UKAZI" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "UPORABNIŠKO GESLO" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Nastavi uporabniško geslo (običajno besedilo). Nepriporočljivo in nevarno." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "neveljavno geslo PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USER PBKDF2_PASSWORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Nastavi geslo uporabnika (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Izberite napravo po ponudniku in ID naprave." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[ponudnik]:[naprava]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Izberite napravo z njenim položajem na vodilu." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[vodilo]:[mesto][.funk]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "manjka simbol `%c'" + +#: grub-core/commands/pcidump.c:168 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[MOŽNOST] ...[POT|NAPRAVA]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Nastavi spremenljivko na vračanje vrednosti." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Določite gonilnik." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Določi vrsto preslikave razdelkov." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Določi vrsto datotečnega sistema." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Določitev UUID datotečnega sistema." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Določitev oznake datotečnega sistema." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "datotečni sistem `%s' ne podpira oznak" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "NAPRAVA" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Pridobitev podrobnosti o napravi." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[OKOLJSPRE]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Nastavi spremenljivko z vnosom uporabnika." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Znova zaženite računalnik." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Shramba se ujema s sestavnim delom ŠTEVILO v IMENU_SPREMENLJIVKE" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[ŠTEVILO:]IME_SPREMENLJIVKE" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP NIZ" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Preizkusi, ali je REGEXP skladen z NIZEM." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "IME [SPREMENLJIVKA] [NAMIGI]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Išči naprave po datotekah. Če je SPREMENLJIVKA navedena, bo prva najdena " +"naprava nastavljena na spremenljivko." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Išči naprave po oznakah. Če je SPREMENLJIVKA navedena, bo prva najdena " +"naprava nastavljena na spremenljivko." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Poišči naprave po UUID. Če je SPREMENLJIVKA navedena, bo prva najdena " +"naprava nastavljena na spremenljivko." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Poišči naprave po datoteki" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Poišči naprave po oznaki datotečnega sistema." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Poišči naprave po UUID datotečnega sistema." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Nastavi spremenljivko za prvo najdeno napravo." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Ne preizkušaj kateregakoli disketnega pogona." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Najprej preizkusi napravo NAMIG. V primeru, da se NAMIG konča z vejico, " +"preizkusi tudi podrejene razdelke" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "NAMIG" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najprej preizkusi napravo NAMIG, ali se trenutno izvaja na IEEE1275. V " +"primeru, da se NAMIG konča z vejico, preizkusi tudi podrejene razdelke." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najprej preizkusi napravo NAMIG, če se trenutno izvaja na BIOS. V primeru, " +"da se NAMIG konča z vejico, preizkusi tudi podrejene razdelke." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Najprej preizkusi napravo NAMIG, če je podprt neposreden dostop do strojne " +"opreme. V primeru, da se NAMIG konča z vejico, preizkusi tudi podrejene " +"razdelke." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najprej preizkusi napravo NAMIG, če se trenutno izvaja na EFI. V primeru, da " +"se NAMIG konča z vejico, preizkusi tudi podrejene razdelke." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Najprej preizkusi napravo NAMIG, če se izvaja na ARC. V primeru, da se NAMIG " +"konča z vejico, preizkusi tudi podrejene razdelke." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint NAMIG [--hint NAMIG] ...] IME" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Poišči naprave po datoteki, oznaki datotečnega sistema ali UUID datotečnega " +"sistema. Če je določena možnost --set, je prva najdena naprava nastavljena " +"na spremenljivko. V primeru, da ime spremenljivke ni navedeno, je " +"uporabljena `korenska mapa`." + +#: grub-core/commands/setpci.c:132 +#, fuzzy, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x v %d:%d.%d je %x\n" + +#: grub-core/commands/setpci.c:333 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" +"[-s POLOŽAJ] [-d NAPRAVA] [-v SPREMENLJIVKA] [REGISTER][=VREDNOST[:MASKA]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Upravljaj naprave PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Odštevanje s podrobnim izpisom." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Dovoli prekinitev s tipko ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ŠTEVILO_SEKUND" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Počakajte navedeno število sekund." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +#, fuzzy +msgid "assume input is a syslinux configuration file." +msgstr "Predpostavi, da je vhod šifrirana fraza." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +#, fuzzy +msgid "Execute syslinux config in same context" +msgstr "Razčleni opuščeno nastavitev v enaki vsebini." + +#: grub-core/commands/syslinuxcfg.c:195 +#, fuzzy +msgid "Execute syslinux config in new context" +msgstr "Razčleni opuščeno nastavitev v novi vsebini." + +#: grub-core/commands/syslinuxcfg.c:201 +#, fuzzy +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Razčleni opuščeno nastavitev v enaki vsebini in vzame le vnose menija" + +#: grub-core/commands/syslinuxcfg.c:207 +#, fuzzy +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Razčleni opuščeno nastavitev v novi vsebini in vzame le vnose menija" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "ni navedenega terminala" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminala `%s' ni mogoče najti" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Dejavni terminali vnosa:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Razpoložljivi terminali vnosa" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Dejavni terminali izhoda:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Razpoložljivi terminali izhoda:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Izpiše ali izbere vhodni terminal." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Izpiše ali izbere izhodni terminal." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "IZRAZ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Oceni izraz." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "IZRAZ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Naloži isto datoteko na več načinov." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +#, fuzzy +msgid "invalid block size" +msgstr "neporavnana velikost naprave" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, fuzzy, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Pretečeni čas: %d.%03d sekund \n" + +#: grub-core/commands/testspeed.c:92 +#, fuzzy, c-format +msgid "Speed: %s \n" +msgstr "ID naprave: %s\n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "ukaz ni določen" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Pretečeni čas: %d.%03d sekund \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "UKAZ [ARGUMENTI]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Izmeri čas, ki ga uporabi UKAZ" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Ne počni ničesar, uspešno." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Ne počni ničesar, neuspešno." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Preizkusi podporo za USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, fuzzy, c-format +msgid "public key %08x not found" +msgstr "fizičnega nosilca %s ni bilo mogoče najti." + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "modul `%s' ni naložen" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Le besedilo" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Neposredna barva, maska: %d/%d/%d/%d položaj: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Ravninsko" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Ne-verižni način 4" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Enobarvno" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Neznan način videa" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " Nadzorna vsota EDID je neveljavna" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " Različica EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Prednostni način: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Prednostni način ni na voljo\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "Neveljavno določilo načina videa `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Seznam podprtih načinov videa:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Legenda: maska/položaj=rdeče/zeleno/modro/rezervirano" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Vmesnik `%s':\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Podrobnosti niso na voljo" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Začenjanje vmesnika videa je spodletelo" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[WxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Izpiši vse razpoložljive načine videa. V primeru podane ločljivosti so " +"prikazani le načini, ki se z njo ujemajo." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Preizkusi video podsistem v načinu WxH." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Preizkusi video podsistem." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [IME_SPREMENLJIVKE]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Pretvori 64-bitni UUID v zapis, primeren za XNU. Če je -l podan, ga obdrži v " +"pisavi malih črk, kot bi to storil blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "napaka branja odseka 0x%llx od `%s'" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "napaka pisanja odseka 0x%llx na `%s'" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Priklopi po UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Priklopi vse." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Priklopi vse nosilce z nastavljeno zastavico `boot'." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "ni mogoče odpreti `%s': %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "ni mogoče iskati `%s': %s." + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "VIR|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Priklopi šifrirno napravo." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Ni mogoče najti fizičnega nosilca `%s'. Nekateri moduli morda manjkajo iz " +"osnovnega odtisa." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "fizičnega nosilca %s ni bilo mogoče najti." + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "zakasnitev med branjem `%s'" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Ni mogoče naložiti sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Ni mogoče naložiti sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "ni mogoče prebrati metapodatkov ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "napačna čarovnija ali različica ELI" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Poteka poskus odšifriranja glavnega ključa ..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Vnesite šifrirno frazo za %s%s%s (%s):" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Mesto %d je odprto\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "poskus branja ali pisanja zunaj diska `%s'" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "ni mogoče zapisati za CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Lastni gonilniki diska so v uporabi. Zavračanje uporabe vmesnika programske " +"strojne opreme diska." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +#, fuzzy +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "vaš razdelek vstavljanja LDM je premajhen, vstavljanje ne bo mogoče" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "ta LDM nima vstavljenega razdelka, vstavljanje ne bo mogoče" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Izbriši določeni pogon povratne zanke." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] IME_NAPRAVE DATOTEKA ." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Ustvari navidezni pogon iz datoteke." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "selitev 0x%x še ni podprta" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "ni preglednice simbolov" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "ta datoteka ELF ni prave vrste" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Naloži in začni posnemovalnik EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Končaj nalaganje posnemovalnika EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Razloži posnemovalnik EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "simbola `%s' ni bilo mogoče najti" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Naložene pisave:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "DATOTEKA ..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Navedite eno ali več datotek pisav za nalaganje." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Izpiše naložene pisave." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "pregloboko gnezdenje simbolnih povezav" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "poskus branja preko konca datoteke" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"ni mogoče najti zahtevane naprave člana datotečnega sistema več naprav." + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "ni mapa" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "ni običajna datoteka" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"vaša datoteka core.img je nenavadno velika in je ne bo mogoče vstaviti v " +"določeno področje." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "neveljavno ime datoteke `%s'" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "preverjanje potrditvene vsote je spodletelo" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "ključ odšifiranja ni na voljo" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "Potrjevanje veljavnosti MAC je spodletelo" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Predpostavi, da je vhod surov." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Predpostavi, da je vhod šestnajstiški." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Predpostavi, da je vhod šifrirana fraza." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Vnesite geslo ZFS:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [DATOTEKA]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Uvozi ključ ovijanja ZFS shranjen v DATOTEKO." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Navidezna naprava je odstranjena" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Navidezna naprava je pokvarjena" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Navidezna naprava ni povezana" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Navidezna naprava je degradirana" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Navidezna naprava je povezana" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Nepravilna navidezna naprava: ni vrste na voljo" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Navidezna naprava leaf (datoteka ali disk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Pot zagona: ni na voljo\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Pot zagona: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Pot: ni na voljo" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Pot: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "ID naprave: ni na voljo" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "ID naprave: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +#, fuzzy +msgid "Incorrect VDEV" +msgstr "Nepravilno zrcaljenje" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, fuzzy, c-format +msgid "VDEV with %d children\n" +msgstr "Zrcaljenje z %d podrejenimi predmeti\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, fuzzy, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "Število manjšega elementa %d ni pravilno\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, fuzzy, c-format +msgid "VDEV element number %d:\n" +msgstr "Število zrcalnega predmeta %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Neznana vrsta navidezne naprave: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Stanje zaloge vrednosti: dejavno" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Stanje zaloge vrednosti: izvoženo" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Stanje zaloge vrednosti: uničeno" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Stanje zaloge vrednosti: rezervirano za vročo rezervo" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Stanje zaloge vrednosti: naprava ARC stopnje 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Stanje zaloge vrednosti: nezačeto" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Stanje zaloge vrednosti: ni na voljo" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Stanje zaloge vrednosti: potencialno dejavna" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Ime zaloge vrednosti: ni na voljo" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Ime zaloge vrednosti: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID zaloge vrednosti: ni na voljo" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID zaloge vrednosti: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Ni mogoče pridobiti stanja zaloge vrednosti" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Neprepoznano stanje zaloge vrednosti" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Drevo navideznih naprav ni na voljo" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Izpiši podatke ZFS o NAPRAVI." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "DATOTEČNISISTEM [SPREMENLJIVKA]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Izpiši ZFS-BOOTFSOBJ ali ga shrani v SPREMENLJIVKO" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Sedaj povežite oddaljen razhroščevalnik." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Zaženi GDB na danih vratih" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Prelomi v GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Zaustavi nastavek GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "predčasen konec datoteke" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Prevede niz s trenutnimi nastavitvami." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Za zagon izbranega operacijskega sistema pritisnite vnosno tipko, za " +"urejanje ukazov pred zagonom pritisnite tipko `e' , za ukazno vrstico " +"pritisnite `'c'. S pritiskom na ubežno tipko, se pojavi predhodni meni." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Za zagon izbranega operacijskega sistema pritisnite vnosno tipko, za " +"urejanje ukazov pred zagonom pritisnite tipko `e' , za ukazno vrstico pa " +"pritisnite `c'." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "vnesite: boot, `e': možnosti, `c': ukazna vrstica" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Osvetljen vnos bo v %ds samodejno izvršen." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds preostalo." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Zagonski meni GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: vrednost %s je manj ali enaka %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: parameter ARGP_HELP_FMT zahteva vrednost" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: parameter ARGP_HELP_FMT mora biti pozitiven" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: neznan parameter ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Smeti v ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Obvezni ali izbirni argumenti dolgih možnosti so obvezni ali izbirni tudi za " +"morebitne ustrezne kratke možnosti." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " ali:" + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [MOŽNOST ...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Za več podrobnosti poskusite s `%s --help' ali `%s --usage'.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Poročila o hroščih pošljite na %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Neznana sistemska napaka" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "pridobi ta seznam pomoči" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "izpiši kratko sporočilo o uporabi" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "IME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "nastavi ime programa" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SEKUND" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "odloži za SECS sekund (privzeto 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "izpiši različico programa" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(NAPAKA PROGRAMA) Ni znane različice!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: preveč argumentov\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(NAPAKA PROGRAMA) Možnost bi morala biti prepoznana!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, fuzzy, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: možnost '%s' je dvoumna\n" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: možnost '--%s' ne dovoli argumenta\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: možnost '%c%s' ne dovoli argumenta\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: možnost '--%s' zahteva argument.\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: neprepoznana možnost '--%s'\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: neprepoznana možnost '%c%s'\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: neveljavna možnost -- '%c'\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: možnost zahteva argument -- '%c'\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: možnost '-W %s' je dvoumna\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: možnost '-W %s' ne dovoli argumenta\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: možnost '-W %s' zahteva argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Uspešno zaključeno" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Ni zadetkov" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Neveljavni logični izraz" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Neveljaven znak zbiranja" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Neveljavno ime razreda znaka." + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Sledeča povratna poševnica" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Neveljaven povratni sklic" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Neujemajoči [ ali [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Neujemajoči ( ali \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Neujemajoči \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Neveljavna vsebina \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Neveljaven konec obsega" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Pomnilnik je izčrpan" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Neveljaven predhodni logični izraz" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Prehiter konec logičnega izraza" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Logični izraz je predolg" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Neujemajoči ) ali \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "neznana napaka logičnega izraza" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Ni predhodnega logičnega izraza" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Pozdravljen svet" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Recite 'Pozdravljen svet'." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "poskus iskanja izven datoteke" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "nepodprta oblika gzip" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "Datoteka lzop je bila pokvarjena" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "datoteka xz je pokvarjena ali pa so možnosti bloka nepodprte" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "neveljaven okoljsko odvisen ELF magic" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VREDNOST]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Nastavi vrednost okoljske spremenljivke." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Odstrani okoljsko spremenljivko." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Izpiše naprave ali datoteke." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Vstavi modul." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "diska `%s' ni mogoče najti" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "poskus branja ali pisanje izven razdelka" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "neveljavna od arhitekture neodvisna čarovnija ELF" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "število naprav presega omejitev" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "ni mogoče pisati v `%s': %s." + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"vnos `%s' v datoteki device.map je neveljaven, zato bo prezrt. Pred " +"nadaljevanjem je treba popraviti ali izbrisati to datoteko." + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"ime pogona `%s' v datoteki device.map je nepravilno. Namesto tega bo " +"uporabljen %s. Uporabite obliko [hfc]d[0-9]* (Npr. `hd0' or `cd')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "ni mogoče odpreti `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "IME_NAPRAVE" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Nastavi korensko napravo." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "uporabi DATOTEKO kot preslikavo naprave [privzeto=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +#, fuzzy +msgid "use FILE as memdisk" +msgstr "vstavi DATOTEKO kot odtis memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "uporabi datoteke GRUB v mapi DIR [privzeto=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "izpiši podrobna sporočila." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "počakaj dokler se ne pripne razhroščevalnik" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Neznan dodaten argument `%s'." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Posnemovalnik GRUB." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Napaka pri razčlenjevanju argumentov ukazne vrstice\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Zaženi `gdb %s %d' in nastavi ARGS.HOLD na nič.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: opozorilo:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: podrobnosti:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: napaka:" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "odtis strojne programske opreme je prevelik" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "neznani datotečni sistem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Izklop je spodletel" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Končanje je spodletelo" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "zaznana je prekoračitev" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Zavračanje nepravilno gnezdenega razdelka (%s, %s, %s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Neznan ukaz `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Prikaži to pomoč in končaj." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Prikaži uporabo tega ukaza in končaj." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "Manjka obvezna možnost za `%s'" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "Argument `%s' zahteva celo število" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "vrednost je bila dodeljena argumentu `%s', čeprav ne zahteva argumenta" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Izpiši povratno sled." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "Z nalagalnikom GRUB še ni mogoče ustaviti tega računalnika!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "neveljavno določilo barve `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Ponovni zagon je spodletel" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +#, fuzzy +msgid "invalid zImage" +msgstr "Neveljaven obseg pisav" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "Neveljavna naprava `%s'.\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Naloži Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Naloži initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "Naloži odtis XNU." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "najprej je treba naložiti jedro" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, s hipervizorjem Xen" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Naloži jedrni modul NetBSD." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[MOŽNOSTI]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Zaženi v načinu BIOS." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Naloži drugi zagonski nalagalnik." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Prikaži izpis na vseh konzolah." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Uporabi zaporedno konzolo." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Vprašaj po imenu datoteke za ponoven zagon računalnika." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Uporabi nosilec CDROM s skrbniškimi dovoljenji." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Uveljavi usmerjanje po nastavitvah uporabnika." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Vstopi v KDB ob zagonu." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Uporabi GDB oddaljeni razhroščevalnik namesto DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Onemogoči vse izhode zagona." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Čakaj na pritisk tipke po vsaki vrstici izhoda." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Uporabi kodno prevedeno skrbniško napravo." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Zaženi v enojni način." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Zaženi s podrobno izpisanimi sporočili." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Ne zaženi znova, zgolj ustavi." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Spremeni nastavljene naprave." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,HITROST]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Onemogoči SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Onemogoči ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Ne prikazuj zagonskih diagnostičnih sporočil." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Zaženi s sporočili razhroščevanja." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Prepreči običajen izpis (opozorila ostanejo)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[NASLOV|comUNIT][,HITROST]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "ime" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "vrsta" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "naslov" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "velikost" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Zaganjanje v slepem načinu" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Naloži jedro FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Naloži jedro OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Naloži jedro NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Naloži okolje FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Naloži modul jedra FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Naloži jedrni modul NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Naloži jedrni modul NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Naloži modul jedra FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Naloži ramdisk kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Naloži drugo obremenitev coreboot" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Opuščen parameter `ask' ni več podprt." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s je zastarel. Namesto tega pred ukazom linux uporabite set gfxpayload=%s.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s je zastarel. Način VGA %d ni prepoznan. Namesto tega pred ukazom linux " +"uporabite gfxpayload=ŠIRINAxVIŠINA[xGLOBINA].\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] DATOTEKA" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "velikost `%s' je prevelika" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Naloži kernel.sys FreeBSD." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Naloži NTLDR ali BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Prepiši predvideno preslikavo naprav Plan9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "NAPRAVAGRUB=NAPRAVAPLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "ARGUMENTI JEDRA" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Naloži jedro Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Naloži odtis PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +#, fuzzy +msgid "Load Truecrypt ISO." +msgstr "Naloži ključi šifriranja zfs." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "Odstrani modul." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Pritisnite katerokoli tipko za zagon xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Naloži izpis `device-properties'." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Ni mogoče najti gonilnika FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Protokol FPSWA ni mogel najti vmesnika" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Protokola FPSWA ni mogoče najti" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Predelava FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "DATOTEKA [ARGUMENTI ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Prikaži različico FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "OPOZORILO: na bolje ne bo nobena konzola" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Naloži jedro multiboot 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Naloži modul multiboot 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Naloži jedro multiboot." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Naloži modul multiboot." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Način slike ozadja." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "razteg|običajno" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Naloži odtis XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Naloži odtis 64-bitnega XNU." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Naloži paket razširitve XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Naloži razširitev XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "MAPA [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Naloži razširitev mape XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Naloži ramdisk XNU. Na voljo bo kot md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Naloži pozdravno sliko za XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Naloži odtis XNU v mirovanju." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "NASLOV1,MASKA1[,NASLOV2,MASKA2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Določi odseke pomnilnika kot pokvarjene (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "OD[K|M|G] DO[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Odstrani vsa območja pomnilnika v navedenem obsegu." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "pričakovani so štirje argumenti" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "neprepoznani omrežni vmesnik `%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "podatkov DHCP ni mogoče najti" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "možnosti DHCP ni mogoče najti" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "možnosti DHCP %d ni mogoče najti" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "neprepoznana možnost DHCP določila oblike `%s'" + +#: grub-core/net/bootp.c:455 +#, fuzzy +msgid "no network card found" +msgstr "Pokaži omrežne kartice" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "ni mogoče samodejno nastaviti %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KARTICA]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "izvedi samostojno nastavite bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "SPREMENLJIVKA VMESNIK ŠTEVILO OPIS" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"pridobi možnost DHCP in jo shrani v SPREMENLJIVKO. Če SPREMENLJIVKA obstaja, " +"izpiši vrednost." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "ni nastavljenega strežnika DNS" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "sestavni del imena domene je predolg" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "zapisa DNS ni mogoče najti" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "odgovor DNS ni prejet" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +#, fuzzy +msgid "invalid argument" +msgstr "neveljaven parameter %s" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "NASLOV STREŽNIKDNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Izvedi iskanje DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "STREŽNIK_DNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Dodaj strežnik DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Odstrani strežnik DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Izpiši strežnike DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "ni mogoče poslati omrežnega paketa" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "32-bitni zaščiten vmesnik je podprt\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "nepodprt odziv HTTP" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "nepodprta napaka HTTP %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "zakasnitev med odpiranjem `%s'" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "zakasnitev: ni mogoče razrešiti naslova strojne opreme" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "nerazrešljiv naslov %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "neprepoznan omrežni naslov `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "cilj je nedosegljiv" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "zaznana je bila zanka poti" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "naslova ni mogoče najti" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "tega naslova ni mogoče izbrisati" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Nepodprta vrsta naslova strojne opreme %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Nepodprta vrsta naslova %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "pričakovani so trije argumenti" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "kartice ni mogoče najti" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "začasno" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Neznana vrsta naslova %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "ni določenega strežnika" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "zakasnitev med branjem `%s'" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KRATKOIME NASLOV KARTICE [NASLOV_STROJNE_OPREME]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Dodaj omrežni naslov." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KARTICA [NASLOV_STROJNE_OPREME]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Izvajanje samodejne nastavitve IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KRATKOIME" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Izbriši omrežni naslov." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KRATKOIME NET [VMESNIK|gw PREHOD]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Dodaj omrežno pot." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Izbriši omrežno pot." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "Pokaži omrežne poti" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "Pokaži omrežne kartice" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "Pokaži omrežne naslove" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "Povezava je zavrnjena" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "Povezava je zakasnela" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Vnesite uporabniško ime: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[SEZNAMUPORABNIKOV]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Preveri ali je uporabnik na SEZNAMU_UPORABNIKOV." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Mogoči ukazi so:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Mogoče naprave so:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Mogoče datoteke so:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Mogoči razdelki so:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Mogoči argumenti so:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Mogoče stvari so:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Opozorilo: skladenjska napaka (manjkajoča poševnica) v `%s'\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Opozorilo: neveljavna barva ospredja `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Opozorilo: neveljavna barva ozadja `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Izvozi spremenljivke." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "nedelja" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "ponedeljek" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "torek" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "sreda" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "četrtek" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "petek" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "sobota" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "modul ni naložen" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "Različica GNU GRUB %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC kadarkoli konča program." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Podprt je enostaven način urejanja, podoben BASH. Za prvo besedo TABULATOR " +"izpiše mogoča dokončanja ukazov. Povsod drugod TABULATOR našteje mogoča " +"dokončanja naprav ali datotek. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr " >" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub >" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Počisti zaslon." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Vstopi v običajni način." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Zapusti običajni način." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Pritisnite katerokoli tipko za nadaljevanje ..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Zaganjanje ` %s'" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "uporaba zasilne možnosti : `%s'" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Zaganjanje tako privzetih kot povratnih vnosov je spodletelo.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Zaganjanje seznama ukazov" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Podprt je enostaven način urejanja, podoben Emacs. Tipka TAB izpiše možnosti " +"dopolnjevanja. Pritisnite tipki Ctrl-x ali F10 za zagon, Ctrl-c ali F2 za " +"ukazno vrstico ali ESC za zavračanje urejanja in vrnitev v meni GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Uporabite tipki %C in %C za izbiro poudarjenega vnosa." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Razdelek %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Naprava %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Do datotečnega sistema ni mogoč dostop" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Vrsta datotečnega sistema %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr " - Oznaka `%s'" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Čas zadnje spremembe %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Ni zaznanega datotečnega sistema" + +#: grub-core/normal/misc.c:174 +#, fuzzy, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Razdelek se začne na %llu" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Skupna velikost je neznana" + +#: grub-core/normal/misc.c:182 +#, fuzzy, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Skupna velikost %llu odsekov" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--VEČ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "Ni mogoče odpreti datoteke OS `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +#, fuzzy +msgid "no compression is available for your platform" +msgstr "" +"Za vaše okolje namigi niso na voljo. Pričakujte zmanjšano hitrost delovanja." + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Drevesa `device-mapper' ni mogoče ustvariti" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "šifriranega nosilca `%s' ni mogoče priklopiti: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "ni mogoče odpreti geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "stranke geli ni mogoče najti" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "ni mogoče pridobiti UUID geli" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "ni mogoče najti razreda geom `part'" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "neporavnana velikost naprave" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "izvaja se poskus branja odtisa jedra `%s 'iz nalagalnika GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "ponovno se izvaja poskus branja odtisa jedra `%s 'iz nalagalnika GRUB" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "`%s' ni mogoče pravilno prebrati" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "branje ostalih odsekov v datoteki jedra je spodletelo" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "ni mogoče dobiti ukazne vrstice prevajalnika za pot `%s': %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "ukazna vrstica prevajalnika je prazna za pot `%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"prevajalnik `%s' za pot `%s' ima več besed, ki niso možnosti, vsaj `%s' in `" +"%s'" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"prevajalniku `%s' za pot `%s' so podane le možnosti in ni mogoče najti dela " +"naprave" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "seznamov blokiranja ni mogoče pridobiti: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "velikost blokov ni deljiva s 512" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "neveljaven blok okolja" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +#, fuzzy +msgid "can't retrieve blocklists" +msgstr "seznamov blokiranja ni mogoče pridobiti: %s" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "napaka ioctl RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "nepodprta različica RAID: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "napaka ioctl GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "napaka ioctl GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Pretoka iz %s ni mogoče odpreti: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "neznana vrsta naprave RAID `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, fuzzy, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"'obppath' ni bil najden v nadrejenih mapah %s, ni odkrivanja imen IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, fuzzy, c-format +msgid "failed to get canonical path of `%s'" +msgstr "pridobivanje kanonične poti %s je spodletelo" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "neznana vrsta naprave %s\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Uporaba: %s NAPRAVA\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Ni mogoča razvejitev: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Napaka med ustvarjanjem cevi: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "izvorne mape ni mogoče obnoviti" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "ni mogoče stat `%s': %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "datoteke %s ni mogoče preimenovati v %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "izvorne mape ni mogoče obnoviti" + +#: grub-core/osdep/unix/platform.c:77 +#, fuzzy, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"NI mogoče najti poti drevesa naprav IEEE1275 za %s.\\nSpremenljivko `boot-" +"device' bo treba nastaviti ročno.\\n" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, fuzzy, c-format +msgid "%s: not found" +msgstr "%s: ni mogoče najti.\\n" + +#: grub-core/osdep/unix/platform.c:219 +#, fuzzy, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"Spremenljivko `boot-device' bo treba nastaviti ročno. Pri pozivu IEEE1275 " +"vnesite:" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Možnosti `SystemPartition' in `OSLoader' bo treba nastaviti ročno." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "brez `/' v kanoničnem imenu datoteke" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() je spodletel" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +#, fuzzy +msgid "couldn't retrieve random data" +msgstr "naključnih podatkov za sol ni mogoče pridobiti" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +#, fuzzy +msgid "unexpected EFI error" +msgstr "nepričakovan konec datoteke" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"ta razdelek GPT ne vsebuje zagonskega razdelka BIOS. Vstavljanje ne bo " +"mogoče." + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "vaš zagonski razdelek BIOS je premajhen. Vstavljanje ne bo mogoče." + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Odsek %llu je že v uporabi nadzornika raid `%s', zato bo izpuščen. Pošljite " +"zahtevo proizvajalcu, da podatkov ne shranjujejo na mestu zapisa MBR." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Odsek %llu je že v uporabi programa `%s', zato bo izpuščen. Program lahko v " +"prihodnosti povzroči težave z zagonom ali druge težave. Pošljite zahtevo " +"programerjem, da podatkov ne shranjujejo na mestu zagonske sledi. " + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"drugi programi že uporabljajo vstavljeno področje, zato ni dovolj prostora " +"za core.img. Taki programi pogosto poskušajo shraniti programe na način, ki " +"se izogiba zaznavanju. Priporočamo vam, da to raziščete." + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"ta oznaka razdelka v slogu msdos nima oznake za MBR, zato vstavljanje ne bo " +"mogoče." + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"vaše področje vstavljanja je neobičajno majhno, zato datoteke core.img v " +"določeno področje ne bo mogoče vstaviti." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Naredi razdelek dejaven" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "ni osnovni razdelek" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Razdelek %d je zdaj dejaven.\n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Zastavica dejavnosti pogona na %d je počiščena.\n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Spremeni vrsto razdelka" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Nastavi zastavico `skrito' v vrsti razdelkov" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "vrsta razdelka 0x%x ni veljavna" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Nastavljanje vrste razdelkov na 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "ni mogoče zlomiti 0 zank" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "ni v telesu funkcije" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "neveljavno ime spremenljivke `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "nepričakovan konec datoteke" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[ŠTEVILO]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Izhod iz zank" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Nadaljuj zanke" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Zamakni parametre položajev ..." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VREDNOST] ..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Nastavi parametre položajev." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Vrni se iz funkcije." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] DATOTEKA" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Naloži sliko ozadja za dejavni terminal." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "BARVA" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Nastavi barvo ozadja za dejavni terminal." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +#, fuzzy +msgid "Show CBMEM console content." +msgstr "Pokaži vsebino pomnilnika." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Nastavi zaporedno enoto." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Nastavi naslov zaporednih vrat." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Nastavi hitrost zaporednih vrat." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Nastavi dolžino besed zaporednih vrat." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Nastavi parnost zaporednih vrat." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Nastavi zaustavitvene bite zaporednih vrat." + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "Nastavi zaporedno enoto." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "zaporednih vrat `%s' ni mogoče najti" + +#: grub-core/term/serial.c:254 +#, fuzzy +msgid "unsupported serial port flow control" +msgstr "nepodprta dolžina besede zaporednih vrat" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[MOŽNOSTI ...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Nastavitev zaporednih vrat." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "neznana vrsta terminfo `%s'" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "vidno urejen UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Neznano kodiranje" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Trenutne vrste terminfo:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminal je le ASCII [privzeto]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal je logično urejen UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminal je vidno urejen UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminal ima določeno geometrijo." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ŠIRINAxVIŠINA." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "nepravilno določilo mer terminala" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "terminala %s ni mogoče najti ali pa ga ne upravlja terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] IZRAZ [VRSTA]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Nastavi vrsto terminfo IZRAZA v VRSTA.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Izpiši in izvedi argument bloka." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "datoteka bitne slike `%s' je nepodprte vrste" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE info: različica: %d.%d predelava programa OEM: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " skupni pomnilnik: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "ni mogoče najti ustreznega video modula" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "dostop je zavrnjen" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULI" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "predhodno naloži določene module MODULE" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "izberite stiskanje, ki ga želite uporabiti" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "uporabi odtise in module v MAPI [privzeto=%s/]" + +#: include/grub/util/install.h:55 +#, fuzzy, c-format +msgid "use translations under DIR [default=%s]" +msgstr "uporabi odtise in module v MAPI [privzeto=%s/]" + +#: include/grub/util/install.h:58 +#, fuzzy, c-format +msgid "use themes under DIR [default=%s]" +msgstr "uporabi odtise in module v MAPI [privzeto=%s/]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "datoteke %s ni mogoče preimenovati v %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "disk ne obstaja, zato bo uporabljena naprava razdelka %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Ukazi:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Ustvari bločno datoteko praznega okolja." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Izpiše trenutne spremenljivke." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [IME=VREDNOST ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Nastavi spremenljivke." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [IME ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Izbriše spremenljivke" + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Možnosti:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Navesti je treba vsaj en ukaz.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "IMEDATOTEKE UKAZ" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Orodje za urajanje bloka okolja." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "neveljaven blok okolja" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "neveljaven parameter %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "blok okolja je premajhen" + +#: util/grub-fstest.c:107 +#, fuzzy, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "branje diska je spodletelo na odmiki %lld, dolžini %d" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "neveljavna vrednost preskoka %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "napaka branja na odmiku %llu:%s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "Ni mogoče odpreti datoteke OS `%s': %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "Ni mogoče pisati v stdout: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "spodletela primerjava pri odmiku %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Napaka odpiranje datoteke OS %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "ukaz `loopback' je spodletel: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "ukaz `cryptomount' je spodletel: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "UUID ni mogoče pridobiti" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls POT" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Izpiše datoteke v POTI." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp DATOTEKA KRAJEVNO" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopira DATOTEKO v krajevno datoteko KRAJEVNO." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat DATOTEKA" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Kopira DATOTEKO na standardni izhod." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp DATOTEKA KRAJEVNO" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Primerja DATOTEKO s krajevno datoteko KRAJEVNO." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex DATOTEKA" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Pokaže vsebino DATOTEKE v šestnajstiškem zapisu." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc DATOTEKA" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Pridobi nadzorno vsoto crc32 DATOTEKE." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist DATOTEKA" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Pokaže seznam blokov DATOTEKE." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid NAPRAVA" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Izračunaj UUID XNU naprave." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "ŠTEVILO" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Preskoči N bajtov iz izhodne datoteke." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Upravljaj N bajtov v izhodni datoteki." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Določi število vhodnih datotek." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Nastavi spremenljivko razhroščevalnega okolja." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Priklopi šifrirne naprave." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "DATOTEKA|poziv" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Naloži ključi šifriranja zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Razširi podatke." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Neveljavno število diskov.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Število diskov mora biti pred seznamom diskov.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Ni navedenega ukaza.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Ni dovolj parametrov za ukaz.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Neveljaven ukaz %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "POT_ODTISA UKAZI" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Orodje razhroščevanja za gonilnik datotečnega sistema." + +#: util/grub-glue-efi.c:53 +#, fuzzy +msgid "set input filename for 32-bit part." +msgstr "nastavi vhodno ime datoteke. Privzeto je STDIN" + +#: util/grub-glue-efi.c:55 +#, fuzzy +msgid "set input filename for 64-bit part." +msgstr "nastavi vhodno ime datoteke. Privzeto je STDIN" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "nastavi izhodno ime datoteke. Privzeto je STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[MOŽNOSTI]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +#, fuzzy +msgid "Missing input file\n" +msgstr "N vhodnih datotek." + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "ni mogoče odpreti `%s': %s" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "ni mogoče odpreti `%s': %s" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "ni mogoče odpreti `%s': %s" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "ni mogoče iskati `%s': %s." + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage je kodno preveden brez podpore XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Neznana vrsta stiskanja %s" + +#: util/grub-install-common.c:389 +#, fuzzy, c-format +msgid "Unrecognized compression `%s'" +msgstr "Nepoznana možnost `%s'\\n" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "neznana vrsta cilja %s\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "ni mogoče najti ukaza `%s'" + +#: util/grub-install-common.c:914 +#, fuzzy, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s ne obstaja. Določiti je treba argumenta --target ali --directory\\n" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "neveljavno ime datoteke `%s'" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "neznan argument `%s'" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Ali obstaja več kot ena naprava namestitve?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "namesti odtise GRUB v mapi MAPA/%s namesto v mapi %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "CILJ" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, fuzzy, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "namesti GRUB za CILJNO okolje [privzeto=trenutno]" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"naredi pogon zagonljiv tudi kot disketo (privzeto za naprave fdX). Na " +"nekaterih sistemih BIOS se lahko okvari." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "izbriši preslikavo naprave, če že obstaja" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "namesti tudi, kadar so zaznane težave." + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "uporabi datoteko določila tudi, če je UUID na voljo" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"diskovni modul za uporabo (biosdisk ali lastni). Ta možnost je na voljo le " +"na cilju BIOS." + +#: util/grub-install.c:279 +#, fuzzy +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"ne posodobi spremenljivke NVRAM `boot-device'. Ta možnost je na voljo le na " +"ciljih IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "ne zaznaj datotečnih sistemov na NAPRAVI" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +#, fuzzy +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"diskovni modul za uporabo (biosdisk ali lastni). Ta možnost je na voljo le " +"na cilju BIOS." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"namestitvena naprava je odstranljiva. Ta možnost je na voljo le na sistemih " +"EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +#, fuzzy +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "ID zagonskega nalagalnika. Ta možnost je na voljo le na sistemih EFI." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "uporabi MAPO kot korensko mapo razdelka sistema EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +#, fuzzy +msgid "use FILE as font for label" +msgstr "uporabi DATOTEKO kot grub-setup" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +#, fuzzy +msgid "use STRING as product version" +msgstr "Uporabi NIZ kot telo vnosa menija." + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "Uporaba: %s [MOŽNOST] [NAPRAVA_NAMESTITVE]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Namesti GRUB na vaš pogon." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, fuzzy, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "Pogon %s je večkrat določen v preslikavi naprave %s\\n" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" +"Ni mogoče določiti vašega okolja. Uporabiti je treba argument --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "Naprava namestitve ni določena." + +#: util/grub-install.c:1043 +#, fuzzy +msgid "cannot find EFI directory" +msgstr "ni mapa" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "ni mogoče najti naprave za %s (Ali je /dev priklopljen?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "ni mogoče najti pogona GRUB za %s. Preverite datoteko device.map." + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s ni videti kot razdelek EFI.\\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "Napaka med ustvarjanjem cevi: %s" + +#: util/grub-install.c:1461 +#, fuzzy +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"Za vaše okolje namigi niso na voljo. Pričakujte zmanjšano hitrost delovanja." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +#, fuzzy +msgid "the chosen partition is not a PReP partition" +msgstr "Izbrani razdelek ni razdelek PReP." + +#: util/grub-install.c:1772 +#, fuzzy +msgid "failed to copy Grub to the PReP partition" +msgstr "Kopiranje nalagalnika GRUB na razdelek PReP je spodletelo." + +#: util/grub-install.c:1777 +#, fuzzy, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"Razdelek PReP ni prazen. Če ga res želite uporabiti, zaženite ukaz dd za " +"počiščenje:" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "Naprava namestitve ni določena." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "OPOZORILO: za okolje določena namestitev ni izvedena" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Namestitev je končana. Ni poročil o napakah." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Ni določene naprave ali poti.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Uporaba: %s [VHODNA DATOTEKA[IZHODNA DATOTEKA]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Napaka Freetype %d med nalaganjem pismenke 0x%x za U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "(sredinsko)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "(najbolj levo)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "(najbolj desno)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Zamenjava izven obsega (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Iskanje izven obsega: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Nepodprta vrsta zamenjave: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Nepodprto določilo zamenjave: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Nepodprto določilo pokritosti: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "OPOZORILO: nepodprti parametri zmožnosti pisave: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "shrani izhod v DATOTEKO [zahtevano]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "izbor kazala sloga pisave" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "OD-DO[,OD-DO]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "nastavi obseg pisave" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "nastavi ime družine pisave" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "VELIKOST" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "nastavi velikost pisave" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "nastavi zniževanje pisave" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "nastavi zviševanje pisave" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "pretvori v krepko pisavo" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "vsili samodejno glajenje" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "onemogoči glajenje" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "prezri črke bitne slike med nalaganjem" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "Neveljaven obseg pisav" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[MOŽNOSTI] DATOTEKE_PISAVE" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Pretvori pogoste vrste datotek pisav v PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "določena mora biti izhodna datoteka" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType je spodletel" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "ni mogoče odpreti datoteke %s, kazalo %d: napaka %d" + +#: util/grub-mkfont.c:1229 +#, fuzzy, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "ni mogoče nastaviti velikosti pisave %dx%d" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "določitev mape predpon [privzeta=%s]" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "vstavi DATOTEKO kot zgodnjo nastavitveno datoteko" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "dodaj odsek NOTE za CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "shrani ustvarjen odtis v DATOTEKO[privzeto=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "VRSTA" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "ustvari odtis v VRSTI" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "razpoložljive vrste:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "neznana vrsta cilja %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[MOŽNOST] ... [MODULI]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Naredi zagonljiv odtis GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Ciljna oblika ni določena (uporabite možnost -O)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "Ciljna oblika ni določena (uporabite možnost -O)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "nastavi vhodno ime datoteke. Privzeto je STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Neznano določilo preiskovanja tipkovnice %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Neznana koda pritiska tipke 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"NAPAKA: veljavne razporeditve tipkovnice ni bilo mogoče najti. Preverite " +"vhod.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Ustvari razporeditev tipkovnice GRUB iz razporeditve konzole Linux." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "korenska mapa strežnika TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relativna podmapa na omrežnem strežniku" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "Nepodprto okolje $s\\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, fuzzy, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Mapa omrežnega zagona za %s je ustvarjena. Nastaviti je treba strežnik DHCP, " +"ki kaže na %s\\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Število ponovitev PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Dolžina ustvarjenega razpršila" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Dolžina soli" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Ustvari geslo razpršila PBKDF2." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "napaka branja gesla" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Ponovno vnesite geslo:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "gesli se ne ujemata" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "naključnih podatkov za sol ni mogoče pridobiti" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "napaka šifriranja številka %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "Razpršilo PBKDF2 vašega gesla je %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Nobena pot ni določena.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "POT" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Preoblikuj sistemski datotečni sistem v datotečni sistem GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "shrani odtise ROM v MAPI [izbirno]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "uporabi DATOTEKO kot xorriso [izbirno]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Ustvari nosilec CD, disk, ključ USB ali disketni zagonljiv odtis z " +"nalagalnikom GRUB." + +#: util/grub-mkrescue.c:130 +#, fuzzy, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"%s ustvari zagonljiv rešilni odtis z določenimi izvornimi datotekami, " +"izvornimi mapami ali možnosti mkisofs, ki jih izpiše izhod `%s'\\n" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Možnost -- preklopi na lasten način ukazov xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Zahteve po podpori za xorriso pošljite na ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "Uporaba: %s [MOŽNOST] VIR ...\\n" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, fuzzy, c-format +msgid "enabling %s support ..." +msgstr "Omogočanje podpore %s ...\\n" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "Ustvari samostojen odtis (ki vsebuje vse module) v izbrani obliki." + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ODTIS1 [ODTIS2 ...] TOČKA_PRIKLOPA" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "potrebuje odtis in točko priklopa" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "dani argument je sistemska naprava, ne pot" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +#, fuzzy +msgid "print TARGET" +msgstr "CILJ" + +#: util/grub-probe.c:709 +#, fuzzy +msgid "available targets:" +msgstr "razpoložljive vrste:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[MOŽNOST] ...[POT|NAPRAVA]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Napravi poizvedbo o podatkih naprave za dano pot (ali napravo, če je podana " +"možnost -d)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "%s: preveč argumentov\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[POT]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Preveri nastavitveno datoteko skripta GRUB za napake skladnje." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Napaka skladnje v vrstici %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "Uporabi DATOTEKO kot zagonski odtis [privzeto=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "Uporabi DATOTEKO kot odtis jedra [privzeto=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Nobena naprava ni navedena.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Nastavi odtise za zagon iz NAPRAVE.\n" +"\n" +"Tega programa ni priporočljivo zagnati neposredno. Ta se izvede preko ukaza " +"grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "NAPRAVA mora biti naprava OS (na primer /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Neveljavna naprava `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +#, fuzzy +msgid "write output to FILE [default=stdout]." +msgstr "izhod je ustvaril nastavitev v DATOTEKI [privzeto=stdout]" + +#: util/grub-syslinux2cfg.c:148 +#, fuzzy +msgid "Transform syslinux config into GRUB one." +msgstr "Preoblikuj sistemski datotečni sistem v datotečni sistem GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "ni mogoče stisniti odtisa jedra" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "Neznano stiskanje %d\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Program za odpakiranje je prevelik" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "osnovni odtis je prevelik (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "osnovni odtis je prevelik (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "velikost diskboot.img mora biti %u bajtov" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img se ne ujema z znano dobro različico. Nadaljujete na lastno " +"odgovornost." + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "odtis strojne programske opreme je prevelik" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "neveljavna oblika vrstice: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "prvi sektor datoteke jedra ni poravnan z odseki." + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "v datoteki jedra so bili najdeni podatki, ki niso poravnani z odsekom" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "odseki jedra so preveč razdrobljeni" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "velikost `%s' ni %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "velikost `%s' je premajhna" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Izvaja se poskus nameščanja nalagalnika GRUB na disk z več oznakami " +"razdelkov, ali z oznako zagonskega razdelka in datotečnega sistema. To še ni " +"podprto." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"ni mogoče določiti datotečnega sistema %s; varnostnega preverjanja ni mogoče " +"izvesti" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Videti je, da vsebuje %s datotečni sistem %s, za katerega ni znano, ali " +"rezervira prostor za zagon v slogu sistema DOS. Nameščanje nalagalnika GRUB " +"na to mesto lahko povzroči UNIČENJE DATOTEČNEGA SISTEMA, kadar program grub-" +"setup prepiše pomembne podatke (možnost --skip-fs-probe onemogoči to " +"preverjanje, zato možnost uporabljate na lastno odgovornost)." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Videti je, da vsebuje %s preslikavo razdelkov %s, ki, za zagon v slogu " +"sistema DOS, ne rezervira prostora. Nameščanje nalagalnika GRUB na to mesto " +"lahko povzroči UNIČENJE DATOTEČNEGA SISTEMA, kadar program grub-setup " +"prepiše pomembne podatke (možnost --skip-fs-probe onemogoči to preverjanje, " +"zato možnost uporabljate na lastno odgovornost)." + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Videti je, da vsebuje %s preslikavo razdelkov %s in LDM, kar pa ni varna " +"kombinacija. Nameščanje nalagalnika GRUB na to mesto lahko povzroči UNIČENJE " +"DATOTEČNEGA SISTEMA, kadar program grub-setup prepiše pomembne podatke " +"(možnost --skip-fs-probe onemogoči to preverjanje, zato možnost uporabljate " +"na lastno odgovornost)." + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Izvaja se poskus nameščanja nalagalnika GRUB na disk brez razdelkov ali " +"neposredno na razdelek. To je SLABA ideja." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Izvaja se poskus nameščanja nalagalnika GRUB na disk z več oznakami " +"razdelkov. Možnost še ni podprta." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Slog razdelka `%s' ne podpira vstavljanja" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Datotečni sistem `%s' ne podpira vstavljanja" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Vaše področje vstavljanja je nenavadno majhno, zato datoteke core.img v " +"določeno področje ne bo mogoče vstaviti." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "brez zaključnega bita v odtisu jedra" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "neujemanje različice core.img" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "vstavljanje ni mogoče, to pa je zahtevano za namestitev RAID in LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "datotečnega sistema na %s ni mogoče določiti" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "datotečni sistem `%s' ne podpira seznamov blokiranja" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "vstavljanje ni mogoče, to pa je zahtevano za namestitev preko diska" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Vgrajevanje ni mogoče. Nalagalnik GRUB je v tem primeru mogoče namestiti s " +"seznami blokov. Seznami blokov so NEZANESLJIVI, zato je njihova uporaba " +"odsvetovana." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "ne bo nadaljevanja s seznami blokov" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "seznami blokiranja so neveljavni" + +#: util/setup.c:767 +#, fuzzy +msgid "blocklists are incomplete" +msgstr "seznami blokiranja so neveljavni" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Uporaba: %s -o OUTPUT CKBMAP_ARGUMENTI ...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Naredi datoteko razporeditve tipkovnice GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "izpiši to sporočilo in končaj" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "izpiši podatke o različici in končaj" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s ustvari razporeditev tipkovnice za GRUB z uporabo ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Poročila o hroščih pošljite na ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: možnost zahteva argument -- `%s'\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Uporaba: %s [MOŽNOST]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Ustvari nastavitveno datoteko grub" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "izhod je ustvaril nastavitev v DATOTEKI [privzeto=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Nepoznana možnost `%s'\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: ukaz zahteva skrbniška dovoljenja\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: ni mogoče najti.\\n" + +#: util/grub-mkconfig.in:238 +#, fuzzy +msgid "Generating grub configuration file ..." +msgstr "Ustvari nastavitveno datoteko grub" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"V ustvarjeni nastavitveni datoteki GRUB so zaznane napake\n" +" skladnje. Prepričajte se, da v datotekah /etc/default/grub in\n" +"/etc/grub.d/* ni napak ali pa pošljite poročilo o hrošču s pripeto\n" +"datoteko %s." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "končano" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Opozorilo:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Uporaba: %s [MOŽNOST] VNOS_MENIJA\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "Nastavi privzeti vnos zagonskega menija za GRUB le za naslednji zagon." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "pričakuj odtise GRUB v mapi MAPA/%s namesto v mapi %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Ali obstaja več kot en vnos menija?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Vnos menija ni določen." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Nastavi privzeti vnos menija zagona za GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"VNOS_MENIJA je število, naslov predmeta menija ali določilo predmeta menija." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Zahtevan je zaporedni terminal, vendar GRUB_SERIAL_COMMAND ni določen. " +"Uporabljeni bodo privzeti parametri." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Najdena je tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Najdeno je ozadje: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Nepodprta vrsta odtisa" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Najden je GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Najden je modul Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Najdenih je nekaj stvari Hurd, vendar ne dovolj za zagon." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, s Hurd %s (obnovitveni način)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, s Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Za GRUB_DEFAULT ne uporabite starega naslova `%s', uporabite `%s' (za " +"različice pred 2.00) ali `%s' (od različice 2.00 naprej)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Zaganjanje GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Zaganjanje Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Napredne možnosti za %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Nalaganje jedra Illumos ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, s kFreeBSD %s (obnovitveni način)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, s kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Nalaganje jedra FreeBDS %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Najdeno je jedro FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Najdena je mapa jedrnega modula: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, z Linuxom %s (obnovitveni način)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, z Linuxom %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Nalaganje Linuxa %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Nalaganje začetnega ramdiska ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Najden je odtis linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Najden je odtis initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, z jedrom %s (preko %s, obnovitveni način)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, z jedrom %s (preko %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Najdeno je jedro NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (nalagalnik)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (nalagalnik)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Najden je %s na %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bitni)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bitni)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(na %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, s Xen %s in Linux %s (obnovitveni način)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, s Xen %s in Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, s hipervizorjem Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Nalaganje Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hipervizor, različica %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Napredne možnosti za %s (s hipervizorjem Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Najden je %s na %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "grub-mkconfig še ne podpira %s.\\n" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Obseg naslova ni povezan s pomnilnikom RAM" + +#~ msgid "Packed pixel " +#~ msgstr "Pakirane točke" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign na vašem sistemu ni podprt" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Kadar je IMEDATOTEKE `-', je uporabljena privzeta vrednost %s." + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Nepodprta zastavica zamenjave: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Neznana zmožnost pisave gsub 0x%x (%s)\n" + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "shrani le bitne slike ASCII" + +#~ msgid "create width summary file" +#~ msgstr "ustvari datoteko obnove širine" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Možnosti --ascii-bitmaps ne sprejema obsegov (vedno uporablja ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "OPOZORILO: vaš ustvarjalnik naključnosti ni potrjeno varen\n" + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "izpiši modul datotečnega sistema, pogon GRUB, sistemsko napravo, modul " +#~ "preslikave razdelkov, abstrakcijski modul ali UUID kriptografskega " +#~ "vsebnika [privzeto=fs]" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "branje prvega odseka v datoteki jedra je spodletelo" + +#~ msgid "use GRUB images from DIR. Takes precedence over target" +#~ msgstr "uporabi odtise GRUB iz MAPE. Ima prednost pred ciljem" + +#~ msgid "use FILE as grub-mkimage" +#~ msgstr "uporabi DATOTEKO kot grub-mkimage" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "uporabi DATOTEKO kot grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "uporabi DATOTEKO kot grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "NAPRAVA_NAMESTITVE mora biti ime datoteke sistemske naprave." + +#~ msgid "" +#~ "%s copies GRUB images into %s, and uses grub-setup\n" +#~ "to install grub into the boot sector.\\n" +#~ msgstr "" +#~ "%s kopira odtise GRUB na %s in uporabi grub-setup\n" +#~ "za namestitev nalagalnika na zagonski odsek.\\n" + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Ni mogoče pridobiti poti `%s' preko nalagalnika GRUB ob zagonu. " +#~ "Namestitev ni mogoča. Dejanje je preklicano.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Samodejno zaznavanje datotečnega sistema %s je spodletelo.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Poskusite z -recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "V kolikor se bodo težave nadaljevale, pošljite poročilo o hrošču in " +#~ "priložite vsebino ukaza %s na <%s>." + +#~ msgid "`%s' failed.\\n" +#~ msgstr "`%s' je spodletel.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "Ni mogoče najti pogona GRUB za %s; ni mogoče ustvariti vnosa zagonskega " +#~ "upravljalnika EFI.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Poteka ustvarjanje grub.cfg ..." + +#~ msgid "" +#~ "%s copies GRUB images into net_directory/subdir/target_cpu-platform\\n" +#~ msgstr "%s kopira odtise GRUB v omrežna_mapa/podmapa/cliljno_okolje_cpu\\n" + +#~ msgid "Expose v1 tables." +#~ msgstr "Izpostavi preglednice v1." + +#~ msgid "Fake BIOS." +#~ msgstr "Lažni BIOS" + +#~ msgid "Check hash list file." +#~ msgstr "Preveri datoteko seznama razpršil" + +#~ msgid "DIRECTORY" +#~ msgstr "MAPA" + +#~ msgid "Unload PXE environment." +#~ msgstr "Razloži okolje PXE." + +#~ msgid "Read word from PORT." +#~ msgstr "Preberi besedo z VRAT." + +#~ msgid "Read dword from PORT." +#~ msgstr "Preberi dword z VRAT." + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "Zapiši VREDNOST besede na VRATA." + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "Zapiši vrednost dword na VRATA." + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "Read word from ADDR." +#~ msgstr "Preberi besedo iz ADDR." + +#~ msgid "Read dword from ADDR." +#~ msgstr "Preberi dword iz ADDR." + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "Zapiši besedo VREDNOST v ADDR." + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "Zapiši dword VREDNOST v ADDR." + +#~ msgid "Menu entry definition as a string." +#~ msgstr "Določitev vnosa menija kot niz." + +#~ msgid "Variable names to update with matches." +#~ msgstr "Imena spremenljivk za posodobitev z ujemanji." + +#~ msgid "Load XNU hibernate image." +#~ msgstr "Naloži odtis hibernacije XNU." + +#~ msgid "Authenticate users" +#~ msgstr "Overi uporabnike" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 vidno" + +#~ msgid "write error" +#~ msgstr "napaka pisanja" + +#~ msgid "open error" +#~ msgstr "napaka med odpiranjem" + +#~ msgid "seek error" +#~ msgstr "napaka med iskanjem" + +#~ msgid "Hex dump FILE." +#~ msgstr "Hex izpis DATOTEKE." + +#~ msgid "Must use absolute path.\n" +#~ msgstr "Mora uporabiti absolutno pot.\n" + +#~ msgid "the core image is too small" +#~ msgstr "odtis jedra je premajhen" + +#~ msgid "prefix is too long" +#~ msgstr "predpona je predolga" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "Uporaba: %s [MOŽNOST] ... [MODULI]\n" +#~ "\n" +#~ "Naredi zagonljiv odtis GRUBa.\n" +#~ "\n" +#~ " -d, --directory=MAPA uporabi odtise in module v MAPI [privzeto=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=MAPA nastavi mapo grub_prefix [default=%s]\n" +#~ " -m, --memdisk=DATOTEKA vstavi DATOTEKO kot odtis memdisk\n" +#~ " -c, --config=DATOTEKA vstavi DATOTEKO kot možnost zagona\n" +#~ " -n, --note doda segment OPOMBA za Odprto programsko strojno opremo " +#~ "CHRP\n" +#~ " -o, --output=DATOTEKA izhod ustvarjenega odtisa v DATOTEKO " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT ustvari odtis v obliki\n" +#~ " razpoložljivi zapisi:%s\n" +#~ " -C, --compression=(xz|none|auto) izbor stiskanja za uporabo\n" +#~ " -h, --help prikaže to sporočilo pomoči in konča\n" +#~ " -V, --version izpiše podrobnosti različice in konča\n" +#~ " -v, --verbose izpiše podrobna sporočila\n" +#~ "\n" +#~ "Hrošče poročajte na <%s>.\n" + +#~ msgid "cannot open %s" +#~ msgstr "ni mogoče odpreti %s" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "vgrajevanje ni mogoče, vendar je to zahtevano, ko je korenska naprava na " +#~ "polju RAID ali nosilcu LVM." + +#~ msgid "DEV" +#~ msgstr "NAPRAVA" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "Uporabi NAPRAVO kot korensko napravo [privzeto=uganjena]" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "" +#~ "ni mogoče uganiti korenske naprave. Navedite možnost `--root-device\"" diff --git a/po/sr.gmo b/po/sr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8c58a0edc26949abc058e92191206e41ffba9206 GIT binary patch literal 162298 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

    -9A-Fd{jh~HhD0~U3K7Tp(_|mrjNT~Kb z5USr7K($XTRJ)uGr59I1A3hAFU+=?s_&Zd%{$JU3z&NP%7DMU7a;Wm334OQ)_JJQk z<+s<@HheEQ0eLJ;f>luYY=C3otx)ap3G4^kePh!Z4y894a4=i~<-Zn6?=N@$4?y+f zOHk$h!MXSP*2W(JRh~4cc3K3LP95w3&w#DrMyT>%2NU2E&i_Za5AxpM+4kxR6@MgD zKjk_WL6x^2sy-(|wbzY~Pr#+f??Ks-l<#eNYoW@2DeMd%f~wz3Q04v_s-If^VB38F z+#h*5RC&u_dw48VJx+(}pAAs?-whT1MW}ZF4J!T4KiYmtgsNWWr2x`2Y4_Cl< zVGdmIt1a)2vy!kU{AOms(-(Q3fJ0;G3oV&@*e}$j@iz= z2&$Z`pvrR=R6E@R`@yGRU-&8P16#$|aD$-onFW&;MJsv7vE|eY?L*-Kr+rhO^>7NeOE>}Rc?|o45UUc%uQ1$y0j(|P(iZS+VCLD`= zB$WGYQ0adFm0k=Vy{MmiLg~RwI2{&4<#Rb412;p}_bVv9Yth1{(*tT;j)e-J2KR#t z;V8Ju`Cku}-@Q=vc?qf?K8A|-2W$g7x3ug7A41+A%5HoDmEKQK{V{}(b4J1$Q0c6I zO6O##_T30o&qty3=Uu4rxOZ#Ij!@zIK=s3DsB+DQ(zAo1>KTGc|0t;VXG7`7MyPsk zf(rkTlV5Q1drq3qERsP@iW}ZB<`1u(~$6{|%J>w`gy}#Xa5|jYDaM@V9Ra0B&q0;@Q>c3V4P_U*cDC(39p)o1 zfm!fom<0cX8ea)rY&)dF8ORw>>75Fd-W5>cHaqv{q4f4+=)>Qj!u9TI+i4_JeP+SY zFbFk1&V{P?W~lyn3#vc9gX*`qZnpltq1t;A)VMBy3KxOu?~|bP>Sn0+dKPNl`4TGq z?%i#>Ooqy*04jVLRJqqd&5P$j>Ek0%>AwS2?q8tvze^9xDUQWZ>6`?m@7F?we;ukE zKS9~GuKUKA_e3dB^*#(Ly$hl8*#gy`Z#w@UppV?Wr|s_vQ0X2FrPmEm{dEFVK6gQ- z`wC2fzd-fdlwL9B9PVf+_a|UNEc0n^YmX=PjWO%#YN&R)98OR;H~@P6V!Q${5UM>_ zKIg=g&I$rp~lc>6 zw%!Lo^>+lST|AZ=c_He6rtKd}R^WiYK1I~ndCD`_#4W+l$PSx|bi5C-9;Q0?Aolnvhr%03N+(zAM~{x}0Jh4(?(mA<26Ji5ip zgldm0sCZ{O`5h+@8DrD0gE9CY0Vl#W(1&+J^}}mW^Gmm}ww(t+%~RP>cC-S@4qO3M zt}Tx5LxqbOXW17nLY@SruV=x7;3ZJw@;j(@^2b~K&w~nI2YvV))Hwat`S+Y)>pKwl5InahX5UPFaU@N#Dsyyeyf$&nOe%}J6SDmKYbmv3$b1l?5;TkAC zdLQl&+b7%n#=>#PMNs;EE>!zI1=YT>DKTChoCj;*Hh2}Bk{aV}gzv)*a9vuAcN83u z9^)MiFNf;)!82^R8ldLA2Vn+mKQqRBpE?)LLf!;b{y(7nQ!{M%lcC1(t4u!Qdr^jr|gJCxE6;R{*d$<}-%(DKsJN^M>XH&Cd%=buV!%So^ z$8r`-K|B-AgWKWpa73;hKX*adVa2fm+s@)dm+i`vsRDHgNbK%s281F)OCY0SAU1+%!s(dFyje~A;?7C$U)HuHY zD*tPs(t8KW9wyC=@mj(RI0fcH%^N4d5WEO3f*s~ry*&gfowK0ycN-i6e}nOG;CySR zGoi{+34OQ;O7C8PvOldC*!D?<2Ou8}&AbJ>BmV|F!A=Y9_!tP)?=zt0le1wjcq^3N zKLeG1t3_7Nrow9EbD{d9t*i+LlP;x?rm5+xC-|rC1sZjm5 z7%HCzH~?M?WsjbQsqk;8c|Nt$&Oe1v^$WvNxB+UN8Czw`*BxrUnhe!G3tzs zmB*m$#-DI6n0iEvIggqN)gReV>D&Qjw?-dn*T<8f#(4%j1zrd<;P5rJz3N~mmv>Z*_Z66Ov~8DR$5{PZ4b{(=K-s6?p~h9`W39f=f|9RJNdk$M?<@qoPc`ekqx(%vb|A2}&_&7H&Ko#>UD1E=i@kuEC z`xL6(rqakQU^0~bp9y703Zd-KTsIvpP5kgu7?^Q8=%7d?c8UaZp&Q-rB9bQ`4z{wGprq$236l$#~Y#Mn=jx2FyTx) zFI2#d$nV1nxb7@l?r&fo@~E>dkA_;Gy$Ds$lyj_}EQQjq(;Xjx(yK3EFWCFs7_SPB zhgu(92Is<0pyC~Po^6*ZD7$<%lzq9|$!|gFW6b%sf5$@ExeC}9Zh+FyyP^8?9=INU z4Hu)BYc^Q>^5#WWFF%0`@c$9k!Q6{uyc6J~FbC#bV$;76CL=!!RnAVA+V#pb_&o9| zI22}WwED9gO0PFT)#EiNefbm0E+t)N%YQIbyfdK2&3&*1dIf;UkcU!t**9qa{!dSq(Rx+RZ!z)EmS*hhOOZa z*aN=n{C|b_ASYcDW4>eh4Eo3yUTf=jKh%8tHS7;NTxZAqNT_nHfy#F?l%4qoO8+Ka zZ|A3asQTOmHBMfF($jV~SZ2Xl$R|VD!R;^weg$Q3N8M=0(<-QXY=p|^L6{0#-xOnh z7mx+pBX5Fg{|BJ#-KS9f-t}gyN5xR}2*P&oI4He36Ly79K^gfXRJosq$?$imd1LDRw*M<&A@U}8Hf;HTb-xhKM*a}0T}M4= z^=~fJ_zgqN2OFT;`4uPke#pvmp~}AjO21x)vJX8Uw(T(kmLac(D$fT{{v98&oC?)` zhd}lFMbL-e!F^$uN3DMXoQJ#&N>A^C(%bi;=8N`QV!S8e45;zZ@iA+67eURZCqm`F z2`ZmAp~lsy$L;#%P^j^=2CDtff!PWNJHp{lSUoxb#vw0&9bgI6xQIZt?;5D_^D>lO z9`vL=N16-oN4^7&hxJd{@o_y=yuaYd^l!n|81E6}cedI0GM7Ic#!7$iG63#|1B1dvqOCzQ04+nY@?mymmaC zj{GWA_+BsD{HmblzsI1$_jtvf*FnjrLACFbQ04d$2H~OGZU1eDCnC4qVb^PCL)okE zp!#ddt5#kI7a>0jmH+V9Z2ZIFJII@$^zii8?K#kPsCCt%H*7y&2V-fc7ohCQ%WvB8 z+vzP^zGNu9sfMz<=Rl2{m!R4s_HA2^c~JGe1eU^Yq3pr@cWil%hsyU}sC81ickQ|^ z2p1#Y1f|#Q-m`iz9je@6I2hgurMGWG)qmgj?RY4L3b)?zWvKDl>jT@brLYe91~?NA z_|TU75UBQg0IEElKC<)CA#e%u259sEs{RW;w)q_ctC4Sp())g&Sp6)4vd*@K#hk6sPVH7?tm}BBzVK;v?u-Z2CPL+{nE}ex53uP zcQ`%(7a%_Yr@;YV+5QZ`smK>Xjo;Uy>eKscI}fHqg+JcOkHbvlxNmHK6vD3Zhr{57 zQ1;*nD7)0>TdNP5Q1xB`)ozbK*@1!I*?DFxY=Jxxsyx%+NVpnGpKgH9!q?$Kc-{B* zeOAjKY&$Q8YR`>O`EG^k&tIVGJ^e@9j_1SukgtLoUyno0Bi}={SC60UeBi?X@*Efs z?}W13Z$h=xzCYV}Za$QqJ`9e94?yMr1Jt^t|1UQEc~J2WgKCF6p!6&DSF6v3Q1kve zsB+y6Wp_S=(%*#N?EH5q^pVeS@@;TmQbpyu<=f74!6+?9ijI8{7_M z|GtFMi=y_i#tvTu`yzh@r9bUD#CrW}wf>nnxdkIj~bt8-E#;eq9L{!cSo_OzUOa?P{p;_#o^B--a3wzd_mm z4!v!9*{~4#0;qhxg_@U=``CD=Le=Y9D7}9Vs=j^tT791fHGYnVigzDWd$sKsYu5jh zq2yEG5_m66hQ0Q)^;is#Lf#0K&miBXzZfdsIZ*cKF?a~vyML@%Z-k)q@D+F{Y(2n^ zi&aqNcn(V6`VF+{ltR_>EGYNSpz<3%$kyW!sQPb!vge;W_X+Vf|8l7ETnVKgFGJb$ zz4o{EZ5Hf`9D=g%$3p4llTh=MH`w;G4^{tEsQlML_0xS&dj1Af`*s{+^PLUVz9&H0 zhx_3s_!m45-aORy%fw-}U&B!Iz$U1C-f(ii;WqtDD0^}^)I9nSH1;gPmSYZ7J?fy! za{^So?}N(!3pf}iBwD!;s{PM|YL}Kt)_*LlM_vrCfiFPm_39Be{~b{2_Zb;$=A}HS z`Q?15@^6Q#XY43DPHux^Vkj@1h5L`AW6ip1`WS0ZuZHVz_s7P1-@>clx$wMkw)~^V z+xiBe%6SizJ@^zJ3;%!x@Tdt^k6wmzk%v#T^*kD?Umk|i$3I~QIAxMeZx$Sdyb@}D zyw=IDLFrYy$yToxL(K4Xq4e)zsD5lU&4%j(HUA$9W#{jK)8V`DcsSrdTkh+i=8e~(=FJ|{ZGB5% z5%NZ;`n5>5?KKY0Lp}j2-FKnp!B#1@J`cRC^Ckv+Yy?`y<~Br^6SZ>|mF4+x~N*!XFQ%M~}e-_$|~t*KbCw`FM11 zwsp^js$Uq&E^UBo;0sXgS&(D>>!IRb1l6Bgpz`?~YJTsVYncS+$8a7C2jG5go?Tzv z1Jxhx4zlx7E>yo?3w`)1lpg;EHQvYMTm7wteUa~Sdt^T1*I=< zI1Vke=`V+BhjXCnaW7Ol?>o8O94n83(vQVZ13gOCAK^>VF~hDsP_5{Cc{n# z+w=;c#?Nt3{eK&j{%nEL^FLr$IAp1v2c|-etDE3q@NM`2T(r#Avv(lYoNE-qvvI!= zE`?)@V$J)-Goj>QajbVF+yd3E=_S_Q91T_eSD?xf6SV8XiBRLd5?%_gftr72m&STm z!iS*rsJzUEJ0Gf@cEE+ObGcoQRKxYiw?g$_T7?~7??J_%eu%XLVR!-Z;ZWu1RcZC) zASnBFBvd(XhSHnYp~iJwl`U^3RJhe}7Q6v!KKKP{9+**Wxf=FFz6Gj(w!!Z3d#Lin z)!6IkHT&AB za60m-Q0s^1p!Bh8*rpSJ`N(%TxlP2j=fP0=bvac1+tk@~GGGz%32+(w0;)f<>+SeE z4$A&L4mE!NcJ4!#TYWEw({aB6YW#c!yTQRLZ2hJ}?H8_qYL^{wHEh4qt`|;((y!PC zD<2JGkU!-146Y=ulgUE3_>yi!x zT{^KXjFb0*llOsP?k%LBtIXZCA8u@;y-QshFOyHbiz8i%^wzwTm__N_cm)AVpIkM4f zQFATk?@zd$M7Uvut3+OgUpH=@W5u~T|AKoP2fe-6*m%}a1U1Kx@ImE48M zy6)h4CSjf@Y$uuzVc}};YH^QY|jT@%R`w{<3 zaa-on`2)B8dDa?;qYiI0cRv?r1yvr5q;7#x?+``UXem!t&@6sBJ`&i`l z+>hgTD4Y)8#Qzbf>jxLM8owjCb?LoFEbdP@Ke>I$^N0BF;Q3Mf`^k}uY14ZE`C$AO z5N19+s9C&qglXVD1h?zq7u;WQUy6JKVLKB)dfi1jqj100x!uC^D|o(+d-VF2hx?kz zr}MlQ;W58nXP!F|=UmcleznB?HyozIZ}3|RUxEX1V;c2-ci}H5?w82ZkRO4XALF3r zZCzV=)^!(m9ck!l>*DIUFZW2?kH+l*(qgG(F3lU);x@{Ko$cb@qx@_T^9}u<$Xavh zT27c-2!A|oPjlaa+@1Rbo`2@nbvFLj+DFbYu~qoLiCbSdj4$FH6{mgnENhr75%JU@+lmXpUK z>$(iL=vC#?)Ow{S;o4Kyx8cRypA)VX?#aa42IFvRf&as}=W|adZd>k;aev08ozL^* z+|zKMPMAly2RJ|FnT;Gn8qw=cm;V^tb+J@6S6>(A3EV#?%yGDW$@5p-Lr6arIT>yw z{1>=A%B?lv5x70a{TR=6xSh`Z81Z`}|H|`UJYS7JuR0p9KY52guRvf z5ag_8;a(%1XPtZk{^yZEAHqbh1DxMO_y6;T!n9L70JX9&w}B74G4B z{08%UEPm&5*E#o}3EzeMmf*jRTi4&*0hjjKJZs%P$jRM#)|E%R?YRBK^U=h+k^3^_ zN~m?}Z1T8>dldJDgneI;xC)Wy5$+qF#}M`=<7)pT5bizPbZvr16K)@#@4{Wqi;$z& zBpz{Q4%XM!c^*jJxO`J;zTaWwa(Ljzr;C~Q)9pLjWt!t2< zanHvRt{v&st0o>8+Se~E9{V3wR!gCt@8P9jP*AwR*{5s(_2kP<(vl{n~ zxcy+A%-+;YH%}I@KGC{4g=5Ab-qrDq(#5FUK!>mE(TC z%kM&-bq$5bHVgA6{#m#`L;Pn<2<#Kjm*GAOngctKgS-r$1Y?Q6m~<{ht|H6~D&tm{~-Q%s~p_j3D<`5{tb0K1wY1L*LI%2=l<3CSy#pu@?0mZ zQ94{_!&2^^PX2*3dXskoe%Iml4)*paxprn)o_B;30^AC22;<3k%FpTIqlIG5mm z5%(iJzk}Nt(ijPKrQ^O9_d{`uUjN~F5^f=GU6&E&Zx?<6a(86yEf2^4VV*A`{QEBK zGM<;<_aEF}Cr*TW33q2?U5mJDT-dvuTRCz^<4Zik?u*<3zp12kqH_;Beu~@WJnu&v zv~cMhhI~EoGF^I$dCqZugK+yE|L(Yb!gJ82Gn#a+a^YX$`BeOMt%dg?pMl?V+-F*6 z^Y>o-Zg%11a5dqchEKu*?lwFh2`?wi!Q?*$UIjnI{WP9mba6YwWbSd?Dcqf?%hSX= zjQsZD`7WM&5NChnaXb$q%z>~M@-W86Quys~*-!QK3NAGs%SPbJPh&M%ec zc;fVG7IrdW+Tpf0ZfD|u1c`8zEav&e^Z%oUroFlk+&ee+_j2;m)t|E6OPKqu zXwEG4_yPAw+>hWcbbbZIe}H(ikOSOLanHx?3-a!b`#SDim)|B=p5u@QyXTKw{(Hfn za4&*ak;WY7&!acnh1rJNbi&Ma@`*4J|Ce!p%7yRi@>0A{$opUycAsYM2jEvk__fX4 zPDVZ*xtKV!71>>P!yEDY7{879>6%QMzwn&Fy&rN1vxORj)4f!a-yz0{58~1qJ zZs7jVxhcvR+>hhdbph^GJfB3oLr8Zk_jXtI3-LS5#T%$NxR1tPS1IoO;j6fHbZ%E7 z2XWue#Yx0{3vM4c|65$12jLdIh7fiU{`->7cRaV|?uT6C;&j9PRpNaIBSd=GrLn>J zUrzY5aG!&`jr(4nAHr?E3#WW8MouJtXY{KYISF|yT!EXe9mH!-_af%_q+Jq^aUu z#J!Y`;-&%m!W>C>#{I^M>HVY>0$ z6|P1;6~7K7RE}FZ@*OU2G0z*w?>25-wS?cu-5&QptdsXLa!a1~$4%EQ+_l^%Pvky~@LdQSy}DAS5b|q;(G|z@B%b?_MvZfO4!+>hR+t#l z*dO_L30x=OUxeEoF5MfDf5bfrx5Yf4hI=;QQ@Ic0PC@R2UlPx)3AYUS3&LH;^Nrlm z>sB7}@Vf`jBm6mpX?~rIa2syxNv9v-S~&j=xL5F;f!lcE>3SG>G2!ZYPT@Wd_t)SY z?(2B|2LE3P-xWr$i*P@PI9+kr0b4cm`@{t*Ak0~~7dyF(G;}?S`+fFtr@zId)0Q?r z0|p866Rdzs=lV*gqIMg7k6)-dy(D&#E)Jf9zMstwTpjxvozl$+$zFHua)?XLpX)- z@8Gv7>H)vT?NC^W`yp^VvaZvb<#i468%{por8~^Ydz1E~_;Wu~J^}xukneYXxrE)z zJx{>zKAzvktvAo#5-#7xjmP~u;-AMII9M7Chl3@4b*Loh2bKpasscq-K^q`%Cto7huZ*vkS9)4znqOQVEUt{ySNjz; z%L7#vB~ka~!EmG^RHNWYHuwxuC5yTcK`ZJi2)rujFRv&GhWtQDptdd;CN8C^s42xI zS_a(arlcFk$-eJ5C0mk2E&SZ{Y(Ekzty>WY2mNqxx$1_8iWdq`_C0?{Rj{> zARMR;(g1#SeWcDW3i`F72<2HG{4ausgNN2vgo6=3;M4f^(cp7z#(T=ei!X`jroE~I z^hHfsk{3@JwY9-OIHC?J4%O7*L$bJ+(ruB3NL{enUr}CBT<%vyY6jQ&rfv#M{=x9_ zpdYCX6bJoM+9@r!ATd(cP!;rxLZP}O-_NX}U8}0d$)A}&C&jNT57J%5q57&4MX#@_ zql5h!nOW%t3knM9(zNt~!u&a@YBj&2)KpFi>6ZlR0_5+9(1R7>in_XBjbGH@mxb$# z5+lL7`dWWTVq&DSqBgNKl2{uK(Uc_>5k;k5~d-v@@o&i4+C{+ckiz;dYQmp?68{z+bWhe=uHZ`F-KT=;? z8^SKknUl%?4bJg+JkK%*kH!QzV220t+oD^eD$!vyhM!U&c5Xi&tm zU`;R_s3YBgUm0vD3I)O?epLWPtTRK$43GMVMoMvI5eihhxJL0%-I5@7x|p~nN&Xz= zMh0c2D{BJ{RiQx1R00(R8GS*YaaO-l%2zEttzhg010_juyGds5%w%iwF{O4?lS8Pi z20OR=Oy*^#6=tl=NY9*^QMhPjT6$h##*+VDwra)(O6;1Fi6A;|t1B@#r4?mKrltx0 zii)~&Kck*@iC0_i?11H_gpB?MQ*e!07a+^jx_OkS%bw%R$9&LkW;pK>eK(%}o>F;3 zErzfn5(+n!s&Ym+7)&WhBb(hi?m5NEV7Mk&rQ!`)ULix=tggHGC16JX(JYhwjO2n0 zKRdG^JGn45L)|~w&z)_VpProNr|0MA=3BWi6!OuQ1|PkxuMXDKMXdXRP`#a#!u2)Q zfCiX0FzTkSCi|=!m}X7Vnzo})W+mWT60&92Wxb_{iYK zLB&iFT0y5Y7RE+x3`|glLjc=aRv)U5Ownu^sVJ(bV#*9gY#E|~6BGXjDcitJlj@#I zkT{R-_-~ijg>GKtoh#%5{FnLeE&%qWS?ju5?QlPAh}jkBIRa9 zP#$14Q50lsHkDD4Se|JVB>Gu_B1VR4V+58=tXnHeD=>~)!_`$(vrH>Vj2}7L{_*uR zx$zIFc!`PGx%ugdi9FQS7W;Y0g&C_86IV_gZ&o2*A{I!aXHjCYap0lW&&yArkvV_K z5`U3aDx)k$`&!m5@e-^2)qY}_KZ_D0OU#O-B)HrUMOc4SCV5HYyiw!TJ}kCFb<77C zz=|4{e5G16H5$dZe+yM#(=42A_Wvrie+jiyYE$PXXYr~zIW;en39lw`d8mrEWWg0- z;tG@nefrb-(j`@aifXeOYjlj1*VmP39aU=9_+D~aTE6+?lkS{!e^GXF!R#g0Wl=%q z!gTvQDnag}79}YBXd{eXlwjLaPU!^&ep*gJL3;k&bkfVqjxOd{-#aN-Q%3Qe9IR2X z8ilA&^R+hngNR)#%Z9Kl)VdH;!%WRunk^CwTGS)CAT=}7OD--B*48y!&Zg#%$jQ?D z8uWuTCFp-7i9lMY)0wqQ;dE#=^x>Ohrmc{Jc3Sv(pzWm0GC) zbz!yvChv@PotP{=>@4|5veq(YMqIYQsSnSJ$v3@6?=;?+ZL7}|L`!Ygr>a^3;IHBDEP10 z3Xz6pk@LS&j{kodG#1{dxT!YvqTK>b^=g(wz)xX8z+OB+*`r(U-RN|q*RE=v;-!p; zcqy5=1xwTBWas&dGII(?jWo|oyp*im)Y)Fjg2MF4DVc>{N}#y13=P%tv|8px=MG6Y zv#f1gE*qsP4@Alta4fRD6jPP7%zQso>SxR-P)C8`O%*aR^72wqied(YjbH}Vzs8VK zb2eh*NNZJz#3Bk);@gccX~|u7f+Zf75gpvgha^HA57d;QP_8bDUav8X|W>S4k<53FE z;b5RrgE-{ROiS@nS^j&exmmgS{LRiz&PnqZaWYY`#7oVa<7bvondn9*q9vIz@yuVv z)Fl*-YYHV_ZHkxyntKpwZ}540d1R#DMuY=1y~G~mw)`uY^IF)_VaVI zS@}s5Q?bk_hut33>wJnSwSwFmy&BcruVe8|1P-J8WR4SL51g3FVMaJq)!eC|yrOic zFtUoOb1CH_Ba?xWlKKTP38nTF#CB+-PMW1bG#id7l!BY0Bfeb@asCvlDI02(!XHu+ zEDd0HhVCg&UU@@=RZNwS&6iR4(^qoBp>womF^obNql+9g$jH(xEXpg!uy)ByPWNTI z>uYMm70YQ|rbfT4KFA8mZW&yYP}be2!UAaN__6Y|5_O3SGiMpu)l6o#^OvJT;FI@SCj{J{;MqrA<)GO@?gwo~+j)fZ=EY5YK3k{{6nw?t^^(J4RRM}cO z7uhVkelM*Gl=<3Wa`45>W)II;#`DA^6SVfy%;!}hS!h!ZRyE04B;~>wH%;Akp3oBu z{HQO>bvujL2rSQib%D+lHNmKCc6w{_r<&%#+RQ_ZuUh1<12ZNnZ3%dz!3jv16_RE; zjMNL*C7 zATNCh#}3-y*no}iiC6_-hppQ9LxM?VN&X0=5s{JriwqlhX-;xBNoVHkPERe&&0oM9 zse%+%-&MhU`v$3GiPyBzPBRPEx)5t74K$V9z5lU&O2Rq>puO$;M2>07SfX$w$M#a| zn+AVKQJ{o(S}FtQlGPksYsIM1PO^;BGTcp2x2KiQpu^a^E_F+!rFO4-xWZ|>9U!lo zdfK%v%)+kGF;ZV7cezyY0*zp#vGcZg7azAXcJ9U`m~(rXcMTl%xz*mrWS0jRWqOGu z7u$CXR-@p}U7EF&M)e-N%rzHlsEyhfC~=-#s>4?(>sc z4r?_0t3u%fZImksS~4Q~pRaS%om_}v-j(?}2cm>dD#*@j611N-tF!3vccDhu!xx{^ z=KMl`$jA|+)cF;WVn&Y!Nd-!v%~MqaU1Ux-n(8)$LwxgJe92J7sq~8j*gZ3Eu;ZyH zrkLdw7_6zhmaX@P@F$7WJYLYo52a$50gQt2i*wQ0T5>d?m#KPZ66B?J3CVKcqn)G) zRLe^jXQ?n#c8N{a#@W`PJQ%3r7$7=%MLh%d{6`i$xDulqbvMIY>C2dFb=~CUHp|#x zwI1_XBxH5TlrFw2Icfy&7)fmIl%dXY$JeN~k#i7A-% z(TV8Jewsr{TqhZ&=ktNG8a^hdDBh`rjdM*oetw-X70ninyy-HX$17@--mH@Ckw#ib zF~dQno!}oLeO2jIEO~JFN|%=Ee5FDQU?`em2@%TCvg`z-j}l z!x8PC)jfP5!Q`n9!M%u6%IZKRPb`&a_tH{qgbpyx+J?zQ6S>9=`$u{wzaTBoPOy42 zndE6zsnTi^)$)z?zIhSaxI!jK&fK}l`40XfE85x1ym6XL7CM3@E~~_Uya8oWO7iVC zUL(Mqsxn|XXwAOinJeMhs^6!zT`bGL67rP_EKjYk{Z`63yy&NPG2euF@N+gG@aHX%av3`RMo zCc!QUqyWsAOrmpg^3$_2lT)(N&CsUW6=rd)IT7XKD+!&zmrz@_#_DnN=9q;_Nb42m z?;r=fUb;OzVeACM*gRI;dKH2x(sUN7(lJ^PW6WxUgiP2GBrZ+$^9u_`q!t#)U8=T_ zqct7IGL15~I7cctJ1s@Zq~4DPt~d%C(+Wwpb$>Xqoo^W-x|(rACTTipE6>FCzafeniLQ|BZZ_hx@mT7|ZU} zOFAQCrvck2+f6}}|IVGa(tP01Y@w6xTYM+mQ@^V=SXY%TLl%F;yKUvG+QM`LIPNN&0MjOlGn|N9v zEA>&n{*E@!TKxL%bkjJvFN_vpqs*YQS*~V&;pKuiBR8k8fWP^?H23UA2A?`@()|?y zW9rP9p%u)A#u_Pxjo#zA2z-WC;l6!a8RyO5JTtK{cTs|SAU|9d&0d|odgc-z5BucJ zC|sJ!cX3Pg!9XFq0@I-puj#8fGXa@56K;)cn!A)Gg;}v`X^hrkESsXZbJk^cgOJD? zk`>rs=H4J>C8G4!M5a30XL&PN>zmKq?4r_&_S-M{HysDN4`LdZ2PUTM74u10rdkaX zDlOIWL!Z)3_D8OaU+FK3k1R=OdZet{TtuTW{`5f|c@x8hZG3cLZDFv&GR|5Nm>D}* zVpFodS|_tUmQxk)v5LY>HQ6cVy}``9Lc4PC?dFJ`W#i(%aY4%3M=_PUdAT4n+LR1m z->?)9q2SFT$dJ>Zn0V$dZP;YJnJSd6S+@JbSuq6IB=NeDS*7uFG6gdeaFU;^g;WSL z*W~Mtd0hx9#Jfd(gsAD)7@bmc&J#2##jFTYx(`p6I$s$)72WhD##1n8Rpd;^E&$D zW_P|T+1a(xVJ3%M+3e?JQd}7Gb(cNOY36DV5Z#%w+#8dSjk50xcXHNu#GK8TQ=gqY z-1kv72dsXz0u~~rz{)HN~o>{## zendk$#vz4;n4it*hZUo5>hxW%U(St*a$6zPsG1JY3W~SW{cZRro1xUKHJqB4m7Ful zK6^6*;UeunvC2DruB>+QX1ebfZP|8N$LmBcE4sAOZdZ0KsVP=o%IvfmqcL=LnMpw- z<;}bU=KC2fkhCl-WsYcy%D1)V1d{h^l+C<79-@_${gT=2ux-CbhT3Jh7Rgm80LyfH z@Y$Farq?WI&5WL!Heyae$_Tf+v?qzapWL{L8}&7swmq*2O9 zb9rjtK>BPk%nWP4E+OnP9g{|DCeyBOqFoEJfiSxPWok|lXX;QOTs&rUz8Ao%HAkAglP^l@3B`oV6wi7e?NS=EHTEREy(RUlFwR;DukD!@E%yDxv zM-H59)aYiBS|0BpD+GUDC|pHpgW+OxnC)ezd70VC zGxb54q5Y!F&(58bQ<#^l`WWY>d3>W5UC9=BnK=c8$yr%T?O<&@5RM+yn)l>J%e1jd zio;45hicI;J7A4^yB7fQ+MMRPQv%Mv>NHBwL-r9mXg6zsoxY?o{is$mD^mMzGs$BK zAq6t)ZMtPy;@||+w9&H?73H!h&Cb~4%tqUO*1s%VO)iXu%xbfx(ROx4n3b;vgWonsX~ zvxcKBb5c5&#`Ky*j_~XBNtj(lnPUrM?iK@PfQoePpK<}E~vKwRMRt-`8#PaCF zDS51OGPg~njb{OrLbilpM% zOw8t%5@J^tAGY}LMt8R)HRh@*w6Q6ibkyi{HkyPzx>fOc!NAc6pXfDi^cw?(%_kzP zTbo>V8(4=W=8dDBRH7zPF9XOSiQi?u)t6M*(!946}5LfjZa^I|Z)z{?5-`1Q(8dgKo=W|)3erH2xvEKuCwFXMQA zaFbcpkkFSS^hVPPP+_U*WOJ530*hvTvosZL#w7Amb3_qCY=l-2d?#2!=$bMPu<3#5 zuMSGgMBB^*3tZ=A>Cn3A`$9@DhrHBGr}-E*|A{>FLbbwz4@=b*@&0w7p_R*F5?U zcbaxL&MuJg(cqUkb#Cr8mR_+imFp*IW`d25BNvKxZ0w5W^_y(VinsKOV%cq=G-VeJ zF}0$6c15BM;?CcVMzd-jB6?`wWWK`Da=Y^Zyz>qm9uB&N1e^*94@Le(0=obciL_=T5waQ zJYM2XisovISs1Q&Uz}zZIvf<*FSMGr8N2o6$8nW`G8O?QgPmeFb8Ft#3d15x zR)Qgc(b}>q)UWpRBs3M+c%DS^m_;nZJPQk;OEWfXrj8QB)j|! z$tA>`rY~fT21mcE+O3yeZ12X)cIa+A{t-j(+&G;!g);LU6_3VZe5kClVa+}D|ZPOOISxdWbUzqdFSL-ez^AgMa6u`a7 zlA+z*ORdHq3%Q7PKkkIe+}dD`e)$yDVOx$}w%yU-_UBG?v>lhbIJ@MW`%XG!I%{_Y zG;7IS-nyCImyI;1>t;4)BpG$r-eg6f(aii$EaoaUY37skkXD(tn9L)_05e6nlY!`A zh}nik9qmq;Wu6YOqmG(w|Ka2`J=&r>1>dDz{~5U{KqjZF{33d%=xPpgDx)G~d)djU zI&WzDO^tiIke!}0XK8v)A)k;ijq|ldJ@3nSrR6@)sL+pu`JF7Sh&^uZ$ehaYMrnmc z-~UD;(Vtv0x_OtZBULk4RRC>k;@pQJ<~=CSiH)-RZB+EPni{S~73_y3+I`frC1uhy z%L}~pW-l1mn0iwP&UtAxQ(KPd>`#|CGH!auYu^DXbyjEW{lkemJ&0>uK>I_c4YjXb zS?n>7ggM$^n$U_VEy&=pC%kSG!Da#TZ{FlKCZL)YSJj(v)68bAhS&J^J)ah}em3hT z!q{UEE#3n~GE`>Gs{V`4Bys4!%4yD(vI8~R^*ASO@0!O9`h(q$u5qiD)kB zV^QF7+!y@;ILkA0OxWy$eY`p7a>palH5DsF-el^XDC?#J_+mcM1(;sO_dTI-*)$YK zw$zj{H7${sC<$f>o#3mj^f8WI5!%lKWbe(nj+^Y7;xamSe(7xX=ElF-aZuyDqx@Xf z{K`JMlsDO#56}3dtto-VLvnYhPmyahf2ncp+Q~%Jix@hH)eQc;#pi5N1IC{5(Dsdn zRgIx-K;!X`eb2zDygmilHKMkQIy^Ev+6bC#bOYsNm+DTCOr90B_Eqvui~MYU#H?=$ z%^P-Y(RIoceRY;?{^*fhK3Y z%4zliL9+--iWJyaagT`bw}y_X;@2t#8HwhDJq~I)3MgR-ppC;$=jAhK3^hFKc=j`T zot@wpCa0K>fY?%-AB|$EqGvrC`W!)^>(Ddp@d@S$7g*+v&i6_!@I+cFpq9$6AzKzvt39j~1{L#5!a2?1!LwDaUSh znFjV?J_6!%U2{_27%mzGrL|w*S)ZMfWyG1UA+#hW$X0 z_BKXXyTc@(cy3w<$w9hl&k{`x^Yw<_BvZ^_omsL*kB0fYhyG+iVBhKLE1AZRfE#qm zl$Md2M~mneg6dX#n975G4n$(+0FzyTd6mtlgE@TYpqG;jndm>HLEvSaoDn?ar`q4{ zlv2eK$@W!vqiBj|?1Vm#%dbt&NTBLi^q}F@(O-) zzPl4Cl5LzG?D4DKvp1EUd}|V!yO~(WqFdO!U`?pL%>2+0mC{+dI?gqkX(#h7N)0ox zv19ymEn4lE-;;4L#Jp$z*$H&TtirTOa_?1G2H7M3h-d%lnF4dx>9JchdNz=C8^0Xa zHO)+@|A)PI-L~qw4s_Sw;we_zIg}w`Z7#MP2M4Eg!8Rw7paHUz!W2U6EyU60a@b%? z4%M1$#kQ)>AB04SLgpqMCqJ=eVwx=BS6KTM@+9Z`dLLun*4h^&J13P^i6!kd=eYFI z@4b&c#@w04DZsW>=rov(Ad>Q$IOGo_jSl8HZO)vpAdHk~2E^WQg7K{ey;9xe&qC<} z!yUx&0K&}IQH%2WV9r>XzAHf_wCz?9ZQR88P|GzFZ>}|bw<2gWZPuOO5@|-a^I$eWEf?HuC8S1a zWmO=XiJph(yoHqQue{|)t+7sN$f4#~V*b^wQ9eZF4BHJ2r9gy9&;(^+%S&MRWq(IC zdP`V~T`>ZPss?`9d?gfZ{Mjl*vO}35Pf#b{wGYpY4;=aqM-(rs7V}I+WVxFbS#Oht z)P}*xKXS^pT;stV!a3oeohu`=MkJ~IFWV;LOPAg9Jd{_%EJi`68vi_pB_e1DWgBbI z{IZer&8J^_{%G065Tn~%pVR4*P>sURrSYDHUAwkx+5_p)#790MLBDiy`{{0OSZ`I$|F*|)FQq~!Z~IsPf69sZbt9n zGT2)l@3H2j=-A%t3#d2zLlUUqFZi$bx+b;*XRn3Nh-vLLSqp6T8=EYVaC%<|u3zKi zXrtll`n;&HFx{QUMaK*phpibrYgl+V1fiFE{W+cYZ+X_lvYXJ2vpW|!fQ*Hn4HxZP zvEyNWBSK*)gxGTvwa8&7DwH4X-cRo>Y^1t5`pu(<;vN?mG+a!BhO)h3_R3R4W&&nj zE}y)7jw`_4ICr_cgJ9`!q)UJ_HoNTykL(z~%#I#LO$R+hwZUv*XM2VIgP~8QMEAYe z3d0|Lp6V+X&$zMl=@uV~s`L`zbRufObJyBkMjw|5J9lL}FDK6&Jb3h*M-D#oe<`W4 z1(^ldAg5L$mZ3aDafDiGQkz(8 zXAS{n_1a|uO0*j{@hKSUde5K2CT|+gMi0M{KvNmM8Vr3GGQV zCFk$OFl^sOTsqj^>Ah8yrDcuD(l7Ee#|9!d4DI9AcmY6K)>7FQutq#ZDIth7nFA^6X&)`|)oUAnIB%C}Qmxq-I ztUPB44kJ?@sr@k9oLoKd^z$d`{R!ZXV;$ib6Y^!HCu+z^?_1?rl=y%q#BldinI?E1&^E zqD-UchS>UE`1Zl)pA&>1E?qp2Uzm;0hZaYwJdx?T7e<7`M@C1!jj%*S-TXCvmVNWF z66W>t?*H!7e@iQ_2O1qY_|jos zOfE+#e`Rv=%H)+%k@WmeWUr5CKFvcMF&0#N)w_K>*;?611uKleY_s|}IHAjSsaQ4V zwq#4bQ?Elk$&oyc9DbKJl0YshR~nNh8iTlt&7q<#qaz$k#$Z<0p(ZEX6R&!|7l>xj zOs1>~p(E;!MsN!2^0Lo7j|fmR!`FP|T5n2NoGFqG8Wri8Z6%U+M3h*DijXgO&xB>Af?`~^NGL1`eS(3%Om0bs^CIXB zR!T>NL^8LkX0iI|lNVsB4Q5w8p-rObao)^Ft%_`}<+Y0J6j|d^Fb0$4mMkM!P8=S{ ztCxkV540yfiOfh|=TR(JzYniqq}z$(^EzN#=2_JvNOFK$C1YS2?Y)R#rX}Sli@>D> z7op>#PupGMDwcAC)}c71`9dW0F}0VrY}>t$g8vpa}2RI8lBta%57!$kHp)YKAj_o{ViD8F+bV2~RCjW5UzEu&5cHZC_Q+#qDUlhg_n{t}tpoAn1hW%Vgtlez$fCxxxdX2P z(tQc?sI#Bn5rd=?Hm@71=7RT$6g42w-BI06BKc>9-AsS74Y*kjidSC3bdZ>CyruCa zJlwM7Zz*ssTgPhTJd#KDqq%OiYS|3$!PGeJ{*4Q->lTau#XOW50kU!P$J;XJxt%TA z0H^lp=|Ay!iPId@@D=AP0dy6C@6WJN?D-to}` zFYG_~($Vxe~mNdv5=WCu(DD2Q%^?jQ(s9B+$eJeO=@fp0a>R z<8rUHq{o`WsBP&)v#cQ=bAEjG>9fzgz=hb@LSFT-#_fIGI4 zl#DGa?%daD$6@sT``H=Ngn4PHxwG6%DPxuCNW^D#HNErp#F)N`pVt{-*^;NYBhG5` zGHi*Z>geSuw=9NB!TMrCi~SEkn4<^2`L|F+pJ0ua>2vD-<;b087M}^d^7AZL@ia56 z(Z(HV;EL;QA{C3%7+H;2v7=O|9kp?Gz zwdg4)s_*uMoYY@mt~FA%W&cjpBWKF-?U3EFZSZoIOf{txqxr3}c4wnj8C0{Ubnb^| z$c~q|WQ`$fCg6$N$$}l#uDu!^;l};u)I)@#7$KBHL<11o*X1y1o{We#67v}F|iB8goNH@CbkHtrUR z;-{5Ml-6UT*!1L>KJcrQ%Pw6};K0Xefj4)ko76zDF#-3qdk>m8v*|}73*fa3mB^Xwh2(Z$GlQtj+AO7{-MCi) zX!6YWv#oO^zIMS?kZ2xG3*jP{j2@|bUSa_2JAcJRz#a7!#$5NmJtmX&NR$Ckx3PYg zdLRlVzr?;i=7h7h+M|w-i8*YZn$3w3-FtECG4EuGTCH(z(#x4`sGnDPjE+D{69gPs zjzo7k^V1B;u`|OP5aVEbzv8sx6xQc&dI{Sls!iF&Ksb zcOv(&WMt^!ZKmu>SW={U^Jr1NxpWDR40kHye*#WwpA41g zO#`NlE1oBjZ#`BJalA7GEtb!p_A<^1o*p<{9KUq*o0G5gn{d#dTDj#nXWOtN$#KG3 z-DWSItQnfb+rVNZu~?^gjHhRa&oa|}Hu!#}WW3Ak{D6+z=81H*Gb(xf-8VSh5CaTa z`1FlSx$x0ZFzB?&U%6Spl5zEYV?4X;hjLgvRHR6)<}S-#1dd`2Z)4Mr$@#7fGZ_DS znkwi!KK%57=l-*~42SK#IeW(1f_$1YloRiIG|WmsWbRjYvy58mH^W72{mim?x^IO9 zUx>%nl^%EdZHc3=UB1Y@Xm5^=vSZ6XJ6A?W-Ty?=V|%J=SRxh3jPa2lYK^E*FEprnc@1qZKD6385fa{q)O1rvn7{ z=C$q^QC9;hmN+#WzK|d1=(Qk`lG*+X@@Q~h#<1_IOekYxA1U4m=#tOyz$M2bEli;S-@PkC3CRmWm9uY z9b(=urp{--shzIhq^%SMEp4NUY=`&D9?b+r7@}0Ed6=3n)M4jY_fTgbL(Dsce%9bR zjhD`yEzZU^4dM5;(X2j+Dva-K?>sqXn`8f_^W=Mf#}CeymT&6llQ%eJ3Buobn-#i& zI`mcVRgVkWV`y_|+P;hr!dQJ=%w~QbgVhG@+jg(R;?{ixt|kg`p^knf|ock!2MJUYVo#ZCQ%?< z)0ZpfJ<`kVmPj*y96#QBo278a$L;xp-gxCJZO7vw!D^J4tAow9Ax22I-Y|}0w+avC z7}*#7?B||iU(9x8i^`K(ZI$yY=NHLB`C2YOYcEbvti4p8FEMrQG~z9paL5iS%B|dh zhKt63kd)BP!w2G%bT)|XyD-+|&%;|Q zk;7IjY20`e)#RrxZ5hpP#T~ctB6K>PIK;Wk_2uVyTrRkelf7OK4@90S;r2e#A>qU~ zaa+8y)Tw+iuxzhCdxV=E^$&NLZEOB6(PX~bQg-;~w%zjFyb*w{mhzY425jvT8yX}_ z=Ddnc+_`T6M2~$=A6(1%FXSN4=YAL5N1-vEc_DY>V71{SwurOa-L_Q;PO8WS58{A% zLluW1qN1)le&ljMGMyWQ4pluhS03 zOzV_)7FsIzX2vrJM@C$>E?*9+e*irRLAJAIQv7O2fGQoDc7Oz>4AMaxcbkU7?6m9N z49zzmOF?^hX>lb;8Fp!ri%9htzDq3X_X}P;x^vI2UAuNtRKl(Oa0112_1$+!%bnc$ z=baZMm6vL1Nq*%9N@Zcmcjvy#Dvx|un0s!&;k$0XEFGEKZSbn?MZR);Z^HaPA90r?4U=S7AwkK+P z`AE2@he(mcDfKUf_Iml?k>>-mUm}Y4n31`E`hSUi`P}A?_|iutIGVc{318#0kC)F~ z&UkCQ!YPntlHsO6y_J;X9p0GvDjbVaHT@n#)SBdaIZm-%+)gnu%;nQn=yufbtLMM8 zkatYiFF-`dOz3Yp6vg(XjPo)Ix{kSfVb8)}Xz}%W2~VDU!sy`&+RCL;VY4uP#w{KL z01M(#>rVvAvB`w|C#ihCX_eZBi}T#fIq>4s&wGhp{X1{Z8_^!2I<-XeS1!DAJd4G7 zcy{rr zxlg%!NBn0GGb(Bkj`rUq6!j}xj8Mkg><77yO%{)rjTS9jx$NWEghie^UMw`=WnNuC z%U^)H0#xx4QH&E4*R78ehFK>roj-xa<%=W0TjeOfFoRT%>(P{qpgM+aj{`^h$;<#~hr-CritU`Lp9~h8QHv zu4LA0dqdfk@u7o9;)Zdd;T(V5KQ0#5ctfl2kD2kf$p~)h-+%a+-wbBhastMlXohAKxbl26Nz_A$(O;K*M$t&$Wc4jwKy_;g=7oa3-hCN^$3NdXg#(!-3&)0iFkbPG0Q-YA6s~pN;jTm;RcVhY~%Py{mB? zZxn)HzrCub1Uj_9siZbOd?yRXa8dHf-tqF{!fDI&$#nizGoV`mZteN;2bJ>Z3%8FsHLDRQtf7E*<6kdKXDfu8_igeSYoyLZPAgn z9I-p@r4<8y=aBOlh{^hAi2@)$A#WhDBIdsbj%CeL22Ku>8dDYu~Op+|jX+Fr1 zZO|P5g3xU3;qyCn;w6%~tils^?CxB?wBi{iI4!KY=pLQiMC)d!d!{wJcu9S1z2myT zZljf@rPsUjN~mrdQ*jl}$i}tKh|pzj%2Z(;bkiNiCr`7VGHT-(KNi{kg0|#QI7`$% zDwoCY9r5jmb~}$>D@!LNe8zr=Y(#?IY!uO7JdnpX)i4qqC2Aazj%S}Z5E3zjyaN*Z z;gWEUa01~t8IrGsmQTZZvbXbs@8tAfP{SWv&RRX%m7gWk9*H|IJez$J!B9Sqy*_}F z)fc&tJx{HW4))t6WYX|>UxCM7AMZjj`N@}jrs9h%VbBoz2B+n_HhU=_l(d;ackLY4 z8dq)B=@@#BZGg~vh<)etETQgl_(*KpYxvCBn1sUt6qvk06jDAO%wGlSCga)SYV9|j z;f*%7F1|rr6R~aP>Ah7bXdM~Bm@Zc+DjWRB^5tHPNOCz}HsAvTu0rAHt|kZ(7uC%? z4!n5*O>+{bjuvlDX2w11y<{Y6(8uFvp%SfQRJ9U^gtPaH5Fl2qsve+1ji?c9Jg1AAy)`xqU1vETBW6&KB`E}*2UEGVwJ z5z0vRmR%4f5SILbw2q>{s0j&xEQSLTcWA2EMcgOpz(ZIzaPyI7stC2v_*f z?&V7bd`i&7TUtTVyBWCE^#9x&Tu!}q-cL@ZvTu{oKx1qxleGcq=oGa(;k3tnb|Y9v z-@9?Wl_PhS^ z%;T9}bvz3gy+@cu_3!gJq5$iC!W^pDhQ~~7+I?wNau57UO9;+f> z?nYlbUw#Hq{`5=Z7r)~v#+vHEj&F!A{Q`Gy8m&^CU2q3*qsVlorZuusAq1(yDcQnB zwlI!Y>Ruq7ov*g<6tbw?$;>J{3UNaM-6@zr_4+lShUfSl_f{-ZxE8n4v9{8N3g@L| zz70TN22#r~gk)A7L}s(p*Q^Yoq+0)^pYuYpFxZ2)-J&}ftJ&pYb12LCvV9&_Nmiy} zH~iZQA@t&ZC2myrUyMSMz~l4Zu~Zl9y1e|k20C?-$tH>8I!tc;b2R;kLUDS60y+ay z&YrnIHUXi>U&4Lm;xzn;@sV#G*dCn8U0sK%TC3VB5OPVrGpX)dAKOm19f z=vw?H>Eyzx5zYtNBzvqgV!*Z8;f&JoVrsVA%nTB+ba8J?5T~;DR zR7hM={pR>vBT?y)I`D`#oE#X;Ec_ z29D3QkK)xOi`Jsj-+(@zwOK5e)f8i;sWpd&$cN83igIsm@ejeLtp*7MdQ>#84gH({ zT#+1YzcKO}(NK3Dv6Um^+hp5nb?KMC$_*f+*9f8`vp^C~hq&Z2EU)t8ZgIH6ofX{( zs&dN>=UKTF;R`9YyjY~}B8P`V+xVtN^?_m^bdjf_Ye5)=7~@(mxsR{;G_S(X|6+=u z&XVI?z+t*Cb+{PY!+k#2+x#xiK>D`vo9pMUO%nB8z{RXB-)@yPaXCH~FgN9f}ZDR8% z_r!ZtO(j(O6cp-vHl1d)e)A@DQ7E3!WOb0pwcx^^ZpWw@1tc`$)7lh=(;e1vjMN(h zD@o)HQ;u;?YjbzrN}f49#`?VaTj|&J#_1G#t+VbQ9#95HXU>xm7*l6VY0=@Q|Mmn$ zLkBx|T(z&=ubKbWg4Pq?*?-tC4|ckCQ%N0dH;7FmDOe+$vLCUuGU`3{w!Xom_-rlD z*r4+=tK}b3ogWxgwlBvQFft*7fy*pYe7QmIBODAI%kpiLMw94_1j!T zFcD>eD$sJijUAq3GW^sh0`BFV5Q+-T#(E zznJ%^+n9o(wzX^28(4RMh4KFMJ3;4Y+= z*m5(YB4ja5uZ!ej9=(s&!7kp&MXWQ~rY12^+EGju_q;S+0m0qXNO)MZII`TQdS|U? z85Z))h3|ib_XrDreRY%v`bQROqJb`jIC; zBG$XZp69E$VCv$V`rLTgnW0U*c%KoMc!Nj0z_=2@+CGoYz;g`tUEO_n7DKwIc!EIg zle~21G<7^9lB@0k5oVj)&7w8NtL`Huk>SWOWh6!$S19wc$7_$!%r&#o(z=Y-j+Vi* zD_CPV6b@?p2jZx4V`}ihqsU`qX0sIj0jxTo4+qa&YIotaH&-HFDtk9XVd6cRm2^Oq z;N;l=Rbn=6O^pEAbs5?_+?t0p;1{5-||x!vC@o)9h%$mhS-?U27a zJ@P^AV%bhPrIa74t_QSB1j48`QH0AAxC>?mKPo)!87Vs_&t{Odgc`$lbbrN6eR)lt zWhbYyb=TM4=+G_#-AsJ;a<g6MSbF?1B4;XJxbn9+KQK?#b)oaxa5KU!y@&|Jja` zhX6h@>_t|aPhX*e`KBDrqWvN%niu#{a>iX_?9x4+V}_Nr$F*m128JpcxqBkgC`oAX zXQ=^znm%cCnTZqzsOOMKrTRH$&&$Vcw2e6KtncUXxnKN2P|_JAc6nJEJ^_`tLYj*YTTD zNZso^W^Gj#GG!@_4^JUY5bAYhc8M{RYWVQv$|<9T<~OT}5VFJO*YhG0J;ZR?Ef*kY< z)GaKG9HgIJYs@g0gmKTrf&BcM4sDz!)lk-Nv5C<$+*RW>6;$njwNn%ZyP&=4_d9yy zF~kCzb9?&s8pQ!-KGPUgX~Vk8XpvXI3k zB?$feYj{X$S*aOt)S4ULA}o7G`*8@p7v=3=AGhvpmZGznQg<|R)aRe$=1a^M zQNaGDvi(U0IJ>fVex-a@V+dXum>Dlkyw;s-yfy;K&B-dGorH1NQFLomW5}u!VN`bH zVUf&}cOSBO;NEihBlrR5mof6~myEOEawMG=J>kkON+im`J*pF9`#Lg&#VO?}L2@li zI?By8&r36b-rg9u%6K*lPi9I-)P#6m=O z;WKV{L$TXEsLXQ2kq9_=vSifp5w@;;9Z%_1>X&l2 zOt26q8LBzk!!R`#%x&l}(%d*5(J`vaEJJvN%-B5ay62bAW&XUfK%%WaRZ0>f`e#Ef z;Rxs6!f$G|TK$4l7S+iGebcRxcQr79!=GD@r-Y6p(n4RX+n5>}dJgO7vJ}0^7 zj(pRlM*k(NR+luVg(m1?cwPO8f5^m{CIHT4=FFazx?vPP<$=`;OaH4|FZk`FT&$d) zxFv4coSpx;3ws=I8I>Jrwu8F;0;wfppxffY*2UiY(_HCNkl1_P^%f&eR8QgItl0>D z<~FP~UxQ(Ea2K-f3`E&^CsvE2vOfgcx(z$GV~wOWt zP6<2pp4+>HwZ3v{y|I!WXaWa!NV-GVE-ZAW5!P+j@iW$JR}Uj~N~@f%Q*>1lN^Jxs z3TDP@Ppsnbl3C;G8?&*FHT$aYX}s+m)DFv9H(=t73i`2024-uMCp<)x)Z{{L8V`Wl z`Ij|g`i;aNc+&%$+qkqS3ZF20&34TefhKh2g96<8e;L*vmKxKMm@*L^Mz2iN*cK`Wg*Hu-L9|g-L)&*JUk96 z+cz%lM7YnK`+8h8g81!=yEoc)3Nm@d$^LT1#NP4O*xlapH-X5#<8p6z^%+g8g~64P zf`5A;S5{xxa%h=z9m|t%;!1GY#<>geb7kL`zs?mNzS+0!+}7Q@_U+p}{*V80?4P^- zWZ&-HGUE0Jcd4xR&PunYWK%{KRP>2|Ht&<>i?w0XVXVxnmnBTGnD&u z>~C9-r@xV`t3QtM9!x)5w;N+$e#2X(#t!h1A$~OdJ)^=B{C+T=UZ1`{y)k`%98Vwf z^r3IZOz^gF+V9cyx6Juq^`?_&`*$bP2M)bZhK9Kq_yJ(9zU>Um#5(E3xbWO3u@2{F z9Zvr!xbkBba*e-#&EP*{N|(r_pG+S(ZH&44c7MIJ$RP#jr_)C^yf%GzdcF5_@3;?k z@vL}wn+5#bsUENX{pyc%xryapmqvjq;d{ho`QvS?KN|D*Lt)&`PnRQdq|0xB7I=JY ztKWb+mtebpdF%c0^bR1t#UzgeboE9-#_G@b5vUaZ)=Y0*@dM)7=NjWGp)?BmFyced z_v7FenqRIB?>7tuj-gtw*KpKz8@mRegSL|Dw@%A^kl+~Dx-n|N57=Zf{-rm$!oT9!!73P)K#}DFPI0K|Td$953wDRlwrZ$p-U4c6ZY>hdt5haO`fFpFA%^d{>V6_2RDi{~aV$fq_`rcybf0}-TVE*^% z)$#NmKkvoQpZoKDxa}jr@cm66JP;dVE()wLBbP6T*H9}`x~x`|sb7`I!rF<}Px!fw z?&YZWt1DP;%8FwQn}4$UKha@7f~y z{|@;jxg?}^p85}_*?>zzuoR5{%_aXW*rzW+F^?p41Yiu>jBCYL(E?cDrfN^{*96F zVKGU?p!8Mj!_^OSvQw|WV$~57aa~ulf>hNSu^iDU9kj3a7hhzw5 zAbSl^v6DBZclqbm^y(W-q@|1>$KF8oV}|qB@w8V@wwlMQ?{vY`Yyql_W6UDTsL!9A zeLX8zK-q*QpL#W$r+Y=uc=``PN$fg)J}J<(Uf?fFp%T|%FoR688{W?LPB)0&V1H)J z*_WFh_eRju5GzL|#?gANGubA4JUIm8)t@jg0TU>}Rl`gxA%N9E!za^U@az%fy*GV7 z(B8-H-1nOWWfeDvSwGHM8Q35PI_i8%#ST3-Y6=^yPgi1xf54CXC$-D<6L@v+BP+LI z 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 literal 0 HcmV?d00001 diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 000000000..c034d6778 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,6856 @@ +# Serbian translation of grub. +# Copyright (C) 2015 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Мирослав Николић , 2015. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2015-04-25 08:00+0200\n" +"Last-Translator: Мирослав Николић \n" +"Language-Team: Serbian <(nothing)>\n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "неподржана брзина серијског прикључника" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "неподржана парност серијског прикључника" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "неподржан број зауставних битова серијског прикључника" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "неподржана дужина речи серијског прикључника" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Не учитава зарезом раздвојене табеле домаћина наведене на списку." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Учитава само зарезом раздвојене табеле наведене на списку." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Извози табеле издања 1 у ОС." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Извози табеле издања 2 и издања 3 у ОС." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Подешава ОЕМИБ РСДП-а, ИксДТ-а И РСДТ-а." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Подешава ИБ ОЕМТАБЕЛЕ РСДП-а, ИксДТ-а И РСДТ-а." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Подешава ревизију ОЕМТАБЕЛЕ РСДП-а, ИксДТ-а И РСДТ-а." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Подешава поље творца РСДП-а, ИксДТ-а И РСДТ-а." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Подешава ревизију творца РСДП-а, ИксДТ-а И РСДТ-а." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Не освежава ЕБДА. Може да поправи неуспехе или застоје неких БИОС-е али га " +"чини неделотворним са ОС-ом који не прима РСДП са ГРУБ-а." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "прерани крај датотеке „%s“" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=ТЕБЕЛА1,ТЕБЕЛА2|--load-only=ТЕБЕЛА1,ТЕБЕЛА2] ДАТОТЕКА1 " +"[ДАТОТЕКА2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Учитава АЦПИ табеле домаћина и табеле наведене аргументима." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "грешка: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "нема више меморије" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "не могу да прочитам „%s“: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "није успело искључивање АЦПИ-ја" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Исписује уређаје." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "очекиван је назив датотеке" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ДАТОТЕКА" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Исписује списак блокова." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "прво треба да учитате језгро" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Подиже оперативни систем." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Није доступна статистика времена подизања\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Приказује статистику времена подизања." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Статистика оставе диска: покушаја = %lu (%lu.%02lu%%), промашаја = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Није доступна статистика оставе диска\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Добавља податке оставе диска." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Прихвата свршетке ЦР/НЛ линије у стилу ДОС-а." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Приказује садржај датотеке." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "очекивана су два аргумента" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Упоређујем датотеку „%s“ са „%s“:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Датотеке се разликују у величини: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Датотеке се разликују на померају %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Датотеке су истоветне.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ДАТОТЕКА1 ДАТОТЕКА2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Упоређује две датотеке." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Учитава другу датотеку подешавања." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Учитава другу датотеку подешавања без промене контекста." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Учитава другу датотеку подешавања без промене контекста али узима само уносе " +"изборника." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Учитава другу датотеку подешавања али узима само уносе изборника." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[година-]месец-дан] [сат:минут[:секунд]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Приказује/подешава текући датум и време." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Не исписује пратећи нови ред." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Укључује тумачење завршетака повратнице." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] НИСКА" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Приказује ред текста." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Поново подиже у изборник подешавања уграђеног програма." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Поправља проблем са видеом." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "РОМ слика је присутна." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Не могу да укључим област РОМ-а." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Прави структуре налик БИОС-у за повратном сагласношћу са постојећим ОС-ом." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "ИЗБАЧАЈ_БИОСА [ИНТ10_ИЗБАЧАЈ]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Учитава избачај БИОС-а." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "НИСКА ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Процењује аргументе као наредбе ГРУБ-а" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Проверава да ли ДАТОТЕКА може бити подигнута као i386 ПАЕ Иксен " +"непривилеговано језгро госта" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Проверава да ли ДАТОТЕКА може бити подигнута као x86_64 Иксен " +"непривилеговано језгро госта" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Проверава да ли ДАТОТЕКА може бити коришћена као Иксен x86 привилеговано " +"језгро госта" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" +"Проверава да ли ДАТОТЕКА може бити коришћена као x86 вишеподизно језгро" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" +"Проверава да ли ДАТОТЕКА може бити коришћена као x86 вишеподизно2 језгро" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Проверава да ли је ДАТОТЕКА АРМ Линукс" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Проверава да ли је ДАТОТЕКА АРМ64 Линукс" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Проверава да ли је ДАТОТЕКА ИА64 Линукс" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Проверава да ли је ДАТОТЕКА МИПС Линукс" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Проверава да ли је ДАТОТЕКА МИПСЕЛ Линукс" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Проверава да ли је ДАТОТЕКА СПАРК64 Линукс" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Проверава да ли је ДАТОТЕКА ПАУЕРПЦ Линукс" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Проверава да ли је ДАТОТЕКА х86 Линукс" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Проверава да ли је ДАТОТЕКА x86 Линукс који подржава 32-битни протокол" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Проверава да ли је ДАТОТЕКА х86 кФриБСД" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Проверава да ли је ДАТОТЕКА i386 кФриБСД" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Проверава да ли је ДАТОТЕКА х86_64 кФриБСД" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Проверава да ли је ДАТОТЕКА х86 кНетБСД" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Проверава да ли је ДАТОТЕКА i386 кНетБСД" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Проверава да ли је ДАТОТЕКА х86_64 кНетБСД" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Проверава да ли је ДАТОТЕКА i386 ЕФИ датотека" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Проверава да ли је ДАТОТЕКА х86_64 ЕФИ датотека" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Проверава да ли је ДАТОТЕКА ИА64 датотека" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Проверава да ли је ДАТОТЕКА АРМ64 датотека" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Проверава да ли је ДАТОТЕКА АРМ ЕФИ датотека" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Проверава да ли је ДАТОТЕКА „hiberfil.sys“ у тамрзнутом стању" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Проверава да ли је ДАТОТЕКА x86_64 ИксНУ (Икс језгро Мек ОС-а)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Проверава да ли је ДАТОТЕКА i386 ИксНУ (Икс језгро Мек ОС-а)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Проверава да ли је ДАТОТЕКА ИксНУ (Икс језгро Мек ОС-а) замрзнута слика" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Проверава да ли је ДАТОТЕКА подизни одељак БИОС-а" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "нетачно" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "ОПЦИЈЕ ДАТОТЕКА" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Проерава да ли је ДАТОТЕКА наведене врсте." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "нема такве партиције" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Нови ГЗП је записан у „%s“\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "УРЕЂАЈ [ПАРТИЦИЈА[+/-[ВРСТА]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Попуњава хибридни ГЗП ГПТ диска УРЕЂАЈ. Наведене партиције биће део " +"хибридног ГЗП-а. Дозвољено је до 3 партиције. ВРСТА је ГЗП врста. + значи да " +"је партиција активна. Само једна партиција може бити активна." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Зауставља рачунар. Ова наредба не ради на свим применама уграђеног програма." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Наводи хеш за коришћење." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "ХЕШ" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Проверава хеш датотека ДАТОТЕКОМ списка хеша." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Основни директоријум за списак хеша." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "ДИР" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Не стаје након прве грешке." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Распакује датотеку пре провере суме." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ГРЕШКА ЧИТАЊА\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: ХЕШ НЕ_ОДГОВАРА\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: У РЕДУ\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h ХЕШ [-c ДАТОТЕКА [-p ПРЕФИКС]] [ДАТОТЕКА1 [ДАТОТЕКА2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Израчунава или проверава суму провере хеша." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c ДАТОТЕКА [-p ПРЕФИКС]] [ДАТОТЕКА1 [ДАТОТЕКА2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Подешава напредно управљање напајањем\n" +"(1=ниско, ..., 254=високо, 255=искључено)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Приказује режим напајања." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Замрзава подешавања АТА безбедности све до повраћаја." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Приказује СМАРТ стање исправности." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Подешава самостално акустичко управљање\n" +"(0=искљ., 128=тихо, ..., 254=брзо)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Подешава временски рок приправности\n" +"(0=искљ., 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Поставља диск у режим приправности." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Поставља диск у режим спавања." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Исписује идентитет диска и подешавања." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Приказује сирови садржај одељка „ATA IDENTIFY“." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Искључује/укључује СМАРТ (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Не исписује поруке." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "очекиван је један аргумент" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[ОПЦИЈЕ] ДИСК" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Добавља/поставља параметре АТА диска." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Употреба:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ШАБЛОН ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Приказује поруку помоћи." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Прескаче битове помераја од почетка датотеке." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Чита само битове ДУЖИНЕ." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[ОПЦИЈЕ] ДАТОТЕКА_ИЛИ_УРЕЂАЈ" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Приказује сирови садржај датотеке или меморије." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Приказује сирови избачај ЦМОС садржаја." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "БАЈТ:БИТ" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Проверава бит на БАЈТУ:БИТУ у ЦМОС-у." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Чисти бит на БАЈТУ:БИТУ у ЦМОС-у." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Подешава бит на БАЈТУ:БИТУ у ЦМОС-у." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Приказује статистику времена подизања подизања језгра." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Наводи табеле подизања језгра." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Проверава да ли процесор подржава 64-битни (дуги) режим (основно)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Проверава да ли процесор подржава проширење физичке адресе." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Проверава функције процесора." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Приказује текуће мапирање." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Враћа сва мапирања на основне вредности." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Обавља и директно и обратно мапирање." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Ниједан диск није поново мапиран" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "ОС диск #бр. ——————> ГРУБ/БИОС уређај" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] грубдев осдиск." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Управља мапирањима диска БИОС-а." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Не користи АПМ да заустави рачунар." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Зауставља систем, ако је могуће користећи АПМ." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "нисам нашао АПМ" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Издање %u.%u\n" +"32-бита ЦС = 0x%x, дужина = 0x%x, померај = 0x%x\n" +"16-бита ЦС = 0x%x, дужина = 0x%x\n" +"ДС = 0x%x, дужина = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Сучеље заштићено са 16 бита је подржано\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Сучеље заштићено са 16 бита није подржано\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Сучеље заштићено са 32 бита је подржано\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Сучеље заштићено са 32 бита није подржано\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Мировање процесора успорава процесор\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Мировање процесора не успорава процесор\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "АПМ је искључен\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "АПМ је укључен\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "АПМ је ископчан\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "АПМ је укопчан\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Приказује АПМ податке." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "очекиван је назив датотеке или темпо и ноте" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Неисправн наредба „%s“.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "нисам нашао датотеку „%s“" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "непознат број" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "ДАТОТЕКА | ТЕМПО [ВРХУНАЦ1 ТРАЈАЊЕ1] [ВРХУНАЦ2 ТРАЈАЊЕ2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Пушта мелодију." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "поставља режим закључавања броја" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "поставља режим закључавања великих слова" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "поставља режим закључавања клизања" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "поставља режим уметања" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "поставља режим паузе" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "притисните леви помак" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "притисните десни помак" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "притисните „SysRq“" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "притисните тастер за закључавање бројева" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "притисните тастер за закључавање великих слова" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "притисните тастер за закључавање клизања" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "притисните тастер „Уметни“" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "притисните леви алт" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "притисните десни алт" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "притисните леви ктрл" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "притисните десни ктрл" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "не освежава стање ЛЕД-а" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[ПРИТИСАКТАСТЕРА1] [ПРИТИСАКТАСТЕРА2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Опонаша низ притисака тастера" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Покреће „go“ да настави са ГРУБ-ом." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Враћа се на ИЕЕЕ1275 упит." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Чува вредност читања у променљивој НАЗИВПРОМ." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "НАЗИВПРОМЕНЉИВЕ" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "ПРИКЉУЧНИК" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Чита 8-битну вредност са ПРИКЉУЧНИКА." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Чита 16-битну вредност са ПРИКЉУЧНИКА." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Чита 32-битну вредност са ПРИКЉУЧНИКА." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ПРИКЉУЧНИК ВРЕДНОСТ [МАСКА]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Пише 8-битну ВРЕДНОСТ на ПРИКЉУЧНИК." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Пише 16-битну ВРЕДНОСТ на ПРИКЉУЧНИК." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "АДРЕСА ВРЕДНОСТ [МАСКА]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Пише 32-битну ВРЕДНОСТ на ПРИКЉУЧНИК." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "није подешена променљива „%s“" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Учитава распоред тастатуре." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Проверава тастер „Помак“." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Проверава тастер „Контрол“." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Проверава тастер „Алт“." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Проверава стање тастера измењивача." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "не могу наћи наредбу „%s“" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Унесите лозинку: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Обрађује старо подешавање у истом контексту" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Обрађује старо подешавање у новом контексту" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Обрађује старо подешавање у истом контексту узимајући само уносе изборника" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Обрађује старо подешавање у новом контексту узимајући само уносе изборника" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=ВРСТА] ДАТОТЕКА [АРГ ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Симулира наредбу „kernel“ старог груба" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ДАТОТЕКА [АРГ ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Симулира наредбу „initrd“ старог груба" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Симулира наредбу „modulenounzip“ старог груба" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] ЛОЗИНКА [ДАТОТЕКА]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Симулира наредбу „password“ старог груба" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Симулира наредбу „password“ старог груба у режиму уноса изборника" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Наводи назив датотеке." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Прескаче проверу потписа датотеке окружења." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "" +"[-f ДАТОТЕКА] [-s|--skip-sig] [назив_променљиве_за_списак_дозвољених] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Учитава променљиве из датотеке блока окружења." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f ДАТОТЕКА]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Исписује променљиве из датотеке блока окружења." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f ДАТОТЕКА] назив_променљиве [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Чува променљиве у датотеку блока окружења." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Приказује дуги списак са опширнијим подацима." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Исписује величине у запису разумљивом човеку." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Наводи све датотеке." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Мрежни протоколи:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [ДАТОТЕКА ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Исписује уређаје и датотеке." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Приказује само табеле издања 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Приказује само табеле издања 2 и издања 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Приказује АЦПИ податке." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "доступна РАМ" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "резервисана РАМ" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "АЦПИ повратна РАМ" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "АЦПИ РАМ не-несталног смештаја" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "неисправна РАМ (Лоша РАМ)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "РАМ која садржи табеле подизања језгра" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "РАМ која садржи шифру уграђеног програма" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "адреса_основе = 0x%llx, дужина = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "адреса_основе = 0x%llx, дужина = 0x%llx, врста = 0х%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Исписује мапу меморије коју доставља уграђени програм." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Исписује ПЦИ уређаје." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" +"ДАТОТЕКА омогућавања подизања ХФС или ХФС+ партиције за интелове мекове." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" +"ДИРЕКТОРИЈУМ омогућавања подизања ХФС или ХФС+ партиције за ППЦ мекове." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "АДРЕСА" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Чита 8-битну вредност са АДРЕСЕ." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Чита 16-битну вредност са АДРЕСЕ." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Чита 32-битну вредност са АДРЕСЕ." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Пише 8-битну ВРЕДНОСТ на АДРЕСИ." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Пише 16-битну ВРЕДНОСТ на АДРЕСИ." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Пише 32-битну ВРЕДНОСТ на АДРЕСИ." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Врста уноса изборника." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "НИСКА" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Исписује кориснике којима је дозвољено да подигну овај унос." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "КОРИСНИК[,КОРИСНИК]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Тастер тастатуре за брзо подизање овог уноса." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "ТАСТЕР_ТАСТАТУРЕ" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Користи НИСКУ као трло уноса изборника." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Одредник уноса изборника." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Овај унос може подићи било који корисник." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "БЛОК" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Одређује унос изборника." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Одређује подизборник." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Назив\tБрој упута\tЗависности\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Приказује ову поруку." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "АДРС [ВЕЛИЧИНА]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Приказује садржај меморије." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "МОДУЛ" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Уклања модул." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Приказује учитане модуле." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Излази из ГРУБ-а." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Нисам нашао ЦС5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "ЦС5536 на %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "У/И простор контролера сабирнице управљања системом је на 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "РАМ подножје број %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Записани СПД бајтови: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Укупна величина флеша: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Врста меморије: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Део бр.: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Врста меморије: Непозната." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Исписује податке о меморији." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "„%s“ не подржава УУИБ-е" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[МОДУЛ1 МОДУЛ2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Пребацује се на изворне управљачке програме диска. Ако нису наведени модули " +"користи се основни скуп (pata,ahci,usbms,ohci,uhci,ehci)" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Извршава НАРЕДБЕ над партицијом.\n" +"Користите „parttool PARTITION help“ за списак доступних наредби." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=ВРЕД" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Извините, није доступан ниједан алат партиције за %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "непознат аргумент „%s“" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "ПАРТИЦИЈА НАРЕДБЕ" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "КОРИСНИК ЛОЗИНКА" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Подешава корисничку лозинку (обичан текст). Непрепоручљиво и несигурно." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "неисправна лозинка ПБКДФ2" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "КОРИСНИК ПБКДФ2_ЛОЗИНКА" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Подешава корисничку лозинку (ПБКДФ2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Бира уређај према продавцу и ИБ-у уређаја." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[продавац]:[уређај]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Бира уређај према његовом положају на сабирници." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[сабирница]:[подножје][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "недостаје симбол „%c“" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s ПОЛОЖАЈ] [-d УРЕЂАЈ]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Приказује сирови избачај простора ПЦИ подешавања." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Поставља променљиву на вредност резултата." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Одређује управљачки програм." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Одређује врсту карте партиције." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Одређује врсту система датотека." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Одређује УУИБ система датотека." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Одређује натпис система датотека." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "систем датотека „%s“ не подржава натписе" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "УРЕЂАЈ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Налази податке о уређају." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ПРОМЕНЉИВА_ОКРУЖЕЊА]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Подешава променљиву са корисничким уносом." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Поново покреће рачунар." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Смешта поклопљену компоненту БРОЈ у ПРОМЕНЉИВОЈ_НАЗИВА." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[БРОЈ:]НАЗИВПРОМЕНЉИВЕ" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "РЕГИЗРАЗ НИСКА" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Проба да ли РЕГИЗРАЗ одговара НИСКИ." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "НАЗИВ [ПРОМЕНЉИВА] [ПОКУШАЈИ]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Тражи уређаје према датотеци. Ако је ПРОМЕНЉИВА наведена, први пронађени " +"уређеј се подешава на променљиву." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Тражи уређаје према натпису. Ако је ПРОМЕНЉИВА наведена, први пронађени " +"уређеј се подешава на променљиву." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Тражи уређаје према УУИБ-у. Ако је ПРОМЕНЉИВА наведена, први пронађени " +"уређеј се подешава на променљиву." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Тражи уређаје према датотеци." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Тражи уређаје према натпису система датотека." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Тражи уређаје према УУИБ-у система датотека." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Подешава променљиву на први пронађени уређај." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Не испробава ниједан уређај са дискетом." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Прво проба уређај ПОКУШАЈ. Ако се ПОКУШАЈ заврши зарезом, такође проба " +"подпартиције." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "ПОКУШАЈ" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Прво проба уређај ПОКУШАЈ да ли тренутно ради на ИЕЕЕ1275. Ако се ПОКУШАЈ " +"заврши зарезом, такође проба подпартиције." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Прво проба уређај ПОКУШАЈ да ли тренутно ради на БИОС-у. Ако се ПОКУШАЈ " +"заврши зарезом, такође проба подпартиције." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Прво проба уређај ПОКУШАЈ да ли је подржан директан приступ хардверу. Ако се " +"ПОКУШАЈ заврши зарезом, такође проба подпартиције." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Прво проба уређај ПОКУШАЈ да ли тренутно ради на ЕФИ-ју. Ако се ПОКУШАЈ " +"заврши зарезом, такође проба подпартиције." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Прво проба уређај ПОКУШАЈ да ли тренутно ради на АРЦ-у. Ако се ПОКУШАЈ " +"заврши зарезом, такође проба подпартиције." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint ПОКУШАЈ [--hint ПОКУШАЈ] ...] НАЗИВ" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Тражи уређаје према датотеци, натпису система датотека или УУИБ-у система " +"датотека. Ако је наведено „--set“, први пронађени уређај се подешава на " +"променљиву. Ако није наведен ниједан назив променљиве, користи се „root“." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Регистар %x за %x:%02x.%x је %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s ПОЛОЖАЈ] [-d УРЕЂАЈ] [-v ПРОМЕНЉИВА] РЕГИСТАР[=ВРЕДНОСТ[:МАСКА]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Управља ПЦИ уређајима." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Опширно одбројавање." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Дозвољава прекидање са ЕСЦ-ом." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "БРОЈ_СЕКУНДИ" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Чека наведени број секунди." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "корени директоријум сислинукс диска [основно=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +#, fuzzy +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"текући директоријум сислинукса [основни је матични директоријум улазне " +"датотеке]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "сматра да је улаз датотека подешавања исолинукса." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "сматра да је улаз датотека подешавања пикселинукса." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "сматра да је улаз датотека подешавања сислинукса." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Извршава подешавање сислинукса у истом контексту" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Извршава подешавање сислинукса у новом контексту" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Извршава подешавање сислинукса у истом контексту узимајући само уносе " +"изборника" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Извршава подешавање сислинукса у новом контексту узимајући само уносе " +"изборника" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "терминал није наведен" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "нисам нашао терминал „%s“" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Активни терминали улаза:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Доступни терминали улаза:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Активни терминали излаза:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Доступни терминали излаза:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [ТЕРМИНАЛ1] [ТЕРМИНАЛ2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Исписује или бира терминал улаза." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Исписује или бира терминал излаза." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ИЗРАЗ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Процењује израз." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ИЗРАЗ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Учитава исту датотеку на више начина." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Наводи величину за сваку радњу читања" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "неисправна величина блока" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Величина датотеке: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Протекло време: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Брзина: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s ВЕЛИЧИНА] ДАТОТЕКА" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Проверава брзину читања датотеке." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "није наведена ниједна наредба" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Протекло време: %d.%03d секунде \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "НАРЕДБА [АРГУМЕНТИ]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Мери време које користи НАРЕДБА" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Преводи на велика слова." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Преводи на мала слова." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[ОПЦИЈЕ] [СКУП1] [СКУП2] [НИСКА]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Преводи знакове СКУПА1 у СКУП2 у НИСКИ." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Не ради ништа, успешно." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Не ради ништа, неуспешно." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Испробава УСБ подршку." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Прескаче проверу потписа датотеке јавног кључа." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "лош потпис" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "нисам нашао јавни кључ %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "није учитан модул „%s“" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] ДАТОТЕКА ДАТОТЕКА_ПОТПИСА [ДАТОТЕКА_ЈАВНОГ_КЉУЧА]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Проверава откачени потпис." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] ДАТОТЕКА_ЈАВНОГ_КЉУЧА" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Додаје ДАТОТЕКУ_ЈАВНОГ_КЉУЧА у поверљиве кључеве." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Приказује списак поверљивих кључева." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ИБ_ЈАВНОГ_КЉУЧА" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Уклања ИБ_ЈАВНОГ_КЉУЧА из поверљивих кључева." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Само текст " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Директна боја, маска: %d/%d/%d/%d положај: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Палетирано " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "ЈУВ " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Планар " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Херкулес " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "ЦГА " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Не-ланчани 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Монохроматски " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Непознати режим снимка " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " неисправна ЕДИД провера суме" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " издање ЕДИБ-а: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Жељени режим: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Жељени режим није доступан\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "неисправна одредба режима снимка „%s“" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Списак подржаних режима снимка:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Легенда: маска/положај=црвена/зелена/плава/резервисана" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Прилагођивач „%s“:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Нису доступни подаци" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Нисам успео да покренем прилагођивач снимка" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[ШxВ[xД]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Исписује доступне режиме снимка. Ако је резолуција дата приказује само " +"режиме који јој одговарају." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[ШxВ]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Испробава подсистем снимка у режиму ШxВ." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Испробава подсистем снимка." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[ДИР]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Исписује Иксен смештај." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] ГРУБУУИБ [НАЗИВПРОМЕНЉИВЕ]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Претвара 64-битни УУИБ у запис пригодан за ИксНУ. Ако је дато „-l“ држига " +"малим словима као што је урађено блкид-ом." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "неуспех читања сектора 0x%llx из „%s“" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "неуспех писања сектора 0x%llx у „%s“" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Прикачиње УУИБ-ом." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Прикачиње све." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Прикачиње све уређаје са постављеном заставицом „boot“." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "не могу да отворим „%s“: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "не могу да премотам „%s“: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "ИЗВОР|-u УУИБ|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Прикачиње уређај шифровања." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Не могу да пронађем физички волумен „%s“. Можда недостају неки модули из " +"слике језгра." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "нисам нашао физички волумен „%s“" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "истекло је време за читање „%s“" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Не могу да учитам „sha256“" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Не могу да учитам „sha512“" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "не могу да прочитам ЕЛИ метаподатке" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "погрешна ЕЛИ магија или издање" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Покушавам да дешифрујем главни кључ..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Унесите лозинку за %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Подножје „%d“ је отворено\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "покушавам да читам или пишем ван диска „%s“" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "не могу да пишем на ЦД-РОМ" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Изворни управљачки програми диска су у употреби. Одбијам да користим сучеље " +"диска уграђеног програма." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "ЛДМ партиција уграђивања је премала; уграђивање неће бити могуће" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "овај ЛДМ нема партицију уграђивања; уграђивање неће бити могуће" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Брише наведени уређај повратне петље." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] НАЗИВУРЕЂАЈА ДАТОТЕКА." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Прави виртуелни уређај из датотеке." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "премештање 0x%x још није примењено" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "нема табеле симбола" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "ова ЕЛФ датотека није праве врсте" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Учитава и покреће ЕФИ опонашавача." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Завршава учитавање ЕФИ опонашавача." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Поништава учитавање ЕФИ опонашавача." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "нисам нашао симбол „%s“" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Учитани словни ликови:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "ДАТОТЕКА..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Наводи једну или више датотека словних ликова за учитавање." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Исписује учитане словне ликове." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "предубоко угнежђење симболичких веза" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "покушава да чита прошли крај датотеке" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"не могу да нађем потребног уређаја члана система датотека са више уређаја" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "није директоријум" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "није обична датотека" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"ваша „core.img“ је неуобичајено велика. Неће стати у области уграђивања" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "неисправан назив датотеке „%s“" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "није успело потврђивање провере суме" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "није доступан кључ описа" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "није успело МАК потврђивање" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Сматра да је улаз сиров." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Сматра да је улаз хексадецимални." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Сматра да је улаз пропусна реч." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Унесите ЗФС лозинку: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [ДАТОТЕКА]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Кључ ЗФС омотавања увоза смештен у ДАТОТЕЦИ." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Виртуелни уређај је уклоњен" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Виртуелни уређај је неуспео" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Виртуелни уређај је ван линије" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Виртуелни уређај је деградиран" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Виртуелни уређај је на линији" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Неисправан виртуелни уређај: није доступна врста" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Лист виртуелног уређаја (датотека или диск)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Путања подизања: недоступно\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Путања подизања: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Путања: недоступно" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Путања: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Уређиб: недоступно" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Уређиб: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Овај ВУРЕЂАЈ је огледало" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Овај ВУРЕЂАЈ је РАИДЗ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Неисправан ВУРЕЂАЈ" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "ВУРЕЂАЈ са %d детета\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "Елемент ВУРЕЂ-аја број %d није тачан\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Елемент ВУРЕЂ-аја број %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Непозната врста виртуелног уређаја: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Стање спремишта: активно" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Стање спремишта: извезено" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Стање спремишта: уништено" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Стање спремишта: резервисано за врућу замену" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Стање спремишта: АРЦ уређај 2. нивоа" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Стање спремишта: непокренуто" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Стање спремишта: недоступно" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Стање спремишта: потенцијално активно" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Назив спремишта: недоступно" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Назив спремишта: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "ГУИБ спремишта: недоступно" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "ГУИБ спремишта: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Не могу да довучем стање спремишта" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Непознато стање спремишта" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Није доступно стабло виртуелног уређаја" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Исписује ЗСФ податке о УРЕЂАЈУ." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "СИСТЕМ_ДАТОТЕКА [ПРОМЕНЉИВА]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Исписује ЗФС-ОБЈЕКАТФСПОДИЗАЊА или га смешта у ПРОМЕНЉИВОЈ" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Сада прикључите удаљеног прочишћавача." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Покреће ГДБ одсечак на датом прикључнику" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Прекида у ГДБ-у" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Зауставља ГДБ одсечак" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "прерани крај датотеке" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Преводи ниску са текућим подешавањима." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Притисните „унеси“ да подигнете изабрани ОС, „e“ да измените наредбе пре " +"подизања или „c“ за линију наредби. „ЕСЦ“ да се вратите на претходни " +"изборник." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Притисните „унеси“ да подигнете изабрани ОС, „e“ да измените наредбе пре " +"подизања или „c“ за линију наредби." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "унеси: подизање, „e“: опције, „c“: линија наредби" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Истакнути унос биће самостално извршен за %dс." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "Преостало време: %d сек." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dсек." + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Изборник подизања ГРУБ-а" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "АРГП_ПОМОЋ_ФМТ: %s вредност је мања или једнака са %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: АРГП_ПОМОЋ_ФМТ параметар захтева вредност" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: АРГП_ПОМОЋ_ФМТ параметар мора бити позитиван" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Непознат АРГП_ПОМОЋ_ФМТ параметар" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Ђубре у „АРГП_ПОМОЋ_ФМТ“-у: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Обавезни или изборни аргументи за дуге опције су такође обавезни или изборни " +"за сваку одговарајућу кратку опцију." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " или: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [ОПЦИЈА...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Пробајте „%s --help“ или „%s --usage“ за више података.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Грешке пријавите на %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Непозната системска грешка" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "даје овај списак помоћи" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "даје кратку поруку о коришћењу" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "НАЗИВ" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "поставља назив програма" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "СЕКУНДЕ" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "застаје на СЕК секунде (основно је 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "исписује издање програма" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ГРЕШКА ПРОГРАМА) Издање није познато!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Превише аргумената\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ГРЕШКА ПРОГРАМА) Опција би требало да буде препозната!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: опција „%s“ је нејасна; могућности:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: опција „--%s“ не допушта аргумент\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: опција „%c%s“ не допушта аргумент\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: опција „--%s“ не захтева аргумент\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: непозната опција „--%s“\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: непозната опција „%c%s“\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: неисправна опција -- „%c“\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: опција захтева аргумент -- „%c“\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: опција „-W %s“ је нејасна\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: опција „-W %s“ не допушта аргумент\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: опција „-W %s“ не захтева аргумент\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Успешно" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Нема поклапања" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Неисправан регуларни израз" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Неисправан знак сравњивања" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Неисправан назив разреда знака" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Пратећа контра коса црта" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Неисправна повратна упута" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Не одговара [ или [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Не одговара ( или \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Не одговара \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Неисправан садржај за \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Неисправан крај опсега" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Меморија је потрошена" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Неисправан претходећи регуларни израз" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Прерани крај регуларног израза" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Регуларни израз је превелик" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Неодговара ) или \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "непозната грешка регизраза" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Нема претходног регуларног израза" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Здраво свима" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Изговара „Поздрав свима“." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "покушава да премота унутар датотеке" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "неподржани запис гзип-а" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "лзоп датотека је оштећена" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "иксз датотека је оштећена или нису подржанеопције блока" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "неисправна ЕЛФ магија зависна од архитектуре" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ПРОМЕНЉИВА_ОКРУЖЕЊА=ВРЕДНОСТ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Поставља променљиву окружења." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ПРОМЕНЉИВА_ОКРУЖЕЊА" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Уклања променљиву окружења." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[АРГ]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Исписује уређаје или датотеке." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Умеће модул." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "нисам нашао диск „%s“" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "покушавам да читам или пишем ван партиције" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "неисправна ЕЛФ магија независна од архитектуре" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "број уређаја премашује ограничење" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "не могу да пишем у „%s“: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"унос „device.map“ „%s“ није исправан. Занемарујем га. Исправите или обришите " +"„device.map“" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"назив диска „%s“ у датотеци „device.map“ није исправан. Користићу „%s“. " +"Користите запис „[hfc]d[0-9]*“ (Нпр. „hd0“ или „cd“)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "не могу да отворим „%s“: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "НАЗИВ_УРЕЂАЈА" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Поставља корени уређај." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "користи ДАТОТЕКУ као карту уређаја [основно=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "користи датотеке ГРУБ-а у директоријуму ДИР [основно=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "исписује опширне поруке." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "чека док се не прикачи прочишћавач" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "непознат додатни аргумент „%s“." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Опонашавач ГРУБ-а." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Грешка аргументима обраде линије наредби\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Покреће „gdb %s %d“, и поставља „ARGS.HOLD“ на нулу.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: упозорење:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: подаци:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: грешка:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "датотека „%s“ је превелика" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "непознат систем датотека" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Није успело искључивање" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Излаз није успео" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "откривено је прекорачење" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Одбацујем неправилно угнеждену партицију (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Непозната наредба „%s“.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Приказује ову помоћ и излази." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Приказује употребу ове наредбе и излази." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "недостаје обавезна опција за „%s“" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "аргумент „%s“ захтева цео број" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "вредност је додељена аргументу „%s“ иако не захтева аргумент" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Исписује повратни траг." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "ГРУБ још увек не зна како да заустави овај рачунар!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Основни сервер је ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "неисправна одредба боје „%s“" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Поновно подизање није успело" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "стабло уређаја мора бити достављено (видите наредбу „devicetree“)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "неисправна зСлика" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "неисправно стабло уређаја" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Учитава Линукс." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Учитава инитрд." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Учитава ДТБ датотеку." + +#: grub-core/loader/arm64/linux.c:57 +#, fuzzy +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"језгро обичне слике није подржано — поново изграђујем са укљученим " +"„CONFIG_(U)EFI_STUB“" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "прво треба да учитате језгро" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, са Иксен хипервизором" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Учитава модул." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[ОПЦИЈЕ]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Подиже систем заснован на БИОС-у." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Учитава други учитавач подизања." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Приказује излаз на свим конзолама." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Користи серијску конзолу." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Тражи назив датотеке из које ће поново подићи." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Користи ЦД-РОМ као администратор." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Призива усмеравање подешавања корисника." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Улази у КБД при подизању." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Користи удаљени ГДБ прочишћавач уместо ДДБ-а." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Искључује све излазе подизања." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Чека на притисак тастера након сваког реда излаза." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Користи преведени корени уређај." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Подиже у једном режиму." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Подиже са опширним порукама." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Не подиже поново, једноставно стаје." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Мења подешене уређаје." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comЈЕДИНИЦА[,БРЗИНА]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Искључује СМП." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Искључује АЦПИ." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Не приказује поруке дијагнозе подизања." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Подиже са порукама прочишћавања." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Потискује обичан излаз (упозорења остају)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[АДРЕСА|comЈЕДИНИЦА][,БРЗИНА]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "назив" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "врста" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "адреса" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "величина" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Учитавам у слепом режиму" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Учитава језгро ФриБСД-а." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Учитава језгро ОпенБСД-а." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Учитава језгро НетБСД-а." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Учитава окружење ФриБСД-а." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Учитава модул језгра ФриБСД-а." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Учитава модул језгра НетБСД-а." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Учитава модул језгра НетБСД-а (ЕЛФ)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Учитава модул језгра ФриБСД-а (ЕЛФ)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Учитава рамдиск кОпенБСД-а." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Учитава другог утоваривача подизног језгра" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Стари параметар „ask“ није више подржан." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "„%s“ је застарео. Користи скуп „gfxpayload=%s“ пре наредбе линукса.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"„%s“ је застарело. ВГА режим %d није препознат. Користите скуп " +"„gfxpayload=ШИРИНАxВИСИНА[xДУБИНА] пре наредбе линукса.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] ДАТОТЕКА" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "величина за „%s“ је превелика" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Учитава „kernel.sys“ ФриДОС-а." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Учитава НТЛДР или ПодизниМГР." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Преписује погођено мапирање План9 уређаја." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "ГРУБУРЕЂАЈ=ПЛАН9УРЕЂАЈ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "ЈЕЗГРО АРГУМЕНТИ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Учитава језгро План-а9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Учитава ПИксЕ слику." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Учитава Трукрипт ИСО." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "инитрд је већ учитан" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Учитава модул." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Притисните неки тастер да покренете иксну" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Учитава избачај „својстава-уређаја“." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Не могу да нађем управљачки програм „FPSWA“" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "протокол „FPSWA“ није могао да нађе сучеље" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Нисам нашао „FPSWA“" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "„FPSWA“ ревизија: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "ДАТОТЕКА [АРГУМЕНТИ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Приказује издање „FPSWA“-а." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "УПОЗОРЕЊЕ: ниједна конзола неће бити доступна ОС-у" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Учитава вишеподизно 2 језгро." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Учитава вишеподизни 2 модул." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Учитава вишеподизно језгро." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Учитава вишеподизни модул." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Режим позадинске слике." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(=%развучено%)|normal(=%обично%)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Учитава ИксНУ слику." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Учитава 64-битну ИксНУ слику." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Учитава пакет ИксНУ проширења." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Учитава ИксНУ проширење." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "ДИРЕКТОРИЈУМ [ОССкупЈеПотребан]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Учитава директоријум ИксНУ проширења." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Учитава рамдиск ИксНУ-а. Биће доступан у ОС-у као „md0“." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Учитава поздравну слику за ИксНУ." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Учитава слику замрзнутог ИксНУ-а." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "АДРЕСА1,МАСКА1[,АДРЕСА2,МАСКА2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Проглашава области меморије неисправним (лошрам)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "ОД[K|M|G] ДО[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Уклања све области меморије у наведеном опсегу." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "очекивана су четири аргумента" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "непознато мрежно сучеље „%s“" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "нисам нашао ДХЦП податке" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "нисам нашао ДХЦП опције" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "нисам нашао ДХЦП опцију „%d“" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "непозната одредба записа ДХЦП опције „%s“" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "нисам нашао мрежну картицу" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "не могу самостално да подесим „%s“" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[КАРТИЦА]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "обавља самоподешавање „bootp“-а" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "ПРОМЕНЉИВА СУЧЕЉЕ БРОЈ ОПИС" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"налази ДХЦП опцију и чува је у ПРОМЕНЉИВОЈ. Ако је ПРОМЕНЉИВА - онда " +"исписује вредност." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "нема подешених ДНС сервера" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "састојак назива домена је предуг" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "нисам нашао ДНС запис" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "није добијен ДНС одговор" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "само ипв4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "само ипв6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "предност за ипв4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "предност за ипв6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "неисправан аргумент" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "АДРЕСА ДНССЕРВЕР" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Обавља ДНС претрагу" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "ДНССЕРВЕР" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Додаје ДНС сервер" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Уклања ДНС сервер" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Исписује ДНС сервере" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "не могу да пошаљем мрежни пакет" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "Сучеље заштићено са 16 бита је подржано\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "неподржани ХТТП одговор" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "неподржана ХТТП грешка %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "истекло је време за отварање „%s“" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "истек времена: не могу да решим хардверску адресу" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "нерешива адреса „%s“" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "непозната мрежна адреса „%s“" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "недостижно одредиште" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "откривена је петља руте" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "нисам нашао адресу" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "не може обрисати ову адресу" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Неподржана врста хв адресе „%d“\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Неподржана врста адресе „%d“\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "очекивана су три аргумента" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "нисам нашао картицу" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "привремено" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Непозната врста адресе „%d“\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "није наведен сервер" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "истекло је време за читање „%s“" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "КРАТАКНАЗИВ КАРТИЦА АДРЕСА [ХВАДРЕСА]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Додаје мрежну адресу." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[КАРТИЦА [ХВАДРЕСА]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Обавља ИПВ6 самоподешавање" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "КРАТАКНАЗИВ" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Брише мрежну адресу." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "КРАТАКНАЗИВ МРЕЖА [СУЧЕЉЕ| gw МРЕЖНИПРОЛАЗ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Додаје мрежну руту." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Брише мрежну руту." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "исписује мрежне руте" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "исписује мрежне картице" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "исписује мрежне адресе" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "веза је одбијена" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "истекло је време повезивања" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Унесите корисника: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[СПИСАККОРИСНИКА]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Проверава да ли је корисник на СПИСКУКОРИСНИКА." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Могуће наредбе су:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Могући уређаји су:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Могуће датотеке су:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Могуће партиције су:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Могући аргументи су:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Могуће ствари су:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Упозорење: грешка синтаксе (недостаје косница) у „%s“\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Упозорење: неисправна боја исписивања „%s“\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Упозорење: неисправна боја позадине „%s“\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ПРОМЕНЉИВАОКРУЖЕЊА [ПРОМЕНЉИВАОКРУЖЕЊА] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Извози променљиве." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Недеља" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Понедељак" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Уторак" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Среда" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Четвртак" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Петак" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Субота" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "модул није учитан" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "Гну ГРУБ издање %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ЕСЦ у било које време излази." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Подржано је минимално линијско уређивање налик БАШ-у. За прву реч, ТАБ " +"исписује могућа довршавања наредбе. Било где другде ТАБ исписује могућа " +"довршавања уређаја или датотеке. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Чисти екран." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Улази у нормалан режим." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Улази из нормалног режима." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Притисните неки тастер да наставите..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Подижем „%s“" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Пребацујем се на „%s“" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Нисам успео да подигнем ни основне ни одступајуће уносе.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Подижем списак наредби" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Подржано је минимално екранско уређивање налик Емакс-у. Притисните Ктрл-х " +"или Ф10 за подизање, Ктрл-ц или Ф2 за линију наредби или ЕСЦ да одбаците " +"уређивања и да се вратите на изборник ГРУБ-а." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Користите тастере „%C“ и „%C“ да изаберете који уноси су истакнути." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Партиција „%s“:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Уређај „%s“:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Не могу да приступим систему датотека" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Систем датотека врсте „%s“" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "— Натис „%s“" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "— Време последње измене %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "НИсам открио познати ситем датотека" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " — Партиција почиње на %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " — Величина сектора %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " — Укупна величина није позната" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " — Укупна величина %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "——ЈОШ НЕШТО——" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "не могу да отворим датотеку подешавања „%s“: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "сажимање није доступно за вашу платформу" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "нису доступне ИЕЕЕ1275 рутине за вашу платформу" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "нису доступне ЕФИ рутине за вашу платформу" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "нису доступне СГИ рутине за вашу платформу" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "није доступан стваралац насумичног броја за ваш ОС" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Нисам успео да направим стабло „device-mapper“" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "не могу да прикачим шифровани волумен „%s“: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "не могу да отворим геом" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "не могу да нађем гели потрошача" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "не могу да довучем гели УУИБ" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "не могу да нађем геом разред „part“" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "непоравната величина уређаја" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "покушава да прочита језгрену слику „%s“ из ГРУБ-а" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "опет покушава да прочита језгрену слику „%s“ из ГРУБ-а" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "не могу тачно да прочитам „%s“" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "нисам успео да прочитам секторе језгрене слике" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "не могу да добавим линију наредбе преводиоца за путању „%s“: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "линија наредбе преводиоца је празна за путању „%s“" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"преводилац „%s“ за путању „%s“ има неколико не-опционих речи, барем „%s“ и " +"„%s“" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"преводиоцу „%s“ за путању „%s“ су дате само опције, не могу да нађем " +"партицију уређаја" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Подаци складиштења за „%s“ не садрже врсту" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "„%s“ није месни диск" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Подаци складиштења за „%s“ не указују ни на обичну партицију ни на обичан " +"диск" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "не могу да довучем спискове блокова: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "величина блока није дељива са 512" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "неисправна величина блока" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "не могу да довучем спискове блокова" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "грешка иоцтл РАИД_ИЗДАЊА: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "неподржано издање РАИД-а: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "грешка иоцтл ДОБАВИ_ПОДАТКЕ_НИЗА: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "грешка иоцтл ДОБАВИ_ПОДАТКЕ_ДИСКА: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Не могу да отворим ток из „%s“: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "непозната врста РАИД уређаја „%s“" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"нисам нашао „obppath“ у родитељским директоријумима „%s“, нема откривања " +"ИЕЕЕ1275 назива" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "нисам успео да добавим прописну путању за „%s“" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "непозната врста уређаја „%s“\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Употреба: %s УРЕЂАЈ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Не могу да исцепим: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Не могу да направим спојку: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "не могу да повратим изворни директоријум" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "не могу да добавим податке „%s“: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "не могу да направим привремену датотеку: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "не могу да направим привремени директоријум: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"не могу да нађем путању ИЕЕЕ1275 уређаја за „%s“.\n" +"Мораћете ручно да поставите променљиву „boot-device“." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: нисам нашао" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"„nvsetenv“ није успело. \n" +"Мораћете ручно да поставите променљиву „boot-device“. На упиту ИЕЕЕ1275, " +"укуцајте:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Мораћете ручно да поставите „SystemPartition“ и „OSLoader“." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "нема / у прописном називу датотеке" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "није успело „cygwin_conv_path()“" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "не могу да довучем насумичне податке" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Недовољно овлашћења за приступ уграђеном програму, подразумевам БИОС" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "нису доступне ЕФИ рутине приликом рада у режиму БИОС-а" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "неочекивана грешка ЕФИ-а" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Не могу да нађем слободно ПодизноНННН подножје" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"овај натпис ГПТ партиције не садржи БИОС подизну партицију; уграђивање неће " +"бити могуће" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "ваша БИОС подизна партиција је премала; уграђивање неће бити могуће" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Сектор %llu се већ користи раид контролером „%s“; избегавам га. Затражите " +"од произвођача да не смешта податке у празнини ГЗП-а" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Сектор %llu се већ користи програмом „%s“; избегавам га. Овај софтвер може " +"у будућности да доведе до подизних или других проблема. Затражите од " +"његових аутора да не смештају податке у подизној стази." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"други програм користи област уграђивања, и нема довољно места за „core." +"img“. Такав програм обично покушава да смести податке на начин који " +"избегава откривање. Препоручујемо вам да испитате." + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"овај натпис партиције у стилу мсдос-а нема празнину пост-ГЗП-а; уграђивање " +"неће бити могуће" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "ваша област уграђивања је необично мала. „core.img“ неће стати у њу." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Чини партицију активном" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "није главна партиција" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Партиција „%d“ је сада активна. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Очишћена је активна заставица на %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Мења врсту партиције" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Поставља заставицу „hidden“ у врсти партиције" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "врста партиције 0x%x није исправна" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Подешавам врсту партиције на 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "не могу да прекинем 0 петље" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "није у телу функције" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "неисправан назив променљиве „%s“" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "неочекивани крај датотеке" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[БРОЈ]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Излази из петље" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Наставља петљу" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Мења положајне параметре." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ВРЕДНОСТ]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Поставља положајне параметре." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Враћа се из функције." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] ДАТОТЕКА" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Учитава слику позадине за активни терминал." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "БОЈА" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Поставља боју позадине за активни терминал." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Приказује садржај ЦБМЕМ конзоле." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Поставља серијску јединицу." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Поставља адресу серијског прикључника." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Поставља брзину серијског прикључника." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Поставља дужину речи серијског прикључника." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Поставља парност серијског прикључника." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Поставља зауставне битове серијског прикључника." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Поставља учесталост основе." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Укључује/искључује РТС/ЦТС." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "нисам нашао серијски прикључник „%s“" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "неподржана контрола протока серијског прикључника" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[ОПЦИЈЕ...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Подешава серијски прикључник." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "непозната врста података терминала „%s“" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "АСКРИ" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "УТФ-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "визуелно-уређени УТФ-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Непознато кодирање" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Тренутне врсте података терминала:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Терминал је само АСКРИ [основно]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Терминал је логички-уређени УТФ-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Терминал је визуелно-уређени УТФ-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Терминал има наведену геометрију." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ШИРИНАxВИСИНА." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "неисправна одредба димензија терминала" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "нисам нашао терминал „%s“ или њиме не рукују подаци терминала" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g ШxВ] ТЕРМ [ВРСТА]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Поставља врсту података терминала ТЕРМИНАЛА на ВРСТУ.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Исписује и извршава аргумент блока." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "датотека битмапе „%s“ је у неподржаном запису" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " ВБЕ подаци: издање: %d.%d ОЕМ софтвер рев: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " укупно меморије: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "нисам нашао одговарајући режим снимка" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "приступ је одбијен" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "МОДУЛИ" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "предучитавањем наведени модули МОДУЛИ" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "инсталира само МОДУЛЕ и њихове зависности [основно=all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "ТЕМЕ" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "инсталира ТЕМЕ [основно=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "СЛОВНИ ЛИКОВИ" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "инсталира СЛОВНЕ ЛИКОВЕ [основно=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "ЈЕЗИЦИ" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "инсталира само ЈЕЗИКЕ [основно=all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "сажима ГРУБ датотеке [изборно]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "бира сажимање за слику језгра" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "користи слике и модуле под ДИР [основно=%s/<платформа>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "користи преводе под ДИР [основно=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "користи теме под ДИР [основно=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "уграђује ДАТОТЕКУ као јавни кључ за проверавање потписа" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "не могу да преименујем датотеку „%s“ у „%s“" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "диск не постоји, тако да се пребацујем на партициони уређај „%s“" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Наредбе:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Прави празну датотеку блока окружења." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Исписује текуће променљиве." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [НАЗИВ=ВРЕДНОСТ ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Поставља променљиве." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [НАЗИВ ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Брише променљиве." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Опције:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Морате навести барем једну наредбу.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "ДАТОТЕКА НАРЕДБА" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Алат за уређивање блока окружења." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Ако је ДАТОТЕКА -, користи се основна вредност %s.\n" +"\n" +"Нема наредбе „delete“; ако желите да обришете читав блок\n" +"окружења, користите „rm %s“." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "неисправан блок окружења" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "неисправан параметар „%s“" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "блок окружења је премали" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "читање диска није успело на померају %lld, дужина %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "неисправна вредност прескакања %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "грешка читања на померају %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "не могу да отворим датотеку ОС-а „%s“: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "не могу да пишем на стандардни излаз: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "поређење није успело на померају %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "грешка отварања датотеке „%s“ ОС-а: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "није успела наредба „loopback“: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "није успела наредба „cryptomount“: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "не могу да довучем УУИБ" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls ПУТАЊА" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Исписује датотеке из ПУТАЊЕ." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp ДАТОТЕКА МЕСНА" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Умножава ДАТОТЕКУ у месну датотеку МЕСНА." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat ДАТОТЕКА" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Умножава ДАТОТЕКУ на стандардни излаз." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp ДАТОТЕКА МЕСНА" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Упоређује ДАТОТЕКУ са месном датотеком МЕСНА." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex ДАТОТЕКА" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Приказује садржај ДАТОТЕКЕ хексадецимално." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc ДАТОТЕКА" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Добавља „crc32“ проверу суме ДАТОТЕКЕ." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist ДАТОТЕКА" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Приказује списак блокова ДАТОТЕКЕ." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid УРЕЂАЈ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Упоређује ИксНУ УУИБ уређаја." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "БРОЈ" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Прескаче N бајтова из излазне датотеке." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Рукује са N бајтова у излазној датотеци." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Наводи број улазних датотека." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Поставља променљиву окружења прочишћавања." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Прикачиње уређаје шифровања." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "ДАТОТЕКА|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Учитава зсф крипто кључ." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Распакује податке." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Неисправан број дискова.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Број дискова мора да претходи списку дискова.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Није наведена ниједна наредба.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Нема довољно параметара за наредбу.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Неисправн наредба „%s“.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ПУТАЊА_СЛИКЕ НАРЕДБЕ" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Прочишћавачки алат за управљачке програме система датотека." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "поставља назив улазне датотеке за 32-битне партиције." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "поставља назив улазне датотеке за 64-битне партиције." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "поставља назив излазне датотеке. Основно је СТНДИЗЛАЗ." + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[ОПЦИЈЕ]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Прилепљује 32-битну и 64-битну извршну на Ејплову свеопшту." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Недостаје улазна датотека\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "не могу да умножим „%s“ у „%s“: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "не могу да сажмем „%s“ у „%s“" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "не могу да отворим директоријум „%s“: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "не могу да обришем „%s“: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "„grub-mkimage“ је преведен без ИксЗ подршке" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Непознат запис сажимања „%s“" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Непознато сажимање „%s“" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "непознат циљни запис „%s“\n" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "не могу да нађем језик „%s“" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "„%s“ не постоји. Наведите „--target“ или „--directory“" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "неисправна датотека података режима „%s“" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Непозната платформа „%s-%s“" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Више од једног инсталационог уређаја?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"инсталира ГРУБ слике под директоријумом ДИР/%s уместо под %s директоријумом" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "МЕТА" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, fuzzy, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "инсталира ГРУБ за платформу МЕТА [основно=%s]" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"чини диск такође подизним као флопи (основно за фдИкс уређаје). Може да се " +"оштети на неким БИОС-има." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "брише мапу уређаја ако већ постоји" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "инсталира чак и ако су откривени проблеми" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "користи датотеку одредника чак и ако је доступан УУИБ" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"модул диска за коришћење (биосдиск или изворни). Ова опција је доступна само " +"на метама БИОС-а." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"не освежава НВРАМ променљиве „boot-device“/„Boot*“. Ова опција је доступна " +"само на ЕФИ и ИЕЕЕ1275 метама." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "не испробава системе датотека у УРЕЂАЈУ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "не инсталира подизни сектор" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Не примењује никакво мудро читање шифре када уграђује „core.img“. Ова опција " +"је доступна једнино на метама x86 БИОС-а." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "инсталациони уређај је уклоњив. Ова опција је доступна само на ЕФИ-ју." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ИБ" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "ИБ подизног учитавача. Ова опција је доступна само на ЕФИ-ју и Мек-у." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "користи ДИР као корен ЕФИ система партиција." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "користи ДИР за ППЦ МАК инсталацију." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "користи ДАТОТЕКУ као словни лик за натпис" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "користи БОЈУ за натпис" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "користи БОЈУ за позадину натписа" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "користи НИСКУ као издање производа" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[ОПЦИЈА] [ИНСТАЛАЦИОНИ_УРЕЂАЈ]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Инсталира ГРУБ на вашем диску." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"ИНСТАЛАЦИОНИ_УРЕЂАЈ мора бити назив датотеке системског уређаја.\n" +"„%s“ умножава слике ГРУБ-а у „%s“. На неким платформама, може такође да " +"инсталира ГРУБ у подизном сектору." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "уређај „%s“ је одређен више пута у мапи уређаја „%s“" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Не могу да одредим вашу платформу. Користите „--target“." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Инсталирам за платформу „%s“.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "уређај инсталације није наведен" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "не могу да нађем ЕФИ директоријум" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "не могу да нађем уређај за „%s“ (да ли је „/dev“ прикачен?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "Не могу да нађем уређај ГРУБ-а за „%s“. Проверите „device.map“" + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "„%s“ не изгледа као ЕФИ партиција.\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Нашли сте грешку" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "систем датотека на „%s“ није ни ХФС ни ХФС+" + +#: util/grub-install.c:1273 +#, fuzzy, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"покушавам да инсталирам на шифровани диск без укљученог криптодиска. " +"Поставите „%s“ у датотеци „%s“." + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Не могу да направим датотеку: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "савети нису доступни за вашу платформу. Очекујте умањену делотворност" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "НИЈЕ ПОКРЕНУТА: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "изабрана партиција није ПРеП партиција" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "нисам успео да умножим Груб на ПРеП партицију" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"ПРеП партиција није празна. Ако сте сигурни желећете да је користите, " +"покрените „dd“ да је очистите: „%s“" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "није наведен иб ЕФИ подизног учитавача." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "УПОЗОРЕЊЕ: никаква платформно особена инсталација није обављена" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Инсталација је завршена. Без пријављених грешака." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "омогућава подизање за х86-засноване мекове" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "омогућава подизање за ппц-засноване мекове" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Није наведена ни путања ни уређај.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc ПУТАЊА|--x86 ДАТОТЕКА" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Омогућавање подизања у стилу Мека за ХФС или ХФС+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Употреба: %s [УЛАЗНАДАТОТЕКА [ИЗЛАЗНАДАТОТЕКА]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Грешка фритајпа %d учитавјући глиф 0x%x за U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (по средини)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (с лева)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (с десна)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Замена ван опсега (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Претрага ван опсега: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Неподржана врста замене: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Неподржана одредба замене: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Неподржана одредба покрића: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "УПОЗОРЕЊЕ: неподржани параметри функције словног лика: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "чува излаз у ДАТОТЕКУ [потребно]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "бира индекс изгледа" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "ОД-ДО[,ОД-ДО]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "поставља опсег словног лика" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "поставља назив породице словног лика" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "ВЕЛИЧИНА" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "поставља величину словног лика" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "подешава словни лик силазно" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "подешава словни лик узлазно" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "претвара у подебљани словни лик" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "приморава самонаговештавање" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "искључује наговештавање" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "занемарује наносе битмапе приликом учитавања" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "неисправан опсег словног лика" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[ОПЦИЈЕ] ДАТОТЕКЕ_СЛОВОЛИКА" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Претвара записе датотека општих словних ликова у ПФ2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "излазна датотека мора бити наведена" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "„FT_Init_FreeType“ није успело" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "не могу да отворим датотеку „%s“, индекс %d: грешка %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" +"не могу да подесим величину словног лика %dx%d: Грешка слободне врсте %d: %s" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "поставља директоријум префикса [основно=%s]" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"уграђује ДАТОТЕКУ као слику мемдиска\n" +"Подразумева „-p (memdisk)/boot/grub“ и преписује сваки претходно достављени " +"префикс, али сам префикс може бити преписан каснијим опцијама" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "уграђује ДАТОТЕКУ као раније подешавање" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "додаје подеок НАПОМЕНА за ЦХРП ИЕЕЕ1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "шаље створену слику у ДАТОТЕКУ [основно=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ЗАПИС" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "ствара слику у ЗАПИСУ" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "доступни записи:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "непознат циљни запис „%s“\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[ОПЦИЈА]... [МОДУЛИ]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Прави подизну слику ГРУБ-а." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Циљни запис није наведен (користите опцију „-O“)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "Циљни запис није наведен (користите опцију „-O“)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"„%s“ је лоше преведен: његова почетна адреса је 0x%llx уместо 0x%llx: грешка " +"„ld.gold“-а?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "поставља назив улазне датотеке. Основно је СТНДУЛАЗ." + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Непознат одредник скенирања тастатуре „%s“\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Непозната шифра скенирања тастатуре 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "ГРЕШКА: нисам нашао исправан распоред тастатуре. Проверите улаз.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Ствара распоред тастатуре ГРУБ-а из једне Линуксове конзоле." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "корени директоријум ТФТП сервера" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "релативни поддиректоријум на мрежном серверу" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Припрема мрежне подизне слике ГРУБ-а на „net_directory/subdir“ " +"подразумевајући да је „net_directory“ ТФТП корен." + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "неподржана платформа „%s“\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Директоријум мрежног подизања за „%s“ је направљен. Подесите ваш ДХЦП сервер " +"да показује на „%s“\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Број ПБКДФ2 понављања" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Дужина створеног хеша" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Дужина присолка" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Ствара хеш ПБКДФ2 лозинке." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "нисам успео да прочитам лозинку" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Поново унесите лозинку: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "лозинке нису исте" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "не могу да довучем насумичне податке за присолак" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "криптографска грешка број %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "ПБКДФ2 хеш ваше лозинке је %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Није наведена ниједна путања.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ПУТАЊА" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Претвара састемски назив датотеке у онај ГРУБ-ов." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "чува РОМ слике у ДИР-у [изборно]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "користи ДАТОТЕКУ као „xorriso“ [изборно]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "користи НИСКУ као назив производа" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"укључује спарк подизање. Искључује ХФС+, АПМ, АРЦС и подиже као диск слику " +"за „i386-pc“" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"укључује АРЦС подизање (рачунаре мипса велике крајњости, углавном СГИ). " +"Искључује ХФС+,АПМ, спарк64 и подиже као диск слику за „i386-pc“." + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Прави ГРУБ-ову подизну слику ЦД-РОМ-а, диска, меморијског штапића и дискете." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Ствара подизну ЦД/УСБ/флопи слику. Аргументи другачији од опција овог " +"програма се прослеђују иксорисо-у, и означавају изворне датотеке, изворне " +"директоријуме, или било коју опцију „mkisofs“-а наведену излазом „%s“-а." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Опција —— пребацује у изворни режим наредби „xorriso“-а." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"Пошаљите поруку са захтевом подршке за иксорисо на ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[ОПЦИЈА] ИЗВОР..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "укључујем „%s“ подршку ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ваш иксорисо не подржава „--grub2-boot-info“. Неке функције су искључене. " +"Користите иксорисо 1.2.9 или новији." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ваш иксорисо не подржава „--grub2-boot-info“. Ваша кључна слика је " +"превелика. Подизање као диска је искључено. Користите иксорисо 1.2.9 или " +"новији." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "Ствара самосталну слику (која садржи све модуле) у изабраном запису" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Синтакса тачке накалемљивања (нпр. „/boot/grub/grub.cfg=./grub.cfg“) се " +"прихвата" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "СЛИКА1 [СЛИКА2 ...] ТАЧКА_КАЧЕЊА" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "захтева слику и тачку качења" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "дати аргумент је системски уређај, а не путања" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, fuzzy, c-format +msgid "[default=%s]" +msgstr "инсталира СЛОВНЕ ЛИКОВЕ [основно=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "print МЕТА" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "доступни мете:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[ОПЦИЈА]... [ПУТАЊА|УРЕЂАЈ]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Испробава податке уређаја за датом путањом (или уређајем, ако је дата опција " +"„-d“)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "чита текст из ДАТОТЕКЕ." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "користи БОЈУ за текст" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "користи БОЈУ за позадину" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "поставља натпис за стварање" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "користи ДАТОТЕКУ као словни лик (ПФ2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Ствара Ејпол „.disk_label“." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Недостају аргументи\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ПУТАЊА]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Проверава да ли има грешака синтаксе у датотеке подешавања скрипте ГРУБ-а." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Грешка синтаксе у %u. реду\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Скрипта „%s“ не садржи наредбе и неће урадити ништа\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "користи ДАТОТЕКУ као подизну слику [основно=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "користи ДАТОТЕКУ као кључну слику [основно=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Није наведен ниједан уређај.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Подешава слике за подизање из УРЕЂАЈА.\n" +"\n" +"Не би требало директно да покренете овај програм. Уместо тога користите " +"„grub-install“." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "УРЕЂАЈ мора бити уређај ОС-а (нпр. „/dev/sda“)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Неисправан уређај „%s“.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" +"корени директоријум као што ће бити виђен у време покретања [основно=/]." + +#: util/grub-syslinux2cfg.c:69 +#, fuzzy +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"текући директоријум сислинукса као што ће бити виђен у време покретања " +"[основни је матични директоријум улазне датотеке]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "пише излаз у ДАТОТЕКУ [основно=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Претвара подешавања сислинукса у оно ГРУБ-ово." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "не могу да сажмем слику језгра" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "непознато сажимање %d\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Распакивач је превелик" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "кључна слика је превелика (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "слика језгра је превелика (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "величина „diskboot.img“ мора бити %u бајта" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"„fwstart.img“ не одговара познатом добром издању. наставите на сопствени " +"ризик" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "слика уграђеног програма је превелика" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "неисправан запис реда: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "први сектор кључне датотеке није поравнат на сектор" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "пронађени су подаци који нису поравнати-на-сектору у кључној датотеци" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "сектори кључне датотеке су превише исцепкани" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "величина за „%s“ није %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "величина за „%s“ је премала" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Покушавам да инсталирам ГРУБ на диск са вишенатписном партицијом или и са " +"натписом партиције и системом датотека. Ово још није подржано." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"не могу да одредим систем датотека на „%s“; провера безбедности не може бити " +"обављена" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Изгледа да „%s“ садржи „%s“ систем датотека који није познат по томе да " +"резервише простор за подизање у стилу ДОС-а. Инсталирање ГРУБ-а на том " +"месту може довести до УНИШТЕЊА СИСТЕМА ДАТОТЕКА ако „grub-setup“ препише " +"корисне податке („--skip-fs-probe“ искључује ову проверу, користите на " +"сопствену одговорност)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Изгледа да „%s“ садржи „%s“ мапу партиција која није позната по томе да " +"резервише простор за подизање у стилу ДОС-а. Инсталирање ГРУБ-а на том " +"месту може довести до УНИШТЕЊА СИСТЕМА ДАТОТЕКА ако „grub-setup“ препише " +"корисне податке („--skip-fs-probe“ искључује ову проверу, користите на " +"сопствену одговорност)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Изгледа да „%s“ садржи „%s“ мапу партиција и ЛДМ који нису познати по томе " +"да резервишу простор за подизање у стилу ДОС-а. Инсталирање ГРУБ-а на том " +"месту може довести до УНИШТЕЊА СИСТЕМА ДАТОТЕКА ако „grub-setup“ препише " +"корисне податке („--skip-fs-probe“ искључује ову проверу, користите на " +"сопствену одговорност)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Покушавам да инсталирам ГРУБ на диск без париција или на партицију. Ово је " +"ЛОША замисао." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Покушавам да инсталирам ГРУБ на диск са вишенатписном партицијом. Ово још " +"није подржано." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Партицијски стил „%s“ не подржава уграђивање" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Систем датотека „%s“ не подржава уграђивање" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Ваша област уграђивања је необично мала. „core.img“ неће стати у њу." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "нема завршника у слици језгра" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "издање „core.img“-а не одговара" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "уграђивање није могуће, али је потребно за РАИД и ЛВМ инсталацију" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "не могу да одредим систем датотека на „%s“" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "систем датотека „%s“ не подржава спискове блокова" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"уграђивање није могуће, али је потребно за инсталацију унакрсних дискова" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Уграђивање није могуће. ГРУБ може једино бити инсталиран у овом подешавању " +"коришћењем спискова блокова. Међутим, спискови блокова су НЕПОУЗДАНИ и " +"њихова употреба се не препоручује." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "нећу наставити са списковима блокова" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "спискови блокова су неисправни" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "спискови блокова су непотпуни" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Употреба: %s -o ИЗЛАЗ ЦКБМАПА_АРГУМЕНТИ...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Прави датотеку распореда тастатуре ГРУБ-а." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "исписује ову поруку и излази" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "исписује податке о издању и излази" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "„%s“ ствара распоред тастатуре за ГРУБ користећи „ckbcomp“\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Грешке пријавите на ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: опција захтева аргумент -- „%s“\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Употреба: %s [ОПЦИЈА]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Ствара датотеку подешавања груба" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "шаље створено подешавање у ДАТОТЕКУ [основно=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Непозната опција „%s“\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Ово морате покренути као администратор\\n" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s: нисам нашао" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Стварам датотеку подешавања груба ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Откривене су грешке синтаксе у створеној датотеци подешавања ГРУБ-а.\n" +"Проверите да ли има грешака у датотекама „/etc/default/grub“\n" +"и „/etc/grub.d/*“ или попуните извештај о грешкама\n" +"и приложите датотеку „%s“." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "готово" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Упозорење:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Употреба: %s [ОПЦИЈА] УНОС_ИЗБОРНИКА\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Подешава основни унос изборника подизања за ГРУБ, само за следеће подизање." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"очекује ГРУБ слике под директоријумом ДИР/%s уместо под %s директоријумом" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"УНОС_ИЗБОРНИКА је број, наслов ставке изборника или одредник ставке " +"изборника. Знајте да ставке изборника у\n" +"подизборницима или под-подизборницима захтевају навођење састојака " +"подизборника а затим\n" +"састојак ставке изборника. Наслови требају бити одвојени знаком > (веће-од) " +"без додатних размака. У зависности од ваше конзоле неким знацима укључујући " +"> можда је потребан знак за излазак. Више информација о овоме је доступно\n" +"у грубовом упутству у одељку о наредби „default“. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Више од једног уноса изборника?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Унос изборника није наведен." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Подешава основни унос изборника подизања за ГРУБ." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Ово захтева подешавање „GRUB_DEFAULT=saved“ у „%s/default/grub“.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"УНОС_ИЗБОРНИКА је број, наслов ставке изборника или одредник ставке " +"изборника." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Затражен је серијски терминал али „ГРУБОВА_СЕРИЈСКА_НАРЕДБА“ није наведена. " +"Користиће се основни параметри." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Нађох тему: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Нађох позадину: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Неподржани запис слике" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Подешавам „GRUB_TIMEOUT“ (време истека груба) на не-нулту вредност када " +"подешавање „GRUB_HIDDEN_TIMEOUT“ (скривено време истека груба) више није " +"подржано." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Нађох Гну Мак: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Нађох модул Хурда: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Нађох неке ствари Хурда, али недовољно за подизање." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, са Хурдом %s (режим опоравка)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, са Хурдом %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Немојте користити стари наслов „%s“ за „GRUB_DEFAULT“, користите „%s“ (за " +"издања пре 2.00) или „%s“ (за 2.00 или новије)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Учитавам Гну Мак ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Учитавам Хурд ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Напредне опције за „%s“" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Учитавам језгро Илумос-а ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, са кФриБСД-ом %s (режим опоравка)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, са кФриБСД-ом %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Учитавам језгро ФриБСД-а %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Нађох језгро ФриБСД-а: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Нађох директоријум модула језгра: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, са Линуксом %s (режим опоравка)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, са Линуксом %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Учитавам Линукс %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Учитавам почетни рамдиск ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Нађох слику линукса: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Нађох слику инитрд-а: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, са језгром %s (путем %s, режим опоравка)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, са језгром %s (путем %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Нађох НетБСД језгро: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Виндоуз Виста/7 (учитавач)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Виндоуз НТ/2000/ИксП (учитавач)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Нађох %s на %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-бита)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-бита)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(на %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, са Иксеном %s и Линуксом %s (режим опоравка)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, са Иксеном %s и Линуксом %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, са Иксен хипервизором" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Учитавам Иксен %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Иксен хипервизор, издање %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Напредне опције за %s (са Иксен хипервизором)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Нађох %s на %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "„%s“ још није подржано „grub-mkconfig“-ом.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Неподржана заставица замене: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Непозната функција словног лика гсуб-а 0x%x (%s)\n" diff --git a/po/stamp-po b/po/stamp-po new file mode 100644 index 000000000..9788f7023 --- /dev/null +++ b/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/po/sv.gmo b/po/sv.gmo new file mode 100644 index 0000000000000000000000000000000000000000..e67c3030f052e2ed21527820bb170537115c0dba GIT binary patch literal 125941 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øIvkF^@QzJ=nU|hAsSH_FC$s}Qi@{AiW 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 bV9v;Mmzj_xkn0Nu?8Z*PXZGF literal 0 HcmV?d00001 diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 000000000..41ba371e7 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,6838 @@ +# Swedish strings for grub +# Copyright (C) 2009 - 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Martin Bagge , 2009. +# Daniel Nylander , 2009, 2010, 2012. +# Josef Andersson , 2014, 2016, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-09 22:53+0100\n" +"Last-Translator: Josef Andersson \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.9\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "serieportshastigheten stöds ej" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "paritet för serieporten stöds ej" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "stoppbitarsnumret för serieporten stöds ej" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "ordlängd för serieporten stöds ej" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Ladda inte värdtabeller specificerade med en kommaseparerad lista." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Ladda endast värdtabeller specificerade med en kommaseparerad lista." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Exportera version 1-tabeller till operativsystemet." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Exportera version 2- och version 3-tabeller till operativsystemet." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Sätt OEMID för RSDP, XSDT och RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Sätt OEMTABLE ID för RSDP, XSDT och RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Sätt OEMTABLE-revision för RSDP, XSDT and RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Sätt fältet skapare för RSDP, XSDT och RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Sätt skaparrevision för RSDP, XSDT för RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Uppdatera inte EBDA. Kan fixa fel eller hängningar på en del BIOS, men gör " +"det ineffektivt med OS som inte erhåller RSDP från GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "för tidigt slut på filen %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABELL1,TABELL2|--load-only=TABELL1,TABELL2] FIL1 [FIL2] " +"[…]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Läs in ACPI-tabeller för värd och tabeller specificerade genom argument." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "fel: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "slut på minne" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "kan inte läsa ”%s”: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Misslyckades med nedstängning genom ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Lista enheter." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "filnamn förväntades" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FIL" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Skriv ut en blocklista." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "du måste läsa in kärnan först" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Starta ett operativsystem." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Ingen startstatistik är tillgänglig\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Visa startstatistik." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "Diskcachestatistik: hits = %lu (%lu.%02lu%%), misses = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Ingen diskcachestatistik tillgänglig\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Hämta diskcacheinfo." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Acceptera CR/NL-radavslut i DOS-stil." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Visa innehållet av en fil." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "två argument förväntades" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Jämför filen ”%s” med ”%s”:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Filer varierar i storlek: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Filer skiljer sig vid offset %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Filerna är identiska.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FIL1 FIL2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Jämför två filer." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Läs in en annan konfigurationsfil." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Läs in en annan konfigurationsfil utan att byta sammanhang." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Läs in en annan konfigurationsfil utan att ändra sammanhang, men hantera " +"bara menyposter." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Läs in en annan konfigurationsfil men hantera bara menyposter." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[år-]månad-dag] [timme:minut[:sekund]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Visa/ställ in aktuellt datum/tid." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Mata inte ut eftersläpande radavslut." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Aktivera tolkning av avbrottstecknet omvänt snedstreck." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] STRÄNG" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Visa en textrad." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Starta om till menyn för inställning av fast programvara." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Fixa videoproblem." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM-avbild är närvarande." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Kan inte aktivera ROM-område." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "Skapa BIOS-lika strukturer för bakåtkompatibilitet med existerande OS." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Läs in BIOS-dump." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "STRÄNG …" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Utvärdera argument som GRUB-kommandon" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Kontrollera om FIL kan startas som en i386 Xen oprivilegierad gästkärna" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "Kontrollera om FIL kan startas som x86_64 oprivilegierad gästkärna" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "Kontrollera om FIL kan användas som Xen x86 privilegierad gästkärna" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Kontrollera om FIL kan användas som en x86-flervalsstartkärna" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Kontrollera om FIL kan användas som en x86-flervalsstart2-kärna" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Kontrollera om FIL är ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Kontrollera om FIL är ARM64 Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Kontrollera om FIL är IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Kontrollera om FIL är MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Kontrollera om FIL är MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Kontrollera om FIL är SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Kontrollera om FIL är POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Kontrollera om FIL är x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Kontrollera om FIL är x86 Linux med stöd för 32-bitarsprotokoll" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Kontrollera om FIL är x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Kontrollera om FIL är i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Kontrollera om FIL är x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Kontrollera om FIL är x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Kontrollera om FIL är i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Kontrollera om FIL är x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Kontrollera om FIL är en i386 EFI-fil" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Kontrollera om FIL är en x86_64 EFI-fil" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Kontrollera om FIL är en IA64 EFI-fil" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Kontrollera om FIL är en ARM64 EFI-fil" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Kontrollera om FIL är en ARM EFI-fil" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "Kontrollera om FIL är hiberfil.sys i viloläge" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Kontrollera om FIL är x86_64 XNU (Mac OS X-kärna)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Kontrollera om FIL är x386 XNU (Mac OS X-kärna)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Kontrollera om FIL är XNU (Mac OS X-kärna) vilolägesavbild" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Kontrollera om FIL är en BIOS-startsektor" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "false" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "FLAGGOR FIL" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Kontrollera om FIL är av angiven typ." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "ingen sådan partition finns" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Ny MBR skrivs till ”%s”\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ENHET [PARTITION[+/-[TYP]]] …" + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Fyll hybrid-MBR på GPT-enheten ENHET. Specificerade partitioner kommer att " +"vara en del av hybrid-MBR. Upp till tre partitioner är tillåtna. TYP är en " +"MBR-typ. + betyder att partitionen är aktiv. Endast en partition kan vara " +"aktiv." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Stoppar datorn. Detta kommando fungerar inte på alla implementationer av " +"fast programvara." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Ange hash att använda." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Kontrollera hashar på filer med hashlisteFIL." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Baskatalog för hashlista." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "KAT" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Stoppa inte efter första felet." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Dekomprimera fil innan kontrollsumma." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LÄSFEL\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: HASH MISSMATCH\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c FIL [-p PREFIX]] [FIL1 [FIL2 …]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Beräkna eller kontrollera kontrollsumma." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FIL [-p PREFIX]] [FIL1 [FIL2 …]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Ange Avancerad strömhantering (APM)\n" +"(1=låg, …, 254=hög, 255=av)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Visa strömläge." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Frys säkerhetsinställningar för ATA till omstart." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Visa SMART-hälsostatus." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Ange Automatisk ljudhantering (AAM)\n" +"(0=av, 128=tyst, …, 254=snabb)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Ange tidsgräns för vänteläge\n" +"(0=av, 1=5s, 2=10s, …, 240=20m, 241=30m, …)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Försätt disken i vänteläge." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Försätt disken i strömsparläge." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Skriv ut diskidentitet och -inställningar." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Visa det råa innehållet av en ATA IDENTIFY-sektor." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Inaktivera/aktivera SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Skriv inte ut meddelanden." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "ett argument förväntat" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[FLAGGOR] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Hämta/ange parametrar för ATA-disk." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Användning:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MÖNSTER …]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Visa ett hjälpmeddelande." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Hoppa över offset-byte från början av fil." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Läs bara LÄNGD byte." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[FLAGGOR] FIL_ELLER_ENHET" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Visa råa innehållet av en fil eller minne." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Visa rådump av CMOS-innehållet." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BIT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Testa bit i BYTE:BIT i CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Töm bit i BYTE:BIT i CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Sätt bit i BYTE:BIT i CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Visa statistik för coreboot uppstartstid." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Lista coreboot-tabeller." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Kontrollera om CPU stöder 64-bitars (long)-läge (standard)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Kontrollera om CPU stöder fysiskt adresstillägg (PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Kontrollera CPU-egenskaper." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Visa aktuella mappningar." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Återställ alla mappningar till deras standardvärden." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Utför både direkta och omvända mappningar." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Inga enheter har mappats om" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "OS disk #num ------> GRUB/BIOS-enhet" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Hantera BIOS-enhetsmappningarna." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Använd inte APM för att stoppa datorn." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Stoppa datorn, om möjligt använd APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "ingen APM hittades" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bit protected interface stöds\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bit protected interface stöds ej\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bit protected interface stöds\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bit protected interface stöds ej\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU Idle saktar ned processorn\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU Idle saktar inte ned processorn\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM inaktiverad\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM aktiverad\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM frånkopplad\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM aktiverad\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Visa APM-information." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "filnamn eller tempo och noter förväntades" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Ogiltigt tempo %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "filen ”%s” hittades inte" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "okänt nummer" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FIL | TEMPO [TONHÖJD1 VARAKTIGHET1] [TONHÖJD2 VARAKTIGHET2] … " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Spela en låt." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "sätt numlock-läge" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "sätt capslock-läge" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "sätt scrollock-läge" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "sätt insert-läge" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "sätt pausläge" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "tryck vänster skift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "tryck höger skift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "tryck sysrq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "tryck numlock-tangenten" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "tryck capsLock-tangenten" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "tryck scrollock-tangenten" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "tryck insert-tangenten" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "tryck vänster alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "tryck höger alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "tryck vänster ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "tryck höger ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "uppdatera inte LED-tillstånd" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[TANGENTTRYCK1] [TANGENTTRYCK2] …" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Emulera en tangenttryckningssekvens" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Kör ”go” för att återuppta GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Återvänd till IEEE1275-prompten." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Spara läst värde till variabeln VARNAMN." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAMN" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Läs 8-bitarsvärde från PORT." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Läs 16-bitarsvärde från PORT." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Läs 32-bitarsvärde från PORT." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORTVÄRDE [MASK]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Skriv 8-bitarsVÄRDE till PORT." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Skriv 16-bitarsVÄRDE till PORT." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VALUE [MASK]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Skriv 32-bitarsVÄRDE till PORT." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "variabeln ”%s” är inte inställd" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Läs in en tangentbordslayout." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Kontrollera skifttangent." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Kontrollera control-tangent." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Kontrollera alt-tangent." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Kontrollera status för tangentmodifierare." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "kan inte hitta kommandot ”%s”" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Ange lösenord: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Tolka gammal konfiguration i samma sammanhang" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Tolka gammal konfiguration i nytt sammanhang" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "Tolka gammal konfiguration i samma sammanhang bara för menyposter" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "Tolka gammal konfiguration i nytt sammanhang bara för menyposter" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYP] FIL [ARG …]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Simulera grub-legacy ”kernel”-kommando" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FIL [ARG …]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Simulera grub-legacy ”initrd”-kommando" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Simulera grub-legacy ”modulenounzip”-kommandot" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] LÖSENORD [FIL]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Simulera grub-legacy ”password”-kommandot" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Simulera grub-legacy ”password”-kommandot i menypostsläge" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Ange filnamn." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Hoppa över signaturkontroll av miljöfilen." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FIL] [-s|--skip-sig] [variabelnamn_att_vitlista] […]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Läs in variabler från miljöblockfilen." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FIL]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Lista variabler från miljöblockfilen." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FIL] variabelnamn […]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Spara variabler till miljöblockfilen." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Visa en lång lista med mer detaljerad information." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Skriv ut storlekar i ett format läsbart för människor." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Lista alla filer." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Nätverksprotokoll:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FIL …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Lista enheter och filer." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Visa endast tabeller för version 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Visa endast tabeller för version 2 och version 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Visa ACPI-information." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "tillgängligt RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "reserverat RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI återhämtningsbart RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "ACPI ickeflyktigt lagrings-RAM" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "felaktigt RAM (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "persistent RAM" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "persistent RAM (äldre)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM innehållandes coreboot-tabeller" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM innehållandes kod för fast programvara" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "bas_adre = 0x%llx, längd = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "bas_adre = 0x%llx, längd = 0x%llx, typ = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Lista minnesmappning tillhandahållen av fasta programvaran." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Lista PCI-enheter." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Bless FIL på HFS eller HFS+-partition för intel mac:ar." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Bless KAT på HFS eller HFS+-partitionen för PPC-mac:ar." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Läs 8-bitarsvärde från ADR." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Läs 16-bitarsvärde från ADR." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Läs 32-bitarsvärde från ADR." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Skriv 8-bitarsVÄRDE till ADR." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Skriv 16-bitarsVÄRDE till ADR." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Skriv 32-bitarsVÄRDE till ADR." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Menyposttyp." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRÄNG" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Lista över användare som tillåts starta upp denna post." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "ANVÄNDARNAMN[,ANVÄNDARNAMN]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Tangentbordstangent för att snabbt starta denna post." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "TANGENTBORDSTANGENT" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Använd STRÄNG som en menypostkropp." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Menypostidentifierare." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Denna post kan startas av alla användare." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Definiera en menypost." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Definiera en undermeny." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Namn\tRef antal\tBeroenden\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Visa detta meddelande." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ADR [STORLEK]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Visa minnesinnehåll." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODUL" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Ta bort en modul." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Visa inlästa moduler." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Avsluta GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Ingen CS5536 hittades" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 på %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Systemhanteringsbusskontrollerns I/O-utrymme är på 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM-slot nummer %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Skrivna SPD-byte: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Total flash-storlek: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Minnestyp: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Del nr: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Minnestyp: Okänt." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Skriv ut minnesinformation." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s stöder ej UUID:er" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Växla till inbyggda diskdrivrutiner. Om inga moduler anges som används (pata," +"ahci,usbms,ohci,uhci,ehci) som standard" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Utför COMMANDS på partitionen.\n" +"Använd ”parttool PARTITION help” för en lista över tillgängliga kommandon." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=VAL" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Tyvärr, parttool är inte tillgängligt för %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "okänt argument ”%s”" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITIONSKOMMANDON" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "ANVÄNDARLÖSENORD" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Ange användarlösenord (klartext). Ej rekommenderat och osäkert." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "ogiltigt PBKDF2-lösenord" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "ANVÄNDARE PBKDF2_LÖSENORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Ställ in användarlösenord (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Välj enhet efter tillverkare och enhet-ID." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[tillverkare]:[enhet]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Välj enhet efter dess position på bussen." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "saknar ”%c”-symbol" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s POSITION] [-d ENHET]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Visa rådump av PCI-konfigurationsutrymmet." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Sätt en variabel till returvärdet." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Fastställ drivrutin." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Fastställ partitiontabelltypen." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Fastställ filsystemstyp." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Fastställ UUID för filsystem." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Fastställ filsystemsetikett" + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "filsystemet ”%s” stödjer inte etiketter" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ENHET" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Hämta enhetsinfo." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Sätt variabeln med användarinmatning." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Starta om datorn." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Lagra matchande komponent NUMMER i VARNAMN." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMMER:]VARNAMN" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP STRÄNG" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Testa om REGEXP matchar STRÄNG." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAMN [VARIABEL] [TIPS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Sök enheter efter fil. Om VARIABEL är specificerad, kommer första enheten " +"som hittas att sättas till en variabel." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Sök enheter efter etikett. Om VARIABEL är specificerad kommer den första " +"enheten som hittas att sättas till en variabel." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Sök enheter efter UUID. Om VARIABEL är specificerad kommer den första " +"enheter som hittas a sättas till en variabel." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Sök enheter efter fil." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Sök enheter efter filsystemsetikett." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Sök enheter efter filsystems-UUID." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Sätt en variabel till den första enhet som hittas." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Leta inte efter någon diskettenhet." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Prova förs enhetens TIPS. Om TIPS slutar på komma, prova också subpartitioner" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "TIPS" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prova först enhetens TIPS om aktuell körning sker på IEEE1275. Om TIPS " +"slutar på komma, prova också subpartitioner." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prova först enhetens TIPS om aktuell körning sker på BIOS. Om TIPS slutar på " +"komma, prova också subpartitioner." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Prova först enhetens TIPS om direkt hårdvaruåtkomst stöds. Om TIPS slutar på " +"komma, prova också subpartitioner." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prova först enhetens TIPS om aktuell körning sker på EFI. Om TIPS slutar på " +"komma, prova också subpartitioner." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Prova först enhetens TIPS om aktuell körning sker på ARC. Om TIPS slutar på " +"komma, prova också subpartitioner." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint TIPS [--hint TIPS] …] NAMN" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Sök enheter efter fil, filsystemsetikett eller filsystems-UUID. Om --set är " +"specificerad, sätts den första enheten till en variabel. Om inget " +"variabelnamn är specificerat används ”root”." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Register %x av %x:%02x.%x är %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d ENHET] [-v VAR] REGISTER[=VÄRDE[:MASK]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Manipulera PCI-enheter." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Utförlig nedräkning." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Tillåt avbrott med ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "ANTAL_SEKUNDER" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Vänta ett angivet antal sekunder." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "rotkatalog för syslinuxdisk [standard=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"aktuell katalog för syslinux [standard är överordnad katalog till " +"inmatningsfilen]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "anta att inmatning är en konfigurationsfil för isolinux." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "anta att inmatning är en konfigurationsfil för pxelinux." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "anta att inmatning är en konfigurationsfil för syslinux." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Kör syslinuxkonfiguration i samma sammanhang" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Kör syslinuxkonfiguration i nytt sammanhang" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "Kör syslinuxkonfiguration i samma sammanhang men ta bara menyposter" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "Kör syslinuxkonfiguration i nytt sammanhang men ta bara menyposter" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "ingen terminal angiven" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "terminalen ”%s” hittades inte" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Aktiva inmatningsterminaler:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Tillgängliga inmatningsterminaler:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Aktiva utmatningsterminaler:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Tillgängliga utmatningsterminaler:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] …" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Lista eller välj en inmatningsterminal." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Lista eller välj en utmatningsterminal." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "UTTRYCK ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Evaluera ett uttryck." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "UTTRYCK" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Läs in samma fil på flera olika sätt." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Ange storlek för varje läsoperation" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "ogiltig blockstorlek" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Filstorlek: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Förfluten tid: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Hastighet: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s STORLEK] FILNAMN" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Testa läshastighet för fil." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "inget kommando angivet" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Förfluten tid: %d.%03d sekunder \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "KOMMANDO [ARG]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Mät tiden använd av KOMMANDO" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Översätt till versaler." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Översätt till gemener." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[FLAGGOR] [SET1] [SET2] [STRÄNG]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Översätt SET1-tecken till SET2 i STRÄNG." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Gör ingenting, lyckas." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Gör ingenting, misslyckas." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Testa USB-stöd." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Hoppa över signaturkontroll av den öppna nyckelfilen." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "dålig signatur" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "öppna nyckeln %08x hittades inte" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "modulen ”%s” är inte inläst" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] FIL SIGNATUR_FIL [ÖPPNYCKEL_FIL]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Verifiera löskopplad signatur." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] ÖPPNYCKEL_FIL" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Lägg till ÖPPNYCKEL_FIL till pålitliga nycklar." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Visa listan över pålitliga nycklar." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ÖPPNYCKEL_ID" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Ta bort ÖPPNYCKEL_ID från pålitliga nycklar." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Endast text" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Palett " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Plan " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Non-chain 4" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Monokrom " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Okänt grafikläge " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " ogiltig EDID-kontrollsumma" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID version: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Föredraget läge: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Inget föredraget läge tillgängligt\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "ogiltig specifikation för videoläget ”%s”" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Lista över videolägen som stöds:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Teckenförklaring: mask/position=röd/grön/blå/reserverad" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Adapter ”%s”:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Ingen information tillgänglig" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Misslyckades med att initialisera videoadapter" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[BxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Lista över tillgängliga videolägen. Om upplösning ges visas bara lägen som " +"stödjer det." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[BxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Testa videodelsystemet i läge WxH." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Testa videodelsystemet." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[KAT]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Lista Xen-lagring." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [VARNAMN]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Transformera 64-bitars UUID till ett passande format för XNU. Om -l ges, " +"behåll det i gemener precis som blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "misslyckades med att läsa sektor 0x%llx från ”%s”" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "misslyckades med att skriva sektor 0x%llx till ”%s”" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Montera efter UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Montera alla." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Montera alla volymer med flaggan ”boot” satt." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "kan inte öppna ”%s”: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "kan inte söka ”%s”: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "KÄLLA|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Montera en krypterad enhet." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Kunde inte hitta fysiska volymen ”%s”. Vissa moduler kanske saknas från " +"kärnavbilden." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "fysiska volymen %s hittades inte" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "ingen media i ”%s”" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Kunde inte läsa in sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Kunde inte läsa in sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "kunde inte läsa ELI-metadata" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "fel ELI-magi eller version" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Försöker att dekryptera huvudnyckeln…" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Ange lösenfras för %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Plats %d öppnad\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "försöker läsa eller skriva utanför disken ”%s”" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "kan inte skriva till CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Inbyggda diskdrivrutiner används. Vägrar att använda diskgränssnittet för " +"fast programvara." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "din LDM Embedding Partition är för liten; inbäddning är inte möjlig" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "denna LDM har ingen inbäddad partition; inbäddning är inte möjlig" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Ta bort den specificerade loopback-enheten." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] ENHETSNAMN FIL." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Gör en virtuell enhet av en fil." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "omflyttning 0x%x är inte implementerad än" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "ingen symboltabell" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "denna ELF-fil är inte av rätt typ" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Läs in och initialisera EFI-emulator." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Färdigställ inläsning av EFI-emulator." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Inaktivera EFI-emulator." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "symbolen ”%s” hittades inte" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Inlästa typsnitt:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FIL…" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Ange en eller flera typsnittsfiler att läsa in." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Lista inlästa typsnitt." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "för djup nästling av symlänkar" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "försökte att läsa förbi filens slut" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "kunde inte hitta en nödvändig medlemsenhet av ett multienhetsfilsystem" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "inte en katalog" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "inte en vanlig fil" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"din core.img är ovanligt stor. Den kommer inte att få plats i utrymmet " +"avsett för inbäddning" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "ogiltigt filnamn ”%s”" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "verifiering av kontrollsumma misslyckades" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "ingen dekrypteringsnyckel tillgänglig" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "Misslyckades med MAC-verifiering" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Anta att inmatning är rå." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Anta att inmatning är hex." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Anta att inmatning är lösenfras." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Ange ZFS-lösenord: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [FIL]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Importera ZFS-inkapslingsnyckel lagrad i FIL." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Virtuell enhet är borttagen" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Virtuell enhet är felaktig" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Virtuell enhet är frånkopplad" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Virtuell enhet behöver åtgärdas" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Virtuell enhet är tillgänglig" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Felaktig virtuell enhet: ingen typ tillgänglig" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Virtuellt enhetslöv (fil eller disk)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Startsökväg: otillgänglig\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Startsökväg: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Sökväg: inte tillgänglig" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Sökväg: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Devid: otillgängligt" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Devid: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Denna VDEV är en spegel" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Denna VDEV är en RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Felaktig VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV med %d barn\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "VDEV-element nummer %d är inte korrekt\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "VDEV-element nummer %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Okänd virtuell enhetstyp: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Pooltillstånd: aktiv" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Pooltillstånd: exporterad" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Pooltillstånd: förstörd" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Pooltillstånd: reserverad för het reserv" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Pooltillstånd: nivå 2 ARC-enhet" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Pooltillstånd: oinitierad" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Pooltillstånd: otillgänglig" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Pooltillstånd: potentiellt aktivt" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Poolnamn: otillgängligt" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Poolnamn: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "Pool-GUID: otillgänglig" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "Pool-GUID: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Kunde inte hämta pooltillstånd" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Okänt pooltillstånd" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Inget virtuellt enhetsträd tillgängligt" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Skriv ut ZFS-info om ENHET." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "FILSYSTEM [VARIABEL]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Skriv ut ZFS-BOOTFSOBJ eller lagra det i VARIABEL" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Anslut fjärrfelsökaren nu." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Starta GDB-stubbe på angiven port" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Brytpunkt för GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Stoppa GDB-stubbe" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "för tidigt slut på filen" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Översätter strängen med aktuella inställningar." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Tryck retur för att starta upp markerat OS, ”e” för att redigera kommandon " +"innan start eller ”c” för kommandorad. ESC för att återgå till föregående " +"meny." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Tryck retur för att starta upp markerat OS, ”e” för att redigera kommandon " +"innan start eller ”c” för kommandorad." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "mata in: boot, ”e”: flaggor, ”c”: cmd-line" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Markerat val kommer att startas upp automatiskt om %d sekunder." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds återstår." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB uppstartsmeny" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s värdet är mindre än eller lika med %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT-parametern kräver ett värde" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT-parametern måste vara positiv" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Okänd ARGP_HELP_FMT-parameter" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Skräp i ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Obligatoriska eller valfria argument till långa flaggor är också " +"obligatoriska eller valfria för motsvarande korta flaggor." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " eller: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [FLAGGA…]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "Prova ”%s --help” eller ”%s --usage” för mer information.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Rapportera fel till %s.\n" +"Skicka synpunkter på översättningen till .\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Okänt systemfel" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "visa denna hjälplista" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "ge ett kort användningsmeddelande" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "NAMN" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "ställ in programnamnet" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SECS" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "vänta i SECS sekunder (standard 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "skriv ut programversion" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAMFEL) Ingen version!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: För många argument\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAMFEL) Flaggan borde ha känts igen!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: flaggan ”%s” är tvetydig; möjligheter:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: flaggan ”--%s” tillåter inte argument\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: flaggan ”%c%s” tillåter inte argument\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: flaggan ”--%s” kräver ett argument\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: okänd flagga ”--%s”\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: okänd flagga ”%c%s”\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ogiltig flagga -- ”%c”\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: flaggan kräver ett argument -- ”%c”\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: flaggan ”-W %s” är tvetydig\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: flaggan '-W %s' tillåter inte ett argument\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: flaggan ”-W %s” kräver ett argument\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Lyckades" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Ingen träff" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Ogiltigt reguljärt uttryck" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ogiltigt sorteringstecken" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Ogiltigt namn på teckenklass" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Avslutande omvänt snedstreck" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Ogiltig bakåtreferens" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Omatchad [ eller [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Omatchad ( or \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Omatchad \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Ogiltigt innehåll i \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Ogiltig intervallavslut" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Slut på minne" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Ogiltig föregående reguljärt uttryck" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "För tidigt avslut på reguljärt uttryck" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "För stort reguljärt uttryck" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Omatchad ) eller \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "okänt regexpfel" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Inget tidigare reguljärt uttryck" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Hello World" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Säg ”Hello World”." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "försökte söka utanför filen" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "gzip-formatet stöds ej" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzopfil korrupt" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xzfil korrupt eller har blockalternativ som inte stöds" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "ogiltig arch-beroende ELF-magi" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VÄRDE]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Ställ in en miljövariabel." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Ta bort en miljövariabel." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Lista enheter eller filer." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Infoga en modul." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disken ”%s” hittades inte" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "försökte att läsa eller skriva utanför partition" + +# ELF magic is used to identify ELF files and is merely the very first few bytes of a file +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "ogiltig arch-oberoende ELF magic" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "enhetsantal överskrider gräns" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "kan inte skriva till ”%s”: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"enhetsmappningen ”%s” är ogiltig. Ignorerar den. Reparera eller ta bort din " +"enhetsmappning" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"enhetsnamnet ”%s” för enhetsmappningen är felaktig. Använder %s istället. " +"Använd formen [hfc]d[0-9]* (exempelvis ”hd0” eller ”cd”)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "kan inte öppna ”%s”: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "ENHETSNAMN" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Ange rotenhet." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "använd FIL som enhetsmappning [standard=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "använd FIL som memdisk" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "använd GRUB-filer i katalogen KAT [standard=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "skriv ut informativa meddelanden." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "vänta till en felsökare ansluter" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Okänt extra argument ”%s”." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "GRUB-emulator." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Fel vid tolkning av kommandoradsargument\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Kör ”gdb %s %d”, och sätt ARGS.HOLD till noll.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: varning:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: info:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: fel:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "filen ”%s” är för stor" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "okänt filsystem" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Avstängning misslyckades" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Avslutning misslyckades" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "stackspill upptäcktes" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Förkasta felaktigt nästlad partition (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Okänt kommando ”%s”.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Visa denna hjälp och avsluta." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Visa användningen av detta kommando och avsluta." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "saknar obligatorisk flagga för ”%s”" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "argumentet ”%s” kräver ett heltal" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"ett värde tilldelades argumentet ”%s” fastän det inte kräver ett argument" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Skriv bakåtspår." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB vet inte hur denna maskin ska avslutas än!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Standardserver är ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "ogiltig färgspecifikation ”%s”" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Omstart misslyckades" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[LÄNGD]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Hexdump för slumpmässig data" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "enhetsträd måste anges (se ”devicetree”-kommandot)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "ogiltig zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "ogiltigt enhetsträd" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Läs in Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Läs in initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Läs in DTB-fil." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "vanlig kärnavbild stöds ej - bygg om med CONFIG_(U)EFI_STUB aktiverat" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "misslyckades med att erhålla FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "du måste läsa in Xen Hypervisor först" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Läs in en Xen hypervisor." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Läs in en xen-modul." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[FLAGGOR]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Starta upp BIOS-baserat system." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Läs in en annan starthanterare." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Visa utskrift på alla konsoler." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Använd seriekonsol." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Fråga efter filnamn att starta upp från." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Använd cd-rom som root." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Aktivera dirigering av användarkonfiguration." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Ange i KDB vid uppstart." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Använd fjärrfelsökaren GDB istället för DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Inaktivera all utskrift under uppstart." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Vänta på tangenttryckning efter varje utskriftsrad." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Använd inkompilerad rotenhet." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Starta upp i enanvändarläge." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Starta upp med informativa meddelanden." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Starta inte om, stanna bara." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Ändra konfigurerade enheter." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comENHET[,HASTIGHET]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Inaktivera SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Inaktivera ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Visa inte startmeddelanden för diagnostik." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Starta med felsökningsmeddelanden." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Undertryck vanlig utmatning (varningar återstår)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADR|comENHET][,HASTIGHET]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "namn" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "typ" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "adr" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "storlek" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Startar i blindläge" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Läs in kärna för FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Läs in kärna för OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Läs in kärna för NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Läs in FreeBSD-miljö." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Läs in kärnmodul för FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Läs in kärnmodul för NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Läs in kärnmodul för NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Läs in kärnmodul för FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Läs in ramdisk för kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Läs in en annan coreboot payload" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Gamla parametern ”ask” stöds ej längre." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s är föråldrat. Använd set gfxpayload=%s före linuxkommandot istället.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s är föråldrat. VGA-läget %d känns inte igen. Använd set " +"gfxpayload=BREDDxHÖJD[xDJUP] före linuxkommandot istället.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] FIL" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "storleken på ”%s” är för stor" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Läs in kernel.sys för FreeDOS." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Läs in NTLDR eller BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Åsidosätt gissad mappning av Plan9-enheter." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBENHET=PLAN9ENHET" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KÄRNA ARG" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Läs in kärna för Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Läs in en PXE-avbildning." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Läs in Truecrypt-ISO." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd redan inläst" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Läs in modul." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Tryck på en tangent för att starta xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Läs in ”device-properties”-dump." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Kunde inte hitta FPSWA-drivrutin" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "FPSWA-protokollet kunde inte hitta gränssnittet" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Ingen FPSWA hittades" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA-revision: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "FIL [ARG…]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Visa FPSWA-version." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "VARNING: ingen konsol kommer att vara tillgänglig för OS" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Läs in en kärna för flervalsstart 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Läs in en multiboot 2-modul." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Läs in en kärna för flervalsstart." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Läs in en modul för flervalsstart." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Läge för bakgrundsbild." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Läs in XNU-avbildning." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Läs in 64-bitars XNU-avbildning." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Läs in XNU-tilläggspaket." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Läs in XNU-utökning." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "KATALOG [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Läs in XNU-tilläggskatalog." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Läs in XNU-ramdisk. Den kommer att vara tillgänglig i OS som md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Läs in en startbild för XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Läs in en avbild av XNU i viloläge." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADDR1,MASK1[,ADDR2,MASK2[,…]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Märk minnesregioner som felaktiga (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "FRÅN[K|M|G] TILL[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Ta bort minnesregioner i angivet intervall." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "fyra argument förväntades" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "okänt nätverksgränssnitt ”%s”" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "ingen info för DHCP hittades" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "inga DHCP-flaggor hittades" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "ingen DHCP-flagga %d hittades" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "okänd formatspecifikation för DHCP-flaggan ”%s”" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "inga nätverkskort hittades" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "kunde inte autokonfigurera %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[CARD]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "genomför en bootp autokonfiguration" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "VAR GRÄNSSNITT NUMMER BESKRIVNING" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "hämta DHCP-flagga och spara den i VAR. Om VAR är - skriv då ut värdet." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "inga DNS-servrar konfigurerade" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "domännamnskomponent är för lång" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "ingen DNS-post funnen" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "inget DNS-svar mottaget" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "endast ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "endast ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "föredra ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "föredra ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "ogiltigt argument" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ADRESS DNSSERVER" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Genomför ett DNS-uppslag" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSERVER" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Lägg till en DNS-server" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Ta bort en DNS-server" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Lista DNS-servrar" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "kunde inte skicka nätverkspaket" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "interpret stöds ej" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "Misslyckades med alloc-mem" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "Misslyckades med free-mem" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "HTTP-svaret stöds ej" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "HTTP-felet %d: %s stöds ej" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "tidsgränsen överskreds vid öppning av ”%s”" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "överskriden tidsgräns: kunde inte lösa hårdvaruadress" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "olösbar adress %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "okänd nätverksadress ”%s”" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "destination onåbar" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "ruttloop upptäckt" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "adressen hittades inte" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "du kan inte ta bort denna adress" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Hårdvaruadressen %d stöds ej\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Adresstypen %d stöds ej\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "tre argument förväntades" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "kort inte funnet" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "temporär" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Okänd adresstyp %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "ingen server har angivits" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "överskriden tidsgräns ”%s”" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "KORTNAMN KORT ADRESS [HVADRESS]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Lägg till en nätverksadress." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[KORT [HVADRESS]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Genomför en IPV6 autokonfiguration" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "KORTNAMN" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Ta bort en nätverksadress." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "KORTNAMN NÄT [GRÄNSSNITT| gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Lägg till en nätverksrutt." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Ta bort en nätverksrutt." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "lista nätverksrutter" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "lista nätverkskort" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "lista nätverksadresser" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "anslutningen nekades" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "överskriden tidsgräns för anslutning" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Ange användarnamn: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[ANVÄNDARLISTA]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Kontrollera huruvida användaren finns i ANVÄNDARLISTA." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Möjliga kommandon är:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Möjliga enheter är:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Möjliga filer är:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Möjliga partitioner är:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Möjliga argument är:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Möjliga saker är:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Varning: syntaxfel (saknar snedstreck) i ”%s”\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Varning: ogiltig förgrundsfärg ”%s”\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Varning: ogiltig bakgrundsfärg ”%s”\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] …" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Exportera variabler." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Söndag" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Måndag" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Tisdag" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Onsdag" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Torsdag" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Fredag" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Lördag" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "modulen är inte inläst" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB version %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC avslutar när som helst." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Minimal Bash-liknande radredigering stöds. För det första ordet kan " +"tabulator-tangenten användas för att visa kompletteringsalternativ. I övriga " +"fall visar tabulator-tangenten möjliga enheter eller filnamn för " +"komplettering. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Töm skärmen." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Gå in i normalt läge." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Avsluta från normalt läge." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Tryck på en tangent för att fortsätta…" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Startar upp ”%s”" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Faller tillbaka på ”%s”" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Misslyckades med att starta både standard- och reservvalen.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Starta en kommandolista" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Minimal Emacs-liknande skärmredigering stöds. Tabulator-tangenten används " +"för att visa kompletteringsalternativ. Ange Ctrl-x eller F10 för att starta, " +"Ctrl-c eller F2 för kommandorad eller ESC för att kasta ändringar och återgå " +"till GRUB-menyn." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "" +"Använd tangenterna %C och %C för att välja vilken post som är markerad." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Partition %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Enhet %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Filsystemet går inte att komma åt" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Filsystemstyp %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Etikett ”%s”" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Senaste ändringsdatum %d-%02d-%02d %02d.%02d.%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Inget känt filsystem hittades" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Partition börjar vid %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sektorstorlek %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Total storlek är okänd" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Total storlek %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--MER--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "kan inte öppna konfigurationsfilen ”%s”: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "ingen komprimering är tillgänglig för din plattform" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "inga IEEE1275-rutiner är tillgängliga för din plattform" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "inga EFI-rutiner är tillgängliga för din plattform" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "inga SGI-rutiner är tillgängliga för din plattform" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "ingen slumptalsgenerator är tillgänglig för ditt OS" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Misslyckades med att skapa ”device-mapper”-träd" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "kan inte montera krypterade volymen ”%s”: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "kan inte öppna geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "kunde inte hitta geli consumer" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "kunde inte hämta geli-UUID" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "kunde inte hitta geomklassen ”part”" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "ojusterad enhetsstorlek" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "försöker läsa kärnavbildningen ”%s” från GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "försöker läsa kärnavbildningen ”%s” från GRUB igen" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "kan inte läsa ”%s” korrekt" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "misslyckades med att läsa sektorerna i kärnavbildningen" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "kan inte hämta översättningskommandoraden för sökvägen ”%s”: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "översättningskommandoraden är tom för sökvägen ”%s”" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"översättaren ”%s” för sökvägen ”%s” har flera ej valfria ord, åtminstone " +"”%s” och ”%s”" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"översättaren ”%s” för sökvägen ”%s” har bara fått flaggor, kan inte hitta " +"enhetsdelen" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Lagringsinformation för ”%s” inkluderar inte typ" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "”%s” är inte en lokal disk" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Lagringsinformationen för ”%s” indikerar varken en vanlig partition eller en " +"vanlig disk" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "kan inte hämta blocklistor: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "blockstorlek är inte delbart med 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "ogiltig tom blockstorlek" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "kan inte hämta blocklistor" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION fel: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "RAID version: %d.%d stöds ej" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "ioctl GET_ARRAY_INFO fel: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "ioctl GET_DISK_INFO fel: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Kunde inte öppna ström från %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "okänd typ av RAID-enhet ”%s”" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"”obppath” hittades inte föräldrakatalogerna för ”%s”, ingen IEEE1275-" +"namnidentifiering" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "misslyckades med att hämta kanonisk sökväg för ”%s”" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "okänd enhetstyp %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Användning: %s ENHET\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Kunde inte förgrena process: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Kunde inte skapa rör: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "kan inte återställa originalkatalogen" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "kan inte använda stat på ”%s”: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "kan inte skapa temporära filen: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "kan inte skapa temporära katalogen: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"kunde inte hitta IEEE1275-enhetssökvägen för %s.\n" +"Du måste sätta ”boot-device”-variabeln manuellt" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: hittades inte" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"”nvsetenv” misslyckades. \n" +"Du behöver sätta ”boot-device”-variabeln manuellt. Vid IEEE1275 prompten, " +"skriv:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Du kommer att behöva ange ”SystemPartition” och ”OSLoader” manuellt." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "inget ”/” i kanoniska filnamn" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() misslyckades" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "kunde inte hämta slumpmässig data" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Otillräckliga privilegier för att komma åt fast programvara, enligt BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "inga EFI-rutiner är tillgängliga i BIOS-läge" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "oväntat EFI-fel" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Kunde inte hitta en ledig BootNNNN-plats" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"denna GPT-partitionsetikett har ingen BIOS-startpartition; inbäddning är " +"inte möjlig" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "din BIOS-startpartition är för liten; inbäddning är inte möjlig" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Sektor %llu används redan av raidkontrollern ”%s”; undviker den. Be " +"tillverkaren att inte lagra data i MBR-spåret" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Sektor %llu används redan av programmet ”%s”; undviker den. Denna " +"programvara kan orsaka uppstarts- eller andra problem i framtiden. Be " +"tillverkaren att inte lagra data i startspåret" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"annan programvara använder det inbäddade området, och det finns inte plats " +"för core.img. Sådan programvara försöker ofta lagra data på ett sätt som " +"undviker upptäckt. Vi rekommenderar att du undersöker" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"denna msdos-liknande partitionsetikett har inget utrymme efter MBR; " +"inbäddning kommer inte att fungera" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"ditt utrymme för inbäddning är ovanligt litet. core.img kommer inte att få " +"plats." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Gör partition aktiv" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "inte en primär partition" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Partition %d är aktiv nu. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Tömde aktiv flagga på %d.\n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Ändra partitionstyp" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Sätt flaggan ”hidden” i partitionstypen." + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "partitionstypen 0x%x är inte giltig" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Sätter partitionstypen till 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "kan inte avbryta 0-loopar" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "inte i funktionskropp" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "ogiltigt variabelnamn ”%s”" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "oväntat filslut" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[NUM]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Lämna loopar" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Fortsätt loopar" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Skifta positionsparametrar." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VÄRDE]…" + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Sätt positionsparametrar." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Återgå från en funktion." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FIL" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Läs in bakgrundsbild för aktiv terminal." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "FÄRG" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Ställ in bakgrundsfärg för aktiv terminal." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Visa innehållet av CBMEM-konsol." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Ställ in serieenhet." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Ställ in adress för serieporten." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Ställ in hastighet för serieporten." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Ställ in ordlängd för serieporten." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Ställ in paritet för serieporten." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Ställ in stoppbitar för serieporten." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Ställ in basfrekvensen." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Aktivera/inaktivera RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "serieporten ”%s” hittades inte" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "serieportens flödeskontroll stöds ej" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[FLAGGOR…]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Konfigurera serieport." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "okänt terminfotyp ”%s”" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "visually-ordered UTF-8" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Okänd teckenkodning" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Aktuella terminfotyper:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Terminalen är endast ASCII [standard]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Terminal är logical-ordered UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Terminalen är visually-ordered UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Terminalen har specificerat geometri." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "BREDDxHÖJD." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "felaktig specifikation för terminaldimensioner" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "terminal %s hittades inte eller hanteras inte av terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g BxH] TERM [TYP]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Sätt terminfotyp av TERM till TYP.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Skriv ut och exekvera ett blockargument." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "bitmapfilen ”%s” format stöds ej" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE info: version: %d.%d OEM programvara rev: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " totalt minne: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "inget passande videoläge hittades" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "åtkomst nekas" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODULER" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "förinläs specificerade moduler MODULER" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "installera endast MODULER och deras beroenden [standard=all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEMAN" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "installera TEMAN [standard=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "TYPSNITT" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "installera TYPSNITT [standard=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "SPRÅK" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "installera endast SPRÅK [standard=all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "komprimera GRUB-filer [valfritt]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "välj komprimering att använda för kärnavbild" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "använd avbilder och moduler under KAT [standard=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "använd översättningar i KAT [standard=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "använd teman i KAT [standard=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "bädda in FIL som öppen nyckel för signaturkontroll" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "kan inte byta namn på filen %s till %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "disk existerar inte, så faller tillbaka till partitionsenheten %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Kommandon:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Skapa en tom miljöblocksfil." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Lista aktuella variabler." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [NAMN=VÄRDE …]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Ställ in variabler." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [NAMN …]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Ta bort variabler." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Flaggor:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Du måste ange minst ett kommando.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FILNAMN KOMMANDO" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Verktyg för att redigera miljöblock." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Om FILENAME är ”-” används standardvärdet %s.\n" +"\n" +"Det finns inget ”delete”-kommando; om du vill ta bort hela miljö-\n" +"blocket, använd ”rm %s”." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "ogiltigt miljöblock" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "ogiltig parameter %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "för litet miljöblock" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "diskläsning misslyckas vid offset %lld, längd %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "ogiltigt hoppvärde %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "läsfel vid offset %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "kan inte öppna OS-filen ”%s”: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "kan inte skriva till stdut: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "jämför fel vid offset %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "OS-fil %s öppningsfel: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "”loopback”-kommando misslyckas: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "”cryptomount”-kommando misslyckas: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "kunde inte hämta UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls SÖKVÄG" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Lista filer i SÖKVÄG." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FIL LOKAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Kopiera FIL till lokala filen LOKAL." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat FIL" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Kopiera FIL till standard ut." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FIL LOKAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Jämför FIL med lokala filen LOKAL." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FIL" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Visa innehållet av FILE i hex." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FIL" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Hämta crc32-kontrollsumma för FIL." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FIL" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Visa blocklista för FIL." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid ENHET" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Beräkna XNU UUID för enhet." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "NUM" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Hoppa över N byte från utmatningsfil." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Hantera N byte i utdatafilen." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Specificera antalet inmatningsfiler." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Sätt miljövariabler för felsökning." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Montera krypterade enheter." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "FIL|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Läs in kryptonyckel för zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Okomprimerad data." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Ogiltigt diskantal.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Diskantal måste komma före lista över diskar.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Inget kommando har angivits.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Inte nog med parametrar att bestämma.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Ogiltigt kommando %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE_PATH KOMMANDON" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Felsökningsverktyg för filsystemsdrivrutin." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "ange inmatningsfilnamn för 32-bitarsdel." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "ange inmatningsfilnamn för 64-bitarsdel." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "ange filnamn för utdata. Standard är STDUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[FLAGGOR]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Limma ihop 32- och 64-bitars binär till en Apple universal." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Saknar inmatningsfil\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "kan inte kopiera ”%s” till ”%s”: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "kan inte komprimera ”%s” till ”%s”" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "kan inte öppna katalogen ”%s”: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "kan inte ta bort ”%s”: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage har kompilerats utan stöd för XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Okänt komprimeringsformat %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Okänd komprimering ”%s”" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "okänt målformat %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "kan inte hitta lokalen ”%s”" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s finns inte. Ange --target eller --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "ogiltig modinfofil ”%s”" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Okänd plattform ”%s-%s”" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Fler än en installationsenhet?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"installera GRUB-avbilder under katalogen KAT/%s istället för katalogen %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "MÅL" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "installera GRUB för MÅL-plattform [standard=%s]; tillgängliga mål: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"gör enheten startbar som floppy (standard för fdX-enheter). Kan gå sönder på " +"en del BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "radera enhetslista om den redan existerar" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "installera även om problem uppstår" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "använd identifierarfil även om UUID är tillgängligt" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"diskmodul att använda (biosdisk eller inbyggd). Detta alternativ är bara " +"tillgängligt på BIOS-mål." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"uppdatera inte ”boot-device”/`Boot*' NVRAM-variabler. Detta alternativ är " +"bara tillgängligt på EFI och IEEE1275-mål." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "leta inte efter filsystem i ENHET" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "installera inte i startsektor" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Verkställ inte några reed-solomon-koder när core.img bäddas in. Detta " +"alternativ är bara tillgängligt på x86 BIOS." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"installationsenheten är borttagningsbar. Detta alternativ är endast " +"tillgängligt på EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"ID för starthanteraren. Detta alternativ är endast tillgängligt på EFI och " +"Mac-datorer." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "använd KAT som roten för EFI-systempartitionen." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "använd KAT för PPC MAC-installation." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "använd FIL som typsnitt för etikett" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "använd FÄRG för etikett" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "använd FÄRG för etikettbakgrund" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "använd STRÄNG som produktversion" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[FLAGGA] [INSTALLATIONSENHET]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Installera GRUB på din enhet." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"INSTALLATIONSENHET måste vara systemenhetsfilnamnet.\n" +"%s kopierar GRUB-avbilder till %s. På vissa plattformar kan det också " +"installera GRUB på startsektorn." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "enheten %s är definierad flera gånger i enhetskartan %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Kunde inte fastställa din plattform. Använd --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Installerar för %s-plattformar.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "installationsenhet är inte angiven" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "kan inte hitta EFI-katalog" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "kan inte hitta en enhet för %s (är /dev monterad?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "kan inte hitta en GRUB-enhet för %s. Kontroller din enhetskarta" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s verkar inte vara en EFI-partition" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Du hittade ett fel" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "filsystemet på %s är varken HFS eller HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"försök att installera till krypterad disk utan cryptodisk aktiverad. Ange " +"”%s” i fil ”%s”" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Kunde inte skapa filen: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "inga tips tillgängliga för din plattform. Förvänta reducerad prestanda" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "KÖR EJ: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "den valda partitionen är inte en PReP-partition" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "misslyckades med att kopiera Grub till PReP-partitionen" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"PReP-partitionen är inte tom. Om du är säker på att du vill använda den, kör " +"dd för att tomma den: ”%s”" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "EFI-starthanterare är inte angiven." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "VARNING: ingen plattformsspecifik installation utfördes" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Installation avslutad. Inga fel rapporterades." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "bless för x86-baserade mac:ar" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "bless för ppc-baserade mac:ar" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Ingen sökväg eller enhet har angivits.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc SÖKVÄG|--x86 FIL" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Mac-liknande bless på HFS eller HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Användning: %s [INFIL [UTFIL]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype fel %d läser in glyph 0x%x för U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (mitten)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (vänstra)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (högra)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Utbyte utanför intervallet (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Utanför för intervalluppslag: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Utbytbar typ: %d stöds ej\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Ersättningspecifikation stöds ej: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Täckningsspecifikationen stöds ej: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "VARNING: egenskapsparametrarna för typsnittet stöds ej: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "spara utmatning i FIL [krävs]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "välj typsnittsindex" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "FRÅN-TILL[,FRÅN-TILL]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "sätt omfång för typsnitt" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "ange namn för typsnittsfamilj" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "STORLEK" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "ange typsnittstorlek" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "Ange typsnittsunderhäng" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "set typsnittsascent" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "konvertera till fett typsnitt" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "tvinga autotips" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "inaktivera autotips" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ignorera bitmaplinjer vid inläsning" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "ogiltigt typsnittsintervall" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[FLAGGOR] TYPSNITTSFILER" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Konvertera vanliga typsnittsfilformat till PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "utmatningsfil måste anges" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType misslyckas" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "kan inte öppna filen %s, index %d: fel %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "kan inte ställa in %dx%d typsnittsstorlek: Freetype fel %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "sätt prefixkatalog" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"bädda in FIL som en memdisk-avbild\n" +"Implicerar ”-p (memdisk)/boot/grub” och åsidosätter tidigare prefix, men " +"prefixet själv kan bli åsidosatt med senare alternativ." + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "bädda in FIL som en tidig konfiguration" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "lägg till NOTE-segment för CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "mata ut en genererad avbild till FIL [standard=stdut]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "FORMAT" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "generera en avbildning i FORMAT" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "tillgängliga format:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "okänt målformat %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[FLAGGA]… [MODULER]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Gör en startbar avbildning av GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Målformat inte specificerat (använd 0-alternativet)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Prefix ej specificerat (använd alternativet -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"”%s” är felkompilerat: dess startadress är 0x%llx istället för 0x%llx: ld." +"gold-fel?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "ange inmatningsfilnamn. Standard är STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Okänd identifierare för tangentbordsavsökning %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Okänd kod för tangentbordsavsökning 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"FEL: ingen giltig tangentbordslayout hittades. Kontrollera inmatningen.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "Generera tangentbordslayout för GRUB från Linux-konsolen." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "rotkatalog för TFTP-server" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "relativ underkatalog på nätverksserver" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Förbereder GRUB-startavbilder för nätverk på net_directory/subdir " +"förutsättandes att net_directory är en TFTP-rot." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "plattformen %s stöds ej" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Netboot-katalog för %s skapad. Konfigurera din DHCP-server till att peka på " +"%s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Antal PBKDF2-iterationer" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Längd på genererad hash" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Längd på salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Generera PBKDF2-lösenordshash." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "misslyckades med att läsa lösenordet" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Ange lösenordet igen: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "lösenorden stämmer inte överens" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "kunde inte hämta slumpmässig data för salt" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "kryptografiskt fel nummer %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "PBKDF2-hash för ditt lösenord är %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Ingen sökväg har angivits.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "SÖKVÄG" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Transformera ett systemfilnamn till ett GRUB-filnamn." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "spara ROM-avbilder i KAT [valfritt]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "använd FIL som xorriso [valfritt]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "använd STRÄNG som produktnamn" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"aktiverar sparc-start. Inaktiverar HFS+, APM, ARCS och starta som diskavbild " +"för i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"aktiverar ARCS-start (big-endian mips-maskiner, mest SGI). Inaktiverar HFS+, " +"APM, sparc64 och att starta som en diskavbild för i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "Skapa startbar GRUB-avbild för cd-rom, disk, usb-sticka och diskett." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Genererar en startbar cd-/usb-/diskettavbild. Andra argument än flaggorna " +"till detta program skickas till xorriso, och indikerar källfiler, " +"källkataloger eller andra mkisofs-alternativ listade av utmatningen av ”%s”." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Flaggan -- växlar till inbyggt xorriso-kommandoläge." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "E-posta xorriso för stöd." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[FLAGGA] KÄLLA…" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "aktiverar stöd för %s …" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ditt xorriso stödjer inte ”--grub2-boot-info”. Vissa egenskaper är " +"inaktiverade. Använd xorriso 1.2.9 eller senare." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"Ditt xorriso stödjer inte ”--grub2-boot-info”. Din kärnavbild är för stor. " +"Starta som disk är inaktiverat. Använd xorriso 1.2.9 eller senare." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" +"Generera en fristående avbild (innehållandes alla moduler) i det valda " +"formatet" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Grafpunktssyntax (exempelvis /boot/grub/grub.cfg=./grub.cfg) accepteras" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "AVBILDNING1 [AVBILDNING2 …] MONTERINGSPUNKT" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "behöver en avbildning och monteringspunkt" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "givet argument är en systemenhet, inte en sökväg" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "separera objekt i utmatning med ASCII NUL-tecken" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[standard=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "skriv ut MÅL" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "tillgängliga mål:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[FLAGGA]… [SÖKVÄG|ENHET]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Avsök enhetsinformation för en given sökväg (eller enhet, om flaggan -d är " +"given)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "läs text från FIL." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "använd FÄRG för text" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "använd FÄRG för bakgrund" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "sätt etiketten att skapa" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "använd FIL som typsnitt (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Rendera Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Saknar argument\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[SÖKVÄG]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Kontrollera GRUBs skriptkonfigurationsfil efter syntaxfel." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Syntaxfel på rad %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" +"Skriptet ”%s” innehåller inga kommandon och kommer inte att göra något.\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "använd FIL som startavbildning [standard=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "använd FIL som kärnavbild [standard=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Ingen enhet har angivits.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Ställ in avbilder till att starta från DEVICE.\n" +"\n" +"Normalt kör du inte detta program direkt. Använd grub-install istället." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "ENHET måste vara en OS-enhet (exempelvis /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Ogiltig enhet ”%s”.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "rotkatalog som den kommer att ses under körtid [standard=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"aktuell katalog för syslinux som den kommer att ses under körtid [standard " +"är överordnad katalog för inmatningsfil]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "skriv utmatning till FIL [standard=stdut]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Transformera syslinux-konfiguration till GRUB-konfiguration." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "kan inte komprimera kärnavbildningen" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "okänd komprimering %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Dekomprimeraren är för stor" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "kärnavbildningen är för stor (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "kärnavbildningen är för stor (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "storleken på diskboot.img måste vara %u byte" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img matchar inte den kända bra versionen. fortsätt på egen risk" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "fast programvaruavbilden är för stor" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "ogiltigt radformat: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "första sektorn i kärnfilen är inte sektorjusterad" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "data som inte är sektorjusterad hittades i kärnfilen" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "sektorerna för kärnfilen är för fragmenterade" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "storleken för ”%s” är inte %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "storleken på ”%s” är för liten" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Försöker installera GRUB på en disk med flera partitionsetiketter eller både " +"partitionsetikett och filsystem. Detta stöds inte än." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"kunde inte identifiera ett filsystem på %s; säkerhetskontroll kan inte " +"genomföras" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s verkar innehålla ett %s filsystem som inte kan reservera plats för DOS-" +"liknande uppstart. Installeras GRUB där kan det innebära att FILSYSTEMET " +"FÖRSTÖRS om viktiga data skrivs över av grub-setup (flaggan --skip-fs-probe " +"avaktivera denna kontroll, använd den på egen risk)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s verkar innehålla en %s-partitionstabell som inte kan reservera plats för " +"DOS-liknande uppstart. Installeras GRUB där kan det innebära att FILSYSTEMET " +"FÖRSTÖRS om viktiga data skrivs över av grub-setup (flaggan --skip-fs-probe " +"avaktivera denna kontroll, använd den på egen risk)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s verkar innehålla en %s-partitionstabell som inte är känd som en säker " +"kombination. Installeras GRUB där kan det innebära att FILSYSTEMET FÖRSTÖRS " +"om viktiga data skrivs över av grub-setup (flaggan --skip-fs-probe " +"avaktivera denna kontroll, använd den på egen risk)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Försöker installera GRUB på en opartitionerad disk eller till en partition. " +"Detta är en DÅLIG idé." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Försöker installera GRUB på en disk med flera partitionsetiketter. Detta " +"stöds ej än." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Partitionsstilen ”%s” stöder inte inbäddning" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Filsystemet”%s” stöder inte inbäddning" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Ditt utrymme för inbäddning är ovanligt litet. core.img kommer inte att få " +"plats." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "ingen terminering i kärnavbildningen" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img version matchar ej" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"inbäddning är inte möjligt, detta krävs dock när för installation av RAID " +"eller LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "kan inte fastställa filsystem på %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "filsystemet ”%s” stödjer inte blocklistor" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"inbäddning är inte möjligt, detta krävs dock för installation över flera " +"diskar" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Inbäddning är inte möjlig. GRUB kan bara bli installerad i denna form genom " +"att använda blocklistor. Blocklistor är tyvärr OPÅLITLIGA och användandet av " +"dem avrådes." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "fortsätter inte utan blocklistor" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "blocklistor är ogiltiga" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "blocklistor är ej kompletta" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Användning: %s -o UTMATNING CKBMAP_ARGUMENT…\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Skapa tangentbordslayoutfil för GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "skriv ut detta meddelande och avsluta" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "skriv ut versionsinformation och avsluta" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s genererar en tangentbordslayout för GRUB med ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" +"Rapportera fel till .\n" +"Skicka synpunkter på översättningen till ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: flaggan kräver ett argument -- ”%s”\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Användning: %s [FLAGGA]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Generera en konfigurationsfil för grub" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "mata ut genererad konfiguration till FIL [standard=stdut]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Okänd flagga ”%s”\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: Du måste köra detta som root\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: hittades inte.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Generera konfigurationsfil för grub …" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Syntaxfel upptäcktes i den genererade GRUB-konfigurationsfilen.\n" +"Kontrollera att det inte finns några fel i /etc/default/grub-\n" +"och /etc/grub.d/*-filerna eller skicka in en felrapport med\n" +"bifogad %s-fil." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "färdigt" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Varning:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Användning: %s [FLAGGA] MENYPOST\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "Sätt standardpost för GRUBs startmeny, endast för nästa start." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" +"förvänta GRUB-avbilder under katalogen KAT/%s istället för %s-katalogen" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENYPOST är ett nummer, en titel på ett menyobjekt eller en identifierare " +"för ett menyobjekt. Observera att menyobjekt eller under-undermenyer kräver " +"specificering av undermenykomponenterna och sedan\n" +"komponenten för menyobjektet. Titlarna bör vara separerade med större-än\n" +"tecknet (>) utan extra mellanslag. Beroende på ditt skal kan några tecken, " +"inkluderande > behöva omges av avbrottstecken.\n" +"Mer information om detta finns\n" +"i manualen för GRUB under sektionen om ”default”-kommandot." + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Fler än en menypost?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Menypost inte angiven." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Ange standardpost för GRUBs startmeny." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Detta kräver inställningen GRUB_DEFAULT=saved i %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"MENYPOST är ett nummer, en titel på ett menyobjekt eller identifierare för " +"menyobjekt." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Begärde seriell terminal men GRUB_SERIAL_COMMAND är ospecificerat. " +"Standardparametrar kommer att användas." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Hittade tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Hittade bakgrund: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Avbildningsformatet stöds ej" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Att sätta GRUB_TIMEOUT till ett värde annat än noll medan " +"GRUB_HIDDEN_TIMEOUT är satt stöds ej längre." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Hittade GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Hittade Hurd module: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Hittade delar av Hurd, men inte nog för att starta." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, med Hurd %s (återställningsläge)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, med Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Använd inte gamla titeln ”%s” för GRUB_DEFAULT, använd ”%s” (för versioner " +"före 2.00) eller ”%s” (för 2.00 eller senare)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Läser in GNU Mach …" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Läser in Hurd …" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Avancerade flaggor för %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Läser in kärna för Illumos …" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, med kFreeBSD %s (återställningsläge)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, med kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Läser in kärna för FreeBSD %s …" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Hittade kärna för FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Hittade katalog för kärnmoduler: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, med Linux %s (återställningsläge)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, med Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Läser in Linux %s …" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Läser in initial ramdisk …" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Hittade linux-avbildning: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Hittade initrd-avbildning: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, med kärnan %s (via %s, återställningsläge)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, med kärnan %s (via %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Hittade NetBSD-kärna: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (inläsare)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (inläsare)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Hittade %s på %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bitars)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bitars)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(på %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, med Xen %s och Linux %s (återställningsläge)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, med Xen %s och Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, med Xen hypervisor" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Läser in Xen %s …" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hypervisor, version %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Avancerade flaggor för %s (med Xen hypervisor)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Hittade %s på %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s stöds ännu inte av grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Ersättningsflagga stöds ej: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Okänd gsub-typsnittsegenskap 0x%x (%s)\n" diff --git a/po/swiss.sed b/po/swiss.sed new file mode 100644 index 000000000..17c9c380b --- /dev/null +++ b/po/swiss.sed @@ -0,0 +1,7 @@ +s,ß,ss,g +y,»«,«», +s,\bRechner\b,Computer,g +s,\bStrg\b,Ctrl,g +s,\bEinfg\b,Insert,g +s,\bEntf\b,Del,g + diff --git a/po/tr.gmo b/po/tr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..518420a85b4db9348b07305ec0d17010ce7d8c21 GIT binary patch literal 70759 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
    G4Jyfskv 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 literal 0 HcmV?d00001 diff --git a/po/tr.po b/po/tr.po new file mode 100644 index 000000000..ceb74e7ec --- /dev/null +++ b/po/tr.po @@ -0,0 +1,6702 @@ +# Turkish translation for grub. +# Copyright (C) 2013 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# Volkan Gezer , 2013, 2014. +# Hasan Kiran , 2013, 2015. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre2\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2015-02-20 15:23+0100\n" +"Last-Translator: Volkan Gezer \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.5\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "desteklenmeyen seri port hızı" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "desteklenmeyen seri port benzerliği" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "desteklenmeyen seri port durdurma biti numarası" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "desteklenmeyen seri port sözcük uzunluğu" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Virgülle ayrılmış ana makine tablolarını yükleme." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Yalnızca virgülle ayrılmış tabloları yükle." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Sürüm 1 tablolarını işletim sistemine aktar." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Sürüm 2 ve sürüm 3 tablolarını işletim sistemine aktar." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ve RSDT'nin OEMID'sini ayarla." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ve RSDT'nin OEMTABLE kimliğini ayarla." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ve RSDT'nin OEMTABLE düzeltmesini ayarla." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ve RSDT'nin oluşturucu alanını ayarla." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "RSDP, XSDT ve RSDT'nin oluşturucu düzeltmesini ayarla." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "erken dosya sonu %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "" +"Ana makine ACPI tablolarını ve değişkenler tarafından belirtilen tabloları " +"yükle." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "hata: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "bellek yetersiz" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "`%s' okunamadı: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "ACPI kapatılması başarısız oldu" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Aygıtları listele" + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "dosya adı gerekli" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "DOSYA" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Bir öbek listesi yazdır." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "önce kerneli yüklemelisiniz" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "İşletim sistemini ön yükle." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Önyükleme zaman istatistikleri mevcut değil\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Önyükleme zaman istatistiklerini göster" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Disk önbellek istatistikleri: isabet = %lu (%lu.%02lu%%), kaçan = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Kullanılabilir disk önbellek istatistiği bulunmuyor\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Disk önbelleği hakkında bilgi al." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "DOS tarzı CR/NL satır sonlarını kabul et." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Bir dosyanın içeriğini göster." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "iki argüman gerekli" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "`%s' dosyasını `%s' ile karşılaştır:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Dosya boyutları farklı: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Dosyalar şu denkleştirmede farklı: %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Dosyalar aynı.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "DOSYA1 DOSYA2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "İki dosyayı karşılaştır." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Başka bir yapılandırma dosyası yükle." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "İçeriği değiştirmeksizin diğer yapılandırma dosyasını yükle." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Bağlamı değiştirmeden başka bir yapılandırma dosyası yükle ama sadece menü " +"girdilerini al." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "" +"Farklı bir yapılandırma dosyası yükle ama yalnızca menü girdilerini al." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[yıl-]ay-gün] [saat:dakika[:saniye]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Şimdiki zamanı görüntüle/ayarla" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Yeni satır takibinden çıktı üretme." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Sola eğik çizgi boşlukları açıklamalarını etkinleştir." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] STRING" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Metnin bir satırını görüntüle." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Video problemini düzelt." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "ROM kalıbı hazır." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "ROM bölgesi etkinleştirilemiyor." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Varolan işletim sistemiyle arka uyumluluk için BIOS benzeri yapılar oluştur." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "BIOS dökümünü yükleyin." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "yanlış" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "böyle bir bölüm bulunmamaktadır" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Yeni MBR `%s' konumuna yazıldı\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "AYGIT [BÖLÜM[+/-[TÜR]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"AYGIT sürücü GPT'nin MBR hibritini doldur. Belirli bölüm mbr hibritinin bir " +"parçası olacaktır. 3 bölüme kadar izin verilir. TÜR bir MBR türüdür. + " +"bölümün etkin olduğunu gösterir. Sadece bir bölüm etkin olabilir." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Bilgisayarı durdurur. Bu komut tüm aygıt yazılım uygulamalarında çalışmaz." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Kullanılacak hash'i belirtin." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Hash listesi için temel dizin" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DİZİN" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "İlk hatadan sonra durma." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Doğrulama yapılmadan önce dosyayı çıkart." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: OKUMA HATASI\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: Tamam\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h HASH [-c DOSYA [-p ÖNEK]] [DOSYA1 [DOSYA2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Hash sağlamasını hesapla ya da kontrol et." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c DOSYA [-p ÖNEK]] [DOSYA1 [DOSYA2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Gelişmiş Güç Yönetimi'ni Ayarla\n" +"(1=düşük, ..., 254=yüksek, 255=kapalı)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Enerji kipini göster." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Sıfırlanana kadar ATA güvenlik ayarlarını dondurun." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "SMART sağlık durumunu görüntüle." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Otomatik Akustik Yönetimini Ayarla\n" +"(0=kapalı, 128=sessiz, ..., 254=hızlı)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Bekleme zaman aşımı ayarla\n" +"(0=kapalı, 1=5sn, 2=10sn, ..., 240=2dk, 241=30dk, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Sürücüyü hazırda beklet durumuna ayarla." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Sürücüyü uyku kipine ayarla." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Sürücü kimliğini ve ayarlarını yazdır." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "" + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "SMART'ı etkisizleştir/etkinleştir (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "İletileri yazdırma." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "bir argüman bekleniyor" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[SEÇENEKLER] DİSK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "ATA disk değiştirgelerini al/ayarla." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Kullanım:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ÖRÜNTÜ ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Bir yardım iletisi göster." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Dosyanın başlangıcındaki uzak bayta git." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Sadece UZUNLUK baytları oku." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[SEÇENEKLER] DOSYA_VEYA_AYGIT" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Bir dosya veya belleğin ham içeriğini göster." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "İşlemcinin Fiziksel Adres Uzantısı (PAE) desteğini kontrol et." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "CPU özelliklerini kontrol et." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Güncel eşleştirmeleri göster." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Tüm eşleştirmeleri öntanımlı değerlere getir." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Hem doğrudan hem de karşıt eşleştirmeleri çalıştır." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Hiçbir sürücü tekrardan eşleştirilmedi" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "BIOS sürücüsü eşleştirmelerini yönet." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Bilgisayarı durdurmak için APM kullanmayın." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Sistemi durdur, mümkünse APM kullanarak." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "hiçbir APM bulunamadı" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Sürüm %u.%u\n" +"32-bit CS = 0x%x, uzunluk = 0x%x, başlangıç = 0x%x\n" +"16-bit CS = 0x%x, uzunluk = 0x%x\n" +"DS = 0x%x, uzunluk = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "16-bit korunmuş arayüz destekleniyor\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "16-bit korunmuş arayüz desteklenmiyor\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "32-bit korunmuş arayüz destekleniyor\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "32-bit korunmuş arayüz desteklenmiyor\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Kullanılmayan CPU görevleri işlemciyi yavaşlatıyor\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Kullanılmayan CPU görevleri işlemciyi yavaşlatmıyor\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM etkisizleştirildi\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM etkinleştirildi\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "APM bilgisini göster." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "Geçersiz komut %s.\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "`%s' dosyası bulunamadı" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "Tanınmamış numara" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "DOSYA | TEMPO [PERDE1 SÜRE1] [PERDE2 SÜRE2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Bir melodi yürüt." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "numlock durumunu ayarla" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "capslock durumunu ayarla" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "scrollock durumunu ayarla" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "sol shift'e bas" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "sağ shift'e bas" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "SysRq tuşuna basın" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "NumLock tuşuna bas" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "CapsLock tuşuna bas" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "ScrollLock tuşuna bas" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "Insert tuşuna bas" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "sol alt'a bas" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "sağ alt'a bas" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "sol ctrl'ye bas" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "sağ ctrl'ye bas" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "LED durumunu güncelleme" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "GRUB'a devam etmek için `go' komutunu çalıştır." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Okunan değeri VARNAME değişkeni içine kaydet." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "KAPI" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "BAĞLANTI NOKTASINDAN 8-bit değer oku." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "BAĞLANTI NOKTASINDAN 16-bit değer oku." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "BAĞLANTI NOKTASINDAN 32-bit değer oku." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "KAPI DEĞERİ [MASKE]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "BAĞLANTI NOKTASINA 8-bit DEĞER yaz." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "BAĞLANTI NOKTASINA 16-bit DEĞER yaz." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR DEĞERİ [MASKE]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "BAĞLANTI NOKTASINA 32-bit DEĞER yaz." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "`%s' değişkeni ayarlanmamış" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Bir klavye düzeni yükle." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Üst karakter tuşunu denetle." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Kontrol tuşunu denetle." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Alt tuşunu denetle." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Anahtar düzenleyici durumunu denetle." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "`%s' komutu bulunamıyor" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Parola gir: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Aynı bağlamdaki yapılandırma kalıntılarını ayrıştır" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Yeni bağlamdaki yapılandırma kalıntılarını ayrıştır" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TÜR] DOSYA [PARAMETRELER ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "DOSYA [PARAMETRELER ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] ŞİFRE [DOSYA]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Dosya adı belirt." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Ortam öbek dosyasından değişkenleri yükle." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f DOSYA]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Ortam öbek dosyasından değişkenleri listele." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f DOSYA] değişken_adı [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Ortam öbek dosyasına değişkenleri kaydet." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Daha ayrıntılı bilgi ile uzun bir liste göster." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Boyutları kullanıcının okuyabileceği biçimde bastır." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Tüm dosyaları listele." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Ağ protokolleri:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [DOSYA ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Aygıtları ve dosyaları listele." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Sadece sürüm 1 tablolarını göster." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Sadece sürüm 2 ve sürüm 3 tablolarını göster." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "ACPI bilgisini göster." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "kullanılabilir RAM" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "ayrılmış RAM" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Gömülü yazılım tarafından sağlanan bellek haritasını listele." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "PCI aygıtlarını listele." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "" + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Menü girdisi türü." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "DİZİ" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Bu girdiyi başlatabilecek kullanıcıların listesi." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "KULLANICIADI[,KULLANICIADI]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Bu girdiyi hızlıca başlatacak klavye tuşu." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "KLAVYE _TUŞU" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Menü girdisi tanımlayıcı." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Bu girdi herhangi bir kullanıcı tarafından başlatılabilir." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOK" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Bir menü girdisi tanımla." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Bir alt menü tanımla." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Bu iletiyi göster." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Bellek içeriği göster." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "BİRİM" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Birimi kaldır." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Yüklenen birimleri göster." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "GRUB'dan çık." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "CS5536 bulunamadı" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "RAM yuva numarası %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Bellek türü: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Bellek türü: Bilinmiyor." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Bellek bilgilerini yazdır." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MODUL1 MODUL2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "bilinmeyen argüman '%s'" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "BÖLÜM KOMUTLARI" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "KULLANICI PAROLASI" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Kullanıcı parolasını ayarla (düz metin). Önerilmez ve güvensizdir." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "PBKDF2 parolası geçersiz" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "KULLANICI PBKDF2_ŞİFRESİ" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Kullanıcı parolası ayarla (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Üretici ve aygıt numaralarına göre aygıt seç." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[üretici]:[aygıt]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Veri yolundaki konumuna göre aygıt seç." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Döndürülen değere bir değişken ayarlayın." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Sürücü belirleyin." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Bölme haritası türünü belirleyin." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Dosya sistemi türünü belirleyin." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Dosya sistemi UUID'sini belirleyin." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Dosya sistemi etiketini belirleyin." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "`%s' dosya sistemi etiketleri desteklemiyor" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "AYGIT" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Aygıt bilgisini al." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Değişkeni kullanıcı girdisi ile ayarla." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Bilgisayarı yeniden başlat." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMARA:]DEĞİŞKEN_ADI" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP ARAMA METNİ" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "REGEXP'in METNE uygunluğunu test et." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "İSİM[ÖNTANIMLI][İPUCU]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Aygıtları dosya göre ara. Eğer DEĞİŞKEN belirli ise bulunan ilk aygıt " +"değişken olarak ayarlanır." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Aygıtları etikete göre ara. Eğer DEĞİŞKEN belirli ise bulunan ilk aygıt " +"değişken olarak ayarlanır." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Aygıtları UUID göre ara. Eğer DEĞİŞKEN belirli ise bulunan ilk aygıt " +"değişken olarak ayarlanır." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Dosyaya göre aygıtlar ara." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Dosya sistemi etiketine göre aygıtlar ara." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Dosya sistemi UUID'sine göre aygıtlar ara." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "İlk aygıt bulunduğunda bir değişken ayarla." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Hiçbir disket sürücüsünü inceleme." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Öncelikle cihazın İPUCU'nu deneyin. Eğer İPUCU virgül ile biterse ayrıca alt " +"bölümleri deneyin." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "İPUCU" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--ipucu İPUCU[--ipucu İPUCU] ...] İSİM" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "PCI aygıtlarını işlet." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Geri sayımı ayrıntıla." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "" + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "SANİYE_SAYISI" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Belirlenen saniye kadar bekle." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "uçbirim belirlenmedi" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "uçbirim `%s' bulunamadı" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Etkin girdi uçbirimleri:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Kullanılabilir girdi uçbirimleri:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Etkin çıktı uçbirimleri:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Kullanılabilir çıktı uçbirimleri:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Bir girdi uçbirimi listele veya seç." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Bir çıktı uçbirimi listele veya seç." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ANLATIM ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Bir anlatım değerlendir." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ANLATIM" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Çoklu yollarla aynı dosyayı yükle." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Her okuma işlemi için boyut belirtin" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "Geçersiz blok boyutu" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Dosya boyutu: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Geçen süre: %d.%03d s \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Hız: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Dosya okuma hızını test et." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "hiçbir komut belirtilmemiş" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Geçen süre: %d.%03d saniye \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Büyük harfe dönüştür." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Küçük harfe dönüştür." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Hiçbir şey yapma, başarılı." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Hiçbir şey yapma, başarısız." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "USB desteğini sına." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Açık anahtar dosyasının imza kontrolünü atla." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "Hatalı imza" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "açık anahtar %08x bulunamadı" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "%s modülü yüklenemedi" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Güvenilen anahtar listesini göster." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Sadece metin " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Siyah-beyaz " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Bilinmeyen video modu " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " EDID sürümü: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Tercih edilen kip: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Kullanılabilir tercih edilen kip yok\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "geçersiz video kipi tanımlaması `%s'" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Desteklenen video modları listesi:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Bilgi mevcut değil" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Video bağdaştırıcı başlatılamadı" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Mümkün olan video modlarını listele.Eğer çözünürlük belirtilmişse sadece " +"uyan modları göster." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "WxH kipinde video alt sistemini test et." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Video alt sistemini sına." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "UUID'e göre bağla." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Hepsini bağla." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Bir şifreli aygıt bağla." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "%s fiziksel birimi bulunamadı" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "`%s' okunurken zaman aşımı" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Sha256 yüklenemedi" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Sha512 yüklenemedi" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "CD-ROM'a yazılamadı" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "" + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Bir dosyadan sanal bir sürücü oluştur." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "EFI taklitçisini yükle ve başlat." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "EFI modülatörünün yüklenmesini sonuçlandır." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "EFI emülatörünü kaldır." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "`%s' sembolü bulunamadı" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Yüklü yazı tipleri:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "DOSYA..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Yüklemek için bir ya da daha fazla yazı tipi dosyası belirtin." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Yüklenmiş yazı tiplerini listele." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "bir dizin değil" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "düzenli bir dosya değil" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "core.img dosyanız normalden büyük. Ayrılan alana sığmıyor." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "`%s' geçersiz dosya adı" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "MAC doğrulaması başarısız" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Girdiyi ham olarak kabul et." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Girdiyi hex olarak kabul et." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Girdiyi şifre cümlesi olarak kabul et." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "ZFS parolası girin: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [DOSYA]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Sanal aygıt kaldırıldı" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Sanal aygıt hatalı" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Sanal aygıt çevrimdışı" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Sanal aygıt düşürülmüş" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Sanal aygıt çevrimiçi" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Hatalı sanal aygıt: tip mevcut değil" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Önyükleme konumu: mevcut değil\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Önyükleme konumu: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Konum: mevcut değil" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Yol: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Bilinmeyen sanal aygıt türü: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "hiçbir sanal aygıt ağacı mevcut değil" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "DOSYA SİSTEMİ [DEĞİŞKEN]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Şimdi uzaktan hata ayıklayıcıya bağlanın lütfen." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "GDB stub'ı belirtilen portta başlat" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Diziyi kullanılan ayarları kullanarak çevirir." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Seçilen İşletim Sistemine girmek için Enter'a, önyüklemeden önce komutları " +"düzenlemek için `e' tuşuna veya komut satırı için `c' tuşuna basın. Önceki " +"menüye dönmek için ESC'ye basın." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Seçilen İşletim Sistemine girmek için Enter'a, önyüklemeden önce komutları " +"düzenlemek için `e' tuşuna veya komut satırı için `c' tuşuna basın." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: önyükle, `e': seçenekler, `c': komut-satırı" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "İşaretli girdi %ds içinde otomatik olarak çalıştırılacak." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "%ds kaldı" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "GRUB Önyükleme Menüsü" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: %s değeri %s değerinden küçük ya da ona eşit" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parametresi ile bir değer vermek gerekir" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: ARGP_HELP_FMT parametresi pozitif olmalı" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: ARGP_HELP_FMT parametresi bilinmiyor" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Uzun seçeneklerdeki argümanlar zorunlu olsun olmasın kısa seçeneklerde de " +"geçerlidir." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " veya: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [SEÇENEK...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Daha fazla bilgi için `''%s --help' veya `%s --usage' komutlarını deneyin.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Hataları %s 'e bildirin.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Bilinmeyen sistem hatası" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "bu yardım listesini ver" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "kısa bir kullanım iletisi ver" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "İSİM" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "program adını ayarla" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "SN" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "SANİYE saniye bekler (öntanımlı 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "program sürümünü yazdır" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAM HATASI) Sürüm bilinmiyor!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Çok fazla argüman var\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAM HATASI) Bu tanınan bir seçenek olmalıydı!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: `--%s' seçeneği argümansız kullanılır\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: seçenek `%c%s' argümansız kullanılır\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: `--%s' seçeneği bilinmiyor\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: `%c%s' seçeneği bilinmiyor\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: geçersiz seçenek -- %c\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: seçenek bir argümanla kullanılır -- %c\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: `-W %s' seçeneği belirsiz\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: `-W %s' seçeneği argümansız kullanılır\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Başarılı" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Eşleşme yok" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Geçersiz düzenli ifade" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Geçersiz karşılaştırma karakteri" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Geçersiz karakter sınıfı adı" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Geriye başvuru geçersiz" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Eşleşmedi [ ya da [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Eşleşmedi ( ya da \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Eşleşmedi \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "\\{\\} içeriği geçersiz" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Bellek tükendi" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Düzenli ifadenin sonu eksik" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Düzenli ifade çok büyük" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Eşleşmedi ) ya da \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "bilinmeyen düzenli ifade hatası" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Önceki düzenli ifade yok" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Merhaba Dünya" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "desteklenmeyen gzip biçimi" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "lzop dosyası bozuk" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "xz dosyası bozuk veya desteklenmeyen blok seçenekleri" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ORTAM_DEĞİŞKENİ=DEĞER]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Bir çevresel değişken ayarla." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ORTAM_DEĞİŞKENİ" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Bir çevresel değişken kaldır." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Aygıtları ya da dosyaları listele." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Bir birim ekle." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "disk `%s' bulunamadı" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "disk bölümünün dışından okuma veya dışına yazma girişimi" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "aygıt sayısı sınırı aşıyor" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"device.map içindeki `%s' sürücü adı geçersiz. Bunun yerine %s kullanılıyor. " +"Lütfen şu biçimi kullanın: [hfc]d[0-9]* (örn. `hd0' veya `cd')" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "açılamıyor `%s': %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "AYGIT_ADI" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Kök aygıtı ayarla." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "" + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Konut satırı argümanlarını ayrıştırmada sorun.\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: uyarı:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: bilgi:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: hata:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "`%s' dosyası çok büyük" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "bilinmeyen dosya sistemi" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Kapatma başarısız" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Çıkış başarısız" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "taşma belirlendi" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Bilinmeyen komut `%s'.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Bu yardımı göster ve çık." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Bu komutun kullanımını göster ve çık." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "`%s' için zorunlu seçenek eksik" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "`%s' bağımsız değişkeni bir tamsayı gerektiriyor" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB bu makineyi nasıl durduracağını henüz bilmiyor!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "geçersiz renk tanımlaması `%s'" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Yeniden başlatma başarısız" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Linux'u yükle." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "initrd yükle." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "" + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +#, fuzzy +msgid "you need to load the Xen Hypervisor first" +msgstr "önce kerneli yüklemelisiniz" + +#: grub-core/loader/arm64/xen_boot.c:488 +#, fuzzy +msgid "Load a xen hypervisor." +msgstr "%s, Xen hypervisor ile" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "Modül yükle" + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "BIOS tabanlı sistemi önyükle." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Başka bir başlangıç yükleyici ekle." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Tüm konsolların çıktısını göster." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Sıralı konsol kullan." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Yeniden başlatılacak dosya ismini sor." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "CD-ROM'u root olarak kullan." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Kullanıcı yapılandırma yönlendirmesini çağır." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Başlangıçta KDB'de gir." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "DDB yerine GDB uzak hata ayıklayıcısını kullan." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Tüm önyükleme çıkışlarını etkisizleştir." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Her çıktı satırından sonra tuşa basılmasını bekle." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Tekli kipte başlat." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Ayrıntılı olarak başlat." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Yeniden başlatma, sadece kapat." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Yapılandırılan aygıtları değiştir." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comAYGIT[,HIZ]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "SMP'i etkisizleştir." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "ACPI'i etkisizleştir." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Önyükleme tanısal iletilerini gösterme." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Hata iletileriyle birlikte önyükle." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADDR|comAYGIT][,HIZ]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "isim" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "tür" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "boyut" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "FreeBSD çekirdeğini yükle." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "OpenBSD çekirdeğini yükle." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "NetBSD çekirdeğini yükle." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "FreeBSD env yükle." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "FreeBSD çekirdek birimini yükle." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "NetBSD çekirdek birimini yükle." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "NetBSD çekirdek birimini yükle (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "FreeBSD çekirdek birimini yükle (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "`%s' boyutu çok büyük" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "" + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "NTLDR veya BootMGR'yi yükle." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Plan9 çekirdeğini yükle." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "PXE kalıbı yükle." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Truecrypt ISO kalıbı yükle." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd zaten yüklenmiş" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Modül yükle" + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "xnu'yu çalıştırmak için bir tuşa basın" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "FPSWA bulunamadı" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "FPSWA revizyon: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "FPSWA sürümünü görüntüle." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Çoklu önyükleme 2 çekirdeğini yükle." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Çoklu önyükleme 2 birimini yükle." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Çoklu önyükleme çekirdeğini yükle." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Çoklu önyükleme birimini yükle." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Arkaplan görüntü kipi." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch(=%UZAT%)|normal(=%NORMAL%)" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "XNU kalıbını yükle." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "64-bit XNU kalıbını yükle." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "XNU uzantı paketini yükle." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "XNU uzantısı yükle." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIRECTORY [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "XNU uzantı dizinini yükle." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "XNU için bir açılış kalıbı kullan." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADDR1,MASKE1[,ADDR2,MASKE2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "BAŞLANGIÇ[K|M|G] BİTİŞ[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Belirtilen aralıktaki tüm hafıza bölgelerini sil." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "dört bağımsız değişken bekleniyor" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "bilinmeyen ağ arayüzü `%s'" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "DHCP bilgisi bulunamadı" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "DHCP seçenekleri bulunamadı" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "bilinmeyen DHCP seçeneği biçimi tanımlaması `%s'" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "ağ arayüzü bulunamadı" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "%s otomatik olarak yapılandırılamıyor" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[KART]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "bootp otomatik yapılandırması gerçekleştir" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "DNS sunucusu yapılandırılmadı" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "DNS kaydı bulunamadı" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "sadece ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "sadece ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "ipv4 tercih et" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "ipv6 tercih et" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "geçersiz bağımsız değişken" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "DNSSUNUCU ADRESİ" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Bir DNS araması yap" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "DNSSUNUCU" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Bir DNS sunucusu ekle" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Bir DNS sunucusunu kaldır" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "DNS sunucuları listesi" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "ağ paketi gönderilemiyor" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +#, fuzzy +msgid "interpret is not supported" +msgstr "16-bit korunmuş arayüz destekleniyor\n" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "desteklenmeyen HTTP hatası %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "`%s' açılırken zaman aşımı" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "zaman aşımı: donanım adresi çözülemiyor" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "çözülemeyen adres %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "bilinmeyen ağ adresi `%s'" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "hedef ulaşılamaz" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "adres bulunamadı" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "bu adresi silemezsiniz" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Desteklenmeyen donanım adres türü %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "%d desteklenmeyen adres türü\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "üç bağımsız değişken bekleniyor" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "kart bulunamadı" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "geçici" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "%d bilinmeyen adres türü\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "sunucu belirtilmemiş" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "`%s' okunurken zaman aşımı" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Bir ağ adresi ekle." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Bir ağ adresi sil." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Ağ yönlendirmesi ekle." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Ağ yönlendirmesi sil." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "ağ yönlendirmelerini listele" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "ağ arayüzlerini listele" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "ağ adreslerini listele" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "bağlantı reddedildi" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "bağlantı zaman aşımı" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Kullanıcı adı gir: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[KULLANICILİSTESİ]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Olası komutlar:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Olası aygıtlar:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Olası dosyalar:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Olası bölümler:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Olası bağımsız değişkenler:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Olası şeyler:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Uyarı: `%s' içerisinde söz dizimi hatası (eksik / işareti)\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Uyarı: geçersiz '%s' ön plan rengi\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Uyarı: geçersiz '%s' arkaplan rengi\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ORATM_DEĞİŞKENİ [ORATM_DEĞİŞKENİ] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Değişkenleri dışa aktar." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Pazar" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Pazartesi" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Salı" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Çarşamba" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Perşembe" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Cuma" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Cumartesi" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "modül yüklenemedi" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB sürümü %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "ESC her an mevcut." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"En küçük BASH benzeri satır düzeni desteklenir. İlk kelime için, SEKME " +"mümkün olan komutları listeler. Herhangi bir yerde bile SEKME ile var olan " +"aygıt veya dosyalar listelenir. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Ekranı temizle." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Normal kipe gir." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Normal kipten çık" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Devam etmek için herhangi bir tuşa basın..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "`%s' önyükleniyor" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "`%s' geri dönülemiyor" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "" +"Varsayılan ve son çare girdilerinin hiçbiri ile sistem başlatılamadı.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Bir komut listesini önyüklüyor" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"En düşük seviye Emac benzeri ekran düzenlemesi desteklenir. Liste " +"tamamlamaları için SEKME tuşuna basın. Açılış yapmak için CTRL+X veya F10 " +"tuşuna basın, komut satırı için CTRL+C veya F2 tuşuna basın veya ESC tuşu " +"ile düzenlemeyi iptal edip GRUB menüsüne dönün." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Vurgulanacak girdiyi seçmek için %C ve %C tuşlarını kullanın." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TİB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PİB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Bölüm %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Aygıt %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Dosya sistemine ulaşılamadı" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Dosya sistemi türü %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Son değişiklik zamanı %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Bilinen dosya sistemi bulunamadı" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Bölüm %llu%sKiB konumunda başlıyor" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Sektör boyutu %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Toplam boyut bilinmiyor" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Toplam boyut %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--DEVAMI--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "yapılandırma dosyası açılamıyor `%s': %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "şifrelenmiş birim bağlanamıyor `%s': %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "geom açılamıyor" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "GRUB'daki çekirdek kalıp olan `%s' okunmaya çalışılıyor" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "GRUB'daki çekirdek kalıp olan `%s' tekrar okunmaya çalışılıyor" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "`%s' düzgün biçimde okunamıyor" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "`%s' bir yerel disk değil" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +#, fuzzy +msgid "invalid zero blocksize" +msgstr "Geçersiz blok boyutu" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "ioctl RAID_VERSION hatası: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "desteklenmeyen RAID sürümü: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "bilinmeyen RAID aygıtı türü `%s'" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, fuzzy, c-format +msgid "unknown device type %s" +msgstr "%s bilinmeyen aygıt türü\n" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Kullanım: %s AYGIT\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "özgün dizin geri yüklenemiyor" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "geçici dosya oluşturulamıyor: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "geçici dizin oluşturulamıyor: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: bulunamadı" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "rasgele veri alınamıyor" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "beklenmeyen EFI hatası" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Boş BootNNNN yuvası bulunamadı" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Disk bölümünü etkinleştir" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "birincil bölüm değil" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "%d bölümü etkinleştirildi. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Bölüm türünü değiştir" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "disk bölümü türü 0x%x geçerli değil" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Disk bölümü türü ayarlanıyor 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "geçersiz değişken adı `%s'" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "beklenmeyen dosya sonu" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Döngülerden çık." + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Döngülere devam et." + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Konumsal parametreler kaydır." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[DEĞER]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Pozisyonal parametreleri belirle." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Bir fonksiyonla dön." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] DOSYA" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Arka plan resmini aktif konsol için yükle." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "RENK" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Etkin uçbirim arkaplan rengini ayarla" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Seri birimini ayarla." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Dizisel bağlantı noktası adresini ayarla." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Dizisel bağlantı noktası hızını ayarla." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Dizisel bağlantı noktası kelime uzunluğunu ayarla." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Dizisel bağlantı noktası eşliğini ayarla." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Seri yuva durdurma bitlerini ayarla." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "RTS/CTS etkinleştir/devre dışı bırak." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "seri bağlantı noktası `%s' bulunamadı" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "desteklenmeyen seri bağlantı noktası akış kontrolü" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[SEÇENEKLER...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Seri portu yapılandır" + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Bilinmeyen kodlama" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Konsol sadece ASCII olarak tanımlıdır." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Konsol mantıksal olarak UTF-8 olarak emredildi." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Konsol görsel olarak UTF-8 olarak emredildi." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "GENİŞLİK X YÜKSEKLİK" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] TERMİNAL [TÜR]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "TERMİNAL'in terminfo tipini TÜR olarak ayarla.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Blok argümanını yazdır ve çalıştır." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " VBE bilgisi: sürüm: %d.%d OEM yazılım gözden geçirmesi: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " toplam bellek: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "uygun video kipi bulunamadı" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "erişim engellendi" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MODÜLLER" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "TEMALAR" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "YAZI TİPLERİ" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "GRUB dosyalarını sıkıştır [isteğe bağlı]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "%s dosyasının adı %s olarak değiştirilemiyor" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Komutlar:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Boş bir çevresel öbek dosyası oluştur." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Mevcut değişkenleri listele." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Değişkenleri ayarla." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Değişkenleri sil." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Seçenekler:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "En az bir komut belirlemeniz gerekir.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "DOSYA ADI KOMUTU" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Ortam bloğu düzenleme aracı." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "%s geçersiz parametre" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "geçersiz atlama değeri %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "%llu ofsetinde okuma hatası: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "standart çıktıya yazılamıyor: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "%llu. ofsette karşılaştırma hatası" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "İşletim sistemi dosyası %s açma hatası: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PATH" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "PATH'teki dosyaları listele." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp DOSYA LOKAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "DOSYA'yı YEREL yerel dosyasına kopyala." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp DOSYA KONUMU" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "DOSYA'yı YEREL yerel dosyası ile karşılaştır." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex DOSYA" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "" + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc DOSYA" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "DOSYA nın crc32 kontrol değeri" + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist DOSYA" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Yasaklı DOSYA listesini gösterir." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "çıktı dosyasından N byte atla" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Çıkış dosyasındaki N bayt'ı işle." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Girdi dosyalarının sayısını belirtin." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Hata ayıklama ortamı değişkeni ayarla." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Şifrelenmiş aygıtları bağlayın." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Sıkıştırılmamış veri." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Geçersiz disk sayımı.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Disk sayısı disk listesinden önce gelmelidir.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Hiçbir komut belirlenmedi.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Komut vermek için yeterli girdi yok.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Geçersiz komut %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE_PATH KOMUTLAR" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Dosya sistemi sürücüsü için hata ayıklama aracı." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[SEÇENEKLER]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "dizin açılamıyor `%s': %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "silinemiyor `%s': %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Bilinmeyen sıkıştırma biçimi %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Tanınmayan sıkıştırma `%s'" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "bilinmeyen hedef biçim %s\n" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "`%s-%s' bilinmeyen platform" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "HEDEF" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "aygıt haritası mevcutsa sil" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "sorun tespit edilse bile kur" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"kurulum aygıtı kaldırılabilir. Bu seçenek sadece EFI üzerinde kullanılabilir." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "Kimlik" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "etiket için RENK kullan" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "arkaplan etiketi için RENK kullan" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "EFI dizini bulunamıyor" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, fuzzy, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s EFI disk bölümü gibi görünmüyor.\n" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Bir böcek buldunuz" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Dosya oluşturulamıyor: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Kurulum tamamlandı. Hata bildirilmedi." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Aygıt için yol tanımlanmadı.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Freetype Hatası %d 0x%x kabartması U+0x%x%s için yükleniyor" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Desteklenmeyen yer değiştirme türü: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Desteklenmeyen yer değiştirme tanımlaması: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "UYARI: yazı tipi özellik parametresi desteklenmiyor : %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "yazı tipi aralığını ayarla" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "yazı tipi ailesi adını ayarla" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "BOYUT" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "yazı tipi boyutunu ayarla" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "kalın yazı tipine çevir" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "yüklenirken bir eşlem vuruşlarını yoksay" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "geçersiz yazı tipi aralığı" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[SEÇENEKLER] YAZITİPİ_DOSYALARI" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "çıktı dosyası belirtilmelidir" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "bir dizin değil" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "BİÇİM" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "kullanılabilir biçimler:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "bilinmeyen hedef biçim %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[SEÇENEK]... [MODÜLLER]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Hedef biçimi belirtilmemiş (-O seçeneğini kullanın)." + +#: util/grub-mkimage.c:273 +#, fuzzy +msgid "Prefix not specified (use the -p option)." +msgstr "Hedef biçimi belirtilmemiş (-O seçeneğini kullanın)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "HATA: geçerli klavye yerleşimi bulunamadı. Girdiyi denetleyin.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, fuzzy, c-format +msgid "unsupported platform %s" +msgstr "%s desteklenmeyen platform\n" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "şifre okunmasında hata" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Parolanızı tekrar girin: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "parolalar eşleşmiyor" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Konum tanımlanmamış.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "KONUM" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ROM kalıplarını DİZİNe kaydet [isteğe bağlı]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[SEÇENEK] KAYNAK..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "%s desteği etkinleştiriliyor ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "bir görüntü ve bağlama noktası gerekli" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[SEÇENEK]... [YOL|AYGIT]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "metin için RENK kullan" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "arkaplan için RENK kullan" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Eksik bağımsız değişkenler\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[YOL]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Sözdizim hatası satır %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Hiçbir aygıt belirlenmedi.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Kalıpları DEVICE'den önyükleme yapmak için yapılandır.\n" +"\n" +"Normal olarak bu programı çalıştırmanız önerilmez. Bunu yerine grub-install " +"Kullanın." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "AYGIT bir OS aygıtı olmalı (ör /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Geçersiz aygıt `%s'.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "syslinux yapılandırmasını GRUB'a dönüştür." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "çekirdek görüntüsü sıkıştırılamaz" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, fuzzy, c-format +msgid "unknown compression %d" +msgstr "bilinmeyen sıkıştırma %d\n" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Çözücü çok büyük" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "çekirdek görüntüsü çok büyük (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img boyutu %u bayt olmalı" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img bilinen iyi sürümle eşleşmiyor. kendi riskinizle devam edin" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "aygıt yazılımı görüntüsü çok büyük" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "geçersiz satır biçimi: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "çekirdek dosyanın ilk bölümü bölüm-hizalı değil" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "non-sector-aligned verisi ana dosyada bulundu" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "çekirdek dosyasının bölümleri çok fazla parçalanmış" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "`%s'nin boyutu %u değil" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "`%s' boyutu çok küçük" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"GRUB'u birden çok bölümlendirme kısmı veya bölümlendirme kısmı ve dosyası " +"olan diske yükleme girişimi yapılıyor. Bu henüz sağlanmıyor." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"dosya sistemini %s de kimliklendirmek imkansızdır; güvenlik denetimi " +"yürütülemez" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s, DOS-türevi başlangıç için yedek alan ayırmayan bir %s dosya sistemini " +"içeriyor. Buraya GRUB yükleme, eğer değişken veri grub-setup (--skip-fs-" +"probe bu denetimi etkisizleştirir, kendi seçiminizi yapın) tarafından " +"üzerine yazılmışsa FILESYSTEM DESTRUCTION sonucunu verebilir." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s içeriyor gibi bir %s bölüm haritası DOS-stili başlatma için alan ayırması " +"bilimeyen. GRUBu oraya yüklemek DOSYA SİSTEMİ BOZULMASI sonucunu ortaya " +"çıkarabilir eğer değer verisi grub-yükle tarafından üstüne yazılmışsa (--" +"skip-fs-probe bu taramayı kapatır, risk kendi sorumluluğunuzdadır)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"GRUB'u bölümlendirilmemiş bir diske veya bölüme yükleme çalışması. Bu KÖTÜ " +"bir fikir." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"GRUB birden fazla disk bölümü etiketi içeren bir diske kurulmaya " +"çalışılıyor. Bu özellik henüz desteklenmiyor." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Yerleştirilmiş alan anormal küçüklükte. core.img sığmayacaktır." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "bu çekirdek kalıpta sonlandırıcı yok" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "core.img sürüm uyuşmazlığı" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "%s üzerindeki dosya sistemi belirlenemiyor" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "gömme mümkün değil, fakat bu çapraz-disk yüklemesi için gerekli" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"İçe gömme mümkün değil. Bu kurulumsa GRUB sadece blocklist kullanarak " +"yüklenebilir. Bununla birlite blocklist sağlıksızdır ve kullanılmamaları " +"tavsiye edilir." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "engelli listeleri ile devam etmeyecek" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "sürüm bilgisini yazdır ve çık" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: seçenek bir argüman gerektiriyor -- `%s'\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Kullanım: %s [SEÇENEK]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Bir grub yapılandırma dosyası oluştur" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "`%s' tanımlanmamış seçenek\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +#, fuzzy +msgid "%s: Not found.\\n" +msgstr "%s: bulunamadı" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Grub yapılandırma dosyası oluşturuluyor ..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "bitti" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Uyarı:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Kullanım: %s [SEÇENEK] MENÜ_GİRDİSİ\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Birden fazla menü girdisi mi?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Menü girdisi tanımlanmamış." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "GRUB için varsayılan önyükleme menü girdisini ayarla." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Bulunan tema: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Bulunan arka plan: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Desteklenmeyen görüntü biçimi" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Bulunan Hurd modülü: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, Hurd %s ile (kurtarma kipi)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Lütfen GRUB_DEFAULT için eski `%s' başlığını kullanmayın, `%s' (2.00 " +"sürümlerinden öncesi için) veya `%s' (2.00 veya sonrası için) kullanın." + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "GNU Mach Yükleniyor ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Hurd yükleniyor ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "%s için gelişmiş seçenekler" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Illumos çekirdeği yükleniyor ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "kFreeBSD ile %s, %s (kurtarma kipi)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, kFreeBSD %s ile" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "FreeBSD %s çekirdeği yükleniyor..." + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Bulunan FreeBSD çekirdeği: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Bulunan çekirdek modülü dizini: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, Linux %s ile (kurtarma kipi)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, Linux %s ile" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Linux %s yükleniyor ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Başlangıç ramdiski yükleniyor ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Bulunan linux kalıbı: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Bulunan initrd kalıbı: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s çekirdeği ile %s (%s üzerinden, kurtarma kipi)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s çekirdeği ile %s (%s üzerinden)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Bulunan NetBSD çekirdeği: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (yükleyici)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (yükleyici)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Bulunan %s, %s (%s) üzerinde\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(%s üzerinde)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, Xen %s ve Linux %s ile (kurtarma kipi)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, Xen ile %s ve Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, Xen hypervisor ile" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Xen %s yükleniyor ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Xen hypervisor, sürüm %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "%s için gelişmiş seçenekler (Xen hypervisor ile)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Bulunan %s, %s üzerinde\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s henüz grub-mkconfig tarafından desteklenmiyor.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Desteklenmeyen yer değiştirme bayrağı: 0x%x\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "çekirdek kalıbın ilk bölümünde okuma hatası" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "`%s' başarısız.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "grub.cfg oluşturuluyor ..." diff --git a/po/uk.gmo b/po/uk.gmo new file mode 100644 index 0000000000000000000000000000000000000000..aa25fcdbe773dd8a07d2c0d8f2ba65f08546e835 GIT binary patch literal 174051 zcmdqKcVJZ2+PA$EDH4h_LHY&>1WBP+DQQ3?At4D(>Li&INitz30is}`*b5#TDmE1L z*u~zkV(-0S?_IGMe6QbHYm%VgbI$iY??3N8?p*s`z1-_wW$)p<)v?)G9#?8}&+7^M zALMzhT6$h$ptJ_yHtY&-gk9icus?hUc7n~9dEO}44Yq)Jur-_m zTft)323Em7@Nn1>o(GlgwQzs99V*-#Fd2U0*fs2V@yJu)KClwDgEg>OjOQKYxGv&( zEs;;Cr7ZZLUgvpZ;MGv^KY*iQ+;Y-_X^{WC6ZkV2dMiAyJxGK;oB%t(MX)cdfoivZ z!9;jH>tPan1^Tf0;hvWO2RP=!LC7ni^4skA095qrhrQuXFcx-MW&5KWRCy;kxy;F@ zz-GAL0_jfgPS^|H4b{%CJAMrnuGwnaPpzQzt_M`T20HhtQ0+Dks=dpg%DuvI9UP8) zI%H^g+oAgL38;Sg1|9(SJ<{r3U+5zbf$GnhunR1LDqlTRyi=k2;d0m$z6hm9-$I4! zbd>Ga1SmNJYW&TE$HCQb32c6}=N$@5VRv{x>;d0|YM-B>#>KBt<=6#PkNuCa{m}!; zy+7;)$HO6T9#p+ggevbg*bTl675*D1w_IcM>kHLx6QKMLf$HY~RQs-Q?(3n(=O(EB zxf-fGH#qlOVLbA7*c*NhWk=%H+Vpxur9T3yzSEt1DO9?vpvKclQ0;#qRQa!m8gGw4 z)$2Pb{Tr~(^D^OFm<}(52gCQE{QIo;ykT%ARQs%h%6BvD1Mh+Aza7wrze1I}$Fa6u z#yQT0iXVpZ-{5#X9F6=mRDLb!T=|cIvO9B}ycR0{W_TdH52_p=z>)Az=RfjzTb=^w z<6Z-$XQw;)UZ`@v0~Oyp!H(Y^a17!^sQg#J4)AQK`dtZI!R=7_KLb^solx!F;Y6Em zf5!}{eky_Lmm}aHcp_B#H$%mL!SP$z4|%_nm?PjYD7|0nxDif6z7`IEKSK3uuaoV( zG7|PhJ{Ts#MX)tI3GM^WfvU&(uob)=D*OZRAou}Pdi$MX?an}`{Bxn&p#)0*mqUfy z0Qo&=TdQmFDB2SacRR6p;3 zx=nX1RKMjx8C3m`g3`B3;UxGtR6XO)rtRS{C_Rh7{oqlKr@=1B7r_qjR;YX*g+t)y zuo>)mj+-|ehrrRePl7Gs3aIptf-3JxaDTYTxo?Hdk+(s$=R;8GKLIo*1b3EhWiMp^3Q+=z#vpV9SM8E z&9E!H531g;!lCdpDErg%LfcMLU<`5&RK0Vd>Rkd;V8qFnLglv=_JohYk?i>8+9eECX4PFYRH>)qU{+B`Jb01VXFG1O*@1XkcM>rb(4m040ORRp>J01z8cWYrD zyc#P1-=XxQ$7XBS214aC6vo0SP~ozm^r0MXfU6waUTV|55UTzUL-q4ZQ2h{dnJs@u zsP;>SD*s$K7S=(v&-KpzVJLg>K2$mWgzAsZTWmijLb<2G{%{UdKdpk@;i*vN{5R|e z?}0J!9jJP~2W1bwf*P;C!F^!=%WXR*K#iMZsQ9Cx>N5`}!Szsja}!j3pMy zbgqCZ=QbyQ29>u_=QmQsex*r6QI&N3;OUHsCIn{YMgxnRnFgF zFSy@THk~9W_bjM<7s3&+3aTEPq4K{Us{SuPrTe*Ki>qxp`Z|t-(vt$H^3*`(e;oAT zc~JGZ3u;{NfXeSDm;)29vG(b3DF17r%KHdB2!061!1mW#eaM2!XEs#%s+_#u$(vvs z+;4`%;r&qh_X8XZyI*JZatdsVJm1L`jz>b3{|u;hza0AT0jP4l52e>J*IRw<0#%L! zU}kJ0g#ViZ=tQol2nE^#~~aKMQIcT@IVWs~{@q-2iWg^KQ23biBptNjy|N z#=_QcGE_TcL#2BdR6gtAKzKfkgAc-X@M*X|+yR@xolxcf8LIu;-)hU#8+JhM2UV{T za2lKmv*CGA_4^pAUw(!A!7jJidfnL!RH$^fIz9vUMg9VIfj>YW zwxJQ!Pf1X6Hk3Y9L5=6bVFJ7WsvHkH|M#Hs{~9X){qL}PodT6l5j+4cg(}ZFDE+S&GoaeP*l`V1{VsuB;X|++eACH4LZ#nsn@uMkD&O%??VSsi zZaGx>S3|YW6)*swfIVT-y|zCOfn~_0a2no`8 z{s}c6`rVHX!$V*XxCtt~+o9q=57j>(LAAs8Q00kxz;d8thGPIKog*F3gKC#sq0)I8 z`tVJtdjA2XR~;X;?(wiY@)W3c2tbu%JyiM6g?->vQ1yHqs=Pl#h3oi`t=|Axgq#J{ zuGc`7|7EE1d;yhDv+Z`D)(5ITvSBkAgwngiU_V$3dsaY|^8~2=y~)YXI{8;8cYV^f zS1MGzYN&QQ6{k6l zp^uyg)$Yrn#__RG@qUKm;Qr58JCX<6Ay>mCa5YqU-+~Ii3u;{Uc-HF0FsOW|L8V^; zhroKMa$E&_!R_!s_&!v)me1MvJ)!C`3=V(`pu(+%N$?7&d|!e}?>pEVwte2}MIu!G zlc3U>5BG!XVLUv`@h+H%{4P{~wtK@Mm0q70tzAulioXbU zfXBklaHDg-7OKBqg3|wAVQbjyC0ma{ur2ZwI1CoTneaGx5PS``gw0;IT$kY8)N}4~7{|J_aiO`B43EBb*3dfg0ysUbpj2AJ`oEKqx&M z1P_2&up=yjC9n>veO`wNu=yLdKa-)t&v&eas_!XK?XnH3J%4~|_dj4~*!oRt_k5`Q zN5F1y98~;5sQlMM)q5jUyW9!e!&jmD`BSL;+wHL9VjxtwiBRDdz@D%QN*_*yigztk zyyv0H^EvDUy|-*Xb%t^u3Dqx$I4*FkhHY>^8uo&x!0zyB*cCnumG4_n`uZDG`yTkV z%{LtmMqU6_uH&Kf=4vQ?+X|KMn^5V01^d7@@7QuBLX|faD*aioH(U*s?urE9V4uZEp>HXVK<=Y9>p57Ps+@~W{`HG>&(<*4j3#>-I15SYnU$SO~A*ga} zgZPi1fx`d`>CH;$ z!!x1u?-m#jpMnav6Apkazq9EjL+Q&jI0TkLAD#o%uD3(w_Yzb;e*s6s7CUWwO@zv) z3XXv5q1xk4D0}u6R62h^=~MUbt^G)W@}C1WE|$a2@N}qty&S6C4?FiS9Akd4<>>;| zPDxPdOo3{rAk;Xhh01p|OoZn-|3~0{$S*^+*GEwCV}G>$)YowY?2P+VsQN5`s{hfB z=fTCuH$&N(&Oh1o=0KG{0z1Mppz3!y>;mtH%J)^McK;r#KRW(w%R3fIKW0PKqXa5k z6+8r<1S{anQ01BYi;aIM?23F0RDS2e(eP%d`hEdB!QbI{*#1|m*V%9|@}*GY;~Cfu zeg{>qHosXt8xB?eSuhMMp~lhMa0~nZs+=eOZpY1)a2oQfP~)-hADrdGaySFN16AIX zU3MHyg*}jKU~70X%z_)C#>IQE18noB9e2H<`ZXO6gf;L0xDiTkZiLO@D^T^`0o9-1 zI=O`xW76vm`{SMnmCj6f5Uht9pO-!I?! z7|L$k4Asu>L6xgrtj)JGR6mb}YX3B-a6z~~JRK^%D_{nE07?&9?ql=IhrN-jq3V4K zR5~}ovG8T6`0e=^MCBd~eV7gvt^~G+$3f}qM(2MuRQaETs{cDs{r@XexDL&2di|mN z4~A;r+0K0_RK9DW%5@=B`#l7e&I?fG{tQZQTD6EV<8>fZ_zb9Uhe73c3{-i}ge~Ef zPQC%oM}El3J|DTrE{=fGhuKi^LQwj;7RoLh58J>kQ0Z@lYM<>;?Y;vl-cBdC+}GB# z7fiu@G#m}f;0Sn;bAJ&k{bsFfdVQh#e=L-Kl)=exEmXTd1eM=Qa5(%Ns@{F#tbUGy zN^csJz6GJe*TFvUBsdga?fiE@)#FR3dNprt`{e+rcuBAoOn1zI_ao1NvOC?{*z^WM z^~*e{d0_=q|6U1|&OK1=`~p$DgBsUYINk)6&b?6m^b%Bg zzk+I)n0B`Q9ij5=4;6nbRDPLI?NJC7zQoCOPF@dXFV2SQ=PRM|y9LUwJpt7p-$9kT z-F~)z2SC+(GE}~cpzJ~fD&F}}={*3m;WJR>0Z#GnW)k5jd7N~Z*14`fDfGXFo zQ2pJegKe+LQ28x{@()ARZyi+q&UF4;pz41oRDV4NH9x)L_#2cx>(kN3&wz?w2vzBzT0)hDKl9cS@Sc4QV*ztlLM3RRzL;4Jt8oD2tb zjWOo|he7Gp-B9Iz397!IL)lmF0Nd_~Fds1ssy{cuWcVr6I6R=6ZHE*%1$hKidPhK| zcREzK%boi@PJY4hGbp`|>2B?AXQ+51p~`m%RQnY})pIo*1~)?K%@a`V@g-D0b?9OH zDITg{CqT8!45)M}q3pu3Q2lwi<2ES0co|9$e}jtGy{Db$#z5s0fGXE|sQfO33cnSq z9?wC|#~(o1rFOk+K7*mkpAHpo5!AQ|JD%tG05oBZSl<+%rH9K8zFub)8W)77{27zq`BF-(KUK=t!O zFcY@!Yu#tU{8+{zRJlGrFvjdR{r*-@mq6Kp4N!LFaVUNM2&zAZ#m9Ju!F(wDdk<7S z9)W7Fx1suPCmapi4zS}V6RMq-!jW(jl)gO=RlZN5%9}FK##;_GZm)wX$4&5N%KZ$S z1J@lC<6Q^eOtj@aDJ8}$Al!DSa&{XMW6t@m1645g>lQ0;pO z91d@Us>g?L0{jz7uOM!B z+HLMgr}t3pcC3@P!3yM8;ar$D%F5?Mjq~QCU4Oud$oIe;_&b~d4;f?a*||{Ve9N)@ zSgSv2P~}_V7>23H>!9*`7^*0&IKa(Egy#z1Iu;C8RwCUXi)t+S(i`kMmP&y%3^a~WI$uY?O=tEskqOQG8BYAE-Q;X;@(EygQ_o1w;0 zt1LS{20^WZ7C_mhE8sZzG*o}JI>e6G888mH0BXD}f@;4ta54NC_J>oa+j3SyrE?*a z-oFOr-yz$Mmr+pZ%!6`Y4b|?OVHiFS*Tc-581G;33Ah<9ni1oj2V-($%=!2xsBttq z&yJV-pz1$(rXAm9j$0hxhiZ?$`7!2v>?kPxxZCkJI2n0dfgLYLINk%-;Ql9E3)d9d z_$_AH`8geGe4Py^!&jm7q}yy;jv9D4@^w)DgXUQKd>B;zSHXGkQ!#u z3#>lOglfl4P~-bmsD2!}(AxD1cqQ`nP!c-Zsfb+ELgwT&R@?!*_Cgh=8M=R zHr?T{2lC0V9lR3ug||V4e+{a?K7(qXX#v}wo8cJbccA9oZbeqFQlad036#A$11j7j zus8IIZMZ&A?rBi%e*~1i-U&6net=pBC6?Ior9!2<5YC4u!!Ga>DEsp#TnhIO+IBhy zYTmd59u3=-+VOfCRQlgQ*{6YJcAk$wxnBU~{vwn<`QbIYv^k?Q$%L`#8^5<|XoLd=VzE5vm6=S|zD}^m$Xn&}AW?QxG zkG3IeUsK=)-0Pw2bzF_L3nO70v4_T@6+4LE#wh6j%@C-!fwD&UiQh zxd^JAFLrze_CnqTrDr{B?fg0eO1=jk48MkIpTxQt?_{_JE`s|lkMYie)lm60TVdyq zF|a#wHq`higR+0;!6JA+RDbqgY3=X^D7$$s^x+*)?fW`x4Tsm;bSFXCvjUh1S3-@) zEl}-qi{k?@8~GX77xp~d&X*IR^eGQ2zf!ma9t$-Oe+-p=$`N)QQV5qJFN2zo-iJze z{3=_omlL(a7F zT6iY%U2qJ{JImVj6QJbnQ2FhGYS)2hTl+i%${rmBWe0AB8fVSVvF(@!_-WS>RP9aqL-3-+ZUqX$`P8Zw!#z4)VRZ#K%4P`Iih8j0WA%6_5A{BUiLRzE`gdqFNO;D99#!~hN}1KORf9OQ1RY?iLl3IHr_O-a@0fF*~_5X z;|1s6bBoo794PnYQ2Ki>%!6$%kMWLx3*p7^HCO=;zryy%2T<)i=t^t1=EEbA?}pOT z@&C5-=bH2)r2gSuhj+2sN$_zS`~!&wy(0ryRd??0Sv0PY1&? z{1?L%_y|-x`~-d2|5~fBnQ$`lGl3- z+zd7D_PNQ*v!U|a0;j;|VQ0p1x0`MIC*NY{k9n{k{#&8+;w3m3?u2T`KDXL-nhE89 zIBWqoLXD$~pwGbjHyi{Xzum_F{!Uw7|1P_)Jrs5!d=<=q>);^x7}WUN2^YgjciVa8 zA}G6jHEZA?|O(d2qx-c3wXfYTdjUYMed`Wfz-ow|Z0v)n9YqzVHO7 z{Ql+SXQ0OGt5EBXKVe7M{bAegN$_msQ(!sl|458?kz}ZLO?uR(p98fnJ_=UB4X`cT z1%24&u^8`Vm;@EC+2eLT>+e_%r9Zbr>Ce5e6MPJ+9e2Q;@OLPE`{oI&C+(iJ{$rrp zVGh)|UGI1;RQ+FqvS%%yvh`1cCCEoX#rptCKRP~b^*$Ra-w^cSsZi~6y>oxuxqk}h z;vV;m?bl-X3Gz*FCfxL_wNGEcUW~Iz&yg=&_`J2F54>RQ%_@o!@I5`8#zT6Ab zVDp!({!D}F|MTHy_yd%^-1xH9vqzw0?-i>@DbPne6i$OjK&AJPlUu%O&uPUJI=_V-q-{N(^%1{lwD~4mhHzBxD5F)sB!Tol>Q8T+v>*{sPQ=)YM!_b zwt>GvjqiQmvGySzwnH8QlJVq{1u)9lirQ-Zh+gN=DX$Z*>=4GY99Iq z(zRad`!VMG_s$<$J_SeMe(Xmv-u3XVkL@~X>8EzQJO&pNfAnXzozH=4ub9tmJB)-m z$j3Rpv@OIxm57(l)UO27JiW&PJf>HF(Y{oeU&TmA)5`Cbdp zgYUuuxau40{wzEnx!Je2{1?N?$h)BI_oVOays{3e9iMVFeV$Nl#2 zW4zPh?@;}D>JQf5X%T!U@+c_#`mN)^KiPTbIL8~{Q2bwm6JYC~?fFs`RQ{L4Vi@y_ zWe`q5ehg|JZ2zm(y9rS3b}~$b??S~p@HcBuj)Q8i>!IxDr%?0vfZy%7n+=u!X;AaT zQ*aji&T-lwwpE&;5H7wX=+x;N?fwpwy&J(Qwif0?mE#c@4`X6t z&H8E}T!_2~&V+ZvEZ8nK*6c&(Lbc;ED1E*gs=vO5x5E+p#G3W(moN@_VY65>9?Icz zcm>pYuVYfIIsY67)emPoJ_D8SzR6afdO*$hhrsr59+ci5 z2BilVLG{;z&c8#7wIltY#zzK}{a6aS!j-Ty+yG^#w?K`*2ch)$7dQbX42d=KLMc?g zoaE%^p!E4isB{vBTKhWzs@&6{>Ng*%UDiV7e=ckZFNcbM9hCif2g<$-85V2av(1C? z$V=hb@N}qhB@DOm=0M3Oz}w;N@Eo{oM65XvZ8g%?{~TC_`yEjE4;*FnWCT0_c@E5n zHI5HDb{QS(ZNj|*mckZetUa%S>Bvt(jfW0nt$iqi^O3hgAGRB3nF3X>Jg9!Ehm+w2 zQ2P58tcC}TxAi*L@d>DQ`~%AFwLjSQ&txe3v>Zxbu5X4)2oD9*KUD|_aT&B*?)4Z`K~$(YQDY`O8*W>wex!p)VO#6 zYJBgPX6O6aQ0Z)dD$jjT_NRS%tZ9c_sByFbsyy4E=F6CjSaaT!?RY%Y`sE?0^2KDv zntf0z?1y|gRR2B(7r>XH+GF?>+x{m&jlZo>_VZ1s^tw*9?u9T5`A8_ee-x@5EvDIe z&V;hd$3p4bTkvssPL^%AqC;%IoDY@G3vfK_HQlB^4@zIx!pU$el)c;ur3V?=cD!tW zs>kh6{kt7r0(Zfe;l(*tuUE{lcIR9;822xs^tfBDwJ()W_U#p@arhHdyY$J6)lVk8 zRq$vyf2N(!-h>+8{qrpkgQ~|3Q2p{Nyb?|*u=eL8Sc_f#2}`?wQIAA8TU?G}NuBUi&RcpsD=B^+w|F9cPdjZppi9#p%H znQ!%T9h{4NJ8TX+EU@`>g^9>%Q1&DQrEh0J_5Xu#G4vMN^~(}C5AiLi{KqV^;f{in zk?)4GpMOBL$Nr10K5c_q*Zcxy*9w=|`TJO?e*74!TzaXok^Iz){>t6)J$j?KyS7y+*!)Z|Y+zB;)JC|C$2t(=R zd2lj(463|wWmfOg;V|TtPQKd7??8>~PUTkr(xLP{1V_QEVK#gZ%KoKP*l{}-N*_1E z0q{Pke)$;6F0?(&jeDqZcs!K7eHgZeaZBxZ?*hL^9t)-a$(43I9ST*htD*9J1IEE- zRkpqMgPNCTLDf41wT`?HD&8|t<@*y#Zw6Ld|3avFemzt_zXqjmBSO~w6ezp$F6;+; z*4XvnBsdoNbhr*a0S|(C%d9;=0&3p65h`9**tSb0RR5j<75+7-`ZSB!c|HkhoE!nW z!}sAJxC^TM3AHx8Jg9m`U|YD^@dn7zgtra$#C_9ps~2}b^;_2!HvJN)bf1LkuOFet zMX!~1ek*~RkJdxY2lv2d;dgKzzJ$`Jj;k!kKW8uGtsYdv!;sI0 zDu2we);|$S4nXz8$x!`rA8Z4^h3()jsQzesoL!HMhLy;NK#iB%;N9?J_!PYCcx%VP zC)oCV6mG!1*@$0KvEIG#9e5AC_+NG&SagQ7=dcCt zzreGgcc$%+v!NLeQ04g%%Ki*I%Z`r%sQKk^sD8QTxpcf?NevuXRxEvja+BI-YCGH4RE%>Y?=T8YsQ*e_pJ4 z-?AK@iu?r(z$4DL{ka25AKGrRlKMJNI-wLO}pJ5oLUTFLK zW+*-Fc9HGxs^Ptk35yBR~VhmGUUwK zeiHF&@OxNk5WXwVExA8bK(3&RHy^*&F0JQq&%?b0x!n0*Lz=Qdy3)B1Mcxm;ex$$2 zxH2{zg}3oL79Ip|l+3*^H%mM3J8s$COGx8n{4a;UAzzF8ugIm8MOO#h-{d|N_x{$& z{5=9UUa6TY9Ws4*Cn3cW?>XY{@8VyI-yrvV0340{F84^D$GP^ri08h zm)?&&>-q@4ErdA_nQ7GPOBy#K&q3z(me;*W*)ouCw$XSOV6S_fzvhkTb)|cF%K2SG zT6dDR4{yQmc63K6>Tkf^y3~*cwHZHYmSW&m)AGuI-IyCx%f{It|#uf$V+%0 zOgPQ4y2g_BQ^-0)91V4`)bLv1{uBHFckNTw5%+4B_88oC{lvYf+-5;qU_;_lC_tJ;NOdE{N@@_8P&rT9%k{?>#- z7l=EObc>M3;GY1m<{roM0WJ*%J%&4%cwKP2kvJE*Gy|mHjyo3l0Qg>$IBybe4Q{&5 za_%9=3tjvwI0^p~xIZLp68=dp&i%wcoI84bkKf(MSGl-y?@8E2xDDriz{N}D`Ce{a zTGL0b5iTBEMDtGW-+27$Jg+3}!L-95?)UNEmwOm#oXEW&@n+$FCC@B}ycfCuKu*T} z9O4h*`7oYiaKDQ%xA8m>w;<1nJo9MI+^6B+jP!GmU*evP-@z~w_s12;T?NSdBcFi3 zu6N8|#vgKP(ril_x|$J=*XCXp_j5d7?85iQ|3GA2cajcETJKMu*EY%HP@dn#t(yyX zAaMiSt%#fI(pUWG^$_8boqGX}UsH|*IcAiT}R1_fmY)(KXHS7}9CW zeV@yxC2@3Vt^68y0`9*Nuip80a@5-VEuN2nceu28^j_q-H{mBs;F>|0_uxp%p^MkX z-kUrxI*`-=ES^86~~^}BaF&pk-wKAzLK|HU(}>&Xs z*FKa{YinJ6o@358^~|en?*td-dgLFtTR8b-;*WJ{E9}v@pNd>e9&DYw0P=x^8AIBa zDnI=Ca}UI?9>4osIvsI)MhUp99r9g-;kCK9kT9L#t?(Y)?&qG%^Pz-I45+{@rCg!|aV zIfUnd#+P{ow`T~WYY_2nf+M*Lc-Hm1^ZSD519%?k@-v=)`LoHzY3h70aX11nS1r7O zr*FygbDqC}KN6=B-humta2xUl?ls(3;8ug1uB+h1#Q6;OuaJG(`fQ$?Uf($3L-OqJ z{PrW^zMXBukM7^RfXTfglkEjQ;?VP%(mHE?9zD=x6@tv3O|&4 zGJapeV$%GT=eckvVJ_pj+~xBu&of9fg?l{rznuGe+;1XmSKM@+3uof@4Q`JpAIjAo zxA$>7lY0d6A-Eq-yd5si0D=v1>3zp@l5@X~FwtvY;`AjBQ6Z7;$1;yOrYB3cnk08%n&5JnNe6sONiKymk2hg8U%z zS=?d5oJzd2aZBcTAN=2e7vdJZW)bcU+@8kmFrEv!JMg?OVYl)8tqXe>^1pfhnXr5Y z<%RKko@ZUJ;U40-HSTf9?V+y4E^Zh6t|I&v+!nexI_LeGy9Z&H!7uPX%f*{Zn3sq< z2>0nq!^Qc9=RSms;Pf(g^x7DGXu_6+8^B#goMEK<8PB?QaKGZ7e^c6AG584@7mF7Iu~ z@uV>iE`)2jyF~-SKagXZ#81L)0P-y^elBV4e*F6?D4a!1Pv zKjOCFew}+He%**O0zV(W4-|mw1mwern}S~o;qq`>%$+4qu3KFmTi`kP*Em^zwZ!E= z^FF%^@pV0p|3uR3O4xR|-Nm!6EciNplNEt$pi8H#6}?@!x8t7R!r$lI$C1txE{>cw z5wFn2eGvIa7w$;HT}0dh!hY-g<@G3TU*J{?3%R@FmkrzF7Yp~{PQuNHO|N5|JRis2 zq&*5==K_o)z17bD6XL$gb3XTx_@9m6Ozs!CbxpxPm-y?DkLCW{#q)7{#XUcZ`xfN0 z3HuTEe4YoxKExmE(g`Ey5Pms+C-ZzXcU$B!__uLkMk7ze|9Je4=Q)-5<;c1YaQ$PY z#=jvRzasup;`~V1ICueki1^R*+?#muF77k9%_98%+>`N}PP{cx*I5?k?=IZlb@?8` z^Erh3(#g-ea66ETd2Zw4e+mb>dK>~@C$H#r0dmBJi@HU52Yy{hE7heh_x&mFRO0t> zY2*<1HlFM8OW|IQTnU%CG{^GX$JOz8(%DR!TM6Hudl~nu$W!3;gg+2Ii2OeMnp@ZJ z$m8sz`FkK~edf|$M|$~9%BBFN&QH%12>U1gmy=d|_%(jV^8AN9-IYoDFLUc!&%IX9 zF7JV^-17UmfUD^}z)76b|r}4ZQzcXM5?%TL8 zapBhU{4efh+`U|0FEq*XbJCc}osZiz!o+j;;kg)oOd4;xbmkDIg6H3yoQ=P(gD7)} zd%g+3-nh*|K8-Z4aPFINFLUt}XJ6ucNO_Nwz;!ow4fmadAK}8SLq6D*vy|s#Ze4MN zIfuBqsx7?9$e*})ec>eT$DH560g#XRBKh5)a(zyz@=6(^kCy@u^-<;mY~Q1L?HalYp#R0d0Ht3r|5K|EIlOUPGG;fk{IsB@B^ z7YNrDLlbkkl{0s5l4EZK`EjhdQZARJK# z6^E*8@gZ5qeWW&6<*z8OC@%LaBGm(HeN#6DCjVe~dC-s41d4-xDeaVzTaXl~ zt*;FFMWIk_vhQbA)2@}3iK5q4*3!ZLl&tK`f_VjnbZJIr zL1F%^bhVmaQEDnDh4f1TwE^JmRY zBWKU;L7o9W5-3##tBNYB15&L22OHu4ePt*Kp*Gc_T0c@(Qxn22%$k*z!O)5L^3fm& zuB?cl;CYq702&pk2^LqB*853GSdp?|EhdQP5=N-ZM}5D_DPRWuD zunMM7Wx?uTI8aOO0e@+*z9(b?0QP<8l34OI=ZWtVw6fN z%92e@6a5txwdMY_I@%>(J+iw4_MH-9BkE1THL_iRY*Xu|QKBw;k24n|L%W$l|F`IS z@cieL%Ij+|mlcsvxUp1Ar-XySw1Nz>*`wp$Q(PJhR|hLqyoBWyGS^M&`ZvEsjO|~V zWt=}PwP2c`lU0zDT9`gf-9L^=SZY>RU1A%1oS!@0dgN!OX84);`MLR4E)0cy)TiD@ z-Rr7?)wL1pJ}*>fr?PNewY9qeW*g=L(|O~378}gYCNItQ(I>Nj@Iy6bCQeH72gVl< zvb!7Xt72$iRlN$OIEwq2UxQjE&k5n4pZ004BMtE>ss8uSqsiQB+aMOdE{Y zGDHI>CH)sE+rW);@!m?1G>88AkIU;qH!bq+6>uFrWA5!s>l5%qMGn0~dsHrLT^HK|^tx8H-IcAhuym(2NBn_we zNyWy2hZ;XGANxLc;X;4D7C1vKhWT0zF7%Qr{Z)Qam_PHAA`8tzrX;xB4@FqEEKT;3 zM|wj?seM?ZhiaKdu!t4atQ1SN)@rblasL#muDVG$+wA{SYX1;wx6~%gPR-_P=G64O zEau7Tq~)PX+LCozg!wK|7WC;)>r0nZ1}dt|BCf$PQeIbEqUBeq*&2AM85#NJk59U@ zGX42EsRh#)T9^3+S%+rY=b?#mA38r#;fEPv*!)D>o^r}8DDX386cl9U&(0*hyqxG7 zkZpmJg4Jad&&k1R6{|sr`ZQglv#p5OCAMq`t4S>|R1U2EQ~Ms!|B{mC+`m*~^0~|L#~5h(v12!z{o4?iUWMz>!Tt6^4Sf5+x}K z7KiI8M^%8P3ahEmo4jE4eK@5WtbJVBw=%P(JTLUpvUAg?duj6uGsmT66?$ob z;-zJ1sMf1hGA}x=NXD6UZo?|uC{=kNQqF*5ZSJL+s$^v4`=L^Q+LQuy6d2rCArm7n zFCC>QWEcO3@J57DmIR^R+UI9qA(@C-7k}t++`Y@l{kdy?A>dH8=iA1QWiq+u5U@i(#<=y?1_!7-+3Me7au((%4G&r--F2WSqvmWDG z6R0hhfs1P*)m1l~z~CGX29|0Nhy1A-XXFX-;}TyRBl%QOgkn z7DMIrtgAKOetvEaD?e#sI+hvbu=|BN9cwYAR*-vxSA&}SwXDX8z!{dG$|;2GffLg? z0||#Jn>rPgSCsA+MpjXEE~Q*#WHL}vQokT3q0}Cp*bZ&bNwYMFX2a=*QgBmr#J9^K zj;%t~WrK`T_z5M!(g1d6(B9(YmDfjD#Z>y(d>M5=b0r5OI(};s!zgqyy2$y2j4aK< zqP$`_YnQy#OkcLUuDT{%v7FXrYV^zMf~=729>O&VW!-ZsEPxh|8u9-n4Gv;VIh4JY zQU6r|qLCHR7-rS$AB()l7{m4)1rwc`&vKN_xis!CZQy*(?s1P^w8uY2#eXl6Wk*aG zMa;Ru-&4;@{l~P@$;vC(TfXwk%-)-CUhbUCe2nB?5-!L~%}?KZo#xJ% zihZg!*R}T`zr3P|{i_ZutU>>KRZR$*KN-7;1!@|DNxF6qy<#+a?=5e<_gI?0XKunq z_vU-^o)N5N=l*wJ2ERQIs-Si6e59VE?UnWfLTPhy$HI*b7RSNSg@)2j&&e%_ zdXukDs%$Nti)@x%zn4}9%6#oGISFHCv!`h+<9T9|30iw;=JU#sEVL;HtD4kol5$~; zo2G6%Pw0sSe$MZZi)xyrGf5PSBXBv?bt0 z2qz$6R!ExZIM?DxFchj`Rt;6N!cYTNRZ+82d~LCr?WzK`YIzm{c~gcFvZmhF5Qjb0 zuZcIESzV%IOuGbBt~&kKB3Lo0)s(z~IjMdLGZ32<!JBF_)<0$e~o+E=0_N&m7`L*n1V5C4f<~A{MF~b(E+LSzXyfrh41G=Ezw28~w5g z1z3^=s+Y1mTwW0lRqG@Tmk=un=>{dM z>4mxZ^LUX}kjCn}GMH~)Je4f;8aLV*X2Dt;V$Gy=kxK4f8`(Z3VI2a{-u5*l$24Uu zQ817vETgmxcN5g@Y30-Z2==av-4bcB-RrJa zIBmBBWbtpmrCBd5sWl;-xmMP$L)-ryD45W~D;^K}kH37u4slh-I{KW$cL(c$kx zrMT5Q$ItnNe!`HHq3ZmKNHL>FgQNl_(B`SKo-Q({8;x~K;8frI7hf_+ahCeU0qmZc zH`wu16jRLd3Jlf+-saZ%3H(XsG>`YX@q?%sW&opL{Nh}6ww4?X=pC$Hq6B#tUP7`Q z_-H3-0@d&q##t)NlwD$zwQ;s}C=UiIIR=PMUQy40J^zu#4z9%LM%~RYSNbyMT3t7K zxy>>*Sgpr=771Bha{1MSRxlOXePc8^>1CaEjCO8de8`OJ)rD?sPm`?83(@jmrG1~d zn_r4v8x=dN!%Nqo4o4|j$QW$i6w@C%_s1%iBvGu8W{P5V;}PD8vXl>26$ML72g<-E zS5#qP%(;gEmwDqfjx2NpOI%ioe|aUU zcU8XK#%lzaQ&k2m2aQ_Ssr$|8zH}V5%ACuYd_e&dWs^sLp_f@1sL_5@VP)a47QU50g|i-%;S-pzmn5n!>(YV(#|sqEs7iqw#2?J6|Lt)|qAy+D{kgZ~IQS!6rnA zK8;b1sY$d80x1A9CX?u_8TpynS*dB+nPzBH?FzFv)|`m)@o|Mt;7h12TVwUOd6mpU zCB#eT2=jN4170uFoPARev;~{Tid(NjFh!cqB9%Hu3u25}ZIF-&n?mB!R6oD4ASJ!9 zK<-ktLpfU0VJy=qbBlANg3~k7q)h7lXwYgcBsn@Wr*}4X<1wyTJj6%zKTLLHP(xaO zOI$kv9ULo!UMQ+L87TI(xU+h)5e+W{IpNCGcQU3mFj6bc0>d1WG`dIMWNKMr-m^Oc z8u2n$28*@)W>rJ7=H8GIkrV4YJ)7H2Uw}c`MC#5lt34na;&dj{eZ7S;N9=WNOj-mmtH8{<_)J zAHIhOnif5C@}zS{^X9BkEYOP|E3WeSb|^2Gg>V+{vWNN^v+`5593INMH{&#{!D*PW zEWU}S1+r2f>g(??^Q^_M?@l+3gZnUPJ~qk>I-BJx<`-TrcvEs`6c+F|pSS3q-N@im zt4+GUB4A9N88ftk+0a-c#jw$PJQsnl*DBm6b1UP#DV%2}73R)QbPwc*%lzr9a#l@U z=;L9ZyeWl?v-q5DvA!TEWLIE1G~zXWY-c7Q^Jc=Wkxg@#vZOF8RxORuI*esw6nDL;%3d*_ zgk`GLFrm^?EkE=H-Z+2A%J`N3{P@Vi#KuR;s?9|-8spF9O$--Skw++?+vEr721`9Z#PHmEE^X84GU7%K8mT-&C3Ou z(Z*!>9EYWN2nBBvL57?L#l$mzX~QP#%~YXm&9dDe%!(nvCW+UL%qr23giJ6q0Vn&p zT1bU3bB(_4nAe_Bpxk=5sBafF{TicFYR-9rW@ZSn(wSn`32c%~2iSi1r|~LAU*EZP zAi3~4hhE>yo^#rl>}T;tMS*y$X%1wJsZ69s5xtG9XVFyDP$;#l79;;nCR%*_-_M1` z$^ZRKvNAI>hYlM(@_#ia`_hXQTe!r00Bf~c%F*!3|9>sN|30CW?(1Hy!7GEj(4Asl z-7&ADKW=vCyOP~q8yu!`$d$u>PA0{LF`s+c)0`%*_5jhHDa*Yf3E3$7zHm2ZeSXZ@ zj5+n$&BJ{#Wplu~u%6X-dwU9_%^K#Ali%HZ?YiLaDPz{mlG2ooc*fM&MN7Pn5A3ik ztE{gnw`NW!D6mJ9bH;!w=27r+!!k_ZFB~RVZKHVVMW=nbNH#xlPC+zd3{~2d5_Jgm7*HT{GF(soAx;~h&^Y3J|G^%FA9VWt*6DXNP3lU!U{HX*s;kq)K{%||*c z0QA9@r&)~u>p^z{V2>>mHTOmLac*bESwXT1rwQ47;BAiz+*ciLt6C&k9Uw2f%#wuFCzg*Be?CZ%;xxoz zQ-o&doS`9D6F+-ei6W_ZHWRbsrGyxp1xGAc-Qe!lsY}#FjiHU9;rOFkN4C)q{A)=cVPQ=4UMC!J8gE&XPupLCh@h zvV#GB9kZKm`3c5e)7NTQ)VNesSZY7c9QvnV`pj>l zCZOTiPTqc|6fx{lwAA2(!V*GPmvPcfuS9>ZP-14}CLWmTS}$9t+l?P0QhGV$rDwU( zfCV%z`Ub>(IO<%i*))gVCPc$%aVtxmAYpMZ7Zi&3enzRV0cA`Rq^0GIJzp^=)4aUY zYK8+FR!Sy49ZuU;HfOKS)vA^DVI_9L{fj$IYv$qIotl7H3YK)=w@p_YO*G!&qHpl;()+mL7 zWfZ2FwsxXha?4!*#bx)UdqQUR6y775B%*P43(>@nAFH{&gT66w9%d2ho@W$hXK)A* zHm{#^rshYT&37Lzsx#Vt(~Ni9mo!*)Q>HxL_KuC_YKvJIu5+KJW)6^P0{qR#nOFDgGh5rnU3rr}ai7z$VlW@VyM)YpG4tyJ_i{`oc~9@jqCfeGj$gaQ zcd0DRtqE4^*Huw%x8-mKfev*hA{yNOqzZRCg8%01l5_66sfp>VJr&TbME~|8&-A{m zsX4GW^EPA73=C~|RsP$T9sCoG>PHJC$K;&9CNFyZq7M;))=cuVHK_^8m&mH9y>t%&7r>d5TNiAiaNM&JKNBGDgz zGP-#^ty5YvSXBURisIb2Cg#;D&q)ok`?*#0SECxPMiuP0DcZZ#u*+q7H472E%&A0N zL+XtoI69`$Ol>*&v%iMo6uR-Xv3;$m)LF-IoDfdZfka%x^4m|CILN-qWm(9K6Xvvp z2}NtGj39%@9vZtX2wM#%3iEQfApzC2xU$ZKn`pLr)qELXUma@s>*ui2B8)vr(b7Lq zBtvCZx9Y#>oD+xstDNSjDko5_J(F|N=CEnZpg+*<2OBne$-bA9n=y;GMHU4fCy3FX zqO*)NCyz~j1AsSYXYRx$y82=*$;(l_W@UwSFdyM3xd4;P_+%&)E}Mwr$d;Nire`Ga zUMA5jwiA7|mA>z>Ye)OVf$Y6GDst0eV_Zh(?(eb9cHj6nIbmv;ca)#Yn&10J7yTwX z^DP@+$u%a>aPIEDRHVq&n!nVzc9mr!>fH_~Y81w2?UF6Kgp`2VnnIcKP_kMi%0#Hq z)Jml-Tyz9BHs*~Wm@FfVK@#9DyTXnt%wUAg5Wy$7`4#GuyuasJd+)Q)z2~M<0{gA* zE?1$cv%>7|MqR!0@)IePx|o=t61gi2?GKZ z+A9?U6hhlnYL~|j#zxY?%0-Ai;=`sXu{gmx@-zzyZYYn!sL^tH25RB*=EwPykK#aH zf(MA%gv(XV-sDFKIDLKWt=XyVYrRqa7jxGUF?ork>N1gd4AYC;QpNeOdmj>E-$h;# z8NhbFmv;FRkTw$f;!USpD9#C%_HngQ<>r`NksPHtcxb*ka`fQAeFq;Pzv1A~1N!g2 z*&`F9wc`{@lHr4m-L|VLpXJ4e!kfg$AKPUiHrI>qU+^PPtANn z8Fx4qNc*!!P$Y^z%9JIt%z<0HL%d1U)AK_9>hXlaN>KS@@lXyXRws`gEcZmCK#GvG zI8x&TufDV|Lci$nmAOTCT7C?er%n%t*7r_xjJ?mFMYlyfg!5LR`*!Y(dv1vAMzG!k zZo%`G&YfR5<+F>Rl-%>$xCAuA$>}ZU9oG#2kp_q2==X5g zEJKWBeR{^KwSw@?0zL0KDmr)^pMY?OP&}Anc>7d{W90(DDbD|PUZAIeOqar^v}q$8 zn>16}fYk)q(4^22B$<)~^_p$g$Cg3ghX*AgI}5Kl9?d^ENWk%lFlJ(^DM2kzQIvA{ z(2;rn(>)BG&iwA%J2n5@fCAlW-&1v1&Nk;2w zv*rMoa7Zdb2(mHNsDuK*P05jHNPJR9EULF`W&2mu8xq%8BirO~Iq4X`)oIU%NyZ^q zQFaPI$Xyy!nb~j@2tTC1o#5VXtnz0O0+6Z*}b(vGZ6_L(g1NNJMgZ3c&^!Z z_?w)1ToGH0V;c66mll!26S>(kgQ0)ult^FE;0~jl@ZZ+uf&5Fjxb>5uOLJ*OQPjgx zq-N1MqT=}HIe%fJ!OYfckoYAGbpP(7`{z>#L=fGi^=UY%BqX@-=Tfs{X4|&S672@M zo9L0A;ND-lxOs3`X8|4{rJbGKw*5 za0Zj!_&BaT%*RV~s6q#-0@v9`6FvOX&kK91$F{ zfIHf6vq?B2q^5>NXzaLDQ3DZO(#^4S%ta?7B(z~vII@+wb4lV`P}`PaP{>_}Hgbl= zR+ue+v@xd6TM$l+Y5xBC!!9D@S)h!{yhtGv`MGq2Nj`(nRI8U~7FNztw(Rn`mGq9S z4b>!+2bNeu{fFkZG!GFuMEpsW_xj5oB*fQO=9HlR$)NqNzMJRpXCEhP)k%jgIzcGV zhn*6iOrgs5*7OuIS2R{!UC^RB4S zItk%7I;fUhQ`Rt!%sxQ!c|&nK^!kC0tcP{aU~Jwp2*YSBs7X~{BG7H?em9ow)R$5g z(#v#4wExS=m(`bFcA=U64=3JL-&teWKYQ>2atfTmpqZGolCLiPLQC{lLgWmV_7Ji}j7nvgCu7z^$~$#HV*2s$ge zVbPx=NY$;GlG=32rj%#d(VHKjj#kI@vV&G@_dsGmXTuGV54wT1#rg>KQ?1YGL`3Ab z%t$9bkxqIYaSR{VJzN@!vu-r@%-$)bxm2zx9nFiAQkY=!(E>yJ)Exw{falokzTNvz z1xJ)@7AaFn`OpNldz}Ogbef@M5@PqyLHF!V|-X2Z_?-hyC1h5})!| z%*kpL_sWHZbgVX`kr=Gz$eh(IKQ<=RXcvrCf?q8O^H<42%B_q2r6lc$TzhkmSa!xq6(ni}pcOx)`b*VsU9EN046WwRe z<+L}+fDUKMEgB{2nQSE>ZLvL>x^qj3HtS811MVTTP|Aohb4a5Q#_g?AeVnWIQ_AdE zcMqu|-d%baWYs@qr#Jk0z#gFb;^VP&hG#J`*p(?F64-qM3|nXQ35vZ8r)C#~bA*l@VH;~dz;d^L?wJ5hWd zW7^6w&Fm2%se_z(BNNo^RRv+9B`Ge8%u5uUh>qfmS)Gj_w0I zs?rii5KC{5P*y8-LS^QtP@uDbTbggr?Va~r`4d$|!_Wd}^Zwapz3uV|8Oi>sy*~8l z=|!CT$uSFt6br~FDm-$_jl`QShB&g~6Eo|+*A`4Nx72c)7N7-Ik#3)+4h=Ni8Cfbv zH&Y8xs2lrP&8C*H*w68FxewLy=+EyK>K^f4DO+*V2^COP!ojXZXJU`DWi;1$026(TeH6Sv8 zy?QuDWHe}38t?jhXj>+Y%(Y09V*Bcxj$kdQLO zN-{o2yar~jBcfOr-M0ZOTlChB=l30$J#=(Fv=&vhlvYV!N;&r7cDH(P-`>5m2T$b2 zk{yi54}|_?VkNWj09{_BA#}t8Bz0x6Y1E@UMrXlP)+}rAV-BxRKHYQQ0g9+2YJG-6 zBG;Cszrb$Rk^gj3K6OKN0>yUizI1Sldjh1iqcEyw|KtcE!c;L;UbYCkq`uN{xa=c~ zo3EpEqlYi{^BO&zQF4?E)G5_Hb(?Id+wC$nW#HTb+ez(JPlK;9pXH(^t-GZ!hr_&g595VM=OClNUuwO4`V;{uxDT;4ssP$W7)VqL*<`D!`{^HCSfNJa zNqaX_dpVMbhbRoDQnfB@^uBY^pfDW`Z|V&Ke=Qwfi65pNO)atH(L zX`>Vpaq_#**$beW5QqsZ7QReR9IK)~xM=%OXQ@O$Viu)Nlxj^`nl+V2-_%gMic0xGyA9TrVNv=cZIdTcO{x3@$~;F;Iz<6ajT?HAVexK(g~e zYV10jg$}_@1u9*X)gMW(O?X8Ywk$k)^7NLK<%c=9bKbw|pC$hBxha{dgSo1RnwAu{`+QmRBHlzb%drXx)8=F%lF(&|*${}`NPNy${= z8=Z41*6O~khk~t3$g}1U-1CEZ4s^`&c{BujA4m1=s`V;?A(- z=3AFJG2srzTIlKJOR@05JbXgK27X1bfF+~q>y7N$GrHV|#j}f~vt{39ibbF(X7kqJ zJqG7497d4+uTxvz-{#2feS7~wz6^ESd2{x(vJm2FjF67oOQT^_3?lh{rEaEPQ>Ld? z#8%HtVb)#CIQUE+8<#uSt;-kYA6>afQMShi^Tc-fZ|m}4UXfBL-QlTPu-FyIh`yMJ ztR!;YQ(1(?<~~6umrjyd>e4QHbZ%L=n$Kg%{iV(m{w}Yaj?_iT2j#lkGe$;cK4SBj zEJMO%s$g*OtHHF0t_@-`3LzqfkV})6n zYqSj&Wp3tX=eM`#$Siw!v_tGBoUW-?H>MBI6xWW#m}iz>z-(dYV=w3roFb|$VQ$4( ze`kdao~i8=@_=V|!BmFB$Oiyi@uzEXMU2o=vJyqw5>w+gouHJ|XD+<6#Ze?g8w0trX6N)X% z*VW8aAF$yn`&Rei3>-kQ#F1s|Lb@uX(*j3Ic>6C1M;(5rOGR`n#^kco80CSPM+&N1 zWx`d@BsndYZ?H;6av1kY(aA58qG%r?fUF*SEaeF&9QF(&7mL(5E_^t5sx*&O=Ny)d z&dSS@olC}I6gLykC*IT!*KN|~lmeEvQ3kfU*R>*LfJ6*VYAO$d^O+r1&+5aY28JN7 zA*5%G)$%xc?rc&vHc1eEcN5L>6X$DucXRdRnA#lsZ`G6U{v&^IhBe*rBb~g!lqG2X z)!WDnFzDb{omU+!Xpgq_>}mVb*V8CZIf>1IaEK4Y zC^u4m4HbOkTI+z%DhlTV+m{dZ0W`H`}kOLcWwyY*|A>5uL`+SX_8aRAsVU7RX z+FG(4HX=z~ZpnG)CogRn^tYnGu3wm^^AQI_&rm!49FJ3VeV-s!ZF**;^Cy%J#2sQK zzSwPkrKG5I%V7$y@0p{lr1Zlr^0t-VlQkKyHlzrDZ`%!f`+8t*Iq5$oHy~@52x#Ce z>3QWKZtoi=B8|Q08&u2w7s4Q&`TZ8KcS&wPw2H#ph8tZIf?wX4fg zb5CVTeYck8dL*garA4ZsN@MsIwx}*oI5@v`$F^uM^X?OYEH*w1?Z2d3Q z3!KVJIkhCN*kPw4vE*C5?;^`1-X-Mj{cikS{avJv^nNz>s{IOoWixkpZ={om>so`= zLA3U;=9c2qLd1XP=r@~zJkvgR#HwQVQN>YCIZZ-VCdyCJ8c-P2)P{j`x78l2?V&lV zr-yNo_~iRt=3WmSn%i&4-h~yf14;7z^Zi}K;8r<$iY;IeR%*=1H=PDi}kVx!jutZ-)&(a{jKFC~%#x zpRmb{>92Gs((+Tn=L!ru_qly$$IRbJ;!EqrJh}Y={e@Q0W-g@+o0;Z5g?MBDD0LpT zep^#HHXP#r#Ffv5TET6o+NWU7zJt5>tAbztJxcctXb(}HT%!5I7al$yY2`dTyLj*M z(51PS#1d6a&z&FQ<{gH%LTBi_$n#yUk?l`?g^A)y$7#O(i6NuVXz8*}wb4#-%I#bH zV+SLO)NGD+-^48P6<_p_`dja9V8@1w$5Wt15-t@LIW}aG=Z+@{&Gf>ru8F4KnCddK z^2MhJCkD=;j}tPpPFy;F0*T9YHE@J>R{7&j+cM`zo*14XndJ%f%-{fngwab;@2&pB zg%poBmdMA3k3KQH@Wk*U?K9}l9Jk$O%TniD!gM*N&S|`mT4u#UC|{%9YAmHXztQCh{GoH%qOl?MNC@N%lHPm9ONWf~qoi-Pj#5V=f4j^AF~ zi4{ww*ke0G-%yWu6OZparhL%j$7UWO<&9^_g~z3={1NFKw25Sn;{%C&aZ!|ktbFfu zdI(Zog@Tg#Lkm<*a_g;8DV+?(C7$eT&MeNHQkp;h&##vb6(CT+Pxn!XRSzDDlWAvB zPsm3~LNW@8B72ty59Rvyy)Vyw57~($3NMGFg`CnrNc2co%dJ@5U2SZ($W*GPMWlW# z`H#FSnO++jrm|u1(D{ciD0%lTJ6BVhnH})**%ESg7*MctxTExCcN43P`%eeT@NhsE zaYcb5A~*QpPy=MObo>Fj;~5t+GCIrS^+j{47evDH|tJ zNcTK=D|X&dID4q z4JPu}^3n+*SXiF02HT;k)nwb#4@67rYH0ULvRMZN1Bg<$TPKtRh+Sh%^Bl0>M6QJR zT$Gw_#nTDo>IGK>bzg9TzyWW`T-v2Slb_#iLzQ)#d}C8A9y`*=q{QPEsYM^BYj8&E z+7|qH=-UsocaJsOV1T;qCZ37G+DGXv zx|zmoHM+N3RbP!iGktKs1*EpPbQv2c-J8sBY1YNx+QMr3o2q-+IvW=+V^!I*jwpeO zpm?wCkMwY{LV>ctM<}1_ci6?I@uC5DD`*uWj(RoT2$$oVcxGKfCyJv?>CBlovNPKD7F{4E02d9;Up!5^ zgjEgoOo55qwOQ@>Ocgblm|sW(h6o2|?w~v#@1(rY441iMc;!->J_&GwTS!}+%V9R= z;6rbvnUjy6*KM1@>|0kjvyo*jBx}v#!AUA|+GKErz5%Es&A%xAq9et%r71Oxo?L>8 zGpcRyAcwikYno$Wur8cA&g*kJe=TPtr}Y>bF3>(oNtAko2MhF7>K=-p2%LvK<~o<{ zsI>am?5Kn!Xk(`YpWCB}+UckPZ@8#SjI%zQ>O$$|jp;S(Hi<5A)IlYQZtqAVY)4M~ zfb}C(L|te|RQt&zA%R>oX_yJW@aeHGPN6zAfJjF|E>657$?+j64p0HnQ@DFxxT#DL z`Sy{?g8Mg^$tBL8U0SGLr6`z8-k!&v#FTe1om|Yd=gaD?0qg3DWtN;C1G#g31!BBQ z?0gp+FNPyx5ULrT;|q_HWfTm*IM4?bntBXvE8=JrN<{M7ePpF1J^KOxN9v^lHLsn~164XH1rCopb4punXt z6#E(I@GyMJ1hzti3s=9CR-XIbEWpf4@duIRpbMeSp1zb{;jbXUN4M~(=n`?{GfJ%4 z#ClYTR$r?{v7I&#&}DsMQ4SS_Ba3cZ@g_f$$>C?7qv}4hsP6p>MbmB4MB&2zHqw2> z2*jo~J$yRul$Y}_l7vX0b!J0~;7OC4xRS}m7(&gQiEfSfVqd6bHUA>{EHaCAZ^NS7 z%HA_eu~L=+v~eZ8x`Q}zR168Vj)cwpMrSR8!I~M`H|s>8F!5=o^e3MhZ^S(D@Ulg$ zLk>yhv(iF*E8Tdse|B$*Np~KLuRm0qrduDnkE#64UCqI7>fmSgj-h!$|91igyvr}BmTV+jZ12u+09928MKm;IOZQiPxIoT!euB@*F+pDF z+;+h^{&rE2GvxZYTKKSgimxb%VXCL=8KGQ%chE_$)c#u%PSLpe(eE zvA1=eB8XK2W5m-U12Wpj`JO;!lANuS=NYnJ{C_g4C9p0!_r`GC|4n5#qY|7sb4MMW zyvSg~fN}07vL!h8KPRF%HH2%P1}JAwU%=G@(WB&{b5oTLC8(KuVBcovz*7h6a&YZ&wh^_}DrQ|-Ans&#(5R;1RVJ7k9!P7cBZjxW~e(eqkwcQP$ey>fs+J}f9; z>Eccg;DhWt^S1KWNlc8BXBS0C7_s&R;7V1Xcoi9iX}6X5Nkil<`%I4Y36 zqMKGi;IQ1vRI0$T-t(k18H9I842kODk2enx%g`TcclgNCVF{B6yHqWuiQm6>e(VWI zeEys-yta;k(2)XIH8PV@$H7o+qw3FA5prWC9IC0{7%j6a%~pKr)QO47=Fd6Er32}j zlO3?I^f^_#XzS}O#ZETex3I|1&4Z$+XO5-oE!&5!ma1n~w__{N`^ppWE6Pv{WB3B@ z(P@;7Rn4R+vLvI6Pya2uv+;J~nz>nJTWZ|e{?*KLCakLJDfd;>L7%16y>dAcOZEa4 zvau#9;Wt1JCsbQ5OK2yLz^vV1k9^-wPfL^RhqHES^oi`AQ|Hffls2^286EYLsFskj zv8YStxmV$_K~6%2XmbdQ>g{oJlQN0n%ge4(=hQ8DG#clrrGZ~vQYN5}PsmTO)$OuO@gkp-}2Ff+$nF&`^@OfIddm=QDON&gZWW*#J~Y;*5~J_ zyb6mq?y1uWvIU0)5DgrQ+zo|GQy9QHYwjj%e4$x(`l+(>)>!us_KC*JbbWrz@RK4u zIDH=fN<+>#X<|oqf9C`VV27&8X6)%~M0gPaoc&_+t`EI)o0??!n>2niG1rAwnMoI3Wt zB_l|`0}zR|#K+Q$&NJcO!1*IZG)S)6ZRjF~1CpL}TWolb_`{VB1LYjP$&ZprwNdJ< z!aCjOa*OAu2j|d0fMDIy&ve5sZ@5nt!0LORl4d9QmQ-=H62Fnr5!Xz>?!};5&MG)q z`sMU1^|VHN3k&RTU-E`&W%CbE0haTvQFA+kp+Mi(G(4eLY>f2AxEuuG znW!%ykUeMejY$X>${~KJgxvDrL9YOivZ9wxpCU!L)mw`fGa&GhZv1(j6QKKK^~dsAxjjDB_VlF5x&%S)EK) zLVzo&Cu$qgVi`qRT8e_5-9O1&bVbX}gA0#7zHDt^;5%e(>K!E1a`h)np`XV0WPm~3g4!y;t>-oHY zvc2e4O~f?P6Yv@G0Y2in5~;W|HFz`wk&=-${*KQdR_G;#tj_f zengtN{i0F1gl4TGBz-_j*J&?#pIN)B==n$$xmcp7p@2p%OA9~cs4!8vmJ0WjlW7gN zd0_xs@xPCK30}I2VqRFcU*2ldil^Uxv$5`U|Fr_=E$w?jrIKCvXZIbcBUf&b7!9Nv zd?h>ljt|n202P}CDulXuB7L2a$N`B`JL&7--981$!GQhMxi7x)5dIzKO`AtM z%3LX#Jo}G;c#5mpzGyp(zFj)Vn?y6Bx9mr`)keWRvk5IMxd=21*tDPcTT@ER2(UPa z=Ba|~#fhcUi<+Lsi33e#ngXgilh`38^O2Ls7msZl{@wAv;fAgm^tXo|UEFq;LSYY` zT)b;An|WJL~Q zz|58t7q`>F+2zIa%jssA@#&?G8S&CEm6yBKloSEZG+O!K9mj^@I!{Nas!bTATn$hp zLJ##rA~ec6uzrg|asCY2LVLY;r2G!FPm4NvO{mJT2Vf8D#4Yw1G=vyRiA&yci5rJW z{Fkc?=#UexU)ga*6fl^jtU&Mx}rn+O1V@{-AH61K-crj z_PqUhbi<9BRQ>Htcz`C>3t1r;HMSuzvCMSz7Hi%(nSvB38ylCug39#>nQal0)U+Tc zAyheYMmO1vjaa`WH#O63>BG9@F|lgNh~;6e=dYZL5JX0S09$@qyC*g-(nmB-Kyl6; zye~f%O~w4nBTC8GrjXk&b4+hc{sxPgd6hXv|KV0Q3uIrb5yoF^C}YXS{cO9xi?OgM#lv>eguIWetOn!u7^yp+p-L2YLDF}bV zn(Y#OOSPHWE}zS*^87Shl>rD3)1XE1HdrS5YY%UuW8;{l3Y47L>TB{FEv^#uE9gtQFe?(GJy7~n$*^>W+M1nz>g(J>FaHrS|k~Ri(qQI5||N# zNCp6eKj^P$Gx)yF0xOw}R7=<rKx|8^S(xoJ2&f)b*De5c(G znl{_F@4Wk-Xt$qZEW=#C<~$ic-&whMn&kNN7tftPP4VC6tB(%K-7Du6qIMolbT( zE01kBK&8wUGTUdiZP)`l#`GA@>%-Z1v;X{KaVhWinR_=JKEn~HGsFAQ zUMOF4?t=eZ-gVDc$WzdpUFUY~+TMJ^hI^eMl7 z^lwl8V)gmeAFaMDrK1_Wy880y#rSY^ef3HH`egOV(aqH#jo##5O4{4%?D-(G$B5_5Z!r!TKQ?`P_DrtP&Ey~7l}Y8pM?u%?e``!qj!$iE-Z-#eqX z8S^G>dGH=n`GlAH>QgWMNsV)bKl!p}(W@`l@4tE9?9PVv@3iwu8XXTmqUZN!0KV7s zF8{I#tm_kY=99)-^m~T?09d}i`cr=Um@%JM_3G4zf%W$2_p}}~n*@>3hh7FVUwuX! zw3+9tKh)rS{+^~B&r(~B{I=FvS`VAi4JPox=slYLNr>?YL*G>U)hj^%S;KAgfs$=k z@P7oB4DcYQ?>?flC)pUr)7A-P-qtQOqZi%kDgzqvyoCveG+=x<+3hVpU}o>9odT1! z=0S68bba&!^Lb(P+UVz_H%B)}P&_`^IP*6Uo={zLqAh65R5=lS_{4*=`wySE|G>O9 zg@rbw->*IuNB~A_^Z7&g{Lwml5!i&P@4F-V`@j$^o0z+qnEWl~H`uti`oqCUF!>Xt zs6B>)y(f_D>JMiI+7p2iDip1*KHIGRnAYG03wdYtDQ(S7zkQ!}Phl&7fg-rTcERwI zEsgeEhzS9B9jqLHv`jw<8bs#lpY%h#2%-Z!f5g9k zNF?}E(YL0ng$S#gy@%$Q>q~w@YpsV>WwNm9st=wXo7Uu-wZ_pOM(=Bda5N?$`t(4W z6ts6^^w#JXfaNVX$_xB_ee|!*=vVyui_tGf*LZks^wVba#^@FPdlMXcZS)F2dmfbk zfAzUm^9SvapsFr|TO_Dm?E(ovgKad@d=jY&B%f-Z^d&tyg%2r4iR?|O+`=QvC<4k; zXEe5l|Ndyy_4-RkqU|S{)>B*DE|?BW2dM9B8o_1*A&NCx9>Ha^goKa=1G zzYx`+@{5uxC;$kex6SI`wh%x}AY@;*ZjdW*HawFWIpoX=9#S8cEqz|;uwV%RdCN%;h$W64xXDh^&d4L+!d)KwOxNmxj?)yG30F){Fc~~{ua83EGr*Ueqq)pAA4Bt zYw8PX9`7WPYDrU+P%TSLo#9bdB~4hhbfcsIY3(1QXNE#OF6~AiN(frs$%%XFk;@kr z9+xwNq;k(FYz`DccH}*#O|)R;GAC1Rb3!)|L}4O*^MT#AthB)iR@%?d4U2O1#jIiU z821d?1Q2ozQKb|6{6iaNpcsCeZWfc1AdEnf*JKXTJKAvr?G^uTOrnOuk*L`;omi*|HbRy@aIb+7n&PwjOdsmGOF3;Ko4I2 zELm$;M^{pF^@&1wMIp&9*}UqM|4KoL((q$1n2fQn&^a7o#f@rNwDcj126crXAw z8l!j8S5jC%lHx0C|2-Ise(-`=Zwx$fJ=i`llL_6V5_It=a2C=#p>%TpDrTOf)8&7`r zr!{~ZU{BVoxo5J!dSH{d-PkxRMx$(8{tQ1rkbSaFIx?x90~jCVn~mM@5lzgWUg`5I z*%m2g5_@A#4&>R!n+YhNdkI5oAFpc(w*2~lka}pbCe2B+1RL0|3fU4oKL518)vR;g zV^e0=hV{2HhWd8qqjshfIOe_2z1;4)`+8enAI$`6kFQNy0t77zk&A|y^#pE*ey(%BA?%Umt9`br09a*ob%>00fpYuZtogULnMmV&slx z`bw7I;(N`@fR!Zx>)Eeq{zEVU98tCU6S_cw0zUS6N_a^7d~)^2Jp6F=hZ_dSHhZML z_>QMfwu_rz;AHQ(<6S85sH~vX&qLe~zBZ5qX~PpJ_2D>77$?W39OnG_6O)(#ZJR_;6zOnK9AX3n)jz z$u~wX3|L$FL)J=Xu^{McGQo z2=9K|Fxb!O`X&8)g2P?|9W(KA^s^7aaw1AX zd0N+wc66hxC1?OS2&I@`ky0R?O`dHWkYSaY7T?ik@(f<#JZ#aRoVOqHMQCqQgcDnQ z#?!Xj@kuGa*rM_r?m4pc;Qk)3vLLN!1^!ybez^(KOzg|9c0mM=OHX;a{F?A<=lVWZ z=WBGJ?oxy)aaT&kgDN@vaI=9`*pXk@-HD`uzsmkeL6*e0b^_e_<>+4^pcj%}Csl+! z0$Q582trml7W+>Hl$o(XB3fkWqO*V9x7r=|BfqYq3Cu{gh|K7x#(L_u)lO-1rQ$uq ze}q>$?G@f*lBPyFEb*DvUBJdy;8;(4*+$J;w%O+BQT~5|ih#xnT@vHWB8ftWDEg?I zy8&3lRqdQVPIxFGf=MFlgsy>7-nn2)4tiu=A#gTSUIh&jdeQAm8lESq(|1;X!ge`^ zr>W=*5cL`MRX&iggovu}yFp`G8K*HEB#Jk*1`79SBXxI(l1mMmikX?e!jy;E_o9J@oqvqZ=a_ZU{=D5>8j4G5e#yDG!7}zc-Nz&Ai#4(gxzU z&3~1xg1HNSc}lj#ors!xSsN z`4fl$7H28-27ieo7Cw!R#2&ohiT$jzb9}0@FffV9Rz-~zx7+nT@{-QbxrBsfpMu;L7jT;@TJ9Jv;vmnCZmz6RRQ^MVoIE4ur1fjhoMc@g1E znB2nr9vHSLYw2r(AHBEcCk7&*w$OPBm5**DaRdaCE$~9P|83}LYjpfqIxB-v0| zc^%Dwc5k8>a zuQF*~7e|@Q%o)7`Z)sTw^s1;mID*z5mPV3n+D1e!nF;8c{6t06s032PJp*t2fg@4l zjRDM^4zkYv_srdU@7*{k*d6hmq!csJ=kR>&bP_+4cwHv`SPq&r7{|~uPe^)%HnjhX z%H)bYfSUn1hxyp5XB$q%nkbY1Mcd>pa+7EHQ_MFsNJA1#L=+iOw zDw+&T2*V;ZP0Coa`^+Vi?HWz?a4!5-ZG1WTltz8pPc!7mqK_St&Y#j=WRSK;qLp#LkO95d@TM-8cpA(lv$+x>iF)po^et!nTuoQ89I(D+Dj_CxKb$VXzvPk zRUEt^K1U;V&)#B6p}$%M8|P`s5-S3j%qpcpbzLd)7NODN?ctl4KTCYDxLIpeO;ZjxCr4!RJF_ zf&DV&u}Q&8hpWJ3A^LL-lmD~M+y{DnXyz|A(vDj#N}j6%=hhJXi1boUC6Fz#25qkS ztpn9}`ZX0o|6*f{l_seoZ9b)OCLu1z9XvI{nnF~mf>LVlXl46$e~yLu<2#4yfqjSP zB75MDrmoLt_kWHK4j=l~>=6#8-T4aU4pZwD0N!~I?4F!FsPtKWkV9)dNv49NLmy8* zcoZ4drY^`56sswNy^3M@TR6tL}ut6|9LfH>pEl zW2J%L(HvA^_m1hyAAkD`g^9b&X(o5RqQ?#{T_R6qtq#~>+2PhutZ)|Ihq;J=en$$4 z8A7%kLwT`}_zrekp}#vv*YdTUc(w*x-Nq8DjaKFPCap-Cvb;NgT77CQcuYl84gI-x z#2wsvL)MxAio`mwG^@37(lGzU(m#^uQy*U}vZhWyFK{%mwGb9M2lX&@!d)t7u$0#D zIVCHyCq;2hU0T4Fu(Q$clsTB;m`}u-^&4=uS4Ilvy``wkwUNR!Z;aj?#j%24V@Lf{Dow?9!){c1swcc8{NE*!!)@Vu%jEy=vRf8>OlyMrZAZ0PbbJj#i4h3Yv)9t+ zn?*{YR@;uT+T7ckH9Gjv#ffBX+c_F3n@V!i#$}g@EF$2`?$Yf`nHvkl-geCgaLMj% zA#NBdD0kgm#Y-H4@l~=hgir}UW{hbU$ec40*L;%iI&O_(z9OT+Xki*(yLUwd8R*9e zbu~!C(fZhE75Wf?+}Dc@R3WzN7KvSbuPOI}W`by}>Jj(eOq zG{1>%qkj!!8LEoaMi}+}!*k!--Tz%miHxu0`%F7%|GCj7oNp>rbCCbtx|gm|u8@X= z*hdL<31qy+pMMZOGCLjh0*=KOZW!oT7;UnOhovV!n-^zh3Pw9|2&0_!l5+thp-LiehT-e7SxlF6hP+BZ^#UnIak)^4-QPr+!E za(Oie1mNV+fz-mRxQcXW?wcgeM*-+re9Fn~H6l z-;Pb*F1*k;gn{f_VnIQ(qHh>;ozEWrwV+gIy#RJGrV?M&<|7iATCT8SZkgrK4J6Pn z^hxIdUfM`Cxx(vT9{by^!(*d2VVl>FlT76p?Dz*PNEiXiq*Ie(-ysp1_39PS4_5d_ zI-}~B;EqoTZ1ELoTe(|Y-XbN#Tvd4OL}yahM*kvuuEITIe>TSs&D}?lhcin@mj1^I zM;I1yD~~6(u$mSPQfhEdJVIEl#}x(FY`x#*6o3brU|r_;i47>$q5L8RKai=~$tslz zMkvpg5SD1T@bo>Q7}I>2J3<6YDjACn%gX z=%gB)DowvLSk7By7y4J%!HwP~mhzc=4f{!pxc5Wz9a1<1maKqG#kfhpvnV_3@BCA+ zFr?vRDg+b04(cSjhRc6QgaUr@bUDS|lKgWi95v+~`_L1EQgAsAZAu_z=EgQKlBt6Y zTYYkiutiZ)X38jwTl4>Oq+WO~hje7s*DnK2tGJc30@EJUkLL~??s;mg8`B9S2VR~U zw`4L*{JnL=9kq@144^S7eIj*wsNc*T*nMQ4s`^{Ei!HpQ{(-_xYcMcb5x*dSc!2?k zoq+ffTRBcD*G!5o2u_lbe`+>yCddE3aS>mPB&wA%3pu;?*Pkkul(@9!bcM2rsA$^?5w zTA9XAMg`lM07rk?5G9OhlNm2L^7>%}^=sG581Y++#COzdqDn)m)&7#c4``WLBz3VM zZ@ySKKyu13K(KNP5}2;U-!wf-^Vl6N987ISH`q=(7>?fHiIQTZSR>w1)vE#nj`*+* zxD15l^!mIgJt_&5uK7+ooNF4P{r?lY11&{HIdiw z>cM6wiwMqQNBSbBpapqC;#-pYWaHsnDrPg<6WSY9cXFeaNFvRX683 z+KX>_&aj@J^2#Yt2s-Uc*)D$fv}AaRm}&bA{n1Fe)fg-^%k_1pF8Erc31Ls|Os{&O zDN!(yl_NUo0kd~0+!uKuF$57s&R><{q>V_6DzB>zbbBQ&SXyVo?*bDcQMr;6*=jG> zjMpy7?e)aP({O(-wZw0w6gZDB4i=D3w??^s*1AOxV)LnT3NyIW<7^Wx}@Z~En%KnK#aey#UslK(p%S^{+4Hc31gVa2(uh=`$oY?R?Zr{^X^;<-xd z*$dPa8HsXbN*9HdJs`PA+)Z3Ze{5=tJ96EWZRT3;Wb$9Di?l*E@H()6#f}o4DZ)3? z2uB;RHvWFW$+^GeEZys%E|rSp&v}vmXzERM{Q+!nQI-^5De5o*b79tPI&68hlnZF% z=`c>)=QVm%Vi8#K@+}jNB7uE)!i4n2b#^a{DR!x|NFjIHUQn&tYhm7)Mj8|p8kUG7 zPL@lhf{Xb?*XV7y$TbkA8(^uWf1r!xScp4WRQe)NEU^IG9rgKb<{}B_C9;wj`=;56 znHK0`bzE%G1R$p$%0+{hE)xbe z3rW7ZJDdzXv+dF=q%er-exYk!Z})e+Xe(1$eHOQRKC24T?9KpGqUjH^HiA$K(aGm+ zObq_tZ62De@G_HeSPNicF{DA&pTh+uQea{d=xk_cc%XP>_9BzlXa>~8!HR|*#)W)V zS1Ah$MZx$d6)`i$I$R;c?ynB?m$|ILwP=t~X@r?Ms6bynQ(nS0Os9ah|6a%qZ=g{0ro;M* zAd#IBW>h$~!-FL*WQ{yb#De1}KnY{vxKf#g@aatYz_CJ^@;PV1e%0s@eeN<0`07xq z2ZxU17p8jk*f*Xy@WcZgrq_%3eOxZwKYwB$*ZiJPO&pc%P3BB51;T-umTb#l*!uZ;DjXNNjzMplK9SA5u)6!q%VtDHalx z#H3d3bq#(Yddf#dZa`QjQVNU$O&{B}w^~Ou-fADo-5~EaWL|6^m_u}vwk(^T-OTNf ztk$4IJAsE!asLcJ4o!zt4uB{0R~QxFietOp=wo)}T0+rykXX-yVSd z>xg#v7{ygOw+#guB)PAeO;QEqJ`cAzGtS{HUB6;wB~)RN)N{U4Ch6XyR7X#(%iB4{ zx3YoL((PN9hG2^YYeEoDwvZ553Mqy~cM{2GRHgy(G7*M&4RD5MPMg+|>RpeOx%%Cm zNeJk4;RtR+w6D<5N74Cbzx`X4$I*Vt+Cw6(%2rn?&w4HTlqJ@AIx4sJLib5_BEo7) zFt{ijb_(x#FnuRsGxOOF9g%$T*ax2Fmszb(Tf{D~lF7HU_H z=Bn#Ro8&xG*@aw3vKB+|40Bv4*yryoN)oU5KMibu(e=paaS+EQwp5ku>Xayu_t_ji z#jp`sis-x~b-+AanvL!ABnYhH*d&z$5B@Lr>L>9@M+L$&A}NT@U=Ilu#MJAQCVg)o zAhnaD4UeMcEKh!G(>Rjko^?&k{$`A)9FtF)$oy8LzOh&$j;v{Kg_9xBxWVZ3rHj6T zs;?VBE4xyDd=!w7;3bhy&JgFjOdF=mHPyGA)~=e4JtNcFF%t{<{J!f@(jakh88=j{ z;ar-kK)fr*r1a5HWI+VQHIDwRG+gZ%%1Br{XqvV5z+))~N<@;^T8f=b4%80dceB|& zzdNyltgla*0!Zf|moyk*GBsNUqn{0gH!6s07lt&MxWqzJdW|7SqsktMNv%lV4Wj;i zt{;++JbZDsFGNxFnH~J{(X~EXW>MH%s3+Y(++P>(uTcffD?A>JJ${|+!4sOuu5mT_ z#NqwB5B{AE%D`Gt@KfE(7qsIjG`z2EvPAfGSc9l{CjZP8vz%8-b!au0c!y6_lGCf*IuC zq#U{xt!xTK)9I){2DWC)O81fV?Td1|AIXZ`%J2}zwW5wSUmU=5zFyVYnQ9{QOiBeq2U~frJ zzhP3!72%ALVDaxJ@>I|&f<%}gnH1&o03bY|6+AB50>N|*8uR%l!E<6Z0nyelvW2UD zmFgj;DGUNNi-qf;S%;qr-NxDjA?i59r2K1wQJ9L)4q>STjr7?#(>ePXS8F|jj8f

    kK?ghFPO`e-m%_M{ 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 XNl16L06-t|dOO3rZS~YQ4~+g7NFnh? literal 0 HcmV?d00001 diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 000000000..e896d6a31 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,7056 @@ +# Translation of grub to Ukrainian +# +# Copyright (C) 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# +# Andriy Rysin , 2011. +# Vladimir Serbinenko , 2012. +# Yuri Chornoivan , 2012, 2013, 2017. +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-04 11:34+0200\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "непідтримувана швидкість передавання даних послідовним портом" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "непідтримувана парність послідовного порту" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "" +"непідтримуване значення кількості бітів зупинки роботи з послідовним портом" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "непідтримуваний розмір слова (word) послідовного порту" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "" +"Не завантажувати таблиці комп’ютера, вказані за допомогою списку значень, " +"відокремлених комами." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "" +"Завантажувати лише таблиці, вказані за допомогою списку значень, " +"відокремлених комами." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Експортувати таблиці версії 1 до операційної системи." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Експортувати таблиці версії 2 або 3 до операційної системи." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Встановити OEMID у RSDP, XSDT та RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Встановити ідентифікатор OEMTABLE у RSDP, XSDT та RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Встановити модифікацію OEMTABLE у RSDP, XSDT та RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Встановити поле програми для створення у RSDP, XSDT та RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Встановити версію програми для створення у RSDP, XSDT та RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Не оновлювати EBDA. Може допомогти у разі помилок чи підвисань для деяких " +"BIOS, але ні на що не впливає, якщо операційна система не отримує RSDP від " +"GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "завчасне завершення файла %s" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=ТАБЛИЦЯ1,ТАБЛИЦЯ2|--load-only=ТАБЛИЦЯ1,ТАБЛИЦЯ2] ФАЙЛ1 " +"[ФАЙЛ2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Завантажувати таблиці ACPI комп’ютера і таблиці, вказані параметрами." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "помилка: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "нестача пам'яті" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "не вдалося прочитати %s: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Помилка під час вимикання за допомогою ACPI" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Показати список пристроїв." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "слід вказати назву файла" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "ФАЙЛ" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "Показати список блоків." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "спочатку вам слід завантажити ядро" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Завантажити операційну систему." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Статистичні дані часу завантаження недоступні\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Вивести статистичні дані щодо часу завантаження." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" +"Статистичні дані дискового кешу: відповідники = %lu (%lu %02lu%%), помилки = " +"%lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Статистичні дані щодо кешу на диску недоступні\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Отримати відомості щодо дискового кешу." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Приймати завершення рядків CR/NL у стилі DOS." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Показати вміст файла." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "мало бути вказано два аргументи" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "Порівняння файла «%s» з «%s»:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Не збігаються розміри файлів: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Розбіжність виявлено за адресою %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Вміст файлів є тотожним.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "ФАЙЛ1 ФАЙЛ2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "Порівняти два файла." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Завантажити інший файл налаштування." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Завантажити інший файл налаштування без зміни контексту." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Завантажити інший файл налаштування без зміни контексту, використати лише " +"пункти меню." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Завантажити інший файл налаштування, використати лише пункти меню." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[рік-]місяць-день] [години:хвилини[:секунди]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Показати або встановити поточну дату і час." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Не виводити кінцевий символ завершення рядка." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "" +"Увімкнути обробку екранування за допомогою символу зворотної похилої риски." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] РЯДОК" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Показати рядок тексту." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Перезавантажитися до меню налаштовування мікропрограми." + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Виправити проблему з відео." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Виявлено образ ROM." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Не вдалося увімкнути область ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" +"Створити BIOS-подібні конструкції для зворотної сумісності з вже " +"встановленими операційними системами." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "ДАМП_BIOS [ДАМП_INT10]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Завантажити дамп BIOS." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "РЯДОК ..." + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Обробити аргументи як команди GRUB" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Перевірити, чи можна завантажити ФАЙЛ як ядро гостьової системи Xen без " +"привілеїв з i386 і PAE" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Перевірити, чи можна завантажити ФАЙЛ як ядро гостьової системи Xen без " +"привілеїв x86_64" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Перевірити, чи можна використовувати ФАЙЛ як ядро гостьової системи Xen з " +"привілеями і архітектурою x86" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Перевірити, чи можна використовувати ФАЙЛ як ядро multiboot x86" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "Перевірити, чи можна використовувати ФАЙЛ як ядро multiboot2 x86" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом ARM Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Перевірити, чи є ФАЙЛ файлом x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" +"Перевірити, чи є ФАЙЛ файлом x86 Linux з підтримкою 32-бітного протоколу" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Перевірити, чи є ФАЙЛ файлом x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Перевірити, чи є ФАЙЛ файлом i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Перевірити, чи є ФАЙЛ файлом x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Перевірити, чи є ФАЙЛ файлом x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Перевірити, чи є ФАЙЛ файлом i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Перевірити, чи є ФАЙЛ файлом x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Перевірити, чи є ФАЙЛ файлом i386 EFI" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Перевірити, чи є ФАЙЛ файлом x86_64 EFI" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Перевірити, чи є ФАЙЛ файлом IA64 EFI" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Перевірити, чи є ФАЙЛ файлом ARM64 EFI" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Перевірити, чи є ФАЙЛ файлом ARM EFI" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" +"Перевірити, чи є ФАЙЛ файлом hiberfil.sys у стані призупинення роботи системи" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Перевірити, чи є файл FILE файлом x86_64 XNU (ядром Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Перевірити, чи є ФАЙЛ файлом i386 XNU (ядром Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" +"Перевірити, чи є ФАЙЛ файлом образу призупиненої системи XNU (ядром Mac OS X)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Перевірити, чи є ФАЙЛ завантажувальним сектором BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "false" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "ПАРАМЕТРИ ФАЙЛ" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Перевірити, чи належить ФАЙЛ до вказаного типу." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "такого розділу немає" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "Новий MBR записано до «%s»\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "ПРИСТРІЙ [РОЗДІЛ[+/-[ТИП]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Заповнити гібридний запис MBR пристрою GPT ПРИСТРІЙ. Вказані розділи будуть " +"частиною гібридного запису MBR. Можна використовувати до 3 розділів. ТИП є " +"типом MBR. «+» означає, що розділ є активним. Активним може бути лише один " +"розділ." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Завершує роботу комп’ютера. Ця команда працює не для всіх реалізацій " +"мікропрограм." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "Вказати хеш для використання." + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "ХЕШ" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Перевірити хеші файлів за допомогою списку хешів у файлі ФАЙЛ." + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Базовий каталог списку хешів." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "КАТАЛОГ" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Не зупиняти виконання після першої помилки." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Розпакувати файл до обчислення контрольної суми." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: ПОМИЛКА ЧИТАННЯ\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: НЕВІДПОВІДНІСТЬ ХЕШІВ\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: ГАРАЗД\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h ХЕШ [-c ФАЙЛ [-p ПРЕФІКС]] [ФАЙЛ1 [ФАЙЛ2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Обчислити або перевірити хеш контрольної суми." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c ФАЙЛ [-p ПРЕФІКС]] [ФАЙЛ1 [ФАЙЛ2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Налаштувати Advanced Power Management\n" +"(1=мін, ..., 254=макс, 255=вимкн)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Показати дані щодо режиму живлення." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Зафіксувати параметри безпеки ATA до перезавантаження." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Показати дані щодо працездатності за SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Налаштувати Automatic Acoustic Management\n" +"(0=вимкн, 128=тихо, ..., 254=швидко)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Встановити затримку переходу у режим очікування\n" +"(0=вимкн, 1=5с, 2=10с, ..., 240=20хв, 241=30хв, ...)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Перевести пристрій у режим очікування." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Перевести пристрій у режим сну." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "Показати профіль пристрою та його параметри." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Показати вміст сектора ATA IDENTIFY без обробки." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Вимкнути або увімкнути SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Не показувати повідомлень." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "очікувався один аргумент" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[ПАРАМЕТРИ] ДИСК" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Отримати або встановити параметри диска ATA." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Використання:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[ШАБЛОН ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Показати довідкове повідомлення." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Пропустити вказану кількість байтів на початку файла." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Прочитати лише ВКАЗАНУ кількість байтів." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[ПАРАМЕТРИ] ФАЙЛ_АБО_ПРИСТРІЙ" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Показати вміст файла або пам’яті без обробки." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Вивести необроблений дамп даних CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "БАЙТ:БІТ" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Тестувати біт за адресою БАЙТ:БІТ у CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Спорожнити біт за адресою БАЙТ:БІТ у CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Встановити біт за адресою БАЙТ:БІТ у CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Вивести статистичні дані щодо часу завантаження coreboot." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Показати список таблиць coreboot." + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "" +"Перевірити, чи процесор підтримує 64-бітовий режим (long) (типова поведінка)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" +"Перевірити, чи передбачено у процесорі підтримку розширення фізичних адрес " +"(PAE)." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Перевірити можливості ЦП." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Показати поточні відображення." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Відновити типові значення всіх відображень." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Виконати прямі і зворотні відображення." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Не було перепризначено жодного пристрою" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "Диск ОС #num ------> пристрій GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] пристрій_grub диск_ОС." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Керувати відображеннями BIOS пристроїв." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Не використовувати APM для вимикання комп’ютера." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Вимкнути систему, якщо можливо, за допомогою APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "не знайдено APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Версія %u.%u\n" +"32-бітовий CS = 0x%x, довжина = 0x%x, відступ = 0x%x\n" +"16-бітовий CS = 0x%x, довжина = 0x%x\n" +"DS = 0x%x, довжина = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "Підтримується 16-бітовий захищений інтерфейс\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "Не підтримується 16-бітовий захищений інтерфейс\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "Підтримується 32-бітовий захищений інтерфейс\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "Не підтримується 32-бітовий захищений інтерфейс\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "Режим бездіяльності процесора уповільнює процесор\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "Режим бездіяльності процесора не уповільнює процесор\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM вимкнено\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM увімкнено\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM вільний\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM зайнятий\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Показати відомості APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "слід вказати файл або ритм і ноти" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "Некоректний ритм у %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "файл «%s» не знайдено" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "нерозпізнане число" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "ФАЙЛ | ТЕМП [ТОН1 ТРИВАЛІСТЬ1] [ТОН2 ТРИВАЛІСТЬ2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Відтворити звук." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "встановити режим numlock" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "встановити режим capslock" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "встановити режим scrolllock" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "встановити режим вставлення" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "встановити режим паузи" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "натиснути лівий shift" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "натиснути правий shift" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "натиснути SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "натиснути клавішу NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "натиснути клавішу CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "натиснути клавішу ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "натиснути клавішу Insert" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "натиснути лівий alt" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "натиснути правий alt" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "натиснути лівий ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "натиснути правий ctrl" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "не змінювати стан блоку індикаторів" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[КОМБІНАЦІЯ_КЛАВІШ1] [КОМБІНАЦІЯ_КЛАВІШ2] ..." + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Імітувати натискання послідовності клавіш" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Віддайте команду «go», щоб відновити роботу GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Повернутися до запрошення IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Надати змінній НАЗВА_ЗМІННОЇ прочитане значення." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "НАЗВА_ЗМІННОЇ" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "ПОРТ" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Прочитати 8-бітове значення з ПОРТу." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Прочитати 16-бітове значення з ПОРТу." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Прочитати 32-бітове значення з ПОРТу." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ПОРТ ЗНАЧЕННЯ [МАСКА]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Записати 8-бітове ЗНАЧЕННЯ до ПОРТу." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Записати 16-бітове ЗНАЧЕННЯ до ПОРТу." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "АДРЕСА ЗНАЧЕННЯ [МАСКА]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Записати 32-бітове ЗНАЧЕННЯ до ПОРТу." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "значення змінної «%s» не встановлено" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Завантажити розкладку клавіатури." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Перевірити стан Shift." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Перевірити стан Ctrl." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Перевірити стан Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Перевірити стан модифікатора клавіатури." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "не вдалося знайти команду «%s»" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Введіть пароль: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Обробити застарілі налаштування у тому самому контексті" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Обробити застарілі налаштування у новому контексті" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Обробити застарілі налаштування у тому самому контексті, використати лише " +"записи меню" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Обробити застарілі налаштування у новому контексті, використати лише записи " +"меню" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=ТИП] ФАЙЛ [ПАРАМЕТР ...]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Імітувати команду «kernel» попередньої версії grub" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "ФАЙЛ [ПАРАМЕТР ...]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Імітувати команду «initrd» попередньої версії grub" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Імітувати команду «modulenounzip» попередньої версії grub" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] ПАРОЛЬ [ФАЙЛ]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Імітувати команду «password» попередньої версії grub" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "" +"Імітувати команду «password» попередньої версії grub у режимі пункту меню" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Вказати назву файла." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Пропустити перевірку підписів файла середовища." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f ФАЙЛ] [-s|--skip-sig] [білий список змінних] [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Завантажити змінні з блокового файла оточення." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f ФАЙЛ]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Показати список змінних з блокового файла оточення." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f ФАЙЛ] назва_змінної [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Зберегти змінні до блокового файла оточення." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Показати довгий список з додатковими відомостями." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "Показати розміри у зручному для читання форматі." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Показати список всіх файлів." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Мережеві протоколи:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [ФАЙЛ ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Показати список пристроїв і файлів." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Показати лише таблиці версії 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Показати лише таблиці версії 2 і 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Показати дані щодо ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "доступна пам’ять" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "зарезервована пам’ять" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "відновлювана пам’ять ACPI" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "пам’ять для сталого сховища даних ACPI" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "помилка у пам’яті (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "постійна пам’ять" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "постійна пам’ять (застарілий)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "пам’ять з таблицями coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "пам’ять з кодом мікропрограми" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "базова_адреса = 0x%llx, довжина = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "базова_адреса = 0x%llx, довжина = 0x%llx, тип = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Показати карту пам’яті, надану мікропрограмою (firmware)." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Показати список пристроїв PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "Схвалити ФАЙЛ розділу HFS або HFS+ для Mac на основі Intel." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Схвалити КАТАЛОГ розділу HFS або HFS+ для Mac на основі PPC." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "АДРЕСА" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Прочитати 8-бітове значення за АДРЕСОЮ." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Прочитати 16-бітове значення за АДРЕСОЮ." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Прочитати 32-бітове значення за АДРЕСОЮ." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Записати 8-бітове ЗНАЧЕННЯ за АДРЕСОЮ." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Записати 16-бітове ЗНАЧЕННЯ за АДРЕСОЮ." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Записати 32-бітове ЗНАЧЕННЯ за АДРЕСОЮ." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Тип запису меню." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "РЯДОК" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Список користувачів, які можуть завантажувати цей пункт." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "КОРИСТУВАЧ[,КОРИСТУВАЧ]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Клавіша для завантаження цього пункту." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "КЛАВІША" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Використати РЯДОК як текст пункту меню." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Ідентифікатор пункту меню." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Систему цього пункту може завантажувати будь-який користувач." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "БЛОК" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Визначити запис меню." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Визначити підменю." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Назва\tК-ть посилань\tЗалежності\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Показати це повідомлення." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "АДРЕСА [РОЗМІР]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Показати вміст пам’яті." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "МОДУЛЬ" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Вилучити модуль." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Показати список завантажених модулів." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Вийти з GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Не виявлено CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 за адресою %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" +"Простір введення-виведення контролера каналу керування системою починається " +"з 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Слот пам’яті з номером %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Записаних байтів SPD: %d Б.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Загальний об’єм запису: %d Б.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Тип пам’яті: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Номер частини: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Тип пам’яті: невідомий." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Показати дані щодо пам’яті." + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "У %s не передбачено підтримки UUID" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[МОДУЛЬ1 МОДУЛЬ2 ...]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Перемкнутися на природні драйвери дисків. Якщо модулів не вказано, " +"використовується типова послідовність (pata,ahci,usbms,ohci,uhci,ehci)." + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Виконати КОМАНДИ обробки розділу.\n" +"Скористайтеся командою «parttool РОЗДІЛ help», щоб ознайомитися з доступними " +"командами." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=ЗНАЧЕННЯ" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Вибачте, не виявлено parttool для %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "невідомий аргумент, «%s»" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "КОМАНДИ РОБОТИ З РОЗДІЛАМИ" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "ПАРОЛЬ КОРИСТУВАЧА" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "" +"Визначити пароль користувача (незашифрованим). Небезпечно і не " +"рекомендується." + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "некоректний пароль PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "КОРИСТУВАЧ ПАРОЛЬ_PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Встановити пароль користувача (PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Вибрати пристрій за ідентифікаторами виробника і пристрою." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[виробник]:[пристрій]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Виберіть пристрій за його розташуванням на каналі." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[канал]:[слот][.функція]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "не вистачає символу «%c»" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s ПОЗИЦІЯ] [-d ПРИСТРІЙ]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Вивести необроблений дамп простору налаштовування PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Встановити змінну для повернутого значення." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Визначити драйвер." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Визначити тип карти розділів." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Визначити тип файлової системи." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Визначити UUID файлової системи." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Визначити мітку файлової системи." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "у файловій системі %s не передбачено підтримки міток" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "ПРИСТРІЙ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Отримати відомості щодо пристрою." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ЗМІННА_СЕРЕДОВИЩА]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Визначити значення змінної за введеними користувачем даними." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Перезавантажити комп’ютер." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Зберегти компонент з номером НОМЕР до змінної НАЗВА_ЗМІННОЇ." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[НОМЕР:]НАЗВА_ЗМІННОЇ" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "ФОРМАЛЬНИЙ_ВИРАЗ РЯДОК" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Перевірити відповідність ФОРМАЛЬНОГО ВИРАЗУ РЯДКУ." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "НАЗВА [ЗМІННА] [ПІДКАЗКИ]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Шукати пристрої за файлом. Якщо вказано ЗМІННУ, їй буде надано значення " +"першого знайденого пристрою." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Шукати пристрої за міткою. Якщо вказано ЗМІННУ, їй буде надано значення " +"першого знайденого пристрою." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Шукати пристрої за UUID. Якщо вказано ЗМІННУ, їй буде надано значення " +"першого знайденого пристрою." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Шукати пристрої за файлом." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Шукати пристрої за міткою файлової системи." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Шукати пристрої за UUID файлової системи." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Встановити для змінної значення першого знайденого пристрою." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Не шукати на дискетах." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Спершу спробувати пристрій ПІДКАЗКА. Якщо запис ПІДКАЗКА завершується комою, " +"також спробувати пошук на вкладених розділах." + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "ПІДКАЗКА" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Спершу спробувати пристрій ПІДКАЗКА у разі використання IEEE1275. Якщо запис " +"ПІДКАЗКА завершується комою, також спробувати вкладені розділи." + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Спершу спробувати пристрій ПІДКАЗКА у разі використання BIOS. Якщо запис " +"ПІДКАЗКА завершується комою, також спробувати вкладені розділи." + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Спершу спробувати пристрій ПІДКАЗКА у разі підтримки безпосереднього доступу " +"до обладнання. Якщо запис ПІДКАЗКА завершується комою, також спробувати " +"вкладені розділи." + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Спершу спробувати пристрій ПІДКАЗКА у разі використання EFI. Якщо запис " +"ПІДКАЗКА завершується комою, також спробувати вкладені розділи." + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Спершу спробувати пристрій ПІДКАЗКА у разі використання ARC. Якщо запис " +"ПІДКАЗКА завершується комою, також спробувати вкладені розділи." + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint ПІДКАЗКА [--hint ПІДКАЗКА] ...] НАЗВА" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Шукати пристрої за файлом, міткою файлової системи або унікальним " +"ідентифікатором файлової системи (UUID). Якщо вказано параметр --set, " +"змінній буде надано значення першого знайденого пристрою. Якщо назви змінної " +"не буде вказано, буде використано назву «root»." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Регістр %x з %x:%02x.%x дорівнює %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s ПОЗИЦІЯ] [-d ПРИСТРІЙ] [-v ЗМІННА] РЕГІСТР[=ЗНАЧЕННЯ[:МАСКА]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Керувати пристроями PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Докладний зворотний відлік." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Дозволити перервати за допомогою ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "КІЛЬКІСТЬ СЕКУНД" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Очікувати протягом вказаної кількості секунд." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "кореневий каталог диска syslinux [типово /]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"поточний каталог налаштувань syslinux (типовим є батьківський каталог файла " +"вхідних даних)." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "вважати вхідні дані файлом налаштувань isolinux." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "вважати вхідні дані файлом налаштувань pxelinux." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "вважати вхідні дані файлом налаштувань syslinux." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Виконати налаштування syslinux у тому самому контексті" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Виконати налаштування syslinux у новому контексті" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Виконати налаштування syslinux у тому самому контексті, використати лише " +"записи меню" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Виконати налаштування syslinux у новому контексті, використати лише записи " +"меню" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "не вказано терміналів" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "не знайдено термінала «%s»" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Активні термінали введення даних:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Доступні термінали введення даних:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Активні термінали виведення даних:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "Доступні термінали виведення даних:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [ТЕРМІНАЛ1] [ТЕРМІНАЛ2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Показати список або вибрати термінал для введення даних." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Показати список або вибрати термінал для виведення даних." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "ВИРАЗ ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Обчислити значення виразу." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "ВИРАЗ" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Завантажити файл у декілька способів." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Вкажіть розмір для кожної з дій щодо читання" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "некоректний розмір блоку" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Розмір файла: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Витрачено часу: %d.%03d с \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Швидкість: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s РОЗМІР] НАЗВА_ФАЙЛА" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Тестувати швидкість читання файла." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "не вказано команди" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Витрачено часу: %d.%03d секунд \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "КОМАНДА [ПАРАМЕТРИ]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Виміряти час, використаний на виконання КОМАНДИ" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Перетворити на символи верхнього регістру." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Перетворити на символи нижнього регістру." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[ПАРАМЕТРИ] [НАБІР1] [НАБІР2] [РЯДОК]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Виконати у РЯДКУ перетворення символів з НАБОРУ1 до НАБОРУ2." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Нічого не виконувати, успішне завершення." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Нічого не виконувати, невдале завершення." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Перевірка підтримки USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Пропустити перевірку файла відкритого ключа." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "некоректний підпис" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "не знайдено відкритого ключа %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "модуль «%s» не завантажено" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] ФАЙЛ ФАЙЛ_ПІДПИСУ [ФАЙЛ_ВІДКРИТОГО_КЛЮЧА]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Перевідкрити від’єднаний підпис." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] ФАЙЛ_ВІДКРИТОГО_КЛЮЧА" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Додати файл ФАЙЛ_ВІДКРИТОГО_КЛЮЧА до довірених ключів." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Вивести список довірених ключів." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ІД_ВІДКР_КЛЮЧА" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Вилучити ІД_ВІДКР_КЛЮЧА з довірених ключів." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Лише текст " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Безпосередній колір, маска: %d/%d/%d/%d позиція: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "З палітри " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Площинний " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Неланцюжковий 4 " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Чорно-білий " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Невідоме відео режим" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " Некоректна контрольна сума EDID" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " Версія EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Пріоритетний режим: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Пріоритетний режим недоступний\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "некоректна специфікація відеорежиму, «%s»" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Список підтримуваних відеорежимів:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Позначення: маска/позиція=червоний/зелений/синій/додатковий" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Адаптер «%s»:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Дані недоступні" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Не вдалося ініціалізувати відеоадаптер" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[ШxВ[xГ]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Показати список доступних відеорежимів. Якщо буде вказано роздільну " +"здатність, у списку залишаться лише режими, які їй відповідають." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[ШxВ]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Перевірити відеопідсистему у режимі ВxШ." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Перевірити відеопідсистему." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[КАТАЛОГ]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Показати список елементів сховища Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] UUID_GRUB [НАЗВА_ЗМІННОЇ]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Перетворити 64-бітове значення UUID у формат, що відповідає XNU. Якщо " +"вказано -l, залишати літери малими, як у даних blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "помилка під час читання сектора 0x%llx з «%s»" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "помилка під час спроби запису сектора 0x%llx до «%s»" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Змонтувати за UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Змонтувати всі." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Змонтувати всі томи зі встановленим прапорцем «boot»." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "не вдалося відкрити «%s»: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "не вдалося виконати seek для «%s»: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "ДЖЕРЕЛО|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Змонтувати пристрій з шифруванням даних." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Не вдалося знайти фізичний том «%s». Можливо, у основному образі не вистачає " +"якихось модулів." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "не знайдено фізичного тому %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "немає носія даних у «%s»" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Не вдалося завантажити sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Не вдалося завантажити sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "не вдалося прочитати метадані ELI" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "помилкова контрольна сума або версія ELI" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Спроба розшифрування основного ключа..." + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Введіть пароль до %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Відкрито слот %d\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "спроба читання або запису області поза межами диска «%s»" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "запис на компакт-диск неможливий" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Використовуються типові драйвери диска. У використанні інтерфейсу " +"мікропрограми диска відмовлено." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" +"об’єм вашого розділу LDM для вбудовування є занадто малим, — вбудовування " +"неможливе" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "у цього LDM немає розділу для вбудовування, — вбудовування неможливе" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Вилучити диск зворотної петлі." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] НАЗВА_ПРИСТРОЮ ФАЙЛ." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Створити віртуальний диск на основі файла." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "зміну розташування 0x%x ще не реалізовано" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "немає таблиці символів" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "тип цього файла ELF не є належним" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Завантажити і ініціалізувати емулятор EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Завершити завантаження емулятора EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Вивантажити емулятор EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "не знайдено символ «%s»" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Завантажені шрифти:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "ФАЙЛ..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Вказати один або декілька файлів для завантаження." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Список завантажених шрифтів." + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "занадто високий рівень вкладеності символічних посилань" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "спроба читання даних за кінцем файла" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"не вдалося знайти пристрою з потрібним вам номером у файловій системі, що " +"зберігається на декількох пристроях" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "не є каталогом" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "не є звичайним файлом" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" +"ваш файл core.img є доволі великим. Його не вдасться записати до області " +"вбудовування." + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "некоректна назва файла, «%s»" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "помилка під час спроби перевірки контрольної суми" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "не вказано ключа розшифрування" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "Помилка під час перевірки MAC-адреси" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Вважати вхідні дані необробленими." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Вважати вхідні дані шістнадцятковим значенням." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Вважати вхідні дані паролем." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Введіть пароль до ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [ФАЙЛ]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Імпортувати ключ ZFS, що зберігається у ФАЙЛі." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Віртуальний пристрій вилучено" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Дефектний віртуальний пристрій" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Віртуальний пристрій недоступний" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Віртуальний пристрій має погіршені характеристики" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Віртуальний пристрій доступний" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Некоректний віртуальний пристрій: тип недоступний" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Віртуальній пристрій-лист (файл або диск)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Шлях завантаження: недоступний\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Шлях завантаження: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Шлях: недоступний" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Шлях: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "Ід. пристрою: недоступний" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "Ід. пристрою: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "Цей VDEV є дзеркалом" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "Цей VDEV є RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "Некоректний VDEV" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV з %d дочірніми об’єктами\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "Елемент номер %d VDEV є помилковим\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "Елемент номер %d VDEV:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Невідомий тип віртуального пристрою: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Стан сховища: активне" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Стан сховища: експортоване" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Стан сховища: знищено" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Стан сховища: зарезервовано для гарячого резервування" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Стан сховища: пристрій ARC рівня 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Стан сховища: неініціалізоване" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Стан сховища: недоступне" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Стан сховища: потенційно активне" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Стан сховища: недоступне" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Назва сховища: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID сховища: недоступне" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID сховища: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Не вдалося отримати дані щодо стану сховища" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Нерозпізнаний стан сховища" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Ієрархія віртуальних пристроїв недоступна" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Вивести дані ZFS щодо ПРИСТРОЮ." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "ФАЙЛОВА_СИСТЕМА [ЗМІННА]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Вивести ZFS-BOOTFSOBJ або записати його значення в ЗМІННУ " + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" +"Зараз, будь ласка, встановіть зв’язок з віддаленого засобу діагностики." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Запустити заглушку GDB на вказаному порті" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Перервати роботу і перемкнутись на GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Зупинити роботу заглушки GDB" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "завчасне завершення файла" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Перекладає рядок відповідно до поточних параметрів." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Натисніть Enter, щоб почати завантаження позначеної ОС. Натисніть «e», щоб " +"змінити команду до завантаження системи, «c» — щоб перейти у режим " +"командного рядка. Esc — повернутися до попереднього меню." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Натисніть Enter, щоб почати завантаження позначеної ОС. Натисніть «e», щоб " +"змінити команду до завантаження системи, «c» — щоб перейти у режим " +"командного рядка." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "enter: завантаження, «e»: параметри, «c»: кмд-рядок" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Обробку позначеного пункту буде автоматично виконано за %d с." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "Залишилося %d с." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%dс" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Меню завантаження GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: значення %s є меншим або рівним %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: параметр ARGP_HELP_FMT потребує значення" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: параметр ARGP_HELP_FMT має бути додатним" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: невідомий параметр ARGP_HELP_FMT" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Мотлох у ARGP_HELP_FMT: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Обов’язкові і додаткові аргументи до довгих форм запису параметрів є також " +"об’язковими або додатковими для всіх відповідних скорочених форм запису." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " або " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [ПАРАМЕТР...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Виконайте команду «%s --help» або «%s --usage», щоб дізнатися більше.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Повідомляйте про вади на адресу %s.\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Невідома системна помилка" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "показати ці довідкові дані" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "отримати коротке повідомлення щодо використання" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "НАЗВА" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "встановити назву програми" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "СЕК" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "затриматися на СЕК секунд (типово, на 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "вивести дані щодо версії програми" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ПОМИЛКА ПРОГРАМИ) Невідома версія!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: занадто багато аргументів\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ПОМИЛКА ПРОГРАМИ) Параметр має розпізнаватися!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: неоднозначний параметр «%s»; можливі варіанти:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: додавання аргументів до параметра «--%s» не передбачено\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: додавання аргументів до параметра «%c%s» не передбачено\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: до параметра «--%s» слід додати аргумент\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: невідомий параметр «--%s»\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: невідомий параметр «%c%s»\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: некоректний параметр — «%c»\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: до параметра слід додати аргумент — «%c»\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: параметр «-W %s» не є однозначним\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: додавання аргументів до параметра «-W %s» не передбачено\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: до параметра «-W %s» слід додати аргумент\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Успіх" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Не знайдено" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Помилка у формальному виразі" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Некоректний символ порівняння" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Некоректна назва класу символів" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Кінцевий символ похилої риски" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Некоректне зворотне посилання" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Неврівноважена послідовність [ або [^" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Неврівноважена послідовність ( або \\(" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Неврівноважена послідовність \\{" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Некоректний вміст \\{\\}" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Некоректне завершення діапазону" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Пам’ять вичерпано" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Помилка у попередньому формальному виразі" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Неочікуване завершення формального виразу" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Занадто об’ємний формальний вираз" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Неврівноважена послідовність ) або \\)" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "невідома помилка під час обробки формального виразу" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Не виявлено попереднього формального виразу" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Привіт, світе" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "Повідомити «Привіт, світе»." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "спроба встановлення позиції поза межами файла" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "Непідтримуваний формат gzip" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "файл lzop пошкоджено" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "файл xz пошкоджено або вказано непідтримувані параметри блоку" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "некоректна залежна від архітектури позначка у ELF" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ЗМІННА_СЕРЕДОВИЩА=ЗНАЧЕННЯ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Встановити змінну середовища." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ЗМІННА_СЕРЕДОВИЩА" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Вилучити змінну середовища." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ПАРАМЕТР]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Список пристроїв або файлів." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Вставити модуль." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "не знайдено диска «%s»" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "спроба читання або запису блоку даних поза розділом" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "некоректна незалежне від архітектури позначка у ELF" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "перевищено обмеження на кількість пристроїв" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "не вдалося виконати запис до «%s»: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"запис device.map «%s» є некоректним. Будь ласка, виправте його або вилучіть " +"ваш device.map" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"назва диска «%s» у device.map є некоректною. Використовуємо замість неї %s. " +"Будь ласка, використовуйте формат [hfc]d[0-9]* (наприклад «hd0» або «cd»)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "не вдалося відкрити «%s»: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "НАЗВА_ПРИСТРОЮ" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Вказати кореневий пристрій." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "використовувати ФАЙЛ яка карту пристрою [типове значення=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "використовувати ФАЙЛ як диск у пам’яті" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "використовувати файли GRUB у каталозі КАТАЛОГ [типове значення=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "показати докладні повідомлення." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "зачекати на долучення зневадника " + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Невідомий додатковий параметр «%s»." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Імітатор GRUB. " + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Помилка під час спроби обробки параметрів командного рядка\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" +"Віддайте команду «gdb %s %d» і встановіть нульове значення ARGS.HOLD.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: попередження:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: інформація:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: помилка:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "файл «%s» є надто великим" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "невідома файлова система" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Не вдалося вимкнути" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Не вдалося завершити роботу" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "виявлено переповнення" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Відкидаємо помилково вкладений розділ (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Невідома команда «%s».\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Показати ці довідкові дані і завершити роботу." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Показати довідку з цієї команди і завершити роботу." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "не вказано обов’язкового параметра для «%s»" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "разом з аргументом «%s» слід вказати ціле число" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"спроба надання аргументу «%s» певного значення, хоча цей аргумент не потрібен" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Вивести дані зворотного трасування." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB ще невідомий спосіб вимикання цього комп’ютера!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Типовим сервером є ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "некоректне визначення кольору, «%s»" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Не вдалося перезавантажити" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[ДОВЖИНА]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Шістнадцятковий дамп випадкових даних." + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "мало бути надано ієрархію пристроїв (див. команду «devicetree»)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "некоректний образ zImage" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "некоректна ієрархія пристроїв" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Завантажити Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Завантажити initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Завантажити файл DTB." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"підтримки звичайного ядра образу не передбачено. Виконайте повторне збирання " +"з увімкненим параметром CONFIG_(U)EFI_STUB." + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "не вдалося отримати FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "спочатку слід завантажити гіпервізор Xen" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Завантажити гіпервізор xen." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Завантажити модуль xen." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[ПАРАМЕТРИ]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Завантажити систему, засновану на BIOS." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Завантажити інший інструмент завантаження." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Показувати повідомлення у всіх консолях." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Використовувати консоль на послідовному порті." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Запитати про назву файла для перезавантаження." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Використовувати компакт-диск як кореневу теку." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Виконати налаштування маршрутизації користувачем." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Увійти до KDB під час завантаження." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Використати віддалений інструмент зневаджування GDB замість DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Вимкнути виведення всіх повідомлень під час завантаження." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Очікувати на натискання клавіші після кожного виведеного рядка." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Використовувати вбудований кореневий пристрій." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Завантажити систему у режимі єдиного користувача." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Показувати докладні повідомлення під час завантаження." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Не виконувати перезавантаження, просто вимкнути." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Змінити налаштовані пристрої." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "одинОБМІНУ[,ШВИДКІСТЬ]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Вимкнути SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Вимкнути ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Не показувати діагностичні повідомлення при завантаженні." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Завантаження з показом діагностичних повідомлень." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Придушити звичайні повідомлення (показувати лише попередження)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[АДРЕСА|одинОБМІНУ][,ШВИДКІСТЬ]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "назва" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "тип" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "адреса" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "розмір" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Завантаження системи у «сліпому» режимі" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Завантажити ядро FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Завантажити ядро OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Завантажити ядро NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Завантажити середовище FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Завантажити модуль ядра FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Завантажити модуль ядра NetBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Завантажити модуль ядра NetBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Завантажити модуль ядра FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Завантажити диск даних оперативної пам’яті kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Завантажити інші дані coreboot" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Підтримки застарілого параметра «ask» вже не передбачено." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s вважається застарілим. Замість нього скористайтеся set gfxpayload=%s до " +"команди linux.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"%s вважається застарілим. Режим VGA %d не розпізнається. Замість нього " +"скористайтеся set gfxpayload=ШИРИНАxВИСОТА[xГЛИБИНА] перед командою linux.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] ФАЙЛ" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "розмір «%s» є занадто великим" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Завантажити kernel.sys FreeDOS." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Завантажити NTLDR або BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Перевизначити вгадану карту пристроїв Plan9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "ПРИСТРІЙ_GRUB=ПРИСТРІЙ_PLAN9" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "ЯДРО АРГУМЕНТИ" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Завантажити ядро Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Завантажити образ PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Завантажити образ ISO з Truecrypt." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd вже завантажено" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Завантажити модуль." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Натисніть будь-яку клавішу, щоб запустити xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Завантажити дамп «device-properties»." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Не вдалося виявити драйвер FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Протоколу FPSWA не вдалося знайти інтерфейс" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "FPSWA не знайдено" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Модифікація FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "ФАЙЛ [ПАРАМЕТРИ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Показати дані щодо версії FPSWA." + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "УВАГА: консоль не буде доступною ОС" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Завантажити ядро multiboot 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Завантажити модуль multiboot 2." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Завантажити ядро multiboot." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Завантажити модуль multiboot." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Режим фонового зображення." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "stretch|normal" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Завантажити образ XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Завантажити 64-бітовий образ XNU." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Завантажити пакунок розширення XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Завантажити розширення XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "КАТАЛОГ [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Завантажити каталог розширення XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" +"Завантажити диск у пам’яті XNU. У операційній системі буде показано як md0." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Завантажити вітальне зображення для XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Завантажити образ XNU приспаної системи." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "АДРЕСА1,МАСКА1[,АДРЕСА2,МАСКА2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Позначити діапазони пам’яті як пошкоджені (badram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "З[K|M|G] ДО[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Вилучити всі ділянки пам’яті у вказаному діапазоні." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "мало бути вказано чотири аргументи" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "нерозпізнаний інтерфейс мережі, «%s»" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "не знайдено даних щодо DHCP" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "не знайдено параметрів DHCP" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "не знайдено параметра %d DHCP" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "непридатне до розпізнавання визначення формату параметра DHCP, «%s»" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "мережевої картки не знайдено" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "не вдалося виконати автоматичне налаштування %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[КАРТКА]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "виконати автоматичне налаштування bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "ЗМІННА ІНТЕРФЕЙС НОМЕР ОПИС" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"отримати значення параметра DHCP і зберегти його до ЗМІННОЇ. Якщо ЗМІННОЮ є " +"-, вивести значення." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "не налаштовано серверів DNS" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "компонент назви домену є занадто довгим" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "не знайдено запису DHCP" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "не отримано відповіді DNS" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "лише ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "лише ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "перевага ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "перевага ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "некоректний аргумент" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "АДРЕСА СЕРВЕР_DNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Виконати пошук DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "СЕРВЕР_DNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Додати сервер DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Вилучити сервер DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Показати список серверів DNS." + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "не вдалося надіслати пакет даних мережею" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "підтримки інтерпретації не передбачено" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "помилка alloc-mem" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "помилка free-mem" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "непідтримувана відповідь HTTP" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "непідтримуване повідомлення про помилку HTTP, %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "перевищення часу очікування на відкриття «%s»" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "перевищення часу очікування: не вдалося визначити апаратну адресу" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "непридатна до визначення адреса %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "нерозпізнана адреса у мережі, «%s»" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "призначення недоступне" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "виявлено циклічну маршрутизацію" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "адресу не знайдено" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "ви не можете вилучити цю адресу" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Непідтримуваний тип апаратної адреси, %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Непідтримуваний тип адреси, %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "мало бути вказано три аргументи" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "не знайдено картки" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "тимчасова" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Невідомий тип адреси, %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "не вказано сервера" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "перевищення часу очікування під час читання «%s»" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "СКОРОЧЕНА_НАЗВА КАРТКА АДРЕСА [АПАРАТНА_АДРЕСА]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Додати мережеву адресу." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[КАРТКА [АПАРАТНА_АДРЕСА]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Виконати автоматичне налаштовування IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "СКОРОЧЕНА_НАЗВА" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Вилучити адресу у мережі." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "СКОРОЧЕНА_НАЗВА МЕРЕЖА [ІНТЕРФЕЙС| gw ШЛЮЗ]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Додати мережевий маршрут." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Вилучити мережевий маршрут." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "показати список мережевих маршрутів" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "показати список мережевих карток" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "показати список мережевих адрес" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "у з'єднанні відмовлено" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "перевищено час очікування на з’єднання" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Введіть ім’я користувача: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[СПИСОК_КОРИСТУВАЧІВ]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Перевірити, чи є запис користувача у СПИСКУ_КОРИСТУВАЧІВ." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Можливі команди:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Можливі пристрої:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Можливі файли:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Можливі розділи:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Можливі параметри:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Можливі елементи:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Попередження: синтаксична помилка (немає похилої риски) у «%s»\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Попередження: некоректний колір тексту «%s»\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Попередження: помилковий колір тла «%s»\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ЗМІННА_СЕРЕДОВИЩА [ЗМІННА_СЕРЕДОВИЩА] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Експортувати змінні." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "неділя" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "понеділок" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "вівторок" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "середа" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "четвер" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "п’ятниця" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "субота" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "модуль не завантажено" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB, версія %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Щоб вийти, натисніть ESC." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Передбачено підтримку декількох BASH-подібних команд редагування рядків. " +"Натискання клавіші TAB під час введення першого слова призведе до показу " +"можливих варіантів завершення команди. Для інших слів натискання TAB " +"призведе до показу списку можливих варіантів завершення назви пристрою або " +"файла. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Спорожнити екран." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Увійти у звичайний режим." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Вийти зі звичайного режиму." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Натисніть будь-яку клавішу, щоб продовжити..." + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Завантаження «%s»" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Повертаємося до «%s»" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Не вдалося завантажити типовий та резервний записи.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Завантаження списку команд" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Передбачено підтримку декількох команд Emacs-подібного редагування рядків. " +"Натискання клавіші TAB призводить до показу списку можливих варіантів " +"завершення, натискання Ctrl-X або F10 — до завантаження, Ctrl-C або F2 — до " +"переходу у режим командного рядка, ESC — до відкидання внесених змін і " +"повернення до меню GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Скористайтеся клавішами %C і %C для позначення пункту." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "Б" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "КіБ" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "МіБ" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "ГіБ" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "ТіБ" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "ПіБ" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "К" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "М" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "Г" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "Т" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "П" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "Б/с" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "КіБ/с" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "МіБ/с" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "ГіБ/с" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "ТіБ/с" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "ПіБ/с" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Розділ %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Пристрій %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Файлова система недоступна" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Тип файлової системи %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Мітка «%s»" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Час останньої зміни — %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Виявлено невідому файлову систему" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Розділ починається з %llu%s КіБ" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Розмір сектора: %u Б" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Загальний розмір невідомий" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Загальний розмір %llu%s КіБ" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ",5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--БІЛЬШЕ--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "не вдалося відкрити файл налаштувань «%s»: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "на вашій платформі не передбачено стискання" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "на вашій платформі не передбачено процедур IEEE1275" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "на вашій платформі не передбачено процедур EFI" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "на вашій платформі не передбачено процедур SGI" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" +"grub невідомий спосіб отримання псевдовипадкових чисел у вашій операційній " +"системі" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Не вдалося створити ієрархію «device-mapper»" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "не вдалося змонтувати шифрований том «%s»: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "не вдалося відкрити дані щодо геометрії" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "не вдалося знайти споживача geli" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "не вдалося отримати UUID geli" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "не вдалося знайти клас «part» geom" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "невирівняний об’єм пристрою" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "спроба читання основного образу «%s» з GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "повторна спроба читання основного образу «%s» з GRUB" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "не вдалося правильно прочитати «%s»" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "не вдалося прочитати сектори основного образу" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "не вдалося отримати рядок команди відображення для шляху «%s»: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "для шляху «%s» рядок команди відображення є порожнім" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"у відображенні «%s» для шляху «%s» вказано декілька слів, непов’язаних з " +"параметрами, принаймні «%s» і «%s»." + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"у відображенні «%s» для шляху «%s» вказано лише параметри, не вдалося знайти " +"частину визначення пристрою" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Дані щодо сховища «%s» не містять типу" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "«%s» не є локальним диском" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Дані щодо сховища «%s» не визначають ні даних щодо звичайного розділу, ні " +"даних щодо звичайного диска" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "не вдалося отримати список блоків: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "розмір блоку не є кратним до 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "некоректний нульовий розмір блоку" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "не вдалося отримати список блоків" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "Помилка RAID_VERSION ioctl: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "непідтримувана версія RAID: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "Помилка GET_ARRAY_INFO ioctl: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "Помилка GET_DISK_INFO ioctl: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Не вдалося відкрити потік даних з %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "невідомий тип пристрою RAID, «%s»" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"Не знайдено «obppath» у батьківських каталогах «%s», немає засобу визначення " +"назв IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "не вдалося отримати канонічний шлях «%s»" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "невідомий тип пристрою %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Використання: %s ПРИСТРІЙ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Не вдалося створити розгалуження: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Не вдалося створити канал передавання даних: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "не вдалося відновити початковий каталог" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "не вдалося виконати stat для «%s»: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "не вдалося створити тимчасовий файл: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "не вдалося створити тимчасовий каталог: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"Не вдалося знайти шлях до пристроїв IEEE1275 для %s.\n" +"Вам слід встановити значення змінної «boot-device» вручну." + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: не знайдено" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"помилка «nvsetenv». \n" +"Вам слід встановити значення змінної «boot-device» вручну. У полі запиту " +"IEEE1275 введіть:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Вам слід встановити «SystemPartition» і «OSLoader» вручну." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "у повній назві немає символу «/»" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "помилка cygwin_conv_path()" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "не вдалося отримати випадкові дані" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" +"Недостатньо прав доступу для отримання даних щодо мікропрограми, припускаємо " +"BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "у режимі BIOS не можна використовувати процедури EFI" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "неочікувана помилка EFI" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Не вдалося знайти вільного слоту BootNNNN" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"ця мітка розділу GPT не містить розділу для завантаження BIOS, — " +"вбудовування неможливе" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"розміри вашого розділу для завантаження BIOS є занадто малими, — " +"вбудовування неможливе" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Сектор %llu вже використано контролером raid «%s»; пропускаємо його. Будь " +"ласка, надішліть виробникові пристрою для зберігання даних прохання не " +"зберігати дані у області MBR." + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Сектор %llu вже використано програмою «%s»; пропускаємо його. Вказана " +"програма може призвести до проблем з завантаженням або інших проблем у " +"роботі системи. Будь ласка, попросіть авторів програми не зберігати дані у " +"області завантаження." + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"область вбудовування використано іншим програмним забезпеченням. Для core." +"img залишилося недостатньо місця. Подібне зберігання даних часто пов’язане " +"зі спробою приховати втручання у систему. Рекомендуємо вам виконати " +"докладніше розслідування цього інциденту." + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"ця мітка розділу у форматі msdos не містить проміжку після MBR, — " +"вбудовування неможливе" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"ваша область вбудовування є надзвичайно малою. core.img не вміститься у цій " +"області." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Зробити розділ активним" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "не є основним розділом" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Розділ %d зараз є активним. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Занулено активний прапорець на %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Змінити тип розділу" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Встановити прапорець «hidden» у типі розділу" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "тип розділу 0x%x є некоректним" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Встановлення типу розділу у значення 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "розгортання 0 циклів неможливе" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "поза кодом функції" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "некоректна назва змінної, «%s»" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "несподіваний кінець файла" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[ЧИСЛО]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Вийти з циклів" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Продовжити виконання команд циклу" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Зсунути значення позиційних параметрів." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[ЗНАЧЕННЯ]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Встановити значення позиційних параметрів." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Повернутися з функції." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] ФАЙЛ" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Завантажити зображення тла для активного термінала." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "КОЛІР" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Встановити колір тла для активного термінала." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Показати вміст консолі CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Вказати номер послідовного порту." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Вказати адресу послідовного порту." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Вказати швидкість послідовного порту." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Вказати довжину слова послідовного порту." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Вказати парність послідовного порту." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Вказати кількість стоп-бітів послідовного порту." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Встановити основну частоту." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Увімкнути або вимкнути RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "не знайдено послідовного порту «%s»" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "непідтримуване керування передаванням даних послідовним портом" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[ПАРАМЕТРИ...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Вказати послідовний порт." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "невідомий тип terminfo, «%s»" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "візуально впорядковане UTF-8." + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Невідоме кодування" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Поточні типи terminfo:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "У терміналі можна використовувати лише ASCII [типове значення]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Термінал з логічним впорядкуванням UTF-8." + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Термінал з візуальним впорядкуванням UTF-8." + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Термінал має відповідні геометричні параметри." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "ШИРИНАxВИСОТА." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "некоректне визначення розмірностей термінала" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "термінала %s не знайдено або terminfo не працює з цим терміналом" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g ВxШ] ТЕРМІНАЛ [ТИП]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Встановити значення типу terminfo ТЕРМІНАЛА ТИП.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Вивести і виконати блоковий параметр." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "підтримки формату растрового зображення «%s» не передбачено" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" +" Дані VBE: версія: %d.%d мод. програмного забезпечення OEM: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " загалом пам’яті: %d КіБ\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "не знайдено відповідного відеорежиму" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "доступ заборонено" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "МОДУЛІ" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "попередньо завантажити вказані МОДУЛІ" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "встановити лише вказані МОДУЛІ та їхні залежності [типово усі]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "ТЕМИ" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "встановити ТЕМИ [типово %s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "ШРИФТИ" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "встановити ШРИФТИ [типово %s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "ЛОКАЛІ" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "встановити лише вказані ЛОКАЛІ [типово буде встановлено всі]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "стискати файли GRUB [необов'язкове]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "виберіть режим стискання для основного образу" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "використовувати образи і модулі у КАТАЛОЗІ [типово=%s/<платформа>]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "використовувати переклади у КАТАЛОЗІ [типово %s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "використовувати теми у КАТАЛОЗІ [типово %s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "вбудувати ФАЙЛ як відкритий ключ для перевірки підписів" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "не вдалося перейменувати файл %s на %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "диска не існує, повертаємося до пристрою розділу %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Команди:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Створити блоковий файл порожнього середовища." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Показати список поточних змінних." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [НАЗВА=ЗНАЧЕННЯ ...]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Встановити значення змінних." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [НАЗВА ...]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Вилучити змінні." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Параметри:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Вам слід вказати принаймні одну команду.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "НАЗВА_ФАЙЛА КОМАНДА" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Інструмент для редагування блоку середовища." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Якщо буде вказано НАЗВУ_ФАЙЛА «-», буде використано типове значення, %s.\n" +"\n" +"Команди «delete» не передбачено. Якщо вам потрібно вилучити увесь блок " +"середовища,\n" +"скористайтеся командою «rm %s»." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "некоректний блок середовища" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "некоректний параметр, %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "занадто малий блок середовища" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "" +"спроба читання даних з диска зазнала невдачі на позиції %lld, довжина %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "некоректне значення пропуску %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "помилка читання з позиції %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "не вдалося відкрити файл ОС %s: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "не вдалося виконати запис до стандартного виведення: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "помилка порівняння у позиції %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Помилка під час спроби відкриття файла ОС, %s: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "помилка команди «loopback»: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "помилка команди «cryptomount»: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "не вдалося отримати UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls ШЛЯХ" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Показати список файлів у каталозі ШЛЯХ." + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp ФАЙЛ ЛОКАЛЬНИЙ_ФАЙЛ" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Копіювати ФАЙЛ у ЛОКАЛЬНИЙ_ФАЙЛ." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat ФАЙЛ" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Копіювати ФАЙЛ до стандартного виведення даних." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp ФАЙЛ ЛОКАЛЬНИЙ_ФАЙЛ" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "Порівняти ФАЙЛ з ЛОКАЛЬНИМ_ФАЙЛОМ." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex ФАЙЛ" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Показати вміст файла ФАЙЛ у шістнадцятковому форматі." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc ФАЙЛ" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Визначити контрольну суму crc32 ФАЙЛа." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist ФАЙЛ" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Показати список блоків ФАЙЛа." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid ПРИСТРІЙ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Обчислити UUID XNU пристрою." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "ЧИСЛО" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Пропустити N байтів з файла виведених даних." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Обробити N байтів з файла виведених даних." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Вказати кількість файлів вхідних даних." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Встановити зневаджувальну змінну середовища." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Змонтувати пристрої з шифруванням даних." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "ФАЙЛ|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Завантажити ключ шифрування zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "Розпакувати дані." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Некоректна кількість дисків.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Перед списком дисків слід вказати кількість дисків.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "Не вказано команди.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Недостатньо параметрів команди.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Некоректна команда %s.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "АДРЕСА_ОБРАЗУ КОМАНДИ" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Інструмент діагностики драйвера файлової системи." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "встановити назву файла вхідних даних для 32-бітової частини." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "встановити назву файла вхідних даних для 64-бітової частини." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "встановити назву файла для виведення даних. Типовим є STDOUT." + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[ПАРАМЕТРИ]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" +"З’єднати 32-бітовий і 64-бітовий виконувані файли в універсальний файл Apple." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Не вказано файла вхідних даних\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "не вдалося скопіювати «%s» до «%s»: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "не вдалося стиснути «%s» до «%s»" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "не вдалося відкрити каталог «%s»: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "не вдалося вилучити «%s»: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage зібрано без підтримки XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Невідомий формат стискання %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Невідоме стискання, «%s»" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "невідомий формат призначення %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "не вдалося знайти локаль «%s»" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s не існує. Будь ласка, вкажіть --target або --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "некоректний файл modinfo, «%s»" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Невідома платформа, «%s-%s»" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Декілька пристроїв для встановлення?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "встановити образи GRUB у каталозі КАТАЛОГ/%s замість каталогу %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ПРИЗНАЧЕННЯ" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" +"Встановити GRUB для платформи ПРИЗНАЧЕННЯ [типове значення — %s]; доступні " +"призначення: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"уможливити завантаження з пристрою, як з дискети (типова поведінка для " +"пристроїв fdX). Може призвести до непрацездатності з деякими BIOS." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "вилучити карту пристроїв, якщо вона вже існує" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "встановити, навіть якщо буде виявлено проблеми" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "використовувати файл ідентифікатора, навіть якщо доступним буде UUID" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"модуль диска, який слід використовувати (biosdisk або native). Цим " +"параметром можна скористатися лише у системі призначення з BIOS." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"не оновлювати змінні NVRAM «boot-device»/«Boot*». Цим параметром можна " +"скористатися лише для EFI і IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "не шукати файлові системи на ПРИСТРОЇ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "не встановлювати сектор завантаження" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Не застосовувати коди Ріда-Соломона, якщо виконується вбудовування core.img. " +"Цим параметром можна скористатися лише для BIOS x86." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" +"пристрій для встановлення є портативним. Цим параметром можна скористатися " +"лише у системах з EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ІД" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" +"ідентифікатор інструмента завантаження. Цим параметром можна скористатися " +"лише у системах з EFI і на Mac." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "використати КАТАЛОГ як кореневий каталог системного розділу EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "використовувати КАТАЛОГ для встановлення PPC MAC." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "використати ФАЙЛ як шрифт для мітки" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "використати КОЛІР для мітки" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "використати КОЛІР для тла мітки" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "використати РЯДОК як версію продукту" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[ПАРАМЕТР] [ПРІСТРІЙ_ДЛЯ_ВСТАНОВЛЕННЯ]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Встановити GRUB на ваш пристрій." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"Значенням параметра ПРІСТРІЙ_ДЛЯ_ВСТАНОВЛЕННЯ має бути назва файла " +"системного пристрою.\n" +"%s копіює образи GRUB до %s. На деяких платформах також може бути " +"встановлено GRUB до сектора завантаження." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "диск %s визначається декілька разів у карті пристроїв %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" +"Не вдалося визначити вашу платформу. Скористайтеся параметром --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Встановлюємо для платформи %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "не вказано пристрою для встановлення." + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "не вдалося знайти каталог EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "не вдалося знайти пристрій для %s (чи змонтовано /dev?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "не вдалося знайти диск GRUB для %s. Перевірте правильність device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s не є розділом EFI" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Вами виявлено ваду" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "файлова система на %s не належить до типу HFS або HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"спроба встановити на шифрований диск без вмикання cryptodisk. Слід вказати " +"«%s» у файлі «%s»" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Не вдалося створити файл: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"підказок для вашої платформи не передбачено. Швидкодія може зменшитися." + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "НЕ ЗАПУЩЕНО: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "вибраний розділ не є розділом PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "не вдалося скопіювати Grub до розділу PReP" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"розділ PReP не є порожнім. Якщо вам справді хочеться ним скористатися, " +"віддайте команду dd, щоб спорожнити його: «%s»" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Не вказано ідентифікатор завантажувача EFI." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "УВАГА: не було виконано специфічного для платформи встановлення" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Встановлення завершено. Помилок не виявлено." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "схвалити для Mac на основі x86" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "схвалити для Mac на основі PPC" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Не вказано шляху або пристрою.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc ШЛЯХ|--x86 ФАЙЛ" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Схвалення у стилі Mac на HFS або HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Використання: %s [ВХІДНИЙ_ФАЙЛ [ВИХІДНИЙ_ФАЙЛ]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" +"Помилка Freetype %d під час спроби завантаження гліфа 0x%x для U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr " (середній)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr " (найлівіший)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr " (найправіший)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Заміна поза діапазоном (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Пошук поза діапазоном: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Непідтримуваний тип заміни: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Непідтримувана специфікація заміни: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Непідтримувана специфікація покриття: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "УВАГА: непідтримувані параметри шрифту: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "зберегти виведені дані до ФАЙЛа [обов’язковий параметр]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "встановити індекс гарнітури" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "З-ДО[,З-ДО]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "встановити діапазон шрифту" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "встановити назву гарнітури шрифту" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "РОЗМІР" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "встановити розмір шрифту" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "встановити нижню межу шрифту" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "встановити верхню межу шрифту" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "перетворити на напівжирний стиль" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "примусовий автоматичний гінтінґ" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "вимкнути гінтінґ" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "ігнорувати растрові штрихи під час завантаження" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "некоректний діапазон шрифту" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[ПАРАМЕТРИ] ФАЙЛИ_ШРИФТІВ" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Перетворити типові формати шрифтів на PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "має бути вказано файл для виведення даних" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "Помилка FT_Init_FreeType" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "не вдалося відкрити файл %s, індекс %d: помилка %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "не вдалося встановити розмір шрифту %dx%d: помилка Freetype %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "встановити каталог префікса" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"вбудувати ФАЙЛ як образ диска у пам’яті\n" +"Типово використовується «-p (memdisk)/boot/grub», а усі раніше визначені " +"префікси перевизначаються, але сам префікс може бути перевизначено " +"параметрами, вказаними пізніше" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "вбудувати ФАЙЛ як файл попереднього налаштування" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "додати сегмент НОТАТКА для відкритої мікропрограми CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "вивести створений образ до файла ФАЙЛ [типовий=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ФОРМАТ" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "створити образ у форматі ФОРМАТ" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "доступні формати:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "невідомий формат призначення %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[ПАРАМЕТР]... [МОДУЛІ]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Створити придатний до завантаження образ GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Формат призначення не вказано (скористайтеся параметром -O)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Не вказано префікс (скористайтеся параметром -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"«%s» зібрано з помилками: він розпочинається з адреси 0x%llx замість 0x%llx: " +"помилка ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "встановити назву файла вхідних даних. Типовим є STDIN." + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Невідома назва клавіші, %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Невідомий код клавіші 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" +"ПОМИЛКА: не знайдено відповідної розкладки клавіатури. Перевірте вхідні " +"дані.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" +"Створити клавіатурну розкладку GRUB на основі розкладки для консолі Linux." + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "кореневий каталог сервера TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "відносний підкаталог на мережевому сервері" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Готує образи GRUB для завантаження з мережі у каталозі каталог_у_мережі/" +"підкаталог, де каталог_у_мережі є кореневим каталогом TFTP." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "непідтримувана платформа %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Створено каталог завантаження з мережі, %s. Налаштуйте ваш сервер DHCP так, " +"щоб його було спрямовано на %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Кількість ітерацій PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Довжина створеного хешу" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Довжина солі" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Створити хеш пароля PBKDF2." + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "не вдалося прочитати пароль" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Повторіть пароль: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "паролі не збігаються" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "не вдалося отримати випадкові дані для солі" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "помилка шифрування з номером %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "Хеш PBKDF2 вашого пароля дорівнює %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Не вказано шлях.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ШЛЯХ" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Перетворити назву файла у системі на назву у GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "зберегти образи ROM до каталогу КАТАЛОГ [необов’язковий параметр]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "використовувати ФАЙЛ як xorriso [необов’язковий параметр]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "використати РЯДОК як назву продукту" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"увімкнути завантаження sparc. Вимикає дискові образи HFS+, APM, ARCS і boot " +"для i386-pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"увімкнути завантаження ARCS (для комп’ютерів mips зі зворотним порядком " +"байтів, зокрема SGI). Вимикає образи завантаження HFS+, APM, sparc64 і boot " +"для i386-pc." + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Створити придатний до завантаження образ GRUB на компакт-диску, карті " +"пам’яті або дискеті." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Створює придатний до завантаження образ для компакт-диска, USB або дискети. " +"Усі аргументи, які не є параметрами цієї програми, буде передано програмі " +"xorriso. Ці аргументи визначають початкові файли, каталоги початкових даних " +"або будь-які параметри mkisofs зі списку, виведеного «%s»." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Параметр -- перемикає у режим типових команд xorriso." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" +"Запити щодо підтримки xorriso слід надсилати на адресу ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[ПАРАМЕТР] ДЖЕРЕЛО..." + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "вмикаємо підтримку %s ..." + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"У вашому xorriso не передбачено підтримки «--grub2-boot-info». Деякі з " +"можливостей вимкнено. Будь ласка, скористайтеся xorriso 1.2.9 або новішою " +"версією." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"У вашому xorriso не передбачено підтримки «--grub2-boot-info». Основний ядра " +"образ є надто великим. Завантаження у форматі диска вимкнено. Будь ласка, " +"скористайтеся xorriso 1.2.9 або новішою версією." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "Створити окремий образ (що містить всі модулі) у вибраному форматі" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" +"Можна використовувати синтаксичні конструкції приєднання (наприклад /boot/" +"grub/grub.cfg=./grub.cfg)" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ОБРАЗ1 [ОБРАЗ2 ...] ТОЧКА_МОНТУВАННЯ" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "слід вказати образ і точку монтування" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "вказаний аргумент є системним пристроєм, а не шляхом" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "відокремлювати записи у виведеному за допомогою символів NUL ASCII" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[типово=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "вивести ПРИЗНАЧЕННЯ" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "доступні призначення:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[ПАРАМЕТР]... [ФАЙЛ|ПРИСТРІЙ]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Визначити дані щодо пристрою за вказаним шляхом (або пристроєм, якщо вказано " +"параметр -d)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "прочитати текст з файла ФАЙЛ." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "використати КОЛІР для тексту" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "використати КОЛІР для тла" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "визначити мітку для обробки" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "використати ФАЙЛ (PF2) як шрифт." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Показати Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Не вистачає аргументів\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ШЛЯХ]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" +"Виконує перевірку файла налаштування скриптів GRUB на синтаксичні помилки." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Синтаксична помилку у рядку %u\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" +"У скрипті «%s» не міститься команд. Його виконання не призведе до жодних " +"наслідків.\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "використати ФАЙЛ як образ для завантаження [типове значення=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "використати ФАЙЛ як образ теки ядра [типове значення=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Не вказано жодного пристрою.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Визначення образів для завантаження з ПРИСТРОЮ.\n" +"\n" +"За типових умов вам не слід запускати цю програму безпосередньо. " +"Скористайтеся краще grub-install." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "ПРИСТРІЙ має бути пристроєм ОС (наприклад, /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Некоректний пристрій «%s».\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" +"кореневий каталог, так, як його буде показано під час роботи [типово /]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"поточний каталог syslinux, так, як його буде показано під час роботи " +"[типовим є батьківський каталог файла вхідних даних]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "вивести дані до файла ФАЙЛ [типово stdout]" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Перетворити налаштування syslinux на налаштування GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "не вдалося стиснути образ ядра" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "невідоме стискання %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Розпакувальний є занадто великим" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "основний образ є занадто великим (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "образ ядра є надто великим (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "розмір diskboot.img має дорівнювати %u байтів" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img не належить до випробованої версії. Подальше користування може " +"призвести до помилок." + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "образ мікропрограми є занадто великим" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "некоректний формат рядка: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "перший сектор базового файла не вирівняно за секторами" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "у базовому файлі виявлено невирівняні за секторами дані" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "сектори основного файла занадто фрагментовані" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "розмір «%s» не дорівнює %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "розмір «%s» є занадто малим" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Спроба встановлення GRUB на диск з декількома мітками розділів або з міткою " +"розділу і файловою системою. У поточній версії ще не передбачено такої " +"можливості." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"не вдалося визначити файлову систему на %s; виконання перевірки безпеки " +"неможливе" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s містить файлову систему %s. Невідомо, чи підтримується цією файловою " +"системою надання місця для завантажувача у стилі DOS. Встановлення GRUB у цю " +"файлову систему може призвести до РУЙНУВАННЯ ФАЙЛОВОЇ СИСТЕМИ, якщо важливі " +"дані цієї системи буде перезаписано grub-setup (--skip-fs-probe вимикає цю " +"перевірку, ви можете скористатися цим параметром, якщо вважаєте, що " +"пошкодження є неможливими)." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s містить карту розділів %s. Невідомо, чи підтримується цією картою " +"розділів надання місця для завантажувача у стилі DOS. Встановлення GRUB на " +"цю карту розділів може призвести до РУЙНУВАННЯ ФАЙЛОВОЇ СИСТЕМИ, якщо " +"важливі дані цієї системи буде перезаписано grub-setup (--skip-fs-probe " +"вимикає цю перевірку, ви можете скористатися цим параметром, якщо вважаєте, " +"що пошкодження є неможливими)." + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s містить карту розділів %s і LDM. Невідомо, чи є безпечною таке поєднання. " +"Встановлення GRUB на цю карту розділів може призвести до РУЙНУВАННЯ ФАЙЛОВОЇ " +"СИСТЕМИ, якщо важливі дані цієї системи буде перезаписано grub-setup (--skip-" +"fs-probe вимикає цю перевірку, ви можете скористатися цим параметром, якщо " +"вважаєте, що пошкодження є неможливими)." + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Спроба встановлення GRUB на диск без розділів або на певний розділ диска. " +"Вам НЕ ВАРТО виконувати подібні маніпуляції." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Спроба встановлення GRUB на диск з декількома мітками розділів. У поточній " +"версії ще не передбачено такої можливості." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "У стилі розділів «%s» не передбачено підтримки вбудовування" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "У файловій системі «%s» не передбачено підтримки вбудовування" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"Ваша область вбудовування є надзвичайно малою. core.img не вміститься у цій " +"області." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "у основному образі немає мітки завершення" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "невідповідність версій core.img" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"вбудовування неможливе, але без нього не обійтися під час встановлення на " +"RAID та LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "не вдалося визначити тип файлової системи на %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" +"у файловій системі %s не передбачено підтримки списків блоків (blocklists)" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"вбудовування неможливе, але без нього не обійтися під час встановлення на " +"декілька дисків" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Вбудовування неможливе. GRUB можна встановити на таку конфігурацію лише з " +"використанням списків блоків (blocklists). Використання списків блоків може " +"ПРИЗВЕСТИ ДО НЕСТАБІЛЬНОЇ РОБОТИ, не радимо ними користуватися." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "не буде продовжено з використанням списків блоків" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "списки блоків є некоректними" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "списки блоків є неповними" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Використання: %s -o ВИВЕДЕННЯ АРГУМЕНТИ_CKBMAP...\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Створити файл розкладки клавіатури для GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "показати це повідомлення і завершити роботу" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "показати дані щодо версії і завершити роботу" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s створює розкладку клавіатури для GRUB за допомогою ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "Про вади повідомляйте на адресу ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: параметр потребує аргументу -- «%s»\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Використання: %s [ПАРАМЕТР]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Створити файл налаштувань grub" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "вивести створені налаштування до файла ФАЙЛ [типово=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Нерозпізнаний параметр «%s»\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "%s: вам слід віддати цю команду від імені адміністратора (root)\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: не знайдено.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Створюємо файл налаштувань grub..." + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Виявлено синтаксичні помилки у файлі налаштувань GRUB.\n" +"Переконайтеся, що у файлах /etc/default/grub і /etc/grub.d/*\n" +"немає помилок, будь ласка, створіть звіт щодо вади з\n" +"долученням файла %s." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "виконано" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Попередження:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Використання: %s [ПАРАМЕТР] ПУНКТ_МЕНЮ\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Встановити типовий пункт меню завантаження для GRUB лише для наступного " +"завантаження." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "шукати образи GRUB у каталозі КАТАЛОГ/%s замість каталогу %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"ПУНКТ_МЕНЮ є номером, заголовком пункту меню або ідентифікатором пункту " +"меню. Будь ласка, зауважте, що для пунктів\n" +"у підменю та підпідменю слід вказувати компонент підменю, а потім компонент " +"меню.\n" +"Заголовки слід відокремлювати символом «більше» (>) без додаткових " +"пробілів.\n" +"Залежно від використаної командної оболонки, можливо доведеться екранувати\n" +"деякі з символів >. Докладніше про це можна дізнатися з підручника з GRUB,\n" +"розділ щодо команди «default». " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Декілька пунктів меню?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Не вказано пункт меню." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Встановити типовий пункт меню завантаження для GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Потребує встановлення GRUB_DEFAULT=saved у %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"ПУНКТ_МЕНЮ є номером, назвою пункту меню або ідентифікатором пункту меню." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Надіслано запит щодо послідовного термінала, але не визначено " +"GRUB_SERIAL_COMMAND. Буде використано типові параметри." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Виявлено тему: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Виявлено тло: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Непідтримуваний формат зображень" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Підтримки встановлення ненульового значення для GRUB_TIMEOUT, якщо " +"встановлено GRUB_HIDDEN_TIMEOUT, не передбачено." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Виявлено GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Виявлено модуль Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Виявлено деякі частини Hurd, але їх недостатньо для завантаження." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, з Hurd %s (режим відновлення)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, з Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Будь ласка, не користуйтеся застарілим заголовком «%s» для GRUB_DEFAULT, " +"скористайтеся «%s» (у версіях до 2.00) або «%s» (у 2.00 та новіших версіях)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Завантаження GNU Mach…" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Завантаження Hurd…" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Додаткові параметри для %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Завантаження ядра Illumos..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, з kFreeBSD %s (режим відновлення)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, з kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Завантаження ядра FreeBSD %s…" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Виявлено ядро FreeBSD: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Виявлено каталог модулів ядра: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, з Linux %s (режим відновлення)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, з Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Завантаження Linux %s…" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Завантаження початкового диска у оперативній пам’яті…" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Виявлено образ linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Виявлено образ initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, з ядром %s (за допомогою %s, режим відновлення)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, з ядром %s (за допомогою %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Виявлено ядро NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (завантажувач)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (завантажувач)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Виявлено %s на %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-бітове)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-бітове)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(на %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, з Xen %s і Linux %s (режим відновлення)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, з Xen %s і Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, з гіпервізором Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Завантаження Xen %s…" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Гіпервізор Xen, версія %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Додаткові параметри для %s (з гіпервізором Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Виявлено %s на %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s ще не підтримується grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Непідтримуваний прапорець заміни: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Невідома деталь шрифту gsub, 0x%x (%s)\n" + +#~ msgid "root directory of the syslinux disk (default /)." +#~ msgstr "кореневий каталог диска syslinux (типово /)." + +#~ msgid "assume isolinux." +#~ msgstr "припускати використання isolinux." + +#~ msgid "assume pxelinux." +#~ msgstr "припускати використання pxelinux." + +#~ msgid "assume syslinux." +#~ msgstr "припускати використання syslinux." + +#~ msgid "%s is neither hfs nor hfsplus" +#~ msgstr "%s не належить ні до типу hfs, ні до типу hfsplus" + +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "копіює образи GRUB до net_directory/subdir/target_cpu-platform." + +#~ msgid "" +#~ "Generates a bootable rescue image with specified source files, source " +#~ "directories, or mkisofs options listed by the output of `%s'.\n" +#~ "\n" +#~ "Option -- switches to native xorriso command mode.\n" +#~ "\n" +#~ "Mail xorriso support requests to ." +#~ msgstr "" +#~ "Створює придатний до завантаження образ відновлення з вказаними " +#~ "початковими файлами, початковими каталогами або параметрами mkisofs, " +#~ "вказаними у виведенні «%s»\n" +#~ "\n" +#~ "Параметр -- перемикає на природній режим команд xorriso.\n" +#~ "\n" +#~ "Запити щодо супроводу xorriso надсилайте на адресу ." + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "вивести дані щодо модуля файлової системи, диска GRUB, системного " +#~ "пристрою, модуля картки розділу, модуля абстракції або UUID шифрованого " +#~ "тому [типово=fs]" + +#~ msgid "current directory of the syslinux disk [default=$pwd]." +#~ msgstr "поточний каталог диска syslinux [типово $pwd]." + +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "використовувати КАТАЛОГ як кореневий [типовим каталогом є /]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Діапазон адрес не пов’язано з RAM" + +#~ msgid "PUBKEY_FILE" +#~ msgstr "ФАЙЛ_ВІДКРИТОГО_КЛЮЧА" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "підтримки grub_memalign у вашій системі не передбачено" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "" +#~ "Якщо буде вказано НАЗВУ_ФАЙЛА «-», буде використано типове значення %s." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "зберігати лише растрові зображення символів ASCII" + +#~ msgid "create width summary file" +#~ msgstr "створити файл резюме ширин" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Параметр --ascii-bitmaps не приймає діапазонів (завжди використовується " +#~ "ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "" +#~ "УВАГА: немає даних щодо безпечності вашого генератора псевдовипадкових " +#~ "чисел\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "не вдалося прочитати перший сектор основного образу" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "використати ФАЙЛ як grub-setup" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "використати ФАЙЛ як grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "використати ФАЙЛ як grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "" +#~ "значенням ПРИСТРІЙ_ДЛЯ_ВСТАНОВЛЕННЯ має бути назва файла пристрою у " +#~ "системі." + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Дані з шляхом «%s» не може бути прочитано GRUB під час завантаження. " +#~ "Встановлення неможливо. Перериваємо роботу.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Помилка автоматичного визначення файлової системи %s.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Спробуйте з --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Якщо проблему не вдалося усунути, будь ласка, повідомте про неї з " +#~ "виведеними %s даними до <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "Помилка «%s».\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "Не вдалося знайти диск GRUB для %s; не вдалося створити запис керування " +#~ "завантаженням EFI.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Створення grub.cfg..." + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "використати ФАЙЛ як grub-render-label" diff --git a/po/vi.gmo b/po/vi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..eaa2277bb22ec507622ccb36fd2eafb1874750a4 GIT binary patch literal 142717 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, 2010. +# Trần Ngọc Quân , 2012-2013, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 2.02-pre3\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2017-02-05 13:35+0700\n" +"Last-Translator: Trần Ngọc Quân \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Generator: Gtranslator 2.91.7\n" +"X-Poedit-Basepath: ../\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +msgid "unsupported serial port speed" +msgstr "không hỗ trợ tốc độ của cổng nối tiếp" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +msgid "unsupported serial port parity" +msgstr "không hỗ trợ tính chẵn lẻ của cổng nối tiếp" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +msgid "unsupported serial port stop bits number" +msgstr "không hỗ trợ bit dừng của của cổng nối tiếp" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +msgid "unsupported serial port word length" +msgstr "không hỗ trợ chiều dài từ của cổng nối tiếp" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "Đừng tải các bảng chủ chỉ rõ trong danh sách định giới bằng dấu phẩy." + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "Chỉ tải chỉ bảng đã chỉ ra trong danh sách định giới bằng dấu phẩy." + +#: grub-core/commands/acpi.c:46 +msgid "Export version 1 tables to the OS." +msgstr "Xuất ra bảng phiên bản một cho HĐH." + +#: grub-core/commands/acpi.c:47 +msgid "Export version 2 and version 3 tables to the OS." +msgstr "Xuất ra bảng phiên bản 2 và 3 tới cho HĐH." + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "Đặt OEMID của RSDP, XSDT và RSDT." + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "Đặt mã số OEMTABLE ID của RSDP, XSDT và RSDT." + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "Đặt bản sửa đổi OEMTABLE của RSDP, XSDT và RSDT." + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "Đặt trường trình tạo của RSDP, XSDT và RSDT." + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "Đặt bản sửa đổi trình tạo của RSDP, XSDT và RSDT." + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"Đừng cập nhật EBDA. Có thể sửa chữa trường hợp thất bại hoặc bị treo trên " +"một số BIOS nào đó, nhưng mà làm cho nó mất hiệu lực khi HĐH không nhận RDSP " +"từ GRUB." + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, c-format +msgid "premature end of file %s" +msgstr "gặp kết thúc tập tin %s quá sớm" + +#: grub-core/commands/acpi.c:779 +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=BẢNG1,BẢNG2|--load-only=BẢNG1,BẢNG2] TẬP_TIN1 [TẬP_TIN2] " +"[…]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "Tải các bảng ACPI chủ và các bảng được đối số chỉ rõ." + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "lỗi: %s.\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +msgid "out of memory" +msgstr "hết bộ nhớ" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, c-format +msgid "cannot read `%s': %s" +msgstr "không thể đọc “%s”: %s" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "Tắt máy kiểu ACPI gặp lỗi" + +#: grub-core/commands/arc/lsdev.c:51 +msgid "List devices." +msgstr "Liệt kê thiết bị." + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "cần tên tập tin" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "TẬP_TIN" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "In ra một danh sách cấm." + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "bạn cần phải tải nhân trước đã" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "Khởi động một hệ điều hành." + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "Không có thống kê thời gian mồi máy nào sẵn sàng cả\n" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "Lấy thống kê thời gian mồi máy." + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "Thống kê bộ nhớ đệm đĩa: hits = %lu (%lu.%02lu%%), misses = %lu\n" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "Không có thống kê bộ nhớ đệm đĩa nào sẵn sàng cả\n" + +#: grub-core/commands/cacheinfo.c:56 +msgid "Get disk cache info." +msgstr "Lấy thông tin về bộ đệm đĩa." + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "Chấp nhận kiểu xuống dòng kiểu-DOS là CR/NL." + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "Hiển thị nội dung của một tập tin." + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "cần hai đối số" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "So sánh tập tin “%s” với “%s”:\n" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "Các tập tin khác nhau ở kích thước: %llu [%s], %llu [%s]\n" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "Các tập tin khác nhau tại khoảng bù %llu: 0x%x [%s], 0x%x [%s]\n" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "Các tập tin là đồng nhất.\n" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "TẬP_TIN1 TẬP_TIN2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "So sánh hai tập tin." + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "Tải một tập tin cấu hình khác." + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "Tải một tập tin cấu hình khác mà không thay đổi ngữ cảnh." + +#: grub-core/commands/configfile.c:75 +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "" +"Tải một tập tin cấu hình khác mà không thay đổi ngữ cảnh nhưng lấy các mục " +"menu." + +#: grub-core/commands/configfile.c:81 +msgid "Load another config file but take only menu entries." +msgstr "Tải một tập tin cấu hình khác nhưng chỉ thay đổi các mục menu." + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[năm-]tháng-ngày] [giờ:phút[:giây]]" + +#: grub-core/commands/date.c:142 +msgid "Display/set current datetime." +msgstr "Hiển thị/đặt giờ hiện thời." + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "Đừng xuất ra ký tự dòng mới theo sau." + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "Hiệu lực khả năng biên dịch ký tự thoát xuyệc ngược." + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] CHUỖI" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "Hiển thị một dòng văn bản." + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "Khởi động lại vào trình đơn cài đặt firmware" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "Sửa chữa vấn đề ảnh động." + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "Ảnh ROM có hiện diện." + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "Không thể cho phép vùng ROM." + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "Tạo cấu trúc giống-BIOS để tương thích ngược với các HĐH sẵn có." + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "BIOS_DUMP [INT10_DUMP]" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "Tải bản đổ BIOS." + +#: grub-core/commands/eval.c:63 +msgid "STRING ..." +msgstr "CHUỖI …" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "Lượng giá các đối số như là các lệnh GRUB" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" +"Kiểm tra xem TẬP_TIN có thể được khởi động như là khách không đặc quyền i386 " +"PAE Xen" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" +"Kiểm tra xem TẬP_TIN có thể được khởi động như là khách không đặc quyền Xen " +"i386_64" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" +"Kiểm tra xem TẬP_TIN có thể được khởi động như là nhân khách không đặc quyền " +"Xen i386" + +#: grub-core/commands/file.c:46 +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "Kiểm tra xem TẬP_TIN có thể dùng làm nhân x86 đa khởi động (multiboot)" + +#: grub-core/commands/file.c:48 +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "" +"Kiểm tra xem TẬP_TIN có thể dùng làm nhân x86 đa khởi động 2 (multiboot2)" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là ARM Linux" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là ARM Linux" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là IA64 Linux" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là MIPS Linux" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là MIPSEL Linux" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là SPARC64 Linux" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là POWERPC Linux" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "Kiểm tra xem TẬP_TIN có phải là x86 Linux" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "Kiểm tra xem TẬP_TIN có phải là x86 Linux hỗ trợ giao thức 32 bít" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "Kiểm tra xem TẬP_TIN có phải là x86 kFreeBSD" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "Kiểm tra xem TẬP_TIN có phải là i386 kFreeBSD" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "Kiểm tra xem TẬP_TIN có phải là x86_64 kFreeBSD" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "Kiểm tra xem TẬP_TIN có phải là x86 kNetBSD" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "Kiểm tra xem TẬP_TIN có phải là i386 kNetBSD" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "Kiểm tra xem TẬP_TIN có phải là x86_64 kNetBSD" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "Kiểm tra xem TẬP_TIN có phải là i386 EFI file" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "Kiểm tra xem TẬP_TIN có phải là tập tin x86_64 EFI" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "Kiểm tra xem TẬP_TIN có phải là tập tin IA64 EFI" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "Kiểm tra xem TẬP_TIN có phải là tập tin ARM64 EFI" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "Kiểm tra xem TẬP_TIN có phải là tập tin ARM EFI" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" +"Kiểm tra xem TẬP_TIN có phải là hiberfil.sys hay trạng thái của ngủ đông" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "Kiểm tra xem TẬP_TIN có phải là x86_64 XNU (nhân Mac OS X)" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "Kiểm tra xem TẬP_TIN có phải là i386 XNU (nhân Mac OS X)" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "Kiểm tra xem TẬP_TIN có phải là ảnh ngủ đông XNU (nhân Mac OS X)" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "Kiểm tra xem TẬP_TIN có phải là rãnh khởi động BIOS" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "không đạt" + +#: grub-core/commands/file.c:671 +msgid "OPTIONS FILE" +msgstr "CÁC TÙY CHỌN TẬP_TIN" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "Kiểm tra xem TẬP_TIN có phải là kiểu đã chỉ ra hay không." + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "không có phân vùng như vậy" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "MBR mới được ghi vào “%s”\n" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "THIẾT_BỊ [PHÂN_VÙNG[+/-[KIỂU]]] …" + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"Tô đầy MBR pha (hybrid) của “THIẾT_BỊ” ổ đĩa GPT. Các phân vùng đã chỉ ra sẽ " +"thuộc về MBR hybrid. Cho phép đến 3 phân vùng. “KIỂU” là một kiểu MBR. “+” " +"có nghĩa là phân vùng đó vẫn hoạt động. Chỉ một phân vùng có thể hoạt động." + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "" +"Tạm dừng máy tính. Câu lệnh này không có tác động trên mọi phần thực thi của " +"firmware." + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "định rõ kiểu băm cần dùng" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "BĂM" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "Kiểm tra mã băm của các tập tin với mã băm được liệt kê trong TẬP_TIN" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "Thư mục cơ sở cho danh sách băm." + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "TMỤC" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "Không dừng lại sau lỗi đầu tiên." + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "Giải nét tập tin trước khi tổng kiểm tra." + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "%s: LỖI ĐỌC\n" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "%s: KHÔNG KHỚP MÃ BĂM\n" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "%s: OK\n" + +#: grub-core/commands/hashsum.c:284 +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "-h BĂM [-c TẬP_TIN [-p TIỀN_TỐ]] [TẬP_TIN1 [TẬP_TIN2 …]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "Tính hay kiểm tra mã băm." + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c TẬP_TIN [-p TIỀN_TỐ]] [TẬP_TIN1 [TẬP_TIN2 …]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"Đặt sự quản lý điện năng cấp cao (Advanced Power Management)\n" +"(1=thấp, …, 254=cao, 255=tắt)." + +#: grub-core/commands/hdparm.c:36 +msgid "Display power mode." +msgstr "Hiển thị chế độ nguồn điện." + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "Đóng băng các cài đặt bảo mật ATA đến khi đặt lại." + +#: grub-core/commands/hdparm.c:39 +msgid "Display SMART health status." +msgstr "Hiển thị tình trạng SMART." + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"Đặt sự tự động quản lý âm thanh (Automatic Acoustic Management)\n" +"(0=tắt, 128=im, …, 254=nhanh)." + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"Đặt thời hạn trạng thái chờ\n" +"(0=tắt, 1=5giây, 2=10giây, …, 240=20phút, 241=30phút, …)." + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "Đặt ổ đĩa thành chế độ chờ." + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "Đặt ổ đĩa thành chế độ ngủ." + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "In ra sự nhận diện và cài đặt về ổ đĩa." + +#: grub-core/commands/hdparm.c:50 +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "Hiển thị nội dung của rãnh ghi IDENTIFY (MÃ NHẬN DIỆN) kiểu ATA." + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "Bật/tắt SMART (0/1)." + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "Đừng hiển thị thông điệp." + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "cần một đối số" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[TÙY_CHỌN…] ĐĨA" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "Lấy/đặt các tham số đĩa ATA." + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "Cách dùng:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[MẪU …]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "Hiển thị một thông điệp trợ giúp." + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "Bỏ qua các byte tính từ đầu tập tin." + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "Đọc chỉ DÀI byte." + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[TÙY_CHỌN …] TẬP_TIN_HAY_THIẾT_BỊ" + +#: grub-core/commands/hexdump.c:126 +msgid "Show raw contents of a file or memory." +msgstr "Hiển thị nội dung của một tập tin hay vùng nhớ." + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "Hiển thị dạng thô của nội dung CMOS." + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "BYTE:BÍT" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "Thử bít tại BYTE:BIT trong CMOS." + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "Xóa bít tại BYTE:BIT trong CMOS." + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "Đặt bit tại BYTE:BIT trong CMOS." + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "Hiển thị thống kê thời gian mồi máy “coreboot”." + +#: grub-core/commands/i386/coreboot/cbls.c:137 +msgid "List coreboot tables." +msgstr "Liệt kê bảng “coreboot”" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "Kiểm tra xem CPU có hỗ trợ chế độ 64-bit (long) (mặc định)." + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "Kiểm tra xem CPU có hỗ trợ chế độ địa chỉ vật lý mở rộng." + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "Kiểm tra có các tính năng CPU." + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "Hiển thị các sự ánh xạ hiện thời." + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "Đặt lại mỗi sự ánh xạ thành giá trị mặc định." + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "Ánh xạ bằng cả hai cách trực tiếp và ngược lại." + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "Chưa có thiết bị nào được ánh xạ cả" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "đĩa OS #số ------> thiết bị GRUB/BIOS" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev đĩa_chứa_HĐH." + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "Quản lý các sự ánh xạ ổ đĩa BIOS." + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "Đừng dùng APM để tạm dừng lại chạy máy tính." + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "Tạm dừng lại chạy máy tính, nếu có thể, dùng APM." + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "không tìm thấy APM" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" +"Phiên bản %u.%u\n" +"32-bit CS = 0x%x, dài = 0x%x, khoảng-bù = 0x%x\n" +"16-bit CS = 0x%x, dài = 0x%x\n" +"DS = 0x%x, dài = 0x%x\n" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "giao diện bảo vệ 16-bit được hỗ trợ\n" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "giao diện bảo vệ 16-bit không được hỗ trợ\n" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "giao diện bảo vệ 32-bit được hỗ trợ\n" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "giao diện bảo vệ 32-bit không được hỗ trợ\n" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "CPU ở trạng thái Idle giảm tốc độ xử lý xuống\n" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "CPU ở trạng thái Idle không giảm tốc độ xử lý xuống\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "APM bị tắt\n" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "APM được bật\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "APM đã bị bỏ gắn\n" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "APM được gắn\n" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "Hiển thị thông tin APM." + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "cần tên tập tin hoặc tempo+notes" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, c-format +msgid "Invalid tempo in %s" +msgstr "tempo không hợp lệ trong %s" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "không tìm thấy tập tin “%s”" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "không thừa nhận số" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "TẬP_TIN | TEMPO [CAO-ĐỘ-1 TRƯỜNG-ĐỘ-1] [CAO-ĐỘ-2 TRƯỜNG-ĐỘ-2] … " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "Phát một giai điệu." + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "đặt chế độ numlock" + +#: grub-core/commands/i386/pc/sendkey.c:40 +msgid "set capslock mode" +msgstr "đặt chế độ capslock " + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "đặt chế độ scrolllock" + +#: grub-core/commands/i386/pc/sendkey.c:42 +msgid "set insert mode" +msgstr "đặt chế độ chèn" + +#: grub-core/commands/i386/pc/sendkey.c:43 +msgid "set pause mode" +msgstr "đặt chế độ tạm dừng" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "bấm shiff trái" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "bấm shiff phải" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "bấm SysRq" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "bấm phím NumLock" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "bấm phím CapsLock" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "bấm phím ScrollLock" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "bấm phím Insert" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "bấm alt trái" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "bấm alt phải" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "bấm ctrl trái" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "bấm ctrl phải" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "không cập nhật trạng thái LED" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "[PHÍM-GÕ-1] [PHÍM-GÕ-2] …" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "Mô phỏng chuỗi phím gõ" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "Chạy “go” để phục hồi GRUB." + +#: grub-core/commands/ieee1275/suspend.c:45 +msgid "Return to IEEE1275 prompt." +msgstr "Quay lại dấu nhắc IEEE1275." + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "Lưu giá trị đọc vào biến TÊN_BIẾN." + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "TÊN_BIẾN" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "CỔNG" + +#: grub-core/commands/iorw.c:123 +msgid "Read 8-bit value from PORT." +msgstr "Đọc giá trị 8-bit từ CỔNG." + +#: grub-core/commands/iorw.c:127 +msgid "Read 16-bit value from PORT." +msgstr "Đọc giá trị 16-bit từ CỔNG." + +#: grub-core/commands/iorw.c:131 +msgid "Read 32-bit value from PORT." +msgstr "Đọc giá trị 32-bit từ CỔNG." + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "ĐỊA_CHỈ-CỔNG GIÁ_TRỊ [MẶT-NẠ]" + +#: grub-core/commands/iorw.c:136 +msgid "Write 8-bit VALUE to PORT." +msgstr "Ghi GIÁ_TRỊ 8-bit vào CỔNG." + +#: grub-core/commands/iorw.c:140 +msgid "Write 16-bit VALUE to PORT." +msgstr "Ghi GIÁ_TRỊ 16-bit vào CỔNG." + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ĐỊA_CHỈ GIÁ_TRỊ [BỘ_LỌC]" + +#: grub-core/commands/iorw.c:144 +msgid "Write 32-bit VALUE to PORT." +msgstr "Ghi GIÁ_TRỊ 32-bit vào CỔNG." + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "biến “%s” chưa được đặt" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "Tải bố cụ bàn phím." + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "Kiểm tra phím Shift." + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "Kiểm tra phím Control." + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "Kiểm tra phím Alt." + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "Kiểm tra trạng thái về phím bổ trợ." + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, c-format +msgid "can't find command `%s'" +msgstr "không thể tìm thấy lệnh “%s”" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "Nhập mật khẩu: " + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "Phân tích cấu hình theo kiểu cũ trong cùng ngữ cảnh" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "Phân tích cấu hình theo kiểu cũ trong ngữ cảnh mới" + +#: grub-core/commands/legacycfg.c:847 +msgid "Parse legacy config in same context taking only menu entries" +msgstr "" +"Phân tích cấu hình theo kiểu cũ trong cùng ngữ cảnh nhưng chỉ các mục menu" + +#: grub-core/commands/legacycfg.c:852 +msgid "Parse legacy config in new context taking only menu entries" +msgstr "" +"Phân tích cấu hình theo kiểu cũ trong ngữ cảnh mới chỉ với các mục nemu" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=KIỂU] TẬP_TIN [THAM_SỐ …]" + +#: grub-core/commands/legacycfg.c:857 +msgid "Simulate grub-legacy `kernel' command" +msgstr "Mô phỏng lệnh “kernel” kiểu-grub-cũ" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "TẬP_TIN [ĐỐI_SỐ …]" + +#: grub-core/commands/legacycfg.c:862 +msgid "Simulate grub-legacy `initrd' command" +msgstr "Mô phỏng lệnh “initrd” kiểu-grub-cũ" + +#: grub-core/commands/legacycfg.c:866 +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "Mô phỏng lệnh “modulenounzip” kiểu-grub-cũ" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] MẬT_KHẨU [TẬP_TIN]" + +#: grub-core/commands/legacycfg.c:871 +msgid "Simulate grub-legacy `password' command" +msgstr "Mô phỏng lệnh “password” kiểu-grub-cũ" + +#: grub-core/commands/legacycfg.c:876 +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "Mô phỏng lệnh “password” kiểu-grub-cũ trong chế độ mục trình đơn" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "Ghi rõ tên tập tin." + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "Bỏ qua kiểm tra chữ ký của tập tin môi trường." + +#: grub-core/commands/loadenv.c:449 +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f TẬP_TIN] [-s|--skip-sig] [tên-biến-danh-sách-trắng] […]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "Tải các biến từ tập tin khối môi trường." + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f TẬP_TIN]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "Liệt kê các biến từ tập tin khối môi trường." + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f TẬP_TIN] tên_biến […]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "Lưu các biến vào tập tin khối môi trường." + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "Hiển thị một danh sách dài chứa thông tin bổ sung." + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "In kích cỡ theo một định dạng cho người đọc được." + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "Liệt kê tất cả các tập tin." + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "Các giao thức mạng:" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [TẬP_TIN …]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "Liệt kê các thiết bị và tập tin." + +#: grub-core/commands/lsacpi.c:255 +msgid "Show version 1 tables only." +msgstr "Chỉ hiển thị các bảng phiên bản 1." + +#: grub-core/commands/lsacpi.c:256 +msgid "Show version 2 and version 3 tables only." +msgstr "Chỉ hiển thị các bảng phiên bản 2 và 3." + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "Hiện thông tin ACPI." + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "RAM sẵn dùng" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "RAM dự trữ" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "ACPI có thể cải tạo RAM" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "RAM cho APCI sử dụng ở chế độ ngủ đông" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "RAM hỏng (BadRAM)" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "RAM cố định" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "RAM cố định (đã lạc hậu)" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "RAM giữ mã bảng coreboot" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "RAM giữ mã firmware" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "base_addr = 0x%llx, dài = 0x%llx, %s\n" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "địa-chỉ-cơ-sở = 0x%llx, dài = 0x%llx, kiểu = 0x%x\n" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "Liệt kê các sơ đồ vùng nhớ được cung cấp bởi firmware." + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "Liệt kê các thiết bị PCI." + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" +"Đặt TẬP_TIN khởi động của phân vùng HFS hoặc HFS+ cho máy macs chạy Intel." + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "Đặt TMỤC khởi động của phân vùng HFS hoặc HFS+ cho máy macs chạy PPC." + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ĐỊA_CHỈ" + +#: grub-core/commands/memrw.c:125 +msgid "Read 8-bit value from ADDR." +msgstr "Đọc giá trị 8-bit từ ĐỊA_CHỈ." + +#: grub-core/commands/memrw.c:129 +msgid "Read 16-bit value from ADDR." +msgstr "Đọc giá trị 16-bit từ ĐỊA_CHỈ." + +#: grub-core/commands/memrw.c:133 +msgid "Read 32-bit value from ADDR." +msgstr "Đọc giá trị 32-bit từ ĐỊA_CHỈ." + +#: grub-core/commands/memrw.c:138 +msgid "Write 8-bit VALUE to ADDR." +msgstr "Ghi GIÁ_TRỊ 8-bit vào ĐỊA_CHỈ." + +#: grub-core/commands/memrw.c:142 +msgid "Write 16-bit VALUE to ADDR." +msgstr "Ghi GIÁ_TRỊ 16-bit vào ĐỊA_CHỈ." + +#: grub-core/commands/memrw.c:146 +msgid "Write 32-bit VALUE to ADDR." +msgstr "Ghi GIÁ_TRỊ 32-bit vào ĐỊA_CHỈ." + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "Kiểu mục menu." + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "CHUỖI" + +#: grub-core/commands/menuentry.c:33 +msgid "List of users allowed to boot this entry." +msgstr "Liệt kê những tài khoản được phép khởi động từ mục này." + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "TÊN_NGƯỜI_DÙNG[,TÊN_TÀI_KHOẢN]" + +#: grub-core/commands/menuentry.c:36 +msgid "Keyboard key to quickly boot this entry." +msgstr "Phím được bấm từ bàn phím để khởi động nhanh mục này." + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "PHÍM_BÀN_PHÍM" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "Sử dụng CHUỖI như là phần thân mục trình đơn." + +#: grub-core/commands/menuentry.c:39 +msgid "Menu entry identifier." +msgstr "Định danh mục trình đơn." + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "Mục này có thể khởi động được bởi bất kỳ người nào." + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "KHỐI" + +#: grub-core/commands/menuentry.c:323 +msgid "Define a menu entry." +msgstr "Định nghĩa một mục menu." + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "Định nghĩa trình đơn con." + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "Tên\tSố Ref\tPhần-phụ-thuộc\n" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "Hiển thị thông điệp này." + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "ĐỊA_CHỈ [KÍCH_THƯỚC]" + +#: grub-core/commands/minicmd.c:201 +msgid "Show memory contents." +msgstr "Hiển thị nội dung của bộ nhớ." + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MÔ-ĐUN" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "Gỡ bỏ một mô-đun nào đó." + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "Hiển thị các mô-đun đã được tải." + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "Thoát khỏi GRUB." + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "Không tìm thấy CS5536" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "CS5536 tại %d:%d.%d\n" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "Bộ điều khiển truy xuất bus hệ thống thấy cổng V/R là tại 0x%x\n" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "Khe cắm RAM số %d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "Ghi byte SPD: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "Kích thước tổng cộng bộ nhớ flash: %d B.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "Kiểu bộ nhớ: DDR2." + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, c-format +msgid "Part no: %s.\n" +msgstr "Số của phần: %s.\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "Kiểu bộ nhớ: Chưa được biết." + +#: grub-core/commands/mips/loongson/lsspd.c:97 +msgid "Print Memory information." +msgstr "Hiển thị thông tin bộ nhớ" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "%s không hỗ trợ UUIDs" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "[MÔ_ĐUN1 MÔ_ĐUN2 …]" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" +"Chuyển sang các ổ đĩa thật. Nếu không chỉ ra MÔ_ĐUN nào thì tập hợp mặc định " +"(pata,ahci,usbms,ohci,uhci,ehci) được dùng" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" +"Thực hiện LỆNH trên phân vùng.\n" +"Chạy lệnh “parttool PHÂN_VÙNG help” để biết danh sách các lệnh sẵn có." + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "=GIÁ_TRỊ" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "Rất tiếc, không có công cụ phân vùng sẵn có cho %s\n" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, c-format +msgid "unknown argument `%s'" +msgstr "không hiểu tham số “%s”" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PHÂN_VÙNG CÁC_LỆNH" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "TÀI_KHOẢN MẬT_KHẨU" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "Đặt mật khẩu người dùng (chữ thường). KHÔNG AN TOÀN!" + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "sai mật khẩu PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "TÀI-KHOẢN MẬT-KHẨU-PBKDF2" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "Đặt mật khẩu (dạng PBKDF2). " + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "Chọn thiết bị theo nhà sản xuất và ID." + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "[nhàsảnxuất]:[thiếtbị]" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "Chọn thiết bị theo vị trí trên bus." + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "[bus]:[slot][.func]" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "thiếu ký hiệu “%c”" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "[-s VỊ-TRÍ] [-d THIẾT_BỊ]" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "Hiển thị dữ liệu dạng thô của không gian cấu hình PCI." + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "Đặt một biến để trả lại giá trị." + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "Xác định trình điều khiển." + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "Xác định kiểu ánh xạ phân vùng." + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "Xác định kiểu hệ thống tập tin." + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "Xác định UUID hệ thống tập tin." + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "Xác định nhãn hệ thống tập tin." + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "Hệ thống tập tin “%s” không hỗ trợ nhãn" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "THIẾT_BỊ" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "Lấy thông tin về thiết bị." + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[BIẾN_MÔI_TRƯỜNG]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "Đặt biến dùng đầu vào người dùng." + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "Khởi động lại máy tính." + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "Lưu các thành phần so khớp SỐ trong TÊN_BIẾN." + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[SỐ:]TÊN_BIẾN" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "" +"BTCQ CHUỖI\n" +"\n" +"BTCQ: Biểu thức chính quy" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "Kiểm tra xem BTCQ có khớp với CHUỖI." + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "TÊN [BIẾN] [HINTS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Tìm kiếm các thiết bị theo tập tin. Chỉ rõ BIẾN thì thiết bị được tìm thứ " +"nhất được đặt thành một biến." + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Tìm kiếm các thiết bị theo nhãn. Chỉ rõ BIẾN thì thiết bị được tìm thứ nhất " +"được đặt thành một biến." + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"Tìm kiếm các thiết bị theo UUID (mã nhận diện duy nhất). Chỉ rõ BIẾN thì " +"thiết bị được tìm thứ nhất được đặt thành một biến." + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "Tìm kiếm các thiết bị theo tập tin." + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "Tìm thiết bị theo nhãn hệ thống tập tin." + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "Tìm thiết bị theo UUID hệ thống tập tin." + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "Đặt biến cho thiết bị đầu tiên tìm thấy." + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "Không tìm thấy bất kỳ đĩa mềm nào." + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "" +"Trước tiên thử thiết bị GỢI-Ý. Nếu GỢI-Ý kết thúc bằng dấu phẩy, cũng thử cả " +"phân vùng con" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "GỢI-Ý" + +#: grub-core/commands/search_wrap.c:47 +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Trước tiên thử thiết bị GỢI-Ý nếu hiện tại chạy trên IEEE1275. Nếu GỢI-Ý kết " +"thúc bằng dấu phẩy, cũng thử cả phân vùng con" + +#: grub-core/commands/search_wrap.c:51 +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Trước tiên thử thiết bị GỢI-Ý nếu hiện tại chạy trên BIOS. Nếu GỢI-Ý kết " +"thúc bằng dấu phẩy, cũng thử cả phân vùng con" + +#: grub-core/commands/search_wrap.c:55 +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "" +"Trước tiên thử thiết bị GỢI-Ý nếu truy cập phần cứng trực tiếp được hỗ trợ. " +"Nếu GỢI-Ý kết thúc bằng dấu phẩy, cũng thử cả phân vùng con" + +#: grub-core/commands/search_wrap.c:59 +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Trước tiên thử thiết bị GỢI-Ý nếu hiện tại chạy trên EFI. Nếu GỢI-Ý kết thúc " +"bằng dấu phẩy, cũng thử cả phân vùng con" + +#: grub-core/commands/search_wrap.c:63 +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "" +"Trước tiên thử thiết bị GỢI-Ý nếu hiện tại chạy trên ARC. Nếu GỢI-Ý kết thúc " +"bằng dấu phẩy, cũng thử cả phân vùng con" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] …] TÊN" + +#: grub-core/commands/search_wrap.c:209 +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"Tìm thiết bị theo tập tin, nhãn hoặc UUID của hệ thống tập tin. Nếu chỉ ra --" +"set, thì thiết bị đầu tiên tìm được sẽ đặt cho một biến. Nếu không có biến " +"được chỉ ra, “root” sẽ được dùng." + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "Thanh ghi %x của %x:%02x.%x là %x\n" + +#: grub-core/commands/setpci.c:333 +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s VỊ-TRÍ] [-d THIẾT_BỊ] [-v BIẾN] THANH-GHI[=GIÁ_TRỊ[:MẶT-NẠ]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "Điều khiển thiết bị PCI." + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "Đếm ngược với chi tiết." + +#: grub-core/commands/sleep.c:33 +msgid "Allow to interrupt with ESC." +msgstr "Cho phép ngắt bằng ESC." + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "SỐ_CÁC_GIÂY" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "Đợi trong vòng một số các giây được ghi rõ." + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "thư mục gốc của đĩa syslinux [mặc định=/]." + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" +"thư mục hiện tại của syslinux [thư mục mặc định là cha của tập tin đầu vào]." + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "coi đầu vào là một tập tin cấu hình isolinux." + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "coi đầu vào là một tập tin cấu hình pxelinux." + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "coi đầu vào là một tập tin cấu hình syslinux." + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +msgid "Execute syslinux config in same context" +msgstr "Thực thi cấu hình syslinux trong cùng ngữ cảnh" + +#: grub-core/commands/syslinuxcfg.c:195 +msgid "Execute syslinux config in new context" +msgstr "Thực thi cấu hình syslinux trong ngữ cảnh mới" + +#: grub-core/commands/syslinuxcfg.c:201 +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "" +"Thực thi cấu hình syslinux trong cùng ngữ cảnh chỉ lấy các mục trình đơn" + +#: grub-core/commands/syslinuxcfg.c:207 +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "" +"Thực thi cấu hình syslinux trong ngữ cảnh mới chỉ lấy các mục trình đơn" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "chưa xác định terminal" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "không tìm thấy thiết bị cuối “%s”" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "Thiết bị cuối đầu vào đang kích hoạt:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "Thiết bị cuối đầu vào sẵn có:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "Thiết bị cuối đầu ra sẵn có:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "terminal xuất sẵn dùng:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] …" + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "Liệt kê hoặc chọn một terminal đầu vào." + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "Liệt kê hoặc chọn một terminal kết xuất." + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "BIỂU_THỨC ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "Ước lượng một biểu thức." + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "BIỂU_THỨC" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "Tải cùng một tập tin theo nhiều cách khác nhau." + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "Chỉ ra kích thước cho từ thao tác đọc" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "kích thước khối không hợp lệ" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "Kích thước tập tin: %s\n" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "Thời gian đã qua: %d.%03d giây \n" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "Tốc độ: %s \n" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "[-s CỠ] TÊN_TẬP_TIN" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "Kiểm tra tốc độ đọc tập tin." + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +msgid "no command is specified" +msgstr "chưa chỉ ra lệnh" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "Thời gian đã qua: %d.%03d giây \n" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "LỆNH [CÁC_ĐỐI_SỐ]" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "Đo thời gian sử dụng LỆNH" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "Chuyển sang chữ HOA." + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "Chuyển sang chữ thường." + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "[CÁC-TÙY_CHỌN] [SET1] [SET2] [CHUỖI]" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "Chuyển dịch TẬP_HỢP_CHỮ_CÁI_1 sang TẬP_HỢP_CHỮ_CÁI_2 trong CHUỖI" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "Không làm gì, thành công." + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "Không làm gì, không thành công." + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "Thử khả năng hỗ trợ USB." + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "Bỏ qua kiểm tra chữ ký của TẬP_TIN chữ ký." + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "chữ ký sai" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "không tìm thấy khóa công %08x" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "MÔ_ĐUN “%s”chưa được tải" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "[-s|--skip-sig] TẬP_TIN TẬP_TIN_KÝ [KHÓA-CÔNG]" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "Xác minh chữ ký đính kèm." + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "[-s|--skip-sig] TẬP_TIN_KHÓA-CÔNG" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "Thêm PUBKEY_FILE (khóa công) vào danh sách đáng tin." + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "Liệt kê các khóa đáng tin." + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "ID_KHÓA_CÔNG" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "Xóa bỏ PUBKEY_ID (khóa công) từ danh sách đáng tin." + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "Chỉ-chứa-chữ " + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "Màu trực tiếp, mặt nạ: %d/%d/%d/%d vtrí: %d/%d/%d/%d" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "Bảng màu " + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "YUV " + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "Phẳng " + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "Hercules " + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "CGA " + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "Chế độ video “Non-chain 4” 256 màu " + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "Đơn sắc " + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "Không hiểu chế độ video " + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr " tổng kiểm tra EDID không hợp lệ" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr " phiên bản EDID: %u.%u\n" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr " Chế độ mong muốn: %ux%u\n" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr " Không có chế độ mong chờ sẵn dùng\n" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, c-format +msgid "invalid video mode specification `%s'" +msgstr "đặc tả chế độ video “%s” không hợp lệ" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "Liệt kê các chế độ video được hỗ trợ:" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "Lời ghi chú: mặt-nạ/vị-trí=red/green/blue/reserved" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "Bộ tiếp hợp “%s”:\n" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr " Không có thông tin sẵn dùng" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr " Gặp lỗi khi khởi tạo phần điều khiển video" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "[WxH[xD]]" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "" +"Liệt kê các chế độ video sẵn có. Nếu độ phân giải màn hình chỉ đưa ra một " +"thì dùng luôn nó." + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "[WxH]" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "Thử hệ thống video phụ ở chế độ WxH." + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "Thử hệ thống phụ ảnh động." + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "[TMỤC]" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "Liệt kê đĩa kiểu Xen." + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "[-l] GRUBUUID [TÊN_BIẾN]" + +#: grub-core/commands/xnu_uuid.c:111 +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "" +"Chuyển dạng UUID 64-bit sang một định dạng thích hợp với XNU. Nếu tùy chọn -" +"l được đưa ra giữ nó ở chữ thường như được thực hiện bởi lệnh blkid." + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "gặp lỗi khi đọc cung từ 0x%llx từ “%s”" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "gặp lỗi khi ghi cung từ 0x%llx đến “%s”" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "Gắn sử dụng UUID." + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "Gắn tất cả." + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "Gắn toàn bộ các vùng có cờ “boot” được đặt." + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, c-format +msgid "cannot open `%s': %s" +msgstr "không thể mở “%s”: %s" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, c-format +msgid "cannot seek `%s': %s" +msgstr "không thể seek “%s”: %s" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "NGUỒN|-u UUID|-a|-b" + +#: grub-core/disk/cryptodisk.c:1145 +msgid "Mount a crypto device." +msgstr "Gắn thiết bị mã hóa." + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" +"Không thể tìm thấy vùng vật lý “%s”. Một số MÔ_ĐUN có lẽ đã bị thếu trong " +"ảnh lõi." + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "không tìm thấy phân vùng vật lý %s" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, c-format +msgid "no media in `%s'" +msgstr "không có đĩa đa phương tiện trong “%s”" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "Không thể tải sha256" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "Không thể tải sha512" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "không thể đọc “ELI metadata” (siêu dữ liệu)" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "sai số mầu nhiệm hoặc phiên bản ELI" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "Đang thử giải mã khóa chủ…" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "Gõ cụm từ mật khẩu cho %s%s%s (%s): " + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "Khe %d mở\n" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "đang thử đọc hay ghi ngoài đĩa “%s”" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "không thể ghi CD-ROM" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" +"Đĩa dạng nguyên bản đã được sử dụng. Từ chối sử dụng giao diện đĩa firmware " +"(phần mềm nhúng)." + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "phân vùng nhúng LDM quá nhỏ; nhúng là điều không thể" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" +"LDM này không có Embedding Partition (phân vùng nhúng; việc nhúng là không " +"thể" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +msgid "Delete the specified loopback drive." +msgstr "Xóa ổ đĩa (loopback) vòng ngược đã chỉ ra." + +#: grub-core/disk/loopback.c:236 +msgid "[-d] DEVICENAME FILE." +msgstr "[-d] TÊN_THIẾT_BỊ TẬP_TIN." + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +msgid "Make a virtual drive from a file." +msgstr "Tạo thiết bị ảo từ một tập tin." + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "tái định vị 0x%x vẫn chưa được thực hiện" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "không có bảng ký hiệu" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "tập tin ELF không phải là một kiểu đúng" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "Tải vào khởi tạo bộ mô phỏng EFI." + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "Hoàn thành việc tải bộ mô phỏng EFI." + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "Bỏ tải mô phỏng EFI." + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "không tìm thấy ký hiệu “%s”" + +#: grub-core/font/font_cmd.c:52 +msgid "Loaded fonts:" +msgstr "Phông chữ đã tải:" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "TẬP_TIN…" + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "Chỉ định một hay nhiều phông chữ cần tải." + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "Liệt kê phông chữ đã tải:" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "liên kết mềm lồng nhau quá sâu" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "thử đọc sau phần cuối thật của tập tin" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" +"không thể tìm thấy thiết bị số cần thiết của hệ thống tập tin đa-thiết-bị" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "không phải một thư mục" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "không phải tập tin thường" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "Bạn có một core.img quá lớn. Nó không vừa với vùng nhúng" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, c-format +msgid "invalid file name `%s'" +msgstr "tên tập tin “%s” không hợp lệ" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "Xác minh mã tổng kiểm tra không đạt" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "không có khóa giải mã sẵn dùng" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "Lỗi thẩm tra MAC gặp lỗi" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "Coi đầu vào dạng thô." + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "Coi đầu vào dạng thập lục phân." + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "Coi đầu vào là passpharse (mật khẩu cho tập tin)." + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +msgid "Enter ZFS password: " +msgstr "Nhập mật khẩu ZFS: " + +#: grub-core/fs/zfs/zfscrypt.c:476 +msgid "[-h|-p|-r] [FILE]" +msgstr "[-h|-p|-r] [TẬP_TIN]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "Nhập vào khóa bao bọc ZFS được lưu trong TẬP_TIN." + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "Thiết bị ảo đã bị gỡ bỏ" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "Thiết bị ảo bị hỏng" + +#: grub-core/fs/zfs/zfsinfo.c:63 +msgid "Virtual device is offline" +msgstr "Thiết bị ảo đã ngoại tuyến" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "Thiết bị ảo đã bị gỡ bỏ" + +#: grub-core/fs/zfs/zfsinfo.c:73 +msgid "Virtual device is online" +msgstr "Thiết bị ảo đang online" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "Thiết bị ảo không hợp lệ: kiểu không sẵn dùng" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "Thiết bị ảo còn lại (tập tin hoặc đĩa)" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "Đường dẫn khởi động: không sẵn sàng\n" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "Đường dẫn khởi động: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "Đường dẫn: không sẵn sàng" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "Đường dẫn: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "ID thiết bị: không sẵn sàng" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, c-format +msgid "Devid: %s\n" +msgstr "IDThiết bị: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "VDEV này là số nhỏ" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "VDEV này là RAIDZ%llu\n" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "VDEV không hợp lệ" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "VDEV với %d con\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "Phần tử VDEV %d không đúng\n" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "thành viên VDEV số %d:\n" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "Kiểu thiết bị ảo chưa được biết đến: %s\n" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "Trạng thái kho ZFS: hoạt động" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "Trạng thái kho ZFS: đã xuất" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "Trạng thái kho ZFS: đã phá hủy" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "Trạng thái kho ZFS: dự trữ để dành" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "Trạng thái kho ZFS: thiết bị ARC mức 2" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "Trạng thái kho ZFS: chưa khởi tạo" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "Trạng thái kho ZFS: chưa sẵn sàng" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "Trạng thái kho ZFS: có khả năng kích hoạt" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "Tên kho ZFS: chưa sẵn sàng" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "Tên kho ZFS: %s\n" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "GUID kho ZFS: chưa sẵn sàng" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "GUID kho ZFS: %016llx\n" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "Không thể lấy trạng thái kho ZFS nhận về" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "Không thừa nhận trạng thái kho ZFS" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "Không có cây thiết bị ảo nào sẵn dùng" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "Hiển thị thông tin ZFS về THIẾT_BỊ." + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "HỆ-THỐNG-TẬP_TIN [BIẾN]" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "Hiển thị ZFS-BOOTFSOBJ hoặc lưu nó vào BIẾN" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "Xin hãy kết nối đến bộ gỡ lỗi từ xa." + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "Khởi chạy “GDB stub” trên cổng đã cho" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "Ngắt vào GDB" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "Dừng “GDB stub”" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "gặp kết thúc tập tin quá sớm" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "Dịch chuỗi với các cài đặt hiện tại." + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"Bấm phím Enter để khởi động HĐH được chọn, phím “e” để chỉnh sửa câu lệnh " +"trước khi khởi động, phím “c” để truy cập đến dòng lệnh. Phím ESC để trở về " +"trình đơn trước." + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"Bấm phím Enter để khởi động HĐH được chọn, phím “e” để chỉnh sửa câu lệnh " +"trước khi khởi động, hoặc phím “c” để truy cập đến dòng lệnh." + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "nhấn “enter”: khởi động, “e”: tùy chọn, “c”: vào chế độ dòng lệnh" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "Mục nhập được tô sáng sẽ được tự động thực hiện trong %d giây." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "còn %d giây nữa." + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d giây" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "Trình đơn Khởi động GRUB" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "ARGP_HELP_FMT: giá trị %s nhỏ hơn hay bằng %s" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: tham số “ARGP_HELP_FMT” yêu cầu một giá trị" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "%.*s: tham số “ARGP_HELP_FMT” phải là số dương" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Không hiểu tham số “ARGP_HELP_FMT”" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Gặp rác trong “ARGP_HELP_FMT”: %s" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" +"Tham số là bắt buộc hay tham số chỉ là tùy chọn cho các tùy chọn dài cũng " +"đồng thời là bắt buộc hay không bắt buộc cho các tùy chọn ngắn tương ứng với " +"nó." + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr " hoặc: " + +#: grub-core/gnulib/argp-help.c:1662 +msgid " [OPTION...]" +msgstr " [TÙY_CHỌN…]" + +#: grub-core/gnulib/argp-help.c:1689 +#, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "" +"Hãy chạy lệnh “%s --help” (trợ giúp) hoặc “%s --usage” (cách dùng) để biết " +"thêm thông tin.\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Hãy thông báo lỗi cho %s.\n" +"Thông báo lỗi dịch cho: .\n" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "Không biết lỗi hệ thống" + +#: grub-core/gnulib/argp-parse.c:81 +msgid "give this help list" +msgstr "hiển thị trợ giúp này" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "hiển thị cách sử dụng dạng ngắn gọn" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +msgid "NAME" +msgstr "TÊN" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "đặt tên chương trình" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "GIÂY" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "treo trong vòng GIÂY giây (mặc định là 3600)" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "in ra phiên bản chương trình" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(LỖI CHƯƠNG TRÌNH) Không có phiên bản nào được biết!?" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Quá nhiều đối số\n" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(LỖI CHƯƠNG TRÌNH) Tùy chọn vẫn chưa được thừa nhận!?" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "%s: tùy chọn “%s” chưa rõ ràng; khả năng là:" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "%s: tùy chọn “--%s” không cho phép đối số\n" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "%s: tùy chọn “%c%s” không cho phép đối số\n" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "%s: tùy chọn “--%s” yêu cầu một đối số\n" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "%s: không nhận ra tùy chọn “--%s”\n" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "%s: không nhận ra tùy chọn “%c%s”\n" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: tùy chọn không hợp lệ -- %c\n" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: tùy chọn yêu cầu một đối số -- %c\n" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "%s: tùy chọn “-W %s” chưa rõ ràng\n" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "%s: tùy chọn “-W %s” không cho phép đối số\n" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "%s: tùy chọn “-W %s” yêu cầu một đối số\n" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "Thành công" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "Không khớp" + +#: grub-core/gnulib/regcomp.c:137 +msgid "Invalid regular expression" +msgstr "Biểu thức chính quy không hợp lệ" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "Ký tự đối chiếu không hợp lệ" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "Sai tên lớp ký tự" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "Có dấu chéo ngược theo sau" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "Sai tham chiếu ngược" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "Chưa khớp cặp “[” hoặc “[^”" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "Chưa khớp cặp “(” hoặc “\\(”" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "Chưa khớp cặp “\\{”" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "Nội dung của “\\{\\}” không hợp lệ" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "Sai kết thúc phạm vi" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "Hết bộ nhớ" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "Sai biểu thức chính quy đi trước" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "Kết thúc sớm biểu thức chính quy" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "Biểu thức chính quy quá lớn" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "Có ký tự “)” hoặc “\\)” lẻ đôi" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "lỗi biểu thức chính quy chưa biết" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "Không có biểu thức chính quy trước đây" + +#: grub-core/hello/hello.c:36 +msgid "Hello World" +msgstr "Chào thế giới!" + +#: grub-core/hello/hello.c:45 +msgid "Say `Hello World'." +msgstr "In ra “Chào thế giới!”." + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "thử di chuyển vị trí ngoài phạm vi của tập tin" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "định dạng gzip không được hỗ trợ" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "tập tin lzop bị sai hỏng" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "tập tin zx sai hỏng hoặc không hỗ trợ tùy chọn khối" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "sai số màu nhiệm ELF phụ-thuộc-kiến-trúc" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[BIẾN_MÔI_TRƯỜNG=GIÁ_TRỊ]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "Đặt biến môi trường." + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "BIẾN_MÔI_TRƯỜNG" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "Gỡ bỏ một biến môi trường." + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ĐỐI_SỐ]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "Liệt kê các thiết bị hoặc tập tin." + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "Chèn MÔ_ĐUN." + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "không tìm thấy đĩa “%s”" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "thử đọc hay ghi ngoài phân vùng" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "số màu nhiệm ELF độc-lập-kiến-trúc không hợp lệ" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "số lượng thiết bị đã đạt đến giới hạn" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, c-format +msgid "cannot write to `%s': %s" +msgstr "không thể ghi vào “%s”: %s" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" +"mục device.map “%s” không hợp lệ. Lờ nó đi. Xin hãy sửa lại hoặc xóa device." +"map của bạn" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" +"ổ đĩa có tên “%s” trong ánh xạ thiết bị không chính xách. Sử dụng %s để thay " +"thế. Xin hãy sử dụng dạng thức [hfc]d[0-9]* (vdụ “hd0” hoặc “cd”)" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, c-format +msgid "can't open `%s': %s" +msgstr "không thể mở “%s”: %s" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "TÊN_THIẾT_BỊ" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "Đặt thiết bị gốc." + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "dùng TẬP_TIN làm ánh xạ thiết bị [mặc định=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "dùng TẬP_TIN như là ảnh đĩa nhớ" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "dùng các tập tin GRUB trong thư mục TMỤC [mặc định=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +msgid "print verbose messages." +msgstr "hiển thị thông tin chi tiết." + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "chờ cho đến ghi bộ gỡ lỗi được tiếp hợp vào" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, c-format +msgid "Unknown extra argument `%s'." +msgstr "Không hiểu tham số mở rộng “%s”." + +#: grub-core/kern/emu/main.c:185 +msgid "GRUB emulator." +msgstr "Bộ mô phỏng GRUB." + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "Gặp lỗi khi phân tích cú pháp của tùy chọn dòng lệnh.\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "Chạy “gdb %s %d”, và đặt ARGS.HOLD thành số không.\n" + +#: grub-core/kern/emu/misc.c:46 +#, c-format +msgid "%s: warning:" +msgstr "%s: cảnh báo:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s: ttin:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s: lỗi:" + +#: grub-core/kern/emu/misc.c:174 +#, c-format +msgid "file `%s' is too big" +msgstr "tập tin “%s” quá lớn" + +#: grub-core/kern/fs.c:120 +msgid "unknown filesystem" +msgstr "không hiểu hệ thống tập tin" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "Tắt máy gặp lỗi" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "Thoát ra gặp lỗi" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "bị tràn" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "Đang bỏ qua phân vùng lồng nhau một cách không thích hợp (%s,%s,%s%d)" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "Không hiểu lệnh “%s”.\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "Hiển thị trợ giúp này, sau đó thoát." + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "Hiển thị cách sử dụng lệnh này, rồi thoát." + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "thiếu giá trị cho tùy chọn “%s”" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "tham số “%s” yêu cầu một số nguyên" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" +"một giá trị đã được gán cho tham số “%s” trong khi nó lại không yêu cầu đối " +"số" + +#: grub-core/lib/backtrace.c:64 +msgid "Print backtrace." +msgstr "Hiển thị backtrace." + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "GRUB chưa hiểu làm cách nào để tắt máy này!" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "Máy chủ mặc định là ${net_default_server}" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, c-format +msgid "invalid color specification `%s'" +msgstr "sai đặc tả màu sắc “%s”" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "Khởi động lại gặp lỗi" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "[ĐỘ_DÀI]" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "Dữ liệu ngẫu nhiên đổ hex" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "cây thiết bị phải được cung cấp (xem lệnh “devicetree”)" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "zImage (ảnh nén) không hợp lệ" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +msgid "invalid device tree" +msgstr "cây thiết bị không hợp lệ" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "Tải Linux." + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "Tải initrd." + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +msgid "Load DTB file." +msgstr "Tải tập tin DTB." + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" +"hạt nhân ảnh thường không được hỗ trợ - hãy dịch lại với tùy chọn bật " +"CONFIG_(U)EFI_STUB." + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "gặp lỗi khi lấy FDT" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "bạn cần phải tải Xen Hypervisor trước đã" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "Tải một bộ ảo hóa Xen." + +#: grub-core/loader/arm64/xen_boot.c:491 +msgid "Load a xen module." +msgstr "Tải mô-đun xen." + +#: grub-core/loader/efi/appleloader.c:231 +msgid "[OPTS]" +msgstr "[C_T_CHỌN]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +msgid "Boot BIOS-based system." +msgstr "Khởi động hệ thống ở chế độ BIOS cơ bản." + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "Tải một bộ tải khởi động khác." + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "Hiển thị kết xuất trên tất cả các bàn giao tiếp." + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "Dùng bàn giao tiếp kiểu nối tiếp." + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "Yêu cầu tên tập tin từ đó cần khởi động lại." + +#: grub-core/loader/i386/bsd.c:105 +msgid "Use CD-ROM as root." +msgstr "Dùng CD-ROM làm gốc." + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "Gọi chức năng định tuyến tùy theo cấu hình người dùng." + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "Vào KDB khi khởi động." + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "Dùng bộ gỡ lỗi GDB từ xa thay cho DDB." + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "Tắt tất cả các kết xuất khởi động." + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "Đợi cú bấm phím sau khi kết xuất mỗi dòng." + +#: grub-core/loader/i386/bsd.c:113 +msgid "Use compiled-in root device." +msgstr "Dùng thiết bị gốc dựng sẵn (compiled-in root)." + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "Khởi động vào chế độ người dùng đơn." + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "Khởi động với thông điệp chi tiết." + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "Đừng khởi động lại, chỉ tạm dừng lại." + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "Thay đổi các thiết bị được cấu hình." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comĐƠN_VỊ][,TỐC_ĐỘ]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "Tắt SMP." + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "Tắt ACPI." + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "Đừng hiển thị các thông điệp chẩn đoán khởi động." + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "Khởi động với thông điệp gỡ lỗi." + +#: grub-core/loader/i386/bsd.c:167 +msgid "Suppress normal output (warnings remain)." +msgstr "Loại bỏ kết xuất thông thường (để lại các thông tin cảnh báo)." + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ĐCHỈ|ĐƠN_VỊcom][,TỐC_ĐỘ]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "tên" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "kiểu" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "địachỉ" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "kích-thước" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +msgid "Booting in blind mode" +msgstr "Khởi động trong chế độ khuyết tật" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "Tải hạt nhân của FreeBSD." + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "Tải hạt nhân của OpenBSD." + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "Tải hạt nhân của NetBSD." + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "Tải env (môi trường?) FreeBSD." + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "Tải mô-đun hạt nhân FreeBSD." + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "Tải mô-đun hạt nhân FreeBSD." + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "Tải mô-đun hạt nhân FreeBSD (ELF)." + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "Tải mô-đun hạt nhân FreeBSD (ELF)." + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +msgid "Load kOpenBSD ramdisk." +msgstr "Tải đĩa RAM kOpenBSD." + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +msgid "Load another coreboot payload" +msgstr "Tải một vùng tải lõi-khởi-động (coreboot payload) khác." + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "Tham số cũ “ask” hiện tại không còn được hỗ trợ." + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" +"%s đã lỗi thời. Sử dụng set gfxpayload=%s trước lệnh linux để thay thế.\n" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" +"không tán thành sử dụng %s. Chế độ VGA %d không được chấp nhận. Sử dụng đặt " +"gfxpayload=RỘNGxCAO[xSÂU] trước câu lệnh linux để thay thế.\n" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "[--force|--bpb] TẬP_TIN" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "“%s” có kích cỡ quá lớn" + +#: grub-core/loader/i386/pc/freedos.c:183 +msgid "Load FreeDOS kernel.sys." +msgstr "Tải FreeDOS kernel.sys." + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "Tải NTLDR hoặc BootMGR." + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "Ghi đè ánh xạ gợi ý của thiết bị Plan9." + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "GRUBDEVICE=PLAN9DEVICE" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "KERNEL C_T_CHỌN" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "Load Plan9 kernel." +msgstr "Tải hạt nhân Plan9." + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +msgid "Load a PXE image." +msgstr "Tải ảnh PXE." + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "Tải ảnh “Truecrypt ISO”." + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "initrd (đĩa ram khởi tạo) đã được tải rồi" + +#: grub-core/loader/i386/xen.c:962 +msgid "Load module." +msgstr "Tải mô-đun." + +#: grub-core/loader/i386/xnu.c:1003 +msgid "Press any key to launch xnu" +msgstr "Hãy nhấn phím bất kỳ để khởi động xnu" + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +msgid "Load `device-properties' dump." +msgstr "Tải “device-properties” dump." + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "Không thể cấp phát điểu khiển (driver) FPSWA" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "Giao thức FPSWA không thể tìm thấy giao diện" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "Không tìm FPSWA nào" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "Phiên bản FPSWA: %x\n" + +#: grub-core/loader/ia64/efi/linux.c:627 +msgid "FILE [ARGS...]" +msgstr "TẬP_TIN [THAM-SỐ…]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "Hiển thị số thứ tự phiên bản FPSWA" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" +"CẢNH BÁO: không có thiết bị console (bàn điều khiển) nào sẵn sàng cho OS" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "Tải một hạt nhân đa khởi động (multiboot) 2." + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "Tải một mô-đun đa khởi động 2 (multiboot 2)." + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "Tải một hạt nhân đa khởi động (multiboot)." + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "Tải một mô-đun đa khởi động (multiboot)." + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "Chế độ ảnh nền." + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +msgid "stretch|normal" +msgstr "dãn|thường" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "Tải ảnh XNU." + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "Tải ảnh XNU 64-bit." + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "Tải gói mở rộng XNU." + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "Tải phần mở rộng XNU." + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "THƯ_MỤC [bó_HĐH_yêu_cầu]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "Tải thư mục phần mở rộng XNU." + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "Tải đĩa RAM XNU. Hệ điều hành (OS) sẽ là “md0”." + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "Tải một ảnh splash cho XNU." + +#: grub-core/loader/xnu.c:1501 +msgid "Load an image of hibernated XNU." +msgstr "Tải ảnh ngủ-đông XNU." + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ĐCHỈ1, MẶT-NẠ1[,ĐCHỈ2, MẶT-NẠ2[,…]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "Khai báo vùng bộ nhớ bị hỏng (hỏng ram)." + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "TỪ[K|M|G] ĐẾN[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "Gỡ bỏ mọi vùng nhớ trong vùng chỉ định." + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "cần bốn đối số" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "không nhận ra giao diện mạng“%s”" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "Không tìm thấy thông tin DHCP" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "Không tìm thấy tùy chọn DHCP" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "Không tìm thấy tùy chọn %d DHCP" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "không chấp nhận đặc tả định dạng tùy chọn DHCP “%s”" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "không tìm thấy card mạng nào" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "không thể tự cấu hình %s" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "[CARD]" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "thi hành tự động cấu hình bootp" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "BIẾN GAIO-DIỆN SỐ MÔ-TẢ" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" +"phục hồi tùy chọn DHCP và ghi nó vào BIẾN. Nếu BIẾN là - thì sẽ hiển thị giá " +"trị." + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "chưa cấu hình máy phục vụ DNS" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "thành phần tên miền quá dài" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "không tìm thấy bản ghi DNS" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "không nhận được trả lời từ DNS" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "chỉ ipv4" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "chỉ ipv6" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "ưu tiên ipv4" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "ưu tiên ipv6" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "tham số không hợp lệ" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "ĐỊA_CHỈ MÁY-CHỦ-DNS" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "Tra tìm DNS" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "MÁY-CHỦ-DNS" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "Thêm máy chủ DNS" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "Gỡ bỏ máy chủ DNS" + +#: grub-core/net/dns.c:768 +msgid "List DNS servers" +msgstr "Liệt kê máy chủ DNS" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "không thể gửi gói mạng" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "biên dịch không được hỗ trợ" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "alloc-mem gặp lỗi" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "free-mem gặp lỗi" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "đáp ứng trả lời HTTP không được hỗ trợ" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "đáp ứng trả lời lỗi HTTP không được hỗ trợ %d: %s" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, c-format +msgid "time out opening `%s'" +msgstr "gặp lỗi quá giờ khi mở “%s”" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "quá lâu: không thể phân giải địa chỉ phần cứng" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "không thể phân giải địa chỉ %s" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "không thừa nhận địa chỉ mạng “%s”" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "không kết nối được đến đích" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "tìm thấy điều kiện tìm đường (route loop)" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "không tìm thấy địa chỉ" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "bạn không thể xóa địa chỉ này" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "Không hỗ trợ kiểu địa chỉ phần cứng %d\n" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "Không hỗ trợ kiểu địa chỉ %d\n" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "cần ba đối số" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "không tìm thấy card" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "tạm" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "Không hiểu kiểu địa chỉ %d\n" + +#: grub-core/net/net.c:1298 +msgid "no server is specified" +msgstr "chưa chỉ ra máy chủ" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "lỗi quá giờ khi đọc “%s”" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "TÊN_NGẮN THẺ ĐỊA_CHỈ [ĐỊA_CHỈ_PHẦN_CỨNG]" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "Thêm một địa chỉ mạng." + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "[CARD [ĐỊA_CHỈ_PHẦN_CỨNG]]" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "Thực hiện tự động cấu hình IPV6" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +msgid "SHORTNAME" +msgstr "TÊN_NGẮN" + +#: grub-core/net/net.c:1771 +msgid "Delete a network address." +msgstr "Xóa một địa chỉ mạng." + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "TÊN_NGẮN MẠNG [GIAO-DIỆN| gw GATEWAY]" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "Thêm một định tuyến mạng." + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "Xóa một định tuyến mạng." + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "Liệt kê các định tuyến mạng" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "liệt kê các card mạng" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "liệt kê địa chỉ mạng" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "Kết nối đã bị từ chối" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "quá lâu không trả lời" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "Gõ tên tài khoản: " + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[DANH-SÁCH-NGƯỜI-DÙNG]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "Kiểm tra xem tài khoản có ở trong DANH-SÁCH-NGƯỜI-DÙNG hay không." + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "Các câu lệnh có thể chạy:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "Các thiết bị có thể dùng:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "Các tập tin có thể dùng:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "Các phân vùng có thể dùng:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "Các đối số có thể dùng:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "Các thứ có thể dùng:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "Cảnh báo: gặp lỗi cú pháp (dấu xuyệc còn thiếu) trong “%s”\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "Cảnh báo: màu tiền cảnh không đúng “%s”\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "Cảnh báo: gặp màu nền không đúng “%s”\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "BIẾN_MÔI_TRƯỜNG [BIẾN_MÔI_TRƯỜNG]…" + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "Xuất các biến." + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "Chủ nhật" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "Thứ hai" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "Thứ ba" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "Thứ tư" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "Thứ năm" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "Thứ sáu" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "Thứ bảy" + +#: grub-core/normal/dyncmd.c:187 +msgid "module isn't loaded" +msgstr "mô-đun chưa được tải" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB phiên bản %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "Phím ESC lúc nào cũng thoát." + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"Hỗ trợ chức năng chỉnh sửa dòng kiểu-BASH dạng tối giản. Đối với từ đầu tiên " +"thì phím TAB liệt kê các từ gợi ý là tên các lệnh có thể điền vào. Ở thời " +"điểm khác, phím TAB liệt kê các từ liên quan đến tên thiết bị hay tập tin có " +"thể điền vào. %s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr ">" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "grub>" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "Xóa màn hình." + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "Vào chế độ thông thường." + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "Thoát từ chế độ thông thường." + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "Bấm bất cứ phím nào để tiếp tục…" + +#: grub-core/normal/menu.c:814 +#, c-format +msgid "Booting `%s'" +msgstr "Đang khởi động “%s”" + +#: grub-core/normal/menu.c:826 +#, c-format +msgid "Falling back to `%s'" +msgstr "Quay trở lại “%s”" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "Gặp lỗi khi khởi động cả hai mục mặc định và “fallback”.\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "Đang khởi động một danh sách câu lệnh" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"Cũng hỗ trợ chức năng chỉnh sửa màn hình kiểu Emacs ở mức tối thiểu. Phím " +"TAB liệt kê các từ gợi ý có thể điền vào. Bấm tổ hợp phím Ctrl-x hoặc F10 để " +"khởi động lại, Ctrl-c hoặc F2 để vào chế độ dòng lệnh hoặc ESC để hủy các " +"sửa đổi và trở về trình đơn GRUB." + +#: grub-core/normal/menu_text.c:170 +#, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "Dùng phím %C và %C để chọn mục được tô sáng." + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "B" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "KiB" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "MiB" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "GiB" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "TiB" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "PiB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "K" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "M" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "G" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "T" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "P" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "B/s" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "KiB/s" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "MiB/s" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "GiB/s" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "TiB/s" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "PiB/s" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "Phân vùng %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "Thiết bị %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "Không thể truy cập được đến hệ thống tập tin" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "Hệ thống tập tin kiểu %s" + +#: grub-core/normal/misc.c:131 +#, c-format +msgid "- Label `%s'" +msgstr "- Nhãn “%s”" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- Sửa đổi cuối cùng %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +msgid "No known filesystem detected" +msgstr "Không hiểu hệ thống tập tin đã tìm thấy" + +#: grub-core/normal/misc.c:174 +#, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - Phân vùng bắt đầu tại %llu%sKiB" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr " - Kích thước cung từ %uB" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - Không hiểu tổng kích thước" + +#: grub-core/normal/misc.c:182 +#, c-format +msgid " - Total size %llu%sKiB" +msgstr " - Tổng kích thước %llu%sKiB" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr ".5" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "--CÒN NỮA--" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "không thể mở tập tin cấu hình “%s”: %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "không có ứng dụng nén nào cho nền tảng này của bạn" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "không có thủ tục IEEE1275 sẵn có nào trong hệ thống của bạn" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "không có thủ tục EFI sẵn có nào trong hệ thống của bạn" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "không có thủ tục SGI sẵn có nào trong hệ thống của bạn" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "không có bộ tạo số ngẫu nhiên sẵn có nào dành cho HỆ ĐIỀU HÀNH của bạn" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "Gặp lỗi khi tạo cây “device-mapper”" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "không thể gắn vùng được mã hóa “%s”: %s" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +msgid "couldn't open geom" +msgstr "không thể mở geom" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "không tìm thấy người tiêu dùng “geli”" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "không thể lấy về “geli UUID”" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "không tìm thấy lớp geom “part”" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +msgid "unaligned device size" +msgstr "kích thước thiết bị chưa căn chỉnh" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "đang thử đọc ảnh lõi “%s” từ GRUB" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "đang thử đọc ảnh lõi “%s” từ GRUB lần nữa" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "không thể đọc “%s” cho đúng" + +#: grub-core/osdep/generic/blocklist.c:128 +msgid "failed to read the sectors of the core image" +msgstr "lỗi đọc các rãnh ghi của ảnh lõi" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "không thể gắn hệ thống tập tin cho đường dẫn “%s”: %s" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "lệnh gắn hệ thống tập tin bị trống rỗng cho đường dẫn “%s”" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" +"lệnh gắn “%s” cho đường dẫn “%s” có nhiều từ không phải là tùy chọn, ít nhất " +"“%s” và “%s”" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" +"bộ dịch “%s” cho đường dẫn “%s” chỉ được đưa cho các tùy chọn, không thể tìm " +"thấy đường dẫn thiết bị" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "Thông tin kho chứa cho “%s” không chứa kiểu" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "“%s” không phải là đĩa trên máy" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" +"Thông tin cho kho chứa “%s” không chỉ ra rằng phân vùng không phải thường mà " +"đĩa cũng không phải thường" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "không thể lấy về danh sách cấm: %s" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "kích thước khối không chia hết cho 512" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "kích thước khối không là không hợp lệ" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "không thể lấy về “danh sách cấm”" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "lỗi ioctl RAID_VERSION: %s" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "không hỗ trợ phiên bản RAID: %d.%d" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "lỗi ioctl GET_ARRAY_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "lỗi ioctl GET_DISK_INFO: %s" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "Không thể mở dòng dữ liệu từ %s: %s" + +#: grub-core/osdep/linux/getroot.c:1033 +#, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "không hiểu kiểu của thiết bị RAID “%s”" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" +"không tìm thấy “obppath” trong thư mục cha của “%s”, không tìm thấy tên " +"IEEE1275" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "gặp lỗi khi lấy đường dẫn canonical của %s" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "không hiểu kiểu thiết bị %s" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "Cách dùng: %s THIẾT_BỊ\n" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "Không thể rẽ nhánh tiến trình: %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "Không tạo được đường ống dẫn lệnh: %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +msgid "cannot restore the original directory" +msgstr "không thể phục hồi thư mục nguyên gốc" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, c-format +msgid "cannot stat `%s': %s" +msgstr "không thể lấy trạng thái về “%s”: %s" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, c-format +msgid "cannot make temporary file: %s" +msgstr "không thể tạo tập tin tạm: %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "không thể tạo thư mục tạm: %s" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" +"không tìm thấy đường dẫn cây thiết bị IEEE1275 cho %s.\n" +"Bạn sẽ phải tự đặt biến “boot-device”" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, c-format +msgid "%s: not found" +msgstr "%s: không tìm thấy" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" +"“nvsetenv” gặp lỗi. \n" +"Bạn sẽ phải đặt biến “boot-device” bằng tay. Tại dấu nhắc IEEE1275, hãy gõ:\n" +" %s\n" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "Bạn sẽ phải đặt thủ công “SystemPartition” và “OSLoader”." + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "không có “/” trong tên tập tin kiểu canonical (đầy đủ)" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "cygwin_conv_path() gặp lỗi" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "không thể nhận về dữ liệu ngẫu nhiên" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "Thiếu đặc quyền truy cập firmware, coi là BIOS" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "không có thủ tục EFI sẵn có nào khi chạy ở chế độ BIOS" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "gặp lỗi EFI đột xuất" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "Không thể tìm thấy khe BootNNNN còn trống" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" +"Nhãn phân vùng GPT này không có phân vùng khởi động BIOS; nên không nhúng " +"được" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" +"BIOS Boot Partition (phân vùng khởi động BIOS) quá nhỏ; nhúng là điều không " +"thể thực hiện được" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" +"Rãnh ghi (Sector) %llu đã sẵn được sử dụng bởi thiết bị điều khiển raid " +"“%s”; đừng dùng nó. Xin hãy hỏi nhà sản xuất đừng ghi dữ liệu vào khe MBR" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" +"Rãnh ghi %llu đã đang được sử dụng bởi chương trình “%s”; tránh xa nó ra. " +"Phần mềm này có thể gây ra vấn đề khởi động hoặc các vấn đề khác trong " +"tương lai. Xin hãy yêu cầu tác giả của nó đừng ghi dữ liệu vào rãnh khởi " +"động" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" +"có phần mềm khác đã sử dụng vùng nhúng, và ở đây không đủ không gian để lưu " +"core.img. Những phần mềm như thế thường cố gắng lưu dữ liệu theo cách không " +"thăm dò trước. Chúng tôi khuyến nghị bạn nên điều tra rõ ràng." + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" +"Nhãn phân vùng kiểu MSDOS (msdos-style) không có chỗ trống nằm sau MBR; nên " +"không nhúng được" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" +"vùng nhúng của bạn nhỏ một cách bất thường. Nó không chứa được core.img." + +#: grub-core/parttool/msdospart.c:39 +msgid "Make partition active" +msgstr "Không thể làm cho phân vùng hoạt động" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "không phải là phân vùng cơ sở" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "Phân vùng %d được kích hoạt. \n" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "Đã xóa bỏ cờ hoạt động trên %d. \n" + +#: grub-core/parttool/msdospart.c:87 +msgid "Change partition type" +msgstr "Thay đổi kiểu của phân vùng" + +#: grub-core/parttool/msdospart.c:88 +msgid "Set `hidden' flag in partition type" +msgstr "Đặt cờ “ẩn” trong kiểu phân vùng" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "kiểu phân vùng 0x%x không hợp lệ" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "Đặt kiểu của phân vùng thành 0x%x\n" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "Thoát khỏi vòng lặp 0" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "không trong thân hàm" + +#: grub-core/script/execute.c:370 +#, c-format +msgid "invalid variable name `%s'" +msgstr "tên biến “%s” không hợp lệ" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "kết thúc tập tin đột xuất" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "[SỐ]" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "Thoát khỏi vòng lặp" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "Tiếp tục vòng lặp" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "Dịch chuyển tham số vị trí." + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[GIÁ_TRỊ]…" + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "Đặt tham số vị trí." + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "Trả về từ hàm." + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] TẬP_TIN" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "Tải ảnh nền cho thiết bị cuối đang hoạt động." + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "MÀU" + +#: grub-core/term/gfxterm_background.c:183 +msgid "Set background color for active terminal." +msgstr "Đặt màu nền cho thiết bị cuối đang hoạt động." + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "Hiển thị nội dung thiết bị điều khiển CBMEM." + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "Đặt đơn vị nối tiếp." + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "Đặt địa chỉ của cổng nối tiếp." + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "Đặt tốc độ của cổng nối tiếp." + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "Đặt chiều dài từ của cổng nối tiếp." + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "Đặt tính chẵn lẻ của cổng nối tiếp." + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "Đặt các bit dừng của của cổng nối tiếp." + +#: grub-core/term/serial.c:63 +msgid "Set the base frequency." +msgstr "Đặt tần số đồng hồ cơ bản." + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "Bật/tắt RTS/CTS." + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "không tìm thấy cổng nối tiếp “%s”" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "không hỗ trợ điều khiển luồng cổng nối tiếp" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[CÁC-TÙY_CHỌN…]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "Cấu hình cổng nối tiếp." + +#: grub-core/term/terminfo.c:184 +#, c-format +msgid "unknown terminfo type `%s'" +msgstr "không hiểu kiểu terminfo “%s”" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +msgid "visually-ordered UTF-8" +msgstr "kiểu UTF-8 thứ-tự-ảo" + +#: grub-core/term/terminfo.c:680 +msgid "Unknown encoding" +msgstr "Không hiểu bảng mã" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "Kiểu terminfo hiện tại:" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "Thiết bị cuối ở dạng chỉ-ASCII [mặc định]." + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "Thiết bị cuối là kiểu UTF-8 thứ-tự-lôgíc" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "Thiết bị cuối là kiểu UTF-8 thứ-tự-ảo" + +#: grub-core/term/terminfo.c:703 +msgid "Terminal has specified geometry." +msgstr "Thiết bị cuối có hình thái được chỉ ra." + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "RỘNGxCAO." + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "đặc tả kích thước thiết bị cuối (terminal) không đúng" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "không tìm thấy thiết bị cuối %s hoặc không nắm được nó bằng terminfo" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] TERM [KIỂU]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "Đặt kiểu terminfo của TERM thành KIỂU.\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "Hiển thị và thực thi đối số khổi." + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "tệp tin bitmap (ảnh bít) “%s” không được hỗ trợ định dạng" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr " ttin VBE: phiên bản: %d.%d phiên bản phần mềm OEM: %d.%d\n" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr " tổng dung lượng bộ nhớ: %d KiB\n" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "không tìm thấy chế độ video nào thích hợp" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "truy cập bị từ chối" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +msgid "MODULES" +msgstr "MÔ_ĐUN" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "tải trước các MÔ_ĐUN đã chỉ định" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "chỉ cài đặt các MÔ_ĐUN và các phần phụ thuộc của chúng [mặc định=all]" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "CHỦ ĐỀ" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "install CHỦ ĐỀ [mặc định=%s]" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "PHÔNG" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "install PHÔNG [mặc định=%s]" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "ĐỊA PHƯƠNG" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "chỉ cài đặt CÁC MIỀN ĐỊA PHƯƠNG [mặc định=all]" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "nén tập tin GRUB [tùy chọn]" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +msgid "choose the compression to use for core image" +msgstr "chọn kiểu nén sẽ dùng cho ảnh lõi" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "dùng các ảnh và mô-đun dưới TMỤC [mặc định=%s/]" + +#: include/grub/util/install.h:55 +#, c-format +msgid "use translations under DIR [default=%s]" +msgstr "dùng các bản dịch nằm ở TMỤC [mặc định=%s]" + +#: include/grub/util/install.h:58 +#, c-format +msgid "use themes under DIR [default=%s]" +msgstr "dùng các chủ đề (theme) nằm dưới TMỤC [mặc định=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "nhúng TẬP_TIN như là khóa công dành cho việc xác minh chữ ký" + +#: util/editenv.c:63 +#, c-format +msgid "cannot rename the file %s to %s" +msgstr "không thể đổi tên tập tin %s thành %s:" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "đĩa không tồn tại, do đó quay trở lại phân vùng thiết bị %s" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "Lệnh:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "Tạo khối môi trường có nội dung trắng." + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "Liệt kê các biến sẵn dùng." + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +msgid "set [NAME=VALUE ...]" +msgstr "set [TÊN=GIÁ_TRỊ …]" + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "Đặt các biến." + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "unset [TÊN …]" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "Xóa các biến." + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "Tùy chọn:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "Bạn cần phải chỉ ra ít nhất một lệnh.\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "TÊN_TẬP_TIN LỆNH" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "Công cụ sửa khối biến môi trường." + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" +"Nếu TÊN_TẬP_TIN là “-”, thì giá trị mặc định %s sẽ được dùng.\n" +"\n" +"Ở đây không có lệnh “delete”; nếu bạn muốn xóa toàn bộ khối môi\n" +"trường thì hãy dùng lệnh “rm %s”." + +#: util/grub-editenv.c:162 +msgid "invalid environment block" +msgstr "khối môi trường không hợp lệ" + +#: util/grub-editenv.c:216 +#, c-format +msgid "invalid parameter %s" +msgstr "tham số không hợp lệ %s" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "khối môi trường quá nhỏ" + +#: util/grub-fstest.c:107 +#, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "đọc đĩa gặp lỗi tại offset %lld, độ dài %lld" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "giá trị nhảy qua %lld không hợp lệ" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "lỗi đọc tại offset %llu: %s" + +#: util/grub-fstest.c:210 +#, c-format +msgid "cannot open OS file `%s': %s" +msgstr "không thể mở tập tin OS “%s”: %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "không thể ghi vào đầu ra tiêu chuẩn: %s" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "so sánh gặp lỗi tại offset %llu" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "Lỗi mở tập tin OS “%s”: %s" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, c-format +msgid "`loopback' command fails: %s" +msgstr "lệnh “loopback” gặp lỗi: %s" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, c-format +msgid "`cryptomount' command fails: %s" +msgstr "lệnh “cryptomount” gặp lỗi: %s" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "không thể lấy UUID" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls ĐƯỜNG_DẪN" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "Liệt kê các tập tin nằm trong THƯ-MỤC" + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp TẬP_TIN CỤC_BỘ" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "Sao chép TẬP_TIN tới tập tin CỤC_BỘ." + +#: util/grub-fstest.c:509 +msgid "cat FILE" +msgstr "cat TẬP_TIN" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "Xuất TẬP_TIN ra đầu ra tiêu chuẩn." + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp TẬP_TIN NỘI-BỘ" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "So sánh TẬP_TIN với tập tin CỤC_BỘ." + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex TẬP_TIN" + +#: util/grub-fstest.c:511 +msgid "Show contents of FILE in hex." +msgstr "Hiển thị thông tin của TẬP_TIN ở dạng thập lục phân." + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc TẬP_TIN" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "Lấy tổng kiểm tra crc32 của TẬP_TIN." + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist TẬP_TIN" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "Hiển thị blocklist của TẬP_TIN." + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "xnu_uuid THIẾT_BỊ" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "Tính toán XNU UUID của thiết bị." + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "SỐ" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "Bỏ qua N byte từ tập tin đầu vào." + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "Lấy N byte từ tập tin xuất." + +#: util/grub-fstest.c:519 +msgid "Specify the number of input files." +msgstr "Ghi rõ số lượng tập tin đầu vào." + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "Đặt biến môi trường gỡ lỗi." + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +msgid "Mount crypto devices." +msgstr "Gắn thiết bị mã hóa." + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "TẬP_TIN|prompt" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "Tải khóa mã hóa zfs." + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "dữ liệu không nén." + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "Số lượng đĩa không hợp lệ.\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "Số lượng đĩa phải đứng trước danh sách đĩa.\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "chưa chỉ ra lệnh nào.\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "Không đủ tham số cho lệnh.\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "Lệnh %s không hợp lệ.\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "ĐƯỜNG_DẪN_ẢNH CÁC_LỆNH" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "Công cụ gỡ lỗi cho ổ đĩa hệ thống tập tin." + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "đặt tên tập tin đầu vào cho bộ phận 32-bit." + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "đặt tên tập tin đầu vào cho bộ phận 64-bit." + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "đặt tên tập tin đầu ra. Mặc định là STDOUT" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +msgid "[OPTIONS]" +msgstr "[CÁC_TÙY_CHỌN]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "Glue nhị phân 32-bit và 64-bit thành “Apple fat one”." + +#: util/grub-glue-efi.c:116 +msgid "Missing input file\n" +msgstr "Thiếu tập tin đầu vào\n" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "không thể sao chép “%s” thành “%s”: %s" + +#: util/grub-install-common.c:141 +#, c-format +msgid "can't compress `%s' to `%s'" +msgstr "không thể nén “%s” thành “%s”" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, c-format +msgid "cannot open directory `%s': %s" +msgstr "không thể mở thư mục “%s”: %s" + +#: util/grub-install-common.c:206 +#, c-format +msgid "cannot delete `%s': %s" +msgstr "không thể xóa “%s”: %s" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "grub-mkimage được biên dịch mà không được hỗ trợ bởi định dạng XZ" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, c-format +msgid "Unknown compression format %s" +msgstr "Chưa biết định dạng nén %s" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "Không chấp nhận kiểu nén “%s”" + +#: util/grub-install-common.c:497 +#, c-format +msgid "unknown target format %s" +msgstr "không hiểu định dạng đích %s" + +#: util/grub-install-common.c:831 +#, c-format +msgid "cannot find locale `%s'" +msgstr "không tìm thấy miền địa phương “%s”" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "%s không tồn tại. Hãy chỉ định thông qua --target hoặc --directory" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, c-format +msgid "invalid modinfo file `%s'" +msgstr "tập tin modinfo (thông tin mô đun) “%s” không hợp lệ" + +#: util/grub-install-common.c:941 +#, c-format +msgid "Unknown platform `%s-%s'" +msgstr "Không hiểu nền tảng “%s-%s”" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "Nhiều hơn một thiết bị cài đặt?" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "cài ảnh GRUB dưới thư mục DIR/%s thay cho thư mục %s" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "ĐÍCH" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "cài đặt GRUB cho nền tảng ĐÍCH [mặc định=%s]; đích sẵn có: %s" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"làm cho đĩa cũng có khả năng khởi động giống như đĩa mềm (mặc định cho các " +"thiết bị fdX). Có lẽ nó không phải lúc nào cũng có hiệu quả trên các BIOS " +"nhưng lại hữu dụng khi cài đặt nó trên một đĩa cứng không có khả năng khởi " +"động." + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "xóa ánh xạ thiết bị nếu nó đã sẵn có" + +#: util/grub-install.c:272 util/grub-setup.c:87 +msgid "install even if problems are detected" +msgstr "cài đặt ngay cả khi nhận thấy có trục trặc" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "dùng tập tin định danh ngay cả khi sẵn có UUID" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" +"mô-đun đĩa sử dụng (biosdisk hoặc native). Tùy chọn này chỉ dùng được trên " +"đích là BIOS." + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" +"không cập nhật biến NVRAM “boot-device”/“Boot*”. Tùy chọn này chỉ có thể " +"dùng trên EFI và đích IEEE1275." + +#: util/grub-install.c:282 util/grub-setup.c:89 +msgid "do not probe for filesystems in DEVICE" +msgstr "không thăm dò hệ thống tập tin trên THIẾT_BỊ" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "không thể cài đặt cung từ khởi động" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" +"Không áp dụng các mã “reed-solomon” khi nhúng core.img. Tùy chọn này chỉ " +"dùng được trên đích là x86 BIOS." + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "thiết bị đã cài đã bị gỡ bỏ. Tùy chọn này chỉ sẵn dùng trên EFI." + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "ID của phần khởi động. Tùy chọn này chỉ sẵn dùng trên EFI và Macs." + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "dùng TMỤC làm gốc phân vùng hệ thống EFI." + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "dùng TMỤC cho cài đặt “PPC MAC”." + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "dùng TẬP_TIN làm phông dành cho nhãn" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "dùng MÀU cho nhãn" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "dùng MÀU cho nền nhãn" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "dùng CHUỖI làm phiên bản sản phẩm" + +#: util/grub-install.c:361 +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[TÙY_CHỌN] [THIẾT_BỊ_CÀI_ĐẶT]" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "Cài GRUB vào đĩa của bạn." + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" +"THIẾT_BỊ_CÀI_ĐẶT phải là tên tập tin thiết bị hệ thống.\n" +"%s sao chép ảnh GRUB vào %s. Trên một số hệ thống, nó\n" +"đồng thời cài đặt grub vào cung từ khởi động." + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "đĩa %s được định nghĩa nhiều lần trong ánh xạ ổ đĩa %s" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "Không thể xác định được nền tảng của bạn. Sử dụng --target." + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "Đang cài đặt cho nền tảng %s.\n" + +#: util/grub-install.c:931 +msgid "install device isn't specified" +msgstr "cài đặt THIẾT_BỊ mà nó chưa được chỉ ra" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "không thể tìm thấy thư mục EFI" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "không tìm thấy thiết bị cho %s (/dev đã gắn chưa?)" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "không tìm thấy ổ đĩa GRUB cho %s. Kiểm tra tập tin device.map" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "%s có vẻ không giống như là một phân vùng EFI." + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "Bạn vừa tìm thấy một lỗi" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "hệ thống tập tin trên %s không là HFS cũng không phải HFS+" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" +"cố cài đặt vào đĩa đã mã hóa mà cryptodisk không được bật. Đặt “%s” trong " +"tập tin “%s”." + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, c-format +msgid "Can't create file: %s" +msgstr "Không thể tạo tập tin: %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" +"không có gợi ý nào cho nền tảng này của bạn. Khả năng là hiệu năng sẽ bị " +"giảm sút" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "KHÔNG CHẠY: " + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "Phân vùng đã chọn không thuộc kiểu PReP" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "gặp lỗi khi sao chép Grub vào phân vùng PReP" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" +"phân vùng PReP không rỗng. Nếu bạn chắc chắn muốn sử dụng nó, hãy sử dụng " +"lệnh dd để xóa nó đi: “%s”" + +#: util/grub-install.c:1870 +msgid "EFI bootloader id isn't specified." +msgstr "Chưa chỉ ra id phần tải khởi động EFI." + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" +"CẢNH BÁO: không có cài đặt platform-specific (nền-tảng-đặc-thù) nào được " +"thực hiện" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "Cài đặt đã hoàn thành. Không có lỗi nào phát sinh." + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" +"đặt phân vùng có khả năng khởi động và đĩa khởi động trên máy macs chạy bộ " +"vi xử lý x86" + +# bless -- set volume bootability and startup disk +# Xem https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/bless.8.html +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" +"đặt phân vùng có khả năng khởi động và đĩa khởi động trên máy macs chạy bộ " +"vi xử lý ppc" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +msgid "No path or device is specified.\n" +msgstr "Chưa ghi rõ đường dẫn hoặc thiết bị.\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "--ppc ĐƯỜNG_DẪN|--x86 TẬP_TIN" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "Đặt phân vùng khởi động kiểu Mac trên HFS hay HFS+" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "Cách dùng: %s [TẬP_TIN_VÀO [TẬP_TIN_RA]]\n" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "Lỗi Freetype %d đang tải 0x%x cho U+0x%x%s" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "(đa phương tiện)" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "(cực tả)" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "(cực hữu)" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "Ngoài phạm vi thay-thế (substitution) (%d, %d)\n" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "Ngoài phạm vi tìm kiếm: %d\n" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "Kiểu thay-thế (substitution) không được hỗ trợ: %d\n" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "Đặc tả thay-thế (substitution) không được hỗ trợ: %d\n" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "Đặc tả thù hình của phông chữ không được hỗ trợ: %d\n" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "CẢNH BÁO: các tham số đặc điểm phông chữ không được hỗ trợ: %x\n" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "ghi kết xuất vào TẬP_TIN [bắt buộc]" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "chọn chỉ số cho phông chữ" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "TỪ-ĐẾN[,TỪ-ĐẾN]" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "đặt phạm vi phông chữ" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "đặt tên phông chữ" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "KÍCH-CỠ" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "đặt kích cỡ phông" + +#: util/grub-mkfont.c:951 +msgid "set font descent" +msgstr "đặt kích cỡ phông nhỏ" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "đặt kích cỡ phông lớn" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "chuyển sang phông chữ đậm" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "ép buộc tự-động-gợi-ý" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "tắt gợi ý" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "bỏ qua vẽ phông chữ có sẵn, bắt vẽ lại khi nó được tải" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "phạm vi phông chữ không hợp lệ" + +#: util/grub-mkfont.c:1151 +msgid "[OPTIONS] FONT_FILES" +msgstr "[CÁC_TÙY_CHỌN] [TẬP_TIN_PHÔNG]" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "Chuyển đổi định dạng phông chữ chung sang PF2" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +msgid "output file must be specified" +msgstr "tập tin đầu vào cần phải được chỉ ra" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "FT_Init_FreeType gặp lỗi" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "không thể mở tập tin “%s”, mục lục %d: lỗi %d" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "không thể đặt kích thước phông chữ %dx%d: Lỗi Freetype %d: %s" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "đặt thư mục tiền tố" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" +"TẬP_TIN được nhúng như là ảnh đĩa nhớ\n" +"Hàm ý “-p (memdisk)/boot/grub” và được đè lên bởi bất kỳ tiền tố được áp " +"dụng trước, nhưng bản thân tiền tố có thể bị ghi đè lên bởi các tùy chọn sau " +"này" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "coi TẬP_TIN nhúng như là cấu hình trước đó" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "thêm đoạn NOTE cho CHRP IEEE1275" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "xuất ảnh đã tạo ra TẬP_TIN [mặc định=stdout]" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "ĐỊNH-DẠNG" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "tạo ảnh theo ĐỊNH-DẠNG" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +msgid "available formats:" +msgstr "các định dạng có thể sử dụng:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, c-format +msgid "unknown target format %s\n" +msgstr "không hiểu định dạng đích %s\n" + +#: util/grub-mkimage.c:233 +msgid "[OPTION]... [MODULES]" +msgstr "[TÙY_CHỌN]… [MÔ_ĐUN]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "Tạo ảnh có thể khởi động của GRUB." + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "Định dạng đích chưa được chỉ ra (sử dụng tùy chọn -O)." + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "Tiền tố chưa được chỉ ra (sử dụng tùy chọn -p)." + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" +"“%s” chưa xong: nó bắt đầu tại địa chỉ 0x%llx thay vì 0x%llx: lỗi ld.gold?" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "đặt tên tập tin đầu vào. Mặc định là STDIN" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "Không hiểu mã quét bàn phím %s\n" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "Không hiểu mã quét bàn phím 0x%02x\n" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "LỖI: không tìm thấy bố cục bàn phím hợp lệ nào. Kiểm tra đầu vào.\n" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" +"Tạo bố cục bàn phím GRUB từ một (giao diện bàn điều khiển) console Linux" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "thư mục gốc của máy chủ TFTP" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "thư mục con tương đối trên máy chủ mạng" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" +"Chuẩn bị ảnh khởi động mạng GRUB tại net_directory/subdir coi net_directory " +"là gốc TFTP." + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "không hỗ trợ nền tảng %s" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" +"Thư mục khởi động từ mạng cho %s đã được tạo. Cấu hình máy chủ DHCP của bạn " +"chỉ đến %s\n" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "Số lần lặp của PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "Độ dài của mã băm tạo ra" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "Độ dài của salt" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "Tạo mã băm mật khẩu kiểu PBKDF2" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "đọc mật khẩu thất bại" + +#: util/grub-mkpasswd-pbkdf2.c:146 +msgid "Reenter password: " +msgstr "Nhập lại mật khẩu: " + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "mật khẩu không khớp" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "không thể nhận về dữ liệu ngẫu nhiên cho muối" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "số của lỗi cryptographic (mã hóa) %d" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "Mã băm kiểu PBKDF2 của mật khẩu của bạn là %s\n" + +#: util/grub-mkrelpath.c:67 +msgid "No path is specified.\n" +msgstr "Chưa ghi rõ đường dẫn.\n" + +#: util/grub-mkrelpath.c:78 +msgid "PATH" +msgstr "ĐƯỜNG_DẪN" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "Chuyển đổi kiểu tên tập tin hệ thống thành kiểu GRUB." + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "ghi lại ảnh ROM vào TMỤC [tùy chọn]" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "sử dụng TẬP_TIN như là xorriso [tùy chọn]" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "dùng CHUỖI như là tên sản phẩm" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" +"bật mồi máy sparc. Tắt HFS+, APM, sparc64 và mồi máy như là ảnh đĩa cho i386-" +"pc" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" +"bật mồi máy ARCS (máy mips big-endian, phần lớn là SGI). Tắt HFS+, APM, " +"sparc64 và mồi máy như là ảnh đĩa cho i386-pc" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" +"Tạo ảnh đĩa GRUB có thể khởi động được cho CD-ROM, đĩa cứng, usb, đĩa mềm." + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" +"Tạo ảnh CD/USB/đĩa-mềm có thể khởi động được. Các đối số khác tùy chọn " +"chương trình này được chuyển qua cho xorriso, và cho biết các tập tin nguồn, " +"thư mục nguồn hay bất kỳ tùy chọn mkisofs nào được liệt kê bởi lệnh “%s”." + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "Tùy chọn -- chuyển tới chế độ lệnh xorriso nguyên gốc." + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "Gửi thư yêu cầu hỗ trợ về xorriso tới ." + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +msgid "[OPTION] SOURCE..." +msgstr "[TÙY_CHỌN] NGUỒN…" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "đang bật hỗ trợ %s …" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"xorriso của bạn không hỗ trợ “--grub2-boot-info”. Một số tính năng bị tắt. " +"Hãy dùng xorriso 1.2.9 hay mới hơn." + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" +"xorriso của bạn không hỗ trợ “--grub2-boot-info”. Ảnh lõi của bạn quá lớn. " +"Tính năng coi Boot như là đĩa bị tắt. Hãy dùng xorriso 1.2.9 hay mới hơn." + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "Tạo ảnh đĩa dạng gộp (chứa toàn bộ các mô-đun) theo định dạng đã chọn" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "Cú pháp điểm Graft được chấp nhận (Vd: /boot/grub/grub.cfg=./grub.cfg)" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "ẢNH1 [ẢNH2 …] ĐIỂN_GẮN" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "cần một ảnh và điểm-gắn" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "đưa ra tham số là thiết bị hệ thống, không phải đường dẫn" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "ngăn cách các mục tin trong đầu ra sử dụng các ký tự NULL ASCII" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "[mặc định=%s]" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "in ĐÍCH" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "các đích có thể dùng:" + +#: util/grub-probe.c:791 +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[TÙY_CHỌN]… [ĐƯỜNG DẪN|THIẾT_BỊ]" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" +"Thông tin thiết bị thăm dò được cho đường dẫn đã cho (hoặc thiết bị, nếu tùy " +"chọn -d được chỉ ra)." + +#: util/grub-render-label.c:60 +msgid "read text from FILE." +msgstr "đọc văn bản từ TẬP_TIN." + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "dùng MÀU cho chữ" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "dùng MÀU cho nền" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "đặt nhãn để vẽ (render)" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "dùng TẬP_TIN như là phông chữ (PF2)." + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "Render Apple .disk_label." + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +msgid "Missing arguments\n" +msgstr "Thiếu đối số\n" + +#: util/grub-script-check.c:87 +msgid "[PATH]" +msgstr "[ĐƯỜNG_DẪN]" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "Kiểm tra tập tin cấu hình “GRUB script” xem có lỗi gì không." + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "Lỗi cú pháp trên dòng %u.\n" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "Script “%s” không chứa câu lệnh nào nên sẽ không thi hành gì\n" + +#: util/grub-setup.c:79 +#, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "sử dụng TẬP_TIN như là ảnh khởi động [mặc định=%s]" + +#: util/grub-setup.c:81 +#, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "sử dụng TẬP_TIN như là ảnh lõi [mặc định=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "Chưa ghi rõ thiết bị.\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"Cài đặt các ảnh để khởi động từ THIẾT_BỊ.\n" +"\n" +"Bạn không nên chạy chương trình này trực tiếp. Dùng lệnh grub-install để " +"thay thế." + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "THIẾT_BỊ phải là một thiết bị OS (ví dụ /dev/sda)." + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "Thiết bị không đúng “%s”.\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "thư mục gốc như là nó khi đang chạy [mặc định=/]." + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" +"thư mục hiện tại của syslinux như là khi nó đang chạy [mặc định là thư mục " +"cha của tập tin đầu vào]." + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "xuất cấu hình đã tạo ra TẬP_TIN [mặc định=stdout]." + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "Chuyển đổi cấu hình từ kiểu syslinux sang thành kiểu GRUB." + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "không thể nén ảnh hạt nhân" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "kiểu nén chưa được biết đến %d" + +#: util/mkimage.c:985 +msgid "Decompressor is too big" +msgstr "Tập tin đã giải nén quá lớn" + +#: util/mkimage.c:1030 +#, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "ảnh lõi quá lớn (0x%x > 0x%x)" + +#: util/mkimage.c:1037 +#, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "ảnh của nhân quá lớn (0x%x > 0x%x)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "Kích cỡ diskboot.img phải là %u byte." + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" +"fwstart.img không khớp với bất kỳ phiên bản tốt nào. Bạn phải tự chịu trách " +"nhiệm khi thực hiện nó" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +msgid "firmware image is too big" +msgstr "ảnh firmware quá lớn" + +#: util/resolve.c:93 +#, c-format +msgid "invalid line format: %s" +msgstr "định dạng dòng không hợp lệ: %s" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "" +"rãnh ghi thứ nhất của tập tin lõi không phải được căn chỉnh theo rãnh ghi" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "" +"trong tập tin lõi tìm được dữ liệu không phải được căn chỉnh theo rãnh ghi" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "trong tập tin lõi, các rãnh ghi bị phân mảnh quá" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "“%s” không có kích cỡ %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "“%s” có kích cỡ quá nhỏ" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"Đang thử cài đặt GRUB vào một đĩa với đa nhãn phân vùng, hoặc cả hai nhãn " +"phân vùng và hệ thống tập tin. Tính năng này chưa được hỗ trợ." + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "" +"không nhận ra được một hệ thống tập tin trong %s nên không thực hiện tiến " +"trình kiểm tra tính an toàn" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Có vẻ là %s chứa một hệ thống tập tin %s mà (theo thông tin hiện thời) không " +"dành riêng sức chứa cho sự khởi động kiểu DOS. Vì thế việc cài đặt GRUB vào " +"đó có thể gây ra HỆ THỐNG TẬP TIN BỊ HỦY nếu dữ liệu quan trọng bị ghi đè " +"bởi tiến trình cài đặt GRUB (grub-setup). Tùy chọn “--skip-fs-probe” tắt hàm " +"kiểm tra này: hãy tự chịu trách nhiệm khi sử dụng nó." + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Có vẻ là %s chứa một ánh xạ phân vùng %s mà (theo thông tin hiện thời) không " +"dành riêng chứa cho bộ khởi động kiểu DOS. Vì thế việc cài đặt GRUB vào đó " +"có thể gây ra BỘ PHÁ HỦY HỆ THỐNG TẬP TIN BỊ HỦY nếu dữ liệu quan trọng bị " +"ghi đè bởi tiến trình cài đặt GRUB (grub-setup) (Tùy chọn “--skip-fs-probe” " +"tắt hàm kiểm tra này, hãy tự chịu trách nhiệm khi sử dụng nó)" + +#: util/setup.c:462 +#, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"Có vẻ là %s chứa một ánh xạ phân vùng %s và LDM cái mà (theo thông tin hiện " +"thời) không biết có phải là tổ hợp an toàn hay không. Vì thế việc cài đặt " +"GRUB vào đó có thể gây ra BỘ PHÁ HỦY HỆ THỐNG TẬP TIN nếu dữ liệu quan trọng " +"bị ghi đè bởi tiến trình cài đặt GRUB (grub-setup) (tùy chọn “--skip-fs-" +"probe” tắt hàm kiểm tra này, hãy tự chịu trách nhiệm khi sử dụng nó)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "" +"Đang thử cài đặt GRUB vào một đĩa không có phân vùng hoặc một phân vùng. Đây " +"là một ý kiến TỒI." + +#: util/setup.c:480 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"Đang thử cài đặt GRUB vào một đĩa với nhiều nhãn phân vùng. Đặc tính này vẫn " +"chưa được hỗ trợ." + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "Kiểu phân vùng “%s” không hỗ trợ nhúng" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "Hệ thống tập tin “%s” không hỗ trợ nhúng" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "Bạn có một vùng nhúng nhỏ bất thường. core.img không nằm vừa trong nó." + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "ảnh lõi không chứa dấu chấm dứt" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "không khớp phiên bản core.img" + +#: util/setup.c:610 +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "" +"không thể nhúng được, nhưng mà chức năng này được yêu cầu cho cài đặt RAID " +"hay LVM" + +#: util/setup.c:617 +#, c-format +msgid "can't determine filesystem on %s" +msgstr "chưa xác định được kiểu hệ thống tập tin trên %s" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "hệ thống tập tin “%s” không hỗ trợ danh sách cấm" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "" +"không thể nhúng được, nhưng mà chức năng được yêu cầu khi cài đặt cross-" +"disk\n" +"* cross-disk: thư mục /boot ở trên một đĩa nhưng MBR lại trên một cái khác" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"Không thể nhúng được. GRUB chỉ cài đặt được vào cài đặt này bằng cách sử " +"dụng danh sách cấm. Tuy nhiên, danh sách cấm vẫn không đáng tin và cách dùng " +"của chúng thì khó khăn." + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "sẽ không xử lý với danh sách cấm" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "danh sách cấm không hợp lệ" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "danh sách cấm chưa hoàn thiện" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "Cách dùng: %s -o KẾT-XUẤT CÁC-THAM-SỐ-CKBMAP…\\n" + +#: util/grub-kbdcomp.in:25 +msgid "Make GRUB keyboard layout file." +msgstr "Tạo tập tin bố cục bàn phím GRUB." + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +msgid "print this message and exit" +msgstr "hiển thị trợ giúp này rồi thoát" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "hiển thị ra thông tin phiên bản rồi thoát" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "%s tạo giao diện bàn phím cho GRUB sử dụng ckbcomp\\n" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" +"Hãy thông báo lỗi cho .\n" +"Thông báo lỗi dịch cho: ." + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "%s: tùy chọn yêu cầu một tham số -- “%s”\\n" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "Sử dụng: %s [TÙY_CHỌN]\\n" + +#: util/grub-mkconfig.in:58 +msgid "Generate a grub config file" +msgstr "Tạo tập tin cấu hình" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "xuất cấu hình đã tạo ra TẬP_TIN [mặc định=stdout]" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "Không chấp nhận tùy chọn “%s”\\n" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" +"%s: Bạn phải chạy chương trình này với tư cách siêu người dùng (root)\\n" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "%s: Không tìm thấy.\\n" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "Đang tạo tập tin cấu hình grub …" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" +"Các lỗi cú pháp đã được phát hiện trong tập tin cấu hình GRUB đã tạo.\n" +"Hãy chắc chắn rằng không có lỗi nào trong tập tin /etc/default/grub\n" +"và /etc/grub.d/* hoặc báo cáo tập tin lỗi này bằng cách đính\n" +"kèm tập tin %s." + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "đã xong" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "Cảnh báo:" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "Cách dùng: %s [CÁC-TÙY_CHỌN] ĐIỂM-VÀO-MENU\\n" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" +"Đặt mục menu mặc định sẽ khởi động cho GRUB, chú ý là chỉ áp dụng cho lần " +"khởi động sau." + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "cần ảnh GRUB nằm dưới thư mục T-MỤC/%s thay vì tại thư mục %s" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" +"MENU_ENTRY là một con số, một tiêu đề hay định danh của một trình đơn. Hãy " +"chú ý là các mục trình đơn trong\n" +"trình đơn con hoặc là trình đơn cháu yêu cầu phải chỉ ra thành phần của " +"trình đơn con và sau đó là\n" +"thành phần của mục trình đơn. Tiêu đề phải được ngăn cách sử dụng ký tự lớn " +"hơn\n" +"(>) mà không có thêm các khoảng trắng thêm. Phụ thuộc vào hệ vỏ của bạn mà " +"một số ký tự bao gồm > cần được thoát chuỗi. Để có thêm thông tin hãy xem " +"trong\n" +"sổ tay hướng dẫn GRUB tại phần lệnh “default”. " + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "Có nhiều hơn một mục menu?" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +msgid "Menu entry not specified." +msgstr "Điểm vào menu chưa được chỉ ra." + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "Đặt mục menu khởi động mặc định cho GRUB." + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "Cái này yêu cầu cài đặt GRUB_DEFAULT=saved trong %s/default/grub.\\n" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" +"MENU_ENTRY là một con số, một tiêu đề của mục của menu hoặc một định danh " +"một mục của menu." + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" +"Đã yêu cầu thiết bị cuối nối tiếp nhưng không chỉ ra GRUB_SERIAL_COMMAND. " +"Tham số mặc định sẽ được sử dụng." + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "Tìm thấy theme: %s\\n" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "Tìm thấy nền: %s\\n" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "Không hỗ trợ định dạng ảnh" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" +"Đang đặt GRUB_TIMEOUT thành giá-trị không zero khi GRUB_HIDDEN_TIMEOUT được " +"đặt thì không còn được hỗ trợ nữa." + +#: util/grub.d/10_hurd.in:48 +msgid "Found GNU Mach: %s" +msgstr "Tìm thấy GNU Mach: %s" + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "Tìm thấy mô-đun Hurd: %s" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "Một số thành phần Hurd được tìm thấy, nhưng không đủ để khởi động." + +#: util/grub.d/10_hurd.in:91 +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s, với Hurd %s (chế độ phục hồi)" + +#: util/grub.d/10_hurd.in:94 +msgid "%s, with Hurd %s" +msgstr "%s, với Hurd %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" +"Đừng sử dụng tiêu đề cũ “%s” cho GRUB_DEFAULT, sử dụng “%s” (cho các phiên " +"trước 2.00) hoặc “%s” (cho 2.00 hoặc mới hơn)" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "Đang tải GNU Mach …" + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "Đang tải Hurd …" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "Tùy chọn nâng cao cho %s" + +#: util/grub.d/10_illumos.in:40 +msgid "Loading kernel of Illumos ..." +msgstr "Đang tải hạt nhân của Illumos …" + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s, với kFreeBSD %s (chế độ phục hồi)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s, với kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "Đang tải hạt nhân của FreeBSD %s …" + +#: util/grub.d/10_kfreebsd.in:164 +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "Tìm thấy hạt nhân FreeBSD.: %s\\n" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "Tìm thấy thư mục mô-đun hạt nhân: %s\\n" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s, với Linux %s (chế độ phục hồi)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s, với Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "Đang tải Linux %s …" + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "Đang tải đĩa RAM khởi tạo …" + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "Tìm thấy ảnh linux: %s\\n" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "Tìm thấy ảnh initrd: %s\\n" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s, với kernel %s (thông qua %s, chế độ phục hồi)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s, với kernel %s (thông qua %s)" + +#: util/grub.d/10_netbsd.in:158 +msgid "Found NetBSD kernel: %s\\n" +msgstr "Tải hạt nhân NetBSD: %s\\n" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "Windows Vista/7 (bộ tải)" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "Windows NT/2000/XP (bộ tải)" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "Tìm thấy %s trên %s (%s)\\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "(32-bit)" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "(64-bit)" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "(trên %s)" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s, với Xen %s và Linux %s (chế độ phục hồi)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s, với Xen %s và Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +msgid "%s, with Xen hypervisor" +msgstr "%s, với bộ ảo hóa Xen" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "Đang tải Xen %s …" + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "Bộ ảo hóa Xen, phiên bản %s" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "Các tùy chọn cấp cao cho %s (với bộ ảo hóa Xen)" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "Tìm thấy %s trên %s\\n" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "%s vẫn chưa được hỗ trợ bởi grub-mkconfig.\\n" + +#~ msgid "Unsupported substitution flag: 0x%x\n" +#~ msgstr "Cờ thay-thế (substitution) không được hỗ trợ: 0x%x\n" + +#~ msgid "Unknown gsub font feature 0x%x (%s)\n" +#~ msgstr "Không hiểu đặc điểm phông chữ gsub 0x%x (%s)\n" + +#~ msgid "root directory of the syslinux disk (default /)." +#~ msgstr "thư mục gốc của đĩa syslinux (mặc định /)." + +#~ msgid "assume isolinux." +#~ msgstr "coi là isolinux." + +#~ msgid "assume pxelinux." +#~ msgstr "coi là pxelinux." + +#~ msgid "assume syslinux." +#~ msgstr "coi là syslinux." + +#~ msgid "%s is neither hfs nor hfsplus" +#~ msgstr "%s mà không có hfs cũng không có hfsplus" + +#~ msgid "copies GRUB images into net_directory/subdir/target_cpu-platform." +#~ msgstr "" +#~ "không thể sao chép ảnh GRUB vào thư_mục_net/subdir/nền-móng-cpu-đích." + +#~ msgid "" +#~ "Generates a bootable rescue image with specified source files, source " +#~ "directories, or mkisofs options listed by the output of `%s'.\n" +#~ "\n" +#~ "Option -- switches to native xorriso command mode.\n" +#~ "\n" +#~ "Mail xorriso support requests to ." +#~ msgstr "" +#~ "Tạo ra một ảnh cứu hộ có thể khởi động với những tập tin nguồn, thư mục " +#~ "nguồn đã chỉ ra hoặc các tùy chọn mkisofs được liệt kê bằng kết xuất từ " +#~ "“%s”\n" +#~ "\n" +#~ "Tùy chọn -- chuyển sang chế độ lệnh xorriso cơ bản.\n" +#~ "\n" +#~ "Yêu cầu hỗ trợ qua thư xin gửi đến ." + +#~ msgid "" +#~ "print filesystem module, GRUB drive, system device, partition map module, " +#~ "abstraction module or cryptographic container UUID [default=fs]" +#~ msgstr "" +#~ "hiển thị mô-đun hệ thống tập tin, đĩa GRUB, thiết bị hệ thống, mô-đun ánh " +#~ "xạ phân vùng, mô-đun trừu tượng hoặc UUID thùng chứa mã hóa [mặc định=fs]" + +#~ msgid "current directory of the syslinux disk [default=$pwd]." +#~ msgstr "thư mục hiện tại của đĩa syslinux [mặc định=$pwd]." + +#~ msgid "use DIR as root directory [default=/]" +#~ msgstr "dùng TMỤC làm thư mục gốc [mặc định=/]" + +#~ msgid "Address range not associated with RAM" +#~ msgstr "Vùng địa chỉ không kết hợp với RAM" + +#~ msgid "PUBKEY_FILE" +#~ msgstr "TẬP_TIN_KHÓA-CÔNG" + +#~ msgid "grub_memalign is not supported on your system" +#~ msgstr "grub_memalign không được hỗ trợ trên hệ thống của bạn" + +#~ msgid "If FILENAME is `-', the default value %s is used." +#~ msgstr "Nếu TÊN_TẬP_TIN là “-”, thì giá trị mặc định %s sẽ được dùng." + +#~ msgid "save only the ASCII bitmaps" +#~ msgstr "chỉ ghi lại các ảnh bít ASCII." + +#~ msgid "create width summary file" +#~ msgstr "tạo tập tin tóm lược kích thước" + +#~ msgid "Option --ascii-bitmaps doesn't accept ranges (it always uses ASCII)." +#~ msgstr "" +#~ "Tùy chọn --ascii-bitmaps không chấp nhận một vùng (nó luôn sử dụng ASCII)." + +#~ msgid "WARNING: your random generator isn't known to be secure\n" +#~ msgstr "" +#~ "CẢNH BÁO: bộ tạo số ngẫu nhiên của bạn có lẽ không được an toàn lắm\n" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "lỗi đọc rãnh ghi thứ nhất của ảnh lõi" + +#~ msgid "use FILE as grub-setup" +#~ msgstr "sử dụng TẬP_TIN như là grub-setup" + +#~ msgid "use FILE as grub-mkrelpath" +#~ msgstr "sử dụng TẬP_TIN như là grub-mkrelpath" + +#~ msgid "use FILE as grub-probe" +#~ msgstr "sử dụng TẬP_TIN như là grub-probe" + +#~ msgid "INSTALL_DEVICE must be system device filename." +#~ msgstr "THIẾT_BỊ_CÀI_ĐẶT phải là tên tập tin thiết bị hệ thống" + +#~ msgid "" +#~ "Path `%s' is not readable by GRUB on boot. Installation is impossible. " +#~ "Aborting.\\n" +#~ msgstr "" +#~ "Đường dẫn “%s” không thể đọc được bởi GRUB trên boot. Cài đặt không thể " +#~ "thực hiện được. Đang bỏ qua.\\n" + +#~ msgid "Auto-detection of a filesystem of %s failed.\\n" +#~ msgstr "Tự động dò tìm của một hệ thống tập tin của %s gặp lỗi.\\n" + +#~ msgid "Try with --recheck." +#~ msgstr "Thử với --recheck." + +#~ msgid "" +#~ "If the problem persists please report this together with the output of %s " +#~ "to <%s>" +#~ msgstr "" +#~ "Nếu trục trặc vẫn tiếp tục, xin hãy báo cáo nó cùng với kết xuất từ %s " +#~ "cho <%s>" + +#~ msgid "`%s' failed.\\n" +#~ msgstr "“%s” gặp lỗi.\\n" + +#~ msgid "" +#~ "Can't find GRUB drive for %s; unable to create EFI Boot Manager entry.\\n" +#~ msgstr "" +#~ "Không tìm thấy đĩa GRUB cho %s; không thể tạo mục “EFI Boot Manager”.\\n" + +#~ msgid "Generating grub.cfg ..." +#~ msgstr "Đang tạo grub.cfg …" + +#~ msgid "use FILE as grub-glue-efi" +#~ msgstr "sử dụng TẬP_TIN như là “grub-glue-efi”" + +#~ msgid "use FILE as grub-render-label" +#~ msgstr "sử dụng TẬP_TIN như là “grub-render-label”" + +#~ msgid "Packed pixel " +#~ msgstr "Bảng màu" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo new file mode 100644 index 0000000000000000000000000000000000000000..ba7372b0f39e53132d56dc841c7e1a6cf38e3363 GIT binary patch literal 30187 zcmdsE$dFNjs31A2bfsjB*^0JsX#8L7R@_yDN(_JZTVFM#g^{~r7x`1&vit^ltA zKMYO>$AC%j&EPWdCU7}O(?LIY9{2-L{rm)^so)>M^TD^%soK2^ybQb*yc}!*`4@EZ zXBF5BeiFRw{Xy^^Fb!%P>p->h49Jv%KJeY(x4?ISgFgQ6pvqtV0ZX3@s+~JP(WM2v z1ndSc23La`&o)ryo(DDlZ-ScVk3s$gdH$&0TbYFBbv3AdKL)DZJ3-MQ0e%R42)qD% z7S#M+07d8Tfh=M0y0Nxi7lK-cw}UEI0jmFb9v6Ddf*RjSQ1jd4?LZc?i4?+y|=McRCM4dZNl?*%U)UJ1SftOC{Ud{E==05#qv;12L1P~!=&HU6Fr ziv9~hty{Opl^{ifEuiN01@I#9FFoc#_4BWw=z0;%d>;5dQ0w*~@QvUUQ0p=kRQolc zsO$fND1ZYMl4^_y!OW2=;@T@7F-l;|Jhe@NYrU zsj|Z8QU|Ktb`aJH{t(oB_JV5XPe6@34~mZGU2p4h1*rHe@FMWjp!!RKs^0^u-cz9H zdKy&uZ-62AH=y|M^%IP)SAr^k3#jqj1zrR$0yW-009F2Rk4Hf9*VjG%6ck;51FHYa zCmMfNf?B@@A72HsWWgTrX7HQfTfy@wq<$^|HO>$Fcold9@q0k={W_2(4qgC7{~vq& zXYdl@Z=$f~aRnHHH-Rd5Hz@w^1SM}-Q2lKLF9x3j4}zz_<6z5V%fEVx(e)-!@>TVA=n0rUTeV5flq*{cQKP-s6h<85^MwC z2Cf9(1#SXGzvn>J{}PC31b^Ywu!gKFoipy>2N zP;@)*He2rxf#R=9 z0VTgb0mUbIQ1bY1KK}xk=5peff|^GKI0n4c<1Fxf#OpwfCktwwp8yff;M<`3xnQR8 z)1{!saU-boPk`dT&wy(Geo*6i7*x5(!S{nlK>h`P${*?T%V$}+4}y}<82Co88q|Di zL9K5SI1yY9iY_mMh`D0)2$ z{t`S1{w;X;4x7i;*~Z^bgQDLbgV%sR1Xb_6S{vV`;Jb-W0mp%JLD6NY$5mjA_-61! z;FrM*z`p~kUSPX&gpRjh` z0&3h7K=nV<$J@ZS68}7?c{~ED-$S72@og{!zYoH?!LLD;zqQWhQv-_5wV>K<1vQQ} z;6>n59$x^(cV7aiqpz6Kt zE?bwYz;_TI3#$K*fXbf^UJTZQ>aQ7`4BiKd-hDp(Yv31&{}_~f?!MdX)6<~FbqpH#Hlc3f$18V&?f$H}qkADTK{=b7)fbaa2m7f4A zUI!{a398+PK+SI#sP?`HimrbRs{AiO(c!HNjBeM1?;&0bUIw;-8h4LR-vp}OQSiOs zH$4vd{0ly9_1_0-9Jhk%zYbKr#o+beW8hWbmq5+$Z@?IM!M(OVlR=HY8q_#G?c=(qCT#-8?|?&s#rZ7=l`#$)NIQf*S8aQ1kyIQ0v?aDt|MmdA9-3(qyybctdyFm4~22{Om zpw{DMP~-g>sP@lKSoteJ&2us+`S_?$Pk^vO@OdBqA^1V!zw-E=7JNIzKL)B?A2=Jl zu+{LB;B~|gfD^&*g13O@x7j$VK+U5G)Hv6Jlfgq^CHNDc{+@O#f1}5{L5=@DQ1saV zqAG&D;1uvTpxT@GS*uqIDxLzxr;qsfAyDmn1x$lK1VzWWi_Bi=1U29Npy>GxQ00FB ziobs8+y(B{|=~e{S5pt`1(#O7Xz;$J{MH_5>Wj< z1>OiA1Fr@D0o1x*p0sgK1T~I!P~%?#UI-on#plPt^TBU}8qc4D;^$w3lFzrWsBZ>8 z0IJ^@sCnNFz7b4eB zF9PR*qT6S{w}Q(+m0t;}olT&|`viD3_+?Pz8UQuUcV=w<9|zS=BPcp#L5-`|ryl@C z_b-5Bz`yY6KLxdZzX2zJW3x7{J3*Ce0oBguK+$~-sC9T06u%q*#UEb*9Up*N@5{T5 z{!>AX=U!0l+~@Hz@HXOyz}JCS^XGqp`w3U_eHY;%-|r(-^L;mA3*YkTzMh~;-v#9B zE&R^#@dh8)SU&E*xAL7Me3kGc!Xbiw|Ap|1`@)As*?0T$@9-#k=_kDs`ZTTC7``tc z#FfeK-Gu*5xQw*F0Dnxlj_-d4^=l+NN2pT7|K3CXGQOvR{{~7n{)zAyLBDN;YstIW z#fJa6g7kYx`U8Swc3cu-m-$V#~!sFnx zgnNDbeDY57{Q>X>pN5JG`Uq2ee1pe71jWO<2pb8omfLe50q>yxm%zgB68{kc`~CN$ z;Ej~i?+1hr@%>3~KneWrB>sN;bbs&T?B6Zsz;H+Gp|a_xQTg$0|L(i*geQmlD{r-ESp- zrBn2i&Y3{oGvG18<%Goq>9W5je1bgvCKGD-{t)=E68!JKgX2g)>f;~u4Oj3*jlk`ziA+@au%j2)7cy1*|1}ilASbaKL?G z*OR}B@44XH!FfJ?2Jt`g--3OF8wu5l@VkjHi||vzal#PcLh9T`Xe2BmuDhtogg@iE z0h|qfhR{qX{ObM3AA`FIFZuYb9;MsAL6}4R6+Z1Qu#Wh@`1nV`ZxVj#;~8)aVK3nn zVJ+d)1pPitJ^ijS2x`Ee5ZZkFAHf)9F81Z_CO*UG72xmu#|@O3!*><<0q}gnI|;LV z-I-u7@xt#apMHXbza?Bl{O`e!5mE&Gx(NSH*i0Bt(65#7Yr@9~Ere;*`xN25gxQ26 zr2U*w_}$M(osWEs{Cf!c?I4Wx-&0)*dl&KT{`<2Y6W}z$>j_^W+(MZzfcm|WkR_Z) zSV#D8gs%}MQD(kx`yt{J2@Qn*MMx5ECw!Fr%L#Ah`#Xdm5`II_Z!Y0tLZ>49o+n)C zzK}WUe1z{e`1oq@^Mt=5eA%as11ktG`1ti;JK@g>hY4?{jXmJo!1dst5-#C82xDPG zDjV+zGwt^!!tUgvWNJw=7~7mt2-Atqczd!v*;)~d&4lr;u0%YY3A3rNDV5BU6UIZ* zTiQDknPr)5qBC65*51?>wr7&pWJA}K3a1m9M0#-|%yh+@5@Aa!9nP3rAIoHybtJ-t zsZ_Qi3~Q1Z2GK!J;jFs()52_9BAuX@?v7?v@9xNk^ft3*c6I$d^$pdv;f(6~hPwIF z8*1jx3ENx3#qo~r_(Ixij%VZaAEp*3(o53q*=!;iE?gG2rn?u$GKp+=S2!*f%PeZ| zinU~7UFp<9s)P%mT-$ z&56ZfDg$3GstBrP%&2pJ!aJ*G&#w*}Ypd$-Sm077j@S3Z#_=jM$wekLj<2YwSU`UL z^qQKWs;Mc_l`Rvu>2=r7nH?f$i7=6DM%*&=(3EXQI@^<7-PtgkNO!g;;~kmGLVBt@ zJ2E4)$Vsu}K1{}$q7!n7a@dkibpG~-8*4eb1Hhb>$JA!F()JtF zlVQ};M96qDOm!vF@DW5b?do&dlMFCJGJQ+5e6o|r=ETD8*07V=#9I@rt!v8VAc+f8 z^g29GjmOcmot+X#bstP`izi#9dy_5gt=(xz2|KnoskQ0SjbRnacu`_mAv&F{Af4(c zPpWTgZy8ob6P!M8e%O+TXKAw76wP>nNu)z|fNZz2I@o2j1B96-{nQeDfeXBJ?Te$&j3T_arB5l=2cz81HqQ_0RmGD}Jd!fB8d!HnuVYo=Fw z2pi{B)iu;;8*9Ao`dDMbJ@cv;ELadC#Dx-_-DnlIDHvjIyXjTF4b+qC_i$8McXsRnzCyP|e5cYv+|B*cZ;+2u&)B8P_M0PLAtqS&DGn zgzG1Yp6!{gj`%Vt;FM*m1SuGQ6^>d@=c1fyCt8h zYBqh&r3N~SI{lAmQACJB+ALe5)GHJSedRg%A!oy00UysO^eTEBy>du9UX6>nk&8RDt$+ROY>>$plZIVt;b}W-L`#q7- zW7oP>HtUq>bxXIK$`FHPsD68DNdmbXUzQq54bGoaS3SF?YTE2-#~&NSP3)Ah*VePa!t=6o04JNCcf3%BK zg!M(iC@RPd8>3Vmtvf456-&)jg!8*J?i)%L4z@VF#E9Xt=88~zkXV?dP`6IihSwpZ z@ubd3NJOzKSIn7@72#ZQc8X;!<%;3mBxPViXBn0{W=g!p;|#2NW=)vD2#jM0se~jm zi%BG%V|GV)d(E7Nim;}|eaLLZ+Dn=e7|*CPDOZ7ws@Sn;w=`Ugp_U4D#_LG1$Lp*> z-&GA&Z1PRroDG-pk(GUw;ozHX?{EiI6vnJM^G#qwWKMjj)tHsYhE3_F8zz|rf!Uzp zo8~9)dYW==BX)~K0t5gtLY!`|s=qzZ9D>^m%GAuc@jAE`bcC0B)GjqBCrX!TU2o+U z#HTsMaaAmY;4PAjYNtW1buQ6Lws&GsOR$`jYY4C;#^M~5XO@ak&u<>uiz|Yf89_~L z)vW4!=T$Y_USRzCfHQdlA&N`dyIr{?QVKH`Mln`wUE>q|Vtr<8=9=MHQ|FE2f z<@Tz=qWDrYl);c{a`yf3gTrVg3VXail=&i#GrH4hR=8ZnxtSuNe!aEYW7=;GOH z)Li^ji%Jt8RpIdS4T{wz$z(^w;MoJL|S5e?zd0oQF3ll;I(%__*)S+#7kqtqEu zL*^>GxEqwS>KS&S78?>?yetPBY2V>0*E&R(;Bm9ftV8UBG9H#=^6HKX?%c%`QG}cn zB}ZhMb$qTWzA^2Ht;o8@BhGT;jGOxbW$7FbzNj<)WXu;VK<%od8G}V5!dKKp(^x!i zD4tWKsLfM!R=RP_S;=#|5=mIir#quyQ*9gvtE?6^phPD(>`=oJy&J8(oaca$oyqM{<#}h(X=Hnv&F$TAw`$eSoiQJ4 zsy3d~8Y;_lgHC}`fL#oW8Is@LrJX%7T%*@=o^*B*ySzK()iShBtjcNZl(CL>wg??! z!bCGHD=nQVxpgYSnP>%dX-2#Z&+%bH)ime3$dtCz!X5>(8EQXZf2c|>TjCtc_?Hr+ z)$*H|SNGcJN|mtz+(6m*t2^UO85^m&D9$m~(zu4TG*9MjI6a&0h%J?pn>lep!IB(r z$xSYKlF5gLA@>X&LKVvET!IBB178Y9bTW4;hJAOM;{+BF6mn+{JG?uKwvls=J1Z;* z8)c8wF9_z$uboz1ckkSp_tsZWpF3wpeK1G9ee(v1?gi_T-J2Xwp0hGIOeIs@tgJ_ySph%An}&D47}a=GHX?`ZL_YIgb+qjF4!JH|fMD|BR%F6Ru)XH^DiI zIH@Zup1=Ws0A9^m%;v`$xYjun}Ao*n+P-8xOr^9Q-oiA5GO%@xx9 zOr0TJmRvL|h7~sJVR!>2({)7491UfkT4~2OI*!V3<_L`0ihoK%InN#S<$RK>sRKKz zn1<#|EXCwS5G}W$GYci$@n3#Tn!_rVsx4T?g(A8ha+YH}Z0m*_F|^{%&TS%s#_6oC zdKM?+kZYNmIkSQ~vd!k2T|H+OW~DPdDdo=R!;M=KJGm(+vos3{90tq0Xa#MlR;&V~ z@OD=^(JBrTixim_Rfi{2rDdGUhV1m~TM&`Lkxi#h8GUsLoz@sifz$EqyHtslT-%JX zr8~)vrNgP8YJHpvA_wZ6W*7oXQy42uT_@?Iw2BpyG4E5u=2q?@tjGU}k}q%%E&=C5 zlX+VZVW$)e!a2T7A^L&0*d~hvGjqC%7kg$PXEo2H+(F=6IsS6bJbAyRkoW1GUCMRw ze{T-f?|)wVoaUMr$CFJM((^bMr`dS5-RW30X57T7oR!CGGaMgInlgE6TYGDpzNSn~ zwX|UD*6T3XolPMac(&YLN`a} zgeYZlc#>~)DRLLiPwKk26G_)8TALxw%46g?p`gR<{>e4uPV&}kAy>qb-@%<>bVICN z(zXqkjDP*?R5n-n`u!c9Z-Fa_6lSotbn6mFgLWt$V8{n~b}Jn^z%_ffO<^431!olD z6c95Nb-qU9GQCHkut)mdoo~7{AYM)s{YY*By^F$cAj(FsW#CNnHMufsejyulQcp?L zxi9TDFfJjOhaATA=u_NfD2xtqONsI=qAT3&<=b%e96M>k6+wePL27Sw*WWRBZfo?L z{DR>nI#R9N(s#sQUY?pXhw~d|#%>;71U=b})v)aBGOWb>`e}t@iE5F8H_zKZopLZ? zE}4Pgv&~b5o6_&5IufE?!n>B@LUIj^C_yT8)7H{K&_xG(4=$#Hch}o=uxMeY(O}^R zUL3IM4Z7ZghB_XcZEBE@b%f_%4neI?2Fr)Vad*Y#?7&hw7ik6m%}{k69Mpn_@ z3Cp;Pw-(4oe^U32v6!BUC7bV$#k5w76P!4;dDYCRnmw`Xdy?I=QNFWz$^zr98DXQG z>I>9LG8MzTkEPt{k$SP1w!*3IlH9r8%Pw;oV@*CO))jI=H?!t$?$KRa6AdP5Z{=xB zV=QrhEV-a?QfZ8t8($gzt7t6W>t44ss-AN1k9FK1>%KpharGGvhqJ6*OO!|4tQLgs zF1}G!+U}3V{aD->Xsa_Ehr}h&6ZhLzckKc<{6N=JbY}OEQ{9`NVw4X%u~#lA@N?tb zd3rohZ$tEv1>uaE`a6O`p0#}M+`4=H+XEgQG_W3X{9q*5vuo-bXx{pxv7oUr7I%|f zEW)=+O>qGx3&cNCpu{px60rrH=;F3mb9@;E*}&742smfW#!8bFC>|g79LOD&oQjcF zFh`)+v~elqB2sS-qYoJEfjDAawCAJ^(LodS}-7QQ%&WYa%4a?{Q;0I=X|V;U&|?hk-YRouc9V-GumM&U{2}Jm05EU+pxC7QRE&t{z?ca1bjn$OK9}#oTJ#P>N_DU^uH#KdErN&|f z9i(TFu)5ByOr$yB(G`qwdyvHBEbOI49axqsiycuPzJ%l_xs%s}rWk(a)+E}d@EFsd zM$4*b%MTpg-3UjJw2}b_YTlfD)~d8`u}jsLS`uZ3ck1d{lCyJ$SJ4{s?gdthx9TXz z&8rHyHK2XR1ism^-J@oyb_WiW#5r@Ff(*Lt#vO%gew7xzCDE`;+yB_iEx3qV61ZIK zRT2!#69#TfdH5xRkQh&wl1C9DxJw2POSLIP1jADFmd7p{x_yBp$qR= zZKk!oIX11kH4|${Rl+H)G1ekXd@whg;wSD5v z$=H2ux3#8HymHh2*OeJwy)wM7?cV8g#?;o-R+lIGBRH85LVarF*q=y|eCb z(R~F@zU)+I>XpjL4r)oHW7U`~@~BsaH*?q-bGM^oWoV?;8yjaXK{?xPo#iR!88)Nh z0c?z(R_A*9hgS9Gb{-mha(^(kIUGFjSP-pwX5iE|Y&6Aw*7IP1>we();enGU2VPwt ztz8jqcy{1;&%p6R1IO1596zDQn_+ZvQ`C2I;LNVUP1^>aIWe^5rNQkFAtYgL^QwXV zR|a3~AMAgUwxXQ}bBFgu`yPsptjX_PVJ_gPw=ci^6!r6~UMhbGoqu}e;Ev5htJdY8 zejvB$Xl~t+f&TURp0&AkPe!|X%UeF{$#m5FAT?-spnw11(+>=8JeWVTjUngu_T--2 z|BI7r2Tq+)V&DFuo;5>zULD%IerVe>`BjJVFFomAQU8Z09Iaj%tv&Jo&{QEt;f98l zE{lcZat}Ne?OT^SxFY+kH|pWe=qDd)5y2KOP-DE&0s7)E_;3Fn{{-XvO}){?&ue zy1A87SDh%OB0;&etD+;@O?(ip+~%XvhCUi_Ogi01n?MLSMMM^}3Jbh4UX^C32bDeT4Oq`75 zL2m2m!F?z4N0&o#V@ubFTMv=ZWk*NW<~F@l%Fek(%B@{9xZ*(c=&6DJeKw-}nH}(j zsp7y`TFQ3Kx}g>822UM#?;vz9M?wNbLqH8O-%<%%5If&V>WV*XMRVhb$OPU5l>J!0~-j z+HMa~YW~Qc!6RE(;N0##LxR35l8|TnqTanq9qd0a*nc=WeQ0of zUw}%BR=;A6Myron&jY7KB9)C+?}++O7_+dIiLKW6MNch{c5Nvih~%E}IPq^ZPIC{W z2cPeco_M72MA~Lqq2OSEC#;DMv=?XX?b&a`>&9@@4q>fMS#ptud) z8Y#ugJ8-u?qi03yjv@J@=NW~3`$jp$$x>Cr6II*I_P{o8=cH7gkMeA~6hj21Zk*sr zlvio@^(C)I&Jeq>?CG>JO|F;=i(iP8X+_qH)i$A0aak>{lid0Puujx_)XQzLH{T%A z=Ga_JgRsB2DSGvlp`IQ;q*9^dN1}(H8J@TES+qG8mCa!2sa?^&&9EPA>_%{8&CsrG zraBa-piG&U9~tQHA2_usf2xn2$JQ#^<}|sCGiT$tm(tOS7l*bS_TsbC5lCv*DGcL6 zr@c2s56emm&d!VWJ)eJRf1ztrOOE1E->dn)UAb3Qv!(j%{HasyL`Bw@y4}e{4vw?U zLyNuf;84$&sP`DlKeT=0wW>JC9?XWff?dWI@VV#U(%f@X z{FJL?qUo46@N()RVPkpB+&D%nnuvO~p*;tVKjL00M7vg@@k`6Z`0}SuWAX&WFCI_l zw(Qn=zPy&H(X$z{8lBr5F&7KA>>+Gfvs8@!MNYDk)Ezjr5*1KPcj{oBY}GS+@-J_O zcUTK8@cM)KbsMY^&DB^r>Sf2?ncKBHf9g2|S*b{Qv|&Aq$HBQ3^rd+~C>(rb-mL`XfeNFU7ib+1sutOUyyX^YHLumAR;U%;whN1qg z`6K&`SlIg*Bm*b6=lZu>N^bd!;(`K?Gf}tN`6FkBwj8m3O{e-!y}jpDJ@#mT85OOB zr({^UH_)cTSjyb7W6_4ydZ#P_a|NVboNc5Ltlq#8s#GW>6Rsaxevl&LV1oQBE3kP7 zj>D~oBqpXNX~;c&wiqp67Y_9A)uQz6x3*y_GXO0*F6tFuq9;xBm*+X@lZ~-@gGp|v z2Y4_|?vW?GG8uY$bF^Z0baWSHidWBiphL%OR=Fp3nu`%D$E4a!(`fZJGX||*wBnWM z@CF-BfT@5LV+s)x4?VS23LByJmbe~4BQMd4gLEg`Wyed}st@n8DE1*F_ZxQUH8cl; z!8NN3R)U>8oyk0%SJA`Fg#7wrQSW993C)HzQ-5Z~8t;jZy|LGGG8jB@X7Ht_f`OA; zp~7oxRnuSNq#mB!FmPf=QRNOCe^^YlX|<7i-$R2NR+_Fi{z8MW_FP>>hqvS(eozCb z8TRbiGkLD}F~r=jA}6z5TU6AVwjyIQq!1JQ_YadAM1-wKcpVm4G~%QP|g}GC9+B|tWBdV)!Ej5&vQpe@{C=gV=tH}zzzA+ z2M5=$5+}hfy@#xPwDwi?kN6ZS`u?r!;&GzXn`Ou{EE+a}i*_3G$A3^SsXN=}vWx8Wlsryk16;55HLeZ(mF~&<;&jtuFqKDDur!<1Y zTcQ(>tA^2`d=Il>Ym7%;RS7SvH%<<*UEO2op-nrZ<<55VdG6IC`$Y7hGYNcZ;f=F3 zUe;70!;ae`{jM$UarAE~QTmlr8(fCt23Zp|~% z^P5WNFF(gp77nXXtBgprE=E$&mRu*A9b2R0%cJLe%Bqz=oVM!c$TUihn)w>_M%J=@ zY;a@$&@N~C*i11Zqt&~j1CK;&H=nJyeVG-n4D@gI^$$K0ohajxsP}0Zn%f^Tc{e80 z#)CfuPBk8JD$BPuT6s-P+nDo1n6JTDI=_5vZd;#x3B&l(Jvk_vg-ElhoZ|M#Mpi~G zdoW#=Fq}`zGKR5BS-O8L?fpo~(02GAvQl-D-?x4607lrWn24Sz8?e{p5iO|}%Q#zp z%SJWqv9y&h`qX6m6ePUtskHB|u;6eH3JcyWD?OYza;lYO7GFpka|MH(r#Gy$*U?^s z7PX%p3q~k>J1$~Cm5yuXsKJjG9qok)VI}fH{sZ#1P-pOyoAak1W!9V%22QLWbVj{A zNb5G``__dG@r9vRgKoQ!4m6L(hIRQpoCXg5;^Ypiiv0i=+c|xBJq#P_oxKBKn2kO- z_dGhpF%iAGsW`x4L$SV@CmWN02Q4M0htTC-mO^e*=yE41lik^-!0gG_Tj<TsW@EJDiL#ToJK4+Z)!Ca%%3SXTyg~~C{O@egLGFb;7;b*Ybku>KZ182tHhGuq z>F4Zrot5_KL^lQ_U4Cv^_-29?jAnC^1O_9$m2B!qjfXib<=x33x8(pfmT3zej0bld z$I5%nLeAKQ6J6)dJ!mxaCq7JZcW+SIcyo^(hGd*><%rySbm++!nSyuLnSJJ(avWpR zEyaxzrMQV?DQ>eb#RpD2GPvd$#dRd?muFD=-Z_lisl(2?TSj2 zmaN0U=bpyD6;M|utUFQ+Z8{U3czT?fj!s*bJ9djUsH5U)xp_*POXT9FzRJ~ASy|Ub ze(mxIBYfowiKsL9O#5)z5k2Xg24<0aM~PD->Y_sm8Ri|Kg zlMdH?ajv+cZMy2b=Oju`Qf3Ez|Ik1c;3H+ZbR8FprXWk}oK<0N!%i%D%9Xz26D{I{<49l?dV)+oxS;#zRXSL+U z&COd;5m=85wAj*r@|4O4@}EpFhKwW(J-c=A#DT$$FXv8du#HGud9qipm)TARPOWD> z5JCRx2{TF5aFHof&7WmR}3q`3E%97lAgAfbGu*V1Lu0FDPMidE8Jo0U9@qUm}lw~_G3QuJleiIbGj$e z>?_K1ucYmp+%lf>#;rRyvTXhV3y-I@Yz4ni(W)BbxvTsl!|n=8BOR8ve^vCrE9T-D zy#yT27BPCB`BNd$IkFFLVS^c&hXog{SYDP|xLGuc+Hr&3z&jN4y`@V-HJMuD37zGJy{Pr>uU9#NONv}1!=0EOq%XXQF)=eWTWeP~Q1 z>RNZWG1uzxjq2aIncPaT%~+Fm$Vb3NDEw06C0Vk4+n!OE1fr12E9#Mnk@NnSJmzNq z=KG!=>@SljYoOdYP};MHnF>XRfUn`43}v>IvtRI>l{(BHdl8?aSuw?JWSHm4N?2aB z?@9yNhH>kK+8WBjiB;3Tw$8 zONWhSODs@hzJ$BrVEY~F>F1P@TmKkmTM3tYKr>1?ob34nE4j2BrKp*k?%8zN-Ltbn zb>UiOgvoio;c4%q!u*AS(ZdB}McrZ->ph~JsCqVY{1I#1uh8KQW)C>3SO;cgmS?aj z4V*Y)HPpOw^UHI6bfsFi*Ew?guR4VP-z-r#V|U>4igec&RW08A89B`jWeRZcOn<)b z(P3jZ3BY5fOM<}1?7vMI`HtFN(-a-6IJY<>MC%_hws6yPFN;h^c4;Oo{yYIR^my(%m^;GY0-)I!e_scHnGzS zY5N-SKH7MO^Q$wwd98cS7t*%TE%0|a!*6`_P}*AHU2j(ifd)_Z=&7_N@>tqFMn0D= zaxwk3_!cyV;&ED}yqGqJKi%5{YK!_;)BYa5{N1!4EgQc28|~$^l?eRJ7NyE9 zovCazBa(>f{o3Izl?!aAq1T|%&hXZaeJ}907KOY5MR7;iHcUItsP-?ZO`O?rI8oAv zI;OeN-%{HWv()}Y1Er!@Uy3cr?OYwpZP~8{+44#ywoYRu0>dk6dzWIjJsj%nLew8q zcOQ?=EH?|Fa1$}Ce6(^Mm#M!?t)ug|HB=h?w>8#or>Ms4Q=DP>y_b;sU?T*aBojR zF#bZGRI||B`3$>bMmD)8W<2?0_*k~ufhe75yKcGUYQH}gCez(Y55Y6Bz6tyzVF(f(%! zgZgyDRMCx3+A5TddRU9pw^O&ZQfzl*A?)vAMGtHg7#Rafz69!bGCiEs5ZU-#~F|^D%^{V;Qs)wTt)2w literal 0 HcmV?d00001 diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 000000000..a702cf402 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,7557 @@ +# grub 软件包的简体中文翻译。 +# Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Zhengyu Ji , 2009. +# Xin Ye , 2009. +# Eleanor Chen , 2010. +# Aron Xu , 2009, 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 1.97+20110101\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2011-12-04 21:02+0800\n" +"Last-Translator: Aron Xu \n" +"Language-Team: Chinese (simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +#, fuzzy +msgid "unsupported serial port speed" +msgstr "设置串行端口速度。" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +#, fuzzy +msgid "unsupported serial port parity" +msgstr "设置串行端口奇偶校验。" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +#, fuzzy +msgid "unsupported serial port stop bits number" +msgstr "设置串行端口停止位。" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +#, fuzzy +msgid "unsupported serial port word length" +msgstr "设置串行端口字长。" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "不载入指定的主机表(多个表用逗号分隔)。" + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "只载入指定的主机表(多个表用逗号分隔)。" + +#: grub-core/commands/acpi.c:46 +#, fuzzy +msgid "Export version 1 tables to the OS." +msgstr "导出变量。" + +#: grub-core/commands/acpi.c:47 +#, fuzzy +msgid "Export version 2 and version 3 tables to the OS." +msgstr "显示 v2 和 v3 表。" + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "设置 RSDP,XSDT 和 RSDT 中的 OEMID。" + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "设置 RSDP,XSDT 和 RSDT 中的 OEMTABLE ID。" + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "设置 RSDP,XSDT 和 RSDT 中的 OEMTABLE 版本信息。" + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "设置 RSDP,XSDT 和 RSDT 中的制造商信息。" + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "设置 RSDP,XSDT 和 RSDT 中的制造商版本信息。" + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +#, fuzzy +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"不更新 EBDA。有些时候能解决引导失败和挂起的问题。但因为 BIOS 的原因,对不从 " +"GRUB 接收 RSDP 的操作系统无效。" + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, fuzzy, c-format +msgid "premature end of file %s" +msgstr "无法打开文件 %s" + +#: grub-core/commands/acpi.c:779 +#, fuzzy +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "[-1|-2] [--exclude=表1,表2|--load-on=表1,表2] 文件1 [文件2] [...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "载入 ACPI 主机表和用户指定的表。" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "错误:%s。\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +#, fuzzy +msgid "out of memory" +msgstr "转储内存。" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, fuzzy, c-format +msgid "cannot read `%s': %s" +msgstr "无法正确读取“%s”" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "" + +#: grub-core/commands/arc/lsdev.c:51 +#, fuzzy +msgid "List devices." +msgstr "列出 PCI 设备。" + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +#, fuzzy +msgid "filename expected" +msgstr "排除文件名(不建议使用)" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "文件" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "显示块列表。" + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "引导操作系统。" + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:56 +#, fuzzy +msgid "Get disk cache info." +msgstr "获取设备信息。" + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "接受 DOS 风格的 CR/NL 行结尾。" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "显示文件内容。" + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "文件1 文件2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "比较两个文件。" + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "载入另外的配置文件。" + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "载入另外的配置文件(不改变环境)。" + +#: grub-core/commands/configfile.c:75 +#, fuzzy +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "载入另外的配置文件(不改变环境,仅载入菜单项)。" + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "载入另外的配置文件(不改变环境,仅载入菜单项)。" + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[年-]月-日] [时:分[:秒]]" + +#: grub-core/commands/date.c:142 +#, fuzzy +msgid "Display/set current datetime." +msgstr "显示/设置时间的命令" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "末尾不输出额外空行。" + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "启用反斜杠转义" + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] 字符串" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "显示文本" + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "修正显示问题" + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "载入 BIOS 转储。" + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "字符串" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "载入 multiboot 内核。" + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "载入 multiboot 2 内核。" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[选项] 磁盘" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +#, fuzzy +msgid "no such partition" +msgstr "未找到 DOS 类型分区" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "设备 [分区[+/-[类型]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"重写指定 GPT 设备的混合 MBR,指定的分区会成为混合 MBR 的一部分(不超过三个)。" +"类型指 MBR 类型,+ 代表该分区是活动分区(只能有一个活动分区)。" + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "关机(在某些计算机上无效)。" + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "指定要使用的哈希值。" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "哈希值" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "哈希列表文件所在目录。" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIR" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "第一次出现错误时不停止。" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "检查校验和前解压文件。" + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "" + +#: grub-core/commands/hashsum.c:284 +#, fuzzy +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c 文件 [-p 前缀]] [文件1 [文件2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "计算或校验哈希校验和。" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c 文件 [-p 前缀]] [文件1 [文件2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"设置高级电源管理模式\n" +"(1=最低,...,254=最高,255=关闭)。" + +#: grub-core/commands/hdparm.c:36 +#, fuzzy +msgid "Display power mode." +msgstr "检查电源模式。" + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "禁止更改 ATA 安全设置直到此设置被重置。" + +#: grub-core/commands/hdparm.c:39 +#, fuzzy +msgid "Display SMART health status." +msgstr "检查 SMART 健康状态。" + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"设置硬盘声音管理模式\n" +"(0=关闭,128=静音,...,254=高速)。" + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"设置等待时间\n" +"(0=关闭,1=5秒,2=10秒,...,240=20分,241=30分,...)。" + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "设置驱动器为等待模式。" + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "设置驱动器为休眠模式。" + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "显示硬盘识别信息和设置。" + +#: grub-core/commands/hdparm.c:50 +#, fuzzy +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "转储 ATA IDENTIFY 扇区内容。" + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "禁用/启用 SMART (0/1)。" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "安静模式。" + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[选项] 磁盘" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "获取或设定 ATA 磁盘参数。" + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "用法:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[模式 ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "显示帮助消息。" + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "跳过文件头部偏移字节。" + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "读取指定长度(字节)。" + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[选项] 文件或设备" + +#: grub-core/commands/hexdump.c:126 +#, fuzzy +msgid "Show raw contents of a file or memory." +msgstr "显示文件或内存内容。" + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +#, fuzzy +msgid "List coreboot tables." +msgstr "列出当前变量。" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +#, fuzzy +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "检查长模式标志(默认)。" + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "检查 CPU 特性。" + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "显示当前映射。" + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "重置所有映射为默认值。" + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "同时进行直接和保留映射。" + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grub设备 系统磁盘" + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "管理 BIOS 设备映射。" + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "不使用 APM 关闭计算机。" + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "优先使用 APM 关闭计算机。" + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "显示 APM 信息。" + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "无效命令%s。\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:190 +#, fuzzy +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "文件 | " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "播放测试声音。" + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:40 +#, fuzzy +msgid "set capslock mode" +msgstr "插入一个模块。" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:42 +#, fuzzy +msgid "set insert mode" +msgstr "插入一个模块。" + +#: grub-core/commands/i386/pc/sendkey.c:43 +#, fuzzy +msgid "set pause mode" +msgstr "插入一个模块。" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:45 +#, fuzzy +msgid "Return to IEEE1275 prompt." +msgstr "返回 Open Firmware 界面。" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "将读取的值存入变量 VARNAME。" + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "端口" + +#: grub-core/commands/iorw.c:123 +#, fuzzy +msgid "Read 8-bit value from PORT." +msgstr "从指定端口读取字节。" + +#: grub-core/commands/iorw.c:127 +#, fuzzy +msgid "Read 16-bit value from PORT." +msgstr "从指定端口读取字节。" + +#: grub-core/commands/iorw.c:131 +#, fuzzy +msgid "Read 32-bit value from PORT." +msgstr "从指定端口读取字节。" + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "端口 值 [掩码]" + +#: grub-core/commands/iorw.c:136 +#, fuzzy +msgid "Write 8-bit VALUE to PORT." +msgstr "向指定端口写入字节类型值。" + +#: grub-core/commands/iorw.c:140 +#, fuzzy +msgid "Write 16-bit VALUE to PORT." +msgstr "向指定端口写入字节类型值。" + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "地址 值 [掩码]" + +#: grub-core/commands/iorw.c:144 +#, fuzzy +msgid "Write 32-bit VALUE to PORT." +msgstr "向指定端口写入字节类型值。" + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "载入一个键盘布局。" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "检查 Shift 键。" + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "检查 Ctrl 键。" + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "检查 Alt 键。" + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "检查修饰键状态。" + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, fuzzy, c-format +msgid "can't find command `%s'" +msgstr "无法找到命令 %s" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "输入口令:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "在相同环境下解析旧版配置" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "在新环境下解析旧版配置" + +#: grub-core/commands/legacycfg.c:847 +#, fuzzy +msgid "Parse legacy config in same context taking only menu entries" +msgstr "在相同环境下解析旧版配置" + +#: grub-core/commands/legacycfg.c:852 +#, fuzzy +msgid "Parse legacy config in new context taking only menu entries" +msgstr "在新环境下解析旧版配置" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=类型] 文件 [参数 ...]" + +#: grub-core/commands/legacycfg.c:857 +#, fuzzy +msgid "Simulate grub-legacy `kernel' command" +msgstr "模拟 grub-legacy 内核命令" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "文件 [参数 ...]" + +#: grub-core/commands/legacycfg.c:862 +#, fuzzy +msgid "Simulate grub-legacy `initrd' command" +msgstr "模拟 grub-legacy initrd 命令" + +#: grub-core/commands/legacycfg.c:866 +#, fuzzy +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "模拟 grub-legacy 的 modulenounzip 命令" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] 口令 [文件]" + +#: grub-core/commands/legacycfg.c:871 +#, fuzzy +msgid "Simulate grub-legacy `password' command" +msgstr "模拟 grub-legacy 口令命令" + +#: grub-core/commands/legacycfg.c:876 +#, fuzzy +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "在菜单项模式下模拟 grub-legacy 口令命令" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "指定文件名。" + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f 文件] 变量名 [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "载入环境变量文件。" + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f 文件]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "显示环境变量文件内容。" + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f 文件] 变量名 [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "保存变量到文件。" + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "列出详细信息。" + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "使用易读的格式显示文件大小。" + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "列出全部文件。" + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [文件 ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "列出设备和文件。" + +#: grub-core/commands/lsacpi.c:255 +#, fuzzy +msgid "Show version 1 tables only." +msgstr "仅显示 v1 表。" + +#: grub-core/commands/lsacpi.c:256 +#, fuzzy +msgid "Show version 2 and version 3 tables only." +msgstr "仅显示 v2 和 v3 表。" + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "显示 ACPI 信息。" + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "列出默认的内存映射。" + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "列出 PCI 设备。" + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "地址" + +#: grub-core/commands/memrw.c:125 +#, fuzzy +msgid "Read 8-bit value from ADDR." +msgstr "从指定地址读取字节" + +#: grub-core/commands/memrw.c:129 +#, fuzzy +msgid "Read 16-bit value from ADDR." +msgstr "从指定地址读取字节" + +#: grub-core/commands/memrw.c:133 +#, fuzzy +msgid "Read 32-bit value from ADDR." +msgstr "从指定地址读取字节" + +#: grub-core/commands/memrw.c:138 +#, fuzzy +msgid "Write 8-bit VALUE to ADDR." +msgstr "向指定地址写入 byte 类型值。" + +#: grub-core/commands/memrw.c:142 +#, fuzzy +msgid "Write 16-bit VALUE to ADDR." +msgstr "向指定地址写入 byte 类型值。" + +#: grub-core/commands/memrw.c:146 +#, fuzzy +msgid "Write 32-bit VALUE to ADDR." +msgstr "向指定地址写入 byte 类型值。" + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "菜单项类型。" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "字符串" + +#: grub-core/commands/menuentry.c:33 +#, fuzzy +msgid "List of users allowed to boot this entry." +msgstr "允许用户引导此项。" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "" + +#: grub-core/commands/menuentry.c:36 +#, fuzzy +msgid "Keyboard key to quickly boot this entry." +msgstr "此项目的键盘按键。" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +#, fuzzy +msgid "Menu entry identifier." +msgstr "菜单项类型。" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "块" + +#: grub-core/commands/menuentry.c:323 +#, fuzzy +msgid "Define a menu entry." +msgstr "定义一个菜单项。" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "定义一个子菜单。" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "显示此消息。" + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "" + +#: grub-core/commands/minicmd.c:201 +#, fuzzy +msgid "Show memory contents." +msgstr "显示文件内容。" + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "模块" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "删除模块。" + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "显示已加载的模块。" + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "退出 GRUB。" + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, fuzzy, c-format +msgid "Total flash size: %d B.\n" +msgstr "翻译表总大小:%d\n" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, fuzzy, c-format +msgid "Part no: %s.\n" +msgstr "错误:%s。\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +#, fuzzy +msgid "Print Memory information." +msgstr "输出版本信息并退出" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, fuzzy, c-format +msgid "unknown argument `%s'" +msgstr "未知的额外参数“%s”。\n" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "分区 命令" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "用户 口令" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "设置用户口令(纯文本)(不推荐且不安全)。" + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "用户 PBKDF2_PASSWORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "设置用户命令(PBKDF2)。" + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "设置用于返回值的变量。" + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "指定驱动。" + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "指定分区表类型。" + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "指定文件系统类型" + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "指定文件系统 UUID。" + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "指定文件系统卷标。" + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "设备" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "获取设备信息。" + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[环境变量]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "将用户输入值保存到变量。" + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "重新启动计算机。" + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[数字:]变量名" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "正则表达式 字符串" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "测试正则表达式是否匹配相应的字符串。" + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "名称 [变量] [提示]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "" +"搜索含有指定文件的设备。如果指定了变量,找到的第一个设备会被保存到变量中。" + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "按卷标搜索。如果指定了变量,找到的第一个设备会被保存到变量中。" + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "按 UUID 搜索。如果指定了变量,找到的第一个设备会被保存到变量中。" + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "按文件搜索设备。" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "按文件系统卷标搜索设备。" + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "按文件系统 UUID 搜索设备。" + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "为找到的第一个设备设置变量。" + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "不检测任何软盘驱动器。" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "首先尝试设备 HINT,如果 HINT 以逗号结尾则同时尝试其子分区" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "线索" + +#: grub-core/commands/search_wrap.c:47 +#, fuzzy +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "首先尝试设备 HINT,如果 HINT 以逗号结尾则同时尝试其子分区" + +#: grub-core/commands/search_wrap.c:51 +#, fuzzy +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "首先尝试设备 HINT,如果 HINT 以逗号结尾则同时尝试其子分区" + +#: grub-core/commands/search_wrap.c:55 +#, fuzzy +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "首先尝试设备 HINT,如果 HINT 以逗号结尾则同时尝试其子分区" + +#: grub-core/commands/search_wrap.c:59 +#, fuzzy +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "首先尝试设备 HINT,如果 HINT 以逗号结尾则同时尝试其子分区" + +#: grub-core/commands/search_wrap.c:63 +#, fuzzy +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "首先尝试设备 HINT,如果 HINT 以逗号结尾则同时尝试其子分区" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint 线索 [--hint 线索] ...] 名称" + +#: grub-core/commands/search_wrap.c:209 +#, fuzzy +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"按文件、卷标或 UUID 搜索。如果指定了变量(--set),找到的第一个设备会被保存到变" +"量中。如果没有指定变量名则保存到“root”。" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s 位置] [-d 设备] [-v 变量] [寄存器][=值[:掩码]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "操作 PCI 设备。" + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "显示倒计时。" + +#: grub-core/commands/sleep.c:33 +#, fuzzy +msgid "Allow to interrupt with ESC." +msgstr "可用 ESC 键中断。" + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "秒数" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "等待指定时间(秒)。" + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +#, fuzzy +msgid "Execute syslinux config in same context" +msgstr "在相同环境下解析旧版配置" + +#: grub-core/commands/syslinuxcfg.c:195 +#, fuzzy +msgid "Execute syslinux config in new context" +msgstr "在新环境下解析旧版配置" + +#: grub-core/commands/syslinuxcfg.c:201 +#, fuzzy +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "载入另外的配置文件(不改变环境,仅载入菜单项)。" + +#: grub-core/commands/syslinuxcfg.c:207 +#, fuzzy +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "载入另外的配置文件(不改变环境,仅载入菜单项)。" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "没有指定终端。" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "活动输入终端:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "可用输入终端:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "活动输出终端:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "可用输入终端:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [终端1] [终端2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "列出或选择一个输入终端。" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "列出或选择一个输出终端。" + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "表达式 ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "执行该表达式。" + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "表达式" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "以多种方式载入同一个文件。" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +#, fuzzy +msgid "no command is specified" +msgstr "没有指定命令。\n" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "未进行操作,成功。" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "未进行操作,失败。" + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "测试 USB 支持。" + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, fuzzy, c-format +msgid "invalid video mode specification `%s'" +msgstr "无效的根设备“%s”" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr "" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "列出可用显示模式。如果已指定分辨率,则只显示匹配的模式。" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "在 WxH 模似下测试显示子系统。" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "测试显示子系统。" + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +#, fuzzy +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "GRUBUUID [变量]" + +#: grub-core/commands/xnu_uuid.c:111 +#, fuzzy +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "将 64 位的 UUID 转换成 XNU 的格式。" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, fuzzy, c-format +msgid "cannot open `%s': %s" +msgstr "无法打开“%s”" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, fuzzy, c-format +msgid "cannot seek `%s': %s" +msgstr "无法打开“%s”" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1145 +#, fuzzy +msgid "Mount a crypto device." +msgstr "设置根设备。" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "无法打开“%s”" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, fuzzy, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "为 %2$s%3$s%4$s 使用 %1$s (%5$s)\n" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, fuzzy, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "正在尝试从 GRUB 读取核心镜像“%s”" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +#, fuzzy +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "此 DOS 分区标签没有 MBR 前间隔,无法进行嵌入!" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +#, fuzzy +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "此 GPT 分区标签没有 BIOS 引导分区,无法进行嵌入!" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +#, fuzzy +msgid "Delete the specified loopback drive." +msgstr "删除回环设备项。" + +#: grub-core/disk/loopback.c:236 +#, fuzzy +msgid "[-d] DEVICENAME FILE." +msgstr "[-d|-p] 设备名 文件名。" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +#, fuzzy +msgid "Make a virtual drive from a file." +msgstr "将一个文件模拟成设备。" + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "载入并初始化 EFI 模拟器。" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "完成载入 EFI 模拟器。" + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "卸载 EFI 模拟器。" + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "" + +#: grub-core/font/font_cmd.c:52 +#, fuzzy +msgid "Loaded fonts:" +msgstr "列出已加载的字库。" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "文件..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "指定一个或多个要加载的字库。" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "列出已加载的字库。" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +#, fuzzy +msgid "not a directory" +msgstr "目录总字节数:%d\n" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +#, fuzzy +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "您的 core.img 过大,无法装入嵌入区域。" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, fuzzy, c-format +msgid "invalid file name `%s'" +msgstr "无效的根设备“%s”" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:304 +#, fuzzy +msgid "MAC verification failed" +msgstr "覆盖修改日期" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +#, fuzzy +msgid "Enter ZFS password: " +msgstr "输入口令:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +#, fuzzy +msgid "[-h|-p|-r] [FILE]" +msgstr "[-l|-h|-a] [文件 ...]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:63 +#, fuzzy +msgid "Virtual device is offline" +msgstr "列出设备或文件。" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:73 +#, fuzzy +msgid "Virtual device is online" +msgstr "列出设备或文件。" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, fuzzy, c-format +msgid "Devid: %s\n" +msgstr "设备 %s:" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "使用当前设置翻译字符串。" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"按回车引导选定的操作系统,按 e 编辑引导命令,按 c 进入命令行,按 ESC 返回上一" +"级菜单。\n" + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "按回车引导选定的操作系统,按 e 编辑引导命令,按 c 进入命令行。\n" + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "高亮显示的启动项将在 %d 秒后自动执行。" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "剩余 %d 秒。" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d 秒" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr "" + +#: grub-core/gnulib/argp-help.c:1662 +#, fuzzy +msgid " [OPTION...]" +msgstr "[选项...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "请尝试运行“%s --help”以获得更多信息。\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr "显示此帮助并退出。" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +#, fuzzy +msgid "NAME" +msgstr "VARNAME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: grub-core/gnulib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "执行该表达式。" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "" + +#: grub-core/hello/hello.c:36 +#, fuzzy +msgid "Hello World" +msgstr "显示“Hello World”。" + +#: grub-core/hello/hello.c:45 +#, fuzzy +msgid "Say `Hello World'." +msgstr "显示“Hello World”。" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[环境变量=值]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "设置一个环境变量。" + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "环境变量" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "删除一个环境变量。" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[参数]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "列出设备或文件。" + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "插入一个模块。" + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "设备计数超过限制" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, fuzzy, c-format +msgid "cannot write to `%s': %s" +msgstr "无法打开“%s”" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, fuzzy, c-format +msgid "can't open `%s': %s" +msgstr "无法打开“%s”" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "设备名称" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "设置根设备。" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, fuzzy, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "使用指定文件作为设备表 [默认=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, fuzzy, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "使用 DIR 目录内的 GRUB 文件 [默认=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +#, fuzzy +msgid "print verbose messages." +msgstr "显示完整信息。" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, fuzzy, c-format +msgid "Unknown extra argument `%s'." +msgstr "未知的额外参数“%s”。\n" + +#: grub-core/kern/emu/main.c:185 +#, fuzzy +msgid "GRUB emulator." +msgstr "卸载 EFI 模拟器。" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "解析命令行参数出错\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, fuzzy, c-format +msgid "%s: warning:" +msgstr "%s:警告:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s:信息:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s:错误:" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "“%s”的尺寸太大" + +#: grub-core/kern/fs.c:120 +#, fuzzy +msgid "unknown filesystem" +msgstr "未知文件系统" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "未知命令 %s。\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "显示此帮助并退出。" + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "显示此命令的用法并退出。" + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +#, fuzzy +msgid "Print backtrace." +msgstr "显示块列表。" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, fuzzy, c-format +msgid "invalid color specification `%s'" +msgstr "无效的根设备“%s”" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "无效的设备“%s”。\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "载入 Linux。" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "载入 initrd。" + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "载入 XNU 内核镜像。" + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "载入 NetBSD 内核模块。" + +#: grub-core/loader/efi/appleloader.c:231 +#, fuzzy +msgid "[OPTS]" +msgstr "[选项...]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +#, fuzzy +msgid "Boot BIOS-based system." +msgstr "引导老版本系统。" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "载入其他引导程序。" + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "在所有控制台显示输出。" + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "使用串行终端。" + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "从指定文件重新启动。" + +#: grub-core/loader/i386/bsd.c:105 +#, fuzzy +msgid "Use CD-ROM as root." +msgstr "使用 CDROM 作为根。" + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "使用用户配置路径。" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "启动后进入 KDB。" + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "使用 GDB 远程调试工具替代 DDB。" + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "禁用所有引导输出。" + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "每输出一行后暂停(按任意键继续)。" + +#: grub-core/loader/i386/bsd.c:113 +#, fuzzy +msgid "Use compiled-in root device." +msgstr "使用内置根设备" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "以单用户模式启动" + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "启动时显示完整信息。" + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "直接关机。" + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "更改此前配置的设备。" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "禁用 SMP。" + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "禁用 ACPI。" + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "不显示引导对话消息。" + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "显示调试信息。" + +#: grub-core/loader/i386/bsd.c:167 +#, fuzzy +msgid "Suppress normal output (warnings remain)." +msgstr "不显示普通输出(显示警告)。" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +#, fuzzy +msgid "Booting in blind mode" +msgstr "以单用户模式启动" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "载入 FreeBSD 内核。" + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "载入 OpenBSD 内核。" + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "载入 NetBSD 内核。" + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "载入 FreeBSD 环境。" + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "载入 FreeBSD 内核模块。" + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "载入 NetBSD 内核模块。" + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "载入 NetBSD 内核模块(ELF)。" + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "载入 FreeBSD 内核模块(ELF)。" + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +#, fuzzy +msgid "Load kOpenBSD ramdisk." +msgstr "载入 OpenBSD 内核。" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +#, fuzzy +msgid "Load another coreboot payload" +msgstr "载入其他引导程序。" + +#: grub-core/loader/i386/linux.c:900 +#, fuzzy +msgid "Legacy `ask' parameter no longer supported." +msgstr "-i 选项已不再被支持。\n" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "“%s”的尺寸太大" + +#: grub-core/loader/i386/pc/freedos.c:183 +#, fuzzy +msgid "Load FreeDOS kernel.sys." +msgstr "载入 FreeBSD 内核模块。" + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "载入 NTLDR 或 BootMGR。" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +#, fuzzy +msgid "Load Plan9 kernel." +msgstr "载入 multiboot 内核。" + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +#, fuzzy +msgid "Load a PXE image." +msgstr "载入 XNU 内核镜像。" + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "删除模块。" + +#: grub-core/loader/i386/xnu.c:1003 +#, fuzzy +msgid "Press any key to launch xnu" +msgstr "按任意键继续..." + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +#, fuzzy +msgid "Load `device-properties' dump." +msgstr "载入设备特性转储。" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:627 +#, fuzzy +msgid "FILE [ARGS...]" +msgstr "文件 [参数 ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "载入 multiboot 2 内核。" + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "载入 multiboot 2 模块。" + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "载入 multiboot 内核。" + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "载入 multiboot 模块。" + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +#, fuzzy +msgid "stretch|normal" +msgstr "[-m (stretch|normal)] 文件" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "载入 XNU 内核镜像。" + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "载入 64 位 XNU 镜像。" + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "载入 XNU 扩展包。" + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "载入 XNU 扩展。" + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "目录 [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "载入 XNU 扩展目录。" + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +#, fuzzy +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "载入 XNU ramdisk (显示为 md0)。" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "载入引导画面。" + +#: grub-core/loader/xnu.c:1501 +#, fuzzy +msgid "Load an image of hibernated XNU." +msgstr "载入引导画面。" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "地址1,掩码1[,地址2,掩码2[,...]]" + +#: grub-core/mmap/mmap.c:539 +msgid "Declare memory regions as faulty (badram)." +msgstr "" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "从[K|M|G] 到[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "删除指定范围内的全部内存区域。" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +#, fuzzy +msgid "no DHCP options found" +msgstr "未找到 DOS 类型分区" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, fuzzy, c-format +msgid "no DHCP option %d found" +msgstr "未找到 DOS 类型分区" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "" + +#: grub-core/net/dns.c:768 +#, fuzzy +msgid "List DNS servers" +msgstr "列出 PCI 设备。" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, fuzzy, c-format +msgid "time out opening `%s'" +msgstr "无法打开“%s”" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1298 +#, fuzzy +msgid "no server is specified" +msgstr "没有指定设备。\n" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +#, fuzzy +msgid "SHORTNAME" +msgstr "VARNAME" + +#: grub-core/net/net.c:1771 +#, fuzzy +msgid "Delete a network address." +msgstr "设置串行端口地址。" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "输入用户名:" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[用户列表]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "可用命令:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "可用设备:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "可用文件:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "可用分区:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "可用参数:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "可用事物:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "警告:%s 中有语法错误(缺少斜杠)\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "警告:无效的前景色 `%s'\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "警告:无效的背景色 `%s'\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "环境变量 [环境变量] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "导出变量。" + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "" + +#: grub-core/normal/dyncmd.c:187 +#, fuzzy +msgid "module isn't loaded" +msgstr "未加载" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB %s 版" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "任何时候按下 ESC 均可退出。" + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"支持最小化的类 Bash 行编辑。对于第一个单词 Tab 列出可用的命令名补全;对于其他" +"位置 Tab 列出可能的设备或文件。%s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "清屏。" + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "进入普通模式。" + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "退出普通模式。" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "按任意键继续..." + +#: grub-core/normal/menu.c:814 +#, fuzzy, c-format +msgid "Booting `%s'" +msgstr "正在引导 %s" + +#: grub-core/normal/menu.c:826 +#, fuzzy, c-format +msgid "Falling back to `%s'" +msgstr "回滚至 %s" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "引导默认启动项和会滚启动想均失败。\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "正在按照命令列表进行引导" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"支持最小化的类 Emacs 屏幕编辑。Tab 列出可补全项,Ctrl-x 或 F10 进行引导," +"Ctrl-c 或 F2 进入命令行,ESC 放弃编辑并返回菜单。" + +#: grub-core/normal/menu_text.c:170 +#, fuzzy, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "使用 %C 键和 %C 键选择要高亮的启动项。\n" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +#, fuzzy +msgid "PiB" +msgstr "PUB" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "分区 %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "设备 %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "无法访问文件系统" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "文件系统类型 %s" + +#: grub-core/normal/misc.c:131 +#, fuzzy, c-format +msgid "- Label `%s'" +msgstr "- 卷标 %s" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- 最近更改 %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +#, fuzzy +msgid "No known filesystem detected" +msgstr "未知文件系统" + +#: grub-core/normal/misc.c:174 +#, fuzzy, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - 分区始于 %u" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - 总量未知" + +#: grub-core/normal/misc.c:182 +#, fuzzy, c-format +msgid " - Total size %llu%sKiB" +msgstr " - 共 %u 扇区" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "无法打开文件 %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +#, fuzzy +msgid "couldn't open geom" +msgstr "无法打开设备" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +#, fuzzy +msgid "unaligned device size" +msgstr "无效的设备“%s”。\n" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "正在尝试从 GRUB 读取核心镜像“%s”" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "正在尝试再次从 GRUB 读取核心镜像“%s”" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "无法正确读取“%s”" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "读取核心镜像的其他扇区失败" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, fuzzy, c-format +msgid "Unable to open stream from %s: %s" +msgstr "无法打开目录 %s\n" + +#: grub-core/osdep/linux/getroot.c:1033 +#, fuzzy, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "无效的根设备“%s”" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, fuzzy, c-format +msgid "Unable to fork: %s" +msgstr "无法打开 %s" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, fuzzy, c-format +msgid "Unable to create pipe: %s" +msgstr "无法打开 %s" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +#, fuzzy +msgid "cannot restore the original directory" +msgstr "无法压缩内核镜像" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, fuzzy, c-format +msgid "cannot stat `%s': %s" +msgstr "无法打开“%s”" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "无法打开文件 %s" + +# need to check source code: +# is the %s referring to the "directory" or the error msg? +#: grub-core/osdep/unix/hostdisk.c:301 +#, fuzzy, c-format +msgid "cannot make temporary directory: %s" +msgstr "无法为目录 %s 排序\n" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, fuzzy, c-format +msgid "%s: not found" +msgstr "%s:信息:" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +#, fuzzy +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "此 GPT 分区标签没有 BIOS 引导分区,无法进行嵌入!" + +#: grub-core/partmap/gpt.c:196 +#, fuzzy +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "此 GPT 分区标签没有 BIOS 引导分区,无法进行嵌入!" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +#, fuzzy +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "此 DOS 分区标签没有 MBR 前间隔,无法进行嵌入!" + +#: grub-core/partmap/msdos.c:404 +#, fuzzy +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "您的嵌入区域过小,无法装入 core.img。" + +#: grub-core/parttool/msdospart.c:39 +#, fuzzy +msgid "Make partition active" +msgstr "可用分区:" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +#, fuzzy +msgid "Change partition type" +msgstr "指定分区表类型。" + +#: grub-core/parttool/msdospart.c:88 +#, fuzzy +msgid "Set `hidden' flag in partition type" +msgstr "指定分区表类型。" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, fuzzy, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "指定分区表类型。" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, fuzzy, c-format +msgid "invalid variable name `%s'" +msgstr "无效的根设备“%s”" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "退出循环" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "继续循环" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[值]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "设定位置参数。" + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "从一个函数返回。" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] 文件" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "为活动终端加载背景图像。" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "" + +#: grub-core/term/gfxterm_background.c:183 +#, fuzzy +msgid "Set background color for active terminal." +msgstr "为活动终端加载背景图像。" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "设置串行单元。" + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "设置串行端口地址。" + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "设置串行端口速度。" + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "设置串行端口字长。" + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "设置串行端口奇偶校验。" + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "设置串行端口停止位。" + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "设置串行单元。" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[选项...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "配置串行端口。" + +#: grub-core/term/terminfo.c:184 +#, fuzzy, c-format +msgid "unknown terminfo type `%s'" +msgstr "未知的额外参数“%s”。\n" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +#, fuzzy +msgid "visually-ordered UTF-8" +msgstr "终端使用按可视性排序的 UTF-8。" + +#: grub-core/term/terminfo.c:680 +#, fuzzy +msgid "Unknown encoding" +msgstr "未知" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "终端仅使用 ASCII [默认]。" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "终端使用按逻辑排序的 UTF-8。" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "终端使用按可视性排序的 UTF-8。" + +#: grub-core/term/terminfo.c:703 +#, fuzzy +msgid "Terminal has specified geometry." +msgstr "没有指定终端。" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "宽度x高度。" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] 终端 [类型]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "设置指定终端的 terminfo 为指定的类型。\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "输出并执行块参数。" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr "" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +#, fuzzy +msgid "MODULES" +msgstr "模块" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "无法压缩内核镜像" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, fuzzy, c-format +msgid "use translations under DIR [default=%s]" +msgstr "使用 DIR 目录内的 GRUB 文件 [默认=%s]" + +#: include/grub/util/install.h:58 +#, fuzzy, c-format +msgid "use themes under DIR [default=%s]" +msgstr "使用 DIR 目录内的 GRUB 文件 [默认=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, fuzzy, c-format +msgid "cannot rename the file %s to %s" +msgstr "无法打开文件 %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "命令:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "创建一个空的环境块文件。" + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "列出当前变量。" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +#, fuzzy +msgid "set [NAME=VALUE ...]" +msgstr "[值]..." + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "设置变量。" + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "删除变量。" + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "选项:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "您至少需要指定一个命令。\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "文件名 命令" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "编辑环境块的工具。" + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +#, fuzzy +msgid "invalid environment block" +msgstr "编辑环境块的工具。" + +#: util/grub-editenv.c:216 +#, fuzzy, c-format +msgid "invalid parameter %s" +msgstr "设定位置参数。" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, fuzzy, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "在便宜 %lld 读取磁盘失败,长度 %d" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "无效的跳过值 %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "在偏移 %llu 处发生读取错误:%s" + +#: util/grub-fstest.c:210 +#, fuzzy, c-format +msgid "cannot open OS file `%s': %s" +msgstr "无法打开文件 %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, fuzzy, c-format +msgid "cannot write to the stdout: %s" +msgstr "无法从 %2$s 读取 %1$llu 字节" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "在 %llu 处比较失败" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, fuzzy, c-format +msgid "`loopback' command fails: %s" +msgstr "loopback 命令失败" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, fuzzy, c-format +msgid "`cryptomount' command fails: %s" +msgstr "loopback 命令失败" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PATH" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "列出 PATH 变量中的文件。" + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp 文件 本地文件" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "复制文件到本地位置。" + +#: util/grub-fstest.c:509 +#, fuzzy +msgid "cat FILE" +msgstr "crc 文件" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp 文件 本地文件" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "比较指定文件与本地文件。" + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex 文件" + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "Show contents of FILE in hex." +msgstr "显示文件内容。" + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc 文件" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "计算文件的 CRC32 校验和。" + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist 文件" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "显示指定文件的块列表。" + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "跳过输出文件的 N 字节。" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "处理输出文件中的 N 字节。" + +#: util/grub-fstest.c:519 +#, fuzzy +msgid "Specify the number of input files." +msgstr "指定一个或多个要加载的字库。" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "设置调试环境变量。" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +#, fuzzy +msgid "Mount crypto devices." +msgstr "设置根设备。" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "" + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "磁盘计数无效。\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "没有指定命令。\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "命令参数不够。\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "无效命令%s。\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE_PATH 命令" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "文件系统驱动调试工具。" + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +#, fuzzy +msgid "set output filename. Default is STDOUT" +msgstr "设置输出文件名" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +#, fuzzy +msgid "[OPTIONS]" +msgstr "[选项...]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +#, fuzzy +msgid "Missing input file\n" +msgstr "N 个输入文。" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "无法打开“%s”" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "无法打开“%s”" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "无法打开“%s”" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "无法打开“%s”" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, fuzzy, c-format +msgid "Unknown compression format %s" +msgstr "未知命令 %s。\n" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "未知的额外参数“%s”。\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "无法打开“%s”" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "无效的根设备“%s”" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "未知命令 %s。\n" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +#, fuzzy +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"标记驱动器也课作为软驱启动(默认 fdX 设备)。此选项可能在一些 BIOS 上无法正常工" +"作。" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "" + +#: util/grub-install.c:272 util/grub-setup.c:87 +#, fuzzy +msgid "install even if problems are detected" +msgstr "即使检测到问题也继续安装" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +#, fuzzy +msgid "do not probe for filesystems in DEVICE" +msgstr "不在指定的设备上探测文件系统" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "ID" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[选项] 文件或设备" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "没有指定设备。\n" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "无法打开日志文件:%s\n" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +#, fuzzy +msgid "the chosen partition is not a PReP partition" +msgstr "DOS 分区为 %d,BSD 分区为 %d" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "没有指定设备。\n" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +#, fuzzy +msgid "No path or device is specified.\n" +msgstr "没有指定设备。\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +#, fuzzy +msgid "set font family name" +msgstr "设置输出文件名" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "" + +#: util/grub-mkfont.c:950 +#, fuzzy +msgid "set font size" +msgstr "设置卷集合大小" + +#: util/grub-mkfont.c:951 +#, fuzzy +msgid "set font descent" +msgstr "设置根设备。" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "" + +#: util/grub-mkfont.c:1151 +#, fuzzy +msgid "[OPTIONS] FONT_FILES" +msgstr "[选项] 磁盘" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +#, fuzzy +msgid "output file must be specified" +msgstr "没有指定设备。\n" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +#, fuzzy +msgid "set prefix directory" +msgstr "无法打开目录 %s\n" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +#, fuzzy +msgid "available formats:" +msgstr "可用输入终端:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, fuzzy, c-format +msgid "unknown target format %s\n" +msgstr "未知的额外参数“%s”。\n" + +#: util/grub-mkimage.c:233 +#, fuzzy +msgid "[OPTION]... [MODULES]" +msgstr "[选项...]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:146 +#, fuzzy +msgid "Reenter password: " +msgstr "输入口令:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +#, fuzzy +msgid "No path is specified.\n" +msgstr "没有指定命令。\n" + +#: util/grub-mkrelpath.c:78 +#, fuzzy +msgid "PATH" +msgstr "ls PATH" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "[选项...]" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +#, fuzzy +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[选项] 文件或设备" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +#, fuzzy +msgid "read text from FILE." +msgstr "从指定端口读取字节。" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "可用参数:" + +#: util/grub-script-check.c:87 +#, fuzzy +msgid "[PATH]" +msgstr "ls PATH" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, fuzzy, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "使用 FILE 作为引导镜像 [默认=%s]" + +#: util/grub-setup.c:81 +#, fuzzy, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "使用 FILE 作为核心镜像 [默认=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "没有指定设备。\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"设置从指定设备引导所使用的镜像。\n" +"\n" +"您通常不应直接使用此程序,请换用 grub-install。" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "指定的设备必须是一个操作系统设备(例如 /dev/sda)。" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "无效的设备“%s”。\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "无法压缩内核镜像" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "" + +#: util/mkimage.c:985 +#, fuzzy +msgid "Decompressor is too big" +msgstr "核心镜像太大" + +#: util/mkimage.c:1030 +#, fuzzy, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "核心镜像太大(%p > %p)" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "核心镜像太大(%p > %p)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img 的大小必须为 %u 字节" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +#, fuzzy +msgid "firmware image is too big" +msgstr "核心镜像太大" + +#: util/resolve.c:93 +#, fuzzy, c-format +msgid "invalid line format: %s" +msgstr "无效命令%s。\n" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "核心文件的第一扇区未对齐" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "核心文件中发现未对齐的扇区" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "核心文件的扇区碎片太多" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "“%s”的大小不是 %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "“%s”的尺寸太小" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"正在试图将 GRUB 安装至有多个分区标签的磁盘,或同时有分区标签和文件系统的磁" +"盘。这样的操作尚未被支持。" + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "无法在 %s 中识别文件系统,无法执行安全性检测" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s 中似乎包含一个不为 DOS 引导保留空间的 %s 文件系统。在此处安装 GRUB 可能导" +"致 grub-setup 覆盖重要数据从而损坏文件系统(--skip-fs-probe 参数可以禁用这个检" +"查,使用该选项风险自负)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s 中似乎包含一个不为 DOS 引导保留空间的 %s 分区。在此处安装 GRUB 可能导致 " +"grub-setup 覆盖重要数据从而损坏文件系统(--skip-fs-probe 参数可以禁用这个检" +"查,使用该选项风险自负)" + +#: util/setup.c:462 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s 中似乎包含一个不为 DOS 引导保留空间的 %s 分区。在此处安装 GRUB 可能导致 " +"grub-setup 覆盖重要数据从而损坏文件系统(--skip-fs-probe 参数可以禁用这个检" +"查,使用该选项风险自负)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "正在试图将 GRUB 安装至未分区的磁盘或一个分区。这是一个坏主意。" + +#: util/setup.c:480 +#, fuzzy +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"正在试图将 GRUB 安装至有多个分区标签的磁盘,或同时有分区标签和文件系统的磁" +"盘。这样的操作尚未被支持。" + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "您的嵌入区域过小,无法装入 core.img。" + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "核心镜像中没有终止符" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "" + +#: util/setup.c:610 +#, fuzzy +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "无法嵌入,但在跨盘安装时是必须的" + +#: util/setup.c:617 +#, fuzzy, c-format +msgid "can't determine filesystem on %s" +msgstr "指定文件系统类型" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "无法嵌入,但在跨盘安装时是必须的" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"无法嵌入。在此次安装中 GRUB 只能通过使用块列表安装。但是块列表是不可信赖的," +"不推荐使用。" + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +#, fuzzy +msgid "Make GRUB keyboard layout file." +msgstr "载入一个键盘布局。" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +#, fuzzy +msgid "print this message and exit" +msgstr "显示此帮助并退出。" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +#, fuzzy +msgid "print the version information and exit" +msgstr "输出版本信息并退出" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "" + +#: util/grub-mkconfig.in:58 +#, fuzzy +msgid "Generate a grub config file" +msgstr "载入另外的配置文件。" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "" + +#: util/grub-mkconfig_lib.in:47 +#, fuzzy +msgid "Warning:" +msgstr "警告:getrlimit" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +#, fuzzy +msgid "Menu entry not specified." +msgstr "菜单项类型。" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +#, fuzzy +msgid "Found GNU Mach: %s" +msgstr "载入 GNU Mach ..." + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +#, fuzzy +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s,Linux %s (恢复模式)" + +#: util/grub.d/10_hurd.in:94 +#, fuzzy +msgid "%s, with Hurd %s" +msgstr "%s,Linux %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "载入 GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "载入 Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "" + +#: util/grub.d/10_illumos.in:40 +#, fuzzy +msgid "Loading kernel of Illumos ..." +msgstr "载入 FreeBSD 内核 %s ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s,kFreeBSd %s (恢复模式)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s,kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "载入 FreeBSD 内核 %s ..." + +#: util/grub.d/10_kfreebsd.in:164 +#, fuzzy +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "载入 FreeBSD 内核。" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s,Linux %s (恢复模式)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s,Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "载入 Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "载入初始化内存盘..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s,%s 内核(通过 %s,恢复模式)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s,%s 内核(通过 %s)" + +#: util/grub.d/10_netbsd.in:158 +#, fuzzy +msgid "Found NetBSD kernel: %s\\n" +msgstr "载入 NetBSD 内核模块。" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:85 +#, fuzzy +msgid "Found %s on %s (%s)\\n" +msgstr "为 %2$s%3$s%4$s 使用 %1$s (%5$s)\n" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s,Xen %s 和 Linux %s (恢复模式)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s,Xen %s 和 Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +#, fuzzy +msgid "%s, with Xen hypervisor" +msgstr "%s,Linux %s" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "载入 Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" + +#~ msgid "Expose v1 tables." +#~ msgstr "显示 v1 表。" + +#~ msgid "Fake BIOS." +#~ msgstr "BIOS 伪装。" + +#~ msgid "Check hash list file." +#~ msgstr "检查哈希列表文件。" + +#~ msgid "DIRECTORY" +#~ msgstr "目录" + +#~ msgid "Unload PXE environment." +#~ msgstr "卸载 PXE 环境。" + +#~ msgid "Read word from PORT." +#~ msgstr "从指定端口读取字。" + +#~ msgid "Read dword from PORT." +#~ msgstr "从指定端口读取双字。" + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "向指定端口写入字类型值。" + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "向指定端口写入 dword 类型值。" + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "Read word from ADDR." +#~ msgstr "从指定地址读取字。" + +#~ msgid "Read dword from ADDR." +#~ msgstr "从指定地址读取双字。" + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "向指定地址写入 word 类型值。" + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "向指定地址写入 dword 类型值。" + +#~ msgid "Menu entry definition as a string." +#~ msgstr "以字符串定义的菜单项。" + +#~ msgid "[DEVICE]" +#~ msgstr "[设备]" + +#~ msgid "Load XNU hibernate image." +#~ msgstr "载入休眠镜像。" + +#~ msgid "Authenticate users" +#~ msgstr "认证用户" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 可视" + +#~ msgid "If FILENAME is '-', the default value %s is used." +#~ msgstr "如果文件名是 -,则使用默认值 %s。" + +#~ msgid "write error" +#~ msgstr "写入出错" + +#~ msgid "open error" +#~ msgstr "打开出错" + +#~ msgid "seek error" +#~ msgstr "寻道错误" + +#~ msgid "Hex dump FILE." +#~ msgstr "使用 16 进制转储指定的文件。" + +#~ msgid "Must use absolute path.\n" +#~ msgstr "必须使用绝对路径。\n" + +#~ msgid "the core image is too small" +#~ msgstr "核心镜像太小" + +#~ msgid "prefix is too long" +#~ msgstr "前缀太长" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "用法:%s [选项]... [模块]\n" +#~ "\n" +#~ "制作一个可引导的 GRUB 镜像。\n" +#~ " -d, --directory=DIR 使用 DIR 目录下的镜像和模块 [默认=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR 设定 grub_prefix 路径 [默认=%s]\n" +#~ " -m, --memdisk=FILE 嵌入 FILE 文件作为内存盘镜像\n" +#~ " -c, --config=FILE 嵌入 FILE 文件作为引导配置\n" +#~ " -n, --note 为 CHRP 开放固件添加 NOTE 段\n" +#~ " -o, --output=FILE 将生成的镜像写入 FILE 文件 [默认=标准输出]\n" +#~ " -O, --format=FORMAT 按照指定格式生成镜像\n" +#~ " 可用的格式有:%s\n" +#~ " -C, --compression=(xz|none|auto) 选择要使用的压缩方式\n" +#~ " -h, --help 显示此信息并退出\n" +#~ " -V, --version 显示版本信息并退出\n" +#~ " -v, --verbose 显示详细信息\n" +#~ "\n" +#~ "软件错误请报告给 %s\n" + +#~ msgid "cannot open %s" +#~ msgstr "无法打开 %s" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "无法嵌入,但在根设备位于 RAID 阵列或 LVM 卷上时必须使用嵌入。" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "读取核心镜像的第一扇区失败" + +#~ msgid "DEV" +#~ msgstr "设备" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "使用指定设备作为根设备 [默认=guessed]" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "无法猜测根设备。请使用“--root-device”参数指定。" + +#~ msgid "[class [handler]]" +#~ msgstr "[类 [处理程序]]" + +#~ msgid "List compatible VESA BIOS extension video modes." +#~ msgstr "列出兼容的 VESA BIOS 扩展视频模式" + +#~ msgid "Test VESA BIOS Extension 2.0+ support." +#~ msgstr "测试 VESA BIOS 扩展 2.0+ 支持。" + +#~ msgid "Set the root device." +#~ msgstr "设置根设备。" + +#~ msgid "Simulate a hard drive with partitions." +#~ msgstr "模拟一个带分区的硬盘。" + +#~ msgid "" +#~ "Attempting to install GRUB to a partition instead of the MBR. This is a " +#~ "BAD idea." +#~ msgstr "正在试图将 GRUB 安装至一个分区而非 MBR。这是一个坏主意。" + +#~ msgid "No DOS-style partitions found" +#~ msgstr "未找到 DOS 类型分区" + +#~ msgid "if you really want blocklists, use --force" +#~ msgstr "如果确实要使用块列表,请使用 --force 选项" + +#~ msgid "" +#~ "Usage: %s [OPTION]... DEVICE\n" +#~ "\n" +#~ "Set up images to boot from DEVICE.\n" +#~ "DEVICE must be a GRUB device (e.g. `(hd0,1)').\n" +#~ "\n" +#~ " -b, --boot-image=FILE use FILE as the boot image [default=%s]\n" +#~ " -c, --core-image=FILE use FILE as the core image [default=%s]\n" +#~ " -d, --directory=DIR use GRUB files in the directory DIR [default=" +#~ "%s]\n" +#~ " -m, --device-map=FILE use FILE as the device map [default=%s]\n" +#~ " -r, --root-device=DEV use DEV as the root device [default=guessed]\n" +#~ " -f, --force install even if problems are detected\n" +#~ " -s, --skip-fs-probe do not probe for filesystems in DEVICE\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "用法:%s [选项]...[设备]\n" +#~ "\n" +#~ "设置从指定设备引导的镜像。\n" +#~ "指定的设备必须是 GRUB 设备格式(例如“(hd0,1)”)。\n" +#~ "\n" +#~ " -b, --boot-image=文件 使用指定文件作为引导镜像 [默认为 %s]\n" +#~ " -c, --core-image=文件 使用指定文件作为核心镜像 [默认为 %s]\n" +#~ " -d, --directory=目录 使用指定目录中的 GRUB 文件 [默认为 %s]\n" +#~ " -m, --device-map=文件 使用指定文件作为设备映射 [默认为 %s]\n" +#~ " -r, --root-device=设备 使用指定设备作为根设备 [默认为 guessed]\n" +#~ " -f, --force 检测到问题的情况下仍强制安装\n" +#~ " -s, --skip-fs-probe 不在设备中探测文件系统\n" +#~ " -h, --help 显示此信息并且退出\n" +#~ " -V, --version 显示版本信息并且退出\n" +#~ " -v, --verbose 显示详细信息\n" +#~ "\n" +#~ "软件错误请报告给 %s\n" + +#~ msgid "A boot catalog exists and appears corrupted.\n" +#~ msgstr "引导目录存在且似乎已损坏。\n" + +#~ msgid "Please check the following file: %s.\n" +#~ msgstr "请检查以下文件:%s。\n" + +#~ msgid "This file must be removed before a bootable CD can be done.\n" +#~ msgstr "必须在可引导 CD 完成之前删除此文件。\n" + +#~ msgid "Error creating boot catalog (%s)" +#~ msgstr "创建引导目录时出错(%s)" + +#~ msgid "Error writing to boot catalog (%s)" +#~ msgstr "写入引导目录时出错(%s)" + +#~ msgid "Boot catalog cannot be found!\n" +#~ msgstr "无法找到引导目录!\n" + +#~ msgid "Boot image cannot be found!\n" +#~ msgstr "无法找到引导镜像!\n" + +#~ msgid "" +#~ "\n" +#~ "Size of boot image is %d sectors" +#~ msgstr "" +#~ "\n" +#~ "引导镜像的大小为 %d 个扇区" + +#~ msgid "No emulation\n" +#~ msgstr "无模拟\n" + +#~ msgid "Emulating a 1.44 meg floppy\n" +#~ msgstr "模拟 1.44MB 软盘\n" + +#~ msgid "Emulating a 2.88 meg floppy\n" +#~ msgstr "模拟 2.88MB 软盘\n" + +#~ msgid "Emulating a 1.2 meg floppy\n" +#~ msgstr "模拟 1.2MB 软盘\n" + +#~ msgid "" +#~ "\n" +#~ "Error - boot image is not the an allowable size.\n" +#~ msgstr "" +#~ "\n" +#~ "错误 - 引导镜像大小不被允许。\n" + +#~ msgid "Error opening boot catalog for update" +#~ msgstr "无法打开引导目录进行更新" + +#~ msgid "Error writing to boot catalog" +#~ msgstr "写入到引导目录时出错" + +#~ msgid "Error opening boot image file '%s' for update" +#~ msgstr "无法打开引导镜像文件“%s”进行更新" + +#~ msgid "Odd alignment at non-end-of-file in boot image '%s'" +#~ msgstr "引导镜像“%s”在非文件结束位置上存在错误的对齐。" + +#~ msgid "Boot image file '%s' changed unexpectedly" +#~ msgstr "引导镜像文件“%s”意外改变" + +#~ msgid "Error writing to boot image (%s)" +#~ msgstr "写入到引导镜像出错(%s)" + +#~ msgid "Unable to generate sane path tables - too many directories (%d)\n" +#~ msgstr "无法生成合理的路径表 - 目录过多(%d)\n" + +#~ msgid "Entry %d not in path tables\n" +#~ msgstr "条目 %d 不在路径表中\n" + +#~ msgid "Fatal goof - directory has amnesia\n" +#~ msgstr "致命错误 - 目录失忆\n" + +#~ msgid "Joliet path table lengths do not match %d %d\n" +#~ msgstr "Joliet 路径表长度不匹配 %d %d\n" + +#~ msgid "Unable to locate relocated directory\n" +#~ msgstr "无法找到重定位的目录\n" + +#~ msgid "Fatal goof - unable to find directory location\n" +#~ msgstr "致命错误 - 无法找到目录位置\n" + +#~ msgid "Unexpected joliet directory length %d %d %s\n" +#~ msgstr "未预料的 Joliet 目录长度 %d %d %s\n" + +#~ msgid "Process all files (don't skip backup files)" +#~ msgstr "处理全部文件(包括备份文件)" + +#~ msgid "Set Application ID" +#~ msgstr "设置应用 ID" + +#~ msgid "Set Bibliographic filename" +#~ msgstr "设置参考信息文件名" + +#~ msgid "Set Copyright filename" +#~ msgstr "设置版权文件名" + +#~ msgid "Set embedded boot image name" +#~ msgstr "设置嵌入式启动镜像名称" + +#~ msgid "Patch a protective DOS-style label in the image" +#~ msgstr "在镜像中补充保护性的 DOS 类型标签" + +#~ msgid "Set El Torito boot image name" +#~ msgstr "设置 El Torito 引导镜像名称" + +#~ msgid "Set El Torito boot catalog name" +#~ msgstr "设置 El Torito 引导目录名称" + +#~ msgid "Patch Boot Info Table in El Torito boot image" +#~ msgstr "在 El Torito 引导镜像中补充引导信息表" + +#~ msgid "Dummy option for backward compatibility" +#~ msgstr "为与过去兼容设计的过渡选项" + +#~ msgid "Enable floppy drive emulation for El Torito" +#~ msgstr "为 El Torito 启用软驱模拟" + +#~ msgid "Magic parameters from cdrecord" +#~ msgstr "cdrecord 使用的 magic 参数" + +#~ msgid "Omit trailing periods from filenames" +#~ msgstr "忽略文件名尾部的句号" + +#~ msgid "Disable deep directory relocation" +#~ msgstr "禁用深度目录重定位" + +#~ msgid "Follow symbolic links" +#~ msgstr "跟随符号链接" + +#~ msgid "Print option help" +#~ msgstr "输出选项帮助信息" + +#~ msgid "GLOBFILE" +#~ msgstr "GLOBFILE" + +#~ msgid "Hide ISO9660/RR file" +#~ msgstr "隐藏 ISO9660/RR 文件" + +#~ msgid "Hide Joliet file" +#~ msgstr "隐藏 Joliet 文件" + +#~ msgid "ADD_FILES" +#~ msgstr "ADD_FILES" + +#~ msgid "No longer supported" +#~ msgstr "不再支持" + +#~ msgid "Generate Joliet directory information" +#~ msgstr "生成 Joliet 目录信息" + +#~ msgid "Allow full 32 character filenames for iso9660 names" +#~ msgstr "允许 ISO9660 文件名完整包含 32 个字符" + +#~ msgid "Allow iso9660 filenames to start with '.'" +#~ msgstr "允许 ISO9660 文件名以“.”开头" + +#~ msgid "LOG_FILE" +#~ msgstr "LOG_FILE" + +#~ msgid "Re-direct messages to LOG_FILE" +#~ msgstr "重定向所有信息到 LOG_FILE" + +#~ msgid "Exclude file name" +#~ msgstr "排除文件名" + +#~ msgid "Set path to previous session to merge" +#~ msgstr "设置上一会话的路径以便合并" + +#~ msgid "Omit version number from iso9660 filename" +#~ msgstr "从 ISO9660 文件名中忽略版本号" + +#~ msgid "Inhibit splitting symlink components" +#~ msgstr "禁止分割符号链接组件" + +#~ msgid "Inhibit splitting symlink fields" +#~ msgstr "禁止分割符号链接域" + +#~ msgid "PREP" +#~ msgstr "PREP" + +#~ msgid "Set Volume preparer" +#~ msgstr "设置卷编制者" + +#~ msgid "Print estimated filesystem size and exit" +#~ msgstr "输出文件系统估计尺寸并退出" + +#~ msgid "Set Volume publisher" +#~ msgstr "设置卷发行者" + +#~ msgid "Run quietly" +#~ msgstr "静默执行" + +#~ msgid "Generate rationalized Rock Ridge directory information" +#~ msgstr "生成合理化的 Rock Ridge 目录信息" + +#~ msgid "Generate Rock Ridge directory information" +#~ msgstr "生成 Rock Ridge 目录信息" + +#~ msgid "Split output into files of approx. 1GB size" +#~ msgstr "将输出分割为 1GB 大小的文件" + +#~ msgid "Set System ID" +#~ msgstr "设置系统 ID" + +#~ msgid "" +#~ "Generate translation tables for systems that don't understand long " +#~ "filenames" +#~ msgstr "为无法识别长文件名的系统生成翻译表" + +#~ msgid "Verbose" +#~ msgstr "详细" + +#~ msgid "Set Volume ID" +#~ msgstr "设置卷 ID" + +#~ msgid "Set Volume set ID" +#~ msgstr "设置卷集合 ID" + +#~ msgid "Set Volume set sequence number" +#~ msgstr "设置卷集合序列号" + +#~ msgid "Override creation date" +#~ msgstr "覆盖创建日期" + +#~ msgid "Override expiration date" +#~ msgstr "覆盖过期日期" + +#~ msgid "Override effective date" +#~ msgstr "覆盖有效日期" + +#~ msgid "Using \"%s\"\n" +#~ msgstr "使用“%s”\n" + +#~ msgid "%s:%d: name required\n" +#~ msgstr "%s:%d:需要名称\n" + +#~ msgid "%s:%d: equals sign required\n" +#~ msgstr "%s:%d:需要等号\n" + +#~ msgid "%s:%d: field name \"%s\" unknown\n" +#~ msgstr "%s:%d:域名“%s”未知\n" + +#~ msgid "Usage: %s [options] file...\n" +#~ msgstr "用法:%s [选项] 文件...\n" + +#~ msgid "Required boot image pathname missing" +#~ msgstr "缺少必须的引导镜像路径名" + +#~ msgid "Required boot catalog pathname missing\n" +#~ msgstr "缺少必须的引导目录路径名\n" + +#~ msgid "Ignoring -no-emul-boot (no-emulation is the default behaviour)\n" +#~ msgstr "忽略 -no-emul-boot 选项(no-emulation是默认行为)\n" + +#~ msgid "Abstract filename string too long\n" +#~ msgstr "摘要文件名太长\n" + +#~ msgid "Application-id string too long\n" +#~ msgstr "应用程序编号串太长\n" + +#~ msgid "Bibliographic filename string too long\n" +#~ msgstr "参考信息文件名太长\n" + +#~ msgid "Copyright filename string too long\n" +#~ msgstr "版权文件名太长\n" + +#~ msgid "Preparer string too long\n" +#~ msgstr "编制者描述信息太长\n" + +#~ msgid "Publisher string too long\n" +#~ msgstr "发行者描述信息太长\n" + +#~ msgid "System ID string too long\n" +#~ msgstr "系统 ID 字符串太长\n" + +#~ msgid "Volume ID string too long\n" +#~ msgstr "卷 ID 字符串太长\n" + +#~ msgid "Volume set ID string too long\n" +#~ msgstr "卷集合 ID 太长\n" + +#~ msgid "Volume set sequence number too big\n" +#~ msgstr "卷集合序列号太大\n" + +#~ msgid "date string must be 16 characters.\n" +#~ msgstr "日期字符串长度必须为 16 个字符。\n" + +#~ msgid "Warning: setrlimit" +#~ msgstr "警告:setrlimit" + +#~ msgid "Multisession usage bug: Must specify -C if -M is used.\n" +#~ msgstr "多会话使用错误: 若使用 -M 选项则必须指定 -C 选项。\n" + +#~ msgid "" +#~ "Warning: -C specified without -M: old session data will not be merged.\n" +#~ msgstr "" +#~ "警告:在未使用 -M 的情况下使用了 -C 选项:原有会话数据将不被合并。\n" + +#~ msgid "re-directing all messages to %s\n" +#~ msgstr "重定向所有信息到 %s\n" + +#~ msgid "Unable to open previous session image %s\n" +#~ msgstr "无法打开上一会话使用的镜像 %s\n" + +#~ msgid "Joliet tree sort failed.\n" +#~ msgstr "Joliet 树排序失败。\n" + +#~ msgid "Unable to open /dev/null\n" +#~ msgstr "无法打开 /dev/null\n" + +#~ msgid "Unable to open disc image file\n" +#~ msgstr "无法打开磁盘镜像文件\n" + +#~ msgid "Max brk space used %x\n" +#~ msgstr "已使用的最大中断空间 %x\n" + +#~ msgid "%llu extents written (%llu MiB)\n" +#~ msgstr "%llu 已经写入扩展块(%llu MiB)\n" + +#~ msgid "Seek error on old image\n" +#~ msgstr "在旧镜像上发生搜寻错误\n" + +#~ msgid "**Bad RR version attribute" +#~ msgstr "**错误的 Rock Ridge 版本属性" + +#~ msgid "" +#~ "Warning: Neither Rock Ridge (-R) nor TRANS.TBL (-T) name translations " +#~ "were found on previous session. ISO (8.3) file names have been used " +#~ "instead.\n" +#~ msgstr "" +#~ "警告:未在前一会话中发现 Rock Ridge (-R) 或 TRANS.TBL (-T) 名称翻译,使用 " +#~ "ISO (8.3) 文件名代替。\n" + +# need to check source code. +# Is %s referring to the "old image" or the error msg? +#~ msgid "Read error on old image %s\n" +#~ msgstr "在旧镜像 %s 上发生读错误\n" + +#~ msgid "Special parameters for cdwrite not specified with -C\n" +#~ msgstr "cdwrite 的特殊参数没有通过 -C 指定\n" + +#~ msgid "Malformed cdwrite parameters\n" +#~ msgstr "cdwrite 参数格式错误\n" + +#~ msgid "symbolic link ``%s'' to long for one SL System Use Field, splitting" +#~ msgstr "符号链接“%s”对于单个 SL 系统使用域太长,进行分割" + +#~ msgid "Unable to insert transparent compressed file - name conflict\n" +#~ msgstr "无法插入透明压缩文件 - 文件名冲突\n" + +#~ msgid "Extension record too long\n" +#~ msgstr "扩展记录太长\n" + +#~ msgid "Fatal goof\n" +#~ msgstr "致命错误\n" + +#~ msgid "Unable to generate unique name for file %s\n" +#~ msgstr "无法为文件 %s 生成唯一的名字\n" + +#~ msgid "Fatal error - RR overflow for file %s\n" +#~ msgstr "致命错误 - 文件 %s 发生 Rock Ridge 溢出\n" + +#~ msgid "Translation table size mismatch %d %d\n" +#~ msgstr "翻译表大小不匹配 %d %d\n" + +#~ msgid "Unable to locate directory parent\n" +#~ msgstr "无法定位上级目录\n" + +#~ msgid "Scanning %s\n" +#~ msgstr "正在扫描 %s\n" + +#~ msgid "Ignoring file %s\n" +#~ msgstr "忽略文件 %s\n" + +#~ msgid "Overflow of stat buffer\n" +#~ msgstr "状态缓冲区溢出\n" + +#~ msgid "Excluded by match: %s\n" +#~ msgstr "匹配排除条件:%s\n" + +#~ msgid "Excluded: %s\n" +#~ msgstr "已排除:%s\n" + +#~ msgid "Non-existant or inaccessible: %s\n" +#~ msgstr "不存在或不可访问:%s\n" + +#~ msgid "Unable to stat file %s - ignoring and continuing.\n" +#~ msgstr "无法获得文件 %s 的状态 - 忽略并继续。\n" + +#~ msgid "Symlink %s ignored - continuing.\n" +#~ msgstr "忽略符号链接 %s - 继续。\n" + +#~ msgid "Already cached directory seen (%s)\n" +#~ msgstr "发现已缓冲目录(%s)\n" + +#~ msgid "File %s is not readable (%s) - ignoring\n" +#~ msgstr "文件 %s 无法读取(%s) - 忽略\n" + +#~ msgid "Directory loop - fatal goof (%s %lx %lu).\n" +#~ msgstr "目录循环嵌套 - 致命错误(%s %lx %lu)。\n" + +#~ msgid "Unknown file type %s - ignoring and continuing.\n" +#~ msgstr "未知文件类型 %s - 忽略并继续。\n" + +#~ msgid "Hidden from ISO9660 tree: %s\n" +#~ msgstr "从 ISO9660 树隐藏:%s\n" + +#~ msgid "Hidden from Joliet tree: %s\n" +#~ msgstr "从 Joliet 树隐藏:%s\n" + +#~ msgid "Directories too deep %s\n" +#~ msgstr "目录层次太深 %s\n" + +#~ msgid "Unable to delete non-empty directory\n" +#~ msgstr "无法删除非空目录\n" + +#~ msgid "Unable to locate child directory in parent list\n" +#~ msgstr "在上级目录列表中无法定位子目\n" + +#~ msgid "call to search_tree_file with an absolute path, stripping\n" +#~ msgstr "search_tree_file 的调用使用了绝对路径,正在剥离\n" + +#~ msgid "initial path separator. Hope this was intended...\n" +#~ msgstr "初始路径分隔符。希望这是预期的结果...\n" + +#~ msgid "Cannot open '%s'" +#~ msgstr "无法打开“%s”" + +#~ msgid "cannot fwrite %llu*%llu\n" +#~ msgstr "无法 fwrite %llu*%llu\n" + +#~ msgid "cannot open %s\n" +#~ msgstr "无法打开 %s\n" + +#~ msgid "%6.2f%% done, estimate finish %s" +#~ msgstr "已完成 %6.2f%%,估计 %s 完成" + +#~ msgid "Cache hit for %s%s%s\n" +#~ msgstr "命中缓存:%s%s%s\n" + +#~ msgid "Unexpected directory length %d %d %s\n" +#~ msgstr "未预料的目录长度 %d %d %s\n" + +#~ msgid "Continuation entry record length mismatch (%d %d).\n" +#~ msgstr "延续条目记录的长度不匹配(%d %d)。\n" + +#~ msgid "Path table lengths do not match %d %d\n" +#~ msgstr "路径表的长度不匹配 %d %d\n" + +#~ msgid "Total extents scheduled to be written = %llu\n" +#~ msgstr "预计要写入的扩展块总数 = %llu \n" + +#~ msgid "Total extents actually written = %llu\n" +#~ msgstr "实际写入的扩展块总数 = %llu\n" + +#~ msgid "" +#~ "Number of extents written different than what was predicted. Please " +#~ "fix.\n" +#~ msgstr "实际写入的扩展块数量和预计不同。请修正。\n" + +#~ msgid "Predicted = %d, written = %llu\n" +#~ msgstr "预计 = %d,已写入 = %llu\n" + +#~ msgid "Total rockridge attributes bytes: %d\n" +#~ msgstr "Rock Ridge 属性总大小:%d\n" + +#~ msgid "Path table size(bytes): %d\n" +#~ msgstr "路径表大小:%d 字节\n" + +#~ msgid "ESC to return previous menu." +#~ msgstr "按 ESC 返回上一菜单。" + +#~ msgid "the size of memory disk is 0x%x" +#~ msgstr "内存磁盘大小为 0x%x" + +#~ msgid "the size of config file is 0x%x" +#~ msgstr "配置文件大小为 0x%x" + +#~ msgid "the total module size is 0x%x" +#~ msgstr "模块总计大小为 0x%x" + +#~ msgid "the core size is 0x%x" +#~ msgstr "核心大小位 0x%x" + +#~ msgid "the core image will be embedded at sector 0x%llx" +#~ msgstr "核心镜像将被嵌入于 0x%llx 扇区" + +#~ msgid "error message = %s" +#~ msgstr "错误信息 = %s" + +#~ msgid "opening the core image `%s'" +#~ msgstr "正在打开核心镜像 `%s'" + +#~ msgid "guessing the root device failed, because of `%s'" +#~ msgstr "猜测根设备失败,原因为 `%s'" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9de97a8f1f545a609f767d319294c2b2eb5770a3 GIT binary patch literal 30946 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 literal 0 HcmV?d00001 diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 000000000..97bd453f7 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,6973 @@ +# Traditional Chinese translation for grub. +# Copyright (C) 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub package. +# Cheng-Chia Tseng , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub 1.97+20110101\n" +"Report-Msgid-Bugs-To: bug-grub@gnu.org\n" +"POT-Creation-Date: 2017-04-25 16:28+0200\n" +"PO-Revision-Date: 2011-07-25 02:26+0800\n" +"Last-Translator: Cheng-Chia Tseng \n" +"Language-Team: Chinese (traditional) \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: grub-core/bus/usb/serial/ftdi.c:145 grub-core/bus/usb/serial/pl2303.c:158 +#: grub-core/term/ieee1275/escc.c:169 grub-core/term/ns8250.c:202 +#, fuzzy +msgid "unsupported serial port speed" +msgstr "設定序列埠速度。" + +#: grub-core/bus/usb/serial/ftdi.c:151 grub-core/bus/usb/serial/pl2303.c:164 +#: grub-core/term/efi/serial.c:116 grub-core/term/ieee1275/escc.c:175 +#: grub-core/term/ns8250.c:208 grub-core/term/serial.c:227 +#: grub-core/term/serial.c:243 +#, fuzzy +msgid "unsupported serial port parity" +msgstr "設定序列埠同位。" + +#: grub-core/bus/usb/serial/ftdi.c:157 grub-core/bus/usb/serial/pl2303.c:170 +#: grub-core/term/efi/serial.c:122 grub-core/term/ieee1275/escc.c:181 +#: grub-core/term/ns8250.c:213 grub-core/term/serial.c:267 +#, fuzzy +msgid "unsupported serial port stop bits number" +msgstr "設定序列埠停止位元。" + +#: grub-core/bus/usb/serial/ftdi.c:161 grub-core/bus/usb/serial/pl2303.c:174 +#: grub-core/term/efi/serial.c:126 grub-core/term/ieee1275/escc.c:185 +#: grub-core/term/ns8250.c:217 +#, fuzzy +msgid "unsupported serial port word length" +msgstr "設定序列埠單詞長度。" + +#: grub-core/commands/acpi.c:42 +msgid "Don't load host tables specified by comma-separated list." +msgstr "不要載入用半形逗號隔開的列表所指定的主控表。" + +#: grub-core/commands/acpi.c:45 +msgid "Load only tables specified by comma-separated list." +msgstr "僅載入用半形逗號隔開的列表所指定的主控表。" + +#: grub-core/commands/acpi.c:46 +#, fuzzy +msgid "Export version 1 tables to the OS." +msgstr "輸出變數。" + +#: grub-core/commands/acpi.c:47 +#, fuzzy +msgid "Export version 2 and version 3 tables to the OS." +msgstr "顯露 v2 以及 v3 表。" + +#: grub-core/commands/acpi.c:48 +msgid "Set OEMID of RSDP, XSDT and RSDT." +msgstr "設定 RSDP、XSDT、RSDT 的 OEMID。" + +#: grub-core/commands/acpi.c:50 +msgid "Set OEMTABLE ID of RSDP, XSDT and RSDT." +msgstr "設定 RSDP、XSDT、RSDT 的 OEMTABLE ID。" + +#: grub-core/commands/acpi.c:52 +msgid "Set OEMTABLE revision of RSDP, XSDT and RSDT." +msgstr "設定 RSDP、XSDT、RSDT 的 OEMTABLE 修訂版本。" + +#: grub-core/commands/acpi.c:54 +msgid "Set creator field of RSDP, XSDT and RSDT." +msgstr "設定 RSDP、XSDT、RSDT 的建立者欄位。" + +#: grub-core/commands/acpi.c:56 +msgid "Set creator revision of RSDP, XSDT and RSDT." +msgstr "設定 RSDP、XSDT、RSDT 的建立者修訂版。" + +#. TRANSLATORS: "hangs" here is a noun, not a verb. +#: grub-core/commands/acpi.c:58 +#, fuzzy +msgid "" +"Don't update EBDA. May fix failures or hangs on some BIOSes but makes it " +"ineffective with OS not receiving RSDP from GRUB." +msgstr "" +"不要更新 EBDA。這也許能修正某些 BIOS 上的失敗或凍住,但可能會讓 OS 無法從 " +"GRUB 接收 RSDP 而變得沒效率。" + +#: grub-core/commands/acpi.c:650 grub-core/commands/acpi.c:667 +#: grub-core/commands/i386/pc/play.c:105 grub-core/commands/keylayouts.c:230 +#: grub-core/commands/keylayouts.c:245 grub-core/commands/keylayouts.c:263 +#: grub-core/commands/verify.c:928 grub-core/efiemu/loadcore.c:350 +#: grub-core/kern/elf.c:117 grub-core/kern/elfXX.c:29 +#: grub-core/kern/elfXX.c:156 grub-core/loader/arm/linux.c:316 +#: grub-core/loader/arm64/fdt.c:126 grub-core/loader/arm64/linux.c:294 +#: grub-core/loader/arm64/xen_boot.c:345 grub-core/loader/efi/chainloader.c:270 +#: grub-core/loader/efi/chainloader.c:291 +#: grub-core/loader/efi/chainloader.c:323 grub-core/loader/i386/bsd.c:1270 +#: grub-core/loader/i386/bsd.c:2110 grub-core/loader/i386/bsdXX.c:20 +#: grub-core/loader/i386/bsdXX.c:36 grub-core/loader/i386/bsdXX.c:63 +#: grub-core/loader/i386/bsdXX.c:357 grub-core/loader/i386/bsdXX.c:376 +#: grub-core/loader/i386/bsdXX.c:519 grub-core/loader/i386/bsdXX.c:535 +#: grub-core/loader/i386/bsdXX.c:615 grub-core/loader/i386/bsdXX.c:638 +#: grub-core/loader/i386/coreboot/chainloader.c:112 +#: grub-core/loader/i386/coreboot/chainloader.c:148 +#: grub-core/loader/i386/coreboot/chainloader.c:170 +#: grub-core/loader/i386/linux.c:705 grub-core/loader/i386/linux.c:812 +#: grub-core/loader/i386/linux.c:1023 grub-core/loader/i386/multiboot_mbi.c:171 +#: grub-core/loader/i386/pc/chainloader.c:186 +#: grub-core/loader/i386/pc/linux.c:149 grub-core/loader/i386/pc/linux.c:320 +#: grub-core/loader/i386/pc/linux.c:360 grub-core/loader/i386/pc/plan9.c:456 +#: grub-core/loader/i386/pc/plan9.c:539 grub-core/loader/i386/pc/plan9.c:555 +#: grub-core/loader/i386/xen.c:928 grub-core/loader/i386/xen_file.c:72 +#: grub-core/loader/i386/xen_fileXX.c:43 grub-core/loader/i386/xen_fileXX.c:186 +#: grub-core/loader/i386/xen_fileXX.c:339 grub-core/loader/ia64/efi/linux.c:464 +#: grub-core/loader/ia64/efi/linux.c:512 grub-core/loader/linux.c:286 +#: grub-core/loader/macho.c:84 grub-core/loader/macho.c:109 +#: grub-core/loader/machoXX.c:33 grub-core/loader/machoXX.c:46 +#: grub-core/loader/machoXX.c:76 grub-core/loader/machoXX.c:116 +#: grub-core/loader/machoXX.c:131 grub-core/loader/machoXX.c:147 +#: grub-core/loader/machoXX.c:196 grub-core/loader/machoXX.c:317 +#: grub-core/loader/multiboot.c:421 grub-core/loader/multiboot_elfxx.c:154 +#: grub-core/loader/multiboot_elfxx.c:217 +#: grub-core/loader/multiboot_elfxx.c:261 grub-core/loader/multiboot_mbi2.c:129 +#: grub-core/loader/xnu.c:728 grub-core/loader/xnu.c:786 +#: grub-core/loader/xnu.c:807 grub-core/loader/xnu.c:862 +#: grub-core/loader/xnu.c:905 grub-core/loader/xnu.c:943 +#: grub-core/loader/xnu_resume.c:68 grub-core/loader/xnu_resume.c:153 +#: grub-core/loader/xnu_resume.c:165 util/grub-mkimagexx.c:1921 +#, fuzzy, c-format +msgid "premature end of file %s" +msgstr "無法開啟檔案 %s" + +#: grub-core/commands/acpi.c:779 +#, fuzzy +msgid "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=TABLE1,TABLE2] FILE1 [FILE2] " +"[...]" +msgstr "" +"[-1|-2] [--exclude=TABLE1,TABLE2|--load-only=table1,table2] FILE1 [FILE2] " +"[...]" + +#: grub-core/commands/acpi.c:782 +msgid "Load host ACPI tables and tables specified by arguments." +msgstr "載入主控 ACPI 表以及透過引數指定的表。" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/err.c:110 +#, c-format +msgid "error: %s.\n" +msgstr "錯誤:%s。\n" + +#: grub-core/commands/acpihalt.c:368 grub-core/kern/emu/misc.c:93 +#: grub-core/kern/emu/misc.c:103 grub-core/kern/emu/misc.c:132 +#: grub-core/kern/emu/mm.c:34 grub-core/kern/emu/mm.c:62 +#: grub-core/kern/mm.c:374 grub-core/lib/relocator.c:1282 +#: grub-core/lib/relocator.c:1439 grub-core/lib/relocator.c:1538 +#: grub-core/loader/arm/linux.c:421 grub-core/loader/arm/linux.c:480 +#: grub-core/loader/arm64/linux.c:229 grub-core/loader/arm64/linux.c:285 +#: grub-core/loader/arm64/linux.c:304 grub-core/loader/arm64/xen_boot.c:333 +#: grub-core/loader/arm64/xen_boot.c:356 grub-core/loader/efi/chainloader.c:283 +#: grub-core/osdep/unix/dl.c:48 grub-core/osdep/windows/dl.c:46 +#: grub-core/script/lexer.c:156 grub-core/script/lexer.c:182 +#, fuzzy +msgid "out of memory" +msgstr "傾印記憶體。" + +#: grub-core/commands/acpihalt.c:374 grub-core/disk/cryptodisk.c:587 +#: grub-core/disk/cryptodisk.c:632 grub-core/kern/emu/hostdisk.c:307 +#: grub-core/kern/emu/hostfs.c:149 grub-core/kern/emu/misc.c:198 +#: grub-core/osdep/linux/ofpath.c:152 grub-core/osdep/linux/ofpath.c:371 +#: grub-core/osdep/linux/ofpath.c:384 util/glue-efi.c:80 util/glue-efi.c:94 +#: util/grub-editenv.c:155 util/grub-fstest.c:577 +#: util/grub-install-common.c:918 util/grub-mkrescue.c:624 +#: util/grub-mkrescue.c:867 util/grub-mount.c:506 util/grub-render-label.c:176 +#: util/misc.c:95 util/setup.c:734 util/setup.c:753 +#, fuzzy, c-format +msgid "cannot read `%s': %s" +msgstr "無法正確讀取「%s」" + +#. TRANSLATORS: It's computer shutdown using ACPI, not disabling ACPI. +#: grub-core/commands/acpihalt.c:452 +msgid "ACPI shutdown failed" +msgstr "" + +#: grub-core/commands/arc/lsdev.c:51 +#, fuzzy +msgid "List devices." +msgstr "列出 PCI 裝置。" + +#: grub-core/commands/blocklist.c:122 grub-core/commands/cat.c:57 +#: grub-core/commands/configfile.c:35 grub-core/commands/efi/loadbios.c:168 +#: grub-core/commands/file.c:152 grub-core/commands/hexdump.c:47 +#: grub-core/commands/legacycfg.c:209 grub-core/commands/legacycfg.c:315 +#: grub-core/commands/minicmd.c:44 grub-core/commands/syslinuxcfg.c:146 +#: grub-core/commands/testload.c:58 grub-core/commands/testspeed.c:52 +#: grub-core/disk/loopback.c:93 grub-core/efiemu/main.c:293 +#: grub-core/font/font_cmd.c:32 grub-core/kern/emu/hostdisk.c:519 +#: grub-core/loader/arm/linux.c:360 grub-core/loader/arm/linux.c:402 +#: grub-core/loader/arm/linux.c:463 grub-core/loader/arm64/linux.c:208 +#: grub-core/loader/arm64/linux.c:261 grub-core/loader/arm64/xen_boot.c:385 +#: grub-core/loader/arm64/xen_boot.c:434 grub-core/loader/efi/chainloader.c:210 +#: grub-core/loader/i386/bsd.c:1456 grub-core/loader/i386/bsd.c:1801 +#: grub-core/loader/i386/bsd.c:2079 +#: grub-core/loader/i386/coreboot/chainloader.c:438 +#: grub-core/loader/i386/linux.c:694 grub-core/loader/i386/linux.c:1059 +#: grub-core/loader/i386/pc/chainloader.c:274 +#: grub-core/loader/i386/pc/freedos.c:105 grub-core/loader/i386/pc/linux.c:138 +#: grub-core/loader/i386/pc/linux.c:398 grub-core/loader/i386/pc/ntldr.c:85 +#: grub-core/loader/i386/pc/plan9.c:408 +#: grub-core/loader/i386/pc/pxechainloader.c:94 +#: grub-core/loader/i386/pc/truecrypt.c:96 grub-core/loader/i386/xen.c:640 +#: grub-core/loader/i386/xen.c:764 grub-core/loader/i386/xen.c:840 +#: grub-core/loader/i386/xen.c:850 grub-core/loader/i386/xnu.c:488 +#: grub-core/loader/ia64/efi/linux.c:500 grub-core/loader/ia64/efi/linux.c:575 +#: grub-core/loader/mips/linux.c:238 grub-core/loader/mips/linux.c:421 +#: grub-core/loader/multiboot.c:307 grub-core/loader/multiboot.c:359 +#: grub-core/loader/multiboot.c:369 +#: grub-core/loader/powerpc/ieee1275/linux.c:269 +#: grub-core/loader/powerpc/ieee1275/linux.c:340 +#: grub-core/loader/sparc64/ieee1275/linux.c:305 +#: grub-core/loader/sparc64/ieee1275/linux.c:380 grub-core/loader/xnu.c:350 +#: grub-core/loader/xnu.c:455 grub-core/loader/xnu.c:769 +#: grub-core/loader/xnu.c:883 grub-core/loader/xnu.c:1268 +#: grub-core/loader/xnu.c:1418 grub-core/loader/xnu.c:1444 +#: grub-core/video/readers/jpeg.c:812 grub-core/video/readers/png.c:1123 +msgid "filename expected" +msgstr "" + +#. TRANSLATORS: "embed" is a verb (command description). " +#: grub-core/commands/blocklist.c:154 grub-core/commands/cat.c:163 +#: grub-core/commands/configfile.c:65 grub-core/commands/configfile.c:68 +#: grub-core/commands/configfile.c:74 grub-core/commands/configfile.c:80 +#: grub-core/commands/configfile.c:86 grub-core/commands/hashsum.c:34 +#: grub-core/commands/legacycfg.c:834 grub-core/commands/legacycfg.c:841 +#: grub-core/commands/legacycfg.c:846 grub-core/commands/legacycfg.c:851 +#: grub-core/commands/macbless.c:222 grub-core/commands/minicmd.c:195 +#: grub-core/commands/syslinuxcfg.c:186 grub-core/commands/syslinuxcfg.c:194 +#: grub-core/commands/syslinuxcfg.c:200 grub-core/commands/syslinuxcfg.c:206 +#: grub-core/commands/testload.c:163 grub-core/efiemu/main.c:312 +#: grub-core/kern/emu/main.c:100 grub-core/kern/emu/main.c:103 +#: grub-core/loader/i386/bsd.c:2131 grub-core/loader/i386/bsd.c:2134 +#: grub-core/loader/i386/bsd.c:2137 +#: grub-core/loader/i386/coreboot/chainloader.c:505 +#: grub-core/loader/ia64/efi/linux.c:630 include/grub/util/install.h:62 +#: util/grub-glue-efi.c:52 util/grub-glue-efi.c:54 util/grub-glue-efi.c:56 +#: util/grub-install.c:254 util/grub-install.c:301 util/grub-mkfont.c:936 +#: util/grub-mkimage.c:68 util/grub-mkimage.c:75 util/grub-mkimage.c:77 +#: util/grub-mkimage.c:80 util/grub-mklayout.c:52 util/grub-mklayout.c:54 +#: util/grub-mkrescue.c:97 util/grub-mkrescue.c:101 util/grub-mkrescue.c:104 +#: util/grub-mkrescue.c:105 util/grub-mkrescue.c:106 +#: util/grub-mkstandalone.c:47 util/grub-mkstandalone.c:49 +#: util/grub-probe.c:684 util/grub-render-label.c:59 +#: util/grub-render-label.c:70 util/grub-render-label.c:72 util/grub-setup.c:78 +#: util/grub-setup.c:80 util/grub-setup.c:84 util/grub-syslinux2cfg.c:74 +#: util/grub-syslinux2cfg.c:147 util/grub-kbdcomp.in:29 +#: util/grub-mkconfig.in:60 +msgid "FILE" +msgstr "FILE" + +#: grub-core/commands/blocklist.c:154 +msgid "Print a block list." +msgstr "列印區塊清單。" + +#: grub-core/commands/boot.c:147 grub-core/commands/legacycfg.c:533 +#: grub-core/commands/legacycfg.c:574 grub-core/loader/arm64/linux.c:215 +#: grub-core/loader/i386/bsd.c:1793 grub-core/loader/i386/bsd.c:1894 +#: grub-core/loader/i386/bsd.c:2001 grub-core/loader/i386/bsd.c:2034 +#: grub-core/loader/i386/bsd.c:2083 grub-core/loader/i386/linux.c:1065 +#: grub-core/loader/i386/pc/linux.c:404 grub-core/loader/i386/xen.c:771 +#: grub-core/loader/i386/xen.c:855 grub-core/loader/ia64/efi/linux.c:581 +#: grub-core/loader/mips/linux.c:424 grub-core/loader/multiboot.c:373 +#: grub-core/loader/powerpc/ieee1275/linux.c:346 +#: grub-core/loader/sparc64/ieee1275/linux.c:386 grub-core/loader/xnu.c:563 +#: grub-core/loader/xnu.c:656 grub-core/loader/xnu.c:772 +#: grub-core/loader/xnu.c:886 grub-core/loader/xnu.c:1082 +#: grub-core/loader/xnu.c:1249 grub-core/loader/xnu.c:1280 +#: grub-core/loader/xnu.c:1421 +msgid "you need to load the kernel first" +msgstr "" + +#: grub-core/commands/boot.c:189 +msgid "Boot an operating system." +msgstr "啟動作業系統。" + +#: grub-core/commands/boottime.c:36 +#: grub-core/commands/i386/coreboot/cb_timestamps.c:108 +msgid "No boot time statistics is available\n" +msgstr "" + +#: grub-core/commands/boottime.c:59 +msgid "Show boot time statistics." +msgstr "" + +#: grub-core/commands/cacheinfo.c:40 +#, c-format +msgid "Disk cache statistics: hits = %lu (%lu.%02lu%%), misses = %lu\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:45 +msgid "No disk cache statistics available\n" +msgstr "" + +#: grub-core/commands/cacheinfo.c:56 +#, fuzzy +msgid "Get disk cache info." +msgstr "擷取裝置資訊。" + +#: grub-core/commands/cat.c:33 +msgid "Accept DOS-style CR/NL line endings." +msgstr "接受 DOS 風格的 CR/NL 列結尾。" + +#: grub-core/commands/cat.c:163 grub-core/commands/minicmd.c:195 +msgid "Show the contents of a file." +msgstr "顯示檔案的內容。" + +#: grub-core/commands/cmp.c:43 grub-core/commands/i386/pc/drivemap.c:239 +#: grub-core/commands/iorw.c:85 grub-core/commands/memrw.c:84 +#: grub-core/commands/password.c:75 grub-core/commands/password_pbkdf2.c:94 +#: grub-core/commands/regexp.c:113 grub-core/commands/verify.c:767 +#: grub-core/mmap/mmap.c:517 grub-core/net/dns.c:639 +msgid "two arguments expected" +msgstr "" + +#: grub-core/commands/cmp.c:45 +#, c-format +msgid "Compare file `%s' with `%s':\n" +msgstr "" + +#: grub-core/commands/cmp.c:54 +#, c-format +msgid "Files differ in size: %llu [%s], %llu [%s]\n" +msgstr "" + +#: grub-core/commands/cmp.c:81 +#, c-format +msgid "Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n" +msgstr "" + +#. TRANSLATORS: it's always exactly 2 files. +#: grub-core/commands/cmp.c:93 +msgid "The files are identical.\n" +msgstr "" + +#: grub-core/commands/cmp.c:113 +msgid "FILE1 FILE2" +msgstr "FILE1 FILE2" + +#: grub-core/commands/cmp.c:113 +msgid "Compare two files." +msgstr "比較兩個檔案。" + +#: grub-core/commands/configfile.c:65 +msgid "Load another config file." +msgstr "載入另一個組態檔。" + +#: grub-core/commands/configfile.c:69 grub-core/commands/configfile.c:87 +msgid "Load another config file without changing context." +msgstr "載入另一個組態檔而不變更情境。" + +#: grub-core/commands/configfile.c:75 +#, fuzzy +msgid "" +"Load another config file without changing context but take only menu entries." +msgstr "載入另一個組態檔而不變更情境,僅擷取選單條目。" + +#: grub-core/commands/configfile.c:81 +#, fuzzy +msgid "Load another config file but take only menu entries." +msgstr "載入另一個組態檔而不變更情境,僅擷取選單條目。" + +#: grub-core/commands/date.c:141 +msgid "[[year-]month-day] [hour:minute[:second]]" +msgstr "[[year-]month-day] [hour:minute[:second]]" + +#: grub-core/commands/date.c:142 +#, fuzzy +msgid "Display/set current datetime." +msgstr "顯示/設定目前日期時間的指令。" + +#: grub-core/commands/echo.c:30 +msgid "Do not output the trailing newline." +msgstr "不要輸出曳尾換列。" + +#: grub-core/commands/echo.c:31 +msgid "Enable interpretation of backslash escapes." +msgstr "啟用反斜線跳出解譯。" + +#: grub-core/commands/echo.c:134 +msgid "[-e|-n] STRING" +msgstr "[-e|-n] STRING" + +#: grub-core/commands/echo.c:134 +msgid "Display a line of text." +msgstr "顯示文字的一列。" + +#: grub-core/commands/efi/efifwsetup.c:82 +msgid "Reboot into firmware setup menu." +msgstr "" + +#: grub-core/commands/efi/fixvideo.c:107 +msgid "Fix video problem." +msgstr "修正視訊問題。" + +#: grub-core/commands/efi/loadbios.c:52 +msgid "ROM image is present." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:70 +msgid "Can't enable ROM area." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:209 +msgid "" +"Create BIOS-like structures for backward compatibility with existing OS." +msgstr "" + +#: grub-core/commands/efi/loadbios.c:214 +msgid "BIOS_DUMP [INT10_DUMP]" +msgstr "" + +#: grub-core/commands/efi/loadbios.c:215 +msgid "Load BIOS dump." +msgstr "載入 BIOS 傾印。" + +#: grub-core/commands/eval.c:63 +#, fuzzy +msgid "STRING ..." +msgstr "STRING" + +#: grub-core/commands/eval.c:64 +msgid "Evaluate arguments as GRUB commands" +msgstr "" + +#: grub-core/commands/file.c:39 +msgid "Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:42 +msgid "Check if FILE can be booted as x86_64 Xen unprivileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:44 +msgid "Check if FILE can be used as Xen x86 privileged guest kernel" +msgstr "" + +#: grub-core/commands/file.c:46 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot kernel" +msgstr "載入 multiboot 內核。" + +#: grub-core/commands/file.c:48 +#, fuzzy +msgid "Check if FILE can be used as x86 multiboot2 kernel" +msgstr "載入 multiboot 2 內核。" + +#: grub-core/commands/file.c:50 +msgid "Check if FILE is ARM Linux" +msgstr "" + +#: grub-core/commands/file.c:52 +msgid "Check if FILE is ARM64 Linux" +msgstr "" + +#: grub-core/commands/file.c:54 +msgid "Check if FILE is IA64 Linux" +msgstr "" + +#: grub-core/commands/file.c:56 +msgid "Check if FILE is MIPS Linux" +msgstr "" + +#: grub-core/commands/file.c:58 +msgid "Check if FILE is MIPSEL Linux" +msgstr "" + +#: grub-core/commands/file.c:60 +msgid "Check if FILE is SPARC64 Linux" +msgstr "" + +#: grub-core/commands/file.c:62 +msgid "Check if FILE is POWERPC Linux" +msgstr "" + +#: grub-core/commands/file.c:64 +msgid "Check if FILE is x86 Linux" +msgstr "" + +#: grub-core/commands/file.c:66 +msgid "Check if FILE is x86 Linux supporting 32-bit protocol" +msgstr "" + +#: grub-core/commands/file.c:68 +msgid "Check if FILE is x86 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:70 +msgid "Check if FILE is i386 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:72 +msgid "Check if FILE is x86_64 kFreeBSD" +msgstr "" + +#: grub-core/commands/file.c:75 +msgid "Check if FILE is x86 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:77 +msgid "Check if FILE is i386 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:79 +msgid "Check if FILE is x86_64 kNetBSD" +msgstr "" + +#: grub-core/commands/file.c:82 +msgid "Check if FILE is i386 EFI file" +msgstr "" + +#: grub-core/commands/file.c:84 +msgid "Check if FILE is x86_64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:86 +msgid "Check if FILE is IA64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:88 +msgid "Check if FILE is ARM64 EFI file" +msgstr "" + +#: grub-core/commands/file.c:90 +msgid "Check if FILE is ARM EFI file" +msgstr "" + +#: grub-core/commands/file.c:92 +msgid "Check if FILE is hiberfil.sys in hibernated state" +msgstr "" + +#: grub-core/commands/file.c:94 +msgid "Check if FILE is x86_64 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:96 +msgid "Check if FILE is i386 XNU (Mac OS X kernel)" +msgstr "" + +#: grub-core/commands/file.c:98 +msgid "Check if FILE is XNU (Mac OS X kernel) hibernated image" +msgstr "" + +#: grub-core/commands/file.c:100 +msgid "Check if FILE is BIOS bootsector" +msgstr "" + +#. TRANSLATORS: it's a standalone boolean value, +#. opposite of "true". +#: grub-core/commands/file.c:662 grub-core/commands/i386/cmostest.c:63 +#: grub-core/commands/i386/cpuid.c:71 grub-core/commands/keystatus.c:83 +#: grub-core/commands/keystatus.c:87 grub-core/commands/keystatus.c:96 +#: grub-core/commands/test.c:436 grub-core/commands/true.c:39 +#: grub-core/script/execute.c:246 grub-core/script/execute.c:1017 +msgid "false" +msgstr "" + +#: grub-core/commands/file.c:671 +#, fuzzy +msgid "OPTIONS FILE" +msgstr "[OPTIONS] DISK" + +#: grub-core/commands/file.c:672 +msgid "Check if FILE is of specified type." +msgstr "" + +#. TRANSLATORS: It means that the specified partition e.g. +#. hd0,msdos1=/dev/sda1 doesn't exist. +#: grub-core/commands/gptsync.c:140 grub-core/kern/disk.c:258 +msgid "no such partition" +msgstr "" + +#: grub-core/commands/gptsync.c:240 +#, c-format +msgid "New MBR is written to `%s'\n" +msgstr "" + +#: grub-core/commands/gptsync.c:252 +msgid "DEVICE [PARTITION[+/-[TYPE]]] ..." +msgstr "DEVICE [PARTITION[+/-[TYPE]]] ..." + +#. TRANSLATORS: MBR type is one-byte partition +#. type id. +#: grub-core/commands/gptsync.c:255 +msgid "" +"Fill hybrid MBR of GPT drive DEVICE. Specified partitions will be a part of " +"hybrid MBR. Up to 3 partitions are allowed. TYPE is an MBR type. + means " +"that partition is active. Only one partition can be active." +msgstr "" +"填入 GPT 裝置 DEVICE 的混合式 MBR。指定的分割區會成為混合式 MBR 的一部分。最" +"多允許 3 個分割區。TYPE 為 MBR 類型。+ 代表分割區為 active,僅有一個分割區能" +"有 active 標籤。" + +#: grub-core/commands/halt.c:40 +msgid "" +"Halts the computer. This command does not work on all firmware " +"implementations." +msgstr "關閉電腦。這個指令不是對所有的韌體實作都有用。" + +#: grub-core/commands/hashsum.c:32 +msgid "Specify hash to use." +msgstr "指定要使用的雜湊。" + +#: grub-core/commands/hashsum.c:32 +msgid "HASH" +msgstr "HASH" + +#: grub-core/commands/hashsum.c:33 +msgid "Check hashes of files with hash list FILE." +msgstr "" + +#: grub-core/commands/hashsum.c:35 +msgid "Base directory for hash list." +msgstr "雜湊清單的基礎目錄。" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: grub-core/commands/hashsum.c:35 grub-core/commands/ls.c:150 +#: grub-core/commands/macbless.c:226 grub-core/commands/syslinuxcfg.c:51 +#: grub-core/commands/syslinuxcfg.c:54 grub-core/kern/emu/main.c:106 +#: include/grub/util/install.h:48 include/grub/util/install.h:51 +#: include/grub/util/install.h:54 include/grub/util/install.h:57 +#: util/grub-install.c:250 util/grub-install.c:252 util/grub-install.c:297 +#: util/grub-install.c:299 util/grub-mkimage.c:64 util/grub-mkimage.c:67 +#: util/grub-mknetdir.c:46 util/grub-mknetdir.c:48 util/grub-mkrescue.c:99 +#: util/grub-setup.c:82 util/grub-syslinux2cfg.c:63 util/grub-syslinux2cfg.c:65 +#: util/grub-syslinux2cfg.c:67 util/grub-syslinux2cfg.c:71 +#: util/grub-reboot.in:52 util/grub-set-default.in:54 +msgid "DIR" +msgstr "DIR" + +#: grub-core/commands/hashsum.c:37 +msgid "Don't stop after first error." +msgstr "在第一個錯誤後不要停止。" + +#: grub-core/commands/hashsum.c:38 +msgid "Uncompress file before checksumming." +msgstr "在處理校驗計算碼前解壓縮檔案。" + +#: grub-core/commands/hashsum.c:165 +#, c-format +msgid "%s: READ ERROR\n" +msgstr "" + +#: grub-core/commands/hashsum.c:179 +#, c-format +msgid "%s: HASH MISMATCH\n" +msgstr "" + +#: grub-core/commands/hashsum.c:190 +#, c-format +msgid "%s: OK\n" +msgstr "" + +#: grub-core/commands/hashsum.c:284 +#, fuzzy +msgid "-h HASH [-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#. TRANSLATORS: "hash checksum" is just to +#. be a bit more precise, you can treat it as +#. just "hash". +#: grub-core/commands/hashsum.c:289 grub-core/commands/hashsum.c:294 +#: grub-core/commands/hashsum.c:299 grub-core/commands/hashsum.c:304 +#: grub-core/commands/hashsum.c:309 grub-core/commands/hashsum.c:315 +msgid "Compute or check hash checksum." +msgstr "計算或檢查雜湊校驗計算碼。" + +#: grub-core/commands/hashsum.c:292 grub-core/commands/hashsum.c:297 +#: grub-core/commands/hashsum.c:302 grub-core/commands/hashsum.c:307 +#: grub-core/commands/hashsum.c:313 +msgid "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" +msgstr "[-c FILE [-p PREFIX]] [FILE1 [FILE2 ...]]" + +#: grub-core/commands/hdparm.c:33 +msgid "" +"Set Advanced Power Management\n" +"(1=low, ..., 254=high, 255=off)." +msgstr "" +"設定進階能源管理\n" +"(1=低,...254=高,255=關)。" + +#: grub-core/commands/hdparm.c:36 +#, fuzzy +msgid "Display power mode." +msgstr "檢查能源模式。" + +#: grub-core/commands/hdparm.c:37 +msgid "Freeze ATA security settings until reset." +msgstr "凍結 ATA 安全設定直至重設為止。" + +#: grub-core/commands/hdparm.c:39 +#, fuzzy +msgid "Display SMART health status." +msgstr "檢查 SMART 健康狀態。" + +#: grub-core/commands/hdparm.c:40 +msgid "" +"Set Automatic Acoustic Management\n" +"(0=off, 128=quiet, ..., 254=fast)." +msgstr "" +"設定自動聽覺管理\n" +"(0=關,128=安靜,...254=快)。" + +#: grub-core/commands/hdparm.c:43 +msgid "" +"Set standby timeout\n" +"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)." +msgstr "" +"設定待機逾時期\n" +"(0=關,1=5秒,2=10秒,...240=20分,241=30分...)。" + +#: grub-core/commands/hdparm.c:46 +msgid "Set drive to standby mode." +msgstr "設定裝置為待機模式。" + +#: grub-core/commands/hdparm.c:47 +msgid "Set drive to sleep mode." +msgstr "設定裝置為睡眠模式。" + +#: grub-core/commands/hdparm.c:48 +msgid "Print drive identity and settings." +msgstr "列印裝置識別與設定。" + +#: grub-core/commands/hdparm.c:50 +#, fuzzy +msgid "Show raw contents of ATA IDENTIFY sector." +msgstr "傾印 ATA IDENTIFY 磁區內容。" + +#: grub-core/commands/hdparm.c:52 +msgid "Disable/enable SMART (0/1)." +msgstr "停用/啟用 SMART (0/1)。" + +#: grub-core/commands/hdparm.c:53 +msgid "Do not print messages." +msgstr "不要列印訊息。" + +#: grub-core/commands/hdparm.c:286 grub-core/commands/iorw.c:47 +#: grub-core/commands/legacycfg.c:760 grub-core/commands/legacycfg.c:812 +#: grub-core/commands/macbless.c:190 grub-core/commands/memrw.c:47 +#: grub-core/commands/search.c:304 grub-core/commands/search_wrap.c:179 +#: grub-core/commands/setpci.c:243 grub-core/commands/sleep.c:71 +#: grub-core/commands/verify.c:681 grub-core/commands/verify.c:733 +#: grub-core/fs/zfs/zfsinfo.c:279 grub-core/fs/zfs/zfsinfo.c:358 +#: grub-core/gettext/gettext.c:492 grub-core/kern/corecmd.c:65 +#: grub-core/kern/corecmd.c:79 grub-core/mmap/mmap.c:430 +#: grub-core/net/dns.c:713 grub-core/net/dns.c:745 grub-core/net/net.c:694 +#: grub-core/net/net.c:1052 grub-core/normal/context.c:194 +#: grub-core/script/execute.c:130 grub-core/term/gfxterm_background.c:136 +msgid "one argument expected" +msgstr "" + +#: grub-core/commands/hdparm.c:440 +msgid "[OPTIONS] DISK" +msgstr "[OPTIONS] DISK" + +#: grub-core/commands/hdparm.c:441 +msgid "Get/set ATA disk parameters." +msgstr "取得/設定 ATA 磁碟參數。" + +#: grub-core/commands/help.c:132 grub-core/gnulib/argp-help.c:1646 +#: grub-core/lib/arg.c:109 +msgid "Usage:" +msgstr "用法:" + +#: grub-core/commands/help.c:146 +msgid "[PATTERN ...]" +msgstr "[PATTERN ...]" + +#: grub-core/commands/help.c:147 +msgid "Show a help message." +msgstr "顯示幫助訊息。" + +#: grub-core/commands/hexdump.c:31 +msgid "Skip offset bytes from the beginning of file." +msgstr "跳過檔案開頭的偏移位元組。" + +#: grub-core/commands/hexdump.c:33 +msgid "Read only LENGTH bytes." +msgstr "僅讀取 LENGTH 位元組。" + +#: grub-core/commands/hexdump.c:125 +msgid "[OPTIONS] FILE_OR_DEVICE" +msgstr "[OPTIONS] FILE_OR_DEVICE" + +#: grub-core/commands/hexdump.c:126 +#, fuzzy +msgid "Show raw contents of a file or memory." +msgstr "傾印檔案或記憶體的內容。" + +#: grub-core/commands/i386/cmosdump.c:58 +msgid "Show raw dump of the CMOS contents." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:108 +#: grub-core/commands/i386/cmostest.c:111 +#: grub-core/commands/i386/cmostest.c:114 +msgid "BYTE:BIT" +msgstr "" + +#: grub-core/commands/i386/cmostest.c:109 +msgid "Test bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/cmostest.c:112 +msgid "Clear bit at BYTE:BIT in CMOS." +msgstr "" + +#. TRANSLATORS: A bit may be either set (1) or clear (0). +#: grub-core/commands/i386/cmostest.c:116 +msgid "Set bit at BYTE:BIT in CMOS." +msgstr "" + +#: grub-core/commands/i386/coreboot/cb_timestamps.c:120 +msgid "Show coreboot boot time statistics." +msgstr "" + +#: grub-core/commands/i386/coreboot/cbls.c:137 +#, fuzzy +msgid "List coreboot tables." +msgstr "列出目前的變數。" + +#. TRANSLATORS: "(default)" at the end means that this option is used if +#. no argument is specified. +#: grub-core/commands/i386/cpuid.c:36 +#, fuzzy +msgid "Check if CPU supports 64-bit (long) mode (default)." +msgstr "檢查 long 模式旗幟 (預設)。" + +#: grub-core/commands/i386/cpuid.c:37 +msgid "Check if CPU supports Physical Address Extension." +msgstr "" + +#: grub-core/commands/i386/cpuid.c:119 +msgid "Check for CPU features." +msgstr "檢查 CPU 功能。" + +#. TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if +#. your language doesn't have an equivalent of "mapping" you can +#. use the word like "rerouting". +#. +#: grub-core/commands/i386/pc/drivemap.c:43 +msgid "Show the current mappings." +msgstr "顯示目前的映射關係。" + +#: grub-core/commands/i386/pc/drivemap.c:44 +msgid "Reset all mappings to the default values." +msgstr "將所有映射關係重設為預設值。" + +#: grub-core/commands/i386/pc/drivemap.c:45 +msgid "Perform both direct and reverse mappings." +msgstr "執行直接映射關係以及反轉映射關係。" + +#: grub-core/commands/i386/pc/drivemap.c:184 +msgid "No drives have been remapped" +msgstr "" + +#. TRANSLATORS: This is the header of mapping list. +#. On the left is how OS will see the disks and +#. on the right current GRUB vision. +#: grub-core/commands/i386/pc/drivemap.c:191 +msgid "OS disk #num ------> GRUB/BIOS device" +msgstr "" + +#: grub-core/commands/i386/pc/drivemap.c:413 +msgid "-l | -r | [-s] grubdev osdisk." +msgstr "-l | -r | [-s] grubdev osdisk。" + +#: grub-core/commands/i386/pc/drivemap.c:414 +msgid "Manage the BIOS drive mappings." +msgstr "管理 BIOS 裝置映射關係。" + +#: grub-core/commands/i386/pc/halt.c:31 +msgid "Do not use APM to halt the computer." +msgstr "不要使用 APM 來關閉電腦。" + +#: grub-core/commands/i386/pc/halt.c:119 +msgid "Halt the system, if possible using APM." +msgstr "關閉系統,如果可能的話使用 APM。" + +#: grub-core/commands/i386/pc/lsapm.c:75 +msgid "no APM found" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:77 +#, c-format +msgid "" +"Version %u.%u\n" +"32-bit CS = 0x%x, len = 0x%x, offset = 0x%x\n" +"16-bit CS = 0x%x, len = 0x%x\n" +"DS = 0x%x, len = 0x%x\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:86 +msgid "16-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:87 +msgid "16-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:89 +msgid "32-bit protected interface supported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:90 +msgid "32-bit protected interface unsupported\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:92 +msgid "CPU Idle slows down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:93 +msgid "CPU Idle doesn't slow down processor\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM disabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:95 +msgid "APM enabled\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM disengaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:97 +msgid "APM engaged\n" +msgstr "" + +#: grub-core/commands/i386/pc/lsapm.c:107 +msgid "Show APM information." +msgstr "顯示 APM 資訊。" + +#. TRANSLATORS: It's musical notes, not the notes +#. you take. Play command expects arguments which can +#. be either a filename or tempo+notes. +#. This error happens if none is specified. +#: grub-core/commands/i386/pc/play.c:88 +msgid "filename or tempo and notes expected" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:113 grub-core/commands/i386/pc/play.c:144 +#, fuzzy, c-format +msgid "Invalid tempo in %s" +msgstr "無效指令 %s。\n" + +#: grub-core/commands/i386/pc/play.c:151 grub-core/commands/macbless.c:172 +#: grub-core/fs/archelp.c:260 grub-core/fs/bfs.c:621 grub-core/fs/bfs.c:704 +#: grub-core/fs/btrfs.c:1305 grub-core/fs/btrfs.c:1334 +#: grub-core/fs/btrfs.c:1378 grub-core/fs/btrfs.c:1461 +#: grub-core/fs/btrfs.c:1485 grub-core/fs/fshelp.c:257 grub-core/fs/jfs.c:689 +#: grub-core/fs/minix.c:426 grub-core/fs/ufs.c:544 grub-core/fs/zfs/zfs.c:2083 +#: grub-core/fs/zfs/zfs.c:2095 grub-core/fs/zfs/zfs.c:2301 +#: grub-core/net/http.c:120 +#, c-format +msgid "file `%s' not found" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:162 grub-core/commands/i386/pc/play.c:171 +#: grub-core/kern/misc.c:418 grub-core/script/execute.c:137 +#: grub-core/script/execute.c:243 +msgid "unrecognized number" +msgstr "" + +#: grub-core/commands/i386/pc/play.c:190 +msgid "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " +msgstr "FILE | TEMPO [PITCH1 DURATION1] [PITCH2 DURATION2] ... " + +#: grub-core/commands/i386/pc/play.c:191 +msgid "Play a tune." +msgstr "播放音調。" + +#: grub-core/commands/i386/pc/sendkey.c:39 +msgid "set numlock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:40 +#, fuzzy +msgid "set capslock mode" +msgstr "插入模組。" + +#: grub-core/commands/i386/pc/sendkey.c:41 +msgid "set scrolllock mode" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:42 +#, fuzzy +msgid "set insert mode" +msgstr "插入模組。" + +#: grub-core/commands/i386/pc/sendkey.c:43 +#, fuzzy +msgid "set pause mode" +msgstr "插入模組。" + +#: grub-core/commands/i386/pc/sendkey.c:44 +msgid "press left shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:45 +msgid "press right shift" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:46 +msgid "press SysRq" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:47 +msgid "press NumLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:48 +msgid "press CapsLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:49 +msgid "press ScrollLock key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:50 +msgid "press Insert key" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:51 +msgid "press left alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:52 +msgid "press right alt" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:53 +msgid "press left ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:54 +msgid "press right ctrl" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:55 +msgid "don't update LED state" +msgstr "" + +#: grub-core/commands/i386/pc/sendkey.c:372 +msgid "[KEYSTROKE1] [KEYSTROKE2] ..." +msgstr "" + +#. TRANSLATORS: It can emulate multiple +#. keypresses. +#: grub-core/commands/i386/pc/sendkey.c:375 +msgid "Emulate a keystroke sequence" +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:34 +msgid "Run `go' to resume GRUB." +msgstr "" + +#: grub-core/commands/ieee1275/suspend.c:45 +#, fuzzy +msgid "Return to IEEE1275 prompt." +msgstr "返回 Open Firmware 提示。" + +#: grub-core/commands/iorw.c:34 grub-core/commands/memrw.c:33 +#: grub-core/commands/setpci.c:73 +msgid "Save read value into variable VARNAME." +msgstr "儲存讀取值至變數 VARNAME。" + +#: grub-core/commands/iorw.c:35 grub-core/commands/memrw.c:34 +#: grub-core/commands/probe.c:40 grub-core/commands/search_wrap.c:40 +#: grub-core/commands/setpci.c:74 grub-core/commands/tr.c:32 +msgid "VARNAME" +msgstr "VARNAME" + +#: grub-core/commands/iorw.c:123 grub-core/commands/iorw.c:127 +#: grub-core/commands/iorw.c:131 grub-core/gdb/gdb.c:79 +msgid "PORT" +msgstr "PORT" + +#: grub-core/commands/iorw.c:123 +#, fuzzy +msgid "Read 8-bit value from PORT." +msgstr "從 PORT 讀取位元組。" + +#: grub-core/commands/iorw.c:127 +#, fuzzy +msgid "Read 16-bit value from PORT." +msgstr "從 PORT 讀取位元組。" + +#: grub-core/commands/iorw.c:131 +#, fuzzy +msgid "Read 32-bit value from PORT." +msgstr "從 PORT 讀取位元組。" + +#: grub-core/commands/iorw.c:135 grub-core/commands/iorw.c:139 +msgid "PORT VALUE [MASK]" +msgstr "PORT VALUE [MASK]" + +#: grub-core/commands/iorw.c:136 +#, fuzzy +msgid "Write 8-bit VALUE to PORT." +msgstr "將位元組 VALUE 寫入 PORT。" + +#: grub-core/commands/iorw.c:140 +#, fuzzy +msgid "Write 16-bit VALUE to PORT." +msgstr "將位元組 VALUE 寫入 PORT。" + +#: grub-core/commands/iorw.c:143 grub-core/commands/memrw.c:137 +#: grub-core/commands/memrw.c:141 grub-core/commands/memrw.c:145 +msgid "ADDR VALUE [MASK]" +msgstr "ADDR VALUE [MASK]" + +#: grub-core/commands/iorw.c:144 +#, fuzzy +msgid "Write 32-bit VALUE to PORT." +msgstr "將位元組 VALUE 寫入 PORT。" + +#: grub-core/commands/keylayouts.c:215 grub-core/commands/loadenv.c:60 +#: grub-core/commands/nativedisk.c:188 grub-core/efiemu/main.c:235 +#: grub-core/font/font.c:428 grub-core/gfxmenu/gfxmenu.c:63 +#: grub-core/kern/device.c:42 grub-core/kern/dl.c:740 +#, c-format +msgid "variable `%s' isn't set" +msgstr "" + +#: grub-core/commands/keylayouts.c:301 +msgid "Load a keyboard layout." +msgstr "載入鍵盤配置。" + +#. TRANSLATORS: "Check" in a sense that if this key is pressed then +#. "true" is returned, otherwise "false". +#: grub-core/commands/keystatus.c:32 +msgid "Check Shift key." +msgstr "檢查 Shift 鍵。" + +#: grub-core/commands/keystatus.c:33 +msgid "Check Control key." +msgstr "檢查 Ctrl 鍵。" + +#: grub-core/commands/keystatus.c:34 +msgid "Check Alt key." +msgstr "檢查 Alt 鍵。" + +#. TRANSLATORS: there are 3 modifiers. +#: grub-core/commands/keystatus.c:106 +msgid "Check key modifier status." +msgstr "檢查按鍵的修飾鍵狀態。" + +#: grub-core/commands/legacycfg.c:512 grub-core/commands/legacycfg.c:526 +#: grub-core/commands/legacycfg.c:546 grub-core/commands/legacycfg.c:559 +#: grub-core/commands/time.c:43 grub-core/script/function.c:109 +#: util/grub-file.c:100 util/grub-fstest.c:57 util/grub-mount.c:69 +#, fuzzy, c-format +msgid "can't find command `%s'" +msgstr "無法尋找指令 %s" + +#: grub-core/commands/legacycfg.c:813 grub-core/normal/auth.c:225 +#: util/grub-mkpasswd-pbkdf2.c:139 +msgid "Enter password: " +msgstr "輸入密碼:" + +#. TRANSLATORS: "legacy config" means +#. "config as used by grub-legacy". +#: grub-core/commands/legacycfg.c:837 +msgid "Parse legacy config in same context" +msgstr "於相同情境解析舊式組態" + +#: grub-core/commands/legacycfg.c:842 +msgid "Parse legacy config in new context" +msgstr "於新情境解析舊式組態" + +#: grub-core/commands/legacycfg.c:847 +#, fuzzy +msgid "Parse legacy config in same context taking only menu entries" +msgstr "於相同情境解析舊式組態,僅擷取條目" + +#: grub-core/commands/legacycfg.c:852 +#, fuzzy +msgid "Parse legacy config in new context taking only menu entries" +msgstr "於新情境解析舊式組態,僅擷取條目" + +#: grub-core/commands/legacycfg.c:856 +msgid "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" +msgstr "[--no-mem-option] [--type=TYPE] FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:857 +#, fuzzy +msgid "Simulate grub-legacy `kernel' command" +msgstr "模擬 grub-legacy 內核指令" + +#: grub-core/commands/legacycfg.c:861 grub-core/commands/legacycfg.c:865 +msgid "FILE [ARG ...]" +msgstr "FILE [ARG ...]" + +#: grub-core/commands/legacycfg.c:862 +#, fuzzy +msgid "Simulate grub-legacy `initrd' command" +msgstr "模擬 grub-legacy initrd 指令" + +#: grub-core/commands/legacycfg.c:866 +#, fuzzy +msgid "Simulate grub-legacy `modulenounzip' command" +msgstr "模擬 grub-legacy modulenounzip 指令" + +#: grub-core/commands/legacycfg.c:870 grub-core/commands/legacycfg.c:875 +msgid "[--md5] PASSWD [FILE]" +msgstr "[--md5] PASSWD [FILE]" + +#: grub-core/commands/legacycfg.c:871 +#, fuzzy +msgid "Simulate grub-legacy `password' command" +msgstr "模擬 grub-legacy password 指令" + +#: grub-core/commands/legacycfg.c:876 +#, fuzzy +msgid "Simulate grub-legacy `password' command in menu entry mode" +msgstr "於選單條目模式模擬 grub-legacy password 指令" + +#. TRANSLATORS: This option is used to override default filename +#. for loading and storing environment. +#: grub-core/commands/loadenv.c:37 +msgid "Specify filename." +msgstr "指定檔名。" + +#: grub-core/commands/loadenv.c:39 +msgid "Skip signature-checking of the environment file." +msgstr "" + +#: grub-core/commands/loadenv.c:449 +#, fuzzy +msgid "[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]" +msgstr "[-f FILE] variable_name [...]" + +#: grub-core/commands/loadenv.c:450 +msgid "Load variables from environment block file." +msgstr "從環境區塊檔載入變數。" + +#: grub-core/commands/loadenv.c:453 +msgid "[-f FILE]" +msgstr "[-f FILE]" + +#: grub-core/commands/loadenv.c:454 +msgid "List variables from environment block file." +msgstr "從環境區塊檔列出變數。" + +#: grub-core/commands/loadenv.c:458 +msgid "[-f FILE] variable_name [...]" +msgstr "[-f FILE] variable_name [...]" + +#: grub-core/commands/loadenv.c:459 +msgid "Save variables to environment block file." +msgstr "儲存變數至環境區塊檔。" + +#: grub-core/commands/ls.c:40 +msgid "Show a long list with more detailed information." +msgstr "顯示有更多詳細資訊的長清單。" + +#: grub-core/commands/ls.c:41 +msgid "Print sizes in a human readable format." +msgstr "以人類可理解的格式列印大小。" + +#: grub-core/commands/ls.c:42 +msgid "List all files." +msgstr "列出所有檔案。" + +#: grub-core/commands/ls.c:73 +msgid "Network protocols:" +msgstr "" + +#: grub-core/commands/ls.c:286 +msgid "[-l|-h|-a] [FILE ...]" +msgstr "[-l|-h|-a] [FILE ...]" + +#: grub-core/commands/ls.c:287 +msgid "List devices and files." +msgstr "列出裝置與檔案。" + +#: grub-core/commands/lsacpi.c:255 +#, fuzzy +msgid "Show version 1 tables only." +msgstr "僅顯示 v1 表。" + +#: grub-core/commands/lsacpi.c:256 +#, fuzzy +msgid "Show version 2 and version 3 tables only." +msgstr "僅顯示 v2 與 v3 表。" + +#: grub-core/commands/lsacpi.c:306 +msgid "Show ACPI information." +msgstr "顯示 ACPI 資訊。" + +#: grub-core/commands/lsmmap.c:31 +msgid "available RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:32 +msgid "reserved RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory where ACPI tables are stored +#. and which can be used by OS once it loads ACPI tables. +#: grub-core/commands/lsmmap.c:35 +msgid "ACPI reclaimable RAM" +msgstr "" + +#. TRANSLATORS: this refers to memory which ACPI-compliant OS +#. is required to save accross hibernations. +#: grub-core/commands/lsmmap.c:38 +msgid "ACPI non-volatile storage RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:39 +msgid "faulty RAM (BadRAM)" +msgstr "" + +#: grub-core/commands/lsmmap.c:40 +msgid "persistent RAM" +msgstr "" + +#: grub-core/commands/lsmmap.c:41 +msgid "persistent RAM (legacy)" +msgstr "" + +#: grub-core/commands/lsmmap.c:42 +msgid "RAM holding coreboot tables" +msgstr "" + +#: grub-core/commands/lsmmap.c:43 +msgid "RAM holding firmware code" +msgstr "" + +#: grub-core/commands/lsmmap.c:52 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, %s\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:55 +#, c-format +msgid "base_addr = 0x%llx, length = 0x%llx, type = 0x%x\n" +msgstr "" + +#: grub-core/commands/lsmmap.c:79 +msgid "List memory map provided by firmware." +msgstr "列出韌體提供的記憶體映射。" + +#: grub-core/commands/lspci.c:232 +msgid "List PCI devices." +msgstr "列出 PCI 裝置。" + +#: grub-core/commands/macbless.c:224 +msgid "Bless FILE of HFS or HFS+ partition for intel macs." +msgstr "" + +#: grub-core/commands/macbless.c:228 +msgid "Bless DIR of HFS or HFS+ partition for PPC macs." +msgstr "" + +#: grub-core/commands/memrw.c:125 grub-core/commands/memrw.c:129 +#: grub-core/commands/memrw.c:133 +msgid "ADDR" +msgstr "ADDR" + +#: grub-core/commands/memrw.c:125 +#, fuzzy +msgid "Read 8-bit value from ADDR." +msgstr "從 ADDR 讀取位元組。" + +#: grub-core/commands/memrw.c:129 +#, fuzzy +msgid "Read 16-bit value from ADDR." +msgstr "從 ADDR 讀取位元組。" + +#: grub-core/commands/memrw.c:133 +#, fuzzy +msgid "Read 32-bit value from ADDR." +msgstr "從 ADDR 讀取位元組。" + +#: grub-core/commands/memrw.c:138 +#, fuzzy +msgid "Write 8-bit VALUE to ADDR." +msgstr "將位元組 VALUE 寫入 ADDR。" + +#: grub-core/commands/memrw.c:142 +#, fuzzy +msgid "Write 16-bit VALUE to ADDR." +msgstr "將位元組 VALUE 寫入 ADDR。" + +#: grub-core/commands/memrw.c:146 +#, fuzzy +msgid "Write 32-bit VALUE to ADDR." +msgstr "將位元組 VALUE 寫入 ADDR。" + +#: grub-core/commands/menuentry.c:31 +msgid "Menu entry type." +msgstr "選單條目類型。" + +#: grub-core/commands/menuentry.c:31 grub-core/commands/menuentry.c:38 +#: grub-core/commands/menuentry.c:39 grub-core/gettext/gettext.c:520 +#: util/grub-fstest.c:520 util/grub-install.c:291 util/grub-install.c:304 +#: util/grub-mknetdir.c:51 util/grub-mkrescue.c:109 util/grub-mkrescue.c:110 +#: util/grub-mount.c:453 util/grub-render-label.c:65 +msgid "STRING" +msgstr "STRING" + +#: grub-core/commands/menuentry.c:33 +#, fuzzy +msgid "List of users allowed to boot this entry." +msgstr "使用者可以藉由此條目開機。" + +#: grub-core/commands/menuentry.c:33 +msgid "USERNAME[,USERNAME]" +msgstr "" + +#: grub-core/commands/menuentry.c:36 +#, fuzzy +msgid "Keyboard key to quickly boot this entry." +msgstr "此條目的鍵盤按鍵。" + +#: grub-core/commands/menuentry.c:36 +msgid "KEYBOARD_KEY" +msgstr "" + +#: grub-core/commands/menuentry.c:38 +msgid "Use STRING as menu entry body." +msgstr "" + +#: grub-core/commands/menuentry.c:39 +#, fuzzy +msgid "Menu entry identifier." +msgstr "選單條目類型。" + +#. TRANSLATORS: menu entry can either be bootable by anyone or only by +#. handful of users. By default when security is active only superusers can +#. boot a given menu entry. With --unrestricted (this option) +#. anyone can boot it. +#: grub-core/commands/menuentry.c:44 +msgid "This entry can be booted by any user." +msgstr "" + +#: grub-core/commands/menuentry.c:323 grub-core/commands/menuentry.c:328 +#: grub-core/tests/test_blockarg.c:46 +msgid "BLOCK" +msgstr "BLOCK" + +#: grub-core/commands/menuentry.c:323 +#, fuzzy +msgid "Define a menu entry." +msgstr "定義選單條目。" + +#: grub-core/commands/menuentry.c:328 +msgid "Define a submenu." +msgstr "定義子選單。" + +#. TRANSLATORS: this is module list header. Name +#. is module name, Ref Count is a reference counter +#. (how many modules or open descriptors use it). +#. Dependencies are the other modules it uses. +#. +#: grub-core/commands/minicmd.c:159 +msgid "Name\tRef Count\tDependencies\n" +msgstr "" + +#: grub-core/commands/minicmd.c:198 +msgid "Show this message." +msgstr "顯示這個訊息。" + +#: grub-core/commands/minicmd.c:201 +msgid "ADDR [SIZE]" +msgstr "" + +#: grub-core/commands/minicmd.c:201 +#, fuzzy +msgid "Show memory contents." +msgstr "顯示檔案的內容。" + +#: grub-core/commands/minicmd.c:204 grub-core/kern/corecmd.c:188 +#: util/grub-install.c:275 +msgid "MODULE" +msgstr "MODULE" + +#: grub-core/commands/minicmd.c:204 +msgid "Remove a module." +msgstr "移除模組。" + +#: grub-core/commands/minicmd.c:207 +msgid "Show loaded modules." +msgstr "顯示載入的模組。" + +#: grub-core/commands/minicmd.c:210 +msgid "Exit from GRUB." +msgstr "離開 GRUB。" + +#: grub-core/commands/mips/loongson/lsspd.c:42 +msgid "No CS5536 found" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:45 +#, c-format +msgid "CS5536 at %d:%d.%d\n" +msgstr "" + +#. TRANSLATORS: System management bus is often used to access components like +#. RAM (info only, not data) or batteries. I/O space is where in memory +#. its ports are. +#: grub-core/commands/mips/loongson/lsspd.c:55 +#, c-format +msgid "System management bus controller I/O space is at 0x%x\n" +msgstr "" + +#. TRANSLATORS: it's shown in a report in a way +#. like number 1: ... number 2: ... +#. +#: grub-core/commands/mips/loongson/lsspd.c:66 +#, c-format +msgid "RAM slot number %d\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:73 +#, c-format +msgid "Written SPD bytes: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:74 +#, c-format +msgid "Total flash size: %d B.\n" +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:79 +msgid "Memory type: DDR2." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:83 +#, fuzzy, c-format +msgid "Part no: %s.\n" +msgstr "錯誤:%s。\n" + +#: grub-core/commands/mips/loongson/lsspd.c:86 +msgid "Memory type: Unknown." +msgstr "" + +#: grub-core/commands/mips/loongson/lsspd.c:97 +#, fuzzy +msgid "Print Memory information." +msgstr "顯示 APM 資訊。" + +#: grub-core/commands/nativedisk.c:117 grub-core/commands/probe.c:118 +#: grub-core/commands/probe.c:124 util/grub-probe.c:394 +#, c-format +msgid "%s does not support UUIDs" +msgstr "" + +#: grub-core/commands/nativedisk.c:323 +msgid "[MODULE1 MODULE2 ...]" +msgstr "" + +#: grub-core/commands/nativedisk.c:324 +msgid "" +"Switch to native disk drivers. If no modules are specified default set (pata," +"ahci,usbms,ohci,uhci,ehci) is used" +msgstr "" + +#: grub-core/commands/parttool.c:40 +msgid "" +"Perform COMMANDS on partition.\n" +"Use `parttool PARTITION help' for the list of available commands." +msgstr "" + +#: grub-core/commands/parttool.c:123 +msgid "=VAL" +msgstr "" + +#: grub-core/commands/parttool.c:136 +#, c-format +msgid "Sorry, no parttool is available for %s\n" +msgstr "" + +#: grub-core/commands/parttool.c:288 grub-core/lib/arg.c:285 +#: grub-core/lib/arg.c:351 +#, fuzzy, c-format +msgid "unknown argument `%s'" +msgstr "未知的額外引數「%s」。\n" + +#: grub-core/commands/parttool.c:344 +msgid "PARTITION COMMANDS" +msgstr "PARTITION COMMANDS" + +#: grub-core/commands/password.c:85 +msgid "USER PASSWORD" +msgstr "USER PASSWORD" + +#: grub-core/commands/password.c:86 +msgid "Set user password (plaintext). Unrecommended and insecure." +msgstr "設定使用者密碼 (純文字)。不建議且不安全。" + +#. TRANSLATORS: it means that the string which +#. was supposed to be a password hash doesn't +#. have a correct format, not to password +#. mismatch. +#: grub-core/commands/password_pbkdf2.c:98 +#: grub-core/commands/password_pbkdf2.c:115 +#: grub-core/commands/password_pbkdf2.c:123 +#: grub-core/commands/password_pbkdf2.c:150 +#: grub-core/commands/password_pbkdf2.c:179 +msgid "invalid PBKDF2 password" +msgstr "" + +#: grub-core/commands/password_pbkdf2.c:202 +msgid "USER PBKDF2_PASSWORD" +msgstr "USER PBKDF2_PASSWORD" + +#: grub-core/commands/password_pbkdf2.c:203 +msgid "Set user password (PBKDF2). " +msgstr "設定使用者密碼 (PBKDF2)。" + +#: grub-core/commands/pcidump.c:39 grub-core/commands/setpci.c:69 +msgid "Select device by vendor and device IDs." +msgstr "" + +#: grub-core/commands/pcidump.c:40 grub-core/commands/setpci.c:70 +msgid "[vendor]:[device]" +msgstr "" + +#: grub-core/commands/pcidump.c:41 grub-core/commands/setpci.c:71 +msgid "Select device by its position on the bus." +msgstr "" + +#: grub-core/commands/pcidump.c:42 grub-core/commands/setpci.c:72 +msgid "[bus]:[slot][.func]" +msgstr "" + +#: grub-core/commands/pcidump.c:109 grub-core/commands/pcidump.c:138 +#: grub-core/commands/setpci.c:183 grub-core/commands/setpci.c:214 +#: grub-core/fs/zfs/zfs.c:3794 grub-core/kern/emu/hostdisk.c:458 +#: grub-core/kern/emu/hostdisk.c:473 grub-core/kern/file.c:45 +#, c-format +msgid "missing `%c' symbol" +msgstr "" + +#: grub-core/commands/pcidump.c:168 +msgid "[-s POSITION] [-d DEVICE]" +msgstr "" + +#: grub-core/commands/pcidump.c:169 +msgid "Show raw dump of the PCI configuration space." +msgstr "" + +#: grub-core/commands/probe.c:40 grub-core/commands/tr.c:32 +msgid "Set a variable to return value." +msgstr "設定要傳回值的變數。" + +#. TRANSLATORS: It's a driver that is currently in use to access +#. the diven disk. +#: grub-core/commands/probe.c:43 +msgid "Determine driver." +msgstr "判斷驅動程式。" + +#: grub-core/commands/probe.c:44 +msgid "Determine partition map type." +msgstr "判斷分割對應類型。" + +#: grub-core/commands/probe.c:45 +msgid "Determine filesystem type." +msgstr "判斷檔案系統類型。" + +#: grub-core/commands/probe.c:46 +msgid "Determine filesystem UUID." +msgstr "判斷檔案系統 UUID。" + +#: grub-core/commands/probe.c:47 +msgid "Determine filesystem label." +msgstr "判斷檔案系統標籤。" + +#: grub-core/commands/probe.c:139 grub-core/commands/probe.c:146 +#: util/grub-probe.c:406 +#, c-format +msgid "filesystem `%s' does not support labels" +msgstr "" + +#: grub-core/commands/probe.c:165 grub-core/fs/zfs/zfsinfo.c:430 +#: grub-core/loader/i386/bsd.c:168 util/grub-setup.c:223 +msgid "DEVICE" +msgstr "DEVICE" + +#: grub-core/commands/probe.c:166 +msgid "Retrieve device info." +msgstr "擷取裝置資訊。" + +#: grub-core/commands/read.c:85 +msgid "[ENVVAR]" +msgstr "[ENVVAR]" + +#: grub-core/commands/read.c:86 +msgid "Set variable with user input." +msgstr "以使用者輸入設定變數。" + +#: grub-core/commands/reboot.c:40 +msgid "Reboot the computer." +msgstr "重新開機。" + +#. TRANSLATORS: in regexp you can mark some +#. groups with parentheses. These groups are +#. then numbered and you can save some of +#. them in variables. In other programs +#. those components aree often referenced with +#. back slash, e.g. \1. Compare +#. sed -e 's,\([a-z][a-z]*\),lowercase=\1,g' +#. The whole matching component is saved in VARNAME, not its number. +#. +#: grub-core/commands/regexp.c:44 +msgid "Store matched component NUMBER in VARNAME." +msgstr "" + +#: grub-core/commands/regexp.c:45 +msgid "[NUMBER:]VARNAME" +msgstr "[NUMBER:]VARNAME" + +#. TRANSLATORS: This are two arguments. So it's +#. two separate units to translate and pay +#. attention not to reverse them. +#: grub-core/commands/regexp.c:157 +msgid "REGEXP STRING" +msgstr "REGEXP STRING" + +#: grub-core/commands/regexp.c:158 +msgid "Test if REGEXP matches STRING." +msgstr "測試 REGEXP 是否能比對到 STRING。" + +#: grub-core/commands/search.c:324 +msgid "NAME [VARIABLE] [HINTS]" +msgstr "NAME [VARIABLE] [HINTS]" + +#: grub-core/commands/search_file.c:4 +msgid "" +"Search devices by file. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "透過檔案搜尋裝置。若有指定 VARIABLE,變數會被設為第一個找到的裝置。" + +#: grub-core/commands/search_label.c:4 +msgid "" +"Search devices by label. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "透過標籤搜尋裝置。若有指定 VARIABLE,變數會被設為第一個找到的裝置。" + +#: grub-core/commands/search_uuid.c:4 +msgid "" +"Search devices by UUID. If VARIABLE is specified, the first device found is " +"set to a variable." +msgstr "透過 UUID 搜尋裝置。若有指定 VARIABLE,變數會被設為第一個找到的裝置。" + +#: grub-core/commands/search_wrap.c:34 +msgid "Search devices by a file." +msgstr "透過檔案搜尋裝置。" + +#: grub-core/commands/search_wrap.c:35 +msgid "Search devices by a filesystem label." +msgstr "透過檔案系統標籤搜尋裝置。" + +#: grub-core/commands/search_wrap.c:37 +msgid "Search devices by a filesystem UUID." +msgstr "透過檔案系統 UUID 搜尋裝置。" + +#: grub-core/commands/search_wrap.c:40 +msgid "Set a variable to the first device found." +msgstr "將變數設為第一個找到的裝置。" + +#: grub-core/commands/search_wrap.c:42 +msgid "Do not probe any floppy drive." +msgstr "不要探測任何軟碟裝置。" + +#: grub-core/commands/search_wrap.c:44 +msgid "" +"First try the device HINT. If HINT ends in comma, also try subpartitions" +msgstr "先嘗試裝置 HINT。若 HINT 以半形逗號結尾,也會嘗試子分割區" + +#: grub-core/commands/search_wrap.c:45 grub-core/commands/search_wrap.c:49 +#: grub-core/commands/search_wrap.c:53 grub-core/commands/search_wrap.c:57 +#: grub-core/commands/search_wrap.c:61 grub-core/commands/search_wrap.c:65 +msgid "HINT" +msgstr "HINT" + +#: grub-core/commands/search_wrap.c:47 +#, fuzzy +msgid "" +"First try the device HINT if currently running on IEEE1275. If HINT ends in " +"comma, also try subpartitions" +msgstr "先嘗試裝置 HINT。若 HINT 以半形逗號結尾,也會嘗試子分割區" + +#: grub-core/commands/search_wrap.c:51 +#, fuzzy +msgid "" +"First try the device HINT if currently running on BIOS. If HINT ends in " +"comma, also try subpartitions" +msgstr "先嘗試裝置 HINT。若 HINT 以半形逗號結尾,也會嘗試子分割區" + +#: grub-core/commands/search_wrap.c:55 +#, fuzzy +msgid "" +"First try the device HINT if direct hardware access is supported. If HINT " +"ends in comma, also try subpartitions" +msgstr "先嘗試裝置 HINT。若 HINT 以半形逗號結尾,也會嘗試子分割區" + +#: grub-core/commands/search_wrap.c:59 +#, fuzzy +msgid "" +"First try the device HINT if currently running on EFI. If HINT ends in " +"comma, also try subpartitions" +msgstr "先嘗試裝置 HINT。若 HINT 以半形逗號結尾,也會嘗試子分割區" + +#: grub-core/commands/search_wrap.c:63 +#, fuzzy +msgid "" +"First try the device HINT if currently running on ARC. If HINT ends in " +"comma, also try subpartitions" +msgstr "先嘗試裝置 HINT。若 HINT 以半形逗號結尾,也會嘗試子分割區" + +#: grub-core/commands/search_wrap.c:207 +msgid "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" +msgstr "[-f|-l|-u|-s|-n] [--hint HINT [--hint HINT] ...] NAME" + +#: grub-core/commands/search_wrap.c:209 +#, fuzzy +msgid "" +"Search devices by file, filesystem label or filesystem UUID. If --set is " +"specified, the first device found is set to a variable. If no variable name " +"is specified, `root' is used." +msgstr "" +"透過檔案、檔案系統標籤或檔案系統 UUID 搜尋裝置。若有指定 --set,變數會被設為" +"第一個找到的裝置。如果沒有指定變數名稱,會使用「root」。" + +#: grub-core/commands/setpci.c:132 +#, c-format +msgid "Register %x of %x:%02x.%x is %x\n" +msgstr "" + +#: grub-core/commands/setpci.c:333 +#, fuzzy +msgid "[-s POSITION] [-d DEVICE] [-v VAR] REGISTER[=VALUE[:MASK]]" +msgstr "[-s POSITION] [-d DEVICE] [-v VAR] [REGISTER][=VALUE[:MASK]]" + +#: grub-core/commands/setpci.c:335 +msgid "Manipulate PCI devices." +msgstr "處理 PCI 裝置。" + +#: grub-core/commands/sleep.c:32 +msgid "Verbose countdown." +msgstr "冗長倒數。" + +#: grub-core/commands/sleep.c:33 +#, fuzzy +msgid "Allow to interrupt with ESC." +msgstr "可以用 ESC 中斷。" + +#: grub-core/commands/sleep.c:109 +msgid "NUMBER_OF_SECONDS" +msgstr "NUMBER_OF_SECONDS" + +#: grub-core/commands/sleep.c:110 +msgid "Wait for a specified number of seconds." +msgstr "等候指定的秒數。" + +#: grub-core/commands/syslinuxcfg.c:50 util/grub-syslinux2cfg.c:66 +msgid "root directory of the syslinux disk [default=/]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:53 util/grub-syslinux2cfg.c:72 +msgid "" +"current directory of syslinux [default is parent directory of input file]." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:55 util/grub-syslinux2cfg.c:75 +msgid "assume input is an isolinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:56 util/grub-syslinux2cfg.c:76 +msgid "assume input is a pxelinux configuration file." +msgstr "" + +#: grub-core/commands/syslinuxcfg.c:57 util/grub-syslinux2cfg.c:77 +msgid "assume input is a syslinux configuration file." +msgstr "" + +#. TRANSLATORS: "syslinux config" means +#. "config as used by syslinux". +#: grub-core/commands/syslinuxcfg.c:189 +#, fuzzy +msgid "Execute syslinux config in same context" +msgstr "於相同情境解析舊式組態" + +#: grub-core/commands/syslinuxcfg.c:195 +#, fuzzy +msgid "Execute syslinux config in new context" +msgstr "於新情境解析舊式組態" + +#: grub-core/commands/syslinuxcfg.c:201 +#, fuzzy +msgid "Execute syslinux config in same context taking only menu entries" +msgstr "於相同情境解析舊式組態,僅擷取條目" + +#: grub-core/commands/syslinuxcfg.c:207 +#, fuzzy +msgid "Execute syslinux config in new context taking only menu entries" +msgstr "於新情境解析舊式組態,僅擷取條目" + +#: grub-core/commands/terminal.c:90 +msgid "no terminal specified" +msgstr "未指定終端機" + +#: grub-core/commands/terminal.c:112 grub-core/commands/terminal.c:139 +#, c-format +msgid "terminal `%s' isn't found" +msgstr "" + +#: grub-core/commands/terminal.c:244 +msgid "Active input terminals:" +msgstr "使用中輸入終端機:" + +#: grub-core/commands/terminal.c:245 +msgid "Available input terminals:" +msgstr "可用的輸入終端機:" + +#: grub-core/commands/terminal.c:261 +msgid "Active output terminals:" +msgstr "使用中輸出終端機:" + +#: grub-core/commands/terminal.c:262 +msgid "Available output terminals:" +msgstr "可用的輸出終端機:" + +#: grub-core/commands/terminal.c:271 grub-core/commands/terminal.c:276 +msgid "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." +msgstr "[--append|--remove] [TERMINAL1] [TERMINAL2] ..." + +#: grub-core/commands/terminal.c:273 +msgid "List or select an input terminal." +msgstr "列出或選取輸入終端機。" + +#: grub-core/commands/terminal.c:278 +msgid "List or select an output terminal." +msgstr "列出或選取輸出終端機。" + +#: grub-core/commands/test.c:444 +msgid "EXPRESSION ]" +msgstr "EXPRESSION ]" + +#: grub-core/commands/test.c:444 grub-core/commands/test.c:447 +msgid "Evaluate an expression." +msgstr "評估表述式。" + +#: grub-core/commands/test.c:447 +msgid "EXPRESSION" +msgstr "EXPRESSION" + +#: grub-core/commands/testload.c:164 +msgid "Load the same file in multiple ways." +msgstr "以多種方式載入相同檔案。" + +#: grub-core/commands/testspeed.c:35 +msgid "Specify size for each read operation" +msgstr "" + +#: grub-core/commands/testspeed.c:58 +msgid "invalid block size" +msgstr "" + +#: grub-core/commands/testspeed.c:80 +#, c-format +msgid "File size: %s\n" +msgstr "" + +#: grub-core/commands/testspeed.c:83 +#, c-format +msgid "Elapsed time: %d.%03d s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:92 +#, c-format +msgid "Speed: %s \n" +msgstr "" + +#: grub-core/commands/testspeed.c:107 +msgid "[-s SIZE] FILENAME" +msgstr "" + +#: grub-core/commands/testspeed.c:108 +msgid "Test file read speed." +msgstr "" + +#: grub-core/commands/time.c:38 grub-core/script/execute.c:952 +#, fuzzy +msgid "no command is specified" +msgstr "未指定指令。\n" + +#: grub-core/commands/time.c:50 +#, c-format +msgid "Elapsed time: %d.%03d seconds \n" +msgstr "" + +#: grub-core/commands/time.c:61 +msgid "COMMAND [ARGS]" +msgstr "" + +#: grub-core/commands/time.c:62 +msgid "Measure time used by COMMAND" +msgstr "" + +#: grub-core/commands/tr.c:33 +msgid "Translate to upper case." +msgstr "" + +#: grub-core/commands/tr.c:34 +msgid "Translate to lower case." +msgstr "" + +#: grub-core/commands/tr.c:119 +msgid "[OPTIONS] [SET1] [SET2] [STRING]" +msgstr "" + +#: grub-core/commands/tr.c:120 +msgid "Translate SET1 characters to SET2 in STRING." +msgstr "" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:50 +msgid "Do nothing, successfully." +msgstr "什麼事都不做,成功。" + +#. TRANSLATORS: it's a command description. +#: grub-core/commands/true.c:54 +msgid "Do nothing, unsuccessfully." +msgstr "什麼事都不做,未成功。" + +#: grub-core/commands/usbtest.c:212 +msgid "Test USB support." +msgstr "測試 USB 支援。" + +#: grub-core/commands/verify.c:51 +msgid "Skip signature-checking of the public key file." +msgstr "" + +#. TRANSLATORS: it's about GNUPG signatures. +#: grub-core/commands/verify.c:77 grub-core/commands/verify.c:87 +#: grub-core/commands/verify.c:92 grub-core/commands/verify.c:102 +#: grub-core/commands/verify.c:109 grub-core/commands/verify.c:113 +#: grub-core/commands/verify.c:120 grub-core/commands/verify.c:125 +#: grub-core/commands/verify.c:130 grub-core/commands/verify.c:134 +#: grub-core/commands/verify.c:274 grub-core/commands/verify.c:282 +#: grub-core/commands/verify.c:287 grub-core/commands/verify.c:295 +#: grub-core/commands/verify.c:326 grub-core/commands/verify.c:333 +#: grub-core/commands/verify.c:338 grub-core/commands/verify.c:348 +#: grub-core/commands/verify.c:470 grub-core/commands/verify.c:473 +#: grub-core/commands/verify.c:476 grub-core/commands/verify.c:479 +#: grub-core/commands/verify.c:486 grub-core/commands/verify.c:492 +#: grub-core/commands/verify.c:661 +msgid "bad signature" +msgstr "" + +#. TRANSLATORS: %08x is 32-bit key id. +#: grub-core/commands/verify.c:630 grub-core/commands/verify.c:753 +#, c-format +msgid "public key %08x not found" +msgstr "" + +#: grub-core/commands/verify.c:645 grub-core/disk/diskfilter.c:772 +#: grub-core/disk/diskfilter.c:782 grub-core/fs/ntfs.c:404 +#: grub-core/fs/zfs/zfs.c:1933 grub-core/normal/menu.c:428 +#, c-format +msgid "module `%s' isn't loaded" +msgstr "" + +#: grub-core/commands/verify.c:1020 +msgid "[-s|--skip-sig] FILE SIGNATURE_FILE [PUBKEY_FILE]" +msgstr "" + +#: grub-core/commands/verify.c:1021 +msgid "Verify detached signature." +msgstr "" + +#: grub-core/commands/verify.c:1024 +msgid "[-s|--skip-sig] PUBKEY_FILE" +msgstr "" + +#: grub-core/commands/verify.c:1025 +msgid "Add PUBKEY_FILE to trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1029 +msgid "Show the list of trusted keys." +msgstr "" + +#: grub-core/commands/verify.c:1031 +msgid "PUBKEY_ID" +msgstr "" + +#: grub-core/commands/verify.c:1032 +msgid "Remove PUBKEY_ID from trusted keys." +msgstr "" + +#: grub-core/commands/videoinfo.c:61 +msgid "Text-only " +msgstr "" + +#. TRANSLATORS: "Direct color" is a mode when the color components +#. are written dirrectly into memory. +#: grub-core/commands/videoinfo.c:66 +#, c-format +msgid "Direct color, mask: %d/%d/%d/%d pos: %d/%d/%d/%d" +msgstr "" + +#. TRANSLATORS: In "paletted color" mode you write the index of the color +#. in the palette. Synonyms include "packed pixel". +#: grub-core/commands/videoinfo.c:78 +msgid "Paletted " +msgstr "" + +#: grub-core/commands/videoinfo.c:80 +msgid "YUV " +msgstr "" + +#. TRANSLATORS: "Planar" is the video memory where you have to write +#. in several different banks "plans" to control the different color +#. components of the same pixel. +#: grub-core/commands/videoinfo.c:85 +msgid "Planar " +msgstr "" + +#: grub-core/commands/videoinfo.c:87 +msgid "Hercules " +msgstr "" + +#: grub-core/commands/videoinfo.c:89 +msgid "CGA " +msgstr "" + +#. TRANSLATORS: Non-chain 4 is a 256-color planar +#. (unchained) video memory mode. +#: grub-core/commands/videoinfo.c:93 +msgid "Non-chain 4 " +msgstr "" + +#: grub-core/commands/videoinfo.c:95 +msgid "Monochrome " +msgstr "" + +#: grub-core/commands/videoinfo.c:97 +msgid "Unknown video mode " +msgstr "" + +#: grub-core/commands/videoinfo.c:111 +msgid " EDID checksum invalid" +msgstr "" + +#: grub-core/commands/videoinfo.c:116 +#, c-format +msgid " EDID version: %u.%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:120 +#, c-format +msgid " Preferred mode: %ux%u\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:123 +msgid " No preferred mode available\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:146 grub-core/video/video.c:490 +#: grub-core/video/video.c:498 grub-core/video/video.c:509 +#: grub-core/video/video.c:520 grub-core/video/video.c:528 +#, fuzzy, c-format +msgid "invalid video mode specification `%s'" +msgstr "無效的根裝置「%s」" + +#: grub-core/commands/videoinfo.c:168 +msgid "List of supported video modes:" +msgstr "" + +#: grub-core/commands/videoinfo.c:169 +msgid "Legend: mask/position=red/green/blue/reserved" +msgstr "" + +#: grub-core/commands/videoinfo.c:176 +#, c-format +msgid "Adapter `%s':\n" +msgstr "" + +#: grub-core/commands/videoinfo.c:180 +msgid " No info available" +msgstr "" + +#: grub-core/commands/videoinfo.c:198 +msgid " Failed to initialize video adapter" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videoinfo.c:239 grub-core/commands/videoinfo.c:248 +msgid "[WxH[xD]]" +msgstr "" + +#: grub-core/commands/videoinfo.c:240 grub-core/commands/videoinfo.c:249 +msgid "" +"List available video modes. If resolution is given show only modes matching " +"it." +msgstr "列出可用的視訊模式。若有給定解析度,僅顯示符合的模式。" + +#. TRANSLATORS: "x" has to be entered in, +#. like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/commands/videotest.c:225 +msgid "[WxH]" +msgstr "" + +#. TRANSLATORS: Here, on the other hand, it's +#. nicer to use unicode cross instead of x. +#: grub-core/commands/videotest.c:228 +msgid "Test video subsystem in mode WxH." +msgstr "以 WxH 模式測試視訊子系統。" + +#: grub-core/commands/videotest.c:231 +msgid "Test video subsystem." +msgstr "測試視訊子系統。" + +#: grub-core/commands/xen/lsxen.c:80 grub-core/commands/xen/lsxen.c:82 +msgid "[DIR]" +msgstr "" + +#: grub-core/commands/xen/lsxen.c:81 grub-core/commands/xen/lsxen.c:83 +msgid "List Xen storage." +msgstr "" + +#. TRANSLATORS: GRUBUUID stands for "filesystem +#. UUID as used in GRUB". +#: grub-core/commands/xnu_uuid.c:110 +#, fuzzy +msgid "[-l] GRUBUUID [VARNAME]" +msgstr "GRUBUUID [VARNAME]" + +#: grub-core/commands/xnu_uuid.c:111 +#, fuzzy +msgid "" +"Transform 64-bit UUID to format suitable for XNU. If -l is given keep it " +"lowercase as done by blkid." +msgstr "轉換 64 位元 UUID 為適合 XNU 的格式。" + +#: grub-core/disk/arc/arcdisk.c:248 grub-core/disk/efi/efidisk.c:597 +#: grub-core/disk/i386/pc/biosdisk.c:498 grub-core/disk/i386/pc/biosdisk.c:543 +#: grub-core/disk/ieee1275/nand.c:198 grub-core/disk/ieee1275/ofdisk.c:586 +#, c-format +msgid "failure reading sector 0x%llx from `%s'" +msgstr "" + +#: grub-core/disk/arc/arcdisk.c:284 grub-core/disk/efi/efidisk.c:620 +#: grub-core/disk/i386/pc/biosdisk.c:548 grub-core/disk/ieee1275/ofdisk.c:606 +#, c-format +msgid "failure writing sector 0x%llx to `%s'" +msgstr "" + +#: grub-core/disk/cryptodisk.c:40 +msgid "Mount by UUID." +msgstr "" + +#. TRANSLATORS: It's still restricted to cryptodisks only. +#: grub-core/disk/cryptodisk.c:42 +msgid "Mount all." +msgstr "" + +#: grub-core/disk/cryptodisk.c:43 +msgid "Mount all volumes with `boot' flag set." +msgstr "" + +#. TRANSLATORS: The first %s is the file being looked at, the second %s is +#. the error message. +#: grub-core/disk/cryptodisk.c:526 grub-core/kern/emu/hostdisk.c:152 +#: grub-core/kern/emu/hostdisk.c:262 grub-core/kern/emu/hostdisk.c:434 +#: grub-core/kern/emu/misc.c:166 grub-core/kern/emu/misc.c:172 +#: grub-core/kern/emu/misc.c:194 grub-core/osdep/bsd/getroot.c:92 +#: grub-core/osdep/bsd/getroot.c:168 grub-core/osdep/hurd/getroot.c:68 +#: grub-core/osdep/linux/blocklist.c:65 grub-core/osdep/linux/getroot.c:150 +#: grub-core/osdep/linux/hostdisk.c:194 grub-core/osdep/linux/hostdisk.c:420 +#: grub-core/osdep/linux/ofpath.c:325 grub-core/osdep/linux/ofpath.c:330 +#: grub-core/osdep/linux/ofpath.c:367 grub-core/osdep/linux/ofpath.c:380 +#: grub-core/osdep/sun/getroot.c:110 grub-core/osdep/windows/blocklist.c:98 +#: grub-core/tests/video_checksum.c:279 util/editenv.c:46 util/glue-efi.c:115 +#: util/glue-efi.c:120 util/glue-efi.c:130 util/grub-editenv.c:138 +#: util/grub-editenv.c:192 util/grub-file.c:83 util/grub-fstest.c:128 +#: util/grub-fstest.c:568 util/grub-install-common.c:91 +#: util/grub-install-common.c:93 util/grub-install-common.c:100 +#: util/grub-install-common.c:517 util/grub-menulst2cfg.c:53 +#: util/grub-menulst2cfg.c:68 util/grub-mkimage.c:283 util/grub-mklayout.c:504 +#: util/grub-mklayout.c:516 util/grub-mknetdir.c:131 util/grub-mknetdir.c:149 +#: util/grub-mkrescue.c:617 util/grub-mkrescue.c:621 util/grub-mkrescue.c:858 +#: util/grub-mkrescue.c:862 util/grub-mkstandalone.c:253 util/grub-mount.c:498 +#: util/grub-render-label.c:169 util/grub-script-check.c:175 +#: util/grub-syslinux2cfg.c:181 util/grub-syslinux2cfg.c:191 +#: util/grub-syslinux2cfg.c:212 util/grub-syslinux2cfg.c:228 util/misc.c:91 +#: util/render-label.c:76 util/render-label.c:163 util/render-label.c:174 +#: util/resolve.c:246 util/setup.c:708 +#, fuzzy, c-format +msgid "cannot open `%s': %s" +msgstr "無法開啟「%s」" + +#: grub-core/disk/cryptodisk.c:583 grub-core/disk/cryptodisk.c:628 +#: grub-core/kern/emu/hostdisk.c:270 grub-core/kern/emu/hostfs.c:142 +#: grub-core/osdep/linux/hostdisk.c:455 util/grub-editenv.c:143 +#: util/grub-editenv.c:149 util/grub-fstest.c:320 util/misc.c:111 +#, fuzzy, c-format +msgid "cannot seek `%s': %s" +msgstr "無法開啟「%s」" + +#: grub-core/disk/cryptodisk.c:1144 +msgid "SOURCE|-u UUID|-a|-b" +msgstr "" + +#: grub-core/disk/cryptodisk.c:1145 +#, fuzzy +msgid "Mount a crypto device." +msgstr "設定根裝置。" + +#. TRANSLATORS: This message kicks in during the detection of +#. which modules needs to be included in core image. This happens +#. in the case of degraded RAID and means that autodetection may +#. fail to include some of modules. It's an installation time +#. message, not runtime message. +#: grub-core/disk/diskfilter.c:343 grub-core/disk/diskfilter.c:376 +#, c-format +msgid "" +"Couldn't find physical volume `%s'. Some modules may be missing from core " +"image." +msgstr "" + +#: grub-core/disk/diskfilter.c:480 +#, c-format +msgid "physical volume %s not found" +msgstr "" + +#: grub-core/disk/efi/efidisk.c:594 grub-core/disk/efi/efidisk.c:617 +#, fuzzy, c-format +msgid "no media in `%s'" +msgstr "無法開啟「%s」" + +#: grub-core/disk/geli.c:75 +msgid "Couldn't load sha256" +msgstr "" + +#: grub-core/disk/geli.c:85 +msgid "Couldn't load sha512" +msgstr "" + +#: grub-core/disk/geli.c:216 grub-core/disk/geli.c:220 +msgid "couldn't read ELI metadata" +msgstr "" + +#: grub-core/disk/geli.c:231 +msgid "wrong ELI magic or version" +msgstr "" + +#: grub-core/disk/geli.c:435 grub-core/disk/luks.c:329 +msgid "Attempting to decrypt master key..." +msgstr "" + +#: grub-core/disk/geli.c:441 grub-core/disk/luks.c:347 +#, c-format +msgid "Enter passphrase for %s%s%s (%s): " +msgstr "" + +#. TRANSLATORS: It's a cryptographic key slot: one element of an array +#. where each element is either empty or holds a key. +#: grub-core/disk/geli.c:530 grub-core/disk/luks.c:451 +#, c-format +msgid "Slot %d opened\n" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:470 grub-core/disk/i386/pc/biosdisk.c:524 +#: grub-core/disk/i386/pc/biosdisk.c:534 grub-core/kern/disk_common.c:47 +#, fuzzy, c-format +msgid "attempt to read or write outside of disk `%s'" +msgstr "正試圖從 GRUB 讀取核心映像「%s」" + +#: grub-core/disk/i386/pc/biosdisk.c:491 grub-core/disk/i386/pc/biosdisk.c:611 +#: grub-core/disk/scsi.c:726 +msgid "cannot write to CD-ROM" +msgstr "" + +#: grub-core/disk/i386/pc/biosdisk.c:662 +msgid "" +"Native disk drivers are in use. Refusing to use firmware disk interface." +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. GRUB +#. install tools put core.img into a place +#. usable for bootloaders (called generically +#. "embedding zone") and this operation is +#. called "embedding". +#: grub-core/disk/ldm.c:1015 +msgid "your LDM Embedding Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: it's a partition for embedding, +#. not a partition embed into something. +#: grub-core/disk/ldm.c:1033 +msgid "this LDM has no Embedding Partition; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: The disk is simply removed from the list of available ones, +#. not wiped, avoid to scare user. +#: grub-core/disk/loopback.c:45 +#, fuzzy +msgid "Delete the specified loopback drive." +msgstr "刪除迴返裝置條目。" + +#: grub-core/disk/loopback.c:236 +#, fuzzy +msgid "[-d] DEVICENAME FILE." +msgstr "[-d|-p] DEVICENAME FILE。" + +#. TRANSLATORS: The file itself is not destroyed +#. or transformed into drive. +#: grub-core/disk/loopback.c:239 +#, fuzzy +msgid "Make a virtual drive from a file." +msgstr "製作一個檔案的裝置。" + +#: grub-core/efiemu/i386/loadcore32.c:111 +#: grub-core/efiemu/i386/loadcore64.c:124 grub-core/kern/arm/dl.c:256 +#: grub-core/kern/arm64/dl.c:187 grub-core/kern/i386/dl.c:75 +#: grub-core/kern/ia64/dl.c:140 grub-core/kern/mips/dl.c:258 +#: grub-core/kern/powerpc/dl.c:161 grub-core/kern/sparc64/dl.c:180 +#: grub-core/kern/x86_64/dl.c:109 util/grub-mkimagexx.c:692 +#: util/grub-mkimagexx.c:811 util/grub-mkimagexx.c:874 +#: util/grub-mkimagexx.c:955 util/grub-mkimagexx.c:1049 +#: util/grub-mkimagexx.c:1151 util/grub-mkimagexx.c:1367 +#: util/grub-mkimagexx.c:1404 util/grub-mkimagexx.c:1436 +#: util/grub-mkimagexx.c:1467 +#, c-format +msgid "relocation 0x%x is not implemented yet" +msgstr "" + +#: grub-core/efiemu/loadcore.c:200 grub-core/efiemu/loadcore.c:237 +#: grub-core/loader/i386/bsdXX.c:317 util/grub-mkimagexx.c:1996 +msgid "no symbol table" +msgstr "" + +#: grub-core/efiemu/loadcore.c:346 grub-core/kern/dl.c:609 +#: grub-core/loader/ia64/efi/linux.c:386 grub-core/loader/mips/linux.c:248 +#: grub-core/loader/multiboot_elfxx.c:76 +#: grub-core/loader/powerpc/ieee1275/linux.c:280 +#: grub-core/loader/sparc64/ieee1275/linux.c:320 +msgid "this ELF file is not of the right type" +msgstr "" + +#: grub-core/efiemu/main.c:313 +msgid "Load and initialize EFI emulator." +msgstr "載入並初始化 EFI 模擬器。" + +#: grub-core/efiemu/main.c:317 +msgid "Finalize loading of EFI emulator." +msgstr "終止 EFI 模擬器的載入。" + +#: grub-core/efiemu/main.c:320 +msgid "Unload EFI emulator." +msgstr "卸載 EFI 模擬器。" + +#: grub-core/efiemu/symbols.c:92 grub-core/kern/dl.c:376 +#, c-format +msgid "symbol `%s' not found" +msgstr "" + +#: grub-core/font/font_cmd.c:52 +#, fuzzy +msgid "Loaded fonts:" +msgstr "列出已載入的字型。" + +#: grub-core/font/font_cmd.c:74 +msgid "FILE..." +msgstr "FILE..." + +#: grub-core/font/font_cmd.c:75 +msgid "Specify one or more font files to load." +msgstr "指定一個或多個要載入的字型檔。" + +#: grub-core/font/font_cmd.c:78 +msgid "List the loaded fonts." +msgstr "列出已載入的字型。" + +#: grub-core/fs/archelp.c:216 grub-core/fs/archelp.c:278 +#: grub-core/fs/btrfs.c:1394 grub-core/fs/fshelp.c:227 grub-core/fs/jfs.c:729 +#: grub-core/fs/minix.c:369 grub-core/fs/ufs.c:454 +msgid "too deep nesting of symlinks" +msgstr "" + +#: grub-core/fs/bfs.c:228 grub-core/fs/fshelp.c:368 grub-core/fs/minix.c:270 +#: grub-core/kern/file.c:158 +msgid "attempt to read past the end of file" +msgstr "" + +#: grub-core/fs/btrfs.c:584 grub-core/fs/zfs/zfs.c:1465 +msgid "couldn't find a necessary member device of multi-device filesystem" +msgstr "" + +#: grub-core/fs/btrfs.c:1277 grub-core/fs/btrfs.c:1536 +#: grub-core/fs/fshelp.c:189 grub-core/fs/fshelp.c:309 grub-core/fs/jfs.c:431 +#: grub-core/fs/minix.c:414 grub-core/fs/minix.c:562 +#: grub-core/fs/reiserfs.c:732 grub-core/fs/ufs.c:531 grub-core/fs/ufs.c:671 +#: grub-core/fs/zfs/zfs.c:2831 grub-core/fs/zfs/zfs.c:4247 +msgid "not a directory" +msgstr "" + +#: grub-core/fs/btrfs.c:1642 grub-core/fs/fshelp.c:307 grub-core/fs/jfs.c:828 +#: grub-core/fs/zfs/zfs.c:3801 +msgid "not a regular file" +msgstr "" + +#: grub-core/fs/btrfs.c:1736 grub-core/fs/zfs/zfs.c:4333 +#: grub-core/partmap/msdos.c:400 +msgid "your core.img is unusually large. It won't fit in the embedding area" +msgstr "" + +#: grub-core/fs/fshelp.c:281 grub-core/fs/minix.c:630 grub-core/fs/ufs.c:661 +#: grub-core/fs/ufs.c:757 grub-core/kern/fs.c:168 grub-core/kern/fs.c:180 +#, fuzzy, c-format +msgid "invalid file name `%s'" +msgstr "無效的根裝置「%s」" + +#: grub-core/fs/zfs/zfs.c:453 +msgid "checksum verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:292 +msgid "no decryption key available" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:304 +msgid "MAC verification failed" +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:413 +msgid "Assume input is raw." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:414 +msgid "Assume input is hex." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:415 +msgid "Assume input is passphrase." +msgstr "" + +#: grub-core/fs/zfs/zfscrypt.c:437 util/grub-fstest.c:553 util/grub-mount.c:483 +#, fuzzy +msgid "Enter ZFS password: " +msgstr "輸入密碼:" + +#: grub-core/fs/zfs/zfscrypt.c:476 +#, fuzzy +msgid "[-h|-p|-r] [FILE]" +msgstr "[-l|-h|-a] [FILE ...]" + +#: grub-core/fs/zfs/zfscrypt.c:477 +msgid "Import ZFS wrapping key stored in FILE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:51 +msgid "Virtual device is removed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:57 +msgid "Virtual device is faulted" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:63 +#, fuzzy +msgid "Virtual device is offline" +msgstr "列出裝置或檔案。" + +#. TRANSLATORS: degraded doesn't mean broken but that some of +#. component are missing but virtual device as whole is still usable. +#: grub-core/fs/zfs/zfsinfo.c:70 +msgid "Virtual device is degraded" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:73 +#, fuzzy +msgid "Virtual device is online" +msgstr "列出裝置或檔案。" + +#: grub-core/fs/zfs/zfsinfo.c:89 +msgid "Incorrect virtual device: no type available" +msgstr "" + +#. TRANSLATORS: The virtual devices form a tree (in graph-theoretical +#. sense). The nodes like mirror or raidz have children: member devices. +#. The "real" devices which actually store data are called "leafs" +#. (again borrowed from graph theory) and can be either disks +#. (or partitions) or files. +#: grub-core/fs/zfs/zfsinfo.c:105 +msgid "Leaf virtual device (file or disk)" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:113 +msgid "Bootpath: unavailable\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:115 +#, c-format +msgid "Bootpath: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:120 +msgid "Path: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:122 +#, c-format +msgid "Path: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:127 +msgid "Devid: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:129 +#, fuzzy, c-format +msgid "Devid: %s\n" +msgstr "裝置 %s:" + +#: grub-core/fs/zfs/zfsinfo.c:148 +msgid "This VDEV is a mirror" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:153 +#, c-format +msgid "This VDEV is a RAIDZ%llu\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:158 +msgid "Incorrect VDEV" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:161 +#, c-format +msgid "VDEV with %d children\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. And the number itself is fine, +#. only the element isn't. +#. +#: grub-core/fs/zfs/zfsinfo.c:177 +#, c-format +msgid "VDEV element number %d isn't correct\n" +msgstr "" + +#. TRANSLATORS: it's the element carying the number %d, not +#. total element number. This is used in enumeration +#. "Element number 1", "Element number 2", ... +#: grub-core/fs/zfs/zfsinfo.c:184 +#, c-format +msgid "VDEV element number %d:\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:193 +#, c-format +msgid "Unknown virtual device type: %s\n" +msgstr "" + +#. TRANSLATORS: Here we speak about ZFS pools it's semi-marketing, +#. semi-technical term by Sun/Oracle and should be translated in sync with +#. other ZFS-related software and documentation. +#: grub-core/fs/zfs/zfsinfo.c:254 +msgid "Pool state: active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:255 +msgid "Pool state: exported" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:256 +msgid "Pool state: destroyed" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:257 +msgid "Pool state: reserved for hot spare" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:258 +msgid "Pool state: level 2 ARC device" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:259 +msgid "Pool state: uninitialized" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:260 +msgid "Pool state: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:261 +msgid "Pool state: potentially active" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:306 +msgid "Pool name: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:308 +#, c-format +msgid "Pool name: %s\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:313 +msgid "Pool GUID: unavailable" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:315 +#, c-format +msgid "Pool GUID: %016llx\n" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:320 +msgid "Unable to retrieve pool state" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:322 +msgid "Unrecognized pool state" +msgstr "" + +#. TRANSLATORS: There are undetermined number of virtual devices +#. in a device tree, not just one. +#. +#: grub-core/fs/zfs/zfsinfo.c:332 +msgid "No virtual device tree available" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:431 +msgid "Print ZFS info about DEVICE." +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:433 +msgid "FILESYSTEM [VARIABLE]" +msgstr "" + +#: grub-core/fs/zfs/zfsinfo.c:434 +msgid "Print ZFS-BOOTFSOBJ or store it into VARIABLE" +msgstr "" + +#. TRANSLATORS: at this position GRUB waits for the user to do an action +#. in remote debugger, namely to tell it to establish connection. +#: grub-core/gdb/gdb.c:48 +msgid "Now connect the remote debugger, please." +msgstr "" + +#. TRANSLATORS: GDB stub is a small part of +#. GDB functionality running on local host +#. which allows remote debugger to +#. connect to it. +#: grub-core/gdb/gdb.c:84 +msgid "Start GDB stub on given port" +msgstr "" + +#. TRANSLATORS: this refers to triggering +#. a breakpoint so that the user will land +#. into GDB. +#: grub-core/gdb/gdb.c:89 +msgid "Break into GDB" +msgstr "" + +#: grub-core/gdb/gdb.c:91 +msgid "Stop GDB stub" +msgstr "" + +#: grub-core/gettext/gettext.c:85 +msgid "premature end of file" +msgstr "" + +#. TRANSLATORS: It refers to passing the string through gettext. +#. So it's "translate" in the same meaning as in what you're +#. doing now. +#. +#: grub-core/gettext/gettext.c:525 +msgid "Translates the string with the current settings." +msgstr "以目前設定值來翻譯字串。" + +#: grub-core/gfxmenu/gui_label.c:186 grub-core/normal/menu_text.c:184 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line. ESC to return previous menu." +msgstr "" +"按下 enter 啟動所選 OS,按下「e」在啟動前編輯指令,或是「c」取得指令列。按下 " +"ESC 返回前個選單。\n" + +#: grub-core/gfxmenu/gui_label.c:190 grub-core/normal/menu_text.c:192 +#, fuzzy +msgid "" +"Press enter to boot the selected OS, `e' to edit the commands before booting " +"or `c' for a command-line." +msgstr "" +"按下 enter 啟動所選 OS,按下「e」在啟動前編輯指令,或是「c」取得指令列。\n" + +#: grub-core/gfxmenu/gui_label.c:194 +msgid "enter: boot, `e': options, `c': cmd-line" +msgstr "" + +#: grub-core/gfxmenu/gui_progress_bar.c:339 grub-core/normal/menu_text.c:446 +#, c-format +msgid "The highlighted entry will be executed automatically in %ds." +msgstr "被突顯的條目會在 %d 秒內自動執行。" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the short form in your language. +#: grub-core/gfxmenu/gui_progress_bar.c:344 +#, c-format +msgid "%ds remaining." +msgstr "剩下 %d 秒。" + +#. TRANSLATORS: 's' stands for seconds. +#. It's a standalone timeout notification. +#. Please use the shortest form available in you language. +#: grub-core/gfxmenu/gui_progress_bar.c:349 grub-core/normal/menu_text.c:444 +#: grub-core/normal/menu_text.c:462 +#, c-format +msgid "%ds" +msgstr "%d 秒" + +#: grub-core/gfxmenu/view.c:103 +msgid "GRUB Boot Menu" +msgstr "" + +#: grub-core/gnulib/argp-help.c:149 +#, c-format +msgid "ARGP_HELP_FMT: %s value is less than or equal to %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:222 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: grub-core/gnulib/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter must be positive" +msgstr "" + +#: grub-core/gnulib/argp-help.c:237 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: grub-core/gnulib/argp-help.c:249 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1249 +msgid "" +"Mandatory or optional arguments to long options are also mandatory or " +"optional for any corresponding short options." +msgstr "" + +#: grub-core/gnulib/argp-help.c:1650 +msgid " or: " +msgstr "" + +#: grub-core/gnulib/argp-help.c:1662 +#, fuzzy +msgid " [OPTION...]" +msgstr "[OPTIONS...]" + +#: grub-core/gnulib/argp-help.c:1689 +#, fuzzy, c-format +msgid "Try '%s --help' or '%s --usage' for more information.\n" +msgstr "試試「%s --help」以取得更多資訊。\n" + +#: grub-core/gnulib/argp-help.c:1717 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: grub-core/gnulib/argp-help.c:1936 grub-core/gnulib/error.c:188 +msgid "Unknown system error" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:81 +#, fuzzy +msgid "give this help list" +msgstr "顯示本幫助並離開。" + +#: grub-core/gnulib/argp-parse.c:82 +msgid "give a short usage message" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:83 util/grub-mkfont.c:946 +#, fuzzy +msgid "NAME" +msgstr "VARNAME" + +#: grub-core/gnulib/argp-parse.c:83 +msgid "set the program name" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:84 grub-core/kern/emu/main.c:109 +msgid "SECS" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:85 +msgid "hang for SECS seconds (default 3600)" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:142 +msgid "print program version" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:159 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:612 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "" + +#: grub-core/gnulib/argp-parse.c:755 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: grub-core/gnulib/getopt.c:547 grub-core/gnulib/getopt.c:576 +#, c-format +msgid "%s: option '%s' is ambiguous; possibilities:" +msgstr "" + +#: grub-core/gnulib/getopt.c:624 grub-core/gnulib/getopt.c:628 +#, c-format +msgid "%s: option '--%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:637 grub-core/gnulib/getopt.c:642 +#, c-format +msgid "%s: option '%c%s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:685 grub-core/gnulib/getopt.c:704 +#, c-format +msgid "%s: option '--%s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:742 grub-core/gnulib/getopt.c:745 +#, c-format +msgid "%s: unrecognized option '--%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:753 grub-core/gnulib/getopt.c:756 +#, c-format +msgid "%s: unrecognized option '%c%s'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:805 grub-core/gnulib/getopt.c:808 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:861 grub-core/gnulib/getopt.c:878 +#: grub-core/gnulib/getopt.c:1088 grub-core/gnulib/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:934 grub-core/gnulib/getopt.c:950 +#, c-format +msgid "%s: option '-W %s' is ambiguous\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:974 grub-core/gnulib/getopt.c:992 +#, c-format +msgid "%s: option '-W %s' doesn't allow an argument\n" +msgstr "" + +#: grub-core/gnulib/getopt.c:1013 grub-core/gnulib/getopt.c:1031 +#, c-format +msgid "%s: option '-W %s' requires an argument\n" +msgstr "" + +#: grub-core/gnulib/regcomp.c:131 grub-core/osdep/aros/hostdisk.c:515 +msgid "Success" +msgstr "" + +#: grub-core/gnulib/regcomp.c:134 +msgid "No match" +msgstr "" + +#: grub-core/gnulib/regcomp.c:137 +#, fuzzy +msgid "Invalid regular expression" +msgstr "評估表述式。" + +#: grub-core/gnulib/regcomp.c:140 +msgid "Invalid collation character" +msgstr "" + +#: grub-core/gnulib/regcomp.c:143 +msgid "Invalid character class name" +msgstr "" + +#: grub-core/gnulib/regcomp.c:146 +msgid "Trailing backslash" +msgstr "" + +#: grub-core/gnulib/regcomp.c:149 +msgid "Invalid back reference" +msgstr "" + +#: grub-core/gnulib/regcomp.c:152 +msgid "Unmatched [ or [^" +msgstr "" + +#: grub-core/gnulib/regcomp.c:155 +msgid "Unmatched ( or \\(" +msgstr "" + +#: grub-core/gnulib/regcomp.c:158 +msgid "Unmatched \\{" +msgstr "" + +#: grub-core/gnulib/regcomp.c:161 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: grub-core/gnulib/regcomp.c:164 +msgid "Invalid range end" +msgstr "" + +#: grub-core/gnulib/regcomp.c:167 +msgid "Memory exhausted" +msgstr "" + +#: grub-core/gnulib/regcomp.c:170 +msgid "Invalid preceding regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:173 +msgid "Premature end of regular expression" +msgstr "" + +#: grub-core/gnulib/regcomp.c:176 +msgid "Regular expression too big" +msgstr "" + +#: grub-core/gnulib/regcomp.c:179 +msgid "Unmatched ) or \\)" +msgstr "" + +#: grub-core/gnulib/regcomp.c:553 +msgid "unknown regexp error" +msgstr "" + +#: grub-core/gnulib/regcomp.c:700 +msgid "No previous regular expression" +msgstr "" + +#: grub-core/hello/hello.c:36 +#, fuzzy +msgid "Hello World" +msgstr "說「世界好」。" + +#: grub-core/hello/hello.c:45 +#, fuzzy +msgid "Say `Hello World'." +msgstr "說「世界好」。" + +#: grub-core/io/gzio.c:397 grub-core/kern/file.c:212 +msgid "attempt to seek outside of the file" +msgstr "" + +#. TRANSLATORS: It's about given file having some strange format, not +#. complete lack of gzip support. +#: grub-core/io/gzio.c:1190 grub-core/io/gzio.c:1199 grub-core/io/gzio.c:1206 +msgid "unsupported gzip format" +msgstr "" + +#: grub-core/io/lzopio.c:509 +msgid "lzop file corrupted" +msgstr "" + +#: grub-core/io/xzio.c:276 +msgid "xz file corrupted or unsupported block options" +msgstr "" + +#: grub-core/kern/arm/dl.c:277 grub-core/kern/arm64/dl.c:44 +#: grub-core/kern/i386/dl.c:36 grub-core/kern/ia64/dl.c:41 +#: grub-core/kern/mips/dl.c:48 grub-core/kern/powerpc/dl.c:36 +#: grub-core/kern/sparc64/dl.c:36 grub-core/kern/x86_64/dl.c:36 +#: grub-core/loader/i386/bsd.c:1439 grub-core/loader/i386/bsdXX.c:49 +#: grub-core/loader/ia64/efi/linux.c:382 grub-core/loader/mips/linux.c:298 +#: grub-core/loader/multiboot.c:217 grub-core/loader/multiboot_elfxx.c:73 +#: grub-core/loader/powerpc/ieee1275/linux.c:294 +#: grub-core/loader/sparc64/ieee1275/linux.c:331 +msgid "invalid arch-dependent ELF magic" +msgstr "" + +#: grub-core/kern/corecmd.c:178 +msgid "[ENVVAR=VALUE]" +msgstr "[ENVVAR=VALUE]" + +#: grub-core/kern/corecmd.c:179 +msgid "Set an environment variable." +msgstr "設定環境變數。" + +#: grub-core/kern/corecmd.c:183 +msgid "ENVVAR" +msgstr "ENVVAR" + +#: grub-core/kern/corecmd.c:184 +msgid "Remove an environment variable." +msgstr "移除環境變數。" + +#: grub-core/kern/corecmd.c:186 +msgid "[ARG]" +msgstr "[ARG]" + +#: grub-core/kern/corecmd.c:186 +msgid "List devices or files." +msgstr "列出裝置或檔案。" + +#: grub-core/kern/corecmd.c:188 +msgid "Insert a module." +msgstr "插入模組。" + +#: grub-core/kern/disk.c:236 grub-core/net/net.c:1390 +#, c-format +msgid "disk `%s' not found" +msgstr "" + +#: grub-core/kern/disk_common.c:27 +msgid "attempt to read or write outside of partition" +msgstr "" + +#: grub-core/kern/dl.c:212 grub-core/kern/elf.c:61 grub-core/kern/elf.c:79 +#: grub-core/loader/i386/bsdXX.c:46 grub-core/loader/ia64/efi/linux.c:376 +#: grub-core/loader/multiboot_elfxx.c:69 +msgid "invalid arch-independent ELF magic" +msgstr "" + +#. TRANSLATORS: it refers to the lack of free slots. +#: grub-core/kern/emu/hostdisk.c:208 grub-core/kern/emu/hostdisk.c:466 +msgid "device count exceeds limit" +msgstr "裝置計數超出限制" + +#: grub-core/kern/emu/hostdisk.c:342 util/editenv.c:54 util/grub-editenv.c:197 +#: util/grub-fstest.c:191 util/grub-mkfont.c:796 util/misc.c:114 +#: util/misc.c:129 util/setup.c:713 +#, fuzzy, c-format +msgid "cannot write to `%s': %s" +msgstr "無法開啟「%s」" + +#. TRANSLATORS: Only one entry is ignored. However the suggestion +#. is to correct/delete the whole file. +#. device.map is a file indicating which +#. devices are available at boot time. Fedora populated it with +#. entries like (hd0,1) /dev/sda1 which would mean that every +#. partition is a separate disk for BIOS. Such entries were +#. inactive in GRUB due to its bug which is now gone. Without +#. this additional check these entries would be harmful now. +#. +#: grub-core/kern/emu/hostdisk.c:503 +#, c-format +msgid "" +"the device.map entry `%s' is invalid. Ignoring it. Please correct or delete " +"your device.map" +msgstr "" + +#. TRANSLATORS: device.map is a filename. Not to be translated. +#. device.map specifies disk correspondance overrides. Previously +#. one could create any kind of device name with this. Due to +#. some problems we decided to limit it to just a handful +#. possibilities. +#: grub-core/kern/emu/hostdisk.c:555 +#, c-format +msgid "" +"the drive name `%s' in device.map is incorrect. Using %s instead. Please use " +"the form [hfc]d[0-9]* (E.g. `hd0' or `cd')" +msgstr "" + +#: grub-core/kern/emu/hostfs.c:76 grub-core/kern/emu/hostfs.c:109 +#, fuzzy, c-format +msgid "can't open `%s': %s" +msgstr "無法開啟「%s」" + +#: grub-core/kern/emu/main.c:99 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "DEVICE_NAME" +msgstr "DEVICE_NAME" + +#: grub-core/kern/emu/main.c:99 grub-core/loader/i386/bsd.c:135 +#: grub-core/loader/i386/bsd.c:168 util/grub-fstest.c:516 util/grub-mount.c:452 +msgid "Set root device." +msgstr "設定根裝置。" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:102 util/grub-probe.c:685 util/grub-setup.c:85 +#, fuzzy, c-format +msgid "use FILE as the device map [default=%s]" +msgstr "使用 FILE 作為裝置映射 [預設=%s]" + +#. TRANSLATORS: There are many devices in device map. +#: grub-core/kern/emu/main.c:105 +msgid "use FILE as memdisk" +msgstr "" + +#: grub-core/kern/emu/main.c:107 util/grub-setup.c:83 +#, fuzzy, c-format +msgid "use GRUB files in the directory DIR [default=%s]" +msgstr "使用 DIR 目錄內的 GRUB 檔 [預設=%s]" + +#: grub-core/kern/emu/main.c:108 include/grub/util/install.h:65 +#: util/grub-editenv.c:58 util/grub-fstest.c:525 util/grub-glue-efi.c:58 +#: util/grub-macbless.c:104 util/grub-mkfont.c:962 util/grub-mkimage.c:83 +#: util/grub-mklayout.c:56 util/grub-mount.c:458 util/grub-probe.c:687 +#: util/grub-render-label.c:74 util/grub-script-check.c:52 util/grub-setup.c:90 +#: util/grub-syslinux2cfg.c:78 +#, fuzzy +msgid "print verbose messages." +msgstr "列印冗長訊息。" + +#: grub-core/kern/emu/main.c:109 +msgid "wait until a debugger will attach" +msgstr "" + +#: grub-core/kern/emu/main.c:171 util/grub-macbless.c:143 +#: util/grub-mkrelpath.c:61 util/grub-probe.c:826 util/grub-script-check.c:75 +#: util/grub-setup.c:203 +#, fuzzy, c-format +msgid "Unknown extra argument `%s'." +msgstr "未知的額外引數「%s」。\n" + +#: grub-core/kern/emu/main.c:185 +#, fuzzy +msgid "GRUB emulator." +msgstr "卸載 EFI 模擬器。" + +#: grub-core/kern/emu/main.c:213 util/grub-editenv.c:261 +#: util/grub-glue-efi.c:110 util/grub-macbless.c:173 util/grub-mkfont.c:1177 +#: util/grub-mkimage.c:257 util/grub-mklayout.c:494 +#: util/grub-mkpasswd-pbkdf2.c:132 util/grub-mkrelpath.c:96 +#: util/grub-probe.c:815 util/grub-render-label.c:152 +#: util/grub-script-check.c:160 util/grub-setup.c:262 +#: util/grub-syslinux2cfg.c:163 +msgid "Error in parsing command line arguments\n" +msgstr "解析指令列引數時發生錯誤\n" + +#. TRANSLATORS: In this case GRUB tells user what he has to do. +#: grub-core/kern/emu/main.c:248 +#, c-format +msgid "Run `gdb %s %d', and set ARGS.HOLD to zero.\n" +msgstr "" + +#: grub-core/kern/emu/misc.c:46 +#, fuzzy, c-format +msgid "%s: warning:" +msgstr "%s:警告:" + +#: grub-core/kern/emu/misc.c:62 +#, c-format +msgid "%s: info:" +msgstr "%s:資訊:" + +#: grub-core/kern/emu/misc.c:77 util/grub-fstest.c:567 util/grub-fstest.c:576 +#: util/grub-mount.c:497 util/grub-mount.c:505 +#, c-format +msgid "%s: error:" +msgstr "%s:錯誤:" + +#: grub-core/kern/emu/misc.c:174 +#, fuzzy, c-format +msgid "file `%s' is too big" +msgstr "「%s」的大小過大" + +#: grub-core/kern/fs.c:120 +#, fuzzy +msgid "unknown filesystem" +msgstr "非已知檔案系統" + +#: grub-core/kern/mips/arc/init.c:273 grub-core/kern/mips/loongson/init.c:301 +msgid "Shutdown failed" +msgstr "" + +#: grub-core/kern/mips/arc/init.c:285 +msgid "Exit failed" +msgstr "" + +#: grub-core/kern/misc.c:351 grub-core/kern/misc.c:407 include/grub/misc.h:269 +#: include/grub/misc.h:278 +msgid "overflow is detected" +msgstr "" + +#: grub-core/kern/partition.c:51 grub-core/partmap/bsdlabel.c:108 +#, c-format +msgid "Discarding improperly nested partition (%s,%s,%s%d)" +msgstr "" + +#: grub-core/kern/rescue_parser.c:73 util/grub-editenv.c:291 +#, c-format +msgid "Unknown command `%s'.\n" +msgstr "未知指令「%s」。\n" + +#: grub-core/lib/arg.c:31 +msgid "Display this help and exit." +msgstr "顯示本幫助並離開。" + +#: grub-core/lib/arg.c:33 +msgid "Display the usage of this command and exit." +msgstr "顯示本指令的用法並離開。" + +#: grub-core/lib/arg.c:362 +#, c-format +msgid "missing mandatory option for `%s'" +msgstr "" + +#: grub-core/lib/arg.c:384 +#, c-format +msgid "the argument `%s' requires an integer" +msgstr "" + +#: grub-core/lib/arg.c:407 +#, c-format +msgid "" +"a value was assigned to the argument `%s' while it doesn't require an " +"argument" +msgstr "" + +#: grub-core/lib/backtrace.c:64 +#, fuzzy +msgid "Print backtrace." +msgstr "列印區塊清單。" + +#: grub-core/lib/i386/halt.c:77 +msgid "GRUB doesn't know how to halt this machine yet!" +msgstr "" + +#: grub-core/lib/legacy_parse.c:75 +msgid "Default server is ${net_default_server}" +msgstr "" + +#: grub-core/lib/legacy_parse.c:844 grub-core/video/colors.c:296 +#: grub-core/video/colors.c:305 grub-core/video/colors.c:311 +#: grub-core/video/colors.c:327 util/render-label.c:84 util/render-label.c:98 +#, fuzzy, c-format +msgid "invalid color specification `%s'" +msgstr "無效的根裝置「%s」" + +#: grub-core/lib/mips/arc/reboot.c:32 grub-core/lib/mips/loongson/reboot.c:61 +msgid "Reboot failed" +msgstr "" + +#: grub-core/lib/random.c:113 +msgid "[LENGTH]" +msgstr "" + +#: grub-core/lib/random.c:114 +msgid "Hexdump random data." +msgstr "" + +#: grub-core/loader/arm/linux.c:242 +msgid "device tree must be supplied (see `devicetree' command)" +msgstr "" + +#: grub-core/loader/arm/linux.c:330 +msgid "invalid zImage" +msgstr "" + +#: grub-core/loader/arm/linux.c:449 grub-core/loader/arm64/fdt.c:132 +#, fuzzy +msgid "invalid device tree" +msgstr "無效的裝置「%s」。\n" + +#: grub-core/loader/arm/linux.c:513 grub-core/loader/arm64/linux.c:344 +#: grub-core/loader/i386/linux.c:1143 grub-core/loader/i386/pc/linux.c:477 +#: grub-core/loader/i386/xen.c:956 grub-core/loader/i386/xen.c:958 +#: grub-core/loader/ia64/efi/linux.c:627 grub-core/loader/mips/linux.c:493 +#: grub-core/loader/powerpc/ieee1275/linux.c:382 +#: grub-core/loader/sparc64/ieee1275/linux.c:510 +msgid "Load Linux." +msgstr "載入 Linux。" + +#: grub-core/loader/arm/linux.c:515 grub-core/loader/arm64/linux.c:346 +#: grub-core/loader/i386/linux.c:1145 grub-core/loader/i386/pc/linux.c:480 +#: grub-core/loader/i386/xen.c:960 grub-core/loader/ia64/efi/linux.c:630 +#: grub-core/loader/mips/linux.c:495 +#: grub-core/loader/powerpc/ieee1275/linux.c:384 +#: grub-core/loader/sparc64/ieee1275/linux.c:512 +msgid "Load initrd." +msgstr "載入 initrd。" + +#. TRANSLATORS: DTB stands for device tree blob. +#: grub-core/loader/arm/linux.c:518 grub-core/loader/arm64/fdt.c:157 +#, fuzzy +msgid "Load DTB file." +msgstr "載入 XNU 映像。" + +#: grub-core/loader/arm64/linux.c:57 +msgid "" +"plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:144 +msgid "failed to get FDT" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:392 +msgid "you need to load the Xen Hypervisor first" +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:488 +msgid "Load a xen hypervisor." +msgstr "" + +#: grub-core/loader/arm64/xen_boot.c:491 +#, fuzzy +msgid "Load a xen module." +msgstr "載入 NetBSD 內核模組。" + +#: grub-core/loader/efi/appleloader.c:231 +#, fuzzy +msgid "[OPTS]" +msgstr "[OPTIONS...]" + +#. TRANSLATORS: This command is used on EFI to +#. switch to BIOS mode and boot the OS requiring +#. BIOS. +#: grub-core/loader/efi/appleloader.c:235 +#, fuzzy +msgid "Boot BIOS-based system." +msgstr "啟動舊式系統。" + +#: grub-core/loader/efi/chainloader.c:415 +#: grub-core/loader/i386/pc/chainloader.c:287 +msgid "Load another boot loader." +msgstr "載入另一個開機載入程式。" + +#: grub-core/loader/i386/bsd.c:102 +msgid "Display output on all consoles." +msgstr "顯示輸出於所有主控臺。" + +#: grub-core/loader/i386/bsd.c:103 grub-core/loader/i386/bsd.c:137 +#: grub-core/loader/i386/bsd.c:170 +msgid "Use serial console." +msgstr "使用序列主控臺。" + +#: grub-core/loader/i386/bsd.c:104 grub-core/loader/i386/bsd.c:130 +#: grub-core/loader/i386/bsd.c:158 +msgid "Ask for file name to reboot from." +msgstr "詢問要從何重新開機的檔名。" + +#: grub-core/loader/i386/bsd.c:105 +#, fuzzy +msgid "Use CD-ROM as root." +msgstr "使用 CDROM 作為根。" + +#: grub-core/loader/i386/bsd.c:106 +msgid "Invoke user configuration routing." +msgstr "喚起使用者組態路由。" + +#: grub-core/loader/i386/bsd.c:107 grub-core/loader/i386/bsd.c:134 +#: grub-core/loader/i386/bsd.c:161 +msgid "Enter in KDB on boot." +msgstr "開機時進入 KDB。" + +#: grub-core/loader/i386/bsd.c:108 +msgid "Use GDB remote debugger instead of DDB." +msgstr "使用 GDB 遠端除錯器取代 DDB。" + +#: grub-core/loader/i386/bsd.c:109 +msgid "Disable all boot output." +msgstr "停用所有開機輸出。" + +#: grub-core/loader/i386/bsd.c:111 +msgid "Wait for keypress after every line of output." +msgstr "在每列輸出後等候按鍵按壓。" + +#: grub-core/loader/i386/bsd.c:113 +#, fuzzy +msgid "Use compiled-in root device." +msgstr "使用內編譯的 rootdev。" + +#: grub-core/loader/i386/bsd.c:114 grub-core/loader/i386/bsd.c:133 +#: grub-core/loader/i386/bsd.c:164 +msgid "Boot into single mode." +msgstr "啟動單人模式。" + +#: grub-core/loader/i386/bsd.c:115 grub-core/loader/i386/bsd.c:165 +msgid "Boot with verbose messages." +msgstr "以冗長訊息開機。" + +#: grub-core/loader/i386/bsd.c:131 grub-core/loader/i386/bsd.c:159 +msgid "Don't reboot, just halt." +msgstr "不要重新開機,關機就好。" + +#: grub-core/loader/i386/bsd.c:132 grub-core/loader/i386/bsd.c:160 +msgid "Change configured devices." +msgstr "變更已設定的裝置。" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:141 +msgid "comUNIT[,SPEED]" +msgstr "comUNIT[,SPEED]" + +#: grub-core/loader/i386/bsd.c:156 +msgid "Disable SMP." +msgstr "停用 SMP。" + +#: grub-core/loader/i386/bsd.c:157 +msgid "Disable ACPI." +msgstr "停用 ACPI。" + +#: grub-core/loader/i386/bsd.c:163 +msgid "Don't display boot diagnostic messages." +msgstr "不要顯示開機診斷訊息。" + +#: grub-core/loader/i386/bsd.c:166 +msgid "Boot with debug messages." +msgstr "以除錯訊息開機。" + +#: grub-core/loader/i386/bsd.c:167 +#, fuzzy +msgid "Suppress normal output (warnings remain)." +msgstr "抑制一般輸出 (仍保留警告訊息)。" + +#. TRANSLATORS: "com" is static and not to be translated. It refers to +#. serial ports e.g. com1. +#. +#: grub-core/loader/i386/bsd.c:174 +msgid "[ADDR|comUNIT][,SPEED]" +msgstr "[ADDR|comUNIT][,SPEED]" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "name" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "type" +msgstr "" + +#: grub-core/loader/i386/bsd.c:483 grub-core/loader/i386/bsd.c:549 +msgid "addr" +msgstr "" + +#: grub-core/loader/i386/bsd.c:484 grub-core/loader/i386/bsd.c:550 +msgid "size" +msgstr "" + +#: grub-core/loader/i386/bsd.c:1141 grub-core/loader/i386/linux.c:508 +#: grub-core/loader/i386/xnu.c:1030 +#, fuzzy +msgid "Booting in blind mode" +msgstr "啟動單人模式。" + +#: grub-core/loader/i386/bsd.c:2131 +msgid "Load kernel of FreeBSD." +msgstr "載入 FreeBSD 內核。" + +#: grub-core/loader/i386/bsd.c:2134 +msgid "Load kernel of OpenBSD." +msgstr "載入 OpenBSD 內核。" + +#: grub-core/loader/i386/bsd.c:2137 +msgid "Load kernel of NetBSD." +msgstr "載入 NetBSD 內核。" + +#: grub-core/loader/i386/bsd.c:2141 +msgid "Load FreeBSD env." +msgstr "載入 FreeBSD env。" + +#: grub-core/loader/i386/bsd.c:2144 +msgid "Load FreeBSD kernel module." +msgstr "載入 FreeBSD 內核模組。" + +#: grub-core/loader/i386/bsd.c:2147 +msgid "Load NetBSD kernel module." +msgstr "載入 NetBSD 內核模組。" + +#: grub-core/loader/i386/bsd.c:2150 +msgid "Load NetBSD kernel module (ELF)." +msgstr "載入 NetBSD 內核模組 (ELF)。" + +#: grub-core/loader/i386/bsd.c:2153 +msgid "Load FreeBSD kernel module (ELF)." +msgstr "載入 FreeBSD 內核模組 (ELF)。" + +#. TRANSLATORS: ramdisk isn't identifier, +#. it can be translated. +#: grub-core/loader/i386/bsd.c:2159 +#, fuzzy +msgid "Load kOpenBSD ramdisk." +msgstr "載入 OpenBSD 內核。" + +#. TRANSLATORS: "payload" is a term used +#. by coreboot and must be translated in +#. sync with coreboot. If unsure, +#. let it untranslated. +#: grub-core/loader/i386/coreboot/chainloader.c:510 +#, fuzzy +msgid "Load another coreboot payload" +msgstr "載入另一個開機載入程式。" + +#: grub-core/loader/i386/linux.c:900 +msgid "Legacy `ask' parameter no longer supported." +msgstr "" + +#: grub-core/loader/i386/linux.c:916 grub-core/loader/i386/linux.c:926 +#: grub-core/loader/i386/linux.c:956 +#, c-format +msgid "%s is deprecated. Use set gfxpayload=%s before linux command instead.\n" +msgstr "" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, +#. so please don't use better Unicode codepoints. +#: grub-core/loader/i386/linux.c:939 +#, c-format +msgid "" +"%s is deprecated. VGA mode %d isn't recognized. Use set " +"gfxpayload=WIDTHxHEIGHT[xDEPTH] before linux command instead.\n" +msgstr "" + +#: grub-core/loader/i386/pc/chainloader.c:286 +msgid "[--force|--bpb] FILE" +msgstr "" + +#: grub-core/loader/i386/pc/freedos.c:148 util/setup.c:292 +#, c-format +msgid "the size of `%s' is too large" +msgstr "「%s」的大小過大" + +#: grub-core/loader/i386/pc/freedos.c:183 +#, fuzzy +msgid "Load FreeDOS kernel.sys." +msgstr "載入 FreeBSD 內核模組。" + +#: grub-core/loader/i386/pc/ntldr.c:155 +msgid "Load NTLDR or BootMGR." +msgstr "載入 NTLDR 或 BootMGR。" + +#. TRANSLATORS: it's about guessing which GRUB disk +#. is which Plan9 disk. If your language has no +#. word "mapping" you can use another word which +#. means that the GRUBDEVICE and PLAN9DEVICE are +#. actually the same device, just named differently +#. in OS and GRUB. +#: grub-core/loader/i386/pc/plan9.c:58 +msgid "Override guessed mapping of Plan9 devices." +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:59 +msgid "GRUBDEVICE=PLAN9DEVICE" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +msgid "KERNEL ARGS" +msgstr "" + +#: grub-core/loader/i386/pc/plan9.c:588 +#, fuzzy +msgid "Load Plan9 kernel." +msgstr "載入 multiboot 內核。" + +#: grub-core/loader/i386/pc/pxechainloader.c:161 +#, fuzzy +msgid "Load a PXE image." +msgstr "載入 XNU 映像。" + +#: grub-core/loader/i386/pc/truecrypt.c:226 +msgid "Load Truecrypt ISO." +msgstr "" + +#: grub-core/loader/i386/xen.c:777 grub-core/loader/i386/xen.c:861 +msgid "initrd already loaded" +msgstr "" + +#: grub-core/loader/i386/xen.c:962 +#, fuzzy +msgid "Load module." +msgstr "移除模組。" + +#: grub-core/loader/i386/xnu.c:1003 +#, fuzzy +msgid "Press any key to launch xnu" +msgstr "按下任意鍵繼續..." + +#. TRANSLATORS: `device-properties' +#. is a variable name, +#. not a program. +#: grub-core/loader/i386/xnu.c:1159 +#, fuzzy +msgid "Load `device-properties' dump." +msgstr "載入裝置屬性傾印。" + +#: grub-core/loader/ia64/efi/linux.c:123 +msgid "Could not locate FPSWA driver" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:131 +msgid "FPSWA protocol wasn't able to find the interface" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:616 +msgid "No FPSWA found" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:618 +#, c-format +msgid "FPSWA revision: %x\n" +msgstr "" + +#: grub-core/loader/ia64/efi/linux.c:627 +#, fuzzy +msgid "FILE [ARGS...]" +msgstr "FILE [ARG ...]" + +#: grub-core/loader/ia64/efi/linux.c:633 +msgid "Display FPSWA version." +msgstr "" + +#: grub-core/loader/multiboot.c:233 +msgid "WARNING: no console will be available to OS" +msgstr "" + +#: grub-core/loader/multiboot.c:437 +msgid "Load a multiboot 2 kernel." +msgstr "載入 multiboot 2 內核。" + +#: grub-core/loader/multiboot.c:440 +msgid "Load a multiboot 2 module." +msgstr "載入 multiboot 2 模組。" + +#: grub-core/loader/multiboot.c:443 +msgid "Load a multiboot kernel." +msgstr "載入 multiboot 內核。" + +#: grub-core/loader/multiboot.c:446 +msgid "Load a multiboot module." +msgstr "載入 multiboot 模組。" + +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:45 +msgid "Background image mode." +msgstr "" + +#. TRANSLATORS: This refers to background image mode (stretched or +#. in left-top corner). Note that GRUB will accept only original +#. keywords stretch and normal, not the translated ones. +#. So please put both in translation +#. e.g. stretch(=%STRETCH%)|normal(=%NORMAL%). +#. The percents mark the translated version. Since many people +#. may not know the word stretch or normal I recommend +#. putting the translation either here or in "Background image mode." +#. string. +#: grub-core/loader/xnu.c:1407 grub-core/term/gfxterm_background.c:55 +#, fuzzy +msgid "stretch|normal" +msgstr "[-m (stretch|normal)] FILE" + +#: grub-core/loader/xnu.c:1473 +msgid "Load XNU image." +msgstr "載入 XNU 映像。" + +#: grub-core/loader/xnu.c:1475 +msgid "Load 64-bit XNU image." +msgstr "載入 64 位元 XNU 映像。" + +#: grub-core/loader/xnu.c:1477 +msgid "Load XNU extension package." +msgstr "載入 XNU 擴充套件。" + +#: grub-core/loader/xnu.c:1479 +msgid "Load XNU extension." +msgstr "載入 XNU 擴充。" + +#. TRANSLATORS: OSBundleRequired is a +#. variable name in xnu extensions +#. manifests. It behaves mostly like +#. GNU/Linux runlevels. +#. +#: grub-core/loader/xnu.c:1486 +msgid "DIRECTORY [OSBundleRequired]" +msgstr "DIRECTORY [OSBundleRequired]" + +#. TRANSLATORS: There are many extensions +#. in extension directory. +#: grub-core/loader/xnu.c:1489 +msgid "Load XNU extension directory." +msgstr "載入 XNU 擴充目錄。" + +#. TRANSLATORS: ramdisk here isn't identifier. It can be translated. +#: grub-core/loader/xnu.c:1492 +msgid "Load XNU ramdisk. It will be available in OS as md0." +msgstr "" + +#: grub-core/loader/xnu.c:1496 +msgid "Load a splash image for XNU." +msgstr "為 XNU 載入 splash 影像。" + +#: grub-core/loader/xnu.c:1501 +#, fuzzy +msgid "Load an image of hibernated XNU." +msgstr "為 XNU 載入 splash 影像。" + +#: grub-core/mmap/mmap.c:538 +msgid "ADDR1,MASK1[,ADDR2,MASK2[,...]]" +msgstr "ADDR1,MASK1[,ADDR2,MASK2[,...]]" + +#: grub-core/mmap/mmap.c:539 +#, fuzzy +msgid "Declare memory regions as faulty (badram)." +msgstr "宣告記憶體區域為 badram。" + +#: grub-core/mmap/mmap.c:541 +msgid "FROM[K|M|G] TO[K|M|G]" +msgstr "FROM[K|M|G] TO[K|M|G]" + +#: grub-core/mmap/mmap.c:542 +msgid "Remove any memory regions in specified range." +msgstr "移除任何指定範圍內的記憶體區域。" + +#: grub-core/net/bootp.c:324 +msgid "four arguments expected" +msgstr "" + +#: grub-core/net/bootp.c:332 grub-core/net/net.c:1155 +#, c-format +msgid "unrecognised network interface `%s'" +msgstr "" + +#: grub-core/net/bootp.c:335 +msgid "no DHCP info found" +msgstr "" + +#: grub-core/net/bootp.c:338 grub-core/net/bootp.c:350 +msgid "no DHCP options found" +msgstr "" + +#: grub-core/net/bootp.c:357 grub-core/net/bootp.c:367 +#, c-format +msgid "no DHCP option %d found" +msgstr "" + +#: grub-core/net/bootp.c:431 +#, c-format +msgid "unrecognised DHCP option format specification `%s'" +msgstr "" + +#: grub-core/net/bootp.c:455 +msgid "no network card found" +msgstr "" + +#: grub-core/net/bootp.c:577 grub-core/net/net.c:389 +#, c-format +msgid "couldn't autoconfigure %s" +msgstr "" + +#: grub-core/net/bootp.c:591 +msgid "[CARD]" +msgstr "" + +#: grub-core/net/bootp.c:592 +msgid "perform a bootp autoconfiguration" +msgstr "" + +#: grub-core/net/bootp.c:594 +msgid "VAR INTERFACE NUMBER DESCRIPTION" +msgstr "" + +#: grub-core/net/bootp.c:595 +msgid "" +"retrieve DHCP option and save it into VAR. If VAR is - then print the value." +msgstr "" + +#: grub-core/net/dns.c:459 +msgid "no DNS servers configured" +msgstr "" + +#: grub-core/net/dns.c:522 +msgid "domain name component is too long" +msgstr "" + +#: grub-core/net/dns.c:618 grub-core/net/dns.c:666 +msgid "no DNS record found" +msgstr "" + +#: grub-core/net/dns.c:626 +msgid "no DNS reply received" +msgstr "" + +#: grub-core/net/dns.c:682 +msgid "only ipv4" +msgstr "" + +#: grub-core/net/dns.c:686 +msgid "only ipv6" +msgstr "" + +#: grub-core/net/dns.c:690 +msgid "prefer ipv4" +msgstr "" + +#: grub-core/net/dns.c:694 +msgid "prefer ipv6" +msgstr "" + +#: grub-core/net/dns.c:727 +msgid "invalid argument" +msgstr "" + +#: grub-core/net/dns.c:759 +msgid "ADDRESS DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:760 +msgid "Perform a DNS lookup" +msgstr "" + +#: grub-core/net/dns.c:762 grub-core/net/dns.c:765 +msgid "DNSSERVER" +msgstr "" + +#: grub-core/net/dns.c:763 +msgid "Add a DNS server" +msgstr "" + +#: grub-core/net/dns.c:766 +msgid "Remove a DNS server" +msgstr "" + +#: grub-core/net/dns.c:768 +#, fuzzy +msgid "List DNS servers" +msgstr "列出 PCI 裝置。" + +#: grub-core/net/drivers/efi/efinet.c:49 grub-core/net/drivers/efi/efinet.c:65 +#: grub-core/net/drivers/efi/efinet.c:77 grub-core/net/drivers/emu/emunet.c:62 +#: grub-core/net/drivers/i386/pc/pxe.c:273 +#: grub-core/net/drivers/ieee1275/ofnet.c:75 +#: grub-core/net/drivers/uboot/ubootnet.c:62 +msgid "couldn't send network packet" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:319 +#: grub-core/net/drivers/ieee1275/ofnet.c:352 +msgid "interpret is not supported" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:329 +msgid "alloc-mem failed" +msgstr "" + +#: grub-core/net/drivers/ieee1275/ofnet.c:363 +msgid "free-mem failed" +msgstr "" + +#: grub-core/net/http.c:105 +msgid "unsupported HTTP response" +msgstr "" + +#. TRANSLATORS: GRUB HTTP code is pretty young. So even perfectly +#. valid answers like 403 will trigger this very generic message. +#: grub-core/net/http.c:126 +#, c-format +msgid "unsupported HTTP error %d: %s" +msgstr "" + +#: grub-core/net/http.c:429 grub-core/net/tftp.c:420 +#, fuzzy, c-format +msgid "time out opening `%s'" +msgstr "無法開啟「%s」" + +#: grub-core/net/net.c:179 +msgid "timeout: could not resolve hardware address" +msgstr "" + +#: grub-core/net/net.c:548 +#, c-format +msgid "unresolvable address %s" +msgstr "" + +#: grub-core/net/net.c:594 +#, c-format +msgid "unrecognised network address `%s'" +msgstr "" + +#: grub-core/net/net.c:661 +msgid "destination unreachable" +msgstr "" + +#. TRANSLATORS: route loop is a condition when e.g. +#. to contact server A you need to go through B +#. and to contact B you need to go through A. +#: grub-core/net/net.c:684 +msgid "route loop detected" +msgstr "" + +#: grub-core/net/net.c:700 +msgid "address not found" +msgstr "" + +#: grub-core/net/net.c:704 +msgid "you can't delete this address" +msgstr "" + +#: grub-core/net/net.c:776 grub-core/net/net.c:792 +#, c-format +msgid "Unsupported hw address type %d\n" +msgstr "" + +#: grub-core/net/net.c:813 +#, c-format +msgid "Unsupported address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1017 grub-core/net/net.c:1131 +msgid "three arguments expected" +msgstr "" + +#: grub-core/net/net.c:1023 +msgid "card not found" +msgstr "" + +#. TRANSLATORS: it refers to the network address. +#: grub-core/net/net.c:1167 +msgid "temporary" +msgstr "" + +#: grub-core/net/net.c:1190 +#, c-format +msgid "Unknown address type %d\n" +msgstr "" + +#: grub-core/net/net.c:1298 +#, fuzzy +msgid "no server is specified" +msgstr "沒有指定裝置。\n" + +#: grub-core/net/net.c:1637 +#, c-format +msgid "timeout reading `%s'" +msgstr "" + +#. TRANSLATORS: HWADDRESS stands for +#. "hardware address". +#: grub-core/net/net.c:1762 +msgid "SHORTNAME CARD ADDRESS [HWADDRESS]" +msgstr "" + +#: grub-core/net/net.c:1763 +msgid "Add a network address." +msgstr "" + +#: grub-core/net/net.c:1766 +msgid "[CARD [HWADDRESS]]" +msgstr "" + +#: grub-core/net/net.c:1767 +msgid "Perform an IPV6 autoconfiguration" +msgstr "" + +#: grub-core/net/net.c:1770 grub-core/net/net.c:1777 +#, fuzzy +msgid "SHORTNAME" +msgstr "VARNAME" + +#: grub-core/net/net.c:1771 +#, fuzzy +msgid "Delete a network address." +msgstr "設定序列埠位址。" + +#. TRANSLATORS: "gw" is a keyword. +#: grub-core/net/net.c:1774 +msgid "SHORTNAME NET [INTERFACE| gw GATEWAY]" +msgstr "" + +#: grub-core/net/net.c:1775 +msgid "Add a network route." +msgstr "" + +#: grub-core/net/net.c:1778 +msgid "Delete a network route." +msgstr "" + +#: grub-core/net/net.c:1780 +msgid "list network routes" +msgstr "" + +#: grub-core/net/net.c:1782 +msgid "list network cards" +msgstr "" + +#: grub-core/net/net.c:1784 +msgid "list network addresses" +msgstr "" + +#: grub-core/net/tcp.c:681 +msgid "connection refused" +msgstr "" + +#: grub-core/net/tcp.c:684 +msgid "connection timeout" +msgstr "" + +#: grub-core/normal/auth.c:220 +msgid "Enter username: " +msgstr "輸入使用者名稱:" + +#: grub-core/normal/auth.c:269 +msgid "[USERLIST]" +msgstr "[USERLIST]" + +#: grub-core/normal/auth.c:270 +msgid "Check whether user is in USERLIST." +msgstr "" + +#: grub-core/normal/cmdline.c:174 grub-core/normal/menu_entry.c:1068 +msgid "Possible commands are:" +msgstr "可能的指令有:" + +#: grub-core/normal/cmdline.c:177 grub-core/normal/menu_entry.c:1072 +msgid "Possible devices are:" +msgstr "可能的裝置有:" + +#: grub-core/normal/cmdline.c:180 grub-core/normal/menu_entry.c:1076 +msgid "Possible files are:" +msgstr "可能的檔案有:" + +#: grub-core/normal/cmdline.c:183 grub-core/normal/menu_entry.c:1080 +msgid "Possible partitions are:" +msgstr "可能的分割區有:" + +#: grub-core/normal/cmdline.c:186 grub-core/normal/menu_entry.c:1084 +msgid "Possible arguments are:" +msgstr "可能的參數有:" + +#. TRANSLATORS: this message is used if none of above matches. +#. This shouldn't happen but please use the general term for +#. "thing" or "object". +#: grub-core/normal/cmdline.c:192 grub-core/normal/menu_entry.c:1088 +msgid "Possible things are:" +msgstr "可能的東西有:" + +#: grub-core/normal/color.c:81 +#, c-format +msgid "Warning: syntax error (missing slash) in `%s'\n" +msgstr "警告:語法錯誤 (遺失正斜線) 於「%s」\n" + +#: grub-core/normal/color.c:90 +#, c-format +msgid "Warning: invalid foreground color `%s'\n" +msgstr "警告:無效的前景色彩「%s」\n" + +#: grub-core/normal/color.c:96 +#, c-format +msgid "Warning: invalid background color `%s'\n" +msgstr "警告:無效的背景色彩「%s」\n" + +#: grub-core/normal/context.c:206 +msgid "ENVVAR [ENVVAR] ..." +msgstr "ENVVAR [ENVVAR] ..." + +#: grub-core/normal/context.c:207 +msgid "Export variables." +msgstr "輸出變數。" + +#: grub-core/normal/datetime.c:25 +msgid "Sunday" +msgstr "" + +#: grub-core/normal/datetime.c:26 +msgid "Monday" +msgstr "" + +#: grub-core/normal/datetime.c:27 +msgid "Tuesday" +msgstr "" + +#: grub-core/normal/datetime.c:28 +msgid "Wednesday" +msgstr "" + +#: grub-core/normal/datetime.c:29 +msgid "Thursday" +msgstr "" + +#: grub-core/normal/datetime.c:30 +msgid "Friday" +msgstr "" + +#: grub-core/normal/datetime.c:31 +msgid "Saturday" +msgstr "" + +#: grub-core/normal/dyncmd.c:187 +#, fuzzy +msgid "module isn't loaded" +msgstr "未載入" + +#: grub-core/normal/main.c:211 +#, c-format +msgid "GNU GRUB version %s" +msgstr "GNU GRUB 版本 %s" + +#: grub-core/normal/main.c:360 +msgid "ESC at any time exits." +msgstr "任何時刻的 ESC 都能離開。" + +#: grub-core/normal/main.c:363 +#, c-format +msgid "" +"Minimal BASH-like line editing is supported. For the first word, TAB lists " +"possible command completions. Anywhere else TAB lists possible device or " +"file completions. %s" +msgstr "" +"支援最基本的類 BASH 列編輯。對於輸入的第一個單詞,TAB 可以列出可能的指令補" +"完。其他地方的 TAB 可以列出可能的裝置或檔案補完。%s" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:395 +msgid ">" +msgstr "" + +#. TRANSLATORS: it's command line prompt. +#: grub-core/normal/main.c:398 +msgid "grub>" +msgstr "" + +#: grub-core/normal/main.c:518 +msgid "Clear the screen." +msgstr "清除畫面。" + +#: grub-core/normal/main.c:527 +msgid "Enter normal mode." +msgstr "輸入一般密碼。" + +#: grub-core/normal/main.c:529 +msgid "Exit from normal mode." +msgstr "離開一般模式。" + +#: grub-core/normal/menu.c:66 grub-core/normal/menu_entry.c:1449 +msgid "Press any key to continue..." +msgstr "按下任意鍵繼續..." + +#: grub-core/normal/menu.c:814 +#, fuzzy, c-format +msgid "Booting `%s'" +msgstr "正在啟動「%s」" + +#: grub-core/normal/menu.c:826 +#, fuzzy, c-format +msgid "Falling back to `%s'" +msgstr "正在退回「%s」" + +#: grub-core/normal/menu.c:842 +msgid "Failed to boot both default and fallback entries.\n" +msgstr "無法啟動預設條目以及後備條目。\n" + +#: grub-core/normal/menu_entry.c:1171 +msgid "Booting a command list" +msgstr "正在啟動指令清單" + +#: grub-core/normal/menu_text.c:160 +msgid "" +"Minimum Emacs-like screen editing is supported. TAB lists completions. Press " +"Ctrl-x or F10 to boot, Ctrl-c or F2 for a command-line or ESC to discard " +"edits and return to the GRUB menu." +msgstr "" +"支援基本的類 Emacs 編輯畫面。TAB 鍵可以列出補完。按下 Ctrl-x 或是 F10 可以開" +"機,Ctrl-c 或 F12 可以取得指令列,而 ESC 可以放棄編輯並返回 GRUB 選單。" + +#: grub-core/normal/menu_text.c:170 +#, fuzzy, c-format +msgid "Use the %C and %C keys to select which entry is highlighted." +msgstr "使用 %C 以及 %C 鍵來選取要突顯哪個條目。\n" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:38 +msgid "B" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "KiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "MiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "GiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "TiB" +msgstr "" + +#: grub-core/normal/misc.c:38 +msgid "PiB" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:40 +msgid "K" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "M" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "G" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "T" +msgstr "" + +#: grub-core/normal/misc.c:40 +msgid "P" +msgstr "" + +#. TRANSLATORS: that's the list of binary unit prefixes. +#: grub-core/normal/misc.c:42 +msgid "B/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "KiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "MiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "GiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "TiB/s" +msgstr "" + +#: grub-core/normal/misc.c:42 +msgid "PiB/s" +msgstr "" + +#: grub-core/normal/misc.c:96 +#, c-format +msgid "Partition %s:" +msgstr "分割區 %s:" + +#: grub-core/normal/misc.c:101 +#, c-format +msgid "Device %s:" +msgstr "裝置 %s:" + +#: grub-core/normal/misc.c:107 +msgid "Filesystem cannot be accessed" +msgstr "無法存取檔案系統" + +#: grub-core/normal/misc.c:121 +#, c-format +msgid "Filesystem type %s" +msgstr "檔案系統類型 %s" + +#: grub-core/normal/misc.c:131 +#, fuzzy, c-format +msgid "- Label `%s'" +msgstr "- 標籤「%s」" + +#. TRANSLATORS: Arguments are year, month, day, hour, minute, +#. second, day of the week (translated). +#: grub-core/normal/misc.c:148 +#, c-format +msgid "- Last modification time %d-%02d-%02d %02d:%02d:%02d %s" +msgstr "- 上次修改時間 %d-%02d-%02d %02d:%02d:%02d %s" + +#: grub-core/normal/misc.c:171 +#, fuzzy +msgid "No known filesystem detected" +msgstr "非已知檔案系統" + +#: grub-core/normal/misc.c:174 +#, fuzzy, c-format +msgid " - Partition start at %llu%sKiB" +msgstr " - 分割區起始於 %u" + +#: grub-core/normal/misc.c:178 +#, c-format +msgid " - Sector size %uB" +msgstr "" + +#: grub-core/normal/misc.c:180 +msgid " - Total size unknown" +msgstr " - 總大小未知" + +#: grub-core/normal/misc.c:182 +#, fuzzy, c-format +msgid " - Total size %llu%sKiB" +msgstr " - 總大小 %u 個磁區" + +#. TRANSLATORS: Replace dot with appropriate decimal separator for +#. your language. +#: grub-core/normal/misc.c:186 +msgid ".5" +msgstr "" + +#. TRANSLATORS: This has to fit on one line. It's ok to include few +#. words but don't write poems. +#: grub-core/normal/term.c:82 +msgid "--MORE--" +msgstr "" + +#: grub-core/osdep/aros/config.c:92 grub-core/osdep/unix/config.c:137 +#: grub-core/osdep/windows/config.c:55 +#, fuzzy, c-format +msgid "cannot open configuration file `%s': %s" +msgstr "無法開啟檔案 %s" + +#: grub-core/osdep/basic/compress.c:8 grub-core/osdep/basic/compress.c:14 +#: grub-core/osdep/basic/compress.c:20 +msgid "no compression is available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:30 +#: grub-core/osdep/windows/platform.c:416 +msgid "no IEEE1275 routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:38 +msgid "no EFI routines are available for your platform" +msgstr "" + +#: grub-core/osdep/basic/no_platform.c:45 +#: grub-core/osdep/windows/platform.c:423 +msgid "no SGI routines are available for your platform" +msgstr "" + +#. TRANSLATORS: The OS itself may very well have a random +#. number generator but GRUB doesn't know how to access it. +#: grub-core/osdep/basic/random.c:42 +msgid "no random number generator is available for your OS" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:81 +msgid "Failed to create `device-mapper' tree" +msgstr "" + +#: grub-core/osdep/devmapper/getroot.c:197 +#: grub-core/osdep/freebsd/getroot.c:202 +#, c-format +msgid "can't mount encrypted volume `%s': %s" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. +#. +#: grub-core/osdep/freebsd/getroot.c:82 grub-core/osdep/freebsd/getroot.c:164 +#: grub-core/osdep/freebsd/getroot.c:258 grub-core/osdep/freebsd/getroot.c:316 +#, fuzzy +msgid "couldn't open geom" +msgstr "無法開啟裝置" + +#: grub-core/osdep/freebsd/getroot.c:182 grub-core/osdep/freebsd/getroot.c:277 +msgid "couldn't find geli consumer" +msgstr "" + +#: grub-core/osdep/freebsd/getroot.c:282 +msgid "couldn't retrieve geli UUID" +msgstr "" + +#. TRANSLATORS: geom is the name of (k)FreeBSD device framework. +#. Usually left untranslated. "part" is the identifier of one of its +#. classes. +#: grub-core/osdep/freebsd/getroot.c:325 +msgid "couldn't find geom `part' class" +msgstr "" + +#: grub-core/osdep/freebsd/hostdisk.c:72 grub-core/osdep/linux/hostdisk.c:93 +#, fuzzy +msgid "unaligned device size" +msgstr "無效的裝置「%s」。\n" + +#: grub-core/osdep/generic/blocklist.c:56 +#, c-format +msgid "attempting to read the core image `%s' from GRUB" +msgstr "正試圖從 GRUB 讀取核心映像「%s」" + +#: grub-core/osdep/generic/blocklist.c:57 +#, c-format +msgid "attempting to read the core image `%s' from GRUB again" +msgstr "正試圖從 GRUB 再次讀取核心映像「%s」" + +#: grub-core/osdep/generic/blocklist.c:116 +#, c-format +msgid "cannot read `%s' correctly" +msgstr "無法正確讀取「%s」" + +#: grub-core/osdep/generic/blocklist.c:128 +#, fuzzy +msgid "failed to read the sectors of the core image" +msgstr "無法讀取核心映像的剩餘磁區" + +#. TRANSLATORS: On GNU/Hurd, a "translator" is similar to a filesystem +#. mount, but handled by a userland daemon, whose invocation command line +#. is being fetched here. First %s is the file being looked at (for which +#. we are fetching the "translator" command line), second %s is the error +#. message. +#. +#: grub-core/osdep/hurd/getroot.c:79 +#, c-format +msgid "cannot get translator command line for path `%s': %s" +msgstr "" + +#: grub-core/osdep/hurd/getroot.c:82 +#, c-format +msgid "translator command line is empty for path `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:98 +#, c-format +msgid "" +"translator `%s' for path `%s' has several non-option words, at least `%s' " +"and `%s'" +msgstr "" + +#. TRANSLATORS: we expect to get something like +#. /hurd/foobar --option1 --option2=baz /dev/something +#. +#: grub-core/osdep/hurd/getroot.c:109 +#, c-format +msgid "" +"translator `%s' for path `%s' is given only options, cannot find device part" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:73 +#, c-format +msgid "Storage information for `%s' does not include type" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:75 +#, c-format +msgid "`%s' is not a local disk" +msgstr "" + +#: grub-core/osdep/hurd/hostdisk.c:78 +#, c-format +msgid "" +"Storage information for `%s' indicates neither a plain partition nor a plain " +"disk" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:81 grub-core/osdep/linux/blocklist.c:96 +#: grub-core/osdep/linux/blocklist.c:122 +#, c-format +msgid "can't retrieve blocklists: %s" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:84 +msgid "blocksize is not divisible by 512" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:86 +msgid "invalid zero blocksize" +msgstr "" + +#: grub-core/osdep/linux/blocklist.c:90 util/setup.c:669 +msgid "can't retrieve blocklists" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:154 +#, c-format +msgid "ioctl RAID_VERSION error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:160 grub-core/osdep/linux/getroot.c:164 +#, c-format +msgid "unsupported RAID version: %d.%d" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:169 +#, c-format +msgid "ioctl GET_ARRAY_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:178 +#, c-format +msgid "ioctl GET_DISK_INFO error: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:608 grub-core/osdep/linux/getroot.c:678 +#: grub-core/osdep/linux/hostdisk.c:126 grub-core/osdep/unix/getroot.c:250 +#: grub-core/osdep/unix/getroot.c:631 grub-core/osdep/unix/platform.c:91 +#: grub-core/osdep/unix/platform.c:99 +#, c-format +msgid "Unable to open stream from %s: %s" +msgstr "" + +#: grub-core/osdep/linux/getroot.c:1033 +#, fuzzy, c-format +msgid "unknown kind of RAID device `%s'" +msgstr "無效的根裝置「%s」" + +#: grub-core/osdep/linux/ofpath.c:138 +#, c-format +msgid "`obppath' not found in parent dirs of `%s', no IEEE1275 name discovery" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:179 grub-core/osdep/unix/getroot.c:494 +#: grub-core/osdep/unix/getroot.c:518 grub-core/osdep/unix/relpath.c:49 +#: util/grub-install.c:972 util/grub-install.c:1305 util/grub-probe.c:267 +#, c-format +msgid "failed to get canonical path of `%s'" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:542 +#, c-format +msgid "unknown device type %s" +msgstr "" + +#: grub-core/osdep/linux/ofpath.c:560 util/ieee1275/grub-ofpathname.c:39 +#, c-format +msgid "Usage: %s DEVICE\n" +msgstr "" + +#: grub-core/osdep/unix/exec.c:86 grub-core/osdep/unix/exec.c:172 +#: grub-core/osdep/unix/exec.c:217 +#, c-format +msgid "Unable to fork: %s" +msgstr "" + +#: grub-core/osdep/unix/exec.c:166 grub-core/osdep/unix/exec.c:211 +#, c-format +msgid "Unable to create pipe: %s" +msgstr "" + +#: grub-core/osdep/unix/getroot.c:415 grub-core/osdep/unix/getroot.c:469 +#: grub-core/osdep/unix/getroot.c:478 +#, fuzzy +msgid "cannot restore the original directory" +msgstr "無法壓縮內核映像" + +#. TRANSLATORS: "stat" comes from the name of POSIX function. +#: grub-core/osdep/unix/getroot.c:540 grub-core/osdep/unix/hostdisk.c:61 +#: grub-core/osdep/unix/relpath.c:73 grub-core/osdep/unix/relpath.c:97 +#: util/getroot.c:160 util/getroot.c:162 util/grub-install.c:770 +#: util/grub-macbless.c:70 +#, fuzzy, c-format +msgid "cannot stat `%s': %s" +msgstr "無法開啟「%s」" + +#: grub-core/osdep/unix/hostdisk.c:283 +#, fuzzy, c-format +msgid "cannot make temporary file: %s" +msgstr "無法開啟檔案 %s" + +#: grub-core/osdep/unix/hostdisk.c:301 +#, c-format +msgid "cannot make temporary directory: %s" +msgstr "" + +#: grub-core/osdep/unix/platform.c:77 +#, c-format +msgid "" +"couldn't find IEEE1275 device path for %s.\n" +"You will have to set `boot-device' variable manually" +msgstr "" + +#. TRANSLATORS: This message is shown when required executable `%s' +#. isn't found. +#: grub-core/osdep/unix/platform.c:146 grub-core/osdep/unix/platform.c:183 +#, fuzzy, c-format +msgid "%s: not found" +msgstr "%s:資訊:" + +#: grub-core/osdep/unix/platform.c:219 +#, c-format +msgid "" +"`nvsetenv' failed. \n" +"You will have to set `boot-device' variable manually. At the IEEE1275 " +"prompt, type:\n" +" %s\n" +msgstr "" + +#: grub-core/osdep/unix/platform.c:234 +msgid "You will have to set `SystemPartition' and `OSLoader' manually." +msgstr "" + +#. TRANSLATORS: canonical pathname is the +#. complete one e.g. /etc/fstab. It has +#. to contain `/' normally, if it doesn't +#. we're in trouble and throw this error. +#: grub-core/osdep/unix/relpath.c:90 +msgid "no `/' in canonical filename" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:151 +msgid "cygwin_conv_path() failed" +msgstr "" + +#: grub-core/osdep/windows/hostdisk.c:489 util/grub-install.c:566 +msgid "couldn't retrieve random data" +msgstr "" + +#: grub-core/osdep/windows/platform.c:97 +msgid "Insufficient privileges to access firmware, assuming BIOS" +msgstr "" + +#: grub-core/osdep/windows/platform.c:225 +msgid "no EFI routines are available when running in BIOS mode" +msgstr "" + +#: grub-core/osdep/windows/platform.c:240 +msgid "unexpected EFI error" +msgstr "" + +#: grub-core/osdep/windows/platform.c:315 +msgid "Couldn't find a free BootNNNN slot" +msgstr "" + +#: grub-core/partmap/gpt.c:191 +msgid "" +"this GPT partition label contains no BIOS Boot Partition; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/gpt.c:196 +msgid "your BIOS Boot Partition is too small; embedding won't be possible" +msgstr "" + +#. TRANSLATORS: MBR gap and boot track is the same thing and is the space +#. between MBR and first partitition. If your language translates well only +#. "boot track", you can just use it everywhere. Next two messages are about +#. RAID controllers/software bugs which GRUB has to live with. Please spread +#. the message that these are bugs in other software and not merely +#. suboptimal behaviour. +#: grub-core/partmap/msdos.c:51 +#, c-format +msgid "" +"Sector %llu is already in use by raid controller `%s'; avoiding it. Please " +"ask the manufacturer not to store data in MBR gap" +msgstr "" + +#: grub-core/partmap/msdos.c:54 +#, c-format +msgid "" +"Sector %llu is already in use by the program `%s'; avoiding it. This " +"software may cause boot or other problems in future. Please ask its authors " +"not to store data in the boot track" +msgstr "" + +#: grub-core/partmap/msdos.c:384 +msgid "" +"other software is using the embedding area, and there is not enough room for " +"core.img. Such software is often trying to store data in a way that avoids " +"detection. We recommend you investigate" +msgstr "" + +#: grub-core/partmap/msdos.c:395 +msgid "" +"this msdos-style partition label has no post-MBR gap; embedding won't be " +"possible" +msgstr "" + +#: grub-core/partmap/msdos.c:404 +msgid "your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: grub-core/parttool/msdospart.c:39 +#, fuzzy +msgid "Make partition active" +msgstr "可能的分割區有:" + +#: grub-core/parttool/msdospart.c:51 +msgid "not a primary partition" +msgstr "" + +#: grub-core/parttool/msdospart.c:69 +#, c-format +msgid "Partition %d is active now. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:74 +#, c-format +msgid "Cleared active flag on %d. \n" +msgstr "" + +#: grub-core/parttool/msdospart.c:87 +#, fuzzy +msgid "Change partition type" +msgstr "判斷分割對應類型。" + +#: grub-core/parttool/msdospart.c:88 +#, fuzzy +msgid "Set `hidden' flag in partition type" +msgstr "判斷分割對應類型。" + +#: grub-core/parttool/msdospart.c:130 +#, c-format +msgid "the partition type 0x%x isn't valid" +msgstr "" + +#. TRANSLATORS: In this case we're actually writing to the disk and actively +#. modifying partition type rather than just defining it. +#: grub-core/parttool/msdospart.c:137 +#, fuzzy, c-format +msgid "Setting partition type to 0x%x\n" +msgstr "判斷分割對應類型。" + +#. TRANSLATORS: 0 is a quantifier. "break" (similar to bash) +#. can be used e.g. to break 3 loops at once. +#. But asking it to break 0 loops makes no sense. +#: grub-core/script/execute.c:142 +msgid "can't break 0 loops" +msgstr "" + +#. TRANSLATORS: It's about not being +#. inside a function. "return" can be used only +#. in a function and this error occurs if it's used +#. anywhere else. +#: grub-core/script/execute.c:226 +msgid "not in function body" +msgstr "" + +#: grub-core/script/execute.c:370 +#, fuzzy, c-format +msgid "invalid variable name `%s'" +msgstr "無效的根裝置「%s」" + +#: grub-core/script/lexer.c:144 util/grub-fstest.c:330 +msgid "unexpected end of file" +msgstr "" + +#: grub-core/script/main.c:55 grub-core/script/main.c:57 +#: grub-core/script/main.c:59 grub-core/script/main.c:67 +msgid "[NUM]" +msgstr "" + +#: grub-core/script/main.c:55 +msgid "Exit from loops" +msgstr "離開迴圈" + +#: grub-core/script/main.c:57 +msgid "Continue loops" +msgstr "繼續迴圈" + +#. TRANSLATORS: Positional arguments are +#. arguments $0, $1, $2, ... +#: grub-core/script/main.c:62 +msgid "Shift positional parameters." +msgstr "推移位置參數。" + +#: grub-core/script/main.c:64 +msgid "[VALUE]..." +msgstr "[VALUE]..." + +#: grub-core/script/main.c:65 +msgid "Set positional parameters." +msgstr "設定位置參數。" + +#. TRANSLATORS: It's a command description +#. and "Return" is a verb, not a noun. The +#. command in question is "return" and +#. has exactly the same semanics as bash +#. equivalent. +#: grub-core/script/main.c:73 +msgid "Return from a function." +msgstr "從函式回傳。" + +#: grub-core/term/gfxterm_background.c:176 +msgid "[-m (stretch|normal)] FILE" +msgstr "[-m (stretch|normal)] FILE" + +#: grub-core/term/gfxterm_background.c:177 +msgid "Load background image for active terminal." +msgstr "為使用中終端機載入背景映像。" + +#: grub-core/term/gfxterm_background.c:182 util/grub-install.c:302 +#: util/grub-install.c:303 util/grub-mkrescue.c:107 util/grub-mkrescue.c:108 +#: util/grub-render-label.c:61 util/grub-render-label.c:63 +msgid "COLOR" +msgstr "" + +#: grub-core/term/gfxterm_background.c:183 +#, fuzzy +msgid "Set background color for active terminal." +msgstr "為使用中終端機載入背景映像。" + +#: grub-core/term/i386/coreboot/cbmemc.c:119 +msgid "Show CBMEM console content." +msgstr "" + +#: grub-core/term/serial.c:57 +msgid "Set the serial unit." +msgstr "設定序列單位。" + +#: grub-core/term/serial.c:58 +msgid "Set the serial port address." +msgstr "設定序列埠位址。" + +#: grub-core/term/serial.c:59 +msgid "Set the serial port speed." +msgstr "設定序列埠速度。" + +#: grub-core/term/serial.c:60 +msgid "Set the serial port word length." +msgstr "設定序列埠單詞長度。" + +#: grub-core/term/serial.c:61 +msgid "Set the serial port parity." +msgstr "設定序列埠同位。" + +#: grub-core/term/serial.c:62 +msgid "Set the serial port stop bits." +msgstr "設定序列埠停止位元。" + +#: grub-core/term/serial.c:63 +#, fuzzy +msgid "Set the base frequency." +msgstr "設定序列單位。" + +#: grub-core/term/serial.c:64 +msgid "Enable/disable RTS/CTS." +msgstr "" + +#: grub-core/term/serial.c:218 +#, c-format +msgid "serial port `%s' isn't found" +msgstr "" + +#: grub-core/term/serial.c:254 +msgid "unsupported serial port flow control" +msgstr "" + +#: grub-core/term/serial.c:429 +msgid "[OPTIONS...]" +msgstr "[OPTIONS...]" + +#: grub-core/term/serial.c:430 +msgid "Configure serial port." +msgstr "設定序列埠。" + +#: grub-core/term/terminfo.c:184 +#, fuzzy, c-format +msgid "unknown terminfo type `%s'" +msgstr "未知的額外引數「%s」。\n" + +#: grub-core/term/terminfo.c:668 +msgid "ASCII" +msgstr "ASCII" + +#: grub-core/term/terminfo.c:671 +msgid "UTF-8" +msgstr "UTF-8" + +#. TRANSLATORS: visually ordered UTF-8 is a non-compliant encoding +#. based on UTF-8 with right-to-left languages written in reverse. +#. Used on some terminals. Normal UTF-8 is refered as +#. "logically-ordered UTF-8" by opposition. +#: grub-core/term/terminfo.c:677 +#, fuzzy +msgid "visually-ordered UTF-8" +msgstr "終端機為視覺排序 UTF-8。" + +#: grub-core/term/terminfo.c:680 +#, fuzzy +msgid "Unknown encoding" +msgstr "未知" + +#: grub-core/term/terminfo.c:684 +msgid "Current terminfo types:" +msgstr "" + +#: grub-core/term/terminfo.c:699 +msgid "Terminal is ASCII-only [default]." +msgstr "終端機僅為 ASCII [預設]。" + +#: grub-core/term/terminfo.c:700 +msgid "Terminal is logical-ordered UTF-8." +msgstr "終端機為邏輯排序 UTF-8。" + +#: grub-core/term/terminfo.c:701 +msgid "Terminal is visually-ordered UTF-8." +msgstr "終端機為視覺排序 UTF-8。" + +#: grub-core/term/terminfo.c:703 +#, fuzzy +msgid "Terminal has specified geometry." +msgstr "終端機已給定幾何狀態。" + +#. TRANSLATORS: "x" has to be entered in, like an identifier, so please don't +#. use better Unicode codepoints. +#: grub-core/term/terminfo.c:706 +msgid "WIDTHxHEIGHT." +msgstr "WIDTHxHEIGHT。" + +#: grub-core/term/terminfo.c:746 +msgid "incorrect terminal dimensions specification" +msgstr "" + +#: grub-core/term/terminfo.c:776 +#, c-format +msgid "terminal %s isn't found or it's not handled by terminfo" +msgstr "" + +#: grub-core/term/terminfo.c:785 +msgid "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" +msgstr "[[-a|-u|-v] [-g WxH] TERM [TYPE]]" + +#: grub-core/term/terminfo.c:786 +msgid "Set terminfo type of TERM to TYPE.\n" +msgstr "將 TERM 的 terminfo 類型設定為 TYPE。\n" + +#. TRANSLATORS: this is the BLOCK-argument, not +#. environment block. +#: grub-core/tests/test_blockarg.c:49 +msgid "Print and execute block argument." +msgstr "列印執行區塊引數。" + +#. TRANSLATORS: We're speaking about bitmap images like +#. JPEG or PNG. +#: grub-core/video/bitmap.c:209 +#, c-format +msgid "bitmap file `%s' is of unsupported format" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1191 +#, c-format +msgid " VBE info: version: %d.%d OEM software rev: %d.%d\n" +msgstr "" + +#: grub-core/video/i386/pc/vbe.c:1198 +#, c-format +msgid " total memory: %d KiB\n" +msgstr "" + +#: grub-core/video/video.c:596 grub-core/video/video.c:760 +msgid "no suitable video mode found" +msgstr "" + +#: include/grub/crypto.h:403 +msgid "access denied" +msgstr "" + +#: include/grub/util/install.h:30 include/grub/util/install.h:33 +#, fuzzy +msgid "MODULES" +msgstr "MODULE" + +#: include/grub/util/install.h:31 +msgid "pre-load specified modules MODULES" +msgstr "" + +#: include/grub/util/install.h:34 +msgid "install only MODULES and their dependencies [default=all]" +msgstr "" + +#: include/grub/util/install.h:35 +msgid "THEMES" +msgstr "" + +#: include/grub/util/install.h:36 +#, c-format +msgid "install THEMES [default=%s]" +msgstr "" + +#: include/grub/util/install.h:37 +msgid "FONTS" +msgstr "" + +#: include/grub/util/install.h:38 +#, c-format +msgid "install FONTS [default=%s]" +msgstr "" + +#: include/grub/util/install.h:39 +msgid "LOCALES" +msgstr "" + +#: include/grub/util/install.h:40 +msgid "install only LOCALES [default=all]" +msgstr "" + +#: include/grub/util/install.h:43 +msgid "compress GRUB files [optional]" +msgstr "" + +#: include/grub/util/install.h:46 util/grub-mkimage.c:82 +#, fuzzy +msgid "choose the compression to use for core image" +msgstr "無法壓縮內核映像" + +#. TRANSLATORS: platform here isn't identifier. It can be translated. +#: include/grub/util/install.h:49 include/grub/util/install.h:52 +#: util/grub-mkimage.c:66 +#, c-format +msgid "use images and modules under DIR [default=%s/]" +msgstr "" + +#: include/grub/util/install.h:55 +#, fuzzy, c-format +msgid "use translations under DIR [default=%s]" +msgstr "使用 DIR 目錄內的 GRUB 檔 [預設=%s]" + +#: include/grub/util/install.h:58 +#, fuzzy, c-format +msgid "use themes under DIR [default=%s]" +msgstr "使用 DIR 目錄內的 GRUB 檔 [預設=%s]" + +#: include/grub/util/install.h:63 util/grub-mkimage.c:77 +msgid "embed FILE as public key for signature checking" +msgstr "" + +#: util/editenv.c:63 +#, fuzzy, c-format +msgid "cannot rename the file %s to %s" +msgstr "無法開啟檔案 %s" + +#: util/getroot.c:402 +#, c-format +msgid "disk does not exist, so falling back to partition device %s" +msgstr "" + +#: util/grub-editenv.c:45 util/grub-fstest.c:506 +msgid "Commands:" +msgstr "指令:" + +#: util/grub-editenv.c:47 +msgid "Create a blank environment block file." +msgstr "建立空白環境區塊檔。" + +#: util/grub-editenv.c:49 +msgid "List the current variables." +msgstr "列出目前的變數。" + +#. TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. +#: util/grub-editenv.c:51 +#, fuzzy +msgid "set [NAME=VALUE ...]" +msgstr "[VALUE]..." + +#: util/grub-editenv.c:52 +msgid "Set variables." +msgstr "設定變數。" + +#. TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. +#: util/grub-editenv.c:54 +msgid "unset [NAME ...]" +msgstr "" + +#: util/grub-editenv.c:55 +msgid "Delete variables." +msgstr "刪除變數。" + +#: util/grub-editenv.c:57 +msgid "Options:" +msgstr "選項:" + +#: util/grub-editenv.c:84 +msgid "You need to specify at least one command.\n" +msgstr "您必須指定至少一個指令。\n" + +#: util/grub-editenv.c:113 +msgid "FILENAME COMMAND" +msgstr "FILENAME COMMAND" + +#: util/grub-editenv.c:114 +msgid "Tool to edit environment block." +msgstr "編輯環境區塊的工具。" + +#: util/grub-editenv.c:116 +#, c-format +msgid "" +"If FILENAME is `-', the default value %s is used.\n" +"\n" +"There is no `delete' command; if you want to delete the whole environment\n" +"block, use `rm %s'." +msgstr "" + +#: util/grub-editenv.c:162 +#, fuzzy +msgid "invalid environment block" +msgstr "編輯環境區塊的工具。" + +#: util/grub-editenv.c:216 +#, fuzzy, c-format +msgid "invalid parameter %s" +msgstr "設定位置參數。" + +#: util/grub-editenv.c:221 +msgid "environment block too small" +msgstr "" + +#: util/grub-fstest.c:107 +#, fuzzy, c-format +msgid "disk read fails at offset %lld, length %lld" +msgstr "於偏移 %lld 處磁碟讀取失敗,長度 %d" + +#: util/grub-fstest.c:138 +#, c-format +msgid "invalid skip value %lld" +msgstr "無效的跳過值 %lld" + +#: util/grub-fstest.c:160 util/grub-fstest.c:246 +#, c-format +msgid "read error at offset %llu: %s" +msgstr "讀取偏移 %llu 處時發生錯誤:%s" + +#: util/grub-fstest.c:210 +#, fuzzy, c-format +msgid "cannot open OS file `%s': %s" +msgstr "無法開啟檔案 %s" + +#: util/grub-fstest.c:225 util/misc.c:126 +#, c-format +msgid "cannot write to the stdout: %s" +msgstr "" + +#: util/grub-fstest.c:259 +#, c-format +msgid "compare fail at offset %llu" +msgstr "比較偏移 %llu 處的失敗" + +#: util/grub-fstest.c:280 util/grub-fstest.c:314 +#, c-format +msgid "OS file %s open error: %s" +msgstr "" + +#: util/grub-fstest.c:402 util/grub-mount.c:392 +#, fuzzy, c-format +msgid "`loopback' command fails: %s" +msgstr "迴返指令失敗" + +#: util/grub-fstest.c:413 util/grub-mount.c:402 +#, fuzzy, c-format +msgid "`cryptomount' command fails: %s" +msgstr "迴返指令失敗" + +#: util/grub-fstest.c:474 util/grub-fstest.c:478 +msgid "couldn't retrieve UUID" +msgstr "" + +#: util/grub-fstest.c:507 +msgid "ls PATH" +msgstr "ls PATH" + +#: util/grub-fstest.c:507 +msgid "List files in PATH." +msgstr "列出 PATH 內的檔案。" + +#: util/grub-fstest.c:508 +msgid "cp FILE LOCAL" +msgstr "cp FILE LOCAL" + +#: util/grub-fstest.c:508 +msgid "Copy FILE to local file LOCAL." +msgstr "複製 FILE 至本地檔案 LOCAL。" + +#: util/grub-fstest.c:509 +#, fuzzy +msgid "cat FILE" +msgstr "crc FILE" + +#: util/grub-fstest.c:509 +msgid "Copy FILE to standard output." +msgstr "" + +#: util/grub-fstest.c:510 +msgid "cmp FILE LOCAL" +msgstr "cmp FILE LOCAL" + +#: util/grub-fstest.c:510 +msgid "Compare FILE with local file LOCAL." +msgstr "比較 FILE 與本地檔案 LOCAL。" + +#: util/grub-fstest.c:511 +msgid "hex FILE" +msgstr "hex FILE" + +#: util/grub-fstest.c:511 +#, fuzzy +msgid "Show contents of FILE in hex." +msgstr "顯示檔案的內容。" + +#: util/grub-fstest.c:512 +msgid "crc FILE" +msgstr "crc FILE" + +#: util/grub-fstest.c:512 +msgid "Get crc32 checksum of FILE." +msgstr "取得 FILE 的 crc32 校驗計算碼。" + +#: util/grub-fstest.c:513 +msgid "blocklist FILE" +msgstr "blocklist FILE" + +#: util/grub-fstest.c:513 +msgid "Display blocklist of FILE." +msgstr "顯示 FILE 的區塊檔案。" + +#: util/grub-fstest.c:514 +msgid "xnu_uuid DEVICE" +msgstr "" + +#: util/grub-fstest.c:514 +msgid "Compute XNU UUID of the device." +msgstr "" + +#. TRANSLATORS: bitmaps are images like e.g. in JPEG. +#: util/grub-fstest.c:517 util/grub-fstest.c:518 util/grub-fstest.c:519 +#: util/grub-mkfont.c:938 util/grub-mkfont.c:951 util/grub-mkfont.c:952 +#: util/grub-mkpasswd-pbkdf2.c:46 util/grub-mkpasswd-pbkdf2.c:47 +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "NUM" +msgstr "" + +#: util/grub-fstest.c:517 +msgid "Skip N bytes from output file." +msgstr "跳過輸出檔的 N 位元組。" + +#: util/grub-fstest.c:518 +msgid "Handle N bytes in output file." +msgstr "處理輸出檔的 N 位元組。" + +#: util/grub-fstest.c:519 +#, fuzzy +msgid "Specify the number of input files." +msgstr "指定一個或多個要載入的字型檔。" + +#: util/grub-fstest.c:520 util/grub-mount.c:453 +msgid "Set debug environment variable." +msgstr "設定除錯環境變數。" + +#: util/grub-fstest.c:521 util/grub-mount.c:454 +#, fuzzy +msgid "Mount crypto devices." +msgstr "設定根裝置。" + +#. TRANSLATORS: "prompt" is a keyword. +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "FILE|prompt" +msgstr "" + +#: util/grub-fstest.c:524 util/grub-mount.c:457 +msgid "Load zfs crypto key." +msgstr "" + +#: util/grub-fstest.c:526 +msgid "Uncompress data." +msgstr "" + +#: util/grub-fstest.c:605 +msgid "Invalid disk count.\n" +msgstr "無效的磁碟計數。\n" + +#. TRANSLATORS: disk count is optional but if it's there it must +#. be before disk list. So please don't imply disk count as mandatory. +#. +#: util/grub-fstest.c:613 +msgid "Disk count must precede disks list.\n" +msgstr "磁碟計數必須在磁碟清單之前。\n" + +#: util/grub-fstest.c:633 +msgid "No command is specified.\n" +msgstr "未指定指令。\n" + +#: util/grub-fstest.c:638 +msgid "Not enough parameters to command.\n" +msgstr "指令缺少足夠的參數。\n" + +#: util/grub-fstest.c:711 +#, c-format +msgid "Invalid command %s.\n" +msgstr "無效指令 %s。\n" + +#: util/grub-fstest.c:724 +msgid "IMAGE_PATH COMMANDS" +msgstr "IMAGE_PATH COMMANDS" + +#: util/grub-fstest.c:725 util/grub-mount.c:553 +msgid "Debug tool for filesystem driver." +msgstr "檔案系統驅動程式的除錯工具。" + +#: util/grub-glue-efi.c:53 +msgid "set input filename for 32-bit part." +msgstr "" + +#: util/grub-glue-efi.c:55 +msgid "set input filename for 64-bit part." +msgstr "" + +#: util/grub-glue-efi.c:57 util/grub-mklayout.c:55 util/grub-render-label.c:71 +msgid "set output filename. Default is STDOUT" +msgstr "" + +#: util/grub-glue-efi.c:94 util/grub-mklayout.c:476 +#: util/grub-mkpasswd-pbkdf2.c:86 util/grub-render-label.c:131 +#, fuzzy +msgid "[OPTIONS]" +msgstr "[OPTIONS...]" + +#: util/grub-glue-efi.c:95 +msgid "Glue 32-bit and 64-bit binary into Apple universal one." +msgstr "" + +#: util/grub-glue-efi.c:116 +#, fuzzy +msgid "Missing input file\n" +msgstr "N 個輸出檔。" + +#: util/grub-install-common.c:121 util/grub-install-common.c:145 +#, fuzzy, c-format +msgid "cannot copy `%s' to `%s': %s" +msgstr "無法開啟「%s」" + +#: util/grub-install-common.c:141 +#, fuzzy, c-format +msgid "can't compress `%s' to `%s'" +msgstr "無法開啟「%s」" + +#: util/grub-install-common.c:190 util/grub-install-common.c:539 +#: util/grub-install-common.c:566 util/grub-install-common.c:607 +#, fuzzy, c-format +msgid "cannot open directory `%s': %s" +msgstr "無法開啟「%s」" + +#: util/grub-install-common.c:206 +#, fuzzy, c-format +msgid "cannot delete `%s': %s" +msgstr "無法開啟「%s」" + +#: util/grub-install-common.c:318 util/grub-mkimage.c:200 +msgid "grub-mkimage is compiled without XZ support" +msgstr "" + +#: util/grub-install-common.c:326 util/grub-mkimage.c:208 +#, fuzzy, c-format +msgid "Unknown compression format %s" +msgstr "未知指令「%s」。\n" + +#: util/grub-install-common.c:389 +#, c-format +msgid "Unrecognized compression `%s'" +msgstr "" + +#: util/grub-install-common.c:497 +#, fuzzy, c-format +msgid "unknown target format %s" +msgstr "未知的額外引數「%s」。\n" + +#: util/grub-install-common.c:831 +#, fuzzy, c-format +msgid "cannot find locale `%s'" +msgstr "無法開啟「%s」" + +#: util/grub-install-common.c:914 +#, c-format +msgid "%s doesn't exist. Please specify --target or --directory" +msgstr "" + +#: util/grub-install-common.c:923 util/grub-install-common.c:926 +#, fuzzy, c-format +msgid "invalid modinfo file `%s'" +msgstr "無效的根裝置「%s」" + +#: util/grub-install-common.c:941 +#, fuzzy, c-format +msgid "Unknown platform `%s-%s'" +msgstr "未知指令「%s」。\n" + +#: util/grub-install.c:238 +msgid "More than one install device?" +msgstr "" + +#: util/grub-install.c:251 +#, c-format +msgid "" +"install GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-install.c:256 util/grub-probe.c:686 +msgid "TARGET" +msgstr "" + +#. TRANSLATORS: "TARGET" as in "target platform". +#: util/grub-install.c:258 +#, c-format +msgid "install GRUB for TARGET platform [default=%s]; available targets: %s" +msgstr "" + +#. TRANSLATORS: "may break" doesn't just mean that option wouldn't have any +#. effect but that it will make the resulting install unbootable from HDD. +#. TRANSLATORS: The potential breakage isn't limited to floppies but it's +#. likely to make the install unbootable from HDD. +#: util/grub-install.c:267 util/grub-setup.c:94 +#, fuzzy +msgid "" +"make the drive also bootable as floppy (default for fdX devices). May break " +"on some BIOSes." +msgstr "" +"讓裝置也可以作為軟碟開機 (為 fdX 裝置的預設值)。在某些 BIOS 上可能會失敗。" + +#: util/grub-install.c:270 +msgid "delete device map if it already exists" +msgstr "" + +#: util/grub-install.c:272 util/grub-setup.c:87 +#, fuzzy +msgid "install even if problems are detected" +msgstr "即使偵測到問題也要安裝" + +#: util/grub-install.c:274 +msgid "use identifier file even if UUID is available" +msgstr "" + +#: util/grub-install.c:276 +msgid "" +"disk module to use (biosdisk or native). This option is only available on " +"BIOS target." +msgstr "" + +#: util/grub-install.c:279 +msgid "" +"don't update the `boot-device'/`Boot*' NVRAM variables. This option is only " +"available on EFI and IEEE1275 targets." +msgstr "" + +#: util/grub-install.c:282 util/grub-setup.c:89 +#, fuzzy +msgid "do not probe for filesystems in DEVICE" +msgstr "不要探測 DEVICE 內的檔案系統" + +#: util/grub-install.c:284 +msgid "do not install bootsector" +msgstr "" + +#: util/grub-install.c:286 util/grub-setup.c:96 +msgid "" +"Do not apply any reed-solomon codes when embedding core.img. This option is " +"only available on x86 BIOS targets." +msgstr "" + +#: util/grub-install.c:293 +msgid "" +"the installation device is removable. This option is only available on EFI." +msgstr "" + +#: util/grub-install.c:295 +msgid "ID" +msgstr "" + +#: util/grub-install.c:296 +msgid "the ID of bootloader. This option is only available on EFI and Macs." +msgstr "" + +#: util/grub-install.c:298 +msgid "use DIR as the EFI System Partition root." +msgstr "" + +#: util/grub-install.c:300 +msgid "use DIR for PPC MAC install." +msgstr "" + +#: util/grub-install.c:301 util/grub-mkrescue.c:106 +msgid "use FILE as font for label" +msgstr "" + +#: util/grub-install.c:302 util/grub-mkrescue.c:107 +msgid "use COLOR for label" +msgstr "" + +#: util/grub-install.c:303 util/grub-mkrescue.c:108 +msgid "use COLOR for label background" +msgstr "" + +#: util/grub-install.c:304 util/grub-mkrescue.c:110 +msgid "use STRING as product version" +msgstr "" + +#: util/grub-install.c:361 +#, fuzzy +msgid "[OPTION] [INSTALL_DEVICE]" +msgstr "[OPTIONS] FILE_OR_DEVICE" + +#: util/grub-install.c:362 +msgid "Install GRUB on your drive." +msgstr "" + +#: util/grub-install.c:363 +#, c-format +msgid "" +"INSTALL_DEVICE must be system device filename.\n" +"%s copies GRUB images into %s. On some platforms, it may also install GRUB " +"into the boot sector." +msgstr "" + +#: util/grub-install.c:668 +#, c-format +msgid "the drive %s is defined multiple times in the device map %s" +msgstr "" + +#: util/grub-install.c:874 +msgid "Unable to determine your platform. Use --target." +msgstr "" + +#: util/grub-install.c:887 +#, c-format +msgid "Installing for %s platform.\n" +msgstr "" + +#: util/grub-install.c:931 +#, fuzzy +msgid "install device isn't specified" +msgstr "沒有指定裝置。\n" + +#: util/grub-install.c:1043 +msgid "cannot find EFI directory" +msgstr "" + +#: util/grub-install.c:1046 util/grub-install.c:1183 util/grub-install.c:1228 +#: util/grub-macbless.c:76 util/grub-probe.c:273 util/setup.c:316 +#, c-format +msgid "cannot find a device for %s (is /dev mounted?)" +msgstr "" + +#: util/grub-install.c:1055 util/grub-install.c:1191 util/grub-install.c:1244 +#: util/grub-install.c:1339 util/grub-macbless.c:80 util/grub-probe.c:316 +#, c-format +msgid "cannot find a GRUB drive for %s. Check your device.map" +msgstr "" + +#: util/grub-install.c:1073 +#, c-format +msgid "%s doesn't look like an EFI partition" +msgstr "" + +#: util/grub-install.c:1109 util/grub-install.c:1579 +msgid "You've found a bug" +msgstr "" + +#: util/grub-install.c:1205 +#, c-format +msgid "filesystem on %s is neither HFS nor HFS+" +msgstr "" + +#: util/grub-install.c:1273 +#, c-format +msgid "" +"attempt to install to encrypted disk without cryptodisk enabled. Set `%s' in " +"file `%s'" +msgstr "" + +#: util/grub-install.c:1384 util/grub-install.c:1733 util/grub-install.c:1833 +#, fuzzy, c-format +msgid "Can't create file: %s" +msgstr "無法開啟檔案 %s" + +#: util/grub-install.c:1461 +msgid "no hints available for your platform. Expect reduced performance" +msgstr "" + +#. TRANSLATORS: This is a prefix in the log to indicate that usually +#. a command would be executed but due to an option was skipped. +#: util/grub-install.c:1663 +msgid "NOT RUNNING: " +msgstr "" + +#: util/grub-install.c:1767 +msgid "the chosen partition is not a PReP partition" +msgstr "" + +#: util/grub-install.c:1772 +msgid "failed to copy Grub to the PReP partition" +msgstr "" + +#: util/grub-install.c:1777 +#, c-format +msgid "" +"the PReP partition is not empty. If you are sure you want to use it, run dd " +"to clear it: `%s'" +msgstr "" + +#: util/grub-install.c:1870 +#, fuzzy +msgid "EFI bootloader id isn't specified." +msgstr "沒有指定裝置。\n" + +#: util/grub-install.c:1899 +msgid "WARNING: no platform-specific install was performed" +msgstr "" + +#: util/grub-install.c:1906 +msgid "Installation finished. No error reported." +msgstr "" + +#: util/grub-macbless.c:101 +msgid "bless for x86-based macs" +msgstr "" + +#: util/grub-macbless.c:103 +msgid "bless for ppc-based macs" +msgstr "" + +#: util/grub-macbless.c:136 util/grub-probe.c:775 +#, fuzzy +msgid "No path or device is specified.\n" +msgstr "沒有指定裝置。\n" + +#: util/grub-macbless.c:157 +msgid "--ppc PATH|--x86 FILE" +msgstr "" + +#: util/grub-macbless.c:158 +msgid "Mac-style bless on HFS or HFS+" +msgstr "" + +#: util/grub-menulst2cfg.c:44 +#, c-format +msgid "Usage: %s [INFILE [OUTFILE]]\n" +msgstr "" + +#: util/grub-mkfont.c:157 +#, c-format +msgid "Freetype Error %d loading glyph 0x%x for U+0x%x%s" +msgstr "" + +#. TRANSLATORS: These qualifiers are used for cursive typography, +#. mainly Arabic. Note that the terms refer to the visual position +#. and not logical order and if used in left-to-right script then +#. leftmost is initial but with right-to-left script like Arabic +#. rightmost is the initial. +#: util/grub-mkfont.c:165 +msgid " (medial)" +msgstr "" + +#: util/grub-mkfont.c:166 +msgid " (leftmost)" +msgstr "" + +#: util/grub-mkfont.c:167 +msgid " (rightmost)" +msgstr "" + +#: util/grub-mkfont.c:481 +#, c-format +msgid "Out of range substitution (%d, %d)\n" +msgstr "" + +#. TRANSLATORS: "lookup" is taken directly from font specifications +#. which are formulated as "Under condition X replace LOOKUP with +#. SUBSTITUITION". " +#: util/grub-mkfont.c:506 +#, c-format +msgid "Out of range lookup: %d\n" +msgstr "" + +#: util/grub-mkfont.c:514 +#, c-format +msgid "Unsupported substitution type: %d\n" +msgstr "" + +#: util/grub-mkfont.c:550 +#, c-format +msgid "Unsupported substitution specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:582 +#, c-format +msgid "Unsupported coverage specification: %d\n" +msgstr "" + +#: util/grub-mkfont.c:622 +#, c-format +msgid "WARNING: unsupported font feature parameters: %x\n" +msgstr "" + +#: util/grub-mkfont.c:936 util/grub-mkrescue.c:98 util/grub-mkstandalone.c:48 +#: util/grub-kbdcomp.in:29 +msgid "save output in FILE [required]" +msgstr "" + +#. TRANSLATORS: some font files may have multiple faces (fonts). +#. This option is used to chose among them, the first face being '0'. +#. Rarely used. +#: util/grub-mkfont.c:942 +msgid "select face index" +msgstr "" + +#: util/grub-mkfont.c:943 +msgid "FROM-TO[,FROM-TO]" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:945 +msgid "set font range" +msgstr "" + +#. TRANSLATORS: "family name" for font is just a generic name without suffix +#. like "Bold". +#: util/grub-mkfont.c:949 +msgid "set font family name" +msgstr "" + +#: util/grub-mkfont.c:950 +msgid "SIZE" +msgstr "" + +#: util/grub-mkfont.c:950 +msgid "set font size" +msgstr "" + +#: util/grub-mkfont.c:951 +#, fuzzy +msgid "set font descent" +msgstr "設定根裝置。" + +#: util/grub-mkfont.c:952 +msgid "set font ascent" +msgstr "" + +#: util/grub-mkfont.c:953 +msgid "convert to bold font" +msgstr "" + +#: util/grub-mkfont.c:954 +msgid "force autohint" +msgstr "" + +#: util/grub-mkfont.c:955 +msgid "disable hinting" +msgstr "" + +#. TRANSLATORS: some fonts contain bitmap rendering for +#. some sizes. This option forces rerendering even if +#. pre-rendered bitmap is available. +#. +#: util/grub-mkfont.c:961 +msgid "ignore bitmap strikes when loading" +msgstr "" + +#. TRANSLATORS: It refers to the range of characters in font. +#: util/grub-mkfont.c:1059 util/grub-mkfont.c:1075 +msgid "invalid font range" +msgstr "" + +#: util/grub-mkfont.c:1151 +#, fuzzy +msgid "[OPTIONS] FONT_FILES" +msgstr "[OPTIONS] DISK" + +#: util/grub-mkfont.c:1152 +msgid "Convert common font file formats into PF2" +msgstr "" + +#: util/grub-mkfont.c:1182 util/grub-mkrescue.c:479 +#: util/grub-mkstandalone.c:306 util/grub-kbdcomp.in:70 +#, fuzzy +msgid "output file must be specified" +msgstr "沒有指定裝置。\n" + +#: util/grub-mkfont.c:1185 +msgid "FT_Init_FreeType fails" +msgstr "" + +#: util/grub-mkfont.c:1199 +#, c-format +msgid "can't open file %s, index %d: error %d" +msgstr "" + +#: util/grub-mkfont.c:1229 +#, c-format +msgid "can't set %dx%d font size: Freetype error %d: %s" +msgstr "" + +#: util/grub-mkimage.c:67 +msgid "set prefix directory" +msgstr "" + +#. TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. +#. "embed" is a verb (command description). " +#: util/grub-mkimage.c:71 +msgid "" +"embed FILE as a memdisk image\n" +"Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied " +"previously, but the prefix itself can be overridden by later options" +msgstr "" + +#: util/grub-mkimage.c:75 +msgid "embed FILE as an early config" +msgstr "" + +#. TRANSLATORS: NOTE is a name of segment. +#: util/grub-mkimage.c:79 +msgid "add NOTE segment for CHRP IEEE1275" +msgstr "" + +#: util/grub-mkimage.c:80 +msgid "output a generated image to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkimage.c:81 +msgid "FORMAT" +msgstr "" + +#: util/grub-mkimage.c:99 util/grub-mkstandalone.c:62 +msgid "generate an image in FORMAT" +msgstr "" + +#: util/grub-mkimage.c:100 util/grub-mkstandalone.c:63 +#, fuzzy +msgid "available formats:" +msgstr "可用的輸出終端機:" + +#: util/grub-mkimage.c:150 util/grub-mkstandalone.c:96 +#, fuzzy, c-format +msgid "unknown target format %s\n" +msgstr "未知的額外引數「%s」。\n" + +#: util/grub-mkimage.c:233 +#, fuzzy +msgid "[OPTION]... [MODULES]" +msgstr "[OPTIONS...]" + +#: util/grub-mkimage.c:234 +msgid "Make a bootable image of GRUB." +msgstr "" + +#: util/grub-mkimage.c:264 util/grub-mkstandalone.c:309 +msgid "Target format not specified (use the -O option)." +msgstr "" + +#: util/grub-mkimage.c:273 +msgid "Prefix not specified (use the -p option)." +msgstr "" + +#: util/grub-mkimagexx.c:1815 +#, c-format +msgid "" +"`%s' is miscompiled: its start address is 0x%llx instead of 0x%llx: ld.gold " +"bug?" +msgstr "" + +#: util/grub-mklayout.c:53 +msgid "set input filename. Default is STDIN" +msgstr "" + +#. TRANSLATORS: scan identifier is keyboard key symbolic name. +#: util/grub-mklayout.c:307 +#, c-format +msgid "Unknown keyboard scan identifier %s\n" +msgstr "" + +#. TRANSLATORS: scan code is keyboard key numeric identifier. +#: util/grub-mklayout.c:390 util/grub-mklayout.c:418 +#, c-format +msgid "Unknown keyboard scan code 0x%02x\n" +msgstr "" + +#. TRANSLATORS: this error is triggered when input doesn't contain any +#. key descriptions. +#: util/grub-mklayout.c:438 +msgid "ERROR: no valid keyboard layout found. Check the input.\n" +msgstr "" + +#. TRANSLATORS: "one" is a shortcut for "keyboard layout". +#: util/grub-mklayout.c:478 +msgid "Generate GRUB keyboard layout from Linux console one." +msgstr "" + +#: util/grub-mknetdir.c:47 +msgid "root directory of TFTP server" +msgstr "" + +#: util/grub-mknetdir.c:49 +msgid "relative subdirectory on network server" +msgstr "" + +#: util/grub-mknetdir.c:88 +msgid "" +"Prepares GRUB network boot images at net_directory/subdir assuming " +"net_directory being TFTP root." +msgstr "" + +#: util/grub-mknetdir.c:144 +#, c-format +msgid "unsupported platform %s" +msgstr "" + +#. TRANSLATORS: First %s is replaced by platform name. Second one by filename. +#: util/grub-mknetdir.c:163 +#, c-format +msgid "" +"Netboot directory for %s created. Configure your DHCP server to point to %s\n" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:46 +msgid "Number of PBKDF2 iterations" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:47 +msgid "Length of generated hash" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:48 +msgid "Length of salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:87 +msgid "Generate PBKDF2 password hash." +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:144 util/grub-mkpasswd-pbkdf2.c:151 +msgid "failure to read password" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:146 +#, fuzzy +msgid "Reenter password: " +msgstr "輸入密碼:" + +#: util/grub-mkpasswd-pbkdf2.c:160 +msgid "passwords don't match" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:169 +msgid "couldn't retrieve random data for salt" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:184 +#, c-format +msgid "cryptographic error number %d" +msgstr "" + +#: util/grub-mkpasswd-pbkdf2.c:203 +#, c-format +msgid "PBKDF2 hash of your password is %s\n" +msgstr "" + +#: util/grub-mkrelpath.c:67 +#, fuzzy +msgid "No path is specified.\n" +msgstr "未指定指令。\n" + +#: util/grub-mkrelpath.c:78 +#, fuzzy +msgid "PATH" +msgstr "ls PATH" + +#: util/grub-mkrelpath.c:79 +msgid "Transform a system filename into GRUB one." +msgstr "" + +#: util/grub-mkrescue.c:100 +msgid "save ROM images in DIR [optional]" +msgstr "" + +#. TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. +#: util/grub-mkrescue.c:103 +msgid "use FILE as xorriso [optional]" +msgstr "" + +#: util/grub-mkrescue.c:109 +msgid "use STRING as product name" +msgstr "" + +#: util/grub-mkrescue.c:111 +msgid "" +"enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-" +"pc" +msgstr "" + +#: util/grub-mkrescue.c:112 +msgid "" +"enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, " +"sparc64 and boot as disk image for i386-pc" +msgstr "" + +#. TRANSLATORS: it generates one single image which is bootable through any method. +#: util/grub-mkrescue.c:125 +msgid "Make GRUB CD-ROM, disk, pendrive and floppy bootable image." +msgstr "" + +#: util/grub-mkrescue.c:130 +#, c-format +msgid "" +"Generates a bootable CD/USB/floppy image. Arguments other than options to " +"this program are passed to xorriso, and indicate source files, source " +"directories, or any of the mkisofs options listed by the output of `%s'." +msgstr "" + +#: util/grub-mkrescue.c:134 +msgid "Option -- switches to native xorriso command mode." +msgstr "" + +#: util/grub-mkrescue.c:135 +msgid "Mail xorriso support requests to ." +msgstr "" + +#: util/grub-mkrescue.c:221 util/grub-mkstandalone.c:114 +#, fuzzy +msgid "[OPTION] SOURCE..." +msgstr "[OPTIONS...]" + +#: util/grub-mkrescue.c:257 util/grub-mkrescue.c:300 util/grub-mkrescue.c:578 +#, c-format +msgid "enabling %s support ..." +msgstr "" + +#: util/grub-mkrescue.c:613 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Some features are " +"disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkrescue.c:640 +msgid "" +"Your xorriso doesn't support `--grub2-boot-info'. Your core image is too " +"big. Boot as disk is disabled. Please use xorriso 1.2.9 or later." +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "" +"Generate a standalone image (containing all modules) in the selected format" +msgstr "" + +#: util/grub-mkstandalone.c:115 +msgid "Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted" +msgstr "" + +#: util/grub-mount.c:552 +msgid "IMAGE1 [IMAGE2 ...] MOUNTPOINT" +msgstr "" + +#: util/grub-mount.c:575 +msgid "need an image and mountpoint" +msgstr "" + +#: util/grub-probe.c:683 +msgid "given argument is a system device, not a path" +msgstr "" + +#: util/grub-probe.c:688 +msgid "separate items in output using ASCII NUL characters" +msgstr "" + +#: util/grub-probe.c:706 +#, c-format +msgid "[default=%s]" +msgstr "" + +#: util/grub-probe.c:708 +msgid "print TARGET" +msgstr "" + +#: util/grub-probe.c:709 +msgid "available targets:" +msgstr "" + +#: util/grub-probe.c:791 +#, fuzzy +msgid "[OPTION]... [PATH|DEVICE]" +msgstr "[OPTIONS] FILE_OR_DEVICE" + +#: util/grub-probe.c:792 +msgid "" +"Probe device information for a given path (or device, if the -d option is " +"given)." +msgstr "" + +#: util/grub-render-label.c:60 +#, fuzzy +msgid "read text from FILE." +msgstr "從 PORT 讀取位元組。" + +#: util/grub-render-label.c:62 +msgid "use COLOR for text" +msgstr "" + +#: util/grub-render-label.c:64 +msgid "use COLOR for background" +msgstr "" + +#. TRANSLATORS: The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:69 +msgid "set the label to render" +msgstr "" + +#: util/grub-render-label.c:73 +msgid "use FILE as font (PF2)." +msgstr "" + +#. TRANSLATORS: This file takes a text and creates a graphical representation of it, +#. putting the result into .disk_label file. The result is always stored to file and +#. never shown directly, so don't use "show" as synonym for render. Use "create" if +#. "render" doesn't translate directly. +#: util/grub-render-label.c:136 +msgid "Render Apple .disk_label." +msgstr "" + +#: util/grub-render-label.c:158 util/grub-syslinux2cfg.c:169 +#, fuzzy +msgid "Missing arguments\n" +msgstr "可能的參數有:" + +#: util/grub-script-check.c:87 +#, fuzzy +msgid "[PATH]" +msgstr "ls PATH" + +#: util/grub-script-check.c:88 +msgid "Checks GRUB script configuration file for syntax errors." +msgstr "" + +#: util/grub-script-check.c:207 +#, c-format +msgid "Syntax error at line %u\n" +msgstr "" + +#: util/grub-script-check.c:212 +#, c-format +msgid "Script `%s' contains no commands and will do nothing\n" +msgstr "" + +#: util/grub-setup.c:79 +#, fuzzy, c-format +msgid "use FILE as the boot image [default=%s]" +msgstr "使用 FILE 作為開機映像 [預設=%s]" + +#: util/grub-setup.c:81 +#, fuzzy, c-format +msgid "use FILE as the core image [default=%s]" +msgstr "使用 FILE 作為核心映像 [預設=%s]" + +#: util/grub-setup.c:210 +msgid "No device is specified.\n" +msgstr "沒有指定裝置。\n" + +#: util/grub-setup.c:224 +msgid "" +"Set up images to boot from DEVICE.\n" +"\n" +"You should not normally run this program directly. Use grub-install instead." +msgstr "" +"設置要從 DEVICE 啟動的裝置。\n" +"\n" +"您應該不能直接執行這個程式。請改用 grub-install。" + +#: util/grub-setup.c:228 +msgid "DEVICE must be an OS device (e.g. /dev/sda)." +msgstr "DEVICE 必須為 OS 裝置 (例:/dev/sda)。" + +#: util/grub-setup.c:297 +#, c-format +msgid "Invalid device `%s'.\n" +msgstr "無效的裝置「%s」。\n" + +#: util/grub-syslinux2cfg.c:64 +msgid "root directory as it will be seen on runtime [default=/]." +msgstr "" + +#: util/grub-syslinux2cfg.c:69 +msgid "" +"current directory of syslinux as it will be seen on runtime [default is " +"parent directory of input file]." +msgstr "" + +#: util/grub-syslinux2cfg.c:74 +msgid "write output to FILE [default=stdout]." +msgstr "" + +#: util/grub-syslinux2cfg.c:148 +msgid "Transform syslinux config into GRUB one." +msgstr "" + +#: util/mkimage.c:604 util/mkimage.c:633 util/mkimage.c:650 +msgid "cannot compress the kernel image" +msgstr "無法壓縮內核映像" + +#: util/mkimage.c:682 util/mkimage.c:974 +#, c-format +msgid "unknown compression %d" +msgstr "" + +#: util/mkimage.c:985 +#, fuzzy +msgid "Decompressor is too big" +msgstr "核心映像過大" + +#: util/mkimage.c:1030 +#, fuzzy, c-format +msgid "core image is too big (0x%x > 0x%x)" +msgstr "核心映像過大 (%p > %p)" + +#: util/mkimage.c:1037 +#, fuzzy, c-format +msgid "kernel image is too big (0x%x > 0x%x)" +msgstr "核心映像過大 (%p > %p)" + +#: util/mkimage.c:1116 util/mkimage.c:1397 +#, c-format +msgid "diskboot.img size must be %u bytes" +msgstr "diskboot.img 大小必須為 %u 位元組" + +#: util/mkimage.c:1467 +msgid "" +"fwstart.img doesn't match the known good version. proceed at your own risk" +msgstr "" + +#: util/mkimage.c:1471 util/mkimage.c:1497 +#, fuzzy +msgid "firmware image is too big" +msgstr "核心映像過大" + +#: util/resolve.c:93 +#, fuzzy, c-format +msgid "invalid line format: %s" +msgstr "無效指令 %s。\n" + +#: util/setup.c:160 +msgid "the first sector of the core file is not sector-aligned" +msgstr "核心檔的第一磁區不是磁區對齊形式" + +#: util/setup.c:170 +msgid "non-sector-aligned data is found in the core file" +msgstr "在核心檔內找到非磁區對齊形式的資料" + +#: util/setup.c:192 +msgid "the sectors of the core file are too fragmented" +msgstr "核心檔的磁區過於零散" + +#: util/setup.c:277 +#, c-format +msgid "the size of `%s' is not %u" +msgstr "「%s」的大小不是 %u" + +#: util/setup.c:289 +#, c-format +msgid "the size of `%s' is too small" +msgstr "「%s」的大小過小" + +#: util/setup.c:425 +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels or both " +"partition label and filesystem. This is not supported yet." +msgstr "" +"正試圖安裝 GRUB 至有多分割區標籤,或有分割區以及檔案系統的磁碟上。這尚未支" +"援。" + +#: util/setup.c:438 +#, c-format +msgid "unable to identify a filesystem in %s; safety check can't be performed" +msgstr "無法辨識 %s 內的檔案系統;無法執行安全檢查" + +#. TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. +#: util/setup.c:442 +#, c-format +msgid "" +"%s appears to contain a %s filesystem which isn't known to reserve space for " +"DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s 似乎包含 %s 檔案系統,該檔案系統不知道是否為 DOS 式開機所保留的空間。如果" +"那裡存有富價值的資料,將 GRUB 安裝在那裡可能會導致「檔案系統摧毀」,資料會被 " +"grub-setup 覆寫 (加上 --skip-fs-probe 可以停用本檢查,但請自行承擔風險)" + +#. TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. +#: util/setup.c:455 +#, c-format +msgid "" +"%s appears to contain a %s partition map which isn't known to reserve space " +"for DOS-style boot. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s 似乎包含 %s 分割區映射,該映射不知道是否為 DOS 式開機所保留的空間。如果那" +"裡存有富價值的資料,將 GRUB 安裝在那裡可能會導致「檔案系統摧毀」,資料會被 " +"grub-setup 覆寫 (加上 --skip-fs-probe 可以停用本檢查,但請自行承擔風險)" + +#: util/setup.c:462 +#, fuzzy, c-format +msgid "" +"%s appears to contain a %s partition map and LDM which isn't known to be a " +"safe combination. Installing GRUB there could result in FILESYSTEM " +"DESTRUCTION if valuable data is overwritten by grub-setup (--skip-fs-probe " +"disables this check, use at your own risk)" +msgstr "" +"%s 似乎包含 %s 分割區映射,該映射不知道是否為 DOS 式開機所保留的空間。如果那" +"裡存有富價值的資料,將 GRUB 安裝在那裡可能會導致「檔案系統摧毀」,資料會被 " +"grub-setup 覆寫 (加上 --skip-fs-probe 可以停用本檢查,但請自行承擔風險)" + +#: util/setup.c:475 +msgid "" +"Attempting to install GRUB to a partitionless disk or to a partition. This " +"is a BAD idea." +msgstr "正試圖安裝 GRUB 至無分割的磁碟,或是某分割區上。這是個「壞」主意。" + +#: util/setup.c:480 +#, fuzzy +msgid "" +"Attempting to install GRUB to a disk with multiple partition labels. This " +"is not supported yet." +msgstr "" +"正試圖安裝 GRUB 至有多分割區標籤,或有分割區以及檔案系統的磁碟上。這尚未支" +"援。" + +#: util/setup.c:486 +#, c-format +msgid "Partition style `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:493 +#, c-format +msgid "File system `%s' doesn't support embedding" +msgstr "" + +#: util/setup.c:522 +msgid "Your embedding area is unusually small. core.img won't fit in it." +msgstr "" + +#: util/setup.c:544 util/setup.c:660 util/setup.c:764 +msgid "no terminator in the core image" +msgstr "核心映像內沒有終止器" + +#: util/setup.c:577 +msgid "core.img version mismatch" +msgstr "" + +#: util/setup.c:610 +#, fuzzy +msgid "" +"embedding is not possible, but this is required for RAID and LVM install" +msgstr "不可能內嵌,但是這對於跨磁碟安裝來說是必要的" + +#: util/setup.c:617 +#, fuzzy, c-format +msgid "can't determine filesystem on %s" +msgstr "判斷檔案系統類型。" + +#: util/setup.c:620 +#, c-format +msgid "filesystem `%s' doesn't support blocklists" +msgstr "" + +#. TRANSLATORS: cross-disk refers to /boot being on one disk +#. but MBR on another. +#: util/setup.c:629 +msgid "embedding is not possible, but this is required for cross-disk install" +msgstr "不可能內嵌,但是這對於跨磁碟安裝來說是必要的" + +#: util/setup.c:635 +msgid "" +"Embedding is not possible. GRUB can only be installed in this setup by " +"using blocklists. However, blocklists are UNRELIABLE and their use is " +"discouraged." +msgstr "" +"不可能內嵌。GRUB 在本設置中僅能藉由區塊清單來安裝。然而,使用區塊清單不僅「不" +"可靠」甚至令人挫折。" + +#. TRANSLATORS: Here GRUB refuses to continue with blocklist install. +#: util/setup.c:640 +msgid "will not proceed with blocklists" +msgstr "不會繼續處理區塊清單" + +#: util/setup.c:737 util/setup.c:757 +msgid "blocklists are invalid" +msgstr "" + +#: util/setup.c:767 +msgid "blocklists are incomplete" +msgstr "" + +#: util/grub-kbdcomp.in:24 +msgid "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\\n" +msgstr "" + +#: util/grub-kbdcomp.in:25 +#, fuzzy +msgid "Make GRUB keyboard layout file." +msgstr "載入鍵盤配置。" + +#: util/grub-kbdcomp.in:27 util/grub-mkconfig.in:61 util/grub-reboot.in:49 +#: util/grub-set-default.in:51 +#, fuzzy +msgid "print this message and exit" +msgstr "顯示本幫助並離開。" + +#: util/grub-kbdcomp.in:28 util/grub-mkconfig.in:62 util/grub-reboot.in:50 +#: util/grub-set-default.in:52 +msgid "print the version information and exit" +msgstr "" + +#: util/grub-kbdcomp.in:31 +msgid "%s generates a keyboard layout for GRUB using ckbcomp\\n" +msgstr "" + +#: util/grub-kbdcomp.in:33 util/grub-mkconfig.in:64 util/grub-reboot.in:60 +#: util/grub-set-default.in:58 +msgid "Report bugs to ." +msgstr "" + +#: util/grub-kbdcomp.in:41 util/grub-mkconfig.in:72 util/grub-reboot.in:68 +#: util/grub-set-default.in:66 +msgid "%s: option requires an argument -- `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:57 +msgid "Usage: %s [OPTION]\\n" +msgstr "" + +#: util/grub-mkconfig.in:58 +#, fuzzy +msgid "Generate a grub config file" +msgstr "載入另一個組態檔。" + +#: util/grub-mkconfig.in:60 +msgid "output generated config to FILE [default=stdout]" +msgstr "" + +#: util/grub-mkconfig.in:97 util/grub-reboot.in:100 util/grub-set-default.in:98 +msgid "Unrecognized option `%s'\\n" +msgstr "" + +#: util/grub-mkconfig.in:121 +msgid "%s: You must run this as root\\n" +msgstr "" + +#: util/grub-mkconfig.in:130 +msgid "%s: Not found.\\n" +msgstr "" + +#: util/grub-mkconfig.in:238 +msgid "Generating grub configuration file ..." +msgstr "" + +#. TRANSLATORS: %s is replaced by filename +#: util/grub-mkconfig.in:271 +msgid "" +"Syntax errors are detected in generated GRUB config file.\n" +"Ensure that there are no errors in /etc/default/grub\n" +"and /etc/grub.d/* files or please file a bug report with\n" +"%s file attached." +msgstr "" + +#: util/grub-mkconfig.in:283 +msgid "done" +msgstr "" + +#: util/grub-mkconfig_lib.in:47 +msgid "Warning:" +msgstr "" + +#: util/grub-reboot.in:47 util/grub-set-default.in:47 +msgid "Usage: %s [OPTION] MENU_ENTRY\\n" +msgstr "" + +#: util/grub-reboot.in:48 +msgid "Set the default boot menu entry for GRUB, for the next boot only." +msgstr "" + +#: util/grub-reboot.in:51 util/grub-set-default.in:53 +msgid "" +"expect GRUB images under the directory DIR/%s instead of the %s directory" +msgstr "" + +#: util/grub-reboot.in:54 +msgid "" +"MENU_ENTRY is a number, a menu item title or a menu item identifier. Please " +"note that menu items in\n" +"submenus or sub-submenus require specifying the submenu components and then " +"the\n" +"menu item component. The titles should be separated using the greater-than\n" +"character (>) with no extra spaces. Depending on your shell some characters " +"including > may need escaping. More information about this is available\n" +"in the GRUB Manual in the section about the 'default' command. " +msgstr "" + +#: util/grub-reboot.in:106 util/grub-set-default.in:104 +msgid "More than one menu entry?" +msgstr "" + +#: util/grub-reboot.in:116 util/grub-set-default.in:114 +#, fuzzy +msgid "Menu entry not specified." +msgstr "選單條目類型。" + +#: util/grub-set-default.in:48 +msgid "Set the default boot menu entry for GRUB." +msgstr "" + +#: util/grub-set-default.in:49 +msgid "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\\n" +msgstr "" + +#: util/grub-set-default.in:56 +msgid "MENU_ENTRY is a number, a menu item title or a menu item identifier." +msgstr "" + +#: util/grub.d/00_header.in:141 +msgid "" +"Requested serial terminal but GRUB_SERIAL_COMMAND is unspecified. Default " +"parameters will be used." +msgstr "" + +#: util/grub.d/00_header.in:232 +msgid "Found theme: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:268 +msgid "Found background: %s\\n" +msgstr "" + +#: util/grub.d/00_header.in:273 +msgid "Unsupported image format" +msgstr "" + +#: util/grub.d/00_header.in:292 +msgid "" +"Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is " +"no longer supported." +msgstr "" + +#: util/grub.d/10_hurd.in:48 +#, fuzzy +msgid "Found GNU Mach: %s" +msgstr "正在載入 GNU Mach ..." + +#: util/grub.d/10_hurd.in:63 +msgid "Found Hurd module: %s" +msgstr "" + +#: util/grub.d/10_hurd.in:77 +msgid "Some Hurd stuff found, but not enough to boot." +msgstr "" + +#: util/grub.d/10_hurd.in:91 +#, fuzzy +msgid "%s, with Hurd %s (recovery mode)" +msgstr "%s,採用 Linux %s (復原模式)" + +#: util/grub.d/10_hurd.in:94 +#, fuzzy +msgid "%s, with Hurd %s" +msgstr "%s,採用 Linux %s" + +#: util/grub.d/10_hurd.in:100 util/grub.d/10_kfreebsd.in:87 +#: util/grub.d/10_linux.in:93 util/grub.d/10_netbsd.in:113 +#: util/grub.d/20_linux_xen.in:101 util/grub.d/30_os-prober.in:278 +msgid "" +"Please don't use old title `%s' for GRUB_DEFAULT, use `%s' (for versions " +"before 2.00) or `%s' (for 2.00 or later)" +msgstr "" + +#: util/grub.d/10_hurd.in:112 +msgid "Loading GNU Mach ..." +msgstr "正在載入 GNU Mach ..." + +#: util/grub.d/10_hurd.in:128 +msgid "Loading the Hurd ..." +msgstr "正在載入 Hurd ..." + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/10_hurd.in:164 util/grub.d/10_kfreebsd.in:225 +#: util/grub.d/10_linux.in:237 util/grub.d/10_netbsd.in:168 +#: util/grub.d/30_os-prober.in:254 +msgid "Advanced options for %s" +msgstr "" + +#: util/grub.d/10_illumos.in:40 +#, fuzzy +msgid "Loading kernel of Illumos ..." +msgstr "正在載入 FreeBSD %s 的內核 ..." + +#: util/grub.d/10_kfreebsd.in:79 +msgid "%s, with kFreeBSD %s (recovery mode)" +msgstr "%s,採用 kFreeBSD %s (復原模式)" + +#: util/grub.d/10_kfreebsd.in:81 +msgid "%s, with kFreeBSD %s" +msgstr "%s,採用 kFreeBSD %s" + +#: util/grub.d/10_kfreebsd.in:101 +msgid "Loading kernel of FreeBSD %s ..." +msgstr "正在載入 FreeBSD %s 的內核 ..." + +#: util/grub.d/10_kfreebsd.in:164 +#, fuzzy +msgid "Found kernel of FreeBSD: %s\\n" +msgstr "載入 FreeBSD 內核。" + +#: util/grub.d/10_kfreebsd.in:213 +msgid "Found kernel module directory: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:85 +msgid "%s, with Linux %s (recovery mode)" +msgstr "%s,採用 Linux %s (復原模式)" + +#: util/grub.d/10_linux.in:87 +msgid "%s, with Linux %s" +msgstr "%s,採用 Linux %s" + +#: util/grub.d/10_linux.in:131 util/grub.d/20_linux_xen.in:117 +msgid "Loading Linux %s ..." +msgstr "正在載入 Linux %s ..." + +#. TRANSLATORS: ramdisk isn't identifier. Should be translated. +#: util/grub.d/10_linux.in:138 util/grub.d/20_linux_xen.in:131 +msgid "Loading initial ramdisk ..." +msgstr "正在載入初始 ramdisk ..." + +#: util/grub.d/10_linux.in:183 util/grub.d/20_linux_xen.in:211 +msgid "Found linux image: %s\\n" +msgstr "" + +#: util/grub.d/10_linux.in:220 util/grub.d/20_linux_xen.in:234 +msgid "Found initrd image: %s\\n" +msgstr "" + +#: util/grub.d/10_netbsd.in:105 +msgid "%s, with kernel %s (via %s, recovery mode)" +msgstr "%s,採用內核 %s (透過 %s,復原模式)" + +#: util/grub.d/10_netbsd.in:107 +msgid "%s, with kernel %s (via %s)" +msgstr "%s,採用內核 %s (透過 %s)" + +#: util/grub.d/10_netbsd.in:158 +#, fuzzy +msgid "Found NetBSD kernel: %s\\n" +msgstr "載入 NetBSD 內核模組。" + +#: util/grub.d/10_windows.in:70 +msgid "Windows Vista/7 (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:74 +msgid "Windows NT/2000/XP (loader)" +msgstr "" + +#: util/grub.d/10_windows.in:85 +msgid "Found %s on %s (%s)\\n" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (32-bit) +#: util/grub.d/10_xnu.in:32 util/grub.d/30_os-prober.in:47 +msgid "(32-bit)" +msgstr "" + +#. TRANSLATORS: it refers to kernel architecture (64-bit) +#: util/grub.d/10_xnu.in:35 util/grub.d/30_os-prober.in:50 +msgid "(64-bit)" +msgstr "" + +#. TRANSLATORS: it refers on the OS residing on device %s +#: util/grub.d/10_xnu.in:38 util/grub.d/30_os-prober.in:53 +#: util/grub.d/30_os-prober.in:149 util/grub.d/30_os-prober.in:181 +#: util/grub.d/30_os-prober.in:222 util/grub.d/30_os-prober.in:294 +msgid "(on %s)" +msgstr "" + +#: util/grub.d/20_linux_xen.in:93 +msgid "%s, with Xen %s and Linux %s (recovery mode)" +msgstr "%s,採用 Xen %s 與 Linux %s (復原模式)" + +#: util/grub.d/20_linux_xen.in:95 +msgid "%s, with Xen %s and Linux %s" +msgstr "%s,採用 Xen %s 與 Linux %s" + +#: util/grub.d/20_linux_xen.in:105 +#, fuzzy +msgid "%s, with Xen hypervisor" +msgstr "%s,採用 Linux %s" + +#: util/grub.d/20_linux_xen.in:116 +msgid "Loading Xen %s ..." +msgstr "正在載入 Xen %s ..." + +#: util/grub.d/20_linux_xen.in:207 util/grub.d/20_linux_xen.in:251 +msgid "Xen hypervisor, version %s" +msgstr "" + +#. TRANSLATORS: %s is replaced with an OS name +#: util/grub.d/20_linux_xen.in:250 +msgid "Advanced options for %s (with Xen hypervisor)" +msgstr "" + +#: util/grub.d/30_os-prober.in:144 +msgid "Found %s on %s\\n" +msgstr "" + +#. TRANSLATORS: %s is replaced by OS name. +#: util/grub.d/30_os-prober.in:332 +msgid "%s is not yet supported by grub-mkconfig.\\n" +msgstr "" + +#~ msgid "Expose v1 tables." +#~ msgstr "顯露 v1 表。" + +#~ msgid "Fake BIOS." +#~ msgstr "偽 BIOS。" + +#~ msgid "Check hash list file." +#~ msgstr "檢查雜湊清單檔。" + +#~ msgid "DIRECTORY" +#~ msgstr "DIRECTORY" + +#~ msgid "Unload PXE environment." +#~ msgstr "卸載 PXE 環境。" + +#~ msgid "Read word from PORT." +#~ msgstr "從 PORT 讀取單詞。" + +#~ msgid "Read dword from PORT." +#~ msgstr "從 PORT 讀取 dword。" + +#~ msgid "Write word VALUE to PORT." +#~ msgstr "將單詞 VALUE 寫入 PORT。" + +#~ msgid "Write dword VALUE to PORT." +#~ msgstr "將 dword VALUE 寫入 PORT。" + +#~ msgid "[--shift] [--ctrl] [--alt]" +#~ msgstr "[--shift] [--ctrl] [--alt]" + +#~ msgid "[-1|-2]" +#~ msgstr "[-1|-2]" + +#~ msgid "Read word from ADDR." +#~ msgstr "從 ADDR 讀取單詞。" + +#~ msgid "Read dword from ADDR." +#~ msgstr "從 ADDR 讀取 dword。" + +#~ msgid "Write word VALUE to ADDR." +#~ msgstr "將單詞 VALUE 寫入 ADDR。" + +#~ msgid "Write dword VALUE to ADDR." +#~ msgstr "將 dword VALUE 寫入 ADDR。" + +#~ msgid "Menu entry definition as a string." +#~ msgstr "選單條目定義為字串。" + +#~ msgid "[DEVICE]" +#~ msgstr "[DEVICE]" + +#~ msgid "Variable names to update with matches." +#~ msgstr "要用符合項目來更新的變數名稱。" + +#~ msgid "Load XNU hibernate image." +#~ msgstr "載入 XNU 休眠映像。" + +#~ msgid "Authenticate users" +#~ msgstr "驗證使用者" + +#~ msgid "[n]" +#~ msgstr "[n]" + +#~ msgid "UTF-8 visual" +#~ msgstr "UTF-8 視覺" + +#~ msgid "If FILENAME is '-', the default value %s is used." +#~ msgstr "若 FILENAME 為「-」,將使用預設值 %s。" + +#~ msgid "write error" +#~ msgstr "寫入發生錯誤" + +#~ msgid "open error" +#~ msgstr "開啟發生錯誤" + +#~ msgid "seek error" +#~ msgstr "查詢發生錯誤" + +#~ msgid "Hex dump FILE." +#~ msgstr "以十六進位傾印 FILE。" + +#~ msgid "Must use absolute path.\n" +#~ msgstr "必須使用絕對路徑。\n" + +#~ msgid "the core image is too small" +#~ msgstr "核心映像過小" + +#~ msgid "prefix is too long" +#~ msgstr "前綴過長" + +#~ msgid "" +#~ "Usage: %s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "Make a bootable image of GRUB.\n" +#~ "\n" +#~ " -d, --directory=DIR use images and modules under DIR [default=%s/" +#~ "@platform@]\n" +#~ " -p, --prefix=DIR set grub_prefix directory [default=%s]\n" +#~ " -m, --memdisk=FILE embed FILE as a memdisk image\n" +#~ " -c, --config=FILE embed FILE as boot config\n" +#~ " -n, --note add NOTE segment for CHRP Open Firmware\n" +#~ " -o, --output=FILE output a generated image to FILE " +#~ "[default=stdout]\n" +#~ " -O, --format=FORMAT generate an image in format\n" +#~ " available formats: %s\n" +#~ " -C, --compression=(xz|none|auto) choose the compression to use\n" +#~ " -h, --help display this message and exit\n" +#~ " -V, --version print version information and exit\n" +#~ " -v, --verbose print verbose messages\n" +#~ "\n" +#~ "Report bugs to <%s>.\n" +#~ msgstr "" +#~ "用法:%s [OPTION]... [MODULES]\n" +#~ "\n" +#~ "建立 GRUB 的可開機映像。\n" +#~ "\n" +#~ " -d, --directory=DIR 使用 DIR 下的映像與模組 [預設=%s/@platform@]\n" +#~ " -p, --prefix=DIR 設定 grub_prefix 目錄 [預設=%s]\n" +#~ " -m, --memdisk=FILE 將 FILE 內嵌為 memdisk 映像\n" +#~ " -c, --config=FILE 將 FILE 內嵌為開機組態\n" +#~ " -n, --note 為 CHRP Open Firmware 加入 NOTE 區段\n" +#~ " -o, --output=FILE 將產生的映像輸出至 FILE [預設=stdout]\n" +#~ " -O, --format=FORMAT 產生可使用格式的映像檔:\n" +#~ " %s\n" +#~ " -C, --compression=(xz|none|auto) 選擇要使用的壓縮方式\n" +#~ " -h, --help 顯示本訊息並離開\n" +#~ " -V, --version 列印版本資訊並離開\n" +#~ " -v, --verbose 列印冗長訊息\n" +#~ "\n" +#~ "請回報臭蟲至 <%s>。\n" + +#~ msgid "cannot open %s" +#~ msgstr "無法開啟 %s" + +#~ msgid "" +#~ "embedding is not possible, but this is required when the root device is " +#~ "on a RAID array or LVM volume" +#~ msgstr "" +#~ "不可能內嵌,但是這對於根裝置位於 RAID 陣列或是 LVM 儲區上時來說是必要的" + +#~ msgid "failed to read the first sector of the core image" +#~ msgstr "無法讀取核心映像的第一磁區" + +#~ msgid "DEV" +#~ msgstr "DEV" + +#~ msgid "Use DEV as the root device [default=guessed]" +#~ msgstr "使用 DEV 作為根裝置 [預設=guessed]" + +#~ msgid "cannot guess the root device. Specify the option `--root-device'" +#~ msgstr "無法猜測根裝置。請指定「--root-device」選項" diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 000000000..9788f7023 --- /dev/null +++ b/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/tests/ahci_test.in b/tests/ahci_test.in new file mode 100644 index 000000000..1d01d1f59 --- /dev/null +++ b/tests/ahci_test.in @@ -0,0 +1,53 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: Don't mess with real devices when OS is active + *-emu) + exit 0;; + # FIXME: qemu gets bonito DMA wrong + mipsel-loongson) + exit 0;; + # PLATFORM: no AHCI on ARC and qemu-mips platforms + mips*-arc | mips*-qemu_mips) + exit 0;; + # FIXME: No native drivers are available for those + powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi) + exit 0;; +esac + +imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 +outfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + +echo "hello" > "$outfile" + +tar cf "$imgfile" "$outfile" + +if [ "$(echo "nativedisk; source '(ahci0)/$outfile';" | "${grubshell}" --qemu-opts="-drive id=disk,file=$imgfile,if=none -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 " | tail -n 1)" != "Hello World" ]; then + rm "$imgfile" + rm "$outfile" + exit 1 +fi + +rm "$imgfile" +rm "$outfile" + + diff --git a/tests/btrfs_test.in b/tests/btrfs_test.in new file mode 100644 index 000000000..c55d9477f --- /dev/null +++ b/tests/btrfs_test.in @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.btrfs >/dev/null 2>&1; then + echo "mkfs.btrfs not installed; cannot test btrfs." + exit 77 +fi + +"@builddir@/grub-fs-tester" btrfs +"@builddir@/grub-fs-tester" btrfs_zlib +"@builddir@/grub-fs-tester" btrfs_lzo +"@builddir@/grub-fs-tester" btrfs_raid0 +"@builddir@/grub-fs-tester" btrfs_raid1 +"@builddir@/grub-fs-tester" btrfs_single +"@builddir@/grub-fs-tester" btrfs_raid10 diff --git a/tests/cdboot_test.in b/tests/cdboot_test.in new file mode 100644 index 000000000..1cc901977 --- /dev/null +++ b/tests/cdboot_test.in @@ -0,0 +1,39 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: emu is different + *-emu) + exit 0;; + # PLATFORM: Flash targets + i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips) + exit 0;; + # FIXME: currently grub-shell uses only -kernel for loongson + mipsel-loongson) + exit 0;; + # FIXME: OFW fails to open CD-ROM + i386-ieee1275) + exit 0;; +esac + +if [ "$(echo hello | "${grubshell}" --boot=cd)" != "Hello World" ]; then + exit 1 +fi diff --git a/tests/cmp_unit_test.c b/tests/cmp_unit_test.c new file mode 100644 index 000000000..e5378419c --- /dev/null +++ b/tests/cmp_unit_test.c @@ -0,0 +1,226 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define MSG "cmp test failed" + +/* Functional test main method. */ +static void +cmp_test (void) +{ + const char *s1 = "a"; + const char *s2 = "aa"; + const char *s3 = "â"; + + grub_test_assert (grub_strlen (s1) == 1, MSG); + grub_test_assert (grub_strlen (s2) == 2, MSG); + grub_test_assert (grub_strlen (s3) == 2, MSG); + + grub_test_assert (grub_strcmp (s1, s1) == 0, MSG); + grub_test_assert (grub_strcmp (s1, s2) < 0, MSG); + grub_test_assert (grub_strcmp (s1, s3) < 0, MSG); + + grub_test_assert (grub_strcmp (s2, s1) > 0, MSG); + grub_test_assert (grub_strcmp (s2, s2) == 0, MSG); + grub_test_assert (grub_strcmp (s2, s3) < 0, MSG); + + grub_test_assert (grub_strcmp (s3, s1) > 0, MSG); + grub_test_assert (grub_strcmp (s3, s2) > 0, MSG); + grub_test_assert (grub_strcmp (s3, s3) == 0, MSG); + + grub_test_assert (grub_strcasecmp (s1, s1) == 0, MSG); + grub_test_assert (grub_strcasecmp (s1, s2) < 0, MSG); + grub_test_assert (grub_strcasecmp (s1, s3) < 0, MSG); + + grub_test_assert (grub_strcasecmp (s2, s1) > 0, MSG); + grub_test_assert (grub_strcasecmp (s2, s2) == 0, MSG); + grub_test_assert (grub_strcasecmp (s2, s3) < 0, MSG); + + grub_test_assert (grub_strcasecmp (s3, s1) > 0, MSG); + grub_test_assert (grub_strcasecmp (s3, s2) > 0, MSG); + grub_test_assert (grub_strcasecmp (s3, s3) == 0, MSG); + + grub_test_assert (grub_memcmp (s1, s1, 2) == 0, MSG); + grub_test_assert (grub_memcmp (s1, s2, 2) < 0, MSG); + grub_test_assert (grub_memcmp (s1, s3, 2) < 0, MSG); + + grub_test_assert (grub_memcmp (s2, s1, 2) > 0, MSG); + grub_test_assert (grub_memcmp (s2, s2, 2) == 0, MSG); + grub_test_assert (grub_memcmp (s2, s3, 2) < 0, MSG); + + grub_test_assert (grub_memcmp (s3, s1, 2) > 0, MSG); + grub_test_assert (grub_memcmp (s3, s2, 2) > 0, MSG); + grub_test_assert (grub_memcmp (s3, s3, 2) == 0, MSG); + + grub_test_assert (grub_memcmp (s1, s1, 1) == 0, MSG); + grub_test_assert (grub_memcmp (s1, s2, 1) == 0, MSG); + grub_test_assert (grub_memcmp (s1, s3, 1) < 0, MSG); + + grub_test_assert (grub_memcmp (s2, s1, 1) == 0, MSG); + grub_test_assert (grub_memcmp (s2, s2, 1) == 0, MSG); + grub_test_assert (grub_memcmp (s2, s3, 1) < 0, MSG); + + grub_test_assert (grub_memcmp (s3, s1, 1) > 0, MSG); + grub_test_assert (grub_memcmp (s3, s2, 1) > 0, MSG); + grub_test_assert (grub_memcmp (s3, s3, 1) == 0, MSG); + + grub_test_assert (grub_strncmp (s1, s1, 2) == 0, MSG); + grub_test_assert (grub_strncmp (s1, s2, 2) < 0, MSG); + grub_test_assert (grub_strncmp (s1, s3, 2) < 0, MSG); + + grub_test_assert (grub_strncmp (s2, s1, 2) > 0, MSG); + grub_test_assert (grub_strncmp (s2, s2, 2) == 0, MSG); + grub_test_assert (grub_strncmp (s2, s3, 2) < 0, MSG); + + grub_test_assert (grub_strncmp (s3, s1, 2) > 0, MSG); + grub_test_assert (grub_strncmp (s3, s2, 2) > 0, MSG); + grub_test_assert (grub_strncmp (s3, s3, 2) == 0, MSG); + + grub_test_assert (grub_strncmp (s1, s1, 1) == 0, MSG); + grub_test_assert (grub_strncmp (s1, s2, 1) == 0, MSG); + grub_test_assert (grub_strncmp (s1, s3, 1) < 0, MSG); + + grub_test_assert (grub_strncmp (s2, s1, 1) == 0, MSG); + grub_test_assert (grub_strncmp (s2, s2, 1) == 0, MSG); + grub_test_assert (grub_strncmp (s2, s3, 1) < 0, MSG); + + grub_test_assert (grub_strncmp (s3, s1, 1) > 0, MSG); + grub_test_assert (grub_strncmp (s3, s2, 1) > 0, MSG); + grub_test_assert (grub_strncmp (s3, s3, 1) == 0, MSG); + + grub_test_assert (grub_strncasecmp (s1, s1, 2) == 0, MSG); + grub_test_assert (grub_strncasecmp (s1, s2, 2) < 0, MSG); + grub_test_assert (grub_strncasecmp (s1, s3, 2) < 0, MSG); + + grub_test_assert (grub_strncasecmp (s2, s1, 2) > 0, MSG); + grub_test_assert (grub_strncasecmp (s2, s2, 2) == 0, MSG); + grub_test_assert (grub_strncasecmp (s2, s3, 2) < 0, MSG); + + grub_test_assert (grub_strncasecmp (s3, s1, 2) > 0, MSG); + grub_test_assert (grub_strncasecmp (s3, s2, 2) > 0, MSG); + grub_test_assert (grub_strncasecmp (s3, s3, 2) == 0, MSG); + + grub_test_assert (grub_strncasecmp (s1, s1, 1) == 0, MSG); + grub_test_assert (grub_strncasecmp (s1, s2, 1) == 0, MSG); + grub_test_assert (grub_strncasecmp (s1, s3, 1) < 0, MSG); + + grub_test_assert (grub_strncasecmp (s2, s1, 1) == 0, MSG); + grub_test_assert (grub_strncasecmp (s2, s2, 1) == 0, MSG); + grub_test_assert (grub_strncasecmp (s2, s3, 1) < 0, MSG); + + grub_test_assert (grub_strncasecmp (s3, s1, 1) > 0, MSG); + grub_test_assert (grub_strncasecmp (s3, s2, 1) > 0, MSG); + grub_test_assert (grub_strncasecmp (s3, s3, 1) == 0, MSG); + + grub_test_assert (strlen (s1) == 1, MSG); + grub_test_assert (strlen (s2) == 2, MSG); + grub_test_assert (strlen (s3) == 2, MSG); + + grub_test_assert (strcmp (s1, s1) == 0, MSG); + grub_test_assert (strcmp (s1, s2) < 0, MSG); + grub_test_assert (strcmp (s1, s3) < 0, MSG); + + grub_test_assert (strcmp (s2, s1) > 0, MSG); + grub_test_assert (strcmp (s2, s2) == 0, MSG); + grub_test_assert (strcmp (s2, s3) < 0, MSG); + + grub_test_assert (strcmp (s3, s1) > 0, MSG); + grub_test_assert (strcmp (s3, s2) > 0, MSG); + grub_test_assert (strcmp (s3, s3) == 0, MSG); + + grub_test_assert (memcmp (s1, s1, 2) == 0, MSG); + grub_test_assert (memcmp (s1, s2, 2) < 0, MSG); + grub_test_assert (memcmp (s1, s3, 2) < 0, MSG); + + grub_test_assert (memcmp (s2, s1, 2) > 0, MSG); + grub_test_assert (memcmp (s2, s2, 2) == 0, MSG); + grub_test_assert (memcmp (s2, s3, 2) < 0, MSG); + + grub_test_assert (memcmp (s3, s1, 2) > 0, MSG); + grub_test_assert (memcmp (s3, s2, 2) > 0, MSG); + grub_test_assert (memcmp (s3, s3, 2) == 0, MSG); + + grub_test_assert (memcmp (s1, s1, 1) == 0, MSG); + grub_test_assert (memcmp (s1, s2, 1) == 0, MSG); + grub_test_assert (memcmp (s1, s3, 1) < 0, MSG); + + grub_test_assert (memcmp (s2, s1, 1) == 0, MSG); + grub_test_assert (memcmp (s2, s2, 1) == 0, MSG); + grub_test_assert (memcmp (s2, s3, 1) < 0, MSG); + + grub_test_assert (memcmp (s3, s1, 1) > 0, MSG); + grub_test_assert (memcmp (s3, s2, 1) > 0, MSG); + grub_test_assert (memcmp (s3, s3, 1) == 0, MSG); + + grub_test_assert (strncmp (s1, s1, 2) == 0, MSG); + grub_test_assert (strncmp (s1, s2, 2) < 0, MSG); + grub_test_assert (strncmp (s1, s3, 2) < 0, MSG); + + grub_test_assert (strncmp (s2, s1, 2) > 0, MSG); + grub_test_assert (strncmp (s2, s2, 2) == 0, MSG); + grub_test_assert (strncmp (s2, s3, 2) < 0, MSG); + + grub_test_assert (strncmp (s3, s1, 2) > 0, MSG); + grub_test_assert (strncmp (s3, s2, 2) > 0, MSG); + grub_test_assert (strncmp (s3, s3, 2) == 0, MSG); + + grub_test_assert (strncmp (s1, s1, 1) == 0, MSG); + grub_test_assert (strncmp (s1, s2, 1) == 0, MSG); + grub_test_assert (strncmp (s1, s3, 1) < 0, MSG); + + grub_test_assert (strncmp (s2, s1, 1) == 0, MSG); + grub_test_assert (strncmp (s2, s2, 1) == 0, MSG); + grub_test_assert (strncmp (s2, s3, 1) < 0, MSG); + + grub_test_assert (strncmp (s3, s1, 1) > 0, MSG); + grub_test_assert (strncmp (s3, s2, 1) > 0, MSG); + grub_test_assert (strncmp (s3, s3, 1) == 0, MSG); + + grub_test_assert (strncasecmp (s1, s1, 2) == 0, MSG); + grub_test_assert (strncasecmp (s1, s2, 2) < 0, MSG); + grub_test_assert (strncasecmp (s1, s3, 2) < 0, MSG); + + grub_test_assert (strncasecmp (s2, s1, 2) > 0, MSG); + grub_test_assert (strncasecmp (s2, s2, 2) == 0, MSG); + grub_test_assert (strncasecmp (s2, s3, 2) < 0, MSG); + + grub_test_assert (strncasecmp (s3, s1, 2) > 0, MSG); + grub_test_assert (strncasecmp (s3, s2, 2) > 0, MSG); + grub_test_assert (strncasecmp (s3, s3, 2) == 0, MSG); + + grub_test_assert (strncasecmp (s1, s1, 1) == 0, MSG); + grub_test_assert (strncasecmp (s1, s2, 1) == 0, MSG); + grub_test_assert (strncasecmp (s1, s3, 1) < 0, MSG); + + grub_test_assert (strncasecmp (s2, s1, 1) == 0, MSG); + grub_test_assert (strncasecmp (s2, s2, 1) == 0, MSG); + grub_test_assert (strncasecmp (s2, s3, 1) < 0, MSG); + + grub_test_assert (strncasecmp (s3, s1, 1) > 0, MSG); + grub_test_assert (strncasecmp (s3, s2, 1) > 0, MSG); + grub_test_assert (strncasecmp (s3, s3, 1) == 0, MSG); +} + +/* Register example_test method as a functional test. */ +GRUB_UNIT_TEST ("cmp_test", cmp_test); diff --git a/tests/core_compress_test.in b/tests/core_compress_test.in new file mode 100644 index 000000000..1003587cc --- /dev/null +++ b/tests/core_compress_test.in @@ -0,0 +1,36 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # FIXME: Only mips currently supports configurable core compression + *-emu | i386-* | x86_64-* | sparc64-* | ia64-*) + exit 0 + ;; +esac + + +if [ "$(echo hello | "${grubshell}" --grub-mkimage-extra=--compress=xz)" != "Hello World" ]; then + exit 1 +fi + +if [ "$(echo hello | "${grubshell}" --grub-mkimage-extra=--compress=none)" != "Hello World" ]; then + exit 1 +fi diff --git a/tests/cpio_test.in b/tests/cpio_test.in new file mode 100644 index 000000000..0b09db549 --- /dev/null +++ b/tests/cpio_test.in @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +if ! which cpio >/dev/null 2>&1; then + echo "cpio not installed; cannot test cpio." + exit 77 +fi + +"@builddir@/grub-fs-tester" cpio_bin +"@builddir@/grub-fs-tester" cpio_odc +"@builddir@/grub-fs-tester" cpio_newc +"@builddir@/grub-fs-tester" cpio_crc +"@builddir@/grub-fs-tester" cpio_ustar +"@builddir@/grub-fs-tester" cpio_hpbin +"@builddir@/grub-fs-tester" cpio_hpodc diff --git a/tests/date_unit_test.c b/tests/date_unit_test.c new file mode 100644 index 000000000..99774f199 --- /dev/null +++ b/tests/date_unit_test.c @@ -0,0 +1,76 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +#include +#include +#include + +static void +date_test (grub_int32_t v) +{ + struct grub_datetime dt; + time_t t = v; + struct tm *g; + int w; + + g = gmtime (&t); + + grub_unixtime2datetime (v, &dt); + + w = grub_get_weekday (&dt); + + grub_test_assert (g->tm_sec == dt.second, "time %d bad second: %d vs %d", v, + g->tm_sec, dt.second); + grub_test_assert (g->tm_min == dt.minute, "time %d bad minute: %d vs %d", v, + g->tm_min, dt.minute); + grub_test_assert (g->tm_hour == dt.hour, "time %d bad hour: %d vs %d", v, + g->tm_hour, dt.hour); + grub_test_assert (g->tm_mday == dt.day, "time %d bad day: %d vs %d", v, + g->tm_mday, dt.day); + grub_test_assert (g->tm_mon + 1 == dt.month, "time %d bad month: %d vs %d", v, + g->tm_mon + 1, dt.month); + grub_test_assert (g->tm_year + 1900 == dt.year, + "time %d bad year: %d vs %d", v, + g->tm_year + 1900, dt.year); + grub_test_assert (g->tm_wday == w, "time %d bad week day: %d vs %d", v, + g->tm_wday, w); +} + +static void +date_test_iter (void) +{ + grub_int32_t tests[] = { -1, 0, +1, -2133156255, GRUB_INT32_MIN, + GRUB_INT32_MAX }; + unsigned i; + + for (i = 0; i < ARRAY_SIZE (tests); i++) + date_test (tests[i]); + srand (42); + for (i = 0; i < 1000000; i++) + { + grub_int32_t x = rand (); + date_test (x); + date_test (-x); + } +} + +GRUB_UNIT_TEST ("date_unit_test", date_test_iter); diff --git a/tests/dfly-mbr-mbexample.dfly.img.gz b/tests/dfly-mbr-mbexample.dfly.img.gz new file mode 100644 index 0000000000000000000000000000000000000000..b63595d4eb5cba0220718a85a94dc15d54c368d6 GIT binary patch literal 124 zcmV-?0E7P@iwFQArIS$r1B>)=JEBk}oX#M?0749B)R`<#dOZ^C+{nqG?s~F>;eb6O z0|*E(K!5|3u>mR$rBl*!Ds^*{igb$&83qKv+$9hVrq~H6x75EKgW}JCY>31L8=~~L en4sxrSOL{Pohbc97U=p11^@uT3_t?_0ssI^hB2uC literal 0 HcmV?d00001 diff --git a/tests/dfly-mbr-mbexample.mbr.img.gz b/tests/dfly-mbr-mbexample.mbr.img.gz new file mode 100644 index 0000000000000000000000000000000000000000..add2b13379c8b7eacd7d789ee35d56448154ce3c GIT binary patch literal 41 xcmb2|=3v;qWO5(_b8-ShBb%FB+tP1bhqxTRHUH#MX}%E35HC~Z;K9Ja001k14aooi literal 0 HcmV?d00001 diff --git a/tests/ehci_test.in b/tests/ehci_test.in new file mode 100644 index 000000000..7dd8d3e8f --- /dev/null +++ b/tests/ehci_test.in @@ -0,0 +1,51 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: Don't mess with real devices when OS is active + *-emu) + exit 0;; + # FIXME: qemu gets bonito DMA wrong + mipsel-loongson) + exit 0;; + # PLATFORM: no USB on ARC and qemu-mips platforms + mips*-arc | mips*-qemu_mips) + exit 0;; + # FIXME: No native drivers are available for those + powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi) + exit 0;; +esac + +imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 +outfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + +echo "hello" > "$outfile" + +tar cf "$imgfile" "$outfile" + +if [ "$(echo "nativedisk; source '(usb0)/$outfile';" | "${grubshell}" --qemu-opts="-device ich9-usb-ehci1 -drive id=my_usb_disk,file=$imgfile,if=none -device usb-storage,drive=my_usb_disk" | tail -n 1)" != "Hello World" ]; then + rm "$imgfile" + rm "$outfile" + exit 1 +fi + +rm "$imgfile" +rm "$outfile" diff --git a/tests/example_grub_script_test.in b/tests/example_grub_script_test.in new file mode 100644 index 000000000..93a90a18e --- /dev/null +++ b/tests/example_grub_script_test.in @@ -0,0 +1,3 @@ +#! @builddir@/grub-shell-tester --modules=echo + +echo "hello world" diff --git a/tests/example_scripted_test.in b/tests/example_scripted_test.in new file mode 100644 index 000000000..09633e893 --- /dev/null +++ b/tests/example_scripted_test.in @@ -0,0 +1,4 @@ +#!/bin/sh +set -e + +true diff --git a/tests/example_unit_test.c b/tests/example_unit_test.c new file mode 100644 index 000000000..36bfac970 --- /dev/null +++ b/tests/example_unit_test.c @@ -0,0 +1,38 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* Unit tests are normal programs, so they can include C library. */ +#include + +/* All tests need to include test.h for GRUB testing framework. */ +#include + +/* Unit test main method. */ +static void +example_test (void) +{ + /* Check if 1st argument is true and report with default error message. */ + grub_test_assert (1 == 1, "1 equal 1 expected"); + + /* Check if 1st argument is true and report with custom error message. */ + grub_test_assert (2 == 2, "2 equal 2 expected"); + grub_test_assert (2 != 3, "2 matches %d", 3); +} + +/* Register example_test method as a unit test. */ +GRUB_UNIT_TEST ("example_unit_test", example_test); diff --git a/tests/exfat_test.in b/tests/exfat_test.in new file mode 100644 index 000000000..fc1a0fe5e --- /dev/null +++ b/tests/exfat_test.in @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.exfat >/dev/null 2>&1; then + echo "mkfs.exfat not installed; cannot test exFAT." + exit 77 +fi + +"@builddir@/grub-fs-tester" exfat diff --git a/tests/ext234_test.in b/tests/ext234_test.in new file mode 100644 index 000000000..c986960a8 --- /dev/null +++ b/tests/ext234_test.in @@ -0,0 +1,32 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.ext2 >/dev/null 2>&1; then + echo "mkfs.ext2 not installed; cannot test ext2." + exit 77 +fi + +if ! which mkfs.ext3 >/dev/null 2>&1; then + echo "mkfs.ext3 not installed; cannot test ext3." + exit 77 +fi + +if ! which mkfs.ext4 >/dev/null 2>&1; then + echo "mkfs.ext4 not installed; cannot test ext4." + exit 77 +fi + +"@builddir@/grub-fs-tester" ext2_old +"@builddir@/grub-fs-tester" ext2 +"@builddir@/grub-fs-tester" ext3 +"@builddir@/grub-fs-tester" ext4 +"@builddir@/grub-fs-tester" ext4_metabg diff --git a/tests/fat_test.in b/tests/fat_test.in new file mode 100644 index 000000000..1d132b517 --- /dev/null +++ b/tests/fat_test.in @@ -0,0 +1,22 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.vfat >/dev/null 2>&1; then + echo "mkfs.vfat not installed; cannot test FAT." + exit 77 +fi + +"@builddir@/grub-fs-tester" vfat16a +"@builddir@/grub-fs-tester" vfat12a +"@builddir@/grub-fs-tester" vfat12 +"@builddir@/grub-fs-tester" vfat16 +"@builddir@/grub-fs-tester" vfat32 diff --git a/tests/fddboot_test.in b/tests/fddboot_test.in new file mode 100644 index 000000000..a59645b7f --- /dev/null +++ b/tests/fddboot_test.in @@ -0,0 +1,51 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: emu is different + *-emu) + exit 0;; + # PLATFORM: Flash targets + i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips) + exit 0;; + # FIXME: currently grub-shell uses only -kernel for loongson + mipsel-loongson) + exit 0;; + # FIXME: We don't support EFI floppy boot in grub-mkrescue + *-efi) + exit 0;; + # FIXME: no floppy support + i386-multiboot) + exit 0;; + # FIXME: QEMU firmware crashes when trying to boot from floppy + sparc64-ieee1275) + exit 0;; + # FIXME: QEMU doesn't emulate SCSI floppies + mipsel-arc | mips-arc) + exit 0;; + # PLATFORM: powerpc doesn't boot from floppy except OldWorld Macs which we don't support anyway + powerpc-ieee1275) + exit 0;; +esac + +if [ "$(echo hello | "${grubshell}" --boot=fd --mkrescue-arg="--compress=xz --fonts= --locales= --themes= -no-pad")" != "Hello World" ]; then + exit 1 +fi diff --git a/tests/file_filter/file b/tests/file_filter/file new file mode 100644 index 000000000..64650ac58 --- /dev/null +++ b/tests/file_filter/file @@ -0,0 +1 @@ +Hello, user! diff --git a/tests/file_filter/file.gz b/tests/file_filter/file.gz new file mode 100644 index 0000000000000000000000000000000000000000..a07ffcbe0cbad415ea51ec72bbe7b54094284d3d GIT binary patch literal 33 pcmb2|=3qFtrZI$p`LoB_lP9kSYUuju20dY7FxvO)Cocm70|4R_48H&X literal 0 HcmV?d00001 diff --git a/tests/file_filter/file.gz.sig b/tests/file_filter/file.gz.sig new file mode 100644 index 0000000000000000000000000000000000000000..602e6187e22d7fc288a52ac572f38cc1066083cb GIT binary patch literal 96 zcmV-m0H6PeUIYLU2ml5J0#t#n2LK8Q5M~MT@8nv<3h9^t|7f?gmaE1LNh!Sm;mO#P zdLo*tTpkl+s!TB^f%Fh1{Q&^Tlz2`!Q4Giq Ct|zAe literal 0 HcmV?d00001 diff --git a/tests/file_filter/file.lzop b/tests/file_filter/file.lzop new file mode 100644 index 0000000000000000000000000000000000000000..5f5a97171821de55168fcbdc9b1b335316d295b9 GIT binary patch literal 67 zcmeD5iSlRQ<&xqOFi>dVbYNsjC(Bu@f@NKNp%ec7JvFb-Lz3O)* CVl0pV literal 0 HcmV?d00001 diff --git a/tests/file_filter/file.xz b/tests/file_filter/file.xz new file mode 100644 index 0000000000000000000000000000000000000000..151a98029033dd0947d54f8ddad670da85a45185 GIT binary patch literal 72 zcmexsUKJ6=z`*kC+7>q^21Q0O1_p)_{ill=8F)NWb8_-^6iSOzixjzl!VG^@7(cF= Z)UCz9sLER?d1RaXw$HVUAPJVpC;$*f6z~85 literal 0 HcmV?d00001 diff --git a/tests/file_filter/file.xz.sig b/tests/file_filter/file.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..57569242e4742cdfb929307ec19440cf91f49e9a GIT binary patch literal 96 zcmV-m0H6PeUIYLU2ml5J0#t#n3jhiU5M~MT@8nv<3OS$v{x;4Uj6+!wt^-rP*&N$| z+5zKQ7vOO`?M~+y=au4FasdGNRgV;Q;4TNc&v05)-JLjLl54~a(Q}0wbmOZ2ne0%w Ci77V# literal 0 HcmV?d00001 diff --git a/tests/file_filter/keys b/tests/file_filter/keys new file mode 100644 index 0000000000000000000000000000000000000000..1afa71382364060d08bb0c28e36a1ff98d585fe8 GIT binary patch literal 994 zcmV<810DRC11@ew%2nM8awI88}g~WvBj*BJPpr^(@>)pd~ex-<$MMPxbNPGZV|BH zWj8IQR4B@uXKc3uaPJ1=^^Zq^DT zGR)3)y_E}*oM=>(9mHp}SKbH+oTA=g$}Y_>Yo72Jn4N$d^(*k!0WN3*`c`xB4p;&y zxUni$jurte*DGtmax;-CBK;ReR-(#??6SOFAtnGFD6+^8CX~5LD{yPt|2mUMt zwJE)m>0ZFNaB_Tkn{@&~ymmqz6=oI&zK^|yp26yNF-zSkq2MW>GyFClY9q{@=2rys zhJs5IhyReW6c9&Zrk@1~&dA`O!?SH6dN^nA@=cwz&`Ezpv7R;6gk|My_?I8#%?Z*v z0G=T3S|-k)ND-11n=+U)J=DUmZ`*NlWO1qRl1d|e3jZ@ioyPN?bxzIto0ltfBGhMj z*HF^AUdvgzSm>LzM75fVG>0caAHZcq9dkq@E1ccwLg7IkAD-Uj9eRWey-8OeDLZtP zFGWnyh(8GDLvyN?Wb=5U*>gB4;O4Q~QA&IhlL~dxCca=f>yhv4IlbS9*wP37G*l-7 z68Nu9XH0V?#8Mlr_|4bivnV+Xw zydOTU@TyjupFl11F8p`)R&210tm6Y4QE*AG%aIRbg##g$XGEjNV}o~RH4hXtsdF}8 zgc#a=4BiAs$WhG?LV$*t4U}ex(o2%HHKsbzt@0q@tiFkDvxZ4j5EO=^&d${9btru+ zAB}{L36Q;49P;3xdCKCi1x(1w?GNPIz7@+G3MU121``j|n!I&1(;|JmS_t_VuMTgP z(dkfWGS@ew%2nM8awI88}g~WvBj*BJPpr^(@>)pd~ex-<$MMPxbNPGZV|BH zWj8IQR4B@uXKc3uaPJ1=^^Zq^DT zGR)3)y_E}*oM=>(9mHp}SKbH+oTA=g$}Y_>Yo72Jn4N$d^(*k!0WN3*`c`xB4p;&y zxUni$jurte*DGtmax;-CBK;ReR-(#??6SOFAtnGFD6+^8CX~5LD{yPt|2mUMt zwJE)m>0ZFNaB_Tkn{@&~ymmqz6=oI&zK^|yp26yNF-zSkq2MW>GyFClY9q{@=2rys zhJs5IhyReW6c9&Zrk@1~&dA`O!?SH6dN^nA@=cwz&`Ezpv7R;6gk|My_?I8#%?Z*v z0G=T3S|-k)ND-11n=+U)J=DUmZ`*NlWO1qRl1d|e3jZ@ioyPN?bxzIto0ltfBGhMj z*HF^AUdvgzSm>LzM75fVG>0caAHZcq9dkq@E1ccwLg7IkAD-Uj9eRWey-8OeDLZtP zFGWnyh(8GDLvyN?Wb=5U*>gB4;O4Q~QA&IhlL~dxCca=f>yhv4IlbS9*wP37G*l-7 z68Nu9XH0V?#8Mlr_|4bivnV+Xw zydOTU@TyjupFl11F8p`)R&210tm6Y4QE*AG%aIRbg##g$XGEjNV}o~RH4hXtsdF}8 zgc#a=4BiAs$WhG?LV$*t4U}ex(o2%HHKsbzt@0q@tiFkDvxZ4j5EO=^&d${9btru+ zAB}{L36Q;49P;3xdCKCi1x(1w?GNPIz7@+G3MU121``j|n!I&1(;|JmS_t_VuMTgP z(dkfWGS. + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +filters="gzio xzio lzopio verify" +modules="cat mpi" + +for mod in $(cut -d ' ' -f 2 "@builddir@/grub-core/crypto.lst" | sort -u); do + modules="$modules $mod" +done + +for file in file.gz file.xz file.lzop file.gz.sig file.xz.sig file.lzop.sig keys.pub; do + files="$files /$file=@srcdir@/tests/file_filter/$file" +done + +# GRUB cat command adds extra newline after file +result="Hello, user! + +Hello, user! + +Hello, user!" + +out="$("${grubshell}" --modules="$modules $filters" --files="$files" "@srcdir@/tests/file_filter/test.cfg")" +if [ "$out" != "$result" ]; then + echo LOCAL FAIL + echo "$out" + exit 1 +fi + +# Taken from netboot_test +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: emu is different + *-emu) + exit 0;; + # PLATFORM: Flash targets + i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips) + exit 0;; + # FIXME: currently grub-shell uses only -kernel for loongson + mipsel-loongson) + exit 0;; + # FIXME: no rtl8139 support + i386-multiboot) + exit 0;; + # FIXME: We don't fully support netboot on ARC + *-arc) + exit 0;; + # FIXME: Many QEMU firmware have no netboot capability + *-efi | i386-ieee1275 | powerpc-ieee1275 | sparc64-ieee1275) + exit 0;; +esac + +out="$("${grubshell}" --boot=net --modules="$modules $filters" --files="$files" "@srcdir@/tests/file_filter/test.cfg")" +if [ "$out" != "$result" ]; then + echo NET FAIL + echo "$out" + exit 1 +fi + +exit 0 diff --git a/tests/gettext_strings_test.in b/tests/gettext_strings_test.in new file mode 100644 index 000000000..5c305e75b --- /dev/null +++ b/tests/gettext_strings_test.in @@ -0,0 +1,20 @@ +#!/bin/sh + +cd '@srcdir@' + +tdir="$(mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX")" + +xgettext -f po/POTFILES.in -L C -o "$tdir/"skip.pot -x po/grub.pot --keyword=grub_util_info --keyword=grub_dprintf:1,2 --keyword=grub_register_command --keyword=grub_register_extcmd --keyword=grub_efiemu_resolve_symbol --keyword=grub_efiemu_register_symbol --keyword=grub_dl_load --keyword=grub_crypto_lookup_md_by_name --keyword=grub_crypto_lookup_cipher_by_name --keyword=grub_efiemu_resolve_symbol --keyword=alias --keyword=grub_ieee1275_get_property:2 --keyword=grub_ieee1275_find_device --keyword=grub_ieee1275_get_integer_property:2 --keyword=INIT_IEEE1275_COMMON:2 --keyword=grub_boot_time --keyword=grub_env_get --keyword=grub_env_set --keyword=grub_register_variable_hook --keyword=grub_fatal --keyword=__asm__ --keyword=volatile --keyword=__volatile__ --keyword=grub_error:2 --from-code=iso-8859-1 +xgettext -f po/POTFILES.in -L C -o "$tdir/"skip2.pot -x po/grub.pot --keyword=volatile:2 --keyword=__volatile__:2 --keyword=grub_dprintf:2 --from-code=iso-8859-1 +xgettext -f po/POTFILES.in -L C -o "$tdir/"skip3.pot -x po/grub.pot --keyword=volatile:3 --keyword=__volatile__:3 --from-code=iso-8859-1 + +cat po/POTFILES.in | xargs grep -hE -o "( | ){\"[a-z0-9\-]*\",[[:space:]]*('.'|[0-9]|-[0-9])," |sed "s,[[:space:]]*{\",,g;s,\"\,[[:space:]]*\('.'\|[0-9]\|-[0-9]\)\,,,g" | awk '{ print "msgid \"" $0 "\"\nmsgstr \"\"" ; }' > "$tdir/"opts.pot +cat po/POTFILES.in | xargs grep -hE -o "[[:space:]]*\.name[[:space:]]*=[[:space:]]*\"[a-zA-Z0-9 ()]*\"" |sed "s,[[:space:]]*\.name[[:space:]]*=[[:space:]]*\",,g;s,\",,g" | awk '{ print "msgid \"" $0 "\"\nmsgstr \"\"" ; }' > "$tdir/"name.pot + +out="$(cat po/POTFILES.in | grep -v '\(colors.c\|lsefisystab.c\|lsefimmap.c\|lssal.c\|hdparm.c\|sendkey.c\|lsacpi.c\|lspci.c\|usbtest.c\|legacy_parse.c\|/libgcrypt/\|hfs.c\|/efi\.c$\|gnulib\|tests/\|util/ieee1275/ofpath.c\|minilzo.c\|terminfo.c\|setpci.c\|bin2h.c\|cb_timestamps.c\|grub-pe2elf.c\|getroot_[a-z]*.c\|getroot.c\|arc/init.c\|color.c\|grub-mklayout.c\|gentrigtables.c\|lzodefs.h\|lsefi.c\|cbls.c\|/zfs\.h$\|grub-macho2img.c\|syslinux_parse.c\|lvm.c\|efidisk.c\|grub-mkfont.c\|reiserfs.c\|LzmaEnc.c\)' | xgettext -f - -L C -o - -x po/grub.pot -x "$tdir/"skip.pot -x "$tdir/"skip2.pot -x "$tdir/"skip3.pot -x "$tdir/"opts.pot -x "$tdir/"name.pot -x po/exclude.pot -a --from-code=iso-8859-1)" +rm -rf "$tdir" +if [ x"$out" != x ]; then + echo "$out" + exit 1; +fi + diff --git a/tests/grub_cmd_date.in b/tests/grub_cmd_date.in new file mode 100644 index 000000000..a459353e8 --- /dev/null +++ b/tests/grub_cmd_date.in @@ -0,0 +1,29 @@ +#! /bin/bash +set -e + +. "@builddir@/grub-core/modinfo.sh" + +# FIXME: OpenBIOS on sparc64 doesn't implement RTC +if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = sparc64-ieee1275 ]; then + exit 0 +fi + +pdt="$(date -u +%s)" +dt=`echo date | @builddir@/grub-shell` +dtg="$(date -u -d "$dt" +%s)" +ndt="$(date -u +%s)" + +if [ $pdt -gt $dtg ] || [ $dtg -gt $ndt ]; then + echo "Date not in range: $pdt <= $dtg <= $ndt" + exit 1 +fi + +pdt="$(date -u +%s)" +dt=`echo 'insmod datehook; echo $YEAR-$MONTH-$DAY $HOUR:$MINUTE:$SECOND' | @builddir@/grub-shell` +dtg="$(date -u -d "$dt" +%s)" +ndt="$(date -u +%s)" + +if [ $pdt -gt $dtg ] || [ $dtg -gt $ndt ]; then + echo "Date not in range: $pdt <= $dtg <= $ndt" + exit 1 +fi diff --git a/tests/grub_cmd_echo.in b/tests/grub_cmd_echo.in new file mode 100644 index 000000000..902696778 --- /dev/null +++ b/tests/grub_cmd_echo.in @@ -0,0 +1,41 @@ +#! @builddir@/grub-shell-tester +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +echo +echo -n + +echo foo +echo foo bar + +echo -n foo + +echo -e "foo\nbar" + +echo -n -e "foo\nbar" + +echo foo -n +echo foo -n -e + +echo ------- + +if test -n "$grubshell"; then insmod regexp; fi + +echo '*' +echo "*" + +foo="*" +echo "$foo" diff --git a/tests/grub_cmd_regexp.in b/tests/grub_cmd_regexp.in new file mode 100644 index 000000000..e7e625701 --- /dev/null +++ b/tests/grub_cmd_regexp.in @@ -0,0 +1,42 @@ +#! /bin/bash +set -e + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +cmd='regexp -s version "vm-(.*)" vm-1.2.3; echo $version' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != 1.2.3; then echo "error: $cmd" >&2; exit 1; fi + +cmd='regexp -s 1:version "vm-(.*)" vm-1.2.3; echo $version' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != 1.2.3; then echo "error: $cmd" >&2; exit 1; fi + +cmd='regexp -s 0:match "vm-(.*)" vm-1.2.3; echo $match' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != vm-1.2.3; then echo "error: $cmd" >&2; exit 1; fi + +cmd='regexp -s 2:match "vm-(.*)" vm-1.2.3; echo $match' +v=`echo "$cmd" | @builddir@/grub-shell` +if test -n "$v"; then echo "error: $cmd" >&2; exit 1; fi + +cmd='regexp -s match "\\\((.*)\\\)" (hd0,msdos1); echo $match' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != "hd0,msdos1"; then echo "error: $cmd" >&2; exit 1; fi + +cmd='regexp -s match "hd([0-9]+)" hd0; echo $match' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != "0"; then echo "error: $cmd" >&2; exit 1; fi diff --git a/tests/grub_cmd_set_date.in b/tests/grub_cmd_set_date.in new file mode 100644 index 000000000..c594ae3fc --- /dev/null +++ b/tests/grub_cmd_set_date.in @@ -0,0 +1,35 @@ +#! /bin/bash +set -e + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # FIXME: OpenBIOS on sparc64 doesn't implement RTC + sparc64-ieee1275) + exit 0;; + # PLATFORM: ARC doesn't provide any way to set time + *-arc) + exit 0;; + # PLATFORM: EMU doesn't provide any way to set time + # Even if it did we'd need some kind of sandbox to avoid + # modifying real system time. + *-emu) + exit 0;; +esac + +out=$(cat <$non_empty <$outfile < /dev/null 2>&1; then + echo "GRUB test command file tests failed." + cat "$outfile" + exit 1 +else + rm -f "${outfile}" + exit 0 +fi diff --git a/tests/grub_cmd_tr.in b/tests/grub_cmd_tr.in new file mode 100644 index 000000000..3fb15e35c --- /dev/null +++ b/tests/grub_cmd_tr.in @@ -0,0 +1,62 @@ +#! /bin/bash -e + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# +# Translating a string argument +# +cmd='tr 12345 abcde a1b2c3d4e5' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != aabbccddee; then echo "error: $cmd [$v]" >&2; exit 1; fi + +cmd='tr -U abcdABCD' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != ABCDABCD; then echo "error: $cmd [$v]" >&2; exit 1; fi + +cmd='tr -D ABCDabcd' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != abcdabcd; then echo "error: $cmd [$v]" >&2; exit 1; fi + +# +# Translating a variable value +# +cmd='foo=12345678; tr -s foo 1234 abcd; echo $foo' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != abcd5678; then echo "error: $cmd [$v]" >&2; exit 1; fi + +cmd='foo=abcdEFGH; tr -U -s foo; echo $foo' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != ABCDEFGH; then echo "error: $cmd [$v]" >&2; exit 1; fi + +cmd='foo=abcdEFGH; tr -D -s foo; echo $foo' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != abcdefgh; then echo "error: $cmd [$v]" >&2; exit 1; fi + +# +# Setting a variable from string argument +# +cmd='foo=12345678; tr -s foo 1234 abcd a1b2c3d4e5; echo $foo' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != aabbccdde5; then echo "error: $cmd [$v]" >&2; exit 1; fi + +cmd='foo=abcdEFGH; tr -U -s foo xyz; echo $foo' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != XYZ; then echo "error: $cmd [$v]" >&2; exit 1; fi + +cmd='foo=abcdEFGH; tr -D -s foo XYZ; echo $foo' +v=`echo "$cmd" | @builddir@/grub-shell` +if test "$v" != xyz; then echo "error: $cmd [$v]" >&2; exit 1; fi diff --git a/tests/grub_func_test.in b/tests/grub_func_test.in new file mode 100644 index 000000000..c8cc26376 --- /dev/null +++ b/tests/grub_func_test.in @@ -0,0 +1,21 @@ +#! /bin/bash +set -e + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: Max RAM is 256M + mips-qemu_mips | mipsel-qemu_mips) + mem=256M;; + *) + mem=512M;; +esac + +# Increase memory as some of tests are high-resolution and need a lot of memory. +out=`echo all_functional_test | @builddir@/grub-shell --timeout=3600 --files="/boot/grub/fonts/unicode.pf2"="@builddir@/"unicode.pf2 --qemu-opts="-m $mem"` + +if [ "$(echo "$out" | tail -n 1)" != "ALL TESTS PASSED" ]; then + echo "Functional test failure: $out" + exit 1 +fi + diff --git a/tests/grub_script_blanklines.in b/tests/grub_script_blanklines.in new file mode 100644 index 000000000..89ed763d3 --- /dev/null +++ b/tests/grub_script_blanklines.in @@ -0,0 +1,15 @@ +#! /bin/sh +set -e + +@builddir@/grub-script-check <. + +error_if_not () { + if test "$1" != "$2"; then + echo "[$1]" != "[$2]" + exit 1 + fi +} + +cmd='test_blockarg { true }' +v=`echo "$cmd" | @builddir@/grub-shell` +error_if_not "$v" '{ true }' + +tmp=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +cmd='test_blockarg { test_blockarg { true } }' +echo "$cmd" | @builddir@/grub-shell >$tmp +error_if_not "`head -n1 $tmp|tail -n1`" '{ test_blockarg { true } }' +error_if_not "`head -n2 $tmp|tail -n1`" '{ true }' + +cmd='test_blockarg { test_blockarg { test_blockarg { true } }; test_blockarg { true } }' +echo "$cmd" | @builddir@/grub-shell >$tmp +error_if_not "`head -n1 $tmp|tail -n1`" '{ test_blockarg { test_blockarg { true } }; test_blockarg { true } }' +error_if_not "`head -n2 $tmp|tail -n1`" '{ test_blockarg { true } }' +error_if_not "`head -n3 $tmp|tail -n1`" '{ true }' +error_if_not "`head -n4 $tmp|tail -n1`" '{ true }' diff --git a/tests/grub_script_break.in b/tests/grub_script_break.in new file mode 100644 index 000000000..bf265e8b3 --- /dev/null +++ b/tests/grub_script_break.in @@ -0,0 +1,86 @@ +#! @builddir@/grub-shell-tester +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# break without any arguments +for i in 1 2 3 4 5 6 7 8 9 10 +do + echo $i + if test "$i" = 5 + then + break + fi +done + +# break with one +for i in 1 2 3 4 5 6 7 8 9 10 +do + echo $i + if test "$i" = 5 + then + break 1 + fi +done + +# break with loop count +for i in 1 2 3 4 5 +do + for j in a b c d e f + do + echo "$i $j" + if test "$i" = 3 + then + if test "$j" = d + then + break 2 + fi + fi + done +done + +# break into middle loop +for i in 1 2 3 4 5 +do + for j in a b c d e f + do + echo "$i $j" + if test "$i" = 3 + then + if test "$j" = d + then + break 1 + fi + fi + done +done + +# while and until loops +a= +while test "$a" != "aaaaaaa" +do + a="a$a" + for i in 1 2 3 4 + do + b= + until test "$b" = "bbbbb" + do + b="b$b" + echo "$a $i $b" + if test "$i" = 3; then echo "break 2"; break 2; fi + done + done +done + diff --git a/tests/grub_script_comments.in b/tests/grub_script_comments.in new file mode 100644 index 000000000..f212cc1e1 --- /dev/null +++ b/tests/grub_script_comments.in @@ -0,0 +1,28 @@ +#! @builddir@/grub-shell-tester +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +echo a###b +echo a# #b + +echo # +echo \# + +echo '#' +echo "#" + +echo '\#' +echo "\#" diff --git a/tests/grub_script_continue.in b/tests/grub_script_continue.in new file mode 100644 index 000000000..4c28ce404 --- /dev/null +++ b/tests/grub_script_continue.in @@ -0,0 +1,86 @@ +#! @builddir@/grub-shell-tester +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# continue without any arguments +for i in 1 2 3 4 5 6 7 8 9 10 +do + if test "$i" = 5 + then + continue + fi + echo $i +done + +# continue with one +for i in 1 2 3 4 5 6 7 8 9 10 +do + if test "$i" = 5 + then + continue 1 + fi + echo $i +done + +# continue with loop count +for i in 1 2 3 4 5 +do + for j in a b c d e f + do + if test "$i" = 3 + then + if test "$j" = d + then + continue 2 + fi + echo "$i $j" + fi + done +done + +# continue into middle loop +for i in 1 2 3 4 5 +do + for j in a b c d e f + do + if test "$i" = 3 + then + if test "$j" = d + then + continue 1 + fi + echo "$i $j" + fi + done +done + +# while and until loops +a= +while test "$a" != "aaaaaaa" +do + a="a$a" + for i in 1 2 3 4 + do + b= + until test "$b" = "bbbbb" + do + b="b$b" + if test "$i" = 3; then echo "continue 2"; continue 2; fi + echo "$a $i $b" + done + done +done + diff --git a/tests/grub_script_dollar.in b/tests/grub_script_dollar.in new file mode 100644 index 000000000..2e076427a --- /dev/null +++ b/tests/grub_script_dollar.in @@ -0,0 +1,6 @@ +#! /bin/sh +set -e + +@builddir@/grub-script-check << EOF +echo "\\\$" +EOF diff --git a/tests/grub_script_echo1.in b/tests/grub_script_echo1.in new file mode 100644 index 000000000..3a07972a9 --- /dev/null +++ b/tests/grub_script_echo1.in @@ -0,0 +1,183 @@ +#! @builddir@/grub-shell-tester + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# simple arguments +echo one two three +echo "one two three" +echo 'one two three' + echo "one two three" + echo "one two three" + echo "one two three" + +# empty arguments +echo a "" b +echo a '' b + +echo a $foo b +echo a ${foo} b + +echo a "$foo" b +echo a "${foo}" b + +# multi-part arguments +echo one"two"three +echo one${two}three +echo one"two"$three + +echo one'two'three +echo one${two}three +echo one'two'$three + +echo one'two'three"four"five${six}seven$eight + + +foo=bar +echo $foo ${foo} +echo "$foo" "${foo}" +echo '$foo' '${foo}' +echo a$foob a${foo}b +echo ab"cd"ef$foo'gh'ij${foo}kl\ mn\"op\'qr\$st\(uv\yz\) + +foo=c +bar=h +echo e"$foo"${bar}o +e"$foo"${bar}o hello world + +foo=echo +$foo 1234 + +echo "one +" +echo "one +\"" +echo "one +two" + +echo one"two +"three +echo one"two +\""three +echo one"two +\"three\" +four" + + +echo 'one +' +echo 'one +\' +echo 'one +two' +echo one'two +' +echo one'two +\' +echo one'two +\'three + +echo "one\ +" +echo "one\ +\"" +echo "one\ +two" + +# echo "one\ +# two" +# echo 'one\ +# two' +# echo foo\ +# bar +# \ +# echo foo +# echo "one +# +# two" + +echo "one + " +echo "one + \"" +echo "one + two" + +echo one"two + "three +echo one"two + \""three +echo one"two +\"three\" + four" + +echo 'one + ' +echo 'one + \' +echo 'one + two' +echo one'two + ' +echo one'two + \' +echo one'two + \'three + +echo "one\ + " +echo "one\ + \"" +echo "one\ + two" + +echo one \ + two + +echo one x\ + two + +echo one x\ +"x" two +echo one x\ +'x' two +echo one x\ +\\ two + +echo one x\ +\ +x + +echo one x\ + + + +echo one x\ +; + +echo one x\ +$var + + +if test x$grubshell = xyes; then insmod regexp; fi +echo /boot/grub/i386-pc/normal.mod +echo x\\y +echo x\*y +echo x\\ +echo x\\\\ +echo x\\\\y + + diff --git a/tests/grub_script_echo_keywords.in b/tests/grub_script_echo_keywords.in new file mode 100644 index 000000000..a6383f0e2 --- /dev/null +++ b/tests/grub_script_echo_keywords.in @@ -0,0 +1,3 @@ +#! @builddir@/grub-shell-tester + +echo if then else fi for do done diff --git a/tests/grub_script_escape_comma.in b/tests/grub_script_escape_comma.in new file mode 100644 index 000000000..eff317920 --- /dev/null +++ b/tests/grub_script_escape_comma.in @@ -0,0 +1,18 @@ +#! @builddir@/grub-shell-tester + +x=1\\,1 +echo $x +y='$' +echo $y +z='\' +echo $z +t='\*' +echo $t +u='$' +echo $u +v='\?' +echo $v + + +echo \\ + diff --git a/tests/grub_script_eval.in b/tests/grub_script_eval.in new file mode 100644 index 000000000..c97b78d77 --- /dev/null +++ b/tests/grub_script_eval.in @@ -0,0 +1,6 @@ +#! @builddir@/grub-shell-tester + +eval echo "Hello world" +valname=tst +eval $valname=hi +echo $tst \ No newline at end of file diff --git a/tests/grub_script_expansion.in b/tests/grub_script_expansion.in new file mode 100644 index 000000000..e46401c4c --- /dev/null +++ b/tests/grub_script_expansion.in @@ -0,0 +1,43 @@ +#! /bin/bash +set -e + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +disks=`echo ls | @builddir@/grub-shell| grep -av '^Network protocols:$'| grep -av '^tftp http $'` +other=`echo insmod regexp\; echo \* | @builddir@/grub-shell` +for d in $disks; do + if echo "$d" |grep ',' >/dev/null; then + if echo "$other" | grep -F -- "$d" >/dev/null; then + echo "$d should not occur in * expansion" >&2 + exit 1 + fi + else + if ! echo "$other" | grep -F -- "$d" >/dev/null; then + echo "$d missing from * expansion" >&2 + exit 1 + fi + fi +done + +other=`echo insmod regexp\; echo '(*)' | @builddir@/grub-shell` +for d in $disks; do + if ! echo "$other" | grep -F -- "$d" >/dev/null; then + echo "$d missing from (*) expansion" >&2 + exit 1 + fi +done + diff --git a/tests/grub_script_final_semicolon.in b/tests/grub_script_final_semicolon.in new file mode 100644 index 000000000..3ac26540b --- /dev/null +++ b/tests/grub_script_final_semicolon.in @@ -0,0 +1,11 @@ +#! /bin/sh +set -e + +@builddir@/grub-script-check <. + +echo parameter count +function fcount { + echo fcount "$#" +} + +fcount +fcount a +fcount a b + +echo parameter count, with nesting +function ffcount { + echo ffcount "$#" + fcount + fcount a + fcount a b +} + +ffcount +ffcount 1 +ffcount 1 2 + +echo parameters +function fparam { + echo fparam 1 $1 + echo fparam 2 $2 + echo fparam 3 $3 +} + +fparam +fparam a +fparam a b + +echo parameters, with nesting +function ffparam { + echo ffparam 1 $1 + echo ffparam 2 $2 + echo ffparam 3 $3 + fparam + fparam a + fparam a b +} + +ffparam +ffparam 1 +ffparam 1 2 + +echo parameter expansion with specials +function fstar { + for f in $* + do + echo fstar $f + done + + for f in aaa$*bbb + do + echo fstar $f + done +} + +fstar +fstar a +fstar a "1 2" +fstar a "1 2" b + +function fdqstar { + for f in "$*" + do + echo fdqstar $f + done + + for f in aaa"$*"bbb + do + echo fdqstar $f + done + + for f in "aaa$*bbb" + do + echo fdqstar $f + done +} + +fdqstar +fdqstar a +fdqstar a "1 2" +fdqstar a "1 2" b + +function fat { + for f in $@ + do + echo fat $f + done + + for f in aaa$@bbb + do + echo fat $f + done +} + +fat +fat a +fat a "1 2" +fat a "1 2" b +fat a "1 2" b "c d" +fat a "1 2" b "c d" e + +function fdqat { + for f in "$@" + do + echo fdqat $f + done + + for f in aaa"$@"bbb + do + echo fdqat $f + done + + for f in "aaa$@bbb" + do + echo fdqat $f + done +} + +# fdqat # this case needs special handling, lets ignore till we really need it. +fdqat a +fdqat a "1 2" +fdqat a "1 2" b +fdqat a "1 2" b "c d" +fdqat a "1 2" b "c d" e + diff --git a/tests/grub_script_gettext.in b/tests/grub_script_gettext.in new file mode 100644 index 000000000..cc42c6751 --- /dev/null +++ b/tests/grub_script_gettext.in @@ -0,0 +1,69 @@ +#! @builddir@/grub-shell-tester +# +# Copyright (C) 2010,2012 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +echo $"foo" +echo $"foo bar" + +echo -n $"foo" + +echo -e $"foo\nbar" + +echo -n -e $"foo\nbar" + +x=5 +echo $"$x" +echo $"\x\\y\$x$x\\$xx${x}x\"$x\"" + +echo $"$" +echo $"$,x" + +echo $"one +" +echo $"one +\"" +echo $"one +two" + +echo one$"two +"three +echo one$"two +\""three +echo one$"two +\"three\" +four" + +echo $"one\ +" +echo $"one\ +\"" +echo $"one\ +two" + +echo one$"two\ +"three +echo one$"two\ +\""three +echo one$"two\ +\"three\"\ +four" + +if test -n "$grubshell"; then insmod regexp; fi + +echo $"*" + +foo="*" +echo $"$foo" diff --git a/tests/grub_script_if.in b/tests/grub_script_if.in new file mode 100644 index 000000000..fb17eaf70 --- /dev/null +++ b/tests/grub_script_if.in @@ -0,0 +1,31 @@ +#! @builddir@/grub-shell-tester + +#basic if, execute +if true; then echo yes; fi + +#basic if, no execution +if false; then echo no; fi + +#if else, execute if path +if true; then echo yes; else echo no; fi + +#if else, execute else path +if false; then echo no; else echo yes; fi + +#if elif, execute elif +if false; then echo no; elif true; then echo yes; fi + +#if elif else, execute else +if false; then echo no; elif false; then echo no; else echo yes; fi + +#if elif(1) elif(2), execute elif(2) +if false; then echo no; elif false; then echo no; elif true; then echo yes; fi + +#if elif(1) elif(2) else, execute else +if false; then echo no; elif false; then echo no; elif false; then echo no; else echo yes; fi + +#if {if elif else}, execute elif +if true; then if false; then echo no; elif true; then echo yes; else echo no; fi; fi + +#if {if elif} else, execute elif. ofcourse no dangling-else problem due to "fi" +if true; then if false; then echo no; elif true; then echo yes; fi; else echo no; fi diff --git a/tests/grub_script_leading_whitespace.in b/tests/grub_script_leading_whitespace.in new file mode 100644 index 000000000..d5946ba40 --- /dev/null +++ b/tests/grub_script_leading_whitespace.in @@ -0,0 +1,4 @@ +#! @builddir@/grub-shell-tester + +list=" 1 2 3" +echo $list diff --git a/tests/grub_script_no_commands.in b/tests/grub_script_no_commands.in new file mode 100644 index 000000000..c31d267e5 --- /dev/null +++ b/tests/grub_script_no_commands.in @@ -0,0 +1,21 @@ +#! /bin/sh +set -e + +# grub-script-check refuses to pass a file with no commands; this usually +# indicates a bug in the code generating that file. + +@builddir@/grub-script-check <. + +true +echo $? + +! true +echo $? + +false +echo $? + +! false +echo $? + +# +# Negated forms (copied from grub_script_if.in) +# + +#basic if, execute +if ! true; then echo yes; fi + +#basic if, no execution +if ! false; then echo no; fi + +#if else, execute if path +if ! true; then echo yes; else echo no; fi + +#if else, execute else path +if ! false; then echo no; else echo yes; fi + +#if elif, execute elif +if ! false; then echo no; elif ! true; then echo yes; fi + +#if elif else, execute else +if ! false; then echo no; elif ! false; then echo no; else echo yes; fi + +#if elif(1) elif(2), execute elif(2) +if false; then echo no; elif ! false; then echo no; elif ! true; then echo yes; fi + +#if elif(1) elif(2) else, execute else +if false; then echo no; elif false; then echo no; elif ! false; then echo no; else echo yes; fi + +#if {if elif else}, execute elif +if true; then if false; then echo no; elif ! true; then echo yes; else echo no; fi; fi + +#if {if elif} else, execute elif. ofcourse no dangling-else problem due to "fi" +if true; then if ! false; then echo no; elif true; then echo yes; fi; else echo no; fi diff --git a/tests/grub_script_return.in b/tests/grub_script_return.in new file mode 100644 index 000000000..712d1dfcf --- /dev/null +++ b/tests/grub_script_return.in @@ -0,0 +1,134 @@ +#! @builddir@/grub-shell-tester + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +function f1 { + return + echo one +} +f1 + +function f2 { + true + return + echo one +} +if f2; then echo true; else echo false; fi + +function f3 { + false + return + echo one +} +if f3; then echo true; else echo false; fi + +function f4 { + true + return 1; + echo one +} +if f4; then echo true; else echo false; fi + +function f5 { + false + return 0; + echo one +} +if f5; then echo true; else echo false; fi + +function f6 { + echo one + if true; then + echo two + return 0 + else + echo three + return 1 + fi + echo four +} +if f6; then echo true; else echo false; fi + +function f7 { + if return 1; then + echo one + else + echo no + fi +} +if f7; then echo true; else echo false; fi + +function f8 { + echo one + for v in 1 2 3 4 5; do + echo $v + if test $v = 3; then return 1; fi + done + echo two +} +if f8; then echo true; else echo false; fi + +function f9 { + x=1 + echo one + until test x = 11111111; do + echo $x + x="1$x" + if test $x = 1111; then return 0; fi + done + echo two +} +if f9; then echo true; else echo false; fi + +function f10 { + echo one + while return 0; do + echo two + done + echo three +} +if f10; then echo true; else echo false; fi + +function f11 { + f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10 +} +if f11; then echo true; else echo false; fi + +function f12 { + echo one + f11 + return 1 + echo two +} +if f12; then echo true; else echo false; fi + +function f13 { + echo one + f12 + echo two + return 0 +} +if f13; then echo true; else echo false; fi diff --git a/tests/grub_script_setparams.in b/tests/grub_script_setparams.in new file mode 100644 index 000000000..82d316813 --- /dev/null +++ b/tests/grub_script_setparams.in @@ -0,0 +1,59 @@ +#! @builddir@/grub-shell-tester + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +if test x$grubshell = xyes; then cmd=setparams; else cmd=set; fi + +function f1 { + echo $# + echo "$#" + + echo $@ + echo "$@" + + echo $* + echo "$*" + + echo $1 $2 + for v in "$@"; do echo $v; done + shift + echo $1 $2 + for v in "$@"; do echo $v; done + + $cmd 1 2 3 4 + + echo $# + echo "$#" + + echo $@ + echo "$@" + + echo $* + echo "$*" + + echo $1 $2 + for v in "$@"; do echo $v; done + shift + echo $1 $2 + for v in "$@"; do echo $v; done +} +# f1 +# f1 a +f1 a b +f1 a b c +f1 a b c d +f1 a b c d e diff --git a/tests/grub_script_shift.in b/tests/grub_script_shift.in new file mode 100644 index 000000000..785b9c396 --- /dev/null +++ b/tests/grub_script_shift.in @@ -0,0 +1,85 @@ +#! @builddir@/grub-shell-tester + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +function f1 { + echo f1 '$@' $@ + echo f1 '$*' $* + echo f1 $# $1 $2 $3 + shift + echo f1 '$@' $@ + echo f1 '$*' $* + echo f1 $# $1 $2 $3 +} + +f1 +f1 a +f1 a b +f1 a b c +f1 a b c d +f1 a b c d e + +function f2 { + echo f1 '$@' $@ + echo f1 '$*' $* + echo f2 $# $1 $2 $3 + shift 1 + echo f1 '$@' $@ + echo f1 '$*' $* + echo f2 $# $1 $2 $3 +} + +f2 +f2 a +f2 a b +f2 a b c +f2 a b c d +f2 a b c d e + +function f3 { + echo f1 '$@' $@ + echo f1 '$*' $* + echo f3 $# $1 $2 $3 + shift 3 + echo f1 '$@' $@ + echo f1 '$*' $* + echo f3 $# $1 $2 $3 +} + +f3 +f3 a +f3 a b +f3 a b c +f3 a b c d +f3 a b c d e + +function f4 { + echo f1 '$@' $@ + echo f1 '$*' $* + echo f4 $# $1 $2 $3 + shift 100 + echo f1 '$@' $@ + echo f1 '$*' $* + echo f4 $# $1 $2 $3 +} + +f4 +f4 a +f4 a b +f4 a b c +f4 a b c d +f4 a b c d e diff --git a/tests/grub_script_strcmp.in b/tests/grub_script_strcmp.in new file mode 100644 index 000000000..721549ced --- /dev/null +++ b/tests/grub_script_strcmp.in @@ -0,0 +1,22 @@ +#! @builddir@/grub-shell-tester +# +# Copyright (C) 2012 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +LC_ALL=C +export LC_ALL + +if [ "z" "<" "â" ]; then echo unsigned; else echo signed; fi +if [ "z" ">" "â" ]; then echo signed; else echo unsigned; fi diff --git a/tests/grub_script_test.in b/tests/grub_script_test.in new file mode 100644 index 000000000..34a5f141d --- /dev/null +++ b/tests/grub_script_test.in @@ -0,0 +1,15 @@ +#! @builddir@/grub-shell-tester + +for device in 'hd0' 'fd0'; do + # But search them if their search has been inforced + set fd0search="no" + if [ "$device" != "fd0" -a "$device" != "cd" \ + -o \ + "$device" = "fd0" -a "$fd0search" = "yes" ]\ + ; then + echo "Yes" + else + echo "No" + fi + +done \ No newline at end of file diff --git a/tests/grub_script_vars1.in b/tests/grub_script_vars1.in new file mode 100644 index 000000000..77b3cf298 --- /dev/null +++ b/tests/grub_script_vars1.in @@ -0,0 +1,34 @@ +#! @builddir@/grub-shell-tester + +# Run GRUB script in a Qemu instance +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +var=foo +echo $var +echo "$var" +echo ${var} +echo "${var}" + +echo $1 $2 $? + +foo=foo +echo "" $foo + +echo $bar $foo + +bar="" +echo $bar $foo + diff --git a/tests/grub_script_while1.in b/tests/grub_script_while1.in new file mode 100644 index 000000000..554247f76 --- /dev/null +++ b/tests/grub_script_while1.in @@ -0,0 +1,32 @@ +#! @builddir@/grub-shell-tester + +echo one +foo="" +while test "$foo" != "1111"; do foo="${foo}1"; echo "$foo"; done + +echo two +foo="" +while test "$foo" != "aaaa" +do + foo="${foo}a" + echo $foo +done + +foo="" +until test "$foo" = "1111"; do foo="${foo}1"; echo $foo; done +foo="" +until test "$foo" = "aaaa" +do + foo="${foo}a" + echo $foo +done + +# check "$?" in condition gets its value from while body commands +foo="" +false +while test "$?" != "0" +do + echo $foo + foo="${foo}1" + test "$foo" = "111111" +done diff --git a/tests/gzcompress_test.in b/tests/gzcompress_test.in new file mode 100644 index 000000000..11b6bb208 --- /dev/null +++ b/tests/gzcompress_test.in @@ -0,0 +1,29 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +if ! which gzip >/dev/null 2>&1; then + echo "gzip not installed; cannot test gzip compression." + exit 77 +fi + +if [ "$(echo hello | "${grubshell}" --mkrescue-arg=--compress=gz)" != "Hello World" ]; then + exit 1 +fi diff --git a/tests/hddboot_test.in b/tests/hddboot_test.in new file mode 100644 index 000000000..c229716a6 --- /dev/null +++ b/tests/hddboot_test.in @@ -0,0 +1,37 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: emu is different + *-emu) + exit 0;; + # PLATFORM: Flash targets + i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips) + exit 0;; + # FIXME: currently grub-shell uses only -kernel for loongson + mipsel-loongson) + exit 0;; +esac + +if [ "$(echo hello | "${grubshell}" --boot=hd)" != "Hello World" ]; then + exit 1 +fi + diff --git a/tests/help_test.in b/tests/help_test.in new file mode 100644 index 000000000..e780924ef --- /dev/null +++ b/tests/help_test.in @@ -0,0 +1,16 @@ +#! /bin/bash +set -e + +. "@builddir@/grub-core/modinfo.sh" + +template="Usage: help [PATTERN ...] +Show a help message. + +-h, --help Display this help and exit. +-u, --usage Display the usage of this command and exit. +Hello World" +outpu="$(echo 'help help; hello' | @builddir@/grub-shell)" + +if [ "$template" != "$outpu" ]; then + exit 1 +fi diff --git a/tests/hfs_test.in b/tests/hfs_test.in new file mode 100644 index 000000000..e3e88f190 --- /dev/null +++ b/tests/hfs_test.in @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.hfs >/dev/null 2>&1; then + echo "mkfs.hfs not installed; cannot test HFS." + exit 77 +fi + +if ! modprobe mac-roman; then + echo "no mac-roman support; cannot test HFS." + exit 77 +fi + +"@builddir@/grub-fs-tester" hfs diff --git a/tests/hfsplus_test.in b/tests/hfsplus_test.in new file mode 100644 index 000000000..f947c4a44 --- /dev/null +++ b/tests/hfsplus_test.in @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.hfsplus >/dev/null 2>&1; then + echo "mkfs.hfsplus not installed; cannot test hfsplus." + exit 77 +fi + +"@builddir@/grub-fs-tester" hfsplus +"@builddir@/grub-fs-tester" hfsplus_casesens +"@builddir@/grub-fs-tester" hfsplus_wrap diff --git a/tests/iso9660_test.in b/tests/iso9660_test.in new file mode 100644 index 000000000..fdcc9e124 --- /dev/null +++ b/tests/iso9660_test.in @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +if ! which xorriso >/dev/null 2>&1; then + echo "xorriso not installed; cannot test iso9660." + exit 77 +fi + +"@builddir@/grub-fs-tester" joliet +"@builddir@/grub-fs-tester" rockridge +"@builddir@/grub-fs-tester" rockridge_joliet +"@builddir@/grub-fs-tester" joliet_1999 +"@builddir@/grub-fs-tester" rockridge_1999 +"@builddir@/grub-fs-tester" rockridge_joliet_1999 \ No newline at end of file diff --git a/tests/jfs_test.in b/tests/jfs_test.in new file mode 100644 index 000000000..c2e5ecedd --- /dev/null +++ b/tests/jfs_test.in @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.jfs >/dev/null 2>&1; then + echo "mkfs.jfs not installed; cannot test JFS." + exit 77 +fi + +"@builddir@/grub-fs-tester" jfs diff --git a/tests/lib/unit_test.c b/tests/lib/unit_test.c new file mode 100644 index 000000000..6adfd9922 --- /dev/null +++ b/tests/lib/unit_test.c @@ -0,0 +1,42 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +#include +#include + +int +main (int argc __attribute__ ((unused)), + char *argv[] __attribute__ ((unused))) +{ + int status = 0; + + grub_test_t test; + + grub_unit_test_init (); + FOR_LIST_ELEMENTS (test, grub_test_list) + status = grub_test_run (test) ? : status; + + grub_unit_test_fini (); + + exit (status); +} diff --git a/tests/lzocompress_test.in b/tests/lzocompress_test.in new file mode 100644 index 000000000..41984c254 --- /dev/null +++ b/tests/lzocompress_test.in @@ -0,0 +1,29 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +if ! which lzop >/dev/null 2>&1; then + echo "lzop not installed; cannot test lzo compression." + exit 77 +fi + +if [ "$(echo hello | "${grubshell}" --mkrescue-arg=--compress=lzo)" != "Hello World" ]; then + exit 1 +fi diff --git a/tests/minixfs_test.in b/tests/minixfs_test.in new file mode 100644 index 000000000..1784b1261 --- /dev/null +++ b/tests/minixfs_test.in @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.minix >/dev/null 2>&1; then + echo "mkfs.minix not installed; cannot test minixfs." + exit 77 +fi + +if ! mkfs.minix -h | grep -- -v > /dev/null; then + echo "mkfs.minix doesn't support minix2fs; cannot test minix*fs." + exit 77 +fi + +if ! mkfs.minix -h | grep -- -3 > /dev/null; then + echo "mkfs.minix doesn't support minix3fs; cannot test minix*fs." + exit 77 +fi + +if ! mkfs.minix -h | grep -- -B > /dev/null; then + echo "mkfs.minix doesn't support variable block size; cannot test minix*fs." + exit 77 +fi + +"@builddir@/grub-fs-tester" minix +"@builddir@/grub-fs-tester" minix2 +"@builddir@/grub-fs-tester" minix3 diff --git a/tests/netboot_test.in b/tests/netboot_test.in new file mode 100644 index 000000000..c757023d9 --- /dev/null +++ b/tests/netboot_test.in @@ -0,0 +1,45 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: emu is different + *-emu) + exit 0;; + # PLATFORM: Flash targets + i386-qemu | i386-coreboot | mips-qemu_mips | mipsel-qemu_mips) + exit 0;; + # FIXME: currently grub-shell uses only -kernel for loongson + mipsel-loongson) + exit 0;; + # FIXME: no rtl8139 support + i386-multiboot) + exit 0;; + # FIXME: We don't fully support netboot on ARC + *-arc) + exit 0;; + # FIXME: Many QEMU firmware have no netboot capability + *-efi | i386-ieee1275 | powerpc-ieee1275 | sparc64-ieee1275) + exit 0;; +esac + +if [ "$(echo hello | "${grubshell}" --boot=net)" != "Hello World" ]; then + exit 1 +fi diff --git a/tests/nilfs2_test.in b/tests/nilfs2_test.in new file mode 100644 index 000000000..780b60ec1 --- /dev/null +++ b/tests/nilfs2_test.in @@ -0,0 +1,18 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.nilfs2 >/dev/null 2>&1; then + echo "mkfs.nilfs2 not installed; cannot test nilfs2." + exit 77 +fi + +"@builddir@/grub-fs-tester" nilfs2 diff --git a/tests/ntfs_test.in b/tests/ntfs_test.in new file mode 100644 index 000000000..e25c6384a --- /dev/null +++ b/tests/ntfs_test.in @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.ntfs >/dev/null 2>&1; then + echo "mkfs.ntfs not installed; cannot test ntfs." + exit 77 +fi + +if ! which setfattr >/dev/null 2>&1; then + echo "setfattr not installed; cannot test ntfs." + exit 77 +fi + +"@builddir@/grub-fs-tester" ntfs +"@builddir@/grub-fs-tester" ntfscomp diff --git a/tests/ohci_test.in b/tests/ohci_test.in new file mode 100644 index 000000000..7fede6f26 --- /dev/null +++ b/tests/ohci_test.in @@ -0,0 +1,51 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: Don't mess with real devices when OS is active + *-emu) + exit 0;; + # FIXME: qemu gets bonito DMA wrong + mipsel-loongson) + exit 0;; + # PLATFORM: no USB on ARC and qemu-mips platforms + mips*-arc | mips*-qemu_mips) + exit 0;; + # FIXME: No native drivers are available for those + powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi) + exit 0;; +esac + +imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 +outfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + +echo "hello" > "$outfile" + +tar cf "$imgfile" "$outfile" + +if [ "$(echo "nativedisk; source '(usb0)/$outfile';" | "${grubshell}" --qemu-opts="-device pci-ohci -drive id=my_usb_disk,file=$imgfile,if=none -device usb-storage,drive=my_usb_disk" | tail -n 1)" != "Hello World" ]; then + rm "$imgfile" + rm "$outfile" + exit 1 +fi + +rm "$imgfile" +rm "$outfile" diff --git a/tests/partmap_test.in b/tests/partmap_test.in new file mode 100644 index 000000000..f8dc456fb --- /dev/null +++ b/tests/partmap_test.in @@ -0,0 +1,489 @@ +#! /bin/sh +set -e + +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +parted=parted +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +create_disk_image () { + name="$1" + size=$2 + rm -f "${name}" + dd if=/dev/zero of="${name}" bs=512 count=1 seek=$((size * 2048 - 1)) status=noxfer > /dev/null +} + +create_dfly_image () { + name="$1" + rm -f ${name} + + gunzip < "@srcdir@/tests/dfly-mbr-mbexample.mbr.img.gz" | dd of=${name} bs=1 seek=440 count=72 conv=notrunc > /dev/null + gunzip < "@srcdir@/tests/dfly-mbr-mbexample.dfly.img.gz" | dd of=${name} bs=512 seek=33 count=1 conv=notrunc > /dev/null +} + +check_output () { + outfile=$1 + shift + + for dsk in $@; do + if ! grep "($dsk)" "${outfile}" >/dev/null + then + echo "($dsk): disk/partiton not found" + exit 1 + fi + done +} + +list_parts () { + mod=$1; + shift; + imgfile="$1" + shift + outfile="$1" + shift + + echo ls | "${grubshell}" --disk="${imgfile}" \ + --modules=$mod | tr -d "\n\r" > "${outfile}" + cat "${outfile}" + echo +} + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + mips-qemu_mips | mipsel-qemu_mips | i386-qemu | i386-multiboot | i386-coreboot | mipsel-loongson) + disk=ata0 + ;; + powerpc-ieee1275) + disk=ieee1275//pci@80000000/mac-io@4/ata-3@20000/disk@0 + # FIXME: QEMU firmware has bugs which prevent it from accessing hard disk w/o recognised label. + exit 0 + ;; + sparc64-ieee1275) + disk=ieee1275//pci@1fe\,0/pci-ata@5/ide0@500/disk@0 + # FIXME: QEMU firmware has bugs which prevent it from accessing hard disk w/o recognised label. + exit 0 + ;; + i386-ieee1275) + disk=ieee1275/d + # FIXME: QEMU firmware has bugs which prevent it from accessing hard disk w/o recognised label. + exit 0 + ;; + mips-arc) + # FIXME: ARC firmware has bugs which prevent it from accessing hard disk w/o dvh disklabel. + exit 0 ;; + mipsel-arc) + disk=arc/scsi0/disk0/rdisk0 + ;; + arm*-efi) + disk=hd3 + ;; + *) + disk=hd0 + ;; +esac + +if ! which parted >/dev/null 2>&1; then + echo "parted not installed; cannot test partmap" + exit 77 +fi + +imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 +outfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + +# +# MSDOS partition types +# + +echo "Checking MSDOS partition types..." + +# 0 primary +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel msdos +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk + +# 1 primary +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 + +# 2 primary +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos2 + +# 3 primary +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M mkpart primary 20M 30M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos2 $disk,msdos3 + +# 4 primary +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos2 $disk,msdos3 $disk,msdos4 + +# 1 primary, 1 extended +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M mkpart extended 20M 100% +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 + +# 1 primary, 1 extended, 1 logical +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M mkpart extended 20M 100% mkpart logical 20M 30M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos5 + +# 1 primary, 1 extended, 2 logical +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M mkpart extended 20M 100% mkpart logical 20M 30M mkpart logical 30M 40M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos5 $disk,msdos6 + +# 1 primary, 1 extended, 3 logical +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M mkpart extended 20M 100% mkpart logical 20M 30M mkpart logical 30M 40M mkpart logical 40M 50M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos5 $disk,msdos6 $disk,msdos7 + +# 1 primary, 1 extended, 4 logical +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel msdos mkpart primary 0 10M mkpart primary 10M 20M mkpart extended 20M 100% mkpart logical 20M 30M mkpart logical 30M 40M mkpart logical 40M 50M mkpart logical 50M 60M +list_parts part_msdos "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos5 $disk,msdos6 $disk,msdos7 $disk,msdos8 + + +# +# GPT partition types +# + +echo "Checking GPT partition types..." + +# 0 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel gpt +list_parts part_gpt "${imgfile}" "${outfile}" +check_output "${outfile}" $disk + +# 1 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel gpt mkpart 1 0 10M +list_parts part_gpt "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,gpt1 + +# 2 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel gpt mkpart 1 0 10M mkpart 2 10M 20M +list_parts part_gpt "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,gpt1 $disk,gpt2 + +# 3 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel gpt mkpart 1 0 10M mkpart 2 10M 20M mkpart 3 20M 30M +list_parts part_gpt "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,gpt1 $disk,gpt2 $disk,gpt3 + +# 4 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel gpt mkpart 1 0 10M mkpart 2 10M 20M mkpart 4 20M 30M mkpart 5 30M 40M +list_parts part_gpt "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,gpt1 $disk,gpt2 $disk,gpt3 $disk,gpt4 + +# 5 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel gpt mkpart 1 0 10M mkpart 2 10M 20M mkpart 3 20M 30M mkpart 4 30M 40M mkpart 5 40M 50M +list_parts part_gpt "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,gpt1 $disk,gpt2 $disk,gpt3 $disk,gpt4 $disk,gpt5 + +# 6 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel gpt mkpart 1 0 10M mkpart 2 10M 20M mkpart 3 20M 30M mkpart 4 30M 40M mkpart 5 40M 50M mkpart 6 50M 60M +list_parts part_gpt "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,gpt1 $disk,gpt2 $disk,gpt3 $disk,gpt4 $disk,gpt5 $disk,gpt6 + + +# +# SUN partition types +# +# It seems partition #3 is reserved for whole disk by parted. +# + +echo "Checking SUN partition types..." + +# 0 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel sun +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk + +# 1 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel sun mkpart 0 10M +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,sun1 + +# 2 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel sun mkpart 0 10M mkpart 10M 20M +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,sun1 $disk,sun2 + +# 3 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel sun mkpart 0 10M mkpart 10M 20M mkpart 20M 30M +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,sun1 $disk,sun2 $disk,sun4 + +# 4 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel sun mkpart 0 10M mkpart 10M 20M mkpart 20M 30M mkpart 30M 40M +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,sun1 $disk,sun2 $disk,sun4 $disk,sun5 + +# 5 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel sun mkpart 0 10M mkpart 10M 20M mkpart 20M 30M mkpart 30M 40M mkpart 40M 50M +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,sun1 $disk,sun2 $disk,sun4 $disk,sun5 $disk,sun6 + +# 6 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel sun mkpart 0 10M mkpart 10M 20M mkpart 20M 30M mkpart 30M 40M mkpart 40M 50M mkpart 50M 60M +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,sun1 $disk,sun2 $disk,sun4 $disk,sun5 $disk,sun6 $disk,sun7 + +# 7 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel sun mkpart 0 10M mkpart 10M 20M mkpart 20M 30M mkpart 30M 40M mkpart 40M 50M mkpart 50M 60M mkpart 60M 70M +list_parts part_sun "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,sun1 $disk,sun2 $disk,sun4 $disk,sun5 $disk,sun6 $disk,sun7 $disk,sun8 + + +# +# Apple partition types +# +# Partition table itself is part of some partition, so there is always +# a partition by default. Furthermore free space is also a partition, +# so there is always at least 2 partitions +# + +echo "Checking APPLE partition types..." + +# 0 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel mac +list_parts part_apple "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,apple1 $disk,apple2 + +# 1 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel mac mkpart a 1M 10M +list_parts part_apple "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,apple1 $disk,apple2 $disk,apple3 + +# 2 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel mac mkpart a 1M 10M mkpart b 10M 20M +list_parts part_apple "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,apple1 $disk,apple2 $disk,apple3 $disk,apple4 + +# 3 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel mac mkpart a 1M 10M mkpart b 10M 20M mkpart c 20M 30M +list_parts part_apple "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,apple1 $disk,apple2 $disk,apple4 $disk,apple5 + +# 4 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel mac mkpart a 1M 10M mkpart b 10M 20M mkpart c 20M 30M mkpart d 30M 40M +list_parts part_apple "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,apple1 $disk,apple2 $disk,apple4 $disk,apple5 $disk,apple6 + +# 5 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel mac mkpart a 1M 10M mkpart b 10M 20M mkpart c 20M 30M mkpart d 30M 40M mkpart e 40M 50M +list_parts part_apple "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,apple1 $disk,apple2 $disk,apple4 $disk,apple5 $disk,apple6 $disk,apple7 + +# 6 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel mac mkpart a 1M 10M mkpart b 10M 20M mkpart c 20M 30M mkpart d 30M 40M mkpart e 40M 50M mkpart f 50M 60M +list_parts part_apple "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,apple1 $disk,apple2 $disk,apple4 $disk,apple5 $disk,apple6 $disk,apple7 $disk,apple8 + +# +# DVH partition types +# +# Partition #11 is reserved for whole disk by parted. +# Parted also aliases #9 as whole disk +# + +echo "Checking DVH partition types..." + +# 0 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel dvh +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk + +# 1 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 + +# 2 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 + +# 3 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 + +# 4 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 + +# 5 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 + +# 6 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 + +# 7 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 + +# 8 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M mkpart primary 70M 80M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 $disk,dvh8 + +# 9 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M mkpart primary 70M 80M mkpart primary 80M 90M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 $disk,dvh8 $disk,dvh10 + +# 10 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M mkpart primary 70M 80M mkpart primary 80M 90M mkpart primary 90M 100M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 $disk,dvh8 $disk,dvh10 $disk,dvh12 + +# 11 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M mkpart primary 70M 80M mkpart primary 80M 90M mkpart primary 90M 100M mkpart primary 100M 110M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 $disk,dvh8 $disk,dvh10 $disk,dvh12 $disk,dvh13 + +# 12 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M mkpart primary 70M 80M mkpart primary 80M 90M mkpart primary 90M 100M mkpart primary 100M 110M mkpart primary 110M 120M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 $disk,dvh8 $disk,dvh10 $disk,dvh12 $disk,dvh13 $disk,dvh14 + +# 13 parts +create_disk_image "${imgfile}" 135 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M mkpart primary 70M 80M mkpart primary 80M 90M mkpart primary 90M 100M mkpart primary 100M 110M mkpart primary 110M 120M mkpart primary 120M 130M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 $disk,dvh8 $disk,dvh10 $disk,dvh12 $disk,dvh13 $disk,dvh14 $disk,dvh15 + +# 14 parts +create_disk_image "${imgfile}" 145 +${parted} -a none -s "${imgfile}" mklabel dvh mkpart primary 3M 10M mkpart primary 10M 20M mkpart primary 20M 30M mkpart primary 30M 40M mkpart primary 40M 50M mkpart primary 50M 60M mkpart primary 60M 70M mkpart primary 70M 80M mkpart primary 80M 90M mkpart primary 90M 100M mkpart primary 100M 110M mkpart primary 110M 120M mkpart primary 120M 130M mkpart primary 130M 140M +list_parts part_dvh "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,dvh1 $disk,dvh2 $disk,dvh3 $disk,dvh4 $disk,dvh5 $disk,dvh6 $disk,dvh7 $disk,dvh8 $disk,dvh10 $disk,dvh12 $disk,dvh13 $disk,dvh14 $disk,dvh15 $disk,dvh16 + +echo "Checking AMIGA partition types..." + +# 0 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel amiga +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk + +# 1 parts +create_disk_image "${imgfile}" 64 +${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,amiga1 + +# 2 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M mkpart x 10M 20M +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,amiga1 $disk,amiga2 + +# 3 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M mkpart x 10M 20M mkpart x 20M 30M +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,amiga1 $disk,amiga2 $disk,amiga3 + +# 4 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M mkpart x 10M 20M mkpart x 20M 30M mkpart x 30M 40M +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,amiga1 $disk,amiga2 $disk,amiga3 $disk,amiga4 + +# 5 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M mkpart x 10M 20M mkpart x 20M 30M mkpart x 30M 40M mkpart x 40M 50M +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,amiga1 $disk,amiga2 $disk,amiga3 $disk,amiga4 $disk,amiga5 + +# 6 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M mkpart x 10M 20M mkpart x 20M 30M mkpart x 30M 40M mkpart x 40M 50M mkpart x 50M 60M +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,amiga1 $disk,amiga2 $disk,amiga3 $disk,amiga4 $disk,amiga5 $disk,amiga6 + +# 7 parts +create_disk_image "${imgfile}" 128 +${parted} -a none -s "${imgfile}" mklabel amiga mkpart x 0 10M mkpart x 10M 20M mkpart x 20M 30M mkpart x 30M 40M mkpart x 40M 50M mkpart x 50M 60M mkpart x 60M 70M +list_parts part_amiga "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,amiga1 $disk,amiga2 $disk,amiga3 $disk,amiga4 $disk,amiga5 $disk,amiga6 $disk,amiga7 + +# +# DragonFly BSD disklabel64 +# + +echo "Checking DragonFly BSD disklabel64..." + +create_dfly_image "${imgfile}" +list_parts part_dfly "${imgfile}" "${outfile}" +check_output "${outfile}" $disk $disk,msdos1 $disk,msdos1,dfly1 $disk,msdos1,dfly2 $disk,msdos1,dfly3 diff --git a/tests/pata_test.in b/tests/pata_test.in new file mode 100644 index 000000000..c1d0f63ea --- /dev/null +++ b/tests/pata_test.in @@ -0,0 +1,55 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +disk=hda +indisk=ata0 + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: Don't mess with real devices when OS is active + *-emu) + exit 0;; + # PLATFORM: no ATA on ARC platforms (they use SCSI) + *-arc) + exit 0;; + # FIXME: No native drivers are available for those + powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi) + exit 0;; + i386-ieee1275) + disk=hdb + indisk=ata1 + ;; +esac + +imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 +outfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + +echo "hello" > "$outfile" + +tar cf "$imgfile" "$outfile" + +if [ "$(echo "nativedisk; source '($indisk)/$outfile';" | "${grubshell}" --qemu-opts="-$disk $imgfile")" != "Hello World" ]; then + rm "$imgfile" + rm "$outfile" + exit 1 +fi + +rm "$imgfile" +rm "$outfile" diff --git a/tests/printf_unit_test.c b/tests/printf_unit_test.c new file mode 100644 index 000000000..d7b12c6db --- /dev/null +++ b/tests/printf_unit_test.c @@ -0,0 +1,74 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include + +#define MSG "printf test failed: %s, %s", real, expected + +static void +printf_test (void) +{ + char real[512]; + char expected[512]; + char *null = NULL; + + grub_snprintf (real, sizeof (real), "%s", null); + snprintf (expected, sizeof (expected), "%s", null); + grub_test_assert (strcmp (real, expected) == 0, MSG); + + grub_snprintf (real, sizeof (real), "%10s", null); + snprintf (expected, sizeof (expected), "%10s", null); + grub_test_assert (strcmp (real, expected) == 0, MSG); + + grub_snprintf (real, sizeof (real), "%-10s", null); + snprintf (expected, sizeof (expected), "%-10s", null); + grub_test_assert (strcmp (real, expected) == 0, MSG); + + grub_snprintf (real, sizeof (real), "%d%%", 10); + snprintf (expected, sizeof (expected), "%d%%", 10); + grub_test_assert (strcmp (real, expected) == 0, MSG); + + grub_snprintf (real, sizeof (real), "%d %%", 10); + snprintf (expected, sizeof (expected), "%d %%", 10); + grub_test_assert (strcmp (real, expected) == 0, MSG); + + grub_snprintf (real, sizeof (real), "%%"); + snprintf (expected, sizeof (expected), "%%"); + grub_test_assert (strcmp (real, expected) == 0, MSG); + + grub_snprintf (real, sizeof (real), "%d %d %d", 1, 2, 3); + snprintf (expected, sizeof (expected), "%d %d %d", 1, 2, 3); + grub_test_assert (strcmp (real, expected) == 0, MSG); + grub_snprintf (real, sizeof (real), "%3$d %2$d %1$d", 1, 2, 3); + snprintf (expected, sizeof (expected), "%3$d %2$d %1$d", 1, 2, 3); + grub_test_assert (strcmp (real, expected) == 0, MSG); + grub_snprintf (real, sizeof (real), "%d %lld %d", 1, 2LL, 3); + snprintf (expected, sizeof (expected), "%d %lld %d", 1, 2LL, 3); + grub_test_assert (strcmp (real, expected) == 0, MSG); + grub_snprintf (real, sizeof (real), "%3$d %2$lld %1$d", 1, 2LL, 3); + snprintf (expected, sizeof (expected), "%3$d %2$lld %1$d", 1, 2LL, 3); + grub_test_assert (strcmp (real, expected) == 0, MSG); + grub_snprintf (real, sizeof (real), "%%0%dd ", 1); + snprintf (expected, sizeof (expected), "%%0%dd ", 1); + grub_test_assert (strcmp (real, expected) == 0, MSG); +} + +GRUB_UNIT_TEST ("printf_unit_test", printf_test); diff --git a/tests/priority_queue_unit_test.cc b/tests/priority_queue_unit_test.cc new file mode 100644 index 000000000..bb0060e5e --- /dev/null +++ b/tests/priority_queue_unit_test.cc @@ -0,0 +1,105 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +using namespace std; + +static int +compar (const void *a_, const void *b_) +{ + int a = *(int *) a_; + int b = *(int *) b_; + if (a < b) + return -1; + if (a > b) + return +1; + return 0; +} + +static void +priority_queue_test (void) +{ + priority_queue pq; + grub_priority_queue_t pq2; + int counter; + int s = 0; + pq2 = grub_priority_queue_new (sizeof (int), compar); + if (!pq2) + { + grub_test_assert (0, + "priority queue: queue creating failed\n"); + return; + } + srand (1); + + for (counter = 0; counter < 1000000; counter++) + { + int op = rand () % 10; + if (s && *(int *) grub_priority_queue_top (pq2) != pq.top ()) + { + printf ("Error at %d\n", counter); + grub_test_assert (0, + "priority queue: error at %d\n", counter); + return; + } + if (op < 3 && s) + { + grub_priority_queue_pop (pq2); + pq.pop (); + s--; + } + else + { + int v = rand (); + pq.push (v); + if (grub_priority_queue_push (pq2, &v) != 0) + { + grub_test_assert (0, + "priority queue: push failed"); + return; + } + s++; + } + } + while (s) + { + if (*(int *) grub_priority_queue_top (pq2) != pq.top ()) + { + grub_test_assert (0, + "priority queue: Error at the end. %d elements remaining.\n", s); + return; + } + grub_priority_queue_pop (pq2); + pq.pop (); + s--; + } + printf ("priority_queue: passed successfully\n"); +} + +GRUB_UNIT_TEST ("priority_queue_unit_test", priority_queue_test); diff --git a/tests/pseries_test.in b/tests/pseries_test.in new file mode 100644 index 000000000..226494593 --- /dev/null +++ b/tests/pseries_test.in @@ -0,0 +1,37 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" != powerpc-ieee1275 ]; then + exit 0 +fi + +if [ "$(echo hello | "${grubshell}" --pseries --timeout=180 --boot=cd)" != "Hello World" ]; then + exit 1 +fi + +if [ "$(echo hello | "${grubshell}" --pseries --timeout=180 --boot=hd)" != "Hello World" ]; then + exit 1 +fi + +# FIXME: workaround SLOF bugs +#if [ "$(echo hello | "${grubshell}" --pseries --timeout=180 --boot=net)" != "Hello World" ]; then +# exit 1 +#fi diff --git a/tests/reiserfs_test.in b/tests/reiserfs_test.in new file mode 100644 index 000000000..678efe7b3 --- /dev/null +++ b/tests/reiserfs_test.in @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.reiserfs >/dev/null 2>&1; then + echo "mkfs.reiserfs not installed; cannot test reiserfs." + exit 77 +fi + +"@builddir@/grub-fs-tester" reiserfs +"@builddir@/grub-fs-tester" reiserfs_old + diff --git a/tests/romfs_test.in b/tests/romfs_test.in new file mode 100644 index 000000000..83e09315a --- /dev/null +++ b/tests/romfs_test.in @@ -0,0 +1,10 @@ +#!/bin/sh + +set -e + +if ! which genromfs >/dev/null 2>&1; then + echo "genromfs not installed; cannot test romfs." + exit 77 +fi + +"@builddir@/grub-fs-tester" romfs diff --git a/tests/squashfs_test.in b/tests/squashfs_test.in new file mode 100644 index 000000000..ec34e0108 --- /dev/null +++ b/tests/squashfs_test.in @@ -0,0 +1,12 @@ +#!/bin/sh + +set -e + +if ! which mksquashfs >/dev/null 2>&1; then + echo "mksquashfs not installed; cannot test squashfs." + exit 77 +fi + +"@builddir@/grub-fs-tester" squash4_gzip +"@builddir@/grub-fs-tester" squash4_xz +"@builddir@/grub-fs-tester" squash4_lzo diff --git a/tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg b/tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg new file mode 100644 index 000000000..e69de29bb diff --git a/tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg b/tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg new file mode 100644 index 000000000..2e107fade --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg @@ -0,0 +1,52 @@ +menu hshift 9 +menu width 58 + +menu begin desktop + include stdmenu.cfg + menu hshift 13 + menu width 49 + menu label Alternative desktop environments + menu title Desktop environment menu + label mainmenu-kde + menu label ^Back.. + text help + Higher level options install the GNOME desktop environment + endtext + menu exit + menu begin kde-desktop + include stdmenu.cfg + menu label ^KDE + menu title KDE desktop boot menu + text help + Select the 'K Desktop Environment' for the Desktop task + endtext + label mainmenu-kde + menu label ^Back.. + menu exit + include kde/menu.cfg + menu end + menu begin lxde-desktop + include stdmenu.cfg + menu label ^LXDE + menu title LXDE desktop boot menu + text help + Select the 'Lightweight X11 Desktop Environment' for the Desktop task + endtext + label mainmenu-lxde + menu label ^Back.. + menu exit + include lxde/menu.cfg + menu end + menu begin xfce-desktop + include stdmenu.cfg + menu label ^Xfce + menu title Xfce desktop boot menu + text help + Select the 'Xfce lightweight desktop environment' for the Desktop task + endtext + label mainmenu-xfce + menu label ^Back.. + menu exit + include xfce/menu.cfg + menu end +menu end diff --git a/tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg b/tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg new file mode 100644 index 000000000..3119e654a --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg @@ -0,0 +1,3 @@ +label menu + kernel vesamenu.c32 + config isolinux.cfg diff --git a/tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg b/tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg new file mode 100644 index 000000000..b799cb5cb --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg @@ -0,0 +1,12 @@ +foreground=0xFFFFFF +background=0x958490 +screen-colour=0x270A1E +hidden-timeout=2 +label normal=Normal +append normal= +label driverupdates=Use driver update disc +append driverupdates=debian-installer/driver-update=true +applies driverupdates=live live-install +label oem=OEM install (for manufacturers) +append oem=oem-config/enable=true +applies oem=live live-install install diff --git a/tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg b/tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg new file mode 100644 index 000000000..fd9c333b2 --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg @@ -0,0 +1,6 @@ +# D-I config version 2.0 +include menu.cfg +default vesamenu.c32 +prompt 0 +timeout 50 +ui gfxboot bootlogo diff --git a/tests/syslinux/ubuntu10.04/isolinux/menu.cfg b/tests/syslinux/ubuntu10.04/isolinux/menu.cfg new file mode 100644 index 000000000..9f5607dea --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/menu.cfg @@ -0,0 +1,23 @@ +menu hshift 13 +menu width 49 +menu margin 8 + +menu title Installer boot menu +include stdmenu.cfg +include txt.cfg +include gtk.cfg +menu begin advanced + menu title Advanced options + include stdmenu.cfg + label mainmenu + menu label ^Back.. + menu exit + include adtxt.cfg + include adgtk.cfg +menu end +label help + menu label ^Help + text help + Display help screens; type 'menu' at boot prompt to return to this menu + endtext + config prompt.cfg diff --git a/tests/syslinux/ubuntu10.04/isolinux/po4a.cfg b/tests/syslinux/ubuntu10.04/isolinux/po4a.cfg new file mode 100644 index 000000000..75f67881c --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/po4a.cfg @@ -0,0 +1,3 @@ +[po4a_langs] ar bn ca cs da de es eu fi fr gl hu id it ja ka ko ku lv nb nl pl pt pt_BR ru sk sv ta tr vi zh_CN zh_TW +[po4a_paths] po/help.pot $lang:po/$lang.po +[type:docbook] help.xml diff --git a/tests/syslinux/ubuntu10.04/isolinux/prompt.cfg b/tests/syslinux/ubuntu10.04/isolinux/prompt.cfg new file mode 100644 index 000000000..f9984aedc --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/prompt.cfg @@ -0,0 +1,16 @@ +prompt 1 +display f1.txt +timeout 50 +include menu.cfg +include exithelp.cfg + +f1 f1.txt +f2 f2.txt +f3 f3.txt +f4 f4.txt +f5 f5.txt +f6 f6.txt +f7 f7.txt +f8 f8.txt +f9 f9.txt +f0 f10.txt diff --git a/tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg b/tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg new file mode 100644 index 000000000..bdf6231ae --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg @@ -0,0 +1,4 @@ +label rescue + menu label ^Rescue mode + kernel /install/vmlinuz + append vga=788 initrd=/install/initrd.gz rescue/enable=true -- quiet diff --git a/tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg b/tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg new file mode 100644 index 000000000..671b16f78 --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg @@ -0,0 +1,15 @@ +menu background splash.png +menu color title * #FFFFFFFF * +menu color border * #00000000 #00000000 none +menu color sel * #ffffffff #76a1d0ff * +menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff * +menu color tabmsg * #ffffffff #00000000 * +menu color help 37;40 #ffdddd00 #00000000 none +menu vshift 12 +menu rows 10 +menu helpmsgrow 15 +# The command line must be at least one line from the bottom. +menu cmdlinerow 16 +menu timeoutrow 16 +menu tabmsgrow 18 +menu tabmsg Press ENTER to boot or TAB to edit a menu entry diff --git a/tests/syslinux/ubuntu10.04/isolinux/txt.cfg b/tests/syslinux/ubuntu10.04/isolinux/txt.cfg new file mode 100644 index 000000000..860daad80 --- /dev/null +++ b/tests/syslinux/ubuntu10.04/isolinux/txt.cfg @@ -0,0 +1,19 @@ +default live +label live + menu label ^Try Ubuntu without installing + kernel /casper/vmlinuz + append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- +label live-install + menu label ^Install Ubuntu + kernel /casper/vmlinuz + append file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splash -- +label check + menu label ^Check disc for defects + kernel /casper/vmlinuz + append boot=casper integrity-check initrd=/casper/initrd.lz quiet splash -- +label memtest + menu label Test ^memory + kernel /install/mt86plus +label hd + menu label ^Boot from first hard disk + localboot 0x80 diff --git a/tests/syslinux/ubuntu10.04_grub.cfg.in b/tests/syslinux/ubuntu10.04_grub.cfg.in new file mode 100644 index 000000000..846e4acf0 --- /dev/null +++ b/tests/syslinux/ubuntu10.04_grub.cfg.in @@ -0,0 +1,236 @@ + background_image '@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux'/'splash.png' +# D-I config version 2.0 + # UNSUPPORTED command 'menu hshift 13' + # UNSUPPORTED command 'menu width 49' + # UNSUPPORTED command 'menu margin 8' + + # UNSUPPORTED command 'menu title Installer boot menu' + # UNSUPPORTED command 'menu color title * #FFFFFFFF *' + # UNSUPPORTED command 'menu color border * #00000000 #00000000 none' + # UNSUPPORTED command 'menu color sel * #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color tabmsg * #ffffffff #00000000 *' + # UNSUPPORTED command 'menu color help 37;40 #ffdddd00 #00000000 none' + # UNSUPPORTED command 'menu vshift 12' + # UNSUPPORTED command 'menu rows 10' + # UNSUPPORTED command 'menu helpmsgrow 15' +# The command line must be at least one line from the bottom. + # UNSUPPORTED command 'menu cmdlinerow 16' + # UNSUPPORTED command 'menu timeoutrow 16' + # UNSUPPORTED command 'menu tabmsgrow 18' + # UNSUPPORTED command 'menu tabmsg Press ENTER to boot or TAB to edit a menu entry' +set timeout=5 + default='vesamenu.c32' +menuentry 'Try Ubuntu without installing' --hotkey 't' --id 'live' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Install Ubuntu' --hotkey 'i' --id 'live-install' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Check disc for defects' --hotkey 'c' --id 'check' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' boot=casper integrity-check initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Test memory' --hotkey 'm' --id 'memtest' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/install/mt86plus' +} +menuentry 'Boot from first hard disk' --hotkey 'b' --id 'hd' { +# File (host)/@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/gtk.cfg not found + # UNSUPPORTED command 'menu begin advanced' + # UNSUPPORTED command 'menu title Advanced options' + # UNSUPPORTED command 'menu color title * #FFFFFFFF *' + # UNSUPPORTED command 'menu color border * #00000000 #00000000 none' + # UNSUPPORTED command 'menu color sel * #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color tabmsg * #ffffffff #00000000 *' + # UNSUPPORTED command 'menu color help 37;40 #ffdddd00 #00000000 none' + # UNSUPPORTED command 'menu vshift 12' + # UNSUPPORTED command 'menu rows 10' + # UNSUPPORTED command 'menu helpmsgrow 15' +# The command line must be at least one line from the bottom. + # UNSUPPORTED command 'menu cmdlinerow 16' + # UNSUPPORTED command 'menu timeoutrow 16' + # UNSUPPORTED command 'menu tabmsgrow 18' + # UNSUPPORTED command 'menu tabmsg Press ENTER to boot or TAB to edit a menu entry' + root=hd0; + chainloader +1; +} +menuentry 'Back..' --hotkey 'b' --id 'mainmenu' { + # UNSUPPORTED command 'menu exit' +# File (host)/@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/adgtk.cfg not found + # UNSUPPORTED command 'menu end' + # UNSUPPORTED entry type 0 +true; +} +menuentry 'Help' --hotkey 'h' --id 'help' { + # UNSUPPORTED command 'ui gfxboot bootlogo' +#'@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux'/'prompt.cfg' (host)@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/prompt.cfg: + background_image '@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/'/'splash.png' + # UNSUPPORTED command 'display f1.txt' + # UNSUPPORTED command 'menu hshift 13' + # UNSUPPORTED command 'menu width 49' + # UNSUPPORTED command 'menu margin 8' + + # UNSUPPORTED command 'menu title Installer boot menu' + # UNSUPPORTED command 'menu color title * #FFFFFFFF *' + # UNSUPPORTED command 'menu color border * #00000000 #00000000 none' + # UNSUPPORTED command 'menu color sel * #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color tabmsg * #ffffffff #00000000 *' + # UNSUPPORTED command 'menu color help 37;40 #ffdddd00 #00000000 none' + # UNSUPPORTED command 'menu vshift 12' + # UNSUPPORTED command 'menu rows 10' + # UNSUPPORTED command 'menu helpmsgrow 15' +# The command line must be at least one line from the bottom. + # UNSUPPORTED command 'menu cmdlinerow 16' + # UNSUPPORTED command 'menu timeoutrow 16' + # UNSUPPORTED command 'menu tabmsgrow 18' + # UNSUPPORTED command 'menu tabmsg Press ENTER to boot or TAB to edit a menu entry' +set timeout=5 + default='live' +menuentry 'Try Ubuntu without installing' --hotkey 't' --id 'live' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Install Ubuntu' --hotkey 'i' --id 'live-install' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Check disc for defects' --hotkey 'c' --id 'check' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' boot=casper integrity-check initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Test memory' --hotkey 'm' --id 'memtest' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/install/mt86plus' +} +menuentry 'Boot from first hard disk' --hotkey 'b' --id 'hd' { +# File (host)/@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux//gtk.cfg not found + # UNSUPPORTED command 'menu begin advanced' + # UNSUPPORTED command 'menu title Advanced options' + # UNSUPPORTED command 'menu color title * #FFFFFFFF *' + # UNSUPPORTED command 'menu color border * #00000000 #00000000 none' + # UNSUPPORTED command 'menu color sel * #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color tabmsg * #ffffffff #00000000 *' + # UNSUPPORTED command 'menu color help 37;40 #ffdddd00 #00000000 none' + # UNSUPPORTED command 'menu vshift 12' + # UNSUPPORTED command 'menu rows 10' + # UNSUPPORTED command 'menu helpmsgrow 15' +# The command line must be at least one line from the bottom. + # UNSUPPORTED command 'menu cmdlinerow 16' + # UNSUPPORTED command 'menu timeoutrow 16' + # UNSUPPORTED command 'menu tabmsgrow 18' + # UNSUPPORTED command 'menu tabmsg Press ENTER to boot or TAB to edit a menu entry' + root=hd0; + chainloader +1; +} +menuentry 'Back..' --hotkey 'b' --id 'mainmenu' { + # UNSUPPORTED command 'menu exit' +# File (host)/@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux//adgtk.cfg not found + # UNSUPPORTED command 'menu end' + # UNSUPPORTED entry type 0 +true; +} +menuentry 'Help' --hotkey 'h' --id 'help' { +#'@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/'/'prompt.cfg' (host)@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/prompt.cfg: + syslinux_configfile -r '/'/'/' -c '@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/'/'' '@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/'/'prompt.cfg' +} +menuentry 'menu' --id 'menu' { + # UNSUPPORTED command 'f1 f1.txt' + # UNSUPPORTED command 'f2 f2.txt' + # UNSUPPORTED command 'f3 f3.txt' + # UNSUPPORTED command 'f4 f4.txt' + # UNSUPPORTED command 'f5 f5.txt' + # UNSUPPORTED command 'f6 f6.txt' + # UNSUPPORTED command 'f7 f7.txt' + # UNSUPPORTED command 'f8 f8.txt' + # UNSUPPORTED command 'f9 f9.txt' + # UNSUPPORTED command 'f0 f10.txt' +#'@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/'/'isolinux.cfg' (host)@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg: + background_image '@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux//'/'splash.png' +# D-I config version 2.0 + # UNSUPPORTED command 'menu hshift 13' + # UNSUPPORTED command 'menu width 49' + # UNSUPPORTED command 'menu margin 8' + + # UNSUPPORTED command 'menu title Installer boot menu' + # UNSUPPORTED command 'menu color title * #FFFFFFFF *' + # UNSUPPORTED command 'menu color border * #00000000 #00000000 none' + # UNSUPPORTED command 'menu color sel * #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color tabmsg * #ffffffff #00000000 *' + # UNSUPPORTED command 'menu color help 37;40 #ffdddd00 #00000000 none' + # UNSUPPORTED command 'menu vshift 12' + # UNSUPPORTED command 'menu rows 10' + # UNSUPPORTED command 'menu helpmsgrow 15' +# The command line must be at least one line from the bottom. + # UNSUPPORTED command 'menu cmdlinerow 16' + # UNSUPPORTED command 'menu timeoutrow 16' + # UNSUPPORTED command 'menu tabmsgrow 18' + # UNSUPPORTED command 'menu tabmsg Press ENTER to boot or TAB to edit a menu entry' +set timeout=5 + default='vesamenu.c32' +menuentry 'Try Ubuntu without installing' --hotkey 't' --id 'live' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Install Ubuntu' --hotkey 'i' --id 'live-install' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Check disc for defects' --hotkey 'c' --id 'check' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/casper/vmlinuz' boot=casper integrity-check initrd=/casper/initrd.lz quiet splash -- + initrd$linux_suffix '/'/'/casper/initrd.lz' +} +menuentry 'Test memory' --hotkey 'm' --id 'memtest' { + if test x$grub_platform = xpc; then linux_suffix=16; else linux_suffix= ; fi + linux$linux_suffix '/'/'/install/mt86plus' +} +menuentry 'Boot from first hard disk' --hotkey 'b' --id 'hd' { +# File (host)/@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux///gtk.cfg not found + # UNSUPPORTED command 'menu begin advanced' + # UNSUPPORTED command 'menu title Advanced options' + # UNSUPPORTED command 'menu color title * #FFFFFFFF *' + # UNSUPPORTED command 'menu color border * #00000000 #00000000 none' + # UNSUPPORTED command 'menu color sel * #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *' + # UNSUPPORTED command 'menu color tabmsg * #ffffffff #00000000 *' + # UNSUPPORTED command 'menu color help 37;40 #ffdddd00 #00000000 none' + # UNSUPPORTED command 'menu vshift 12' + # UNSUPPORTED command 'menu rows 10' + # UNSUPPORTED command 'menu helpmsgrow 15' +# The command line must be at least one line from the bottom. + # UNSUPPORTED command 'menu cmdlinerow 16' + # UNSUPPORTED command 'menu timeoutrow 16' + # UNSUPPORTED command 'menu tabmsgrow 18' + # UNSUPPORTED command 'menu tabmsg Press ENTER to boot or TAB to edit a menu entry' + root=hd0; + chainloader +1; +} +menuentry 'Back..' --hotkey 'b' --id 'mainmenu' { + # UNSUPPORTED command 'menu exit' +# File (host)/@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux///adgtk.cfg not found + # UNSUPPORTED command 'menu end' + # UNSUPPORTED entry type 0 +true; +} +menuentry 'Help' --hotkey 'h' --id 'help' { + # UNSUPPORTED command 'ui gfxboot bootlogo' +#'@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux//'/'prompt.cfg' (host)@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/prompt.cfg: + syslinux_configfile -r '/'/'/' -c '@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux//'/'' '@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux//'/'prompt.cfg' +} +} +} diff --git a/tests/syslinux_test.in b/tests/syslinux_test.in new file mode 100644 index 000000000..fc4edd8ef --- /dev/null +++ b/tests/syslinux_test.in @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +outfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + +"@builddir@/grub-syslinux2cfg" -r "@abs_top_srcdir@/tests/syslinux/ubuntu10.04" "@abs_top_srcdir@/tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg" -o "$outfile" + +echo "$outfile" + +if ! diff -u "$outfile" "@builddir@/tests/syslinux/ubuntu10.04_grub.cfg"; then + echo "Mismatch in ubuntu10.04" + exit 1; +fi + +exit 0 diff --git a/tests/tar_test.in b/tests/tar_test.in new file mode 100644 index 000000000..46ba3bce2 --- /dev/null +++ b/tests/tar_test.in @@ -0,0 +1,10 @@ +#!/bin/sh + +set -e + +if ! which tar >/dev/null 2>&1; then + echo "tar not installed; cannot test tar." + exit 77 +fi + +"@builddir@/grub-fs-tester" tarfs diff --git a/tests/test_sha512sum.in b/tests/test_sha512sum.in new file mode 100644 index 000000000..d5ef7f9ea --- /dev/null +++ b/tests/test_sha512sum.in @@ -0,0 +1,36 @@ +#! /bin/bash + +# create a randome file +file="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 +cat >$file <$outfile1 <$outfile2 + +SHA1=`cat $outfile1 | tr -d '\n' | cut -f1 -d\ ` +SHA2=`cat $outfile2 | cut -f1 -d\ ` + +if test "$SHA1" = "$SHA2"; then + rm -f ${outfile1} ${outfile2} + exit 0 +else + echo "GRUB sha512sum output did not match sha512sum output." + echo "See diff -u ${outfile1} ${outfile2}" + exit 1 +fi diff --git a/tests/test_unset.in b/tests/test_unset.in new file mode 100644 index 000000000..30f1a255c --- /dev/null +++ b/tests/test_unset.in @@ -0,0 +1,10 @@ +#! @builddir@/grub-shell-tester + +foo=one +echo $foo + +unset foo +echo $foo +echo ${foo} + + diff --git a/tests/udf_test.in b/tests/udf_test.in new file mode 100644 index 000000000..fe244e2bd --- /dev/null +++ b/tests/udf_test.in @@ -0,0 +1,19 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkudffs >/dev/null 2>&1; then + echo "mkudffs not installed; cannot test UDF." + exit 77 +fi + +"@builddir@/grub-fs-tester" udf + diff --git a/tests/uhci_test.in b/tests/uhci_test.in new file mode 100644 index 000000000..89e2c1805 --- /dev/null +++ b/tests/uhci_test.in @@ -0,0 +1,51 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + # PLATFORM: Don't mess with real devices when OS is active + *-emu) + exit 0;; + # FIXME: qemu gets bonito DMA wrong + mipsel-loongson) + exit 0;; + # PLATFORM: no USB on ARC and qemu-mips platforms + mips*-arc | mips*-qemu_mips) + exit 0;; + # FIXME: No native drivers are available for those + powerpc-ieee1275 | sparc64-ieee1275 | arm*-efi) + exit 0;; +esac + +imgfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 +outfile="`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"`" || exit 1 + +echo "hello" > "$outfile" + +tar cf "$imgfile" "$outfile" + +if [ "$(echo "nativedisk; source '(usb0)/$outfile';" | "${grubshell}" --qemu-opts="-usb -usbdevice disk:$imgfile" | tail -n 1)" != "Hello World" ]; then + rm "$imgfile" + rm "$outfile" + exit 1 +fi + +rm "$imgfile" +rm "$outfile" diff --git a/tests/util/grub-fs-tester.in b/tests/util/grub-fs-tester.in new file mode 100644 index 000000000..2337771a1 --- /dev/null +++ b/tests/util/grub-fs-tester.in @@ -0,0 +1,1525 @@ +#!/bin/bash + +set -e + +fs="$1" + +GRUBFSTEST="@builddir@/grub-fstest" + +tempdir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + +# This wrapper is to ease insertion of valgrind or time statistics +run_it () { + LC_ALL=C "$GRUBFSTEST" "$@" +} + +run_grubfstest () { + run_it -c $NEED_IMAGES_N "${NEED_IMAGES[@]}" "$@" +} + +# OS LIMITATION: GNU/Linux has no AFS support, so we use a premade image and a reference tar file. I.a. no multiblocksize test + +MINLOGSECSIZE=9 +MAXLOGSECSIZE=9 +case x"$fs" in + xntfs*) + MINLOGSECSIZE=8 + MAXLOGSECSIZE=12;; + xvfat*|xmsdos*) + MINLOGSECSIZE=9 + # OS LIMITATION: It could go up to 32768 but Linux rejects sector sizes > 4096 + MAXLOGSECSIZE=12;; + xext*) + MINLOGSECSIZE=8 + MAXLOGSECSIZE=12;; + xbtrfs*) + MINLOGSECSIZE=8 + # OS LIMITATION: It could go up to 32768 but Linux rejects sector sizes > 4096 + MAXLOGSECSIZE=12;; + xxfs) + MINLOGSECSIZE=9 + # OS LIMITATION: GNU/Linux doesn't accept > 4096 + MAXLOGSECSIZE=12;; + xxfs_crc) + MINLOGSECSIZE=9 + # OS LIMITATION: GNU/Linux doesn't accept > 1024 + MAXLOGSECSIZE=10;; + xzfs*) + # OS LIMITATION: zfs-fuse hangs when creating zpool with sectors <=256B. + MINLOGSECSIZE=9 + # OS LIMITATION: zfs-fuse fails with >= 32K sectors. + # OS limitation: zfs-fuse always uses ashift=9 with loop devices + MAXLOGSECSIZE=9;; +esac +for ((LOGSECSIZE=MINLOGSECSIZE;LOGSECSIZE<=MAXLOGSECSIZE;LOGSECSIZE=LOGSECSIZE + 1)); do + SECSIZE="$((1 << LOGSECSIZE))" + MINBLKSIZE=512 + MAXBLKSIZE=512 + BLKSTEP=0 + case x"$fs" in + xntfs*) + MINBLKSIZE=$SECSIZE + MAXBLKSIZE=65536 + if [ x"$SECSIZE" = x256 ]; then + MINBLKSIZE=512 + MAXBLKSIZE=32768 + fi + ;; + xvfat* | xmsdos*) + MINBLKSIZE=$SECSIZE + MAXBLKSIZE=$((128*SECSIZE)) + ;; + xexfat*) + MINBLKSIZE=$SECSIZE + # It could go further but it requires more and more space + MAXBLKSIZE=8286208 + ;; + xhfs) + MINBLKSIZE=512 + # OS LIMITATION: should be 1048576 but linux hangs on unmnount with + # >= 524288 + MAXBLKSIZE=262144 + ;; + xhfsplus | xhfsplus_casesens | xhfsplus_wrap) + MINBLKSIZE=512 + MAXBLKSIZE=1048576 + ;; + xnilfs2) + # nilfs2 supports blocksizes from 1024 to 4096 + # but non-4096 results in kernel oops in some cases, + # avoid it. + MINBLKSIZE=4096 + MAXBLKSIZE=4096 + ;; + xsfs*) + MINBLKSIZE=512 + MAXBLKSIZE=4096 + ;; + xaffs | xaffs_intl) + MINBLKSIZE=512 + MAXBLKSIZE=4096 + ;; + xreiserfs*) + MINBLKSIZE=512 + # OS LIMITATION: 8192 isn't supported. + MAXBLKSIZE=4096 + ;; + x"mdraid"*) + MINBLKSIZE=4096 + # OS LIMITATION: Linux oopses with >=32768K + MAXBLKSIZE=$((16384*1024)) + ;; + x"lvm_raid1"* | x"lvm_raid4" | x"lvm_raid5" | x"lvm_raid6") + # OS LIMITATION: Linux crashes with less than 16384 + MINBLKSIZE=16384 + # Could go further but what's the point? + MAXBLKSIZE=$((65536*1024)) + ;; + x"lvm_mirrorall") + MINBLKSIZE=2048 + # Could go further but what's the point? + MAXBLKSIZE=$((65536*1024)) + ;; + x"lvm_mirror1") + MINBLKSIZE=4096 + # Could go further but what's the point? + MAXBLKSIZE=$((65536*1024)) + ;; + x"lvm_stripe") + MINBLKSIZE=4096 + # Could go further but what's the point? + MAXBLKSIZE=$((65536*1024)) + ;; + x"lvm"*) + MINBLKSIZE=1024 + # Could go further but what's the point? + MAXBLKSIZE=$((65536*1024)) + ;; + xext*) + MINBLKSIZE=1024 + if [ $MINBLKSIZE -lt $SECSIZE ]; then + MINBLKSIZE=$SECSIZE + fi + MAXBLKSIZE=4096 + ;; + xsquash*) + MINBLKSIZE=4096 + MAXBLKSIZE=1048576;; + xxfs) + MINBLKSIZE=$SECSIZE + # OS Limitation: GNU/Linux doesn't accept > 4096 + MAXBLKSIZE=4096;; + xxfs_crc) + # OS Limitation: GNU/Linux doesn't accept != 1024 + MINBLKSIZE=1024 + MAXBLKSIZE=1024;; + xudf) + MINBLKSIZE=1024 + MAXBLKSIZE=4096;; + xbfs) + MINBLKSIZE=1024 + MAXBLKSIZE=8192;; + xufs*) + MINBLKSIZE=4096 + # OS Limitation: Linux rejects 65536 blocks. + MAXBLKSIZE=32768;; + xminix3) + # OS LIMITATION: Linux rejects non-power-of-two blocks. + # OS LIMITATION: Linux rejects > 4096. + MINBLKSIZE=1024 + MAXBLKSIZE=4096;; + esac + for ((BLKSIZE=MINBLKSIZE;BLKSIZE<=MAXBLKSIZE;BLKSIZE=BLKSTEP?BLKSIZE+BLKSTEP:2*BLKSIZE)); do + MAXDEVICES=1 + MINDEVICES=1 + export fs + case x"$fs" in + x"zfs_raidz" | x"zfs_stripe" | x"zfs_mirror" | xbtrfs_raid0 \ + | xbtrfs_raid1 | x"mdraid"*"_raid4" | x"mdraid"*"_raid5" \ + | x"mdraid"*"_linear" \ + | x"mdraid"*"_raid10" | xlvm_raid1* | xlvm_mirror1 | xlvm_mirrorall) + MINDEVICES=2 + MAXDEVICES=7 + ;; + xbtrfs_raid10) + MINDEVICES=4 + MAXDEVICES=7 + ;; + x"zfs_raidz2"| xlvm_raid5 | xlvm_raid4) + MINDEVICES=3 + MAXDEVICES=7;; + x"zfs_raidz3" | x"mdraid"*"_raid6") + MINDEVICES=4 + MAXDEVICES=7;; + xlvm_raid6) + MINDEVICES=5 + MAXDEVICES=7;; + x"mdraid"*"_raid0" | x"mdraid"*"_raid1" | x"lvm" | xlvm_stripe) + MINDEVICES=1 + MAXDEVICES=7;; + esac + + for ((NDEVICES=MINDEVICES; NDEVICES <= MAXDEVICES; NDEVICES++)); do + export NDEVICES + unset FSIMAGES + for ((i=0; i < NDEVICES; i++)); do + FSIMAGES[i]="${tempdir}/${fs}_${SECSIZE}_${BLKSIZE}_${NDEVICES}_$i.img" + done + export FSIMAGES + unset NEED_IMAGES; + + case x$fs in + # RAID 1 has to work with even one device of the set. + xzfs_mirror | x"mdraid"*"_raid1" | xlvm_mirrorall | xlvm_raid1all) + NEED_IMAGES_N=1;; + # Degrade raidz by removing 3 devices + xzfs_raidz3) + NEED_IMAGES_N=$((NDEVICES-3));; + # Degrade raidz by removing 2 devices + xzfs_raidz2 | x"mdraid"*"_raid6" | x"lvm_raid6") + NEED_IMAGES_N=$((NDEVICES-2));; + # Degrade raidz and btrfs RAID1 by removing one device + xbtrfs_raid1 | xbtrfs_raid10 | xzfs_raidz | x"mdraid"*"_raid4" \ + | x"mdraid"*"_raid5" | x"mdraid"*"_raid10" | xlvm_mirror1 \ + | x"lvm_raid1" | x"lvm_raid4" | x"lvm_raid5") + NEED_IMAGES_N=$((NDEVICES-1));; + *) + NEED_IMAGES_N=$NDEVICES;; + esac + for ((i=0;i < NEED_IMAGES_N; i++)); do + NEED_IMAGES[i]="${FSIMAGES[i]}"; + done + export NEED_IMAGES_N + export NEED_IMAGES + + MNTPOINTRO="${tempdir}/${fs}_ro" + MNTPOINTRW="${tempdir}/${fs}_rw" + MOUNTOPTS="" + MOUNTFS="$fs" + MASTER="${tempdir}/master" + FSLABEL="grub_;/testé莭莽茝😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfew" + CFILESN=1 + if test -f /usr/share/dict/american-english; then + CFILESSRC[0]="/usr/share/dict/american-english" + else + CFILESSRC[0]="/usr/share/dict/linux.words" + fi + case x"$fs" in + # FS LIMITATION: 8.3 names + xmsdos*) + CFILES[0]="american.eng";; + xiso9660) + CFILES[0]="american_english";; + *) + CFILES[0]="american-english";; + esac + # OS LIMITATION: Limited by NAME_MAX (usually 255) in GNU/Linux + LONGNAME="qwertzuiopasdfghjklyxcvbnm1234567890qwertzuiopasdfghjklyxcvbnm1234567890oiewqfiewioqoiqoiurqruewqoiuwoieoiiuewqroreqiufieiuwrnureweriuvceoiroiewqoiricdsalkcndsakfirefoiwqeoircorejwoijfreoijojoiewjfwnfcoirenfoirefnreoifenoiwfnoi" + rm -rf "$MASTER" + + case x"$fs" in + # FS LIMITATION: HFS+ label is at most 255 UTF-16 chars + # OS LIMITATION: Linux HFS+ tools check UTF-8 length and don't + # handle out-of-BMP characters + x"hfsplus" | x"hfsplus_casesens" | x"hfsplus_wrap") + FSLABEL="grub_;/testé䏌䐓䏕киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoiq" + ;; + # FS LIMITATION: btrfs label is at most 255 UTF-8 chars + x"btrfs"*) + FSLABEL="grub_;/testé莭莽😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoi";; + + # FS LIMITATION: exfat is at most 15 UTF-16 chars + x"exfat") + FSLABEL="géт ;/莭莽😁кир";; + # FS LIMITATION: ntfs label is at most ?? UTF-16 chars + x"ntfs"*) + FSLABEL="grub_;/testéтi u莭😁茝кириrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvniwnivrewiuvcrewvnuewvrrrewniureifiuewifjiww";; + # FS LIMITATION: nilfs2 label is at most 80 UTF-8 characters + x"nilfs2") + FSLABEL="grub_;/testéтi u😁莽茝кириrewfceniuewruevrewnuuireurevueurnievrewfne";; + # FS LIMITATION: afs and iso9660 label is at most 32 UTF-8 characters + x"afs" | xiso9660 | xrockridge | xrockridge_joliet\ + | xiso9660_1999 | xrockridge_1999 | xrockridge_joliet_1999) + FSLABEL="gr_;/é莭莽😁кирит u";; + # FS LIMITATION: bfs label is at most 32 UTF-8 characters + # OS LIMITATION: bfs label can't contain ; or / + x"bfs") + FSLABEL="grub_é莭莽😁кирит u";; + # FS LIMITATION: Joliet label is at most 16 UTF-16 characters + # OS LIMITATION: xorriso doesn't handle out-of-BMP characters + xjoliet | xjoliet_1999) + FSLABEL="g;/_é䏌䐓䏕䎛䎾䏴кит u" + #FSLABEL="g;/_é莭莽😁кит u" + ;; + # FS LIMITATION: reiserfs, extN and jfs label is at most 16 UTF-8 characters + x"reiserfs_old" | x"reiserfs" | x"ext"* | x"lvm"* | x"mdraid"* | x"jfs" | x"jfs_caseins") + FSLABEL="g;/éт 莭😁";; + # FS LIMITATION: No underscore, space, semicolon, slash or international characters in UFS* in label. Limited to 32 UTF-8 characters + x"ufs1" | x"ufs1_sun" | x"ufs2") + FSLABEL="grubtest""ieurrucnenreeiurueurewf";; + # FS LIMITATION: XFS label is at most 12 UTF-8 characters + x"xfs"|x"xfs_crc") + FSLABEL="géт 😁к";; + # FS LIMITATION: FAT labels limited to 11 characters, no international characters or lowercase + x"vfat"* | xmsdos*) + FSLABEL="GRUBTEST ;_";; + # FS LIMITATION: AFFS is latin1. At most 29 characters + x"affs" | xaffs_intl) + FSLABEL="grub_tt? #*w;/e£@¡¤½¾{[]}<>.,";; + # FS LIMITATION: SFS is latin1. At most 30 characters + x"sfs"*) + FSLABEL="GRUB tt öäüé;/àèç åø¿ª©þð׫»µ¬";; + # FS LIMITATION: HFS is Mac-Roman. At most 27 characters + x"hfs") + FSLABEL="grub_t;/estéàèèéie fiucnree";; + # FS LIMITATION: UDF label is either up to 127 latin1 characters or 63 UTF-16 ones + # OS LIMITATION: Linux UDF tools force ASCII label ... + x"udf") + FSLABEL="grub_;/testurewfceniuewruevrewnuuireurevueurnievr";; + # FS LIMITATION: ZFS doesn't accept non-ASCII in label + # FIXME: since this is used as a path component for mount it's very limited in length + xzfs_* | xzfs) + FSLABEL="grub_testieufiue r";; + esac + case x"$fs" in + xmdraid*) + DISKSIZE=314572800;; + xlvm*) + LVMBLKMUL=$(((5800 * 1048576) / (8 * BLKSIZE * NDEVICES))) + DISKSIZE=$((8*BLKSIZE*LVMBLKMUL));; + # FS LIMITATION: some fs have disk size limit + x"vfat12" | xmsdos12) + DISKSIZE=$((4000*BLKSIZE));; + x"vfat12a" | xmsdos12a) + if [ $BLKSIZE -ge 2048 ]; then + DISKSIZE=$((2500*BLKSIZE)) + else + DISKSIZE=$((3000*BLKSIZE)) + fi + if [ $DISKSIZE -gt $((60000*SECSIZE)) ]; then + DISKSIZE=$((60000*SECSIZE)) + fi;; + x"vfat16" | xmsdos16) + DISKSIZE=$((65000*BLKSIZE));; + x"vfat16a" | xmsdos16a) + DISKSIZE=$((60000*SECSIZE)) + ;; + *) + DISKSIZE=10737418240;; + esac + + if [ $DISKSIZE -ge $(((5800/NDEVICES)*1048576)) ]; then + DISKSIZE=$(((5800/NDEVICES)*1048576)) + fi + + case x"$fs" in + xvfat* | xmsdos* | xexfat* | xhfs | xhfsplus | xhfsplus_wrap | xaffs \ + | xaffs_intl | xjfs_caseins | xsfs_caseins \ + | xzfs_caseins | xiso9660) + CASESENS=n;; + *) + CASESENS=y;; + esac + + BIGBLOCKCNT=$((5000 * 1048576)) + case x"$fs" in + # FS LIMITATION: small filesystems + x"vfat12" | xmsdos12) + if [ $BLKSIZE -le 4096 ]; then + BIGBLOCKCNT=0 + elif [ $BLKSIZE = 8192 ]; then + BIGBLOCKCNT=1500000 + else + BIGBLOCKCNT=$((2000*BLKSIZE)) + fi + ;; + x"vfat12a" | xmsdos12a) + if [ $BLKSIZE -le 4096 ] || [ $((128*SECSIZE)) = $BLKSIZE ]; then + BIGBLOCKCNT=0 + else + BIGBLOCKCNT=700000 + fi;; + x"vfat16a" | xmsdos16a) + if [ $((128*SECSIZE)) = $BLKSIZE ]; then + BIGBLOCKCNT=0 + else + BIGBLOCKCNT=$((2500*SECSIZE)) + fi + ;; + x"vfat16" | xmsdos16) + BIGBLOCKCNT=$((25000 * BLKSIZE)) + if [ $BIGBLOCKCNT -gt $((16#ffffffff)) ]; then + BIGBLOCKCNT=$((16#ffffffff)) + fi + ;; + x"minix") + BIGBLOCKCNT=30000000;; + + xexfat) + # Big blocks waste really a lot of space. + # Not much is left. + if [ $BLKSIZE = 2097152 ]; then + BIGBLOCKCNT=4500000000 + fi + if [ $BLKSIZE = 4194304 ]; then + BIGBLOCKCNT=3500000000 + fi + ;; + # FS LIMITATION: romfs image is limited to 4G. + x"romfs") + BIGBLOCKCNT=$((4000 * 1048576));; + # FS LIMITATION: These FS have uint32 as file size field + x"vfat"* | xmsdos* | x"cpio_crc" | x"cpio_newc" | x"cpio_bin" | x"cpio_hpbin" | xsfs*) + BIGBLOCKCNT=$((16#ffffffff));; + # FS LIMITATION: These FS have int32 as file size field + # FIXME: not so sure about AFFS + # OS LIMITATION: minix2/minix3 could be formatted in a way to permit more. + x"minix3" | x"minix2" | x"hfs"| x"affs" | xaffs_intl | xreiserfs_old | xext2_old) + BIGBLOCKCNT=$((16#7fffffff));; + + # FS LIMITATION: redundant storage + # We have only limited space. Mirroring multiplies it very effectively. + xmdraid* | xlvm* | xzfs_mirror | xbtrfs_raid1) + BIGBLOCKCNT=$((100 * 1048576));; + # We already test the FS for big files separately. Save some time here. + x"zfs_raid"* | x"zfs_stripe"* | x"zfs_mirror"* | x"btrfs_raid"*) + BIGBLOCKCNT=$((100 * 1048576));; + + # OS LIMITATION: bfs_fuse bugs beyond that + xbfs) + BIGBLOCKCNT=$((800 * 1048576));; + esac + + NOSYMLINK=n + case x"$fs" in + # FS LIMITATION: no symlinks on FAT, exFAT, HFS, plain ISO9660 and Joliet + # OS LIMITATION: ntfs-3g creates interix symlinks which aren't real symlinks + x"vfat"* | xmsdos* | x"hfs" | x"exfat" | x"ntfs"* \ + | xiso9660 | xjoliet| xiso9660_1999 | xjoliet_1999) + NOSYMLINK=y;; + esac + NOHARDLINK=n + case x"$fs" in + # FS LIMITATION: no hardlinks on BFS, exfat, fat, hfs and SFS + xbfs | xexfat | x"vfat"* | xmsdos* | xhfs | xsfs | xsfs_caseins) + NOHARDLINK=y;; + # GRUB LIMITATION: no hardlink support on newc and hfs+ + xcpio_crc | xcpio_newc | xhfsplus*) + NOHARDLINK=y;; + esac + + # FS LIMITATION: some filesystems limit file name size + case x"$fs" in + x"cpio_ustar") + LONGNAME="`echo $LONGNAME |head -c 99`";; + x"hfs") + LONGNAME="`echo $LONGNAME |head -c 31`";; + x"minix" | x"minix2" | x"affs" | xaffs_intl | xiso9660) + LONGNAME="`echo $LONGNAME |head -c 30`";; + x"sfs"*) + LONGNAME="`echo $LONGNAME |head -c 105`";; + x"minix3") + LONGNAME="`echo $LONGNAME |head -c 60`";; + x"udf") + LONGNAME="`echo $LONGNAME |head -c 192`";; + # GRUB LIMITATION: GRUB prefers Joliet over ISO9660:1999 + xjoliet | xjoliet_1999) + LONGNAME="`echo $LONGNAME |head -c 103`";; + xiso9660_1999) + LONGNAME="`echo $LONGNAME |head -c 207`";; + # FS LIMITATION: 8.3 + xmsdos*) + LONGNAME="qwertzui.opa";; + esac + NOFILETIME=n + NOFSTIME=n + case x"$fs" in + # FIXME: Not sure about BtrFS, NTFS, JFS, AFS, UDF and SFS. Check it. + # FS LIMITATION: as far as I know those FS don't store their last modification date. + x"jfs_caseins" | x"jfs" | x"xfs" | x"xfs_crc" | x"btrfs"* | x"reiserfs_old" | x"reiserfs" \ + | x"bfs" | x"afs" \ + | x"tarfs" | x"cpio_"* | x"minix" | x"minix2" \ + | x"minix3" | x"ntfs"* | x"udf" | x"sfs"*) + NOFSTIME=y;; + # OS LIMITATION: Linux doesn't update fstime. + # OS LIMITATION: Linux apparently uses localtime instead of UTC + xhfs) + NOFILETIME=y; NOFSTIME=y;; + # GRUB LIMITATION: FAT and exFAT use localtime. Unusable for GRUB + x"vfat"* | x"msdos"* | x"exfat") + NOFILETIME=y; NOFSTIME=y;; + # FS LIMITATION: romfs has no timestamps. + x"romfs") + NOFILETIME=y; NOFSTIME=y;; + esac + + NOFSLABEL=n + case x"$fs" in + # FS LIMITATION: these filesystems have no label. + x"cpio_"* | x"tarfs" | x"squash4_"* | x"minix" | x"minix2" \ + | x"minix3" | xreiserfs_old) + NOFSLABEL=y;; + esac + + PDIRCOMPNUM=210 + PDIR2COMPNUM=210 + + case x$fs in + # OS LIMITATION: bfs_fuse bugs beyond that + xbfs) + PDIRCOMPNUM=10 + PDIR2COMPNUM=10;; + # OS LIMITATION: Linux supports only inline symlinks + xudf) + if [ $BLKSIZE = 1024 ]; then + PDIR2COMPNUM=113 + fi ;; + # FS LIMITATION: at most 255 on path length + # FS LIMITATION: at most 100 on symlink length + xcpio_ustar) + PDIRCOMPNUM=84 + PDIR2COMPNUM=30;; + # OS LIMITATION: Linux supports only symlink at most one block long on reiserfs + xreiserfs | xreiserfs_old) + if [ $BLKSIZE = 512 ]; then + PDIR2COMPNUM=114 + fi ;; + # FS LIMITATION: SFS assumes that symlink + # with header fit in one block. + # FIXME: not sure about it. + xsfs | xsfs_caseins) + if [ $BLKSIZE = 512 ]; then + PDIR2COMPNUM=147 + fi ;; + # FS LIMITATION: AFFS assumes that symlink + # with rather larger header fit in one block. + # FIXME: not sure about it. + xaffs | xaffs_intl) + if [ $BLKSIZE = 512 ]; then + PDIR2COMPNUM=97 + fi ;; + esac + + + PDIR="" + # OS LIMITATION: Limited by PATH_MAX (usually 1024) + for ((i=0;i /dev/null + LODEVICES[i]=`losetup -f` + losetup "${LODEVICES[i]}" "${FSIMAGES[i]}" + done ;; + esac + + MOUNTDEVICE="${LODEVICES[0]}" + case x"$fs" in + x"afs") + ;; + x"btrfs") + "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${LODEVICES[0]}" ;; + x"btrfs_zlib" | x"btrfs_lzo") + "mkfs.btrfs" -s $SECSIZE -L "$FSLABEL" "${LODEVICES[0]}" + MOUNTOPTS="compress=${fs/btrfs_/}," + MOUNTFS="btrfs" + ;; + x"btrfs_raid0") + "mkfs.btrfs" -s $SECSIZE -d raid0 -m raid0 -L "$FSLABEL" "${LODEVICES[@]}" + MOUNTFS="btrfs" + ;; + x"btrfs_raid1") + "mkfs.btrfs" -s $SECSIZE -d raid1 -m raid1 -L "$FSLABEL" "${LODEVICES[@]}" + MOUNTFS="btrfs" + ;; + x"btrfs_raid10") + "mkfs.btrfs" -s $SECSIZE -d raid10 -m raid10 -L "$FSLABEL" "${LODEVICES[@]}" + MOUNTFS="btrfs" + ;; + x"btrfs_single") + "mkfs.btrfs" -s $SECSIZE -d single -L "$FSLABEL" "${LODEVICES[@]}" + MOUNTFS="btrfs" + ;; + x"exfat") + "mkfs.$fs" -s $((BLKSIZE/512)) -n "$FSLABEL" "${LODEVICES[0]}" + MOUNTOPTS="iocharset=utf8," + MOUNTFS="exfat-fuse";; + x"minix") + "mkfs.minix" "${LODEVICES[0]}" + ;; + # mkfs.hfs and mkfs.hfsplus don't fill UUID. + x"hfsplus") + "mkfs.hfsplus" -b $BLKSIZE -v "$FSLABEL" "${LODEVICES[0]}" + dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#468)) conv=notrunc count=8 ;; + x"hfsplus_wrap") + "mkfs.hfsplus" -w -b $BLKSIZE -v "$FSLABEL" "${LODEVICES[0]}" + dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#468)) conv=notrunc count=8 + MOUNTFS="hfsplus";; + x"hfsplus_casesens") + "mkfs.hfsplus" -s -b $BLKSIZE -v "$FSLABEL" "${LODEVICES[0]}" + dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#468)) conv=notrunc count=8 + MOUNTFS="hfsplus";; + x"hfs") + "mkfs.hfs" -b $BLKSIZE -v "`echo $FSLABEL |recode utf8..macroman`" -h "${LODEVICES[0]}" + dd if=/dev/urandom of="${LODEVICES[0]}" bs=1 seek=$((16#474)) conv=notrunc count=8 + MOUNTOPTS="iocharset=utf8,codepage=macroman," + ;; + x"vfat"*|xmsdos*) + BITS="${fs/vfat/}" + BITS="${BITS/msdos/}" + if [ "x${BITS:2:1}" = xa ]; then + A=-A + else + A= + fi + "mkfs.vfat" -a $A -S $SECSIZE -s $((BLKSIZE/SECSIZE)) -F "${BITS:0:2}" -n "$FSLABEL" "${FSIMAGES[0]}" + MOUNTOPTS="iocharset=utf8,codepage=437," + MOUNTFS="$(echo "$fs"|sed 's,[0-9]*a\?$,,')";; + x"minix2") + "mkfs.minix" -v "${LODEVICES[0]}" + MOUNTFS="minix";; + x"minix3") + "mkfs.minix" -B $BLKSIZE -3 "${LODEVICES[0]}" + MOUNTFS="minix";; + x"ntfs"*) + "mkfs.ntfs" -s "$SECSIZE" -c "$BLKSIZE" -L "$FSLABEL" -Q -q "${LODEVICES[0]}" + MOUNTOPTS="iocharset=utf8,compression," + MOUNTFS="ntfs-3g";; + x"udf") + "mkudffs" --utf8 -b $BLKSIZE --lvid="$FSLABEL" "${LODEVICES[0]}" + MOUNTOPTS="iocharset=utf8,bs=$BLKSIZE,";; + x"ufs2") + "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 2 "${LODEVICES[0]}" + MOUNTOPTS="ufstype=ufs2," + MOUNTFS="ufs";; + x"ufs1") + "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${LODEVICES[0]}" + MOUNTOPTS="ufstype=44bsd," + MOUNTFS="ufs";; + x"ufs1_sun") + "mkfs.ufs" -b $BLKSIZE -L "$FSLABEL" -O 1 "${LODEVICES[0]}" + MOUNTOPTS="ufstype=sun," + MOUNTFS="ufs";; + x"zfs") + "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[0]}" + sleep 1 + "zfs" create "$FSLABEL"/"grub fs" + sleep 1;; + x"zfs_caseins") + "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[0]}" + sleep 1 + "zfs" create -o casesensitivity=insensitive "$FSLABEL"/"grub fs" + sleep 1;; + x"zfs_lzjb" | xzfs_gzip | xzfs_zle) + "zpool" create -O compression=${fs/zfs_/} -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[0]}" + sleep 1 + "zfs" create -o compression=${fs/zfs_/} "$FSLABEL"/"grub fs" + sleep 1;; + x"zfs_raidz") + "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz1 "${LODEVICES[@]}" + sleep 1 + "zfs" create "$FSLABEL"/"grub fs" + sleep 1;; + x"zfs_raidz2") + "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz2 "${LODEVICES[@]}" + sleep 1 + "zfs" create "$FSLABEL"/"grub fs" + sleep 1;; + x"zfs_raidz3") + "zpool" create -R "$MNTPOINTRW" "$FSLABEL" raidz3 "${LODEVICES[@]}" + sleep 1 + "zfs" create "$FSLABEL"/"grub fs" + sleep 1;; + x"zfs_mirror") + "zpool" create -R "$MNTPOINTRW" "$FSLABEL" mirror "${LODEVICES[@]}" + sleep 1 + "zfs" create "$FSLABEL"/"grub fs" + sleep 1;; + x"zfs_stripe") + "zpool" create -R "$MNTPOINTRW" "$FSLABEL" "${LODEVICES[@]}" + sleep 1 + "zfs" create "$FSLABEL"/"grub fs" + sleep 1;; + x"tarfs" | x"cpio_"* | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 | xrockridge_joliet_1999 | x"ziso9660" | x"romfs" | x"squash4_"*) + INSTDEVICE=/dev/null;; + x"reiserfs") + "mkfs.reiserfs" --format=3.6 -b $BLKSIZE -l "$FSLABEL" -q "${LODEVICES[0]}" ;; + x"reiserfs_old") + "mkfs.reiserfs" --format=3.5 -b $BLKSIZE -l "$FSLABEL" -q "${LODEVICES[0]}" + MOUNTFS=reiserfs;; + x"jfs") + "mkfs.jfs" -L "$FSLABEL" -q "${LODEVICES[0]}" + MOUNTOPTS="iocharset=utf8,";; + x"jfs_caseins") + "mkfs.jfs" -O -L "$FSLABEL" -q "${LODEVICES[0]}" + MOUNTFS=jfs + MOUNTOPTS="iocharset=utf8,";; + x"mdraid"*) + mdadm -C --chunk=$((BLKSIZE/1024)) --force -e "${fs:6:1}.${fs:7:1}" "/dev/md/${fs}_${NDEVICES}" --level="${fs:13}" --raid-devices="$NDEVICES" "${LODEVICES[@]}" + MOUNTDEVICE="/dev/md/${fs}_${NDEVICES}" + MOUNTFS=ext2 + "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}" ;; + x"lvm"*) + for ((i=0;i^{_}[]\`|~." + case x"$fs" in + + # FS LIMITATION: AFFS and SFS don't accept : + xsfs*) + NASTYFILE=".?*\\!\"#%@\$%&'()+ ,-.;<=>^{_}[]\`|~.";; + # FS LIMITATION: AFFS is limited in file name length (30) + x"affs" | xaffs_intl) + NASTYFILE=".?*\\!\"#@\$'()+ ,-;<=>^{_}[]\`|~.";; + # FS LIMITATION: hfs, minix and minix2 are limited in file name length (30 or 31) + x"hfs" | x"minix" | x"minix2") + NASTYFILE=".?*\\!\"#@\$&'()+ ,-:;<=>{}[]\`|~.";; + # FS LIMITATION: FAT doesn't accept ?, *, \, ", :, <, >, | + # FS LIMITATION: FAT discards dots at the end. + x"vfat"* | x"exfat") + NASTYFILE=".!#%@\$%&'()+ ,-.;=^{_}[]\`~";; + # FS LIMITATION: 8.3 limitations apply + x"msdos"*) + NASTYFILE="!#%@\$%&.;=^";; + # FS LIMITATION: No ' ', '*', '/', ':', ';', '?', '\\' in joliet + # GRUB LIMITATION: GRUB prefers Joliet over ISO9660:1999 + xjoliet | xjoliet_1999) + NASTYFILE=".!\"#%@\$%&'()+,-.<=>^{_}[]\`|~.";; + # FS LIMITATION: iso9660 accepts only [0-9A-Z_]*, 32 characters at most + xiso9660) + NASTYFILE="0123456789_acefghijknopqrvwxyz";; + esac + + case x"$fs" in + # FS LIMITATION: HFS, AFFS and SFS use legacy codepage (mac-roman or latin1) + x"sfs"* | x"hfs" | x"affs" | xaffs_intl) + IFILE="éàèüöäëñ" + ISYM="ëñéüöäàè" + ;; + # FS LIMITATION: filename length limitation. + x"minix" | x"minix2") + IFILE="éàèüö😁ñкиΕλκά" + ISYM="Ελκάкиéà😁öäëñ" + ;; + xminix3) + IFILE="éàèüöäëñкирица莭茝Ελλικά😁😜😒" + ISYM="Ελλικά😁😜😒莭茝кирицаéàèüöäëñ";; + # GRUB LIMITATION: HFS+ uses NFD. GRUB doesn't handle NF conversion. + # OS LIMITATION: Linux doesn't handle out-of-BMP characters for UTF-16 + x"hfsplus" | x"hfsplus_casesens" | x"hfsplus_wrap") + IFILE="éàèüöäëñкирилица䏌䐓䏕Ελληνικα̍䏌䐓䏕" + ISYM="Ελληνικα̍кирилица䏌䐓䏕éàèüöäëñ䏌䐓䏕" + ;; + # GRUB LIMITATION: On case-insensitive ZFS isn't supported with non-uppercase characters + xzfs_caseins) + IFILE="ÉÀÈÜÖÄËÑКИРИЛИЦА莭莽茝ΕΛΛΗΝΙΚΆ😁😜😒" + ISYM="ΕΛΛΗΝΙΚΆКИРИЛИЦА😁😜😒ÉÀÈÜÖÄËÑ莭莽茝";; + # FS LIMITATION: 8.3 CP437 + x"msdos"*) + IFILE="éàèüöäëñ.éàè" + ;; + # FS LIMITATION: iso9660 is ASCII-only. + x"iso9660") + IFILE="abcdefghijkmmnop" + ;; + # OS LIMITATION: Linux doesn't handle out-of-BMP characters for UTF-16 + # OS LIMITATION: xorriso doesn't handle out-of-BMP characters + xjoliet | xjoliet_1999 | x"vfat"* | x"jfs"* | x"udf"*) + IFILE="éàèüöäëñкирилица䏌䐓䏕Ελληνικά䏌䐓䏕" + ISYM="Ελληνικάкирилица䏌䐓䏕éàèüöäëñ䏌䐓䏕";; + *) + IFILE="éàèüöäëñкирилица莭莽茝Ελληνικά😁😜😒" + ISYM="Ελληνικάкирилица😁😜😒éàèüöäëñ莭莽茝";; + esac + BIGFILE="big.img" + BASESYM="sym" + BASEHARD="hard" + SSYM="///sdir////ssym" + USYM="///sdir////usym" + LONGSYM="longsym" + PSYM="psym" + OSDIR="" + GRUBDEVICE=loop0 + case x"$fs" in + xmdraid*) + GRUBDEVICE="mduuid/`mdadm --detail --export $MOUNTDEVICE | grep MD_UUID=|sed 's,MD_UUID=,,g;s,:,,g'`";; + xlvm*) + GRUBDEVICE="lvm/grub_test-testvol";; + esac + GRUBDIR="($GRUBDEVICE)" + case x"$fs" in + x"zfs"*) + OSDIR="grub fs/" + GRUBDIR="($GRUBDEVICE)/grub fs@";; + x"tarfs" | x"cpio_"* | x"iso9660" | xjoliet | xrockridge | xrockridge_joliet | x"iso9660_1999" | xjoliet_1999 | xrockridge_1999 | xrockridge_joliet_1999 | x"ziso9660" | x"romfs" | x"squash4_"* | xafs) + ;; + *) + if ! mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRW" -o ${MOUNTOPTS}${SELINUXOPTS}rw ; then + echo "MOUNT FAILED." + for ((i=0; i < NDEVICES; i++)); do + while ! losetup -d "${LODEVICES[i]}"; do + sleep 1 + done + rm "${FSIMAGES[i]}" + done + exit 1; + fi + ;; + esac + case x"$fs" in + # FS LIMITATION: redundant storage + xmdraid* | xlvm*) + BLOCKCNT=1048576;; + x"zfs_raid"* | x"zfs_stripe"* | x"zfs_mirror"* | x"btrfs_raid"*) + BLOCKCNT=1048576;; + + # FS LIMITATION: small filesystems + x"vfat16a" | x"msdos16a") + BLOCKCNT=65536;; + x"vfat12a" | xmsdos12a) + BLOCKCNT=32768;; + xminix) + BLOCKCNT=2621440;; + xvfat16 | xmsdos16) + if [ $BLKSIZE = 512 ] || [ $BLKSIZE = 1024 ]; then + BLOCKCNT=1048576 + else + BLOCKCNT=5242880 + fi + ;; + xvfat12 | xmsdos12) + BLOCKCNT=$((100*BLKSIZE)) + if [ $BLOCKCNT -gt 5242880 ]; then + BLOCKCNT=5242880; + fi + ;; + *) + BLOCKCNT=5242880;; + esac + # Make sure file is not exact multiple of block size. This helps to force + # tail packing in case of squash4. + : $((BLOCKCNT--)) + case x"$fs" in + x"ntfscomp") + setfattr -h -v 0x00000800 -n system.ntfs_attrib_be "$MNTPOINTRW/$OSDIR";; + esac + # OS LIMITATION: No AFS support under GNU/Linux + mkdir "$MNTPOINTRW/$OSDIR/sdir" + mkdir -p "$MNTPOINTRW/$OSDIR/$PDIR" + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/sdir/2.img" + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$BASEFILE" + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$NASTYFILE" + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$IFILE" + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$LONGNAME" + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/$PDIR/$PFIL" + if [ $PDIR != $PDIR2 ]; then + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/${PDIR2}/$PFIL" + fi + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/CaSe" + if [ x$CASESENS = xy ]; then + "@builddir@"/garbage-gen $BLOCKCNT > "$MNTPOINTRW/$OSDIR/cAsE" + fi + if (test x$fs = xvfat12a || test x$fs = xmsdos12a) && test x$BLKSIZE = x131072; then + # With this config there isn't enough space for full copy. + # Copy as much as we can + cp "${CFILESSRC[0]}" "$MNTPOINTRW/$OSDIR/${CFILES[0]}" &> /dev/null; + else + for ((i=0;i<$CFILESN;i++)); do + cp "${CFILESSRC[i]}" "$MNTPOINTRW/$OSDIR/${CFILES[i]}"; + done + fi + + if [ x$NOSYMLINK != xy ]; then + ln -s "$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASESYM" + ln -s "2.img" "$MNTPOINTRW/$OSDIR/$SSYM" + ln -s "../1.img" "$MNTPOINTRW/$OSDIR/$USYM" + ln -s "$LONGNAME" "$MNTPOINTRW/$OSDIR/$LONGSYM" + ln -s "${PDIR2}/$PFIL" "$MNTPOINTRW/$OSDIR/$PSYM" + ln -s "$IFILE" "$MNTPOINTRW/$OSDIR/$ISYM" + fi + if [ x$NOHARDLINK != xy ]; then + ln "$MNTPOINTRW/$OSDIR/$BASEFILE" "$MNTPOINTRW/$OSDIR/$BASEHARD" + fi + + case x"$fs" in + x"afs") + ;; + x"zfs"*) + while ! zpool export "$FSLABEL" ; do + sleep 1; + done + sleep 2 + ;; + x"tarfs") + (cd "$MASTER"; tar cf "${FSIMAGES[0]}" .) ;; + x"cpio_"*) + (cd "$MASTER"; find . | cpio -o -H "${fs/cpio_/}" > "${FSIMAGES[0]}" ) ;; + x"ziso9660") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso -compliance rec_mtime -set_filter_r --zisofs -- -zisofs default -as mkisofs -iso-level 3 -graft-points -R -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" -- -set_filter_r --zisofs -- -zisofs default -add /="$MASTER" ;; + x"iso9660") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"joliet") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"rockridge") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"rockridge_joliet") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 3 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"iso9660_1999") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"joliet_1999") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge off -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"rockridge_1999") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"rockridge_joliet_1999") + FSUUID=$(date -u +%Y-%m-%d-%H-%M-%S-00); + xorriso --rockridge on -compliance rec_mtime -as mkisofs -iso-level 4 -graft-points -J -joliet-long -V "$FSLABEL" --modification-date=$(echo ${FSUUID} | sed 's/-//g;') -o "${FSIMAGES[0]}" /="$MASTER" ;; + x"romfs") + genromfs -V "$FSLABEL" -f "${FSIMAGES[0]}" -d "$MASTER" ;; + xsquash4_*) + echo mksquashfs "$MASTER" "${FSIMAGES[0]}" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE + mksquashfs "$MASTER" "${FSIMAGES[0]}" -always-use-fragments -comp "${fs/squash4_/}" -b $BLKSIZE ;; + x"bfs") + sleep 1 + fusermount -u "$MNTPOINTRW" + ;; + xlvm*) + sleep 1 + for ((try=0;try < 20; try++)); do + if umount "$MNTPOINTRW" ; then + break; + fi + sleep 1; + done + UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S") + sleep 1 + vgchange -a n grub_test + ;; + xmdraid*) + sleep 1 + for ((try=0;try < 20; try++)); do + if umount "$MNTPOINTRW" ; then + break; + fi + sleep 1; + done + UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S") + sleep 1 + mdadm --stop /dev/md/"${fs}_$NDEVICES" + ;; + *) + sleep 1 + for ((try=0;try < 20; try++)); do + if umount "$MNTPOINTRW" ; then + break; + fi + sleep 1; + done + ;; + esac + sleep 1 + + case x"$fs" in + x"zfs"*) + "zpool" import -d /dev -R "$MNTPOINTRO" "$FSLABEL" + ;; + x"tarfs") + ;; + x"cpio_"*) + ;; + x"ziso9660") + ;; + xiso9660 | xrockridge | xjoliet | xrockridge_joliet) + ;; + xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) + ;; + x"romfs") + ;; + xsquash4_*) + ;; + xlvm*) + vgchange -a y grub_test + sleep 1 + mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; + xmdraid*) + mdadm --assemble /dev/md/"${fs}_$NDEVICES" "${LODEVICES[@]}" + sleep 1 + mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; + *) + mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o ${MOUNTOPTS}${SELINUXOPTS}ro ;; + esac + + run_grubfstest ls -- -la + case x"$fs" in + x"zfs"*) + LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/grub fs@/");; + *) + LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/");; + esac + if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then + : + else + echo LIST FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" + exit 1 + fi + + if echo "$LSROUT" | grep -F " $NASTYFILE" | grep "$BLOCKCNT"> /dev/null; then + : + else + echo NLIST FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -lA "$MNTPOINTRO" + exit 1 + fi + + if echo "$LSROUT" | grep -F " $IFILE" | grep "$BLOCKCNT"> /dev/null; then + : + else + echo ILIST FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" + exit 1 + fi + + if echo "$LSROUT" | grep -F " $LONGNAME" | grep "$BLOCKCNT"> /dev/null; then + : + else + echo LONG LIST FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" + exit 1 + fi + + if [ x$NOFILETIME != xy ]; then + filtime=$(TZ=UTC ls --time-style=+%Y%m%d%H%M%S -l -d "$MNTPOINTRO/$OSDIR/$BASEFILE"|awk '{print $6; }') + if echo "$LSROUT" | grep -F "$filtime $BASEFILE" > /dev/null; then + : + else + echo TIME FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" + exit 1 + fi + + filtime=$(TZ=UTC ls --time-style=+%Y%m%d%H%M%S -l -d "$MNTPOINTRO/$OSDIR/$LONGNAME"|awk '{print $6; }') + if echo "$LSROUT" | grep -F "$filtime $LONGNAME" > /dev/null; then + : + else + echo LONG TIME FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" + exit 1 + fi + fi + + case x"$fs" in + x"zfs"*) + LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/grub fs@/.");; + *) + LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/.");; + esac + if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then + : + else + echo DOT IN ROOTDIR FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" + exit 1 + fi + + case x"$fs" in + x"zfs"*) + ;; + *) + LSROUT=$(run_grubfstest ls -- -la "($GRUBDEVICE)/.."); + if echo "$LSROUT" | grep -F " $BASEFILE" | grep "$BLOCKCNT" > /dev/null; then + : + else + echo DOTDOT IN ROOTDIR FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO" + exit 1 + fi + ;; + esac + + case x"$fs" in + x"zfs"*) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/////sdir");; + *) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/////sdir");; + esac + if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then + : + else + echo SLIST FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/sdir" + exit 1 + fi + + case x"$fs" in + x"zfs"*) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/$PDIR");; + *) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/$PDIR");; + esac + if echo "$LSROUT" | grep -F " p.img" | grep $BLOCKCNT > /dev/null; then + : + else + echo PLIST FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/$PDIR" + exit 1 + fi + + case x"$fs" in + x"zfs"*) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/sdir/.");; + *) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/sdir/.");; + esac + if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then + : + else + echo DOT IN SUBDIR FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/$OSDIR/sdir" + exit 1 + fi + + case x"$fs" in + x"zfs"*) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/grub fs@/sdir/../sdir");; + *) + LSROUT=$(run_grubfstest ls -- -l "($GRUBDEVICE)/sdir/../sdir");; + esac + if echo "$LSROUT" | grep -F " 2.img" | grep $BLOCKCNT > /dev/null; then + : + else + echo DOTDOT IN SUBDIR FAIL + echo "$LSROUT" + TZ=UTC ls --time-style=+%Y%m%d%H%M%S.%N -l "$MNTPOINTRO/$OSDIR/ssdir" + exit 1 + fi + + LSOUT=`run_grubfstest ls -- -l "($GRUBDEVICE)"` + if [ x"$NOFSLABEL" = xy ]; then + : + elif echo "$LSOUT" | grep -F "Label \`$FSLABEL'" > /dev/null; then + : + else + echo LABEL FAIL + echo "$LSOUT" + blkid "${MOUNTDEVICE}" + exit 1 + fi + + # Inconsistencies between GRUB and blkid. + case x"$fs" in + x"iso9660" | x"ziso9660" | xrockridge | xjoliet | xrockridge_joliet | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;; + x"zfs"*) + for ((i=0;i /dev/null; then + : + else + echo UUID FAIL + echo "$FSUUID" + echo "$LSOUT" + blkid "${LODEVICES[0]}" + exit 1 + fi + ;; + esac + + case x$fs in + xiso9660 | xziso9660 | xrockridge | xjoliet | xrockridge_joliet | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) + FSTIME="$(date -d "$(echo ${FSUUID} | awk -F - '{ print $1"-"$2"-"$3" "$4":"$5":"$6 ;}')" '+%Y-%m-%d %H:%M:%S')";; + xlvm*|xmdraid*) + # With some abstractions like mdraid flushing to disk + # may be delayed for a long time. + FSTIME="$UMOUNT_TIME";; + *) + FSTIME="$(TZ=UTC ls --time-style="+%Y-%m-%d_%H:%M:%S" -l -d "${FSIMAGES[0]}"|awk '{print $6; }'|sed 's,_, ,g')";; + esac + # With some abstractions like mdraid computing of UMOUNT_TIME + # is not precise. Account for small difference here. + FSTIMEM1="$(date -d "$FSTIME UTC -1 second" -u "+%Y-%m-%d %H:%M:%S")" + FSTIMEM2="$(date -d "$FSTIME UTC -2 second" -u "+%Y-%m-%d %H:%M:%S")" + FSTIMEM3="$(date -d "$FSTIME UTC -3 second" -u "+%Y-%m-%d %H:%M:%S")" + + if [ x$NOFSTIME = xy ]; then + : + elif echo "$LSOUT" | grep -F 'Last modification time '"$FSTIME" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM1" > /dev/null || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM2" || echo "$LSOUT" | grep -F 'Last modification time '"$FSTIMEM3" > /dev/null; then + : + else + echo FSTIME FAIL + echo "$FSTIME" + echo "$LSOUT" + exit 1 + fi + + if [ x$NOHARDLINK != xy ]; then + if run_grubfstest cmp "$GRUBDIR/$BASEHARD" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then + : + else + echo HARDLINK FAIL + exit 1 + fi + fi + + if [ x$NOSYMLINK != xy ]; then + if run_grubfstest cmp "$GRUBDIR/$BASESYM" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then + : + else + echo SYMLINK FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$LONGSYM" "$MNTPOINTRO/$OSDIR/$LONGNAME" ; then + : + else + echo LONG SYMLINK FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$ISYM" "$MNTPOINTRO/$OSDIR/$IFILE" ; then + : + else + echo INTL SYMLINK FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$SSYM" "$MNTPOINTRO/$OSDIR/////sdir/////2.img" ; then + : + else + echo SDIR SYMLINK FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$USYM" "$MNTPOINTRO/$OSDIR/1.img" ; then + : + else + echo SDIR SYMLINK FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$PSYM" "$MNTPOINTRO/$OSDIR/${PDIR2}/$PFIL" ; then + : + else + echo PATH LONG SYMLINK FAIL + exit 1 + fi + fi + + if run_grubfstest cmp "$GRUBDIR/$BASEFILE" "$MNTPOINTRO/$OSDIR/$BASEFILE" ; then + : + else + echo READ FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$NASTYFILE" "$MNTPOINTRO/$OSDIR/$NASTYFILE" ; then + : + else + echo NREAD FAIL + exit 1 + fi + # Reference archive contains original name + if run_grubfstest cmp "$GRUBDIR/$LONGNAME" "$MNTPOINTRO/$OSDIR/$LONGNAME" ; then + : + else + echo LONG NAME READ FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/////sdir/////2.img" "$MNTPOINTRO/$OSDIR/sdir/2.img" ; then + : + else + echo LONG NAME READ FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$IFILE" "$MNTPOINTRO/$OSDIR/$IFILE" ; then + : + else + echo IREAD FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/$PDIR/$PFIL" "$MNTPOINTRO/$OSDIR/$PDIR/$PFIL" ; then + : + else + echo PREAD FAIL + echo cmp "$GRUBDIR/$PDIR/$PFIL" "$MNTPOINTRO/$OSDIR/$PDIR/$PFIL" + exit 1 + fi + ok=true + for ((i=0;i<$CFILESN;i++)); do + if ! run_grubfstest cmp "$GRUBDIR/${CFILES[i]}" "$MNTPOINTRO/$OSDIR/${CFILES[i]}" ; then + ok=false; + fi + done + if test x$ok = xtrue; then + : + else + echo CREAD FAIL + exit 1 + fi + + if [ x$CASESENS = xy ]; then + if run_grubfstest cmp "$GRUBDIR/CaSe" "$MNTPOINTRO/$OSDIR/CaSe" ; then + : + else + echo CASE1 READ FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/cAsE" "$MNTPOINTRO/$OSDIR/cAsE" ; then + : + else + exit 1 + fi + if cmp "$MNTPOINTRO/$OSDIR/cAsE" "$MNTPOINTRO/$OSDIR/CaSe" > /dev/null ; then + exit 1 + fi + if test x$ok = xtrue; then + : + else + echo CASE READ FAIL + exit 1 + fi + else + # OS LIMITATION: Linux make FAT (partially) case-sensitive... + # ISO9660 is generated and master doesn't change + case x$fs in + xiso9660 | xvfat*) + CASEX=CaSe;; + *) + CASEX=cAsE;; + esac + if run_grubfstest cmp "$GRUBDIR/CaSe" "$MNTPOINTRO/$OSDIR/${CASEX}" ; then + : + else + echo CASE1 READ FAIL + exit 1 + fi + if run_grubfstest cmp "$GRUBDIR/cAsE" "$MNTPOINTRO/$OSDIR/CaSe" ; then + : + else + echo CASE2 READ FAIL + exit 1 + fi + if ! cmp "$MNTPOINTRO/$OSDIR/CaSe" "$MNTPOINTRO/$OSDIR/${CASEX}" > /dev/null ; then + echo CASE CMP READ FAIL + exit 1 + fi + if test x$ok = xtrue; then + : + else + echo CASE READ FAIL + exit 1 + fi + fi + + case x"$fs" in + x"zfs"*) + while ! zpool export "$FSLABEL" ; do + sleep 1; + done + sleep 5;; + x"tarfs" | x"cpio_"* | xrockridge | xjoliet | xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | xiso9660 | xiso9660_1999 | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) + rm -rf "$MNTPOINTRW";; + x"afs") + rm -rf "$MNTPOINTRO" + ;; + *) + sleep 1 + umount "$MNTPOINTRO" || true + umount "$MNTPOINTRW" || true + esac + sleep 1 + case x"$fs" in + xmdraid*) + mdadm --stop /dev/md/"${fs}_$NDEVICES" + sleep 1 + ;; + xlvm*) + vgchange -a n grub_test + sleep 1 + ;; + esac + for ((i=0; i < NDEVICES; i++)); do + case x"$fs" in + x"tarfs" | x"cpio_"* | x"iso9660" | xrockridge | xjoliet | xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | x"iso9660_1999" | xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;; + *) + while ! losetup -d "${LODEVICES[i]}"; do + sleep 1 + done;; + esac + rm "${FSIMAGES[i]}" + done + if [ x"$fs" = x"zfs" ]; then + rmdir "$MNTPOINTRW"/"grub fs" || true + rmdir "$MNTPOINTRO"/"grub fs" || true + fi + rm -rf "$MNTPOINTRW" || true + rm -rf "$MNTPOINTRO" || true + done + done +done +rmdir "${tempdir}" diff --git a/tests/util/grub-shell-tester.in b/tests/util/grub-shell-tester.in new file mode 100644 index 000000000..5adce0a47 --- /dev/null +++ b/tests/util/grub-shell-tester.in @@ -0,0 +1,106 @@ +#! /bin/sh +set -e + +# Compares GRUB script output with BASH output. +# Copyright (C) 2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# Initialize some variables. +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" +builddir="@builddir@" +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_TARNAME=@PACKAGE_TARNAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ + +# Force build directory components +PATH="${builddir}:$PATH" +export PATH + +# Usage: usage +# Print the usage. +usage () { + cat <. +EOF +} + +# Check the arguments. +for option in "$@"; do + case "$option" in + -h | --help) + usage + exit 0 ;; + -v | --version) + echo "$0 (GNU GRUB ${PACKAGE_VERSION})" + exit 0 ;; + --modules=*) + ms=`echo "$option" | sed -e 's/--modules=//'` + modules="$modules,$ms" ;; + --qemu-opts=*) + qs=`echo "$option" | sed -e 's/--qemu-opts=//'` + qemuopts="$qemuopts $qs" ;; + -*) + echo "Unrecognized option \`$option'" 1>&2 + usage + exit 1 + ;; + *) + if [ "x${source}" != x ] ; then + echo "too many parameters at the end" 1>&2 + usage + exit 1 + fi + source="${option}" ;; + esac +done + +if [ "x${source}" = x ] ; then + tmpfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + while read REPLY; do + echo $REPLY >> "${tmpfile}" + done + source="${tmpfile}" +fi + +outfile1=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +"@builddir@/grub-shell" --qemu-opts="${qemuopts}" --modules=${modules} "${source}" >"${outfile1}" + +outfile2=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +bash "${source}" >"${outfile2}" + +if ! diff -q "${outfile1}" "${outfile2}" >/dev/null +then + echo "${source}: GRUB and BASH outputs did not match (see diff -u ${outfile1} ${outfile2})" + status=1 +else + rm -f "${outfile1}" "${outfile2}" +fi + +exit $status + + diff --git a/tests/util/grub-shell.in b/tests/util/grub-shell.in new file mode 100644 index 000000000..814f36c6b --- /dev/null +++ b/tests/util/grub-shell.in @@ -0,0 +1,510 @@ +#! /bin/sh +set -e + +# Run GRUB script in a Qemu instance +# Copyright (C) 2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# Initialize some variables. +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" +builddir="@builddir@" +srcdir="@srcdir@" +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_TARNAME=@PACKAGE_TARNAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ + +# Force build directory components +PATH="${builddir}:$PATH" +export PATH + +trim=0 + +# Usage: usage +# Print the usage. +usage () { + cat <. +EOF +} + +. "${builddir}/grub-core/modinfo.sh" +qemuopts="${GRUB_QEMU_OPTS}" +serial_port=com0 +serial_null= +halt_cmd=halt +pseries=n +disk="hda " +case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in + *-emu) + device_map=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + boot=emu + console=console + disk=0 + # To skip "Welcome to GRUB" and color setttings + trim=1 + serial_port= + ;; + powerpc-ieee1275) + boot=hd + qemu=qemu-system-ppc + console=console + serial_port=escc-ch-b + serial_null="-serial null" + netbootext=elf + trim=1 + ;; + + sparc64-ieee1275) + boot=cd + qemu=qemu-system-sparc64 + console= + serial_port=ieee1275/ttya + trim=1 + qemuopts="$qemuopts -no-reboot" + halt_cmd=reboot + ;; + + mips-qemu_mips) + boot=mips_qemu + qemu=qemu-system-mips + qemuopts="-M mips $qemuopts" + console=vga_text + ;; + mips-arc) + boot=cd + qemu=qemu-system-mips64 + qemuopts="-M indy $qemuopts" + serial_port=arc/serial0/line0 + console= + trim=1 + ;; + mipsel-arc) + boot=cd + qemu=qemu-system-mips64el + qemuopts="-M magnum $qemuopts -no-reboot" + serial_port=arc/multi0/serial0 + console=console + halt_cmd=reboot + trim=1 + ;; + mipsel-qemu_mips) + boot=mipsel_qemu + qemu=qemu-system-mipsel + qemuopts="-M mips $qemuopts" + console=vga_text + ;; + mipsel-loongson) + boot=mipsel_fulong2e + qemu=qemu-system-mips64el + qemuopts="-M fulong2e $qemuopts" + console= + trim=1 + ;; + i386-coreboot) + boot=coreboot + qemu=qemu-system-i386 + console=vga_text + ;; + i386-multiboot) + boot=cd + qemu=qemu-system-i386 + console=vga_text;; + + i386-ieee1275) + boot=hd + qemu=qemu-system-i386 + console=console + trim=1 + disk="hdb " + ;; + i386-qemu) + boot=qemu + qemu=qemu-system-i386 + console=vga_text;; + + i386-pc) + boot=cd + qemu=qemu-system-i386 + console=console + netbootext=0 + ;; + + i386-efi) + qemu=qemu-system-i386 + boot=cd + console=console + trim=1 + qemuopts="-bios OVMF-ia32.fd $qemuopts" + ;; + x86_64-efi) + qemu=qemu-system-x86_64 + boot=cd + console=console + trim=1 + qemuopts="-bios OVMF.fd $qemuopts" + ;; + arm64-efi) + qemu=qemu-system-aarch64 + boot=hd + console=console + trim=1 + qemuopts="-machine virt -cpu cortex-a57 -bios /usr/share/qemu-efi/QEMU_EFI.fd $qemuopts" + disk="device virtio-blk-device,drive=hd1 -drive if=none,id=hd1,file=" + serial_port= + ;; + arm-efi) + qemu=qemu-system-arm + boot=hd + console=console + trim=1 + qemuopts="-machine virt -bios /usr/share/ovmf-arm/QEMU_EFI.fd $qemuopts" + disk="device virtio-blk-device,drive=hd1 -drive if=none,id=hd1,file=" + serial_port=efi0 + ;; + *) + boot=hd + qemu=qemu-system-i386 + console=console;; +esac + +timeout=60 +mkimage_extra_arg= + +# Check the arguments. +for option in "$@"; do + case "$option" in + -h | --help) + usage + exit 0 ;; + -v | --version) + echo "$0 (GNU GRUB ${PACKAGE_VERSION})" + exit 0 ;; + --trim) + trim=1 + ;; + --debug) + debug=1 ;; + --modules=*) + ms=`echo "$option" | sed -e 's/--modules=//' -e 's/,/ /g'` + modules="$modules $ms" ;; + --files=*) + fls=`echo "$option" | sed -e 's/--files=//' -e 's/,/ /g'` + files="$files $fls" ;; + --mkrescue-arg=*) + mkr=`echo "$option" | sed -e 's/--mkrescue-arg=//' -e 's/,/ /g'` + mkrescue_args="$mkrescue_args $mkr" ;; + --qemu=*) + qemu=`echo "$option" | sed -e 's/--qemu=//' -e 's/,/ /g'`;; + --pseries) + qemu=qemu-system-ppc64 + serial_port=ieee1275/hvterm + serial_null= + qemuopts="$qemuopts -M pseries -no-reboot" + trim=1 + pseries=y + ;; + --qemu-opts=*) + qs=`echo "$option" | sed -e 's/--qemu-opts=//'` + qemuopts="$qemuopts $qs" ;; + --disk=*) + dsk=`echo "$option" | sed -e 's/--disk=//'` + if [ ${grub_modinfo_platform} = emu ]; then + echo "(hd$disk) $dsk" >> "$device_map" + disk="$((disk+1))" + else + if [ "$disk" = error ]; then + echo "Too many disks" 1>&2 + exit 1; + fi + qemuopts="$qemuopts -$disk$dsk" + if [ "$disk" = "hda " ]; then + disk="hdb "; + elif [ "$disk" = "hdb " ]; then + # CDROM is hdc + disk="hdd " + elif [ "$disk" = "hdd " ]; then + # CDROM is hdc + disk=error + fi + fi + ;; + --timeout=*) + timeout=`echo "$option" | sed -e 's/--timeout=//'` + ;; + + # Intentionally undocumented + --grub-mkimage-extra) + mkimage_extra_arg="$mkimage_extra_arg `argument $option "$@"`"; shift ;; + --grub-mkimage-extra=*) + mkimage_extra_arg="$mkimage_extra_arg `echo "$option" | sed 's/--grub-mkimage-extra=//'`" ;; + + --boot=*) + dev=`echo "$option" | sed -e 's/--boot=//'` + if [ "$dev" = "fd" ] ; then boot=fd; + elif [ "$dev" = "hd" ] ; then boot=hd; + elif [ "$dev" = "cd" ] ; then boot=cd; + elif [ "$dev" = "net" ] ; then boot=net; + elif [ "$dev" = "qemu" ] ; then boot=qemu; + elif [ "$dev" = "coreboot" ] ; then boot=coreboot; + elif [ "$dev" = "mips_qemu" ] ; then boot=mips_qemu; + elif [ "$dev" = "mipsel_qemu" ] ; then boot=mipsel_qemu; + elif [ "$dev" = "mipsel_fulong2e" ] ; then boot=mipsel_fulong2e; + else + echo "Unrecognized boot method \`$dev'" 1>&2 + usage + exit 1 + fi ;; + -*) + echo "Unrecognized option \`$option'" 1>&2 + usage + exit 1 ;; + *) + if [ "x${source}" != x ] ; then + echo "too many parameters at the end" 1>&2 + usage + exit 1 + fi + source="${option}" ;; + esac +done + +if [ "x${source}" = x ] ; then + tmpfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + while read REPLY; do + echo "$REPLY" >> ${tmpfile} + done + source=${tmpfile} +fi + +cfgfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +cat <${cfgfile} +grubshell=yes +enable_progress_indicator=0 +export enable_progress_indicator +EOF + + +if [ "${grub_modinfo_platform}" != emu ]; then + echo insmod serial >>${cfgfile} +fi + +if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = powerpc-ieee1275 ]; then + echo insmod escc >>${cfgfile} +fi +if [ "${serial_port}" != "" ]; then + echo "serial ${serial_port}" >>${cfgfile} + term="serial_${serial_port}" +else + term=console +fi + +cat <>${cfgfile} +terminfo -g 1024x1024 ${term} dumb +terminal_input ${term} +terminal_output ${term} +EOF + +trim_head=664cbea8-132f-4770-8aa4-1696d59ac35c + +if [ $trim = 1 ]; then + echo "echo $trim_head" >>${cfgfile} +fi + +rom_directory=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + +for mod in ${modules} +do + echo "insmod ${mod}" >> ${cfgfile} +done + +cat <>${cfgfile} +source "\$prefix/testcase.cfg" +# Stop serial output to suppress "ACPI shutdown failed" error. +EOF +# Attempt to switch to console on i386-ieee1275 causes "screen not found" message +if [ x$console != x ] && [ x"${grub_modinfo_target_cpu}-${grub_modinfo_platform}" != xi386-ieee1275 ]; then + echo "terminal_output $console" >>${cfgfile} +fi +echo "${halt_cmd}" >>${cfgfile} + +test -z "$debug" || echo "GRUB script: ${cfgfile}" >&2 +test -z "$debug" || echo "GRUB testcase script: ${tmpfile}" >&2 +test -z "$debug" || echo "Boot device: ${boot}" >&2 + +isofile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +test -z "$debug" || echo "GRUB ISO file: ${isofile}" >&2 +test -z "$debug" || echo "GRUB ROM directory: ${rom_directory}" >&2 + +if test -z "$debug"; then + qemuopts="${qemuopts} -nographic -monitor file:/dev/null" +fi + +if [ x$boot != xnet ] && [ x$boot != xemu ]; then + pkgdatadir="@builddir@" "@builddir@/grub-mkrescue" "--output=${isofile}" "--override-directory=${builddir}/grub-core" \ + --rom-directory="${rom_directory}" \ + --locale-directory="@srcdir@/po" \ + --themes-directory="@srcdir@/themes" \ + $mkimage_extra_arg ${mkrescue_args} \ + "/boot/grub/grub.cfg=${cfgfile}" "/boot/grub/testcase.cfg=${source}" \ + ${files} >/dev/null 2>&1 +fi +if [ x$boot = xhd ]; then + if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = arm64-efi ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = arm-efi ]; then + device="device virtio-blk-device,drive=hd0 -drive if=none,id=hd0,file=" + elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = mips-arc ]; then + device="hdb " + else + device="hda " + fi + bootdev="-boot c" +fi +if [ x$boot = xcd ]; then + if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = arm64-efi ] || [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = arm-efi ]; then + device="device virtio-blk-device,drive=cd0 -drive if=none,id=cd0,media=cdrom,file=" + elif [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = powerpc-ieee1275 ] && [ x$pseries != xy ] ; then + device="-drive if=ide,media=cdrom,file=" + else + device="cdrom " + fi + bootdev="-boot d" +fi +if [ x$boot = xfd ]; then + device="fda " + bootdev="-boot a" +fi + +if [ x$boot = xqemu ]; then + bootdev="-bios ${rom_directory}/qemu.img" + device="cdrom " +fi + +if [ x$boot = xmipsel_qemu ]; then + bootdev="-kernel ${rom_directory}/mipsel-qemu_mips.elf" + device="cdrom " +fi + +if [ x$boot = xmipsel_fulong2e ]; then + bootdev="-kernel ${rom_directory}/mipsel-loongson.elf -append machtype=lemote-fuloong-2e" + device="cdrom " +fi + +if [ x$boot = xmips_qemu ]; then + bootdev="-kernel ${rom_directory}/mips-qemu_mips.elf" + device="cdrom " +fi + +if [ x$boot = xcoreboot ]; then + imgfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + cp "${GRUB_COREBOOT_ROM}" "${imgfile}" + "${GRUB_CBFSTOOL}" "${imgfile}" add-payload -f "${rom_directory}/coreboot.elf" -n fallback/payload + bootdev="-bios ${imgfile}" + device="cdrom " + test -z "$debug" || echo "Coreboot image: ${imgfile}" >&2 +fi + +if [ "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" = mipsel-arc ]; then + case "$boot" in + hd) + bootdev="-global ds1225y.filename=$GRUB_QEMU_MAGNUM_NVRAM_DIR/disk" ;; + *) + bootdev="-global ds1225y.filename=$GRUB_QEMU_MAGNUM_NVRAM_DIR/cdrom";; + esac +fi + +do_trim () +{ + if [ $trim = 1 ]; then + awk '{ if (have_head == 1) print $0; } /664cbea8-132f-4770-8aa4-1696d59ac35c/ { have_head=1; }' + else + cat + fi +} + +copy_extra_files() { + _destdir="$1" + shift + + # FIXME support '=' in file names + for _file in "$@"; do + _target="${_file%=*}" + _source="${_file#*=}" + [ -n "$_source" ] || _source="$_target" + _target="$_destdir/$_target" + _targetdir="$(dirname "$_target")" + [ -d "$_targetdir" ] || mkdir -p "$_targetdir" + cp "$_source" "$_target" + done +} + +if [ x$boot = xnet ]; then + netdir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + pkgdatadir="@builddir@" "@builddir@/grub-mknetdir" "--grub-mkimage=${builddir}/grub-mkimage" "--directory=${builddir}/grub-core" "--net-directory=$netdir" ${mkrescue_args} > /dev/null + cp "${cfgfile}" "$netdir/boot/grub/grub.cfg" + cp "${source}" "$netdir/boot/grub/testcase.cfg" + [ -z "$files" ] || copy_extra_files "$netdir" $files + timeout -s KILL $timeout "${qemu}" ${qemuopts} ${serial_null} -serial file:/dev/stdout -boot n -net "user,tftp=$netdir,bootfile=/boot/grub/${grub_modinfo_target_cpu}-${grub_modinfo_platform}/core.$netbootext" -net nic | cat | tr -d "\r" | do_trim +elif [ x$boot = xemu ]; then + rootdir="$(mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX")" + grubdir="$rootdir/boot/grub" + mkdir -p "$grubdir/fonts" + mkdir -p "$grubdir/themes" + mkdir -p "$grubdir/locale" + test -f "@builddir@/"unicode.pf2 && cp "@builddir@/"unicode.pf2 "$grubdir/fonts/unicode.pf2" + cp -R "@srcdir@/themes/starfield" "$grubdir/themes/starfield" + for file in "@srcdir@/po/"*.gmo; do + if [ -f "$file" ]; then + cp "$file" "$grubdir/locale/" + fi + done + cp "${cfgfile}" "$grubdir/grub.cfg" + cp "${source}" "$grubdir/testcase.cfg" + [ -z "$files" ] || copy_extra_files "$rootdir" $files + roottar="$(mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX")" + (cd "$rootdir"; tar cf "$roottar" .) + @builddir@/grub-core/grub-emu -m "$device_map" --memdisk "$roottar" -r memdisk -d "/boot/grub" | tr -d "\r" | do_trim + test -n "$debug" || rm -rf "$rootdir" + test -n "$debug" || rm -f "$roottar" +else + timeout -s KILL $timeout "${qemu}" ${qemuopts} ${serial_null} -serial file:/dev/stdout -${device}"${isofile}" ${bootdev} | cat | tr -d "\r" | do_trim +fi +if [ x$boot = xcoreboot ]; then + test -n "$debug" || rm -f "${imgfile}" +fi +test -n "$debug" || rm -f "${isofile}" +test -n "$debug" || rm -rf "${rom_directory}" +test -n "$debug" || rm -f "${tmpfile}" "${cfgfile}" +exit 0 + + diff --git a/tests/xfs_test.in b/tests/xfs_test.in new file mode 100644 index 000000000..3807e2e5c --- /dev/null +++ b/tests/xfs_test.in @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which mkfs.xfs >/dev/null 2>&1; then + echo "mkfs.xfs not installed; cannot test xfs." + exit 77 +fi + + +"@builddir@/grub-fs-tester" xfs_crc +"@builddir@/grub-fs-tester" xfs diff --git a/tests/xzcompress_test.in b/tests/xzcompress_test.in new file mode 100644 index 000000000..b2bd999ec --- /dev/null +++ b/tests/xzcompress_test.in @@ -0,0 +1,29 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +set -e +grubshell=@builddir@/grub-shell + +. "@builddir@/grub-core/modinfo.sh" + +if ! which xz >/dev/null 2>&1; then + echo "xz not installed; cannot test xz compression." + exit 77 +fi + +if [ "$(echo hello | "${grubshell}" --mkrescue-arg=--compress=xz)" != "Hello World" ]; then + exit 1 +fi diff --git a/tests/zfs_test.in b/tests/zfs_test.in new file mode 100644 index 000000000..047120e47 --- /dev/null +++ b/tests/zfs_test.in @@ -0,0 +1,27 @@ +#!/bin/sh + +set -e + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + exit 77 +fi + +if ! which zpool >/dev/null 2>&1; then + echo "zpool not installed; cannot test zfs." + exit 77 +fi + +"@builddir@/grub-fs-tester" zfs +"@builddir@/grub-fs-tester" zfs_lzjb +"@builddir@/grub-fs-tester" zfs_gzip +"@builddir@/grub-fs-tester" zfs_zle +"@builddir@/grub-fs-tester" zfs_raidz3 +"@builddir@/grub-fs-tester" zfs_raidz2 +"@builddir@/grub-fs-tester" zfs_raidz +"@builddir@/grub-fs-tester" zfs_mirror +"@builddir@/grub-fs-tester" zfs_stripe +"@builddir@/grub-fs-tester" zfs_caseins diff --git a/themes/starfield/COPYING.CC-BY-SA-3.0 b/themes/starfield/COPYING.CC-BY-SA-3.0 new file mode 100644 index 000000000..f7a1f1570 --- /dev/null +++ b/themes/starfield/COPYING.CC-BY-SA-3.0 @@ -0,0 +1,65 @@ + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. + "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. + "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + to Distribute and Publicly Perform Adaptations. + + For the avoidance of doubt: + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. + You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. + If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. + diff --git a/themes/starfield/README b/themes/starfield/README new file mode 100644 index 000000000..47dec407e --- /dev/null +++ b/themes/starfield/README @@ -0,0 +1,36 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% GRUB2 gfxmenu default theme by Daniel Tschudi % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Version history: + + 0.99: first test release + +Introduction: + + This shall be the default theme for the GRUB2. As the theme format seems to be more stable then before, there is hope that this theme will work + in future version of GRUB2 as well. + +Usage: + + The font (c.f. theme.txt) required by this theme are not supplied with it, + as they should be generated out of the newest available version at compile time. + +Remarks: + + All images of the theme have been made by the author using GIMP. + + This theme does not contain any text in a fixed language. + + As soon as gfxmenu allows it, this theme should be updated to support localised layouts, such as different position for the scrollbar depending on reading direction. + + In order to speed up the loading process on smaller resolutions, the starfield.png might be converted in to .jpeg images of different resolution. + + This theme is inspired by the work and themes of Jo Shields. + + Do not not use the m-word near the ape, ook! + + +Copyright & Licensing: + + Please see the COPYING file diff --git a/themes/starfield/blob_w.png b/themes/starfield/blob_w.png new file mode 100644 index 0000000000000000000000000000000000000000..9915bedcb7d7eb92f17031859f40ab658e5d93e4 GIT binary patch literal 836 zcmV-K1H1f*P)P000>X1^@s6#OZ}&00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt| z2|F7o1i>W$000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0007?NklL4-eaah71i2IsN_p833<|=s6MHAtINE0&DG# zs(!B3YM+*um!}2>26g~wSRTH_y<{?(mm>1sahz8oa+{ewW{xnkD2!KydV0DR2D%V3I5_y&81umx^GrnAMTA0vMI>&Fx#xLaZGC-xy-+9|HiJSTi;Ih1 zJRW~5B5#g63dmFf$orqNcUT<#YD|9n0PgLHOw-el&d%-qJz#LRFU z2SfyB2GMaTRgVo@YdIE+rBkWY69B6K4z7f_uIn;$N<_$UoKweV?uiJh3RQ)*7OIMl zj*c6~n7aUC0DfNyAtGXC=j7balArG8RH_PQhN{B%eX7^%9RR%Me4!9yOv4ycibNuo zj|InZ!pxkFM@L6~xm>nkb#^YeTzf?Hg_(U32?d;25CmE*7WYj8yCO z`cx1E8>;GG2C&v@rBXSZo15EQSXkHuP;I&2jE#*&x3;$4?eFhz1VP}ds?{b1L0~JD zN_}Et;%hdW{RrR%fMm;$aeREd(bLnjnM@}4h$ybAQERQJs`|cftJP{FpU+n&CnwiN zM@MIJx!fFpH2}K+g1>2y)YsP+>+S7**xlWo^*rx^@B7JWwQBPD{K3-FQel36{(G@l z{086$fNcQv<`+*bcIpU#n*b63;sDxD=Jo+p0F(giofKWKKeuZE0R8}rn;=tg;2cT- O0000 z5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+%B3@4y#}JO|$v^)8-!I6(smE+^^5MNwpag@b LtDnm{r-UW|da^4D literal 0 HcmV?d00001 diff --git a/themes/starfield/boot_menu_e.png b/themes/starfield/boot_menu_e.png new file mode 100644 index 0000000000000000000000000000000000000000..952c59352d4beb91bc0d288d30e67c0651557521 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^azM<;!3HExZjgHe;uHtDJ29*~C-V}>VN3FMcVYMs zf(!O8p9~b?EbxddW?Cu%vM>psdsPTj$KdJe=d#Wzp$P!OEHhmI literal 0 HcmV?d00001 diff --git a/themes/starfield/boot_menu_n.png b/themes/starfield/boot_menu_n.png new file mode 100644 index 0000000000000000000000000000000000000000..5da3271bb2aaad029520a0def5b362ba1375af7c GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{M!3HGXPAxeOq*#ibJVQ8upoSx*10?C`;uyj) uGdV#)^3VVO|LujDfdEJ}bIx(~Wn!4e%o6T;pi>K|lEKr}&t;ucLK6Td;TK&1 literal 0 HcmV?d00001 diff --git a/themes/starfield/boot_menu_ne.png b/themes/starfield/boot_menu_ne.png new file mode 100644 index 0000000000000000000000000000000000000000..73dc62432b48528049c78e7372b2f6f935e14d75 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3EX7WqAsj$Z!;#Vfb3%SKrZ)jZ;FpS4I_1ew^G@>%H!12;&tEhY5`KLcf*mS{J99E@jC7pwv83{K{gn e{wN<~28Kyrc}&`OoRR@r&EVQ(^pF44KN!tZSl6N;G>bp!;n`K)YR*p5N~^jY-*x}aXgGdpVoOq& zCR@W+%lm2PmX}XlyYA7p>qeog`_~`6qgTe~DWM4fvMv`$ literal 0 HcmV?d00001 diff --git a/themes/starfield/slider_c.png b/themes/starfield/slider_c.png new file mode 100644 index 0000000000000000000000000000000000000000..11231dfa21aa9e2f650f4112ebce35163eb45942 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W@!3HGnP3ltxaf*Z7ofy`glX(f`uqAoByDx`7I;J!Gca%qgD@k*tT_@uLG}_)Usv|qJbYX{dT+i-X9I;KOI#yLobz*Y zQ}ap~oQqNuOHxx5$}>wc6x=<11Hv2m#DR(wJY5_^IIbuE`2XLY83c^}&gVFA;6OoJ fW8*>gSbc^K?~I>mIIvUz)iQXx`njxgN@xNAiTF0+ literal 0 HcmV?d00001 diff --git a/themes/starfield/slider_n.png b/themes/starfield/slider_n.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd4b23239d95ffb7a6e5fe3a5539096bc4d9010 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W+!3HFM&b|K@NHG=%xjQkeJ16rJ$YD$Jc6VX; z4}uH!E}sk(;VkfoEM{Qf76xHPhFNnYfP(BLp1!W^w|V%u6ihUhcJ2oXNtU=qlsM<- z=BDPAFgO>bCYGe8D3oWGWGJ|M`UZqI@`(c#rFgnHhG?8$JMkcIg8>h-e(3%h$yUaQ zCdr7_g@*jM_| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sfZ5}=@1=%cd!OK7)$r9Iy66gHf z+|;}h2Ir#G#FEq$h4Rdj3xcZONi$o6}^zn3z)9QiT>ukr5xN z#4MVi5(Qt>7=18Cmuw-6#yB$<1!rW7TK<%^&;o@*TS`kW?d`q&?&mq>)|H5l#urX< z?)N)?zwe%N?|00W_735K!6cY0ZAJpLUt`4g0&^TZs)0+64-kS3bRY08;1b|H8b-ew z@IM7>g&EQ|7;NqBMyms4g2t*7cB9^5Y!P}aj#lB+Q>ULrOJ&y8(ylif8_ae~3+lj| zBlTU5-ZrDqWoxsv94f6hnGLo!n_Z~SE)8~bvtBsz(2*={1CDB@LlD}$O=!+8{5!zV z3tb(0gT-nVj^_3PW$$)MP1n$EwKxQe)zE6}!g!m>)Ma%1eL#%iCMSSwj8qS>;eECiCN&A0y&~YhrTB?Vg54>U2Sue<)79CzJt1{SGQmwZ1SBl91j zVSXt%Ha8y#u7tvo)zwI7yqhflfQH4DurCk{t**rqqL@g;7v3W=7aEo$(WRBuwe^j3 zhGvws6dNQdKNvQ`Yw=(t4r-Ngj8oH8>?ev3EUDTE3%8HmAeT~osP)ac|66 z(4{l3GepMZQaq_RLn+D%nM5NW?jz#mY`mnhuYyU+3RsH9E;SMo?gahXm_!-*U^0|Q z$k2DoiZnB{ z7s@Y>t|XE&<*1w%!((>nkoeM{$0oUcu1LX0Y4(@bt=O6r^|3N3YNK)m8pFVfy ziTymOAPK(l-P@5w%=`6=H5~le@~+d@HmJ(0vg~oz@-PZAk9;q|bs|&0y^1HrL@9k; z#7jp}etA*{a%SJR8N3D5)$Tng-v0;9iqhag6a|->71N&`MzQwBrt`+952JX``x08| za(@Ge3jd5t!M)Vvh~)viQp(#ra2xV0txDtlC#pad#eZEX<@wvJx3 zZ#NB5|6fnT0^DSibR8PVofW2`?#-<_-5|7#+deSsh_zOdWwLgS`Ung+#4myO~-C^I7df)Q4yk(I}!Qq9`JYh;G&0^}8FZ a<%7)H9Dq#}$o zde3j(j4j(rS8KZEl1g0)0+ED7evTZ4OUS|egAh!JE69V8Hv!Ri4gLk-Si#two2nAE zgSDS}ao-5$L_y!QThYbC;}cfSyj53BiCi_h2=0Vr*6m6`ttoXe8D>&(Q<{cm9`Z&l z8J*rvee{r7C{3Vs+0z>9^nZe_Tf1gl*NV>KULfxJ#GvJyT05$1z7iJujg(fnp95m| zU+G)fZ^e5Ek$gr57~cnRG-v!pHD*)$YfFRe5D;Idg&YKq_T#_-$gsml9e&c`;|@Os ljAPRIaL$(8eF5;2XV(A# literal 0 HcmV?d00001 diff --git a/themes/starfield/src/bootmenu/corner.xcf b/themes/starfield/src/bootmenu/corner.xcf new file mode 100644 index 0000000000000000000000000000000000000000..5ac33d961c2f55a1ed4699a065b43e9affe749d1 GIT binary patch literal 783 zcma)4O;5r=5S<^>eJY zz_E^>L=lg3+ygbw?o#gMe92yAzGCzHhezrRN~w%I!5xvxC2^=WV3g&%kh3fa<#KF| z0^uiNlCn`*oK!44Ho2LUQ3Ix`HAd^A#;W`5Z$Q>XxLd)!3bre_kCZ;&qvC9Dmy>dMXmXA%$Wz;?;CH0&Y^1*9r*v+ oa?M$@^wgp1oPlfN`0Zb*oLPpRhjS*cYsd>F$8=nMnGrw<#`0eHE;rSfLqJScLV<%c_6Vi z;yTYoQKL2+uO3Sg*CJsbs$R1B)AI{;E{#>?u@sRkRbt(~7gqH)6RgsiO2)k~m0V}K zWT8n>DHk!D+)qrjkg08rF}i3Ob$#|fq0vpXin%Hzo4T_gZrenwMe9P_o3_V&tm>2OT8}4wFTC8icGJw1L%c_lf7#>lGkhS veuJMk_@Kcrz-gC@GZ5NK;r<49KBVB)bbdb<-r)UM3qGkH?YajHAAD4Mbnj`t literal 0 HcmV?d00001 diff --git a/themes/starfield/src/slider_c.xcf b/themes/starfield/src/slider_c.xcf new file mode 100644 index 0000000000000000000000000000000000000000..1bf7c561dd1d0eef54525652a2647fe64d7869de GIT binary patch literal 693 zcmaJ|7AVqRol;d Ge7bLi|9}Vp literal 0 HcmV?d00001 diff --git a/themes/starfield/src/slider_n.xcf b/themes/starfield/src/slider_n.xcf new file mode 100644 index 0000000000000000000000000000000000000000..2525ebb421480204ff6e5ec6b096637621268cc7 GIT binary patch literal 845 zcmcgq%}&BV5T4cw6=)Px&U=JI4ZH##h>0fNJb5T(yKL+awk5*Jc=hC4c=Hu}0Ut@a z&Xksvh*!Vl>wNp|%3YnQJ_p1Z@|Xmojnp*!oFdK98vqeONd{6!b_-2; z=a@gnXbD`_cB3HRVTxm*$`6lT2r9e06h6Gbeef3>?925z8rgn5{uCNmo8+ zN#x6EztQuA8~IVpdU>#8F>%=7Vvu8x7#34~ES>BrE$7+af=ZXk+;L?n*s$CS&DB1$ z@a#n>Qzk=q#uKWKJTKwt_JCCV+uAt0rPPN4+DEA{miI#)ZH^rGLB!D_%-cq{L8u|= zb`;VqG^HOE8Ur*cx>?b!inc16o&>E`qK<<0AXHz&#sU4l5an?(SAX2~^cNaG!@DxT zQZ;BQ4Gd&MWuOjGbdc@b{KkJ#rqW@J@qa2lA=97*nV}9;c8C4SEIia&YS;!-tzWxP Lr}%ZfjXL}Q`j@k* literal 0 HcmV?d00001 diff --git a/themes/starfield/src/slider_s.xcf b/themes/starfield/src/slider_s.xcf new file mode 100644 index 0000000000000000000000000000000000000000..f6469a2590dd32587f0b3cb7b745cb724dfd792c GIT binary patch literal 863 zcmcgq%}#?r5FQXM{UKWa&U70%4?jI;~R+Ngs=B~+OF(VJF73d}D+ILwJ z`C`^@^*ruGeiXA_5zLrRZ8o?W6gVJ;WvY*@(*vzlp8YMTb(Jh^M}(XWtG&=%A2LhN zT!tcLB6Q|%Lj95FC2smVAa(CsTW7bG&Y^_zSt*Rw{m_ZFN4E3C<7gQc$40k7I6>0w zNTgnBDsPq=1GH+oUDKVKHfoxl1g%w}fr9oR)L+Ba0rjyI)wo!zKJR+!8~uMvoKxyj zg$$!173d;$nS(q=(L`#>Lj|$y_%$jV} PO>RL4a>Y_D92I^5jhw!h literal 0 HcmV?d00001 diff --git a/themes/starfield/src/terminalbox/center.xcf b/themes/starfield/src/terminalbox/center.xcf new file mode 100644 index 0000000000000000000000000000000000000000..d59887b604b9a3a94601dd889025e1d9aeabaa6e GIT binary patch literal 649 zcmZ`%OHRWu6m$ZD(ozBCv-UDw1hrQvi;4vj7hsV(wri2tC3Z!-3?g9aZo_#tpy%f=oM+yle@2D?8!ciSPgb literal 0 HcmV?d00001 diff --git a/themes/starfield/src/terminalbox/side.xcf b/themes/starfield/src/terminalbox/side.xcf new file mode 100644 index 0000000000000000000000000000000000000000..c9fd30abf6bf54f30bf3691635ea6270574bb7d8 GIT binary patch literal 824 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

    bjZS6sA>6$E)F%l2Jqw6Y=Z~Wf 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%0Ab`mBMC?gnERU$C>Q=AY(KVpgS*?w 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 z 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

    lttke!XJ12W186l4O8F6Jy{Q!>V@Cy0?yb zd|VEZgE`xGc-N_uGtFv20SPAp4rC+negDSxH(F@Pj_Yk!o*eosvAZ?JD?Ac8s^&b!(aY0uz!_aW$~&OX;d!?VOVq9Ce)j+){|`Y4hJL~W3S5uIya;3DxdmEwqABlIy1WP|;Ho=rP)=7mqfRE?x8J@Xf~OSobX}Y_yBGCCPT$QRYJtaN z^rxLOzi3V7&{nOc5(koA4DkSH5x$K!m#_^PbtFq~-}g4|t#;*1*O;PE+OERf5jLsL){lGg zqBz*3(y*nFkCn#}j*z+8X0a&b3C$CyzDF1NG4xOjw^Dzbu7L8lrC|%(25-ZGB#m8J ztT|q)dU;^h$T@3R!XuF9D>MJLnSHx3I_D!DVP>qisJlN7fyDeaOzDrL)h=NMHV8tN z74!S|twh&rDPy}eot=La<-C^K&f0^%kqMb&PTX`=sqq=UEtWGA{#*Vw!15;+oQ8r zbrDdI?>hc#%73~d9i~O&A9O=x7 zWq3#s31fEp@&Id|sHpuv7Z&E2cI^*TJg%+)9Ut`T3U8~H{_g}v=S9z#yRoz9_t*Ca zH&C%sg_1>ljMudI<|Wt>p))6pr9Aw@<|_0ivygJ`^g|nz4PF`}?mr3zBEWe@faxIaXe3nuD`d*^Y@Cpz8b81G~x~E8m`MxZ?^9~tWUvTl! z!8M)^e^=;gA4j;2_y%vo@_Xj-$pUpdDzXRzCoja}{Mo+-0U5*p1Q2sd2K_RMISErc z+u>P}0G%YVoDv6_noKe8k40|-bLr1R+3@zemHL+Y+7LURI}D+hEtaj?x6Vlh)jwK6SmmAkyz~+>Hzghjlx+KZlsxt5)Wx z$rR35_j1W+>3;cGvO3t>sAf+h+C~i$F=!7>dz;XjIljzu(`;coFWG#EkWQN#GC*^9 zSjaFbld28g+GBSewa0G_**c1Zo zzrFTR40E*P!Uxo1Y+&Pkz!5uNs;I7Wfmv8vym=EIDn};WF zDU3*5cbadaW?+X^?8xFjfwMu6e5Ev(IDN*wr&cF`#XG(1H)2l~fzn8o&0^1H3xT50=EoRPdUiG;qpRbVJD=5o zufr)xa@SV(TVNodZ9qU}B%YxCmCltI0f#5q)Ah9P7p*AtJT6H6`>#vxkAedFKIEF?3_wSGtL;%XVIgnZ6(Ms_=XZRIn< z4-9&OX2Vz;rf)yyaXH7|uG6RQz1&d@?GUzJ$UOJFALi`xU5yO&YmB*sb!y+>WYxfX zW7qlo2G3Ci1WrK&1cJ*M-5*cf&Mmen0kaOt@hrz{z_E3lW?wreRbpSYLm3uHlqFM= zC#lF9PVD?IakaRb>W?fCtx|f>u)N^j5>Un5LyJF|%OCc z0;Mp?DafM44_&~puAGq`LemJkDcA^Hf$_ItmHnpyxE3=pzisp9k3Q3e+lU&DQreQd zq*-dOXYFl#NgXO$U%d`=H-b#DM&`#eG4cLGXnpbBPQoLZDK0LC(RAMt-tf5E70!f; zeVq?lLuA=trxd#c445ICZTvlDVg9OrKIaAxT(~QA4G!$qYWS8Vh8N#|5jwY3|kX573L)>wNYDvK*&y3Tt}DfO!}E z^B#7bsDY28ls0VQQ_0DuT zUtKaMyCuLAMg^^hr)1SMJ?o5xQ4=2H`6cwXn!UYh-=;G9Sk$F^OJfxAJd3ea7ie7& z`Wh}yiCH)EK8tgaNfxdG=C#$`5bJ5+K9XlSc$-AU(;FE!!Ob=pXyW74zCE=)_1}lI z{~MS5W`%AKwfD&blrMpWwV)9kj*YSW(RSk5SU&3 zVfvs{@qv;Z_KWh4gR2MjSXBLjAVf?k>0|v293l)EI1->(Rg}~=b_7X7;Ea~RcvNNr z6KW}f1=oJHg}Sh^CdwfilY&e+{GAgJz)xbML6F{9!Dm81T~4q-bNkR7Fa6zKv(nho zkPIK`R~e1m@<*N|vHID8r*S-?wr8wsb;LzgnA;{-QR_eph+I*jCkjUyO)(0u_rC#B z018*o=o$S*qD@M;sEU&xAKvwP=VVbH+C;Nm*sM3W??z@&tkfMeVUxw%0kzC=5w`w< zl)L^DwUye?tlS@1b3YbFm{7$&Vv==p$b*ms_3V$_yOKlRBybe?NwSAyv{luW|M8l* z5k`3*7ygcNB4&k|{R%tn;#8gGY9 zu-mF|#SsS4N#aa6c(XR##VFLV;4~fpw_bEk_4xQSTD7MJIbZ_koA`+P;CDj3LYrn7 z@2_7+5gnzdu+x}5&aRRQ=zR{;^W0P4-Mydp&T;=aKgdowPdL4-uch~~e$F*F+8AN0fc{~UYQPAZpZ`U0tf7?Fl^)M==nEL8 zffcrtJA>kTE?eO^MqC)0)HdrGB-xY@_0ox+oRl(kgaQXy^zd4T)A?(p4ZA^~Jz?Zp zTFj`8@?h2gO_F;Gp2N<5=S`2-e;+Ux&cI6#CF2|s+N^;uKbP`bqqTRz6J^p6Ip`cs zI1)r==JA3#>mb0_?lZ(g1sxD+ldt~>E1#n^7mNK?yKVDS>E%G+5BH*}x)~p*$C*7^ zAj{F}U4ZtI(=0|7p9cZA1qn!|my0~$;wkjHMGL`T`84X$MZr_I7=6ZxGeYC6D^7zW zN|j)5T8J=o3!KB5;iM)uHS{q1Q`vnzo101wkz>V%$1_#T;&^c9B=DP;tt3m8DT>-t zWBnAtviu%C9?UsD%0~1m9?9mwJ8m^?d^fIlE-L5 zKzp1ybk=zXyYJ141S6Q_{#`R;0=ztp&5C!3lA;1PV5WX=%ec(T%d6?uoUJ`SPP_E^ z+-T_gB6~d|zLXmo89Nw4*D*gnNk8dPL;Hu&A%8^b`8$fTBzNOLf+Q>x^$w@S^}76Q z6|+gZGIVi~u(U((9C%fr2^;hrN%Y)bJdV%K>RVi%UUs40&uP0bXFlBT+fKv4|6$1z zj{9np=J4<4OIJutjMQ^$-(b+K0&AAAFioFJqSM$vOX1ADi4S^1iZ7cb;$8Fh-$@a1 zGtgErVH&yQFRy*_l>jmrOA;G9Z1)iFez7UjKTh)LKFZywh9aFmN8WSXPO>mcNlmMw7adwUn@w#p$e8gH2XBGha`msEqYztX{q z6I0^~?#1RJcEQTzptTtb{B<-_P%Ztof~mye_0*>{GVp6rVEQ2r#?5Vl0$n}>;{zEn z3G=d8$tuY3)Z}Xnb`7f&bGnC7PtiDd+JS&5Dr%e5^a^MC=6P-*Nxkl|Xq!W2)b!+EDZ#>0@J{Nv*RJ^tj(mt!ZofAdo^9c0*Vb=K%XW=8$EF zHkKG{*5sfaklZPQuQ{2f<%!ef@CD_=B>jtNK=z@SS?CHrG&AwADQ8-4`p5eBlw^t`b6f&$ z*EpxbOZkp8B$zn_Y%0tf=3Olznp}a4hYUK9`at!Hn9o8nvK;|Bv@u}&_YFnM`YaVN zK#-7OSaNt{PJ&PXN(-376#!;#cFHz?F~PxJRh)xNoSue?EJoz?8Vh}v=7*uS`}N}3 z-QAwx&Mz7I@<=dg65(GAt=}WPF27!!ov-XVwRAOxj9FF0w=qhjs4g!q_mzccIkyQ8 zb8xe-FRX}hU`z2Onlmfcm!tI&Zvls4(yt|IU2BYJ2)A%d z<*Fc8y1@Jzpd(<$fu@!{c_u(*SfrPqRVgmTkNTOiXs?Y{6npdakLs%iyEk#%c z$Is7y+Oh|kOdi_sAgfeIwK7*fY^OX214XtyLL}73%GaFWEqiX48o3=T$d)CDnfoa! zT9xmTiPe7IizMOC-Avz;i80NB0o|`?8&UQNq!}`h-O5HkZNCW z;fIlzlILK=QT9%I^Dvkw0AEl2#OBfH-5LK@`r_?$qOhTnc|7;O@9eIOf}>Nh2HHl0TZ$JCud*OfhJU28XyykIIU%-h+0aQrSV9F8uUzQ_y2?_TD>zu~!0AD~<&J;xaaQ+$q6FG;lfuz8CDcAwy1e z6jO!;ODlJhr8nD$m{o_@23X*N0-W#Y=&pF+8AM+4-LF zulKNa-WB+LOf*ILQ{TiU9H&sS4a4@c3Y5ZFU&Tak1Ec9h=G>{a3)7C7^R6Rov|bA2 zh5Y)CKIXT{T?S|RDc?6QxH%Z4V2o{0+_9d{UXNY_g&(83NZR!H_G2CP`-!K7g8ZKD zaMzav;M{Axu3*UUthqyPU|50wl_lVI%?F$tdERQ8pbr*-M^-GY=bNX+rP5;S|s$&w)F~5{Di*GJ)Vb z2i)cFCXqM+etr4(+MElCd+G%C`=Le(*2-5TPXXEkcAVq4Z@%SXJ)Nuj2*~uVWI|oj z_L9>r9>XOKu?r5`qCwZ`O}fy5WMv-0iA3jCoykfJ;^YHN*?#zUV~SLYjX>nx(IKes zcyD6-WHPuTdS?9ju)HVe&cSBb-&&%J1hFZbi`RF>NA4HN((SZQ!bYB3)=&&JuLDUT z<-t936q&%YnZir|x}gg~Z)|o_hmme(BKk%! zg`KcNUeUyb)wdWevPqHMArZmYk4yxrCfyHpde!-JUomNn!>X@WoIZGSd5B4`FD!0v z_S8NHVsdzy`#7nV{hX`rq$wI=Q^tZ@>A20a`!R_c4s^ZFNrY@D(j}ZgFLKs#spd>W zcx^@;ygj3WE>XbV&?Y!8r)*||-hFu0#h5IDTfV4$=z zvsAJg8=I4p42k2x(-^Y@z^F-*!^+QBq#0?rA~6h=d*+veW%7+EFJeerU9e*#bl>-p z<~fzimX@aI*3ZxkN^GAms|49`b@XlI!M@*?OKrOmvAZLyVdHBAn+*Oqnac- zfbU8Gf;ARw^93MRij2sBtfx^syON2-JvQTM39Y@(hB)wTAO%wVF3apF0d~yb!kNDs zG@UZz8_H1e7T^{gHBq)JF@VCLf7yZS4NT7d z0$v`6T`H@tNrX_~?5E#x{&rXuNa-^O`Ny5b@BLln@=3{lX`H znaA0&5~uuzSLdr&x1H^RQEW0> z*DWbDHY>jT>j48}m0l|zy`(IXs8DKQ#Fynj8W|vK0aF>Unysy^)$CAxGUF@$doPxw zR{PI=wTQ+~rwx`aTyydqA7cj<$nNV#GzWWq~YT?EQ;<|baTcgE< z5S8)3fqiwKHh3fGc5NUi3=>@4K~-vtyCnH!U(=H=JD4C-G<`Da{<;c8n8tk{h7P>G z%fXM;=^zAtD2^H0#zW(rpd?g|-L`;-{z9(v$|{D15fUnwoW1aeot&I|9>MrKsFeqv z`uO93Z{e_&HPOy)N#Wk>(Biqvfq^-8+V+p=lh*yd zoN!%+zfey}Wl)K)%|=*`VimxYp9QtHN~bg0f_X_FHw?WAAB=X|w_R&lMl zregsNb;;Sw@zg8Ke6_xKtM`?J)!&{T-`D65v<}D7`a`G;BpB4G6R{I9a3=wv7_tcq z??-fnJ>HJ)jtQOjqq^&~dBT6NQ{KMvyPyM0SmDQUy0-Dlr}%XsR_IxH>i#pSu<_hR zrcGu!Ot;vVL%VU&P*khn*iix-={~-d4GADHga#YTh!1Ptq;97xutN^+n;`@>&21p8 z_pD~8;{;mp!RjS_j+-mvx>jZMS~i55bkxwyjHnVHezQKEM71bvOBK7rmY|M?nk>%v zCnTh-497Y%yNEYdcG*Dy02)Wb!Zd~3Vm)IHoC`o*h010jUp>X55;`5EQ~}xO009bf`)wY{?lrs*}Z* zA>Aot1cf?6zRWwCOsNh2Tr3JF+Ov&E2m?L$sT;YQTuwjhj)Q1JiEb@c+>rNRbdV35 z1|I!5)*9>CSb>Y_TIKTc4?UwxOGMzE5gj8HXMrV3>V#Rmfrl{|KMSI z9(x?NLhf*7%Rz>kE%yev!PkqwR=8X-neIl+n}OMbI!j*=UTuEHy7A&s-;X%g*8%fq zF(p2#=qdeyH0jgxlu(~_nZGv=EEX}~E*D!;U`K(*pZ)zE3-eh2;x#AuOA@`Rv^4lJ zVrU`V7cg)EQuH)pA1t^poGnp+^03wdE!2_{CuYX033(?cGSlsY!BY1?y;Y0DH4Fyh zx36m|Eg-6$TzRkpLlOup{7Tx-Gjnup?|aSV`>$TnfQT>L2KXICQuw6lwujAu zL6-0@b?4_5N zpShQ`c4J{3pDLI=?51_~Bdt5h?}*wimGuaD$KM{|9u_f;0p5NHOV|g?A~4NseC_B*x&Y!7gydz^edm49PUS%kuO6a) zN}KIC)rf9d^oe9rUprGk+SEQ!A9k~=N6uCsI-`&bQR75Rb3!j$y@|_rrojO#IgZn{ zwm5GgL`mgE-(FEHNqds8uZ?Hu9B0s_P)fzJ9nhkA&s#Myhl{<=xUE6fV#;|h3X!tg z#pYGIeI>%L@YcQT6jJ`CxFC`lSnOpRLjg`xi9Q+#3r#o(8LtPRA|wP9&`Y(Tr&Vi_ zl<|OENZC$_^FWmYxpiKWF(GiA@d26A{WZH;$DR@oCBVPCDS}C3KROAhJ~g=_`yA6J z8Pr@BS;{0x>X=36T{L`0_?rNf6+22Y---xL*G=ndY_v8@s`1D9l(9+6#td+aUSBBm z{{}Qxycp%>KiP-D+L362Rzf+rTnRtacxeLYlr3Wf^aXBL(2q}MjL;Fo8<@x5lc91T zkaL?uV%>(Sn(xN%mwT>j&Wg4X1zpobTW&8w^7GNjc7ITtmlyTaZxGg#Xi{1(3$28Y z*y=#6i0cohsymRN3mZPYEc-q2i|?h8nkgCU@nx>x zDeo~k$sLMsV02A$Q`4&8LFwmW_eaR2o(cR2SFGjQ){Lm#TRSwnw|ud& zqtx@xtiw--=D8rWw+eJdt%C;&pZOi+da}K2FSE=$FP8O(bmOG@&%K({pW!fLZ#6=0 z0R`-2qHyxHVBfsJPA^x7_Qmxvj`4hqG zU;RzR*VWvuzsXEW$z)tbQxr$JeFr|=8P^HO_U9`~FU$#Yz0>H!js*R*Y3U64>XrFQ z%z)681=g1zJD~g6K!2lDp)qs9u;KonHEqO%2=x;xz(rrqfgG-Hj{&(je=JzAA2KjPvdr%yo?(v%esip>{Q67blNmW9JIi0KLXZvm8I>8*I zt8S&Di=t1dD?!=KWk0q&b*P-a>0KlZn+V!E-hZc^Pom93#0&vFE1SHr$@QQydTfA~ zL&Lga9U&ys9czP~A<8f@Wn>!VyW!x-#mDJ5CSjhDQ0}w?kf>Cd!H3-a#yKu%>U!sw ze&4(h#t-DbUxtVc5`Ay}-h29yN!$zivKQ(vLKmw{zx6sSBGAQ8@S2K4eG8?jrR4xC zYYxy5hp}AU(>i9ibdg3I&^9%!*}jKI{I}c%hgo&B+S}g9=lUFKZb;{E->}7L=4S7x z#`9{dJ9`V9ZxPcOkMr#B?NPWa4V!TW6i3IQ)1XW1IEY(gWt48i^_;*OrT-@RHl3%Y zqNW`p9MSYoX{gz314_#FbaETpd*T$+UN-sgd@MXQ*zO*-_i6Z*-%{HIrFG#`gCtk1{+XT0D~N^Pej3Zj&Y35SfggC8zaRDJ31FT+JDExv~6 zDW-s4^Ixqz9%T?%Sdwh~)4jHdz2>=#z|(Y7vNl7vrmwXKb?VT;%}9{q*b!4lYYzeU?t#rV=iG*UDJN8oCK>PPuNyGwTd zNIyxAChsVNzbf0(=zx#gS%dpqaU__RxOClc4=EE)9o`QzB5U`xk4v!Q1)i?LA_@>7 z+{#IL4w==42&Zr8Ga*2`)8%hK{k4S-qGJ$ySL58j#caFH`*WVdX`{QtE?P&WQ9TIk zIIZqMw+=3J*SXXb${w05+ohim>HZELf0-@9LF@B3MgJtn_qYoY;m@1^=g9{@^Iw;+ zL&}&z6iR+r=j6Eitupp!FOc(hp<XkZDQqk-Dp|Yf3*^0 zCWwz5FnYO=x2B!=FL?q;Gf%xoO@0Aju54UYLaehwxXf3G)AK`P1w?@P@ec!C?de+tAAe*?E3xhL%N~r?FA>|qjf8d>Mca! zr zuEJb>+M4TG#^p@M=+#AJ5h$i%h!cNH0xopP>c>tcD8xPNt!I9*MfYMGakMb(D7tv* zB4Fb%wsXS-fZP&z{^O@IOU7bZ>kgwF+Z0PmqKJY;i|NOGUQkY>)$2!0nzy8jRN~(e zhMIoH6iXNavKl}rV&l{mqfG`k5k?J3W};cIcU`3~eEFB$BQzW3{Kc_e7_nie{wgFN>VDo#d{{pxRfw|^m5WxE z$(b!tj48Im>`-yp5ftJnV|i8mt4+X@(Z%#97L; z5?xySkmvy1EK?AK-_g*RX>8 z;ARu%4>J3LfbDKF%dq1}c%_QoXhwW5hjQC|OBpFpT=EY{itrj1mn1vpdYmc4zIH@p zKXbU}NHODwm}cB<_0XEh!uL~Que5gsxaoP3sf3U?rqf*a&Y%a2Q~91XuMbS6?+o=x zEwgcg>i-Q(IG{Vy=HFUF|>9&6}tLX`D*e-`B>tOijiGf>dP0SzZa!{qG@ZEXhw7i`~8( zxD_-Itd9>X19A20FpGXhcDK<^xK$ zI2ss?6w@}JITh8epAGwV#gPN~J6b$RE?QiZJ&O(2-uqwHy9W#9!43DXOLrROmt}s? zjo}8;2V&)ESE!UB{iy~krZBnU!K1dV;ReW$cu`!P55>PNKl78s`kRY{o6ZOhbAeU> z+t~|mLroQ4UVLHnrl^~$KGQbTil$}e?UcMO~8=n}5$~%S?LjvToIPJ#2 z{I6xvb4G7NG2w`Q9LGvfJ;MoD?f#pY{>k-$Kgz5=!aHY_lmOMk+Qw$aeTmZz5ju`y zJtyyeKU-LVJ@k^LfHUta7g!im*_E4igSJ-XxdI#x&Ijm!gf2d}C(}N5sXZ|y{ zY;IDT{=mFScFXaqt~mNx{gxqHVfGpkE|oBqB`s`<~nD?C5yjl0$Fr(VqQf%I%en+f0Ba3tS!aC$`*3%5G;knLB!wpwMxt9ZC@V8T%w2f*1G=C zp6oJ2Bcn}2)};6_zW>|*Z%Ef0;&TIzcM3NHDx}xm{S3BRjK6w=?(}fslr@NN(a`7- zihgMvH8Ojm!6^JY(-lTjUeKG6UHVqd!qwByg}ly2QRYUHI6pWx#^kWx6{6o1^> zT{wKQn)POBp3l-$V6gOAcSun!vTN!ABtpZG( z!s@rN!qT=;QI$+hRW1lSfVDGb5Y;N$ExWP$)PT`WeuEW$$$ zoY2WmMSKw?@Nr^>#Cs$bFmRmWf3e!Z83?z;B7g9i!F<(jPmLRG`pJ}#O~jSBh0;Mv znAlh7nr4Wib}>lCvqq}W=$uWP1x#(3;J7Qep01iCQVop3A@0VGV~hH{_Og>1`N zy=*Mi*n3o2JUECIB5WrVPP=18cKeTsA&LGR5R|Kt2TX*2ZBTxoBx^2U8>0AVJ?_sZ zMg>dk1{G>*43#aM<;dss{fKWETVxlFXc$ zVmp+gMlb9eQ2nq0>Eq-6IRdcZIBS;O4hdeQRqK}=4cW9i1QJ1w>nJ|Doc}i#d+vn= zJ3pvU0iTn1)J`xH??tVpE~tNqrY3yX)5ua;T?t+vfMpS1!lcCm#|ba_`Y%A1jHLyy zj1yV*T*pKBp*$yl4)SzQmVRNR8Y6<1R{pUdaOfjGMJiW(6xeD?HI^=Y4O&SL+qdh- zX|~zhCmPrEJQE}NIghx#J6Zp>Ws$y?du=+O?i=$_ulDULz@XzR>D+*9_)l7LIqY?C zF{r$Ko4;c7pCJZ}1gWUx5ojMXC+WdJpwNIdWV!i+_5MJI@bp~Uu&+uMkL1$zFcZ!3 zJCxOD_uwnozT~}++#lYyu!C?0_(v$Irsi?#HGzo2m;^FcSp;)Mx;!mA;2nb0E?NI8 zQb0dPptg$q@HzOkTk$FZu4S*~*^q zjFebelk3zN49&hLChJL4A`!O>m7*q^KoeYxi7qzupd2=J|43ZVa=C!Xr;BJd2e>?!_>Io%&BwSG_^yYivp4~{prA_5Rv1fH z&IFTVI6hjhl*=rl!dXV8@uB;BL0|`BU}Ej`-a`ZL>BRJOJ4MG{ijd3_WOKc z3K+4-=J7#3?$vxFPO!r_#cbpzJS0IM^@nM1RsUXRF0^uRAd6MYFI-=4!NiVIT#|V- zd)9V##>|!K)cSjn1HKB%=RWYMuyx+j{PVcMK?|pPhlgQ!Il)*ax*o9FnE@Hq z-0P0}cN3tm7X%{b<7xXB!!Ye0jM&{@Vv-AcU!iRA+t~>R7BDVvZ1kRdXc7K`HJNZ9)*}b2;-eY9yik5&7rw;U9C5* zowt0Mqt2W&yE;!r7*|kl%JIv`QM?gVCeJ;EEkw*}23QT1F*9d|MULsY6Aw9UBh?>` zrB3Xbq1!lDLYJ49UH!>KP=V%Yc)VT)4vHIcmE0mYUumb8q6s`UD)+})zrO;W1w~4M z(pXz+aXt)PU9RyY=oI>dgsCaAij)cF749?GZT!Tz2|xqglq2Vw}S#t@Pve9$;a>Wz}_Zc9N1GJ7dsp$FleCg`($xJE zMfifC+njVLT{u`IrGvufPqx1;_Wa!;>$)Fvy?yaNzX1-F^Bt~KC-9`K%hAj}Y^7~# zFcF8-y2JEc9l2v(=pwY2(2$_^&bSY?HxEQGv8gfUj@3V}7>7=EtlgcjY7uZeLLD9boUCNw2CRHvo$zFO5n0H{&2;L=8jz6F zjk+)HkHJ?`Hec<$CSaKTGx-VhK+miWLaXqXm`~^-+x)cRSdb(p?88E5W25{H_4Jb$ zy0uESneE*-5f5>ae$wbr8eAQK2UmRGdFSjr$KiwPtdu!CB;9ZOV$v&(F(@-V^mO|#-Fc`pR-0!jwR#?{U))VXpW5)-D1oGm{R04T|l+v8Ok zUE``fB<$$e{5`%YM_H^jca+k9QFw6_=V4u@WN9!x-4dYZl1?YhRza@mdc;#N11$(C z=taiB&ycK`O!#@3m$qzId;7ROR=Wdpygq)k2pr8Qw&F_FUANga*Ng5Kw`S~`a3e!a zU-i^m2iL6~w>`M=W`1^x0 zA^D^c!{#&Y>mL&ZVCFCRat5EbasPsVLE;yRIZ+*a#AfA~DfbXgZKUGkEGwl_4g9U^ zfth?Ylwd00x+$7_GbEjN*|K8Oc467FCc{rFsinn|E4rR~Lkrk3a-BxV)C0r1%`E7l z91fCZj57@`5r}&mw&&@C9s6Elajr#1%jq?}XKc#y1z^(kM%>a}J3c>IL2^6)&R6K>zR%0oKI$rMA9d*yfT9)X(*A&km2j0wD z`wq$_mEW013MxpjYZ4qS*ym6~`3g!CDA8k-8@s%Cktw$> zxFHY0jGRX-rx2>Wae4dL!$*aC==rlio}<~+YkbuHW;^k`7g2uUp2bB%{^8x!nKA#e z*S*bTmhhReIdK>Fg;#W%50@XE6ZTY)i2KZ=G`lV)Yqmk}kglN^xH)5vH(xviocr9a zFy!W|JMMHpr@jz8Pm4XZz#u{L-p;8ypZ)>--aoBRmyfQ~rkRy)`?o&<<-8SY?&OflK3%xq{k=I+6X}Rmvkc>txSRZ>sUcnl##@^#Grz`@TJd_KU%V5Ig;@no$na&~uY6MD zvRnRzWROHZ&!3|$k+v_7A8W-;f8g!k|Mpp$YUrECpZo)aB}xRm?|9;`#ca0(0OSw9 znD4493x;dbLNUwJHOp)98}Hb%?c)$^ONPylfvZ+trVGEHW*l~k3rptBs6kU$s=KSs z=s7p%=Z!0`L!wvn98Py>m&m!4Hp6;)a-IDIW?h}XqeG!$yF)Qn&Q3t3P2-H&V=&x8 zuBh;hMA_F!l&AeRAF`C^F~QY-In2qC(e)=)Bm<%=QnL5=Zj0lLxId+I=cdT~^!EZY z^g3C`3G9dF0XNK!U6F5P_e81%0*9UL@p}5xRW|^^T!j4a2KOrp8Jrx_GDVIHj?OMV z%tX+QJWE^|C-o^$@K7eack9C%t@-jRVmT31&64nV4>Zc*=r8-p?N0 zHVm2L9CLQ)`A*9Vy(%T@jTy0{ns3Tu9aLdqhp##j2X;{p!xUbLy@>go5xiDN`52jP z)i>D`<%GRW&8a!2sF$oq(@_4-?Z&N%aKX${uGY#jHH{pHRz7%>wg=n)Z+I@ktrU&{ zTn7SjNX|BI>B5wor~Bx90&Y6-kA4w@j!g8qN2uk#<^DcReSK-BZkJ?%IpD#&Wsfo@L8KOVhKECqFp+#w$Rlhae;;3tQWl8}? zQ{g)NArelUOl^R!bi?{kG1u|8mJI&xx+t5fAdqcSsR?)E1U%R879PrnX^MluISQgm zCy*KUbCzgLP9(#n_^4qg16E*%!jBza*42}&VK8;)kYg@Qoes7%|Z7NY?ujC zx;QN@6$w`18;|qZPPyBm1IO(r)zj@it9bw7VkO+*Q>QBP-*|vB(ZgmT6BHaQB&Pt^ zHD0ltbj97HDGGq46I^E%T*so-;Iy-f(`HDi;PG{PpdfU)#1SF~Q;>GH^!vwlmC+_U zOOj$m%yv`pg*S(DJVK6|hI0IPz0Sp9$$K*AAWBCQY1t7{wGRK?`-BDyjgB!R4CuU1 zeH<=a#E-kkEzaH_aTjD?83#PjpW2Ja)M)~bPairdvvs6Bw>}N8%3CwR>;Zb_~X>qv6=zaeytRYzY&?x`fq_n`E%AA#vTHdwe{)df6QJ z&VQ(WDlKEwV&=rdUUCSo`O(4_BKN0GXbk24u1qR?*)~O##q!VTDb`RMsteY!&_~X> z`LrL~ms?Mp7FtS zE)eXFJzX$Hkwh#QL@i;D6n z#Z*Xy?aMP&L{&)qB6$G;y{=7yJPI{@BoWemS4}y>56P*HQ~{cK{&@S3O}TCPQYo|z z(RtP(X24(2cIP!uiYe^>cfRR`f-==4&}QfZr&WD{I8Ja$YA{eSl`sdYXz*};mzI+9 z28nm(^MewY#sOXnz5Kw&%H=`QGr!B@+pXO-6g1e8s9^Cx@4ur_aIw1_TuC4xEm1lb zhJ%x5E9mhLYa$k=eA55<&nL7fJUDnke7zH*vh;=Ta~gBY{*srO>2^p!LkqZOdx4|$ ze|(dCz>Z-YN0Cx2JtgGW83_PsK-{IpyIK+Ih^op}rcdPOjb^XB%r=Gm%dmvN85SD8 z3Z>o`HN!akaomn|=p8@~5mmR9YX4q!O4)rk>73R1T(xXDc?T87TKM9%c&%$uO2km> zE1PBRXOFpHv#|GM?Ztuz)1<$^S3}{ki27L)MBy55qGMO8q?8(Ua1cl`n|j^JV`L2x z4Zs85a~X`8-+gvE zB={v#;@E^;J~uPf&G`%PBNynp(@?-37OT8Gs_!LgtUDA!r%W5ufxaV^$3*r+f%-f+L1@ z=HbiVeT2O6FxwK^d|-tMb}9SSfmFFn3T*QoH!xHfHVcA@W!&EN!FR}0N%zt!7O$bMN_tp|d=FwM&h!Vzcl4Jb ztOj1jj~P`R#YKmkbA)xHg7lBUZ8ptISaU@$EYiU`_hSJeZUN0n=YT_52cIx!y>dtX zm@}v#%&H=27gDvkBTdOCw;m4UugGd;U&9RxQ_aDFGeL+z5*Hfb;j09Wjg&`IThmA1 z3*%S*p~%U*vnO}QhVX?bZx6bi$@mhTYIkA^7)6&{EV=#5NF~<&MUVH>*=5VW(uB*IX^YvqZ7e*>u+DG@mZ3JZ>FWtk z^+O_+%8!2RUw@+s{LDh=m&(g;-K+(e_k_D4W)ILFgdq1$V=b$+Wd6<^gs{Co0jU=H zhOe2KQ2GPeS!ngb9A+*B$1mh*H2?|=yTFEoUqzgoL_#%@BPlzmz$RV`Gi*gad(tA0 zIIt27;``Eavn9&ZL3B>Cg<*SQ_087`OwgiM$;!4>tJ{~JO!q6AV8W{Oy<-$V3)$`- z@bI@?JQVc(N{#eB+auJ9z!M(-#(5Za6}w z53EdN1hE%;e8z)p8!wR5>6$`=>YZa_DEXSIC$O#e;)tU-ji?l#_sX@Lq_`<-G0qIf z2Vqh5v*&%A*W|;C%zM*Zmo~ngoLX)Aa73|l0Z~jQv8hJP>eN8 z7+AtiazdYcaYeMGKm&(?2MNaT?&ve_lznC1TvBa-8%7Q=%FxP7P zga1b*%Y?)dx1Gp3pR%byQ6dMKPPui|TO6E6oq#(zYhD>&Z^u`1pUrz_E_QQYUU43Q zetAT5$nD`=M?@F`7}jxTDubMtQZZh95rtb!2BK}bO-9mq^^-2XjHi;vFOLnL;xf1A zf4gk!YjoqO!|-`}T2(6SF}wVVkGMNOVyz%Zr75W(x#r~N7Rpts3dFlLga}vPyLC2@ zw95=m)OK(Ro{u+$K&I2)bwN*7VMY$g;eV9B`XzAWmNC}MA8}t+#*OF>OLS+lscPQ( z_|@>1T@8l&42e8^#J*X-;Oz_Cl`;i#pyBYD+ z#&sgv^Wi2(J9Dnzvv6f#^>@?>@iuY};8e;d+HI;vyVaesStBwoEbzt%2v7t(}9*0*jN5ba&Erolrs zw>_>qd6-QdVFz)pZ$F8S#`Q(L+IPn^!0rI7qa*cp2Mb^-*`&Yj&&KQ-IamNfi!y~O z%n!THHc*w1Prmz=3V6EH{pdfvVpOX(eb6_cImrF&C`ci^K|(en@`)CwyWDIdKKmFH zV*bJ6RP6B&SDEGV<4GwkWf zuS5K}Hzb^QrQ|52hx+6@*W)yC?8RwnSLmc%9KB5Qr|`K5t_Py-Tg23#sjl|7V|5vb zLWNV|<>fof#{NV;J`c?XyR=2&?|=~|cbBEld}UUzt0f@9NEJxP;0gj=KAWdSU^C!% ze3kS>w!vRV61u=6P^t0J-Tkx2jMpXUPY~XUEo3>LCJTB#QBy}Z2a}6OxD@)*VY2t3iYzB7(TJ^>}+!G4>SWFqyS_E z2&!~*e1ME7bYr1Ms9uAd)LRm2&yTUd!k*xbcd}D!!7=$F()t2Z(|OOtODRfbfF7Eb zI6432IcCXt`1Bce5YqyY3gdSSeb@EVjT-Ah-jN`M$f_(Oet~qhmuQ#gO-|%2vB{rD zWzWH+C5NtH%BRD#qs>gKHGuilWkG9Oa_)S#HGV>)uowMpTxzdc{{-R7fb1#e<+KbGidx%7JC$!rH}>3 z=+_Y#vI3faB~2f{rOZ|cGhP~H#Jq8q(pq?xzP8qrKm7H=3#)||BL;h3wS*1Rl0j_> zY7MJSQQt?vph7nMaP~2Q0-v2s)!+`7QtAo%-FERn(EbR0J&+3Fp(otS4>pG{rqrue z7#n_m_%%t41lUV>cw}PS+{v?ZFhId44pN;i*<=bz${sr(-@8bHB;P1mv%@QI>j?YG zDwYtQVsZ6R{1bU4hPos+8j{#N14mQ)H{lbSXr8>e;)w(-6Cc&87iX<`d+S&z&dy#F zVwqoFVEu@McwqgV(L$uAhLKvr#d=R%tac7-yvU7l?Jk~_M=e`UP{~eD(w=c!uF4~6QF^};2v^i6{Nv5_NJg&1Za&6y!4jSO^4lETF>pX63$26<6NeB^ z%>s2#kzn&~mFVJpmKP!kn+Y>b1IFzx#b%yRwIjmClnhh^Xh)P6v_QBu;0@NLoD~Kc zQW~r{Eq(!LsAHxjiCOg*0h1lD7-8EBM1m?i$%yPV{-yoJf4n=9{1$R_tKYUK3o-iH zT|1^C%}t*VN01!)wri^j&&c!DMi!fHk{tiWR!gIX0feA6H(U;Oo>7g^>6@njnuNTw zy#{11jF3T@Rl_7U{F4K>>oI~g@pW_>{k)!$w6kR$&h#&9d=nQ;(dSMc#$VRrWJiLz$QwA2+mDfi*& zDVKfO`w=0dq>w>jB<)vZ6N4oe@oxz(T2*HJC=?V45IG2>O4F4UBT6Jd3^fHo_xrPV zC~o~Q<1X@P+4bcm;4KIDG|=hO?fWA2EdxseWosY6euP;I*ORH5%PJQ(da1K>6Tg7$ zIryAm;MQR@wfd9R$-hJQ@I<@(rvG3Z`7|1KL4k3e40uN^^kfBP6dd)m<5lRL_OFnd zDa4R4wpulV%gb9`j%d(IG}E+tejIt^XC?-nc&yP25fZt4{qAJOzwbzc%ha)8%?s2? zL&Tt{0?8$JqC0lrV=-``czE#P4Js%vU(x$R?}usVNx-K&K229R;JoFvaierFiTrk2 z5I|9vLI`qEj&zniPTJttT0VMvqm`Gpi6$M~1zi_@TAiVxx8nQq>Jhx)70k?1n6;7p zy4kz%Gd!3XCDeG4X-hW2(p zG6GX(0~fhC7}pYh{XNlaT@kO7DmOMaTSn;)Zg#yW?!WEia6m@?{riWip@+S=UAF9r zNAU!;y&Y=4yYo_nyThkcwkolYBZXlkjI+OVeehFta@eYJU5SUToyl6na}}FmPjpIX zy}4tGqKSR?k>xFG-nO7^On0oK-z6#Z)+uSIN+n#eBBs?p^V~^z7)oPGG;o{K6eheI zbV`O^#OIa^XP#>?f|~?oMsE03$Bnry4~Z&QQcC%$(h zOTrk=85$)v6Gf+sv9SDd(&U$HSSeWAxyuMLi6?BtLu!(Zo+7=Rc-X7)BM8Rn+k9Dn zi3tgjva`#QaWI9Qh2kGfx?MJfCnL{(^<7Gw)?%kuva}i%Y<*Faos70Q4iMvT7nTd`r zSi&oV(X^IXND8i z3*sF9vY-Ea_%akU4%)uvJRUHnp%FKuGrt{DkLIE5t2Tbk-O;<3+^Xype2}mUzJr{v z%MbP!WjQIgL5kG}(s*7;4gPfdTUj~aN_b%O(gmq*;~9Nw-+@uea{W7z&LxE{KV>@k zI=Ys+KL>bek;C+8w;vxA%;#=RwH$9_oI{b7Niw>Se_D~N{IxJEn4SUr!JJHvwrQut z=BbC`<90&=TZY6~+xU;fXI&3;c8>Px5kaC~VMgDw@bCPBrZXKM^d~TCYPrKA^aC^O z*}p4D<>K+XfiE`jmObo^i3!@v>TL+?(pHd^ko=<=Zt_r5WzGr@)*JlGh`8kpz=8$R$D<(pDm&wQL!!)c<{cOXU5JG zCq_D6X`rst6^5D-V99>H`zT)@{IYNSgkH4E@worbFH5v3H0MXi&t%Yt4RiQkZ;cQ6 zmA8m|Jw_kS{3JXJETV&rd->~^AA9Jx=Tm+#J%g^Lvo?{-LKCma(BRmePIkOBkHMZ% z5eB@2z>-t82nw-#lMFNRYToX}XHJ^k)CRh7hN(BjYO#2>ajlmfrsT zz-M|W$lH=@@^AzYP@-`s!$N7}N}#5DP3xt+Tr!0g(jIF;V>-QJQw5B7K^B~_eYMt} z?aRx$gL5ImDC3fRegeQ-)Sei8y`W*;xO%9-xpDVX*^Q1EjC|HQ8pkSDt%ID%QVv}C z8NcF0%bss^ID#m{&g0OVZy8~GKQTNmhi^kZEIE68M18sJz9S7qpjePaZvkqelaGU!z%E^fsr4Rg=(|+LJv)yW!EkXf(>vFxH9J!w%9;F(sbh!k9j#CYc(JEJ zvEYMmEa4?(CJ>}Sv!Fz>44V*Wf;=R>>{`tn>jCF6Ik%f)GuMy}=ZF85%A zd=nhloR&Q`1D_nzWobIVA-5QM*>6m~m#35B7a>))9;0+~0;*2S+fP~W|Ev7W_$ z=9@p?^L>F`F>v%}9j$+>KmcOFp9Dkm0#la593UpTSTNUL@q`S2xm?chplLeVi%E3M z4VtlrYj*(VIYwX_0?ONcGz91aF&&;Weq2TC#SYJ(KPTzyZ&*@@TtVo8kt}t_CerPN zMw7FA{RlK6qXY+fbYSYe&m$E~yg&e{`cn$TtfWYUloUehQ9R9Lyb`|9Ra#9rlfeZAk_&}pQyTpGCY3V4j?pgmt=ty#LKs^wrLHz!s$r%6MS02n zp(AeWqUtiL1QxSW1d~KUS=19HODxN#7uF)S_99F!LV17dHlKmN~_UcMW9cV^pw>h@neR}q3 zSaI<)5;bPORG6d^I{CC5C?i`Y-;8);T(a+j6Q7I(Kk&i&4e6W6n zO>afs3lE*4xjy>QhZq!v>-_j#w7c45>(SKL%7MWi;9n&;1U1=!XA)o-{)G^~y<+m% zA)IwzJnb8R;u>5dc6-U^@KYSziM&;FZs3U9&*hZdbb8M3x>&~5MZD&2-3rQ|akHt( zhBYpW5)7r2){~s=x4Xx;c7+)+jpW19i~jrdrmr-M}nXW4!gCP?Ch|=0&|4VGzyDRV-F&L%R8S?Z1>jj$>Kr9CWoi z(xt#Vhg&pa{CJ0baWR}LJm-5+U6qu`P}A*SVSK^a8zvT+e)sop{S(QtQAC0KZi;|v zHnNyd*sF$BS#5({G2J`MD^wh0)E_RwY^k&n`E5qWv@9s5dAjsXui^~}1?&cKBqLS` z&qNKzqT*7M6+rI{v76vmi!JzI%ta^R6Yo(ajn}r!dPpeT>pec3&q$~1o1rD7Tkvp9 z3rGVV$jSQfz^~K5r3btWj7*3yDTJ=e(?p*>6AZt`jibhkmPA3L!U&nOt-uj7w5G4k zQlzJ@AOSraw68cK)>-jC-^YO6PvJeaM|-QA2WGD5a^G(01EbC{7@k>|M~xq-?jCKx z?#$w3SRzN19Hl7^Q8x>zX%du4V_;BQd#;*5f_?KXa&ZN-vAow=HMKs|D(D)Go}ll&+{P>*Dk?8R||5uV;@HIS1>p@QI_AC6M|9mMk%L48|?nPUp>kMA9M#4)yJ zlSJ%9HzW#Ig3Hxva3DxggNcTS%;#iAZTtr(n^YkJ zg^CG^fMgAjEfW?cy@&|xWMG|)(c}zL;}6|cBxq>hx;>nNN0Gz&{)`)=ShE+|}h+!}Y>4Y)UcA%DIU^T8GiczMM#{V^dT z?0h%ikpO`@P+Mcbxh<+`&r8#Go|ZT)HiglQSLic?kPlT@(8>fp+OSM09PB_p^)Jf? zKx!L$v?FZNH$HurLYt*;B;BMAJ6$)=h9nMhM->ZjL9@t_n4VU{wPc^ukYy{P`BTRQ z1eMl*xTQ2k7BD`Q%g%jUe<)e0>~QV5_cdISfH1wy`-T=w?TIT(&lS_WEL*JJw7IlG zbCwKgWa5S|8TjI=TBcdyAxs}iMG@B#rSL5)-l9AA+N&5hNAcae#$B4s(RMoF$}?-i zSnCo2mofuhI#Zw6&Xx$G8pFYj=dJ()&z}H*`@9m&aoJ)Dqs_{9wu)}!Zu5mz;fJ`+ zSYIF9f?0SFa8{=_3)1;zTRCvP$GXuA<3e^yq}Wi&0NLcPlVrulNAdwRpW07&oW0HA zvmKB@0^y!HeaX|?oLn{MbosLRZF6lyN3_Ed_0sMw6PWmY9sfv+$AOO~1I|G&+ubi` z;9=iJ9=B(OhI@+YlEZSXu;`y)-HO9#9C1tb=DqQgMGZisQqv>EL8`A5M?p(dEVbV~ zZT8AeWRcS5J{OMDarhqUn;&sh_GUg)8BCAtDr*YnPQb-%Sv@99qV{WMf3GQQeqP`S zgHRf8#~UrJ!QW+cK=P-DF83?(!oSB?P7H#Vicr9^;cbOrh1<0Wg_+KrT&tC7n?id2 zD5V5nk;OR%JOPK|Sr>WSVFRz7$p+k!KrB4W_rHHJnHCB^{UZY>qw#m|nkAavx)w7& zeIKu!Xhy5oY|t3kld@8DBx&zBA5vAPC&QA$fm6dL28#FlnkAE?^A86hMm2nQkCd=@ zde3B2TqX@GBqJ4_2+@?(e;z%>YUm^ZFPl9jCFMO2^FF2_@cWX1Z<9!yRg%oq&E*i> zc>ll{W!3G3^Ss(dch3|;lro;(On_;v+Sog!fr9r9LJ7So#mSCWyFp3c0(P%IEU&MF zAe*sw^*XW6(=XgN+ooUG{@UYxvXELA;ItK8v3#-NtCH)p>kdX~n0|ywI28Wt^2*BKkH2sLX&tR&EoZ0(^q_K%OV!{O*ppj1Hh=ohj#N=5wIR73-sXKA%3n z33zxtEkZ%d-F1G)wlg}%07DJjl1(>1gLK93#a!>kwD8dp!zYpz{LdR9Sa~`_ z!jFIU=cQoI-~YvBNI%r>iI6t$60bny$4Ih2hkM)|YF&EIUJ&zA^Tm{0a`A@Dfp-x( z#_%Q-XY&CZTl@8Qw>i9<@n|=7xhy(u^t(T9I7$gb4nX?ZUq^;J@k@5%lbPqW+mEoV znh7d-#Kc-r3$p|RgUhO-Pyy$nfGjS>E^WPNv~=3FlJBcW>S-t*m+OIT)@6?qSzeaw z41HuoS(O81-*g=UgYc+8j*V(YT6Z_#FKPGIyko6@p7Vx_?w`;A6gitYHtkF*)ILkp z-ZMf?fdF6;)$at9k*P88B58U0PkubT1Hf=vVv=w9zt<<wuqjtkLUkLr5X6=FXRJxy< zL`=y`Z1HOtQwkFZTGSYHgjO+h=%!`L^nZ2xEsqDTWfn4n+p`=y7mPI9I4H3EVPLxp zHbs5D&ix*~>Fa`RrA-8S;z(lXOVm++6aTPQ4?t6Hz-G!;!4AuRovrj^DisLKyRZ;& zYaFpCp?*W6sSE;DJrzqe+r9r-pMQ01_Jn&|50vKa zri5|1r&1_RfWRia(dv&#x!#4HLdTfQeA`FLW`08zhhC~9fs!0HMid1uP!XR)Zg(>I zF1Cj~XO0@*S1k0nVgN@G4^_%X{TStlH!(%#pE$zxn`}bD!G?}ASgqX{h=Jpi0k$A zLE=3~9h~W1p|ZUQsm8vurCXza{!xXhp<-*8Ic4SQ7S6H=IHccYsLziv~1X{ zVjrmZrME@&VU7Gbd9pAH@lhW8j8Uijw9R&GN%wO3H-dnus4PET{!RB>Z>HnVV8&*! zfJSI?MtXc`#BA;`^mhECXz5dtOb0{(mf@gXD1wv(IQIbK%zI5GNLU*g=|3x(c1*LGu}>2S>oVz71ztQ!Rc%vQf^y!8F-pe~0AFyGq3^#nP4kkfnL+q)7+vo(YHsO4i9Q#odWk$<9?)^2+A;e7~8bF#_G?S`j!1y-h<^ z?x!vZkT*dmLll)(X8mph$SmBOww|76E#;g3C#zZ?I33mFx=fuHF@I!--sbhoKo9Sw z5sgy}(vH9Lo)d>DB+fZ+_j&!=KX}hbXm}8$#%`S($I`}ed|)4kWxLM5KXQ6{%C*ht zKSnThuiN?3(2-eZwZ$TX0u?oR7p~&6VNSMgo*+MO%6U@#?ab3dFh^wATWLxz ziTR5{;=^Q_gdMAicUO$@hY*e-=lswkPZa(=u#fesLCR(Qn7;+kb#_^JqlwsJtroHM z?)>E}Z^|%S{@&3Nr(X6Y_xaIkU;W5)PulGL>fN?JPgr_I8T?8VD4yE*K&{a}FSyiL zd5V%0U&}*;swT*4&Xg34gVF=j%UtubC+_9x1zvd}Zw&3nD6O`R%C<=WWp*HNn#HtK+{o`YW)RC8C26HcX&fLTN< z)M+sF*^iMBJ%<(d$4$AZZYHg^X0g~AO3!8R%DQP5w5xUhUwi|fh}Eq*K1aKBguTk(%(`W*8s@B1G^6Lx zJV?gz?|v$o9(rKLYz#62onCr8LGGiGezdEfA7*rPG-C#-J0rg2ir#{iQEsm1n4|d@ zu3AbYU#vq_!LHKW)5;sQ-+nPXatw&Q4AgRh*%AR?74QxZIDouSBlo#wb-_zSDyDzp zLD3KEF>$%8h^W8bPi-%>sLw>5OStZufl`G6rmAflfl1b$Vru$|^U&`sY4f?&?I^J` ztkZck9l=NFgF$#w!oa~fhYHO&+=RBa%Er?$`$XE!i`|Xq47MdZ^{8b7$RcUJTNW6u zbQeCKkYf-xH!qV~j55MAH_oIy;y5z0@$uzXo~`P(f^d^yLa0oXS8)1fSW#jRlntTY zCQ8L~`1ojHv&j}*qw3V7oHW}g8C8VpN8AY15h;MEq=nK;WyBvqn4$7f5Rx*u?TiX= z%Phm&6GJ2(|1PZ~$bUtD1f8Ku#Ttw$Z}{`m^LqP-=i_#M4lz9+^{?sbWeh)^FaUZc zu#AwA5!7{kmEt5EEc@(L%W@v@d`Ou$!s+o38z)Yd`kYKREQltPpf4)wrxIaX8w<%> z+`tO19R3Q9kT0xFcHr6d|N z-poxiVrpuuRUaND%&pzm_&{a_#1KOT$%b_)o%c@u=H$RB5#vEbf}(x_k_M1}(H{ZX8`#D+ z`+MJ`CODy}-e6t)t5`bUURU%Bsr{Hoh{F%2?>Jqql}wE%nuDB=ncwLI@#TT5MQK@ zs$n#kX9$5g{n^RqM37R_>B^6a4RiZjXJZhkrUo4@#B!f$P^h8Du8v!Us%OFM7}@6Q z6hL6$Hk4CM?7a}ifDus`y6FamfNd{011y?m#DuWDf2129X*DrBb1W3KlY44eY_0{9 z8PHG;74T^FV23%XdtTk_|UB#3>XpTfAc`XVx@&+U5bI9 zB@ig{mJOd2r;eac`?k>b2HV_p42UI`%;f+no8f=^=7lak0MzQR8uu}@oGrWl{+&Gj zpMj8yjz1QFD?NPUKc)})q>$J}7syBJvKogLFk16w@?N0Lv9JG@H=lUH9#Qe4HOcP2 z;Ub{Oj>8-~XDv?1OssBSG9Of?RSXm>*9m#QUW1`p2*Z%8f!pAyo zgL6G+{%jEy>5~$7O?a)J%TVIn5BK%2yRPp7^f;Tem%g0Bkvw#BYhAnb2^E>3JU!7O zzLlaIX18`Y<-Kfz865s1J>FHOD411gNW+;36VM)XQ&;H{_M0O04 znlMOKocJ#ClsNCu_N@TtzW(}y*ULh&%b*NY*Qe<6(Pi(i4ETOE!1O|vu@{%LA3}d} zeUYc-q#B3r9B}+GA`w){6@|x1GxP|V76F&vB}~#Kmtm3}^dUiXrm(X~i@+X;_Q-D? z>HWA#k?8R9y^kn-qd^jV@S);7l|21$82?o#_lS2W=RSabEMS0uO(|8cUtpRt_Jt)f zY7PAPi09#%vvUHBHItLd;P`PN7jO^HeXOj>Opv87x>qPEfrEjp?1-@wg@8YBBhN>S zRAf|h<}MqtB2jQ1kOGs+YAiX+q9`y%1TOsNznR%~8N}{Txn%}FICjMvKkg9e8ccvT zTvg|jv5!De{njo~aRgJ8{@e-Ao;q&&G(lWhRb?6wK*?tu01rmZB^VnSorGh1^+(3b zFDe1gRsk5w46HwQ_bX~ltqzWGzN9(tI`)5$=7*hCL#d}(D>-P-zaGssz1waTNo4nv zK{np$-{kT#>+AQ8OJe+_%lY*c!5bx~e|PI~o3DQKqs!-np7VR2W})`YDH3fmvFBnM zYU2ZI@<<6$&(#&aVD=Qui13@kKSW9oR94+gp3CR2jeX&-a9qr2UHL7bozjff2i2Sv z+P2ks957cI(T{qlanoaPf^;Zh-i|$x({#?>b9B5#GE7jWr2Lq*TSWg0Kngl@e$85D z{b3hIr8@KU^S}H#{bBG;2M0?nJB9?m9q~z9lGo~Uc?TAZN)73Om3kY)=*^~^Atgqi zR8HC1qi>i4dzfht&;YdOj<^>zbNOYzAS>vm_?`AH$v~kyL*LpsS%`DKon49;4>eX$<>W%j9`YPW6{)r60q&(Nk4$rGKev`0eX>U~pZv16h8D z(XkeiHhMJ*U-yQ>_R8-=;86?R5J zfkFPl%gPZqO+FP?Y*efFGxtC2OThK-H-0(CeqXV4ad;$}VMf~SK!uMF45*UeTnJd;nF#c6kW^B-q`Rd%6zP=iPU-&M@854e zGyK8exU=jo&;4BII_Gt)m*7CZxkPnX1zp}>tBr{!ET5BCC#&WsEB%z8&m(X4?z3pp zfT_tO+TjichK#lD@ zC(ArM%+W2+Q7_F~+5;=e(=f}IFp9vq|ILl0z+fqBj`gI zQ|&{#g40tu@}-60qx`Az%yd6$>2boB{AOE>YCmE{zMY{LEnns2ness!1o&T7dtx`| zv~)HD{Dvai+^l;e=kIb~FpiTFbd(#RtUUBcb2H$hkKY&{<4$Raa9^+g_?#&M(ToYQ zctO8x=q{}w2Qn)*Mt$_uTXXSczJA8OOG0%zY6p*jXHa3@X@6(HN`xE25JPm0N6BeNN=r%*FoQsL zIMi_WY0Bc~_7EF~QwQ0SCwcGWu$k-JYnDx$T(Eq+7T{h-t^(g4xtv6bWphu+=?CBqtyINE-JrN54Cu_|w@jXd+H zDMIs(wcGShgr!IQy0wwrwmo)^8c#3wMv(dtkI&JG#Zh)c*E;FbuNNPM-n^K5s0g7s zGPx8K-fhPECsc|Qy@f_d_KipOVHxo}B%olhNYiXD<{E-5er2u`EG-N=Bis&Zi-~YA zWB9*3vl5FLAR)nH8WUJfj5@oegm$lev!3?0f4HhLU^3aJkgs*Byu&o!nOH?Se}~t4 ze#=Tlf^KC03>OFuHgcO()cQc;UQokvGvnSK^ZDjXp{lJuda;{DGqk7j^JBYUo8N70 zN8Q$Yq9j7O;)3>1@7c)2qz|z_*mnJEuMXEACMOFoWa_)ZFUZni!9Pu`^dr!Tr5L}j zESdAX!v}pEG~6>9r;}MvnCH&5P_U5cK}a=lt4coDT=`Lqd?Jw8=$g@1!oWO#q>3Om*1395a%Pk?rZJSH;X!ve>u7Xc&S6lHVuCUCvCpzBQ&x=38Vv!OptY

    AA5z6QX=ON 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

    p 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 -62spBObBO@NyNHzpW^5~Ak#T|n=$JNUaU@2uO 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�^{NNz6G;rxEO<~Bd<5Pb;&8KwBnSbza zFA4wf^+XDezmdfYfcLH=Q_73XFtgT?_y02OV=asG)PQ}!Rp#uz#rWV)8OD*u*kptg zLuXmcwHqnQ6Y`3j2-g-Fbd&^0e(tUZ$~KF2b|Bw9ZYywN5K|mhaQ1c&5WX27qksJ_X;Pi3>s(21WwiV4 z$6WDRowr1&vk(&Wc+1pGiI1YA**Ys1+~slbk+_9-pmkD)Hn)e`Xv>1m6I4nL9B!!) zd`k`cfd1{j)sZ7TK-Bt)qIWPe(@VYi!=~EH|0eaGm63uYeJudgt{hCeo zdS`ctWyxTNNPs2H$68Ig*AcnD3Br4+q_)iU4YPU+%u1$6)bQ86z4y6*_eM`Bh92EA zd`&U_`@2^G&*YrDSTW+!c$|kD6nEzIOKWPfj`f@}oa9KLnc3<$`Y1!fne4zc(4kx}x z2}Kh6^?g~=fv$_7O#)A*TYAD%{S(YLDRXQrhTer151abiq8N*5jeYcCDVx)5lN|RY za-Z=14)xVoe>Af)J()lmeA&{2qH&XjeLC-@6vMm_YK*D_|3x^(&FYmg2sts4+=!2L z96LR6uAWj1)ZVr{J?w1vZ7G=HG%0V$cc*6#5JHVUA96*DY!!QJ{nPk@bdtwaxWxIYE6&!F> zID(L4=y)Y@rrIhqYBf0RbIs{3MXjq+`dbB*SWVv;pWTeL_3YiEFiX6B9pSjXm5GJ# zg4CJRUtefCGc$A8`iYJRLno-#X!a}(CCa=;ENk4Z`XrX3{XWy-yy$5x`xzoWz6mf4 zUs-r(hgngf+eL0F$L|S+Bs6a{dxKtpUc-mP6u7wCr6DKw@8 z!Ef>HC%;RVO6_Tez=Mrl{8rix*E{`wnh1BTQ+l6P=J!#T4w0?xEP;CJt@|mBj6#;N za~000OxtPxU8B~Wi!XU%(OZLw?~b$|j6}2@oZyy|{3*QL46OW8F-@P^d?i^`EUGug zaa69djlAUVRb=AYPj%a;;)p!4Lr!)s8F!ZCACD*=pFQ2R-)jl_pIwl0-!cu3R_Obj zN@!|nLQ==C*jbOWP#i~_1rhJheN$m`Aiw}wwf@-0{FJG?mF zS2CK|HY6KLKYuUxcmJyGw%jLAbKGsBQ>BzvOM>@w>WZY=<8HRQlT{upHrDtwZ!>k- z2R1hHTG#3nrLMohI{xByCiBG78Wt9|RLoYGw8Nw0oFx2`UN~v#hgQ$o?s)&d3b&<{XAR%!mc1nLlBJJu=J~)mJb8j3?D2%P-z-7Pjuvke7v}mM`r7PqDVg?K`0)UulLwYe69QjKdq)Z| zecjK63>!RxuwQH4=vL^jEwp(%q%kK}NF@GoK+4sd^oeX9(ch$_fF$_m7n|OWRz+_9Z>Aa&?v)~%9x(<`Y%+bQW}Cf435AQL41jAR5QxIB(n`fPk; zVOTzzEjAPYj zs{wx*Rw8d2w%Iu`P6eA7spEuw9$(QV7KmZ2_(7tc>qsSXP6);_cK-b0{LyL82_D2( zA_n#VZ><;`9d3}wqL4wTY^h#ro)MnGymb5fm$rQtHtXE5je`~9S=liAVReP;`Rq-t z;pw_OGoRWU_>~gQTeeh=kwSS&OI%$r5{{${Pug;&F_tNv^9r+mdIZwRdMk!R#qsaD z80KsoX$twDL*>n5zo?;zZtR_pvGEG^EgoQa^-_6#%Y7$NxZjlSrC$2qd?T%Vp(lIF zsIjJI{fPO!z#RwBhqXPlSzZRkT|5K}GMDf3H8(c{n}q7~*OtrH11Z4RWd+bkq-QTJ z|8lOK(w8uYgj>Z*_x#C+?KDMCSbv)Ey=>I9r9kdxwJoOk3M4dpm~wS;Q|db5du?N> z>OeDRGk_x5#bFy3rdljrGiT~MN~MJ4m1asw3^jX)+3lEJjJ(JVT2QB5(-eFUx14{< z4qZ%m+@G14LTiZXpdt38MqXxd@->HAv$kAiGVF%L{+CU>vv|3sHcAKBc6DemiY~ep zzx3-n^YQy7`}@Cu6-oA+aLqXDl*5+NX-l2LtnTi~eK(A5U^ovpc`5a&KE2hnaTiY< zqz$k5%1QuiTB91cv0G-0xh#>*Bp>t5DVCCH9QOrJzwT>sZY7Q8C^mVanc ze+DTAiao!L)wW%rI=~+0?&1Hd zNOT`(BLw-tcaZN<*jYHHJ?o@H>*%*a{*}WTfp~EUCGJ~YS&ew`(KHj%tyGy3Q;D)E zAxg@nGhyOXGzrhaRUyAJh@U)gcz8M)M@l8|-sCz@3kM$~5bz4ln6`$mg|NOI?jSFv3zD-K2eCmI=%8G*0X5 zF+R_%2Qw3S_>h4Zr7C; z(!%e3az03dg@Mt~*hDqNqPd%CkddBVvxg27vFF0ppt$#w02p11D@Baymm~Ip_}!T$CBm}XA9r^U{LiwYOkEqkRHU~q)yPcp`H`9zo*);OjgTrXM}8d+J* z&5#}L8{RQOn`gU^2FQRr6zlw9^JV(XRaj9` z(L>UvEdOwx|M=S1yLo9hwXuD9@e3STI>7;2|M{=z(XT?C zwK}E8YSdxmC{5Fxy34}6A4F?4&wCJZ#HJCM*w<@oIl&yk8=n+R9PQ_i_J2*09tk?* z&3(-IyNb55D3##;!h;8IvnOmF6%~{ⅆ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ݐsteU9&xJ?1H&=3eU}(TKCR z0T`zCcEpB%oDe-#eP&3BJw!rRK;+#@LFMOjUCE+%%wN@{CI_>(kH0*$?R0n{SH5L% z5g6#*j(GtBal;~r6x-C%xnt1OJ^&+$mn4Q$d+7Q2JA^S4l7^KoUNofhSK~1PO*r%H z>lxSkuN2wNM;oJyvziWq$a|MS!VgT6;jGA#slBx>b006fw|=)sBYKc~ zNKPWiEFxV$7Ke6FcWnNbFYJW#yz=^A3bqo`JcaW zB$>9^V(+Kb%SFrq5L&ggV8x%Tsp1m}wP{gJpUcM96{&)Wga+PpJicIE=gT-GT5Hz- zmf5vf*%1<-W$bvI5`131pQhy?2tLG5AXKV5lThOS!3v71n_I*Dh#5(b`>h~pV>x|5 zjiZQR&r?LF6(8$SV~Kp#Fbuw+ZG~j5y16FGrZ&81<3#hsXKO<&;JBqDnhA`jF9HLH zYmhA+XHKn;v56DA7vpyIbN)MzO@=N>C;~}UXG2RE=J&pgL`1PyGa~H~iitTW1u8gW zpmC?qp|Uj&=w{>0R!Y;k^yy!-Z9)rJhrM9ez7K7@cyRnj|N62JN0~z}?8hC+he+?o zZKiMhMo-87BnF;Nl0S-pMAxB$3?!kyBtw7iT@^EzQpJUbOx`cGi zLC_Aaf2V;bvZ1bhZu>EQ$A%V$oRVA$CDUH}BcuJ9!dGHwL61{S`ZN1C0|Ny>=pMsw z^tq=4d=8JE5Nt*ufblrNp^L%n&#M@yZS}?g9x_{MMRw=~q;>FIcAt6~Tbv=93xv0=(kY?|4Em}=>X!Q#UE0Fi?n9-oykOmP zum`^JpN>?{Pc>2Q4tZOHivjAGofhcvP}L+#%(bY`riIME|6VXIWbqtH`i3-peFp#7 z8th!D*xD*u#k|DA9I@bpi#9~U{8gEd0`F7FOs4+J+7RE`cqPFQ!`krdg@K&M#hiSg zOcyf+#C+{$Z{{*Lo5|$<{EHF?p4haD##3HtVd+O4Va^QE9^Wkm6C`-xq+6D|y0l2M zw`G!_pfG}a<xp=y2B)!c z+7E*joLcVO|B!GOGg*bUTLWfM`fm3m_Uk60X9EC0_Ei+sqES$A)^@KQr`B)k;hlvA z8l81x*BReS$;j?ac3_fknT6aebREQ)xOfvIXBi&F@j`-B3gbjf0tq#8h|uZUxu*@v z`We4eqcgw1Mj4#27gYMP>67#X_p3)n>v3Ky8F75)7z8UL1H``qiJAQG+|1gRz^xRtYPRNpG;Dj=V`#oi$$3#C z1};0&B5M348{S48zL#u1p0B0;-40U?xjhNO0)p3ES1LtOjR3;tn^exzmC;*$ zMu}s?iUDz*XNwhl+mbYv$M@A%;+%SBECtS_-XkX*>c|n#^!U#o$mSUzESWQ3k=J1A zVqsBgNz0=x4#2X}u;p0NRXC!v*arZNuIuNkix|}@)#VyTqqdKzez&&-@PBA3+RAiC z)W&!LL-~U=lZUTt)oKY+oF-?J^JfxB?LXAOd$X0?weN-E!~oiq`c5lSAmQ-CdJKB9yeFyDhh zkIjJp4z!+7$Z&m;F@H~1gvejiHTPkJQtx>B>KmnFb{4qM1P#29;-`xz84FOCl}J-; zneLx=ci8dto4PfQsCb(si?>EfqCxT`Dqkv%nR=j*pPu>f;P|zt9!-%om>d8?t zZ`TU1*}Q5$edxcu^V=N{-K8dfeC$X?LF$okhsE)dkl_Z`IC)EOghg@Uk(FYgZ#YiM zuu=st><3dvb+eMjcGh#l>IsP$tAFn8t4+MnO_wW{{X8GiIr;HQ7r+9A88aZey z1iSnV{Vs*pj1lYuR^T<_GVh%5^Y9b3S5~CBq+7PERI;X%Rc*ESJ>x9VXpqJH0v?V_D?cow=W4;F{vo!%|&BFeOKAO>iy){;B;86hwe0^ zj-5vo-Ai}oX{KBKdbwC1-F*K!Mk0lT@`w1z1^&`y~S)h1RcPYbG+Pt~W>2l}BFr&prSZ2IbD$Xz z^faPcH@>)H@JJBQEb)DMq#l^?gA=c2o&cQ_)ItHK5&$PUE?Q7!rLdE#uIBj$df6Sd zwYGvzuYf;p79&5bJ-iNlR_18pCWKh81f++d`B;yW8md{i#|1vsoQnNAHL3ODJ;9<@wr)NYsDu+hgwqSAAh~>dEySgzwK}3MIBd z(l@hmJc+LwuuVuHcr!TH{Rbj5O)?8>;bQ z+4fQ+sv1ryT_O0=QkNV6kk2Bm{HR&S5Koytf|p7 z#>N7_m2%k1>`?9?%fnPg5zCLks4&VMU#0{^?(BZ|PpEfAXzcdv#E}QE&8#=_$SKRQ zL%`Zq2K)`YT>BlTjKcMo$Uk3Vl?t`NMN;!K3EnltHzPsednmmgZ=O!+#$A&T`^Jld z118o_D(lF`FbC?{lfCl&tNF;BwTXTzqs6Z7B?929wU6h3jrFW_v7ivU3t+Z-Y_Yzf zqDJoQasZ$_V3tU=(Gw@cpp>waGeQ;>pmZFBXgKJ=(!x~!&Y;oro}VZ&reu~rjNzzR z7CqyAQ{4Y%N;IVF{V#c75RJ$~9NjBEJrc$G_a1Vz(QL3<5CCmw5^%N^(N-$)C0DH+vs{ zKen)RKclE$AF8v2uf4b$DS%o9B4J0a#?%>Q{GABLPO6ii@#%B@9ws;kBbr0!X)D*P zF+d5fkJme1>H>epZ6Vwvl}7Dx@0;N8JNKNn7q_7UlNn*{ye}Bfz5;ng=m1-n6B6m5 zS4o7nIdFGGzArW=;MEW)A!s_^k9)N_*&?e}DD6zD2>f*mncyPqTulhWQKu=CO z2+=q-Yl1h}j`^SVvzoC?j+AH&4C#<}2IDta3(JgL(_-Lr^|L*}qBQP#8c)8qLub8{ zetoDn95tSZmt9!_nkpsyNxEP@*g0d(n^f%F^SG1_l14!4G$7CMsb8eyfhS;lu_J-$ zp(O_dyG_lAiW=|mXvQd`MFP0w0A@%P2kr=oT&7gl`Qqs zHfoEXAF!lC!@gX1;`j1D{WLU=^o-@35Kq$7>R}G&vMyUlz#pzjRxSo+B+Ly_HA)Ur zyk{V$5$T*BrO@5@(VU^h@3yBdPDHbSU~a&Sr5==V6TI)to8Dam&m08u1qi+*iSk;5 z+f{9WQE5C`J=3wkt1>?#p;Peiis1!S^md$}93$>~bfMa$lkUcb~JJ-9tx>5nz|dI;wT7W1Z=u zDwGjVX4DYsV8SYKuyqLgy}Ne!EcbBbVa1GFjIc@^b90L`iE`u;DNEw-)gtN5LNMC3 z|9f;4Gh|IUd!`PkDM$an+t-rqhzUYq@OT1GjHTu=dqm=t>d*-r-)@}1=ten!lg!+( z$`QMU)$%wOM_#K6w1r#oM*|GLvqrdc`kFT==aSWu0U<*9wux@505t3=iK9P#_#ng% z%sn5DC9U3sB_J$5D&0Jw_dAaxVys&vbikKt5jm?YP25{Q^yyt?L666ia7120J~%5BSOgW@F1=V zrmKD$;MP(u?|LhQMXkxgpk05YHgB1aHj3Kip~F)sep0yt@Vpkimi_ ze`2;_K-l}9#=F*&D48exn)Ux^y2_v^ySGnCOG$T0Np~#Gf)di*EuGS#bf>hmw6t`W zOCun$Ac7#B(#?CGcjiCC7e2u3zxBIj7FF@l2CHupT&+Jz`l ziSXQmE_P6mT?J8Ed!K<&13hX@xQ>IjGiTT)Y7d>-?&rI;ZK=|6LXdfKq^+_iAR2|*TiU+hJIFyif8-L^>^AD^L%%rxwNI6JM%Wof| zXy0=rBi)*Q>COY$+H8v2n4sbG$#m6Wliik6B3j%$2VzTVfuAZr$jSiRFz#}t79i`r)~JAh`bZy#~Qbs*GORmE}x}UVRV}i zu+U)!gs=t4qa%)wx~PTT8S%_o5*);6@O8%MmYHSST!i>kT3Uf2diOxLXCB-xMV!-;mj4a&7-IR&QF(b|3 zpqRSYtyM^4DT^qJcz9hK+4P2BDOc=C>UNpng0Iw6-*Z24K{W4ot+%dSl8{$)9<})4 zKUt^FTDNNgW1cOyTAG`GMC?Fr7|*;RfF*C+g?$*Cz4P|+y5#q-vTZblg_lckG2T5Z zL6OaIWY04big6|_!?_LYwKT#LX&WiFTwMipeMeI9OmlH@v8msWDM%P{?COuz+|w+w z#`wo0M33sA7^;!8)n#tYMT!o(Tb89*HlIhqCC#p3y7&>S>&^l+%i$T+$s&o5ZAR1y z`!gr68_3)`5mvsLX9|*?`&0U;%kXB&>CTzyS@jace+Thp=9$Evvoh7c2jO!>zx>Y$ zJ87jb!ttV$q|T!kz7X-9b3CIn4-e2D@FP`EI!CqaB`@GUGj!o)O^ zek?OT?+g2HChXb4pn8-AH&>e=^24{dYmjqM@uj*<^hhfsQH6dUD%khFX`c0IZmm7C z(KE`Rhc0ikEMmcCuet_qEPaAEeaxq>R21pf>p+%YQJpGVQo}f2J?%(O9$hyvj27Gf zha1Qs`B!>3;yD%*LI*Z5+l`4L?D(F=&oA`FB8@hQ{x_x3tona=+k&-l0b;thY)Vh8 zJb4`xm6`1+3eK>F1af}z#hi%<1$9ebSncU&*d;ElZCp$jeo~K5?TD{1IHf9#L z&RapmCutPSf*GRG=jL;Gsq%AA1q__EK{rkT=Oe~ImQFtW%N84P|RZFp4A1s83oztdqiM>FV?ax&jgP6f=Xt9tlFsKK|$stWJbC zDM=$%>P~n9*_%o4rDj#^59Qdal*d9g+I=?Xp9|N-ZnzWud5ul2K#o7~4P>SjQh@YO znF__lpI|Vm+2$d#PN*EATqsTn!k2tlWB3o)#s9B0-aBc^`p@Fvtab{cqsy_{lQ}L$ zj^U?V{-iM6gRUrpYNLvo0|G8H255{aR6WzU{B>k?i_6O3{3JCN{+2HR`Ee_?CHakc zBqf&=;mh-H63Vj{Yy(~`ks9G&7t-vhz^OiGPeqCLS>J@dVM~g83kX}ZREp;*kt_qT zkPABpwxU zCrfuthitcJa{m3-m>-PdL!G{5tIn1IP-@x}N-!)LR10=rZUU*q99W@e-YlI=E5{gA z%aaogn5krzR+Q^FfTC-l_;{Tn<$+Z$V@DsWQxzT^&5pH5)G94Fp@uq`nWTnV5QjkY z3!OV#`8mYNwAF?ZIY_RU2MA|u8u87(dT?D@{CvB9*s^LtMpE4U@QcsBZTjlLNC3`y z5sX*f?fH+M%`=m)raQn{MGz_IUH13MNXoiygmOQlg=i?_^JL;@=EEW5Pv0QSy~yU@ zZuY*uIOcM7E-l4G?!Yzmg}LQU|Xfa>yDOL{$+Jhu5mTj1Lg zRhSGuX(=#-#FPv@`|Ba1W&gZ95V?87!v7e-DW8$yM7YB*;_r)>>!7CdWUX-Sh&SB0 zUdv`-c6H1*4|dgaM-||Aj0gx#J29XW0G6BJOP8Q1z!;~tVen_Gc>0TP-Td110%dI2 zvy7LLKQRx|424e4a3v$y-+;2@9Zz7;*})J_7+CLzWP8^ASr%7OB|`U&4T&gX!NF&j zzsj`Y4ezee>UoPuF+-9MB-{^Do90*(Cm;Lh$WG&T%TV?xaD2+Os$6&Z zeCU;u=Lv&YZV*15px%%oidC((pR(5-=|9Z17MxBk7vnhU$oCrOg(_*YhS2ubp}YR+ zxeY(t2YE&Zx7nrP*w(xqHKB6!r~`GtBHFMEe2a1rV&HIzJGT_WQB1=GwI2P7=qsG+ z0(K7)4OxWz_D^GH5F=cmItgWYHN5T4GDi-e51)n(U{R0D9iT_imjN=Hs@Z`YZ|9AX zOU}lsPcO-uH>6XbUo`A8OEH!k%-g8v7v>9C==cp$e1JS40eMkyME4UTa8P6aaYae_ z0xIn5ektUUB&n4BIDUb*;zqfMgSdsUHt`I>C(lY*t%OQJwil7NPO`BxDs2c#d2q~- zPAl#sA%r;a1ISaEm_2shw*zDu)P-$N)%*dW$wjmlzIKS!HmOTVZOYo4wP%6G%xsF# z(ooepMRowtoyr#}0lz8?rC_dZ@ULBgcy24Sn+!4!0N-o#-wS3T^{q z(O-8rk@->tK7yUOz-BVPa8d#UYw zvKENS!C<^F1ja*)dQ#7U4@JXqwEh1e6LjZD$QysM3ijLaA`cAuKD~O}PEEt33p_V0gU&L_2|34uBa6|y&t7Ff>@9?jT09!%;r|O=t0iQ1d zu>He_eAn<)2k~RStFfnna3OTODZ+vOs*l&}Nda^*L46)^n7K1*;KG06=@4l^nyn|< z5n<4kpcp?MX{FC3a2kHbqRR$O7E}MLSBuN5wsa?MmCj(jAGVnx%*^OhM;Oq3y?H94 z_vz>644FaM?8hROC;+fmuz|$?n1O-f!tFPNPz$)iHt*LhTm(Zd1Jlo99hbij_S@Rp zUaXBswYmBA{PRU1@K!d#Qs40aznSZu%g}S&t*0gAS{U{tMvQGxjdV}t1vRf$r(en|nUarPxj{GyHa6KJIfr#3tBDgxl@a=Z-p zL~uu91JlSaEW&KsYAk=>{3zKknmg(*l#T~dpq=tSPrpE)&j==j(}(-l{yh&W0oSg` zoAPMc&T9o)vI=wDlHwTZgl?`z(rxp-{aVy9?0|V2q^CQeN&B&XRmU$L?yM@ynG?ny zt;UFWMJ*2HOqHX{2nXpc7ZQ%k-#vqn9)f5RXaTiT|;AXwvMWdnnGMqVX4F(Hz zzUlYLicJ5te)?$1l`TW7p!e^ua1(#*db%006)zw1z6#H)EYzv$UN0vxT3lmeB@-SaTlAl+ixb^>n6;eeqy+Ki+c1sI4bd2ymySt7+N*gx9sw( zFEw7JT_joNbZ-+2c%i2YUL&~LSSJg7?X&c?!>`#dRLPp{rhL-b`RN%wBtHdTQm21yFGJ$^-MtdL)Ja$C|O z5`@Pnl(PK?nHs!-kq7$niG@<|#;!Y&=&ceJ>DkAfv%)`?r z0L~dlX79RH<*elX=IUP=&&^#0Do=?wiiz=k?ix0B&-n5>npQ=T*IF^eN*@)Q6t92; z^+5L#`9QKa!gMi(?sfC)X~IO~$s$0vRq8G!2M5bpKJ)jLj8h=G}DV6k7n0H1Se51i%~2tFYSxm;-zPKcOvKxEBPlU z^ZU+_jHVbe#xOAgD+XtWUSftr^0rgQn0vNovdwH%8f=KCaA!*@D=R^HDuBhqUh0sh zOk^8Df)jQtFo5W6#%x8tk@bMy3e%t9GVAr9)rap3vwfWCmJw)Znp=8Z(^l4jp~u1d zfk9r!62Mk7Wiw)}Qez}M_WOuB)sg{ELAZIqLD4jaTyVgn<&awX})FZ|KxVKW6(6lJDL&Jh=GUpz2eYIA`Rob4w~J z$CkSY(yCGh(xF$RiR!h#0t|JfIMnAeTdZd9hMe~IK26GVRZLmgfrgK|q-11=hClOZ zAB2&D7$36hG&OO153Zpy@k9As92`{06AB6na%*S0w9%jC+(mU}8QX@F9Dn^yMxaJU zM&6a0S4B{C7clu2k<1=u(WZBN=b;*eI?^La>x59uvi^0vPUDt@wqAxXvcF;8O+zgD z6XVc9S=X-)-zm95>a()$5zvxHUtXQh{y;=ILF(3<`^h#1C;WLmDCbLG}?A#^Q_bJju;CIYosZ==($i}%gbUPK^x<{Sz;J)eEiiS>~jAkoRqj#Vu z7*h(o!<+8vf1Oz{O@sHf^Ej)Mrg`Of?zeDzV9b&|s`KMTY-}ADs3I7m_Vy8lh31p_ zIkpb|s+Zi<%^T~jd3x-H=t^(x(yYWJ+CFCm35FtTvyaj1eDcgn``a|=7FT087$d`J zyY5R(rV=V_6sc z^dZCA?l2_JcH%krZP?x;iHH}v`Q-v-791N%lQXc?+BTDJnrzI8B%h`m7S)V3VgYQ|am!EHaSl)84G zjBZ{Jmm;C8@tB2|SGt#wdW+)SQXJD)a_j4hxmUW2%gag})k$7bS;||lbv~3AyO}zF zujm+N@X9KC5LJw#rlwAok`AaW`V#C?@wtvq@oPTdWMe8pb8y&p?3C)*PUq8+m{nu{ zNRjQbQK#!itnI0PE{`XP;qhj)yuBbGixd2FcKZdhsLnL{)Yvk9JWsw75)xCwi{LNm zGQ^9JOCEL_*=awx8|vcBd|DSUX?6YR7x;wmO_GkHCOF^g@<6|S3ImFp&PB+r5=t6= z)%_1FDH9&Yv1t5;9L?TdbyS8dcO?&wUB9KKb~LJ|i)WiOENmDtbZMmo5E-$wBlp|o zc;ws$!TVW0cj?w8Ws^CGRvDhh;V+OpyX9-5=!emdE{P5X0?-cLPjF>O(>c|@PLQx& z7T6EJ5pi7ZbA!&$jB%})TYBWwPxG)Vb-Ek}9CAoJ{?%L;wt44@w|oTLsf;ny+MDz7 z`$b$hGGFs14#q!?ztaSC0q6{mMYs#d8``wS9#GDo+JjppGIg^16_M={#?(vXZ+Foo9Jg~j1 zOqBJ?e^^sU*;i*te{2gL91}=IeRau^pAgn@-=s%Hg(${URyvE<@d#TpGp$Q4Qlla* z&?1)R9GUnxUh)$|YM9Td^Kl74A6GVSV~#Hzbm3__qOhRcx^sd;w@JQyKYRO_w;e;V zV|hK~y(iYS;ZI!BDYckB=y%B{NlUVCh*b?DK!kT6Bsy8yGBM8i^<^V^BW8alErGcL z3!6Dgx>IA<0%%caZ4IL@kv$i$TJxsXZ<$17>te6$>Cxvej35gP z=mD4eGB4FwiMXHVI=3h_au6#5lbs6AdGN;F>Q-5PP(o?N!9vboq^nma zko>q(_stpTNH0|>+|eSlbo?gj2QPWTJ}B>g2limU2;Jk~Tf6I+$315PpeJ76WZCR- zoPErJ;-F;-8%L`x;2$M$vHjh?qA@2&&HwG66rucbVQYRK=ZZ%BnT5e24hZoDXF+LU zBS$qp&f>sjAv>KUI)F5+_|sM&DI@{x9sUiG*R%ff>BEP%EIWhhEks(iVasI;x62z6 z+|0b}UVhIu6tVK>AZZyK2-Oq|Gu+k4y|SC9LuWrP_wNtRxMs5d+#ycr#G2kcdV?D+ zaQLd{3^9>fvNUN*sduAyDMnZn)h8|yLlq8s2=+yHr`ClzyG#;+k%5}x@6^OpAsbus zc^^}PM(>7xY<=q3?_B`~-x@fa%%J+xLup6HV#O0>@HP1y2)Ejx9o*ONh1t=q12;Xe zZ=z+H&pz$6SU@fWXs{@W6H^fqA8A+ry4g4~Raa(C_GE9J~XCWAR2d&{G!Khp)YPh2$6hUvOa8GG54Z(@cLRf zK7BZgyAl3LV1C!&b5<@sa+4Ml2uTKEi#r#7T4T`{@`GGY>)t-+*BFCtO-lO6~epamV7%av$sZcH8h^AA4L^}Y7_sQ8ARXnsM^%{b$2i;_u%_0(Gxyz6c= zVPj!nP>#Vyju)1cgiRiC#vmD2!N&gzXBVCLnDacd_PV;1tE(#F7Udm3IA?U&r?~EB z?yY}o$Qj%pY6cm>#x6!*^+pqJM(ILky|*s~stu}V z?3y&fp~1%n)jHw4(m^Y#2)BFifGG*W$~m@bomX9gdl&6y;fgMIRuMd&FNB0?q2cDk zX=54i-Nsa+0X?}2Eh{S@y}BGHX6-+p#;oyWM0rC(LJl$C%N42(;>yU&M}*%l5U!1$ zE-@7VE(tW2sEie`u(btzTzNn(W*9gS$~Nk8k2Vs7jouP>A7eG&nZ!retJ}SQd9c4^ z9DBp(0Sap{J4U13=7n0KE&rrZ4_oUmG_Vk#v9NqndMR;pKwYz6Vm>!iP$bWkR(&UoIHA)1)h+jk@&-D{N7Yv}?L3?pKDw`Jya} z)YzE`q2_+}Da=@7D23(8JtvQ15Wj{bqzUk*SUWixH+;seDKVL%N5A)6to@|aKdSkg z@3{Ny{UdP0)#7|TSZ8?#(bBdyw8;cIwLF9B?}OLxM#CU}Q;dJ+FvRZa+!c$m+|K(O zf7pG1O_ObnO|GrS5x##F*Uyh9bY#oP+`aH%-Whn+LFW`xsa@D>XlhErmt>V6AuTn} zzw6nNS(

    X7E7<4`t?7bN*SA%VT;aIrN47Td4N*`_PXc+3K^+o&0fCrnrR!hWhu2 z#qQp>H`je^5Bdkmn4CKE@y&JQ9BXUS2f0}As=4U(OpS`LjrIVqV?=3|h7MkL*8SIF zU-xyn8e2OROAP2@`kJX~OuCi3=49puKNCaoy`6uXc{oH)C#&Dn;)&4mqP=p+{#2z6 zZb)F^yYQ2>5oZ}p9xg@qAL96*7U1@>MZ(P1HgP1{ZSMlr?Gt(2zuz6E+y7F_2HnDv zr^B7nv|M*)QsgGy6$~bE{<6kFQ}@G3z`?cDH%3H%k?LWxmNlH+;pJF^YUv zGZihy9-20<$n&&z^(1KeD_FU9n_Ey6lrP(O*G6n(g(uqWfP~K`gP}byGV-qk;e`mb zU#ZPm^yafGi`Xy$#sO-dO2+RUNT%xB8WpCzt}l)QQ=c|WpYR8eiTs*nVGZ2MR10o9 z2E@%9KaM=Jva);YokWe5ZqKluIj;Ht_ncNAu6%l#mqe*0HH9wKKD&#jfM1DJ%GuBt zbQZa~-B%3TrR3w0P;8{LuR9jQ)~V|4`^?AB{lR=kYs?yq&>3T~H*bDt0A9q(DKM8C z-M76is)!}hwpbV_t{TJ4rAoB=n>hkj%kj{PO;4(?R;}H9 zxV!}H!udE-G2@MNT`1n=yHqv8Cke7qARKD!@YfPR6XlXC%wk%P}M?|<9=~|VK zsM3zmiMw&Zz13fCe;zg?>XoA$vJ;Og${Z?rX=7{S(@+;xYIo{!^)JxWAU7JDb!=~D z*Q-K@t+j^1MBxn!IZ)??%SdQr!B}`@)&Ej`PYNl;So_gPMF_QOREbM;+qebW%lE6U z^E@7GWT?6;WdAjYqd)eMf?2|o2;xXD2)a`!NklAjG2zd2VW3a>xW5w@2#W{ zimJ5RbrLH^FqU#TOYI0?JjlqQER{PhV2cIh3KR2p_{wrI+`eqPqOy_@%h!3ObMojn zwKxWGqEbrA;z$&g1|bZ{tX_H)ZRnL75BgK$LH`trdv;9=58LfF_9=y|30%~%UALa@ z3j0dbBS^GU+|HoHz1W-9eFjOe5y)dn-|0vfSjBz1;oGERW)FE({1920*KV};IcdyX z(WT=tazl8RJBzS5XzRqGwkvx{lS;Ne4|e*Hl6d3$rz>D>_p3zkN3VYWWNtPt>Wd=D z)7F3+f~KYJd$SE&-e3*WC$8u7_hnbtyi&35o@5p0&q;Z|DZegy{w;2D@LIT|DX@q% zB4V)DK9i~4d8Xb^Sw&^~-FqHv;5fkz&X>HM?Li>~XwIU`w`js=9K~)Ad)6^SNO$pq z6JC*D?c6VBo=J3FW%k)WgPmb8sPVGB+VA+)^*%gb(tt6F=*Xz!bu}DF@b{$}9DxRN^#TnomLzsupB51&nm{ z^jEsQqBqk70MGND@<=iurluk;0sCLI_v%)xLZa{P{DqbP7#o0+zJr~eBXuGhOrVpK z&VJXoyszDST-AQ>!?k#d%h?k48#~)adV3LA*l_dN*H95B-ex@A1m7QD4+K9kI8F^* z1Tev1J`Jt(B+*4uxH_ZPA5{s%j6{ReSujb-Dc9zklmddDlFeRrIJck26tg@h3D})~ z54KF7r`#4j1Cu^(6s&#Q{8f_2a<_4p`xF2B``@9SbzOmHFGt(mB65JS}A!U3zVFyUX{v^XSBWJl&e^cg7Pzq8IPUblUKy<4RVLJt#ech&rK z-Ub*@%zq!35X|{z4!siLhE%m5(IjV=Zbesbx6s(x*-vjBYN?R%^4`D2#>Mrx+RU)y zC#N5;sZBUII-*8~AoIj;Hj)EQ8Ji18~KusI78fr zJIiDuB$rD`K|w?u+#H%dEgXEr-t@qvnfih>qEG5Q!T>k0kP>`!&gIN5wYYGEBgBN4 zl~$w(FdlK4&(cOr4N6{?v(Y9DotpaGZnI=4X2RKx$BHyK|M{3FuinJdoG=If%K-OH zG6*jsv~VwdQ#HqgIq*|y`3&M!a-b3# z{}YE9(OGPT698$BE-uA(GqP!?loqTMlL!Eq0!-SaI=}6N1 zdK>-PHAeeq^o@LE;Jf^$F(Sn%voUw+6+0?Hhu=Eg0Lxs5ECPj z`KPgZ)k%1{7TYfGI-}V=bbtQeabS>S#{EOF^mO!uY`?n#QuxT)x5kdK`2B@1Mfh!$ zXu517{>`$2uOOeDVCFV{G4T^lOH{G;+Ikt^8}cv>Nfc0I(U8^-;hZJzS){^zVy^(P zp*ZE`3!)Z$POQ|i2ZoC7UDUC3=Y^&P;tjf_YZt(KY5uXy&Zylr;lVFdij#PqxRQ&*8w9-QMlD$amN5R0S^{_H&$M0ToJpB?9Ku zX#Sp;7FIsMP0lbS#bxa}nV(fW?HI!+nt)qjgR*Ohw~X&aDUGMbs>_)3`}=!w)Jkm- zK9obT+?qGmcEcxUJ_!12rPly@!&pvtB#=zz?ke7%;9t(AXJYc!Lqc8w_r9iTPBDK$ zqyo+Nicx7&cx!L&73k7i7nVrJC5DX_{)(@aA=R=?sbHBBty1t5 zdRphkr59?k;e{1ijYJ41Fy}2a|GQ7}IP(}(S8iOke(yxFd|}sQ@QzH}`ZKvrLIR@< zFzyz^)4%#Y2XruzQiXTmd$SMKhfd%s@Na5YbC1$QeVL%fA76$QD_rx6xW=tPSx5Z> zTXnOD8*}Jp?%-k zlee1&>`B-xK!JqxtKBy=cSStt^q*~*Im_e;Eu+I$tN$Hw?%NC&!W-(WIQbI20^8;C z%HhawPKE}{ta9d2+wDbY8ie4X>%HP>)F-b7l3LmOrK|3tr%SFUu6x?G^&7sgHPt+N z)c{rGlN3_{^X0pOQ7L^qS=1^b)Jh`Y%HLp+^%OM*8l)-;daSQn?7;T;gHLpUGvBsW z$F|O(bdEqj6%7a3B4Qc7Qao#CnN1(dtX^!WLo)lrj(^Vrk<*r=gIRAo{UuUds`4iQ zw($sa_k!e@P5Nf$5mnBQ$0gfccG(Aqhsj)jON@(J@oJ2_`scTF_Ih0O#cgcMa8tVz zJ}B|ngsO@4j&0E6H7BKc07ODb6O zr9w=f*fS3W zJ(%Sq(WB!!I;5^XpZ#Q}z!*{;m>)owxQ!L^NiDd_s!@b;;m>1n8F-QET02Kyc{`uN zyY6-(`l`HLUclVvWreNcuyLbrWC^;^P%FXA!jEi2v?@M)^-b3vsRdm`#f1L)pjHh{{uYsPlA&c5>qwtVOX!TyWukid9I2He+1Cv8&`ja(jO=q) zd}LsdRaSj_dggDc#+I(872bPwm%fgvQ_Jks9%k|T4075A5nmSh!by-G(yyq*vf^Bd zGB#Mc;%59^UZMQ(xJ)M!Oz;+VzR;hpA_}YRZt*~oP}-|qm;`e(n)Yv624YjuQx9@7 z;=3%c{wy6P41=Tx4_x%pN;a(=04uY`O5BcajvX8wmTdbz8G$;ZuTziG@`azXlB^15 z{U2W+X$4>#+uGY}5CoY1Yzig$-4*~hzQ}l{^tP_W545gAAKoRm`CaT4_9oA2Q7L4M zZmFZ}Ds>k;3W*~^2&PuIB_fNsA-wby5t@WdWsvNNE%O2ph3e8tm(`&VN?yF9)yrTv zm~xW&XmbmXTx!gced0l&exmzCQ}#f?j4VGIjim@B4ua18;Po4Q{X*k69&`>A`jy+G zs=Nr=H;^y0?f5JymY6kB-`Xxs3jG@k1&h8Oe2Fe+f>%szVrdJfhGfRWNO`~t;5}*a z93u&WcHaI*-9G6CU9y51o4ZSbXCAZVWbqRQu|g*8Z|O2%!+UxOQ$bY&J&$LJWMp4Y zZu&8Gx616i+FSEfyQYgWGn#Qq=*d+6jNb5-$Bdp2mRl{h$|&yMEhY>seP=R|mrYyn zuS_CD)R7s*YqNbDa=Y<4klLo$+bEU^P9?vtLshYd=aHg9z=yPU_ zVdLQZ2O|PQ%#H~4e>A0~KMCwggimas=Vn8)c%`W|@DNiqU8mJ!gUzMumO%1$r|~@d zDiBv?uKW`w*c)c{;rDAKl53`q`;vn{1X!mb_wXxrP;YmAVS4jY0zjcVWY58O)uvBG z61V4TZLc;7XvS(^)NXtK4ho%;cnT3~sc8h|2!q$85jB?jE9c~QWk7O&{V$Rxx+JJ0 zbffkD2)nan|ZLAHeK6dwwJo(97Zp%hp||g6^u?^PL5!;bZ3|2X>w*jRX&CK@_wS6IOA49 z{Fzzm%kquO7YvKM5Xkrjv+CP>Zv}bzx8KALF8sdMd_~{?)MJs`9~l~(_+|PC z^ndlO?~zNB7G4xW~bDN7}{@+f@25gUqD<@<9E62Yy4D=P$xO#k}-1_VH+0GQPaL z!eF4Aa`|Rp(TXEm%JjVr2pQ6?d4%{D|8qo!P+reFMLC^%ZXlK?QbRiI^R#<9`%;eyFlELx(lw~Y=bB{a&Rab^Ac zoKnAF-O8JfT0jlHw6ql)nYil({T^8w-JUb@F6<+hiES|*JCYV+_sjRNs})b5x3XcW z{sJ*L7gZyc0Rcs-&&Ea`lH5B5cm3r3Y!#T#^;UZs^ zMM|h&&YL_)xs#&sFFVy3xAi+$M`Vep)#ULjfBs2w@dSS}KKe!B@ObDhGW+K(t0;Q< zrO}nA)a&l&Seupyux5*6EInhdNx{B_x@-iMMB5ynqXc%3e>*@BkC+0rUT!4)Nu!F7MwqcD^sEe4IKWHx}(^au-b}rY02U z(q(EFES0y|h_OUs!s*4AZ5$m5jTgY0vP&Cec2QpHtKUr%W#+vwz^y_FQ?l*g#?H#k zwJ~iVxnf+zgC!d&ey{MO%NV1|UOwvfRH$3NV>e4#m~M26h(L8SCK0o~@hjscgTY`s z&0;Ju?q(xM4e95vAa5TZxsZL%pB}aYR}1$|H|5OE_4zCU9OYv)X(cfF?a{ znVY^2Xi!5o7heD&yhw=So9@1lh0T%KGS;W(luXQMq40ieG@gV zF@hx0M0omhHuCX(b#cUJEnovLsuGfH+?>aWQHGv6_;YBqk);Tz_$3U$`8*B|=G3&) z;Bb8}2Y=Ftj|^!mZJ(p_QF>wO`PO=2^x^(w+S2NHa9)k)^hT+;r)DX99Pqo+8@U+z z-X-q8-!B|MB?@);rZp8d9dQEE$8U?QX`{Q4W>c57R_E-Y=C+qo7e<`1MfSX@L-Oj- zhsCPH)UhofLe~`98TGBuU@I+bN1nrMcG6@cE>R6~Ka7-l`E%F(reD8^#md1pLx%H} z)I_xtAx3(q`yHxk9;dk#Z@|Mv#tq<(pz=}H_1$d~$4`?kC$Qj4OT{51ohkX0^bspw zY+Rj+xqWQyG0@?y&PMD?ne)|-S3-0U2s6#sHr|}jJM3k)OIPS6i4_Pp{fz5Bi3+dv z0X+F|Hml8|Ul->o=ihNNQq=TsrK0Uq?RPU&;2I;NB1>*o_^6gKwC?{*jqX;WZw6IG zBxv53*M$`wd0ns1;~8DG^K0JF_>hM!}U>P(L!9jA{xbdU%S|Z#fdr!RCoO59-32$M7^feT>^wgR z>}nv1)2M3T#;*6Dr=yo^FjbrqhL+>43zyn1+nHFgG}1Z2$y=`7+&Uu_3(^ z_6*Mb!NA-VQ2BT71zMPSrcIA{t&lJA$iRE!Kl0}xBDGxYRT7o=*A9r{w>kZT{=B}F z0G2`a`a#l}0qMT!Lqn6U3=UTa>FgRVwx!a|f?%DzUR`|gH7V~x*uy5l|EgO!OTb%h z8Xv{n@8eZZ!e1FeiJ|yy!EaCX2)Iv$)TR+C?+@ffPkouj3K(Is>PySq?R(aVuYD*WIHbi|+>qws0F`DmR%FHmONsl}*W$+u6fADz zAiie0FnoL(IuE#$r$??J_CL2pqY=pzDs!k8xgQK^n)

    d{H_dkxmzxkW0I-8x6e7b~U_JcoOZ>i9z!;A9TnV;M)UX0c7?~c2= z$QBhvzQG8%d?K~U*n$Yw+~V*9Wt@aLR#~kHEB16PUY(EiKBPK3X+j@gSo#oRrVX%<9J&;elC4s8@g4PA}V)QYuaB(oD z-`w~*F1&DjOXiHhhF?%lh8a$8j@@RIm)j+}>7MLW3u{>oj+9?s|CObmF4XJ_F-3I| z%Pf6Un6y1wg7rxeD(H22WBatZx}h3;$~q*I#~pWb{IncAKKdO;8qchQItb6r#wMnE zMVwz7844_IkCDNbrf0!VlED#9%K)i2$mP5VNQh(lX}nR)z@HsLXIiZjX027CSUmUr z3fWHjO96$b8+NM3-q%XDkLNQ)<^`DQgnXi+^jgN1qnk<@fV}unEFM`gGV-&O37Y|+ znG3Z>Hb5r`T=a7uRucr{%Z3ZJ4c|JMw9IM{GDyzxeic#D%jOQPfQ)>4|%!2x<5 z55|tpmlEh_Hqt?DVtM>~FMhr?WU-sz2s!x2RYM%R_1G03TdD;Xr8lpcVrFO1f&e?hqId^$xe+d-MzdDaL zs5%nAXm%i^UW76#H!G1$&hB5#;Jv-wH=JqNwJ`q?Xi^+l)XyMsLM`E0%QjUb#8u}B zQTgY_T~5qrAuKbjiLc8yz7-GSNMxfhnfQa`mb6gQvTVB7U$d;=y-R9?>w`lkQ<4vG#Z1O9 zMD3F0#tNM=RtnDm&oG&Ksp{Wm=DxWlX#$rN)!!0s^CHtnT%}MFd~YtF1Aw&t7dtVx zXKvR6_%s^B+pX_6*!-IU`L)?!J+2+!+up+yCBA5|6_u}xh%bns_)xYp-f7kI&1&+} z>RsMm3!(e&L!K4c`Ra0IWkW}c_wey;TE_9rJ3(tM+JhFL?z3xIwyPHA z6UyLq+}^UW8#!xSZo;|3o|^O?yHOw(tl-y1{qdsO!Ooa;*}M>zJr z{)dV))+{&r!0St~5dm&l!|v4xb9AY}tC@fgj5{JbjltR}(3dhR%9PPB4V4w^hOMyG z_y}LU?AN1|9iFgqa5f zd`_DaKt)62c^+Cbx3N;&HI!PWWW^sJS4uF%^I~H|h6?WrSsy>S(=&yg%RH6%l2w=h zk5M$eg;r)z%d6Qt@gf4v!2rtp#1Ijw&cn)Y2`nI-$qep7p$7vmO7kl}c)hX~)>G zTAJj2s-&%#AHf(w8)-KUo>;2eb?a5g^y!wHRCjU2KLmryh%>uJOX= zIuFx{c+3!_W`Dh{27(2V0y={j8M=HVmCDM~$%Wq*zSaWOS>~ikQ#6wiibwm^)lMPY zUo<#p-~Hryo~z81%4v|g=Ff!~Ilxlw-OlMa#7ib^_Qt7d9hu&UDYcIq`{r|Bw7{09 z*m|b0#OIz&7Q=+R{OGYaOZz^Lg*q(i7?j4Id0NN=5=613cCcL3TYK&PJ)y=MWctPA z)^D`uBiopPy$AoYy|YKPSb!pv`DKWC>F`8jh`=1uT#Ma4D^YW(z z+$eqI9}l@k?yfNB87~FM=L1gBF|MZ>@0*=eRUYtXUJXdqs2`p=<#p+PWCL@eo%o0q zKX^kDFFYRJGu3}oCKOgDEMio=x%Zg(_Cr^ynALi6Ljk&E|1n#vLvVR+4B!NlbrozPHRFo`7JC z1uvO+pvro?&h>=p6CIfJPp!hYFC5-cYt@=KDqKyOfN%|24y+Zs)1Uy^@H zjkP*k+BAQ>v+f5-j^Q$h{4HiZ_|0h|tbm7daD;IxpOTY3hVfy=&8VNdz@VZ|w~9xt z!tBB?rGTW&zJ{@d5na}x+6Gg{nwN}U#WFB(%on{xRP&5*cptr~{rd z;MEBU38js2yN)uFXOOkJr8|Ahf7=surWofwbX%kNbsKW>53Ca_rf6&bh`u01l1HX4 zeq`>choMdF?(V+Gc$Zzu1A)kO!6721Uyi%J&RwdWhofmk`??o=CT%zmDS(}+)jvr} zJStu~z-mT9pP32f5GiqLtDr5vriX=w%4$_=8?7=&5fTc77FoMKB-t$Yk8ize77N%o zT$p~I%A(`59j|+ReWq|Av`mQU3uIc=2~fg;AWimGdMF+J*6t~)%df6CjmsO23b6!~ z)6r^VUv+$Tm!O>Es*MXfu7~%OPe;u8jSa@dbM>t~t&{sgoDH3AO2zO}gVDx@rU947 z^^O3qC!W0R#@1%}u4xPVfUt`Rr=Y_OiM7?I>$12+?D~$?wf)*vYjbNV*@ayZ&a*~M z(ug-sJs<7%SZ0*kZDWfd{K8Sz7wAZRX4ItR>!W5Y%Wl!u1E6B~Bq0Clw{OnSrZ)KG z04!eix|u{fUVlbsyevIog>W6Z`e4Xj<2C5dkM5kKeWO@mQH$RSx^qQu)&PvY59<1!07v@q0q=(nwPQeeV^QK zouA`7vmqcRTBzT8j|~lgjAY&Riq^WoKmhc zSHIdkat?EIHQ|_3exJ1lO#LrzQkb;E*Q%jh)ZhJH2sQc69gPns8yEv+{Yk14O=*?Lmp|*8_=!bn@LM*6_t?hqFFSG9*VH;qqR*|^>OC2hU3^C9v zG2%3b(~50nyxY`%BJrtBHbb&EgdT$(%s$N-Cfcp-6<^~A|Tye z(%s$NolD9)_j}IsX+Ln-b9Q&Gnfd?n_F#~ze5G}O8cOU8Za}eT{2TCV9S1P{N#LB|DxlYoDNq zA_G~|f9-6u@!s~`fE3scbRo4l_NfgzI55lx3%!;ds%WSZ!|qX`GyP9DvADW1I&uUM z3}zmdusx5K%gIm4>S}-`Dx?%(zNQ!q>z<^zUtt=lag>{;tJ{hgMpfOWtZmly9v~(v zQPb4Z`^atiX+B6Hp)dHO+b_QOFWUv|OD z!S7pw?m@wII`}uGTMeO|7{xOYug(;db`2mWllcV&7GFzP9wp{bA=*rZGcqA%C+iKw zzJ!%)7K)Jf7B$TPl~L~|1DR(lwf!b8S}P3gk3gpj)B?Y?Xme@kzMTPt2dL?=k>3)| zCB4oRimzR>7#ufEI(zD5cfWQC*O}eEQPRbYW(?(`2B29JcD&ss55L@tvQ;Ni3=4bBx-zqn2*(;JbTbI z=nEf$yRnE?h@A;?28`CG%U0 zt+fNfFpKgpCNr0wu5)9<$l|p*xVR#4gJ=c3j&@~TZ>^$YV=Jq*w?K+ygYRE~T0mQG zH?MhT-$cuXz!e1%%d21If)b`)w z4eqpnJO}DjfMe3_kjba0r4bTH3XXiUO6%EqA8*dW6P7hl(OBCxdB{bFG@=$*VrjI* zX5Z?WGIJxV^4_d~N>fKGUj_2BFd)9Ixj7@CF4#NEt?iadKAS;-4yWI|$J&8NTqFMD z1IL=PavUF}62^pGec_B%Lg^}L;)I5dj*&x!Qy9(BqhOIYJvNdPRh`HPshHw>ojFRB zJk#+U=V+E@O2bO1*BNqiVIY3~fER2*y8M0B^{8jlBSQI{|U5W#qL={I zVnNlBr)klhd)HX(_+2X{76l#XCq`#M1YkA;VU>uq&7Um}Gbba$B`^oc2Yd*zJeOX( zXG16Ee}A8#*bN?Mgxu7L2}R$t`WGA$-)ltW#Ki9rZ<~^P&i^tU5oEZ0LS94f-@6nt zO&sWVR;J7ziWG3M^qMGW6=xO?ktVG6ONAN+;ABKYFA zEV3Q0kIZM_hpK3jqz+=XDJbt!K9)o0;&Cgxd1Vitg?{!`>&;*Njj8daZbM{Dce|Lo z#v>v!_4JH*etv$3ylnZm?`n0r+I%cwz+_UW)D*4dPTm+uJs_`Q6GQm!|Fxy^Yk5a4 zxM3BaimDL56uu(XS1okf?^TE~_n?VLSk&r4fXlK=#g?YjIT$MgiY|Uqu?}?MPK~=3 zbaeEoYF(#$!V$X^c72~T{`(1ez!lGz_3g?+(M>KdJVvxNBiCVLs0N7(%K)Z0h0y`5rrO7Z#K&%Qe4 zcbp5PLG>EH<(N0{@Q;LM^I}9qa)8ag=vwy%K`7fPN8ocdW%k%cBQXKDm(%Ataujl) z`P@+o_vY*Cy+wPxfdl0vvR&0|^=@Ig60nZ5MLbsQtWgLfsU5x{62&KP83Yy(z8tW2h`cXs^xF0S))ZXa4vnxbZLoqk|Yg4 z!IQ)R6SSG|e{p@=M{7^D`Wvgyp-+J?Pj2@^*}jm!qqH684BJ;fKyfpcA50Nw9G*iK^=Ueu?rO#eQ```0%Qn11ck1q`xiKRor z4XA(DUY5hKQJpzAIfN_k46$0K-E}awjBRcj>1(vy-4ydby+(idn?7|Ar#~_%f4A>< z|1fDEJO8o52Ht)Z~5R0cO^x7Q}Q)PK5#=kcx*z@{%OvbAywpo#G~xJA`#@`$FErr*Bgye0SqSVG<6(4)5+ zKw_%Y$%Nur7rGZ3aH3+bM3+R9EL~Gd+~^%MGeQ&~u@PwB(j)KdN&?h;gd~Oqv+GGq z?3%0dpbIFWRqWjyDnM*T^u3=r`JYA~112m@J`fNa`FMqDt215-QZgTzk*sZWv2;i&O=68)@D+( z8_+$=6sja+onYv)!~WImpE}Tzk&`jtjzOTV_jLF5w_Tzs664c1@Nq`&yZP{e__tDF zRb6F|z*qloR!Ob}8D>EZS+St%b~4e+;ipvb49>!bh|c+bj3sVv9S-)f*;}?`)4aJX zm>=9;A%JZ5Ebw>-#BT$>%;UtaK!#~6rfn{ zkeXRSBUSVu@i_f^W6vV1>vhIG&3ev{^x_;s;}+^0$@>JlwY^)Hh)WpKh`X0+th@KZ zg@Y-Bd6C9#Hz)Sh=hp`phPyRU&23QX#^lRMoB^m0h!~SQ_1d{2%KR9URah|cK}~<( ztkab@Jo6t$G?bQN=+j*{n~m?PSQM@euQu_xHnItvvFZe+WsNx1o>`>S7t# zLuSz;vh<_FAzSl&A%K+IIvw@00)Y9B+V9-U`}$s(`9o$$hoC@@BQHQ8f%aUd)m<(q z@IlCM=G0|jxp1S20Zb2Ct>If7RrwTuLlYl{Vo^}@t$sf;+e|t70DI5QSgDaFj`SZFAP0|Q>7wYBx{Z_@}~Z9$xw^SO6z*`6Eb&YV1B z(rb@tg|v&AF%`)bC)4OHOYaThKjLDpJ)YLjuPm9D*D(fik&B6k%&#sPx9jaaHF^MB zB85PAC^qgut`;p~Gh{^~4Mb!V8_S3UPa8iOl*~;21GP#(M&;xh78^!^{7kPPk#PQED zrg}lKTO3hQD9XhrktjdfC`(`I?OgrD$OTYmZ2l2;q$pfbAj^_&RS(QkEthewvB?NT z`bgV*t5p5&D)tmi?7vr!&n-MMhxT^+&8sau#kSR9F^9C5TA;V|CAKHy7Mg$!ge#(~ zGK;yoGB@Ejif45Or@_5WRz4+m0`Be}@UtYF<{kl6gb_DG8_D^tHRIKkJb#~KPwPZw zQ0qXw--a#@j(Sj@G2uJ7wg&uM4qYYO%ePu5b^B90k8WmmYDE#<<`*{rp}f9Ev1X=e zi(~vv_sUV^Pw0_LmAoQ4LsV%g5p$CyHln@X8WfCdI2*m`V!+}y_cgr~Ej?ec^g93& zH+Q(%{{!b~l8`|0HqV%`rxnZ^`rWoUFe{2*zl#YhD%!3RlWKBrYLLP1A-is=lOMa- zZp}<-#>yx&MVv4soU&k1#Qw}5WZ3_x?-wY~-##W#O9m-F3{YU#D0SHB)C5`GBBNr} z!DRZyGqqt`VQy=lnE=PSh<#Z-`+vV~cy1hUPu11Eogj+|Huu4XbI%$|EIg>PxiUkNgD&-nWwWld##`xEe_3Qbv25gA zwMNX4r&tCgQzBv4BYrWx%?lp+4O?tHWW_Uf1!GBLdj~h3@Ox&PCBOcFn14|$3hdW3eq83<(Nq^2QT&gQ*`$&Q$fV&-MGF?;D3q4`FDKiZFiBD~BgKjU+Ve5FoVZ2+o?jk~ zB~sS!fA^HMK;sis5g1eu`VGEyjUNSfKQmW5d1sdpmFkLwLY{~lo}Z0+ zLbti;6c1i52Hq2dB@tUDT}$})b$lH37dX>H97$=vrc@*5+4l)LksTnz|$3GvQTP_ZfQ)9ZGqiwSqAMp6Hv(2RMpgt#&*?R>fIt8T%G!d~n zg@eX>$@2qA{W$b8(FF_h^iBuEWR)7<{T}=HH=NZO$0t$vboKW1|J{~XXVN=4n+Be> z-@Lw83ihrXo=O>0D4fwq#Wy!*A6o9FX)+wQ`&wZWszD(mK1Hi)#St?yrOxPVeg8Vd zQpr9du9hLNM5hpRKLs5#<8`xq$}gZ&@Sz(~%TUUTD0;AL%)06@h?|N21Zwv}EHTd` zdmd{U+qwrI*ls+X*T^7PM%)>1Gg~Kkd4;4`e^}j4f9<2W#bSe1<^hDzwQ`JkV*@EU!a4cDpsvIo7tTX!eG$ZfOe#w9IKJ39$N} zJECf8bMPS@169MLb|J0>UEF7W{d?J7>CvUORt!T%o=yRPEb{%Ab=M4D|IPSa>0j*e z`$}UgC%ZHFow>a*EO9rhSbr_k^@w_TjQyAD+8k)9b!=7@Bpi^_*iuEu^L5E~PHB+n zl9u^kgJSJp?;Ob4J_-_gO}6n9_wYVAMc?H9pN~E1cL@p&UG2S@6n!#`b1zbvGyj3T zcLa-rfvW81+AVYJdXHE`Q1!o+X+Ki;4KcW%A)ESe4Ll8Xjbr+Abk<+L+OD@ZJMW!V zX3*A+u&;V2HoKkidB5Scx*Ok$^*i6MZQ!b`5P%TpYL$Xvo!7NXQ7wGNYQ}4XK9*mM zDr4tJ-z%^gn*8`Wmi*P3;NQOZ_B}i$7+%qWE&t7{>V}5?%}ufeo!8lidl~j^9S^$< z^`~VRNTL%cZ@OwYeLTY-k23lrI!kv{?Ur>v>X&Uok;Nh)^uUuU;BE~|^QokR4`foOBZ|hQTKgR<8_ho%t(sIkC8rDR)zMqR0m?&@yBS{jd zs1s~1YV6fKH}j&Wyz|?M&FJ$3@7*ifMywfm`m{O^6ncGexR-@xPz*~x z@Da?biCdO-Ypr9zxO^`ZAO1OqP05FkZYJH@lGZBSfhKCBs^qM+q{;VL5JZAStHJkG zTDq}_h=o=_tB5wpn?b}f2gnGvJe0+hIz|s0PK?Q)nm_?UYfY}&{#iRUiC&^`Afm=B zqZ|4y9>mhNYJv1~k%+k42ooe&MCT){@OT(y$*@J5rg7BCHtO^`rU|aV{c&3-j_j$h z#r%O6DK@b4_KqmB2jNZ?lXTt+6E$=kHE~*jaAd?4$?I7Dg6GN2?_B;4y7tJo&V(Hc zit0fpt7~!3%FZKA#H%EmB`V$@zZYyk!ZRmG3R3hzI*7+a3J&;V=#nXo%NRFwLIgwJ zXkFkL^0%WTq~~?p+1pE zpNzS0+Xlyr-|V#U6A7rPco$_$P)HS%f7kK#!{{ma_3*shQa`vAtGoVhk*dQX&I_F_ zH9HLlB0chRW&%$d{R<~wh~mOEdCCjp>CT6T8cid{7m`^fGr zT8==Rns$YjHNz`ZG)7;&3bJO1+7!!*%p3SArZg_8l^xA4j^9cH!h#Ka+33x4y;G<= zCyT=fM`|P0u z=H?7kQ^(iX&0eBr1-+b=OtD~VGjWoM%A=hLQq3!RsQeaPs>^Ob%vim-+4!Xe`mfK< zzfqO~OZ2Fw=N6)#6-ZW?u9-BiuhpxrcS(EAigF<}TOVT&nA0+G#y{^g7J z8GIBgpbfoKin z_aVh?_Kj+stLNhd?ql&q4^a5jH=j~re;V#Tx?Zkyv`s5FhZAyNX$%Ir46iPl4nWZ# zGQT+&3RWj-&dD`S9T;R#`KpR0=lM8vJEFa2Yb{@q{;^*UAM+}1rL}=TYK8J+Dm=Cy z{8%{ddejMB-f}tl>{ME#=If_sgYsW@2*JTVvy+9&$2-W=y5`73n6+2;SLO>NyJ11W zD@vs6&?;ULi#nkk4KhNci1S0G@aul2%os5itX>w>xx<0bu>w#JbF}c&(ylGpcF7yM z)ZTfMQ7;k)?GICEXo%Q#l}0%V#X>|8Hg`2km&zLkHr{B@k)=M{rNfN&2*M}{eR*DH zW-==fh=ic@>fKiEG=Z%A=cQWVB9AnW&Bf^0Xv7(lv1b#!kY;u5)h7wqZtd+ALI#X7 z(t(_h-h62hkNA02{p1NN)*m9pf-j4wfTBTYzW69aozYd50u5^;PN5FL+H;`zrpfQY zn=e2x88W%^KP^BdA6Ihs(~pMoPuBV$^dZTx4U?xBNN z=%ipzL7z|+@?7VLA2D88qi1pQ!+iVK{{i(`>TIk3rInK@mTVkscx6}N#SupV#OPxo zcTonRUI?(Ij{9#&V0j++YFf}!DMCWruSUuh3sr~*cez}IOdHq4ew#B*Tj$Ia{M&zH zMQj^J4d)+2-O6>VgNm;viFL1YI+1R4d-9gJXm$S{1^o>Vv8>@GNhQ9C|Df>;ziEDc z{+}6w`51*ynstGu+!i4Njn(FN>r)x~AqKA?!y`!kU5?|jm@>XVbqA0e!z3rog8VBvl`u(1>{ZjZJE}D6~4p0c1 zHFv4|+@XmXJXd#b)!5xEYFSJ~e@z`Il+7xdY)mmoG8f?N&X4YLaPmu6uUrJY_B%U! zrb1_{1Emo|bsoEi#^7lOuynyJM)Y~)7=Kr(7kyBd;pd9D_aFfrA(R}Op4GdE#E-Q9 zWJgt9@8~MzU4i_ks=CIJeuoGz^x64=U5~TG44McTHgzyl>v`THx-xSzWO9EJy7NB> z|7=x@Um(v=QCS<9Z`u9JP>x}^y0&^~c9enLer?5^CzYy43EVX$6}$1_%6%?WSD)8& zeMxlPIA~x>P|(*K9j*ORea#Li=vOvcjH@@yEL~os`+q5rpRi!NKUg{oBO`9v{6lbA zc*Ip{@tqrbs%+0vA(QAp69jQ{rVp|eu3p$olrN9$936+UEBE2ts`HB1H|XnX7pzxx zwg&W?>bk-Q35RnK$pVwAo`J1T;LgtDD*m)Z#K#H)*jotQohqZ25y6cC30 z-#+?IhnFl`oO@ONa?igpwKSxWEL*E4p8TF6OLz13l5R$8h2WaAf%trZF!w+avedz3 zYgSMY-nX^i^lekQaApaGIuWE<|C+#C@WvdexKnR`Y5rb>%699d)98RBTg}IfAZ6H6b2{S_K))29Uk}c3`L+*E4!oPjm))#H=o+Bl z%Z{KJx_jmWrp-c=0Pi;c!;q*fJ`W*{*~YPepbGfQ#*sg!nj*%EZhz_U(KK-cz^{$* zMtZ5EF8GoT8^s8((=%VII8rC)=2H&w8}ObduF~FmvRnTGRaLSBD8gk3hHAs(Ov4q% zV{-^nLq78K=ptkF)y+G#T6`M%rC8o5oxVd?&Kx>}%PacqTS^`AXlG3A#8487MB6mx zT<`b<`Ps*a=8mGJ|C?C<+}Ixlk&23{@Vj(u37^Mixb^YrF`+`k^;}EfQAd}xle*Da zDQB#}s0T&BIA#=d6-tShrM8Cg&tPk+Z#s#hT=0mQ9JC$b4t|KF4ua_piN9tlt?LD5 z;9%2S3P-04*z}A%kPR3^o`u_Cm3)75_JmY5CeEgA;^~R69RN^oKIn1cvi@5Bs>MYq zds{cU?*nnQ^1Jyu;p$H?0;ZZdDy2D=TpJFlJ@=Z-USyAbEGWO?5jNu7Pr+bpL6rG& z+`P7(3FXh9umO@Q$=Kh2rmbqY(^LAs@TF4`qQx%^U3FH=S2eZ{m2yLAlBN2c)W5#D z(Hc>v;nC1F1s*1F)91T87e2h<0#`TPsRr)@7}1pY!z)@J8wE5SlBHS;Og0kMGcND* z32Oh0GfGL|Dg2h*{zzPRGJarje6kZ~ns(ifu%VFJsUz7N(}XR5~d`1FT<2}wK&bB+j( z*G-oS1+PHgzb`J=$j~B=CjG~#`L0H+4grCAepelBdi8tyknYpJLk9r_kJf$t`(gcw z6}n#Z;z3UjDi^HDa>|A58mSqSSkadkBVIfgccNAIWU{*EE)+d8SJEgw#x^D*a=&IL z3hTLy&OW;=rppzqlY&Tlbht1PvXV2Cc#{v=@_7?hU%0;v z81Idq-#%tv4%ha9Kbk1JiNOCpk znAy^Ar*l@uOUjgTa21l4KM1-q?r|c+2D~PV|AX+#o=s7eKRw^L*{jNUi6de78Q!|H zccc}ruDYBMLyfjb8%AQkNsxmO;D_O?j5v7)P6o1nQEA>)gvAq@_$tDSQ-CmXBMkK)8GEG#otwDn**xRof=`<@2%H>5;93F zH++q{I^|v4ZH~W2%2(aJCHuDCv9*^t&+2f?G$4$Ag%e|X)vK#F?}6<3tzYtFcR)`>F-r^bxq2t@9`6 zF_7d-8L;e?74KRsTRd}HVxFg$6lm=6W-T$2nl@?Z&by5mdEGZ4i9!+-NLRKImKdT9 z+k)x?fBK=zZ}{!jg64ci?X2!^_f<0`%SLo5usFN(Nv6GYIQ(KxN^K!i*RKc-eSVWl z2S|+bqAf<=zLP<#7><3E;XTUkXDDeXuSIV{zJ0+wYnJ~^>Gf?NKGx0-Q%U_|9Rn#; zA}^%T2MV&Hheseu7mupGFC;Gv_U%`EGgc!6A==43jbEg{4+b#dA;G;4H6RseQ@}_r zkA_Q-7Fb44#Wl$n%IOck_i%M{dyQGOVpDr}mv|JFKjp%LI#dU{(XXm4O?)qI^0=)d zUFq69GXJMvG7)YVK{zK)8mG4P5uE$(b6;6_$zBl;Il&*rNV6e$kp7&DY(i=evDS90 z2*LKM9eZOb-&i;5>|9NjF`X)lw3wmO_8e80aJ2xs2JoWX(Zwg&lqMh>S zzUMQzlVhj-68ru>*ndr4d<~u!%$qgbL{GjmszvGhO&vYp0=z^&Zd2PjcIu{zgEnqe z-wOE|zk#j%?p;vV$2wPLz%T^<4k+0sct_I2g3EOzb4ME ztiFKL(`p_m)vkwwAzn$GwkC4IFyO#;XC~#}ntyv^_)4Pu*AB;x=y__$QtNoQ$fiZ? zT^8yV$KS2>k1d#CZd_Zfm&9TJENaIP;3cOh% zME;WabR9^5J;-YHDcXUle_SEJskNtCo#E#PsISs*rH0%Nhuu6OmX{khOT%)qN=0E* zmmLo{F+*_f2UlZCH0lfU1K^4&kicY{v6t002;eRNzSdEtDi4?ha6{DvlR15yzR8qH zKM)~I4%EX1O!Qkrc$hUO0T=5EVOK!;%ET2(Gq|u$PZi&t` z)3bg!B$1eM5k+5_C*PfK$xC!^)hrP)_CJkZ?P(eLJl`-nZ_N_Pue?6LL>{}^VQlG^ z_q$D5^>o~+ls2h)_P_{MT1YIGmy1%i4`bp}eJ}blzmLGk_kvP?wrUFD?cD4nOtZo1 z8i(>0ul#jt*S`^nTa|^R5tex0Ew$gU-|cV7Kg>5LK(4xH=z#<9a#&ej31CZzhlh&~ zuiNG856%|*uHVu}v~xS}*1S^nMf|%JPF)thd0IU$Mf8g6;Z^pQfGInQrZ3+4(JAfY z#{zMZ>T2iCrV*Cbqj4T2m3WHYUNPR=+b{C`J)m9&0RIB{1M43LK~>zshzU=E!1KC8 z-^kwnCm5c*n3}O4$tI#qhB`Pb2~o$&l{N&TH^>=SQ{5~?0UH%ZGlb-gkV%f@u{9_MoAP( ztWKd^wY{P8w*J9Is%W!F}r^WORR#MEPRaLc61i}){QtSGDkE{Z$fW~Y-eXr$S#Bx?3|%vRA(XfbH#WA5+D zfBmN2gJpcH{HOZ?{bG;6z5CmsvAtZiQV-#p({&@ugYPL_j_3PqqoGH6;)QQwmAe;0 z56cB#_5BPvR6ML(?Ug{m63Jcm%7jN{r-16s+m}J%TUMUvLDP2n53D-M1d-yEfYm5E z$zKarje-P5J5BL4ebwpp9HUBf~dSu+GM(@*nGf2Zg)Jug;-up z6tF9L^DWwf_&7J2f;f@~JhRxCD$Iyi&x#rgWzyc|?V)9wQ)-fWER1-tK- z`u+9;s(=Zb%UHJU(j9iN4As_x5Uh@MiUCs?1d-rRTaG)^{%6T%sLUMm0E_IujkOnB zyOp+)&Q2b{CK$;&l`;~tQ+P9`7}F3#J0%%^aD$$vvZ3LXa?#&e<`RmYFg8AIU0r{( z%!{<%8^|-KnG`(g%(HD78%q!up4?>}lkQI-*LHHLTZ!%-xRyiE1MKXWq}F-Th37xt4s5KH2DY zYm_+AOzBdN&!FTsBM_EB{GzzA8=va<3*F5W2=`lLv*~+NUkIwh!-InK#yZlVGqJC2W&Q8&!Nj z4V}0_`^3KO%|Xi?A|q@LAV<&A-ho8wfjy_y#nKqRmM!TY|C`0ssuhe{ip z{BXlXDs4Bk%L$rNJgDH>pS$|XzN#?C?+=L`o(PIiMedk+67JQuzg&~(XvI_)q{OZ` z_k6K#kV?$GoqZ;zUt>2ohCzc*+li3pGzs>oU^@y4cl#!!sn}BTC)dnw<*VmQErnsR z`Tq0X(KzdgCX_Hnq4TWVD<;F|wN1;1?S zv;d-#9!*uajd2oF(W0`V#f>RXIut-i(+^84$iV^ggaiw-3aOIDawO~R%x=$SY_@7_#>7*^C( z?leYA*u}_~N4VLrj0A)0-s%GAK=BM%r<`4u6E}7>L+ZovX`(=s{?x@}!M3E=D@Ka( zADwJfubGd@Z~I|H+vlstP_0qQ@3I@~IWD#3D^|wHvvcppN159|Eb+0r z*dbT~ml~~7Vc6f~i1%+E0tMUm9J0^PTXOVi`n|oqpD;8wf}No>-1yPGh5{QY9CAN2 ze(IE6KgTE+$bnulc(ke}5_b%QbAt9;Yn^sqBHgKTco>b4N`8z-QMjkTfWBse%pq)U zcXx|A2virrUSfyXzU=}Idb&b@;?DCcZ$?q{J{P3$9IVG_NhVO(_ZJrVs`&Z4f_+pL zpl1uHuDm{n-w8Ar=373E7_emSt{!r+{XEF;KkI)#Pye0M?*ThUB21_vWA3-7~el#Wz-38X01L_Bme8 z$@y!fa`n4qjRgwjqH#OxAQ+?g$dJJ0rutqHuKz}}rrM!>2N==hLRKvvSG#bnQpp?@ zN-U&z;c%ZJk?MR<>=4_Whv)tLfd{n^2?`-H;;&ua8`I&Or)4GaBe-$zgN+)6D6q^N z4T&}55B9mDV|sgCLkb5RVFV3d{7cSv)cN|*eJ|1E^%_NTbUIu#zh(RFBC5^S^TZh# z*`N$nEx)d!2uUm>*_&?YFLB?zK(?_tIiFG2H(*cfVUoo$D*)}Gd*xT5FB|fb-NqJ~ zXu^n?RH`(|Ek7@9*W@moXr&;GB`r=Q=*X5oO~;pV&uNQ* zV1@_vDAW}olE@aohZOr=Ur^sY`<|^0kBll6&VpcKmo@uYf=RE*$+qY|&dsss!AF|E zTR(4xh8SDBA08GbggNgqLnGecDaBT?5kowow!XKZ_U@BLWYw``eY3wfu1$8v5xN>~ z;CH%Y%Uk#ubPm|Wfx|ZG(8`tW3p6?3> zBr!Ek{C@-Hp-ZFAz%ZoK@aY>y;f5jRBu;pRyHOU1FL!l*i(_Wq|9%LiAmMi?n9cBo zg%RtjIbDRe&3-3HUgja?S!L$rz}k*D%q4Pwvntk}@g15tLU8W!@q4@va+nCP%cKsG z!S|Z8^~@YqG7x;qYIQ@8uZixE2+M`kx=-J!^LsXzu_qi--T0e8Q(DgKpX!VOETlV0 z5ptFcTM(otO}#rmzxZ(6t5FS>0K@do$hHL& zAFq_=A#|osp?g_PQq8&5>NLMBxk}|i#gy-6)03n5*TtQZTwt^lG*{+31v?8K_AQLE zCr|^;w7brr&d`5!jY?^?BSfxHCmv|`d%jkW(4oCC_cW#)1AqFI(ZrD*1s}d!Cl5W} z4bBbylaLf-wYKQBv$JAU!oH2^0a0&0Rhl+Jc-eQ*j`48}u#6DZQIo>@!bQ7kxQ%Eq zqk}A2v?)TdvVQ0txj5Kh%5fwU=d4m6)-AIgflzj6%`&q#8ins&}7k>Jja)5twJZ zrq7)Ad&P~k zD*a~KTuy`nI!l>kA~#eLbSk3^7lVWa#l)5H>PD`&@xXqfSyaolqZJrq#>B_h+Z@Sfz6@stpW5y$slO&)Q- z0VyE0Ipn1L%cD0&?eeQul6K+hm5s?sL>zM}2~D{0&zq5eY-iE3 zZM(eO)9@udUCI$5{9u@e87mepB6No>x=ny1O+19xw|l%WwS5)rBdv&ge*XBJntXCX zA0fZf*;uVnH}bU1V@;s_olcdIBCEkOO@c!xMB>4?n2aF)MU8Jihsj}hPGvF8SwAbj@0{}y)6Lm zAyIZz&A9~1iIZm%_f|n7cIW`hk|Y(alM{5PJij^;(YiX0c&GYrhyRh+_iihj89R1E z1BXu(Q;K0}b9hn`sV4z%oEv9AWEoY${v8@DP(q!kA@|i)%DmG(TAxR|(7-F5%9*e+ z(*A`8I?2}OL6ofhzQ^fsf_aV?_8(3QJa$%AFk7>MhQ=i@73Ic1>%=Kw=uYuY3X#R1 zcY-AP-b#qg&|-G2q!LLuBuyrQwa`3nZp47&=}8*iD$wWLc-+}{{L{8#LU)W(^2qS8 z!vTnzW3Puhoq<0>?Q?}|8}088Gbc|TIlXy~qL8fNjjY@vdgXZ%((})x*&qKL@kY&fB+OSJe2eH=dqU% z{-;%_qH28lHi?_#ZT9N3+85ScDgPL?1rvnV|HM!Ubl zaDgUiKn`281?T#hP;7>rsx7*k)3efl=@c@3;f=OkfDIJPFUSXm&!@o*ebFh|dUg(J zwq|i=&LBg4nuz07eVF}|f2$0V0tpo9BRD__V8SfvX`(ToE1l3!9?>`PHPcnRgg}?O z5Uj6aTF)B2o(4Mvj0znbpM28FaCyhaQ|4OFK&#Txr(={tlLV>S2-q6k$&h|8l}9Id z?o6~KsU!m?fRX-Qu>na^Bat=ahJp&U@65#Sde6nntikTIQDA2odC+4cz z1NlszRFYP;C>gP-ozo8yNQf!-vRB2xyOgo&#%g#89_Nz{lG2|4X#ue6)zrd+yEx=R`Z--~Jn60=^*lAgK zrO`^K|)k_3`{2 zgFa}8(~I%f&zrHCw5kmgCwJkpZF>q%Y4oyB`%dpM$3>LowM$!9SKo@7OK{4$KU5|2 zu_suVzn+PGXnULD-uqjQNQqyxqm3`L{)PCg?S+qQcsbTIjmNQ6JjrqRiy6MBzM~8F z`ULzh!n^czY?;ziD1awc7rB5B+awN}^VJX|jMo4a+TyJ%#<%XXddjEDD|X`u{^O>- z-isLl?t}!y4sw3p_-1_lS*mBQEv0=LI#W*g-Tk?CuHnUC=CQ=c{o^dLB#v;aRq00_ zd2&S*z}rGXLV}_b3_Gp$-NR$c)(l-Jz(OF?hXA>aV51i9ziaX?l|xiQaqr%E!^&B3 zO-K+%4ERPm64U!M%wkMVYogh~1UVdGvz6WULP15XtXALdG0)yiT!NlIzQHaQ@>o|^ z?W{ydx2tGY?=FXHa5??WUh`+>KkcIg^EY|LhQ^i%vaY=>_b9*Xdf#Y%uOr@$LCg9J zT4o@|r%9HeGWx^UqkHr=utf!Ha?7)ILvpcsu6RjfJJK}06!>1Q?sg*o(`$8+w2#=a ziRUh0zfoK2btUXD69Ofg0Lngz0pa&}$tOQ)__91MfqOF)=%AYycyVxdX`2N-)QOw@ z4O4X*U1GS00Kn5Z#Ycz)956dlNfsQ#a#X?;g!yX48|prwVjzxKa>9lU+N!YfYufP^ z*#px`>;2EDwXvtCmI`}-Q18iQ8&N0roS~mDPsvxbT>gC{59+WyP7AGu7xa}?7(r1s%^W3bChlP z^Q#Mm=tj7;dcTP?m=d_kqJt07LC;GhHO~0gskhp;CZd9|RnVR-{)#f5FyHy&3^S19JW-K!(!Rcc^tKi@Vc_rHsri}a}4XIn7FDg}%m}BYC7}2^-t>F`Dh)KCnijMYlWtS{!FK^nE9K31$az%-SsL20yEV4QO&YLV~u7HkA9Uiln zVF=0UZ>(+Li9`*n>^#C7=cz>CG>M}W+F*)+Ty|D`>=Pc?LYtm%_MPI5G2}FBL*e0MjN31pG z6DKy(TMEqs#q)-as=B~KbObL&c6I~Cl)jozvuySEi`M#Pw#rQDU%Wgbc91SKhO67( z(a{^u{Qk<~?aN>H=9@zQ$Q^b&W0K5fLy@XzeBm4rOo7mkUj5uz3nhqZm}n=kA^deD zObF-L%C&R~{*|#|IR1y-vX-mAs(S}{?|wb;XuoXIi6;K1mVH84pF>>BhJB%uDFyfVIANeDe^r5)#?&e#Ce|3xlERLl0<56Q7S#9=YxyOd4PX;MDJS7!W%|5 zO3>)yI`Q#m#|n4%FW=|Z);pbdB(%oFup{2s|ID#ube>#~?o0S|FIfJ3o+PxLNcf~$ zt9630J~0O+N^QR>wVw3XI|8%$D~C@5K8F+KZU4B2pl8r`?VfY`XX#QXB>m=`urQpH zIrs(j3{%(7zC|;q<2Gz*>FH$pG%#rN#YZx-F}Vj^h1+os2$J2PSrYcm>wnv!{6ceF ztIxlR_#E|2F`4Z&*=SQ(@-2yCYo_e#7Zw)GIFdvXe(KPAJ*q%(OfR}&?!8CJ*;%ze z32I&X#zsI+ipidR+m~X`&i;?4tB$7o|NmmTV|thwhGCeFO?P*9o9^zK9;S!sW|*Fy z>F$oJn~N)cug~|K-=EImT<5&+`}KN0AL+H?vN-bMqx@7ujfNOyY`Y@*(aM~f`rD5J z%r^+!{GW%hZlG5uABpo0-#h$ZVMg-%o*H(H`iI+)0jSmaJDL~3?dt)K3lNemG4+m% ziwndl(#XnA?YVNMDa{yxARi9d;`tG?c8H!cnxB6s)d0~?w5hsu5~?i_yH?Q}syLu- z3K*i#;m1~(^s0N|C)pTFjUV0*Al-|%^9b{cdz*ciX*ehq6lAE;#;)NvdJ$^yr8!Mqgk< zPJas|<0=g-2>IrbFWv||Pn%X8A31qD<>-~ljGsdKEGZ$2ef8a|WhyZX-BE9s(<^%)P+R~5NNzcnL+lRCEOg({*LppS054{XfE)UO|lpTIU z&r}?T_XYQafIQYJlBOZEaC3?HVYoB7PhjSZr0{+iRKjNh4g%%Ker|HC=0 zh50_A%9FYO;GVA0{y+YB@i?`K6rEN7{POuR0EY5S#+-eDdHo7&X)IeCUwj;% z^f-Br($dl+Ew}9vyER>qafYm?ly)kafG`?F+t4*PwIT3;od1dIq7$L9Yy}hwT{9sb zE_ji-rfZu;8P<&>O7ud*GOT z_4_$kv^In*qWy3`F;Mc<%@G;#^FZYW2M349&OAqgU4u?UCBcd*@boW!Sl8sCpj7gt zdZaw?^XcEv*e{`gmv=GWXHmTb!nW!L;JpxQR_Wj%OE9X;tPMiIDtIskNn#Ob+IK;<{{5Jd>_ow-R`Dyn$h9uoakJ7 z#7<_fHUr`MEm*yUpdS*KX5blg9UI#*=Kaf~$~J}pYdw+@9(QDHjLM$CbsZ?q1V0zB z@$uc`vgrnfOJ;AKcwJ-|d3dr&C)qyRn52s|zYflPi?@7;o#tf3or$-Abj+2fgxbS~ z79PC%sk)GKSV574n6^1Xvh;z5-9Xf|DLV#cG!U-fZY3b-uC$G3@|j{~cgdweh%na;I%^9<%S!~dkFc3dIMLqAodotp)sH%)!*4tAY;5i9 z@dRxYfXmb5S;PIugf4&mMe8QDJ2YDILxdGbkxb&zmY;O6Of%q|s)eU6V0nG3<_ZBM0)eisXxwBskI7?OAfP&FuMQ zn`hw$HUm*7k6y06>Rgw$W&32Ld(cg;+E7w2hWZ3`ysjWLD$BHIV5Nh*&sRl=R{R(d;YW89{p{cA}^rs1?57b@}t zC>%m3e=j*N)R+M@$}a}+wWoOuDATEb+5jL-r;;wCXiL>>^8@?4{x%|%JOds`z59b(ZfV#3Ih#~ zRh@N(bB|T9L0a}Dr!x9kJ0D%I2EeR+ko4Z{Y3s9(^xw^0SE(jVcW)sS| zxzPJ456a6?)YW-Cb~&3xqCQdoab)Zx(5yZ)vd5xL2dS~f@AY2(G@s%OE2E((DzK)F z2p?ZWPO(WbqF#q@soUIYUAyONO=rf(&!|!@pYys{dvxP_7IoQGr^OGZ2cGswLU9ccsWe&>}=v15cMHY2M2Z)V!MY zfO=jx(=YtnP9#h>V*4{D+&&~_6WO;QJy}XfP6{uumntqm2Ar4O8@Pr6JEUJKPtGPT zkTu7$x6_A;o9oj7mmxs4qF=0J&(2E|&842$+*~*6C=hJ?{q|*)7&G&?cPx{X@#0=L z|HMH(Ll4fXcbXVYcu}SvpAULZ9fO7~I7tAsWD`roM7|^!7mJIHY~8?lVczBX#e zU`ovfOCmhE*A&l8+}zd!2L%w$@n2XjchYho4-2Z_Y_K$%*s}!N|DHa?cJ?3iW3PE0 zs{;X{rDBeexjkYJXL@$VkD2|1g&{z=CU6uh0Lm_$R{CMjQW%ATC0l<}5=@SIRex?q zt4PXP`!qcM7*uM2)x?}W`RzwSVrQQz;9MXC%Qtrm)0*#f9|XXR4>7{GthXES{vyTo zWBmXd6n{E?J`cc)6$`zlbhOwf3^PING<=)+GO(|-kDzKGkA&gmx6xT4hULQYqQu-s z2i&uj}v(=oF$G>n-rwm=k;UZ$ohs4#0P`7)M)n==Mx>dGl!0Gx!l8?I4e!GL_NTY=h= zWa)h`&??=eM(}!Gfd=$yd6TTvO<;zYH1uC83MtST(k8Peu&P@fB3lwez*kKQ8|wqV z;9yj<_LpkAAGd1%u8Epb=fc{{`>J&F$O;5RUD|I3}X zb_ybII>p0$!6uI}RmU4(F*pLVN@h(Zk$yW!ECUQ)H67XK(S4BI7KvKDE-EGMrRCjy z+cYoON<1nuLhueL76Cdk?+0PgW|g;;G5BaGrD~xLXHBcV*}5JlNtC1(HojRB^+82$ z%W#TREwkt0nlv>ke@ha3bJVKT^i9N3Xrs)WBT;ODe(E!yAPw#Poq$i3x>)@?HL@b( zgvf!3t?&6G^g%^Jh>e(3hHMw|^4%8bmJd!IHW$x#80b<7g1Ic~1y&oPhbYg;Ky z@yT}q%|2t)(vw#mr)lXsvdU*-Qtau}cpHpyKX4^It`>h0ZPT2)GOp=8`-QD^%hUe0~&h5?T+pBAW|bUQBYGTZJqKR%6k1jtn>nbfd` z*mt?-{UNXR4;Q{a(WT*+CQhdq^!yrLHeppVETrR%jKU=hy@xczj1=H%8u*Ix05nHJ zc2vA-Ra2X|Lw_0|#sd;FN^-*_Wgi+kFLWQug`YTBvUvM;cj-EBVyiEEsM_WEQt}O| z3F2cmz|=_;TWgLNkI`4W&BleLFWFtBQVPrsV5l`9`XjE&);W~I7%QP4SPp`tdvxAA zP@M|}EEN@!n^X+SAn;63r^+j-L{S zB_t)ZJ+FY7DqvxS`$pG=65BiSeSW5SNIt`_U$a3P-X}RH!8WbizeXcGW|3Q=c5@vE z=diHH-UDpy#8(Qv@QA}z5EJPAIqcytkfh1NMM)Iw#Z^PAWIQ$ZCv1jL63oy7r~`Ml zmzsHrQjv<@+7PU;jbjn$27^GQ%}bZfy%)OtNX+C1HU!$?&4nMmlbxbd$TFJ+K6l3Z z)7w@Q0uyE5;w~4kE_N+nb5^It4APv2%l*?yoT zNd0$my)*m1uE&uZ2NlVIKK@HJ+&WuTI*5^5JAGVrXAc&${NpK< zw$v0;VsJ88^{5Z)*vB)sAM(Pv392W~+htq&Yn9Ywzt9*Pn;f!tREi+r*WJ8L**DtT zE0#&~9OylqgiV*{eFuc#cVGpCL~LKD-2B++qpH+C_2teD-#ajxgB8{Ty@ zid{#0l=4=3bEL_C8}Ho;*%+t%y$=Tf_~|7j3JR@D%A&0^mVdjafHBRGPQFlOwUQwF za(zb2{zbU^AJZR-fwB=v5{t7xD;PpWUaP5J>sj8zV0>zrEF~(8X@E2~m5fgsg0w@w z4gM_Umtl}bs4P@vNdt7%^g*}HBn0Z>Y7_0?2l4q^r&K2OiGjrE{_l%a>)Q5uQCj?) z(e^QV=OyHO*uv_nyN!5egv;gE_}Cv!I(h;Dsr(+N$wNC*^aQl{PK+sxfUef!{5QT1 zr>o0<1-+hBQdb!awY0zAZ%5%IEBlL-_|hUy(dF>wRoM)gP5pi%A%vKyWR5&XHE``z zat^D?pm}%^h^mb}{R(w40(Qe7w^yrvtd|W_;@u0j-X?8l%WnS#40B~(-GH@KO)-x= zD%7L0^yq{-$XxsO@u{j^+Q;6WB>cCb+i}28(aYc?!H>5D*Ze4vuLXQQK%9b%95vf- ze=i@4evWTsjvaVM&-c9t#ZDwj?cmd4JoeHzL}m&1#>S@*tWJ!ueC}cI^S(@GR@PG# z-yF`f2eb?g{khiMDa71>=Q(%3)OI2K6%MnY}V@|iAW`y!pR<8cc|dtrFWj`Ul(8(GWf{5ag{nlA1z?@&=;CP`}S zmqpr5<=`$jkF;4{j*k+GoMH`C>>rm0_Dk{H(aj~ilkFg~55r90SY0B#FcyEU$(+~Z zTDRoo46)cbPtAZv&vJ-;4T= zCK_A*K20-C)-A}J)S_0VD$r&BRAW5P?0jPKeHgUIadd=_m!jRg>uAZDV_C0- zhHpPDHONj9XxA|QzZQT3xp3{&6x2nkl>V-s=XZKw@HlP6I)P&K9VyK8ncfTyz*9oT za$VF|;@1EVaS}MNg_AoLaZRiH^WjQ^%j0zAQYfupYKkzr&o6A_Gu#cU{}$x#>ZCo6 zqY36EWB(((x2fat6<;6YHQiYQ)|Mp%sF?2K#vP?oHIxAQZ+{LhFR)#Ipwlx zaMb6H4O}y&{r$2VDj)Z5exlH3#F!p=Z+{=CEbtw}(^Ja+xpzplPl!!n(h}xxu$5=( zes3H(QxZ<`4x#D{h#Bi}j0KmKn!M!A;ENDrm3_jUjDH%n!)NQ%Z$uHl{gbEdiytGV zCPA;&F9Dcox~>j=dgN4^bd-{a#X>KMkCt*m8JnyUS-tlOzVul(ZQ>ewG`#4*GEJE*r?1F zC_mJe^ta;+D~ewT6aS?Vb7`qi*Q~nU6mU#@JDTaR1%-)&K%_r~F2#4}tyG&hFW`PV zpEF;^Fn#;?5+Mk#I9|~O+LhH4zG&?CMpo2*GE>1M1NpI?bk*w_5$H(zOcH&C#vlgX ziFcCmVyj48MdnWT+i1qMkP200E%em!?QOie%*?B+D_r!j&~JQ%wAnHrT9i-(4R&*XJg6TY1I>e}H9gj4 zudsd{u?@8~EEkS9%9#cPwbL8jN`H=TkB3&|EZX#FDeBE1N#RGCC0VJJ1U*Um5fs=n??;2X}iCO z8D?Rr&t|>o8|(PgtO04)g#sT8DE`?c(p1i5Y#|_e_=ho;z=~cT9KN_6#zZ_w9R1%i z8!yi5b%lyUoch~)p90J(U5&hMb{VZW7Uy?_9cLHvCxTg`%HSKG4@YMPKYVSjvVDOB zj;(;F-T1S2__pNQ%tPCwD?Z>gR%_TWgG3%`&bcKDQ2l*U@xk#gg;f1 z2ex~)O}oU;8ypl!q88rsy(nny6w1sV>GWfu)>QJ{whJZSYhGJ-R;6*{!dlBy zfHP)4-N9zf=7P6sd0(wmyXGPAmKZJ-?|Ke5toWl1#bx|^v1a_%iUhgQ{FpsB z`;Wf1a_D`*pHW*T4*VG-8TX{+;nwoZ(-^3JP5w=9M`s#bvqoMt=S^>-{q| zF7Iukd=ZvUoVqmGCv>wp0s-N`xH7LLqgHZOsQJCvQ{RWrrP}lNV#QYK1<5h?dAldu zw8woRJKA=+y6PRDrYo|3E!$nDl0=(?=5)%WS@t3XK53A)j=A7~Y{M$lx#3^b))Wn^ zqiM2PTSQ@sn@}?>(7AaNZZpnYz2HQPFP+3YCg@2BPp9fI?m|Ga-2iesVXZO81s9_y z6t9>F8hUCIUjvP7Xucsr%^B=LAui&#B<-ePoM7Fw^iQSC|FnW2WIO)d@d?t2U_a7| z;GY6}$D^_hfjne(y9gf2(0AI#V*>*maT6Hm1oO<2T+8WKSb<4M( z0$+7LJ#1e8pfynRzQld-Ss>DgR-wMeisSvpr;W=y0g+%y*LP`xpTx|ZUh;hl%*R=6 z=uFB|a+;~{$LILrD|A{SjKv!Bk5e8Hd<{CWL&RhCbuEqYm|Hsb=x3U^>Od}mrM@#U zi5_mMD>S|~HhF=br!=lwX~E5nb{`Tao+1Y{LkonkbujpG48$j~60%{2uzo|>0LgNLL$j~`kRs#uTj`f&yQkP0 zmya>@^ozph2m~C({0E*FV*87y0HoOaFAx@nuDG$DD z?MN{-vx;1G&FG7jNAF{VD2^#raevn}fJ`;NwUgd#$eg>q7~;NtYHjkozO!6l{ARV! z_vmLG4)Yn@9nuqW`&tRujA9D@?v)+p&hwqIvtyjo`nGfk)$vggA z%ChmhR?%_b@nmAIu-HdKYQ8qg36e`%=u^L+LW@)QYLY=GIDxw6e<&z{d_RtbsGW3| z8E{T~x4J}C_q%cM_AfQ)Hl)ZVF)voy9iUnJZ6R={MZHpGh31t%e+nPY@WVJU}cFJVxlDw z%;Iy(sywDhwN_$GE1d&HD=$F|pM0fsr3SI{xkii}pSU9D=7$uQJBk+7iY%cIJz$jr z!Ea8}ug)4+112sT=Q3JjPyS1&mI%?}Y+*WWvQIky&Ea~)yr+Y0v|sl@sKd>6%&lz* z&S|0f)m*i`u{Pa?BdX|}bWu{=FONBvK`_4?@QmH}_vf^mL*4dTSjcc40{rBtt(N?` z`1oY#l2^^~7wF>alNT2kH>sZDp94?*p+3Shg>6H>z40xAhVL*S3(L!|7O}7?jXuwd zQ~95FBb{0XTxjB#nwgZQO}0-*jE|?f65^J2 zI`KGT>b$}_@%5&XPLe8Q|K-Zsf<~Sl`YV&+#PsxyJ))BXD0A-)Ojcasbs?MSq&C-l7%@!W zi(VtJf-pH|fSkt(3xF@eWk}O%|0$Gry?j?X!CZV}Z~KKL=$HV1bQQH_#@$3p^$Hki zK>ABTk7zf}(rNL`WcHsS64~;@`Nk2D3+_QRoY$aJVxwxNJ53HqmpFNan#LS+bNdjP z!sz28w`LLLEU2SY;CZ7w+xnYq8Gs@#4DS4CR5qhX5Y^MIZogoMQVLMxp1HVsN5gO^ zJ@Z^Cwck<}6q0veOdCfSv^qzDZl#X1=CuFRwIDL~MToylVO`I?dRve@QR9xPM0-QH2{A=waeP|kzJue0?*@j zmz|wkH|6FmL7)Cw30FAt&VadmNHJW{GIHaiZ}Xog|CehlTCb^Qm3U7L16PirW#-NvD)6|15(I*UK}BWY_` zO{<>_v-~(jPSMGR-*80;5VDxAB7c9H?OLeZhyHggYq`) zcyW@={~0707~H}58XpH5h-lkdKgLQFbe)?{fzi^}KNqgaZxamTS8#f{WAWA`z4^-j zQW!@plJoLjTmF6%)vlK+h%0$>M9qidTlGF-h$!WzVyxZInS0#y^qN*$#d3<(4MhN( zhSHtx|Is&k3~B-%ozvxNCn;3az*mm&iA@-7=6o zvBj@`c`9V8+x>-u1k&`-gfUBwQ2*v4otyf$ zH|I1RtA1;*ch%nr4@#AaS*_)HIztAq&o#TBb21%fiuD*PyvqKmR9Tm^ve6W967#TE z&{|>MMDl9yZL(ZVGE;4Hy=bYPxvft`=Q)38KLFq}_s{WU`tXASai(fx4v&wwHjV_s zjU%t^$mXkd3iui7x{4XJqzrC7cnB>#JtIZ5=hHE-p#0b2e_xk<%ywB=XDy`rhMsBYg}Em$#-m_BNSNqge_%^ftOfUyphFDyb)_di_bxjU=F{Lj=b zIiyQ^`EI@}?QTaAyyCh;L8u;`i|I1~5>eg`*LgfDUsfnwe52Rg#wld*GY-z#nfITS z)8-q!E~7vzW*JrWb~bnM#J*VzZMm=U-V5m`FnjBadU;)gY8GkF_HzDTv$`3gxWQ7i zwCsaND-^AAe8<=C0hJlf;fNC<(!15IF*qJpY0oXuvHv3aRGsnomHR2Vf9v6B?T2Z% z_QUqF1v_@O@xGj2@~;Vs-uhEoG7r>*lYDro_5m$5CaQyvZ~-^Zc&| z6#fqh@|ciI;?XQuP++cu?<1DX4m#*=`7SC&MnOWoy_^fKez1Ux)b@S~paRyWsd3O1 z_yhlkMmc!Y);2URgwmyOVQ!VWY& z&(1csxEBU~{__jEXh|F{zOMddIz z{Jaf{yic?vj70-|77RZpTrNRGC{LixuO(^uf{QIFwpD&hLQ0DF+2Q;}BNoPxtr!iS zb76GB7pcq5SW7^=8JjXmma2%VnCZMv-idwheqtKQZ?3tpr4M3^5xv|NZHcA26>qT7)fSA%G;*x_I z?z&KWVZOUYF5xXpE^k-nsXr}pkEKOPnf$6Rgs3ug)W$uc^xT+;o9ixJ)9`1WweMwo zCnzIj)f~<4KE151V?mGQppUyKfC`y7d8GiPhoGRR*T;kq<1KsXi(<>T+KwE1(_k&R zuh_~}YEj{$TDvEKKMN1R3i%M-y?Mc2&=Vr3h~{AH!C_xQlQ7?CFARi z9WQX#XEY6*MSSh$rbN`$S${knqzw6#lKO*J}1e3^0E@*A)TWM!@=^Ml!q9Gwtb-fPHyAEeJ zimUrAX-5rg3o#TLj453EzgC<$4*C^tz+HxkdB*xY)9GDy*sdQoX=AO3=?V8L5Cs(^ zf)d`ZKejzug0#)2R~{S*wDl^oeL%tgr)gPX%@Di53Q95U0rIOn)xWJ}- zObpXr>=|XyM9|}6syJAgc~6lP#ac`MOhN<6#w6(H)z6hR;}>^`n3y-pRkI)D$tw$! z<>;(9b;0?%c}^lJ5$<_@Z@%gaHLWt>kuRKetozt)1>&pf>Bn{X3Y}wD)iQJn;>^3Q zEk`+A?2=TPM<2t?yYtw%b6fx62>%`$p0IAj09C5tTBEza-H#bt@OO6s;?@PjFmo}# z2%~`)r~5DLP3kKSmJ-8uR49V)AxyZt4pRll&dciR8WkL9KC7xnNrcYb8X2(jLK z$DE(8(DIExJa|6NqUB8MV^`4Rj#uuwHEE~58 ztLvgE&V!HDQ7N=e3VOKUtQ*Z0JmySww%R z{MKcWXlNyo1w1V%QvBv#BXRvt&;$5MYX{hg-VWB4xvE;!E8g+2Yp ze&`xmQQz>nDRX5-^zJyJXe5AGH#^H8sUWunRJ3kRF-63ok!Ku%jy+hCYk=r-JEF?~6$o%00 zUvH+c7Y_611UAf9^0pWE<*fBJzk%&?m?AS@iGju#*jTESS<WEJiDCOmA@p-ZB{-3N83{|l^wZ!T?~ z_{;Kd7WTpAtaz)?*dwC4d?m&duPvtP%Vdu=$Yhwy3k3M^h;ZQ1Uf%`8vYw7}I3047 zC*Z#bfC|-bvep?d)enEm^v%&xTFzu)!UhI??;K(*6{MWWZBan-Cl%Y*nP36U4e5Eoo_H#kp>^Z z>*gHp+$_ROX3DP#;!S|icz$pvY;#T91->&ke9_EBmO)ltpPuNYyG*HTv@F1p8XGsT z&c&(Eh#KEh{KwFz*vQvZyp8hhh+Lfh&lmMy+l1t4TfF^3mH?ML!#X6H-y=%AU@tsw zt@;N!O>+M)W;5|N;!fdDhIAv9il>0;(bgZk*mTkKVuMDCwM9UMpI*q@p2z0i;p0Gv z$1})M&G{O;O>n^MpvL&|!GFM8Y3{qBmYKcZO1XUay-(@PffVW);E@ZObgnGea~g7t z$w-Pe=tf*IpF9YxdhaR7D2~+V`E1+#kWH3AG|QXmL#(j_$*EtW7Cb7M>{XeMo=~r_ z3Wn9orm;$dpijD;Z;?+@r=H!0cjvM61Cs7yYY6LeqA_io5aC8yM|NDY-M#SR$E5kJ zEVgjb<6iO8p_=L+Mj&30=GIXjB6~+t3_M=X_Tr^oy}s${>hdpZXwgbTJv7Z#>|%4Z z8%S!?BT9ALcTG|gsku}frl4=C-%3akQ%J@5@>k&|BNMiT?frh}<{M`nvvE3IgHFop zVjPDtA*aFU`P3~Ir8Ow&0L7;feamAgss3C$?`N9C`Lx1)%Fhs?dH>(EZ#<4&M@(J3 zb<&jfcS{HVGl;l}%*zjm4A;)qy(f$1D=SMHgPh-mmNo2{`N9KBAjr=f&yfET;2m#L zx?Ne><)8Q0@gSZOlm3KYT;Kunn| zU7tL}zn-U6tePyzc12WwiP7EHGw5R9prh4Dz_QAf`2nkEzky8bO(OP3H`rQ^&EIB8 zdiav0w?pH%H(DOW{`N8PA55uEhzvO*Mj-5?jpnDF;KlR#Sv4~0pq zQtvN2pi9(b%@X03Gw|G{s2@6%i^F!jOn33UD=dH5j~CkB-Qjpx4{4Q)$GYgzt#5OG zL~vNsT}R0k*!~YGJm23$uFFq|6u<2oGk8meesQzHYm!GT4>WFe?BAs?HdeGVDv4^9 z5}Yd~I4KCz$&-3BPuDEGO+uXu0joT0<4!)pHX)zfdO5T$V@@U?o3TinytmO+@N#mH z$EIGoa&(swMDjB#njm@)N(X?d(8h9yYWS|AxLKi$Y&Dm`Gt$7miC&NwP}ni z&FDmwa>pJ0n&^~{?@5^DUDFy2&+utkewSF&iYwF3?u)5z5vl;ICYVlSnQZsMyJWd@ zcE;B32TwlzYdnLQq4%+OUR_t8O;jp|z7nD98{8WBYf&GH0AJQXmhKuoQfXh8sr#@w z*50)O!vRS2M(w?U|GAe?i`$YeG0S?8{Re*T(~pqj;nj&m;}cmvnV5N@>bCtc34i{Esn6=gwNZ(7(rUw~pO>N<L9!5ivP19=@jlhWYr(2!%V70O)hwBgPy-a=6ENkN>7A_kAbo<`clbk zLhF_=-KIgNebvbBcP@x_h*OXU$N?K>_Nr?Vuuc`^vGWT3o4vvIYbPyhC`*ux5K%y_ z-dQn4fx$o)Gv*Ccm4PtvrFdwJ41U^Z_HH(gL!u0w=f?fZrz;-^=i_vY3d<%Ea#EV~ zy^U6fj^h;%-ImcX4*G@VQDp`~G-O}km6r%do?l(~Jf(B{GEAje1SEJbj}*}fX%4u* zA;F}UHR7>jUP{zY8!{iW_?!xIy3osCNZ+vMf_T7Z@}%JZ*8(J(pDee>ui5~YDjR0< zoFPmA=*`hm&1>7+#RCjkmzI`tt_+fB4;soK0blLCx)%L&afa}#3zV4gWBMopB~FcQ z+@>j0`-X>|8k;<@X+6|hq_3z<9cC(bkKqKCUx!}mvBYSnn&-@W?&8iWw|blyo6}O< zbG4mbUtfDcBi*T?Ka6+%3wv|$l+y;9hSqXvx%-wx3yYy^eo0+@Cq{F%Vl_C(>C5ZR zodqHjZi!)qT$!AiCV__rh$&#jM?=E~aNwpOfTQH)A%A-rQf#n>h<-S@+h&3cj#@p) zQ7HkiviH>&^LW{1$nm{nb~(Tr&CM{rnP4v!3y#|Oyg7l|zE3z2X{2YV5-dj$BT=Gp z_`muiz5#`fPX!Y%mgusNx*FfdDazxFVls^Dmy0amy#K%7tHFe?$+q7AJ|Ky1HnQL(BXB3PmqFG} zP0z_VsCnUr^Wpb+`}NO5Dvkv@B(v;TLYMzE;7d@}h)uNsCN<5QL1 z{ZOqGQ?YexFkEBSDJkN-ilVH0$H2E#u3Phzbydfz0= zn*~@KlG4Nnp2VeT)p5LGmJa%+Ym-(nERXlGm^gLGtoX5FiDv1kRjT&WVT+RI6PYr# z`V1H5+Y%= zxq;Ucdh(l)hlNZB7k7*3{aU=;R3cuk4-%ge(f(`MaYCw}F)@EXRJx@K(kh73QoT+N z%t5O$U@AlsUuMMeJq5;t)6;Hgck}KNs57wt)}eU*jaFj**g#Z-726UG#2;y_xai2B zC1o!>YIc&>$!>9QIZCBeL%MP2*!Nnt+Uc}Q)NZM0VOmRHAB8qQk*!cA9Xv#>iU4lYlgCW#*I`dxAl2)8qPg+Ns%DluP7N(L?hR z$`1&E(ip92kS}_cZuZ&WOR-|;9@28`C)i*0xcOzxEQ8L})D)O26N9#{B11w#4E(

    HG6Cc2Bne-^kEyPz_Zj|!VFEFB2F^#FUnL3G?KRt`*Pu1E`n3K9l zj?4hj3+cqf@e71a9}ep>^$Bu-*aG7RDJ8|HIb8$8!`&P$AE5xKONkm|EBw`o*B2k( z_EqX^h0{?c3iTu(MdyIVN0(SJ8cs5-2Y=x*)l)Ze#?0`IL}xvOAefKc(n*U&c!YRr zi4yYy5EFvsha!$ghKPKM4ONmRIDuZ41~Nd;4zX*(cB;Y?Pi$Z9hCqEnM;&>j7}E*0 z?YgMLOrpRKpi^fmL*dwzKiU^VpO|(*jQMk|TK?)yhyBv#)nIaky1D>fE|@l!tnk+B%rP~q0AZmr z9zE`5h6oSg`W^Y4maZ;Aqjv_K1zGq;kea_FJcdZ@iN{UOBS++G&>%!vZcWzH(*wI_ zfLiL?E+i0iuNu(1>XK&^d4(qH+YaRlF@CvW)-Cbgvs-(6n*j0!41q*k1tEycmQB{b zbZ-5GOeRo4-yTX#Iq2&XQ~UPiHEc#JO%gD-?g3|>)E)R9yUP8Z946{vUn*9BX4k43zh7QJ1U6f?OH(M-?dR?hHV0nhjwrl@)Yyo0v zIa_xfFo%~T!cUDo7XJmKG@5&L9kv*=B}iWm3B$|*_Bh03`!HMmAOLm&Ks9?Z|1$~* zZ(3bdr{g4J40&t^Gy+hq$m~Q91j1!D-yvc4{7_=%tFw#+?e<+-Qgq5@I(|`r_i^cYI!0t#bK~1FIDYD`)Po(vw&5{B-dY`#b|8A5~8gJR^aZ z3#b+EZ&NSL3;k$fthE(_8p|KfKE1+$b0Wi882B&hl{lJ4?>(+qk{?O9w4!2`5kv2+ zJEgSB{JTizxT#`=1SUcd8)#A(J$6d`b;lED#|Ep9zJl&Q)z!{iK#nBS;kN8cJ88P? zNLAI3T#c6{84CI@{g20T`1?TYT28BP&fN|`3ankHe&#ijkRJ8?Vpc)Rqa>vwhujE>$mkSWYw8=vsdB z`kKpaG?%ac>K2vhP}|^nIcB*TmY|j&ar{czPNK)yWP)wOF`=^3et=w^FaczAXvh|G zXXmR_=G_v~4GjDxMh^~Kuu-m_I|oravTs4vHz_U01qDAAVRmdTwj+c`ONI`drY4FF_8VJkN*}(a(&ycDXPKwV5|1XYEEDD2 z*B$NPH^Ub-2{j)Fj?m>PCD>HT0D^OgD7r_)r4p%7(EqL|kKil@d4dz`mqmR+&T_GV z8zL1HjuQ4g8D$}qay)%t>s*1fak@R(0~%OjOGPV0Ud*L z&faUycxE+hvK8F)#KGvVVB)}}PD)-A#O3ODa6t?8)D;NJMt}So%#%#H;WI(+m+}@x0m8z4XNS*#e0I*)A5=}ujqG>vMxxQ{WzM*9G zrh*{;ZmbLKy1V1KmK4(r8mumoJ%^5e-wT!Q zRwK~kdf@(D-FGONuQi<`<>L=D6Ro};ntzutT;0#lAofj>Kqi)sJeo2VBWI3JNFZ|l zA#kLw3Z!2GZ5P!E72GbUk-LomrQ+{&oX^WWgZh!e=_vCBs0$l(=ND+Ce6FF3>>6{6 zWx!Q5+~-^Oy_BMhj7E!Ul#)9>K0Z6%xoo*y3yVfZXy~CB&9lSeBrmk z)w#I%pqDrJmBOz4b2kfeCC(xt(P}yOVMR2$A8hXI3LH+>(!i#W{?Ij6IUv|-k<=N3~l3H{r7 z#*{0g0{adW<=`+16kHp>U@Sm+5Q#Y0RVrv`T>oB9jOYotG?c)2-W$ZC9oTVdUUU!h zzp;}{V~jfRzx8#U#Qn?5W49Z6phe!;5zXUQZ)?bV`^%#x43OwcBSq|oG1(RC7R9Z( zCTj~}svn5XWcneuz#q~M&SF4JQCr_vq)7yvsXeuKVckG(pPQSPp;r4oBzgj|2xYy( zVP5r)E!cU_TDiPP1MbZ4rK;Z5EBM(nn@VvW-7?g2fTL&t1%qN}#2-t3pgd>k#u|t$ zI5*YF3{+9a++G#ER9pA0o&|2|)bV9an7}h*q$c~@eQh%a1A;!`}0^zpfb$fdv z#g%!@g^(JuX&X5fbx7mLH&8P}9PV=vrEg$oM}nR!B_Z|M4eyQ9s=c-8+`W+{oj%1&Guj2WmW|WfKCU;U{PR`l;=YFC`oP%uV zyF0Rx?#YH%ycx1plXWFN<+D)6Sniq~>~|^DFQ}oEMjmlJXJ;%iW=Q&E19uB_Wtsf@ zipuW#_Mu7rMOxa!Y^;1;ZY4c;6D*f<*3#AgdBoN_yoXjvU+e_BSBChQ_1nd(R85VG zL<9&7-M$6sdp=XQUEfF%W#Sp~W`dk>uKE{VcEP@b14pMFf&%TJ$u{I_Mt08c8?W~p zQu4^ZBEo{?QE$!%SHOZoi~JEva=|R)a|x{bUdmsW2fWrn9#;)edUe>^#J5687H#ah z2I1t5#|Ef7o%U;_C+62%QcOg6={{p18i4TG=P&nQNo`s=6I<34D4F+05plvkA{EM* zaQ6@Jeka_15j%As2}WtEEP|)m)qr<*cKbS~ZzR|}I+!nYccTMwI-hZzYp74x*Zq|E zlbPCXb6l^nXHGG;Di;bv)>JDx2Kk~K(%$>jMKP+QAWOJ4FzNK7LT2p)s=ja=Y1 z?rJ*u+^}FRE8M;MbJjkjW))X6Uh5AgCpj7(im{4*7b;8u6%QW{chGsk}CF)=RN z`AaqAx2A!nwDbaKMFEsLxI-WRb!Ys@9A)%~Zryrgn12l$$=!_dv?~020sK0s^NWnA@M&Abw|^OvRJ%9>;+~sArT6 zwj+aXQ4F2M->D+9yaPG|pbkslozJ3l7LWXzwz0$AKRW4U`KSs;m5)k~189pJF#u@jE z{bEc`F>M=^-4%z_ zlUS4_QD=()Y7!>w8)hO9yQCg*d*uO_cZlr8VgAp2xgLfL(fSuid9wVIvgJzWQ&9t3l4Jz2jrgrX8rM1U5t+QQ4;r{EQxgv}>*CuJ=ISG2>u8$HT+U%vf{6ZzT z(dMp6=_{?`yw5UCY%_D@Dk&vZqCTXTor}U)-7LIwc7{&4c#NeWpxe=1gIa5=u5p5h zO1w1S(pcn@-GBO1N?)H8MMD$XgQV|N+ZCP#U>rkB5nU_UEfU`6;F_J@J|cus0y_<8 zG<=*Ab5NT$%Q*D$W=N|ne?9L73S@h&3%3MSsK|&Ar)DxtR1rXlZ~TX_1P|Vu<=u-$ zH39G1kpp8j#&WxOMH=t}A7L(c+IjjQ)X2>s@-EDW_BVFVA7gO3OU-E?+MHs;tS`E8 zcumRDE>JBA&kfW`;!&uflG*>5m8}VS#E4}x+P1j03&!~eTuXM(%-)xrMa)ac+-yHBt@l*aEgM$|@0nJVmkZ*5Dmy914?QT6 zL9MB=DvnY7e4ovy&_Zh6{^i;DO`Kh{{UE+NczI=v()7oX7HKjXrNIle^FR^_VORU+ zDn1WUVRkuvz(Y2`D-@$K{&Ha0z%FSDAhqD$LorDQG)9n*0v=e3ooX3(JbJxpfOmhv=2y>-MDVIlWEzL!(e31G0h{NGNEN7hz&p%`5B7c;gE^?eN zbBhaO7zkl3C|PalKa8qG*~p(BULWkAF-ce3`p=D%u${kgRqNdOuw|${R@jI0O4q5r z7bD3Dq~^6T?`8JB7yDEi15ZXdjF|4CjsBS`-GNTNrUc_14;O@aqdW z9Gq0kQrABZiWCS#-SdQo-YMXRD3~-RrN)MvEhv9ut)8*OJa0* zdEC=cmI0zDNEHDJ9T4sNMeeqttY-Jt4(nx@ zO~x>|3Vs+vM;|z7C{LrR)lbi#YTouAUj1wm&tw0$LWwO5HOY;R{0*>$E=jNqdubm; z-N)u)UR0RA++53_L?7QgI`h9-M&$#k9cA}NTuWj0$Dgg0K5-!P=2DniICot7&ax76 z2m%`Gt^WPKXCAi^mAZ|a3uW|=mtJUPpH>>p%I8v^jS^(3frJ?=J9LKqj>%%r6#ws# z`Q8yzaV{Mjs3%o4fJ*c6zD@y`wIcW3%HHJ(Oy8=O-P`nu#=h)eyyIPgzd2rH==*C} z!`1FI&W%KZf`Y_Hpt4>Dlv4gi?-!Ad#|$KGX-rs{W-tFTL^SxP|Lw^a7BM-FmlyI@ z;EX*+iHrUa^ohK_c7=cYU|CELeA9)MC7jP5O>YFbsx#LFx$uyA4*3(lZO}`43*}z9 z*;auMLA{g{DwcpEiW)LQc*<$L&qoXLS2amsb3m>9bA)6bUF7CYZD`=9i*KL8v2Oa{ zK|n4#29@8cl_tgVY-pI750w%fB@9gIUe75r;)o>_#ExhH?&n;~=7R1?7F_e*>(9kX z{(kp))weQ-@y2zwiqx)j0k&vo(mXi!Oe{6H4o6(h%geL^c5}_Q=cP#sA+{%hBylhT zW@cu5qLHXeJ$m9LnPF#N4R(HhYW50f^q1miZ#4cpyA#s@L$c;97}J&SBkj`hW)w!? z$Nbb@FfK7HqRVyIx-(cbIq87@#(Z|p;oskB!}r)RzG3Mf{kp!SU-y33h>V>7?}=SP z+%K|0#6n9$a`F#gf+*RAMyzoObQ~R@7C6cl|9iFSG*SdT`vB|MjIemWK6#R?fi@0c_;@#VJq^JNNfatqINe{d(n!JIkMTFWaVaLWh1<)Iv z%MIowB?@1gyfboq&hgh8n>!BO0=U2a9YETPJ%99jq9I+$DpF=rqtlS?>ynQ{ow6uq zth9H0*ym{=70A=J2ZRxEi%LttmiBlqIC}cmssroo`_eVu(g%62e2q?;#$x0(^jp81 z8h%>(qHoIn<=;u%sl&k)vQ8s(X(`_v3qLq@k;z~t8H=qn-Nq+hgU!dnf+Ld#r;(49 zmq9t+J;$4f&T?f>kk{_@-JGXRZiE3unAQ(UH#}g(E6WS*PRehueUo4Ku8Ov5wLZ=DKtI_xO0&0BHA$i(CsB4tl= zB13qK+6KmNi8xkvM@p~+(y}1R47!Z~bb5PgOkhUHFWM3cqIlnBB{ukvz9!X6*xM5f zS06x*oJIR?(f+<%K%OMlUe72YuYO0BuNwWHh)h3(_uxu|Bdj(ZmV*>uJ zC<CM@`s-iM!_)VM6p9ygeKr@CcLTQkj!R?M`9*n%=vg{G76X3en#S zLK6~jC|>$#432h!2?VAPP^7A|0SThDx?-oMNC&E=-GUO2<4eCYFTXIz>sf!Z|2xbg zr7W;`>hM(EJ6~4ES51*EjEN5*4=NFN0k-a|L~2U)qk(_>Y3{$}GpTW^pj zM7WpKn=iOpK?nG--yNc$rZpQg87i7*Ck{8Us&#OBn+5rC*|z8NKdO{bx(G{n9;}5G zAN#Z#UB%w0vy$*94gym{w@}rBK+DDN^sYb=L{TvI>U$JEm*(7%+0OF+I#d!wKz=ikH0`-=j$%jxNbfo;V9 z93*2(N}H1u3vG;8eS$qN;Y!ufrTq}wzOX=!LsO#GUQNEvt}C$Y9^*mP(>lvZBRP%N zWHA#a28CHgr^D|B%oVVy0z_5-lrhK3EUg|HCrQ*E{xl6p3~qDxy@{A*hli5gRs*0`$Bk?J^j%1-9`eNV`w1$S};b8IG%OdCo zN(2HX-Wrd=V?O`(XrGJl)JMKf``Yvsm7!26TY%h~x(T_b)$9kAjJ$%vwY-R%{&Tem z2nb&c@OTcGDAf#457nQ1Z4@mr_Fv-#wTVG0xqjRaDZxtPKzUl!jn!m~wahSahEtc2 zK!N{bEAOCUaPTm*n8pY-(^GY-FoU> z7N*6B1Kuc{w6)f68yh4R@-N$JN&;Q2vnYy8W0Z}fq|5c`Sp?=rE@{`Jw!7x+ZP7^v zf=Fh?xeXxtiyf@0aVf_>i>ll^}dV1d@2Izzw8BievvoBM`J z%h1OrLbqLlDaZVN zOz`j;Ue0;?_}CmOQ_frwaOM9fB)QOs6xP8GFeAL-MSo|IMpNfWETj4)&{|H2Tr>@K z$W0{rSZw8o$>?2f*NfyT zUv-;MB>XC{1IjK98@lwzaNpyF*5Z@O3m@hI5{Ea4s&`c zfgkT!PI5XA$6#(`v=UC?&g|k=NC-CM7d^e5l>16N!y0qzZ0Y_nOV|&9dn_AJZuv2f zULIm}d{MXm61*7cFTce*6FbKn{altRc)}(9X#GYe1y#QImYbk?OG=4ZGBH6w<}Z}j z1znyM8M*^ub+x_cIP7jxZFsX#Q5s7^Sxm=E*wRrgeAjjSpF}lQtZGbPZVXkRRZWI}JK2+2yA@sz2%vjn{uPs-mm^ zDAKCPt`87<=*X~*4b>FVXrTd?c;Ml>k(_q~zI$EWm8*T#@`~9!ib6TGMA&TsIX)-v zPgk3nJ^fC_1LL!UBx?qh1tgoxF`^`TddeEyo2^1YUl>!prziA`(h@TY;Wbw>e~djf zhbkS9;wL@WG6I-U?eaX!kC+iWC-q}PhZ(Oet3H(Wei=;CWUf2>*|!PC%Yx51S}6#y z&_ZOc3p1g(%ivn@2{-L+Zi<2Lu*C&vGo^T ze3pd6Y2x~R+$Y8B_LTJQk-6=hui;T)1Wm?3DN8^mR~a4YJpP}r`UIqH@!4Ohoyh-I zC^T$3r`T}ed0{QI_>z<~{v3T2CIFqZ%l`_|L(9?6#IP{TKp8yt#g_l1Wo8=MTBkmX z2F&YwrDr|27;rChF=Q@3-OPX88;sgpSRB7RS@%v7e(Y2NFe{UT+{JD*31nSSVQua*sWQH@o9y8+EA$!P#UA0x@6A$o_d{Qjl4{h1^+#jLTe zesr{s7;pp;G3z9Q?gv%CyACNS-v+XmhNoz_%r%i( ze5$NQw9m_(IfV6xEK6p3PxVLb(ZV>V*L~V{FvhD~q5dIRw&m`F3T$CwM8zAQzvm?z zL-cgA_E5_(9z0xNsQ9;zE=6sPV7)KXdM{4xUx!me*$&4<8DY2W(hv`tbfw-who$O!CJ5h;<=pm|p`FE>F50i<2)QQOFwxQs zqY|pQ9CvmM_``!=hJkRVD}LOl*wz>KynC{a?kE|sOhl79?8}Bz<26wh@UNR21ubH= zxw#q5TTm;d*F|jpvgNfinG*jKOeVGUI9tLf9K za#`$OuW)%{spN|>3V-%G!SyFRjZ+w9$~w^n?C|V|#+ZWpQ%p^Dn}h&Kk$Q=mJt9q% zT}G`!(r}z$*REYkru%6Ub8-o{4qnQryjf&b6-M|3ZK_V zX*v6_MQ(3SBOi-K93h99)jG7AbUVRhr)PICbArbUJ%BToM8 z)F1gIHCiQy+ZV)Y#`7=2F9`iOyFdp7btAPE&95<|AKXRkG0wY-4HY{+g{YOy{$Y&b7P_Su_Pb5(D(kKTNK{)dDISn3uNXI`lO*Rd%Gy=%k3y6Q~z4vIqxi@QJ6pbYie=x}bp+TJt2s z{sXPv+im=y$fMp~SFKZom|9XpGBp?1MwqJD+$t2E((M%CVYveGt zW6HET|NEk$ad6L=?dWnFB$}(dt{!uDyFz{u61F8W^(krhEh|N*eLV4ql-|E5^p1SO z@KffV*ywzppJDEj5~~#B!jDavIFXxH6-XCRrKJOrbfUw_hzZis2?>Us-&0IeXPLZF ziTXcjK&RCk=m~jl5FP0>!v>LqL8Ja%b4Q!ZpQWm0vk|=%$EMC8+7FIiSW&@r--nL( z5P_reS*SB!1Oj=CGr%!eoe^8*tvM9%iJ%Tb?PMPSo z=R$xDd~qj?lJLQ&=y&wiGEmx=)tDu@CvX@rp(&Xq1R4eOr}LHS{>bG&!qtCt4Q<$tG=!I6Ibh!Xu>cxW-d#)d*^ z$*TNR8!@Y(;7L%3B5B%DZ*9VcAsCmYg?4H+)hQvmvewbm+^0wnPiwBLTb=%W^~+~P z<5@()qGVkDo~0wdNbN9@*{Y7uwmbwDJ4#}n=bo(bkG8ckoyOBVXd8Yt{;w!rN54>0 zy>#7_{Uhb+@|9r&n`XNW%)BEAj6OHp9b|5bie%aIjP#X-*5 zVb>;Iwn)K>ZEWTg2&$5CYxn+GQJ2S%Jy!Xo^~ZAN%Pn`|?VBM`SApc#xnkpEimA9L z6sebomzXa1)G}gs)XPWiuqE1JL`g2LECRIU4UpHijd2$T&F~eYTz}FbZsm95rF`71 zH>8kZ+fWYI&i_DFp^IN-LeZ&Ap_sqeb07-r514QKA=DUbx(prt3G-nuk;nPw=JrDh zL#;MJJy{VL+T=D2ltFiktKchMy! zp~CacXfP`>dH>40*9`2eX#$|x{>x3II0dwS&WLjP{Mj$(9>_2olsQMc#Y`NKXB6S0f4TcU0aedS7O z-K@r-nnN!#E^{C6I@q0X=)E)|CO8I@7zgc$7-FgUbVnwhM4 z@jRUW;`MDJGv%Vn#Q7WSk~p#ox}kuT(#$^~*2StPvRm9{z(eFV`rFHT_jC_6tXq_V z15aQg?X$*);Kt6I?406Kcxf7}TI~!77R{L1Ib@Bhf^pbx%7JQm@EDV=6RlZv zXl0b2hfoBb+;~tVu+(X0Wo;KucFgOt1*+d=3rN1vL4;6-pt?33?6Za5ke&3ueQ=J_ zWRz^wCBfrIJ>r&2-1ZC%*OfeEQ@uTH-~QHg-CJSzz9b|hq~dlR&U0jBL;!t(hm3*k zohdOk`eWOG9o5s3{v$oN{n~@L#J{QYE$_QYspn+VFdw&f`vxZxomAaE+r8nF`?i&SAIy^C{EiS95T9J|r4FsVeXm6WIy?*Y*JqwnuL=IdrOmsj zhmafAmldjR$LlLotxu}zR1)tSL{x*f0}PFLP&*CY$)s4+a}az~pn}8ncJKiNUShj- zeRF5#VO_IC9fl)a-)-b7hw$qY#wv@nBBrc-<_g50Tqt>3Kh?mmng7N$kl zl!rCgj-cgn65QggD=%K^bimFWm(ma6-k9dH9!emD@HL#S?*W;H3=_4gs#VH}uJ7Rn zbJ+IV1>FXIwuKg~?Vo;JQX!_`2X?&DCLWa zK49BKjBh9;f1_MI_)dr>{%}bB&=st}*Ku&a%iT71O~?(XWb1d=_MqPxlP&g}e=$}v z-v{Vt-|*<6rYm&nSX3= zS7{aYN&WRb;#xortzb`7RAx+3G3op_>$=Lx5(`p8od$1OR|`QBuTFcv36Nqou1c_u z8-<7fTBk?(M?Dik!bcFDYu5NIIfuoxAsn4)eRUbP$E{sGQvK<=4XUU%+(?v?IRBz%e-rc~E z_~vgY7q&aU`CiMIDNp0<63amRlm3QgTCXwhisihN*^CG$3N`8537i7zkmeO`1<6s} zV|5ecgtkTXS=A4diJ_T+hEFkdrenkLUmTjg^;Pt5w2ZEENW=_QH%w=|-`Jyh zSXq^AMxlLl2|V-*`%twg6+thDyy51@L5mZvN$HtuIMy?PROD_EQ5u}6YVTX2ddeyY zG+~Nm!syP2WCj7J8|;q?11!M(I~=8n@c5q9N<VPu9JAaA!08@w#zTm$ijDtRNkQi5rWG&!@8%*Vd9C!vxluH z19q$58bU4VYAG|FVF<%tIFen+h$7OK&qL#XjeWiBK!w~BN%0Zr9vD@S&h78JNEBpq zQ`}GKjU~9Yd7vehp{s~H78QdX6ut7tHvmcmHf2oetUoqRiPmq$OH&okf`jdwDI2Lb z-y6LHOz0yR;B3stmovx{4K0qDjJRlVscZpbi}7v|ZMe9oMGQQEYI6#;eIs0S zdirD4J$X6|d2AzLtXddf7ZiCqqa7F)~+*n3fYDuix0XB#PL3{$qGZA1y2 z-MtUkvT5})ZR(~@|C?f;EsAk@?a0zBBBHw)Xbg^LzQ}%@Fe(BU{^5 zy|0+#Lf2GBgqe2s#rdz6@=Gk3xlz?R!{# zru&^wl|_sRs>`J_C1bDh->I5?V)e;fYIgsp32MwMyvv(=GkJM=7XcgMm59QiX}per z!I@L%*7dkLKiTf2tn&b5Enb%gXZoaE?UDyjm-(7N5=b@YlYJxCFQCjO!`H;UC1?D;xY$h`Au65{T<+zvx5Qj_Urz6dJl|QJ&(p z4)>07xOyE1ngyj*%B;4TbhR~BTwunlP^bkm(fqo~8zB{Z7XCKOGlbX?Ay9hu`Q;>E z#ykv@{TIoZxa;%x;CY#}#YOy_9?>sKLywHDvT}Mq`&FXL!d8*nevJIIMC0c9A>>*r zHU6|as?)Z%LW#@#r@et2y?DRv6R5(xjhYvussv~4<}`Maq{6Aj&e(45wi^vQlXI4+_uOh$bN4qe#MlCJ0x0#fgT_~|| z$s!S70V4*Mw}vIg5^+2>o*oOKl*)+w>$fK&h<qjwo-`mD2lNB>2r=@2^qJz#^^JwOTFE)}I`W*NHr1SQEu1@;mn zK6qBFo);~p5)r2b?z6L?6+_AHR13c>U|kV|;P3H}dxRL|yq`2*nU2H+nHP1`tlJ*d zB4d~2%nl~>v@q_D*XI!XUKA=G;EBEANze8p8CK6%N!hRDVTq;w;G>@Zxtr6mcf3B7 zf{B@W^VRcQV&mFTvm0^G;af=9-Qlcs_1Cfyg?*geV`*4N&FIG7jr2s&9(#8@@MjNtd z*&Ar*HO|kWP$b}KFL%^a6KRoSBdXb3Mx(~DadUTn%@v`*=;t5?TQ|*%(0huc=FDII zyTNw{mZ+Y3A1}&DgcHh+W zLDp=aV`wm0)pB)}-|~9S)?~;g$UAhsqd^3FNuy7X6(#QRGAO0l)*!2?F`@l&sW8B9 z{}^HyuxR3LpW^`w5CQ*GVY@<#7-0Ph}*Ku$~E3QUOS*ytyNna)$z zzicvsIXWq;qKjwFZL~QafDlQHEx|G#VlFbHr^p7FdB9hKDy(yz5%E`M2{z22v+@TG z;+jPolDLbD%W*K~o8{K5(5Px?=ZRQe&MwS93Mz#7r1+Bd4JC7j+ei|9l3|vXwt-N| zs*QmaM*yA!e!fr|$O5pbZLCnT#8!KZv@?ZYL(o;`c*o97tF98nLcFc1Ixzvf*9@%1{&$ z2tXb15OWy`FYFz-yI;J)@B(vTJ5CzM`tG28VVq>a7|F;WPKg14Y+zFXw0#Ob18W>W ztnJ&*;p~{!;fdNFb_rYjcEp6GuD9i>0gukDLkB|+D+2c96dpIRa*v4^YKA81!3eD>Kz0_+e0$R`IW@v@Z;-jQnac zgVe6fnimMSoBJ3Ko14;G`5%m6)25_=CWX9`c}GBf?zEN=X7z6a{!RHG*%=g>!_#(| z#Zbwu&qN0YmWypo||V5xNh6}ZR9(`G#BqSLO2 z3Mg8irD@c_>ZRGfMqKy^#(8hG+d(ng>+LVF!QLurfass$hnJ4v3 z{v~amT$v1DC3;#dsbaEn^kEJ))NpeFr^)c&Lg0N%V_j4!yf<$(`0L044e55e>++z8Yzt$|`hjCR*B69y)sGpobE(zD~FiF>21|Q~dC@C#B ztKI>VJFY_SGJ*gTQ_OLLG_Qd(aWI%g*o|-6`06e`ps)^~`0|}$-d9%SY1;w##f24~ zH*O6mtJgsokFN!|*J6J*l?VA%f1*B8ti>wP2akJ0<2|9N-hU>eAv8*#f#+awxT zfJG8-q*^Z1yh=hBv8;5uZ)wwfPMa)$Gsmwt4I9LiV|c0<&#h;VyqL_A{Ifsmiz`&| z%Mr_98Q>`Ti5g5$*-;T3M40X|>yl-T5*L@Zc>OM=R}y~4&dkhwJKWp0aCnRQwr6J> zit@A#0kw$VjTY@e!VQXwq_bN1bg};Ab*-cD^bPa2eo5GTa{rxw{B&jxJ=3@DYTH<5 zCa_x}VK0%gx-gwkbM)2tnPxj8mwf4jYkGQGu(8H(y;4XVecL60rF1sqP3T7?Eu1!j6x-{&=>@%`-fBjYMvnmCF0+zP*fpOR zK&5$=k|e@LQsmcZFVyb@X_kMUMj>?T_nOe#0x}01CvO17Fh_<00J`(IKVUc8ReHL* zj#9VBMp?@DoB0VJCAu6W1YSg+7*EpG+fLe9cU5#aqAqE_{r@aLxHxRp2nUKjPN~;w zXdqNZ419q9l9pWTDudMA7e7}y9arJLThznmqI%oQWM;o~o#El2L5aX6O29fyH#Owwwu01^o zRJOms`Ce@`c-bq?)0}>4Sq+|84p-7^8}a3evRy_qIJ$-=O?E2Sdlqmy&zo4u&UPC$ zB?fPS`;I)eWZ67RVzDa^fw=}eAzm_&e4$m!KC{oTuXozMU3%op;TJC~6Bcn}Kab@z zc{PR+c<3zibqj#pQn(%r4IxGnbO3k@spzzVp{@|S0tbOugAJ3gTLPr@+1W%(!n&bk zhTwZCC;1V%9OH<|-A*0hKk4JsJ?S1J#*ZUx!h)UGJCEMam&`S7&Es}lais%*|KYyw z8#Z!B*Kk@1=JghaQ`3kDcc)4un0}-I|4gN1UZ&4TKK9q$y%cw2bKUSt&%2}p*eU~m z2$-*})N31vTYn5U%kP~!#+Gwdd)lpR9r^Dc3`v&(SlV0e`V!6z3)?JnrmU^C2QG+@ zOVTB6?0J&@S4vD|CwpVU<@$Raeb1PjHoq8k3Q0!HO=iCfrXrlZyHhkj`e;64FibhH zas^vxcQ#Oh)$-WcztYwoIyW_t48ArQ7J1SRTcjP)A`I=YeGzW^1TNbc4om7_z9OYyu(LAkl3?BoAXnh{t>Eu(T0_qU#dXc z`MQK!kumFReY&w`Pn=!jqEI+Cmi*tDbUTi(z75Gcqh?`dfmfpS`)Of8HuwksewBYG z{&-I!mH8wSs(e$B12TsFjqJ;(MrT1a0W?B)b&Z{zmn6R)=CyC`|GE)-^9)3BK{z-E^>RU zHvau=j(3!}F`X>|6zP$Ab{j=7j%^?wzEO^*kV=je!;v00^p0WjOz@FqNvpxa<^ql+CfD$3XK6Xu) zBo`UcA0c}8qV&loJc9CE&3+Edw>$66Ua`X&@TXZh{lar9S`WE*&@86V*7mw7DFe@+ z(fJ;wS1;tI{HfNT6<12eyIaOvx{m+Ai?d+!{p1y*3k5IajL|vr$}OS`sUqgS?+z>D zCq&dWJ1>>D*@7u$EylU z&^4lAe?6MCic5{o<9z-Z&q12GzUMZD*P~a^hc-Q%o|nfZlv+0tiKnHP=<|>5qzW!3P^{XXaj_F61&EF*s8JpT}RaAs7ezV{L+EetylA39E73NW4Pw zZS8n(14c}Y-~ie3zDD+23%;!X=0uH3qPKV$M--8?*8gj*hT1NJZDd0{ z8u!n0fIF(LqhORk7Sj}ZoY9`q^ofmEoLrxZ=-pXojOj%q(V}QX?+EPr{YzYUaFBW# zSUTQRslUD9sbZ0<(!|E3j||6Zql%%9-lEnr^5pAoP3DYcCIP3?C~1zaW0z2?)`$}q zg6qo~c5v+X&r`PJu(15tcG0(YKTP@@yqDvX0UjjcVutDxAdDB~woH~f-dr7Ku!uA1 zfH!J8h1RPw2~<`qkh+WNr_(5vkBysla9x+%K}>K6-^=z5^k9@!)}TwFujN2l z#>ghlm@8DK0~3t#<9j9QrQbmj!h|R5hSnBknkrp-!iE#!t=KO$nZs+zeyI-oDK}4+ zQArpH4GFd7gPvG$D5b+01~ouAW`Q`vG$!`HI?#$nKF(1FEMWMY2B7U4A2n0n%Zou+ z7fj)HF<1+$J=kx%Dr7P zubAQ08Sv$Ky_b@deA1n`v~`LtUTn%tYN~jw>g5=Pp+cJ8k1-V`dH9#U2~|^Xi`238 zCl!Jy_V~CMfOheO5<5ajbbzJE%M+H^)M{;Ir8;vRHZxh8_fBS^LVz0^u}LI&OODyC zGA7@|-;+k7X-%sAwbBp|pspeaI<94TL|j~QYRWBvJb2gUEqI}?$J_9#B}nmDZb~I{ z*!U{=LUC#iX7~ix8|IHtTuQ1vgg1SbqGMct)$9A7!vW$J6jZ6boh=4ph<9GXt!H*+ z_7)F#lnw1f3M2eH3KfQObWqh^nK!DE&ehEOTz1d7w)P^F;E=YVJ|wtBEZT|Qk7M@y zwexC*>e`c8(?lzUxoEF^SlsBHp74G^qBOFhPKtiqH(qT&p`J97AX4VU)8I%FdLq)(6hGM`kou2xIBm{Qg^k zmcYj|xSc0i|FA3WKSD30-Fy#4Jn$S;KH@9J9Ij9#vCB5my~b(v-CbSKKrwM5s=sj> z85{efPsb|EKH5Kg%kq(MmBr&=k#^BNX-|j2y2asMW$pQl27JFoOF(`8zm;px13bfq zjrS-a1GvL!DZLHt=kUUh{|J@H)YOk$DRSSCt~T{=?J53gs~gA7_6v;3@=2Mm z*Bprk!6ePq6>9xb2T!5yzA+L*jg7G(_;cyBm@GjOLFXTSkEFgL`HP$7-1=M1pf9N1 zD#HWtzUCx*Ah)JDApf%zaYH%&{s7^$+#YFbv!D5_fBl&iAS7(S($(D0g1U4(8CIbT z;EZ*!ex%4HYxer~QuKO=cDD`)VIyWVfMaaN#Xfj5CRC;QeR~3ZT)-{BsB!4whAEM1 z(yC!`WtdGUakr6{nU#~ZZ?u`=R}z9yldoK~QE6$V!t3R&kih^PQJq_6%&4utSL5uI zCZBIKP$vA!QyJc`|90|q3k5`_j*Y89thV#}_4_#;-TQqjB~X~*-__i7=SzLdM1?5^ z?Xu5@PU3fk+3e*7EK~BUuRlph6sN7YVomOs>Mg*=g=?g@P=EHVx1QG@)pEqXa)w4_ z#^iTklq$g>&K>c3V}qmp<+}2Ga@IP`A9d_g#}<|@p%h0w3BBd<%VQhQrLun*p`VnL z6hCsA7!={-K%v!Zl$`*cudDWcc}x+!_Ow80I&{RG{~ zk_#N;>UXe#;(02_a(~n)CwZzoevDjk)D`xHIGdMnbJ&;=d_?K4l`d2r86B&xX%E}- zHzZhyMNSkgGyO>j&{2D1Ka9+orRpa0mMktB{Em)v_1lK`_gQRLe=Sa_XoQG}u!Mk# zj}3$H$INA*!DV|Ls_e31wYZ<)l$ZoE`#xyZ-(38{a`g4w;oG9Lv;uX#!XnM(MX~9n zmg}AI|GaOGIxcd*R)&!nZ+M=J@k5YFqicKRp&I`~a@p56v`* zdDo#G#8QeRW}K4QBf3bi!E0p0fg+6^DPc3bxi*AYxG_l1LnO?l#FR?;v$PAThXvr# z18u2>y?3XXYXD2D-c*HALmb*#rzcOeB2Tr%2#;?=8gIH5&y|)|zT1F{U7|$&V$>Z{ z{=2E~kZaaz);yu2yb?r5fO?qv0qm%Mm{!9A;W{ct0THf-`T=&I~YPwz>0!Wh$03ujD9%`63;;r8i5N zzkYMViQOVHD0>SXkT0BCcKO7T)0j!TPRd34t6Y%ht*3+UA*WTdF>vS5j;)}#{&;vh z{)Al&s;Hmia~kSp2p2586B~AsAx^0=)sl{Mau~fMbFR!0srxLYg8hFqopn%^Yum*^ zk(Ta`O>eqGK)OM?ySsA(D$>%@B_JRu-Q6W6(%m4^-SFM#o%#NB&gh)k``Pz%-RoNG zw=AXKz6jrPgHbB%Km&Gd@1{I>eD{_ums&!h_Qu8K-o|y ztrcl0UbjHyGW`qQwiy@isdy8Gg<9zo70K7>(+sd5=aB9C1U)ML{ONMW z{(RZde+)>(Dv{ce3S+l7q|i5GM)#0r7gM_Fb}fu zktw{`VJLbiO*=FPI{fB|BE`k_y@$xpWoDK;MPLX!m=~9jAX_JoFXfmdl`v+cd6I6ndSh={wsW*+>{FR%n zO-HL082j*$M=QO3QHgm7?=YKWch+IE*LA5me!ce8yt}(yRf&|`@c4DWjD1Fol}0`h z6Ao3`y9DX)iM>im`0~>9&%bBA=~-D{wQ-Z)m^}W58zGxN`j@Hgi&{TFmDDGTfc z|4i`n?^BP|LdbJ{U-n3*D(0PYq4s$?+XymAbF3g$A^^MEwz=I- zjzStEaC4g6?%e+nn!0iG)JCG)c zbO}AIcLclEOj-^g>H900+-qcAVIe#h zE8OIeAy;0Ulp4;H!5TX{TG>`Je7ZTnNT48>*y}3P_phH1bkTmpMPZ(9CS?h|&??mL z;X&WA=2~j&kf9>VpSQ(937=mEz(?{IYx2cO07Uy|3L#COS!Zs3xVj-1SLU+(Vj+I` zjD71IltGg4u2X|)QM3nW!nYgyxi(^%h4YR#6xOWDk_oR|vq!gYkyf9`SDx1-byO-| zel1d$uhkyr74U8ou!LcjN>nj!yu#Th1?VGui2TMRdq?lDfBxg`Scz{|GEyTk`yNZm zoZm~wOJnRH+Ee}BES|7vW{DQd6>$6L$Tpxxv+n;L8LL=~fn-WfWKP#J@DY+Wro<`4 zr2xU9Cqk`muNp%e7aO<>i^u+<9a^i!yf;JR{1eA*w2Z~5vqyNF5@O(|8T_48X%A*Y zW}9)%e}S}v@Y2}$keefj$OPxO=hiRtkwY}`Q7X&0Lb}|EGI0Qc`?e!=r#h<3)0 z{Mkjx7o2ovXup>jV!es&_kmji+))~wqAj`J*6CY0dVaEQ^OJHB7f}`03PeMi#G_E9 zcn?gkw)OfWqe>c3f=C$}aPh8+yX1q{x@;5w2oe>084a>D)WNUiagMfJC!Y_D9gz`3 zrb?4@cqyX$I2N3ka}Hc*n@JI}{8nq67Db+JEDny2Fc6^r@NorQb8puULo5R@TRwJ~ zj^Fby4{26VfI>v{CT7-1DG4mt3wUZKpEP~BSsS(Z>EIw;?0MqLXRY!T>pvADdai>3 z=U%O`=I=q3VmgxvYVrNTK5-~6+QSmiJrdCvRI^+!P5P44Gt3tqzEfD|-|*YM2$~?D zJ^MY}lfFRaZ+ZcJ4p*%dS@SoCB zV)79g@rG@kLM*wYYs${&`aD{L4-qHi5QeMeAsawFI~xn9e2D|h`x*m;bHn(IUxpE; z;0VW|r>AFcN-yb!@AZz#oz==_fZE<)>&Uf93*Lub03+9MR0eVYh4c0n`h2u|)Y=VK zzE6>8uxA?`-PM)i3Hx_0eCcuwOkbFRo%lTj8|C{_W5d|e7Gpq@NThBA>9saW33D~% zboMw9h$`lgWK)6kt;hXg9(|H=QU4T&hNDxHhvn6+xTn$Fv(VHWYXQODXjRef?CIC& zMmFB=S!&{iz+Xfvbn2Ss%F%i7#ng~EtV?zEF#6DC zh87$EI5DV9QOj+CY+|QGV6Jd%?^F{Bn{h5EMQwuR0PGD^aq1s$?zZp#)!|EH{N>=B z%cRoy@FoiM(=b>nanlZy~(xid#LJw@KQx2%_|tK zq_2HMS$g|MmY@1S;$E!zjRwyhSU38gV+?6#?3FO}4-5?9|FRA13o7p%bj{Fj z8`?`^U`i>KvXBRsl;%CGNEv|gqbm7Q>XqRX!!qlVq)<4w%uX|e^Fb|5jYGUpn;}__ zON_g3Ifm6d0ola&R^z`_=YKkwe!!kj+-?S+7igLj1kYZDkVcEOFT;oph4z|$J;_i zu8dQHFTkSwv~2M+=6`>0XU;J!u3{A@ET=w_Cd7*Pa~vd%gmSx%Fvl8P{Xrt)_GX7` z$Tv&1;{<)yh1COQHp70?m8V~}K1UE{cD6&BySus1A8(~+%PGufQ9!$O{wjY0InNYX z88;~-(Ety?q_wq(uk{r|r%4C8CP{@+D{tAv_;o zKBKHY4pVaRXH#b@Rkk#Maw%|-pl*u$9P1UmWlooJh(uIxQtxtG+fFrJyE>{OkStSFcrlP&{e}q1+z2WshCRFZ@;V#=6UA3f#C`8wYM)PK#dV45 zn?n%o1_P);7S3$eDk>r=|NC)vt_w>V2 zV#HGx7khkZP9~&A1c)0>%co$1_;mrdh5rupZlb{%9y!8 z&5i45i)yZ}rC286BmtYngxe!+j^7!lGjx?MA;K&J5uO)Z*tTqrjn>7U?^id%#R9|g zbb$ur|2cWuYt}>j#-*3Wj3fpT%(I}{Z}pfV8>}2y#b$}+i^0symQ=GH{AA0c&}7(E zuLPKnhxJGNWxoo|Ro|?m|Bgm12`^*MaLW8yR&gKa(Bf`a4aNL2eqb}wZ~m?!!E9ZC zFU1bWmBB}(%!#tn^?2{^AQ<1WN3+RAo3BnkSZ5T~`Rc+qq^`rm3g#)vvp9Bf4iuD-`>fPdOcH343y#L;bex+IC%sqok5}2^Y}0E#~?BTa?R;Z5Rn?vD5_W zIpVDJK`NMRz#0Z415v#aW`h7d$3-){Q=(-181p9Zb$~ucRP$6}<$VF1fjHK$`$8az zrlC0S_{b&3FIiJK@rMT(m8ms01pun|qZ$<>L>M37NIpYZ*lw_8COz?_izXaDDDos> z{pk*~D`=_i2Ehh7fnIQ!a8D8gIlT!qr2~?;wS!HZeO>HNM%{Wz#mV&COkkQV^`d57 znt9!RvY-fEZBykTJ7X}VS^v5}ZE@#^D$eoM9V|Y89v4?0q*SIq@cXr&rc0UKJ zei;G4o~N3?;3qle7FMX&aModd?}}&n?r%2St_}bF9Jsyp108Xb=}Z}{G50J#28~wW zj7M?N!#*8UhnygEnK^sMO3{G%aPqS);>P5yC_kM%@{bA1mlan7yD)ybYCiB_pnKupM%WfLsMG8RWG+Eo?$>g-meFaKn2-eZTrpy%45l&2h zK2h`hq(?%t9M8&X;iUYkgJfDsI6{?ZCT^2w+YXM3XRw%W1&bVG(R0?aSIC9}?cMu0 z3tGj*`0YP;^c~AJDo2Sk`}8ueUVNavPT}wKAc|mmL&bmX9`iO}fW*}OnZvI&oMb|2pRBMfeMhERkL8$7OZj*8lE22~dmJ&=XJpa_(&jcfFN z{2mBD)+qNJ#kc@?^)!)?TX2hmZ~~8cw8r8xP4|e!EJYYI=XJxZT$6)-g}N? zqhrmu)HOx|L+Ch zyUOxOhthDi{^o8E)HPq{P530=6lJIXy_7>Urf>6avpf$$PpuZB zTL?})MY<)pu~9>{Iwt-(*P^W|WfKrA^a8|>wTnXk<-DruqGLAtSzhYB1Hn9jK^_oL zi{!NTijf`5&6}So;nxR zw*adULUyt4g)7l@)8AH(1fa-0<+^-jt8X~95sZ03SI_20Z5B}B$&2T-c%7tP zsK7-*tHTIbN@7N==)LQjaxeW&2TEW7bKiF+6hHR+;9~p$- z)Mm4$PP85`EO|gvhszyjdd7MF?qVyY#GyWT)8CFsB8wWkxk2FME)whQ35_#Gi=Op> zG$bWbPdO)gG9++cZs0>a{U$fRgRpD*M;t|()MKmkdr1`C=fow5+>8ZUzX29ge`({;*ZpnFRle2!K=?BPXrN~$WAt z**rD5-ez^1_N{TW>vR0nH}fgwi3{i&{@8EH=ouK8@S>z7%%H=TcXQtqg|MNc0LYOo z>;odlply^sNn+B|oQ;t=Ks;@jLJRLz%O=UUoLfyWq@Kc4m!R3&9Y*JU`#O^0LrDiH zWrwkXL=W}#Q=iGGl-~dQ^?RuLPu}U#c3t&`ym`Hl&^+N>-%1>HU>dcrx_8;a9Yua8T;F6Hj0Uo!^bWBOh@O{mbh{>$}pgk z(kJE5YfkWFTO=jrPfC9Ljq4NITR0+oRrLxj8J5* zmHDhPWGb!A5xjgPc5ew-GSZa*j8_ApD4Nb8&6E#jS#Yfj(jYSU5ncaZIQEMlY%mH4$1s zS`@GN8pUr6eD;OsHlPFc#Wf+pI|(yHBt+d+oZCF744Cgd8-wadWh%Sp$gF$eubaOS z@f(^3VDnm4Tdg38A7n0p$RnYlCEssRZXe$B_b+n2(}tY6%RAm=ImS=3T~-EsIN;g2 zF)f40Kip=n+E_RYr#_=Gna4ym(vJcLBNB$tKp~NGvVxxH%ojz0*kKwz*0AL_=NqBt z2Z!6fSLvib%gb(O{lVM@Dl`z*sE5INCQ+9ss+`nTf0zNvYc#nrP;P8Rw+6q6?l0=? z^lgYLkLox1A21s4)vls!q?co2U{trY1T_Ang+HOeYIybbi+&lKdFuOrQAk0)`=B9@ z@XUv;v6h|P!^B}R`xi~(&v=Ep@wWR2nF7YBKiDng3Q^t|@q#H7i3}9t&gbSkZEbH% z7VNEe8duByRsFNEv0+Rd&Jy%k(6ZcH@mQ!ETDzNjujm_qz_rSd-f0 z&@FegQPbD)4M@))W;<~tALy5X?M|vLWBn6Vxla$5==M+;9QMliAY883JY}?dvK2@d zr^$TlrVJtLcYi}xFoCSEctd1YmXhm{Q8XwRVoy-=e!%iXM1+{DWmtBHDz1XclqLd8 zTj%qoM`A+rAQvY4-eCK2+H9faJiMNs&IU7M(!aUz@1$PaM9*d-Z!`9E+5$9*0l1w&s$`&zM-RmZLLMXF- z$7(-%{IjNDX9XY{EO(yUxWEd3cnZu{Nf-h$GE(kK0dN9HH2z|w?~cW2hJF~kYs0I? z$w7Bizqvw~Kic$3Bhr~w+syNwO1)Ud>Xa400k&QXTA*ryM_yz$*Z0fwbzFxseRj9E zBlzk19`>oa2D`ngo6gTeRki{pjK2P{Afa8JB{mAC=05l23fNB4l8Juagk}kU#+Cvd zj}h%R#tSQTK)csx&Gs*lH`2OY7Q3M@vN(XWR!2Mkw+kWK2LvcQx z%MiO<2v20mEBtW6O07}5`640Cu)X&>_(l>s>1kCz^Vp|ltADJHsnCgFY23QerEa=H z8fF{QV2H~ioxqf;c=4xE%+Fkfql+$*yI3`vifG>IbZ8`7VBP1tpE`36b#W=*?U3*> zVpNt9>o@rLPX4<6SKef9`d5g>*(>n>1_ZapBvO%lVUIdN>6n4U>~4^a(}JqXma*O6 z&Jt^X`l5-#sNuwH?}Oyr!{4qxZDcLVhd}hbmh%k-pq9UBCWsOtEz8tgC6-Y#HLt2A z1aRoH$MT60i(ZY31%wn%v&zWGf>0?PUaXpny_7kpzO(q$l#)bV1bh0lCNI1UuOFKZTH0{TE1O!D+der>a1Ti3k5$gMJCJ1(;^YbjOdrR`nm-P0E zpvprOlB81E-1IWB_s<={%Xyx0lMV?k?A_Fr8^ENb!NF;15{WYr>B;WH=Nb}Vh*Pa@ zY*ne75O=EoK0`8?*n6?XsOUfn=zmrV;8~nY>BC&TjprA=MG1OX32%Ms_F8#3ZCPsW zcz-Y_;&uy7S=m^iC5*4Uojh)5+Ol%Y91p&GwbJ632?PQiv1_4Qi4Pwf!#YmE2RVKD z8b}HHWqEe2e@YPI-uQD~9nhyFMWeE8B~m{xo}Z-lK7GTcO1C#P zEG=75rbN>kL|{6u_Dy89w1V!Qkcf)59Y~5bm>_!Q9v;z6^P3<%=1LZ;N@?K`;E-El zBYU>>&lWVp=9T_yUvo8wW$BmwIvDv}!I`Z@=Z+7T&o{T{U_M#it{)5)sR$ayxu z#5NY^3j3rOVu_%)o_;^mb(%*$-9aN9YY_Gi;Cg|HBzkv`^ng%Kt0!Qtwz}uxK1VWV ztu8wCY55J;e0yN_=<>)&0X${)EF1Y6#DDwDYF1p+I$+oK{lLYA=c43J#4^RQgU{lk z^byL(=yh6JKP6+GjyLH_e;iAliz_zArR5Xj@zYa^T2Q`mbmEIznwL?KkV)|?@zr~S z+J~ohQ3dBjc6qMhAEZP@(uLYK?yxU)m&zc_{9V(*lG~2Q2)AhXX%5@S*rR4Zo(@OT z-b)4%>7m=GQ2o^awFzkGtx;TI-3iDxT922g(lz&Y{~TFm1{m;yqP#;le=8%%4d3%6 zL`3iNNSjrz`+xS^mtw?wu_%+cHaCR_Ahn*YP4cix4mvnAGe-NnO$E>755g6~wYB)c zD`;vxo%MY}R-`-a`EQZt2u>7EHgQ%1B+t;0)F{&- zVJ(fP!J{mjAWd^v7PIa;cesOVg!oj4*dIufa1!&GJ1~%_Xr3bJ$U#OX?3LRX`R3a_ zQYI|4i>#3HpIQP~nRVOd-(oqBhH685-lfj($NCsPQ&lkX&c8DBEYs1@(0CG>%s%!% z#&vXU3i-?!3SqzKtwx7HW=$+Rmb^G-F3=OCsaOA+&xEO24h3%U>984fSF-|7SVj@x zX9XVPExLV@sx(73f(={S_{0HsiCQpai6)tr6X>98az6zt@K8@?X})Z#Ooi&y@dOn} zL_f_#T}5!H3+!H5g)Gx85GS&($4 z6R;=;$K>k9d~wd#y%!w7LkEbaSdmh4y|{*Lu$(yO)lCPJJCQ>7bXfa)v%f^m{h;x= zx!f!xKV+a*YQ!-kMHn-5uX?ILg|kxB*vmjF}z5M7AjJgaiWn$l>0aS4uI9mva@3Y zS-&BivtZEqyow2Llc*Zl%1-a7ple$jIwewXDlw1H}t;5tl4x2%`M_Y`QWqy@&TUbeOo+1bm1aM~gi zHUTyRaj9>_d(UxdodQ;`kpjgZZaT4>;wh*cLnRbs2Odr>25k9AiJDb_tqjdMayB+5 zCf`nfpvf!vSUkAngc9}Ub-ByW4_gs;3RD=05P-|azqf+JLJ0~A4i;-J$5#K8p~PW= zO>UJCyUS*o7t46s2_G|DlXhy(>P^8_bI<98>X9*Jtdw~e6mL^+Gx=TI?2n|1TL-(aw8qℑb8_I7f4 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�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%0Dx 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%0AZ1l$V_P5c&U@Cie&A2C(IO%iy*w0g2F|+W_ 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%0AWLyjIFKZx&U#U~5*XbF+!()-``-_$iX#tn`XNny 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

    CB@S;2)&I*x4R@Sk?HvCFSAi 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 z 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

    A>soWZt*WS)Vb1+I@7>l8qUsq*1?cG+ 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⁡dcZ;ohLO^F+G(YJj;Jwy#FnQak}O9+J7 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 XVW%7Ho7F$@7X(t0QmdKI;Vst03(zxssI20 literal 0 HcmV?d00001 diff --git a/themes/starfield/terminal_box_e.png b/themes/starfield/terminal_box_e.png new file mode 100644 index 0000000000000000000000000000000000000000..fab00d515536dfba71de9cd8361c681a30484765 GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1j!3HG7{-t~dQY^(zo*^7SP{WbZ0pyE%x;Tb# p%uG&6NT@j5z@YU1|Nn4y21$1o)w8o+oChjk@O1TaS?83{1ORqE7kvN# literal 0 HcmV?d00001 diff --git a/themes/starfield/terminal_box_n.png b/themes/starfield/terminal_box_n.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9826198bdac73d7a8f9d153dd1e2b015c9a823 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrF!3HE-TH5A=1d4;)ofy`glX(f`uqAoByDx`7I;J!Gca%qgD@k*tT_@uLG}_)Usv|qJiLOMmaPJ7O@Km@C9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y^{Ro-U3d9M@S7GV(GQ2pmx;N_rN5qxyxz e*98yRn)#EQSVgb4RlEW!WbkzLb6Mw<&;$T#4>X4W literal 0 HcmV?d00001 diff --git a/themes/starfield/terminal_box_ne.png b/themes/starfield/terminal_box_ne.png new file mode 100644 index 0000000000000000000000000000000000000000..d17e1da19d0273941d4ec049f048321ee053791e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=mSQK*5Dp-y;YjHK^36S6978x} zCja^Wf4>wn)14;6e}_N(|NsB$zyJTwA2@N~zy~QU%|i?m1Jj)@{bD+EVTsxc8K4mip00i_>zopr07cC#ZvX%Q literal 0 HcmV?d00001 diff --git a/themes/starfield/terminal_box_nw.png b/themes/starfield/terminal_box_nw.png new file mode 100644 index 0000000000000000000000000000000000000000..0de1cac61958b1edd9c22a157ed6c0d7a67807a3 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%Cx&(BWL^R}Y)RhkEzxfm398e;ly{{O%AU&8dT ui3%MHH=X1Qxx!*ox41znChfTO?1;V{B3h-p58DGZGI+ZBxvXjBvhO|asUX9FtGlY{P+L=dNu~7y{tkEH4`oZ)iHRw`njxgN@xNAVul;X literal 0 HcmV?d00001 diff --git a/themes/starfield/terminal_box_se.png b/themes/starfield/terminal_box_se.png new file mode 100644 index 0000000000000000000000000000000000000000..c2bd23cd5fce97b6a3a958c7d7e1149892b85654 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=mSQK*5Dp-y;YjHK@=ZNm978x} z`gR@UWKiHa5|sXer}Tg6oP)BDoTsqy_1$6Jz_@dXmAml#i&ftaif;{ZT3Z&uz@Gm` WIDFHat2!7*KXlvY>%oA@$}0Sv6X!I RbPiBAgQu&X%Q~loCID9=AMXGF literal 0 HcmV?d00001 diff --git a/themes/starfield/terminal_box_w.png b/themes/starfield/terminal_box_w.png new file mode 100644 index 0000000000000000000000000000000000000000..f0968be57a4198fac3cb95d18ac5537223f54dc4 GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1j!3HG7{-t~dQY^(zo*^7SP{WbZ0pv?~x;Tb# s%uN3C|Nnj|W#z}dY;0}jJOK<0eqUMMeqDH`2B?O?)78&qol`;+0MNA<^8f$< literal 0 HcmV?d00001 diff --git a/themes/starfield/theme.txt b/themes/starfield/theme.txt new file mode 100644 index 000000000..5ec871b5f --- /dev/null +++ b/themes/starfield/theme.txt @@ -0,0 +1,79 @@ +# Default theme for GRUB2 +# +# Copyright (C) 2011 Daniel Tschudi +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +#general settings +message-font: "DejaVu Sans Regular 12" +message-color: "#000" +message-bg-color: "#fff" +terminal-box: "terminal_box_*.png" +terminal-font: "DejaVu Sans Regular 12" +desktop-image: "starfield.png" + +#help bar at the bottom ++ label { + top = 100%-25 + left = 0 + width = 100% + height = 20 + text = "@KEYMAP_MIDDLE@" + align = "center" + font = "DejaVu Sans Regular 10" + color = "#FFF" +} + +#boot menu ++ boot_menu { + left = 10% + width = 80% + top = 20% + height = 50% + item_font = "DejaVu Sans Regular 12" + item_color = "#000" + selected_item_font = "DejaVu Sans Bold 14" + selected_item_color= "#000" + selected_item_pixmap_style = "blob_*.png" + icon_height = 25 + icon_width = 25 + item_height = 26 + item_padding = 0 + item_icon_space = 0 + item_spacing = 1 + scrollbar = true + scrollbar_width = 20 + scrollbar_thumb = "slider_*.png" + menu_pixmap_style = "boot_menu_*.png" +} + +#progress bar ++ progress_bar { + id = "__timeout__" + left = 15% + top = 80% + height = 20 + width = 70% + font = "DejaVu Sans Regular 12" + text_color = "#000" + fg_color = "#fff" + bg_color = "#6ac" + border_color = "#fff" + text = "@TIMEOUT_NOTIFICATION_LONG@" +} diff --git a/unicode/ArabicShaping.txt b/unicode/ArabicShaping.txt new file mode 100644 index 000000000..bab6a11f9 --- /dev/null +++ b/unicode/ArabicShaping.txt @@ -0,0 +1,378 @@ +# ArabicShaping-6.0.0.txt +# Date: 2010-04-30, 13:47:00 PDT [KW] +# +# This file is a normative contributory data file in the +# Unicode Character Database. +# +# Copyright (c) 1991-2010 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# This file defines the shaping classes for Arabic, Syriac, and N'Ko +# positional shaping, repeating in machine readable form the +# information exemplified in Tables 8-3, 8-7, 8-8, 8-11, 8-12, +# 8-13, and 13-5 of The Unicode Standard, Version 6.0. +# +# See sections 8.2, 8.3, and 13.5 of The Unicode Standard, Version 6.0 +# for more information. +# +# Each line contains four fields, separated by a semicolon. +# +# Field 0: the code point, in 4-digit hexadecimal +# form, of an Arabic, Syriac, or N'Ko character. +# +# Field 1: gives a short schematic name for that character, +# abbreviated from the normative Unicode character name. +# Note that this schematic name is considered a comment, +# and does not constitute a formal property value. +# +# Field 2: defines the joining type (property name: Joining_Type) +# R Right_Joining +# L Left_Joining +# D Dual_Joining +# C Join_Causing +# U Non_Joining +# T Transparent +# See Section 8.2, Arabic for more information on these types. +# +# Field 3: defines the joining group (property name: Joining_Group) +# +# The values of the joining group are based schematically on character +# names. Where a schematic character name consists of two or more parts separated +# by spaces, the formal Joining_Group property value, as specified in +# PropertyValueAliases.txt, consists of the same name parts joined by +# underscores. Hence, the entry: +# +# 0629; TEH MARBUTA; R; TEH MARBUTA +# +# corresponds to [Joining_Group = Teh_Marbuta]. +# +# Note: The property value now designated [Joining_Group = Teh_Marbuta_Goal] +# used to apply to both of the following characters +# in earlier versions of the standard: +# +# U+06C2 ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +# U+06C3 ARABIC LETTER TEH MARBUTA GOAL +# +# However, it currently applies only to U+06C3, and *not* to U+06C2. +# To avoid destabilizing existing Joining_Group property aliases, the +# prior Joining_Group value for U+06C3 (Hamza_On_Heh_Goal) has been +# retained as a property value alias, despite the fact that it +# no longer applies to its namesake character, U+06C2. +# See PropertyValueAliases.txt. +# +# When other cursive scripts are added to the Unicode Standard in +# the future, the joining group value of all its letters will default +# to jg=No_Joining_Group in this data file. Other, more specific +# joining group values will be defined only if an explicit proposal +# to define those values exactly has been approved by the UTC. This +# is the convention exemplified by the N'Ko script. Only the Arabic +# and Syriac scripts currently have explicit joining group values defined. +# +# Note: Code points that are not explicitly listed in this file are +# either of joining type T or U: +# +# - Those that not explicitly listed that are of General Category Mn, Me, or Cf +# have joining type T. +# - All others not explicitly listed have joining type U. +# +# For an explicit listing of characters of joining type T, see +# the derived property file DerivedJoiningType.txt. +# +# There are currently no characters of joining type L defined in Unicode. +# +# ############################################################# + +# Unicode; Schematic Name; Joining Type; Joining Group + +# Arabic characters + +0600; ARABIC NUMBER SIGN; U; No_Joining_Group +0601; ARABIC SIGN SANAH; U; No_Joining_Group +0602; ARABIC FOOTNOTE MARKER; U; No_Joining_Group +0603; ARABIC SIGN SAFHA; U; No_Joining_Group +0608; ARABIC RAY; U; No_Joining_Group +060B; AFGHANI SIGN; U; No_Joining_Group +0620; YEH WITH RING; D; YEH +0621; HAMZA; U; No_Joining_Group +0622; MADDA ON ALEF; R; ALEF +0623; HAMZA ON ALEF; R; ALEF +0624; HAMZA ON WAW; R; WAW +0625; HAMZA UNDER ALEF; R; ALEF +0626; HAMZA ON YEH; D; YEH +0627; ALEF; R; ALEF +0628; BEH; D; BEH +0629; TEH MARBUTA; R; TEH MARBUTA +062A; TEH; D; BEH +062B; THEH; D; BEH +062C; JEEM; D; HAH +062D; HAH; D; HAH +062E; KHAH; D; HAH +062F; DAL; R; DAL +0630; THAL; R; DAL +0631; REH; R; REH +0632; ZAIN; R; REH +0633; SEEN; D; SEEN +0634; SHEEN; D; SEEN +0635; SAD; D; SAD +0636; DAD; D; SAD +0637; TAH; D; TAH +0638; ZAH; D; TAH +0639; AIN; D; AIN +063A; GHAIN; D; AIN +063B; KEHEH WITH 2 DOTS ABOVE; D; GAF +063C; KEHEH WITH 3 DOTS BELOW; D; GAF +063D; FARSI YEH WITH INVERTED V; D; FARSI YEH +063E; FARSI YEH WITH 2 DOTS ABOVE; D; FARSI YEH +063F; FARSI YEH WITH 3 DOTS ABOVE; D; FARSI YEH +0640; TATWEEL; C; No_Joining_Group +0641; FEH; D; FEH +0642; QAF; D; QAF +0643; KAF; D; KAF +0644; LAM; D; LAM +0645; MEEM; D; MEEM +0646; NOON; D; NOON +0647; HEH; D; HEH +0648; WAW; R; WAW +0649; ALEF MAKSURA; D; YEH +064A; YEH; D; YEH +066E; DOTLESS BEH; D; BEH +066F; DOTLESS QAF; D; QAF +0671; HAMZAT WASL ON ALEF; R; ALEF +0672; WAVY HAMZA ON ALEF; R; ALEF +0673; WAVY HAMZA UNDER ALEF; R; ALEF +0674; HIGH HAMZA; U; No_Joining_Group +0675; HIGH HAMZA ALEF; R; ALEF +0676; HIGH HAMZA WAW; R; WAW +0677; HIGH HAMZA WAW WITH DAMMA; R; WAW +0678; HIGH HAMZA YEH; D; YEH +0679; TEH WITH SMALL TAH; D; BEH +067A; TEH WITH 2 DOTS VERTICAL ABOVE; D; BEH +067B; BEH WITH 2 DOTS VERTICAL BELOW; D; BEH +067C; TEH WITH RING; D; BEH +067D; TEH WITH 3 DOTS ABOVE DOWNWARD; D; BEH +067E; TEH WITH 3 DOTS BELOW; D; BEH +067F; TEH WITH 4 DOTS ABOVE; D; BEH +0680; BEH WITH 4 DOTS BELOW; D; BEH +0681; HAMZA ON HAH; D; HAH +0682; HAH WITH 2 DOTS VERTICAL ABOVE; D; HAH +0683; HAH WITH MIDDLE 2 DOTS; D; HAH +0684; HAH WITH MIDDLE 2 DOTS VERTICAL; D; HAH +0685; HAH WITH 3 DOTS ABOVE; D; HAH +0686; HAH WITH MIDDLE 3 DOTS DOWNWARD; D; HAH +0687; HAH WITH MIDDLE 4 DOTS; D; HAH +0688; DAL WITH SMALL TAH; R; DAL +0689; DAL WITH RING; R; DAL +068A; DAL WITH DOT BELOW; R; DAL +068B; DAL WITH DOT BELOW AND SMALL TAH; R; DAL +068C; DAL WITH 2 DOTS ABOVE; R; DAL +068D; DAL WITH 2 DOTS BELOW; R; DAL +068E; DAL WITH 3 DOTS ABOVE; R; DAL +068F; DAL WITH 3 DOTS ABOVE DOWNWARD; R; DAL +0690; DAL WITH 4 DOTS ABOVE; R; DAL +0691; REH WITH SMALL TAH; R; REH +0692; REH WITH SMALL V; R; REH +0693; REH WITH RING; R; REH +0694; REH WITH DOT BELOW; R; REH +0695; REH WITH SMALL V BELOW; R; REH +0696; REH WITH DOT BELOW AND DOT ABOVE; R; REH +0697; REH WITH 2 DOTS ABOVE; R; REH +0698; REH WITH 3 DOTS ABOVE; R; REH +0699; REH WITH 4 DOTS ABOVE; R; REH +069A; SEEN WITH DOT BELOW AND DOT ABOVE; D; SEEN +069B; SEEN WITH 3 DOTS BELOW; D; SEEN +069C; SEEN WITH 3 DOTS BELOW AND 3 DOTS ABOVE; D; SEEN +069D; SAD WITH 2 DOTS BELOW; D; SAD +069E; SAD WITH 3 DOTS ABOVE; D; SAD +069F; TAH WITH 3 DOTS ABOVE; D; TAH +06A0; AIN WITH 3 DOTS ABOVE; D; AIN +06A1; DOTLESS FEH; D; FEH +06A2; FEH WITH DOT MOVED BELOW; D; FEH +06A3; FEH WITH DOT BELOW; D; FEH +06A4; FEH WITH 3 DOTS ABOVE; D; FEH +06A5; FEH WITH 3 DOTS BELOW; D; FEH +06A6; FEH WITH 4 DOTS ABOVE; D; FEH +06A7; QAF WITH DOT ABOVE; D; QAF +06A8; QAF WITH 3 DOTS ABOVE; D; QAF +06A9; KEHEH; D; GAF +06AA; SWASH KAF; D; SWASH KAF +06AB; KAF WITH RING; D; GAF +06AC; KAF WITH DOT ABOVE; D; KAF +06AD; KAF WITH 3 DOTS ABOVE; D; KAF +06AE; KAF WITH 3 DOTS BELOW; D; KAF +06AF; GAF; D; GAF +06B0; GAF WITH RING; D; GAF +06B1; GAF WITH 2 DOTS ABOVE; D; GAF +06B2; GAF WITH 2 DOTS BELOW; D; GAF +06B3; GAF WITH 2 DOTS VERTICAL BELOW; D; GAF +06B4; GAF WITH 3 DOTS ABOVE; D; GAF +06B5; LAM WITH SMALL V; D; LAM +06B6; LAM WITH DOT ABOVE; D; LAM +06B7; LAM WITH 3 DOTS ABOVE; D; LAM +06B8; LAM WITH 3 DOTS BELOW; D; LAM +06B9; NOON WITH DOT BELOW; D; NOON +06BA; DOTLESS NOON; D; NOON +06BB; DOTLESS NOON WITH SMALL TAH; D; NOON +06BC; NOON WITH RING; D; NOON +06BD; NYA; D; NYA +06BE; KNOTTED HEH; D; KNOTTED HEH +06BF; HAH WITH MIDDLE 3 DOTS DOWNWARD AND DOT ABOVE; D; HAH +06C0; HAMZA ON HEH; R; TEH MARBUTA +06C1; HEH GOAL; D; HEH GOAL +06C2; HAMZA ON HEH GOAL; D; HEH GOAL +06C3; TEH MARBUTA GOAL; R; TEH MARBUTA GOAL +06C4; WAW WITH RING; R; WAW +06C5; WAW WITH BAR; R; WAW +06C6; WAW WITH SMALL V; R; WAW +06C7; WAW WITH DAMMA; R; WAW +06C8; WAW WITH ALEF ABOVE; R; WAW +06C9; WAW WITH INVERTED SMALL V; R; WAW +06CA; WAW WITH 2 DOTS ABOVE; R; WAW +06CB; WAW WITH 3 DOTS ABOVE; R; WAW +06CC; FARSI YEH; D; FARSI YEH +06CD; YEH WITH TAIL; R; YEH WITH TAIL +06CE; FARSI YEH WITH SMALL V; D; FARSI YEH +06CF; WAW WITH DOT ABOVE; R; WAW +06D0; YEH WITH 2 DOTS VERTICAL BELOW; D; YEH +06D1; YEH WITH 3 DOTS BELOW; D; YEH +06D2; YEH BARREE; R; YEH BARREE +06D3; HAMZA ON YEH BARREE; R; YEH BARREE +06D5; AE; R; TEH MARBUTA +06DD; ARABIC END OF AYAH; U; No_Joining_Group +06EE; DAL WITH INVERTED V; R; DAL +06EF; REH WITH INVERTED V; R; REH +06FA; SEEN WITH DOT BELOW AND 3 DOTS ABOVE; D; SEEN +06FB; DAD WITH DOT BELOW; D; SAD +06FC; GHAIN WITH DOT BELOW; D; AIN +06FF; HEH WITH INVERTED V; D; KNOTTED HEH + +# Syriac characters + +0710; ALAPH; R; ALAPH +0712; BETH; D; BETH +0713; GAMAL; D; GAMAL +0714; GAMAL GARSHUNI; D; GAMAL +0715; DALATH; R; DALATH RISH +0716; DOTLESS DALATH RISH; R; DALATH RISH +0717; HE; R; HE +0718; WAW; R; SYRIAC WAW +0719; ZAIN; R; ZAIN +071A; HETH; D; HETH +071B; TETH; D; TETH +071C; TETH GARSHUNI; D; TETH +071D; YUDH; D; YUDH +071E; YUDH HE; R; YUDH HE +071F; KAPH; D; KAPH +0720; LAMADH; D; LAMADH +0721; MIM; D; MIM +0722; NUN; D; NUN +0723; SEMKATH; D; SEMKATH +0724; FINAL SEMKATH; D; FINAL SEMKATH +0725; E; D; E +0726; PE; D; PE +0727; REVERSED PE; D; REVERSED PE +0728; SADHE; R; SADHE +0729; QAPH; D; QAPH +072A; RISH; R; DALATH RISH +072B; SHIN; D; SHIN +072C; TAW; R; TAW +072D; PERSIAN BHETH; D; BETH +072E; PERSIAN GHAMAL; D; GAMAL +072F; PERSIAN DHALATH; R; DALATH RISH +074D; SOGDIAN ZHAIN; R; ZHAIN +074E; SOGDIAN KHAPH; D; KHAPH +074F; SOGDIAN FE; D; FE + +# Arabic supplement characters + +0750; BEH WITH 3 DOTS HORIZONTALLY BELOW; D; BEH +0751; BEH WITH DOT BELOW AND 3 DOTS ABOVE; D; BEH +0752; BEH WITH 3 DOTS POINTING UPWARDS BELOW; D; BEH +0753; BEH WITH 3 DOTS POINTING UPWARDS BELOW AND 2 DOTS ABOVE; D; BEH +0754; BEH WITH 2 DOTS BELOW AND DOT ABOVE; D; BEH +0755; BEH WITH INVERTED SMALL V BELOW; D; BEH +0756; BEH WITH SMALL V; D; BEH +0757; HAH WITH 2 DOTS ABOVE; D; HAH +0758; HAH WITH 3 DOTS POINTING UPWARDS BELOW; D; HAH +0759; DAL WITH 2 DOTS VERTICALLY BELOW AND SMALL TAH; R; DAL +075A; DAL WITH INVERTED SMALL V BELOW; R; DAL +075B; REH WITH STROKE; R; REH +075C; SEEN WITH 4 DOTS ABOVE; D; SEEN +075D; AIN WITH 2 DOTS ABOVE; D; AIN +075E; AIN WITH 3 DOTS POINTING DOWNWARDS ABOVE; D; AIN +075F; AIN WITH 2 DOTS VERTICALLY ABOVE; D; AIN +0760; FEH WITH 2 DOTS BELOW; D; FEH +0761; FEH WITH 3 DOTS POINTING UPWARDS BELOW; D; FEH +0762; KEHEH WITH DOT ABOVE; D; GAF +0763; KEHEH WITH 3 DOTS ABOVE; D; GAF +0764; KEHEH WITH 3 DOTS POINTING UPWARDS BELOW; D; GAF +0765; MEEM WITH DOT ABOVE; D; MEEM +0766; MEEM WITH DOT BELOW; D; MEEM +0767; NOON WITH 2 DOTS BELOW; D; NOON +0768; NOON WITH SMALL TAH; D; NOON +0769; NOON WITH SMALL V; D; NOON +076A; LAM WITH BAR; D; LAM +076B; REH WITH 2 DOTS VERTICALLY ABOVE; R; REH +076C; REH WITH HAMZA ABOVE; R; REH +076D; SEEN WITH 2 DOTS VERTICALLY ABOVE; D; SEEN +076E; HAH WITH SMALL TAH BELOW; D; HAH +076F; HAH WITH SMALL TAH AND 2 DOTS; D; HAH +0770; SEEN WITH SMALL TAH AND 2 DOTS; D; SEEN +0771; REH WITH SMALL TAH AND 2 DOTS; R; REH +0772; HAH WITH SMALL TAH ABOVE; D; HAH +0773; ALEF WITH DIGIT TWO ABOVE; R; ALEF +0774; ALEF WITH DIGIT THREE ABOVE; R; ALEF +0775; FARSI YEH WITH DIGIT TWO ABOVE; D; FARSI YEH +0776; FARSI YEH WITH DIGIT THREE ABOVE; D; FARSI YEH +0777; YEH WITH DIGIT FOUR BELOW; D; YEH +0778; WAW WITH DIGIT TWO ABOVE; R; WAW +0779; WAW WITH DIGIT THREE ABOVE; R; WAW +077A; YEH BARREE WITH DIGIT TWO ABOVE; D; BURUSHASKI YEH BARREE +077B; YEH BARREE WITH DIGIT THREE ABOVE; D; BURUSHASKI YEH BARREE +077C; HAH WITH DIGIT FOUR BELOW; D; HAH +077D; SEEN WITH DIGIT FOUR ABOVE; D; SEEN +077E; SEEN WITH INVERTED V; D; SEEN +077F; KAF WITH 2 DOTS ABOVE; D; KAF + +# N'Ko Characters + +07CA; NKO A; D; No_Joining_Group +07CB; NKO EE; D; No_Joining_Group +07CC; NKO I; D; No_Joining_Group +07CD; NKO E; D; No_Joining_Group +07CE; NKO U; D; No_Joining_Group +07CF; NKO OO; D; No_Joining_Group +07D0; NKO O; D; No_Joining_Group +07D1; NKO DAGBASINNA; D; No_Joining_Group +07D2; NKO N; D; No_Joining_Group +07D3; NKO BA; D; No_Joining_Group +07D4; NKO PA; D; No_Joining_Group +07D5; NKO TA; D; No_Joining_Group +07D6; NKO JA; D; No_Joining_Group +07D7; NKO CHA; D; No_Joining_Group +07D8; NKO DA; D; No_Joining_Group +07D9; NKO RA; D; No_Joining_Group +07DA; NKO RRA; D; No_Joining_Group +07DB; NKO SA; D; No_Joining_Group +07DC; NKO GBA; D; No_Joining_Group +07DD; NKO FA; D; No_Joining_Group +07DE; NKO KA; D; No_Joining_Group +07DF; NKO LA; D; No_Joining_Group +07E0; NKO NA WOLOSO; D; No_Joining_Group +07E1; NKO MA; D; No_Joining_Group +07E2; NKO NYA; D; No_Joining_Group +07E3; NKO NA; D; No_Joining_Group +07E4; NKO HA; D; No_Joining_Group +07E5; NKO WA; D; No_Joining_Group +07E6; NKO YA; D; No_Joining_Group +07E7; NKO NYA WOLOSO; D; No_Joining_Group +07E8; NKO JONA JA; D; No_Joining_Group +07E9; NKO JONA CHA; D; No_Joining_Group +07EA; NKO JONA RA; D; No_Joining_Group +07FA; NKO LAJANYALAN; C; No_Joining_Group + +# Other + +200C; ZERO WIDTH NON-JOINER; U; No_Joining_Group +200D; ZERO WIDTH JOINER; C; No_Joining_Group + +# EOF diff --git a/unicode/BidiMirroring.txt b/unicode/BidiMirroring.txt new file mode 100644 index 000000000..902f9a6b8 --- /dev/null +++ b/unicode/BidiMirroring.txt @@ -0,0 +1,597 @@ +# BidiMirroring-6.0.0.txt +# Date: 2010-06-21, 12:09:00 PDT [KW] +# +# Bidi_Mirroring_Glyph Property +# +# This file is an informative contributory data file in the +# Unicode Character Database. +# +# Copyright (c) 1991-2010 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# +# This data file lists characters that have the Bidi_Mirrored=True property +# value, for which there is another Unicode character that typically has a glyph +# that is the mirror image of the original character's glyph. +# +# The repertoire covered by the file is Unicode 6.0.0. +# +# The file contains a list of lines with mappings from one code point +# to another one for character-based mirroring. +# Note that for "real" mirroring, a rendering engine needs to select +# appropriate alternative glyphs, and that many Unicode characters do not +# have a mirror-image Unicode character. +# +# Each mapping line contains two fields, separated by a semicolon (';'). +# Each of the two fields contains a code point represented as a +# variable-length hexadecimal value with 4 to 6 digits. +# A comment indicates where the characters are "BEST FIT" mirroring. +# +# Code points for which Bidi_Mirrored=True, but for which no appropriate +# characters exist with mirrored glyphs, are +# listed as comments at the end of the file. +# +# Formally, the default value of the Bidi_Mirroring_Glyph property +# for each code point is the code point itself, unless a mapping to +# some other character is specified in this data file. When a code +# point has the default value for the Bidi_Mirroring_Glyph property, +# that means that no other character exists whose glyph is suitable +# for character-based mirroring. +# +# For information on bidi mirroring, see UAX #9: Bidirectional Algorithm, +# at http://www.unicode.org/unicode/reports/tr9/ +# +# This file was originally created by Markus Scherer. +# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler. +# +# ############################################################ + +0028; 0029 # LEFT PARENTHESIS +0029; 0028 # RIGHT PARENTHESIS +003C; 003E # LESS-THAN SIGN +003E; 003C # GREATER-THAN SIGN +005B; 005D # LEFT SQUARE BRACKET +005D; 005B # RIGHT SQUARE BRACKET +007B; 007D # LEFT CURLY BRACKET +007D; 007B # RIGHT CURLY BRACKET +00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0F3A; 0F3B # TIBETAN MARK GUG RTAGS GYON +0F3B; 0F3A # TIBETAN MARK GUG RTAGS GYAS +0F3C; 0F3D # TIBETAN MARK ANG KHANG GYON +0F3D; 0F3C # TIBETAN MARK ANG KHANG GYAS +169B; 169C # OGHAM FEATHER MARK +169C; 169B # OGHAM REVERSED FEATHER MARK +2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +2045; 2046 # LEFT SQUARE BRACKET WITH QUILL +2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL +207D; 207E # SUPERSCRIPT LEFT PARENTHESIS +207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS +208D; 208E # SUBSCRIPT LEFT PARENTHESIS +208E; 208D # SUBSCRIPT RIGHT PARENTHESIS +2208; 220B # ELEMENT OF +2209; 220C # NOT AN ELEMENT OF +220A; 220D # SMALL ELEMENT OF +220B; 2208 # CONTAINS AS MEMBER +220C; 2209 # DOES NOT CONTAIN AS MEMBER +220D; 220A # SMALL CONTAINS AS MEMBER +2215; 29F5 # DIVISION SLASH +223C; 223D # TILDE OPERATOR +223D; 223C # REVERSED TILDE +2243; 22CD # ASYMPTOTICALLY EQUAL TO +2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF +2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO +2254; 2255 # COLON EQUALS +2255; 2254 # EQUALS COLON +2264; 2265 # LESS-THAN OR EQUAL TO +2265; 2264 # GREATER-THAN OR EQUAL TO +2266; 2267 # LESS-THAN OVER EQUAL TO +2267; 2266 # GREATER-THAN OVER EQUAL TO +2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO +2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO +226A; 226B # MUCH LESS-THAN +226B; 226A # MUCH GREATER-THAN +226E; 226F # [BEST FIT] NOT LESS-THAN +226F; 226E # [BEST FIT] NOT GREATER-THAN +2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO +2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO +2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO +2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO +2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO +2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO +2276; 2277 # LESS-THAN OR GREATER-THAN +2277; 2276 # GREATER-THAN OR LESS-THAN +2278; 2279 # [BEST FIT] NEITHER LESS-THAN NOR GREATER-THAN +2279; 2278 # [BEST FIT] NEITHER GREATER-THAN NOR LESS-THAN +227A; 227B # PRECEDES +227B; 227A # SUCCEEDS +227C; 227D # PRECEDES OR EQUAL TO +227D; 227C # SUCCEEDS OR EQUAL TO +227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO +227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO +2280; 2281 # [BEST FIT] DOES NOT PRECEDE +2281; 2280 # [BEST FIT] DOES NOT SUCCEED +2282; 2283 # SUBSET OF +2283; 2282 # SUPERSET OF +2284; 2285 # [BEST FIT] NOT A SUBSET OF +2285; 2284 # [BEST FIT] NOT A SUPERSET OF +2286; 2287 # SUBSET OF OR EQUAL TO +2287; 2286 # SUPERSET OF OR EQUAL TO +2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO +2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO +228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO +228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO +228F; 2290 # SQUARE IMAGE OF +2290; 228F # SQUARE ORIGINAL OF +2291; 2292 # SQUARE IMAGE OF OR EQUAL TO +2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO +2298; 29B8 # CIRCLED DIVISION SLASH +22A2; 22A3 # RIGHT TACK +22A3; 22A2 # LEFT TACK +22A6; 2ADE # ASSERTION +22A8; 2AE4 # TRUE +22A9; 2AE3 # FORCES +22AB; 2AE5 # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22B0; 22B1 # PRECEDES UNDER RELATION +22B1; 22B0 # SUCCEEDS UNDER RELATION +22B2; 22B3 # NORMAL SUBGROUP OF +22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP +22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO +22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO +22B6; 22B7 # ORIGINAL OF +22B7; 22B6 # IMAGE OF +22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT +22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT +22CB; 22CC # LEFT SEMIDIRECT PRODUCT +22CC; 22CB # RIGHT SEMIDIRECT PRODUCT +22CD; 2243 # REVERSED TILDE EQUALS +22D0; 22D1 # DOUBLE SUBSET +22D1; 22D0 # DOUBLE SUPERSET +22D6; 22D7 # LESS-THAN WITH DOT +22D7; 22D6 # GREATER-THAN WITH DOT +22D8; 22D9 # VERY MUCH LESS-THAN +22D9; 22D8 # VERY MUCH GREATER-THAN +22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN +22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN +22DC; 22DD # EQUAL TO OR LESS-THAN +22DD; 22DC # EQUAL TO OR GREATER-THAN +22DE; 22DF # EQUAL TO OR PRECEDES +22DF; 22DE # EQUAL TO OR SUCCEEDS +22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL +22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL +22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO +22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO +22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO +22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO +22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO +22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO +22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO +22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO +22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF +22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP +22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO +22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS +22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS +22F2; 22FA # ELEMENT OF WITH LONG HORIZONTAL STROKE +22F3; 22FB # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22F4; 22FC # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22F6; 22FD # ELEMENT OF WITH OVERBAR +22F7; 22FE # SMALL ELEMENT OF WITH OVERBAR +22FA; 22F2 # CONTAINS WITH LONG HORIZONTAL STROKE +22FB; 22F3 # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22FC; 22F4 # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22FD; 22F6 # CONTAINS WITH OVERBAR +22FE; 22F7 # SMALL CONTAINS WITH OVERBAR +2308; 2309 # LEFT CEILING +2309; 2308 # RIGHT CEILING +230A; 230B # LEFT FLOOR +230B; 230A # RIGHT FLOOR +2329; 232A # LEFT-POINTING ANGLE BRACKET +232A; 2329 # RIGHT-POINTING ANGLE BRACKET +2768; 2769 # MEDIUM LEFT PARENTHESIS ORNAMENT +2769; 2768 # MEDIUM RIGHT PARENTHESIS ORNAMENT +276A; 276B # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276B; 276A # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276C; 276D # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276D; 276C # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276E; 276F # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +276F; 276E # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770; 2771 # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2771; 2770 # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2772; 2773 # LIGHT LEFT TORTOISE SHELL BRACKET +2773; 2772 # LIGHT RIGHT TORTOISE SHELL BRACKET +2774; 2775 # MEDIUM LEFT CURLY BRACKET ORNAMENT +2775; 2774 # MEDIUM RIGHT CURLY BRACKET ORNAMENT +27C3; 27C4 # OPEN SUBSET +27C4; 27C3 # OPEN SUPERSET +27C5; 27C6 # LEFT S-SHAPED BAG DELIMITER +27C6; 27C5 # RIGHT S-SHAPED BAG DELIMITER +27C8; 27C9 # REVERSE SOLIDUS PRECEDING SUBSET +27C9; 27C8 # SUPERSET PRECEDING SOLIDUS +27D5; 27D6 # LEFT OUTER JOIN +27D6; 27D5 # RIGHT OUTER JOIN +27DD; 27DE # LONG RIGHT TACK +27DE; 27DD # LONG LEFT TACK +27E2; 27E3 # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK +27E3; 27E2 # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK +27E4; 27E5 # WHITE SQUARE WITH LEFTWARDS TICK +27E5; 27E4 # WHITE SQUARE WITH RIGHTWARDS TICK +27E6; 27E7 # MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7; 27E6 # MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8; 27E9 # MATHEMATICAL LEFT ANGLE BRACKET +27E9; 27E8 # MATHEMATICAL RIGHT ANGLE BRACKET +27EA; 27EB # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB; 27EA # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27EC; 27ED # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27ED; 27EC # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EE; 27EF # MATHEMATICAL LEFT FLATTENED PARENTHESIS +27EF; 27EE # MATHEMATICAL RIGHT FLATTENED PARENTHESIS +2983; 2984 # LEFT WHITE CURLY BRACKET +2984; 2983 # RIGHT WHITE CURLY BRACKET +2985; 2986 # LEFT WHITE PARENTHESIS +2986; 2985 # RIGHT WHITE PARENTHESIS +2987; 2988 # Z NOTATION LEFT IMAGE BRACKET +2988; 2987 # Z NOTATION RIGHT IMAGE BRACKET +2989; 298A # Z NOTATION LEFT BINDING BRACKET +298A; 2989 # Z NOTATION RIGHT BINDING BRACKET +298B; 298C # LEFT SQUARE BRACKET WITH UNDERBAR +298C; 298B # RIGHT SQUARE BRACKET WITH UNDERBAR +298D; 2990 # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E; 298F # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F; 298E # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990; 298D # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991; 2992 # LEFT ANGLE BRACKET WITH DOT +2992; 2991 # RIGHT ANGLE BRACKET WITH DOT +2993; 2994 # LEFT ARC LESS-THAN BRACKET +2994; 2993 # RIGHT ARC GREATER-THAN BRACKET +2995; 2996 # DOUBLE LEFT ARC GREATER-THAN BRACKET +2996; 2995 # DOUBLE RIGHT ARC LESS-THAN BRACKET +2997; 2998 # LEFT BLACK TORTOISE SHELL BRACKET +2998; 2997 # RIGHT BLACK TORTOISE SHELL BRACKET +29B8; 2298 # CIRCLED REVERSE SOLIDUS +29C0; 29C1 # CIRCLED LESS-THAN +29C1; 29C0 # CIRCLED GREATER-THAN +29C4; 29C5 # SQUARED RISING DIAGONAL SLASH +29C5; 29C4 # SQUARED FALLING DIAGONAL SLASH +29CF; 29D0 # LEFT TRIANGLE BESIDE VERTICAL BAR +29D0; 29CF # VERTICAL BAR BESIDE RIGHT TRIANGLE +29D1; 29D2 # BOWTIE WITH LEFT HALF BLACK +29D2; 29D1 # BOWTIE WITH RIGHT HALF BLACK +29D4; 29D5 # TIMES WITH LEFT HALF BLACK +29D5; 29D4 # TIMES WITH RIGHT HALF BLACK +29D8; 29D9 # LEFT WIGGLY FENCE +29D9; 29D8 # RIGHT WIGGLY FENCE +29DA; 29DB # LEFT DOUBLE WIGGLY FENCE +29DB; 29DA # RIGHT DOUBLE WIGGLY FENCE +29F5; 2215 # REVERSE SOLIDUS OPERATOR +29F8; 29F9 # BIG SOLIDUS +29F9; 29F8 # BIG REVERSE SOLIDUS +29FC; 29FD # LEFT-POINTING CURVED ANGLE BRACKET +29FD; 29FC # RIGHT-POINTING CURVED ANGLE BRACKET +2A2B; 2A2C # MINUS SIGN WITH FALLING DOTS +2A2C; 2A2B # MINUS SIGN WITH RISING DOTS +2A2D; 2A2E # PLUS SIGN IN LEFT HALF CIRCLE +2A2E; 2A2D # PLUS SIGN IN RIGHT HALF CIRCLE +2A34; 2A35 # MULTIPLICATION SIGN IN LEFT HALF CIRCLE +2A35; 2A34 # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE +2A3C; 2A3D # INTERIOR PRODUCT +2A3D; 2A3C # RIGHTHAND INTERIOR PRODUCT +2A64; 2A65 # Z NOTATION DOMAIN ANTIRESTRICTION +2A65; 2A64 # Z NOTATION RANGE ANTIRESTRICTION +2A79; 2A7A # LESS-THAN WITH CIRCLE INSIDE +2A7A; 2A79 # GREATER-THAN WITH CIRCLE INSIDE +2A7D; 2A7E # LESS-THAN OR SLANTED EQUAL TO +2A7E; 2A7D # GREATER-THAN OR SLANTED EQUAL TO +2A7F; 2A80 # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE +2A80; 2A7F # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE +2A81; 2A82 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE +2A82; 2A81 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE +2A83; 2A84 # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT +2A84; 2A83 # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT +2A8B; 2A8C # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN +2A8C; 2A8B # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN +2A91; 2A92 # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL +2A92; 2A91 # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL +2A93; 2A94 # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL +2A94; 2A93 # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL +2A95; 2A96 # SLANTED EQUAL TO OR LESS-THAN +2A96; 2A95 # SLANTED EQUAL TO OR GREATER-THAN +2A97; 2A98 # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE +2A98; 2A97 # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE +2A99; 2A9A # DOUBLE-LINE EQUAL TO OR LESS-THAN +2A9A; 2A99 # DOUBLE-LINE EQUAL TO OR GREATER-THAN +2A9B; 2A9C # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN +2A9C; 2A9B # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN +2AA1; 2AA2 # DOUBLE NESTED LESS-THAN +2AA2; 2AA1 # DOUBLE NESTED GREATER-THAN +2AA6; 2AA7 # LESS-THAN CLOSED BY CURVE +2AA7; 2AA6 # GREATER-THAN CLOSED BY CURVE +2AA8; 2AA9 # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL +2AA9; 2AA8 # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL +2AAA; 2AAB # SMALLER THAN +2AAB; 2AAA # LARGER THAN +2AAC; 2AAD # SMALLER THAN OR EQUAL TO +2AAD; 2AAC # LARGER THAN OR EQUAL TO +2AAF; 2AB0 # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN +2AB0; 2AAF # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN +2AB3; 2AB4 # PRECEDES ABOVE EQUALS SIGN +2AB4; 2AB3 # SUCCEEDS ABOVE EQUALS SIGN +2ABB; 2ABC # DOUBLE PRECEDES +2ABC; 2ABB # DOUBLE SUCCEEDS +2ABD; 2ABE # SUBSET WITH DOT +2ABE; 2ABD # SUPERSET WITH DOT +2ABF; 2AC0 # SUBSET WITH PLUS SIGN BELOW +2AC0; 2ABF # SUPERSET WITH PLUS SIGN BELOW +2AC1; 2AC2 # SUBSET WITH MULTIPLICATION SIGN BELOW +2AC2; 2AC1 # SUPERSET WITH MULTIPLICATION SIGN BELOW +2AC3; 2AC4 # SUBSET OF OR EQUAL TO WITH DOT ABOVE +2AC4; 2AC3 # SUPERSET OF OR EQUAL TO WITH DOT ABOVE +2AC5; 2AC6 # SUBSET OF ABOVE EQUALS SIGN +2AC6; 2AC5 # SUPERSET OF ABOVE EQUALS SIGN +2ACD; 2ACE # SQUARE LEFT OPEN BOX OPERATOR +2ACE; 2ACD # SQUARE RIGHT OPEN BOX OPERATOR +2ACF; 2AD0 # CLOSED SUBSET +2AD0; 2ACF # CLOSED SUPERSET +2AD1; 2AD2 # CLOSED SUBSET OR EQUAL TO +2AD2; 2AD1 # CLOSED SUPERSET OR EQUAL TO +2AD3; 2AD4 # SUBSET ABOVE SUPERSET +2AD4; 2AD3 # SUPERSET ABOVE SUBSET +2AD5; 2AD6 # SUBSET ABOVE SUBSET +2AD6; 2AD5 # SUPERSET ABOVE SUPERSET +2ADE; 22A6 # SHORT LEFT TACK +2AE3; 22A9 # DOUBLE VERTICAL BAR LEFT TURNSTILE +2AE4; 22A8 # VERTICAL BAR DOUBLE LEFT TURNSTILE +2AE5; 22AB # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE +2AEC; 2AED # DOUBLE STROKE NOT SIGN +2AED; 2AEC # REVERSED DOUBLE STROKE NOT SIGN +2AF7; 2AF8 # TRIPLE NESTED LESS-THAN +2AF8; 2AF7 # TRIPLE NESTED GREATER-THAN +2AF9; 2AFA # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO +2AFA; 2AF9 # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO +2E02; 2E03 # LEFT SUBSTITUTION BRACKET +2E03; 2E02 # RIGHT SUBSTITUTION BRACKET +2E04; 2E05 # LEFT DOTTED SUBSTITUTION BRACKET +2E05; 2E04 # RIGHT DOTTED SUBSTITUTION BRACKET +2E09; 2E0A # LEFT TRANSPOSITION BRACKET +2E0A; 2E09 # RIGHT TRANSPOSITION BRACKET +2E0C; 2E0D # LEFT RAISED OMISSION BRACKET +2E0D; 2E0C # RIGHT RAISED OMISSION BRACKET +2E1C; 2E1D # LEFT LOW PARAPHRASE BRACKET +2E1D; 2E1C # RIGHT LOW PARAPHRASE BRACKET +2E20; 2E21 # LEFT VERTICAL BAR WITH QUILL +2E21; 2E20 # RIGHT VERTICAL BAR WITH QUILL +2E22; 2E23 # TOP LEFT HALF BRACKET +2E23; 2E22 # TOP RIGHT HALF BRACKET +2E24; 2E25 # BOTTOM LEFT HALF BRACKET +2E25; 2E24 # BOTTOM RIGHT HALF BRACKET +2E26; 2E27 # LEFT SIDEWAYS U BRACKET +2E27; 2E26 # RIGHT SIDEWAYS U BRACKET +2E28; 2E29 # LEFT DOUBLE PARENTHESIS +2E29; 2E28 # RIGHT DOUBLE PARENTHESIS +3008; 3009 # LEFT ANGLE BRACKET +3009; 3008 # RIGHT ANGLE BRACKET +300A; 300B # LEFT DOUBLE ANGLE BRACKET +300B; 300A # RIGHT DOUBLE ANGLE BRACKET +300C; 300D # [BEST FIT] LEFT CORNER BRACKET +300D; 300C # [BEST FIT] RIGHT CORNER BRACKET +300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET +300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET +3010; 3011 # LEFT BLACK LENTICULAR BRACKET +3011; 3010 # RIGHT BLACK LENTICULAR BRACKET +3014; 3015 # LEFT TORTOISE SHELL BRACKET +3015; 3014 # RIGHT TORTOISE SHELL BRACKET +3016; 3017 # LEFT WHITE LENTICULAR BRACKET +3017; 3016 # RIGHT WHITE LENTICULAR BRACKET +3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET +3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET +301A; 301B # LEFT WHITE SQUARE BRACKET +301B; 301A # RIGHT WHITE SQUARE BRACKET +FE59; FE5A # SMALL LEFT PARENTHESIS +FE5A; FE59 # SMALL RIGHT PARENTHESIS +FE5B; FE5C # SMALL LEFT CURLY BRACKET +FE5C; FE5B # SMALL RIGHT CURLY BRACKET +FE5D; FE5E # SMALL LEFT TORTOISE SHELL BRACKET +FE5E; FE5D # SMALL RIGHT TORTOISE SHELL BRACKET +FE64; FE65 # SMALL LESS-THAN SIGN +FE65; FE64 # SMALL GREATER-THAN SIGN +FF08; FF09 # FULLWIDTH LEFT PARENTHESIS +FF09; FF08 # FULLWIDTH RIGHT PARENTHESIS +FF1C; FF1E # FULLWIDTH LESS-THAN SIGN +FF1E; FF1C # FULLWIDTH GREATER-THAN SIGN +FF3B; FF3D # FULLWIDTH LEFT SQUARE BRACKET +FF3D; FF3B # FULLWIDTH RIGHT SQUARE BRACKET +FF5B; FF5D # FULLWIDTH LEFT CURLY BRACKET +FF5D; FF5B # FULLWIDTH RIGHT CURLY BRACKET +FF5F; FF60 # FULLWIDTH LEFT WHITE PARENTHESIS +FF60; FF5F # FULLWIDTH RIGHT WHITE PARENTHESIS +FF62; FF63 # [BEST FIT] HALFWIDTH LEFT CORNER BRACKET +FF63; FF62 # [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET + +# The following characters have no appropriate mirroring character. +# For these characters it is up to the rendering system +# to provide mirrored glyphs. + +# 2140; DOUBLE-STRUCK N-ARY SUMMATION +# 2201; COMPLEMENT +# 2202; PARTIAL DIFFERENTIAL +# 2203; THERE EXISTS +# 2204; THERE DOES NOT EXIST +# 2211; N-ARY SUMMATION +# 2216; SET MINUS +# 221A; SQUARE ROOT +# 221B; CUBE ROOT +# 221C; FOURTH ROOT +# 221D; PROPORTIONAL TO +# 221F; RIGHT ANGLE +# 2220; ANGLE +# 2221; MEASURED ANGLE +# 2222; SPHERICAL ANGLE +# 2224; DOES NOT DIVIDE +# 2226; NOT PARALLEL TO +# 222B; INTEGRAL +# 222C; DOUBLE INTEGRAL +# 222D; TRIPLE INTEGRAL +# 222E; CONTOUR INTEGRAL +# 222F; SURFACE INTEGRAL +# 2230; VOLUME INTEGRAL +# 2231; CLOCKWISE INTEGRAL +# 2232; CLOCKWISE CONTOUR INTEGRAL +# 2233; ANTICLOCKWISE CONTOUR INTEGRAL +# 2239; EXCESS +# 223B; HOMOTHETIC +# 223E; INVERTED LAZY S +# 223F; SINE WAVE +# 2240; WREATH PRODUCT +# 2241; NOT TILDE +# 2242; MINUS TILDE +# 2244; NOT ASYMPTOTICALLY EQUAL TO +# 2245; APPROXIMATELY EQUAL TO +# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO +# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +# 2248; ALMOST EQUAL TO +# 2249; NOT ALMOST EQUAL TO +# 224A; ALMOST EQUAL OR EQUAL TO +# 224B; TRIPLE TILDE +# 224C; ALL EQUAL TO +# 225F; QUESTIONED EQUAL TO +# 2260; NOT EQUAL TO +# 2262; NOT IDENTICAL TO +# 228C; MULTISET +# 22A7; MODELS +# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE +# 22AC; DOES NOT PROVE +# 22AD; NOT TRUE +# 22AE; DOES NOT FORCE +# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +# 22B8; MULTIMAP +# 22BE; RIGHT ANGLE WITH ARC +# 22BF; RIGHT TRIANGLE +# 22F5; ELEMENT OF WITH DOT ABOVE +# 22F8; ELEMENT OF WITH UNDERBAR +# 22F9; ELEMENT OF WITH TWO HORIZONTAL STROKES +# 22FF; Z NOTATION BAG MEMBERSHIP +# 2320; TOP HALF INTEGRAL +# 2321; BOTTOM HALF INTEGRAL +# 27C0; THREE DIMENSIONAL ANGLE +# 27CC; LONG DIVISION +# 27D3; LOWER RIGHT CORNER WITH DOT +# 27D4; UPPER LEFT CORNER WITH DOT +# 27DC; LEFT MULTIMAP +# 299B; MEASURED ANGLE OPENING LEFT +# 299C; RIGHT ANGLE VARIANT WITH SQUARE +# 299D; MEASURED RIGHT ANGLE WITH DOT +# 299E; ANGLE WITH S INSIDE +# 299F; ACUTE ANGLE +# 29A0; SPHERICAL ANGLE OPENING LEFT +# 29A1; SPHERICAL ANGLE OPENING UP +# 29A2; TURNED ANGLE +# 29A3; REVERSED ANGLE +# 29A4; ANGLE WITH UNDERBAR +# 29A5; REVERSED ANGLE WITH UNDERBAR +# 29A6; OBLIQUE ANGLE OPENING UP +# 29A7; OBLIQUE ANGLE OPENING DOWN +# 29A8; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT +# 29A9; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT +# 29AA; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT +# 29AB; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT +# 29AC; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP +# 29AD; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP +# 29AE; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN +# 29AF; MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN +# 29C2; CIRCLE WITH SMALL CIRCLE TO THE RIGHT +# 29C3; CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT +# 29C9; TWO JOINED SQUARES +# 29CE; RIGHT TRIANGLE ABOVE LEFT TRIANGLE +# 29DC; INCOMPLETE INFINITY +# 29E1; INCREASES AS +# 29E3; EQUALS SIGN AND SLANTED PARALLEL +# 29E4; EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE +# 29E5; IDENTICAL TO AND SLANTED PARALLEL +# 29E8; DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK +# 29E9; DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK +# 29F4; RULE-DELAYED +# 29F6; SOLIDUS WITH OVERBAR +# 29F7; REVERSE SOLIDUS WITH HORIZONTAL STROKE +# 2A0A; MODULO TWO SUM +# 2A0B; SUMMATION WITH INTEGRAL +# 2A0C; QUADRUPLE INTEGRAL OPERATOR +# 2A0D; FINITE PART INTEGRAL +# 2A0E; INTEGRAL WITH DOUBLE STROKE +# 2A0F; INTEGRAL AVERAGE WITH SLASH +# 2A10; CIRCULATION FUNCTION +# 2A11; ANTICLOCKWISE INTEGRATION +# 2A12; LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE +# 2A13; LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE +# 2A14; LINE INTEGRATION NOT INCLUDING THE POLE +# 2A15; INTEGRAL AROUND A POINT OPERATOR +# 2A16; QUATERNION INTEGRAL OPERATOR +# 2A17; INTEGRAL WITH LEFTWARDS ARROW WITH HOOK +# 2A18; INTEGRAL WITH TIMES SIGN +# 2A19; INTEGRAL WITH INTERSECTION +# 2A1A; INTEGRAL WITH UNION +# 2A1B; INTEGRAL WITH OVERBAR +# 2A1C; INTEGRAL WITH UNDERBAR +# 2A1E; LARGE LEFT TRIANGLE OPERATOR +# 2A1F; Z NOTATION SCHEMA COMPOSITION +# 2A20; Z NOTATION SCHEMA PIPING +# 2A21; Z NOTATION SCHEMA PROJECTION +# 2A24; PLUS SIGN WITH TILDE ABOVE +# 2A26; PLUS SIGN WITH TILDE BELOW +# 2A29; MINUS SIGN WITH COMMA ABOVE +# 2A3E; Z NOTATION RELATIONAL COMPOSITION +# 2A57; SLOPING LARGE OR +# 2A58; SLOPING LARGE AND +# 2A6A; TILDE OPERATOR WITH DOT ABOVE +# 2A6B; TILDE OPERATOR WITH RISING DOTS +# 2A6C; SIMILAR MINUS SIMILAR +# 2A6D; CONGRUENT WITH DOT ABOVE +# 2A6F; ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT +# 2A70; APPROXIMATELY EQUAL OR EQUAL TO +# 2A73; EQUALS SIGN ABOVE TILDE OPERATOR +# 2A74; DOUBLE COLON EQUAL +# 2A7B; LESS-THAN WITH QUESTION MARK ABOVE +# 2A7C; GREATER-THAN WITH QUESTION MARK ABOVE +# 2A85; LESS-THAN OR APPROXIMATE +# 2A86; GREATER-THAN OR APPROXIMATE +# 2A87; LESS-THAN AND SINGLE-LINE NOT EQUAL TO +# 2A88; GREATER-THAN AND SINGLE-LINE NOT EQUAL TO +# 2A89; LESS-THAN AND NOT APPROXIMATE +# 2A8A; GREATER-THAN AND NOT APPROXIMATE +# 2A8D; LESS-THAN ABOVE SIMILAR OR EQUAL +# 2A8E; GREATER-THAN ABOVE SIMILAR OR EQUAL +# 2A8F; LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN +# 2A90; GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN +# 2A9D; SIMILAR OR LESS-THAN +# 2A9E; SIMILAR OR GREATER-THAN +# 2A9F; SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN +# 2AA0; SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN +# 2AA3; DOUBLE NESTED LESS-THAN WITH UNDERBAR +# 2AB1; PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO +# 2AB2; SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO +# 2AB5; PRECEDES ABOVE NOT EQUAL TO +# 2AB6; SUCCEEDS ABOVE NOT EQUAL TO +# 2AB7; PRECEDES ABOVE ALMOST EQUAL TO +# 2AB8; SUCCEEDS ABOVE ALMOST EQUAL TO +# 2AB9; PRECEDES ABOVE NOT ALMOST EQUAL TO +# 2ABA; SUCCEEDS ABOVE NOT ALMOST EQUAL TO +# 2AC7; SUBSET OF ABOVE TILDE OPERATOR +# 2AC8; SUPERSET OF ABOVE TILDE OPERATOR +# 2AC9; SUBSET OF ABOVE ALMOST EQUAL TO +# 2ACA; SUPERSET OF ABOVE ALMOST EQUAL TO +# 2ACB; SUBSET OF ABOVE NOT EQUAL TO +# 2ACC; SUPERSET OF ABOVE NOT EQUAL TO +# 2ADC; FORKING +# 2AE2; VERTICAL BAR TRIPLE RIGHT TURNSTILE +# 2AE6; LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL +# 2AEE; DOES NOT DIVIDE WITH REVERSED NEGATION SLASH +# 2AF3; PARALLEL WITH TILDE OPERATOR +# 2AFB; TRIPLE SOLIDUS BINARY RELATION +# 2AFD; DOUBLE SOLIDUS OPERATOR +# 1D6DB; MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +# 1D715; MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +# 1D74F; MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +# 1D789; MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +# 1D7C3; MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL + +# EOF diff --git a/unicode/COPYING b/unicode/COPYING new file mode 100644 index 000000000..ad63a2bbc --- /dev/null +++ b/unicode/COPYING @@ -0,0 +1,9 @@ +COPYRIGHT AND PERMISSION NOTICE + +Copyright © 1991-2011 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. diff --git a/unicode/UnicodeData.txt b/unicode/UnicodeData.txt new file mode 100644 index 000000000..8d7222b13 --- /dev/null +++ b/unicode/UnicodeData.txt @@ -0,0 +1,23697 @@ +0000;;Cc;0;BN;;;;;N;NULL;;;; +0001;;Cc;0;BN;;;;;N;START OF HEADING;;;; +0002;;Cc;0;BN;;;;;N;START OF TEXT;;;; +0003;;Cc;0;BN;;;;;N;END OF TEXT;;;; +0004;;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;; +0005;;Cc;0;BN;;;;;N;ENQUIRY;;;; +0006;;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; +0007;;Cc;0;BN;;;;;N;BELL;;;; +0008;;Cc;0;BN;;;;;N;BACKSPACE;;;; +0009;;Cc;0;S;;;;;N;CHARACTER TABULATION;;;; +000A;;Cc;0;B;;;;;N;LINE FEED (LF);;;; +000B;;Cc;0;S;;;;;N;LINE TABULATION;;;; +000C;;Cc;0;WS;;;;;N;FORM FEED (FF);;;; +000D;;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;; +000E;;Cc;0;BN;;;;;N;SHIFT OUT;;;; +000F;;Cc;0;BN;;;;;N;SHIFT IN;;;; +0010;;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;; +0011;;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;; +0012;;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;; +0013;;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;; +0014;;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;; +0015;;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;; +0016;;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;; +0017;;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;; +0018;;Cc;0;BN;;;;;N;CANCEL;;;; +0019;;Cc;0;BN;;;;;N;END OF MEDIUM;;;; +001A;;Cc;0;BN;;;;;N;SUBSTITUTE;;;; +001B;;Cc;0;BN;;;;;N;ESCAPE;;;; +001C;;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;; +001D;;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;; +001E;;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;; +001F;;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;; +0020;SPACE;Zs;0;WS;;;;;N;;;;; +0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; +0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; +0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; +0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; +0026;AMPERSAND;Po;0;ON;;;;;N;;;;; +0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; +0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; +0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; +002A;ASTERISK;Po;0;ON;;;;;N;;;;; +002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;; +002C;COMMA;Po;0;CS;;;;;N;;;;; +002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;; +002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; +002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;; +0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; +0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; +0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; +0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; +0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; +0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; +0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; +0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; +0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; +0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; +003A;COLON;Po;0;CS;;;;;N;;;;; +003B;SEMICOLON;Po;0;ON;;;;;N;;;;; +003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; +003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; +003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; +003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; +0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; +0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; +0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; +0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; +0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; +0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; +0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; +0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; +0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; +0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; +004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; +004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; +004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; +004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; +004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; +004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; +0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; +0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; +0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; +0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; +0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; +0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; +0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; +0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; +0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; +0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; +005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; +005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; +005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; +005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; +005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; +005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; +0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; +0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 +0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 +0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 +0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 +0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 +0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 +0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 +0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 +0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 +006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A +006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B +006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C +006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D +006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E +006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F +0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 +0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 +0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 +0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 +0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 +0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 +0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 +0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 +0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 +0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 +007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A +007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; +007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; +007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; +007E;TILDE;Sm;0;ON;;;;;N;;;;; +007F;;Cc;0;BN;;;;;N;DELETE;;;; +0080;;Cc;0;BN;;;;;N;;;;; +0081;;Cc;0;BN;;;;;N;;;;; +0082;;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;; +0083;;Cc;0;BN;;;;;N;NO BREAK HERE;;;; +0084;;Cc;0;BN;;;;;N;;;;; +0085;;Cc;0;B;;;;;N;NEXT LINE (NEL);;;; +0086;;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;; +0087;;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;; +0088;;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;; +0089;;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;; +008A;;Cc;0;BN;;;;;N;LINE TABULATION SET;;;; +008B;;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;; +008C;;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;; +008D;;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;; +008E;;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;; +008F;;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;; +0090;;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;; +0091;;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;; +0092;;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;; +0093;;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;; +0094;;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;; +0095;;Cc;0;BN;;;;;N;MESSAGE WAITING;;;; +0096;;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;; +0097;;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;; +0098;;Cc;0;BN;;;;;N;START OF STRING;;;; +0099;;Cc;0;BN;;;;;N;;;;; +009A;;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;; +009B;;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;; +009C;;Cc;0;BN;;;;;N;STRING TERMINATOR;;;; +009D;;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;; +009E;;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;; +009F;;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;; +00A0;NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;NON-BREAKING SPACE;;;; +00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; +00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; +00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; +00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; +00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; +00A7;SECTION SIGN;So;0;ON;;;;;N;;;;; +00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;; +00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; +00AA;FEMININE ORDINAL INDICATOR;Ll;0;L; 0061;;;;N;;;;; +00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;; +00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; +00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;; +00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; +00AF;MACRON;Sk;0;ON; 0020 0304;;;;N;SPACING MACRON;;;; +00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; +00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; +00B2;SUPERSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;; +00B3;SUPERSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;; +00B4;ACUTE ACCENT;Sk;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;; +00B5;MICRO SIGN;Ll;0;L; 03BC;;;;N;;;039C;;039C +00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; +00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; +00B8;CEDILLA;Sk;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;; +00B9;SUPERSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;; +00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L; 006F;;;;N;;;;; +00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;; +00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; +00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; +00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON; 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; +00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; +00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; +00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; +00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; +00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; +00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; +00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; +00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;;;00E6; +00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; +00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; +00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; +00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; +00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; +00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; +00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; +00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; +00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; +00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;00F0; +00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; +00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; +00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; +00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; +00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; +00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; +00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; +00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; +00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; +00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; +00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; +00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; +00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; +00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;;;00FE; +00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;;;; +00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 +00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 +00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 +00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 +00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 +00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 +00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;;00C6;;00C6 +00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 +00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 +00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 +00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA +00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB +00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC +00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD +00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE +00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF +00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;;00D0;;00D0 +00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 +00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 +00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 +00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 +00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 +00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 +00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 +00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 +00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA +00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB +00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC +00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD +00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;;00DE;;00DE +00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 +0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; +0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 +0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; +0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 +0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; +0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 +0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; +0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 +0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; +0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 +010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; +010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A +010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; +010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C +010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; +010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E +0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; +0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 +0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; +0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 +0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; +0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 +0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; +0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 +0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; +0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 +011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; +011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A +011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; +011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C +011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; +011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E +0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; +0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 +0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; +0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 +0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; +0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 +0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; +0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 +0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; +0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 +012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; +012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A +012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; +012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C +012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; +012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E +0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; +0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 +0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L; 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; +0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 +0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; +0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 +0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; +0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 +0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;;;; +0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; +013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 +013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; +013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B +013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; +013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D +013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; +0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L; 006C 00B7;;;;N;;;013F;;013F +0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; +0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 +0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; +0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 +0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; +0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 +0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; +0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 +0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L; 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; +014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;014B; +014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;;014A;;014A +014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; +014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C +014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; +014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E +0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; +0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 +0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; +0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 +0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; +0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 +0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; +0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 +0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; +0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 +015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; +015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A +015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; +015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C +015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;;;015F; +015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;;015E;;015E +0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; +0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 +0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;;;0163; +0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;;0162;;0162 +0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; +0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 +0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; +0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 +0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; +0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 +016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; +016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A +016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; +016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C +016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; +016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E +0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; +0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 +0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; +0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 +0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; +0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 +0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; +0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 +0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; +0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; +017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 +017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; +017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B +017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; +017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D +017F;LATIN SMALL LETTER LONG S;Ll;0;L; 0073;;;;N;;;0053;;0053 +0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 +0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; +0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; +0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 +0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; +0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 +0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; +0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; +0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 +0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;;;0256; +018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; +018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; +018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B +018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; +018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; +018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; +0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; +0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; +0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 +0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; +0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; +0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;;01F6;;01F6 +0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; +0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; +0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; +0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 +019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D +019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; +019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; +019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; +019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 +019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;;;0275; +01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; +01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 +01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;;;01A3; +01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;;01A2;;01A2 +01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; +01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 +01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280; +01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; +01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 +01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; +01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; +01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; +01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; +01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC +01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; +01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; +01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF +01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; +01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; +01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; +01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 +01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; +01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 +01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; +01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; +01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 +01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; +01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; +01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; +01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC +01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; +01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 +01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; +01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; +01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; +01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; +01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L; 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 +01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L; 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5 +01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L; 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 +01C7;LATIN CAPITAL LETTER LJ;Lu;0;L; 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 +01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L; 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8 +01C9;LATIN SMALL LETTER LJ;Ll;0;L; 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 +01CA;LATIN CAPITAL LETTER NJ;Lu;0;L; 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB +01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L; 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB +01CC;LATIN SMALL LETTER NJ;Ll;0;L; 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB +01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; +01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD +01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; +01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF +01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; +01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 +01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; +01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 +01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; +01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 +01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; +01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 +01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; +01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 +01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; +01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB +01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E +01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; +01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE +01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; +01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 +01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;;;01E3; +01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;;01E2;;01E2 +01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; +01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 +01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; +01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 +01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; +01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 +01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; +01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA +01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; +01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC +01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; +01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE +01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; +01F1;LATIN CAPITAL LETTER DZ;Lu;0;L; 0044 005A;;;;N;;;;01F3;01F2 +01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L; 0044 007A;;;;N;;;01F1;01F3;01F2 +01F3;LATIN SMALL LETTER DZ;Ll;0;L; 0064 007A;;;;N;;;01F1;;01F2 +01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; +01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 +01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; +01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; +01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; +01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 +01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; +01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA +01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;;;01FD; +01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;;01FC;;01FC +01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; +01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE +0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; +0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 +0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; +0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 +0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; +0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 +0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; +0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 +0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; +0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 +020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; +020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A +020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; +020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C +020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; +020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E +0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; +0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 +0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; +0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 +0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; +0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 +0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; +0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 +0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;;;0219; +0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;;0218;;0218 +021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;;;021B; +021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;;021A;;021A +021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; +021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C +021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; +021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E +0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E; +0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;; +0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; +0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 +0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; +0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 +0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; +0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 +0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; +0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 +022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; +022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A +022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; +022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C +022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; +022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E +0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; +0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 +0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; +0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 +0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; +0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; +0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; +0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; +0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; +0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; +023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; +023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; +023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B +023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; +023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; +023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7E;;2C7E +0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;2C7F;;2C7F +0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; +0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 +0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; +0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; +0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; +0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; +0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 +0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; +0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 +024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; +024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A +024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; +024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C +024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; +024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E +0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F +0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D +0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;2C70;;2C70 +0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 +0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 +0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; +0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 +0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A +0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; +0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F +025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; +025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 +025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;; +025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; +025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; +025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; +0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 +0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;; +0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; +0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 +0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; +0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D +0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;; +0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; +0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 +0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 +026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; +026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 +026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; +026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; +026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; +026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C +0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; +0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E +0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D +0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; +0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; +0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F +0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; +0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; +0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; +0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; +027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; +027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; +027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; +027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 +027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; +027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; +0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6 +0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; +0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; +0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 +0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; +0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; +0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; +0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; +0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE +0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 +028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 +028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 +028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 +028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; +028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; +028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; +0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; +0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; +0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 +0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; +0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; +0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; +0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; +0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; +0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; +029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; +029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; +029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; +029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;; +029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;; +029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; +02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; +02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; +02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; +02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; +02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; +02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; +02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; +02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; +02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; +02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; +02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; +02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; +02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; +02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; +02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;; +02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;; +02B0;MODIFIER LETTER SMALL H;Lm;0;L; 0068;;;;N;;;;; +02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L; 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; +02B2;MODIFIER LETTER SMALL J;Lm;0;L; 006A;;;;N;;;;; +02B3;MODIFIER LETTER SMALL R;Lm;0;L; 0072;;;;N;;;;; +02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L; 0279;;;;N;;;;; +02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L; 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; +02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L; 0281;;;;N;;;;; +02B7;MODIFIER LETTER SMALL W;Lm;0;L; 0077;;;;N;;;;; +02B8;MODIFIER LETTER SMALL Y;Lm;0;L; 0079;;;;N;;;;; +02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;; +02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;; +02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; +02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; +02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; +02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; +02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; +02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; +02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; +02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; +02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;;;; +02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;; +02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;;;; +02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;;;; +02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;;;; +02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;; +02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;; +02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; +02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; +02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; +02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; +02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; +02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; +02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; +02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; +02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; +02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; +02D8;BREVE;Sk;0;ON; 0020 0306;;;;N;SPACING BREVE;;;; +02D9;DOT ABOVE;Sk;0;ON; 0020 0307;;;;N;SPACING DOT ABOVE;;;; +02DA;RING ABOVE;Sk;0;ON; 0020 030A;;;;N;SPACING RING ABOVE;;;; +02DB;OGONEK;Sk;0;ON; 0020 0328;;;;N;SPACING OGONEK;;;; +02DC;SMALL TILDE;Sk;0;ON; 0020 0303;;;;N;SPACING TILDE;;;; +02DD;DOUBLE ACUTE ACCENT;Sk;0;ON; 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; +02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; +02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; +02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L; 0263;;;;N;;;;; +02E1;MODIFIER LETTER SMALL L;Lm;0;L; 006C;;;;N;;;;; +02E2;MODIFIER LETTER SMALL S;Lm;0;L; 0073;;;;N;;;;; +02E3;MODIFIER LETTER SMALL X;Lm;0;L; 0078;;;;N;;;;; +02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L; 0295;;;;N;;;;; +02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; +02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; +02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; +02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; +02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; +02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; +02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; +02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;; +02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; +02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; +02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;; +02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; +02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; +02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;; +02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;; +02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;; +02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;; +02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;; +02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;; +02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;; +02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;; +02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;; +02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;; +0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;;;; +0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;;;; +0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; +0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; +0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; +0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; +0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;;;; +0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; +0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;;;; +0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; +030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; +030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; +030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; +030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;; +030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; +030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; +0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; +0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; +0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; +0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;;;; +0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;;;; +0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; +0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; +0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; +0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; +0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; +031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; +031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; +031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; +031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; +031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; +031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; +0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; +0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; +0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; +0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; +0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; +0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; +0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; +0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; +0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; +0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; +032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; +032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; +032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; +032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; +032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; +032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; +0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; +0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; +0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; +0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; +0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; +0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; +0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; +0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; +0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; +0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; +033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; +033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; +033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; +033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; +033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; +033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; +0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;;;; +0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;;;; +0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; +0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; +0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; +0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 +0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; +0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; +0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; +034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; +034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; +034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; +034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;; +0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;; +0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;; +0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; +0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; +035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; +035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; +035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; +035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; +035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; +0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; +0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; +0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; +0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;; +0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;; +0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;; +0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;; +0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;; +0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;; +0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;; +036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;; +036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;; +036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;; +036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;; +036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;; +036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;; +0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371; +0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370 +0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373; +0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372 +0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;;;; +0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;;;; +0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377; +0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376 +037A;GREEK YPOGEGRAMMENI;Lm;0;L; 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; +037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD +037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE +037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF +037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;;;; +0384;GREEK TONOS;Sk;0;ON; 0020 0301;;;;N;GREEK SPACING TONOS;;;; +0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; +0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; +0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; +0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; +0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; +038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; +038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; +038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; +038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; +0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; +0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; +0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; +0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; +0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; +0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; +0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; +0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; +0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; +0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; +039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; +039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; +039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; +039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; +039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; +039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; +03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; +03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; +03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; +03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; +03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; +03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; +03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; +03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; +03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; +03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; +03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; +03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 +03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 +03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 +03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A +03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; +03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 +03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 +03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 +03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 +03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 +03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 +03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 +03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 +03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 +03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A +03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B +03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C +03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D +03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E +03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F +03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 +03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 +03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 +03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 +03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 +03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 +03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 +03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 +03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 +03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 +03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA +03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB +03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C +03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E +03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F +03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7; +03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 +03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 +03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; +03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; +03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; +03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 +03D6;GREEK PI SYMBOL;Ll;0;L; 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 +03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF +03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;;;03D9; +03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;;03D8;;03D8 +03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; +03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA +03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; +03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC +03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; +03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE +03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; +03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 +03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; +03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 +03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; +03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 +03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; +03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 +03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; +03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 +03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; +03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA +03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; +03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC +03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; +03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE +03F0;GREEK KAPPA SYMBOL;Ll;0;L; 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A +03F1;GREEK RHO SYMBOL;Ll;0;L; 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 +03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L; 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9 +03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;; +03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8; +03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L; 03B5;;;;N;;;0395;;0395 +03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;; +03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8; +03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7 +03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L; 03A3;;;;N;;;;03F2; +03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; +03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA +03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; +03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; +03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; +03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; +0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; +0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; +0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;;;0452; +0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; +0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; +0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; +0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; +0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;;;0457; +0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; +0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; +040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; +040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;;;045B; +040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; +040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; +040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;;;045E; +040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; +0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; +0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; +0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; +0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; +0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; +0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; +0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; +0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; +0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; +0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; +041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; +041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; +041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; +041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; +041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; +041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; +0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; +0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; +0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; +0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; +0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; +0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; +0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; +0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; +0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; +0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; +042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; +042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; +042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; +042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; +042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; +042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; +0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 +0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 +0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 +0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 +0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 +0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 +0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 +0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 +0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 +0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 +043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A +043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B +043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C +043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D +043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E +043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F +0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 +0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 +0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 +0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 +0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 +0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 +0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 +0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 +0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 +0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 +044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A +044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B +044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C +044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D +044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E +044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F +0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 +0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 +0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;;0402;;0402 +0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 +0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 +0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 +0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 +0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;;0407;;0407 +0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 +0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 +045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A +045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;;040B;;040B +045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C +045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D +045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;;040E;;040E +045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F +0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; +0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 +0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; +0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 +0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; +0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 +0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; +0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 +0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; +0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 +046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; +046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A +046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; +046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C +046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; +046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E +0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; +0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 +0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; +0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 +0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; +0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 +0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; +0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 +0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; +0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 +047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; +047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A +047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; +047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C +047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; +047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E +0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; +0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 +0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; +0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; +0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; +0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; +0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; +0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;; +0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; +0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B; +048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A +048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; +048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C +048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; +048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E +0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; +0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 +0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; +0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 +0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; +0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 +0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; +0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 +0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; +0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 +049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; +049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A +049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; +049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C +049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; +049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E +04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; +04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 +04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; +04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 +04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; +04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 +04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;;;04A7; +04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;;04A6;;04A6 +04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; +04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 +04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; +04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA +04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; +04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC +04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; +04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE +04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; +04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 +04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; +04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 +04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;;;04B5; +04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;;04B4;;04B4 +04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; +04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 +04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; +04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 +04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; +04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA +04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; +04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC +04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; +04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE +04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; +04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; +04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 +04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; +04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 +04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6; +04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5 +04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; +04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 +04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA; +04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9 +04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; +04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB +04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; +04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD +04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 +04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; +04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 +04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; +04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 +04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; +04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 +04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; +04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 +04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; +04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 +04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; +04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA +04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; +04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC +04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; +04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE +04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; +04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 +04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; +04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 +04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; +04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 +04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; +04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 +04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; +04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 +04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; +04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA +04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; +04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC +04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; +04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE +04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; +04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 +04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; +04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 +04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; +04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 +04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; +04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 +04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; +04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 +04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; +04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA +04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; +04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC +04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; +04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE +0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; +0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 +0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; +0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502 +0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505; +0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504 +0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507; +0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506 +0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509; +0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508 +050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B; +050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A +050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D; +050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C +050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; +050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E +0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; +0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 +0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; +0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 +0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515; +0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514 +0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517; +0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516 +0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519; +0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518 +051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B; +051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A +051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D; +051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C +051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F; +051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E +0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521; +0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520 +0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523; +0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522 +0524;CYRILLIC CAPITAL LETTER PE WITH DESCENDER;Lu;0;L;;;;;N;;;;0525; +0525;CYRILLIC SMALL LETTER PE WITH DESCENDER;Ll;0;L;;;;;N;;;0524;;0524 +0526;CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER;Lu;0;L;;;;;N;;;;0527; +0527;CYRILLIC SMALL LETTER SHHA WITH DESCENDER;Ll;0;L;;;;;N;;;0526;;0526 +0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; +0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; +0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; +0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; +0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; +0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; +0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; +0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; +0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; +053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; +053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; +053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; +053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; +053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; +053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; +0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; +0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; +0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; +0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; +0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; +0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; +0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; +0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; +0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; +0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; +054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; +054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; +054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; +054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; +054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; +054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; +0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; +0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; +0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; +0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; +0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; +0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; +0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; +0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; +055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; +055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; +055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; +055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; +055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; +055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; +0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 +0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 +0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 +0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 +0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 +0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 +0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 +0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 +0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 +056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A +056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B +056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C +056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D +056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E +056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F +0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 +0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 +0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 +0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 +0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 +0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 +0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 +0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 +0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 +0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 +057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A +057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B +057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C +057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D +057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E +057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F +0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 +0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 +0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 +0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 +0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 +0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 +0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 +0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;; +0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; +058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; +0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; +0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; +0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; +0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; +0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; +0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;;;; +0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; +0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;;;; +0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; +059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; +059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; +059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; +059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; +059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; +059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; +05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; +05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; +05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; +05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; +05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; +05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;;;; +05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; +05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; +05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;;;; +05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; +05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;;;; +05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; +05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; +05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; +05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; +05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; +05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; +05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; +05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; +05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; +05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; +05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; +05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; +05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; +05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; +05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; +05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; +05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; +05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;;;; +05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;;;; +05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;; +05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; +05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;;;; +05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; +05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; +05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;;;; +05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; +05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; +05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; +05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; +05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; +05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; +05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; +05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; +05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; +05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; +05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; +05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; +05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; +05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; +05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; +05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; +05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; +05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; +05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; +05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; +05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; +05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; +05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; +05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; +05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; +05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; +05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; +05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; +05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; +05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; +05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; +05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; +05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; +05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; +0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;; +0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;; +0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;; +0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;; +0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;; +0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;; +0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;; +0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;; +060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; +060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; +060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; +060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; +060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; +060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;; +0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;; +0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;; +0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;; +0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;; +0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; +0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; +0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;; +0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;; +0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;; +0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;; +061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; +061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; +061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; +061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; +0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;; +0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; +0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; +0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; +0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; +0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; +0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; +0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; +0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; +0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; +062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; +062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; +062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; +062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; +062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; +062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; +0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; +0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; +0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; +0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; +0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; +0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; +0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; +0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; +0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; +0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; +063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; +063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; +0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; +0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; +0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; +0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; +0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; +0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; +0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; +0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; +0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; +064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; +064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; +064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; +064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; +064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; +064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; +0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; +0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; +0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; +0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; +0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; +0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; +0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; +0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; +0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; +0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; +065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; +065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; +065F;ARABIC WAVY HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; +0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; +0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; +0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; +0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; +0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; +0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; +0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; +0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; +0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; +0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; +066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; +066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; +066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; +066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; +066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;; +066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;; +0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; +0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; +0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; +0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; +0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; +0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL; 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; +0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL; 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; +0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL; 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; +0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL; 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; +0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; +067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; +067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; +067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; +067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; +067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; +067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; +0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; +0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; +0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; +0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; +0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; +0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; +0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; +0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; +0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; +0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; +068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; +068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; +068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; +068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; +0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; +0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; +0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; +0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; +0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; +0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; +0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; +0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; +0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; +069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; +06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; +06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; +06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; +06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; +06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; +06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; +06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; +06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; +06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; +06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; +06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; +06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;;;; +06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; +06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; +06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; +06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; +06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; +06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; +06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; +06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; +06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; +06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; +06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; +06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; +06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; +06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; +06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; +06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; +06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; +06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; +06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; +06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; +06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; +06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; +06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;;;; +06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; +06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; +06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; +06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; +06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; +06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; +06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; +06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; +06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; +06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; +06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; +06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; +06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;; +06DE;ARABIC START OF RUB EL HIZB;So;0;ON;;;;;N;;;;; +06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; +06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; +06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; +06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; +06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; +06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; +06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; +06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; +06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; +06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; +06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; +06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; +06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; +06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; +06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; +06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; +06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; +06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; +06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; +06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; +06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; +06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; +06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; +06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; +06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; +06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; +06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; +06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; +0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; +0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; +0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; +0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; +0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; +0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; +0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; +0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; +0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; +070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; +070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; +070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; +070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; +070F;SYRIAC ABBREVIATION MARK;Cf;0;AN;;;;;N;;;;; +0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; +0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; +0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; +0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; +0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; +0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; +0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; +0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; +0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; +0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; +071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; +071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; +071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; +071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; +071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; +071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; +0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; +0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; +0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; +0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; +0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; +0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; +0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; +0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; +0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; +0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; +072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; +072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; +072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; +072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;; +072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;; +072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;; +0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; +0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; +0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; +0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; +0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; +0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; +0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; +0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; +0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; +0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; +073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; +073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; +073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; +073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; +073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; +073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; +0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; +0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; +0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; +0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; +0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; +0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; +074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; +074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; +074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; +074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; +0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; +0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; +0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; +075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; +075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; +0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; +076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; +076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; +076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;; +076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; +0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; +0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; +077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;; +077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; +0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; +0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; +0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; +0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; +0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; +0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; +0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; +0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; +0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; +078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; +078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; +078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; +078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; +078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; +078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; +0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; +0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; +0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; +0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; +0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; +0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; +0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; +0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; +0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; +0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; +079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; +079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; +079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; +079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; +079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; +079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; +07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; +07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; +07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; +07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; +07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; +07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; +07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; +07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; +07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; +07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; +07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; +07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; +07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; +07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; +07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; +07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; +07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; +07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; +07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; +07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; +07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; +07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; +07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; +07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; +07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; +07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; +07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; +07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; +07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; +07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; +07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; +07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; +07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; +07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; +07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; +07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; +07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; +07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; +07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; +07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; +07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; +07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; +07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; +07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; +07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; +07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; +07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; +07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; +07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; +07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; +07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; +07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; +07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; +07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; +07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; +07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; +07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; +07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; +07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; +07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; +07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; +07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; +07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; +07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; +07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; +07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; +07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; +07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; +07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; +07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; +07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; +0800;SAMARITAN LETTER ALAF;Lo;0;R;;;;;N;;;;; +0801;SAMARITAN LETTER BIT;Lo;0;R;;;;;N;;;;; +0802;SAMARITAN LETTER GAMAN;Lo;0;R;;;;;N;;;;; +0803;SAMARITAN LETTER DALAT;Lo;0;R;;;;;N;;;;; +0804;SAMARITAN LETTER IY;Lo;0;R;;;;;N;;;;; +0805;SAMARITAN LETTER BAA;Lo;0;R;;;;;N;;;;; +0806;SAMARITAN LETTER ZEN;Lo;0;R;;;;;N;;;;; +0807;SAMARITAN LETTER IT;Lo;0;R;;;;;N;;;;; +0808;SAMARITAN LETTER TIT;Lo;0;R;;;;;N;;;;; +0809;SAMARITAN LETTER YUT;Lo;0;R;;;;;N;;;;; +080A;SAMARITAN LETTER KAAF;Lo;0;R;;;;;N;;;;; +080B;SAMARITAN LETTER LABAT;Lo;0;R;;;;;N;;;;; +080C;SAMARITAN LETTER MIM;Lo;0;R;;;;;N;;;;; +080D;SAMARITAN LETTER NUN;Lo;0;R;;;;;N;;;;; +080E;SAMARITAN LETTER SINGAAT;Lo;0;R;;;;;N;;;;; +080F;SAMARITAN LETTER IN;Lo;0;R;;;;;N;;;;; +0810;SAMARITAN LETTER FI;Lo;0;R;;;;;N;;;;; +0811;SAMARITAN LETTER TSAADIY;Lo;0;R;;;;;N;;;;; +0812;SAMARITAN LETTER QUF;Lo;0;R;;;;;N;;;;; +0813;SAMARITAN LETTER RISH;Lo;0;R;;;;;N;;;;; +0814;SAMARITAN LETTER SHAN;Lo;0;R;;;;;N;;;;; +0815;SAMARITAN LETTER TAAF;Lo;0;R;;;;;N;;;;; +0816;SAMARITAN MARK IN;Mn;230;NSM;;;;;N;;;;; +0817;SAMARITAN MARK IN-ALAF;Mn;230;NSM;;;;;N;;;;; +0818;SAMARITAN MARK OCCLUSION;Mn;230;NSM;;;;;N;;;;; +0819;SAMARITAN MARK DAGESH;Mn;230;NSM;;;;;N;;;;; +081A;SAMARITAN MODIFIER LETTER EPENTHETIC YUT;Lm;0;R;;;;;N;;;;; +081B;SAMARITAN MARK EPENTHETIC YUT;Mn;230;NSM;;;;;N;;;;; +081C;SAMARITAN VOWEL SIGN LONG E;Mn;230;NSM;;;;;N;;;;; +081D;SAMARITAN VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;; +081E;SAMARITAN VOWEL SIGN OVERLONG AA;Mn;230;NSM;;;;;N;;;;; +081F;SAMARITAN VOWEL SIGN LONG AA;Mn;230;NSM;;;;;N;;;;; +0820;SAMARITAN VOWEL SIGN AA;Mn;230;NSM;;;;;N;;;;; +0821;SAMARITAN VOWEL SIGN OVERLONG A;Mn;230;NSM;;;;;N;;;;; +0822;SAMARITAN VOWEL SIGN LONG A;Mn;230;NSM;;;;;N;;;;; +0823;SAMARITAN VOWEL SIGN A;Mn;230;NSM;;;;;N;;;;; +0824;SAMARITAN MODIFIER LETTER SHORT A;Lm;0;R;;;;;N;;;;; +0825;SAMARITAN VOWEL SIGN SHORT A;Mn;230;NSM;;;;;N;;;;; +0826;SAMARITAN VOWEL SIGN LONG U;Mn;230;NSM;;;;;N;;;;; +0827;SAMARITAN VOWEL SIGN U;Mn;230;NSM;;;;;N;;;;; +0828;SAMARITAN MODIFIER LETTER I;Lm;0;R;;;;;N;;;;; +0829;SAMARITAN VOWEL SIGN LONG I;Mn;230;NSM;;;;;N;;;;; +082A;SAMARITAN VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; +082B;SAMARITAN VOWEL SIGN O;Mn;230;NSM;;;;;N;;;;; +082C;SAMARITAN VOWEL SIGN SUKUN;Mn;230;NSM;;;;;N;;;;; +082D;SAMARITAN MARK NEQUDAA;Mn;230;NSM;;;;;N;;;;; +0830;SAMARITAN PUNCTUATION NEQUDAA;Po;0;R;;;;;N;;;;; +0831;SAMARITAN PUNCTUATION AFSAAQ;Po;0;R;;;;;N;;;;; +0832;SAMARITAN PUNCTUATION ANGED;Po;0;R;;;;;N;;;;; +0833;SAMARITAN PUNCTUATION BAU;Po;0;R;;;;;N;;;;; +0834;SAMARITAN PUNCTUATION ATMAAU;Po;0;R;;;;;N;;;;; +0835;SAMARITAN PUNCTUATION SHIYYAALAA;Po;0;R;;;;;N;;;;; +0836;SAMARITAN ABBREVIATION MARK;Po;0;R;;;;;N;;;;; +0837;SAMARITAN PUNCTUATION MELODIC QITSA;Po;0;R;;;;;N;;;;; +0838;SAMARITAN PUNCTUATION ZIQAA;Po;0;R;;;;;N;;;;; +0839;SAMARITAN PUNCTUATION QITSA;Po;0;R;;;;;N;;;;; +083A;SAMARITAN PUNCTUATION ZAEF;Po;0;R;;;;;N;;;;; +083B;SAMARITAN PUNCTUATION TURU;Po;0;R;;;;;N;;;;; +083C;SAMARITAN PUNCTUATION ARKAANU;Po;0;R;;;;;N;;;;; +083D;SAMARITAN PUNCTUATION SOF MASHFAAT;Po;0;R;;;;;N;;;;; +083E;SAMARITAN PUNCTUATION ANNAAU;Po;0;R;;;;;N;;;;; +0840;MANDAIC LETTER HALQA;Lo;0;R;;;;;N;;;;; +0841;MANDAIC LETTER AB;Lo;0;R;;;;;N;;;;; +0842;MANDAIC LETTER AG;Lo;0;R;;;;;N;;;;; +0843;MANDAIC LETTER AD;Lo;0;R;;;;;N;;;;; +0844;MANDAIC LETTER AH;Lo;0;R;;;;;N;;;;; +0845;MANDAIC LETTER USHENNA;Lo;0;R;;;;;N;;;;; +0846;MANDAIC LETTER AZ;Lo;0;R;;;;;N;;;;; +0847;MANDAIC LETTER IT;Lo;0;R;;;;;N;;;;; +0848;MANDAIC LETTER ATT;Lo;0;R;;;;;N;;;;; +0849;MANDAIC LETTER AKSA;Lo;0;R;;;;;N;;;;; +084A;MANDAIC LETTER AK;Lo;0;R;;;;;N;;;;; +084B;MANDAIC LETTER AL;Lo;0;R;;;;;N;;;;; +084C;MANDAIC LETTER AM;Lo;0;R;;;;;N;;;;; +084D;MANDAIC LETTER AN;Lo;0;R;;;;;N;;;;; +084E;MANDAIC LETTER AS;Lo;0;R;;;;;N;;;;; +084F;MANDAIC LETTER IN;Lo;0;R;;;;;N;;;;; +0850;MANDAIC LETTER AP;Lo;0;R;;;;;N;;;;; +0851;MANDAIC LETTER ASZ;Lo;0;R;;;;;N;;;;; +0852;MANDAIC LETTER AQ;Lo;0;R;;;;;N;;;;; +0853;MANDAIC LETTER AR;Lo;0;R;;;;;N;;;;; +0854;MANDAIC LETTER ASH;Lo;0;R;;;;;N;;;;; +0855;MANDAIC LETTER AT;Lo;0;R;;;;;N;;;;; +0856;MANDAIC LETTER DUSHENNA;Lo;0;R;;;;;N;;;;; +0857;MANDAIC LETTER KAD;Lo;0;R;;;;;N;;;;; +0858;MANDAIC LETTER AIN;Lo;0;R;;;;;N;;;;; +0859;MANDAIC AFFRICATION MARK;Mn;220;NSM;;;;;N;;;;; +085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;; +085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;; +085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;; +0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;; +0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; +0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; +0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; +0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; +0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; +090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; +090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; +090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; +090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; +0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; +0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; +0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; +0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; +0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; +0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; +0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; +0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; +0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; +0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; +091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; +091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; +091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; +091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; +091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; +091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; +0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; +0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; +0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; +0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; +0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; +0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; +0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; +0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; +092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; +092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; +092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; +092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; +092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; +092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; +0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; +0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; +0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; +0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; +0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; +0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; +0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; +0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; +0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; +0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; +093A;DEVANAGARI VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; +093B;DEVANAGARI VOWEL SIGN OOE;Mc;0;L;;;;;N;;;;; +093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; +0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; +094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; +094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +094E;DEVANAGARI VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;; +094F;DEVANAGARI VOWEL SIGN AW;Mc;0;L;;;;;N;;;;; +0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; +0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; +0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; +0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +0955;DEVANAGARI VOWEL SIGN CANDRA LONG E;Mn;0;NSM;;;;;N;;;;; +0956;DEVANAGARI VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +0957;DEVANAGARI VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; +0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; +0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; +095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; +095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; +095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; +095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; +095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; +095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; +0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; +0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;; +0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;; +0973;DEVANAGARI LETTER OE;Lo;0;L;;;;;N;;;;; +0974;DEVANAGARI LETTER OOE;Lo;0;L;;;;;N;;;;; +0975;DEVANAGARI LETTER AW;Lo;0;L;;;;;N;;;;; +0976;DEVANAGARI LETTER UE;Lo;0;L;;;;;N;;;;; +0977;DEVANAGARI LETTER UUE;Lo;0;L;;;;;N;;;;; +0979;DEVANAGARI LETTER ZHA;Lo;0;L;;;;;N;;;;; +097A;DEVANAGARI LETTER HEAVY YA;Lo;0;L;;;;;N;;;;; +097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; +097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; +097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; +097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; +0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; +0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; +0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; +0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; +0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; +098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; +098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; +0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; +0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; +0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; +0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; +0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; +0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; +0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; +0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; +099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; +099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; +099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; +099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; +099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; +099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; +09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; +09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; +09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; +09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; +09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; +09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; +09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; +09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; +09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; +09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; +09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; +09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; +09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; +09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; +09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; +09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; +09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; +09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; +09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; +09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; +09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; +09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; +09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; +09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; +09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; +09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; +09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; +09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;;;; +09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;;;; +09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; +09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1/16;N;;;;; +09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;1/8;N;;;;; +09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3/16;N;;;;; +09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;1/4;N;;;;; +09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;3/4;N;;;;; +09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; +09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; +09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;; +0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;; +0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; +0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; +0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; +0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; +0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; +0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; +0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; +0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; +0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; +0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; +0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; +0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; +0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; +0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; +0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; +0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; +0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; +0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; +0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; +0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; +0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; +0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; +0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; +0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; +0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; +0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; +0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; +0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; +0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; +0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; +0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; +0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; +0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; +0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; +0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; +0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; +0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; +0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; +0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; +0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; +0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; +0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; +0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; +0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; +0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;; +0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; +0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; +0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; +0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; +0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; +0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; +0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; +0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; +0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; +0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; +0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;; +0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; +0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; +0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; +0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; +0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; +0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; +0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; +0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; +0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; +0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; +0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; +0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; +0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; +0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; +0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; +0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; +0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; +0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; +0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; +0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; +0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; +0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; +0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; +0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; +0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; +0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; +0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; +0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; +0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; +0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; +0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; +0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; +0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; +0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; +0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; +0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; +0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; +0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; +0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; +0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; +0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; +0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; +0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; +0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; +0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; +0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; +0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; +0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; +0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; +0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; +0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; +0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; +0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; +0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; +0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; +0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; +0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; +0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; +0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; +0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; +0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; +0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; +0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; +0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; +0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; +0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; +0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; +0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; +0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; +0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; +0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; +0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; +0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; +0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; +0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; +0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; +0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; +0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; +0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; +0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; +0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; +0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; +0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; +0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; +0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; +0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;; +0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; +0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; +0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; +0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; +0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; +0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; +0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; +0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; +0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; +0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; +0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; +0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;; +0B72;ORIYA FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; +0B73;ORIYA FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; +0B74;ORIYA FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; +0B75;ORIYA FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; +0B76;ORIYA FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; +0B77;ORIYA FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; +0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;; +0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; +0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; +0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; +0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; +0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; +0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; +0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; +0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; +0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; +0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; +0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; +0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; +0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; +0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; +0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; +0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; +0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; +0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; +0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; +0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; +0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; +0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; +0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; +0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; +0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; +0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; +0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; +0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; +0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; +0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; +0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; +0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; +0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; +0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; +0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; +0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; +0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; +0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; +0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;; +0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; +0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;;;; +0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;;;; +0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;;;; +0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;;;; +0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;;;; +0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;;;; +0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;;;; +0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; +0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; +0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; +0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; +0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; +0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; +0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; +0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; +0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; +0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; +0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; +0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; +0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; +0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; +0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; +0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; +0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; +0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; +0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; +0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; +0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; +0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; +0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; +0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; +0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; +0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; +0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; +0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; +0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; +0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; +0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; +0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; +0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; +0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; +0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; +0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; +0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; +0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; +0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; +0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; +0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; +0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; +0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; +0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; +0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; +0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; +0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; +0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; +0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; +0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; +0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; +0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; +0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; +0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; +0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; +0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;; +0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;; +0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;; +0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;; +0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;; +0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;; +0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;; +0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;; +0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; +0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; +0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; +0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; +0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; +0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; +0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; +0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; +0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; +0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; +0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; +0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; +0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; +0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; +0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; +0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; +0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; +0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; +0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; +0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; +0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; +0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; +0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; +0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; +0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; +0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; +0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; +0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; +0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; +0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; +0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; +0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; +0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; +0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; +0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; +0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; +0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; +0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; +0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; +0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; +0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; +0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; +0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; +0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; +0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; +0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; +0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; +0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;; +0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; +0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;; +0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; +0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; +0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; +0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; +0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; +0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; +0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; +0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; +0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; +0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; +0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; +0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; +0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; +0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; +0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; +0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; +0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; +0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; +0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; +0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; +0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; +0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; +0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; +0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; +0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; +0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; +0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; +0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; +0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; +0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; +0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; +0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; +0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; +0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; +0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; +0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; +0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; +0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; +0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; +0D29;MALAYALAM LETTER NNNA;Lo;0;L;;;;;N;;;;; +0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; +0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; +0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; +0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; +0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; +0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; +0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; +0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; +0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; +0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; +0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; +0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; +0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; +0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; +0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; +0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; +0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;; +0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; +0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; +0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; +0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;; +0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;; +0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; +0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; +0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; +0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;; +0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;; +0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;; +0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;; +0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;; +0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;; +0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;; +0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; +0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; +0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; +0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; +0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; +0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; +0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; +0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; +0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; +0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; +0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; +0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; +0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; +0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; +0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; +0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; +0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; +0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; +0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; +0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; +0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; +0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; +0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; +0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; +0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; +0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; +0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; +0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; +0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; +0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; +0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; +0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; +0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; +0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; +0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; +0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; +0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; +0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; +0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; +0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; +0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; +0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; +0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; +0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; +0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; +0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; +0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; +0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; +0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; +0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; +0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; +0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; +0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; +0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; +0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; +0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; +0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; +0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; +0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; +0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; +0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; +0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; +0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; +0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; +0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; +0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; +0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; +0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; +0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; +0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; +0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; +0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; +0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; +0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; +0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; +0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; +0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; +0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; +0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; +0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; +0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; +0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; +0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; +0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; +0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; +0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; +0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; +0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; +0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; +0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; +0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; +0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; +0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; +0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; +0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; +0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; +0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; +0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; +0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; +0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; +0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; +0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; +0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; +0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; +0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; +0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; +0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; +0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; +0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; +0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; +0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;;;; +0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; +0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; +0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; +0E33;THAI CHARACTER SARA AM;Lo;0;L; 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; +0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; +0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; +0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; +0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;;;; +0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; +0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; +0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; +0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; +0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; +0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; +0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; +0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;;;; +0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;;;; +0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;;;; +0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;;;; +0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;;;; +0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; +0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; +0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; +0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; +0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; +0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;;;; +0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; +0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; +0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; +0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; +0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; +0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; +0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; +0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; +0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; +0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; +0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; +0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; +0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; +0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; +0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; +0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; +0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; +0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; +0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; +0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; +0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; +0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; +0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; +0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; +0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; +0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; +0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; +0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; +0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; +0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; +0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; +0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; +0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; +0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; +0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; +0EB3;LAO VOWEL SIGN AM;Lo;0;L; 0ECD 0EB2;;;;N;;;;; +0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; +0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; +0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; +0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; +0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; +0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; +0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; +0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; +0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; +0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; +0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; +0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; +0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; +0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; +0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; +0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; +0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; +0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; +0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; +0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;; +0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;; +0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; +0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;; +0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;; +0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;;;; +0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;;;; +0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; +0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;;;; +0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;;;; +0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;;;; +0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;;;; +0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;;;; +0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;;;; +0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L; 0F0B;;;;N;;;;; +0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;;;; +0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;;;; +0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;;;; +0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;;;; +0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;; +0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;; +0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;; +0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;;;; +0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;; +0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;; +0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;; +0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;;;; +0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;;;; +0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;;;; +0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;;;; +0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;;;; +0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;;;; +0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;;;; +0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;;;; +0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;; +0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;; +0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;; +0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;; +0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;; +0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;; +0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;; +0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;; +0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;; +0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;; +0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;;;; +0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;;;; +0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;;;; +0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;;;; +0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;;;; +0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;;;; +0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;;;; +0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;;;; +0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;;;; +0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;;;; +0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;;;; +0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;;;; +0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; +0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; +0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; +0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; +0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; +0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; +0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; +0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; +0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; +0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; +0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; +0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; +0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; +0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; +0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; +0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; +0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; +0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; +0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; +0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; +0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; +0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; +0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; +0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; +0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; +0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; +0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; +0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; +0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; +0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; +0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; +0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; +0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; +0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;;;; +0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; +0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; +0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; +0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; +0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; +0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; +0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; +0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;;;; +0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;; +0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;; +0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; +0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; +0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; +0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; +0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; +0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; +0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM; 0FB2 0F81;;;;N;;;;; +0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; +0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM; 0FB3 0F81;;;;N;;;;; +0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; +0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; +0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; +0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; +0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;;;; +0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;;;; +0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; +0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; +0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;;;; +0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;;;; +0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; +0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; +0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;;;; +0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;;;; +0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;;;; +0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;;;; +0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;;;; +0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;;;; +0F8C;TIBETAN SIGN INVERTED MCHU CAN;Lo;0;L;;;;;N;;;;; +0F8D;TIBETAN SUBJOINED SIGN LCE TSA CAN;Mn;0;NSM;;;;;N;;;;; +0F8E;TIBETAN SUBJOINED SIGN MCHU CAN;Mn;0;NSM;;;;;N;;;;; +0F8F;TIBETAN SUBJOINED SIGN INVERTED MCHU CAN;Mn;0;NSM;;;;;N;;;;; +0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; +0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; +0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; +0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; +0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; +0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; +0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; +0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; +0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; +0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; +0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; +0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; +0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; +0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; +0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; +0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; +0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; +0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; +0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; +0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; +0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; +0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; +0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; +0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; +0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; +0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; +0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; +0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; +0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;; +0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; +0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; +0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; +0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;;;; +0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;; +0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; +0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; +0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; +0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; +0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; +0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; +0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; +0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;;;; +0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;;;; +0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;;;; +0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;;;; +0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;;;; +0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; +0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; +0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;;;; +0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;;;; +0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;;;; +0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;;;; +0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;;;; +0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;;;; +0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;;;; +0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;;;; +0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;;;; +0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;;;; +0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;;;; +0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;;;; +0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;; +0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;;;; +0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;;;; +0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;;;; +0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;;;; +0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;;;; +0FD5;RIGHT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; +0FD6;LEFT-FACING SVASTI SIGN;So;0;L;;;;;N;;;;; +0FD7;RIGHT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; +0FD8;LEFT-FACING SVASTI SIGN WITH DOTS;So;0;L;;;;;N;;;;; +0FD9;TIBETAN MARK LEADING MCHAN RTAGS;Po;0;L;;;;;N;;;;; +0FDA;TIBETAN MARK TRAILING MCHAN RTAGS;Po;0;L;;;;;N;;;;; +1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; +1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; +1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; +1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; +1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; +1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; +1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; +1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; +1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; +1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; +100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; +100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; +100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; +100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; +100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; +100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; +1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; +1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; +1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; +1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; +1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; +1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; +1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; +1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; +1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; +1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; +101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; +101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; +101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; +101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; +101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; +101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; +1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; +1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; +1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;; +1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; +1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; +1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; +1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; +1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; +1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;; +1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; +102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; +102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; +102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;; +1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;; +1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;; +1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; +1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; +1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;; +103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; +103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; +103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; +103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;; +103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;; +1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; +104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; +104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; +104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; +104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; +104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; +1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; +1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; +1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;; +105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;; +105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;; +105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;; +105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;; +105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;; +1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;; +1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;; +1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;; +1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;; +1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;; +1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;; +1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;; +1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;; +1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;; +1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;; +106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;; +106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;; +106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;; +106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;; +106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;; +106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;; +1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;; +1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;; +1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;; +1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;; +1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;; +1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;; +1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;; +1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;; +1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;; +1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;; +107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;; +107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;; +107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;; +107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;; +107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;; +107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;; +1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;; +1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;; +1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; +1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;; +1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;; +1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;; +1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;; +1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;; +1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;; +1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;; +108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;; +108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;; +108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;; +108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;; +108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;; +108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;; +1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +109A;MYANMAR SIGN KHAMTI TONE-1;Mc;0;L;;;;;N;;;;; +109B;MYANMAR SIGN KHAMTI TONE-3;Mc;0;L;;;;;N;;;;; +109C;MYANMAR VOWEL SIGN AITON A;Mc;0;L;;;;;N;;;;; +109D;MYANMAR VOWEL SIGN AITON AI;Mn;0;NSM;;;;;N;;;;; +109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;; +109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;; +10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00; +10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;2D01; +10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;2D02; +10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;;;2D03; +10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;2D04; +10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;;;2D05; +10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;;;2D06; +10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;;;2D07; +10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;;;2D08; +10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;;;2D09; +10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;;;2D0A; +10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;;;2D0B; +10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;;;2D0C; +10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;;;2D0D; +10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;;;2D0E; +10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;;;2D0F; +10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;;;2D10; +10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;2D11; +10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;;;2D12; +10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;;;2D13; +10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;;;2D14; +10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;;;2D15; +10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;;;2D16; +10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;;;2D17; +10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;;;2D18; +10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;;;2D19; +10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;;;2D1A; +10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;;;2D1B; +10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;;;2D1C; +10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;;;2D1D; +10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;;;2D1E; +10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;;;2D1F; +10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;;;2D20; +10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;;;2D21; +10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;;;2D22; +10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23; +10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24; +10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25; +10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; +10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; +10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; +10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;; +10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;; +10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;; +10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;; +10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; +10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;; +10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;; +10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;; +10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;; +10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;; +10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;; +10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;; +10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;; +10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;; +10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;; +10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;; +10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;; +10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;; +10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;; +10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;; +10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;; +10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;; +10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;; +10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;; +10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;; +10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;; +10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;; +10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;; +10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;; +10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;; +10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;; +10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;; +10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;; +10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;; +10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;; +10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; +10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;; +10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;; +10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;; +10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;; +10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L; 10DC;;;;N;;;;; +1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;; +1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; +1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;; +1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;;;; +1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; +1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;;;; +1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;;;; +1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;;;; +1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; +1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;;;; +110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; +110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; +110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;;;; +110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; +110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; +110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; +1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;;;; +1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; +1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;;;; +1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; +1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; +1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; +1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; +1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; +1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; +1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; +111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; +111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; +111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; +111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; +111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; +111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; +1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; +1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; +1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; +1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; +1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; +1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; +112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; +112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; +112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; +112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; +1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; +1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; +1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; +1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; +1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; +1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; +1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; +1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; +113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; +113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; +113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; +113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; +113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; +113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; +1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; +1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; +1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; +1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; +1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; +1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; +1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; +1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; +1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; +1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; +114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; +114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; +114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; +114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; +114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; +114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; +1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; +1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; +1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; +1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; +1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; +1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; +1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; +1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; +1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; +1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; +115A;HANGUL CHOSEONG KIYEOK-TIKEUT;Lo;0;L;;;;;N;;;;; +115B;HANGUL CHOSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; +115C;HANGUL CHOSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; +115D;HANGUL CHOSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; +115E;HANGUL CHOSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; +115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; +1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; +1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; +1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; +1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; +1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; +1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; +1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; +1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; +1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; +1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; +116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; +116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; +116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; +116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; +116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; +116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; +1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; +1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; +1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; +1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; +1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; +1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; +1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; +1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; +1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; +1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; +117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; +117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; +117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; +117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; +117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; +117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; +1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; +1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; +1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; +1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; +1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; +1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; +1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; +1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; +1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; +1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; +118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; +118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; +118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; +118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; +118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; +118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; +1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; +1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; +1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; +1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; +1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; +1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; +1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; +1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; +1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; +1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; +119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; +119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; +119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; +119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; +119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; +119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; +11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; +11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; +11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; +11A3;HANGUL JUNGSEONG A-EU;Lo;0;L;;;;;N;;;;; +11A4;HANGUL JUNGSEONG YA-U;Lo;0;L;;;;;N;;;;; +11A5;HANGUL JUNGSEONG YEO-YA;Lo;0;L;;;;;N;;;;; +11A6;HANGUL JUNGSEONG O-YA;Lo;0;L;;;;;N;;;;; +11A7;HANGUL JUNGSEONG O-YAE;Lo;0;L;;;;;N;;;;; +11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;;;; +11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;; +11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; +11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;;;; +11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;;;; +11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;;;; +11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;;;; +11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;;;; +11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; +11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; +11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; +11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; +11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;;;; +11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; +11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; +11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;;;; +11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;;;; +11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;;;; +11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;;;; +11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;;;; +11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;;;; +11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;;;; +11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;;;; +11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;;;; +11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;;;; +11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;;;; +11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; +11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; +11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; +11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; +11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; +11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; +11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; +11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; +11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; +11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; +11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; +11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; +11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; +11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; +11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; +11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; +11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; +11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; +11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; +11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; +11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; +11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; +11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; +11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; +11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; +11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; +11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; +11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; +11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; +11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; +11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; +11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; +11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; +11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; +11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; +11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; +11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; +11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; +11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; +11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; +11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; +11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; +11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; +11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; +11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; +11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; +11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; +11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; +11FA;HANGUL JONGSEONG KIYEOK-NIEUN;Lo;0;L;;;;;N;;;;; +11FB;HANGUL JONGSEONG KIYEOK-PIEUP;Lo;0;L;;;;;N;;;;; +11FC;HANGUL JONGSEONG KIYEOK-CHIEUCH;Lo;0;L;;;;;N;;;;; +11FD;HANGUL JONGSEONG KIYEOK-KHIEUKH;Lo;0;L;;;;;N;;;;; +11FE;HANGUL JONGSEONG KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; +11FF;HANGUL JONGSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; +1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; +1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; +1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; +1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; +1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; +1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; +1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; +1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; +1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; +1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; +120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; +120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; +120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; +120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; +120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; +120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; +1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; +1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; +1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; +1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; +1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; +1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; +1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; +1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; +1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; +1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; +121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; +121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; +121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; +121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; +121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; +121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; +1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; +1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; +1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; +1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; +1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; +1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; +1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; +1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; +1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; +1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; +122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; +122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; +122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; +122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; +122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; +122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; +1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; +1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; +1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; +1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; +1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; +1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; +1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; +1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; +1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; +123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; +123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; +123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; +1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; +1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; +1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; +1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; +1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; +1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; +1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; +1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; +1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; +124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; +124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; +124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; +124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; +1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; +1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; +1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; +1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; +1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; +1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; +1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; +1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; +125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; +125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; +125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; +125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; +1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; +1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; +1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; +1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; +1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; +1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; +1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; +1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; +1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; +1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; +126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; +126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; +126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; +126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; +126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; +126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; +1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; +1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; +1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; +1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; +1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; +1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; +1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; +1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; +1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; +1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; +127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; +127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; +127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; +127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; +127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; +127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; +1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; +1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; +1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; +1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; +1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; +1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; +1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; +1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; +1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; +128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; +128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; +128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; +128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; +1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; +1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; +1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; +1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; +1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; +1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; +1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; +1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; +1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; +1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; +129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; +129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; +129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; +12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; +12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; +12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; +12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; +12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; +12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; +12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; +12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; +12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; +12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; +12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; +12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; +12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; +12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; +12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; +12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; +12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; +12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; +12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; +12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; +12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; +12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; +12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; +12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; +12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; +12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; +12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; +12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; +12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; +12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; +12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; +12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; +12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; +12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; +12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; +12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; +12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; +12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; +12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; +12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; +12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; +12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; +12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; +12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; +12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; +12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; +12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; +12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; +12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; +12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; +12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; +12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; +12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; +12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; +12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; +12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; +12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; +12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; +12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; +12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; +12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; +12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; +12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; +12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; +12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; +12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; +12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; +12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; +12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; +12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; +12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; +12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; +12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; +12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; +12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; +12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; +12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; +12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; +12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; +1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; +1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; +1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; +1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; +1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; +1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; +1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; +1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; +1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; +1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; +130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; +130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; +130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; +130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; +130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; +130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; +1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; +1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; +1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; +1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; +1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; +1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; +1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; +131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; +131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; +131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; +131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; +131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; +1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; +1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; +1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; +1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; +1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; +1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; +1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; +1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; +1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; +1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; +132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; +132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; +132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; +132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; +132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; +132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; +1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; +1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; +1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; +1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; +1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; +1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; +1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; +1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; +1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; +1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; +133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; +133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; +133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; +133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; +133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; +133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; +1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; +1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; +1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; +1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; +1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; +1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; +1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; +1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; +1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; +1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; +134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; +134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; +134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; +134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; +134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; +134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; +1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; +1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; +1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; +1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; +1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; +1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; +1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; +1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; +1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; +1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; +135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; +135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; +135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;; +135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; +1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;; +1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; +1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; +1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; +1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; +1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; +1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; +1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; +1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; +136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; +136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; +136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; +136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; +136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; +136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; +1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; +1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; +1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; +1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; +1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; +1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; +1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; +1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; +1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; +1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; +137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; +137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; +137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; +1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; +1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; +1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; +1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; +1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; +1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; +1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; +1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; +1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; +138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; +138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; +138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; +138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; +138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; +138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; +1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; +1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; +1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; +1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; +1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; +1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; +1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; +1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; +1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; +1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; +13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;; +13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; +13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; +13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;; +13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;; +13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;; +13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;; +13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;; +13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;; +13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;; +13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;; +13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;; +13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;; +13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;; +13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;; +13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;; +13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;; +13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;; +13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;; +13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;; +13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;; +13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;; +13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;; +13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;; +13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;; +13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;; +13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;; +13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;; +13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;; +13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;; +13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;; +13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;; +13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;; +13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;; +13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;; +13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;; +13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;; +13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;; +13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;; +13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;; +13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;; +13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;; +13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;; +13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;; +13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;; +13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;; +13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;; +13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;; +13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;; +13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;; +13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;; +13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;; +13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;; +13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;; +13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;; +13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;; +13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;; +13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;; +13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;; +13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;; +13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;; +13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;; +13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;; +13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;; +13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;; +13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;; +13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;; +13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;; +13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;; +13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;; +13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;; +13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;; +13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;; +13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;; +13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;; +13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;; +13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;; +13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;; +13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;; +13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;; +13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;; +13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;; +13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;; +13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;; +13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;; +1400;CANADIAN SYLLABICS HYPHEN;Pd;0;ON;;;;;N;;;;; +1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; +1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; +1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; +1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; +1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; +1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; +1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; +1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; +1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; +140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; +140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; +140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; +140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; +140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; +140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; +1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; +1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; +1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; +1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; +1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; +1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; +1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; +1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; +1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; +1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; +141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; +141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; +141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; +141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; +141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; +1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; +1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; +1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; +1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; +1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; +1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; +1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; +1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; +1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; +1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; +142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; +142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; +142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; +142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; +142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; +142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; +1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; +1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; +1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; +1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; +1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; +1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; +1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; +1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; +1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; +1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; +143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; +143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; +143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; +143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; +143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; +143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; +1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; +1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; +1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; +1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; +1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; +1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; +1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; +1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; +1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; +1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; +144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; +144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; +144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; +144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; +144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; +144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; +1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; +1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; +1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; +1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; +1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; +1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; +1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; +1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; +1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; +1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; +145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; +145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; +145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; +145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; +145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; +145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; +1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; +1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; +1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; +1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; +1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; +1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; +1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; +1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; +1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; +1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; +146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; +146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; +146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; +146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; +146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; +146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; +1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; +1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; +1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; +1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; +1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; +1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; +1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; +1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; +1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; +1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; +147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; +147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; +147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; +147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; +147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; +147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; +1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; +1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; +1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; +1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; +1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; +1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; +1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; +1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; +1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; +1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; +148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; +148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; +148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; +148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; +148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; +148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; +1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; +1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; +1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; +1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; +1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; +1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; +1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; +1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; +1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; +1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; +149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; +149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; +149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; +149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; +149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; +149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; +14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; +14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; +14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; +14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; +14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; +14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; +14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; +14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; +14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; +14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; +14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; +14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; +14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; +14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; +14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; +14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; +14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; +14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; +14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; +14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; +14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; +14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; +14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; +14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; +14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; +14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; +14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; +14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; +14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; +14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; +14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; +14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; +14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; +14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; +14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; +14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; +14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; +14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; +14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; +14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; +14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; +14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; +14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; +14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; +14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; +14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; +14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; +14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; +14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; +14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; +14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; +14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; +14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; +14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; +14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; +14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; +14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; +14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; +14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; +14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; +14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; +14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; +14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; +14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; +14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; +14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; +14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; +14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; +14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; +14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; +14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; +14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; +14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; +14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; +14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; +14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; +14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; +14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; +14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; +14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; +14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; +14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; +14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; +14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; +14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; +14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; +14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; +14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; +14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; +14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; +14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; +14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; +14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; +14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; +14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; +14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; +1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; +1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; +1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; +1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; +1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; +1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; +1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; +1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; +1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; +1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; +150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; +150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; +150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; +150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; +150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; +150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; +1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; +1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; +1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; +1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; +1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; +1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; +1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; +1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; +1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; +1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; +151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; +151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; +151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; +151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; +151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; +151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; +1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; +1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; +1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; +1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; +1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; +1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; +1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; +1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; +1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; +1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; +152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; +152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; +152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; +152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; +152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; +152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; +1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; +1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; +1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; +1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; +1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; +1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; +1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; +1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; +1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; +1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; +153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; +153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; +153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; +153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; +153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; +153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; +1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; +1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; +1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; +1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; +1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; +1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; +1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; +1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; +1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; +1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; +154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; +154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; +154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; +154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; +154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; +154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; +1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; +1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; +1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; +1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; +1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; +1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; +1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; +1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; +1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; +1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; +155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; +155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; +155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; +155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; +155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; +155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; +1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; +1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; +1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; +1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; +1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; +1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; +1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; +1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; +1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; +1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; +156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; +156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; +156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; +156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; +156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; +156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; +1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; +1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; +1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; +1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; +1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; +1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; +1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; +1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; +1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; +1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; +157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; +157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; +157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; +157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; +157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; +157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; +1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; +1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; +1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; +1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; +1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; +1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; +1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; +1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; +1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; +1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; +158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; +158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; +158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; +158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; +158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; +158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; +1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; +1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; +1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; +1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; +1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; +1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; +1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; +1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; +1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; +1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; +159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; +159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; +159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; +159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; +159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; +159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; +15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; +15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; +15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; +15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; +15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; +15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; +15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; +15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; +15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; +15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; +15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; +15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; +15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; +15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; +15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; +15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; +15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; +15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; +15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; +15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; +15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; +15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; +15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; +15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; +15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; +15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; +15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; +15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; +15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; +15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; +15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; +15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; +15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; +15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; +15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; +15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; +15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; +15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; +15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; +15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; +15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; +15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; +15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; +15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; +15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; +15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; +15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; +15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; +15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; +15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; +15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; +15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; +15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; +15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; +15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; +15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; +15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; +15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; +15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; +15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; +15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; +15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; +15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; +15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; +15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; +15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; +15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; +15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; +15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; +15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; +15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; +15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; +15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; +15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; +15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; +15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; +15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; +15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; +15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; +15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; +15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; +15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; +15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; +15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; +15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; +15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; +15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; +15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; +15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; +15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; +15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; +15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; +15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; +15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; +15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; +15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; +1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; +1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; +1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; +1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; +1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; +1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; +1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; +1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; +1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; +1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; +160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; +160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; +160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; +160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; +160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; +160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; +1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; +1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; +1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; +1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; +1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; +1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; +1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; +1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; +1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; +1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; +161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; +161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; +161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; +161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; +161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; +161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; +1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; +1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; +1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; +1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; +1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; +1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; +1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; +1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; +1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; +1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; +162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; +162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; +162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; +162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; +162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; +162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; +1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; +1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; +1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; +1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; +1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; +1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; +1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; +1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; +1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; +1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; +163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; +163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; +163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; +163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; +163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; +163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; +1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; +1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; +1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; +1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; +1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; +1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; +1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; +1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; +1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; +1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; +164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; +164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; +164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; +164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; +164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; +164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; +1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; +1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; +1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; +1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; +1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; +1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; +1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; +1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; +1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; +1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; +165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; +165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; +165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; +165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; +165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; +165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; +1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; +1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; +1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; +1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; +1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; +1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; +1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; +1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; +1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; +1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; +166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; +166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; +166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; +166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;; +166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; +166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; +1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; +1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; +1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; +1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; +1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; +1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; +1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; +1677;CANADIAN SYLLABICS WOODS-CREE THWEE;Lo;0;L;;;;;N;;;;; +1678;CANADIAN SYLLABICS WOODS-CREE THWI;Lo;0;L;;;;;N;;;;; +1679;CANADIAN SYLLABICS WOODS-CREE THWII;Lo;0;L;;;;;N;;;;; +167A;CANADIAN SYLLABICS WOODS-CREE THWO;Lo;0;L;;;;;N;;;;; +167B;CANADIAN SYLLABICS WOODS-CREE THWOO;Lo;0;L;;;;;N;;;;; +167C;CANADIAN SYLLABICS WOODS-CREE THWA;Lo;0;L;;;;;N;;;;; +167D;CANADIAN SYLLABICS WOODS-CREE THWAA;Lo;0;L;;;;;N;;;;; +167E;CANADIAN SYLLABICS WOODS-CREE FINAL TH;Lo;0;L;;;;;N;;;;; +167F;CANADIAN SYLLABICS BLACKFOOT W;Lo;0;L;;;;;N;;;;; +1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; +1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; +1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; +1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; +1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; +1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; +1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; +1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; +1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; +1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; +168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; +168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; +168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; +168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; +168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; +168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; +1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; +1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; +1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; +1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; +1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; +1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; +1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; +1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; +1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; +1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; +169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; +169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; +169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; +16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; +16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; +16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; +16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; +16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; +16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; +16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; +16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; +16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; +16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; +16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; +16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; +16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; +16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; +16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; +16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; +16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; +16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; +16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; +16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; +16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; +16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; +16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; +16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; +16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; +16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; +16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; +16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; +16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; +16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; +16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; +16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; +16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; +16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; +16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; +16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; +16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; +16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; +16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; +16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; +16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; +16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; +16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; +16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; +16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; +16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; +16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; +16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; +16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; +16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; +16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; +16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; +16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; +16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; +16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; +16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; +16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; +16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; +16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; +16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; +16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; +16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; +16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; +16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; +16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; +16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; +16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; +16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; +16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; +16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; +16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; +16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; +16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; +16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; +16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; +16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; +16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; +16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; +16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;;;; +16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;;;; +16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;;;; +1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;; +1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;; +1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;; +1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;; +1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;; +1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;; +1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;; +1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;; +1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;; +1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;; +170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; +170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; +170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; +170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; +170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; +1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; +1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;; +1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; +1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; +1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; +1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;; +1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;; +1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;; +1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;; +1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;; +1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;; +1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;; +172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;; +172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;; +172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;; +172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;; +172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;; +172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;; +1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;; +1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; +1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;; +1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; +1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; +1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; +1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;; +1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;; +1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;; +1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;; +1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;; +1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;; +1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;; +1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;; +1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;; +174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;; +174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;; +174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;; +174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;; +174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;; +174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;; +1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;; +1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;; +1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;; +1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;; +1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;; +1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;; +1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;; +1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;; +1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;; +1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;; +1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;; +1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;; +176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;; +176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;; +176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;; +176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;; +176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;; +1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;; +1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; +1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; +1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; +1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; +1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; +1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; +1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; +1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; +1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; +1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; +178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; +178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; +178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; +178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; +178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; +178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; +1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; +1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; +1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; +1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; +1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; +1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; +1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; +1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; +1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; +1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; +179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; +179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; +179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; +179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; +179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; +179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; +17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; +17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; +17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; +17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;; +17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;; +17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; +17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; +17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; +17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; +17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; +17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; +17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; +17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; +17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; +17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; +17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; +17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; +17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; +17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; +17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; +17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;;;; +17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;;;; +17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; +17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; +17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; +17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; +17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; +17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; +17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; +17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; +17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; +17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; +17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; +17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; +17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; +17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; +17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; +17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; +17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; +17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; +17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; +17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;; +17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; +17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; +17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; +17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;; +17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;; +17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; +17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; +17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; +17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;; +17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;; +17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;; +17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;; +17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;; +17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;; +17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;; +17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;; +17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;; +17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;; +17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;; +17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;; +1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; +1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; +1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; +1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; +1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; +1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; +1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; +1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; +1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; +1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; +180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; +180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;; +180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; +180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; +180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;; +1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; +1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; +1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; +1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; +1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; +1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; +1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; +1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; +1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; +1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; +182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; +182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; +182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; +182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; +182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; +182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; +1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; +1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; +1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; +1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; +1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; +1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; +1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; +1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; +1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; +1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; +183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; +183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; +183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; +183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; +183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; +183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; +1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; +1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; +1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; +1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; +1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; +1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; +1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; +1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; +1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; +1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; +184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; +184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; +184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; +184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; +184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; +184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; +1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; +1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; +1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; +1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; +1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; +1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; +1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; +1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; +1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; +1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; +185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; +185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; +185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; +185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; +185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; +185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; +1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; +1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; +1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; +1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; +1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; +1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; +1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; +1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; +1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; +1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; +186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; +186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; +186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; +186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; +186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; +186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; +1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; +1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; +1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; +1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; +1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; +1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; +1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; +1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; +1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; +1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; +1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; +1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; +1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; +1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;; +1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;; +1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; +1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; +1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; +188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; +188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; +188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; +188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; +188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; +188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; +1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; +1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; +1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; +1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; +1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; +1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; +1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; +1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; +1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; +189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; +189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; +189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; +189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; +189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; +18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; +18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; +18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; +18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; +18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; +18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; +18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; +18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; +18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; +18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;; +18B0;CANADIAN SYLLABICS OY;Lo;0;L;;;;;N;;;;; +18B1;CANADIAN SYLLABICS AY;Lo;0;L;;;;;N;;;;; +18B2;CANADIAN SYLLABICS AAY;Lo;0;L;;;;;N;;;;; +18B3;CANADIAN SYLLABICS WAY;Lo;0;L;;;;;N;;;;; +18B4;CANADIAN SYLLABICS POY;Lo;0;L;;;;;N;;;;; +18B5;CANADIAN SYLLABICS PAY;Lo;0;L;;;;;N;;;;; +18B6;CANADIAN SYLLABICS PWOY;Lo;0;L;;;;;N;;;;; +18B7;CANADIAN SYLLABICS TAY;Lo;0;L;;;;;N;;;;; +18B8;CANADIAN SYLLABICS KAY;Lo;0;L;;;;;N;;;;; +18B9;CANADIAN SYLLABICS KWAY;Lo;0;L;;;;;N;;;;; +18BA;CANADIAN SYLLABICS MAY;Lo;0;L;;;;;N;;;;; +18BB;CANADIAN SYLLABICS NOY;Lo;0;L;;;;;N;;;;; +18BC;CANADIAN SYLLABICS NAY;Lo;0;L;;;;;N;;;;; +18BD;CANADIAN SYLLABICS LAY;Lo;0;L;;;;;N;;;;; +18BE;CANADIAN SYLLABICS SOY;Lo;0;L;;;;;N;;;;; +18BF;CANADIAN SYLLABICS SAY;Lo;0;L;;;;;N;;;;; +18C0;CANADIAN SYLLABICS SHOY;Lo;0;L;;;;;N;;;;; +18C1;CANADIAN SYLLABICS SHAY;Lo;0;L;;;;;N;;;;; +18C2;CANADIAN SYLLABICS SHWOY;Lo;0;L;;;;;N;;;;; +18C3;CANADIAN SYLLABICS YOY;Lo;0;L;;;;;N;;;;; +18C4;CANADIAN SYLLABICS YAY;Lo;0;L;;;;;N;;;;; +18C5;CANADIAN SYLLABICS RAY;Lo;0;L;;;;;N;;;;; +18C6;CANADIAN SYLLABICS NWI;Lo;0;L;;;;;N;;;;; +18C7;CANADIAN SYLLABICS OJIBWAY NWI;Lo;0;L;;;;;N;;;;; +18C8;CANADIAN SYLLABICS NWII;Lo;0;L;;;;;N;;;;; +18C9;CANADIAN SYLLABICS OJIBWAY NWII;Lo;0;L;;;;;N;;;;; +18CA;CANADIAN SYLLABICS NWO;Lo;0;L;;;;;N;;;;; +18CB;CANADIAN SYLLABICS OJIBWAY NWO;Lo;0;L;;;;;N;;;;; +18CC;CANADIAN SYLLABICS NWOO;Lo;0;L;;;;;N;;;;; +18CD;CANADIAN SYLLABICS OJIBWAY NWOO;Lo;0;L;;;;;N;;;;; +18CE;CANADIAN SYLLABICS RWEE;Lo;0;L;;;;;N;;;;; +18CF;CANADIAN SYLLABICS RWI;Lo;0;L;;;;;N;;;;; +18D0;CANADIAN SYLLABICS RWII;Lo;0;L;;;;;N;;;;; +18D1;CANADIAN SYLLABICS RWO;Lo;0;L;;;;;N;;;;; +18D2;CANADIAN SYLLABICS RWOO;Lo;0;L;;;;;N;;;;; +18D3;CANADIAN SYLLABICS RWA;Lo;0;L;;;;;N;;;;; +18D4;CANADIAN SYLLABICS OJIBWAY P;Lo;0;L;;;;;N;;;;; +18D5;CANADIAN SYLLABICS OJIBWAY T;Lo;0;L;;;;;N;;;;; +18D6;CANADIAN SYLLABICS OJIBWAY K;Lo;0;L;;;;;N;;;;; +18D7;CANADIAN SYLLABICS OJIBWAY C;Lo;0;L;;;;;N;;;;; +18D8;CANADIAN SYLLABICS OJIBWAY M;Lo;0;L;;;;;N;;;;; +18D9;CANADIAN SYLLABICS OJIBWAY N;Lo;0;L;;;;;N;;;;; +18DA;CANADIAN SYLLABICS OJIBWAY S;Lo;0;L;;;;;N;;;;; +18DB;CANADIAN SYLLABICS OJIBWAY SH;Lo;0;L;;;;;N;;;;; +18DC;CANADIAN SYLLABICS EASTERN W;Lo;0;L;;;;;N;;;;; +18DD;CANADIAN SYLLABICS WESTERN W;Lo;0;L;;;;;N;;;;; +18DE;CANADIAN SYLLABICS FINAL SMALL RING;Lo;0;L;;;;;N;;;;; +18DF;CANADIAN SYLLABICS FINAL RAISED DOT;Lo;0;L;;;;;N;;;;; +18E0;CANADIAN SYLLABICS R-CREE RWE;Lo;0;L;;;;;N;;;;; +18E1;CANADIAN SYLLABICS WEST-CREE LOO;Lo;0;L;;;;;N;;;;; +18E2;CANADIAN SYLLABICS WEST-CREE LAA;Lo;0;L;;;;;N;;;;; +18E3;CANADIAN SYLLABICS THWE;Lo;0;L;;;;;N;;;;; +18E4;CANADIAN SYLLABICS THWA;Lo;0;L;;;;;N;;;;; +18E5;CANADIAN SYLLABICS TTHWE;Lo;0;L;;;;;N;;;;; +18E6;CANADIAN SYLLABICS TTHOO;Lo;0;L;;;;;N;;;;; +18E7;CANADIAN SYLLABICS TTHAA;Lo;0;L;;;;;N;;;;; +18E8;CANADIAN SYLLABICS TLHWE;Lo;0;L;;;;;N;;;;; +18E9;CANADIAN SYLLABICS TLHOO;Lo;0;L;;;;;N;;;;; +18EA;CANADIAN SYLLABICS SAYISI SHWE;Lo;0;L;;;;;N;;;;; +18EB;CANADIAN SYLLABICS SAYISI SHOO;Lo;0;L;;;;;N;;;;; +18EC;CANADIAN SYLLABICS SAYISI HOO;Lo;0;L;;;;;N;;;;; +18ED;CANADIAN SYLLABICS CARRIER GWU;Lo;0;L;;;;;N;;;;; +18EE;CANADIAN SYLLABICS CARRIER DENE GEE;Lo;0;L;;;;;N;;;;; +18EF;CANADIAN SYLLABICS CARRIER GAA;Lo;0;L;;;;;N;;;;; +18F0;CANADIAN SYLLABICS CARRIER GWA;Lo;0;L;;;;;N;;;;; +18F1;CANADIAN SYLLABICS SAYISI JUU;Lo;0;L;;;;;N;;;;; +18F2;CANADIAN SYLLABICS CARRIER JWA;Lo;0;L;;;;;N;;;;; +18F3;CANADIAN SYLLABICS BEAVER DENE L;Lo;0;L;;;;;N;;;;; +18F4;CANADIAN SYLLABICS BEAVER DENE R;Lo;0;L;;;;;N;;;;; +18F5;CANADIAN SYLLABICS CARRIER DENTAL S;Lo;0;L;;;;;N;;;;; +1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;; +1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;; +1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;; +1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;; +1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;; +1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;; +1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;; +1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;; +1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;; +1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;; +190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;; +190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;; +190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;; +190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;; +190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;; +190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;; +1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;; +1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;; +1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;; +1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;; +1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;; +1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;; +1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;; +1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;; +1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;; +1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;; +191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;; +191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;; +191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;; +1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; +1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; +192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; +192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;; +1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;; +1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;; +1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;; +1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;; +1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;; +1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;; +1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;; +1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;; +1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;; +193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;; +193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;; +1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;; +1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;; +1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;; +1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;; +1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;; +1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;; +1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;; +1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;; +1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;; +1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;; +1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;; +1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;; +195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;; +195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;; +195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;; +195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;; +195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;; +195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;; +1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;; +1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;; +1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;; +1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;; +1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;; +1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;; +1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;; +1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;; +1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;; +1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;; +196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;; +196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;; +196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;; +196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;; +1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;; +1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;; +1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; +1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; +1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; +1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; +1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; +1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; +1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; +1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; +1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; +1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; +1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; +1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; +1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; +198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; +198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; +198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; +198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; +198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; +198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; +1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; +1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; +1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; +1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; +1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; +1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; +1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; +1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; +1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; +1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; +199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; +199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; +199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; +199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; +199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; +199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; +19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; +19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; +19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; +19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; +19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; +19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; +19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; +19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; +19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; +19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; +19AA;NEW TAI LUE LETTER HIGH SUA;Lo;0;L;;;;;N;;;;; +19AB;NEW TAI LUE LETTER LOW SUA;Lo;0;L;;;;;N;;;;; +19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;; +19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;; +19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;; +19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;; +19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;; +19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;; +19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; +19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;; +19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;; +19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;; +19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; +19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; +19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; +19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; +19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; +19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; +19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;; +19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;; +19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +19DA;NEW TAI LUE THAM DIGIT ONE;No;0;L;;;1;1;N;;;;; +19DE;NEW TAI LUE SIGN LAE;So;0;ON;;;;;N;;;;; +19DF;NEW TAI LUE SIGN LAEV;So;0;ON;;;;;N;;;;; +19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; +19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; +19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; +19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;; +19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;; +19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;; +19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;; +19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;; +19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;; +19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;; +19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;; +19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;; +19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;; +19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;; +19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;; +19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;; +19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;; +19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;; +19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;; +19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;; +19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;; +19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;; +19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;; +19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;; +19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;; +19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;; +19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;; +19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;; +19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;; +19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; +19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; +19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; +1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; +1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; +1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; +1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; +1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; +1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; +1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; +1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; +1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; +1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; +1A20;TAI THAM LETTER HIGH KA;Lo;0;L;;;;;N;;;;; +1A21;TAI THAM LETTER HIGH KHA;Lo;0;L;;;;;N;;;;; +1A22;TAI THAM LETTER HIGH KXA;Lo;0;L;;;;;N;;;;; +1A23;TAI THAM LETTER LOW KA;Lo;0;L;;;;;N;;;;; +1A24;TAI THAM LETTER LOW KXA;Lo;0;L;;;;;N;;;;; +1A25;TAI THAM LETTER LOW KHA;Lo;0;L;;;;;N;;;;; +1A26;TAI THAM LETTER NGA;Lo;0;L;;;;;N;;;;; +1A27;TAI THAM LETTER HIGH CA;Lo;0;L;;;;;N;;;;; +1A28;TAI THAM LETTER HIGH CHA;Lo;0;L;;;;;N;;;;; +1A29;TAI THAM LETTER LOW CA;Lo;0;L;;;;;N;;;;; +1A2A;TAI THAM LETTER LOW SA;Lo;0;L;;;;;N;;;;; +1A2B;TAI THAM LETTER LOW CHA;Lo;0;L;;;;;N;;;;; +1A2C;TAI THAM LETTER NYA;Lo;0;L;;;;;N;;;;; +1A2D;TAI THAM LETTER RATA;Lo;0;L;;;;;N;;;;; +1A2E;TAI THAM LETTER HIGH RATHA;Lo;0;L;;;;;N;;;;; +1A2F;TAI THAM LETTER DA;Lo;0;L;;;;;N;;;;; +1A30;TAI THAM LETTER LOW RATHA;Lo;0;L;;;;;N;;;;; +1A31;TAI THAM LETTER RANA;Lo;0;L;;;;;N;;;;; +1A32;TAI THAM LETTER HIGH TA;Lo;0;L;;;;;N;;;;; +1A33;TAI THAM LETTER HIGH THA;Lo;0;L;;;;;N;;;;; +1A34;TAI THAM LETTER LOW TA;Lo;0;L;;;;;N;;;;; +1A35;TAI THAM LETTER LOW THA;Lo;0;L;;;;;N;;;;; +1A36;TAI THAM LETTER NA;Lo;0;L;;;;;N;;;;; +1A37;TAI THAM LETTER BA;Lo;0;L;;;;;N;;;;; +1A38;TAI THAM LETTER HIGH PA;Lo;0;L;;;;;N;;;;; +1A39;TAI THAM LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; +1A3A;TAI THAM LETTER HIGH FA;Lo;0;L;;;;;N;;;;; +1A3B;TAI THAM LETTER LOW PA;Lo;0;L;;;;;N;;;;; +1A3C;TAI THAM LETTER LOW FA;Lo;0;L;;;;;N;;;;; +1A3D;TAI THAM LETTER LOW PHA;Lo;0;L;;;;;N;;;;; +1A3E;TAI THAM LETTER MA;Lo;0;L;;;;;N;;;;; +1A3F;TAI THAM LETTER LOW YA;Lo;0;L;;;;;N;;;;; +1A40;TAI THAM LETTER HIGH YA;Lo;0;L;;;;;N;;;;; +1A41;TAI THAM LETTER RA;Lo;0;L;;;;;N;;;;; +1A42;TAI THAM LETTER RUE;Lo;0;L;;;;;N;;;;; +1A43;TAI THAM LETTER LA;Lo;0;L;;;;;N;;;;; +1A44;TAI THAM LETTER LUE;Lo;0;L;;;;;N;;;;; +1A45;TAI THAM LETTER WA;Lo;0;L;;;;;N;;;;; +1A46;TAI THAM LETTER HIGH SHA;Lo;0;L;;;;;N;;;;; +1A47;TAI THAM LETTER HIGH SSA;Lo;0;L;;;;;N;;;;; +1A48;TAI THAM LETTER HIGH SA;Lo;0;L;;;;;N;;;;; +1A49;TAI THAM LETTER HIGH HA;Lo;0;L;;;;;N;;;;; +1A4A;TAI THAM LETTER LLA;Lo;0;L;;;;;N;;;;; +1A4B;TAI THAM LETTER A;Lo;0;L;;;;;N;;;;; +1A4C;TAI THAM LETTER LOW HA;Lo;0;L;;;;;N;;;;; +1A4D;TAI THAM LETTER I;Lo;0;L;;;;;N;;;;; +1A4E;TAI THAM LETTER II;Lo;0;L;;;;;N;;;;; +1A4F;TAI THAM LETTER U;Lo;0;L;;;;;N;;;;; +1A50;TAI THAM LETTER UU;Lo;0;L;;;;;N;;;;; +1A51;TAI THAM LETTER EE;Lo;0;L;;;;;N;;;;; +1A52;TAI THAM LETTER OO;Lo;0;L;;;;;N;;;;; +1A53;TAI THAM LETTER LAE;Lo;0;L;;;;;N;;;;; +1A54;TAI THAM LETTER GREAT SA;Lo;0;L;;;;;N;;;;; +1A55;TAI THAM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; +1A56;TAI THAM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; +1A57;TAI THAM CONSONANT SIGN LA TANG LAI;Mc;0;L;;;;;N;;;;; +1A58;TAI THAM SIGN MAI KANG LAI;Mn;0;NSM;;;;;N;;;;; +1A59;TAI THAM CONSONANT SIGN FINAL NGA;Mn;0;NSM;;;;;N;;;;; +1A5A;TAI THAM CONSONANT SIGN LOW PA;Mn;0;NSM;;;;;N;;;;; +1A5B;TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA;Mn;0;NSM;;;;;N;;;;; +1A5C;TAI THAM CONSONANT SIGN MA;Mn;0;NSM;;;;;N;;;;; +1A5D;TAI THAM CONSONANT SIGN BA;Mn;0;NSM;;;;;N;;;;; +1A5E;TAI THAM CONSONANT SIGN SA;Mn;0;NSM;;;;;N;;;;; +1A60;TAI THAM SIGN SAKOT;Mn;9;NSM;;;;;N;;;;; +1A61;TAI THAM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; +1A62;TAI THAM VOWEL SIGN MAI SAT;Mn;0;NSM;;;;;N;;;;; +1A63;TAI THAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +1A64;TAI THAM VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; +1A65;TAI THAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1A66;TAI THAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +1A67;TAI THAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +1A68;TAI THAM VOWEL SIGN UUE;Mn;0;NSM;;;;;N;;;;; +1A69;TAI THAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1A6A;TAI THAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +1A6B;TAI THAM VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +1A6C;TAI THAM VOWEL SIGN OA BELOW;Mn;0;NSM;;;;;N;;;;; +1A6D;TAI THAM VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; +1A6E;TAI THAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1A6F;TAI THAM VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +1A70;TAI THAM VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +1A71;TAI THAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +1A72;TAI THAM VOWEL SIGN THAM AI;Mc;0;L;;;;;N;;;;; +1A73;TAI THAM VOWEL SIGN OA ABOVE;Mn;0;NSM;;;;;N;;;;; +1A74;TAI THAM SIGN MAI KANG;Mn;0;NSM;;;;;N;;;;; +1A75;TAI THAM SIGN TONE-1;Mn;230;NSM;;;;;N;;;;; +1A76;TAI THAM SIGN TONE-2;Mn;230;NSM;;;;;N;;;;; +1A77;TAI THAM SIGN KHUEN TONE-3;Mn;230;NSM;;;;;N;;;;; +1A78;TAI THAM SIGN KHUEN TONE-4;Mn;230;NSM;;;;;N;;;;; +1A79;TAI THAM SIGN KHUEN TONE-5;Mn;230;NSM;;;;;N;;;;; +1A7A;TAI THAM SIGN RA HAAM;Mn;230;NSM;;;;;N;;;;; +1A7B;TAI THAM SIGN MAI SAM;Mn;230;NSM;;;;;N;;;;; +1A7C;TAI THAM SIGN KHUEN-LUE KARAN;Mn;230;NSM;;;;;N;;;;; +1A7F;TAI THAM COMBINING CRYPTOGRAMMIC DOT;Mn;220;NSM;;;;;N;;;;; +1A80;TAI THAM HORA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1A81;TAI THAM HORA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1A82;TAI THAM HORA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1A83;TAI THAM HORA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1A84;TAI THAM HORA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1A85;TAI THAM HORA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1A86;TAI THAM HORA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1A87;TAI THAM HORA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1A88;TAI THAM HORA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1A89;TAI THAM HORA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1A90;TAI THAM THAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1A91;TAI THAM THAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1A92;TAI THAM THAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1A93;TAI THAM THAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1A94;TAI THAM THAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1A95;TAI THAM THAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1A96;TAI THAM THAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1A97;TAI THAM THAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1A98;TAI THAM THAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1A99;TAI THAM THAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1AA0;TAI THAM SIGN WIANG;Po;0;L;;;;;N;;;;; +1AA1;TAI THAM SIGN WIANGWAAK;Po;0;L;;;;;N;;;;; +1AA2;TAI THAM SIGN SAWAN;Po;0;L;;;;;N;;;;; +1AA3;TAI THAM SIGN KEOW;Po;0;L;;;;;N;;;;; +1AA4;TAI THAM SIGN HOY;Po;0;L;;;;;N;;;;; +1AA5;TAI THAM SIGN DOKMAI;Po;0;L;;;;;N;;;;; +1AA6;TAI THAM SIGN REVERSED ROTATED RANA;Po;0;L;;;;;N;;;;; +1AA7;TAI THAM SIGN MAI YAMOK;Lm;0;L;;;;;N;;;;; +1AA8;TAI THAM SIGN KAAN;Po;0;L;;;;;N;;;;; +1AA9;TAI THAM SIGN KAANKUU;Po;0;L;;;;;N;;;;; +1AAA;TAI THAM SIGN SATKAAN;Po;0;L;;;;;N;;;;; +1AAB;TAI THAM SIGN SATKAANKUU;Po;0;L;;;;;N;;;;; +1AAC;TAI THAM SIGN HANG;Po;0;L;;;;;N;;;;; +1AAD;TAI THAM SIGN CAANG;Po;0;L;;;;;N;;;;; +1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; +1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; +1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; +1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;;;; +1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;;;; +1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;;;; +1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;;;; +1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;;;; +1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;;;; +1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;;;; +1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;;;; +1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;;;; +1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;;;; +1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;;;; +1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;;;; +1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;;;; +1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;;;; +1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;;;; +1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;;;; +1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;;;; +1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;;;; +1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;;;; +1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;;;; +1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;;;; +1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; +1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;;;; +1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;;;; +1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;;;; +1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;;;; +1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;;;; +1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;;;; +1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;;;; +1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;;;; +1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;;;; +1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;;;; +1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;;;; +1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;;;; +1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;;;; +1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; +1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;;;; +1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;;;; +1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;;;; +1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;;;; +1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;;;; +1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; +1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;;;; +1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;;;; +1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;;;; +1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; +1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;;;; +1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;;;; +1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; +1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; +1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; +1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; +1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; +1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; +1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1B5A;BALINESE PANTI;Po;0;L;;;;;N;;;;; +1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;;;; +1B5C;BALINESE WINDU;Po;0;L;;;;;N;;;;; +1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;;;; +1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;;;; +1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;;;; +1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;;;; +1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; +1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; +1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; +1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; +1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; +1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; +1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; +1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; +1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; +1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; +1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; +1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; +1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; +1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; +1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; +1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; +1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; +1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; +1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; +1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; +1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; +1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; +1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; +1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; +1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; +1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; +1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; +1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; +1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;; +1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;; +1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;; +1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;; +1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;; +1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;; +1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;; +1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;; +1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;; +1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;; +1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;; +1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;; +1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;; +1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;; +1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;; +1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;; +1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;; +1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;; +1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;; +1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;; +1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;; +1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;; +1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;; +1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;; +1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;; +1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;; +1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;; +1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;; +1BC3;BATAK LETTER SIMALUNGUN HA;Lo;0;L;;;;;N;;;;; +1BC4;BATAK LETTER MANDAILING HA;Lo;0;L;;;;;N;;;;; +1BC5;BATAK LETTER BA;Lo;0;L;;;;;N;;;;; +1BC6;BATAK LETTER KARO BA;Lo;0;L;;;;;N;;;;; +1BC7;BATAK LETTER PA;Lo;0;L;;;;;N;;;;; +1BC8;BATAK LETTER SIMALUNGUN PA;Lo;0;L;;;;;N;;;;; +1BC9;BATAK LETTER NA;Lo;0;L;;;;;N;;;;; +1BCA;BATAK LETTER MANDAILING NA;Lo;0;L;;;;;N;;;;; +1BCB;BATAK LETTER WA;Lo;0;L;;;;;N;;;;; +1BCC;BATAK LETTER SIMALUNGUN WA;Lo;0;L;;;;;N;;;;; +1BCD;BATAK LETTER PAKPAK WA;Lo;0;L;;;;;N;;;;; +1BCE;BATAK LETTER GA;Lo;0;L;;;;;N;;;;; +1BCF;BATAK LETTER SIMALUNGUN GA;Lo;0;L;;;;;N;;;;; +1BD0;BATAK LETTER JA;Lo;0;L;;;;;N;;;;; +1BD1;BATAK LETTER DA;Lo;0;L;;;;;N;;;;; +1BD2;BATAK LETTER RA;Lo;0;L;;;;;N;;;;; +1BD3;BATAK LETTER SIMALUNGUN RA;Lo;0;L;;;;;N;;;;; +1BD4;BATAK LETTER MA;Lo;0;L;;;;;N;;;;; +1BD5;BATAK LETTER SIMALUNGUN MA;Lo;0;L;;;;;N;;;;; +1BD6;BATAK LETTER SOUTHERN TA;Lo;0;L;;;;;N;;;;; +1BD7;BATAK LETTER NORTHERN TA;Lo;0;L;;;;;N;;;;; +1BD8;BATAK LETTER SA;Lo;0;L;;;;;N;;;;; +1BD9;BATAK LETTER SIMALUNGUN SA;Lo;0;L;;;;;N;;;;; +1BDA;BATAK LETTER MANDAILING SA;Lo;0;L;;;;;N;;;;; +1BDB;BATAK LETTER YA;Lo;0;L;;;;;N;;;;; +1BDC;BATAK LETTER SIMALUNGUN YA;Lo;0;L;;;;;N;;;;; +1BDD;BATAK LETTER NGA;Lo;0;L;;;;;N;;;;; +1BDE;BATAK LETTER LA;Lo;0;L;;;;;N;;;;; +1BDF;BATAK LETTER SIMALUNGUN LA;Lo;0;L;;;;;N;;;;; +1BE0;BATAK LETTER NYA;Lo;0;L;;;;;N;;;;; +1BE1;BATAK LETTER CA;Lo;0;L;;;;;N;;;;; +1BE2;BATAK LETTER NDA;Lo;0;L;;;;;N;;;;; +1BE3;BATAK LETTER MBA;Lo;0;L;;;;;N;;;;; +1BE4;BATAK LETTER I;Lo;0;L;;;;;N;;;;; +1BE5;BATAK LETTER U;Lo;0;L;;;;;N;;;;; +1BE6;BATAK SIGN TOMPI;Mn;7;NSM;;;;;N;;;;; +1BE7;BATAK VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1BE8;BATAK VOWEL SIGN PAKPAK E;Mn;0;NSM;;;;;N;;;;; +1BE9;BATAK VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; +1BEA;BATAK VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +1BEB;BATAK VOWEL SIGN KARO I;Mc;0;L;;;;;N;;;;; +1BEC;BATAK VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1BED;BATAK VOWEL SIGN KARO O;Mn;0;NSM;;;;;N;;;;; +1BEE;BATAK VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +1BEF;BATAK VOWEL SIGN U FOR SIMALUNGUN SA;Mn;0;NSM;;;;;N;;;;; +1BF0;BATAK CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; +1BF1;BATAK CONSONANT SIGN H;Mn;0;NSM;;;;;N;;;;; +1BF2;BATAK PANGOLAT;Mc;9;L;;;;;N;;;;; +1BF3;BATAK PANONGONAN;Mc;9;L;;;;;N;;;;; +1BFC;BATAK SYMBOL BINDU NA METEK;Po;0;L;;;;;N;;;;; +1BFD;BATAK SYMBOL BINDU PINARBORAS;Po;0;L;;;;;N;;;;; +1BFE;BATAK SYMBOL BINDU JUDUL;Po;0;L;;;;;N;;;;; +1BFF;BATAK SYMBOL BINDU PANGOLAT;Po;0;L;;;;;N;;;;; +1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;; +1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;; +1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;; +1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;; +1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;; +1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;; +1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;; +1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;; +1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;; +1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;; +1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;; +1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;; +1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;; +1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;; +1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;; +1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;; +1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;; +1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;; +1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;; +1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;; +1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;; +1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;; +1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;; +1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;; +1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;; +1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;; +1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;; +1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;; +1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;; +1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;; +1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;; +1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;; +1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;; +1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;; +1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;; +1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;; +1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; +1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; +1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; +1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; +1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; +1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; +1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;; +1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; +1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;; +1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;; +1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;; +1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;; +1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;; +1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;; +1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;; +1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;; +1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;; +1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;; +1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;; +1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;; +1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;; +1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;; +1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;; +1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;; +1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;; +1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;; +1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;; +1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;; +1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;; +1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;; +1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;; +1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;; +1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;; +1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;; +1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;; +1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;; +1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;; +1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;; +1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;; +1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;; +1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;; +1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;; +1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;; +1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;; +1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;; +1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;; +1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;; +1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;; +1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;; +1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;; +1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;; +1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; +1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; +1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;; +1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;; +1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;; +1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;; +1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;; +1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;; +1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;; +1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;; +1CD3;VEDIC SIGN NIHSHVASA;Po;0;L;;;;;N;;;;; +1CD4;VEDIC SIGN YAJURVEDIC MIDLINE SVARITA;Mn;1;NSM;;;;;N;;;;; +1CD5;VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; +1CD6;VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; +1CD7;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA;Mn;220;NSM;;;;;N;;;;; +1CD8;VEDIC TONE CANDRA BELOW;Mn;220;NSM;;;;;N;;;;; +1CD9;VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER;Mn;220;NSM;;;;;N;;;;; +1CDA;VEDIC TONE DOUBLE SVARITA;Mn;230;NSM;;;;;N;;;;; +1CDB;VEDIC TONE TRIPLE SVARITA;Mn;230;NSM;;;;;N;;;;; +1CDC;VEDIC TONE KATHAKA ANUDATTA;Mn;220;NSM;;;;;N;;;;; +1CDD;VEDIC TONE DOT BELOW;Mn;220;NSM;;;;;N;;;;; +1CDE;VEDIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +1CDF;VEDIC TONE THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +1CE0;VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA;Mn;230;NSM;;;;;N;;;;; +1CE1;VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA;Mc;0;L;;;;;N;;;;; +1CE2;VEDIC SIGN VISARGA SVARITA;Mn;1;NSM;;;;;N;;;;; +1CE3;VEDIC SIGN VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; +1CE4;VEDIC SIGN REVERSED VISARGA UDATTA;Mn;1;NSM;;;;;N;;;;; +1CE5;VEDIC SIGN VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; +1CE6;VEDIC SIGN REVERSED VISARGA ANUDATTA;Mn;1;NSM;;;;;N;;;;; +1CE7;VEDIC SIGN VISARGA UDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; +1CE8;VEDIC SIGN VISARGA ANUDATTA WITH TAIL;Mn;1;NSM;;;;;N;;;;; +1CE9;VEDIC SIGN ANUSVARA ANTARGOMUKHA;Lo;0;L;;;;;N;;;;; +1CEA;VEDIC SIGN ANUSVARA BAHIRGOMUKHA;Lo;0;L;;;;;N;;;;; +1CEB;VEDIC SIGN ANUSVARA VAMAGOMUKHA;Lo;0;L;;;;;N;;;;; +1CEC;VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL;Lo;0;L;;;;;N;;;;; +1CED;VEDIC SIGN TIRYAK;Mn;220;NSM;;;;;N;;;;; +1CEE;VEDIC SIGN HEXIFORM LONG ANUSVARA;Lo;0;L;;;;;N;;;;; +1CEF;VEDIC SIGN LONG ANUSVARA;Lo;0;L;;;;;N;;;;; +1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;; +1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;; +1CF2;VEDIC SIGN ARDHAVISARGA;Mc;0;L;;;;;N;;;;; +1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; +1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; +1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; +1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;; +1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;; +1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;; +1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;; +1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;; +1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;; +1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;; +1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;; +1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;; +1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;; +1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;; +1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;; +1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;; +1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;; +1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;; +1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;; +1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;; +1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;; +1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;; +1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;; +1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;; +1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;; +1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;; +1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;; +1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;; +1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;; +1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;; +1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;; +1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;; +1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;; +1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;; +1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;; +1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;; +1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;; +1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;; +1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;; +1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;; +1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;; +1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;; +1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;; +1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;; +1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L; 0041;;;;N;;;;; +1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L; 00C6;;;;N;;;;; +1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L; 0042;;;;N;;;;; +1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;; +1D30;MODIFIER LETTER CAPITAL D;Lm;0;L; 0044;;;;N;;;;; +1D31;MODIFIER LETTER CAPITAL E;Lm;0;L; 0045;;;;N;;;;; +1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L; 018E;;;;N;;;;; +1D33;MODIFIER LETTER CAPITAL G;Lm;0;L; 0047;;;;N;;;;; +1D34;MODIFIER LETTER CAPITAL H;Lm;0;L; 0048;;;;N;;;;; +1D35;MODIFIER LETTER CAPITAL I;Lm;0;L; 0049;;;;N;;;;; +1D36;MODIFIER LETTER CAPITAL J;Lm;0;L; 004A;;;;N;;;;; +1D37;MODIFIER LETTER CAPITAL K;Lm;0;L; 004B;;;;N;;;;; +1D38;MODIFIER LETTER CAPITAL L;Lm;0;L; 004C;;;;N;;;;; +1D39;MODIFIER LETTER CAPITAL M;Lm;0;L; 004D;;;;N;;;;; +1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L; 004E;;;;N;;;;; +1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;; +1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L; 004F;;;;N;;;;; +1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L; 0222;;;;N;;;;; +1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L; 0050;;;;N;;;;; +1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L; 0052;;;;N;;;;; +1D40;MODIFIER LETTER CAPITAL T;Lm;0;L; 0054;;;;N;;;;; +1D41;MODIFIER LETTER CAPITAL U;Lm;0;L; 0055;;;;N;;;;; +1D42;MODIFIER LETTER CAPITAL W;Lm;0;L; 0057;;;;N;;;;; +1D43;MODIFIER LETTER SMALL A;Lm;0;L; 0061;;;;N;;;;; +1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L; 0250;;;;N;;;;; +1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L; 0251;;;;N;;;;; +1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L; 1D02;;;;N;;;;; +1D47;MODIFIER LETTER SMALL B;Lm;0;L; 0062;;;;N;;;;; +1D48;MODIFIER LETTER SMALL D;Lm;0;L; 0064;;;;N;;;;; +1D49;MODIFIER LETTER SMALL E;Lm;0;L; 0065;;;;N;;;;; +1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L; 0259;;;;N;;;;; +1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L; 025B;;;;N;;;;; +1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L; 025C;;;;N;;;;; +1D4D;MODIFIER LETTER SMALL G;Lm;0;L; 0067;;;;N;;;;; +1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;; +1D4F;MODIFIER LETTER SMALL K;Lm;0;L; 006B;;;;N;;;;; +1D50;MODIFIER LETTER SMALL M;Lm;0;L; 006D;;;;N;;;;; +1D51;MODIFIER LETTER SMALL ENG;Lm;0;L; 014B;;;;N;;;;; +1D52;MODIFIER LETTER SMALL O;Lm;0;L; 006F;;;;N;;;;; +1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L; 0254;;;;N;;;;; +1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L; 1D16;;;;N;;;;; +1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L; 1D17;;;;N;;;;; +1D56;MODIFIER LETTER SMALL P;Lm;0;L; 0070;;;;N;;;;; +1D57;MODIFIER LETTER SMALL T;Lm;0;L; 0074;;;;N;;;;; +1D58;MODIFIER LETTER SMALL U;Lm;0;L; 0075;;;;N;;;;; +1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L; 1D1D;;;;N;;;;; +1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L; 026F;;;;N;;;;; +1D5B;MODIFIER LETTER SMALL V;Lm;0;L; 0076;;;;N;;;;; +1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L; 1D25;;;;N;;;;; +1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L; 03B2;;;;N;;;;; +1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L; 03B3;;;;N;;;;; +1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L; 03B4;;;;N;;;;; +1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L; 03C6;;;;N;;;;; +1D61;MODIFIER LETTER SMALL CHI;Lm;0;L; 03C7;;;;N;;;;; +1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L; 0069;;;;N;;;;; +1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L; 0072;;;;N;;;;; +1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L; 0075;;;;N;;;;; +1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L; 0076;;;;N;;;;; +1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L; 03B2;;;;N;;;;; +1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L; 03C1;;;;N;;;;; +1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L; 03C6;;;;N;;;;; +1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L; 03C7;;;;N;;;;; +1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; +1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; +1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L; 043D;;;;N;;;;; +1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D +1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; +1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 +1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; +1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; +1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L; 0252;;;;N;;;;; +1D9C;MODIFIER LETTER SMALL C;Lm;0;L; 0063;;;;N;;;;; +1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L; 0255;;;;N;;;;; +1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L; 00F0;;;;N;;;;; +1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L; 025C;;;;N;;;;; +1DA0;MODIFIER LETTER SMALL F;Lm;0;L; 0066;;;;N;;;;; +1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L; 025F;;;;N;;;;; +1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L; 0261;;;;N;;;;; +1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L; 0265;;;;N;;;;; +1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L; 0268;;;;N;;;;; +1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L; 0269;;;;N;;;;; +1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L; 026A;;;;N;;;;; +1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L; 1D7B;;;;N;;;;; +1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L; 029D;;;;N;;;;; +1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L; 026D;;;;N;;;;; +1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L; 1D85;;;;N;;;;; +1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L; 029F;;;;N;;;;; +1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L; 0271;;;;N;;;;; +1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L; 0270;;;;N;;;;; +1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L; 0272;;;;N;;;;; +1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L; 0273;;;;N;;;;; +1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L; 0274;;;;N;;;;; +1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L; 0275;;;;N;;;;; +1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L; 0278;;;;N;;;;; +1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L; 0282;;;;N;;;;; +1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L; 0283;;;;N;;;;; +1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L; 01AB;;;;N;;;;; +1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L; 0289;;;;N;;;;; +1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L; 028A;;;;N;;;;; +1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L; 1D1C;;;;N;;;;; +1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L; 028B;;;;N;;;;; +1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L; 028C;;;;N;;;;; +1DBB;MODIFIER LETTER SMALL Z;Lm;0;L; 007A;;;;N;;;;; +1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L; 0290;;;;N;;;;; +1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L; 0291;;;;N;;;;; +1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L; 0292;;;;N;;;;; +1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L; 03B8;;;;N;;;;; +1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; +1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; +1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; +1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;; +1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;; +1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;; +1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;; +1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;; +1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;; +1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;; +1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;; +1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;; +1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;; +1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;; +1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;; +1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;; +1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;; +1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;; +1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;; +1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;; +1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;; +1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;; +1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;; +1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;; +1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;; +1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;; +1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;; +1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;; +1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;; +1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; +1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 +1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; +1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 +1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; +1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 +1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; +1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 +1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; +1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 +1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; +1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A +1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; +1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C +1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; +1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E +1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; +1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 +1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; +1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 +1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; +1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 +1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; +1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 +1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; +1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 +1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; +1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A +1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; +1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C +1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; +1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E +1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; +1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 +1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; +1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 +1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; +1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 +1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; +1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 +1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; +1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 +1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; +1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A +1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; +1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C +1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; +1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E +1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; +1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 +1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; +1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 +1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; +1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 +1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; +1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 +1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; +1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 +1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; +1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A +1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; +1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C +1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; +1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E +1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; +1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 +1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; +1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 +1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; +1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 +1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; +1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 +1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; +1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 +1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; +1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A +1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; +1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C +1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; +1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E +1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; +1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 +1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; +1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 +1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; +1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 +1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; +1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 +1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; +1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 +1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; +1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A +1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; +1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C +1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; +1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E +1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; +1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 +1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; +1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 +1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; +1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 +1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; +1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 +1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; +1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 +1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; +1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A +1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; +1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C +1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; +1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E +1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; +1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 +1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; +1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 +1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; +1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 +1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; +1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 +1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; +1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 +1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; +1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A +1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; +1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C +1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; +1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E +1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; +1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 +1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; +1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 +1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; +1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 +1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; +1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 +1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; +1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 +1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; +1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A +1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; +1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C +1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; +1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E +1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; +1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 +1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; +1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 +1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; +1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 +1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; +1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; +1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; +1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; +1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L; 0061 02BE;;;;N;;;;; +1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 +1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;; +1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;; +1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF; +1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;; +1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; +1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 +1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; +1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 +1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; +1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 +1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; +1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 +1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; +1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 +1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; +1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA +1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; +1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC +1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; +1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE +1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; +1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 +1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; +1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 +1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; +1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 +1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; +1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 +1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; +1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 +1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; +1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA +1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; +1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC +1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; +1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE +1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; +1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 +1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; +1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 +1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; +1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 +1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; +1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 +1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; +1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 +1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; +1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA +1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; +1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC +1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; +1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE +1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; +1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 +1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; +1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 +1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; +1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 +1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; +1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 +1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; +1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 +1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; +1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA +1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; +1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC +1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; +1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE +1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; +1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 +1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; +1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 +1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; +1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 +1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; +1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 +1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; +1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 +1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; +1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA +1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; +1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC +1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; +1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE +1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; +1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 +1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; +1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 +1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; +1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 +1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; +1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 +1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; +1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 +1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB; +1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA +1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD; +1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC +1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF; +1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE +1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 +1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 +1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A +1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B +1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C +1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D +1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E +1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F +1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; +1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; +1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; +1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; +1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; +1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; +1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; +1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; +1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 +1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 +1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A +1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B +1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C +1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D +1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; +1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; +1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; +1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; +1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; +1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; +1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 +1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 +1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A +1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B +1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C +1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D +1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E +1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F +1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; +1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; +1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; +1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; +1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; +1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; +1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; +1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; +1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 +1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 +1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A +1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B +1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C +1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D +1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E +1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F +1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; +1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; +1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; +1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; +1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; +1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; +1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; +1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; +1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 +1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 +1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A +1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B +1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C +1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D +1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; +1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; +1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; +1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; +1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; +1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; +1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; +1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 +1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; +1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B +1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; +1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D +1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; +1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F +1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; +1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; +1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; +1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; +1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 +1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 +1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A +1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B +1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C +1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D +1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E +1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F +1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; +1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; +1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; +1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; +1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; +1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; +1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; +1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; +1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA +1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB +1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 +1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 +1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA +1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB +1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA +1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB +1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 +1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 +1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA +1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB +1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA +1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB +1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 +1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 +1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A +1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B +1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C +1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D +1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E +1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F +1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; +1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; +1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; +1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; +1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; +1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; +1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; +1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; +1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 +1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 +1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A +1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B +1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C +1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D +1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E +1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F +1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; +1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; +1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; +1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; +1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; +1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; +1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; +1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; +1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 +1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 +1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA +1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB +1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC +1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD +1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE +1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF +1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; +1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; +1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; +1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; +1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; +1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; +1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; +1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; +1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 +1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 +1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; +1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC +1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; +1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; +1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; +1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; +1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; +1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; +1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; +1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; +1FBD;GREEK KORONIS;Sk;0;ON; 0020 0313;;;;N;;;;; +1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 +1FBF;GREEK PSILI;Sk;0;ON; 0020 0313;;;;N;;;;; +1FC0;GREEK PERISPOMENI;Sk;0;ON; 0020 0342;;;;N;;;;; +1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; +1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; +1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC +1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; +1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; +1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; +1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; +1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; +1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; +1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; +1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; +1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; +1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; +1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; +1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 +1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 +1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; +1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; +1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; +1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; +1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; +1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; +1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; +1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; +1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; +1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; +1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; +1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 +1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 +1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; +1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; +1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; +1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC +1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; +1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; +1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; +1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; +1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; +1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; +1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; +1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; +1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; +1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; +1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; +1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC +1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; +1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; +1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; +1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; +1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; +1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; +1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; +1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; +1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; +1FFE;GREEK DASIA;Sk;0;ON; 0020 0314;;;;N;;;;; +2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; +2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; +2002;EN SPACE;Zs;0;WS; 0020;;;;N;;;;; +2003;EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2004;THREE-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2005;FOUR-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2006;SIX-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2007;FIGURE SPACE;Zs;0;WS; 0020;;;;N;;;;; +2008;PUNCTUATION SPACE;Zs;0;WS; 0020;;;;N;;;;; +2009;THIN SPACE;Zs;0;WS; 0020;;;;N;;;;; +200A;HAIR SPACE;Zs;0;WS; 0020;;;;N;;;;; +200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;; +200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; +200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; +200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; +200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; +2010;HYPHEN;Pd;0;ON;;;;;N;;;;; +2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; +2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; +2013;EN DASH;Pd;0;ON;;;;;N;;;;; +2014;EM DASH;Pd;0;ON;;;;;N;;;;; +2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; +2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; +2017;DOUBLE LOW LINE;Po;0;ON; 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; +2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; +2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; +201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; +201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; +201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; +201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; +201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; +201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; +2020;DAGGER;Po;0;ON;;;;;N;;;;; +2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; +2022;BULLET;Po;0;ON;;;;;N;;;;; +2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; +2024;ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;; +2025;TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; +2026;HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; +2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; +2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; +2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; +202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; +202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; +202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; +202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; +202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; +202F;NARROW NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;;;;; +2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; +2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; +2032;PRIME;Po;0;ET;;;;;N;;;;; +2033;DOUBLE PRIME;Po;0;ET; 2032 2032;;;;N;;;;; +2034;TRIPLE PRIME;Po;0;ET; 2032 2032 2032;;;;N;;;;; +2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; +2036;REVERSED DOUBLE PRIME;Po;0;ON; 2035 2035;;;;N;;;;; +2037;REVERSED TRIPLE PRIME;Po;0;ON; 2035 2035 2035;;;;N;;;;; +2038;CARET;Po;0;ON;;;;;N;;;;; +2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; +203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; +203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; +203C;DOUBLE EXCLAMATION MARK;Po;0;ON; 0021 0021;;;;N;;;;; +203D;INTERROBANG;Po;0;ON;;;;;N;;;;; +203E;OVERLINE;Po;0;ON; 0020 0305;;;;N;SPACING OVERSCORE;;;; +203F;UNDERTIE;Pc;0;ON;;;;;N;;;;; +2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; +2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; +2042;ASTERISM;Po;0;ON;;;;;N;;;;; +2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; +2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;; +2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; +2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; +2047;DOUBLE QUESTION MARK;Po;0;ON; 003F 003F;;;;N;;;;; +2048;QUESTION EXCLAMATION MARK;Po;0;ON; 003F 0021;;;;N;;;;; +2049;EXCLAMATION QUESTION MARK;Po;0;ON; 0021 003F;;;;N;;;;; +204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; +204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; +204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; +204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; +204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;; +204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;; +2050;CLOSE UP;Po;0;ON;;;;;N;;;;; +2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;; +2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; +2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; +2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; +2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; +2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2057;QUADRUPLE PRIME;Po;0;ON; 2032 2032 2032 2032;;;;N;;;;; +2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; +205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; +205D;TRICOLON;Po;0;ON;;;;;N;;;;; +205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; +205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS; 0020;;;;N;;;;; +2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; +2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; +2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;; +2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;; +2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;; +206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; +206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; +206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; +206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; +206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; +206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; +2070;SUPERSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; +2071;SUPERSCRIPT LATIN SMALL LETTER I;Lm;0;L; 0069;;;;N;;;;; +2074;SUPERSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; +2075;SUPERSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; +2076;SUPERSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;; +2077;SUPERSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; +2078;SUPERSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; +2079;SUPERSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; +207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +207B;SUPERSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; +207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; +207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; +207F;SUPERSCRIPT LATIN SMALL LETTER N;Lm;0;L; 006E;;;;N;;;;; +2080;SUBSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;; +2081;SUBSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;; +2082;SUBSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;; +2083;SUBSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;; +2084;SUBSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;; +2085;SUBSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;; +2086;SUBSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;; +2087;SUBSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; +2088;SUBSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; +2089;SUBSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; +208A;SUBSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +208B;SUBSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; +208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; +208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; +2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L; 0061;;;;N;;;;; +2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L; 0065;;;;N;;;;; +2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L; 006F;;;;N;;;;; +2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L; 0078;;;;N;;;;; +2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L; 0259;;;;N;;;;; +2095;LATIN SUBSCRIPT SMALL LETTER H;Lm;0;L; 0068;;;;N;;;;; +2096;LATIN SUBSCRIPT SMALL LETTER K;Lm;0;L; 006B;;;;N;;;;; +2097;LATIN SUBSCRIPT SMALL LETTER L;Lm;0;L; 006C;;;;N;;;;; +2098;LATIN SUBSCRIPT SMALL LETTER M;Lm;0;L; 006D;;;;N;;;;; +2099;LATIN SUBSCRIPT SMALL LETTER N;Lm;0;L; 006E;;;;N;;;;; +209A;LATIN SUBSCRIPT SMALL LETTER P;Lm;0;L; 0070;;;;N;;;;; +209B;LATIN SUBSCRIPT SMALL LETTER S;Lm;0;L; 0073;;;;N;;;;; +209C;LATIN SUBSCRIPT SMALL LETTER T;Lm;0;L; 0074;;;;N;;;;; +20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; +20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; +20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; +20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; +20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; +20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; +20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; +20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; +20A8;RUPEE SIGN;Sc;0;ET; 0052 0073;;;;N;;;;; +20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; +20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; +20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; +20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; +20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; +20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; +20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; +20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; +20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; +20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; +20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; +20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; +20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; +20B6;LIVRE TOURNOIS SIGN;Sc;0;ET;;;;;N;;;;; +20B7;SPESMILO SIGN;Sc;0;ET;;;;;N;;;;; +20B8;TENGE SIGN;Sc;0;ET;;;;;N;;;;; +20B9;INDIAN RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; +20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; +20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; +20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; +20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; +20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; +20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; +20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; +20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; +20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; +20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; +20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; +20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; +20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; +20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; +20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; +20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; +20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; +20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; +20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; +20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;; +20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;; +20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;; +20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; +20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;; +2100;ACCOUNT OF;So;0;ON; 0061 002F 0063;;;;N;;;;; +2101;ADDRESSED TO THE SUBJECT;So;0;ON; 0061 002F 0073;;;;N;;;;; +2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L; 0043;;;;N;DOUBLE-STRUCK C;;;; +2103;DEGREE CELSIUS;So;0;ON; 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; +2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; +2105;CARE OF;So;0;ON; 0063 002F 006F;;;;N;;;;; +2106;CADA UNA;So;0;ON; 0063 002F 0075;;;;N;;;;; +2107;EULER CONSTANT;Lu;0;L; 0190;;;;N;EULERS;;;; +2108;SCRUPLE;So;0;ON;;;;;N;;;;; +2109;DEGREE FAHRENHEIT;So;0;ON; 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; +210A;SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; +210B;SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;SCRIPT H;;;; +210C;BLACK-LETTER CAPITAL H;Lu;0;L; 0048;;;;N;BLACK-LETTER H;;;; +210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L; 0048;;;;N;DOUBLE-STRUCK H;;;; +210E;PLANCK CONSTANT;Ll;0;L; 0068;;;;N;;;;; +210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L; 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; +2110;SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;SCRIPT I;;;; +2111;BLACK-LETTER CAPITAL I;Lu;0;L; 0049;;;;N;BLACK-LETTER I;;;; +2112;SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;SCRIPT L;;;; +2113;SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; +2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; +2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L; 004E;;;;N;DOUBLE-STRUCK N;;;; +2116;NUMERO SIGN;So;0;ON; 004E 006F;;;;N;NUMERO;;;; +2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; +2118;SCRIPT CAPITAL P;Sm;0;ON;;;;;N;SCRIPT P;;;; +2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L; 0050;;;;N;DOUBLE-STRUCK P;;;; +211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L; 0051;;;;N;DOUBLE-STRUCK Q;;;; +211B;SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;SCRIPT R;;;; +211C;BLACK-LETTER CAPITAL R;Lu;0;L; 0052;;;;N;BLACK-LETTER R;;;; +211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L; 0052;;;;N;DOUBLE-STRUCK R;;;; +211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; +211F;RESPONSE;So;0;ON;;;;;N;;;;; +2120;SERVICE MARK;So;0;ON; 0053 004D;;;;N;;;;; +2121;TELEPHONE SIGN;So;0;ON; 0054 0045 004C;;;;N;T E L SYMBOL;;;; +2122;TRADE MARK SIGN;So;0;ON; 0054 004D;;;;N;TRADEMARK;;;; +2123;VERSICLE;So;0;ON;;;;;N;;;;; +2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L; 005A;;;;N;DOUBLE-STRUCK Z;;;; +2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; +2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; +2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; +2128;BLACK-LETTER CAPITAL Z;Lu;0;L; 005A;;;;N;BLACK-LETTER Z;;;; +2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; +212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; +212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; +212C;SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;SCRIPT B;;;; +212D;BLACK-LETTER CAPITAL C;Lu;0;L; 0043;;;;N;BLACK-LETTER C;;;; +212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; +212F;SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; +2130;SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;SCRIPT E;;;; +2131;SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;SCRIPT F;;;; +2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; +2133;SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;SCRIPT M;;;; +2134;SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; +2135;ALEF SYMBOL;Lo;0;L; 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; +2136;BET SYMBOL;Lo;0;L; 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; +2137;GIMEL SYMBOL;Lo;0;L; 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; +2138;DALET SYMBOL;Lo;0;L; 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; +2139;INFORMATION SOURCE;Ll;0;L; 0069;;;;N;;;;; +213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; +213B;FACSIMILE SIGN;So;0;ON; 0046 0041 0058;;;;N;;;;; +213C;DOUBLE-STRUCK SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON; 2211;;;;Y;;;;; +2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;; +2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; +2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; +2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;; +2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; +214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; +214C;PER SIGN;So;0;ON;;;;;N;;;;; +214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; +214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 +214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;; +2150;VULGAR FRACTION ONE SEVENTH;No;0;ON; 0031 2044 0037;;;1/7;N;;;;; +2151;VULGAR FRACTION ONE NINTH;No;0;ON; 0031 2044 0039;;;1/9;N;;;;; +2152;VULGAR FRACTION ONE TENTH;No;0;ON; 0031 2044 0031 0030;;;1/10;N;;;;; +2153;VULGAR FRACTION ONE THIRD;No;0;ON; 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; +2154;VULGAR FRACTION TWO THIRDS;No;0;ON; 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; +2155;VULGAR FRACTION ONE FIFTH;No;0;ON; 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; +2156;VULGAR FRACTION TWO FIFTHS;No;0;ON; 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; +2157;VULGAR FRACTION THREE FIFTHS;No;0;ON; 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; +2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON; 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; +2159;VULGAR FRACTION ONE SIXTH;No;0;ON; 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; +215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON; 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; +215B;VULGAR FRACTION ONE EIGHTH;No;0;ON; 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; +215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON; 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; +215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON; 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; +215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON; 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; +215F;FRACTION NUMERATOR ONE;No;0;ON; 0031 2044;;;1;N;;;;; +2160;ROMAN NUMERAL ONE;Nl;0;L; 0049;;;1;N;;;;2170; +2161;ROMAN NUMERAL TWO;Nl;0;L; 0049 0049;;;2;N;;;;2171; +2162;ROMAN NUMERAL THREE;Nl;0;L; 0049 0049 0049;;;3;N;;;;2172; +2163;ROMAN NUMERAL FOUR;Nl;0;L; 0049 0056;;;4;N;;;;2173; +2164;ROMAN NUMERAL FIVE;Nl;0;L; 0056;;;5;N;;;;2174; +2165;ROMAN NUMERAL SIX;Nl;0;L; 0056 0049;;;6;N;;;;2175; +2166;ROMAN NUMERAL SEVEN;Nl;0;L; 0056 0049 0049;;;7;N;;;;2176; +2167;ROMAN NUMERAL EIGHT;Nl;0;L; 0056 0049 0049 0049;;;8;N;;;;2177; +2168;ROMAN NUMERAL NINE;Nl;0;L; 0049 0058;;;9;N;;;;2178; +2169;ROMAN NUMERAL TEN;Nl;0;L; 0058;;;10;N;;;;2179; +216A;ROMAN NUMERAL ELEVEN;Nl;0;L; 0058 0049;;;11;N;;;;217A; +216B;ROMAN NUMERAL TWELVE;Nl;0;L; 0058 0049 0049;;;12;N;;;;217B; +216C;ROMAN NUMERAL FIFTY;Nl;0;L; 004C;;;50;N;;;;217C; +216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0043;;;100;N;;;;217D; +216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0044;;;500;N;;;;217E; +216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 004D;;;1000;N;;;;217F; +2170;SMALL ROMAN NUMERAL ONE;Nl;0;L; 0069;;;1;N;;;2160;;2160 +2171;SMALL ROMAN NUMERAL TWO;Nl;0;L; 0069 0069;;;2;N;;;2161;;2161 +2172;SMALL ROMAN NUMERAL THREE;Nl;0;L; 0069 0069 0069;;;3;N;;;2162;;2162 +2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L; 0069 0076;;;4;N;;;2163;;2163 +2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L; 0076;;;5;N;;;2164;;2164 +2175;SMALL ROMAN NUMERAL SIX;Nl;0;L; 0076 0069;;;6;N;;;2165;;2165 +2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L; 0076 0069 0069;;;7;N;;;2166;;2166 +2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L; 0076 0069 0069 0069;;;8;N;;;2167;;2167 +2178;SMALL ROMAN NUMERAL NINE;Nl;0;L; 0069 0078;;;9;N;;;2168;;2168 +2179;SMALL ROMAN NUMERAL TEN;Nl;0;L; 0078;;;10;N;;;2169;;2169 +217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L; 0078 0069;;;11;N;;;216A;;216A +217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L; 0078 0069 0069;;;12;N;;;216B;;216B +217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L; 006C;;;50;N;;;216C;;216C +217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0063;;;100;N;;;216D;;216D +217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0064;;;500;N;;;216E;;216E +217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 006D;;;1000;N;;;216F;;216F +2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; +2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; +2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; +2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; +2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 +2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;; +2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;; +2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;; +2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;; +2189;VULGAR FRACTION ZERO THIRDS;No;0;ON; 0030 2044 0033;;;0;N;;;;; +2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; +2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; +2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; +2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; +2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; +2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; +2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; +2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; +2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; +2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; +219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; +219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; +219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; +219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; +219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; +219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; +21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; +21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; +21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; +21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; +21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; +21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; +21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; +21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; +21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; +21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; +21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; +21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; +21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; +21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; +21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; +21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; +21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; +21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; +21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; +21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; +21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; +21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; +21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; +21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; +21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; +21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; +21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; +21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; +21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; +21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; +21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; +21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; +21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; +21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; +21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; +21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; +21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; +21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; +21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; +21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; +21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; +21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; +21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; +21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; +21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; +21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; +21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; +21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; +21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; +21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; +21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; +21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; +21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; +21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; +21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; +21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; +21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; +21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; +21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; +21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; +21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; +21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; +21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; +21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; +21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; +21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; +21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; +21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; +21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; +21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; +21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; +21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; +21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; +21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; +21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; +21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; +21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; +21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; +21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; +21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; +21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; +21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; +21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; +21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;; +21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; +21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +2200;FOR ALL;Sm;0;ON;;;;;N;;;;; +2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; +2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; +2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; +2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; +2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; +2206;INCREMENT;Sm;0;ON;;;;;N;;;;; +2207;NABLA;Sm;0;ON;;;;;N;;;;; +2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; +2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; +220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; +220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; +220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; +220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; +220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; +220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; +2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; +2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; +2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; +2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; +2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; +2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; +2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; +2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; +2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; +2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; +221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; +221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; +221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; +221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; +221E;INFINITY;Sm;0;ON;;;;;N;;;;; +221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; +2220;ANGLE;Sm;0;ON;;;;;Y;;;;; +2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; +2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; +2223;DIVIDES;Sm;0;ON;;;;;N;;;;; +2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; +2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; +2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; +2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; +222A;UNION;Sm;0;ON;;;;;N;;;;; +222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; +222C;DOUBLE INTEGRAL;Sm;0;ON; 222B 222B;;;;Y;;;;; +222D;TRIPLE INTEGRAL;Sm;0;ON; 222B 222B 222B;;;;Y;;;;; +222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +222F;SURFACE INTEGRAL;Sm;0;ON; 222E 222E;;;;Y;;;;; +2230;VOLUME INTEGRAL;Sm;0;ON; 222E 222E 222E;;;;Y;;;;; +2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2234;THEREFORE;Sm;0;ON;;;;;N;;;;; +2235;BECAUSE;Sm;0;ON;;;;;N;;;;; +2236;RATIO;Sm;0;ON;;;;;N;;;;; +2237;PROPORTION;Sm;0;ON;;;;;N;;;;; +2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; +2239;EXCESS;Sm;0;ON;;;;;Y;;;;; +223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; +223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; +223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;;;; +223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; +223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; +2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; +2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; +2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; +2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; +2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; +2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; +224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; +224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; +224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; +2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; +2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; +2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; +2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; +2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; +2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; +2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; +2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; +2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; +225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; +225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; +225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; +225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; +225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; +225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; +2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; +2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; +2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; +2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; +2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; +2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; +2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; +2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; +226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; +226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; +226C;BETWEEN;Sm;0;ON;;;;;N;;;;; +226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; +226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; +226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; +2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; +2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; +2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; +2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; +2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; +2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; +2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; +2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; +2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; +2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; +227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; +227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; +2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; +2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; +2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; +2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; +2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; +2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; +2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; +228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; +228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; +228C;MULTISET;Sm;0;ON;;;;;Y;;;;; +228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; +228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; +228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; +2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; +2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; +2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; +2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; +2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; +2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; +2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; +229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; +229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; +229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; +229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; +229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; +22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; +22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; +22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; +22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; +22A5;UP TACK;Sm;0;ON;;;;;N;;;;; +22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; +22A7;MODELS;Sm;0;ON;;;;;Y;;;;; +22A8;TRUE;Sm;0;ON;;;;;Y;;;;; +22A9;FORCES;Sm;0;ON;;;;;Y;;;;; +22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; +22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; +22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; +22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; +22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; +22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; +22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; +22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; +22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; +22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; +22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; +22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; +22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; +22BB;XOR;Sm;0;ON;;;;;N;;;;; +22BC;NAND;Sm;0;ON;;;;;N;;;;; +22BD;NOR;Sm;0;ON;;;;;N;;;;; +22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; +22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; +22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; +22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; +22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; +22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; +22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; +22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; +22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; +22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; +22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; +22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; +22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; +22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; +22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; +22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; +22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; +22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; +22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; +22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; +22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; +22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; +22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; +22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; +22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; +22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; +22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; +22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; +22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; +22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; +22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; +22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; +22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; +22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; +22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; +22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; +22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; +22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; +22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; +22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; +22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; +22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;; +22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;; +2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; +2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; +2302;HOUSE;So;0;ON;;;;;N;;;;; +2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; +2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; +2305;PROJECTIVE;So;0;ON;;;;;N;;;;; +2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; +2307;WAVY LINE;So;0;ON;;;;;N;;;;; +2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;; +2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;; +230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;; +230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;; +230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; +230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; +230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; +230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; +2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; +2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; +2312;ARC;So;0;ON;;;;;N;;;;; +2313;SEGMENT;So;0;ON;;;;;N;;;;; +2314;SECTOR;So;0;ON;;;;;N;;;;; +2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; +2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; +2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; +2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; +2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; +231A;WATCH;So;0;ON;;;;;N;;;;; +231B;HOURGLASS;So;0;ON;;;;;N;;;;; +231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; +231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; +231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; +231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; +2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2322;FROWN;So;0;ON;;;;;N;;;;; +2323;SMILE;So;0;ON;;;;;N;;;;; +2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; +2325;OPTION KEY;So;0;ON;;;;;N;;;;; +2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; +2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; +2328;KEYBOARD;So;0;ON;;;;;N;;;;; +2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; +232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; +232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; +232C;BENZENE RING;So;0;ON;;;;;N;;;;; +232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; +232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; +232F;SYMMETRY;So;0;ON;;;;;N;;;;; +2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; +2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; +2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; +2333;SLOPE;So;0;ON;;;;;N;;;;; +2334;COUNTERBORE;So;0;ON;;;;;N;;;;; +2335;COUNTERSINK;So;0;ON;;;;;N;;;;; +2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; +2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; +2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; +2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; +233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; +233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; +233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; +233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; +233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; +233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; +2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; +2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; +2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; +2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; +2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; +2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; +2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; +2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; +2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; +2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; +234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;;;; +234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; +234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; +234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; +234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;;;; +234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; +2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; +2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;;;; +2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; +2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; +2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; +2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;;;; +2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; +2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; +2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; +2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; +235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; +235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; +235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; +235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; +235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; +235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; +2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; +2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;;;; +2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; +2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; +2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; +2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; +2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; +2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; +2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; +2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; +236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; +236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; +236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; +236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; +236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; +236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; +2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; +2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; +2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; +2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; +2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; +2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; +2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; +2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; +2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; +2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; +237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; +237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; +237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;; +237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; +237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; +237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; +2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; +2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; +2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; +2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; +2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; +2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; +2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; +2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; +2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; +2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;;;; +238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;;;; +238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;;;; +238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; +238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; +238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; +238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; +2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; +2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; +2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; +2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; +2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; +2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; +2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; +2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; +2398;NEXT PAGE;So;0;ON;;;;;N;;;;; +2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; +239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; +239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; +239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; +239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; +239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; +239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; +23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; +23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; +23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; +23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; +23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; +23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; +23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; +23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; +23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;; +23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;; +23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; +23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; +23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; +23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; +23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; +23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; +23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; +23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;; +23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;; +23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;; +23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;; +23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; +23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; +23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;; +23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; +23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; +23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;; +23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;; +23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; +23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; +23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;; +23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; +23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; +23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; +23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; +23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; +23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; +23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; +23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; +23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; +23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; +23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; +23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; +23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; +23DB;FUSE;So;0;ON;;;;;N;;;;; +23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;;;; +23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;;;; +23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;;;; +23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;;;; +23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; +23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;;;; +23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; +23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; +23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; +23E5;FLATNESS;So;0;ON;;;;;N;;;;; +23E6;AC CURRENT;So;0;ON;;;;;N;;;;; +23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; +23E8;DECIMAL EXPONENT SYMBOL;So;0;ON;;;;;N;;;;; +23E9;BLACK RIGHT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; +23EA;BLACK LEFT-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; +23EB;BLACK UP-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; +23EC;BLACK DOWN-POINTING DOUBLE TRIANGLE;So;0;ON;;;;;N;;;;; +23ED;BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; +23EE;BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; +23EF;BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;; +23F0;ALARM CLOCK;So;0;ON;;;;;N;;;;; +23F1;STOPWATCH;So;0;ON;;;;;N;;;;; +23F2;TIMER CLOCK;So;0;ON;;;;;N;;;;; +23F3;HOURGLASS WITH FLOWING SAND;So;0;ON;;;;;N;;;;; +2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; +2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; +2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; +2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; +2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; +2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; +2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; +2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; +2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; +2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; +240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; +240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; +240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; +240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; +240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; +240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; +2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; +2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; +2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; +2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; +2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; +2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; +2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; +2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; +2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; +2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; +241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; +241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; +241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; +241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; +241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; +241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; +2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; +2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; +2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; +2423;OPEN BOX;So;0;ON;;;;;N;;;;; +2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; +2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; +2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; +2440;OCR HOOK;So;0;ON;;;;;N;;;;; +2441;OCR CHAIR;So;0;ON;;;;;N;;;;; +2442;OCR FORK;So;0;ON;;;;;N;;;;; +2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; +2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; +2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; +2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; +2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; +2448;OCR DASH;So;0;ON;;;;;N;;;;; +2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; +244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; +2460;CIRCLED DIGIT ONE;No;0;ON; 0031;;1;1;N;;;;; +2461;CIRCLED DIGIT TWO;No;0;ON; 0032;;2;2;N;;;;; +2462;CIRCLED DIGIT THREE;No;0;ON; 0033;;3;3;N;;;;; +2463;CIRCLED DIGIT FOUR;No;0;ON; 0034;;4;4;N;;;;; +2464;CIRCLED DIGIT FIVE;No;0;ON; 0035;;5;5;N;;;;; +2465;CIRCLED DIGIT SIX;No;0;ON; 0036;;6;6;N;;;;; +2466;CIRCLED DIGIT SEVEN;No;0;ON; 0037;;7;7;N;;;;; +2467;CIRCLED DIGIT EIGHT;No;0;ON; 0038;;8;8;N;;;;; +2468;CIRCLED DIGIT NINE;No;0;ON; 0039;;9;9;N;;;;; +2469;CIRCLED NUMBER TEN;No;0;ON; 0031 0030;;;10;N;;;;; +246A;CIRCLED NUMBER ELEVEN;No;0;ON; 0031 0031;;;11;N;;;;; +246B;CIRCLED NUMBER TWELVE;No;0;ON; 0031 0032;;;12;N;;;;; +246C;CIRCLED NUMBER THIRTEEN;No;0;ON; 0031 0033;;;13;N;;;;; +246D;CIRCLED NUMBER FOURTEEN;No;0;ON; 0031 0034;;;14;N;;;;; +246E;CIRCLED NUMBER FIFTEEN;No;0;ON; 0031 0035;;;15;N;;;;; +246F;CIRCLED NUMBER SIXTEEN;No;0;ON; 0031 0036;;;16;N;;;;; +2470;CIRCLED NUMBER SEVENTEEN;No;0;ON; 0031 0037;;;17;N;;;;; +2471;CIRCLED NUMBER EIGHTEEN;No;0;ON; 0031 0038;;;18;N;;;;; +2472;CIRCLED NUMBER NINETEEN;No;0;ON; 0031 0039;;;19;N;;;;; +2473;CIRCLED NUMBER TWENTY;No;0;ON; 0032 0030;;;20;N;;;;; +2474;PARENTHESIZED DIGIT ONE;No;0;ON; 0028 0031 0029;;1;1;N;;;;; +2475;PARENTHESIZED DIGIT TWO;No;0;ON; 0028 0032 0029;;2;2;N;;;;; +2476;PARENTHESIZED DIGIT THREE;No;0;ON; 0028 0033 0029;;3;3;N;;;;; +2477;PARENTHESIZED DIGIT FOUR;No;0;ON; 0028 0034 0029;;4;4;N;;;;; +2478;PARENTHESIZED DIGIT FIVE;No;0;ON; 0028 0035 0029;;5;5;N;;;;; +2479;PARENTHESIZED DIGIT SIX;No;0;ON; 0028 0036 0029;;6;6;N;;;;; +247A;PARENTHESIZED DIGIT SEVEN;No;0;ON; 0028 0037 0029;;7;7;N;;;;; +247B;PARENTHESIZED DIGIT EIGHT;No;0;ON; 0028 0038 0029;;8;8;N;;;;; +247C;PARENTHESIZED DIGIT NINE;No;0;ON; 0028 0039 0029;;9;9;N;;;;; +247D;PARENTHESIZED NUMBER TEN;No;0;ON; 0028 0031 0030 0029;;;10;N;;;;; +247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON; 0028 0031 0031 0029;;;11;N;;;;; +247F;PARENTHESIZED NUMBER TWELVE;No;0;ON; 0028 0031 0032 0029;;;12;N;;;;; +2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON; 0028 0031 0033 0029;;;13;N;;;;; +2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON; 0028 0031 0034 0029;;;14;N;;;;; +2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON; 0028 0031 0035 0029;;;15;N;;;;; +2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON; 0028 0031 0036 0029;;;16;N;;;;; +2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON; 0028 0031 0037 0029;;;17;N;;;;; +2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON; 0028 0031 0038 0029;;;18;N;;;;; +2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON; 0028 0031 0039 0029;;;19;N;;;;; +2487;PARENTHESIZED NUMBER TWENTY;No;0;ON; 0028 0032 0030 0029;;;20;N;;;;; +2488;DIGIT ONE FULL STOP;No;0;EN; 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; +2489;DIGIT TWO FULL STOP;No;0;EN; 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; +248A;DIGIT THREE FULL STOP;No;0;EN; 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; +248B;DIGIT FOUR FULL STOP;No;0;EN; 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; +248C;DIGIT FIVE FULL STOP;No;0;EN; 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; +248D;DIGIT SIX FULL STOP;No;0;EN; 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; +248E;DIGIT SEVEN FULL STOP;No;0;EN; 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; +248F;DIGIT EIGHT FULL STOP;No;0;EN; 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; +2490;DIGIT NINE FULL STOP;No;0;EN; 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; +2491;NUMBER TEN FULL STOP;No;0;EN; 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; +2492;NUMBER ELEVEN FULL STOP;No;0;EN; 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; +2493;NUMBER TWELVE FULL STOP;No;0;EN; 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; +2494;NUMBER THIRTEEN FULL STOP;No;0;EN; 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; +2495;NUMBER FOURTEEN FULL STOP;No;0;EN; 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; +2496;NUMBER FIFTEEN FULL STOP;No;0;EN; 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; +2497;NUMBER SIXTEEN FULL STOP;No;0;EN; 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; +2498;NUMBER SEVENTEEN FULL STOP;No;0;EN; 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; +2499;NUMBER EIGHTEEN FULL STOP;No;0;EN; 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; +249A;NUMBER NINETEEN FULL STOP;No;0;EN; 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; +249B;NUMBER TWENTY FULL STOP;No;0;EN; 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; +249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L; 0028 0061 0029;;;;N;;;;; +249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L; 0028 0062 0029;;;;N;;;;; +249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L; 0028 0063 0029;;;;N;;;;; +249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L; 0028 0064 0029;;;;N;;;;; +24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L; 0028 0065 0029;;;;N;;;;; +24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L; 0028 0066 0029;;;;N;;;;; +24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L; 0028 0067 0029;;;;N;;;;; +24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L; 0028 0068 0029;;;;N;;;;; +24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L; 0028 0069 0029;;;;N;;;;; +24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L; 0028 006A 0029;;;;N;;;;; +24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L; 0028 006B 0029;;;;N;;;;; +24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L; 0028 006C 0029;;;;N;;;;; +24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L; 0028 006D 0029;;;;N;;;;; +24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L; 0028 006E 0029;;;;N;;;;; +24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L; 0028 006F 0029;;;;N;;;;; +24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L; 0028 0070 0029;;;;N;;;;; +24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L; 0028 0071 0029;;;;N;;;;; +24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L; 0028 0072 0029;;;;N;;;;; +24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L; 0028 0073 0029;;;;N;;;;; +24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L; 0028 0074 0029;;;;N;;;;; +24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L; 0028 0075 0029;;;;N;;;;; +24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L; 0028 0076 0029;;;;N;;;;; +24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L; 0028 0077 0029;;;;N;;;;; +24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L; 0028 0078 0029;;;;N;;;;; +24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L; 0028 0079 0029;;;;N;;;;; +24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L; 0028 007A 0029;;;;N;;;;; +24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;24D0; +24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;24D1; +24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;24D2; +24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;24D3; +24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;24D4; +24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;24D5; +24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;24D6; +24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;24D7; +24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;24D8; +24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;24D9; +24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;24DA; +24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;24DB; +24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;24DC; +24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;24DD; +24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;24DE; +24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;24DF; +24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;24E0; +24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;24E1; +24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;24E2; +24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;24E3; +24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;24E4; +24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;24E5; +24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;24E6; +24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;24E7; +24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;24E8; +24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;24E9; +24D0;CIRCLED LATIN SMALL LETTER A;So;0;L; 0061;;;;N;;;24B6;;24B6 +24D1;CIRCLED LATIN SMALL LETTER B;So;0;L; 0062;;;;N;;;24B7;;24B7 +24D2;CIRCLED LATIN SMALL LETTER C;So;0;L; 0063;;;;N;;;24B8;;24B8 +24D3;CIRCLED LATIN SMALL LETTER D;So;0;L; 0064;;;;N;;;24B9;;24B9 +24D4;CIRCLED LATIN SMALL LETTER E;So;0;L; 0065;;;;N;;;24BA;;24BA +24D5;CIRCLED LATIN SMALL LETTER F;So;0;L; 0066;;;;N;;;24BB;;24BB +24D6;CIRCLED LATIN SMALL LETTER G;So;0;L; 0067;;;;N;;;24BC;;24BC +24D7;CIRCLED LATIN SMALL LETTER H;So;0;L; 0068;;;;N;;;24BD;;24BD +24D8;CIRCLED LATIN SMALL LETTER I;So;0;L; 0069;;;;N;;;24BE;;24BE +24D9;CIRCLED LATIN SMALL LETTER J;So;0;L; 006A;;;;N;;;24BF;;24BF +24DA;CIRCLED LATIN SMALL LETTER K;So;0;L; 006B;;;;N;;;24C0;;24C0 +24DB;CIRCLED LATIN SMALL LETTER L;So;0;L; 006C;;;;N;;;24C1;;24C1 +24DC;CIRCLED LATIN SMALL LETTER M;So;0;L; 006D;;;;N;;;24C2;;24C2 +24DD;CIRCLED LATIN SMALL LETTER N;So;0;L; 006E;;;;N;;;24C3;;24C3 +24DE;CIRCLED LATIN SMALL LETTER O;So;0;L; 006F;;;;N;;;24C4;;24C4 +24DF;CIRCLED LATIN SMALL LETTER P;So;0;L; 0070;;;;N;;;24C5;;24C5 +24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L; 0071;;;;N;;;24C6;;24C6 +24E1;CIRCLED LATIN SMALL LETTER R;So;0;L; 0072;;;;N;;;24C7;;24C7 +24E2;CIRCLED LATIN SMALL LETTER S;So;0;L; 0073;;;;N;;;24C8;;24C8 +24E3;CIRCLED LATIN SMALL LETTER T;So;0;L; 0074;;;;N;;;24C9;;24C9 +24E4;CIRCLED LATIN SMALL LETTER U;So;0;L; 0075;;;;N;;;24CA;;24CA +24E5;CIRCLED LATIN SMALL LETTER V;So;0;L; 0076;;;;N;;;24CB;;24CB +24E6;CIRCLED LATIN SMALL LETTER W;So;0;L; 0077;;;;N;;;24CC;;24CC +24E7;CIRCLED LATIN SMALL LETTER X;So;0;L; 0078;;;;N;;;24CD;;24CD +24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L; 0079;;;;N;;;24CE;;24CE +24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L; 007A;;;;N;;;24CF;;24CF +24EA;CIRCLED DIGIT ZERO;No;0;ON; 0030;;0;0;N;;;;; +24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;; +24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;; +24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;; +24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;; +24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;; +24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;; +24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;; +24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;; +24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;; +24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;; +24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;; +24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;; +24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;; +24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;; +24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;; +24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;; +24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;; +24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;; +24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;; +24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;; +24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;; +2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; +2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; +2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; +2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; +2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; +2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; +2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; +2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; +2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; +2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; +250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; +250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; +250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; +250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; +250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; +250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; +2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; +2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; +2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; +2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; +2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; +2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; +2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; +2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; +2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; +2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; +251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; +251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; +251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; +251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; +251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; +251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; +2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; +2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; +2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; +2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; +2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; +2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; +2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; +2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; +2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; +2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; +252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; +252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; +252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; +252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; +252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; +252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; +2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; +2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; +2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; +2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; +2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; +2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; +2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; +2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; +2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; +2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; +253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; +253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; +253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; +253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; +253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; +253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; +2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; +2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; +2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; +2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; +2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; +2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; +2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; +2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; +2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; +2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; +254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; +254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; +254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; +254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; +254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; +254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; +2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; +2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; +2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; +2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; +2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; +2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; +2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; +2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; +2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; +2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; +255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; +255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; +255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; +255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; +255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; +255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; +2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; +2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; +2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; +2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; +2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; +2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; +2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; +2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; +2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; +2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; +256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; +256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; +256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; +256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; +256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; +256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; +2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; +2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; +2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; +2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; +2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; +2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; +2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; +2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; +2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; +2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; +257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; +257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; +257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; +257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; +257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; +257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; +2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; +2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; +2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; +2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2588;FULL BLOCK;So;0;ON;;;;;N;;;;; +2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; +258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; +258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; +2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; +2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; +2593;DARK SHADE;So;0;ON;;;;;N;;;;; +2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;; +2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;; +2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;; +2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;; +259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; +25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; +25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; +25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; +25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; +25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; +25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; +25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; +25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; +25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; +25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; +25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; +25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; +25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; +25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; +25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; +25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; +25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; +25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; +25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; +25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; +25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; +25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; +25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; +25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; +25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; +25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; +25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; +25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; +25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; +25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; +25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; +25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; +25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; +25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; +25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; +25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; +25C9;FISHEYE;So;0;ON;;;;;N;;;;; +25CA;LOZENGE;So;0;ON;;;;;N;;;;; +25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; +25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; +25CE;BULLSEYE;So;0;ON;;;;;N;;;;; +25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; +25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; +25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; +25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; +25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; +25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; +25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; +25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; +25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; +25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; +25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; +25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; +25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; +25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; +25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; +25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; +25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; +25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; +25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; +25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; +25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; +25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; +2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; +2601;CLOUD;So;0;ON;;;;;N;;;;; +2602;UMBRELLA;So;0;ON;;;;;N;;;;; +2603;SNOWMAN;So;0;ON;;;;;N;;;;; +2604;COMET;So;0;ON;;;;;N;;;;; +2605;BLACK STAR;So;0;ON;;;;;N;;;;; +2606;WHITE STAR;So;0;ON;;;;;N;;;;; +2607;LIGHTNING;So;0;ON;;;;;N;;;;; +2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; +2609;SUN;So;0;ON;;;;;N;;;;; +260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; +260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; +260C;CONJUNCTION;So;0;ON;;;;;N;;;;; +260D;OPPOSITION;So;0;ON;;;;;N;;;;; +260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; +260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; +2610;BALLOT BOX;So;0;ON;;;;;N;;;;; +2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; +2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; +2613;SALTIRE;So;0;ON;;;;;N;;;;; +2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;; +2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; +2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; +2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; +2618;SHAMROCK;So;0;ON;;;;;N;;;;; +2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; +261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; +261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; +261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; +261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; +261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; +261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; +2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; +2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; +2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; +2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; +2624;CADUCEUS;So;0;ON;;;;;N;;;;; +2625;ANKH;So;0;ON;;;;;N;;;;; +2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; +2627;CHI RHO;So;0;ON;;;;;N;;;;; +2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; +2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; +262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; +262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; +262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; +262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; +262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; +262F;YIN YANG;So;0;ON;;;;;N;;;;; +2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; +2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; +2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; +2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; +2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; +2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; +2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; +2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; +2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; +2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; +263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; +263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; +263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; +263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; +263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; +263F;MERCURY;So;0;ON;;;;;N;;;;; +2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; +2641;EARTH;So;0;ON;;;;;N;;;;; +2642;MALE SIGN;So;0;ON;;;;;N;;;;; +2643;JUPITER;So;0;ON;;;;;N;;;;; +2644;SATURN;So;0;ON;;;;;N;;;;; +2645;URANUS;So;0;ON;;;;;N;;;;; +2646;NEPTUNE;So;0;ON;;;;;N;;;;; +2647;PLUTO;So;0;ON;;;;;N;;;;; +2648;ARIES;So;0;ON;;;;;N;;;;; +2649;TAURUS;So;0;ON;;;;;N;;;;; +264A;GEMINI;So;0;ON;;;;;N;;;;; +264B;CANCER;So;0;ON;;;;;N;;;;; +264C;LEO;So;0;ON;;;;;N;;;;; +264D;VIRGO;So;0;ON;;;;;N;;;;; +264E;LIBRA;So;0;ON;;;;;N;;;;; +264F;SCORPIUS;So;0;ON;;;;;N;;;;; +2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; +2651;CAPRICORN;So;0;ON;;;;;N;;;;; +2652;AQUARIUS;So;0;ON;;;;;N;;;;; +2653;PISCES;So;0;ON;;;;;N;;;;; +2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; +2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; +2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; +2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; +2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; +2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; +265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; +265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; +265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; +265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; +265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; +265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; +2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; +2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; +2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; +2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; +2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; +2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; +2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; +2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; +2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; +2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; +266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; +266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; +266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; +266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; +266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; +266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; +2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; +2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; +2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; +2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;;;; +2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;;;; +2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;;;; +2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;;;; +2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;;;; +2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;;;; +2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;;;; +267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;; +267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; +267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; +267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; +2680;DIE FACE-1;So;0;ON;;;;;N;;;;; +2681;DIE FACE-2;So;0;ON;;;;;N;;;;; +2682;DIE FACE-3;So;0;ON;;;;;N;;;;; +2683;DIE FACE-4;So;0;ON;;;;;N;;;;; +2684;DIE FACE-5;So;0;ON;;;;;N;;;;; +2685;DIE FACE-6;So;0;ON;;;;;N;;;;; +2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;; +2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; +2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;; +2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;; +268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;; +268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;; +268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;; +268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;; +268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;; +268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; +2690;WHITE FLAG;So;0;ON;;;;;N;;;;; +2691;BLACK FLAG;So;0;ON;;;;;N;;;;; +2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; +2693;ANCHOR;So;0;ON;;;;;N;;;;; +2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; +2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; +2696;SCALES;So;0;ON;;;;;N;;;;; +2697;ALEMBIC;So;0;ON;;;;;N;;;;; +2698;FLOWER;So;0;ON;;;;;N;;;;; +2699;GEAR;So;0;ON;;;;;N;;;;; +269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; +269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; +269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; +269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; +269E;THREE LINES CONVERGING RIGHT;So;0;ON;;;;;N;;;;; +269F;THREE LINES CONVERGING LEFT;So;0;ON;;;;;N;;;;; +26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; +26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; +26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; +26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; +26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; +26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; +26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; +26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; +26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; +26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; +26B0;COFFIN;So;0;ON;;;;;N;;;;; +26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; +26B2;NEUTER;So;0;ON;;;;;N;;;;; +26B3;CERES;So;0;ON;;;;;N;;;;; +26B4;PALLAS;So;0;ON;;;;;N;;;;; +26B5;JUNO;So;0;ON;;;;;N;;;;; +26B6;VESTA;So;0;ON;;;;;N;;;;; +26B7;CHIRON;So;0;ON;;;;;N;;;;; +26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;; +26B9;SEXTILE;So;0;ON;;;;;N;;;;; +26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;; +26BB;QUINCUNX;So;0;ON;;;;;N;;;;; +26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;; +26BD;SOCCER BALL;So;0;ON;;;;;N;;;;; +26BE;BASEBALL;So;0;ON;;;;;N;;;;; +26BF;SQUARED KEY;So;0;ON;;;;;N;;;;; +26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;; +26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;; +26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;; +26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;; +26C4;SNOWMAN WITHOUT SNOW;So;0;ON;;;;;N;;;;; +26C5;SUN BEHIND CLOUD;So;0;ON;;;;;N;;;;; +26C6;RAIN;So;0;ON;;;;;N;;;;; +26C7;BLACK SNOWMAN;So;0;ON;;;;;N;;;;; +26C8;THUNDER CLOUD AND RAIN;So;0;ON;;;;;N;;;;; +26C9;TURNED WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; +26CA;TURNED BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; +26CB;WHITE DIAMOND IN SQUARE;So;0;ON;;;;;N;;;;; +26CC;CROSSING LANES;So;0;ON;;;;;N;;;;; +26CD;DISABLED CAR;So;0;ON;;;;;N;;;;; +26CE;OPHIUCHUS;So;0;ON;;;;;N;;;;; +26CF;PICK;So;0;ON;;;;;N;;;;; +26D0;CAR SLIDING;So;0;ON;;;;;N;;;;; +26D1;HELMET WITH WHITE CROSS;So;0;ON;;;;;N;;;;; +26D2;CIRCLED CROSSING LANES;So;0;ON;;;;;N;;;;; +26D3;CHAINS;So;0;ON;;;;;N;;;;; +26D4;NO ENTRY;So;0;ON;;;;;N;;;;; +26D5;ALTERNATE ONE-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; +26D6;BLACK TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; +26D7;WHITE TWO-WAY LEFT WAY TRAFFIC;So;0;ON;;;;;N;;;;; +26D8;BLACK LEFT LANE MERGE;So;0;ON;;;;;N;;;;; +26D9;WHITE LEFT LANE MERGE;So;0;ON;;;;;N;;;;; +26DA;DRIVE SLOW SIGN;So;0;ON;;;;;N;;;;; +26DB;HEAVY WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +26DC;LEFT CLOSED ENTRY;So;0;ON;;;;;N;;;;; +26DD;SQUARED SALTIRE;So;0;ON;;;;;N;;;;; +26DE;FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE;So;0;ON;;;;;N;;;;; +26DF;BLACK TRUCK;So;0;ON;;;;;N;;;;; +26E0;RESTRICTED LEFT ENTRY-1;So;0;ON;;;;;N;;;;; +26E1;RESTRICTED LEFT ENTRY-2;So;0;ON;;;;;N;;;;; +26E2;ASTRONOMICAL SYMBOL FOR URANUS;So;0;ON;;;;;N;;;;; +26E3;HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE;So;0;ON;;;;;N;;;;; +26E4;PENTAGRAM;So;0;ON;;;;;N;;;;; +26E5;RIGHT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; +26E6;LEFT-HANDED INTERLACED PENTAGRAM;So;0;ON;;;;;N;;;;; +26E7;INVERTED PENTAGRAM;So;0;ON;;;;;N;;;;; +26E8;BLACK CROSS ON SHIELD;So;0;ON;;;;;N;;;;; +26E9;SHINTO SHRINE;So;0;ON;;;;;N;;;;; +26EA;CHURCH;So;0;ON;;;;;N;;;;; +26EB;CASTLE;So;0;ON;;;;;N;;;;; +26EC;HISTORIC SITE;So;0;ON;;;;;N;;;;; +26ED;GEAR WITHOUT HUB;So;0;ON;;;;;N;;;;; +26EE;GEAR WITH HANDLES;So;0;ON;;;;;N;;;;; +26EF;MAP SYMBOL FOR LIGHTHOUSE;So;0;ON;;;;;N;;;;; +26F0;MOUNTAIN;So;0;ON;;;;;N;;;;; +26F1;UMBRELLA ON GROUND;So;0;ON;;;;;N;;;;; +26F2;FOUNTAIN;So;0;ON;;;;;N;;;;; +26F3;FLAG IN HOLE;So;0;ON;;;;;N;;;;; +26F4;FERRY;So;0;ON;;;;;N;;;;; +26F5;SAILBOAT;So;0;ON;;;;;N;;;;; +26F6;SQUARE FOUR CORNERS;So;0;ON;;;;;N;;;;; +26F7;SKIER;So;0;ON;;;;;N;;;;; +26F8;ICE SKATE;So;0;ON;;;;;N;;;;; +26F9;PERSON WITH BALL;So;0;ON;;;;;N;;;;; +26FA;TENT;So;0;ON;;;;;N;;;;; +26FB;JAPANESE BANK SYMBOL;So;0;ON;;;;;N;;;;; +26FC;HEADSTONE GRAVEYARD SYMBOL;So;0;ON;;;;;N;;;;; +26FD;FUEL PUMP;So;0;ON;;;;;N;;;;; +26FE;CUP ON BLACK SQUARE;So;0;ON;;;;;N;;;;; +26FF;WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE;So;0;ON;;;;;N;;;;; +2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; +2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; +2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; +2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; +2705;WHITE HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; +2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; +2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; +2708;AIRPLANE;So;0;ON;;;;;N;;;;; +2709;ENVELOPE;So;0;ON;;;;;N;;;;; +270A;RAISED FIST;So;0;ON;;;;;N;;;;; +270B;RAISED HAND;So;0;ON;;;;;N;;;;; +270C;VICTORY HAND;So;0;ON;;;;;N;;;;; +270D;WRITING HAND;So;0;ON;;;;;N;;;;; +270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; +270F;PENCIL;So;0;ON;;;;;N;;;;; +2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; +2711;WHITE NIB;So;0;ON;;;;;N;;;;; +2712;BLACK NIB;So;0;ON;;;;;N;;;;; +2713;CHECK MARK;So;0;ON;;;;;N;;;;; +2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; +2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; +2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; +2717;BALLOT X;So;0;ON;;;;;N;;;;; +2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; +2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; +271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; +271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; +271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; +271D;LATIN CROSS;So;0;ON;;;;;N;;;;; +271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; +271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; +2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; +2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; +2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; +2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; +2728;SPARKLES;So;0;ON;;;;;N;;;;; +2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; +272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; +272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; +272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; +272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; +272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; +272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; +2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; +2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; +2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; +2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; +2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; +2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; +2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; +273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; +273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; +273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; +2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; +2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; +2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; +2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; +2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; +2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; +2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; +2747;SPARKLE;So;0;ON;;;;;N;;;;; +2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; +2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; +274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; +274C;CROSS MARK;So;0;ON;;;;;N;;;;; +274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; +274E;NEGATIVE SQUARED CROSS MARK;So;0;ON;;;;;N;;;;; +274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2753;BLACK QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2754;WHITE QUESTION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2755;WHITE EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; +2757;HEAVY EXCLAMATION MARK SYMBOL;So;0;ON;;;;;N;;;;; +2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; +2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; +275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; +275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275F;HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2760;HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; +2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; +2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; +2766;FLORAL HEART;So;0;ON;;;;;N;;;;; +2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; +2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; +2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; +2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; +2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; +277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; +277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; +277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; +277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; +277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; +277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; +2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; +2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; +2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; +2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; +2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; +2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; +2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; +2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; +2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; +2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; +278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; +278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; +278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; +278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; +278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; +278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; +2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; +2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; +2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; +2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; +2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; +2795;HEAVY PLUS SIGN;So;0;ON;;;;;N;;;;; +2796;HEAVY MINUS SIGN;So;0;ON;;;;;N;;;;; +2797;HEAVY DIVISION SIGN;So;0;ON;;;;;N;;;;; +2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; +2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; +279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; +279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; +279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; +279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; +279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; +279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; +27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; +27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; +27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; +27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; +27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; +27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; +27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; +27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; +27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; +27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; +27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; +27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; +27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; +27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27B0;CURLY LOOP;So;0;ON;;;;;N;;;;; +27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; +27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; +27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; +27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; +27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; +27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; +27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; +27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; +27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; +27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; +27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; +27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; +27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; +27BF;DOUBLE CURLY LOOP;So;0;ON;;;;;N;;;;; +27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; +27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; +27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; +27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; +27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; +27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; +27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; +27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;; +27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;; +27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;; +27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;; +27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;; +27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; +27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; +27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; +27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; +27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; +27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; +27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; +27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;; +27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;; +27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;; +27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;; +27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;; +27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;; +27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;; +27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;; +27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;; +27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;; +27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;; +27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;; +27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; +27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; +27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; +27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; +27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; +27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; +2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;; +2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;; +2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;; +2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;; +2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;; +2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;; +2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;; +2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;; +2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;; +2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;; +280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;; +280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;; +280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;; +280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;; +280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;; +280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;; +2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;; +2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;; +2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;; +2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;; +2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;; +2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;; +2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;; +2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;; +2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;; +2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;; +281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;; +281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;; +281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;; +281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;; +281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;; +281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;; +2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;; +2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;; +2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;; +2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;; +2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;; +2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;; +2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;; +2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;; +2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;; +2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;; +282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;; +282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;; +282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;; +282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;; +282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;; +282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;; +2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;; +2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;; +2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;; +2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;; +2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;; +2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;; +2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;; +2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;; +2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;; +2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;; +283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;; +283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;; +283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;; +283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;; +283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;; +283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;; +2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;; +2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;; +2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;; +2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;; +2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;; +2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;; +2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;; +2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;; +2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;; +2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;; +284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;; +284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;; +284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;; +284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;; +284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;; +284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;; +2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;; +2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;; +2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;; +2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;; +2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;; +2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;; +2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;; +2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;; +2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;; +2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;; +285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;; +285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;; +285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;; +285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;; +285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;; +285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;; +2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;; +2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;; +2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;; +2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;; +2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;; +2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;; +2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;; +2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;; +2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;; +2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;; +286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;; +286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;; +286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;; +286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;; +286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;; +286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;; +2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;; +2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;; +2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;; +2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;; +2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;; +2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;; +2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;; +2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;; +2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;; +2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;; +287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;; +287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;; +287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;; +287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;; +287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;; +287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;; +2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;; +2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;; +2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;; +2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;; +2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;; +2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;; +2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;; +2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;; +2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;; +2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;; +288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;; +288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;; +288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;; +288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;; +288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;; +288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;; +2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;; +2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;; +2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;; +2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;; +2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;; +2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;; +2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;; +2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;; +2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;; +2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;; +289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;; +289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;; +289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;; +289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;; +289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;; +289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;; +28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;; +28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;; +28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;; +28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;; +28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;; +28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;; +28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;; +28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;; +28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;; +28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;; +28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;; +28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;; +28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;; +28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;; +28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;; +28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;; +28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;; +28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;; +28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;; +28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;; +28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;; +28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;; +28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;; +28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;; +28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;; +28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;; +28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;; +28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;; +28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;; +28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;; +28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;; +28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;; +28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;; +28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;; +28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;; +28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;; +28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;; +28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;; +28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;; +28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;; +28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;; +28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;; +28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;; +28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;; +28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;; +28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;; +28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;; +28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;; +28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;; +28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;; +28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;; +28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;; +28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;; +28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;; +28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;; +28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;; +28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;; +28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;; +28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;; +28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;; +28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;; +28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;; +28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;; +28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;; +28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;; +28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;; +28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;; +28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;; +28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;; +28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;; +28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;; +28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;; +28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;; +28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;; +28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;; +28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;; +28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;; +28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;; +28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;; +28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;; +28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;; +28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;; +28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;; +28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;; +28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;; +28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;; +28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;; +28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;; +28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;; +28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;; +28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;; +28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;; +28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;; +28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;; +28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;; +28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;; +2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; +290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; +290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; +2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; +2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; +2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; +2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;; +292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;; +292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;; +2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;; +2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;; +2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;; +2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;; +2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;; +293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;; +293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; +2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; +2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; +294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; +294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; +294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; +294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; +294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; +2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; +2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; +2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; +2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; +2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; +2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; +2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; +2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; +2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; +2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; +295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; +295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; +295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; +295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; +295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; +295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; +2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; +2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; +2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; +2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; +2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; +296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; +296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; +296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; +296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;; +2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;; +2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;; +297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;; +297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;; +297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;; +297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;; +2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;; +2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;; +2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;; +2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;; +2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;; +2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;; +2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;; +2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;; +298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;; +298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;; +298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;; +298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;; +298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;; +298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;; +2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;; +2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;; +2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;; +2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; +2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; +2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; +2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; +2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; +2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; +2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;; +299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;; +299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; +299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;; +299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;; +299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;; +299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;; +29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; +29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; +29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;; +29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;; +29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; +29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;; +29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;; +29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;; +29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;; +29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;; +29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;; +29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;; +29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;; +29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;; +29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;; +29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; +29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; +29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; +29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;; +29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;; +29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;; +29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;; +29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;; +29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; +29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; +29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; +29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; +29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;; +29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;; +29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;; +29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;; +29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;; +29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;; +29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;; +29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;; +29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; +29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; +29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; +29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; +29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;; +29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;; +29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;; +29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;; +29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;; +29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;; +29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; +29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; +29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; +29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;; +29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;; +29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;; +29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;; +29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;; +29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;; +29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;; +29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;; +29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;; +29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; +29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;; +29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;; +29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +29FE;TINY;Sm;0;ON;;;;;N;;;;; +29FF;MINY;Sm;0;ON;;;;;N;;;;; +2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;; +2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; +2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;; +2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;; +2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;; +2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;; +2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;; +2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;; +2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; +2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;; +2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON; 222B 222B 222B 222B;;;;Y;;;;; +2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;; +2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;; +2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;; +2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;; +2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; +2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; +2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;; +2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;; +2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;; +2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;; +2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;; +2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +2A1D;JOIN;Sm;0;ON;;;;;N;;;;; +2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;; +2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;; +2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;; +2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;; +2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; +2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;; +2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;; +2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;; +2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;; +2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; +2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;; +2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;; +2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; +2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;; +2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;; +2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; +2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; +2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;; +2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;; +2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;; +2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;; +2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;; +2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;; +2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;; +2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;; +2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;; +2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;; +2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; +2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;; +2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;; +2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; +2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; +2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; +2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; +2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; +2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; +2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; +2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; +2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; +2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;; +2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;; +2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;; +2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;; +2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;; +2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A74;DOUBLE COLON EQUAL;Sm;0;ON; 003A 003A 003D;;;;Y;;;;; +2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D;;;;N;;;;; +2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D 003D;;;;N;;;;; +2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;; +2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;; +2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; +2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; +2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; +2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; +2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;; +2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;; +2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; +2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; +2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; +2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; +2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;; +2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;; +2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; +2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; +2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;; +2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;; +2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;; +2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;; +2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;; +2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;; +2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; +2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; +2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;; +2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;; +2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;; +2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;; +2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;; +2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;;;; +2ADD;NONFORKING;Sm;0;ON;;;;;N;;;;; +2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;; +2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;; +2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;; +2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;; +2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;; +2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; +2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; +2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;; +2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; +2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; +2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;; +2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;; +2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;; +2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;; +2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;; +2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; +2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;; +2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;; +2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;; +2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; +2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; +2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;; +2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; +2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; +2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; +2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; +2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; +2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; +2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;; +2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; +2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; +2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; +2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; +2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;; +2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;; +2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;; +2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; +2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; +2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;; +2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;; +2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;; +2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; +2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; +2B55;HEAVY LARGE CIRCLE;So;0;ON;;;;;N;;;;; +2B56;HEAVY OVAL WITH OVAL INSIDE;So;0;ON;;;;;N;;;;; +2B57;HEAVY CIRCLE WITH CIRCLE INSIDE;So;0;ON;;;;;N;;;;; +2B58;HEAVY CIRCLE;So;0;ON;;;;;N;;;;; +2B59;HEAVY CIRCLED SALTIRE;So;0;ON;;;;;N;;;;; +2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; +2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; +2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; +2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; +2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; +2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; +2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; +2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; +2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; +2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; +2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; +2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; +2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; +2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; +2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; +2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; +2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; +2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; +2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; +2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; +2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; +2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; +2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; +2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; +2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; +2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; +2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; +2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; +2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; +2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; +2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; +2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; +2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; +2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; +2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; +2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; +2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; +2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; +2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; +2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; +2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; +2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; +2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; +2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; +2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; +2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; +2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 +2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 +2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 +2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 +2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 +2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 +2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 +2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 +2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 +2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 +2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A +2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B +2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C +2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D +2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E +2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F +2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 +2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 +2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 +2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 +2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 +2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 +2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 +2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 +2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 +2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 +2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A +2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B +2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C +2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D +2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E +2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F +2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 +2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 +2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 +2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 +2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 +2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 +2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 +2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 +2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 +2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 +2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A +2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B +2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C +2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D +2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; +2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 +2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; +2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; +2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; +2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A +2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E +2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; +2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 +2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; +2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 +2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; +2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B +2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251; +2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271; +2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250; +2C70;LATIN CAPITAL LETTER TURNED ALPHA;Lu;0;L;;;;;N;;;;0252; +2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;; +2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73; +2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72 +2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; +2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; +2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 +2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; +2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;; +2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;; +2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;; +2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;; +2C7C;LATIN SUBSCRIPT SMALL LETTER J;Ll;0;L; 006A;;;;N;;;;; +2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L; 0056;;;;N;;;;; +2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F; +2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240; +2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; +2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 +2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; +2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 +2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; +2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 +2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; +2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 +2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; +2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 +2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; +2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A +2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; +2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C +2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; +2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E +2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; +2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 +2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; +2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 +2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; +2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 +2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; +2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 +2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; +2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 +2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; +2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A +2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; +2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C +2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; +2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E +2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; +2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 +2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; +2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 +2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; +2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 +2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; +2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 +2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; +2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 +2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; +2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA +2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; +2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC +2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; +2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE +2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; +2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 +2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; +2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 +2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; +2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 +2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; +2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 +2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; +2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 +2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; +2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA +2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; +2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC +2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; +2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE +2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; +2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 +2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; +2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 +2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; +2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 +2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; +2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 +2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; +2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 +2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; +2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA +2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; +2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC +2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; +2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE +2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; +2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 +2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; +2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 +2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; +2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 +2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; +2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 +2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; +2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 +2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; +2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA +2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; +2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC +2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; +2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE +2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; +2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 +2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; +2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 +2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; +2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; +2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; +2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; +2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; +2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; +2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; +2CEB;COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI;Lu;0;L;;;;;N;;;;2CEC; +2CEC;COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI;Ll;0;L;;;;;N;;;2CEB;;2CEB +2CED;COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA;Lu;0;L;;;;;N;;;;2CEE; +2CEE;COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA;Ll;0;L;;;;;N;;;2CED;;2CED +2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;; +2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;; +2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;; +2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; +2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; +2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; +2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; +2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; +2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0 +2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;;10A1;;10A1 +2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;;10A2;;10A2 +2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;;10A3;;10A3 +2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;;10A4;;10A4 +2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;;10A5;;10A5 +2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;;10A6;;10A6 +2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;;10A7;;10A7 +2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;;10A8;;10A8 +2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;;10A9;;10A9 +2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;;10AA;;10AA +2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;;10AB;;10AB +2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;;10AC;;10AC +2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;;10AD;;10AD +2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;;10AE;;10AE +2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;;10AF;;10AF +2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;;10B0;;10B0 +2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;;10B1;;10B1 +2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;;10B2;;10B2 +2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;;10B3;;10B3 +2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;;10B4;;10B4 +2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;;10B5;;10B5 +2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;;10B6;;10B6 +2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;;10B7;;10B7 +2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;;10B8;;10B8 +2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;;10B9;;10B9 +2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;;10BA;;10BA +2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;;10BB;;10BB +2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;;10BC;;10BC +2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;;10BD;;10BD +2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;;10BE;;10BE +2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;;10BF;;10BF +2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;;10C0;;10C0 +2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;;10C1;;10C1 +2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;;10C2;;10C2 +2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3 +2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4 +2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5 +2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; +2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; +2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; +2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; +2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; +2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; +2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; +2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; +2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; +2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; +2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; +2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; +2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; +2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; +2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; +2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; +2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;;;; +2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; +2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; +2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; +2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; +2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; +2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; +2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; +2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; +2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; +2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; +2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; +2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; +2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; +2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; +2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; +2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; +2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; +2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; +2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;;;; +2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; +2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; +2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; +2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; +2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;;;; +2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; +2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; +2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; +2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; +2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; +2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; +2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; +2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; +2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; +2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; +2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; +2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;; +2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; +2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L; 2D61;;;;N;;;;; +2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;; +2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;; +2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; +2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; +2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; +2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; +2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; +2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; +2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; +2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; +2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; +2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; +2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; +2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; +2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; +2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; +2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; +2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; +2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; +2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; +2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; +2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; +2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; +2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; +2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; +2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; +2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; +2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; +2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; +2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; +2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; +2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; +2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; +2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; +2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; +2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; +2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; +2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; +2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; +2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; +2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; +2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; +2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; +2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; +2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; +2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; +2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; +2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; +2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; +2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; +2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; +2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; +2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; +2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; +2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; +2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; +2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; +2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; +2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; +2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; +2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; +2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; +2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; +2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; +2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; +2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; +2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; +2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; +2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; +2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; +2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; +2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;; +2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;; +2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;; +2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;; +2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;; +2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;; +2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;; +2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;; +2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;; +2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;; +2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;; +2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;; +2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;; +2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;; +2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;; +2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;; +2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;; +2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;; +2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; +2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;; +2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; +2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;; +2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;; +2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;; +2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;; +2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;; +2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;; +2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;; +2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;; +2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;; +2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; +2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;; +2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; +2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; +2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; +2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; +2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; +2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; +2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; +2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;; +2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;; +2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;; +2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;; +2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; +2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; +2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;; +2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;; +2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;; +2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;; +2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; +2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; +2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; +2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; +2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;; +2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;; +2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;; +2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; +2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;; +2E30;RING POINT;Po;0;ON;;;;;N;;;;; +2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;; +2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; +2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; +2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; +2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; +2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; +2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; +2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; +2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; +2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; +2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; +2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; +2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; +2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; +2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; +2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; +2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; +2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; +2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; +2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; +2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; +2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; +2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; +2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; +2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; +2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; +2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; +2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; +2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; +2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; +2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; +2E9F;CJK RADICAL MOTHER;So;0;ON; 6BCD;;;;N;;;;; +2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; +2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; +2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; +2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; +2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; +2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; +2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; +2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; +2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; +2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; +2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; +2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; +2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; +2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; +2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; +2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; +2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; +2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; +2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; +2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; +2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; +2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; +2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; +2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; +2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; +2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; +2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; +2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; +2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; +2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; +2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; +2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; +2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; +2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; +2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; +2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; +2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; +2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; +2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; +2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; +2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; +2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; +2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; +2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; +2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; +2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; +2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; +2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; +2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; +2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; +2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; +2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; +2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; +2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; +2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; +2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; +2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; +2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; +2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; +2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; +2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; +2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; +2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; +2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; +2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; +2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; +2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; +2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; +2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; +2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; +2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; +2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; +2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; +2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; +2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; +2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; +2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; +2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; +2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; +2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; +2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; +2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; +2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; +2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON; 9F9F;;;;N;;;;; +2F00;KANGXI RADICAL ONE;So;0;ON; 4E00;;;;N;;;;; +2F01;KANGXI RADICAL LINE;So;0;ON; 4E28;;;;N;;;;; +2F02;KANGXI RADICAL DOT;So;0;ON; 4E36;;;;N;;;;; +2F03;KANGXI RADICAL SLASH;So;0;ON; 4E3F;;;;N;;;;; +2F04;KANGXI RADICAL SECOND;So;0;ON; 4E59;;;;N;;;;; +2F05;KANGXI RADICAL HOOK;So;0;ON; 4E85;;;;N;;;;; +2F06;KANGXI RADICAL TWO;So;0;ON; 4E8C;;;;N;;;;; +2F07;KANGXI RADICAL LID;So;0;ON; 4EA0;;;;N;;;;; +2F08;KANGXI RADICAL MAN;So;0;ON; 4EBA;;;;N;;;;; +2F09;KANGXI RADICAL LEGS;So;0;ON; 513F;;;;N;;;;; +2F0A;KANGXI RADICAL ENTER;So;0;ON; 5165;;;;N;;;;; +2F0B;KANGXI RADICAL EIGHT;So;0;ON; 516B;;;;N;;;;; +2F0C;KANGXI RADICAL DOWN BOX;So;0;ON; 5182;;;;N;;;;; +2F0D;KANGXI RADICAL COVER;So;0;ON; 5196;;;;N;;;;; +2F0E;KANGXI RADICAL ICE;So;0;ON; 51AB;;;;N;;;;; +2F0F;KANGXI RADICAL TABLE;So;0;ON; 51E0;;;;N;;;;; +2F10;KANGXI RADICAL OPEN BOX;So;0;ON; 51F5;;;;N;;;;; +2F11;KANGXI RADICAL KNIFE;So;0;ON; 5200;;;;N;;;;; +2F12;KANGXI RADICAL POWER;So;0;ON; 529B;;;;N;;;;; +2F13;KANGXI RADICAL WRAP;So;0;ON; 52F9;;;;N;;;;; +2F14;KANGXI RADICAL SPOON;So;0;ON; 5315;;;;N;;;;; +2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON; 531A;;;;N;;;;; +2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON; 5338;;;;N;;;;; +2F17;KANGXI RADICAL TEN;So;0;ON; 5341;;;;N;;;;; +2F18;KANGXI RADICAL DIVINATION;So;0;ON; 535C;;;;N;;;;; +2F19;KANGXI RADICAL SEAL;So;0;ON; 5369;;;;N;;;;; +2F1A;KANGXI RADICAL CLIFF;So;0;ON; 5382;;;;N;;;;; +2F1B;KANGXI RADICAL PRIVATE;So;0;ON; 53B6;;;;N;;;;; +2F1C;KANGXI RADICAL AGAIN;So;0;ON; 53C8;;;;N;;;;; +2F1D;KANGXI RADICAL MOUTH;So;0;ON; 53E3;;;;N;;;;; +2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON; 56D7;;;;N;;;;; +2F1F;KANGXI RADICAL EARTH;So;0;ON; 571F;;;;N;;;;; +2F20;KANGXI RADICAL SCHOLAR;So;0;ON; 58EB;;;;N;;;;; +2F21;KANGXI RADICAL GO;So;0;ON; 5902;;;;N;;;;; +2F22;KANGXI RADICAL GO SLOWLY;So;0;ON; 590A;;;;N;;;;; +2F23;KANGXI RADICAL EVENING;So;0;ON; 5915;;;;N;;;;; +2F24;KANGXI RADICAL BIG;So;0;ON; 5927;;;;N;;;;; +2F25;KANGXI RADICAL WOMAN;So;0;ON; 5973;;;;N;;;;; +2F26;KANGXI RADICAL CHILD;So;0;ON; 5B50;;;;N;;;;; +2F27;KANGXI RADICAL ROOF;So;0;ON; 5B80;;;;N;;;;; +2F28;KANGXI RADICAL INCH;So;0;ON; 5BF8;;;;N;;;;; +2F29;KANGXI RADICAL SMALL;So;0;ON; 5C0F;;;;N;;;;; +2F2A;KANGXI RADICAL LAME;So;0;ON; 5C22;;;;N;;;;; +2F2B;KANGXI RADICAL CORPSE;So;0;ON; 5C38;;;;N;;;;; +2F2C;KANGXI RADICAL SPROUT;So;0;ON; 5C6E;;;;N;;;;; +2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON; 5C71;;;;N;;;;; +2F2E;KANGXI RADICAL RIVER;So;0;ON; 5DDB;;;;N;;;;; +2F2F;KANGXI RADICAL WORK;So;0;ON; 5DE5;;;;N;;;;; +2F30;KANGXI RADICAL ONESELF;So;0;ON; 5DF1;;;;N;;;;; +2F31;KANGXI RADICAL TURBAN;So;0;ON; 5DFE;;;;N;;;;; +2F32;KANGXI RADICAL DRY;So;0;ON; 5E72;;;;N;;;;; +2F33;KANGXI RADICAL SHORT THREAD;So;0;ON; 5E7A;;;;N;;;;; +2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON; 5E7F;;;;N;;;;; +2F35;KANGXI RADICAL LONG STRIDE;So;0;ON; 5EF4;;;;N;;;;; +2F36;KANGXI RADICAL TWO HANDS;So;0;ON; 5EFE;;;;N;;;;; +2F37;KANGXI RADICAL SHOOT;So;0;ON; 5F0B;;;;N;;;;; +2F38;KANGXI RADICAL BOW;So;0;ON; 5F13;;;;N;;;;; +2F39;KANGXI RADICAL SNOUT;So;0;ON; 5F50;;;;N;;;;; +2F3A;KANGXI RADICAL BRISTLE;So;0;ON; 5F61;;;;N;;;;; +2F3B;KANGXI RADICAL STEP;So;0;ON; 5F73;;;;N;;;;; +2F3C;KANGXI RADICAL HEART;So;0;ON; 5FC3;;;;N;;;;; +2F3D;KANGXI RADICAL HALBERD;So;0;ON; 6208;;;;N;;;;; +2F3E;KANGXI RADICAL DOOR;So;0;ON; 6236;;;;N;;;;; +2F3F;KANGXI RADICAL HAND;So;0;ON; 624B;;;;N;;;;; +2F40;KANGXI RADICAL BRANCH;So;0;ON; 652F;;;;N;;;;; +2F41;KANGXI RADICAL RAP;So;0;ON; 6534;;;;N;;;;; +2F42;KANGXI RADICAL SCRIPT;So;0;ON; 6587;;;;N;;;;; +2F43;KANGXI RADICAL DIPPER;So;0;ON; 6597;;;;N;;;;; +2F44;KANGXI RADICAL AXE;So;0;ON; 65A4;;;;N;;;;; +2F45;KANGXI RADICAL SQUARE;So;0;ON; 65B9;;;;N;;;;; +2F46;KANGXI RADICAL NOT;So;0;ON; 65E0;;;;N;;;;; +2F47;KANGXI RADICAL SUN;So;0;ON; 65E5;;;;N;;;;; +2F48;KANGXI RADICAL SAY;So;0;ON; 66F0;;;;N;;;;; +2F49;KANGXI RADICAL MOON;So;0;ON; 6708;;;;N;;;;; +2F4A;KANGXI RADICAL TREE;So;0;ON; 6728;;;;N;;;;; +2F4B;KANGXI RADICAL LACK;So;0;ON; 6B20;;;;N;;;;; +2F4C;KANGXI RADICAL STOP;So;0;ON; 6B62;;;;N;;;;; +2F4D;KANGXI RADICAL DEATH;So;0;ON; 6B79;;;;N;;;;; +2F4E;KANGXI RADICAL WEAPON;So;0;ON; 6BB3;;;;N;;;;; +2F4F;KANGXI RADICAL DO NOT;So;0;ON; 6BCB;;;;N;;;;; +2F50;KANGXI RADICAL COMPARE;So;0;ON; 6BD4;;;;N;;;;; +2F51;KANGXI RADICAL FUR;So;0;ON; 6BDB;;;;N;;;;; +2F52;KANGXI RADICAL CLAN;So;0;ON; 6C0F;;;;N;;;;; +2F53;KANGXI RADICAL STEAM;So;0;ON; 6C14;;;;N;;;;; +2F54;KANGXI RADICAL WATER;So;0;ON; 6C34;;;;N;;;;; +2F55;KANGXI RADICAL FIRE;So;0;ON; 706B;;;;N;;;;; +2F56;KANGXI RADICAL CLAW;So;0;ON; 722A;;;;N;;;;; +2F57;KANGXI RADICAL FATHER;So;0;ON; 7236;;;;N;;;;; +2F58;KANGXI RADICAL DOUBLE X;So;0;ON; 723B;;;;N;;;;; +2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON; 723F;;;;N;;;;; +2F5A;KANGXI RADICAL SLICE;So;0;ON; 7247;;;;N;;;;; +2F5B;KANGXI RADICAL FANG;So;0;ON; 7259;;;;N;;;;; +2F5C;KANGXI RADICAL COW;So;0;ON; 725B;;;;N;;;;; +2F5D;KANGXI RADICAL DOG;So;0;ON; 72AC;;;;N;;;;; +2F5E;KANGXI RADICAL PROFOUND;So;0;ON; 7384;;;;N;;;;; +2F5F;KANGXI RADICAL JADE;So;0;ON; 7389;;;;N;;;;; +2F60;KANGXI RADICAL MELON;So;0;ON; 74DC;;;;N;;;;; +2F61;KANGXI RADICAL TILE;So;0;ON; 74E6;;;;N;;;;; +2F62;KANGXI RADICAL SWEET;So;0;ON; 7518;;;;N;;;;; +2F63;KANGXI RADICAL LIFE;So;0;ON; 751F;;;;N;;;;; +2F64;KANGXI RADICAL USE;So;0;ON; 7528;;;;N;;;;; +2F65;KANGXI RADICAL FIELD;So;0;ON; 7530;;;;N;;;;; +2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON; 758B;;;;N;;;;; +2F67;KANGXI RADICAL SICKNESS;So;0;ON; 7592;;;;N;;;;; +2F68;KANGXI RADICAL DOTTED TENT;So;0;ON; 7676;;;;N;;;;; +2F69;KANGXI RADICAL WHITE;So;0;ON; 767D;;;;N;;;;; +2F6A;KANGXI RADICAL SKIN;So;0;ON; 76AE;;;;N;;;;; +2F6B;KANGXI RADICAL DISH;So;0;ON; 76BF;;;;N;;;;; +2F6C;KANGXI RADICAL EYE;So;0;ON; 76EE;;;;N;;;;; +2F6D;KANGXI RADICAL SPEAR;So;0;ON; 77DB;;;;N;;;;; +2F6E;KANGXI RADICAL ARROW;So;0;ON; 77E2;;;;N;;;;; +2F6F;KANGXI RADICAL STONE;So;0;ON; 77F3;;;;N;;;;; +2F70;KANGXI RADICAL SPIRIT;So;0;ON; 793A;;;;N;;;;; +2F71;KANGXI RADICAL TRACK;So;0;ON; 79B8;;;;N;;;;; +2F72;KANGXI RADICAL GRAIN;So;0;ON; 79BE;;;;N;;;;; +2F73;KANGXI RADICAL CAVE;So;0;ON; 7A74;;;;N;;;;; +2F74;KANGXI RADICAL STAND;So;0;ON; 7ACB;;;;N;;;;; +2F75;KANGXI RADICAL BAMBOO;So;0;ON; 7AF9;;;;N;;;;; +2F76;KANGXI RADICAL RICE;So;0;ON; 7C73;;;;N;;;;; +2F77;KANGXI RADICAL SILK;So;0;ON; 7CF8;;;;N;;;;; +2F78;KANGXI RADICAL JAR;So;0;ON; 7F36;;;;N;;;;; +2F79;KANGXI RADICAL NET;So;0;ON; 7F51;;;;N;;;;; +2F7A;KANGXI RADICAL SHEEP;So;0;ON; 7F8A;;;;N;;;;; +2F7B;KANGXI RADICAL FEATHER;So;0;ON; 7FBD;;;;N;;;;; +2F7C;KANGXI RADICAL OLD;So;0;ON; 8001;;;;N;;;;; +2F7D;KANGXI RADICAL AND;So;0;ON; 800C;;;;N;;;;; +2F7E;KANGXI RADICAL PLOW;So;0;ON; 8012;;;;N;;;;; +2F7F;KANGXI RADICAL EAR;So;0;ON; 8033;;;;N;;;;; +2F80;KANGXI RADICAL BRUSH;So;0;ON; 807F;;;;N;;;;; +2F81;KANGXI RADICAL MEAT;So;0;ON; 8089;;;;N;;;;; +2F82;KANGXI RADICAL MINISTER;So;0;ON; 81E3;;;;N;;;;; +2F83;KANGXI RADICAL SELF;So;0;ON; 81EA;;;;N;;;;; +2F84;KANGXI RADICAL ARRIVE;So;0;ON; 81F3;;;;N;;;;; +2F85;KANGXI RADICAL MORTAR;So;0;ON; 81FC;;;;N;;;;; +2F86;KANGXI RADICAL TONGUE;So;0;ON; 820C;;;;N;;;;; +2F87;KANGXI RADICAL OPPOSE;So;0;ON; 821B;;;;N;;;;; +2F88;KANGXI RADICAL BOAT;So;0;ON; 821F;;;;N;;;;; +2F89;KANGXI RADICAL STOPPING;So;0;ON; 826E;;;;N;;;;; +2F8A;KANGXI RADICAL COLOR;So;0;ON; 8272;;;;N;;;;; +2F8B;KANGXI RADICAL GRASS;So;0;ON; 8278;;;;N;;;;; +2F8C;KANGXI RADICAL TIGER;So;0;ON; 864D;;;;N;;;;; +2F8D;KANGXI RADICAL INSECT;So;0;ON; 866B;;;;N;;;;; +2F8E;KANGXI RADICAL BLOOD;So;0;ON; 8840;;;;N;;;;; +2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON; 884C;;;;N;;;;; +2F90;KANGXI RADICAL CLOTHES;So;0;ON; 8863;;;;N;;;;; +2F91;KANGXI RADICAL WEST;So;0;ON; 897E;;;;N;;;;; +2F92;KANGXI RADICAL SEE;So;0;ON; 898B;;;;N;;;;; +2F93;KANGXI RADICAL HORN;So;0;ON; 89D2;;;;N;;;;; +2F94;KANGXI RADICAL SPEECH;So;0;ON; 8A00;;;;N;;;;; +2F95;KANGXI RADICAL VALLEY;So;0;ON; 8C37;;;;N;;;;; +2F96;KANGXI RADICAL BEAN;So;0;ON; 8C46;;;;N;;;;; +2F97;KANGXI RADICAL PIG;So;0;ON; 8C55;;;;N;;;;; +2F98;KANGXI RADICAL BADGER;So;0;ON; 8C78;;;;N;;;;; +2F99;KANGXI RADICAL SHELL;So;0;ON; 8C9D;;;;N;;;;; +2F9A;KANGXI RADICAL RED;So;0;ON; 8D64;;;;N;;;;; +2F9B;KANGXI RADICAL RUN;So;0;ON; 8D70;;;;N;;;;; +2F9C;KANGXI RADICAL FOOT;So;0;ON; 8DB3;;;;N;;;;; +2F9D;KANGXI RADICAL BODY;So;0;ON; 8EAB;;;;N;;;;; +2F9E;KANGXI RADICAL CART;So;0;ON; 8ECA;;;;N;;;;; +2F9F;KANGXI RADICAL BITTER;So;0;ON; 8F9B;;;;N;;;;; +2FA0;KANGXI RADICAL MORNING;So;0;ON; 8FB0;;;;N;;;;; +2FA1;KANGXI RADICAL WALK;So;0;ON; 8FB5;;;;N;;;;; +2FA2;KANGXI RADICAL CITY;So;0;ON; 9091;;;;N;;;;; +2FA3;KANGXI RADICAL WINE;So;0;ON; 9149;;;;N;;;;; +2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON; 91C6;;;;N;;;;; +2FA5;KANGXI RADICAL VILLAGE;So;0;ON; 91CC;;;;N;;;;; +2FA6;KANGXI RADICAL GOLD;So;0;ON; 91D1;;;;N;;;;; +2FA7;KANGXI RADICAL LONG;So;0;ON; 9577;;;;N;;;;; +2FA8;KANGXI RADICAL GATE;So;0;ON; 9580;;;;N;;;;; +2FA9;KANGXI RADICAL MOUND;So;0;ON; 961C;;;;N;;;;; +2FAA;KANGXI RADICAL SLAVE;So;0;ON; 96B6;;;;N;;;;; +2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON; 96B9;;;;N;;;;; +2FAC;KANGXI RADICAL RAIN;So;0;ON; 96E8;;;;N;;;;; +2FAD;KANGXI RADICAL BLUE;So;0;ON; 9751;;;;N;;;;; +2FAE;KANGXI RADICAL WRONG;So;0;ON; 975E;;;;N;;;;; +2FAF;KANGXI RADICAL FACE;So;0;ON; 9762;;;;N;;;;; +2FB0;KANGXI RADICAL LEATHER;So;0;ON; 9769;;;;N;;;;; +2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON; 97CB;;;;N;;;;; +2FB2;KANGXI RADICAL LEEK;So;0;ON; 97ED;;;;N;;;;; +2FB3;KANGXI RADICAL SOUND;So;0;ON; 97F3;;;;N;;;;; +2FB4;KANGXI RADICAL LEAF;So;0;ON; 9801;;;;N;;;;; +2FB5;KANGXI RADICAL WIND;So;0;ON; 98A8;;;;N;;;;; +2FB6;KANGXI RADICAL FLY;So;0;ON; 98DB;;;;N;;;;; +2FB7;KANGXI RADICAL EAT;So;0;ON; 98DF;;;;N;;;;; +2FB8;KANGXI RADICAL HEAD;So;0;ON; 9996;;;;N;;;;; +2FB9;KANGXI RADICAL FRAGRANT;So;0;ON; 9999;;;;N;;;;; +2FBA;KANGXI RADICAL HORSE;So;0;ON; 99AC;;;;N;;;;; +2FBB;KANGXI RADICAL BONE;So;0;ON; 9AA8;;;;N;;;;; +2FBC;KANGXI RADICAL TALL;So;0;ON; 9AD8;;;;N;;;;; +2FBD;KANGXI RADICAL HAIR;So;0;ON; 9ADF;;;;N;;;;; +2FBE;KANGXI RADICAL FIGHT;So;0;ON; 9B25;;;;N;;;;; +2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON; 9B2F;;;;N;;;;; +2FC0;KANGXI RADICAL CAULDRON;So;0;ON; 9B32;;;;N;;;;; +2FC1;KANGXI RADICAL GHOST;So;0;ON; 9B3C;;;;N;;;;; +2FC2;KANGXI RADICAL FISH;So;0;ON; 9B5A;;;;N;;;;; +2FC3;KANGXI RADICAL BIRD;So;0;ON; 9CE5;;;;N;;;;; +2FC4;KANGXI RADICAL SALT;So;0;ON; 9E75;;;;N;;;;; +2FC5;KANGXI RADICAL DEER;So;0;ON; 9E7F;;;;N;;;;; +2FC6;KANGXI RADICAL WHEAT;So;0;ON; 9EA5;;;;N;;;;; +2FC7;KANGXI RADICAL HEMP;So;0;ON; 9EBB;;;;N;;;;; +2FC8;KANGXI RADICAL YELLOW;So;0;ON; 9EC3;;;;N;;;;; +2FC9;KANGXI RADICAL MILLET;So;0;ON; 9ECD;;;;N;;;;; +2FCA;KANGXI RADICAL BLACK;So;0;ON; 9ED1;;;;N;;;;; +2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON; 9EF9;;;;N;;;;; +2FCC;KANGXI RADICAL FROG;So;0;ON; 9EFD;;;;N;;;;; +2FCD;KANGXI RADICAL TRIPOD;So;0;ON; 9F0E;;;;N;;;;; +2FCE;KANGXI RADICAL DRUM;So;0;ON; 9F13;;;;N;;;;; +2FCF;KANGXI RADICAL RAT;So;0;ON; 9F20;;;;N;;;;; +2FD0;KANGXI RADICAL NOSE;So;0;ON; 9F3B;;;;N;;;;; +2FD1;KANGXI RADICAL EVEN;So;0;ON; 9F4A;;;;N;;;;; +2FD2;KANGXI RADICAL TOOTH;So;0;ON; 9F52;;;;N;;;;; +2FD3;KANGXI RADICAL DRAGON;So;0;ON; 9F8D;;;;N;;;;; +2FD4;KANGXI RADICAL TURTLE;So;0;ON; 9F9C;;;;N;;;;; +2FD5;KANGXI RADICAL FLUTE;So;0;ON; 9FA0;;;;N;;;;; +2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; +2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; +2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; +2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; +2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; +2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; +2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; +2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; +2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; +2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; +2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; +2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; +3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; +3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; +3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; +3003;DITTO MARK;Po;0;ON;;;;;N;;;;; +3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; +3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; +3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; +3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; +3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; +3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; +300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; +300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; +300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; +300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; +300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; +300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; +3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; +3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; +3012;POSTAL MARK;So;0;ON;;;;;N;;;;; +3013;GETA MARK;So;0;ON;;;;;N;;;;; +3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; +3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; +3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; +3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; +3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; +3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; +301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; +301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; +301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; +301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; +301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; +301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; +3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; +3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; +3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; +3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; +3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; +3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; +3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; +3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; +3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; +3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; +302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; +302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; +302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; +302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; +302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; +302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; +3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; +3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; +3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; +3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; +3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; +3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; +3036;CIRCLED POSTAL MARK;So;0;ON; 3012;;;;N;;;;; +3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; +3038;HANGZHOU NUMERAL TEN;Nl;0;L; 5341;;;10;N;;;;; +3039;HANGZHOU NUMERAL TWENTY;Nl;0;L; 5344;;;20;N;;;;; +303A;HANGZHOU NUMERAL THIRTY;Nl;0;L; 5345;;;30;N;;;;; +303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; +303C;MASU MARK;Lo;0;L;;;;;N;;;;; +303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;; +303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; +303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; +3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; +3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; +3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; +3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; +3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; +3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; +3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; +3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; +304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; +304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; +304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; +304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; +304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; +304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; +3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; +3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; +3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; +3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; +3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; +3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; +3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; +3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; +3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; +3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; +305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; +305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; +305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; +305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; +305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; +305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; +3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; +3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; +3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; +3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; +3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; +3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; +3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; +3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; +3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; +3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; +306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; +306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; +306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; +306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; +306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; +306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; +3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; +3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; +3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; +3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; +3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; +3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; +3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; +3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; +3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; +3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; +307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; +307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; +307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; +307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; +307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; +307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; +3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; +3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; +3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; +3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; +3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; +3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; +3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; +3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; +3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; +3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; +308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; +308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; +308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; +308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; +308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; +308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; +3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; +3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; +3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; +3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; +3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; +3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; +3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; +3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; +309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; +309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON; 0020 3099;;;;N;;;;; +309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON; 0020 309A;;;;N;;;;; +309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; +309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; +309F;HIRAGANA DIGRAPH YORI;Lo;0;L; 3088 308A;;;;N;;;;; +30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; +30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; +30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; +30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; +30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; +30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; +30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; +30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; +30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; +30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; +30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; +30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; +30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; +30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; +30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; +30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; +30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; +30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; +30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; +30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; +30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; +30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; +30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; +30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; +30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; +30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; +30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; +30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; +30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; +30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; +30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; +30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; +30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; +30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; +30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; +30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; +30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; +30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; +30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; +30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; +30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; +30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; +30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; +30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; +30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; +30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; +30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; +30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; +30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; +30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; +30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; +30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; +30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; +30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; +30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; +30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; +30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; +30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; +30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; +30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; +30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; +30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; +30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; +30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; +30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; +30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; +30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; +30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; +30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; +30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; +30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; +30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; +30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; +30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; +30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; +30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; +30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; +30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; +30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; +30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; +30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; +30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; +30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; +30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; +30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; +30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; +30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; +30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; +30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; +30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; +30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; +30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; +30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; +30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; +30FF;KATAKANA DIGRAPH KOTO;Lo;0;L; 30B3 30C8;;;;N;;;;; +3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; +3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; +3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; +3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; +3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; +310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; +310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; +310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; +310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; +310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; +310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; +3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; +3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; +3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; +3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; +3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; +3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; +3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; +3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; +3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; +3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; +311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; +311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; +311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; +311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; +311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; +311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; +3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; +3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; +3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; +3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; +3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; +3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; +3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; +3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; +3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; +3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; +312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; +312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; +312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; +312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;; +3131;HANGUL LETTER KIYEOK;Lo;0;L; 1100;;;;N;HANGUL LETTER GIYEOG;;;; +3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L; 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; +3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; +3134;HANGUL LETTER NIEUN;Lo;0;L; 1102;;;;N;;;;; +3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; +3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; +3137;HANGUL LETTER TIKEUT;Lo;0;L; 1103;;;;N;HANGUL LETTER DIGEUD;;;; +3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L; 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; +3139;HANGUL LETTER RIEUL;Lo;0;L; 1105;;;;N;HANGUL LETTER LIEUL;;;; +313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; +313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; +313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; +313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L; 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; +313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; +313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; +3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; +3141;HANGUL LETTER MIEUM;Lo;0;L; 1106;;;;N;;;;; +3142;HANGUL LETTER PIEUP;Lo;0;L; 1107;;;;N;HANGUL LETTER BIEUB;;;; +3143;HANGUL LETTER SSANGPIEUP;Lo;0;L; 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; +3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L; 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; +3145;HANGUL LETTER SIOS;Lo;0;L; 1109;;;;N;;;;; +3146;HANGUL LETTER SSANGSIOS;Lo;0;L; 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; +3147;HANGUL LETTER IEUNG;Lo;0;L; 110B;;;;N;;;;; +3148;HANGUL LETTER CIEUC;Lo;0;L; 110C;;;;N;HANGUL LETTER JIEUJ;;;; +3149;HANGUL LETTER SSANGCIEUC;Lo;0;L; 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; +314A;HANGUL LETTER CHIEUCH;Lo;0;L; 110E;;;;N;HANGUL LETTER CIEUC;;;; +314B;HANGUL LETTER KHIEUKH;Lo;0;L; 110F;;;;N;HANGUL LETTER KIYEOK;;;; +314C;HANGUL LETTER THIEUTH;Lo;0;L; 1110;;;;N;HANGUL LETTER TIEUT;;;; +314D;HANGUL LETTER PHIEUPH;Lo;0;L; 1111;;;;N;HANGUL LETTER PIEUP;;;; +314E;HANGUL LETTER HIEUH;Lo;0;L; 1112;;;;N;;;;; +314F;HANGUL LETTER A;Lo;0;L; 1161;;;;N;;;;; +3150;HANGUL LETTER AE;Lo;0;L; 1162;;;;N;;;;; +3151;HANGUL LETTER YA;Lo;0;L; 1163;;;;N;;;;; +3152;HANGUL LETTER YAE;Lo;0;L; 1164;;;;N;;;;; +3153;HANGUL LETTER EO;Lo;0;L; 1165;;;;N;;;;; +3154;HANGUL LETTER E;Lo;0;L; 1166;;;;N;;;;; +3155;HANGUL LETTER YEO;Lo;0;L; 1167;;;;N;;;;; +3156;HANGUL LETTER YE;Lo;0;L; 1168;;;;N;;;;; +3157;HANGUL LETTER O;Lo;0;L; 1169;;;;N;;;;; +3158;HANGUL LETTER WA;Lo;0;L; 116A;;;;N;;;;; +3159;HANGUL LETTER WAE;Lo;0;L; 116B;;;;N;;;;; +315A;HANGUL LETTER OE;Lo;0;L; 116C;;;;N;;;;; +315B;HANGUL LETTER YO;Lo;0;L; 116D;;;;N;;;;; +315C;HANGUL LETTER U;Lo;0;L; 116E;;;;N;;;;; +315D;HANGUL LETTER WEO;Lo;0;L; 116F;;;;N;;;;; +315E;HANGUL LETTER WE;Lo;0;L; 1170;;;;N;;;;; +315F;HANGUL LETTER WI;Lo;0;L; 1171;;;;N;;;;; +3160;HANGUL LETTER YU;Lo;0;L; 1172;;;;N;;;;; +3161;HANGUL LETTER EU;Lo;0;L; 1173;;;;N;;;;; +3162;HANGUL LETTER YI;Lo;0;L; 1174;;;;N;;;;; +3163;HANGUL LETTER I;Lo;0;L; 1175;;;;N;;;;; +3164;HANGUL FILLER;Lo;0;L; 1160;;;;N;HANGUL CAE OM;;;; +3165;HANGUL LETTER SSANGNIEUN;Lo;0;L; 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; +3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L; 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; +3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L; 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; +3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L; 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; +3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L; 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; +316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L; 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; +316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L; 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; +316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L; 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; +316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L; 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; +316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L; 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; +316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L; 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; +3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L; 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; +3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L; 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; +3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L; 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; +3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L; 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; +3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L; 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; +3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L; 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; +3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L; 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; +3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L; 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; +3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L; 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; +3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L; 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; +317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L; 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; +317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L; 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; +317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L; 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; +317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L; 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; +317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L; 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; +317F;HANGUL LETTER PANSIOS;Lo;0;L; 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; +3180;HANGUL LETTER SSANGIEUNG;Lo;0;L; 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; +3181;HANGUL LETTER YESIEUNG;Lo;0;L; 114C;;;;N;HANGUL LETTER NGIEUNG;;;; +3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L; 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; +3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L; 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; +3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L; 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; +3185;HANGUL LETTER SSANGHIEUH;Lo;0;L; 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; +3186;HANGUL LETTER YEORINHIEUH;Lo;0;L; 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; +3187;HANGUL LETTER YO-YA;Lo;0;L; 1184;;;;N;HANGUL LETTER YOYA;;;; +3188;HANGUL LETTER YO-YAE;Lo;0;L; 1185;;;;N;HANGUL LETTER YOYAE;;;; +3189;HANGUL LETTER YO-I;Lo;0;L; 1188;;;;N;HANGUL LETTER YOI;;;; +318A;HANGUL LETTER YU-YEO;Lo;0;L; 1191;;;;N;HANGUL LETTER YUYEO;;;; +318B;HANGUL LETTER YU-YE;Lo;0;L; 1192;;;;N;HANGUL LETTER YUYE;;;; +318C;HANGUL LETTER YU-I;Lo;0;L; 1194;;;;N;HANGUL LETTER YUI;;;; +318D;HANGUL LETTER ARAEA;Lo;0;L; 119E;;;;N;HANGUL LETTER ALAE A;;;; +318E;HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; +3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;;;; +3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;;;; +3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L; 4E00;;;1;N;KAERITEN ITI;;;; +3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L; 4E8C;;;2;N;KAERITEN NI;;;; +3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L; 4E09;;;3;N;KAERITEN SAN;;;; +3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L; 56DB;;;4;N;KAERITEN SI;;;; +3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L; 4E0A;;;;N;KAERITEN ZYOU;;;; +3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L; 4E2D;;;;N;KAERITEN TYUU;;;; +3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L; 4E0B;;;;N;KAERITEN GE;;;; +3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L; 7532;;;;N;KAERITEN KOU;;;; +319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L; 4E59;;;;N;KAERITEN OTU;;;; +319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L; 4E19;;;;N;KAERITEN HEI;;;; +319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L; 4E01;;;;N;KAERITEN TEI;;;; +319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L; 5929;;;;N;KAERITEN TEN;;;; +319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L; 5730;;;;N;KAERITEN TI;;;; +319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L; 4EBA;;;;N;KAERITEN ZIN;;;; +31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; +31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; +31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; +31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; +31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; +31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; +31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; +31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; +31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; +31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; +31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; +31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; +31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; +31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; +31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; +31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; +31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; +31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; +31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; +31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; +31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; +31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; +31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; +31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; +31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;; +31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;; +31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;; +31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; +31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; +31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; +31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; +31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; +31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; +31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; +31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; +31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; +31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; +31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; +31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; +31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; +31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; +31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; +31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; +31D0;CJK STROKE H;So;0;ON;;;;;N;;;;; +31D1;CJK STROKE S;So;0;ON;;;;;N;;;;; +31D2;CJK STROKE P;So;0;ON;;;;;N;;;;; +31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;; +31D4;CJK STROKE D;So;0;ON;;;;;N;;;;; +31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;; +31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;; +31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;; +31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;; +31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;; +31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;; +31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;; +31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;; +31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;; +31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;; +31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;; +31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;; +31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; +31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; +31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; +31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; +31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; +31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; +31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;; +31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;; +31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;; +31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;; +31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;; +31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;; +31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;; +31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;; +31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;; +31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;; +31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;; +31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;; +31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;; +3200;PARENTHESIZED HANGUL KIYEOK;So;0;L; 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; +3201;PARENTHESIZED HANGUL NIEUN;So;0;L; 0028 1102 0029;;;;N;;;;; +3202;PARENTHESIZED HANGUL TIKEUT;So;0;L; 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; +3203;PARENTHESIZED HANGUL RIEUL;So;0;L; 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; +3204;PARENTHESIZED HANGUL MIEUM;So;0;L; 0028 1106 0029;;;;N;;;;; +3205;PARENTHESIZED HANGUL PIEUP;So;0;L; 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; +3206;PARENTHESIZED HANGUL SIOS;So;0;L; 0028 1109 0029;;;;N;;;;; +3207;PARENTHESIZED HANGUL IEUNG;So;0;L; 0028 110B 0029;;;;N;;;;; +3208;PARENTHESIZED HANGUL CIEUC;So;0;L; 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; +3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L; 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; +320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L; 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; +320B;PARENTHESIZED HANGUL THIEUTH;So;0;L; 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; +320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L; 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; +320D;PARENTHESIZED HANGUL HIEUH;So;0;L; 0028 1112 0029;;;;N;;;;; +320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L; 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; +320F;PARENTHESIZED HANGUL NIEUN A;So;0;L; 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; +3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L; 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; +3211;PARENTHESIZED HANGUL RIEUL A;So;0;L; 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; +3212;PARENTHESIZED HANGUL MIEUM A;So;0;L; 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; +3213;PARENTHESIZED HANGUL PIEUP A;So;0;L; 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; +3214;PARENTHESIZED HANGUL SIOS A;So;0;L; 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; +3215;PARENTHESIZED HANGUL IEUNG A;So;0;L; 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; +3216;PARENTHESIZED HANGUL CIEUC A;So;0;L; 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; +3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L; 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; +3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L; 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; +3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L; 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; +321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L; 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; +321B;PARENTHESIZED HANGUL HIEUH A;So;0;L; 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; +321C;PARENTHESIZED HANGUL CIEUC U;So;0;L; 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; +321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON; 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;; +321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON; 0028 110B 1169 1112 116E 0029;;;;N;;;;; +3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L; 0028 4E00 0029;;;1;N;;;;; +3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L; 0028 4E8C 0029;;;2;N;;;;; +3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L; 0028 4E09 0029;;;3;N;;;;; +3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L; 0028 56DB 0029;;;4;N;;;;; +3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L; 0028 4E94 0029;;;5;N;;;;; +3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L; 0028 516D 0029;;;6;N;;;;; +3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L; 0028 4E03 0029;;;7;N;;;;; +3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L; 0028 516B 0029;;;8;N;;;;; +3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L; 0028 4E5D 0029;;;9;N;;;;; +3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L; 0028 5341 0029;;;10;N;;;;; +322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L; 0028 6708 0029;;;;N;;;;; +322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L; 0028 706B 0029;;;;N;;;;; +322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L; 0028 6C34 0029;;;;N;;;;; +322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L; 0028 6728 0029;;;;N;;;;; +322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L; 0028 91D1 0029;;;;N;;;;; +322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L; 0028 571F 0029;;;;N;;;;; +3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L; 0028 65E5 0029;;;;N;;;;; +3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L; 0028 682A 0029;;;;N;;;;; +3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L; 0028 6709 0029;;;;N;;;;; +3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L; 0028 793E 0029;;;;N;;;;; +3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L; 0028 540D 0029;;;;N;;;;; +3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L; 0028 7279 0029;;;;N;;;;; +3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L; 0028 8CA1 0029;;;;N;;;;; +3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L; 0028 795D 0029;;;;N;;;;; +3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L; 0028 52B4 0029;;;;N;;;;; +3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L; 0028 4EE3 0029;;;;N;;;;; +323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L; 0028 547C 0029;;;;N;;;;; +323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L; 0028 5B66 0029;;;;N;;;;; +323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L; 0028 76E3 0029;;;;N;;;;; +323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L; 0028 4F01 0029;;;;N;;;;; +323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L; 0028 8CC7 0029;;;;N;;;;; +323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L; 0028 5354 0029;;;;N;;;;; +3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L; 0028 796D 0029;;;;N;;;;; +3241;PARENTHESIZED IDEOGRAPH REST;So;0;L; 0028 4F11 0029;;;;N;;;;; +3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L; 0028 81EA 0029;;;;N;;;;; +3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L; 0028 81F3 0029;;;;N;;;;; +3244;CIRCLED IDEOGRAPH QUESTION;So;0;L; 554F;;;;N;;;;; +3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L; 5E7C;;;;N;;;;; +3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L; 6587;;;;N;;;;; +3247;CIRCLED IDEOGRAPH KOTO;So;0;L; 7B8F;;;;N;;;;; +3248;CIRCLED NUMBER TEN ON BLACK SQUARE;So;0;L;;;;;N;;;;; +3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;So;0;L;;;;;N;;;;; +324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;So;0;L;;;;;N;;;;; +324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;So;0;L;;;;;N;;;;; +324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;So;0;L;;;;;N;;;;; +324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;So;0;L;;;;;N;;;;; +324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;So;0;L;;;;;N;;;;; +324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;So;0;L;;;;;N;;;;; +3250;PARTNERSHIP SIGN;So;0;ON; 0050 0054 0045;;;;N;;;;; +3251;CIRCLED NUMBER TWENTY ONE;No;0;ON; 0032 0031;;;21;N;;;;; +3252;CIRCLED NUMBER TWENTY TWO;No;0;ON; 0032 0032;;;22;N;;;;; +3253;CIRCLED NUMBER TWENTY THREE;No;0;ON; 0032 0033;;;23;N;;;;; +3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON; 0032 0034;;;24;N;;;;; +3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON; 0032 0035;;;25;N;;;;; +3256;CIRCLED NUMBER TWENTY SIX;No;0;ON; 0032 0036;;;26;N;;;;; +3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON; 0032 0037;;;27;N;;;;; +3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON; 0032 0038;;;28;N;;;;; +3259;CIRCLED NUMBER TWENTY NINE;No;0;ON; 0032 0039;;;29;N;;;;; +325A;CIRCLED NUMBER THIRTY;No;0;ON; 0033 0030;;;30;N;;;;; +325B;CIRCLED NUMBER THIRTY ONE;No;0;ON; 0033 0031;;;31;N;;;;; +325C;CIRCLED NUMBER THIRTY TWO;No;0;ON; 0033 0032;;;32;N;;;;; +325D;CIRCLED NUMBER THIRTY THREE;No;0;ON; 0033 0033;;;33;N;;;;; +325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON; 0033 0034;;;34;N;;;;; +325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON; 0033 0035;;;35;N;;;;; +3260;CIRCLED HANGUL KIYEOK;So;0;L; 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; +3261;CIRCLED HANGUL NIEUN;So;0;L; 1102;;;;N;;;;; +3262;CIRCLED HANGUL TIKEUT;So;0;L; 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; +3263;CIRCLED HANGUL RIEUL;So;0;L; 1105;;;;N;CIRCLED HANGUL LIEUL;;;; +3264;CIRCLED HANGUL MIEUM;So;0;L; 1106;;;;N;;;;; +3265;CIRCLED HANGUL PIEUP;So;0;L; 1107;;;;N;CIRCLED HANGUL BIEUB;;;; +3266;CIRCLED HANGUL SIOS;So;0;L; 1109;;;;N;;;;; +3267;CIRCLED HANGUL IEUNG;So;0;L; 110B;;;;N;;;;; +3268;CIRCLED HANGUL CIEUC;So;0;L; 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; +3269;CIRCLED HANGUL CHIEUCH;So;0;L; 110E;;;;N;CIRCLED HANGUL CIEUC;;;; +326A;CIRCLED HANGUL KHIEUKH;So;0;L; 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; +326B;CIRCLED HANGUL THIEUTH;So;0;L; 1110;;;;N;CIRCLED HANGUL TIEUT;;;; +326C;CIRCLED HANGUL PHIEUPH;So;0;L; 1111;;;;N;CIRCLED HANGUL PIEUP;;;; +326D;CIRCLED HANGUL HIEUH;So;0;L; 1112;;;;N;;;;; +326E;CIRCLED HANGUL KIYEOK A;So;0;L; 1100 1161;;;;N;CIRCLED HANGUL GA;;;; +326F;CIRCLED HANGUL NIEUN A;So;0;L; 1102 1161;;;;N;CIRCLED HANGUL NA;;;; +3270;CIRCLED HANGUL TIKEUT A;So;0;L; 1103 1161;;;;N;CIRCLED HANGUL DA;;;; +3271;CIRCLED HANGUL RIEUL A;So;0;L; 1105 1161;;;;N;CIRCLED HANGUL LA;;;; +3272;CIRCLED HANGUL MIEUM A;So;0;L; 1106 1161;;;;N;CIRCLED HANGUL MA;;;; +3273;CIRCLED HANGUL PIEUP A;So;0;L; 1107 1161;;;;N;CIRCLED HANGUL BA;;;; +3274;CIRCLED HANGUL SIOS A;So;0;L; 1109 1161;;;;N;CIRCLED HANGUL SA;;;; +3275;CIRCLED HANGUL IEUNG A;So;0;L; 110B 1161;;;;N;CIRCLED HANGUL A;;;; +3276;CIRCLED HANGUL CIEUC A;So;0;L; 110C 1161;;;;N;CIRCLED HANGUL JA;;;; +3277;CIRCLED HANGUL CHIEUCH A;So;0;L; 110E 1161;;;;N;CIRCLED HANGUL CA;;;; +3278;CIRCLED HANGUL KHIEUKH A;So;0;L; 110F 1161;;;;N;CIRCLED HANGUL KA;;;; +3279;CIRCLED HANGUL THIEUTH A;So;0;L; 1110 1161;;;;N;CIRCLED HANGUL TA;;;; +327A;CIRCLED HANGUL PHIEUPH A;So;0;L; 1111 1161;;;;N;CIRCLED HANGUL PA;;;; +327B;CIRCLED HANGUL HIEUH A;So;0;L; 1112 1161;;;;N;CIRCLED HANGUL HA;;;; +327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON; 110E 1161 11B7 1100 1169;;;;N;;;;; +327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON; 110C 116E 110B 1174;;;;N;;;;; +327E;CIRCLED HANGUL IEUNG U;So;0;ON; 110B 116E;;;;N;;;;; +327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; +3280;CIRCLED IDEOGRAPH ONE;No;0;L; 4E00;;;1;N;;;;; +3281;CIRCLED IDEOGRAPH TWO;No;0;L; 4E8C;;;2;N;;;;; +3282;CIRCLED IDEOGRAPH THREE;No;0;L; 4E09;;;3;N;;;;; +3283;CIRCLED IDEOGRAPH FOUR;No;0;L; 56DB;;;4;N;;;;; +3284;CIRCLED IDEOGRAPH FIVE;No;0;L; 4E94;;;5;N;;;;; +3285;CIRCLED IDEOGRAPH SIX;No;0;L; 516D;;;6;N;;;;; +3286;CIRCLED IDEOGRAPH SEVEN;No;0;L; 4E03;;;7;N;;;;; +3287;CIRCLED IDEOGRAPH EIGHT;No;0;L; 516B;;;8;N;;;;; +3288;CIRCLED IDEOGRAPH NINE;No;0;L; 4E5D;;;9;N;;;;; +3289;CIRCLED IDEOGRAPH TEN;No;0;L; 5341;;;10;N;;;;; +328A;CIRCLED IDEOGRAPH MOON;So;0;L; 6708;;;;N;;;;; +328B;CIRCLED IDEOGRAPH FIRE;So;0;L; 706B;;;;N;;;;; +328C;CIRCLED IDEOGRAPH WATER;So;0;L; 6C34;;;;N;;;;; +328D;CIRCLED IDEOGRAPH WOOD;So;0;L; 6728;;;;N;;;;; +328E;CIRCLED IDEOGRAPH METAL;So;0;L; 91D1;;;;N;;;;; +328F;CIRCLED IDEOGRAPH EARTH;So;0;L; 571F;;;;N;;;;; +3290;CIRCLED IDEOGRAPH SUN;So;0;L; 65E5;;;;N;;;;; +3291;CIRCLED IDEOGRAPH STOCK;So;0;L; 682A;;;;N;;;;; +3292;CIRCLED IDEOGRAPH HAVE;So;0;L; 6709;;;;N;;;;; +3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L; 793E;;;;N;;;;; +3294;CIRCLED IDEOGRAPH NAME;So;0;L; 540D;;;;N;;;;; +3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L; 7279;;;;N;;;;; +3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L; 8CA1;;;;N;;;;; +3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L; 795D;;;;N;;;;; +3298;CIRCLED IDEOGRAPH LABOR;So;0;L; 52B4;;;;N;;;;; +3299;CIRCLED IDEOGRAPH SECRET;So;0;L; 79D8;;;;N;;;;; +329A;CIRCLED IDEOGRAPH MALE;So;0;L; 7537;;;;N;;;;; +329B;CIRCLED IDEOGRAPH FEMALE;So;0;L; 5973;;;;N;;;;; +329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L; 9069;;;;N;;;;; +329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L; 512A;;;;N;;;;; +329E;CIRCLED IDEOGRAPH PRINT;So;0;L; 5370;;;;N;;;;; +329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L; 6CE8;;;;N;;;;; +32A0;CIRCLED IDEOGRAPH ITEM;So;0;L; 9805;;;;N;;;;; +32A1;CIRCLED IDEOGRAPH REST;So;0;L; 4F11;;;;N;;;;; +32A2;CIRCLED IDEOGRAPH COPY;So;0;L; 5199;;;;N;;;;; +32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L; 6B63;;;;N;;;;; +32A4;CIRCLED IDEOGRAPH HIGH;So;0;L; 4E0A;;;;N;;;;; +32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L; 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; +32A6;CIRCLED IDEOGRAPH LOW;So;0;L; 4E0B;;;;N;;;;; +32A7;CIRCLED IDEOGRAPH LEFT;So;0;L; 5DE6;;;;N;;;;; +32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L; 53F3;;;;N;;;;; +32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L; 533B;;;;N;;;;; +32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L; 5B97;;;;N;;;;; +32AB;CIRCLED IDEOGRAPH STUDY;So;0;L; 5B66;;;;N;;;;; +32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L; 76E3;;;;N;;;;; +32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L; 4F01;;;;N;;;;; +32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L; 8CC7;;;;N;;;;; +32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L; 5354;;;;N;;;;; +32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L; 591C;;;;N;;;;; +32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON; 0033 0036;;;36;N;;;;; +32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON; 0033 0037;;;37;N;;;;; +32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON; 0033 0038;;;38;N;;;;; +32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON; 0033 0039;;;39;N;;;;; +32B5;CIRCLED NUMBER FORTY;No;0;ON; 0034 0030;;;40;N;;;;; +32B6;CIRCLED NUMBER FORTY ONE;No;0;ON; 0034 0031;;;41;N;;;;; +32B7;CIRCLED NUMBER FORTY TWO;No;0;ON; 0034 0032;;;42;N;;;;; +32B8;CIRCLED NUMBER FORTY THREE;No;0;ON; 0034 0033;;;43;N;;;;; +32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON; 0034 0034;;;44;N;;;;; +32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON; 0034 0035;;;45;N;;;;; +32BB;CIRCLED NUMBER FORTY SIX;No;0;ON; 0034 0036;;;46;N;;;;; +32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON; 0034 0037;;;47;N;;;;; +32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON; 0034 0038;;;48;N;;;;; +32BE;CIRCLED NUMBER FORTY NINE;No;0;ON; 0034 0039;;;49;N;;;;; +32BF;CIRCLED NUMBER FIFTY;No;0;ON; 0035 0030;;;50;N;;;;; +32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L; 0031 6708;;;;N;;;;; +32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L; 0032 6708;;;;N;;;;; +32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L; 0033 6708;;;;N;;;;; +32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L; 0034 6708;;;;N;;;;; +32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L; 0035 6708;;;;N;;;;; +32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L; 0036 6708;;;;N;;;;; +32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L; 0037 6708;;;;N;;;;; +32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L; 0038 6708;;;;N;;;;; +32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L; 0039 6708;;;;N;;;;; +32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L; 0031 0030 6708;;;;N;;;;; +32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L; 0031 0031 6708;;;;N;;;;; +32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L; 0031 0032 6708;;;;N;;;;; +32CC;SQUARE HG;So;0;ON; 0048 0067;;;;N;;;;; +32CD;SQUARE ERG;So;0;ON; 0065 0072 0067;;;;N;;;;; +32CE;SQUARE EV;So;0;ON; 0065 0056;;;;N;;;;; +32CF;LIMITED LIABILITY SIGN;So;0;ON; 004C 0054 0044;;;;N;;;;; +32D0;CIRCLED KATAKANA A;So;0;L; 30A2;;;;N;;;;; +32D1;CIRCLED KATAKANA I;So;0;L; 30A4;;;;N;;;;; +32D2;CIRCLED KATAKANA U;So;0;L; 30A6;;;;N;;;;; +32D3;CIRCLED KATAKANA E;So;0;L; 30A8;;;;N;;;;; +32D4;CIRCLED KATAKANA O;So;0;L; 30AA;;;;N;;;;; +32D5;CIRCLED KATAKANA KA;So;0;L; 30AB;;;;N;;;;; +32D6;CIRCLED KATAKANA KI;So;0;L; 30AD;;;;N;;;;; +32D7;CIRCLED KATAKANA KU;So;0;L; 30AF;;;;N;;;;; +32D8;CIRCLED KATAKANA KE;So;0;L; 30B1;;;;N;;;;; +32D9;CIRCLED KATAKANA KO;So;0;L; 30B3;;;;N;;;;; +32DA;CIRCLED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; +32DB;CIRCLED KATAKANA SI;So;0;L; 30B7;;;;N;;;;; +32DC;CIRCLED KATAKANA SU;So;0;L; 30B9;;;;N;;;;; +32DD;CIRCLED KATAKANA SE;So;0;L; 30BB;;;;N;;;;; +32DE;CIRCLED KATAKANA SO;So;0;L; 30BD;;;;N;;;;; +32DF;CIRCLED KATAKANA TA;So;0;L; 30BF;;;;N;;;;; +32E0;CIRCLED KATAKANA TI;So;0;L; 30C1;;;;N;;;;; +32E1;CIRCLED KATAKANA TU;So;0;L; 30C4;;;;N;;;;; +32E2;CIRCLED KATAKANA TE;So;0;L; 30C6;;;;N;;;;; +32E3;CIRCLED KATAKANA TO;So;0;L; 30C8;;;;N;;;;; +32E4;CIRCLED KATAKANA NA;So;0;L; 30CA;;;;N;;;;; +32E5;CIRCLED KATAKANA NI;So;0;L; 30CB;;;;N;;;;; +32E6;CIRCLED KATAKANA NU;So;0;L; 30CC;;;;N;;;;; +32E7;CIRCLED KATAKANA NE;So;0;L; 30CD;;;;N;;;;; +32E8;CIRCLED KATAKANA NO;So;0;L; 30CE;;;;N;;;;; +32E9;CIRCLED KATAKANA HA;So;0;L; 30CF;;;;N;;;;; +32EA;CIRCLED KATAKANA HI;So;0;L; 30D2;;;;N;;;;; +32EB;CIRCLED KATAKANA HU;So;0;L; 30D5;;;;N;;;;; +32EC;CIRCLED KATAKANA HE;So;0;L; 30D8;;;;N;;;;; +32ED;CIRCLED KATAKANA HO;So;0;L; 30DB;;;;N;;;;; +32EE;CIRCLED KATAKANA MA;So;0;L; 30DE;;;;N;;;;; +32EF;CIRCLED KATAKANA MI;So;0;L; 30DF;;;;N;;;;; +32F0;CIRCLED KATAKANA MU;So;0;L; 30E0;;;;N;;;;; +32F1;CIRCLED KATAKANA ME;So;0;L; 30E1;;;;N;;;;; +32F2;CIRCLED KATAKANA MO;So;0;L; 30E2;;;;N;;;;; +32F3;CIRCLED KATAKANA YA;So;0;L; 30E4;;;;N;;;;; +32F4;CIRCLED KATAKANA YU;So;0;L; 30E6;;;;N;;;;; +32F5;CIRCLED KATAKANA YO;So;0;L; 30E8;;;;N;;;;; +32F6;CIRCLED KATAKANA RA;So;0;L; 30E9;;;;N;;;;; +32F7;CIRCLED KATAKANA RI;So;0;L; 30EA;;;;N;;;;; +32F8;CIRCLED KATAKANA RU;So;0;L; 30EB;;;;N;;;;; +32F9;CIRCLED KATAKANA RE;So;0;L; 30EC;;;;N;;;;; +32FA;CIRCLED KATAKANA RO;So;0;L; 30ED;;;;N;;;;; +32FB;CIRCLED KATAKANA WA;So;0;L; 30EF;;;;N;;;;; +32FC;CIRCLED KATAKANA WI;So;0;L; 30F0;;;;N;;;;; +32FD;CIRCLED KATAKANA WE;So;0;L; 30F1;;;;N;;;;; +32FE;CIRCLED KATAKANA WO;So;0;L; 30F2;;;;N;;;;; +3300;SQUARE APAATO;So;0;L; 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; +3301;SQUARE ARUHUA;So;0;L; 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; +3302;SQUARE ANPEA;So;0;L; 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; +3303;SQUARE AARU;So;0;L; 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; +3304;SQUARE ININGU;So;0;L; 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; +3305;SQUARE INTI;So;0;L; 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; +3306;SQUARE UON;So;0;L; 30A6 30A9 30F3;;;;N;SQUARED UON;;;; +3307;SQUARE ESUKUUDO;So;0;L; 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; +3308;SQUARE EEKAA;So;0;L; 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; +3309;SQUARE ONSU;So;0;L; 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; +330A;SQUARE OOMU;So;0;L; 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; +330B;SQUARE KAIRI;So;0;L; 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; +330C;SQUARE KARATTO;So;0;L; 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; +330D;SQUARE KARORII;So;0;L; 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; +330E;SQUARE GARON;So;0;L; 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; +330F;SQUARE GANMA;So;0;L; 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; +3310;SQUARE GIGA;So;0;L; 30AE 30AC;;;;N;SQUARED GIGA;;;; +3311;SQUARE GINII;So;0;L; 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; +3312;SQUARE KYURII;So;0;L; 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; +3313;SQUARE GIRUDAA;So;0;L; 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; +3314;SQUARE KIRO;So;0;L; 30AD 30ED;;;;N;SQUARED KIRO;;;; +3315;SQUARE KIROGURAMU;So;0;L; 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; +3316;SQUARE KIROMEETORU;So;0;L; 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; +3317;SQUARE KIROWATTO;So;0;L; 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; +3318;SQUARE GURAMU;So;0;L; 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; +3319;SQUARE GURAMUTON;So;0;L; 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; +331A;SQUARE KURUZEIRO;So;0;L; 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; +331B;SQUARE KUROONE;So;0;L; 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; +331C;SQUARE KEESU;So;0;L; 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; +331D;SQUARE KORUNA;So;0;L; 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; +331E;SQUARE KOOPO;So;0;L; 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; +331F;SQUARE SAIKURU;So;0;L; 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; +3320;SQUARE SANTIIMU;So;0;L; 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; +3321;SQUARE SIRINGU;So;0;L; 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; +3322;SQUARE SENTI;So;0;L; 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; +3323;SQUARE SENTO;So;0;L; 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; +3324;SQUARE DAASU;So;0;L; 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; +3325;SQUARE DESI;So;0;L; 30C7 30B7;;;;N;SQUARED DESI;;;; +3326;SQUARE DORU;So;0;L; 30C9 30EB;;;;N;SQUARED DORU;;;; +3327;SQUARE TON;So;0;L; 30C8 30F3;;;;N;SQUARED TON;;;; +3328;SQUARE NANO;So;0;L; 30CA 30CE;;;;N;SQUARED NANO;;;; +3329;SQUARE NOTTO;So;0;L; 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; +332A;SQUARE HAITU;So;0;L; 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; +332B;SQUARE PAASENTO;So;0;L; 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; +332C;SQUARE PAATU;So;0;L; 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; +332D;SQUARE BAARERU;So;0;L; 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; +332E;SQUARE PIASUTORU;So;0;L; 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; +332F;SQUARE PIKURU;So;0;L; 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; +3330;SQUARE PIKO;So;0;L; 30D4 30B3;;;;N;SQUARED PIKO;;;; +3331;SQUARE BIRU;So;0;L; 30D3 30EB;;;;N;SQUARED BIRU;;;; +3332;SQUARE HUARADDO;So;0;L; 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; +3333;SQUARE HUIITO;So;0;L; 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; +3334;SQUARE BUSSYERU;So;0;L; 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; +3335;SQUARE HURAN;So;0;L; 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; +3336;SQUARE HEKUTAARU;So;0;L; 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; +3337;SQUARE PESO;So;0;L; 30DA 30BD;;;;N;SQUARED PESO;;;; +3338;SQUARE PENIHI;So;0;L; 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; +3339;SQUARE HERUTU;So;0;L; 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; +333A;SQUARE PENSU;So;0;L; 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; +333B;SQUARE PEEZI;So;0;L; 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; +333C;SQUARE BEETA;So;0;L; 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; +333D;SQUARE POINTO;So;0;L; 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; +333E;SQUARE BORUTO;So;0;L; 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; +333F;SQUARE HON;So;0;L; 30DB 30F3;;;;N;SQUARED HON;;;; +3340;SQUARE PONDO;So;0;L; 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; +3341;SQUARE HOORU;So;0;L; 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; +3342;SQUARE HOON;So;0;L; 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; +3343;SQUARE MAIKURO;So;0;L; 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; +3344;SQUARE MAIRU;So;0;L; 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; +3345;SQUARE MAHHA;So;0;L; 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; +3346;SQUARE MARUKU;So;0;L; 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; +3347;SQUARE MANSYON;So;0;L; 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; +3348;SQUARE MIKURON;So;0;L; 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; +3349;SQUARE MIRI;So;0;L; 30DF 30EA;;;;N;SQUARED MIRI;;;; +334A;SQUARE MIRIBAARU;So;0;L; 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; +334B;SQUARE MEGA;So;0;L; 30E1 30AC;;;;N;SQUARED MEGA;;;; +334C;SQUARE MEGATON;So;0;L; 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; +334D;SQUARE MEETORU;So;0;L; 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; +334E;SQUARE YAADO;So;0;L; 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; +334F;SQUARE YAARU;So;0;L; 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; +3350;SQUARE YUAN;So;0;L; 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; +3351;SQUARE RITTORU;So;0;L; 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; +3352;SQUARE RIRA;So;0;L; 30EA 30E9;;;;N;SQUARED RIRA;;;; +3353;SQUARE RUPII;So;0;L; 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; +3354;SQUARE RUUBURU;So;0;L; 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; +3355;SQUARE REMU;So;0;L; 30EC 30E0;;;;N;SQUARED REMU;;;; +3356;SQUARE RENTOGEN;So;0;L; 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; +3357;SQUARE WATTO;So;0;L; 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; +3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L; 0030 70B9;;;;N;;;;; +3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L; 0031 70B9;;;;N;;;;; +335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L; 0032 70B9;;;;N;;;;; +335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L; 0033 70B9;;;;N;;;;; +335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L; 0034 70B9;;;;N;;;;; +335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L; 0035 70B9;;;;N;;;;; +335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L; 0036 70B9;;;;N;;;;; +335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L; 0037 70B9;;;;N;;;;; +3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L; 0038 70B9;;;;N;;;;; +3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L; 0039 70B9;;;;N;;;;; +3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L; 0031 0030 70B9;;;;N;;;;; +3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L; 0031 0031 70B9;;;;N;;;;; +3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L; 0031 0032 70B9;;;;N;;;;; +3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L; 0031 0033 70B9;;;;N;;;;; +3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L; 0031 0034 70B9;;;;N;;;;; +3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L; 0031 0035 70B9;;;;N;;;;; +3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L; 0031 0036 70B9;;;;N;;;;; +3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L; 0031 0037 70B9;;;;N;;;;; +336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L; 0031 0038 70B9;;;;N;;;;; +336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L; 0031 0039 70B9;;;;N;;;;; +336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L; 0032 0030 70B9;;;;N;;;;; +336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L; 0032 0031 70B9;;;;N;;;;; +336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L; 0032 0032 70B9;;;;N;;;;; +336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L; 0032 0033 70B9;;;;N;;;;; +3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L; 0032 0034 70B9;;;;N;;;;; +3371;SQUARE HPA;So;0;L; 0068 0050 0061;;;;N;;;;; +3372;SQUARE DA;So;0;L; 0064 0061;;;;N;;;;; +3373;SQUARE AU;So;0;L; 0041 0055;;;;N;;;;; +3374;SQUARE BAR;So;0;L; 0062 0061 0072;;;;N;;;;; +3375;SQUARE OV;So;0;L; 006F 0056;;;;N;;;;; +3376;SQUARE PC;So;0;L; 0070 0063;;;;N;;;;; +3377;SQUARE DM;So;0;ON; 0064 006D;;;;N;;;;; +3378;SQUARE DM SQUARED;So;0;ON; 0064 006D 00B2;;;;N;;;;; +3379;SQUARE DM CUBED;So;0;ON; 0064 006D 00B3;;;;N;;;;; +337A;SQUARE IU;So;0;ON; 0049 0055;;;;N;;;;; +337B;SQUARE ERA NAME HEISEI;So;0;L; 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; +337C;SQUARE ERA NAME SYOUWA;So;0;L; 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; +337D;SQUARE ERA NAME TAISYOU;So;0;L; 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; +337E;SQUARE ERA NAME MEIZI;So;0;L; 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; +337F;SQUARE CORPORATION;So;0;L; 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; +3380;SQUARE PA AMPS;So;0;L; 0070 0041;;;;N;SQUARED PA AMPS;;;; +3381;SQUARE NA;So;0;L; 006E 0041;;;;N;SQUARED NA;;;; +3382;SQUARE MU A;So;0;L; 03BC 0041;;;;N;SQUARED MU A;;;; +3383;SQUARE MA;So;0;L; 006D 0041;;;;N;SQUARED MA;;;; +3384;SQUARE KA;So;0;L; 006B 0041;;;;N;SQUARED KA;;;; +3385;SQUARE KB;So;0;L; 004B 0042;;;;N;SQUARED KB;;;; +3386;SQUARE MB;So;0;L; 004D 0042;;;;N;SQUARED MB;;;; +3387;SQUARE GB;So;0;L; 0047 0042;;;;N;SQUARED GB;;;; +3388;SQUARE CAL;So;0;L; 0063 0061 006C;;;;N;SQUARED CAL;;;; +3389;SQUARE KCAL;So;0;L; 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; +338A;SQUARE PF;So;0;L; 0070 0046;;;;N;SQUARED PF;;;; +338B;SQUARE NF;So;0;L; 006E 0046;;;;N;SQUARED NF;;;; +338C;SQUARE MU F;So;0;L; 03BC 0046;;;;N;SQUARED MU F;;;; +338D;SQUARE MU G;So;0;L; 03BC 0067;;;;N;SQUARED MU G;;;; +338E;SQUARE MG;So;0;L; 006D 0067;;;;N;SQUARED MG;;;; +338F;SQUARE KG;So;0;L; 006B 0067;;;;N;SQUARED KG;;;; +3390;SQUARE HZ;So;0;L; 0048 007A;;;;N;SQUARED HZ;;;; +3391;SQUARE KHZ;So;0;L; 006B 0048 007A;;;;N;SQUARED KHZ;;;; +3392;SQUARE MHZ;So;0;L; 004D 0048 007A;;;;N;SQUARED MHZ;;;; +3393;SQUARE GHZ;So;0;L; 0047 0048 007A;;;;N;SQUARED GHZ;;;; +3394;SQUARE THZ;So;0;L; 0054 0048 007A;;;;N;SQUARED THZ;;;; +3395;SQUARE MU L;So;0;L; 03BC 2113;;;;N;SQUARED MU L;;;; +3396;SQUARE ML;So;0;L; 006D 2113;;;;N;SQUARED ML;;;; +3397;SQUARE DL;So;0;L; 0064 2113;;;;N;SQUARED DL;;;; +3398;SQUARE KL;So;0;L; 006B 2113;;;;N;SQUARED KL;;;; +3399;SQUARE FM;So;0;L; 0066 006D;;;;N;SQUARED FM;;;; +339A;SQUARE NM;So;0;L; 006E 006D;;;;N;SQUARED NM;;;; +339B;SQUARE MU M;So;0;L; 03BC 006D;;;;N;SQUARED MU M;;;; +339C;SQUARE MM;So;0;L; 006D 006D;;;;N;SQUARED MM;;;; +339D;SQUARE CM;So;0;L; 0063 006D;;;;N;SQUARED CM;;;; +339E;SQUARE KM;So;0;L; 006B 006D;;;;N;SQUARED KM;;;; +339F;SQUARE MM SQUARED;So;0;L; 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; +33A0;SQUARE CM SQUARED;So;0;L; 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; +33A1;SQUARE M SQUARED;So;0;L; 006D 00B2;;;;N;SQUARED M SQUARED;;;; +33A2;SQUARE KM SQUARED;So;0;L; 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; +33A3;SQUARE MM CUBED;So;0;L; 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; +33A4;SQUARE CM CUBED;So;0;L; 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; +33A5;SQUARE M CUBED;So;0;L; 006D 00B3;;;;N;SQUARED M CUBED;;;; +33A6;SQUARE KM CUBED;So;0;L; 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; +33A7;SQUARE M OVER S;So;0;L; 006D 2215 0073;;;;N;SQUARED M OVER S;;;; +33A8;SQUARE M OVER S SQUARED;So;0;L; 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; +33A9;SQUARE PA;So;0;L; 0050 0061;;;;N;SQUARED PA;;;; +33AA;SQUARE KPA;So;0;L; 006B 0050 0061;;;;N;SQUARED KPA;;;; +33AB;SQUARE MPA;So;0;L; 004D 0050 0061;;;;N;SQUARED MPA;;;; +33AC;SQUARE GPA;So;0;L; 0047 0050 0061;;;;N;SQUARED GPA;;;; +33AD;SQUARE RAD;So;0;L; 0072 0061 0064;;;;N;SQUARED RAD;;;; +33AE;SQUARE RAD OVER S;So;0;L; 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; +33AF;SQUARE RAD OVER S SQUARED;So;0;L; 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; +33B0;SQUARE PS;So;0;L; 0070 0073;;;;N;SQUARED PS;;;; +33B1;SQUARE NS;So;0;L; 006E 0073;;;;N;SQUARED NS;;;; +33B2;SQUARE MU S;So;0;L; 03BC 0073;;;;N;SQUARED MU S;;;; +33B3;SQUARE MS;So;0;L; 006D 0073;;;;N;SQUARED MS;;;; +33B4;SQUARE PV;So;0;L; 0070 0056;;;;N;SQUARED PV;;;; +33B5;SQUARE NV;So;0;L; 006E 0056;;;;N;SQUARED NV;;;; +33B6;SQUARE MU V;So;0;L; 03BC 0056;;;;N;SQUARED MU V;;;; +33B7;SQUARE MV;So;0;L; 006D 0056;;;;N;SQUARED MV;;;; +33B8;SQUARE KV;So;0;L; 006B 0056;;;;N;SQUARED KV;;;; +33B9;SQUARE MV MEGA;So;0;L; 004D 0056;;;;N;SQUARED MV MEGA;;;; +33BA;SQUARE PW;So;0;L; 0070 0057;;;;N;SQUARED PW;;;; +33BB;SQUARE NW;So;0;L; 006E 0057;;;;N;SQUARED NW;;;; +33BC;SQUARE MU W;So;0;L; 03BC 0057;;;;N;SQUARED MU W;;;; +33BD;SQUARE MW;So;0;L; 006D 0057;;;;N;SQUARED MW;;;; +33BE;SQUARE KW;So;0;L; 006B 0057;;;;N;SQUARED KW;;;; +33BF;SQUARE MW MEGA;So;0;L; 004D 0057;;;;N;SQUARED MW MEGA;;;; +33C0;SQUARE K OHM;So;0;L; 006B 03A9;;;;N;SQUARED K OHM;;;; +33C1;SQUARE M OHM;So;0;L; 004D 03A9;;;;N;SQUARED M OHM;;;; +33C2;SQUARE AM;So;0;L; 0061 002E 006D 002E;;;;N;SQUARED AM;;;; +33C3;SQUARE BQ;So;0;L; 0042 0071;;;;N;SQUARED BQ;;;; +33C4;SQUARE CC;So;0;L; 0063 0063;;;;N;SQUARED CC;;;; +33C5;SQUARE CD;So;0;L; 0063 0064;;;;N;SQUARED CD;;;; +33C6;SQUARE C OVER KG;So;0;L; 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; +33C7;SQUARE CO;So;0;L; 0043 006F 002E;;;;N;SQUARED CO;;;; +33C8;SQUARE DB;So;0;L; 0064 0042;;;;N;SQUARED DB;;;; +33C9;SQUARE GY;So;0;L; 0047 0079;;;;N;SQUARED GY;;;; +33CA;SQUARE HA;So;0;L; 0068 0061;;;;N;SQUARED HA;;;; +33CB;SQUARE HP;So;0;L; 0048 0050;;;;N;SQUARED HP;;;; +33CC;SQUARE IN;So;0;L; 0069 006E;;;;N;SQUARED IN;;;; +33CD;SQUARE KK;So;0;L; 004B 004B;;;;N;SQUARED KK;;;; +33CE;SQUARE KM CAPITAL;So;0;L; 004B 004D;;;;N;SQUARED KM CAPITAL;;;; +33CF;SQUARE KT;So;0;L; 006B 0074;;;;N;SQUARED KT;;;; +33D0;SQUARE LM;So;0;L; 006C 006D;;;;N;SQUARED LM;;;; +33D1;SQUARE LN;So;0;L; 006C 006E;;;;N;SQUARED LN;;;; +33D2;SQUARE LOG;So;0;L; 006C 006F 0067;;;;N;SQUARED LOG;;;; +33D3;SQUARE LX;So;0;L; 006C 0078;;;;N;SQUARED LX;;;; +33D4;SQUARE MB SMALL;So;0;L; 006D 0062;;;;N;SQUARED MB SMALL;;;; +33D5;SQUARE MIL;So;0;L; 006D 0069 006C;;;;N;SQUARED MIL;;;; +33D6;SQUARE MOL;So;0;L; 006D 006F 006C;;;;N;SQUARED MOL;;;; +33D7;SQUARE PH;So;0;L; 0050 0048;;;;N;SQUARED PH;;;; +33D8;SQUARE PM;So;0;L; 0070 002E 006D 002E;;;;N;SQUARED PM;;;; +33D9;SQUARE PPM;So;0;L; 0050 0050 004D;;;;N;SQUARED PPM;;;; +33DA;SQUARE PR;So;0;L; 0050 0052;;;;N;SQUARED PR;;;; +33DB;SQUARE SR;So;0;L; 0073 0072;;;;N;SQUARED SR;;;; +33DC;SQUARE SV;So;0;L; 0053 0076;;;;N;SQUARED SV;;;; +33DD;SQUARE WB;So;0;L; 0057 0062;;;;N;SQUARED WB;;;; +33DE;SQUARE V OVER M;So;0;ON; 0056 2215 006D;;;;N;;;;; +33DF;SQUARE A OVER M;So;0;ON; 0041 2215 006D;;;;N;;;;; +33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L; 0031 65E5;;;;N;;;;; +33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L; 0032 65E5;;;;N;;;;; +33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L; 0033 65E5;;;;N;;;;; +33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L; 0034 65E5;;;;N;;;;; +33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L; 0035 65E5;;;;N;;;;; +33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L; 0036 65E5;;;;N;;;;; +33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L; 0037 65E5;;;;N;;;;; +33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L; 0038 65E5;;;;N;;;;; +33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L; 0039 65E5;;;;N;;;;; +33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L; 0031 0030 65E5;;;;N;;;;; +33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L; 0031 0031 65E5;;;;N;;;;; +33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L; 0031 0032 65E5;;;;N;;;;; +33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L; 0031 0033 65E5;;;;N;;;;; +33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L; 0031 0034 65E5;;;;N;;;;; +33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L; 0031 0035 65E5;;;;N;;;;; +33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L; 0031 0036 65E5;;;;N;;;;; +33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L; 0031 0037 65E5;;;;N;;;;; +33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L; 0031 0038 65E5;;;;N;;;;; +33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L; 0031 0039 65E5;;;;N;;;;; +33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L; 0032 0030 65E5;;;;N;;;;; +33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L; 0032 0031 65E5;;;;N;;;;; +33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L; 0032 0032 65E5;;;;N;;;;; +33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L; 0032 0033 65E5;;;;N;;;;; +33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L; 0032 0034 65E5;;;;N;;;;; +33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L; 0032 0035 65E5;;;;N;;;;; +33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L; 0032 0036 65E5;;;;N;;;;; +33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L; 0032 0037 65E5;;;;N;;;;; +33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L; 0032 0038 65E5;;;;N;;;;; +33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L; 0032 0039 65E5;;;;N;;;;; +33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L; 0033 0030 65E5;;;;N;;;;; +33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L; 0033 0031 65E5;;;;N;;;;; +33FF;SQUARE GAL;So;0;ON; 0067 0061 006C;;;;N;;;;; +3400;;Lo;0;L;;;;;N;;;;; +4DB5;;Lo;0;L;;;;;N;;;;; +4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;; +4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;; +4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;; +4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;; +4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; +4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;; +4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;; +4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;; +4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;; +4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;; +4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;; +4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;; +4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;; +4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;; +4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;; +4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;; +4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; +4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;; +4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;; +4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;; +4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;; +4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;; +4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;; +4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;; +4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;; +4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;; +4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;; +4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;; +4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;; +4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;; +4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;; +4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;; +4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;; +4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;; +4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;; +4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;; +4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;; +4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; +4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;; +4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;; +4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;; +4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; +4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;; +4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;; +4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;; +4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;; +4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;; +4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;; +4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;; +4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;; +4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;; +4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;; +4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;; +4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;; +4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;; +4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;; +4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;; +4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;; +4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;; +4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;; +4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;; +4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;; +4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; +4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; +4E00;;Lo;0;L;;;;;N;;;;; +9FCB;;Lo;0;L;;;;;N;;;;; +A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; +A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; +A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; +A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; +A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; +A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; +A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; +A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; +A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; +A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; +A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; +A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; +A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; +A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; +A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; +A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; +A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; +A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; +A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; +A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; +A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; +A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; +A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; +A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; +A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; +A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; +A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; +A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; +A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; +A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; +A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; +A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; +A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; +A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; +A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; +A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; +A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; +A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; +A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; +A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; +A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; +A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; +A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; +A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; +A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; +A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; +A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; +A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; +A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; +A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; +A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; +A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; +A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; +A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; +A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; +A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; +A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; +A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; +A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; +A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; +A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; +A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; +A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; +A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; +A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; +A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; +A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; +A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; +A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; +A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; +A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; +A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; +A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; +A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; +A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; +A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; +A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; +A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; +A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; +A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; +A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; +A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; +A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; +A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; +A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; +A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; +A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; +A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; +A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; +A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; +A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; +A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; +A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; +A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; +A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; +A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; +A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; +A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; +A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; +A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; +A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; +A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; +A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; +A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; +A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; +A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; +A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; +A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; +A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; +A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; +A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; +A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; +A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; +A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; +A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; +A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; +A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; +A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; +A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; +A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; +A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; +A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; +A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; +A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; +A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; +A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; +A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; +A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; +A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; +A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; +A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; +A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; +A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; +A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; +A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; +A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; +A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; +A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; +A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; +A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; +A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; +A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; +A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; +A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; +A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; +A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; +A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; +A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; +A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; +A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; +A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; +A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; +A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; +A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; +A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; +A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; +A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; +A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; +A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; +A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; +A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; +A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; +A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; +A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; +A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; +A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; +A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; +A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; +A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; +A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; +A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; +A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; +A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; +A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; +A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; +A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; +A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; +A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; +A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; +A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; +A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; +A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; +A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; +A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; +A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; +A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; +A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; +A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; +A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; +A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; +A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; +A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; +A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; +A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; +A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; +A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; +A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; +A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; +A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; +A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; +A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; +A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; +A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; +A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; +A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; +A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; +A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; +A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; +A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; +A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; +A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; +A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; +A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; +A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; +A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; +A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; +A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; +A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; +A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; +A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; +A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; +A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; +A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; +A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; +A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; +A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; +A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; +A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; +A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; +A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; +A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; +A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; +A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; +A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; +A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; +A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; +A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; +A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; +A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; +A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; +A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; +A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; +A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; +A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; +A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; +A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; +A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; +A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; +A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; +A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; +A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; +A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; +A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; +A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; +A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; +A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; +A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; +A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; +A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; +A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; +A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; +A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; +A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; +A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; +A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; +A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; +A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; +A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; +A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; +A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; +A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; +A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; +A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; +A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; +A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; +A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; +A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; +A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; +A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; +A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; +A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; +A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; +A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; +A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; +A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; +A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; +A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; +A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; +A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; +A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; +A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; +A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; +A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; +A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; +A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; +A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; +A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; +A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; +A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; +A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; +A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; +A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; +A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; +A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; +A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; +A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; +A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; +A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; +A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; +A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; +A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; +A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; +A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; +A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; +A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; +A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; +A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; +A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; +A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; +A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; +A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; +A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; +A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; +A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; +A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; +A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; +A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; +A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; +A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; +A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; +A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; +A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; +A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; +A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; +A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; +A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; +A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; +A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; +A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; +A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; +A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; +A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; +A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; +A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; +A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; +A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; +A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; +A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; +A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; +A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; +A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; +A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; +A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; +A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; +A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; +A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; +A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; +A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; +A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; +A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; +A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; +A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; +A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; +A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; +A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; +A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; +A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; +A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; +A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; +A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; +A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; +A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; +A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; +A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; +A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; +A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; +A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; +A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; +A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; +A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; +A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; +A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; +A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; +A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; +A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; +A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; +A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; +A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; +A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; +A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; +A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; +A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; +A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; +A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; +A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; +A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; +A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; +A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; +A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; +A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; +A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; +A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; +A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; +A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; +A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; +A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; +A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; +A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; +A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; +A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; +A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; +A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; +A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; +A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; +A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; +A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; +A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; +A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; +A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; +A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; +A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; +A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; +A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; +A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; +A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; +A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; +A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; +A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; +A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; +A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; +A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; +A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; +A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; +A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; +A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; +A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; +A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; +A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; +A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; +A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; +A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; +A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; +A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; +A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; +A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; +A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; +A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; +A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; +A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; +A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; +A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; +A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; +A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; +A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; +A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; +A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; +A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; +A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; +A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; +A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; +A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; +A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; +A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; +A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; +A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; +A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; +A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; +A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; +A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; +A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; +A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; +A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; +A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; +A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; +A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; +A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; +A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; +A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; +A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; +A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; +A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; +A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; +A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; +A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; +A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; +A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; +A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; +A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; +A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; +A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; +A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; +A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; +A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; +A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; +A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; +A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; +A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; +A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; +A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; +A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; +A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; +A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; +A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; +A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; +A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; +A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; +A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; +A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; +A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; +A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; +A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; +A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; +A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; +A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; +A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; +A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; +A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; +A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; +A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; +A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; +A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; +A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; +A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; +A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; +A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; +A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; +A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; +A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; +A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; +A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; +A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; +A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; +A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; +A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; +A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; +A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; +A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; +A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; +A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; +A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; +A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; +A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; +A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; +A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; +A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; +A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; +A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; +A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; +A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; +A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; +A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; +A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; +A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; +A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; +A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; +A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; +A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; +A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; +A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; +A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; +A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; +A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; +A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; +A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; +A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; +A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; +A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; +A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; +A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; +A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; +A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; +A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; +A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; +A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; +A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; +A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; +A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; +A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; +A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; +A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; +A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; +A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; +A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; +A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; +A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; +A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; +A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; +A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; +A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; +A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; +A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; +A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; +A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; +A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; +A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; +A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; +A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; +A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; +A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; +A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; +A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; +A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; +A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; +A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; +A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; +A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; +A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; +A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; +A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; +A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; +A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; +A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; +A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; +A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; +A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; +A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; +A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; +A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; +A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; +A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; +A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; +A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; +A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; +A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; +A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; +A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; +A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; +A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; +A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; +A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; +A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; +A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; +A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; +A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; +A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; +A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; +A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; +A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; +A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; +A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; +A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; +A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; +A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; +A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; +A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; +A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; +A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; +A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; +A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; +A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; +A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; +A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; +A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; +A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; +A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; +A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; +A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; +A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; +A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; +A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; +A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; +A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; +A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; +A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; +A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; +A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; +A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; +A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; +A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; +A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; +A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; +A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; +A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; +A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; +A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; +A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; +A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; +A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; +A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; +A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; +A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; +A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; +A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; +A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; +A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; +A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; +A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; +A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; +A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; +A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; +A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; +A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; +A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; +A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; +A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; +A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; +A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; +A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; +A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; +A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; +A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; +A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; +A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; +A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; +A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; +A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; +A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; +A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; +A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; +A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; +A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; +A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; +A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; +A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; +A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; +A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; +A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; +A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; +A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; +A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; +A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; +A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; +A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; +A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; +A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; +A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; +A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; +A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; +A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; +A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; +A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; +A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; +A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; +A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; +A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; +A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; +A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; +A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; +A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; +A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; +A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; +A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; +A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; +A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; +A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; +A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; +A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; +A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; +A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; +A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; +A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; +A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; +A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; +A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; +A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; +A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; +A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; +A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; +A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; +A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; +A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; +A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; +A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; +A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; +A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; +A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; +A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; +A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; +A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; +A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; +A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; +A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; +A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; +A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; +A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; +A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; +A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; +A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; +A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; +A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; +A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; +A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; +A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; +A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; +A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; +A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; +A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; +A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; +A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; +A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; +A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; +A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; +A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; +A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; +A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; +A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; +A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; +A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; +A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; +A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; +A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; +A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; +A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; +A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; +A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; +A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; +A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; +A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; +A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; +A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; +A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; +A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; +A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; +A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; +A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; +A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; +A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; +A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; +A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; +A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; +A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; +A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; +A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; +A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; +A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; +A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; +A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; +A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; +A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; +A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; +A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; +A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; +A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; +A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; +A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; +A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; +A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; +A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; +A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; +A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; +A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; +A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; +A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; +A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; +A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; +A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; +A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; +A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; +A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; +A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; +A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; +A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; +A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; +A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; +A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; +A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; +A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; +A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; +A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; +A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; +A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; +A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; +A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; +A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; +A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; +A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; +A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; +A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; +A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; +A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; +A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; +A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; +A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; +A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; +A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; +A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; +A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; +A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; +A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; +A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; +A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; +A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; +A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; +A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; +A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; +A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; +A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; +A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; +A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; +A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; +A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; +A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; +A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; +A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; +A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; +A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; +A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; +A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; +A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; +A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; +A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; +A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; +A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; +A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; +A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; +A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; +A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; +A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; +A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; +A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; +A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; +A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; +A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; +A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; +A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; +A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; +A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; +A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; +A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; +A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; +A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; +A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; +A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; +A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; +A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; +A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; +A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; +A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; +A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; +A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; +A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; +A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; +A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; +A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; +A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; +A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; +A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; +A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; +A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; +A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; +A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; +A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; +A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; +A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; +A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; +A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; +A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; +A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; +A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; +A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; +A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; +A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; +A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; +A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; +A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; +A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; +A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; +A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; +A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; +A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; +A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; +A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; +A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; +A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; +A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; +A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; +A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; +A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; +A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; +A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; +A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; +A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; +A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; +A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; +A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; +A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; +A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; +A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; +A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; +A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; +A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; +A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; +A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; +A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; +A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; +A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; +A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; +A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; +A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; +A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; +A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; +A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; +A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; +A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; +A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; +A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; +A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; +A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; +A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; +A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; +A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; +A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; +A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; +A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; +A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; +A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; +A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; +A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; +A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; +A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; +A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; +A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; +A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; +A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; +A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; +A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; +A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; +A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; +A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; +A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; +A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; +A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; +A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; +A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; +A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; +A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; +A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; +A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; +A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; +A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; +A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; +A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; +A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; +A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; +A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; +A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; +A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; +A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; +A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; +A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; +A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; +A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; +A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; +A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; +A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; +A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; +A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; +A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; +A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; +A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; +A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; +A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; +A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; +A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; +A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; +A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; +A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; +A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; +A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; +A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; +A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; +A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; +A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; +A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; +A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; +A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; +A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; +A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; +A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; +A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; +A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; +A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; +A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; +A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; +A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; +A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; +A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; +A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; +A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; +A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; +A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; +A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; +A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; +A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; +A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; +A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; +A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; +A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; +A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; +A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; +A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; +A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; +A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; +A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; +A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; +A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; +A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; +A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; +A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; +A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; +A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; +A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; +A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; +A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; +A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; +A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; +A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; +A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; +A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; +A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; +A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; +A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; +A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; +A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; +A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; +A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; +A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; +A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; +A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; +A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; +A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; +A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; +A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; +A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; +A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; +A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; +A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; +A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; +A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; +A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; +A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; +A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; +A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; +A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; +A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; +A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; +A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; +A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; +A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; +A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; +A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; +A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; +A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; +A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; +A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; +A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; +A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; +A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; +A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; +A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; +A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; +A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; +A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; +A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; +A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; +A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; +A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;; +A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;; +A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; +A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; +A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; +A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; +A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; +A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; +A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; +A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; +A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; +A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; +A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; +A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; +A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; +A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; +A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; +A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; +A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;; +A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; +A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; +A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; +A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; +A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; +A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; +A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; +A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; +A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; +A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; +A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; +A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; +A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;; +A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; +A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; +A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; +A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; +A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; +A4D0;LISU LETTER BA;Lo;0;L;;;;;N;;;;; +A4D1;LISU LETTER PA;Lo;0;L;;;;;N;;;;; +A4D2;LISU LETTER PHA;Lo;0;L;;;;;N;;;;; +A4D3;LISU LETTER DA;Lo;0;L;;;;;N;;;;; +A4D4;LISU LETTER TA;Lo;0;L;;;;;N;;;;; +A4D5;LISU LETTER THA;Lo;0;L;;;;;N;;;;; +A4D6;LISU LETTER GA;Lo;0;L;;;;;N;;;;; +A4D7;LISU LETTER KA;Lo;0;L;;;;;N;;;;; +A4D8;LISU LETTER KHA;Lo;0;L;;;;;N;;;;; +A4D9;LISU LETTER JA;Lo;0;L;;;;;N;;;;; +A4DA;LISU LETTER CA;Lo;0;L;;;;;N;;;;; +A4DB;LISU LETTER CHA;Lo;0;L;;;;;N;;;;; +A4DC;LISU LETTER DZA;Lo;0;L;;;;;N;;;;; +A4DD;LISU LETTER TSA;Lo;0;L;;;;;N;;;;; +A4DE;LISU LETTER TSHA;Lo;0;L;;;;;N;;;;; +A4DF;LISU LETTER MA;Lo;0;L;;;;;N;;;;; +A4E0;LISU LETTER NA;Lo;0;L;;;;;N;;;;; +A4E1;LISU LETTER LA;Lo;0;L;;;;;N;;;;; +A4E2;LISU LETTER SA;Lo;0;L;;;;;N;;;;; +A4E3;LISU LETTER ZHA;Lo;0;L;;;;;N;;;;; +A4E4;LISU LETTER ZA;Lo;0;L;;;;;N;;;;; +A4E5;LISU LETTER NGA;Lo;0;L;;;;;N;;;;; +A4E6;LISU LETTER HA;Lo;0;L;;;;;N;;;;; +A4E7;LISU LETTER XA;Lo;0;L;;;;;N;;;;; +A4E8;LISU LETTER HHA;Lo;0;L;;;;;N;;;;; +A4E9;LISU LETTER FA;Lo;0;L;;;;;N;;;;; +A4EA;LISU LETTER WA;Lo;0;L;;;;;N;;;;; +A4EB;LISU LETTER SHA;Lo;0;L;;;;;N;;;;; +A4EC;LISU LETTER YA;Lo;0;L;;;;;N;;;;; +A4ED;LISU LETTER GHA;Lo;0;L;;;;;N;;;;; +A4EE;LISU LETTER A;Lo;0;L;;;;;N;;;;; +A4EF;LISU LETTER AE;Lo;0;L;;;;;N;;;;; +A4F0;LISU LETTER E;Lo;0;L;;;;;N;;;;; +A4F1;LISU LETTER EU;Lo;0;L;;;;;N;;;;; +A4F2;LISU LETTER I;Lo;0;L;;;;;N;;;;; +A4F3;LISU LETTER O;Lo;0;L;;;;;N;;;;; +A4F4;LISU LETTER U;Lo;0;L;;;;;N;;;;; +A4F5;LISU LETTER UE;Lo;0;L;;;;;N;;;;; +A4F6;LISU LETTER UH;Lo;0;L;;;;;N;;;;; +A4F7;LISU LETTER OE;Lo;0;L;;;;;N;;;;; +A4F8;LISU LETTER TONE MYA TI;Lm;0;L;;;;;N;;;;; +A4F9;LISU LETTER TONE NA PO;Lm;0;L;;;;;N;;;;; +A4FA;LISU LETTER TONE MYA CYA;Lm;0;L;;;;;N;;;;; +A4FB;LISU LETTER TONE MYA BO;Lm;0;L;;;;;N;;;;; +A4FC;LISU LETTER TONE MYA NA;Lm;0;L;;;;;N;;;;; +A4FD;LISU LETTER TONE MYA JEU;Lm;0;L;;;;;N;;;;; +A4FE;LISU PUNCTUATION COMMA;Po;0;L;;;;;N;;;;; +A4FF;LISU PUNCTUATION FULL STOP;Po;0;L;;;;;N;;;;; +A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;; +A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;; +A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;; +A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;; +A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;; +A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;; +A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;; +A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;; +A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;; +A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;; +A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;; +A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;; +A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;; +A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;; +A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;; +A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;; +A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;; +A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;; +A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;; +A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;; +A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;; +A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;; +A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;; +A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; +A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; +A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; +A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;; +A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;; +A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;; +A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;; +A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;; +A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;; +A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;; +A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;; +A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;; +A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; +A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;; +A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;; +A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;; +A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;; +A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;; +A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;; +A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;; +A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;; +A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;; +A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;; +A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;; +A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;; +A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;; +A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;; +A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;; +A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;; +A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;; +A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;; +A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;; +A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;; +A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;; +A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;; +A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; +A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;; +A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;; +A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; +A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;; +A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;; +A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; +A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;; +A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;; +A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;; +A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;; +A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;; +A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;; +A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;; +A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;; +A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;; +A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;; +A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;; +A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;; +A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;; +A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;; +A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;; +A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;; +A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;; +A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;; +A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;; +A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;; +A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;; +A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;; +A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;; +A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;; +A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;; +A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;; +A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;; +A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;; +A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;; +A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;; +A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; +A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;; +A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;; +A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;; +A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;; +A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;; +A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;; +A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;; +A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;; +A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;; +A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;; +A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;; +A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;; +A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;; +A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;; +A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;; +A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;; +A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;; +A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;; +A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;; +A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;; +A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;; +A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;; +A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;; +A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;; +A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;; +A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;; +A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;; +A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;; +A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;; +A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;; +A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;; +A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;; +A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;; +A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;; +A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;; +A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;; +A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;; +A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;; +A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;; +A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;; +A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;; +A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;; +A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;; +A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;; +A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;; +A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;; +A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;; +A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;; +A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;; +A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;; +A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;; +A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;; +A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;; +A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;; +A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;; +A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;; +A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;; +A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;; +A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;; +A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;; +A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;; +A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;; +A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;; +A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;; +A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;; +A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;; +A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;; +A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;; +A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;; +A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;; +A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; +A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;; +A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;; +A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;; +A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; +A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;; +A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;; +A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;; +A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;; +A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;; +A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;; +A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;; +A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;; +A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;; +A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;; +A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;; +A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;; +A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;; +A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;; +A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;; +A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;; +A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;; +A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;; +A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;; +A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;; +A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;; +A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;; +A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;; +A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;; +A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;; +A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;; +A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;; +A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;; +A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;; +A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;; +A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; +A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;; +A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;; +A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;; +A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; +A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;; +A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;; +A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;; +A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;; +A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;; +A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;; +A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;; +A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;; +A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;; +A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;; +A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;; +A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;; +A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;; +A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;; +A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;; +A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;; +A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;; +A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;; +A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;; +A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;; +A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;; +A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;; +A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;; +A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;; +A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;; +A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;; +A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;; +A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;; +A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;; +A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;; +A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;; +A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; +A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;; +A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;; +A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;; +A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;; +A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;; +A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;; +A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;; +A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;; +A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;; +A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;; +A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;; +A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;; +A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;; +A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;; +A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; +A60D;VAI COMMA;Po;0;ON;;;;;N;;;;; +A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;; +A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;; +A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;; +A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;; +A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;; +A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;; +A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;; +A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;; +A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;; +A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;; +A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;; +A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;; +A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;; +A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;; +A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;; +A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;; +A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;; +A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;; +A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;; +A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;; +A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; +A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 +A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643; +A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642 +A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645; +A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644 +A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647; +A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646 +A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649; +A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648 +A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B; +A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A +A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D; +A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C +A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; +A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E +A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651; +A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650 +A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653; +A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652 +A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655; +A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654 +A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657; +A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656 +A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659; +A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658 +A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B; +A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A +A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D; +A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C +A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F; +A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E +A660;CYRILLIC CAPITAL LETTER REVERSED TSE;Lu;0;L;;;;;N;;;;A661; +A661;CYRILLIC SMALL LETTER REVERSED TSE;Ll;0;L;;;;;N;;;A660;;A660 +A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663; +A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662 +A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665; +A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664 +A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667; +A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666 +A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669; +A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668 +A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B; +A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A +A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D; +A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C +A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;; +A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;; +A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;; +A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;; +A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;; +A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;; +A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;; +A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681; +A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680 +A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683; +A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682 +A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685; +A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684 +A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687; +A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686 +A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689; +A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688 +A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B; +A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A +A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D; +A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C +A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F; +A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E +A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691; +A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690 +A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693; +A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692 +A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695; +A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694 +A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697; +A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696 +A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;; +A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;; +A6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;; +A6A3;BAMUM LETTER KU;Lo;0;L;;;;;N;;;;; +A6A4;BAMUM LETTER EE;Lo;0;L;;;;;N;;;;; +A6A5;BAMUM LETTER REE;Lo;0;L;;;;;N;;;;; +A6A6;BAMUM LETTER TAE;Lo;0;L;;;;;N;;;;; +A6A7;BAMUM LETTER O;Lo;0;L;;;;;N;;;;; +A6A8;BAMUM LETTER NYI;Lo;0;L;;;;;N;;;;; +A6A9;BAMUM LETTER I;Lo;0;L;;;;;N;;;;; +A6AA;BAMUM LETTER LA;Lo;0;L;;;;;N;;;;; +A6AB;BAMUM LETTER PA;Lo;0;L;;;;;N;;;;; +A6AC;BAMUM LETTER RII;Lo;0;L;;;;;N;;;;; +A6AD;BAMUM LETTER RIEE;Lo;0;L;;;;;N;;;;; +A6AE;BAMUM LETTER LEEEE;Lo;0;L;;;;;N;;;;; +A6AF;BAMUM LETTER MEEEE;Lo;0;L;;;;;N;;;;; +A6B0;BAMUM LETTER TAA;Lo;0;L;;;;;N;;;;; +A6B1;BAMUM LETTER NDAA;Lo;0;L;;;;;N;;;;; +A6B2;BAMUM LETTER NJAEM;Lo;0;L;;;;;N;;;;; +A6B3;BAMUM LETTER M;Lo;0;L;;;;;N;;;;; +A6B4;BAMUM LETTER SUU;Lo;0;L;;;;;N;;;;; +A6B5;BAMUM LETTER MU;Lo;0;L;;;;;N;;;;; +A6B6;BAMUM LETTER SHII;Lo;0;L;;;;;N;;;;; +A6B7;BAMUM LETTER SI;Lo;0;L;;;;;N;;;;; +A6B8;BAMUM LETTER SHEUX;Lo;0;L;;;;;N;;;;; +A6B9;BAMUM LETTER SEUX;Lo;0;L;;;;;N;;;;; +A6BA;BAMUM LETTER KYEE;Lo;0;L;;;;;N;;;;; +A6BB;BAMUM LETTER KET;Lo;0;L;;;;;N;;;;; +A6BC;BAMUM LETTER NUAE;Lo;0;L;;;;;N;;;;; +A6BD;BAMUM LETTER NU;Lo;0;L;;;;;N;;;;; +A6BE;BAMUM LETTER NJUAE;Lo;0;L;;;;;N;;;;; +A6BF;BAMUM LETTER YOQ;Lo;0;L;;;;;N;;;;; +A6C0;BAMUM LETTER SHU;Lo;0;L;;;;;N;;;;; +A6C1;BAMUM LETTER YUQ;Lo;0;L;;;;;N;;;;; +A6C2;BAMUM LETTER YA;Lo;0;L;;;;;N;;;;; +A6C3;BAMUM LETTER NSHA;Lo;0;L;;;;;N;;;;; +A6C4;BAMUM LETTER KEUX;Lo;0;L;;;;;N;;;;; +A6C5;BAMUM LETTER PEUX;Lo;0;L;;;;;N;;;;; +A6C6;BAMUM LETTER NJEE;Lo;0;L;;;;;N;;;;; +A6C7;BAMUM LETTER NTEE;Lo;0;L;;;;;N;;;;; +A6C8;BAMUM LETTER PUE;Lo;0;L;;;;;N;;;;; +A6C9;BAMUM LETTER WUE;Lo;0;L;;;;;N;;;;; +A6CA;BAMUM LETTER PEE;Lo;0;L;;;;;N;;;;; +A6CB;BAMUM LETTER FEE;Lo;0;L;;;;;N;;;;; +A6CC;BAMUM LETTER RU;Lo;0;L;;;;;N;;;;; +A6CD;BAMUM LETTER LU;Lo;0;L;;;;;N;;;;; +A6CE;BAMUM LETTER MI;Lo;0;L;;;;;N;;;;; +A6CF;BAMUM LETTER NI;Lo;0;L;;;;;N;;;;; +A6D0;BAMUM LETTER REUX;Lo;0;L;;;;;N;;;;; +A6D1;BAMUM LETTER RAE;Lo;0;L;;;;;N;;;;; +A6D2;BAMUM LETTER KEN;Lo;0;L;;;;;N;;;;; +A6D3;BAMUM LETTER NGKWAEN;Lo;0;L;;;;;N;;;;; +A6D4;BAMUM LETTER NGGA;Lo;0;L;;;;;N;;;;; +A6D5;BAMUM LETTER NGA;Lo;0;L;;;;;N;;;;; +A6D6;BAMUM LETTER SHO;Lo;0;L;;;;;N;;;;; +A6D7;BAMUM LETTER PUAE;Lo;0;L;;;;;N;;;;; +A6D8;BAMUM LETTER FU;Lo;0;L;;;;;N;;;;; +A6D9;BAMUM LETTER FOM;Lo;0;L;;;;;N;;;;; +A6DA;BAMUM LETTER WA;Lo;0;L;;;;;N;;;;; +A6DB;BAMUM LETTER NA;Lo;0;L;;;;;N;;;;; +A6DC;BAMUM LETTER LI;Lo;0;L;;;;;N;;;;; +A6DD;BAMUM LETTER PI;Lo;0;L;;;;;N;;;;; +A6DE;BAMUM LETTER LOQ;Lo;0;L;;;;;N;;;;; +A6DF;BAMUM LETTER KO;Lo;0;L;;;;;N;;;;; +A6E0;BAMUM LETTER MBEN;Lo;0;L;;;;;N;;;;; +A6E1;BAMUM LETTER REN;Lo;0;L;;;;;N;;;;; +A6E2;BAMUM LETTER MEN;Lo;0;L;;;;;N;;;;; +A6E3;BAMUM LETTER MA;Lo;0;L;;;;;N;;;;; +A6E4;BAMUM LETTER TI;Lo;0;L;;;;;N;;;;; +A6E5;BAMUM LETTER KI;Lo;0;L;;;;;N;;;;; +A6E6;BAMUM LETTER MO;Nl;0;L;;;;1;N;;;;; +A6E7;BAMUM LETTER MBAA;Nl;0;L;;;;2;N;;;;; +A6E8;BAMUM LETTER TET;Nl;0;L;;;;3;N;;;;; +A6E9;BAMUM LETTER KPA;Nl;0;L;;;;4;N;;;;; +A6EA;BAMUM LETTER TEN;Nl;0;L;;;;5;N;;;;; +A6EB;BAMUM LETTER NTUU;Nl;0;L;;;;6;N;;;;; +A6EC;BAMUM LETTER SAMBA;Nl;0;L;;;;7;N;;;;; +A6ED;BAMUM LETTER FAAMAE;Nl;0;L;;;;8;N;;;;; +A6EE;BAMUM LETTER KOVUU;Nl;0;L;;;;9;N;;;;; +A6EF;BAMUM LETTER KOGHOM;Nl;0;L;;;;0;N;;;;; +A6F0;BAMUM COMBINING MARK KOQNDON;Mn;230;NSM;;;;;N;;;;; +A6F1;BAMUM COMBINING MARK TUKWENTIS;Mn;230;NSM;;;;;N;;;;; +A6F2;BAMUM NJAEMLI;Po;0;L;;;;;N;;;;; +A6F3;BAMUM FULL STOP;Po;0;L;;;;;N;;;;; +A6F4;BAMUM COLON;Po;0;L;;;;;N;;;;; +A6F5;BAMUM COMMA;Po;0;L;;;;;N;;;;; +A6F6;BAMUM SEMICOLON;Po;0;L;;;;;N;;;;; +A6F7;BAMUM QUESTION MARK;Po;0;L;;;;;N;;;;; +A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; +A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; +A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; +A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; +A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; +A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; +A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; +A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; +A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; +A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; +A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; +A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; +A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;; +A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;; +A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; +A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; +A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723; +A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722 +A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725; +A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724 +A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727; +A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726 +A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729; +A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728 +A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B; +A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A +A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D; +A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C +A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F; +A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E +A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;; +A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;; +A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733; +A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732 +A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735; +A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734 +A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737; +A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736 +A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739; +A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738 +A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B; +A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A +A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D; +A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C +A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F; +A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E +A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741; +A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740 +A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743; +A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742 +A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745; +A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744 +A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747; +A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746 +A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749; +A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748 +A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B; +A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A +A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D; +A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C +A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F; +A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E +A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751; +A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750 +A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753; +A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752 +A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755; +A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754 +A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757; +A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756 +A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759; +A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758 +A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B; +A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A +A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D; +A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C +A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F; +A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E +A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761; +A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760 +A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763; +A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762 +A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765; +A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764 +A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767; +A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766 +A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769; +A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768 +A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B; +A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A +A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D; +A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C +A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F; +A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E +A770;MODIFIER LETTER US;Lm;0;L; A76F;;;;N;;;;; +A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;; +A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;; +A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;; +A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;; +A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;; +A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;; +A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;; +A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;; +A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A; +A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779 +A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C; +A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B +A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79; +A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F; +A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E +A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781; +A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780 +A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783; +A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782 +A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785; +A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784 +A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787; +A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786 +A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;; +A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;; +A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;; +A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C; +A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B +A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265; +A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;; +A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791; +A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790 +A7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1; +A7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0 +A7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3; +A7A3;LATIN SMALL LETTER K WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A2;;A7A2 +A7A4;LATIN CAPITAL LETTER N WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A5; +A7A5;LATIN SMALL LETTER N WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A4;;A7A4 +A7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7; +A7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6 +A7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9; +A7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8 +A7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;; +A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;; +A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;; +A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;; +A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;; +A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;; +A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; +A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; +A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;; +A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; +A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; +A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; +A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; +A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; +A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; +A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; +A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; +A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; +A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; +A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; +A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; +A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; +A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; +A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; +A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; +A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; +A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; +A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; +A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; +A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; +A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; +A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; +A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; +A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; +A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; +A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; +A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; +A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; +A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; +A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; +A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; +A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; +A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; +A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; +A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; +A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; +A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; +A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; +A833;NORTH INDIC FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;; +A834;NORTH INDIC FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;; +A835;NORTH INDIC FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;; +A836;NORTH INDIC QUARTER MARK;So;0;L;;;;;N;;;;; +A837;NORTH INDIC PLACEHOLDER MARK;So;0;L;;;;;N;;;;; +A838;NORTH INDIC RUPEE MARK;Sc;0;ET;;;;;N;;;;; +A839;NORTH INDIC QUANTITY MARK;So;0;ET;;;;;N;;;;; +A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; +A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; +A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; +A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; +A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; +A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; +A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; +A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; +A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; +A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; +A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; +A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; +A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; +A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; +A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; +A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; +A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; +A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; +A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; +A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; +A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; +A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; +A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; +A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; +A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; +A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; +A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; +A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; +A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; +A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; +A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; +A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; +A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; +A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; +A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; +A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; +A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; +A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; +A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; +A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; +A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; +A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; +A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; +A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; +A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; +A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; +A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; +A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; +A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; +A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; +A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; +A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; +A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;; +A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;; +A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;; +A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;; +A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;; +A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;; +A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;; +A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;; +A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;; +A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;; +A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;; +A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;; +A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;; +A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;; +A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;; +A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;; +A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;; +A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;; +A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;; +A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;; +A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;; +A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;; +A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;; +A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;; +A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;; +A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;; +A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;; +A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;; +A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;; +A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;; +A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;; +A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;; +A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;; +A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;; +A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;; +A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;; +A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;; +A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;; +A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;; +A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;; +A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;; +A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;; +A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;; +A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;; +A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;; +A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;; +A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; +A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; +A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;; +A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;; +A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A8E0;COMBINING DEVANAGARI DIGIT ZERO;Mn;230;NSM;;;;;N;;;;; +A8E1;COMBINING DEVANAGARI DIGIT ONE;Mn;230;NSM;;;;;N;;;;; +A8E2;COMBINING DEVANAGARI DIGIT TWO;Mn;230;NSM;;;;;N;;;;; +A8E3;COMBINING DEVANAGARI DIGIT THREE;Mn;230;NSM;;;;;N;;;;; +A8E4;COMBINING DEVANAGARI DIGIT FOUR;Mn;230;NSM;;;;;N;;;;; +A8E5;COMBINING DEVANAGARI DIGIT FIVE;Mn;230;NSM;;;;;N;;;;; +A8E6;COMBINING DEVANAGARI DIGIT SIX;Mn;230;NSM;;;;;N;;;;; +A8E7;COMBINING DEVANAGARI DIGIT SEVEN;Mn;230;NSM;;;;;N;;;;; +A8E8;COMBINING DEVANAGARI DIGIT EIGHT;Mn;230;NSM;;;;;N;;;;; +A8E9;COMBINING DEVANAGARI DIGIT NINE;Mn;230;NSM;;;;;N;;;;; +A8EA;COMBINING DEVANAGARI LETTER A;Mn;230;NSM;;;;;N;;;;; +A8EB;COMBINING DEVANAGARI LETTER U;Mn;230;NSM;;;;;N;;;;; +A8EC;COMBINING DEVANAGARI LETTER KA;Mn;230;NSM;;;;;N;;;;; +A8ED;COMBINING DEVANAGARI LETTER NA;Mn;230;NSM;;;;;N;;;;; +A8EE;COMBINING DEVANAGARI LETTER PA;Mn;230;NSM;;;;;N;;;;; +A8EF;COMBINING DEVANAGARI LETTER RA;Mn;230;NSM;;;;;N;;;;; +A8F0;COMBINING DEVANAGARI LETTER VI;Mn;230;NSM;;;;;N;;;;; +A8F1;COMBINING DEVANAGARI SIGN AVAGRAHA;Mn;230;NSM;;;;;N;;;;; +A8F2;DEVANAGARI SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;; +A8F3;DEVANAGARI SIGN CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; +A8F4;DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA;Lo;0;L;;;;;N;;;;; +A8F5;DEVANAGARI SIGN CANDRABINDU TWO;Lo;0;L;;;;;N;;;;; +A8F6;DEVANAGARI SIGN CANDRABINDU THREE;Lo;0;L;;;;;N;;;;; +A8F7;DEVANAGARI SIGN CANDRABINDU AVAGRAHA;Lo;0;L;;;;;N;;;;; +A8F8;DEVANAGARI SIGN PUSHPIKA;Po;0;L;;;;;N;;;;; +A8F9;DEVANAGARI GAP FILLER;Po;0;L;;;;;N;;;;; +A8FA;DEVANAGARI CARET;Po;0;L;;;;;N;;;;; +A8FB;DEVANAGARI HEADSTROKE;Lo;0;L;;;;;N;;;;; +A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;; +A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;; +A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;; +A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;; +A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;; +A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;; +A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;; +A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;; +A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;; +A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;; +A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;; +A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;; +A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;; +A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;; +A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;; +A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;; +A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;; +A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;; +A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;; +A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;; +A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;; +A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;; +A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;; +A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;; +A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;; +A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;; +A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;; +A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;; +A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;; +A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;; +A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;; +A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;; +A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;; +A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;; +A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;; +A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;; +A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;; +A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;; +A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;; +A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;; +A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;; +A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;; +A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;; +A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;; +A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;; +A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;; +A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;; +A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;; +A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;; +A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;; +A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;; +A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;; +A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;; +A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;; +A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;; +A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;; +A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;; +A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;; +A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;; +A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;; +A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;; +A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; +A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;; +A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; +A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; +A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; +A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;; +A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;; +A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;; +A960;HANGUL CHOSEONG TIKEUT-MIEUM;Lo;0;L;;;;;N;;;;; +A961;HANGUL CHOSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; +A962;HANGUL CHOSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; +A963;HANGUL CHOSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; +A964;HANGUL CHOSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;;;; +A965;HANGUL CHOSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; +A966;HANGUL CHOSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; +A967;HANGUL CHOSEONG RIEUL-SSANGTIKEUT;Lo;0;L;;;;;N;;;;; +A968;HANGUL CHOSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;;;; +A969;HANGUL CHOSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;;;; +A96A;HANGUL CHOSEONG RIEUL-SSANGPIEUP;Lo;0;L;;;;;N;;;;; +A96B;HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +A96C;HANGUL CHOSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;;;; +A96D;HANGUL CHOSEONG RIEUL-CIEUC;Lo;0;L;;;;;N;;;;; +A96E;HANGUL CHOSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; +A96F;HANGUL CHOSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; +A970;HANGUL CHOSEONG MIEUM-TIKEUT;Lo;0;L;;;;;N;;;;; +A971;HANGUL CHOSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; +A972;HANGUL CHOSEONG PIEUP-SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; +A973;HANGUL CHOSEONG PIEUP-KHIEUKH;Lo;0;L;;;;;N;;;;; +A974;HANGUL CHOSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; +A975;HANGUL CHOSEONG SSANGSIOS-PIEUP;Lo;0;L;;;;;N;;;;; +A976;HANGUL CHOSEONG IEUNG-RIEUL;Lo;0;L;;;;;N;;;;; +A977;HANGUL CHOSEONG IEUNG-HIEUH;Lo;0;L;;;;;N;;;;; +A978;HANGUL CHOSEONG SSANGCIEUC-HIEUH;Lo;0;L;;;;;N;;;;; +A979;HANGUL CHOSEONG SSANGTHIEUTH;Lo;0;L;;;;;N;;;;; +A97A;HANGUL CHOSEONG PHIEUPH-HIEUH;Lo;0;L;;;;;N;;;;; +A97B;HANGUL CHOSEONG HIEUH-SIOS;Lo;0;L;;;;;N;;;;; +A97C;HANGUL CHOSEONG SSANGYEORINHIEUH;Lo;0;L;;;;;N;;;;; +A980;JAVANESE SIGN PANYANGGA;Mn;0;NSM;;;;;N;;;;; +A981;JAVANESE SIGN CECAK;Mn;0;NSM;;;;;N;;;;; +A982;JAVANESE SIGN LAYAR;Mn;0;NSM;;;;;N;;;;; +A983;JAVANESE SIGN WIGNYAN;Mc;0;L;;;;;N;;;;; +A984;JAVANESE LETTER A;Lo;0;L;;;;;N;;;;; +A985;JAVANESE LETTER I KAWI;Lo;0;L;;;;;N;;;;; +A986;JAVANESE LETTER I;Lo;0;L;;;;;N;;;;; +A987;JAVANESE LETTER II;Lo;0;L;;;;;N;;;;; +A988;JAVANESE LETTER U;Lo;0;L;;;;;N;;;;; +A989;JAVANESE LETTER PA CEREK;Lo;0;L;;;;;N;;;;; +A98A;JAVANESE LETTER NGA LELET;Lo;0;L;;;;;N;;;;; +A98B;JAVANESE LETTER NGA LELET RASWADI;Lo;0;L;;;;;N;;;;; +A98C;JAVANESE LETTER E;Lo;0;L;;;;;N;;;;; +A98D;JAVANESE LETTER AI;Lo;0;L;;;;;N;;;;; +A98E;JAVANESE LETTER O;Lo;0;L;;;;;N;;;;; +A98F;JAVANESE LETTER KA;Lo;0;L;;;;;N;;;;; +A990;JAVANESE LETTER KA SASAK;Lo;0;L;;;;;N;;;;; +A991;JAVANESE LETTER KA MURDA;Lo;0;L;;;;;N;;;;; +A992;JAVANESE LETTER GA;Lo;0;L;;;;;N;;;;; +A993;JAVANESE LETTER GA MURDA;Lo;0;L;;;;;N;;;;; +A994;JAVANESE LETTER NGA;Lo;0;L;;;;;N;;;;; +A995;JAVANESE LETTER CA;Lo;0;L;;;;;N;;;;; +A996;JAVANESE LETTER CA MURDA;Lo;0;L;;;;;N;;;;; +A997;JAVANESE LETTER JA;Lo;0;L;;;;;N;;;;; +A998;JAVANESE LETTER NYA MURDA;Lo;0;L;;;;;N;;;;; +A999;JAVANESE LETTER JA MAHAPRANA;Lo;0;L;;;;;N;;;;; +A99A;JAVANESE LETTER NYA;Lo;0;L;;;;;N;;;;; +A99B;JAVANESE LETTER TTA;Lo;0;L;;;;;N;;;;; +A99C;JAVANESE LETTER TTA MAHAPRANA;Lo;0;L;;;;;N;;;;; +A99D;JAVANESE LETTER DDA;Lo;0;L;;;;;N;;;;; +A99E;JAVANESE LETTER DDA MAHAPRANA;Lo;0;L;;;;;N;;;;; +A99F;JAVANESE LETTER NA MURDA;Lo;0;L;;;;;N;;;;; +A9A0;JAVANESE LETTER TA;Lo;0;L;;;;;N;;;;; +A9A1;JAVANESE LETTER TA MURDA;Lo;0;L;;;;;N;;;;; +A9A2;JAVANESE LETTER DA;Lo;0;L;;;;;N;;;;; +A9A3;JAVANESE LETTER DA MAHAPRANA;Lo;0;L;;;;;N;;;;; +A9A4;JAVANESE LETTER NA;Lo;0;L;;;;;N;;;;; +A9A5;JAVANESE LETTER PA;Lo;0;L;;;;;N;;;;; +A9A6;JAVANESE LETTER PA MURDA;Lo;0;L;;;;;N;;;;; +A9A7;JAVANESE LETTER BA;Lo;0;L;;;;;N;;;;; +A9A8;JAVANESE LETTER BA MURDA;Lo;0;L;;;;;N;;;;; +A9A9;JAVANESE LETTER MA;Lo;0;L;;;;;N;;;;; +A9AA;JAVANESE LETTER YA;Lo;0;L;;;;;N;;;;; +A9AB;JAVANESE LETTER RA;Lo;0;L;;;;;N;;;;; +A9AC;JAVANESE LETTER RA AGUNG;Lo;0;L;;;;;N;;;;; +A9AD;JAVANESE LETTER LA;Lo;0;L;;;;;N;;;;; +A9AE;JAVANESE LETTER WA;Lo;0;L;;;;;N;;;;; +A9AF;JAVANESE LETTER SA MURDA;Lo;0;L;;;;;N;;;;; +A9B0;JAVANESE LETTER SA MAHAPRANA;Lo;0;L;;;;;N;;;;; +A9B1;JAVANESE LETTER SA;Lo;0;L;;;;;N;;;;; +A9B2;JAVANESE LETTER HA;Lo;0;L;;;;;N;;;;; +A9B3;JAVANESE SIGN CECAK TELU;Mn;7;NSM;;;;;N;;;;; +A9B4;JAVANESE VOWEL SIGN TARUNG;Mc;0;L;;;;;N;;;;; +A9B5;JAVANESE VOWEL SIGN TOLONG;Mc;0;L;;;;;N;;;;; +A9B6;JAVANESE VOWEL SIGN WULU;Mn;0;NSM;;;;;N;;;;; +A9B7;JAVANESE VOWEL SIGN WULU MELIK;Mn;0;NSM;;;;;N;;;;; +A9B8;JAVANESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;;;; +A9B9;JAVANESE VOWEL SIGN SUKU MENDUT;Mn;0;NSM;;;;;N;;;;; +A9BA;JAVANESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;;;; +A9BB;JAVANESE VOWEL SIGN DIRGA MURE;Mc;0;L;;;;;N;;;;; +A9BC;JAVANESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;;;; +A9BD;JAVANESE CONSONANT SIGN KERET;Mc;0;L;;;;;N;;;;; +A9BE;JAVANESE CONSONANT SIGN PENGKAL;Mc;0;L;;;;;N;;;;; +A9BF;JAVANESE CONSONANT SIGN CAKRA;Mc;0;L;;;;;N;;;;; +A9C0;JAVANESE PANGKON;Mc;9;L;;;;;N;;;;; +A9C1;JAVANESE LEFT RERENGGAN;Po;0;L;;;;;N;;;;; +A9C2;JAVANESE RIGHT RERENGGAN;Po;0;L;;;;;N;;;;; +A9C3;JAVANESE PADA ANDAP;Po;0;L;;;;;N;;;;; +A9C4;JAVANESE PADA MADYA;Po;0;L;;;;;N;;;;; +A9C5;JAVANESE PADA LUHUR;Po;0;L;;;;;N;;;;; +A9C6;JAVANESE PADA WINDU;Po;0;L;;;;;N;;;;; +A9C7;JAVANESE PADA PANGKAT;Po;0;L;;;;;N;;;;; +A9C8;JAVANESE PADA LINGSA;Po;0;L;;;;;N;;;;; +A9C9;JAVANESE PADA LUNGSI;Po;0;L;;;;;N;;;;; +A9CA;JAVANESE PADA ADEG;Po;0;L;;;;;N;;;;; +A9CB;JAVANESE PADA ADEG ADEG;Po;0;L;;;;;N;;;;; +A9CC;JAVANESE PADA PISELEH;Po;0;L;;;;;N;;;;; +A9CD;JAVANESE TURNED PADA PISELEH;Po;0;L;;;;;N;;;;; +A9CF;JAVANESE PANGRANGKEP;Lm;0;L;;;;;N;;;;; +A9D0;JAVANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A9D1;JAVANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A9D2;JAVANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A9D3;JAVANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A9D4;JAVANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A9D5;JAVANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A9D6;JAVANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A9D7;JAVANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A9D8;JAVANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A9D9;JAVANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A9DE;JAVANESE PADA TIRTA TUMETES;Po;0;L;;;;;N;;;;; +A9DF;JAVANESE PADA ISEN-ISEN;Po;0;L;;;;;N;;;;; +AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;; +AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;; +AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;; +AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;; +AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;; +AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;; +AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;; +AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;; +AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;; +AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;; +AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;; +AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;; +AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;; +AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;; +AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;; +AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;; +AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;; +AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;; +AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;; +AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;; +AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;; +AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;; +AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;; +AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;; +AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;; +AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;; +AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;; +AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;; +AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;; +AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;; +AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;; +AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;; +AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;; +AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;; +AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;; +AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;; +AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;; +AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;; +AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;; +AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;; +AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;; +AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;; +AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; +AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;; +AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;; +AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;; +AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;; +AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;; +AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;; +AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;; +AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;; +AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;; +AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;; +AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;; +AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;; +AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;; +AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;; +AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;; +AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;; +AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;; +AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; +AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;; +AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;; +AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;; +AA60;MYANMAR LETTER KHAMTI GA;Lo;0;L;;;;;N;;;;; +AA61;MYANMAR LETTER KHAMTI CA;Lo;0;L;;;;;N;;;;; +AA62;MYANMAR LETTER KHAMTI CHA;Lo;0;L;;;;;N;;;;; +AA63;MYANMAR LETTER KHAMTI JA;Lo;0;L;;;;;N;;;;; +AA64;MYANMAR LETTER KHAMTI JHA;Lo;0;L;;;;;N;;;;; +AA65;MYANMAR LETTER KHAMTI NYA;Lo;0;L;;;;;N;;;;; +AA66;MYANMAR LETTER KHAMTI TTA;Lo;0;L;;;;;N;;;;; +AA67;MYANMAR LETTER KHAMTI TTHA;Lo;0;L;;;;;N;;;;; +AA68;MYANMAR LETTER KHAMTI DDA;Lo;0;L;;;;;N;;;;; +AA69;MYANMAR LETTER KHAMTI DDHA;Lo;0;L;;;;;N;;;;; +AA6A;MYANMAR LETTER KHAMTI DHA;Lo;0;L;;;;;N;;;;; +AA6B;MYANMAR LETTER KHAMTI NA;Lo;0;L;;;;;N;;;;; +AA6C;MYANMAR LETTER KHAMTI SA;Lo;0;L;;;;;N;;;;; +AA6D;MYANMAR LETTER KHAMTI HA;Lo;0;L;;;;;N;;;;; +AA6E;MYANMAR LETTER KHAMTI HHA;Lo;0;L;;;;;N;;;;; +AA6F;MYANMAR LETTER KHAMTI FA;Lo;0;L;;;;;N;;;;; +AA70;MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION;Lm;0;L;;;;;N;;;;; +AA71;MYANMAR LETTER KHAMTI XA;Lo;0;L;;;;;N;;;;; +AA72;MYANMAR LETTER KHAMTI ZA;Lo;0;L;;;;;N;;;;; +AA73;MYANMAR LETTER KHAMTI RA;Lo;0;L;;;;;N;;;;; +AA74;MYANMAR LOGOGRAM KHAMTI OAY;Lo;0;L;;;;;N;;;;; +AA75;MYANMAR LOGOGRAM KHAMTI QN;Lo;0;L;;;;;N;;;;; +AA76;MYANMAR LOGOGRAM KHAMTI HM;Lo;0;L;;;;;N;;;;; +AA77;MYANMAR SYMBOL AITON EXCLAMATION;So;0;L;;;;;N;;;;; +AA78;MYANMAR SYMBOL AITON ONE;So;0;L;;;;;N;;;;; +AA79;MYANMAR SYMBOL AITON TWO;So;0;L;;;;;N;;;;; +AA7A;MYANMAR LETTER AITON RA;Lo;0;L;;;;;N;;;;; +AA7B;MYANMAR SIGN PAO KAREN TONE;Mc;0;L;;;;;N;;;;; +AA80;TAI VIET LETTER LOW KO;Lo;0;L;;;;;N;;;;; +AA81;TAI VIET LETTER HIGH KO;Lo;0;L;;;;;N;;;;; +AA82;TAI VIET LETTER LOW KHO;Lo;0;L;;;;;N;;;;; +AA83;TAI VIET LETTER HIGH KHO;Lo;0;L;;;;;N;;;;; +AA84;TAI VIET LETTER LOW KHHO;Lo;0;L;;;;;N;;;;; +AA85;TAI VIET LETTER HIGH KHHO;Lo;0;L;;;;;N;;;;; +AA86;TAI VIET LETTER LOW GO;Lo;0;L;;;;;N;;;;; +AA87;TAI VIET LETTER HIGH GO;Lo;0;L;;;;;N;;;;; +AA88;TAI VIET LETTER LOW NGO;Lo;0;L;;;;;N;;;;; +AA89;TAI VIET LETTER HIGH NGO;Lo;0;L;;;;;N;;;;; +AA8A;TAI VIET LETTER LOW CO;Lo;0;L;;;;;N;;;;; +AA8B;TAI VIET LETTER HIGH CO;Lo;0;L;;;;;N;;;;; +AA8C;TAI VIET LETTER LOW CHO;Lo;0;L;;;;;N;;;;; +AA8D;TAI VIET LETTER HIGH CHO;Lo;0;L;;;;;N;;;;; +AA8E;TAI VIET LETTER LOW SO;Lo;0;L;;;;;N;;;;; +AA8F;TAI VIET LETTER HIGH SO;Lo;0;L;;;;;N;;;;; +AA90;TAI VIET LETTER LOW NYO;Lo;0;L;;;;;N;;;;; +AA91;TAI VIET LETTER HIGH NYO;Lo;0;L;;;;;N;;;;; +AA92;TAI VIET LETTER LOW DO;Lo;0;L;;;;;N;;;;; +AA93;TAI VIET LETTER HIGH DO;Lo;0;L;;;;;N;;;;; +AA94;TAI VIET LETTER LOW TO;Lo;0;L;;;;;N;;;;; +AA95;TAI VIET LETTER HIGH TO;Lo;0;L;;;;;N;;;;; +AA96;TAI VIET LETTER LOW THO;Lo;0;L;;;;;N;;;;; +AA97;TAI VIET LETTER HIGH THO;Lo;0;L;;;;;N;;;;; +AA98;TAI VIET LETTER LOW NO;Lo;0;L;;;;;N;;;;; +AA99;TAI VIET LETTER HIGH NO;Lo;0;L;;;;;N;;;;; +AA9A;TAI VIET LETTER LOW BO;Lo;0;L;;;;;N;;;;; +AA9B;TAI VIET LETTER HIGH BO;Lo;0;L;;;;;N;;;;; +AA9C;TAI VIET LETTER LOW PO;Lo;0;L;;;;;N;;;;; +AA9D;TAI VIET LETTER HIGH PO;Lo;0;L;;;;;N;;;;; +AA9E;TAI VIET LETTER LOW PHO;Lo;0;L;;;;;N;;;;; +AA9F;TAI VIET LETTER HIGH PHO;Lo;0;L;;;;;N;;;;; +AAA0;TAI VIET LETTER LOW FO;Lo;0;L;;;;;N;;;;; +AAA1;TAI VIET LETTER HIGH FO;Lo;0;L;;;;;N;;;;; +AAA2;TAI VIET LETTER LOW MO;Lo;0;L;;;;;N;;;;; +AAA3;TAI VIET LETTER HIGH MO;Lo;0;L;;;;;N;;;;; +AAA4;TAI VIET LETTER LOW YO;Lo;0;L;;;;;N;;;;; +AAA5;TAI VIET LETTER HIGH YO;Lo;0;L;;;;;N;;;;; +AAA6;TAI VIET LETTER LOW RO;Lo;0;L;;;;;N;;;;; +AAA7;TAI VIET LETTER HIGH RO;Lo;0;L;;;;;N;;;;; +AAA8;TAI VIET LETTER LOW LO;Lo;0;L;;;;;N;;;;; +AAA9;TAI VIET LETTER HIGH LO;Lo;0;L;;;;;N;;;;; +AAAA;TAI VIET LETTER LOW VO;Lo;0;L;;;;;N;;;;; +AAAB;TAI VIET LETTER HIGH VO;Lo;0;L;;;;;N;;;;; +AAAC;TAI VIET LETTER LOW HO;Lo;0;L;;;;;N;;;;; +AAAD;TAI VIET LETTER HIGH HO;Lo;0;L;;;;;N;;;;; +AAAE;TAI VIET LETTER LOW O;Lo;0;L;;;;;N;;;;; +AAAF;TAI VIET LETTER HIGH O;Lo;0;L;;;;;N;;;;; +AAB0;TAI VIET MAI KANG;Mn;230;NSM;;;;;N;;;;; +AAB1;TAI VIET VOWEL AA;Lo;0;L;;;;;N;;;;; +AAB2;TAI VIET VOWEL I;Mn;230;NSM;;;;;N;;;;; +AAB3;TAI VIET VOWEL UE;Mn;230;NSM;;;;;N;;;;; +AAB4;TAI VIET VOWEL U;Mn;220;NSM;;;;;N;;;;; +AAB5;TAI VIET VOWEL E;Lo;0;L;;;;;N;;;;; +AAB6;TAI VIET VOWEL O;Lo;0;L;;;;;N;;;;; +AAB7;TAI VIET MAI KHIT;Mn;230;NSM;;;;;N;;;;; +AAB8;TAI VIET VOWEL IA;Mn;230;NSM;;;;;N;;;;; +AAB9;TAI VIET VOWEL UEA;Lo;0;L;;;;;N;;;;; +AABA;TAI VIET VOWEL UA;Lo;0;L;;;;;N;;;;; +AABB;TAI VIET VOWEL AUE;Lo;0;L;;;;;N;;;;; +AABC;TAI VIET VOWEL AY;Lo;0;L;;;;;N;;;;; +AABD;TAI VIET VOWEL AN;Lo;0;L;;;;;N;;;;; +AABE;TAI VIET VOWEL AM;Mn;230;NSM;;;;;N;;;;; +AABF;TAI VIET TONE MAI EK;Mn;230;NSM;;;;;N;;;;; +AAC0;TAI VIET TONE MAI NUENG;Lo;0;L;;;;;N;;;;; +AAC1;TAI VIET TONE MAI THO;Mn;230;NSM;;;;;N;;;;; +AAC2;TAI VIET TONE MAI SONG;Lo;0;L;;;;;N;;;;; +AADB;TAI VIET SYMBOL KON;Lo;0;L;;;;;N;;;;; +AADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;; +AADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;; +AADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;; +AADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;; +AB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;; +AB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;; +AB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;; +AB04;ETHIOPIC SYLLABLE TTHEE;Lo;0;L;;;;;N;;;;; +AB05;ETHIOPIC SYLLABLE TTHE;Lo;0;L;;;;;N;;;;; +AB06;ETHIOPIC SYLLABLE TTHO;Lo;0;L;;;;;N;;;;; +AB09;ETHIOPIC SYLLABLE DDHU;Lo;0;L;;;;;N;;;;; +AB0A;ETHIOPIC SYLLABLE DDHI;Lo;0;L;;;;;N;;;;; +AB0B;ETHIOPIC SYLLABLE DDHAA;Lo;0;L;;;;;N;;;;; +AB0C;ETHIOPIC SYLLABLE DDHEE;Lo;0;L;;;;;N;;;;; +AB0D;ETHIOPIC SYLLABLE DDHE;Lo;0;L;;;;;N;;;;; +AB0E;ETHIOPIC SYLLABLE DDHO;Lo;0;L;;;;;N;;;;; +AB11;ETHIOPIC SYLLABLE DZU;Lo;0;L;;;;;N;;;;; +AB12;ETHIOPIC SYLLABLE DZI;Lo;0;L;;;;;N;;;;; +AB13;ETHIOPIC SYLLABLE DZAA;Lo;0;L;;;;;N;;;;; +AB14;ETHIOPIC SYLLABLE DZEE;Lo;0;L;;;;;N;;;;; +AB15;ETHIOPIC SYLLABLE DZE;Lo;0;L;;;;;N;;;;; +AB16;ETHIOPIC SYLLABLE DZO;Lo;0;L;;;;;N;;;;; +AB20;ETHIOPIC SYLLABLE CCHHA;Lo;0;L;;;;;N;;;;; +AB21;ETHIOPIC SYLLABLE CCHHU;Lo;0;L;;;;;N;;;;; +AB22;ETHIOPIC SYLLABLE CCHHI;Lo;0;L;;;;;N;;;;; +AB23;ETHIOPIC SYLLABLE CCHHAA;Lo;0;L;;;;;N;;;;; +AB24;ETHIOPIC SYLLABLE CCHHEE;Lo;0;L;;;;;N;;;;; +AB25;ETHIOPIC SYLLABLE CCHHE;Lo;0;L;;;;;N;;;;; +AB26;ETHIOPIC SYLLABLE CCHHO;Lo;0;L;;;;;N;;;;; +AB28;ETHIOPIC SYLLABLE BBA;Lo;0;L;;;;;N;;;;; +AB29;ETHIOPIC SYLLABLE BBU;Lo;0;L;;;;;N;;;;; +AB2A;ETHIOPIC SYLLABLE BBI;Lo;0;L;;;;;N;;;;; +AB2B;ETHIOPIC SYLLABLE BBAA;Lo;0;L;;;;;N;;;;; +AB2C;ETHIOPIC SYLLABLE BBEE;Lo;0;L;;;;;N;;;;; +AB2D;ETHIOPIC SYLLABLE BBE;Lo;0;L;;;;;N;;;;; +AB2E;ETHIOPIC SYLLABLE BBO;Lo;0;L;;;;;N;;;;; +ABC0;MEETEI MAYEK LETTER KOK;Lo;0;L;;;;;N;;;;; +ABC1;MEETEI MAYEK LETTER SAM;Lo;0;L;;;;;N;;;;; +ABC2;MEETEI MAYEK LETTER LAI;Lo;0;L;;;;;N;;;;; +ABC3;MEETEI MAYEK LETTER MIT;Lo;0;L;;;;;N;;;;; +ABC4;MEETEI MAYEK LETTER PA;Lo;0;L;;;;;N;;;;; +ABC5;MEETEI MAYEK LETTER NA;Lo;0;L;;;;;N;;;;; +ABC6;MEETEI MAYEK LETTER CHIL;Lo;0;L;;;;;N;;;;; +ABC7;MEETEI MAYEK LETTER TIL;Lo;0;L;;;;;N;;;;; +ABC8;MEETEI MAYEK LETTER KHOU;Lo;0;L;;;;;N;;;;; +ABC9;MEETEI MAYEK LETTER NGOU;Lo;0;L;;;;;N;;;;; +ABCA;MEETEI MAYEK LETTER THOU;Lo;0;L;;;;;N;;;;; +ABCB;MEETEI MAYEK LETTER WAI;Lo;0;L;;;;;N;;;;; +ABCC;MEETEI MAYEK LETTER YANG;Lo;0;L;;;;;N;;;;; +ABCD;MEETEI MAYEK LETTER HUK;Lo;0;L;;;;;N;;;;; +ABCE;MEETEI MAYEK LETTER UN;Lo;0;L;;;;;N;;;;; +ABCF;MEETEI MAYEK LETTER I;Lo;0;L;;;;;N;;;;; +ABD0;MEETEI MAYEK LETTER PHAM;Lo;0;L;;;;;N;;;;; +ABD1;MEETEI MAYEK LETTER ATIYA;Lo;0;L;;;;;N;;;;; +ABD2;MEETEI MAYEK LETTER GOK;Lo;0;L;;;;;N;;;;; +ABD3;MEETEI MAYEK LETTER JHAM;Lo;0;L;;;;;N;;;;; +ABD4;MEETEI MAYEK LETTER RAI;Lo;0;L;;;;;N;;;;; +ABD5;MEETEI MAYEK LETTER BA;Lo;0;L;;;;;N;;;;; +ABD6;MEETEI MAYEK LETTER JIL;Lo;0;L;;;;;N;;;;; +ABD7;MEETEI MAYEK LETTER DIL;Lo;0;L;;;;;N;;;;; +ABD8;MEETEI MAYEK LETTER GHOU;Lo;0;L;;;;;N;;;;; +ABD9;MEETEI MAYEK LETTER DHOU;Lo;0;L;;;;;N;;;;; +ABDA;MEETEI MAYEK LETTER BHAM;Lo;0;L;;;;;N;;;;; +ABDB;MEETEI MAYEK LETTER KOK LONSUM;Lo;0;L;;;;;N;;;;; +ABDC;MEETEI MAYEK LETTER LAI LONSUM;Lo;0;L;;;;;N;;;;; +ABDD;MEETEI MAYEK LETTER MIT LONSUM;Lo;0;L;;;;;N;;;;; +ABDE;MEETEI MAYEK LETTER PA LONSUM;Lo;0;L;;;;;N;;;;; +ABDF;MEETEI MAYEK LETTER NA LONSUM;Lo;0;L;;;;;N;;;;; +ABE0;MEETEI MAYEK LETTER TIL LONSUM;Lo;0;L;;;;;N;;;;; +ABE1;MEETEI MAYEK LETTER NGOU LONSUM;Lo;0;L;;;;;N;;;;; +ABE2;MEETEI MAYEK LETTER I LONSUM;Lo;0;L;;;;;N;;;;; +ABE3;MEETEI MAYEK VOWEL SIGN ONAP;Mc;0;L;;;;;N;;;;; +ABE4;MEETEI MAYEK VOWEL SIGN INAP;Mc;0;L;;;;;N;;;;; +ABE5;MEETEI MAYEK VOWEL SIGN ANAP;Mn;0;NSM;;;;;N;;;;; +ABE6;MEETEI MAYEK VOWEL SIGN YENAP;Mc;0;L;;;;;N;;;;; +ABE7;MEETEI MAYEK VOWEL SIGN SOUNAP;Mc;0;L;;;;;N;;;;; +ABE8;MEETEI MAYEK VOWEL SIGN UNAP;Mn;0;NSM;;;;;N;;;;; +ABE9;MEETEI MAYEK VOWEL SIGN CHEINAP;Mc;0;L;;;;;N;;;;; +ABEA;MEETEI MAYEK VOWEL SIGN NUNG;Mc;0;L;;;;;N;;;;; +ABEB;MEETEI MAYEK CHEIKHEI;Po;0;L;;;;;N;;;;; +ABEC;MEETEI MAYEK LUM IYEK;Mc;0;L;;;;;N;;;;; +ABED;MEETEI MAYEK APUN IYEK;Mn;9;NSM;;;;;N;;;;; +ABF0;MEETEI MAYEK DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +ABF1;MEETEI MAYEK DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +ABF2;MEETEI MAYEK DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +ABF3;MEETEI MAYEK DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +ABF4;MEETEI MAYEK DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +ABF5;MEETEI MAYEK DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +ABF6;MEETEI MAYEK DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +ABF7;MEETEI MAYEK DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +ABF8;MEETEI MAYEK DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +ABF9;MEETEI MAYEK DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +AC00;;Lo;0;L;;;;;N;;;;; +D7A3;;Lo;0;L;;;;;N;;;;; +D7B0;HANGUL JUNGSEONG O-YEO;Lo;0;L;;;;;N;;;;; +D7B1;HANGUL JUNGSEONG O-O-I;Lo;0;L;;;;;N;;;;; +D7B2;HANGUL JUNGSEONG YO-A;Lo;0;L;;;;;N;;;;; +D7B3;HANGUL JUNGSEONG YO-AE;Lo;0;L;;;;;N;;;;; +D7B4;HANGUL JUNGSEONG YO-EO;Lo;0;L;;;;;N;;;;; +D7B5;HANGUL JUNGSEONG U-YEO;Lo;0;L;;;;;N;;;;; +D7B6;HANGUL JUNGSEONG U-I-I;Lo;0;L;;;;;N;;;;; +D7B7;HANGUL JUNGSEONG YU-AE;Lo;0;L;;;;;N;;;;; +D7B8;HANGUL JUNGSEONG YU-O;Lo;0;L;;;;;N;;;;; +D7B9;HANGUL JUNGSEONG EU-A;Lo;0;L;;;;;N;;;;; +D7BA;HANGUL JUNGSEONG EU-EO;Lo;0;L;;;;;N;;;;; +D7BB;HANGUL JUNGSEONG EU-E;Lo;0;L;;;;;N;;;;; +D7BC;HANGUL JUNGSEONG EU-O;Lo;0;L;;;;;N;;;;; +D7BD;HANGUL JUNGSEONG I-YA-O;Lo;0;L;;;;;N;;;;; +D7BE;HANGUL JUNGSEONG I-YAE;Lo;0;L;;;;;N;;;;; +D7BF;HANGUL JUNGSEONG I-YEO;Lo;0;L;;;;;N;;;;; +D7C0;HANGUL JUNGSEONG I-YE;Lo;0;L;;;;;N;;;;; +D7C1;HANGUL JUNGSEONG I-O-I;Lo;0;L;;;;;N;;;;; +D7C2;HANGUL JUNGSEONG I-YO;Lo;0;L;;;;;N;;;;; +D7C3;HANGUL JUNGSEONG I-YU;Lo;0;L;;;;;N;;;;; +D7C4;HANGUL JUNGSEONG I-I;Lo;0;L;;;;;N;;;;; +D7C5;HANGUL JUNGSEONG ARAEA-A;Lo;0;L;;;;;N;;;;; +D7C6;HANGUL JUNGSEONG ARAEA-E;Lo;0;L;;;;;N;;;;; +D7CB;HANGUL JONGSEONG NIEUN-RIEUL;Lo;0;L;;;;;N;;;;; +D7CC;HANGUL JONGSEONG NIEUN-CHIEUCH;Lo;0;L;;;;;N;;;;; +D7CD;HANGUL JONGSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;;;; +D7CE;HANGUL JONGSEONG SSANGTIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; +D7CF;HANGUL JONGSEONG TIKEUT-PIEUP;Lo;0;L;;;;;N;;;;; +D7D0;HANGUL JONGSEONG TIKEUT-SIOS;Lo;0;L;;;;;N;;;;; +D7D1;HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +D7D2;HANGUL JONGSEONG TIKEUT-CIEUC;Lo;0;L;;;;;N;;;;; +D7D3;HANGUL JONGSEONG TIKEUT-CHIEUCH;Lo;0;L;;;;;N;;;;; +D7D4;HANGUL JONGSEONG TIKEUT-THIEUTH;Lo;0;L;;;;;N;;;;; +D7D5;HANGUL JONGSEONG RIEUL-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; +D7D6;HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH;Lo;0;L;;;;;N;;;;; +D7D7;HANGUL JONGSEONG SSANGRIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; +D7D8;HANGUL JONGSEONG RIEUL-MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; +D7D9;HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; +D7DA;HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; +D7DB;HANGUL JONGSEONG RIEUL-YESIEUNG;Lo;0;L;;;;;N;;;;; +D7DC;HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH;Lo;0;L;;;;;N;;;;; +D7DD;HANGUL JONGSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; +D7DE;HANGUL JONGSEONG MIEUM-NIEUN;Lo;0;L;;;;;N;;;;; +D7DF;HANGUL JONGSEONG MIEUM-SSANGNIEUN;Lo;0;L;;;;;N;;;;; +D7E0;HANGUL JONGSEONG SSANGMIEUM;Lo;0;L;;;;;N;;;;; +D7E1;HANGUL JONGSEONG MIEUM-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +D7E2;HANGUL JONGSEONG MIEUM-CIEUC;Lo;0;L;;;;;N;;;;; +D7E3;HANGUL JONGSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; +D7E4;HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH;Lo;0;L;;;;;N;;;;; +D7E5;HANGUL JONGSEONG PIEUP-MIEUM;Lo;0;L;;;;;N;;;;; +D7E6;HANGUL JONGSEONG SSANGPIEUP;Lo;0;L;;;;;N;;;;; +D7E7;HANGUL JONGSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +D7E8;HANGUL JONGSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; +D7E9;HANGUL JONGSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; +D7EA;HANGUL JONGSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; +D7EB;HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +D7EC;HANGUL JONGSEONG SSANGSIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +D7ED;HANGUL JONGSEONG SSANGSIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +D7EE;HANGUL JONGSEONG SIOS-PANSIOS;Lo;0;L;;;;;N;;;;; +D7EF;HANGUL JONGSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; +D7F0;HANGUL JONGSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; +D7F1;HANGUL JONGSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; +D7F2;HANGUL JONGSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; +D7F3;HANGUL JONGSEONG PANSIOS-PIEUP;Lo;0;L;;;;;N;;;;; +D7F4;HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +D7F5;HANGUL JONGSEONG YESIEUNG-MIEUM;Lo;0;L;;;;;N;;;;; +D7F6;HANGUL JONGSEONG YESIEUNG-HIEUH;Lo;0;L;;;;;N;;;;; +D7F7;HANGUL JONGSEONG CIEUC-PIEUP;Lo;0;L;;;;;N;;;;; +D7F8;HANGUL JONGSEONG CIEUC-SSANGPIEUP;Lo;0;L;;;;;N;;;;; +D7F9;HANGUL JONGSEONG SSANGCIEUC;Lo;0;L;;;;;N;;;;; +D7FA;HANGUL JONGSEONG PHIEUPH-SIOS;Lo;0;L;;;;;N;;;;; +D7FB;HANGUL JONGSEONG PHIEUPH-THIEUTH;Lo;0;L;;;;;N;;;;; +D800;;Cs;0;L;;;;;N;;;;; +DB7F;;Cs;0;L;;;;;N;;;;; +DB80;;Cs;0;L;;;;;N;;;;; +DBFF;;Cs;0;L;;;;;N;;;;; +DC00;;Cs;0;L;;;;;N;;;;; +DFFF;;Cs;0;L;;;;;N;;;;; +E000;;Co;0;L;;;;;N;;;;; +F8FF;;Co;0;L;;;;;N;;;;; +F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; +F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; +F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; +F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; +F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; +F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; +F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; +F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; +F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; +F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; +F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; +F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; +F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; +F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; +F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; +F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; +F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; +F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; +F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; +F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; +F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; +F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; +F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; +F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; +F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; +F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; +F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; +F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; +F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; +F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; +F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; +F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; +F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; +F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; +F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; +F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; +F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; +F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; +F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; +F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; +F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; +F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; +F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; +F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; +F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; +F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; +F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; +F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; +F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; +F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; +F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; +F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; +F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; +F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; +F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; +F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; +F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; +F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; +F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; +F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; +F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; +F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; +F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; +F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; +F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; +F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; +F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; +F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; +F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; +F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; +F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; +F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; +F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; +F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; +F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; +F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; +F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; +F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; +F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; +F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; +F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; +F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;; +F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; +F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; +F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; +F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; +F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; +F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; +F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; +F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; +F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; +F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; +F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; +F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; +F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; +F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; +F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; +F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; +F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; +F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; +F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; +F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; +F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; +F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; +F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; +F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; +F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; +F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;; +F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; +F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; +F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; +F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; +F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; +F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; +F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; +F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;; +F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; +F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; +F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; +F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; +F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;; +F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; +F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; +F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; +F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; +F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; +F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; +F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; +F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; +F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; +F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; +F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; +F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; +F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; +F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; +F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; +F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; +F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; +F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; +F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; +F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; +F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; +F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; +F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; +F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; +F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; +F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; +F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; +F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; +F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; +F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; +F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; +F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; +F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; +F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; +F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; +F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; +F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; +F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; +F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; +F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; +F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; +F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; +F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; +F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; +F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; +F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; +F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; +F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; +F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; +F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; +F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; +F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; +F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; +F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; +F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; +F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; +F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; +F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;; +F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; +F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; +F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; +F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; +F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; +F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; +F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; +F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; +F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; +F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; +F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; +F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; +F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; +F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; +F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; +F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; +F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; +F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; +F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; +F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; +F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; +F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; +F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; +F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; +F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; +F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; +F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; +F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; +F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; +F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; +F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;; +F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; +F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;; +F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; +F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; +F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; +F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; +F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; +F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; +F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; +F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; +F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; +F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; +F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; +F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; +F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; +F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; +F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; +F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; +F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; +F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; +F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; +F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; +F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; +F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; +F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; +F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; +F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; +F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; +F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; +F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; +F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; +F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; +F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; +F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; +F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; +F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; +F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; +F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; +F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; +F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; +F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; +F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; +F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; +F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;; +F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; +F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; +FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; +FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; +FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; +FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; +FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; +FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; +FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; +FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; +FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; +FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; +FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; +FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; +FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; +FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; +FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; +FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; +FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; +FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; +FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; +FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; +FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; +FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; +FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; +FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; +FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; +FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; +FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; +FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; +FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; +FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; +FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; +FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;;;; +FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; +FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; +FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; +FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;;;; +FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; +FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; +FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; +FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; +FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; +FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; +FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; +FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; +FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; +FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; +FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;; +FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;; +FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;; +FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;; +FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;; +FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;; +FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;; +FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;; +FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;; +FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;; +FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;; +FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;; +FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;; +FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;; +FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;; +FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;; +FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;; +FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;; +FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;; +FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;; +FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;; +FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;; +FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;; +FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;; +FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;; +FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;; +FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;; +FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;; +FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;; +FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;; +FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;; +FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;; +FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;; +FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;; +FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;; +FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;; +FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;; +FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;; +FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;; +FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;; +FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;; +FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;; +FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;; +FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;; +FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;; +FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;; +FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;; +FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;; +FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;; +FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;; +FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;; +FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;; +FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;; +FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;; +FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;; +FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;; +FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; +FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; +FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; +FA6B;CJK COMPATIBILITY IDEOGRAPH-FA6B;Lo;0;L;6075;;;;N;;;;; +FA6C;CJK COMPATIBILITY IDEOGRAPH-FA6C;Lo;0;L;242EE;;;;N;;;;; +FA6D;CJK COMPATIBILITY IDEOGRAPH-FA6D;Lo;0;L;8218;;;;N;;;;; +FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; +FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; +FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; +FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; +FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; +FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; +FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; +FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; +FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; +FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; +FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; +FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; +FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; +FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; +FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; +FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; +FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; +FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; +FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; +FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; +FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; +FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; +FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; +FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; +FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; +FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; +FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; +FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; +FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; +FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; +FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; +FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; +FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; +FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; +FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; +FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; +FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; +FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; +FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; +FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; +FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; +FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; +FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; +FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; +FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; +FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; +FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; +FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; +FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; +FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; +FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; +FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; +FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; +FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; +FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; +FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; +FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; +FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; +FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; +FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; +FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; +FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; +FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; +FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; +FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; +FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; +FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; +FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; +FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; +FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; +FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; +FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; +FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; +FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; +FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; +FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; +FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; +FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; +FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; +FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; +FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; +FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; +FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; +FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; +FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; +FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; +FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; +FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; +FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; +FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; +FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; +FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; +FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; +FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; +FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; +FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; +FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; +FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; +FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; +FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; +FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; +FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; +FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; +FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; +FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; +FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; +FB00;LATIN SMALL LIGATURE FF;Ll;0;L; 0066 0066;;;;N;;;;; +FB01;LATIN SMALL LIGATURE FI;Ll;0;L; 0066 0069;;;;N;;;;; +FB02;LATIN SMALL LIGATURE FL;Ll;0;L; 0066 006C;;;;N;;;;; +FB03;LATIN SMALL LIGATURE FFI;Ll;0;L; 0066 0066 0069;;;;N;;;;; +FB04;LATIN SMALL LIGATURE FFL;Ll;0;L; 0066 0066 006C;;;;N;;;;; +FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L; 017F 0074;;;;N;;;;; +FB06;LATIN SMALL LIGATURE ST;Ll;0;L; 0073 0074;;;;N;;;;; +FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L; 0574 0576;;;;N;;;;; +FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L; 0574 0565;;;;N;;;;; +FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L; 0574 056B;;;;N;;;;; +FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L; 057E 0576;;;;N;;;;; +FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L; 0574 056D;;;;N;;;;; +FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; +FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; +FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; +FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R; 05E2;;;;N;;;;; +FB21;HEBREW LETTER WIDE ALEF;Lo;0;R; 05D0;;;;N;;;;; +FB22;HEBREW LETTER WIDE DALET;Lo;0;R; 05D3;;;;N;;;;; +FB23;HEBREW LETTER WIDE HE;Lo;0;R; 05D4;;;;N;;;;; +FB24;HEBREW LETTER WIDE KAF;Lo;0;R; 05DB;;;;N;;;;; +FB25;HEBREW LETTER WIDE LAMED;Lo;0;R; 05DC;;;;N;;;;; +FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R; 05DD;;;;N;;;;; +FB27;HEBREW LETTER WIDE RESH;Lo;0;R; 05E8;;;;N;;;;; +FB28;HEBREW LETTER WIDE TAV;Lo;0;R; 05EA;;;;N;;;;; +FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; +FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; +FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; +FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; +FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; +FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; +FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; +FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; +FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; +FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; +FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; +FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; +FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; +FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; +FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; +FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; +FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; +FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; +FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; +FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; +FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; +FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; +FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; +FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; +FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; +FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; +FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; +FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; +FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; +FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; +FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; +FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; +FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R; 05D0 05DC;;;;N;;;;; +FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL; 0671;;;;N;;;;; +FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL; 0671;;;;N;;;;; +FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL; 067B;;;;N;;;;; +FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL; 067B;;;;N;;;;; +FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL; 067B;;;;N;;;;; +FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL; 067B;;;;N;;;;; +FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL; 067E;;;;N;;;;; +FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL; 067E;;;;N;;;;; +FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL; 067E;;;;N;;;;; +FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL; 067E;;;;N;;;;; +FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL; 067A;;;;N;;;;; +FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL; 067A;;;;N;;;;; +FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL; 067A;;;;N;;;;; +FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL; 067A;;;;N;;;;; +FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL; 067F;;;;N;;;;; +FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL; 067F;;;;N;;;;; +FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL; 067F;;;;N;;;;; +FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL; 067F;;;;N;;;;; +FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL; 0679;;;;N;;;;; +FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL; 0679;;;;N;;;;; +FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL; 0679;;;;N;;;;; +FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL; 0679;;;;N;;;;; +FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL; 0684;;;;N;;;;; +FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL; 0684;;;;N;;;;; +FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL; 0684;;;;N;;;;; +FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL; 0684;;;;N;;;;; +FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL; 0683;;;;N;;;;; +FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL; 0683;;;;N;;;;; +FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL; 0683;;;;N;;;;; +FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL; 0683;;;;N;;;;; +FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL; 0687;;;;N;;;;; +FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL; 0687;;;;N;;;;; +FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL; 0687;;;;N;;;;; +FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL; 0687;;;;N;;;;; +FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL; 068D;;;;N;;;;; +FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL; 068D;;;;N;;;;; +FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL; 068C;;;;N;;;;; +FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL; 068C;;;;N;;;;; +FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL; 068E;;;;N;;;;; +FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL; 068E;;;;N;;;;; +FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL; 0688;;;;N;;;;; +FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL; 0688;;;;N;;;;; +FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL; 0698;;;;N;;;;; +FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL; 0698;;;;N;;;;; +FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL; 0691;;;;N;;;;; +FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL; 0691;;;;N;;;;; +FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL; 06BA;;;;N;;;;; +FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL; 06BA;;;;N;;;;; +FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL; 06C0;;;;N;;;;; +FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL; 06C0;;;;N;;;;; +FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL; 06D2;;;;N;;;;; +FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL; 06D2;;;;N;;;;; +FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 06D3;;;;N;;;;; +FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 06D3;;;;N;;;;; +FBB2;ARABIC SYMBOL DOT ABOVE;Sk;0;AL;;;;;N;;;;; +FBB3;ARABIC SYMBOL DOT BELOW;Sk;0;AL;;;;;N;;;;; +FBB4;ARABIC SYMBOL TWO DOTS ABOVE;Sk;0;AL;;;;;N;;;;; +FBB5;ARABIC SYMBOL TWO DOTS BELOW;Sk;0;AL;;;;;N;;;;; +FBB6;ARABIC SYMBOL THREE DOTS ABOVE;Sk;0;AL;;;;;N;;;;; +FBB7;ARABIC SYMBOL THREE DOTS BELOW;Sk;0;AL;;;;;N;;;;; +FBB8;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE;Sk;0;AL;;;;;N;;;;; +FBB9;ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW;Sk;0;AL;;;;;N;;;;; +FBBA;ARABIC SYMBOL FOUR DOTS ABOVE;Sk;0;AL;;;;;N;;;;; +FBBB;ARABIC SYMBOL FOUR DOTS BELOW;Sk;0;AL;;;;;N;;;;; +FBBC;ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW;Sk;0;AL;;;;;N;;;;; +FBBD;ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE;Sk;0;AL;;;;;N;;;;; +FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;; +FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; +FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; +FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; +FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL; 06C7;;;;N;;;;; +FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL; 06C7;;;;N;;;;; +FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL; 06C6;;;;N;;;;; +FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL; 06C6;;;;N;;;;; +FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL; 06C8;;;;N;;;;; +FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL; 06C8;;;;N;;;;; +FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0677;;;;N;;;;; +FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL; 06CB;;;;N;;;;; +FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL; 06CB;;;;N;;;;; +FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL; 06C5;;;;N;;;;; +FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL; 06C5;;;;N;;;;; +FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL; 06C9;;;;N;;;;; +FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL; 06C9;;;;N;;;;; +FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0649;;;;N;;;;; +FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL; 0649;;;;N;;;;; +FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL; 0626 0627;;;;N;;;;; +FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL; 0626 0627;;;;N;;;;; +FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; +FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; +FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL; 0626 0648;;;;N;;;;; +FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL; 0626 0648;;;;N;;;;; +FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; +FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; +FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; +FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; +FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; +FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; +FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; +FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; +FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; +FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL; 06CC;;;;N;;;;; +FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL; 06CC;;;;N;;;;; +FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; +FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; +FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL; 0626 062C;;;;N;;;;; +FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL; 0626 062D;;;;N;;;;; +FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL; 0626 064A;;;;N;;;;; +FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0628 062C;;;;N;;;;; +FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL; 0628 062D;;;;N;;;;; +FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0628 062E;;;;N;;;;; +FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0628 0649;;;;N;;;;; +FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL; 0628 064A;;;;N;;;;; +FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062A 062C;;;;N;;;;; +FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL; 062A 062D;;;;N;;;;; +FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL; 062A 062E;;;;N;;;;; +FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062A 0649;;;;N;;;;; +FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL; 062A 064A;;;;N;;;;; +FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062B 062C;;;;N;;;;; +FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062B 0649;;;;N;;;;; +FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL; 062B 064A;;;;N;;;;; +FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL; 062C 062D;;;;N;;;;; +FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 062C 0645;;;;N;;;;; +FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062D 062C;;;;N;;;;; +FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062D 0645;;;;N;;;;; +FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062E 062C;;;;N;;;;; +FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL; 062E 062D;;;;N;;;;; +FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062E 0645;;;;N;;;;; +FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0633 062C;;;;N;;;;; +FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0633 062D;;;;N;;;;; +FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0633 062E;;;;N;;;;; +FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0633 0645;;;;N;;;;; +FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL; 0635 062D;;;;N;;;;; +FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0635 0645;;;;N;;;;; +FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL; 0636 062C;;;;N;;;;; +FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL; 0636 062D;;;;N;;;;; +FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL; 0636 062E;;;;N;;;;; +FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0636 0645;;;;N;;;;; +FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL; 0637 062D;;;;N;;;;; +FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0637 0645;;;;N;;;;; +FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0638 0645;;;;N;;;;; +FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL; 0639 062C;;;;N;;;;; +FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL; 0639 0645;;;;N;;;;; +FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL; 063A 062C;;;;N;;;;; +FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL; 063A 0645;;;;N;;;;; +FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0641 062C;;;;N;;;;; +FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL; 0641 062D;;;;N;;;;; +FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0641 062E;;;;N;;;;; +FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0641 0645;;;;N;;;;; +FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0641 0649;;;;N;;;;; +FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL; 0641 064A;;;;N;;;;; +FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL; 0642 062D;;;;N;;;;; +FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0642 0645;;;;N;;;;; +FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0642 0649;;;;N;;;;; +FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL; 0642 064A;;;;N;;;;; +FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL; 0643 0627;;;;N;;;;; +FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL; 0643 062C;;;;N;;;;; +FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL; 0643 062D;;;;N;;;;; +FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL; 0643 062E;;;;N;;;;; +FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0643 0649;;;;N;;;;; +FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL; 0643 064A;;;;N;;;;; +FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL; 0644 062C;;;;N;;;;; +FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL; 0644 062D;;;;N;;;;; +FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL; 0644 062E;;;;N;;;;; +FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0644 0649;;;;N;;;;; +FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL; 0644 064A;;;;N;;;;; +FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL; 0645 062C;;;;N;;;;; +FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL; 0645 062D;;;;N;;;;; +FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL; 0645 062E;;;;N;;;;; +FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 0645 0645;;;;N;;;;; +FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0645 0649;;;;N;;;;; +FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL; 0645 064A;;;;N;;;;; +FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL; 0646 062C;;;;N;;;;; +FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL; 0646 062D;;;;N;;;;; +FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL; 0646 062E;;;;N;;;;; +FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0646 0649;;;;N;;;;; +FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL; 0646 064A;;;;N;;;;; +FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0647 062C;;;;N;;;;; +FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0647 0645;;;;N;;;;; +FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0647 0649;;;;N;;;;; +FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL; 0647 064A;;;;N;;;;; +FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL; 064A 062C;;;;N;;;;; +FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL; 064A 062D;;;;N;;;;; +FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL; 064A 062E;;;;N;;;;; +FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 064A 0649;;;;N;;;;; +FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL; 064A 064A;;;;N;;;;; +FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0630 0670;;;;N;;;;; +FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0631 0670;;;;N;;;;; +FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0649 0670;;;;N;;;;; +FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C 0651;;;;N;;;;; +FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D 0651;;;;N;;;;; +FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL; 0020 064E 0651;;;;N;;;;; +FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F 0651;;;;N;;;;; +FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL; 0020 0650 0651;;;;N;;;;; +FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0020 0651 0670;;;;N;;;;; +FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL; 0626 0631;;;;N;;;;; +FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL; 0626 0632;;;;N;;;;; +FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL; 0626 0646;;;;N;;;;; +FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL; 0626 064A;;;;N;;;;; +FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL; 0628 0631;;;;N;;;;; +FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL; 0628 0632;;;;N;;;;; +FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL; 0628 0646;;;;N;;;;; +FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0628 0649;;;;N;;;;; +FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL; 0628 064A;;;;N;;;;; +FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL; 062A 0631;;;;N;;;;; +FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL; 062A 0632;;;;N;;;;; +FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL; 062A 0646;;;;N;;;;; +FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0649;;;;N;;;;; +FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL; 062A 064A;;;;N;;;;; +FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL; 062B 0631;;;;N;;;;; +FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL; 062B 0632;;;;N;;;;; +FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL; 062B 0646;;;;N;;;;; +FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062B 0649;;;;N;;;;; +FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL; 062B 064A;;;;N;;;;; +FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0641 0649;;;;N;;;;; +FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL; 0641 064A;;;;N;;;;; +FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0642 0649;;;;N;;;;; +FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL; 0642 064A;;;;N;;;;; +FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL; 0643 0627;;;;N;;;;; +FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0643 0649;;;;N;;;;; +FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL; 0643 064A;;;;N;;;;; +FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 0649;;;;N;;;;; +FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL; 0644 064A;;;;N;;;;; +FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL; 0645 0627;;;;N;;;;; +FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; +FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL; 0646 0631;;;;N;;;;; +FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL; 0646 0632;;;;N;;;;; +FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL; 0646 0646;;;;N;;;;; +FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0649;;;;N;;;;; +FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL; 0646 064A;;;;N;;;;; +FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL; 0649 0670;;;;N;;;;; +FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL; 064A 0631;;;;N;;;;; +FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL; 064A 0632;;;;N;;;;; +FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL; 064A 0646;;;;N;;;;; +FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 064A 0649;;;;N;;;;; +FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL; 064A 064A;;;;N;;;;; +FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL; 0626 062C;;;;N;;;;; +FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL; 0626 062D;;;;N;;;;; +FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL; 0626 062E;;;;N;;;;; +FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; +FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL; 0628 062C;;;;N;;;;; +FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL; 0628 062D;;;;N;;;;; +FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL; 0628 062E;;;;N;;;;; +FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; +FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062C;;;;N;;;;; +FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL; 062A 062D;;;;N;;;;; +FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL; 062A 062E;;;;N;;;;; +FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; +FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 062D;;;;N;;;;; +FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062C 0645;;;;N;;;;; +FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062D 062C;;;;N;;;;; +FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062D 0645;;;;N;;;;; +FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 062E 062C;;;;N;;;;; +FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062E 0645;;;;N;;;;; +FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; +FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; +FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; +FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; +FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D;;;;N;;;;; +FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL; 0635 062E;;;;N;;;;; +FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645;;;;N;;;;; +FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL; 0636 062C;;;;N;;;;; +FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL; 0636 062D;;;;N;;;;; +FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL; 0636 062E;;;;N;;;;; +FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL; 0636 0645;;;;N;;;;; +FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL; 0637 062D;;;;N;;;;; +FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; +FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL; 0639 062C;;;;N;;;;; +FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645;;;;N;;;;; +FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL; 063A 062C;;;;N;;;;; +FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL; 063A 0645;;;;N;;;;; +FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL; 0641 062C;;;;N;;;;; +FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL; 0641 062D;;;;N;;;;; +FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL; 0641 062E;;;;N;;;;; +FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 0645;;;;N;;;;; +FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL; 0642 062D;;;;N;;;;; +FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL; 0642 0645;;;;N;;;;; +FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL; 0643 062C;;;;N;;;;; +FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL; 0643 062D;;;;N;;;;; +FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL; 0643 062E;;;;N;;;;; +FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C;;;;N;;;;; +FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL; 0644 062D;;;;N;;;;; +FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL; 0644 062E;;;;N;;;;; +FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL; 0644 0647;;;;N;;;;; +FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062C;;;;N;;;;; +FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062D;;;;N;;;;; +FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062E;;;;N;;;;; +FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; +FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL; 0646 062C;;;;N;;;;; +FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL; 0646 062D;;;;N;;;;; +FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL; 0646 062E;;;;N;;;;; +FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; +FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL; 0647 062C;;;;N;;;;; +FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645;;;;N;;;;; +FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL; 0647 0670;;;;N;;;;; +FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL; 064A 062C;;;;N;;;;; +FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL; 064A 062D;;;;N;;;;; +FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL; 064A 062E;;;;N;;;;; +FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; +FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; +FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; +FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; +FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL; 062B 0647;;;;N;;;;; +FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; +FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; +FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; +FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; +FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; +FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL; 0640 064E 0651;;;;N;;;;; +FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F 0651;;;;N;;;;; +FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL; 0640 0650 0651;;;;N;;;;; +FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0637 0649;;;;N;;;;; +FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL; 0637 064A;;;;N;;;;; +FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0639 0649;;;;N;;;;; +FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL; 0639 064A;;;;N;;;;; +FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 063A 0649;;;;N;;;;; +FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL; 063A 064A;;;;N;;;;; +FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0633 0649;;;;N;;;;; +FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0633 064A;;;;N;;;;; +FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0634 0649;;;;N;;;;; +FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0634 064A;;;;N;;;;; +FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062D 0649;;;;N;;;;; +FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL; 062D 064A;;;;N;;;;; +FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062C 0649;;;;N;;;;; +FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL; 062C 064A;;;;N;;;;; +FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062E 0649;;;;N;;;;; +FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL; 062E 064A;;;;N;;;;; +FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0635 0649;;;;N;;;;; +FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL; 0635 064A;;;;N;;;;; +FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0636 0649;;;;N;;;;; +FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL; 0636 064A;;;;N;;;;; +FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL; 0634 0631;;;;N;;;;; +FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL; 0633 0631;;;;N;;;;; +FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL; 0635 0631;;;;N;;;;; +FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL; 0636 0631;;;;N;;;;; +FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0637 0649;;;;N;;;;; +FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL; 0637 064A;;;;N;;;;; +FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0649;;;;N;;;;; +FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL; 0639 064A;;;;N;;;;; +FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0649;;;;N;;;;; +FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL; 063A 064A;;;;N;;;;; +FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 0649;;;;N;;;;; +FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL; 0633 064A;;;;N;;;;; +FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0634 0649;;;;N;;;;; +FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL; 0634 064A;;;;N;;;;; +FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0649;;;;N;;;;; +FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL; 062D 064A;;;;N;;;;; +FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0649;;;;N;;;;; +FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 064A;;;;N;;;;; +FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062E 0649;;;;N;;;;; +FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL; 062E 064A;;;;N;;;;; +FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0635 0649;;;;N;;;;; +FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL; 0635 064A;;;;N;;;;; +FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 0649;;;;N;;;;; +FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL; 0636 064A;;;;N;;;;; +FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL; 0634 0631;;;;N;;;;; +FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL; 0633 0631;;;;N;;;;; +FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL; 0635 0631;;;;N;;;;; +FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL; 0636 0631;;;;N;;;;; +FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; +FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; +FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; +FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; +FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; +FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; +FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; +FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; +FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;;N;;;;; +FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; +FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;; +FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;; +FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; +FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; +FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; +FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062D 0645;;;;N;;;;; +FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062E 0645;;;;N;;;;; +FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 062A 0645 062C;;;;N;;;;; +FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062A 0645 062D;;;;N;;;;; +FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 062A 0645 062E;;;;N;;;;; +FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; +FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; +FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 0645 064A;;;;N;;;;; +FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0645 0649;;;;N;;;;; +FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062D 062C;;;;N;;;;; +FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 062C 062D;;;;N;;;;; +FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062C 0649;;;;N;;;;; +FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; +FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; +FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0633 0645 062C;;;;N;;;;; +FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; +FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; +FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; +FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; +FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; +FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; +FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; +FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0634 062C 064A;;;;N;;;;; +FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; +FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; +FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; +FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; +FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 062D 0649;;;;N;;;;; +FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; +FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; +FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; +FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; +FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645 0645;;;;N;;;;; +FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0637 0645 064A;;;;N;;;;; +FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; +FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; +FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; +FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0645 0649;;;;N;;;;; +FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 063A 0645 0645;;;;N;;;;; +FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 063A 0645 064A;;;;N;;;;; +FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0645 0649;;;;N;;;;; +FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; +FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; +FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; +FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0642 0645 0645;;;;N;;;;; +FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; +FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0644 062D 064A;;;;N;;;;; +FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 062D 0649;;;;N;;;;; +FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; +FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; +FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; +FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; +FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; +FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; +FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062D 062C;;;;N;;;;; +FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062D 0645;;;;N;;;;; +FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062D 064A;;;;N;;;;; +FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062C 062D;;;;N;;;;; +FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; +FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; +FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; +FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; +FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; +FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; +FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062D 0645;;;;N;;;;; +FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062D 0649;;;;N;;;;; +FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; +FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; +FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062C 0649;;;;N;;;;; +FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 0645 064A;;;;N;;;;; +FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0645 0649;;;;N;;;;; +FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; +FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; +FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062E 064A;;;;N;;;;; +FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 062C 064A;;;;N;;;;; +FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062C 0649;;;;N;;;;; +FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 062A 062E 064A;;;;N;;;;; +FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062E 0649;;;;N;;;;; +FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 0645 064A;;;;N;;;;; +FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0645 0649;;;;N;;;;; +FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 0645 064A;;;;N;;;;; +FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 062D 0649;;;;N;;;;; +FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0645 0649;;;;N;;;;; +FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062E 0649;;;;N;;;;; +FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0635 062D 064A;;;;N;;;;; +FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0634 062D 064A;;;;N;;;;; +FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0636 062D 064A;;;;N;;;;; +FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 062C 064A;;;;N;;;;; +FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 0645 064A;;;;N;;;;; +FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 064A 062D 064A;;;;N;;;;; +FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 062C 064A;;;;N;;;;; +FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 0645 064A;;;;N;;;;; +FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 0645 064A;;;;N;;;;; +FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0642 0645 064A;;;;N;;;;; +FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0646 062D 064A;;;;N;;;;; +FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; +FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; +FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0639 0645 064A;;;;N;;;;; +FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0643 0645 064A;;;;N;;;;; +FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; +FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062E 064A;;;;N;;;;; +FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; +FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; +FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; +FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; +FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 062C 062D 064A;;;;N;;;;; +FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 062C 064A;;;;N;;;;; +FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 062C 064A;;;;N;;;;; +FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0641 0645 064A;;;;N;;;;; +FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062D 064A;;;;N;;;;; +FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; +FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; +FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; +FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; +FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; +FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; +FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; +FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL; 0627 0643 0628 0631;;;;N;;;;; +FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL; 0645 062D 0645 062F;;;;N;;;;; +FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL; 0635 0644 0639 0645;;;;N;;;;; +FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL; 0631 0633 0648 0644;;;;N;;;;; +FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL; 0639 0644 064A 0647;;;;N;;;;; +FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL; 0648 0633 0644 0645;;;;N;;;;; +FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL; 0635 0644 0649;;;;N;;;;; +FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; +FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; +FDFC;RIAL SIGN;Sc;0;AL; 0631 06CC 0627 0644;;;;N;;;;; +FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; +FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; +FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; +FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; +FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;; +FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;; +FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;; +FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;; +FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;; +FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;; +FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;; +FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;; +FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;; +FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;; +FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; +FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; +FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; +FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON; 002C;;;;N;;;;; +FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; +FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;;;;; +FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON; 003A;;;;N;;;;; +FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; +FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; +FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; +FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON; 3016;;;;N;;;;; +FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON; 3017;;;;N;;;;; +FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON; 2026;;;;N;;;;; +FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;; +FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON; 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; +FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON; 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; +FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON; 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; +FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; +FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; +FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; +FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; +FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; +FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; +FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; +FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; +FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON; 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; +FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON; 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; +FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON; 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; +FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON; 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; +FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON; 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; +FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON; 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; +FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; +FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; +FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON; 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; +FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON; 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; +FE45;SESAME DOT;Po;0;ON;;;;;N;;;;; +FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;; +FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;N;;;;; +FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;N;;;;; +FE49;DASHED OVERLINE;Po;0;ON; 203E;;;;N;SPACING DASHED OVERSCORE;;;; +FE4A;CENTRELINE OVERLINE;Po;0;ON; 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; +FE4B;WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING WAVY OVERSCORE;;;; +FE4C;DOUBLE WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; +FE4D;DASHED LOW LINE;Pc;0;ON; 005F;;;;N;SPACING DASHED UNDERSCORE;;;; +FE4E;CENTRELINE LOW LINE;Pc;0;ON; 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; +FE4F;WAVY LOW LINE;Pc;0;ON; 005F;;;;N;SPACING WAVY UNDERSCORE;;;; +FE50;SMALL COMMA;Po;0;CS; 002C;;;;N;;;;; +FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; +FE52;SMALL FULL STOP;Po;0;CS; 002E;;;;N;SMALL PERIOD;;;; +FE54;SMALL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; +FE55;SMALL COLON;Po;0;CS; 003A;;;;N;;;;; +FE56;SMALL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; +FE57;SMALL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; +FE58;SMALL EM DASH;Pd;0;ON; 2014;;;;N;;;;; +FE59;SMALL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; +FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; +FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; +FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; +FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; +FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; +FE5F;SMALL NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; +FE60;SMALL AMPERSAND;Po;0;ON; 0026;;;;N;;;;; +FE61;SMALL ASTERISK;Po;0;ON; 002A;;;;N;;;;; +FE62;SMALL PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +FE63;SMALL HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; +FE64;SMALL LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; +FE65;SMALL GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; +FE66;SMALL EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +FE68;SMALL REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;SMALL BACKSLASH;;;; +FE69;SMALL DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; +FE6A;SMALL PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; +FE6B;SMALL COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; +FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL; 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; +FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL; 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; +FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; +FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;; +FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; +FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL; 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; +FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL; 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; +FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; +FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; +FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL; 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; +FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL; 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; +FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL; 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; +FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL; 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; +FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL; 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; +FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL; 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; +FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL; 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; +FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; +FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; +FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; +FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; +FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; +FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; +FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; +FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; +FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; +FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; +FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; +FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; +FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; +FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; +FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; +FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; +FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; +FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; +FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; +FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; +FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; +FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; +FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; +FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; +FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; +FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; +FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; +FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; +FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; +FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; +FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; +FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; +FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; +FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; +FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; +FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; +FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; +FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; +FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; +FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; +FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; +FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; +FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; +FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; +FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; +FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; +FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; +FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; +FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; +FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; +FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; +FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; +FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; +FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; +FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; +FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; +FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; +FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; +FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; +FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; +FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; +FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; +FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; +FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; +FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; +FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; +FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; +FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; +FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; +FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; +FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; +FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; +FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; +FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; +FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; +FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; +FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; +FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; +FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; +FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; +FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; +FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; +FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; +FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; +FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; +FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; +FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; +FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; +FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; +FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; +FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; +FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; +FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; +FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; +FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; +FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; +FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; +FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; +FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; +FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; +FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; +FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; +FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; +FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; +FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; +FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; +FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; +FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; +FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; +FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; +FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; +FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; +FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; +FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; +FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; +FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; +FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; +FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; +FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; +FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; +FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; +FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; +FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; +FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; +FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; +FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; +FF02;FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; +FF03;FULLWIDTH NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; +FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; +FF05;FULLWIDTH PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; +FF06;FULLWIDTH AMPERSAND;Po;0;ON; 0026;;;;N;;;;; +FF07;FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; +FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; +FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; +FF0A;FULLWIDTH ASTERISK;Po;0;ON; 002A;;;;N;;;;; +FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +FF0C;FULLWIDTH COMMA;Po;0;CS; 002C;;;;N;;;;; +FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; +FF0E;FULLWIDTH FULL STOP;Po;0;CS; 002E;;;;N;FULLWIDTH PERIOD;;;; +FF0F;FULLWIDTH SOLIDUS;Po;0;CS; 002F;;;;N;FULLWIDTH SLASH;;;; +FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +FF11;FULLWIDTH DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +FF12;FULLWIDTH DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +FF13;FULLWIDTH DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +FF16;FULLWIDTH DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +FF19;FULLWIDTH DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +FF1A;FULLWIDTH COLON;Po;0;CS; 003A;;;;N;;;;; +FF1B;FULLWIDTH SEMICOLON;Po;0;ON; 003B;;;;N;;;;; +FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; +FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; +FF1F;FULLWIDTH QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; +FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; +FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L; 0041;;;;N;;;;FF41; +FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L; 0042;;;;N;;;;FF42; +FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L; 0043;;;;N;;;;FF43; +FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L; 0044;;;;N;;;;FF44; +FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L; 0045;;;;N;;;;FF45; +FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L; 0046;;;;N;;;;FF46; +FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L; 0047;;;;N;;;;FF47; +FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L; 0048;;;;N;;;;FF48; +FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L; 0049;;;;N;;;;FF49; +FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L; 004A;;;;N;;;;FF4A; +FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L; 004B;;;;N;;;;FF4B; +FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L; 004C;;;;N;;;;FF4C; +FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L; 004D;;;;N;;;;FF4D; +FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L; 004E;;;;N;;;;FF4E; +FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L; 004F;;;;N;;;;FF4F; +FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L; 0050;;;;N;;;;FF50; +FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L; 0051;;;;N;;;;FF51; +FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L; 0052;;;;N;;;;FF52; +FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L; 0053;;;;N;;;;FF53; +FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L; 0054;;;;N;;;;FF54; +FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L; 0055;;;;N;;;;FF55; +FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L; 0056;;;;N;;;;FF56; +FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L; 0057;;;;N;;;;FF57; +FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L; 0058;;;;N;;;;FF58; +FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L; 0059;;;;N;;;;FF59; +FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L; 005A;;;;N;;;;FF5A; +FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;; +FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;FULLWIDTH BACKSLASH;;;; +FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;; +FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON; 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; +FF3F;FULLWIDTH LOW LINE;Pc;0;ON; 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; +FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON; 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; +FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L; 0061;;;;N;;;FF21;;FF21 +FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L; 0062;;;;N;;;FF22;;FF22 +FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L; 0063;;;;N;;;FF23;;FF23 +FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L; 0064;;;;N;;;FF24;;FF24 +FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L; 0065;;;;N;;;FF25;;FF25 +FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L; 0066;;;;N;;;FF26;;FF26 +FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L; 0067;;;;N;;;FF27;;FF27 +FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L; 0068;;;;N;;;FF28;;FF28 +FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;FF29;;FF29 +FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L; 006A;;;;N;;;FF2A;;FF2A +FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L; 006B;;;;N;;;FF2B;;FF2B +FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L; 006C;;;;N;;;FF2C;;FF2C +FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L; 006D;;;;N;;;FF2D;;FF2D +FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;FF2E;;FF2E +FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L; 006F;;;;N;;;FF2F;;FF2F +FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L; 0070;;;;N;;;FF30;;FF30 +FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L; 0071;;;;N;;;FF31;;FF31 +FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L; 0072;;;;N;;;FF32;;FF32 +FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L; 0073;;;;N;;;FF33;;FF33 +FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L; 0074;;;;N;;;FF34;;FF34 +FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L; 0075;;;;N;;;FF35;;FF35 +FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L; 0076;;;;N;;;FF36;;FF36 +FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L; 0077;;;;N;;;FF37;;FF37 +FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L; 0078;;;;N;;;FF38;;FF38 +FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L; 0079;;;;N;;;FF39;;FF39 +FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L; 007A;;;;N;;;FF3A;;FF3A +FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;; +FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON; 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; +FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;; +FF5E;FULLWIDTH TILDE;Sm;0;ON; 007E;;;;N;FULLWIDTH SPACING TILDE;;;; +FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON; 2985;;;;Y;;;;; +FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON; 2986;;;;Y;;;;; +FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; +FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; +FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; +FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; +FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON; 30FB;;;;N;;;;; +FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L; 30F2;;;;N;;;;; +FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L; 30A1;;;;N;;;;; +FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L; 30A3;;;;N;;;;; +FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L; 30A5;;;;N;;;;; +FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L; 30A7;;;;N;;;;; +FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L; 30A9;;;;N;;;;; +FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L; 30E3;;;;N;;;;; +FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L; 30E5;;;;N;;;;; +FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L; 30E7;;;;N;;;;; +FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L; 30C3;;;;N;;;;; +FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L; 30FC;;;;N;;;;; +FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L; 30A2;;;;N;;;;; +FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L; 30A4;;;;N;;;;; +FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L; 30A6;;;;N;;;;; +FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L; 30A8;;;;N;;;;; +FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L; 30AA;;;;N;;;;; +FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L; 30AB;;;;N;;;;; +FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L; 30AD;;;;N;;;;; +FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L; 30AF;;;;N;;;;; +FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L; 30B1;;;;N;;;;; +FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L; 30B3;;;;N;;;;; +FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L; 30B5;;;;N;;;;; +FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L; 30B7;;;;N;;;;; +FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L; 30B9;;;;N;;;;; +FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L; 30BB;;;;N;;;;; +FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L; 30BD;;;;N;;;;; +FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L; 30BF;;;;N;;;;; +FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L; 30C1;;;;N;;;;; +FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L; 30C4;;;;N;;;;; +FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L; 30C6;;;;N;;;;; +FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L; 30C8;;;;N;;;;; +FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L; 30CA;;;;N;;;;; +FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L; 30CB;;;;N;;;;; +FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L; 30CC;;;;N;;;;; +FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L; 30CD;;;;N;;;;; +FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L; 30CE;;;;N;;;;; +FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L; 30CF;;;;N;;;;; +FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L; 30D2;;;;N;;;;; +FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L; 30D5;;;;N;;;;; +FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L; 30D8;;;;N;;;;; +FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L; 30DB;;;;N;;;;; +FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L; 30DE;;;;N;;;;; +FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L; 30DF;;;;N;;;;; +FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L; 30E0;;;;N;;;;; +FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L; 30E1;;;;N;;;;; +FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L; 30E2;;;;N;;;;; +FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L; 30E4;;;;N;;;;; +FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L; 30E6;;;;N;;;;; +FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L; 30E8;;;;N;;;;; +FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L; 30E9;;;;N;;;;; +FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L; 30EA;;;;N;;;;; +FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L; 30EB;;;;N;;;;; +FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L; 30EC;;;;N;;;;; +FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L; 30ED;;;;N;;;;; +FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L; 30EF;;;;N;;;;; +FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L; 30F3;;;;N;;;;; +FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L; 3099;;;;N;;;;; +FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;;;; +FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L; 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; +FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L; 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; +FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L; 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; +FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; +FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L; 3134;;;;N;;;;; +FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; +FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; +FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L; 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; +FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L; 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; +FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L; 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; +FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; +FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; +FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; +FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L; 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; +FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; +FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; +FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; +FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L; 3141;;;;N;;;;; +FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L; 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; +FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L; 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; +FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L; 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; +FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L; 3145;;;;N;;;;; +FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L; 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; +FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L; 3147;;;;N;;;;; +FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L; 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; +FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L; 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; +FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L; 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; +FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L; 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; +FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L; 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; +FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L; 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; +FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L; 314E;;;;N;;;;; +FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L; 314F;;;;N;;;;; +FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L; 3150;;;;N;;;;; +FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L; 3151;;;;N;;;;; +FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L; 3152;;;;N;;;;; +FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L; 3153;;;;N;;;;; +FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L; 3154;;;;N;;;;; +FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L; 3155;;;;N;;;;; +FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L; 3156;;;;N;;;;; +FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L; 3157;;;;N;;;;; +FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L; 3158;;;;N;;;;; +FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L; 3159;;;;N;;;;; +FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L; 315A;;;;N;;;;; +FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L; 315B;;;;N;;;;; +FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L; 315C;;;;N;;;;; +FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L; 315D;;;;N;;;;; +FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L; 315E;;;;N;;;;; +FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L; 315F;;;;N;;;;; +FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L; 3160;;;;N;;;;; +FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L; 3161;;;;N;;;;; +FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L; 3162;;;;N;;;;; +FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L; 3163;;;;N;;;;; +FFE0;FULLWIDTH CENT SIGN;Sc;0;ET; 00A2;;;;N;;;;; +FFE1;FULLWIDTH POUND SIGN;Sc;0;ET; 00A3;;;;N;;;;; +FFE2;FULLWIDTH NOT SIGN;Sm;0;ON; 00AC;;;;N;;;;; +FFE3;FULLWIDTH MACRON;Sk;0;ON; 00AF;;;;N;FULLWIDTH SPACING MACRON;;;; +FFE4;FULLWIDTH BROKEN BAR;So;0;ON; 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; +FFE5;FULLWIDTH YEN SIGN;Sc;0;ET; 00A5;;;;N;;;;; +FFE6;FULLWIDTH WON SIGN;Sc;0;ET; 20A9;;;;N;;;;; +FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON; 2502;;;;N;;;;; +FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON; 2190;;;;N;;;;; +FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON; 2191;;;;N;;;;; +FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON; 2192;;;;N;;;;; +FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON; 2193;;;;N;;;;; +FFED;HALFWIDTH BLACK SQUARE;So;0;ON; 25A0;;;;N;;;;; +FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON; 25CB;;;;N;;;;; +FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;; +FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;; +FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;; +FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; +FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; +10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;; +10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;; +10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;; +10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;; +10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;; +10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;; +10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;; +10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;; +10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;; +10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;; +1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;; +1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;; +1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;; +1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;; +1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;; +10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;; +10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;; +10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;; +10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;; +10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;; +10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;; +10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;; +10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;; +10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;; +10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;; +1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;; +1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;; +1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;; +1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;; +1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;; +1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;; +10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;; +10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;; +10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;; +10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;; +10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;; +10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;; +10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;; +10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;; +10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;; +1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;; +1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;; +1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;; +1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;; +1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;; +1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;; +10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;; +10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;; +10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;; +10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;; +10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;; +10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;; +10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;; +10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;; +10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;; +10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;; +1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;; +1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;; +1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;; +1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;; +10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;; +10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;; +10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;; +10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;; +10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;; +10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;; +10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;; +10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;; +10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;; +10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;; +1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;; +1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;; +1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;; +1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;; +10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;; +10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;; +10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;; +10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;; +10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;; +10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;; +10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;; +10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;; +10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;; +10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;; +1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;; +1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;; +1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;; +1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;; +10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;; +10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;; +10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;; +10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;; +10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;; +10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;; +10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;; +10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;; +10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;; +10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;; +1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;; +1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;; +1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;; +1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;; +1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;; +1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;; +10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;; +10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;; +10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;; +10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;; +10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;; +10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;; +10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;; +10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;; +10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;; +10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;; +1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;; +1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;; +1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;; +1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;; +1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;; +1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;; +100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;; +100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;; +100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;; +100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;; +100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;; +100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;; +100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;; +100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;; +100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;; +100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;; +100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;; +100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;; +100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;; +100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;; +100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;; +100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;; +100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;; +100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;; +100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;; +100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;; +100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;; +100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;; +100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;; +100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;; +100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;; +100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;; +100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;; +100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;; +100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;; +100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;; +100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;; +100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;; +100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;; +100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;; +100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;; +100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;; +100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;; +100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;; +100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;; +100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;; +100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;; +100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;;;; +100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;; +100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;;;; +100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;; +100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;; +100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;; +100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;; +100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;; +100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;; +100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;; +100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;; +100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;; +100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;; +100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;; +100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;; +100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;; +100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;; +100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;; +100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;; +100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;; +100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;; +100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;; +100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;; +100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;; +100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;; +100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;; +100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;; +100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;; +100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;; +100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;; +100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;; +100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;; +100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;; +100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;; +100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;; +100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;; +100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;; +100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;; +100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;; +100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;; +100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;; +100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;; +100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;; +100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;; +100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;; +100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;; +100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;; +100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;; +100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;; +100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;; +10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;; +10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;; +10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;; +10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;; +10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;; +10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;; +1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;; +1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;; +1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;; +1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;; +1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;; +1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;; +10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;; +10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;; +10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;; +10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;; +10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;; +10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;; +10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;; +10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;; +10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;; +10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;; +1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;; +1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;; +1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;; +1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;; +1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;; +10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;; +10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;; +10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;; +10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;; +10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;; +10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;; +10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;; +10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;; +10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;; +1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;; +1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;; +1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;; +1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;; +1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;; +10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;; +10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;; +10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;; +10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;; +10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;; +10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;; +10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;; +1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;; +1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;; +1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; +1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; +1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; +1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; +10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; +10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; +10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; +10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; +10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; +10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; +10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; +10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; +1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; +1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; +1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; +1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; +1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; +1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; +10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; +10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; +10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; +10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; +10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; +10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; +10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; +10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; +10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; +10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; +1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; +1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; +10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; +10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; +10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; +10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; +10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; +10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; +1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; +1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; +10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; +10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; +10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; +10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; +10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; +10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; +10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; +1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; +1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; +1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; +1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; +10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; +10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; +10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; +10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; +10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; +10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; +10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; +10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; +10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; +10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; +1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; +10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;; +10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;; +10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;; +10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;; +10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;; +10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;; +10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;; +10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;; +10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;; +10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;; +1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;; +1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;; +101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;; +101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;; +101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;; +101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;; +101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;; +101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;; +101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;; +101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;; +101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;; +101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;; +101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;; +101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;; +101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;; +101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;; +101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;; +101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;; +101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;; +101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;; +101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;; +101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;; +101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;; +101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;; +101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;; +101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;; +101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;; +101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;; +101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;; +101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;; +101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;; +101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;; +101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;; +101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;; +101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;; +101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;; +101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;; +101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;; +101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;; +101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;; +101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;; +101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;; +101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;; +101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;; +101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;; +101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;; +101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;; +101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;; +10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;; +10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;; +10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;; +10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;; +10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;; +10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;; +10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;; +10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;; +10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;; +10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;; +1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;; +1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;; +1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;; +1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;; +1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;; +1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;; +10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;; +10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;; +10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;; +10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;; +10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;; +10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;; +10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;; +10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;; +10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;; +10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;; +1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;; +1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;; +1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;; +102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;; +102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;; +102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;; +102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;; +102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;; +102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;; +102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;; +102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;; +102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;; +102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;; +102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;; +102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;; +102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;; +102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;; +102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;; +102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;; +102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;; +102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;; +102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;; +102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;; +102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;; +102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;; +102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;; +102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;; +102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;; +102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;; +102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;; +102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;; +102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;; +102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;; +102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;; +102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;; +102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;; +102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;; +102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;; +102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;; +102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;; +102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;; +102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;; +102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;; +102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;; +102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;; +102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;; +102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;; +102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;; +102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;; +102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;; +102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;; +102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;; +10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; +10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; +10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; +10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;; +10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;; +10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;; +10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;; +10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;; +10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;; +10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;; +1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;; +1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;; +1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;; +1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;; +1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;; +1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;;;; +10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;; +10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;; +10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;; +10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;; +10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;; +10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;; +10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;; +10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;;;; +10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;; +10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;; +1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;; +1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;;;; +1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;;;; +1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;;;; +1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;;;; +10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;; +10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;; +10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;; +10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;; +10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;; +10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;; +10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;; +10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;; +10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;; +10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;; +10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;; +10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;; +10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;; +10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;; +1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;; +1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;; +1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;; +1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;; +1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; +1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; +10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; +10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; +10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; +10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; +10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; +10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;; +10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;; +10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; +10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; +10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; +1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; +10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; +10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; +10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; +10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;; +10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;; +10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;; +10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;; +10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;; +10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;; +10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;; +1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;; +1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;; +1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;; +1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;; +1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;; +1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;; +10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;; +10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;; +10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;; +10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;; +10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;; +10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;; +10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;; +10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;; +10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;; +10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;; +1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;; +1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;; +1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; +1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; +1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; +103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; +103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; +103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; +103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; +103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; +103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; +103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; +103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; +103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; +103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; +103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; +103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; +103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; +103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; +103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; +103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; +103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; +103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; +103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; +103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; +103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; +103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; +103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; +103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; +103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; +103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; +103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; +103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; +103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; +103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; +103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; +103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; +103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; +103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; +103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; +103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; +103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; +103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; +103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; +103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; +103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; +103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; +103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; +103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; +103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; +103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; +103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; +103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; +103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; +10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; +10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; +10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; +10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B; +10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C; +10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D; +10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E; +10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F; +10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430; +10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431; +1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432; +1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433; +1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434; +1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435; +1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436; +1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437; +10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438; +10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439; +10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A; +10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B; +10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C; +10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D; +10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E; +10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F; +10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440; +10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441; +1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442; +1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443; +1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444; +1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445; +1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446; +1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447; +10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448; +10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449; +10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A; +10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B; +10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C; +10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D; +10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E; +10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; +10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 +10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401 +1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402 +1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403 +1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404 +1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405 +1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406 +1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407 +10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408 +10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409 +10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A +10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B +10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C +10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D +10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E +10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F +10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410 +10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411 +1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412 +1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413 +1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414 +1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415 +1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416 +1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417 +10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418 +10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419 +10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A +10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B +10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C +10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D +10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E +10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F +10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420 +10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421 +1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422 +1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423 +1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424 +1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425 +1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426 +1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 +10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; +10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;; +10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;; +10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;; +10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;; +10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;; +10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;; +10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;; +10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;; +10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;; +1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;; +1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;; +1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;; +1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;; +1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;; +1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;; +10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;; +10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;; +10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;; +10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;; +10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;; +10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;; +10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;; +10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;; +10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;; +10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;; +1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;; +1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;; +1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;; +1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;; +1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;; +1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;; +10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;; +10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;; +10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;; +10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;; +10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;; +10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;; +10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;; +10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;; +10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;; +10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;; +1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;; +1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;; +1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;; +1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;; +1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;; +1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;; +10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;; +10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;; +10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;; +10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;; +10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;; +10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;; +10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;; +10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;; +10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;; +10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;; +1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;; +1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;; +1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;; +1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;; +1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;; +1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;; +10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;; +10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;; +10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;; +10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;; +10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;; +10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;; +10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;; +10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;; +10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;; +10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;; +1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;; +1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;; +1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;; +1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;; +104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; +10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; +10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; +10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;; +10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;; +10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;; +10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;; +1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;; +1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;; +1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;; +1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;; +1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;; +1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;; +10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;; +10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;; +10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;; +10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;; +10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;; +10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;; +10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;; +10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;; +10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;; +10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;; +1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;; +1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;; +1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;; +1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;; +1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;; +1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;; +10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;; +10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;; +10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;; +10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;; +10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;; +10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;; +10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;; +10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;; +10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;; +10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;; +1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;; +1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;; +1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;; +1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;; +1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;; +1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;; +10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;; +10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;; +10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;; +10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;; +10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;; +10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;; +10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;; +10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; +1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; +1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; +10840;IMPERIAL ARAMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;; +10841;IMPERIAL ARAMAIC LETTER BETH;Lo;0;R;;;;;N;;;;; +10842;IMPERIAL ARAMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;; +10843;IMPERIAL ARAMAIC LETTER DALETH;Lo;0;R;;;;;N;;;;; +10844;IMPERIAL ARAMAIC LETTER HE;Lo;0;R;;;;;N;;;;; +10845;IMPERIAL ARAMAIC LETTER WAW;Lo;0;R;;;;;N;;;;; +10846;IMPERIAL ARAMAIC LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +10847;IMPERIAL ARAMAIC LETTER HETH;Lo;0;R;;;;;N;;;;; +10848;IMPERIAL ARAMAIC LETTER TETH;Lo;0;R;;;;;N;;;;; +10849;IMPERIAL ARAMAIC LETTER YODH;Lo;0;R;;;;;N;;;;; +1084A;IMPERIAL ARAMAIC LETTER KAPH;Lo;0;R;;;;;N;;;;; +1084B;IMPERIAL ARAMAIC LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +1084C;IMPERIAL ARAMAIC LETTER MEM;Lo;0;R;;;;;N;;;;; +1084D;IMPERIAL ARAMAIC LETTER NUN;Lo;0;R;;;;;N;;;;; +1084E;IMPERIAL ARAMAIC LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +1084F;IMPERIAL ARAMAIC LETTER AYIN;Lo;0;R;;;;;N;;;;; +10850;IMPERIAL ARAMAIC LETTER PE;Lo;0;R;;;;;N;;;;; +10851;IMPERIAL ARAMAIC LETTER SADHE;Lo;0;R;;;;;N;;;;; +10852;IMPERIAL ARAMAIC LETTER QOPH;Lo;0;R;;;;;N;;;;; +10853;IMPERIAL ARAMAIC LETTER RESH;Lo;0;R;;;;;N;;;;; +10854;IMPERIAL ARAMAIC LETTER SHIN;Lo;0;R;;;;;N;;;;; +10855;IMPERIAL ARAMAIC LETTER TAW;Lo;0;R;;;;;N;;;;; +10857;IMPERIAL ARAMAIC SECTION SIGN;Po;0;R;;;;;N;;;;; +10858;IMPERIAL ARAMAIC NUMBER ONE;No;0;R;;;;1;N;;;;; +10859;IMPERIAL ARAMAIC NUMBER TWO;No;0;R;;;;2;N;;;;; +1085A;IMPERIAL ARAMAIC NUMBER THREE;No;0;R;;;;3;N;;;;; +1085B;IMPERIAL ARAMAIC NUMBER TEN;No;0;R;;;;10;N;;;;; +1085C;IMPERIAL ARAMAIC NUMBER TWENTY;No;0;R;;;;20;N;;;;; +1085D;IMPERIAL ARAMAIC NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +1085E;IMPERIAL ARAMAIC NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +1085F;IMPERIAL ARAMAIC NUMBER TEN THOUSAND;No;0;R;;;;10000;N;;;;; +10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; +10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; +10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; +10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; +10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; +10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; +10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; +10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; +10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; +10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; +1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; +1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; +1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; +1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; +1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; +1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; +10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; +10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; +10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; +10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; +10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; +10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; +10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; +10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; +10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +1091A;PHOENICIAN NUMBER TWO;No;0;R;;;;2;N;;;;; +1091B;PHOENICIAN NUMBER THREE;No;0;R;;;;3;N;;;;; +1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; +10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;; +10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;; +10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;; +10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;; +10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;; +10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;; +10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;; +10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;; +10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;; +10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;; +1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;; +1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;; +1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;; +1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;; +1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;; +1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;; +10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;; +10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;; +10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;; +10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;; +10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;; +10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;; +10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;; +10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;; +10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; +10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; +1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; +10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; +10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; +10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; +10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; +10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; +10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; +10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; +10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; +10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; +10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; +10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; +10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; +10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; +10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; +10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; +10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; +10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; +10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; +10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; +10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; +10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; +10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; +10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; +10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; +10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; +10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; +10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; +10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; +10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; +10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; +10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; +10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; +10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; +10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; +10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; +10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; +10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; +10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; +10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; +10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; +10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; +10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; +10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; +10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; +10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; +10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; +10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; +10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; +10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; +10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; +10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; +10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; +10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; +10A60;OLD SOUTH ARABIAN LETTER HE;Lo;0;R;;;;;N;;;;; +10A61;OLD SOUTH ARABIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +10A62;OLD SOUTH ARABIAN LETTER HETH;Lo;0;R;;;;;N;;;;; +10A63;OLD SOUTH ARABIAN LETTER MEM;Lo;0;R;;;;;N;;;;; +10A64;OLD SOUTH ARABIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; +10A65;OLD SOUTH ARABIAN LETTER WAW;Lo;0;R;;;;;N;;;;; +10A66;OLD SOUTH ARABIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; +10A67;OLD SOUTH ARABIAN LETTER RESH;Lo;0;R;;;;;N;;;;; +10A68;OLD SOUTH ARABIAN LETTER BETH;Lo;0;R;;;;;N;;;;; +10A69;OLD SOUTH ARABIAN LETTER TAW;Lo;0;R;;;;;N;;;;; +10A6A;OLD SOUTH ARABIAN LETTER SAT;Lo;0;R;;;;;N;;;;; +10A6B;OLD SOUTH ARABIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; +10A6C;OLD SOUTH ARABIAN LETTER NUN;Lo;0;R;;;;;N;;;;; +10A6D;OLD SOUTH ARABIAN LETTER KHETH;Lo;0;R;;;;;N;;;;; +10A6E;OLD SOUTH ARABIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; +10A6F;OLD SOUTH ARABIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +10A70;OLD SOUTH ARABIAN LETTER FE;Lo;0;R;;;;;N;;;;; +10A71;OLD SOUTH ARABIAN LETTER ALEF;Lo;0;R;;;;;N;;;;; +10A72;OLD SOUTH ARABIAN LETTER AYN;Lo;0;R;;;;;N;;;;; +10A73;OLD SOUTH ARABIAN LETTER DHADHE;Lo;0;R;;;;;N;;;;; +10A74;OLD SOUTH ARABIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; +10A75;OLD SOUTH ARABIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; +10A76;OLD SOUTH ARABIAN LETTER GHAYN;Lo;0;R;;;;;N;;;;; +10A77;OLD SOUTH ARABIAN LETTER TETH;Lo;0;R;;;;;N;;;;; +10A78;OLD SOUTH ARABIAN LETTER ZAYN;Lo;0;R;;;;;N;;;;; +10A79;OLD SOUTH ARABIAN LETTER DHALETH;Lo;0;R;;;;;N;;;;; +10A7A;OLD SOUTH ARABIAN LETTER YODH;Lo;0;R;;;;;N;;;;; +10A7B;OLD SOUTH ARABIAN LETTER THAW;Lo;0;R;;;;;N;;;;; +10A7C;OLD SOUTH ARABIAN LETTER THETH;Lo;0;R;;;;;N;;;;; +10A7D;OLD SOUTH ARABIAN NUMBER ONE;No;0;R;;;;1;N;;;;; +10A7E;OLD SOUTH ARABIAN NUMBER FIFTY;No;0;R;;;;50;N;;;;; +10A7F;OLD SOUTH ARABIAN NUMERIC INDICATOR;Po;0;R;;;;;N;;;;; +10B00;AVESTAN LETTER A;Lo;0;R;;;;;N;;;;; +10B01;AVESTAN LETTER AA;Lo;0;R;;;;;N;;;;; +10B02;AVESTAN LETTER AO;Lo;0;R;;;;;N;;;;; +10B03;AVESTAN LETTER AAO;Lo;0;R;;;;;N;;;;; +10B04;AVESTAN LETTER AN;Lo;0;R;;;;;N;;;;; +10B05;AVESTAN LETTER AAN;Lo;0;R;;;;;N;;;;; +10B06;AVESTAN LETTER AE;Lo;0;R;;;;;N;;;;; +10B07;AVESTAN LETTER AEE;Lo;0;R;;;;;N;;;;; +10B08;AVESTAN LETTER E;Lo;0;R;;;;;N;;;;; +10B09;AVESTAN LETTER EE;Lo;0;R;;;;;N;;;;; +10B0A;AVESTAN LETTER O;Lo;0;R;;;;;N;;;;; +10B0B;AVESTAN LETTER OO;Lo;0;R;;;;;N;;;;; +10B0C;AVESTAN LETTER I;Lo;0;R;;;;;N;;;;; +10B0D;AVESTAN LETTER II;Lo;0;R;;;;;N;;;;; +10B0E;AVESTAN LETTER U;Lo;0;R;;;;;N;;;;; +10B0F;AVESTAN LETTER UU;Lo;0;R;;;;;N;;;;; +10B10;AVESTAN LETTER KE;Lo;0;R;;;;;N;;;;; +10B11;AVESTAN LETTER XE;Lo;0;R;;;;;N;;;;; +10B12;AVESTAN LETTER XYE;Lo;0;R;;;;;N;;;;; +10B13;AVESTAN LETTER XVE;Lo;0;R;;;;;N;;;;; +10B14;AVESTAN LETTER GE;Lo;0;R;;;;;N;;;;; +10B15;AVESTAN LETTER GGE;Lo;0;R;;;;;N;;;;; +10B16;AVESTAN LETTER GHE;Lo;0;R;;;;;N;;;;; +10B17;AVESTAN LETTER CE;Lo;0;R;;;;;N;;;;; +10B18;AVESTAN LETTER JE;Lo;0;R;;;;;N;;;;; +10B19;AVESTAN LETTER TE;Lo;0;R;;;;;N;;;;; +10B1A;AVESTAN LETTER THE;Lo;0;R;;;;;N;;;;; +10B1B;AVESTAN LETTER DE;Lo;0;R;;;;;N;;;;; +10B1C;AVESTAN LETTER DHE;Lo;0;R;;;;;N;;;;; +10B1D;AVESTAN LETTER TTE;Lo;0;R;;;;;N;;;;; +10B1E;AVESTAN LETTER PE;Lo;0;R;;;;;N;;;;; +10B1F;AVESTAN LETTER FE;Lo;0;R;;;;;N;;;;; +10B20;AVESTAN LETTER BE;Lo;0;R;;;;;N;;;;; +10B21;AVESTAN LETTER BHE;Lo;0;R;;;;;N;;;;; +10B22;AVESTAN LETTER NGE;Lo;0;R;;;;;N;;;;; +10B23;AVESTAN LETTER NGYE;Lo;0;R;;;;;N;;;;; +10B24;AVESTAN LETTER NGVE;Lo;0;R;;;;;N;;;;; +10B25;AVESTAN LETTER NE;Lo;0;R;;;;;N;;;;; +10B26;AVESTAN LETTER NYE;Lo;0;R;;;;;N;;;;; +10B27;AVESTAN LETTER NNE;Lo;0;R;;;;;N;;;;; +10B28;AVESTAN LETTER ME;Lo;0;R;;;;;N;;;;; +10B29;AVESTAN LETTER HME;Lo;0;R;;;;;N;;;;; +10B2A;AVESTAN LETTER YYE;Lo;0;R;;;;;N;;;;; +10B2B;AVESTAN LETTER YE;Lo;0;R;;;;;N;;;;; +10B2C;AVESTAN LETTER VE;Lo;0;R;;;;;N;;;;; +10B2D;AVESTAN LETTER RE;Lo;0;R;;;;;N;;;;; +10B2E;AVESTAN LETTER LE;Lo;0;R;;;;;N;;;;; +10B2F;AVESTAN LETTER SE;Lo;0;R;;;;;N;;;;; +10B30;AVESTAN LETTER ZE;Lo;0;R;;;;;N;;;;; +10B31;AVESTAN LETTER SHE;Lo;0;R;;;;;N;;;;; +10B32;AVESTAN LETTER ZHE;Lo;0;R;;;;;N;;;;; +10B33;AVESTAN LETTER SHYE;Lo;0;R;;;;;N;;;;; +10B34;AVESTAN LETTER SSHE;Lo;0;R;;;;;N;;;;; +10B35;AVESTAN LETTER HE;Lo;0;R;;;;;N;;;;; +10B39;AVESTAN ABBREVIATION MARK;Po;0;ON;;;;;N;;;;; +10B3A;TINY TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +10B3B;SMALL TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +10B3C;LARGE TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +10B3D;LARGE ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; +10B3E;LARGE TWO RINGS OVER ONE RING PUNCTUATION;Po;0;ON;;;;;N;;;;; +10B3F;LARGE ONE RING OVER TWO RINGS PUNCTUATION;Po;0;ON;;;;;N;;;;; +10B40;INSCRIPTIONAL PARTHIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; +10B41;INSCRIPTIONAL PARTHIAN LETTER BETH;Lo;0;R;;;;;N;;;;; +10B42;INSCRIPTIONAL PARTHIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;; +10B43;INSCRIPTIONAL PARTHIAN LETTER DALETH;Lo;0;R;;;;;N;;;;; +10B44;INSCRIPTIONAL PARTHIAN LETTER HE;Lo;0;R;;;;;N;;;;; +10B45;INSCRIPTIONAL PARTHIAN LETTER WAW;Lo;0;R;;;;;N;;;;; +10B46;INSCRIPTIONAL PARTHIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +10B47;INSCRIPTIONAL PARTHIAN LETTER HETH;Lo;0;R;;;;;N;;;;; +10B48;INSCRIPTIONAL PARTHIAN LETTER TETH;Lo;0;R;;;;;N;;;;; +10B49;INSCRIPTIONAL PARTHIAN LETTER YODH;Lo;0;R;;;;;N;;;;; +10B4A;INSCRIPTIONAL PARTHIAN LETTER KAPH;Lo;0;R;;;;;N;;;;; +10B4B;INSCRIPTIONAL PARTHIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +10B4C;INSCRIPTIONAL PARTHIAN LETTER MEM;Lo;0;R;;;;;N;;;;; +10B4D;INSCRIPTIONAL PARTHIAN LETTER NUN;Lo;0;R;;;;;N;;;;; +10B4E;INSCRIPTIONAL PARTHIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +10B4F;INSCRIPTIONAL PARTHIAN LETTER AYIN;Lo;0;R;;;;;N;;;;; +10B50;INSCRIPTIONAL PARTHIAN LETTER PE;Lo;0;R;;;;;N;;;;; +10B51;INSCRIPTIONAL PARTHIAN LETTER SADHE;Lo;0;R;;;;;N;;;;; +10B52;INSCRIPTIONAL PARTHIAN LETTER QOPH;Lo;0;R;;;;;N;;;;; +10B53;INSCRIPTIONAL PARTHIAN LETTER RESH;Lo;0;R;;;;;N;;;;; +10B54;INSCRIPTIONAL PARTHIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; +10B55;INSCRIPTIONAL PARTHIAN LETTER TAW;Lo;0;R;;;;;N;;;;; +10B58;INSCRIPTIONAL PARTHIAN NUMBER ONE;No;0;R;;;;1;N;;;;; +10B59;INSCRIPTIONAL PARTHIAN NUMBER TWO;No;0;R;;;;2;N;;;;; +10B5A;INSCRIPTIONAL PARTHIAN NUMBER THREE;No;0;R;;;;3;N;;;;; +10B5B;INSCRIPTIONAL PARTHIAN NUMBER FOUR;No;0;R;;;;4;N;;;;; +10B5C;INSCRIPTIONAL PARTHIAN NUMBER TEN;No;0;R;;;;10;N;;;;; +10B5D;INSCRIPTIONAL PARTHIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10B5E;INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +10B5F;INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +10B60;INSCRIPTIONAL PAHLAVI LETTER ALEPH;Lo;0;R;;;;;N;;;;; +10B61;INSCRIPTIONAL PAHLAVI LETTER BETH;Lo;0;R;;;;;N;;;;; +10B62;INSCRIPTIONAL PAHLAVI LETTER GIMEL;Lo;0;R;;;;;N;;;;; +10B63;INSCRIPTIONAL PAHLAVI LETTER DALETH;Lo;0;R;;;;;N;;;;; +10B64;INSCRIPTIONAL PAHLAVI LETTER HE;Lo;0;R;;;;;N;;;;; +10B65;INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH;Lo;0;R;;;;;N;;;;; +10B66;INSCRIPTIONAL PAHLAVI LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +10B67;INSCRIPTIONAL PAHLAVI LETTER HETH;Lo;0;R;;;;;N;;;;; +10B68;INSCRIPTIONAL PAHLAVI LETTER TETH;Lo;0;R;;;;;N;;;;; +10B69;INSCRIPTIONAL PAHLAVI LETTER YODH;Lo;0;R;;;;;N;;;;; +10B6A;INSCRIPTIONAL PAHLAVI LETTER KAPH;Lo;0;R;;;;;N;;;;; +10B6B;INSCRIPTIONAL PAHLAVI LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +10B6C;INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH;Lo;0;R;;;;;N;;;;; +10B6D;INSCRIPTIONAL PAHLAVI LETTER NUN;Lo;0;R;;;;;N;;;;; +10B6E;INSCRIPTIONAL PAHLAVI LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +10B6F;INSCRIPTIONAL PAHLAVI LETTER PE;Lo;0;R;;;;;N;;;;; +10B70;INSCRIPTIONAL PAHLAVI LETTER SADHE;Lo;0;R;;;;;N;;;;; +10B71;INSCRIPTIONAL PAHLAVI LETTER SHIN;Lo;0;R;;;;;N;;;;; +10B72;INSCRIPTIONAL PAHLAVI LETTER TAW;Lo;0;R;;;;;N;;;;; +10B78;INSCRIPTIONAL PAHLAVI NUMBER ONE;No;0;R;;;;1;N;;;;; +10B79;INSCRIPTIONAL PAHLAVI NUMBER TWO;No;0;R;;;;2;N;;;;; +10B7A;INSCRIPTIONAL PAHLAVI NUMBER THREE;No;0;R;;;;3;N;;;;; +10B7B;INSCRIPTIONAL PAHLAVI NUMBER FOUR;No;0;R;;;;4;N;;;;; +10B7C;INSCRIPTIONAL PAHLAVI NUMBER TEN;No;0;R;;;;10;N;;;;; +10B7D;INSCRIPTIONAL PAHLAVI NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10B7E;INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +10B7F;INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +10C00;OLD TURKIC LETTER ORKHON A;Lo;0;R;;;;;N;;;;; +10C01;OLD TURKIC LETTER YENISEI A;Lo;0;R;;;;;N;;;;; +10C02;OLD TURKIC LETTER YENISEI AE;Lo;0;R;;;;;N;;;;; +10C03;OLD TURKIC LETTER ORKHON I;Lo;0;R;;;;;N;;;;; +10C04;OLD TURKIC LETTER YENISEI I;Lo;0;R;;;;;N;;;;; +10C05;OLD TURKIC LETTER YENISEI E;Lo;0;R;;;;;N;;;;; +10C06;OLD TURKIC LETTER ORKHON O;Lo;0;R;;;;;N;;;;; +10C07;OLD TURKIC LETTER ORKHON OE;Lo;0;R;;;;;N;;;;; +10C08;OLD TURKIC LETTER YENISEI OE;Lo;0;R;;;;;N;;;;; +10C09;OLD TURKIC LETTER ORKHON AB;Lo;0;R;;;;;N;;;;; +10C0A;OLD TURKIC LETTER YENISEI AB;Lo;0;R;;;;;N;;;;; +10C0B;OLD TURKIC LETTER ORKHON AEB;Lo;0;R;;;;;N;;;;; +10C0C;OLD TURKIC LETTER YENISEI AEB;Lo;0;R;;;;;N;;;;; +10C0D;OLD TURKIC LETTER ORKHON AG;Lo;0;R;;;;;N;;;;; +10C0E;OLD TURKIC LETTER YENISEI AG;Lo;0;R;;;;;N;;;;; +10C0F;OLD TURKIC LETTER ORKHON AEG;Lo;0;R;;;;;N;;;;; +10C10;OLD TURKIC LETTER YENISEI AEG;Lo;0;R;;;;;N;;;;; +10C11;OLD TURKIC LETTER ORKHON AD;Lo;0;R;;;;;N;;;;; +10C12;OLD TURKIC LETTER YENISEI AD;Lo;0;R;;;;;N;;;;; +10C13;OLD TURKIC LETTER ORKHON AED;Lo;0;R;;;;;N;;;;; +10C14;OLD TURKIC LETTER ORKHON EZ;Lo;0;R;;;;;N;;;;; +10C15;OLD TURKIC LETTER YENISEI EZ;Lo;0;R;;;;;N;;;;; +10C16;OLD TURKIC LETTER ORKHON AY;Lo;0;R;;;;;N;;;;; +10C17;OLD TURKIC LETTER YENISEI AY;Lo;0;R;;;;;N;;;;; +10C18;OLD TURKIC LETTER ORKHON AEY;Lo;0;R;;;;;N;;;;; +10C19;OLD TURKIC LETTER YENISEI AEY;Lo;0;R;;;;;N;;;;; +10C1A;OLD TURKIC LETTER ORKHON AEK;Lo;0;R;;;;;N;;;;; +10C1B;OLD TURKIC LETTER YENISEI AEK;Lo;0;R;;;;;N;;;;; +10C1C;OLD TURKIC LETTER ORKHON OEK;Lo;0;R;;;;;N;;;;; +10C1D;OLD TURKIC LETTER YENISEI OEK;Lo;0;R;;;;;N;;;;; +10C1E;OLD TURKIC LETTER ORKHON AL;Lo;0;R;;;;;N;;;;; +10C1F;OLD TURKIC LETTER YENISEI AL;Lo;0;R;;;;;N;;;;; +10C20;OLD TURKIC LETTER ORKHON AEL;Lo;0;R;;;;;N;;;;; +10C21;OLD TURKIC LETTER ORKHON ELT;Lo;0;R;;;;;N;;;;; +10C22;OLD TURKIC LETTER ORKHON EM;Lo;0;R;;;;;N;;;;; +10C23;OLD TURKIC LETTER ORKHON AN;Lo;0;R;;;;;N;;;;; +10C24;OLD TURKIC LETTER ORKHON AEN;Lo;0;R;;;;;N;;;;; +10C25;OLD TURKIC LETTER YENISEI AEN;Lo;0;R;;;;;N;;;;; +10C26;OLD TURKIC LETTER ORKHON ENT;Lo;0;R;;;;;N;;;;; +10C27;OLD TURKIC LETTER YENISEI ENT;Lo;0;R;;;;;N;;;;; +10C28;OLD TURKIC LETTER ORKHON ENC;Lo;0;R;;;;;N;;;;; +10C29;OLD TURKIC LETTER YENISEI ENC;Lo;0;R;;;;;N;;;;; +10C2A;OLD TURKIC LETTER ORKHON ENY;Lo;0;R;;;;;N;;;;; +10C2B;OLD TURKIC LETTER YENISEI ENY;Lo;0;R;;;;;N;;;;; +10C2C;OLD TURKIC LETTER YENISEI ANG;Lo;0;R;;;;;N;;;;; +10C2D;OLD TURKIC LETTER ORKHON ENG;Lo;0;R;;;;;N;;;;; +10C2E;OLD TURKIC LETTER YENISEI AENG;Lo;0;R;;;;;N;;;;; +10C2F;OLD TURKIC LETTER ORKHON EP;Lo;0;R;;;;;N;;;;; +10C30;OLD TURKIC LETTER ORKHON OP;Lo;0;R;;;;;N;;;;; +10C31;OLD TURKIC LETTER ORKHON IC;Lo;0;R;;;;;N;;;;; +10C32;OLD TURKIC LETTER ORKHON EC;Lo;0;R;;;;;N;;;;; +10C33;OLD TURKIC LETTER YENISEI EC;Lo;0;R;;;;;N;;;;; +10C34;OLD TURKIC LETTER ORKHON AQ;Lo;0;R;;;;;N;;;;; +10C35;OLD TURKIC LETTER YENISEI AQ;Lo;0;R;;;;;N;;;;; +10C36;OLD TURKIC LETTER ORKHON IQ;Lo;0;R;;;;;N;;;;; +10C37;OLD TURKIC LETTER YENISEI IQ;Lo;0;R;;;;;N;;;;; +10C38;OLD TURKIC LETTER ORKHON OQ;Lo;0;R;;;;;N;;;;; +10C39;OLD TURKIC LETTER YENISEI OQ;Lo;0;R;;;;;N;;;;; +10C3A;OLD TURKIC LETTER ORKHON AR;Lo;0;R;;;;;N;;;;; +10C3B;OLD TURKIC LETTER YENISEI AR;Lo;0;R;;;;;N;;;;; +10C3C;OLD TURKIC LETTER ORKHON AER;Lo;0;R;;;;;N;;;;; +10C3D;OLD TURKIC LETTER ORKHON AS;Lo;0;R;;;;;N;;;;; +10C3E;OLD TURKIC LETTER ORKHON AES;Lo;0;R;;;;;N;;;;; +10C3F;OLD TURKIC LETTER ORKHON ASH;Lo;0;R;;;;;N;;;;; +10C40;OLD TURKIC LETTER YENISEI ASH;Lo;0;R;;;;;N;;;;; +10C41;OLD TURKIC LETTER ORKHON ESH;Lo;0;R;;;;;N;;;;; +10C42;OLD TURKIC LETTER YENISEI ESH;Lo;0;R;;;;;N;;;;; +10C43;OLD TURKIC LETTER ORKHON AT;Lo;0;R;;;;;N;;;;; +10C44;OLD TURKIC LETTER YENISEI AT;Lo;0;R;;;;;N;;;;; +10C45;OLD TURKIC LETTER ORKHON AET;Lo;0;R;;;;;N;;;;; +10C46;OLD TURKIC LETTER YENISEI AET;Lo;0;R;;;;;N;;;;; +10C47;OLD TURKIC LETTER ORKHON OT;Lo;0;R;;;;;N;;;;; +10C48;OLD TURKIC LETTER ORKHON BASH;Lo;0;R;;;;;N;;;;; +10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;; +10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;; +10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;; +10E63;RUMI DIGIT FOUR;No;0;AN;;;4;4;N;;;;; +10E64;RUMI DIGIT FIVE;No;0;AN;;;5;5;N;;;;; +10E65;RUMI DIGIT SIX;No;0;AN;;;6;6;N;;;;; +10E66;RUMI DIGIT SEVEN;No;0;AN;;;7;7;N;;;;; +10E67;RUMI DIGIT EIGHT;No;0;AN;;;8;8;N;;;;; +10E68;RUMI DIGIT NINE;No;0;AN;;;9;9;N;;;;; +10E69;RUMI NUMBER TEN;No;0;AN;;;;10;N;;;;; +10E6A;RUMI NUMBER TWENTY;No;0;AN;;;;20;N;;;;; +10E6B;RUMI NUMBER THIRTY;No;0;AN;;;;30;N;;;;; +10E6C;RUMI NUMBER FORTY;No;0;AN;;;;40;N;;;;; +10E6D;RUMI NUMBER FIFTY;No;0;AN;;;;50;N;;;;; +10E6E;RUMI NUMBER SIXTY;No;0;AN;;;;60;N;;;;; +10E6F;RUMI NUMBER SEVENTY;No;0;AN;;;;70;N;;;;; +10E70;RUMI NUMBER EIGHTY;No;0;AN;;;;80;N;;;;; +10E71;RUMI NUMBER NINETY;No;0;AN;;;;90;N;;;;; +10E72;RUMI NUMBER ONE HUNDRED;No;0;AN;;;;100;N;;;;; +10E73;RUMI NUMBER TWO HUNDRED;No;0;AN;;;;200;N;;;;; +10E74;RUMI NUMBER THREE HUNDRED;No;0;AN;;;;300;N;;;;; +10E75;RUMI NUMBER FOUR HUNDRED;No;0;AN;;;;400;N;;;;; +10E76;RUMI NUMBER FIVE HUNDRED;No;0;AN;;;;500;N;;;;; +10E77;RUMI NUMBER SIX HUNDRED;No;0;AN;;;;600;N;;;;; +10E78;RUMI NUMBER SEVEN HUNDRED;No;0;AN;;;;700;N;;;;; +10E79;RUMI NUMBER EIGHT HUNDRED;No;0;AN;;;;800;N;;;;; +10E7A;RUMI NUMBER NINE HUNDRED;No;0;AN;;;;900;N;;;;; +10E7B;RUMI FRACTION ONE HALF;No;0;AN;;;;1/2;N;;;;; +10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;; +10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;; +10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;; +11000;BRAHMI SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; +11001;BRAHMI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +11002;BRAHMI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +11003;BRAHMI SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; +11004;BRAHMI SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; +11005;BRAHMI LETTER A;Lo;0;L;;;;;N;;;;; +11006;BRAHMI LETTER AA;Lo;0;L;;;;;N;;;;; +11007;BRAHMI LETTER I;Lo;0;L;;;;;N;;;;; +11008;BRAHMI LETTER II;Lo;0;L;;;;;N;;;;; +11009;BRAHMI LETTER U;Lo;0;L;;;;;N;;;;; +1100A;BRAHMI LETTER UU;Lo;0;L;;;;;N;;;;; +1100B;BRAHMI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +1100C;BRAHMI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +1100D;BRAHMI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +1100E;BRAHMI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +1100F;BRAHMI LETTER E;Lo;0;L;;;;;N;;;;; +11010;BRAHMI LETTER AI;Lo;0;L;;;;;N;;;;; +11011;BRAHMI LETTER O;Lo;0;L;;;;;N;;;;; +11012;BRAHMI LETTER AU;Lo;0;L;;;;;N;;;;; +11013;BRAHMI LETTER KA;Lo;0;L;;;;;N;;;;; +11014;BRAHMI LETTER KHA;Lo;0;L;;;;;N;;;;; +11015;BRAHMI LETTER GA;Lo;0;L;;;;;N;;;;; +11016;BRAHMI LETTER GHA;Lo;0;L;;;;;N;;;;; +11017;BRAHMI LETTER NGA;Lo;0;L;;;;;N;;;;; +11018;BRAHMI LETTER CA;Lo;0;L;;;;;N;;;;; +11019;BRAHMI LETTER CHA;Lo;0;L;;;;;N;;;;; +1101A;BRAHMI LETTER JA;Lo;0;L;;;;;N;;;;; +1101B;BRAHMI LETTER JHA;Lo;0;L;;;;;N;;;;; +1101C;BRAHMI LETTER NYA;Lo;0;L;;;;;N;;;;; +1101D;BRAHMI LETTER TTA;Lo;0;L;;;;;N;;;;; +1101E;BRAHMI LETTER TTHA;Lo;0;L;;;;;N;;;;; +1101F;BRAHMI LETTER DDA;Lo;0;L;;;;;N;;;;; +11020;BRAHMI LETTER DDHA;Lo;0;L;;;;;N;;;;; +11021;BRAHMI LETTER NNA;Lo;0;L;;;;;N;;;;; +11022;BRAHMI LETTER TA;Lo;0;L;;;;;N;;;;; +11023;BRAHMI LETTER THA;Lo;0;L;;;;;N;;;;; +11024;BRAHMI LETTER DA;Lo;0;L;;;;;N;;;;; +11025;BRAHMI LETTER DHA;Lo;0;L;;;;;N;;;;; +11026;BRAHMI LETTER NA;Lo;0;L;;;;;N;;;;; +11027;BRAHMI LETTER PA;Lo;0;L;;;;;N;;;;; +11028;BRAHMI LETTER PHA;Lo;0;L;;;;;N;;;;; +11029;BRAHMI LETTER BA;Lo;0;L;;;;;N;;;;; +1102A;BRAHMI LETTER BHA;Lo;0;L;;;;;N;;;;; +1102B;BRAHMI LETTER MA;Lo;0;L;;;;;N;;;;; +1102C;BRAHMI LETTER YA;Lo;0;L;;;;;N;;;;; +1102D;BRAHMI LETTER RA;Lo;0;L;;;;;N;;;;; +1102E;BRAHMI LETTER LA;Lo;0;L;;;;;N;;;;; +1102F;BRAHMI LETTER VA;Lo;0;L;;;;;N;;;;; +11030;BRAHMI LETTER SHA;Lo;0;L;;;;;N;;;;; +11031;BRAHMI LETTER SSA;Lo;0;L;;;;;N;;;;; +11032;BRAHMI LETTER SA;Lo;0;L;;;;;N;;;;; +11033;BRAHMI LETTER HA;Lo;0;L;;;;;N;;;;; +11034;BRAHMI LETTER LLA;Lo;0;L;;;;;N;;;;; +11035;BRAHMI LETTER OLD TAMIL LLLA;Lo;0;L;;;;;N;;;;; +11036;BRAHMI LETTER OLD TAMIL RRA;Lo;0;L;;;;;N;;;;; +11037;BRAHMI LETTER OLD TAMIL NNNA;Lo;0;L;;;;;N;;;;; +11038;BRAHMI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +11039;BRAHMI VOWEL SIGN BHATTIPROLU AA;Mn;0;NSM;;;;;N;;;;; +1103A;BRAHMI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1103B;BRAHMI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +1103C;BRAHMI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1103D;BRAHMI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +1103E;BRAHMI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +1103F;BRAHMI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +11040;BRAHMI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +11041;BRAHMI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +11042;BRAHMI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +11043;BRAHMI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +11044;BRAHMI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +11045;BRAHMI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +11046;BRAHMI VIRAMA;Mn;9;NSM;;;;;N;;;;; +11047;BRAHMI DANDA;Po;0;L;;;;;N;;;;; +11048;BRAHMI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +11049;BRAHMI PUNCTUATION DOT;Po;0;L;;;;;N;;;;; +1104A;BRAHMI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;; +1104B;BRAHMI PUNCTUATION LINE;Po;0;L;;;;;N;;;;; +1104C;BRAHMI PUNCTUATION CRESCENT BAR;Po;0;L;;;;;N;;;;; +1104D;BRAHMI PUNCTUATION LOTUS;Po;0;L;;;;;N;;;;; +11052;BRAHMI NUMBER ONE;No;0;ON;;;1;1;N;;;;; +11053;BRAHMI NUMBER TWO;No;0;ON;;;2;2;N;;;;; +11054;BRAHMI NUMBER THREE;No;0;ON;;;3;3;N;;;;; +11055;BRAHMI NUMBER FOUR;No;0;ON;;;4;4;N;;;;; +11056;BRAHMI NUMBER FIVE;No;0;ON;;;5;5;N;;;;; +11057;BRAHMI NUMBER SIX;No;0;ON;;;6;6;N;;;;; +11058;BRAHMI NUMBER SEVEN;No;0;ON;;;7;7;N;;;;; +11059;BRAHMI NUMBER EIGHT;No;0;ON;;;8;8;N;;;;; +1105A;BRAHMI NUMBER NINE;No;0;ON;;;9;9;N;;;;; +1105B;BRAHMI NUMBER TEN;No;0;ON;;;;10;N;;;;; +1105C;BRAHMI NUMBER TWENTY;No;0;ON;;;;20;N;;;;; +1105D;BRAHMI NUMBER THIRTY;No;0;ON;;;;30;N;;;;; +1105E;BRAHMI NUMBER FORTY;No;0;ON;;;;40;N;;;;; +1105F;BRAHMI NUMBER FIFTY;No;0;ON;;;;50;N;;;;; +11060;BRAHMI NUMBER SIXTY;No;0;ON;;;;60;N;;;;; +11061;BRAHMI NUMBER SEVENTY;No;0;ON;;;;70;N;;;;; +11062;BRAHMI NUMBER EIGHTY;No;0;ON;;;;80;N;;;;; +11063;BRAHMI NUMBER NINETY;No;0;ON;;;;90;N;;;;; +11064;BRAHMI NUMBER ONE HUNDRED;No;0;ON;;;;100;N;;;;; +11065;BRAHMI NUMBER ONE THOUSAND;No;0;ON;;;;1000;N;;;;; +11066;BRAHMI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11067;BRAHMI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11068;BRAHMI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11069;BRAHMI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1106A;BRAHMI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1106B;BRAHMI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1106C;BRAHMI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +11082;KAITHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +11083;KAITHI LETTER A;Lo;0;L;;;;;N;;;;; +11084;KAITHI LETTER AA;Lo;0;L;;;;;N;;;;; +11085;KAITHI LETTER I;Lo;0;L;;;;;N;;;;; +11086;KAITHI LETTER II;Lo;0;L;;;;;N;;;;; +11087;KAITHI LETTER U;Lo;0;L;;;;;N;;;;; +11088;KAITHI LETTER UU;Lo;0;L;;;;;N;;;;; +11089;KAITHI LETTER E;Lo;0;L;;;;;N;;;;; +1108A;KAITHI LETTER AI;Lo;0;L;;;;;N;;;;; +1108B;KAITHI LETTER O;Lo;0;L;;;;;N;;;;; +1108C;KAITHI LETTER AU;Lo;0;L;;;;;N;;;;; +1108D;KAITHI LETTER KA;Lo;0;L;;;;;N;;;;; +1108E;KAITHI LETTER KHA;Lo;0;L;;;;;N;;;;; +1108F;KAITHI LETTER GA;Lo;0;L;;;;;N;;;;; +11090;KAITHI LETTER GHA;Lo;0;L;;;;;N;;;;; +11091;KAITHI LETTER NGA;Lo;0;L;;;;;N;;;;; +11092;KAITHI LETTER CA;Lo;0;L;;;;;N;;;;; +11093;KAITHI LETTER CHA;Lo;0;L;;;;;N;;;;; +11094;KAITHI LETTER JA;Lo;0;L;;;;;N;;;;; +11095;KAITHI LETTER JHA;Lo;0;L;;;;;N;;;;; +11096;KAITHI LETTER NYA;Lo;0;L;;;;;N;;;;; +11097;KAITHI LETTER TTA;Lo;0;L;;;;;N;;;;; +11098;KAITHI LETTER TTHA;Lo;0;L;;;;;N;;;;; +11099;KAITHI LETTER DDA;Lo;0;L;;;;;N;;;;; +1109A;KAITHI LETTER DDDHA;Lo;0;L;11099 110BA;;;;N;;;;; +1109B;KAITHI LETTER DDHA;Lo;0;L;;;;;N;;;;; +1109C;KAITHI LETTER RHA;Lo;0;L;1109B 110BA;;;;N;;;;; +1109D;KAITHI LETTER NNA;Lo;0;L;;;;;N;;;;; +1109E;KAITHI LETTER TA;Lo;0;L;;;;;N;;;;; +1109F;KAITHI LETTER THA;Lo;0;L;;;;;N;;;;; +110A0;KAITHI LETTER DA;Lo;0;L;;;;;N;;;;; +110A1;KAITHI LETTER DHA;Lo;0;L;;;;;N;;;;; +110A2;KAITHI LETTER NA;Lo;0;L;;;;;N;;;;; +110A3;KAITHI LETTER PA;Lo;0;L;;;;;N;;;;; +110A4;KAITHI LETTER PHA;Lo;0;L;;;;;N;;;;; +110A5;KAITHI LETTER BA;Lo;0;L;;;;;N;;;;; +110A6;KAITHI LETTER BHA;Lo;0;L;;;;;N;;;;; +110A7;KAITHI LETTER MA;Lo;0;L;;;;;N;;;;; +110A8;KAITHI LETTER YA;Lo;0;L;;;;;N;;;;; +110A9;KAITHI LETTER RA;Lo;0;L;;;;;N;;;;; +110AA;KAITHI LETTER LA;Lo;0;L;;;;;N;;;;; +110AB;KAITHI LETTER VA;Lo;0;L;110A5 110BA;;;;N;;;;; +110AC;KAITHI LETTER SHA;Lo;0;L;;;;;N;;;;; +110AD;KAITHI LETTER SSA;Lo;0;L;;;;;N;;;;; +110AE;KAITHI LETTER SA;Lo;0;L;;;;;N;;;;; +110AF;KAITHI LETTER HA;Lo;0;L;;;;;N;;;;; +110B0;KAITHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +110B1;KAITHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +110B2;KAITHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +110B3;KAITHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +110B4;KAITHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +110B5;KAITHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +110B6;KAITHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +110B7;KAITHI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +110B8;KAITHI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +110B9;KAITHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +110BA;KAITHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +110BB;KAITHI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +110BC;KAITHI ENUMERATION SIGN;Po;0;L;;;;;N;;;;; +110BD;KAITHI NUMBER SIGN;Cf;0;L;;;;;N;;;;; +110BE;KAITHI SECTION MARK;Po;0;L;;;;;N;;;;; +110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; +110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;; +110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; +12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; +12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; +12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; +12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; +12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; +12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; +12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; +12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; +1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; +1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; +1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; +1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; +12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; +12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; +12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; +12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; +12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; +12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; +1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; +1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; +1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; +1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; +12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; +12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; +12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; +12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; +12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; +12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; +12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; +12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; +12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; +12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; +1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; +1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; +1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; +1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; +1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; +1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; +12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; +12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; +12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; +12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; +12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; +12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; +12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; +12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; +1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; +1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; +1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; +12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; +12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; +12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; +12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; +12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; +12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; +12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; +12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; +12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; +12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; +1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; +1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; +1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; +1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; +1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; +12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; +12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; +12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; +12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; +12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; +12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; +12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; +12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; +12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; +12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; +1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; +1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; +1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; +1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; +1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; +12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; +12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; +12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; +12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; +12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; +12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; +12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; +12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; +12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; +12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; +1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; +1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; +1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; +1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; +1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; +12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; +12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; +12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; +12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; +12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; +12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; +12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; +12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; +1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; +1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; +1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; +1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; +1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; +12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; +12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; +12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; +12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; +12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; +12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; +12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; +12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; +12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; +1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; +1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; +1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; +1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; +1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; +12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; +12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; +12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; +12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; +12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; +12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; +12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; +12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; +12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; +12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; +1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; +1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; +1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; +1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; +1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; +120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; +120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; +120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; +120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; +120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; +120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; +120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; +120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; +120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; +120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; +120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; +120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; +120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; +120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; +120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; +120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; +120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; +120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; +120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; +120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; +120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; +120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; +120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; +120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; +120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; +120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; +120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; +120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; +120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; +120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; +120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; +120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; +120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; +120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; +120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; +120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; +120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; +120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; +120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; +120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; +120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; +120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; +120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; +120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; +120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; +120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; +120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; +120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; +120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; +120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; +120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; +120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; +120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; +120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; +120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; +120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; +120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; +120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; +120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; +120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; +120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; +120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; +120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; +120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; +120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; +120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; +120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; +120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; +120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; +120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; +120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; +120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; +120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; +120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; +12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; +12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; +12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; +12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; +12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; +12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; +12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; +12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; +12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; +12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; +1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; +1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; +1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; +1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; +12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; +12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; +12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; +12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; +12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; +12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; +12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; +12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; +1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; +1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; +1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; +1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; +12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; +12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; +12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; +12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; +12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; +12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; +12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; +12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; +12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; +12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; +1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; +1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; +1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; +1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; +1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; +1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; +12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; +12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; +12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; +12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; +12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; +12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; +12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; +12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; +1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; +1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; +1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; +1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; +1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; +12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; +12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; +12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; +12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; +12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; +12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; +12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; +12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; +12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; +12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; +1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; +1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; +1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; +1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; +1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; +12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; +12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; +12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; +12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; +12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; +12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; +12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; +12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; +12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; +12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; +1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; +1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; +1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; +1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; +1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; +1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; +12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; +12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; +12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; +12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; +12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; +12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; +12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; +12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; +12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; +1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; +1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; +1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; +1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; +1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; +12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; +12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; +12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; +12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; +12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; +12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; +12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; +12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; +12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; +12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; +1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; +1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; +1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; +1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; +1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; +1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; +12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; +12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; +12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; +12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; +12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; +12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; +12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; +12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; +12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; +12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; +1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; +1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; +1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; +1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; +1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; +12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; +12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; +12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; +12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; +12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; +12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; +12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; +12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; +12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; +1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; +1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; +1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; +1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; +121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; +121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; +121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; +121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; +121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; +121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; +121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; +121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; +121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; +121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; +121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; +121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; +121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; +121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; +121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; +121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; +121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; +121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; +121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; +121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; +121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; +121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; +121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; +121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; +121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; +121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; +121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; +121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; +121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; +121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; +121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; +121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; +121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; +121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; +121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; +121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; +121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; +121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; +121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; +121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; +121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; +121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; +121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; +121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; +121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; +121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; +121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; +121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; +121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; +121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; +121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; +121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; +121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; +121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; +121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; +121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; +121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; +121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; +121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; +121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; +121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; +121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; +121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; +121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; +121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; +121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; +121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; +121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; +121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; +121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; +121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; +121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; +121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; +121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; +121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; +121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; +121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; +121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; +121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; +121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; +121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; +121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; +12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; +12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; +12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; +12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; +12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; +12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; +12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; +1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; +1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; +1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; +1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; +12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; +12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; +12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; +12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; +12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; +12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; +12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; +12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; +12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; +12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; +1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; +1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; +1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; +1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; +1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; +1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; +12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; +12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; +12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; +12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; +12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; +12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; +12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; +1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; +1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; +1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; +1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; +12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; +12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; +12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; +12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; +12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; +12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; +12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; +12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; +12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; +1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; +1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; +1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; +1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; +1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; +1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; +12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; +12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; +12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; +12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; +12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; +12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; +12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; +12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; +12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; +12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; +1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; +1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; +1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; +1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; +1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; +1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; +12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; +12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; +12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; +12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; +1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; +1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; +12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; +12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; +12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; +12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; +12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; +12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; +12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; +12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; +1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; +1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; +1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; +1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; +12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; +12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; +12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; +12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; +12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; +12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; +1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; +1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; +1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; +1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; +1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; +1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; +12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; +12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; +12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; +12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; +12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; +12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; +12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; +12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; +12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; +12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; +1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; +1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; +1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; +1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; +1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; +1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; +12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; +12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; +12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; +12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; +12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; +12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; +12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; +12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; +12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; +12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; +1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; +1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; +1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; +1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; +1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; +1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; +122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; +122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; +122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; +122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; +122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; +122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; +122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; +122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; +122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; +122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; +122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; +122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; +122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; +122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; +122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; +122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; +122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; +122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; +122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; +122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; +122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; +122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; +122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; +122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; +122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; +122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; +122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; +122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; +122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; +122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; +122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; +122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; +122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; +122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; +122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; +122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; +122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; +122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; +122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; +122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; +122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; +122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; +122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; +122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; +122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; +122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; +122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; +122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; +122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; +122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; +122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; +122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; +122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; +122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; +122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; +122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; +122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; +122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; +122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; +122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; +122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; +122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; +122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; +122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; +122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; +122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; +122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; +122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; +122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; +122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; +122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; +122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; +122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; +122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; +122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; +122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; +122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; +122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; +122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; +122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; +122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; +122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; +122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; +122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; +122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; +122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; +122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; +122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; +122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; +122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; +122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; +122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; +12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; +12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; +12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; +12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; +12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; +12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; +12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; +12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; +12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; +1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; +1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; +12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; +12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; +12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; +12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; +12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; +12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; +12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; +12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; +12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; +1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; +1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; +1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; +1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; +1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; +12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; +12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; +12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; +12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; +12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; +12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; +12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; +12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; +12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; +1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; +1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; +1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; +1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; +12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; +12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; +12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; +12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; +12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; +12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; +12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; +12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; +12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; +1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; +1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; +1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; +1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; +12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; +12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; +12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; +12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; +12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; +12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; +12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; +12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; +12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; +12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; +1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; +1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; +1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; +1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; +1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; +1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; +12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; +12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; +12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; +12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; +12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; +12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; +12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; +12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; +12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; +1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; +1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; +1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; +1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; +1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; +12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; +12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; +12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; +12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; +12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; +12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; +12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; +12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; +12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; +12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; +1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; +1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; +1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; +1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; +1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; +12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; +12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; +12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; +12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; +12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; +12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; +12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; +12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; +12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; +12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; +1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; +1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; +1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; +1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; +1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; +1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; +12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; +12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; +12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; +12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; +12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; +12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; +12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; +12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; +12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; +12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; +1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; +1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; +1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; +1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; +1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; +1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; +12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; +12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; +12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; +12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; +12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; +12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; +12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; +12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; +12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; +1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; +1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; +1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; +1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; +1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; +1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; +12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; +12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;; +12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;; +12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; +12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; +12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; +12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; +12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; +1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; +1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; +1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; +1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; +1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; +1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; +12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; +12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; +12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; +12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; +12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; +12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; +12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; +12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; +12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; +12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; +1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; +1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; +1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; +1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; +1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; +1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; +12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; +12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; +12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; +12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; +12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; +12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; +12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;; +12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;; +12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; +12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; +1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; +1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; +1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; +1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; +1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; +1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; +12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; +12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; +12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; +12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; +12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; +12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; +13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; +13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; +13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; +13003;EGYPTIAN HIEROGLYPH A004;Lo;0;L;;;;;N;;;;; +13004;EGYPTIAN HIEROGLYPH A005;Lo;0;L;;;;;N;;;;; +13005;EGYPTIAN HIEROGLYPH A005A;Lo;0;L;;;;;N;;;;; +13006;EGYPTIAN HIEROGLYPH A006;Lo;0;L;;;;;N;;;;; +13007;EGYPTIAN HIEROGLYPH A006A;Lo;0;L;;;;;N;;;;; +13008;EGYPTIAN HIEROGLYPH A006B;Lo;0;L;;;;;N;;;;; +13009;EGYPTIAN HIEROGLYPH A007;Lo;0;L;;;;;N;;;;; +1300A;EGYPTIAN HIEROGLYPH A008;Lo;0;L;;;;;N;;;;; +1300B;EGYPTIAN HIEROGLYPH A009;Lo;0;L;;;;;N;;;;; +1300C;EGYPTIAN HIEROGLYPH A010;Lo;0;L;;;;;N;;;;; +1300D;EGYPTIAN HIEROGLYPH A011;Lo;0;L;;;;;N;;;;; +1300E;EGYPTIAN HIEROGLYPH A012;Lo;0;L;;;;;N;;;;; +1300F;EGYPTIAN HIEROGLYPH A013;Lo;0;L;;;;;N;;;;; +13010;EGYPTIAN HIEROGLYPH A014;Lo;0;L;;;;;N;;;;; +13011;EGYPTIAN HIEROGLYPH A014A;Lo;0;L;;;;;N;;;;; +13012;EGYPTIAN HIEROGLYPH A015;Lo;0;L;;;;;N;;;;; +13013;EGYPTIAN HIEROGLYPH A016;Lo;0;L;;;;;N;;;;; +13014;EGYPTIAN HIEROGLYPH A017;Lo;0;L;;;;;N;;;;; +13015;EGYPTIAN HIEROGLYPH A017A;Lo;0;L;;;;;N;;;;; +13016;EGYPTIAN HIEROGLYPH A018;Lo;0;L;;;;;N;;;;; +13017;EGYPTIAN HIEROGLYPH A019;Lo;0;L;;;;;N;;;;; +13018;EGYPTIAN HIEROGLYPH A020;Lo;0;L;;;;;N;;;;; +13019;EGYPTIAN HIEROGLYPH A021;Lo;0;L;;;;;N;;;;; +1301A;EGYPTIAN HIEROGLYPH A022;Lo;0;L;;;;;N;;;;; +1301B;EGYPTIAN HIEROGLYPH A023;Lo;0;L;;;;;N;;;;; +1301C;EGYPTIAN HIEROGLYPH A024;Lo;0;L;;;;;N;;;;; +1301D;EGYPTIAN HIEROGLYPH A025;Lo;0;L;;;;;N;;;;; +1301E;EGYPTIAN HIEROGLYPH A026;Lo;0;L;;;;;N;;;;; +1301F;EGYPTIAN HIEROGLYPH A027;Lo;0;L;;;;;N;;;;; +13020;EGYPTIAN HIEROGLYPH A028;Lo;0;L;;;;;N;;;;; +13021;EGYPTIAN HIEROGLYPH A029;Lo;0;L;;;;;N;;;;; +13022;EGYPTIAN HIEROGLYPH A030;Lo;0;L;;;;;N;;;;; +13023;EGYPTIAN HIEROGLYPH A031;Lo;0;L;;;;;N;;;;; +13024;EGYPTIAN HIEROGLYPH A032;Lo;0;L;;;;;N;;;;; +13025;EGYPTIAN HIEROGLYPH A032A;Lo;0;L;;;;;N;;;;; +13026;EGYPTIAN HIEROGLYPH A033;Lo;0;L;;;;;N;;;;; +13027;EGYPTIAN HIEROGLYPH A034;Lo;0;L;;;;;N;;;;; +13028;EGYPTIAN HIEROGLYPH A035;Lo;0;L;;;;;N;;;;; +13029;EGYPTIAN HIEROGLYPH A036;Lo;0;L;;;;;N;;;;; +1302A;EGYPTIAN HIEROGLYPH A037;Lo;0;L;;;;;N;;;;; +1302B;EGYPTIAN HIEROGLYPH A038;Lo;0;L;;;;;N;;;;; +1302C;EGYPTIAN HIEROGLYPH A039;Lo;0;L;;;;;N;;;;; +1302D;EGYPTIAN HIEROGLYPH A040;Lo;0;L;;;;;N;;;;; +1302E;EGYPTIAN HIEROGLYPH A040A;Lo;0;L;;;;;N;;;;; +1302F;EGYPTIAN HIEROGLYPH A041;Lo;0;L;;;;;N;;;;; +13030;EGYPTIAN HIEROGLYPH A042;Lo;0;L;;;;;N;;;;; +13031;EGYPTIAN HIEROGLYPH A042A;Lo;0;L;;;;;N;;;;; +13032;EGYPTIAN HIEROGLYPH A043;Lo;0;L;;;;;N;;;;; +13033;EGYPTIAN HIEROGLYPH A043A;Lo;0;L;;;;;N;;;;; +13034;EGYPTIAN HIEROGLYPH A044;Lo;0;L;;;;;N;;;;; +13035;EGYPTIAN HIEROGLYPH A045;Lo;0;L;;;;;N;;;;; +13036;EGYPTIAN HIEROGLYPH A045A;Lo;0;L;;;;;N;;;;; +13037;EGYPTIAN HIEROGLYPH A046;Lo;0;L;;;;;N;;;;; +13038;EGYPTIAN HIEROGLYPH A047;Lo;0;L;;;;;N;;;;; +13039;EGYPTIAN HIEROGLYPH A048;Lo;0;L;;;;;N;;;;; +1303A;EGYPTIAN HIEROGLYPH A049;Lo;0;L;;;;;N;;;;; +1303B;EGYPTIAN HIEROGLYPH A050;Lo;0;L;;;;;N;;;;; +1303C;EGYPTIAN HIEROGLYPH A051;Lo;0;L;;;;;N;;;;; +1303D;EGYPTIAN HIEROGLYPH A052;Lo;0;L;;;;;N;;;;; +1303E;EGYPTIAN HIEROGLYPH A053;Lo;0;L;;;;;N;;;;; +1303F;EGYPTIAN HIEROGLYPH A054;Lo;0;L;;;;;N;;;;; +13040;EGYPTIAN HIEROGLYPH A055;Lo;0;L;;;;;N;;;;; +13041;EGYPTIAN HIEROGLYPH A056;Lo;0;L;;;;;N;;;;; +13042;EGYPTIAN HIEROGLYPH A057;Lo;0;L;;;;;N;;;;; +13043;EGYPTIAN HIEROGLYPH A058;Lo;0;L;;;;;N;;;;; +13044;EGYPTIAN HIEROGLYPH A059;Lo;0;L;;;;;N;;;;; +13045;EGYPTIAN HIEROGLYPH A060;Lo;0;L;;;;;N;;;;; +13046;EGYPTIAN HIEROGLYPH A061;Lo;0;L;;;;;N;;;;; +13047;EGYPTIAN HIEROGLYPH A062;Lo;0;L;;;;;N;;;;; +13048;EGYPTIAN HIEROGLYPH A063;Lo;0;L;;;;;N;;;;; +13049;EGYPTIAN HIEROGLYPH A064;Lo;0;L;;;;;N;;;;; +1304A;EGYPTIAN HIEROGLYPH A065;Lo;0;L;;;;;N;;;;; +1304B;EGYPTIAN HIEROGLYPH A066;Lo;0;L;;;;;N;;;;; +1304C;EGYPTIAN HIEROGLYPH A067;Lo;0;L;;;;;N;;;;; +1304D;EGYPTIAN HIEROGLYPH A068;Lo;0;L;;;;;N;;;;; +1304E;EGYPTIAN HIEROGLYPH A069;Lo;0;L;;;;;N;;;;; +1304F;EGYPTIAN HIEROGLYPH A070;Lo;0;L;;;;;N;;;;; +13050;EGYPTIAN HIEROGLYPH B001;Lo;0;L;;;;;N;;;;; +13051;EGYPTIAN HIEROGLYPH B002;Lo;0;L;;;;;N;;;;; +13052;EGYPTIAN HIEROGLYPH B003;Lo;0;L;;;;;N;;;;; +13053;EGYPTIAN HIEROGLYPH B004;Lo;0;L;;;;;N;;;;; +13054;EGYPTIAN HIEROGLYPH B005;Lo;0;L;;;;;N;;;;; +13055;EGYPTIAN HIEROGLYPH B005A;Lo;0;L;;;;;N;;;;; +13056;EGYPTIAN HIEROGLYPH B006;Lo;0;L;;;;;N;;;;; +13057;EGYPTIAN HIEROGLYPH B007;Lo;0;L;;;;;N;;;;; +13058;EGYPTIAN HIEROGLYPH B008;Lo;0;L;;;;;N;;;;; +13059;EGYPTIAN HIEROGLYPH B009;Lo;0;L;;;;;N;;;;; +1305A;EGYPTIAN HIEROGLYPH C001;Lo;0;L;;;;;N;;;;; +1305B;EGYPTIAN HIEROGLYPH C002;Lo;0;L;;;;;N;;;;; +1305C;EGYPTIAN HIEROGLYPH C002A;Lo;0;L;;;;;N;;;;; +1305D;EGYPTIAN HIEROGLYPH C002B;Lo;0;L;;;;;N;;;;; +1305E;EGYPTIAN HIEROGLYPH C002C;Lo;0;L;;;;;N;;;;; +1305F;EGYPTIAN HIEROGLYPH C003;Lo;0;L;;;;;N;;;;; +13060;EGYPTIAN HIEROGLYPH C004;Lo;0;L;;;;;N;;;;; +13061;EGYPTIAN HIEROGLYPH C005;Lo;0;L;;;;;N;;;;; +13062;EGYPTIAN HIEROGLYPH C006;Lo;0;L;;;;;N;;;;; +13063;EGYPTIAN HIEROGLYPH C007;Lo;0;L;;;;;N;;;;; +13064;EGYPTIAN HIEROGLYPH C008;Lo;0;L;;;;;N;;;;; +13065;EGYPTIAN HIEROGLYPH C009;Lo;0;L;;;;;N;;;;; +13066;EGYPTIAN HIEROGLYPH C010;Lo;0;L;;;;;N;;;;; +13067;EGYPTIAN HIEROGLYPH C010A;Lo;0;L;;;;;N;;;;; +13068;EGYPTIAN HIEROGLYPH C011;Lo;0;L;;;;;N;;;;; +13069;EGYPTIAN HIEROGLYPH C012;Lo;0;L;;;;;N;;;;; +1306A;EGYPTIAN HIEROGLYPH C013;Lo;0;L;;;;;N;;;;; +1306B;EGYPTIAN HIEROGLYPH C014;Lo;0;L;;;;;N;;;;; +1306C;EGYPTIAN HIEROGLYPH C015;Lo;0;L;;;;;N;;;;; +1306D;EGYPTIAN HIEROGLYPH C016;Lo;0;L;;;;;N;;;;; +1306E;EGYPTIAN HIEROGLYPH C017;Lo;0;L;;;;;N;;;;; +1306F;EGYPTIAN HIEROGLYPH C018;Lo;0;L;;;;;N;;;;; +13070;EGYPTIAN HIEROGLYPH C019;Lo;0;L;;;;;N;;;;; +13071;EGYPTIAN HIEROGLYPH C020;Lo;0;L;;;;;N;;;;; +13072;EGYPTIAN HIEROGLYPH C021;Lo;0;L;;;;;N;;;;; +13073;EGYPTIAN HIEROGLYPH C022;Lo;0;L;;;;;N;;;;; +13074;EGYPTIAN HIEROGLYPH C023;Lo;0;L;;;;;N;;;;; +13075;EGYPTIAN HIEROGLYPH C024;Lo;0;L;;;;;N;;;;; +13076;EGYPTIAN HIEROGLYPH D001;Lo;0;L;;;;;N;;;;; +13077;EGYPTIAN HIEROGLYPH D002;Lo;0;L;;;;;N;;;;; +13078;EGYPTIAN HIEROGLYPH D003;Lo;0;L;;;;;N;;;;; +13079;EGYPTIAN HIEROGLYPH D004;Lo;0;L;;;;;N;;;;; +1307A;EGYPTIAN HIEROGLYPH D005;Lo;0;L;;;;;N;;;;; +1307B;EGYPTIAN HIEROGLYPH D006;Lo;0;L;;;;;N;;;;; +1307C;EGYPTIAN HIEROGLYPH D007;Lo;0;L;;;;;N;;;;; +1307D;EGYPTIAN HIEROGLYPH D008;Lo;0;L;;;;;N;;;;; +1307E;EGYPTIAN HIEROGLYPH D008A;Lo;0;L;;;;;N;;;;; +1307F;EGYPTIAN HIEROGLYPH D009;Lo;0;L;;;;;N;;;;; +13080;EGYPTIAN HIEROGLYPH D010;Lo;0;L;;;;;N;;;;; +13081;EGYPTIAN HIEROGLYPH D011;Lo;0;L;;;;;N;;;;; +13082;EGYPTIAN HIEROGLYPH D012;Lo;0;L;;;;;N;;;;; +13083;EGYPTIAN HIEROGLYPH D013;Lo;0;L;;;;;N;;;;; +13084;EGYPTIAN HIEROGLYPH D014;Lo;0;L;;;;;N;;;;; +13085;EGYPTIAN HIEROGLYPH D015;Lo;0;L;;;;;N;;;;; +13086;EGYPTIAN HIEROGLYPH D016;Lo;0;L;;;;;N;;;;; +13087;EGYPTIAN HIEROGLYPH D017;Lo;0;L;;;;;N;;;;; +13088;EGYPTIAN HIEROGLYPH D018;Lo;0;L;;;;;N;;;;; +13089;EGYPTIAN HIEROGLYPH D019;Lo;0;L;;;;;N;;;;; +1308A;EGYPTIAN HIEROGLYPH D020;Lo;0;L;;;;;N;;;;; +1308B;EGYPTIAN HIEROGLYPH D021;Lo;0;L;;;;;N;;;;; +1308C;EGYPTIAN HIEROGLYPH D022;Lo;0;L;;;;;N;;;;; +1308D;EGYPTIAN HIEROGLYPH D023;Lo;0;L;;;;;N;;;;; +1308E;EGYPTIAN HIEROGLYPH D024;Lo;0;L;;;;;N;;;;; +1308F;EGYPTIAN HIEROGLYPH D025;Lo;0;L;;;;;N;;;;; +13090;EGYPTIAN HIEROGLYPH D026;Lo;0;L;;;;;N;;;;; +13091;EGYPTIAN HIEROGLYPH D027;Lo;0;L;;;;;N;;;;; +13092;EGYPTIAN HIEROGLYPH D027A;Lo;0;L;;;;;N;;;;; +13093;EGYPTIAN HIEROGLYPH D028;Lo;0;L;;;;;N;;;;; +13094;EGYPTIAN HIEROGLYPH D029;Lo;0;L;;;;;N;;;;; +13095;EGYPTIAN HIEROGLYPH D030;Lo;0;L;;;;;N;;;;; +13096;EGYPTIAN HIEROGLYPH D031;Lo;0;L;;;;;N;;;;; +13097;EGYPTIAN HIEROGLYPH D031A;Lo;0;L;;;;;N;;;;; +13098;EGYPTIAN HIEROGLYPH D032;Lo;0;L;;;;;N;;;;; +13099;EGYPTIAN HIEROGLYPH D033;Lo;0;L;;;;;N;;;;; +1309A;EGYPTIAN HIEROGLYPH D034;Lo;0;L;;;;;N;;;;; +1309B;EGYPTIAN HIEROGLYPH D034A;Lo;0;L;;;;;N;;;;; +1309C;EGYPTIAN HIEROGLYPH D035;Lo;0;L;;;;;N;;;;; +1309D;EGYPTIAN HIEROGLYPH D036;Lo;0;L;;;;;N;;;;; +1309E;EGYPTIAN HIEROGLYPH D037;Lo;0;L;;;;;N;;;;; +1309F;EGYPTIAN HIEROGLYPH D038;Lo;0;L;;;;;N;;;;; +130A0;EGYPTIAN HIEROGLYPH D039;Lo;0;L;;;;;N;;;;; +130A1;EGYPTIAN HIEROGLYPH D040;Lo;0;L;;;;;N;;;;; +130A2;EGYPTIAN HIEROGLYPH D041;Lo;0;L;;;;;N;;;;; +130A3;EGYPTIAN HIEROGLYPH D042;Lo;0;L;;;;;N;;;;; +130A4;EGYPTIAN HIEROGLYPH D043;Lo;0;L;;;;;N;;;;; +130A5;EGYPTIAN HIEROGLYPH D044;Lo;0;L;;;;;N;;;;; +130A6;EGYPTIAN HIEROGLYPH D045;Lo;0;L;;;;;N;;;;; +130A7;EGYPTIAN HIEROGLYPH D046;Lo;0;L;;;;;N;;;;; +130A8;EGYPTIAN HIEROGLYPH D046A;Lo;0;L;;;;;N;;;;; +130A9;EGYPTIAN HIEROGLYPH D047;Lo;0;L;;;;;N;;;;; +130AA;EGYPTIAN HIEROGLYPH D048;Lo;0;L;;;;;N;;;;; +130AB;EGYPTIAN HIEROGLYPH D048A;Lo;0;L;;;;;N;;;;; +130AC;EGYPTIAN HIEROGLYPH D049;Lo;0;L;;;;;N;;;;; +130AD;EGYPTIAN HIEROGLYPH D050;Lo;0;L;;;;;N;;;;; +130AE;EGYPTIAN HIEROGLYPH D050A;Lo;0;L;;;;;N;;;;; +130AF;EGYPTIAN HIEROGLYPH D050B;Lo;0;L;;;;;N;;;;; +130B0;EGYPTIAN HIEROGLYPH D050C;Lo;0;L;;;;;N;;;;; +130B1;EGYPTIAN HIEROGLYPH D050D;Lo;0;L;;;;;N;;;;; +130B2;EGYPTIAN HIEROGLYPH D050E;Lo;0;L;;;;;N;;;;; +130B3;EGYPTIAN HIEROGLYPH D050F;Lo;0;L;;;;;N;;;;; +130B4;EGYPTIAN HIEROGLYPH D050G;Lo;0;L;;;;;N;;;;; +130B5;EGYPTIAN HIEROGLYPH D050H;Lo;0;L;;;;;N;;;;; +130B6;EGYPTIAN HIEROGLYPH D050I;Lo;0;L;;;;;N;;;;; +130B7;EGYPTIAN HIEROGLYPH D051;Lo;0;L;;;;;N;;;;; +130B8;EGYPTIAN HIEROGLYPH D052;Lo;0;L;;;;;N;;;;; +130B9;EGYPTIAN HIEROGLYPH D052A;Lo;0;L;;;;;N;;;;; +130BA;EGYPTIAN HIEROGLYPH D053;Lo;0;L;;;;;N;;;;; +130BB;EGYPTIAN HIEROGLYPH D054;Lo;0;L;;;;;N;;;;; +130BC;EGYPTIAN HIEROGLYPH D054A;Lo;0;L;;;;;N;;;;; +130BD;EGYPTIAN HIEROGLYPH D055;Lo;0;L;;;;;N;;;;; +130BE;EGYPTIAN HIEROGLYPH D056;Lo;0;L;;;;;N;;;;; +130BF;EGYPTIAN HIEROGLYPH D057;Lo;0;L;;;;;N;;;;; +130C0;EGYPTIAN HIEROGLYPH D058;Lo;0;L;;;;;N;;;;; +130C1;EGYPTIAN HIEROGLYPH D059;Lo;0;L;;;;;N;;;;; +130C2;EGYPTIAN HIEROGLYPH D060;Lo;0;L;;;;;N;;;;; +130C3;EGYPTIAN HIEROGLYPH D061;Lo;0;L;;;;;N;;;;; +130C4;EGYPTIAN HIEROGLYPH D062;Lo;0;L;;;;;N;;;;; +130C5;EGYPTIAN HIEROGLYPH D063;Lo;0;L;;;;;N;;;;; +130C6;EGYPTIAN HIEROGLYPH D064;Lo;0;L;;;;;N;;;;; +130C7;EGYPTIAN HIEROGLYPH D065;Lo;0;L;;;;;N;;;;; +130C8;EGYPTIAN HIEROGLYPH D066;Lo;0;L;;;;;N;;;;; +130C9;EGYPTIAN HIEROGLYPH D067;Lo;0;L;;;;;N;;;;; +130CA;EGYPTIAN HIEROGLYPH D067A;Lo;0;L;;;;;N;;;;; +130CB;EGYPTIAN HIEROGLYPH D067B;Lo;0;L;;;;;N;;;;; +130CC;EGYPTIAN HIEROGLYPH D067C;Lo;0;L;;;;;N;;;;; +130CD;EGYPTIAN HIEROGLYPH D067D;Lo;0;L;;;;;N;;;;; +130CE;EGYPTIAN HIEROGLYPH D067E;Lo;0;L;;;;;N;;;;; +130CF;EGYPTIAN HIEROGLYPH D067F;Lo;0;L;;;;;N;;;;; +130D0;EGYPTIAN HIEROGLYPH D067G;Lo;0;L;;;;;N;;;;; +130D1;EGYPTIAN HIEROGLYPH D067H;Lo;0;L;;;;;N;;;;; +130D2;EGYPTIAN HIEROGLYPH E001;Lo;0;L;;;;;N;;;;; +130D3;EGYPTIAN HIEROGLYPH E002;Lo;0;L;;;;;N;;;;; +130D4;EGYPTIAN HIEROGLYPH E003;Lo;0;L;;;;;N;;;;; +130D5;EGYPTIAN HIEROGLYPH E004;Lo;0;L;;;;;N;;;;; +130D6;EGYPTIAN HIEROGLYPH E005;Lo;0;L;;;;;N;;;;; +130D7;EGYPTIAN HIEROGLYPH E006;Lo;0;L;;;;;N;;;;; +130D8;EGYPTIAN HIEROGLYPH E007;Lo;0;L;;;;;N;;;;; +130D9;EGYPTIAN HIEROGLYPH E008;Lo;0;L;;;;;N;;;;; +130DA;EGYPTIAN HIEROGLYPH E008A;Lo;0;L;;;;;N;;;;; +130DB;EGYPTIAN HIEROGLYPH E009;Lo;0;L;;;;;N;;;;; +130DC;EGYPTIAN HIEROGLYPH E009A;Lo;0;L;;;;;N;;;;; +130DD;EGYPTIAN HIEROGLYPH E010;Lo;0;L;;;;;N;;;;; +130DE;EGYPTIAN HIEROGLYPH E011;Lo;0;L;;;;;N;;;;; +130DF;EGYPTIAN HIEROGLYPH E012;Lo;0;L;;;;;N;;;;; +130E0;EGYPTIAN HIEROGLYPH E013;Lo;0;L;;;;;N;;;;; +130E1;EGYPTIAN HIEROGLYPH E014;Lo;0;L;;;;;N;;;;; +130E2;EGYPTIAN HIEROGLYPH E015;Lo;0;L;;;;;N;;;;; +130E3;EGYPTIAN HIEROGLYPH E016;Lo;0;L;;;;;N;;;;; +130E4;EGYPTIAN HIEROGLYPH E016A;Lo;0;L;;;;;N;;;;; +130E5;EGYPTIAN HIEROGLYPH E017;Lo;0;L;;;;;N;;;;; +130E6;EGYPTIAN HIEROGLYPH E017A;Lo;0;L;;;;;N;;;;; +130E7;EGYPTIAN HIEROGLYPH E018;Lo;0;L;;;;;N;;;;; +130E8;EGYPTIAN HIEROGLYPH E019;Lo;0;L;;;;;N;;;;; +130E9;EGYPTIAN HIEROGLYPH E020;Lo;0;L;;;;;N;;;;; +130EA;EGYPTIAN HIEROGLYPH E020A;Lo;0;L;;;;;N;;;;; +130EB;EGYPTIAN HIEROGLYPH E021;Lo;0;L;;;;;N;;;;; +130EC;EGYPTIAN HIEROGLYPH E022;Lo;0;L;;;;;N;;;;; +130ED;EGYPTIAN HIEROGLYPH E023;Lo;0;L;;;;;N;;;;; +130EE;EGYPTIAN HIEROGLYPH E024;Lo;0;L;;;;;N;;;;; +130EF;EGYPTIAN HIEROGLYPH E025;Lo;0;L;;;;;N;;;;; +130F0;EGYPTIAN HIEROGLYPH E026;Lo;0;L;;;;;N;;;;; +130F1;EGYPTIAN HIEROGLYPH E027;Lo;0;L;;;;;N;;;;; +130F2;EGYPTIAN HIEROGLYPH E028;Lo;0;L;;;;;N;;;;; +130F3;EGYPTIAN HIEROGLYPH E028A;Lo;0;L;;;;;N;;;;; +130F4;EGYPTIAN HIEROGLYPH E029;Lo;0;L;;;;;N;;;;; +130F5;EGYPTIAN HIEROGLYPH E030;Lo;0;L;;;;;N;;;;; +130F6;EGYPTIAN HIEROGLYPH E031;Lo;0;L;;;;;N;;;;; +130F7;EGYPTIAN HIEROGLYPH E032;Lo;0;L;;;;;N;;;;; +130F8;EGYPTIAN HIEROGLYPH E033;Lo;0;L;;;;;N;;;;; +130F9;EGYPTIAN HIEROGLYPH E034;Lo;0;L;;;;;N;;;;; +130FA;EGYPTIAN HIEROGLYPH E034A;Lo;0;L;;;;;N;;;;; +130FB;EGYPTIAN HIEROGLYPH E036;Lo;0;L;;;;;N;;;;; +130FC;EGYPTIAN HIEROGLYPH E037;Lo;0;L;;;;;N;;;;; +130FD;EGYPTIAN HIEROGLYPH E038;Lo;0;L;;;;;N;;;;; +130FE;EGYPTIAN HIEROGLYPH F001;Lo;0;L;;;;;N;;;;; +130FF;EGYPTIAN HIEROGLYPH F001A;Lo;0;L;;;;;N;;;;; +13100;EGYPTIAN HIEROGLYPH F002;Lo;0;L;;;;;N;;;;; +13101;EGYPTIAN HIEROGLYPH F003;Lo;0;L;;;;;N;;;;; +13102;EGYPTIAN HIEROGLYPH F004;Lo;0;L;;;;;N;;;;; +13103;EGYPTIAN HIEROGLYPH F005;Lo;0;L;;;;;N;;;;; +13104;EGYPTIAN HIEROGLYPH F006;Lo;0;L;;;;;N;;;;; +13105;EGYPTIAN HIEROGLYPH F007;Lo;0;L;;;;;N;;;;; +13106;EGYPTIAN HIEROGLYPH F008;Lo;0;L;;;;;N;;;;; +13107;EGYPTIAN HIEROGLYPH F009;Lo;0;L;;;;;N;;;;; +13108;EGYPTIAN HIEROGLYPH F010;Lo;0;L;;;;;N;;;;; +13109;EGYPTIAN HIEROGLYPH F011;Lo;0;L;;;;;N;;;;; +1310A;EGYPTIAN HIEROGLYPH F012;Lo;0;L;;;;;N;;;;; +1310B;EGYPTIAN HIEROGLYPH F013;Lo;0;L;;;;;N;;;;; +1310C;EGYPTIAN HIEROGLYPH F013A;Lo;0;L;;;;;N;;;;; +1310D;EGYPTIAN HIEROGLYPH F014;Lo;0;L;;;;;N;;;;; +1310E;EGYPTIAN HIEROGLYPH F015;Lo;0;L;;;;;N;;;;; +1310F;EGYPTIAN HIEROGLYPH F016;Lo;0;L;;;;;N;;;;; +13110;EGYPTIAN HIEROGLYPH F017;Lo;0;L;;;;;N;;;;; +13111;EGYPTIAN HIEROGLYPH F018;Lo;0;L;;;;;N;;;;; +13112;EGYPTIAN HIEROGLYPH F019;Lo;0;L;;;;;N;;;;; +13113;EGYPTIAN HIEROGLYPH F020;Lo;0;L;;;;;N;;;;; +13114;EGYPTIAN HIEROGLYPH F021;Lo;0;L;;;;;N;;;;; +13115;EGYPTIAN HIEROGLYPH F021A;Lo;0;L;;;;;N;;;;; +13116;EGYPTIAN HIEROGLYPH F022;Lo;0;L;;;;;N;;;;; +13117;EGYPTIAN HIEROGLYPH F023;Lo;0;L;;;;;N;;;;; +13118;EGYPTIAN HIEROGLYPH F024;Lo;0;L;;;;;N;;;;; +13119;EGYPTIAN HIEROGLYPH F025;Lo;0;L;;;;;N;;;;; +1311A;EGYPTIAN HIEROGLYPH F026;Lo;0;L;;;;;N;;;;; +1311B;EGYPTIAN HIEROGLYPH F027;Lo;0;L;;;;;N;;;;; +1311C;EGYPTIAN HIEROGLYPH F028;Lo;0;L;;;;;N;;;;; +1311D;EGYPTIAN HIEROGLYPH F029;Lo;0;L;;;;;N;;;;; +1311E;EGYPTIAN HIEROGLYPH F030;Lo;0;L;;;;;N;;;;; +1311F;EGYPTIAN HIEROGLYPH F031;Lo;0;L;;;;;N;;;;; +13120;EGYPTIAN HIEROGLYPH F031A;Lo;0;L;;;;;N;;;;; +13121;EGYPTIAN HIEROGLYPH F032;Lo;0;L;;;;;N;;;;; +13122;EGYPTIAN HIEROGLYPH F033;Lo;0;L;;;;;N;;;;; +13123;EGYPTIAN HIEROGLYPH F034;Lo;0;L;;;;;N;;;;; +13124;EGYPTIAN HIEROGLYPH F035;Lo;0;L;;;;;N;;;;; +13125;EGYPTIAN HIEROGLYPH F036;Lo;0;L;;;;;N;;;;; +13126;EGYPTIAN HIEROGLYPH F037;Lo;0;L;;;;;N;;;;; +13127;EGYPTIAN HIEROGLYPH F037A;Lo;0;L;;;;;N;;;;; +13128;EGYPTIAN HIEROGLYPH F038;Lo;0;L;;;;;N;;;;; +13129;EGYPTIAN HIEROGLYPH F038A;Lo;0;L;;;;;N;;;;; +1312A;EGYPTIAN HIEROGLYPH F039;Lo;0;L;;;;;N;;;;; +1312B;EGYPTIAN HIEROGLYPH F040;Lo;0;L;;;;;N;;;;; +1312C;EGYPTIAN HIEROGLYPH F041;Lo;0;L;;;;;N;;;;; +1312D;EGYPTIAN HIEROGLYPH F042;Lo;0;L;;;;;N;;;;; +1312E;EGYPTIAN HIEROGLYPH F043;Lo;0;L;;;;;N;;;;; +1312F;EGYPTIAN HIEROGLYPH F044;Lo;0;L;;;;;N;;;;; +13130;EGYPTIAN HIEROGLYPH F045;Lo;0;L;;;;;N;;;;; +13131;EGYPTIAN HIEROGLYPH F045A;Lo;0;L;;;;;N;;;;; +13132;EGYPTIAN HIEROGLYPH F046;Lo;0;L;;;;;N;;;;; +13133;EGYPTIAN HIEROGLYPH F046A;Lo;0;L;;;;;N;;;;; +13134;EGYPTIAN HIEROGLYPH F047;Lo;0;L;;;;;N;;;;; +13135;EGYPTIAN HIEROGLYPH F047A;Lo;0;L;;;;;N;;;;; +13136;EGYPTIAN HIEROGLYPH F048;Lo;0;L;;;;;N;;;;; +13137;EGYPTIAN HIEROGLYPH F049;Lo;0;L;;;;;N;;;;; +13138;EGYPTIAN HIEROGLYPH F050;Lo;0;L;;;;;N;;;;; +13139;EGYPTIAN HIEROGLYPH F051;Lo;0;L;;;;;N;;;;; +1313A;EGYPTIAN HIEROGLYPH F051A;Lo;0;L;;;;;N;;;;; +1313B;EGYPTIAN HIEROGLYPH F051B;Lo;0;L;;;;;N;;;;; +1313C;EGYPTIAN HIEROGLYPH F051C;Lo;0;L;;;;;N;;;;; +1313D;EGYPTIAN HIEROGLYPH F052;Lo;0;L;;;;;N;;;;; +1313E;EGYPTIAN HIEROGLYPH F053;Lo;0;L;;;;;N;;;;; +1313F;EGYPTIAN HIEROGLYPH G001;Lo;0;L;;;;;N;;;;; +13140;EGYPTIAN HIEROGLYPH G002;Lo;0;L;;;;;N;;;;; +13141;EGYPTIAN HIEROGLYPH G003;Lo;0;L;;;;;N;;;;; +13142;EGYPTIAN HIEROGLYPH G004;Lo;0;L;;;;;N;;;;; +13143;EGYPTIAN HIEROGLYPH G005;Lo;0;L;;;;;N;;;;; +13144;EGYPTIAN HIEROGLYPH G006;Lo;0;L;;;;;N;;;;; +13145;EGYPTIAN HIEROGLYPH G006A;Lo;0;L;;;;;N;;;;; +13146;EGYPTIAN HIEROGLYPH G007;Lo;0;L;;;;;N;;;;; +13147;EGYPTIAN HIEROGLYPH G007A;Lo;0;L;;;;;N;;;;; +13148;EGYPTIAN HIEROGLYPH G007B;Lo;0;L;;;;;N;;;;; +13149;EGYPTIAN HIEROGLYPH G008;Lo;0;L;;;;;N;;;;; +1314A;EGYPTIAN HIEROGLYPH G009;Lo;0;L;;;;;N;;;;; +1314B;EGYPTIAN HIEROGLYPH G010;Lo;0;L;;;;;N;;;;; +1314C;EGYPTIAN HIEROGLYPH G011;Lo;0;L;;;;;N;;;;; +1314D;EGYPTIAN HIEROGLYPH G011A;Lo;0;L;;;;;N;;;;; +1314E;EGYPTIAN HIEROGLYPH G012;Lo;0;L;;;;;N;;;;; +1314F;EGYPTIAN HIEROGLYPH G013;Lo;0;L;;;;;N;;;;; +13150;EGYPTIAN HIEROGLYPH G014;Lo;0;L;;;;;N;;;;; +13151;EGYPTIAN HIEROGLYPH G015;Lo;0;L;;;;;N;;;;; +13152;EGYPTIAN HIEROGLYPH G016;Lo;0;L;;;;;N;;;;; +13153;EGYPTIAN HIEROGLYPH G017;Lo;0;L;;;;;N;;;;; +13154;EGYPTIAN HIEROGLYPH G018;Lo;0;L;;;;;N;;;;; +13155;EGYPTIAN HIEROGLYPH G019;Lo;0;L;;;;;N;;;;; +13156;EGYPTIAN HIEROGLYPH G020;Lo;0;L;;;;;N;;;;; +13157;EGYPTIAN HIEROGLYPH G020A;Lo;0;L;;;;;N;;;;; +13158;EGYPTIAN HIEROGLYPH G021;Lo;0;L;;;;;N;;;;; +13159;EGYPTIAN HIEROGLYPH G022;Lo;0;L;;;;;N;;;;; +1315A;EGYPTIAN HIEROGLYPH G023;Lo;0;L;;;;;N;;;;; +1315B;EGYPTIAN HIEROGLYPH G024;Lo;0;L;;;;;N;;;;; +1315C;EGYPTIAN HIEROGLYPH G025;Lo;0;L;;;;;N;;;;; +1315D;EGYPTIAN HIEROGLYPH G026;Lo;0;L;;;;;N;;;;; +1315E;EGYPTIAN HIEROGLYPH G026A;Lo;0;L;;;;;N;;;;; +1315F;EGYPTIAN HIEROGLYPH G027;Lo;0;L;;;;;N;;;;; +13160;EGYPTIAN HIEROGLYPH G028;Lo;0;L;;;;;N;;;;; +13161;EGYPTIAN HIEROGLYPH G029;Lo;0;L;;;;;N;;;;; +13162;EGYPTIAN HIEROGLYPH G030;Lo;0;L;;;;;N;;;;; +13163;EGYPTIAN HIEROGLYPH G031;Lo;0;L;;;;;N;;;;; +13164;EGYPTIAN HIEROGLYPH G032;Lo;0;L;;;;;N;;;;; +13165;EGYPTIAN HIEROGLYPH G033;Lo;0;L;;;;;N;;;;; +13166;EGYPTIAN HIEROGLYPH G034;Lo;0;L;;;;;N;;;;; +13167;EGYPTIAN HIEROGLYPH G035;Lo;0;L;;;;;N;;;;; +13168;EGYPTIAN HIEROGLYPH G036;Lo;0;L;;;;;N;;;;; +13169;EGYPTIAN HIEROGLYPH G036A;Lo;0;L;;;;;N;;;;; +1316A;EGYPTIAN HIEROGLYPH G037;Lo;0;L;;;;;N;;;;; +1316B;EGYPTIAN HIEROGLYPH G037A;Lo;0;L;;;;;N;;;;; +1316C;EGYPTIAN HIEROGLYPH G038;Lo;0;L;;;;;N;;;;; +1316D;EGYPTIAN HIEROGLYPH G039;Lo;0;L;;;;;N;;;;; +1316E;EGYPTIAN HIEROGLYPH G040;Lo;0;L;;;;;N;;;;; +1316F;EGYPTIAN HIEROGLYPH G041;Lo;0;L;;;;;N;;;;; +13170;EGYPTIAN HIEROGLYPH G042;Lo;0;L;;;;;N;;;;; +13171;EGYPTIAN HIEROGLYPH G043;Lo;0;L;;;;;N;;;;; +13172;EGYPTIAN HIEROGLYPH G043A;Lo;0;L;;;;;N;;;;; +13173;EGYPTIAN HIEROGLYPH G044;Lo;0;L;;;;;N;;;;; +13174;EGYPTIAN HIEROGLYPH G045;Lo;0;L;;;;;N;;;;; +13175;EGYPTIAN HIEROGLYPH G045A;Lo;0;L;;;;;N;;;;; +13176;EGYPTIAN HIEROGLYPH G046;Lo;0;L;;;;;N;;;;; +13177;EGYPTIAN HIEROGLYPH G047;Lo;0;L;;;;;N;;;;; +13178;EGYPTIAN HIEROGLYPH G048;Lo;0;L;;;;;N;;;;; +13179;EGYPTIAN HIEROGLYPH G049;Lo;0;L;;;;;N;;;;; +1317A;EGYPTIAN HIEROGLYPH G050;Lo;0;L;;;;;N;;;;; +1317B;EGYPTIAN HIEROGLYPH G051;Lo;0;L;;;;;N;;;;; +1317C;EGYPTIAN HIEROGLYPH G052;Lo;0;L;;;;;N;;;;; +1317D;EGYPTIAN HIEROGLYPH G053;Lo;0;L;;;;;N;;;;; +1317E;EGYPTIAN HIEROGLYPH G054;Lo;0;L;;;;;N;;;;; +1317F;EGYPTIAN HIEROGLYPH H001;Lo;0;L;;;;;N;;;;; +13180;EGYPTIAN HIEROGLYPH H002;Lo;0;L;;;;;N;;;;; +13181;EGYPTIAN HIEROGLYPH H003;Lo;0;L;;;;;N;;;;; +13182;EGYPTIAN HIEROGLYPH H004;Lo;0;L;;;;;N;;;;; +13183;EGYPTIAN HIEROGLYPH H005;Lo;0;L;;;;;N;;;;; +13184;EGYPTIAN HIEROGLYPH H006;Lo;0;L;;;;;N;;;;; +13185;EGYPTIAN HIEROGLYPH H006A;Lo;0;L;;;;;N;;;;; +13186;EGYPTIAN HIEROGLYPH H007;Lo;0;L;;;;;N;;;;; +13187;EGYPTIAN HIEROGLYPH H008;Lo;0;L;;;;;N;;;;; +13188;EGYPTIAN HIEROGLYPH I001;Lo;0;L;;;;;N;;;;; +13189;EGYPTIAN HIEROGLYPH I002;Lo;0;L;;;;;N;;;;; +1318A;EGYPTIAN HIEROGLYPH I003;Lo;0;L;;;;;N;;;;; +1318B;EGYPTIAN HIEROGLYPH I004;Lo;0;L;;;;;N;;;;; +1318C;EGYPTIAN HIEROGLYPH I005;Lo;0;L;;;;;N;;;;; +1318D;EGYPTIAN HIEROGLYPH I005A;Lo;0;L;;;;;N;;;;; +1318E;EGYPTIAN HIEROGLYPH I006;Lo;0;L;;;;;N;;;;; +1318F;EGYPTIAN HIEROGLYPH I007;Lo;0;L;;;;;N;;;;; +13190;EGYPTIAN HIEROGLYPH I008;Lo;0;L;;;;;N;;;;; +13191;EGYPTIAN HIEROGLYPH I009;Lo;0;L;;;;;N;;;;; +13192;EGYPTIAN HIEROGLYPH I009A;Lo;0;L;;;;;N;;;;; +13193;EGYPTIAN HIEROGLYPH I010;Lo;0;L;;;;;N;;;;; +13194;EGYPTIAN HIEROGLYPH I010A;Lo;0;L;;;;;N;;;;; +13195;EGYPTIAN HIEROGLYPH I011;Lo;0;L;;;;;N;;;;; +13196;EGYPTIAN HIEROGLYPH I011A;Lo;0;L;;;;;N;;;;; +13197;EGYPTIAN HIEROGLYPH I012;Lo;0;L;;;;;N;;;;; +13198;EGYPTIAN HIEROGLYPH I013;Lo;0;L;;;;;N;;;;; +13199;EGYPTIAN HIEROGLYPH I014;Lo;0;L;;;;;N;;;;; +1319A;EGYPTIAN HIEROGLYPH I015;Lo;0;L;;;;;N;;;;; +1319B;EGYPTIAN HIEROGLYPH K001;Lo;0;L;;;;;N;;;;; +1319C;EGYPTIAN HIEROGLYPH K002;Lo;0;L;;;;;N;;;;; +1319D;EGYPTIAN HIEROGLYPH K003;Lo;0;L;;;;;N;;;;; +1319E;EGYPTIAN HIEROGLYPH K004;Lo;0;L;;;;;N;;;;; +1319F;EGYPTIAN HIEROGLYPH K005;Lo;0;L;;;;;N;;;;; +131A0;EGYPTIAN HIEROGLYPH K006;Lo;0;L;;;;;N;;;;; +131A1;EGYPTIAN HIEROGLYPH K007;Lo;0;L;;;;;N;;;;; +131A2;EGYPTIAN HIEROGLYPH K008;Lo;0;L;;;;;N;;;;; +131A3;EGYPTIAN HIEROGLYPH L001;Lo;0;L;;;;;N;;;;; +131A4;EGYPTIAN HIEROGLYPH L002;Lo;0;L;;;;;N;;;;; +131A5;EGYPTIAN HIEROGLYPH L002A;Lo;0;L;;;;;N;;;;; +131A6;EGYPTIAN HIEROGLYPH L003;Lo;0;L;;;;;N;;;;; +131A7;EGYPTIAN HIEROGLYPH L004;Lo;0;L;;;;;N;;;;; +131A8;EGYPTIAN HIEROGLYPH L005;Lo;0;L;;;;;N;;;;; +131A9;EGYPTIAN HIEROGLYPH L006;Lo;0;L;;;;;N;;;;; +131AA;EGYPTIAN HIEROGLYPH L006A;Lo;0;L;;;;;N;;;;; +131AB;EGYPTIAN HIEROGLYPH L007;Lo;0;L;;;;;N;;;;; +131AC;EGYPTIAN HIEROGLYPH L008;Lo;0;L;;;;;N;;;;; +131AD;EGYPTIAN HIEROGLYPH M001;Lo;0;L;;;;;N;;;;; +131AE;EGYPTIAN HIEROGLYPH M001A;Lo;0;L;;;;;N;;;;; +131AF;EGYPTIAN HIEROGLYPH M001B;Lo;0;L;;;;;N;;;;; +131B0;EGYPTIAN HIEROGLYPH M002;Lo;0;L;;;;;N;;;;; +131B1;EGYPTIAN HIEROGLYPH M003;Lo;0;L;;;;;N;;;;; +131B2;EGYPTIAN HIEROGLYPH M003A;Lo;0;L;;;;;N;;;;; +131B3;EGYPTIAN HIEROGLYPH M004;Lo;0;L;;;;;N;;;;; +131B4;EGYPTIAN HIEROGLYPH M005;Lo;0;L;;;;;N;;;;; +131B5;EGYPTIAN HIEROGLYPH M006;Lo;0;L;;;;;N;;;;; +131B6;EGYPTIAN HIEROGLYPH M007;Lo;0;L;;;;;N;;;;; +131B7;EGYPTIAN HIEROGLYPH M008;Lo;0;L;;;;;N;;;;; +131B8;EGYPTIAN HIEROGLYPH M009;Lo;0;L;;;;;N;;;;; +131B9;EGYPTIAN HIEROGLYPH M010;Lo;0;L;;;;;N;;;;; +131BA;EGYPTIAN HIEROGLYPH M010A;Lo;0;L;;;;;N;;;;; +131BB;EGYPTIAN HIEROGLYPH M011;Lo;0;L;;;;;N;;;;; +131BC;EGYPTIAN HIEROGLYPH M012;Lo;0;L;;;;;N;;;;; +131BD;EGYPTIAN HIEROGLYPH M012A;Lo;0;L;;;;;N;;;;; +131BE;EGYPTIAN HIEROGLYPH M012B;Lo;0;L;;;;;N;;;;; +131BF;EGYPTIAN HIEROGLYPH M012C;Lo;0;L;;;;;N;;;;; +131C0;EGYPTIAN HIEROGLYPH M012D;Lo;0;L;;;;;N;;;;; +131C1;EGYPTIAN HIEROGLYPH M012E;Lo;0;L;;;;;N;;;;; +131C2;EGYPTIAN HIEROGLYPH M012F;Lo;0;L;;;;;N;;;;; +131C3;EGYPTIAN HIEROGLYPH M012G;Lo;0;L;;;;;N;;;;; +131C4;EGYPTIAN HIEROGLYPH M012H;Lo;0;L;;;;;N;;;;; +131C5;EGYPTIAN HIEROGLYPH M013;Lo;0;L;;;;;N;;;;; +131C6;EGYPTIAN HIEROGLYPH M014;Lo;0;L;;;;;N;;;;; +131C7;EGYPTIAN HIEROGLYPH M015;Lo;0;L;;;;;N;;;;; +131C8;EGYPTIAN HIEROGLYPH M015A;Lo;0;L;;;;;N;;;;; +131C9;EGYPTIAN HIEROGLYPH M016;Lo;0;L;;;;;N;;;;; +131CA;EGYPTIAN HIEROGLYPH M016A;Lo;0;L;;;;;N;;;;; +131CB;EGYPTIAN HIEROGLYPH M017;Lo;0;L;;;;;N;;;;; +131CC;EGYPTIAN HIEROGLYPH M017A;Lo;0;L;;;;;N;;;;; +131CD;EGYPTIAN HIEROGLYPH M018;Lo;0;L;;;;;N;;;;; +131CE;EGYPTIAN HIEROGLYPH M019;Lo;0;L;;;;;N;;;;; +131CF;EGYPTIAN HIEROGLYPH M020;Lo;0;L;;;;;N;;;;; +131D0;EGYPTIAN HIEROGLYPH M021;Lo;0;L;;;;;N;;;;; +131D1;EGYPTIAN HIEROGLYPH M022;Lo;0;L;;;;;N;;;;; +131D2;EGYPTIAN HIEROGLYPH M022A;Lo;0;L;;;;;N;;;;; +131D3;EGYPTIAN HIEROGLYPH M023;Lo;0;L;;;;;N;;;;; +131D4;EGYPTIAN HIEROGLYPH M024;Lo;0;L;;;;;N;;;;; +131D5;EGYPTIAN HIEROGLYPH M024A;Lo;0;L;;;;;N;;;;; +131D6;EGYPTIAN HIEROGLYPH M025;Lo;0;L;;;;;N;;;;; +131D7;EGYPTIAN HIEROGLYPH M026;Lo;0;L;;;;;N;;;;; +131D8;EGYPTIAN HIEROGLYPH M027;Lo;0;L;;;;;N;;;;; +131D9;EGYPTIAN HIEROGLYPH M028;Lo;0;L;;;;;N;;;;; +131DA;EGYPTIAN HIEROGLYPH M028A;Lo;0;L;;;;;N;;;;; +131DB;EGYPTIAN HIEROGLYPH M029;Lo;0;L;;;;;N;;;;; +131DC;EGYPTIAN HIEROGLYPH M030;Lo;0;L;;;;;N;;;;; +131DD;EGYPTIAN HIEROGLYPH M031;Lo;0;L;;;;;N;;;;; +131DE;EGYPTIAN HIEROGLYPH M031A;Lo;0;L;;;;;N;;;;; +131DF;EGYPTIAN HIEROGLYPH M032;Lo;0;L;;;;;N;;;;; +131E0;EGYPTIAN HIEROGLYPH M033;Lo;0;L;;;;;N;;;;; +131E1;EGYPTIAN HIEROGLYPH M033A;Lo;0;L;;;;;N;;;;; +131E2;EGYPTIAN HIEROGLYPH M033B;Lo;0;L;;;;;N;;;;; +131E3;EGYPTIAN HIEROGLYPH M034;Lo;0;L;;;;;N;;;;; +131E4;EGYPTIAN HIEROGLYPH M035;Lo;0;L;;;;;N;;;;; +131E5;EGYPTIAN HIEROGLYPH M036;Lo;0;L;;;;;N;;;;; +131E6;EGYPTIAN HIEROGLYPH M037;Lo;0;L;;;;;N;;;;; +131E7;EGYPTIAN HIEROGLYPH M038;Lo;0;L;;;;;N;;;;; +131E8;EGYPTIAN HIEROGLYPH M039;Lo;0;L;;;;;N;;;;; +131E9;EGYPTIAN HIEROGLYPH M040;Lo;0;L;;;;;N;;;;; +131EA;EGYPTIAN HIEROGLYPH M040A;Lo;0;L;;;;;N;;;;; +131EB;EGYPTIAN HIEROGLYPH M041;Lo;0;L;;;;;N;;;;; +131EC;EGYPTIAN HIEROGLYPH M042;Lo;0;L;;;;;N;;;;; +131ED;EGYPTIAN HIEROGLYPH M043;Lo;0;L;;;;;N;;;;; +131EE;EGYPTIAN HIEROGLYPH M044;Lo;0;L;;;;;N;;;;; +131EF;EGYPTIAN HIEROGLYPH N001;Lo;0;L;;;;;N;;;;; +131F0;EGYPTIAN HIEROGLYPH N002;Lo;0;L;;;;;N;;;;; +131F1;EGYPTIAN HIEROGLYPH N003;Lo;0;L;;;;;N;;;;; +131F2;EGYPTIAN HIEROGLYPH N004;Lo;0;L;;;;;N;;;;; +131F3;EGYPTIAN HIEROGLYPH N005;Lo;0;L;;;;;N;;;;; +131F4;EGYPTIAN HIEROGLYPH N006;Lo;0;L;;;;;N;;;;; +131F5;EGYPTIAN HIEROGLYPH N007;Lo;0;L;;;;;N;;;;; +131F6;EGYPTIAN HIEROGLYPH N008;Lo;0;L;;;;;N;;;;; +131F7;EGYPTIAN HIEROGLYPH N009;Lo;0;L;;;;;N;;;;; +131F8;EGYPTIAN HIEROGLYPH N010;Lo;0;L;;;;;N;;;;; +131F9;EGYPTIAN HIEROGLYPH N011;Lo;0;L;;;;;N;;;;; +131FA;EGYPTIAN HIEROGLYPH N012;Lo;0;L;;;;;N;;;;; +131FB;EGYPTIAN HIEROGLYPH N013;Lo;0;L;;;;;N;;;;; +131FC;EGYPTIAN HIEROGLYPH N014;Lo;0;L;;;;;N;;;;; +131FD;EGYPTIAN HIEROGLYPH N015;Lo;0;L;;;;;N;;;;; +131FE;EGYPTIAN HIEROGLYPH N016;Lo;0;L;;;;;N;;;;; +131FF;EGYPTIAN HIEROGLYPH N017;Lo;0;L;;;;;N;;;;; +13200;EGYPTIAN HIEROGLYPH N018;Lo;0;L;;;;;N;;;;; +13201;EGYPTIAN HIEROGLYPH N018A;Lo;0;L;;;;;N;;;;; +13202;EGYPTIAN HIEROGLYPH N018B;Lo;0;L;;;;;N;;;;; +13203;EGYPTIAN HIEROGLYPH N019;Lo;0;L;;;;;N;;;;; +13204;EGYPTIAN HIEROGLYPH N020;Lo;0;L;;;;;N;;;;; +13205;EGYPTIAN HIEROGLYPH N021;Lo;0;L;;;;;N;;;;; +13206;EGYPTIAN HIEROGLYPH N022;Lo;0;L;;;;;N;;;;; +13207;EGYPTIAN HIEROGLYPH N023;Lo;0;L;;;;;N;;;;; +13208;EGYPTIAN HIEROGLYPH N024;Lo;0;L;;;;;N;;;;; +13209;EGYPTIAN HIEROGLYPH N025;Lo;0;L;;;;;N;;;;; +1320A;EGYPTIAN HIEROGLYPH N025A;Lo;0;L;;;;;N;;;;; +1320B;EGYPTIAN HIEROGLYPH N026;Lo;0;L;;;;;N;;;;; +1320C;EGYPTIAN HIEROGLYPH N027;Lo;0;L;;;;;N;;;;; +1320D;EGYPTIAN HIEROGLYPH N028;Lo;0;L;;;;;N;;;;; +1320E;EGYPTIAN HIEROGLYPH N029;Lo;0;L;;;;;N;;;;; +1320F;EGYPTIAN HIEROGLYPH N030;Lo;0;L;;;;;N;;;;; +13210;EGYPTIAN HIEROGLYPH N031;Lo;0;L;;;;;N;;;;; +13211;EGYPTIAN HIEROGLYPH N032;Lo;0;L;;;;;N;;;;; +13212;EGYPTIAN HIEROGLYPH N033;Lo;0;L;;;;;N;;;;; +13213;EGYPTIAN HIEROGLYPH N033A;Lo;0;L;;;;;N;;;;; +13214;EGYPTIAN HIEROGLYPH N034;Lo;0;L;;;;;N;;;;; +13215;EGYPTIAN HIEROGLYPH N034A;Lo;0;L;;;;;N;;;;; +13216;EGYPTIAN HIEROGLYPH N035;Lo;0;L;;;;;N;;;;; +13217;EGYPTIAN HIEROGLYPH N035A;Lo;0;L;;;;;N;;;;; +13218;EGYPTIAN HIEROGLYPH N036;Lo;0;L;;;;;N;;;;; +13219;EGYPTIAN HIEROGLYPH N037;Lo;0;L;;;;;N;;;;; +1321A;EGYPTIAN HIEROGLYPH N037A;Lo;0;L;;;;;N;;;;; +1321B;EGYPTIAN HIEROGLYPH N038;Lo;0;L;;;;;N;;;;; +1321C;EGYPTIAN HIEROGLYPH N039;Lo;0;L;;;;;N;;;;; +1321D;EGYPTIAN HIEROGLYPH N040;Lo;0;L;;;;;N;;;;; +1321E;EGYPTIAN HIEROGLYPH N041;Lo;0;L;;;;;N;;;;; +1321F;EGYPTIAN HIEROGLYPH N042;Lo;0;L;;;;;N;;;;; +13220;EGYPTIAN HIEROGLYPH NL001;Lo;0;L;;;;;N;;;;; +13221;EGYPTIAN HIEROGLYPH NL002;Lo;0;L;;;;;N;;;;; +13222;EGYPTIAN HIEROGLYPH NL003;Lo;0;L;;;;;N;;;;; +13223;EGYPTIAN HIEROGLYPH NL004;Lo;0;L;;;;;N;;;;; +13224;EGYPTIAN HIEROGLYPH NL005;Lo;0;L;;;;;N;;;;; +13225;EGYPTIAN HIEROGLYPH NL005A;Lo;0;L;;;;;N;;;;; +13226;EGYPTIAN HIEROGLYPH NL006;Lo;0;L;;;;;N;;;;; +13227;EGYPTIAN HIEROGLYPH NL007;Lo;0;L;;;;;N;;;;; +13228;EGYPTIAN HIEROGLYPH NL008;Lo;0;L;;;;;N;;;;; +13229;EGYPTIAN HIEROGLYPH NL009;Lo;0;L;;;;;N;;;;; +1322A;EGYPTIAN HIEROGLYPH NL010;Lo;0;L;;;;;N;;;;; +1322B;EGYPTIAN HIEROGLYPH NL011;Lo;0;L;;;;;N;;;;; +1322C;EGYPTIAN HIEROGLYPH NL012;Lo;0;L;;;;;N;;;;; +1322D;EGYPTIAN HIEROGLYPH NL013;Lo;0;L;;;;;N;;;;; +1322E;EGYPTIAN HIEROGLYPH NL014;Lo;0;L;;;;;N;;;;; +1322F;EGYPTIAN HIEROGLYPH NL015;Lo;0;L;;;;;N;;;;; +13230;EGYPTIAN HIEROGLYPH NL016;Lo;0;L;;;;;N;;;;; +13231;EGYPTIAN HIEROGLYPH NL017;Lo;0;L;;;;;N;;;;; +13232;EGYPTIAN HIEROGLYPH NL017A;Lo;0;L;;;;;N;;;;; +13233;EGYPTIAN HIEROGLYPH NL018;Lo;0;L;;;;;N;;;;; +13234;EGYPTIAN HIEROGLYPH NL019;Lo;0;L;;;;;N;;;;; +13235;EGYPTIAN HIEROGLYPH NL020;Lo;0;L;;;;;N;;;;; +13236;EGYPTIAN HIEROGLYPH NU001;Lo;0;L;;;;;N;;;;; +13237;EGYPTIAN HIEROGLYPH NU002;Lo;0;L;;;;;N;;;;; +13238;EGYPTIAN HIEROGLYPH NU003;Lo;0;L;;;;;N;;;;; +13239;EGYPTIAN HIEROGLYPH NU004;Lo;0;L;;;;;N;;;;; +1323A;EGYPTIAN HIEROGLYPH NU005;Lo;0;L;;;;;N;;;;; +1323B;EGYPTIAN HIEROGLYPH NU006;Lo;0;L;;;;;N;;;;; +1323C;EGYPTIAN HIEROGLYPH NU007;Lo;0;L;;;;;N;;;;; +1323D;EGYPTIAN HIEROGLYPH NU008;Lo;0;L;;;;;N;;;;; +1323E;EGYPTIAN HIEROGLYPH NU009;Lo;0;L;;;;;N;;;;; +1323F;EGYPTIAN HIEROGLYPH NU010;Lo;0;L;;;;;N;;;;; +13240;EGYPTIAN HIEROGLYPH NU010A;Lo;0;L;;;;;N;;;;; +13241;EGYPTIAN HIEROGLYPH NU011;Lo;0;L;;;;;N;;;;; +13242;EGYPTIAN HIEROGLYPH NU011A;Lo;0;L;;;;;N;;;;; +13243;EGYPTIAN HIEROGLYPH NU012;Lo;0;L;;;;;N;;;;; +13244;EGYPTIAN HIEROGLYPH NU013;Lo;0;L;;;;;N;;;;; +13245;EGYPTIAN HIEROGLYPH NU014;Lo;0;L;;;;;N;;;;; +13246;EGYPTIAN HIEROGLYPH NU015;Lo;0;L;;;;;N;;;;; +13247;EGYPTIAN HIEROGLYPH NU016;Lo;0;L;;;;;N;;;;; +13248;EGYPTIAN HIEROGLYPH NU017;Lo;0;L;;;;;N;;;;; +13249;EGYPTIAN HIEROGLYPH NU018;Lo;0;L;;;;;N;;;;; +1324A;EGYPTIAN HIEROGLYPH NU018A;Lo;0;L;;;;;N;;;;; +1324B;EGYPTIAN HIEROGLYPH NU019;Lo;0;L;;;;;N;;;;; +1324C;EGYPTIAN HIEROGLYPH NU020;Lo;0;L;;;;;N;;;;; +1324D;EGYPTIAN HIEROGLYPH NU021;Lo;0;L;;;;;N;;;;; +1324E;EGYPTIAN HIEROGLYPH NU022;Lo;0;L;;;;;N;;;;; +1324F;EGYPTIAN HIEROGLYPH NU022A;Lo;0;L;;;;;N;;;;; +13250;EGYPTIAN HIEROGLYPH O001;Lo;0;L;;;;;N;;;;; +13251;EGYPTIAN HIEROGLYPH O001A;Lo;0;L;;;;;N;;;;; +13252;EGYPTIAN HIEROGLYPH O002;Lo;0;L;;;;;N;;;;; +13253;EGYPTIAN HIEROGLYPH O003;Lo;0;L;;;;;N;;;;; +13254;EGYPTIAN HIEROGLYPH O004;Lo;0;L;;;;;N;;;;; +13255;EGYPTIAN HIEROGLYPH O005;Lo;0;L;;;;;N;;;;; +13256;EGYPTIAN HIEROGLYPH O005A;Lo;0;L;;;;;N;;;;; +13257;EGYPTIAN HIEROGLYPH O006;Lo;0;L;;;;;N;;;;; +13258;EGYPTIAN HIEROGLYPH O006A;Lo;0;L;;;;;N;;;;; +13259;EGYPTIAN HIEROGLYPH O006B;Lo;0;L;;;;;N;;;;; +1325A;EGYPTIAN HIEROGLYPH O006C;Lo;0;L;;;;;N;;;;; +1325B;EGYPTIAN HIEROGLYPH O006D;Lo;0;L;;;;;N;;;;; +1325C;EGYPTIAN HIEROGLYPH O006E;Lo;0;L;;;;;N;;;;; +1325D;EGYPTIAN HIEROGLYPH O006F;Lo;0;L;;;;;N;;;;; +1325E;EGYPTIAN HIEROGLYPH O007;Lo;0;L;;;;;N;;;;; +1325F;EGYPTIAN HIEROGLYPH O008;Lo;0;L;;;;;N;;;;; +13260;EGYPTIAN HIEROGLYPH O009;Lo;0;L;;;;;N;;;;; +13261;EGYPTIAN HIEROGLYPH O010;Lo;0;L;;;;;N;;;;; +13262;EGYPTIAN HIEROGLYPH O010A;Lo;0;L;;;;;N;;;;; +13263;EGYPTIAN HIEROGLYPH O010B;Lo;0;L;;;;;N;;;;; +13264;EGYPTIAN HIEROGLYPH O010C;Lo;0;L;;;;;N;;;;; +13265;EGYPTIAN HIEROGLYPH O011;Lo;0;L;;;;;N;;;;; +13266;EGYPTIAN HIEROGLYPH O012;Lo;0;L;;;;;N;;;;; +13267;EGYPTIAN HIEROGLYPH O013;Lo;0;L;;;;;N;;;;; +13268;EGYPTIAN HIEROGLYPH O014;Lo;0;L;;;;;N;;;;; +13269;EGYPTIAN HIEROGLYPH O015;Lo;0;L;;;;;N;;;;; +1326A;EGYPTIAN HIEROGLYPH O016;Lo;0;L;;;;;N;;;;; +1326B;EGYPTIAN HIEROGLYPH O017;Lo;0;L;;;;;N;;;;; +1326C;EGYPTIAN HIEROGLYPH O018;Lo;0;L;;;;;N;;;;; +1326D;EGYPTIAN HIEROGLYPH O019;Lo;0;L;;;;;N;;;;; +1326E;EGYPTIAN HIEROGLYPH O019A;Lo;0;L;;;;;N;;;;; +1326F;EGYPTIAN HIEROGLYPH O020;Lo;0;L;;;;;N;;;;; +13270;EGYPTIAN HIEROGLYPH O020A;Lo;0;L;;;;;N;;;;; +13271;EGYPTIAN HIEROGLYPH O021;Lo;0;L;;;;;N;;;;; +13272;EGYPTIAN HIEROGLYPH O022;Lo;0;L;;;;;N;;;;; +13273;EGYPTIAN HIEROGLYPH O023;Lo;0;L;;;;;N;;;;; +13274;EGYPTIAN HIEROGLYPH O024;Lo;0;L;;;;;N;;;;; +13275;EGYPTIAN HIEROGLYPH O024A;Lo;0;L;;;;;N;;;;; +13276;EGYPTIAN HIEROGLYPH O025;Lo;0;L;;;;;N;;;;; +13277;EGYPTIAN HIEROGLYPH O025A;Lo;0;L;;;;;N;;;;; +13278;EGYPTIAN HIEROGLYPH O026;Lo;0;L;;;;;N;;;;; +13279;EGYPTIAN HIEROGLYPH O027;Lo;0;L;;;;;N;;;;; +1327A;EGYPTIAN HIEROGLYPH O028;Lo;0;L;;;;;N;;;;; +1327B;EGYPTIAN HIEROGLYPH O029;Lo;0;L;;;;;N;;;;; +1327C;EGYPTIAN HIEROGLYPH O029A;Lo;0;L;;;;;N;;;;; +1327D;EGYPTIAN HIEROGLYPH O030;Lo;0;L;;;;;N;;;;; +1327E;EGYPTIAN HIEROGLYPH O030A;Lo;0;L;;;;;N;;;;; +1327F;EGYPTIAN HIEROGLYPH O031;Lo;0;L;;;;;N;;;;; +13280;EGYPTIAN HIEROGLYPH O032;Lo;0;L;;;;;N;;;;; +13281;EGYPTIAN HIEROGLYPH O033;Lo;0;L;;;;;N;;;;; +13282;EGYPTIAN HIEROGLYPH O033A;Lo;0;L;;;;;N;;;;; +13283;EGYPTIAN HIEROGLYPH O034;Lo;0;L;;;;;N;;;;; +13284;EGYPTIAN HIEROGLYPH O035;Lo;0;L;;;;;N;;;;; +13285;EGYPTIAN HIEROGLYPH O036;Lo;0;L;;;;;N;;;;; +13286;EGYPTIAN HIEROGLYPH O036A;Lo;0;L;;;;;N;;;;; +13287;EGYPTIAN HIEROGLYPH O036B;Lo;0;L;;;;;N;;;;; +13288;EGYPTIAN HIEROGLYPH O036C;Lo;0;L;;;;;N;;;;; +13289;EGYPTIAN HIEROGLYPH O036D;Lo;0;L;;;;;N;;;;; +1328A;EGYPTIAN HIEROGLYPH O037;Lo;0;L;;;;;N;;;;; +1328B;EGYPTIAN HIEROGLYPH O038;Lo;0;L;;;;;N;;;;; +1328C;EGYPTIAN HIEROGLYPH O039;Lo;0;L;;;;;N;;;;; +1328D;EGYPTIAN HIEROGLYPH O040;Lo;0;L;;;;;N;;;;; +1328E;EGYPTIAN HIEROGLYPH O041;Lo;0;L;;;;;N;;;;; +1328F;EGYPTIAN HIEROGLYPH O042;Lo;0;L;;;;;N;;;;; +13290;EGYPTIAN HIEROGLYPH O043;Lo;0;L;;;;;N;;;;; +13291;EGYPTIAN HIEROGLYPH O044;Lo;0;L;;;;;N;;;;; +13292;EGYPTIAN HIEROGLYPH O045;Lo;0;L;;;;;N;;;;; +13293;EGYPTIAN HIEROGLYPH O046;Lo;0;L;;;;;N;;;;; +13294;EGYPTIAN HIEROGLYPH O047;Lo;0;L;;;;;N;;;;; +13295;EGYPTIAN HIEROGLYPH O048;Lo;0;L;;;;;N;;;;; +13296;EGYPTIAN HIEROGLYPH O049;Lo;0;L;;;;;N;;;;; +13297;EGYPTIAN HIEROGLYPH O050;Lo;0;L;;;;;N;;;;; +13298;EGYPTIAN HIEROGLYPH O050A;Lo;0;L;;;;;N;;;;; +13299;EGYPTIAN HIEROGLYPH O050B;Lo;0;L;;;;;N;;;;; +1329A;EGYPTIAN HIEROGLYPH O051;Lo;0;L;;;;;N;;;;; +1329B;EGYPTIAN HIEROGLYPH P001;Lo;0;L;;;;;N;;;;; +1329C;EGYPTIAN HIEROGLYPH P001A;Lo;0;L;;;;;N;;;;; +1329D;EGYPTIAN HIEROGLYPH P002;Lo;0;L;;;;;N;;;;; +1329E;EGYPTIAN HIEROGLYPH P003;Lo;0;L;;;;;N;;;;; +1329F;EGYPTIAN HIEROGLYPH P003A;Lo;0;L;;;;;N;;;;; +132A0;EGYPTIAN HIEROGLYPH P004;Lo;0;L;;;;;N;;;;; +132A1;EGYPTIAN HIEROGLYPH P005;Lo;0;L;;;;;N;;;;; +132A2;EGYPTIAN HIEROGLYPH P006;Lo;0;L;;;;;N;;;;; +132A3;EGYPTIAN HIEROGLYPH P007;Lo;0;L;;;;;N;;;;; +132A4;EGYPTIAN HIEROGLYPH P008;Lo;0;L;;;;;N;;;;; +132A5;EGYPTIAN HIEROGLYPH P009;Lo;0;L;;;;;N;;;;; +132A6;EGYPTIAN HIEROGLYPH P010;Lo;0;L;;;;;N;;;;; +132A7;EGYPTIAN HIEROGLYPH P011;Lo;0;L;;;;;N;;;;; +132A8;EGYPTIAN HIEROGLYPH Q001;Lo;0;L;;;;;N;;;;; +132A9;EGYPTIAN HIEROGLYPH Q002;Lo;0;L;;;;;N;;;;; +132AA;EGYPTIAN HIEROGLYPH Q003;Lo;0;L;;;;;N;;;;; +132AB;EGYPTIAN HIEROGLYPH Q004;Lo;0;L;;;;;N;;;;; +132AC;EGYPTIAN HIEROGLYPH Q005;Lo;0;L;;;;;N;;;;; +132AD;EGYPTIAN HIEROGLYPH Q006;Lo;0;L;;;;;N;;;;; +132AE;EGYPTIAN HIEROGLYPH Q007;Lo;0;L;;;;;N;;;;; +132AF;EGYPTIAN HIEROGLYPH R001;Lo;0;L;;;;;N;;;;; +132B0;EGYPTIAN HIEROGLYPH R002;Lo;0;L;;;;;N;;;;; +132B1;EGYPTIAN HIEROGLYPH R002A;Lo;0;L;;;;;N;;;;; +132B2;EGYPTIAN HIEROGLYPH R003;Lo;0;L;;;;;N;;;;; +132B3;EGYPTIAN HIEROGLYPH R003A;Lo;0;L;;;;;N;;;;; +132B4;EGYPTIAN HIEROGLYPH R003B;Lo;0;L;;;;;N;;;;; +132B5;EGYPTIAN HIEROGLYPH R004;Lo;0;L;;;;;N;;;;; +132B6;EGYPTIAN HIEROGLYPH R005;Lo;0;L;;;;;N;;;;; +132B7;EGYPTIAN HIEROGLYPH R006;Lo;0;L;;;;;N;;;;; +132B8;EGYPTIAN HIEROGLYPH R007;Lo;0;L;;;;;N;;;;; +132B9;EGYPTIAN HIEROGLYPH R008;Lo;0;L;;;;;N;;;;; +132BA;EGYPTIAN HIEROGLYPH R009;Lo;0;L;;;;;N;;;;; +132BB;EGYPTIAN HIEROGLYPH R010;Lo;0;L;;;;;N;;;;; +132BC;EGYPTIAN HIEROGLYPH R010A;Lo;0;L;;;;;N;;;;; +132BD;EGYPTIAN HIEROGLYPH R011;Lo;0;L;;;;;N;;;;; +132BE;EGYPTIAN HIEROGLYPH R012;Lo;0;L;;;;;N;;;;; +132BF;EGYPTIAN HIEROGLYPH R013;Lo;0;L;;;;;N;;;;; +132C0;EGYPTIAN HIEROGLYPH R014;Lo;0;L;;;;;N;;;;; +132C1;EGYPTIAN HIEROGLYPH R015;Lo;0;L;;;;;N;;;;; +132C2;EGYPTIAN HIEROGLYPH R016;Lo;0;L;;;;;N;;;;; +132C3;EGYPTIAN HIEROGLYPH R016A;Lo;0;L;;;;;N;;;;; +132C4;EGYPTIAN HIEROGLYPH R017;Lo;0;L;;;;;N;;;;; +132C5;EGYPTIAN HIEROGLYPH R018;Lo;0;L;;;;;N;;;;; +132C6;EGYPTIAN HIEROGLYPH R019;Lo;0;L;;;;;N;;;;; +132C7;EGYPTIAN HIEROGLYPH R020;Lo;0;L;;;;;N;;;;; +132C8;EGYPTIAN HIEROGLYPH R021;Lo;0;L;;;;;N;;;;; +132C9;EGYPTIAN HIEROGLYPH R022;Lo;0;L;;;;;N;;;;; +132CA;EGYPTIAN HIEROGLYPH R023;Lo;0;L;;;;;N;;;;; +132CB;EGYPTIAN HIEROGLYPH R024;Lo;0;L;;;;;N;;;;; +132CC;EGYPTIAN HIEROGLYPH R025;Lo;0;L;;;;;N;;;;; +132CD;EGYPTIAN HIEROGLYPH R026;Lo;0;L;;;;;N;;;;; +132CE;EGYPTIAN HIEROGLYPH R027;Lo;0;L;;;;;N;;;;; +132CF;EGYPTIAN HIEROGLYPH R028;Lo;0;L;;;;;N;;;;; +132D0;EGYPTIAN HIEROGLYPH R029;Lo;0;L;;;;;N;;;;; +132D1;EGYPTIAN HIEROGLYPH S001;Lo;0;L;;;;;N;;;;; +132D2;EGYPTIAN HIEROGLYPH S002;Lo;0;L;;;;;N;;;;; +132D3;EGYPTIAN HIEROGLYPH S002A;Lo;0;L;;;;;N;;;;; +132D4;EGYPTIAN HIEROGLYPH S003;Lo;0;L;;;;;N;;;;; +132D5;EGYPTIAN HIEROGLYPH S004;Lo;0;L;;;;;N;;;;; +132D6;EGYPTIAN HIEROGLYPH S005;Lo;0;L;;;;;N;;;;; +132D7;EGYPTIAN HIEROGLYPH S006;Lo;0;L;;;;;N;;;;; +132D8;EGYPTIAN HIEROGLYPH S006A;Lo;0;L;;;;;N;;;;; +132D9;EGYPTIAN HIEROGLYPH S007;Lo;0;L;;;;;N;;;;; +132DA;EGYPTIAN HIEROGLYPH S008;Lo;0;L;;;;;N;;;;; +132DB;EGYPTIAN HIEROGLYPH S009;Lo;0;L;;;;;N;;;;; +132DC;EGYPTIAN HIEROGLYPH S010;Lo;0;L;;;;;N;;;;; +132DD;EGYPTIAN HIEROGLYPH S011;Lo;0;L;;;;;N;;;;; +132DE;EGYPTIAN HIEROGLYPH S012;Lo;0;L;;;;;N;;;;; +132DF;EGYPTIAN HIEROGLYPH S013;Lo;0;L;;;;;N;;;;; +132E0;EGYPTIAN HIEROGLYPH S014;Lo;0;L;;;;;N;;;;; +132E1;EGYPTIAN HIEROGLYPH S014A;Lo;0;L;;;;;N;;;;; +132E2;EGYPTIAN HIEROGLYPH S014B;Lo;0;L;;;;;N;;;;; +132E3;EGYPTIAN HIEROGLYPH S015;Lo;0;L;;;;;N;;;;; +132E4;EGYPTIAN HIEROGLYPH S016;Lo;0;L;;;;;N;;;;; +132E5;EGYPTIAN HIEROGLYPH S017;Lo;0;L;;;;;N;;;;; +132E6;EGYPTIAN HIEROGLYPH S017A;Lo;0;L;;;;;N;;;;; +132E7;EGYPTIAN HIEROGLYPH S018;Lo;0;L;;;;;N;;;;; +132E8;EGYPTIAN HIEROGLYPH S019;Lo;0;L;;;;;N;;;;; +132E9;EGYPTIAN HIEROGLYPH S020;Lo;0;L;;;;;N;;;;; +132EA;EGYPTIAN HIEROGLYPH S021;Lo;0;L;;;;;N;;;;; +132EB;EGYPTIAN HIEROGLYPH S022;Lo;0;L;;;;;N;;;;; +132EC;EGYPTIAN HIEROGLYPH S023;Lo;0;L;;;;;N;;;;; +132ED;EGYPTIAN HIEROGLYPH S024;Lo;0;L;;;;;N;;;;; +132EE;EGYPTIAN HIEROGLYPH S025;Lo;0;L;;;;;N;;;;; +132EF;EGYPTIAN HIEROGLYPH S026;Lo;0;L;;;;;N;;;;; +132F0;EGYPTIAN HIEROGLYPH S026A;Lo;0;L;;;;;N;;;;; +132F1;EGYPTIAN HIEROGLYPH S026B;Lo;0;L;;;;;N;;;;; +132F2;EGYPTIAN HIEROGLYPH S027;Lo;0;L;;;;;N;;;;; +132F3;EGYPTIAN HIEROGLYPH S028;Lo;0;L;;;;;N;;;;; +132F4;EGYPTIAN HIEROGLYPH S029;Lo;0;L;;;;;N;;;;; +132F5;EGYPTIAN HIEROGLYPH S030;Lo;0;L;;;;;N;;;;; +132F6;EGYPTIAN HIEROGLYPH S031;Lo;0;L;;;;;N;;;;; +132F7;EGYPTIAN HIEROGLYPH S032;Lo;0;L;;;;;N;;;;; +132F8;EGYPTIAN HIEROGLYPH S033;Lo;0;L;;;;;N;;;;; +132F9;EGYPTIAN HIEROGLYPH S034;Lo;0;L;;;;;N;;;;; +132FA;EGYPTIAN HIEROGLYPH S035;Lo;0;L;;;;;N;;;;; +132FB;EGYPTIAN HIEROGLYPH S035A;Lo;0;L;;;;;N;;;;; +132FC;EGYPTIAN HIEROGLYPH S036;Lo;0;L;;;;;N;;;;; +132FD;EGYPTIAN HIEROGLYPH S037;Lo;0;L;;;;;N;;;;; +132FE;EGYPTIAN HIEROGLYPH S038;Lo;0;L;;;;;N;;;;; +132FF;EGYPTIAN HIEROGLYPH S039;Lo;0;L;;;;;N;;;;; +13300;EGYPTIAN HIEROGLYPH S040;Lo;0;L;;;;;N;;;;; +13301;EGYPTIAN HIEROGLYPH S041;Lo;0;L;;;;;N;;;;; +13302;EGYPTIAN HIEROGLYPH S042;Lo;0;L;;;;;N;;;;; +13303;EGYPTIAN HIEROGLYPH S043;Lo;0;L;;;;;N;;;;; +13304;EGYPTIAN HIEROGLYPH S044;Lo;0;L;;;;;N;;;;; +13305;EGYPTIAN HIEROGLYPH S045;Lo;0;L;;;;;N;;;;; +13306;EGYPTIAN HIEROGLYPH S046;Lo;0;L;;;;;N;;;;; +13307;EGYPTIAN HIEROGLYPH T001;Lo;0;L;;;;;N;;;;; +13308;EGYPTIAN HIEROGLYPH T002;Lo;0;L;;;;;N;;;;; +13309;EGYPTIAN HIEROGLYPH T003;Lo;0;L;;;;;N;;;;; +1330A;EGYPTIAN HIEROGLYPH T003A;Lo;0;L;;;;;N;;;;; +1330B;EGYPTIAN HIEROGLYPH T004;Lo;0;L;;;;;N;;;;; +1330C;EGYPTIAN HIEROGLYPH T005;Lo;0;L;;;;;N;;;;; +1330D;EGYPTIAN HIEROGLYPH T006;Lo;0;L;;;;;N;;;;; +1330E;EGYPTIAN HIEROGLYPH T007;Lo;0;L;;;;;N;;;;; +1330F;EGYPTIAN HIEROGLYPH T007A;Lo;0;L;;;;;N;;;;; +13310;EGYPTIAN HIEROGLYPH T008;Lo;0;L;;;;;N;;;;; +13311;EGYPTIAN HIEROGLYPH T008A;Lo;0;L;;;;;N;;;;; +13312;EGYPTIAN HIEROGLYPH T009;Lo;0;L;;;;;N;;;;; +13313;EGYPTIAN HIEROGLYPH T009A;Lo;0;L;;;;;N;;;;; +13314;EGYPTIAN HIEROGLYPH T010;Lo;0;L;;;;;N;;;;; +13315;EGYPTIAN HIEROGLYPH T011;Lo;0;L;;;;;N;;;;; +13316;EGYPTIAN HIEROGLYPH T011A;Lo;0;L;;;;;N;;;;; +13317;EGYPTIAN HIEROGLYPH T012;Lo;0;L;;;;;N;;;;; +13318;EGYPTIAN HIEROGLYPH T013;Lo;0;L;;;;;N;;;;; +13319;EGYPTIAN HIEROGLYPH T014;Lo;0;L;;;;;N;;;;; +1331A;EGYPTIAN HIEROGLYPH T015;Lo;0;L;;;;;N;;;;; +1331B;EGYPTIAN HIEROGLYPH T016;Lo;0;L;;;;;N;;;;; +1331C;EGYPTIAN HIEROGLYPH T016A;Lo;0;L;;;;;N;;;;; +1331D;EGYPTIAN HIEROGLYPH T017;Lo;0;L;;;;;N;;;;; +1331E;EGYPTIAN HIEROGLYPH T018;Lo;0;L;;;;;N;;;;; +1331F;EGYPTIAN HIEROGLYPH T019;Lo;0;L;;;;;N;;;;; +13320;EGYPTIAN HIEROGLYPH T020;Lo;0;L;;;;;N;;;;; +13321;EGYPTIAN HIEROGLYPH T021;Lo;0;L;;;;;N;;;;; +13322;EGYPTIAN HIEROGLYPH T022;Lo;0;L;;;;;N;;;;; +13323;EGYPTIAN HIEROGLYPH T023;Lo;0;L;;;;;N;;;;; +13324;EGYPTIAN HIEROGLYPH T024;Lo;0;L;;;;;N;;;;; +13325;EGYPTIAN HIEROGLYPH T025;Lo;0;L;;;;;N;;;;; +13326;EGYPTIAN HIEROGLYPH T026;Lo;0;L;;;;;N;;;;; +13327;EGYPTIAN HIEROGLYPH T027;Lo;0;L;;;;;N;;;;; +13328;EGYPTIAN HIEROGLYPH T028;Lo;0;L;;;;;N;;;;; +13329;EGYPTIAN HIEROGLYPH T029;Lo;0;L;;;;;N;;;;; +1332A;EGYPTIAN HIEROGLYPH T030;Lo;0;L;;;;;N;;;;; +1332B;EGYPTIAN HIEROGLYPH T031;Lo;0;L;;;;;N;;;;; +1332C;EGYPTIAN HIEROGLYPH T032;Lo;0;L;;;;;N;;;;; +1332D;EGYPTIAN HIEROGLYPH T032A;Lo;0;L;;;;;N;;;;; +1332E;EGYPTIAN HIEROGLYPH T033;Lo;0;L;;;;;N;;;;; +1332F;EGYPTIAN HIEROGLYPH T033A;Lo;0;L;;;;;N;;;;; +13330;EGYPTIAN HIEROGLYPH T034;Lo;0;L;;;;;N;;;;; +13331;EGYPTIAN HIEROGLYPH T035;Lo;0;L;;;;;N;;;;; +13332;EGYPTIAN HIEROGLYPH T036;Lo;0;L;;;;;N;;;;; +13333;EGYPTIAN HIEROGLYPH U001;Lo;0;L;;;;;N;;;;; +13334;EGYPTIAN HIEROGLYPH U002;Lo;0;L;;;;;N;;;;; +13335;EGYPTIAN HIEROGLYPH U003;Lo;0;L;;;;;N;;;;; +13336;EGYPTIAN HIEROGLYPH U004;Lo;0;L;;;;;N;;;;; +13337;EGYPTIAN HIEROGLYPH U005;Lo;0;L;;;;;N;;;;; +13338;EGYPTIAN HIEROGLYPH U006;Lo;0;L;;;;;N;;;;; +13339;EGYPTIAN HIEROGLYPH U006A;Lo;0;L;;;;;N;;;;; +1333A;EGYPTIAN HIEROGLYPH U006B;Lo;0;L;;;;;N;;;;; +1333B;EGYPTIAN HIEROGLYPH U007;Lo;0;L;;;;;N;;;;; +1333C;EGYPTIAN HIEROGLYPH U008;Lo;0;L;;;;;N;;;;; +1333D;EGYPTIAN HIEROGLYPH U009;Lo;0;L;;;;;N;;;;; +1333E;EGYPTIAN HIEROGLYPH U010;Lo;0;L;;;;;N;;;;; +1333F;EGYPTIAN HIEROGLYPH U011;Lo;0;L;;;;;N;;;;; +13340;EGYPTIAN HIEROGLYPH U012;Lo;0;L;;;;;N;;;;; +13341;EGYPTIAN HIEROGLYPH U013;Lo;0;L;;;;;N;;;;; +13342;EGYPTIAN HIEROGLYPH U014;Lo;0;L;;;;;N;;;;; +13343;EGYPTIAN HIEROGLYPH U015;Lo;0;L;;;;;N;;;;; +13344;EGYPTIAN HIEROGLYPH U016;Lo;0;L;;;;;N;;;;; +13345;EGYPTIAN HIEROGLYPH U017;Lo;0;L;;;;;N;;;;; +13346;EGYPTIAN HIEROGLYPH U018;Lo;0;L;;;;;N;;;;; +13347;EGYPTIAN HIEROGLYPH U019;Lo;0;L;;;;;N;;;;; +13348;EGYPTIAN HIEROGLYPH U020;Lo;0;L;;;;;N;;;;; +13349;EGYPTIAN HIEROGLYPH U021;Lo;0;L;;;;;N;;;;; +1334A;EGYPTIAN HIEROGLYPH U022;Lo;0;L;;;;;N;;;;; +1334B;EGYPTIAN HIEROGLYPH U023;Lo;0;L;;;;;N;;;;; +1334C;EGYPTIAN HIEROGLYPH U023A;Lo;0;L;;;;;N;;;;; +1334D;EGYPTIAN HIEROGLYPH U024;Lo;0;L;;;;;N;;;;; +1334E;EGYPTIAN HIEROGLYPH U025;Lo;0;L;;;;;N;;;;; +1334F;EGYPTIAN HIEROGLYPH U026;Lo;0;L;;;;;N;;;;; +13350;EGYPTIAN HIEROGLYPH U027;Lo;0;L;;;;;N;;;;; +13351;EGYPTIAN HIEROGLYPH U028;Lo;0;L;;;;;N;;;;; +13352;EGYPTIAN HIEROGLYPH U029;Lo;0;L;;;;;N;;;;; +13353;EGYPTIAN HIEROGLYPH U029A;Lo;0;L;;;;;N;;;;; +13354;EGYPTIAN HIEROGLYPH U030;Lo;0;L;;;;;N;;;;; +13355;EGYPTIAN HIEROGLYPH U031;Lo;0;L;;;;;N;;;;; +13356;EGYPTIAN HIEROGLYPH U032;Lo;0;L;;;;;N;;;;; +13357;EGYPTIAN HIEROGLYPH U032A;Lo;0;L;;;;;N;;;;; +13358;EGYPTIAN HIEROGLYPH U033;Lo;0;L;;;;;N;;;;; +13359;EGYPTIAN HIEROGLYPH U034;Lo;0;L;;;;;N;;;;; +1335A;EGYPTIAN HIEROGLYPH U035;Lo;0;L;;;;;N;;;;; +1335B;EGYPTIAN HIEROGLYPH U036;Lo;0;L;;;;;N;;;;; +1335C;EGYPTIAN HIEROGLYPH U037;Lo;0;L;;;;;N;;;;; +1335D;EGYPTIAN HIEROGLYPH U038;Lo;0;L;;;;;N;;;;; +1335E;EGYPTIAN HIEROGLYPH U039;Lo;0;L;;;;;N;;;;; +1335F;EGYPTIAN HIEROGLYPH U040;Lo;0;L;;;;;N;;;;; +13360;EGYPTIAN HIEROGLYPH U041;Lo;0;L;;;;;N;;;;; +13361;EGYPTIAN HIEROGLYPH U042;Lo;0;L;;;;;N;;;;; +13362;EGYPTIAN HIEROGLYPH V001;Lo;0;L;;;;;N;;;;; +13363;EGYPTIAN HIEROGLYPH V001A;Lo;0;L;;;;;N;;;;; +13364;EGYPTIAN HIEROGLYPH V001B;Lo;0;L;;;;;N;;;;; +13365;EGYPTIAN HIEROGLYPH V001C;Lo;0;L;;;;;N;;;;; +13366;EGYPTIAN HIEROGLYPH V001D;Lo;0;L;;;;;N;;;;; +13367;EGYPTIAN HIEROGLYPH V001E;Lo;0;L;;;;;N;;;;; +13368;EGYPTIAN HIEROGLYPH V001F;Lo;0;L;;;;;N;;;;; +13369;EGYPTIAN HIEROGLYPH V001G;Lo;0;L;;;;;N;;;;; +1336A;EGYPTIAN HIEROGLYPH V001H;Lo;0;L;;;;;N;;;;; +1336B;EGYPTIAN HIEROGLYPH V001I;Lo;0;L;;;;;N;;;;; +1336C;EGYPTIAN HIEROGLYPH V002;Lo;0;L;;;;;N;;;;; +1336D;EGYPTIAN HIEROGLYPH V002A;Lo;0;L;;;;;N;;;;; +1336E;EGYPTIAN HIEROGLYPH V003;Lo;0;L;;;;;N;;;;; +1336F;EGYPTIAN HIEROGLYPH V004;Lo;0;L;;;;;N;;;;; +13370;EGYPTIAN HIEROGLYPH V005;Lo;0;L;;;;;N;;;;; +13371;EGYPTIAN HIEROGLYPH V006;Lo;0;L;;;;;N;;;;; +13372;EGYPTIAN HIEROGLYPH V007;Lo;0;L;;;;;N;;;;; +13373;EGYPTIAN HIEROGLYPH V007A;Lo;0;L;;;;;N;;;;; +13374;EGYPTIAN HIEROGLYPH V007B;Lo;0;L;;;;;N;;;;; +13375;EGYPTIAN HIEROGLYPH V008;Lo;0;L;;;;;N;;;;; +13376;EGYPTIAN HIEROGLYPH V009;Lo;0;L;;;;;N;;;;; +13377;EGYPTIAN HIEROGLYPH V010;Lo;0;L;;;;;N;;;;; +13378;EGYPTIAN HIEROGLYPH V011;Lo;0;L;;;;;N;;;;; +13379;EGYPTIAN HIEROGLYPH V011A;Lo;0;L;;;;;N;;;;; +1337A;EGYPTIAN HIEROGLYPH V011B;Lo;0;L;;;;;N;;;;; +1337B;EGYPTIAN HIEROGLYPH V011C;Lo;0;L;;;;;N;;;;; +1337C;EGYPTIAN HIEROGLYPH V012;Lo;0;L;;;;;N;;;;; +1337D;EGYPTIAN HIEROGLYPH V012A;Lo;0;L;;;;;N;;;;; +1337E;EGYPTIAN HIEROGLYPH V012B;Lo;0;L;;;;;N;;;;; +1337F;EGYPTIAN HIEROGLYPH V013;Lo;0;L;;;;;N;;;;; +13380;EGYPTIAN HIEROGLYPH V014;Lo;0;L;;;;;N;;;;; +13381;EGYPTIAN HIEROGLYPH V015;Lo;0;L;;;;;N;;;;; +13382;EGYPTIAN HIEROGLYPH V016;Lo;0;L;;;;;N;;;;; +13383;EGYPTIAN HIEROGLYPH V017;Lo;0;L;;;;;N;;;;; +13384;EGYPTIAN HIEROGLYPH V018;Lo;0;L;;;;;N;;;;; +13385;EGYPTIAN HIEROGLYPH V019;Lo;0;L;;;;;N;;;;; +13386;EGYPTIAN HIEROGLYPH V020;Lo;0;L;;;;;N;;;;; +13387;EGYPTIAN HIEROGLYPH V020A;Lo;0;L;;;;;N;;;;; +13388;EGYPTIAN HIEROGLYPH V020B;Lo;0;L;;;;;N;;;;; +13389;EGYPTIAN HIEROGLYPH V020C;Lo;0;L;;;;;N;;;;; +1338A;EGYPTIAN HIEROGLYPH V020D;Lo;0;L;;;;;N;;;;; +1338B;EGYPTIAN HIEROGLYPH V020E;Lo;0;L;;;;;N;;;;; +1338C;EGYPTIAN HIEROGLYPH V020F;Lo;0;L;;;;;N;;;;; +1338D;EGYPTIAN HIEROGLYPH V020G;Lo;0;L;;;;;N;;;;; +1338E;EGYPTIAN HIEROGLYPH V020H;Lo;0;L;;;;;N;;;;; +1338F;EGYPTIAN HIEROGLYPH V020I;Lo;0;L;;;;;N;;;;; +13390;EGYPTIAN HIEROGLYPH V020J;Lo;0;L;;;;;N;;;;; +13391;EGYPTIAN HIEROGLYPH V020K;Lo;0;L;;;;;N;;;;; +13392;EGYPTIAN HIEROGLYPH V020L;Lo;0;L;;;;;N;;;;; +13393;EGYPTIAN HIEROGLYPH V021;Lo;0;L;;;;;N;;;;; +13394;EGYPTIAN HIEROGLYPH V022;Lo;0;L;;;;;N;;;;; +13395;EGYPTIAN HIEROGLYPH V023;Lo;0;L;;;;;N;;;;; +13396;EGYPTIAN HIEROGLYPH V023A;Lo;0;L;;;;;N;;;;; +13397;EGYPTIAN HIEROGLYPH V024;Lo;0;L;;;;;N;;;;; +13398;EGYPTIAN HIEROGLYPH V025;Lo;0;L;;;;;N;;;;; +13399;EGYPTIAN HIEROGLYPH V026;Lo;0;L;;;;;N;;;;; +1339A;EGYPTIAN HIEROGLYPH V027;Lo;0;L;;;;;N;;;;; +1339B;EGYPTIAN HIEROGLYPH V028;Lo;0;L;;;;;N;;;;; +1339C;EGYPTIAN HIEROGLYPH V028A;Lo;0;L;;;;;N;;;;; +1339D;EGYPTIAN HIEROGLYPH V029;Lo;0;L;;;;;N;;;;; +1339E;EGYPTIAN HIEROGLYPH V029A;Lo;0;L;;;;;N;;;;; +1339F;EGYPTIAN HIEROGLYPH V030;Lo;0;L;;;;;N;;;;; +133A0;EGYPTIAN HIEROGLYPH V030A;Lo;0;L;;;;;N;;;;; +133A1;EGYPTIAN HIEROGLYPH V031;Lo;0;L;;;;;N;;;;; +133A2;EGYPTIAN HIEROGLYPH V031A;Lo;0;L;;;;;N;;;;; +133A3;EGYPTIAN HIEROGLYPH V032;Lo;0;L;;;;;N;;;;; +133A4;EGYPTIAN HIEROGLYPH V033;Lo;0;L;;;;;N;;;;; +133A5;EGYPTIAN HIEROGLYPH V033A;Lo;0;L;;;;;N;;;;; +133A6;EGYPTIAN HIEROGLYPH V034;Lo;0;L;;;;;N;;;;; +133A7;EGYPTIAN HIEROGLYPH V035;Lo;0;L;;;;;N;;;;; +133A8;EGYPTIAN HIEROGLYPH V036;Lo;0;L;;;;;N;;;;; +133A9;EGYPTIAN HIEROGLYPH V037;Lo;0;L;;;;;N;;;;; +133AA;EGYPTIAN HIEROGLYPH V037A;Lo;0;L;;;;;N;;;;; +133AB;EGYPTIAN HIEROGLYPH V038;Lo;0;L;;;;;N;;;;; +133AC;EGYPTIAN HIEROGLYPH V039;Lo;0;L;;;;;N;;;;; +133AD;EGYPTIAN HIEROGLYPH V040;Lo;0;L;;;;;N;;;;; +133AE;EGYPTIAN HIEROGLYPH V040A;Lo;0;L;;;;;N;;;;; +133AF;EGYPTIAN HIEROGLYPH W001;Lo;0;L;;;;;N;;;;; +133B0;EGYPTIAN HIEROGLYPH W002;Lo;0;L;;;;;N;;;;; +133B1;EGYPTIAN HIEROGLYPH W003;Lo;0;L;;;;;N;;;;; +133B2;EGYPTIAN HIEROGLYPH W003A;Lo;0;L;;;;;N;;;;; +133B3;EGYPTIAN HIEROGLYPH W004;Lo;0;L;;;;;N;;;;; +133B4;EGYPTIAN HIEROGLYPH W005;Lo;0;L;;;;;N;;;;; +133B5;EGYPTIAN HIEROGLYPH W006;Lo;0;L;;;;;N;;;;; +133B6;EGYPTIAN HIEROGLYPH W007;Lo;0;L;;;;;N;;;;; +133B7;EGYPTIAN HIEROGLYPH W008;Lo;0;L;;;;;N;;;;; +133B8;EGYPTIAN HIEROGLYPH W009;Lo;0;L;;;;;N;;;;; +133B9;EGYPTIAN HIEROGLYPH W009A;Lo;0;L;;;;;N;;;;; +133BA;EGYPTIAN HIEROGLYPH W010;Lo;0;L;;;;;N;;;;; +133BB;EGYPTIAN HIEROGLYPH W010A;Lo;0;L;;;;;N;;;;; +133BC;EGYPTIAN HIEROGLYPH W011;Lo;0;L;;;;;N;;;;; +133BD;EGYPTIAN HIEROGLYPH W012;Lo;0;L;;;;;N;;;;; +133BE;EGYPTIAN HIEROGLYPH W013;Lo;0;L;;;;;N;;;;; +133BF;EGYPTIAN HIEROGLYPH W014;Lo;0;L;;;;;N;;;;; +133C0;EGYPTIAN HIEROGLYPH W014A;Lo;0;L;;;;;N;;;;; +133C1;EGYPTIAN HIEROGLYPH W015;Lo;0;L;;;;;N;;;;; +133C2;EGYPTIAN HIEROGLYPH W016;Lo;0;L;;;;;N;;;;; +133C3;EGYPTIAN HIEROGLYPH W017;Lo;0;L;;;;;N;;;;; +133C4;EGYPTIAN HIEROGLYPH W017A;Lo;0;L;;;;;N;;;;; +133C5;EGYPTIAN HIEROGLYPH W018;Lo;0;L;;;;;N;;;;; +133C6;EGYPTIAN HIEROGLYPH W018A;Lo;0;L;;;;;N;;;;; +133C7;EGYPTIAN HIEROGLYPH W019;Lo;0;L;;;;;N;;;;; +133C8;EGYPTIAN HIEROGLYPH W020;Lo;0;L;;;;;N;;;;; +133C9;EGYPTIAN HIEROGLYPH W021;Lo;0;L;;;;;N;;;;; +133CA;EGYPTIAN HIEROGLYPH W022;Lo;0;L;;;;;N;;;;; +133CB;EGYPTIAN HIEROGLYPH W023;Lo;0;L;;;;;N;;;;; +133CC;EGYPTIAN HIEROGLYPH W024;Lo;0;L;;;;;N;;;;; +133CD;EGYPTIAN HIEROGLYPH W024A;Lo;0;L;;;;;N;;;;; +133CE;EGYPTIAN HIEROGLYPH W025;Lo;0;L;;;;;N;;;;; +133CF;EGYPTIAN HIEROGLYPH X001;Lo;0;L;;;;;N;;;;; +133D0;EGYPTIAN HIEROGLYPH X002;Lo;0;L;;;;;N;;;;; +133D1;EGYPTIAN HIEROGLYPH X003;Lo;0;L;;;;;N;;;;; +133D2;EGYPTIAN HIEROGLYPH X004;Lo;0;L;;;;;N;;;;; +133D3;EGYPTIAN HIEROGLYPH X004A;Lo;0;L;;;;;N;;;;; +133D4;EGYPTIAN HIEROGLYPH X004B;Lo;0;L;;;;;N;;;;; +133D5;EGYPTIAN HIEROGLYPH X005;Lo;0;L;;;;;N;;;;; +133D6;EGYPTIAN HIEROGLYPH X006;Lo;0;L;;;;;N;;;;; +133D7;EGYPTIAN HIEROGLYPH X006A;Lo;0;L;;;;;N;;;;; +133D8;EGYPTIAN HIEROGLYPH X007;Lo;0;L;;;;;N;;;;; +133D9;EGYPTIAN HIEROGLYPH X008;Lo;0;L;;;;;N;;;;; +133DA;EGYPTIAN HIEROGLYPH X008A;Lo;0;L;;;;;N;;;;; +133DB;EGYPTIAN HIEROGLYPH Y001;Lo;0;L;;;;;N;;;;; +133DC;EGYPTIAN HIEROGLYPH Y001A;Lo;0;L;;;;;N;;;;; +133DD;EGYPTIAN HIEROGLYPH Y002;Lo;0;L;;;;;N;;;;; +133DE;EGYPTIAN HIEROGLYPH Y003;Lo;0;L;;;;;N;;;;; +133DF;EGYPTIAN HIEROGLYPH Y004;Lo;0;L;;;;;N;;;;; +133E0;EGYPTIAN HIEROGLYPH Y005;Lo;0;L;;;;;N;;;;; +133E1;EGYPTIAN HIEROGLYPH Y006;Lo;0;L;;;;;N;;;;; +133E2;EGYPTIAN HIEROGLYPH Y007;Lo;0;L;;;;;N;;;;; +133E3;EGYPTIAN HIEROGLYPH Y008;Lo;0;L;;;;;N;;;;; +133E4;EGYPTIAN HIEROGLYPH Z001;Lo;0;L;;;;;N;;;;; +133E5;EGYPTIAN HIEROGLYPH Z002;Lo;0;L;;;;;N;;;;; +133E6;EGYPTIAN HIEROGLYPH Z002A;Lo;0;L;;;;;N;;;;; +133E7;EGYPTIAN HIEROGLYPH Z002B;Lo;0;L;;;;;N;;;;; +133E8;EGYPTIAN HIEROGLYPH Z002C;Lo;0;L;;;;;N;;;;; +133E9;EGYPTIAN HIEROGLYPH Z002D;Lo;0;L;;;;;N;;;;; +133EA;EGYPTIAN HIEROGLYPH Z003;Lo;0;L;;;;;N;;;;; +133EB;EGYPTIAN HIEROGLYPH Z003A;Lo;0;L;;;;;N;;;;; +133EC;EGYPTIAN HIEROGLYPH Z003B;Lo;0;L;;;;;N;;;;; +133ED;EGYPTIAN HIEROGLYPH Z004;Lo;0;L;;;;;N;;;;; +133EE;EGYPTIAN HIEROGLYPH Z004A;Lo;0;L;;;;;N;;;;; +133EF;EGYPTIAN HIEROGLYPH Z005;Lo;0;L;;;;;N;;;;; +133F0;EGYPTIAN HIEROGLYPH Z005A;Lo;0;L;;;;;N;;;;; +133F1;EGYPTIAN HIEROGLYPH Z006;Lo;0;L;;;;;N;;;;; +133F2;EGYPTIAN HIEROGLYPH Z007;Lo;0;L;;;;;N;;;;; +133F3;EGYPTIAN HIEROGLYPH Z008;Lo;0;L;;;;;N;;;;; +133F4;EGYPTIAN HIEROGLYPH Z009;Lo;0;L;;;;;N;;;;; +133F5;EGYPTIAN HIEROGLYPH Z010;Lo;0;L;;;;;N;;;;; +133F6;EGYPTIAN HIEROGLYPH Z011;Lo;0;L;;;;;N;;;;; +133F7;EGYPTIAN HIEROGLYPH Z012;Lo;0;L;;;;;N;;;;; +133F8;EGYPTIAN HIEROGLYPH Z013;Lo;0;L;;;;;N;;;;; +133F9;EGYPTIAN HIEROGLYPH Z014;Lo;0;L;;;;;N;;;;; +133FA;EGYPTIAN HIEROGLYPH Z015;Lo;0;L;;;;;N;;;;; +133FB;EGYPTIAN HIEROGLYPH Z015A;Lo;0;L;;;;;N;;;;; +133FC;EGYPTIAN HIEROGLYPH Z015B;Lo;0;L;;;;;N;;;;; +133FD;EGYPTIAN HIEROGLYPH Z015C;Lo;0;L;;;;;N;;;;; +133FE;EGYPTIAN HIEROGLYPH Z015D;Lo;0;L;;;;;N;;;;; +133FF;EGYPTIAN HIEROGLYPH Z015E;Lo;0;L;;;;;N;;;;; +13400;EGYPTIAN HIEROGLYPH Z015F;Lo;0;L;;;;;N;;;;; +13401;EGYPTIAN HIEROGLYPH Z015G;Lo;0;L;;;;;N;;;;; +13402;EGYPTIAN HIEROGLYPH Z015H;Lo;0;L;;;;;N;;;;; +13403;EGYPTIAN HIEROGLYPH Z015I;Lo;0;L;;;;;N;;;;; +13404;EGYPTIAN HIEROGLYPH Z016;Lo;0;L;;;;;N;;;;; +13405;EGYPTIAN HIEROGLYPH Z016A;Lo;0;L;;;;;N;;;;; +13406;EGYPTIAN HIEROGLYPH Z016B;Lo;0;L;;;;;N;;;;; +13407;EGYPTIAN HIEROGLYPH Z016C;Lo;0;L;;;;;N;;;;; +13408;EGYPTIAN HIEROGLYPH Z016D;Lo;0;L;;;;;N;;;;; +13409;EGYPTIAN HIEROGLYPH Z016E;Lo;0;L;;;;;N;;;;; +1340A;EGYPTIAN HIEROGLYPH Z016F;Lo;0;L;;;;;N;;;;; +1340B;EGYPTIAN HIEROGLYPH Z016G;Lo;0;L;;;;;N;;;;; +1340C;EGYPTIAN HIEROGLYPH Z016H;Lo;0;L;;;;;N;;;;; +1340D;EGYPTIAN HIEROGLYPH AA001;Lo;0;L;;;;;N;;;;; +1340E;EGYPTIAN HIEROGLYPH AA002;Lo;0;L;;;;;N;;;;; +1340F;EGYPTIAN HIEROGLYPH AA003;Lo;0;L;;;;;N;;;;; +13410;EGYPTIAN HIEROGLYPH AA004;Lo;0;L;;;;;N;;;;; +13411;EGYPTIAN HIEROGLYPH AA005;Lo;0;L;;;;;N;;;;; +13412;EGYPTIAN HIEROGLYPH AA006;Lo;0;L;;;;;N;;;;; +13413;EGYPTIAN HIEROGLYPH AA007;Lo;0;L;;;;;N;;;;; +13414;EGYPTIAN HIEROGLYPH AA007A;Lo;0;L;;;;;N;;;;; +13415;EGYPTIAN HIEROGLYPH AA007B;Lo;0;L;;;;;N;;;;; +13416;EGYPTIAN HIEROGLYPH AA008;Lo;0;L;;;;;N;;;;; +13417;EGYPTIAN HIEROGLYPH AA009;Lo;0;L;;;;;N;;;;; +13418;EGYPTIAN HIEROGLYPH AA010;Lo;0;L;;;;;N;;;;; +13419;EGYPTIAN HIEROGLYPH AA011;Lo;0;L;;;;;N;;;;; +1341A;EGYPTIAN HIEROGLYPH AA012;Lo;0;L;;;;;N;;;;; +1341B;EGYPTIAN HIEROGLYPH AA013;Lo;0;L;;;;;N;;;;; +1341C;EGYPTIAN HIEROGLYPH AA014;Lo;0;L;;;;;N;;;;; +1341D;EGYPTIAN HIEROGLYPH AA015;Lo;0;L;;;;;N;;;;; +1341E;EGYPTIAN HIEROGLYPH AA016;Lo;0;L;;;;;N;;;;; +1341F;EGYPTIAN HIEROGLYPH AA017;Lo;0;L;;;;;N;;;;; +13420;EGYPTIAN HIEROGLYPH AA018;Lo;0;L;;;;;N;;;;; +13421;EGYPTIAN HIEROGLYPH AA019;Lo;0;L;;;;;N;;;;; +13422;EGYPTIAN HIEROGLYPH AA020;Lo;0;L;;;;;N;;;;; +13423;EGYPTIAN HIEROGLYPH AA021;Lo;0;L;;;;;N;;;;; +13424;EGYPTIAN HIEROGLYPH AA022;Lo;0;L;;;;;N;;;;; +13425;EGYPTIAN HIEROGLYPH AA023;Lo;0;L;;;;;N;;;;; +13426;EGYPTIAN HIEROGLYPH AA024;Lo;0;L;;;;;N;;;;; +13427;EGYPTIAN HIEROGLYPH AA025;Lo;0;L;;;;;N;;;;; +13428;EGYPTIAN HIEROGLYPH AA026;Lo;0;L;;;;;N;;;;; +13429;EGYPTIAN HIEROGLYPH AA027;Lo;0;L;;;;;N;;;;; +1342A;EGYPTIAN HIEROGLYPH AA028;Lo;0;L;;;;;N;;;;; +1342B;EGYPTIAN HIEROGLYPH AA029;Lo;0;L;;;;;N;;;;; +1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;; +1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;; +1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;; +16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;; +16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;; +16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; +16803;BAMUM LETTER PHASE-A PON MFON PIPAEMBA;Lo;0;L;;;;;N;;;;; +16804;BAMUM LETTER PHASE-A NAA MFON;Lo;0;L;;;;;N;;;;; +16805;BAMUM LETTER PHASE-A SHUENSHUET;Lo;0;L;;;;;N;;;;; +16806;BAMUM LETTER PHASE-A TITA MFON;Lo;0;L;;;;;N;;;;; +16807;BAMUM LETTER PHASE-A NZA MFON;Lo;0;L;;;;;N;;;;; +16808;BAMUM LETTER PHASE-A SHINDA PA NJI;Lo;0;L;;;;;N;;;;; +16809;BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; +1680A;BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA;Lo;0;L;;;;;N;;;;; +1680B;BAMUM LETTER PHASE-A MAEMBGBIEE;Lo;0;L;;;;;N;;;;; +1680C;BAMUM LETTER PHASE-A TU MAEMBA;Lo;0;L;;;;;N;;;;; +1680D;BAMUM LETTER PHASE-A NGANGU;Lo;0;L;;;;;N;;;;; +1680E;BAMUM LETTER PHASE-A MAEMVEUX;Lo;0;L;;;;;N;;;;; +1680F;BAMUM LETTER PHASE-A MANSUAE;Lo;0;L;;;;;N;;;;; +16810;BAMUM LETTER PHASE-A MVEUAENGAM;Lo;0;L;;;;;N;;;;; +16811;BAMUM LETTER PHASE-A SEUNYAM;Lo;0;L;;;;;N;;;;; +16812;BAMUM LETTER PHASE-A NTOQPEN;Lo;0;L;;;;;N;;;;; +16813;BAMUM LETTER PHASE-A KEUKEUTNDA;Lo;0;L;;;;;N;;;;; +16814;BAMUM LETTER PHASE-A NKINDI;Lo;0;L;;;;;N;;;;; +16815;BAMUM LETTER PHASE-A SUU;Lo;0;L;;;;;N;;;;; +16816;BAMUM LETTER PHASE-A NGKUENZEUM;Lo;0;L;;;;;N;;;;; +16817;BAMUM LETTER PHASE-A LAPAQ;Lo;0;L;;;;;N;;;;; +16818;BAMUM LETTER PHASE-A LET KUT;Lo;0;L;;;;;N;;;;; +16819;BAMUM LETTER PHASE-A NTAP MFAA;Lo;0;L;;;;;N;;;;; +1681A;BAMUM LETTER PHASE-A MAEKEUP;Lo;0;L;;;;;N;;;;; +1681B;BAMUM LETTER PHASE-A PASHAE;Lo;0;L;;;;;N;;;;; +1681C;BAMUM LETTER PHASE-A GHEUAERAE;Lo;0;L;;;;;N;;;;; +1681D;BAMUM LETTER PHASE-A PAMSHAE;Lo;0;L;;;;;N;;;;; +1681E;BAMUM LETTER PHASE-A MON NGGEUAET;Lo;0;L;;;;;N;;;;; +1681F;BAMUM LETTER PHASE-A NZUN MEUT;Lo;0;L;;;;;N;;;;; +16820;BAMUM LETTER PHASE-A U YUQ NAE;Lo;0;L;;;;;N;;;;; +16821;BAMUM LETTER PHASE-A GHEUAEGHEUAE;Lo;0;L;;;;;N;;;;; +16822;BAMUM LETTER PHASE-A NTAP NTAA;Lo;0;L;;;;;N;;;;; +16823;BAMUM LETTER PHASE-A SISA;Lo;0;L;;;;;N;;;;; +16824;BAMUM LETTER PHASE-A MGBASA;Lo;0;L;;;;;N;;;;; +16825;BAMUM LETTER PHASE-A MEUNJOMNDEUQ;Lo;0;L;;;;;N;;;;; +16826;BAMUM LETTER PHASE-A MOOMPUQ;Lo;0;L;;;;;N;;;;; +16827;BAMUM LETTER PHASE-A KAFA;Lo;0;L;;;;;N;;;;; +16828;BAMUM LETTER PHASE-A PA LEERAEWA;Lo;0;L;;;;;N;;;;; +16829;BAMUM LETTER PHASE-A NDA LEERAEWA;Lo;0;L;;;;;N;;;;; +1682A;BAMUM LETTER PHASE-A PET;Lo;0;L;;;;;N;;;;; +1682B;BAMUM LETTER PHASE-A MAEMKPEN;Lo;0;L;;;;;N;;;;; +1682C;BAMUM LETTER PHASE-A NIKA;Lo;0;L;;;;;N;;;;; +1682D;BAMUM LETTER PHASE-A PUP;Lo;0;L;;;;;N;;;;; +1682E;BAMUM LETTER PHASE-A TUAEP;Lo;0;L;;;;;N;;;;; +1682F;BAMUM LETTER PHASE-A LUAEP;Lo;0;L;;;;;N;;;;; +16830;BAMUM LETTER PHASE-A SONJAM;Lo;0;L;;;;;N;;;;; +16831;BAMUM LETTER PHASE-A TEUTEUWEN;Lo;0;L;;;;;N;;;;; +16832;BAMUM LETTER PHASE-A MAENYI;Lo;0;L;;;;;N;;;;; +16833;BAMUM LETTER PHASE-A KET;Lo;0;L;;;;;N;;;;; +16834;BAMUM LETTER PHASE-A NDAANGGEUAET;Lo;0;L;;;;;N;;;;; +16835;BAMUM LETTER PHASE-A KUOQ;Lo;0;L;;;;;N;;;;; +16836;BAMUM LETTER PHASE-A MOOMEUT;Lo;0;L;;;;;N;;;;; +16837;BAMUM LETTER PHASE-A SHUM;Lo;0;L;;;;;N;;;;; +16838;BAMUM LETTER PHASE-A LOMMAE;Lo;0;L;;;;;N;;;;; +16839;BAMUM LETTER PHASE-A FIRI;Lo;0;L;;;;;N;;;;; +1683A;BAMUM LETTER PHASE-A ROM;Lo;0;L;;;;;N;;;;; +1683B;BAMUM LETTER PHASE-A KPOQ;Lo;0;L;;;;;N;;;;; +1683C;BAMUM LETTER PHASE-A SOQ;Lo;0;L;;;;;N;;;;; +1683D;BAMUM LETTER PHASE-A MAP PIEET;Lo;0;L;;;;;N;;;;; +1683E;BAMUM LETTER PHASE-A SHIRAE;Lo;0;L;;;;;N;;;;; +1683F;BAMUM LETTER PHASE-A NTAP;Lo;0;L;;;;;N;;;;; +16840;BAMUM LETTER PHASE-A SHOQ NSHUT YUM;Lo;0;L;;;;;N;;;;; +16841;BAMUM LETTER PHASE-A NYIT MONGKEUAEQ;Lo;0;L;;;;;N;;;;; +16842;BAMUM LETTER PHASE-A PAARAE;Lo;0;L;;;;;N;;;;; +16843;BAMUM LETTER PHASE-A NKAARAE;Lo;0;L;;;;;N;;;;; +16844;BAMUM LETTER PHASE-A UNKNOWN;Lo;0;L;;;;;N;;;;; +16845;BAMUM LETTER PHASE-A NGGEN;Lo;0;L;;;;;N;;;;; +16846;BAMUM LETTER PHASE-A MAESI;Lo;0;L;;;;;N;;;;; +16847;BAMUM LETTER PHASE-A NJAM;Lo;0;L;;;;;N;;;;; +16848;BAMUM LETTER PHASE-A MBANYI;Lo;0;L;;;;;N;;;;; +16849;BAMUM LETTER PHASE-A NYET;Lo;0;L;;;;;N;;;;; +1684A;BAMUM LETTER PHASE-A TEUAEN;Lo;0;L;;;;;N;;;;; +1684B;BAMUM LETTER PHASE-A SOT;Lo;0;L;;;;;N;;;;; +1684C;BAMUM LETTER PHASE-A PAAM;Lo;0;L;;;;;N;;;;; +1684D;BAMUM LETTER PHASE-A NSHIEE;Lo;0;L;;;;;N;;;;; +1684E;BAMUM LETTER PHASE-A MAEM;Lo;0;L;;;;;N;;;;; +1684F;BAMUM LETTER PHASE-A NYI;Lo;0;L;;;;;N;;;;; +16850;BAMUM LETTER PHASE-A KAQ;Lo;0;L;;;;;N;;;;; +16851;BAMUM LETTER PHASE-A NSHA;Lo;0;L;;;;;N;;;;; +16852;BAMUM LETTER PHASE-A VEE;Lo;0;L;;;;;N;;;;; +16853;BAMUM LETTER PHASE-A LU;Lo;0;L;;;;;N;;;;; +16854;BAMUM LETTER PHASE-A NEN;Lo;0;L;;;;;N;;;;; +16855;BAMUM LETTER PHASE-A NAQ;Lo;0;L;;;;;N;;;;; +16856;BAMUM LETTER PHASE-A MBAQ;Lo;0;L;;;;;N;;;;; +16857;BAMUM LETTER PHASE-B NSHUET;Lo;0;L;;;;;N;;;;; +16858;BAMUM LETTER PHASE-B TU MAEMGBIEE;Lo;0;L;;;;;N;;;;; +16859;BAMUM LETTER PHASE-B SIEE;Lo;0;L;;;;;N;;;;; +1685A;BAMUM LETTER PHASE-B SET TU;Lo;0;L;;;;;N;;;;; +1685B;BAMUM LETTER PHASE-B LOM NTEUM;Lo;0;L;;;;;N;;;;; +1685C;BAMUM LETTER PHASE-B MBA MAELEE;Lo;0;L;;;;;N;;;;; +1685D;BAMUM LETTER PHASE-B KIEEM;Lo;0;L;;;;;N;;;;; +1685E;BAMUM LETTER PHASE-B YEURAE;Lo;0;L;;;;;N;;;;; +1685F;BAMUM LETTER PHASE-B MBAARAE;Lo;0;L;;;;;N;;;;; +16860;BAMUM LETTER PHASE-B KAM;Lo;0;L;;;;;N;;;;; +16861;BAMUM LETTER PHASE-B PEESHI;Lo;0;L;;;;;N;;;;; +16862;BAMUM LETTER PHASE-B YAFU LEERAEWA;Lo;0;L;;;;;N;;;;; +16863;BAMUM LETTER PHASE-B LAM NSHUT NYAM;Lo;0;L;;;;;N;;;;; +16864;BAMUM LETTER PHASE-B NTIEE SHEUOQ;Lo;0;L;;;;;N;;;;; +16865;BAMUM LETTER PHASE-B NDU NJAA;Lo;0;L;;;;;N;;;;; +16866;BAMUM LETTER PHASE-B GHEUGHEUAEM;Lo;0;L;;;;;N;;;;; +16867;BAMUM LETTER PHASE-B PIT;Lo;0;L;;;;;N;;;;; +16868;BAMUM LETTER PHASE-B TU NSIEE;Lo;0;L;;;;;N;;;;; +16869;BAMUM LETTER PHASE-B SHET NJAQ;Lo;0;L;;;;;N;;;;; +1686A;BAMUM LETTER PHASE-B SHEUAEQTU;Lo;0;L;;;;;N;;;;; +1686B;BAMUM LETTER PHASE-B MFON TEUAEQ;Lo;0;L;;;;;N;;;;; +1686C;BAMUM LETTER PHASE-B MBIT MBAAKET;Lo;0;L;;;;;N;;;;; +1686D;BAMUM LETTER PHASE-B NYI NTEUM;Lo;0;L;;;;;N;;;;; +1686E;BAMUM LETTER PHASE-B KEUPUQ;Lo;0;L;;;;;N;;;;; +1686F;BAMUM LETTER PHASE-B GHEUGHEN;Lo;0;L;;;;;N;;;;; +16870;BAMUM LETTER PHASE-B KEUYEUX;Lo;0;L;;;;;N;;;;; +16871;BAMUM LETTER PHASE-B LAANAE;Lo;0;L;;;;;N;;;;; +16872;BAMUM LETTER PHASE-B PARUM;Lo;0;L;;;;;N;;;;; +16873;BAMUM LETTER PHASE-B VEUM;Lo;0;L;;;;;N;;;;; +16874;BAMUM LETTER PHASE-B NGKINDI MVOP;Lo;0;L;;;;;N;;;;; +16875;BAMUM LETTER PHASE-B NGGEU MBU;Lo;0;L;;;;;N;;;;; +16876;BAMUM LETTER PHASE-B WUAET;Lo;0;L;;;;;N;;;;; +16877;BAMUM LETTER PHASE-B SAKEUAE;Lo;0;L;;;;;N;;;;; +16878;BAMUM LETTER PHASE-B TAAM;Lo;0;L;;;;;N;;;;; +16879;BAMUM LETTER PHASE-B MEUQ;Lo;0;L;;;;;N;;;;; +1687A;BAMUM LETTER PHASE-B NGGUOQ;Lo;0;L;;;;;N;;;;; +1687B;BAMUM LETTER PHASE-B NGGUOQ LARGE;Lo;0;L;;;;;N;;;;; +1687C;BAMUM LETTER PHASE-B MFIYAQ;Lo;0;L;;;;;N;;;;; +1687D;BAMUM LETTER PHASE-B SUE;Lo;0;L;;;;;N;;;;; +1687E;BAMUM LETTER PHASE-B MBEURI;Lo;0;L;;;;;N;;;;; +1687F;BAMUM LETTER PHASE-B MONTIEEN;Lo;0;L;;;;;N;;;;; +16880;BAMUM LETTER PHASE-B NYAEMAE;Lo;0;L;;;;;N;;;;; +16881;BAMUM LETTER PHASE-B PUNGAAM;Lo;0;L;;;;;N;;;;; +16882;BAMUM LETTER PHASE-B MEUT NGGEET;Lo;0;L;;;;;N;;;;; +16883;BAMUM LETTER PHASE-B FEUX;Lo;0;L;;;;;N;;;;; +16884;BAMUM LETTER PHASE-B MBUOQ;Lo;0;L;;;;;N;;;;; +16885;BAMUM LETTER PHASE-B FEE;Lo;0;L;;;;;N;;;;; +16886;BAMUM LETTER PHASE-B KEUAEM;Lo;0;L;;;;;N;;;;; +16887;BAMUM LETTER PHASE-B MA NJEUAENA;Lo;0;L;;;;;N;;;;; +16888;BAMUM LETTER PHASE-B MA NJUQA;Lo;0;L;;;;;N;;;;; +16889;BAMUM LETTER PHASE-B LET;Lo;0;L;;;;;N;;;;; +1688A;BAMUM LETTER PHASE-B NGGAAM;Lo;0;L;;;;;N;;;;; +1688B;BAMUM LETTER PHASE-B NSEN;Lo;0;L;;;;;N;;;;; +1688C;BAMUM LETTER PHASE-B MA;Lo;0;L;;;;;N;;;;; +1688D;BAMUM LETTER PHASE-B KIQ;Lo;0;L;;;;;N;;;;; +1688E;BAMUM LETTER PHASE-B NGOM;Lo;0;L;;;;;N;;;;; +1688F;BAMUM LETTER PHASE-C NGKUE MAEMBA;Lo;0;L;;;;;N;;;;; +16890;BAMUM LETTER PHASE-C NZA;Lo;0;L;;;;;N;;;;; +16891;BAMUM LETTER PHASE-C YUM;Lo;0;L;;;;;N;;;;; +16892;BAMUM LETTER PHASE-C WANGKUOQ;Lo;0;L;;;;;N;;;;; +16893;BAMUM LETTER PHASE-C NGGEN;Lo;0;L;;;;;N;;;;; +16894;BAMUM LETTER PHASE-C NDEUAEREE;Lo;0;L;;;;;N;;;;; +16895;BAMUM LETTER PHASE-C NGKAQ;Lo;0;L;;;;;N;;;;; +16896;BAMUM LETTER PHASE-C GHARAE;Lo;0;L;;;;;N;;;;; +16897;BAMUM LETTER PHASE-C MBEEKEET;Lo;0;L;;;;;N;;;;; +16898;BAMUM LETTER PHASE-C GBAYI;Lo;0;L;;;;;N;;;;; +16899;BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN;Lo;0;L;;;;;N;;;;; +1689A;BAMUM LETTER PHASE-C NTU MBIT;Lo;0;L;;;;;N;;;;; +1689B;BAMUM LETTER PHASE-C MBEUM;Lo;0;L;;;;;N;;;;; +1689C;BAMUM LETTER PHASE-C PIRIEEN;Lo;0;L;;;;;N;;;;; +1689D;BAMUM LETTER PHASE-C NDOMBU;Lo;0;L;;;;;N;;;;; +1689E;BAMUM LETTER PHASE-C MBAA CABBAGE-TREE;Lo;0;L;;;;;N;;;;; +1689F;BAMUM LETTER PHASE-C KEUSHEUAEP;Lo;0;L;;;;;N;;;;; +168A0;BAMUM LETTER PHASE-C GHAP;Lo;0;L;;;;;N;;;;; +168A1;BAMUM LETTER PHASE-C KEUKAQ;Lo;0;L;;;;;N;;;;; +168A2;BAMUM LETTER PHASE-C YU MUOMAE;Lo;0;L;;;;;N;;;;; +168A3;BAMUM LETTER PHASE-C NZEUM;Lo;0;L;;;;;N;;;;; +168A4;BAMUM LETTER PHASE-C MBUE;Lo;0;L;;;;;N;;;;; +168A5;BAMUM LETTER PHASE-C NSEUAEN;Lo;0;L;;;;;N;;;;; +168A6;BAMUM LETTER PHASE-C MBIT;Lo;0;L;;;;;N;;;;; +168A7;BAMUM LETTER PHASE-C YEUQ;Lo;0;L;;;;;N;;;;; +168A8;BAMUM LETTER PHASE-C KPARAQ;Lo;0;L;;;;;N;;;;; +168A9;BAMUM LETTER PHASE-C KAA;Lo;0;L;;;;;N;;;;; +168AA;BAMUM LETTER PHASE-C SEUX;Lo;0;L;;;;;N;;;;; +168AB;BAMUM LETTER PHASE-C NDIDA;Lo;0;L;;;;;N;;;;; +168AC;BAMUM LETTER PHASE-C TAASHAE;Lo;0;L;;;;;N;;;;; +168AD;BAMUM LETTER PHASE-C NJUEQ;Lo;0;L;;;;;N;;;;; +168AE;BAMUM LETTER PHASE-C TITA YUE;Lo;0;L;;;;;N;;;;; +168AF;BAMUM LETTER PHASE-C SUAET;Lo;0;L;;;;;N;;;;; +168B0;BAMUM LETTER PHASE-C NGGUAEN NYAM;Lo;0;L;;;;;N;;;;; +168B1;BAMUM LETTER PHASE-C VEUX;Lo;0;L;;;;;N;;;;; +168B2;BAMUM LETTER PHASE-C NANSANAQ;Lo;0;L;;;;;N;;;;; +168B3;BAMUM LETTER PHASE-C MA KEUAERI;Lo;0;L;;;;;N;;;;; +168B4;BAMUM LETTER PHASE-C NTAA;Lo;0;L;;;;;N;;;;; +168B5;BAMUM LETTER PHASE-C NGGUON;Lo;0;L;;;;;N;;;;; +168B6;BAMUM LETTER PHASE-C LAP;Lo;0;L;;;;;N;;;;; +168B7;BAMUM LETTER PHASE-C MBIRIEEN;Lo;0;L;;;;;N;;;;; +168B8;BAMUM LETTER PHASE-C MGBASAQ;Lo;0;L;;;;;N;;;;; +168B9;BAMUM LETTER PHASE-C NTEUNGBA;Lo;0;L;;;;;N;;;;; +168BA;BAMUM LETTER PHASE-C TEUTEUX;Lo;0;L;;;;;N;;;;; +168BB;BAMUM LETTER PHASE-C NGGUM;Lo;0;L;;;;;N;;;;; +168BC;BAMUM LETTER PHASE-C FUE;Lo;0;L;;;;;N;;;;; +168BD;BAMUM LETTER PHASE-C NDEUT;Lo;0;L;;;;;N;;;;; +168BE;BAMUM LETTER PHASE-C NSA;Lo;0;L;;;;;N;;;;; +168BF;BAMUM LETTER PHASE-C NSHAQ;Lo;0;L;;;;;N;;;;; +168C0;BAMUM LETTER PHASE-C BUNG;Lo;0;L;;;;;N;;;;; +168C1;BAMUM LETTER PHASE-C VEUAEPEN;Lo;0;L;;;;;N;;;;; +168C2;BAMUM LETTER PHASE-C MBERAE;Lo;0;L;;;;;N;;;;; +168C3;BAMUM LETTER PHASE-C RU;Lo;0;L;;;;;N;;;;; +168C4;BAMUM LETTER PHASE-C NJAEM;Lo;0;L;;;;;N;;;;; +168C5;BAMUM LETTER PHASE-C LAM;Lo;0;L;;;;;N;;;;; +168C6;BAMUM LETTER PHASE-C TITUAEP;Lo;0;L;;;;;N;;;;; +168C7;BAMUM LETTER PHASE-C NSUOT NGOM;Lo;0;L;;;;;N;;;;; +168C8;BAMUM LETTER PHASE-C NJEEEE;Lo;0;L;;;;;N;;;;; +168C9;BAMUM LETTER PHASE-C KET;Lo;0;L;;;;;N;;;;; +168CA;BAMUM LETTER PHASE-C NGGU;Lo;0;L;;;;;N;;;;; +168CB;BAMUM LETTER PHASE-C MAESI;Lo;0;L;;;;;N;;;;; +168CC;BAMUM LETTER PHASE-C MBUAEM;Lo;0;L;;;;;N;;;;; +168CD;BAMUM LETTER PHASE-C LU;Lo;0;L;;;;;N;;;;; +168CE;BAMUM LETTER PHASE-C KUT;Lo;0;L;;;;;N;;;;; +168CF;BAMUM LETTER PHASE-C NJAM;Lo;0;L;;;;;N;;;;; +168D0;BAMUM LETTER PHASE-C NGOM;Lo;0;L;;;;;N;;;;; +168D1;BAMUM LETTER PHASE-C WUP;Lo;0;L;;;;;N;;;;; +168D2;BAMUM LETTER PHASE-C NGGUEET;Lo;0;L;;;;;N;;;;; +168D3;BAMUM LETTER PHASE-C NSOM;Lo;0;L;;;;;N;;;;; +168D4;BAMUM LETTER PHASE-C NTEN;Lo;0;L;;;;;N;;;;; +168D5;BAMUM LETTER PHASE-C KUOP NKAARAE;Lo;0;L;;;;;N;;;;; +168D6;BAMUM LETTER PHASE-C NSUN;Lo;0;L;;;;;N;;;;; +168D7;BAMUM LETTER PHASE-C NDAM;Lo;0;L;;;;;N;;;;; +168D8;BAMUM LETTER PHASE-C MA NSIEE;Lo;0;L;;;;;N;;;;; +168D9;BAMUM LETTER PHASE-C YAA;Lo;0;L;;;;;N;;;;; +168DA;BAMUM LETTER PHASE-C NDAP;Lo;0;L;;;;;N;;;;; +168DB;BAMUM LETTER PHASE-C SHUEQ;Lo;0;L;;;;;N;;;;; +168DC;BAMUM LETTER PHASE-C SETFON;Lo;0;L;;;;;N;;;;; +168DD;BAMUM LETTER PHASE-C MBI;Lo;0;L;;;;;N;;;;; +168DE;BAMUM LETTER PHASE-C MAEMBA;Lo;0;L;;;;;N;;;;; +168DF;BAMUM LETTER PHASE-C MBANYI;Lo;0;L;;;;;N;;;;; +168E0;BAMUM LETTER PHASE-C KEUSEUX;Lo;0;L;;;;;N;;;;; +168E1;BAMUM LETTER PHASE-C MBEUX;Lo;0;L;;;;;N;;;;; +168E2;BAMUM LETTER PHASE-C KEUM;Lo;0;L;;;;;N;;;;; +168E3;BAMUM LETTER PHASE-C MBAA PICKET;Lo;0;L;;;;;N;;;;; +168E4;BAMUM LETTER PHASE-C YUWOQ;Lo;0;L;;;;;N;;;;; +168E5;BAMUM LETTER PHASE-C NJEUX;Lo;0;L;;;;;N;;;;; +168E6;BAMUM LETTER PHASE-C MIEE;Lo;0;L;;;;;N;;;;; +168E7;BAMUM LETTER PHASE-C MUAE;Lo;0;L;;;;;N;;;;; +168E8;BAMUM LETTER PHASE-C SHIQ;Lo;0;L;;;;;N;;;;; +168E9;BAMUM LETTER PHASE-C KEN LAW;Lo;0;L;;;;;N;;;;; +168EA;BAMUM LETTER PHASE-C KEN FATIGUE;Lo;0;L;;;;;N;;;;; +168EB;BAMUM LETTER PHASE-C NGAQ;Lo;0;L;;;;;N;;;;; +168EC;BAMUM LETTER PHASE-C NAQ;Lo;0;L;;;;;N;;;;; +168ED;BAMUM LETTER PHASE-C LIQ;Lo;0;L;;;;;N;;;;; +168EE;BAMUM LETTER PHASE-C PIN;Lo;0;L;;;;;N;;;;; +168EF;BAMUM LETTER PHASE-C PEN;Lo;0;L;;;;;N;;;;; +168F0;BAMUM LETTER PHASE-C TET;Lo;0;L;;;;;N;;;;; +168F1;BAMUM LETTER PHASE-D MBUO;Lo;0;L;;;;;N;;;;; +168F2;BAMUM LETTER PHASE-D WAP;Lo;0;L;;;;;N;;;;; +168F3;BAMUM LETTER PHASE-D NJI;Lo;0;L;;;;;N;;;;; +168F4;BAMUM LETTER PHASE-D MFON;Lo;0;L;;;;;N;;;;; +168F5;BAMUM LETTER PHASE-D NJIEE;Lo;0;L;;;;;N;;;;; +168F6;BAMUM LETTER PHASE-D LIEE;Lo;0;L;;;;;N;;;;; +168F7;BAMUM LETTER PHASE-D NJEUT;Lo;0;L;;;;;N;;;;; +168F8;BAMUM LETTER PHASE-D NSHEE;Lo;0;L;;;;;N;;;;; +168F9;BAMUM LETTER PHASE-D NGGAAMAE;Lo;0;L;;;;;N;;;;; +168FA;BAMUM LETTER PHASE-D NYAM;Lo;0;L;;;;;N;;;;; +168FB;BAMUM LETTER PHASE-D WUAEN;Lo;0;L;;;;;N;;;;; +168FC;BAMUM LETTER PHASE-D NGKUN;Lo;0;L;;;;;N;;;;; +168FD;BAMUM LETTER PHASE-D SHEE;Lo;0;L;;;;;N;;;;; +168FE;BAMUM LETTER PHASE-D NGKAP;Lo;0;L;;;;;N;;;;; +168FF;BAMUM LETTER PHASE-D KEUAETMEUN;Lo;0;L;;;;;N;;;;; +16900;BAMUM LETTER PHASE-D TEUT;Lo;0;L;;;;;N;;;;; +16901;BAMUM LETTER PHASE-D SHEUAE;Lo;0;L;;;;;N;;;;; +16902;BAMUM LETTER PHASE-D NJAP;Lo;0;L;;;;;N;;;;; +16903;BAMUM LETTER PHASE-D SUE;Lo;0;L;;;;;N;;;;; +16904;BAMUM LETTER PHASE-D KET;Lo;0;L;;;;;N;;;;; +16905;BAMUM LETTER PHASE-D YAEMMAE;Lo;0;L;;;;;N;;;;; +16906;BAMUM LETTER PHASE-D KUOM;Lo;0;L;;;;;N;;;;; +16907;BAMUM LETTER PHASE-D SAP;Lo;0;L;;;;;N;;;;; +16908;BAMUM LETTER PHASE-D MFEUT;Lo;0;L;;;;;N;;;;; +16909;BAMUM LETTER PHASE-D NDEUX;Lo;0;L;;;;;N;;;;; +1690A;BAMUM LETTER PHASE-D MALEERI;Lo;0;L;;;;;N;;;;; +1690B;BAMUM LETTER PHASE-D MEUT;Lo;0;L;;;;;N;;;;; +1690C;BAMUM LETTER PHASE-D SEUAEQ;Lo;0;L;;;;;N;;;;; +1690D;BAMUM LETTER PHASE-D YEN;Lo;0;L;;;;;N;;;;; +1690E;BAMUM LETTER PHASE-D NJEUAEM;Lo;0;L;;;;;N;;;;; +1690F;BAMUM LETTER PHASE-D KEUOT MBUAE;Lo;0;L;;;;;N;;;;; +16910;BAMUM LETTER PHASE-D NGKEURI;Lo;0;L;;;;;N;;;;; +16911;BAMUM LETTER PHASE-D TU;Lo;0;L;;;;;N;;;;; +16912;BAMUM LETTER PHASE-D GHAA;Lo;0;L;;;;;N;;;;; +16913;BAMUM LETTER PHASE-D NGKYEE;Lo;0;L;;;;;N;;;;; +16914;BAMUM LETTER PHASE-D FEUFEUAET;Lo;0;L;;;;;N;;;;; +16915;BAMUM LETTER PHASE-D NDEE;Lo;0;L;;;;;N;;;;; +16916;BAMUM LETTER PHASE-D MGBOFUM;Lo;0;L;;;;;N;;;;; +16917;BAMUM LETTER PHASE-D LEUAEP;Lo;0;L;;;;;N;;;;; +16918;BAMUM LETTER PHASE-D NDON;Lo;0;L;;;;;N;;;;; +16919;BAMUM LETTER PHASE-D MONI;Lo;0;L;;;;;N;;;;; +1691A;BAMUM LETTER PHASE-D MGBEUN;Lo;0;L;;;;;N;;;;; +1691B;BAMUM LETTER PHASE-D PUUT;Lo;0;L;;;;;N;;;;; +1691C;BAMUM LETTER PHASE-D MGBIEE;Lo;0;L;;;;;N;;;;; +1691D;BAMUM LETTER PHASE-D MFO;Lo;0;L;;;;;N;;;;; +1691E;BAMUM LETTER PHASE-D LUM;Lo;0;L;;;;;N;;;;; +1691F;BAMUM LETTER PHASE-D NSIEEP;Lo;0;L;;;;;N;;;;; +16920;BAMUM LETTER PHASE-D MBAA;Lo;0;L;;;;;N;;;;; +16921;BAMUM LETTER PHASE-D KWAET;Lo;0;L;;;;;N;;;;; +16922;BAMUM LETTER PHASE-D NYET;Lo;0;L;;;;;N;;;;; +16923;BAMUM LETTER PHASE-D TEUAEN;Lo;0;L;;;;;N;;;;; +16924;BAMUM LETTER PHASE-D SOT;Lo;0;L;;;;;N;;;;; +16925;BAMUM LETTER PHASE-D YUWOQ;Lo;0;L;;;;;N;;;;; +16926;BAMUM LETTER PHASE-D KEUM;Lo;0;L;;;;;N;;;;; +16927;BAMUM LETTER PHASE-D RAEM;Lo;0;L;;;;;N;;;;; +16928;BAMUM LETTER PHASE-D TEEEE;Lo;0;L;;;;;N;;;;; +16929;BAMUM LETTER PHASE-D NGKEUAEQ;Lo;0;L;;;;;N;;;;; +1692A;BAMUM LETTER PHASE-D MFEUAE;Lo;0;L;;;;;N;;;;; +1692B;BAMUM LETTER PHASE-D NSIEET;Lo;0;L;;;;;N;;;;; +1692C;BAMUM LETTER PHASE-D KEUP;Lo;0;L;;;;;N;;;;; +1692D;BAMUM LETTER PHASE-D PIP;Lo;0;L;;;;;N;;;;; +1692E;BAMUM LETTER PHASE-D PEUTAE;Lo;0;L;;;;;N;;;;; +1692F;BAMUM LETTER PHASE-D NYUE;Lo;0;L;;;;;N;;;;; +16930;BAMUM LETTER PHASE-D LET;Lo;0;L;;;;;N;;;;; +16931;BAMUM LETTER PHASE-D NGGAAM;Lo;0;L;;;;;N;;;;; +16932;BAMUM LETTER PHASE-D MFIEE;Lo;0;L;;;;;N;;;;; +16933;BAMUM LETTER PHASE-D NGGWAEN;Lo;0;L;;;;;N;;;;; +16934;BAMUM LETTER PHASE-D YUOM;Lo;0;L;;;;;N;;;;; +16935;BAMUM LETTER PHASE-D PAP;Lo;0;L;;;;;N;;;;; +16936;BAMUM LETTER PHASE-D YUOP;Lo;0;L;;;;;N;;;;; +16937;BAMUM LETTER PHASE-D NDAM;Lo;0;L;;;;;N;;;;; +16938;BAMUM LETTER PHASE-D NTEUM;Lo;0;L;;;;;N;;;;; +16939;BAMUM LETTER PHASE-D SUAE;Lo;0;L;;;;;N;;;;; +1693A;BAMUM LETTER PHASE-D KUN;Lo;0;L;;;;;N;;;;; +1693B;BAMUM LETTER PHASE-D NGGEUX;Lo;0;L;;;;;N;;;;; +1693C;BAMUM LETTER PHASE-D NGKIEE;Lo;0;L;;;;;N;;;;; +1693D;BAMUM LETTER PHASE-D TUOT;Lo;0;L;;;;;N;;;;; +1693E;BAMUM LETTER PHASE-D MEUN;Lo;0;L;;;;;N;;;;; +1693F;BAMUM LETTER PHASE-D KUQ;Lo;0;L;;;;;N;;;;; +16940;BAMUM LETTER PHASE-D NSUM;Lo;0;L;;;;;N;;;;; +16941;BAMUM LETTER PHASE-D TEUN;Lo;0;L;;;;;N;;;;; +16942;BAMUM LETTER PHASE-D MAENJET;Lo;0;L;;;;;N;;;;; +16943;BAMUM LETTER PHASE-D NGGAP;Lo;0;L;;;;;N;;;;; +16944;BAMUM LETTER PHASE-D LEUM;Lo;0;L;;;;;N;;;;; +16945;BAMUM LETTER PHASE-D NGGUOM;Lo;0;L;;;;;N;;;;; +16946;BAMUM LETTER PHASE-D NSHUT;Lo;0;L;;;;;N;;;;; +16947;BAMUM LETTER PHASE-D NJUEQ;Lo;0;L;;;;;N;;;;; +16948;BAMUM LETTER PHASE-D GHEUAE;Lo;0;L;;;;;N;;;;; +16949;BAMUM LETTER PHASE-D KU;Lo;0;L;;;;;N;;;;; +1694A;BAMUM LETTER PHASE-D REN OLD;Lo;0;L;;;;;N;;;;; +1694B;BAMUM LETTER PHASE-D TAE;Lo;0;L;;;;;N;;;;; +1694C;BAMUM LETTER PHASE-D TOQ;Lo;0;L;;;;;N;;;;; +1694D;BAMUM LETTER PHASE-D NYI;Lo;0;L;;;;;N;;;;; +1694E;BAMUM LETTER PHASE-D RII;Lo;0;L;;;;;N;;;;; +1694F;BAMUM LETTER PHASE-D LEEEE;Lo;0;L;;;;;N;;;;; +16950;BAMUM LETTER PHASE-D MEEEE;Lo;0;L;;;;;N;;;;; +16951;BAMUM LETTER PHASE-D M;Lo;0;L;;;;;N;;;;; +16952;BAMUM LETTER PHASE-D SUU;Lo;0;L;;;;;N;;;;; +16953;BAMUM LETTER PHASE-D MU;Lo;0;L;;;;;N;;;;; +16954;BAMUM LETTER PHASE-D SHII;Lo;0;L;;;;;N;;;;; +16955;BAMUM LETTER PHASE-D SHEUX;Lo;0;L;;;;;N;;;;; +16956;BAMUM LETTER PHASE-D KYEE;Lo;0;L;;;;;N;;;;; +16957;BAMUM LETTER PHASE-D NU;Lo;0;L;;;;;N;;;;; +16958;BAMUM LETTER PHASE-D SHU;Lo;0;L;;;;;N;;;;; +16959;BAMUM LETTER PHASE-D NTEE;Lo;0;L;;;;;N;;;;; +1695A;BAMUM LETTER PHASE-D PEE;Lo;0;L;;;;;N;;;;; +1695B;BAMUM LETTER PHASE-D NI;Lo;0;L;;;;;N;;;;; +1695C;BAMUM LETTER PHASE-D SHOQ;Lo;0;L;;;;;N;;;;; +1695D;BAMUM LETTER PHASE-D PUQ;Lo;0;L;;;;;N;;;;; +1695E;BAMUM LETTER PHASE-D MVOP;Lo;0;L;;;;;N;;;;; +1695F;BAMUM LETTER PHASE-D LOQ;Lo;0;L;;;;;N;;;;; +16960;BAMUM LETTER PHASE-D REN MUCH;Lo;0;L;;;;;N;;;;; +16961;BAMUM LETTER PHASE-D TI;Lo;0;L;;;;;N;;;;; +16962;BAMUM LETTER PHASE-D NTUU;Lo;0;L;;;;;N;;;;; +16963;BAMUM LETTER PHASE-D MBAA SEVEN;Lo;0;L;;;;;N;;;;; +16964;BAMUM LETTER PHASE-D SAQ;Lo;0;L;;;;;N;;;;; +16965;BAMUM LETTER PHASE-D FAA;Lo;0;L;;;;;N;;;;; +16966;BAMUM LETTER PHASE-E NDAP;Lo;0;L;;;;;N;;;;; +16967;BAMUM LETTER PHASE-E TOON;Lo;0;L;;;;;N;;;;; +16968;BAMUM LETTER PHASE-E MBEUM;Lo;0;L;;;;;N;;;;; +16969;BAMUM LETTER PHASE-E LAP;Lo;0;L;;;;;N;;;;; +1696A;BAMUM LETTER PHASE-E VOM;Lo;0;L;;;;;N;;;;; +1696B;BAMUM LETTER PHASE-E LOON;Lo;0;L;;;;;N;;;;; +1696C;BAMUM LETTER PHASE-E PAA;Lo;0;L;;;;;N;;;;; +1696D;BAMUM LETTER PHASE-E SOM;Lo;0;L;;;;;N;;;;; +1696E;BAMUM LETTER PHASE-E RAQ;Lo;0;L;;;;;N;;;;; +1696F;BAMUM LETTER PHASE-E NSHUOP;Lo;0;L;;;;;N;;;;; +16970;BAMUM LETTER PHASE-E NDUN;Lo;0;L;;;;;N;;;;; +16971;BAMUM LETTER PHASE-E PUAE;Lo;0;L;;;;;N;;;;; +16972;BAMUM LETTER PHASE-E TAM;Lo;0;L;;;;;N;;;;; +16973;BAMUM LETTER PHASE-E NGKA;Lo;0;L;;;;;N;;;;; +16974;BAMUM LETTER PHASE-E KPEUX;Lo;0;L;;;;;N;;;;; +16975;BAMUM LETTER PHASE-E WUO;Lo;0;L;;;;;N;;;;; +16976;BAMUM LETTER PHASE-E SEE;Lo;0;L;;;;;N;;;;; +16977;BAMUM LETTER PHASE-E NGGEUAET;Lo;0;L;;;;;N;;;;; +16978;BAMUM LETTER PHASE-E PAAM;Lo;0;L;;;;;N;;;;; +16979;BAMUM LETTER PHASE-E TOO;Lo;0;L;;;;;N;;;;; +1697A;BAMUM LETTER PHASE-E KUOP;Lo;0;L;;;;;N;;;;; +1697B;BAMUM LETTER PHASE-E LOM;Lo;0;L;;;;;N;;;;; +1697C;BAMUM LETTER PHASE-E NSHIEE;Lo;0;L;;;;;N;;;;; +1697D;BAMUM LETTER PHASE-E NGOP;Lo;0;L;;;;;N;;;;; +1697E;BAMUM LETTER PHASE-E MAEM;Lo;0;L;;;;;N;;;;; +1697F;BAMUM LETTER PHASE-E NGKEUX;Lo;0;L;;;;;N;;;;; +16980;BAMUM LETTER PHASE-E NGOQ;Lo;0;L;;;;;N;;;;; +16981;BAMUM LETTER PHASE-E NSHUE;Lo;0;L;;;;;N;;;;; +16982;BAMUM LETTER PHASE-E RIMGBA;Lo;0;L;;;;;N;;;;; +16983;BAMUM LETTER PHASE-E NJEUX;Lo;0;L;;;;;N;;;;; +16984;BAMUM LETTER PHASE-E PEEM;Lo;0;L;;;;;N;;;;; +16985;BAMUM LETTER PHASE-E SAA;Lo;0;L;;;;;N;;;;; +16986;BAMUM LETTER PHASE-E NGGURAE;Lo;0;L;;;;;N;;;;; +16987;BAMUM LETTER PHASE-E MGBA;Lo;0;L;;;;;N;;;;; +16988;BAMUM LETTER PHASE-E GHEUX;Lo;0;L;;;;;N;;;;; +16989;BAMUM LETTER PHASE-E NGKEUAEM;Lo;0;L;;;;;N;;;;; +1698A;BAMUM LETTER PHASE-E NJAEMLI;Lo;0;L;;;;;N;;;;; +1698B;BAMUM LETTER PHASE-E MAP;Lo;0;L;;;;;N;;;;; +1698C;BAMUM LETTER PHASE-E LOOT;Lo;0;L;;;;;N;;;;; +1698D;BAMUM LETTER PHASE-E NGGEEEE;Lo;0;L;;;;;N;;;;; +1698E;BAMUM LETTER PHASE-E NDIQ;Lo;0;L;;;;;N;;;;; +1698F;BAMUM LETTER PHASE-E TAEN NTEUM;Lo;0;L;;;;;N;;;;; +16990;BAMUM LETTER PHASE-E SET;Lo;0;L;;;;;N;;;;; +16991;BAMUM LETTER PHASE-E PUM;Lo;0;L;;;;;N;;;;; +16992;BAMUM LETTER PHASE-E NDAA SOFTNESS;Lo;0;L;;;;;N;;;;; +16993;BAMUM LETTER PHASE-E NGGUAESHAE NYAM;Lo;0;L;;;;;N;;;;; +16994;BAMUM LETTER PHASE-E YIEE;Lo;0;L;;;;;N;;;;; +16995;BAMUM LETTER PHASE-E GHEUN;Lo;0;L;;;;;N;;;;; +16996;BAMUM LETTER PHASE-E TUAE;Lo;0;L;;;;;N;;;;; +16997;BAMUM LETTER PHASE-E YEUAE;Lo;0;L;;;;;N;;;;; +16998;BAMUM LETTER PHASE-E PO;Lo;0;L;;;;;N;;;;; +16999;BAMUM LETTER PHASE-E TUMAE;Lo;0;L;;;;;N;;;;; +1699A;BAMUM LETTER PHASE-E KEUAE;Lo;0;L;;;;;N;;;;; +1699B;BAMUM LETTER PHASE-E SUAEN;Lo;0;L;;;;;N;;;;; +1699C;BAMUM LETTER PHASE-E TEUAEQ;Lo;0;L;;;;;N;;;;; +1699D;BAMUM LETTER PHASE-E VEUAE;Lo;0;L;;;;;N;;;;; +1699E;BAMUM LETTER PHASE-E WEUX;Lo;0;L;;;;;N;;;;; +1699F;BAMUM LETTER PHASE-E LAAM;Lo;0;L;;;;;N;;;;; +169A0;BAMUM LETTER PHASE-E PU;Lo;0;L;;;;;N;;;;; +169A1;BAMUM LETTER PHASE-E TAAQ;Lo;0;L;;;;;N;;;;; +169A2;BAMUM LETTER PHASE-E GHAAMAE;Lo;0;L;;;;;N;;;;; +169A3;BAMUM LETTER PHASE-E NGEUREUT;Lo;0;L;;;;;N;;;;; +169A4;BAMUM LETTER PHASE-E SHEUAEQ;Lo;0;L;;;;;N;;;;; +169A5;BAMUM LETTER PHASE-E MGBEN;Lo;0;L;;;;;N;;;;; +169A6;BAMUM LETTER PHASE-E MBEE;Lo;0;L;;;;;N;;;;; +169A7;BAMUM LETTER PHASE-E NZAQ;Lo;0;L;;;;;N;;;;; +169A8;BAMUM LETTER PHASE-E NKOM;Lo;0;L;;;;;N;;;;; +169A9;BAMUM LETTER PHASE-E GBET;Lo;0;L;;;;;N;;;;; +169AA;BAMUM LETTER PHASE-E TUM;Lo;0;L;;;;;N;;;;; +169AB;BAMUM LETTER PHASE-E KUET;Lo;0;L;;;;;N;;;;; +169AC;BAMUM LETTER PHASE-E YAP;Lo;0;L;;;;;N;;;;; +169AD;BAMUM LETTER PHASE-E NYI CLEAVER;Lo;0;L;;;;;N;;;;; +169AE;BAMUM LETTER PHASE-E YIT;Lo;0;L;;;;;N;;;;; +169AF;BAMUM LETTER PHASE-E MFEUQ;Lo;0;L;;;;;N;;;;; +169B0;BAMUM LETTER PHASE-E NDIAQ;Lo;0;L;;;;;N;;;;; +169B1;BAMUM LETTER PHASE-E PIEEQ;Lo;0;L;;;;;N;;;;; +169B2;BAMUM LETTER PHASE-E YUEQ;Lo;0;L;;;;;N;;;;; +169B3;BAMUM LETTER PHASE-E LEUAEM;Lo;0;L;;;;;N;;;;; +169B4;BAMUM LETTER PHASE-E FUE;Lo;0;L;;;;;N;;;;; +169B5;BAMUM LETTER PHASE-E GBEUX;Lo;0;L;;;;;N;;;;; +169B6;BAMUM LETTER PHASE-E NGKUP;Lo;0;L;;;;;N;;;;; +169B7;BAMUM LETTER PHASE-E KET;Lo;0;L;;;;;N;;;;; +169B8;BAMUM LETTER PHASE-E MAE;Lo;0;L;;;;;N;;;;; +169B9;BAMUM LETTER PHASE-E NGKAAMI;Lo;0;L;;;;;N;;;;; +169BA;BAMUM LETTER PHASE-E GHET;Lo;0;L;;;;;N;;;;; +169BB;BAMUM LETTER PHASE-E FA;Lo;0;L;;;;;N;;;;; +169BC;BAMUM LETTER PHASE-E NTUM;Lo;0;L;;;;;N;;;;; +169BD;BAMUM LETTER PHASE-E PEUT;Lo;0;L;;;;;N;;;;; +169BE;BAMUM LETTER PHASE-E YEUM;Lo;0;L;;;;;N;;;;; +169BF;BAMUM LETTER PHASE-E NGGEUAE;Lo;0;L;;;;;N;;;;; +169C0;BAMUM LETTER PHASE-E NYI BETWEEN;Lo;0;L;;;;;N;;;;; +169C1;BAMUM LETTER PHASE-E NZUQ;Lo;0;L;;;;;N;;;;; +169C2;BAMUM LETTER PHASE-E POON;Lo;0;L;;;;;N;;;;; +169C3;BAMUM LETTER PHASE-E MIEE;Lo;0;L;;;;;N;;;;; +169C4;BAMUM LETTER PHASE-E FUET;Lo;0;L;;;;;N;;;;; +169C5;BAMUM LETTER PHASE-E NAE;Lo;0;L;;;;;N;;;;; +169C6;BAMUM LETTER PHASE-E MUAE;Lo;0;L;;;;;N;;;;; +169C7;BAMUM LETTER PHASE-E GHEUAE;Lo;0;L;;;;;N;;;;; +169C8;BAMUM LETTER PHASE-E FU I;Lo;0;L;;;;;N;;;;; +169C9;BAMUM LETTER PHASE-E MVI;Lo;0;L;;;;;N;;;;; +169CA;BAMUM LETTER PHASE-E PUAQ;Lo;0;L;;;;;N;;;;; +169CB;BAMUM LETTER PHASE-E NGKUM;Lo;0;L;;;;;N;;;;; +169CC;BAMUM LETTER PHASE-E KUT;Lo;0;L;;;;;N;;;;; +169CD;BAMUM LETTER PHASE-E PIET;Lo;0;L;;;;;N;;;;; +169CE;BAMUM LETTER PHASE-E NTAP;Lo;0;L;;;;;N;;;;; +169CF;BAMUM LETTER PHASE-E YEUAET;Lo;0;L;;;;;N;;;;; +169D0;BAMUM LETTER PHASE-E NGGUP;Lo;0;L;;;;;N;;;;; +169D1;BAMUM LETTER PHASE-E PA PEOPLE;Lo;0;L;;;;;N;;;;; +169D2;BAMUM LETTER PHASE-E FU CALL;Lo;0;L;;;;;N;;;;; +169D3;BAMUM LETTER PHASE-E FOM;Lo;0;L;;;;;N;;;;; +169D4;BAMUM LETTER PHASE-E NJEE;Lo;0;L;;;;;N;;;;; +169D5;BAMUM LETTER PHASE-E A;Lo;0;L;;;;;N;;;;; +169D6;BAMUM LETTER PHASE-E TOQ;Lo;0;L;;;;;N;;;;; +169D7;BAMUM LETTER PHASE-E O;Lo;0;L;;;;;N;;;;; +169D8;BAMUM LETTER PHASE-E I;Lo;0;L;;;;;N;;;;; +169D9;BAMUM LETTER PHASE-E LAQ;Lo;0;L;;;;;N;;;;; +169DA;BAMUM LETTER PHASE-E PA PLURAL;Lo;0;L;;;;;N;;;;; +169DB;BAMUM LETTER PHASE-E TAA;Lo;0;L;;;;;N;;;;; +169DC;BAMUM LETTER PHASE-E TAQ;Lo;0;L;;;;;N;;;;; +169DD;BAMUM LETTER PHASE-E NDAA MY HOUSE;Lo;0;L;;;;;N;;;;; +169DE;BAMUM LETTER PHASE-E SHIQ;Lo;0;L;;;;;N;;;;; +169DF;BAMUM LETTER PHASE-E YEUX;Lo;0;L;;;;;N;;;;; +169E0;BAMUM LETTER PHASE-E NGUAE;Lo;0;L;;;;;N;;;;; +169E1;BAMUM LETTER PHASE-E YUAEN;Lo;0;L;;;;;N;;;;; +169E2;BAMUM LETTER PHASE-E YOQ SWIMMING;Lo;0;L;;;;;N;;;;; +169E3;BAMUM LETTER PHASE-E YOQ COVER;Lo;0;L;;;;;N;;;;; +169E4;BAMUM LETTER PHASE-E YUQ;Lo;0;L;;;;;N;;;;; +169E5;BAMUM LETTER PHASE-E YUN;Lo;0;L;;;;;N;;;;; +169E6;BAMUM LETTER PHASE-E KEUX;Lo;0;L;;;;;N;;;;; +169E7;BAMUM LETTER PHASE-E PEUX;Lo;0;L;;;;;N;;;;; +169E8;BAMUM LETTER PHASE-E NJEE EPOCH;Lo;0;L;;;;;N;;;;; +169E9;BAMUM LETTER PHASE-E PUE;Lo;0;L;;;;;N;;;;; +169EA;BAMUM LETTER PHASE-E WUE;Lo;0;L;;;;;N;;;;; +169EB;BAMUM LETTER PHASE-E FEE;Lo;0;L;;;;;N;;;;; +169EC;BAMUM LETTER PHASE-E VEE;Lo;0;L;;;;;N;;;;; +169ED;BAMUM LETTER PHASE-E LU;Lo;0;L;;;;;N;;;;; +169EE;BAMUM LETTER PHASE-E MI;Lo;0;L;;;;;N;;;;; +169EF;BAMUM LETTER PHASE-E REUX;Lo;0;L;;;;;N;;;;; +169F0;BAMUM LETTER PHASE-E RAE;Lo;0;L;;;;;N;;;;; +169F1;BAMUM LETTER PHASE-E NGUAET;Lo;0;L;;;;;N;;;;; +169F2;BAMUM LETTER PHASE-E NGA;Lo;0;L;;;;;N;;;;; +169F3;BAMUM LETTER PHASE-E SHO;Lo;0;L;;;;;N;;;;; +169F4;BAMUM LETTER PHASE-E SHOQ;Lo;0;L;;;;;N;;;;; +169F5;BAMUM LETTER PHASE-E FU REMEDY;Lo;0;L;;;;;N;;;;; +169F6;BAMUM LETTER PHASE-E NA;Lo;0;L;;;;;N;;;;; +169F7;BAMUM LETTER PHASE-E PI;Lo;0;L;;;;;N;;;;; +169F8;BAMUM LETTER PHASE-E LOQ;Lo;0;L;;;;;N;;;;; +169F9;BAMUM LETTER PHASE-E KO;Lo;0;L;;;;;N;;;;; +169FA;BAMUM LETTER PHASE-E MEN;Lo;0;L;;;;;N;;;;; +169FB;BAMUM LETTER PHASE-E MA;Lo;0;L;;;;;N;;;;; +169FC;BAMUM LETTER PHASE-E MAQ;Lo;0;L;;;;;N;;;;; +169FD;BAMUM LETTER PHASE-E TEU;Lo;0;L;;;;;N;;;;; +169FE;BAMUM LETTER PHASE-E KI;Lo;0;L;;;;;N;;;;; +169FF;BAMUM LETTER PHASE-E MON;Lo;0;L;;;;;N;;;;; +16A00;BAMUM LETTER PHASE-E TEN;Lo;0;L;;;;;N;;;;; +16A01;BAMUM LETTER PHASE-E FAQ;Lo;0;L;;;;;N;;;;; +16A02;BAMUM LETTER PHASE-E GHOM;Lo;0;L;;;;;N;;;;; +16A03;BAMUM LETTER PHASE-F KA;Lo;0;L;;;;;N;;;;; +16A04;BAMUM LETTER PHASE-F U;Lo;0;L;;;;;N;;;;; +16A05;BAMUM LETTER PHASE-F KU;Lo;0;L;;;;;N;;;;; +16A06;BAMUM LETTER PHASE-F EE;Lo;0;L;;;;;N;;;;; +16A07;BAMUM LETTER PHASE-F REE;Lo;0;L;;;;;N;;;;; +16A08;BAMUM LETTER PHASE-F TAE;Lo;0;L;;;;;N;;;;; +16A09;BAMUM LETTER PHASE-F NYI;Lo;0;L;;;;;N;;;;; +16A0A;BAMUM LETTER PHASE-F LA;Lo;0;L;;;;;N;;;;; +16A0B;BAMUM LETTER PHASE-F RII;Lo;0;L;;;;;N;;;;; +16A0C;BAMUM LETTER PHASE-F RIEE;Lo;0;L;;;;;N;;;;; +16A0D;BAMUM LETTER PHASE-F MEEEE;Lo;0;L;;;;;N;;;;; +16A0E;BAMUM LETTER PHASE-F TAA;Lo;0;L;;;;;N;;;;; +16A0F;BAMUM LETTER PHASE-F NDAA;Lo;0;L;;;;;N;;;;; +16A10;BAMUM LETTER PHASE-F NJAEM;Lo;0;L;;;;;N;;;;; +16A11;BAMUM LETTER PHASE-F M;Lo;0;L;;;;;N;;;;; +16A12;BAMUM LETTER PHASE-F SUU;Lo;0;L;;;;;N;;;;; +16A13;BAMUM LETTER PHASE-F SHII;Lo;0;L;;;;;N;;;;; +16A14;BAMUM LETTER PHASE-F SI;Lo;0;L;;;;;N;;;;; +16A15;BAMUM LETTER PHASE-F SEUX;Lo;0;L;;;;;N;;;;; +16A16;BAMUM LETTER PHASE-F KYEE;Lo;0;L;;;;;N;;;;; +16A17;BAMUM LETTER PHASE-F KET;Lo;0;L;;;;;N;;;;; +16A18;BAMUM LETTER PHASE-F NUAE;Lo;0;L;;;;;N;;;;; +16A19;BAMUM LETTER PHASE-F NU;Lo;0;L;;;;;N;;;;; +16A1A;BAMUM LETTER PHASE-F NJUAE;Lo;0;L;;;;;N;;;;; +16A1B;BAMUM LETTER PHASE-F YOQ;Lo;0;L;;;;;N;;;;; +16A1C;BAMUM LETTER PHASE-F SHU;Lo;0;L;;;;;N;;;;; +16A1D;BAMUM LETTER PHASE-F YA;Lo;0;L;;;;;N;;;;; +16A1E;BAMUM LETTER PHASE-F NSHA;Lo;0;L;;;;;N;;;;; +16A1F;BAMUM LETTER PHASE-F PEUX;Lo;0;L;;;;;N;;;;; +16A20;BAMUM LETTER PHASE-F NTEE;Lo;0;L;;;;;N;;;;; +16A21;BAMUM LETTER PHASE-F WUE;Lo;0;L;;;;;N;;;;; +16A22;BAMUM LETTER PHASE-F PEE;Lo;0;L;;;;;N;;;;; +16A23;BAMUM LETTER PHASE-F RU;Lo;0;L;;;;;N;;;;; +16A24;BAMUM LETTER PHASE-F NI;Lo;0;L;;;;;N;;;;; +16A25;BAMUM LETTER PHASE-F REUX;Lo;0;L;;;;;N;;;;; +16A26;BAMUM LETTER PHASE-F KEN;Lo;0;L;;;;;N;;;;; +16A27;BAMUM LETTER PHASE-F NGKWAEN;Lo;0;L;;;;;N;;;;; +16A28;BAMUM LETTER PHASE-F NGGA;Lo;0;L;;;;;N;;;;; +16A29;BAMUM LETTER PHASE-F SHO;Lo;0;L;;;;;N;;;;; +16A2A;BAMUM LETTER PHASE-F PUAE;Lo;0;L;;;;;N;;;;; +16A2B;BAMUM LETTER PHASE-F FOM;Lo;0;L;;;;;N;;;;; +16A2C;BAMUM LETTER PHASE-F WA;Lo;0;L;;;;;N;;;;; +16A2D;BAMUM LETTER PHASE-F LI;Lo;0;L;;;;;N;;;;; +16A2E;BAMUM LETTER PHASE-F LOQ;Lo;0;L;;;;;N;;;;; +16A2F;BAMUM LETTER PHASE-F KO;Lo;0;L;;;;;N;;;;; +16A30;BAMUM LETTER PHASE-F MBEN;Lo;0;L;;;;;N;;;;; +16A31;BAMUM LETTER PHASE-F REN;Lo;0;L;;;;;N;;;;; +16A32;BAMUM LETTER PHASE-F MA;Lo;0;L;;;;;N;;;;; +16A33;BAMUM LETTER PHASE-F MO;Lo;0;L;;;;;N;;;;; +16A34;BAMUM LETTER PHASE-F MBAA;Lo;0;L;;;;;N;;;;; +16A35;BAMUM LETTER PHASE-F TET;Lo;0;L;;;;;N;;;;; +16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;; +16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;; +16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;; +1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;; +1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; +1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; +1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; +1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; +1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;; +1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;; +1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;; +1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;; +1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;; +1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;; +1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;; +1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;; +1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;; +1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;; +1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;; +1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;; +1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;; +1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;; +1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;; +1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;; +1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;; +1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;; +1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;; +1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;; +1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;; +1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;; +1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;; +1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;; +1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;; +1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;; +1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;; +1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;; +1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;; +1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;; +1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;; +1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;; +1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;; +1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;; +1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;; +1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;; +1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;; +1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;; +1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;; +1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;; +1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;; +1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;; +1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;; +1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;; +1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;; +1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;; +1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;; +1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;; +1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;; +1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;; +1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;; +1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;; +1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;; +1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;; +1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;; +1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;; +1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;; +1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;; +1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;; +1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;; +1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;; +1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;; +1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;; +1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;; +1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;; +1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;; +1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;; +1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;; +1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;; +1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;; +1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;; +1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;; +1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;; +1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;; +1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;; +1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;; +1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;; +1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;; +1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;; +1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;; +1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;; +1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;; +1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;; +1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;; +1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;; +1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;; +1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;; +1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;; +1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;; +1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;; +1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;; +1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;; +1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;; +1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;; +1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;; +1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;; +1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;; +1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;; +1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;; +1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;; +1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;; +1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;; +1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;; +1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;; +1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;; +1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;; +1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;; +1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;; +1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;; +1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;; +1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;; +1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;; +1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;; +1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;; +1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;; +1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;; +1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;; +1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;; +1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;; +1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;; +1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;; +1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;; +1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;; +1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;; +1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;; +1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;; +1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;; +1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;; +1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;; +1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;; +1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;; +1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;; +1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;; +1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;; +1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;; +1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;; +1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;; +1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;; +1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;; +1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;; +1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;; +1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;; +1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; +1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;; +1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;; +1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;; +1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; +1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;; +1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;; +1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;; +1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;; +1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;; +1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;; +1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;; +1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;; +1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;; +1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;; +1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;; +1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;; +1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;; +1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;; +1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;; +1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;; +1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;; +1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;; +1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;; +1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; +1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; +1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;; +1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;; +1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;; +1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;; +1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;; +1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;; +1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;; +1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;; +1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;; +1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;; +1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;; +1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;; +1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;; +1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;; +1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;; +1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;; +1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;; +1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;; +1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;; +1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;; +1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;; +1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;; +1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;; +1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;; +1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;; +1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;; +1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;; +1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;; +1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;; +1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;; +1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;; +1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;; +1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;; +1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;; +1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; +1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; +1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; +1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; +1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; +1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; +1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; +1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; +1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;; +1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;; +1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;; +1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;; +1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;; +1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;; +1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;; +1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;; +1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;; +1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;; +1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;; +1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;; +1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;; +1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;; +1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;; +1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;; +1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;; +1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;; +1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;; +1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;; +1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;; +1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;; +1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;; +1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;; +1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;; +1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;; +1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;; +1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;; +1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;; +1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;; +1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;; +1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;; +1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;; +1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;; +1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;; +1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;; +1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;; +1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;; +1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;; +1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;; +1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;; +1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;; +1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;; +1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;; +1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;; +1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;; +1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;; +1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;; +1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;; +1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;; +1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;; +1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;; +1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;; +1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;; +1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;; +1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;; +1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;; +1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;; +1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;; +1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;; +1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;; +1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;; +1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;; +1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;; +1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;; +1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;; +1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;; +1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;; +1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;; +1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;; +1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;; +1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;; +1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;; +1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;; +1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;; +1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;; +1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;; +1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;; +1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;; +1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;; +1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;; +1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;; +1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;; +1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;; +1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;; +1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;; +1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;; +1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;; +1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;; +1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;; +1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;; +1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;; +1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;; +1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;; +1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;; +1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;; +1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;; +1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;; +1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; +1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; +1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;; +1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;; +1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; +1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; +1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;; +1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;; +1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;; +1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;; +1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;; +1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;; +1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;; +1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;; +1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;; +1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;; +1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;; +1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;; +1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;; +1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;; +1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;; +1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;; +1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;; +1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;; +1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;; +1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;; +1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;; +1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;; +1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;; +1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;; +1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;; +1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;; +1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;; +1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;; +1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;; +1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;; +1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;; +1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;; +1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;; +1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;; +1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;; +1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;; +1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;; +1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;; +1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;; +1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;; +1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;; +1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;; +1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;; +1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;; +1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;; +1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;; +1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;; +1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;; +1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;; +1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;; +1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;; +1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;; +1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;; +1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;; +1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;; +1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;; +1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;; +1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;; +1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;; +1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;; +1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;; +1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;; +1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;; +1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;; +1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;; +1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;; +1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;; +1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;; +1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;; +1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;; +1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;; +1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;; +1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;; +1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;; +1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;; +1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;; +1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;; +1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;; +1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;; +1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;; +1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;; +1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;; +1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;; +1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;; +1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;; +1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;; +1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;; +1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;; +1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;; +1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;; +1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;; +1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;; +1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;; +1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;; +1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;; +1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;; +1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;; +1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;; +1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;; +1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;; +1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;; +1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;; +1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;; +1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;; +1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;; +1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;; +1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;; +1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;; +1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;; +1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;; +1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; +1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; +1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; +1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; +1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; +1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; +1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;; +1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;; +1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;; +1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;; +1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;; +1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;; +1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;; +1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;; +1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;; +1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;; +1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;; +1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;; +1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;; +1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;; +1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; +1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; +1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; +1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; +1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; +1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; +1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; +1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; +1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; +1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; +1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; +1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; +1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; +1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; +1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; +1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; +1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; +1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; +1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; +1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; +1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; +1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; +1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; +1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; +1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; +1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; +1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; +1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; +1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; +1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; +1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; +1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; +1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; +1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;; +1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;; +1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;; +1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;; +1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;; +1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; +1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; +1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; +1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; +1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;; +1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;; +1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;; +1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;; +1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; +1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;; +1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;; +1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;; +1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;; +1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; +1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;; +1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;; +1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;; +1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;; +1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; +1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; +1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;; +1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;; +1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;; +1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;; +1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;; +1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;; +1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;; +1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;; +1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;; +1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;; +1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;; +1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;; +1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;; +1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;; +1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;; +1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;; +1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;; +1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;; +1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;; +1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;; +1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;; +1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;; +1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;; +1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;; +1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;; +1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;; +1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;; +1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;; +1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;; +1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;; +1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;; +1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;; +1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;; +1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;; +1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;; +1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;; +1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;; +1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;; +1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;; +1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;; +1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;; +1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;; +1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;; +1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;; +1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;; +1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;; +1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;; +1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;; +1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;; +1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;; +1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;; +1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;; +1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;; +1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;; +1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;; +1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;; +1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;; +1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;; +1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; +1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; +1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; +1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; +1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; +1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; +1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; +1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; +1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; +1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; +1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; +1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; +1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; +1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; +1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; +1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; +1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; +1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; +1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; +1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; +1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; +1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L; 0131;;;;N;;;;; +1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L; 0237;;;;N;;;;; +1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; +1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; +1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; +1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; +1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; +1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; +1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;ON; 2202;;;;Y;;;;; +1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L; 03DC;;;;N;;;;; +1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L; 03DD;;;;N;;;;; +1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;; +1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;; +1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;; +1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;; +1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;; +1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;; +1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;; +1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;; +1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;; +1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;; +1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;; +1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;; +1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;; +1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;; +1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;; +1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;; +1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;; +1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;; +1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;; +1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;; +1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;; +1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;; +1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;; +1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;; +1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;; +1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;; +1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;; +1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;; +1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;; +1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;; +1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;; +1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;; +1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;; +1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;; +1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;; +1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;; +1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;; +1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;; +1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;; +1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;; +1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;; +1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;; +1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;; +1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;; +1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;; +1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;; +1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;; +1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;; +1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;; +1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;; +1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;; +1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;; +1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;; +1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;; +1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;; +1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;; +1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;; +1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;; +1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;; +1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;; +1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;; +1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;; +1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;; +1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;; +1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;; +1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;; +1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;; +1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;; +1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;; +1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;; +1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;; +1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;; +1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;; +1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;; +1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;; +1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;; +1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;; +1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;; +1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;; +1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;; +1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;; +1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;; +1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;; +1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;; +1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;; +1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;; +1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;; +1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;; +1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;; +1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;; +1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;; +1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;; +1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;; +1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;; +1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;; +1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;; +1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;; +1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;; +1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;; +1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;; +1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;; +1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;; +1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;; +1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;; +1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;; +1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;; +1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;; +1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;; +1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;; +1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;; +1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;; +1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;; +1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;; +1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;; +1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;; +1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;; +1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;; +1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;; +1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;; +1F0A0;PLAYING CARD BACK;So;0;ON;;;;;N;;;;; +1F0A1;PLAYING CARD ACE OF SPADES;So;0;ON;;;;;N;;;;; +1F0A2;PLAYING CARD TWO OF SPADES;So;0;ON;;;;;N;;;;; +1F0A3;PLAYING CARD THREE OF SPADES;So;0;ON;;;;;N;;;;; +1F0A4;PLAYING CARD FOUR OF SPADES;So;0;ON;;;;;N;;;;; +1F0A5;PLAYING CARD FIVE OF SPADES;So;0;ON;;;;;N;;;;; +1F0A6;PLAYING CARD SIX OF SPADES;So;0;ON;;;;;N;;;;; +1F0A7;PLAYING CARD SEVEN OF SPADES;So;0;ON;;;;;N;;;;; +1F0A8;PLAYING CARD EIGHT OF SPADES;So;0;ON;;;;;N;;;;; +1F0A9;PLAYING CARD NINE OF SPADES;So;0;ON;;;;;N;;;;; +1F0AA;PLAYING CARD TEN OF SPADES;So;0;ON;;;;;N;;;;; +1F0AB;PLAYING CARD JACK OF SPADES;So;0;ON;;;;;N;;;;; +1F0AC;PLAYING CARD KNIGHT OF SPADES;So;0;ON;;;;;N;;;;; +1F0AD;PLAYING CARD QUEEN OF SPADES;So;0;ON;;;;;N;;;;; +1F0AE;PLAYING CARD KING OF SPADES;So;0;ON;;;;;N;;;;; +1F0B1;PLAYING CARD ACE OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B2;PLAYING CARD TWO OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B3;PLAYING CARD THREE OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B4;PLAYING CARD FOUR OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B5;PLAYING CARD FIVE OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B6;PLAYING CARD SIX OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B7;PLAYING CARD SEVEN OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B8;PLAYING CARD EIGHT OF HEARTS;So;0;ON;;;;;N;;;;; +1F0B9;PLAYING CARD NINE OF HEARTS;So;0;ON;;;;;N;;;;; +1F0BA;PLAYING CARD TEN OF HEARTS;So;0;ON;;;;;N;;;;; +1F0BB;PLAYING CARD JACK OF HEARTS;So;0;ON;;;;;N;;;;; +1F0BC;PLAYING CARD KNIGHT OF HEARTS;So;0;ON;;;;;N;;;;; +1F0BD;PLAYING CARD QUEEN OF HEARTS;So;0;ON;;;;;N;;;;; +1F0BE;PLAYING CARD KING OF HEARTS;So;0;ON;;;;;N;;;;; +1F0C1;PLAYING CARD ACE OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C2;PLAYING CARD TWO OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C3;PLAYING CARD THREE OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C4;PLAYING CARD FOUR OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C5;PLAYING CARD FIVE OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C6;PLAYING CARD SIX OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C7;PLAYING CARD SEVEN OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C8;PLAYING CARD EIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0C9;PLAYING CARD NINE OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0CA;PLAYING CARD TEN OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0CB;PLAYING CARD JACK OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0CC;PLAYING CARD KNIGHT OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0CD;PLAYING CARD QUEEN OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0CE;PLAYING CARD KING OF DIAMONDS;So;0;ON;;;;;N;;;;; +1F0CF;PLAYING CARD BLACK JOKER;So;0;ON;;;;;N;;;;; +1F0D1;PLAYING CARD ACE OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D2;PLAYING CARD TWO OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D3;PLAYING CARD THREE OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D4;PLAYING CARD FOUR OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D5;PLAYING CARD FIVE OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D6;PLAYING CARD SIX OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D7;PLAYING CARD SEVEN OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D8;PLAYING CARD EIGHT OF CLUBS;So;0;ON;;;;;N;;;;; +1F0D9;PLAYING CARD NINE OF CLUBS;So;0;ON;;;;;N;;;;; +1F0DA;PLAYING CARD TEN OF CLUBS;So;0;ON;;;;;N;;;;; +1F0DB;PLAYING CARD JACK OF CLUBS;So;0;ON;;;;;N;;;;; +1F0DC;PLAYING CARD KNIGHT OF CLUBS;So;0;ON;;;;;N;;;;; +1F0DD;PLAYING CARD QUEEN OF CLUBS;So;0;ON;;;;;N;;;;; +1F0DE;PLAYING CARD KING OF CLUBS;So;0;ON;;;;;N;;;;; +1F0DF;PLAYING CARD WHITE JOKER;So;0;ON;;;;;N;;;;; +1F100;DIGIT ZERO FULL STOP;No;0;EN; 0030 002E;;0;0;N;;;;; +1F101;DIGIT ZERO COMMA;No;0;EN; 0030 002C;;0;0;N;;;;; +1F102;DIGIT ONE COMMA;No;0;EN; 0031 002C;;1;1;N;;;;; +1F103;DIGIT TWO COMMA;No;0;EN; 0032 002C;;2;2;N;;;;; +1F104;DIGIT THREE COMMA;No;0;EN; 0033 002C;;3;3;N;;;;; +1F105;DIGIT FOUR COMMA;No;0;EN; 0034 002C;;4;4;N;;;;; +1F106;DIGIT FIVE COMMA;No;0;EN; 0035 002C;;5;5;N;;;;; +1F107;DIGIT SIX COMMA;No;0;EN; 0036 002C;;6;6;N;;;;; +1F108;DIGIT SEVEN COMMA;No;0;EN; 0037 002C;;7;7;N;;;;; +1F109;DIGIT EIGHT COMMA;No;0;EN; 0038 002C;;8;8;N;;;;; +1F10A;DIGIT NINE COMMA;No;0;EN; 0039 002C;;9;9;N;;;;; +1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L; 0028 0041 0029;;;;N;;;;; +1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L; 0028 0042 0029;;;;N;;;;; +1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L; 0028 0043 0029;;;;N;;;;; +1F113;PARENTHESIZED LATIN CAPITAL LETTER D;So;0;L; 0028 0044 0029;;;;N;;;;; +1F114;PARENTHESIZED LATIN CAPITAL LETTER E;So;0;L; 0028 0045 0029;;;;N;;;;; +1F115;PARENTHESIZED LATIN CAPITAL LETTER F;So;0;L; 0028 0046 0029;;;;N;;;;; +1F116;PARENTHESIZED LATIN CAPITAL LETTER G;So;0;L; 0028 0047 0029;;;;N;;;;; +1F117;PARENTHESIZED LATIN CAPITAL LETTER H;So;0;L; 0028 0048 0029;;;;N;;;;; +1F118;PARENTHESIZED LATIN CAPITAL LETTER I;So;0;L; 0028 0049 0029;;;;N;;;;; +1F119;PARENTHESIZED LATIN CAPITAL LETTER J;So;0;L; 0028 004A 0029;;;;N;;;;; +1F11A;PARENTHESIZED LATIN CAPITAL LETTER K;So;0;L; 0028 004B 0029;;;;N;;;;; +1F11B;PARENTHESIZED LATIN CAPITAL LETTER L;So;0;L; 0028 004C 0029;;;;N;;;;; +1F11C;PARENTHESIZED LATIN CAPITAL LETTER M;So;0;L; 0028 004D 0029;;;;N;;;;; +1F11D;PARENTHESIZED LATIN CAPITAL LETTER N;So;0;L; 0028 004E 0029;;;;N;;;;; +1F11E;PARENTHESIZED LATIN CAPITAL LETTER O;So;0;L; 0028 004F 0029;;;;N;;;;; +1F11F;PARENTHESIZED LATIN CAPITAL LETTER P;So;0;L; 0028 0050 0029;;;;N;;;;; +1F120;PARENTHESIZED LATIN CAPITAL LETTER Q;So;0;L; 0028 0051 0029;;;;N;;;;; +1F121;PARENTHESIZED LATIN CAPITAL LETTER R;So;0;L; 0028 0052 0029;;;;N;;;;; +1F122;PARENTHESIZED LATIN CAPITAL LETTER S;So;0;L; 0028 0053 0029;;;;N;;;;; +1F123;PARENTHESIZED LATIN CAPITAL LETTER T;So;0;L; 0028 0054 0029;;;;N;;;;; +1F124;PARENTHESIZED LATIN CAPITAL LETTER U;So;0;L; 0028 0055 0029;;;;N;;;;; +1F125;PARENTHESIZED LATIN CAPITAL LETTER V;So;0;L; 0028 0056 0029;;;;N;;;;; +1F126;PARENTHESIZED LATIN CAPITAL LETTER W;So;0;L; 0028 0057 0029;;;;N;;;;; +1F127;PARENTHESIZED LATIN CAPITAL LETTER X;So;0;L; 0028 0058 0029;;;;N;;;;; +1F128;PARENTHESIZED LATIN CAPITAL LETTER Y;So;0;L; 0028 0059 0029;;;;N;;;;; +1F129;PARENTHESIZED LATIN CAPITAL LETTER Z;So;0;L; 0028 005A 0029;;;;N;;;;; +1F12A;TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S;So;0;L; 3014 0053 3015;;;;N;;;;; +1F12B;CIRCLED ITALIC LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;; +1F12C;CIRCLED ITALIC LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;; +1F12D;CIRCLED CD;So;0;L; 0043 0044;;;;N;;;;; +1F12E;CIRCLED WZ;So;0;L; 0057 005A;;;;N;;;;; +1F130;SQUARED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;; +1F131;SQUARED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;; +1F132;SQUARED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;; +1F133;SQUARED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;; +1F134;SQUARED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;; +1F135;SQUARED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;; +1F136;SQUARED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;; +1F137;SQUARED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;; +1F138;SQUARED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;; +1F139;SQUARED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;; +1F13A;SQUARED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;; +1F13B;SQUARED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;; +1F13C;SQUARED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;; +1F13D;SQUARED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;; +1F13E;SQUARED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;; +1F13F;SQUARED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;; +1F140;SQUARED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;; +1F141;SQUARED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;; +1F142;SQUARED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;; +1F143;SQUARED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;; +1F144;SQUARED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;; +1F145;SQUARED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;; +1F146;SQUARED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;; +1F147;SQUARED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;; +1F148;SQUARED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;; +1F149;SQUARED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;; +1F14A;SQUARED HV;So;0;L; 0048 0056;;;;N;;;;; +1F14B;SQUARED MV;So;0;L; 004D 0056;;;;N;;;;; +1F14C;SQUARED SD;So;0;L; 0053 0044;;;;N;;;;; +1F14D;SQUARED SS;So;0;L; 0053 0053;;;;N;;;;; +1F14E;SQUARED PPV;So;0;L; 0050 0050 0056;;;;N;;;;; +1F14F;SQUARED WC;So;0;L; 0057 0043;;;;N;;;;; +1F150;NEGATIVE CIRCLED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; +1F151;NEGATIVE CIRCLED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; +1F152;NEGATIVE CIRCLED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; +1F153;NEGATIVE CIRCLED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; +1F154;NEGATIVE CIRCLED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; +1F155;NEGATIVE CIRCLED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; +1F156;NEGATIVE CIRCLED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; +1F157;NEGATIVE CIRCLED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; +1F158;NEGATIVE CIRCLED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; +1F159;NEGATIVE CIRCLED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; +1F15A;NEGATIVE CIRCLED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; +1F15B;NEGATIVE CIRCLED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; +1F15C;NEGATIVE CIRCLED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; +1F15D;NEGATIVE CIRCLED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; +1F15E;NEGATIVE CIRCLED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; +1F15F;NEGATIVE CIRCLED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; +1F160;NEGATIVE CIRCLED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; +1F161;NEGATIVE CIRCLED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; +1F162;NEGATIVE CIRCLED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; +1F163;NEGATIVE CIRCLED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; +1F164;NEGATIVE CIRCLED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; +1F165;NEGATIVE CIRCLED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; +1F166;NEGATIVE CIRCLED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; +1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; +1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; +1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; +1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;; +1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;; +1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;; +1F173;NEGATIVE SQUARED LATIN CAPITAL LETTER D;So;0;L;;;;;N;;;;; +1F174;NEGATIVE SQUARED LATIN CAPITAL LETTER E;So;0;L;;;;;N;;;;; +1F175;NEGATIVE SQUARED LATIN CAPITAL LETTER F;So;0;L;;;;;N;;;;; +1F176;NEGATIVE SQUARED LATIN CAPITAL LETTER G;So;0;L;;;;;N;;;;; +1F177;NEGATIVE SQUARED LATIN CAPITAL LETTER H;So;0;L;;;;;N;;;;; +1F178;NEGATIVE SQUARED LATIN CAPITAL LETTER I;So;0;L;;;;;N;;;;; +1F179;NEGATIVE SQUARED LATIN CAPITAL LETTER J;So;0;L;;;;;N;;;;; +1F17A;NEGATIVE SQUARED LATIN CAPITAL LETTER K;So;0;L;;;;;N;;;;; +1F17B;NEGATIVE SQUARED LATIN CAPITAL LETTER L;So;0;L;;;;;N;;;;; +1F17C;NEGATIVE SQUARED LATIN CAPITAL LETTER M;So;0;L;;;;;N;;;;; +1F17D;NEGATIVE SQUARED LATIN CAPITAL LETTER N;So;0;L;;;;;N;;;;; +1F17E;NEGATIVE SQUARED LATIN CAPITAL LETTER O;So;0;L;;;;;N;;;;; +1F17F;NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; +1F180;NEGATIVE SQUARED LATIN CAPITAL LETTER Q;So;0;L;;;;;N;;;;; +1F181;NEGATIVE SQUARED LATIN CAPITAL LETTER R;So;0;L;;;;;N;;;;; +1F182;NEGATIVE SQUARED LATIN CAPITAL LETTER S;So;0;L;;;;;N;;;;; +1F183;NEGATIVE SQUARED LATIN CAPITAL LETTER T;So;0;L;;;;;N;;;;; +1F184;NEGATIVE SQUARED LATIN CAPITAL LETTER U;So;0;L;;;;;N;;;;; +1F185;NEGATIVE SQUARED LATIN CAPITAL LETTER V;So;0;L;;;;;N;;;;; +1F186;NEGATIVE SQUARED LATIN CAPITAL LETTER W;So;0;L;;;;;N;;;;; +1F187;NEGATIVE SQUARED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;; +1F188;NEGATIVE SQUARED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;; +1F189;NEGATIVE SQUARED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;; +1F18A;CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P;So;0;L;;;;;N;;;;; +1F18B;NEGATIVE SQUARED IC;So;0;L;;;;;N;;;;; +1F18C;NEGATIVE SQUARED PA;So;0;L;;;;;N;;;;; +1F18D;NEGATIVE SQUARED SA;So;0;L;;;;;N;;;;; +1F18E;NEGATIVE SQUARED AB;So;0;L;;;;;N;;;;; +1F18F;NEGATIVE SQUARED WC;So;0;L;;;;;N;;;;; +1F190;SQUARE DJ;So;0;L; 0044 004A;;;;N;;;;; +1F191;SQUARED CL;So;0;L;;;;;N;;;;; +1F192;SQUARED COOL;So;0;L;;;;;N;;;;; +1F193;SQUARED FREE;So;0;L;;;;;N;;;;; +1F194;SQUARED ID;So;0;L;;;;;N;;;;; +1F195;SQUARED NEW;So;0;L;;;;;N;;;;; +1F196;SQUARED NG;So;0;L;;;;;N;;;;; +1F197;SQUARED OK;So;0;L;;;;;N;;;;; +1F198;SQUARED SOS;So;0;L;;;;;N;;;;; +1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;; +1F19A;SQUARED VS;So;0;L;;;;;N;;;;; +1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;; +1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;; +1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;; +1F1E9;REGIONAL INDICATOR SYMBOL LETTER D;So;0;L;;;;;N;;;;; +1F1EA;REGIONAL INDICATOR SYMBOL LETTER E;So;0;L;;;;;N;;;;; +1F1EB;REGIONAL INDICATOR SYMBOL LETTER F;So;0;L;;;;;N;;;;; +1F1EC;REGIONAL INDICATOR SYMBOL LETTER G;So;0;L;;;;;N;;;;; +1F1ED;REGIONAL INDICATOR SYMBOL LETTER H;So;0;L;;;;;N;;;;; +1F1EE;REGIONAL INDICATOR SYMBOL LETTER I;So;0;L;;;;;N;;;;; +1F1EF;REGIONAL INDICATOR SYMBOL LETTER J;So;0;L;;;;;N;;;;; +1F1F0;REGIONAL INDICATOR SYMBOL LETTER K;So;0;L;;;;;N;;;;; +1F1F1;REGIONAL INDICATOR SYMBOL LETTER L;So;0;L;;;;;N;;;;; +1F1F2;REGIONAL INDICATOR SYMBOL LETTER M;So;0;L;;;;;N;;;;; +1F1F3;REGIONAL INDICATOR SYMBOL LETTER N;So;0;L;;;;;N;;;;; +1F1F4;REGIONAL INDICATOR SYMBOL LETTER O;So;0;L;;;;;N;;;;; +1F1F5;REGIONAL INDICATOR SYMBOL LETTER P;So;0;L;;;;;N;;;;; +1F1F6;REGIONAL INDICATOR SYMBOL LETTER Q;So;0;L;;;;;N;;;;; +1F1F7;REGIONAL INDICATOR SYMBOL LETTER R;So;0;L;;;;;N;;;;; +1F1F8;REGIONAL INDICATOR SYMBOL LETTER S;So;0;L;;;;;N;;;;; +1F1F9;REGIONAL INDICATOR SYMBOL LETTER T;So;0;L;;;;;N;;;;; +1F1FA;REGIONAL INDICATOR SYMBOL LETTER U;So;0;L;;;;;N;;;;; +1F1FB;REGIONAL INDICATOR SYMBOL LETTER V;So;0;L;;;;;N;;;;; +1F1FC;REGIONAL INDICATOR SYMBOL LETTER W;So;0;L;;;;;N;;;;; +1F1FD;REGIONAL INDICATOR SYMBOL LETTER X;So;0;L;;;;;N;;;;; +1F1FE;REGIONAL INDICATOR SYMBOL LETTER Y;So;0;L;;;;;N;;;;; +1F1FF;REGIONAL INDICATOR SYMBOL LETTER Z;So;0;L;;;;;N;;;;; +1F200;SQUARE HIRAGANA HOKA;So;0;L; 307B 304B;;;;N;;;;; +1F201;SQUARED KATAKANA KOKO;So;0;L; 30B3 30B3;;;;N;;;;; +1F202;SQUARED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; +1F210;SQUARED CJK UNIFIED IDEOGRAPH-624B;So;0;L; 624B;;;;N;;;;; +1F211;SQUARED CJK UNIFIED IDEOGRAPH-5B57;So;0;L; 5B57;;;;N;;;;; +1F212;SQUARED CJK UNIFIED IDEOGRAPH-53CC;So;0;L; 53CC;;;;N;;;;; +1F213;SQUARED KATAKANA DE;So;0;L; 30C7;;;;N;;;;; +1F214;SQUARED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L; 4E8C;;;;N;;;;; +1F215;SQUARED CJK UNIFIED IDEOGRAPH-591A;So;0;L; 591A;;;;N;;;;; +1F216;SQUARED CJK UNIFIED IDEOGRAPH-89E3;So;0;L; 89E3;;;;N;;;;; +1F217;SQUARED CJK UNIFIED IDEOGRAPH-5929;So;0;L; 5929;;;;N;;;;; +1F218;SQUARED CJK UNIFIED IDEOGRAPH-4EA4;So;0;L; 4EA4;;;;N;;;;; +1F219;SQUARED CJK UNIFIED IDEOGRAPH-6620;So;0;L; 6620;;;;N;;;;; +1F21A;SQUARED CJK UNIFIED IDEOGRAPH-7121;So;0;L; 7121;;;;N;;;;; +1F21B;SQUARED CJK UNIFIED IDEOGRAPH-6599;So;0;L; 6599;;;;N;;;;; +1F21C;SQUARED CJK UNIFIED IDEOGRAPH-524D;So;0;L; 524D;;;;N;;;;; +1F21D;SQUARED CJK UNIFIED IDEOGRAPH-5F8C;So;0;L; 5F8C;;;;N;;;;; +1F21E;SQUARED CJK UNIFIED IDEOGRAPH-518D;So;0;L; 518D;;;;N;;;;; +1F21F;SQUARED CJK UNIFIED IDEOGRAPH-65B0;So;0;L; 65B0;;;;N;;;;; +1F220;SQUARED CJK UNIFIED IDEOGRAPH-521D;So;0;L; 521D;;;;N;;;;; +1F221;SQUARED CJK UNIFIED IDEOGRAPH-7D42;So;0;L; 7D42;;;;N;;;;; +1F222;SQUARED CJK UNIFIED IDEOGRAPH-751F;So;0;L; 751F;;;;N;;;;; +1F223;SQUARED CJK UNIFIED IDEOGRAPH-8CA9;So;0;L; 8CA9;;;;N;;;;; +1F224;SQUARED CJK UNIFIED IDEOGRAPH-58F0;So;0;L; 58F0;;;;N;;;;; +1F225;SQUARED CJK UNIFIED IDEOGRAPH-5439;So;0;L; 5439;;;;N;;;;; +1F226;SQUARED CJK UNIFIED IDEOGRAPH-6F14;So;0;L; 6F14;;;;N;;;;; +1F227;SQUARED CJK UNIFIED IDEOGRAPH-6295;So;0;L; 6295;;;;N;;;;; +1F228;SQUARED CJK UNIFIED IDEOGRAPH-6355;So;0;L; 6355;;;;N;;;;; +1F229;SQUARED CJK UNIFIED IDEOGRAPH-4E00;So;0;L; 4E00;;;;N;;;;; +1F22A;SQUARED CJK UNIFIED IDEOGRAPH-4E09;So;0;L; 4E09;;;;N;;;;; +1F22B;SQUARED CJK UNIFIED IDEOGRAPH-904A;So;0;L; 904A;;;;N;;;;; +1F22C;SQUARED CJK UNIFIED IDEOGRAPH-5DE6;So;0;L; 5DE6;;;;N;;;;; +1F22D;SQUARED CJK UNIFIED IDEOGRAPH-4E2D;So;0;L; 4E2D;;;;N;;;;; +1F22E;SQUARED CJK UNIFIED IDEOGRAPH-53F3;So;0;L; 53F3;;;;N;;;;; +1F22F;SQUARED CJK UNIFIED IDEOGRAPH-6307;So;0;L; 6307;;;;N;;;;; +1F230;SQUARED CJK UNIFIED IDEOGRAPH-8D70;So;0;L; 8D70;;;;N;;;;; +1F231;SQUARED CJK UNIFIED IDEOGRAPH-6253;So;0;L; 6253;;;;N;;;;; +1F232;SQUARED CJK UNIFIED IDEOGRAPH-7981;So;0;L; 7981;;;;N;;;;; +1F233;SQUARED CJK UNIFIED IDEOGRAPH-7A7A;So;0;L; 7A7A;;;;N;;;;; +1F234;SQUARED CJK UNIFIED IDEOGRAPH-5408;So;0;L; 5408;;;;N;;;;; +1F235;SQUARED CJK UNIFIED IDEOGRAPH-6E80;So;0;L; 6E80;;;;N;;;;; +1F236;SQUARED CJK UNIFIED IDEOGRAPH-6709;So;0;L; 6709;;;;N;;;;; +1F237;SQUARED CJK UNIFIED IDEOGRAPH-6708;So;0;L; 6708;;;;N;;;;; +1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L; 7533;;;;N;;;;; +1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L; 5272;;;;N;;;;; +1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L; 55B6;;;;N;;;;; +1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L; 3014 672C 3015;;;;N;;;;; +1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L; 3014 4E09 3015;;;;N;;;;; +1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L; 3014 4E8C 3015;;;;N;;;;; +1F243;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89;So;0;L; 3014 5B89 3015;;;;N;;;;; +1F244;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9;So;0;L; 3014 70B9 3015;;;;N;;;;; +1F245;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253;So;0;L; 3014 6253 3015;;;;N;;;;; +1F246;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7;So;0;L; 3014 76D7 3015;;;;N;;;;; +1F247;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD;So;0;L; 3014 52DD 3015;;;;N;;;;; +1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L; 3014 6557 3015;;;;N;;;;; +1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L; 5F97;;;;N;;;;; +1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L; 53EF;;;;N;;;;; +1F300;CYCLONE;So;0;ON;;;;;N;;;;; +1F301;FOGGY;So;0;ON;;;;;N;;;;; +1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;; +1F303;NIGHT WITH STARS;So;0;ON;;;;;N;;;;; +1F304;SUNRISE OVER MOUNTAINS;So;0;ON;;;;;N;;;;; +1F305;SUNRISE;So;0;ON;;;;;N;;;;; +1F306;CITYSCAPE AT DUSK;So;0;ON;;;;;N;;;;; +1F307;SUNSET OVER BUILDINGS;So;0;ON;;;;;N;;;;; +1F308;RAINBOW;So;0;ON;;;;;N;;;;; +1F309;BRIDGE AT NIGHT;So;0;ON;;;;;N;;;;; +1F30A;WATER WAVE;So;0;ON;;;;;N;;;;; +1F30B;VOLCANO;So;0;ON;;;;;N;;;;; +1F30C;MILKY WAY;So;0;ON;;;;;N;;;;; +1F30D;EARTH GLOBE EUROPE-AFRICA;So;0;ON;;;;;N;;;;; +1F30E;EARTH GLOBE AMERICAS;So;0;ON;;;;;N;;;;; +1F30F;EARTH GLOBE ASIA-AUSTRALIA;So;0;ON;;;;;N;;;;; +1F310;GLOBE WITH MERIDIANS;So;0;ON;;;;;N;;;;; +1F311;NEW MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F312;WAXING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F313;FIRST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F314;WAXING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F315;FULL MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F316;WANING GIBBOUS MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F317;LAST QUARTER MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F318;WANING CRESCENT MOON SYMBOL;So;0;ON;;;;;N;;;;; +1F319;CRESCENT MOON;So;0;ON;;;;;N;;;;; +1F31A;NEW MOON WITH FACE;So;0;ON;;;;;N;;;;; +1F31B;FIRST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; +1F31C;LAST QUARTER MOON WITH FACE;So;0;ON;;;;;N;;;;; +1F31D;FULL MOON WITH FACE;So;0;ON;;;;;N;;;;; +1F31E;SUN WITH FACE;So;0;ON;;;;;N;;;;; +1F31F;GLOWING STAR;So;0;ON;;;;;N;;;;; +1F320;SHOOTING STAR;So;0;ON;;;;;N;;;;; +1F330;CHESTNUT;So;0;ON;;;;;N;;;;; +1F331;SEEDLING;So;0;ON;;;;;N;;;;; +1F332;EVERGREEN TREE;So;0;ON;;;;;N;;;;; +1F333;DECIDUOUS TREE;So;0;ON;;;;;N;;;;; +1F334;PALM TREE;So;0;ON;;;;;N;;;;; +1F335;CACTUS;So;0;ON;;;;;N;;;;; +1F337;TULIP;So;0;ON;;;;;N;;;;; +1F338;CHERRY BLOSSOM;So;0;ON;;;;;N;;;;; +1F339;ROSE;So;0;ON;;;;;N;;;;; +1F33A;HIBISCUS;So;0;ON;;;;;N;;;;; +1F33B;SUNFLOWER;So;0;ON;;;;;N;;;;; +1F33C;BLOSSOM;So;0;ON;;;;;N;;;;; +1F33D;EAR OF MAIZE;So;0;ON;;;;;N;;;;; +1F33E;EAR OF RICE;So;0;ON;;;;;N;;;;; +1F33F;HERB;So;0;ON;;;;;N;;;;; +1F340;FOUR LEAF CLOVER;So;0;ON;;;;;N;;;;; +1F341;MAPLE LEAF;So;0;ON;;;;;N;;;;; +1F342;FALLEN LEAF;So;0;ON;;;;;N;;;;; +1F343;LEAF FLUTTERING IN WIND;So;0;ON;;;;;N;;;;; +1F344;MUSHROOM;So;0;ON;;;;;N;;;;; +1F345;TOMATO;So;0;ON;;;;;N;;;;; +1F346;AUBERGINE;So;0;ON;;;;;N;;;;; +1F347;GRAPES;So;0;ON;;;;;N;;;;; +1F348;MELON;So;0;ON;;;;;N;;;;; +1F349;WATERMELON;So;0;ON;;;;;N;;;;; +1F34A;TANGERINE;So;0;ON;;;;;N;;;;; +1F34B;LEMON;So;0;ON;;;;;N;;;;; +1F34C;BANANA;So;0;ON;;;;;N;;;;; +1F34D;PINEAPPLE;So;0;ON;;;;;N;;;;; +1F34E;RED APPLE;So;0;ON;;;;;N;;;;; +1F34F;GREEN APPLE;So;0;ON;;;;;N;;;;; +1F350;PEAR;So;0;ON;;;;;N;;;;; +1F351;PEACH;So;0;ON;;;;;N;;;;; +1F352;CHERRIES;So;0;ON;;;;;N;;;;; +1F353;STRAWBERRY;So;0;ON;;;;;N;;;;; +1F354;HAMBURGER;So;0;ON;;;;;N;;;;; +1F355;SLICE OF PIZZA;So;0;ON;;;;;N;;;;; +1F356;MEAT ON BONE;So;0;ON;;;;;N;;;;; +1F357;POULTRY LEG;So;0;ON;;;;;N;;;;; +1F358;RICE CRACKER;So;0;ON;;;;;N;;;;; +1F359;RICE BALL;So;0;ON;;;;;N;;;;; +1F35A;COOKED RICE;So;0;ON;;;;;N;;;;; +1F35B;CURRY AND RICE;So;0;ON;;;;;N;;;;; +1F35C;STEAMING BOWL;So;0;ON;;;;;N;;;;; +1F35D;SPAGHETTI;So;0;ON;;;;;N;;;;; +1F35E;BREAD;So;0;ON;;;;;N;;;;; +1F35F;FRENCH FRIES;So;0;ON;;;;;N;;;;; +1F360;ROASTED SWEET POTATO;So;0;ON;;;;;N;;;;; +1F361;DANGO;So;0;ON;;;;;N;;;;; +1F362;ODEN;So;0;ON;;;;;N;;;;; +1F363;SUSHI;So;0;ON;;;;;N;;;;; +1F364;FRIED SHRIMP;So;0;ON;;;;;N;;;;; +1F365;FISH CAKE WITH SWIRL DESIGN;So;0;ON;;;;;N;;;;; +1F366;SOFT ICE CREAM;So;0;ON;;;;;N;;;;; +1F367;SHAVED ICE;So;0;ON;;;;;N;;;;; +1F368;ICE CREAM;So;0;ON;;;;;N;;;;; +1F369;DOUGHNUT;So;0;ON;;;;;N;;;;; +1F36A;COOKIE;So;0;ON;;;;;N;;;;; +1F36B;CHOCOLATE BAR;So;0;ON;;;;;N;;;;; +1F36C;CANDY;So;0;ON;;;;;N;;;;; +1F36D;LOLLIPOP;So;0;ON;;;;;N;;;;; +1F36E;CUSTARD;So;0;ON;;;;;N;;;;; +1F36F;HONEY POT;So;0;ON;;;;;N;;;;; +1F370;SHORTCAKE;So;0;ON;;;;;N;;;;; +1F371;BENTO BOX;So;0;ON;;;;;N;;;;; +1F372;POT OF FOOD;So;0;ON;;;;;N;;;;; +1F373;COOKING;So;0;ON;;;;;N;;;;; +1F374;FORK AND KNIFE;So;0;ON;;;;;N;;;;; +1F375;TEACUP WITHOUT HANDLE;So;0;ON;;;;;N;;;;; +1F376;SAKE BOTTLE AND CUP;So;0;ON;;;;;N;;;;; +1F377;WINE GLASS;So;0;ON;;;;;N;;;;; +1F378;COCKTAIL GLASS;So;0;ON;;;;;N;;;;; +1F379;TROPICAL DRINK;So;0;ON;;;;;N;;;;; +1F37A;BEER MUG;So;0;ON;;;;;N;;;;; +1F37B;CLINKING BEER MUGS;So;0;ON;;;;;N;;;;; +1F37C;BABY BOTTLE;So;0;ON;;;;;N;;;;; +1F380;RIBBON;So;0;ON;;;;;N;;;;; +1F381;WRAPPED PRESENT;So;0;ON;;;;;N;;;;; +1F382;BIRTHDAY CAKE;So;0;ON;;;;;N;;;;; +1F383;JACK-O-LANTERN;So;0;ON;;;;;N;;;;; +1F384;CHRISTMAS TREE;So;0;ON;;;;;N;;;;; +1F385;FATHER CHRISTMAS;So;0;ON;;;;;N;;;;; +1F386;FIREWORKS;So;0;ON;;;;;N;;;;; +1F387;FIREWORK SPARKLER;So;0;ON;;;;;N;;;;; +1F388;BALLOON;So;0;ON;;;;;N;;;;; +1F389;PARTY POPPER;So;0;ON;;;;;N;;;;; +1F38A;CONFETTI BALL;So;0;ON;;;;;N;;;;; +1F38B;TANABATA TREE;So;0;ON;;;;;N;;;;; +1F38C;CROSSED FLAGS;So;0;ON;;;;;N;;;;; +1F38D;PINE DECORATION;So;0;ON;;;;;N;;;;; +1F38E;JAPANESE DOLLS;So;0;ON;;;;;N;;;;; +1F38F;CARP STREAMER;So;0;ON;;;;;N;;;;; +1F390;WIND CHIME;So;0;ON;;;;;N;;;;; +1F391;MOON VIEWING CEREMONY;So;0;ON;;;;;N;;;;; +1F392;SCHOOL SATCHEL;So;0;ON;;;;;N;;;;; +1F393;GRADUATION CAP;So;0;ON;;;;;N;;;;; +1F3A0;CAROUSEL HORSE;So;0;ON;;;;;N;;;;; +1F3A1;FERRIS WHEEL;So;0;ON;;;;;N;;;;; +1F3A2;ROLLER COASTER;So;0;ON;;;;;N;;;;; +1F3A3;FISHING POLE AND FISH;So;0;ON;;;;;N;;;;; +1F3A4;MICROPHONE;So;0;ON;;;;;N;;;;; +1F3A5;MOVIE CAMERA;So;0;ON;;;;;N;;;;; +1F3A6;CINEMA;So;0;ON;;;;;N;;;;; +1F3A7;HEADPHONE;So;0;ON;;;;;N;;;;; +1F3A8;ARTIST PALETTE;So;0;ON;;;;;N;;;;; +1F3A9;TOP HAT;So;0;ON;;;;;N;;;;; +1F3AA;CIRCUS TENT;So;0;ON;;;;;N;;;;; +1F3AB;TICKET;So;0;ON;;;;;N;;;;; +1F3AC;CLAPPER BOARD;So;0;ON;;;;;N;;;;; +1F3AD;PERFORMING ARTS;So;0;ON;;;;;N;;;;; +1F3AE;VIDEO GAME;So;0;ON;;;;;N;;;;; +1F3AF;DIRECT HIT;So;0;ON;;;;;N;;;;; +1F3B0;SLOT MACHINE;So;0;ON;;;;;N;;;;; +1F3B1;BILLIARDS;So;0;ON;;;;;N;;;;; +1F3B2;GAME DIE;So;0;ON;;;;;N;;;;; +1F3B3;BOWLING;So;0;ON;;;;;N;;;;; +1F3B4;FLOWER PLAYING CARDS;So;0;ON;;;;;N;;;;; +1F3B5;MUSICAL NOTE;So;0;ON;;;;;N;;;;; +1F3B6;MULTIPLE MUSICAL NOTES;So;0;ON;;;;;N;;;;; +1F3B7;SAXOPHONE;So;0;ON;;;;;N;;;;; +1F3B8;GUITAR;So;0;ON;;;;;N;;;;; +1F3B9;MUSICAL KEYBOARD;So;0;ON;;;;;N;;;;; +1F3BA;TRUMPET;So;0;ON;;;;;N;;;;; +1F3BB;VIOLIN;So;0;ON;;;;;N;;;;; +1F3BC;MUSICAL SCORE;So;0;ON;;;;;N;;;;; +1F3BD;RUNNING SHIRT WITH SASH;So;0;ON;;;;;N;;;;; +1F3BE;TENNIS RACQUET AND BALL;So;0;ON;;;;;N;;;;; +1F3BF;SKI AND SKI BOOT;So;0;ON;;;;;N;;;;; +1F3C0;BASKETBALL AND HOOP;So;0;ON;;;;;N;;;;; +1F3C1;CHEQUERED FLAG;So;0;ON;;;;;N;;;;; +1F3C2;SNOWBOARDER;So;0;ON;;;;;N;;;;; +1F3C3;RUNNER;So;0;ON;;;;;N;;;;; +1F3C4;SURFER;So;0;ON;;;;;N;;;;; +1F3C6;TROPHY;So;0;ON;;;;;N;;;;; +1F3C7;HORSE RACING;So;0;ON;;;;;N;;;;; +1F3C8;AMERICAN FOOTBALL;So;0;ON;;;;;N;;;;; +1F3C9;RUGBY FOOTBALL;So;0;ON;;;;;N;;;;; +1F3CA;SWIMMER;So;0;ON;;;;;N;;;;; +1F3E0;HOUSE BUILDING;So;0;ON;;;;;N;;;;; +1F3E1;HOUSE WITH GARDEN;So;0;ON;;;;;N;;;;; +1F3E2;OFFICE BUILDING;So;0;ON;;;;;N;;;;; +1F3E3;JAPANESE POST OFFICE;So;0;ON;;;;;N;;;;; +1F3E4;EUROPEAN POST OFFICE;So;0;ON;;;;;N;;;;; +1F3E5;HOSPITAL;So;0;ON;;;;;N;;;;; +1F3E6;BANK;So;0;ON;;;;;N;;;;; +1F3E7;AUTOMATED TELLER MACHINE;So;0;ON;;;;;N;;;;; +1F3E8;HOTEL;So;0;ON;;;;;N;;;;; +1F3E9;LOVE HOTEL;So;0;ON;;;;;N;;;;; +1F3EA;CONVENIENCE STORE;So;0;ON;;;;;N;;;;; +1F3EB;SCHOOL;So;0;ON;;;;;N;;;;; +1F3EC;DEPARTMENT STORE;So;0;ON;;;;;N;;;;; +1F3ED;FACTORY;So;0;ON;;;;;N;;;;; +1F3EE;IZAKAYA LANTERN;So;0;ON;;;;;N;;;;; +1F3EF;JAPANESE CASTLE;So;0;ON;;;;;N;;;;; +1F3F0;EUROPEAN CASTLE;So;0;ON;;;;;N;;;;; +1F400;RAT;So;0;ON;;;;;N;;;;; +1F401;MOUSE;So;0;ON;;;;;N;;;;; +1F402;OX;So;0;ON;;;;;N;;;;; +1F403;WATER BUFFALO;So;0;ON;;;;;N;;;;; +1F404;COW;So;0;ON;;;;;N;;;;; +1F405;TIGER;So;0;ON;;;;;N;;;;; +1F406;LEOPARD;So;0;ON;;;;;N;;;;; +1F407;RABBIT;So;0;ON;;;;;N;;;;; +1F408;CAT;So;0;ON;;;;;N;;;;; +1F409;DRAGON;So;0;ON;;;;;N;;;;; +1F40A;CROCODILE;So;0;ON;;;;;N;;;;; +1F40B;WHALE;So;0;ON;;;;;N;;;;; +1F40C;SNAIL;So;0;ON;;;;;N;;;;; +1F40D;SNAKE;So;0;ON;;;;;N;;;;; +1F40E;HORSE;So;0;ON;;;;;N;;;;; +1F40F;RAM;So;0;ON;;;;;N;;;;; +1F410;GOAT;So;0;ON;;;;;N;;;;; +1F411;SHEEP;So;0;ON;;;;;N;;;;; +1F412;MONKEY;So;0;ON;;;;;N;;;;; +1F413;ROOSTER;So;0;ON;;;;;N;;;;; +1F414;CHICKEN;So;0;ON;;;;;N;;;;; +1F415;DOG;So;0;ON;;;;;N;;;;; +1F416;PIG;So;0;ON;;;;;N;;;;; +1F417;BOAR;So;0;ON;;;;;N;;;;; +1F418;ELEPHANT;So;0;ON;;;;;N;;;;; +1F419;OCTOPUS;So;0;ON;;;;;N;;;;; +1F41A;SPIRAL SHELL;So;0;ON;;;;;N;;;;; +1F41B;BUG;So;0;ON;;;;;N;;;;; +1F41C;ANT;So;0;ON;;;;;N;;;;; +1F41D;HONEYBEE;So;0;ON;;;;;N;;;;; +1F41E;LADY BEETLE;So;0;ON;;;;;N;;;;; +1F41F;FISH;So;0;ON;;;;;N;;;;; +1F420;TROPICAL FISH;So;0;ON;;;;;N;;;;; +1F421;BLOWFISH;So;0;ON;;;;;N;;;;; +1F422;TURTLE;So;0;ON;;;;;N;;;;; +1F423;HATCHING CHICK;So;0;ON;;;;;N;;;;; +1F424;BABY CHICK;So;0;ON;;;;;N;;;;; +1F425;FRONT-FACING BABY CHICK;So;0;ON;;;;;N;;;;; +1F426;BIRD;So;0;ON;;;;;N;;;;; +1F427;PENGUIN;So;0;ON;;;;;N;;;;; +1F428;KOALA;So;0;ON;;;;;N;;;;; +1F429;POODLE;So;0;ON;;;;;N;;;;; +1F42A;DROMEDARY CAMEL;So;0;ON;;;;;N;;;;; +1F42B;BACTRIAN CAMEL;So;0;ON;;;;;N;;;;; +1F42C;DOLPHIN;So;0;ON;;;;;N;;;;; +1F42D;MOUSE FACE;So;0;ON;;;;;N;;;;; +1F42E;COW FACE;So;0;ON;;;;;N;;;;; +1F42F;TIGER FACE;So;0;ON;;;;;N;;;;; +1F430;RABBIT FACE;So;0;ON;;;;;N;;;;; +1F431;CAT FACE;So;0;ON;;;;;N;;;;; +1F432;DRAGON FACE;So;0;ON;;;;;N;;;;; +1F433;SPOUTING WHALE;So;0;ON;;;;;N;;;;; +1F434;HORSE FACE;So;0;ON;;;;;N;;;;; +1F435;MONKEY FACE;So;0;ON;;;;;N;;;;; +1F436;DOG FACE;So;0;ON;;;;;N;;;;; +1F437;PIG FACE;So;0;ON;;;;;N;;;;; +1F438;FROG FACE;So;0;ON;;;;;N;;;;; +1F439;HAMSTER FACE;So;0;ON;;;;;N;;;;; +1F43A;WOLF FACE;So;0;ON;;;;;N;;;;; +1F43B;BEAR FACE;So;0;ON;;;;;N;;;;; +1F43C;PANDA FACE;So;0;ON;;;;;N;;;;; +1F43D;PIG NOSE;So;0;ON;;;;;N;;;;; +1F43E;PAW PRINTS;So;0;ON;;;;;N;;;;; +1F440;EYES;So;0;ON;;;;;N;;;;; +1F442;EAR;So;0;ON;;;;;N;;;;; +1F443;NOSE;So;0;ON;;;;;N;;;;; +1F444;MOUTH;So;0;ON;;;;;N;;;;; +1F445;TONGUE;So;0;ON;;;;;N;;;;; +1F446;WHITE UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; +1F447;WHITE DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; +1F448;WHITE LEFT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; +1F449;WHITE RIGHT POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;; +1F44A;FISTED HAND SIGN;So;0;ON;;;;;N;;;;; +1F44B;WAVING HAND SIGN;So;0;ON;;;;;N;;;;; +1F44C;OK HAND SIGN;So;0;ON;;;;;N;;;;; +1F44D;THUMBS UP SIGN;So;0;ON;;;;;N;;;;; +1F44E;THUMBS DOWN SIGN;So;0;ON;;;;;N;;;;; +1F44F;CLAPPING HANDS SIGN;So;0;ON;;;;;N;;;;; +1F450;OPEN HANDS SIGN;So;0;ON;;;;;N;;;;; +1F451;CROWN;So;0;ON;;;;;N;;;;; +1F452;WOMANS HAT;So;0;ON;;;;;N;;;;; +1F453;EYEGLASSES;So;0;ON;;;;;N;;;;; +1F454;NECKTIE;So;0;ON;;;;;N;;;;; +1F455;T-SHIRT;So;0;ON;;;;;N;;;;; +1F456;JEANS;So;0;ON;;;;;N;;;;; +1F457;DRESS;So;0;ON;;;;;N;;;;; +1F458;KIMONO;So;0;ON;;;;;N;;;;; +1F459;BIKINI;So;0;ON;;;;;N;;;;; +1F45A;WOMANS CLOTHES;So;0;ON;;;;;N;;;;; +1F45B;PURSE;So;0;ON;;;;;N;;;;; +1F45C;HANDBAG;So;0;ON;;;;;N;;;;; +1F45D;POUCH;So;0;ON;;;;;N;;;;; +1F45E;MANS SHOE;So;0;ON;;;;;N;;;;; +1F45F;ATHLETIC SHOE;So;0;ON;;;;;N;;;;; +1F460;HIGH-HEELED SHOE;So;0;ON;;;;;N;;;;; +1F461;WOMANS SANDAL;So;0;ON;;;;;N;;;;; +1F462;WOMANS BOOTS;So;0;ON;;;;;N;;;;; +1F463;FOOTPRINTS;So;0;ON;;;;;N;;;;; +1F464;BUST IN SILHOUETTE;So;0;ON;;;;;N;;;;; +1F465;BUSTS IN SILHOUETTE;So;0;ON;;;;;N;;;;; +1F466;BOY;So;0;ON;;;;;N;;;;; +1F467;GIRL;So;0;ON;;;;;N;;;;; +1F468;MAN;So;0;ON;;;;;N;;;;; +1F469;WOMAN;So;0;ON;;;;;N;;;;; +1F46A;FAMILY;So;0;ON;;;;;N;;;;; +1F46B;MAN AND WOMAN HOLDING HANDS;So;0;ON;;;;;N;;;;; +1F46C;TWO MEN HOLDING HANDS;So;0;ON;;;;;N;;;;; +1F46D;TWO WOMEN HOLDING HANDS;So;0;ON;;;;;N;;;;; +1F46E;POLICE OFFICER;So;0;ON;;;;;N;;;;; +1F46F;WOMAN WITH BUNNY EARS;So;0;ON;;;;;N;;;;; +1F470;BRIDE WITH VEIL;So;0;ON;;;;;N;;;;; +1F471;PERSON WITH BLOND HAIR;So;0;ON;;;;;N;;;;; +1F472;MAN WITH GUA PI MAO;So;0;ON;;;;;N;;;;; +1F473;MAN WITH TURBAN;So;0;ON;;;;;N;;;;; +1F474;OLDER MAN;So;0;ON;;;;;N;;;;; +1F475;OLDER WOMAN;So;0;ON;;;;;N;;;;; +1F476;BABY;So;0;ON;;;;;N;;;;; +1F477;CONSTRUCTION WORKER;So;0;ON;;;;;N;;;;; +1F478;PRINCESS;So;0;ON;;;;;N;;;;; +1F479;JAPANESE OGRE;So;0;ON;;;;;N;;;;; +1F47A;JAPANESE GOBLIN;So;0;ON;;;;;N;;;;; +1F47B;GHOST;So;0;ON;;;;;N;;;;; +1F47C;BABY ANGEL;So;0;ON;;;;;N;;;;; +1F47D;EXTRATERRESTRIAL ALIEN;So;0;ON;;;;;N;;;;; +1F47E;ALIEN MONSTER;So;0;ON;;;;;N;;;;; +1F47F;IMP;So;0;ON;;;;;N;;;;; +1F480;SKULL;So;0;ON;;;;;N;;;;; +1F481;INFORMATION DESK PERSON;So;0;ON;;;;;N;;;;; +1F482;GUARDSMAN;So;0;ON;;;;;N;;;;; +1F483;DANCER;So;0;ON;;;;;N;;;;; +1F484;LIPSTICK;So;0;ON;;;;;N;;;;; +1F485;NAIL POLISH;So;0;ON;;;;;N;;;;; +1F486;FACE MASSAGE;So;0;ON;;;;;N;;;;; +1F487;HAIRCUT;So;0;ON;;;;;N;;;;; +1F488;BARBER POLE;So;0;ON;;;;;N;;;;; +1F489;SYRINGE;So;0;ON;;;;;N;;;;; +1F48A;PILL;So;0;ON;;;;;N;;;;; +1F48B;KISS MARK;So;0;ON;;;;;N;;;;; +1F48C;LOVE LETTER;So;0;L;;;;;N;;;;; +1F48D;RING;So;0;ON;;;;;N;;;;; +1F48E;GEM STONE;So;0;ON;;;;;N;;;;; +1F48F;KISS;So;0;ON;;;;;N;;;;; +1F490;BOUQUET;So;0;ON;;;;;N;;;;; +1F491;COUPLE WITH HEART;So;0;ON;;;;;N;;;;; +1F492;WEDDING;So;0;ON;;;;;N;;;;; +1F493;BEATING HEART;So;0;ON;;;;;N;;;;; +1F494;BROKEN HEART;So;0;ON;;;;;N;;;;; +1F495;TWO HEARTS;So;0;ON;;;;;N;;;;; +1F496;SPARKLING HEART;So;0;ON;;;;;N;;;;; +1F497;GROWING HEART;So;0;ON;;;;;N;;;;; +1F498;HEART WITH ARROW;So;0;ON;;;;;N;;;;; +1F499;BLUE HEART;So;0;ON;;;;;N;;;;; +1F49A;GREEN HEART;So;0;ON;;;;;N;;;;; +1F49B;YELLOW HEART;So;0;ON;;;;;N;;;;; +1F49C;PURPLE HEART;So;0;ON;;;;;N;;;;; +1F49D;HEART WITH RIBBON;So;0;ON;;;;;N;;;;; +1F49E;REVOLVING HEARTS;So;0;ON;;;;;N;;;;; +1F49F;HEART DECORATION;So;0;ON;;;;;N;;;;; +1F4A0;DIAMOND SHAPE WITH A DOT INSIDE;So;0;ON;;;;;N;;;;; +1F4A1;ELECTRIC LIGHT BULB;So;0;ON;;;;;N;;;;; +1F4A2;ANGER SYMBOL;So;0;ON;;;;;N;;;;; +1F4A3;BOMB;So;0;ON;;;;;N;;;;; +1F4A4;SLEEPING SYMBOL;So;0;ON;;;;;N;;;;; +1F4A5;COLLISION SYMBOL;So;0;ON;;;;;N;;;;; +1F4A6;SPLASHING SWEAT SYMBOL;So;0;ON;;;;;N;;;;; +1F4A7;DROPLET;So;0;ON;;;;;N;;;;; +1F4A8;DASH SYMBOL;So;0;ON;;;;;N;;;;; +1F4A9;PILE OF POO;So;0;ON;;;;;N;;;;; +1F4AA;FLEXED BICEPS;So;0;ON;;;;;N;;;;; +1F4AB;DIZZY SYMBOL;So;0;ON;;;;;N;;;;; +1F4AC;SPEECH BALLOON;So;0;ON;;;;;N;;;;; +1F4AD;THOUGHT BALLOON;So;0;ON;;;;;N;;;;; +1F4AE;WHITE FLOWER;So;0;ON;;;;;N;;;;; +1F4AF;HUNDRED POINTS SYMBOL;So;0;ON;;;;;N;;;;; +1F4B0;MONEY BAG;So;0;ON;;;;;N;;;;; +1F4B1;CURRENCY EXCHANGE;So;0;ON;;;;;N;;;;; +1F4B2;HEAVY DOLLAR SIGN;So;0;ON;;;;;N;;;;; +1F4B3;CREDIT CARD;So;0;ON;;;;;N;;;;; +1F4B4;BANKNOTE WITH YEN SIGN;So;0;ON;;;;;N;;;;; +1F4B5;BANKNOTE WITH DOLLAR SIGN;So;0;ON;;;;;N;;;;; +1F4B6;BANKNOTE WITH EURO SIGN;So;0;ON;;;;;N;;;;; +1F4B7;BANKNOTE WITH POUND SIGN;So;0;ON;;;;;N;;;;; +1F4B8;MONEY WITH WINGS;So;0;ON;;;;;N;;;;; +1F4B9;CHART WITH UPWARDS TREND AND YEN SIGN;So;0;ON;;;;;N;;;;; +1F4BA;SEAT;So;0;ON;;;;;N;;;;; +1F4BB;PERSONAL COMPUTER;So;0;ON;;;;;N;;;;; +1F4BC;BRIEFCASE;So;0;ON;;;;;N;;;;; +1F4BD;MINIDISC;So;0;ON;;;;;N;;;;; +1F4BE;FLOPPY DISK;So;0;ON;;;;;N;;;;; +1F4BF;OPTICAL DISC;So;0;ON;;;;;N;;;;; +1F4C0;DVD;So;0;ON;;;;;N;;;;; +1F4C1;FILE FOLDER;So;0;ON;;;;;N;;;;; +1F4C2;OPEN FILE FOLDER;So;0;ON;;;;;N;;;;; +1F4C3;PAGE WITH CURL;So;0;ON;;;;;N;;;;; +1F4C4;PAGE FACING UP;So;0;ON;;;;;N;;;;; +1F4C5;CALENDAR;So;0;ON;;;;;N;;;;; +1F4C6;TEAR-OFF CALENDAR;So;0;ON;;;;;N;;;;; +1F4C7;CARD INDEX;So;0;ON;;;;;N;;;;; +1F4C8;CHART WITH UPWARDS TREND;So;0;ON;;;;;N;;;;; +1F4C9;CHART WITH DOWNWARDS TREND;So;0;ON;;;;;N;;;;; +1F4CA;BAR CHART;So;0;ON;;;;;N;;;;; +1F4CB;CLIPBOARD;So;0;ON;;;;;N;;;;; +1F4CC;PUSHPIN;So;0;ON;;;;;N;;;;; +1F4CD;ROUND PUSHPIN;So;0;ON;;;;;N;;;;; +1F4CE;PAPERCLIP;So;0;ON;;;;;N;;;;; +1F4CF;STRAIGHT RULER;So;0;ON;;;;;N;;;;; +1F4D0;TRIANGULAR RULER;So;0;ON;;;;;N;;;;; +1F4D1;BOOKMARK TABS;So;0;ON;;;;;N;;;;; +1F4D2;LEDGER;So;0;ON;;;;;N;;;;; +1F4D3;NOTEBOOK;So;0;ON;;;;;N;;;;; +1F4D4;NOTEBOOK WITH DECORATIVE COVER;So;0;ON;;;;;N;;;;; +1F4D5;CLOSED BOOK;So;0;ON;;;;;N;;;;; +1F4D6;OPEN BOOK;So;0;ON;;;;;N;;;;; +1F4D7;GREEN BOOK;So;0;ON;;;;;N;;;;; +1F4D8;BLUE BOOK;So;0;ON;;;;;N;;;;; +1F4D9;ORANGE BOOK;So;0;ON;;;;;N;;;;; +1F4DA;BOOKS;So;0;ON;;;;;N;;;;; +1F4DB;NAME BADGE;So;0;ON;;;;;N;;;;; +1F4DC;SCROLL;So;0;ON;;;;;N;;;;; +1F4DD;MEMO;So;0;ON;;;;;N;;;;; +1F4DE;TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;; +1F4DF;PAGER;So;0;ON;;;;;N;;;;; +1F4E0;FAX MACHINE;So;0;ON;;;;;N;;;;; +1F4E1;SATELLITE ANTENNA;So;0;ON;;;;;N;;;;; +1F4E2;PUBLIC ADDRESS LOUDSPEAKER;So;0;ON;;;;;N;;;;; +1F4E3;CHEERING MEGAPHONE;So;0;ON;;;;;N;;;;; +1F4E4;OUTBOX TRAY;So;0;ON;;;;;N;;;;; +1F4E5;INBOX TRAY;So;0;ON;;;;;N;;;;; +1F4E6;PACKAGE;So;0;ON;;;;;N;;;;; +1F4E7;E-MAIL SYMBOL;So;0;ON;;;;;N;;;;; +1F4E8;INCOMING ENVELOPE;So;0;ON;;;;;N;;;;; +1F4E9;ENVELOPE WITH DOWNWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; +1F4EA;CLOSED MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; +1F4EB;CLOSED MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; +1F4EC;OPEN MAILBOX WITH RAISED FLAG;So;0;ON;;;;;N;;;;; +1F4ED;OPEN MAILBOX WITH LOWERED FLAG;So;0;ON;;;;;N;;;;; +1F4EE;POSTBOX;So;0;ON;;;;;N;;;;; +1F4EF;POSTAL HORN;So;0;ON;;;;;N;;;;; +1F4F0;NEWSPAPER;So;0;ON;;;;;N;;;;; +1F4F1;MOBILE PHONE;So;0;ON;;;;;N;;;;; +1F4F2;MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT;So;0;ON;;;;;N;;;;; +1F4F3;VIBRATION MODE;So;0;ON;;;;;N;;;;; +1F4F4;MOBILE PHONE OFF;So;0;ON;;;;;N;;;;; +1F4F5;NO MOBILE PHONES;So;0;ON;;;;;N;;;;; +1F4F6;ANTENNA WITH BARS;So;0;ON;;;;;N;;;;; +1F4F7;CAMERA;So;0;ON;;;;;N;;;;; +1F4F9;VIDEO CAMERA;So;0;ON;;;;;N;;;;; +1F4FA;TELEVISION;So;0;ON;;;;;N;;;;; +1F4FB;RADIO;So;0;ON;;;;;N;;;;; +1F4FC;VIDEOCASSETTE;So;0;ON;;;;;N;;;;; +1F500;TWISTED RIGHTWARDS ARROWS;So;0;ON;;;;;N;;;;; +1F501;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; +1F502;CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY;So;0;ON;;;;;N;;;;; +1F503;CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; +1F504;ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS;So;0;ON;;;;;N;;;;; +1F505;LOW BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; +1F506;HIGH BRIGHTNESS SYMBOL;So;0;ON;;;;;N;;;;; +1F507;SPEAKER WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; +1F508;SPEAKER;So;0;ON;;;;;N;;;;; +1F509;SPEAKER WITH ONE SOUND WAVE;So;0;ON;;;;;N;;;;; +1F50A;SPEAKER WITH THREE SOUND WAVES;So;0;ON;;;;;N;;;;; +1F50B;BATTERY;So;0;ON;;;;;N;;;;; +1F50C;ELECTRIC PLUG;So;0;ON;;;;;N;;;;; +1F50D;LEFT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; +1F50E;RIGHT-POINTING MAGNIFYING GLASS;So;0;ON;;;;;N;;;;; +1F50F;LOCK WITH INK PEN;So;0;ON;;;;;N;;;;; +1F510;CLOSED LOCK WITH KEY;So;0;ON;;;;;N;;;;; +1F511;KEY;So;0;ON;;;;;N;;;;; +1F512;LOCK;So;0;ON;;;;;N;;;;; +1F513;OPEN LOCK;So;0;ON;;;;;N;;;;; +1F514;BELL;So;0;ON;;;;;N;;;;; +1F515;BELL WITH CANCELLATION STROKE;So;0;ON;;;;;N;;;;; +1F516;BOOKMARK;So;0;ON;;;;;N;;;;; +1F517;LINK SYMBOL;So;0;ON;;;;;N;;;;; +1F518;RADIO BUTTON;So;0;ON;;;;;N;;;;; +1F519;BACK WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; +1F51A;END WITH LEFTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; +1F51B;ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE;So;0;ON;;;;;N;;;;; +1F51C;SOON WITH RIGHTWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; +1F51D;TOP WITH UPWARDS ARROW ABOVE;So;0;ON;;;;;N;;;;; +1F51E;NO ONE UNDER EIGHTEEN SYMBOL;So;0;ON;;;;;N;;;;; +1F51F;KEYCAP TEN;So;0;ON;;;;;N;;;;; +1F520;INPUT SYMBOL FOR LATIN CAPITAL LETTERS;So;0;ON;;;;;N;;;;; +1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;; +1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;; +1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;; +1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;L;;;;;N;;;;; +1F525;FIRE;So;0;ON;;;;;N;;;;; +1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;; +1F527;WRENCH;So;0;ON;;;;;N;;;;; +1F528;HAMMER;So;0;ON;;;;;N;;;;; +1F529;NUT AND BOLT;So;0;ON;;;;;N;;;;; +1F52A;HOCHO;So;0;ON;;;;;N;;;;; +1F52B;PISTOL;So;0;ON;;;;;N;;;;; +1F52C;MICROSCOPE;So;0;ON;;;;;N;;;;; +1F52D;TELESCOPE;So;0;ON;;;;;N;;;;; +1F52E;CRYSTAL BALL;So;0;ON;;;;;N;;;;; +1F52F;SIX POINTED STAR WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; +1F530;JAPANESE SYMBOL FOR BEGINNER;So;0;ON;;;;;N;;;;; +1F531;TRIDENT EMBLEM;So;0;ON;;;;;N;;;;; +1F532;BLACK SQUARE BUTTON;So;0;ON;;;;;N;;;;; +1F533;WHITE SQUARE BUTTON;So;0;ON;;;;;N;;;;; +1F534;LARGE RED CIRCLE;So;0;ON;;;;;N;;;;; +1F535;LARGE BLUE CIRCLE;So;0;ON;;;;;N;;;;; +1F536;LARGE ORANGE DIAMOND;So;0;ON;;;;;N;;;;; +1F537;LARGE BLUE DIAMOND;So;0;ON;;;;;N;;;;; +1F538;SMALL ORANGE DIAMOND;So;0;ON;;;;;N;;;;; +1F539;SMALL BLUE DIAMOND;So;0;ON;;;;;N;;;;; +1F53A;UP-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; +1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;; +1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; +1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;; +1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;; +1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;; +1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;; +1F553;CLOCK FACE FOUR OCLOCK;So;0;ON;;;;;N;;;;; +1F554;CLOCK FACE FIVE OCLOCK;So;0;ON;;;;;N;;;;; +1F555;CLOCK FACE SIX OCLOCK;So;0;ON;;;;;N;;;;; +1F556;CLOCK FACE SEVEN OCLOCK;So;0;ON;;;;;N;;;;; +1F557;CLOCK FACE EIGHT OCLOCK;So;0;ON;;;;;N;;;;; +1F558;CLOCK FACE NINE OCLOCK;So;0;ON;;;;;N;;;;; +1F559;CLOCK FACE TEN OCLOCK;So;0;ON;;;;;N;;;;; +1F55A;CLOCK FACE ELEVEN OCLOCK;So;0;ON;;;;;N;;;;; +1F55B;CLOCK FACE TWELVE OCLOCK;So;0;ON;;;;;N;;;;; +1F55C;CLOCK FACE ONE-THIRTY;So;0;ON;;;;;N;;;;; +1F55D;CLOCK FACE TWO-THIRTY;So;0;ON;;;;;N;;;;; +1F55E;CLOCK FACE THREE-THIRTY;So;0;ON;;;;;N;;;;; +1F55F;CLOCK FACE FOUR-THIRTY;So;0;ON;;;;;N;;;;; +1F560;CLOCK FACE FIVE-THIRTY;So;0;ON;;;;;N;;;;; +1F561;CLOCK FACE SIX-THIRTY;So;0;ON;;;;;N;;;;; +1F562;CLOCK FACE SEVEN-THIRTY;So;0;ON;;;;;N;;;;; +1F563;CLOCK FACE EIGHT-THIRTY;So;0;ON;;;;;N;;;;; +1F564;CLOCK FACE NINE-THIRTY;So;0;ON;;;;;N;;;;; +1F565;CLOCK FACE TEN-THIRTY;So;0;ON;;;;;N;;;;; +1F566;CLOCK FACE ELEVEN-THIRTY;So;0;ON;;;;;N;;;;; +1F567;CLOCK FACE TWELVE-THIRTY;So;0;ON;;;;;N;;;;; +1F5FB;MOUNT FUJI;So;0;ON;;;;;N;;;;; +1F5FC;TOKYO TOWER;So;0;ON;;;;;N;;;;; +1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;; +1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;; +1F5FF;MOYAI;So;0;ON;;;;;N;;;;; +1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; +1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; +1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1F604;SMILING FACE WITH OPEN MOUTH AND SMILING EYES;So;0;ON;;;;;N;;;;; +1F605;SMILING FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; +1F606;SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; +1F607;SMILING FACE WITH HALO;So;0;ON;;;;;N;;;;; +1F608;SMILING FACE WITH HORNS;So;0;ON;;;;;N;;;;; +1F609;WINKING FACE;So;0;ON;;;;;N;;;;; +1F60A;SMILING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; +1F60B;FACE SAVOURING DELICIOUS FOOD;So;0;ON;;;;;N;;;;; +1F60C;RELIEVED FACE;So;0;ON;;;;;N;;;;; +1F60D;SMILING FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; +1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;; +1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;; +1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;; +1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;; +1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;; +1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;; +1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;; +1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;; +1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; +1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;; +1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;; +1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;; +1F620;ANGRY FACE;So;0;ON;;;;;N;;;;; +1F621;POUTING FACE;So;0;ON;;;;;N;;;;; +1F622;CRYING FACE;So;0;ON;;;;;N;;;;; +1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;; +1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;; +1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;; +1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;; +1F629;WEARY FACE;So;0;ON;;;;;N;;;;; +1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;; +1F62B;TIRED FACE;So;0;ON;;;;;N;;;;; +1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;; +1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;; +1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;; +1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;; +1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;; +1F635;DIZZY FACE;So;0;ON;;;;;N;;;;; +1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;; +1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;; +1F638;GRINNING CAT FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;; +1F639;CAT FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;; +1F63A;SMILING CAT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1F63B;SMILING CAT FACE WITH HEART-SHAPED EYES;So;0;ON;;;;;N;;;;; +1F63C;CAT FACE WITH WRY SMILE;So;0;ON;;;;;N;;;;; +1F63D;KISSING CAT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; +1F63E;POUTING CAT FACE;So;0;ON;;;;;N;;;;; +1F63F;CRYING CAT FACE;So;0;ON;;;;;N;;;;; +1F640;WEARY CAT FACE;So;0;ON;;;;;N;;;;; +1F645;FACE WITH NO GOOD GESTURE;So;0;ON;;;;;N;;;;; +1F646;FACE WITH OK GESTURE;So;0;ON;;;;;N;;;;; +1F647;PERSON BOWING DEEPLY;So;0;ON;;;;;N;;;;; +1F648;SEE-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; +1F649;HEAR-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; +1F64A;SPEAK-NO-EVIL MONKEY;So;0;ON;;;;;N;;;;; +1F64B;HAPPY PERSON RAISING ONE HAND;So;0;ON;;;;;N;;;;; +1F64C;PERSON RAISING BOTH HANDS IN CELEBRATION;So;0;ON;;;;;N;;;;; +1F64D;PERSON FROWNING;So;0;ON;;;;;N;;;;; +1F64E;PERSON WITH POUTING FACE;So;0;ON;;;;;N;;;;; +1F64F;PERSON WITH FOLDED HANDS;So;0;ON;;;;;N;;;;; +1F680;ROCKET;So;0;ON;;;;;N;;;;; +1F681;HELICOPTER;So;0;ON;;;;;N;;;;; +1F682;STEAM LOCOMOTIVE;So;0;ON;;;;;N;;;;; +1F683;RAILWAY CAR;So;0;ON;;;;;N;;;;; +1F684;HIGH-SPEED TRAIN;So;0;ON;;;;;N;;;;; +1F685;HIGH-SPEED TRAIN WITH BULLET NOSE;So;0;ON;;;;;N;;;;; +1F686;TRAIN;So;0;ON;;;;;N;;;;; +1F687;METRO;So;0;ON;;;;;N;;;;; +1F688;LIGHT RAIL;So;0;ON;;;;;N;;;;; +1F689;STATION;So;0;ON;;;;;N;;;;; +1F68A;TRAM;So;0;ON;;;;;N;;;;; +1F68B;TRAM CAR;So;0;ON;;;;;N;;;;; +1F68C;BUS;So;0;ON;;;;;N;;;;; +1F68D;ONCOMING BUS;So;0;ON;;;;;N;;;;; +1F68E;TROLLEYBUS;So;0;ON;;;;;N;;;;; +1F68F;BUS STOP;So;0;ON;;;;;N;;;;; +1F690;MINIBUS;So;0;ON;;;;;N;;;;; +1F691;AMBULANCE;So;0;ON;;;;;N;;;;; +1F692;FIRE ENGINE;So;0;ON;;;;;N;;;;; +1F693;POLICE CAR;So;0;ON;;;;;N;;;;; +1F694;ONCOMING POLICE CAR;So;0;ON;;;;;N;;;;; +1F695;TAXI;So;0;ON;;;;;N;;;;; +1F696;ONCOMING TAXI;So;0;ON;;;;;N;;;;; +1F697;AUTOMOBILE;So;0;ON;;;;;N;;;;; +1F698;ONCOMING AUTOMOBILE;So;0;ON;;;;;N;;;;; +1F699;RECREATIONAL VEHICLE;So;0;ON;;;;;N;;;;; +1F69A;DELIVERY TRUCK;So;0;ON;;;;;N;;;;; +1F69B;ARTICULATED LORRY;So;0;ON;;;;;N;;;;; +1F69C;TRACTOR;So;0;ON;;;;;N;;;;; +1F69D;MONORAIL;So;0;ON;;;;;N;;;;; +1F69E;MOUNTAIN RAILWAY;So;0;ON;;;;;N;;;;; +1F69F;SUSPENSION RAILWAY;So;0;ON;;;;;N;;;;; +1F6A0;MOUNTAIN CABLEWAY;So;0;ON;;;;;N;;;;; +1F6A1;AERIAL TRAMWAY;So;0;ON;;;;;N;;;;; +1F6A2;SHIP;So;0;ON;;;;;N;;;;; +1F6A3;ROWBOAT;So;0;ON;;;;;N;;;;; +1F6A4;SPEEDBOAT;So;0;ON;;;;;N;;;;; +1F6A5;HORIZONTAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; +1F6A6;VERTICAL TRAFFIC LIGHT;So;0;ON;;;;;N;;;;; +1F6A7;CONSTRUCTION SIGN;So;0;ON;;;;;N;;;;; +1F6A8;POLICE CARS REVOLVING LIGHT;So;0;ON;;;;;N;;;;; +1F6A9;TRIANGULAR FLAG ON POST;So;0;ON;;;;;N;;;;; +1F6AA;DOOR;So;0;ON;;;;;N;;;;; +1F6AB;NO ENTRY SIGN;So;0;ON;;;;;N;;;;; +1F6AC;SMOKING SYMBOL;So;0;ON;;;;;N;;;;; +1F6AD;NO SMOKING SYMBOL;So;0;ON;;;;;N;;;;; +1F6AE;PUT LITTER IN ITS PLACE SYMBOL;So;0;ON;;;;;N;;;;; +1F6AF;DO NOT LITTER SYMBOL;So;0;ON;;;;;N;;;;; +1F6B0;POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; +1F6B1;NON-POTABLE WATER SYMBOL;So;0;ON;;;;;N;;;;; +1F6B2;BICYCLE;So;0;ON;;;;;N;;;;; +1F6B3;NO BICYCLES;So;0;ON;;;;;N;;;;; +1F6B4;BICYCLIST;So;0;ON;;;;;N;;;;; +1F6B5;MOUNTAIN BICYCLIST;So;0;ON;;;;;N;;;;; +1F6B6;PEDESTRIAN;So;0;ON;;;;;N;;;;; +1F6B7;NO PEDESTRIANS;So;0;ON;;;;;N;;;;; +1F6B8;CHILDREN CROSSING;So;0;ON;;;;;N;;;;; +1F6B9;MENS SYMBOL;So;0;ON;;;;;N;;;;; +1F6BA;WOMENS SYMBOL;So;0;ON;;;;;N;;;;; +1F6BB;RESTROOM;So;0;ON;;;;;N;;;;; +1F6BC;BABY SYMBOL;So;0;ON;;;;;N;;;;; +1F6BD;TOILET;So;0;ON;;;;;N;;;;; +1F6BE;WATER CLOSET;So;0;ON;;;;;N;;;;; +1F6BF;SHOWER;So;0;ON;;;;;N;;;;; +1F6C0;BATH;So;0;ON;;;;;N;;;;; +1F6C1;BATHTUB;So;0;ON;;;;;N;;;;; +1F6C2;PASSPORT CONTROL;So;0;ON;;;;;N;;;;; +1F6C3;CUSTOMS;So;0;ON;;;;;N;;;;; +1F6C4;BAGGAGE CLAIM;So;0;ON;;;;;N;;;;; +1F6C5;LEFT LUGGAGE;So;0;ON;;;;;N;;;;; +1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;; +1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;; +1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;; +1F703;ALCHEMICAL SYMBOL FOR EARTH;So;0;ON;;;;;N;;;;; +1F704;ALCHEMICAL SYMBOL FOR WATER;So;0;ON;;;;;N;;;;; +1F705;ALCHEMICAL SYMBOL FOR AQUAFORTIS;So;0;ON;;;;;N;;;;; +1F706;ALCHEMICAL SYMBOL FOR AQUA REGIA;So;0;ON;;;;;N;;;;; +1F707;ALCHEMICAL SYMBOL FOR AQUA REGIA-2;So;0;ON;;;;;N;;;;; +1F708;ALCHEMICAL SYMBOL FOR AQUA VITAE;So;0;ON;;;;;N;;;;; +1F709;ALCHEMICAL SYMBOL FOR AQUA VITAE-2;So;0;ON;;;;;N;;;;; +1F70A;ALCHEMICAL SYMBOL FOR VINEGAR;So;0;ON;;;;;N;;;;; +1F70B;ALCHEMICAL SYMBOL FOR VINEGAR-2;So;0;ON;;;;;N;;;;; +1F70C;ALCHEMICAL SYMBOL FOR VINEGAR-3;So;0;ON;;;;;N;;;;; +1F70D;ALCHEMICAL SYMBOL FOR SULFUR;So;0;ON;;;;;N;;;;; +1F70E;ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR;So;0;ON;;;;;N;;;;; +1F70F;ALCHEMICAL SYMBOL FOR BLACK SULFUR;So;0;ON;;;;;N;;;;; +1F710;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE;So;0;ON;;;;;N;;;;; +1F711;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2;So;0;ON;;;;;N;;;;; +1F712;ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3;So;0;ON;;;;;N;;;;; +1F713;ALCHEMICAL SYMBOL FOR CINNABAR;So;0;ON;;;;;N;;;;; +1F714;ALCHEMICAL SYMBOL FOR SALT;So;0;ON;;;;;N;;;;; +1F715;ALCHEMICAL SYMBOL FOR NITRE;So;0;ON;;;;;N;;;;; +1F716;ALCHEMICAL SYMBOL FOR VITRIOL;So;0;ON;;;;;N;;;;; +1F717;ALCHEMICAL SYMBOL FOR VITRIOL-2;So;0;ON;;;;;N;;;;; +1F718;ALCHEMICAL SYMBOL FOR ROCK SALT;So;0;ON;;;;;N;;;;; +1F719;ALCHEMICAL SYMBOL FOR ROCK SALT-2;So;0;ON;;;;;N;;;;; +1F71A;ALCHEMICAL SYMBOL FOR GOLD;So;0;ON;;;;;N;;;;; +1F71B;ALCHEMICAL SYMBOL FOR SILVER;So;0;ON;;;;;N;;;;; +1F71C;ALCHEMICAL SYMBOL FOR IRON ORE;So;0;ON;;;;;N;;;;; +1F71D;ALCHEMICAL SYMBOL FOR IRON ORE-2;So;0;ON;;;;;N;;;;; +1F71E;ALCHEMICAL SYMBOL FOR CROCUS OF IRON;So;0;ON;;;;;N;;;;; +1F71F;ALCHEMICAL SYMBOL FOR REGULUS OF IRON;So;0;ON;;;;;N;;;;; +1F720;ALCHEMICAL SYMBOL FOR COPPER ORE;So;0;ON;;;;;N;;;;; +1F721;ALCHEMICAL SYMBOL FOR IRON-COPPER ORE;So;0;ON;;;;;N;;;;; +1F722;ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER;So;0;ON;;;;;N;;;;; +1F723;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER;So;0;ON;;;;;N;;;;; +1F724;ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2;So;0;ON;;;;;N;;;;; +1F725;ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; +1F726;ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE;So;0;ON;;;;;N;;;;; +1F727;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER;So;0;ON;;;;;N;;;;; +1F728;ALCHEMICAL SYMBOL FOR VERDIGRIS;So;0;ON;;;;;N;;;;; +1F729;ALCHEMICAL SYMBOL FOR TIN ORE;So;0;ON;;;;;N;;;;; +1F72A;ALCHEMICAL SYMBOL FOR LEAD ORE;So;0;ON;;;;;N;;;;; +1F72B;ALCHEMICAL SYMBOL FOR ANTIMONY ORE;So;0;ON;;;;;N;;;;; +1F72C;ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY;So;0;ON;;;;;N;;;;; +1F72D;ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; +1F72E;ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY;So;0;ON;;;;;N;;;;; +1F72F;ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY;So;0;ON;;;;;N;;;;; +1F730;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY;So;0;ON;;;;;N;;;;; +1F731;ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2;So;0;ON;;;;;N;;;;; +1F732;ALCHEMICAL SYMBOL FOR REGULUS;So;0;ON;;;;;N;;;;; +1F733;ALCHEMICAL SYMBOL FOR REGULUS-2;So;0;ON;;;;;N;;;;; +1F734;ALCHEMICAL SYMBOL FOR REGULUS-3;So;0;ON;;;;;N;;;;; +1F735;ALCHEMICAL SYMBOL FOR REGULUS-4;So;0;ON;;;;;N;;;;; +1F736;ALCHEMICAL SYMBOL FOR ALKALI;So;0;ON;;;;;N;;;;; +1F737;ALCHEMICAL SYMBOL FOR ALKALI-2;So;0;ON;;;;;N;;;;; +1F738;ALCHEMICAL SYMBOL FOR MARCASITE;So;0;ON;;;;;N;;;;; +1F739;ALCHEMICAL SYMBOL FOR SAL-AMMONIAC;So;0;ON;;;;;N;;;;; +1F73A;ALCHEMICAL SYMBOL FOR ARSENIC;So;0;ON;;;;;N;;;;; +1F73B;ALCHEMICAL SYMBOL FOR REALGAR;So;0;ON;;;;;N;;;;; +1F73C;ALCHEMICAL SYMBOL FOR REALGAR-2;So;0;ON;;;;;N;;;;; +1F73D;ALCHEMICAL SYMBOL FOR AURIPIGMENT;So;0;ON;;;;;N;;;;; +1F73E;ALCHEMICAL SYMBOL FOR BISMUTH ORE;So;0;ON;;;;;N;;;;; +1F73F;ALCHEMICAL SYMBOL FOR TARTAR;So;0;ON;;;;;N;;;;; +1F740;ALCHEMICAL SYMBOL FOR TARTAR-2;So;0;ON;;;;;N;;;;; +1F741;ALCHEMICAL SYMBOL FOR QUICK LIME;So;0;ON;;;;;N;;;;; +1F742;ALCHEMICAL SYMBOL FOR BORAX;So;0;ON;;;;;N;;;;; +1F743;ALCHEMICAL SYMBOL FOR BORAX-2;So;0;ON;;;;;N;;;;; +1F744;ALCHEMICAL SYMBOL FOR BORAX-3;So;0;ON;;;;;N;;;;; +1F745;ALCHEMICAL SYMBOL FOR ALUM;So;0;ON;;;;;N;;;;; +1F746;ALCHEMICAL SYMBOL FOR OIL;So;0;ON;;;;;N;;;;; +1F747;ALCHEMICAL SYMBOL FOR SPIRIT;So;0;ON;;;;;N;;;;; +1F748;ALCHEMICAL SYMBOL FOR TINCTURE;So;0;ON;;;;;N;;;;; +1F749;ALCHEMICAL SYMBOL FOR GUM;So;0;ON;;;;;N;;;;; +1F74A;ALCHEMICAL SYMBOL FOR WAX;So;0;ON;;;;;N;;;;; +1F74B;ALCHEMICAL SYMBOL FOR POWDER;So;0;ON;;;;;N;;;;; +1F74C;ALCHEMICAL SYMBOL FOR CALX;So;0;ON;;;;;N;;;;; +1F74D;ALCHEMICAL SYMBOL FOR TUTTY;So;0;ON;;;;;N;;;;; +1F74E;ALCHEMICAL SYMBOL FOR CAPUT MORTUUM;So;0;ON;;;;;N;;;;; +1F74F;ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE;So;0;ON;;;;;N;;;;; +1F750;ALCHEMICAL SYMBOL FOR CADUCEUS;So;0;ON;;;;;N;;;;; +1F751;ALCHEMICAL SYMBOL FOR TRIDENT;So;0;ON;;;;;N;;;;; +1F752;ALCHEMICAL SYMBOL FOR STARRED TRIDENT;So;0;ON;;;;;N;;;;; +1F753;ALCHEMICAL SYMBOL FOR LODESTONE;So;0;ON;;;;;N;;;;; +1F754;ALCHEMICAL SYMBOL FOR SOAP;So;0;ON;;;;;N;;;;; +1F755;ALCHEMICAL SYMBOL FOR URINE;So;0;ON;;;;;N;;;;; +1F756;ALCHEMICAL SYMBOL FOR HORSE DUNG;So;0;ON;;;;;N;;;;; +1F757;ALCHEMICAL SYMBOL FOR ASHES;So;0;ON;;;;;N;;;;; +1F758;ALCHEMICAL SYMBOL FOR POT ASHES;So;0;ON;;;;;N;;;;; +1F759;ALCHEMICAL SYMBOL FOR BRICK;So;0;ON;;;;;N;;;;; +1F75A;ALCHEMICAL SYMBOL FOR POWDERED BRICK;So;0;ON;;;;;N;;;;; +1F75B;ALCHEMICAL SYMBOL FOR AMALGAM;So;0;ON;;;;;N;;;;; +1F75C;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM;So;0;ON;;;;;N;;;;; +1F75D;ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2;So;0;ON;;;;;N;;;;; +1F75E;ALCHEMICAL SYMBOL FOR SUBLIMATION;So;0;ON;;;;;N;;;;; +1F75F;ALCHEMICAL SYMBOL FOR PRECIPITATE;So;0;ON;;;;;N;;;;; +1F760;ALCHEMICAL SYMBOL FOR DISTILL;So;0;ON;;;;;N;;;;; +1F761;ALCHEMICAL SYMBOL FOR DISSOLVE;So;0;ON;;;;;N;;;;; +1F762;ALCHEMICAL SYMBOL FOR DISSOLVE-2;So;0;ON;;;;;N;;;;; +1F763;ALCHEMICAL SYMBOL FOR PURIFY;So;0;ON;;;;;N;;;;; +1F764;ALCHEMICAL SYMBOL FOR PUTREFACTION;So;0;ON;;;;;N;;;;; +1F765;ALCHEMICAL SYMBOL FOR CRUCIBLE;So;0;ON;;;;;N;;;;; +1F766;ALCHEMICAL SYMBOL FOR CRUCIBLE-2;So;0;ON;;;;;N;;;;; +1F767;ALCHEMICAL SYMBOL FOR CRUCIBLE-3;So;0;ON;;;;;N;;;;; +1F768;ALCHEMICAL SYMBOL FOR CRUCIBLE-4;So;0;ON;;;;;N;;;;; +1F769;ALCHEMICAL SYMBOL FOR CRUCIBLE-5;So;0;ON;;;;;N;;;;; +1F76A;ALCHEMICAL SYMBOL FOR ALEMBIC;So;0;ON;;;;;N;;;;; +1F76B;ALCHEMICAL SYMBOL FOR BATH OF MARY;So;0;ON;;;;;N;;;;; +1F76C;ALCHEMICAL SYMBOL FOR BATH OF VAPOURS;So;0;ON;;;;;N;;;;; +1F76D;ALCHEMICAL SYMBOL FOR RETORT;So;0;ON;;;;;N;;;;; +1F76E;ALCHEMICAL SYMBOL FOR HOUR;So;0;ON;;;;;N;;;;; +1F76F;ALCHEMICAL SYMBOL FOR NIGHT;So;0;ON;;;;;N;;;;; +1F770;ALCHEMICAL SYMBOL FOR DAY-NIGHT;So;0;ON;;;;;N;;;;; +1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;; +1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;; +1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;; +20000;;Lo;0;L;;;;;N;;;;; +2A6D6;;Lo;0;L;;;;;N;;;;; +2A700;;Lo;0;L;;;;;N;;;;; +2B734;;Lo;0;L;;;;;N;;;;; +2B740;;Lo;0;L;;;;;N;;;;; +2B81D;;Lo;0;L;;;;;N;;;;; +2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; +2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; +2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; +2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;; +2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;; +2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;; +2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;; +2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;; +2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;; +2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;; +2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;; +2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;; +2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;; +2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;; +2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;; +2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;; +2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;; +2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;; +2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;; +2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;; +2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;; +2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;; +2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;; +2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;; +2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;; +2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;; +2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;; +2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;; +2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;; +2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;; +2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;; +2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;; +2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;; +2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;; +2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;; +2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;; +2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;; +2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;; +2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;; +2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;; +2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;; +2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;; +2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;; +2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;; +2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;; +2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;; +2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;; +2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;; +2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;; +2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;; +2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;; +2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;; +2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;; +2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;; +2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;; +2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;; +2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;; +2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;; +2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;; +2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;; +2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;; +2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;; +2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;; +2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;; +2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;; +2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;; +2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;; +2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;; +2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;; +2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;; +2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;; +2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;; +2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;; +2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;; +2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;; +2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;; +2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;; +2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;; +2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;; +2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;; +2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;; +2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;; +2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;; +2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;; +2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;; +2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;; +2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;; +2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;; +2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;; +2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;; +2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;; +2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;; +2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;; +2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;; +2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;; +2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;; +2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;; +2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;; +2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;; +2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;; +2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;; +2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;; +2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;; +2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;; +2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;; +2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;; +2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;; +2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;; +2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;; +2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;; +2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;; +2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;; +2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;; +2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;; +2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;; +2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;; +2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;; +2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;; +2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;; +2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;; +2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;; +2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;; +2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;; +2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;; +2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;; +2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;; +2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;; +2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;; +2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;; +2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;; +2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;; +2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;; +2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;; +2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;; +2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;; +2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;; +2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;; +2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;; +2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;; +2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;; +2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;; +2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;; +2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;; +2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;; +2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;; +2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;; +2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;; +2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;; +2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;; +2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;; +2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;; +2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;; +2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;; +2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;; +2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;; +2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;; +2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;; +2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;; +2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;; +2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;; +2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;; +2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;; +2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;; +2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;; +2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;; +2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;; +2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;; +2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;; +2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;; +2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;; +2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;; +2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;; +2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;; +2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;; +2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;; +2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;; +2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;; +2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;; +2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;; +2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;; +2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;; +2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;; +2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;; +2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;; +2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;; +2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;; +2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;; +2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;; +2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;; +2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;; +2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;; +2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;; +2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;; +2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;; +2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;; +2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;; +2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;; +2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;; +2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;; +2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;; +2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;; +2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;; +2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;; +2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;; +2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;; +2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;; +2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;; +2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;; +2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;; +2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;; +2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;; +2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;; +2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;; +2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;; +2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;; +2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;; +2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;; +2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;; +2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;; +2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;; +2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;; +2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;; +2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;; +2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;; +2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;; +2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;; +2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;; +2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;; +2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;; +2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;; +2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;; +2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;; +2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;; +2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;; +2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;; +2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;; +2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;; +2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;; +2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;; +2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;; +2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;; +2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;; +2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;; +2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;; +2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;; +2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;; +2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;; +2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;; +2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;; +2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;; +2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;; +2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;; +2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;; +2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;; +2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;; +2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;; +2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;; +2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;; +2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;; +2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;; +2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;; +2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;; +2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;; +2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;; +2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;; +2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;; +2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;; +2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;; +2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;; +2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;; +2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;; +2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;; +2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;; +2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;; +2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;; +2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;; +2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;; +2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;; +2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;; +2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;; +2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;; +2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;; +2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;; +2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;; +2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;; +2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;; +2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;; +2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;; +2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;; +2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;; +2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;; +2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;; +2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;; +2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;; +2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;; +2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;; +2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;; +2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;; +2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;; +2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;; +2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;; +2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;; +2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;; +2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;; +2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;; +2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;; +2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;; +2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;; +2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;; +2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;; +2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;; +2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;; +2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;; +2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;; +2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;; +2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;; +2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;; +2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;; +2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;; +2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;; +2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;; +2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;; +2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;; +2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;; +2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;; +2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;; +2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;; +2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;; +2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;; +2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;; +2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;; +2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;; +2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;; +2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;; +2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;; +2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;; +2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;; +2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;; +2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;; +2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;; +2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;; +2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;; +2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;; +2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;; +2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;; +2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;; +2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;; +2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;; +2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;; +2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;; +2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;; +2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;; +2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;; +2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;; +2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;; +2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;; +2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;; +2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;; +2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;; +2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;; +2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;; +2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;; +2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;; +2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;; +2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;; +2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;; +2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;; +2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;; +2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;; +2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;; +2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;; +2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;; +2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;; +2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;; +2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;; +2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;; +2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;; +2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;; +2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;; +2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;; +2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;; +2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;; +2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;; +2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;; +2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;; +2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;; +2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;; +2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;; +2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;; +2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;; +2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;; +2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;; +2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;; +2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;; +2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;; +2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;; +2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;; +2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;; +2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;; +2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;; +2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;; +2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;; +2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;; +2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;; +2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;; +2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;; +2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;; +2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;; +2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;; +2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;; +2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;; +2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;; +2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;; +2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;; +2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;; +2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;; +2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;; +2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;; +2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;; +2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;; +2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;; +2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;; +2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;; +2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;; +2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;; +2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;; +2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;; +2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;; +2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;; +2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;; +2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;; +2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;; +2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;; +2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;; +2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;; +2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;; +2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;; +2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;; +2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;; +2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;; +2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;; +2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;; +2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;; +2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;; +2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;; +2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;; +2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;; +2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;; +2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;; +2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;; +2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;; +2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;; +2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;; +2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;; +2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;; +2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;; +2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;; +2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;; +2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;; +2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;; +2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;; +2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;; +2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;; +2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;; +2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;; +2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;; +2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;; +2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;; +2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;; +2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;; +2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;; +2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;; +2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;; +2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;; +2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;; +2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;; +2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;; +2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;; +2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;; +2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;; +2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;; +2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;; +2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;; +2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;; +2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;; +2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;; +2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;; +2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;; +2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;; +2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;; +2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;; +2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;; +2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;; +2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;; +2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;; +2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;; +2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;; +2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;; +2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;; +2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;; +2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;; +2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;; +2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;; +2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;; +2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;; +2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;; +2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;; +2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;; +2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;; +2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;; +2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;; +2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;; +2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;; +2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;; +2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;; +2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;; +2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;; +2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;; +2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;; +2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;; +2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;; +2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;; +2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;; +2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;; +2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;; +2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;; +2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;; +2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;; +2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;; +2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;; +2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;; +2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;; +2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;; +2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;; +2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;; +2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;; +2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;; +2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;; +2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;; +2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;; +2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;; +2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; +E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; +E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; +E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; +E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;; +E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;; +E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;; +E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;; +E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;; +E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;; +E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;; +E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;; +E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;; +E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;; +E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;; +E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;; +E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;; +E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;; +E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;; +E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;; +E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;; +E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;; +E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;; +E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;; +E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;; +E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;; +E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;; +E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;; +E003A;TAG COLON;Cf;0;BN;;;;;N;;;;; +E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;; +E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;; +E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;; +E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;; +E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;; +E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;; +E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;; +E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;; +E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;; +E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;; +E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;; +E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;; +E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;; +E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;; +E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;; +E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;; +E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;; +E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;; +E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;; +E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;; +E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;; +E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;; +E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;; +E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;; +E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;; +E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;; +E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;; +E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;; +E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;; +E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;; +E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;; +E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;; +E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; +E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;; +E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; +E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;; +E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;; +E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;; +E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;; +E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;; +E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;; +E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;; +E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;; +E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;; +E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;; +E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;; +E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;; +E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;; +E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;; +E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;; +E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;; +E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;; +E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;; +E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;; +E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;; +E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;; +E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;; +E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;; +E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;; +E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;; +E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;; +E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;; +E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;; +E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;; +E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; +E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;; +E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; +E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;; +E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;; +E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;; +E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;; +E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;; +E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;; +E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;; +E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;; +E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;; +E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;; +E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;; +E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;; +E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;; +E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;; +E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;; +E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;; +E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;; +E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;; +E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;; +E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;; +E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;; +E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;; +E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;; +E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;; +E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;; +E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;; +E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;; +E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;; +E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;; +E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;; +E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;; +E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;; +E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;; +E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;; +E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;; +E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;; +E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;; +E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;; +E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;; +E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;; +E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;; +E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;; +E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;; +E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;; +E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;; +E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;; +E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;; +E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;; +E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;; +E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;; +E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;; +E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;; +E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;; +E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;; +E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;; +E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;; +E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;; +E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;; +E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;; +E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;; +E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;; +E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;; +E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;; +E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;; +E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;; +E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;; +E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;; +E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;; +E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;; +E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;; +E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;; +E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;; +E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;; +E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;; +E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;; +E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;; +E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;; +E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;; +E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;; +E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;; +E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;; +E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;; +E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;; +E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;; +E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;; +E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;; +E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;; +E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;; +E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;; +E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;; +E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;; +E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;; +E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;; +E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;; +E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;; +E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;; +E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;; +E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;; +E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;; +E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;; +E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;; +E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;; +E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;; +E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;; +E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;; +E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;; +E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;; +E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;; +E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;; +E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;; +E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;; +E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;; +E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;; +E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;; +E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;; +E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;; +E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;; +E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;; +E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;; +E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;; +E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;; +E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;; +E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;; +E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;; +E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;; +E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;; +E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;; +E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;; +E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;; +E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;; +E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;; +E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;; +E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;; +E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;; +E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;; +E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;; +E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;; +E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;; +E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;; +E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;; +E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;; +E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;; +E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;; +E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;; +E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;; +E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;; +E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;; +E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;; +E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;; +E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;; +E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;; +E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;; +E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;; +E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;; +E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;; +E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;; +E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;; +E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;; +E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;; +E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;; +E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;; +E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;; +E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;; +E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;; +E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;; +E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;; +E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;; +E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;; +E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;; +E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;; +E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;; +E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;; +E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;; +E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;; +E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;; +E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;; +E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;; +E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;; +E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;; +E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;; +E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;; +E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;; +E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;; +E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;; +E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;; +E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;; +E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;; +E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;; +E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;; +E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;; +E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;; +E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;; +E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;; +E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;; +E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;; +E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;; +E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;; +E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;; +E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;; +E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;; +E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;; +E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;; +E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;; +E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;; +E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;; +E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;; +E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;; +E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;; +E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;; +E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;; +E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;; +E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;; +E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;; +E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;; +E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;; +E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;; +E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;; +E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;; +E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;; +E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;; +E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;; +E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;; +E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;; +E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;; +E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;; +E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;; +E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;; +E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;; +E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;; +E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;; +E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;; +E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;; +E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;; +E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;; +E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;; +E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;; +E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;; +E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;; +E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;; +E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;; +E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;; +E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;; +F0000;;Co;0;L;;;;;N;;;;; +FFFFD;;Co;0;L;;;;;N;;;;; +100000;;Co;0;L;;;;;N;;;;; +10FFFD;;Co;0;L;;;;;N;;;;; diff --git a/util/bash-completion.d/Makefile.am b/util/bash-completion.d/Makefile.am new file mode 100644 index 000000000..136287cf1 --- /dev/null +++ b/util/bash-completion.d/Makefile.am @@ -0,0 +1,13 @@ + +bash_completion_source = grub-completion.bash.in +bash_completion_script = grub + +EXTRA_DIST = $(bash_completion_source) + +CLEANFILES = $(bash_completion_script) config.log + +bashcompletiondir = $(sysconfdir)/bash_completion.d +bashcompletion_DATA = $(bash_completion_script) + +$(bash_completion_script): $(bash_completion_source) $(top_builddir)/config.status + $(top_builddir)/config.status --file=$@:$< diff --git a/util/bash-completion.d/Makefile.in b/util/bash-completion.d/Makefile.in new file mode 100644 index 000000000..867bd8108 --- /dev/null +++ b/util/bash-completion.d/Makefile.in @@ -0,0 +1,1255 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = util/bash-completion.d +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argp.m4 \ + $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/errno_h.m4 \ + $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exponentd.m4 \ + $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fnmatch.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/langinfo_h.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libunistring-base.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ + $(top_srcdir)/m4/mbsrtowcs.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbswidth.m4 $(top_srcdir)/m4/mbtowc.m4 \ + $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ + $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/sleep.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdalign.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strchrnul.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sysexits.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/warn-on-use.m4 \ + $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctype_h.m4 \ + $(top_srcdir)/m4/wcwidth.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config-util.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(bashcompletiondir)" +DATA = $(bashcompletion_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +pkglibexecdir = @pkglibexecdir@ +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +BOOT_TIME_STATS = @BOOT_TIME_STATS@ +BSS_START_SYMBOL = @BSS_START_SYMBOL@ +BUILD_CC = @BUILD_CC@ +BUILD_CFLAGS = @BUILD_CFLAGS@ +BUILD_CPPFLAGS = @BUILD_CPPFLAGS@ +BUILD_EXEEXT = @BUILD_EXEEXT@ +BUILD_FREETYPE = @BUILD_FREETYPE@ +BUILD_LDFLAGS = @BUILD_LDFLAGS@ +BUILD_LIBM = @BUILD_LIBM@ +BUILD_SIZEOF_LONG = @BUILD_SIZEOF_LONG@ +BUILD_SIZEOF_VOID_P = @BUILD_SIZEOF_VOID_P@ +BUILD_WORDS_BIGENDIAN = @BUILD_WORDS_BIGENDIAN@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CMP = @CMP@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DISK_CACHE_STATS = @DISK_CACHE_STATS@ +DJVU_FONT_SOURCE = @DJVU_FONT_SOURCE@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EFIEMU64_LINK_FORMAT = @EFIEMU64_LINK_FORMAT@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +END_SYMBOL = @END_SYMBOL@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FLOAT_H = @FLOAT_H@ +FNMATCH_H = @FNMATCH_H@ +FONT_SOURCE = @FONT_SOURCE@ +FREETYPE = @FREETYPE@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +GRUB_BOOT_MACHINE_LINK_ADDR = @GRUB_BOOT_MACHINE_LINK_ADDR@ +GRUB_PLATFORM = @GRUB_PLATFORM@ +GRUB_TARGET_CPU = @GRUB_TARGET_CPU@ +HAVE_ASM_USCORE = @HAVE_ASM_USCORE@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FONT_SOURCE = @HAVE_FONT_SOURCE@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +HOST_CC = @HOST_CC@ +HOST_CCASFLAGS = @HOST_CCASFLAGS@ +HOST_CFLAGS = @HOST_CFLAGS@ +HOST_CPPFLAGS = @HOST_CPPFLAGS@ +HOST_LDFLAGS = @HOST_LDFLAGS@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBDEVMAPPER = @LIBDEVMAPPER@ +LIBGEOM = @LIBGEOM@ +LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ +LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBLZMA = @LIBLZMA@ +LIBNVPAIR = @LIBNVPAIR@ +LIBOBJS = @LIBOBJS@ +LIBPCIACCESS = @LIBPCIACCESS@ +LIBS = @LIBS@ +LIBSDL = @LIBSDL@ +LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ +LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ +LIBUTIL = @LIBUTIL@ +LIBZFS = @LIBZFS@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDALIGN_H = @STDALIGN_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYSEXITS_H = @SYSEXITS_H@ +TARGET_APPLE_LINKER = @TARGET_APPLE_LINKER@ +TARGET_CC = @TARGET_CC@ +TARGET_CCAS = @TARGET_CCAS@ +TARGET_CCASFLAGS = @TARGET_CCASFLAGS@ +TARGET_CC_VERSION = @TARGET_CC_VERSION@ +TARGET_CFLAGS = @TARGET_CFLAGS@ +TARGET_CPP = @TARGET_CPP@ +TARGET_CPPFLAGS = @TARGET_CPPFLAGS@ +TARGET_DECOMPRESSOR_LINK_ADDR = @TARGET_DECOMPRESSOR_LINK_ADDR@ +TARGET_IMG_BASE_LDOPT = @TARGET_IMG_BASE_LDOPT@ +TARGET_IMG_CFLAGS = @TARGET_IMG_CFLAGS@ +TARGET_IMG_LDFLAGS = @TARGET_IMG_LDFLAGS@ +TARGET_LDFLAGS = @TARGET_LDFLAGS@ +TARGET_LDFLAGS_OLDMAGIC = @TARGET_LDFLAGS_OLDMAGIC@ +TARGET_LINK_ADDR = @TARGET_LINK_ADDR@ +TARGET_MODULE_FORMAT = @TARGET_MODULE_FORMAT@ +TARGET_NM = @TARGET_NM@ +TARGET_NMFLAGS_DEFINED_ONLY = @TARGET_NMFLAGS_DEFINED_ONLY@ +TARGET_NMFLAGS_MINUS_P = @TARGET_NMFLAGS_MINUS_P@ +TARGET_OBJ2ELF = @TARGET_OBJ2ELF@ +TARGET_OBJCONV = @TARGET_OBJCONV@ +TARGET_OBJCOPY = @TARGET_OBJCOPY@ +TARGET_RANLIB = @TARGET_RANLIB@ +TARGET_STRIP = @TARGET_STRIP@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_FREETYPE = @ac_ct_FREETYPE@ +ac_ct_TARGET_CC = @ac_ct_TARGET_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +bootdirname = @bootdirname@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_freetype_cflags = @build_freetype_cflags@ +build_freetype_libs = @build_freetype_libs@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_efiemu = @enable_efiemu@ +enable_grub_emu_pci = @enable_grub_emu_pci@ +enable_grub_emu_sdl = @enable_grub_emu_sdl@ +enable_grub_mkfont = @enable_grub_mkfont@ +enable_grub_mount = @enable_grub_mount@ +exec_prefix = @exec_prefix@ +freetype_cflags = @freetype_cflags@ +freetype_libs = @freetype_libs@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +grub_bios_setup = @grub_bios_setup@ +grub_editenv = @grub_editenv@ +grub_file = @grub_file@ +grub_glue_efi = @grub_glue_efi@ +grub_install = @grub_install@ +grub_mkconfig = @grub_mkconfig@ +grub_mkfont = @grub_mkfont@ +grub_mkimage = @grub_mkimage@ +grub_mklayout = @grub_mklayout@ +grub_mkpasswd_pbkdf2 = @grub_mkpasswd_pbkdf2@ +grub_mkrelpath = @grub_mkrelpath@ +grub_mkrescue = @grub_mkrescue@ +grub_probe = @grub_probe@ +grub_reboot = @grub_reboot@ +grub_render_label = @grub_render_label@ +grub_script_check = @grub_script_check@ +grub_set_default = @grub_set_default@ +grub_sparc64_setup = @grub_sparc64_setup@ +grubdirname = @grubdirname@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_kernel = @host_kernel@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +lispdir = @lispdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +platform = @platform@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +bash_completion_source = grub-completion.bash.in +bash_completion_script = grub +EXTRA_DIST = $(bash_completion_source) +CLEANFILES = $(bash_completion_script) config.log +bashcompletiondir = $(sysconfdir)/bash_completion.d +bashcompletion_DATA = $(bash_completion_script) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/bash-completion.d/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu util/bash-completion.d/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-bashcompletionDATA: $(bashcompletion_DATA) + @$(NORMAL_INSTALL) + @list='$(bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bashcompletiondir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bashcompletiondir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bashcompletiondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bashcompletiondir)" || exit $$?; \ + done + +uninstall-bashcompletionDATA: + @$(NORMAL_UNINSTALL) + @list='$(bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(bashcompletiondir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bashcompletiondir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-bashcompletionDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-bashcompletionDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am \ + install-bashcompletionDATA install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags-am \ + uninstall uninstall-am uninstall-bashcompletionDATA + +.PRECIOUS: Makefile + + +$(bash_completion_script): $(bash_completion_source) $(top_builddir)/config.status + $(top_builddir)/config.status --file=$@:$< + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/util/bash-completion.d/grub-completion.bash.in b/util/bash-completion.d/grub-completion.bash.in new file mode 100644 index 000000000..44bf135b9 --- /dev/null +++ b/util/bash-completion.d/grub-completion.bash.in @@ -0,0 +1,495 @@ +# +# Bash completion for grub +# +# Copyright (C) 2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . +# bash completion for grub + +__grub_dir() { + local i c=1 boot_dir + + for (( c=1; c <= ${#COMP_WORDS[@]}; c++ )); do + i="${COMP_WORDS[c]}" + case "$i" in + --boot-directory) + c=$((++c)) + i="${COMP_WORDS[c]}" + boot_dir="${i##*=}"; + break + ;; + esac + done + boot_dir=${boot_dir-/@bootdirname@} + echo "${boot_dir%/}/@grubdirname@" +} + + +# This function generates completion reply with compgen +# - arg: accepts 1, 2, 3, or 4 arguments +# $1 wordlist separate by space, tab or newline +# $2 (optional) prefix to add +# $3 (optional) current word to complete +# $4 (optional) suffix to add +__grubcomp () { + local cur="${COMP_WORDS[COMP_CWORD]}" + if [ $# -gt 2 ]; then + cur="$3" + fi + case "$cur" in + --*=) + COMPREPLY=() + ;; + *) + local IFS=' '$'\t'$'\n' + COMPREPLY=($(compgen -P "${2-}" -W "${1-}" -S "${4-}" -- "$cur")) + ;; + esac +} + +# Function that return long options from the help of the command +# - arg: $1 (optional) command to get the long options from +__grub_get_options_from_help () { + local prog + + if [ $# -ge 1 ]; then + prog="$1" + else + prog="${COMP_WORDS[0]}" + fi + + local i IFS=" "$'\t'$'\n' + for i in $(LC_ALL=C $prog --help) + do + case $i in + --*) echo "${i%=*}";; + esac + done +} + +# Function that return long options from the usage of the command +# - arg: $1 (optional) command to get the long options from +__grub_get_options_from_usage () { + local prog + + if [ $# -ge 1 ]; then + prog="$1" + else + prog="${COMP_WORDS[0]}" + fi + + local i IFS=" "$'\t'$'\n' + for i in $(LC_ALL=C $prog --usage) + do + case $i in + \[--*\]) i=${i#[} # Remove leading [ + echo ${i%%?(=*)]} # Remove optional value and trailing ] + ;; + esac + done +} + +__grub_get_last_option () { + local i + for (( i=$COMP_CWORD-1; i > 0; i-- )); do + if [[ "${COMP_WORDS[i]}" == -* ]]; then + echo "${COMP_WORDS[i]}" + break; + fi + done +} + +__grub_list_menuentries () { + local cur="${COMP_WORDS[COMP_CWORD]}" + local config_file=$(__grub_dir)/grub.cfg + + if [ -f "$config_file" ];then + local IFS=$'\n' + COMPREPLY=( $(compgen \ + -W "$( awk -F "[\"']" '/menuentry/ { print $2 }' $config_file )" \ + -- "$cur" )) #'# Help emacs syntax highlighting + fi +} + +__grub_list_modules () { + local grub_dir=$(__grub_dir) + local IFS=$'\n' + COMPREPLY=( $( compgen -f -X '!*/*.mod' -- "${grub_dir}/$cur" | { + while read -r tmp; do + [ -n $tmp ] && { + tmp=${tmp##*/} + printf '%s\n' ${tmp%.mod} + } + done + } + )) +} + +# +# grub-set-default & grub-reboot +# +_grub_set_entry () { + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + --boot-directory) + _filedir -d + return + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + # Default complete with a menuentry + __grub_list_menuentries + fi +} + +__grub_set_default_program="@grub_set_default@" +have ${__grub_set_default_program} && \ + complete -F _grub_set_entry -o filenames ${__grub_set_default_program} +unset __grub_set_default_program + +__grub_reboot_program="@grub_reboot@" +have ${__grub_reboot_program} && \ + complete -F _grub_set_entry -o filenames ${__grub_reboot_program} +unset __grub_reboot_program + + +# +# grub-editenv +# +_grub_editenv () { + local cur prev + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + create|list|set|unset) + COMPREPLY=( "" ) + return + ;; + esac + + __grubcomp "$(__grub_get_options_from_help) + create list set unset" +} + +__grub_editenv_program="@grub_editenv@" +have ${__grub_editenv_program} && \ + complete -F _grub_editenv -o filenames ${__grub_editenv_program} +unset __grub_editenv_program + + +# +# grub-mkconfig +# +_grub_mkconfig () { + local cur prev + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + _filedir + fi +} +__grub_mkconfig_program="@grub_mkconfig@" +have ${__grub_mkconfig_program} && \ + complete -F _grub_mkconfig -o filenames ${__grub_mkconfig_program} +unset __grub_mkconfig_program + + +# +# grub-setup +# +_grub_setup () { + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -d|--directory) + _filedir -d + return + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + # Default complete with a filename + _filedir + fi +} + +__grub_bios_setup_program="@grub_bios_setup@" +have ${__grub_bios_setup_program} && \ + complete -F _grub_setup -o filenames ${__grub_bios_setup_program} +unset __grub_bios_setup_program + +__grub_sparc64_setup_program="@grub_sparc64_setup@" +have ${__grub_sparc64_setup_program} && \ + complete -F _grub_setup -o filenames ${__grub_sparc64_setup_program} +unset __grub_sparc64_setup_program + + +# +# grub-install +# +_grub_install () { + local cur prev last split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + last=$(__grub_get_last_option) + + _split_longopt && split=true + + case "$prev" in + --boot-directory) + _filedir -d + return + ;; + --disk-module) + __grubcomp "biosdisk ata" + return + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + case "$last" in + --modules) + __grub_list_modules + return + ;; + esac + + # Default complete with a filename + _filedir + fi +} +__grub_install_program="@grub_install@" +have ${__grub_install_program} && \ + complete -F _grub_install -o filenames ${__grub_install_program} +unset __grub_install_program + + +# +# grub-mkfont +# +_grub_mkfont () { + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + # Default complete with a filename + _filedir + fi +} +__grub_mkfont_program="@grub_mkfont@" +have ${__grub_mkfont_program} && \ + complete -F _grub_mkfont -o filenames ${__grub_mkfont_program} +unset __grub_mkfont_program + + +# +# grub-mkrescue +# +_grub_mkrescue () { + local cur prev last + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + last=$(__grub_get_last_option) + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + case "$last" in + --modules) + __grub_list_modules + return + ;; + esac + + # Default complete with a filename + _filedir + fi +} +__grub_mkrescue_program="@grub_mkrescue@" +have ${__grub_mkrescue_program} && \ + complete -F _grub_mkrescue -o filenames ${__grub_mkrescue_program} +unset __grub_mkrescue_program + + +# +# grub-mkimage +# +_grub_mkimage () { + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -d|--directory|-p|--prefix) + _filedir -d + return + ;; + -O|--format) + # Get available format from help + local prog=${COMP_WORDS[0]} + __grubcomp "$(LC_ALL=C $prog --help | \ + awk -F ":" '/available formats/ { print $2 }' | \ + sed 's/, / /g')" + return + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + # Default complete with a filename + _filedir + fi +} +__grub_mkimage_program="@grub_mkimage@" +have ${__grub_mkimage_program} && \ + complete -F _grub_mkimage -o filenames ${__grub_mkimage_program} +unset __grub_mkimage_program + + +# +# grub-mkpasswd-pbkdf2 +# +_grub_mkpasswd_pbkdf2 () { + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + # Default complete with a filename + _filedir + fi +} +__grub_mkpasswd_pbkdf2_program="@grub_mkpasswd_pbkdf2@" +have ${__grub_mkpasswd_pbkdf2_program} && \ + complete -F _grub_mkpasswd_pbkdf2 -o filenames ${__grub_mkpasswd_pbkdf2_program} +unset __grub_mkpasswd_pbkdf2_program + + +# +# grub-probe +# +_grub_probe () { + local cur prev split=false + + COMPREPLY=() + cur=`_get_cword` + prev=${COMP_WORDS[COMP_CWORD-1]} + + _split_longopt && split=true + + case "$prev" in + -t|--target) + # Get target type from help + local prog=${COMP_WORDS[0]} + __grubcomp "$(LC_ALL=C $prog --help | \ + awk -F "[()]" '/--target=/ { print $2 }' | \ + sed 's/|/ /g')" + return + ;; + esac + + $split && return 0 + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + # Default complete with a filename + _filedir + fi +} +__grub_probe_program="@grub_probe@" +have ${__grub_probe_program} && \ + complete -F _grub_probe -o filenames ${__grub_probe_program} +unset __grub_probe_program + + +# +# grub-script-check +# +_grub_script_check () { + local cur + + COMPREPLY=() + cur=`_get_cword` + + if [[ "$cur" == -* ]]; then + __grubcomp "$(__grub_get_options_from_help)" + else + # Default complete with a filename + _filedir + fi +} +__grub_script_check_program="@grub_script_check@" +have ${__grub_script_check_program} && \ + complete -F _grub_script_check -o filenames ${__grub_script_check_program} + + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/util/bin2h.c b/util/bin2h.c new file mode 100644 index 000000000..dd75fb8b7 --- /dev/null +++ b/util/bin2h.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2008,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +int +main (int argc, char *argv[]) +{ + int b, i; + char *sym; + + if (2 != argc) + return 1; + + sym = argv[1]; + + b = getchar (); + if (b == EOF) + goto abort; + + printf ("/* THIS CHUNK OF BYTES IS AUTOMATICALLY GENERATED */\n" + "unsigned char %s[] =\n{\n", sym); + + while (1) + { + printf ("0x%02x", b); + + b = getchar (); + if (b == EOF) + goto end; + + for (i = 0; i < 16 - 1; i++) + { + printf (", 0x%02x", b); + + b = getchar (); + if (b == EOF) + goto end; + } + + printf (",\n"); + } + +end: + printf ("\n};\n"); + +abort: + exit (0); +} diff --git a/util/config.c b/util/config.c new file mode 100644 index 000000000..ebcdd8f5e --- /dev/null +++ b/util/config.c @@ -0,0 +1,121 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include + +#include +#include + +void +grub_util_parse_config (FILE *f, struct grub_util_config *cfg, int simple) +{ + char *buffer = NULL; + size_t sz = 0; + while (getline (&buffer, &sz, f) >= 0) + { + const char *ptr; + for (ptr = buffer; *ptr && grub_isspace (*ptr); ptr++); + if (grub_strncmp (ptr, "GRUB_ENABLE_CRYPTODISK=", + sizeof ("GRUB_ENABLE_CRYPTODISK=") - 1) == 0) + { + ptr += sizeof ("GRUB_ENABLE_CRYPTODISK=") - 1; + if (*ptr == '"' || *ptr == '\'') + ptr++; + if (*ptr == 'y') + cfg->is_cryptodisk_enabled = 1; + continue; + } + if (grub_strncmp (ptr, "GRUB_DISTRIBUTOR=", + sizeof ("GRUB_DISTRIBUTOR=") - 1) == 0) + { + char *optr; + enum { NONE, SNGLQUOT, DBLQUOT } state; + + ptr += sizeof ("GRUB_DISTRIBUTOR=") - 1; + + if (simple) + { + char *ptr2; + free (cfg->grub_distributor); + cfg->grub_distributor = xstrdup (ptr); + for (ptr2 = cfg->grub_distributor + + grub_strlen (cfg->grub_distributor) - 1; + ptr2 >= cfg->grub_distributor + && (*ptr2 == '\r' || *ptr2 == '\n'); ptr2--); + ptr2[1] = '\0'; + continue; + } + free (cfg->grub_distributor); + cfg->grub_distributor = xmalloc (strlen (ptr) + 1); + optr = cfg->grub_distributor; + state = NONE; + + for (; *ptr; ptr++) + switch (*ptr) + { + case '\\': + if (state == SNGLQUOT) + { + *optr++ = *ptr; + continue; + } + if (ptr[1]) + { + *optr++ = ptr[1]; + ptr++; + continue; + } + ptr++; + break; + case '"': + if (state == NONE) + { + state = DBLQUOT; + continue; + } + if (state == DBLQUOT) + { + state = NONE; + continue; + } + *optr++ = *ptr; + continue; + case '\'': + if (state == SNGLQUOT) + { + state = NONE; + continue; + } + if (state == NONE) + { + state = SNGLQUOT; + continue; + } + *optr++ = *ptr; + continue; + default: + *optr++ = *ptr; + continue; + } + *optr = '\0'; + } + } +} + diff --git a/util/editenv.c b/util/editenv.c new file mode 100644 index 000000000..c6f8d2298 --- /dev/null +++ b/util/editenv.c @@ -0,0 +1,65 @@ +/* editenv.c - tool to edit environment block. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define DEFAULT_ENVBLK_SIZE 1024 + +void +grub_util_create_envblk_file (const char *name) +{ + FILE *fp; + char *buf; + char *namenew; + + buf = xmalloc (DEFAULT_ENVBLK_SIZE); + + namenew = xasprintf ("%s.new", name); + fp = grub_util_fopen (namenew, "wb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), namenew, + strerror (errno)); + + memcpy (buf, GRUB_ENVBLK_SIGNATURE, sizeof (GRUB_ENVBLK_SIGNATURE) - 1); + memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#', + DEFAULT_ENVBLK_SIZE - sizeof (GRUB_ENVBLK_SIGNATURE) + 1); + + if (fwrite (buf, 1, DEFAULT_ENVBLK_SIZE, fp) != DEFAULT_ENVBLK_SIZE) + grub_util_error (_("cannot write to `%s': %s"), namenew, + strerror (errno)); + + + grub_util_file_sync (fp); + free (buf); + fclose (fp); + + if (grub_util_rename (namenew, name) < 0) + grub_util_error (_("cannot rename the file %s to %s"), namenew, name); + free (namenew); +} diff --git a/util/garbage-gen.c b/util/garbage-gen.c new file mode 100644 index 000000000..ccba1bf1c --- /dev/null +++ b/util/garbage-gen.c @@ -0,0 +1,67 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +/* Standard random generator is slow. For FS testing we need just some + garbage files, we don't need them to be high-quality random. + */ + +#include +#include +#include +#include + +static unsigned long long buffer[1048576]; + +int +main (int argc, char **argv) +{ + unsigned long long high = 0, low = 1; + unsigned long i, j; + unsigned long long cnt = strtoull (argv[1], 0, 0); + struct timeval tv; + gettimeofday (&tv, NULL); + high = tv.tv_sec; + low = tv.tv_usec; + if (!high) + high = 1; + if (!low) + low = 2; + + for (j = 0; j < (cnt + sizeof (buffer) - 1) / sizeof (buffer); j++) + { + for (i = 0; i < sizeof (buffer) / sizeof (buffer[0]); i += 2) + { + int c1 = 0, c2 = 0; + buffer[i] = low; + buffer[i+1] = high; + if (low & (1ULL << 63)) + c1 = 1; + low <<= 1; + if (high & (1ULL << 63)) + c2 = 1; + high = (high << 1) | c1; + if (c2) + low ^= 0x87; + } + if (sizeof (buffer) < cnt - sizeof (buffer) * j) + fwrite (buffer, 1, sizeof (buffer), stdout); + else + fwrite (buffer, 1, cnt - sizeof (buffer) * j, stdout); + } + return 0; +} diff --git a/util/getroot.c b/util/getroot.c new file mode 100644 index 000000000..847406fba --- /dev/null +++ b/util/getroot.c @@ -0,0 +1,482 @@ +/* getroot.c - Get root device */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_LIMITS_H +#include +#endif +#include + +#include +#include + +#ifdef __linux__ +#include /* ioctl */ +#include +#endif + +#include + +#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) +# include +# include +#endif + +#include +#include +#include +#include +#include + +#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) +#include +#endif + +#if defined(__NetBSD__) || defined(__OpenBSD__) +# include +# include /* struct disklabel */ +# include /* struct dkwedge_info */ +#include +#include +#endif /* defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) */ + +#if defined(__NetBSD__) +# include +#endif + +grub_disk_addr_t +grub_util_find_partition_start (const char *dev) +{ +#if GRUB_UTIL_FD_STAT_IS_FUNCTIONAL + struct stat st; + grub_disk_addr_t partition_start; + + if (stat (dev, &st) >= 0 + && grub_util_device_is_mapped_stat (&st) + && grub_util_get_dm_node_linear_info (st.st_rdev, 0, 0, &partition_start)) + return partition_start; +#endif + + return grub_util_find_partition_start_os (dev); +} + +void +grub_util_pull_device (const char *os_dev) +{ + enum grub_dev_abstraction_types ab; + ab = grub_util_get_dev_abstraction (os_dev); + switch (ab) + { + case GRUB_DEV_ABSTRACTION_LVM: + grub_util_pull_lvm_by_command (os_dev); + /* Fallthrough - in case that lvm-tools are unavailable. */ + case GRUB_DEV_ABSTRACTION_LUKS: + grub_util_pull_devmapper (os_dev); + return; + + default: + if (grub_util_pull_device_os (os_dev, ab)) + return; + /* Fallthrough. */ + case GRUB_DEV_ABSTRACTION_NONE: + free (grub_util_biosdisk_get_grub_dev (os_dev)); + return; + } +} + +char * +grub_util_get_grub_dev (const char *os_dev) +{ + char *ret; + + grub_util_pull_device (os_dev); + + ret = grub_util_get_devmapper_grub_dev (os_dev); + if (ret) + return ret; + ret = grub_util_get_grub_dev_os (os_dev); + if (ret) + return ret; + return grub_util_biosdisk_get_grub_dev (os_dev); +} + +int +grub_util_get_dev_abstraction (const char *os_dev) +{ + enum grub_dev_abstraction_types ret; + + /* User explicitly claims that this drive is visible by BIOS. */ + if (grub_util_biosdisk_is_present (os_dev)) + return GRUB_DEV_ABSTRACTION_NONE; + + /* Check for LVM and LUKS. */ + ret = grub_util_get_dm_abstraction (os_dev); + + if (ret != GRUB_DEV_ABSTRACTION_NONE) + return ret; + + return grub_util_get_dev_abstraction_os (os_dev); +} + +static char * +convert_system_partition_to_system_disk (const char *os_dev, int *is_part) +{ +#if GRUB_UTIL_FD_STAT_IS_FUNCTIONAL + struct stat st; + + if (stat (os_dev, &st) < 0) + { + const char *errstr = strerror (errno); + grub_error (GRUB_ERR_BAD_DEVICE, N_("cannot stat `%s': %s"), + os_dev, errstr); + grub_util_info (_("cannot stat `%s': %s"), os_dev, errstr); + return 0; + } + + *is_part = 0; + + if (grub_util_device_is_mapped_stat (&st)) + return grub_util_devmapper_part_to_disk (&st, is_part, os_dev); + + *is_part = 0; + + return grub_util_part_to_disk (os_dev, &st, is_part); +#else + *is_part = 0; + + return grub_util_part_to_disk (os_dev, NULL, is_part); +#endif +} + +static const char * +find_system_device (const char *os_dev) +{ + char *os_disk; + const char *drive; + int is_part; + + os_disk = convert_system_partition_to_system_disk (os_dev, &is_part); + if (! os_disk) + return NULL; + + drive = grub_hostdisk_os_dev_to_grub_drive (os_disk, 0); + free (os_disk); + return drive; +} + +static char * +make_device_name (const char *drive) +{ + char *ret, *ptr; + const char *iptr; + + ret = xmalloc (strlen (drive) * 2); + ptr = ret; + for (iptr = drive; *iptr; iptr++) + { + if (*iptr == ',' || *iptr == '\\') + *ptr++ = '\\'; + *ptr++ = *iptr; + } + *ptr = 0; + + return ret; +} + +char * +grub_util_get_os_disk (const char *os_dev) +{ + int is_part; + + grub_util_info ("Looking for %s", os_dev); + + return convert_system_partition_to_system_disk (os_dev, &is_part); +} + +#if !defined(__APPLE__) +/* Context for grub_util_biosdisk_get_grub_dev. */ +struct grub_util_biosdisk_get_grub_dev_ctx +{ + char *partname; + grub_disk_addr_t start; +}; + +/* Helper for grub_util_biosdisk_get_grub_dev. */ +static int +find_partition (grub_disk_t dsk __attribute__ ((unused)), + const grub_partition_t partition, void *data) +{ + struct grub_util_biosdisk_get_grub_dev_ctx *ctx = data; + grub_disk_addr_t part_start = 0; + grub_util_info ("Partition %d starts from %" GRUB_HOST_PRIuLONG_LONG, + partition->number, (unsigned long long) partition->start); + + part_start = grub_partition_get_start (partition); + + if (ctx->start == part_start) + { + ctx->partname = grub_partition_get_name (partition); + return 1; + } + + return 0; +} +#endif + +char * +grub_util_biosdisk_get_grub_dev (const char *os_dev) +{ + const char *drive; + char *sys_disk; + int is_part; + + grub_util_info ("Looking for %s", os_dev); + + sys_disk = convert_system_partition_to_system_disk (os_dev, &is_part); + + if (!sys_disk) + return 0; + + drive = grub_hostdisk_os_dev_to_grub_drive (sys_disk, 1); + + grub_util_info ("%s is a parent of %s", sys_disk, os_dev); + if (!is_part) + { + free (sys_disk); + return make_device_name (drive); + } + free (sys_disk); + +#if defined(__APPLE__) + /* Apple uses "/dev/r?disk[0-9]+(s[0-9]+)?". */ + /* + * Note: we do not use the new partition naming scheme as dos_part does not + * necessarily correspond to an msdos partition. + */ + { + const char *p; + char *dri, *ret; + int part; + int disk = (grub_memcmp (os_dev, "/dev/disk", sizeof ("/dev/disk") - 1) + == 0); + int rdisk = (grub_memcmp (os_dev, "/dev/rdisk", sizeof ("/dev/rdisk") - 1) + == 0); + + dri = make_device_name (drive); + + if (!disk && !rdisk) + return dri; + + p = os_dev + sizeof ("/dev/disk") + rdisk - 1; + while (*p >= '0' && *p <= '9') + p++; + if (*p != 's') + return dri; + p++; + + part = strtol (p, NULL, 10); + if (part == 0) + return dri; + + ret = xasprintf ("%s,%d", dri, part); + free (dri); + + return ret; + } + +#else + + /* Linux counts partitions uniformly, whether a BSD partition or a DOS + partition, so mapping them to GRUB devices is not trivial. + Here, get the start sector of a partition by HDIO_GETGEO, and + compare it with each partition GRUB recognizes. + + Cygwin /dev/sdXN emulation uses Windows partition mapping. It + does not count the extended partition and missing primary + partitions. Use same method as on Linux here. + + For NetBSD and FreeBSD, proceed as for Linux, except that the start + sector is obtained from the disk label. */ + { + char *name; + grub_disk_t disk; + struct grub_util_biosdisk_get_grub_dev_ctx ctx; + + name = make_device_name (drive); + + ctx.start = grub_util_find_partition_start (os_dev); + if (grub_errno != GRUB_ERR_NONE) + { + free (name); + return 0; + } + +#if defined(__GNU__) + /* Some versions of Hurd use badly glued Linux code to handle partitions + resulting in partitions being promoted to disks. */ + /* GNU uses "/dev/[hs]d[0-9]+(s[0-9]+[a-z]?)?". */ + /* + * Note: we do not use the new partition naming scheme as dos_part does not + * necessarily correspond to an msdos partition. + */ + if (ctx.start == (grub_disk_addr_t) -1) + { + char *p; + char *dri; + + dri = make_device_name (drive); + + p = strrchr (os_dev + sizeof ("/dev/hd") - 1, 's'); + if (p) + { + long int n; + char *q; + + p++; + n = strtol (p, &q, 10); + if (p != q && n > 0 && n != GRUB_LONG_MAX) + { + char *t; + t = dri; + if (*q >= 'a' && *q <= 'g') + dri = xasprintf ("%s,%ld,%d", t, n, *q - 'a' + 1); + else + dri = xasprintf ("%s,%ld", t, n); + free (t); + } + } + + return dri; + } +#endif + + grub_util_info ("%s starts from %" GRUB_HOST_PRIuLONG_LONG, + os_dev, (unsigned long long) ctx.start); + + grub_util_info ("opening the device %s", name); + disk = grub_disk_open (name); + free (name); + + if (! disk) + { + /* We already know that the partition exists. Given that we already + checked the device map above, we can only get + GRUB_ERR_UNKNOWN_DEVICE at this point if the disk does not exist. + This can happen on Xen, where disk images in the host can be + assigned to devices that have partition-like names in the guest + but are really more like disks. */ + if (grub_errno == GRUB_ERR_UNKNOWN_DEVICE) + { + char *canon; + grub_util_warn + (_("disk does not exist, so falling back to partition device %s"), + os_dev); + grub_errno = GRUB_ERR_NONE; + + canon = grub_canonicalize_file_name (os_dev); + drive = grub_hostdisk_os_dev_to_grub_drive (canon ? : os_dev, 1); + if (canon) + free (canon); + return make_device_name (drive); + } + else + return 0; + } + + name = grub_util_get_ldm (disk, ctx.start); + if (name) + { + grub_disk_close (disk); + return name; + } + + ctx.partname = NULL; + + grub_partition_iterate (disk, find_partition, &ctx); + if (grub_errno != GRUB_ERR_NONE) + { + grub_disk_close (disk); + return 0; + } + + if (ctx.partname == NULL) + { + grub_disk_close (disk); + grub_util_info ("cannot find the partition of `%s'", os_dev); + grub_error (GRUB_ERR_BAD_DEVICE, + "cannot find the partition of `%s'", os_dev); + return 0; + } + + name = grub_xasprintf ("%s,%s", disk->name, ctx.partname); + free (ctx.partname); + grub_disk_close (disk); + return name; + } + +#endif +} + +int +grub_util_biosdisk_is_present (const char *os_dev) +{ + int ret = (find_system_device (os_dev) != NULL); + grub_util_info ((ret ? "%s is present" : "%s is not present"), + os_dev); + return ret; +} + +#ifdef HAVE_LIBZFS +static libzfs_handle_t *__libzfs_handle; + +static void +fini_libzfs (void) +{ + libzfs_fini (__libzfs_handle); +} + +libzfs_handle_t * +grub_get_libzfs_handle (void) +{ + if (! __libzfs_handle) + { + __libzfs_handle = libzfs_init (); + + if (__libzfs_handle) + atexit (fini_libzfs); + } + + return __libzfs_handle; +} +#endif /* HAVE_LIBZFS */ + diff --git a/util/glue-efi.c b/util/glue-efi.c new file mode 100644 index 000000000..68f53168b --- /dev/null +++ b/util/glue-efi.c @@ -0,0 +1,143 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include + +static void +write_fat (FILE *in32, FILE *in64, FILE *out, const char *out_filename, + const char *name32, const char *name64) +{ + struct grub_macho_fat_header head; + struct grub_macho_fat_arch arch32, arch64; + grub_uint32_t size32, size64; + char *buf; + + fseek (in32, 0, SEEK_END); + size32 = ftell (in32); + fseek (in32, 0, SEEK_SET); + fseek (in64, 0, SEEK_END); + size64 = ftell (in64); + fseek (in64, 0, SEEK_SET); + + head.magic = grub_cpu_to_le32_compile_time (GRUB_MACHO_FAT_EFI_MAGIC); + head.nfat_arch = grub_cpu_to_le32_compile_time (2); + arch32.cputype = grub_cpu_to_le32_compile_time (GRUB_MACHO_CPUTYPE_IA32); + arch32.cpusubtype = grub_cpu_to_le32_compile_time (3); + arch32.offset = grub_cpu_to_le32_compile_time (sizeof (head) + + sizeof (arch32) + + sizeof (arch64)); + arch32.size = grub_cpu_to_le32 (size32); + arch32.align = 0; + + arch64.cputype = grub_cpu_to_le32_compile_time (GRUB_MACHO_CPUTYPE_AMD64); + arch64.cpusubtype = grub_cpu_to_le32_compile_time (3); + arch64.offset = grub_cpu_to_le32 (sizeof (head) + sizeof (arch32) + + sizeof (arch64) + size32); + arch64.size = grub_cpu_to_le32 (size64); + arch64.align = 0; + if (fwrite (&head, 1, sizeof (head), out) != sizeof (head) + || fwrite (&arch32, 1, sizeof (arch32), out) != sizeof (arch32) + || fwrite (&arch64, 1, sizeof (arch64), out) != sizeof (arch64)) + { + if (out_filename) + grub_util_error ("cannot write to `%s': %s", + out_filename, strerror (errno)); + else + grub_util_error ("cannot write to the stdout: %s", strerror (errno)); + } + + buf = xmalloc (size32); + if (fread (buf, 1, size32, in32) != size32) + grub_util_error (_("cannot read `%s': %s"), name32, + strerror (errno)); + if (fwrite (buf, 1, size32, out) != size32) + { + if (out_filename) + grub_util_error ("cannot write to `%s': %s", + out_filename, strerror (errno)); + else + grub_util_error ("cannot write to the stdout: %s", strerror (errno)); + } + free (buf); + + buf = xmalloc (size64); + if (fread (buf, 1, size64, in64) != size64) + grub_util_error (_("cannot read `%s': %s"), name64, + strerror (errno)); + if (fwrite (buf, 1, size64, out) != size64) + { + if (out_filename) + grub_util_error ("cannot write to `%s': %s", + out_filename, strerror (errno)); + else + grub_util_error ("cannot write to the stdout: %s", strerror (errno)); + } + free (buf); +} + +void +grub_util_glue_efi (const char *file32, const char *file64, const char *outname) +{ + FILE *in32, *in64, *out; + + in32 = grub_util_fopen (file32, "r"); + + if (!in32) + grub_util_error (_("cannot open `%s': %s"), file32, + strerror (errno)); + + in64 = grub_util_fopen (file64, "r"); + if (!in64) + grub_util_error (_("cannot open `%s': %s"), file64, + strerror (errno)); + + if (outname) + out = grub_util_fopen (outname, "wb"); + else + out = stdout; + + if (!out) + { + grub_util_error (_("cannot open `%s': %s"), outname ? : "stdout", + strerror (errno)); + } + + write_fat (in32, in64, out, outname, + file32, file64); + + fclose (in32); + fclose (in64); + + if (out != stdout) + fclose (out); +} + diff --git a/util/grub-editenv.c b/util/grub-editenv.c new file mode 100644 index 000000000..118e89fe5 --- /dev/null +++ b/util/grub-editenv.c @@ -0,0 +1,298 @@ +/* grub-editenv.c - tool to edit environment block. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + + +#include "progname.h" + +#define DEFAULT_ENVBLK_PATH DEFAULT_DIRECTORY "/" GRUB_ENVBLK_DEFCFG + +static struct argp_option options[] = { + {0, 0, 0, OPTION_DOC, N_("Commands:"), 1}, + {"create", 0, 0, OPTION_DOC|OPTION_NO_USAGE, + N_("Create a blank environment block file."), 0}, + {"list", 0, 0, OPTION_DOC|OPTION_NO_USAGE, + N_("List the current variables."), 0}, + /* TRANSLATORS: "set" is a keyword. It's a summary of "set" subcommand. */ + {N_("set [NAME=VALUE ...]"), 0, 0, OPTION_DOC|OPTION_NO_USAGE, + N_("Set variables."), 0}, + /* TRANSLATORS: "unset" is a keyword. It's a summary of "unset" subcommand. */ + {N_("unset [NAME ...]"), 0, 0, OPTION_DOC|OPTION_NO_USAGE, + N_("Delete variables."), 0}, + + {0, 0, 0, OPTION_DOC, N_("Options:"), -1}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + + { 0, 0, 0, 0, 0, 0 } +}; + +/* Print the version information. */ +static void +print_version (FILE *stream, struct argp_state *state) +{ + fprintf (stream, "%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); +} +void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; + +/* Set the bug report address */ +const char *argp_program_bug_address = "<"PACKAGE_BUGREPORT">"; + +static error_t argp_parser (int key, char *arg, struct argp_state *state) +{ + switch (key) + { + case 'v': + verbosity++; + break; + + case ARGP_KEY_NO_ARGS: + fprintf (stderr, "%s", + _("You need to specify at least one command.\n")); + argp_usage (state); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case ARGP_KEY_HELP_POST_DOC: + return xasprintf (text, DEFAULT_ENVBLK_PATH, DEFAULT_ENVBLK_PATH); + + default: + return (char *) text; + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +struct argp argp = { + options, argp_parser, N_("FILENAME COMMAND"), + "\n"N_("\ +Tool to edit environment block.") +"\v"N_("\ +If FILENAME is `-', the default value %s is used.\n\n\ +There is no `delete' command; if you want to delete the whole environment\n\ +block, use `rm %s'."), + NULL, help_filter, NULL +}; + +static grub_envblk_t +open_envblk_file (const char *name) +{ + FILE *fp; + char *buf; + size_t size; + grub_envblk_t envblk; + + fp = grub_util_fopen (name, "rb"); + if (! fp) + { + /* Create the file implicitly. */ + grub_util_create_envblk_file (name); + fp = grub_util_fopen (name, "rb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), name, + strerror (errno)); + } + + if (fseek (fp, 0, SEEK_END) < 0) + grub_util_error (_("cannot seek `%s': %s"), name, + strerror (errno)); + + size = (size_t) ftell (fp); + + if (fseek (fp, 0, SEEK_SET) < 0) + grub_util_error (_("cannot seek `%s': %s"), name, + strerror (errno)); + + buf = xmalloc (size); + + if (fread (buf, 1, size, fp) != size) + grub_util_error (_("cannot read `%s': %s"), name, + strerror (errno)); + + fclose (fp); + + envblk = grub_envblk_open (buf, size); + if (! envblk) + grub_util_error ("%s", _("invalid environment block")); + + return envblk; +} + +static int +print_var (const char *varname, const char *value, + void *hook_data __attribute__ ((unused))) +{ + printf ("%s=%s\n", varname, value); + return 0; +} + +static void +list_variables (const char *name) +{ + grub_envblk_t envblk; + + envblk = open_envblk_file (name); + grub_envblk_iterate (envblk, NULL, print_var); + grub_envblk_close (envblk); +} + +static void +write_envblk (const char *name, grub_envblk_t envblk) +{ + FILE *fp; + + fp = grub_util_fopen (name, "wb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), name, + strerror (errno)); + + if (fwrite (grub_envblk_buffer (envblk), 1, grub_envblk_size (envblk), fp) + != grub_envblk_size (envblk)) + grub_util_error (_("cannot write to `%s': %s"), name, + strerror (errno)); + + grub_util_file_sync (fp); + fclose (fp); +} + +static void +set_variables (const char *name, int argc, char *argv[]) +{ + grub_envblk_t envblk; + + envblk = open_envblk_file (name); + while (argc) + { + char *p; + + p = strchr (argv[0], '='); + if (! p) + grub_util_error (_("invalid parameter %s"), argv[0]); + + *(p++) = 0; + + if (! grub_envblk_set (envblk, argv[0], p)) + grub_util_error ("%s", _("environment block too small")); + + argc--; + argv++; + } + + write_envblk (name, envblk); + grub_envblk_close (envblk); +} + +static void +unset_variables (const char *name, int argc, char *argv[]) +{ + grub_envblk_t envblk; + + envblk = open_envblk_file (name); + while (argc) + { + grub_envblk_delete (envblk, argv[0]); + + argc--; + argv++; + } + + write_envblk (name, envblk); + grub_envblk_close (envblk); +} + +int +main (int argc, char *argv[]) +{ + const char *filename; + char *command; + int curindex, arg_count; + + grub_util_host_init (&argc, &argv); + + /* Parse our arguments */ + if (argp_parse (&argp, argc, argv, 0, &curindex, 0) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + arg_count = argc - curindex; + + if (arg_count == 1) + { + filename = DEFAULT_ENVBLK_PATH; + command = argv[curindex++]; + } + else + { + filename = argv[curindex++]; + if (strcmp (filename, "-") == 0) + filename = DEFAULT_ENVBLK_PATH; + command = argv[curindex++]; + } + + if (strcmp (command, "create") == 0) + grub_util_create_envblk_file (filename); + else if (strcmp (command, "list") == 0) + list_variables (filename); + else if (strcmp (command, "set") == 0) + set_variables (filename, argc - curindex, argv + curindex); + else if (strcmp (command, "unset") == 0) + unset_variables (filename, argc - curindex, argv + curindex); + else + { + char *program = xstrdup(program_name); + fprintf (stderr, _("Unknown command `%s'.\n"), command); + argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); + free(program); + exit(1); + } + + return 0; +} diff --git a/util/grub-file.c b/util/grub-file.c new file mode 100644 index 000000000..50c18b683 --- /dev/null +++ b/util/grub-file.c @@ -0,0 +1,106 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include + +#include "progname.h" + +void grub_file_init (void); +void grub_host_init (void); +void grub_hostfs_init (void); + +int +main (int argc, char *argv[]) +{ + char **argv2; + int i; + int had_file = 0, had_separator = 0; + grub_command_t cmd; + grub_err_t err; + + grub_util_host_init (&argc, &argv); + + argv2 = xmalloc (argc * sizeof (argv2[0])); + + if (argc == 2 && strcmp (argv[1], "--version") == 0) + { + printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); + } + + for (i = 1; i < argc; i++) + { + if (argv[i][0] == '-' && argv[i][1] == '-' + && argv[i][2] == '\0' && !had_separator) + { + had_separator = 1; + argv2[i - 1] = xstrdup (argv[i]); + continue; + } + if (argv[i][0] == '-' && !had_separator) + { + argv2[i - 1] = xstrdup (argv[i]); + continue; + } + if (had_file) + grub_util_error ("one argument expected"); + argv2[i - 1] = grub_canonicalize_file_name (argv[i]); + if (!argv2[i - 1]) + { + grub_util_error (_("cannot open `%s': %s"), argv[i], + strerror (errno)); + } + had_file = 1; + } + argv2[i - 1] = NULL; + + /* Initialize all modules. */ + grub_init_all (); + grub_file_init (); + grub_hostfs_init (); + grub_host_init (); + + grub_env_set ("root", "host"); + + cmd = grub_command_find ("file"); + if (! cmd) + grub_util_error (_("can't find command `%s'"), "file"); + + err = (cmd->func) (cmd, argc - 1, argv2); + if (err && err != GRUB_ERR_TEST_FAILURE) + grub_print_error (); + return err; +} diff --git a/util/grub-fstest.c b/util/grub-fstest.c new file mode 100644 index 000000000..a358ae471 --- /dev/null +++ b/util/grub-fstest.c @@ -0,0 +1,776 @@ +/* grub-fstest.c - debug tool for filesystem driver */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "progname.h" +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include "argp.h" +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +static grub_err_t +execute_command (const char *name, int n, char **args) +{ + grub_command_t cmd; + + cmd = grub_command_find (name); + if (! cmd) + grub_util_error (_("can't find command `%s'"), name); + + return (cmd->func) (cmd, n, args); +} + +enum { + CMD_LS = 1, + CMD_CP, + CMD_CAT, + CMD_CMP, + CMD_HEX, + CMD_CRC, + CMD_BLOCKLIST, + CMD_TESTLOAD, + CMD_ZFSINFO, + CMD_XNU_UUID +}; +#define BUF_SIZE 32256 + +static grub_disk_addr_t skip, leng; +static int uncompress = 0; + +static void +read_file (char *pathname, int (*hook) (grub_off_t ofs, char *buf, int len, void *hook_arg), void *hook_arg) +{ + static char buf[BUF_SIZE]; + grub_file_t file; + + if ((pathname[0] == '-') && (pathname[1] == 0)) + { + grub_device_t dev; + + dev = grub_device_open (0); + if ((! dev) || (! dev->disk)) + grub_util_error ("%s", grub_errmsg); + + grub_util_info ("total sectors : %" GRUB_HOST_PRIuLONG_LONG, + (unsigned long long) dev->disk->total_sectors); + + if (! leng) + leng = (dev->disk->total_sectors << GRUB_DISK_SECTOR_BITS) - skip; + + while (leng) + { + grub_size_t len; + + len = (leng > BUF_SIZE) ? BUF_SIZE : leng; + + if (grub_disk_read (dev->disk, 0, skip, len, buf)) + { + char *msg = grub_xasprintf (_("disk read fails at offset %lld, length %lld"), + (long long) skip, (long long) len); + grub_util_error ("%s", msg); + } + + if (hook (skip, buf, len, hook_arg)) + break; + + skip += len; + leng -= len; + } + + grub_device_close (dev); + return; + } + + if (uncompress == 0) + grub_file_filter_disable_compression (); + file = grub_file_open (pathname); + if (!file) + { + grub_util_error (_("cannot open `%s': %s"), pathname, + grub_errmsg); + return; + } + + grub_util_info ("file size : %" GRUB_HOST_PRIuLONG_LONG, + (unsigned long long) file->size); + + if (skip > file->size) + { + char *msg = grub_xasprintf (_("invalid skip value %lld"), + (unsigned long long) skip); + grub_util_error ("%s", msg); + return; + } + + { + grub_off_t ofs, len; + ofs = skip; + len = file->size - skip; + if ((leng) && (leng < len)) + len = leng; + + file->offset = skip; + + while (len) + { + grub_ssize_t sz; + + sz = grub_file_read (file, buf, (len > BUF_SIZE) ? BUF_SIZE : len); + if (sz < 0) + { + char *msg = grub_xasprintf (_("read error at offset %llu: %s"), + (unsigned long long) ofs, grub_errmsg); + grub_util_error ("%s", msg); + break; + } + + if ((sz == 0) || (hook (ofs, buf, sz, hook_arg))) + break; + + ofs += sz; + len -= sz; + } + } + + grub_file_close (file); +} + +struct cp_hook_ctx +{ + FILE *ff; + const char *dest; +}; + +static int +cp_hook (grub_off_t ofs, char *buf, int len, void *_ctx) +{ + struct cp_hook_ctx *ctx = _ctx; + (void) ofs; + + if ((int) fwrite (buf, 1, len, ctx->ff) != len) + { + grub_util_error (_("cannot write to `%s': %s"), + ctx->dest, strerror (errno)); + return 1; + } + + return 0; +} + +static void +cmd_cp (char *src, const char *dest) +{ + struct cp_hook_ctx ctx = + { + .dest = dest + }; + + ctx.ff = grub_util_fopen (dest, "wb"); + if (ctx.ff == NULL) + { + grub_util_error (_("cannot open OS file `%s': %s"), dest, + strerror (errno)); + return; + } + read_file (src, cp_hook, &ctx); + fclose (ctx.ff); +} + +static int +cat_hook (grub_off_t ofs, char *buf, int len, void *_arg __attribute__ ((unused))) +{ + (void) ofs; + + if ((int) fwrite (buf, 1, len, stdout) != len) + { + grub_util_error (_("cannot write to the stdout: %s"), + strerror (errno)); + return 1; + } + + return 0; +} + +static void +cmd_cat (char *src) +{ + read_file (src, cat_hook, 0); +} + +static int +cmp_hook (grub_off_t ofs, char *buf, int len, void *ff_in) +{ + FILE *ff = ff_in; + static char buf_1[BUF_SIZE]; + if ((int) fread (buf_1, 1, len, ff) != len) + { + char *msg = grub_xasprintf (_("read error at offset %llu: %s"), + (unsigned long long) ofs, grub_errmsg); + grub_util_error ("%s", msg); + return 1; + } + + if (grub_memcmp (buf, buf_1, len) != 0) + { + int i; + + for (i = 0; i < len; i++, ofs++) + if (buf_1[i] != buf[i]) + { + char *msg = grub_xasprintf (_("compare fail at offset %llu"), + (unsigned long long) ofs); + grub_util_error ("%s", msg); + return 1; + } + } + return 0; +} + + +static void +cmd_cmp (char *src, char *dest) +{ + FILE *ff; + + if (grub_util_is_directory (dest)) + { + grub_util_fd_dir_t dir = grub_util_fd_opendir (dest); + grub_util_fd_dirent_t entry; + if (dir == NULL) + { + grub_util_error (_("OS file %s open error: %s"), dest, + grub_util_fd_strerror ()); + return; + } + while ((entry = grub_util_fd_readdir (dir))) + { + char *srcnew, *destnew; + char *ptr; + if (strcmp (entry->d_name, ".") == 0 + || strcmp (entry->d_name, "..") == 0) + continue; + srcnew = xmalloc (strlen (src) + sizeof ("/") + + strlen (entry->d_name)); + destnew = xmalloc (strlen (dest) + sizeof ("/") + + strlen (entry->d_name)); + ptr = grub_stpcpy (srcnew, src); + *ptr++ = '/'; + strcpy (ptr, entry->d_name); + ptr = grub_stpcpy (destnew, dest); + *ptr++ = '/'; + strcpy (ptr, entry->d_name); + + if (grub_util_is_special_file (destnew)) + continue; + + cmd_cmp (srcnew, destnew); + } + grub_util_fd_closedir (dir); + return; + } + + ff = grub_util_fopen (dest, "rb"); + if (ff == NULL) + { + grub_util_error (_("OS file %s open error: %s"), dest, + strerror (errno)); + return; + } + + if ((skip) && (fseeko (ff, skip, SEEK_SET))) + grub_util_error (_("cannot seek `%s': %s"), dest, + strerror (errno)); + + read_file (src, cmp_hook, ff); + + { + grub_uint64_t pre; + pre = ftell (ff); + fseek (ff, 0, SEEK_END); + if (pre != ftell (ff)) + grub_util_error ("%s", _("unexpected end of file")); + } + fclose (ff); +} + +static int +hex_hook (grub_off_t ofs, char *buf, int len, void *arg __attribute__ ((unused))) +{ + hexdump (ofs, buf, len); + return 0; +} + +static void +cmd_hex (char *pathname) +{ + read_file (pathname, hex_hook, 0); +} + +static int +crc_hook (grub_off_t ofs, char *buf, int len, void *crc_ctx) +{ + (void) ofs; + + GRUB_MD_CRC32->write(crc_ctx, buf, len); + return 0; +} + +static void +cmd_crc (char *pathname) +{ + grub_uint8_t *crc32_context = xmalloc (GRUB_MD_CRC32->contextsize); + GRUB_MD_CRC32->init(crc32_context); + + read_file (pathname, crc_hook, crc32_context); + GRUB_MD_CRC32->final(crc32_context); + printf ("%08x\n", + grub_be_to_cpu32 (grub_get_unaligned32 (GRUB_MD_CRC32->read (crc32_context)))); + free (crc32_context); +} + +static const char *root = NULL; +static int args_count = 0; +static int nparm = 0; +static int num_disks = 1; +static char **images = NULL; +static int cmd = 0; +static char *debug_str = NULL; +static char **args = NULL; +static int mount_crypt = 0; + +static void +fstest (int n) +{ + char *host_file; + char *loop_name; + int i; + + for (i = 0; i < num_disks; i++) + { + char *argv[2]; + loop_name = grub_xasprintf ("loop%d", i); + if (!loop_name) + grub_util_error ("%s", grub_errmsg); + + host_file = grub_xasprintf ("(host)%s", images[i]); + if (!host_file) + grub_util_error ("%s", grub_errmsg); + + argv[0] = loop_name; + argv[1] = host_file; + + if (execute_command ("loopback", 2, argv)) + grub_util_error (_("`loopback' command fails: %s"), grub_errmsg); + + grub_free (loop_name); + grub_free (host_file); + } + + { + if (mount_crypt) + { + char *argv[2] = { xstrdup ("-a"), NULL}; + if (execute_command ("cryptomount", 1, argv)) + grub_util_error (_("`cryptomount' command fails: %s"), + grub_errmsg); + free (argv[0]); + } + } + + grub_ldm_fini (); + grub_lvm_fini (); + grub_mdraid09_fini (); + grub_mdraid1x_fini (); + grub_diskfilter_fini (); + grub_diskfilter_init (); + grub_mdraid09_init (); + grub_mdraid1x_init (); + grub_lvm_init (); + grub_ldm_init (); + + switch (cmd) + { + case CMD_LS: + execute_command ("ls", n, args); + break; + case CMD_ZFSINFO: + execute_command ("zfsinfo", n, args); + break; + case CMD_CP: + cmd_cp (args[0], args[1]); + break; + case CMD_CAT: + cmd_cat (args[0]); + break; + case CMD_CMP: + cmd_cmp (args[0], args[1]); + break; + case CMD_HEX: + cmd_hex (args[0]); + break; + case CMD_CRC: + cmd_crc (args[0]); + break; + case CMD_BLOCKLIST: + execute_command ("blocklist", n, args); + grub_printf ("\n"); + break; + case CMD_TESTLOAD: + execute_command ("testload", n, args); + grub_printf ("\n"); + break; + case CMD_XNU_UUID: + { + grub_device_t dev; + grub_fs_t fs; + char *uuid = 0; + char *argv[3] = { xstrdup ("-l"), NULL, NULL}; + dev = grub_device_open (n ? args[0] : 0); + if (!dev) + grub_util_error ("%s", grub_errmsg); + fs = grub_fs_probe (dev); + if (!fs) + grub_util_error ("%s", grub_errmsg); + if (!fs->uuid) + grub_util_error ("%s", _("couldn't retrieve UUID")); + if (fs->uuid (dev, &uuid)) + grub_util_error ("%s", grub_errmsg); + if (!uuid) + grub_util_error ("%s", _("couldn't retrieve UUID")); + argv[1] = uuid; + execute_command ("xnu_uuid", 2, argv); + grub_free (argv[0]); + grub_free (uuid); + grub_device_close (dev); + } + } + + for (i = 0; i < num_disks; i++) + { + char *argv[2]; + + loop_name = grub_xasprintf ("loop%d", i); + if (!loop_name) + grub_util_error ("%s", grub_errmsg); + + argv[0] = xstrdup ("-d"); + argv[1] = loop_name; + + execute_command ("loopback", 2, argv); + + grub_free (loop_name); + grub_free (argv[0]); + } +} + +static struct argp_option options[] = { + {0, 0, 0 , OPTION_DOC, N_("Commands:"), 1}, + {N_("ls PATH"), 0, 0 , OPTION_DOC, N_("List files in PATH."), 1}, + {N_("cp FILE LOCAL"), 0, 0, OPTION_DOC, N_("Copy FILE to local file LOCAL."), 1}, + {N_("cat FILE"), 0, 0 , OPTION_DOC, N_("Copy FILE to standard output."), 1}, + {N_("cmp FILE LOCAL"), 0, 0, OPTION_DOC, N_("Compare FILE with local file LOCAL."), 1}, + {N_("hex FILE"), 0, 0 , OPTION_DOC, N_("Show contents of FILE in hex."), 1}, + {N_("crc FILE"), 0, 0 , OPTION_DOC, N_("Get crc32 checksum of FILE."), 1}, + {N_("blocklist FILE"), 0, 0, OPTION_DOC, N_("Display blocklist of FILE."), 1}, + {N_("xnu_uuid DEVICE"), 0, 0, OPTION_DOC, N_("Compute XNU UUID of the device."), 1}, + + {"root", 'r', N_("DEVICE_NAME"), 0, N_("Set root device."), 2}, + {"skip", 's', N_("NUM"), 0, N_("Skip N bytes from output file."), 2}, + {"length", 'n', N_("NUM"), 0, N_("Handle N bytes in output file."), 2}, + {"diskcount", 'c', N_("NUM"), 0, N_("Specify the number of input files."), 2}, + {"debug", 'd', N_("STRING"), 0, N_("Set debug environment variable."), 2}, + {"crypto", 'C', NULL, 0, N_("Mount crypto devices."), 2}, + {"zfs-key", 'K', + /* TRANSLATORS: "prompt" is a keyword. */ + N_("FILE|prompt"), 0, N_("Load zfs crypto key."), 2}, + {"verbose", 'v', NULL, 0, N_("print verbose messages."), 2}, + {"uncompress", 'u', NULL, 0, N_("Uncompress data."), 2}, + {0, 0, 0, 0, 0, 0} +}; + +/* Print the version information. */ +static void +print_version (FILE *stream, struct argp_state *state) +{ + fprintf (stream, "%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); +} +void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + char *p; + + switch (key) + { + case 'r': + root = arg; + return 0; + + case 'K': + if (strcmp (arg, "prompt") == 0) + { + char buf[1024]; + grub_puts_ (N_("Enter ZFS password: ")); + if (grub_password_get (buf, 1023)) + { + grub_zfs_add_key ((grub_uint8_t *) buf, grub_strlen (buf), 1); + } + } + else + { + FILE *f; + ssize_t real_size; + grub_uint8_t buf[1024]; + f = grub_util_fopen (arg, "rb"); + if (!f) + { + printf (_("%s: error:"), program_name); + printf (_("cannot open `%s': %s"), arg, strerror (errno)); + printf ("\n"); + return 0; + } + real_size = fread (buf, 1, 1024, f); + fclose (f); + if (real_size < 0) + { + printf (_("%s: error:"), program_name); + printf (_("cannot read `%s': %s"), arg, strerror (errno)); + printf ("\n"); + return 0; + } + grub_zfs_add_key (buf, real_size, 0); + } + return 0; + + case 'C': + mount_crypt = 1; + return 0; + + case 's': + skip = grub_strtoul (arg, &p, 0); + if (*p == 's') + skip <<= GRUB_DISK_SECTOR_BITS; + return 0; + + case 'n': + leng = grub_strtoul (arg, &p, 0); + if (*p == 's') + leng <<= GRUB_DISK_SECTOR_BITS; + return 0; + + case 'c': + num_disks = grub_strtoul (arg, NULL, 0); + if (num_disks < 1) + { + fprintf (stderr, "%s", _("Invalid disk count.\n")); + argp_usage (state); + } + if (args_count != 0) + { + /* TRANSLATORS: disk count is optional but if it's there it must + be before disk list. So please don't imply disk count as mandatory. + */ + fprintf (stderr, "%s", _("Disk count must precede disks list.\n")); + argp_usage (state); + } + return 0; + + case 'd': + debug_str = arg; + return 0; + + case 'v': + verbosity++; + return 0; + + case 'u': + uncompress = 1; + return 0; + + case ARGP_KEY_END: + if (args_count < num_disks) + { + fprintf (stderr, "%s", _("No command is specified.\n")); + argp_usage (state); + } + if (args_count - 1 - num_disks < nparm) + { + fprintf (stderr, "%s", _("Not enough parameters to command.\n")); + argp_usage (state); + } + return 0; + + case ARGP_KEY_ARG: + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + if (args_count < num_disks) + { + if (args_count == 0) + images = xmalloc (num_disks * sizeof (images[0])); + images[args_count] = grub_canonicalize_file_name (arg); + args_count++; + return 0; + } + + if (args_count == num_disks) + { + if (!grub_strcmp (arg, "ls")) + { + cmd = CMD_LS; + } + else if (!grub_strcmp (arg, "zfsinfo")) + { + cmd = CMD_ZFSINFO; + } + else if (!grub_strcmp (arg, "cp")) + { + cmd = CMD_CP; + nparm = 2; + } + else if (!grub_strcmp (arg, "cat")) + { + cmd = CMD_CAT; + nparm = 1; + } + else if (!grub_strcmp (arg, "cmp")) + { + cmd = CMD_CMP; + nparm = 2; + } + else if (!grub_strcmp (arg, "hex")) + { + cmd = CMD_HEX; + nparm = 1; + } + else if (!grub_strcmp (arg, "crc")) + { + cmd = CMD_CRC; + nparm = 1; + } + else if (!grub_strcmp (arg, "blocklist")) + { + cmd = CMD_BLOCKLIST; + nparm = 1; + } + else if (!grub_strcmp (arg, "testload")) + { + cmd = CMD_TESTLOAD; + nparm = 1; + } + else if (grub_strcmp (arg, "xnu_uuid") == 0) + { + cmd = CMD_XNU_UUID; + nparm = 0; + } + else + { + fprintf (stderr, _("Invalid command %s.\n"), arg); + argp_usage (state); + } + args_count++; + return 0; + } + + args[args_count - 1 - num_disks] = xstrdup (arg); + args_count++; + return 0; +} + +struct argp argp = { + options, argp_parser, N_("IMAGE_PATH COMMANDS"), + N_("Debug tool for filesystem driver."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + const char *default_root; + char *alloc_root; + + grub_util_host_init (&argc, &argv); + + args = xmalloc (argc * sizeof (args[0])); + + argp_parse (&argp, argc, argv, 0, 0, 0); + + /* Initialize all modules. */ + grub_init_all (); + grub_gcry_init_all (); + + if (debug_str) + grub_env_set ("debug", debug_str); + + default_root = (num_disks == 1) ? "loop0" : "md0"; + alloc_root = 0; + if (root) + { + if ((*root >= '0') && (*root <= '9')) + { + alloc_root = xmalloc (strlen (default_root) + strlen (root) + 2); + + sprintf (alloc_root, "%s,%s", default_root, root); + root = alloc_root; + } + } + else + root = default_root; + + grub_env_set ("root", root); + + if (alloc_root) + free (alloc_root); + + /* Do it. */ + fstest (args_count - 1 - num_disks); + + /* Free resources. */ + grub_gcry_fini_all (); + grub_fini_all (); + + return 0; +} diff --git a/util/grub-gen-asciih.c b/util/grub-gen-asciih.c new file mode 100644 index 000000000..e35dcb78f --- /dev/null +++ b/util/grub-gen-asciih.c @@ -0,0 +1,256 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +#include + +#include +#include FT_FREETYPE_H +#include FT_TRUETYPE_TAGS_H +#include FT_TRUETYPE_TABLES_H +#include FT_SYNTHESIS_H + +#undef __FTERRORS_H__ +#define FT_ERROR_START_LIST const char *ft_errmsgs[] = { +#define FT_ERRORDEF(e, v, s) [e] = s, +#define FT_ERROR_END_LIST }; +#include FT_ERRORS_H + +#define GRUB_FONT_DEFAULT_SIZE 16 + +#define ARRAY_SIZE(array) (sizeof (array) / sizeof (array[0])) + +struct grub_glyph_info +{ + int width; + int height; + int x_ofs; + int y_ofs; + int device_width; + int bitmap_size; + unsigned char *bitmap; +}; + +static void +add_pixel (unsigned char **data, int *mask, int not_blank) +{ + if (*mask == 0) + { + (*data)++; + **data = 0; + *mask = 128; + } + + if (not_blank) + **data |= *mask; + + *mask >>= 1; +} + +static void +add_glyph (FT_UInt glyph_idx, FT_Face face, + unsigned int char_code, + struct grub_glyph_info *glyph_info) +{ + int width, height; + int cuttop, cutbottom, cutleft, cutright; + unsigned char *data; + int mask, i, j, bitmap_size; + FT_GlyphSlot glyph; + int flag = FT_LOAD_RENDER | FT_LOAD_MONOCHROME; + FT_Error err; + + err = FT_Load_Glyph (face, glyph_idx, flag); + if (err) + { + fprintf (stderr, "Freetype Error %d loading glyph 0x%x for U+0x%x", + err, glyph_idx, char_code); + + if (err > 0 && err < (signed) ARRAY_SIZE (ft_errmsgs)) + fprintf (stderr, ": %s\n", ft_errmsgs[err]); + else + fprintf (stderr, "\n"); + exit (1); + } + + glyph = face->glyph; + + if (glyph->next) + printf ("%x\n", char_code); + + cuttop = cutbottom = cutleft = cutright = 0; + + width = glyph->bitmap.width; + height = glyph->bitmap.rows; + + bitmap_size = ((width * height + 7) / 8); + glyph_info->bitmap = malloc (bitmap_size); + if (!glyph_info->bitmap) + { + fprintf (stderr, "grub-gen-asciih: error: out of memory"); + exit (1); + } + glyph_info->bitmap_size = bitmap_size; + + glyph_info->width = width; + glyph_info->height = height; + glyph_info->x_ofs = glyph->bitmap_left; + glyph_info->y_ofs = glyph->bitmap_top - height; + glyph_info->device_width = glyph->metrics.horiAdvance / 64; + + mask = 0; + data = &glyph_info->bitmap[0] - 1; + for (j = cuttop; j < height + cuttop; j++) + for (i = cutleft; i < width + cutleft; i++) + add_pixel (&data, &mask, + glyph->bitmap.buffer[i / 8 + j * glyph->bitmap.pitch] & + (1 << (7 - (i & 7)))); +} + +static void +write_font_ascii_bitmap (FILE *file, FT_Face face) +{ + int char_code; + + fprintf (file, "/* THIS CHUNK OF BYTES IS AUTOMATICALLY GENERATED */\n"); + fprintf (file, "unsigned char ascii_bitmaps[] =\n"); + fprintf (file, "{\n"); + + for (char_code = 0; char_code <= 0x7f; char_code++) + { + FT_UInt glyph_idx; + struct grub_glyph_info glyph; + + glyph_idx = FT_Get_Char_Index (face, char_code); + if (!glyph_idx) + return; + + memset (&glyph, 0, sizeof(glyph)); + + add_glyph (glyph_idx, face, char_code, &glyph); + + if (glyph.width == 8 && glyph.height == 16 + && glyph.x_ofs == 0 && glyph.y_ofs == 0) + { + int row; + for (row = 0; row < 16; row++) + fprintf (file, "0x%02x, ", glyph.bitmap[row]); + } + else + { + unsigned char glph[16]; + int p = 0, mask = 0x80; + int row, col; + int dy = 12 - glyph.height - glyph.y_ofs; + for (row = 0; row < 16; row++) + glph[row] = 0; + for (row = 0; row < glyph.height; row++) + for (col = 0; col < glyph.width; col++) + { + int val = glyph.bitmap[p] & mask; + mask >>= 1; + if (mask == 0) + { + mask = 0x80; + p++; + } + if (val && dy + row >= 0 + && dy + row < 16 + && glyph.x_ofs + col >= 0 + && glyph.x_ofs + col < 8) + glph[dy + row] |= 1 << (7 - (glyph.x_ofs + col)); + } + for (row = 0; row < 16; row++) + fprintf (file, "0x%02x, ", glph[row]); + } + fprintf (file, "\n"); + free (glyph.bitmap); + } + fprintf (file, "};\n"); +} + +int +main (int argc, char *argv[]) +{ + FT_Library ft_lib; + FT_Face ft_face; + FILE *file; + + if (argc != 3) + { + fprintf (stderr, "grub-gen-asciih: usage: INPUT OUTPUT"); + return 1; + } + + if (FT_Init_FreeType (&ft_lib)) + { + fprintf (stderr, "grub-gen-asciih: error: FT_Init_FreeType fails"); + return 1; + } + + { + int size; + FT_Error err; + + err = FT_New_Face (ft_lib, argv[1], 0, &ft_face); + if (err) + { + fprintf (stderr, "can't open file %s, index %d: error %d", + argv[1], 0, err); + if (err > 0 && err < (signed) ARRAY_SIZE (ft_errmsgs)) + fprintf (stderr, ": %s\n", ft_errmsgs[err]); + else + fprintf (stderr, "\n"); + + return 1; + } + + if ((ft_face->face_flags & FT_FACE_FLAG_SCALABLE) || + (! ft_face->num_fixed_sizes)) + size = GRUB_FONT_DEFAULT_SIZE; + else + size = ft_face->available_sizes[0].height; + + if (FT_Set_Pixel_Sizes (ft_face, size, size)) + { + fprintf (stderr, "grub-gen-asciih: error: can't set %dx%d font size", size, size); + return 1; + } + } + + file = fopen (argv[2], "w"); + if (! file) + { + fprintf (stderr, "grub-gen-asciih: error: cannot write to `%s': %s", argv[2], + strerror (errno)); + return 1; + } + + write_font_ascii_bitmap (file, ft_face); + + fclose (file); + + FT_Done_Face (ft_face); + + FT_Done_FreeType (ft_lib); + + return 0; +} diff --git a/util/grub-gen-widthspec.c b/util/grub-gen-widthspec.c new file mode 100644 index 000000000..33bc8cb2d --- /dev/null +++ b/util/grub-gen-widthspec.c @@ -0,0 +1,153 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include + +#include + +#include +#include FT_FREETYPE_H +#include FT_TRUETYPE_TAGS_H +#include FT_TRUETYPE_TABLES_H +#include FT_SYNTHESIS_H + +#undef __FTERRORS_H__ +#define FT_ERROR_START_LIST const char *ft_errmsgs[] = { +#define FT_ERRORDEF(e, v, s) [e] = s, +#define FT_ERROR_END_LIST }; +#include FT_ERRORS_H + +#define GRUB_FONT_DEFAULT_SIZE 16 + +#define ARRAY_SIZE(array) (sizeof (array) / sizeof (array[0])) + +#define MAX_CODE 65536 +static unsigned char result[MAX_CODE / 8]; + +static void +add_glyph (FT_Face face, + unsigned int char_code) +{ + int flag = FT_LOAD_RENDER | FT_LOAD_MONOCHROME; + FT_Error err; + FT_UInt glyph_idx; + + glyph_idx = FT_Get_Char_Index (face, char_code); + if (!glyph_idx) + return; + + err = FT_Load_Glyph (face, glyph_idx, flag); + if (err) + { + printf ("Freetype Error %d loading glyph 0x%x for U+0x%x", + err, glyph_idx, char_code); + + if (err > 0 && err < (signed) ARRAY_SIZE (ft_errmsgs)) + printf (": %s\n", ft_errmsgs[err]); + else + printf ("\n"); + return; + } + + if (face->glyph->bitmap.width > 12 && char_code < MAX_CODE) + result[char_code >> 3] |= (1 << (char_code & 7)); +} + +int +main (int argc, char *argv[]) +{ + FT_Library ft_lib; + FILE *file; + int i; + + if (argc != 3) + { + fprintf (stderr, "grub-gen-widthspec: usage: INPUT OUTPUT"); + return 1; + } + + if (FT_Init_FreeType (&ft_lib)) + { + fprintf (stderr, "grub-gen-widthspec: error: FT_Init_FreeType fails"); + return 1; + } + + { + FT_Face ft_face; + int size; + FT_Error err; + unsigned int char_code, glyph_index; + + err = FT_New_Face (ft_lib, argv[1], 0, &ft_face); + if (err) + { + fprintf (stderr, "can't open file %s, index %d: error %d", + argv[1], 0, err); + if (err > 0 && err < (signed) ARRAY_SIZE (ft_errmsgs)) + fprintf (stderr, ": %s\n", ft_errmsgs[err]); + else + fprintf (stderr, "\n"); + + return 1; + } + + if ((ft_face->face_flags & FT_FACE_FLAG_SCALABLE) || + (! ft_face->num_fixed_sizes)) + size = GRUB_FONT_DEFAULT_SIZE; + else + size = ft_face->available_sizes[0].height; + + if (FT_Set_Pixel_Sizes (ft_face, size, size)) + { + fprintf (stderr, "grub-gen-widthspec: error: can't set %dx%d font size", size, size); + return 1; + } + + for (char_code = FT_Get_First_Char (ft_face, &glyph_index); + glyph_index; + char_code = FT_Get_Next_Char (ft_face, char_code, &glyph_index)) + add_glyph (ft_face, char_code); + + FT_Done_Face (ft_face); + } + + FT_Done_FreeType (ft_lib); + + file = fopen (argv[2], "w"); + if (! file) + { + fprintf (stderr, "grub-gen-asciih: error: cannot write to `%s': %s", argv[2], + strerror (errno)); + return 1; + } + + fprintf (file, "/* THIS CHUNK OF BYTES IS AUTOMATICALLY GENERATED */\n"); + fprintf (file, "unsigned char widthspec[] =\n"); + fprintf (file, "{\n"); + + for (i = 0; i < MAX_CODE / 8; i++) + fprintf (file, "0x%02x,%c", result[i], ((i & 0xf) == 0xf) ? '\n' : ' '); + + fprintf (file, "};\n"); + + fclose (file); + + return 0; +} diff --git a/util/grub-glue-efi.c b/util/grub-glue-efi.c new file mode 100644 index 000000000..07fa43030 --- /dev/null +++ b/util/grub-glue-efi.c @@ -0,0 +1,125 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +struct arguments +{ + char *input32; + char *input64; + char *output; + int verbosity; +}; + +static struct argp_option options[] = { + {"input32", '3', N_("FILE"), 0, + N_("set input filename for 32-bit part."), 0}, + {"input64", '6', N_("FILE"), 0, + N_("set input filename for 64-bit part."), 0}, + {"output", 'o', N_("FILE"), 0, + N_("set output filename. Default is STDOUT"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case '6': + arguments->input64 = xstrdup (arg); + break; + case '3': + arguments->input32 = xstrdup (arg); + break; + + case 'o': + arguments->output = xstrdup (arg); + break; + + case 'v': + arguments->verbosity++; + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("[OPTIONS]"), + N_("Glue 32-bit and 64-bit binary into Apple universal one."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + memset (&arguments, 0, sizeof (struct arguments)); + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (!arguments.input32 || !arguments.input64) + { + fprintf (stderr, "%s", _("Missing input file\n")); + exit(1); + } + + grub_util_glue_efi (arguments.input32, + arguments.input64, + arguments.output); + + return 0; +} diff --git a/util/grub-install-common.c b/util/grub-install-common.c new file mode 100644 index 000000000..452b230da --- /dev/null +++ b/util/grub-install-common.c @@ -0,0 +1,974 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +char * +grub_install_help_filter (int key, const char *text, + void *input __attribute__ ((unused))) +{ + switch (key) + { + case GRUB_INSTALL_OPTIONS_INSTALL_THEMES: + return xasprintf(text, "starfield"); + case GRUB_INSTALL_OPTIONS_INSTALL_FONTS: + return xasprintf(text, "unicode"); + case GRUB_INSTALL_OPTIONS_DIRECTORY: + case GRUB_INSTALL_OPTIONS_DIRECTORY2: + return xasprintf(text, grub_util_get_pkglibdir ()); + case GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY: + return xasprintf(text, grub_util_get_localedir ()); + case GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY: + return grub_util_path_concat (2, grub_util_get_pkgdatadir (), "themes"); + default: + return (char *) text; + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +static int (*compress_func) (const char *src, const char *dest) = NULL; +char *grub_install_copy_buffer; + +int +grub_install_copy_file (const char *src, + const char *dst, + int is_needed) +{ + grub_util_fd_t in, out; + ssize_t r; + + grub_util_info ("copying `%s' -> `%s'", src, dst); + + in = grub_util_fd_open (src, GRUB_UTIL_FD_O_RDONLY); + if (!GRUB_UTIL_FD_IS_VALID (in)) + { + if (is_needed) + grub_util_error (_("cannot open `%s': %s"), src, grub_util_fd_strerror ()); + else + grub_util_info (_("cannot open `%s': %s"), src, grub_util_fd_strerror ()); + return 0; + } + out = grub_util_fd_open (dst, GRUB_UTIL_FD_O_WRONLY + | GRUB_UTIL_FD_O_CREATTRUNC); + if (!GRUB_UTIL_FD_IS_VALID (out)) + { + grub_util_error (_("cannot open `%s': %s"), dst, + grub_util_fd_strerror ()); + grub_util_fd_close (in); + return 0; + } + + if (!grub_install_copy_buffer) + grub_install_copy_buffer = xmalloc (GRUB_INSTALL_COPY_BUFFER_SIZE); + + while (1) + { + r = grub_util_fd_read (in, grub_install_copy_buffer, GRUB_INSTALL_COPY_BUFFER_SIZE); + if (r <= 0) + break; + grub_util_fd_write (out, grub_install_copy_buffer, r); + } + grub_util_fd_sync (out); + grub_util_fd_close (in); + grub_util_fd_close (out); + + if (r < 0) + grub_util_error (_("cannot copy `%s' to `%s': %s"), + src, dst, grub_util_fd_strerror ()); + + return 1; +} + +static int +grub_install_compress_file (const char *in_name, + const char *out_name, + int is_needed) +{ + int ret; + + if (!compress_func) + ret = grub_install_copy_file (in_name, out_name, is_needed); + else + { + grub_util_info ("compressing `%s' -> `%s'", in_name, out_name); + ret = !compress_func (in_name, out_name); + if (!ret && is_needed) + grub_util_warn (_("can't compress `%s' to `%s'"), in_name, out_name); + } + + if (!ret && is_needed) + grub_util_error (_("cannot copy `%s' to `%s': %s"), + in_name, out_name, grub_util_fd_strerror ()); + + return ret; +} + +static int +is_path_separator (char c) +{ +#if defined (__MINGW32__) || defined (__CYGWIN__) + if (c == '\\') + return 1; +#endif + if (c == '/') + return 1; + return 0; +} + +void +grub_install_mkdir_p (const char *dst) +{ + char *t = xstrdup (dst); + char *p; + for (p = t; *p; p++) + { + if (is_path_separator (*p)) + { + char s = *p; + *p = '\0'; + grub_util_mkdir (t); + *p = s; + } + } + grub_util_mkdir (t); + free (t); +} + +static void +clean_grub_dir (const char *di) +{ + grub_util_fd_dir_t d; + grub_util_fd_dirent_t de; + + d = grub_util_fd_opendir (di); + if (!d) + grub_util_error (_("cannot open directory `%s': %s"), + di, grub_util_fd_strerror ()); + + while ((de = grub_util_fd_readdir (d))) + { + const char *ext = strrchr (de->d_name, '.'); + if ((ext && (strcmp (ext, ".mod") == 0 + || strcmp (ext, ".lst") == 0 + || strcmp (ext, ".img") == 0 + || strcmp (ext, ".mo") == 0) + && strcmp (de->d_name, "menu.lst") != 0) + || strcmp (de->d_name, "efiemu32.o") == 0 + || strcmp (de->d_name, "efiemu64.o") == 0) + { + char *x = grub_util_path_concat (2, di, de->d_name); + if (grub_util_unlink (x) < 0) + grub_util_error (_("cannot delete `%s': %s"), x, + grub_util_fd_strerror ()); + free (x); + } + } + grub_util_fd_closedir (d); +} + +struct install_list +{ + int is_default; + char **entries; + size_t n_entries; + size_t n_alloc; +}; + +struct install_list install_modules = { 1, 0, 0, 0 }; +struct install_list modules = { 1, 0, 0, 0 }; +struct install_list install_locales = { 1, 0, 0, 0 }; +struct install_list install_fonts = { 1, 0, 0, 0 }; +struct install_list install_themes = { 1, 0, 0, 0 }; +char *grub_install_source_directory = NULL; +char *grub_install_locale_directory = NULL; +char *grub_install_themes_directory = NULL; + +void +grub_install_push_module (const char *val) +{ + modules.is_default = 0; + if (modules.n_entries + 1 >= modules.n_alloc) + { + modules.n_alloc <<= 1; + if (modules.n_alloc < 16) + modules.n_alloc = 16; + modules.entries = xrealloc (modules.entries, + modules.n_alloc * sizeof (*modules.entries)); + } + modules.entries[modules.n_entries++] = xstrdup (val); + modules.entries[modules.n_entries] = NULL; +} + +void +grub_install_pop_module (void) +{ + modules.n_entries--; + free (modules.entries[modules.n_entries]); + modules.entries[modules.n_entries] = NULL; +} + + +static void +handle_install_list (struct install_list *il, const char *val, + int default_all) +{ + const char *ptr; + char **ce; + il->is_default = 0; + free (il->entries); + il->entries = NULL; + il->n_entries = 0; + if (strcmp (val, "all") == 0 && default_all) + { + il->is_default = 1; + return; + } + ptr = val; + while (1) + { + while (*ptr && grub_isspace (*ptr)) + ptr++; + if (!*ptr) + break; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + il->n_entries++; + } + il->n_alloc = il->n_entries + 1; + il->entries = xmalloc (il->n_alloc * sizeof (il->entries[0])); + ptr = val; + for (ce = il->entries; ; ce++) + { + const char *bptr; + while (*ptr && grub_isspace (*ptr)) + ptr++; + if (!*ptr) + break; + bptr = ptr; + while (*ptr && !grub_isspace (*ptr)) + ptr++; + *ce = xmalloc (ptr - bptr + 1); + memcpy (*ce, bptr, ptr - bptr); + (*ce)[ptr - bptr] = '\0'; + } + *ce = NULL; +} + +static char **pubkeys; +static size_t npubkeys; +static grub_compression_t compression; + +int +grub_install_parse (int key, char *arg) +{ + switch (key) + { + case 'C': + if (grub_strcmp (arg, "xz") == 0) + { +#ifdef HAVE_LIBLZMA + compression = GRUB_COMPRESSION_XZ; +#else + grub_util_error ("%s", + _("grub-mkimage is compiled without XZ support")); +#endif + } + else if (grub_strcmp (arg, "none") == 0) + compression = GRUB_COMPRESSION_NONE; + else if (grub_strcmp (arg, "auto") == 0) + compression = GRUB_COMPRESSION_AUTO; + else + grub_util_error (_("Unknown compression format %s"), arg); + return 1; + case 'k': + pubkeys = xrealloc (pubkeys, + sizeof (pubkeys[0]) + * (npubkeys + 1)); + pubkeys[npubkeys++] = xstrdup (arg); + return 1; + + case GRUB_INSTALL_OPTIONS_VERBOSITY: + verbosity++; + return 1; + + case GRUB_INSTALL_OPTIONS_DIRECTORY: + case GRUB_INSTALL_OPTIONS_DIRECTORY2: + free (grub_install_source_directory); + grub_install_source_directory = xstrdup (arg); + return 1; + case GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY: + free (grub_install_locale_directory); + grub_install_locale_directory = xstrdup (arg); + return 1; + case GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY: + free (grub_install_themes_directory); + grub_install_themes_directory = xstrdup (arg); + return 1; + case GRUB_INSTALL_OPTIONS_INSTALL_MODULES: + handle_install_list (&install_modules, arg, 0); + return 1; + case GRUB_INSTALL_OPTIONS_MODULES: + handle_install_list (&modules, arg, 0); + return 1; + case GRUB_INSTALL_OPTIONS_INSTALL_LOCALES: + handle_install_list (&install_locales, arg, 0); + return 1; + case GRUB_INSTALL_OPTIONS_INSTALL_THEMES: + handle_install_list (&install_themes, arg, 0); + return 1; + case GRUB_INSTALL_OPTIONS_INSTALL_FONTS: + handle_install_list (&install_fonts, arg, 0); + return 1; + case GRUB_INSTALL_OPTIONS_INSTALL_COMPRESS: + if (strcmp (arg, "no") == 0 + || strcmp (arg, "none") == 0) + { + compress_func = NULL; + return 1; + } + if (strcmp (arg, "gz") == 0) + { + compress_func = grub_install_compress_gzip; + return 1; + } + if (strcmp (arg, "xz") == 0) + { + compress_func = grub_install_compress_xz; + return 1; + } + if (strcmp (arg, "lzo") == 0) + { + compress_func = grub_install_compress_lzop; + return 1; + } + grub_util_error (_("Unrecognized compression `%s'"), arg); + case GRUB_INSTALL_OPTIONS_GRUB_MKIMAGE: + return 1; + default: + return 0; + } +} + +static int +decompressors (void) +{ + if (compress_func == grub_install_compress_gzip) + { + grub_install_push_module ("gzio"); + return 1; + } + if (compress_func == grub_install_compress_xz) + { + grub_install_push_module ("xzio"); + grub_install_push_module ("gcry_crc"); + return 2; + } + if (compress_func == grub_install_compress_lzop) + { + grub_install_push_module ("lzopio"); + grub_install_push_module ("adler32"); + grub_install_push_module ("gcry_crc"); + return 3; + } + return 0; +} + +void +grub_install_make_image_wrap_file (const char *dir, const char *prefix, + FILE *fp, const char *outname, + char *memdisk_path, + char *config_path, + const char *mkimage_target, int note) +{ + const struct grub_install_image_target_desc *tgt; + const char *const compnames[] = + { + [GRUB_COMPRESSION_AUTO] = "auto", + [GRUB_COMPRESSION_NONE] = "none", + [GRUB_COMPRESSION_XZ] = "xz", + [GRUB_COMPRESSION_LZMA] = "lzma", + }; + grub_size_t slen = 1; + char *s, *p; + char **pk, **md; + int dc = decompressors (); + + if (memdisk_path) + slen += 20 + grub_strlen (memdisk_path); + if (config_path) + slen += 20 + grub_strlen (config_path); + + for (pk = pubkeys; pk < pubkeys + npubkeys; pk++) + slen += 20 + grub_strlen (*pk); + + for (md = modules.entries; *md; md++) + { + slen += 10 + grub_strlen (*md); + } + + p = s = xmalloc (slen); + if (memdisk_path) + { + p = grub_stpcpy (p, "--memdisk '"); + p = grub_stpcpy (p, memdisk_path); + *p++ = '\''; + *p++ = ' '; + } + if (config_path) + { + p = grub_stpcpy (p, "--config '"); + p = grub_stpcpy (p, config_path); + *p++ = '\''; + *p++ = ' '; + } + for (pk = pubkeys; pk < pubkeys + npubkeys; pk++) + { + p = grub_stpcpy (p, "--pubkey '"); + p = grub_stpcpy (p, *pk); + *p++ = '\''; + *p++ = ' '; + } + + for (md = modules.entries; *md; md++) + { + *p++ = '\''; + p = grub_stpcpy (p, *md); + *p++ = '\''; + *p++ = ' '; + } + + *p = '\0'; + + grub_util_info ("grub-mkimage --directory '%s' --prefix '%s'" + " --output '%s' " + "--format '%s' --compression '%s' %s %s\n", + dir, prefix, + outname, mkimage_target, + compnames[compression], note ? "--note" : "", s); + free (s); + + tgt = grub_install_get_image_target (mkimage_target); + if (!tgt) + grub_util_error (_("unknown target format %s"), mkimage_target); + + grub_install_generate_image (dir, prefix, fp, outname, + modules.entries, memdisk_path, + pubkeys, npubkeys, config_path, tgt, + note, compression); + while (dc--) + grub_install_pop_module (); +} + +void +grub_install_make_image_wrap (const char *dir, const char *prefix, + const char *outname, char *memdisk_path, + char *config_path, + const char *mkimage_target, int note) +{ + FILE *fp; + + fp = grub_util_fopen (outname, "wb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), outname, + strerror (errno)); + grub_install_make_image_wrap_file (dir, prefix, fp, outname, + memdisk_path, config_path, + mkimage_target, note); + grub_util_file_sync (fp); + fclose (fp); +} + +static void +copy_by_ext (const char *srcd, + const char *dstd, + const char *extf, + int req) +{ + grub_util_fd_dir_t d; + grub_util_fd_dirent_t de; + + d = grub_util_fd_opendir (srcd); + if (!d && !req) + return; + if (!d) + grub_util_error (_("cannot open directory `%s': %s"), + srcd, grub_util_fd_strerror ()); + + while ((de = grub_util_fd_readdir (d))) + { + const char *ext = strrchr (de->d_name, '.'); + if (ext && strcmp (ext, extf) == 0) + { + char *srcf = grub_util_path_concat (2, srcd, de->d_name); + char *dstf = grub_util_path_concat (2, dstd, de->d_name); + grub_install_compress_file (srcf, dstf, 1); + free (srcf); + free (dstf); + } + } + grub_util_fd_closedir (d); +} + +static void +copy_all (const char *srcd, + const char *dstd) +{ + grub_util_fd_dir_t d; + grub_util_fd_dirent_t de; + + d = grub_util_fd_opendir (srcd); + if (!d) + grub_util_error (_("cannot open directory `%s': %s"), + srcd, grub_util_fd_strerror ()); + + while ((de = grub_util_fd_readdir (d))) + { + char *srcf; + char *dstf; + if (strcmp (de->d_name, ".") == 0 + || strcmp (de->d_name, "..") == 0) + continue; + srcf = grub_util_path_concat (2, srcd, de->d_name); + if (grub_util_is_special_file (srcf) + || grub_util_is_directory (srcf)) + continue; + dstf = grub_util_path_concat (2, dstd, de->d_name); + grub_install_compress_file (srcf, dstf, 1); + free (srcf); + free (dstf); + } + grub_util_fd_closedir (d); +} + +static const char * +get_localedir (void) +{ + if (grub_install_locale_directory) + return grub_install_locale_directory; + else + return grub_util_get_localedir (); +} + +static void +copy_locales (const char *dstd) +{ + grub_util_fd_dir_t d; + grub_util_fd_dirent_t de; + const char *locale_dir = get_localedir (); + + d = grub_util_fd_opendir (locale_dir); + if (!d) + { + grub_util_warn (_("cannot open directory `%s': %s"), + locale_dir, grub_util_fd_strerror ()); + return; + } + + while ((de = grub_util_fd_readdir (d))) + { + char *srcf; + char *dstf; + char *ext; + if (strcmp (de->d_name, ".") == 0) + continue; + if (strcmp (de->d_name, "..") == 0) + continue; + ext = grub_strrchr (de->d_name, '.'); + if (ext && (grub_strcmp (ext, ".mo") == 0 + || grub_strcmp (ext, ".gmo") == 0)) + { + srcf = grub_util_path_concat (2, locale_dir, de->d_name); + dstf = grub_util_path_concat (2, dstd, de->d_name); + ext = grub_strrchr (dstf, '.'); + grub_strcpy (ext, ".mo"); + } + else + { + srcf = grub_util_path_concat_ext (4, locale_dir, de->d_name, + "LC_MESSAGES", PACKAGE, ".mo"); + dstf = grub_util_path_concat_ext (2, dstd, de->d_name, ".mo"); + } + grub_install_compress_file (srcf, dstf, 0); + free (srcf); + free (dstf); + } + grub_util_fd_closedir (d); +} + +static struct +{ + const char *cpu; + const char *platform; +} platforms[GRUB_INSTALL_PLATFORM_MAX] = + { + [GRUB_INSTALL_PLATFORM_I386_PC] = { "i386", "pc" }, + [GRUB_INSTALL_PLATFORM_I386_EFI] = { "i386", "efi" }, + [GRUB_INSTALL_PLATFORM_I386_QEMU] = { "i386", "qemu" }, + [GRUB_INSTALL_PLATFORM_I386_COREBOOT] = { "i386", "coreboot" }, + [GRUB_INSTALL_PLATFORM_I386_MULTIBOOT] = { "i386", "multiboot" }, + [GRUB_INSTALL_PLATFORM_I386_IEEE1275] = { "i386", "ieee1275" }, + [GRUB_INSTALL_PLATFORM_X86_64_EFI] = { "x86_64", "efi" }, + [GRUB_INSTALL_PLATFORM_I386_XEN] = { "i386", "xen" }, + [GRUB_INSTALL_PLATFORM_X86_64_XEN] = { "x86_64", "xen" }, + [GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON] = { "mipsel", "loongson" }, + [GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS] = { "mipsel", "qemu_mips" }, + [GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS] = { "mips", "qemu_mips" }, + [GRUB_INSTALL_PLATFORM_MIPSEL_ARC] = { "mipsel", "arc" }, + [GRUB_INSTALL_PLATFORM_MIPS_ARC] = { "mips", "arc" }, + [GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275] = { "sparc64", "ieee1275" }, + [GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275] = { "powerpc", "ieee1275" }, + [GRUB_INSTALL_PLATFORM_IA64_EFI] = { "ia64", "efi" }, + [GRUB_INSTALL_PLATFORM_ARM_EFI] = { "arm", "efi" }, + [GRUB_INSTALL_PLATFORM_ARM64_EFI] = { "arm64", "efi" }, + [GRUB_INSTALL_PLATFORM_ARM_UBOOT] = { "arm", "uboot" }, + }; + +char * +grub_install_get_platforms_string (void) +{ + char **arr = xmalloc (sizeof (char *) * ARRAY_SIZE (platforms)); + int platform_strins_len = 0; + char *platforms_string; + char *ptr; + unsigned i; + for (i = 0; i < ARRAY_SIZE (platforms); i++) + { + arr[i] = xasprintf ("%s-%s", platforms[i].cpu, + platforms[i].platform); + platform_strins_len += strlen (arr[i]) + 2; + } + ptr = platforms_string = xmalloc (platform_strins_len); + qsort (arr, ARRAY_SIZE (platforms), sizeof (char *), grub_qsort_strcmp); + for (i = 0; i < ARRAY_SIZE (platforms); i++) + { + strcpy (ptr, arr[i]); + ptr += strlen (arr[i]); + *ptr++ = ','; + *ptr++ = ' '; + free (arr[i]); + } + ptr[-2] = 0; + free (arr); + + return platforms_string; +} + +char * +grub_install_get_platform_name (enum grub_install_plat platid) +{ + return xasprintf ("%s-%s", platforms[platid].cpu, + platforms[platid].platform); +} + +const char * +grub_install_get_platform_cpu (enum grub_install_plat platid) +{ + return platforms[platid].cpu; +} + +const char * +grub_install_get_platform_platform (enum grub_install_plat platid) +{ + return platforms[platid].platform; +} + + +void +grub_install_copy_files (const char *src, + const char *dst, + enum grub_install_plat platid) +{ + char *dst_platform, *dst_locale, *dst_fonts; + const char *pkgdatadir = grub_util_get_pkgdatadir (); + char *themes_dir; + + { + char *platform; + platform = xasprintf ("%s-%s", platforms[platid].cpu, + platforms[platid].platform); + dst_platform = grub_util_path_concat (2, dst, platform); + free (platform); + } + dst_locale = grub_util_path_concat (2, dst, "locale"); + dst_fonts = grub_util_path_concat (2, dst, "fonts"); + grub_install_mkdir_p (dst_platform); + grub_install_mkdir_p (dst_locale); + clean_grub_dir (dst); + clean_grub_dir (dst_platform); + clean_grub_dir (dst_locale); + + if (install_modules.is_default) + copy_by_ext (src, dst_platform, ".mod", 1); + else + { + struct grub_util_path_list *path_list, *p; + + path_list = grub_util_resolve_dependencies (src, "moddep.lst", + install_modules.entries); + for (p = path_list; p; p = p->next) + { + const char *srcf = p->name; + const char *dir; + char *dstf; + + dir = grub_strrchr (srcf, '/'); + if (dir) + dir++; + else + dir = srcf; + dstf = grub_util_path_concat (2, dst_platform, dir); + grub_install_compress_file (srcf, dstf, 1); + free (dstf); + } + + grub_util_free_path_list (path_list); + } + + const char *pkglib_DATA[] = {"efiemu32.o", "efiemu64.o", + "moddep.lst", "command.lst", + "fs.lst", "partmap.lst", + "parttool.lst", + "video.lst", "crypto.lst", + "terminal.lst", "modinfo.sh" }; + size_t i; + + for (i = 0; i < ARRAY_SIZE (pkglib_DATA); i++) + { + char *srcf = grub_util_path_concat (2, src, pkglib_DATA[i]); + char *dstf = grub_util_path_concat (2, dst_platform, pkglib_DATA[i]); + if (i == 0 || i == 1) + grub_install_compress_file (srcf, dstf, 0); + else + grub_install_compress_file (srcf, dstf, 1); + free (srcf); + free (dstf); + } + + if (install_locales.is_default) + { + char *srcd = grub_util_path_concat (2, src, "po"); + copy_by_ext (srcd, dst_locale, ".mo", 0); + copy_locales (dst_locale); + free (srcd); + } + else + { + const char *locale_dir = get_localedir (); + + for (i = 0; i < install_locales.n_entries; i++) + { + char *srcf = grub_util_path_concat_ext (3, src, + "po", + install_locales.entries[i], + ".mo"); + char *dstf = grub_util_path_concat_ext (2, dst_locale, + install_locales.entries[i], + ".mo"); + if (grub_install_compress_file (srcf, dstf, 0)) + { + free (srcf); + free (dstf); + continue; + } + free (srcf); + srcf = grub_util_path_concat_ext (4, + locale_dir, + install_locales.entries[i], + "LC_MESSAGES", + PACKAGE, + ".mo"); + if (grub_install_compress_file (srcf, dstf, 0)) + { + free (srcf); + free (dstf); + continue; + } + grub_util_error (_("cannot find locale `%s'"), + install_locales.entries[i]); + } + } + + if (install_themes.is_default) + { + install_themes.is_default = 0; + install_themes.n_entries = 1; + install_themes.entries = xmalloc (2 * sizeof (install_themes.entries[0])); + install_themes.entries[0] = xstrdup ("starfield"); + install_themes.entries[1] = NULL; + } + + if (grub_install_themes_directory) + themes_dir = xstrdup (grub_install_themes_directory); + else + themes_dir = grub_util_path_concat (2, grub_util_get_pkgdatadir (), + "themes"); + + for (i = 0; i < install_themes.n_entries; i++) + { + char *srcf = grub_util_path_concat (3, themes_dir, + install_themes.entries[i], + "theme.txt"); + if (grub_util_is_regular (srcf)) + { + char *srcd = grub_util_path_concat (2, themes_dir, + install_themes.entries[i]); + char *dstd = grub_util_path_concat (3, dst, "themes", + install_themes.entries[i]); + grub_install_mkdir_p (dstd); + copy_all (srcd, dstd); + free (srcd); + free (dstd); + } + free (srcf); + } + + free (themes_dir); + + if (install_fonts.is_default) + { + install_fonts.is_default = 0; + install_fonts.n_entries = 1; + install_fonts.entries = xmalloc (2 * sizeof (install_fonts.entries[0])); + install_fonts.entries[0] = xstrdup ("unicode"); + install_fonts.entries[1] = NULL; + } + + grub_install_mkdir_p (dst_fonts); + + for (i = 0; i < install_fonts.n_entries; i++) + { + char *srcf = grub_util_path_concat_ext (2, pkgdatadir, + install_fonts.entries[i], + ".pf2"); + char *dstf = grub_util_path_concat_ext (2, dst_fonts, + install_fonts.entries[i], + ".pf2"); + + grub_install_compress_file (srcf, dstf, 0); + free (srcf); + free (dstf); + } + + free (dst_platform); + free (dst_locale); + free (dst_fonts); +} + +enum grub_install_plat +grub_install_get_target (const char *src) +{ + char *fn; + grub_util_fd_t f; + char buf[8192]; + ssize_t r; + char *c, *pl, *p; + size_t i; + fn = grub_util_path_concat (2, src, "modinfo.sh"); + f = grub_util_fd_open (fn, GRUB_UTIL_FD_O_RDONLY); + if (!GRUB_UTIL_FD_IS_VALID (f)) + grub_util_error (_("%s doesn't exist. Please specify --target or --directory"), + fn); + r = grub_util_fd_read (f, buf, sizeof (buf) - 1); + if (r < 0) + grub_util_error (_("cannot read `%s': %s"), fn, strerror (errno)); + grub_util_fd_close (f); + buf[r] = '\0'; + c = strstr (buf, "grub_modinfo_target_cpu="); + if (!c || (c != buf && !grub_isspace (*(c-1)))) + grub_util_error (_("invalid modinfo file `%s'"), fn); + pl = strstr (buf, "grub_modinfo_platform="); + if (!pl || (pl != buf && !grub_isspace (*(pl-1)))) + grub_util_error (_("invalid modinfo file `%s'"), fn); + c += sizeof ("grub_modinfo_target_cpu=") - 1; + pl += sizeof ("grub_modinfo_platform=") - 1; + for (p = c; *p && !grub_isspace (*p); p++); + *p = '\0'; + for (p = pl; *p && !grub_isspace (*p); p++); + *p = '\0'; + + for (i = 0; i < ARRAY_SIZE (platforms); i++) + if (strcmp (platforms[i].cpu, c) == 0 + && strcmp (platforms[i].platform, pl) == 0) + { + free (fn); + return i; + } + grub_util_error (_("Unknown platform `%s-%s'"), c, pl); +} + + +void +grub_util_unlink_recursive (const char *name) +{ + grub_util_fd_dir_t d; + grub_util_fd_dirent_t de; + + d = grub_util_fd_opendir (name); + + while ((de = grub_util_fd_readdir (d))) + { + char *fp; + if (strcmp (de->d_name, ".") == 0) + continue; + if (strcmp (de->d_name, "..") == 0) + continue; + fp = grub_util_path_concat (2, name, de->d_name); + if (grub_util_is_special_file (fp)) + { + free (fp); + continue; + } + if (grub_util_is_regular (fp)) + grub_util_unlink (fp); + else if (grub_util_is_directory (fp)) + grub_util_unlink_recursive (fp); + free (fp); + } + grub_util_rmdir (name); + grub_util_fd_closedir (d); +} diff --git a/util/grub-install.c b/util/grub-install.c new file mode 100644 index 000000000..9074d3e9e --- /dev/null +++ b/util/grub-install.c @@ -0,0 +1,1913 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +static char *target; +static int removable = 0; +static int recheck = 0; +static int update_nvram = 1; +static char *install_device = NULL; +static char *debug_image = NULL; +static char *rootdir = NULL; +static char *bootdir = NULL; +static int allow_floppy = 0; +static int force_file_id = 0; +static char *disk_module = NULL; +static char *efidir = NULL; +static char *macppcdir = NULL; +static int force = 0; +static int have_abstractions = 0; +static int have_cryptodisk = 0; +static char * bootloader_id; +static int have_load_cfg = 0; +static FILE * load_cfg_f = NULL; +static char *load_cfg; +static int install_bootsector = 1; +static char *label_font; +static char *label_color; +static char *label_bgcolor; +static char *product_version; +static int add_rs_codes = 1; + +enum + { + OPTION_BOOT_DIRECTORY = 0x301, + OPTION_ROOT_DIRECTORY, + OPTION_TARGET, + OPTION_SETUP, + OPTION_MKRELPATH, + OPTION_MKDEVICEMAP, + OPTION_PROBE, + OPTION_EDITENV, + OPTION_ALLOW_FLOPPY, + OPTION_RECHECK, + OPTION_FORCE, + OPTION_FORCE_FILE_ID, + OPTION_NO_NVRAM, + OPTION_REMOVABLE, + OPTION_BOOTLOADER_ID, + OPTION_EFI_DIRECTORY, + OPTION_FONT, + OPTION_DEBUG, + OPTION_DEBUG_IMAGE, + OPTION_NO_FLOPPY, + OPTION_DISK_MODULE, + OPTION_NO_BOOTSECTOR, + OPTION_NO_RS_CODES, + OPTION_MACPPC_DIRECTORY, + OPTION_LABEL_FONT, + OPTION_LABEL_COLOR, + OPTION_LABEL_BGCOLOR, + OPTION_PRODUCT_VERSION + }; + +static int fs_probe = 1; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + if (grub_install_parse (key, arg)) + return 0; + switch (key) + { + case OPTION_FORCE_FILE_ID: + force_file_id = 1; + return 0; + case 's': + fs_probe = 0; + return 0; + + case OPTION_SETUP: + if (!grub_strstr (arg, "setup")) + install_bootsector = 0; + return 0; + + case OPTION_PRODUCT_VERSION: + free (product_version); + product_version = xstrdup (arg); + return 0; + case OPTION_LABEL_FONT: + free (label_font); + label_font = xstrdup (arg); + return 0; + + case OPTION_LABEL_COLOR: + free (label_color); + label_color = xstrdup (arg); + return 0; + + case OPTION_LABEL_BGCOLOR: + free (label_bgcolor); + label_bgcolor = xstrdup (arg); + return 0; + + /* Accept and ignore for compatibility. */ + case OPTION_FONT: + case OPTION_MKRELPATH: + case OPTION_PROBE: + case OPTION_EDITENV: + case OPTION_MKDEVICEMAP: + case OPTION_NO_FLOPPY: + return 0; + case OPTION_ROOT_DIRECTORY: + /* Accept for compatibility. */ + free (rootdir); + rootdir = xstrdup (arg); + return 0; + + case OPTION_BOOT_DIRECTORY: + free (bootdir); + bootdir = xstrdup (arg); + return 0; + + case OPTION_MACPPC_DIRECTORY: + free (macppcdir); + macppcdir = xstrdup (arg); + return 0; + + case OPTION_EFI_DIRECTORY: + free (efidir); + efidir = xstrdup (arg); + return 0; + + case OPTION_DISK_MODULE: + free (disk_module); + disk_module = xstrdup (arg); + return 0; + + case OPTION_TARGET: + free (target); + target = xstrdup (arg); + return 0; + + case OPTION_DEBUG_IMAGE: + free (debug_image); + debug_image = xstrdup (arg); + return 0; + + case OPTION_NO_NVRAM: + update_nvram = 0; + return 0; + + case OPTION_FORCE: + force = 1; + return 0; + + case OPTION_RECHECK: + recheck = 1; + return 0; + + case OPTION_REMOVABLE: + removable = 1; + return 0; + + case OPTION_ALLOW_FLOPPY: + allow_floppy = 1; + return 0; + + case OPTION_NO_BOOTSECTOR: + install_bootsector = 0; + return 0; + + case OPTION_NO_RS_CODES: + add_rs_codes = 0; + return 0; + + case OPTION_DEBUG: + verbosity++; + return 0; + + case OPTION_BOOTLOADER_ID: + free (bootloader_id); + bootloader_id = xstrdup (arg); + return 0; + + case ARGP_KEY_ARG: + if (install_device) + grub_util_error ("%s", _("More than one install device?")); + install_device = xstrdup (arg); + return 0; + + default: + return ARGP_ERR_UNKNOWN; + } +} + + +static struct argp_option options[] = { + GRUB_INSTALL_OPTIONS, + {"boot-directory", OPTION_BOOT_DIRECTORY, N_("DIR"), + 0, N_("install GRUB images under the directory DIR/%s instead of the %s directory"), 2}, + {"root-directory", OPTION_ROOT_DIRECTORY, N_("DIR"), + OPTION_HIDDEN, 0, 2}, + {"font", OPTION_FONT, N_("FILE"), + OPTION_HIDDEN, 0, 2}, + {"target", OPTION_TARGET, N_("TARGET"), + /* TRANSLATORS: "TARGET" as in "target platform". */ + 0, N_("install GRUB for TARGET platform [default=%s]; available targets: %s"), 2}, + {"grub-setup", OPTION_SETUP, "FILE", OPTION_HIDDEN, 0, 2}, + {"grub-mkrelpath", OPTION_MKRELPATH, "FILE", OPTION_HIDDEN, 0, 2}, + {"grub-mkdevicemap", OPTION_MKDEVICEMAP, "FILE", OPTION_HIDDEN, 0, 2}, + {"grub-probe", OPTION_PROBE, "FILE", OPTION_HIDDEN, 0, 2}, + {"grub-editenv", OPTION_EDITENV, "FILE", OPTION_HIDDEN, 0, 2}, + {"allow-floppy", OPTION_ALLOW_FLOPPY, 0, 0, + /* TRANSLATORS: "may break" doesn't just mean that option wouldn't have any + effect but that it will make the resulting install unbootable from HDD. */ + N_("make the drive also bootable as floppy (default for fdX devices)." + " May break on some BIOSes."), 2}, + {"recheck", OPTION_RECHECK, 0, 0, + N_("delete device map if it already exists"), 2}, + {"force", OPTION_FORCE, 0, 0, + N_("install even if problems are detected"), 2}, + {"force-file-id", OPTION_FORCE_FILE_ID, 0, 0, + N_("use identifier file even if UUID is available"), 2}, + {"disk-module", OPTION_DISK_MODULE, N_("MODULE"), 0, + N_("disk module to use (biosdisk or native). " + "This option is only available on BIOS target."), 2}, + {"no-nvram", OPTION_NO_NVRAM, 0, 0, + N_("don't update the `boot-device'/`Boot*' NVRAM variables. " + "This option is only available on EFI and IEEE1275 targets."), 2}, + {"skip-fs-probe",'s',0, 0, + N_("do not probe for filesystems in DEVICE"), 0}, + {"no-bootsector", OPTION_NO_BOOTSECTOR, 0, 0, + N_("do not install bootsector"), 0}, + {"no-rs-codes", OPTION_NO_RS_CODES, 0, 0, + N_("Do not apply any reed-solomon codes when embedding core.img. " + "This option is only available on x86 BIOS targets."), 0}, + + {"debug", OPTION_DEBUG, 0, OPTION_HIDDEN, 0, 2}, + {"no-floppy", OPTION_NO_FLOPPY, 0, OPTION_HIDDEN, 0, 2}, + {"debug-image", OPTION_DEBUG_IMAGE, N_("STRING"), OPTION_HIDDEN, 0, 2}, + {"removable", OPTION_REMOVABLE, 0, 0, + N_("the installation device is removable. " + "This option is only available on EFI."), 2}, + {"bootloader-id", OPTION_BOOTLOADER_ID, N_("ID"), 0, + N_("the ID of bootloader. This option is only available on EFI and Macs."), 2}, + {"efi-directory", OPTION_EFI_DIRECTORY, N_("DIR"), 0, + N_("use DIR as the EFI System Partition root."), 2}, + {"macppc-directory", OPTION_MACPPC_DIRECTORY, N_("DIR"), 0, + N_("use DIR for PPC MAC install."), 2}, + {"label-font", OPTION_LABEL_FONT, N_("FILE"), 0, N_("use FILE as font for label"), 2}, + {"label-color", OPTION_LABEL_COLOR, N_("COLOR"), 0, N_("use COLOR for label"), 2}, + {"label-bgcolor", OPTION_LABEL_BGCOLOR, N_("COLOR"), 0, N_("use COLOR for label background"), 2}, + {"product-version", OPTION_PRODUCT_VERSION, N_("STRING"), 0, N_("use STRING as product version"), 2}, + {0, 0, 0, 0, 0, 0} +}; + +static const char * +get_default_platform (void) +{ +#ifdef __powerpc__ + return "powerpc-ieee1275"; +#elif defined (__sparc__) || defined (__sparc64__) + return "sparc64-ieee1275"; +#elif defined (__MIPSEL__) + return "mipsel-loongson"; +#elif defined (__MIPSEB__) + return "mips-arc"; +#elif defined (__ia64__) + return "ia64-efi"; +#elif defined (__arm__) + return "arm-uboot"; +#elif defined (__aarch64__) + return "arm64-efi"; +#elif defined (__amd64__) || defined (__x86_64__) || defined (__i386__) + return grub_install_get_default_x86_platform (); +#else + return NULL; +#endif +} + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case OPTION_BOOT_DIRECTORY: + return xasprintf (text, GRUB_DIR_NAME, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME); + case OPTION_TARGET: + { + char *plats = grub_install_get_platforms_string (); + char *ret; + ret = xasprintf (text, get_default_platform (), plats); + free (plats); + return ret; + } + case ARGP_KEY_HELP_POST_DOC: + return xasprintf (text, program_name, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME); + default: + return grub_install_help_filter (key, text, input); + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +/* TRANSLATORS: INSTALL_DEVICE isn't an identifier and is the DEVICE you + install to. */ +struct argp argp = { + options, argp_parser, N_("[OPTION] [INSTALL_DEVICE]"), + N_("Install GRUB on your drive.")"\v" + N_("INSTALL_DEVICE must be system device filename.\n" + "%s copies GRUB images into %s. On some platforms, it" + " may also install GRUB into the boot sector."), + NULL, help_filter, NULL +}; + +static int +probe_raid_level (grub_disk_t disk) +{ + /* disk might be NULL in the case of a LVM physical volume with no LVM + signature. Ignore such cases here. */ + if (!disk) + return -1; + + if (disk->dev->id != GRUB_DISK_DEVICE_DISKFILTER_ID) + return -1; + + if (disk->name[0] != 'm' || disk->name[1] != 'd') + return -1; + + if (!((struct grub_diskfilter_lv *) disk->data)->segments) + return -1; + return ((struct grub_diskfilter_lv *) disk->data)->segments->type; +} + +static void +push_partmap_module (const char *map, void *data __attribute__ ((unused))) +{ + char buf[50]; + + if (strcmp (map, "openbsd") == 0 || strcmp (map, "netbsd") == 0) + { + grub_install_push_module ("part_bsd"); + return; + } + + snprintf (buf, sizeof (buf), "part_%s", map); + grub_install_push_module (buf); +} + +static void +push_cryptodisk_module (const char *mod, void *data __attribute__ ((unused))) +{ + grub_install_push_module (mod); +} + +static void +probe_mods (grub_disk_t disk) +{ + grub_partition_t part; + grub_disk_memberlist_t list = NULL, tmp; + int raid_level; + + if (disk->partition == NULL) + grub_util_info ("no partition map found for %s", disk->name); + + for (part = disk->partition; part; part = part->parent) + push_partmap_module (part->partmap->name, NULL); + + if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID) + { + grub_diskfilter_get_partmap (disk, push_partmap_module, NULL); + have_abstractions = 1; + } + + if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID + && (grub_memcmp (disk->name, "lvm/", sizeof ("lvm/") - 1) == 0 || + grub_memcmp (disk->name, "lvmid/", sizeof ("lvmid/") - 1) == 0)) + grub_install_push_module ("lvm"); + + if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID + && grub_memcmp (disk->name, "ldm/", sizeof ("ldm/") - 1) == 0) + grub_install_push_module ("ldm"); + + if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID) + { + grub_util_cryptodisk_get_abstraction (disk, + push_cryptodisk_module, NULL); + have_abstractions = 1; + have_cryptodisk = 1; + } + + raid_level = probe_raid_level (disk); + if (raid_level >= 0) + { + grub_install_push_module ("diskfilter"); + if (disk->dev->raidname) + grub_install_push_module (disk->dev->raidname (disk)); + } + if (raid_level == 5) + grub_install_push_module ("raid5rec"); + if (raid_level == 6) + grub_install_push_module ("raid6rec"); + + /* In case of LVM/RAID, check the member devices as well. */ + if (disk->dev->memberlist) + list = disk->dev->memberlist (disk); + while (list) + { + probe_mods (list->disk); + tmp = list->next; + free (list); + list = tmp; + } +} + +static int +have_bootdev (enum grub_install_plat pl) +{ + switch (pl) + { + case GRUB_INSTALL_PLATFORM_I386_PC: + case GRUB_INSTALL_PLATFORM_I386_EFI: + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_I386_IEEE1275: + case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + case GRUB_INSTALL_PLATFORM_MIPS_ARC: + return 1; + + case GRUB_INSTALL_PLATFORM_I386_QEMU: + case GRUB_INSTALL_PLATFORM_I386_COREBOOT: + case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: + + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + + case GRUB_INSTALL_PLATFORM_I386_XEN: + case GRUB_INSTALL_PLATFORM_X86_64_XEN: + return 0; + + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + return 0; + } + return 0; +} + +static void +probe_cryptodisk_uuid (grub_disk_t disk) +{ + grub_disk_memberlist_t list = NULL, tmp; + + /* In case of LVM/RAID, check the member devices as well. */ + if (disk->dev->memberlist) + { + list = disk->dev->memberlist (disk); + } + while (list) + { + probe_cryptodisk_uuid (list->disk); + tmp = list->next; + free (list); + list = tmp; + } + if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID) + { + const char *uuid = grub_util_cryptodisk_get_uuid (disk); + if (!load_cfg_f) + load_cfg_f = grub_util_fopen (load_cfg, "wb"); + have_load_cfg = 1; + + fprintf (load_cfg_f, "cryptomount -u %s\n", + uuid); + } +} + +static int +is_same_disk (const char *a, const char *b) +{ + while (1) + { + if ((*a == ',' || *a == '\0') && (*b == ',' || *b == '\0')) + return 1; + if (*a != *b) + return 0; + if (*a == '\\') + { + if (a[1] != b[1]) + return 0; + a += 2; + b += 2; + continue; + } + a++; + b++; + } +} + +static char * +get_rndstr (void) +{ + grub_uint8_t rnd[15]; + const size_t sz = sizeof (rnd) * GRUB_CHAR_BIT / 5; + char * ret = xmalloc (sz + 1); + size_t i; + if (grub_get_random (rnd, sizeof (rnd))) + grub_util_error ("%s", _("couldn't retrieve random data")); + for (i = 0; i < sz; i++) + { + grub_size_t b = i * 5; + grub_uint8_t r; + grub_size_t f1 = GRUB_CHAR_BIT - b % GRUB_CHAR_BIT; + grub_size_t f2; + if (f1 > 5) + f1 = 5; + f2 = 5 - f1; + r = (rnd[b / GRUB_CHAR_BIT] >> (b % GRUB_CHAR_BIT)) & ((1 << f1) - 1); + if (f2) + r |= (rnd[b / GRUB_CHAR_BIT + 1] & ((1 << f2) - 1)) << f1; + if (r < 10) + ret[i] = '0' + r; + else + ret[i] = 'a' + (r - 10); + } + ret[sz] = '\0'; + return ret; +} + +static char * +escape (const char *in) +{ + char *ptr; + char *ret; + int overhead = 0; + + for (ptr = (char*)in; *ptr; ptr++) + if (*ptr == '\'') + overhead += 3; + ret = grub_malloc (ptr - in + overhead + 1); + if (!ret) + return NULL; + + grub_strchrsub (ret, in, '\'', "'\\''"); + return ret; +} + +static struct grub_util_config config; + +static void +device_map_check_duplicates (const char *dev_map) +{ + FILE *fp; + char buf[1024]; /* XXX */ + size_t alloced = 8; + size_t filled = 0; + char **d; + size_t i; + + if (dev_map[0] == '\0') + return; + + fp = grub_util_fopen (dev_map, "r"); + if (! fp) + return; + + d = xmalloc (alloced * sizeof (d[0])); + + while (fgets (buf, sizeof (buf), fp)) + { + char *p = buf; + char *e; + + /* Skip leading spaces. */ + while (*p && grub_isspace (*p)) + p++; + + /* If the first character is `#' or NUL, skip this line. */ + if (*p == '\0' || *p == '#') + continue; + + if (*p != '(') + continue; + + p++; + + e = p; + p = strchr (p, ')'); + if (! p) + continue; + + if (filled >= alloced) + { + alloced *= 2; + d = xrealloc (d, alloced * sizeof (d[0])); + } + + *p = '\0'; + + d[filled++] = xstrdup (e); + } + + fclose (fp); + + qsort (d, filled, sizeof (d[0]), grub_qsort_strcmp); + + for (i = 0; i + 1 < filled; i++) + if (strcmp (d[i], d[i+1]) == 0) + { + grub_util_error (_("the drive %s is defined multiple times in the device map %s"), + d[i], dev_map); + } + + for (i = 0; i < filled; i++) + free (d[i]); + + free (d); +} + +static grub_err_t +write_to_disk (grub_device_t dev, const char *fn) +{ + char *core_img; + size_t core_size; + grub_err_t err; + + core_size = grub_util_get_image_size (fn); + + core_img = grub_util_read_image (fn); + + grub_util_info ("writing `%s' to `%s'", fn, dev->disk->name); + err = grub_disk_write (dev->disk, 0, 0, + core_size, core_img); + free (core_img); + return err; +} + +static int +is_prep_partition (grub_device_t dev) +{ + if (!dev->disk) + return 0; + if (!dev->disk->partition) + return 0; + if (strcmp(dev->disk->partition->partmap->name, "msdos") == 0) + return (dev->disk->partition->msdostype == 0x41); + + if (strcmp (dev->disk->partition->partmap->name, "gpt") == 0) + { + struct grub_gpt_partentry gptdata; + grub_partition_t p = dev->disk->partition; + int ret = 0; + dev->disk->partition = dev->disk->partition->parent; + + if (grub_disk_read (dev->disk, p->offset, p->index, + sizeof (gptdata), &gptdata) == 0) + { + const grub_gpt_part_type_t template = { + grub_cpu_to_le32_compile_time (0x9e1a2d38), + grub_cpu_to_le16_compile_time (0xc612), + grub_cpu_to_le16_compile_time (0x4316), + { 0xaa, 0x26, 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b } + }; + + ret = grub_memcmp (&template, &gptdata.type, + sizeof (template)) == 0; + } + dev->disk->partition = p; + return ret; + } + + return 0; +} + +static int +is_prep_empty (grub_device_t dev) +{ + grub_disk_addr_t dsize, addr; + grub_uint32_t buffer[32768]; + + dsize = grub_disk_get_size (dev->disk); + for (addr = 0; addr < dsize; + addr += sizeof (buffer) / GRUB_DISK_SECTOR_SIZE) + { + grub_size_t sz = sizeof (buffer); + grub_uint32_t *ptr; + + if (sizeof (buffer) / GRUB_DISK_SECTOR_SIZE > dsize - addr) + sz = (dsize - addr) * GRUB_DISK_SECTOR_SIZE; + grub_disk_read (dev->disk, addr, 0, sz, buffer); + + if (addr == 0 && grub_memcmp (buffer, ELFMAG, SELFMAG) == 0) + return 1; + + for (ptr = buffer; ptr < buffer + sz / sizeof (*buffer); ptr++) + if (*ptr) + return 0; + } + + return 1; +} + +static void +bless (grub_device_t dev, const char *path, int x86) +{ + struct stat st; + grub_err_t err; + + grub_util_info ("blessing %s", path); + + if (stat (path, &st) < 0) + grub_util_error (N_("cannot stat `%s': %s"), + path, strerror (errno)); + + err = grub_mac_bless_inode (dev, st.st_ino, S_ISDIR (st.st_mode), x86); + if (err) + grub_util_error ("%s", grub_errmsg); + grub_util_info ("blessed"); +} + +static void +fill_core_services (const char *core_services) +{ + char *label; + FILE *f; + char *label_text; + char *label_string = xasprintf ("%s %s", bootloader_id, product_version); + char *sysv_plist; + + label = grub_util_path_concat (2, core_services, ".disk_label"); + grub_util_info ("rendering label %s", label_string); + grub_util_render_label (label_font, label_bgcolor ? : "white", + label_color ? : "black", label_string, label); + grub_util_info ("label rendered"); + free (label); + label_text = grub_util_path_concat (2, core_services, ".disk_label.contentDetails"); + f = grub_util_fopen (label_text, "wb"); + fprintf (f, "%s\n", label_string); + fclose (f); + free (label_string); + free (label_text); + + sysv_plist = grub_util_path_concat (2, core_services, "SystemVersion.plist"); + f = grub_util_fopen (sysv_plist, "wb"); + fprintf (f, + "\n" + "\n" + " ProductBuildVersion\n" + " \n" + " ProductName\n" + " %s\n" + " ProductVersion\n" + " %s\n" + "\n" + "\n", bootloader_id, product_version); + fclose (f); + free (sysv_plist); +} + +int +main (int argc, char *argv[]) +{ + int is_efi = 0; + const char *efi_distributor = NULL; + const char *efi_file = NULL; + char **grub_devices; + grub_fs_t grub_fs; + grub_device_t grub_dev = NULL; + enum grub_install_plat platform; + char *grubdir, *device_map; + char **curdev, **curdrive; + char **grub_drives; + char *relative_grubdir; + char **efidir_device_names = NULL; + grub_device_t efidir_grub_dev = NULL; + char *efidir_grub_devname; + int efidir_is_mac = 0; + int is_prep = 0; + const char *pkgdatadir; + + grub_util_host_init (&argc, &argv); + product_version = xstrdup (PACKAGE_VERSION); + pkgdatadir = grub_util_get_pkgdatadir (); + label_font = grub_util_path_concat (2, pkgdatadir, "unicode.pf2"); + + argp_parse (&argp, argc, argv, 0, 0, 0); + + if (verbosity > 1) + grub_env_set ("debug", "all"); + + grub_util_load_config (&config); + + if (!bootloader_id && config.grub_distributor) + { + char *ptr; + bootloader_id = xstrdup (config.grub_distributor); + for (ptr = bootloader_id; *ptr && *ptr != ' '; ptr++) + if (*ptr >= 'A' && *ptr <= 'Z') + *ptr = *ptr - 'A' + 'a'; + *ptr = '\0'; + } + if (!bootloader_id || bootloader_id[0] == '\0') + { + free (bootloader_id); + bootloader_id = xstrdup ("grub"); + } + + if (!grub_install_source_directory) + { + if (!target) + { + const char * t; + t = get_default_platform (); + if (!t) + grub_util_error ("%s", + _("Unable to determine your platform." + " Use --target.") + ); + target = xstrdup (t); + } + grub_install_source_directory + = grub_util_path_concat (2, grub_util_get_pkglibdir (), target); + } + + platform = grub_install_get_target (grub_install_source_directory); + + { + char *platname = grub_install_get_platform_name (platform); + fprintf (stderr, _("Installing for %s platform.\n"), platname); + free (platname); + } + + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_PC: + if (!disk_module) + disk_module = xstrdup ("biosdisk"); + break; + case GRUB_INSTALL_PLATFORM_I386_EFI: + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + case GRUB_INSTALL_PLATFORM_I386_IEEE1275: + case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + case GRUB_INSTALL_PLATFORM_MIPS_ARC: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + case GRUB_INSTALL_PLATFORM_I386_XEN: + case GRUB_INSTALL_PLATFORM_X86_64_XEN: + break; + + case GRUB_INSTALL_PLATFORM_I386_QEMU: + case GRUB_INSTALL_PLATFORM_I386_COREBOOT: + case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT: + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: + disk_module = xstrdup ("native"); + break; + + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + break; + } + + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_PC: + case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + if (!install_device) + grub_util_error ("%s", _("install device isn't specified")); + break; + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + if (install_device) + is_prep = 1; + break; + case GRUB_INSTALL_PLATFORM_MIPS_ARC: + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + break; + case GRUB_INSTALL_PLATFORM_I386_EFI: + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + case GRUB_INSTALL_PLATFORM_I386_IEEE1275: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + case GRUB_INSTALL_PLATFORM_I386_QEMU: + case GRUB_INSTALL_PLATFORM_I386_COREBOOT: + case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT: + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_I386_XEN: + case GRUB_INSTALL_PLATFORM_X86_64_XEN: + free (install_device); + install_device = NULL; + break; + + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + break; + } + + if (!bootdir) + bootdir = grub_util_path_concat (3, "/", rootdir, GRUB_BOOT_DIR_NAME); + + { + char * t = grub_util_path_concat (2, bootdir, GRUB_DIR_NAME); + grub_install_mkdir_p (t); + grubdir = grub_canonicalize_file_name (t); + if (!grubdir) + grub_util_error (_("failed to get canonical path of `%s'"), t); + free (t); + } + device_map = grub_util_path_concat (2, grubdir, "device.map"); + + if (recheck) + grub_util_unlink (device_map); + + device_map_check_duplicates (device_map); + grub_util_biosdisk_init (device_map); + + /* Initialize all modules. */ + grub_init_all (); + grub_gcry_init_all (); + grub_hostfs_init (); + grub_host_init (); + + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_EFI: + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + is_efi = 1; + break; + default: + is_efi = 0; + break; + + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + break; + } + + /* Find the EFI System Partition. */ + + if (is_efi) + { + grub_fs_t fs; + free (install_device); + install_device = NULL; + if (!efidir) + { + char *d = grub_util_path_concat (2, bootdir, "efi"); + char *dr = NULL; + if (!grub_util_is_directory (d)) + { + free (d); + d = grub_util_path_concat (2, bootdir, "EFI"); + } + /* + The EFI System Partition may have been given directly using + --root-directory. + */ + if (!grub_util_is_directory (d) + && rootdir && grub_strcmp (rootdir, "/") != 0) + { + free (d); + d = xstrdup (rootdir); + } + if (grub_util_is_directory (d)) + dr = grub_make_system_path_relative_to_its_root (d); + /* Is it a mount point? */ + if (dr && dr[0] == '\0') + efidir = d; + else + free (d); + free (dr); + } + if (!efidir) + grub_util_error ("%s", _("cannot find EFI directory")); + efidir_device_names = grub_guess_root_devices (efidir); + if (!efidir_device_names || !efidir_device_names[0]) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), + efidir); + install_device = efidir_device_names[0]; + + for (curdev = efidir_device_names; *curdev; curdev++) + grub_util_pull_device (*curdev); + + efidir_grub_devname = grub_util_get_grub_dev (efidir_device_names[0]); + if (!efidir_grub_devname) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + efidir_device_names[0]); + + efidir_grub_dev = grub_device_open (efidir_grub_devname); + if (! efidir_grub_dev) + grub_util_error ("%s", grub_errmsg); + + fs = grub_fs_probe (efidir_grub_dev); + if (! fs) + grub_util_error ("%s", grub_errmsg); + + efidir_is_mac = 0; + + if (grub_strcmp (fs->name, "hfs") == 0 + || grub_strcmp (fs->name, "hfsplus") == 0) + efidir_is_mac = 1; + + if (!efidir_is_mac && grub_strcmp (fs->name, "fat") != 0) + grub_util_error (_("%s doesn't look like an EFI partition"), efidir); + + /* The EFI specification requires that an EFI System Partition must + contain an "EFI" subdirectory, and that OS loaders are stored in + subdirectories below EFI. Vendors are expected to pick names that do + not collide with other vendors. To minimise collisions, we use the + name of our distributor if possible. + */ + char *t; + efi_distributor = bootloader_id; + if (removable) + { + /* The specification makes stricter requirements of removable + devices, in order that only one image can be automatically loaded + from them. The image must always reside under /EFI/BOOT, and it + must have a specific file name depending on the architecture. + */ + efi_distributor = "BOOT"; + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_EFI: + efi_file = "BOOTIA32.EFI"; + break; + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + efi_file = "BOOTX64.EFI"; + break; + case GRUB_INSTALL_PLATFORM_IA64_EFI: + efi_file = "BOOTIA64.EFI"; + break; + case GRUB_INSTALL_PLATFORM_ARM_EFI: + efi_file = "BOOTARM.EFI"; + break; + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + efi_file = "BOOTAA64.EFI"; + break; + default: + grub_util_error ("%s", _("You've found a bug")); + break; + } + } + else + { + /* It is convenient for each architecture to have a different + efi_file, so that different versions can be installed in parallel. + */ + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_EFI: + efi_file = "grubia32.efi"; + break; + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + efi_file = "grubx64.efi"; + break; + case GRUB_INSTALL_PLATFORM_IA64_EFI: + efi_file = "grubia64.efi"; + break; + case GRUB_INSTALL_PLATFORM_ARM_EFI: + efi_file = "grubarm.efi"; + break; + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + efi_file = "grubaa64.efi"; + break; + default: + efi_file = "grub.efi"; + break; + } + } + t = grub_util_path_concat (3, efidir, "EFI", efi_distributor); + free (efidir); + efidir = t; + grub_install_mkdir_p (efidir); + } + + if (platform == GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275) + { + int is_guess = 0; + if (!macppcdir) + { + char *d; + + is_guess = 1; + d = grub_util_path_concat (2, bootdir, "macppc"); + if (!grub_util_is_directory (d)) + { + free (d); + d = grub_util_path_concat (2, bootdir, "efi"); + } + /* Find the Mac HFS(+) System Partition. */ + if (!grub_util_is_directory (d)) + { + free (d); + d = grub_util_path_concat (2, bootdir, "EFI"); + } + if (!grub_util_is_directory (d)) + { + free (d); + d = 0; + } + if (d) + macppcdir = d; + } + if (macppcdir) + { + char **macppcdir_device_names = NULL; + grub_device_t macppcdir_grub_dev = NULL; + char *macppcdir_grub_devname; + grub_fs_t fs; + + macppcdir_device_names = grub_guess_root_devices (macppcdir); + if (!macppcdir_device_names || !macppcdir_device_names[0]) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), + macppcdir); + + for (curdev = macppcdir_device_names; *curdev; curdev++) + grub_util_pull_device (*curdev); + + macppcdir_grub_devname = grub_util_get_grub_dev (macppcdir_device_names[0]); + if (!macppcdir_grub_devname) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + macppcdir_device_names[0]); + + macppcdir_grub_dev = grub_device_open (macppcdir_grub_devname); + if (! macppcdir_grub_dev) + grub_util_error ("%s", grub_errmsg); + + fs = grub_fs_probe (macppcdir_grub_dev); + if (! fs) + grub_util_error ("%s", grub_errmsg); + + if (grub_strcmp (fs->name, "hfs") != 0 + && grub_strcmp (fs->name, "hfsplus") != 0 + && !is_guess) + grub_util_error (_("filesystem on %s is neither HFS nor HFS+"), + macppcdir); + if (grub_strcmp (fs->name, "hfs") == 0 + || grub_strcmp (fs->name, "hfsplus") == 0) + { + install_device = macppcdir_device_names[0]; + is_prep = 0; + } + } + } + + grub_install_copy_files (grub_install_source_directory, + grubdir, platform); + + char *envfile = grub_util_path_concat (2, grubdir, "grubenv"); + if (!grub_util_is_regular (envfile)) + grub_util_create_envblk_file (envfile); + + size_t ndev = 0; + + /* Write device to a variable so we don't have to traverse /dev every time. */ + grub_devices = grub_guess_root_devices (grubdir); + if (!grub_devices || !grub_devices[0]) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), + grubdir); + + for (curdev = grub_devices; *curdev; curdev++) + { + grub_util_pull_device (*curdev); + ndev++; + } + + grub_drives = xmalloc (sizeof (grub_drives[0]) * (ndev + 1)); + + for (curdev = grub_devices, curdrive = grub_drives; *curdev; curdev++, + curdrive++) + { + *curdrive = grub_util_get_grub_dev (*curdev); + if (! *curdrive) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + *curdev); + } + *curdrive = 0; + + grub_dev = grub_device_open (grub_drives[0]); + if (! grub_dev) + grub_util_error ("%s", grub_errmsg); + + grub_fs = grub_fs_probe (grub_dev); + if (! grub_fs) + grub_util_error ("%s", grub_errmsg); + + grub_install_push_module (grub_fs->name); + + if (grub_dev->disk) + probe_mods (grub_dev->disk); + + for (curdrive = grub_drives + 1; *curdrive; curdrive++) + { + grub_device_t dev = grub_device_open (*curdrive); + if (!dev) + continue; + if (dev->disk) + probe_mods (dev->disk); + grub_device_close (dev); + } + + if (!config.is_cryptodisk_enabled && have_cryptodisk) + grub_util_error (_("attempt to install to encrypted disk without cryptodisk enabled. " + "Set `%s' in file `%s'"), "GRUB_ENABLE_CRYPTODISK=y", + grub_util_get_config_filename ()); + + if (disk_module && grub_strcmp (disk_module, "ata") == 0) + grub_install_push_module ("pata"); + else if (disk_module && grub_strcmp (disk_module, "native") == 0) + { + grub_install_push_module ("pata"); + grub_install_push_module ("ahci"); + grub_install_push_module ("ohci"); + grub_install_push_module ("uhci"); + grub_install_push_module ("ehci"); + grub_install_push_module ("usbms"); + } + else if (disk_module && disk_module[0]) + grub_install_push_module (disk_module); + + relative_grubdir = grub_make_system_path_relative_to_its_root (grubdir); + if (relative_grubdir[0] == '\0') + { + free (relative_grubdir); + relative_grubdir = xstrdup ("/"); + } + + char *platname = grub_install_get_platform_name (platform); + char *platdir; + { + char *t = grub_util_path_concat (2, grubdir, + platname); + platdir = grub_canonicalize_file_name (t); + if (!platdir) + grub_util_error (_("failed to get canonical path of `%s'"), + t); + free (t); + } + load_cfg = grub_util_path_concat (2, platdir, + "load.cfg"); + + grub_util_unlink (load_cfg); + + if (debug_image && debug_image[0]) + { + load_cfg_f = grub_util_fopen (load_cfg, "wb"); + have_load_cfg = 1; + fprintf (load_cfg_f, "set debug='%s'\n", + debug_image); + } + char *prefix_drive = NULL; + char *install_drive = NULL; + + if (install_device) + { + if (install_device[0] == '(' + && install_device[grub_strlen (install_device) - 1] == ')') + { + size_t len = grub_strlen (install_device) - 2; + install_drive = xmalloc (len + 1); + memcpy (install_drive, install_device + 1, len); + install_drive[len] = '\0'; + } + else + { + grub_util_pull_device (install_device); + install_drive = grub_util_get_grub_dev (install_device); + if (!install_drive) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + install_device); + } + } + + if (!have_abstractions) + { + if ((disk_module && grub_strcmp (disk_module, "biosdisk") != 0) + || grub_drives[1] + || (!install_drive + && platform != GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275) + || (install_drive && !is_same_disk (grub_drives[0], install_drive)) + || !have_bootdev (platform)) + { + char *uuid = NULL; + /* generic method (used on coreboot and ata mod). */ + if (!force_file_id && grub_fs->uuid && grub_fs->uuid (grub_dev, + &uuid)) + { + grub_print_error (); + grub_errno = 0; + uuid = NULL; + } + + if (!load_cfg_f) + load_cfg_f = grub_util_fopen (load_cfg, "wb"); + have_load_cfg = 1; + if (uuid) + { + fprintf (load_cfg_f, "search.fs_uuid %s root ", + uuid); + grub_install_push_module ("search_fs_uuid"); + } + else + { + char *rndstr = get_rndstr (); + char *fl = grub_util_path_concat (3, grubdir, + "uuid", rndstr); + char *fldir = grub_util_path_concat (2, grubdir, + "uuid"); + char *relfl; + FILE *flf; + grub_install_mkdir_p (fldir); + flf = grub_util_fopen (fl, "w"); + if (!flf) + grub_util_error (_("Can't create file: %s"), strerror (errno)); + fclose (flf); + relfl = grub_make_system_path_relative_to_its_root (fl); + fprintf (load_cfg_f, "search.file %s root ", + relfl); + grub_install_push_module ("search_fs_file"); + } + for (curdev = grub_devices, curdrive = grub_drives; *curdev; curdev++, + curdrive++) + { + const char *map; + char *g = NULL; + grub_device_t dev; + if (curdrive == grub_drives) + dev = grub_dev; + else + dev = grub_device_open (*curdrive); + if (!dev) + continue; + + if (dev->disk->dev->id != GRUB_DISK_DEVICE_HOSTDISK_ID) + { + grub_util_fprint_full_disk_name (load_cfg_f, + dev->disk->name, + dev); + fprintf (load_cfg_f, " "); + if (dev != grub_dev) + grub_device_close (dev); + continue; + } + + map = grub_util_biosdisk_get_compatibility_hint (dev->disk); + + if (map) + { + grub_util_fprint_full_disk_name (load_cfg_f, map, dev); + fprintf (load_cfg_f, " "); + } + + + if (disk_module && disk_module[0] + && grub_strcmp (disk_module, "biosdisk") != 0) + g = grub_util_guess_baremetal_drive (*curdev); + else + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_PC: + g = grub_util_guess_bios_drive (*curdev); + break; + case GRUB_INSTALL_PLATFORM_I386_EFI: + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + g = grub_util_guess_efi_drive (*curdev); + break; + case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + case GRUB_INSTALL_PLATFORM_I386_IEEE1275: + { + const char * ofpath = grub_util_devname_to_ofpath (*curdev); + g = xasprintf ("ieee1275/%s", ofpath); + break; + } + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + case GRUB_INSTALL_PLATFORM_I386_QEMU: + case GRUB_INSTALL_PLATFORM_I386_COREBOOT: + case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: + g = grub_util_guess_baremetal_drive (*curdev); + break; + case GRUB_INSTALL_PLATFORM_MIPS_ARC: + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + case GRUB_INSTALL_PLATFORM_I386_XEN: + case GRUB_INSTALL_PLATFORM_X86_64_XEN: + grub_util_warn ("%s", _("no hints available for your platform. Expect reduced performance")); + break; + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + break; + } + if (g) + { + grub_util_fprint_full_disk_name (load_cfg_f, g, dev); + fprintf (load_cfg_f, " "); + } + if (dev != grub_dev) + grub_device_close (dev); + } + fprintf (load_cfg_f, "\n"); + char *escaped_relpath = escape (relative_grubdir); + fprintf (load_cfg_f, "set prefix=($root)'%s'\n", + escaped_relpath); + } + else + { + /* We need to hardcode the partition number in the core image's prefix. */ + char *p; + for (p = grub_drives[0]; *p; ) + { + if (*p == '\\' && p[1]) + { + p += 2; + continue; + } + if (*p == ',' || *p == '\0') + break; + p++; + } + prefix_drive = xasprintf ("(%s)", p); + } + } + else + { + if (config.is_cryptodisk_enabled) + { + if (grub_dev->disk) + probe_cryptodisk_uuid (grub_dev->disk); + + for (curdrive = grub_drives + 1; *curdrive; curdrive++) + { + grub_device_t dev = grub_device_open (*curdrive); + if (!dev) + continue; + if (dev->disk) + probe_cryptodisk_uuid (dev->disk); + grub_device_close (dev); + } + } + prefix_drive = xasprintf ("(%s)", grub_drives[0]); + } + + char mkimage_target[200]; + const char *core_name = NULL; + + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_EFI: + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + core_name = "core.efi"; + snprintf (mkimage_target, sizeof (mkimage_target), + "%s-%s", + grub_install_get_platform_cpu (platform), + grub_install_get_platform_platform (platform)); + break; + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: + core_name = "core.elf"; + snprintf (mkimage_target, sizeof (mkimage_target), + "%s-%s-elf", + grub_install_get_platform_cpu (platform), + grub_install_get_platform_platform (platform)); + break; + + case GRUB_INSTALL_PLATFORM_I386_COREBOOT: + case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT: + case GRUB_INSTALL_PLATFORM_I386_IEEE1275: + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + case GRUB_INSTALL_PLATFORM_I386_XEN: + case GRUB_INSTALL_PLATFORM_X86_64_XEN: + core_name = "core.elf"; + snprintf (mkimage_target, sizeof (mkimage_target), + "%s-%s", + grub_install_get_platform_cpu (platform), + grub_install_get_platform_platform (platform)); + break; + + + case GRUB_INSTALL_PLATFORM_I386_PC: + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + case GRUB_INSTALL_PLATFORM_MIPS_ARC: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + case GRUB_INSTALL_PLATFORM_I386_QEMU: + snprintf (mkimage_target, sizeof (mkimage_target), + "%s-%s", + grub_install_get_platform_cpu (platform), + grub_install_get_platform_platform (platform)); + core_name = "core.img"; + break; + case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + strcpy (mkimage_target, "sparc64-ieee1275-raw"); + core_name = "core.img"; + break; + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + break; + } + + if (!core_name) + grub_util_error ("%s", _("You've found a bug")); + + if (load_cfg_f) + fclose (load_cfg_f); + + char *imgfile = grub_util_path_concat (2, platdir, + core_name); + char *prefix = xasprintf ("%s%s", prefix_drive ? : "", + relative_grubdir); + grub_install_make_image_wrap (/* source dir */ grub_install_source_directory, + /*prefix */ prefix, + /* output */ imgfile, + /* memdisk */ NULL, + have_load_cfg ? load_cfg : NULL, + /* image target */ mkimage_target, 0); + /* Backward-compatibility kludges. */ + switch (platform) + { + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + { + char *dst = grub_util_path_concat (2, bootdir, "grub.elf"); + grub_install_copy_file (imgfile, dst, 1); + free (dst); + } + break; + + case GRUB_INSTALL_PLATFORM_I386_IEEE1275: + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + { + char *dst = grub_util_path_concat (2, grubdir, "grub"); + grub_install_copy_file (imgfile, dst, 1); + free (dst); + } + break; + + case GRUB_INSTALL_PLATFORM_I386_EFI: + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + { + char *dst = grub_util_path_concat (2, platdir, "grub.efi"); + grub_install_make_image_wrap (/* source dir */ grub_install_source_directory, + /* prefix */ "", + /* output */ dst, + /* memdisk */ NULL, + have_load_cfg ? load_cfg : NULL, + /* image target */ mkimage_target, 0); + } + break; + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_I386_COREBOOT: + case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT: + case GRUB_INSTALL_PLATFORM_I386_PC: + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + case GRUB_INSTALL_PLATFORM_MIPS_ARC: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + case GRUB_INSTALL_PLATFORM_I386_QEMU: + case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + case GRUB_INSTALL_PLATFORM_I386_XEN: + case GRUB_INSTALL_PLATFORM_X86_64_XEN: + break; + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + break; + } + + /* Perform the platform-dependent install */ + + switch (platform) + { + case GRUB_INSTALL_PLATFORM_I386_PC: + { + char *boot_img_src = grub_util_path_concat (2, + grub_install_source_directory, + "boot.img"); + char *boot_img = grub_util_path_concat (2, platdir, + "boot.img"); + grub_install_copy_file (boot_img_src, boot_img, 1); + + grub_util_info ("%sgrub-bios-setup %s %s %s %s %s --directory='%s' --device-map='%s' '%s'", + /* TRANSLATORS: This is a prefix in the log to indicate that usually + a command would be executed but due to an option was skipped. */ + install_bootsector ? "" : _("NOT RUNNING: "), + allow_floppy ? "--allow-floppy " : "", + verbosity ? "--verbose " : "", + force ? "--force " : "", + !fs_probe ? "--skip-fs-probe" : "", + !add_rs_codes ? "--no-rs-codes" : "", + platdir, + device_map, + install_device); + + /* Now perform the installation. */ + if (install_bootsector) + grub_util_bios_setup (platdir, "boot.img", "core.img", + install_drive, force, + fs_probe, allow_floppy, add_rs_codes); + break; + } + case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + { + char *boot_img_src = grub_util_path_concat (2, + grub_install_source_directory, + "boot.img"); + char *boot_img = grub_util_path_concat (2, platdir, + "boot.img"); + grub_install_copy_file (boot_img_src, boot_img, 1); + + grub_util_info ("%sgrub-sparc64-setup %s %s %s %s --directory='%s' --device-map='%s' '%s'", + install_bootsector ? "" : "NOT RUNNING: ", + allow_floppy ? "--allow-floppy " : "", + verbosity ? "--verbose " : "", + force ? "--force " : "", + !fs_probe ? "--skip-fs-probe" : "", + platdir, + device_map, + install_drive); + + /* Now perform the installation. */ + if (install_bootsector) + grub_util_sparc_setup (platdir, "boot.img", "core.img", + install_drive, force, + fs_probe, allow_floppy, + 0 /* unused */ ); + break; + } + + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: + if (macppcdir) + { + char *core_services = grub_util_path_concat (4, macppcdir, + "System", "Library", + "CoreServices"); + char *mach_kernel = grub_util_path_concat (2, macppcdir, + "mach_kernel"); + char *grub_elf, *bootx; + FILE *f; + grub_device_t ins_dev; + char *grub_chrp = grub_util_path_concat (2, + grub_install_source_directory, + "grub.chrp"); + + grub_install_mkdir_p (core_services); + + bootx = grub_util_path_concat (2, core_services, "BootX"); + grub_install_copy_file (grub_chrp, bootx, 1); + + grub_elf = grub_util_path_concat (2, core_services, "grub.elf"); + grub_install_copy_file (imgfile, grub_elf, 1); + + f = grub_util_fopen (mach_kernel, "a+"); + if (!f) + grub_util_error (_("Can't create file: %s"), strerror (errno)); + fclose (f); + + fill_core_services (core_services); + + ins_dev = grub_device_open (install_drive); + + bless (ins_dev, core_services, 0); + + if (update_nvram) + { + const char *dev; + int partno; + + partno = ins_dev->disk->partition + ? ins_dev->disk->partition->number + 1 : 0; + dev = grub_util_get_os_disk (install_device); + grub_install_register_ieee1275 (0, dev, partno, + "\\\\BootX"); + } + grub_device_close (ins_dev); + free (grub_elf); + free (bootx); + free (mach_kernel); + free (grub_chrp); + break; + } + /* If a install device is defined, copy the core.elf to PReP partition. */ + if (is_prep && install_device && install_device[0]) + { + grub_device_t ins_dev; + ins_dev = grub_device_open (install_drive); + if (!ins_dev || !is_prep_partition (ins_dev)) + { + grub_util_error ("%s", _("the chosen partition is not a PReP partition")); + } + if (is_prep_empty (ins_dev)) + { + if (write_to_disk (ins_dev, imgfile)) + grub_util_error ("%s", _("failed to copy Grub to the PReP partition")); + } + else + { + char *s = xasprintf ("dd if=/dev/zero of=%s", install_device); + grub_util_error (_("the PReP partition is not empty. If you are sure you want to use it, run dd to clear it: `%s'"), + s); + } + grub_device_close (ins_dev); + if (update_nvram) + grub_install_register_ieee1275 (1, grub_util_get_os_disk (install_device), + 0, NULL); + break; + } + /* fallthrough. */ + case GRUB_INSTALL_PLATFORM_I386_IEEE1275: + if (update_nvram) + { + const char *dev; + char *relpath; + int partno; + relpath = grub_make_system_path_relative_to_its_root (imgfile); + partno = grub_dev->disk->partition + ? grub_dev->disk->partition->number + 1 : 0; + dev = grub_util_get_os_disk (grub_devices[0]); + grub_install_register_ieee1275 (0, dev, + partno, relpath); + } + break; + case GRUB_INSTALL_PLATFORM_MIPS_ARC: + grub_install_sgi_setup (install_device, imgfile, "grub"); + break; + + case GRUB_INSTALL_PLATFORM_I386_EFI: + if (!efidir_is_mac) + { + char *dst = grub_util_path_concat (2, efidir, "grub.efi"); + /* For old macs. Suggested by Peter Jones. */ + grub_install_copy_file (imgfile, dst, 1); + free (dst); + } + /* Fallthrough. */ + case GRUB_INSTALL_PLATFORM_X86_64_EFI: + if (efidir_is_mac) + { + char *boot_efi; + char *core_services = grub_util_path_concat (4, efidir, + "System", "Library", + "CoreServices"); + char *mach_kernel = grub_util_path_concat (2, efidir, + "mach_kernel"); + FILE *f; + grub_device_t ins_dev; + + grub_install_mkdir_p (core_services); + + boot_efi = grub_util_path_concat (2, core_services, "boot.efi"); + grub_install_copy_file (imgfile, boot_efi, 1); + + f = grub_util_fopen (mach_kernel, "r+"); + if (!f) + grub_util_error (_("Can't create file: %s"), strerror (errno)); + fclose (f); + + fill_core_services(core_services); + + ins_dev = grub_device_open (install_drive); + + bless (ins_dev, boot_efi, 1); + if (!removable && update_nvram) + { + /* Try to make this image bootable using the EFI Boot Manager, if available. */ + grub_install_register_efi (efidir_grub_dev, + "\\System\\Library\\CoreServices", + efi_distributor); + } + + grub_device_close (ins_dev); + free (boot_efi); + free (mach_kernel); + break; + } + /* FALLTHROUGH */ + case GRUB_INSTALL_PLATFORM_ARM_EFI: + case GRUB_INSTALL_PLATFORM_ARM64_EFI: + case GRUB_INSTALL_PLATFORM_IA64_EFI: + { + char *dst = grub_util_path_concat (2, efidir, efi_file); + grub_install_copy_file (imgfile, dst, 1); + free (dst); + } + if (!removable && update_nvram) + { + char * efifile_path; + char * part; + + /* Try to make this image bootable using the EFI Boot Manager, if available. */ + if (!efi_distributor || efi_distributor[0] == '\0') + grub_util_error ("%s", _("EFI bootloader id isn't specified.")); + efifile_path = xasprintf ("\\EFI\\%s\\%s", + efi_distributor, + efi_file); + part = (efidir_grub_dev->disk->partition + ? grub_partition_get_name (efidir_grub_dev->disk->partition) + : 0); + grub_util_info ("Registering with EFI: distributor = `%s'," + " path = `%s', ESP at %s%s%s", + efi_distributor, efifile_path, + efidir_grub_dev->disk->name, + (part ? ",": ""), (part ? : "")); + grub_free (part); + grub_install_register_efi (efidir_grub_dev, + efifile_path, efi_distributor); + } + break; + + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_I386_COREBOOT: + case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT: + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + case GRUB_INSTALL_PLATFORM_I386_QEMU: + case GRUB_INSTALL_PLATFORM_I386_XEN: + case GRUB_INSTALL_PLATFORM_X86_64_XEN: + grub_util_warn ("%s", + _("WARNING: no platform-specific install was performed")); + break; + /* pacify warning. */ + case GRUB_INSTALL_PLATFORM_MAX: + break; + } + + fprintf (stderr, "%s\n", _("Installation finished. No error reported.")); + + /* Free resources. */ + grub_gcry_fini_all (); + grub_fini_all (); + + return 0; +} diff --git a/util/grub-kbdcomp.in b/util/grub-kbdcomp.in new file mode 100644 index 000000000..a15ec24e5 --- /dev/null +++ b/util/grub-kbdcomp.in @@ -0,0 +1,77 @@ +#!/bin/sh + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +bindir="@bindir@" +datarootdir="@datarootdir@" +datadir="@datadir@" +if [ "x$pkgdatadir" = x ]; then + pkgdatadir="${datadir}/@PACKAGE@" +fi + +grub_mklayout="${bindir}/@grub_mklayout@" + +ckbcomp_options="" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "${pkgdatadir}/grub-mkconfig_lib" + +self=`basename $0` + +usage () { + gettext_printf "Usage: %s -o OUTPUT CKBMAP_ARGUMENTS...\n" "$self" + gettext "Make GRUB keyboard layout file."; echo + echo + print_option_help "-h, --help" "$(gettext "print this message and exit")" + print_option_help "-V, --version" "$(gettext "print the version information and exit")" + print_option_help "-o, --output=$(gettext FILE)" "$(gettext "save output in FILE [required]")" + echo + gettext_printf "%s generates a keyboard layout for GRUB using ckbcomp\n" "$self" + echo + gettext "Report bugs to ."; echo +} + +argument () { + opt=$1 + shift + + if test $# -eq 0; then + gettext_printf "%s: option requires an argument -- \`%s'\n" "$0" "$opt" 1>&2 + exit 1 + fi + echo $1 +} + +output= + +while test $# -gt 0 +do + option=$1 + shift + case "$option" in + -h | --help) + usage + exit 0 ;; + -V | --version) + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" + exit 0 ;; + -o | --output) + output=`argument $option "$@"`; shift ;; + --output=*) + output=`echo "$option" | sed 's/--output=//'` ;; + *) + ckbcomp_options="$ckbcomp_options $option";; + esac +done + +if [ "x${output}" = x ] ; then + gettext "output file must be specified" >&2 + echo >&2 + usage + exit 1 +fi + +ckbcomp $ckbcomp_options | "$grub_mklayout" -o "${output}" + diff --git a/util/grub-macbless.c b/util/grub-macbless.c new file mode 100644 index 000000000..e9b15a053 --- /dev/null +++ b/util/grub-macbless.c @@ -0,0 +1,205 @@ +/* grub-probe.c - probe device information for a given path */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +static void +bless (const char *path, int x86) +{ + char *drive_name = NULL; + char **devices; + char *grub_path = NULL; + char *filebuf_via_grub = NULL, *filebuf_via_sys = NULL; + grub_device_t dev = NULL; + grub_err_t err; + struct stat st; + + grub_path = grub_canonicalize_file_name (path); + + if (stat (grub_path, &st) < 0) + grub_util_error (N_("cannot stat `%s': %s"), + grub_path, strerror (errno)); + + devices = grub_guess_root_devices (grub_path); + + if (! devices || !devices[0]) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), path); + + drive_name = grub_util_get_grub_dev (devices[0]); + if (! drive_name) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + devices[0]); + + grub_util_info ("opening %s", drive_name); + dev = grub_device_open (drive_name); + if (! dev) + grub_util_error ("%s", grub_errmsg); + + err = grub_mac_bless_inode (dev, st.st_ino, S_ISDIR (st.st_mode), x86); + if (err) + grub_util_error ("%s", grub_errmsg); + free (grub_path); + free (filebuf_via_grub); + free (filebuf_via_sys); + free (drive_name); + free (devices); + grub_device_close (dev); +} + +static struct argp_option options[] = { + {"x86", 'x', 0, 0, + N_("bless for x86-based macs"), 0}, + {"ppc", 'p', 0, 0, + N_("bless for ppc-based macs"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +struct arguments +{ + char *arg; + int ppc; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'v': + verbosity++; + break; + + case 'x': + arguments->ppc = 0; + break; + + case 'p': + arguments->ppc = 1; + break; + + case ARGP_KEY_NO_ARGS: + fprintf (stderr, "%s", _("No path or device is specified.\n")); + argp_usage (state); + break; + + case ARGP_KEY_ARG: + if (arguments->arg) + { + fprintf (stderr, _("Unknown extra argument `%s'."), arg); + fprintf (stderr, "\n"); + return ARGP_ERR_UNKNOWN; + } + arguments->arg = xstrdup (arg); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("--ppc PATH|--x86 FILE"), + N_("Mac-style bless on HFS or HFS+"), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + memset (&arguments, 0, sizeof (struct arguments)); + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (verbosity > 1) + grub_env_set ("debug", "all"); + + /* Initialize the emulated biosdisk driver. */ + grub_util_biosdisk_init (NULL); + + /* Initialize all modules. */ + grub_init_all (); + grub_gcry_init_all (); + + grub_lvm_fini (); + grub_mdraid09_fini (); + grub_mdraid1x_fini (); + grub_diskfilter_fini (); + grub_diskfilter_init (); + grub_mdraid09_init (); + grub_mdraid1x_init (); + grub_lvm_init (); + + /* Do it. */ + bless (arguments.arg, !arguments.ppc); + + /* Free resources. */ + grub_gcry_fini_all (); + grub_fini_all (); + grub_util_biosdisk_fini (); + + return 0; +} diff --git a/util/grub-macho2img.c b/util/grub-macho2img.c new file mode 100644 index 000000000..6dfb5fcbe --- /dev/null +++ b/util/grub-macho2img.c @@ -0,0 +1,120 @@ +/* macho2img.c - tool to convert Mach-O to raw imagw. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include + +/* Please don't internationalise this file. It's pointless. */ + +/* XXX: this file assumes particular Mach-O layout and does no checks. */ +/* However as build system ensures correct usage of this tool this + shouldn't be a problem. */ + +int +main (int argc, char **argv) +{ + FILE *in, *out; + int do_bss = 0; + char *buf; + int bufsize; + struct grub_macho_header32 *head; + struct grub_macho_segment32 *curcmd; + unsigned i; + unsigned bssstart = 0; + unsigned bssend = 0; + + if (argc && strcmp (argv[1], "--bss") == 0) + do_bss = 1; + if (argc < 2 + do_bss) + { + printf ("Usage: %s [--bss] filename.exec filename.img\n" + "Convert Mach-O into raw image\n", argv[0]); + return 0; + } + in = fopen (argv[1 + do_bss], "rb"); + if (! in) + { + printf ("Couldn't open %s\n", argv[1 + do_bss]); + return 1; + } + out = fopen (argv[2 + do_bss], "wb"); + if (! out) + { + fclose (in); + printf ("Couldn't open %s\n", argv[2 + do_bss]); + return 2; + } + fseek (in, 0, SEEK_END); + bufsize = ftell (in); + fseek (in, 0, SEEK_SET); + buf = malloc (bufsize); + if (! buf) + { + fclose (in); + fclose (out); + printf ("Couldn't allocate buffer\n"); + return 3; + } + fread (buf, 1, bufsize, in); + head = (struct grub_macho_header32 *) buf; + if (grub_le_to_cpu32 (head->magic) != GRUB_MACHO_MAGIC32) + { + fclose (in); + fclose (out); + free (buf); + printf ("Invalid Mach-O file\n"); + return 4; + } + curcmd = (struct grub_macho_segment32 *) (buf + sizeof (*head)); + for (i = 0; i < grub_le_to_cpu32 (head->ncmds); i++, + curcmd = (struct grub_macho_segment32 *) + (((char *) curcmd) + curcmd->cmdsize)) + { + if (curcmd->cmd != GRUB_MACHO_CMD_SEGMENT32) + continue; + fwrite (buf + grub_le_to_cpu32 (curcmd->fileoff), 1, + grub_le_to_cpu32 (curcmd->filesize), out); + if (grub_le_to_cpu32 (curcmd->vmsize) + > grub_le_to_cpu32 (curcmd->filesize)) + { + bssstart = grub_le_to_cpu32 (curcmd->vmaddr) + + grub_le_to_cpu32 (curcmd->filesize) ; + bssend = grub_le_to_cpu32 (curcmd->vmaddr) + + grub_le_to_cpu32 (curcmd->vmsize) ; + } + } + if (do_bss) + { + grub_uint32_t tmp; + fseek (out, 0x5c, SEEK_SET); + tmp = grub_cpu_to_le32 (bssstart); + fwrite (&tmp, 4, 1, out); + tmp = grub_cpu_to_le32 (bssend); + fwrite (&tmp, 4, 1, out); + } + fclose (in); + fclose (out); + printf("macho2img complete\n"); + return 0; +} diff --git a/util/grub-menulst2cfg.c b/util/grub-menulst2cfg.c new file mode 100644 index 000000000..a39f86939 --- /dev/null +++ b/util/grub-menulst2cfg.c @@ -0,0 +1,135 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +int +main (int argc, char **argv) +{ + FILE *in, *out; + char *entryname = NULL; + char *buf = NULL; + size_t bufsize = 0; + char *suffix = xstrdup (""); + int suffixlen = 0; + const char *out_fname = 0; + + grub_util_host_init (&argc, &argv); + + if (argc >= 2 && argv[1][0] == '-') + { + fprintf (stdout, _("Usage: %s [INFILE [OUTFILE]]\n"), argv[0]); + return 0; + } + + if (argc >= 2) + { + in = grub_util_fopen (argv[1], "r"); + if (!in) + { + fprintf (stderr, _("cannot open `%s': %s"), + argv[1], strerror (errno)); + return 1; + } + } + else + in = stdin; + + if (argc >= 3) + { + out = grub_util_fopen (argv[2], "w"); + if (!out) + { + if (in != stdin) + fclose (in); + fprintf (stderr, _("cannot open `%s': %s"), + argv[2], strerror (errno)); + return 1; + } + out_fname = argv[2]; + } + else + out = stdout; + + while (1) + { + char *parsed; + + if (getline (&buf, &bufsize, in) < 0) + break; + + { + char *oldname = NULL; + char *newsuffix; + + oldname = entryname; + parsed = grub_legacy_parse (buf, &entryname, &newsuffix); + if (newsuffix) + { + suffixlen += strlen (newsuffix); + suffix = xrealloc (suffix, suffixlen + 1); + strcat (suffix, newsuffix); + } + if (oldname != entryname && oldname) + fprintf (out, "}\n\n"); + if (oldname != entryname) + { + char *escaped = grub_legacy_escape (entryname, strlen (entryname)); + fprintf (out, "menuentry \'%s\' {\n", escaped); + free (escaped); + free (oldname); + } + } + + if (parsed) + fprintf (out, "%s%s", entryname ? " " : "", parsed); + free (parsed); + parsed = NULL; + } + + if (entryname) + fprintf (out, "}\n\n"); + + if (fwrite (suffix, 1, suffixlen, out) != suffixlen) + { + if (out_fname) + grub_util_error ("cannot write to `%s': %s", + out_fname, strerror (errno)); + else + grub_util_error ("cannot write to the stdout: %s", strerror (errno)); + } + + free (buf); + free (suffix); + free (entryname); + + if (in != stdin) + fclose (in); + if (out != stdout) + fclose (out); + + return 0; +} diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in new file mode 100644 index 000000000..f8496d28b --- /dev/null +++ b/util/grub-mkconfig.in @@ -0,0 +1,284 @@ +#! /bin/sh +set -e + +# Generate grub.cfg by inspecting /boot contents. +# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +sbindir="@sbindir@" +bindir="@bindir@" +sysconfdir="@sysconfdir@" +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +host_os=@host_os@ +datadir="@datadir@" +if [ "x$pkgdatadir" = x ]; then + pkgdatadir="${datadir}/@PACKAGE@" +fi +# export it for scripts +export pkgdatadir + +grub_cfg="" +grub_mkconfig_dir="${sysconfdir}"/grub.d + +self=`basename $0` + +grub_probe="${sbindir}/@grub_probe@" +grub_file="${bindir}/@grub_file@" +grub_editenv="${bindir}/@grub_editenv@" +grub_script_check="${bindir}/@grub_script_check@" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "${pkgdatadir}/grub-mkconfig_lib" + +# Usage: usage +# Print the usage. +usage () { + gettext_printf "Usage: %s [OPTION]\n" "$self" + gettext "Generate a grub config file"; echo + echo + print_option_help "-o, --output=$(gettext FILE)" "$(gettext "output generated config to FILE [default=stdout]")" + print_option_help "-h, --help" "$(gettext "print this message and exit")" + print_option_help "-v, --version" "$(gettext "print the version information and exit")" + echo + gettext "Report bugs to ."; echo +} + +argument () { + opt=$1 + shift + + if test $# -eq 0; then + gettext_printf "%s: option requires an argument -- \`%s'\n" "$self" "$opt" 1>&2 + exit 1 + fi + echo $1 +} + +# Check the arguments. +while test $# -gt 0 +do + option=$1 + shift + + case "$option" in + -h | --help) + usage + exit 0 ;; + -V | --version) + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" + exit 0 ;; + -o | --output) + grub_cfg=`argument $option "$@"`; shift;; + --output=*) + grub_cfg=`echo "$option" | sed 's/--output=//'` + ;; + -*) + gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2 + usage + exit 1 + ;; + # Explicitly ignore non-option arguments, for compatibility. + esac +done + +if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +fi + +if [ "$EUID" != 0 ] ; then + root=f + case "`uname 2>/dev/null`" in + CYGWIN*) + # Cygwin: Assume root if member of admin group + for g in `id -G 2>/dev/null` ; do + case $g in + 0|544) root=t ;; + esac + done ;; + esac + if [ $root != t ] ; then + gettext_printf "%s: You must run this as root\n" "$self" >&2 + exit 1 + fi +fi + +set $grub_probe dummy +if test -f "$1"; then + : +else + gettext_printf "%s: Not found.\n" "$1" 1>&2 + exit 1 +fi + +# Device containing our userland. Typically used for root= parameter. +GRUB_DEVICE="`${grub_probe} --target=device /`" +GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true + +# Device containing our /boot partition. Usually the same as GRUB_DEVICE. +GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`" +GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true + +# Filesystem for the device containing our userland. Used for stuff like +# choosing Hurd filesystem module. +GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`" + +if [ x"$GRUB_FS" = xunknown ]; then + GRUB_FS="$(stat -f --printf=%T / || echo unknown)" +fi + +if test -f ${sysconfdir}/default/grub ; then + . ${sysconfdir}/default/grub +fi + +# XXX: should this be deprecated at some point? +if [ "x${GRUB_TERMINAL}" != "x" ] ; then + GRUB_TERMINAL_INPUT="${GRUB_TERMINAL}" + GRUB_TERMINAL_OUTPUT="${GRUB_TERMINAL}" +fi + +termoutdefault=0 +if [ "x${GRUB_TERMINAL_OUTPUT}" = "x" ]; then + GRUB_TERMINAL_OUTPUT=gfxterm; + termoutdefault=1; +fi + +for x in ${GRUB_TERMINAL_OUTPUT}; do + case "x${x}" in + xgfxterm) ;; + xconsole | xserial | xofconsole | xvga_text) + # make sure all our children behave in conformance with ascii.. + export LANG=C;; + *) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1 ;; + esac +done + +GRUB_ACTUAL_DEFAULT="$GRUB_DEFAULT" + +if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi + + +# These are defined in this script, export them here so that user can +# override them. +export GRUB_DEVICE \ + GRUB_DEVICE_UUID \ + GRUB_DEVICE_BOOT \ + GRUB_DEVICE_BOOT_UUID \ + GRUB_FS \ + GRUB_FONT \ + GRUB_PRELOAD_MODULES \ + GRUB_ACTUAL_DEFAULT + +# These are optional, user-defined variables. +export GRUB_DEFAULT \ + GRUB_HIDDEN_TIMEOUT \ + GRUB_HIDDEN_TIMEOUT_QUIET \ + GRUB_TIMEOUT \ + GRUB_TIMEOUT_STYLE \ + GRUB_DEFAULT_BUTTON \ + GRUB_HIDDEN_TIMEOUT_BUTTON \ + GRUB_TIMEOUT_BUTTON \ + GRUB_TIMEOUT_STYLE_BUTTON \ + GRUB_BUTTON_CMOS_ADDRESS \ + GRUB_BUTTON_CMOS_CLEAN \ + GRUB_DISTRIBUTOR \ + GRUB_CMDLINE_LINUX \ + GRUB_CMDLINE_LINUX_DEFAULT \ + GRUB_CMDLINE_XEN \ + GRUB_CMDLINE_XEN_DEFAULT \ + GRUB_CMDLINE_LINUX_XEN_REPLACE \ + GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT \ + GRUB_CMDLINE_NETBSD \ + GRUB_CMDLINE_NETBSD_DEFAULT \ + GRUB_CMDLINE_GNUMACH \ + GRUB_TERMINAL_INPUT \ + GRUB_TERMINAL_OUTPUT \ + GRUB_SERIAL_COMMAND \ + GRUB_DISABLE_LINUX_UUID \ + GRUB_DISABLE_RECOVERY \ + GRUB_VIDEO_BACKEND \ + GRUB_GFXMODE \ + GRUB_BACKGROUND \ + GRUB_THEME \ + GRUB_GFXPAYLOAD_LINUX \ + GRUB_DISABLE_OS_PROBER \ + GRUB_INIT_TUNE \ + GRUB_SAVEDEFAULT \ + GRUB_ENABLE_CRYPTODISK \ + GRUB_BADRAM \ + GRUB_OS_PROBER_SKIP_LIST \ + GRUB_DISABLE_SUBMENU + +if test "x${grub_cfg}" != "x"; then + rm -f "${grub_cfg}.new" + oldumask=$(umask); umask 077 + exec > "${grub_cfg}.new" + umask $oldumask +fi +gettext "Generating grub configuration file ..." >&2 +echo >&2 + +cat << EOF +# +# DO NOT EDIT THIS FILE +# +# It is automatically generated by $self using templates +# from ${grub_mkconfig_dir} and settings from ${sysconfdir}/default/grub +# +EOF + + +for i in "${grub_mkconfig_dir}"/* ; do + case "$i" in + # emacsen backup files. FIXME: support other editors + *~) ;; + # emacsen autosave files. FIXME: support other editors + */\#*\#) ;; + *) + if grub_file_is_not_garbage "$i" && test -x "$i" ; then + echo + echo "### BEGIN $i ###" + "$i" + echo "### END $i ###" + fi + ;; + esac +done + +if test "x${grub_cfg}" != "x" ; then + if ! ${grub_script_check} ${grub_cfg}.new; then + # TRANSLATORS: %s is replaced by filename + gettext_printf "Syntax errors are detected in generated GRUB config file. +Ensure that there are no errors in /etc/default/grub +and /etc/grub.d/* files or please file a bug report with +%s file attached." "${grub_cfg}.new" >&2 + echo >&2 + exit 1 + else + # none of the children aborted with error, install the new grub.cfg + mv -f ${grub_cfg}.new ${grub_cfg} + fi +fi + +gettext "done" >&2 +echo >&2 diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in new file mode 100644 index 000000000..60b31cadd --- /dev/null +++ b/util/grub-mkconfig_lib.in @@ -0,0 +1,370 @@ +# Helper library for grub-mkconfig +# Copyright (C) 2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" +datadir="@datadir@" +bindir="@bindir@" +sbindir="@sbindir@" +if [ "x$pkgdatadir" = x ]; then + pkgdatadir="${datadir}/@PACKAGE@" +fi + +if test "x$grub_probe" = x; then + grub_probe="${sbindir}/@grub_probe@" +fi +if test "x$grub_file" = x; then + grub_file="${bindir}/@grub_file@" +fi +if test "x$grub_mkrelpath" = x; then + grub_mkrelpath="${bindir}/@grub_mkrelpath@" +fi + +if which gettext >/dev/null 2>/dev/null; then + : +else + gettext () { + printf "%s" "$@" + } +fi + +grub_warn () +{ + echo "$(gettext "Warning:")" "$@" >&2 +} + +make_system_path_relative_to_its_root () +{ + "${grub_mkrelpath}" "$1" +} + +is_path_readable_by_grub () +{ + path="$1" + + # abort if path doesn't exist + if test -e "$path" ; then : ;else + return 1 + fi + + # abort if file is in a filesystem we can't read + if "${grub_probe}" -t fs "$path" > /dev/null 2>&1 ; then : ; else + return 1 + fi + + # ... or if we can't figure out the abstraction module, for example if + # memberlist fails on an LVM volume group. + if abstractions="`"${grub_probe}" -t abstraction "$path"`" 2> /dev/null ; then + : + else + return 1 + fi + + if [ x$GRUB_ENABLE_CRYPTODISK = xy ]; then + return 0 + fi + + for abstraction in $abstractions; do + if [ "x$abstraction" = xcryptodisk ]; then + return 1 + fi + done + + return 0 +} + +convert_system_path_to_grub_path () +{ + path="$1" + + grub_warn "convert_system_path_to_grub_path() is deprecated. Use prepare_grub_to_access_device() instead." + + # abort if GRUB can't access the path + if is_path_readable_by_grub "${path}" ; then : ; else + return 1 + fi + + if drive="`"${grub_probe}" -t drive "$path"`" ; then : ; else + return 1 + fi + + if relative_path="`make_system_path_relative_to_its_root "$path"`" ; then : ; else + return 1 + fi + + echo "${drive}${relative_path}" +} + +save_default_entry () +{ + if [ "x${GRUB_SAVEDEFAULT}" = "xtrue" ] ; then + cat << EOF +savedefault +EOF + fi +} + +prepare_grub_to_access_device () +{ + old_ifs="$IFS" + IFS=' +' + partmap="`"${grub_probe}" --device $@ --target=partmap`" + for module in ${partmap} ; do + case "${module}" in + netbsd | openbsd) + echo "insmod part_bsd";; + *) + echo "insmod part_${module}";; + esac + done + + # Abstraction modules aren't auto-loaded. + abstraction="`"${grub_probe}" --device $@ --target=abstraction`" + for module in ${abstraction} ; do + echo "insmod ${module}" + done + + fs="`"${grub_probe}" --device $@ --target=fs`" + for module in ${fs} ; do + echo "insmod ${module}" + done + + if [ x$GRUB_ENABLE_CRYPTODISK = xy ]; then + for uuid in `"${grub_probe}" --device $@ --target=cryptodisk_uuid`; do + echo "cryptomount -u $uuid" + done + fi + + # If there's a filesystem UUID that GRUB is capable of identifying, use it; + # otherwise set root as per value in device.map. + fs_hint="`"${grub_probe}" --device $@ --target=compatibility_hint`" + if [ "x$fs_hint" != x ]; then + echo "set root='$fs_hint'" + fi + if fs_uuid="`"${grub_probe}" --device $@ --target=fs_uuid 2> /dev/null`" ; then + hints="`"${grub_probe}" --device $@ --target=hints_string 2> /dev/null`" || hints= + echo "if [ x\$feature_platform_search_hint = xy ]; then" + echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}" + echo "else" + echo " search --no-floppy --fs-uuid --set=root ${fs_uuid}" + echo "fi" + fi + IFS="$old_ifs" +} + +grub_get_device_id () +{ + old_ifs="$IFS" + IFS=' +' + device="$1" + if fs_uuid="`"${grub_probe}" --device ${device} --target=fs_uuid 2> /dev/null`" ; then + echo "$fs_uuid"; + else + echo $device |sed 's, ,_,g' + fi + IFS="$old_ifs" +} + +grub_file_is_not_garbage () +{ + if test -f "$1" ; then + case "$1" in + *.dpkg-*) return 1 ;; # debian dpkg + *.rpmsave|*.rpmnew) return 1 ;; + README*|*/README*) return 1 ;; # documentation + esac + else + return 1 + fi + return 0 +} + +version_sort () +{ + case $version_sort_sort_has_v in + yes) + LC_ALL=C sort -V;; + no) + LC_ALL=C sort -n;; + *) + if sort -V /dev/null 2>&1; then + version_sort_sort_has_v=yes + LC_ALL=C sort -V + else + version_sort_sort_has_v=no + LC_ALL=C sort -n + fi;; + esac +} + +version_test_numeric () +{ + version_test_numeric_a="$1" + version_test_numeric_cmp="$2" + version_test_numeric_b="$3" + if [ "$version_test_numeric_a" = "$version_test_numeric_b" ] ; then + case "$version_test_numeric_cmp" in + ge|eq|le) return 0 ;; + gt|lt) return 1 ;; + esac + fi + if [ "$version_test_numeric_cmp" = "lt" ] ; then + version_test_numeric_c="$version_test_numeric_a" + version_test_numeric_a="$version_test_numeric_b" + version_test_numeric_b="$version_test_numeric_c" + fi + if (echo "$version_test_numeric_a" ; echo "$version_test_numeric_b") | version_sort | head -n 1 | grep -qx "$version_test_numeric_b" ; then + return 0 + else + return 1 + fi +} + +version_test_gt () +{ + version_test_gt_a="`echo "$1" | sed -e "s/[^-]*-//"`" + version_test_gt_b="`echo "$2" | sed -e "s/[^-]*-//"`" + version_test_gt_cmp=gt + if [ "x$version_test_gt_b" = "x" ] ; then + return 0 + fi + case "$version_test_gt_a:$version_test_gt_b" in + *.old:*.old) ;; + *.old:*) version_test_gt_a="`echo "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;; + *:*.old) version_test_gt_b="`echo "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;; + esac + version_test_numeric "$version_test_gt_a" "$version_test_gt_cmp" "$version_test_gt_b" + return "$?" +} + +version_find_latest () +{ + version_find_latest_a="" + for i in "$@" ; do + if version_test_gt "$i" "$version_find_latest_a" ; then + version_find_latest_a="$i" + fi + done + echo "$version_find_latest_a" +} + +# One layer of quotation is eaten by "" and the second by sed; so this turns +# ' into \'. +grub_quote () { + sed "s/'/'\\\\''/g" +} + +gettext_quoted () { + gettext "$@" | grub_quote +} + +# Run the first argument through gettext, and then pass that and all +# remaining arguments to printf. This is a useful abbreviation and tends to +# be easier to type. +gettext_printf () { + gettext_printf_format="$1" + shift + printf "$(gettext "$gettext_printf_format")" "$@" +} + +uses_abstraction () { + device="$1" + old_ifs="$IFS" + IFS=' +' + + abstraction="`"${grub_probe}" --device ${device} --target=abstraction`" + for module in ${abstraction}; do + if test "x${module}" = "x$2"; then + IFS="$old_ifs" + return 0 + fi + done + IFS="$old_ifs" + return 1 +} + +print_option_help () { + if test x$print_option_help_wc = x; then + if wc -L /dev/null 2>&1; then + print_option_help_wc=-L + elif wc -m /dev/null 2>&1; then + print_option_help_wc=-m + else + print_option_help_wc=-b + fi + fi + if test x$grub_have_fmt = x; then + if fmt -w 40 /dev/null 2>&1; then + grub_have_fmt=y; + else + grub_have_fmt=n; + fi + fi + print_option_help_lead=" $1" + print_option_help_lspace="$(echo "$print_option_help_lead" | wc $print_option_help_wc)" + print_option_help_fill="$((26 - print_option_help_lspace))" + printf "%s" "$print_option_help_lead" + if test $print_option_help_fill -le 0; then + print_option_help_nl=y + echo + else + print_option_help_i=0; + while test $print_option_help_i -lt $print_option_help_fill; do + printf " " + print_option_help_i=$((print_option_help_i+1)) + done + print_option_help_nl=n + fi + if test x$grub_have_fmt = xy; then + print_option_help_split="$(echo "$2" | fmt -w 50)" + else + print_option_help_split="$2" + fi + if test x$print_option_help_nl = xy; then + echo "$print_option_help_split" | awk \ + '{ print " " $0; }' + else + echo "$print_option_help_split" | awk 'BEGIN { n = 0 } + { if (n == 1) print " " $0; else print $0; n = 1 ; }' + fi +} + +grub_fmt () { + if test x$grub_have_fmt = x; then + if fmt -w 40 < /dev/null > /dev/null; then + grub_have_fmt=y; + else + grub_have_fmt=n; + fi + fi + + if test x$grub_have_fmt = xy; then + fmt + else + cat + fi +} + +grub_tab=" " + +grub_add_tab () { + sed -e "s/^/$grub_tab/" +} + diff --git a/util/grub-mkfont.c b/util/grub-mkfont.c new file mode 100644 index 000000000..0fe45a610 --- /dev/null +++ b/util/grub-mkfont.c @@ -0,0 +1,1287 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifndef GRUB_BUILD +#define _GNU_SOURCE 1 +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" +#endif +#include + +#include + +#include +#include FT_FREETYPE_H +#include FT_TRUETYPE_TAGS_H +#include FT_TRUETYPE_TABLES_H +#include FT_SYNTHESIS_H + +#undef __FTERRORS_H__ +#define FT_ERROR_START_LIST const char *ft_errmsgs[] = { +#define FT_ERRORDEF(e, v, s) [e] = s, +#define FT_ERROR_END_LIST }; +#include FT_ERRORS_H + +#ifndef GRUB_BUILD +#include "progname.h" +#endif + +#ifdef GRUB_BUILD +#define grub_util_fopen fopen +#endif + +#define GRUB_FONT_DEFAULT_SIZE 16 + +#define GRUB_FONT_RANGE_BLOCK 1024 + +struct grub_glyph_info +{ + struct grub_glyph_info *next; + grub_uint32_t char_code; + int width; + int height; + int x_ofs; + int y_ofs; + int device_width; + int bitmap_size; + grub_uint8_t *bitmap; +}; + +enum file_formats +{ + PF2 +}; + +enum + { + GRUB_FONT_FLAG_BOLD = 1, + GRUB_FONT_FLAG_NOBITMAP = 2, + GRUB_FONT_FLAG_NOHINTING = 4, + GRUB_FONT_FLAG_FORCEHINT = 8 + }; + +struct grub_font_info +{ + const char *name; + int style; + int desc; + int asce; + int size; + int max_width; + int max_height; + int min_y; + int max_y; + int flags; + int num_range; + grub_uint32_t *ranges; + struct grub_glyph_info *glyphs_unsorted; + struct grub_glyph_info *glyphs_sorted; + int num_glyphs; +}; + +static int font_verbosity; + +static void +add_pixel (grub_uint8_t **data, int *mask, int not_blank) +{ + if (*mask == 0) + { + (*data)++; + **data = 0; + *mask = 128; + } + + if (not_blank) + **data |= *mask; + + *mask >>= 1; +} + +static void +add_glyph (struct grub_font_info *font_info, FT_UInt glyph_idx, FT_Face face, + grub_uint32_t char_code, int nocut) +{ + struct grub_glyph_info *glyph_info; + int width, height; + int cuttop, cutbottom, cutleft, cutright; + grub_uint8_t *data; + int mask, i, j, bitmap_size; + FT_GlyphSlot glyph; + int flag = FT_LOAD_RENDER | FT_LOAD_MONOCHROME; + FT_Error err; + + if (font_info->flags & GRUB_FONT_FLAG_NOBITMAP) + flag |= FT_LOAD_NO_BITMAP; + + if (font_info->flags & GRUB_FONT_FLAG_NOHINTING) + flag |= FT_LOAD_NO_HINTING; + else if (font_info->flags & GRUB_FONT_FLAG_FORCEHINT) + flag |= FT_LOAD_FORCE_AUTOHINT; + + err = FT_Load_Glyph (face, glyph_idx, flag); + if (err) + { + printf (_("Freetype Error %d loading glyph 0x%x for U+0x%x%s"), + err, glyph_idx, char_code & GRUB_FONT_CODE_CHAR_MASK, + char_code & GRUB_FONT_CODE_RIGHT_JOINED + /* TRANSLATORS: These qualifiers are used for cursive typography, + mainly Arabic. Note that the terms refer to the visual position + and not logical order and if used in left-to-right script then + leftmost is initial but with right-to-left script like Arabic + rightmost is the initial. */ + ? ((char_code & GRUB_FONT_CODE_LEFT_JOINED) ? _(" (medial)"): + _(" (leftmost)")) + : ((char_code & GRUB_FONT_CODE_LEFT_JOINED) ? _(" (rightmost)"): + "")); + + if (err > 0 && err < (signed) ARRAY_SIZE (ft_errmsgs)) + printf (": %s\n", ft_errmsgs[err]); + else + printf ("\n"); + return; + } + + glyph = face->glyph; + + if (font_info->flags & GRUB_FONT_FLAG_BOLD) + FT_GlyphSlot_Embolden (glyph); + + if (nocut) + cuttop = cutbottom = cutleft = cutright = 0; + else + { + for (cuttop = 0; cuttop < glyph->bitmap.rows; cuttop++) + { + for (j = 0; j < glyph->bitmap.width; j++) + if (glyph->bitmap.buffer[j / 8 + cuttop * glyph->bitmap.pitch] + & (1 << (7 - (j & 7)))) + break; + if (j != glyph->bitmap.width) + break; + } + + for (cutbottom = glyph->bitmap.rows - 1; cutbottom >= 0; cutbottom--) + { + for (j = 0; j < glyph->bitmap.width; j++) + if (glyph->bitmap.buffer[j / 8 + cutbottom * glyph->bitmap.pitch] + & (1 << (7 - (j & 7)))) + break; + if (j != glyph->bitmap.width) + break; + } + cutbottom = glyph->bitmap.rows - 1 - cutbottom; + if (cutbottom + cuttop >= glyph->bitmap.rows) + cutbottom = 0; + + for (cutleft = 0; cutleft < glyph->bitmap.width; cutleft++) + { + for (j = 0; j < glyph->bitmap.rows; j++) + if (glyph->bitmap.buffer[cutleft / 8 + j * glyph->bitmap.pitch] + & (1 << (7 - (cutleft & 7)))) + break; + if (j != glyph->bitmap.rows) + break; + } + for (cutright = glyph->bitmap.width - 1; cutright >= 0; cutright--) + { + for (j = 0; j < glyph->bitmap.rows; j++) + if (glyph->bitmap.buffer[cutright / 8 + j * glyph->bitmap.pitch] + & (1 << (7 - (cutright & 7)))) + break; + if (j != glyph->bitmap.rows) + break; + } + cutright = glyph->bitmap.width - 1 - cutright; + if (cutright + cutleft >= glyph->bitmap.width) + cutright = 0; + } + + width = glyph->bitmap.width - cutleft - cutright; + height = glyph->bitmap.rows - cutbottom - cuttop; + + bitmap_size = ((width * height + 7) / 8); + glyph_info = xmalloc (sizeof (struct grub_glyph_info)); + glyph_info->bitmap = xmalloc (bitmap_size); + glyph_info->bitmap_size = bitmap_size; + + glyph_info->next = font_info->glyphs_unsorted; + font_info->glyphs_unsorted = glyph_info; + font_info->num_glyphs++; + + glyph_info->char_code = char_code; + glyph_info->width = width; + glyph_info->height = height; + glyph_info->x_ofs = glyph->bitmap_left + cutleft; + glyph_info->y_ofs = glyph->bitmap_top - height - cuttop; + glyph_info->device_width = glyph->metrics.horiAdvance / 64; + + if (width > font_info->max_width) + font_info->max_width = width; + + if (height > font_info->max_height) + font_info->max_height = height; + + if (glyph_info->y_ofs < font_info->min_y && glyph_info->y_ofs > -font_info->size) + font_info->min_y = glyph_info->y_ofs; + + if (glyph_info->y_ofs + height > font_info->max_y) + font_info->max_y = glyph_info->y_ofs + height; + + mask = 0; + data = &glyph_info->bitmap[0] - 1; + for (j = cuttop; j < height + cuttop; j++) + for (i = cutleft; i < width + cutleft; i++) + add_pixel (&data, &mask, + glyph->bitmap.buffer[i / 8 + j * glyph->bitmap.pitch] & + (1 << (7 - (i & 7)))); +} + +struct glyph_replace *subst_rightjoin, *subst_leftjoin, *subst_medijoin; + +struct glyph_replace +{ + struct glyph_replace *next; + grub_uint32_t from, to; +}; + +/* TODO: sort glyph_replace and use binary search if necessary. */ +static void +add_char (struct grub_font_info *font_info, FT_Face face, + grub_uint32_t char_code, int nocut) +{ + FT_UInt glyph_idx; + struct glyph_replace *cur; + + glyph_idx = FT_Get_Char_Index (face, char_code); + if (!glyph_idx) + return; + add_glyph (font_info, glyph_idx, face, char_code, nocut); + for (cur = subst_rightjoin; cur; cur = cur->next) + if (cur->from == glyph_idx) + { + add_glyph (font_info, cur->to, face, + char_code | GRUB_FONT_CODE_RIGHT_JOINED, nocut); + break; + } + if (!cur && char_code >= GRUB_UNICODE_ARABIC_START + && char_code < GRUB_UNICODE_ARABIC_END) + { + int i; + for (i = 0; grub_unicode_arabic_shapes[i].code; i++) + if (grub_unicode_arabic_shapes[i].code == char_code + && grub_unicode_arabic_shapes[i].right_linked) + { + FT_UInt idx2; + idx2 = FT_Get_Char_Index (face, grub_unicode_arabic_shapes[i] + .right_linked); + if (idx2) + add_glyph (font_info, idx2, face, + char_code | GRUB_FONT_CODE_RIGHT_JOINED, nocut); + break; + } + + } + + for (cur = subst_leftjoin; cur; cur = cur->next) + if (cur->from == glyph_idx) + { + add_glyph (font_info, cur->to, face, + char_code | GRUB_FONT_CODE_LEFT_JOINED, nocut); + break; + } + if (!cur && char_code >= GRUB_UNICODE_ARABIC_START + && char_code < GRUB_UNICODE_ARABIC_END) + { + int i; + for (i = 0; grub_unicode_arabic_shapes[i].code; i++) + if (grub_unicode_arabic_shapes[i].code == char_code + && grub_unicode_arabic_shapes[i].left_linked) + { + FT_UInt idx2; + idx2 = FT_Get_Char_Index (face, grub_unicode_arabic_shapes[i] + .left_linked); + if (idx2) + add_glyph (font_info, idx2, face, + char_code | GRUB_FONT_CODE_LEFT_JOINED, nocut); + break; + } + + } + for (cur = subst_medijoin; cur; cur = cur->next) + if (cur->from == glyph_idx) + { + add_glyph (font_info, cur->to, face, + char_code | GRUB_FONT_CODE_LEFT_JOINED + | GRUB_FONT_CODE_RIGHT_JOINED, nocut); + break; + } + if (!cur && char_code >= GRUB_UNICODE_ARABIC_START + && char_code < GRUB_UNICODE_ARABIC_END) + { + int i; + for (i = 0; grub_unicode_arabic_shapes[i].code; i++) + if (grub_unicode_arabic_shapes[i].code == char_code + && grub_unicode_arabic_shapes[i].both_linked) + { + FT_UInt idx2; + idx2 = FT_Get_Char_Index (face, grub_unicode_arabic_shapes[i] + .both_linked); + if (idx2) + add_glyph (font_info, idx2, face, + char_code | GRUB_FONT_CODE_LEFT_JOINED + | GRUB_FONT_CODE_RIGHT_JOINED, nocut); + break; + } + + } +} + +struct gsub_header +{ + grub_uint32_t version; + grub_uint16_t scripts_off; + grub_uint16_t features_off; + grub_uint16_t lookups_off; +} GRUB_PACKED; + +struct gsub_features +{ + grub_uint16_t count; + struct + { +#define FEATURE_FINA 0x66696e61 +#define FEATURE_INIT 0x696e6974 +#define FEATURE_MEDI 0x6d656469 +#define FEATURE_AALT 0x61616c74 +#define FEATURE_LIGA 0x6c696761 +#define FEATURE_RLIG 0x726c6967 + grub_uint32_t feature_tag; + grub_uint16_t offset; + } GRUB_PACKED features[0]; +} GRUB_PACKED; + +struct gsub_feature +{ + grub_uint16_t params; + grub_uint16_t lookupcount; + grub_uint16_t lookupindices[0]; +} GRUB_PACKED; + +struct gsub_lookup_list +{ + grub_uint16_t count; + grub_uint16_t offsets[0]; +} GRUB_PACKED; + +struct gsub_lookup +{ + grub_uint16_t type; + grub_uint16_t flag; + grub_uint16_t subtablecount; + grub_uint16_t subtables[0]; +} GRUB_PACKED; + +struct gsub_substitution +{ + grub_uint16_t type; + grub_uint16_t coverage_off; + union + { + grub_int16_t delta; + struct + { + grub_int16_t count; + grub_uint16_t repl[0]; + }; + }; +} GRUB_PACKED; + +struct gsub_coverage_list +{ + grub_uint16_t type; + grub_uint16_t count; + grub_uint16_t glyphs[0]; +} GRUB_PACKED; + +struct gsub_coverage_ranges +{ + grub_uint16_t type; + grub_uint16_t count; + struct + { + grub_uint16_t start; + grub_uint16_t end; + grub_uint16_t start_index; + } GRUB_PACKED ranges[0]; +} GRUB_PACKED; + +#define GSUB_SINGLE_SUBSTITUTION 1 + +#define GSUB_SUBSTITUTION_DELTA 1 +#define GSUB_SUBSTITUTION_MAP 2 + +#define GSUB_COVERAGE_LIST 1 +#define GSUB_COVERAGE_RANGE 2 + +#define GSUB_RTL_CHAR 1 + +static void +add_subst (grub_uint32_t from, grub_uint32_t to, struct glyph_replace **target) +{ + struct glyph_replace *new = xmalloc (sizeof (*new)); + new->next = *target; + new->from = from; + new->to = to; + *target = new; +} + +static void +subst (const struct gsub_substitution *sub, grub_uint32_t glyph, + struct glyph_replace **target, int *i) +{ + grub_uint16_t substtype; + substtype = grub_be_to_cpu16 (sub->type); + + if (substtype == GSUB_SUBSTITUTION_DELTA) + add_subst (glyph, glyph + grub_be_to_cpu16 (sub->delta), target); + else if (*i >= grub_be_to_cpu16 (sub->count)) + printf (_("Out of range substitution (%d, %d)\n"), *i, + grub_be_to_cpu16 (sub->count)); + else + add_subst (glyph, grub_be_to_cpu16 (sub->repl[(*i)++]), target); +} + +static void +process_cursive (struct gsub_feature *feature, + struct gsub_lookup_list *lookups, + grub_uint32_t feattag) +{ + int j, k; + int i; + struct glyph_replace **target = NULL; + struct gsub_substitution *sub; + + for (j = 0; j < grub_be_to_cpu16 (feature->lookupcount); j++) + { + int lookup_index = grub_be_to_cpu16 (feature->lookupindices[j]); + struct gsub_lookup *lookup; + if (lookup_index >= grub_be_to_cpu16 (lookups->count)) + { + /* TRANSLATORS: "lookup" is taken directly from font specifications + which are formulated as "Under condition X replace LOOKUP with + SUBSTITUITION". "*/ + printf (_("Out of range lookup: %d\n"), lookup_index); + continue; + } + lookup = (struct gsub_lookup *) + ((grub_uint8_t *) lookups + + grub_be_to_cpu16 (lookups->offsets[lookup_index])); + if (grub_be_to_cpu16 (lookup->type) != GSUB_SINGLE_SUBSTITUTION) + { + printf (_("Unsupported substitution type: %d\n"), + grub_be_to_cpu16 (lookup->type)); + continue; + } + if (grub_be_to_cpu16 (lookup->flag) & ~GSUB_RTL_CHAR) + { + grub_util_info ("unsupported substitution flag: 0x%x", + grub_be_to_cpu16 (lookup->flag)); + } + switch (feattag) + { + case FEATURE_INIT: + if (grub_be_to_cpu16 (lookup->flag) & GSUB_RTL_CHAR) + target = &subst_leftjoin; + else + target = &subst_rightjoin; + break; + case FEATURE_FINA: + if (grub_be_to_cpu16 (lookup->flag) & GSUB_RTL_CHAR) + target = &subst_rightjoin; + else + target = &subst_leftjoin; + break; + case FEATURE_MEDI: + target = &subst_medijoin; + break; + } + for (k = 0; k < grub_be_to_cpu16 (lookup->subtablecount); k++) + { + sub = (struct gsub_substitution *) + ((grub_uint8_t *) lookup + grub_be_to_cpu16 (lookup->subtables[k])); + grub_uint16_t substtype; + substtype = grub_be_to_cpu16 (sub->type); + if (substtype != GSUB_SUBSTITUTION_MAP + && substtype != GSUB_SUBSTITUTION_DELTA) + { + printf (_("Unsupported substitution specification: %d\n"), + substtype); + continue; + } + void *coverage = (grub_uint8_t *) sub + + grub_be_to_cpu16 (sub->coverage_off); + grub_uint32_t covertype; + covertype = grub_be_to_cpu16 (grub_get_unaligned16 (coverage)); + i = 0; + if (covertype == GSUB_COVERAGE_LIST) + { + struct gsub_coverage_list *cover = coverage; + int l; + for (l = 0; l < grub_be_to_cpu16 (cover->count); l++) + subst (sub, grub_be_to_cpu16 (cover->glyphs[l]), target, &i); + } + else if (covertype == GSUB_COVERAGE_RANGE) + { + struct gsub_coverage_ranges *cover = coverage; + int l, m; + for (l = 0; l < grub_be_to_cpu16 (cover->count); l++) + for (m = grub_be_to_cpu16 (cover->ranges[l].start); + m <= grub_be_to_cpu16 (cover->ranges[l].end); m++) + subst (sub, m, target, &i); + } + else + /* TRANSLATORS: most font transformations apply only to + some glyphs. Those glyphs are described as "coverage". + There are 2 coverage specifications: list and range. + This warning is thrown when another coverage specification + is detected. */ + fprintf (stderr, + _("Unsupported coverage specification: %d\n"), covertype); + } + } +} + +static void +add_font (struct grub_font_info *font_info, FT_Face face, int nocut) +{ + struct gsub_header *gsub = NULL; + FT_ULong gsub_len = 0; + + if (!FT_Load_Sfnt_Table (face, TTAG_GSUB, 0, NULL, &gsub_len)) + { + gsub = xmalloc (gsub_len); + if (FT_Load_Sfnt_Table (face, TTAG_GSUB, 0, (void *) gsub, &gsub_len)) + { + free (gsub); + gsub = NULL; + gsub_len = 0; + } + } + if (gsub) + { + struct gsub_features *features + = (struct gsub_features *) (((grub_uint8_t *) gsub) + + grub_be_to_cpu16 (gsub->features_off)); + struct gsub_lookup_list *lookups + = (struct gsub_lookup_list *) (((grub_uint8_t *) gsub) + + grub_be_to_cpu16 (gsub->lookups_off)); + int i; + int nfeatures = grub_be_to_cpu16 (features->count); + for (i = 0; i < nfeatures; i++) + { + struct gsub_feature *feature = (struct gsub_feature *) + ((grub_uint8_t *) features + + grub_be_to_cpu16 (features->features[i].offset)); + grub_uint32_t feattag + = grub_be_to_cpu32 (features->features[i].feature_tag); + if (feature->params) + fprintf (stderr, + _("WARNING: unsupported font feature parameters: %x\n"), + grub_be_to_cpu16 (feature->params)); + switch (feattag) + { + /* Used for retrieving all possible variants. Useless in grub. */ + case FEATURE_AALT: + break; + + /* FIXME: Add ligature support. */ + case FEATURE_LIGA: + case FEATURE_RLIG: + break; + + /* Cursive form variants. */ + case FEATURE_FINA: + case FEATURE_INIT: + case FEATURE_MEDI: + process_cursive (feature, lookups, feattag); + break; + + default: + { + char str[5]; + int j; + memcpy (str, &features->features[i].feature_tag, + sizeof (features->features[i].feature_tag)); + str[4] = 0; + for (j = 0; j < 4; j++) + if (!grub_isgraph (str[j])) + str[j] = '?'; + /* TRANSLATORS: It's gsub feature, not gsub font. */ + grub_util_info ("Unknown gsub font feature 0x%x (%s)", + feattag, str); + } + } + } + } + + if (font_info->num_range) + { + int i; + grub_uint32_t j; + + for (i = 0; i < font_info->num_range; i++) + for (j = font_info->ranges[i * 2]; j <= font_info->ranges[i * 2 + 1]; + j++) + add_char (font_info, face, j, nocut); + } + else + { + grub_uint32_t char_code, glyph_index; + + for (char_code = FT_Get_First_Char (face, &glyph_index); + glyph_index; + char_code = FT_Get_Next_Char (face, char_code, &glyph_index)) + add_char (font_info, face, char_code, nocut); + } +} + +static void +write_string_section (const char *name, const char *str, + int *offset, FILE *file, + const char *filename) +{ + grub_uint32_t leng, leng_be32; + + leng = strlen (str) + 1; + leng_be32 = grub_cpu_to_be32 (leng); + + grub_util_write_image (name, 4, file, filename); + grub_util_write_image ((char *) &leng_be32, 4, file, filename); + grub_util_write_image (str, leng, file, filename); + + *offset += 8 + leng; +} + +static void +write_be16_section (const char *name, grub_uint16_t data, int* offset, + FILE *file, const char *filename) +{ + grub_uint32_t leng; + + leng = grub_cpu_to_be32_compile_time (2); + data = grub_cpu_to_be16 (data); + grub_util_write_image (name, 4, file, filename); + grub_util_write_image ((char *) &leng, 4, file, filename); + grub_util_write_image ((char *) &data, 2, file, filename); + + *offset += 10; +} + +static void +print_glyphs (struct grub_font_info *font_info) +{ + int num; + struct grub_glyph_info *glyph; + char line[512]; + + for (glyph = font_info->glyphs_sorted, num = 0; num < font_info->num_glyphs; + glyph++, num++) + { + int x, y, xmax, xmin, ymax, ymin; + grub_uint8_t *bitmap, mask; + + printf ("\nGlyph #%d, U+%04x\n", num, glyph->char_code); + printf ("Width %d, Height %d, X offset %d, Y offset %d, Device width %d\n", + glyph->width, glyph->height, glyph->x_ofs, glyph->y_ofs, + glyph->device_width); + + xmax = glyph->x_ofs + glyph->width; + if (xmax < glyph->device_width) + xmax = glyph->device_width; + + xmin = glyph->x_ofs; + if (xmin > 0) + xmin = 0; + + ymax = glyph->y_ofs + glyph->height; + if (ymax < font_info->asce) + ymax = font_info->asce; + + ymin = glyph->y_ofs; + if (ymin > - font_info->desc) + ymin = - font_info->desc; + + bitmap = glyph->bitmap; + mask = 0x80; + for (y = ymax - 1; y > ymin - 1; y--) + { + int line_pos; + + line_pos = 0; + for (x = xmin; x < xmax; x++) + { + if ((x >= glyph->x_ofs) && + (x < glyph->x_ofs + glyph->width) && + (y >= glyph->y_ofs) && + (y < glyph->y_ofs + glyph->height)) + { + line[line_pos++] = (*bitmap & mask) ? '#' : '_'; + mask >>= 1; + if (mask == 0) + { + mask = 0x80; + bitmap++; + } + } + else if ((x >= 0) && + (x < glyph->device_width) && + (y >= - font_info->desc) && + (y < font_info->asce)) + { + line[line_pos++] = ((x == 0) || (y == 0)) ? '+' : '.'; + } + else + line[line_pos++] = '*'; + } + line[line_pos] = 0; + printf ("%s\n", line); + } + } +} + +static void +write_font_pf2 (struct grub_font_info *font_info, char *output_file) +{ + FILE *file; + grub_uint32_t leng; + char style_name[20], *font_name, *ptr; + int offset; + struct grub_glyph_info *cur; + + file = grub_util_fopen (output_file, "wb"); + if (! file) + grub_util_error (_("cannot write to `%s': %s"), output_file, + strerror (errno)); + + offset = 0; + + leng = grub_cpu_to_be32_compile_time (4); + grub_util_write_image (FONT_FORMAT_SECTION_NAMES_FILE, + sizeof(FONT_FORMAT_SECTION_NAMES_FILE) - 1, file, + output_file); + grub_util_write_image ((char *) &leng, 4, file, output_file); + grub_util_write_image (FONT_FORMAT_PFF2_MAGIC, 4, file, output_file); + offset += 12; + + if (! font_info->name) + font_info->name = "Unknown"; + + if (font_info->flags & GRUB_FONT_FLAG_BOLD) + font_info->style |= FT_STYLE_FLAG_BOLD; + + style_name[0] = 0; + if (font_info->style & FT_STYLE_FLAG_BOLD) + strcpy (style_name, " Bold"); + + if (font_info->style & FT_STYLE_FLAG_ITALIC) + strcat (style_name, " Italic"); + + if (! style_name[0]) + strcpy (style_name, " Regular"); + + font_name = xmalloc (strlen (font_info->name) + strlen (&style_name[1]) + + 3 + 20); + ptr = grub_stpcpy (font_name, font_info->name); + *ptr++ = ' '; + ptr = grub_stpcpy (ptr, &style_name[1]); + *ptr++ = ' '; + snprintf (ptr, 20, "%d", font_info->size); + + write_string_section (FONT_FORMAT_SECTION_NAMES_FONT_NAME, + font_name, &offset, file, output_file); + write_string_section (FONT_FORMAT_SECTION_NAMES_FAMILY, + font_info->name, &offset, file, output_file); + write_string_section (FONT_FORMAT_SECTION_NAMES_WEIGHT, + (font_info->style & FT_STYLE_FLAG_BOLD) ? + "bold" : "normal", + &offset, file, output_file); + write_string_section (FONT_FORMAT_SECTION_NAMES_SLAN, + (font_info->style & FT_STYLE_FLAG_ITALIC) ? + "italic" : "normal", + &offset, file, output_file); + + write_be16_section (FONT_FORMAT_SECTION_NAMES_POINT_SIZE, + font_info->size, &offset, file, output_file); + write_be16_section (FONT_FORMAT_SECTION_NAMES_MAX_CHAR_WIDTH, + font_info->max_width, &offset, file, output_file); + write_be16_section (FONT_FORMAT_SECTION_NAMES_MAX_CHAR_HEIGHT, + font_info->max_height, &offset, file, output_file); + + if (! font_info->desc) + { + if (font_info->min_y >= 0) + font_info->desc = 1; + else + font_info->desc = - font_info->min_y; + } + + if (! font_info->asce) + { + if (font_info->max_y <= 0) + font_info->asce = 1; + else + font_info->asce = font_info->max_y; + } + + write_be16_section (FONT_FORMAT_SECTION_NAMES_ASCENT, + font_info->asce, &offset, file, output_file); + write_be16_section (FONT_FORMAT_SECTION_NAMES_DESCENT, + font_info->desc, &offset, file, output_file); + + if (font_verbosity > 0) + { + printf ("Font name: %s\n", font_name); + printf ("Max width: %d\n", font_info->max_width); + printf ("Max height: %d\n", font_info->max_height); + printf ("Font ascent: %d\n", font_info->asce); + printf ("Font descent: %d\n", font_info->desc); + } + + if (font_verbosity > 0) + printf ("Number of glyph: %d\n", font_info->num_glyphs); + + leng = grub_cpu_to_be32 (font_info->num_glyphs * 9); + grub_util_write_image (FONT_FORMAT_SECTION_NAMES_CHAR_INDEX, + sizeof(FONT_FORMAT_SECTION_NAMES_CHAR_INDEX) - 1, + file, output_file); + grub_util_write_image ((char *) &leng, 4, file, output_file); + offset += 8 + font_info->num_glyphs * 9 + 8; + + for (cur = font_info->glyphs_sorted; + cur < font_info->glyphs_sorted + font_info->num_glyphs; cur++) + { + grub_uint32_t data32; + grub_uint8_t data8; + data32 = grub_cpu_to_be32 (cur->char_code); + grub_util_write_image ((char *) &data32, 4, file, output_file); + data8 = 0; + grub_util_write_image ((char *) &data8, 1, file, output_file); + data32 = grub_cpu_to_be32 (offset); + grub_util_write_image ((char *) &data32, 4, file, output_file); + offset += 10 + cur->bitmap_size; + } + + leng = 0xffffffff; + grub_util_write_image (FONT_FORMAT_SECTION_NAMES_DATA, + sizeof(FONT_FORMAT_SECTION_NAMES_DATA) - 1, + file, output_file); + grub_util_write_image ((char *) &leng, 4, file, output_file); + + for (cur = font_info->glyphs_sorted; + cur < font_info->glyphs_sorted + font_info->num_glyphs; cur++) + { + grub_uint16_t data; + data = grub_cpu_to_be16 (cur->width); + grub_util_write_image ((char *) &data, 2, file, output_file); + data = grub_cpu_to_be16 (cur->height); + grub_util_write_image ((char *) &data, 2, file, output_file); + data = grub_cpu_to_be16 (cur->x_ofs); + grub_util_write_image ((char *) &data, 2, file, output_file); + data = grub_cpu_to_be16 (cur->y_ofs); + grub_util_write_image ((char *) &data, 2, file, output_file); + data = grub_cpu_to_be16 (cur->device_width); + grub_util_write_image ((char *) &data, 2, file, output_file); + grub_util_write_image ((char *) &cur->bitmap[0], cur->bitmap_size, + file, output_file); + } + + fclose (file); +} + +#ifndef GRUB_BUILD +static struct argp_option options[] = { + {"output", 'o', N_("FILE"), 0, N_("save output in FILE [required]"), 0}, + /* TRANSLATORS: bitmaps are images like e.g. in JPEG. */ + {"index", 'i', N_("NUM"), 0, + /* TRANSLATORS: some font files may have multiple faces (fonts). + This option is used to chose among them, the first face being '0'. + Rarely used. */ + N_("select face index"), 0}, + {"range", 'r', N_("FROM-TO[,FROM-TO]"), 0, + /* TRANSLATORS: It refers to the range of characters in font. */ + N_("set font range"), 0}, + {"name", 'n', N_("NAME"), 0, + /* TRANSLATORS: "family name" for font is just a generic name without suffix + like "Bold". */ + N_("set font family name"), 0}, + {"size", 's', N_("SIZE"), 0, N_("set font size"), 0}, + {"desc", 'd', N_("NUM"), 0, N_("set font descent"), 0}, + {"asce", 'c', N_("NUM"), 0, N_("set font ascent"), 0}, + {"bold", 'b', 0, 0, N_("convert to bold font"), 0}, + {"force-autohint", 'a', 0, 0, N_("force autohint"), 0}, + {"no-hinting", 0x101, 0, 0, N_("disable hinting"), 0}, + {"no-bitmap", 0x100, 0, 0, + /* TRANSLATORS: some fonts contain bitmap rendering for + some sizes. This option forces rerendering even if + pre-rendered bitmap is available. + */ + N_("ignore bitmap strikes when loading"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; +#define my_argp_parse argp_parse +#define MY_ARGP_KEY_ARG ARGP_KEY_ARG +#define my_error_t error_t +#define MY_ARGP_ERR_UNKNOWN ARGP_ERR_UNKNOWN +#define my_argp_state argp_state + +#else + +#define my_error_t int +#define MY_ARGP_ERR_UNKNOWN -1 +#define MY_ARGP_KEY_ARG -1 +#define my_argp_parse(a, argc, argv, b, c, st) my_argp_parse_real(argc, argv, st) +struct my_argp_state +{ + void *input; +}; + +#endif + +struct arguments +{ + struct grub_font_info font_info; + size_t nfiles; + size_t files_max; + char **files; + char *output_file; + int font_index; + int font_size; + enum file_formats file_format; +}; + +#ifdef GRUB_BUILD + +static int +has_argument (int v) +{ + return v =='o' || v == 'i' || v == 'r' || v == 'n' || v == 's' + || v == 'd' || v == 'c'; +} + +#endif + +static my_error_t +argp_parser (int key, char *arg, struct my_argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'b': + arguments->font_info.flags |= GRUB_FONT_FLAG_BOLD; + break; + + case 0x100: + arguments->font_info.flags |= GRUB_FONT_FLAG_NOBITMAP; + break; + + case 0x101: + arguments->font_info.flags |= GRUB_FONT_FLAG_NOHINTING; + break; + + case 'a': + arguments->font_info.flags |= GRUB_FONT_FLAG_FORCEHINT; + break; + + case 'o': + arguments->output_file = xstrdup (arg); + break; + + case 'n': + arguments->font_info.name = xstrdup (arg); + break; + + case 'i': + arguments->font_index = strtoul (arg, NULL, 0); + break; + + case 's': + arguments->font_size = strtoul (arg, NULL, 0); + break; + + case 'r': + { + char *p = arg; + + while (1) + { + grub_uint32_t a, b; + + a = strtoul (p, &p, 0); + if (*p != '-') + /* TRANSLATORS: It refers to the range of characters in font. */ + grub_util_error ("%s", _("invalid font range")); + b = strtoul (p + 1, &p, 0); + if ((arguments->font_info.num_range + & (GRUB_FONT_RANGE_BLOCK - 1)) == 0) + arguments->font_info.ranges = xrealloc (arguments->font_info.ranges, + (arguments->font_info.num_range + + GRUB_FONT_RANGE_BLOCK) * + sizeof (grub_uint32_t) * 2); + + arguments->font_info.ranges[arguments->font_info.num_range * 2] = a; + arguments->font_info.ranges[arguments->font_info.num_range * 2 + 1] = b; + arguments->font_info.num_range++; + + if (*p) + { + if (*p != ',') + grub_util_error ("%s", _("invalid font range")); + p++; + } + else + break; + } + break; + } + + case 'd': + arguments->font_info.desc = strtoul (arg, NULL, 0); + break; + + case 'c': + arguments->font_info.asce = strtoul (arg, NULL, 0); + break; + + case 'v': + font_verbosity++; + break; + + case MY_ARGP_KEY_ARG: + assert (arguments->nfiles < arguments->files_max); + arguments->files[arguments->nfiles++] = xstrdup(arg); + break; + + default: + return MY_ARGP_ERR_UNKNOWN; + } + return 0; +} + +#ifdef GRUB_BUILD + +/* We don't require host platform to have argp. In the same time configuring + gnulib for build would result in even worse mess. So we have our + minimalistic argp replacement just enough for build system. Most + argp features are omitted. */ + +static int +my_argp_parse_real (int argc, char **argv, void *st) +{ + int curar; + struct my_argp_state p; + + p.input = st; + + for (curar = 1; curar < argc; ) + { + if (argv[curar][0] == '-') + { + if (has_argument (argv[curar][1]) + && curar + 1 >= argc) + return 1; + if (has_argument (argv[curar][1])) + { + if (argp_parser (argv[curar][1], argv[curar + 1], &p)) + return 1; + curar += 2; + continue; + } + if (argp_parser (argv[curar][1], NULL, &p)) + return 1; + curar++; + continue; + } + if (argp_parser (MY_ARGP_KEY_ARG, argv[curar], &p)) + return 1; + curar++; + } + return 0; +} +#endif + +#ifndef GRUB_BUILD +static struct argp argp = { + options, argp_parser, N_("[OPTIONS] FONT_FILES"), + N_("Convert common font file formats into PF2"), + NULL, NULL, NULL +}; +#endif + +int +main (int argc, char *argv[]) +{ + FT_Library ft_lib; + struct arguments arguments; + +#ifndef GRUB_BUILD + grub_util_host_init (&argc, &argv); +#endif + + memset (&arguments, 0, sizeof (struct arguments)); + arguments.file_format = PF2; + arguments.files_max = argc + 1; + arguments.files = xmalloc ((arguments.files_max + 1) + * sizeof (arguments.files[0])); + memset (arguments.files, 0, (arguments.files_max + 1) + * sizeof (arguments.files[0])); + + if (my_argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (! arguments.output_file) + grub_util_error ("%s", _("output file must be specified")); + + if (FT_Init_FreeType (&ft_lib)) + grub_util_error ("%s", _("FT_Init_FreeType fails")); + + { + size_t i; + for (i = 0; i < arguments.nfiles; i++) + { + FT_Face ft_face; + int size; + FT_Error err; + + err = FT_New_Face (ft_lib, arguments.files[i], + arguments.font_index, &ft_face); + if (err) + { + printf (_("can't open file %s, index %d: error %d"), + arguments.files[i], + arguments.font_index, err); + if (err > 0 && err < (signed) ARRAY_SIZE (ft_errmsgs)) + printf (": %s\n", ft_errmsgs[err]); + else + printf ("\n"); + + continue; + } + + if ((! arguments.font_info.name) && (ft_face->family_name)) + arguments.font_info.name = xstrdup (ft_face->family_name); + + size = arguments.font_size; + if (! size) + { + if ((ft_face->face_flags & FT_FACE_FLAG_SCALABLE) || + (! ft_face->num_fixed_sizes)) + size = GRUB_FONT_DEFAULT_SIZE; + else + size = ft_face->available_sizes[0].height; + } + + arguments.font_info.style = ft_face->style_flags; + arguments.font_info.size = size; + + err = FT_Set_Pixel_Sizes (ft_face, size, size); + + if (err) + grub_util_error (_("can't set %dx%d font size: Freetype error %d: %s"), + size, size, err, + (err > 0 && err < (signed) ARRAY_SIZE (ft_errmsgs)) + ? ft_errmsgs[err] : ""); + add_font (&arguments.font_info, ft_face, arguments.file_format != PF2); + FT_Done_Face (ft_face); + } + } + + FT_Done_FreeType (ft_lib); + + { + int counter[65537]; + struct grub_glyph_info *tmp, *cur; + int i; + + memset (counter, 0, sizeof (counter)); + + for (cur = arguments.font_info.glyphs_unsorted; cur; cur = cur->next) + counter[(cur->char_code & 0xffff) + 1]++; + for (i = 0; i < 0x10000; i++) + counter[i+1] += counter[i]; + tmp = xmalloc (arguments.font_info.num_glyphs + * sizeof (tmp[0])); + for (cur = arguments.font_info.glyphs_unsorted; cur; cur = cur->next) + tmp[counter[(cur->char_code & 0xffff)]++] = *cur; + + memset (counter, 0, sizeof (counter)); + + for (cur = tmp; cur < tmp + arguments.font_info.num_glyphs; cur++) + counter[((cur->char_code & 0xffff0000) >> 16) + 1]++; + for (i = 0; i < 0x10000; i++) + counter[i+1] += counter[i]; + arguments.font_info.glyphs_sorted = xmalloc (arguments.font_info.num_glyphs + * sizeof (arguments.font_info.glyphs_sorted[0])); + for (cur = tmp; cur < tmp + arguments.font_info.num_glyphs; cur++) + arguments.font_info.glyphs_sorted[counter[(cur->char_code & 0xffff0000) + >> 16]++] = *cur; + free (tmp); + } + + switch (arguments.file_format) + { + case PF2: + write_font_pf2 (&arguments.font_info, arguments.output_file); + break; + } + + if (font_verbosity > 1) + print_glyphs (&arguments.font_info); + + { + size_t i; + for (i = 0; i < arguments.nfiles; i++) + free (arguments.files[i]); + } + + return 0; +} diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c new file mode 100644 index 000000000..aba19d21b --- /dev/null +++ b/util/grub-mkimage.c @@ -0,0 +1,319 @@ +/* grub-mkimage.c - make a bootable image */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + + +#include "progname.h" + + + +static struct argp_option options[] = { + {"directory", 'd', N_("DIR"), 0, + /* TRANSLATORS: platform here isn't identifier. It can be translated. */ + N_("use images and modules under DIR [default=%s/]"), 0}, + {"prefix", 'p', N_("DIR"), 0, N_("set prefix directory"), 0}, + {"memdisk", 'm', N_("FILE"), 0, + /* TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. + "embed" is a verb (command description). "*/ + N_("embed FILE as a memdisk image\n" + "Implies `-p (memdisk)/boot/grub' and overrides any prefix supplied previously," + " but the prefix itself can be overridden by later options"), 0}, + /* TRANSLATORS: "embed" is a verb (command description). "*/ + {"config", 'c', N_("FILE"), 0, N_("embed FILE as an early config"), 0}, + /* TRANSLATORS: "embed" is a verb (command description). "*/ + {"pubkey", 'k', N_("FILE"), 0, N_("embed FILE as public key for signature checking"), 0}, + /* TRANSLATORS: NOTE is a name of segment. */ + {"note", 'n', 0, 0, N_("add NOTE segment for CHRP IEEE1275"), 0}, + {"output", 'o', N_("FILE"), 0, N_("output a generated image to FILE [default=stdout]"), 0}, + {"format", 'O', N_("FORMAT"), 0, 0, 0}, + {"compression", 'C', "(xz|none|auto)", 0, N_("choose the compression to use for core image"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case 'd': + return xasprintf (text, grub_util_get_pkglibdir ()); + case 'O': + { + char *formats = grub_install_get_image_targets_string (), *ret; + ret = xasprintf ("%s\n%s %s", _("generate an image in FORMAT"), + _("available formats:"), formats); + free (formats); + return ret; + } + default: + return (char *) text; + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +struct arguments +{ + size_t nmodules; + size_t modules_max; + char **modules; + char *output; + char *dir; + char *prefix; + char *memdisk; + char **pubkeys; + size_t npubkeys; + char *font; + char *config; + int note; + const struct grub_install_image_target_desc *image_target; + grub_compression_t comp; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'o': + if (arguments->output) + free (arguments->output); + + arguments->output = xstrdup (arg); + break; + + case 'O': + { + arguments->image_target = grub_install_get_image_target (arg); + if (!arguments->image_target) + { + printf (_("unknown target format %s\n"), arg); + argp_usage (state); + exit (1); + } + break; + } + case 'd': + if (arguments->dir) + free (arguments->dir); + + arguments->dir = xstrdup (arg); + break; + + case 'n': + arguments->note = 1; + break; + + case 'm': + if (arguments->memdisk) + free (arguments->memdisk); + + arguments->memdisk = xstrdup (arg); + + if (arguments->prefix) + free (arguments->prefix); + + arguments->prefix = xstrdup ("(memdisk)/boot/grub"); + break; + + case 'k': + arguments->pubkeys = xrealloc (arguments->pubkeys, + sizeof (arguments->pubkeys[0]) + * (arguments->npubkeys + 1)); + arguments->pubkeys[arguments->npubkeys++] = xstrdup (arg); + break; + + case 'c': + if (arguments->config) + free (arguments->config); + + arguments->config = xstrdup (arg); + break; + + case 'C': + if (grub_strcmp (arg, "xz") == 0) + { +#ifdef HAVE_LIBLZMA + arguments->comp = GRUB_COMPRESSION_XZ; +#else + grub_util_error ("%s", + _("grub-mkimage is compiled without XZ support")); +#endif + } + else if (grub_strcmp (arg, "none") == 0) + arguments->comp = GRUB_COMPRESSION_NONE; + else if (grub_strcmp (arg, "auto") == 0) + arguments->comp = GRUB_COMPRESSION_AUTO; + else + grub_util_error (_("Unknown compression format %s"), arg); + break; + + case 'p': + if (arguments->prefix) + free (arguments->prefix); + + arguments->prefix = xstrdup (arg); + break; + + case 'v': + verbosity++; + break; + case ARGP_KEY_ARG: + assert (arguments->nmodules < arguments->modules_max); + arguments->modules[arguments->nmodules++] = xstrdup(arg); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("[OPTION]... [MODULES]"), + N_("Make a bootable image of GRUB."), + NULL, help_filter, NULL +}; + +int +main (int argc, char *argv[]) +{ + FILE *fp = stdout; + struct arguments arguments; + unsigned i; + + grub_util_host_init (&argc, &argv); + + memset (&arguments, 0, sizeof (struct arguments)); + arguments.comp = GRUB_COMPRESSION_AUTO; + arguments.modules_max = argc + 1; + arguments.modules = xmalloc ((arguments.modules_max + 1) + * sizeof (arguments.modules[0])); + memset (arguments.modules, 0, (arguments.modules_max + 1) + * sizeof (arguments.modules[0])); + + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (!arguments.image_target) + { + char *program = xstrdup(program_name); + printf ("%s\n", _("Target format not specified (use the -O option).")); + argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); + free (program); + exit(1); + } + + if (!arguments.prefix) + { + char *program = xstrdup(program_name); + printf ("%s\n", _("Prefix not specified (use the -p option).")); + argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); + free (program); + exit(1); + } + + if (arguments.output) + { + fp = grub_util_fopen (arguments.output, "wb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), arguments.output, + strerror (errno)); + } + + if (!arguments.dir) + { + const char *dn = grub_util_get_target_dirname (arguments.image_target); + const char *pkglibdir = grub_util_get_pkglibdir (); + char *ptr; + arguments.dir = xmalloc (grub_strlen (pkglibdir) + grub_strlen (dn) + 2); + ptr = grub_stpcpy (arguments.dir, pkglibdir); + *ptr++ = '/'; + strcpy (ptr, dn); + } + + grub_install_generate_image (arguments.dir, arguments.prefix, fp, + arguments.output, arguments.modules, + arguments.memdisk, arguments.pubkeys, + arguments.npubkeys, arguments.config, + arguments.image_target, arguments.note, + arguments.comp); + + grub_util_file_sync (fp); + fclose (fp); + + for (i = 0; i < arguments.nmodules; i++) + free (arguments.modules[i]); + + free (arguments.dir); + free (arguments.prefix); + free (arguments.modules); + + if (arguments.output) + free (arguments.output); + + return 0; +} diff --git a/util/grub-mkimage32.c b/util/grub-mkimage32.c new file mode 100644 index 000000000..9b31397bc --- /dev/null +++ b/util/grub-mkimage32.c @@ -0,0 +1,22 @@ +#define MKIMAGE_ELF32 1 + +# define SUFFIX(x) x ## 32 +# define ELFCLASSXX ELFCLASS32 +# define Elf_Ehdr Elf32_Ehdr +# define Elf_Phdr Elf32_Phdr +# define Elf_Nhdr Elf32_Nhdr +# define Elf_Addr Elf32_Addr +# define Elf_Sym Elf32_Sym +# define Elf_Off Elf32_Off +# define Elf_Shdr Elf32_Shdr +# define Elf_Rela Elf32_Rela +# define Elf_Rel Elf32_Rel +# define Elf_Word Elf32_Word +# define Elf_Half Elf32_Half +# define Elf_Section Elf32_Section +# define ELF_R_SYM(val) ELF32_R_SYM(val) +# define ELF_R_TYPE(val) ELF32_R_TYPE(val) +# define ELF_ST_TYPE(val) ELF32_ST_TYPE(val) +#define XEN_NOTE_SIZE 132 + +#include "grub-mkimagexx.c" diff --git a/util/grub-mkimage64.c b/util/grub-mkimage64.c new file mode 100644 index 000000000..d83345924 --- /dev/null +++ b/util/grub-mkimage64.c @@ -0,0 +1,22 @@ +#define MKIMAGE_ELF64 1 + +# define SUFFIX(x) x ## 64 +# define ELFCLASSXX ELFCLASS64 +# define Elf_Ehdr Elf64_Ehdr +# define Elf_Phdr Elf64_Phdr +# define Elf_Nhdr Elf64_Nhdr +# define Elf_Addr Elf64_Addr +# define Elf_Sym Elf64_Sym +# define Elf_Off Elf64_Off +# define Elf_Shdr Elf64_Shdr +# define Elf_Rela Elf64_Rela +# define Elf_Rel Elf64_Rel +# define Elf_Word Elf64_Word +# define Elf_Half Elf64_Half +# define Elf_Section Elf64_Section +# define ELF_R_SYM(val) ELF64_R_SYM(val) +# define ELF_R_TYPE(val) ELF64_R_TYPE(val) +# define ELF_ST_TYPE(val) ELF64_ST_TYPE(val) +#define XEN_NOTE_SIZE 120 + +#include "grub-mkimagexx.c" diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c new file mode 100644 index 000000000..e63f148e4 --- /dev/null +++ b/util/grub-mkimagexx.c @@ -0,0 +1,2103 @@ +/* grub-mkimage.c - make a bootable image */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wcast-align" + +/* These structures are defined according to the CHRP binding to IEEE1275, + "Client Program Format" section. */ + +struct grub_ieee1275_note_desc +{ + grub_uint32_t real_mode; + grub_uint32_t real_base; + grub_uint32_t real_size; + grub_uint32_t virt_base; + grub_uint32_t virt_size; + grub_uint32_t load_base; +}; + +#define GRUB_IEEE1275_NOTE_NAME "PowerPC" +#define GRUB_IEEE1275_NOTE_TYPE 0x1275 + +struct grub_ieee1275_note +{ + Elf32_Nhdr header; + char name[ALIGN_UP(sizeof (GRUB_IEEE1275_NOTE_NAME), 4)]; + struct grub_ieee1275_note_desc descriptor; +}; + +#define GRUB_XEN_NOTE_NAME "Xen" + +struct fixup_block_list +{ + struct fixup_block_list *next; + int state; + struct grub_pe32_fixup_block b; +}; + +#define ALIGN_ADDR(x) (ALIGN_UP((x), image_target->voidp_sizeof)) + +static int +is_relocatable (const struct grub_install_image_target_desc *image_target) +{ + return image_target->id == IMAGE_EFI || image_target->id == IMAGE_UBOOT; +} + +#ifdef MKIMAGE_ELF32 + +/* + * R_ARM_THM_CALL/THM_JUMP24 + * + * Relocate Thumb (T32) instruction set relative branches: + * B.W, BL and BLX + */ +static grub_err_t +grub_arm_reloc_thm_call (grub_uint16_t *target, Elf32_Addr sym_addr) +{ + grub_int32_t offset; + + offset = grub_arm_thm_call_get_offset (target); + + grub_dprintf ("dl", " sym_addr = 0x%08x", sym_addr); + + offset += sym_addr; + + grub_dprintf("dl", " BL*: target=%p, sym_addr=0x%08x, offset=%d\n", + target, sym_addr, offset); + + /* Keep traditional (pre-Thumb2) limits on blx. In any case if the kernel + is bigger than 2M (currently under 150K) then we probably have a problem + somewhere else. */ + if (offset < -0x200000 || offset >= 0x200000) + return grub_error (GRUB_ERR_BAD_MODULE, + "THM_CALL Relocation out of range."); + + grub_dprintf ("dl", " relative destination = %p", + (char *) target + offset); + + return grub_arm_thm_call_set_offset (target, offset); +} + +/* + * R_ARM_THM_JUMP19 + * + * Relocate conditional Thumb (T32) B.W + */ +static grub_err_t +grub_arm_reloc_thm_jump19 (grub_uint16_t *target, Elf32_Addr sym_addr) +{ + grub_int32_t offset; + + if (!(sym_addr & 1)) + return grub_error (GRUB_ERR_BAD_MODULE, + "Relocation targeting wrong execution state"); + + offset = grub_arm_thm_jump19_get_offset (target); + + /* Adjust and re-truncate offset */ + offset += sym_addr; + + if (!grub_arm_thm_jump19_check_offset (offset)) + return grub_error (GRUB_ERR_BAD_MODULE, + "THM_JUMP19 Relocation out of range."); + + grub_arm_thm_jump19_set_offset (target, offset); + + return GRUB_ERR_NONE; +} + +/* + * R_ARM_JUMP24 + * + * Relocate ARM (A32) B + */ +static grub_err_t +grub_arm_reloc_jump24 (grub_uint32_t *target, Elf32_Addr sym_addr) +{ + grub_int32_t offset; + + if (sym_addr & 1) + return grub_error (GRUB_ERR_BAD_MODULE, + "Relocation targeting wrong execution state"); + + offset = grub_arm_jump24_get_offset (target); + offset += sym_addr; + + if (!grub_arm_jump24_check_offset (offset)) + return grub_error (GRUB_ERR_BAD_MODULE, + "JUMP24 Relocation out of range."); + + + grub_arm_jump24_set_offset (target, offset); + + return GRUB_ERR_NONE; +} + +#endif + +void +SUFFIX (grub_mkimage_generate_elf) (const struct grub_install_image_target_desc *image_target, + int note, char **core_img, size_t *core_size, + Elf_Addr target_addr, grub_size_t align, + size_t kernel_size, size_t bss_size) +{ + char *elf_img; + size_t program_size; + Elf_Ehdr *ehdr; + Elf_Phdr *phdr; + Elf_Shdr *shdr; + int header_size, footer_size = 0; + int phnum = 1; + int shnum = 4; + int string_size = sizeof (".text") + sizeof ("mods") + 1; + + if (image_target->id != IMAGE_LOONGSON_ELF) + phnum += 2; + + if (note) + { + phnum++; + footer_size += sizeof (struct grub_ieee1275_note); + } + if (image_target->id == IMAGE_XEN) + { + phnum++; + shnum++; + string_size += sizeof (".xen"); + footer_size += XEN_NOTE_SIZE; + } + header_size = ALIGN_UP (sizeof (*ehdr) + phnum * sizeof (*phdr) + + shnum * sizeof (*shdr) + string_size, align); + + program_size = ALIGN_ADDR (*core_size); + + elf_img = xmalloc (program_size + header_size + footer_size); + memset (elf_img, 0, program_size + header_size + footer_size); + memcpy (elf_img + header_size, *core_img, *core_size); + ehdr = (void *) elf_img; + phdr = (void *) (elf_img + sizeof (*ehdr)); + shdr = (void *) (elf_img + sizeof (*ehdr) + phnum * sizeof (*phdr)); + memcpy (ehdr->e_ident, ELFMAG, SELFMAG); + ehdr->e_ident[EI_CLASS] = ELFCLASSXX; + if (!image_target->bigendian) + ehdr->e_ident[EI_DATA] = ELFDATA2LSB; + else + ehdr->e_ident[EI_DATA] = ELFDATA2MSB; + ehdr->e_ident[EI_VERSION] = EV_CURRENT; + ehdr->e_ident[EI_OSABI] = ELFOSABI_NONE; + ehdr->e_type = grub_host_to_target16 (ET_EXEC); + ehdr->e_machine = grub_host_to_target16 (image_target->elf_target); + ehdr->e_version = grub_host_to_target32 (EV_CURRENT); + + ehdr->e_phoff = grub_host_to_target32 ((char *) phdr - (char *) ehdr); + ehdr->e_phentsize = grub_host_to_target16 (sizeof (*phdr)); + ehdr->e_phnum = grub_host_to_target16 (phnum); + + ehdr->e_shoff = grub_host_to_target32 ((grub_uint8_t *) shdr + - (grub_uint8_t *) ehdr); + if (image_target->id == IMAGE_LOONGSON_ELF) + ehdr->e_shentsize = grub_host_to_target16 (0); + else + ehdr->e_shentsize = grub_host_to_target16 (sizeof (Elf_Shdr)); + ehdr->e_shnum = grub_host_to_target16 (shnum); + ehdr->e_shstrndx = grub_host_to_target16 (1); + + ehdr->e_ehsize = grub_host_to_target16 (sizeof (*ehdr)); + + phdr->p_type = grub_host_to_target32 (PT_LOAD); + phdr->p_offset = grub_host_to_target32 (header_size); + phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X); + + ehdr->e_entry = grub_host_to_target32 (target_addr); + phdr->p_vaddr = grub_host_to_target32 (target_addr); + phdr->p_paddr = grub_host_to_target32 (target_addr); + phdr->p_align = grub_host_to_target32 (align > image_target->link_align ? align : image_target->link_align); + if (image_target->id == IMAGE_LOONGSON_ELF) + ehdr->e_flags = grub_host_to_target32 (0x1000 | EF_MIPS_NOREORDER + | EF_MIPS_PIC | EF_MIPS_CPIC); + else + ehdr->e_flags = 0; + if (image_target->id == IMAGE_LOONGSON_ELF) + { + phdr->p_filesz = grub_host_to_target32 (*core_size); + phdr->p_memsz = grub_host_to_target32 (*core_size); + } + else + { + grub_uint32_t target_addr_mods; + phdr->p_filesz = grub_host_to_target32 (kernel_size); + phdr->p_memsz = grub_host_to_target32 (kernel_size + bss_size); + + phdr++; + phdr->p_type = grub_host_to_target32 (PT_GNU_STACK); + phdr->p_offset = grub_host_to_target32 (header_size + kernel_size); + phdr->p_paddr = phdr->p_vaddr = phdr->p_filesz = phdr->p_memsz = 0; + phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X); + phdr->p_align = grub_host_to_target32 (image_target->link_align); + + phdr++; + phdr->p_type = grub_host_to_target32 (PT_LOAD); + phdr->p_offset = grub_host_to_target32 (header_size + kernel_size); + phdr->p_flags = grub_host_to_target32 (PF_R | PF_W | PF_X); + phdr->p_filesz = phdr->p_memsz + = grub_host_to_target32 (*core_size - kernel_size); + + if (image_target->id == IMAGE_COREBOOT) + target_addr_mods = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR; + else + target_addr_mods = ALIGN_UP (target_addr + kernel_size + bss_size + + image_target->mod_gap, + image_target->mod_align); + phdr->p_vaddr = grub_host_to_target_addr (target_addr_mods); + phdr->p_paddr = grub_host_to_target_addr (target_addr_mods); + phdr->p_align = grub_host_to_target32 (image_target->link_align); + } + + if (image_target->id == IMAGE_XEN) + { + char *note_start = (elf_img + program_size + header_size); + Elf_Nhdr *note_ptr; + char *ptr = (char *) note_start; + + grub_util_info ("adding XEN NOTE segment"); + + /* Guest OS. */ + note_ptr = (Elf_Nhdr *) ptr; + note_ptr->n_namesz = grub_host_to_target32 (sizeof (GRUB_XEN_NOTE_NAME)); + note_ptr->n_descsz = grub_host_to_target32 (sizeof (PACKAGE_NAME)); + note_ptr->n_type = grub_host_to_target32 (6); + ptr += sizeof (Elf_Nhdr); + memcpy (ptr, GRUB_XEN_NOTE_NAME, sizeof (GRUB_XEN_NOTE_NAME)); + ptr += ALIGN_UP (sizeof (GRUB_XEN_NOTE_NAME), 4); + memcpy (ptr, PACKAGE_NAME, sizeof (PACKAGE_NAME)); + ptr += ALIGN_UP (sizeof (PACKAGE_NAME), 4); + + /* Loader. */ + note_ptr = (Elf_Nhdr *) ptr; + note_ptr->n_namesz = grub_host_to_target32 (sizeof (GRUB_XEN_NOTE_NAME)); + note_ptr->n_descsz = grub_host_to_target32 (sizeof ("generic")); + note_ptr->n_type = grub_host_to_target32 (8); + ptr += sizeof (Elf_Nhdr); + memcpy (ptr, GRUB_XEN_NOTE_NAME, sizeof (GRUB_XEN_NOTE_NAME)); + ptr += ALIGN_UP (sizeof (GRUB_XEN_NOTE_NAME), 4); + memcpy (ptr, "generic", sizeof ("generic")); + ptr += ALIGN_UP (sizeof ("generic"), 4); + + /* Version. */ + note_ptr = (Elf_Nhdr *) ptr; + note_ptr->n_namesz = grub_host_to_target32 (sizeof (GRUB_XEN_NOTE_NAME)); + note_ptr->n_descsz = grub_host_to_target32 (sizeof ("xen-3.0")); + note_ptr->n_type = grub_host_to_target32 (5); + ptr += sizeof (Elf_Nhdr); + memcpy (ptr, GRUB_XEN_NOTE_NAME, sizeof (GRUB_XEN_NOTE_NAME)); + ptr += ALIGN_UP (sizeof (GRUB_XEN_NOTE_NAME), 4); + memcpy (ptr, "xen-3.0", sizeof ("xen-3.0")); + ptr += ALIGN_UP (sizeof ("xen-3.0"), 4); + + /* Entry. */ + note_ptr = (Elf_Nhdr *) ptr; + note_ptr->n_namesz = grub_host_to_target32 (sizeof (GRUB_XEN_NOTE_NAME)); + note_ptr->n_descsz = grub_host_to_target32 (image_target->voidp_sizeof); + note_ptr->n_type = grub_host_to_target32 (1); + ptr += sizeof (Elf_Nhdr); + memcpy (ptr, GRUB_XEN_NOTE_NAME, sizeof (GRUB_XEN_NOTE_NAME)); + ptr += ALIGN_UP (sizeof (GRUB_XEN_NOTE_NAME), 4); + memset (ptr, 0, image_target->voidp_sizeof); + ptr += image_target->voidp_sizeof; + + /* Virt base. */ + note_ptr = (Elf_Nhdr *) ptr; + note_ptr->n_namesz = grub_host_to_target32 (sizeof (GRUB_XEN_NOTE_NAME)); + note_ptr->n_descsz = grub_host_to_target32 (image_target->voidp_sizeof); + note_ptr->n_type = grub_host_to_target32 (3); + ptr += sizeof (Elf_Nhdr); + memcpy (ptr, GRUB_XEN_NOTE_NAME, sizeof (GRUB_XEN_NOTE_NAME)); + ptr += ALIGN_UP (sizeof (GRUB_XEN_NOTE_NAME), 4); + memset (ptr, 0, image_target->voidp_sizeof); + ptr += image_target->voidp_sizeof; + + /* PAE. */ + if (image_target->elf_target == EM_386) + { + note_ptr = (Elf_Nhdr *) ptr; + note_ptr->n_namesz = grub_host_to_target32 (sizeof (GRUB_XEN_NOTE_NAME)); + note_ptr->n_descsz = grub_host_to_target32 (sizeof ("yes,bimodal")); + note_ptr->n_type = grub_host_to_target32 (9); + ptr += sizeof (Elf_Nhdr); + memcpy (ptr, GRUB_XEN_NOTE_NAME, sizeof (GRUB_XEN_NOTE_NAME)); + ptr += ALIGN_UP (sizeof (GRUB_XEN_NOTE_NAME), 4); + memcpy (ptr, "yes", sizeof ("yes")); + ptr += ALIGN_UP (sizeof ("yes"), 4); + } + + assert (XEN_NOTE_SIZE == (ptr - note_start)); + + phdr++; + phdr->p_type = grub_host_to_target32 (PT_NOTE); + phdr->p_flags = grub_host_to_target32 (PF_R); + phdr->p_align = grub_host_to_target32 (image_target->voidp_sizeof); + phdr->p_vaddr = 0; + phdr->p_paddr = 0; + phdr->p_filesz = grub_host_to_target32 (XEN_NOTE_SIZE); + phdr->p_memsz = 0; + phdr->p_offset = grub_host_to_target32 (header_size + program_size); + } + + if (note) + { + int note_size = sizeof (struct grub_ieee1275_note); + struct grub_ieee1275_note *note_ptr = (struct grub_ieee1275_note *) + (elf_img + program_size + header_size); + + grub_util_info ("adding CHRP NOTE segment"); + + note_ptr->header.n_namesz = grub_host_to_target32 (sizeof (GRUB_IEEE1275_NOTE_NAME)); + note_ptr->header.n_descsz = grub_host_to_target32 (note_size); + note_ptr->header.n_type = grub_host_to_target32 (GRUB_IEEE1275_NOTE_TYPE); + strcpy (note_ptr->name, GRUB_IEEE1275_NOTE_NAME); + note_ptr->descriptor.real_mode = grub_host_to_target32 (0xffffffff); + note_ptr->descriptor.real_base = grub_host_to_target32 (0x00c00000); + note_ptr->descriptor.real_size = grub_host_to_target32 (0xffffffff); + note_ptr->descriptor.virt_base = grub_host_to_target32 (0xffffffff); + note_ptr->descriptor.virt_size = grub_host_to_target32 (0xffffffff); + note_ptr->descriptor.load_base = grub_host_to_target32 (0x00004000); + + phdr++; + phdr->p_type = grub_host_to_target32 (PT_NOTE); + phdr->p_flags = grub_host_to_target32 (PF_R); + phdr->p_align = grub_host_to_target32 (image_target->voidp_sizeof); + phdr->p_vaddr = 0; + phdr->p_paddr = 0; + phdr->p_filesz = grub_host_to_target32 (note_size); + phdr->p_memsz = 0; + phdr->p_offset = grub_host_to_target32 (header_size + program_size); + } + + { + char *str_start = (elf_img + sizeof (*ehdr) + phnum * sizeof (*phdr) + + shnum * sizeof (*shdr)); + char *ptr = str_start + 1; + + shdr++; + + shdr->sh_name = grub_host_to_target32 (0); + shdr->sh_type = grub_host_to_target32 (SHT_STRTAB); + shdr->sh_addr = grub_host_to_target_addr (0); + shdr->sh_offset = grub_host_to_target_addr (str_start - elf_img); + shdr->sh_size = grub_host_to_target32 (string_size); + shdr->sh_link = grub_host_to_target32 (0); + shdr->sh_info = grub_host_to_target32 (0); + shdr->sh_addralign = grub_host_to_target32 (align); + shdr->sh_entsize = grub_host_to_target32 (0); + shdr++; + + memcpy (ptr, ".text", sizeof (".text")); + + shdr->sh_name = grub_host_to_target32 (ptr - str_start); + ptr += sizeof (".text"); + shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS); + shdr->sh_addr = grub_host_to_target_addr (target_addr); + shdr->sh_offset = grub_host_to_target_addr (header_size); + shdr->sh_size = grub_host_to_target32 (kernel_size); + shdr->sh_link = grub_host_to_target32 (0); + shdr->sh_info = grub_host_to_target32 (0); + shdr->sh_addralign = grub_host_to_target32 (align); + shdr->sh_entsize = grub_host_to_target32 (0); + shdr++; + + memcpy (ptr, "mods", sizeof ("mods")); + shdr->sh_name = grub_host_to_target32 (ptr - str_start); + ptr += sizeof ("mods"); + shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS); + shdr->sh_addr = grub_host_to_target_addr (target_addr + kernel_size); + shdr->sh_offset = grub_host_to_target_addr (header_size + kernel_size); + shdr->sh_size = grub_host_to_target32 (*core_size - kernel_size); + shdr->sh_link = grub_host_to_target32 (0); + shdr->sh_info = grub_host_to_target32 (0); + shdr->sh_addralign = grub_host_to_target32 (image_target->voidp_sizeof); + shdr->sh_entsize = grub_host_to_target32 (0); + shdr++; + + if (image_target->id == IMAGE_XEN) + { + memcpy (ptr, ".xen", sizeof (".xen")); + shdr->sh_name = grub_host_to_target32 (ptr - str_start); + ptr += sizeof (".xen"); + shdr->sh_type = grub_host_to_target32 (SHT_PROGBITS); + shdr->sh_addr = grub_host_to_target_addr (target_addr + kernel_size); + shdr->sh_offset = grub_host_to_target_addr (program_size + header_size); + shdr->sh_size = grub_host_to_target32 (XEN_NOTE_SIZE); + shdr->sh_link = grub_host_to_target32 (0); + shdr->sh_info = grub_host_to_target32 (0); + shdr->sh_addralign = grub_host_to_target32 (image_target->voidp_sizeof); + shdr->sh_entsize = grub_host_to_target32 (0); + shdr++; + } + } + + free (*core_img); + *core_img = elf_img; + *core_size = program_size + header_size + footer_size; +} + +/* Relocate symbols; note that this function overwrites the symbol table. + Return the address of a start symbol. */ +static Elf_Addr +SUFFIX (relocate_symbols) (Elf_Ehdr *e, Elf_Shdr *sections, + Elf_Shdr *symtab_section, Elf_Addr *section_addresses, + Elf_Half section_entsize, Elf_Half num_sections, + void *jumpers, Elf_Addr jumpers_addr, + Elf_Addr bss_start, Elf_Addr end, + const struct grub_install_image_target_desc *image_target) +{ + Elf_Word symtab_size, sym_size, num_syms; + Elf_Off symtab_offset; + Elf_Addr start_address = (Elf_Addr) -1; + Elf_Sym *sym; + Elf_Word i; + Elf_Shdr *strtab_section; + const char *strtab; + grub_uint64_t *jptr = jumpers; + + strtab_section + = (Elf_Shdr *) ((char *) sections + + (grub_target_to_host32 (symtab_section->sh_link) + * section_entsize)); + strtab = (char *) e + grub_target_to_host (strtab_section->sh_offset); + + symtab_size = grub_target_to_host (symtab_section->sh_size); + sym_size = grub_target_to_host (symtab_section->sh_entsize); + symtab_offset = grub_target_to_host (symtab_section->sh_offset); + num_syms = symtab_size / sym_size; + + for (i = 0, sym = (Elf_Sym *) ((char *) e + symtab_offset); + i < num_syms; + i++, sym = (Elf_Sym *) ((char *) sym + sym_size)) + { + Elf_Section cur_index; + const char *name; + + name = strtab + grub_target_to_host32 (sym->st_name); + + cur_index = grub_target_to_host16 (sym->st_shndx); + if (cur_index == STN_ABS) + { + continue; + } + else if (cur_index == STN_UNDEF) + { + if (sym->st_name && grub_strcmp (name, "__bss_start") == 0) + sym->st_value = bss_start; + else if (sym->st_name && grub_strcmp (name, "_end") == 0) + sym->st_value = end; + else if (sym->st_name) + grub_util_error ("undefined symbol %s", name); + else + continue; + } + else if (cur_index >= num_sections) + grub_util_error ("section %d does not exist", cur_index); + else + { + sym->st_value = (grub_target_to_host (sym->st_value) + + section_addresses[cur_index]); + } + + if (image_target->elf_target == EM_IA_64 && ELF_ST_TYPE (sym->st_info) + == STT_FUNC) + { + *jptr = grub_host_to_target64 (sym->st_value); + sym->st_value = (char *) jptr - (char *) jumpers + jumpers_addr; + jptr++; + *jptr = 0; + jptr++; + } + grub_util_info ("locating %s at 0x%" GRUB_HOST_PRIxLONG_LONG + " (0x%" GRUB_HOST_PRIxLONG_LONG ")", name, + (unsigned long long) sym->st_value, + (unsigned long long) section_addresses[cur_index]); + + if (start_address == (Elf_Addr)-1) + if (strcmp (name, "_start") == 0 || strcmp (name, "start") == 0) + start_address = sym->st_value; + } + + return start_address; +} + +/* Return the address of a symbol at the index I in the section S. */ +static Elf_Addr +SUFFIX (get_symbol_address) (Elf_Ehdr *e, Elf_Shdr *s, Elf_Word i, + const struct grub_install_image_target_desc *image_target) +{ + Elf_Sym *sym; + + sym = (Elf_Sym *) ((char *) e + + grub_target_to_host (s->sh_offset) + + i * grub_target_to_host (s->sh_entsize)); + return sym->st_value; +} + +/* Return the address of a modified value. */ +static Elf_Addr * +SUFFIX (get_target_address) (Elf_Ehdr *e, Elf_Shdr *s, Elf_Addr offset, + const struct grub_install_image_target_desc *image_target) +{ + return (Elf_Addr *) ((char *) e + grub_target_to_host (s->sh_offset) + offset); +} + +#ifdef MKIMAGE_ELF64 +static Elf_Addr +SUFFIX (count_funcs) (Elf_Ehdr *e, Elf_Shdr *symtab_section, + const struct grub_install_image_target_desc *image_target) +{ + Elf_Word symtab_size, sym_size, num_syms; + Elf_Off symtab_offset; + Elf_Sym *sym; + Elf_Word i; + int ret = 0; + + symtab_size = grub_target_to_host (symtab_section->sh_size); + sym_size = grub_target_to_host (symtab_section->sh_entsize); + symtab_offset = grub_target_to_host (symtab_section->sh_offset); + num_syms = symtab_size / sym_size; + + for (i = 0, sym = (Elf_Sym *) ((char *) e + symtab_offset); + i < num_syms; + i++, sym = (Elf_Sym *) ((char *) sym + sym_size)) + if (ELF_ST_TYPE (sym->st_info) == STT_FUNC) + ret++; + + return ret; +} +#endif + +#ifdef MKIMAGE_ELF32 +/* Deal with relocation information. This function relocates addresses + within the virtual address space starting from 0. So only relative + addresses can be fully resolved. Absolute addresses must be relocated + again by a PE32 relocator when loaded. */ +static grub_size_t +arm_get_trampoline_size (Elf_Ehdr *e, + Elf_Shdr *sections, + Elf_Half section_entsize, + Elf_Half num_sections, + const struct grub_install_image_target_desc *image_target) +{ + Elf_Half i; + Elf_Shdr *s; + grub_size_t ret = 0; + + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if ((s->sh_type == grub_host_to_target32 (SHT_REL)) || + (s->sh_type == grub_host_to_target32 (SHT_RELA))) + { + Elf_Rela *r; + Elf_Word rtab_size, r_size, num_rs; + Elf_Off rtab_offset; + Elf_Shdr *symtab_section; + Elf_Word j; + + symtab_section = (Elf_Shdr *) ((char *) sections + + (grub_target_to_host32 (s->sh_link) + * section_entsize)); + + rtab_size = grub_target_to_host (s->sh_size); + r_size = grub_target_to_host (s->sh_entsize); + rtab_offset = grub_target_to_host (s->sh_offset); + num_rs = rtab_size / r_size; + + for (j = 0, r = (Elf_Rela *) ((char *) e + rtab_offset); + j < num_rs; + j++, r = (Elf_Rela *) ((char *) r + r_size)) + { + Elf_Addr info; + Elf_Addr sym_addr; + + info = grub_target_to_host (r->r_info); + sym_addr = SUFFIX (get_symbol_address) (e, symtab_section, + ELF_R_SYM (info), image_target); + + sym_addr += (s->sh_type == grub_target_to_host32 (SHT_RELA)) ? + grub_target_to_host (r->r_addend) : 0; + + switch (ELF_R_TYPE (info)) + { + case R_ARM_ABS32: + case R_ARM_V4BX: + break; + case R_ARM_THM_CALL: + case R_ARM_THM_JUMP24: + case R_ARM_THM_JUMP19: + if (!(sym_addr & 1)) + ret += 8; + break; + + case R_ARM_CALL: + case R_ARM_JUMP24: + if (sym_addr & 1) + ret += 16; + break; + + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + } + } + return ret; +} +#endif + +/* Deal with relocation information. This function relocates addresses + within the virtual address space starting from 0. So only relative + addresses can be fully resolved. Absolute addresses must be relocated + again by a PE32 relocator when loaded. */ +static void +SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, + Elf_Addr *section_addresses, + Elf_Half section_entsize, Elf_Half num_sections, + const char *strtab, + char *pe_target, Elf_Addr tramp_off, + Elf_Addr got_off, + const struct grub_install_image_target_desc *image_target) +{ + Elf_Half i; + Elf_Shdr *s; +#ifdef MKIMAGE_ELF64 + struct grub_ia64_trampoline *tr = (void *) (pe_target + tramp_off); + grub_uint64_t *gpptr = (void *) (pe_target + got_off); + unsigned unmatched_adr_got_page = 0; +#define MASK19 ((1 << 19) - 1) +#else + grub_uint32_t *tr = (void *) (pe_target + tramp_off); +#endif + + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if ((s->sh_type == grub_host_to_target32 (SHT_REL)) || + (s->sh_type == grub_host_to_target32 (SHT_RELA))) + { + Elf_Rela *r; + Elf_Word rtab_size, r_size, num_rs; + Elf_Off rtab_offset; + Elf_Shdr *symtab_section; + Elf_Word target_section_index; + Elf_Addr target_section_addr; + Elf_Shdr *target_section; + Elf_Word j; + + symtab_section = (Elf_Shdr *) ((char *) sections + + (grub_target_to_host32 (s->sh_link) + * section_entsize)); + target_section_index = grub_target_to_host32 (s->sh_info); + target_section_addr = section_addresses[target_section_index]; + target_section = (Elf_Shdr *) ((char *) sections + + (target_section_index + * section_entsize)); + + grub_util_info ("dealing with the relocation section %s for %s", + strtab + grub_target_to_host32 (s->sh_name), + strtab + grub_target_to_host32 (target_section->sh_name)); + + rtab_size = grub_target_to_host (s->sh_size); + r_size = grub_target_to_host (s->sh_entsize); + rtab_offset = grub_target_to_host (s->sh_offset); + num_rs = rtab_size / r_size; + + for (j = 0, r = (Elf_Rela *) ((char *) e + rtab_offset); + j < num_rs; + j++, r = (Elf_Rela *) ((char *) r + r_size)) + { + Elf_Addr info; + Elf_Addr offset; + Elf_Addr sym_addr; + Elf_Addr *target; + Elf_Addr addend; + + offset = grub_target_to_host (r->r_offset); + target = SUFFIX (get_target_address) (e, target_section, + offset, image_target); + info = grub_target_to_host (r->r_info); + sym_addr = SUFFIX (get_symbol_address) (e, symtab_section, + ELF_R_SYM (info), image_target); + + addend = (s->sh_type == grub_target_to_host32 (SHT_RELA)) ? + grub_target_to_host (r->r_addend) : 0; + + switch (image_target->elf_target) + { + case EM_386: + switch (ELF_R_TYPE (info)) + { + case R_386_NONE: + break; + + case R_386_32: + /* This is absolute. */ + *target = grub_host_to_target32 (grub_target_to_host32 (*target) + + addend + sym_addr); + grub_util_info ("relocating an R_386_32 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) *target, + (unsigned long long) offset); + break; + + case R_386_PC32: + /* This is relative. */ + *target = grub_host_to_target32 (grub_target_to_host32 (*target) + + addend + sym_addr + - target_section_addr - offset + - image_target->vaddr_offset); + grub_util_info ("relocating an R_386_PC32 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) *target, + (unsigned long long) offset); + break; + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; +#ifdef MKIMAGE_ELF64 + case EM_X86_64: + switch (ELF_R_TYPE (info)) + { + + case R_X86_64_NONE: + break; + + case R_X86_64_64: + *target = grub_host_to_target64 (grub_target_to_host64 (*target) + + addend + sym_addr); + grub_util_info ("relocating an R_X86_64_64 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) *target, + (unsigned long long) offset); + break; + + case R_X86_64_PC32: + { + grub_uint32_t *t32 = (grub_uint32_t *) target; + *t32 = grub_host_to_target64 (grub_target_to_host32 (*t32) + + addend + sym_addr + - target_section_addr - offset + - image_target->vaddr_offset); + grub_util_info ("relocating an R_X86_64_PC32 entry to 0x%x at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + *t32, (unsigned long long) offset); + break; + } + + case R_X86_64_PC64: + { + *target = grub_host_to_target64 (grub_target_to_host64 (*target) + + addend + sym_addr + - target_section_addr - offset + - image_target->vaddr_offset); + grub_util_info ("relocating an R_X86_64_PC64 entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) *target, + (unsigned long long) offset); + break; + } + + case R_X86_64_32: + case R_X86_64_32S: + { + grub_uint32_t *t32 = (grub_uint32_t *) target; + *t32 = grub_host_to_target64 (grub_target_to_host32 (*t32) + + addend + sym_addr); + grub_util_info ("relocating an R_X86_64_32(S) entry to 0x%x at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + *t32, (unsigned long long) offset); + break; + } + + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; + case EM_IA_64: + switch (ELF_R_TYPE (info)) + { + case R_IA64_PCREL21B: + { + grub_uint64_t noff; + grub_ia64_make_trampoline (tr, addend + sym_addr); + noff = ((char *) tr - (char *) pe_target + - target_section_addr - (offset & ~3)) >> 4; + tr++; + if (noff & ~MASK19) + grub_util_error ("trampoline offset too big (%" + GRUB_HOST_PRIxLONG_LONG ")", + (unsigned long long) noff); + grub_ia64_add_value_to_slot_20b ((grub_addr_t) target, noff); + } + break; + + case R_IA64_LTOFF22X: + case R_IA64_LTOFF22: + { + Elf_Sym *sym; + + sym = (Elf_Sym *) ((char *) e + + grub_target_to_host (symtab_section->sh_offset) + + ELF_R_SYM (info) * grub_target_to_host (symtab_section->sh_entsize)); + if (ELF_ST_TYPE (sym->st_info) == STT_FUNC) + sym_addr = grub_target_to_host64 (*(grub_uint64_t *) (pe_target + + sym->st_value + - image_target->vaddr_offset)); + } + /* FALLTHROUGH */ + case R_IA64_LTOFF_FPTR22: + *gpptr = grub_host_to_target64 (addend + sym_addr); + grub_ia64_add_value_to_slot_21 ((grub_addr_t) target, + (char *) gpptr - (char *) pe_target + + image_target->vaddr_offset); + gpptr++; + break; + + case R_IA64_GPREL22: + grub_ia64_add_value_to_slot_21 ((grub_addr_t) target, + addend + sym_addr); + break; + case R_IA64_GPREL64I: + grub_ia64_set_immu64 ((grub_addr_t) target, + addend + sym_addr); + break; + case R_IA64_PCREL64LSB: + *target = grub_host_to_target64 (grub_target_to_host64 (*target) + + addend + sym_addr + - target_section_addr - offset + - image_target->vaddr_offset); + break; + + case R_IA64_SEGREL64LSB: + *target = grub_host_to_target64 (grub_target_to_host64 (*target) + + addend + sym_addr - target_section_addr); + break; + case R_IA64_DIR64LSB: + case R_IA64_FPTR64LSB: + *target = grub_host_to_target64 (grub_target_to_host64 (*target) + + addend + sym_addr); + grub_util_info ("relocating a direct entry to 0x%" + GRUB_HOST_PRIxLONG_LONG " at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) + grub_target_to_host64 (*target), + (unsigned long long) offset); + break; + + /* We treat LTOFF22X as LTOFF22, so we can ignore LDXMOV. */ + case R_IA64_LDXMOV: + break; + + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; + case EM_AARCH64: + { + sym_addr += addend; + switch (ELF_R_TYPE (info)) + { + case R_AARCH64_ABS64: + { + *target = grub_host_to_target64 (grub_target_to_host64 (*target) + sym_addr); + } + break; + case R_AARCH64_PREL32: + { + grub_uint32_t *t32 = (grub_uint32_t *) target; + *t32 = grub_host_to_target64 (grub_target_to_host32 (*t32) + + sym_addr + - target_section_addr - offset + - image_target->vaddr_offset); + grub_util_info ("relocating an R_AARCH64_PREL32 entry to 0x%x at the offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + *t32, (unsigned long long) offset); + break; + } + case R_AARCH64_ADD_ABS_LO12_NC: + grub_arm64_set_abs_lo12 ((grub_uint32_t *) target, + sym_addr); + break; + case R_AARCH64_LDST64_ABS_LO12_NC: + grub_arm64_set_abs_lo12_ldst64 ((grub_uint32_t *) target, + sym_addr); + break; + case R_AARCH64_JUMP26: + case R_AARCH64_CALL26: + { + sym_addr -= offset; + sym_addr -= target_section_addr + image_target->vaddr_offset; + if (!grub_arm_64_check_xxxx26_offset (sym_addr)) + grub_util_error ("%s", "CALL26 Relocation out of range"); + + grub_arm64_set_xxxx26_offset((grub_uint32_t *)target, + sym_addr); + } + break; + case R_AARCH64_ADR_GOT_PAGE: + { + Elf64_Rela *rel2; + grub_int64_t gpoffset = (((char *) gpptr - (char *) pe_target + image_target->vaddr_offset) & ~0xfffULL) + - ((offset + target_section_addr + image_target->vaddr_offset) & ~0xfffULL); + unsigned k; + *gpptr = grub_host_to_target64 (sym_addr); + unmatched_adr_got_page++; + if (!grub_arm64_check_hi21_signed (gpoffset)) + grub_util_error ("HI21 out of range"); + grub_arm64_set_hi21((grub_uint32_t *)target, + gpoffset); + for (k = 0, rel2 = (Elf_Rela *) ((char *) r + r_size); + k < num_rs; + k++, rel2 = (Elf_Rela *) ((char *) rel2 + r_size)) + if (ELF_R_SYM (rel2->r_info) + == ELF_R_SYM (r->r_info) + && r->r_addend == rel2->r_addend + && ELF_R_TYPE (rel2->r_info) == R_AARCH64_LD64_GOT_LO12_NC) + { + grub_arm64_set_abs_lo12_ldst64 ((grub_uint32_t *) SUFFIX (get_target_address) (e, target_section, + grub_target_to_host (rel2->r_offset), image_target), + ((char *) gpptr - (char *) pe_target + image_target->vaddr_offset)); + break; + } + if (k >= num_rs) + grub_util_error ("ADR_GOT_PAGE without matching LD64_GOT_LO12_NC"); + gpptr++; + } + break; + case R_AARCH64_LD64_GOT_LO12_NC: + if (unmatched_adr_got_page == 0) + grub_util_error ("LD64_GOT_LO12_NC without matching ADR_GOT_PAGE"); + unmatched_adr_got_page--; + break; + case R_AARCH64_ADR_PREL_PG_HI21: + { + sym_addr &= ~0xfffULL; + sym_addr -= (offset + target_section_addr + image_target->vaddr_offset) & ~0xfffULL; + if (!grub_arm64_check_hi21_signed (sym_addr)) + grub_util_error ("%s", "CALL26 Relocation out of range"); + + grub_arm64_set_hi21((grub_uint32_t *)target, + sym_addr); + } + break; + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; + } +#endif +#if defined(MKIMAGE_ELF32) + case EM_ARM: + { + sym_addr += addend; + sym_addr -= image_target->vaddr_offset; + switch (ELF_R_TYPE (info)) + { + case R_ARM_ABS32: + { + grub_util_info (" ABS32:\toffset=%d\t(0x%08x)", + (int) sym_addr, (int) sym_addr); + /* Data will be naturally aligned */ + if (image_target->id == IMAGE_EFI) + sym_addr += 0x400; + *target = grub_host_to_target32 (grub_target_to_host32 (*target) + sym_addr); + } + break; + /* Happens when compiled with -march=armv4. + Since currently we need at least armv5, keep bx as-is. + */ + case R_ARM_V4BX: + break; + case R_ARM_THM_CALL: + case R_ARM_THM_JUMP24: + case R_ARM_THM_JUMP19: + { + grub_err_t err; + Elf_Sym *sym; + grub_util_info (" THM_JUMP24:\ttarget=0x%08lx\toffset=(0x%08x)", + (unsigned long) ((char *) target + - (char *) e), + sym_addr); + sym = (Elf_Sym *) ((char *) e + + grub_target_to_host (symtab_section->sh_offset) + + ELF_R_SYM (info) * grub_target_to_host (symtab_section->sh_entsize)); + if (ELF_ST_TYPE (sym->st_info) != STT_FUNC) + sym_addr |= 1; + if (!(sym_addr & 1)) + { + grub_uint32_t tr_addr; + grub_int32_t new_offset; + tr_addr = (char *) tr - (char *) pe_target + - target_section_addr; + new_offset = sym_addr - tr_addr - 12; + + if (!grub_arm_jump24_check_offset (new_offset)) + return grub_util_error ("jump24 relocation out of range"); + + tr[0] = grub_host_to_target32 (0x46c04778); /* bx pc; nop */ + tr[1] = grub_host_to_target32 (((new_offset >> 2) & 0xffffff) | 0xea000000); /* b new_offset */ + tr += 2; + sym_addr = tr_addr | 1; + } + sym_addr -= offset; + /* Thumb instructions can be 16-bit aligned */ + if (ELF_R_TYPE (info) == R_ARM_THM_JUMP19) + err = grub_arm_reloc_thm_jump19 ((grub_uint16_t *) target, sym_addr); + else + err = grub_arm_reloc_thm_call ((grub_uint16_t *) target, + sym_addr); + if (err) + grub_util_error ("%s", grub_errmsg); + } + break; + + case R_ARM_CALL: + case R_ARM_JUMP24: + { + grub_err_t err; + grub_util_info (" JUMP24:\ttarget=0x%08lx\toffset=(0x%08x)", (unsigned long) ((char *) target - (char *) e), sym_addr); + if (sym_addr & 1) + { + grub_uint32_t tr_addr; + grub_int32_t new_offset; + tr_addr = (char *) tr - (char *) pe_target + - target_section_addr; + new_offset = sym_addr - tr_addr - 12; + + /* There is no immediate version of bx, only register one... */ + tr[0] = grub_host_to_target32 (0xe59fc004); /* ldr ip, [pc, #4] */ + tr[1] = grub_host_to_target32 (0xe08cc00f); /* add ip, ip, pc */ + tr[2] = grub_host_to_target32 (0xe12fff1c); /* bx ip */ + tr[3] = grub_host_to_target32 (new_offset | 1); + tr += 4; + sym_addr = tr_addr; + } + sym_addr -= offset; + err = grub_arm_reloc_jump24 (target, + sym_addr); + if (err) + grub_util_error ("%s", grub_errmsg); + } + break; + + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; + } +#endif /* MKIMAGE_ELF32 */ + default: + grub_util_error ("unknown architecture type %d", + image_target->elf_target); + } + } + } +} + +/* Add a PE32's fixup entry for a relocation. Return the resulting address + after having written to the file OUT. */ +static Elf_Addr +add_fixup_entry (struct fixup_block_list **cblock, grub_uint16_t type, + Elf_Addr addr, int flush, Elf_Addr current_address, + const struct grub_install_image_target_desc *image_target) +{ + struct grub_pe32_fixup_block *b; + + b = &((*cblock)->b); + + /* First, check if it is necessary to write out the current block. */ + if ((*cblock)->state) + { + if (flush || addr < b->page_rva || b->page_rva + 0x1000 <= addr) + { + grub_uint32_t size; + + if (flush) + { + /* Add as much padding as necessary to align the address + with a section boundary. */ + Elf_Addr next_address; + unsigned padding_size; + size_t cur_index; + + next_address = current_address + b->block_size; + padding_size = ((ALIGN_UP (next_address, image_target->section_align) + - next_address) + >> 1); + cur_index = ((b->block_size - sizeof (*b)) >> 1); + grub_util_info ("adding %d padding fixup entries", padding_size); + while (padding_size--) + { + b->entries[cur_index++] = 0; + b->block_size += 2; + } + } + else while (b->block_size & (8 - 1)) + { + /* If not aligned with a 32-bit boundary, add + a padding entry. */ + size_t cur_index; + + grub_util_info ("adding a padding fixup entry"); + cur_index = ((b->block_size - sizeof (*b)) >> 1); + b->entries[cur_index] = 0; + b->block_size += 2; + } + + /* Flush it. */ + grub_util_info ("writing %d bytes of a fixup block starting at 0x%x", + b->block_size, b->page_rva); + size = b->block_size; + current_address += size; + b->page_rva = grub_host_to_target32 (b->page_rva); + b->block_size = grub_host_to_target32 (b->block_size); + (*cblock)->next = xmalloc (sizeof (**cblock) + 2 * 0x1000); + memset ((*cblock)->next, 0, sizeof (**cblock) + 2 * 0x1000); + *cblock = (*cblock)->next; + } + } + + b = &((*cblock)->b); + + if (! flush) + { + grub_uint16_t entry; + size_t cur_index; + + /* If not allocated yet, allocate a block with enough entries. */ + if (! (*cblock)->state) + { + (*cblock)->state = 1; + + /* The spec does not mention the requirement of a Page RVA. + Here, align the address with a 4K boundary for safety. */ + b->page_rva = (addr & ~(0x1000 - 1)); + b->block_size = sizeof (*b); + } + + /* Sanity check. */ + if (b->block_size >= sizeof (*b) + 2 * 0x1000) + grub_util_error ("too many fixup entries"); + + /* Add a new entry. */ + cur_index = ((b->block_size - sizeof (*b)) >> 1); + entry = GRUB_PE32_FIXUP_ENTRY (type, addr - b->page_rva); + b->entries[cur_index] = grub_host_to_target16 (entry); + b->block_size += 2; + } + + return current_address; +} + +struct raw_reloc +{ + struct raw_reloc *next; + grub_uint32_t offset; + enum raw_reloc_type { + RAW_RELOC_NONE = -1, + RAW_RELOC_32 = 0, + RAW_RELOC_MAX = 1, + } type; +}; + +struct translate_context +{ + /* PE */ + struct fixup_block_list *lst, *lst0; + Elf_Addr current_address; + + /* Raw */ + struct raw_reloc *raw_relocs; +}; + +static void +translate_reloc_start (struct translate_context *ctx, + const struct grub_install_image_target_desc *image_target) +{ + grub_memset (ctx, 0, sizeof (*ctx)); + if (image_target->id == IMAGE_EFI) + { + ctx->lst = ctx->lst0 = xmalloc (sizeof (*ctx->lst) + 2 * 0x1000); + memset (ctx->lst, 0, sizeof (*ctx->lst) + 2 * 0x1000); + ctx->current_address = 0; + } +} + +static void +translate_relocation_pe (struct translate_context *ctx, + Elf_Addr addr, + Elf_Addr info, + const struct grub_install_image_target_desc *image_target) +{ + /* Necessary to relocate only absolute addresses. */ + switch (image_target->elf_target) + { + case EM_386: + if (ELF_R_TYPE (info) == R_386_32) + { + grub_util_info ("adding a relocation entry for 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) addr); + ctx->current_address + = add_fixup_entry (&ctx->lst, + GRUB_PE32_REL_BASED_HIGHLOW, + addr, 0, ctx->current_address, + image_target); + } + break; + case EM_X86_64: + if ((ELF_R_TYPE (info) == R_X86_64_32) || + (ELF_R_TYPE (info) == R_X86_64_32S)) + { + grub_util_error ("can\'t add fixup entry for R_X86_64_32(S)"); + } + else if (ELF_R_TYPE (info) == R_X86_64_64) + { + grub_util_info ("adding a relocation entry for 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) addr); + ctx->current_address + = add_fixup_entry (&ctx->lst, + GRUB_PE32_REL_BASED_DIR64, + addr, + 0, ctx->current_address, + image_target); + } + break; + case EM_IA_64: + switch (ELF_R_TYPE (info)) + { + case R_IA64_PCREL64LSB: + case R_IA64_LDXMOV: + case R_IA64_PCREL21B: + case R_IA64_LTOFF_FPTR22: + case R_IA64_LTOFF22X: + case R_IA64_LTOFF22: + case R_IA64_GPREL22: + case R_IA64_GPREL64I: + case R_IA64_SEGREL64LSB: + break; + + case R_IA64_FPTR64LSB: + case R_IA64_DIR64LSB: +#if 1 + { + grub_util_info ("adding a relocation entry for 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) addr); + ctx->current_address + = add_fixup_entry (&ctx->lst, + GRUB_PE32_REL_BASED_DIR64, + addr, + 0, ctx->current_address, + image_target); + } +#endif + break; + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; + case EM_AARCH64: + switch (ELF_R_TYPE (info)) + { + case R_AARCH64_ABS64: + { + ctx->current_address + = add_fixup_entry (&ctx->lst, + GRUB_PE32_REL_BASED_DIR64, + addr, 0, ctx->current_address, + image_target); + } + break; + /* Relative relocations do not require fixup entries. */ + case R_AARCH64_CALL26: + case R_AARCH64_JUMP26: + case R_AARCH64_PREL32: + break; + /* Page-relative relocations do not require fixup entries. */ + case R_AARCH64_ADR_PREL_PG_HI21: + /* We page-align the whole kernel, so no need + for fixup entries. + */ + case R_AARCH64_ADD_ABS_LO12_NC: + case R_AARCH64_LDST64_ABS_LO12_NC: + break; + + /* GOT is relocated separately. */ + case R_AARCH64_ADR_GOT_PAGE: + case R_AARCH64_LD64_GOT_LO12_NC: + break; + + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; + break; +#if defined(MKIMAGE_ELF32) + case EM_ARM: + switch (ELF_R_TYPE (info)) + { + case R_ARM_V4BX: + /* Relative relocations do not require fixup entries. */ + case R_ARM_JUMP24: + case R_ARM_THM_CALL: + case R_ARM_THM_JUMP19: + case R_ARM_THM_JUMP24: + case R_ARM_CALL: + { + grub_util_info (" %s: not adding fixup: 0x%08x : 0x%08x", __FUNCTION__, (unsigned int) addr, (unsigned int) ctx->current_address); + } + break; + /* Create fixup entry for PE/COFF loader */ + case R_ARM_ABS32: + { + ctx->current_address + = add_fixup_entry (&ctx->lst, + GRUB_PE32_REL_BASED_HIGHLOW, + addr, 0, ctx->current_address, + image_target); + } + break; + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; +#endif /* defined(MKIMAGE_ELF32) */ + default: + grub_util_error ("unknown machine type 0x%x", image_target->elf_target); + } +} + +static enum raw_reloc_type +classify_raw_reloc (Elf_Addr info, + const struct grub_install_image_target_desc *image_target) +{ + /* Necessary to relocate only absolute addresses. */ + switch (image_target->elf_target) + { + case EM_ARM: + switch (ELF_R_TYPE (info)) + { + case R_ARM_V4BX: + case R_ARM_JUMP24: + case R_ARM_THM_CALL: + case R_ARM_THM_JUMP19: + case R_ARM_THM_JUMP24: + case R_ARM_CALL: + return RAW_RELOC_NONE; + case R_ARM_ABS32: + return RAW_RELOC_32; + default: + grub_util_error (_("relocation 0x%x is not implemented yet"), + (unsigned int) ELF_R_TYPE (info)); + break; + } + break; + default: + grub_util_error ("unknown machine type 0x%x", image_target->elf_target); + } +} + +static void +translate_relocation_raw (struct translate_context *ctx, + Elf_Addr addr, + Elf_Addr info, + const struct grub_install_image_target_desc *image_target) +{ + enum raw_reloc_type class = classify_raw_reloc (info, image_target); + struct raw_reloc *rel; + if (class == RAW_RELOC_NONE) + return; + rel = xmalloc (sizeof (*rel)); + rel->next = ctx->raw_relocs; + rel->type = class; + rel->offset = addr; + ctx->raw_relocs = rel; +} + +static void +translate_relocation (struct translate_context *ctx, + Elf_Addr addr, + Elf_Addr info, + const struct grub_install_image_target_desc *image_target) +{ + if (image_target->id == IMAGE_EFI) + translate_relocation_pe (ctx, addr, info, image_target); + else + translate_relocation_raw (ctx, addr, info, image_target); +} + +static void +finish_reloc_translation_pe (struct translate_context *ctx, struct grub_mkimage_layout *layout, + const struct grub_install_image_target_desc *image_target) +{ + ctx->current_address = add_fixup_entry (&ctx->lst, 0, 0, 1, ctx->current_address, image_target); + + { + grub_uint8_t *ptr; + layout->reloc_section = ptr = xmalloc (ctx->current_address); + for (ctx->lst = ctx->lst0; ctx->lst; ctx->lst = ctx->lst->next) + if (ctx->lst->state) + { + memcpy (ptr, &ctx->lst->b, grub_target_to_host32 (ctx->lst->b.block_size)); + ptr += grub_target_to_host32 (ctx->lst->b.block_size); + } + assert ((ctx->current_address + (grub_uint8_t *) layout->reloc_section) == ptr); + } + + for (ctx->lst = ctx->lst0; ctx->lst; ) + { + struct fixup_block_list *next; + next = ctx->lst->next; + free (ctx->lst); + ctx->lst = next; + } + + layout->reloc_size = ctx->current_address; + if (image_target->elf_target == EM_ARM && layout->reloc_size > GRUB_KERNEL_ARM_STACK_SIZE) + grub_util_error ("Reloc section (%d) is bigger than stack size (%d). " + "This breaks assembly assumptions. Please increase stack size", + (int) layout->reloc_size, + (int) GRUB_KERNEL_ARM_STACK_SIZE); +} + +/* + Layout: + + + + + ... + + + each relocation starts with 32-bit offset. Rest depends on relocation. + mkimage stops when it sees first unknown type or end marker. + This allows images to be created with mismatched mkimage and + kernel as long as no relocations are present in kernel that mkimage + isn't aware of (in which case mkimage aborts). + This also allows simple assembly to do the relocs. +*/ + +#define RAW_SEPARATOR 0xfffffffe +#define RAW_END_MARKER 0xffffffff + +static void +finish_reloc_translation_raw (struct translate_context *ctx, struct grub_mkimage_layout *layout, + const struct grub_install_image_target_desc *image_target) +{ + size_t count = 0, sz; + enum raw_reloc_type highest = RAW_RELOC_NONE; + enum raw_reloc_type curtype; + struct raw_reloc *cur; + grub_uint32_t *p; + if (!ctx->raw_relocs) + { + layout->reloc_section = p = xmalloc (sizeof (grub_uint32_t)); + p[0] = RAW_END_MARKER; + layout->reloc_size = sizeof (grub_uint32_t); + return; + } + for (cur = ctx->raw_relocs; cur; cur = cur->next) + { + count++; + if (cur->type > highest) + highest = cur->type; + } + /* highest separators, count relocations and one end marker. */ + sz = (highest + count + 1) * sizeof (grub_uint32_t); + layout->reloc_section = p = xmalloc (sz); + for (curtype = 0; curtype <= highest; curtype++) + { + /* Support for special cases would go here. */ + for (cur = ctx->raw_relocs; cur; cur = cur->next) + if (cur->type == curtype) + { + *p++ = cur->offset; + } + *p++ = RAW_SEPARATOR; + } + *--p = RAW_END_MARKER; + layout->reloc_size = sz; +} + +static void +finish_reloc_translation (struct translate_context *ctx, struct grub_mkimage_layout *layout, + const struct grub_install_image_target_desc *image_target) +{ + if (image_target->id == IMAGE_EFI) + finish_reloc_translation_pe (ctx, layout, image_target); + else + finish_reloc_translation_raw (ctx, layout, image_target); +} + + +static void +create_u64_fixups (struct translate_context *ctx, + Elf_Addr jumpers, grub_size_t njumpers, + const struct grub_install_image_target_desc *image_target) +{ + unsigned i; + assert (image_target->id == IMAGE_EFI); + for (i = 0; i < njumpers; i++) + ctx->current_address = add_fixup_entry (&ctx->lst, + GRUB_PE32_REL_BASED_DIR64, + jumpers + 8 * i, + 0, ctx->current_address, + image_target); +} + +/* Make a .reloc section. */ +static void +make_reloc_section (Elf_Ehdr *e, struct grub_mkimage_layout *layout, + Elf_Addr *section_addresses, Elf_Shdr *sections, + Elf_Half section_entsize, Elf_Half num_sections, + const char *strtab, + const struct grub_install_image_target_desc *image_target) +{ + unsigned i; + Elf_Shdr *s; + struct translate_context ctx; + + translate_reloc_start (&ctx, image_target); + + for (i = 0, s = sections; i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if ((grub_target_to_host32 (s->sh_type) == SHT_REL) || + (grub_target_to_host32 (s->sh_type) == SHT_RELA)) + { + Elf_Rel *r; + Elf_Word rtab_size, r_size, num_rs; + Elf_Off rtab_offset; + Elf_Addr section_address; + Elf_Word j; + + grub_util_info ("translating the relocation section %s", + strtab + grub_le_to_cpu32 (s->sh_name)); + + rtab_size = grub_target_to_host (s->sh_size); + r_size = grub_target_to_host (s->sh_entsize); + rtab_offset = grub_target_to_host (s->sh_offset); + num_rs = rtab_size / r_size; + + section_address = section_addresses[grub_le_to_cpu32 (s->sh_info)]; + + for (j = 0, r = (Elf_Rel *) ((char *) e + rtab_offset); + j < num_rs; + j++, r = (Elf_Rel *) ((char *) r + r_size)) + { + Elf_Addr info; + Elf_Addr offset; + Elf_Addr addr; + + offset = grub_target_to_host (r->r_offset); + info = grub_target_to_host (r->r_info); + + addr = section_address + offset; + + translate_relocation (&ctx, addr, info, image_target); + } + } + + if (image_target->elf_target == EM_IA_64) + create_u64_fixups (&ctx, + layout->ia64jmp_off + + image_target->vaddr_offset, + 2 * layout->ia64jmpnum, + image_target); + if (image_target->elf_target == EM_IA_64 || image_target->elf_target == EM_AARCH64) + create_u64_fixups (&ctx, + layout->got_off + + image_target->vaddr_offset, + (layout->got_size / 8), + image_target); + + finish_reloc_translation (&ctx, layout, image_target); +} + +/* Determine if this section is a text section. Return false if this + section is not allocated. */ +static int +SUFFIX (is_text_section) (Elf_Shdr *s, const struct grub_install_image_target_desc *image_target) +{ + if (!is_relocatable (image_target) + && grub_target_to_host32 (s->sh_type) != SHT_PROGBITS) + return 0; + return ((grub_target_to_host (s->sh_flags) & (SHF_EXECINSTR | SHF_ALLOC)) + == (SHF_EXECINSTR | SHF_ALLOC)); +} + +/* Determine if this section is a data section. */ +static int +SUFFIX (is_data_section) (Elf_Shdr *s, const struct grub_install_image_target_desc *image_target) +{ + if (!is_relocatable (image_target) + && grub_target_to_host32 (s->sh_type) != SHT_PROGBITS) + return 0; + return ((grub_target_to_host (s->sh_flags) & (SHF_EXECINSTR | SHF_ALLOC)) + == SHF_ALLOC) && !(grub_target_to_host32 (s->sh_type) == SHT_NOBITS); +} + +static int +SUFFIX (is_bss_section) (Elf_Shdr *s, const struct grub_install_image_target_desc *image_target) +{ + if (!is_relocatable (image_target)) + return 0; + return ((grub_target_to_host (s->sh_flags) & (SHF_EXECINSTR | SHF_ALLOC)) + == SHF_ALLOC) && (grub_target_to_host32 (s->sh_type) == SHT_NOBITS); +} + +/* Return if the ELF header is valid. */ +static int +SUFFIX (check_elf_header) (Elf_Ehdr *e, size_t size, const struct grub_install_image_target_desc *image_target) +{ + if (size < sizeof (*e) + || e->e_ident[EI_MAG0] != ELFMAG0 + || e->e_ident[EI_MAG1] != ELFMAG1 + || e->e_ident[EI_MAG2] != ELFMAG2 + || e->e_ident[EI_MAG3] != ELFMAG3 + || e->e_ident[EI_VERSION] != EV_CURRENT + || e->e_ident[EI_CLASS] != ELFCLASSXX + || e->e_version != grub_host_to_target32 (EV_CURRENT)) + return 0; + + return 1; +} + +static Elf_Addr +SUFFIX (put_section) (Elf_Shdr *s, int i, + Elf_Addr current_address, + Elf_Addr *section_addresses, + const char *strtab, + const struct grub_install_image_target_desc *image_target) +{ + Elf_Word align = grub_host_to_target_addr (s->sh_addralign); + const char *name = strtab + grub_host_to_target32 (s->sh_name); + + if (align) + current_address = ALIGN_UP (current_address + image_target->vaddr_offset, + align) + - image_target->vaddr_offset; + + grub_util_info ("locating the section %s at 0x%" + GRUB_HOST_PRIxLONG_LONG, + name, (unsigned long long) current_address); + if (!is_relocatable (image_target)) + current_address = grub_host_to_target_addr (s->sh_addr) + - image_target->link_addr; + section_addresses[i] = current_address; + current_address += grub_host_to_target_addr (s->sh_size); + return current_address; +} + +/* Locate section addresses by merging code sections and data sections + into .text and .data, respectively. Return the array of section + addresses. */ +static Elf_Addr * +SUFFIX (locate_sections) (Elf_Ehdr *e, const char *kernel_path, + Elf_Shdr *sections, Elf_Half section_entsize, + Elf_Half num_sections, const char *strtab, + struct grub_mkimage_layout *layout, + const struct grub_install_image_target_desc *image_target) +{ + int i; + Elf_Addr *section_addresses; + Elf_Shdr *s; + + layout->align = 1; + /* Page-aligning simplifies relocation handling. */ + if (image_target->elf_target == EM_AARCH64) + layout->align = 4096; + + section_addresses = xmalloc (sizeof (*section_addresses) * num_sections); + memset (section_addresses, 0, sizeof (*section_addresses) * num_sections); + + layout->kernel_size = 0; + + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if ((grub_target_to_host (s->sh_flags) & SHF_ALLOC) + && grub_host_to_target32 (s->sh_addralign) > layout->align) + layout->align = grub_host_to_target32 (s->sh_addralign); + + + /* .text */ + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if (SUFFIX (is_text_section) (s, image_target)) + { + layout->kernel_size = SUFFIX (put_section) (s, i, + layout->kernel_size, + section_addresses, + strtab, + image_target); + if (!is_relocatable (image_target) && + grub_host_to_target_addr (s->sh_addr) != image_target->link_addr) + { + char *msg + = grub_xasprintf (_("`%s' is miscompiled: its start address is 0x%llx" + " instead of 0x%llx: ld.gold bug?"), + kernel_path, + (unsigned long long) grub_host_to_target_addr (s->sh_addr), + (unsigned long long) image_target->link_addr); + grub_util_error ("%s", msg); + } + } + + layout->kernel_size = ALIGN_UP (layout->kernel_size + image_target->vaddr_offset, + image_target->section_align) + - image_target->vaddr_offset; + layout->exec_size = layout->kernel_size; + + /* .data */ + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if (SUFFIX (is_data_section) (s, image_target)) + layout->kernel_size = SUFFIX (put_section) (s, i, + layout->kernel_size, + section_addresses, + strtab, + image_target); + +#ifdef MKIMAGE_ELF32 + if (image_target->elf_target == EM_ARM) + { + grub_size_t tramp; + layout->kernel_size = ALIGN_UP (layout->kernel_size + image_target->vaddr_offset, + image_target->section_align) - image_target->vaddr_offset; + + layout->kernel_size = ALIGN_UP (layout->kernel_size, 16); + + tramp = arm_get_trampoline_size (e, sections, section_entsize, + num_sections, image_target); + + layout->tramp_off = layout->kernel_size; + layout->kernel_size += ALIGN_UP (tramp, 16); + } +#endif + + layout->bss_start = layout->kernel_size; + layout->end = layout->kernel_size; + + /* .bss */ + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if (SUFFIX (is_bss_section) (s, image_target)) + layout->end = SUFFIX (put_section) (s, i, + layout->end, + section_addresses, + strtab, + image_target); + + layout->end = ALIGN_UP (layout->end + image_target->vaddr_offset, + image_target->section_align) - image_target->vaddr_offset; + /* Explicitly initialize BSS + when producing PE32 to avoid a bug in EFI implementations. + Platforms other than EFI and U-boot shouldn't have .bss in + their binaries as we build with -Wl,-Ttext. + */ + if (image_target->id != IMAGE_UBOOT) + layout->kernel_size = layout->end; + + return section_addresses; +} + +char * +SUFFIX (grub_mkimage_load_image) (const char *kernel_path, + size_t total_module_size, + struct grub_mkimage_layout *layout, + const struct grub_install_image_target_desc *image_target) +{ + char *kernel_img, *out_img; + const char *strtab; + Elf_Ehdr *e; + Elf_Shdr *sections; + Elf_Addr *section_addresses; + Elf_Addr *section_vaddresses; + int i; + Elf_Shdr *s; + Elf_Half num_sections; + Elf_Off section_offset; + Elf_Half section_entsize; + grub_size_t kernel_size; + Elf_Shdr *symtab_section = 0; + + grub_memset (layout, 0, sizeof (*layout)); + + layout->start_address = 0; + + kernel_size = grub_util_get_image_size (kernel_path); + kernel_img = xmalloc (kernel_size); + grub_util_load_image (kernel_path, kernel_img); + + e = (Elf_Ehdr *) kernel_img; + if (! SUFFIX (check_elf_header) (e, kernel_size, image_target)) + grub_util_error ("invalid ELF header"); + + section_offset = grub_target_to_host (e->e_shoff); + section_entsize = grub_target_to_host16 (e->e_shentsize); + num_sections = grub_target_to_host16 (e->e_shnum); + + if (kernel_size < section_offset + (grub_uint32_t) section_entsize * num_sections) + grub_util_error (_("premature end of file %s"), kernel_path); + + sections = (Elf_Shdr *) (kernel_img + section_offset); + + /* Relocate sections then symbols in the virtual address space. */ + s = (Elf_Shdr *) ((char *) sections + + grub_host_to_target16 (e->e_shstrndx) * section_entsize); + strtab = (char *) e + grub_host_to_target_addr (s->sh_offset); + + section_addresses = SUFFIX (locate_sections) (e, kernel_path, + sections, section_entsize, + num_sections, strtab, + layout, + image_target); + + section_vaddresses = xmalloc (sizeof (*section_addresses) * num_sections); + + for (i = 0; i < num_sections; i++) + section_vaddresses[i] = section_addresses[i] + image_target->vaddr_offset; + + if (!is_relocatable (image_target)) + { + Elf_Addr current_address = layout->kernel_size; + + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if (grub_target_to_host32 (s->sh_type) == SHT_NOBITS) + { + Elf_Word sec_align = grub_host_to_target_addr (s->sh_addralign); + const char *name = strtab + grub_host_to_target32 (s->sh_name); + + if (sec_align) + current_address = ALIGN_UP (current_address + + image_target->vaddr_offset, + sec_align) + - image_target->vaddr_offset; + + grub_util_info ("locating the section %s at 0x%" + GRUB_HOST_PRIxLONG_LONG, + name, (unsigned long long) current_address); + if (!is_relocatable (image_target)) + current_address = grub_host_to_target_addr (s->sh_addr) + - image_target->link_addr; + + section_vaddresses[i] = current_address + + image_target->vaddr_offset; + current_address += grub_host_to_target_addr (s->sh_size); + } + current_address = ALIGN_UP (current_address + image_target->vaddr_offset, + image_target->section_align) + - image_target->vaddr_offset; + layout->bss_size = current_address - layout->kernel_size; + } + else + layout->bss_size = 0; + + if (image_target->id == IMAGE_SPARC64_AOUT + || image_target->id == IMAGE_SPARC64_RAW + || image_target->id == IMAGE_UBOOT + || image_target->id == IMAGE_SPARC64_CDCORE) + layout->kernel_size = ALIGN_UP (layout->kernel_size, image_target->mod_align); + + if (is_relocatable (image_target)) + { + symtab_section = NULL; + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if (s->sh_type == grub_host_to_target32 (SHT_SYMTAB)) + { + symtab_section = s; + break; + } + if (! symtab_section) + grub_util_error ("%s", _("no symbol table")); +#ifdef MKIMAGE_ELF64 + if (image_target->elf_target == EM_IA_64) + { + grub_size_t tramp; + + layout->kernel_size = ALIGN_UP (layout->kernel_size, 16); + + grub_ia64_dl_get_tramp_got_size (e, &tramp, &layout->got_size); + + layout->tramp_off = layout->kernel_size; + layout->kernel_size += ALIGN_UP (tramp, 16); + + layout->ia64jmp_off = layout->kernel_size; + layout->ia64jmpnum = SUFFIX (count_funcs) (e, symtab_section, + image_target); + layout->kernel_size += 16 * layout->ia64jmpnum; + + layout->got_off = layout->kernel_size; + layout->kernel_size += ALIGN_UP (layout->got_size, 16); + } + if (image_target->elf_target == EM_AARCH64) + { + grub_size_t tramp; + + layout->kernel_size = ALIGN_UP (layout->kernel_size, 16); + + grub_arm64_dl_get_tramp_got_size (e, &tramp, &layout->got_size); + + layout->got_off = layout->kernel_size; + layout->kernel_size += ALIGN_UP (layout->got_size, 16); + } +#endif + } + else + { + layout->reloc_size = 0; + layout->reloc_section = NULL; + } + + out_img = xmalloc (layout->kernel_size + total_module_size); + memset (out_img, 0, layout->kernel_size + total_module_size); + + if (is_relocatable (image_target)) + { + layout->start_address = SUFFIX (relocate_symbols) (e, sections, symtab_section, + section_vaddresses, section_entsize, + num_sections, + (char *) out_img + layout->ia64jmp_off, + layout->ia64jmp_off + + image_target->vaddr_offset, + layout->bss_start, + layout->end, + image_target); + if (layout->start_address == (Elf_Addr) -1) + grub_util_error ("start symbol is not defined"); + + /* Resolve addresses in the virtual address space. */ + SUFFIX (relocate_addresses) (e, sections, section_addresses, + section_entsize, + num_sections, strtab, + out_img, layout->tramp_off, + layout->got_off, + image_target); + + make_reloc_section (e, layout, + section_vaddresses, sections, + section_entsize, num_sections, + strtab, + image_target); + if (image_target->id != IMAGE_EFI) + { + out_img = xrealloc (out_img, layout->kernel_size + total_module_size + + ALIGN_UP (layout->reloc_size, image_target->mod_align)); + memcpy (out_img + layout->kernel_size, layout->reloc_section, layout->reloc_size); + memset (out_img + layout->kernel_size + layout->reloc_size, 0, + total_module_size + ALIGN_UP (layout->reloc_size, image_target->mod_align) - layout->reloc_size); + layout->kernel_size += ALIGN_UP (layout->reloc_size, image_target->mod_align); + } + } + + for (i = 0, s = sections; + i < num_sections; + i++, s = (Elf_Shdr *) ((char *) s + section_entsize)) + if (SUFFIX (is_data_section) (s, image_target) + /* Explicitly initialize BSS + when producing PE32 to avoid a bug in EFI implementations. + Platforms other than EFI and U-boot shouldn't have .bss in + their binaries as we build with -Wl,-Ttext. + */ + || (SUFFIX (is_bss_section) (s, image_target) && (image_target->id != IMAGE_UBOOT)) + || SUFFIX (is_text_section) (s, image_target)) + { + if (grub_target_to_host32 (s->sh_type) == SHT_NOBITS) + memset (out_img + section_addresses[i], 0, + grub_host_to_target_addr (s->sh_size)); + else + memcpy (out_img + section_addresses[i], + kernel_img + grub_host_to_target_addr (s->sh_offset), + grub_host_to_target_addr (s->sh_size)); + } + free (kernel_img); + + free (section_vaddresses); + free (section_addresses); + + return out_img; +} diff --git a/util/grub-mklayout.c b/util/grub-mklayout.c new file mode 100644 index 000000000..d171c2700 --- /dev/null +++ b/util/grub-mklayout.c @@ -0,0 +1,529 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include + +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" + +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +struct arguments +{ + char *input; + char *output; + int verbosity; +}; + +static struct argp_option options[] = { + {"input", 'i', N_("FILE"), 0, + N_("set input filename. Default is STDIN"), 0}, + {"output", 'o', N_("FILE"), 0, + N_("set output filename. Default is STDOUT"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +struct console_grub_equivalence +{ + const char *layout; + grub_uint32_t grub; +}; + +static struct console_grub_equivalence console_grub_equivalences_shift[] = { + {"KP_0", '0'}, + {"KP_1", '1'}, + {"KP_2", '2'}, + {"KP_3", '3'}, + {"KP_4", '4'}, + {"KP_5", '5'}, + {"KP_6", '6'}, + {"KP_7", '7'}, + {"KP_8", '8'}, + {"KP_9", '9'}, + {"KP_Period", '.'}, + + {NULL, '\0'} +}; + +static struct console_grub_equivalence console_grub_equivalences_unshift[] = { + {"KP_0", GRUB_TERM_KEY_INSERT}, + {"KP_1", GRUB_TERM_KEY_END}, + {"KP_2", GRUB_TERM_KEY_DOWN}, + {"KP_3", GRUB_TERM_KEY_NPAGE}, + {"KP_4", GRUB_TERM_KEY_LEFT}, + {"KP_5", GRUB_TERM_KEY_CENTER}, + {"KP_6", GRUB_TERM_KEY_RIGHT}, + {"KP_7", GRUB_TERM_KEY_HOME}, + {"KP_8", GRUB_TERM_KEY_UP}, + {"KP_9", GRUB_TERM_KEY_PPAGE}, + {"KP_Period", GRUB_TERM_KEY_DC}, + + {NULL, '\0'} +}; + +static struct console_grub_equivalence console_grub_equivalences_common[] = { + {"Escape", GRUB_TERM_ESC}, + {"Tab", GRUB_TERM_TAB}, + {"Delete", GRUB_TERM_BACKSPACE}, + + {"KP_Enter", '\n'}, + {"Return", '\n'}, + + {"KP_Multiply", '*'}, + {"KP_Subtract", '-'}, + {"KP_Add", '+'}, + {"KP_Divide", '/'}, + + {"F1", GRUB_TERM_KEY_F1}, + {"F2", GRUB_TERM_KEY_F2}, + {"F3", GRUB_TERM_KEY_F3}, + {"F4", GRUB_TERM_KEY_F4}, + {"F5", GRUB_TERM_KEY_F5}, + {"F6", GRUB_TERM_KEY_F6}, + {"F7", GRUB_TERM_KEY_F7}, + {"F8", GRUB_TERM_KEY_F8}, + {"F9", GRUB_TERM_KEY_F9}, + {"F10", GRUB_TERM_KEY_F10}, + {"F11", GRUB_TERM_KEY_F11}, + {"F12", GRUB_TERM_KEY_F12}, + {"F13", GRUB_TERM_KEY_F1 | GRUB_TERM_SHIFT}, + {"F14", GRUB_TERM_KEY_F2 | GRUB_TERM_SHIFT}, + {"F15", GRUB_TERM_KEY_F3 | GRUB_TERM_SHIFT}, + {"F16", GRUB_TERM_KEY_F4 | GRUB_TERM_SHIFT}, + {"F17", GRUB_TERM_KEY_F5 | GRUB_TERM_SHIFT}, + {"F18", GRUB_TERM_KEY_F6 | GRUB_TERM_SHIFT}, + {"F19", GRUB_TERM_KEY_F7 | GRUB_TERM_SHIFT}, + {"F20", GRUB_TERM_KEY_F8 | GRUB_TERM_SHIFT}, + {"F21", GRUB_TERM_KEY_F9 | GRUB_TERM_SHIFT}, + {"F22", GRUB_TERM_KEY_F10 | GRUB_TERM_SHIFT}, + {"F23", GRUB_TERM_KEY_F11 | GRUB_TERM_SHIFT}, + {"F24", GRUB_TERM_KEY_F12 | GRUB_TERM_SHIFT}, + {"Console_13", GRUB_TERM_KEY_F1 | GRUB_TERM_ALT}, + {"Console_14", GRUB_TERM_KEY_F2 | GRUB_TERM_ALT}, + {"Console_15", GRUB_TERM_KEY_F3 | GRUB_TERM_ALT}, + {"Console_16", GRUB_TERM_KEY_F4 | GRUB_TERM_ALT}, + {"Console_17", GRUB_TERM_KEY_F5 | GRUB_TERM_ALT}, + {"Console_18", GRUB_TERM_KEY_F6 | GRUB_TERM_ALT}, + {"Console_19", GRUB_TERM_KEY_F7 | GRUB_TERM_ALT}, + {"Console_20", GRUB_TERM_KEY_F8 | GRUB_TERM_ALT}, + {"Console_21", GRUB_TERM_KEY_F9 | GRUB_TERM_ALT}, + {"Console_22", GRUB_TERM_KEY_F10 | GRUB_TERM_ALT}, + {"Console_23", GRUB_TERM_KEY_F11 | GRUB_TERM_ALT}, + {"Console_24", GRUB_TERM_KEY_F12 | GRUB_TERM_ALT}, + {"Console_25", GRUB_TERM_KEY_F1 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_26", GRUB_TERM_KEY_F2 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_27", GRUB_TERM_KEY_F3 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_28", GRUB_TERM_KEY_F4 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_29", GRUB_TERM_KEY_F5 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_30", GRUB_TERM_KEY_F6 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_31", GRUB_TERM_KEY_F7 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_32", GRUB_TERM_KEY_F8 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_33", GRUB_TERM_KEY_F9 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_34", GRUB_TERM_KEY_F10 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_35", GRUB_TERM_KEY_F11 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + {"Console_36", GRUB_TERM_KEY_F12 | GRUB_TERM_SHIFT | GRUB_TERM_ALT}, + + {"Insert", GRUB_TERM_KEY_INSERT}, + {"Down", GRUB_TERM_KEY_DOWN}, + {"Up", GRUB_TERM_KEY_UP}, + {"Home", GRUB_TERM_KEY_HOME}, + {"End", GRUB_TERM_KEY_END}, + {"Right", GRUB_TERM_KEY_RIGHT}, + {"Left", GRUB_TERM_KEY_LEFT}, + {"Next", GRUB_TERM_KEY_NPAGE}, + {"Prior", GRUB_TERM_KEY_PPAGE}, + {"Remove", GRUB_TERM_KEY_DC}, + {"VoidSymbol", 0}, + + /* "Undead" keys since no dead key support in GRUB. */ + {"dead_acute", '\''}, + {"dead_circumflex", '^'}, + {"dead_grave", '`'}, + {"dead_tilde", '~'}, + {"dead_diaeresis", '"'}, + + /* Following ones don't provide any useful symbols for shell. */ + {"dead_cedilla", 0}, + {"dead_ogonek", 0}, + {"dead_caron", 0}, + {"dead_breve", 0}, + {"dead_doubleacute", 0}, + + /* Unused in GRUB. */ + {"Pause", 0}, + {"Scroll_Forward", 0}, + {"Scroll_Backward", 0}, + {"Hex_0", 0}, + {"Hex_1", 0}, + {"Hex_2", 0}, + {"Hex_3", 0}, + {"Hex_4", 0}, + {"Hex_5", 0}, + {"Hex_6", 0}, + {"Hex_7", 0}, + {"Hex_8", 0}, + {"Hex_9", 0}, + {"Hex_A", 0}, + {"Hex_B", 0}, + {"Hex_C", 0}, + {"Hex_D", 0}, + {"Hex_E", 0}, + {"Hex_F", 0}, + {"Scroll_Lock", 0}, + {"Show_Memory", 0}, + {"Show_Registers", 0}, + {"Control_backslash", 0}, + {"Compose", 0}, + + {NULL, '\0'} +}; + +static grub_uint8_t linux_to_usb_map[128] = { + /* 0x00 */ 0 /* Unused */, GRUB_KEYBOARD_KEY_ESCAPE, + /* 0x02 */ GRUB_KEYBOARD_KEY_1, GRUB_KEYBOARD_KEY_2, + /* 0x04 */ GRUB_KEYBOARD_KEY_3, GRUB_KEYBOARD_KEY_4, + /* 0x06 */ GRUB_KEYBOARD_KEY_5, GRUB_KEYBOARD_KEY_6, + /* 0x08 */ GRUB_KEYBOARD_KEY_7, GRUB_KEYBOARD_KEY_8, + /* 0x0a */ GRUB_KEYBOARD_KEY_9, GRUB_KEYBOARD_KEY_0, + /* 0x0c */ GRUB_KEYBOARD_KEY_DASH, GRUB_KEYBOARD_KEY_EQUAL, + /* 0x0e */ GRUB_KEYBOARD_KEY_BACKSPACE, GRUB_KEYBOARD_KEY_TAB, + /* 0x10 */ GRUB_KEYBOARD_KEY_Q, GRUB_KEYBOARD_KEY_W, + /* 0x12 */ GRUB_KEYBOARD_KEY_E, GRUB_KEYBOARD_KEY_R, + /* 0x14 */ GRUB_KEYBOARD_KEY_T, GRUB_KEYBOARD_KEY_Y, + /* 0x16 */ GRUB_KEYBOARD_KEY_U, GRUB_KEYBOARD_KEY_I, + /* 0x18 */ GRUB_KEYBOARD_KEY_O, GRUB_KEYBOARD_KEY_P, + /* 0x1a */ GRUB_KEYBOARD_KEY_LBRACKET, GRUB_KEYBOARD_KEY_RBRACKET, + /* 0x1c */ GRUB_KEYBOARD_KEY_ENTER, GRUB_KEYBOARD_KEY_LEFT_CTRL, + /* 0x1e */ GRUB_KEYBOARD_KEY_A, GRUB_KEYBOARD_KEY_S, + /* 0x20 */ GRUB_KEYBOARD_KEY_D, GRUB_KEYBOARD_KEY_F, + /* 0x22 */ GRUB_KEYBOARD_KEY_G, GRUB_KEYBOARD_KEY_H, + /* 0x24 */ GRUB_KEYBOARD_KEY_J, GRUB_KEYBOARD_KEY_K, + /* 0x26 */ GRUB_KEYBOARD_KEY_L, GRUB_KEYBOARD_KEY_SEMICOLON, + /* 0x28 */ GRUB_KEYBOARD_KEY_DQUOTE, GRUB_KEYBOARD_KEY_RQUOTE, + /* 0x2a */ GRUB_KEYBOARD_KEY_LEFT_SHIFT, GRUB_KEYBOARD_KEY_BACKSLASH, + /* 0x2c */ GRUB_KEYBOARD_KEY_Z, GRUB_KEYBOARD_KEY_X, + /* 0x2e */ GRUB_KEYBOARD_KEY_C, GRUB_KEYBOARD_KEY_V, + /* 0x30 */ GRUB_KEYBOARD_KEY_B, GRUB_KEYBOARD_KEY_N, + /* 0x32 */ GRUB_KEYBOARD_KEY_M, GRUB_KEYBOARD_KEY_COMMA, + /* 0x34 */ GRUB_KEYBOARD_KEY_DOT, GRUB_KEYBOARD_KEY_SLASH, + /* 0x36 */ GRUB_KEYBOARD_KEY_RIGHT_SHIFT, GRUB_KEYBOARD_KEY_NUMMUL, + /* 0x38 */ GRUB_KEYBOARD_KEY_LEFT_ALT, GRUB_KEYBOARD_KEY_SPACE, + /* 0x3a */ GRUB_KEYBOARD_KEY_CAPS_LOCK, GRUB_KEYBOARD_KEY_F1, + /* 0x3c */ GRUB_KEYBOARD_KEY_F2, GRUB_KEYBOARD_KEY_F3, + /* 0x3e */ GRUB_KEYBOARD_KEY_F4, GRUB_KEYBOARD_KEY_F5, + /* 0x40 */ GRUB_KEYBOARD_KEY_F6, GRUB_KEYBOARD_KEY_F7, + /* 0x42 */ GRUB_KEYBOARD_KEY_F8, GRUB_KEYBOARD_KEY_F9, + /* 0x44 */ GRUB_KEYBOARD_KEY_F10, GRUB_KEYBOARD_KEY_NUM_LOCK, + /* 0x46 */ GRUB_KEYBOARD_KEY_SCROLL_LOCK, GRUB_KEYBOARD_KEY_NUM7, + /* 0x48 */ GRUB_KEYBOARD_KEY_NUM8, GRUB_KEYBOARD_KEY_NUM9, + /* 0x4a */ GRUB_KEYBOARD_KEY_NUMMINUS, GRUB_KEYBOARD_KEY_NUM4, + /* 0x4c */ GRUB_KEYBOARD_KEY_NUM5, GRUB_KEYBOARD_KEY_NUM6, + /* 0x4e */ GRUB_KEYBOARD_KEY_NUMPLUS, GRUB_KEYBOARD_KEY_NUM1, + /* 0x50 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM3, + /* 0x52 */ GRUB_KEYBOARD_KEY_NUMDOT, GRUB_KEYBOARD_KEY_NUMDOT, + /* 0x54 */ 0, 0, + /* 0x56 */ GRUB_KEYBOARD_KEY_102ND, GRUB_KEYBOARD_KEY_F11, + /* 0x58 */ GRUB_KEYBOARD_KEY_F12, GRUB_KEYBOARD_KEY_JP_RO, + /* 0x5a */ 0, 0, + /* 0x5c */ 0, 0, + /* 0x5e */ 0, 0, + /* 0x60 */ GRUB_KEYBOARD_KEY_NUMENTER, GRUB_KEYBOARD_KEY_RIGHT_CTRL, + /* 0x62 */ GRUB_KEYBOARD_KEY_NUMSLASH, 0, + /* 0x64 */ GRUB_KEYBOARD_KEY_RIGHT_ALT, 0, + /* 0x66 */ GRUB_KEYBOARD_KEY_HOME, GRUB_KEYBOARD_KEY_UP, + /* 0x68 */ GRUB_KEYBOARD_KEY_PPAGE, GRUB_KEYBOARD_KEY_LEFT, + /* 0x6a */ GRUB_KEYBOARD_KEY_RIGHT, GRUB_KEYBOARD_KEY_END, + /* 0x6c */ GRUB_KEYBOARD_KEY_DOWN, GRUB_KEYBOARD_KEY_NPAGE, + /* 0x6e */ GRUB_KEYBOARD_KEY_INSERT, GRUB_KEYBOARD_KEY_DELETE, + /* 0x70 */ 0, 0, + /* 0x72 */ 0, GRUB_KEYBOARD_KEY_JP_RO, + /* 0x74 */ 0, 0, + /* 0x76 */ 0, 0, + /* 0x78 */ 0, GRUB_KEYBOARD_KEY_KPCOMMA, + /* 0x7a */ 0, 0, + /* 0x7c */ GRUB_KEYBOARD_KEY_JP_YEN, +}; + +static void +add_special_keys (struct grub_keyboard_layout *layout) +{ + (void) layout; +} + +static unsigned +lookup (char *code, int shift) +{ + int i; + struct console_grub_equivalence *pr; + + if (shift) + pr = console_grub_equivalences_shift; + else + pr = console_grub_equivalences_unshift; + + for (i = 0; pr[i].layout != NULL; i++) + if (strcmp (code, pr[i].layout) == 0) + return pr[i].grub; + + for (i = 0; console_grub_equivalences_common[i].layout != NULL; i++) + if (strcmp (code, console_grub_equivalences_common[i].layout) == 0) + return console_grub_equivalences_common[i].grub; + + /* TRANSLATORS: scan identifier is keyboard key symbolic name. */ + fprintf (stderr, _("Unknown keyboard scan identifier %s\n"), code); + + return '\0'; +} + +static unsigned int +get_grub_code (char *layout_code, int shift) +{ + unsigned int code; + + if (strncmp (layout_code, "U+", sizeof ("U+") - 1) == 0) + sscanf (layout_code, "U+%x", &code); + else if (strncmp (layout_code, "+U+", sizeof ("+U+") - 1) == 0) + sscanf (layout_code, "+U+%x", &code); + else + code = lookup (layout_code, shift); + return code; +} + +static void +write_file (FILE *out, const char *fname, struct grub_keyboard_layout *layout) +{ + grub_uint32_t version; + unsigned i; + + version = grub_cpu_to_le32_compile_time (GRUB_KEYBOARD_LAYOUTS_VERSION); + + for (i = 0; i < ARRAY_SIZE (layout->keyboard_map); i++) + layout->keyboard_map[i] = grub_cpu_to_le32(layout->keyboard_map[i]); + + for (i = 0; i < ARRAY_SIZE (layout->keyboard_map_shift); i++) + layout->keyboard_map_shift[i] + = grub_cpu_to_le32(layout->keyboard_map_shift[i]); + + for (i = 0; i < ARRAY_SIZE (layout->keyboard_map_l3); i++) + layout->keyboard_map_l3[i] + = grub_cpu_to_le32(layout->keyboard_map_l3[i]); + + for (i = 0; i < ARRAY_SIZE (layout->keyboard_map_shift_l3); i++) + layout->keyboard_map_shift_l3[i] + = grub_cpu_to_le32(layout->keyboard_map_shift_l3[i]); + + if (fwrite (GRUB_KEYBOARD_LAYOUTS_FILEMAGIC, 1, + GRUB_KEYBOARD_LAYOUTS_FILEMAGIC_SIZE, out) + != GRUB_KEYBOARD_LAYOUTS_FILEMAGIC_SIZE + || fwrite (&version, sizeof (version), 1, out) != 1 + || fwrite (layout, 1, sizeof (*layout), out) != sizeof (*layout)) + { + if (fname) + grub_util_error ("cannot write to `%s': %s", fname, strerror (errno)); + else + grub_util_error ("cannot write to the stdout: %s", strerror (errno)); + } +} + +static void +write_keymaps (FILE *in, FILE *out, const char *out_filename) +{ + struct grub_keyboard_layout layout; + char line[2048]; + int ok; + + memset (&layout, 0, sizeof (layout)); + + /* Process the ckbcomp output and prepare the layouts. */ + ok = 0; + while (fgets (line, sizeof (line), in)) + { + if (strncmp (line, "keycode", sizeof ("keycode") - 1) == 0) + { + unsigned keycode_linux; + unsigned keycode_usb; + char normal[64]; + char shift[64]; + char normalalt[64]; + char shiftalt[64]; + + sscanf (line, "keycode %u = %60s %60s %60s %60s", &keycode_linux, + normal, shift, normalalt, shiftalt); + + if (keycode_linux >= ARRAY_SIZE (linux_to_usb_map)) + { + /* TRANSLATORS: scan code is keyboard key numeric identifier. */ + fprintf (stderr, _("Unknown keyboard scan code 0x%02x\n"), keycode_linux); + continue; + } + + /* Not used. */ + if (keycode_linux == 0x77 /* Pause */ + /* Some obscure keys */ + || keycode_linux == 0x63 || keycode_linux == 0x7d + || keycode_linux == 0x7e) + continue; + + /* Not remappable. */ + if (keycode_linux == 0x1d /* Left CTRL */ + || keycode_linux == 0x61 /* Right CTRL */ + || keycode_linux == 0x2a /* Left Shift. */ + || keycode_linux == 0x36 /* Right Shift. */ + || keycode_linux == 0x38 /* Left ALT. */ + || keycode_linux == 0x64 /* Right ALT. */ + || keycode_linux == 0x3a /* CapsLock. */ + || keycode_linux == 0x45 /* NumLock. */ + || keycode_linux == 0x46 /* ScrollLock. */) + continue; + + keycode_usb = linux_to_usb_map[keycode_linux]; + if (keycode_usb == 0 + || keycode_usb >= GRUB_KEYBOARD_LAYOUTS_ARRAY_SIZE) + { + /* TRANSLATORS: scan code is keyboard key numeric identifier. */ + fprintf (stderr, _("Unknown keyboard scan code 0x%02x\n"), keycode_linux); + continue; + } + if (keycode_usb < GRUB_KEYBOARD_LAYOUTS_ARRAY_SIZE) + { + layout.keyboard_map[keycode_usb] = get_grub_code (normal, 0); + layout.keyboard_map_shift[keycode_usb] = get_grub_code (shift, 1); + layout.keyboard_map_l3[keycode_usb] + = get_grub_code (normalalt, 0); + layout.keyboard_map_shift_l3[keycode_usb] + = get_grub_code (shiftalt, 1); + ok = 1; + } + } + } + + if (ok == 0) + { + /* TRANSLATORS: this error is triggered when input doesn't contain any + key descriptions. */ + fprintf (stderr, "%s", _("ERROR: no valid keyboard layout found. Check the input.\n")); + exit (1); + } + + add_special_keys (&layout); + + write_file (out, out_filename, &layout); +} + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'i': + arguments->input = xstrdup (arg); + break; + + case 'o': + arguments->output = xstrdup (arg); + break; + + case 'v': + arguments->verbosity++; + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("[OPTIONS]"), + /* TRANSLATORS: "one" is a shortcut for "keyboard layout". */ + N_("Generate GRUB keyboard layout from Linux console one."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + FILE *in, *out; + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + memset (&arguments, 0, sizeof (struct arguments)); + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (arguments.input) + in = grub_util_fopen (arguments.input, "r"); + else + in = stdin; + + if (!in) + grub_util_error (_("cannot open `%s': %s"), arguments.input ? : "stdin", + strerror (errno)); + + if (arguments.output) + out = grub_util_fopen (arguments.output, "wb"); + else + out = stdout; + + if (!out) + { + if (in != stdin) + fclose (in); + grub_util_error (_("cannot open `%s': %s"), arguments.output ? : "stdout", + strerror (errno)); + } + + write_keymaps (in, out, arguments.output); + + if (in != stdin) + fclose (in); + + if (out != stdout) + fclose (out); + + return 0; +} diff --git a/util/grub-mknetdir.c b/util/grub-mknetdir.c new file mode 100644 index 000000000..82073d5cc --- /dev/null +++ b/util/grub-mknetdir.c @@ -0,0 +1,222 @@ +/* + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . +*/ + +#include + +#include +#include +#include + +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +static char *rootdir = NULL, *subdir = NULL; +static char *debug_image = NULL; + +enum + { + OPTION_NET_DIRECTORY = 0x301, + OPTION_SUBDIR, + OPTION_DEBUG, + OPTION_DEBUG_IMAGE + }; + +static struct argp_option options[] = { + GRUB_INSTALL_OPTIONS, + {"net-directory", OPTION_NET_DIRECTORY, N_("DIR"), + 0, N_("root directory of TFTP server"), 2}, + {"subdir", OPTION_SUBDIR, N_("DIR"), + 0, N_("relative subdirectory on network server"), 2}, + {"debug", OPTION_DEBUG, 0, OPTION_HIDDEN, 0, 2}, + {"debug-image", OPTION_DEBUG_IMAGE, N_("STRING"), OPTION_HIDDEN, 0, 2}, + {0, 0, 0, 0, 0, 0} +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + if (grub_install_parse (key, arg)) + return 0; + switch (key) + { + case OPTION_NET_DIRECTORY: + free (rootdir); + rootdir = xstrdup (arg); + return 0; + case OPTION_SUBDIR: + free (subdir); + subdir = xstrdup (arg); + return 0; + /* This is an undocumented feature... */ + case OPTION_DEBUG: + verbosity++; + return 0; + case OPTION_DEBUG_IMAGE: + free (debug_image); + debug_image = xstrdup (arg); + return 0; + + case ARGP_KEY_ARG: + default: + return ARGP_ERR_UNKNOWN; + } +} + + +struct argp argp = { + options, argp_parser, NULL, + "\v"N_("Prepares GRUB network boot images at net_directory/subdir " + "assuming net_directory being TFTP root."), + NULL, grub_install_help_filter, NULL +}; + +static char *base; + +static const struct +{ + const char *mkimage_target; + const char *netmodule; + const char *ext; +} targets[GRUB_INSTALL_PLATFORM_MAX] = + { + [GRUB_INSTALL_PLATFORM_I386_PC] = { "i386-pc-pxe", "pxe", ".0" }, + [GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275] = { "sparc64-ieee1275-aout", "ofnet", ".img" }, + [GRUB_INSTALL_PLATFORM_I386_IEEE1275] = { "i386-ieee1275", "ofnet", ".elf" }, + [GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275] = { "powerpc-ieee1275", "ofnet", ".elf" }, + [GRUB_INSTALL_PLATFORM_I386_EFI] = { "i386-efi", "efinet", ".efi" }, + [GRUB_INSTALL_PLATFORM_X86_64_EFI] = { "x86_64-efi", "efinet", ".efi" }, + [GRUB_INSTALL_PLATFORM_IA64_EFI] = { "ia64-efi", "efinet", ".efi" }, + [GRUB_INSTALL_PLATFORM_ARM_EFI] = { "arm-efi", "efinet", ".efi" }, + [GRUB_INSTALL_PLATFORM_ARM64_EFI] = { "arm64-efi", "efinet", ".efi" } + }; + +static void +process_input_dir (const char *input_dir, enum grub_install_plat platform) +{ + char *platsub = grub_install_get_platform_name (platform); + char *grubdir = grub_util_path_concat (3, rootdir, subdir, platsub); + char *load_cfg = grub_util_path_concat (2, grubdir, "load.cfg"); + char *prefix; + char *output; + char *grub_cfg; + FILE *cfg; + + grub_install_copy_files (input_dir, base, platform); + grub_util_unlink (load_cfg); + + if (debug_image) + { + FILE *f = grub_util_fopen (load_cfg, "wb"); + if (!f) + grub_util_error (_("cannot open `%s': %s"), load_cfg, + strerror (errno)); + fprintf (f, "set debug='%s'\n", debug_image); + fclose (f); + } + else + { + free (load_cfg); + load_cfg = 0; + } + + prefix = xasprintf ("/%s", subdir); + if (!targets[platform].mkimage_target) + grub_util_error (_("unsupported platform %s"), platsub); + + grub_cfg = grub_util_path_concat (2, grubdir, "grub.cfg"); + cfg = grub_util_fopen (grub_cfg, "wb"); + if (!cfg) + grub_util_error (_("cannot open `%s': %s"), grub_cfg, + strerror (errno)); + fprintf (cfg, "source %s/grub.cfg", subdir); + fclose (cfg); + + grub_install_push_module (targets[platform].netmodule); + + output = grub_util_path_concat_ext (2, grubdir, "core", targets[platform].ext); + grub_install_make_image_wrap (input_dir, prefix, output, + 0, load_cfg, + targets[platform].mkimage_target, 0); + grub_install_pop_module (); + + /* TRANSLATORS: First %s is replaced by platform name. Second one by filename. */ + printf (_("Netboot directory for %s created. Configure your DHCP server to point to %s\n"), + platsub, output); + + free (platsub); + free (output); + free (prefix); + free (grub_cfg); + free (grubdir); +} + + +int +main (int argc, char *argv[]) +{ + const char *pkglibdir; + + grub_util_host_init (&argc, &argv); + grub_util_disable_fd_syncs (); + rootdir = xstrdup ("/srv/tftp"); + pkglibdir = grub_util_get_pkglibdir (); + + subdir = grub_util_path_concat (2, GRUB_BOOT_DIR_NAME, GRUB_DIR_NAME); + + argp_parse (&argp, argc, argv, 0, 0, 0); + + base = grub_util_path_concat (2, rootdir, subdir); + /* Create the GRUB directory if it is not present. */ + + grub_install_mkdir_p (base); + + grub_install_push_module ("tftp"); + + if (!grub_install_source_directory) + { + enum grub_install_plat plat; + + for (plat = 0; plat < GRUB_INSTALL_PLATFORM_MAX; plat++) + if (targets[plat].mkimage_target) + { + char *platdir = grub_util_path_concat (2, pkglibdir, + grub_install_get_platform_name (plat)); + + grub_util_info ("Looking for `%s'", platdir); + + if (!grub_util_is_directory (platdir)) + { + free (platdir); + continue; + } + process_input_dir (platdir, plat); + } + } + else + { + enum grub_install_plat plat; + plat = grub_install_get_target (grub_install_source_directory); + process_input_dir (grub_install_source_directory, plat); + } + return 0; +} diff --git a/util/grub-mkpasswd-pbkdf2.c b/util/grub-mkpasswd-pbkdf2.c new file mode 100644 index 000000000..5805f3c10 --- /dev/null +++ b/util/grub-mkpasswd-pbkdf2.c @@ -0,0 +1,210 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1992-1999,2001,2003,2004,2005,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + + +#include "progname.h" + +static struct argp_option options[] = { + {"iteration-count", 'c', N_("NUM"), 0, N_("Number of PBKDF2 iterations"), 0}, + {"buflen", 'l', N_("NUM"), 0, N_("Length of generated hash"), 0}, + {"salt", 's', N_("NUM"), 0, N_("Length of salt"), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +struct arguments +{ + unsigned int count; + unsigned int buflen; + unsigned int saltlen; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'c': + arguments->count = strtoul (arg, NULL, 0); + break; + + case 'l': + arguments->buflen = strtoul (arg, NULL, 0); + break; + + case 's': + arguments->saltlen = strtoul (arg, NULL, 0); + break; + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("[OPTIONS]"), + N_("Generate PBKDF2 password hash."), + NULL, NULL, NULL +}; + + +static void +hexify (char *hex, grub_uint8_t *bin, grub_size_t n) +{ + while (n--) + { + if (((*bin & 0xf0) >> 4) < 10) + *hex = ((*bin & 0xf0) >> 4) + '0'; + else + *hex = ((*bin & 0xf0) >> 4) + 'A' - 10; + hex++; + + if ((*bin & 0xf) < 10) + *hex = (*bin & 0xf) + '0'; + else + *hex = (*bin & 0xf) + 'A' - 10; + hex++; + bin++; + } + *hex = 0; +} + +int +main (int argc, char *argv[]) +{ + struct arguments arguments = { + .count = 10000, + .buflen = 64, + .saltlen = 64 + }; + char *result, *ptr; + gcry_err_code_t gcry_err; + grub_uint8_t *buf, *salt; + char pass1[GRUB_AUTH_MAX_PASSLEN]; + char pass2[GRUB_AUTH_MAX_PASSLEN]; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + buf = xmalloc (arguments.buflen); + salt = xmalloc (arguments.saltlen); + + printf ("%s", _("Enter password: ")); + if (!grub_password_get (pass1, GRUB_AUTH_MAX_PASSLEN)) + { + free (buf); + free (salt); + grub_util_error ("%s", _("failure to read password")); + } + printf ("%s", _("Reenter password: ")); + if (!grub_password_get (pass2, GRUB_AUTH_MAX_PASSLEN)) + { + free (buf); + free (salt); + grub_util_error ("%s", _("failure to read password")); + } + + if (strcmp (pass1, pass2) != 0) + { + memset (pass1, 0, sizeof (pass1)); + memset (pass2, 0, sizeof (pass2)); + free (buf); + free (salt); + grub_util_error ("%s", _("passwords don't match")); + } + memset (pass2, 0, sizeof (pass2)); + + if (grub_get_random (salt, arguments.saltlen)) + { + memset (pass1, 0, sizeof (pass1)); + free (buf); + free (salt); + grub_util_error ("%s", _("couldn't retrieve random data for salt")); + } + + gcry_err = grub_crypto_pbkdf2 (GRUB_MD_SHA512, + (grub_uint8_t *) pass1, strlen (pass1), + salt, arguments.saltlen, + arguments.count, buf, arguments.buflen); + memset (pass1, 0, sizeof (pass1)); + + if (gcry_err) + { + memset (buf, 0, arguments.buflen); + free (buf); + memset (salt, 0, arguments.saltlen); + free (salt); + grub_util_error (_("cryptographic error number %d"), gcry_err); + } + + result = xmalloc (sizeof ("grub.pbkdf2.sha512.XXXXXXXXXXXXXXXXXXX.S.S") + + arguments.buflen * 2 + arguments.saltlen * 2); + ptr = result; + memcpy (ptr, "grub.pbkdf2.sha512.", sizeof ("grub.pbkdf2.sha512.") - 1); + ptr += sizeof ("grub.pbkdf2.sha512.") - 1; + + grub_snprintf (ptr, sizeof ("XXXXXXXXXXXXXXXXXXX"), "%d", arguments.count); + ptr += strlen (ptr); + *ptr++ = '.'; + hexify (ptr, salt, arguments.saltlen); + ptr += arguments.saltlen * 2; + *ptr++ = '.'; + hexify (ptr, buf, arguments.buflen); + ptr += arguments.buflen * 2; + *ptr = '\0'; + + printf (_("PBKDF2 hash of your password is %s\n"), result); + memset (buf, 0, arguments.buflen); + free (buf); + memset (salt, 0, arguments.saltlen); + free (salt); + + return 0; +} diff --git a/util/grub-mkrelpath.c b/util/grub-mkrelpath.c new file mode 100644 index 000000000..47a241a39 --- /dev/null +++ b/util/grub-mkrelpath.c @@ -0,0 +1,105 @@ +/* grub-mkrelpath.c - make a system path relative to its root */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +struct arguments +{ + char *pathname; +}; + +static struct argp_option options[] = { + { 0, 0, 0, 0, 0, 0 } +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case ARGP_KEY_ARG: + if (state->arg_num == 0) + arguments->pathname = xstrdup (arg); + else + { + /* Too many arguments. */ + fprintf (stderr, _("Unknown extra argument `%s'."), arg); + fprintf (stderr, "\n"); + argp_usage (state); + } + break; + case ARGP_KEY_NO_ARGS: + fprintf (stderr, "%s", _("No path is specified.\n")); + argp_usage (state); + exit (1); + break; + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("PATH"), + N_("Transform a system filename into GRUB one."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + char *relpath; + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + memset (&arguments, 0, sizeof (struct arguments)); + + /* Check for options. */ + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + relpath = grub_make_system_path_relative_to_its_root (arguments.pathname); + printf ("%s\n", relpath); + free (relpath); + + return 0; +} diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c new file mode 100644 index 000000000..238d4840e --- /dev/null +++ b/util/grub-mkrescue.c @@ -0,0 +1,973 @@ +/* + * Make GRUB rescue image + * + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include +#include + +#include +#include + +static char *source_dirs[GRUB_INSTALL_PLATFORM_MAX]; +static char *rom_directory; +static char *label_font; +static char *label_color; +static char *label_bgcolor; +static char *product_name; +static char *product_version; +static char *output_image; +static char *xorriso; +static char *boot_grub; +static int xorriso_argc; +static int xorriso_arg_alloc; +static char **xorriso_argv; +static char *iso_uuid; +static char *iso9660_dir; + +static void +xorriso_push (const char *val) +{ + if (xorriso_arg_alloc <= xorriso_argc + 1) + { + xorriso_arg_alloc = 2 * (4 + xorriso_argc); + xorriso_argv = xrealloc (xorriso_argv, + sizeof (xorriso_argv[0]) + * xorriso_arg_alloc); + } + xorriso_argv[xorriso_argc++] = xstrdup (val); +} + +static void +xorriso_link (const char *from, const char *to) +{ + char *tof = grub_util_path_concat (2, iso9660_dir, to); + char *val = xasprintf ("%s=%s", from, tof); + xorriso_push (val); + free (val); + free (tof); +} + +enum + { + OPTION_OUTPUT = 'o', + OPTION_ROM_DIRECTORY = 0x301, + OPTION_XORRISO, + OPTION_GLUE_EFI, + OPTION_RENDER_LABEL, + OPTION_LABEL_FONT, + OPTION_LABEL_COLOR, + OPTION_LABEL_BGCOLOR, + OPTION_PRODUCT_NAME, + OPTION_PRODUCT_VERSION, + OPTION_SPARC_BOOT, + OPTION_ARCS_BOOT + }; + +static struct argp_option options[] = { + GRUB_INSTALL_OPTIONS, + {"output", 'o', N_("FILE"), + 0, N_("save output in FILE [required]"), 2}, + {"rom-directory", OPTION_ROM_DIRECTORY, N_("DIR"), + 0, N_("save ROM images in DIR [optional]"), 2}, + {"xorriso", OPTION_XORRISO, N_("FILE"), + /* TRANSLATORS: xorriso is a program for creating ISOs and burning CDs. */ + 0, N_("use FILE as xorriso [optional]"), 2}, + {"grub-glue-efi", OPTION_GLUE_EFI, N_("FILE"), OPTION_HIDDEN, 0, 2}, + {"grub-render-label", OPTION_RENDER_LABEL, N_("FILE"), OPTION_HIDDEN, 0, 2}, + {"label-font", OPTION_LABEL_FONT, N_("FILE"), 0, N_("use FILE as font for label"), 2}, + {"label-color", OPTION_LABEL_COLOR, N_("COLOR"), 0, N_("use COLOR for label"), 2}, + {"label-bgcolor", OPTION_LABEL_BGCOLOR, N_("COLOR"), 0, N_("use COLOR for label background"), 2}, + {"product-name", OPTION_PRODUCT_NAME, N_("STRING"), 0, N_("use STRING as product name"), 2}, + {"product-version", OPTION_PRODUCT_VERSION, N_("STRING"), 0, N_("use STRING as product version"), 2}, + {"sparc-boot", OPTION_SPARC_BOOT, 0, 0, N_("enable sparc boot. Disables HFS+, APM, ARCS and boot as disk image for i386-pc"), 2}, + {"arcs-boot", OPTION_ARCS_BOOT, 0, 0, N_("enable ARCS (big-endian mips machines, mostly SGI) boot. Disables HFS+, APM, sparc64 and boot as disk image for i386-pc"), 2}, + {0, 0, 0, 0, 0, 0} +}; + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case ARGP_KEY_HELP_PRE_DOC: + /* TRANSLATORS: it generates one single image which is bootable through any method. */ + return strdup (_("Make GRUB CD-ROM, disk, pendrive and floppy bootable image.")); + case ARGP_KEY_HELP_POST_DOC: + { + char *p1, *out; + + p1 = xasprintf (_("Generates a bootable CD/USB/floppy image. Arguments other than options to this program" + " are passed to xorriso, and indicate source files, source directories, or any of the " + "mkisofs options listed by the output of `%s'."), "xorriso -as mkisofs -help"); + out = xasprintf ("%s\n\n%s\n\n%s", p1, + _("Option -- switches to native xorriso command mode."), + _("Mail xorriso support requests to .")); + free (p1); + return out; + } + default: + return grub_install_help_filter (key, text, input); + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +enum { + SYS_AREA_AUTO, + SYS_AREA_COMMON, + SYS_AREA_SPARC, + SYS_AREA_ARCS +} system_area = SYS_AREA_AUTO; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + if (grub_install_parse (key, arg)) + return 0; + switch (key) + { + case OPTION_OUTPUT: + free (output_image); + output_image = xstrdup (arg); + return 0; + case OPTION_ROM_DIRECTORY: + free (rom_directory); + rom_directory = xstrdup (arg); + return 0; + + /* + FIXME: + # Intentionally undocumented + --grub-mkimage-extra) + mkimage_extra_arg="$mkimage_extra_arg `argument $option "$@"`"; shift ;; + --grub-mkimage-extra=*) + mkimage_extra_arg="$mkimage_extra_arg `echo "$option" | sed 's/--grub-mkimage-extra=//'`" ;; + */ + case OPTION_SPARC_BOOT: + system_area = SYS_AREA_SPARC; + return 0; + case OPTION_ARCS_BOOT: + system_area = SYS_AREA_ARCS; + return 0; + case OPTION_PRODUCT_NAME: + free (product_name); + product_name = xstrdup (arg); + return 0; + case OPTION_PRODUCT_VERSION: + free (product_version); + product_version = xstrdup (arg); + return 0; + /* Accept and ignore for compatibility. */ + case OPTION_GLUE_EFI: + case OPTION_RENDER_LABEL: + return 0; + case OPTION_LABEL_FONT: + free (label_font); + label_font = xstrdup (arg); + return 0; + + case OPTION_LABEL_COLOR: + free (label_color); + label_color = xstrdup (arg); + return 0; + + case OPTION_LABEL_BGCOLOR: + free (label_bgcolor); + label_bgcolor = xstrdup (arg); + return 0; + + case OPTION_XORRISO: + free (xorriso); + xorriso = xstrdup (arg); + return 0; + + default: + return ARGP_ERR_UNKNOWN; + } +} + +struct argp argp = { + options, argp_parser, N_("[OPTION] SOURCE..."), + NULL, NULL, help_filter, NULL +}; + +static void +write_part (FILE *f, const char *srcdir) +{ + FILE *in; + char *inname = grub_util_path_concat (2, srcdir, "partmap.lst"); + char buf[260]; + in = grub_util_fopen (inname, "rb"); + if (!in) + return; + while (fgets (buf, 256, in)) + { + char *ptr; + for (ptr = buf + strlen (buf) - 1; + ptr >= buf && (*ptr == '\n' || *ptr == '\r'); + ptr--); + ptr[1] = '\0'; + fprintf (f, "insmod %s\n", buf); + } + fclose (in); +} + +static void +make_image_abs (enum grub_install_plat plat, + const char *mkimage_target, + const char *output) +{ + char *load_cfg; + FILE *load_cfg_f; + + if (!source_dirs[plat]) + return; + + grub_util_info (N_("enabling %s support ..."), + mkimage_target); + + load_cfg = grub_util_make_temporary_file (); + + load_cfg_f = grub_util_fopen (load_cfg, "wb"); + fprintf (load_cfg_f, "search --fs-uuid --set=root %s\n", iso_uuid); + fprintf (load_cfg_f, "set prefix=(${root})/boot/grub\n"); + + write_part (load_cfg_f, source_dirs[plat]); + fclose (load_cfg_f); + + grub_install_push_module ("search"); + grub_install_push_module ("iso9660"); + grub_install_make_image_wrap (source_dirs[plat], "/boot/grub", output, + 0, load_cfg, + mkimage_target, 0); + grub_install_pop_module (); + grub_install_pop_module (); + grub_util_unlink (load_cfg); +} + +static void +make_image (enum grub_install_plat plat, + const char *mkimage_target, + const char *output_sub) +{ + char *out = grub_util_path_concat (2, boot_grub, output_sub); + make_image_abs (plat, mkimage_target, out); + free (out); +} + +static void +make_image_fwdisk_abs (enum grub_install_plat plat, + const char *mkimage_target, + const char *output) +{ + char *load_cfg; + FILE *load_cfg_f; + + if (!source_dirs[plat]) + return; + + grub_util_info (N_("enabling %s support ..."), + mkimage_target); + + load_cfg = grub_util_make_temporary_file (); + + load_cfg_f = grub_util_fopen (load_cfg, "wb"); + write_part (load_cfg_f, source_dirs[plat]); + fclose (load_cfg_f); + + grub_install_push_module ("iso9660"); + grub_install_make_image_wrap (source_dirs[plat], "()/boot/grub", output, + 0, load_cfg, mkimage_target, 0); + grub_install_pop_module (); + grub_util_unlink (load_cfg); +} + +static int +check_xorriso (const char *val) +{ + const char *argv[5]; + int fd; + pid_t pid; + FILE *mdadm; + char *buf = NULL; + size_t len = 0; + int ret = 0; + + argv[0] = xorriso; + argv[1] = "-as"; + argv[2] = "mkisofs"; + argv[3] = "-help"; + argv[4] = NULL; + + pid = grub_util_exec_pipe_stderr (argv, &fd); + + if (!pid) + return 0; + + /* Parent. Read mdadm's output. */ + mdadm = fdopen (fd, "r"); + if (! mdadm) + return 0; + + while (getline (&buf, &len, mdadm) > 0) + { + if (grub_strstr (buf, val)) + ret = 1; + } + + close (fd); + waitpid (pid, NULL, 0); + free (buf); + return ret; +} + +static void +make_image_fwdisk (enum grub_install_plat plat, + const char *mkimage_target, + const char *output_sub) +{ + char *out = grub_util_path_concat (2, boot_grub, output_sub); + make_image_fwdisk_abs (plat, mkimage_target, out); + free (out); +} + +static int +option_is_end (const struct argp_option *opt) +{ + return !opt->key && !opt->name && !opt->doc && !opt->group; +} + + +static int +args_to_eat (const char *arg) +{ + int j; + + if (arg[0] != '-') + return 0; + + if (arg[1] == '-') + { + for (j = 0; !option_is_end(&options[j]); j++) + { + size_t len = strlen (options[j].name); + if (strncmp (arg + 2, options[j].name, len) == 0) + { + if (arg[2 + len] == '=') + return 1; + if (arg[2 + len] == '\0' && options[j].arg) + return 2; + if (arg[2 + len] == '\0') + return 1; + } + } + if (strcmp (arg, "--help") == 0) + return 1; + if (strcmp (arg, "--usage") == 0) + return 1; + if (strcmp (arg, "--version") == 0) + return 1; + return 0; + } + if (arg[2] && arg[3]) + return 0; + for (j = 0; !option_is_end(&options[j]); j++) + { + if (options[j].key > 0 && options[j].key < 128 && arg[1] == options[j].key) + { + if (options[j].arg) + return 2; + return 1; + } + if (arg[1] == '?') + return 1; + } + return 0; +} + +int +main (int argc, char *argv[]) +{ + char *romdir; + char *sysarea_img = NULL; + const char *pkgdatadir; + int argp_argc; + char **argp_argv; + int xorriso_tail_argc; + char **xorriso_tail_argv; + + grub_util_host_init (&argc, &argv); + grub_util_disable_fd_syncs (); + + pkgdatadir = grub_util_get_pkgdatadir (); + + product_name = xstrdup (PACKAGE_NAME); + product_version = xstrdup (PACKAGE_VERSION); + xorriso = xstrdup ("xorriso"); + label_font = grub_util_path_concat (2, pkgdatadir, "unicode.pf2"); + + argp_argv = xmalloc (sizeof (argp_argv[0]) * argc); + xorriso_tail_argv = xmalloc (sizeof (argp_argv[0]) * argc); + + xorriso_tail_argc = 0; + /* Program name */ + argp_argv[0] = argv[0]; + argp_argc = 1; + + /* argp doesn't allow us to catch unknwon arguments, + so catch them before passing to argp + */ + { + int i; + for (i = 1; i < argc; i++) + { + if (strcmp (argv[i], "-output") == 0) { + argp_argv[argp_argc++] = (char *) "--output"; + i++; + argp_argv[argp_argc++] = argv[i]; + continue; + } + switch (args_to_eat (argv[i])) + { + case 2: + argp_argv[argp_argc++] = argv[i++]; + /* Fallthrough */ + case 1: + argp_argv[argp_argc++] = argv[i]; + break; + case 0: + xorriso_tail_argv[xorriso_tail_argc++] = argv[i]; + break; + } + } + } + + argp_parse (&argp, argp_argc, argp_argv, 0, 0, 0); + + if (!output_image) + grub_util_error ("%s", _("output file must be specified")); + + grub_init_all (); + grub_hostfs_init (); + grub_host_init (); + + xorriso_push (xorriso); + xorriso_push ("-as"); + xorriso_push ("mkisofs"); + xorriso_push ("-graft-points"); + + iso9660_dir = grub_util_make_temporary_dir (); + grub_util_info ("temporary iso9660 dir is `%s'", iso9660_dir); + boot_grub = grub_util_path_concat (3, iso9660_dir, "boot", "grub"); + grub_install_mkdir_p (boot_grub); + romdir = grub_util_path_concat (2, boot_grub, "roms"); + grub_util_mkdir (romdir); + + if (!grub_install_source_directory) + { + const char *pkglibdir = grub_util_get_pkglibdir (); + enum grub_install_plat plat; + + for (plat = 0; plat < GRUB_INSTALL_PLATFORM_MAX; plat++) + { + char *platdir = grub_util_path_concat (2, pkglibdir, + grub_install_get_platform_name (plat)); + + if (!grub_util_is_directory (platdir)) + { + free (platdir); + continue; + } + source_dirs[plat] = platdir; + grub_install_copy_files (platdir, + boot_grub, plat); + } + } + else + { + enum grub_install_plat plat; + plat = grub_install_get_target (grub_install_source_directory); + grub_install_copy_files (grub_install_source_directory, + boot_grub, plat); + source_dirs[plat] = xstrdup (grub_install_source_directory); + } + if (system_area == SYS_AREA_AUTO || grub_install_source_directory) + { + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_PC] + || source_dirs[GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275] + || source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_IA64_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_ARM_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_ARM64_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI]) + system_area = SYS_AREA_COMMON; + else if (source_dirs[GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275]) + system_area = SYS_AREA_SPARC; + else if (source_dirs[GRUB_INSTALL_PLATFORM_MIPS_ARC]) + system_area = SYS_AREA_ARCS; + } + + /* obtain date-based UUID. */ + { + time_t tim; + struct tm *tmm; + tim = time (NULL); + tmm = gmtime (&tim); + iso_uuid = xmalloc (55); + grub_snprintf (iso_uuid, 50, + "%04d-%02d-%02d-%02d-%02d-%02d-00", + tmm->tm_year + 1900, + tmm->tm_mon + 1, + tmm->tm_mday, + tmm->tm_hour, + tmm->tm_min, + tmm->tm_sec); + } + { + char *uuid_out = xmalloc (strlen (iso_uuid) + 1 + 40); + char *optr; + const char *iptr; + optr = grub_stpcpy (uuid_out, "--modification-date="); + for (iptr = iso_uuid; *iptr; iptr++) + if (*iptr != '-') + *optr++ = *iptr; + *optr = '\0'; + xorriso_push (uuid_out); + free (uuid_out); + } + + /* build BIOS core.img. */ + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_PC]) + { + char *load_cfg; + FILE *load_cfg_f; + char *output = grub_util_path_concat (3, boot_grub, "i386-pc", "eltorito.img"); + load_cfg = grub_util_make_temporary_file (); + + grub_util_info (N_("enabling %s support ..."), "BIOS"); + load_cfg_f = grub_util_fopen (load_cfg, "wb"); + write_part (load_cfg_f, source_dirs[GRUB_INSTALL_PLATFORM_I386_PC]); + fclose (load_cfg_f); + + grub_install_push_module ("biosdisk"); + grub_install_push_module ("iso9660"); + grub_install_make_image_wrap (source_dirs[GRUB_INSTALL_PLATFORM_I386_PC], + "/boot/grub", output, + 0, load_cfg, + "i386-pc-eltorito", 0); + + xorriso_push ("-b"); + xorriso_push ("boot/grub/i386-pc/eltorito.img"); + xorriso_push ("-no-emul-boot"); + xorriso_push ("-boot-load-size"); + xorriso_push ("4"); + xorriso_push ("-boot-info-table"); + if (system_area == SYS_AREA_COMMON) + { + if (check_xorriso ("grub2-boot-info")) + { + char *boot_hybrid = grub_util_path_concat (2, source_dirs[GRUB_INSTALL_PLATFORM_I386_PC], + "boot_hybrid.img"); + xorriso_push ("--grub2-boot-info"); + xorriso_push ("--grub2-mbr"); + xorriso_push (boot_hybrid); + } + else + { + FILE *sa, *bi; + size_t sz; + char buf[512]; + char *bin = grub_util_path_concat (2, source_dirs[GRUB_INSTALL_PLATFORM_I386_PC], + "boot.img"); + grub_util_warn ("%s", _("Your xorriso doesn't support `--grub2-boot-info'. Some features are disabled. Please use xorriso 1.2.9 or later.")); + sysarea_img = grub_util_make_temporary_file (); + sa = grub_util_fopen (sysarea_img, "wb"); + if (!sa) + grub_util_error (_("cannot open `%s': %s"), sysarea_img, + strerror (errno)); + bi = grub_util_fopen (bin, "rb"); + if (!bi) + grub_util_error (_("cannot open `%s': %s"), bin, + strerror (errno)); + if (fread (buf, 1, 512, bi) != 512) + grub_util_error (_("cannot read `%s': %s"), bin, + strerror (errno)); + fclose (bi); + fwrite (buf, 1, 512, sa); + + grub_install_make_image_wrap_file (source_dirs[GRUB_INSTALL_PLATFORM_I386_PC], + "/boot/grub", sa, sysarea_img, + 0, load_cfg, + "i386-pc", 0); + sz = ftello (sa); + fflush (sa); + grub_util_fd_sync (fileno (sa)); + fclose (sa); + + if (sz > 32768) + { + grub_util_warn ("%s", _("Your xorriso doesn't support `--grub2-boot-info'. Your core image is too big. Boot as disk is disabled. Please use xorriso 1.2.9 or later.")); + } + else + { + xorriso_push ("-G"); + xorriso_push (sysarea_img); + } + } + } + grub_install_pop_module (); + grub_install_pop_module (); + grub_util_unlink (load_cfg); + } + + /** build multiboot core.img */ + grub_install_push_module ("pata"); + grub_install_push_module ("ahci"); + grub_install_push_module ("at_keyboard"); + make_image (GRUB_INSTALL_PLATFORM_I386_MULTIBOOT, "i386-multiboot", "i386-multiboot/core.elf"); + grub_install_pop_module (); + grub_install_pop_module (); + grub_install_pop_module (); + + make_image_fwdisk (GRUB_INSTALL_PLATFORM_I386_IEEE1275, "i386-ieee1275", "ofwx86.elf"); + + char *core_services = NULL; + + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275]) + { + char *mach_ker, *sv, *label, *label_text; + FILE *f; + core_services = grub_util_path_concat (4, iso9660_dir, "System", "Library", "CoreServices"); + grub_install_mkdir_p (core_services); + + mach_ker = grub_util_path_concat (2, iso9660_dir, "mach_kernel"); + f = grub_util_fopen (mach_ker, "wb"); + fclose (f); + free (mach_ker); + + sv = grub_util_path_concat (2, core_services, "SystemVersion.plist"); + f = grub_util_fopen (sv, "wb"); + fprintf (f, "\n" + "\n" + " ProductBuildVersion\n" + " \n" + " ProductName\n" + " %s\n" + " ProductVersion\n" + " %s\n" + "\n" + "\n", product_name, product_version); + fclose (f); + free (sv); + label = grub_util_path_concat (2, core_services, ".disk_label"); + char *label_string = xasprintf ("%s %s", product_name, product_version); + grub_util_render_label (label_font, label_bgcolor ? : "white", + label_color ? : "black", label_string, label); + free (label); + label_text = grub_util_path_concat (2, core_services, ".disk_label.contentDetails"); + f = grub_util_fopen (label_text, "wb"); + fprintf (f, "%s\n", label_string); + fclose (f); + free (label_string); + free (label_text); + if (system_area == SYS_AREA_COMMON) + { + xorriso_push ("-hfsplus"); + xorriso_push ("-apm-block-size"); + xorriso_push ("2048"); + xorriso_push ("-hfsplus-file-creator-type"); + xorriso_push ("chrp"); + xorriso_push ("tbxj"); + xorriso_push ("/System/Library/CoreServices/.disk_label"); + + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI]) + { + xorriso_push ("-hfs-bless-by"); + xorriso_push ("i"); + xorriso_push ("/System/Library/CoreServices/boot.efi"); + } + } + } + + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_IA64_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_ARM_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_ARM64_EFI]) + { + char *efidir = grub_util_make_temporary_dir (); + char *efidir_efi = grub_util_path_concat (2, efidir, "efi"); + char *efidir_efi_boot = grub_util_path_concat (3, efidir, "efi", "boot"); + char *imgname, *img32, *img64, *img_mac = NULL; + char *efiimgfat; + grub_install_mkdir_p (efidir_efi_boot); + + grub_install_push_module ("part_gpt"); + grub_install_push_module ("part_msdos"); + + imgname = grub_util_path_concat (2, efidir_efi_boot, "bootia64.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_IA64_EFI, "ia64-efi", imgname); + free (imgname); + + grub_install_push_module ("part_apple"); + img64 = grub_util_path_concat (2, efidir_efi_boot, "bootx64.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_X86_64_EFI, "x86_64-efi", img64); + grub_install_pop_module (); + + grub_install_push_module ("part_apple"); + img32 = grub_util_path_concat (2, efidir_efi_boot, "bootia32.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_I386_EFI, "i386-efi", img32); + grub_install_pop_module (); + + imgname = grub_util_path_concat (2, efidir_efi_boot, "bootarm.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_ARM_EFI, "arm-efi", imgname); + free (imgname); + + imgname = grub_util_path_concat (2, efidir_efi_boot, "bootaa64.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_ARM64_EFI, "arm64-efi", + imgname); + free (imgname); + + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI]) + { + imgname = grub_util_path_concat (2, efidir_efi_boot, "boot.efi"); + /* For old macs. Suggested by Peter Jones. */ + grub_install_copy_file (img32, imgname, 1); + } + + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI] + || source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI]) + img_mac = grub_util_path_concat (2, core_services, "boot.efi"); + + if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI] + && source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI]) + grub_util_glue_efi (img32, img64, img_mac); + else if (source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI]) + grub_install_copy_file (img64, img_mac, 1); + else if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI]) + grub_install_copy_file (img32, img_mac, 1); + + free (img_mac); + free (img32); + free (img64); + free (efidir_efi_boot); + + efiimgfat = grub_util_path_concat (2, iso9660_dir, "efi.img"); + int rv; + rv = grub_util_exec ((const char * []) { "mformat", "-C", "-f", "2880", "-L", "16", "-i", + efiimgfat, "::", NULL }); + if (rv != 0) + grub_util_error ("`%s` invocation failed\n", "mformat"); + rv = grub_util_exec ((const char * []) { "mcopy", "-s", "-i", efiimgfat, efidir_efi, "::/", NULL }); + if (rv != 0) + grub_util_error ("`%s` invocation failed\n", "mformat"); + xorriso_push ("--efi-boot"); + xorriso_push ("efi.img"); + xorriso_push ("-efi-boot-part"); + xorriso_push ("--efi-boot-image"); + + grub_util_unlink_recursive (efidir); + free (efiimgfat); + free (efidir_efi); + free (efidir); + grub_install_pop_module (); + grub_install_pop_module (); + } + + grub_install_push_module ("part_apple"); + make_image_fwdisk (GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275, "powerpc-ieee1275", "powerpc-ieee1275/core.elf"); + grub_install_pop_module (); + + if (source_dirs[GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275]) + { + char *grub_chrp = grub_util_path_concat (2, source_dirs[GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275], + "grub.chrp"); + char *bisrc = grub_util_path_concat (2, source_dirs[GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275], + "bootinfo.txt"); + char *bootx = grub_util_path_concat (2, core_services, "BootX"); + char *ppc_chrp = grub_util_path_concat (3, iso9660_dir, "ppc", "chrp"); + char *bitgt = grub_util_path_concat (3, iso9660_dir, "ppc", "bootinfo.txt"); + grub_install_copy_file (grub_chrp, bootx, 1); + grub_install_mkdir_p (ppc_chrp); + grub_install_copy_file (bisrc, bitgt, 1); + xorriso_link ("/System/Library/CoreServices/grub.elf", "/boot/grub/powerpc-ieee1275/core.elf"); + xorriso_link ("/boot/grub/powerpc.elf", "/boot/grub/powerpc-ieee1275/core.elf"); + /* FIXME: add PreP */ + if (system_area == SYS_AREA_COMMON) + { + xorriso_push ("-hfsplus-file-creator-type"); + xorriso_push ("chrp"); + xorriso_push ("tbxi"); + xorriso_push ("/System/Library/CoreServices/BootX"); + xorriso_push ("-hfs-bless-by"); + xorriso_push ("p"); + xorriso_push ("/System/Library/CoreServices"); + } + xorriso_push ("-sysid"); + xorriso_push ("PPC"); + } + + make_image_fwdisk (GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275, + "sparc64-ieee1275-cdcore", "sparc64-ieee1275/core.img"); + + if (source_dirs[GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275] + && system_area == SYS_AREA_SPARC) + { + char *cdboot; + FILE *in, *out; + char buf[512]; + sysarea_img = grub_util_make_temporary_file (); + cdboot = grub_util_path_concat (2, source_dirs[GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275], + "cdboot.img"); + in = grub_util_fopen (cdboot, "rb"); + if (!in) + grub_util_error (_("cannot open `%s': %s"), cdboot, + strerror (errno)); + out = grub_util_fopen (sysarea_img, "wb"); + if (!out) + grub_util_error (_("cannot open `%s': %s"), sysarea_img, + strerror (errno)); + memset (buf, 0, 512); + fwrite (buf, 1, 512, out); + if (fread (buf, 1, 512, in) != 512) + grub_util_error (_("cannot read `%s': %s"), cdboot, + strerror (errno)); + fwrite (buf, 1, 512, out); + fclose (in); + fclose (out); + xorriso_push ("-G"); + xorriso_push (sysarea_img); + xorriso_push ("-B"); + xorriso_push (","); + xorriso_push ("--grub2-sparc-core"); + xorriso_push ("/boot/grub/sparc64-ieee1275/core.img"); + } + + make_image_fwdisk (GRUB_INSTALL_PLATFORM_MIPS_ARC, "mips-arc", "mips-arc/core.img"); + + if (source_dirs[GRUB_INSTALL_PLATFORM_MIPS_ARC]) + { + xorriso_link ("/boot/grub/mips-arc/grub", "/boot/grub/mips-arc/core.img"); + xorriso_link ("/boot/grub/mips-arc/sashARCS", "/boot/grub/mips-arc/core.img"); + xorriso_link ("/boot/grub/mips-arc/sash", "/boot/grub/mips-arc/core.img"); + } + if (source_dirs[GRUB_INSTALL_PLATFORM_MIPS_ARC] && system_area == SYS_AREA_ARCS) + { + xorriso_push ("-mips-boot"); + xorriso_push ("/boot/grub/mips-arc/sashARCS"); + xorriso_push ("-mips-boot"); + xorriso_push ("/boot/grub/mips-arc/sash"); + xorriso_push ("-mips-boot"); + xorriso_push ("/boot/grub/mips-arc/grub"); + } + + make_image_fwdisk (GRUB_INSTALL_PLATFORM_MIPSEL_ARC, "mipsel-arc", "arc.exe"); + + grub_install_push_module ("pata"); + make_image (GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS, "mipsel-qemu_mips-elf", "roms/mipsel-qemu_mips.elf"); + + make_image (GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "mipsel-loongson-elf", "loongson.elf"); + + make_image (GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "mipsel-yeeloong-flash", "mipsel-yeeloong.bin"); + make_image (GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "mipsel-fuloong2f-flash", "mipsel-fuloong2f.bin"); + + make_image (GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS, "mips-qemu_mips-elf", "roms/mips-qemu_mips.elf"); + + grub_install_push_module ("at_keyboard"); + + make_image (GRUB_INSTALL_PLATFORM_I386_QEMU, "i386-qemu", "roms/qemu.img"); + + grub_install_push_module ("ahci"); + + make_image (GRUB_INSTALL_PLATFORM_I386_COREBOOT, "i386-coreboot", "roms/coreboot.elf"); + grub_install_pop_module (); + grub_install_pop_module (); + grub_install_pop_module (); + + if (rom_directory) + { + const struct + { + enum grub_install_plat plat; + const char *from, *to; + } roms[] = + { + {GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS, "roms/mipsel-qemu_mips.elf", "mipsel-qemu_mips.elf"}, + {GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "loongson.elf", "mipsel-loongson.elf"}, + {GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "roms/mipsel-yeeloong.bin", "mipsel-yeeloong.bin"}, + {GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON, "roms/mipsel-fulong.bin", "mipsel-fulong.bin"}, + {GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS, "roms/mips-qemu_mips.elf", "mips-qemu_mips.elf"}, + {GRUB_INSTALL_PLATFORM_I386_QEMU, "roms/qemu.img", "qemu.img"}, + {GRUB_INSTALL_PLATFORM_I386_COREBOOT, "roms/coreboot.elf", "coreboot.elf"}, + }; + grub_size_t i; + for (i = 0; i < ARRAY_SIZE (roms); i++) + { + char *from = grub_util_path_concat (2, boot_grub, roms[i].from); + char *to = grub_util_path_concat (2, rom_directory, roms[i].to); + grub_install_copy_file (from, to, 0); + } + } + + xorriso_push ("--protective-msdos-label"); + xorriso_push ("-o"); + xorriso_push (output_image); + xorriso_push ("-r"); + xorriso_push (iso9660_dir); + xorriso_push ("--sort-weight"); + xorriso_push ("0"); + xorriso_push ("/"); + xorriso_push ("--sort-weight"); + xorriso_push ("1"); + xorriso_push ("/boot"); + int i; + for (i = 0; i < xorriso_tail_argc; i++) + xorriso_push (xorriso_tail_argv[i]); + + xorriso_argv[xorriso_argc] = NULL; + + grub_util_exec ((const char *const *)xorriso_argv); + + grub_util_unlink_recursive (iso9660_dir); + + if (sysarea_img) + grub_util_unlink (sysarea_img); + + free (core_services); + free (romdir); + return 0; +} diff --git a/util/grub-mkstandalone.c b/util/grub-mkstandalone.c new file mode 100644 index 000000000..4907d44c0 --- /dev/null +++ b/util/grub-mkstandalone.c @@ -0,0 +1,361 @@ + +/* + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . +*/ + +#include + +#include +#include +#include + +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +static char *output_image; +static char **files; +static int nfiles; +const struct grub_install_image_target_desc *format; +static FILE *memdisk; + +enum + { + OPTION_OUTPUT = 'o', + OPTION_FORMAT = 'O' + }; + +static struct argp_option options[] = { + GRUB_INSTALL_OPTIONS, + {"output", 'o', N_("FILE"), + 0, N_("save output in FILE [required]"), 2}, + {"format", 'O', N_("FILE"), 0, 0, 2}, + {"compression", 'C', "xz|none|auto", OPTION_HIDDEN, 0, 2}, + {0, 0, 0, 0, 0, 0} +}; + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case 'O': + { + char *formats = grub_install_get_image_targets_string (), *ret; + ret = xasprintf ("%s\n%s %s", _("generate an image in FORMAT"), + _("available formats:"), formats); + free (formats); + return ret; + } + default: + return grub_install_help_filter (key, text, input); + } +} + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + if (key == 'C') + key = GRUB_INSTALL_OPTIONS_INSTALL_CORE_COMPRESS; + + if (grub_install_parse (key, arg)) + return 0; + + switch (key) + { + + case 'o': + if (output_image) + free (output_image); + + output_image = xstrdup (arg); + break; + + case 'O': + { + format = grub_install_get_image_target (arg); + if (!format) + { + printf (_("unknown target format %s\n"), arg); + argp_usage (state); + exit (1); + } + break; + } + + case ARGP_KEY_ARG: + files[nfiles++] = xstrdup (arg); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +struct argp argp = { + options, argp_parser, N_("[OPTION] SOURCE..."), + N_("Generate a standalone image (containing all modules) in the selected format")"\v"N_("Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted"), + NULL, help_filter, NULL +}; + +/* tar support */ +#define MAGIC "ustar" +struct head +{ + char name[100]; + char mode[8]; + char uid[8]; + char gid[8]; + char size[12]; + char mtime[12]; + char chksum[8]; + char typeflag; + char linkname[100]; + char magic[6]; + char version[2]; + char uname[32]; + char gname[32]; + char devmajor[8]; + char devminor[8]; + char prefix[155]; + char pad[12]; +} GRUB_PACKED; + +static void +write_zeros (unsigned rsz) +{ + char buf[512]; + + memset (buf, 0, 512); + fwrite (buf, 1, rsz, memdisk); +} + +static void +write_pad (unsigned sz) +{ + write_zeros ((~sz + 1) & 511); +} + +static void +set_tar_value (char *field, grub_uint32_t val, + unsigned len) +{ + unsigned i; + for (i = 0; i < len - 1; i++) + field[len - 2 - i] = '0' + ((val >> (3 * i)) & 7); +} + +static void +compute_checksum (struct head *hd) +{ + unsigned int chk = 0; + unsigned char *ptr; + memset (hd->chksum, ' ', 8); + for (ptr = (unsigned char *) hd; ptr < (unsigned char *) (hd + 1); ptr++) + chk += *ptr; + set_tar_value (hd->chksum, chk, 8); +} + +static void +add_tar_file (const char *from, + const char *to) +{ + char *tcn; + const char *iptr; + char *optr; + struct head hd; + grub_util_fd_t in; + ssize_t r; + grub_uint32_t mtime = 0; + grub_uint32_t size; + + COMPILE_TIME_ASSERT (sizeof (hd) == 512); + + if (grub_util_is_special_file (from)) + return; + + mtime = grub_util_get_mtime (from); + + optr = tcn = xmalloc (strlen (to) + 1); + for (iptr = to; *iptr == '/'; iptr++); + for (; *iptr; iptr++) + if (!(iptr[0] == '/' && iptr[1] == '/')) + *optr++ = *iptr; + *optr = '\0'; + + if (grub_util_is_directory (from)) + { + grub_util_fd_dir_t d; + grub_util_fd_dirent_t de; + + d = grub_util_fd_opendir (from); + + while ((de = grub_util_fd_readdir (d))) + { + char *fp, *tfp; + if (strcmp (de->d_name, ".") == 0) + continue; + if (strcmp (de->d_name, "..") == 0) + continue; + fp = grub_util_path_concat (2, from, de->d_name); + tfp = xasprintf ("%s/%s", to, de->d_name); + add_tar_file (fp, tfp); + free (fp); + } + grub_util_fd_closedir (d); + free (tcn); + return; + } + + if (optr - tcn > 99) + { + memset (&hd, 0, sizeof (hd)); + memcpy (hd.name, tcn, 99); + memcpy (hd.mode, "0000600", 7); + memcpy (hd.uid, "0001750", 7); + memcpy (hd.gid, "0001750", 7); + + set_tar_value (hd.size, optr - tcn, 12); + set_tar_value (hd.mtime, mtime, 12); + hd.typeflag = 'L'; + memcpy (hd.magic, MAGIC, sizeof (hd.magic)); + memcpy (hd.uname, "grub", 4); + memcpy (hd.gname, "grub", 4); + + compute_checksum (&hd); + + fwrite (&hd, 1, sizeof (hd), memdisk); + fwrite (tcn, 1, optr - tcn, memdisk); + + write_pad (optr - tcn); + } + + in = grub_util_fd_open (from, GRUB_UTIL_FD_O_RDONLY); + if (!GRUB_UTIL_FD_IS_VALID (in)) + grub_util_error (_("cannot open `%s': %s"), from, grub_util_fd_strerror ()); + + if (!grub_install_copy_buffer) + grub_install_copy_buffer = xmalloc (GRUB_INSTALL_COPY_BUFFER_SIZE); + + size = grub_util_get_fd_size (in, from, NULL); + + memset (&hd, 0, sizeof (hd)); + memcpy (hd.name, tcn, optr - tcn < 99 ? optr - tcn : 99); + memcpy (hd.mode, "0000600", 7); + memcpy (hd.uid, "0001750", 7); + memcpy (hd.gid, "0001750", 7); + + set_tar_value (hd.size, size, 12); + set_tar_value (hd.mtime, mtime, 12); + hd.typeflag = '0'; + memcpy (hd.magic, MAGIC, sizeof (hd.magic)); + memcpy (hd.uname, "grub", 4); + memcpy (hd.gname, "grub", 4); + + compute_checksum (&hd); + + fwrite (&hd, 1, sizeof (hd), memdisk); + + while (1) + { + r = grub_util_fd_read (in, grub_install_copy_buffer, GRUB_INSTALL_COPY_BUFFER_SIZE); + if (r <= 0) + break; + fwrite (grub_install_copy_buffer, 1, r, memdisk); + } + grub_util_fd_close (in); + + write_pad (size); + free (tcn); +} + +int +main (int argc, char *argv[]) +{ + const char *pkglibdir; + int i; + + grub_util_host_init (&argc, &argv); + grub_util_disable_fd_syncs (); + + files = xmalloc ((argc + 1) * sizeof (files[0])); + + argp_parse (&argp, argc, argv, 0, 0, 0); + + pkglibdir = grub_util_get_pkglibdir (); + + if (!output_image) + grub_util_error ("%s", _("output file must be specified")); + + if (!format) + grub_util_error ("%s", _("Target format not specified (use the -O option).")); + + if (!grub_install_source_directory) + grub_install_source_directory = grub_util_path_concat (2, pkglibdir, grub_util_get_target_dirname (format)); + + enum grub_install_plat plat = grub_install_get_target (grub_install_source_directory); + + char *memdisk_dir = grub_util_make_temporary_dir (); + char *boot_grub = grub_util_path_concat (3, memdisk_dir, "boot", "grub"); + grub_install_copy_files (grub_install_source_directory, + boot_grub, plat); + + char *memdisk_img = grub_util_make_temporary_file (); + + memdisk = grub_util_fopen (memdisk_img, "wb"); + + add_tar_file (memdisk_dir, ""); + for (i = 0; i < nfiles; i++) + { + char *eq = grub_strchr (files[i], '='); + char *from, *to; + if (!eq) + { + from = files[i]; + to = files[i]; + } + else + { + *eq = '\0'; + to = files[i]; + from = eq + 1; + } + while (*to == '/') + to++; + add_tar_file (from, to); + } + write_zeros (512); + + fclose (memdisk); + + grub_util_unlink_recursive (memdisk_dir); + + grub_install_push_module ("memdisk"); + grub_install_push_module ("tar"); + + grub_install_make_image_wrap (grub_install_source_directory, + "(memdisk)/boot/grub", output_image, + memdisk_img, NULL, + grub_util_get_target_name (format), 0); + + grub_util_unlink (memdisk_img); + return 0; +} diff --git a/util/grub-module-verifier.c b/util/grub-module-verifier.c new file mode 100644 index 000000000..9179285a5 --- /dev/null +++ b/util/grub-module-verifier.c @@ -0,0 +1,175 @@ +#include +#include + +#include +#include +#include +#include + +struct grub_module_verifier_arch archs[] = { + { "i386", 4, 0, EM_386, GRUB_MODULE_VERIFY_SUPPORTS_REL, (int[]){ + R_386_32, + R_386_PC32, + -1 + } }, + { "x86_64", 8, 0, EM_X86_64, GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ + R_X86_64_64, + R_X86_64_PC64, + /* R_X86_64_32, R_X86_64_32S are supported but shouldn't be used because of their limited range. */ + -1 + }, (int[]){ + R_X86_64_PC32, + -1 + } + }, + { "powerpc", 4, 1, EM_PPC, GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ + GRUB_ELF_R_PPC_ADDR16_LO, + GRUB_ELF_R_PPC_REL24, /* It has limited range but GRUB adds trampolines when necessarry. */ + GRUB_ELF_R_PPC_ADDR16_HA, + GRUB_ELF_R_PPC_ADDR32, + GRUB_ELF_R_PPC_REL32, + -1 + } }, + { "sparc64", 8, 1, EM_SPARCV9, GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ + R_SPARC_WDISP30, /* It has limited range but GRUB adds trampolines when necessarry. */ + R_SPARC_HH22, + R_SPARC_HM10, + R_SPARC_LM22, + R_SPARC_LO10, + R_SPARC_64, + R_SPARC_OLO10, + /* Following 2 relocations have limited range but unfortunately + clang generates them, as it doesn't implement mcmodel=large properly. + At least our heap and core are under 4G, so it's not a problem + usually. */ + R_SPARC_HI22, + R_SPARC_32, + -1 + } }, + { "ia64", 8, 0, EM_IA_64, GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ + R_IA64_PCREL21B, /* We should verify that it's pointing either + to a function or to a section in the same module. + Checking that external symbol is a function is + non-trivial and I have never seen this relocation used + for anything else, so assume that it always points to a + function. + */ + R_IA64_SEGREL64LSB, + R_IA64_FPTR64LSB, + R_IA64_DIR64LSB, + R_IA64_PCREL64LSB, + R_IA64_LTOFF22X, + R_IA64_LTOFF22, + R_IA64_GPREL64I, + R_IA64_LTOFF_FPTR22, + R_IA64_LDXMOV, + -1 + }, (int[]){ + R_IA64_GPREL22, + -1 + } }, + { "mipsel", 4, 0, EM_MIPS, GRUB_MODULE_VERIFY_SUPPORTS_REL | GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ + R_MIPS_HI16, + R_MIPS_LO16, + R_MIPS_32, + R_MIPS_GPREL32, + R_MIPS_26, + R_MIPS_GOT16, + R_MIPS_CALL16, + R_MIPS_JALR, + -1 + } }, + { "mips", 4, 1, EM_MIPS, GRUB_MODULE_VERIFY_SUPPORTS_REL | GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ + R_MIPS_HI16, + R_MIPS_LO16, + R_MIPS_32, + R_MIPS_GPREL32, + R_MIPS_26, + R_MIPS_GOT16, + R_MIPS_CALL16, + R_MIPS_JALR, + -1 + } }, + { "arm", 4, 0, EM_ARM, GRUB_MODULE_VERIFY_SUPPORTS_REL, (int[]){ + /* Some relocations are range-limited but trampolines are added when necessarry. */ + R_ARM_ABS32, + R_ARM_CALL, + R_ARM_JUMP24, + R_ARM_THM_CALL, + R_ARM_THM_JUMP24, + R_ARM_V4BX, + R_ARM_THM_MOVW_ABS_NC, + R_ARM_THM_MOVT_ABS, + R_ARM_THM_JUMP19, + -1 + } }, + { "arm64", 8, 0, EM_AARCH64, GRUB_MODULE_VERIFY_SUPPORTS_REL | GRUB_MODULE_VERIFY_SUPPORTS_RELA, (int[]){ + R_AARCH64_ABS64, + R_AARCH64_CALL26, + R_AARCH64_JUMP26, + R_AARCH64_ADR_GOT_PAGE, + R_AARCH64_LD64_GOT_LO12_NC, + -1 + }, (int[]){ + R_AARCH64_ADR_PREL_PG_HI21, + R_AARCH64_ADD_ABS_LO12_NC, + R_AARCH64_LDST64_ABS_LO12_NC, + R_AARCH64_PREL32, + -1 + } + }, +}; + +struct platform_whitelist { + const char *arch; + const char *platform; + const char **whitelist_empty; +}; + +static struct platform_whitelist whitelists[] = { + {"i386", "xen", (const char *[]) {"all_video", 0}}, + {"x86_64", "xen", (const char *[]) {"all_video", 0}}, + {"sparc64", "ieee1275", (const char *[]) {"all_video", 0}}, + + /* video is compiled-in on MIPS. */ + {"mipsel", "loongson", (const char *[]) {"all_video", 0}}, + {"mipsel", "qemu_mips", (const char *[]) {"all_video", 0}}, + {"mipsel", "arc", (const char *[]) {"all_video", 0}}, + {"mips", "qemu_mips", (const char *[]) {"all_video", 0}}, + {"mips", "arc", (const char *[]) {"all_video", 0}}, +}; + + +int +main (int argc, char **argv) +{ + size_t module_size; + unsigned arch, whitelist; + const char **whitelist_empty = 0; + char *module_img; + if (argc != 4) { + fprintf (stderr, "usage: %s FILE ARCH PLATFORM\n", argv[0]); + return 1; + } + + for (arch = 0; arch < ARRAY_SIZE(archs); arch++) + if (strcmp(archs[arch].name, argv[2]) == 0) + break; + if (arch == ARRAY_SIZE(archs)) + grub_util_error("unknown arch: %s", argv[2]); + + for (whitelist = 0; whitelist < ARRAY_SIZE(whitelists); whitelist++) + if (strcmp(whitelists[whitelist].arch, argv[2]) == 0 + && strcmp(whitelists[whitelist].platform, argv[3]) == 0) + break; + if (whitelist != ARRAY_SIZE(whitelists)) + whitelist_empty = whitelists[whitelist].whitelist_empty; + + module_size = grub_util_get_image_size (argv[1]); + module_img = grub_util_read_image (argv[1]); + if (archs[arch].voidp_sizeof == 8) + grub_module_verify64(module_img, module_size, &archs[arch], whitelist_empty); + else + grub_module_verify32(module_img, module_size, &archs[arch], whitelist_empty); + return 0; +} diff --git a/util/grub-module-verifier32.c b/util/grub-module-verifier32.c new file mode 100644 index 000000000..257229f8f --- /dev/null +++ b/util/grub-module-verifier32.c @@ -0,0 +1,2 @@ +#define MODULEVERIFIER_ELF32 1 +#include "grub-module-verifierXX.c" diff --git a/util/grub-module-verifier64.c b/util/grub-module-verifier64.c new file mode 100644 index 000000000..4db6b4bed --- /dev/null +++ b/util/grub-module-verifier64.c @@ -0,0 +1,2 @@ +#define MODULEVERIFIER_ELF64 1 +#include "grub-module-verifierXX.c" diff --git a/util/grub-module-verifierXX.c b/util/grub-module-verifierXX.c new file mode 100644 index 000000000..1feaafc9b --- /dev/null +++ b/util/grub-module-verifierXX.c @@ -0,0 +1,435 @@ +#include + +#include +#include +#include + +#if defined(MODULEVERIFIER_ELF32) +# define SUFFIX(x) x ## 32 +# define ELFCLASSXX ELFCLASS32 +# define Elf_Ehdr Elf32_Ehdr +# define Elf_Phdr Elf32_Phdr +# define Elf_Nhdr Elf32_Nhdr +# define Elf_Addr Elf32_Addr +# define Elf_Sym Elf32_Sym +# define Elf_Off Elf32_Off +# define Elf_Shdr Elf32_Shdr +# define Elf_Rela Elf32_Rela +# define Elf_Rel Elf32_Rel +# define Elf_Word Elf32_Word +# define Elf_Half Elf32_Half +# define Elf_Section Elf32_Section +# define ELF_R_SYM(val) ELF32_R_SYM(val) +# define ELF_R_TYPE(val) ELF32_R_TYPE(val) +# define ELF_ST_TYPE(val) ELF32_ST_TYPE(val) +#elif defined(MODULEVERIFIER_ELF64) +# define SUFFIX(x) x ## 64 +# define ELFCLASSXX ELFCLASS64 +# define Elf_Ehdr Elf64_Ehdr +# define Elf_Phdr Elf64_Phdr +# define Elf_Nhdr Elf64_Nhdr +# define Elf_Addr Elf64_Addr +# define Elf_Sym Elf64_Sym +# define Elf_Off Elf64_Off +# define Elf_Shdr Elf64_Shdr +# define Elf_Rela Elf64_Rela +# define Elf_Rel Elf64_Rel +# define Elf_Word Elf64_Word +# define Elf_Half Elf64_Half +# define Elf_Section Elf64_Section +# define ELF_R_SYM(val) ELF64_R_SYM(val) +# define ELF_R_TYPE(val) ELF64_R_TYPE(val) +# define ELF_ST_TYPE(val) ELF64_ST_TYPE(val) +#else +#error "I'm confused" +#endif + +#define grub_target_to_host32(x) (grub_target_to_host32_real (arch, (x))) +#define grub_host_to_target32(x) (grub_host_to_target32_real (arch, (x))) +#define grub_target_to_host64(x) (grub_target_to_host64_real (arch, (x))) +#define grub_host_to_target64(x) (grub_host_to_target64_real (arch, (x))) +#define grub_host_to_target_addr(x) (grub_host_to_target_addr_real (arch, (x))) +#define grub_target_to_host16(x) (grub_target_to_host16_real (arch, (x))) +#define grub_host_to_target16(x) (grub_host_to_target16_real (arch, (x))) +#define grub_target_to_host(val) grub_target_to_host_real(arch, (val)) + +static inline grub_uint32_t +grub_target_to_host32_real (const struct grub_module_verifier_arch *arch, + grub_uint32_t in) +{ + if (arch->bigendian) + return grub_be_to_cpu32 (in); + else + return grub_le_to_cpu32 (in); +} + +static inline grub_uint64_t +grub_target_to_host64_real (const struct grub_module_verifier_arch *arch, + grub_uint64_t in) +{ + if (arch->bigendian) + return grub_be_to_cpu64 (in); + else + return grub_le_to_cpu64 (in); +} + +static inline grub_uint64_t +grub_host_to_target64_real (const struct grub_module_verifier_arch *arch, + grub_uint64_t in) +{ + if (arch->bigendian) + return grub_cpu_to_be64 (in); + else + return grub_cpu_to_le64 (in); +} + +static inline grub_uint32_t +grub_host_to_target32_real (const struct grub_module_verifier_arch *arch, + grub_uint32_t in) +{ + if (arch->bigendian) + return grub_cpu_to_be32 (in); + else + return grub_cpu_to_le32 (in); +} + +static inline grub_uint16_t +grub_target_to_host16_real (const struct grub_module_verifier_arch *arch, + grub_uint16_t in) +{ + if (arch->bigendian) + return grub_be_to_cpu16 (in); + else + return grub_le_to_cpu16 (in); +} + +static inline grub_uint16_t +grub_host_to_target16_real (const struct grub_module_verifier_arch *arch, + grub_uint16_t in) +{ + if (arch->bigendian) + return grub_cpu_to_be16 (in); + else + return grub_cpu_to_le16 (in); +} + +static inline grub_uint64_t +grub_host_to_target_addr_real (const struct grub_module_verifier_arch *arch, grub_uint64_t in) +{ + if (arch->voidp_sizeof == 8) + return grub_host_to_target64_real (arch, in); + else + return grub_host_to_target32_real (arch, in); +} + +static inline grub_uint64_t +grub_target_to_host_real (const struct grub_module_verifier_arch *arch, grub_uint64_t in) +{ + if (arch->voidp_sizeof == 8) + return grub_target_to_host64_real (arch, in); + else + return grub_target_to_host32_real (arch, in); +} + + +static Elf_Shdr * +find_section (const struct grub_module_verifier_arch *arch, Elf_Ehdr *e, const char *name) +{ + Elf_Shdr *s; + const char *str; + unsigned i; + + s = (Elf_Shdr *) ((char *) e + grub_target_to_host (e->e_shoff) + grub_target_to_host16 (e->e_shstrndx) * grub_target_to_host16 (e->e_shentsize)); + str = (char *) e + grub_target_to_host (s->sh_offset); + + for (i = 0, s = (Elf_Shdr *) ((char *) e + grub_target_to_host (e->e_shoff)); + i < grub_target_to_host16 (e->e_shnum); + i++, s = (Elf_Shdr *) ((char *) s + grub_target_to_host16 (e->e_shentsize))) + if (strcmp (str + grub_target_to_host32 (s->sh_name), name) == 0) + return s; + return NULL; +} + +static void +check_license (const struct grub_module_verifier_arch *arch, Elf_Ehdr *e) +{ + Elf_Shdr *s = find_section (arch, e, ".module_license"); + if (s && (strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=GPLv3") == 0 + || strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=GPLv3+") == 0 + || strcmp ((char *) e + grub_target_to_host(s->sh_offset), "LICENSE=GPLv2+") == 0)) + return; + grub_util_error ("incompatible license"); +} + +static Elf_Sym * +get_symtab (const struct grub_module_verifier_arch *arch, Elf_Ehdr *e, Elf_Word *size, Elf_Word *entsize) +{ + unsigned i; + Elf_Shdr *s, *sections; + Elf_Sym *sym; + + sections = (Elf_Shdr *) ((char *) e + grub_target_to_host (e->e_shoff)); + for (i = 0, s = sections; + i < grub_target_to_host16 (e->e_shnum); + i++, s = (Elf_Shdr *) ((char *) s + grub_target_to_host16 (e->e_shentsize))) + if (grub_target_to_host32 (s->sh_type) == SHT_SYMTAB) + break; + + if (i == grub_target_to_host16 (e->e_shnum)) + return NULL; + + sym = (Elf_Sym *) ((char *) e + grub_target_to_host (s->sh_offset)); + *size = grub_target_to_host (s->sh_size); + *entsize = grub_target_to_host (s->sh_entsize); + return sym; +} + +static int +is_whitelisted (const char *modname, const char **whitelist) +{ + const char **ptr; + if (!whitelist) + return 0; + if (!modname) + return 0; + for (ptr = whitelist; *ptr; ptr++) + if (strcmp (modname, *ptr) == 0) + return 1; + return 0; +} + +static void +check_symbols (const struct grub_module_verifier_arch *arch, + Elf_Ehdr *e, const char *modname, + const char **whitelist_empty) +{ + Elf_Sym *sym; + Elf_Word size, entsize; + unsigned i; + + /* Module without symbol table and without .moddeps section is useless + at boot time, so catch it early to prevent build errors */ + sym = get_symtab (arch, e, &size, &entsize); + if (!sym) + { + Elf_Shdr *s; + + /* However some modules are dependencies-only, + e.g. insmod all_video pulls in all video drivers. + Some platforms e.g. xen have no video drivers, so + the module does nothing. */ + if (is_whitelisted (modname, whitelist_empty)) + return; + + s = find_section (arch, e, ".moddeps"); + + if (!s) + grub_util_error ("no symbol table and no .moddeps section"); + + if (!s->sh_size) + grub_util_error ("no symbol table and empty .moddeps section"); + + return; + } + + for (i = 0; + i < size / entsize; + i++, sym = (Elf_Sym *) ((char *) sym + entsize)) + { + unsigned char type = ELF_ST_TYPE (sym->st_info); + + switch (type) + { + case STT_NOTYPE: + case STT_OBJECT: + case STT_FUNC: + case STT_SECTION: + case STT_FILE: + break; + + default: + return grub_util_error ("unknown symbol type `%d'", (int) type); + } + } +} + +static int +is_symbol_local(Elf_Sym *sym) +{ + switch (ELF_ST_TYPE (sym->st_info)) + { + case STT_NOTYPE: + case STT_OBJECT: + if (sym->st_name != 0 && sym->st_shndx == 0) + return 0; + return 1; + + case STT_FUNC: + case STT_SECTION: + return 1; + + default: + return 0; + } +} + +static void +section_check_relocations (const struct grub_module_verifier_arch *arch, void *ehdr, + Elf_Shdr *s, size_t target_seg_size) +{ + Elf_Rel *rel, *max; + Elf_Sym *symtab; + Elf_Word symtabsize, symtabentsize; + + symtab = get_symtab (arch, ehdr, &symtabsize, &symtabentsize); + if (!symtab) + grub_util_error ("relocation without symbol table"); + + for (rel = (Elf_Rel *) ((char *) ehdr + grub_target_to_host (s->sh_offset)), + max = (Elf_Rel *) ((char *) rel + grub_target_to_host (s->sh_size)); + rel < max; + rel = (Elf_Rel *) ((char *) rel + grub_target_to_host (s->sh_entsize))) + { + Elf_Sym *sym; + unsigned i; + + if (target_seg_size < grub_target_to_host (rel->r_offset)) + grub_util_error ("reloc offset is out of the segment"); + + grub_uint32_t type = ELF_R_TYPE (grub_target_to_host (rel->r_info)); + + if (arch->machine == EM_SPARCV9) + type &= 0xff; + + for (i = 0; arch->supported_relocations[i] != -1; i++) + if (type == arch->supported_relocations[i]) + break; + if (arch->supported_relocations[i] != -1) + continue; + if (!arch->short_relocations) + grub_util_error ("unsupported relocation 0x%x", type); + for (i = 0; arch->short_relocations[i] != -1; i++) + if (type == arch->short_relocations[i]) + break; + if (arch->short_relocations[i] == -1) + grub_util_error ("unsupported relocation 0x%x", type); + sym = (Elf_Sym *) ((char *) symtab + symtabentsize * ELF_R_SYM (grub_target_to_host (rel->r_info))); + + if (is_symbol_local (sym)) + continue; + grub_util_error ("relocation 0x%x is not module-local", type); + } +#if defined(MODULEVERIFIER_ELF64) + if (arch->machine == EM_AARCH64) + { + unsigned unmatched_adr_got_page = 0; + Elf_Rela *rel2; + for (rel = (Elf_Rel *) ((char *) ehdr + grub_target_to_host (s->sh_offset)), + max = (Elf_Rel *) ((char *) rel + grub_target_to_host (s->sh_size)); + rel < max; + rel = (Elf_Rel *) ((char *) rel + grub_target_to_host (s->sh_entsize))) + { + switch (ELF_R_TYPE (grub_target_to_host (rel->r_info))) + { + case R_AARCH64_ADR_GOT_PAGE: + unmatched_adr_got_page++; + for (rel2 = (Elf_Rela *) ((char *) rel + grub_target_to_host (s->sh_entsize)); + rel2 < (Elf_Rela *) max; + rel2 = (Elf_Rela *) ((char *) rel2 + grub_target_to_host (s->sh_entsize))) + if (ELF_R_SYM (rel2->r_info) + == ELF_R_SYM (rel->r_info) + && ((Elf_Rela *) rel)->r_addend == rel2->r_addend + && ELF_R_TYPE (rel2->r_info) == R_AARCH64_LD64_GOT_LO12_NC) + break; + if (rel2 >= (Elf_Rela *) max) + grub_util_error ("ADR_GOT_PAGE without matching LD64_GOT_LO12_NC"); + break; + case R_AARCH64_LD64_GOT_LO12_NC: + if (unmatched_adr_got_page == 0) + grub_util_error ("LD64_GOT_LO12_NC without matching ADR_GOT_PAGE"); + unmatched_adr_got_page--; + break; + } + } + } +#endif +} + +static void +check_relocations (const struct grub_module_verifier_arch *arch, Elf_Ehdr *e) +{ + Elf_Shdr *s; + unsigned i; + + for (i = 0, s = (Elf_Shdr *) ((char *) e + grub_target_to_host (e->e_shoff)); + i < grub_target_to_host16 (e->e_shnum); + i++, s = (Elf_Shdr *) ((char *) s + grub_target_to_host16 (e->e_shentsize))) + if (grub_target_to_host32 (s->sh_type) == SHT_REL || grub_target_to_host32 (s->sh_type) == SHT_RELA) + { + Elf_Shdr *ts; + + if (grub_target_to_host32 (s->sh_type) == SHT_REL && !(arch->flags & GRUB_MODULE_VERIFY_SUPPORTS_REL)) + grub_util_error ("unsupported SHT_REL"); + if (grub_target_to_host32 (s->sh_type) == SHT_RELA && !(arch->flags & GRUB_MODULE_VERIFY_SUPPORTS_RELA)) + grub_util_error ("unsupported SHT_RELA"); + + /* Find the target segment. */ + if (grub_target_to_host32 (s->sh_info) >= grub_target_to_host16 (e->e_shnum)) + grub_util_error ("orphaned reloc section"); + ts = (Elf_Shdr *) ((char *) e + grub_target_to_host (e->e_shoff) + grub_target_to_host32 (s->sh_info) * grub_target_to_host16 (e->e_shentsize)); + + section_check_relocations (arch, e, s, grub_target_to_host (ts->sh_size)); + } +} + +void +SUFFIX(grub_module_verify) (void *module_img, size_t size, + const struct grub_module_verifier_arch *arch, + const char **whitelist_empty) +{ + Elf_Ehdr *e = module_img; + + /* Check the header size. */ + if (size < sizeof (Elf_Ehdr)) + grub_util_error ("ELF header smaller than expected"); + + /* Check the magic numbers. */ + if (e->e_ident[EI_MAG0] != ELFMAG0 + || e->e_ident[EI_MAG1] != ELFMAG1 + || e->e_ident[EI_MAG2] != ELFMAG2 + || e->e_ident[EI_MAG3] != ELFMAG3 + || e->e_ident[EI_VERSION] != EV_CURRENT + || grub_target_to_host32 (e->e_version) != EV_CURRENT) + grub_util_error ("invalid arch-independent ELF magic"); + + if (e->e_ident[EI_CLASS] != ELFCLASSXX + || e->e_ident[EI_DATA] != (arch->bigendian ? ELFDATA2MSB : ELFDATA2LSB) + || grub_target_to_host16 (e->e_machine) != arch->machine) + grub_util_error ("invalid arch-dependent ELF magic"); + + if (grub_target_to_host16 (e->e_type) != ET_REL) + { + grub_util_error ("this ELF file is not of the right type"); + } + + /* Make sure that every section is within the core. */ + if (size < grub_target_to_host (e->e_shoff) + + (grub_uint32_t) grub_target_to_host16 (e->e_shentsize) * grub_target_to_host16(e->e_shnum)) + { + grub_util_error ("ELF sections outside core"); + } + + check_license (arch, e); + + Elf_Shdr *s; + const char *modname; + + s = find_section (arch, e, ".modname"); + if (!s) + grub_util_error ("no module name found"); + + modname = (const char *) e + grub_target_to_host (s->sh_offset); + + check_symbols(arch, e, modname, whitelist_empty); + check_relocations(arch, e); +} diff --git a/util/grub-mount.c b/util/grub-mount.c new file mode 100644 index 000000000..a25db8a71 --- /dev/null +++ b/util/grub-mount.c @@ -0,0 +1,620 @@ +/* grub-mount.c - FUSE driver for filesystems that GRUB understands */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ +#define FUSE_USE_VERSION 26 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +static const char *root = NULL; +grub_device_t dev = NULL; +grub_fs_t fs = NULL; +static char **images = NULL; +static char *debug_str = NULL; +static char **fuse_args = NULL; +static int fuse_argc = 0; +static int num_disks = 0; +static int mount_crypt = 0; + +static grub_err_t +execute_command (const char *name, int n, char **args) +{ + grub_command_t cmd; + + cmd = grub_command_find (name); + if (! cmd) + grub_util_error (_("can't find command `%s'"), name); + + return (cmd->func) (cmd, n, args); +} + +/* Translate GRUB error numbers into OS error numbers. Print any unexpected + errors. */ +static int +translate_error (void) +{ + int ret; + + switch (grub_errno) + { + case GRUB_ERR_NONE: + ret = 0; + break; + + case GRUB_ERR_OUT_OF_MEMORY: + grub_print_error (); + ret = -ENOMEM; + break; + + case GRUB_ERR_BAD_FILE_TYPE: + /* This could also be EISDIR. Take a guess. */ + ret = -ENOTDIR; + break; + + case GRUB_ERR_FILE_NOT_FOUND: + ret = -ENOENT; + break; + + case GRUB_ERR_FILE_READ_ERROR: + case GRUB_ERR_READ_ERROR: + case GRUB_ERR_IO: + grub_print_error (); + ret = -EIO; + break; + + case GRUB_ERR_SYMLINK_LOOP: + ret = -ELOOP; + break; + + default: + grub_print_error (); + ret = -EINVAL; + break; + } + + /* Any previous errors were handled. */ + grub_errno = GRUB_ERR_NONE; + + return ret; +} + +/* Context for fuse_getattr. */ +struct fuse_getattr_ctx +{ + char *filename; + struct grub_dirhook_info file_info; + int file_exists; +}; + +/* A hook for iterating directories. */ +static int +fuse_getattr_find_file (const char *cur_filename, + const struct grub_dirhook_info *info, void *data) +{ + struct fuse_getattr_ctx *ctx = data; + + if ((info->case_insensitive ? grub_strcasecmp (cur_filename, ctx->filename) + : grub_strcmp (cur_filename, ctx->filename)) == 0) + { + ctx->file_info = *info; + ctx->file_exists = 1; + return 1; + } + return 0; +} + +static int +fuse_getattr (const char *path, struct stat *st) +{ + struct fuse_getattr_ctx ctx; + char *pathname, *path2; + + if (path[0] == '/' && path[1] == 0) + { + st->st_dev = 0; + st->st_ino = 0; + st->st_mode = 0555 | S_IFDIR; + st->st_uid = 0; + st->st_gid = 0; + st->st_rdev = 0; + st->st_size = 0; + st->st_blksize = 512; + st->st_blocks = (st->st_blksize + 511) >> 9; + st->st_atime = st->st_mtime = st->st_ctime = 0; + return 0; + } + + ctx.file_exists = 0; + + pathname = xstrdup (path); + + /* Remove trailing '/'. */ + while (*pathname && pathname[grub_strlen (pathname) - 1] == '/') + pathname[grub_strlen (pathname) - 1] = 0; + + /* Split into path and filename. */ + ctx.filename = grub_strrchr (pathname, '/'); + if (! ctx.filename) + { + path2 = grub_strdup ("/"); + ctx.filename = pathname; + } + else + { + ctx.filename++; + path2 = grub_strdup (pathname); + path2[ctx.filename - pathname] = 0; + } + + /* It's the whole device. */ + (fs->dir) (dev, path2, fuse_getattr_find_file, &ctx); + + grub_free (path2); + if (!ctx.file_exists) + { + grub_errno = GRUB_ERR_NONE; + return -ENOENT; + } + st->st_dev = 0; + st->st_ino = 0; + st->st_mode = ctx.file_info.dir ? (0555 | S_IFDIR) : (0444 | S_IFREG); + st->st_uid = 0; + st->st_gid = 0; + st->st_rdev = 0; + st->st_size = 0; + if (!ctx.file_info.dir) + { + grub_file_t file; + file = grub_file_open (path); + if (! file && grub_errno == GRUB_ERR_BAD_FILE_TYPE) + { + grub_errno = GRUB_ERR_NONE; + st->st_mode = (0555 | S_IFDIR); + } + else if (! file) + return translate_error (); + else + { + st->st_size = file->size; + grub_file_close (file); + } + } + st->st_blksize = 512; + st->st_blocks = (st->st_size + 511) >> 9; + st->st_atime = st->st_mtime = st->st_ctime = ctx.file_info.mtimeset + ? ctx.file_info.mtime : 0; + grub_errno = GRUB_ERR_NONE; + return 0; +} + +static int +fuse_opendir (const char *path, struct fuse_file_info *fi) +{ + return 0; +} + +/* FIXME */ +static grub_file_t files[65536]; +static int first_fd = 1; + +static int +fuse_open (const char *path, struct fuse_file_info *fi __attribute__ ((unused))) +{ + grub_file_t file; + file = grub_file_open (path); + if (! file) + return translate_error (); + files[first_fd++] = file; + fi->fh = first_fd; + files[first_fd++] = file; + grub_errno = GRUB_ERR_NONE; + return 0; +} + +static int +fuse_read (const char *path, char *buf, size_t sz, off_t off, + struct fuse_file_info *fi) +{ + grub_file_t file = files[fi->fh]; + grub_ssize_t size; + + if (off > file->size) + return -EINVAL; + + file->offset = off; + + size = grub_file_read (file, buf, sz); + if (size < 0) + return translate_error (); + else + { + grub_errno = GRUB_ERR_NONE; + return size; + } +} + +static int +fuse_release (const char *path, struct fuse_file_info *fi) +{ + grub_file_close (files[fi->fh]); + files[fi->fh] = NULL; + grub_errno = GRUB_ERR_NONE; + return 0; +} + +/* Context for fuse_readdir. */ +struct fuse_readdir_ctx +{ + const char *path; + void *buf; + fuse_fill_dir_t fill; +}; + +/* Helper for fuse_readdir. */ +static int +fuse_readdir_call_fill (const char *filename, + const struct grub_dirhook_info *info, void *data) +{ + struct fuse_readdir_ctx *ctx = data; + struct stat st; + + grub_memset (&st, 0, sizeof (st)); + st.st_mode = info->dir ? (0555 | S_IFDIR) : (0444 | S_IFREG); + if (!info->dir) + { + grub_file_t file; + char *tmp; + tmp = xasprintf ("%s/%s", ctx->path, filename); + file = grub_file_open (tmp); + free (tmp); + /* Symlink to directory. */ + if (! file && grub_errno == GRUB_ERR_BAD_FILE_TYPE) + { + grub_errno = GRUB_ERR_NONE; + st.st_mode = (0555 | S_IFDIR); + } + else if (!file) + { + grub_errno = GRUB_ERR_NONE; + } + else + { + st.st_size = file->size; + grub_file_close (file); + } + } + st.st_blksize = 512; + st.st_blocks = (st.st_size + 511) >> 9; + st.st_atime = st.st_mtime = st.st_ctime + = info->mtimeset ? info->mtime : 0; + ctx->fill (ctx->buf, filename, &st, 0); + return 0; +} + +static int +fuse_readdir (const char *path, void *buf, + fuse_fill_dir_t fill, off_t off, struct fuse_file_info *fi) +{ + struct fuse_readdir_ctx ctx = { + .path = path, + .buf = buf, + .fill = fill + }; + char *pathname; + + pathname = xstrdup (path); + + /* Remove trailing '/'. */ + while (pathname [0] && pathname[1] + && pathname[grub_strlen (pathname) - 1] == '/') + pathname[grub_strlen (pathname) - 1] = 0; + + (fs->dir) (dev, pathname, fuse_readdir_call_fill, &ctx); + free (pathname); + grub_errno = GRUB_ERR_NONE; + return 0; +} + +struct fuse_operations grub_opers = { + .getattr = fuse_getattr, + .open = fuse_open, + .release = fuse_release, + .opendir = fuse_opendir, + .readdir = fuse_readdir, + .read = fuse_read +}; + +static grub_err_t +fuse_init (void) +{ + int i; + + for (i = 0; i < num_disks; i++) + { + char *argv[2]; + char *host_file; + char *loop_name; + loop_name = grub_xasprintf ("loop%d", i); + if (!loop_name) + grub_util_error ("%s", grub_errmsg); + + host_file = grub_xasprintf ("(host)%s", images[i]); + if (!host_file) + grub_util_error ("%s", grub_errmsg); + + argv[0] = loop_name; + argv[1] = host_file; + + if (execute_command ("loopback", 2, argv)) + grub_util_error (_("`loopback' command fails: %s"), grub_errmsg); + + grub_free (loop_name); + grub_free (host_file); + } + + if (mount_crypt) + { + char *argv[2] = { xstrdup ("-a"), NULL}; + if (execute_command ("cryptomount", 1, argv)) + grub_util_error (_("`cryptomount' command fails: %s"), + grub_errmsg); + free (argv[0]); + } + + grub_lvm_fini (); + grub_mdraid09_fini (); + grub_mdraid1x_fini (); + grub_diskfilter_fini (); + grub_diskfilter_init (); + grub_mdraid09_init (); + grub_mdraid1x_init (); + grub_lvm_init (); + + dev = grub_device_open (0); + if (! dev) + return grub_errno; + + fs = grub_fs_probe (dev); + if (! fs) + { + grub_device_close (dev); + return grub_errno; + } + + if (fuse_main (fuse_argc, fuse_args, &grub_opers, NULL)) + grub_error (GRUB_ERR_IO, "fuse_main failed"); + + for (i = 0; i < num_disks; i++) + { + char *argv[2]; + char *loop_name; + + loop_name = grub_xasprintf ("loop%d", i); + if (!loop_name) + grub_util_error ("%s", grub_errmsg); + + argv[0] = xstrdup ("-d"); + argv[1] = loop_name; + + execute_command ("loopback", 2, argv); + + grub_free (argv[0]); + grub_free (loop_name); + } + + return grub_errno; +} + +static struct argp_option options[] = { + {"root", 'r', N_("DEVICE_NAME"), 0, N_("Set root device."), 2}, + {"debug", 'd', N_("STRING"), 0, N_("Set debug environment variable."), 2}, + {"crypto", 'C', NULL, 0, N_("Mount crypto devices."), 2}, + {"zfs-key", 'K', + /* TRANSLATORS: "prompt" is a keyword. */ + N_("FILE|prompt"), 0, N_("Load zfs crypto key."), 2}, + {"verbose", 'v', NULL, 0, N_("print verbose messages."), 2}, + {0, 0, 0, 0, 0, 0} +}; + +/* Print the version information. */ +static void +print_version (FILE *stream, struct argp_state *state) +{ + fprintf (stream, "%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); +} +void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + switch (key) + { + case 'r': + root = arg; + return 0; + + case 'K': + if (strcmp (arg, "prompt") == 0) + { + char buf[1024]; + grub_printf ("%s", _("Enter ZFS password: ")); + if (grub_password_get (buf, 1023)) + { + grub_zfs_add_key ((grub_uint8_t *) buf, grub_strlen (buf), 1); + } + } + else + { + FILE *f; + ssize_t real_size; + grub_uint8_t buf[1024]; + f = grub_util_fopen (arg, "rb"); + if (!f) + { + printf (_("%s: error:"), program_name); + printf (_("cannot open `%s': %s"), arg, strerror (errno)); + printf ("\n"); + return 0; + } + real_size = fread (buf, 1, 1024, f); + if (real_size < 0) + { + printf (_("%s: error:"), program_name); + printf (_("cannot read `%s': %s"), arg, + strerror (errno)); + printf ("\n"); + fclose (f); + return 0; + } + grub_zfs_add_key (buf, real_size, 0); + fclose (f); + } + return 0; + + case 'C': + mount_crypt = 1; + return 0; + + case 'd': + debug_str = arg; + return 0; + + case 'v': + verbosity++; + return 0; + + case ARGP_KEY_ARG: + if (arg[0] != '-') + break; + + /* FALLTHROUGH */ + default: + if (!arg) + return 0; + + fuse_args = xrealloc (fuse_args, (fuse_argc + 1) * sizeof (fuse_args[0])); + fuse_args[fuse_argc] = xstrdup (arg); + fuse_argc++; + return 0; + } + + images = xrealloc (images, (num_disks + 1) * sizeof (images[0])); + images[num_disks] = grub_canonicalize_file_name (arg); + num_disks++; + + return 0; +} + +struct argp argp = { + options, argp_parser, N_("IMAGE1 [IMAGE2 ...] MOUNTPOINT"), + N_("Debug tool for filesystem driver."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + const char *default_root; + char *alloc_root; + + grub_util_host_init (&argc, &argv); + + fuse_args = xrealloc (fuse_args, (fuse_argc + 2) * sizeof (fuse_args[0])); + fuse_args[fuse_argc] = xstrdup (argv[0]); + fuse_argc++; + /* Run single-threaded. */ + fuse_args[fuse_argc] = xstrdup ("-s"); + fuse_argc++; + + argp_parse (&argp, argc, argv, 0, 0, 0); + + if (num_disks < 2) + grub_util_error ("%s", _("need an image and mountpoint")); + fuse_args = xrealloc (fuse_args, (fuse_argc + 2) * sizeof (fuse_args[0])); + fuse_args[fuse_argc] = images[num_disks - 1]; + fuse_argc++; + num_disks--; + fuse_args[fuse_argc] = NULL; + + /* Initialize all modules. */ + grub_init_all (); + + if (debug_str) + grub_env_set ("debug", debug_str); + + default_root = (num_disks == 1) ? "loop0" : "md0"; + alloc_root = 0; + if (root) + { + if ((*root >= '0') && (*root <= '9')) + { + alloc_root = xmalloc (strlen (default_root) + strlen (root) + 2); + + sprintf (alloc_root, "%s,%s", default_root, root); + root = alloc_root; + } + } + else + root = default_root; + + grub_env_set ("root", root); + + if (alloc_root) + free (alloc_root); + + /* Do it. */ + fuse_init (); + if (grub_errno) + { + grub_print_error (); + return 1; + } + + /* Free resources. */ + grub_fini_all (); + + return 0; +} diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c new file mode 100644 index 000000000..0d4084a10 --- /dev/null +++ b/util/grub-pe2elf.c @@ -0,0 +1,575 @@ +/* grub-pe2elf.c - tool to convert pe image to elf. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + +/* Please don't internationalise this file. It's pointless. */ + +/* + * Section layout + * + * null + * .text + * .rdata + * .data + * .bss + * .modname + * .moddeps + * .symtab + * .strtab + * relocation sections + */ + +#if GRUB_TARGET_WORDSIZE == 64 +typedef Elf64_Rela elf_reloc_t; +#define GRUB_PE32_MACHINE GRUB_PE32_MACHINE_X86_64 +#else +typedef Elf32_Rel elf_reloc_t; +#define GRUB_PE32_MACHINE GRUB_PE32_MACHINE_I386 +#endif + +#define STRTAB_BLOCK 256 + +static char *strtab; +static int strtab_max, strtab_len; + +static Elf_Ehdr ehdr; +static Elf_Shdr *shdr; +static int num_sections, first_reloc_section, reloc_sections_end, symtab_section, strtab_section; +static grub_uint32_t offset, image_base; + +static int +insert_string (const char *name) +{ + int len, result; + + if (*name == '_') + name++; + + len = strlen (name); + if (strtab_len + len >= strtab_max) + { + strtab_max += STRTAB_BLOCK; + strtab = xrealloc (strtab, strtab_max); + } + + strcpy (strtab + strtab_len, name); + result = strtab_len; + strtab_len += len + 1; + + return result; +} + +static int * +write_section_data (FILE* fp, const char *name, char *image, + struct grub_pe32_coff_header *pe_chdr, + struct grub_pe32_section_table *pe_shdr) +{ + int *section_map; + int i; + grub_uint32_t last_category = 0; + grub_uint32_t idx, idx_reloc; + char *pe_strtab = (image + pe_chdr->symtab_offset + + pe_chdr->num_symbols * sizeof (struct grub_pe32_symbol)); + + section_map = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (int)); + section_map[0] = 0; + shdr = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (shdr[0])); + idx = 1; + idx_reloc = pe_chdr->num_sections + 1; + + for (i = 0; i < pe_chdr->num_sections; i++, pe_shdr++) + { + grub_uint32_t category; + const char *shname = pe_shdr->name; + grub_size_t secsize; + + if (shname[0] == '/' && grub_isdigit (shname[1])) + { + char t[sizeof (pe_shdr->name) + 1]; + memcpy (t, shname, sizeof (pe_shdr->name)); + t[sizeof (pe_shdr->name)] = 0; + shname = pe_strtab + atoi (t + 1); + } + + secsize = pe_shdr->raw_data_size; + + shdr[idx].sh_type = SHT_PROGBITS; + + if (! strcmp (shname, ".text")) + { + category = 0; + shdr[idx].sh_flags = SHF_ALLOC | SHF_EXECINSTR; + } + else if (! strncmp (shname, ".rdata", 6)) + { + category = 1; + shdr[idx].sh_flags = SHF_ALLOC; + } + else if (! strcmp (shname, ".data")) + { + category = 2; + shdr[idx].sh_flags = SHF_ALLOC | SHF_WRITE; + } + else if (! strcmp (shname, ".bss")) + { + category = 3; + shdr[idx].sh_type = SHT_NOBITS; + shdr[idx].sh_flags = SHF_ALLOC | SHF_WRITE; + if (secsize < pe_shdr->virtual_size) + secsize = pe_shdr->virtual_size; + } + else if (strcmp (shname, ".modname") == 0 || strcmp (shname, ".moddeps") == 0 + || strcmp (shname, ".module_license") == 0) + category = 4; + else + { + section_map[i + 1] = -1; + continue; + } + + if (category < last_category) + grub_util_error ("out of order sections"); + + section_map[i + 1] = idx; + + if (pe_shdr->virtual_size + && pe_shdr->virtual_size < secsize) + secsize = pe_shdr->virtual_size; + + shdr[idx].sh_size = secsize; + shdr[idx].sh_addralign = 1 << (((pe_shdr->characteristics >> + GRUB_PE32_SCN_ALIGN_SHIFT) & + GRUB_PE32_SCN_ALIGN_MASK) - 1); + shdr[idx].sh_addr = pe_shdr->virtual_address + image_base; + + if (shdr[idx].sh_type != SHT_NOBITS) + { + shdr[idx].sh_offset = offset; + grub_util_write_image_at (image + pe_shdr->raw_data_offset, + pe_shdr->raw_data_size, offset, fp, + shname); + + offset += secsize; + } + + if (pe_shdr->relocations_offset) + { + char relname[5 + strlen (shname)]; + + sprintf (relname, ".rel%s", shname); + + shdr[idx_reloc].sh_name = insert_string (relname); + shdr[idx_reloc].sh_link = i; + shdr[idx_reloc].sh_info = idx; + + shdr[idx].sh_name = shdr[idx_reloc].sh_name + 4; + + idx_reloc++; + } + else + shdr[idx].sh_name = insert_string (shname); + idx++; + } + + idx_reloc -= pe_chdr->num_sections + 1; + num_sections = idx + idx_reloc + 2; + first_reloc_section = idx; + reloc_sections_end = idx + idx_reloc; + memmove (shdr + idx, shdr + pe_chdr->num_sections + 1, + idx_reloc * sizeof (shdr[0])); + memset (shdr + idx + idx_reloc, 0, 3 * sizeof (shdr[0])); + memset (shdr, 0, sizeof (shdr[0])); + + symtab_section = idx + idx_reloc; + strtab_section = idx + idx_reloc + 1; + + return section_map; +} + +static void +write_reloc_section (FILE* fp, const char *name, char *image, + struct grub_pe32_coff_header *pe_chdr, + struct grub_pe32_section_table *pe_shdr, + Elf_Sym *symtab, + int *symtab_map) +{ + int i; + + for (i = first_reloc_section; i < reloc_sections_end; i++) + { + struct grub_pe32_section_table *pe_sec; + struct grub_pe32_reloc *pe_rel; + elf_reloc_t *rel; + int num_rels, j, modified; + + pe_sec = pe_shdr + shdr[i].sh_link; + pe_rel = (struct grub_pe32_reloc *) (image + pe_sec->relocations_offset); + rel = (elf_reloc_t *) xmalloc (pe_sec->num_relocations * sizeof (elf_reloc_t)); + num_rels = 0; + modified = 0; + + for (j = 0; j < pe_sec->num_relocations; j++, pe_rel++) + { + int type; + grub_uint32_t ofs, *addr; + + if ((pe_rel->symtab_index >= pe_chdr->num_symbols) || + (symtab_map[pe_rel->symtab_index] == -1)) + grub_util_error ("invalid symbol"); + + ofs = pe_rel->offset - pe_sec->virtual_address; + addr = (grub_uint32_t *)(image + pe_sec->raw_data_offset + ofs); + + switch (pe_rel->type) + { +#if GRUB_TARGET_WORDSIZE == 64 + case 1: + type = R_X86_64_64; + rel[num_rels].r_addend = *(grub_int64_t *)addr; + *(grub_int64_t *)addr = 0; + modified = 1; + break; + case 4: + type = R_X86_64_PC32; + rel[num_rels].r_addend = *(grub_int32_t *)addr; + *addr = 0; + modified = 1; + break; + case 14: + type = R_X86_64_PC64; + rel[num_rels].r_addend = *(grub_uint64_t *)addr - 8; + *(grub_uint64_t *)addr = 0; + modified = 1; + break; +#else + case GRUB_PE32_REL_I386_DIR32: + type = R_386_32; + break; + case GRUB_PE32_REL_I386_REL32: + type = R_386_PC32; + break; +#endif + default: + grub_util_error ("unknown pe relocation type %d", pe_rel->type); + } + + if (type == +#if GRUB_TARGET_WORDSIZE == 64 + R_386_PC32 +#else + R_X86_64_PC32 +#endif + + ) + { + unsigned char code; + + code = image[pe_sec->raw_data_offset + ofs - 1]; + +#if GRUB_TARGET_WORDSIZE == 32 + if (((code != 0xe8) && (code != 0xe9)) || (*addr)) + grub_util_error ("invalid relocation (%x %x)", code, *addr); +#endif + + if (symtab[symtab_map[pe_rel->symtab_index]].st_shndx + && symtab[symtab_map[pe_rel->symtab_index]].st_shndx + == shdr[i].sh_info) + { + modified = 1; + *addr += (symtab[symtab_map[pe_rel->symtab_index]].st_value + - ofs - 4); + + continue; + } + else + { +#if GRUB_TARGET_WORDSIZE == 64 + rel[num_rels].r_addend -= 4; +#else + modified = 1; + *addr = -4; +#endif + } + } + + rel[num_rels].r_offset = ofs; + rel[num_rels].r_info = ELF_R_INFO (symtab_map[pe_rel->symtab_index], + type); + num_rels++; + } + + if (modified) + grub_util_write_image_at (image + pe_sec->raw_data_offset, + shdr[shdr[i].sh_info].sh_size, + shdr[shdr[i].sh_info].sh_offset, + fp, name); + +#if GRUB_TARGET_WORDSIZE == 64 + shdr[i].sh_type = SHT_RELA; +#else + shdr[i].sh_type = SHT_REL; +#endif + shdr[i].sh_offset = offset; + shdr[i].sh_link = symtab_section; + shdr[i].sh_addralign = 4; + shdr[i].sh_entsize = sizeof (elf_reloc_t); + shdr[i].sh_size = num_rels * sizeof (elf_reloc_t); + + grub_util_write_image_at (rel, shdr[i].sh_size, offset, fp, name); + offset += shdr[i].sh_size; + free (rel); + } +} + +static void +write_symbol_table (FILE* fp, const char *name, char *image, + struct grub_pe32_coff_header *pe_chdr, + struct grub_pe32_section_table *pe_shdr, + int *section_map) +{ + struct grub_pe32_symbol *pe_symtab; + char *pe_strtab; + Elf_Sym *symtab; + int *symtab_map, num_syms; + int i; + + pe_symtab = (struct grub_pe32_symbol *) (image + pe_chdr->symtab_offset); + pe_strtab = (char *) (pe_symtab + pe_chdr->num_symbols); + + symtab = (Elf_Sym *) xmalloc ((pe_chdr->num_symbols + 1) * + sizeof (Elf_Sym)); + memset (symtab, 0, (pe_chdr->num_symbols + 1) * sizeof (Elf_Sym)); + num_syms = 1; + + symtab_map = (int *) xmalloc (pe_chdr->num_symbols * sizeof (int)); + + for (i = 0; i < (int) pe_chdr->num_symbols; + i += pe_symtab->num_aux + 1, pe_symtab += pe_symtab->num_aux + 1) + { + int bind, type; + + symtab_map[i] = -1; + if ((pe_symtab->section > pe_chdr->num_sections) || + (section_map[pe_symtab->section] == -1)) + continue; + + if (! pe_symtab->section) + type = STT_NOTYPE; + else if (pe_symtab->type == GRUB_PE32_DT_FUNCTION) + type = STT_FUNC; + else + type = STT_OBJECT; + + if (pe_symtab->storage_class == GRUB_PE32_SYM_CLASS_EXTERNAL) + bind = STB_GLOBAL; + else + bind = STB_LOCAL; + + if ((pe_symtab->type != GRUB_PE32_DT_FUNCTION) && (pe_symtab->num_aux)) + { + if (! pe_symtab->value) + type = STT_SECTION; + + symtab[num_syms].st_name = shdr[section_map[pe_symtab->section]].sh_name; + } + else + { + char short_name[9]; + char *symname; + + if (pe_symtab->long_name[0]) + { + strncpy (short_name, pe_symtab->short_name, 8); + short_name[8] = 0; + symname = short_name; + } + else + symname = pe_strtab + pe_symtab->long_name[1]; + + if ((strcmp (symname, "_grub_mod_init")) && + (strcmp (symname, "_grub_mod_fini")) && + (strcmp (symname, "grub_mod_init")) && + (strcmp (symname, "grub_mod_fini")) && + (bind == STB_LOCAL)) + continue; + + symtab[num_syms].st_name = insert_string (symname); + } + + symtab[num_syms].st_shndx = section_map[pe_symtab->section]; + symtab[num_syms].st_value = pe_symtab->value; + symtab[num_syms].st_info = ELF_ST_INFO (bind, type); + + symtab_map[i] = num_syms; + num_syms++; + } + + write_reloc_section (fp, name, image, pe_chdr, pe_shdr, + symtab, symtab_map); + + shdr[symtab_section].sh_name = insert_string (".symtab"); + shdr[symtab_section].sh_type = SHT_SYMTAB; + shdr[symtab_section].sh_offset = offset; + shdr[symtab_section].sh_size = num_syms * sizeof (Elf_Sym); + shdr[symtab_section].sh_entsize = sizeof (Elf_Sym); + shdr[symtab_section].sh_link = strtab_section; + shdr[symtab_section].sh_addralign = 4; + + grub_util_write_image_at (symtab, shdr[symtab_section].sh_size, + offset, fp, name); + offset += shdr[symtab_section].sh_size; + + free (symtab); + free (symtab_map); +} + +static void +write_string_table (FILE *fp, const char *name) +{ + shdr[strtab_section].sh_name = insert_string (".strtab"); + shdr[strtab_section].sh_type = SHT_STRTAB; + shdr[strtab_section].sh_offset = offset; + shdr[strtab_section].sh_size = strtab_len; + shdr[strtab_section].sh_addralign = 1; + grub_util_write_image_at (strtab, strtab_len, offset, fp, + name); + offset += strtab_len; + + free (strtab); +} + +static void +write_section_header (FILE *fp, const char *name) +{ + ehdr.e_ident[EI_MAG0] = ELFMAG0; + ehdr.e_ident[EI_MAG1] = ELFMAG1; + ehdr.e_ident[EI_MAG2] = ELFMAG2; + ehdr.e_ident[EI_MAG3] = ELFMAG3; + ehdr.e_ident[EI_VERSION] = EV_CURRENT; + ehdr.e_version = EV_CURRENT; + ehdr.e_type = ET_REL; + +#if GRUB_TARGET_WORDSIZE == 64 + ehdr.e_ident[EI_CLASS] = ELFCLASS64; + ehdr.e_ident[EI_DATA] = ELFDATA2LSB; + ehdr.e_machine = EM_X86_64; +#else + ehdr.e_ident[EI_CLASS] = ELFCLASS32; + ehdr.e_ident[EI_DATA] = ELFDATA2LSB; + ehdr.e_machine = EM_386; +#endif + ehdr.e_ehsize = sizeof (ehdr); + ehdr.e_shentsize = sizeof (Elf_Shdr); + ehdr.e_shstrndx = strtab_section; + + ehdr.e_shoff = offset; + ehdr.e_shnum = num_sections; + grub_util_write_image_at (shdr, sizeof (Elf_Shdr) * num_sections, + offset, fp, name); + + grub_util_write_image_at (&ehdr, sizeof (Elf_Ehdr), 0, fp, name); +} + +static void +convert_pe (FILE* fp, const char *name, char *image) +{ + struct grub_pe32_coff_header *pe_chdr; + struct grub_pe32_section_table *pe_shdr; + int *section_map; + + if (image[0] == 'M' && image[1] == 'Z') + pe_chdr = (struct grub_pe32_coff_header *) (image + (grub_le_to_cpu32 (((grub_uint32_t *)image)[0xf]) + 4)); + else + pe_chdr = (struct grub_pe32_coff_header *) image; + if (grub_le_to_cpu16 (pe_chdr->machine) != GRUB_PE32_MACHINE) + grub_util_error ("invalid coff image (%x != %x)", + grub_le_to_cpu16 (pe_chdr->machine), GRUB_PE32_MACHINE); + + strtab = xmalloc (STRTAB_BLOCK); + strtab_max = STRTAB_BLOCK; + strtab[0] = 0; + strtab_len = 1; + + offset = sizeof (ehdr); + if (pe_chdr->optional_header_size) + { +#if GRUB_TARGET_WORDSIZE == 64 + struct grub_pe64_optional_header *o; +#else + struct grub_pe32_optional_header *o; +#endif + o = (void *) (pe_chdr + 1); + image_base = o->image_base; + } + pe_shdr = (struct grub_pe32_section_table *) ((char *) (pe_chdr + 1) + pe_chdr->optional_header_size); + + section_map = write_section_data (fp, name, image, pe_chdr, pe_shdr); + + write_symbol_table (fp, name, image, pe_chdr, pe_shdr, section_map); + free (section_map); + + write_string_table (fp, name); + + write_section_header (fp, name); +} + +int +main (int argc, char *argv[]) +{ + char *image; + FILE* fp; + char *in, *out; + + /* Obtain PATH. */ + if (1 >= argc) + { + fprintf (stderr, "Filename not specified.\n"); + return 1; + } + + in = argv[1]; + if (argc > 2) + out = argv[2]; + else + out = in; + image = grub_util_read_image (in); + + fp = grub_util_fopen (out, "wb"); + if (! fp) + grub_util_error ("cannot open %s", out); + + convert_pe (fp, out, image); + + fclose (fp); + + return 0; +} diff --git a/util/grub-probe.c b/util/grub-probe.c new file mode 100644 index 000000000..8ac527d2f --- /dev/null +++ b/util/grub-probe.c @@ -0,0 +1,883 @@ +/* grub-probe.c - probe device information for a given path */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +enum { + PRINT_FS, + PRINT_FS_UUID, + PRINT_FS_LABEL, + PRINT_DRIVE, + PRINT_DEVICE, + PRINT_PARTMAP, + PRINT_ABSTRACTION, + PRINT_CRYPTODISK_UUID, + PRINT_HINT_STR, + PRINT_BIOS_HINT, + PRINT_IEEE1275_HINT, + PRINT_BAREMETAL_HINT, + PRINT_EFI_HINT, + PRINT_ARC_HINT, + PRINT_COMPATIBILITY_HINT, + PRINT_MSDOS_PARTTYPE, + PRINT_GPT_PARTTYPE, + PRINT_ZERO_CHECK, + PRINT_DISK +}; + +static const char *targets[] = + { + [PRINT_FS] = "fs", + [PRINT_FS_UUID] = "fs_uuid", + [PRINT_FS_LABEL] = "fs_label", + [PRINT_DRIVE] = "drive", + [PRINT_DEVICE] = "device", + [PRINT_PARTMAP] = "partmap", + [PRINT_ABSTRACTION] = "abstraction", + [PRINT_CRYPTODISK_UUID] = "cryptodisk_uuid", + [PRINT_HINT_STR] = "hints_string", + [PRINT_BIOS_HINT] = "bios_hints", + [PRINT_IEEE1275_HINT] = "ieee1275_hints", + [PRINT_BAREMETAL_HINT] = "baremetal_hints", + [PRINT_EFI_HINT] = "efi_hints", + [PRINT_ARC_HINT] = "arc_hints", + [PRINT_COMPATIBILITY_HINT] = "compatibility_hint", + [PRINT_MSDOS_PARTTYPE] = "msdos_parttype", + [PRINT_GPT_PARTTYPE] = "gpt_parttype", + [PRINT_ZERO_CHECK] = "zero_check", + [PRINT_DISK] = "disk", + }; + +static int print = PRINT_FS; +static unsigned int argument_is_device = 0; + +static char * +get_targets_string (void) +{ + char **arr = xmalloc (sizeof (targets)); + int len = 0; + char *str; + char *ptr; + unsigned i; + + memcpy (arr, targets, sizeof (targets)); + qsort (arr, ARRAY_SIZE (targets), sizeof (char *), grub_qsort_strcmp); + for (i = 0; i < ARRAY_SIZE (targets); i++) + len += grub_strlen (targets[i]) + 2; + ptr = str = xmalloc (len); + for (i = 0; i < ARRAY_SIZE (targets); i++) + { + ptr = grub_stpcpy (ptr, arr[i]); + *ptr++ = ','; + *ptr++ = ' '; + } + ptr[-2] = '\0'; + free (arr); + + return str; +} + +static void +do_print (const char *x, void *data) +{ + char delim = *(const char *) data; + grub_printf ("%s%c", x, delim); +} + +static void +probe_partmap (grub_disk_t disk, char delim) +{ + grub_partition_t part; + grub_disk_memberlist_t list = NULL, tmp; + + if (disk->partition == NULL) + { + grub_util_info ("no partition map found for %s", disk->name); + } + + for (part = disk->partition; part; part = part->parent) + printf ("%s%c", part->partmap->name, delim); + + if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID) + grub_diskfilter_get_partmap (disk, do_print, &delim); + + /* In case of LVM/RAID, check the member devices as well. */ + if (disk->dev->memberlist) + { + list = disk->dev->memberlist (disk); + } + while (list) + { + probe_partmap (list->disk, delim); + tmp = list->next; + free (list); + list = tmp; + } +} + +static void +probe_cryptodisk_uuid (grub_disk_t disk, char delim) +{ + grub_disk_memberlist_t list = NULL, tmp; + + /* In case of LVM/RAID, check the member devices as well. */ + if (disk->dev->memberlist) + { + list = disk->dev->memberlist (disk); + } + while (list) + { + probe_cryptodisk_uuid (list->disk, delim); + tmp = list->next; + free (list); + list = tmp; + } + if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID) + { + const char *uu = grub_util_cryptodisk_get_uuid (disk); + grub_printf ("%s%c", uu, delim); + } +} + +static int +probe_raid_level (grub_disk_t disk) +{ + /* disk might be NULL in the case of a LVM physical volume with no LVM + signature. Ignore such cases here. */ + if (!disk) + return -1; + + if (disk->dev->id != GRUB_DISK_DEVICE_DISKFILTER_ID) + return -1; + + if (disk->name[0] != 'm' || disk->name[1] != 'd') + return -1; + + if (!((struct grub_diskfilter_lv *) disk->data)->segments) + return -1; + return ((struct grub_diskfilter_lv *) disk->data)->segments->type; +} + +static void +probe_abstraction (grub_disk_t disk, char delim) +{ + grub_disk_memberlist_t list = NULL, tmp; + int raid_level; + + if (disk->dev->memberlist) + list = disk->dev->memberlist (disk); + while (list) + { + probe_abstraction (list->disk, delim); + + tmp = list->next; + free (list); + list = tmp; + } + + if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID + && (grub_memcmp (disk->name, "lvm/", sizeof ("lvm/") - 1) == 0 || + grub_memcmp (disk->name, "lvmid/", sizeof ("lvmid/") - 1) == 0)) + printf ("lvm%c", delim); + + if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID + && grub_memcmp (disk->name, "ldm/", sizeof ("ldm/") - 1) == 0) + printf ("ldm%c", delim); + + if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID) + grub_util_cryptodisk_get_abstraction (disk, do_print, &delim); + + raid_level = probe_raid_level (disk); + if (raid_level >= 0) + { + printf ("diskfilter%c", delim); + if (disk->dev->raidname) + printf ("%s%c", disk->dev->raidname (disk), delim); + } + if (raid_level == 5) + printf ("raid5rec%c", delim); + if (raid_level == 6) + printf ("raid6rec%c", delim); +} + +static void +probe (const char *path, char **device_names, char delim) +{ + char **drives_names = NULL; + char **curdev, **curdrive; + char *grub_path = NULL; + int ndev = 0; + + if (path != NULL) + { + grub_path = grub_canonicalize_file_name (path); + if (! grub_path) + grub_util_error (_("failed to get canonical path of `%s'"), path); + device_names = grub_guess_root_devices (grub_path); + free (grub_path); + } + + if (! device_names) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), path); + + if (print == PRINT_DEVICE) + { + for (curdev = device_names; *curdev; curdev++) + { + printf ("%s", *curdev); + putchar (delim); + } + goto free_device_names; + } + + if (print == PRINT_DISK) + { + for (curdev = device_names; *curdev; curdev++) + { + char *disk; + disk = grub_util_get_os_disk (*curdev); + if (!disk) + { + grub_print_error (); + continue; + } + printf ("%s", disk); + putchar (delim); + free (disk); + } + goto free_device_names; + } + + for (curdev = device_names; *curdev; curdev++) + { + grub_util_pull_device (*curdev); + ndev++; + } + + drives_names = xmalloc (sizeof (drives_names[0]) * (ndev + 1)); + + for (curdev = device_names, curdrive = drives_names; *curdev; curdev++, + curdrive++) + { + *curdrive = grub_util_get_grub_dev (*curdev); + if (! *curdrive) + grub_util_error (_("cannot find a GRUB drive for %s. Check your device.map"), + *curdev); + } + *curdrive = 0; + + if (print == PRINT_DRIVE) + { + for (curdrive = drives_names; *curdrive; curdrive++) + { + printf ("(%s)", *curdrive); + putchar (delim); + } + goto end; + } + + if (print == PRINT_ZERO_CHECK) + { + for (curdev = drives_names; *curdev; curdev++) + { + grub_device_t dev = NULL; + grub_uint32_t buffer[32768]; + grub_disk_addr_t addr; + grub_disk_addr_t dsize; + + grub_util_info ("opening %s", *curdev); + dev = grub_device_open (*curdev); + if (! dev || !dev->disk) + grub_util_error ("%s", grub_errmsg); + + dsize = grub_disk_get_size (dev->disk); + for (addr = 0; addr < dsize; + addr += sizeof (buffer) / GRUB_DISK_SECTOR_SIZE) + { + grub_size_t sz = sizeof (buffer); + grub_uint32_t *ptr; + + if (sizeof (buffer) / GRUB_DISK_SECTOR_SIZE > dsize - addr) + sz = (dsize - addr) * GRUB_DISK_SECTOR_SIZE; + grub_disk_read (dev->disk, addr, 0, sz, buffer); + + for (ptr = buffer; ptr < buffer + sz / sizeof (*buffer); ptr++) + if (*ptr) + { + grub_printf ("false\n"); + grub_device_close (dev); + goto end; + } + } + + grub_device_close (dev); + } + grub_printf ("true\n"); + } + + if (print == PRINT_FS || print == PRINT_FS_UUID + || print == PRINT_FS_LABEL) + { + grub_device_t dev = NULL; + grub_fs_t fs; + + grub_util_info ("opening %s", drives_names[0]); + dev = grub_device_open (drives_names[0]); + if (! dev) + grub_util_error ("%s", grub_errmsg); + + fs = grub_fs_probe (dev); + if (! fs) + grub_util_error ("%s", grub_errmsg); + + if (print == PRINT_FS) + { + printf ("%s", fs->name); + putchar (delim); + } + else if (print == PRINT_FS_UUID) + { + char *uuid; + if (! fs->uuid) + grub_util_error (_("%s does not support UUIDs"), fs->name); + + if (fs->uuid (dev, &uuid) != GRUB_ERR_NONE) + grub_util_error ("%s", grub_errmsg); + + printf ("%s", uuid); + putchar (delim); + } + else if (print == PRINT_FS_LABEL) + { + char *label; + if (! fs->label) + grub_util_error (_("filesystem `%s' does not support labels"), + fs->name); + + if (fs->label (dev, &label) != GRUB_ERR_NONE) + grub_util_error ("%s", grub_errmsg); + + printf ("%s", label); + putchar (delim); + } + grub_device_close (dev); + goto end; + } + + for (curdrive = drives_names, curdev = device_names; *curdrive; + curdrive++, curdev++) + { + grub_device_t dev = NULL; + + grub_util_info ("opening %s", *curdrive); + dev = grub_device_open (*curdrive); + if (! dev) + grub_util_error ("%s", grub_errmsg); + + if (print == PRINT_HINT_STR) + { + const char *osdev = grub_util_biosdisk_get_osdev (dev->disk); + char *ofpath = osdev ? grub_util_devname_to_ofpath (osdev) : 0; + char *biosname, *bare, *efi; + const char *map; + + if (ofpath) + { + char *tmp = xmalloc (strlen (ofpath) + sizeof ("ieee1275/")); + char *p; + p = grub_stpcpy (tmp, "ieee1275/"); + strcpy (p, ofpath); + printf ("--hint-ieee1275='"); + grub_util_fprint_full_disk_name (stdout, tmp, dev); + printf ("' "); + free (tmp); + free (ofpath); + } + + biosname = grub_util_guess_bios_drive (*curdev); + if (biosname) + { + printf ("--hint-bios="); + grub_util_fprint_full_disk_name (stdout, biosname, dev); + printf (" "); + } + free (biosname); + + efi = grub_util_guess_efi_drive (*curdev); + if (efi) + { + printf ("--hint-efi="); + grub_util_fprint_full_disk_name (stdout, efi, dev); + printf (" "); + } + free (efi); + + bare = grub_util_guess_baremetal_drive (*curdev); + if (bare) + { + printf ("--hint-baremetal="); + grub_util_fprint_full_disk_name (stdout, bare, dev); + printf (" "); + } + free (bare); + + /* FIXME: Add ARC hint. */ + + map = grub_util_biosdisk_get_compatibility_hint (dev->disk); + if (map) + { + printf ("--hint='"); + grub_util_fprint_full_disk_name (stdout, map, dev); + printf ("' "); + } + if (curdrive[1]) + printf (" "); + else + printf ("\n"); + } + + else if ((print == PRINT_COMPATIBILITY_HINT || print == PRINT_BIOS_HINT + || print == PRINT_IEEE1275_HINT || print == PRINT_BAREMETAL_HINT + || print == PRINT_EFI_HINT || print == PRINT_ARC_HINT) + && dev->disk->dev->id != GRUB_DISK_DEVICE_HOSTDISK_ID) + { + grub_util_fprint_full_disk_name (stdout, dev->disk->name, dev); + putchar (delim); + } + + else if (print == PRINT_COMPATIBILITY_HINT) + { + const char *map; + char *biosname; + map = grub_util_biosdisk_get_compatibility_hint (dev->disk); + if (map) + { + grub_util_fprint_full_disk_name (stdout, map, dev); + putchar (delim); + grub_device_close (dev); + /* Compatibility hint is one device only. */ + break; + } + biosname = grub_util_guess_bios_drive (*curdev); + if (biosname) + { + grub_util_fprint_full_disk_name (stdout, biosname, dev); + putchar (delim); + free (biosname); + /* Compatibility hint is one device only. */ + grub_device_close (dev); + break; + } + } + + else if (print == PRINT_BIOS_HINT) + { + char *biosname; + biosname = grub_util_guess_bios_drive (*curdev); + if (biosname) + { + grub_util_fprint_full_disk_name (stdout, biosname, dev); + putchar (delim); + free (biosname); + } + } + else if (print == PRINT_IEEE1275_HINT) + { + const char *osdev = grub_util_biosdisk_get_osdev (dev->disk); + char *ofpath = grub_util_devname_to_ofpath (osdev); + const char *map; + + map = grub_util_biosdisk_get_compatibility_hint (dev->disk); + if (map) + { + grub_util_fprint_full_disk_name (stdout, map, dev); + putchar (delim); + } + + if (ofpath) + { + char *tmp = xmalloc (strlen (ofpath) + sizeof ("ieee1275/")); + char *p; + p = grub_stpcpy (tmp, "ieee1275/"); + strcpy (p, ofpath); + grub_util_fprint_full_disk_name (stdout, tmp, dev); + free (tmp); + free (ofpath); + putchar (delim); + } + } + else if (print == PRINT_EFI_HINT) + { + char *biosname; + const char *map; + biosname = grub_util_guess_efi_drive (*curdev); + + map = grub_util_biosdisk_get_compatibility_hint (dev->disk); + if (map) + { + grub_util_fprint_full_disk_name (stdout, map, dev); + putchar (delim); + } + if (biosname) + { + grub_util_fprint_full_disk_name (stdout, biosname, dev); + putchar (delim); + free (biosname); + } + } + + else if (print == PRINT_BAREMETAL_HINT) + { + char *biosname; + const char *map; + + biosname = grub_util_guess_baremetal_drive (*curdev); + + map = grub_util_biosdisk_get_compatibility_hint (dev->disk); + if (map) + { + grub_util_fprint_full_disk_name (stdout, map, dev); + putchar (delim); + } + if (biosname) + { + grub_util_fprint_full_disk_name (stdout, biosname, dev); + putchar (delim); + free (biosname); + } + } + + else if (print == PRINT_ARC_HINT) + { + const char *map; + + map = grub_util_biosdisk_get_compatibility_hint (dev->disk); + if (map) + { + grub_util_fprint_full_disk_name (stdout, map, dev); + putchar (delim); + } + } + + else if (print == PRINT_ABSTRACTION) + probe_abstraction (dev->disk, delim); + + else if (print == PRINT_CRYPTODISK_UUID) + probe_cryptodisk_uuid (dev->disk, delim); + + else if (print == PRINT_PARTMAP) + /* Check if dev->disk itself is contained in a partmap. */ + probe_partmap (dev->disk, delim); + + else if (print == PRINT_MSDOS_PARTTYPE) + { + if (dev->disk->partition + && strcmp(dev->disk->partition->partmap->name, "msdos") == 0) + printf ("%02x", dev->disk->partition->msdostype); + + putchar (delim); + } + + else if (print == PRINT_GPT_PARTTYPE) + { + if (dev->disk->partition + && strcmp (dev->disk->partition->partmap->name, "gpt") == 0) + { + struct grub_gpt_partentry gptdata; + grub_partition_t p = dev->disk->partition; + dev->disk->partition = dev->disk->partition->parent; + + if (grub_disk_read (dev->disk, p->offset, p->index, + sizeof (gptdata), &gptdata) == 0) + { + grub_gpt_part_type_t gpttype; + gpttype.data1 = grub_le_to_cpu32 (gptdata.type.data1); + gpttype.data2 = grub_le_to_cpu16 (gptdata.type.data2); + gpttype.data3 = grub_le_to_cpu16 (gptdata.type.data3); + grub_memcpy (gpttype.data4, gptdata.type.data4, 8); + + grub_printf ("%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + gpttype.data1, gpttype.data2, + gpttype.data3, gpttype.data4[0], + gpttype.data4[1], gpttype.data4[2], + gpttype.data4[3], gpttype.data4[4], + gpttype.data4[5], gpttype.data4[6], + gpttype.data4[7]); + } + dev->disk->partition = p; + } + putchar (delim); + } + + grub_device_close (dev); + } + + end: + for (curdrive = drives_names; *curdrive; curdrive++) + free (*curdrive); + free (drives_names); + +free_device_names: + if (path != NULL) + { + for (curdev = device_names; *curdev; curdev++) + free (*curdev); + free (device_names); + } +} + +static struct argp_option options[] = { + {"device", 'd', 0, 0, + N_("given argument is a system device, not a path"), 0}, + {"device-map", 'm', N_("FILE"), 0, + N_("use FILE as the device map [default=%s]"), 0}, + {"target", 't', N_("TARGET"), 0, 0, 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + {0, '0', 0, 0, N_("separate items in output using ASCII NUL characters"), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case 'm': + return xasprintf (text, DEFAULT_DEVICE_MAP); + + case 't': + { + char *ret, *t = get_targets_string (), *def; + + def = xasprintf (_("[default=%s]"), targets[print]); + + ret = xasprintf ("%s\n%s %s %s", _("print TARGET"), + _("available targets:"), t, def); + free (t); + free (def); + return ret; + } + + default: + return (char *) text; + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +struct arguments +{ + char **devices; + size_t device_max; + size_t ndevices; + char *dev_map; + int zero_delim; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'd': + argument_is_device = 1; + break; + + case 'm': + if (arguments->dev_map) + free (arguments->dev_map); + + arguments->dev_map = xstrdup (arg); + break; + + case 't': + { + int i; + + for (i = PRINT_FS; i < ARRAY_SIZE (targets); i++) + if (strcmp (arg, targets[i]) == 0) + { + print = i; + break; + } + if (i == ARRAY_SIZE (targets)) + argp_usage (state); + } + break; + + case '0': + arguments->zero_delim = 1; + break; + + case 'v': + verbosity++; + break; + + case ARGP_KEY_NO_ARGS: + fprintf (stderr, "%s", _("No path or device is specified.\n")); + argp_usage (state); + break; + + case ARGP_KEY_ARG: + assert (arguments->ndevices < arguments->device_max); + arguments->devices[arguments->ndevices++] = xstrdup(arg); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("[OPTION]... [PATH|DEVICE]"), + N_("\ +Probe device information for a given path (or device, if the -d option is given)."), + NULL, help_filter, NULL +}; + +int +main (int argc, char *argv[]) +{ + char delim; + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + memset (&arguments, 0, sizeof (struct arguments)); + arguments.device_max = argc + 1; + arguments.devices = xmalloc ((arguments.device_max + 1) + * sizeof (arguments.devices[0])); + memset (arguments.devices, 0, (arguments.device_max + 1) + * sizeof (arguments.devices[0])); + + /* Parse our arguments */ + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (verbosity > 1) + grub_env_set ("debug", "all"); + + /* Obtain ARGUMENT. */ + if (arguments.ndevices != 1 && !argument_is_device) + { + char *program = xstrdup(program_name); + fprintf (stderr, _("Unknown extra argument `%s'."), arguments.devices[1]); + fprintf (stderr, "\n"); + argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); + free (program); + exit(1); + } + + /* Initialize the emulated biosdisk driver. */ + grub_util_biosdisk_init (arguments.dev_map ? : DEFAULT_DEVICE_MAP); + + /* Initialize all modules. */ + grub_init_all (); + grub_gcry_init_all (); + + grub_lvm_fini (); + grub_mdraid09_fini (); + grub_mdraid1x_fini (); + grub_diskfilter_fini (); + grub_diskfilter_init (); + grub_mdraid09_init (); + grub_mdraid1x_init (); + grub_lvm_init (); + + if (print == PRINT_BIOS_HINT + || print == PRINT_IEEE1275_HINT || print == PRINT_BAREMETAL_HINT + || print == PRINT_EFI_HINT || print == PRINT_ARC_HINT) + delim = ' '; + else + delim = '\n'; + + if (arguments.zero_delim) + delim = '\0'; + + /* Do it. */ + if (argument_is_device) + probe (NULL, arguments.devices, delim); + else + probe (arguments.devices[0], NULL, delim); + + if (delim == ' ') + putchar ('\n'); + + /* Free resources. */ + grub_gcry_fini_all (); + grub_fini_all (); + grub_util_biosdisk_fini (); + + { + size_t i; + for (i = 0; i < arguments.ndevices; i++) + free (arguments.devices[i]); + } + free (arguments.devices); + + free (arguments.dev_map); + + return 0; +} diff --git a/util/grub-reboot.in b/util/grub-reboot.in new file mode 100644 index 000000000..4d4f75704 --- /dev/null +++ b/util/grub-reboot.in @@ -0,0 +1,144 @@ +#! /bin/sh +# +# Set a default boot entry for GRUB, for the next boot only. +# Copyright (C) 2004,2009 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# Initialize some variables. +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +sysconfdir="@sysconfdir@" +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +datarootdir="@datarootdir@" +datadir="@datadir@" +if [ "x$pkgdatadir" = x ]; then + pkgdatadir="${datadir}/@PACKAGE@" +fi + +self=`basename $0` + +grub_editenv=${bindir}/@grub_editenv@ +rootdir= +bootdir= +grubdir=`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'` + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "${pkgdatadir}/grub-mkconfig_lib" + +# Usage: usage +# Print the usage. +usage () { + gettext_printf "Usage: %s [OPTION] MENU_ENTRY\n" "$self" + gettext "Set the default boot menu entry for GRUB, for the next boot only."; echo + print_option_help "-h, --help" "$(gettext "print this message and exit")" + print_option_help "-V, --version" "$(gettext "print the version information and exit")" + dirmsg="$(gettext_printf "expect GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")" + print_option_help "--boot-directory=$(gettext "DIR")" "$dirmsg" + echo + gettext "MENU_ENTRY is a number, a menu item title or a menu item identifier. Please note that menu items in +submenus or sub-submenus require specifying the submenu components and then the +menu item component. The titles should be separated using the greater-than +character (>) with no extra spaces. Depending on your shell some characters including > may need escaping. More information about this is available +in the GRUB Manual in the section about the 'default' command. "; echo + echo + gettext "Report bugs to ."; echo +} + +argument () { + opt=$1 + shift + + if test $# -eq 0; then + gettext_printf "%s: option requires an argument -- \`%s'\n" "$self" "$opt" 1>&2 + exit 1 + fi + echo $1 +} + +# Check the arguments. +while test $# -gt 0 +do + option=$1 + shift + + case "$option" in + -h | --help) + usage + exit 0 ;; + -V | --version) + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" + exit 0 ;; + +# Accept for compatibility + --root-directory) + rootdir=`argument $option "$@"`; shift ;; + --root-directory=*) + rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; + + --boot-directory) + bootdir=`argument $option "$@"`; shift;; + --boot-directory=*) + bootdir=`echo "$option" | sed 's/--boot-directory=//'` ;; + + -*) + gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2 + usage + exit 1 + ;; + *) + if test "x$entry" != x; then + gettext "More than one menu entry?" 1>&2 + echo >&2 + usage + exit 1 + fi + entry="${option}" ;; + esac +done + +if test "x$entry" = x; then + gettext "Menu entry not specified." 1>&2 + echo >&2 + usage + exit 1 +fi + +if [ -z "$bootdir" ]; then + # Default bootdir if bootdir not initialized. + bootdir=/@bootdirname@ + + if [ -n "$rootdir" ] ; then + # Initialize bootdir if rootdir was initialized. + bootdir=${rootdir}/@bootdirname@ + fi +fi + +grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'` + +# Restore saved_entry if it was set by previous version +prev_saved_entry=`$grub_editenv ${grubdir}/grubenv list | sed -n 's/^prev_saved_entry=//p'` +if [ "$prev_saved_entry" ]; then + $grub_editenv ${grubdir}/grubenv set saved_entry="$prev_saved_entry" + $grub_editenv ${grubdir}/grubenv unset prev_saved_entry +fi + +$grub_editenv ${grubdir}/grubenv set next_entry="$entry" + +# Bye. +exit 0 diff --git a/util/grub-render-label.c b/util/grub-render-label.c new file mode 100644 index 000000000..ec0923b2e --- /dev/null +++ b/util/grub-render-label.c @@ -0,0 +1,193 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +struct arguments +{ + char *input; + char *text; + char *output; + char *font; + char *fgcolor; + char *bgcolor; + int verbosity; +}; + +static struct argp_option options[] = { + {"input", 'i', N_("FILE"), 0, + N_("read text from FILE."), 0}, + {"color", 'c', N_("COLOR"), 0, + N_("use COLOR for text"), 0}, + {"bgcolor", 'b', N_("COLOR"), 0, + N_("use COLOR for background"), 0}, + {"text", 't', N_("STRING"), 0, + /* TRANSLATORS: The result is always stored to file and + never shown directly, so don't use "show" as synonym for render. Use "create" if + "render" doesn't translate directly. */ + N_("set the label to render"), 0}, + {"output", 'o', N_("FILE"), 0, + N_("set output filename. Default is STDOUT"), 0}, + {"font", 'f', N_("FILE"), 0, + N_("use FILE as font (PF2)."), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +#include +#include +#include +#include +#include +#include +#include + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'i': + arguments->input = xstrdup (arg); + break; + + case 'b': + arguments->bgcolor = xstrdup (arg); + break; + + case 'c': + arguments->fgcolor = xstrdup (arg); + break; + + case 'f': + arguments->font = xstrdup (arg); + break; + + case 't': + arguments->text = xstrdup (arg); + break; + + case 'o': + arguments->output = xstrdup (arg); + break; + + case 'v': + arguments->verbosity++; + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("[OPTIONS]"), + /* TRANSLATORS: This file takes a text and creates a graphical representation of it, + putting the result into .disk_label file. The result is always stored to file and + never shown directly, so don't use "show" as synonym for render. Use "create" if + "render" doesn't translate directly. */ + N_("Render Apple .disk_label."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + char *text; + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + memset (&arguments, 0, sizeof (struct arguments)); + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if ((!arguments.input && !arguments.text) || !arguments.font) + { + fprintf (stderr, "%s", _("Missing arguments\n")); + exit(1); + } + + if (arguments.text) + text = arguments.text; + else + { + FILE *in = grub_util_fopen (arguments.input, "r"); + size_t s; + if (!in) + grub_util_error (_("cannot open `%s': %s"), arguments.input, + strerror (errno)); + fseek (in, 0, SEEK_END); + s = ftell (in); + fseek (in, 0, SEEK_SET); + text = xmalloc (s + 1); + if (fread (text, 1, s, in) != s) + grub_util_error (_("cannot read `%s': %s"), arguments.input, + strerror (errno)); + text[s] = 0; + fclose (in); + } + + grub_init_all (); + grub_hostfs_init (); + grub_host_init (); + + grub_util_render_label (arguments.font, + arguments.bgcolor, + arguments.fgcolor, + text, + arguments.output); + + return 0; +} diff --git a/util/grub-script-check.c b/util/grub-script-check.c new file mode 100644 index 000000000..801b3df4a --- /dev/null +++ b/util/grub-script-check.c @@ -0,0 +1,218 @@ +/* grub-script-check.c - check grub script file for syntax errors */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +struct arguments +{ + int verbose; + char *filename; +}; + +static struct argp_option options[] = { + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'v': + arguments->verbose = 1; + break; + + case ARGP_KEY_ARG: + if (state->arg_num == 0) + arguments->filename = xstrdup (arg); + else + { + /* Too many arguments. */ + fprintf (stderr, _("Unknown extra argument `%s'."), arg); + fprintf (stderr, "\n"); + argp_usage (state); + } + break; + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("[PATH]"), + N_("Checks GRUB script configuration file for syntax errors."), + NULL, NULL, NULL +}; + +/* Context for main. */ +struct main_ctx +{ + int lineno; + FILE *file; + struct arguments arguments; +}; + +/* Helper for main. */ +static grub_err_t +get_config_line (char **line, int cont __attribute__ ((unused)), void *data) +{ + struct main_ctx *ctx = data; + int i; + char *cmdline = 0; + size_t len = 0; + ssize_t curread; + + curread = getline (&cmdline, &len, (ctx->file ?: stdin)); + if (curread == -1) + { + *line = 0; + grub_errno = GRUB_ERR_READ_ERROR; + + if (cmdline) + free (cmdline); + return grub_errno; + } + + if (ctx->arguments.verbose) + grub_printf ("%s", cmdline); + + for (i = 0; cmdline[i] != '\0'; i++) + { + /* Replace tabs and carriage returns with spaces. */ + if (cmdline[i] == '\t' || cmdline[i] == '\r') + cmdline[i] = ' '; + + /* Replace '\n' with '\0'. */ + if (cmdline[i] == '\n') + cmdline[i] = '\0'; + } + + ctx->lineno++; + *line = grub_strdup (cmdline); + + free (cmdline); + return 0; +} + +int +main (int argc, char *argv[]) +{ + struct main_ctx ctx = { + .lineno = 0, + .file = 0 + }; + char *input; + int found_input = 0, found_cmd = 0; + struct grub_script *script = NULL; + + grub_util_host_init (&argc, &argv); + + memset (&ctx.arguments, 0, sizeof (struct arguments)); + + /* Check for options. */ + if (argp_parse (&argp, argc, argv, 0, 0, &ctx.arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + /* Obtain ARGUMENT. */ + if (!ctx.arguments.filename) + { + ctx.file = 0; /* read from stdin */ + } + else + { + ctx.file = grub_util_fopen (ctx.arguments.filename, "r"); + if (! ctx.file) + { + char *program = xstrdup(program_name); + fprintf (stderr, _("cannot open `%s': %s"), + ctx.arguments.filename, strerror (errno)); + argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); + free(program); + exit(1); + } + } + + do + { + input = 0; + get_config_line (&input, 0, &ctx); + if (! input) + break; + found_input = 1; + + script = grub_script_parse (input, get_config_line, &ctx); + if (script) + { + if (script->cmd) + found_cmd = 1; + grub_script_execute (script); + grub_script_free (script); + } + + grub_free (input); + } while (script != 0); + + if (ctx.file) fclose (ctx.file); + + if (found_input && script == 0) + { + fprintf (stderr, _("Syntax error at line %u\n"), ctx.lineno); + return 1; + } + if (! found_cmd) + { + fprintf (stderr, _("Script `%s' contains no commands and will do nothing\n"), + ctx.arguments.filename); + return 1; + } + + return 0; +} diff --git a/util/grub-set-default.in b/util/grub-set-default.in new file mode 100644 index 000000000..6036f81e5 --- /dev/null +++ b/util/grub-set-default.in @@ -0,0 +1,137 @@ +#! /bin/sh +# +# Set a default boot entry for GRUB. +# Copyright (C) 2004,2009 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +# Initialize some variables. +prefix=@prefix@ +exec_prefix=@exec_prefix@ +bindir=@bindir@ +sysconfdir="@sysconfdir@" +PACKAGE_NAME=@PACKAGE_NAME@ +PACKAGE_VERSION=@PACKAGE_VERSION@ +datarootdir="@datarootdir@" +datadir="@datadir@" +if [ "x$pkgdatadir" = x ]; then + pkgdatadir="${datadir}/@PACKAGE@" +fi + +self=`basename $0` + +grub_editenv=${bindir}/@grub_editenv@ +rootdir= +bootdir= +grubdir=`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'` + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "${pkgdatadir}/grub-mkconfig_lib" + +# Usage: usage +# Print the usage. +usage () { + gettext_printf "Usage: %s [OPTION] MENU_ENTRY\n" "$self" + gettext "Set the default boot menu entry for GRUB."; echo + gettext_printf "This requires setting GRUB_DEFAULT=saved in %s/default/grub.\n" "$sysconfdir" + echo + print_option_help "-h, --help" "$(gettext "print this message and exit")" + print_option_help "-V, --version" "$(gettext "print the version information and exit")" + dirmsg="$(gettext_printf "expect GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")" + print_option_help "--boot-directory=$(gettext "DIR")" "$dirmsg" + echo + gettext "MENU_ENTRY is a number, a menu item title or a menu item identifier."; echo + echo + gettext "Report bugs to ."; echo +} + +argument () { + opt=$1 + shift + + if test $# -eq 0; then + gettext_printf "%s: option requires an argument -- \`%s'\n" "$self" "$opt" 1>&2 + exit 1 + fi + echo $1 +} + +# Check the arguments. +while test $# -gt 0 +do + option=$1 + shift + + case "$option" in + -h | --help) + usage + exit 0 ;; + -V | --version) + echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" + exit 0 ;; + +# Accept for compatibility + --root-directory) + rootdir=`argument $option "$@"`; shift ;; + --root-directory=*) + rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; + + --boot-directory) + bootdir=`argument $option "$@"`; shift;; + --boot-directory=*) + bootdir=`echo "$option" | sed 's/--boot-directory=//'` ;; + + -*) + gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2 + usage + exit 1 + ;; + *) + if test "x$entry" != x; then + gettext "More than one menu entry?" 1>&2 + echo >&2 + usage + exit 1 + fi + entry="${option}" ;; + esac +done + +if test "x$entry" = x; then + gettext "Menu entry not specified." 1>&2 + echo >&2 + usage + exit 1 +fi + +if [ -z "$bootdir" ]; then + # Default bootdir if bootdir not initialized. + bootdir=/@bootdirname@ + + if [ -n "$rootdir" ] ; then + # Initialize bootdir if rootdir was initialized. + bootdir=${rootdir}/@bootdirname@ + fi +fi + +grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'` + +$grub_editenv ${grubdir}/grubenv unset prev_saved_entry +$grub_editenv ${grubdir}/grubenv unset next_entry +$grub_editenv ${grubdir}/grubenv set saved_entry="$entry" + +# Bye. +exit 0 diff --git a/util/grub-setup.c b/util/grub-setup.c new file mode 100644 index 000000000..993b02068 --- /dev/null +++ b/util/grub-setup.c @@ -0,0 +1,333 @@ +/* grub-setup.c - make GRUB usable */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#define _GNU_SOURCE 1 + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +/* On SPARC this program fills in various fields inside of the 'boot' and 'core' + * image files. + * + * The 'boot' image needs to know the OBP path name of the root + * device. It also needs to know the initial block number of + * 'core' (which is 'diskboot' concatenated with 'kernel' and + * all the modules, this is created by grub-mkimage). This resulting + * 'boot' image is 512 bytes in size and is placed in the second block + * of a partition. + * + * The initial 'diskboot' block acts as a loader for the actual GRUB + * kernel. It contains the loading code and then a block list. + * + * The block list of 'core' starts at the end of the 'diskboot' image + * and works it's way backwards towards the end of the code of 'diskboot'. + * + * We patch up the images with the necessary values and write out the + * result. + */ + +#define DEFAULT_BOOT_FILE "boot.img" +#define DEFAULT_CORE_FILE "core.img" + +/* Non-printable "keys" for arguments with no short form. + * See grub-core/gnulib/argp.h for details. */ +enum { + NO_RS_CODES_KEY = 0x100, +}; + +static struct argp_option options[] = { + {"boot-image", 'b', N_("FILE"), 0, + N_("use FILE as the boot image [default=%s]"), 0}, + {"core-image", 'c', N_("FILE"), 0, + N_("use FILE as the core image [default=%s]"), 0}, + {"directory", 'd', N_("DIR"), 0, + N_("use GRUB files in the directory DIR [default=%s]"), 0}, + {"device-map", 'm', N_("FILE"), 0, + N_("use FILE as the device map [default=%s]"), 0}, + {"force", 'f', 0, 0, + N_("install even if problems are detected"), 0}, + {"skip-fs-probe",'s',0, 0, + N_("do not probe for filesystems in DEVICE"), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + {"allow-floppy", 'a', 0, 0, + /* TRANSLATORS: The potential breakage isn't limited to floppies but it's + likely to make the install unbootable from HDD. */ + N_("make the drive also bootable as floppy (default for fdX devices). May break on some BIOSes."), 0}, + {"no-rs-codes", NO_RS_CODES_KEY, 0, 0, + N_("Do not apply any reed-solomon codes when embedding core.img. " + "This option is only available on x86 BIOS targets."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + +static char * +help_filter (int key, const char *text, void *input __attribute__ ((unused))) +{ + switch (key) + { + case 'b': + return xasprintf (text, DEFAULT_BOOT_FILE); + + case 'c': + return xasprintf (text, DEFAULT_CORE_FILE); + + case 'd': + return xasprintf (text, DEFAULT_DIRECTORY); + + case 'm': + return xasprintf (text, DEFAULT_DEVICE_MAP); + + default: + return (char *) text; + } +} + +#pragma GCC diagnostic error "-Wformat-nonliteral" + +struct arguments +{ + char *boot_file; + char *core_file; + char *dir; + char *dev_map; + int force; + int fs_probe; + int allow_floppy; + char *device; + int add_rs_codes; +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 'a': + arguments->allow_floppy = 1; + break; + + case 'b': + if (arguments->boot_file) + free (arguments->boot_file); + + arguments->boot_file = xstrdup (arg); + break; + + case 'c': + if (arguments->core_file) + free (arguments->core_file); + + arguments->core_file = xstrdup (arg); + break; + + case 'd': + if (arguments->dir) + free (arguments->dir); + + arguments->dir = xstrdup (arg); + break; + + case 'm': + if (arguments->dev_map) + free (arguments->dev_map); + + arguments->dev_map = xstrdup (arg); + break; + + case 'f': + arguments->force = 1; + break; + + case 's': + arguments->fs_probe = 0; + break; + + case 'v': + verbosity++; + break; + + case NO_RS_CODES_KEY: + arguments->add_rs_codes = 0; + break; + + case ARGP_KEY_ARG: + if (state->arg_num == 0) + arguments->device = xstrdup(arg); + else + { + /* Too many arguments. */ + fprintf (stderr, _("Unknown extra argument `%s'."), arg); + fprintf (stderr, "\n"); + argp_usage (state); + } + break; + + case ARGP_KEY_NO_ARGS: + fprintf (stderr, "%s", _("No device is specified.\n")); + argp_usage (state); + exit (1); + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("DEVICE"), + "\n"N_("\ +Set up images to boot from DEVICE.\n\ +\n\ +You should not normally run this program directly. Use grub-install instead.") +"\v"N_("\ +DEVICE must be an OS device (e.g. /dev/sda)."), + NULL, help_filter, NULL +}; + +static char * +get_device_name (char *dev) +{ + size_t len = strlen (dev); + + if (dev[0] != '(' || dev[len - 1] != ')') + return 0; + + dev[len - 1] = '\0'; + return dev + 1; +} + +int +main (int argc, char *argv[]) +{ + char *root_dev = NULL; + char *dest_dev = NULL; + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Default option values. */ + memset (&arguments, 0, sizeof (struct arguments)); + arguments.fs_probe = 1; + arguments.add_rs_codes = 1; + + /* Parse our arguments */ + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + +#ifdef GRUB_SETUP_SPARC64 + arguments.force = 1; +#endif + + if (verbosity > 1) + grub_env_set ("debug", "all"); + + /* Initialize the emulated biosdisk driver. */ + grub_util_biosdisk_init (arguments.dev_map ? : DEFAULT_DEVICE_MAP); + + /* Initialize all modules. */ + grub_init_all (); + grub_gcry_init_all (); + + grub_lvm_fini (); + grub_mdraid09_fini (); + grub_mdraid1x_fini (); + grub_diskfilter_fini (); + grub_diskfilter_init (); + grub_mdraid09_init (); + grub_mdraid1x_init (); + grub_lvm_init (); + + dest_dev = get_device_name (arguments.device); + if (! dest_dev) + { + /* Possibly, the user specified an OS device file. */ + dest_dev = grub_util_get_grub_dev (arguments.device); + if (! dest_dev) + { + char *program = xstrdup(program_name); + fprintf (stderr, _("Invalid device `%s'.\n"), arguments.device); + argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); + free(program); + exit(1); + } + grub_util_info ("transformed OS device `%s' into GRUB device `%s'", + arguments.device, dest_dev); + } + else + { + /* For simplicity. */ + dest_dev = xstrdup (dest_dev); + grub_util_info ("Using `%s' as GRUB device", dest_dev); + } + + /* Do the real work. */ + GRUB_SETUP_FUNC (arguments.dir ? : DEFAULT_DIRECTORY, + arguments.boot_file ? : DEFAULT_BOOT_FILE, + arguments.core_file ? : DEFAULT_CORE_FILE, + dest_dev, arguments.force, + arguments.fs_probe, arguments.allow_floppy, + arguments.add_rs_codes); + + /* Free resources. */ + grub_fini_all (); + grub_util_biosdisk_fini (); + + free (arguments.boot_file); + free (arguments.core_file); + free (arguments.dir); + free (arguments.dev_map); + free (arguments.device); + free (root_dev); + free (dest_dev); + + return 0; +} diff --git a/util/grub-syslinux2cfg.c b/util/grub-syslinux2cfg.c new file mode 100644 index 000000000..85fa0da14 --- /dev/null +++ b/util/grub-syslinux2cfg.c @@ -0,0 +1,246 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include + +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma GCC diagnostic ignored "-Wmissing-prototypes" +#pragma GCC diagnostic ignored "-Wmissing-declarations" +#include +#pragma GCC diagnostic error "-Wmissing-prototypes" +#pragma GCC diagnostic error "-Wmissing-declarations" + +#include "progname.h" + +struct arguments +{ + char *input; + char *root; + char *target_root; + char *cwd; + char *target_cwd; + char *output; + int verbosity; + grub_syslinux_flavour_t flav; +}; + +static struct argp_option options[] = { + {"target-root", 't', N_("DIR"), 0, + N_("root directory as it will be seen on runtime [default=/]."), 0}, + {"root", 'r', N_("DIR"), 0, + N_("root directory of the syslinux disk [default=/]."), 0}, + {"target-cwd", 'T', N_("DIR"), 0, + N_( + "current directory of syslinux as it will be seen on runtime [default is parent directory of input file]." +), 0}, + {"cwd", 'c', N_("DIR"), 0, + N_("current directory of syslinux [default is parent directory of input file]."), 0}, + + {"output", 'o', N_("FILE"), 0, N_("write output to FILE [default=stdout]."), 0}, + {"isolinux", 'i', 0, 0, N_("assume input is an isolinux configuration file."), 0}, + {"pxelinux", 'p', 0, 0, N_("assume input is a pxelinux configuration file."), 0}, + {"syslinux", 's', 0, 0, N_("assume input is a syslinux configuration file."), 0}, + {"verbose", 'v', 0, 0, N_("print verbose messages."), 0}, + { 0, 0, 0, 0, 0, 0 } +}; + +static error_t +argp_parser (int key, char *arg, struct argp_state *state) +{ + /* Get the input argument from argp_parse, which we + know is a pointer to our arguments structure. */ + struct arguments *arguments = state->input; + + switch (key) + { + case 't': + free (arguments->target_root); + arguments->target_root = xstrdup (arg); + break; + + case 'T': + free (arguments->target_cwd); + arguments->target_cwd = xstrdup (arg); + break; + + case 'c': + free (arguments->cwd); + arguments->cwd = xstrdup (arg); + break; + + case 'o': + free (arguments->output); + arguments->output = xstrdup (arg); + break; + + case ARGP_KEY_ARG: + if (!arguments->input) + { + arguments->input = xstrdup (arg); + return 0; + } + return ARGP_ERR_UNKNOWN; + + case 'r': + free (arguments->root); + arguments->root = xstrdup (arg); + return 0; + + case 'i': + arguments->flav = GRUB_SYSLINUX_ISOLINUX; + break; + + case 's': + arguments->flav = GRUB_SYSLINUX_SYSLINUX; + break; + case 'p': + arguments->flav = GRUB_SYSLINUX_PXELINUX; + break; + + case 'v': + arguments->verbosity++; + break; + + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +static struct argp argp = { + options, argp_parser, N_("FILE"), + N_("Transform syslinux config into GRUB one."), + NULL, NULL, NULL +}; + +int +main (int argc, char *argv[]) +{ + struct arguments arguments; + + grub_util_host_init (&argc, &argv); + + /* Check for options. */ + memset (&arguments, 0, sizeof (struct arguments)); + if (argp_parse (&argp, argc, argv, 0, 0, &arguments) != 0) + { + fprintf (stderr, "%s", _("Error in parsing command line arguments\n")); + exit(1); + } + + if (!arguments.input) + { + fprintf (stderr, "%s", _("Missing arguments\n")); + exit(1); + } + + grub_init_all (); + grub_hostfs_init (); + grub_host_init (); + + char *t, *inpfull, *rootfull, *res; + t = grub_canonicalize_file_name (arguments.input); + if (!t) + { + grub_util_error (_("cannot open `%s': %s"), arguments.input, + strerror (errno)); + } + + inpfull = xasprintf ("(host)/%s", t); + free (t); + + t = grub_canonicalize_file_name (arguments.root ? : "/"); + if (!t) + { + grub_util_error (_("cannot open `%s': %s"), arguments.root, + strerror (errno)); + } + + rootfull = xasprintf ("(host)/%s", t); + free (t); + + char *cwd = xstrdup (arguments.input); + char *p = strrchr (cwd, '/'); + char *cwdfull; + if (p) + *p = '\0'; + else + { + free (cwd); + cwd = xstrdup ("."); + } + + t = grub_canonicalize_file_name (arguments.cwd ? : cwd); + if (!t) + { + grub_util_error (_("cannot open `%s': %s"), arguments.root, + strerror (errno)); + } + + cwdfull = xasprintf ("(host)/%s", t); + free (t); + + res = grub_syslinux_config_file (rootfull, arguments.target_root ? : "/", + cwdfull, arguments.target_cwd ? : cwd, + inpfull, arguments.flav); + if (!res) + grub_util_error ("%s", grub_errmsg); + if (arguments.output) + { + FILE *f = grub_util_fopen (arguments.output, "wb"); + if (!f) + grub_util_error (_("cannot open `%s': %s"), arguments.output, + strerror (errno)); + fwrite (res, 1, strlen (res), f); + fclose (f); + } + else + printf ("%s\n", res); + free (res); + free (rootfull); + free (inpfull); + free (arguments.root); + free (arguments.output); + free (arguments.target_root); + free (arguments.input); + free (cwdfull); + free (cwd); + + return 0; +} diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in new file mode 100644 index 000000000..93a90233e --- /dev/null +++ b/util/grub.d/00_header.in @@ -0,0 +1,356 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" +grub_lang=`echo $LANG | cut -d . -f 1` + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "$pkgdatadir/grub-mkconfig_lib" + +# Do this as early as possible, since other commands might depend on it. +# (e.g. the `loadfont' command might need lvm or raid modules) +for i in ${GRUB_PRELOAD_MODULES} ; do + echo "insmod $i" +done + +if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi +if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi +if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi +if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=auto ; fi + +if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi +if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi +if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi + +cat << EOF +if [ -s \$prefix/grubenv ]; then + load_env +fi +EOF +if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then + cat < /dev/null ; then + font_path="${path}" + else + continue + fi + break 2 + done + done + if [ -n "${font_path}" ] ; then + cat << EOF +if [ x\$feature_default_font_path = xy ] ; then + font=unicode +else +EOF + # Make the font accessible + prepare_grub_to_access_device `${grub_probe} --target=device "${font_path}"` + cat << EOF + font="`make_system_path_relative_to_its_root "${font_path}"`" +fi + +if loadfont \$font ; then +EOF + else + cat << EOF +if loadfont unicode ; then +EOF + fi + fi + + cat << EOF + set gfxmode=${GRUB_GFXMODE} + load_video + insmod gfxterm +EOF + +# Gettext variables and module +if [ "x${LANG}" != "xC" ] && [ "x${LANG}" != "x" ]; then + cat << EOF + set locale_dir=\$prefix/locale + set lang=${grub_lang} + insmod gettext +EOF +fi + +cat <&2 + + prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_THEME"` + cat << EOF +insmod gfxmenu +EOF + themedir="`dirname "$GRUB_THEME"`" + for x in "$themedir"/*.pf2 "$themedir"/f/*.pf2; do + if [ -f "$x" ]; then + cat << EOF +loadfont (\$root)`make_system_path_relative_to_its_root $x` +EOF + fi + done + if [ x"`echo "$themedir"/*.jpg`" != x"$themedir/*.jpg" ] || [ x"`echo "$themedir"/*.jpeg`" != x"$themedir/*.jpeg" ]; then + cat << EOF +insmod jpeg +EOF + fi + if [ x"`echo "$themedir"/*.png`" != x"$themedir/*.png" ]; then + cat << EOF +insmod png +EOF + fi + if [ x"`echo "$themedir"/*.tga`" != x"$themedir/*.tga" ]; then + cat << EOF +insmod tga +EOF + fi + + cat << EOF +set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME` +export theme +EOF + elif [ "x$GRUB_BACKGROUND" != x ] && [ -f "$GRUB_BACKGROUND" ] \ + && is_path_readable_by_grub "$GRUB_BACKGROUND"; then + gettext_printf "Found background: %s\n" "$GRUB_BACKGROUND" >&2 + case "$GRUB_BACKGROUND" in + *.png) reader=png ;; + *.tga) reader=tga ;; + *.jpg|*.jpeg) reader=jpeg ;; + *) gettext "Unsupported image format" >&2; echo >&2; exit 1 ;; + esac + prepare_grub_to_access_device `${grub_probe} --target=device "$GRUB_BACKGROUND"` + cat << EOF +insmod $reader +background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"` +EOF + fi +fi + +make_timeout () +{ + if [ "x${3}" != "x" ] ; then + timeout="${2}" + style="${3}" + elif [ "x${1}" != "x" ] && [ "x${1}" != "x0" ] ; then + # Handle the deprecated GRUB_HIDDEN_TIMEOUT scheme. + timeout="${1}" + if [ "x${2}" != "x0" ] ; then + grub_warn "$(gettext "Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.")" + fi + if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then + style="hidden" + verbose= + else + style="countdown" + verbose=" --verbose" + fi + else + # No hidden timeout, so treat as GRUB_TIMEOUT_STYLE=menu + timeout="${2}" + style="menu" + fi + cat << EOF +if [ x\$feature_timeout_style = xy ] ; then + set timeout_style=${style} + set timeout=${timeout} +EOF + if [ "x${style}" = "xmenu" ] ; then + cat << EOF +# Fallback normal timeout code in case the timeout_style feature is +# unavailable. +else + set timeout=${timeout} +EOF + else + cat << EOF +# Fallback hidden-timeout code in case the timeout_style feature is +# unavailable. +elif sleep${verbose} --interruptible ${timeout} ; then + set timeout=0 +EOF + fi + cat << EOF +fi +EOF +} + +if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then + cat <. + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "$pkgdatadir/grub-mkconfig_lib" + +CLASS="--class gnu --class os" + +if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS=GNU +else + OS="${GRUB_DISTRIBUTOR} GNU/Hurd" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" +fi + +at_least_one=false +all_of_them=true + +# FIXME: add l4 here? +kernel= +for i in /boot/gnumach* ; do + if test -e $i ; then + basename=`basename $i` + dirname=`dirname $i` + rel_dirname=`make_system_path_relative_to_its_root $dirname` + gettext_printf "Found GNU Mach: %s" "$i" >&2 + echo >&2 + kernels="${kernels} ${rel_dirname}/${basename}" + at_least_one=true + fi +done + +# FIXME: This works for ext2. For other filesystems we might need special-casing +case "${GRUB_FS}" in + *fs) hurd_fs="${GRUB_FS}" ;; + *) hurd_fs="${GRUB_FS}fs" ;; +esac + +for i in /hurd/${hurd_fs}.static /hurd/exec ; do + if test -e "$i" ; then + gettext_printf "Found Hurd module: %s" "$i" >&2 + echo >&2 + at_least_one=true + else + all_of_them=false + fi +done + +if ${at_least_one} ; then : ; else + # no hurd here, aborting silently + exit 0 +fi + +if ${all_of_them} && test -e /lib/ld.so.1 ; then : ; else + gettext "Some Hurd stuff found, but not enough to boot." >&2 + echo >&2 + exit 1 +fi + +title_correction_code= + +hurd_entry () { + kernel="$1" + type="$2" + kernel_base="`basename "${kernel}"`" + + if [ x$type != xsimple ] ; then + if [ x$type = xrecovery ] ; then + title="$(gettext_printf "%s, with Hurd %s (recovery mode)" "${OS}" "${kernel_base}")" + oldtitle="$OS using $kernel_base (recovery mode)" + else + title="$(gettext_printf "%s, with Hurd %s" "${OS}" "${kernel_base}")" + oldtitle="$OS using $kernel_base" + fi + if [ x"$oldtitle" = x"$GRUB_ACTUAL_DEFAULT" ]; then + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)" + title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;" + grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnuhurd-advanced-$boot_device_id>'gnuhurd-$kernel-$type-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")'")" + fi + sed "s/^/$submenu_indentation/" << EOF +menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnuhurd-$kernel-$type-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' { +EOF + else + sed "s/^/$submenu_indentation/" << EOF +menuentry '$(echo "$OS" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnuhurd-simple-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' { +EOF + fi + + prepare_grub_to_access_device "${GRUB_DEVICE_BOOT}" | grub_add_tab|sed "s/^/$submenu_indentation/" + message="$(gettext_printf "Loading GNU Mach ...")" + + if [ x$type = xrecovery ] ; then + opts="-s" + else + opts= + fi + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} $opts ${GRUB_CMDLINE_GNUMACH} +EOF + + if [ x$type != xrecovery ] ; then + save_default_entry | grub_add_tab| sed "s/^/$submenu_indentation/" + fi + prepare_grub_to_access_device "${GRUB_DEVICE}" | grub_add_tab| sed "s/^/$submenu_indentation/" + message="$(gettext_printf "Loading the Hurd ...")" + if [ x$type = xrecovery ] ; then + opts= + else + opts="--readonly" + fi + + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + module /hurd/${hurd_fs}.static ${hurd_fs} $opts \\ + --multiboot-command-line='\${kernel-command-line}' \\ + --host-priv-port='\${host-port}' \\ + --device-master-port='\${device-port}' \\ + --exec-server-task='\${exec-task}' -T typed '\${root}' \\ + '\$(task-create)' '\$(task-resume)' + module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)' +} +EOF + +} + +title_correction_code= + +# Extra indentation to add to menu entries in a submenu. We're not in a submenu +# yet, so it's empty. In a submenu it will be equal to '\t' (one tab). +submenu_indentation="" +is_top_level=true + +while [ "x$kernels" != "x" ] ; do + kernel=`version_find_latest $kernels` + + if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then + hurd_entry "$kernel" simple + submenu_indentation="$grub_tab" + + # TRANSLATORS: %s is replaced with an OS name + echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnuhurd-advanced-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {" + is_top_level=false + fi + + hurd_entry "$kernel" advanced + hurd_entry "$kernel" recovery + + kernels=`echo $kernels | tr ' ' '\n' | fgrep -vx "$kernel" | tr '\n' ' '` +done + +# If at least one kernel was found, then we need to +# add a closing '}' for the submenu command. +if [ x"$is_top_level" != xtrue ]; then + echo '}' +fi + +echo "$title_correction_code" diff --git a/util/grub.d/10_illumos.in b/util/grub.d/10_illumos.in new file mode 100644 index 000000000..a133e1b3f --- /dev/null +++ b/util/grub.d/10_illumos.in @@ -0,0 +1,53 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" +. "$pkgdatadir/grub-mkconfig_lib" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +CLASS="--class os" + +case "${GRUB_DISTRIBUTOR}" in + *) + OS="Illumos" + CLASS="--class illumos ${CLASS}" + ;; +esac + +echo "menuentry '$(echo "$OS" | grub_quote)' ${CLASS} \$menuentry_id_option 'illumos-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {" +save_default_entry | grub_add_tab +prepare_grub_to_access_device "${GRUB_DEVICE_BOOT}" | grub_add_tab +message="$(gettext_printf "Loading kernel of Illumos ...")" + cat << EOF + insmod gzio + if cpuid -l ; then + ISADIR=amd64 + else + ISADIR= + fi + zfs-bootfs $($grub_mkrelpath /) ZFS_BOOTFS + echo '$(echo "$message" | grub_quote)' + multiboot $($grub_mkrelpath /platform/i86pc/kernel)/\$ISADIR/unix /platform/i86pc/kernel/\$ISADIR/unix -B \$ZFS_BOOTFS,console=text + module $($grub_mkrelpath /platform/i86pc)/\$ISADIR/boot_archive /platform/i86pc/\$ISADIR/boot_archive +} +EOF diff --git a/util/grub.d/10_kfreebsd.in b/util/grub.d/10_kfreebsd.in new file mode 100644 index 000000000..9d8e8fd85 --- /dev/null +++ b/util/grub.d/10_kfreebsd.in @@ -0,0 +1,244 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" +. "$pkgdatadir/grub-mkconfig_lib" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +CLASS="--class os" + +case "${GRUB_DISTRIBUTOR}" in + Debian) + OS="${GRUB_DISTRIBUTOR} GNU/kFreeBSD" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') --class gnu-kfreebsd --class gnu ${CLASS}" + ;; + *) + OS="FreeBSD" + CLASS="--class freebsd --class bsd ${CLASS}" + ;; +esac + +load_kfreebsd_module () +{ + mod="$1" + allow_fail="$2" + + if ! test -e "${module_dir}/${mod}.ko" ; then + if [ "${allow_fail}" = "true" ] ; then + # Return silently + return + else + # Print an error and fail. + ls "${module_dir}/${mod}.ko" > /dev/null + fi + fi + + if [ -z "${prepare_module_dir_cache}" ]; then + prepare_module_dir_cache="$(prepare_grub_to_access_device $(${grub_probe} -t device "${module_dir}") | grub_add_tab)" + fi + + printf '%s\n' "${prepare_module_dir_cache}" + cat << EOF + kfreebsd_module_elf ${module_dir_rel}/${mod}.ko +EOF +} + +title_correction_code= + +kfreebsd_entry () +{ + os="$1" + version="$2" + type="$3" + args="$4" + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + if [ x$type != xsimple ] ; then + if [ x$type = xrecovery ] ; then + title="$(gettext_printf "%s, with kFreeBSD %s (recovery mode)" "${os}" "${version}")" + else + title="$(gettext_printf "%s, with kFreeBSD %s" "${os}" "${version}")" + fi + replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')" + if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)" + title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;" + grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "kfreebsd-advanced-$boot_device_id>kfreebsd-$version-$type-$boot_device_id")" + fi + echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'kfreebsd-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + else + echo "menuentry '$(echo "$OS" | grub_quote)' ${CLASS} \$menuentry_id_option 'kfreebsd-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + fi + if [ x$type != xrecovery ] ; then + save_default_entry | grub_add_tab | sed "s/^/$submenu_indentation/" + fi + if [ -z "${prepare_boot_cache}" ]; then + prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)" + fi + + printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" + message="$(gettext_printf "Loading kernel of FreeBSD %s ..." ${version})" + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + kfreebsd ${rel_dirname}/${basename} ${args} +EOF + + if test -n "${devices}" ; then + sed "s/^/$submenu_indentation/" << EOF + kfreebsd_loadenv ${devices_rel_dirname}/${devices_basename} +EOF + fi + + load_kfreebsd_module acpi true + + for abstraction in dummy $(${grub_probe} -t abstraction --device ${GRUB_DEVICE}) ; do + case $abstraction in + lvm) load_kfreebsd_module geom_linux_lvm false ;; + esac + done + + case "${kfreebsd_fs}" in + zfs) + load_kfreebsd_module opensolaris false + + ls "/boot/zfs/zpool.cache" > /dev/null + printf '%s\n' "${prepare_boot_cache}" + sed "s/^/$submenu_indentation/" << EOF + kfreebsd_module $(make_system_path_relative_to_its_root /boot)/zfs/zpool.cache type=/boot/zfs/zpool.cache +EOF + ;; + esac + + if [ x${kfreebsd_fs} = xufs ]; then + load_kfreebsd_module ${kfreebsd_fs} true | sed "s/^/$submenu_indentation/" + else + load_kfreebsd_module ${kfreebsd_fs} false | sed "s/^/$submenu_indentation/" + fi + + sed "s/^/$submenu_indentation/" << EOF + set kFreeBSD.vfs.root.mountfrom=${kfreebsd_fs}:${kfreebsd_device} + set kFreeBSD.vfs.root.mountfrom.options=rw +} +EOF +} + +list= +for i in /boot/kfreebsd-* /boot/kernel/kernel ; do + if grub_file_is_not_garbage "$i" ; then + list="$list $i" + fi +done +prepare_boot_cache= +boot_device_id= +title_correction_code= + +# Extra indentation to add to menu entries in a submenu. We're not in a submenu +# yet, so it's empty. In a submenu it will be equal to '\t' (one tab). +submenu_indentation="" + +is_top_level=true + +while [ "x$list" != "x" ] ; do + kfreebsd=`version_find_latest $list` + gettext_printf "Found kernel of FreeBSD: %s\n" "$kfreebsd" >&2 + basename=`basename $kfreebsd` + dirname=`dirname $kfreebsd` + rel_dirname=`make_system_path_relative_to_its_root $dirname` + + if [ -f /boot/device.hints ] ; then + devices=/boot/device.hints + devices_basename=`basename $devices` + devices_dirname=`dirname $devices` + devices_rel_dirname=`make_system_path_relative_to_its_root $devices_dirname` + fi + + case ${GRUB_FS} in + ufs1 | ufs2) kfreebsd_fs=ufs ;; + ext2) kfreebsd_fs=ext2fs ;; + *) kfreebsd_fs=${GRUB_FS} ;; + esac + + case ${GRUB_FS} in + zfs) + # zpool name + kfreebsd_device=$(${grub_probe} -t fs_label --device ${GRUB_DEVICE}) + # filesystem name (empty string for the main filesystem) + kfreebsd_device="${kfreebsd_device}$(${grub_mkrelpath} / | sed -e "s,/*@$,,")" + ;; + *) + kfreebsd_device=${kfreebsd_fs}id/${GRUB_DEVICE_UUID} + # Debian GNU/kFreeBSD can't remount root if it's supplied as UUID but + # as an UUID + if [ "x${GRUB_DISTRIBUTOR}" = "xDebian" ] \ + && ! (cat /etc/fstab | awk '!/^[[:space:]]*#/ && $2=="/" { print $1; }' \ + | grep "${kfreebsd_fs}id/${GRUB_DEVICE_UUID}" > /dev/null); then + kfreebsd_device=${GRUB_DEVICE} + fi + ;; + esac + + version=`echo $basename | sed -e "s,^[^0-9]*-,,g;s/\.gz$//g"` + alt_version=`echo $version | sed -e "s,\.old$,,g"` + + module_dir= + for i in "/lib/modules/${version}" "/lib/modules/${alt_version}" \ + "/boot/kernel"; do + if test -e "$i" ; then + module_dir="$i" + break + fi + done + if test -n "${module_dir}" ; then + gettext_printf "Found kernel module directory: %s\n" "${module_dir}" >&2 + module_dir_rel=$(make_system_path_relative_to_its_root $module_dir) + fi + + if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then + kfreebsd_entry "${OS}" "${version}" simple + submenu_indentation="$grub_tab" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + # TRANSLATORS: %s is replaced with an OS name + echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'kfreebsd-advanced-$boot_device_id' {" + is_top_level=false + fi + + kfreebsd_entry "${OS}" "${version}" advanced + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + kfreebsd_entry "${OS}" "${version}" recovery "-s" + fi + + list=`echo $list | tr ' ' '\n' | fgrep -vx "$kfreebsd" | tr '\n' ' '` +done + +# If at least one kernel was found, then we need to +# add a closing '}' for the submenu command. +if [ x"$is_top_level" != xtrue ]; then + echo '}' +fi + +echo "$title_correction_code" + diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in new file mode 100644 index 000000000..de9044c7f --- /dev/null +++ b/util/grub.d/10_linux.in @@ -0,0 +1,257 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +. "$pkgdatadir/grub-mkconfig_lib" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +CLASS="--class gnu-linux --class gnu --class os" + +if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS=GNU/Linux +else + OS="${GRUB_DISTRIBUTOR} GNU/Linux" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" +fi + +# loop-AES arranges things so that /dev/loop/X can be our root device, but +# the initrds that Linux uses don't like that. +case ${GRUB_DEVICE} in + /dev/loop/*|/dev/loop[0-9]) + GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` + ;; +esac + +# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter +# and mounting btrfs requires user space scanning, so force UUID in this case. +if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ + || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ + || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then + LINUX_ROOT_DEVICE=${GRUB_DEVICE} +else + LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} +fi + +case x"$GRUB_FS" in + xbtrfs) + rootsubvol="`make_system_path_relative_to_its_root /`" + rootsubvol="${rootsubvol#/}" + if [ "x${rootsubvol}" != x ]; then + GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}" + fi;; + xzfs) + rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true` + bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`" + LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}" + ;; +esac + +title_correction_code= + +linux_entry () +{ + os="$1" + version="$2" + type="$3" + args="$4" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + if [ x$type != xsimple ] ; then + case $type in + recovery) + title="$(gettext_printf "%s, with Linux %s (recovery mode)" "${os}" "${version}")" ;; + *) + title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;; + esac + if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then + replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')" + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)" + title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;" + grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")" + fi + echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + else + echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + fi + if [ x$type != xrecovery ] ; then + save_default_entry | grub_add_tab + fi + + # Use ELILO's generic "efifb" when it's known to be available. + # FIXME: We need an interface to select vesafb in case efifb can't be used. + if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then + echo " load_video" | sed "s/^/$submenu_indentation/" + if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \ + && grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then + echo " set gfxpayload=keep" | sed "s/^/$submenu_indentation/" + fi + else + if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then + echo " load_video" | sed "s/^/$submenu_indentation/" + fi + echo " set gfxpayload=$GRUB_GFXPAYLOAD_LINUX" | sed "s/^/$submenu_indentation/" + fi + + echo " insmod gzio" | sed "s/^/$submenu_indentation/" + + if [ x$dirname = x/ ]; then + if [ -z "${prepare_root_cache}" ]; then + prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)" + fi + printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/" + else + if [ -z "${prepare_boot_cache}" ]; then + prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)" + fi + printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" + fi + message="$(gettext_printf "Loading Linux %s ..." ${version})" + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} +EOF + if test -n "${initrd}" ; then + # TRANSLATORS: ramdisk isn't identifier. Should be translated. + message="$(gettext_printf "Loading initial ramdisk ...")" + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + initrd ${rel_dirname}/${initrd} +EOF + fi + sed "s/^/$submenu_indentation/" << EOF +} +EOF +} + +machine=`uname -m` +case "x$machine" in + xi?86 | xx86_64) + list= + for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do + if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi + done ;; + *) + list= + for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do + if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi + done ;; +esac + +case "$machine" in + i?86) GENKERNEL_ARCH="x86" ;; + mips|mips64) GENKERNEL_ARCH="mips" ;; + mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;; + arm*) GENKERNEL_ARCH="arm" ;; + *) GENKERNEL_ARCH="$machine" ;; +esac + +prepare_boot_cache= +prepare_root_cache= +boot_device_id= +title_correction_code= + +# Extra indentation to add to menu entries in a submenu. We're not in a submenu +# yet, so it's empty. In a submenu it will be equal to '\t' (one tab). +submenu_indentation="" + +is_top_level=true +while [ "x$list" != "x" ] ; do + linux=`version_find_latest $list` + gettext_printf "Found linux image: %s\n" "$linux" >&2 + basename=`basename $linux` + dirname=`dirname $linux` + rel_dirname=`make_system_path_relative_to_its_root $dirname` + version=`echo $basename | sed -e "s,^[^0-9]*-,,g"` + alt_version=`echo $version | sed -e "s,\.old$,,g"` + linux_root_device_thisversion="${LINUX_ROOT_DEVICE}" + + initrd= + for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \ + "initrd-${version}" "initramfs-${version}.img" \ + "initrd.img-${alt_version}" "initrd-${alt_version}.img" \ + "initrd-${alt_version}" "initramfs-${alt_version}.img" \ + "initramfs-genkernel-${version}" \ + "initramfs-genkernel-${alt_version}" \ + "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \ + "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do + if test -e "${dirname}/${i}" ; then + initrd="$i" + break + fi + done + + config= + for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do + if test -e "${i}" ; then + config="${i}" + break + fi + done + + initramfs= + if test -n "${config}" ; then + initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"` + fi + + if test -n "${initrd}" ; then + gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2 + elif test -z "${initramfs}" ; then + # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs. Since there's + # no initrd or builtin initramfs, it can't work here. + linux_root_device_thisversion=${GRUB_DEVICE} + fi + + if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then + linux_entry "${OS}" "${version}" simple \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + + submenu_indentation="$grub_tab" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + # TRANSLATORS: %s is replaced with an OS name + echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {" + is_top_level=false + fi + + linux_entry "${OS}" "${version}" advanced \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + linux_entry "${OS}" "${version}" recovery \ + "single ${GRUB_CMDLINE_LINUX}" + fi + + list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` +done + +# If at least one kernel was found, then we need to +# add a closing '}' for the submenu command. +if [ x"$is_top_level" != xtrue ]; then + echo '}' +fi + +echo "$title_correction_code" diff --git a/util/grub.d/10_netbsd.in b/util/grub.d/10_netbsd.in new file mode 100644 index 000000000..874f59969 --- /dev/null +++ b/util/grub.d/10_netbsd.in @@ -0,0 +1,186 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" +. "$pkgdatadir/grub-mkconfig_lib" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS="NetBSD" +else + OS="${GRUB_DISTRIBUTOR} NetBSD" +fi + +netbsd_load_fs_module () +{ + loader="$1" # "knetbsd" or "multiboot" + kernel="$2" # absolute path to the kernel file + + case $(zcat -f "${kernel}" | file -bL - | cut -d , -f 2 | tr -d ' ') in + Intel80386) + karch="i386" + ;; + x86-64) + karch="amd64" + ;; + *) + return + ;; + esac + + case $(${grub_probe} --target=fs -d ${GRUB_DEVICE}) in + ext2) + kmod="ext2fs" + ;; + fat) + kmod="msdosfs" + ;; + ntfs) + kmod="ntfs" + ;; + ufs*) + kmod="ffs" + ;; + *) + return + ;; + esac + + kversion=$(zcat -f "${kernel}" | strings | sed -n -e '/^@(#)NetBSD/ { s/^@(#)NetBSD \([0-9\.]*\) .*$/\1/g ; p ; q ; }') + kmodule="/stand/${karch}/${kversion}/modules/${kmod}/${kmod}.kmod" + + if test -z "$karch" || test -z "$kversion" || test ! -f "${kmodule}"; then + return + fi + + kmodule_rel=$(make_system_path_relative_to_its_root "$kmodule") || return + prepare_grub_to_access_device $(${grub_probe} -t device "${kmodule}") | sed -e 's,^, ,' | sed "s/^/$submenu_indentation/" + case "${loader}" in + knetbsd) + printf "${grub_tab}knetbsd_module_elf %s\n" "${kmodule_rel}" | sed "s/^/$submenu_indentation/" + ;; + multiboot) + printf "${grub_tab}module %s\n" "${kmodule_rel}" | sed "s/^/$submenu_indentation/" + ;; + esac +} + +title_correction_code= + +netbsd_entry () +{ + loader="$1" # "knetbsd" or "multiboot" + kernel="$2" # absolute path to the kernel file + type="$3" + args="$4" # extra arguments appended to loader command + + kroot_device="$(echo ${GRUB_DEVICE} | sed -e 's,^/dev/r,,')" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + + if [ x$type != xsimple ] ; then + if [ x$type = xrecovery ] ; then + title="$(gettext_printf "%s, with kernel %s (via %s, recovery mode)" "${OS}" "$(echo ${kernel} | sed -e 's,^.*/,,')" "${loader}")" + else + title="$(gettext_printf "%s, with kernel %s (via %s)" "${OS}" "$(echo ${kernel} | sed -e 's,^.*/,,')" "${loader}")" + fi + replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')" + if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)" + title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;" + grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "netbsd-advanced-$boot_device_id>netbsd-${loader}-$kernel-$type-$boot_device_id")" + fi + + echo "menuentry '$(echo "$title" | grub_quote)' \$menuentry_id_option 'netbsd-${loader}-$kernel-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + else + echo "menuentry '$(echo "$OS" | grub_quote)' \$menuentry_id_option 'netbsd-${loader}-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + fi + + printf "%s\n" "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" + case "${loader}" in + knetbsd) + printf "${grub_tab}knetbsd %s -r %s %s\n" \ + "${kernel}" "${kroot_device}" "${GRUB_CMDLINE_NETBSD} ${args}" | sed "s/^/$submenu_indentation/" + ;; + multiboot) + printf "${grub_tab}multiboot %s %s root=%s %s\n" \ + "${kernel}" "${kernel}" "${kroot_device}" "${GRUB_CMDLINE_NETBSD} ${args}" | sed "s/^/$submenu_indentation/" + ;; + esac + + netbsd_load_fs_module "${loader}" "${kernel}" + + printf "}\n" | sed "s/^/$submenu_indentation/" +} + +prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e 's,^, ,')" +boot_device_id= + +# We look for NetBSD kernels in / but not in subdirectories. We simply +# pick all statically linked ELF executable files (or links) in / with a +# name that starts with `netbsd'. +pattern="^ELF[^,]*executable.*statically linked" +# Extra indentation to add to menu entries in a submenu. We're not in a submenu +# yet, so it's empty. In a submenu it will be equal to '\t' (one tab). +submenu_indentation="" + +is_top_level=true +for k in /netbsd $(ls -t /netbsd?* 2>/dev/null) ; do + if ! grub_file_is_not_garbage "$k" ; then + continue + fi + if ! (zcat -f "$k" | file -bL - | grep -q "${pattern}") 2>/dev/null ; then + continue + fi + + gettext_printf "Found NetBSD kernel: %s\n" "$k" >&2 + + if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then + netbsd_entry "knetbsd" "$k" simple "${GRUB_CMDLINE_NETBSD_DEFAULT}" + submenu_indentation="$grub_tab" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + # TRANSLATORS: %s is replaced with an OS name + echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'netbsd-advanced-$boot_device_id' {" + is_top_level=false + fi + + netbsd_entry "knetbsd" "$k" advanced "${GRUB_CMDLINE_NETBSD_DEFAULT}" + netbsd_entry "multiboot" "$k" advanced "${GRUB_CMDLINE_NETBSD_DEFAULT}" + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + netbsd_entry "knetbsd" "$k" recovery "-s" + netbsd_entry "multiboot" "$k" recovery "-s" + fi +done + +# If at least one kernel was found, then we need to +# add a closing '}' for the submenu command. +if [ x"$is_top_level" != xtrue ]; then + echo '}' +fi + +echo "$title_correction_code" diff --git a/util/grub.d/10_windows.in b/util/grub.d/10_windows.in new file mode 100644 index 000000000..554c5614b --- /dev/null +++ b/util/grub.d/10_windows.in @@ -0,0 +1,100 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "$pkgdatadir/grub-mkconfig_lib" + +case "`uname 2>/dev/null`" in + CYGWIN*) ;; + *) exit 0 ;; +esac + +# Try C: even if current system is on other partition. +case "$SYSTEMDRIVE" in + [Cc]:) drives="C:" ;; + [D-Zd-z]:) drives="C: $SYSTEMDRIVE" ;; + *) exit 0 ;; +esac + +get_os_name_from_boot_ini () +{ + # Fail if no or more than one partition. + test "`sed -n 's,^\(\(multi\|scsi\)[^=]*\)=.*$,\1,p' "$1" 2>/dev/null | \ + sort | uniq | wc -l`" = 1 || return 1 + + # Search 'default=PARTITION' + get_os_name_from_boot_ini_part=`sed -n 's,^default=,,p' "$1" | sed 's,\\\\,/,g;s,[ $grub_tab\r]*$,,;1q'` + test -n "$get_os_name_from_boot_ini_part" || return 1 + + # Search 'PARTITION="NAME" ...' + get_os_name_from_boot_ini_name=`sed -n 's,\\\\,/,g;s,^'"$get_os_name_from_boot_ini_part"'="\([^"]*\)".*$,\1,p' "$1" | sed 1q` + test -n "$get_os_name_from_boot_ini_name" || return 1 + + echo "$get_os_name_from_boot_ini_name" +} + + +for drv in $drives ; do + + # Convert to Cygwin path. + dir=`cygpath "$drv"` + test -n "$dir" || continue + + needmap= + osid= + + # Check for Vista bootmgr. + if [ -f "$dir"/bootmgr ] && [ -f "$dir"/boot/bcd ] ; then + OS="$(gettext "Windows Vista/7 (loader)")" + osid=bootmgr + # Check for NTLDR. + elif [ -f "$dir"/ntldr ] && [ -f "$dir"/ntdetect.com ] && [ -f "$dir"/boot.ini ] ; then + OS=`get_os_name_from_boot_ini "$dir"/boot.ini` || OS="$(gettext "Windows NT/2000/XP (loader)")" + osid=ntldr + needmap=t + + else + continue + fi + + # Get boot device. + dev=`${grub_probe} -t device "$dir" 2>/dev/null` || continue + + gettext_printf "Found %s on %s (%s)\n" "$OS" "$drv" "$dev" >&2 + cat << EOF +menuentry '$(echo "$OS" | grub_quote)' \$menuentry_id_option '$osid-$(grub_get_device_id "${dev}")' { +EOF + + save_default_entry | sed -e 's,^,$grub_tab,' + prepare_grub_to_access_device "$dev" | sed 's,^,$grub_tab,' + test -z "$needmap" || cat <. + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "$pkgdatadir/grub-mkconfig_lib" + +osx_entry() { + if [ x$2 = x32 ]; then + # TRANSLATORS: it refers to kernel architecture (32-bit) + bitstr="$(gettext "(32-bit)")" + else + # TRANSLATORS: it refers to kernel architecture (64-bit) + bitstr="$(gettext "(64-bit)")" + fi + # TRANSLATORS: it refers on the OS residing on device %s + onstr="$(gettext_printf "(on %s)" "${GRUB_DEVICE}")" + cat << EOF +menuentry '$(echo "Darwin/Mac OS X $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'osprober-xnu-$2-$(grub_get_device_id "${GRUB_DEVICE}")' { +EOF + save_default_entry | grub_add_tab + prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab + cat << EOF + load_video + set do_resume=0 + if [ /var/vm/sleepimage -nt10 / ]; then + if xnu_resume /var/vm/sleepimage; then + set do_resume=1 + fi + fi + if [ \$do_resume = 0 ]; then + xnu_uuid ${OSXUUID} uuid + if [ -f /Extra/DSDT.aml ]; then + acpi -e /Extra/DSDT.aml + fi + if [ /kernelcache -nt /System/Library/Extensions ]; then + $1 /kernelcache boot-uuid=\${uuid} rd=*uuid + elif [ -f /System/Library/Kernels/kernel ]; then + $1 /System/Library/Kernels/kernel boot-uuid=\${uuid} rd=*uuid + xnu_kextdir /System/Library/Extensions + else + $1 /mach_kernel boot-uuid=\${uuid} rd=*uuid + if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then + xnu_mkext /System/Library/Extensions.mkext + else + xnu_kextdir /System/Library/Extensions + fi + fi + if [ -f /Extra/Extensions.mkext ]; then + xnu_mkext /Extra/Extensions.mkext + fi + if [ -d /Extra/Extensions ]; then + xnu_kextdir /Extra/Extensions + fi + if [ -f /Extra/devprop.bin ]; then + xnu_devprop_load /Extra/devprop.bin + fi + if [ -f /Extra/splash.jpg ]; then + insmod jpeg + xnu_splash /Extra/splash.jpg + fi + if [ -f /Extra/splash.png ]; then + insmod png + xnu_splash /Extra/splash.png + fi + if [ -f /Extra/splash.tga ]; then + insmod tga + xnu_splash /Extra/splash.tga + fi + fi +} +EOF +} + +OSXUUID="`${grub_probe} --target=fs_uuid --device ${GRUB_DEVICE} 2> /dev/null`" +osx_entry xnu_kernel 32 +osx_entry xnu_kernel64 64 diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in new file mode 100644 index 000000000..c48af948d --- /dev/null +++ b/util/grub.d/20_linux_xen.in @@ -0,0 +1,276 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +. "$pkgdatadir/grub-mkconfig_lib" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +CLASS="--class gnu-linux --class gnu --class os --class xen" + +if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS=GNU/Linux +else + OS="${GRUB_DISTRIBUTOR} GNU/Linux" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" +fi + +# loop-AES arranges things so that /dev/loop/X can be our root device, but +# the initrds that Linux uses don't like that. +case ${GRUB_DEVICE} in + /dev/loop/*|/dev/loop[0-9]) + GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` + ;; +esac + +# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter +# and mounting btrfs requires user space scanning, so force UUID in this case. +if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ + || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ + || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then + LINUX_ROOT_DEVICE=${GRUB_DEVICE} +else + LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} +fi + +# Allow overriding GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT. +if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE}" ]; then + GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX_XEN_REPLACE}" +fi +if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" ]; then + GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" +fi + +case x"$GRUB_FS" in + xbtrfs) + rootsubvol="`make_system_path_relative_to_its_root /`" + rootsubvol="${rootsubvol#/}" + if [ "x${rootsubvol}" != x ]; then + GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}" + fi;; + xzfs) + rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true` + bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`" + LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}" + ;; +esac + +title_correction_code= + +linux_entry () +{ + os="$1" + version="$2" + xen_version="$3" + type="$4" + args="$5" + xen_args="$6" + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + if [ x$type != xsimple ] ; then + if [ x$type = xrecovery ] ; then + title="$(gettext_printf "%s, with Xen %s and Linux %s (recovery mode)" "${os}" "${xen_version}" "${version}")" + else + title="$(gettext_printf "%s, with Xen %s and Linux %s" "${os}" "${xen_version}" "${version}")" + fi + replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')" + if [ x"Xen ${xen_version}>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)" + title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;" + grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")" + fi + echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + else + title="$(gettext_printf "%s, with Xen hypervisor" "${os}")" + echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + fi + if [ x$type != xrecovery ] ; then + save_default_entry | grub_add_tab | sed "s/^/$submenu_indentation/" + fi + + if [ -z "${prepare_boot_cache}" ]; then + prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)" + fi + printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" + xmessage="$(gettext_printf "Loading Xen %s ..." ${xen_version})" + lmessage="$(gettext_printf "Loading Linux %s ..." ${version})" + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$xmessage" | grub_quote)' + if [ "\$grub_platform" = "pc" -o "\$grub_platform" = "" ]; then + xen_rm_opts= + else + xen_rm_opts="no-real-mode edd=off" + fi + multiboot ${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts} + echo '$(echo "$lmessage" | grub_quote)' + module ${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args} +EOF + if test -n "${initrd}" ; then + # TRANSLATORS: ramdisk isn't identifier. Should be translated. + message="$(gettext_printf "Loading initial ramdisk ...")" + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + module --nounzip ${rel_dirname}/${initrd} +EOF + fi + sed "s/^/$submenu_indentation/" << EOF +} +EOF +} + +linux_list= +for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do + if grub_file_is_not_garbage "$i"; then + basename=$(basename $i) + version=$(echo $basename | sed -e "s,^[^0-9]*-,,g") + dirname=$(dirname $i) + config= + for j in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do + if test -e "${j}" ; then + config="${j}" + break + fi + done + if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then linux_list="$linux_list $i" ; fi + fi +done +if [ "x${linux_list}" = "x" ] ; then + exit 0 +fi + +file_is_not_sym () { + case "$1" in + */xen-syms-*) + return 1;; + *) + return 0;; + esac +} + +xen_list= +for i in /boot/xen*; do + if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then xen_list="$xen_list $i" ; fi +done +prepare_boot_cache= +boot_device_id= + +title_correction_code= + +machine=`uname -m` + +case "$machine" in + i?86) GENKERNEL_ARCH="x86" ;; + mips|mips64) GENKERNEL_ARCH="mips" ;; + mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;; + arm*) GENKERNEL_ARCH="arm" ;; + *) GENKERNEL_ARCH="$machine" ;; +esac + +# Extra indentation to add to menu entries in a submenu. We're not in a submenu +# yet, so it's empty. In a submenu it will be equal to '\t' (one tab). +submenu_indentation="" + +is_top_level=true + +while [ "x${xen_list}" != "x" ] ; do + list="${linux_list}" + current_xen=`version_find_latest $xen_list` + xen_basename=`basename ${current_xen}` + xen_dirname=`dirname ${current_xen}` + rel_xen_dirname=`make_system_path_relative_to_its_root $xen_dirname` + xen_version=`echo $xen_basename | sed -e "s,.gz$,,g;s,^xen-,,g"` + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + if [ "x$is_top_level" != xtrue ]; then + echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {" + fi + while [ "x$list" != "x" ] ; do + linux=`version_find_latest $list` + gettext_printf "Found linux image: %s\n" "$linux" >&2 + basename=`basename $linux` + dirname=`dirname $linux` + rel_dirname=`make_system_path_relative_to_its_root $dirname` + version=`echo $basename | sed -e "s,^[^0-9]*-,,g"` + alt_version=`echo $version | sed -e "s,\.old$,,g"` + linux_root_device_thisversion="${LINUX_ROOT_DEVICE}" + + initrd= + for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \ + "initrd-${version}" "initramfs-${version}.img" \ + "initrd.img-${alt_version}" "initrd-${alt_version}.img" \ + "initrd-${alt_version}" "initramfs-${alt_version}.img" \ + "initramfs-genkernel-${version}" \ + "initramfs-genkernel-${alt_version}" \ + "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \ + "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" ; do + if test -e "${dirname}/${i}" ; then + initrd="$i" + break + fi + done + if test -n "${initrd}" ; then + gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2 + else + # "UUID=" magic is parsed by initrds. Since there's no initrd, it can't work here. + linux_root_device_thisversion=${GRUB_DEVICE} + fi + + if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then + linux_entry "${OS}" "${version}" "${xen_version}" simple \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}" + + submenu_indentation="$grub_tab$grub_tab" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + # TRANSLATORS: %s is replaced with an OS name + echo "submenu '$(gettext_printf "Advanced options for %s (with Xen hypervisor)" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {" + echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {" + is_top_level=false + fi + + linux_entry "${OS}" "${version}" "${xen_version}" advanced \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}" + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + linux_entry "${OS}" "${version}" "${xen_version}" recovery \ + "single ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}" + fi + + list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` + done + if [ x"$is_top_level" != xtrue ]; then + echo ' }' + fi + xen_list=`echo $xen_list | tr ' ' '\n' | fgrep -vx "$current_xen" | tr '\n' ' '` +done + +# If at least one kernel was found, then we need to +# add a closing '}' for the submenu command. +if [ x"$is_top_level" != xtrue ]; then + echo '}' +fi + +echo "$title_correction_code" diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in new file mode 100644 index 000000000..515a68c7a --- /dev/null +++ b/util/grub.d/30_os-prober.in @@ -0,0 +1,335 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="@prefix@" +exec_prefix="@exec_prefix@" +datarootdir="@datarootdir@" + +export TEXTDOMAIN=@PACKAGE@ +export TEXTDOMAINDIR="@localedir@" + +. "$pkgdatadir/grub-mkconfig_lib" + +if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then + exit 0 +fi + +if [ -z "`which os-prober 2> /dev/null`" ] || [ -z "`which linux-boot-prober 2> /dev/null`" ] ; then + # missing os-prober and/or linux-boot-prober + exit 0 +fi + +OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`" +if [ -z "${OSPROBED}" ] ; then + # empty os-prober output, nothing doing + exit 0 +fi + +osx_entry() { + if [ x$2 = x32 ]; then + # TRANSLATORS: it refers to kernel architecture (32-bit) + bitstr="$(gettext "(32-bit)")" + else + # TRANSLATORS: it refers to kernel architecture (64-bit) + bitstr="$(gettext "(64-bit)")" + fi + # TRANSLATORS: it refers on the OS residing on device %s + onstr="$(gettext_printf "(on %s)" "${DEVICE}")" + cat << EOF +menuentry '$(echo "${LONGNAME} $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'osprober-xnu-$2-$(grub_get_device_id "${DEVICE}")' { +EOF + save_default_entry | grub_add_tab + prepare_grub_to_access_device ${DEVICE} | grub_add_tab + cat << EOF + load_video + set do_resume=0 + if [ /var/vm/sleepimage -nt10 / ]; then + if xnu_resume /var/vm/sleepimage; then + set do_resume=1 + fi + fi + if [ \$do_resume = 0 ]; then + xnu_uuid ${OSXUUID} uuid + if [ -f /Extra/DSDT.aml ]; then + acpi -e /Extra/DSDT.aml + fi + if [ /kernelcache -nt /System/Library/Extensions ]; then + $1 /kernelcache boot-uuid=\${uuid} rd=*uuid + elif [ -f /System/Library/Kernels/kernel ]; then + $1 /System/Library/Kernels/kernel boot-uuid=\${uuid} rd=*uuid + xnu_kextdir /System/Library/Extensions + else + $1 /mach_kernel boot-uuid=\${uuid} rd=*uuid + if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then + xnu_mkext /System/Library/Extensions.mkext + else + xnu_kextdir /System/Library/Extensions + fi + fi + if [ -f /Extra/Extensions.mkext ]; then + xnu_mkext /Extra/Extensions.mkext + fi + if [ -d /Extra/Extensions ]; then + xnu_kextdir /Extra/Extensions + fi + if [ -f /Extra/devprop.bin ]; then + xnu_devprop_load /Extra/devprop.bin + fi + if [ -f /Extra/splash.jpg ]; then + insmod jpeg + xnu_splash /Extra/splash.jpg + fi + if [ -f /Extra/splash.png ]; then + insmod png + xnu_splash /Extra/splash.png + fi + if [ -f /Extra/splash.tga ]; then + insmod tga + xnu_splash /Extra/splash.tga + fi + fi +} +EOF +} + +used_osprober_linux_ids= + +for OS in ${OSPROBED} ; do + DEVICE="`echo ${OS} | cut -d ':' -f 1`" + LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`" + LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`" + BOOT="`echo ${OS} | cut -d ':' -f 4`" + if UUID="`${grub_probe} --target=fs_uuid --device ${DEVICE%@*}`"; then + EXPUUID="$UUID" + + if [ x"${DEVICE#*@}" != x ] ; then + EXPUUID="${EXPUUID}@${DEVICE#*@}" + fi + + if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then + echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2 + continue + fi + fi + + BTRFS="`echo ${OS} | cut -d ':' -f 5`" + if [ "x$BTRFS" = "xbtrfs" ]; then + BTRFSuuid="`echo ${OS} | cut -d ':' -f 6`" + BTRFSsubvol="`echo ${OS} | cut -d ':' -f 7`" + fi + + if [ -z "${LONGNAME}" ] ; then + LONGNAME="${LABEL}" + fi + + # os-prober returns text string followed by optional counter + CLASS="--class $(echo "${LABEL}" | LC_ALL=C sed 's,[[:digit:]]*$,,' | cut -d' ' -f1 | tr 'A-Z' 'a-z' | LC_ALL=C sed 's,[^[:alnum:]_],_,g')" + + gettext_printf "Found %s on %s\n" "${LONGNAME}" "${DEVICE}" >&2 + + case ${BOOT} in + chain) + + onstr="$(gettext_printf "(on %s)" "${DEVICE}")" + cat << EOF +menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}")' { +EOF + save_default_entry | grub_add_tab + prepare_grub_to_access_device ${DEVICE} | grub_add_tab + + if [ x"`${grub_probe} --device ${DEVICE} --target=partmap`" = xmsdos ]; then + cat << EOF + parttool \${root} hidden- +EOF + fi + + case ${LONGNAME} in + Windows\ Vista*|Windows\ 7*|Windows\ Server\ 2008*) + ;; + *) + cat << EOF + drivemap -s (hd0) \${root} +EOF + ;; + esac + + cat < /dev/null; do + counter=$((counter+1)); + done + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${DEVICE}")" + fi + used_osprober_linux_ids="$used_osprober_linux_ids 'osprober-gnulinux-$LKERNEL-${recovery_params}-$counter-$boot_device_id'" + + if [ -z "${prepare_boot_cache}" ]; then + prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | grub_add_tab)" + fi + + if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then + cat << EOF +menuentry '$(echo "$OS $onstr" | grub_quote)' $CLASS --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-simple-$boot_device_id' { +EOF + save_default_entry | grub_add_tab + printf '%s\n' "${prepare_boot_cache}" + cat << EOF + linux ${LKERNEL} ${LPARAMS} +EOF + if [ -n "${LINITRD}" ] ; then + cat << EOF + initrd ${LINITRD} +EOF + fi + cat << EOF +} +EOF + echo "submenu '$(gettext_printf "Advanced options for %s" "${OS} $onstr" | grub_quote)' \$menuentry_id_option 'osprober-gnulinux-advanced-$boot_device_id' {" + is_top_level=false + fi + title="${LLABEL} $onstr" + cat << EOF + menuentry '$(echo "$title" | grub_quote)' --class gnu-linux --class gnu --class os \$menuentry_id_option 'osprober-gnulinux-$LKERNEL-${recovery_params}-$boot_device_id' { +EOF + save_default_entry | sed -e "s/^/$grub_tab$grub_tab/" + printf '%s\n' "${prepare_boot_cache}" | grub_add_tab + cat << EOF + linux ${LKERNEL} ${LPARAMS} +EOF + if [ -n "${LINITRD}" ] ; then + cat << EOF + initrd ${LINITRD} +EOF + fi + cat << EOF + } +EOF + if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then + replacement_title="$(echo "Advanced options for ${OS} $onstr" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')" + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)" + title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;" + grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")" + fi + done + if [ x"$is_top_level" != xtrue ]; then + echo '}' + fi + echo "$title_correction_code" + ;; + macosx) + if [ "${UUID}" ]; then + OSXUUID="${UUID}" + osx_entry xnu_kernel 32 + osx_entry xnu_kernel64 64 + fi + ;; + hurd) + onstr="$(gettext_printf "(on %s)" "${DEVICE}")" + cat << EOF +menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class hurd --class gnu --class os \$menuentry_id_option 'osprober-gnuhurd-/boot/gnumach.gz-false-$(grub_get_device_id "${DEVICE}")' { +EOF + save_default_entry | grub_add_tab + prepare_grub_to_access_device ${DEVICE} | grub_add_tab + grub_device="`${grub_probe} --device ${DEVICE} --target=drive`" + mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`" + grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`" + case "${grub_fs}" in + *fs) hurd_fs="${grub_fs}" ;; + *) hurd_fs="${grub_fs}fs" ;; + esac + cat << EOF + multiboot /boot/gnumach.gz root=device:${mach_device} + module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\ + --multiboot-command-line='\${kernel-command-line}' \\ + --host-priv-port='\${host-port}' \\ + --device-master-port='\${device-port}' \\ + --exec-server-task='\${exec-task}' -T typed '\${root}' \\ + '\$(task-create)' '\$(task-resume)' + module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)' +} +EOF + ;; + minix) + cat << EOF +menuentry "${LONGNAME} (on ${DEVICE}, Multiboot)" { +EOF + save_default_entry | sed -e "s/^/\t/" + prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/" + cat << EOF + multiboot /boot/image_latest +} +EOF + ;; + *) + # TRANSLATORS: %s is replaced by OS name. + gettext_printf "%s is not yet supported by grub-mkconfig.\n" " ${LONGNAME}" >&2 + ;; + esac +done diff --git a/util/grub.d/40_custom.in b/util/grub.d/40_custom.in new file mode 100644 index 000000000..48068de46 --- /dev/null +++ b/util/grub.d/40_custom.in @@ -0,0 +1,5 @@ +#!/bin/sh +exec tail -n +3 $0 +# This file provides an easy way to add custom menu entries. Simply type the +# menu entries you want to add after this comment. Be careful not to change +# the 'exec tail' line above. diff --git a/util/grub.d/41_custom.in b/util/grub.d/41_custom.in new file mode 100644 index 000000000..fcc21a987 --- /dev/null +++ b/util/grub.d/41_custom.in @@ -0,0 +1,9 @@ +#!/bin/sh +cat <. + +if [ "x$1" = "x" ]; then + echo "Filename required". +fi + +ioreg -lw0 -p IODeviceTree -n efi -r -x |grep device-properties | sed 's/.*.*//;' | xxd -r -p > $1 diff --git a/util/ieee1275/grub-ofpathname.c b/util/ieee1275/grub-ofpathname.c new file mode 100644 index 000000000..8e5d766cb --- /dev/null +++ b/util/ieee1275/grub-ofpathname.c @@ -0,0 +1,54 @@ +/* grub-ofpathname.c - Find OpenBOOT path for a given device */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include + +#include + +#include "progname.h" + +#include + +int main(int argc, char **argv) +{ + char *of_path; + + grub_util_host_init (&argc, &argv); + + if (argc != 2 || strcmp (argv[1], "--help") == 0) + { + printf(_("Usage: %s DEVICE\n"), program_name); + return 1; + } + if (strcmp (argv[1], "--version") == 0) + { + printf ("%s\n", PACKAGE_STRING); + return 1; + } + + of_path = grub_util_devname_to_ofpath (argv[1]); + printf("%s\n", of_path); + + free (of_path); + + return 0; +} diff --git a/util/import_gcry.py b/util/import_gcry.py new file mode 100644 index 000000000..2b3322d3a --- /dev/null +++ b/util/import_gcry.py @@ -0,0 +1,659 @@ +#* +#* GRUB -- GRand Unified Bootloader +#* Copyright (C) 2009 Free Software Foundation, Inc. +#* +#* GRUB is free software: you can redistribute it and/or modify +#* it under the terms of the GNU General Public License as published by +#* the Free Software Foundation, either version 3 of the License, or +#* (at your option) any later version. +#* +#* GRUB is distributed in the hope that it will be useful, +#* but WITHOUT ANY WARRANTY; without even the implied warranty of +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#* GNU General Public License for more details. +#* +#* You should have received a copy of the GNU General Public License +#* along with GRUB. If not, see . +#* + +import re +import sys +import os +import datetime +import codecs + +if len (sys.argv) < 3: + print ("Usage: %s SOURCE DESTINATION" % sys.argv[0]) + exit (0) +indir = sys.argv[1] +outdir = sys.argv[2] + +basedir = os.path.join (outdir, "lib/libgcrypt-grub") +try: + os.makedirs (basedir) +except: + print ("WARNING: %s already exists" % basedir) +cipher_dir_in = os.path.join (indir, "cipher") +cipher_dir_out = os.path.join (basedir, "cipher") +try: + os.makedirs (cipher_dir_out) +except: + print ("WARNING: %s already exists" % cipher_dir_out) +mpidir = os.path.join (basedir, "mpi") +try: + os.makedirs (mpidir) +except: + print ("WARNING: %s already exists" % mpidir) + +srcdir = os.path.join (basedir, "src") +try: + os.makedirs (srcdir) +except: + print ("WARNING: %s already exists" % srcdir) + +cipher_files = sorted (os.listdir (cipher_dir_in)) +conf = codecs.open (os.path.join ("grub-core", "Makefile.gcry.def"), "w", "utf-8") +conf.write ("AutoGen definitions Makefile.tpl;\n\n") +confutil = codecs.open ("Makefile.utilgcry.def", "w", "utf-8") +confutil.write ("AutoGen definitions Makefile.tpl;\n\n") +confutil.write ("library = {\n"); +confutil.write (" name = libgrubgcry.a;\n"); +confutil.write (" cflags = '$(CFLAGS_GCRY)';\n"); +confutil.write (" cppflags = '$(CPPFLAGS_GCRY)';\n"); +confutil.write (" extra_dist = grub-core/lib/libgcrypt-grub/cipher/ChangeLog;\n"); +confutil.write ("\n"); +chlog = "" +modules_sym_md = [] + +# Strictly speaking CRC32/CRC24 work on bytes so this value should be 1 +# But libgcrypt uses 64. Let's keep the value for compatibility. Since +# noone uses CRC24/CRC32 for HMAC this is no problem +mdblocksizes = {"_gcry_digest_spec_crc32" : 64, + "_gcry_digest_spec_crc32_rfc1510" : 64, + "_gcry_digest_spec_crc24_rfc2440" : 64, + "_gcry_digest_spec_md4" : 64, + "_gcry_digest_spec_md5" : 64, + "_gcry_digest_spec_rmd160" : 64, + "_gcry_digest_spec_sha1" : 64, + "_gcry_digest_spec_sha224" : 64, + "_gcry_digest_spec_sha256" : 64, + "_gcry_digest_spec_sha384" : 128, + "_gcry_digest_spec_sha512" : 128, + "_gcry_digest_spec_tiger" : 64, + "_gcry_digest_spec_tiger1" : 64, + "_gcry_digest_spec_tiger2" : 64, + "_gcry_digest_spec_whirlpool" : 64} + +cryptolist = codecs.open (os.path.join (cipher_dir_out, "crypto.lst"), "w", "utf-8") + +# rijndael is the only cipher using aliases. So no need for mangling, just +# hardcode it +cryptolist.write ("RIJNDAEL: gcry_rijndael\n"); +cryptolist.write ("RIJNDAEL192: gcry_rijndael\n"); +cryptolist.write ("RIJNDAEL256: gcry_rijndael\n"); +cryptolist.write ("AES128: gcry_rijndael\n"); +cryptolist.write ("AES-128: gcry_rijndael\n"); +cryptolist.write ("AES-192: gcry_rijndael\n"); +cryptolist.write ("AES-256: gcry_rijndael\n"); + +cryptolist.write ("ADLER32: adler32\n"); +cryptolist.write ("CRC64: crc64\n"); + +for cipher_file in cipher_files: + infile = os.path.join (cipher_dir_in, cipher_file) + outfile = os.path.join (cipher_dir_out, cipher_file) + if cipher_file == "ChangeLog" or cipher_file == "ChangeLog-2011": + continue + chlognew = " * %s" % cipher_file + if re.match ("(Manifest|Makefile\.am|ac\.c|cipher\.c|hash-common\.c|hmac-tests\.c|md\.c|pubkey\.c)$", cipher_file) or cipher_file == "kdf.c" or cipher_file == "elgamal.c" or cipher_file == "primegen.c" or cipher_file == "ecc.c" or cipher_file == "test-getrusage.c": + chlog = "%s%s: Removed\n" % (chlog, chlognew) + continue + # Autogenerated files. Not even worth mentionning in ChangeLog + if re.match ("Makefile\.in$", cipher_file): + continue + nch = False + if re.match (".*\.[ch]$", cipher_file): + isc = re.match (".*\.c$", cipher_file) + f = codecs.open (infile, "r", "utf-8") + fw = codecs.open (outfile, "w", "utf-8") + fw.write ("/* This file was automatically imported with \n") + fw.write (" import_gcry.py. Please don't modify it */\n") + fw.write ("#include \n") + if cipher_file == "camellia.h": + fw.write ("#include \n") + fw.write ("void camellia_setup128(const unsigned char *key, grub_uint32_t *subkey);\n") + fw.write ("void camellia_setup192(const unsigned char *key, grub_uint32_t *subkey);\n") + fw.write ("void camellia_setup256(const unsigned char *key, grub_uint32_t *subkey);\n") + fw.write ("void camellia_encrypt128(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_encrypt192(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_encrypt256(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_decrypt128(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_decrypt192(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("void camellia_decrypt256(const grub_uint32_t *subkey, grub_uint32_t *io);\n") + fw.write ("#define memcpy grub_memcpy\n") + # Whole libgcrypt is distributed under GPLv3+ or compatible + if isc: + fw.write ("GRUB_MOD_LICENSE (\"GPLv3+\");\n") + + ciphernames = [] + mdnames = [] + mdctxsizes = [] + pknames = [] + hold = False + skip = 0 + skip2 = False + ismd = False + mdarg = 0 + ispk = False + iscipher = False + iscryptostart = False + iscomma = False + isglue = False + skip_statement = False + if isc: + modname = cipher_file [0:len(cipher_file) - 2] + if re.match (".*-glue$", modname): + modname = modname.replace ("-glue", "") + isglue = True + modname = "gcry_%s" % modname + for line in f: + line = line + if skip_statement: + if not re.search (";", line) is None: + skip_statement = False + continue + if skip > 0: + if line[0] == "}": + skip = skip - 1 + continue + if skip2: + if not re.search (" *};", line) is None: + skip2 = False + continue + if iscryptostart: + s = re.search (" *\"([A-Z0-9_a-z]*)\"", line) + if not s is None: + sg = s.groups()[0] + cryptolist.write (("%s: %s\n") % (sg, modname)) + iscryptostart = False + if ismd: + spl = line.split (",") + if mdarg + len (spl) > 9 and mdarg <= 9 and ("sizeof" in spl[9-mdarg]): + mdctxsizes.append (spl[9-mdarg].lstrip ().rstrip()) + mdarg = mdarg + len (spl) - 1 + if ismd or iscipher or ispk: + if not re.search (" *};", line) is None: + if not iscomma: + fw.write (" ,\n") + fw.write ("#ifdef GRUB_UTIL\n"); + fw.write (" .modname = \"%s\",\n" % modname); + fw.write ("#endif\n"); + if ismd: + if not (mdname in mdblocksizes): + print ("ERROR: Unknown digest blocksize: %s\n" + % mdname) + exit (1) + fw.write (" .blocksize = %s\n" + % mdblocksizes [mdname]) + ismd = False + mdarg = 0 + iscipher = False + ispk = False + iscomma = not re.search (",$", line) is None + # Used only for selftests. + m = re.match ("(static byte|static unsigned char) (weak_keys_chksum)\[[0-9]*\] =", line) + if not m is None: + skip = 1 + fname = m.groups ()[1] + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + if hold: + hold = False + # We're optimising for size and exclude anything needing good + # randomness. + if not re.match ("(run_selftests|selftest|_gcry_aes_c.._..c|_gcry_[a-z0-9]*_hash_buffer|tripledes_set2keys|do_tripledes_set_extra_info|_gcry_rmd160_mixblock|serpent_test|dsa_generate_ext|test_keys|gen_k|sign|gen_x931_parm_xp|generate_x931|generate_key|dsa_generate|dsa_sign|ecc_sign|generate|generate_fips186|_gcry_register_pk_dsa_progress|_gcry_register_pk_ecc_progress|progress|scanval|ec2os|ecc_generate_ext|ecc_generate|compute_keygrip|ecc_get_param|_gcry_register_pk_dsa_progress|gen_x931_parm_xp|gen_x931_parm_xi|rsa_decrypt|rsa_sign|rsa_generate_ext|rsa_generate|secret|check_exponent|rsa_blind|rsa_unblind|extract_a_from_sexp|curve_free|curve_copy|point_set)", line) is None: + + skip = 1 + if not re.match ("selftest", line) is None and cipher_file == "idea.c": + skip = 3 + + if not re.match ("serpent_test", line) is None: + fw.write ("static const char *serpent_test (void) { return 0; }\n"); + if not re.match ("dsa_generate", line) is None: + fw.write ("#define dsa_generate 0"); + if not re.match ("ecc_generate", line) is None: + fw.write ("#define ecc_generate 0"); + if not re.match ("rsa_generate ", line) is None: + fw.write ("#define rsa_generate 0"); + if not re.match ("rsa_sign", line) is None: + fw.write ("#define rsa_sign 0"); + if not re.match ("rsa_decrypt", line) is None: + fw.write ("#define rsa_decrypt 0"); + if not re.match ("dsa_sign", line) is None: + fw.write ("#define dsa_sign 0"); + if not re.match ("ecc_sign", line) is None: + fw.write ("#define ecc_sign 0"); + fname = re.match ("[a-zA-Z0-9_]*", line).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + else: + fw.write (holdline) + m = re.match ("# *include <(.*)>", line) + if not m is None: + chmsg = "Removed including of %s" % m.groups ()[0] + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s: %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("gcry_cipher_spec_t", line) + if isc and not m is None: + assert (not ismd) + assert (not ispk) + assert (not iscipher) + assert (not iscryptostart) + ciphername = line [len ("gcry_cipher_spec_t"):].strip () + ciphername = re.match("[a-zA-Z0-9_]*",ciphername).group () + ciphernames.append (ciphername) + iscipher = True + iscryptostart = True + + m = re.match ("gcry_pk_spec_t", line) + if isc and not m is None: + assert (not ismd) + assert (not ispk) + assert (not iscipher) + assert (not iscryptostart) + pkname = line [len ("gcry_pk_spec_t"):].strip () + pkname = re.match("[a-zA-Z0-9_]*",pkname).group () + pknames.append (pkname) + ispk = True + iscryptostart = True + + m = re.match ("gcry_md_spec_t", line) + if isc and not m is None: + assert (not ismd) + assert (not ispk) + assert (not iscipher) + assert (not iscryptostart) + mdname = line [len ("gcry_md_spec_t"):].strip () + mdname = re.match("[a-zA-Z0-9_]*",mdname).group () + mdnames.append (mdname) + ismd = True + mdarg = 0 + iscryptostart = True + m = re.match ("static const char \*selftest.*;$", line) + if not m is None: + fname = line[len ("static const char \*"):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed declaration." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static gcry_mpi_t gen_k .*;$", line) + if not m is None: + chmsg = "(gen_k): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static (int|void) test_keys .*;$", line) + if not m is None: + chmsg = "(test_keys): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static void secret .*;$", line) + if not m is None: + chmsg = "(secret): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static void \(\*progress_cb\).*;$", line) + if not m is None: + chmsg = "(progress_cb): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("static void \*progress_cb_data.*;$", line) + if not m is None: + chmsg = "(progress_cb): Removed declaration." + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + + m = re.match ("(static const char( |)\*|static gpg_err_code_t|void|static int|static gcry_err_code_t|static gcry_mpi_t|static void|void|static elliptic_curve_t) *$", line) + if not m is None: + hold = True + holdline = line + continue + m = re.match ("static int tripledes_set2keys \(.*\);", line) + if not m is None: + continue + m = re.match ("static int tripledes_set3keys \(.*\);", line) + if not m is None: + continue + m = re.match ("static int tripledes_set2keys \(", line) + if not m is None: + skip_statement = True + continue + m = re.match ("static int tripledes_set3keys \(", line) + if not m is None: + skip_statement = True + continue + m = re.match ("static const char sample_secret_key", line) + if not m is None: + skip_statement = True + continue + m = re.match ("static const char sample_public_key", line) + if not m is None: + skip_statement = True + continue + m = re.match ("static void sign|static gpg_err_code_t sign|static gpg_err_code_t generate", + line) + if not m is None: + skip_statement = True + continue + + m = re.match ("cipher_extra_spec_t", line) + if isc and not m is None: + skip2 = True + fname = line[len ("cipher_extra_spec_t "):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("pk_extra_spec_t", line) + if isc and not m is None: + skip2 = True + fname = line[len ("pk_extra_spec_t "):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + m = re.match ("md_extra_spec_t", line) + if isc and not m is None: + skip2 = True + fname = line[len ("md_extra_spec_t "):] + fname = re.match ("[a-zA-Z0-9_]*", fname).group () + chmsg = "(%s): Removed." % fname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s %s" % (chlognew, chmsg) + nch = True + continue + fw.write (line) + if len (ciphernames) > 0 or len (mdnames) > 0 or len (pknames) > 0: + if isglue: + modfiles = "lib/libgcrypt-grub/cipher/%s lib/libgcrypt-grub/cipher/%s" \ + % (cipher_file, cipher_file.replace ("-glue.c", ".c")) + else: + modfiles = "lib/libgcrypt-grub/cipher/%s" % cipher_file + if len (ciphernames) > 0 or len (mdnames) > 0: + modules_sym_md.append (modname) + chmsg = "(GRUB_MOD_INIT(%s)): New function\n" % modname + if nch: + chlognew = "%s\n %s" % (chlognew, chmsg) + else: + chlognew = "%s%s" % (chlognew, chmsg) + nch = True + fw.write ("\n\nGRUB_MOD_INIT(%s)\n" % modname) + fw.write ("{\n") + for ciphername in ciphernames: + chmsg = "Register cipher %s" % ciphername + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_cipher_register (&%s);\n" % ciphername) + for ctxsize in mdctxsizes: + fw.write (" COMPILE_TIME_ASSERT(%s <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE);\n" % ctxsize) + for mdname in mdnames: + chmsg = "Register digest %s" % mdname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_md_register (&%s);\n" % mdname) + for pkname in pknames: + chmsg = "Register pk %s" % mdname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_crypto_pk_%s = &%s;\n" + % (pkname.replace ("_gcry_pubkey_spec_", ""), pkname)) + fw.write ("}") + chmsg = "(GRUB_MOD_FINI(%s)): New function\n" % modname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write ("\n\nGRUB_MOD_FINI(%s)\n" % modname) + fw.write ("{\n") + for ciphername in ciphernames: + chmsg = "Unregister cipher %s" % ciphername + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_cipher_unregister (&%s);\n" % ciphername) + for mdname in mdnames: + chmsg = "Unregister MD %s" % mdname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_md_unregister (&%s);\n" % mdname) + for pkname in pknames: + chmsg = "Unregister pk %s" % mdname + chlognew = "%s\n %s" % (chlognew, chmsg) + fw.write (" grub_crypto_pk_%s = 0;\n" + % (pkname.replace ("_gcry_pubkey_spec_", ""))) + fw.write ("}\n") + conf.write ("module = {\n") + conf.write (" name = %s;\n" % modname) + for src in modfiles.split(): + conf.write (" common = %s;\n" % src) + if len (ciphernames) > 0 or len (mdnames) > 0: + confutil.write (" common = grub-core/%s;\n" % src) + if modname == "gcry_ecc": + conf.write (" common = lib/libgcrypt-grub/mpi/ec.c;\n") + conf.write (" cflags = '$(CFLAGS_GCRY) -Wno-redundant-decls -Wno-sign-compare';\n") + elif modname == "gcry_rijndael" or modname == "gcry_md4" or modname == "gcry_md5" or modname == "gcry_rmd160" or modname == "gcry_sha1" or modname == "gcry_sha256" or modname == "gcry_sha512" or modname == "gcry_tiger": + # Alignment checked by hand + conf.write (" cflags = '$(CFLAGS_GCRY) -Wno-cast-align';\n"); + else: + conf.write (" cflags = '$(CFLAGS_GCRY)';\n"); + conf.write (" cppflags = '$(CPPFLAGS_GCRY)';\n"); + conf.write ("};\n\n") + f.close () + fw.close () + if nch: + chlog = "%s%s\n" % (chlog, chlognew) + elif isc and cipher_file != "camellia.c": + print ("WARNING: C file isn't a module: %s" % cipher_file) + f.close () + fw.close () + os.remove (outfile) + chlog = "%s\n * %s: Removed" % (chlog, cipher_file) + continue + chlog = "%s%sSkipped unknown file\n" % (chlog, chlognew) + print ("WARNING: unknown file %s" % cipher_file) + +cryptolist.close () + +for src in sorted (os.listdir (os.path.join (indir, "src"))): + if src == "versioninfo.rc.in" or src == "ath.c" or src == "ChangeLog-2011" \ + or src == "dumpsexp.c" or src == "fips.c" or src == "gcrypt.h.in" \ + or src == "gcryptrnd.c"or src == "getrandom.c" \ + or src == "global.c" or src == "hmac256.c" \ + or src == "hwfeatures.c" or src == "libgcrypt-config.in" \ + or src == "libgcrypt.def" or src == "libgcrypt.m4" \ + or src == "libgcrypt.vers" or src == "Makefile.am" \ + or src == "Manifest" or src == "misc.c" \ + or src == "missing-string.c" or src == "module.c" \ + or src == "secmem.c" or src == "sexp.c" \ + or src == "stdmem.c" or src == "visibility.c": + continue + outfile = os.path.join (basedir, "src", src) + infile = os.path.join (indir, "src", src) + if os.path.isdir (infile): + continue + fw = codecs.open (outfile, "w", "utf-8") + if src == "gcrypt-module.h": + fw.close () + continue + if src == "visibility.h": + fw.write ("# include \n") + fw.close () + continue + f = codecs.open (infile, "r", "utf-8") + if src == "types.h": + fw.write (f.read ().replace ("float f;", "").replace ("double g;", "")) + f.close () + fw.close () + continue + + if src == "g10lib.h": + fw.write (f.read ().replace ("(printf,f,a)", "(__printf__,f,a)")) + f.close () + fw.close () + continue + + fw.write (f.read ()) + f.close () + fw.close () + +for src in sorted (os.listdir (os.path.join (indir, "mpi"))): + if src == "config.links" or src == "ChangeLog-2011" \ + or src == "mpi-scan.c" or src == "Manifest" \ + or src == "Makefile.am": + continue + infile = os.path.join (indir, "mpi", src) + outfile = os.path.join (basedir, "mpi", src) + if os.path.isdir (infile): + continue + f = codecs.open (infile, "r", "utf-8") + fw = codecs.open (outfile, "w", "utf-8") + fw.write ("/* This file was automatically imported with \n") + fw.write (" import_gcry.py. Please don't modify it */\n") + hold = False + skip = 0 + for line in f: + if skip > 0: + if line[0] == "}": + skip = skip - 1 + continue + if hold: + hold = False + # We're optimising for size and exclude anything needing good + # randomness. + if not re.match ("(_gcry_mpi_get_hw_config|gcry_mpi_randomize)", line) is None: + skip = 1 + continue + else: + fw.write (holdline) + m = re.match ("(const char( |)\*|void) *$", line) + if not m is None: + hold = True + holdline = line + continue + m = re.match ("#include \"mod-source-info\.h\"", line) + if not m is None: + continue + fw.write (line) + +chlog = "%s * crypto.lst: New file.\n" % chlog + +outfile = os.path.join (cipher_dir_out, "types.h") +fw=codecs.open (outfile, "w", "utf-8") +fw.write ("#include \n") +fw.write ("#include \n") +chlog = "%s * types.h: New file.\n" % chlog +fw.close () + +outfile = os.path.join (cipher_dir_out, "memory.h") +fw=codecs.open (outfile, "w", "utf-8") +fw.write ("#include \n") +chlog = "%s * memory.h: New file.\n" % chlog +fw.close () + + +outfile = os.path.join (cipher_dir_out, "cipher.h") +fw=codecs.open (outfile, "w", "utf-8") +fw.write ("#include \n") +fw.write ("#include \n") +chlog = "%s * cipher.h: Likewise.\n" % chlog +fw.close () + +outfile = os.path.join (cipher_dir_out, "g10lib.h") +fw=codecs.open (outfile, "w", "utf-8") +fw.write ("#include \n") +chlog = "%s * g10lib.h: Likewise.\n" % chlog +fw.close () + +infile = os.path.join (cipher_dir_in, "ChangeLog") +outfile = os.path.join (cipher_dir_out, "ChangeLog") + +conf.close (); + +initfile = codecs.open (os.path.join (cipher_dir_out, "init.c"), "w", "utf-8") +initfile.write ("#include \n") +for module in modules_sym_md: + initfile.write ("extern void grub_%s_init (void);\n" % module) + initfile.write ("extern void grub_%s_fini (void);\n" % module) +initfile.write ("\n") +initfile.write ("void\n") +initfile.write ("grub_gcry_init_all (void)\n") +initfile.write ("{\n") +for module in modules_sym_md: + initfile.write (" grub_%s_init ();\n" % module) +initfile.write ("}\n") +initfile.write ("\n") +initfile.write ("void\n") +initfile.write ("grub_gcry_fini_all (void)\n") +initfile.write ("{\n") +for module in modules_sym_md: + initfile.write (" grub_%s_fini ();\n" % module) +initfile.write ("}\n") +initfile.close () + +confutil.write (" common = grub-core/lib/libgcrypt-grub/cipher/init.c;\n") +confutil.write ("};\n"); +confutil.close (); + + +f=codecs.open (infile, "r", "utf-8") +fw=codecs.open (outfile, "w", "utf-8") +dt = datetime.date.today () +fw.write ("%04d-%02d-%02d Automatic import tool\n" % \ + (dt.year,dt.month, dt.day)) +fw.write ("\n") +fw.write (" Imported ciphers to GRUB\n") +fw.write ("\n") +fw.write (chlog) +fw.write ("\n") +for line in f: + fw.write (line) +f.close () +fw.close () diff --git a/util/import_gcrypth.sed b/util/import_gcrypth.sed new file mode 100644 index 000000000..fe6d1a072 --- /dev/null +++ b/util/import_gcrypth.sed @@ -0,0 +1,18 @@ +/^#@INSERT_SYS_SELECT_H@/ d +/^@FALLBACK_SOCKLEN_T@/ d +/^# *include / d +/^# *include / d +/^# *include / d +/^# *include / d +/^# *include / d +/^# *include / d +/^# *include / d +/^ typedef long ssize_t;/ d +/^ typedef int pid_t;/ d +/^# *include / s,#include ,#include , +/^typedef gpg_error_t gcry_error_t;/ d +/^typedef gpg_err_code_t gcry_err_code_t;/ d +/^typedef struct gcry_mpi \*gcry_mpi_t;/ d +/^struct gcry_thread_cbs/ d +s,_gcry_mpi_invm,gcry_mpi_invm,g +p \ No newline at end of file diff --git a/util/import_unicode.py b/util/import_unicode.py new file mode 100644 index 000000000..08f80591e --- /dev/null +++ b/util/import_unicode.py @@ -0,0 +1,193 @@ +#* +#* GRUB -- GRand Unified Bootloader +#* Copyright (C) 2010 Free Software Foundation, Inc. +#* +#* GRUB is free software: you can redistribute it and/or modify +#* it under the terms of the GNU General Public License as published by +#* the Free Software Foundation, either version 3 of the License, or +#* (at your option) any later version. +#* +#* GRUB is distributed in the hope that it will be useful, +#* but WITHOUT ANY WARRANTY; without even the implied warranty of +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#* GNU General Public License for more details. +#* +#* You should have received a copy of the GNU General Public License +#* along with GRUB. If not, see . +#* + +import re +import sys + +if len (sys.argv) < 3: + print ("Usage: %s SOURCE DESTINATION" % sys.argv[0]) + exit (0) +infile = open (sys.argv[3], "r") +joining = {} +for line in infile: + line = re.sub ("#.*$", "", line) + line = line.replace ("\n", "") + line = line.replace (" ", "") + if len (line) == 0 or line[0] == '\n': + continue + sp = line.split (";") + curcode = int (sp[0], 16) + if sp[2] == "U": + joining[curcode] = "NONJOINING" + elif sp[2] == "L": + joining[curcode] = "LEFT" + elif sp[2] == "R": + joining[curcode] = "RIGHT" + elif sp[2] == "D": + joining[curcode] = "DUAL" + elif sp[2] == "C": + joining[curcode] = "CAUSING" + else: + print ("Unknown joining type '%s'" % sp[2]) + exit (1) +infile.close () + +infile = open (sys.argv[1], "r") +outfile = open (sys.argv[4], "w") +outfile.write ("#include \n") +outfile.write ("\n") +outfile.write ("struct grub_unicode_compact_range grub_unicode_compact[] = {\n") + +begincode = -2 +lastcode = -2 +lastbiditype = "X" +lastmirrortype = False +lastcombtype = -1 +arabicsubst = {} +for line in infile: + sp = line.split (";") + curcode = int (sp[0], 16) + curcombtype = int (sp[3], 10) + curbiditype = sp[4] + curmirrortype = (sp[9] == "Y") + if curcombtype <= 255 and curcombtype >= 253: + print ("UnicodeData.txt uses combination type %d. Conflict." \ + % curcombtype) + raise + if sp[2] != "Lu" and sp[2] != "Ll" and sp[2] != "Lt" and sp[2] != "Lm" \ + and sp[2] != "Lo"\ + and sp[2] != "Me" and sp[2] != "Mc" and sp[2] != "Mn" \ + and sp[2] != "Nd" and sp[2] != "Nl" and sp[2] != "No" \ + and sp[2] != "Pc" and sp[2] != "Pd" and sp[2] != "Ps" \ + and sp[2] != "Pe" and sp[2] != "Pi" and sp[2] != "Pf" \ + and sp[2] != "Po" \ + and sp[2] != "Sm" and sp[2] != "Sc" and sp[2] != "Sk" \ + and sp[2] != "So"\ + and sp[2] != "Zs" and sp[2] != "Zl" and sp[2] != "Zp" \ + and sp[2] != "Cc" and sp[2] != "Cf" and sp[2] != "Cs" \ + and sp[2] != "Co": + print ("WARNING: Unknown type %s" % sp[2]) + if curcombtype == 0 and sp[2] == "Me": + curcombtype = 253 + if curcombtype == 0 and sp[2] == "Mc": + curcombtype = 254 + if curcombtype == 0 and sp[2] == "Mn": + curcombtype = 255 + if (curcombtype >= 2 and curcombtype <= 6) \ + or (curcombtype >= 37 and curcombtype != 84 and curcombtype != 91 and curcombtype != 103 and curcombtype != 107 and curcombtype != 118 and curcombtype != 122 and curcombtype != 129 and curcombtype != 130 and curcombtype != 132 and curcombtype != 202 and \ + curcombtype != 214 and curcombtype != 216 and \ + curcombtype != 218 and curcombtype != 220 and \ + curcombtype != 222 and curcombtype != 224 and curcombtype != 226 and curcombtype != 228 and \ + curcombtype != 230 and curcombtype != 232 and curcombtype != 233 and \ + curcombtype != 234 and \ + curcombtype != 240 and curcombtype != 253 and \ + curcombtype != 254 and curcombtype != 255): + print ("WARNING: Unknown combining type %d" % curcombtype) + if curcode in joining: + curjoin = joining[curcode] + elif sp[2] == "Me" or sp[2] == "Mn" or sp[2] == "Cf": + curjoin = "TRANSPARENT" + else: + curjoin = "NONJOINING" + if sp[1].startswith ("ARABIC LETTER "): + arabname = sp[1][len ("ARABIC LETTER "):] + form = 0 + if arabname.endswith (" ISOLATED FORM"): + arabname = arabname[0:len (arabname) - len (" ISOLATED FORM")] + form = 1 + if arabname.endswith (" FINAL FORM"): + arabname = arabname[0:len (arabname) - len (" FINAL FORM")] + form = 2 + if arabname.endswith (" MEDIAL FORM"): + arabname = arabname[0:len (arabname) - len (" MEDIAL FORM")] + form = 3 + if arabname.endswith (" INITIAL FORM"): + arabname = arabname[0:len (arabname) - len (" INITIAL FORM")] + form = 4 + if arabname not in arabicsubst: + arabicsubst[arabname]={} + arabicsubst[arabname][form] = curcode; + if form == 0: + arabicsubst[arabname]['join'] = curjoin + if lastcode + 1 != curcode or curbiditype != lastbiditype \ + or curcombtype != lastcombtype or curmirrortype != lastmirrortype \ + or curjoin != lastjoin: + if begincode != -2 and (lastbiditype != "L" or lastcombtype != 0 or \ + lastmirrortype): + outfile.write (("{0x%x, 0x%x, GRUB_BIDI_TYPE_%s, %d, %d, GRUB_JOIN_TYPE_%s},\n" \ + % (begincode, lastcode - begincode + 1, \ + lastbiditype, \ + lastcombtype, lastmirrortype, \ + lastjoin))) + if lastcode - begincode + 1 >= 0x200: + print ("Too long range") + raise + begincode = curcode + lastcode = curcode + lastjoin = curjoin + lastbiditype = curbiditype + lastcombtype = curcombtype + lastmirrortype = curmirrortype +if lastbiditype != "L" or lastcombtype != 0 or lastmirrortype: + outfile.write (("{0x%x, 0x%x, GRUB_BIDI_TYPE_%s, %d, %d, GRUB_JOIN_TYPE_%s},\n" \ + % (begincode, lastcode, lastbiditype, lastcombtype, \ + lastmirrortype, lastjoin))) +outfile.write ("{0, 0, 0, 0, 0, 0},\n") + +outfile.write ("};\n") + +infile.close () + +infile = open (sys.argv[2], "r") + +outfile.write ("struct grub_unicode_bidi_pair grub_unicode_bidi_pairs[] = {\n") + +for line in infile: + line = re.sub ("#.*$", "", line) + line = line.replace ("\n", "") + line = line.replace (" ", "") + if len (line) == 0 or line[0] == '\n': + continue + sp = line.split (";") + code1 = int (sp[0], 16) + code2 = int (sp[1], 16) + outfile.write ("{0x%x, 0x%x},\n" % (code1, code2)) +outfile.write ("{0, 0},\n") +outfile.write ("};\n") + +infile.close () + +outfile.write ("struct grub_unicode_arabic_shape grub_unicode_arabic_shapes[] = {\n ") + +for x in arabicsubst: + try: + if arabicsubst[x]['join'] == "DUAL": + outfile.write ("{0x%x, 0x%x, 0x%x, 0x%x, 0x%x},\n " % (arabicsubst[x][0], arabicsubst[x][1], arabicsubst[x][2], arabicsubst[x][3], arabicsubst[x][4])) + elif arabicsubst[x]['join'] == "RIGHT": + outfile.write ("{0x%x, 0x%x, 0x%x, 0x%x, 0x%x},\n " % (arabicsubst[x][0], arabicsubst[x][1], arabicsubst[x][2], 0, 0)) + elif arabicsubst[x]['join'] == "LEFT": + outfile.write ("{0x%x, 0x%x, 0x%x, 0x%x, 0x%x},\n " % (arabicsubst[x][0], arabicsubst[x][1], 0, 0, arabicsubst[x][4])) + except: + pass + +outfile.write ("{0, 0, 0, 0, 0},\n") +outfile.write ("};\n") + + +outfile.close () + diff --git a/util/misc.c b/util/misc.c new file mode 100644 index 000000000..d545212d9 --- /dev/null +++ b/util/misc.c @@ -0,0 +1,225 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ENABLE_RELOCATABLE 0 +#ifdef GRUB_BUILD +const char *program_name = GRUB_BUILD_PROGRAM_NAME; +#else +#include "progname.h" +#endif + +#ifdef GRUB_UTIL +int +grub_err_printf (const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start (ap, fmt); + ret = vfprintf (stderr, fmt, ap); + va_end (ap); + + return ret; +} +#endif + +char * +grub_util_get_path (const char *dir, const char *file) +{ + char *path; + + path = (char *) xmalloc (strlen (dir) + 1 + strlen (file) + 1); + sprintf (path, "%s/%s", dir, file); + return path; +} + +char * +grub_util_read_image (const char *path) +{ + char *img; + FILE *fp; + size_t size; + + grub_util_info ("reading %s", path); + + size = grub_util_get_image_size (path); + img = (char *) xmalloc (size); + + fp = grub_util_fopen (path, "rb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), path, + strerror (errno)); + + if (fread (img, 1, size, fp) != size) + grub_util_error (_("cannot read `%s': %s"), path, + strerror (errno)); + + fclose (fp); + + return img; +} + +void +grub_util_write_image_at (const void *img, size_t size, off_t offset, FILE *out, + const char *name) +{ + grub_util_info ("writing 0x%" GRUB_HOST_PRIxLONG_LONG " bytes at offset 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) size, (unsigned long long) offset); + if (fseeko (out, offset, SEEK_SET) == -1) + grub_util_error (_("cannot seek `%s': %s"), + name, strerror (errno)); + if (fwrite (img, 1, size, out) != size) + grub_util_error (_("cannot write to `%s': %s"), + name, strerror (errno)); +} + +void +grub_util_write_image (const char *img, size_t size, FILE *out, + const char *name) +{ + grub_util_info ("writing 0x%" GRUB_HOST_PRIxLONG_LONG " bytes", (unsigned long long) size); + if (fwrite (img, 1, size, out) != size) + { + if (!name) + grub_util_error (_("cannot write to the stdout: %s"), + strerror (errno)); + else + grub_util_error (_("cannot write to `%s': %s"), + name, strerror (errno)); + } +} + +grub_err_t +grub_script_execute_cmdline (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdlist (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdif (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdfor (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute_cmdwhile (struct grub_script_cmd *cmd __attribute__ ((unused))) +{ + return 0; +} + +grub_err_t +grub_script_execute (struct grub_script *script) +{ + if (script == 0 || script->cmd == 0) + return 0; + + return script->cmd->exec (script->cmd); +} + +int +grub_getkey (void) +{ + return -1; +} + +void +grub_refresh (void) +{ + fflush (stdout); +} + +static void +grub_xputs_real (const char *str) +{ + fputs (str, stdout); +} + +void (*grub_xputs) (const char *str) = grub_xputs_real; + +int +grub_dl_ref (grub_dl_t mod) +{ + (void) mod; + return 0; +} + +int +grub_dl_unref (grub_dl_t mod) +{ + (void) mod; + return 0; +} + +/* Some functions that we don't use. */ +void +grub_mm_init_region (void *addr __attribute__ ((unused)), + grub_size_t size __attribute__ ((unused))) +{ +} + +void +grub_register_exported_symbols (void) +{ +} + +/* Used in comparison of arrays of strings with qsort */ +int +grub_qsort_strcmp (const void *p1, const void *p2) +{ + return strcmp(*(char *const *)p1, *(char *const *)p2); +} + diff --git a/util/mkimage.c b/util/mkimage.c new file mode 100644 index 000000000..9ad4cfe42 --- /dev/null +++ b/util/mkimage.c @@ -0,0 +1,1655 @@ +/* grub-mkimage.c - make a bootable image */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ALIGN_ADDR(x) (ALIGN_UP((x), image_target->voidp_sizeof)) + +#ifdef USE_LIBLZMA +#include +#endif + +#pragma GCC diagnostic ignored "-Wcast-align" + +#define TARGET_NO_FIELD 0xffffffff + +/* use 2015-01-01T00:00:00+0000 as a stock timestamp */ +#define STABLE_EMBEDDING_TIMESTAMP 1420070400 + +#define EFI32_HEADER_SIZE ALIGN_UP (GRUB_PE32_MSDOS_STUB_SIZE \ + + GRUB_PE32_SIGNATURE_SIZE \ + + sizeof (struct grub_pe32_coff_header) \ + + sizeof (struct grub_pe32_optional_header) \ + + 4 * sizeof (struct grub_pe32_section_table), \ + GRUB_PE32_SECTION_ALIGNMENT) + +#define EFI64_HEADER_SIZE ALIGN_UP (GRUB_PE32_MSDOS_STUB_SIZE \ + + GRUB_PE32_SIGNATURE_SIZE \ + + sizeof (struct grub_pe32_coff_header) \ + + sizeof (struct grub_pe64_optional_header) \ + + 4 * sizeof (struct grub_pe32_section_table), \ + GRUB_PE32_SECTION_ALIGNMENT) + +static const struct grub_install_image_target_desc image_targets[] = + { + { + .dirname = "i386-coreboot", + .names = { "i386-coreboot", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_COREBOOT, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .reloc_table_offset = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_COREBOOT_LINK_ADDR, + .elf_target = EM_386, + .link_align = 4, + .mod_gap = GRUB_KERNEL_I386_COREBOOT_MOD_GAP, + .mod_align = GRUB_KERNEL_I386_COREBOOT_MOD_ALIGN + }, + { + .dirname = "i386-multiboot", + .names = { "i386-multiboot", NULL}, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_COREBOOT, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_COREBOOT_LINK_ADDR, + .elf_target = EM_386, + .link_align = 4, + .mod_gap = GRUB_KERNEL_I386_COREBOOT_MOD_GAP, + .mod_align = GRUB_KERNEL_I386_COREBOOT_MOD_ALIGN + }, + { + .dirname = "i386-pc", + .names = { "i386-pc", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_I386_PC, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_I386_PC_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_I386_PC_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_PC_LINK_ADDR, + .default_compression = GRUB_COMPRESSION_LZMA + }, + { + .dirname = "i386-pc", + .names = { "i386-pc-pxe", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_I386_PC_PXE, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_I386_PC_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_I386_PC_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_PC_LINK_ADDR, + .default_compression = GRUB_COMPRESSION_LZMA + }, + { + .dirname = "i386-pc", + .names = { "i386-pc-eltorito", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_I386_PC_ELTORITO, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_I386_PC_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_I386_PC_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_PC_LINK_ADDR, + .default_compression = GRUB_COMPRESSION_LZMA + }, + { + .dirname = "i386-efi", + .names = { "i386-efi", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_EFI, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = GRUB_PE32_SECTION_ALIGNMENT, + .vaddr_offset = EFI32_HEADER_SIZE, + .pe_target = GRUB_PE32_MACHINE_I386, + .elf_target = EM_386, + }, + { + .dirname = "i386-ieee1275", + .names = { "i386-ieee1275", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_I386_IEEE1275, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_IEEE1275_LINK_ADDR, + .elf_target = EM_386, + .mod_gap = GRUB_KERNEL_I386_IEEE1275_MOD_GAP, + .mod_align = GRUB_KERNEL_I386_IEEE1275_MOD_ALIGN, + .link_align = 4, + }, + { + .dirname = "i386-qemu", + .names = { "i386-qemu", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_QEMU, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_I386_QEMU_LINK_ADDR + }, + { + .dirname = "x86_64-efi", + .names = { "x86_64-efi", NULL }, + .voidp_sizeof = 8, + .bigendian = 0, + .id = IMAGE_EFI, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = GRUB_PE32_SECTION_ALIGNMENT, + .vaddr_offset = EFI64_HEADER_SIZE, + .pe_target = GRUB_PE32_MACHINE_X86_64, + .elf_target = EM_X86_64, + }, + { + .dirname = "i386-xen", + .names = { "i386-xen", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_XEN, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = 0, + .elf_target = EM_386, + .mod_gap = GRUB_KERNEL_I386_XEN_MOD_GAP, + .mod_align = GRUB_KERNEL_I386_XEN_MOD_ALIGN, + .link_align = 4 + }, + { + .dirname = "x86_64-xen", + .names = { "x86_64-xen", NULL }, + .voidp_sizeof = 8, + .bigendian = 0, + .id = IMAGE_XEN, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = 0, + .elf_target = EM_X86_64, + .mod_gap = GRUB_KERNEL_X86_64_XEN_MOD_GAP, + .mod_align = GRUB_KERNEL_X86_64_XEN_MOD_ALIGN, + .link_align = 8 + }, + { + .dirname = "mipsel-loongson", + .names = { "mipsel-yeeloong-flash", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_YEELOONG_FLASH, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_LOONGSON_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_LOONGSON_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_LOONGSON_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "mipsel-loongson", + .names = { "mipsel-fuloong2f-flash", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_FULOONG2F_FLASH, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_LOONGSON_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_LOONGSON_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_LOONGSON_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "mipsel-loongson", + .names = { "mipsel-loongson-elf", "mipsel-yeeloong-elf", + "mipsel-fuloong2f-elf", "mipsel-fuloong2e-elf", + "mipsel-fuloong-elf", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_LOONGSON_ELF, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_LOONGSON_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_LOONGSON_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_LOONGSON_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "powerpc-ieee1275", + .names = { "powerpc-ieee1275", NULL }, + .voidp_sizeof = 4, + .bigendian = 1, + .id = IMAGE_PPC, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_POWERPC_IEEE1275_LINK_ADDR, + .elf_target = EM_PPC, + .mod_gap = GRUB_KERNEL_POWERPC_IEEE1275_MOD_GAP, + .mod_align = GRUB_KERNEL_POWERPC_IEEE1275_MOD_ALIGN, + .link_align = 4 + }, + { + .dirname = "sparc64-ieee1275", + .names = { "sparc64-ieee1275-raw", NULL }, + .voidp_sizeof = 8, + .bigendian = 1, + .id = IMAGE_SPARC64_RAW, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = GRUB_KERNEL_SPARC64_IEEE1275_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_SPARC64_IEEE1275_LINK_ADDR, + .mod_align = GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN, + }, + { + .dirname = "sparc64-ieee1275", + .names = { "sparc64-ieee1275-cdcore", NULL }, + .voidp_sizeof = 8, + .bigendian = 1, + .id = IMAGE_SPARC64_CDCORE, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = GRUB_KERNEL_SPARC64_IEEE1275_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_SPARC64_IEEE1275_LINK_ADDR, + .mod_align = GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN, + }, + { + .dirname = "sparc64-ieee1275", + .names = { "sparc64-ieee1275-aout", NULL }, + .voidp_sizeof = 8, + .bigendian = 1, + .id = IMAGE_SPARC64_AOUT, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = GRUB_KERNEL_SPARC64_IEEE1275_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_SPARC64_IEEE1275_LINK_ADDR, + .mod_align = GRUB_KERNEL_SPARC64_IEEE1275_MOD_ALIGN, + }, + { + .dirname = "ia64-efi", + .names = {"ia64-efi", NULL}, + .voidp_sizeof = 8, + .bigendian = 0, + .id = IMAGE_EFI, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = GRUB_PE32_SECTION_ALIGNMENT, + .vaddr_offset = EFI64_HEADER_SIZE, + .pe_target = GRUB_PE32_MACHINE_IA64, + .elf_target = EM_IA_64, + }, + { + .dirname = "mips-arc", + .names = {"mips-arc", NULL}, + .voidp_sizeof = 4, + .bigendian = 1, + .id = IMAGE_MIPS_ARC, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_ARC_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_ARC_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_ARC_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "mipsel-arc", + .names = {"mipsel-arc", NULL}, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_MIPS_ARC, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_ARC_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPSEL_ARC_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_ARC_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "mipsel-qemu_mips", + .names = { "mipsel-qemu_mips-elf", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_LOONGSON_ELF, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_QEMU_MIPS_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "mips-qemu_mips", + .names = { "mips-qemu_mips-flash", NULL }, + .voidp_sizeof = 4, + .bigendian = 1, + .id = IMAGE_QEMU_MIPS_FLASH, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_QEMU_MIPS_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "mipsel-qemu_mips", + .names = { "mipsel-qemu_mips-flash", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_QEMU_MIPS_FLASH, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_QEMU_MIPS_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "mips-qemu_mips", + .names = { "mips-qemu_mips-elf", NULL }, + .voidp_sizeof = 4, + .bigendian = 1, + .id = IMAGE_LOONGSON_ELF, + .flags = PLATFORM_FLAGS_DECOMPRESSORS, + .total_module_size = GRUB_KERNEL_MIPS_QEMU_MIPS_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_COMPRESSED_SIZE, + .decompressor_uncompressed_size = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_SIZE, + .decompressor_uncompressed_addr = GRUB_DECOMPRESSOR_MIPS_LOONGSON_UNCOMPRESSED_ADDR, + .section_align = 1, + .vaddr_offset = 0, + .link_addr = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ADDR, + .elf_target = EM_MIPS, + .link_align = GRUB_KERNEL_MIPS_QEMU_MIPS_LINK_ALIGN, + .default_compression = GRUB_COMPRESSION_NONE + }, + { + .dirname = "arm-uboot", + .names = { "arm-uboot", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_UBOOT, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = GRUB_KERNEL_ARM_UBOOT_TOTAL_MODULE_SIZE, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN, + .vaddr_offset = 0, + .elf_target = EM_ARM, + .mod_gap = GRUB_KERNEL_ARM_UBOOT_MOD_GAP, + .mod_align = GRUB_KERNEL_ARM_UBOOT_MOD_ALIGN, + .link_align = 4 + }, + { + .dirname = "arm-efi", + .names = { "arm-efi", NULL }, + .voidp_sizeof = 4, + .bigendian = 0, + .id = IMAGE_EFI, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = GRUB_PE32_SECTION_ALIGNMENT, + .vaddr_offset = ALIGN_UP (GRUB_PE32_MSDOS_STUB_SIZE + + GRUB_PE32_SIGNATURE_SIZE + + sizeof (struct grub_pe32_coff_header) + + sizeof (struct grub_pe32_optional_header) + + 4 * sizeof (struct grub_pe32_section_table), + GRUB_PE32_SECTION_ALIGNMENT), + .pe_target = GRUB_PE32_MACHINE_ARMTHUMB_MIXED, + .elf_target = EM_ARM, + }, + { + .dirname = "arm64-efi", + .names = { "arm64-efi", NULL }, + .voidp_sizeof = 8, + .bigendian = 0, + .id = IMAGE_EFI, + .flags = PLATFORM_FLAGS_NONE, + .total_module_size = TARGET_NO_FIELD, + .decompressor_compressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_size = TARGET_NO_FIELD, + .decompressor_uncompressed_addr = TARGET_NO_FIELD, + .section_align = GRUB_PE32_SECTION_ALIGNMENT, + .vaddr_offset = EFI64_HEADER_SIZE, + .pe_target = GRUB_PE32_MACHINE_ARM64, + .elf_target = EM_AARCH64, + }, + }; + +#include + +static void *SzAlloc(void *p __attribute__ ((unused)), size_t size) { return xmalloc(size); } +static void SzFree(void *p __attribute__ ((unused)), void *address) { free(address); } +static ISzAlloc g_Alloc = { SzAlloc, SzFree }; + +static void +compress_kernel_lzma (char *kernel_img, size_t kernel_size, + char **core_img, size_t *core_size) +{ + CLzmaEncProps props; + unsigned char out_props[5]; + size_t out_props_size = 5; + + LzmaEncProps_Init(&props); + props.dictSize = 1 << 16; + props.lc = 3; + props.lp = 0; + props.pb = 2; + props.numThreads = 1; + + *core_img = xmalloc (kernel_size); + + *core_size = kernel_size; + if (LzmaEncode ((unsigned char *) *core_img, core_size, + (unsigned char *) kernel_img, + kernel_size, + &props, out_props, &out_props_size, + 0, NULL, &g_Alloc, &g_Alloc) != SZ_OK) + grub_util_error ("%s", _("cannot compress the kernel image")); +} + +#ifdef USE_LIBLZMA +static void +compress_kernel_xz (char *kernel_img, size_t kernel_size, + char **core_img, size_t *core_size) +{ + lzma_stream strm = LZMA_STREAM_INIT; + lzma_ret xzret; + lzma_options_lzma lzopts = { + .dict_size = 1 << 16, + .preset_dict = NULL, + .preset_dict_size = 0, + .lc = 3, + .lp = 0, + .pb = 2, + .mode = LZMA_MODE_NORMAL, + .nice_len = 64, + .mf = LZMA_MF_BT4, + .depth = 0, + }; + lzma_filter fltrs[] = { + { .id = LZMA_FILTER_LZMA2, .options = &lzopts}, + { .id = LZMA_VLI_UNKNOWN, .options = NULL} + }; + + xzret = lzma_stream_encoder (&strm, fltrs, LZMA_CHECK_NONE); + if (xzret != LZMA_OK) + grub_util_error ("%s", _("cannot compress the kernel image")); + + *core_img = xmalloc (kernel_size); + + *core_size = kernel_size; + strm.next_in = (unsigned char *) kernel_img; + strm.avail_in = kernel_size; + strm.next_out = (unsigned char *) *core_img; + strm.avail_out = *core_size; + + while (1) + { + xzret = lzma_code (&strm, LZMA_FINISH); + if (xzret == LZMA_OK) + continue; + if (xzret == LZMA_STREAM_END) + break; + grub_util_error ("%s", _("cannot compress the kernel image")); + } + + *core_size -= strm.avail_out; +} +#endif + +static void +compress_kernel (const struct grub_install_image_target_desc *image_target, char *kernel_img, + size_t kernel_size, char **core_img, size_t *core_size, + grub_compression_t comp) +{ + if (image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS + && (comp == GRUB_COMPRESSION_LZMA)) + { + compress_kernel_lzma (kernel_img, kernel_size, core_img, + core_size); + return; + } + +#ifdef USE_LIBLZMA + if (image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS + && (comp == GRUB_COMPRESSION_XZ)) + { + compress_kernel_xz (kernel_img, kernel_size, core_img, + core_size); + return; + } +#endif + + if (image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS + && (comp != GRUB_COMPRESSION_NONE)) + grub_util_error (_("unknown compression %d"), comp); + + *core_img = xmalloc (kernel_size); + memcpy (*core_img, kernel_img, kernel_size); + *core_size = kernel_size; +} + +const struct grub_install_image_target_desc * +grub_install_get_image_target (const char *arg) +{ + unsigned i, j; + for (i = 0; i < ARRAY_SIZE (image_targets); i++) + for (j = 0; j < ARRAY_SIZE (image_targets[i].names) && + image_targets[i].names[j]; j++) + if (strcmp (arg, image_targets[i].names[j]) == 0) + return &image_targets[i]; + return NULL; +} + +const char * +grub_util_get_target_dirname (const struct grub_install_image_target_desc *t) +{ + return t->dirname; +} + +const char * +grub_util_get_target_name (const struct grub_install_image_target_desc *t) +{ + return t->names[0]; +} + +char * +grub_install_get_image_targets_string (void) +{ + int format_len = 0; + char *formats; + char *ptr; + unsigned i; + for (i = 0; i < ARRAY_SIZE (image_targets); i++) + format_len += strlen (image_targets[i].names[0]) + 2; + ptr = formats = xmalloc (format_len); + for (i = 0; i < ARRAY_SIZE (image_targets); i++) + { + strcpy (ptr, image_targets[i].names[0]); + ptr += strlen (image_targets[i].names[0]); + *ptr++ = ','; + *ptr++ = ' '; + } + ptr[-2] = 0; + + return formats; +} + +void +grub_install_generate_image (const char *dir, const char *prefix, + FILE *out, const char *outname, char *mods[], + char *memdisk_path, char **pubkey_paths, + size_t npubkeys, char *config_path, + const struct grub_install_image_target_desc *image_target, + int note, + grub_compression_t comp) +{ + char *kernel_img, *core_img; + size_t total_module_size, core_size; + size_t memdisk_size = 0, config_size = 0; + size_t prefix_size = 0; + char *kernel_path; + size_t offset; + struct grub_util_path_list *path_list, *p; + size_t decompress_size = 0; + struct grub_mkimage_layout layout; + + if (comp == GRUB_COMPRESSION_AUTO) + comp = image_target->default_compression; + + if (image_target->id == IMAGE_I386_PC + || image_target->id == IMAGE_I386_PC_PXE + || image_target->id == IMAGE_I386_PC_ELTORITO) + comp = GRUB_COMPRESSION_LZMA; + + path_list = grub_util_resolve_dependencies (dir, "moddep.lst", mods); + + kernel_path = grub_util_get_path (dir, "kernel.img"); + + if (image_target->voidp_sizeof == 8) + total_module_size = sizeof (struct grub_module_info64); + else + total_module_size = sizeof (struct grub_module_info32); + + { + size_t i; + for (i = 0; i < npubkeys; i++) + { + size_t curs; + curs = ALIGN_ADDR (grub_util_get_image_size (pubkey_paths[i])); + grub_util_info ("the size of public key %u is 0x%" + GRUB_HOST_PRIxLONG_LONG, + (unsigned) i, (unsigned long long) curs); + total_module_size += curs + sizeof (struct grub_module_header); + } + } + + if (memdisk_path) + { + memdisk_size = ALIGN_UP(grub_util_get_image_size (memdisk_path), 512); + grub_util_info ("the size of memory disk is 0x%" GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) memdisk_size); + total_module_size += memdisk_size + sizeof (struct grub_module_header); + } + + if (config_path) + { + config_size = ALIGN_ADDR (grub_util_get_image_size (config_path) + 1); + grub_util_info ("the size of config file is 0x%" GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) config_size); + total_module_size += config_size + sizeof (struct grub_module_header); + } + + if (prefix) + { + prefix_size = ALIGN_ADDR (strlen (prefix) + 1); + total_module_size += prefix_size + sizeof (struct grub_module_header); + } + + for (p = path_list; p; p = p->next) + total_module_size += (ALIGN_ADDR (grub_util_get_image_size (p->name)) + + sizeof (struct grub_module_header)); + + grub_util_info ("the total module size is 0x%" GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) total_module_size); + + if (image_target->voidp_sizeof == 4) + kernel_img = grub_mkimage_load_image32 (kernel_path, total_module_size, + &layout, image_target); + else + kernel_img = grub_mkimage_load_image64 (kernel_path, total_module_size, + &layout, image_target); + if (image_target->id == IMAGE_XEN && layout.align < 4096) + layout.align = 4096; + + if ((image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS) + && (image_target->total_module_size != TARGET_NO_FIELD)) + *((grub_uint32_t *) (kernel_img + image_target->total_module_size)) + = grub_host_to_target32 (total_module_size); + + if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL) + { + memmove (kernel_img + total_module_size, kernel_img, layout.kernel_size); + memset (kernel_img, 0, total_module_size); + } + + if (image_target->voidp_sizeof == 8) + { + /* Fill in the grub_module_info structure. */ + struct grub_module_info64 *modinfo; + if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL) + modinfo = (struct grub_module_info64 *) kernel_img; + else + modinfo = (struct grub_module_info64 *) (kernel_img + layout.kernel_size); + modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC); + modinfo->offset = grub_host_to_target_addr (sizeof (struct grub_module_info64)); + modinfo->size = grub_host_to_target_addr (total_module_size); + if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL) + offset = sizeof (struct grub_module_info64); + else + offset = layout.kernel_size + sizeof (struct grub_module_info64); + } + else + { + /* Fill in the grub_module_info structure. */ + struct grub_module_info32 *modinfo; + if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL) + modinfo = (struct grub_module_info32 *) kernel_img; + else + modinfo = (struct grub_module_info32 *) (kernel_img + layout.kernel_size); + modinfo->magic = grub_host_to_target32 (GRUB_MODULE_MAGIC); + modinfo->offset = grub_host_to_target_addr (sizeof (struct grub_module_info32)); + modinfo->size = grub_host_to_target_addr (total_module_size); + if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL) + offset = sizeof (struct grub_module_info32); + else + offset = layout.kernel_size + sizeof (struct grub_module_info32); + } + + for (p = path_list; p; p = p->next) + { + struct grub_module_header *header; + size_t mod_size; + + mod_size = ALIGN_ADDR (grub_util_get_image_size (p->name)); + + header = (struct grub_module_header *) (kernel_img + offset); + header->type = grub_host_to_target32 (OBJ_TYPE_ELF); + header->size = grub_host_to_target32 (mod_size + sizeof (*header)); + offset += sizeof (*header); + + grub_util_load_image (p->name, kernel_img + offset); + offset += mod_size; + } + + { + size_t i; + for (i = 0; i < npubkeys; i++) + { + size_t curs; + struct grub_module_header *header; + + curs = grub_util_get_image_size (pubkey_paths[i]); + + header = (struct grub_module_header *) (kernel_img + offset); + header->type = grub_host_to_target32 (OBJ_TYPE_PUBKEY); + header->size = grub_host_to_target32 (curs + sizeof (*header)); + offset += sizeof (*header); + + grub_util_load_image (pubkey_paths[i], kernel_img + offset); + offset += ALIGN_ADDR (curs); + } + } + + if (memdisk_path) + { + struct grub_module_header *header; + + header = (struct grub_module_header *) (kernel_img + offset); + header->type = grub_host_to_target32 (OBJ_TYPE_MEMDISK); + header->size = grub_host_to_target32 (memdisk_size + sizeof (*header)); + offset += sizeof (*header); + + grub_util_load_image (memdisk_path, kernel_img + offset); + offset += memdisk_size; + } + + if (config_path) + { + struct grub_module_header *header; + + header = (struct grub_module_header *) (kernel_img + offset); + header->type = grub_host_to_target32 (OBJ_TYPE_CONFIG); + header->size = grub_host_to_target32 (config_size + sizeof (*header)); + offset += sizeof (*header); + + grub_util_load_image (config_path, kernel_img + offset); + offset += config_size; + } + + if (prefix) + { + struct grub_module_header *header; + + header = (struct grub_module_header *) (kernel_img + offset); + header->type = grub_host_to_target32 (OBJ_TYPE_PREFIX); + header->size = grub_host_to_target32 (prefix_size + sizeof (*header)); + offset += sizeof (*header); + + grub_strcpy (kernel_img + offset, prefix); + offset += prefix_size; + } + + grub_util_info ("kernel_img=%p, kernel_size=0x%" GRUB_HOST_PRIxLONG_LONG, + kernel_img, + (unsigned long long) layout.kernel_size); + compress_kernel (image_target, kernel_img, layout.kernel_size + total_module_size, + &core_img, &core_size, comp); + free (kernel_img); + + grub_util_info ("the core size is 0x%" GRUB_HOST_PRIxLONG_LONG, + (unsigned long long) core_size); + + if (!(image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS) + && image_target->total_module_size != TARGET_NO_FIELD) + *((grub_uint32_t *) (core_img + image_target->total_module_size)) + = grub_host_to_target32 (total_module_size); + + if (image_target->flags & PLATFORM_FLAGS_DECOMPRESSORS) + { + char *full_img; + size_t full_size; + char *decompress_path, *decompress_img; + const char *name; + + switch (comp) + { + case GRUB_COMPRESSION_XZ: + name = "xz_decompress.img"; + break; + case GRUB_COMPRESSION_LZMA: + name = "lzma_decompress.img"; + break; + case GRUB_COMPRESSION_NONE: + name = "none_decompress.img"; + break; + default: + grub_util_error (_("unknown compression %d"), comp); + } + + decompress_path = grub_util_get_path (dir, name); + decompress_size = grub_util_get_image_size (decompress_path); + decompress_img = grub_util_read_image (decompress_path); + + if ((image_target->id == IMAGE_I386_PC + || image_target->id == IMAGE_I386_PC_PXE + || image_target->id == IMAGE_I386_PC_ELTORITO) + && decompress_size > GRUB_KERNEL_I386_PC_LINK_ADDR - 0x8200) + grub_util_error ("%s", _("Decompressor is too big")); + + if (image_target->decompressor_compressed_size != TARGET_NO_FIELD) + *((grub_uint32_t *) (decompress_img + + image_target->decompressor_compressed_size)) + = grub_host_to_target32 (core_size); + + if (image_target->decompressor_uncompressed_size != TARGET_NO_FIELD) + *((grub_uint32_t *) (decompress_img + + image_target->decompressor_uncompressed_size)) + = grub_host_to_target32 (layout.kernel_size + total_module_size); + + if (image_target->decompressor_uncompressed_addr != TARGET_NO_FIELD) + { + if (image_target->flags & PLATFORM_FLAGS_MODULES_BEFORE_KERNEL) + *((grub_uint32_t *) (decompress_img + image_target->decompressor_uncompressed_addr)) + = grub_host_to_target_addr (image_target->link_addr - total_module_size); + else + *((grub_uint32_t *) (decompress_img + image_target->decompressor_uncompressed_addr)) + = grub_host_to_target_addr (image_target->link_addr); + } + full_size = core_size + decompress_size; + + full_img = xmalloc (full_size); + + memcpy (full_img, decompress_img, decompress_size); + + memcpy (full_img + decompress_size, core_img, core_size); + + free (core_img); + core_img = full_img; + core_size = full_size; + free (decompress_img); + free (decompress_path); + } + + switch (image_target->id) + { + case IMAGE_I386_PC: + case IMAGE_I386_PC_PXE: + case IMAGE_I386_PC_ELTORITO: + if (GRUB_KERNEL_I386_PC_LINK_ADDR + core_size > 0x78000 + || (core_size > (0xffff << GRUB_DISK_SECTOR_BITS)) + || (layout.kernel_size + layout.bss_size + + GRUB_KERNEL_I386_PC_LINK_ADDR > 0x68000)) + grub_util_error (_("core image is too big (0x%x > 0x%x)"), + GRUB_KERNEL_I386_PC_LINK_ADDR + (unsigned) core_size, + 0x78000); + /* fallthrough */ + case IMAGE_COREBOOT: + case IMAGE_QEMU: + if (layout.kernel_size + layout.bss_size + GRUB_KERNEL_I386_PC_LINK_ADDR > 0x68000) + grub_util_error (_("kernel image is too big (0x%x > 0x%x)"), + (unsigned) layout.kernel_size + (unsigned) layout.bss_size + + GRUB_KERNEL_I386_PC_LINK_ADDR, + 0x68000); + break; + case IMAGE_LOONGSON_ELF: + case IMAGE_YEELOONG_FLASH: + case IMAGE_FULOONG2F_FLASH: + case IMAGE_EFI: + case IMAGE_MIPS_ARC: + case IMAGE_QEMU_MIPS_FLASH: + case IMAGE_XEN: + break; + case IMAGE_SPARC64_AOUT: + case IMAGE_SPARC64_RAW: + case IMAGE_SPARC64_CDCORE: + case IMAGE_I386_IEEE1275: + case IMAGE_PPC: + case IMAGE_UBOOT: + break; + } + + switch (image_target->id) + { + case IMAGE_I386_PC: + case IMAGE_I386_PC_PXE: + case IMAGE_I386_PC_ELTORITO: + { + unsigned num; + char *boot_path, *boot_img; + size_t boot_size; + + num = ((core_size + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); + if (image_target->id == IMAGE_I386_PC_PXE) + { + char *pxeboot_path, *pxeboot_img; + size_t pxeboot_size; + grub_uint32_t *ptr; + + pxeboot_path = grub_util_get_path (dir, "pxeboot.img"); + pxeboot_size = grub_util_get_image_size (pxeboot_path); + pxeboot_img = grub_util_read_image (pxeboot_path); + + grub_util_write_image (pxeboot_img, pxeboot_size, out, + outname); + free (pxeboot_img); + free (pxeboot_path); + + /* Remove Multiboot header to avoid confusing ipxe. */ + for (ptr = (grub_uint32_t *) core_img; + ptr < (grub_uint32_t *) (core_img + MULTIBOOT_SEARCH); ptr++) + if (*ptr == grub_host_to_target32 (MULTIBOOT_HEADER_MAGIC) + && grub_target_to_host32 (ptr[0]) + + grub_target_to_host32 (ptr[1]) + + grub_target_to_host32 (ptr[2]) == 0) + { + *ptr = 0; + break; + } + } + + if (image_target->id == IMAGE_I386_PC_ELTORITO) + { + char *eltorito_path, *eltorito_img; + size_t eltorito_size; + + eltorito_path = grub_util_get_path (dir, "cdboot.img"); + eltorito_size = grub_util_get_image_size (eltorito_path); + eltorito_img = grub_util_read_image (eltorito_path); + + grub_util_write_image (eltorito_img, eltorito_size, out, + outname); + free (eltorito_img); + free (eltorito_path); + } + + boot_path = grub_util_get_path (dir, "diskboot.img"); + boot_size = grub_util_get_image_size (boot_path); + if (boot_size != GRUB_DISK_SECTOR_SIZE) + grub_util_error (_("diskboot.img size must be %u bytes"), + GRUB_DISK_SECTOR_SIZE); + + boot_img = grub_util_read_image (boot_path); + + { + struct grub_pc_bios_boot_blocklist *block; + block = (struct grub_pc_bios_boot_blocklist *) (boot_img + + GRUB_DISK_SECTOR_SIZE + - sizeof (*block)); + block->len = grub_host_to_target16 (num); + + /* This is filled elsewhere. Verify it just in case. */ + assert (block->segment + == grub_host_to_target16 (GRUB_BOOT_I386_PC_KERNEL_SEG + + (GRUB_DISK_SECTOR_SIZE >> 4))); + } + + grub_util_write_image (boot_img, boot_size, out, outname); + free (boot_img); + free (boot_path); + } + break; + case IMAGE_EFI: + { + void *pe_img; + grub_uint8_t *header; + void *sections; + size_t pe_size; + struct grub_pe32_coff_header *c; + struct grub_pe32_section_table *text_section, *data_section; + struct grub_pe32_section_table *mods_section, *reloc_section; + static const grub_uint8_t stub[] = GRUB_PE32_MSDOS_STUB; + int header_size; + int reloc_addr; + + if (image_target->voidp_sizeof == 4) + header_size = EFI32_HEADER_SIZE; + else + header_size = EFI64_HEADER_SIZE; + + reloc_addr = ALIGN_UP (header_size + core_size, + image_target->section_align); + + pe_size = ALIGN_UP (reloc_addr + layout.reloc_size, + image_target->section_align); + pe_img = xmalloc (reloc_addr + layout.reloc_size); + memset (pe_img, 0, header_size); + memcpy ((char *) pe_img + header_size, core_img, core_size); + memset ((char *) pe_img + header_size + core_size, 0, reloc_addr - (header_size + core_size)); + memcpy ((char *) pe_img + reloc_addr, layout.reloc_section, layout.reloc_size); + header = pe_img; + + /* The magic. */ + memcpy (header, stub, GRUB_PE32_MSDOS_STUB_SIZE); + memcpy (header + GRUB_PE32_MSDOS_STUB_SIZE, "PE\0\0", + GRUB_PE32_SIGNATURE_SIZE); + + /* The COFF file header. */ + c = (struct grub_pe32_coff_header *) (header + GRUB_PE32_MSDOS_STUB_SIZE + + GRUB_PE32_SIGNATURE_SIZE); + c->machine = grub_host_to_target16 (image_target->pe_target); + + c->num_sections = grub_host_to_target16 (4); + c->time = grub_host_to_target32 (STABLE_EMBEDDING_TIMESTAMP); + c->characteristics = grub_host_to_target16 (GRUB_PE32_EXECUTABLE_IMAGE + | GRUB_PE32_LINE_NUMS_STRIPPED + | ((image_target->voidp_sizeof == 4) + ? GRUB_PE32_32BIT_MACHINE + : 0) + | GRUB_PE32_LOCAL_SYMS_STRIPPED + | GRUB_PE32_DEBUG_STRIPPED); + + /* The PE Optional header. */ + if (image_target->voidp_sizeof == 4) + { + struct grub_pe32_optional_header *o; + + c->optional_header_size = grub_host_to_target16 (sizeof (struct grub_pe32_optional_header)); + + o = (struct grub_pe32_optional_header *) + (header + GRUB_PE32_MSDOS_STUB_SIZE + GRUB_PE32_SIGNATURE_SIZE + + sizeof (struct grub_pe32_coff_header)); + o->magic = grub_host_to_target16 (GRUB_PE32_PE32_MAGIC); + o->code_size = grub_host_to_target32 (layout.exec_size); + o->data_size = grub_cpu_to_le32 (reloc_addr - layout.exec_size + - header_size); + o->bss_size = grub_cpu_to_le32 (layout.bss_size); + o->entry_addr = grub_cpu_to_le32 (layout.start_address); + o->code_base = grub_cpu_to_le32 (header_size); + + o->data_base = grub_host_to_target32 (header_size + layout.exec_size); + + o->image_base = 0; + o->section_alignment = grub_host_to_target32 (image_target->section_align); + o->file_alignment = grub_host_to_target32 (image_target->section_align); + o->image_size = grub_host_to_target32 (pe_size); + o->header_size = grub_host_to_target32 (header_size); + o->subsystem = grub_host_to_target16 (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION); + + /* Do these really matter? */ + o->stack_reserve_size = grub_host_to_target32 (0x10000); + o->stack_commit_size = grub_host_to_target32 (0x10000); + o->heap_reserve_size = grub_host_to_target32 (0x10000); + o->heap_commit_size = grub_host_to_target32 (0x10000); + + o->num_data_directories = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); + + o->base_relocation_table.rva = grub_host_to_target32 (reloc_addr); + o->base_relocation_table.size = grub_host_to_target32 (layout.reloc_size); + sections = o + 1; + } + else + { + struct grub_pe64_optional_header *o; + + c->optional_header_size = grub_host_to_target16 (sizeof (struct grub_pe64_optional_header)); + + o = (struct grub_pe64_optional_header *) + (header + GRUB_PE32_MSDOS_STUB_SIZE + GRUB_PE32_SIGNATURE_SIZE + + sizeof (struct grub_pe32_coff_header)); + o->magic = grub_host_to_target16 (GRUB_PE32_PE64_MAGIC); + o->code_size = grub_host_to_target32 (layout.exec_size); + o->data_size = grub_cpu_to_le32 (reloc_addr - layout.exec_size + - header_size); + o->bss_size = grub_cpu_to_le32 (layout.bss_size); + o->entry_addr = grub_cpu_to_le32 (layout.start_address); + o->code_base = grub_cpu_to_le32 (header_size); + o->image_base = 0; + o->section_alignment = grub_host_to_target32 (image_target->section_align); + o->file_alignment = grub_host_to_target32 (image_target->section_align); + o->image_size = grub_host_to_target32 (pe_size); + o->header_size = grub_host_to_target32 (header_size); + o->subsystem = grub_host_to_target16 (GRUB_PE32_SUBSYSTEM_EFI_APPLICATION); + + /* Do these really matter? */ + o->stack_reserve_size = grub_host_to_target64 (0x10000); + o->stack_commit_size = grub_host_to_target64 (0x10000); + o->heap_reserve_size = grub_host_to_target64 (0x10000); + o->heap_commit_size = grub_host_to_target64 (0x10000); + + o->num_data_directories + = grub_host_to_target32 (GRUB_PE32_NUM_DATA_DIRECTORIES); + + o->base_relocation_table.rva = grub_host_to_target32 (reloc_addr); + o->base_relocation_table.size = grub_host_to_target32 (layout.reloc_size); + sections = o + 1; + } + /* The sections. */ + text_section = sections; + strcpy (text_section->name, ".text"); + text_section->virtual_size = grub_cpu_to_le32 (layout.exec_size); + text_section->virtual_address = grub_cpu_to_le32 (header_size); + text_section->raw_data_size = grub_cpu_to_le32 (layout.exec_size); + text_section->raw_data_offset = grub_cpu_to_le32 (header_size); + text_section->characteristics = grub_cpu_to_le32_compile_time ( + GRUB_PE32_SCN_CNT_CODE + | GRUB_PE32_SCN_MEM_EXECUTE + | GRUB_PE32_SCN_MEM_READ); + + data_section = text_section + 1; + strcpy (data_section->name, ".data"); + data_section->virtual_size = grub_cpu_to_le32 (layout.kernel_size - layout.exec_size); + data_section->virtual_address = grub_cpu_to_le32 (header_size + layout.exec_size); + data_section->raw_data_size = grub_cpu_to_le32 (layout.kernel_size - layout.exec_size); + data_section->raw_data_offset = grub_cpu_to_le32 (header_size + layout.exec_size); + data_section->characteristics + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | GRUB_PE32_SCN_MEM_READ + | GRUB_PE32_SCN_MEM_WRITE); + +#if 0 + bss_section = data_section + 1; + strcpy (bss_section->name, ".bss"); + bss_section->virtual_size = grub_cpu_to_le32 (layout.bss_size); + bss_section->virtual_address = grub_cpu_to_le32 (header_size + layout.kernel_size); + bss_section->raw_data_size = 0; + bss_section->raw_data_offset = 0; + bss_section->characteristics + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_MEM_READ + | GRUB_PE32_SCN_MEM_WRITE + | GRUB_PE32_SCN_ALIGN_64BYTES + | GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | 0x80); +#endif + + mods_section = data_section + 1; + strcpy (mods_section->name, "mods"); + mods_section->virtual_size = grub_cpu_to_le32 (reloc_addr - layout.kernel_size - header_size); + mods_section->virtual_address = grub_cpu_to_le32 (header_size + layout.kernel_size + layout.bss_size); + mods_section->raw_data_size = grub_cpu_to_le32 (reloc_addr - layout.kernel_size - header_size); + mods_section->raw_data_offset = grub_cpu_to_le32 (header_size + layout.kernel_size); + mods_section->characteristics + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | GRUB_PE32_SCN_MEM_READ + | GRUB_PE32_SCN_MEM_WRITE); + + reloc_section = mods_section + 1; + strcpy (reloc_section->name, ".reloc"); + reloc_section->virtual_size = grub_cpu_to_le32 (layout.reloc_size); + reloc_section->virtual_address = grub_cpu_to_le32 (reloc_addr + layout.bss_size); + reloc_section->raw_data_size = grub_cpu_to_le32 (layout.reloc_size); + reloc_section->raw_data_offset = grub_cpu_to_le32 (reloc_addr); + reloc_section->characteristics + = grub_cpu_to_le32_compile_time (GRUB_PE32_SCN_CNT_INITIALIZED_DATA + | GRUB_PE32_SCN_MEM_DISCARDABLE + | GRUB_PE32_SCN_MEM_READ); + free (core_img); + core_img = pe_img; + core_size = pe_size; + } + break; + case IMAGE_QEMU: + { + char *rom_img; + size_t rom_size; + char *boot_path, *boot_img; + size_t boot_size; + + boot_path = grub_util_get_path (dir, "boot.img"); + boot_size = grub_util_get_image_size (boot_path); + boot_img = grub_util_read_image (boot_path); + + /* Rom sizes must be 64k-aligned. */ + rom_size = ALIGN_UP (core_size + boot_size, 64 * 1024); + + rom_img = xmalloc (rom_size); + memset (rom_img, 0, rom_size); + + *((grub_int32_t *) (core_img + GRUB_KERNEL_I386_QEMU_CORE_ENTRY_ADDR)) + = grub_host_to_target32 ((grub_uint32_t) -rom_size); + + memcpy (rom_img, core_img, core_size); + + *((grub_int32_t *) (boot_img + GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR)) + = grub_host_to_target32 ((grub_uint32_t) -rom_size); + + memcpy (rom_img + rom_size - boot_size, boot_img, boot_size); + + free (core_img); + core_img = rom_img; + core_size = rom_size; + + free (boot_img); + free (boot_path); + } + break; + case IMAGE_SPARC64_AOUT: + { + void *aout_img; + size_t aout_size; + struct grub_aout32_header *aout_head; + + aout_size = core_size + sizeof (*aout_head); + aout_img = xmalloc (aout_size); + aout_head = aout_img; + grub_memset (aout_head, 0, sizeof (*aout_head)); + aout_head->a_midmag = grub_host_to_target32 ((AOUT_MID_SUN << 16) + | AOUT32_OMAGIC); + aout_head->a_text = grub_host_to_target32 (core_size); + aout_head->a_entry + = grub_host_to_target32 (GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS); + memcpy ((char *) aout_img + sizeof (*aout_head), core_img, core_size); + + free (core_img); + core_img = aout_img; + core_size = aout_size; + } + break; + case IMAGE_SPARC64_RAW: + { + unsigned int num; + char *boot_path, *boot_img; + size_t boot_size; + + num = ((core_size + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); + num <<= GRUB_DISK_SECTOR_BITS; + + boot_path = grub_util_get_path (dir, "diskboot.img"); + boot_size = grub_util_get_image_size (boot_path); + if (boot_size != GRUB_DISK_SECTOR_SIZE) + grub_util_error (_("diskboot.img size must be %u bytes"), + GRUB_DISK_SECTOR_SIZE); + + boot_img = grub_util_read_image (boot_path); + + *((grub_uint32_t *) (boot_img + GRUB_DISK_SECTOR_SIZE + - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE + 8)) + = grub_host_to_target32 (num); + + grub_util_write_image (boot_img, boot_size, out, outname); + free (boot_img); + free (boot_path); + } + break; + case IMAGE_SPARC64_CDCORE: + break; + case IMAGE_YEELOONG_FLASH: + case IMAGE_FULOONG2F_FLASH: + { + char *rom_img; + size_t rom_size; + char *boot_path, *boot_img; + size_t boot_size; + /* fwstart.img is the only part which can't be tested by using *-elf + target. Check it against the checksum. */ + const grub_uint8_t yeeloong_fwstart_good_hash[512 / 8] = + { + 0x5f, 0x67, 0x46, 0x57, 0x31, 0x30, 0xc5, 0x0a, + 0xe9, 0x98, 0x18, 0xc9, 0xf3, 0xca, 0x45, 0xa5, + 0x75, 0x64, 0x6b, 0xbb, 0x24, 0xcd, 0xb4, 0xbc, + 0xf2, 0x3e, 0x23, 0xf9, 0xc2, 0x6a, 0x8c, 0xde, + 0x3b, 0x94, 0x9c, 0xcc, 0xa5, 0xa7, 0x58, 0xb1, + 0xbe, 0x8b, 0x3d, 0x73, 0x98, 0x18, 0x7e, 0x68, + 0x5e, 0x5f, 0x23, 0x7d, 0x7a, 0xe8, 0x51, 0xf7, + 0x1a, 0xaf, 0x2f, 0x54, 0x11, 0x2e, 0x5c, 0x25 + }; + const grub_uint8_t fuloong2f_fwstart_good_hash[512 / 8] = + { + 0x76, 0x9b, 0xad, 0x6e, 0xa2, 0x39, 0x47, 0x62, + 0x1f, 0xc9, 0x3a, 0x6d, 0x05, 0x5c, 0x43, 0x5c, + 0x29, 0x4a, 0x7e, 0x08, 0x2a, 0x31, 0x8f, 0x5d, + 0x02, 0x84, 0xa0, 0x85, 0xf2, 0xd1, 0xb9, 0x53, + 0xa2, 0xbc, 0xf2, 0xe1, 0x39, 0x1e, 0x51, 0xb5, + 0xaf, 0xec, 0x9e, 0xf2, 0xf1, 0xf3, 0x0a, 0x2f, + 0xe6, 0xf1, 0x08, 0x89, 0xbe, 0xbc, 0x73, 0xab, + 0x46, 0x50, 0xd6, 0x21, 0xce, 0x8e, 0x24, 0xa7 + }; + const grub_uint8_t *fwstart_good_hash; + grub_uint8_t fwstart_hash[512 / 8]; + + if (image_target->id == IMAGE_FULOONG2F_FLASH) + { + fwstart_good_hash = fuloong2f_fwstart_good_hash; + boot_path = grub_util_get_path (dir, "fwstart_fuloong2f.img"); + } + else + { + fwstart_good_hash = yeeloong_fwstart_good_hash; + boot_path = grub_util_get_path (dir, "fwstart.img"); + } + + boot_size = grub_util_get_image_size (boot_path); + boot_img = grub_util_read_image (boot_path); + + grub_crypto_hash (GRUB_MD_SHA512, fwstart_hash, boot_img, boot_size); + + if (grub_memcmp (fwstart_hash, fwstart_good_hash, + GRUB_MD_SHA512->mdlen) != 0) + /* TRANSLATORS: fwstart.img may still be good, just it wasn't checked. */ + grub_util_warn ("%s", + _("fwstart.img doesn't match the known good version. " + "proceed at your own risk")); + + if (core_size + boot_size > 512 * 1024) + grub_util_error ("%s", _("firmware image is too big")); + rom_size = 512 * 1024; + + rom_img = xmalloc (rom_size); + memset (rom_img, 0, rom_size); + + memcpy (rom_img, boot_img, boot_size); + + memcpy (rom_img + boot_size, core_img, core_size); + + memset (rom_img + boot_size + core_size, 0, + rom_size - (boot_size + core_size)); + + free (core_img); + core_img = rom_img; + core_size = rom_size; + free (boot_img); + free (boot_path); + } + break; + case IMAGE_QEMU_MIPS_FLASH: + { + char *rom_img; + size_t rom_size; + + if (core_size > 512 * 1024) + grub_util_error ("%s", _("firmware image is too big")); + rom_size = 512 * 1024; + + rom_img = xmalloc (rom_size); + memset (rom_img, 0, rom_size); + + memcpy (rom_img, core_img, core_size); + + memset (rom_img + core_size, 0, + rom_size - core_size); + + free (core_img); + core_img = rom_img; + core_size = rom_size; + } + break; + + case IMAGE_UBOOT: + { + struct grub_uboot_image_header *hdr; + + hdr = xmalloc (core_size + sizeof (struct grub_uboot_image_header)); + memcpy (hdr + 1, core_img, core_size); + + memset (hdr, 0, sizeof (*hdr)); + hdr->ih_magic = grub_cpu_to_be32_compile_time (GRUB_UBOOT_IH_MAGIC); + hdr->ih_time = grub_cpu_to_be32 (STABLE_EMBEDDING_TIMESTAMP); + hdr->ih_size = grub_cpu_to_be32 (core_size); + hdr->ih_load = 0; + hdr->ih_ep = 0; + hdr->ih_type = GRUB_UBOOT_IH_TYPE_KERNEL_NOLOAD; + hdr->ih_os = GRUB_UBOOT_IH_OS_LINUX; + hdr->ih_arch = GRUB_UBOOT_IH_ARCH_ARM; + hdr->ih_comp = GRUB_UBOOT_IH_COMP_NONE; + + grub_crypto_hash (GRUB_MD_CRC32, &hdr->ih_dcrc, hdr + 1, core_size); + grub_crypto_hash (GRUB_MD_CRC32, &hdr->ih_hcrc, hdr, sizeof (*hdr)); + + free (core_img); + core_img = (char *) hdr; + core_size += sizeof (struct grub_uboot_image_header); + } + break; + + case IMAGE_MIPS_ARC: + { + char *ecoff_img; + struct ecoff_header { + grub_uint16_t magic; + grub_uint16_t nsec; + grub_uint32_t time; + grub_uint32_t syms; + grub_uint32_t nsyms; + grub_uint16_t opt; + grub_uint16_t flags; + grub_uint16_t magic2; + grub_uint16_t version; + grub_uint32_t textsize; + grub_uint32_t datasize; + grub_uint32_t bsssize; + grub_uint32_t entry; + grub_uint32_t text_start; + grub_uint32_t data_start; + grub_uint32_t bss_start; + grub_uint32_t gprmask; + grub_uint32_t cprmask[4]; + grub_uint32_t gp_value; + }; + struct ecoff_section + { + char name[8]; + grub_uint32_t paddr; + grub_uint32_t vaddr; + grub_uint32_t size; + grub_uint32_t file_offset; + grub_uint32_t reloc; + grub_uint32_t gp; + grub_uint16_t nreloc; + grub_uint16_t ngp; + grub_uint32_t flags; + }; + struct ecoff_header *head; + struct ecoff_section *section; + grub_uint32_t target_addr; + size_t program_size; + + program_size = ALIGN_ADDR (core_size); + if (comp == GRUB_COMPRESSION_NONE) + target_addr = (image_target->link_addr - decompress_size); + else + target_addr = ALIGN_UP (image_target->link_addr + + layout.kernel_size + total_module_size, 32); + + ecoff_img = xmalloc (program_size + sizeof (*head) + sizeof (*section)); + grub_memset (ecoff_img, 0, program_size + sizeof (*head) + sizeof (*section)); + head = (void *) ecoff_img; + section = (void *) (head + 1); + head->magic = image_target->bigendian ? grub_host_to_target16 (0x160) + : grub_host_to_target16 (0x166); + head->nsec = grub_host_to_target16 (1); + head->time = grub_host_to_target32 (0); + head->opt = grub_host_to_target16 (0x38); + head->flags = image_target->bigendian + ? grub_host_to_target16 (0x207) + : grub_host_to_target16 (0x103); + head->magic2 = grub_host_to_target16 (0x107); + head->textsize = grub_host_to_target32 (program_size); + head->entry = grub_host_to_target32 (target_addr); + head->text_start = grub_host_to_target32 (target_addr); + head->data_start = grub_host_to_target32 (target_addr + program_size); + grub_memcpy (section->name, ".text", sizeof (".text") - 1); + section->vaddr = grub_host_to_target32 (target_addr); + section->size = grub_host_to_target32 (program_size); + section->file_offset = grub_host_to_target32 (sizeof (*head) + sizeof (*section)); + if (!image_target->bigendian) + { + section->paddr = grub_host_to_target32 (0xaa60); + section->flags = grub_host_to_target32 (0x20); + } + memcpy (section + 1, core_img, core_size); + free (core_img); + core_img = ecoff_img; + core_size = program_size + sizeof (*head) + sizeof (*section); + } + break; + case IMAGE_LOONGSON_ELF: + case IMAGE_PPC: + case IMAGE_XEN: + case IMAGE_COREBOOT: + case IMAGE_I386_IEEE1275: + { + grub_uint64_t target_addr; + if (image_target->id == IMAGE_LOONGSON_ELF) + { + if (comp == GRUB_COMPRESSION_NONE) + target_addr = (image_target->link_addr - decompress_size); + else + target_addr = ALIGN_UP (image_target->link_addr + + layout.kernel_size + total_module_size, 32); + } + else + target_addr = image_target->link_addr; + if (image_target->voidp_sizeof == 4) + grub_mkimage_generate_elf32 (image_target, note, &core_img, &core_size, + target_addr, layout.align, layout.kernel_size, layout.bss_size); + else + grub_mkimage_generate_elf64 (image_target, note, &core_img, &core_size, + target_addr, layout.align, layout.kernel_size, layout.bss_size); + } + break; + } + + grub_util_write_image (core_img, core_size, out, outname); + free (core_img); + free (kernel_path); + free (layout.reloc_section); + + grub_util_free_path_list (path_list); +} diff --git a/util/probe.c b/util/probe.c new file mode 100644 index 000000000..fa7ca34d1 --- /dev/null +++ b/util/probe.c @@ -0,0 +1,172 @@ +/* grub-probe.c - probe device information for a given path */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005,2006,2007,2008,2009,2010,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +/* Since OF path names can have "," characters in them, and GRUB + internally uses "," to indicate partitions (unlike OF which uses + ":" for this purpose) we escape such commas. */ +static char * +escape_of_path (const char *orig_path) +{ + char *new_path, *d, c; + const char *p; + + if (!strchr (orig_path, ',')) + return (char *) xstrdup (orig_path); + + new_path = xmalloc (strlen (orig_path) * 2 + 1); + + p = orig_path; + d = new_path; + while ((c = *p++) != '\0') + { + if (c == ',') + *d++ = '\\'; + *d++ = c; + } + *d = 0; + + return new_path; +} + +char * +grub_util_guess_bios_drive (const char *orig_path) +{ + char *canon; + char *ptr; + canon = grub_canonicalize_file_name (orig_path); + if (!canon) + return NULL; + ptr = strrchr (orig_path, '/'); + if (ptr) + ptr++; + else + ptr = canon; + if ((ptr[0] == 's' || ptr[0] == 'h') && ptr[1] == 'd') + { + int num = ptr[2] - 'a'; + free (canon); + return xasprintf ("hd%d", num); + } + if (ptr[0] == 'f' && ptr[1] == 'd') + { + int num = atoi (ptr + 2); + free (canon); + return xasprintf ("fd%d", num); + } + free (canon); + return NULL; +} + +char * +grub_util_guess_efi_drive (const char *orig_path) +{ + char *canon; + char *ptr; + canon = grub_canonicalize_file_name (orig_path); + if (!canon) + return NULL; + ptr = strrchr (orig_path, '/'); + if (ptr) + ptr++; + else + ptr = canon; + if ((ptr[0] == 's' || ptr[0] == 'h') && ptr[1] == 'd') + { + int num = ptr[2] - 'a'; + free (canon); + return xasprintf ("hd%d", num); + } + if (ptr[0] == 'f' && ptr[1] == 'd') + { + int num = atoi (ptr + 2); + free (canon); + return xasprintf ("fd%d", num); + } + free (canon); + return NULL; +} + +char * +grub_util_guess_baremetal_drive (const char *orig_path) +{ + char *canon; + char *ptr; + canon = grub_canonicalize_file_name (orig_path); + if (!canon) + return NULL; + ptr = strrchr (orig_path, '/'); + if (ptr) + ptr++; + else + ptr = canon; + if (ptr[0] == 'h' && ptr[1] == 'd') + { + int num = ptr[2] - 'a'; + free (canon); + return xasprintf ("ata%d", num); + } + if (ptr[0] == 's' && ptr[1] == 'd') + { + int num = ptr[2] - 'a'; + free (canon); + return xasprintf ("ahci%d", num); + } + free (canon); + return NULL; +} + +void +grub_util_fprint_full_disk_name (FILE *f, + const char *drive, grub_device_t dev) +{ + char *dname = escape_of_path (drive); + if (dev->disk->partition) + { + char *pname = grub_partition_get_name (dev->disk->partition); + fprintf (f, "%s,%s", dname, pname); + free (pname); + } + else + fprintf (f, "%s", dname); + free (dname); +} diff --git a/util/render-label.c b/util/render-label.c new file mode 100644 index 000000000..91c080c9c --- /dev/null +++ b/util/render-label.c @@ -0,0 +1,215 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2010,2012,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include + +struct header +{ + grub_uint8_t magic; + grub_uint16_t width; + grub_uint16_t height; +} GRUB_PACKED; + +static struct grub_video_palette_data ieee1275_palette[256]; + +void +grub_util_render_label (const char *label_font, + const char *label_bgcolor, + const char *label_color, + const char *text, + const char *output) +{ + struct header head; + FILE *out; + int i, j, k, cptr = 0; + grub_font_t font; + char *fontfull; + const grub_uint8_t vals[] = { 0xff, 0xda, 0xb3, 0x87, 0x54, 0x00 }; + const grub_uint8_t vals2[] = { 0xf3, 0xe7, 0xcd, 0xc0, 0xa5, 0x96, + 0x77, 0x66, 0x3f, 0x27 }; + int width, height; + grub_uint8_t bg, fg; + struct grub_video_mode_info mode_info; + grub_err_t err; + grub_video_rgba_color_t fgcolor; + grub_video_rgba_color_t bgcolor; + + if (output) + out = grub_util_fopen (output, "wb"); + else + out = stdout; + if (!out) + { + grub_util_error (_("cannot open `%s': %s"), output ? : "stdout", + strerror (errno)); + } + + if (label_color) + { + err = grub_video_parse_color (label_color, &fgcolor); + if (err) + grub_util_error (_("invalid color specification `%s'"), label_color); + } + else + { + fgcolor.red = 0x00; + fgcolor.green = 0x00; + fgcolor.blue = 0x00; + fgcolor.alpha = 0xff; + } + + if (label_bgcolor) + { + err = grub_video_parse_color (label_bgcolor, &bgcolor); + if (err) + grub_util_error (_("invalid color specification `%s'"), label_bgcolor); + } + else + { + bgcolor.red = 0xff; + bgcolor.green = 0xff; + bgcolor.blue = 0xff; + bgcolor.alpha = 0xff; + } + + for (i = 0; i < 256; i++) + ieee1275_palette[i].a = 0xff; + + for (i = 0; i < 6; i++) + for (j = 0; j < 6; j++) + for (k = 0; k < 6; k++) + { + ieee1275_palette[cptr].r = vals[i]; + ieee1275_palette[cptr].g = vals[j]; + ieee1275_palette[cptr].b = vals[k]; + ieee1275_palette[cptr].a = 0xff; + cptr++; + } + cptr--; + for (i = 0; i < 10; i++) + { + ieee1275_palette[cptr].r = vals2[i]; + ieee1275_palette[cptr].g = 0; + ieee1275_palette[cptr].b = 0; + ieee1275_palette[cptr].a = 0xff; + cptr++; + } + for (i = 0; i < 10; i++) + { + ieee1275_palette[cptr].r = 0; + ieee1275_palette[cptr].g = vals2[i]; + ieee1275_palette[cptr].b = 0; + ieee1275_palette[cptr].a = 0xff; + cptr++; + } + for (i = 0; i < 10; i++) + { + ieee1275_palette[cptr].r = 0; + ieee1275_palette[cptr].g = 0; + ieee1275_palette[cptr].b = vals2[i]; + ieee1275_palette[cptr].a = 0xff; + cptr++; + } + for (i = 0; i < 10; i++) + { + ieee1275_palette[cptr].r = vals2[i]; + ieee1275_palette[cptr].g = vals2[i]; + ieee1275_palette[cptr].b = vals2[i]; + ieee1275_palette[cptr].a = 0xff; + cptr++; + } + ieee1275_palette[cptr].r = 0; + ieee1275_palette[cptr].g = 0; + ieee1275_palette[cptr].b = 0; + ieee1275_palette[cptr].a = 0xff; + + char * t; + t = grub_canonicalize_file_name (label_font); + if (!t) + { + grub_util_error (_("cannot open `%s': %s"), label_font, + strerror (errno)); + } + + fontfull = xasprintf ("(host)/%s", t); + free (t); + + grub_font_loader_init (); + font = grub_font_load (fontfull); + if (!font) + { + grub_util_error (_("cannot open `%s': %s"), label_font, + grub_errmsg); + } + + width = grub_font_get_string_width (font, text) + 10; + height = grub_font_get_height (font); + + mode_info.width = width; + mode_info.height = height; + mode_info.pitch = width; + + mode_info.mode_type = GRUB_VIDEO_MODE_TYPE_INDEX_COLOR; + mode_info.bpp = 8; + mode_info.bytes_per_pixel = 1; + mode_info.number_of_colors = 256; + + grub_video_capture_start (&mode_info, ieee1275_palette, + ARRAY_SIZE (ieee1275_palette)); + + fg = grub_video_map_rgb (fgcolor.red, + fgcolor.green, + fgcolor.blue); + bg = grub_video_map_rgb (bgcolor.red, + bgcolor.green, + bgcolor.blue); + + grub_memset (grub_video_capture_get_framebuffer (), bg, height * width); + grub_font_draw_string (text, font, fg, + 5, grub_font_get_ascent (font)); + + head.magic = 1; + head.width = grub_cpu_to_be16 (width); + head.height = grub_cpu_to_be16 (height); + fwrite (&head, 1, sizeof (head), out); + fwrite (grub_video_capture_get_framebuffer (), 1, width * height, out); + + grub_video_capture_end (); + if (out != stdout) + fclose (out); + + free (fontfull); +} diff --git a/util/resolve.c b/util/resolve.c new file mode 100644 index 000000000..3e887d2ff --- /dev/null +++ b/util/resolve.c @@ -0,0 +1,287 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2002,2007 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* Module. */ +struct mod_list +{ + const char *name; + struct mod_list *next; +}; + +/* Dependency. */ +struct dep_list +{ + const char *name; + struct mod_list *list; + struct dep_list *next; +}; + +static char buf[1024]; + +static void +free_mod_list (struct mod_list *head) +{ + while (head) + { + struct mod_list *next; + + next = head->next; + free ((void *) head->name); + free (head); + head = next; + } +} + +static void +free_dep_list (struct dep_list *head) +{ + while (head) + { + struct dep_list *next; + + next = head->next; + free ((void *) head->name); + free_mod_list (head->list); + free (head); + head = next; + } +} + +/* Read the list of dependencies. */ +static struct dep_list * +read_dep_list (FILE *fp) +{ + struct dep_list *dep_list = 0; + + while (fgets (buf, sizeof (buf), fp)) + { + char *p; + struct dep_list *dep; + + /* Get the target name. */ + p = strchr (buf, ':'); + if (! p) + grub_util_error (_("invalid line format: %s"), buf); + + *p++ = '\0'; + + dep = xmalloc (sizeof (*dep)); + dep->name = xstrdup (buf); + dep->list = 0; + + dep->next = dep_list; + dep_list = dep; + + /* Add dependencies. */ + while (*p) + { + struct mod_list *mod; + char *name; + + /* Skip whitespace. */ + while (*p && grub_isspace (*p)) + p++; + + if (! *p) + break; + + name = p; + + /* Skip non-whitespace. */ + while (*p && ! grub_isspace (*p)) + p++; + + *p++ = '\0'; + + mod = (struct mod_list *) xmalloc (sizeof (*mod)); + mod->name = xstrdup (name); + mod->next = dep->list; + dep->list = mod; + } + } + + return dep_list; +} + +static char * +get_module_name (const char *str) +{ + char *base; + char *ext; + + base = strrchr (str, '/'); + if (! base) + base = (char *) str; + else + base++; + + ext = strrchr (base, '.'); + if (ext && strcmp (ext, ".mod") == 0) + { + char *name; + + name = xmalloc (ext - base + 1); + memcpy (name, base, ext - base); + name[ext - base] = '\0'; + return name; + } + + return xstrdup (base); +} + +static char * +get_module_path (const char *prefix, const char *str) +{ + char *dir; + char *base; + char *ext; + char *ret; + + ext = strrchr (str, '.'); + if (ext && strcmp (ext, ".mod") == 0) + base = xstrdup (str); + else + { + base = xmalloc (strlen (str) + 4 + 1); + sprintf (base, "%s.mod", str); + } + + dir = strchr (str, '/'); + if (dir) + return base; + + ret = grub_util_get_path (prefix, base); + free (base); + return ret; +} + +static void +add_module (const char *dir, + struct dep_list *dep_list, + struct mod_list **mod_head, + struct grub_util_path_list **path_head, + const char *name) +{ + char *mod_name; + struct grub_util_path_list *path; + struct mod_list *mod; + struct dep_list *dep; + + mod_name = get_module_name (name); + + /* Check if the module has already been added. */ + for (mod = *mod_head; mod; mod = mod->next) + if (strcmp (mod->name, mod_name) == 0) + { + free (mod_name); + return; + } + + /* Resolve dependencies. */ + for (dep = dep_list; dep; dep = dep->next) + if (strcmp (dep->name, mod_name) == 0) + { + for (mod = dep->list; mod; mod = mod->next) + add_module (dir, dep_list, mod_head, path_head, mod->name); + + break; + } + + /* Add this module. */ + mod = (struct mod_list *) xmalloc (sizeof (*mod)); + mod->name = mod_name; + mod->next = *mod_head; + *mod_head = mod; + + /* Add this path. */ + path = (struct grub_util_path_list *) xmalloc (sizeof (*path)); + path->name = get_module_path (dir, name); + path->next = *path_head; + *path_head = path; +} + +struct grub_util_path_list * +grub_util_resolve_dependencies (const char *prefix, + const char *dep_list_file, + char *modules[]) +{ + char *path; + FILE *fp; + struct dep_list *dep_list; + struct mod_list *mod_list = 0; + struct grub_util_path_list *path_list = 0; + + path = grub_util_get_path (prefix, dep_list_file); + fp = grub_util_fopen (path, "r"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), path, strerror (errno)); + + free (path); + dep_list = read_dep_list (fp); + fclose (fp); + + while (*modules) + { + add_module (prefix, dep_list, &mod_list, &path_list, *modules); + modules++; + } + + free_dep_list (dep_list); + free_mod_list (mod_list); + + { /* Reverse the path_list */ + struct grub_util_path_list *p, *prev, *next; + + for (p = path_list, prev = NULL; p; p = next) + { + next = p->next; + p->next = prev; + prev = p; + } + + return prev; + } +} + +void +grub_util_free_path_list (struct grub_util_path_list *path_list) +{ + struct grub_util_path_list *next; + + while (path_list) + { + next = path_list->next; + free ((void *) path_list->name); + free (path_list); + path_list = next; + } +} diff --git a/util/setup.c b/util/setup.c new file mode 100644 index 000000000..8aa5a39a7 --- /dev/null +++ b/util/setup.c @@ -0,0 +1,790 @@ +/* grub-setup.c - make GRUB usable */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef GRUB_SETUP_SPARC64 +#include +#include +#include +#else +#include +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "progname.h" +#include +#include +#include +#include +#include + +#include + +/* On SPARC this program fills in various fields inside of the 'boot' and 'core' + * image files. + * + * The 'boot' image needs to know the OBP path name of the root + * device. It also needs to know the initial block number of + * 'core' (which is 'diskboot' concatenated with 'kernel' and + * all the modules, this is created by grub-mkimage). This resulting + * 'boot' image is 512 bytes in size and is placed in the second block + * of a partition. + * + * The initial 'diskboot' block acts as a loader for the actual GRUB + * kernel. It contains the loading code and then a block list. + * + * The block list of 'core' starts at the end of the 'diskboot' image + * and works it's way backwards towards the end of the code of 'diskboot'. + * + * We patch up the images with the necessary values and write out the + * result. + */ + +#ifdef GRUB_SETUP_SPARC64 +#define grub_target_to_host16(x) grub_be_to_cpu16(x) +#define grub_target_to_host32(x) grub_be_to_cpu32(x) +#define grub_target_to_host64(x) grub_be_to_cpu64(x) +#define grub_host_to_target16(x) grub_cpu_to_be16(x) +#define grub_host_to_target32(x) grub_cpu_to_be32(x) +#define grub_host_to_target64(x) grub_cpu_to_be64(x) +#elif defined (GRUB_SETUP_BIOS) +#define grub_target_to_host16(x) grub_le_to_cpu16(x) +#define grub_target_to_host32(x) grub_le_to_cpu32(x) +#define grub_target_to_host64(x) grub_le_to_cpu64(x) +#define grub_host_to_target16(x) grub_cpu_to_le16(x) +#define grub_host_to_target32(x) grub_cpu_to_le32(x) +#define grub_host_to_target64(x) grub_cpu_to_le64(x) +#else +#error Complete this +#endif + +static void +write_rootdev (grub_device_t root_dev, + char *boot_img, grub_uint64_t first_sector) +{ +#ifdef GRUB_SETUP_BIOS + { + grub_uint8_t *boot_drive; + void *kernel_sector; + boot_drive = (grub_uint8_t *) (boot_img + GRUB_BOOT_MACHINE_BOOT_DRIVE); + kernel_sector = (boot_img + GRUB_BOOT_MACHINE_KERNEL_SECTOR); + + /* FIXME: can this be skipped? */ + *boot_drive = 0xFF; + + grub_set_unaligned64 (kernel_sector, grub_cpu_to_le64 (first_sector)); + } +#endif +#ifdef GRUB_SETUP_SPARC64 + { + void *kernel_byte; + kernel_byte = (boot_img + GRUB_BOOT_AOUT_HEADER_SIZE + + GRUB_BOOT_MACHINE_KERNEL_BYTE); + grub_set_unaligned64 (kernel_byte, + grub_cpu_to_be64 (first_sector << GRUB_DISK_SECTOR_BITS)); + } +#endif +} + +#ifdef GRUB_SETUP_SPARC64 +#define BOOT_SECTOR 1 +#else +#define BOOT_SECTOR 0 +#endif + +/* Helper for setup. */ + +struct blocklists +{ + struct grub_boot_blocklist *first_block, *block; +#ifdef GRUB_SETUP_BIOS + grub_uint16_t current_segment; +#endif + grub_uint16_t last_length; + grub_disk_addr_t first_sector; +}; + +/* Helper for setup. */ +static void +save_blocklists (grub_disk_addr_t sector, unsigned offset, unsigned length, + void *data) +{ + struct blocklists *bl = data; + struct grub_boot_blocklist *prev = bl->block + 1; + grub_uint64_t seclen; + + grub_util_info ("saving <%" GRUB_HOST_PRIuLONG_LONG ",%u,%u>", + (unsigned long long) sector, offset, length); + + if (bl->first_sector == (grub_disk_addr_t) -1) + { + if (offset != 0 || length < GRUB_DISK_SECTOR_SIZE) + grub_util_error ("%s", _("the first sector of the core file is not sector-aligned")); + + bl->first_sector = sector; + sector++; + length -= GRUB_DISK_SECTOR_SIZE; + if (!length) + return; + } + + if (offset != 0 || bl->last_length != 0) + grub_util_error ("%s", _("non-sector-aligned data is found in the core file")); + + seclen = (length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS; + + if (bl->block != bl->first_block + && (grub_target_to_host64 (prev->start) + + grub_target_to_host16 (prev->len)) == sector) + { + grub_uint16_t t = grub_target_to_host16 (prev->len); + t += seclen; + prev->len = grub_host_to_target16 (t); + } + else + { + bl->block->start = grub_host_to_target64 (sector); + bl->block->len = grub_host_to_target16 (seclen); +#ifdef GRUB_SETUP_BIOS + bl->block->segment = grub_host_to_target16 (bl->current_segment); +#endif + + bl->block--; + if (bl->block->len) + grub_util_error ("%s", _("the sectors of the core file are too fragmented")); + } + + bl->last_length = length & (GRUB_DISK_SECTOR_SIZE - 1); +#ifdef GRUB_SETUP_BIOS + bl->current_segment += seclen << (GRUB_DISK_SECTOR_BITS - 4); +#endif +} + +#ifdef GRUB_SETUP_BIOS +/* Context for setup/identify_partmap. */ +struct identify_partmap_ctx +{ + grub_partition_map_t dest_partmap; + grub_partition_t container; + int multiple_partmaps; +}; + +/* Helper for setup. + Unlike root_dev, with dest_dev we're interested in the partition map even + if dest_dev itself is a whole disk. */ +static int +identify_partmap (grub_disk_t disk __attribute__ ((unused)), + const grub_partition_t p, void *data) +{ + struct identify_partmap_ctx *ctx = data; + + if (p->parent != ctx->container) + return 0; + /* NetBSD and OpenBSD subpartitions have metadata inside a partition, + so they are safe to ignore. + */ + if (grub_strcmp (p->partmap->name, "netbsd") == 0 + || grub_strcmp (p->partmap->name, "openbsd") == 0) + return 0; + if (ctx->dest_partmap == NULL) + { + ctx->dest_partmap = p->partmap; + return 0; + } + if (ctx->dest_partmap == p->partmap) + return 0; + ctx->multiple_partmaps = 1; + return 1; +} +#endif + +#ifdef GRUB_SETUP_BIOS +#define SETUP grub_util_bios_setup +#elif GRUB_SETUP_SPARC64 +#define SETUP grub_util_sparc_setup +#else +#error "Shouldn't happen" +#endif + +void +SETUP (const char *dir, + const char *boot_file, const char *core_file, + const char *dest, int force, + int fs_probe, int allow_floppy, + int add_rs_codes __attribute__ ((unused))) /* unused on sparc64 */ +{ + char *core_path; + char *boot_img, *core_img, *boot_path; + char *root = 0; + size_t boot_size, core_size; +#ifdef GRUB_SETUP_BIOS + grub_uint16_t core_sectors; +#endif + grub_device_t root_dev = 0, dest_dev, core_dev; + grub_util_fd_t fp; + struct blocklists bl; + + bl.first_sector = (grub_disk_addr_t) -1; + +#ifdef GRUB_SETUP_BIOS + bl.current_segment = + GRUB_BOOT_I386_PC_KERNEL_SEG + (GRUB_DISK_SECTOR_SIZE >> 4); +#endif + bl.last_length = 0; + + /* Read the boot image by the OS service. */ + boot_path = grub_util_get_path (dir, boot_file); + boot_size = grub_util_get_image_size (boot_path); + if (boot_size != GRUB_DISK_SECTOR_SIZE) + grub_util_error (_("the size of `%s' is not %u"), + boot_path, GRUB_DISK_SECTOR_SIZE); + boot_img = grub_util_read_image (boot_path); + free (boot_path); + + core_path = grub_util_get_path (dir, core_file); + core_size = grub_util_get_image_size (core_path); +#ifdef GRUB_SETUP_BIOS + core_sectors = ((core_size + GRUB_DISK_SECTOR_SIZE - 1) + >> GRUB_DISK_SECTOR_BITS); +#endif + if (core_size < GRUB_DISK_SECTOR_SIZE) + grub_util_error (_("the size of `%s' is too small"), core_path); +#ifdef GRUB_SETUP_BIOS + if (core_size > 0xFFFF * GRUB_DISK_SECTOR_SIZE) + grub_util_error (_("the size of `%s' is too large"), core_path); +#endif + + core_img = grub_util_read_image (core_path); + + /* Have FIRST_BLOCK to point to the first blocklist. */ + bl.first_block = (struct grub_boot_blocklist *) (core_img + + GRUB_DISK_SECTOR_SIZE + - sizeof (*bl.block)); + grub_util_info ("root is `%s', dest is `%s'", root, dest); + + grub_util_info ("Opening dest"); + dest_dev = grub_device_open (dest); + if (! dest_dev) + grub_util_error ("%s", grub_errmsg); + + core_dev = dest_dev; + + { + char **root_devices = grub_guess_root_devices (dir); + char **cur; + int found = 0; + + if (!root_devices) + grub_util_error (_("cannot find a device for %s (is /dev mounted?)"), dir); + + for (cur = root_devices; *cur; cur++) + { + char *drive; + grub_device_t try_dev; + + drive = grub_util_get_grub_dev (*cur); + if (!drive) + continue; + try_dev = grub_device_open (drive); + if (! try_dev) + { + free (drive); + continue; + } + if (!found && try_dev->disk->id == dest_dev->disk->id + && try_dev->disk->dev->id == dest_dev->disk->dev->id) + { + if (root_dev) + grub_device_close (root_dev); + free (root); + root_dev = try_dev; + root = drive; + found = 1; + continue; + } + if (!root_dev) + { + root_dev = try_dev; + root = drive; + continue; + } + grub_device_close (try_dev); + free (drive); + } + if (!root_dev) + { + grub_util_error ("guessing the root device failed, because of `%s'", + grub_errmsg); + } + grub_util_info ("guessed root_dev `%s' from " + "dir `%s'", root_dev->disk->name, dir); + + for (cur = root_devices; *cur; cur++) + free (*cur); + free (root_devices); + } + + grub_util_info ("setting the root device to `%s'", root); + if (grub_env_set ("root", root) != GRUB_ERR_NONE) + grub_util_error ("%s", grub_errmsg); + +#ifdef GRUB_SETUP_BIOS + { + char *tmp_img; + grub_uint8_t *boot_drive_check; + + /* Read the original sector from the disk. */ + tmp_img = xmalloc (GRUB_DISK_SECTOR_SIZE); + if (grub_disk_read (dest_dev->disk, 0, 0, GRUB_DISK_SECTOR_SIZE, tmp_img)) + grub_util_error ("%s", grub_errmsg); + + boot_drive_check = (grub_uint8_t *) (boot_img + + GRUB_BOOT_MACHINE_DRIVE_CHECK); + /* Copy the possible DOS BPB. */ + memcpy (boot_img + GRUB_BOOT_MACHINE_BPB_START, + tmp_img + GRUB_BOOT_MACHINE_BPB_START, + GRUB_BOOT_MACHINE_BPB_END - GRUB_BOOT_MACHINE_BPB_START); + + /* If DEST_DRIVE is a hard disk, enable the workaround, which is + for buggy BIOSes which don't pass boot drive correctly. Instead, + they pass 0x00 or 0x01 even when booted from 0x80. */ + if (!allow_floppy && !grub_util_biosdisk_is_floppy (dest_dev->disk)) + { + /* Replace the jmp (2 bytes) with double nop's. */ + boot_drive_check[0] = 0x90; + boot_drive_check[1] = 0x90; + } + + struct identify_partmap_ctx ctx = { + .dest_partmap = NULL, + .container = dest_dev->disk->partition, + .multiple_partmaps = 0 + }; + int is_ldm; + grub_err_t err; + grub_disk_addr_t *sectors; + int i; + grub_fs_t fs; + unsigned int nsec, maxsec; + + grub_partition_iterate (dest_dev->disk, identify_partmap, &ctx); + + /* Copy the partition table. */ + if (ctx.dest_partmap || + (!allow_floppy && !grub_util_biosdisk_is_floppy (dest_dev->disk))) + memcpy (boot_img + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC, + tmp_img + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC, + GRUB_BOOT_MACHINE_PART_END - GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC); + + free (tmp_img); + + if (ctx.container + && grub_strcmp (ctx.container->partmap->name, "msdos") == 0 + && ctx.dest_partmap + && (ctx.container->msdostype == GRUB_PC_PARTITION_TYPE_NETBSD + || ctx.container->msdostype == GRUB_PC_PARTITION_TYPE_OPENBSD)) + { + grub_util_warn ("%s", _("Attempting to install GRUB to a disk with multiple partition labels or both partition label and filesystem. This is not supported yet.")); + goto unable_to_embed; + } + + fs = grub_fs_probe (dest_dev); + if (!fs) + grub_errno = GRUB_ERR_NONE; + + is_ldm = grub_util_is_ldm (dest_dev->disk); + + if (fs_probe) + { + if (!fs && !ctx.dest_partmap) + grub_util_error (_("unable to identify a filesystem in %s; safety check can't be performed"), + dest_dev->disk->name); + if (fs && !fs->reserved_first_sector) + /* TRANSLATORS: Filesystem may reserve the space just GRUB isn't sure about it. */ + grub_util_error (_("%s appears to contain a %s filesystem which isn't known to " + "reserve space for DOS-style boot. Installing GRUB there could " + "result in FILESYSTEM DESTRUCTION if valuable data is overwritten " + "by grub-setup (--skip-fs-probe disables this " + "check, use at your own risk)"), dest_dev->disk->name, fs->name); + + if (ctx.dest_partmap && strcmp (ctx.dest_partmap->name, "msdos") != 0 + && strcmp (ctx.dest_partmap->name, "gpt") != 0 + && strcmp (ctx.dest_partmap->name, "bsd") != 0 + && strcmp (ctx.dest_partmap->name, "netbsd") != 0 + && strcmp (ctx.dest_partmap->name, "openbsd") != 0 + && strcmp (ctx.dest_partmap->name, "sunpc") != 0) + /* TRANSLATORS: Partition map may reserve the space just GRUB isn't sure about it. */ + grub_util_error (_("%s appears to contain a %s partition map which isn't known to " + "reserve space for DOS-style boot. Installing GRUB there could " + "result in FILESYSTEM DESTRUCTION if valuable data is overwritten " + "by grub-setup (--skip-fs-probe disables this " + "check, use at your own risk)"), dest_dev->disk->name, ctx.dest_partmap->name); + if (is_ldm && ctx.dest_partmap && strcmp (ctx.dest_partmap->name, "msdos") != 0 + && strcmp (ctx.dest_partmap->name, "gpt") != 0) + grub_util_error (_("%s appears to contain a %s partition map and " + "LDM which isn't known to be a safe combination." + " Installing GRUB there could " + "result in FILESYSTEM DESTRUCTION if valuable data" + " is overwritten " + "by grub-setup (--skip-fs-probe disables this " + "check, use at your own risk)"), + dest_dev->disk->name, ctx.dest_partmap->name); + + } + + if (! ctx.dest_partmap && ! fs && !is_ldm) + { + grub_util_warn ("%s", _("Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.")); + goto unable_to_embed; + } + if (ctx.multiple_partmaps || (ctx.dest_partmap && fs) || (is_ldm && fs)) + { + grub_util_warn ("%s", _("Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet.")); + goto unable_to_embed; + } + + if (ctx.dest_partmap && !ctx.dest_partmap->embed) + { + grub_util_warn (_("Partition style `%s' doesn't support embedding"), + ctx.dest_partmap->name); + goto unable_to_embed; + } + + if (fs && !fs->embed) + { + grub_util_warn (_("File system `%s' doesn't support embedding"), + fs->name); + goto unable_to_embed; + } + + nsec = core_sectors; + + if (add_rs_codes) + maxsec = 2 * core_sectors; + else + maxsec = core_sectors; + + if (maxsec > ((0x78000 - GRUB_KERNEL_I386_PC_LINK_ADDR) + >> GRUB_DISK_SECTOR_BITS)) + maxsec = ((0x78000 - GRUB_KERNEL_I386_PC_LINK_ADDR) + >> GRUB_DISK_SECTOR_BITS); + + if (is_ldm) + err = grub_util_ldm_embed (dest_dev->disk, &nsec, maxsec, + GRUB_EMBED_PCBIOS, §ors); + else if (ctx.dest_partmap) + err = ctx.dest_partmap->embed (dest_dev->disk, &nsec, maxsec, + GRUB_EMBED_PCBIOS, §ors); + else + err = fs->embed (dest_dev, &nsec, maxsec, + GRUB_EMBED_PCBIOS, §ors); + if (!err && nsec < core_sectors) + { + err = grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("Your embedding area is unusually small. " + "core.img won't fit in it.")); + } + + if (err) + { + grub_util_warn ("%s", grub_errmsg); + grub_errno = GRUB_ERR_NONE; + goto unable_to_embed; + } + + assert (nsec <= maxsec); + + /* Clean out the blocklists. */ + bl.block = bl.first_block; + while (bl.block->len) + { + grub_memset (bl.block, 0, sizeof (*bl.block)); + + bl.block--; + + if ((char *) bl.block <= core_img) + grub_util_error ("%s", _("no terminator in the core image")); + } + + bl.block = bl.first_block; + for (i = 0; i < nsec; i++) + save_blocklists (sectors[i] + grub_partition_get_start (ctx.container), + 0, GRUB_DISK_SECTOR_SIZE, &bl); + + /* Make sure that the last blocklist is a terminator. */ + if (bl.block == bl.first_block) + bl.block--; + bl.block->start = 0; + bl.block->len = 0; + bl.block->segment = 0; + + write_rootdev (root_dev, boot_img, bl.first_sector); + + /* Round up to the nearest sector boundary, and zero the extra memory */ + core_img = xrealloc (core_img, nsec * GRUB_DISK_SECTOR_SIZE); + assert (core_img && (nsec * GRUB_DISK_SECTOR_SIZE >= core_size)); + memset (core_img + core_size, 0, nsec * GRUB_DISK_SECTOR_SIZE - core_size); + + bl.first_block = (struct grub_boot_blocklist *) (core_img + + GRUB_DISK_SECTOR_SIZE + - sizeof (*bl.block)); + + grub_size_t no_rs_length; + no_rs_length = grub_target_to_host16 + (grub_get_unaligned16 (core_img + + GRUB_DISK_SECTOR_SIZE + + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH)); + + if (no_rs_length == 0xffff) + grub_util_error ("%s", _("core.img version mismatch")); + + if (add_rs_codes) + { + grub_set_unaligned32 ((core_img + GRUB_DISK_SECTOR_SIZE + + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY), + grub_host_to_target32 (nsec * GRUB_DISK_SECTOR_SIZE - core_size)); + + void *tmp = xmalloc (core_size); + grub_memcpy (tmp, core_img, core_size); + grub_reed_solomon_add_redundancy (core_img + no_rs_length + GRUB_DISK_SECTOR_SIZE, + core_size - no_rs_length - GRUB_DISK_SECTOR_SIZE, + nsec * GRUB_DISK_SECTOR_SIZE + - core_size); + assert (grub_memcmp (tmp, core_img, core_size) == 0); + free (tmp); + } + + /* Write the core image onto the disk. */ + for (i = 0; i < nsec; i++) + grub_disk_write (dest_dev->disk, sectors[i], 0, + GRUB_DISK_SECTOR_SIZE, + core_img + i * GRUB_DISK_SECTOR_SIZE); + + grub_free (sectors); + + goto finish; + } + +unable_to_embed: +#endif + + if (dest_dev->disk->dev->id != root_dev->disk->dev->id) + grub_util_error ("%s", _("embedding is not possible, but this is required for " + "RAID and LVM install")); + + { + grub_fs_t fs; + fs = grub_fs_probe (root_dev); + if (!fs) + grub_util_error (_("can't determine filesystem on %s"), root); + + if (!fs->blocklist_install) + grub_util_error (_("filesystem `%s' doesn't support blocklists"), + fs->name); + } + +#ifdef GRUB_SETUP_BIOS + if (dest_dev->disk->id != root_dev->disk->id + || dest_dev->disk->dev->id != root_dev->disk->dev->id) + /* TRANSLATORS: cross-disk refers to /boot being on one disk + but MBR on another. */ + grub_util_error ("%s", _("embedding is not possible, but this is required for " + "cross-disk install")); +#else + core_dev = root_dev; +#endif + + grub_util_warn ("%s", _("Embedding is not possible. GRUB can only be installed in this " + "setup by using blocklists. However, blocklists are UNRELIABLE and " + "their use is discouraged.")); + if (! force) + /* TRANSLATORS: Here GRUB refuses to continue with blocklist install. */ + grub_util_error ("%s", _("will not proceed with blocklists")); + + /* The core image must be put on a filesystem unfortunately. */ + grub_util_info ("will leave the core image on the filesystem"); + + grub_util_biosdisk_flush (root_dev->disk); + + /* Clean out the blocklists. */ + bl.block = bl.first_block; + while (bl.block->len) + { + bl.block->start = 0; + bl.block->len = 0; +#ifdef GRUB_SETUP_BIOS + bl.block->segment = 0; +#endif + + bl.block--; + + if ((char *) bl.block <= core_img) + grub_util_error ("%s", _("no terminator in the core image")); + } + + bl.block = bl.first_block; + + grub_install_get_blocklist (root_dev, core_path, core_img, core_size, + save_blocklists, &bl); + + if (bl.first_sector == (grub_disk_addr_t)-1) + grub_util_error ("%s", _("can't retrieve blocklists")); + +#ifdef GRUB_SETUP_SPARC64 + { + char *boot_devpath; + boot_devpath = (char *) (boot_img + + GRUB_BOOT_AOUT_HEADER_SIZE + + GRUB_BOOT_MACHINE_BOOT_DEVPATH); + if (dest_dev->disk->id != root_dev->disk->id + || dest_dev->disk->dev->id != root_dev->disk->dev->id) + { + char *dest_ofpath; + dest_ofpath + = grub_util_devname_to_ofpath (grub_util_biosdisk_get_osdev (root_dev->disk)); + /* FIXME handle NULL result */ + grub_util_info ("dest_ofpath is `%s'", dest_ofpath); + strncpy (boot_devpath, dest_ofpath, + GRUB_BOOT_MACHINE_BOOT_DEVPATH_END + - GRUB_BOOT_MACHINE_BOOT_DEVPATH - 1); + boot_devpath[GRUB_BOOT_MACHINE_BOOT_DEVPATH_END + - GRUB_BOOT_MACHINE_BOOT_DEVPATH - 1] = 0; + free (dest_ofpath); + } + else + { + grub_util_info ("non cross-disk install"); + memset (boot_devpath, 0, GRUB_BOOT_MACHINE_BOOT_DEVPATH_END + - GRUB_BOOT_MACHINE_BOOT_DEVPATH); + } + grub_util_info ("boot device path %s", boot_devpath); + } +#endif + + write_rootdev (root_dev, boot_img, bl.first_sector); + + /* Write the first two sectors of the core image onto the disk. */ + grub_util_info ("opening the core image `%s'", core_path); + fp = grub_util_fd_open (core_path, GRUB_UTIL_FD_O_WRONLY); + if (! GRUB_UTIL_FD_IS_VALID (fp)) + grub_util_error (_("cannot open `%s': %s"), core_path, + grub_util_fd_strerror ()); + + if (grub_util_fd_write (fp, core_img, GRUB_DISK_SECTOR_SIZE * 2) + != GRUB_DISK_SECTOR_SIZE * 2) + grub_util_error (_("cannot write to `%s': %s"), + core_path, strerror (errno)); + grub_util_fd_sync (fp); + grub_util_fd_close (fp); + grub_util_biosdisk_flush (root_dev->disk); + + grub_disk_cache_invalidate_all (); + + { + char *buf, *ptr = core_img; + size_t len = core_size; + grub_uint64_t blk; + grub_partition_t container = core_dev->disk->partition; + grub_err_t err; + + core_dev->disk->partition = 0; + + buf = xmalloc (core_size); + blk = bl.first_sector; + err = grub_disk_read (core_dev->disk, blk, 0, GRUB_DISK_SECTOR_SIZE, buf); + if (err) + grub_util_error (_("cannot read `%s': %s"), core_dev->disk->name, + grub_errmsg); + if (grub_memcmp (buf, ptr, GRUB_DISK_SECTOR_SIZE) != 0) + grub_util_error ("%s", _("blocklists are invalid")); + + ptr += GRUB_DISK_SECTOR_SIZE; + len -= GRUB_DISK_SECTOR_SIZE; + + bl.block = bl.first_block; + while (bl.block->len) + { + size_t cur = grub_target_to_host16 (bl.block->len) << GRUB_DISK_SECTOR_BITS; + blk = grub_target_to_host64 (bl.block->start); + + if (cur > len) + cur = len; + + err = grub_disk_read (core_dev->disk, blk, 0, cur, buf); + if (err) + grub_util_error (_("cannot read `%s': %s"), core_dev->disk->name, + grub_errmsg); + + if (grub_memcmp (buf, ptr, cur) != 0) + grub_util_error ("%s", _("blocklists are invalid")); + + ptr += cur; + len -= cur; + bl.block--; + + if ((char *) bl.block <= core_img) + grub_util_error ("%s", _("no terminator in the core image")); + } + if (len) + grub_util_error ("%s", _("blocklists are incomplete")); + core_dev->disk->partition = container; + free (buf); + } + +#ifdef GRUB_SETUP_BIOS + finish: +#endif + + /* Write the boot image onto the disk. */ + if (grub_disk_write (dest_dev->disk, BOOT_SECTOR, + 0, GRUB_DISK_SECTOR_SIZE, boot_img)) + grub_util_error ("%s", grub_errmsg); + + grub_util_biosdisk_flush (root_dev->disk); + grub_util_biosdisk_flush (dest_dev->disk); + + free (core_path); + free (core_img); + free (boot_img); + grub_device_close (dest_dev); + grub_device_close (root_dev); +} + diff --git a/util/setup_bios.c b/util/setup_bios.c new file mode 100644 index 000000000..38f4d5eab --- /dev/null +++ b/util/setup_bios.c @@ -0,0 +1,2 @@ +#define GRUB_SETUP_BIOS 1 +#include "setup.c" diff --git a/util/setup_sparc.c b/util/setup_sparc.c new file mode 100644 index 000000000..89310a27a --- /dev/null +++ b/util/setup_sparc.c @@ -0,0 +1,2 @@ +#define GRUB_SETUP_SPARC64 1 +#include "setup.c" diff --git a/util/spkmodem-recv.c b/util/spkmodem-recv.c new file mode 100644 index 000000000..9083c1aab --- /dev/null +++ b/util/spkmodem-recv.c @@ -0,0 +1,115 @@ +/* spkmodem-recv.c - decode spkmodem signals */ +/* + * Copyright (C) 2013 Free Software Foundation, Inc. + * + * spkmodem-recv is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * spkmodem-recv is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with spkmodem-recv. If not, see . + */ + +#include +#include +#include + +/* Compilation: gcc -o spkmodem-recv spkmodem-recv */ +/* Usage: parecord --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv */ + +#define SAMPLES_PER_TRAME 240 +#define FREQ_SEP_MIN 5 +#define FREQ_SEP_MAX 15 +#define FREQ_DATA_MIN 15 +#define FREQ_DATA_THRESHOLD 25 +#define FREQ_DATA_MAX 60 +#define THRESHOLD 500 + +#define DEBUG 0 +#define FLUSH_TIMEOUT 1 + +static signed short trame[2 * SAMPLES_PER_TRAME]; +static signed short pulse[2 * SAMPLES_PER_TRAME]; +static int ringpos = 0; +static int pos, f1, f2; +static int amplitude = 0; +static int lp = 0; + +static void +read_sample (void) +{ + amplitude -= abs (trame[ringpos]); + f1 -= pulse[ringpos]; + f1 += pulse[(ringpos + SAMPLES_PER_TRAME) % (2 * SAMPLES_PER_TRAME)]; + f2 -= pulse[(ringpos + SAMPLES_PER_TRAME) % (2 * SAMPLES_PER_TRAME)]; + fread (trame + ringpos, 1, sizeof (trame[0]), stdin); + amplitude += abs (trame[ringpos]); + + if (pos ? (trame[ringpos] < -THRESHOLD) + : (trame[ringpos] > +THRESHOLD)) + { + pulse[ringpos] = 1; + pos = !pos; + f2++; + } + else + pulse[ringpos] = 0; + ringpos++; + ringpos %= 2 * SAMPLES_PER_TRAME; + lp++; +} + +int +main () +{ + int bitn = 7; + char c = 0; + int i; + int llp = 0; + while (!feof (stdin)) + { + if (lp > 3 * SAMPLES_PER_TRAME) + { + bitn = 7; + c = 0; + lp = 0; + llp++; + } + if (llp == FLUSH_TIMEOUT) + fflush (stdout); + if (f2 > FREQ_SEP_MIN && f2 < FREQ_SEP_MAX + && f1 > FREQ_DATA_MIN && f1 < FREQ_DATA_MAX) + { +#if DEBUG + printf ("%d %d %d @%d\n", f1, f2, FREQ_DATA_THRESHOLD, + ftell (stdin) - sizeof (trame)); +#endif + if (f1 < FREQ_DATA_THRESHOLD) + c |= (1 << bitn); + bitn--; + if (bitn < 0) + { +#if DEBUG + printf ("<%c, %x>", c, c); +#else + printf ("%c", c); +#endif + bitn = 7; + c = 0; + } + lp = 0; + llp = 0; + for (i = 0; i < SAMPLES_PER_TRAME; i++) + read_sample (); + continue; + } + read_sample (); + } + return 0; +} -- 2.39.5